%global appLoc serverName;
%let compiled_apploc=/Public/app/dc;
%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc));
%let sasjs_clickmeservice=clickme;
%let syscc=0;
options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax;
/* user supplied build vars */
/* user supplied build vars end */
/* system macro dependencies for build process */
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)
)/des='ungraceful abort' /*STORE SOURCE*/;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mf_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%abort;
%mend mf_abort;
/** @endcond */
%macro mfv_existfolder(path
)/*/STORE SOURCE*/;
%mf_abort(
iftrue=(&syscc ne 0),
msg=Cannot enter mfv_existfolder.sas with syscc=&syscc
)
%local fref rc;
%let fref=%mf_getuniquefileref();
%if %sysfunc(filename(fref,,filesrvc,folderPath="&path"))=0 %then %do;
1
%let rc=%sysfunc(filename(fref));
%end;
%else %do;
0
%let syscc=0;
%end;
%mend mfv_existfolder;
%macro mv_createfolder(path=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%if %mfv_existfolder(&path)=1 %then %do;
%put &sysmacroname: &path already exists;
%return;
%end;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local subfolder_cnt; /* determine the number of subfolders */
%let subfolder_cnt=%sysfunc(countw(&path,/));
%local href; /* resource address (none for root) */
%let href="/folders/folders?parentFolderUri=/folders/folders/none";
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%local x newpath subfolder;
%do x=1 %to &subfolder_cnt;
%let subfolder=%scan(&path,&x,%str(/));
%let newpath=&newpath/&subfolder;
%local fname1;
%let fname1=%mf_getuniquefileref();
%put &sysmacroname checking to see if &newpath exists;
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&newpath";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
%mp_abort(
iftrue=(
&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 404
)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if &mdebug=1 %then %do;
%put &sysmacroname following check to see if &newpath exists:;
%put _local_;
data _null_;
set &fname1;
input;
putlog _infile_;
run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=200 %then %do;
%*put &sysmacroname &newpath exists so grab the follow on link ;
data _null_;
set &libref1..links;
if rel='createChild' then
call symputx('href',quote(cats("&base_uri",href)),'l');
run;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname &newpath not found - creating it now;
%local fname2;
%let fname2=%mf_getuniquefileref();
data _null_;
length json $1000;
json=cats("'"
,'{"name":'
,quote(trim(symget('subfolder')))
,',"description":'
,quote("&subfolder, created by &sysmacroname")
,',"type":"folder"}'
,"'"
);
call symputx('json',json,'l');
run;
proc http method='POST'
in=&json
out=&fname2
&oauth_bearer
url=%unquote(%superq(href));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Content-Type'='application/vnd.sas.content.folder+json'
'Accept'='application/vnd.sas.content.folder+json';
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%put &=SYS_PROCHTTP_STATUS_PHRASE;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%put &sysmacroname &newpath now created. Grabbing the follow on link ;
data _null_;
set &libref2..links;
if rel='createChild' then do;
call symputx('href',quote(cats("&base_uri",href)),'l');
&dbg put (_all_)(=);
end;
run;
libname &libref2 clear;
filename &fname2 clear;
%end;
filename &fname1 clear;
libname &libref1 clear;
%end;
%mend mv_createfolder;
%macro mv_deletejes(path=
,name=
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: fetching details for &path ;
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;
%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;
%return;
%end;
%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%put &sysmacroname: grab the follow on link ;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then call symputx('mref',quote("&base_uri"!!trim(href)),'l');
run;
/* get the children */
%local fname1a;
%let fname1a=%mf_getuniquefileref();
proc http method='GET' out=&fname1a &oauth_bearer
url=%unquote(%superq(mref));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%put &=SYS_PROCHTTP_STATUS_CODE;
%local libref1a;
%let libref1a=%mf_getuniquelibref();
libname &libref1a JSON fileref=&fname1a;
%local uri found;
%let found=0;
%put Getting object uri from &libref1a..items;
data _null_;
length contenttype name $1000;
set &libref1a..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then do;
call symputx('uri',cats("&base_uri",uri),'l');
call symputx('found',1,'l');
end;
run;
%if &found=0 %then %do;
%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;
%return;
%end;
proc http method="DELETE" url="&uri" &oauth_bearer;
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="*/*";/**/
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;
data _null_; infile &fname2; input; putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%else %put &sysmacroname: &path/&name successfully deleted;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
filename &fname1a clear;
libname &libref1a clear;
%mend mv_deletejes;
%macro mp_base64copy(
inref=0,
outref=0,
action=ENCODE
)/*/STORE SOURCE*/;
%let inref=%upcase(&inref);
%let outref=%upcase(&outref);
%let action=%upcase(&action);
%local infound outfound;
%let infound=0;
%let outfound=0;
data _null_;
set sashelp.vextfl(where=(fileref="&inref" or fileref="&outref"));
if fileref="&inref" then call symputx('infound',1,'l');
if fileref="&outref" then call symputx('outfound',1,'l');
run;
%mp_abort(iftrue= (&infound=0)
,mac=&sysmacroname
,msg=%str(INREF &inref NOT FOUND!)
)
%mp_abort(iftrue= (&outref=0)
,mac=&sysmacroname
,msg=%str(OUTREF NOT PROVIDED!)
)
%mp_abort(iftrue= (&action ne ENCODE and &action ne DECODE)
,mac=&sysmacroname
,msg=%str(Invalid action! Should be ENCODE OR DECODE)
)
%if &outfound=0 %then %do;
filename &outref temp lrecl=2097088;
%end;
%if &action=ENCODE %then %do;
data _null_;
length b64 $ 76 line $ 57;
retain line "";
infile &inref recfm=F lrecl= 1 end=eof;
input @1 stream $char1.;
file &outref recfm=N;
substr(line,(_N_-(CEIL(_N_/57)-1)*57),1) = byte(rank(stream));
if mod(_N_,57)=0 or EOF then do;
if eof then b64=put(trim(line),$base64X76.);
else b64=put(line, $base64X76.);
put b64 + (-1) @;
line="";
end;
run;
%end;
%else %if &action=DECODE %then %do;
data _null_;
length filein 8 fileout 8;
filein = fopen("&inref",'I',4,'B');
fileout = fopen("&outref",'O',3,'B');
char= '20'x;
do while(fread(filein)=0);
length raw $4;
do i=1 to 4;
rc=fget(filein,char,1);
substr(raw,i,1)=char;
end;
rc = fput(fileout,input(raw,$base64X4.));
rc = fwrite(fileout);
end;
rc = fclose(filein);
rc = fclose(fileout);
run;
%end;
%mend mp_base64copy;
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
/* system macro dependencies for build process end*/
/* system macros for build process */
%macro mv_createwebservice(path=
,name=
,desc=Created by the mv_createwebservice.sas macro
,precode=
,code=ft15f001
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,replace=YES
,adapter=sasjs
,mdebug=0
,contextname=
,debug=0 /* @TODO - Deprecate */
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
/* initial validation checking */
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1)
,mac=&sysmacroname
,msg=%str(name value must be provided)
)
options noquotelenmax;
* remove any trailing slash ;
%if "%substr(&path,%length(&path),1)" = "/" %then
%let path=%substr(&path,1,%length(&path)-1);
/* ensure folder exists */
%put &sysmacroname: Path &path being checked / created;
%mv_createfolder(path=&path)
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetching folder details for provided path */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&path";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1;
input;
putlog _infile_;
run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* path exists. Grab follow on link to check members */
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..links;
if rel='members' then
call symputx('membercheck',quote("&base_uri"!!trim(href)),'l');
else if rel='self' then call symputx('parentFolderUri',href,'l');
run;
data _null_;
set &libref1..root;
call symputx('folderid',id,'l');
run;
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET'
out=&fname2
&oauth_bearer
url=%unquote(%superq(membercheck));
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
'Accept'='application/vnd.sas.collection+json'
'Accept-Language'='string';
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
/*data _null_;infile &fname2;input;putlog _infile_;run;*/
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%if %upcase(&replace)=YES %then %do;
%mv_deletejes(path=&path, name=&name)
%end;
%else %do;
/* check that job does not already exist in that folder */
%local libref2;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
%local exists; %let exists=0;
data _null_;
set &libref2..items;
if contenttype='jobDefinition' and upcase(name)="%upcase(&name)" then
call symputx('exists',1,'l');
run;
%mp_abort(iftrue=(&exists=1)
,mac=&sysmacroname
,msg=%str(Job &name already exists in &path)
)
libname &libref2 clear;
%end;
/* set up the body of the request to create the service */
%local fname3;
%let fname3=%mf_getuniquefileref();
data _null_;
file &fname3 TERMSTR=' ';
length string $32767;
string=cats('{"version": 0,"name":"'
,"&name"
,'","type":"Compute","parameters":[{"name":"_addjesbeginendmacros"'
,',"type":"CHARACTER","defaultValue":"false"}');
context=quote(cats(symget('contextname')));
if context ne '""' then do;
string=cats(string,',{"version": 1,"name": "_contextName","defaultValue":'
,context,',"type":"CHARACTER","label":"Context Name","required": false}');
end;
string=cats(string,'],"code":"');
put string;
run;
/**
* Add webout macro
* These put statements are auto generated - to change the macro, change the
* source (mv_webout) and run `build.py`
*/
filename &adapter temp lrecl=3000;
data _null_;
file &adapter;
put "/* Created on %sysfunc(datetime(),datetime19.) by &sysuserid */";
/* WEBOUT BEGIN */
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y ';
put ' ,engine=DATASTEP ';
put ' ,missing=NULL ';
put ' ,showmeta=N ';
put ' ,maxobs=MAX ';
put ')/*/STORE SOURCE*/; ';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval ';
put ' tmpds1 tmpds2 tmpds3 tmpds4; ';
put '%let numcols=0; ';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;); ';
put ' ';
put '%if &action=OPEN %then %do; ';
put ' options nobomfile; ';
put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; ';
put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if (&action=ARR or &action=OBJ) %then %do; ';
put ' /* force variable names to always be uppercase in the JSON */ ';
put ' options validvarname=upcase; ';
put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation ';
put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ ';
put ' filename _sjs1 temp lrecl=200 ; ';
put ' data _null_; file _sjs1 encoding=''utf-8''; ';
put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; ';
put ' run; ';
put ' /* now write to _webout 1 char at a time */ ';
put ' data _null_; ';
put ' infile _sjs1 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs1 clear; ';
put ' ';
put ' /* grab col defs */ ';
put ' proc contents noprint data=&ds ';
put ' out=_data_(keep=name type length format formatl formatd varnum label); ';
put ' run; ';
put ' %let colinfo=%scan(&syslast,2,.); ';
put ' proc sort data=&colinfo; ';
put ' by varnum; ';
put ' run; ';
put ' /* move meta to mac vars */ ';
put ' data &colinfo; ';
put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); ';
put ' set &colinfo end=last nobs=nobs; ';
put ' name=upcase(name); ';
put ' /* fix formats */ ';
put ' if type=2 or type=6 then do; ';
put ' typelong=''char''; ';
put ' length fmt $49.; ';
put ' if format='''' then fmt=cats(''$'',length,''.''); ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else fmt=cats(format,formatl,''.''); ';
put ' end; ';
put ' else do; ';
put ' typelong=''num''; ';
put ' if format='''' then fmt=''best.''; ';
put ' else if formatl=0 then fmt=cats(format,''.''); ';
put ' else if formatd=0 then fmt=cats(format,formatl,''.''); ';
put ' else fmt=cats(format,formatl,''.'',formatd); ';
put ' end; ';
put ' /* 32 char unique name */ ';
put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); ';
put ' ';
put ' call symputx(cats(''name'',_n_),name,''l''); ';
put ' call symputx(cats(''newname'',_n_),newname,''l''); ';
put ' call symputx(cats(''length'',_n_),length,''l''); ';
put ' call symputx(cats(''fmt'',_n_),fmt,''l''); ';
put ' call symputx(cats(''type'',_n_),type,''l''); ';
put ' call symputx(cats(''typelong'',_n_),typelong,''l''); ';
put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); ';
put ' /* overwritten when fmt=Y and a custom format exists in catalog */ ';
put ' if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l''); ';
put ' else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l''); ';
put ' run; ';
put ' ';
put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql; ';
put ' select count(*) into: lastobs from &ds; ';
put ' %if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs)); ';
put ' ';
put ' %if &engine=PROCJSON %then %do; ';
put ' %if &missing=STRING %then %do; ';
put ' %put &sysmacroname: Special Missings not supported in proc json.; ';
put ' %put &sysmacroname: Switching to DATASTEP engine; ';
put ' %goto datastep; ';
put ' %end; ';
put ' data &tempds; ';
put ' set &ds; ';
put ' &stmt_obs; ';
put ' %if &fmt=N %then format _numeric_ best32.;; ';
put ' /* PRETTY is necessary to avoid line truncation in large files */ ';
put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; ';
put ' proc json out=_sjs2 pretty ';
put ' %if &action=ARR %then nokeys ; ';
put ' ;export &tempds / nosastags fmtnumeric; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs2 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs2 clear; ';
put ' %end; ';
put ' %else %if &engine=DATASTEP %then %do; ';
put ' %datastep: ';
put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 ';
put ' %then %do; ';
put ' %put &sysmacroname: &ds NOT FOUND!!!; ';
put ' %return; ';
put ' %end; ';
put ' ';
put ' %if &fmt=Y %then %do; ';
put ' /** ';
put ' * Extract format definitions ';
put ' * First, by getting library locations from dictionary.formats ';
put ' * Then, by exporting the width using proc format ';
put ' * Cannot use maxw from sashelp.vformat as not always populated ';
put ' * Cannot use fmtinfo() as not supported in all flavours ';
put ' */ ';
put ' %let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' %let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); ';
put ' proc sql noprint; ';
put ' create table &tmpds1 as ';
put ' select cats(libname,''.'',memname) as FMTCAT, ';
put ' FMTNAME ';
put ' from dictionary.formats ';
put ' where fmttype=''F'' and libname is not null ';
put ' and fmtname in (select format from &colinfo where format is not null) ';
put ' order by 1; ';
put ' create table &tmpds2( ';
put ' FMTNAME char(32), ';
put ' LENGTH num ';
put ' ); ';
put ' %local catlist cat fmtlist i; ';
put ' select distinct fmtcat into: catlist separated by '' '' from &tmpds1; ';
put ' %do i=1 %to %sysfunc(countw(&catlist,%str( ))); ';
put ' %let cat=%scan(&catlist,&i,%str( )); ';
put ' proc sql; ';
put ' select distinct fmtname into: fmtlist separated by '' '' ';
put ' from &tmpds1 where fmtcat="&cat"; ';
put ' proc format lib=&cat cntlout=&tmpds3(keep=fmtname length); ';
put ' select &fmtlist; ';
put ' run; ';
put ' proc sql; ';
put ' insert into &tmpds2 select distinct fmtname,length from &tmpds3; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' create table &tmpds4 as ';
put ' select a.*, b.length as MAXW ';
put ' from &colinfo a ';
put ' left join &tmpds2 b ';
put ' on cats(a.format)=cats(upcase(b.fmtname)) ';
put ' order by a.varnum; ';
put ' data _null_; ';
put ' set &tmpds4; ';
put ' if not missing(maxw); ';
put ' call symputx( ';
put ' cats(''fmtlen'',_n_), ';
put ' /* vars need extra padding due to JSON escaping of special chars */ ';
put ' min(32767,ceil((max(length,maxw)+10)*1.5)) ';
put ' ,''l'' ';
put ' ); ';
put ' run; ';
put ' ';
put ' /* configure varlenchk - as we are explicitly shortening the variables */ ';
put ' %let optval=%sysfunc(getoption(varlenchk)); ';
put ' options varlenchk=NOWARN; ';
put ' data _data_(compress=char); ';
put ' /* shorten the new vars */ ';
put ' length ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i $&&fmtlen&i ';
put ' %end; ';
put ' ; ';
put ' /* rename on entry */ ';
put ' set &ds(rename=( ';
put ' %do i=1 %to &numcols; ';
put ' &&name&i=&&newname&i ';
put ' %end; ';
put ' )); ';
put ' &stmt_obs; ';
put ' ';
put ' drop ';
put ' %do i=1 %to &numcols; ';
put ' &&newname&i ';
put ' %end; ';
put ' ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=num %then %do; ';
put ' &&name&i=cats(put(&&newname&i,&&fmt&i)); ';
put ' %end; ';
put ' %else %do; ';
put ' &&name&i=put(&&newname&i,&&fmt&i); ';
put ' %end; ';
put ' %end; ';
put ' if _error_ then do; ';
put ' call symputx(''syscc'',1012); ';
put ' stop; ';
put ' end; ';
put ' run; ';
put ' %let fmtds=&syslast; ';
put ' options varlenchk=&optval; ';
put ' %end; ';
put ' ';
put ' proc format; /* credit yabwon for special null removal */ ';
put ' value bart (default=40) ';
put ' %if &missing=NULL %then %do; ';
put ' ._ - .z = null ';
put ' %end; ';
put ' %else %do; ';
put ' ._ = [quote()] ';
put ' . = null ';
put ' .a - .z = [quote()] ';
put ' %end; ';
put ' other = [best.]; ';
put ' ';
put ' data &tempds; ';
put ' attrib _all_ label=''''; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' length &&name&i $&&fmtlen&i...; ';
put ' format &&name&i $&&fmtlen&i...; ';
put ' %end; ';
put ' %end; ';
put ' %if &fmt=Y %then %do; ';
put ' set &fmtds; ';
put ' %end; ';
put ' %else %do; ';
put ' set &ds; ';
put ' %end; ';
put ' &stmt_obs; ';
put ' format _numeric_ bart.; ';
put ' %do i=1 %to &numcols; ';
put ' %if &&typelong&i=char or &fmt=Y %then %do; ';
put ' if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' &&name&i=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else &&name&i=quote(cats(&&name&i)); ';
put ' %end; ';
put ' %end; ';
put ' run; ';
put ' ';
put ' filename _sjs3 temp lrecl=131068 ; ';
put ' data _null_; ';
put ' file _sjs3 encoding=''utf-8''; ';
put ' if _n_=1 then put "["; ';
put ' set &tempds; ';
put ' if _n_>1 then put "," @; put ';
put ' %if &action=ARR %then "[" ; %else "{" ; ';
put ' %do i=1 %to &numcols; ';
put ' %if &i>1 %then "," ; ';
put ' %if &action=OBJ %then """&&name&i"":" ; ';
put ' "&&name&i"n /* name literal for reserved variable names */ ';
put ' %end; ';
put ' %if &action=ARR %then "]" ; %else "}" ; ; ';
put ' ';
put ' /* close out the table */ ';
put ' data _null_; ';
put ' file _sjs3 mod encoding=''utf-8''; ';
put ' put '']''; ';
put ' run; ';
put ' data _null_; ';
put ' infile _sjs3 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs3 clear; ';
put ' %end; ';
put ' ';
put ' proc sql; ';
put ' drop table &colinfo, &tempds; ';
put ' ';
put ' %if %substr(&showmeta,1,1)=Y %then %do; ';
put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; ';
put ' data _null_; ';
put ' file _sjs4; ';
put ' length label $350; ';
put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; ';
put ' do i=1 to &numcols; ';
put ' name=quote(trim(symget(cats(''name'',i)))); ';
put ' format=quote(trim(symget(cats(''fmt'',i)))); ';
put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); ';
put ' length=quote(trim(symget(cats(''length'',i)))); ';
put ' type=quote(trim(symget(cats(''typelong'',i)))); ';
put ' if i>1 then put "," @@; ';
put ' put name '':{"format":'' format '',"label":'' label ';
put ' '',"length":'' length '',"type":'' type ''}''; ';
put ' end; ';
put ' put ''}}''; ';
put ' run; ';
put ' /* send back to webout */ ';
put ' data _null_; ';
put ' infile _sjs4 lrecl=1 recfm=n; ';
put ' file &jref mod lrecl=1 recfm=n; ';
put ' input sourcechar $char1. @@; ';
put ' format sourcechar hex2.; ';
put ' put sourcechar char1. @@; ';
put ' run; ';
put ' filename _sjs4 clear; ';
put ' %end; ';
put '%end; ';
put ' ';
put '%else %if &action=CLOSE %then %do; ';
put ' data _null_; file &jref encoding=''utf-8'' mod ; ';
put ' put "}"; ';
put ' run; ';
put '%end; ';
put '%mend mp_jsonout; ';
put ' ';
put '%macro mf_getuser( ';
put ')/*/STORE SOURCE*/; ';
put ' %local user; ';
put ' ';
put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; ';
put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; ';
put ' %let user=&SYS_COMPUTE_SESSION_OWNER; ';
put ' %end; ';
put ' %else %if %symexist(_metaperson) %then %do; ';
put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; ';
put ' /* sometimes SAS will add @domain extension - remove for consistency */ ';
put ' /* but be sure to quote in case of usernames with commas */ ';
put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); ';
put ' %end; ';
put ' %else %let user=&sysuserid; ';
put ' ';
put ' %quote(&user) ';
put ' ';
put '%mend mf_getuser; ';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL ';
put ' ,showmeta=N,maxobs=MAX,workobs=0 ';
put '); ';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name ';
put ' sasjs_tables SYS_JES_JOB_URI; ';
put '%if %index("&_debug",log) %then %let _debug=131; ';
put ' ';
put '%local i tempds table; ';
put '%let action=%upcase(&action); ';
put ' ';
put '%if &action=FETCH %then %do; ';
put ' %if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do; ';
put ' options mprint notes mprintnest; ';
put ' %end; ';
put ' ';
put ' %if not %symexist(_webin_fileuri1) %then %do; ';
put ' %let _webin_file_count=%eval(&_webin_file_count+0); ';
put ' %let _webin_fileuri1=&_webin_fileuri; ';
put ' %let _webin_name1=&_webin_name; ';
put ' %end; ';
put ' ';
put ' /* if the sasjs_tables param is passed, we expect param based upload */ ';
put ' %if %length(&sasjs_tables.X)>1 %then %do; ';
put ' ';
put ' /* convert data from macro variables to datasets */ ';
put ' %do i=1 %to %sysfunc(countw(&sasjs_tables)); ';
put ' %let table=%scan(&sasjs_tables,&i,%str( )); ';
put ' %if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1; ';
put ' data _null_; ';
put ' file "%sysfunc(pathname(work))/&table..csv" recfm=n; ';
put ' retain nrflg 0; ';
put ' length line $32767; ';
put ' do i=1 to &&sasjs&i.data0; ';
put ' if &&sasjs&i.data0=1 then line=symget("sasjs&i.data"); ';
put ' else line=symget(cats("sasjs&i.data",i)); ';
put ' if i=1 and substr(line,1,7)=''%nrstr('' then do; ';
put ' nrflg=1; ';
put ' line=substr(line,8); ';
put ' end; ';
put ' if i=&&sasjs&i.data0 and nrflg=1 then do; ';
put ' line=substr(line,1,length(line)-1); ';
put ' end; ';
put ' put line +(-1) @; ';
put ' end; ';
put ' run; ';
put ' data _null_; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' list; ';
put ' data work.&table; ';
put ' infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd ';
put ' termstr=crlf; ';
put ' input &input_statement; ';
put ' run; ';
put ' %end; ';
put ' %end; ';
put ' %else %do i=1 %to &_webin_file_count; ';
put ' /* read in any files that are sent */ ';
put ' /* this part needs refactoring for wide files */ ';
put ' filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999; ';
put ' data _null_; ';
put ' infile indata termstr=crlf lrecl=32767; ';
put ' input; ';
put ' if _n_=1 then call symputx(''input_statement'',_infile_); ';
put ' %if %str(&_debug) ge 131 %then %do; ';
put ' if _n_<20 then putlog _infile_; ';
put ' else stop; ';
put ' %end; ';
put ' %else %do; ';
put ' stop; ';
put ' %end; ';
put ' run; ';
put ' data &&_webin_name&i; ';
put ' infile indata firstobs=2 dsd termstr=crlf ; ';
put ' input &input_statement; ';
put ' run; ';
put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; ';
put ' %end; ';
put '%end; ';
put '%else %if &action=OPEN %then %do; ';
put ' /* setup webout */ ';
put ' OPTIONS NOBOMFILE; ';
put ' %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; ';
put ' filename _webout temp lrecl=999999 mod; ';
put ' %end; ';
put ' %else %do; ';
put ' filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" ';
put ' name="_webout.json" lrecl=999999 mod; ';
put ' %end; ';
put ' ';
put ' /* setup temp ref */ ';
put ' %if %upcase(&fref) ne _WEBOUT %then %do; ';
put ' filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---''; ';
put ' %end; ';
put ' ';
put ' /* setup json */ ';
put ' data _null_;file &fref; ';
put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; ';
put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; ';
put ' run; ';
put '%end; ';
put '%else %if &action=ARR or &action=OBJ %then %do; ';
put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref ';
put ' ,engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs ';
put ' ) ';
put '%end; ';
put '%else %if &action=CLOSE %then %do; ';
put ' %if %str(&workobs) > 0 %then %do; ';
put ' /* send back first XX records of each work table for debugging */ ';
put ' data;run;%let tempds=%scan(&syslast,2,.); ';
put ' ods output Members=&tempds; ';
put ' proc datasets library=WORK memtype=data; ';
put ' %local wtcnt;%let wtcnt=0; ';
put ' data _null_; ';
put ' set &tempds; ';
put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ ';
put ' i+1; ';
put ' call symputx(cats(''wt'',i),name,''l''); ';
put ' call symputx(''wtcnt'',i,''l''); ';
put ' data _null_; file &fref mod; put ",""WORK"":{"; ';
put ' %do i=1 %to &wtcnt; ';
put ' %let wt=&&wt&i; ';
put ' data _null_; file &fref mod; ';
put ' dsid=open("WORK.&wt",''is''); ';
put ' nlobs=attrn(dsid,''NLOBS''); ';
put ' nvars=attrn(dsid,''NVARS''); ';
put ' rc=close(dsid); ';
put ' if &i>1 then put '',''@; ';
put ' put " ""&wt"" : {"; ';
put ' put ''"nlobs":'' nlobs; ';
put ' put '',"nvars":'' nvars; ';
put ' %mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y ';
put ' ,maxobs=&workobs ';
put ' ) ';
put ' data _null_; file &fref mod;put "}"; ';
put ' %end; ';
put ' data _null_; file &fref mod;put "}";run; ';
put ' %end; ';
put ' ';
put ' /* close off json */ ';
put ' data _null_;file &fref mod; ';
put ' length SYSPROCESSNAME syserrortext syswarningtext autoexec $512; ';
put ' put ",""_DEBUG"" : ""&_debug"" "; ';
put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); ';
put ' put '',"_PROGRAM" : '' _PROGRAM ; ';
put ' autoexec=quote(urlencode(trim(getoption(''autoexec'')))); ';
put ' put '',"AUTOEXEC" : '' autoexec; ';
put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; ';
put ' SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI'')))); ';
put ' put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSCC"" : ""&syscc"" "; ';
put ' syserrortext=cats(symget(''syserrortext'')); ';
put ' if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syserrortext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syserrortext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syserrortext=cats(''"'',syserrortext,''"''); ';
put ' put '',"SYSERRORTEXT" : '' syserrortext; ';
put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; ';
put ' put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" "; ';
put ' put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" "; ';
put ' SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME))); ';
put ' put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME; ';
put ' put ",""SYSJOBID"" : ""&sysjobid"" "; ';
put ' put ",""SYSSCPL"" : ""&sysscpl"" "; ';
put ' put ",""SYSSITE"" : ""&syssite"" "; ';
put ' put ",""SYSUSERID"" : ""&sysuserid"" "; ';
put ' sysvlong=quote(trim(symget(''sysvlong''))); ';
put ' put '',"SYSVLONG" : '' sysvlong; ';
put ' syswarningtext=cats(symget(''syswarningtext'')); ';
put ' if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do; ';
put ' syswarningtext=''"''!!trim( ';
put ' prxchange(''s/"/\\"/'',-1, /* double quote */ ';
put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ ';
put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ ';
put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ ';
put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ ';
put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ ';
put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ ';
put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ ';
put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ ';
put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ ';
put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ ';
put ' prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */ ';
put ' prxchange(''s/\\/\\\\/'',-1,syswarningtext) ';
put ' )))))))))))))!!''"''; ';
put ' end; ';
put ' else syswarningtext=cats(''"'',syswarningtext,''"''); ';
put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; ';
put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; ';
put ' length memsize $32; ';
put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; ';
put ' memsize=quote(cats(memsize)); ';
put ' put '',"MEMSIZE" : '' memsize; ';
put ' put "}"; ';
put ' ';
put ' %if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do; ';
put ' data _null_; rc=fcopy("&fref","_webout");run; ';
put ' %end; ';
put ' ';
put '%end; ';
put ' ';
put '%mend mv_webout; ';
/* WEBOUT END */
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so it is provided by SASjs instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put ' ';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO';
put ' ,maxobs=MAX';
put ');';
put ' %mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing';
put ' ,showmeta=&showmeta,maxobs=&maxobs';
put ' )';
put '%mend;';
run;
/* insert the code, escaping double quotes and carriage returns */
%&dbg.put &sysmacroname: Creating final input file;
%local x fref freflist;
%let freflist= &adapter &precode &code ;
%do x=1 %to %sysfunc(countw(&freflist));
%let fref=%scan(&freflist,&x);
%&dbg.put &sysmacroname: adding &fref fileref;
data _null_;
length filein 8 fileid 8;
filein = fopen("&fref","I",1,"B");
fileid = fopen("&fname3","A",1,"B");
rec = "20"x;
do while(fread(filein)=0);
rc = fget(filein,rec,1);
if rec='"' then do; /* DOUBLE QUOTE */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'"');rc =fwrite(fileid);
end;
else if rec='0A'x then do; /* LF */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'n');rc =fwrite(fileid);
end;
else if rec='0D'x then do; /* CR */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'r');rc =fwrite(fileid);
end;
else if rec='09'x then do; /* TAB */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'t');rc =fwrite(fileid);
end;
else if rec='5C'x then do; /* BACKSLASH */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'\');rc =fwrite(fileid);
end;
else if rec='01'x then do; /* Unprintable */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
end;
else if rec='07'x then do; /* Bell Char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'7');rc =fwrite(fileid);
end;
else if rec='1B'x then do; /* escape char */
rc =fput(fileid,'\');rc =fwrite(fileid);
rc =fput(fileid,'u');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'0');rc =fwrite(fileid);
rc =fput(fileid,'1');rc =fwrite(fileid);
rc =fput(fileid,'B');rc =fwrite(fileid);
end;
else do;
rc =fput(fileid,rec);
rc =fwrite(fileid);
end;
end;
rc=fclose(filein);
rc=fclose(fileid);
run;
%end;
/* finish off the body of the code file loaded to JES */
data _null_;
file &fname3 mod TERMSTR=' ';
put '"}';
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: input about to be POSTed;
data _null_;infile &fname3;input;putlog _infile_;run;
%end;
%&dbg.put &sysmacroname: Creating the actual service!;
%local fname4;
%let fname4=%mf_getuniquefileref();
proc http method='POST'
in=&fname3
out=&fname4
&oauth_bearer
url="&base_uri/jobDefinitions/definitions?parentFolderUri=&parentFolderUri";
headers 'Content-Type'='application/vnd.sas.job.definition+json'
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
"Accept"="application/vnd.sas.job.definition+json";
%if &mdebug=1 %then %do;
debug level = 3;
%end;
run;
%if &mdebug=1 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then %do;
%put &sysmacroname: output from POSTing job definition;
data _null_;infile &fname4;input;putlog _infile_;run;
%end;
%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* get the url so we can give a helpful log message */
%local url;
data _null_;
if symexist('_baseurl') then do;
url=symget('_baseurl');
if subpad(url,length(url)-9,9)='SASStudio'
then url=substr(url,1,length(url)-11);
else url="&systcpiphostname";
end;
else url="&systcpiphostname";
call symputx('url',url);
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname1 clear;
filename &fname2 clear;
filename &fname3 clear;
filename &fname4 clear;
filename &adapter clear;
libname &libref1 clear;
%end;
%put &sysmacroname: Job &name successfully created in &path;
%put &sysmacroname:;
%put &sysmacroname: Check it out here:;
%put &sysmacroname:;%put;
%put &url/SASJobExecution?_PROGRAM=&path/&name;%put;
%put &sysmacroname:;
%put &sysmacroname:;
%mend mv_createwebservice;
/**
@file
@brief Creates a file in SAS Drive
@details Creates a file in SAS Drive and adds the appropriate content type.
If the parent folder does not exist, it is created.
Usage:
filename myfile temp;
data _null_;
file myfile;
put 'something';
run;
%mv_createfile(path=/Public/temp,name=newfile.txt,inref=myfile)
@param [in] path= The parent folder in which to create the file
@param [in] name= The name of the file to be created
@param [in] inref= The fileref pointing to the file to be uploaded
@param [in] intype= (BINARY) The type of the input data. Valid values:
@li BINARY File is copied byte for byte using the mp_binarycopy.sas macro.
@li BASE64 File will be first decoded using the mp_base64.sas macro, then
loaded byte by byte to SAS Drive.
@param [in] contentdisp= (inline) Content Disposition. Example values:
@li inline
@li attachment
@param [in] ctype= (0) Set a default HTTP Content-Type header to be returned
with the file when the content is retrieved from the Files service.
@param [in] access_token_var= The global macro variable to contain the access
token, if using authorization_code grant type.
@param [in] grant_type= (sas_services) Valid values are:
@li password
@li authorization_code
@li sas_services
@param [in] mdebug= (0) Set to 1 to enable DEBUG messages
@version VIYA V.03.05
@author Allan Bowe, source: https://github.com/sasjs/core
SAS Macros
@li mf_getuniquefileref.sas
@li mf_isblank.sas
@li mp_abort.sas
@li mp_base64copy.sas
@li mp_binarycopy.sas
@li mv_createfolder.sas
**/
%macro mv_createfile(path=
,name=
,inref=
,intype=BINARY
,contentdisp=inline
,ctype=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=(%mf_isblank(&path)=1 or %length(&path)=1)
,mac=&sysmacroname
,msg=%str(path value must be provided)
)
%mp_abort(iftrue=(%mf_isblank(&name)=1 or %length(&name)=1)
,mac=&sysmacroname
,msg=%str(name value with length >1 must be provided)
)
/* create folder if it does not already exist */
%mv_createfolder(path=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,mdebug=&mdebug
)
/* create file with relevant options */
%local fref;
%let fref=%mf_getuniquefileref();
filename &fref filesrvc
folderPath="&path"
filename="&name"
cdisp="&contentdisp"
%if "&ctype" ne "0" %then %do;
ctype="&ctype"
%end;
lrecl=1048544;
%if &intype=BINARY %then %do;
%mp_binarycopy(inref=&inref, outref=&fref)
%end;
%else %if &intype=BASE64 %then %do;
%mp_base64copy(inref=&inref, outref=&fref, action=DECODE)
%end;
filename &fref clear;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%put &sysmacroname: File &name successfully created in &path;
%put &sysmacroname:;%put;
%put &base_uri/SASJobExecution?_file=&path/&name;%put;
%put &sysmacroname:;
%mend mv_createfile;
/**
@file
@brief Performs a text substitution on a file
@details Performs a find and replace on a file, either in place or to a new
file. Can be used on files where lines are longer than 32767.
Works by reading in the file byte by byte, then marking the beginning and end
of each matched string, before finally doing the replace.
Full credit for this highly efficient and syntactically satisfying SAS logic
goes to [Bartosz Jabłoński](https://www.linkedin.com/in/yabwon), founder of
the [SAS Packages](https://github.com/yabwon/SAS_PACKAGES) framework.
Usage:
%let file="%sysfunc(pathname(work))/file.txt";
%let str=replace/me;
%let rep=with/this;
data _null_;
file &file;
put 'blahblah';
put "blahblah&str.blah";
put 'blahblahblah';
run;
%mp_replace(&file, findvar=str, replacevar=rep)
data _null_;
infile &file;
input;
list;
run;
Note - if you are running a version of SAS that will allow the io package in
LUA, you can also use this macro: mp_gsubfile.sas
@param [in] infile The QUOTED path to the file on which to perform the
substitution
@param [in] findvar= Macro variable NAME containing the string to search for
@param [in] replacevar= Macro variable NAME containing the replacement string
@param [out] outfile= (0) Optional QUOTED path to the adjusted output file (to
avoid overwriting the first file).
SAS Macros
@li mf_getuniquefileref.sas
@li mf_getuniquename.sas
Related Macros
@li mp_chop.sas
@li mp_gsubfile.sas
@li mp_replace.test.sas
@version 9.4
@author Bartosz Jabłoński
@author Allan Bowe
**/
%macro mp_replace(infile,
findvar=,
replacevar=,
outfile=0
)/*/STORE SOURCE*/;
%local inref dttm ds1;
%let inref=%mf_getuniquefileref();
%let outref=%mf_getuniquefileref();
%if &outfile=0 %then %let outfile=&infile;
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
/* START */
%let dttm=%sysfunc(datetime());
filename &inref &infile lrecl=1 recfm=n;
data &ds1;
infile &inref;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&findvar));
string =symget("&findvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
end;
end;
end;
stop;
keep START STOP;
run;
data &ds1;
declare hash HS(dataset:"&ds2(keep=start)");
HS.defineKey("start");
HS.defineDone();
declare hash HE(dataset:"&ds2(keep=stop)");
HE.defineKey("stop");
HE.defineDone();
do until(eof);
set &ds1 end=eof curobs =n;
start = ^HS.check(key:n);
stop = ^HE.check(key:n);
length strt $ 1;
strt =put(start,best. -L);
retain out 1;
if out then output;
if start then out=0;
if stop then out=1;
end;
stop;
keep sourcechar strt;
run;
filename &outref &outfile recfm=n;
data _null_;
length replace $ %length(%superq(&replacevar));
replace=symget("&replacevar");
file &outref;
do until(eof);
set &ds1 end=eof;
if strt ="1" then put replace char.;
else put sourcechar char1.;
end;
stop;
run;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_replace;
/* system macros for build process end */
%macro mf_mval(var);
%if %symexist(&var) %then %do;
%superq(&var)
%end;
%mend mf_mval;
%macro mf_trimstr(basestr,trimstr);
%local baselen trimlen trimval;
/* return if basestr is shorter than trimstr (or 0) */
%let baselen=%length(%superq(basestr));
%let trimlen=%length(%superq(trimstr));
%if &baselen < &trimlen or &baselen=0 %then %return;
/* obtain the characters from the end of basestr */
%let trimval=%qsubstr(%superq(basestr)
,%length(%superq(basestr))-&trimlen+1
,&trimlen);
/* compare and if matching, chop it off! */
%if %superq(basestr)=%superq(trimstr) %then %do;
%return;
%end;
%else %if %superq(trimval)=%superq(trimstr) %then %do;
%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)
%end;
%else %do;
&basestr
%end;
%mend mf_trimstr;
%macro mf_getplatform(switch
)/*/STORE SOURCE*/;
%local a b c;
%if &switch.NONE=NONE %then %do;
%if %symexist(sasjsprocessmode) %then %do;
%if &sasjsprocessmode=Stored Program %then %do;
SASJS
%return;
%end;
%end;
%if %symexist(sysprocessmode) %then %do;
%if "&sysprocessmode"="SAS Object Server"
or "&sysprocessmode"= "SAS Compute Server" %then %do;
SASVIYA
%end;
%else %if "&sysprocessmode"="SAS Stored Process Server"
or "&sysprocessmode"="SAS Workspace Server"
%then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;
SASMETA
%return;
%end;
%else %do;
BASESAS
%return;
%end;
%end;
%else %if &switch=SASSTUDIO %then %do;
/* return the version of SAS Studio else 0 */
%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;
%let a=%mf_mval(_CLIENTVERSION);
%let b=%scan(&a,1,.);
%if %eval(&b >2) %then %do;
&b
%end;
%else 0;
%end;
%else 0;
%end;
%else %if &switch=VIYARESTAPI %then %do;
%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)
%end;
%mend mf_getplatform;
%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);
%local rc fname;
%if &prefix=0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%end;
%else %do;
%local x len;
%let len=%eval(8-%length(&prefix));
%let x=0;
%do x=0 %to &maxtries;
%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);
%if %sysfunc(fileref(&fname)) > 0 %then %do;
%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));
%if &rc %then %put %sysfunc(sysmsg());
&fname
%return;
%end;
%end;
%put unable to find available fileref after &maxtries attempts;
%end;
%mend mf_getuniquefileref;
%macro mf_getuniquename(prefix=MC);
&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))
%mend mf_getuniquename;
%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)
, errds=work.mp_abort_errds
, mode=REGULAR
)/*/STORE SOURCE*/;
%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;
%local fref fid i;
%if not(%eval(%unquote(&iftrue))) %then %return;
%put NOTE: /// mp_abort macro executing //;
%if %length(&mac)>0 %then %put NOTE- called by &mac;
%put NOTE - &msg;
%if %symexist(_SYSINCLUDEFILEDEVICE)
/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */
and %superq(SYSPROCESSNAME) ne %str(Compute Server)
%then %do;
%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;
data &errds;
iftrue='1=1';
length mac $100 msg $5000;
mac=symget('mac');
msg=symget('msg');
run;
data _null_;
abort cancel FILE;
run;
%return;
%end;
%end;
/* Web App Context */
%if %symexist(_PROGRAM)
or %superq(SYSPROCESSNAME) = %str(Compute Server)
or &mode=INCLUDE
%then %do;
options obs=max replace mprint;
%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"
%then %do;
options nosyntaxcheck;
%end;
%if &mode=INCLUDE %then %do;
%if %sysfunc(exist(&errds))=1 %then %do;
data _null_;
set &errds;
call symputx('iftrue',iftrue,'l');
call symputx('mac',mac,'l');
call symputx('msg',msg,'l');
putlog (_all_)(=);
run;
%if (&iftrue)=0 %then %return;
%end;
%else %do;
%put &sysmacroname: No include errors found;
%return;
%end;
%end;
/* extract log errs / warns, if exist */
%local logloc logline;
%global logmsg; /* capture global messages */
%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;
%else %let logloc=%qsysfunc(getoption(LOG));
proc printto log=log;run;
%let logline=0;
%if %length(&logloc)>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input; putlog _infile_;
i=1;
retain logonce 0;
if (
_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"
) and logonce=0 then
do;
call symputx('logline',_n_);
logonce+1;
end;
run;
/* capture log including lines BEFORE the err */
%if &logline>0 %then %do;
data _null_;
infile &logloc lrecl=5000;
input;
i=1;
stoploop=0;
if _n_ ge &logline-15 and stoploop=0 then do until (i>22);
call symputx('logmsg',catx('\n',symget('logmsg'),_infile_));
input;
i+1;
stoploop=1;
end;
if stoploop=1 then stop;
run;
%end;
%end;
%if %symexist(SYS_JES_JOB_URI) %then %do;
/* setup webout for Viya */
options nobomfile;
%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;
filename _webout temp lrecl=999999 mod;
%end;
%else %do;
filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"
name="_webout.json" lrecl=999999 mod;
%end;
%end;
%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;
options nobomfile;
/* set up http header for SASjs Server */
%let fid=%sysfunc(fopen(&fref,A));
%if &fid=0 %then %do;
%put %str(ERR)OR: %sysfunc(sysmsg());
%return;
%end;
%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));
%let rc=%sysfunc(fwrite(&fid));
%let rc=%sysfunc(fclose(&fid));
%let rc=%sysfunc(filename(&fref));
%end;
/* send response in SASjs JSON format */
data _null_;
file _webout mod lrecl=32000 encoding='utf-8';
length msg syswarningtext syserrortext $32767 mode $10 ;
sasdatetime=datetime();
msg=symget('msg');
%if &logline>0 %then %do;
msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg'));
%end;
/* escape the escapes */
msg=tranwrd(msg,'\','\\');
/* escape the quotes */
msg=tranwrd(msg,'"','\"');
/* ditch the CRLFs as chrome complains */
msg=compress(msg,,'kw');
/* quote without quoting the quotes (which are escaped instead) */
msg=cats('"',msg,'"');
if symexist('_debug') then debug=quote(trim(symget('_debug')));
else debug='""';
if symget('sasjsprocessmode')='Stored Program' then mode='SASJS';
if mode ne 'SASJS' then put '>>weboutBEGIN<<';
put '{"SYSDATE" : "' "&SYSDATE" '"';
put ',"SYSTIME" : "' "&SYSTIME" '"';
put ',"sasjsAbort" : [{';
put ' "MSG":' msg ;
put ' ,"MAC": "' "&mac" '"}]';
put ",""SYSUSERID"" : ""&sysuserid"" ";
put ',"_DEBUG":' debug ;
if symexist('_metauser') then do;
_METAUSER=quote(trim(symget('_METAUSER')));
put ",""_METAUSER"": " _METAUSER;
_METAPERSON=quote(trim(symget('_METAPERSON')));
put ',"_METAPERSON": ' _METAPERSON;
end;
if symexist('SYS_JES_JOB_URI') then do;
SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI')));
put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI;
end;
_PROGRAM=quote(trim(resolve(symget('_PROGRAM'))));
put ',"_PROGRAM" : ' _PROGRAM ;
put ",""SYSCC"" : ""&syscc"" ";
syserrortext=cats(symget('syserrortext'));
if findc(syserrortext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syserrortext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syserrortext)
)))))))))))))!!'"';
end;
else syserrortext=cats('"',syserrortext,'"');
put ',"SYSERRORTEXT" : ' syserrortext;
put ",""SYSHOSTNAME"" : ""&syshostname"" ";
put ",""SYSJOBID"" : ""&sysjobid"" ";
put ",""SYSSCPL"" : ""&sysscpl"" ";
put ",""SYSSITE"" : ""&syssite"" ";
sysvlong=quote(trim(symget('sysvlong')));
put ',"SYSVLONG" : ' sysvlong;
syswarningtext=cats(symget('syswarningtext'));
if findc(syswarningtext,'"\'!!'0A0D09000E0F010210111A'x) then do;
syswarningtext='"'!!trim(
prxchange('s/"/\\"/',-1, /* double quote */
prxchange('s/\x0A/\n/',-1, /* new line */
prxchange('s/\x0D/\r/',-1, /* carriage return */
prxchange('s/\x09/\\t/',-1, /* tab */
prxchange('s/\x00/\\u0000/',-1, /* NUL */
prxchange('s/\x0E/\\u000E/',-1, /* SS */
prxchange('s/\x0F/\\u000F/',-1, /* SF */
prxchange('s/\x01/\\u0001/',-1, /* SOH */
prxchange('s/\x02/\\u0002/',-1, /* STX */
prxchange('s/\x10/\\u0010/',-1, /* DLE */
prxchange('s/\x11/\\u0011/',-1, /* DC1 */
prxchange('s/\x1A/\\u001A/',-1, /* SUB */
prxchange('s/\\/\\\\/',-1,syswarningtext)
)))))))))))))!!'"';
end;
else syswarningtext=cats('"',syswarningtext,'"');
put ",""SYSWARNINGTEXT"" : " syswarningtext;
put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" ';
put "}" ;
if mode ne 'SASJS' then put '>>weboutEND<<';
run;
%put _all_;
%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;
data _null_;
putlog 'stpsrvset program err and syscc';
rc=stpsrvset('program error', 0);
call symputx("syscc",0,"g");
run;
%if &sysscp=WIN
and 1=0 /* deprecating this logic until we figure out a consistent abort */
and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"
and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;
/* skip approach (below) does not work in windows m6+ envs */
endsas;
%end;
%else %do;
/**
* endsas kills 9.4m3 deployments by orphaning multibridges.
* Abort variants are ungraceful (non zero return code)
* This approach lets SAS run silently until the end :-)
* Caution - fails when called within a %include within a macro
* Use mp_include() to handle this.
*/
filename skip temp;
data _null_;
file skip;
put '%macro skip();';
comment '%mend skip; -> fix lint ';
put '%macro skippy();';
comment '%mend skippy; -> fix lint ';
run;
%inc skip;
%end;
%end;
%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;
/* endsas kills the session making it harder to fetch results */
data _null_;
syswarningtext=symget('syswarningtext');
syserrortext=symget('syserrortext');
abort_msg=symget('msg');
syscc=symget('syscc');
sysuserid=symget('sysuserid');
iftrue=symget('iftrue');
put (_all_)(/=);
call symputx('syscc',0);
abort cancel nolist;
run;
%end;
%else %do;
%abort cancel;
%end;
%end;
%else %do;
%put _all_;
%abort cancel;
%end;
%mend mp_abort;
/** @endcond */
%macro mp_binarycopy(
inloc= /* full path and filename of the object to be copied */
,outloc= /* full path and filename of object to be created */
,inref=____in /* override default to use own filerefs */
,outref=____out /* override default to use own filerefs */
,mode=CREATE
,iftrue=%str(1=1)
)/*/STORE SOURCE*/;
%local mod;
%if not(%eval(%unquote(&iftrue))) %then %return;
%if &mode=APPEND %then %let mod=mod;
/* these IN and OUT filerefs can point to anything */
%if &inref = ____in %then %do;
filename &inref &inloc lrecl=1048576 ;
%end;
%if &outref=____out %then %do;
filename &outref &outloc lrecl=1048576 &mod;
%end;
/* copy the file byte-for-byte */
data _null_;
infile &inref lrecl=1 recfm=n;
file &outref &mod recfm=n;
input sourcechar $char1. @@;
format sourcechar hex2.;
put sourcechar char1. @@;
run;
%if &inref = ____in %then %do;
filename &inref clear;
%end;
%if &outref=____out %then %do;
filename &outref clear;
%end;
%mend mp_binarycopy;
%macro mp_chop(infile,
matchvar=,
matchpoint=START,
keep=FIRST,
offset=0,
mdebug=0,
outfile=0
)/*/STORE SOURCE*/;
%local fref0 dttm ds1 outref;
%let fref0=%mf_getuniquefileref();
%let ds1=%mf_getuniquename(prefix=allchars);
%let ds2=%mf_getuniquename(prefix=startmark);
%if &outfile=0 %then %let outfile=&infile;
%mp_abort(iftrue= (%length(%superq(&matchvar))=0)
,mac=mp_chop.sas
,msg=%str(&matchvar is an empty variable)
)
/* START */
%let dttm=%sysfunc(datetime());
filename &fref0 &infile lrecl=1 recfm=n;
/* create dataset with one char per row */
data &ds1;
infile &fref0;
input sourcechar $char1. @@;
format sourcechar hex2.;
run;
/* get start & stop position of first matchvar string (one row, two vars) */
data &ds2;
/* set find string to length in bytes to cover trailing spaces */
length string $ %length(%superq(&matchvar));
string =symget("&matchvar");
drop string;
firstchar=char(string,1);
findlen=lengthm(string); /* <- for trailing bytes */
do _N_=1 to nobs;
set &ds1 nobs=nobs point=_N_;
if sourcechar=firstchar then do;
pos=1;
s=0;
do point=_N_ to min(_N_ + findlen -1,nobs);
set &ds1 point=point;
if sourcechar=char(string, pos) then s + 1;
else goto _leave_;
pos+1;
end;
_leave_:
if s=findlen then do;
START =_N_;
_N_ =_N_+ s - 1;
STOP =_N_;
output;
/* matched! */
stop;
end;
end;
end;
stop;
keep START STOP;
run;
%local split;
%let split=0;
data _null_;
set &ds2;
if "&matchpoint"='START' then do;
if "&keep"='FIRST' then mp=start;
else if "&keep"='LAST' then mp=start-1;
end;
else if "&matchpoint"='END' then do;
if "&keep"='FIRST' then mp=stop+1;
else if "&keep"='LAST' then mp=stop;
end;
split=mp+&offset;
call symputx('split',split,'l');
%if &mdebug=1 %then %do;
put (_all_)(=);
%put &=offset;
%end;
run;
%if &split=0 %then %do;
%put &sysmacroname: No match found in &infile for string %superq(&matchvar);
%return;
%end;
data _null_;
file &outfile recfm=n;
set &ds1;
%if &keep=FIRST %then %do;
if _n_ ge &split then stop;
%end;
%else %do;
if _n_ gt &split;
%end;
put sourcechar char1.;
run;
%if &mdebug=0 %then %do;
filename &fref0 clear;
%end;
%else %do;
data _null_;
infile &outfile lrecl=32767;
input;
list;
if _n_>200 then stop;
run;
%end;
/* END */
%put &sysmacroname took %sysevalf(%sysfunc(datetime())-&dttm) seconds to run;
%mend mp_chop;
%macro mcf_init(func
)/*/STORE SOURCE*/;
%if not (%symexist(SASJS_PREFIX)) %then %do;
%global SASJS_PREFIX;
%let SASJS_PREFIX=SASJS;
%end;
%let func=%upcase(&func);
/* the / character is just a seperator */
%global &sasjs_prefix._FUNCTIONS;
%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;
1
%return;
%end;
%else %do;
%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;
0
%end;
%mend mcf_init;
%macro mcf_getfmttype(wrap=NO
,insert_cmplib=DEPRECATED
,lib=WORK
,cat=SASJS
,pkg=UTILS
)/*/STORE SOURCE*/;
%local i var cmpval found;
%if %mcf_init(mcf_getfmttype)=1 %then %return;
%if &wrap=YES %then %do;
proc fcmp outlib=&lib..&cat..&pkg;
%end;
function mcf_getfmttype(fmtnm $) $8;
if substr(fmtnm,1,1)='$' then return('CHAR');
else do;
/* extract NAME */
length fmt $32;
fmt=scan(fmtnm,1,'.');
do while (
substr(fmt,length(fmt),1) in ('1','2','3','4','5','6','7','8','9','0')
);
if length(fmt)=1 then fmt='W';
else fmt=substr(fmt,1,length(fmt)-1);
end;
/* apply lookups */
if cats(fmt) in ('DATETIME','B8601DN','B8601DN','B8601DT','B8601DT'
,'B8601DZ','B8601DZ','DATEAMPM','DTDATE','DTMONYY','DTWKDATX','DTYEAR'
,'DTYYQC','E8601DN','E8601DN','E8601DT','E8601DT','E8601DZ','E8601DZ')
then return('DATETIME');
else if fmt in ('DATE','YYMMDD','B8601DA','B8601DA','DAY','DDMMYY'
,'DDMMYYB','DDMMYYC','DDMMYYD','DDMMYYN','DDMMYYP','DDMMYYS','DDMMYYx'
,'DOWNAME','E8601DA','E8601DA','JULDAY','JULIAN','MMDDYY','MMDDYYB'
,'MMDDYYC','MMDDYYD','MMDDYYN','MMDDYYP','MMDDYYS','MMDDYYx','MMYY'
,'MMYYC','MMYYD','MMYYN','MMYYP','MMYYS','MMYYx','MONNAME','MONTH'
,'MONYY','PDJULG','PDJULI','QTR','QTRR','WEEKDATE','WEEKDATX','WEEKDAY'
,'WEEKU','WEEKV','WEEKW','WORDDATE','WORDDATX','YEAR','YYMM','YYMMC'
,'YYMMD','YYMMDDB','YYMMDDC','YYMMDDD','YYMMDDN','YYMMDDP','YYMMDDS'
,'YYMMDDx','YYMMN','YYMMP','YYMMS','YYMMx','YYMON','YYQ','YYQC','YYQD'
,'YYQN','YYQP','YYQR','YYQRC','YYQRD','YYQRN','YYQRP','YYQRS','YYQRx'
,'YYQS','YYQx','YYQZ') then return('DATE');
else if fmt in ('TIME','B8601LZ','B8601LZ','B8601TM','B8601TM','B8601TZ'
,'B8601TZ','E8601LZ','E8601LZ','E8601TM','E8601TM','E8601TZ','E8601TZ'
,'HHMM','HOUR','MMSS','TIMEAMPM','TOD') then return('TIME');
else return('NUM');
end;
endsub;
%if &wrap=YES %then %do;
quit;
%end;
/* insert the CMPLIB if not already there */
%let cmpval=%sysfunc(getoption(cmplib));
%let found=0;
%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));
%let var=%scan(&cmpval,&i,%str( %(%)));
%if &var=&lib..&cat %then %let found=1;
%end;
%if &found=0 %then %do;
options insert=(CMPLIB=(&lib..&cat));
%end;
%mend mcf_getfmttype;
%macro mf_getVarFormat(libds /* two level ds name */
, var /* variable name from which to return the format */
, force=0
)/*/STORE SOURCE*/;
%local dsid vnum vformat rc vlen vtype;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable format */
%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let rc = %sysfunc(close(&dsid));
%return;
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* supply a default if no format available */
%if %length(&vformat)<2 & &force=1 %then %do;
%let vlen = %sysfunc(varlen(&dsid, &vnum));
%let vtype = %sysfunc(vartype(&dsid, &vnum.));
%if &vtype=C %then %let vformat=$&vlen..;
%else %let vformat=best.;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable format */
&vformat
%mend mf_getVarFormat;
%macro mf_getvarlist(libds
,dlm=%str( )
,quote=no
,typefilter=A
)/*/STORE SOURCE*/;
/* declare local vars */
%local outvar dsid nvars x rc dlm q var vtype;
/* credit Rowland Hale - byte34 is double quote, 39 is single quote */
%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));
%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));
/* open dataset in macro */
%let dsid=%sysfunc(open(&libds));
%if &dsid %then %do;
%let nvars=%sysfunc(attrn(&dsid,NVARS));
%if &nvars>0 %then %do;
/* add variables with supplied delimeter */
%do x=1 %to &nvars;
/* get variable type */
%let vtype=%sysfunc(vartype(&dsid,&x));
%if &vtype=&typefilter or &typefilter=A %then %do;
%let var=&q.%sysfunc(varname(&dsid,&x))&q.;
%if &var=&q&q %then %do;
%put &sysmacroname: Empty column found in &libds!;
%let var=&q. &q.;
%end;
%if %quote(&outvar)=%quote() %then %let outvar=&var;
%else %let outvar=&outvar.&dlm.&var.;
%end;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%put &sysmacroname: Unable to open &libds (rc=&dsid);
%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());
%let rc=%sysfunc(close(&dsid));
%end;
%do;%unquote(&outvar)%end;
%mend mf_getvarlist;
%macro mf_getvartype(libds /* two level name */
, var /* variable name from which to return the type */
)/*/STORE SOURCE*/;
%local dsid vnum vtype rc;
/* Open dataset */
%let dsid = %sysfunc(open(&libds));
%if &dsid. > 0 %then %do;
/* Get variable number */
%let vnum = %sysfunc(varnum(&dsid, &var));
/* Get variable type (C/N) */
%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));
%else %do;
%put NOTE: Variable &var does not exist in &libds;
%let vtype = %str( );
%end;
%end;
%else %do;
%put &sysmacroname: dataset &libds not opened! (rc=&dsid);
%put &sysmacroname: %sysfunc(sysmsg());
%return;
%end;
/* Close dataset */
%let rc = %sysfunc(close(&dsid));
/* Return variable type */
&vtype
%mend mf_getvartype;
%macro mp_ds2csv(ds
,dlm=COMMA
,outref=0
,outfile=
,outencoding=0
,headerformat=LABEL
,termstr=CRLF
)/*/STORE SOURCE*/;
%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;
%if not %sysfunc(exist(&ds)) %then %do;
%put %str(WARN)ING: &ds does not exist;
%return;
%end;
%if %index(&ds,.)=0 %then %let ds=WORK.&ds;
%if &outencoding=0 %then %let outencoding=;
%else %let outencoding=encoding=&outencoding;
%if &outref=0 %then %let outloc=&outfile;
%else %let outloc=&outref;
%if &headerformat=SASJS %then %do;
%let delim=",";
%let termstr=CRLF;
%mcf_getfmttype(wrap=YES)
%end;
%else %if &dlm=COMMA %then %let delim=",";
%else %let delim=";";
/* credit to mjsq - https://stackoverflow.com/a/55642267 */
/* first get headers */
data _null_;
file &outloc &outencoding lrecl=32767 termstr=&termstr;
length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;
call missing(of _all_);
dsid=open("&ds.","i");
num=attrn(dsid,"nvars");
dlm=&delim;
do i=1 to num;
varnm=upcase(varname(dsid,i));
if i=num then dlm='';
%if &headerformat=NAME %then %do;
header=cats(varnm,dlm);
%end;
%else %if &headerformat=LABEL %then %do;
header = cats(coalescec(varlabel(dsid,i),varnm),dlm);
%end;
%else %if &headerformat=SASJS %then %do;
vlen=varlen(dsid,i);
if vartype(dsid,i)='C' then header=cats(varnm,':$char',vlen,'.');
else do;
vfmt=coalescec(varfmt(dsid,i),'0');
fmttype=mcf_getfmttype(vfmt);
if fmttype='DATE' then header=cats(varnm,':date9.');
else if fmttype='DATETIME' then header=cats(varnm,':E8601DT26.6');
else if fmttype='TIME' then header=cats(varnm,':TIME12.');
/**
* there is not much point importing a short length numeric like this,
* eg with best4., as the resulting variable will still be stored as
* length 8. We need a length or format statement to ensure variable
* is creatd with the smaller length...
**/
else if vlen<8 then header=cats(varnm,':best',vlen,'.');
else header=cats(varnm,':best.');
end;
%end;
%else %do;
%put &sysmacroname: Invalid headerformat value (&headerformat);
%return;
%end;
put header @;
end;
rc=close(dsid);
run;
%let varlist=%mf_getvarlist(&ds);
%let vcnt=%sysfunc(countw(&varlist));
/**
* The $quote modifier (without a width) will take the length from the variable
* and increase by two. However this will lead to truncation where the value
* contains double quotes (which are doubled up). To get around this, scan the
* data to see the max number of double quotes, so that the appropriate width
* can be applied in the subsequent step.
*/
data _null_;
set &ds end=last;
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%local vlen&i;
%if %mf_getvartype(&ds,&var)=C %then %do;
%let dsv1=%mf_getuniquename(prefix=csvcol1_);
%let dsv2=%mf_getuniquename(prefix=csvcol2_);
retain &dsv1 0;
&dsv2=length(&var)+countc(&var,'"');
if &dsv2>&dsv1 then &dsv1=&dsv2;
if last then call symputx(
"vlen&i"
/* should be no shorter than varlen, and no longer than 32767 */
,cats('$quote',min(&dsv1+2,32767),'.')
,'l'
);
%end;
%end;
%let vat=@;
%let vcom=&delim;
%let vmiss=%mf_getuniquename(prefix=csvcol3_);
/* next, export data */
data _null_;
set &ds.;
file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;
if _n_=1 then &vmiss=' ';
%do i=1 %to &vcnt;
%let var=%scan(&varlist,&i);
%if &i=&vcnt %then %do;
%let vat=;
%let vcom=;
%end;
%if %mf_getvartype(&ds,&var)=N %then %do;
%if &headerformat = SASJS %then %do;
%let vcom=&delim;
%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));
%if &fmttype=DATE %then %let vfmt=DATE9.;
%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;
%else %if &fmttype=TIME %then %let vfmt=TIME12.;
%else %do;
%let vfmt=;
%let vcom=;
%end;
%end;
%else %let vcom=;
/* must use period - in order to work in both 9.4 and Viya 3.5 */
if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;
&vmiss=cats('.',&var);
put &vmiss &vat;
end;
else put &var &vfmt &vcom &vat;
%end;
%else %do;
%if &i ne &vcnt %then %let vcom=&delim;
put &var &&vlen&i &vcom &vat;
%end;
%end;
run;
%mend mp_ds2csv;
%macro ms_runstp(pgm
,debug=131
,inputparams=_null_
,inputfiles=_null_
,outref=outweb
,outlogds=_null_
,mdebug=0
);
%local dbg mainref authref boundary;
%let mainref=%mf_getuniquefileref();
%let authref=%mf_getuniquefileref();
%let boundary=%mf_getuniquename();
%if &inputparams=0 %then %let inputparams=_null_;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%mp_abort(iftrue=("&pgm"="")
,mac=&sysmacroname
,msg=%str(Program not provided)
)
/* avoid sending bom marker to API */
%local optval;
%let optval=%sysfunc(getoption(bomfile));
options nobomfile;
/* add params */
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
length line $1000 name $32 value $32767;
if _n_=1 then call missing(of _all_);
set &inputparams;
put "--&boundary";
line=cats('Content-Disposition: form-data; name="',name,'"');
put line;
put ;
put value;
run;
/* parse input file list */
%local webcount;
%let webcount=0;
data _null_;
set &inputfiles end=last;
length fileref $8 name $32 filename $256;
call symputx(cats('webref',_n_),fileref,'l');
call symputx(cats('webname',_n_),name,'l');
call symputx(cats('webfilename',_n_),filename,'l');
if last then do;
call symputx('webcount',_n_);
call missing(of _all_);
end;
run;
/* write out the input files */
%local i;
%do i=1 %to &webcount;
data _null_;
file &mainref termstr=crlf lrecl=32767 mod;
infile &&webref&i lrecl=32767;
if _n_ = 1 then do;
length line $32767;
line=cats(
'Content-Disposition: form-data; name="'
,"&&webname&i"
,'"; filename="'
,"&&webfilename&i"
,'"'
);
put "--&boundary";
put line;
put "Content-Type: text/plain";
put ;
end;
input;
put _infile_; /* add the actual file to be sent */
run;
%end;
data _null_;
file &mainref termstr=crlf mod;
put "--&boundary--";
run;
data _null_;
file &authref lrecl=1000;
infile "&_sasjs_tokenfile" lrecl=1000;
input;
if _n_=1 then put "Content-Type: multipart/form-data; boundary=&boundary";
put _infile_;
run;
%if &mdebug=1 %then %do;
data _null_;
infile &authref;
input;
put _infile_;
data _null_;
infile &mainref;
input;
put _infile_;
run;
%end;
%local resp_path;
%let resp_path=%sysfunc(pathname(work))/%mf_getuniquename();
filename &outref "&resp_path" lrecl=32767;
/* prepare request*/
proc http method='POST' headerin=&authref in=&mainref out=&outref
url="&_sasjs_apiserverurl.&_sasjs_apipath?_program=&pgm%str(&)_debug=131";
%if &mdebug=1 %then %do;
debug level=2;
%end;
run;
%if (&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
or &mdebug=1
%then %do;
data _null_;infile &outref;input;putlog _infile_;run;
%end;
%mp_abort(
iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)
,mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
/* reset options */
options &optval;
%if &outlogds ne _null_ or &mdebug=1 %then %do;
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("&resp_path"
,matchvar=matchstr
,keep=LAST
,matchpoint=END
,outfile="&chopout"
,mdebug=&mdebug
)
data &outlogds;
infile "&chopout" lrecl=2000;
length line $2000;
line=_infile_;
%if &mdebug=1 %then %do;
putlog line=;
%end;
run;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &authref;
filename &mainref;
%end;
%mend ms_runstp;
%macro ms_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=0,
mdebug=0,
outlib=0,
outref=0,
outlogds=_null_
)/*/STORE SOURCE*/;
%local dbg i var ds1 fref1 chopout1 chopout2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
/* parse the filerefs - convert to a dataset */
%let ds1=%mf_getuniquename();
data &ds1;
length fileref $8 name $32 filename $256 var $300;
if "&inputfiles" ne "0" then do;
webcount=countw("&inputfiles");
do i=1 to webcount;
var=scan("&inputfiles",i,' ');
fileref=scan(var,1,':');
name=scan(var,2,':');
filename=cats(name,'.csv');
output;
end;
end;
run;
/* execute the STP */
%let fref1=%mf_getuniquefileref();
%ms_runstp(&program
,debug=&debug
,inputparams=&inputparams
,inputfiles=&ds1
,outref=&fref1
,mdebug=&mdebug
,outlogds=&outlogds
)
/* chop out JSON section */
%local matchstr chopout;
%let matchstr=SASJS_LOGS_SEPARATOR_163ee17b6ff24f028928972d80a26784;
%let chopout=%sysfunc(pathname(work))/%mf_getuniquename(prefix=chop);
%mp_chop("%sysfunc(pathname(&fref1,F))"
,matchvar=matchstr
,keep=FIRST
,matchpoint=START
,offset=-1
,outfile="&chopout"
,mdebug=&mdebug
)
%if &outlib ne 0 %then %do;
libname &outlib json "&chopout";
%end;
%if &outref ne 0 %then %do;
filename &outref "&chopout";
%end;
%if &mdebug=0 %then %do;
filename &webref clear;
filename &fref1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend ms_testservice;
%macro mf_existfileref(fref
)/*/STORE SOURCE*/;
%local rc;
%let rc=%sysfunc(fileref(&fref));
%if &rc=0 %then %do;
1
%end;
%else %if &rc<0 %then %do;
%put &sysmacroname: Fileref &fref exists but the underlying file does not;
1
%end;
%else %do;
0
%end;
%mend mf_existfileref;
%macro mv_getjobresult(uri=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
,result=WEBOUT_JSON
,outref=0
,outlib=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like: &uri",'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%if &outref ne 0 and %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* fetch job info */
%local fname1;
%let fname1=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%if &mdebug=1 %then %do;
data _null_;
infile &fname1 lrecl=32767;
input;
putlog _infile_;
run;
%end;
/* extract results link */
%local lib1 resuri;
%let lib1=%mf_getuniquelibref();
libname &lib1 JSON fileref=&fname1;
data _null_;
set &lib1..results;
call symputx('resuri',_&result,'l');
&dbg putlog "&sysmacroname results: " (_all_)(=);
run;
%mp_abort(iftrue=("&resuri"=".")
,mac=&sysmacroname
,msg=%str(Variable _&result did not exist in the response json)
)
/* extract results */
%local fname2;
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&resuri/content?limit=10000";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
/* send one char at a time as the json can be very wide */
data _null_;
infile &fname2 recfm=n;
input char $char1. ;
putlog char $char1. @;
run;
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&fname2,outref=&outref)
%end;
%if &outlib ne 0 %then %do;
libname &outlib JSON fileref=&fname2;
%end;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &lib1 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjobresult;
%macro mf_getattrn(
libds
,attr
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid = 0 %then %do;
%put %str(WARN)ING: Cannot open %trim(&libds), system message below;
%put %sysfunc(sysmsg());
-1
%end;
%else %do;
%sysfunc(attrn(&dsid,&attr))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_getattrn;
%macro mf_nobs(libds
)/*/STORE SOURCE*/;
%mf_getattrn(&libds,NLOBS)
%mend mf_nobs;
%macro mf_existvarlist(libds, varlist
)/*/STORE SOURCE*/;
%if %str(&libds)=%str() or %str(&varlist)=%str() %then %do;
%mf_abort(msg=No value provided to libds(&libds) or varlist (&varlist)!
,mac=mf_existvarlist.sas)
%end;
%local dsid rc i var found;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %str(WARN)ING: unable to open &libds in mf_existvarlist (&dsid);
%end;
%if %sysfunc(attrn(&dsid,NVARS))=0 %then %do;
%put MF_EXISTVARLIST: No variables in &libds ;
0
%return;
%end;
%else %do i=1 %to %sysfunc(countw(&varlist));
%let var=%scan(&varlist,&i);
%if %sysfunc(varnum(&dsid,&var))=0 %then %do;
%let found=&found &var;
%end;
%end;
%let rc=%sysfunc(close(&dsid));
%if %str(&found)=%str() %then %do;
1
%end;
%else %do;
0
%put Vars not found: &found;
%end;
%mend mf_existvarlist;
/** @endcond */
%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);
%local x;
%if ( %length(&prefix) gt 7 ) %then %do;
%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;
0
%return;
%end;
%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;
%put %str(ERR)OR: Invalid prefix (&prefix);
0
%return;
%end;
/* Set maxtries equal to '10 to the power of [# unused characters] - 1' */
%let maxtries=%eval(10**(8-%length(&prefix))-1);
%do x = 0 %to &maxtries;
%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;
&prefix&x
%return;
%end;
%let x = %eval(&x + 1);
%end;
%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;
%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;
0
%mend mf_getuniquelibref;
/** @cond */
%macro mf_existvar(libds /* 2 part dataset name */
, var /* variable name */
)/*/STORE SOURCE*/;
%local dsid rc;
%let dsid=%sysfunc(open(&libds,is));
%if &dsid=0 %then %do;
%put %sysfunc(sysmsg());
0
%end;
%else %if %length(&var)=0 %then %do;
0
%let rc=%sysfunc(close(&dsid));
%end;
%else %do;
%sysfunc(varnum(&dsid,&var))
%let rc=%sysfunc(close(&dsid));
%end;
%mend mf_existvar;
/** @endcond */
%macro mv_getjoblog(uri=0,outref=0
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,mdebug=0
);
%local dbg libref1 libref2 loglocation fname1 fname2;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
/* validation in datastep for better character safety */
%local errmsg errflg;
data _null_;
uri=symget('uri');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
if scan(uri,-1)='state' or scan(uri,1) ne 'jobExecution' then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /jobExecution/jobs/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
run;
%mp_abort(iftrue=(&errflg=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
%mp_abort(iftrue=(&outref=0)
,mac=&sysmacroname
,msg=%str(Output fileref should be provided)
)
%if %mf_existfileref(&outref) ne 1 %then %do;
filename &outref temp;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* prepare request*/
%let fname1=%mf_getuniquefileref();
%let fname2=%mf_getuniquefileref();
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri&uri";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log loc from &uri;
data _null_;infile &fname1;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref1=%mf_getuniquelibref();
libname &libref1 JSON fileref=&fname1;
data _null_;
set &libref1..root;
call symputx('loglocation',loglocation,'l');
run;
/* validate log path*/
%let errflg=1;
%let errmsg=No loglocation entry in &fname1 fileref;
data _null_;
uri=symget('loglocation');
if length(uri)<12 then do;
call symputx('errflg',1);
call symputx('errmsg',"URI is invalid (too short) - '&uri'",'l');
end;
else if (scan(uri,1,'/') ne 'compute' or scan(uri,2,'/') ne 'sessions')
and (scan(uri,1,'/') ne 'files' or scan(uri,2,'/') ne 'files')
then do;
call symputx('errflg',1);
call symputx('errmsg',
"URI should be in format /compute/sessions/$$$$UUID$$$$/jobs/$$$$UUID$$$$"
!!" or /files/files/$$$$UUID$$$$"
!!" but is actually like:"!!uri,'l');
end;
else do;
call symputx('errflg',0,'l');
call symputx('logloc',uri,'l');
end;
run;
%mp_abort(iftrue=(%str(&errflg)=1)
,mac=&sysmacroname
,msg=%str(&errmsg)
)
/* we have a log uri - now fetch the log */
%&dbg.put &sysmacroname: querying &base_uri&logloc/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%if &SYS_PROCHTTP_STATUS_CODE=400 %then %do;
/* fetch log from parent session */
%let logloc=%substr(&logloc,1,%index(&logloc,%str(/jobs/))-1);
%&dbg.put &sysmacroname: Now querying &base_uri&logloc/log/content;
proc http method='GET' out=&fname2 &oauth_bearer
url="&base_uri&logloc/log/content?limit=10000";
headers
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &mdebug=1 %then %do;
%put &sysmacroname: fetching log content from &base_uri&logloc/log/content;
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%end;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
%if &mdebug ne 1 %then %do; /* have already output above */
data _null_;infile &fname2;input;putlog _infile_;run;
%end;
%mp_abort(mac=&sysmacroname
,msg=%str(logfetch: &SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let libref2=%mf_getuniquelibref();
libname &libref2 JSON fileref=&fname2;
data _null_;
file &outref mod;
if _n_=1 then do;
put "/** SASJS Viya Job Log Extract start: &uri **/";
end;
set &libref2..items end=last;
%if &mdebug=1 %then %do;
putlog line;
%end;
put line;
if last then do;
put "/** SASJS Viya Job Log Extract end: &uri **/";
end;
run;
%if &mdebug=0 %then %do;
filename &fname1 clear;
filename &fname2 clear;
libname &libref1 clear;
libname &libref2 clear;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_getjoblog;
%macro mv_jobwaitfor(action
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,inds=0
,outds=work.mv_jobwaitfor
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(input dataset not provided)
)
%mp_abort(iftrue=(%mf_existvar(&inds,uri)=0)
,mac=&sysmacroname
,msg=%str(The URI variable was not found in the input dataset(&inds))
)
%mp_abort(iftrue=(%mf_existvar(&inds,_program)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM variable was not found in the input dataset(&inds))
)
%if %mf_nobs(&inds)=0 %then %do;
%put NOTE: Zero observations in &inds, &sysmacroname will now exit;
%return;
%end;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data _null_;
length jobparams $32767;
set &inds end=last;
call symputx(cats('joburi',_n_),substr(uri,1,55),'l');
call symputx(cats('jobname',_n_),_program,'l');
call symputx(cats('jobparams',_n_),jobparams,'l');
if last then call symputx('uricnt',_n_,'l');
run;
%local runcnt;
%if &action=ALL %then %let runcnt=&uricnt;
%else %if &action=ANY %then %let runcnt=1;
%else %let runcnt=&uricnt;
%local fname0 ;
%let fname0=%mf_getuniquefileref();
data &outds;
format _program uri $128. state $32. stateDetails $32. timestamp datetime19.
jobparams $32767.;
call missing (of _all_);
stop;
run;
%local i;
%do i=1 %to &uricnt;
%if "&&joburi&i" ne "0" %then %do;
proc http method='GET' out=&fname0 &oauth_bearer url="&base_uri/&&joburi&i";
headers "Accept"="application/json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end; ;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201
%then %do;
data _null_;infile &fname0;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%let status=notset;
%local libref1;
%let libref1=%mf_getuniquelibref();
libname &libref1 json fileref=&fname0;
data _null_;
length state stateDetails $32;
set &libref1..root;
call symputx('status',state,'l');
call symputx('stateDetails',stateDetails,'l');
run;
libname &libref1 clear;
%if &status=completed or &status=failed or &status=canceled %then %do;
%local plainuri;
%let plainuri=%substr(&&joburi&i,1,55);
proc sql;
insert into &outds set
_program="&&jobname&i",
uri="&plainuri",
state="&status",
stateDetails=symget("stateDetails"),
timestamp=datetime(),
jobparams=symget("jobparams&i");
%let joburi&i=0; /* do not re-check */
/* fetch log */
%if %str(&outref) ne 0 %then %do;
%mv_getjoblog(uri=&plainuri,outref=&outref,mdebug=&mdebug)
%end;
%end;
%else %if &status=idle or &status=pending or &status=running %then %do;
data _null_;
call sleep(1,1);
run;
%end;
%else %do;
%mp_abort(mac=&sysmacroname
,msg=%str(status &status not expected!!)
)
%end;
%if (&raise_err) %then %do;
%if (&status = canceled or &status = failed or %length(&stateDetails)>0)
%then %do;
%if ("&stateDetails" = "%str(war)ning") %then %let SYSCC=4;
%else %let SYSCC=5;
%put %str(ERR)OR: Job &&jobname&i. did not complete. &stateDetails;
%return;
%end;
%end;
%end;
%if &i=&uricnt %then %do;
%local goback;
%let goback=0;
proc sql noprint;
select count(*) into:goback from &outds;
%if &goback lt &runcnt %then %let i=0;
%end;
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
%end;
%mend mv_jobwaitfor;
%macro mf_isblank(param
)/*/STORE SOURCE*/;
%sysevalf(%superq(param)=,boolean)
%mend mf_isblank;
%macro mv_getfoldermembers(root=/
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outds=mv_getfolders
);
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%if %mf_isblank(&root)=1 %then %let root=/;
options noquotelenmax;
/* request the client details */
%local fname1 libref1;
%let fname1=%mf_getuniquefileref();
%let libref1=%mf_getuniquelibref();
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
%if "&root"="/" %then %do;
/* if root just list root folders */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/rootFolders?limit=1000";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref1 JSON fileref=&fname1;
data &outds;
set &libref1..items;
run;
%end;
%else %do;
/* first get parent folder id */
proc http method='GET' out=&fname1 &oauth_bearer
url="&base_uri/folders/folders/@item?path=&root";
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
/*data _null_;infile &fname1;input;putlog _infile_;run;*/
libname &libref1 JSON fileref=&fname1;
/* now get the followon link to list members */
%local href cnt;
%let cnt=0;
data _null_;
length rel href $512;
call missing(rel,href);
set &libref1..links;
if rel='members' then do;
url=cats("'","&base_uri",href,"?limit=10000'");
call symputx('href',url,'l');
call symputx('cnt',1,'l');
end;
run;
%if &cnt=0 %then %do;
%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;
%return;
%end;
%local fname2 libref2;
%let fname2=%mf_getuniquefileref();
%let libref2=%mf_getuniquelibref();
proc http method='GET' out=&fname2 &oauth_bearer
url=%unquote(%superq(href));
%if &grant_type=authorization_code %then %do;
headers "Authorization"="Bearer &&&access_token_var";
%end;
run;
libname &libref2 JSON fileref=&fname2;
data &outds;
length id $36 name $128 uri $64 type $32 description $256;
if _n_=1 then call missing (of _all_);
set &libref2..items;
run;
filename &fname2 clear;
libname &libref2 clear;
%end;
/* clear refs */
filename &fname1 clear;
libname &libref1 clear;
%mend mv_getfoldermembers;
%macro mv_jobexecute(path=0
,name=0
,contextName=SAS Job Execution compute context
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,paramstring=0
,outds=work.mv_jobexecute
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&path"="0")
,mac=&sysmacroname
,msg=%str(Path not provided)
)
%mp_abort(iftrue=("&name"="0")
,mac=&sysmacroname
,msg=%str(Job Name not provided)
)
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
data;run;
%local foldermembers;
%let foldermembers=&syslast;
%mv_getfoldermembers(root=&path
,access_token_var=&access_token_var
,grant_type=&grant_type
,outds=&foldermembers
)
%local joburi;
%let joburi=0;
data _null_;
length name uri $512;
call missing(name,uri);
set &foldermembers;
if name="&name" and uri=:'/jobDefinitions/definitions'
then call symputx('joburi',uri);
run;
%mp_abort(iftrue=("&joburi"="0")
,mac=&sysmacroname
,msg=%str(Job &path/&name not found)
)
/* prepare request*/
%local fname0 fname1;
%let fname0=%mf_getuniquefileref();
%let fname1=%mf_getuniquefileref();
data _null_;
file &fname0;
length joburi contextname $128 paramstring $32765;
joburi=quote(trim(symget('joburi')));
contextname=quote(trim(symget('contextname')));
_program=quote("&path/&name");
paramstring=symget('paramstring');
put '{"jobDefinitionUri":' joburi ;
put ' ,"arguments":{"_contextName":' contextname;
put ' ,"_program":' _program;
if paramstring ne "0" then do;
put ' ,' paramstring;
end;
put '}}';
run;
proc http method='POST' in=&fname0 out=&fname1 &oauth_bearer
url="&base_uri/jobExecution/jobs";
headers "Content-Type"="application/vnd.sas.job.execution.job.request+json"
"Accept"="application/vnd.sas.job.execution.job+json"
%if &grant_type=authorization_code %then %do;
"Authorization"="Bearer &&&access_token_var"
%end;
;
run;
%if &SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201 %then
%do;
data _null_;infile &fname0;input;putlog _infile_;run;
data _null_;infile &fname1;input;putlog _infile_;run;
%mp_abort(mac=&sysmacroname
,msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)
)
%end;
%local libref;
%let libref=%mf_getuniquelibref();
libname &libref JSON fileref=&fname1;
data &outds;
set &libref..links;
_program="&path/&name";
run;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%else %do;
/* clear refs */
filename &fname0 clear;
filename &fname1 clear;
libname &libref;
%end;
%mend mv_jobexecute;
%macro mv_jobflow(inds=0,outds=work.mv_jobflow
,maxconcurrency=8
,access_token_var=ACCESS_TOKEN
,grant_type=sas_services
,outref=0
,raise_err=0
,mdebug=0
);
%local dbg;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%put inds vars:;
data _null_;
set &inds;
putlog (_all_)(=);
run;
%end;
%else %let dbg=*;
%local oauth_bearer;
%if &grant_type=detect %then %do;
%if %symexist(&access_token_var) %then %let grant_type=authorization_code;
%else %let grant_type=sas_services;
%end;
%if &grant_type=sas_services %then %do;
%let oauth_bearer=oauth_bearer=sas_services;
%let &access_token_var=;
%end;
%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password
and &grant_type ne sas_services
)
,mac=&sysmacroname
,msg=%str(Invalid value for grant_type: &grant_type)
)
%mp_abort(iftrue=("&inds"="0")
,mac=&sysmacroname
,msg=%str(Input dataset was not provided)
)
%mp_abort(iftrue=(%mf_existVarList(&inds,_PROGRAM)=0)
,mac=&sysmacroname
,msg=%str(The _PROGRAM column must exist on input dataset &inds)
)
%mp_abort(iftrue=(&maxconcurrency<1)
,mac=&sysmacroname
,msg=%str(The maxconcurrency variable should be a positive integer)
)
/* set defaults if not provided */
%if %mf_existVarList(&inds,_CONTEXTNAME FLOW_ID)=0 %then %do;
data &inds;
%if %mf_existvarList(&inds,_CONTEXTNAME)=0 %then %do;
length _CONTEXTNAME $128;
retain _CONTEXTNAME "SAS Job Execution compute context";
%end;
%if %mf_existvarList(&inds,FLOW_ID)=0 %then %do;
retain FLOW_ID 0;
%end;
set &inds;
&dbg. putlog (_all_)(=);
run;
%end;
%local missings;
proc sql noprint;
select count(*) into: missings
from &inds
where flow_id is null or _program is null;
%mp_abort(iftrue=(&missings>0)
,mac=&sysmacroname
,msg=%str(input dataset has &missings missing values for FLOW_ID or _PROGRAM)
)
%if %mf_nobs(&inds)=0 %then %do;
%put No observations in &inds! Leaving macro &sysmacroname;
%return;
%end;
/* ensure output table is available */
data &outds;run;
proc sql;
drop table &outds;
options noquotelenmax;
%local base_uri; /* location of rest apis */
%let base_uri=%mf_getplatform(VIYARESTAPI);
/* get flows */
proc sort data=&inds;
by flow_id;
run;
data _null_;
set &inds (keep=flow_id) end=last;
by flow_id;
if last.flow_id then do;
cnt+1;
call symputx(cats('flow',cnt),flow_id,'l');
end;
if last then call symputx('flowcnt',cnt,'l');
run;
/* prepare temporary datasets and frefs */
%local fid jid jds jjson jdsapp jdsrunning jdswaitfor jfref;
data;run;%let jds=&syslast;
data;run;%let jjson=&syslast;
data;run;%let jdsapp=&syslast;
data;run;%let jdsrunning=&syslast;
data;run;%let jdswaitfor=&syslast;
%let jfref=%mf_getuniquefileref();
/* start loop */
%do fid=1 %to &flowcnt;
%if not ( &raise_err and &syscc ) %then %do;
%put preparing job attributes for flow &&flow&fid;
%local jds jcnt;
data &jds(drop=_contextName _program);
set &inds(where=(flow_id=&&flow&fid));
if _contextName='' then _contextName="SAS Job Execution compute context";
call symputx(cats('job',_n_),_program,'l');
call symputx(cats('context',_n_),_contextName,'l');
call symputx('jcnt',_n_,'l');
&dbg. if _n_= 1 then putlog "Loop &fid";
&dbg. putlog (_all_)(=);
run;
%put exporting job variables in json format;
%do jid=1 %to &jcnt;
data &jjson;
set &jds;
if _n_=&jid then do;
output;
stop;
end;
run;
proc json out=&jfref;
export &jjson / nosastags fmtnumeric;
run;
data _null_;
infile &jfref lrecl=32767;
input;
jparams=cats('jparams',symget('jid'));
call symputx(jparams,substr(_infile_,3,length(_infile_)-4));
run;
%local jobuid&jid;
%let jobuid&jid=0; /* used in next loop */
%end;
%local concurrency completed;
%let concurrency=0;
%let completed=0;
proc sql; drop table &jdsrunning;
%do jid=1 %to &jcnt;
/**
* now we can execute the jobs up to the maxconcurrency setting
*/
%if "&&job&jid" ne "0" %then %do; /* this var is zero if job finished */
/* check to see if the job finished in the previous round */
%if %sysfunc(exist(&outds))=1 %then %do;
%local jobcheck; %let jobcheck=0;
proc sql noprint;
select count(*) into: jobcheck
from &outds where uuid="&&jobuid&jid";
%if &jobcheck>0 %then %do;
%put &&job&jid in flow &fid with uid &&jobuid&jid completed!;
%let job&jid=0;
%end;
%end;
/* check if job was triggered and, if
so, if we have enough slots to run? */
%if ("&&jobuid&jid"="0") and (&concurrency<&maxconcurrency) %then %do;
/* But only start if no issues detected so far */
%if not ( &raise_err and &syscc ) %then %do;
%local jobname jobpath;
%let jobname=%scan(&&job&jid,-1,/);
%let jobpath=
%substr(&&job&jid,1,%length(&&job&jid)-%length(&jobname)-1);
%put executing &jobpath/&jobname with paramstring &&jparams&jid;
%mv_jobexecute(path=&jobpath
,name=&jobname
,paramstring=%superq(jparams&jid)
,outds=&jdsapp
,contextname=&&context&jid
)
data &jdsapp;
format jobparams $32767.;
set &jdsapp(where=(method='GET' and rel='state'));
jobparams=symget("jparams&jid");
/* uri here has the /state suffix */
uuid=scan(uri,-2,'/');
call symputx("jobuid&jid",uuid,'l');
run;
proc append base=&jdsrunning data=&jdsapp;
run;
%let concurrency=%eval(&concurrency+1);
/* sleep one second after every request to smooth the impact */
data _null_;
call sleep(1,1);
run;
%end;
%else %do; /* Job was skipped due to problems */
%put jobid &&job&jid in flow &fid skipped due to SYSCC (&syscc);
%let completed = %eval(&completed+1);
%let job&jid=0; /* Indicate job has finished */
%end;
%end;
%end;
%if &jid=&jcnt %then %do;
/* we are at the end of the loop - check which jobs have finished */
%mv_jobwaitfor(ANY,inds=&jdsrunning,outds=&jdswaitfor,outref=&outref
,raise_err=&raise_err,mdebug=&mdebug)
%local done;
%let done=%mf_nobs(&jdswaitfor);
%if &done>0 %then %do;
%let completed=%eval(&completed+&done);
%let concurrency=%eval(&concurrency-&done);
data &jdsapp;
set &jdswaitfor;
flow_id=&&flow&fid;
uuid=scan(uri,-1,'/');
run;
proc append base=&outds data=&jdsapp;
run;
%end;
proc sql;
delete from &jdsrunning
where uuid in (select uuid from &outds
where state in ('canceled','completed','failed')
);
/* loop again if jobs are left */
%if &completed < &jcnt %then %do;
%let jid=0;
%put looping flow &fid again;
%put &completed of &jcnt jobs completed, &concurrency jobs running;
%end;
%end;
%end;
%end;
%else %do;
%put Flow &&flow&fid skipped due to SYSCC (&syscc);
%end;
/* back up and execute the next flow */
%end;
%if &mdebug=1 %then %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mv_jobflow;
%macro mx_testservice(program,
inputfiles=0,
inputdatasets=0,
inputparams=0,
debug=log,
mdebug=0,
outlib=0,
outref=0,
viyaresult=WEBOUT_JSON,
viyacontext=SAS Job Execution compute context
);
%local dbg pcnt fref1 fref2 webref webrefpath i webcount var platform;
%if &mdebug=1 %then %do;
%put &sysmacroname entry vars:;
%put _local_;
%end;
%else %let dbg=*;
/* sanitise inputparams */
%let pcnt=0;
%if &inputparams ne 0 %then %do;
data _null_;
set &inputparams;
if not nvalid(name,'v7') then putlog (_all_)(=);
else if name in (
'program','inputfiles','inputparams','debug','outlib','outref'
) then putlog (_all_)(=);
else do;
x+1;
call symputx(name,quote(cats(value)),'l');
call symputx(cats('pval',x),name,'l');
call symputx('pcnt',x,'l');
end;
run;
%mp_abort(iftrue= (%mf_nobs(&inputparams) ne &pcnt)
,mac=&sysmacroname
,msg=%str(Invalid values in &inputparams)
)
%end;
/* convert inputdatasets to filerefs */
%if "&inputdatasets" ne "0" %then %do;
%if %quote(&inputfiles)=0 %then %let inputfiles=;
%do i=1 %to %sysfunc(countw(&inputdatasets,%str( )));
%let var=%scan(&inputdatasets,&i,%str( ));
%local dsref&i;
%let dsref&i=%mf_getuniquefileref();
%mp_ds2csv(&var,outref=&&dsref&i,headerformat=SASJS)
%let inputfiles=&inputfiles &&dsref&i:%scan(&var,-1,.);
%end;
%end;
%let platform=%mf_getplatform();
%let fref1=%mf_getuniquefileref();
%let fref2=%mf_getuniquefileref();
%let webref=%mf_getuniquefileref();
%let webrefpath=%sysfunc(pathname(work))/%mf_getuniquename();
/* mp_chop requires a physical path as input */
filename &webref "&webrefpath";
%if &platform=SASMETA %then %do;
/* parse the input files */
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%end;
%end;
%else %let webcount=0;
proc stp program="&program";
inputparam _program="&program"
%do i=1 %to &webcount;
%if &webcount=1 %then %do;
_webin_fileref="&&webref&i"
_webin_name="&&webname&i"
%end;
%else %do;
_webin_fileref&i="&&webref&i"
_webin_name&i="&&webname&i"
%end;
%end;
_webin_file_count="&webcount"
_debug="&debug"
%do i=1 %to &pcnt;
/* resolve name only, proc stp fetches value */
&&pval&i=&&&&&&pval&i
%end;
;
%do i=1 %to &webcount;
inputfile &&webref&i;
%end;
outputfile _webout=&webref;
run;
data _null_;
infile &webref;
file &fref1;
input;
length line $10000;
if index(_infile_,'>>weboutBEGIN<<') then do;
line=tranwrd(_infile_,'>>weboutBEGIN<<','');
put line;
end;
else if index(_infile_,'>>weboutEND<<') then do;
line=tranwrd(_infile_,'>>weboutEND<<','');
put line;
stop;
end;
else put _infile_;
run;
data _null_;
infile &fref1;
input;
put _infile_;
run;
%if &outlib ne 0 %then %do;
libname &outlib json (&fref1);
%end;
%if &outref ne 0 %then %do;
filename &outref temp;
%mp_binarycopy(inref=&webref,outref=&outref)
%end;
%end;
%else %if &platform=SASVIYA %then %do;
/* prepare inputparams */
%local ds1;
%let ds1=%mf_getuniquename();
%if "&inputparams" ne "0" %then %do;
proc transpose data=&inputparams out=&ds1;
id name;
var value;
run;
%end;
%else %do;
data &ds1;run;
%end;
/* parse the input files - convert to sasjs params */
%local webcount i var sasjs_tables;
%if %quote(&inputfiles) ne 0 %then %do;
%let webcount=%sysfunc(countw(&inputfiles));
%put &=webcount;
%do i=1 %to &webcount;
%let var=%scan(&inputfiles,&i,%str( ));
%local webfref&i webname&i sasjs&i.data;
%let webref&i=%scan(&var,1,%str(:));
%let webname&i=%scan(&var,2,%str(:));
%put webref&i=&&webref&i;
%put webname&i=&&webname&i;
%let sasjs_tables=&sasjs_tables &&webname&i;
data _null_;
infile &&webref&i lrecl=32767;
input;
if _n_=1 then call symputx("sasjs&i.data",_infile_);
else call symputx(
"sasjs&i.data",cats(symget("sasjs&i.data"),'0D0A'x,_infile_)
);
putlog "&sysmacroname infile: " _infile_;
run;
data &ds1;
set &ds1;
length sasjs&i.data $32767 sasjs_tables $1000;
sasjs&i.data=symget("sasjs&i.data");
sasjs_tables=symget("sasjs_tables");
run;
%end;
%end;
%else %let webcount=0;
data &ds1;
retain _program "&program";
retain _contextname "&viyacontext";
set &ds1;
putlog "&sysmacroname inputparams:";
putlog (_all_)(=);
run;
%mv_jobflow(inds=&ds1
,maxconcurrency=1
,outds=work.results
,outref=&fref1
,mdebug=&mdebug
)
/* show the log */
data _null_;
infile &fref1;
input;
putlog _infile_;
run;
/* get the uri to fetch results */
data _null_;
set work.results;
call symputx('uri',uri);
putlog "&sysmacroname: fetching results for " uri;
run;
/* fetch results from webout.json */
%mv_getjobresult(uri=&uri,
result=&viyaresult,
outref=&outref,
outlib=&outlib,
mdebug=&mdebug
)
%end;
%else %if &platform=SASJS %then %do;
%ms_testservice(&program
,inputfiles=&inputfiles
,inputdatasets=&inputdatasets
,inputparams=&inputparams
,debug=&debug
,mdebug=&mdebug
,outlib=&outlib
,outref=&outref
)
%end;
%else %do;
%put %str(ERR)OR: Unrecognised platform: &platform;
%end;
%if &mdebug=0 %then %do;
filename &fref1 clear;
%if &platform ne SASJS %then %do;
filename &fref2 clear;
filename &webref clear;
%end;
%end;
%else %do;
%put &sysmacroname exit vars:;
%put _local_;
%end;
%mend mx_testservice;
* BuildInit start;
/**
@file buildinitviya.sas
@brief initialisation for viya build program
**/
options nonotes nomprint;
* BuildInit end;
%let path=services;
%let filename=clickme.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICA8dGl0bGU+RGF0YSBDb250cm9sbGVyPC90aXRsZT4KICAgIDwhLS0gPGJhc2UgaHJlZj0iLyI+IC0tPgoKICAgIDwhLS0gbWV0YSB0YWdzIC0tPgogICAgPG1ldGEgbmFtZT0iZGVzY3Jp'@;
put 'cHRpb24iIGNvbnRlbnQ9IkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUiPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgaXRlbXByb3A9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZp'@;
put 'ZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIGl0ZW1wcm9wPSJpbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8vZGVtby5kYXRh'@;
put 'Y29udHJvbGxlci5pbyI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dHlwZSIgY29udGVudD0id2Vic2l0ZSI+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dGl0bGUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9u'@;
put 'IiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIj4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2ltZy9kY19iZ19Bc3NldC01QDJ4LnBuZyI+CgogICAgPG1ldGEgbmFtZT0idmlld3BvcnQi'@;
put 'IGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xIj4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+CiAgICA8bGluayByZWw9Imljb24iIHR5cGU9ImltYWdlL3gtaWNvbiIgaHJlZj0iL1NBU0pvYkV4ZWN1'@;
put 'dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93ZWIvaW1hZ2VzL2Zhdmljb24uaWNvIj4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2VydmljZXMvd2ViL3N0eWxlcy43NGY1NjVkOGI4YWRhOTdl'@;
put 'LmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIg'@;
put 'U0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNlci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1'@;
put 'cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJlc3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3Rh'@;
put 'Z2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAgICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAi'@;
put 'PjxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTVklZQSIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUg'@;
put 'Y29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI+CiAgPC9zYXNqcz4KCiAgCiAgICA8bXktYXBwPjwvbXktYXBwPgog'@;
put 'IDxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9ydW50aW1lLmYxMmZjNmYwM2IwMjYzNjAuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9Ii9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAv'@;
put 'ZGMvc2VydmljZXMvd2ViL3BvbHlmaWxscy5jNzM2NTFlOGVlNTkwODg1LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9zY3JpcHRzLmY0MThkN2U3MWRiZmQzMDkuanMiIGRl'@;
put 'ZmVyPSIiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9tYWluLmYxZGIwZmFlYTIyOWFiOTEuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+CgoKICAgIDwhLS0gCiAgICAgIFRvIHByZXZlbnQgcmVkaXJl'@;
put 'Y3RzIC8gcHJlc2VydmUgdGhlIFVSTCB3aGVuIHN0cmVhbWluZyAKICAgICAgSFRNTCBmcm9tIFZpeWEsIHdlIHJlY29tbWVuZCB1c2luZyB0aGUgX2RlYnVnPTIgcGFyYW1ldGVyCiAgICAgIHdoaWNoIHdpbGwgc2VydmUgdGhlIGNvbnRlbnQgaW4gYW4gaWZyYW1lLiAgVGhlIGZvbGxvd2lu'@;
put 'ZyAKICAgICAgY29kZSB3aWxsIHRoZW4gbW9kaWZ5IHRoZSBwYXJlbnQgaWZyYW1lIHRvIHNlcnZlIHRoZSBjb250ZW50CiAgICAgIGluIGZ1bGwgc2NyZWVuLgogICAgLS0+CiAgICA8c2NyaXB0PgogICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpewogICAgICB3aW5kb3cuZnJhbWVFbGVt'@;
put 'ZW50LnN0eWxlPSJoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3Bvc2l0aW9uOmFic29sdXRlIjsKICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImFsbG93ZnVsbHNjcmVlbiIsIiIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJmcmFtZWJvcmRl'@;
put 'ciIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgibWFyZ2luaGVpZ2h0IiwiMCIpCiAgICAgIHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW53aWR0aCIsIjAiKQogICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgi'@;
put 'c2Nyb2xsaW5nIiwiYXV0byIpCiAgICAgIHdpbmRvdy5mb2N1cygpCiAgICB9CiAgICA8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let path=services/admin;
%let service=exportconfig;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads zip file of DC customer configurations';
put '@details Zip contains several excel files, containing the customer specific';
put '(non-DC) configurations. Useful when migrating to a new instance of';
put 'Data Controller.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let work=%sysfunc(pathname(work));';
put '/* excel does not work in all envs */';
put '%let mime=application/vnd.ms-excel;';
put '%let dbms=EXCEL;';
put '%let mime=application/csv;';
put '%let dbms=CSV;';
put '%let ext=csv;';
put '%macro conditional_export(ds);';
put '%if %mf_nobs(&ds)>0 %then %do;';
put 'PROC EXPORT DATA= &ds OUTFILE= "&work/&ds..&ext"';
put 'DBMS=&dbms REPLACE;';
put 'RUN;';
put 'ods package(ProdOutput) add file="&work/&ds..&ext" mimetype="&mime";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(syscc=&syscc after &ds prep)';
put ')';
put '%mend conditional_export;';
put 'ods package(ProdOutput) open nopf;';
put 'data MPE_ALERTS;';
put 'set &mpelib..MPE_ALERTS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ALERTS)';
put 'data MPE_COLUMN_LEVEL_SECURITY;';
put 'set &mpelib..MPE_COLUMN_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'where also CLS_LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_COLUMN_LEVEL_SECURITY)';
put 'data MPE_CONFIG;';
put 'set &mpelib..MPE_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_CONFIG)';
put 'data MPE_DATADICTIONARY;';
put 'set &mpelib..MPE_DATADICTIONARY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'if DD_SOURCE=:"&mpelib" then do;';
put '/* nothing */';
put 'end;';
put 'else output;';
put 'run;';
put '%conditional_export(MPE_DATADICTIONARY)';
put 'data MPE_EMAILS;';
put 'set &mpelib..MPE_EMAILS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EMAILS)';
put 'data MPE_EXCEL_CONFIG;';
put 'set &mpelib..MPE_EXCEL_CONFIG;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_EXCEL_CONFIG)';
put 'data MPE_GROUPS;';
put 'set &mpelib..MPE_GROUPS;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_GROUPS)';
put 'data MPE_ROW_LEVEL_SECURITY;';
put 'set &mpelib..MPE_ROW_LEVEL_SECURITY;';
put 'where &dc_dttmtfmt. le tx_to;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_ROW_LEVEL_SECURITY)';
put 'data MPE_SECURITY;';
put 'set &mpelib..MPE_SECURITY;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_SECURITY)';
put 'data MPE_SELECTBOX;';
put 'set &mpelib..MPE_SELECTBOX;';
put 'where &dc_dttmtfmt. le ver_to_dttm;';
put 'where also select_lib ne "&mpelib";';
put 'drop ver_: selectbox_rk;';
put 'run;';
put '%conditional_export(MPE_SELECTBOX)';
put 'data MPE_TABLES;';
put 'set &mpelib..MPE_TABLES;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also LIBREF ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_TABLES)';
put 'data MPE_VALIDATIONS;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'where also BASE_LIB ne "&mpelib";';
put 'drop tx_: ;';
put 'run;';
put '%conditional_export(MPE_VALIDATIONS)';
put '/* finish up zip file */';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name="DCBACKUP.zip" archive_path="&work");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc after zip prep)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&work/DCBACKUP.zip)';
put ',outname=DCBACKUP.zip';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=exportdb;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2inserts(ds, outref=0,schema=0,outds=0,flavour=SAS,maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WAR)NING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '%if &outref=0 %then %do;';
put '%put %str(WAR)NING: Please provide a fileref;';
put '%return;';
put '%end;';
put '%if %mf_existfileref(&outref)=0 %then %do;';
put 'filename &outref temp lrecl=66000;';
put '%end;';
put '%if &schema=0 %then %let schema=;';
put '%else %let schema=&schema..;';
put '%if &outds=0 %then %let outds=%scan(&ds,2,.);';
put '%local nobs;';
put 'proc sql noprint;';
put 'select count(*) into: nobs TRIMMED from &ds;';
put '%if &nobs=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No rows found in &ds */";';
put 'run;';
put '%end;';
put '%local vars;';
put '%let vars=%mf_getvarcount(&ds);';
put '%if &vars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'put "/* No columns found in &schema.&ds */";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &vars>1600 and &flavour=PGSQL %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &schema.&ds contains &vars vars */";';
put 'put "/* Postgres cannot handle tables with over 1600 vars */";';
put 'put "/* No inserts will be generated for this table */";';
put 'run;';
put '%return;';
put '%end;';
put '%local varlist varlistcomma;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let varlistcomma=%mf_getvarlist(&ds,dlm=%str(,),quote=double);';
put '/* next, export data */';
put 'data _null_;';
put 'file &outref mod ;';
put 'if _n_=1 then put "/* &schema.&outds (&nobs rows, &vars columns) */";';
put 'set &ds;';
put '%if &maxobs ne max %then %do;';
put 'if _n_>&maxobs then stop;';
put '%end;';
put 'length _____str $32767;';
put 'call missing(_____str);';
put 'format _numeric_ best.;';
put 'format _character_ ;';
put '%local i comma var vtype vfmt;';
put '%do i=1 %to %sysfunc(countw(&varlist));';
put '%let var=%scan(&varlist,&i);';
put '%let vtype=%mf_getvartype(&ds,&var);';
put '%let vfmt=%upcase(%mf_getvarformat(&ds,&var,force=1));';
put '%if &i=1 %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put "insert into &schema.&outds set ";';
put 'put " &var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '_____str=cats(';
put '"INSERT INTO &schema.&outds ("';
put ',symget(''varlistcomma'')';
put ',") VALUES ("';
put ');';
put 'put _____str;';
put 'put " "@;';
put '%end;';
put '%end;';
put '%else %do;';
put '%if &flavour=SAS %then %do;';
put 'put " ,&var="@;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put " ,"@;';
put '%end;';
put '%end;';
put '%if &vtype=N %then %do;';
put '%if &flavour=SAS %then %do;';
put 'put &var;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'if missing(&var) then put ''NULL'';';
put '%if &applydttm=YES and "%substr(&vfmt.xxxxxxxx,1,8)"="DATETIME"';
put '%then %do;';
put 'else put "TIMESTAMP ''" &var E8601DT25.6 "''";';
put '%end;';
put '%else %do;';
put 'else put &var;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '_____str="''"!!trim(tranwrd(&var,"''","''''"))!!"''";';
put 'put _____str;';
put '%end;';
put '%end;';
put '%if &flavour=SAS %then %do;';
put 'put '';'';';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'put '');'';';
put '%end;';
put 'if _n_=&nobs then put /;';
put 'run;';
put '%mend mp_ds2inserts;';
put '%macro mp_lib2inserts(lib';
put ',flavour=SAS';
put ',outref=0';
put ',schema=0';
put ',maxobs=max';
put ',applydttm=YES';
put ')/*/STORE SOURCE*/;';
put '/* Find the tables */';
put '%local x ds memlist;';
put 'proc sql noprint;';
put 'select distinct lowcase(memname)';
put 'into: memlist';
put 'separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put 'and memtype=''DATA''; /* exclude views */';
put '%let flavour=%upcase(&flavour);';
put '%if &flavour ne SAS and &flavour ne PGSQL %then %do;';
put '%put %str(WAR)NING: &flavour is not supported;';
put '%return;';
put '%end;';
put '/* create the inserts */';
put '%do x=1 %to %sysfunc(countw(&memlist));';
put '%let ds=%scan(&memlist,&x);';
put '%mp_ds2inserts(&lib..&ds';
put ',outref=&outref';
put ',schema=&schema';
put ',outds=&ds';
put ',flavour=&flavour';
put ',maxobs=&maxobs';
put ',applydttm=&applydttm';
put ')';
put '%end;';
put '%mend mp_lib2inserts;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Exports the data controller library in DB specific DDL';
put '@details If user is in the administrator group, they can call this';
put 'service directly adding the following URL params:';
put '@li &flavour= (only PGSQL supported at this time)';
put '@li &schema= (optional, if target schema is needed)';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_lib2inserts.sas';
put '@li mp_streamfile.sas';
put '@li mpe_getgroups.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global flavour schema;';
put '/* if no flavour is specified, default to SAS */';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '/* if no schema var provided, DC Libref is used */';
put '%let schema=%sysfunc(coalescec(&schema,&dc_libref));';
put '/* check user is in admin group */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'data work.admins;';
put 'set work.usergroups;';
put 'put (_all_)(=);';
put 'run;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into:cnt';
put 'from usergroups';
put 'where groupname="&mpeadmins";';
put '%put &=cnt;';
put '%mp_abort(iftrue= (&cnt=0)';
put ',mac=&_program';
put ',msg=%str(The &DC_LIBREF library can only be exported by &mpeadmins members)';
put ')';
put '%mp_getddl(&DC_LIBREF';
put ',flavour=&flavour';
put ',schema=&schema';
put ',applydttm=YES';
put ',fref=tmpref';
put ')';
put '%mp_lib2inserts(&DC_LIBREF,flavour=&flavour,schema=&schema, outref=tmpref)';
put '%mp_streamfile(contenttype=TEXT';
put ',inref=tmpref';
put ',outname=&dc_libref..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=makedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_increment(macro_name,incr=1);';
put '/* iterate the value */';
put '%let ¯o_name=%eval(&&¯o_name+&incr);';
put '/* return the value */';
put '&&¯o_name';
put '%mend mf_increment;';
put '%macro mpe_makedata(lib=,mpeadmins=,path=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &lib..mpe_column_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',CLS_SCOPE=''EDIT''';
put ',CLS_GROUP=''AllUsers''';
put ',CLS_LIBREF="&lib"';
put ',CLS_TABLE=''MPE_LOCKANYTABLE''';
put ',CLS_VARIABLE_NM=''LOCK_STATUS_CD''';
put ',CLS_ACTIVE=1';
put ',CLS_HIDE=0;';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_EMAIL_ALERTS"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=''YES or NO to enable email alerts. Note - this requires email ''';
put '!!''options to be preconfigured! They can be configured in the ''';
put '!!''settings stp if needed.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_VIEWLIB_CHECK"';
put ',var_value=''NO''';
put ',var_active=1';
put ',var_desc=';
put '''Set to YES to enable library validity checking in viewLibs service.''';
put '!!'' Note: this can make the service very slow if there are lots of ''';
put '!!''external libraries. If enabled, this removes empty libraries from ''';
put '!!''the viewer library dropdown. To switch off, set to NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MACROS"';
put ',var_value=cats(symget(''path''),"/dc_macros")';
put ',var_active=1';
put ',var_desc=''Location of underlying macros - EUC feature.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_MAXOBS_WEBEDIT"';
put ',var_value="100"';
put ',var_active=1';
put ',var_desc=''This sets the maximum number of observations that can be loaded''';
put '!!'' into the browser for editing in the EDIT screen. A higher number''';
put '!!'' will require a decent browser (ie, not IE) and more memory on the''';
put '!!'' client side.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_VIEWER"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''YES will restrict the list of libraries and tables in VIEWER to''';
put '!!'' those explicitly set to VIEW in the MPE_SECURITY table. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_RESTRICT_EDITRECORD"';
put ',var_value="NO"';
put ',var_active=1';
put ',var_desc=''Setting YES will prevent the EDIT RECORD dialog appearing in the''';
put '!!'' EDIT screen by removing the "Edit Row" option in the right click menu''';
put '!!'', and the "ADD RECORD" button in the bottom left. Default=NO.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_CATALOG"';
put ',var_name="DC_IGNORELIBS"';
put ',var_value="|MAPSSAS|MAPS|"';
put ',var_active=1';
put ',var_desc=''Pipe seperated list of librefs (uppercase) to be ignored when''';
put '!!'' running the Data Catalog refresh process. This can enable a clean''';
put '!!'' run when invalid librefs are returned by the mpe_refreshlibs macro.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LOCALE"';
put ',var_value="SYSTEM"';
put ',var_active=1';
put ',var_desc=''Set to a locale (such as en_gb or en_be) to override the system''';
put '!!'' value (which can be driven from the browser settings). This is ''';
put '!!''useful when importing ambiguous dates from CSV or Excel (eg 1/2/20 vs ''';
put '!!''2/1/20) as DC uses the anydtdtm informats for import. Default=SYSTEM.'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BULKLOAD"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to enable BULKLOAD=YES in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_BUCKET"';
put ',var_value="''your-aws-bucket/Exchange''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS bucket to''';
put '!!'' use for s3 uploads in redshift'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_AWS_CREDENTIALS_FILE"';
put ',var_value="''/path/to/your/aws/s3/.credentials''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) value of the AWS creds file'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_REGION"';
put ',var_value="''eu-west-1''"';
put ',var_active=0';
put ',var_desc=''Set to the (quoted) AWS region in use'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_COMPRESS"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to perform compression ahead of the COPY command'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DCBL_REDSH"';
put ',var_name="BL_USE_SSL"';
put ',var_value="YES"';
put ',var_active=0';
put ',var_desc=''Set to YES to use SSL encryption'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC_REVIEW"';
put ',var_name="HISTORY_ROWS"';
put ',var_value=''100''';
put ',var_active=1';
put ',var_desc=''Number of rows (or additional rows) to return in the HISTORY ''';
put '!!''page'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_LICENCE_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Licence Key'';';
put 'insert into &lib..mpe_config set';
put 'tx_from=0';
put ',tx_to=''31DEC9999:23:59:59''dt';
put ',var_scope="DC"';
put ',var_name="DC_ACTIVATION_KEY"';
put ',var_value='' ''';
put ',var_active=1';
put ',var_desc=''Activation Key'';';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''LIBRARY''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Data Controller Control Tables"';
put ',DD_LONGDESC="# The Data Controller Library"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib..MPE_TABLES"';
put ',DD_SHORTDESC="Configuration of new tables for Data Controller"';
put ',DD_LONGDESC="# MPE_TABLES - adding new tabels to Data Controller"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_TABLES.DSN"';
put ',DD_SHORTDESC="Dataset Name to be edited"';
put ',DD_LONGDESC="_DSN_ - must be UPCASE"';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''DIRECTORY''';
put ',DD_SOURCE="/some/directory"';
put ',DD_SHORTDESC="Directory for some purpose"';
put ',DD_LONGDESC="This directory is great. It''s great directory.';
put 'It trumps all other directories."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''TABLE''';
put ',DD_SOURCE="&lib"';
put ',DD_SHORTDESC="Transaction table for capturing Data Controller users"';
put ',DD_LONGDESC="After a user accepts the Data Controller EULA they are "';
put '!!"registered as a user in this table."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_datadictionary set';
put 'tx_from=0';
put ',DD_TYPE=''COLUMN''';
put ',DD_SOURCE="&lib..MPE_CONFIG.VAR_ACTIVE"';
put ',DD_SHORTDESC="Set to 1 to make an option active"';
put ',DD_LONGDESC="This value is used as a filter by data controller whenever "';
put '!!"querying for option settings."';
put ',DD_OWNER="&sysuserid"';
put ',DD_RESPONSIBLE="&sysuserid"';
put ',DD_SENSITIVITY="Low"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* mpe_xlmap_info';
put '*/';
put 'insert into &lib..mpe_xlmap_info set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_description=''Basel 3 Key Metrics report''';
put ',XLMAP_TARGETLIBDS="&lib..MPE_XLMAP_DATA";';
put '/**';
put '* mpe_xlmap_rules';
put '*/';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:a'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:b'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:c'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:d'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:e'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH 4 R[2]C[0]:f'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[1]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/b''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[2]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/c''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[3]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/d''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[4]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[0]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/e''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[5]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:1a/f''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''MATCH C R[1]C[6]:Common Equity Tier 1 (CET1)'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE D10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/b''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''ABSOLUTE E10'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/c''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[6]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/d''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[8]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/e''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[9]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2/f''';
put ',xlmap_sheet=''/3''';
put ',xlmap_start=''RELATIVE R[10]C[10]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:2a''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''ABSOLUTE H11''';
put ',xlmap_finish=''RELATIVE R[0]C[1]'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-KM1''';
put ',xlmap_range_id=''KM1:3''';
put ',xlmap_sheet=''KM1''';
put ',xlmap_start=''RELATIVE R[12]C[4]''';
put ',xlmap_finish=''ABSOLUTE I13'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec1''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D8''';
put ',xlmap_finish=''BLANKROW'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''BASEL-CR2''';
put ',xlmap_range_id=''CR2-sec2''';
put ',xlmap_sheet=''CR2''';
put ',xlmap_start=''ABSOLUTE D18''';
put ',xlmap_finish=''LASTDOWN'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''header''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B3''';
put ',xlmap_finish=''ABSOLUTE B8'';';
put 'insert into &lib..mpe_xlmap_rules set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',xlmap_id=''SAMPLE''';
put ',xlmap_range_id=''data''';
put ',xlmap_sheet=''/1''';
put ',xlmap_start=''ABSOLUTE B13''';
put ',xlmap_finish=''ABSOLUTE E16'';';
put '/**';
put '* MPE_GROUPS';
put '*/';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="allbow"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="dctestuser1"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="dc-admin"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="mihmed"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_groups set';
put 'tx_from=0';
put ',group_name="sec-sas9-prd-ext-sasplatform-300115datacontroller"';
put ',group_desc="Custom Group for Data Controller Purposes"';
put ',user_name="DCTest"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_ROW_LEVEL_SECURITY';
put '*/';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=1';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_GROUPS"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''GROUP_NAME''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''-1''"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=2';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''RLS_RK''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=3';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''DC Demo Group''';
put ',RLS_LIBREF="&lib"';
put ',RLS_TABLE="MPE_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''ACCESS_LEVEL''';
put ',RLS_OPERATOR_NM=''NE''';
put ',RLS_RAW_VALUE="''N/A''"';
put ',RLS_ACTIVE=1;';
put '/**';
put '* MPE_SECURITY';
put '*/';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-int-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="sec-sas9-prd-ext-sasplatform-300114sasjs"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="dc-admin"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* mpe_selectbox */';
put '%let rk=1;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=&rk';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''LOCKED''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_LOCKANYTABLE"';
put ',base_column="LOCK_STATUS_CD"';
put ',selectbox_value=''UNLOCKED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''EDIT''';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''APPROVE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''VIEW''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''SIGNOFF''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''UPDATE''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''REPLACE''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''TXTEMPORAL''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''BITEMPORAL''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_TABLES"';
put ',base_column="LOADTYPE"';
put ',selectbox_value=''FORMAT_CAT''';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''SUBMITTED''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''APPROVED''';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ALERTS"';
put ',base_column="ALERT_EVENT"';
put ',selectbox_value=''REJECTED''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 1''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 2''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value=''Option 3''';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_X_TEST"';
put ',base_column="SOME_DROPDOWN"';
put ',selectbox_value="This is a long option. This option is very long. "';
put '!!"It is optional, though."';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="CASE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MINVAL"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="MAXVAL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT"';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT"';
put ',selectbox_order=5';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="NOTNULL"';
put ',selectbox_order=6';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="SOME_DATASET"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="DSN"';
put ',selectbox_value="EXAMPLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="COLUMN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="TABLE"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="LIBRARY"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="CATALOG"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_DATADICTIONARY"';
put ',base_column="DD_TYPE"';
put ',selectbox_value="FORMAT"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="LIBREF"';
put ',selectbox_value=''*ALL*''';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_SECURITY"';
put ',base_column="ACCESS_LEVEL"';
put ',selectbox_value=''AUDIT''';
put ',selectbox_order=4';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="HARDSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_VALIDATIONS"';
put ',base_column="RULE_TYPE"';
put ',selectbox_value="SOFTSELECT_HOOK"';
put ',selectbox_order=7';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_GROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="AND"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_SUBGROUP_LOGIC"';
put ',selectbox_value="OR"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="="';
put ',selectbox_order=0';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="<="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value=">="';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="BETWEEN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NOT IN"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="NE"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_OPERATOR_NM"';
put ',selectbox_value="CONTAINS"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_EXCEL_CONFIG"';
put ',base_column="XL_RULE"';
put ',selectbox_value="FORMULA"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_column="RLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="1"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_ACTIVE"';
put ',selectbox_value="0"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="EDIT"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="VIEW"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_SCOPE"';
put ',selectbox_value="ALL"';
put ',selectbox_order=3';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="0"';
put ',selectbox_order=1';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_selectbox set';
put 'selectbox_rk=%mf_increment(rk)';
put ',ver_from_dttm=0';
put ',select_lib="&lib"';
put ',select_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_column="CLS_HIDE"';
put ',selectbox_value="1"';
put ',selectbox_order=2';
put ',ver_to_dttm=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_TABLES';
put '*/';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_COLUMN_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM''';
put ',notes=''Docs: https://docs.datacontroller.io/column-level-security''';
put ',post_edit_hook=''services/hooks/mpe_column_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_INFO''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_info_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_RULES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',buskey=''XLMAP_ID XLMAP_RANGE_ID''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ',post_edit_hook=''services/hooks/mpe_xlmap_rules_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_XLMAP_DATA''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOAD_REF XLMAP_ID XLMAP_RANGE_ID ROW_NO COL_NO''';
put ',notes=''Docs: https://docs.datacontroller.io/complex-excel-uploads''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_LOCKANYTABLE''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''LOCK_LIB LOCK_DS''';
put ',notes=''This table may be edited when a process failed and left a lock''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_TABLES''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''This entry allows the MP Editor to edit itself!''';
put ',post_edit_hook=''services/hooks/mpe_tables_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''LIBREF DSN ACCESS_LEVEL SAS_GROUP''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',notes=''Determines which groups can view/edit/approve which tables''';
put ',post_edit_hook=''services/hooks/mpe_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_SELECTBOX''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''SELECTBOX_RK''';
put ',var_txfrom=''VER_FROM_DTTM''';
put ',var_txto=''VER_TO_DTTM''';
put ',notes=''Can configure dropdowns for the front end''';
put ',rk_underlying=''SELECT_LIB SELECT_DS BASE_COLUMN SELECTBOX_VALUE''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_TEST''';
put ',num_of_approvals_required=1';
put ',loadtype=''UPDATE''';
put ',buskey=''PRIMARY_KEY_FIELD''';
put ',notes=''Test table for controller''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EMAILS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''USER_NAME''';
put ',notes=''Primary Emails Table (backup is metadata)''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''VAR_SCOPE VAR_NAME''';
put ',notes=''Configuration variables for Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ALERTS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''ALERT_EVENT ALERT_LIB ALERT_DS ALERT_USER''';
put ',notes=''Configuration for alert email events''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_GROUPS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''GROUP_NAME USER_NAME''';
put ',notes=''Configuration for additional groups within Data Controller''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_VALIDATIONS''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''BASE_LIB BASE_DS BASE_COL RULE_TYPE''';
put ',notes=''Configuration of data quality rules in Editor component''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',post_edit_hook=''services/hooks/mpe_validations_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_DATADICTIONARY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''DD_TYPE DD_SOURCE''';
put ',notes=''Configuration of data dictionary''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_EXCEL_CONFIG''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''XL_LIBREF XL_TABLE XL_COLUMN''';
put ',notes=''Configuration of the excel import rules''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_ROW_LEVEL_SECURITY''';
put ',num_of_approvals_required=1';
put ',loadtype=''TXTEMPORAL''';
put ',buskey=''RLS_RK''';
put ',notes=''Configuration of Row Level Security''';
put ',var_txfrom=''TX_FROM''';
put ',var_txto=''TX_TO''';
put ',rk_underlying=''RLS_SCOPE RLS_GROUP RLS_LIBREF RLS_TABLE RLS_GROUP_LOGIC ''';
put '!!''RLS_SUBGROUP_LOGIC RLS_SUBGROUP_ID RLS_VARIABLE_NM RLS_OPERATOR_NM ''';
put '!!''RLS_RAW_VALUE ''';
put ',post_edit_hook=''services/hooks/mpe_row_level_security_postedit''';
put ';';
put 'insert into &lib..mpe_tables';
put 'set tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',libref="&lib"';
put ',dsn=''MPE_X_CATALOG-FC''';
put ',num_of_approvals_required=1';
put ',loadtype=''FORMAT_CAT''';
put ',buskey=''TYPE FMTNAME FMTROW''';
put ',notes=''Sample Format Catalog''';
put ';';
put '/* mpe_validations */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_SCOPE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_HIDE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_COLUMN_LEVEL_SECURITY"';
put ',base_col="CLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ALERTS"';
put ',base_col="ALERT_LIB"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_alerts.alert_lib"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_RULES"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''NOTNULL''';
put ',rule_value='' ''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="NUM_OF_APPROVALS_REQUIRED"';
put ',rule_type=''MINVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="BUSKEY"';
put ',rule_type=''NOTNULL''';
put ',rule_value=" "';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''CASE''';
put ',rule_value=''UPCASE''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="LIBREF"';
put ',rule_type=''HARDSELECT''';
put ',rule_value="&lib..MPE_TABLES.LIBREF"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''CASE''';
put ',rule_value="UPCASE"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_TABLES.DSN"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SECURITY"';
put ',base_col="SAS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="BASE_COL"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value="0"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_VALIDATIONS"';
put ',base_col="RULE_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value="1"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="DSN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/mpe_tables.dsn"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_TXTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSFROM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_BUSTO"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_TABLES"';
put ',base_col="VAR_PROCESSED"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_LIB"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="SELECT_DS"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_editable"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_SELECTBOX"';
put ',base_col="BASE_COLUMN"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_GROUP"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/sas_groups"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_LIBREF"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/libraries_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_TABLE"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/tables_all"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_SUBGROUP_ID"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_ROW_LEVEL_SECURITY"';
put ',base_col="RLS_VARIABLE_NM"';
put ',rule_type=''SOFTSELECT_HOOK''';
put ',rule_value="services/validations/columns_in_libds"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/* test softselect on numeric var (should be ordered numerically) */';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_BESTNUM"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_X_TEST.SOME_BESTNUM"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_X_TEST"';
put ',base_col="SOME_NUM"';
put ',rule_type=''HARDSELECT_HOOK''';
put ',rule_value="services/validations/mpe_x_test.some_num"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MINVAL''';
put ',rule_value=''0''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_EXCEL_CONFIG"';
put ',base_col="XL_ACTIVE"';
put ',rule_type=''MAXVAL''';
put ',rule_value=''1''';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..MPE_VALIDATIONS set';
put 'tx_from=0';
put ',base_lib="&lib"';
put ',base_ds="MPE_XLMAP_INFO"';
put ',base_col="XLMAP_ID"';
put ',rule_type=''SOFTSELECT''';
put ',rule_value="&lib..MPE_XLMAP_RULES.XLMAP_ID"';
put ',rule_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/**';
put '* MPE_X_TEST';
put '*/';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=0';
put ',some_char=''this is dummy data''';
put ',some_dropdown=''Option 1''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=42';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=1';
put ',some_char=''more dummy data''';
put ',some_dropdown=''Option 2''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=422';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=2';
put ',some_char=''even more dummy data''';
put ',some_dropdown=''Option 3''';
put ',some_num=42';
put ',some_date=42';
put ',some_datetime=42';
put ',some_time=142';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=3';
put ',some_char=repeat(''It was a dark and stormy night. The wind was blowing''';
put '!!'' a gale! The captain said to his mate - mate, tell us a tale. And''';
put '!!'' this, is the tale he told: '',3)';
put ',some_dropdown=''Option 2''';
put ',some_num=1613.001';
put ',some_date=423';
put ',some_datetime=423';
put ',some_time=44';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=4';
put ',some_char=''if you can fill the unforgiving minute''';
put ',some_dropdown=''Option 1''';
put ',some_num=1613.001123456';
put ',some_date=4231';
put ',some_datetime=423123123';
put ',some_time=412';
put ',some_shortnum=3';
put ',some_bestnum=44;';
put '%do x=10 %to 500;';
put 'insert into &lib..mpe_x_test';
put 'set primary_key_field=10&x';
put ',some_char="&x bottles of beer on the wall"';
put ',some_dropdown=''Option 1''';
put ',some_num=ranuni(0)';
put ',some_date=round(ranuni(0)*1000,1)';
put ',some_datetime=round(ranuni(0)*50000,1)';
put ',some_time=round(ranuni(0)*100,1)';
put ',some_shortnum=round(ranuni(0)*100,1)';
put ',some_bestnum=round(ranuni(0)*100,1);';
put '%end;';
put '/* https://support.sas.com/resources/papers/proceedings/proceedings/sugi27/p056-27.pdf */';
put 'proc format library=&lib..mpe_x_catalog;';
put 'value otdate';
put '.Z = ''Some Zs''';
put '.N = ''Some 9s''';
put 'other = [date9.]';
put ';';
put 'invalue disc';
put '''ABC'' = 0.20';
put '''DEF'' = 0.25';
put '''XYZ'' = 0.00';
put 'other = 0.00';
put ';';
put 'invalue indate';
put '''00000000'' = .Z';
put '''99999999'' = .N';
put 'other = [yymmdd8.]';
put ';';
put 'value age(multilabel)';
put '20 - 29 = ''20 - 29''';
put '30 - 39 = ''30 - 39''';
put '40 - 49 = ''40 - 49''';
put '50 - 59 = ''50 - 59''';
put '60 - high = ''60 +++''';
put '20 - 35 = ''20 - 35''';
put '36 - 55 = ''36 - 55''';
put '55 - high = ''55 +++''';
put ';';
put '/* https://libguides.library.kent.edu/SAS/UserDefinedFormats */';
put 'VALUE $GENDERLABEL';
put '"M" = "Male"';
put '"F" = "Female"';
put ';';
put 'VALUE LIKERT_SEVEN';
put '1 = "Strongly Disagree"';
put '2 = "Disagree"';
put '3 = "Slightly Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5 = "Slightly Agree"';
put '6 = "Agree"';
put '7 = "Strongly Agree"';
put ';';
put 'VALUE LIKERT7_ELEVEN';
put '1,2,3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5,6,7 = "Agree"';
put ';';
put 'VALUE LIKERT7_SISTERS';
put '1-3 = "Disagree"';
put '4 = "Neither Agree nor Disagree"';
put '5-7 = "Agree"';
put ';';
put 'VALUE INCOME';
put 'LOW -< 20000 = "Low"';
put '20000 -< 60000 = "Middle"';
put '60000 - HIGH = "High"';
put ';';
put 'VALUE RACE';
put '1 = "White"';
put '2 = "Black"';
put 'OTHER = "Other"';
put ';';
put 'VALUE GENDERCODE';
put '0 = ''Male''';
put '1 = ''Female'';';
put 'VALUE ATHLETECODE';
put '0 = ''Non-athlete''';
put '1 = ''Athlete'';';
put 'VALUE SMOKINGCODE';
put '0 = ''Nonsmoker''';
put '1 = ''Past smoker''';
put '2 = ''Current smoker'';';
put '/* https://documentation.sas.com/doc/en/pgmsascdc/v_017/proc/p1upn25lbfo6mkn1wncu4dyh9q91.htm */';
put 'value $state';
put '''Delaware''=''DE''';
put '''Florida''=''FL''';
put '''Ohio''=''OH'';';
put 'value MYfmt';
put '/* Format dates prior to 31DEC2011 using only a year. */';
put 'low-''31DEC2011''d=[year4.]';
put '/* Format 2012 dates using the month and year. */';
put '''01jan2012''d-''31DEC12''d=[monyy7.]';
put '/* Format dates 01JAN2013 and beyond using the day, month, and year. */';
put '''01JAN2013''d-high=[date9.]';
put '/* Catch missing values. */';
put 'other=''n/a'';';
put 'value newfmt .=''N/A'' other=[12.1];';
put '/* https://www.lexjansen.com/nesug/nesug08/cc/cc14.pdf */';
put 'value $genderml (multilabel)';
put '''1''=''Male''';
put '''2''=''Female''';
put '''1'',''2'','' ''=''Total people'';';
put 'value agemla (multilabel)';
put '1-4=''Preschool''';
put '1-18=''Children''';
put '19-120=''Adults'';';
put 'value agemlb (multilabel)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put 'value agemlc (multilabel notsorted)';
put '19-120=''Adults''';
put '1-18=''Children''';
put '1-4=''Preschool'';';
put '%mend mpe_makedata;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mpe_makedatamodel(lib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%local notnull;';
put '%if %mf_existfeature(COLCONSTRAINTS)=1 %then %let notnull=not null;';
put '%put &=notnull;';
put 'proc sql;';
put 'create table &lib..mpe_alerts(';
put 'tx_from num format=datetime19.3,';
put 'alert_event char(20),';
put 'alert_lib char(8),';
put 'alert_ds char(32),';
put 'alert_user char(100) ,';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_alerts;';
put 'index create';
put 'pk_mpealerts=(tx_from alert_event alert_lib alert_ds alert_user)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_audit(';
put 'load_ref char(36) label=''unique load reference'',';
put 'libref char(8) label=''Library Reference (8 chars)'',';
put 'dsn char(32) label=''Dataset Name (32 chars)'',';
put 'key_hash char(32) label=';
put '''MD5 Hash of primary key values (pipe seperated)'',';
put 'tgtvar_nm char(32) label=''Target variable name (32 chars)'',';
put 'move_type char(1) label=''Either (A)ppended, (D)eleted or (M)odified'',';
put 'processed_dttm num format=E8601DT26.6 label=''Processed at timestamp'',';
put 'is_pk num label=''Is Primary Key Field? (1/0)'',';
put 'is_diff num label=';
put '''Did value change? (1/0/-1). Always -1 for appends and deletes.'',';
put 'tgtvar_type char(1) label=''Either (C)haracter or (N)umeric'',';
put 'oldval_num num format=best32. label=''Old (numeric) value'',';
put 'newval_num num format=best32. label=''New (numeric) value'',';
put 'oldval_char char(32765) label=''Old (character) value'',';
put 'newval_char char(32765) label=''New (character) value''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_audit;';
put 'index create';
put 'pk_mpe_audit=(load_ref libref dsn key_hash tgtvar_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_column_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'CLS_SCOPE char(4) ¬null,';
put 'CLS_GROUP char(64) ¬null,';
put 'CLS_LIBREF char(8) ¬null,';
put 'CLS_TABLE char(32) ¬null,';
put 'CLS_VARIABLE_NM char(32) ¬null,';
put 'CLS_ACTIVE num ¬null,';
put 'CLS_HIDE num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_column_level_security;';
put 'index create';
put 'pk_mpe_column_level_security=';
put '(tx_to CLS_SCOPE CLS_GROUP CLS_LIBREF CLS_TABLE CLS_VARIABLE_NM)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_config(';
put 'tx_from num ¬null format=datetime19.3';
put ',tx_to num ¬null format=datetime19.3';
put ',var_scope varchar(10) ¬null';
put ',var_name varchar(32) ¬null';
put ',var_value varchar(5000)';
put ',var_active num';
put ',var_desc varchar(300)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_config;';
put 'index create';
put 'pk_mpe_config=(tx_to var_scope var_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Ref'',';
put 'engine char(32) label=''Library Engine'',';
put 'libname char(256) format=$256. label=''Library Name'',';
put 'paths char(8192) label=''Library Paths'',';
put 'perms char(500) label=''Library Permissions (if BASE)'',';
put 'owners char(500) label=''Library Owners (if BASE)'',';
put 'schemas char(500) label=''Library Schemas (if DB)'',';
put 'libid char(17) label=''LibraryId''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_libs;';
put 'index create';
put 'pk_mpe_datacatalog_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_TABS(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'dbms_memtype char(32) label=''DBMS Member Type'',';
put 'memlabel char(512) label=''Data Set Label'',';
put 'typemem char(8) label=''Data Set Type'',';
put 'nvar num label=''Number of Variables'',';
put 'compress char(8) label=''Compression Routine'',';
put 'pk_fields char(512)';
put 'label=''Primary Key Fields (identified by being in a constraint that is both Unique and Not Null)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_TABS;';
put 'index create';
put 'pk_mpe_datacatalog_TABS=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datacatalog_vars(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Table Name'',';
put 'name char(64) label=''Column Name'',';
put 'memtype char(8) label=''Member Type'',';
put 'type char(16) label=''Column Type'',';
put 'length num label=''Column Length'',';
put 'varnum num label=''Column Number in Table'',';
put 'label char(512) label=''Column Label'',';
put 'format char(49) label=''Column Format'',';
put 'idxusage char(9) label=''Column Index Type'',';
put 'notnull char(3) label=''Not NULL?'',';
put 'pk_ind num label=''Primary Key Indicator (1=Primary Key field)''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datacatalog_vars;';
put 'index create';
put 'pk_mpe_datacatalog_vars=(libref dsn name tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_libs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'libsize num format=SIZEKMG. label=''Size of library'',';
put 'table_cnt num label=''Number of Tables''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_libs;';
put 'index create';
put 'pk_mpe_datastatus_libs=(libref tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datastatus_tabs(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'libref char(8) label=''Library Name'',';
put 'dsn char(64) label=''Member Name'',';
put 'filesize num format=SIZEKMG. label=''Size of file'',';
put 'crdate num format=DATETIME. informat=DATETIME. label=''Date Created'',';
put 'modate num format=DATETIME. informat=DATETIME. label=''Date Modified'',';
put 'nobs num label=''Number of Physical (Actual, inc. deleted) Observations''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datastatus_tabs;';
put 'index create';
put 'pk_mpe_datastatus_tabs=(libref dsn tx_to)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_datadictionary';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'TX_TO num ¬null format=datetime19.3,';
put 'DD_TYPE char(16),';
put 'DD_SOURCE char(1024),';
put 'DD_SHORTDESC char(256),';
put 'DD_LONGDESC char(32767),';
put 'DD_OWNER char(128),';
put 'DD_RESPONSIBLE char(128),';
put 'DD_SENSITIVITY char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_datadictionary;';
put 'index create';
put 'pk_mpe_datadictionary=(tx_to dd_type dd_source)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_dataloads(';
put 'libref varchar(8) ¬null,';
put 'dsn varchar(32) ¬null,';
put 'etlsource varchar(100) ¬null,';
put 'loadtype varchar(20) ¬null,';
put 'changed_records int,';
put 'new_records int,';
put 'deleted_records int,';
put 'duration num,';
put 'user_nm varchar(50) ¬null,';
put 'processed_dttm num format=datetime19.3,';
put 'mac_ver varchar(5)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_dataloads;';
put 'index create';
put 'pk_mpe_dataloads=(processed_dttm libref dsn etlsource)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_emails(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'user_name char(50) ¬null,';
put 'user_displayname char(100),';
put 'user_email char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_emails;';
put 'index create';
put 'pk_mpe_emails=(tx_to user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_excel_config(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'xl_libref char(8),';
put 'xl_table char(32),';
put 'xl_column char(32),';
put 'xl_rule char(32),';
put 'xl_active num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_excel_config;';
put 'index create';
put 'pk_mpe_excel_config=(tx_to xl_libref xl_table xl_column)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_XLMAP_DATA(';
put 'LOAD_REF char(32) ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'ROW_NO num ¬null,';
put 'COL_NO num ¬null,';
put 'VALUE_TXT char(4000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify MPE_XLMAP_DATA;';
put 'index create';
put 'pk_MPE_XLMAP_DATA=(load_ref xlmap_id xlmap_range_id row_no col_no)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_info(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_DESCRIPTION char(1000) ¬null,';
put 'XLMAP_TARGETLIBDS char(41) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_info;';
put 'index create';
put 'pk_mpe_xlmap_info=(tx_to xlmap_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_xlmap_rules(';
put 'tx_from num ¬null,';
put 'tx_to num ¬null,';
put 'XLMAP_ID char(32) ¬null,';
put 'XLMAP_RANGE_ID char(32) ¬null,';
put 'XLMAP_SHEET char(32) ¬null,';
put 'XLMAP_START char(1000) ¬null,';
put 'XLMAP_FINISH char(1000)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_xlmap_rules;';
put 'index create';
put 'pk_mpe_xlmap_rules=(tx_to xlmap_id xlmap_range_id)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filteranytable(';
put 'filter_rk num ¬null,';
put 'filter_hash char(32) ¬null,';
put 'filter_table char(41) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filteranytable;';
put 'index create filter_rk /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_filtersource(';
put 'filter_hash char(32) ¬null,';
put 'filter_line num ¬null,';
put 'group_logic char(3) ¬null,';
put 'subgroup_logic char(3) ¬null,';
put 'subgroup_id num ¬null,';
put 'variable_nm varchar(32) ¬null,';
put 'operator_nm varchar(12) ¬null,';
put 'raw_value varchar(4000) ¬null,';
put 'processed_dttm num ¬null format=datetime19.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_filtersource;';
put 'index create';
put 'pk_mpe_filtersource=(filter_hash filter_line)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_groups(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'group_name char(100) ¬null,';
put 'user_name char(50) ¬null,';
put 'group_desc char(256)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_groups;';
put 'index create';
put 'pk_mpe_groups=(tx_to group_name user_name)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lineage_cols';
put '(';
put 'col_id char(32),';
put 'direction char(1),';
put 'sourcecoluri char(256),';
put 'map_type char(256),';
put 'map_transform char(256),';
put 'jobname char(256),';
put 'sourcetablename char(256),';
put 'sourcecolname char(256),';
put 'targettablename char(256),';
put 'targetcolname char(256),';
put 'targetcoluri char(256),';
put 'Derived_Rule char(500),';
put 'level int,';
put 'modified_dttm num format=datetime19.3,';
put 'modified_by char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_cols;';
put 'index create';
put 'pk_mpe_lineage_cols=(col_id direction sourcecoluri targetcoluri map_type map_transform)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_LINEAGE_TABS';
put '(';
put 'tx_from num ¬null format=datetime19.3,';
put 'jobid char(17),';
put 'srctableid char(17),';
put 'tgttableid char(17),';
put 'jobname char(128),';
put 'srctabletype char(16),';
put 'srctablename char(64),';
put 'srclibref char(8),';
put 'tgttabletype char(16),';
put 'tgttablename char(64),';
put 'tgtlibref char(8),';
put 'tx_to num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lineage_tabs;';
put 'index create';
put 'pk_mpe_lineage_tabs=(tx_to jobid srctableid tgttableid)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_loads(';
put 'csv_dir char(255),';
put 'user_nm char(50) ,';
put 'status char(15) ,';
put 'duration num ,';
put 'processed_dttm num format=datetime19.3,';
put 'reason_txt char(2048) ,';
put 'approvals char(64)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_loads;';
put 'index create csv_dir /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_lockanytable(';
put 'lock_lib varchar(8) ¬null ,';
put 'lock_ds varchar(32) ¬null,';
put 'lock_status_cd varchar(10) ¬null,';
put 'lock_user_nm varchar(100) ¬null ,';
put 'lock_ref varchar(200),';
put 'lock_pid varchar(10),';
put 'lock_start_dttm num format=E8601DT26.6,';
put 'lock_end_dttm num format=E8601DT26.6';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_lockanytable;';
put 'index create';
put 'pk_mpe_lockanytable=(lock_lib lock_ds)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_maxkeyvalues(';
put 'keytable varchar(41) label=''Base table in libref.dataset format'',';
put 'keycolumn char(32) format=$32.';
put 'label=''The Surrogate / Retained key field containing the key values.'',';
put 'max_key num label=';
put '''Integer value representing current max RK or SK value in the KEYTABLE'',';
put 'processed_dttm num format=E8601DT26.6';
put 'label=''Datetime this value was last updated''';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_maxkeyvalues;';
put 'index create keytable /nomiss unique;';
put 'quit;';
put '/* no PK defined as it is a transaction table */';
put 'proc sql;';
put 'create table &lib..mpe_requests(';
put 'request_dttm num ¬null format=datetime19.,';
put 'request_user char(64) ¬null,';
put 'request_service char(64) ¬null,';
put 'request_params char(128)';
put ');';
put 'proc sql;';
put 'create table &lib..mpe_review(';
put 'table_id varchar(32) ¬null,';
put 'reviewed_by_nm varchar(100) ¬null,';
put 'base_table varchar(41) ¬null,';
put 'review_status_id varchar(10) ¬null,';
put 'reviewed_on_dttm num ¬null format=datetime19.3,';
put 'review_reason_txt varchar(400)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_review;';
put 'index create';
put 'pk_mpe_review=(table_id reviewed_by_nm)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_row_level_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'RLS_RK num ¬null,';
put 'RLS_SCOPE char(8) ¬null,';
put 'RLS_GROUP char(128) ¬null,';
put 'RLS_LIBREF char(8) ¬null,';
put 'RLS_TABLE char(32) ¬null,';
put 'RLS_GROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_LOGIC char(3) ¬null,';
put 'RLS_SUBGROUP_ID num ¬null,';
put 'RLS_VARIABLE_NM varchar(32) ¬null,';
put 'RLS_OPERATOR_NM varchar(12) ¬null,';
put 'RLS_RAW_VALUE varchar(4000) ¬null,';
put 'RLS_ACTIVE num ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_row_level_security;';
put 'index create';
put 'pk_mpe_row_level_security=(tx_to RLS_RK)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_security(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'access_level char(10) ¬null,';
put 'sas_group char(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_security;';
put 'index create';
put 'pk_mpe_security=(tx_to libref dsn access_level sas_group)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_selectbox(';
put 'ver_from_dttm num ¬null format=datetime19.3,/* timestamp for versioning*/';
put 'ver_to_dttm num ¬null format=datetime19.3, /* timestamp for versioning */';
put 'selectbox_rk num ¬null, /* surrogate key */';
put 'select_lib varchar(17) ¬null, /* libref (big enough for uri)*/';
put 'select_ds varchar(32) ¬null,';
put 'base_column varchar(36) ¬null, /* variable name against which to apply selectbox */';
put 'selectbox_value varchar(500) ¬null, /* selectbox value */';
put 'selectbox_order num , /* optional ordering (1 comes before 2) */';
put 'selectbox_type varchar(32) /* column type (blank for default, else';
put 'sas or js to indicate relevant system functions)*/';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_selectbox;';
put 'index create';
put 'pk_mpe_selectbox=(ver_to_dttm selectbox_rk)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_signoffs(';
put 'tech_from_dttm num ¬null format=datetime19.3,';
put 'tech_to_dttm num ¬null format=datetime19.3,';
put 'signoff_table varchar(50) ¬null,';
put 'signoff_section_rk num ¬null,';
put 'signoff_version_rk num ¬null,';
put 'signoff_name varchar(100) ¬null';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_signoffs;';
put 'index create';
put 'pk_mpe_signoffs=(tech_to_dttm signoff_table signoff_section_rk)';
put '/nomiss unique;';
put 'quit;';
put '/* mpe_submit */';
put 'proc sql;';
put 'create table &lib..mpe_submit(';
put 'table_id varchar(32) ¬null,';
put 'submit_status_cd varchar(10) ¬null,';
put 'base_lib char(8) ¬null,';
put 'base_ds char(32) ¬null,';
put 'submitted_by_nm varchar(100) ¬null,';
put 'submitted_on_dttm num ¬null format=datetime19.3,';
put 'submitted_reason_txt varchar(400),';
put 'input_obs num,';
put 'input_vars num,';
put 'num_of_approvals_required num ¬null ,';
put 'num_of_approvals_remaining num ¬null ,';
put 'reviewed_by_nm char(100),';
put 'reviewed_on_dttm num';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_submit;';
put 'index create table_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_tables(';
put 'tx_from num ¬null format=datetime19.3,';
put 'tx_to num ¬null format=datetime19.3,';
put 'libref char(8) ¬null,';
put 'dsn char(32) ¬null,';
put 'num_of_approvals_required int,';
put 'loadtype char(12) ,';
put 'buskey char(1000) ,';
put 'var_txfrom char(32) ,';
put 'var_txto char(32) ,';
put 'var_busfrom char(32) ,';
put 'var_busto char(32) ,';
put 'var_processed char(32) ,';
put 'close_vars varchar(500),';
put 'pre_edit_hook char(200),';
put 'post_edit_hook char(200),';
put 'pre_approve_hook char(200) ,';
put 'post_approve_hook char(200) ,';
put 'signoff_cols varchar(500),';
put 'signoff_hook varchar(200),';
put 'notes char(1000) ,';
put 'rk_underlying char(1000) ,';
put 'audit_libds char(41)';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_tables;';
put 'index create';
put 'pk_mpe_tables=(tx_to libref dsn)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_users(';
put 'user_id char(50) ¬null,';
put 'last_seen_dt num ¬null format=date9.,';
put 'registered_dt num ¬null format=date9.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_users;';
put 'index create user_id /nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..MPE_VALIDATIONS';
put '(';
put 'TX_FROM num ¬null format=datetime19.3,';
put 'BASE_LIB varchar(8),';
put 'BASE_DS varchar(32),';
put 'BASE_COL varchar(32),';
put 'RULE_TYPE varchar(32),';
put 'RULE_VALUE varchar(128),';
put 'RULE_ACTIVE num ,';
put 'TX_TO num ¬null format=datetime19.3';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_validations;';
put 'index create';
put 'pk_mpe_validations=(tx_from base_lib base_ds base_col rule_type)';
put '/nomiss unique;';
put 'quit;';
put 'proc sql;';
put 'create table &lib..mpe_x_test(';
put 'primary_key_field num ¬null,';
put 'some_char char(32767) ,';
put 'some_dropdown char(128),';
put 'some_num num ,';
put 'some_date num format=date9.,';
put 'some_datetime num format=datetime19. informat=ANYDTDTM19.,';
put 'some_time num format=time8.,';
put 'some_shortnum num length=4,';
put 'some_bestnum num format=best.';
put ');quit;';
put 'proc datasets lib=&lib noprint;';
put 'modify mpe_x_test;';
put 'index create primary_key_field /nomiss unique;';
put 'quit;';
put '%mend mpe_makedatamodel;';
put '%macro mpe_makesampledata(outlib=);';
put '%if &syscc ne 0 %then %do;';
put '%put syscc=&syscc exiting &sysmacroname;';
put '%return;';
put '%end;';
put '%if &syssite ne 70221618 and &syssite ne 70253615 %then %do;';
put '%put syssite=&syssite, exiting &sysmacroname;';
put '%return;';
put '%end;';
put 'data &outlib..class(index=(name /unique));';
put 'set sashelp.class;';
put 'run;';
put 'data &outlib..cars(index=(carspk=(make model drivetrain) /unique));';
put 'set sashelp.cars;';
put 'run;';
put 'data &outlib..springs(index=(springspk=(name area latitude) /unique));';
put 'set sashelp.springs;';
put 'run;';
put 'data &outlib..fmt_checks;;';
put 'pk=1; E8601DA=date();';
put 'format E8601DA E8601DA10.;';
put 'run;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&outlib");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''SPRINGS''; BUSKEY=''NAME AREA LATITUDE''; output;';
put 'DSN=''CARS''; BUSKEY=''MAKE MODEL DRIVETRAIN''; output;';
put 'DSN=''CLASS''; BUSKEY=''NAME''; output;';
put 'DSN=''FMT_CHECKS''; BUSKEY=''PK''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '/**';
put '* DC data extra';
put '*/';
put '%local lib;';
put '%let lib=&dc_libref;';
put 'proc sql;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=4';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_TABLES"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=0';
put ',RLS_VARIABLE_NM=''NUM_OF_APPROVALS_REQUIRED''';
put ',RLS_OPERATOR_NM=''>''';
put ',RLS_RAW_VALUE=''0''';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=11';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=12';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-int-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=13';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=5';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=14';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=6';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=1';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=15';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=7';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=2';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=16';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=8';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=3';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=17';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=9';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=4';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=18';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=10';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=5';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=19';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=6';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put 'insert into &lib..mpe_row_level_security set';
put 'tx_from=0';
put ',tx_to=''31DEC5999:23:59:59''dt';
put ',RLS_RK=20';
put ',RLS_SCOPE=''ALL''';
put ',RLS_GROUP=''sec-sas9-prd-ext-sasplatform-300114sasjs''';
put ',RLS_LIBREF="&lib."';
put ',RLS_TABLE="MPE_ROW_LEVEL_SECURITY"';
put ',RLS_GROUP_LOGIC=''AND''';
put ',RLS_SUBGROUP_LOGIC=''OR''';
put ',RLS_SUBGROUP_ID=7';
put ',RLS_VARIABLE_NM=''RLS_GROUP_LOGIC''';
put ',RLS_OPERATOR_NM=''NOT IN''';
put ',RLS_RAW_VALUE="(''N/A1'',''N/A2'',''N/A3'',''N/A4'',''N/A5'',''N/A6'',''N/A7'')"';
put ',RLS_ACTIVE=1;';
put '/** create excel config */';
put 'insert into &lib..MPE_EXCEL_CONFIG set';
put 'tx_from=0';
put ',xl_libref="&lib"';
put ',xl_table="MPE_DATADICTIONARY"';
put ',xl_column="DD_LONGDESC"';
put ',xl_rule="FORMULA"';
put ',xl_active=1';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put '/** mpe_security table */';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="APPROVE"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'insert into &lib..mpe_security set';
put 'tx_from=0';
put ',libref="*ALL*"';
put ',dsn="*ALL*"';
put ',access_level="EDIT"';
put ',sas_group="303001.DataController"';
put ',tx_to=''31DEC5999:23:59:59''dt;';
put 'data append;';
put 'if 0 then set &dc_libref..mpe_tables;';
put 'TX_FROM=0;';
put 'TX_TO=''31DEC9999:23:59:59''dt;';
put 'LIBREF=%upcase("&dc_libref");';
put 'LOADTYPE=''UPDATE'';';
put 'NUM_OF_APPROVALS_REQUIRED=1;';
put 'DSN=''MPE_USERS''; BUSKEY=''USER_ID''; output;';
put 'run;';
put 'proc append base=&dc_libref..MPE_TABLES data=&syslast;';
put 'run;';
put '%mend mpe_makesampledata;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_deletejes(path=';
put ',name=';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put '%mp_abort(iftrue=(%mf_isblank(&name)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(name value must be provided)';
put ')';
put '%mp_abort(iftrue=(%length(&path)=1)';
put ',mac=&sysmacroname';
put ',msg=%str(path value must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%put &sysmacroname: fetching details for &path ;';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&path";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put &sysmacroname: Folder &path NOT FOUND - nothing to delete!;';
put '%return;';
put '%end;';
put '%else %if &SYS_PROCHTTP_STATUS_CODE ne 200 %then %do;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%put &sysmacroname: grab the follow on link ;';
put '%local libref1;';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data _null_;';
put 'set &libref1..links;';
put 'if rel=''members'' then call symputx(''mref'',quote("&base_uri"!!trim(href)),''l'');';
put 'run;';
put '/* get the children */';
put '%local fname1a;';
put '%let fname1a=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1a &oauth_bearer';
put 'url=%unquote(%superq(mref));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '%put &=SYS_PROCHTTP_STATUS_CODE;';
put '%local libref1a;';
put '%let libref1a=%mf_getuniquelibref();';
put 'libname &libref1a JSON fileref=&fname1a;';
put '%local uri found;';
put '%let found=0;';
put '%put Getting object uri from &libref1a..items;';
put 'data _null_;';
put 'length contenttype name $1000;';
put 'set &libref1a..items;';
put 'if contenttype=''jobDefinition'' and upcase(name)="%upcase(&name)" then do;';
put 'call symputx(''uri'',cats("&base_uri",uri),''l'');';
put 'call symputx(''found'',1,''l'');';
put 'end;';
put 'run;';
put '%if &found=0 %then %do;';
put '%put NOTE:;%put NOTE- &sysmacroname: &path/&name NOT FOUND;%put NOTE- ;';
put '%return;';
put '%end;';
put 'proc http method="DELETE" url="&uri" &oauth_bearer;';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="*/*";/**/';
put 'run;';
put '%if &SYS_PROCHTTP_STATUS_CODE ne 204 %then %do;';
put 'data _null_; infile &fname2; input; putlog _infile_;run;';
put '%mp_abort(mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put '%else %put &sysmacroname: &path/&name successfully deleted;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put 'filename &fname1a clear;';
put 'libname &libref1a clear;';
put '%mend mv_deletejes;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief self destructing setup service';
put '@details Will create the database and perform config activities';
put ' SAS Macros
';
put '@li mf_getapploc.sas';
put '@li mf_mkdir.sas';
put '@li mf_trimstr.sas';
put '@li mpe_getvars.sas';
put '@li mpe_makedata.sas';
put '@li mpe_makedatamodel.sas';
put '@li mpe_makesampledata.sas';
put '@li mv_deletejes.sas';
put '@version 3.5';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global dcpath ADMIN ;';
put '%webout(FETCH)';
put '/* enable vars to be passed as url params */';
put '%let exist=%sysfunc(exist(work.fromjs));';
put '%let inds=%sysfunc(ifc(&exist=1,fromjs,_null_));';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''dcpath'',dcpath);';
put 'call symputx(''ADMIN'',ADMIN);';
put 'run;';
put 'options noquotelenmax;';
put '%let dclib=%upcase(VIYA%substr(%sysevalf(%sysfunc(datetime())/60),3,4));';
put '%let dclibname=Data Controller (&dclib);';
put '%let DC_LIBREF=&dclib;';
put '%let work=%sysfunc(pathname(work));';
put '%let dcpath=%mf_trimstr(&dcpath,/)/&dclib;';
put '%put &=sysuserid;';
put '%put &=dcpath;';
put '%put &=admin;';
put '%mf_mkdir(&dcpath)';
put '%mf_mkdir(&dcpath/secret)';
put '%mf_mkdir(&dcpath/dc_staging)';
put 'libname &dclib "&dcpath";';
put '%global admin;';
put '%let admin=%sysfunc(coalescec(&admin,All Users));';
put '%mpe_makedatamodel(lib=&dclib)';
put '%mpe_makedata(lib=&dclib,mpeadmins=&admin,path=%str(&dcpath))';
put '/* sample data library */';
put '%mf_mkdir(&dcpath/dc_demo)';
put 'libname dcdemo "&dcpath/dc_demo";';
put '%mpe_makesampledata(outlib=DCDEMO)';
put '/* the DC precode is stored in the root of the project */';
put '%let root=%mf_getapploc(&_program)/services;';
put '%put &=root;';
put 'filename jobout filesrvc folderpath="&root";';
put 'data _null_;';
put 'file jobout(''settings.sas'');';
put 'put ''/* these values are ignored if DC_LIBREF was declared in autoexec */'';';
put 'put '' '';';
put 'put ''%global DC_LIBREF dc_admin_group dc_staging_area ;'';';
put 'put ''/* This library (libref) contains the control datasets for DC */'';';
put 'put ''/* If a different libref must be used, configure it below */'';';
put 'put ''%let DC_LIBREF='' "&dclib;";';
put 'put '' '';';
put 'put "libname &dclib ''&dcpath'' ;";';
put 'put '' '';';
put 'put ''/* This group has unrestricted access to Data Controller */'';';
put 'put ''%let dc_admin_group='' "&admin;";';
put 'put '' '';';
put 'put ''/* This physical location is used for staging data and audit history */'';';
put 'put ''%let dc_staging_area='' "&dcpath/dc_staging;";';
put 'put '' '';';
put 'if &syssite in (70221618,70253615) then do;';
put 'put "libname dcdemo ''&dcpath/dc_demo'';";';
put 'end;';
put 'run;';
put '/* create demo data';
put 'cas dcsession;';
put 'caslib _all_ assign;';
put 'caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic GLOBAL;';
put 'proc casutil;';
put 'LOAD DATA=dcdemo.cars';
put 'CASOUT="cars"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '*/';
put '/*';
put 'cas mysess;';
put 'caslib _all_ assign;';
put 'data casmusic.artists(promote=yes);';
put 'length name varchar(30);';
put 'do tracks=1 to 100;';
put 'name=''Phil Collins''!!cats(tracks);';
put 'output;';
put 'end;';
put 'run;';
put '*/';
put '/*';
put '%let url=http://millionsongdataset.com/sites/default/files/AdditionalFiles%trim(';
put ')/unique_tracks.txt;';
put 'filename test url "&url" lrecl=3000 ;';
put 'proc sql;';
put 'drop table casmusic.tunes;';
put 'data tracks;';
put 'infile test dlmstr='''' dsd end=lastobs;';
put 'input track_id:$32. song_id:$32. artist_nm:$128. title:$256.;';
put 'output;';
put 'if lastobs then do;';
put 'track_id=''dummyrecords'';';
put 'title=''none'';';
put 'artist_nm=''none'';';
put 'do x=1 to 4000000;';
put 'drop x;';
put 'song_id=cats(x);';
put 'output;';
put 'end;';
put 'stop;';
put 'end;';
put 'run;';
put 'proc casutil;';
put 'LOAD DATA=tracks';
put 'CASOUT="tunes"';
put 'OUTCASLIB="casmusic" PROMOTE ;';
put 'run;';
put '/*';
put 'data append;';
put 'if 0 then set &dclib..MPE_TABLES;';
put 'libref="CASMUSIC";';
put 'dsn=''TUNES'';';
put 'num_of_approvals_required=1;';
put 'loadtype=''UPDATE'';';
put 'buskey=''TRACK_ID SONG_ID'';';
put 'tx_from=0;';
put 'tx_to=''31DEC9999:23:59:59''dt;';
put 'output;';
put 'dsn=''ARTISTS'';';
put 'buskey=''NAME'';';
put 'output;';
put 'run;';
put 'proc append base=&dclib..MPE_tABLES data=append;';
put 'run;';
put '*/';
put '%mp_abort(iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Err during DB build)';
put ')';
put '%webout(OPEN)';
put 'data result;';
put 'dclib="&dclib";';
put 'admingroup="&admin";';
put 'dcpath="&dcpath";';
put 'run;';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mv_deletejes(path=&root/admin, name=makedata)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshcatalog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshcatalog.sas';
put '@brief Refreshes the library data catalog';
put '@details A library may be passed in a LIBREF url param.';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li dc_refreshcatalog.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref;';
put '%mpeinit()';
put '%dc_refreshcatalog(&libref)';
put 'data _null_;';
put 'file _webout;';
put 'put '' Catalog Refresh Complete
'';';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibs.sas';
put '@brief Refreshes the library data catalog';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mpe_refreshlibs.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_refreshlibs()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registerkey;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Register a new licence key';
put '@details';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li bitemporal_dataloader.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '@test';
put 'echo ''{"keyupload":[{"activation_key":"slfdjasfda;dslf","licence_key":"asdfasdlfkajsfdas"}]}''>in.json';
put 'sasjs request admin/registerkey -d in.json';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%global admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from groups where groupname="&mpeadmins";';
put '%mp_abort(iftrue= (&admin_check = 0)';
put ',mac=%str(&_program)';
put ',msg=%str(Only members of &mpeadmins may register a key)';
put ')';
put '%global licencekey activation_key;';
put 'data _null_;';
put 'set work.keyupload;';
put 'call symputx(''activation_key'',activation_key);';
put 'call symputx(''licencekey'',licence_key);';
put 'call symputx(''activlen'',length(activation_key));';
put 'call symputx(''liclen'',length(licence_key));';
put 'run;';
put '%mp_abort(iftrue= (&activlen< 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid activation_key)';
put ')';
put '%mp_abort(iftrue= (&liclen < 10)';
put ',mac=%str(&_program)';
put ',msg=%str(Invalid licencekey)';
put ')';
put 'data work.loadme;';
put 'if 0 then set &mpelib..mpe_config;';
put 'VAR_SCOPE=''DC'';';
put 'VAR_NAME=''DC_ACTIVATION_KEY'';';
put 'VAR_VALUE=symget(''activation_key'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'VAR_NAME=''DC_LICENCE_KEY'';';
put 'VAR_VALUE=symget(''licencekey'');';
put 'VAR_ACTIVE=1;';
put 'output;';
put 'keep VAR_: ;';
put 'run;';
put '%bitemporal_dataloader(';
put 'tech_from=tx_from';
put ',tech_to = tx_to';
put ',base_lib=&mpelib';
put ',base_dsn=mpe_config';
put ',append_lib=WORK';
put ',append_dsn=loadme';
put ',PK= VAR_SCOPE VAR_NAME';
put ',ETLSOURCE=%str(&_program STP)';
put ',LOADTYPE=TXTEMPORAL';
put ',dclib=&mpelib';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/approvers;
%let service=getapprovals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getapprovals.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* determine users group membership */';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table out1 (rename=(SUBMITTED_ON_DTTM1=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',submit_status_cd as REVIEW_STATUS_ID';
put ',SUBMITTED_BY_NM';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',put(submitted_on_dttm,yymmddhhmmss.) as SUBMITTED_ON_DTTM1';
put ',submitted_on_dttm as SUBMITTED_ON_DTTM2';
put ',submitted_reason_txt';
put ',num_of_approvals_required';
put ',num_of_approvals_remaining';
put ',base_lib as libref';
put ',base_ds as dsn';
put 'from &mpelib..mpe_submit (where=(submit_status_cd=''SUBMITTED''))';
put '/* filter out any submits for which approval is already made */';
put 'where table_id not in (';
put 'select table_id from &mpelib..mpe_review where submitted_by_nm="&user"';
put ');';
put '%macro getapprovals();';
put '%local admin_check;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (';
put 'select sas_group from &mpelib..mpe_security';
put 'where libref=''*ALL*''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and access_level in (''APPROVE'')';
put ');';
put '%if &admin_check >0 %then %do;';
put 'create table fromSAS as';
put 'select distinct * from out1';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%else %do;';
put 'create table fromSAS as';
put 'select distinct a.*';
put 'from out1 a';
put 'inner join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and (a.dsn=b.dsn or b.dsn=''*ALL*'')';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL =''APPROVE''';
put 'and b.SAS_GROUP in (select groupname from work.groups)';
put 'order by SUBMITTED_ON_DTTM2 desc;';
put '%end;';
put '%mend getapprovals;';
put '%getapprovals()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=gethistory;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Returns the list of previously approved / rejected items.';
put '@details History is taken from MPE_SUBMIT (where status_cd ne ''SUBMITTED'') and';
put 'filtered according to the groups in MPE_SECURITY (unless the user is in the';
put 'DC admin group).';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put ' Service Inputs
';
put ' BROWSERPARAMS
';
put 'The following variables MAY be provided from frontend (HIST can also be set';
put 'in MPE_CONFIG):';
put '@li HIST - number of records to return';
put '@li STARTROW - the starting row (default is 1)';
put ' Service Outputs
';
put ' FROMSAS
';
put 'This table is returned, starting from &STARTROW for &HIST rows (ordered';
put 'descending on SUBMITTED datetime)';
put '@li TABLE_ID';
put '@li BASE_TABLE';
put '@li SUBMITTED';
put '@li SUBMITTED_REASON_TXT';
put '@li SUBMITTER';
put '@li REVIEWED';
put '@li STATUS';
put '@li REVIEWED_ON_DTTM';
put '@li APPROVER';
put ' HISTPARAMS
';
put '@li HIST - rows returned';
put '@li STARTROW - starting row used';
put '@li NOBS - Number of observations (rows) available';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* hard coded HIST value */';
put '%let hist=40;';
put '%let startrow=1;';
put '/* load parameters from frontend (HIST and STARTROW) */';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC_REVIEW"';
put 'and var_name=''HISTORY_ROWS''';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(''hist'',var_value,''G'');';
put 'putlog ''mpe_config: '' var_name "=" var_value;';
put 'run;';
put '/* load parameters (override HIST again if provided) */';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put '/* determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.usergroups)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* check to see if the user is an admin, or has *ALL* access rights */';
put '%let authcheck=0;';
put 'proc sql noprint;';
put 'create table work.authcheck';
put 'as select *';
put 'from usergroups';
put 'where upcase(groupname)="%upcase(&mpeadmins)"';
put 'or upcase(groupname) in (';
put 'select upcase(sas_group) from &mpelib..mpe_security';
put 'where libref=''*ALL*'' and &dc_dttmtfmt. lt tx_to';
put ');';
put 'select count(*) into: authcheck from &syslast;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after auth check)';
put ')';
put '/* now get the previous &hist records from mpe_submit */';
put 'proc sql;';
put 'create view work.submits as';
put 'select distinct a.TABLE_ID';
put ',cats(a.base_lib,''.'',a.base_ds) as base_table';
put ',put(a.SUBMITTED_ON_DTTM,yymmddhhmmss.) as submitted';
put ',a.submitted_reason_txt';
put ',a.submitted_by_nm as submitter';
put ',put(a.REVIEWED_ON_DTTM,yymmddhhmmss.) as REVIEWED';
put ',a.submit_status_cd as status';
put ',a.reviewed_on_dttm';
put ',a.reviewed_by_nm as approver';
put 'from &mpelib..mpe_submit(where=(submit_status_cd ne ''SUBMITTED'')) a';
put '%macro gethistory();';
put '%if &authcheck=0 %then %do;';
put '/* filter for allowed items */';
put 'left join &mpelib..mpe_security(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.base_lib=b.libref';
put 'and (a.base_ds=b.dsn or b.dsn=''*ALL*'')';
put 'where upcase(b.SAS_GROUP) in (select upcase(groupname) from work.usergroups)';
put 'and b.access_level in (''VIEW'',''AUDIT'',''EDIT'',''APPROVE'')';
put '%end;';
put '%mend gethistory;';
put '%gethistory()';
put 'order by a.submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after fetching submits)';
put ')';
put 'data work.fromsas;';
put 'set work.submits;';
put 'if _n_ ge &startrow;';
put 'n+1;';
put 'if n>&hist then stop;';
put 'drop n;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.submits;';
put 'data work.histparams;';
put 'hist=&hist;';
put 'startrow=&startrow;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(OBJ,histparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=rejection;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Removes a staged data package from approval screen';
put '@details';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_getvars.sas';
put '@li removecolsfromwork.sas';
put ' Service Outputs
';
put ' fromsas
';
put '@li TABLE_ID';
put '@li SUBMITTED_REASON_TXT';
put '@li RESPONSE';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global STP_ACTION TABLE STP_REASON;';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams)';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '/* get current status and base table */';
put 'data _null_;';
put 'set &mpelib..mpe_submit(where=(TABLE_ID="&TABLE"));';
put 'call symputx(''BASE_TABLE'',cats(base_lib,''.'',base_ds));';
put 'call symputx(''submit_status_cd'',submit_status_cd);';
put 'run;';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: base_table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%quote(&submit_status_cd)=%quote(REJECTED))';
put ',mac=&_program';
put ',msg=%str(&table is already rejected!)';
put ')';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=&_program';
put ',msg=%str(Issue on setup)';
put ')';
put '/**';
put '* determine if user is authorised to reject table';
put '*/';
put '%let user=%mf_getuser();';
put '%global authcheck; %let authcheck=0;';
put '%mpe_accesscheck(&base_table,outds=authAPP,user=&user,access_level=APPROVE)';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%mp_abort(iftrue= (&authcheck=0)';
put ',mac=&_program..sas';
put ',msg=%str(User &user does not have APPROVE rights on &base_table and is not';
put 'in the &mpeadmins group)';
put ')';
put '/* update the control table to show table as rejected (and why) */';
put '%let now=%sysfunc(datetime());';
put 'data work.reject;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&table";';
put 'BASE_TABLE="&base_table";';
put 'REVIEW_STATUS_ID="REJECTED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&now;';
put 'REVIEW_REASON_TXT=symget(''STP_REASON'');';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.reject;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&table rejection),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''REJECTED'',';
put 'num_of_approvals_remaining=0,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&now';
put 'where table_id="&table";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc AFTER update...)';
put ')';
put '%mpe_alerts(alert_event=REJECTED';
put ', alert_lib=%scan(&BASE_TABLE,1,.)';
put ', alert_ds=%scan(&BASE_TABLE,2,.)';
put ', dsid=&TABLE';
put ')';
put 'data fromSAS;';
put 'RESPONSE=''SUCCESS!'';';
put 'set REJECT;';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/auditors;
%let service=getauditfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getauditfile.sas';
put '@brief Downloads a zip file containing audit info.';
put '@details The staging location from the &mpelocapprovals location';
put 'is zipped and returned as a file download. A user can only request the';
put 'audit pack if they have EDIT or APPROVE rights on the target table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_verifymacvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mf_getattrn.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'options mprint;';
put '/* security checks */';
put '%let user=%mf_getuser();';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where table_id="&table";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds table)';
put ')';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT);';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE);';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=mpestp_audit';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%let table=%unquote(&table);';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE);';
put 'data _null_;';
put 'set dirs;';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%nrstr(syscc=&syscc)';
put ')';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdiffs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdiffs.sas';
put '@brief Retrieves the diff file for viewing';
put '@details';
put ' SAS Macros
';
put '@li mpe_getvars.sas';
put '@li mpe_accesscheck.sas';
put '@li mf_getattrn.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mpe_getvars(BrowserParams, BrowserParams);';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%macro mpestp_diffs();';
put '%if %mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put '%then %do;';
put '%mp_abort(msg=%str(';
put '&user not authorised to download diffs data for &stp_table)';
put ',mac=mpestp_diffs.sas);';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* stream diffs csv to client */';
put '%mp_streamfile(contenttype=EXCEL';
put ',inloc=%str(&mpelocapprovals/&TABLE/&STP_DIFFS_CSV)';
put ',outname=&STP_DIFFS_CSV';
put ')';
put '%mend mpestp_diffs;';
put '%mpestp_diffs()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getstagetable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getstagetable.sas';
put '@brief Retrieves the actual table that is being sent for update';
put '@details';
put ' SAS Macros
';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table_id=%mf_getvalue(work.iwant,table_id);';
put 'libname loc "&mpelocapprovals/&table_id";';
put 'data stagetable;';
put 'set loc.&table_id;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,stagetable,missing=STRING)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=postdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_loadformat(libcat,libds';
put ',loadtarget=NO';
put ',auditlibds=0';
put ',locklibds=0';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=0';
put ',outds_del=0';
put ',outds_mod=0';
put ',mdebug=0';
put ');';
put '/* set up local macro variables and temporary tables (with a prefix) */';
put '%local err msg prefix dslist i var fmtlist ibufsize;';
put '%let dslist=base_fmts template inlibds ds1 stagedata storediffs del1 del2;';
put '%if &outds_add=0 %then %let dslist=&dslist outds_add;';
put '%if &outds_del=0 %then %let dslist=&dslist outds_del;';
put '%if &outds_mod=0 %then %let dslist=&dslist outds_mod;';
put '%let prefix=%substr(%mf_getuniquename(),1,21);';
put '%do i=1 %to %sysfunc(countw(&dslist));';
put '%let var=%scan(&dslist,&i);';
put '%local &var;';
put '%let &var=%upcase(&prefix._&var);';
put '%end;';
put '/* in DC, format catalogs maybe specified in the libds with a -FC extension */';
put '%let libcat=%scan(&libcat,1,-);';
put '/* perform input validations */';
put '%mp_abort(';
put 'iftrue=(%mf_existds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&libds could not be found)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_existvar(&libds,FMTROW)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(FMTROW not found in &libds)';
put ')';
put '%let err=0;';
put '%let msg=0;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'value=upcase(value);';
put 'if &mdebug=0 then put name ''='' value;';
put 'if name=:''LOAD'' and value not in (''YES'',''NO'') then do;';
put 'call symputx(''msg'',"invalid value for "!!name!!":"!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'else if name=''LIBCAT'' then do;';
put 'if exist(value,''CATALOG'') le 0 then do;';
put 'call symputx(''msg'',"Unable to open catalog: "!!value);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if (name=:''OUTDS'' or name in (''DELETE_COL'',''LOCKLIBDS'',''AUDITLIBDS''))';
put 'and missing(value) then do;';
put 'call symputx(''msg'',"missing value in var: "!!name);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'set &libds;';
put 'if missing(fmtrow) then do;';
put 'call symputx(''msg'',"missing fmtrow in format: "!!FMTNAME);';
put 'call symputx(''err'',1);';
put 'stop;';
put 'end;';
put 'run;';
put '%mp_abort(';
put 'iftrue=(&err ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(&msg)';
put ')';
put '%local cnt;';
put 'proc sql noprint;';
put 'select count(distinct catx(''|'',type,fmtname,fmtrow)) into: cnt from &libds;';
put '%mp_abort(';
put 'iftrue=(&cnt ne %mf_nobs(&libds))';
put ',mac=&sysmacroname';
put ',msg=%str(Non-unique primary key on &libds)';
put ')';
put '/**';
put '* First, extract only relevant formats from the catalog';
put '*/';
put 'proc sql noprint;';
put 'select distinct';
put 'case';
put 'when type=''N'' then upcase(fmtname)';
put 'when type=''C'' then cats(''$'',upcase(fmtname))';
put 'when type=''I'' then cats(''@'',upcase(fmtname))';
put 'when type=''J'' then cats(''@$'',upcase(fmtname))';
put 'else "&sysmacroname:UNHANDLED"';
put 'end';
put 'into: fmtlist separated by '' ''';
put 'from &libds;';
put '%mp_cntlout(libcat=&libcat,fmtlist=&fmtlist,cntlout=&base_fmts)';
put '/* get a hash of the row */';
put '%local cvars nvars;';
put '%let cvars=TYPE FMTNAME START END LABEL PREFIX FILL SEXCL EEXCL HLO DECSEP';
put 'DIG3SEP DATATYPE LANGUAGE;';
put '%let nvars=FMTROW MIN MAX DEFAULT LENGTH FUZZ MULT NOEDIT;';
put 'data &base_fmts/note2err;';
put 'set &base_fmts;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Ensure input table and base_formats have consistent lengths and types';
put '*/';
put 'data &inlibds/nonote2err;';
put 'length &delete_col $3 FMTROW 8 start end label $32767;';
put 'if 0 then set &base_fmts;';
put 'set &libds;';
put 'by type fmtname notsorted;';
put 'if &delete_col='''' then &delete_col=''No'';';
put 'fmtname=upcase(fmtname);';
put 'type=upcase(type);';
put 'if missing(type) then do;';
put 'if substr(fmtname,1,1)=''@'' then do;';
put 'if substr(fmtname,2,1)=''$'' then type=''J'';';
put 'else type=''I'';';
put 'end;';
put 'else do;';
put 'if substr(fmtname,1,1)=''$'' then type=''C'';';
put 'else type=''N'';';
put 'end;';
put 'end;';
put 'if type in (''N'',''I'') then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put 'fmthash=%mp_md5(cvars=&cvars, nvars=&nvars);';
put 'run;';
put '/**';
put '* Identify new records';
put '*/';
put 'proc sql;';
put 'create table &outds_add(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'left join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtname is null';
put 'and upcase(a.&delete_col) ne "YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify modified records';
put '*/';
put 'create table &outds_mod (drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col) ne "YES"';
put 'and a.fmthash ne b.fmthash';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify deleted records';
put '*/';
put 'create table &outds_del(drop=&delete_col) as';
put 'select a.*';
put 'from &inlibds a';
put 'inner join &base_fmts b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where upcase(a.&delete_col)="YES"';
put 'order by type, fmtname, fmtrow;';
put '/**';
put '* Identify fully deleted formats (where every record is removed)';
put '* These require to be explicitly deleted in proc format';
put '* del1 - identify _partial_ deletes';
put '* del2 - exclude these, and also formats that come with _additions_';
put '*/';
put 'create table &del1 as';
put 'select a.*';
put 'from &base_fmts a';
put 'left join &outds_del b';
put 'on a.type=b.type and a.fmtname=b.fmtname and a.fmtrow=b.fmtrow';
put 'where b.fmtrow is null;';
put 'create table &del2 as';
put 'select * from &outds_del';
put 'where cats(type,fmtname) not in (select cats(type,fmtname) from &outds_add)';
put 'and cats(type,fmtname) not in (select cats(type,fmtname) from &del1);';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to load prep)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '/* new records plus base records that are not deleted or modified */';
put 'data &ds1;';
put 'merge &base_fmts(in=base)';
put '&outds_mod(in=mod)';
put '&outds_add(in=add)';
put '&outds_del(in=del);';
put 'if not del and not mod;';
put 'by type fmtname fmtrow;';
put 'run;';
put '/* add back the modified records */';
put 'data &stagedata;';
put 'set &ds1 &outds_mod;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put '%end;';
put '/* mp abort needs to run outside of conditional blocks */';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc prior to actual load)';
put ')';
put '%if &loadtarget=YES %then %do;';
put '%if %mf_nobs(&stagedata)=0 and %mf_nobs(&del2)=0 %then %do;';
put '%put There are no changes to load in &libcat!;';
put '%return;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* prevent parallel updates */';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT commencing format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* do the actual load */';
put 'proc format lib=&libcat cntlin=&stagedata;';
put 'run;';
put '/* apply any full deletes */';
put '%if %mf_nobs(&del2)>0 %then %do;';
put '%local delfmtlist;';
put 'proc sql noprint;';
put 'select distinct case when type=''N'' then cats(fmtname,''.FORMAT'')';
put 'when type=''C'' then cats(fmtname,''.FORMATC'')';
put 'when type=''J'' then cats(fmtname,''.INFMTC'')';
put 'when type=''I'' then cats(fmtname,''.INFMT'')';
put 'else cats(fmtname,''.BADENTRY!!!'') end';
put 'into: delfmtlist';
put 'separated by '' ''';
put 'from &del2;';
put 'proc catalog catalog=&libcat;';
put 'delete &delfmtlist;';
put 'quit;';
put '%end;';
put '%if &locklibds ne 0 %then %do;';
put '/* unlock the table */';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&libcat,1,.)';
put ',ds=%scan(&libcat,2,.)-FC';
put ',ref=MP_LOADFORMAT completed format load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '/* track the changes */';
put '%if &auditlibds ne 0 %then %do;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%mp_storediffs(&libcat-FC';
put ',&base_fmts';
put ',TYPE FMTNAME FMTROW';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=&storediffs';
put ',mdebug=&mdebug';
put ')';
put 'proc append base=&auditlibds data=&storediffs;';
put 'run;';
put '%if &locklibds ne 0 %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&auditlibds,1,.)';
put ',ds=%scan(&auditlibds,2,.)';
put ',ref=MP_LOADFORMAT commencing audit table load';
put ',ctl_ds=&locklibds';
put ')';
put '%end;';
put '%end;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc after load)';
put ')';
put '%if &mdebug=0 %then %do;';
put 'proc datasets lib=work;';
put 'delete &prefix:;';
put 'run;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%mend mp_loadformat;';
put '%macro mpe_targetloader(libds= /* library.dataset to LOAD (target) */';
put ',now= %sysfunc(datetime()) /* static processed timestamp */';
put ',etlsource= /* process from whence the data came */';
put ',STAGING_DS= STAGING_DS /* name of staging (work) dataset which should';
put 'be appended into the target. */';
put ',LOADTARGET=NO /* set to yes to actually load the target */';
put ',CLOSE_VARS= /* provide close vars to override defaults */';
put ',dclib=NOTPROVIDED';
put ',mdebug=0';
put ',dc_dttmtfmt=%sysfunc(datetime())';
put ');';
put '%local lib ds nobs;';
put '/**';
put '* if a format catalog (suffix "-FC") we assume the catalog has already been';
put '* created by the calling program with a libds of work.fmtextract';
put '*/';
put '%let orig_lib=%upcase(%scan(&libds,1,.));';
put '%let orig_ds=%upcase(%scan(&libds,2,.));';
put '%let orig_libds=&libds;';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%let lib=WORK;';
put '%let ds=FMTEXTRACT;';
put '%let libds=&lib..&ds;';
put '%end;';
put '%else %do;';
put '%let lib=&orig_lib;';
put '%let ds=&orig_ds;';
put '%end;';
put '%mp_abort(iftrue= (&dclib=NOTPROVIDED)';
put ',mac=&sysmacroname';
put ',msg=%str(dclib=NOTPROVIDED)';
put ')';
put '/* get table attributes */';
put '%let nobs=0;';
put 'data work.sumo_config;';
put 'set &mpelib..mpe_tables;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&orig_lib"';
put 'and dsn="&orig_ds";';
put 'call symputx(''LOADTYPE'',loadtype,''l'');';
put 'call symputx(''BUSKEY'',buskey,''l'');';
put 'call symputx(''VAR_TXFROM'',var_txfrom,''l'');';
put 'call symputx(''VAR_TXTO'',var_txto,''l'');';
put 'call symputx(''VAR_BUSFROM'',var_busfrom,''l'');';
put 'call symputx(''VAR_BUSTO'',var_busto,''l'');';
put 'call symputx(''VAR_PROCESSED'',VAR_PROCESSED,''l'');';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING,''l'');';
put '%if %length(&CLOSE_VARS)=0 %then %do;';
put 'call symputx(''CLOSE_VARS'',CLOSE_VARS,''l'');';
put '%end;';
put 'call symputx(''nobs'',_n_,''l'');';
put 'if missing(AUDIT_LIBDS) then AUDIT_LIBDS="&dclib..MPE_AUDIT";';
put 'call symputx(''AUDIT_LIBDS'',AUDIT_LIBDS,''l'');';
put 'put (_all_)(=);';
put 'run;';
put '/* check if table is actually configured to load */';
put '%if &nobs ne 1 %then %do;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="%mf_getuser()"';
put ',STATUS=''FAILED (BAD DS)''';
put ',CSV_DIR=symget(''ETLSOURCE'')';
put ',PROCESSED_DTTM=&now;';
put '%end;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Table not registered in &mpelib..mpe_tables)';
put ')';
put '%mp_abort(iftrue= (&nobs>1)';
put ',mac=&sysmacroname';
put ',msg=%str(Something is very wrong with the PK in &mpelib..mpe_tables)';
put ')';
put '%if &LOADTYPE=TXTEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to= /* explicitly empty*/';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=&ETLSOURCE';
put ',LOADTYPE=&loadtype';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=REPLACE %then %do;';
put '%if &LOADTARGET=YES %then %do;';
put '%mp_lockanytable(LOCK,lib=&lib,ds=&ds,ref=%str(&etlsource),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put 'data WORK.&STAGING_DS;';
put 'set WORK.&STAGING_DS;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put '&VAR_PROCESSED = &now;';
put '%end;';
put 'drop _____DELETE__THIS__RECORD_____;';
put 'run;';
put 'proc sql; delete * from &libds;';
put 'proc append base=&libds data=WORK.&STAGING_DS force nowarn;run;';
put '%mp_lockanytable(UNLOCK,lib=&lib,ds=&ds,ctl_ds=&dclib..mpe_lockanytable)';
put '%end;';
put '%else %do;';
put '/* is full replace so treat all staged records as new in diff screen */';
put 'data work.outds_mod work.outds_add ;';
put 'set work.&staging_ds;';
put 'output work.outds_add;';
put 'run;';
put '/* previous table will be considered fully deleted */';
put 'data work.outds_del;';
put 'set &lib..&ds;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '%bitemporal_dataloader(bus_from=,bus_to=';
put ',tech_from= ,tech_to = /* explicitly empty*/';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=UPDATE';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %if &loadtype=FORMAT_CAT %then %do;';
put '/**';
put '* run mp_formatload';
put '* inputs:';
put '* - LOADTARGET';
put '* - CATALOG';
put '* - STAGEDATA';
put '* - LOADAUDIT';
put '* outputs:';
put '* work.outds_add';
put '* work.outds_del';
put '* work.outds_mod';
put '*/';
put '%mp_loadformat(&orig_libds';
put ',&staging_ds';
put ',loadtarget=&LOADTARGET';
put ',auditlibds=&AUDIT_LIBDS';
put ',locklibds=&dclib..mpe_lockanytable';
put ',delete_col=_____DELETE__THIS__RECORD_____';
put ',outds_add=outds_add';
put ',outds_del=outds_del';
put ',outds_mod=outds_mod';
put ',mdebug=&mdebug';
put ')';
put '%end;';
put '%else %if &loadtype=BITEMPORAL %then %do;';
put '%bitemporal_dataloader(bus_from=&VAR_BUSFROM,bus_to=&VAR_BUSTO';
put ',tech_from=&VAR_TXFROM';
put ',tech_to = &VAR_TXTO';
put ',base_lib=&lib';
put ',base_dsn=&ds';
put ',append_lib=WORK';
put ',append_dsn=&STAGING_DS';
put ',high_date=''31DEC9999:23:59:59''dt';
put ',PK= &buskey';
put ',ETLSOURCE=%superq(etlsource)';
put ',LOADTYPE=BITEMPORAL';
put ',RK_UNDERLYING=&RK_UNDERLYING';
put ',LOADTARGET=&LOADTARGET';
put ',RK_UPDATE_MAXKEYTABLE=&LOADTARGET';
put ',CLOSE_VARS=&CLOSE_VARS';
put ',processed=&VAR_PROCESSED';
put ',dclib=&dclib';
put ',outds_audit=&AUDIT_LIBDS';
put ')';
put '%end;';
put '%else %do;';
put '%put %str(WARN)ING: LOADTYPE &LOADTYPE not supported;';
put '%let syscc=4;';
put '%mp_abort(msg=LOADTYPE &LOADTYPE not supported,mac=mpe_targetloader.sas)';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc exiting MPE_TARGETLOADER macro)';
put ')';
put '%mend mpe_targetloader;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file postdata.sas';
put '@brief Either returns the file diffs or actually loads the data to target';
put '@details Before loading the target, a check is made against the time the';
put 'target was last updated (backend) and the time the DIFF was generated';
put '(frontend). If the target was updated whilst the DIFF was on the screen,';
put 'then the provided diff may have been incorrect and so a new DIFF should be';
put 'generated and approved before load.';
put 'Only 100 rows (of each DIFF type) are displayed on the DIFF screen.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|ACTION:$char10.|TABLE:$char32.|DIFFTIME:$char29.|';
put '|---|---|---|';
put '|SHOW_DIFFS|DC20220208T142124517_124703_1184|"Tue, 08 Feb 2022 14:23:05 GMT"|';
put ' SAS Macros
';
put '@li bitemporal_dataloader.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getengine.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuniquelibref.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_lockanytable.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_alerts.sas';
put '@li mpe_runhook.sas';
put '@li mpe_targetloader.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '/* this could be a config setting if required */';
put '%let maxdiff=100;';
put '%mpeinit()';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''ACTION'',ACTION);';
put 'call symputx(''LOAD_REF'',TABLE);';
put '/* DIFFTIME is when the DIFF was generated on the frontend */';
put 'call symputx(''DIFFTIME'',DIFFTIME);';
put 'putlog (_all_)(=);';
put 'run;';
put '%global action is_err err_msg msg;';
put '%let is_err=0;';
put '%let user=%mf_getuser();';
put '%let sastime=%sysfunc(datetime());';
put 'data sastime;';
put 'dt_sastime=&sastime;';
put 'run;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'picture flatdate other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* SHOW_DIFFS works by getting the temp tables from the bitemporal loader */';
put '/* so we share much of the logic from the actual load process */';
put '%let isfmtcat=0;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit;';
put 'where TABLE_ID="&LOAD_REF";';
put '/* fetch mpe_submit data */';
put 'libds=cats(base_lib,''.'',base_ds);';
put 'REVIEWED_ON=put(reviewed_on_dttm,datetime19.);';
put 'call symputx(''REVIEW_STATUS_ID'',submit_status_cd,''l'');';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED);';
put 'call symputx(''num_of_approvals_remaining'',num_of_approvals_remaining);';
put '/* other stuff that''s useful to do in data step */';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''libds'',libds);';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''isfmtcat'',1);';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* convert provided string DIFFTIME back to a numeric SAS datetime */';
put 'if "&action" ne "SHOW_DIFFS" then do;';
put 'call symputx(''DIFFTIME'',input(symget(''DIFFTIME''),anydtdtm18.));';
put 'end;';
put 'length difftime $32;';
put 'DIFFTIME=put(&sastime,datetime19.2);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&isfmtcat=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(difftime orig_libds libds load_ref)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: difftime orig_libds libds load_ref)';
put ')';
put '/* security checks */';
put '%mpe_accesscheck(&orig_libds,outds=authEDIT,user=&user,access_level=EDIT)';
put '%mpe_accesscheck(&orig_libds,outds=authAPP,user=&user,access_level=APPROVE)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc Before entering postdata macro)';
put ')';
put '%mp_abort(';
put 'iftrue=(';
put '%mf_getattrn(work.authEDIT,NLOBS)=0 & %mf_getattrn(work.authAPP,NLOBS)=0';
put ')';
put ',mac=&_program';
put ',msg=%str(&user not authorised to view approval screen for &orig_libds)';
put ')';
put '%macro quickmacro(inds,outds);';
put 'data &outds ;';
put '%if %length(&VAR_BUSFROM)>0 %then %do;';
put 'format &VAR_BUSFROM &VAR_BUSTO yymmddhhmmss.;';
put '%end;';
put 'if 0 then set &emptybasetable;';
put 'set &inds;';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&inds,_____DELETE__THIS__RECORD_____) %then %do;';
put 'drop _____DELETE__THIS__RECORD_____;';
put '%end;';
put '%if %mf_existvar(&inds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put '%mend quickmacro;';
put '%macro postdata();';
put '%if %quote(&REVIEW_STATUS_ID)=%quote(REJECTED)';
put 'or %quote(&REVIEW_STATUS_ID)=%quote(APPROVED) %then';
put '%do;';
put 'data params; set approve1; run;';
put '%webout(OPEN)';
put '%webout(OBJ,PARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if &action=APPROVE_TABLE %then %do;';
put '/* check user is authorised to approve table */';
put '/* user could be an editor but not an approver */';
put '%mp_abort(iftrue= (%mf_getattrn(work.authAPP,NLOBS)=0)';
put ',mac=&_program';
put ',msg=%str(&user may not APPROVE changes)';
put ')';
put '/* see if this user has already submitted an approval */';
put '%let prev_upload_check=1;';
put 'proc sql;';
put 'select count(*) into: prev_upload_check from &mpelib..mpe_review';
put 'where TABLE_ID="&LOAD_REF" and REVIEWED_BY_NM="&user"';
put 'and REVIEW_STATUS_ID ne "SUBMITTED";';
put '%let authcheck=%mf_getattrn(work.authAPP,NLOBS);';
put '%if &authcheck=0 or &prev_upload_check=1 %then %do;';
put '%put %str(WARN)ING: &=authcheck &=prev_upload_check;';
put 'data apPARAMS;';
put 'AUTHORISED=&authcheck;';
put 'PREV_UPLOAD_CHECK=&prev_upload_check;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '/* now check if table has been updated since DIFF screen shown */';
put '%local fmt_tm usernm last_load etlsource;';
put '%let last_load=0;';
put 'proc sql noprint;';
put 'select max(processed_dttm) format=16.2 into: last_load';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)";';
put 'select processed_dttm format=datetime19., user_nm, etlsource';
put 'into: fmt_tm, :usernm, :etlsource';
put 'from &mpelib..mpe_dataloads';
put 'where libref="%scan(&orig_libds,1,.)" and dsn="%scan(&orig_libds,2,.)"';
put 'and processed_dttm=&last_load;';
put '%put TIMECHECK: &last_load>&difftime;';
put '%if %sysevalf(&last_load>&difftime,boolean)=1 %then %do;';
put '%let is_err=1;';
put '%let err_msg=&orig_libds was updated in batch %trim(&etlsource';
put ') by %trim(&usernm) on &fmt_tm - please refresh the page!!;';
put '%return;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc before logchange;';
put '%return;';
put '%end;';
put '/* upload about to commence so ensure logs */';
put 'options notes mprint source2;';
put '%local oldloc;';
put '%if %symexist(SYSPRINTTOLOG) %then %let oldloc=&SYSPRINTTOLOG;';
put '%else %let oldloc=%qsysfunc(getoption(LOG));';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put 'data _null_;';
put 'if _n_=1 then do;';
put 'length oldloc $1000;';
put 'oldloc=symget(''oldloc'');';
put 'putlog "****** redirected:" oldloc " *****";';
put 'end;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc printto';
put 'log="&mpelocapprovals/&LOAD_REF/approval.log";';
put 'run;';
put '%end;';
put '%if &syscc ne 0 %then %do;';
put '%let is_err=1;';
put '%let err_msg=syscc=&syscc after logchange;';
put '%return;';
put '%end;';
put '%end;';
put '/**';
put '* upload the actual table';
put '*/';
put '%local libref ds;';
put '%let libref=%scan(&orig_libds,1,.);';
put '%let ds=%scan(&orig_libds,2,.);';
put 'proc sql noprint;';
put 'select PRE_APPROVE_HOOK, POST_APPROVE_HOOK, LOADTYPE, var_txfrom, var_txto';
put ',BUSKEY, VAR_BUSFROM, VAR_BUSTO';
put ',AUDIT_LIBDS, NOTES, coalesce(NUM_OF_APPROVALS_REQUIRED,1)';
put ',VAR_PROCESSED';
put 'into: PRE_APPROVE_HOOK, :POST_APPROVE_HOOK, :LOADTYPE,:var_txfrom,:var_txto';
put ',:BUSKEY,:VAR_BUSFROM,:VAR_BUSTO';
put ',:AUDIT_LIBDS, :TABLE_DESC, :NUM_OF_APPROVALS_REQUIRED_TOT';
put ',:VAR_PROCESSED';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="&libref"';
put 'and dsn="&ds";';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals orig_libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals orig_libds)';
put ')';
put '/* get dataset from approvals location (has same name as load_ref) */';
put '%let tmplib=%mf_getuniquelibref();';
put 'libname &tmplib "&mpelocapprovals/&LOAD_REF";';
put 'data STAGING_DS;';
put 'set &tmplib..&LOAD_REF;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc before preapprove)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '/* run pre-approve hook - occurs both BEFORE _and_ AFTER the diff */';
put '%mpe_runhook(PRE_APPROVE_HOOK)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after preapprove)';
put ')';
put '%if &num_of_approvals_remaining>1 and &action=APPROVE_TABLE %then %do;';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'data apReqd;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'set approve1; /* js will test for NUM_OF_APPROVALS_REQUIRED */';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apReqd);';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering TARGETLOADER)';
put ')';
put '%mpe_targetloader(libds=&orig_libds';
put ',now= &sastime';
put ',etlsource=&LOAD_REF';
put ',STAGING_DS=STAGING_DS';
put ',dclib=&mpelib';
put '%if &action=APPROVE_TABLE %then %do;';
put ',LOADTARGET=YES';
put '%end;';
put '%else %do;';
put ',LOADTARGET=NO';
put '%end;';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%if %mf_getattrn(STAGING_DS,NLOBS)=0 %then %do;';
put '/* empty dataset! */';
put 'data out;';
put 'set STAGING_DS;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc entering SHOWDIFFS)';
put ')';
put '%if &action=SHOW_DIFFS %then %do;';
put '/**';
put '* Now prepare the SHOW DIFFS (approve) screen';
put '*/';
put '/*To create the CURRENT diffs, we compare with the ACTUAL data. But first';
put 'need to find out what version TIME to query it for.. */';
put 'proc sql noprint;';
put 'select max(processed_dttm)-1 format=datetime19. into: tstamp';
put 'from &mpelib..mpe_dataloads';
put 'where libref="&libref" and dsn="&ds" and ETLSOURCE="&LOAD_REF";';
put 'quit;';
put '%if &tstamp=. %then %let tstamp=%sysfunc(datetime(),datetime19.);';
put '/**';
put '* now create the DIFFS dataset';
put '* If using a database, then utilise pass through!';
put '* Create a temporary table inside the database for joins..';
put '*/';
put 'options mprint;';
put '%let engine_type=%mf_getEngine(%scan(&libds,1,.));';
put '%put &libds engine type = &engine_type;';
put '%local inner_table ;';
put '%if &engine_type=OLEDB %then %do;';
put '/* generate a unique ID for the temporary table */';
put 'data _null_;';
put 'call symputx(''UNIQUE_REF''';
put ',cats(round(datetime(),1)';
put ',''_''';
put ',round(ranuni(0)*100000,1)';
put ')';
put ',''l''';
put ');';
put 'run;';
put '%let inner_table=&libref.."##DIFF_&UNIQUE_REF"n;';
put 'proc sql;';
put 'create table &inner_table as';
put 'select * from work.outds_mod;';
put '%end;';
put '%else %let inner_table=work.outds_mod;';
put 'proc sql;';
put 'create view work.originals2 as';
put 'select b.*';
put 'from &inner_table a';
put 'inner join &libds';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '(where=("&tstamp"dt < &VAR_TXTO))';
put '%end;';
put 'b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&buskey));';
put '%let idx_val=%scan(&buskey,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'create view bitemp5c_updates2 as';
put 'select * from work.outds_mod';
put 'order by %mf_getquotedstr(in_str=&buskey,dlm=%str(,),quote=)';
put ';';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'options varlenchk=nowarn; /* for small numerics (<8) */';
put '%quickmacro(work.outds_del,deleted)';
put '%quickmacro(work.outds_add,new)';
put '%quickmacro(bitemp5c_updates2,updates)';
put '%quickmacro(originals2,originals)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc in quickmacro)';
put ')';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=work.updates';
put 'out=cols (keep=name type length varnum format);';
put 'run;';
put 'proc sort data=cols out=cols(drop=varnum); by varnum;run;';
put 'data cols; set cols; name=upcase(name);run;';
put '%let tempDIFFS_CSV=tempDiffs_%trim(';
put '%sysfunc(datetime(),flatdate.)).csv;';
put '/**';
put '* Store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '*/';
put 'data TEMPDIFFS (compress=no) /* for realistic file size */;';
put 'length _____status $10;';
put 'set work.deleted (in=_____del)';
put 'work.new(in=_____new)';
put 'work.updates (in=_____upd)';
put 'work.originals2 (in=_____orig);';
put 'if _____del then _____status=''DELETED '';';
put 'else if _____new then _____status=''NEW'';';
put 'else if _____upd then _____status=''UPDATED'';';
put 'else if _____orig then _____status=''ORIGINAL'';';
put 'run;';
put 'proc export data=TEMPDIFFS dbms=csv replace';
put 'outfile="&mpelocapprovals/&LOAD_REF/&tempDIFFS_CSV" ;';
put 'run;';
put 'proc sql noprint;';
put 'select filesize format=sizekmg10.1, filesize as filesize_raw';
put 'into: filesize,:filesize_raw';
put 'from dictionary.tables';
put 'where libname=''WORK'' and memtype=''DATA'' and memname=''TEMPDIFFS'';';
put 'data params;';
put 'set approve1;';
put 'DIFFS_CSV="&tempDIFFS_CSV";';
put 'FILESIZE="&filesize";';
put 'FILESIZE_RAW=&filesize_raw;';
put 'if %mf_nobs(work.originals)>&maxdiff';
put 'or %mf_nobs(work.new)>&maxdiff';
put 'or %mf_nobs(work.deleted)>&maxdiff';
put 'or %mf_nobs(work.updates)>&maxdiff';
put 'then TRUNCATED="YES";';
put 'else TRUNCATED="NO";';
put 'NUM_ADDED=%mf_getattrn(work.new,NLOBS);';
put 'NUM_DELETED=%mf_getattrn(work.deleted,NLOBS);';
put 'NUM_UPDATED=%mf_getattrn(work.updates,NLOBS);';
put 'SUBMITTED_ON=put(submitted_on_dttm,datetime19.);';
put '%if %mf_getattrn(work.authAPP,NLOBS)>0 %then %do;';
put 'ISAPPROVER=''YES'';';
put '%end;';
put '%else %do;';
put 'ISAPPROVER=''NO'';';
put '%end;';
put 'run;';
put '/*';
put '* The PRE_APPROVE_HOOK may have applied custom formats to the staged table.';
put '* To ensure consistency in the DIFF screen, we should apply the same formats';
put '* to the base table. Limit rows at the same time.';
put '*/';
put 'data work.originals;';
put 'if 0 then set deleted new updates;';
put 'set work.originals;';
put 'if _n_>&maxdiff then stop;';
put 'run;';
put '/* get additional submits against the same base table */';
put 'proc sort data=&mpelib..mpe_submit(where=(';
put 'submit_status_cd=''SUBMITTED''';
put 'and cats(base_lib,''.'',base_ds)="&orig_libds"';
put 'and table_id ne "&LOAD_REF"';
put ')) out=submits;';
put 'by descending submitted_on_dttm;';
put 'run;';
put '/* filter last 10 */';
put 'data submits;';
put 'set submits;';
put 'if _n_>10 then stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc SHOWDIFFS prior to streamout)';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,params)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,submits)';
put '%webout(OBJ,deleted,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,fmt=N,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,ORIGINALS,fmt=N,missing=STRING)';
put '/* need same for formatted view */';
put '%webout(OBJ,deleted,dslabel=fmt_deleted,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,new,dslabel=fmt_new,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,updates,dslabel=fmt_updates,fmt=Y,missing=STRING,maxobs=&maxdiff)';
put '%webout(OBJ,originals,dslabel=fmt_ORIGINALS,fmt=Y,missing=STRING)';
put '%webout(CLOSE)';
put '%if &engine_type=OLEDB %then %do;';
put 'proc sql; /* needs to be dropped AFTER view execution */';
put 'drop table &inner_table;';
put '%end;';
put '%return;';
put '%end;';
put '%if &action=APPROVE_TABLE %then %do;';
put '%approve:';
put '/**';
put '* store temp tables so we have a record of diffs';
put '* do not change this libname or table name as it is used in some';
put '* post approve hooks';
put '* for REPLACE loads, temp tables not made, so make them';
put '*/';
put '%if &LOADTYPE=REPLACE %then %do;';
put 'data work.outds_add; run;';
put 'data work.outds_mod; run;';
put 'data work.outds_del; run;';
put '%end;';
put 'libname approve "&mpelocapprovals/&LOAD_REF";';
put 'data; set &libds;stop;run;';
put '%let emptybasetable=&syslast;';
put 'data approve.ActualDiffs;';
put 'length _____STATUS_____ $10;';
put 'if 0 then set &emptybasetable;';
put 'set work.outds_del (in=_____del)';
put 'work.outds_add (in=_____new)';
put 'work.outds_mod (in=_____upd);';
put 'if _____del then _____STATUS_____=''DELETED'';';
put 'else if _____new then _____STATUS_____=''NEW'';';
put 'else if _____upd then _____STATUS_____=''UPDATED'';';
put '%if %mf_existvar(&libds,&var_txfrom) %then %do;';
put 'drop &var_txfrom &var_txto;';
put '%end;';
put '%if %mf_existvar(&libds,&VAR_PROCESSED) %then %do;';
put 'drop &VAR_PROCESSED;';
put '%end;';
put 'run;';
put 'proc export data=approve.ActualDiffs';
put 'outfile="&mpelocapprovals/&LOAD_REF/ActualDiffs.csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control table to show table as approved */';
put '/* append to mpe_review table */';
put '%let apprno=%eval(&num_of_approvals_required-&num_of_approvals_remaining+1);';
put 'data work.append_review;';
put 'if 0 then set &mpelib..mpe_review;';
put 'TABLE_ID="&LOAD_REF";';
put 'BASE_TABLE="&orig_libds";';
put 'REVIEW_STATUS_ID="APPROVED";';
put 'REVIEWED_BY_NM="&user";';
put 'REVIEWED_ON_DTTM=&sastime;';
put 'REVIEW_REASON_TXT="APPROVAL &apprno of &num_of_approvals_required";';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_review,ref=%str(&LOAD_REF Approval),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base=&mpelib..mpe_review data=work.append_review;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_review,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* update mpe_submit table */';
put '%mp_lockanytable(LOCK,';
put 'lib=&mpelib,ds=mpe_submit,ref=%str(&LOAD_REF Approval in auditors/postdata),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc sql;';
put 'update &mpelib..mpe_submit';
put 'set submit_status_cd=''APPROVED'',';
put 'num_of_approvals_remaining=&num_of_approvals_remaining-1,';
put 'reviewed_by_nm="&user",';
put 'reviewed_on_dttm=&sastime';
put 'where table_id="&LOAD_REF";';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* run post-approve hook */';
put '%mpe_runhook(POST_APPROVE_HOOK)';
put 'data apPARAMS;';
put 'AUTHORISED=1;';
put 'ALREADY_UPDATED=0;';
put 'ALREADY_UPDATED_DTTM=.;';
put 'DIFFTIME="&difftime";';
put 'if &syscc=0 then RESPONSE=''SUCCESS!'';';
put 'else response="SYSCC=&syscc.";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program 582';
put ',msg=%superq(msg)';
put ')';
put '%mpe_alerts(alert_event=APPROVED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&LOAD_REF';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,apPARAMS)';
put '%webout(CLOSE)';
put '%return;';
put '%end;';
put '%mend postdata;';
put '%postdata()';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(iftrue= (&is_err=1)';
put ',mac=&_program';
put ',msg=%superq(err_msg)';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/editors;
%let service=getdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_length(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_length)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_length(var);';
put 'if var=. then len=0;';
put 'else if missing(var) or trunc(var,3)=var then len=3;';
put 'else if trunc(var,4)=var then len=4;';
put 'else if trunc(var,5)=var then len=5;';
put 'else if trunc(var,6)=var then len=6;';
put 'else if trunc(var,7)=var then len=7;';
put 'else len=8;';
put 'return(len);';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_length;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mp_getmaxvarlengths(';
put 'libds';
put ',num2char=NO';
put ',outds=work.mp_getmaxvarlengths';
put ')/*/STORE SOURCE*/;';
put '%local vars prefix x var fmt srcds;';
put '%let vars=%mf_getvarlist(libds=&libds);';
put '%let prefix=%substr(%mf_getuniquename(),1,25);';
put '%let num2char=%upcase(&num2char);';
put '%if &num2char=NO %then %do;';
put '/* compile length function for numeric fields */';
put '%mcf_length(wrap=YES, insert_cmplib=YES)';
put '%end;';
put '%if &num2char=NO';
put 'and ("%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5")';
put 'and %mf_getvarcount(&libds,typefilter=N) gt 0';
put '%then %do;';
put '/* custom functions not supported in summary operations */';
put '%let srcds=%mf_getuniquename();';
put 'data &srcds/view=&srcds;';
put 'set &libds;';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if %mf_getvartype(&libds,&var)=N %then %do;';
put '&prefix.&x=mcf_length(&var);';
put '%end;';
put '%end;';
put 'run;';
put '%end;';
put '%else %let srcds=&libds;';
put 'proc sql;';
put 'create table &outds (rename=(';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '&prefix.&x=%scan(&vars,&x)';
put '%end;';
put '))';
put 'as select';
put '%do x=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let var=%scan(&vars,&x);';
put '%if &x>1 %then ,;';
put '%if %mf_getvartype(&libds,&var)=C %then %do;';
put 'max(lengthn(&var)) as &prefix.&x';
put '%end;';
put '%else %if &num2char=YES %then %do;';
put '%let fmt=%mf_getvarformat(&libds,&var);';
put '%put fmt=&fmt;';
put '%if %str(&fmt)=%str() %then %do;';
put 'max(lengthn(cats(&var))) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(lengthn(put(&var,&fmt))) as &prefix.&x';
put '%end;';
put '%end;';
put '%else %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then %do;';
put 'max(&prefix.&x) as &prefix.&x';
put '%end;';
put '%else %do;';
put 'max(mcf_length(&var)) as &prefix.&x';
put '%end;';
put '%end;';
put '%end;';
put 'from &srcds;';
put 'proc transpose data=&outds';
put 'out=&outds(rename=(_name_=NAME COL1=MAXLEN));';
put 'run;';
put '%mend mp_getmaxvarlengths;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdata.sas';
put '@brief Returns a dataset to the editor front end';
put '@details';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|';
put '|---|---|';
put '|DC258467.MPE_X_TEST|-1|';
put ' Service Outputs
';
put ' sasdata
';
put ' sasparams
';
put 'Contains info on the request. One row is returned.';
put '@li CLS_FLG - set to 0 if there are no CLS rules (everything editable)';
put 'else set to 1 (CLS rules exist)';
put '@li ISMAP - set to 1 if the target DS is an excel map target, else 0';
put ' approvers
';
put ' dqrules
';
put ' dqdata
';
put ' cols
';
put 'Contains column level attributes.';
put '@li NAME - column name';
put '@li VARNUM - variable position. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li LABEL - variable label. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li FMTNAME - derived format name. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li DDTYPE - derived dropdown type. Source: https://core.sasjs.io/mp__getcols_8sas.html';
put '@li CLS_RULE - values include:';
put '- EDIT - the column is editable';
put '- READ - the column should be readonly';
put '- HIDE - the column should be hidden';
put '@li memlabel';
put '@li desc- augmented with MPE_DATADICTIONARY if exists, else label';
put '@li longdesc - from MPE_DATADICTIONARY';
put ' maxvarlengths
';
put ' xl_rules
';
put ' query
';
put ' versions
';
put 'history of DC versions for this particular table';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getgroupmembers.sas';
put '@li mf_existvar.sas';
put '@li mf_getattrn.sas';
put '@li mf_getvarlist.sas';
put '@li mf_existds.sas';
put '@li mf_getquotedstr.sas';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getmaxvarlengths.sas';
put '@li mp_validatecol.sas';
put '@li mpe_accesscheck.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_getlabels.sas';
put '@li mpe_getversions.sas';
put '@li mpe_filtermaster.sas';
put '@li mpe_runhook.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length filter_rk 8;';
put 'set work.SASCONTROLTABLE;';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put 'call symputx(''orig_libds'',upcase(libds));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(libds filter_rk)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: libds filter_rk)';
put ')';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further calls will return col metadata and actual data';
put '*/';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '/**';
put '* First check user has access permission to edit the table';
put '*/';
put '%put checking access;';
put '%let user=%mf_getuser();';
put '%mpe_accesscheck(&orig_libds,outds=mw_auth,user=&user,access_level=EDIT)';
put '%mp_abort(iftrue= (%mf_getattrn(work.mw_auth,NLOBS)=0)';
put ',mac=mpestp_getdata.sas';
put ',msg=&user is not authorised to edit &orig_libds %trim(';
put ')in the &mpelib..MPE_SECURITY table';
put ')';
put '%mp_abort(iftrue= ( %mf_existds(libds=&libds) ne 1)';
put ',mac=mpestp_getdata.sas';
put ',msg=dataset &libds does not exist!!';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at line 60 )';
put ')';
put '%global loadtype var_txfrom var_txto var_processed filter_text pk coltype';
put 'sortpk;';
put '%put getting table attributes;';
put 'proc sql noprint;';
put 'select upcase(loadtype)';
put ',var_txfrom,var_txto';
put ',var_busfrom,var_busto';
put ',var_processed,rk_underlying,buskey';
put ',coalesce(rk_underlying,buskey)';
put ',pre_edit_hook';
put ',case when missing(rk_underlying) then buskey else rk_underlying end';
put 'into: loadtype,:var_txfrom,:var_txto';
put ',:var_busfrom ,:var_busto';
put ',:var_processed,:rk_underlying,:buskey, :sortPK, :pre_edit_hook,:pk';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt TX_TO';
put 'and upcase(dsn)="%scan(&orig_libds,2,.)"';
put 'and upcase(libref)="%scan(&orig_libds,1,.)";';
put '%put preparing filter query:;';
put '%mpe_filtermaster(EDIT,&orig_libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%macro mpestp_getdata();';
put '%if not %symexist(DC_MAXOBS_WEBEDIT) %then %do;';
put '%put NOTE:;%put NOTE- DC_MAXOBS_WEBEDIT not found!;';
put '%put NOTE- Please add to &mpelib..MPE_CONFIG table;';
put '%put NOTE-;%put NOTE-;';
put '%global DC_MAXOBS_WEBEDIT;';
put '%let DC_MAXOBS_WEBEDIT=500;';
put '%end;';
put '/* for tables which use RKs/SKs then we just expose the business key to';
put 'users - this lets uploads be sent to multiple environments (with';
put 'potentially different RK/SK values for the same business key).';
put 'Note that the config table has the RK column in the buskey field in';
put 'this scenario. */';
put '%if %length(&rk_underlying)>0 %then %let drop_rk=&buskey;';
put '%else %let drop_rk=;';
put '/* always remove the PROCESSED_DTTM column, if it exists */';
put '%if %length(&var_processed)=0 %then %do;';
put '%if %mf_existvar(&libds,PROCESSED_DTTM)>0 %then';
put '%let var_processed=PROCESSED_DTTM;';
put '%end;';
put '/**';
put '* Now get the slice of the actual table';
put '*/';
put 'options obs=10000;';
put '%if &loadtype=BITEMPORAL %then %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk );';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'proc sort data=out;';
put 'by &pk &var_busfrom;';
put 'run;';
put 'data out;';
put 'set out;';
put 'by &pk &var_busfrom;';
put 'if last.%scan(&pk,-1);';
put 'run;';
put '%end;';
put '%else %do;';
put 'data out (drop=&var_txfrom &var_txto &var_processed &drop_rk);';
put '_____DELETE__THIS__RECORD_____="No";';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%end;';
put 'options obs=max;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue with filtering (line 165) )';
put ')';
put 'options obs=&DC_MAXOBS_WEBEDIT;';
put '%let sortpk=%sysfunc(coalescec(&sortpk &var_busfrom,_ALL_));';
put 'proc sort data=work.out; by &sortPK; run;';
put 'options obs=max;';
put '%mpe_runhook(PRE_EDIT_HOOK)';
put '%let obscnt=%mf_getattrn(work.out,NLOBS);';
put '%mp_abort(iftrue=(&obscnt>&DC_MAXOBS_WEBEDIT)';
put ',mac=&_program';
put ',msg=Table is too big (&obscnt rows) - please filter and try again!';
put ')';
put '/* order delete var and pk fields at start of table */';
put '%let sourcevars=%mf_wordsInStr1ButNotStr2(';
put 'Str1=%mf_getvarlist(work.out)';
put ',Str2= _____DELETE__THIS__RECORD_____ &pk';
put ');';
put '%put sourcevars=&sourcevars;';
put 'data outdata;';
put '/* delete & pk fields come first */';
put 'attrib _____DELETE__THIS__RECORD_____ &pk label='''';';
put '/* keep remaining variable order */';
put '%if %length(&sourcevars)>0 %then %do;';
put 'attrib &sourcevars label='''';';
put '%end;';
put '_____DELETE__THIS__RECORD_____="No ";';
put '%if %mf_nobs(work.out)=0 %then %do;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put '%end;';
put 'set work.out ;';
put 'run;';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=outdata';
put 'out=vars(keep=name type length varnum format: label);';
put 'run;';
put 'proc sort;';
put 'by varnum;';
put 'run;';
put 'data vars3(keep=name type length format label pk varnum ctrloptions formatd);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED");';
put 'if type2=2 or type2=6 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if upcase(format2)=''DATETIME'' and formatl=0 then format=''DATETIME.'';';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''num'';';
put 'end;';
put 'if name in ('''',%upcase(%mf_getQuotedStr(&pk,dlm=%str(,),quote=S)))';
put 'then PK=''YES'';';
put 'length ctrlOptions $500;';
put 'if name="_____DELETE__THIS__RECORD_____" then ctrlOptions=''["No","Yes"]'';';
put 'else ctrlOptions='''';';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 242 (vars3 step) in &_program \n';
put '%superq(syserrortext)';
put ')';
put ')';
put '%global jsdttmvars jsdtvars jstmvars;';
put 'data _null_;';
put 'set vars3 end=last;';
put 'if _n_>1 then comma='','';';
put 'length coltype $500.;';
put 'format=upcase(format);';
put 'coltype=cats(comma,''{"data":"'',name,''"'');';
put 'if ctrlOptions ne '''' then';
put 'colType=cats(coltype,'',"type":"dropdown","source":'',ctrlOptions,"}");';
put 'else if type=''num'' then do;';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then do;';
put 'colType=cats(coltype';
put ','',"type":"date","dateFormat":"YYYY-MM-DD HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat datetimes in javascript format */';
put 'call symput(''jsdttmvars'',symget(''jsdttmvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then do;';
put '/* see bottom of file for more date formats!! */';
put '/* also when updating, update stagedata.sas and mp_getcols.sas';
put 'and mpe_loader.sas */';
put 'colType=cats(coltype,'',"type":"date","dateFormat":"YYYY-MM-DD"''';
put '/*colType=cats(coltype,'',"type":"date","dateFormat":"MM/DD/YYYY"''*/';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript dates */';
put 'call symput(''jsdtvars'',symget(''jsdtvars'')!!'' ''!!name);';
put 'end;';
put 'else if format=:''TIME'' or format=:''HHMM'' then do;';
put 'colType=cats(coltype,'',"type":"time","timeFormat":"HH:mm:ss"''';
put ','',"correctFormat":"true"}'');';
put '/* build var list to reformat as javascript times */';
put 'call symput(''jstmvars'',symget(''jstmvars'')!!'' ''!!name);';
put 'end;';
put 'else do;';
put '/* is standard numeric but need to ascertain precision */';
put 'retain base ''000000000000000000'';';
put 'if formatd>0 then numFormat=cats(''.'',substr(base,1,formatd));';
put 'colType=cats(coltype,'',"type":"numeric","format":"0'',numFormat,''"}'');';
put 'end;';
put 'end;';
put 'else colType=cats(coltype,''}'');';
put 'length concatcoltype $32767;';
put 'retain concatcoltype;';
put 'concatcoltype=cats(concatcoltype,coltype);';
put 'if last then call symputx(''colType'',strip(concatcoltype),''g'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc at 283 (null step) in &_program)';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddThhmmss (default=28) other=''%0Y-%0m-%0d %0H:%0M:%0s''';
put '(datatype=datetime);';
put 'picture JSyymmdd other=''%0Y-%0m-%0d'' (datatype=date);';
put 'picture JShhmmss (default=16) other=''%0H:%0M:%0s'' (datatype=time);';
put 'RUN;';
put '/* before we send the data, need to rebuild all date & datetime vars as char*/';
put '%let finalvars=%mf_getvarlist(work.outdata);';
put 'data sasdata;';
put '/* set formats & col order ahead of rename+import */';
put 'informat &finalvars ;';
put '/* read dataset and rename date / datetime vars as necessary */';
put 'set outdata';
put '%if %length(&jsdttmvars&jsdtvars&jstmvars)>0 %then %do;';
put '(rename=(';
put '%local dtvarnum dtvar tmvar;';
put '/* temp datetime vars end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars ,&dtvarnum);';
put '&dtvar=_____&dtvarnum._____';
put '%end;';
put '/* temp date vars do not end in _____ */';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan( &jsdtvars,&dtvarnum);';
put '&dtvar=_____&dtvarnum';
put '%end;';
put '/* temp time vars end in ___tm */';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan( &jstmvars,&tmvarnum);';
put '&tmvar=_____&tmvarnum.___tm';
put '%end;';
put '))';
put '%end;';
put ';';
put '%if %length(&jsdttmvars)>0 %then %do ;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdttmvars,%str( )));';
put '%let dtvar=%scan(&jsdttmvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum._____,yymmddThhmmss28.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum._____;';
put '%end;';
put '%end;';
put '%if %length(&jsdtvars)>0 %then %do;';
put '%do dtvarnum=1 %to %sysfunc(countw(&jsdtvars,%str( )));';
put '%let dtvar=%scan(&jsdtvars,&dtvarnum);';
put '&dtvar=cats(put(_____&dtvarnum,JSyymmdd.));';
put 'if &dtvar="ERROR" then call missing(&dtvar);';
put 'drop _____&dtvarnum;';
put '%end;';
put '%end;';
put '%if %length(&jstmvars)>0 %then %do;';
put '%do tmvarnum=1 %to %sysfunc(countw(&jstmvars,%str( )));';
put '%let tmvar=%scan(&jstmvars,&tmvarnum);';
put '&tmvar=cats(put(_____&tmvarnum.___tm,JShhmmss14.));';
put 'if &tmvar="ERROR" then call missing(&tmvar);';
put 'drop _____&tmvarnum.___tm;';
put '%end;';
put '%end;';
put 'output;';
put 'run;';
put '/* get the relevant approvers for the drop down */';
put '%put getting approvers;';
put '%local sas_groups sas_i sas_group;';
put 'proc sql noprint;';
put 'select distinct sas_Group into: sas_groups separated by "|"';
put 'from &mpelib..mpe_security';
put 'where libref="%scan(&orig_libds,1,.)"';
put 'and dsn="%scan(&orig_libds,2,.)"';
put 'and access_level=''APPROVE''';
put 'and &dc_dttmtfmt. lt TX_TO;';
put '%if %length(&sas_groups)=0 %then %do;';
put '%dc_getgroupmembers(&dc_admin_group,outds=work.access1)';
put '%end;';
put '%else %do sas_i=1 %to %sysfunc(countw(&sas_groups,%str(|)));';
put '%let sas_group=%scan(&sas_Groups,&sas_i,%str(|));';
put '%dc_getgroupmembers(&sas_group,outds=work.temp&sas_i)';
put 'proc append base=work.access1 data=work.temp&sas_i;run;';
put '%end;';
put '%mend mpestp_getdata;';
put '%mpestp_getdata()';
put '%mp_abort(mode=INCLUDE)';
put '/* extract column level security rules */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.sasdata';
put ',mode=EDIT';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.sasdata1';
put ',outmeta=work.cls_rules';
put ')';
put '/* get labels */';
put '%mpe_getlabels(COLUMNS,sasdata1,outds=spec)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc extracting spec info)';
put ')';
put '/* extract col info */';
put '%mp_getcols(&libds, outds=cols1)';
put '/* join with cls rules */';
put 'proc sql;';
put 'create table work.cols as';
put 'select a.NAME';
put ',a.VARNUM';
put ',a.LABEL';
put ',a.FMTNAME';
put ',a.DDTYPE';
put ',case b.cls_hide';
put 'when 1 then ''HIDE''';
put 'when 0 then ''EDIT''';
put 'else ''READ'' end as CLS_RULE';
put ',c.memlabel';
put ',c.desc';
put ',c.longdesc';
put 'from work.cols1 a';
put 'left join work.cls_rules b';
put 'on a.NAME=b.CLS_VARIABLE_NM';
put 'left join work.spec c';
put 'on a.NAME=c.NAME;';
put 'proc sql;';
put 'create table approvers as select distinct membername as personname';
put ',membername as email, membername as userid';
put 'from work.access1;';
put '/*';
put 'create table access3 as select b.userid,b.email';
put 'from access2 a';
put ',support.users b';
put 'where a.personname=b.userid';
put 'and a.personname ne "%mf_getuser()"';
put 'and %sysfunc(datetime()) lt b.tx_to_dttm';
put 'order by 1;';
put '*/';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%put params;';
put '%let ismap=0;';
put 'proc sql noprint;';
put 'select count(*) into: ismap from &mpelib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&orig_libds" and &dc_dttmtfmt. le TX_TO;';
put 'data sasparams;';
put 'length colHeaders $20000 filter_text $32767;';
put 'colHeaders=cats(upcase("%mf_getvarlist(sasdata1,dlm=%str(,))"));';
put 'pkCnt=countw("&pk");';
put 'pk="&pk";';
put 'dtvars=compbl("&jsdtvars");';
put 'dttmvars=compbl("&jsdttmvars");';
put 'tmvars=compbl("&jstmvars");';
put 'length coltype $32000;';
put 'coltype=symget(''coltype'');';
put 'loadtype=symget(''loadtype'');';
put 'if trim(symget(''rk_underlying'')) ne '''' then rk_flag=1;';
put 'else rk_flag=0;';
put 'filter_text=symget(''filter_text'');';
put 'if %mf_nobs(work.cls_rules)=0 then cls_flag=0;';
put 'else cls_flag=1;';
put 'put (_all_)(=);';
put 'if "&orig_libds"="&mpelib..MPE_XLMAP_DATA" or &ismap ne 0 then ismap=1;';
put 'else ismap=0;';
put 'run;';
put '/* Extract validation DQ Rules */';
put 'proc sort data=&mpelib..mpe_validations';
put '(where=(&dc_dttmtfmt. le TX_TO';
put 'and BASE_LIB="%scan(&orig_libds,1,.)" and BASE_DS="%scan(&orig_libds,2,.)"';
put 'and rule_active=1))';
put 'out=dqrules (keep=base_col rule_type rule_value);';
put 'by base_col rule_type rule_value;';
put 'run;';
put '/* merge with NOTNULL constraints in the physical table */';
put 'proc sql;';
put 'create table _data_ as';
put 'select * from dqrules';
put 'union';
put 'select upcase(name) as base_col';
put ',''NOTNULL'' as rule_type';
put ','''' as rule_value';
put 'from dictionary.columns';
put 'where upcase(libname)="%scan(&orig_libds,1,.)"';
put 'and upcase(memname)="%scan(&orig_libds,2,.)"';
put 'and upcase(name) in (select name from vars3)';
put 'and notnull=''yes''';
put 'order by 1,2,3;';
put 'data dqrules;';
put 'set &syslast;';
put 'by base_col rule_type rule_value;';
put 'if last.rule_type;';
put 'if rule_type in (''HARDSELECT'',''SOFTSELECT'') and countw(rule_value)=3 then';
put 'do;';
put 'retain x 0; x+1;';
put 'call symputx(cats(''source'',x),rule_value);';
put '%let sourcecnt=0;';
put 'call symputx(''sourcecnt'',x);';
put 'call symputx(cats(''base_col'',x),base_col);';
put 'end;';
put 'run;';
put 'proc sql;';
put 'create table dqdata as';
put 'select distinct base_column as base_col length=32';
put ',upcase(base_column) as rule_value length=74 /* deprecated */';
put ',selectbox_value as rule_data length=1000';
put ',selectbox_order';
put 'from &mpelib..mpe_selectbox';
put 'where &dc_dttmtfmt. lt ver_to_dttm';
put 'and select_lib="%scan(&orig_libds,1,.)"';
put 'and select_ds="%scan(&orig_libds,2,.)";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during DQ rule validation)';
put ')';
put '/* extract selectbox data */';
put '%macro dq_selects();';
put '%local x source lib ds col;';
put '%do x=1 %to &sourcecnt;';
put '%let source=&&source&x;';
put '%let lib=%scan(&source,1,.);';
put '%let ds=%scan(&source,2,.);';
put '%let col=%scan(&source,3,.);';
put '%put &=source;';
put '%put &=lib;';
put '%dc_assignlib(READ,&lib)';
put 'proc sql;';
put 'create table dqdata&x as';
put 'select distinct "&&base_col&x" as base_col length=32';
put ',"&source" as rule_value length=74';
put ',cats(&col) as rule_data length=1000';
put ',&col as tmp_order';
put 'from &lib..&ds';
put 'order by tmp_order;';
put '/* ensure both numerics and char vals are ordered correctly */';
put 'data work.dqdata&x (drop=tmp_order);';
put 'set work.dqdata&x;';
put 'selectbox_order=_n_;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when selecting &&base_col&x from &orig_libds)';
put ')';
put 'proc append base=dqdata data=dqdata&x;run;';
put 'proc sql; drop table dqdata&x;';
put '%end;';
put '%mend dq_selects;';
put '%dq_selects()';
put 'proc sort data=dqdata;';
put '/* order by selectbox_order then the value */';
put 'by base_col selectbox_order rule_data;';
put 'run;';
put '%mp_getmaxvarlengths(work.sasdata1,outds=maxvarlengths)';
put 'data maxvarlengths;';
put 'set maxvarlengths;';
put 'if name=''_____DELETE__THIS__RECORD_____'' then mAXLEN=3;';
put 'run;';
put 'data xl_rules;';
put 'set &mpelib..mpe_excel_config;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(xl_libref)="%scan(&orig_libds,1,.)";';
put 'where also upcase(xl_table)="%scan(&orig_libds,2,.)";';
put 'where also xl_active=1;';
put 'keep xl_column xl_rule;';
put 'run;';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '%mpe_getversions(&mpelib,';
put '%scan(&orig_libds,1,.),';
put '%scan(&orig_libds,2,.),';
put 'outds=versions';
put ')';
put '/* send to the client */';
put '%webout(OPEN)';
put '%webout(OBJ,approvers)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dqdata)';
put '%webout(OBJ,dqrules)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,maxvarlengths)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasdata1,fmt=N,missing=STRING,showmeta=YES,dslabel=sasdata)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,versions)';
put '%webout(OBJ,xl_rules)';
put '%webout(CLOSE)';
put '/*';
put '$N8601Bw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'DATEw';
put 'DATEAMPMw';
put 'DATETIMEw';
put 'DAYw';
put 'DDMMYYw';
put 'DDMMYYxw';
put 'DOWNAMEw';
put 'DTDATEw';
put 'DTMONYYw';
put 'DTWKDATXw';
put 'DTYEARw';
put 'DTYYQCw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put 'HHMMw';
put 'HOURw';
put 'JULDAYw';
put 'JULIANw';
put 'MMDDYYw';
put 'MMDDYYxw';
put 'MMSSw';
put 'MMYYw';
put 'MMYYxw';
put 'MONNAMEw';
put 'MONTHw';
put 'MONYYw';
put 'PDJULGw';
put 'PDJULIw';
put 'QTRw';
put 'QTRRw';
put 'TIMEw';
put 'TIMEAMPMw';
put 'TODw';
put 'WEEKDATEw';
put 'WEEKDATXw';
put 'WEEKDAYw';
put 'WEEKUw';
put 'WEEKVw';
put 'WEEKWw';
put 'WORDDATEw';
put 'WORDDATXw';
put 'YEARw';
put 'YYMMw';
put 'YYMMxw';
put 'YYMMDDw';
put 'YYMMDDxw';
put 'YYMONw';
put 'YYQw';
put 'YYQxw';
put 'YYQRw';
put 'YYQRxw';
put '$N8601BAw';
put '$N8601Ew';
put '$N8601EAw';
put '$N8601EHw';
put '$N8601EXw';
put '$N8601Hw';
put '$N8601Xw';
put 'B8601DAw';
put 'B8601DNw';
put 'B8601DTw';
put 'B8601DZw';
put 'B8601LZw';
put 'B8601TMw';
put 'B8601TZw';
put 'E8601DAw';
put 'E8601DNw';
put 'E8601DTw';
put 'E8601DZw';
put 'E8601LZw';
put 'E8601TMw';
put 'E8601TZw';
put '*/';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getdynamiccolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getdynamiccolvals.sas';
put '@brief Provide dynamic list of values according to a SAS program or service';
put '@details Configuration is made in the MPE_VALIDATIONS table, the dropdown';
put 'can be either a SOFTSELECT_HOOK or HARDSELECT_HOOK.';
put 'Results are sent in ARRAY format for efficiency.';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|VARIABLE_NM:$32.|';
put '|---|---|';
put '|DC258467.MPE_SECURITY|SAS_GROUP|';
put ' SOURCE_ROW
';
put 'This contains the raw values from the source table.';
put ' Service Outputs
';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_getservicecode.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_include.sas';
put '@li mp_validatecol.sas';
put '@li mf_getapploc.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* Validate inputs';
put '*/';
put '%let err_msg=;';
put 'data work.intest;';
put 'set work.SASCONTROLTABLE;';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put '/* validate varname */';
put 'is_name=nvalid(variable_nm,''v7'');';
put 'putlog (_all_)(=);';
put 'if is_libds ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid libds:''!!libds;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else if is_name ne 1 then do;';
put 'msg=''ERR''!!''OR: Invalid name:''!!variable_nm;';
put 'call symputx(''err_msg'',msg);';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''variable_nm'',variable_nm);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after reading work.sascontroltable)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(&err_msg)';
put ')';
put '%dc_assignlib(READ,%scan(&libds,1,.))';
put '/* ensure that work.dynamic_extended_values exists */';
put 'data work.dynamic_extended_values;';
put 'run;';
put '/**';
put '* Get the code to execute';
put '*/';
put 'data work.codetest;';
put 'set &mpelib..MPE_VALIDATIONS;';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and base_lib="%scan(&libds,1,.)"';
put 'and base_ds="%scan(&libds,2,.)"';
put 'and base_col="&variable_nm"';
put 'and RULE_TYPE in (''HARDSELECT_HOOK'',''SOFTSELECT_HOOK'')';
put 'and RULE_ACTIVE=1;';
put 'putlog (_all_)(=);';
put 'if length(rule_value)>1 then do;';
put 'call symputx(''pgmloc'',rule_value);';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'output;';
put 'stop;';
put 'end;';
put 'else stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.codetest)=0)';
put ',mac=&_program';
put ',msg=%str(Hook not found in &mpelib..mpe_validations for &libds..&variable_nm)';
put ')';
put '%macro getdynamiccolvals();';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '%mend getdynamiccolvals;';
put '%getdynamiccolvals()';
put '/* execute the dynamic code */';
put '%mp_include(sascode)';
put '%mp_abort(mode=INCLUDE)';
put '/* ensure that the DISPLAY_INDEX variable exists */';
put 'data work.dynamic_values;';
put 'length DISPLAY_INDEX 8 DISPLAY_VALUE $32767;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_values;';
put 'display_index=coalesce(display_index,_n_);';
put 'keep DISPLAY_INDEX DISPLAY_VALUE RAW_VALUE;';
put 'run;';
put '/* ensure that work.dynamic_extended_values exists with correct types */';
put 'data work.dynamic_extended_values;';
put 'length DISPLAY_INDEX 8 EXTRA_COL_NAME $32 DISPLAY_VALUE $5000 DISPLAY_TYPE $1';
put 'RAW_VALUE_NUM 8 RAW_VALUE_CHAR $5000 FORCED_VALUE 8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.dynamic_extended_values;';
put 'run;';
put '%webout(OPEN)';
put '%webout(ARR,dynamic_values,fmt=N)';
put '%webout(ARR,dynamic_extended_values,fmt=N)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getlog;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getlog.sas';
put '@brief Downloads the submission, useful if there is an error';
put '@details';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mp_dirlist.sas';
put '@li mp_binarycopy.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '/* security checks */';
put '%let user=%mf_getuser();';
put '%let check_access=0;';
put 'proc sql noprint;';
put 'select count(*) into: check_access from &mpelib..mpe_loads';
put 'where csv_dir="&table" and user_nm="&user";';
put '%mp_abort(iftrue= (&check_access=0 )';
put ',msg=%str(&user not authorised to download audit data for &table)';
put ',mac=mpestp_getlog.sas';
put ')';
put 'ods package(ProdOutput) open nopf;';
put 'options notes source2 mprint;';
put '%mp_dirlist(outds=dirs, path=&mpelocapprovals/&TABLE)';
put 'data _null_;';
put 'set dirs;';
put 'if scan(filename,-1,''.'') not in (''sas7bdat'',''wpd'');';
put 'retain str1';
put '"ods package(ProdOutput) add file=''&mpelocapprovals/&TABLE/";';
put 'retain str2 "'' mimetype=''text/plain'' path=''contents/'';";';
put 'call execute(cats(str1,filename,str2));';
put 'run;';
put '%let archive_path=%sysfunc(pathname(work));';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'ods package(ProdOutput) publish archive properties';
put '(archive_name= "&table..zip" archive_path="&archive_path");';
put 'ods package(ProdOutput) close;';
put '/* now serve zip file to client */';
put '%mp_streamfile(contenttype=ZIP';
put ',inloc=%str(&archive_path/&table..zip)';
put ',outname=&table..zip';
put ')';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getsubmits;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getsubmits.sas';
put '@brief Returns a list of staged data items that need to be approved';
put '@details';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y-%0m-%0d %0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put 'proc sql noprint;';
put 'create table work.fromsas (rename=(SUBMITTED_ON=SUBMITTED_ON_DTTM)) as';
put 'select table_id';
put ',cats(base_lib,''.'',base_ds) as base_table';
put ',input_vars';
put ',input_obs';
put ',submitted_by_nm';
put ',submitted_reason_txt';
put ',''DEPRECATED'' as approve_group';
put ',submit_status_cd as review_status_id';
put ',reviewed_by_nm';
put ',reviewed_on_dttm';
put ',cats(put(SUBMITTED_ON_DTTM,yymmddhhmmss.)) as SUBMITTED_ON';
put 'from &mpelib..mpe_submit';
put 'where submitted_by_nm="%mf_getuser()" and submit_status_cd=''SUBMITTED''';
put 'order by submitted_on_dttm desc;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getxlmaps;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getxlmaps.sas';
put '@brief Returns a list of rules and other info for a specific xlmap_id';
put ' Service Inputs
';
put ' getxlmaps_in
';
put '|XLMAP_ID|';
put '|---|';
put '|Sample|';
put ' Service Outputs
';
put ' xlmaprules
';
put 'Filtered output of the dc.MPE_XLMAP_RULES table';
put '|XLMAP_ID|XLMAP_RANGE_ID|XLMAP_SHEET|XLMAP_START|XLMAP_FINISH|';
put '|---|---|---|---|---|';
put '|Sample|Range1|Sheet1|ABSOLUTE A1| |';
put '|Sample|Range2|Sheet1|RELATIVE R[2]C[2]|ABSOLUTE H11|';
put ' xlmapinfo
';
put 'Extra info for a map id';
put '|TARGET_DS|';
put '|---|';
put '|DCXXX.MPE_XLMAP_DATA|';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set work.getxlmaps_in;';
put 'putlog (_all_)(=);';
put 'call symputx(''xlmap_id'',xlmap_id);';
put 'run;';
put 'proc sql noprint;';
put 'create table work.xlmaprules as';
put 'select xlmap_id';
put ',XLMAP_RANGE_ID';
put ',XLMAP_SHEET';
put ',XLMAP_START';
put ',XLMAP_FINISH';
put 'from &mpelib..MPE_XLMAP_RULES';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id"';
put 'order by xlmap_sheet, xlmap_range_id;';
put '%global target_ds;';
put 'select XLMAP_TARGETLIBDS into: target_ds';
put 'from &mpelib..MPE_XLMAP_INFO';
put 'where &dc_dttmtfmt. lt tx_to and xlmap_id="&xlmap_id";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'data work.xlmapinfo;';
put 'target_ds=coalescec("&target_ds","&mpelib..MPE_XLMAP_DATA");';
put 'output;';
put 'stop;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,xlmaprules)';
put '%webout(OBJ,xlmapinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=loadfile;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mp_cleancsv(in=NOTPROVIDED,out=NOTPROVIDED,qchar=''22''x);';
put '%if "&in"="NOTPROVIDED" or "&out"="NOTPROVIDED" %then %do;';
put '%put %str(ERR)OR: Please provide valid input (&in) & output (&out) locations;';
put '%return;';
put '%end;';
put '/* presence of a period(.) indicates a physical location */';
put '%if %index(&in,.) %then %let in="&in";';
put '%if %index(&out,.) %then %let out="&out";';
put '/**';
put '* convert all cr and crlf within quotes to lf';
put '* convert all other cr or lf to crlf';
put '*/';
put 'data _null_;';
put 'infile &in recfm=n ;';
put 'file &out recfm=n;';
put 'retain isq iscrlf 0 qchar &qchar;';
put 'input inchar $char1. ;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'if isq then do;';
put '/* inside a quote change cr and crlf to lf */';
put 'if inchar=''0D''x then do;';
put 'put ''0A''x;';
put 'input inchar $char1.;';
put 'if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else put inchar $char1.;';
put 'end;';
put 'else do;';
put '/* outside a quote, change cr and lf to crlf */';
put 'if inchar=''0D''x then do;';
put 'crblank:';
put 'put ''0D0A''x;';
put 'input inchar $char1.;';
put 'if inchar=''0D''x then do;';
put '/* multiple CR indicates CR formatted file with blank lines */';
put 'goto crblank;';
put 'end;';
put 'else if inchar ne ''0A''x then do;';
put 'put inchar $char1.;';
put 'if inchar=qchar then isq = mod(isq+1,2);';
put 'end;';
put 'end;';
put 'else if inchar=''0A''x then put ''0D0A''x;';
put 'else put inchar $char1.;';
put 'end;';
put 'run;';
put '%mend mp_cleancsv;';
put '/** @endcond */';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file loadfile.sas';
put '@brief Loads a file';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li mp_abort.sas';
put '@li mf_getplatform.sas';
put '@li mf_getuser.sas';
put '@li mf_getvarlist.sas';
put '@li mf_mkdir.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mpe_getgroups.sas';
put '@li mp_lockfilecheck.sas';
put '@li mpe_loader.sas';
put '@li mp_cleancsv.sas';
put '@li mp_binarycopy.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table dlm;';
put '%mpeinit(fetch=NO)';
put '%global _WEBIN_FILENAME1 _WEBIN_FILENAME2';
put '_WEBIN_FILEREF _WEBIN_FILEREF1 _WEBIN_FILEREF2;';
put '%macro load();';
put '%if %mf_getplatform()=SASVIYA %then %do;';
put '%global _webin_fileuri _webin_fileuri1 _webin_fileuri2;';
put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));';
put '%if "&_webin_fileuri1" ne "" %then %do;';
put '%put &=_webin_fileuri1;';
put 'filename sjfref1 filesrvc "&_webin_fileuri1";';
put '%let _WEBIN_FILEREF1=sjfref1;';
put '%end;';
put '%if "&_webin_fileuri2" ne "" %then %do;';
put '%put &=_webin_fileuri2;';
put 'filename sjfref2 filesrvc "&_webin_fileuri2";';
put '%let _WEBIN_FILEREF2=sjfref2;';
put '%end;';
put '%end;';
put '%mend load;';
put '%load()';
put '%let _WEBIN_FILENAME1=%sysfunc(coalescec(&_WEBIN_FILENAME1,&_WEBIN_FILENAME));';
put '%let _WEBIN_FILEREF1=%sysfunc(coalescec(&_WEBIN_FILEREF1,&_WEBIN_FILEREF));';
put '%let abort=0;';
put '/* we do not know if the excel file will be first or second fileref */';
put 'data _null_;';
put 'ext1=upcase(scan(symget(''_WEBIN_FILENAME1''),-1,''.''));';
put 'ext2=upcase(scan(symget(''_WEBIN_FILENAME2''),-1,''.''));';
put 'if ext1=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME1'');';
put 'csvref=symget(''_WEBIN_FILEREF1'');';
put 'xlsname=symget(''_WEBIN_FILENAME2'');';
put 'xlsref=symget(''_WEBIN_FILEREF2'');';
put 'end;';
put 'else if ext2=''CSV'' then do;';
put 'csvname=symget(''_WEBIN_FILENAME2'');';
put 'csvref=symget(''_WEBIN_FILEREF2'');';
put 'xlsname=symget(''_WEBIN_FILENAME1'');';
put 'xlsref=symget(''_WEBIN_FILEREF1'');';
put 'end;';
put 'else call symputx(''abort'',1);';
put 'call symputx(''csvname'',csvname);';
put 'call symputx(''csvref'',csvref);';
put 'call symputx(''xlsname'',xlsname);';
put 'call symputx(''xlsref'',coalescec(xlsref,''0''));';
put 'run;';
put '%mp_abort(iftrue= (&abort=1)';
put ',mac=&_program';
put ',msg=%str(File "&csvname" or "&xlsname" must be a CSV!';
put '(Comma separated with .csv extension))';
put ')';
put '%let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(table)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: table)';
put ')';
put '%let table=%upcase(%trim(&table));';
put '/* load parameters */';
put 'data _null_;';
put 'libds=upcase(symget(''table''));';
put 'call symputx(''orig_libds'',libds);';
put 'call symputx(''orig_lib'',scan(libds,1,''.''));';
put 'call symputx(''orig_ds'',scan(libds,2,''.''));';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '/* check that the user has the requisite access */';
put '%mpe_getgroups(user=&user,outds=groups)';
put 'proc sql;';
put 'create table accesscheck as';
put 'select * from groups';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select sas_group from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="EDIT"';
put 'and (';
put '(libref="&orig_lib" and dsn="&orig_ds")';
put 'or (libref="&orig_lib" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="*ALL*")';
put 'or (libref="*ALL*" and dsn="&orig_ds")';
put '));';
put '%let nobs=;';
put 'select count(*) into: nobs from &syslast;';
put '%mp_abort(iftrue= (&nobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(&user not authorised to load &orig_libds per &mpelib..mpe_security)';
put ')';
put '%dc_assignlib(WRITE,&orig_lib)';
put '%mp_abort(iftrue= (&syscc ge 4)';
put ',mac=loadfile';
put ',msg=%str(Issue assigning library &orig_lib)';
put ')';
put '%global txfrom txto processed rk;';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where libref="&orig_lib" and dsn="&orig_ds";';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'call symputx(''processed'',var_processed);';
put 'if not missing(RK_UNDERLYING) then call symputx(''rk'',buskey);';
put 'run;';
put '%mp_lockfilecheck(libds=&orig_libds)';
put 'data compare;';
put 'set &libds(drop=&txfrom &txto &processed &rk);';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 80)';
put ')';
put '/* get line terminator, assume it''s the first cr, lf, or crlf */';
put 'data _null_;';
put 'length text $32767 term $4;';
put 'call missing (of _all_);';
put 'fid=fopen("&csvref",''I'',32767,''b'');';
put 'rc=fread(fid);';
put 'rc2=fget(fid,text,32767);';
put 'cr=find(text,''0D''x );';
put 'lf=find(text,''0A''x );';
put 'crlf=find(text,''0D0A''x);';
put 'rc=fclose(fid);';
put 'if crlf>0 & cr0 & crlf0 & cr>0 & lf0 then term=''LF'';';
put 'else term=''CR'';';
put 'call symputx(''termstr'',term);';
put 'run;';
put 'data _null_;';
put 'infile &csvref lrecl=32000 dsd termstr=&termstr;';
put 'input;';
put 'length incols_unsorted $32000 dlm $1;';
put 'incols_unsorted=compress(upcase(_infile_),"''"!!''"'');';
put '/* dlm has length 1 so will be the first non alpha / digit char */';
put '/* expectation is that there will not be any crazy characters in first col! */';
put 'dlm=compress(incols_unsorted,''_ '',''ad'');';
put 'incols_unsorted=compress(incols_unsorted,dlm!!''_'',''kado'');';
put 'incols_unsorted=tranwrd(incols_unsorted,dlm,'' '');';
put 'call symputx(''incols_unsorted'',incols_unsorted);';
put 'call symputx(''dlm'',dlm);';
put 'putlog incols_unsorted=;';
put 'putlog dlm=;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc line 99)';
put ')';
put '%let basecols=%upcase(%mf_getvarlist(work.compare,dlm=%str( )));';
put '%let missing_cols=%trim(';
put '%mf_wordsInStr1ButNotStr2(';
put 'Str1=&basecols';
put ',Str2=&incols_unsorted';
put '));';
put '%let msg=';
put 'Expected cols: &basecols';
put 'Received cols: &incols_unsorted';
put 'Missing cols: &missing_cols';
put ';';
put '%mp_abort(iftrue= (%length(%trim(&missing_cols)) > 1 or &syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%superq(msg)';
put ')';
put '%let msg=0;';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder and redirect the log */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* clean embedded line breaks and force CRLF line endings */';
put '%mp_cleancsv(in=&csvref, out=&dir/&orig_libds..csv)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue in mp_cleancsv)';
put ')';
put '%put; %put; %put log is being redirected;';
put '%let url=_program=%substr(&_program';
put ',1,%length(&_program)-8)getlog%nrstr(&)table=&mperef;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%put &url;';
put '%put;';
put '/* proc printto log="&dir/weblog.txt";run; */';
put 'libname approve "&dir";';
put 'options mprint;';
put '%put &=mperef;';
put '%put &=termstr;';
put '%put &=dlm;';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%quote(File upload: %superq(csvname))';
put ',dlm=%superq(dlm)';
put ',url=%superq(url)';
put ',termstr=CRLF';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue= (%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error)) ne 0)';
put ',mac=&_program';
put ',msg=%nrstr(Problem occurred in &sysmacroname (mf_abort.error file found))';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mpestp_loadfile.sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename outref "&dir/BKP_&xlsname";';
put '%mp_binarycopy(iftrue=("&xlsref" ne "0"),inref=&xlsref,outref=outref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc when backing up source file &xlsname)';
put ')';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=restore;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mpe_checkrestore(load_ref,';
put 'outresult=ALLOW_RESTORE,';
put 'outreason=REASON';
put ');';
put '%global &outresult &outreason;';
put '%let &outresult=NO;';
put '%let &outreason=NOTFOUND;';
put '/* check if there is actually a version to restore */';
put '%local chk;';
put '%let chk=0;';
put 'proc sql noprint;';
put 'select count(*) into: chk from &dc_libref..mpe_audit';
put 'where load_ref="&load_ref";';
put '%if &chk=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No entry for &load_ref in MPE_AUDIT;';
put '%return;';
put '%end;';
put '/* grab user groups */';
put '%local user;';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put '/* check if user is admin */';
put '%local is_admin;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from work.groups';
put 'where groupname="&dc_admin_group";';
put '%if &is_admin>0 %then %do;';
put '%let allow_restore=YES;';
put '%let reason=IS ADMIN;';
put '%return;';
put '%end;';
put '/* check if user has basic access */';
put '%local libds;';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&load_ref";';
put '%mpe_accesscheck(&libds,outds=work.access_check';
put ',user=&user';
put ',access_level=EDIT';
put ')';
put '%if %mf_nobs(access_check)=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No access in MPE_TABLES;';
put '%return;';
put '%end;';
put '/* check if user has column level security rules */';
put 'proc sql;';
put 'create table work.cls_rules as';
put 'select *';
put 'from &mpelib..mpe_column_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("EDIT",''ALL'')';
put 'and CLS_ACTIVE=1';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)';
put 'and CLS_LIBREF="%upcase(&base_lib)"';
put 'and CLS_TABLE="%upcase(&base_ds)";';
put '%if %mf_nobs(work.cls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.cls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '/* check if user has row level security rules */';
put 'proc sql;';
put 'create table work.rls_rules as';
put 'select *';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("EDIT",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="&base_lib"';
put 'and rls_table="&base_ds"';
put 'and rls_active=1;';
put '%if %mf_nobs(work.rls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.rls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %do;';
put '%let allow_restore=YES;';
put '%let reason=CHECKS PASSED;';
put '%end;';
put '%mend mpe_checkrestore;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'')';
put 'then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'vlen=varlen(dsid,i);';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put '/**';
put '* there is not much point importing a short length numeric like this,';
put '* eg with best4., as the resulting variable will still be stored as';
put '* length 8. We need a length or format statement to ensure variable';
put '* is creatd with the smaller length...';
put '**/';
put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%local vlen&i;';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '/** @cond */';
put '%macro mp_stripdiffs(libds';
put ',loadref';
put ',difftable';
put ',filtervar=0';
put ',outds=work.mp_stripdiffs';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%let libds=%upcase(&libds);';
put '/* safety checks */';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(SYSCC=&syscc on entry. Clean session required!)';
put ')';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (%mf_islibds(&libds)=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid library.dataset reference - %superq(libds))';
put ')';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 ds5 fref1 filterstr;';
put '%let fref1=%mf_getuniquefileref();';
put '%if &filtervar ne 0 %then %let filterstr=%superq(&filtervar);';
put '%else %let filterstr=%str(1=1);';
put '/* get timestamp of the diff to be reverted */';
put '%local ts;';
put 'proc sql noprint;';
put 'select put(processed_dttm,datetime19.6) into: ts';
put 'from &difftable where load_ref="&loadref";';
put '%mp_abort(iftrue= (&sqlobs=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Load ref %superq(loadref) not found!)';
put ')';
put '/* extract diffs for this base table from this timestamp onwards */';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_diffs));';
put 'create table &ds1 (drop=libref dsn) as';
put 'select * from &difftable';
put 'where upcase(cats(libref))="%scan(&libds,1,.)"';
put 'and upcase(cats(dsn))="%scan(&libds,2,.)"';
put 'and processed_dttm ge "&ts"dt';
put 'order by processed_dttm desc, key_hash, is_pk;';
put '/* extract key values only */';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_pks));';
put '%local keyhash processed;';
put '%let keyhash=%upcase(%mf_getuniquename(prefix=mpsdvar_keyhash));';
put '%let processed=%upcase(%mf_getuniquename(prefix=mpsdvar_processed));';
put 'create table &ds2 as';
put 'select key_hash as &keyhash,';
put 'tgtvar_nm,';
put 'tgtvar_type,';
put 'coalescec(oldval_char,newval_char) as charval,';
put 'coalesce(oldval_num, newval_num) as numval,';
put 'processed_dttm as &processed';
put 'from &ds1';
put 'where is_pk=1';
put 'order by &keyhash, &processed;';
put '/* grab pk values */';
put '%local pk;';
put 'select distinct upcase(tgtvar_nm) into: pk separated by '' '' from &ds2;';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_keychar));';
put 'proc transpose data=&ds2(where=(tgtvar_type=''C''))';
put 'out=&ds3(drop=_name_);';
put 'by &keyhash &processed;';
put 'id TGTVAR_NM;';
put 'var charval;';
put 'run;';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_keynum));';
put 'proc transpose data=&ds2(where=(tgtvar_type=''N''))';
put 'out=&ds4(drop=_name_);';
put 'by &keyhash &processed;';
put 'id TGTVAR_NM;';
put 'var numval;';
put 'run;';
put '/* shorten the lengths */';
put '%mp_ds2squeeze(&ds3,outds=&ds3)';
put '%mp_ds2squeeze(&ds4,outds=&ds4)';
put '/* now merge to get all key values and de-dup */';
put '%let ds5=%upcase(work.%mf_getuniquename(prefix=mpsd_merged));';
put 'data &ds5;';
put 'length &keyhash $32 &processed 8;';
put 'merge &ds3 &ds4;';
put 'by &keyhash &processed;';
put 'if not missing(&keyhash);';
put 'run;';
put 'proc sort data=&ds5 nodupkey;';
put 'by &pk;';
put 'run;';
put '/* join to base table for preliminary stage DS */';
put 'proc sql;';
put 'create table &outds as select "No " as _____DELETE__THIS__RECORD_____';
put '%do x=1 %to %sysfunc(countw(&pk,%str( )));';
put ',a.%scan(&pk,&x,%str( ))';
put '%end;';
put '%local notpkcols;';
put '%let notpkcols=%upcase(%mf_getvarlist(&libds));';
put '%let notpkcols=%mf_wordsinstr1butnotstr2(str1=¬pkcols,str2=&pk);';
put '%do x=1 %to %sysfunc(countw(¬pkcols,%str( )));';
put ',b.%scan(¬pkcols,&x,%str( ))';
put '%end;';
put 'from &ds5 a';
put 'left join &libds (where=(&filterstr)) b';
put 'on 1=1';
put '%do x=1 %to %sysfunc(countw(&pk,%str( )));';
put 'and a.%scan(&pk,&x,%str( ))=b.%scan(&pk,&x,%str( ))';
put '%end;';
put ';';
put '/* create SAS code to apply to stage_ds */';
put 'data _null_;';
put 'set &ds1;';
put 'file &fref1 lrecl=33000;';
put 'length charval $32767;';
put 'if _n_=1 then put ''proc sql noprint;'';';
put 'by descending processed_dttm key_hash is_pk;';
put 'if move_type=''M'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set " @@;';
put 'end;';
put 'if IS_PK=0 then do;';
put 'put " " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'if not last.is_pk then put '','';';
put 'end;';
put 'else do;';
put 'if first.is_pk then put " where 1=1 " @@;';
put 'put " and " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'end;';
put 'else if move_type=''A'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set _____DELETE__THIS__RECORD_____=''Yes'' where 1=1 "@@;';
put 'end;';
put '/* gating if - as only need PK now */';
put 'if is_pk=1;';
put 'put '' AND '' tgtvar_nm ''='' @@;';
put 'cnt=count(newval_char,''"'');';
put 'charval=quote(trim(substr(newval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put newval_num @@;';
put 'end;';
put 'else if move_type=''D'' then do;';
put 'if first.key_hash then do;';
put 'put "update &outds set _____DELETE__THIS__RECORD_____=''No'' " @@;';
put 'end;';
put 'if IS_PK=0 then do;';
put 'put " ," tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'else do;';
put 'if first.is_pk then put " where 1=1 " @@;';
put 'put " and " tgtvar_nm ''='' @@;';
put 'cnt=count(oldval_char,''"'');';
put 'charval=quote(trim(substr(oldval_char,1,32765-cnt)));';
put 'if tgtvar_type=''C'' then put charval @@;';
put 'else put oldval_num @@;';
put 'end;';
put 'end;';
put 'if last.key_hash then put '';'';';
put 'run;';
put '/* apply the modification statements */';
put '%inc &fref1/source2 lrecl=33000;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4, &ds5;';
put 'file &fref1 clear;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'infile &fref1;';
put 'input;';
put 'if _n_=1 then putlog "Contents of SQL adjustments";';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_stripdiffs;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file restore.sas';
put '@brief Restores a data version';
put '@details Only applies if the history is stored in the audit table';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_nobs.sas';
put '@li mp_abort.sas';
put '@li mp_ds2csv.sas';
put '@li mp_stripdiffs.sas';
put '@li mpeinit.sas';
put '@li mpe_checkrestore.sas';
put '@li mpe_loader.sas';
put ' Service Inputs
';
put ' restore_in
';
put '|LOAD_REF:$32|';
put '|---|';
put '|DCXXXXXX|';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let loadref=;';
put 'data _null_;';
put 'set work.restore_in;';
put 'call symputx(''loadref'',load_ref);';
put 'run;';
put '/**';
put '* Check if user has basic access permission to RESTORE the table';
put '*/';
put '%put checking access;';
put '%global allow_restore reason;';
put '%mpe_checkrestore(&loadref,outresult=ALLOW_RESTORE,outreason=REASON)';
put '%mp_abort(iftrue= (&ALLOW_RESTORE ne YES)';
put ',mac=&_program..sas';
put ',msg=%str(Cannot restore because: &reason)';
put ')';
put '/* grab the base DS */';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: tgtds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&loadref";';
put '/* find the audit table */';
put 'select coalescec(audit_libds,"&mpelib..MPE_AUDIT"), loadtype, var_txto';
put 'into: difftable, :loadtype, :txto';
put 'from &mpelib..MPE_TABLES';
put 'where libref="%scan(&tgtds,1,.)"';
put '& dsn="%scan(&tgtds,2,.)"';
put '& &dc_dttmtfmt0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc after stripdiffs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.mp_stripdiffs)=0)';
put ',mac=&_program..sas';
put ',msg=%str(THERE ARE NO DIFFERENCES TO APPLY)';
put ')';
put '/* create a new load ref */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put '/* copy the diffs dataset */';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'if 0 then call missing(_____DELETE__THIS__RECORD_____);';
put 'set work.mp_stripdiffs;';
put 'run;';
put '/* export to csv */';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/%trim(&tgtds).csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=Restoring &loadref';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data work.restore_out;';
put 'loadref="&mperef";';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,restore_out)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=stagedata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mpe_alerts(alert_event=';
put ', alert_lib=';
put ', alert_ds=';
put ', dsid=';
put ');';
put '/* exit if not configured */';
put '%global DC_EMAIL_ALERTS;';
put '%if &DC_EMAIL_ALERTS ne YES %then %do;';
put '%put DCNOTE: Email alerts are not configured;';
put '%put DCNOTE: (dc_email_alerts=&dc_email_alerts in &mpelib..mpe_config);';
put '%return;';
put '%end;';
put '%let alert_event=%upcase(&alert_event);';
put '%let alert_lib=%upcase(&alert_lib);';
put '%let alert_ds=%upcase(&alert_ds);';
put '%let from_user=%mf_getuser();';
put '/* get users TO which the email should be sent */';
put 'proc sql noprint;';
put 'create table work.users as select distinct a.alert_user,';
put 'b.user_displayname,';
put 'b.user_email';
put 'from &mpelib..mpe_alerts';
put '(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_emails';
put '(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on upcase(trim(a.alert_user))=upcase(trim(b.user_name))';
put 'where a.alert_event in ("&alert_event","*ALL*")';
put 'and a.alert_lib in ("&alert_lib","*ALL*")';
put 'and a.alert_ds in ("&alert_ds","*ALL*");';
put '/* ensure the submitter is included on the email */';
put '%local isThere userdisp user_eml;';
put '%let isThere=0;';
put 'select count(*) into: isThere from &syslast where alert_user="&from_user";';
put '%if &isThere=0 %then %do;';
put 'select user_displayname, user_email';
put 'into: userdisp trimmed, :user_eml trimmed';
put 'from &mpelib..mpe_emails';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and user_name="&from_user";';
put 'insert into work.users';
put 'set alert_user="&from_user"';
put ',user_displayname="&userdisp"';
put ',user_email="&user_eml";';
put '%end;';
put '/* if no email / displayname is provided, then extract from metadata */';
put 'data work.emails;';
put 'set work.users;';
put 'length emailuri uri text $256; call missing(emailuri,uri); drop emailuri uri;';
put '/* get displayname */';
put 'text=cats("omsobj:Person?@Name=''",alert_user,"''");';
put 'if metadata_getnobj(text,1,uri)<=0 then do;';
put 'putlog "DCWARN: &from_user not found";';
put 'return;';
put 'end;';
put 'else if user_displayname = '''' then do;';
put 'if metadata_getattr(uri,''DisplayName'',user_displayname)<0 then do;';
put 'putlog ''DCWARN: strange err, no displayname attribute of user URI'';';
put 'end;';
put 'end;';
put 'if index(user_email,''@'') then return;';
put '/* get email from metadata if not in input table */';
put 'if metadata_getnasn(uri,"EmailAddresses",1,emailuri)<=0 then do;';
put 'putlog "DCWARN: " alert_user " has no emails in MPE_EMAILS or metadata!";';
put 'if metadata_getattr(emailuri,"Address",user_email)<0 then do;';
put 'putlog ''DCWARN: Unexpected error! Valid emailURI but no email. Weird.'';';
put 'end;';
put 'end;';
put '/* only keep valid emails */';
put 'if index(user_email,''@'') ;';
put '/* dump contents for debugging */';
put 'if _n_<21 then putlog (_all_)(=);';
put 'run;';
put '%local emails;';
put 'proc sql noprint;';
put 'select quote(trim(user_email)) into: emails separated by '' '' from work.emails;';
put '/* exit if nobody to email */';
put '%if %mf_getattrn(emails,NLOBS)=0 %then %do;';
put '%put NOTE: No alerts configured (mpe_alerts.sas);';
put '%return;';
put '%end;';
put '/* display email options */';
put 'data _null_;';
put 'set sashelp.voption(where=(group=''EMAIL''));';
put 'put optname ''='' setting;';
put 'run;';
put 'filename __out email (&emails)';
put 'subject="Table &alert_lib..&alert_ds has been &alert_event";';
put '%local SUBMITTED_TXT;';
put '%if &alert_event=SUBMITTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_submit;';
put 'where table_id="&dsid" and submit_status_cd=''SUBMITTED'';';
put 'call symputx(''SUBMITTED_TXT'',submitted_reason_txt,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been proposed by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''SUBMITTED_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=APPROVED %then %do;';
put '/* there is no approval message */';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been approved by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put '%else %if &alert_event=REJECTED %then %do;';
put 'data _null_;';
put 'set &mpelib..mpe_review;';
put 'where table_id="&dsid" and review_status_id=''REJECTED'';';
put 'call symputx(''REVIEW_REASON_TXT'',REVIEW_REASON_TXT,''l'');';
put 'run;';
put 'data _null_;';
put 'File __out lrecl=32000;';
put 'put ''Dear user,'';';
put 'put '' '';';
put 'put "Please be advised that a change to table &alert_lib..&alert_ds has "';
put '"been rejected by &from_user on the ''&syshostname'' SAS server.";';
put 'put " ";';
put 'length txt $2048;';
put 'txt=symget(''REVIEW_REASON_TXT'');';
put 'put "Reason provided: " txt;';
put 'put " ";';
put 'put "This is an automated email by Data Controller for SAS. For "';
put '"documentation, please visit https://docs.datacontroller.io";';
put 'run;';
put '%end;';
put 'filename __out clear;';
put '%mend mpe_alerts ;';
put '%macro mpe_xlmapvalidate(mperef,inds,dclib,tgtds);';
put '%local ismap;';
put 'proc sql noprint;';
put 'select count(*) into: ismap';
put 'from &dclib..mpe_xlmap_info';
put 'where XLMAP_TARGETLIBDS="&tgtds" and &dc_dttmtfmt. le TX_TO ;';
put '%if "&tgtds"="&dclib..MPE_XLMAP_DATA" or &ismap>0 %then %do;';
put 'data &inds;';
put 'set &inds;';
put 'LOAD_REF="&mperef";';
put 'run;';
put '%end;';
put '%mend mpe_xlmapvalidate;';
put '%macro mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=%sysfunc(datetime())';
put ',approvals=';
put ',mperef=';
put ',reason_txt=';
put ',mac=mpe_loadfail.sas';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads';
put 'set STATUS=symget(''status'')';
put ', duration=&dur';
put ', processed_dttm=&dc_dttmtfmt.';
put ', approvals = symget(''approvals'')';
put ', reason_txt= symget(''reason_txt'')';
put 'where CSV_DIR="&mperef";';
put '%let syscc=666;';
put '%mp_abort(msg=%superq(status)\n%superq(reason_txt),mac=&mac)';
put '%mend mpe_loadfail;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mv_getfoldermembers(root=/';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=mv_getfolders';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_isblank(&root)=1 %then %let root=/;';
put 'options noquotelenmax;';
put '/* request the client details */';
put '%local fname1 libref1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%if "&root"="/" %then %do;';
put '/* if root just list root folders */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/rootFolders?limit=1000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* first get parent folder id */';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/folders/folders/@item?path=&root";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put 'libname &libref1 JSON fileref=&fname1;';
put '/* now get the followon link to list members */';
put '%local href cnt;';
put '%let cnt=0;';
put 'data _null_;';
put 'length rel href $512;';
put 'call missing(rel,href);';
put 'set &libref1..links;';
put 'if rel=''members'' then do;';
put 'url=cats("''","&base_uri",href,"?limit=10000''");';
put 'call symputx(''href'',url,''l'');';
put 'call symputx(''cnt'',1,''l'');';
put 'end;';
put 'run;';
put '%if &cnt=0 %then %do;';
put '%put NOTE:;%put NOTE- No members found in &root!!;%put NOTE-;';
put '%return;';
put '%end;';
put '%local fname2 libref2;';
put '%let fname2=%mf_getuniquefileref();';
put '%let libref2=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname2 &oauth_bearer';
put 'url=%unquote(%superq(href));';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var";';
put '%end;';
put 'run;';
put 'libname &libref2 JSON fileref=&fname2;';
put 'data &outds;';
put 'length id $36 name $128 uri $64 type $32 description $256;';
put 'if _n_=1 then call missing (of _all_);';
put 'set &libref2..items;';
put 'run;';
put 'filename &fname2 clear;';
put 'libname &libref2 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getfoldermembers;';
put '%macro mv_getjobcode(outref=0,outfile=0';
put ',name=0,path=0';
put ',contextName=SAS Job Execution compute context';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',mdebug=0';
put ');';
put '%local dbg bufsize varcnt fname1 fname2 errmsg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname local entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(iftrue=("&path"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Path not provided)';
put ')';
put '%mp_abort(iftrue=("&name"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job Name not provided)';
put ')';
put '%mp_abort(iftrue=("&outfile"="0" and "&outref"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Output destination (file or fileref) must be provided)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put 'data;run;';
put '%local foldermembers;';
put '%let foldermembers=&syslast;';
put '%mv_getfoldermembers(root=&path';
put ',access_token_var=&access_token_var';
put ',grant_type=&grant_type';
put ',outds=&foldermembers';
put ')';
put '%local joburi;';
put '%let joburi=0;';
put 'data _null_;';
put 'length name uri $512;';
put 'call missing(name,uri);';
put 'set &foldermembers;';
put 'if name="&name" and uri=:''/jobDefinitions/definitions''';
put 'then call symputx(''joburi'',uri);';
put 'run;';
put '%mp_abort(iftrue=("&joburi"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(Job &path/&name not found)';
put ')';
put '/* prepare request*/';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri&joburi";';
put 'headers "Accept"="application/vnd.sas.job.definition+json"';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put ';';
put 'run;';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'infile &fname1;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mp_abort(';
put 'iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200 and &SYS_PROCHTTP_STATUS_CODE ne 201)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let fname2=%mf_getuniquefileref();';
put 'filename &fname2 temp ;';
put '/* cannot use lua IO package as not available in Viya 4 */';
put '/* so use data step to read the JSON until the string `"code":"` is found */';
put 'data _null_;';
put 'file &fname2 recfm=n;';
put 'infile &fname1 lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'retain startwrite 0;';
put 'if startwrite=0 and sourcechar=''"'' then do;';
put 'reentry:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''c'' then do;';
put 'reentry2:';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''o'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''d'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''e'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar='':'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar=''"'' then do;';
put 'putlog ''code found'';';
put 'startwrite=1;';
put 'input sourcechar $ 1. @@;';
put 'end;';
put 'end;';
put 'else if sourcechar=''c'' then goto reentry2;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put 'else if sourcechar=''"'' then goto reentry;';
put 'end;';
put '/* once the `"code":"` string is found, write until unescaped `"` is found */';
put 'if startwrite=1 then do;';
put 'if sourcechar=''\'' then do;';
put 'input sourcechar $ 1. @@;';
put 'if sourcechar in (''"'',''\'') then put sourcechar char1.;';
put 'else if sourcechar=''n'' then put ''0A''x;';
put 'else if sourcechar=''r'' then put ''0D''x;';
put 'else if sourcechar=''t'' then put ''09''x;';
put 'else if sourcechar=''u'' then do;';
put 'length uni $4;';
put 'input uni $ 4. @@;';
put 'sourcechar=unicode(''\u''!!uni);';
put 'put sourcechar char1.;';
put 'end;';
put 'else do;';
put 'call symputx(''errmsg'',"Uncaught escape char: "!!sourcechar,''l'');';
put 'call symputx(''syscc'',99);';
put 'stop;';
put 'end;';
put 'end;';
put 'else if sourcechar=''"'' then stop;';
put 'else put sourcechar char1.;';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=("&syscc"="99")';
put ',mac=mv_getjobcode';
put ',msg=%str(&errmsg)';
put ')';
put '/* export to desired destination */';
put '%if "&outref"="0" %then %do;';
put 'data _null_;';
put 'file "&outfile" lrecl=32767;';
put '%end;';
put '%else %do;';
put 'filename &outref temp;';
put 'data _null_;';
put 'file &outref;';
put '%end;';
put 'infile &fname2;';
put 'input;';
put 'put _infile_;';
put '&dbg. putlog _infile_;';
put 'run;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname exit vars:;';
put '%put _local_;';
put '%end;';
put '%else %do;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'filename &fname2 clear;';
put '%end;';
put '%mend mv_getjobcode;';
put '%macro dc_getservicecode(loc=,outref=);';
put '%local name;';
put '%let name=%scan(&loc,-1,/);';
put '%mv_getjobcode(path=%substr(&loc,1,%length(&loc)-%length(&name)-1)';
put ',name=&name';
put ',outref=&outref';
put ')';
put '%mend dc_getservicecode;';
put '%macro mp_include(fileref';
put ',prefix=_';
put ',opts=SOURCE2';
put ',errds=work.mp_abort_errds';
put ')/*/STORE SOURCE*/;';
put '/* prepare precode */';
put '%local tempref;';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &tempref;';
put 'set sashelp.vextfl(where=(fileref="%upcase(&fileref)"));';
put 'put ''%let _SYSINCLUDEFILEDEVICE='' xengine '';'';';
put 'name=scan(xpath,-1,''/\'');';
put 'put ''%let _SYSINCLUDEFILENAME='' name '';'';';
put 'path=subpad(xpath,1,length(xpath)-length(name)-1);';
put 'put ''%let _SYSINCLUDEFILEDIR='' path '';'';';
put 'put ''%let _SYSINCLUDEFILEFILEREF='' "&fileref;";';
put 'run;';
put '/* prepare the errds */';
put 'data &errds;';
put 'length msg mac $1000;';
put 'call missing(msg,mac);';
put 'iftrue=''1=0'';';
put 'run;';
put '/* include the include */';
put '%inc &tempref &fileref/&opts;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=%str(&_SYSINCLUDEFILEDIR/&_SYSINCLUDEFILENAME)';
put ',msg=%str(syscc=&syscc after executing &_SYSINCLUDEFILENAME)';
put ')';
put 'filename &tempref clear;';
put '%mend mp_include;';
put '%macro mpe_runhook(hookvar);';
put '%local pgmloc pgmtype;';
put '%let pgmtype=0;';
put '%put &sysmacroname: &=hookvar;';
put '%if %length(&&&hookvar)>0 %then %do;';
put '%put &sysmacroname: Executing &&&hookvar;';
put 'data _null_;';
put 'rule_value=symget("&hookvar");';
put 'if scan(upcase(rule_value),-1,''.'')=''SAS'' then do;';
put 'call symputx(''pgmtype'',''PGM'');';
put 'call symputx(''pgmloc'',rule_value);';
put 'end;';
put 'else do;';
put 'apploc="%mf_getapploc()";';
put 'if substr(rule_value,1,1) ne ''/''';
put 'then rule_value=cats(apploc,''/'',rule_value);';
put 'call symputx(''pgmloc'',rule_value);';
put 'call symputx(''pgmtype'',''JOB'');';
put 'end;';
put 'run;';
put '%if &pgmtype=PGM %then %do;';
put 'filename sascode "&pgmloc";';
put '%end;';
put '%else %do;';
put '%dc_getservicecode(loc=&pgmloc';
put ',outref=sascode';
put ')';
put '%end;';
put '/* the below script will need to modify work.STAGING_DS */';
put '%local x; %let x=; /* legacy feature */';
put '%mp_include(sascode)';
put '%end;';
put '%mend mpe_runhook;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_dirlist(path=%sysfunc(pathname(work))';
put ', fref=0';
put ', outds=work.mp_dirlist';
put ', getattrs=NO';
put ', showparent=NO';
put ', maxdepth=0';
put ', level=0 /* The level of recursion to perform. For internal use only. */';
put ')/*/STORE SOURCE*/;';
put '%let getattrs=%upcase(&getattrs)XX;';
put '/* temp table */';
put '%local out_ds;';
put 'data;run;';
put '%let out_ds=%str(&syslast);';
put '/* drop main (top) table if it exists */';
put '%if &level=0 %then %do;';
put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)';
put '%end;';
put 'data &out_ds(compress=no';
put 'keep=file_or_folder filepath filename ext msg directory level';
put ');';
put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80';
put 'ext $20 msg $200 foption $16;';
put 'if _n_=1 then call missing(of _all_);';
put 'retain level &level;';
put '%if &fref=0 %then %do;';
put 'rc = filename(fref, "&path");';
put '%end;';
put '%else %do;';
put 'fref="&fref";';
put 'rc=0;';
put '%end;';
put 'if rc = 0 then do;';
put 'did = dopen(fref);';
put 'if did=0 then do;';
put 'putlog "NOTE: This directory is empty, or does not exist - &path";';
put 'msg=sysmsg();';
put 'put (_all_)(=);';
put 'stop;';
put 'end;';
put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */';
put 'numopts=doptnum(did);';
put 'do i=1 to numopts;';
put 'foption=doptname(did,i);';
put 'if foption=:''Directory'' then i=numopts;';
put 'end;';
put 'directory=dinfo(did,foption);';
put 'rc = filename(fref);';
put 'end;';
put 'else do;';
put 'msg=sysmsg();';
put 'put _all_;';
put 'stop;';
put 'end;';
put 'dnum = dnum(did);';
put 'do i = 1 to dnum;';
put 'filename = dread(did, i);';
put 'filepath=cats(directory,''/'',filename);';
put 'rc = filename(fref2,filepath);';
put 'midd=dopen(fref2);';
put 'dmsg=sysmsg();';
put 'if did > 0 then file_or_folder=''folder'';';
put 'rc=dclose(midd);';
put 'midf=fopen(fref2);';
put 'fmsg=sysmsg();';
put 'if midf > 0 then file_or_folder=''file'';';
put 'rc=fclose(midf);';
put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')';
put 'then file_or_folder=''file'';';
put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';';
put 'else if file_or_folder='''' then file_or_folder=''locked'';';
put 'if file_or_folder=''file'' then do;';
put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);';
put 'if filename = ext then ext = '' '';';
put 'end;';
put 'else do;';
put 'ext='''';';
put 'file_or_folder=''folder'';';
put 'end;';
put 'output;';
put 'end;';
put 'rc = dclose(did);';
put '%if &showparent=YES and &level=0 %then %do;';
put 'filepath=directory;';
put 'file_or_folder=''folder'';';
put 'ext='''';';
put 'filename=scan(directory,-1,''/\'');';
put 'msg='''';';
put 'level=&level;';
put 'output;';
put '%end;';
put 'stop;';
put 'run;';
put '%if %substr(&getattrs,1,1)=Y %then %do;';
put 'data &out_ds;';
put 'set &out_ds;';
put 'length infoname infoval $60 fref $8;';
put 'if _n_=1 then call missing(fref);';
put 'rc=filename(fref,filepath);';
put 'drop rc infoname fid i close fref;';
put 'if file_or_folder=''file'' then do;';
put 'fid=fopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open file:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to foptnum(fid);';
put 'infoname=foptname(fid,i);';
put 'infoval=finfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=fclose(fid);';
put 'end;';
put 'else do;';
put 'fid=dopen(fref);';
put 'if fid le 0 then do;';
put 'msg=sysmsg();';
put 'putlog "Could not open folder:" filepath fid= ;';
put 'sasname=''_MCNOTVALID_'';';
put 'output;';
put 'end;';
put 'else do i=1 to doptnum(fid);';
put 'infoname=doptname(fid,i);';
put 'infoval=dinfo(fid,infoname);';
put 'sasname=compress(infoname, ''_'', ''adik'');';
put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));';
put 'if upcase(sasname) ne ''FILENAME'' then output;';
put 'end;';
put 'close=dclose(fid);';
put 'end;';
put 'run;';
put 'proc sort;';
put 'by filepath sasname;';
put 'proc transpose data=&out_ds out=&out_ds(drop=_:);';
put 'id sasname;';
put 'var infoval;';
put 'by filepath file_or_folder filename ext ;';
put 'run;';
put '%end;';
put 'data &out_ds;';
put 'set &out_ds(where=(filepath ne ''''));';
put 'run;';
put '/**';
put '* The above transpose can mean that some updates create additional columns.';
put '* This necessitates the occasional use of datastep over proc append.';
put '*/';
put '%if %mf_existds(&outds) %then %do;';
put '%local basevars appvars newvars;';
put '%let basevars=%mf_getvarlist(&outds);';
put '%let appvars=%mf_getvarlist(&out_ds);';
put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));';
put '%if &newvars>0 %then %do;';
put 'data &outds;';
put 'set &outds &out_ds;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds force nowarn;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'proc append base=&outds data=&out_ds;';
put 'run;';
put '%end;';
put '/* recursive call */';
put '%if &maxdepth>&level or &maxdepth=MAX %then %do;';
put 'data _null_;';
put 'set &out_ds;';
put 'where file_or_folder=''folder'';';
put '%if &showparent=YES and &level=0 %then %do;';
put 'if filepath ne directory;';
put '%end;';
put 'length code $10000;';
put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"';
put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");';
put 'put code=;';
put 'call execute(code);';
put 'run;';
put '%end;';
put '/* tidy up */';
put 'proc sql;';
put 'drop table &out_ds;';
put '%mend mp_dirlist;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mpe_loader(';
put 'mperef= /* name of subfolder containing the staged data */';
put ',mDebug=0 /* set to 1 for development or debugging */';
put ',submitted_reason_txt= /* populates column of same name in sumo_approvals*/';
put ',approver= /* allows a userid to be provided for direct approval email */';
put ',url= /* optional - url for debugging */';
put ',dlm=%str(,)';
put ',termstr=crlf';
put ',dc_dttmtfmt=E8601DT26.6';
put ');';
put '%put entered mpe_loader from &=_program;';
put '%put &=url;';
put '%put &=termstr;';
put '%put &=dlm;';
put '/* determine full path to CSV directory */';
put '%local now;';
put '%let now=&dc_dttmtfmt;';
put '%put &=now;';
put '/**';
put '* get full path to package (only subdirectory passed through)';
put '*/';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mperef mpelocapprovals)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing: mperef mpelocapprovals)';
put ')';
put '%let csv_dir=%trim(&mpelocapprovals/&mperef);';
put '/* exit if package has already been uploaded */';
put '%local check;';
put 'proc sql noprint;';
put 'select count(*) into: check';
put 'from &mpelib..mpe_loads';
put 'where csv_dir="&mperef";';
put '%if &check %then %do;';
put '%mp_abort(msg=Folder &mperef already has an entry in &mpelib..mpe_loads';
put ',mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* get CSV directory contents */';
put '%mp_dirlist(path=&csv_dir,outds=WORK.getfiles)';
put 'data WORK.csvs;';
put 'set WORK.getfiles;';
put 'if upcase(scan(filename,3,''.''))=''CSV'' then do;';
put 'lib=upcase(scan(filename,1,''.''));';
put 'ds=upcase(scan(filename,2,''.''));';
put 'output;';
put 'end;';
put 'run;';
put '/* get table attributes */';
put 'proc sql noprint;';
put 'create table WORK.sumo_tables as';
put 'select a.filename, b.*';
put 'from WORK.csvs a';
put 'left join &mpelib..mpe_tables b';
put 'on a.lib=b.libref';
put 'and a.ds=b.dsn';
put 'where b.tx_from le &now';
put 'and &now lt b.tx_to;';
put '/* define user as meta user if available */';
put '%local user;';
put '%let user=%mf_getuser();';
put '/* check if there is actually a table to load */';
put '%if %mf_getattrn(WORK.sumo_tables,NLOBS)=0 %then %do;';
put '%let msg=Table not registered in &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=&msg';
put ',now=&now';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put 'proc sql;';
put 'insert into &mpelib..mpe_loads';
put 'set USER_NM="&user"';
put ',STATUS=''IN PROGRESS''';
put ',CSV_dir="&mperef"';
put ',PROCESSED_DTTM=&now';
put ',reason_txt = symget(''submitted_reason_txt'');';
put '/* import CSV */';
put '%let droplist=;';
put '%let attrib=;';
put '%let droplist=;';
put '%let libref=;';
put '%let DS=;';
put '/* get table info */';
put 'data _null_;';
put 'set sumo_tables;';
put 'libds=upcase(cats(libref,''.'',dsn));';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(dsn)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''libds'',libds);';
put 'call symputx(''FNAME'',filename);';
put 'call symputx(''LIBREF'',libref);';
put 'call symputx(''DS'',dsn);';
put 'call symputx(''LOADTYPE'',loadtype);';
put 'call symputx(''BUSKEY'',buskey);';
put 'call symputx(''VAR_TXFROM'',var_txfrom);';
put 'call symputx(''VAR_TXTO'',var_txto);';
put 'call symputx(''VAR_BUSFROM'',var_busfrom);';
put 'call symputx(''VAR_BUSTO'',var_busto);';
put 'call symputx(''VAR_PROCESSED'',var_processed);';
put 'call symputx(''RK_UNDERLYING'',RK_UNDERLYING);';
put 'call symputx(''POST_EDIT_HOOK'',POST_EDIT_HOOK);';
put 'call symputx(''NOTES'',NOTES);';
put 'call symputx(''PK'',coalescec(RK_UNDERLYING,buskey));';
put 'call symputx(''NUM_OF_APPROVALS_REQUIRED'',NUM_OF_APPROVALS_REQUIRED,''l'');';
put 'put (_all_)(=);';
put 'stop;';
put 'run;';
put '%if %length(&ds)=0 %then %do;';
put '%let msg=%str(ERR)OR: Unable to extract record from &mpelib..mpe_tables;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '/* export format catalog */';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* user must have EDIT access to load a table */';
put '%mpe_accesscheck(&orig_libds';
put ',outds=work.sumo_access';
put ',user=&user';
put ',access_level=EDIT )';
put '%put exiting accesscheck;';
put '%if %mf_getattrn(work.sumo_access,NLOBS)=0 %then %do;';
put '%let msg=%str(ERR)OR: User is not authorised to edit &orig_libds!;';
put '%mpe_loadfail(';
put 'status=UNAUTHORISED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%mp_abort(msg=&msg,mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%put now importing: "&csv_dir/&fname" termstr=&termstr;';
put '/* get the variables from the CSV */';
put 'data vars_csv1(index=(idxname=(varnum name)) drop=infile);';
put 'infile "&csv_dir/&fname" lrecl=32767 dsd termstr=&termstr encoding=''utf-8'';';
put 'input;';
put 'length infile $32767;';
put 'infile=compress(_infile_,''"'',);';
put 'infile=compress(infile,"''",);';
put 'format name $32.;';
put 'putlog ''received vars: '' infile;';
put 'call symputx(''received_vars'',infile,''l'');';
put 'do varnum=1 to countw(infile,"&dlm");';
put '/* keep writeable chars */';
put 'name=compress(upcase(scan(infile,varnum)),,''kw'');';
put 'if name ne "_____DELETE__THIS__RECORD_____" then output;';
put 'end;';
put 'stop;';
put 'run;';
put '%put received_vars = &received_vars;';
put '%dc_assignlib(WRITE,&libref)';
put '/* get list of variables and their formats */';
put 'proc contents noprint data=&libds';
put 'out=vars(keep=name type length varnum format:);';
put 'run;';
put 'data vars(keep=name type length varnum format);';
put 'set vars(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'format2=upcase(format2);';
put '/* not interested in transaction or processing dates';
put '(append table must be supplied without them) */';
put 'if name not in ("&VAR_TXFROM","&VAR_TXTO","&VAR_PROCESSED"';
put ',"_____DELETE__THIS__RECORD_____");';
put 'if type2 in (2,6) then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else format=cats(format2,max(formatl,length),''.'');';
put 'type=''char'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if format2=:''DATETIME'' or format2=:''E8601DT'' then do;';
put 'format=''DATETIME19.'';';
put 'end;';
put 'else if format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD''';
put 'or format2=:''E8601DA'' or format2=:''B8601DA''';
put 'then do;';
put 'format=''DATE9.'';';
put 'end;';
put 'else if format2=''BEST'' & formatl=0 then format=cats(''BEST'',length,''.'');';
put '/*';
put 'else if format2=:''DATETIME'' or format2=:''DATE'' or format2=:''DDMMYY''';
put 'or format2=:''MMDDYY'' or format2=:''YYMMDD'' then do;';
put '*date or datetime format so use original ;';
put 'dsid=open("&libref..&ds");';
put 'vnum=varnum(dsid,name);';
put 'format=varfmt(dsid,vnum);';
put 'dsid=close(dsid);';
put 'end;';
put '*/';
put 'else do;';
put 'if formatl=0 then formatl=length;';
put 'format=cats(format2,formatl,''.'',formatd);';
put 'end;';
put 'type=''num'';';
put 'end;';
put 'put (_all_)(=);';
put 'run;';
put '/* build attrib statement */';
put 'data vars_attrib;';
put 'length attrib_statement $32767 type2 $20;';
put 'set vars end=lastobs;';
put 'retain attrib_statement;';
put 'if type=''char'' then type2=''$'';';
put 'str1=catx('' '',name,''length='',cats(type2,length));';
put 'attrib_statement=trim(attrib_statement)!!'' ''!!trim(str1);';
put 'if lastobs then call symputx(''ATTRIB'',attrib_statement,''L'');';
put 'run;';
put '/* build input statement - first get vars in right order';
put 'and join with target formats*/';
put 'proc sql noprint;';
put 'create table vars_csv2 as';
put 'select b.*';
put 'from vars_csv1 a';
put 'left join vars_attrib b';
put 'on a.name=b.name';
put 'order by a.varnum;';
put '/* now build input statement */';
put 'data final_check;';
put 'set vars_csv2 end=lastobs;';
put 'length input_statement $32767 type2 $20 droplist $32767;';
put 'retain input_statement droplist;';
put '/* Build input statement - CATCH EXCEPTIONS HERE!*/';
put 'if name in (''QUOTE_DTTM'') then do;';
put 'name=cats(name,''2'');';
put 'droplist=catx('' '',trim(droplist),name);';
put 'type2=''$20.'';/* converted below */';
put 'end;';
put 'else if type=''char'' then type2=cats(''$CHAR'', length,''.'');';
put 'else if format=''DATE9.'' then type2=''ANYDTDTE.'';';
put 'else if format=''DATETIME19.'' then type2=''ANYDTDTM.'';';
put 'else if format=:''TIME'' then type2=''ANYDTTME.'';';
put 'else if name='''' then do;/* additional vars in input data */';
put 'name=''_____DELETE__THIS__VARIABLE_____'';';
put 'droplist=catx('' '',trim(droplist),''_____DELETE__THIS__VARIABLE_____'');';
put 'type2=''$1.'';';
put 'end;';
put 'else type2=''best32.'';';
put '* else type2=cats(length,''.'');';
put 'input_statement=catx('' '',input_statement,name,'':'',type2);';
put 'if lastobs then do;';
put 'call symputx(''INPUT'', input_statement,''L'');';
put 'if trim(droplist) ne '''' then';
put 'call symputx(''droplist'',"drop "!!droplist!!'';'',''l'');';
put 'end;';
put 'run;';
put '%let mpeloadstop=0;';
put 'data work.STAGING_DS;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767';
put 'firstobs=2 missover termstr=&termstr encoding=''utf-8'';';
put 'attrib &attrib ;';
put 'if _n_=1 then call missing (of _all_);';
put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____ %then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put '%if %index(%quote(&attrib.),UNLIKELY_VAR ) %then %do;';
put '/*UNLIKELY_VAR=input(UNLIKELY_VAR2,ANYDTDTM21.);*/';
put '/* SPECIAL LOGIC FOR SPECIAL VARS */';
put '%end;';
put 'if _error_ ne 0 then do;';
put 'putlog _infile_;';
put 'call symputx(''mpeloadstop'',_n_);';
put 'stop;';
put 'end;';
put '/* remove all blank rows */';
put 'if compress(cats(of _all_),''.'')='' '' then delete;';
put 'run;';
put '%if &mpeloadstop>0 %then %do;';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put '%put redirecting log output to capture return message;';
put '%put currentloc=&logloc;';
put 'filename tmp temp;';
put 'proc printto log=tmp;run;';
put 'data _null_;';
put '&droplist;';
put 'infile "&csv_dir/&fname" dsd dlm="&dlm" lrecl=32767 firstobs=2';
put 'missover termstr=&termstr;';
put 'attrib &attrib ;';
put 'input';
put '%if %scan(%quote(&received_vars),1)=_____DELETE__THIS__RECORD_____';
put '%then %do;';
put '_____DELETE__THIS__RECORD_____: $3.';
put '%end;';
put '&input;';
put 'if _error_ then stop;';
put 'run;';
put '/* get log back */';
put 'proc printto log=&logloc;run;';
put 'data _null_; infile tmp; input; putlog _infile_;run;';
put '/* scan log for invalid data warnings */';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'length msg1 msg2 msg3 msg4 msg5 msg url $32767;';
put 'if index(_infile_,''NOTE: Invalid data for'') then do;';
put 'msg1=_infile_;';
put 'input;';
put 'msg2=_infile_;';
put 'input;';
put 'msg3=_infile_;';
put 'input;';
put 'msg4=_infile_;';
put 'input;';
put 'msg5=_infile_;';
put 'url=symget(''url'');';
put 'msg=catx(''\n'',msg1,msg2,msg3,msg4,msg5,''\n'',url);';
put 'call symputx(''msg'',msg);';
put 'stop;';
put 'end;';
put 'run;';
put '%mpe_loadfail(';
put 'status=FAILED';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* check that the table is unique on PK */';
put 'proc sort data=work.STAGING_DS dupout=work.MPE_DUPS (keep=&pk) nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.MPE_DUPS,NLOBS)>0 %then %do;';
put '%local duplist;';
put 'data _null_;';
put 'set work.mpe_dups;';
put '%do i=1 %to %sysfunc(countw(&pk));';
put '%let iWord=%scan(&pk,&i);';
put 'call symputx(''duplist'',symget(''duplist'')!!';
put '" &iWord="!!cats(&iWord));';
put '%end;';
put 'run;';
put '%let msg=This upload contains duplicates on the Primary Key columns %trim(';
put ')(&pk) \n Please remove the duplicates and try again. %trim(';
put ')\n &duplist \n ;';
put '%mp_abort(msg=%superq(msg),mac=mpe_loader.sas);';
put '%return;';
put '%end;';
put '%if &syscc gt 4 %then %do;';
put '%let msg=SYSCC=&syscc prior to post edit hook (%superq(syserrortext));';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%superq(msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/* If a Complex Excel Upload, needs to have the load ref added to the table */';
put '%mpe_xlmapvalidate(&mperef,work.staging_ds,&mpelib,&orig_libds)';
put '/* Run the Post Edit Hook prior to creation of staging folder */';
put '%mpe_runhook(POST_EDIT_HOOK)';
put '/* stop if err */';
put '%if &syscc gt 4 %then %do;';
put '%let msg=ERR in post edit hook (&post_edit_hook);';
put '%mpe_loadfail(';
put 'status=FAILED - &syscc';
put ',now=&now';
put ',mperef=&mperef';
put ',reason_txt=%quote(&msg)';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '/**';
put '* send to approve process';
put '*/';
put '/* create a dataset key (datetime plus 3 digit random number plus PID) */';
put '/* send dataset to approvals subfolder with same name as subfolder */';
put 'libname approval "&mpelocapprovals/&mperef";';
put 'data approval.&mperef;';
put 'set work.staging_ds;';
put 'run;';
put 'proc export data=approval.&mperef';
put 'outfile="&mpelocapprovals/&mperef/&mperef..csv"';
put 'dbms=csv';
put 'replace;';
put 'run;';
put '/* update the control dataset with relevant info */';
put 'data append_app;';
put 'if 0 then set &mpelib..mpe_submit;/* get formats */';
put 'call missing (of _all_);';
put 'TABLE_ID="&mperef";';
put 'submit_status_cd=''SUBMITTED'';';
put 'submitted_by_nm="%mf_getuser()";';
put 'base_lib="&libref";';
put 'base_ds="&ds";';
put 'submitted_on_dttm=&now;';
put 'submitted_reason_txt=symget(''submitted_reason_txt'');';
put 'input_vars=%mf_getattrn(approval.&mperef,NVARS);';
put 'input_obs=%mf_getattrn(approval.&mperef,NLOBS);';
put 'num_of_approvals_required=&NUM_OF_APPROVALS_REQUIRED;';
put 'num_of_approvals_remaining=&NUM_OF_APPROVALS_REQUIRED;';
put 'reviewed_by_nm='''';';
put 'reviewed_on_dttm=.;';
put 'run;';
put '%mp_lockanytable(LOCK,lib=&mpelib,ds=mpe_submit,';
put 'ref=%str(&mperef update in &_program),';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'proc append base= &mpelib..mpe_submit data=append_app;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=&mpelib,ds=mpe_submit,';
put 'ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put '/* send email to REVIEW members */';
put '%put sending mpe_alerts;';
put '%mpe_alerts(alert_event=SUBMITTED';
put ', alert_lib=&libref';
put ', alert_ds=&ds';
put ', dsid=&mperef';
put ')';
put '/* DISABLE EMAIL FOR NOW';
put '%let b2=REASON: %quote(&submitted_reason_txt);';
put '%local URLNOTES;';
put '%if %length(¬es)>0 %then %let URLNOTES=%quote(%sysfunc(urlencode(¬es)));';
put '%let b3=%str(Click to review / approve: )%trim(';
put ')%str(http://&_srvname:&_srvport&_url?_PROGRAM=/Web/approvals&)%trim(';
put ')TABLEID=&dsid%str(&)BASETABLE=&libref..&ds%str(&)NOTES=&URLNOTES;';
put '%let b4=%str(Reference ID: &mperef);';
put '*/';
put '%put mpe_loader finishing up with syscc=&syscc;';
put '%if &syscc le 4 %then %do;';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'putlog ''Updating mpe_loads with the following query:'';';
put 'putlog "update &mpelib..mpe_loads set STATUS=''SUCCESS''";';
put 'putlog " , duration=" dur;';
put 'putlog " , processed_dttm=" now;';
put 'putlog " , approvals = ''&libref..&ds''";';
put 'putlog " where CSV_DIR=''&mperef'';";';
put 'run;';
put 'proc sql;';
put 'update &mpelib..mpe_loads set STATUS=''SUCCESS''';
put ', duration=&dur';
put ', processed_dttm=&now';
put ', approvals = "&libref..&ds"';
put 'where CSV_DIR="&mperef";';
put '%end;';
put '%else %do;';
put '%mpe_loadfail(';
put 'status="FAILED - &syscc"';
put ',now=&now';
put ',approvals=&libref..&ds';
put ',mperef=&mperef';
put ',dc_dttmtfmt=&dc_dttmtfmt.';
put ')';
put '%return;';
put '%end;';
put '%mend mpe_loader;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mcf_init(func';
put ')/*/STORE SOURCE*/;';
put '%if not (%symexist(SASJS_PREFIX)) %then %do;';
put '%global SASJS_PREFIX;';
put '%let SASJS_PREFIX=SASJS;';
put '%end;';
put '%let func=%upcase(&func);';
put '/* the / character is just a seperator */';
put '%global &sasjs_prefix._FUNCTIONS;';
put '%if %index(&&&sasjs_prefix._FUNCTIONS,&func/)>0 %then %do;';
put '1';
put '%return;';
put '%end;';
put '%else %do;';
put '%let &sasjs_prefix._FUNCTIONS=&&&sasjs_prefix._FUNCTIONS &func/;';
put '0';
put '%end;';
put '%mend mcf_init;';
put '%macro mcf_getfmttype(wrap=NO';
put ',insert_cmplib=DEPRECATED';
put ',lib=WORK';
put ',cat=SASJS';
put ',pkg=UTILS';
put ')/*/STORE SOURCE*/;';
put '%local i var cmpval found;';
put '%if %mcf_init(mcf_getfmttype)=1 %then %return;';
put '%if &wrap=YES %then %do;';
put 'proc fcmp outlib=&lib..&cat..&pkg;';
put '%end;';
put 'function mcf_getfmttype(fmtnm $) $8;';
put 'if substr(fmtnm,1,1)=''$'' then return(''CHAR'');';
put 'else do;';
put '/* extract NAME */';
put 'length fmt $32;';
put 'fmt=scan(fmtnm,1,''.'');';
put 'do while (';
put 'substr(fmt,length(fmt),1) in (''1'',''2'',''3'',''4'',''5'',''6'',''7'',''8'',''9'',''0'')';
put ');';
put 'if length(fmt)=1 then fmt=''W'';';
put 'else fmt=substr(fmt,1,length(fmt)-1);';
put 'end;';
put '/* apply lookups */';
put 'if cats(fmt) in (''DATETIME'',''B8601DN'',''B8601DN'',''B8601DT'',''B8601DT''';
put ',''B8601DZ'',''B8601DZ'',''DATEAMPM'',''DTDATE'',''DTMONYY'',''DTWKDATX'',''DTYEAR''';
put ',''DTYYQC'',''E8601DN'',''E8601DN'',''E8601DT'',''E8601DT'',''E8601DZ'',''E8601DZ'')';
put 'then return(''DATETIME'');';
put 'else if fmt in (''DATE'',''YYMMDD'',''B8601DA'',''B8601DA'',''DAY'',''DDMMYY''';
put ',''DDMMYYB'',''DDMMYYC'',''DDMMYYD'',''DDMMYYN'',''DDMMYYP'',''DDMMYYS'',''DDMMYYx''';
put ',''DOWNAME'',''E8601DA'',''E8601DA'',''JULDAY'',''JULIAN'',''MMDDYY'',''MMDDYYB''';
put ',''MMDDYYC'',''MMDDYYD'',''MMDDYYN'',''MMDDYYP'',''MMDDYYS'',''MMDDYYx'',''MMYY''';
put ',''MMYYC'',''MMYYD'',''MMYYN'',''MMYYP'',''MMYYS'',''MMYYx'',''MONNAME'',''MONTH''';
put ',''MONYY'',''PDJULG'',''PDJULI'',''QTR'',''QTRR'',''WEEKDATE'',''WEEKDATX'',''WEEKDAY''';
put ',''WEEKU'',''WEEKV'',''WEEKW'',''WORDDATE'',''WORDDATX'',''YEAR'',''YYMM'',''YYMMC''';
put ',''YYMMD'',''YYMMDDB'',''YYMMDDC'',''YYMMDDD'',''YYMMDDN'',''YYMMDDP'',''YYMMDDS''';
put ',''YYMMDDx'',''YYMMN'',''YYMMP'',''YYMMS'',''YYMMx'',''YYMON'',''YYQ'',''YYQC'',''YYQD''';
put ',''YYQN'',''YYQP'',''YYQR'',''YYQRC'',''YYQRD'',''YYQRN'',''YYQRP'',''YYQRS'',''YYQRx''';
put ',''YYQS'',''YYQx'',''YYQZ'') then return(''DATE'');';
put 'else if fmt in (''TIME'',''B8601LZ'',''B8601LZ'',''B8601TM'',''B8601TM'',''B8601TZ''';
put ',''B8601TZ'',''E8601LZ'',''E8601LZ'',''E8601TM'',''E8601TM'',''E8601TZ'',''E8601TZ''';
put ',''HHMM'',''HOUR'',''MMSS'',''TIMEAMPM'',''TOD'') then return(''TIME'');';
put 'else return(''NUM'');';
put 'end;';
put 'endsub;';
put '%if &wrap=YES %then %do;';
put 'quit;';
put '%end;';
put '/* insert the CMPLIB if not already there */';
put '%let cmpval=%sysfunc(getoption(cmplib));';
put '%let found=0;';
put '%do i=1 %to %sysfunc(countw(&cmpval,%str( %(%))));';
put '%let var=%scan(&cmpval,&i,%str( %(%)));';
put '%if &var=&lib..&cat %then %let found=1;';
put '%end;';
put '%if &found=0 %then %do;';
put 'options insert=(CMPLIB=(&lib..&cat));';
put '%end;';
put '%mend mcf_getfmttype;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_ds2csv(ds';
put ',dlm=COMMA';
put ',outref=0';
put ',outfile=';
put ',outencoding=0';
put ',headerformat=LABEL';
put ',termstr=CRLF';
put ')/*/STORE SOURCE*/;';
put '%local outloc delim i varlist var vcnt vat dsv vcom vmiss fmttype vfmt;';
put '%if not %sysfunc(exist(&ds)) %then %do;';
put '%put %str(WARN)ING: &ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&ds,.)=0 %then %let ds=WORK.&ds;';
put '%if &outencoding=0 %then %let outencoding=;';
put '%else %let outencoding=encoding=&outencoding;';
put '%if &outref=0 %then %let outloc=&outfile;';
put '%else %let outloc=&outref;';
put '%if &headerformat=SASJS %then %do;';
put '%let delim=",";';
put '%let termstr=CRLF;';
put '%mcf_getfmttype(wrap=YES)';
put '%end;';
put '%else %if &dlm=COMMA %then %let delim=",";';
put '%else %let delim=";";';
put '/* credit to mjsq - https://stackoverflow.com/a/55642267 */';
put '/* first get headers */';
put 'data _null_;';
put 'file &outloc &outencoding lrecl=32767 termstr=&termstr;';
put 'length header $ 2000 varnm vfmt $32 dlm $1 fmttype $8;';
put 'call missing(of _all_);';
put 'dsid=open("&ds.","i");';
put 'num=attrn(dsid,"nvars");';
put 'dlm=&delim;';
put 'do i=1 to num;';
put 'varnm=upcase(varname(dsid,i));';
put 'if i=num then dlm='''';';
put '%if &headerformat=NAME %then %do;';
put 'header=cats(varnm,dlm);';
put '%end;';
put '%else %if &headerformat=LABEL %then %do;';
put 'header = cats(coalescec(varlabel(dsid,i),varnm),dlm);';
put '%end;';
put '%else %if &headerformat=SASJS %then %do;';
put 'vlen=varlen(dsid,i);';
put 'if vartype(dsid,i)=''C'' then header=cats(varnm,'':$char'',vlen,''.'');';
put 'else do;';
put 'vfmt=coalescec(varfmt(dsid,i),''0'');';
put 'fmttype=mcf_getfmttype(vfmt);';
put 'if fmttype=''DATE'' then header=cats(varnm,'':date9.'');';
put 'else if fmttype=''DATETIME'' then header=cats(varnm,'':E8601DT26.6'');';
put 'else if fmttype=''TIME'' then header=cats(varnm,'':TIME12.'');';
put '/**';
put '* there is not much point importing a short length numeric like this,';
put '* eg with best4., as the resulting variable will still be stored as';
put '* length 8. We need a length or format statement to ensure variable';
put '* is creatd with the smaller length...';
put '**/';
put 'else if vlen<8 then header=cats(varnm,'':best'',vlen,''.'');';
put 'else header=cats(varnm,'':best.'');';
put 'end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Invalid headerformat value (&headerformat);';
put '%return;';
put '%end;';
put 'put header @;';
put 'end;';
put 'rc=close(dsid);';
put 'run;';
put '%let varlist=%mf_getvarlist(&ds);';
put '%let vcnt=%sysfunc(countw(&varlist));';
put '/**';
put '* The $quote modifier (without a width) will take the length from the variable';
put '* and increase by two. However this will lead to truncation where the value';
put '* contains double quotes (which are doubled up). To get around this, scan the';
put '* data to see the max number of double quotes, so that the appropriate width';
put '* can be applied in the subsequent step.';
put '*/';
put 'data _null_;';
put 'set &ds end=last;';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%local vlen&i;';
put '%if %mf_getvartype(&ds,&var)=C %then %do;';
put '%let dsv1=%mf_getuniquename(prefix=csvcol1_);';
put '%let dsv2=%mf_getuniquename(prefix=csvcol2_);';
put 'retain &dsv1 0;';
put '&dsv2=length(&var)+countc(&var,''"'');';
put 'if &dsv2>&dsv1 then &dsv1=&dsv2;';
put 'if last then call symputx(';
put '"vlen&i"';
put '/* should be no shorter than varlen, and no longer than 32767 */';
put ',cats(''$quote'',min(&dsv1+2,32767),''.'')';
put ',''l''';
put ');';
put '%end;';
put '%end;';
put '%let vat=@;';
put '%let vcom=&delim;';
put '%let vmiss=%mf_getuniquename(prefix=csvcol3_);';
put '/* next, export data */';
put 'data _null_;';
put 'set &ds.;';
put 'file &outloc mod dlm=&delim dsd &outencoding lrecl=32767 termstr=&termstr;';
put 'if _n_=1 then &vmiss='' '';';
put '%do i=1 %to &vcnt;';
put '%let var=%scan(&varlist,&i);';
put '%if &i=&vcnt %then %do;';
put '%let vat=;';
put '%let vcom=;';
put '%end;';
put '%if %mf_getvartype(&ds,&var)=N %then %do;';
put '%if &headerformat = SASJS %then %do;';
put '%let vcom=&delim;';
put '%let fmttype=%sysfunc(mcf_getfmttype(%mf_getvarformat(&ds,&var)0));';
put '%if &fmttype=DATE %then %let vfmt=DATE9.;';
put '%else %if &fmttype=DATETIME %then %let vfmt=E8601DT26.6;';
put '%else %if &fmttype=TIME %then %let vfmt=TIME12.;';
put '%else %do;';
put '%let vfmt=;';
put '%let vcom=;';
put '%end;';
put '%end;';
put '%else %let vcom=;';
put '/* must use period - in order to work in both 9.4 and Viya 3.5 */';
put 'if missing(&var) and &var ne %sysfunc(getoption(MISSING)) then do;';
put '&vmiss=cats(''.'',&var);';
put 'put &vmiss &vat;';
put 'end;';
put 'else put &var &vfmt &vcom &vat;';
put '%end;';
put '%else %do;';
put '%if &i ne &vcnt %then %let vcom=&delim;';
put 'put &var &&vlen&i &vcom &vat;';
put '%end;';
put '%end;';
put 'run;';
put '%mend mp_ds2csv;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sends a changeset to staging area';
put '@details This is the service that is called when submitting a new edit.';
put ' Service Inputs
';
put ' jsdata
';
put 'This is the staged data table, plus an _____DELETE__THIS__RECORD_____ column';
put ' SASControlTable
';
put '|ACTION:$char4.|MESSAGE:$char1.|LIBDS:$char19.|';
put '|---|---|---|';
put '|LOAD|User-Provided message|LIBREF.DATASET_NAME|';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mf_nobs.sas';
put '@li dc_assignlib.sas';
put '@li mf_verifymacvars.sas';
put '@li mf_mkdir.sas';
put '@li mf_getuniquefileref.sas';
put '@li mpe_loader.sas';
put '@li mpe_filtermaster.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_ds2csv.sas';
put '@li mf_getplatform.sas';
put '@li removecolsfromwork.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global approver; %let approver=;';
put '%global libref; %let libref=;';
put '%global dsn; %let dsn=;';
put '%global user; %let user=;';
put '%let user=%mf_getuser();';
put '/* load parameters */';
put 'data _null_;';
put 'set work.sascontroltable;';
put 'call symputx(''action'',action);';
put 'call symputx(''message'',message);';
put 'libds=upcase(libds);';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'libds=''work.fmtextract'';';
put 'call symputx(''libds'',libds);';
put 'is_fmt=1;';
put 'end;';
put 'else call symputx(''libds'',libds);';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/* stream back meta info, further jquery calls will return col metadata and';
put 'actual data */';
put '%let libref=%upcase(%scan(&libds,1,.));';
put '%let dsn=%upcase(%scan(&libds,2,.));';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc - unable to assign library &libref)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(mpelocapprovals libds)=0)';
put ',mac=&_program';
put ',msg=%str(Missing: mpelocapprovals libds)';
put ')';
put '%put Verify that the upload does not violate Row Level Security checks:;';
put '%mpe_filtermaster(ULOAD,&libds,';
put 'dclib=&mpelib,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc during filtering process)';
put ')';
put '/* prepare inverse query */';
put '%let tempref=%mf_getuniquefileref();';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'file &tempref;';
put 'if _n_=1 then put ''where not('';';
put 'input;';
put 'put _infile_;';
put 'if eof then put '')'';';
put 'run;';
put '/* apply the query */';
put 'data work.badrecords;';
put 'set work.jsdata;';
put '%inc &tempref/source2;;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.badrecords)>0)';
put ',mac=&_program';
put ',msg=%str(';
put 'Security Problem - %mf_nobs(work.badrecords) unauthorised records submitted';
put ')';
put ')';
put 'PROC FORMAT;';
put 'picture yymmddhhmmss other=''%0Y%0m%0d_%0H%0M%0S'' (datatype=datetime);';
put 'RUN;';
put '/**';
put '* Create package folder and redirect the log';
put '*/';
put '/* create a dataset key (datetime plus 6 digit random number plus PID) */';
put '%let mperef=DC%left(%sysfunc(datetime(),B8601DT19.3))_%substr(';
put '%sysfunc(ranuni(0)),3,6)_%substr(%str(&sysjobid ),1,4);';
put '/* get web url */';
put '%global url;';
put '%let url=localhost/SASStoredProcess;';
put '%let platform=%mf_getplatform();';
put '%put &=platform;';
put 'data _null_;';
put 'length url $128;';
put '%macro stagedata();';
put '%if &platform=SASVIYA %then %do;';
put 'if symexist(''_baseurl'') then do;';
put 'url=symget(''_baseurl'');';
put 'if subpad(url,length(url)-9,9)=''SASStudio''';
put 'then url=substr(url,1,length(url)-11);';
put 'else url="&systcpiphostname/SASJobExecution";';
put 'end;';
put 'else url="&systcpiphostname/SASJobExecution";';
put '%end;';
put '%else %if &platform=SASMETA %then %do;';
put 'rc=METADATA_GETURI("Stored Process Web App",url);';
put '%end;';
put '%mend stagedata;';
put '%stagedata()';
put 'call symputx(''url'',url);';
put 'putlog url=;';
put 'run;';
put '/* Create package folder */';
put '%let dir=&mpelocapprovals/&mperef;';
put '%mf_mkdir(&dir)';
put '/* redirect the log */';
put '%put; %put; %put log is being redirected;';
put '%put to retrieve, visit this url:; %put;%put;';
put '%let url=&url?_program=%substr(&_program';
put ',1,%length(&_program)-9)getlog%str(&)table=&mperef;';
put '%put &url;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to log redirection)';
put ')';
put 'proc printto log="&dir/weblog.txt";run;';
put 'options notes mprint;';
put 'libname approve "&dir";';
put '/* take copy of webin file */';
put 'data _null_;';
put 'if symexist(''_WEBIN_FILEREF1'') then ref=symget(''_WEBIN_FILEREF1'');';
put 'else if symexist(''sasjs_tables'') then ref=''0ref''; /* no fileref created */';
put 'else ref=''indata1'';';
put 'call symputx(''ref'',ref);';
put 'putlog ref=;';
put 'run;';
put '%mp_binarycopy(inref=&ref,outloc="&dir/_WEBIN_FILEREF1.txt",iftrue=&ref ne 0ref)';
put '/* take copy of macvars */';
put 'data _null_;';
put 'file "&dir/macvars.sas";';
put 'set sashelp.vmacro;';
put 'where scope=''GLOBAL'';';
put 'put ''%let '' name ''='' value '';'';';
put 'run;';
put 'data approve.jsdset;';
put 'length _____DELETE__THIS__RECORD_____ $3;';
put 'set jsdata;';
put 'run;';
put '/**';
put '* mf_getvarXXX functions will fail if the target is locked - so take a copy';
put '* and reference that (this will also explicitly throw the lock situation)';
put '*/';
put '%let dscopy=work.dscopy;';
put 'data &dscopy;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Issue getting lock on &libds)';
put ')';
put '%mp_ds2csv(approve.jsdset';
put ',dlm=COMMA';
put ',outfile="&dir/&orig_libds..csv"';
put ',outencoding="UTF-8"';
put ',headerformat=NAME';
put ',termstr=CRLF';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc when writing the CSV)';
put ')';
put '%mpe_loader(mperef=&mperef';
put ',submitted_reason_txt=%superq(message)';
put ',approver=%quote(%trim(&approver))';
put ',url=%superq(url)';
put ',dc_dttmtfmt=&dc_dttmtfmt';
put ')';
put '%mp_abort(mode=INCLUDE)';
put '%mp_abort(';
put 'iftrue=(%sysfunc(fileexist(%sysfunc(pathname(work))/mf_abort.error))=1)';
put ',mac=&_program..sas';
put ',msg=%str(mf_abort.error=1)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/* send relevant SUCCESS values */';
put 'data sasparams;';
put 'STATUS=''SUCCESS'';';
put 'DSID="&mperef";';
put 'url="&url";';
put 'run;';
put '%removecolsfromwork(___TMP___MD5)';
put '%webout(OPEN)';
put '%webout(OBJ,sasparams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/hooks;
%let service=mpe_column_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_COLUMN_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming column_level_security settings to ensure';
put 'each individual filter is valid';
put '**/';
put '/* check scope values and ensure uppercasing */';
put '%let errflag=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'cls_scope=upcase(cls_scope);';
put 'CLS_LIBREF=upcase(CLS_LIBREF);';
put 'cls_table=upcase(CLS_TABLE);';
put 'CLS_VARIABLE_NM=upcase(CLS_VARIABLE_NM);';
put 'if cls_scope not in (''ALL'',''VIEW'',''EDIT'') then do;';
put 'call symputx(''errflag'',1);';
put 'call symputx(''errmsg'',"Invalid scope: "!!cls_scope);';
put 'stop;';
put 'end;';
put 'if cls_hide<1 then cls_hide=0;';
put 'else cls_hide=1;';
put 'if CLS_ACTIVE<1 then CLS_ACTIVE=0;';
put 'else CLS_ACTIVE=1;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_column_level_security_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_row_level_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_ROW_LEVEL_SECURITY table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming row_level_security settings to ensure';
put 'each individual filter is';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mp_filtercheck.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/* ignore scope and group for validation */';
put 'proc sql;';
put 'create table work.batches as';
put 'select distinct upcase(rls_libref) as rls_libref,';
put 'upcase(rls_table) as rls_table,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from work.staging_ds';
put 'where rls_active=1';
put 'order by rls_libref, rls_table;';
put '%let cnt=0;';
put 'data _null_;';
put 'set work.batches;';
put 'by rls_libref rls_table;';
put 'putlog (_all_)(=);';
put 'if last.rls_table then do;';
put 'x+1;';
put 'call symputx(cats(''libds'',x),cats(rls_libref,''.'',rls_table));';
put 'call symputx(''cnt'',x);';
put 'end;';
put 'run;';
put '%macro quickloop();';
put '%do i=1 %to &cnt;';
put 'data work.inds&i;';
put 'set work.batches;';
put 'if cats(rls_libref,''.'',rls_table)="&&libds&i";';
put 'keep group_logic subgroup_logic subgroup_id variable_nm operator_nm';
put 'raw_value;';
put 'run;';
put '%dc_assignlib(READ,%scan(&&libds&i,1,.))';
put '%mp_filtercheck(work.inds&i';
put ',targetds=&&libds&i';
put ',outds=work.badrecords';
put ',abort=YES';
put ')';
put '%end;';
put '%mend quickloop;';
put '%quickloop()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_security_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_SECURITY table';
put '@details Post edit hooks provide additional backend validation against';
put 'user-sourced data. The incoming dataset is always `work.staging_ds` and this';
put 'file is included from the mpe_loader.sas macro.';
put 'Available (at runtime) macro variables:';
put '@li DC_LIBREF - The DC control library for your site';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put '/* ensure upcase and check access level values*/';
put '%let errval=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'ACCESS_LEVEL=upcase(ACCESS_LEVEL);';
put 'if ACCESS_LEVEL not in (''EDIT'',''APPROVE'',''VIEW'',''SIGNOFF'',''AUDIT'') then do;';
put 'putlog "ERR" +(-1) "OR: invalid ACCESS_LEVEL - " access_level;';
put 'call symputx(''errval'',1);';
put 'call symputx(''errmsg'',"Invalid ACCESS_LEVEL: "!!access_level);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errval=1)';
put ',mac=mpe_security_postedit.sas';
put ',msg=%str(&errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_TABLES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks MPE_TABLES to ensure modified / added records are';
put 'valid. If a non-default AUDIT_LIBDS is being used, there is also a check';
put 'to ensure that this table already exists.';
put '**/';
put '%let errmsg=;';
put '%let errflag=0;';
put '/* ensure uppercasing */';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'LIBREF=upcase(LIBREF);';
put 'DSN=upcase(DSN);';
put 'loadtype=upcase(loadtype);';
put 'buskey=upcase(buskey);';
put 'var_txfrom=upcase(var_txfrom);';
put 'var_txto=upcase(var_txto);';
put 'var_busfrom=upcase(var_busfrom);';
put 'var_busto=upcase(var_busto);';
put 'var_processed=upcase(var_processed);';
put 'close_vars=upcase(close_vars);';
put 'audit_libds=upcase(audit_libds);';
put 'rk_underlying=upcase(rk_underlying);';
put '/* check for valid loadtype */';
put 'if LOADTYPE not in (''UPDATE'',''TXTEMPORAL'',''FORMAT_CAT'',''BITEMPORAL'',''REPLACE'')';
put 'then do;';
put 'call symputx(''errmsg'',"Invalid LOADTYPE: "!!LOADTYPE);';
put 'call symputx(''errflag'',1);';
put 'end;';
put '/* force correct BUSKEY and DSN when loading format catalogs */';
put 'if LOADTYPE=''FORMAT_CAT'' then do;';
put 'BUSKEY=''TYPE FMTNAME FMTROW'';';
put 'DSN=scan(dsn,1,''-'')!!''-FC'';';
put 'end;';
put '/* convert tabs into spaces */';
put 'buskey=translate(buskey," ","09"x);';
put 'rk_underlying=translate(rk_underlying," ","09"x);';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '/* get distinct list of audit libs */';
put 'proc sql;';
put 'create table work.liblist as';
put 'select distinct audit_libds';
put 'from work.staging_ds';
put 'where audit_libds not in ('''',''0'', "&dc_libref..MPE_AUDIT")';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put '/* assign the libs */';
put 'data _null_;';
put 'set work.liblist;';
put 'call symputx(cats(''lib'',_n_),audit_libds);';
put 'libref=scan(audit_libds,1,''.'');';
put 'call execute(''%dc_assignlib(WRITE,''!!libref!!'')'');';
put 'run;';
put '/* check the audit tables exist */';
put 'data _null_;';
put 'set work.liblist;';
put 'if exist(audit_libds,"DATA")=0 then do;';
put 'call symputx(''errmsg'',';
put '"Audit Table "!!audit_libds!!" does not exist, or could not be assigned."';
put ');';
put 'call symputx(''errflag'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&errflag=1)';
put ',mac=mpe_tables_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_validations_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_VALIDATIONS table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put 'This validation checks the incoming mpe_validations settings to ensure';
put 'there are no columns that have both HARDSELECT_HOOK and SOFTSELECT_HOOK.';
put ' SAS Macros
';
put '@li mf_nobs.sas';
put ' Related Macros
';
put '@li mpe_loader.sas';
put '**/';
put '/** check to avoid a colum having both HARDSELECT_HOOK and SOFTSELECT_HOOK */';
put '/* need to merge with base table in the case of a single row being added */';
put '%global src_list1 src_list2;';
put '%let src_list1='''';';
put 'proc sql noprint;';
put 'create table work.check1 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from work.staging_ds';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and upcase(_____DELETE__THIS__RECORD_____) ne "YES";';
put 'select distinct cats(source) into: src_list1 separated by '',''';
put 'from work.check1;';
put 'create table work.check2 as';
put 'select quote(catx(''.'',base_lib,base_ds,base_col)) as source';
put ',rule_type';
put 'from &DC_LIBREF..MPE_VALIDATIONS';
put 'where rule_type in (''SOFTSELECT_HOOK'',''HARDSELECT_HOOK'')';
put 'and &dc_dttmtfmt. lt tx_to';
put 'and catx(''.'',base_lib,base_ds,base_col) in (&src_list1);';
put 'create table work.check3 as';
put 'select * from work.check1';
put 'union';
put 'select * from work.check2;';
put 'create table work.validation_checker as';
put 'select source';
put ',count(*) as cnt';
put 'from work.check3';
put 'group by 1';
put 'having cnt>1;';
put 'select distinct source into: src_list2 from work.validation_checker;';
put 'data _null_;';
put 'set work.validation_checker;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= (%mf_nobs(work.validation_checker)>0)';
put ',mac=mpe_validations_postedit';
put ',msg=%str(The following vars have duplicate HOOKS: &src_list2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_info_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_INFO table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvarlist.sas';
put '@li mf_wordsinstr1butnotstr2.sas';
put '@li dc_assignlib.sas';
put '@li mp_validatecol.sas';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* apply the first excel map to all cells */';
put 'length tgtds $41;';
put 'retain tgtds;';
put 'drop tgtds is_libds;';
put 'if _n_=1 then do;';
put 'if missing(XLMAP_TARGETLIBDS) then tgtds="&dc_libref..MPE_XLMAP_DATA";';
put 'else tgtds=upcase(XLMAP_TARGETLIBDS);';
put '%mp_validatecol(XLMAP_TARGETLIBDS,LIBDS,is_libds)';
put 'call symputx(''tgtds'',tgtds);';
put 'call symputx(''is_libds'',is_libds);';
put 'end;';
put 'XLMAP_TARGETLIBDS=tgtds;';
put 'run;';
put '%mp_abort(iftrue=(&is_libds ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Invalid target dataset (&tgtds)';
put ')';
put '/**';
put '* make sure that the supplied target dataset exists and';
put '* has the necessary columns';
put '*/';
put '%dc_assignlib(READ,%scan(&tgtds,1,.))';
put '%mp_abort(iftrue=(%mf_existds(libds=&tgtds) ne 1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=Target dataset (&tgtds) could not be opened';
put ')';
put '%let tgtvars=%upcase(%mf_getvarlist(&tgtds));';
put '%let srcvars=%upcase(%mf_getvarlist(&dc_libref..MPE_XLMAP_DATA));';
put '%let badvars1=%mf_wordsInStr1ButNotStr2(Str1=&srcvars,Str2=&tgtvars);';
put '%let badvars2=%mf_wordsInStr1ButNotStr2(Str1=&tgtvars,Str2=&srcvars);';
put '%mp_abort(iftrue=(%length(&badvars1.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has missing vars: &badvars1)';
put ')';
put '%mp_abort(iftrue=(%length(&badvars2.X)>1)';
put ',mac=mpe_xlmap_info_postedit';
put ',msg=%str(Target dataset (&tgtds) has unrecognised vars: &badvars2)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_xlmap_rules_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Post Edit Hook script for the MPE_XLMAP_RULES table';
put '@details Post edit hooks provide additional backend validation for user';
put 'provided data. The incoming dataset is named `work.staging_ds` and is';
put 'provided in mpe_loader.sas.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The dataset being edited';
put '**/';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put '/* ensure uppercasing */';
put 'XLMAP_ID=upcase(XLMAP_ID);';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postapprove;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program (sample_xlmap_data_postapprove)';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li LOAD_REF - The Load Reference (unique upload id)';
put '@li ORIG_LIBDS - The target library.dataset that was just loaded';
put '**/';
put 'data _null_;';
put 'set work.staging_ds;';
put 'putlog ''load ref is in the staged data: '' load_ref;';
put 'stop;';
put 'run;';
put '%put the unique identifier (LOAD_REF) is also a macro variable: &LOAD_REF;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sample_xlmap_data_postedit;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Sample XLMAP Data hook program';
put '@details This hook script should NOT be modified in place, as the changes';
put 'would be lost in your next Data Controller deployment.';
put 'Instead, create a copy of this hook script and place it OUTSIDE the';
put 'Data Controller metadata folder.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBREF - The library of the dataset being edited (is assigned)';
put '@li DS - The target dataset being loaded';
put '**/';
put '%let abort=0;';
put '%let errmsg=;';
put 'data work.staging_ds;';
put 'set work.staging_ds;';
put 'length errmsg $1000;';
put 'drop err:;';
put '/* KM1 validations */';
put 'if XLMAP_ID=''BASEL-KM1'' then do;';
put 'if XLMAP_RANGE_ID=''KM1:a'' & input(value_txt,8.)<100 then do;';
put 'errmsg=''Should be greater than 100'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* CR2 Validations */';
put 'if XLMAP_ID=''BASEL-CR2'' then do;';
put 'if XLMAP_RANGE_ID=''CR2-sec1'' & row_no=3 & input(value_txt,8.)>0 then do;';
put 'errmsg=''Should be negative'';';
put 'err=1;';
put 'end;';
put 'end;';
put '/* publish error message */';
put 'if err=1 then do;';
put 'errmsg=catx('' '',xlmap_range_id,'':'',value_txt,''->'',errmsg);';
put 'call symputx(''errmsg'',errmsg);';
put 'call symputx(''abort'',1);';
put 'end;';
put 'run;';
put '%mp_abort(iftrue=(&abort ne 0)';
put ',mac=xlmap_data_postedit';
put ',msg=%superq(errmsg)';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/public;
%let service=getchangeinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mpe_accesscheck(';
put 'base_table';
put ',outds=med_accesscheck /* WORK table to contain access details */';
put ',user= /* metadata user to check for */';
put ',access_level=APPROVE';
put ',cntl_lib_var=MPELIB';
put ');';
put '%if &user= %then %let user=%mf_getuser();';
put '%mp_abort(';
put 'iftrue=(%index(&outds,.)>0 and %upcase(%scan(&outds,1,.)) ne WORK)';
put ',mac=mpe_accesscheck';
put ',msg=%str(outds should be a WORK table)';
put ')';
put '%mp_abort(';
put 'iftrue=(%mf_verifymacvars(base_table user access_level)=0)';
put ',mac=mpe_accesscheck';
put ',msg=%str(Missing base_table/user access_level variables)';
put ')';
put '/* make unique temp table vars */';
put '%local tempds1 tempds2;';
put '%let tempds1=%mf_getuniquename(prefix=usergroups);';
put '%let tempds2=%mf_getuniquename(prefix=tablegroups);';
put '/* get list of user groups */';
put '%mpe_getgroups(user=&user,outds=&tempds1)';
put '/* get list of groups with access for that table */';
put 'proc sql;';
put 'create table &tempds2 as';
put 'select distinct sas_group';
put 'from &&&cntl_lib_var...mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and access_level="&access_level"';
put 'and (';
put '(libref="%scan(&base_table,1,.)" and upcase(dsn)="%scan(&base_table,2,.)")';
put 'or (libref="%scan(&base_table,1,.)" and dsn="*ALL*")';
put 'or (libref="*ALL*")';
put ');';
put '%if &_debug ge 131 %then %do;';
put 'data _null_;';
put 'set &tempds1;';
put 'putlog (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set &tempds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put 'proc sql;';
put 'create table &outds as';
put 'select * from &tempds1';
put 'where groupname="&mpeadmins"';
put 'or groupname in (select * from &tempds2);';
put '%put &sysmacroname: base_table=&base_table;';
put '%put &sysmacroname: access_level=&access_level;';
put '%mend mpe_accesscheck;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mpe_checkrestore(load_ref,';
put 'outresult=ALLOW_RESTORE,';
put 'outreason=REASON';
put ');';
put '%global &outresult &outreason;';
put '%let &outresult=NO;';
put '%let &outreason=NOTFOUND;';
put '/* check if there is actually a version to restore */';
put '%local chk;';
put '%let chk=0;';
put 'proc sql noprint;';
put 'select count(*) into: chk from &dc_libref..mpe_audit';
put 'where load_ref="&load_ref";';
put '%if &chk=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No entry for &load_ref in MPE_AUDIT;';
put '%return;';
put '%end;';
put '/* grab user groups */';
put '%local user;';
put '%let user=%mf_getuser();';
put '%mpe_getgroups(user=&user,outds=work.groups)';
put '/* check if user is admin */';
put '%local is_admin;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from work.groups';
put 'where groupname="&dc_admin_group";';
put '%if &is_admin>0 %then %do;';
put '%let allow_restore=YES;';
put '%let reason=IS ADMIN;';
put '%return;';
put '%end;';
put '/* check if user has basic access */';
put '%local libds;';
put 'proc sql noprint;';
put 'select cats(base_lib,''.'',base_ds) into: libds';
put 'from &mpelib..mpe_submit';
put 'where TABLE_ID="&load_ref";';
put '%mpe_accesscheck(&libds,outds=work.access_check';
put ',user=&user';
put ',access_level=EDIT';
put ')';
put '%if %mf_nobs(access_check)=0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=No access in MPE_TABLES;';
put '%return;';
put '%end;';
put '/* check if user has column level security rules */';
put 'proc sql;';
put 'create table work.cls_rules as';
put 'select *';
put 'from &mpelib..mpe_column_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("EDIT",''ALL'')';
put 'and CLS_ACTIVE=1';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from work.groups)';
put 'and CLS_LIBREF="%upcase(&base_lib)"';
put 'and CLS_TABLE="%upcase(&base_ds)";';
put '%if %mf_nobs(work.cls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_COLUMN_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.cls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '/* check if user has row level security rules */';
put 'proc sql;';
put 'create table work.rls_rules as';
put 'select *';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("EDIT",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="&base_lib"';
put 'and rls_table="&base_ds"';
put 'and rls_active=1;';
put '%if %mf_nobs(work.rls_rules)>0 %then %do;';
put '%let allow_restore=NO;';
put '%let reason=User has restrictions in MPE_ROW_LEVEL_SECURITY;';
put 'data _null_;';
put 'set work.rls_rules;';
put 'putlog (_all_)(=);';
put 'if _n_>5 then stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %do;';
put '%let allow_restore=YES;';
put '%let reason=CHECKS PASSED;';
put '%end;';
put '%mend mpe_checkrestore;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getchangeinfo.sas';
put '@brief Returns the details for an approval diff';
put '@details';
put ' SAS Macros
';
put '@li mf_getengine.sas';
put '@li mp_abort.sas';
put '@li mpe_checkrestore.sas';
put ' Service Inputs
';
put ' sascontroltable
';
put '@li table table ID or LOAD_REF used to uniquely identify a staged change';
put ' Service Outputs
';
put ' work.jsparams
';
put 'Mainly sourced from MPE_SUBMIT plus some extra cols:';
put '@li LIB_ENGINE Library engine';
put '@li allow_restore YES if a user can restore, else NO';
put '@li REASON reason why a restore is / is no possible';
put ' Data Inputs
';
put '@li MPE_AUDIT';
put '@li MPE_COLUMN_LEVEL_SECURITY';
put '@li MPE_ROW_LEVEL_SECURITY';
put '@li MPE_SUBMIT';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let table=;';
put 'data _null_;';
put 'set SASControlTable;';
put 'call symputx(''table'',table);';
put 'run;';
put 'data APPROVE1;';
put 'set &mpelib..mpe_submit';
put '(rename=(SUBMITTED_ON_DTTM=submitted_on REVIEWED_ON_DTTM=REVIEWED_ON));';
put 'where TABLE_ID="&TABLE";';
put 'TABLE_NM=cats(base_lib,''.'',base_ds);';
put 'BASE_TABLE=table_nm;';
put 'call symputx(''base_lib'',base_lib);';
put 'REVIEWED_ON_DTTM=put(reviewed_on,datetime19.);';
put 'SUBMITTED_ON_DTTM=put(submitted_on,datetime19.);';
put 'run;';
put '/**';
put '* Check if user has basic access permission to RESTORE the table';
put '*/';
put '%put checking access;';
put '%global allow_restore reason;';
put '%mpe_checkrestore(&table,outresult=ALLOW_RESTORE,outreason=REASON)';
put 'data work.jsParams;';
put 'set approve1;';
put 'LIB_ENGINE="%mf_getEngine(&base_lib)";';
put 'allow_restore="&allow_restore";';
put 'REASON="&reason";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,jsParams)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcols;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getcols.sas';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_abort.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%mf_getvalue(work.iwant,libds);';
put '%dc_assignlib(READ,%scan(&ds,1,.))';
put 'proc contents noprint data=&ds';
put 'out=droplist1 (keep=name type length label varnum format:);';
put 'run;';
put 'data cols(keep=name type length varnum format label);';
put 'set droplist1(rename=(format=format2 type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if format2='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else format=cats(format2,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if format2='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(format2,''.'');';
put 'else if formatd=0 then format=cats(format2,formatl,''.'');';
put 'else format=cats(format2,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cols)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getcolvals;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_getVarFormat(libds /* two level ds name */';
put ', var /* variable name from which to return the format */';
put ', force=0';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vformat rc vlen vtype;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable format */';
put '%if(&vnum > 0) %then %let vformat=%sysfunc(varfmt(&dsid, &vnum));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let rc = %sysfunc(close(&dsid));';
put '%return;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* supply a default if no format available */';
put '%if %length(&vformat)<2 & &force=1 %then %do;';
put '%let vlen = %sysfunc(varlen(&dsid, &vnum));';
put '%let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%if &vtype=C %then %let vformat=$&vlen..;';
put '%else %let vformat=best.;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable format */';
put '&vformat';
put '%mend mf_getVarFormat;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Retrieves column info to enable population of dropdowns';
put '@details An optional filterquery may be provided, if so then it is validated';
put 'and then used to filter the subsequent results.';
put ' Service Inputs
';
put ' IWANT
';
put 'The STARTROW and ROWS variables are used to fetch additional values beyond';
put 'the initial default (4000).';
put '|libds:$19.|col:$9.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|DC258467.MPE_X_TEST|SOME_TIME|4001|1000';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' VALS
';
put 'The type of this column actually depends on the underlying column type, so it can change';
put '|FORMATTED|UNFORMATTED|';
put '|---|---|';
put '|$44.00|44|';
put ' META
';
put '|COLUMN:$32.|SASFORMAT:$32.|STARTROW:8.|ROWS:8.|';
put '|---|---|---|---|';
put '|COL_NAME|DOLLAR8.2|4001|1000';
put ' SAS Macros
';
put '@li mf_existds.sas';
put '@li mf_getvalue.sas';
put '@li mf_verifymacvars.sas';
put '@li dc_assignlib.sas';
put '@li mf_getvarformat.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_filtercheck.sas';
put '@li mp_filtergenerate.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd.';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* input table may or may not exist */';
put 'data work.initvars;';
put 'length GROUP_LOGIC $3 SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $32767;';
put 'call missing(of _all_);';
put 'stop;';
put 'data work.filterquery;';
put 'set %sysfunc(ifc(';
put '%mf_existds(work.filterquery)=1';
put ',work.filterquery';
put ',work.initvars';
put '));';
put 'run;';
put '/* print data for debugging */';
put 'data _null_;';
put 'set work.iwant;';
put 'put (_all_)(=);';
put 'run;';
put 'data _null_;';
put 'set work.filterquery;';
put 'put (_all_)(=);';
put 'run;';
put '%let libds=%mf_getvalue(work.iwant,libds);';
put '%let col2=%mf_getvalue(work.iwant,col);';
put '%let is_fmt=0;';
put '%let startrow=1;';
put '%let rows=4000;';
put '%put &=libds;';
put '%put &=col2;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds col2)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Missing inputs from iwant. Libds=&libds col=&col2 )';
put ')';
put '%dc_assignlib(WRITE,%scan(&libds,1,.))';
put 'data _null_;';
put 'call missing(startrow,rows);';
put 'set work.iwant;';
put '/* check if the request is for a format catalog */';
put 'call symputx(''orig_libds'',libds);';
put 'is_fmt=0;';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'is_fmt=1;';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'call symputx(''startrow'',coalesce(startrow,&startrow));';
put 'call symputx(''rows'',coalesce(rows,&rows));';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&orig_libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '/**';
put '* Validate the filter query';
put '*/';
put '%mp_filtercheck(work.filterquery,targetds=&libds,abort=YES)';
put '/**';
put '* Prepare the query';
put '*/';
put '%mp_filtergenerate(work.filterquery,outref=myfilter)';
put '/* cannot %inc in a sql where clause, only data step, so - use a view */';
put 'data work.vw_vals/view=work.vw_vals;';
put 'set &libds;';
put 'where %inc myfilter;;';
put 'run;';
put 'proc sql;';
put 'create view work.vw_vals_sorted as';
put 'select distinct';
put 'put(&col2,%mf_getVarFormat(&libds,&col2,force=1)) as formatted,';
put '&col2 as unformatted';
put 'from work.vw_vals;';
put '/* restrict num of output values */';
put 'data work.vals;';
put 'set work.vw_vals_sorted;';
put 'if _n_ ge &startrow;';
put 'x+1;';
put 'if x>&rows then stop;';
put 'drop x;';
put 'run;';
put 'data vals;';
put '/* ensure empty value if table is empty, for dropdowns */';
put 'if nobs=0 then output;';
put 'set vals nobs=nobs;';
put 'format unformatted ;';
put 'output;';
put 'run;';
put 'proc sql noprint;';
put 'select count(*) into: nobs from work.vw_vals_sorted;';
put 'data meta;';
put 'column="&col2";';
put 'sasformat="%mf_getVarFormat(&libds,&col2)";';
put 'startrow=&startrow;';
put 'rows=&rows;';
put 'nobs=&nobs;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,vals,missing=STRING,showmeta=YES)';
put '%webout(OBJ,meta)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getddl;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_existfileref(fref';
put ')/*/STORE SOURCE*/;';
put '%local rc;';
put '%let rc=%sysfunc(fileref(&fref));';
put '%if &rc=0 %then %do;';
put '1';
put '%end;';
put '%else %if &rc<0 %then %do;';
put '%put &sysmacroname: Fileref &fref exists but the underlying file does not;';
put '1';
put '%end;';
put '%else %do;';
put '0';
put '%end;';
put '%mend mf_existfileref;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getddl(libref,ds,fref=getddl,flavour=SAS,showlog=NO,schema=';
put ',applydttm=NO';
put ')/*/STORE SOURCE*/;';
put '/* check fileref is assigned */';
put '%if %mf_existfileref(&fref)=0 %then %do;';
put 'filename &fref temp ;';
put '%end;';
put '%if %length(&libref)=0 %then %let libref=WORK;';
put '%let flavour=%upcase(&flavour);';
put 'proc sql noprint;';
put 'create table _data_ as';
put 'select * from dictionary.tables';
put 'where upcase(libname)="%upcase(&libref)"';
put 'and memtype=''DATA'' /* views not currently supported */';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local tabinfo; %let tabinfo=&syslast;';
put 'create table _data_ as';
put 'select * from dictionary.columns';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put ';';
put '%local colinfo; %let colinfo=&syslast;';
put '%local dsnlist;';
put 'select distinct upcase(memname) into: dsnlist';
put 'separated by '' ''';
put 'from &syslast';
put ';';
put 'create table _data_ as';
put 'select * from dictionary.indexes';
put 'where upcase(libname)="%upcase(&libref)"';
put '%if %length(&ds)>0 %then %do;';
put 'and upcase(memname)="%upcase(&ds)"';
put '%end;';
put 'order by idxusage, indxname, indxpos';
put ';';
put '%local idxinfo; %let idxinfo=&syslast;';
put '/* Extract all Primary Key and Unique data constraints */';
put '%mp_getconstraints(lib=%upcase(&libref),ds=%upcase(&ds),outds=_data_)';
put '%local colconst; %let colconst=&syslast;';
put '%macro addConst();';
put '%global constraints_used;';
put 'data _null_;';
put 'length ctype $11 constraint_name_orig $256 constraints_used $5000;';
put 'set &colconst(';
put 'where=(table_name="&curds" and constraint_type in (''PRIMARY'',''UNIQUE''))';
put ') end=last;';
put 'file &fref mod;';
put 'by constraint_type constraint_name;';
put 'retain constraints_used;';
put 'constraint_name_orig=constraint_name;';
put 'if upcase(strip(constraint_type)) = ''PRIMARY'' then ctype=''PRIMARY KEY'';';
put 'else ctype=strip(constraint_type);';
put '%if &flavour=TSQL %then %do;';
put 'column_name=catt(''['',column_name,'']'');';
put 'constraint_name=catt(''['',constraint_name,'']'');';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put 'column_name=catt(''"'',column_name,''"'');';
put 'constraint_name=catt(''"'',constraint_name,''"'');';
put '%end;';
put 'if first.constraint_name then do;';
put 'constraints_used = catx('' '', constraints_used, constraint_name_orig);';
put 'put " ,CONSTRAINT " constraint_name ctype "(" ;';
put 'put '' '' column_name;';
put 'end;';
put 'else put '' ,'' column_name;';
put 'if last.constraint_name then do;';
put 'put " )";';
put 'call symput(''constraints_used'',strip(constraints_used));';
put 'end;';
put 'run;';
put '%put &=constraints_used;';
put '%mend addConst;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* DDL generated by &sysuserid on %sysfunc(datetime(),datetime19.) */";';
put 'run;';
put '%local x curds;';
put '%if &flavour=SAS %then %do;';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* SAS Flavour DDL for %upcase(&libref).&curds */";';
put 'put "proc sql;";';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'length lab $1024 typ $20;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table &libref..&curds(";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view &libref..&curds(";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'if length(format)>1 then fmt=" format="!!cats(format);';
put 'if length(label)>1 then';
put 'lab=" label="!!cats("''",tranwrd(label,"''","''''"),"''");';
put 'if notnull=''yes'' then notnul='' not null'';';
put 'if type=''char'' then typ=cats(''char('',length,'')'');';
put 'else if length ne 8 then typ=''num length=''!!cats(length);';
put 'else typ=''num'';';
put 'put name typ fmt notnul lab;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '/* ds=cats(libname,''.'',memname); */';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX '' indxname "ON &libref..&curds (" ;';
put 'put '' '' name ;';
put 'end;';
put 'else put '' ,'' name ;';
put '*else put '' ,'' name ;';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '/*';
put 'ods output IntegrityConstraints=ic;';
put 'proc contents data=testali out2=info;';
put 'run;';
put '*/';
put '%end;';
put '%end;';
put '%else %if &flavour=TSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''SQLSVR'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* TSQL Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "create table [&schema].[&curds](";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "create view [&schema].[&curds](";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt=''[datetime2](7) '';';
put '%end;';
put 'else if type=''num'' then fmt=''[decimal](18,2)'';';
put 'else if length le 8000 then fmt=''[varchar](''!!cats(length)!!'')'';';
put 'else fmt=cats(''[varchar](max)'');';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put 'put "[" name +(-1) "]" fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put '*ds=cats(libname,''.'',memname);';
put 'if first.indxname then do;';
put '/* add nonclustered in case of multiple unique indexes */';
put 'put '' ,index ['' indxname +(-1) ''] UNIQUE NONCLUSTERED ('';';
put 'put '' ['' name +(-1) '']'';';
put 'end;';
put 'else put '' ,['' name +(-1) '']'';';
put 'if last.indxname then do;';
put 'put '' )'';';
put 'end;';
put 'run;';
put 'data _null_;';
put 'file &fref mod;';
put 'put '')'';';
put 'put ''GO'';';
put 'run;';
put '/* add extended properties for labels */';
put 'data _null_;';
put 'file &fref mod;';
put 'length nm $64 lab $1024;';
put 'set &colinfo (where=(upcase(memname)="&curds" and label ne '''')) end=last;';
put 'nm=cats("N''",tranwrd(name,"''","''''"),"''");';
put 'lab=cats("N''",tranwrd(label,"''","''''"),"''");';
put 'put '' '';';
put 'put "EXEC sys.sp_addextendedproperty ";';
put 'put " @name=N''MS_Description'',@value=" lab ;';
put 'put " ,@level0type=N''SCHEMA'',@level0name=N''&schema'' ";';
put 'put " ,@level1type=N''TABLE'',@level1name=N''&curds''";';
put 'put " ,@level2type=N''COLUMN'',@level2name=" nm ;';
put 'if last then put ''GO'';';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &flavour=PGSQL %then %do;';
put '/* if schema does not exist, set to be same as libref */';
put '%local schemaactual;';
put 'proc sql noprint;';
put 'select sysvalue into: schemaactual';
put 'from dictionary.libnames';
put 'where upcase(libname)="&libref" and engine=''POSTGRES'';';
put '%let schema=%sysfunc(coalescec(&schemaactual,&schema,&libref));';
put 'data _null_;';
put 'file &fref mod;';
put 'put "CREATE SCHEMA &schema;";';
put '%do x=1 %to %sysfunc(countw(&dsnlist));';
put '%let curds=%scan(&dsnlist,&x);';
put '%local curdsvarcount;';
put '%let curdsvarcount=%mf_getvarcount(&libref..&curds);';
put '%if &curdsvarcount>1600 %then %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* &libref..&curds contains &curdsvarcount vars */";';
put 'put "/* Postgres cannot create tables with over 1600 vars */";';
put 'put "/* No DDL will be generated for this table";';
put 'run;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'file &fref mod;';
put 'put "/* Postgres Flavour DDL for &schema..&curds */";';
put 'data _null_;';
put 'file &fref mod;';
put 'set &colinfo (where=(upcase(memname)="&curds")) end=last;';
put 'length fmt $32;';
put 'if _n_=1 then do;';
put 'if memtype=''DATA'' then do;';
put 'put "CREATE TABLE &schema..&curds (";';
put 'end;';
put 'else do;';
put '/* just a placeholder - we filter out views at the top */';
put 'put "CREATE VIEW &schema..&curds (";';
put 'end;';
put 'put " "@@;';
put 'end;';
put 'else put " ,"@@;';
put 'format=upcase(format);';
put 'if 1=0 then; /* dummy if */';
put '%if &applydttm=YES %then %do;';
put 'else if format=:''DATETIME'' then fmt='' TIMESTAMP '';';
put '%end;';
put 'else if type=''num'' then fmt='' DOUBLE PRECISION'';';
put 'else fmt=''VARCHAR(''!!cats(length)!!'')'';';
put 'if notnull=''yes'' then notnul='' NOT NULL'';';
put '/* quote column names in case they represent reserved words */';
put 'name2=quote(trim(name));';
put 'put name2 fmt notnul;';
put 'run;';
put '/* Extra step for data constraints */';
put '%addConst()';
put 'data _null_;';
put 'file &fref mod;';
put 'put '');'';';
put 'run;';
put '/* Create Unique Indexes, but only if they were not already defined within';
put 'the Constraints section. */';
put 'data _null_;';
put '*length ds $128;';
put 'set &idxinfo(';
put 'where=(';
put 'memname="&curds"';
put 'and unique=''yes''';
put 'and indxname not in (';
put '%sysfunc(tranwrd("&constraints_used",%str( ),%str(",")))';
put ')';
put ')';
put ');';
put 'file &fref mod;';
put 'by idxusage indxname;';
put 'if first.indxname then do;';
put 'put ''CREATE UNIQUE INDEX "'' indxname +(-1) ''" '' "ON &schema..&curds(";';
put 'put '' "'' name +(-1) ''"'' ;';
put 'end;';
put 'else put '' ,"'' name +(-1) ''"'';';
put 'if last.indxname then do;';
put 'put '');'';';
put 'end;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%if %upcase(&showlog)=YES %then %do;';
put 'options ps=max;';
put 'data _null_;';
put 'infile &fref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%end;';
put '%mend mp_getddl;';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Download DDL for a table or entire library in a particular flavour.';
put '@details';
put ' SAS Macros
';
put '@li mddl_sas_cntlout.sas';
put '@li dc_assignlib.sas';
put '@li mf_existds.sas';
put '@li mp_abort.sas';
put '@li mp_getddl.sas';
put '@li mp_streamfile.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global libref ds flavour;';
put '%let flavour=%sysfunc(coalescec(&flavour,SAS));';
put '%mpeinit()';
put '%dc_assignlib(READ,&libref)';
put 'data _null_;';
put '/* check if the request is for a format catalog */';
put 'ds=symget(''ds'');';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'libds=cats(symget(''libref''),''.'',ds);';
put 'putlog "Format Catalog Captured";';
put 'call execute(''%mddl_sas_cntlout(libds=work.fmtextract)'');';
put 'call symputx(''libref'',''work'');';
put 'call symputx(''ds'',''fmtextract'');';
put 'end;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=("exist&ds" ne "exist" and %mf_existds(libds=&libref..&ds)<1)';
put ',mac=&_program';
put ',msg=%str(Dataset &libref..&ds was not found)';
put ')';
put '%let tmploc=%sysfunc(pathname(work))/temp.txt;';
put 'filename tmp "&tmploc";';
put '%mp_getddl(&libref,&ds,flavour=&flavour, fref=tmp, applydttm=YES)';
put '%mp_streamfile(contenttype=TEXT';
put ',inloc=%str(&tmploc)';
put ',outname=&libref._&ds..ddl';
put ')';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getgroups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getgroups.sas';
put '@brief List all SAS Groups';
put '@details Gets a list of all SAS Groups. Runs without mpeinit() so that it';
put 'can be available to the sasjs/server configurator';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put ' Data Outputs
';
put ' groups
';
put '|NAME:$32.|DESCRIPTION:$64.|GROUPID:best.|';
put '|---|---|---|';
put '|`SomeGroup `|`A group `|`1`|';
put '|`Another Group`|`this is a different group`|`2`|';
put '|`admin`|`Administrators `|`3`|';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%dc_getgroups(outds=groups)';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getrawdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_ds2cards(base_ds, tgt_ds=';
put ',cards_file="%sysfunc(pathname(work))/cardgen.sas"';
put ',maxobs=max';
put ',random_sample=NO';
put ',showlog=YES';
put ',outencoding=';
put ',append=NO';
put ')/*/STORE SOURCE*/;';
put '%local i setds nvars;';
put '%if not %sysfunc(exist(&base_ds)) %then %do;';
put '%put %str(WARN)ING: &base_ds does not exist;';
put '%return;';
put '%end;';
put '%if %index(&base_ds,.)=0 %then %let base_ds=WORK.&base_ds;';
put '%if (&tgt_ds = ) %then %let tgt_ds=&base_ds;';
put '%if %index(&tgt_ds,.)=0 %then %let tgt_ds=WORK.%scan(&base_ds,2,.);';
put '%if ("&outencoding" ne "") %then %let outencoding=encoding="&outencoding";';
put '%if ("&append" = "" or "&append" = "NO") %then %let append=;';
put '%else %let append=mod;';
put '/* get varcount */';
put '%let nvars=0;';
put 'proc sql noprint;';
put 'select count(*) into: nvars from dictionary.columns';
put 'where upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)";';
put '%if &nvars=0 %then %do;';
put '%put %str(WARN)ING: Dataset &base_ds has no variables, will not be converted.;';
put '%return;';
put '%end;';
put '/* get indexes */';
put 'proc sort';
put 'data=sashelp.vindex(';
put 'where=(upcase(libname)="%scan(%upcase(&base_ds),1)"';
put 'and upcase(memname)="%scan(%upcase(&base_ds),2)")';
put ')';
put 'out=_data_;';
put 'by indxname indxpos;';
put 'run;';
put '%local indexes;';
put 'data _null_;';
put 'set &syslast end=last;';
put 'if _n_=1 then call symputx(''indexes'',''(index=('',''l'');';
put 'by indxname indxpos;';
put 'length vars $32767 nom uni $8;';
put 'retain vars;';
put 'if first.indxname then do;';
put 'idxcnt+1;';
put 'nom='''';';
put 'uni='''';';
put 'vars=name;';
put 'end;';
put 'else vars=catx('' '',vars,name);';
put 'if last.indxname then do;';
put 'if nomiss=''yes'' then nom=''/nomiss'';';
put 'if unique=''yes'' then uni=''/unique'';';
put 'call symputx(''indexes''';
put ',catx('' '',symget(''indexes''),indxname,''=('',vars,'')'',nom,uni)';
put ',''l'');';
put 'end;';
put 'if last then call symputx(''indexes'',cats(symget(''indexes''),''))''),''l'');';
put 'run;';
put 'data;run;';
put '%let setds=&syslast;';
put 'proc sql';
put '%if %datatyp(&maxobs)=NUMERIC %then %do;';
put 'outobs=&maxobs;';
put '%end;';
put ';';
put 'create table &setds as select * from &base_ds';
put '%if &random_sample=YES %then %do;';
put 'order by ranuni(42)';
put '%end;';
put ';';
put 'reset outobs=max;';
put 'create table datalines1 as';
put 'select name,type,length,varnum,format,label from dictionary.columns';
put 'where upcase(libname)="%upcase(%scan(&base_ds,1))"';
put 'and upcase(memname)="%upcase(%scan(&base_ds,2))";';
put '/**';
put 'Due to long decimals cannot use best. format';
put 'So - use bestd. format and then use character functions to strip trailing';
put 'zeros, if NOT an integer or missing!! Cannot use int() as it upsets';
put 'note2err when there are missings.';
put 'resolved code = ifc( mod(coalesce(VARIABLE,0),1)=0';
put ',put(VARIABLE,best32.)';
put ',substrn(put(VARIABLE,bestd32.),1';
put ',findc(put(VARIABLE,bestd32.),''0'',''TBK'')));';
put '**/';
put 'data datalines_2;';
put 'format dataline $32000.;';
put 'set datalines1 (where=(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM'')));';
put 'if type=''num'' then dataline=';
put 'cats(''ifc(mod(coalesce('',name,'',0),1)=0';
put ',put('',name,'',best32.-l)';
put ',substrn(put('',name,'',bestd32.-l),1';
put ',findc(put('',name,'',bestd32.-l),"0","TBK")))'');';
put '/**';
put '* binary data must be converted, to store in text format. It is identified';
put '* by the presence of the $HEX keyword in the format.';
put '*/';
put 'else if upcase(format)=:''$HEX'' then';
put 'dataline=cats(''put(trim('',name,''),'',format,'')'');';
put '/**';
put '* There is no easy way to store line breaks in a cards file.';
put '* To discuss this, use: https://github.com/sasjs/core/issues/80';
put '* Removing all nonprintables with kw (keep writeable)';
put '*/';
put 'else dataline=cats(''compress('',name,'', ,"kw")'');';
put 'run;';
put 'proc sql noprint;';
put 'select dataline into: datalines separated by '','' from datalines_2;';
put '%local';
put 'process_dttm_flg';
put 'valid_from_dttm_flg';
put 'valid_to_dttm_flg';
put ';';
put '%let process_dttm_flg = N;';
put '%let valid_from_dttm_flg = N;';
put '%let valid_to_dttm_flg = N;';
put 'data _null_;';
put 'set datalines1 ;';
put '/* build attrib statement */';
put 'if type=''char'' then type2=''$'';';
put 'if strip(format) ne '''' then format2=cats(''format='',format);';
put 'if strip(label) ne '''' then label2=cats(''label='',quote(trim(label)));';
put 'str1=catx('' '',(put(name,$33.)||''length='')';
put ',put(cats(type2,length),$7.)||format2,label2);';
put '/* Build input statement */';
put 'if upcase(format)=:''$HEX'' then type3='':''!!format;';
put 'else if type=''char'' then type3='':$char.'';';
put 'str2=put(name,$33.)||type3;';
put 'if(upcase(name) = "PROCESSED_DTTM") then';
put 'call symputx("process_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_FROM_DTTM") then';
put 'call symputx("valid_from_dttm_flg", "Y", "L");';
put 'if(upcase(name) = "VALID_TO_DTTM") then';
put 'call symputx("valid_to_dttm_flg", "Y", "L");';
put 'call symputx(cats("attrib_stmt_", put(_N_, 8.)), str1, "L");';
put 'call symputx(cats("input_stmt_", put(_N_, 8.))';
put ', ifc(upcase(name) not in';
put '(''PROCESSED_DTTM'',''VALID_FROM_DTTM'',''VALID_TO_DTTM''), str2, ""), "L");';
put 'run;';
put 'data _null_;';
put 'file &cards_file. &outencoding lrecl=32767 termstr=nl &append;';
put 'length __attrib $32767;';
put 'if _n_=1 then do;';
put 'put ''/**'';';
put 'put '' @file'';';
put 'put " @brief Datalines for %upcase(%scan(&base_ds,2)) dataset";';
put 'put " @details Generated by %nrstr(%%)mp_ds2cards()";';
put 'put " Source: https://github.com/sasjs/core";';
put 'put '' @cond '';';
put 'put ''**/'';';
put 'put "data &tgt_ds &indexes;";';
put 'put "attrib ";';
put '%do i = 1 %to &nvars;';
put '__attrib=symget("attrib_stmt_&i");';
put 'put __attrib;';
put '%end;';
put 'put ";";';
put '%if &process_dttm_flg. eq Y %then %do;';
put 'put ''retain PROCESSED_DTTM %sysfunc(datetime());'';';
put '%end;';
put '%if &valid_from_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_FROM_DTTM &low_date;'';';
put '%end;';
put '%if &valid_to_dttm_flg. eq Y %then %do;';
put 'put ''retain VALID_TO_DTTM &high_date;'';';
put '%end;';
put 'if __nobs=0 then do;';
put 'put ''call missing(of _all_);/* avoid uninitialised notes */'';';
put 'put ''stop;'';';
put 'put ''run;'';';
put 'end;';
put 'else do;';
put 'put "infile cards dsd;";';
put 'put "input ";';
put '%do i = 1 %to &nvars.;';
put '%if(%length(&&input_stmt_&i..)) %then';
put 'put " &&input_stmt_&i..";';
put ';';
put '%end;';
put 'put ";";';
put 'put ''missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'';';
put 'put "datalines4;";';
put 'end;';
put 'end;';
put 'set &setds end=__lastobs nobs=__nobs;';
put '/* remove all formats for write purposes - some have long underlying decimals */';
put 'format _numeric_ best30.29;';
put 'length __dataline $32767;';
put '__dataline=catq(''cqtmb'',&datalines);';
put 'put __dataline;';
put 'if __lastobs then do;';
put 'put '';;;;'';';
put 'put ''run;'';';
put 'put ''/** @endcond **/'';';
put 'stop;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &setds;';
put 'quit;';
put '%if &showlog=YES %then %do;';
put 'data _null_;';
put 'infile &cards_file lrecl=32767;';
put 'input;';
put 'put _infile_;';
put 'run;';
put '%end;';
put '%put NOTE: CARDS FILE SAVED IN:;';
put '%put NOTE-;%put NOTE-;';
put '%put NOTE- %sysfunc(dequote(&cards_file.));';
put '%put NOTE-;%put NOTE-;';
put '%mend mp_ds2cards;';
put '/** @endcond **/';
put '%macro mp_binarycopy(';
put 'inloc= /* full path and filename of the object to be copied */';
put ',outloc= /* full path and filename of object to be created */';
put ',inref=____in /* override default to use own filerefs */';
put ',outref=____out /* override default to use own filerefs */';
put ',mode=CREATE';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local mod;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if &mode=APPEND %then %let mod=mod;';
put '/* these IN and OUT filerefs can point to anything */';
put '%if &inref = ____in %then %do;';
put 'filename &inref &inloc lrecl=1048576 ;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref &outloc lrecl=1048576 &mod;';
put '%end;';
put '/* copy the file byte-for-byte */';
put 'data _null_;';
put 'infile &inref lrecl=1 recfm=n;';
put 'file &outref &mod recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put '%if &inref = ____in %then %do;';
put 'filename &inref clear;';
put '%end;';
put '%if &outref=____out %then %do;';
put 'filename &outref clear;';
put '%end;';
put '%mend mp_binarycopy;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mfs_httpheader(header_name';
put ',header_value';
put ')/*/STORE SOURCE*/;';
put '%global sasjs_stpsrv_header_loc;';
put '%local fref fid i;';
put '%if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc)) ne 0 %then %do;';
put '%put &=fref &=sasjs_stpsrv_header_loc;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(&header_name): %str(&header_value)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%mend mfs_httpheader;';
put '%macro mp_streamfile(';
put 'contenttype=TEXT';
put ',inloc=';
put ',inref=0';
put ',iftrue=%str(1=1)';
put ',outname=';
put ',outref=_webout';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let contentype=%upcase(&contenttype);';
put '%let outref=%upcase(&outref);';
put '%local platform; %let platform=%mf_getplatform();';
put '/**';
put '* check engine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put '%local streamweb;';
put '%let streamweb=0;';
put 'data _null_;';
put 'set sashelp.vextfl(where=(upcase(fileref)="&outref"));';
put 'if xengine=''STREAM'' then call symputx(''streamweb'',1,''l'');';
put 'run;';
put '%if &contentype=CSV %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/csv'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/csv''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/csv)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=EXCEL %then %do;';
put '/* suitable for XLS format */';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/vnd.ms-excel'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=''application/vnd.ms-excel''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/vnd.ms-excel)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=GIF or &contentype=JPEG or &contentype=PNG %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"image/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="image/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,image/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=HTML or &contenttype=MARKDOWN %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"text/%lowcase(&contenttype)");';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name="_webout.json"';
put 'contenttype="text/%lowcase(&contenttype)"';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,text/%lowcase(&contenttype))';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=TEXT %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/text'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.txt''';
put 'contenttype=''application/text''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/text)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=WOFF or &contentype=WOFF2 or &contentype=TTF %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',"font/%lowcase(&contenttype)");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'contenttype="font/%lowcase(&contenttype)";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,font/%lowcase(&contenttype))';
put '%end;';
put '%end;';
put '%else %if &contentype=XLSX %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.xls''';
put 'contenttype=';
put '''application/vnd.openxmlformats-officedocument.spreadsheetml.sheet''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type';
put ',application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
put ')';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %if &contentype=ZIP %then %do;';
put '%if (&platform=SASMETA and &streamweb=1) %then %do;';
put 'data _null_;';
put 'rc=stpsrv_header(''Content-Type'',''application/zip'');';
put 'rc=stpsrv_header(''Content-disposition'',"attachment; filename=&outname");';
put 'run;';
put '%end;';
put '%else %if &platform=SASVIYA %then %do;';
put 'filename &outref filesrvc parenturi="&SYS_JES_JOB_URI" name=''_webout.zip''';
put 'contenttype=''application/zip''';
put 'contentdisp="attachment; filename=&outname";';
put '%end;';
put '%else %if &platform=SASJS %then %do;';
put '%mfs_httpheader(Content-Type,application/zip)';
put '%mfs_httpheader(Content-disposition,%str(attachment; filename=&outname))';
put '%end;';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: Content Type &contenttype NOT SUPPORTED by &sysmacroname!;';
put '%end;';
put '%if &inref ne 0 %then %do;';
put '%mp_binarycopy(inref=&inref,outref=&outref)';
put '%end;';
put '%else %do;';
put '%mp_binarycopy(inloc="&inloc",outref=&outref)';
put '%end;';
put '%mend mp_streamfile;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Downloads data in a variety of formats';
put '@details To enable direct download, this service runs in a dedicated stream';
put 'as a GET request using URL parameters as inputs.';
put 'The inputs are:';
put '@li table - the libds of the table to be downloaded';
put '@li type - either SAS, CSV, EXCEL, MARKDOWN, WEBCSV or WEBTAB';
put '@li filter - the filter RK if used';
put ' SAS Macros
';
put '@li mf_verifymacvars.sas';
put '@li mf_getuser.sas';
put '@li mf_existfeature.sas';
put '@li dc_assignlib.sas';
put '@li mp_ds2cards.sas';
put '@li mp_abort.sas';
put '@li mp_binarycopy.sas';
put '@li mp_cntlout.sas';
put '@li mp_streamfile.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%global table type filter ds format is_fmt txfrom txto;';
put '%mpeinit()';
put '%let user=%mf_getuser();';
put '%let is_fmt=0;';
put '%mp_abort(iftrue= (%mf_verifymacvars(type table)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Invalid inputs: type table)';
put ')';
put '%let libds=%upcase(&table); /* actual source */';
put '%let table=%upcase(&table); /* used as label for fmt catalogs */';
put '%let lib=%scan(&table,1,.);';
put '%let ds=%scan(&table,2,.);';
put '%dc_assignlib(READ,&lib)';
put 'data _null_;';
put 'set &mpelib..MPE_TABLES;';
put 'where upcase(libref)="&lib" and upcase(dsn)="&ds";';
put '/* if a TXTEMPORAL table then filter as such */';
put 'call symputx(''txfrom'',var_txfrom);';
put 'call symputx(''txto'',var_txto);';
put 'ds=symget(''ds'');';
put 'is_fmt=0;';
put 'if subpad(cats(reverse(ds)),1,3)=:''CF-'' then do;';
put 'ds=scan(ds,1,''-'');';
put 'table=cats("&lib..",ds);';
put 'putlog "Format Catalog Captured";';
put 'is_fmt=1;';
put 'call symputx(''libds'',''work.fmtextract'');';
put 'call symputx(''table'',table);';
put 'end;';
put 'call symputx(''is_fmt'',is_fmt);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_cntlout(';
put 'iftrue=(&is_fmt=1)';
put ',libcat=&table';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%put preparing query;';
put '%mpe_filtermaster(DLOAD,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put 'options obs=200000;/* stop limit */';
put 'data staged(drop=&txfrom &txto);';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put 'options obs=max;';
put 'options validvarname=upcase;';
put '%macro mpestp_getrawdata();';
put '%local outfile;';
put '%if &type=SAS %then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..sas;';
put '%mp_ds2cards(base_ds=staged';
put ', tgt_ds=&table';
put ', cards_file= "&outfile"';
put ', maxobs=100000)';
put '%let ext=sas;';
put '%let mimetype=text;';
put '%end;';
put '%else %if &type=CSV or (&type=EXCEL and %mf_existfeature(EXPORTXLS) ne 1)';
put '/* cannot proc export excel if PC Files is not licensed */';
put '%then %do;';
put '%let outfile=%sysfunc(pathname(work))/&table..csv;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '%let ext=csv;';
put '%let mimetype=csv;';
put '%end;';
put '%else %if &type=EXCEL %then %do;';
put '%let ext=xlsx;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= "&outfile"';
put 'DBMS=xlsx ;';
put 'RUN;';
put '%let mimetype=XLSX;';
put '%end;';
put '%else %if &type=MARKDOWN %then %do;';
put '%let ext=md;';
put '%let outfile=%sysfunc(pathname(work))/&table..&ext;';
put 'filename mdref "&outfile" lrecl=32767;';
put '%mp_ds2md(staged,outref=mdref,showlog=NO)';
put '%let mimetype=MARKDOWN;';
put '%end;';
put '%else %if &type=WEBCSV %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=csv REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %if &type=WEBTAB %then %do;';
put 'PROC EXPORT DATA= staged';
put 'OUTFILE= _webout';
put 'DBMS=tab REPLACE;';
put 'RUN;';
put '/* don''t set headers */';
put '%return;';
put '%end;';
put '%else %do;';
put '%mp_abort(msg=type &type not supported,mac=mpestp_getrawdata.sas);';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_streamfile(contenttype=&mimetype';
put ',inloc=%str(&outfile)';
put ',outname=&table..&ext';
put ')';
put '%mend mpestp_getrawdata;';
put '%mpestp_getrawdata()';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=getversion;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file getversion.sas';
put '@brief get a specific (previous) version of a particular table';
put '@details Used to fetch a version of a table as at a previous point in time';
put 'Delivered as part of this issue: https://git.datacontroller.io/dc/dc/issues/84';
put ' Service Inputs
';
put ' getversion_input
';
put '|LIBREF:$char8.|DS:$char32.|TS: 8.|';
put '|---|---|---|';
put '|SOMELIB|SOMEDS|1341344.804|';
put ' Service Outputs
';
put ' work.getversion_output
';
put 'The data for a particular version';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpeinit.sas';
put '@li mpe_getvars.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '**/';
put '%mpeinit()';
put '%global LIBREF DS;';
put '/* load parameters */';
put '%mpe_getvars(getversion_input, getversion_input)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program';
put ',msg=%str(Issue on startup)';
put ')';
put '/* todo */';
put '%webout(OPEN)';
put '%webout(OBJ,getversion_output)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=refreshlibinfo;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro bitemporal_closeouts(';
put 'tech_from=tx_from_dttm';
put ',tech_to = tx_to_dttm /* Technical TO datetime variable.';
put 'Req''d on BASE table only. */';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE /* Name of STAGING table. */';
put ',PK= name sex /* Business key, space separated. */';
put '/* Should INCLUDE BUS_FROM field if relevant. */';
put ',NOW=DEFINE';
put ',FILTER= /* supply a filter to limit the update */';
put ',outdest= /* supply an unquoted filepath/filename.ext to get';
put 'a text file containing the update statements */';
put ',loadtype=';
put ',loadtarget=YES /* if <> YES will return without changing anything */';
put ');';
put '%put ENTERING &sysmacroname;';
put '%local x var start;';
put '%let start=%sysfunc(datetime());';
put '%dc_assignlib(WRITE,&base_lib)';
put '%dc_assignlib(WRITE,&append_lib)';
put '%if &now=DEFINE %then %let now=&dc_dttmtfmt.;';
put '%put &=now;';
put '/**';
put '* perform basic checks';
put '*/';
put '/* do tables exist? */';
put '%if not %sysfunc(exist(&base_lib..&base_dsn)) %then %do;';
put '%mp_abort(msg=&base_lib..&base_dsn does not exist)';
put '%end;';
put '%else %if %sysfunc(exist(&append_lib..&append_dsn))=0';
put 'and %sysfunc(exist(&append_lib..&append_dsn,VIEW))=0 %then %do;';
put '%mp_abort(msg=&append_lib..&append_dsn does not exist)';
put '%end;';
put '/* do TX columns exist? */';
put '%if &loadtype ne UPDATE %then %do;';
put '%if not %mf_existvar(&base_lib..&base_dsn,&tech_from) %then %do;';
put '%mp_abort(msg=&tech_from does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&base_lib..&base_dsn,&tech_to) %then %do;';
put '%mp_abort(msg=&tech_to does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%end;';
put '/* do PK columns exist? */';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if not %mf_existvar(&base_lib..&base_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &base_lib..&base_dsn)';
put '%end;';
put '%else %if not %mf_existvar(&append_lib..&append_dsn,&var) %then %do;';
put '%mp_abort(msg=&var does not exist on &append_lib..&append_dsn)';
put '%end;';
put '%end;';
put '/* check uniqueness */';
put 'proc sort data=&append_lib..&append_dsn';
put 'out=___closeout1 noduprecs dupout=___closeout1a;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(___closeout1a,NLOBS)>0 %then';
put '%put NOTE: dups on (&PK) in (&append_lib..&append_dsn);';
put '/* is &NOW value within a tolerance? Should not allow renegade closeouts.. */';
put '%local gap;';
put '%let gap=0;';
put 'data _null_;';
put 'now=&now;';
put 'gap=intck(''HOURS'',now,datetime());';
put 'call symputx(''gap'',gap,''l'');';
put 'run;';
put '%mf_abort(';
put 'iftrue=(&gap > 24),';
put 'msg=NOW variable (&now) is not within a 24hr tolerance';
put ')';
put '/* have any warnings / errs occurred thus far? If so, abort */';
put '%mf_abort(';
put 'iftrue=(&syscc>0),';
put 'msg=Aborted due to SYSCC=&SYSCC status';
put ')';
put '/**';
put '* Create closeout statements. These are sent as individual SQL statements';
put '* to ensure pass-through utilisation. The update_cnt variable monitors';
put '* how many records were actually updated on the target table.';
put '*/';
put '%local update_cnt;';
put '%let update_cnt=0;';
put 'filename tmp temp;';
put 'data _null_;';
put 'set ___closeout1;';
put 'file tmp;';
put 'if _n_=1 then put ''proc sql noprint;'' ;';
put 'length string $32767.;';
put '%if &loadtype=UPDATE %then %do;';
put 'put "delete from &base_lib..&base_dsn where 1";';
put '%end;';
put '%else %do;';
put 'now=symget(''now'');';
put 'put "update &base_lib..&base_dsn set &tech_to= " now @;';
put '%if %mf_existvar(&base_lib..&base_dsn,PROCESSED_DTTM) %then %do;';
put 'put " ,PROCESSED_DTTM=" now @;';
put '%end;';
put 'put " where " now " lt &tech_to ";';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&PK));';
put '%let var=%scan(&pk,&x,%str( ));';
put '%if %mf_getvartype(&base_lib..&base_dsn,&var)=C %then %do;';
put '/* use single quotes to avoid ampersand resolution in data */';
put 'string=" & &var=''"!!trim(prxchange("s/''/''''/",-1,&var))!!"''";';
put '%end;';
put '%else %do;';
put 'string=cats(" & &var=",&var);';
put '%end;';
put 'put string;';
put '%end;';
put 'put "&filter ;";';
put 'put ''%let update_cnt=%eval(&update_cnt+&sqlobs);%put update_cnt=&update_cnt;'';';
put 'run;';
put 'data _null_;';
put 'infile tmp;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &loadtarget ne YES %then %return;';
put '/* ensure we have a lock */';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn';
put ',ref=bitemporal_closeouts';
put ',ctl_ds=&mpelib..mpe_lockanytable';
put ')';
put 'options source2;';
put '%inc tmp;';
put 'filename tmp clear;';
put '/**';
put '* Update audit tracker';
put '*/';
put '%local newobs; %let newobs=%mf_getattrn(work.___closeout1,NLOBS);';
put '%local user; %let user=%mf_getuser();';
put 'proc sql;';
put 'insert into &mpelib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&append_lib..&append_dsn contained &newobs records"';
put ',LOADTYPE="CLOSEOUT"';
put ',DELETED_RECORDS=&update_cnt';
put ',NEW_RECORDS=0';
put ',DURATION=%sysfunc(datetime())-&start';
put ',USER_NM="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%mend bitemporal_closeouts;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mf_wordsInStr1ButNotStr2(';
put 'Str1= /* string containing words to extract */';
put ',Str2= /* used to compare with the extract string */';
put ')/*/STORE SOURCE*/;';
put '%local count_base count_extr i i2 extr_word base_word match outvar;';
put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;';
put '%put base string (str1)= &str1;';
put '%put compare string (str2) = &str2;';
put '%return;';
put '%end;';
put '%let count_base=%sysfunc(countw(&Str2));';
put '%let count_extr=%sysfunc(countw(&Str1));';
put '%do i=1 %to &count_extr;';
put '%let extr_word=%scan(&Str1,&i,%str( ));';
put '%let match=0;';
put '%do i2=1 %to &count_base;';
put '%let base_word=%scan(&Str2,&i2,%str( ));';
put '%if &extr_word=&base_word %then %let match=1;';
put '%end;';
put '%if &match=0 %then %let outvar=&outvar &extr_word;';
put '%end;';
put '&outvar';
put '%mend mf_wordsInStr1ButNotStr2;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '/** @cond */';
put '%macro mp_storediffs(libds';
put ',origds';
put ',key';
put ',delds=0';
put ',appds=0';
put ',modds=0';
put ',outds=work.mp_storediffs';
put ',loadref=0';
put ',processed_dttm=0';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put '/* set up unique and temporary vars */';
put '%local ds1 ds2 ds3 ds4 hashkey inds_auto inds_keep dslist vlist;';
put '%let ds1=%upcase(work.%mf_getuniquename(prefix=mpsd_ds1));';
put '%let ds2=%upcase(work.%mf_getuniquename(prefix=mpsd_ds2));';
put '%let ds3=%upcase(work.%mf_getuniquename(prefix=mpsd_ds3));';
put '%let ds4=%upcase(work.%mf_getuniquename(prefix=mpsd_ds4));';
put '%let hashkey=%upcase(%mf_getuniquename(prefix=mpsd_hashkey));';
put '%let inds_auto=%upcase(%mf_getuniquename(prefix=mpsd_inds_auto));';
put '%let inds_keep=%upcase(%mf_getuniquename(prefix=mpsd_inds_keep));';
put '%let dslist=&origds;';
put '%if &delds ne 0 %then %do;';
put '%let delds=%upcase(&delds);';
put '%if %scan(&delds,-1,.)=&delds %then %let delds=WORK.&delds;';
put '%let dslist=&dslist &delds;';
put '%end;';
put '%if &appds ne 0 %then %do;';
put '%let appds=%upcase(&appds);';
put '%if %scan(&appds,-1,.)=&appds %then %let appds=WORK.&appds;';
put '%let dslist=&dslist &appds;';
put '%end;';
put '%if &modds ne 0 %then %do;';
put '%let modds=%upcase(&modds);';
put '%if %scan(&modds,-1,.)=&modds %then %let modds=WORK.&modds;';
put '%let dslist=&dslist &modds;';
put '%end;';
put '%let origds=%upcase(&origds);';
put '%if %scan(&origds,-1,.)=&origds %then %let origds=WORK.&origds;';
put '%let key=%upcase(&key);';
put '/* hash the key and append all the tables (marking the source) */';
put 'data &ds1;';
put 'set &dslist indsname=&inds_auto;';
put '&hashkey=put(md5(catx(''|'',%mf_getquotedstr(&key,quote=N))),$hex32.);';
put '&inds_keep=upcase(&inds_auto);';
put 'proc sort;';
put 'by &inds_keep &hashkey;';
put 'run;';
put '/* transpose numeric & char vars */';
put 'proc transpose data=&ds1';
put 'out=&ds2(rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_num));';
put 'by &inds_keep &hashkey;';
put 'var _numeric_;';
put 'run;';
put 'proc transpose data=&ds1';
put 'out=&ds3(';
put 'rename=(&hashkey=key_hash _name_=tgtvar_nm col1=newval_char)';
put 'where=(tgtvar_nm not in ("&hashkey","&inds_keep"))';
put ');';
put 'by &inds_keep &hashkey;';
put 'var _character_;';
put 'run;';
put '%if %index(&libds,-)>0 and %scan(&libds,2,-)=FC %then %do;';
put '/* this is a format catalog - cannot query cols directly */';
put '%let vlist="TYPE","FMTNAME","FMTROW","START","END","LABEL","MIN","MAX"';
put ',"DEFAULT","LENGTH","FUZZ","PREFIX","MULT","FILL","NOEDIT","SEXCL"';
put ',"EEXCL","HLO","DECSEP","DIG3SEP","DATATYPE","LANGUAGE";';
put '%end;';
put '%else %let vlist=%mf_getvarlist(&libds,dlm=%str(,),quote=DOUBLE);';
put 'data &ds4;';
put 'length &inds_keep $41 tgtvar_nm $32 _label_ $256;';
put 'if _n_=1 then call missing(_label_);';
put 'drop _label_;';
put 'set &ds2 &ds3 indsname=&inds_auto;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%upcase(&vlist));';
put 'if upcase(&inds_auto)="&ds2" then tgtvar_type=''N'';';
put 'else if upcase(&inds_auto)="&ds3" then tgtvar_type=''C'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified vartype input!" &inds_auto;';
put 'call symputx(''syscc'',98);';
put 'end;';
put 'if &inds_keep="&appds" then move_type=''A'';';
put 'else if &inds_keep="&delds" then move_type=''D'';';
put 'else if &inds_keep="&modds" then move_type=''M'';';
put 'else if &inds_keep="&origds" then move_type=''O'';';
put 'else do;';
put 'putlog ''ERR'' +(-1) "OR: unidentified movetype input!" &inds_keep;';
put 'call symputx(''syscc'',99);';
put 'end;';
put 'tgtvar_nm=upcase(tgtvar_nm);';
put 'if tgtvar_nm in (%mf_getquotedstr(&key)) then is_pk=1;';
put 'else is_pk=0;';
put 'drop &inds_keep;';
put 'run;';
put '%if "&loadref"="0" %then %let loadref=%sysfunc(uuidgen());';
put '%if &processed_dttm=0 %then %let processed_dttm=%sysfunc(datetime(),8.6);';
put '%let libds=%upcase(&libds);';
put '/* join orig vals for modified & deleted */';
put 'proc sql;';
put 'create table &outds as';
put 'select "&loadref" as load_ref length=36';
put ',&processed_dttm as processed_dttm format=E8601DT26.6';
put ',"%scan(&libds,1,.)" as libref length=8';
put ',"%scan(&libds,2,.)" as dsn length=32';
put ',b.key_hash length=32';
put ',b.move_type length=1';
put ',b.tgtvar_nm length=32';
put ',b.is_pk';
put ',case when b.move_type ne ''M'' then -1';
put 'when a.newval_num=b.newval_num and a.newval_char=b.newval_char then 0';
put 'else 1';
put 'end as is_diff';
put ',b.tgtvar_type length=1';
put ',case when b.move_type=''D'' then b.newval_num';
put 'else a.newval_num';
put 'end as oldval_num format=best32.';
put ',case when b.move_type=''D'' then .';
put 'else b.newval_num';
put 'end as newval_num format=best32.';
put ',case when b.move_type=''D'' then b.newval_char';
put 'else a.newval_char';
put 'end as oldval_char length=32765';
put ',case when b.move_type=''D'' then ''''';
put 'else b.newval_char';
put 'end as newval_char length=32765';
put 'from &ds4(where=(move_type=''O'')) as a';
put 'right join &ds4(where=(move_type ne ''O'')) as b';
put 'on a.tgtvar_nm=b.tgtvar_nm';
put 'and a.key_hash=b.key_hash';
put 'order by move_type, key_hash,is_pk desc, tgtvar_nm;';
put '%if &mdebug=0 %then %do;';
put 'proc sql;';
put 'drop table &ds1, &ds2, &ds3, &ds4;';
put '%end;';
put '%mend mp_storediffs;';
put '/** @endcond */';
put '%macro bitemporal_dataloader(';
put 'bus_from= /* Business FROM datetime variable. Req''d on';
put 'STAGING & BASE tables.*/';
put ',bus_to = /* Business TO datetime variable. Req''d on';
put 'STAGING & BASE tables. */';
put ',bus_from_override= /* Provide a hard coded BUS_FROM datetime value.*/';
put ',bus_to_override= /* provide a hard coded BUS_TO datetime value */';
put ',tech_from= /* Technical FROM datetime variable. Req''d on';
put 'BASE table only. */';
put ',tech_to = /* Technical TO datetime variable. Req''d on BASE';
put 'table only. */';
put ',processed= 0';
put ',base_lib=WORK /* Libref of the BASE table. */';
put ',base_dsn=BASETABLE /* Name of BASE table. */';
put ',append_lib=WORK /* Libref of the STAGING table. */';
put ',append_dsn=APPENDTABLE';
put ',high_date=''01JAN5999:00:00:00''dt /* High date to close out records */';
put ',PK= name sex';
put ',RK_UNDERLYING=';
put ',KEEPVARS= /* Provides option for removing unwanted vars from append table */';
put ',RK_UPDATE_MAXKEYTABLE=NO /* If switching (or mix matching) with regular';
put 'SCD2 loader then set this switch to YES to';
put 'ensure the MAXKEYTABLE is updated with the';
put 'current maximum RK value for the target table';
put '*/';
put ',CHECK_UNIQUENESS=YES /* Perform a check of the APPEND table to ensure it is';
put 'unique on its business key */';
put ',ETLSOURCE=demo /* supply a value ($50.) to show as ETLSOURCE in';
put '&dclib..DATALOADS */';
put ',LOADTYPE=BITEMPORAL';
put ',RK_MAXKEYTABLE= mpe_maxkeyvalues';
put ',LOG=1 /* Switch to 0 to prevent records being added to';
put '&mpelib..mpe_DATALOADS (ie when testing)*/';
put ',DELETE_COL= _____DELETE__THIS__RECORD_____';
put '/* If this variable is found in the append dataset';
put 'then records are closed out (or deleted) in the';
put 'append table where that variable= "Yes" */';
put ',LOADTARGET=YES /* set to anything but uppercase YES to switch off';
put 'target table load and generate temp tables only */';
put ',CLOSE_VARS=';
put '/*a problem with regular SCD2 or TXTEMPORAL loads is that there is';
put 'no facility to close out removed records (all records are';
put 'assumed new or changed). But how does one determine which';
put 'records are removed? Short of loading the entire table';
put 'each time? This parameter allows a set of variables';
put '(this should be a subset of the PK) to be declared, and';
put 'the macro will determine which records in the base table';
put 'need to be closed out ahead of the load.';
put 'For instance, given the following:';
put 'Base Table Staging Table';
put 'DATE ENTITY AMOUNT DATE ENTITY AMOUNT';
put 'JAN ACME4 66 JAN ACME4 66';
put 'FEB ACME4 99 FEB ACME4 99';
put 'FEB ACME1 22';
put 'By supplying DATE in CLOSE_VARS and DATE ENTITY as the PK,';
put 'the "FEB PAG 22" record would get closed out.';
put '*/';
put ',config_table=&dclib..MPE_CONFIG';
put ',dclib=&dc_libref';
put ',outds_del=work.outds_del';
put ',outds_add=work.outds_add';
put ',outds_mod=work.outds_mod';
put ',outds_audit=0';
put ');';
put '/* when changing this macro, update the version num here */';
put '%local ver;';
put '%let ver=32;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%dc_assignlib(WRITE,&base_lib) /* may not already be assigned */';
put '/* return straight away if nothing to load */';
put '%let nobs= %mf_getattrn(&append_lib..&append_dsn,NLOBS);';
put '%if &nobs=-1 %then %do;';
put 'proc sql noprint; select count(*) into: nobs from &append_lib..&append_dsn;';
put '%end;';
put '%if &nobs=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- Base dataset &append_lib..&append_dsn is empty. Nothing to upload!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/* hard exit if err condition exists */';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status;)';
put ')';
put '%local engine_type;';
put '%let engine_type=%mf_getengine(&base_lib);';
put '%if (&engine_type=REDSHIFT or &engine_type=POSTGRES) and %length(&CLOSE_VARS)>0';
put '%then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- CLOSE_VARS functionality not yet supported in &engine_type;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%return;';
put '%end;';
put '/**';
put '* The metadata functions (eg mf_existvar) will fail if the base table has a';
put '* SAS lock. So, make a snapshot of the base table for further use.';
put '* Also, make output tables (regardless).';
put '*/';
put '%local basecopy;';
put '%let basecopy=%mf_getuniquename(prefix=basecopy);';
put 'data &basecopy &outds_mod &outds_add &outds_del;';
put 'set &base_lib..&base_dsn;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (&syscc > 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after base table copy - aborting due to table lock)';
put ')';
put '%local cols idx_pk md5_col ;';
put '%let md5_col=___TMP___md5;';
put '%let check_uniqueness=%upcase(&check_uniqueness);';
put '%let RK_UPDATE_MAXKEYTABLE=%upcase(&RK_UPDATE_MAXKEYTABLE);';
put '%let high_date=%unquote(&high_date);';
put '%let loadtype=%upcase(&loadtype);';
put '/* ensure irrelevant variables are cleared */';
put '%if &loadtype=BUSTEMPORAL %then %do;';
put '%let tech_from=;';
put '%let tech_to=;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put '%let bus_from=;';
put '%let bus_to=;';
put '%end;';
put '/* ensure relevant variables are supplied */';
put '%mp_abort(iftrue=(&loadtype=BITEMPORAL & %mf_verifymacvars(bus_from bus_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing BUS_FROM / BUS_TO)';
put ')';
put '%mp_abort(iftrue=(&loadtype=TXTEMPORAL & %mf_verifymacvars(tech_from tech_to)=0)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Missing TECH_FROM / TECH_TO)';
put ')';
put '/**';
put '* drop any tables (may be defined as views or vice versa preventing overwrite)';
put '*/';
put '%mp_dropmembers(append bitemp0_append bitemp_cols)';
put '/* SQL Server requires its own time values */';
put '/* 9.2 will only give picture format down to seconds. 9.3 allows';
put 'milliseconds by using lower S and defining the decimal in the format name..*/';
put 'PROC FORMAT;';
put 'picture MyMSdt other=''%0Y-%0m-%0dT%0H:%0M:%0S'' (datatype=datetime);';
put 'RUN;';
put '%local dbnow;';
put '%let dbnow="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'data _null_;';
put '/* convert space separated macvar to comma separated for SQL processing */';
put 'call symputx(''PK_COMMA'',tranwrd(compbl("&pk"),'' '','',''),''L'');';
put 'call symputx(''PK_CNT'',countw("&pk",'' ''),''L'');';
put 'now=&dbnow;';
put 'call symputx(''NOW'',now,''L'');';
put 'call symputx(''SQLNOW'',cats("''",put(now,MyMSdt.),"''"),''L'');';
put 'length etlsource $100;';
put 'etlsource=subpad(symget(''etlsource''),1,100);';
put 'call symputx(''etlsource'',etlsource,''l'');';
put 'run;';
put '/**';
put '* Even if no PROCESSED var provided, assume that any variable named';
put '* PROCESSED_DTTM should be updated';
put '*/';
put '%if &processed=0 %then %do;';
put '%if %mf_existvar(&basecopy,PROCESSED_DTTM)';
put '%then %let processed=PROCESSED_DTTM;';
put '%else %let processed=;';
put '%end;';
put '/* extract colnames for md5 creation / change tracking */';
put 'proc contents noprint data=&base_lib..&base_dsn';
put 'out=work.bitemp_cols (keep=name type length varnum format:);';
put 'run;';
put 'proc sql noprint;';
put 'select name into: cols separated by '',''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put 'select case when type in (2,6) then cats(''put(md5(trim('',name,'')),$hex32.)'')';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put 'else cats(''put(md5(trim(put(ifn(missing(''';
put ',name,''),'',name,'','',name,''*1),binary64.))),$hex32.)'') end';
put 'into: stripcols separated by ''||''';
put 'from work.bitemp_cols';
put 'where upcase(name) not in';
put '(%upcase("&bus_from","&bus_to"';
put ',"&tech_from","&tech_to"';
put ',"&processed","&delete_col")) ;';
put '/* set default formats*/';
put '%let bus_from_fmt = datetime19.;';
put '%let bus_to_fmt = datetime19.;';
put '%let processed_fmt = datetime19.;';
put '%let tech_from_fmt = format=datetime19.;';
put '%let tech_to_fmt = format=datetime19.;';
put '%put &=stripcols;';
put '%put &=pk;';
put 'data _null_;';
put 'set work.bitemp_cols;';
put 'if type=2 or type=6 then do;';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'if format='''' then fmt=cats(length,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put 'if upcase(name)="%upcase(&bus_from)" then';
put 'call symputx(''bus_from_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&bus_to)" then';
put 'call symputx(''bus_to_fmt'',fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_from)" then';
put 'call symputx(''tech_from_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&tech_to)" then';
put 'call symputx(''tech_to_fmt'',"format="!!fmt,''L'');';
put 'else if upcase(name)="%upcase(&processed)" then';
put 'call symputx(''processed_fmt'',fmt,''L'');';
put 'run;';
put '%if %index(%quote(&cols),___TMP___) %then %do;';
put '%let msg=%str(Table contains a variable name containing "___TMP___".%trim(';
put ') This may conflict with temp variable generation!!);';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader);';
put '%let syscc=5;';
put '%return;';
put '%end;';
put '/* if transaction dates appear on the APPEND table, need to remove them */';
put '%local drop_tx_dates /* used in append table */';
put 'drop_tx_dates_noobs /* used to take the base table structure */;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_from)';
put '%then %let drop_tx_dates=&tech_from;';
put '%if %mf_existvar(&append_lib..&append_dsn, &tech_to)';
put '%then %let drop_tx_dates=&drop_tx_dates &tech_to;';
put '%if %length(%trim(&drop_tx_dates))>0';
put '%then %let drop_tx_dates=(drop=&drop_tx_dates);';
put '%if %mf_existvar(&basecopy, &tech_from)';
put '%then %let drop_tx_dates_noobs=&tech_from;';
put '%if %mf_existvar(&basecopy, &tech_to)';
put '%then %let drop_tx_dates_noobs=&drop_tx_dates_noobs &tech_to;';
put '%if %length(%trim(&drop_tx_dates_noobs))>0';
put '%then %let drop_tx_dates_noobs=(drop=&drop_tx_dates_noobs obs=0);';
put '%else %let drop_tx_dates_noobs=(obs=0);';
put '/**';
put '* Lock the table. This is necessary as we are doing a two part update (first';
put '* closing records then appending new records). It is theoretically possible';
put '* that an upload may occur whilst preparing the staging tables. And the';
put '* staging tables are about to be prepared..';
put '*/';
put '%if &LOADTARGET = YES %then %do;';
put '%put locking &base_lib..&base_dsn;';
put '%mp_lockanytable(LOCK,';
put 'lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%put locking &outds_audit;';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put '/* not an actual load, so avoid updating the max key table in next step. */';
put '%let rk_update_maxkeytable=NO;';
put '%end;';
put '%if %length(&RK_UNDERLYING)>0 %then %do;';
put '%mp_retainedkey(';
put 'base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=&append_lib';
put ',append_dsn=&append_dsn';
put ',retained_key=&pk';
put ',business_key=&rk_underlying';
put ',check_uniqueness=&CHECK_UNIQUENESS';
put ',outds=work.append';
put '%if &rk_update_maxkeytable=NO %then %do;';
put ',maxkeytable=0';
put '%end;';
put '%else %do;';
put ',maxkeytable=&dclib..&RK_MAXKEYTABLE';
put '%end;';
put ',locktable=&dclib..mpe_lockanytable';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',filter_str=%str( (where=( &now < &tech_to)) )';
put '%end;';
put ')';
put '%end;';
put '%else %do;';
put 'proc sql;';
put 'create view work.append as select * from &append_lib..&append_dsn;';
put '%end;';
put '/**';
put '* generate md5 for append table';
put '*/';
put '/* it is possible the source dataset has additional (unwanted) columns.';
put 'Drop if specified; */';
put '%if %length(&keepvars)>0 %then %do;';
put '/* remove tech dates from keepvars as they are generated later */';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_from ),%str( )));';
put '%let keepvars=%sysfunc(tranwrd(%str( &keepvars ),%str( &tech_to ),%str( )));';
put '%let keepvars=(keep=&keepvars &bus_from &bus_to &processed &md5_col);';
put '%end;';
put '/* CAS varchar types cause append issues here, so perform autoconvert';
put 'by creating empty local table first */';
put 'data;';
put 'set &base_lib..&base_dsn &drop_tx_dates_noobs;';
put 'run;';
put '%local emptybasetable; %let emptybasetable=&syslast;';
put 'data work.bitemp0_append &keepvars &outds_del(drop=&md5_col )';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put '/* apply formats for bitemporal vars but not tx dates which are added later */';
put '%if %length(&keepvars)>0 and &loadtype=BITEMPORAL %then %do;';
put 'format &bus_from &bus_from_fmt;';
put 'format &bus_to &bus_to_fmt;';
put '%end;';
put 'set &emptybasetable /* base table reqd in case append has fewer cols */';
put 'work.append &drop_tx_dates;';
put '%if %length(%str(&bus_from_override))>0 %then %do;';
put '&bus_from= %unquote(&bus_from_override) ;';
put '%end;';
put '%if %length(%str(&bus_to_override))>0 %then %do;';
put '&bus_to= %unquote(&bus_to_override) ;';
put '%end;';
put 'length &md5_col $32;';
put '&md5_col=put(md5(&stripcols),hex32.);';
put '%if %length(&processed)>0 %then %do;';
put 'format &processed &processed_fmt;';
put '&processed=&now;';
put '%end;';
put '/**';
put '* If a delete column exists then create the delete dataset';
put '*/';
put '%if %mf_existvar(&append_lib..&append_dsn, &delete_col) %then %do;';
put 'drop &delete_col;';
put 'if upcase(&delete_col) = "YES" then output &outds_del ;';
put 'else output work.bitemp0_append ;';
put 'run;';
put '%if %mf_getattrn(&outds_del,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=%scan(&outds_del,-1,.)';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '%else %do;';
put 'output work.bitemp0_append;';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc gt 0 at line 494)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%if %length(&close_vars)>0 %then %do;';
put '/**';
put '* need to close out records that are not provided';
put '*/';
put 'proc sql;';
put 'create table bitemp1_closevars1 as';
put 'select distinct a.%mf_getquotedstr(in_str=&pk,dlm=%str(,a.),quote=)';
put 'from &base_lib..&base_dsn a';
put 'inner join work.bitemp0_append b';
put 'on 1=1';
put '/* join on closevars key */';
put '%do idx_pk=1 %to %sysfunc(countw(&close_vars));';
put '%let idx_val=%scan(&close_vars,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* filter base on tech dates if necessary */';
put '%if &loadtype=TXTEMPORAL %then %do;';
put 'where a.&tech_from <=&now and &now < a.&tech_to';
put '%end;';
put ';';
put 'create table bitemp1_closevars2 as';
put 'select distinct a.*';
put 'from bitemp1_closevars1 a';
put 'left join work.bitemp0_append b';
put 'on 1=1';
put '/* join on primary key */';
put '%do idx_pk=1 %to %sysfunc(countw(&pk));';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '/* identify removed records by null value in a field in PK but not close_vars';
put '*/';
put 'where b.%scan(';
put '%mf_wordsInStr1ButNotStr2(Str1=&pk,Str2=&close_vars),1,%str( )';
put ') IS NULL';
put ';';
put '%if %mf_getattrn(bitemp1_closevars2,NLOBS)>0 %then %do;';
put '%bitemporal_closeouts(';
put 'tech_from=&tech_from';
put ',tech_to = &tech_to';
put ',base_lib=&base_lib';
put ',base_dsn=&base_dsn';
put ',append_lib=work';
put ',append_dsn=bitemp1_closevars2';
put ',PK=&bus_from &pk';
put ',NOW=&dbnow';
put ',loadtarget=&loadtarget';
put ',loadtype=&loadtype';
put ')';
put '%end;';
put '%end;';
put '/* return if nothing to load (was just deletes) */';
put '%if %mf_getattrn(work.bitemp0_append,NLOBS)=0 %then %do;';
put '%put NOTE:; %put NOTE-;%put NOTE-;%put NOTE-;';
put '%put NOTE- No updates - just deletes!;';
put '%put NOTE-;%put NOTE-;%put NOTE-;';
put '%end;';
put '/**';
put '* If applying manual overrides to business dates, then the input table MUST';
put '* be unique on the PK. Check, and if not - abort.';
put '*/';
put '%local msg;';
put '%if %length(&bus_from_override.&bus_to_override)>0 or &CHECK_UNIQUENESS=YES';
put '%then %do;';
put 'proc sort data=work.bitemp0_append out=work.bitemp0_check nodupkey;';
put 'by &pk;';
put 'run;';
put '%if %mf_getattrn(work.bitemp0_check,NLOBS)';
put 'ne %mf_getattrn(work.bitemp0_append,NLOBS)';
put '%then %do;';
put '%let msg=INPUT table &append_lib..&append_dsn is not unique on PK (&pk);';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE (&msg),';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_abort(msg=&msg,mac=bitemporal_dataloader.sas);';
put '%end;';
put '%end;';
put '/**';
put '* extract from BASE table. Only want matching records, as could be very BIG.';
put '* New records are subsequently identified via left join and test for nulls.';
put '*/';
put '%local temp_table temp_table2 base_table baselib_schema;';
put '%put DCNOTE: Extracting matching observations from &base_lib..&base_dsn;';
put '%if &engine_type=OLEDB %then %do;';
put '%let temp_table=##BITEMP_&base_dsn;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from [dbo].&base_dsn';
put 'where convert(datetime,&SQLNOW) < &tech_to );';
put '%else %let base_table=[dbo].&base_dsn;';
put 'proc sql;';
put 'create table &base_lib.."&temp_table"n as';
put 'select * from work.bitemp0_append;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '/* grab schema */';
put '%let baselib_schema=%mf_getschema(&base_lib);';
put '%if &baselib_schema.X ne X %then %let baselib_schema=&baselib_schema..;';
put '/* grab redshift config */';
put '%local redcnt; %let redcnt=0;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'data _null_;';
put 'set &config_table(where=(var_scope=''DCBL_REDSH'' and var_active=1));';
put 'x+1;';
put 'call symputx(cats(''rednm'',x),var_value,''l'');';
put 'call symputx(cats(''redval'',x),var_value,''l'');';
put 'call symputx(''redcnt'',x,''l'');';
put 'run;';
put '%end;';
put '/* cannot persist temp tables so must create a temporary permanent table */';
put '%let temp_table=%mf_getuniquename(prefix=XDCTEMP);';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=(select * from &baselib_schema.&base_dsn';
put 'where timestamp &sqlnow < &tech_to );';
put '%else %let base_table=&baselib_schema.&base_dsn;';
put '/* make empty table first - must clone & drop extra cols as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &temp_table (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &temp_table alter sortkey none) by myAlias;';
put '%end;';
put '%local dropcols;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(&pk)';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &temp_table drop column &idx_val;) by myAlias;';
put '%end;';
put 'exec (alter table &temp_table add column &md5_col varchar(32);) by myAlias;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp0/view=work.vw_bitemp0;';
put 'set work.bitemp0_append(keep=&pk &md5_col);';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&temp_table';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=work.vw_bitemp0 force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'create table work.bitemp0_base as select * from connection to myAlias(';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put '%let temp_table=CASUSER.%mf_getuniquename(prefix=DC);';
put 'data &temp_table;';
put 'set work.bitemp0_append;';
put 'run;';
put '%let bitemp0base=CASUSER.%mf_getuniquename(prefix=DC);';
put 'proc fedsql sessref=dcsession;';
put 'create table &bitemp0base{options replace=true} as';
put '%end;';
put '%else %do;';
put '%let temp_table=work.bitemp0_append;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then';
put '%let base_table=&base_lib..&base_dsn';
put '(where=(&tech_from <=&now and &now < &tech_to));';
put '%else %let base_table=&base_lib..&base_dsn;';
put 'proc sql;';
put 'create table work.bitemp0_base as';
put '%end;';
put 'select a.&md5_col /* this identifies NEW records */';
put ', b.*';
put '/* assume first PK field cannot be null (if defined in a PK constraint then';
put 'it definitely cannot be null) */';
put ', case when b.%scan(&pk,1) IS NULL then 1 else 0 end as ___TMP___NEW_FLG';
put 'from &baselib_schema.&temp_table a';
put 'left join &base_table b';
put 'on 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put '); proc sql; drop table &base_lib.."&temp_table"n;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put ';';
put 'quit;';
put 'data work.bitemp0_base;';
put 'set &bitemp0base;';
put 'run;';
put 'proc sql;';
put 'drop table &temp_table;';
put 'drop table &bitemp0base;';
put '%end;';
put '%else %do;';
put ';';
put '%end;';
put '/**';
put '* matching & changed records are those without NULL key values';
put '* &idx_val resolves to rightmost PK value (loop above)';
put '*/';
put '%put syscc (line525)=&syscc, sqlrc=&sqlrc;';
put '%mp_abort(iftrue= (&syscc gt 0 or &sqlrc>0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc sqlrc=&sqlrc)';
put ')';
put '%put hashcols2=&stripcols;';
put 'proc sql;';
put 'create table work.bitemp1_current(drop=___TMP___NEW_FLG) as';
put 'select *';
put ', put(md5(&stripcols),$hex32.) as &md5_col';
put 'from work.bitemp0_base (drop=&md5_col)';
put 'where ___TMP___NEW_FLG=0;';
put '/**';
put '* NEW records were identified in ___TMP___NEW_FLG in bitemp0_base';
put '*/';
put 'proc sql;';
put 'create table &outds_add';
put '(drop=&md5_col';
put '%if %mf_existvar(work.bitemp0_base, &delete_col) %then %do;';
put '&delete_col';
put '%end;';
put ')';
put 'as select a.*';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put ',&now as &tech_from &tech_from_fmt';
put ',&high_date as &tech_to &tech_to_fmt';
put '%end;';
put 'from work.bitemp0_append a /* STAGING records (mix of existing & new) */';
put ', work.bitemp0_base b /* BASE records (contains null values for new) */';
put 'where a.&md5_col=b.&md5_col /* took staging md5 across in left join */';
put 'and b.___TMP___NEW_FLG=1; /* NEW records also identified in bitemp0_base */';
put '/**';
put '* identify INSERTS. These are records with the same business key but';
put '* the bus_from and bus_to value are higher / lower (respectively)';
put '* such that the existing record needs to be SPLIT to surround the new';
put '* record.';
put '* eg: OLD RECORD from=1 to=10';
put '* NEW RECORD from=5 to=7';
put '*';
put '* APPENDED RECORDS:';
put '* - from=1 to=5';
put '* - from=5 to=7';
put '* - from=7 to=10';
put '*/';
put '/* inserts cannot happen with TXTEMPORAL */';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* IDENTIFY */';
put 'create table work.bitemp3_inserts as';
put 'select b.*';
put ',a.&bus_from as ___TMP___from';
put ',a.&bus_to as ___TMP___to';
put 'from work.bitemp0_append a';
put ',work.bitemp1_current b';
put 'where a.&bus_from > b.&bus_from';
put 'and a.&bus_to < b.&bus_to';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields may';
put 'not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '/* SPLIT */';
put 'data work.bitemp3a_inserts (drop=___TMP___from ___TMP___retain ___TMP___to) ;';
put 'set work.bitemp3_inserts;';
put 'by &pk &bus_from &bus_to &processed;';
put 'if first.&idx_val then do;';
put '___TMP___retain=&bus_to;';
put '&bus_to=___TMP___from;';
put 'output;';
put '&bus_to=___TMP___retain;';
put 'end;';
put 'if last.&idx_val then do;';
put '&bus_from=___TMP___to;';
put 'output;';
put 'end;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* TX temporal load */';
put 'data work.bitemp3a_inserts;';
put 'set work.bitemp1_current;';
put 'stop;';
put 'run;';
put '%end;';
put '/* APPEND */';
put 'proc sql;';
put 'create view work.bitemp3a_view as';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put 'data bitemp3b_newbase;';
put 'set work.bitemp3a_inserts work.bitemp3a_view;';
put 'run;';
put '/** do not use! this converts short numerics into 8 bytes';
put 'proc sql;';
put 'create table work.bitemp3b_newbase as';
put 'select * from work.bitemp3a_inserts';
put 'union corr';
put 'select * from work.bitemp1_current';
put 'where &md5_col not in (select &md5_col from work.bitemp3a_inserts);';
put '*/';
put '/**';
put '* identify CHANGED records from staging.';
put '* Same business key with different temporal dates or md5 value';
put '* This table must be overlayed onto / into existing business history';
put '*/';
put 'proc sql;';
put 'create table work.bitemp4_updated as select distinct a.*';
put 'from work.bitemp0_append a';
put ',work.bitemp3b_newbase b';
put 'where 1=1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'and ( a.&md5_col ne b.&md5_col';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put 'OR (a.&bus_from ne b.&bus_from or a.&bus_to ne b.&bus_to)';
put '%end;';
put ')';
put ';';
put '/**';
put '* This section would have been one simple step with union all';
put '* but that converts short numerics into 8 bytes!';
put '* so, convoluted alternative to retain the same functionality.';
put '*/';
put '/* base records */';
put 'create view work.bitemp4_prep1 as';
put 'select ''BASE'' as ___TMP___';
put ',b.*';
put 'from work.bitemp4_updated a';
put ',work.bitemp3b_newbase b';
put 'where 1';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put ';';
put '/* updated records */';
put 'create view work.bitemp4_prep2 as';
put 'select ''STAG'' as ___TMP___ ,*';
put 'from work.bitemp4_updated;';
put '/* ensure we only keep columns that appear in both */';
put '%local bp1 bp2 bp3 bp4;';
put '%let bp1=%mf_getvarlist(bitemp4_prep1);';
put '%let bp2=%mf_getvarlist(bitemp4_prep2);';
put '%let bp3=%mf_wordsInStr1ButNotStr2(Str1=&bp1,Str2=&bp2);';
put '%let bp4=%mf_wordsInStr1ButNotStr2(Str1=&bp2,Str2=&bp1);';
put 'data work.bitemp4_prep3/view=bitemp4_prep3;';
put 'set bitemp4_prep1 bitemp4_prep2;';
put '%if %length(XX&bp3&bp4)>2 %then %do;';
put 'drop &bp3 &bp4 ;';
put '%end;';
put 'run;';
put '/* remove duplicates */';
put 'proc sql;';
put 'create table work.bitemp4a_allrecs as';
put 'select distinct *';
put 'from work.bitemp4_prep3';
put 'order by';
put '/* compress blanks and then insert commas (as the datetime fields';
put 'may not be in use) */';
put '%sysfunc(tranwrd(%sysfunc(compbl(';
put '&pk &bus_from &bus_to &processed';
put ')),%str( ), %str(,)))';
put ';';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* this section aligns the business dates';
put '(eg for inserts or overlaps in the range) */';
put 'data work.bitemp4b_firstpass (drop=___TMP___cond ___TMP___from ___TMP___to );';
put 'set work.bitemp4a_allrecs;';
put 'by &pk &bus_from &bus_to &processed;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '___TMP___md5lag=lag(&md5_col);';
put '/* reset retained variables */';
put 'if first.&idx_val then do;';
put 'call missing (___TMP___cond, ___TMP___from, ___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry forward bus_from (and bus_to if higher)*/';
put 'if &md5_col=___TMP___md5lag then do;';
put '&bus_from=___TMP___from;';
put 'if &bus_to<___TMP___to then &bus_to=___TMP___to;';
put 'end;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 1'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 1'' then do;';
put '/* else ensure bus_from starts from prior record bus_to */';
put 'if &md5_col ne ___TMP___md5lag and &bus_from <= ___TMP___to';
put 'then &bus_from= ___TMP___to;';
put '/* new record may replace old record entirely */';
put 'if &bus_to <= &bus_from then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put 'run;';
put '%end;';
put '%else %do;';
put '/* keep staged records only */';
put 'data work.bitemp4b_firstpass;';
put 'set work.bitemp4a_allrecs;';
put 'if ___TMP___=''STAG'';';
put 'run;';
put '%end;';
put '/* next phase is to pass through in reverse - so set up the sort statement */';
put '%local byvar;';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let byvar=&byvar descending %scan(&pk,&idx_pk);';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL';
put '%then %let byvar=&byvar descending &bus_from descending &bus_to;';
put '/* if matching bus dates supplied, need to ensure we also have a sort';
put 'between BASE and STAGING tables */';
put '%let byvar=&byvar descending ___TMP___;';
put 'proc sort data=work.bitemp4b_firstpass out=work.bitemp4c_sort ;';
put 'by &byvar;';
put 'run;';
put '/**';
put '* Now (in reverse) pass back business start dates';
put '*/';
put 'data work.bitemp4d_secondpass;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put '&tech_from=&now;';
put '&tech_to=&high_date;';
put '%end;';
put 'set work.bitemp4c_sort ;';
put 'by &byvar;';
put 'retain ___TMP___cond ''Name of Condition'';';
put 'retain ___TMP___from ___TMP___to 0;';
put '%if &loadtype=BITEMPORAL or &loadtype=BUSTEMPORAL %then %do;';
put '/* put / _all_ /;*/';
put '___TMP___md5lag=lag(&md5_col);';
put 'if first.&idx_val then do;';
put '/* reset retained variables */';
put 'call missing (___TMP___cond,___TMP___from,___TMP___to,___TMP___md5lag);';
put 'end;';
put 'else do;';
put '/* if record is identical, carry back bus_to */';
put 'if &md5_col=___TMP___md5lag then &bus_to=___TMP___to;';
put 'end;';
put 'if ___TMP___=''STAG'' then do;';
put '/* need to carry forward the closing record */';
put '___TMP___cond=''Condition 2'';';
put 'end;';
put 'else if ___TMP___cond=''Condition 2'' then do;';
put '/* else ensure bus_to stops at subsequent record bus_from */';
put 'if &md5_col ne ___TMP___md5lag and &bus_to >= ___TMP___from';
put 'then &bus_to= ___TMP___from;';
put '/* new record may replace old record entirely */';
put 'if &bus_from >= &bus_to then delete;';
put 'if &bus_from=___TMP___from and &bus_to=___TMP___to then delete;';
put 'else call missing (___TMP___cond, ___TMP___from, ___TMP___to);';
put 'end;';
put '___TMP___from=&bus_from;';
put '___TMP___to=&bus_to;';
put '%end;';
put 'run;';
put '%put syscc (line600)=&syscc;';
put '/**';
put 'There may still be some records (eg old business history) which have not';
put 'changed.';
put 'Need to identify these and remove from the append so they are not updated';
put 'unnecessarily. This is done by generating a new md5 (which INCLUDES the';
put 'business key) and any matching / identical records are split out (from those';
put 'that need to be updated).';
put '*/';
put '%if &loadtype=BITEMPORAL %then %do;';
put '%let cat_string=catx(''|'' ,&bus_from,&bus_to);';
put 'data bitemp5a_lkp (keep=&md5_col);';
put 'set bitemp0_base;';
put '/* for BITEMPORAL we need to compare business dates also */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.);';
put 'run;';
put 'data bitemp5b_updates;';
put 'set bitemp4d_secondpass;';
put 'if _n_=1 then do;';
put 'dcl hash md5_lkp(dataset:''bitemp5a_lkp'');';
put 'md5_lkp.definekey("&md5_col");';
put 'md5_lkp.definedone();';
put 'end;';
put '/* drop old md5 col as will rebuild with new business dates */';
put '&md5_col=put(md5(&cat_string!!''|''!!&stripcols),$hex32.) ;';
put 'if md5_lkp.check()=0 then delete;';
put 'run;';
put 'proc sql;';
put '/* get min bus from as will update (close out) all records from this point';
put '(for that PK)*/';
put 'create table work.bitemp5d_subquery as';
put 'select &pk_comma, min(&bus_from)as &bus_from, max(&bus_to) as &bus_to';
put 'from work.bitemp5b_updates';
put 'group by &pk_comma;';
put '/* index has a huge efficiency impact on upcoming nested subquery */';
put 'create index index1 on work.bitemp5d_subquery(&pk_comma,&bus_from, &bus_to);';
put '%let lastds=work.bitemp5b_updates;';
put '%end;';
put '%else %if &loadtype=TXTEMPORAL or &loadtype=UPDATE %then %do;';
put 'proc sql;';
put 'create table work.bitemp5d_subquery as';
put 'select distinct &pk_comma';
put 'from bitemp4d_secondpass;';
put '%let lastds=work.bitemp4d_secondpass;';
put '%end;';
put '%else %let lastds=work.bitemp4d_secondpass;';
put '/* create single append table (an overlapped pre-sert may be classed as';
put 'both an update AND a new record). Also create temp views that may be';
put 'used for pre-load analysis. */';
put 'data &outds_mod;';
put 'set &lastds(drop=___TMP___: &md5_col);';
put 'run;';
put 'data bitemp6_allrecs / view=bitemp6_allrecs;';
put 'set &outds_mod /* UPDATED records */';
put '&outds_add /* NEW records */;';
put 'run;';
put 'proc sort data=work.bitemp6_allrecs';
put 'out=work.bitemp6_unique';
put 'noduprec';
put 'dupout=work.xx_BADBADBAD;';
put 'by _all_;';
put 'run;';
put '/* we have all our temp tables now so exit if this is all that is needed */';
put '%if &LOADTARGET ne YES %then %return;';
put '/* also exit if an err condition exists */';
put '%if &syscc>0 %then %do;';
put '%put syscc=&syscc;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%if "&outds_audit" ne "0" %then %do;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(Bitemporal transform / job aborted due to SYSCC=&SYSCC status)';
put ')';
put '/* final check - abort if a lock has appeared on the target or audit table */';
put '%mp_lockfilecheck(libds=&base_lib..&base_dsn)';
put '%if %mf_existds(&outds_audit) %then %do;';
put '%mp_lockfilecheck(libds=&outds_audit)';
put '%end;';
put '/**';
put '* STAGING TABLES PREPARED, ERR CONDITION TESTED FOR.. NOW TO LOAD!!';
put '*/';
put '/**';
put '* First, CLOSE OUT changed records (if not a REPLACE)';
put '* Note that SAS does not support ANSI standard for UPDATE with a join condition.';
put '* However - this can be worked around using a nested subquery..';
put '*/';
put 'data _null_;';
put 'putlog "&sysmacroname: CLOSEOUTS commencing";';
put 'run;';
put '%if %mf_getattrn(&lastds,NLOBS)=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: No closeouts needed";';
put 'run;';
put '%end;';
put '%else %if &engine_type=CAS %then %do;';
put '%mp_abort(iftrue= (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL)';
put ',mac=&sysmacroname in &_program';
put ',msg=%str(&loadtype not yet supported in CAS engine)';
put ')';
put '/* create temp table for deletions */';
put '%local delds;%let delds=%mf_getuniquename(prefix=DC);';
put 'data casuser.&delds;';
put 'set work.bitemp5d_subquery;';
put 'run;';
put '/* delete the records */';
put 'proc cas ;';
put 'table.deleteRows / table={';
put 'caslib="&base_lib",';
put 'name="&base_dsn",';
put 'where="1=1",';
put 'whereTable={caslib=''CASUSER'',name="&delds"}';
put '};';
put 'quit;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&delds;';
put '%end;';
put '%else %if (&loadtype=BITEMPORAL or &loadtype=TXTEMPORAL or &loadtype=UPDATE)';
put '%then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: &loadtype operation using &engine_type engine";';
put 'run;';
put '%local flexinow;';
put 'proc sql;';
put '/* if OLEDB then create a temp table for efficiency */';
put '%local innertable;';
put '%if &engine_type=OLEDB %then %do;';
put '%let innertable=[##BITEMP_&base_dsn];';
put '%let top_table=[dbo].&base_dsn;';
put '%let flexinow=&SQLNOW;';
put 'create table &base_lib.."##BITEMP_&base_dsn"n as';
put 'select * from work.bitemp5d_subquery;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put '%let innertable=%mf_getuniquename(prefix=XDCTEMP);';
put '%let top_table=&baselib_schema.&base_dsn;';
put '%let flexinow=timestamp &SQLNOW;';
put '/* make empty table first - must clone & drop extra cols';
put 'as autoload is bad */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'exec (create table &innertable (like &baselib_schema.&base_dsn)) by myAlias;';
put '%if &engine_type=REDSHIFT %then %do;';
put 'exec (alter table &innertable alter sortkey none) by myAlias;';
put '%end;';
put '%let dropcols=%mf_wordsinstr1butnotstr2(';
put 'str1=%upcase(%mf_getvarlist(&basecopy))';
put ',str2=%upcase(%mf_getvarlist(work.bitemp5d_subquery))';
put ');';
put '%if %length(&dropcols>0) %then %do idx_pk=1 %to %sysfunc(countw(&dropcols));';
put '%put &=dropcols;';
put '%let idx_val=%scan(&dropcols,&idx_pk);';
put 'exec(alter table &innertable drop column &idx_val;) by myAlias;;';
put '%end;';
put '/* create view to strip formats and avoid warns in log */';
put 'data work.vw_bitemp5d/view=work.vw_bitemp5d;';
put 'set work.bitemp5d_subquery;';
put 'format _all_;';
put 'run;';
put 'proc append base=&base_lib..&innertable (';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put 'data=work.vw_bitemp5d force nowarn;';
put 'run;';
put '/* open up a connection for pass through SQL */';
put '%dc_assignlib(WRITE,&base_lib,passthru=myAlias)';
put 'execute(';
put '%end;';
put '%else %do;';
put '%let innertable=bitemp5d_subquery;';
put '%let top_table=&base_lib..&base_dsn;';
put '%let flexinow=&now;';
put '%end;';
put '%if &loadtype=BITEMPORAL or &loadtype=TXTEMPORAL %then %do;';
put 'update &top_table set &tech_to=&flexinow';
put '%if %length(&processed)>0 %then %do;';
put ',&processed=&flexinow';
put '%end;';
put 'where &tech_from <= &flexinow and &flexinow < &tech_to and';
put '%end;';
put '%else %if &loadtype=UPDATE %then %do;';
put '/* changed records are deleted then re-appended when doing UPDATEs */';
put 'delete from &top_table where';
put '%end;';
put '%else %do;';
put '%put %str(ERR)OR: BUSTEMPORAL NOT YET SUPPORTED;';
put '%let syscc=5;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%goto end_of_macro;';
put '%end;';
put '/* perform join inside query as per';
put 'http://stackoverflow.com/questions/24629793/update-with-a-proc-sql */';
put 'exists( select 1 from &baselib_schema.&innertable where';
put '/* loop PK join */';
put '%do idx_pk=1 %to &pk_cnt;';
put '%let idx_val=%scan(&pk,&idx_pk);';
put '&base_dsn..&idx_val=&innertable..&idx_val and';
put '%end;';
put '%if &loadtype=BITEMPORAL %then %do;';
put '&base_dsn..&bus_from >= &innertable..&bus_from';
put 'and &base_dsn..&bus_to <= &innertable..&bus_to and';
put '%end;';
put '/* close the statement */';
put '1=1);';
put '%if &engine_type=OLEDB or &engine_type=REDSHIFT or &engine_type=POSTGRES';
put '%then %do;';
put ') by myAlias;';
put 'execute (drop table &baselib_schema.&innertable) by myAlias;';
put '%end;';
put '%end;';
put 'quit;';
put 'data _null_;';
put 'putlog "&sysmacroname: Closeout complete";';
put 'run;';
put '/**';
put '* Append the new / updated records';
put '*/';
put '%if &engine_type=CAS %then %do;';
put '/* get varchar variables ready for casting */';
put '%local vcfmt vcrename vcassign vcdrop;';
put 'data _null_;';
put 'set work.bitemp_cols(where=(type=6)) end=last;';
put 'length vcrename vcassign vcdrop vcfmt $32767 rancol $32;';
put 'retain vcrename vcassign vcdrop vcfmt;';
put 'if _n_=1 then vcrename=''(rename=('';';
put 'rancol=resolve(''%mf_getuniquename()'');';
put 'vcfmt=trim(vcfmt)!!''length ''!!cats(name)!!'' varchar(*);'';';
put 'vcrename=trim(vcrename)!!'' ''!!cats(name,''='',rancol);';
put 'vcassign=cats(vcassign,name,''='',rancol,'';'');';
put 'vcdrop=cats(vcdrop,''drop ''!!rancol,'';'');';
put 'if last then do;';
put 'vcrename=cats(vcrename,''))'');';
put 'call symputx(''vcfmt'',vcfmt);';
put 'call symputx(''vcrename'',vcrename);';
put 'call symputx(''vcassign'',vcassign);';
put 'call symputx(''vcdrop'',vcdrop);';
put 'end;';
put 'run;';
put '/* prepare a temp cas table with varchars casted */';
put '%let tmp=%mf_getuniquename();';
put 'data casuser.&tmp ;';
put '&vcfmt';
put 'set work.bitemp6_unique &vcrename;';
put '&vcassign';
put '&vcdrop';
put 'run;';
put '/* load the table with varchars applied*/';
put 'data &base_lib..&base_dsn (append=yes )/sessref=dcsession ;';
put 'set casuser.&tmp;';
put 'run;';
put '/* drop temp table */';
put 'proc sql;';
put 'drop table CASUSER.&tmp;';
put '/* this code will not work as regular tables do not have varchars */';
put '/*';
put 'proc casutil;';
put 'load data=work.bitemp6_unique';
put 'outcaslib="&base_lib" casout="&base_dsn" append ;';
put 'quit;';
put '*/';
put '%end;';
put '%else %if &engine_type=REDSHIFT or &engine_type=POSTGRES %then %do;';
put 'proc append base=&base_lib..&base_dsn';
put '%if &engine_type=REDSHIFT %then %do;';
put '(';
put '%do idx_pk=1 %to &redcnt;';
put '&&rednm&idx_pk = &&redval&idxpk';
put '%end;';
put ')';
put '%end;';
put 'data=bitemp6_unique force nowarn;';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc append base=&base_lib..&base_dsn data=bitemp6_unique force nowarn; run;';
put '%end;';
put '%mp_lockanytable(UNLOCK,lib=&base_lib,ds=&base_dsn,ref=&ETLSOURCE,';
put 'ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '/* final check on syscc */';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=&_program';
put ',msg=%str(!!Upload NOT successful!! Failed on actual update / append stage..)';
put ')';
put '%if &outds_audit ne 0 and &LOADTARGET=YES %then %do;';
put 'data work.vw_outds_orig /view=work.vw_outds_orig;';
put 'set work.bitemp0_base (drop=&md5_col);';
put 'where ___TMP___NEW_FLG=0;';
put 'drop ___TMP___NEW_FLG;';
put 'run;';
put '/* update the AUDIT table */';
put '%if %mf_existds(&outds_audit) %then %do;';
put 'options mprint;';
put '%mp_storediffs(&base_lib..&base_dsn';
put ',work.vw_outds_orig';
put ',&pk &bus_from';
put ',delds=&outds_del';
put ',modds=&outds_mod';
put ',appds=&outds_add';
put ',outds=work.mp_storediffs';
put ',processed_dttm=&now';
put ',loadref=%superq(etlsource)';
put ')';
put '/* exclude unchanged values in modified rows */';
put 'data work.mp_storediffs;';
put 'set work.mp_storediffs;';
put 'if MOVE_TYPE="M" and IS_PK=0 and IS_DIFF=0 then delete;';
put '* putlog load_ref= libref= dsn= key_hash= tgtvar_nm=;';
put 'run;';
put 'proc append base=&outds_audit data=work.mp_storediffs;';
put 'run;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&outds_audit,1,.)';
put ',ds=%scan(&outds_audit,2,.)';
put ',ref=&ETLSOURCE';
put ',ctl_ds=&dclib..mpe_lockanytable';
put ')';
put '%end;';
put '%end;';
put '%mp_abort(iftrue= (&syscc >4)';
put ',mac=bitemporal_dataloader';
put ',msg=%str(Problem in audit stage (&outds_audit))';
put ')';
put '%let user=%mf_getUser();';
put '/**';
put 'Notify as appropriate EMAILS DISABLED';
put '%sumo_alerts(ALERT_EVENT=UPDATE';
put ', ALERT_TARGET=&base_lib..&base_dsn';
put ', from_user= &user);';
put '*/';
put '/* monitor BiTemporal usage */';
put '%if &log=1 %then %do;';
put '%put syscc=&syscc;';
put '/* do not perform duration calc in pass through */';
put '%local dur;';
put 'data _null_;';
put 'now=symget(''now'');';
put 'dur=%sysfunc(datetime())-&now;';
put 'call symputx(''dur'',dur,''l'');';
put 'run;';
put 'proc sql;';
put 'insert into &dclib..mpe_dataloads';
put 'set libref=%upcase("&base_lib")';
put ',DSN=%upcase("&base_dsn")';
put ',ETLSOURCE="&ETLSOURCE"';
put ',LOADTYPE="&loadtype"';
put ',CHANGED_RECORDS=%mf_getattrn(&lastds,NLOBS)';
put ',NEW_RECORDS=%mf_getattrn(&outds_add,NLOBS)';
put ',DELETED_RECORDS=%mf_getattrn(&outds_del,NLOBS)';
put ',DURATION=&dur';
put ',MAC_VER="v&ver"';
put ',user_nm="&user"';
put ',PROCESSED_DTTM=&now;';
put 'quit;';
put '%put syscc=&syscc;';
put '%end;';
put '%end_of_macro:';
put '%mend bitemporal_dataloader;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mpe_refreshlibs(lib=0);';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data libs0;';
put 'set mm_getlibs;';
put 'by libraryref;';
put '%if &lib ne 0 %then %do;';
put 'where upcase(libraryref)="%upcase(&lib)";';
put '%end;';
put 'if "%mf_getplatform()"="SASMETA" then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings */';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sql;';
put 'create table libs1 as';
put 'select distinct libname';
put ',engine';
put ',path';
put ',level';
put ',sysname';
put ',sysvalue';
put 'from dictionary.libnames';
put 'order by libname, level,engine,path;';
put 'data libs2;';
put 'set libs1;';
put 'length tran $1024;';
put 'if missing(sysname) then sysname=''Missing'';';
put 'select(sysname);';
put 'when(''Access Permission'') tran=''Permissions'';';
put 'when(''Owner Name'') tran=''Owner'';';
put 'when(''Schema/Owner'') tran=''schema'';';
put 'otherwise tran=sysname;';
put 'end;';
put 'run;';
put 'proc transpose data=libs2 out=libs3;';
put 'by libname level engine path;';
put 'var sysvalue;';
put 'id tran;';
put 'run;';
put 'data libs4(rename=(libname=libref));';
put 'length paths $8192 perms owners schemas $500 permissions owner schema $1024;';
put 'if _n_=1 then call missing (of _all_);';
put 'set libs3;';
put 'by libname;';
put 'if engine=''V9'' then engine=''BASE'';';
put 'if first.libname then do;';
put 'retain paths perms owners schemas;';
put 'paths=''(''!!quote(trim(path));';
put 'perms=permissions;';
put 'owners=owner;';
put 'schemas=schema;';
put 'end;';
put 'else do;';
put 'paths=trim(paths)!!'' ''!!quote(trim(path));';
put 'perms=trim(perms)!!'',''!!trim(permissions);';
put 'owners=trim(owners)!!'',''!!trim(owner);';
put 'schemas=trim(schemas)!!'' ''!!trim(schema);';
put 'end;';
put 'if last.libname then do;';
put 'paths=trim(paths)!!'')'';';
put 'schemas=cats(schemas);';
put 'output;';
put 'end;';
put 'keep libname engine paths perms owners schemas;';
put 'run;';
put 'proc sql;';
put 'create table libs5 as';
put 'select a.libref';
put ',coalescec(b.engine,a.engine) as engine length=32';
put ',b.libraryname as libname';
put ',a.paths';
put ',a.perms';
put ',a.owners';
put ',a.schemas';
put ',b.libraryid as libid';
put 'from libs4 a';
put 'left join libs0 b';
put 'on upcase(a.libref)=upcase(b.libraryref)';
put 'where libref not in (''SASWORK'',''WORK'',''SASUSER'',''CASUSER'',''TEMP'',''STPSAMP''';
put ',''MAPSGFK'');';
put '%bitemporal_dataloader(base_lib=&dc_libref';
put ',base_dsn=MPE_DATACATALOG_LIBS';
put ',append_dsn=libs5';
put ',PK=LIBREF';
put ',etlsource=&_program';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&dc_libref';
put ')';
put '%mend mpe_refreshlibs;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mpe_refreshtables(lib,ds=#all);';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%local engine; %let engine=%mf_getengine(&lib);';
put '%local schema; %let schema=%mf_getschema(&lib);';
put '%put running &sysmacroname &lib(&engine &schema) for &ds;';
put 'proc sql;';
put 'create table cols as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib cols extraction)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc afer &lib indexes extraction)';
put ')';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.indexes as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table finalcols as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.indexes b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%local dsn;';
put '%if &ds = #ALL %then %let dsn=;';
put '%mp_getconstraints(lib=&lib.,ds=&dsn,outds=work.constraints)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table work.pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.constraints';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table work.sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.constraints(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.constraints(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table work.pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from work.sum a';
put 'left join work.constraints(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table work.pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data work.finalpks;';
put 'set pkdefault pk4sure pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table finalcols as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.cols a';
put 'left join work.finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* load columns */';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_vars';
put ',append_dsn=finalcols';
put ',PK=LIBREF DSN NAME';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF DSN';
put '%end;';
put ',dclib=&mpelib';
put ')';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.tabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data tabs2;';
put 'set finalcols;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table work.finaltabs as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.tabs a';
put 'left join work.tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datacatalog_tabs';
put ',append_dsn=finaltabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '/* prepare table frequently changing attributes */';
put 'proc sql;';
put '%if &engine=SQLSVR %then %do;';
put 'connect using &lib;';
put 'create table work.attrs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(schema_id) as ''schema'', name, create_date, modify_date';
put 'FROM sys.tables ;';
put ');';
put 'create table work.nobs as select * from connection to &lib(';
put 'SELECT SCHEMA_NAME(A.schema_id) AS ''schema''';
put ',A.Name, AVG(B.rows) AS ''RowCount''';
put 'FROM sys.objects A';
put 'INNER JOIN sys.partitions B ON A.object_id = B.object_id';
put 'WHERE A.type = ''U''';
put 'GROUP BY A.schema_id, A.Name';
put ');';
put 'disconnect from &lib;';
put 'create table statustabs as select';
put 'a.libref';
put ',a.dsn';
put ',b.create_date as crdate';
put ',b.modify_date as modate';
put ',. as filesize';
put ',c.RowCount as nobs';
put 'from work.tabs a';
put 'left join work.attrs(where=(schema="&schema")) b';
put 'on upcase(a.dsn)=upcase(b.name)';
put 'left join work.nobs(where=(schema="&schema")) c';
put 'on upcase(a.dsn)=upcase(c.name);';
put '%end;';
put '%else %do;';
put 'create table statustabs as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',crdate';
put ',modate';
put ',filesize';
put ',nobs';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne #ALL %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%end;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_tabs';
put ',append_dsn=statustabs';
put ',PK=LIBREF DSN';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put '%if &ds ne #ALL %then %do;';
put ',close_vars=LIBREF';
put '%end;';
put ')';
put '%if &ds = #ALL %then %do;';
put 'proc sql;';
put 'create table statuslibs as select';
put 'libref';
put ',sum(filesize) as libsize';
put ',count(*) as table_cnt';
put 'from statustabs';
put 'group by 1;';
put '%bitemporal_dataloader(base_lib=&mpelib';
put ',base_dsn=mpe_datastatus_libs';
put ',append_dsn=statuslibs';
put ',PK=LIBREF';
put ',etlsource=&sysmacroname';
put ',loadtype=TXTEMPORAL';
put ',tech_from=TX_FROM';
put ',tech_to=TX_TO';
put ',dclib=&mpelib';
put ')';
put '%end;';
put '%mend mpe_refreshtables;';
put '%macro dc_refreshcatalog();';
put '%mpe_refreshlibs()';
put 'filename executor catalog ''work.code.code.source'';';
put 'data libraries;';
put 'set &mpelib..mpe_datacatalog_libs;';
put 'where &dc_dttmtfmt. le TX_TO;';
put 'file executor;';
put 'str=cats(''%mpe_refreshtables('',libref,'')'');';
put 'put str;';
put 'putlog str;';
put 'run;';
put '%inc executor;';
put '%mend dc_refreshcatalog;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file refreshlibinfo.sas';
put '@brief Refresh the Data Catalog for a particular library';
put '@details When showing library info in the VIEW menu, the data is taken from';
put 'the Data Catalog tables. These may be empty or outdated, and so this service';
put 'allows end users to run a refresh of the data.';
put ' Service Inputs
';
put ' lib2refresh
';
put 'Should contain the libref to be refreshed.';
put '|libref:$8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' libinfo
';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_refreshcatalog.sas';
put '@li mp_abort.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%webout(FETCH)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem on startup)';
put ')';
put '%let libref=;';
put 'data _null_;';
put 'set work.lib2refresh;';
put 'call symputx(''libref'',libref);';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem with inputs - was lib2refresh object sent?)';
put ')';
put '%dc_assignlib(WRITE,&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc after lib assignment)';
put ')';
put '%dc_refreshcatalog(&libref)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',msg=%str(syscc=&syscc Problem when running the catalog refresh)';
put ')';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'b.libsize,';
put 'b.table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'inner join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&libref";';
put '%webout(OPEN)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=registeruser;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file registeruser.sas';
put '@brief Registers a new user in Data Controller';
put '@details New users are logged after accepting EULA terms.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let userid=%mf_getuser();';
put '/* confirm the user is not registered */';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%mp_abort(iftrue= (&isregistered > 0)';
put ',mac=&_program..sas';
put ',msg=%str(User &userid is already registered on &mpelib..mpe_users!)';
put ')';
put 'data work.append;';
put 'if 0 then set &mpelib..mpe_users;';
put 'user_id=symget(''userid'');';
put 'registered_dt=today();';
put 'last_seen_dt=today();';
put 'run;';
put 'proc append base=&mpelib..mpe_users data=work.append;';
put '%let isRegistered=0;';
put 'proc sql noprint;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '%mp_abort(iftrue= (&syscc ne 0 or &isregistered ne 1)';
put ',mac=&_program..sas';
put ',msg=%str(Problem appending to &mpelib..mpe_users table)';
put ')';
put 'data work.return;';
put 'msg=''SUCCESS'';';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,return)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=startupservice;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file startupservice.sas';
put '@brief List the libraries and tables the mp-editor user can access';
put '@details If user is in a control group (&mpeadmins, configured in mpeinit.sas)';
put 'then they have access to all libraries / tables. Otherwise a join is made';
put 'to the &mpelib..mpe_security table.';
put ' SAS Macros
';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue on startup in startupService)';
put ')';
put '%let userid=%mf_getuser();';
put '%put userid is &userid;';
put '%mpe_getgroups(user=&userid,outds=groups)';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Issue with Groups syscc=&syscc for user &userid)';
put ')';
put '/* check if user is an admin */';
put '%let admin_check=0;';
put 'proc sql noprint;';
put 'select count(*) into: admin_check';
put 'from groups';
put 'where groupname="&mpeadmins";';
put '/* check if user is registered or not */';
put '%let isRegistered=0;';
put 'select count(*) into: isregistered';
put 'from &mpelib..mpe_users';
put 'where user_id="&userid";';
put '/* get number of registered users */';
put '%let registerCount=0;';
put 'select count(*) into: registercount';
put 'from &mpelib..mpe_users';
put 'where last_seen_dt>%sysfunc(today())-365;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem accessing &mpelib..mpe_users table)';
put ')';
put '%global dc_restrict_editrecord;';
put 'data work.globvars;';
put 'dclib="&mpelib";';
put 'sas9lineage_enabled=1;';
put 'isadmin=&admin_check;';
put 'isregistered=&isregistered;';
put 'registercount=®isterCount;';
put 'dc_admin_group="&mpeadmins";';
put '/* fetched from mpe_config in dc_getsettings */';
put 'licence_key="&dc_licence_key";';
put 'activation_key="&dc_activation_key";';
put 'dc_restrict_editrecord="&dc_restrict_editrecord";';
put 'run;';
put '%macro mstp_mpeditorstartup();';
put 'data _null_;';
put 'putlog "entering &sysmacroname";';
put 'run;';
put 'proc sql noprint;';
put '/* update last seen, if seen */';
put '%if &isregistered>0 %then %do;';
put 'update &mpelib..mpe_users';
put 'set last_seen_dt=%sysfunc(today())';
put 'where user_id="&userid";';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem updating &mpelib..mpe_users table)';
put ')';
put '%local all_cnt;';
put 'select count(*) into: all_cnt';
put 'from &mpelib..mpe_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and ACCESS_LEVEL in (''EDIT'')';
put 'and libref=''*ALL*''';
put 'and SAS_GROUP in (select groupname from groups);';
put '%if &admin_check >0 or &all_cnt>0 %then %do;';
put 'create table sasDatasets as';
put 'select distinct libref, dsn';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. lt tx_to';
put 'order by 1;';
put '%end;';
put '%else %do;';
put 'create table sasDatasets as';
put 'select distinct a.libref,a.dsn';
put 'from &mpelib..mpe_tables a';
put 'left join &mpelib..mpe_security b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn';
put 'where &dc_dttmtfmt. lt a.tx_to';
put 'and &dc_dttmtfmt. lt b.tx_to';
put 'and b.ACCESS_LEVEL in (''EDIT'')';
put 'and b.SAS_GROUP in (select groupname from groups)';
put 'order by 1;';
put '%end;';
put '%mend mstp_mpeditorstartup;';
put '%mstp_mpeditorstartup()';
put 'create table saslibs as';
put 'select distinct libref';
put 'from &syslast;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(issue with security validation)';
put ')';
put 'proc sql;';
put 'create table work.xlmaps as';
put 'select distinct a.XLMAP_ID';
put ',b.XLMAP_DESCRIPTION';
put ',coalescec(b.XLMAP_TARGETLIBDS,"&mpelib..MPE_XLMAP_DATA")';
put 'as XLMAP_TARGETLIBDS';
put 'from &mpelib..MPE_XLMAP_RULES a';
put 'left join &mpelib..MPE_XLMAP_INFO(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.XLMAP_ID=b.XLMAP_ID';
put 'where &dc_dttmtfmt. lt a.tx_to;';
put '/* we don''t want the XLMAP target datasets to be directly editable */';
put 'delete from sasdatasets';
put 'where cats(libref,''.'',dsn) in (select XLMAP_TARGETLIBDS from xlmaps);';
put '%webout(OPEN)';
put '%webout(OBJ,sasDatasets)';
put '%webout(OBJ,saslibs)';
put '%webout(OBJ,globvars)';
put '%webout(ARR,xlmaps)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenauth;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenauth(inds=mv_registerclient';
put ',outds=mv_tokenauth';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',code=';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ',base_uri=#NOTSET#';
put ');';
put '%global &access_token_var &refresh_token_var;';
put '%local fref1 fref2 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'if not missing(auth_code) then call symputx(''code'',auth_code,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type=authorization_code and %str(&code)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(Authorization code required)';
put ')';
put '%mp_abort(iftrue=(';
put '&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '/* prepare appropriate grant type */';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'if "&grant_type"=''authorization_code'' then string=cats(';
put '''grant_type=authorization_code&code='',symget(''code''));';
put 'else string=cats(''grant_type=password&username='',symget(''user'')';
put ',''&password='',symget(pass));';
put 'call symputx(''grantstring'',cats("''",string,"''"));';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Request access token';
put '*/';
put '%if &base_uri=#NOTSET# %then %let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref2=%mf_getuniquefileref();';
put 'proc http method=''POST'' in=&grantstring out=&fref2';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref2;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref2;';
put '/* extract the tokens */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put 'filename &fref2 clear;';
put '%mend mv_tokenauth;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mv_tokenauth.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''auth_code'',auth_code);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'auth_code="&auth_code";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenauth(inds=authme, outds=fromSAS(keep=access_token refresh_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tokenrefresh;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mv_tokenrefresh(inds=mv_registerclient';
put ',outds=mv_tokenrefresh';
put ',client_id=someclient';
put ',client_secret=somesecret';
put ',grant_type=authorization_code';
put ',user=';
put ',pass=';
put ',access_token_var=ACCESS_TOKEN';
put ',refresh_token_var=REFRESH_TOKEN';
put ');';
put '%global &access_token_var &refresh_token_var;';
put 'options noquotelenmax;';
put '%local fref1 libref;';
put '/* test the validity of inputs */';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put '%mp_abort(';
put 'iftrue=(&grant_type=password and (%str(&user)=%str() or %str(&pass)=%str()))';
put ',mac=&sysmacroname';
put ',msg=%str(username / password required)';
put ')';
put '%if %mf_existds(&inds) %then %do;';
put 'data _null_;';
put 'set &inds;';
put 'call symputx(''client_id'',client_id,''l'');';
put 'call symputx(''client_secret'',client_secret,''l'');';
put 'call symputx("&refresh_token_var",&refresh_token_var,''l'');';
put 'run;';
put '%end;';
put '%mp_abort(iftrue=(%str(&client_id)=%str() or %str(&client_secret)=%str())';
put ',mac=&sysmacroname';
put ',msg=%str(client / secret must both be provided)';
put ')';
put '/**';
put '* Request access token';
put '*/';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '%let fref1=%mf_getuniquefileref();';
put 'proc http method=''POST''';
put 'in="grant_type=refresh_token%nrstr(&)refresh_token=&&&refresh_token_var"';
put 'out=&fref1';
put 'url="&base_uri/SASLogon/oauth/token"';
put 'WEBUSERNAME="&client_id"';
put 'WEBPASSWORD="&client_secret"';
put 'AUTH_BASIC;';
put 'headers "Accept"="application/json"';
put '"Content-Type"="application/x-www-form-urlencoded";';
put 'run;';
put '/*data _null_;infile &fref1;input;put _infile_;run;*/';
put '/**';
put '* Extract access / refresh tokens';
put '*/';
put '%let libref=%mf_getuniquelibref();';
put 'libname &libref JSON fileref=&fref1;';
put '/* extract the token */';
put 'data &outds;';
put 'set &libref..root;';
put 'call symputx("&access_token_var",access_token);';
put 'call symputx("&refresh_token_var",refresh_token);';
put 'run;';
put 'libname &libref clear;';
put 'filename &fref1 clear;';
put '%mend mv_tokenrefresh;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file tokenauth.sas';
put '@brief Get initial tokens using an auth code - DEPRECATED';
put ' SAS Macros
';
put '@li mpeinit.sas';
put '@li mv_tokenrefresh.sas';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%webout(FETCH)';
put 'data _null_;';
put 'set work.fromjs;';
put 'call symputx(''viyasettings'',viyasettings);';
put 'call symputx(''client_id'',client_id);';
put 'call symputx(''refresh_token'',refresh_token);';
put 'run;';
put 'data authme;';
put '/* get client info from special location */';
put 'infile "&viyasettings" dsd;';
put 'input client_secret:$100.;';
put 'client_id="&client_id";';
put 'refresh_token="&refresh_token";';
put 'run;';
put '/* get tokens */';
put '%mv_tokenrefresh(inds=authme, outds=fromSAS(keep=refresh_token access_token))';
put '/* send back to frontend */';
put '%webout(OPEN)';
put '%webout(OBJ,fromSAS)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=validatefilter;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro removecolsfromwork(col);';
put '/* only an issue if debug mode enabled */';
put '%global _debug;';
put '%if &_debug ge 131 %then %do;';
put '%let col=%upcase(&col);';
put '%local memlist;';
put 'proc sql noprint;';
put 'select distinct memname into: memlist';
put 'separated by '' ''';
put 'from dictionary.columns';
put 'where libname=''WORK'' and upcase(name)="&col";';
put '%if %mf_isblank(&memlist) %then %return;';
put '%mp_dropmembers(list=&memlist)';
put '%end;';
put '%mend removecolsfromwork;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_getvalue(libds,variable,filter=1';
put ')/*/STORE SOURCE*/;';
put '%if %mf_getattrn(&libds,NLOBS)>0 %then %do;';
put '%local dsid rc &variable;';
put '%let dsid=%sysfunc(open(&libds(where=(&filter))));';
put '%syscall set(dsid);';
put '%let rc = %sysfunc(fetch(&dsid));';
put '%let rc = %sysfunc(close(&dsid));';
put '%trim(&&&variable)';
put '%end;';
put '%mend mf_getvalue;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_islibds(libds';
put ')/*/STORE SOURCE*/;';
put '%local regex;';
put '%let regex=%sysfunc(prxparse(%str(/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i)));';
put '%sysfunc(prxmatch(®ex,&libds))';
put '%mend mf_islibds;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mp_filtervalidate(inref,targetds,abort=YES,outds=work.mp_filtervalidate);';
put '%mp_abort(iftrue= (&syscc ne 0 or &syserr ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc / syserr=&syserr - on macro entry)';
put ')';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put 'data _null_;';
put 'file &fref1;';
put 'infile &inref end=eof;';
put 'if _n_=1 then do;';
put 'put "proc sql;";';
put 'put "validate select * from &targetds";';
put 'put "where " ;';
put 'end;';
put 'input;';
put 'put _infile_;';
put 'putlog _infile_;';
put 'if eof then put ";quit;";';
put 'run;';
put '%inc &fref1;';
put 'data &outds;';
put 'if &sqlrc or &syscc or &syserr then do;';
put 'REASON_CD=''VALIDATION_ERR''!!''OR: ''!!';
put 'coalescec(symget(''SYSERRORTEXT''),symget(''SYSWARNINGTEXT''));';
put 'output;';
put 'end;';
put 'else stop;';
put 'run;';
put 'filename &fref1 clear;';
put '%if %mf_nobs(&outds)>0 %then %do;';
put '%if &abort=YES %then %do;';
put 'data _null_;';
put 'set &outds;';
put 'call symputx(''REASON_CD'',reason_cd,''l'');';
put 'stop;';
put 'run;';
put '%mp_abort(';
put 'mac=&sysmacroname,';
put 'msg=%str(Filter validation issues.)';
put ')';
put '%end;';
put '%let syscc=1008;';
put '%end;';
put '%mend mp_filtervalidate;';
put '%macro mp_filtercheck(inds,targetds=,outds=work.badrecords,abort=YES);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put '/* Validate input column */';
put '%local vtype;';
put '%let vtype=%mf_getvartype(&inds,RAW_VALUE);';
put '%mp_abort(iftrue=(&abort=YES and &vtype ne C),';
put 'mac=&sysmacroname,';
put 'msg=%str(%str(ERR)OR: RAW_VALUE must be character)';
put ')';
put '%if &vtype ne C %then %do;';
put '%put &sysmacroname: RAW_VALUE must be character;';
put '%let syscc=42;';
put '%return;';
put '%end;';
put '/**';
put '* Sanitise the values based on valid value lists, then strip out';
put '* quotes, commas, periods and spaces.';
put '*/';
put '%local reason_cd nobs;';
put '%let nobs=0;';
put 'data &outds;';
put '/*length GROUP_LOGIC SUBGROUP_LOGIC $3 SUBGROUP_ID 8 VARIABLE_NM $32';
put 'OPERATOR_NM $10 RAW_VALUE $4000;*/';
put 'set &inds end=last;';
put 'length reason_cd $4032 vtype vtype2 $1 vnum dsid 8 tmp $4000;';
put 'drop tmp;';
put '/* quick check to ensure column exists */';
put 'if upcase(VARIABLE_NM) not in';
put '(%upcase(%mf_getvarlist(&targetds,dlm=%str(,),quote=SINGLE)))';
put 'then do;';
put 'REASON_CD="Variable "!!cats(variable_nm)!!" not in &targetds";';
put 'putlog REASON_CD= VARIABLE_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'return;';
put 'end;';
put '/* need to open the dataset to get the column type */';
put 'retain dsid;';
put 'if _n_=1 then dsid=open("&targetds","i");';
put 'if dsid>0 then do;';
put 'vnum=varnum(dsid,VARIABLE_NM);';
put 'if vnum<1 then do;';
put '/* should not happen as was also tested for above */';
put 'REASON_CD=cats("Variable (",VARIABLE_NM,") not found in &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put '/* now we can get the type */';
put 'else vtype=vartype(dsid,vnum);';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Could not open &targetds");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'stop;';
put 'end;';
put '/* closed list checks */';
put 'if GROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''GROUP_LOGIC should be AND/OR, not:''!!cats(GROUP_LOGIC);';
put 'putlog REASON_CD= GROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if SUBGROUP_LOGIC not in (''AND'',''OR'') then do;';
put 'REASON_CD=''SUBGROUP_LOGIC should be AND/OR, not:''!!cats(SUBGROUP_LOGIC);';
put 'putlog REASON_CD= SUBGROUP_LOGIC=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if mod(SUBGROUP_ID,1) ne 0 then do;';
put 'REASON_CD=''SUBGROUP_ID should be integer, not ''!!cats(subgroup_id);';
put 'putlog REASON_CD= SUBGROUP_ID=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'if OPERATOR_NM not in';
put '(''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'',''BETWEEN'',''IN'',''NOT IN'',''CONTAINS'')';
put 'then do;';
put 'REASON_CD=''Invalid OPERATOR_NM: ''!!cats(OPERATOR_NM);';
put 'putlog REASON_CD= OPERATOR_NM=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put '/* special missing logic */';
put 'if vtype=''N'' & OPERATOR_NM in (''='',''>'',''<'',''<='',''>='',''NE'',''GE'',''LE'') then do;';
put 'if cats(upcase(raw_value)) in (';
put '''.'',''.A'',''.B'',''.C'',''.D'',''.E'',''.F'',''.G'',''.H'',''.I'',''.J'',''.K'',''.L'',''.M'',''.N''';
put '''.N'',''.O'',''.P'',''.Q'',''.R'',''.S'',''.T'',''.U'',''.V'',''.W'',''.X'',''.Y'',''.Z'',''._''';
put ')';
put 'then do;';
put '/* valid numeric - exit data step loop */';
put 'return;';
put 'end;';
put 'else if subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'end;';
put '/* special logic */';
put 'if OPERATOR_NM in (''IN'',''NOT IN'',''BETWEEN'') then do;';
put 'if OPERATOR_NM=''BETWEEN'' then raw_value1=tranwrd(raw_value,'' AND '','','');';
put 'else do;';
put 'if substr(raw_value,1,1) ne ''(''';
put 'or substr(cats(reverse(raw_value)),1,1) ne '')''';
put 'then do;';
put 'REASON_CD=''Missing start/end bracket in RAW_VALUE'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'else raw_value1=substr(raw_value,2,max(length(raw_value)-2,0));';
put 'end;';
put '/* we now have a comma seperated list of values */';
put 'if vtype=''N'' then do i=1 to countc(raw_value1, '','')+1;';
put 'tmp=scan(raw_value1,i,'','');';
put 'if cats(tmp) ne ''.'' and input(tmp, ?? 8.) eq . then do;';
put 'if OPERATOR_NM =''BETWEEN'' and subpad(upcase(tmp),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put '/* is not valid syntax for IN or NOT IN */';
put 'vnum=varnum(dsid,subpad(tmp,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'REASON_CD=''Non Numeric value provided'';';
put 'putlog REASON_CD= OPERATOR_NM= raw_value= raw_value1= ;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'return;';
put 'end;';
put 'end;';
put 'else raw_value1=raw_value;';
put '/* remove nested literals eg '''' */';
put 'raw_value1=tranwrd(raw_value1,"''''",'''');';
put '/* now match string literals (always single quotes) */';
put 'raw_value2=raw_value1;';
put 'regex = prxparse("s/(\'').*?(\'')//");';
put 'call prxchange(regex,-1,raw_value2);';
put '/* remove commas and periods*/';
put 'raw_value3=compress(raw_value2,'',.'');';
put '/* output records that contain values other than digits and spaces */';
put 'if notdigit(compress(raw_value3,'' ''))>0 then do;';
put 'if vtype=''C'' and subpad(upcase(raw_value),1,1) in (';
put '''A'',''B'',''C'',''D'',''E'',''F'',''G'',''H'',''I'',''J'',''K'',''L'',''M'',''N''';
put '''N'',''O'',''P'',''Q'',''R'',''S'',''T'',''U'',''V'',''W'',''X'',''Y'',''Z'',''_''';
put ')';
put 'then do;';
put '/* check if the raw_value contains a valid variable NAME */';
put 'vnum=varnum(dsid,subpad(raw_value,1,32));';
put 'if vnum>0 then do;';
put '/* now we can get the type */';
put 'vtype2=vartype(dsid,vnum);';
put '/* check type matches */';
put 'if vtype2=vtype then do;';
put '/* valid target var - exit loop */';
put 'return;';
put 'end;';
put 'else do;';
put 'REASON_CD=cats("Compared Char Type (",vtype2,") is not (",vtype,")");';
put 'putlog REASON_CD= dsid=;';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'goto endstep;';
put 'end;';
put 'end;';
put 'end;';
put 'putlog raw_value3= $hex32.;';
put 'REASON_CD=cats(''Invalid RAW_VALUE:'',raw_value);';
put 'putlog (_all_)(=);';
put 'call symputx(''reason_cd'',reason_cd,''l'');';
put 'call symputx(''nobs'',_n_,''l'');';
put 'output;';
put 'end;';
put 'endstep:';
put 'if last then rc=close(dsid);';
put 'run;';
put 'data _null_;';
put 'set &outds end=last;';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue=(&abort=YES and &nobs>0),';
put 'mac=&sysmacroname,';
put 'msg=%str(Data issue: %superq(reason_cd))';
put ')';
put '%if &nobs>0 %then %do;';
put '%let syscc=1008;';
put '%return;';
put '%end;';
put '/**';
put '* syntax checking passed but it does not mean the filter is valid';
put '* for that we can run a proc sql validate query';
put '*/';
put '%local fref1;';
put '%let fref1=%mf_getuniquefileref();';
put '%mp_filtergenerate(&inds,outref=&fref1)';
put '/* this macro will also set syscc to 1008 if any issues found */';
put '%mp_filtervalidate(&fref1,&targetds,outds=&outds,abort=&abort)';
put '%mend mp_filtercheck;';
put '%macro mp_md5(cvars=,nvars=);';
put '%local i var sep;';
put 'put(md5(';
put '%do i=1 %to %sysfunc(countw(&cvars));';
put '%let var=%scan(&cvars,&i,%str( ));';
put '&sep put(md5(trim(&var)),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '%do i=1 %to %sysfunc(countw(&nvars));';
put '%let var=%scan(&nvars,&i,%str( ));';
put '/* multiply by 1 to strip precision errors (eg 0 != 0) */';
put '/* but ONLY if not missing, else will lose any special missing values */';
put '&sep put(md5(trim(put(ifn(missing(&var),&var,&var*1),binary64.))),$hex32.)';
put '%let sep=!!;';
put '%end;';
put '),$hex32.)';
put '%mend mp_md5;';
put '%macro mp_hashdataset(';
put 'libds,';
put 'outds=work._data_,';
put 'salt=,';
put 'iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local keyvar /* roll up the md5 */';
put 'prevkeyvar /* retain prev record md5 */';
put 'lastvar /* last var in input ds */';
put 'cvars nvars;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '/* avoid naming conflict for hash key vars */';
put '%let keyvar=%mf_getuniquename();';
put '%let prevkeyvar=%mf_getuniquename();';
put '%let lastvar=%mf_getuniquename();';
put '%if %mf_getattrn(&libds,NLOBS)=0 %then %do;';
put 'data &outds;';
put 'length hashkey $32;';
put 'hashkey=put(md5("&salt"),$hex32.);';
put 'output;';
put 'stop;';
put 'run;';
put '%put &sysmacroname: Dataset &libds is empty, or is not a dataset;';
put '%put &sysmacroname: hashkey of &outds is based on salt (&salt) only;';
put '%end;';
put '%else %if %mf_getattrn(&libds,NLOBS)<0 %then %do;';
put '%put %str(ERR)OR: Dataset &libds is not a dataset;';
put '%end;';
put '%else %do;';
put 'data &outds(rename=(&keyvar=hashkey) keep=&keyvar)';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put '/nonote2err';
put '%end;';
put ';';
put 'length &prevkeyvar &keyvar $32;';
put 'retain &prevkeyvar;';
put 'if _n_=1 then &prevkeyvar=put(md5("&salt"),$hex32.);';
put 'set &libds end=&lastvar;';
put '/* hash should include previous row */';
put '&keyvar=%mp_md5(';
put 'cvars=%mf_getvarlist(&libds,typefilter=C) &prevkeyvar,';
put 'nvars=%mf_getvarlist(&libds,typefilter=N)';
put ');';
put '&prevkeyvar=&keyvar;';
put 'if &lastvar then output;';
put 'run;';
put '%end;';
put '%mend mp_hashdataset;';
put '/** @cond */';
put '%macro mf_existvar(libds /* 2 part dataset name */';
put ', var /* variable name */';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid=0 %then %do;';
put '%put %sysfunc(sysmsg());';
put '0';
put '%end;';
put '%else %if %length(&var)=0 %then %do;';
put '0';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%sysfunc(varnum(&dsid,&var))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_existvar;';
put '/** @endcond */';
put '%macro mf_getquotedstr(IN_STR';
put ',DLM=%str(,)';
put ',QUOTE=S';
put ',indlm=%str( )';
put ')/*/STORE SOURCE*/;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if "e=S %then %let quote=%qsysfunc(byte(39));';
put '%else %if "e=D %then %let quote=%qsysfunc(byte(34));';
put '%else %if "e=N %then %let quote=;';
put '%local i item buffer;';
put '%let i=1;';
put '%do %while (%qscan(&IN_STR,&i,%str(&indlm)) ne %str() ) ;';
put '%let item=%qscan(&IN_STR,&i,%str(&indlm));';
put '%if %bquote("E) ne %then %let item="E%qtrim(&item)"E;';
put '%else %let item=%qtrim(&item);';
put '%if (&i = 1) %then %let buffer =%qtrim(&item);';
put '%else %let buffer =&buffer&DLM%qtrim(&item);';
put '%let i = %eval(&i+1);';
put '%end;';
put '%let buffer=%sysfunc(coalescec(%qtrim(&buffer),"E"E));';
put '&buffer';
put '%mend mf_getquotedstr;';
put '%macro mf_getattrc(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrc(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrc;';
put '%macro mp_lockfilecheck(';
put 'libds';
put ')/*/STORE SOURCE*/;';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=checklock.sas';
put ',msg=Aborting with syscc=&syscc on entry.';
put ')';
put '%mp_abort(iftrue= ("&libds"="0")';
put ',mac=&sysmacroname';
put ',msg=%str(libds not provided)';
put ')';
put '%local msg lib ds;';
put '%let lib=%upcase(%scan(&libds,1,.));';
put '%let ds=%upcase(%scan(&libds,2,.));';
put '/* in DC, format catalogs are passed with a -FC suffix. No saslock here! */';
put '%if %scan(&libds,2,-)=FC %then %do;';
put '%put &sysmacroname: Format Catalog detected, no lockfile applied to &libds;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%let msg=options obs = 0. syserrortext=%superq(syserrortext);';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=checklock.sas';
put ',msg=%superq(msg)';
put ')';
put 'data _null_;';
put 'putlog "Checking engine & member type";';
put 'run;';
put '%local engine memtype;';
put '%let memtype=%mf_getattrc(&libds,MTYPE);';
put '%let engine=%mf_getattrc(&libds,ENGINE);';
put '%if &engine ne V9 and &engine ne BASE %then %do;';
put 'data _null_;';
put 'putlog "Lib &lib is not assigned using BASE engine - uses &engine instead";';
put 'putlog "SAS lock check will not be performed";';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &memtype ne DATA %then %do;';
put '%put NOTE: Cannot lock a VIEW!! Memtype=&memtype;';
put '%return;';
put '%end;';
put 'data _null_;';
put 'putlog "Engine = &engine, memtype=&memtype";';
put 'putlog "Attempting lock statement";';
put 'run;';
put 'lock &libds;';
put '%local abortme;';
put '%let abortme=0;';
put '%if &syscc>0 or &SYSLCKRC ne 0 %then %do;';
put '%let msg=Unable to apply lock on &libds (SYSLCKRC=&SYSLCKRC syscc=&syscc);';
put '%put %str(ERR)OR: &sysmacroname: &msg;';
put '%let abortme=1;';
put '%end;';
put 'lock &libds clear;';
put '%mp_abort(iftrue= (&abortme=1)';
put ',mac=&sysmacroname';
put ',msg=%superq(msg)';
put ')';
put '%mend mp_lockfilecheck;';
put '%macro mp_lockanytable(';
put 'action';
put ',lib= WORK';
put ',ds=0';
put ',ref=';
put ',ctl_ds=0';
put ',loops=25';
put ',loop_secs=1';
put ');';
put 'data _null_;';
put 'if _n_=1 then putlog "&sysmacroname entry vars:";';
put 'set sashelp.vmacro;';
put 'where scope="&sysmacroname";';
put 'put name ''='' value;';
put 'run;';
put '%mp_abort(iftrue= ("&ds"="0" and &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(dataset was not provided)';
put ')';
put '%mp_abort(iftrue= (&ctl_ds=0)';
put ',mac=&sysmacroname';
put ',msg=%str(Control dataset was not provided)';
put ')';
put '/* set up lib & mac vars */';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let action=%upcase(&action);';
put '%local user x trans msg abortme;';
put '%let user=%mf_getuser();';
put '%let abortme=0;';
put '%mp_abort(iftrue= (&action ne LOCK & &action ne UNLOCK & &action ne MAKETABLE)';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid action (&action) provided)';
put ')';
put '/* if an err condition exists, exit before we even begin */';
put '%mp_abort(iftrue= (&syscc>0 and &action=LOCK)';
put ',mac=&sysmacroname';
put ',msg=%str(aborting due to syscc=&syscc on LOCK entry)';
put ')';
put '/* do not bother locking work tables (else may affect all WORK libraries) */';
put '%if (%upcase(&lib)=WORK or %str(&lib)=%str()) & &action ne MAKETABLE %then %do;';
put '%put NOTE: WORK libraries will not be registered in the locking system.;';
put '%return;';
put '%end;';
put '/* do not proceed if no observations can be processed */';
put '%mp_abort(iftrue= (%sysfunc(getoption(OBS))=0)';
put ',mac=&sysmacroname';
put ',msg=%str(cannot continue when options obs = 0)';
put ')';
put '%if &ACTION=LOCK %then %do;';
put '/* abort if a SAS lock is already in place, or cannot be applied */';
put '%mp_lockfilecheck(&lib..&ds)';
put '/* next, check there is a record for this table */';
put '%local record_exists_check;';
put 'proc sql noprint;';
put 'select count(*) into: record_exists_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &record_exists_check=0 %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: adding record to lock table..";';
put 'run;';
put 'data ;';
put 'if 0 then set &ctl_ds;';
put 'LOCK_LIB ="&lib";';
put 'LOCK_DS="&ds";';
put 'LOCK_STATUS_CD=''LOCKED'';';
put 'LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put 'LOCK_USER_NM="&user";';
put 'LOCK_PID="&sysjobid";';
put 'LOCK_REF="&ref";';
put 'output;stop;';
put 'run;';
put '%let trans=&syslast;';
put 'proc append base=&ctl_ds data=&trans;';
put 'run;';
put '%end;';
put '/* if record does exist, perform lock attempts */';
put '%else %do x=1 %to &loops;';
put 'data _null_;';
put 'putlog "&sysmacroname: attempting lock (iteration &x) "@;';
put 'putlog "at %sysfunc(datetime(),datetime19.) ..";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''LOCKED''';
put ', LOCK_START_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '/**';
put '* NOTE - occasionally SQL server will return an err code (deadlocked';
put '* transaction). If so, ignore it, keep calm, and carry on..';
put '*/';
put '%if &syscc>0 %then %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Update failed. "@;';
put 'putlog "Resetting err conditions and re-attempting.";';
put 'putlog "NOTE- syscc=&syscc syserr=&syserr sqlrc=&sqlrc";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%let syscc=0;';
put '%let sqlrc=0;';
put '%end;';
put '/* now check if the record was successfully updated */';
put '%local success_check;';
put 'proc sql noprint;';
put 'select count(*) into: success_check from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds"';
put 'and LOCK_PID="&sysjobid" and LOCK_STATUS_CD=''LOCKED'';';
put 'quit;';
put '%if &success_check=0 %then %do;';
put '%if &x < &loops %then %do;';
put '/* pause before next check */';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: table locked, waiting "@;';
put 'putlog "%sysfunc(sleep(&loop_secs)) seconds.. ";';
put 'putlog "NOTE- (iteration &x of &loops)";';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%end;';
put '%else %do;';
put '%let msg=Unable to lock &lib..&ds via &ctl_ds after &loops attempts.\n';
put 'Please ask your administrator to investigate!;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data _null_;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'putlog "NOTE- &sysmacroname: Table &lib..&ds locked at "@;';
put 'putlog " %sysfunc(datetime(),datetime19.) (iteration &x)"@;';
put 'putlog ''NOTE-'' / ''NOTE-'';';
put 'run;';
put '%if &syscc>0 %then %do;';
put '%put setting syscc(&syscc) back to 0;';
put '%let syscc=0;';
put '%end;';
put '%let x=&loops; /* no more iterations needed */';
put '%end;';
put '%end;';
put '%end;';
put '%else %if &ACTION=UNLOCK %then %do;';
put '%local status cnt;';
put '%let cnt=0;';
put 'proc sql noprint;';
put 'select count(*) into: cnt from &ctl_ds where LOCK_LIB ="&lib" & LOCK_DS="&ds";';
put '%if &cnt=0 %then %do;';
put '%put %str(WAR)NING: &lib..&ds was not previously locked in &ctl_ds!;';
put '%end;';
put '%else %do;';
put 'select LOCK_STATUS_CD into: status from &ctl_ds';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%if &syscc>0 %then %put syscc=&syscc sqlrc=&sqlrc;';
put '%if &status=LOCKED %then %do;';
put 'data _null_;';
put 'putlog "&sysmacroname: unlocking &lib..&ds:";';
put 'run;';
put 'proc sql;';
put 'update &ctl_ds';
put 'set LOCK_STATUS_CD=''UNLOCKED''';
put ', LOCK_END_DTTM="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put ', LOCK_USER_NM="&user"';
put ', LOCK_PID="&sysjobid"';
put ', LOCK_REF="&ref"';
put 'where LOCK_LIB ="&lib" and LOCK_DS="&ds";';
put 'quit;';
put '%end;';
put '%else %if &status=UNLOCKED %then %do;';
put '%put %str(WAR)NING: &lib..&ds is already unlocked!;';
put '%end;';
put '%else %do;';
put '%put NOTE: Unrecognised STATUS_CD (&status) in &ctl_ds;';
put '%let abortme=1;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '%let msg=lock_anytable given unsupported action (&action);';
put '%let abortme=1;';
put '%end;';
put '/* catch errs - mp_abort must be called outside of a logic block */';
put '%mp_abort(iftrue=(&abortme=1),';
put 'msg=%superq(msg),';
put 'mac=&sysmacroname';
put ')';
put '%exit_macro:';
put 'data _null_;';
put 'put "&sysmacroname: Exit vars: action=&action lib=&lib ds=&ds";';
put 'put " syscc=&syscc sqlrc=&sqlrc syserr=&syserr";';
put 'run;';
put '%mend mp_lockanytable;';
put '%macro mp_retainedkey(';
put 'base_lib=WORK';
put ',base_dsn=BASETABLE';
put ',append_lib=WORK';
put ',append_dsn=APPENDTABLE';
put ',retained_key=DEFAULT_RK';
put ',business_key= PK1 PK2';
put ',check_uniqueness=NO';
put ',maxkeytable=0';
put ',locktable=0';
put ',outds=WORK.APPEND';
put ',filter_str=';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local base_libds app_libds key_field check maxkey idx_pk newkey_cnt iserr';
put 'msg x tempds1 tempds2 comma_pk appnobs checknobs dropvar tempvar idx_val;';
put '%let base_libds=%upcase(&base_lib..&base_dsn);';
put '%let app_libds=%upcase(&append_lib..&append_dsn);';
put '%let tempds1=%mf_getuniquename();';
put '%let tempds2=%mf_getuniquename();';
put '%let comma_pk=%mf_getquotedstr(in_str=%str(&business_key),dlm=%str(,),quote=);';
put '%let outds=%sysfunc(ifc(%index(&outds,.)=0,work.&outds,&outds));';
put '/* validation checks */';
put '%let iserr=0;';
put '%if &syscc>0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(SYSCC=&syscc on macro entry);';
put '%end;';
put '%else %if %sysfunc(exist(&base_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Base LIBDS (&base_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if %sysfunc(exist(&app_libds))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Append LIBDS (&app_libds) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&maxkeytable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Maxkeytable (&maxkeytable) expected but NOT FOUND);';
put '%end;';
put '%else %if &maxkeytable ne 0 and %sysfunc(exist(&locktable))=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Locktable (&locktable) expected but NOT FOUND);';
put '%end;';
put '%else %if %length(&business_key)=0 %then %do;';
put '%let iserr=1;';
put '%let msg=%str(Business key (&business_key) expected but NOT FOUND);';
put '%end;';
put '%do x=1 %to %sysfunc(countw(&business_key));';
put '/* check business key values exist */';
put '%let key_field=%scan(&business_key,&x,%str( ));';
put '%if not %mf_existvar(&app_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &app_libds!;';
put '%goto err;';
put '%end;';
put '%else %if not %mf_existvar(&base_libds,&key_field) %then %do;';
put '%let iserr=1;';
put '%let msg=Business key (&key_field) not found on &base_libds!;';
put '%goto err;';
put '%end;';
put '%end;';
put '%err:';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue=(&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put 'proc sql noprint;';
put 'select sum(max(&retained_key),0) into: maxkey from &base_libds;';
put '/**';
put '* get base table RK and bus field values for lookup';
put '*/';
put 'proc sql noprint;';
put 'create table &tempds1 as';
put 'select distinct &comma_pk,&retained_key';
put 'from &base_libds &filter_str';
put 'order by &comma_pk,&retained_key;';
put '%if &check_uniqueness=YES %then %do;';
put 'select count(*) into:checknobs';
put 'from (select distinct &comma_pk from &app_libds);';
put 'select count(*) into: appnobs from &app_libds; /* might be view */';
put '%if &checknobs ne &appnobs %then %do;';
put '%let msg=Source table &app_libds is not unique on (&business_key);';
put '%let iserr=1;';
put '%end;';
put '%end;';
put '%if &iserr=1 %then %do;';
put '/* err case so first perform an unlock of the base table before exiting */';
put '%mp_lockanytable(';
put 'UNLOCK,lib=&base_lib,ds=&base_dsn,ref=%superq(msg),ctl_ds=&locktable';
put ')';
put '%end;';
put '%mp_abort(iftrue= (&iserr=1),mac=mp_retainedkey,msg=%superq(msg))';
put '%if %mf_existvar(&app_libds,&retained_key)';
put '%then %let dropvar=(drop=&retained_key);';
put '/* prepare interim table with retained key populated for matching keys */';
put 'proc sql noprint;';
put 'create table &tempds2 as';
put 'select b.&retained_key, a.*';
put 'from &app_libds &dropvar a';
put 'left join &tempds1 b';
put 'on 1';
put '%do idx_pk=1 %to %sysfunc(countw(&business_key));';
put '%let idx_val=%scan(&business_key,&idx_pk);';
put 'and a.&idx_val=b.&idx_val';
put '%end;';
put 'order by &retained_key;';
put '/* identify the number of entries without retained keys (new records) */';
put 'select count(*) into: newkey_cnt';
put 'from &tempds2';
put 'where missing(&retained_key);';
put 'quit;';
put '/**';
put '* Update maxkey table if link provided';
put '*/';
put '%if &maxkeytable ne 0 %then %do;';
put 'proc sql noprint;';
put 'select count(*) into: check from &maxkeytable';
put 'where upcase(keytable)="&base_libds";';
put '%mp_lockanytable(LOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with mp_retainedkey';
put ',ctl_ds=&locktable';
put ')';
put 'proc sql;';
put '%if &check=0 %then %do;';
put 'insert into &maxkeytable';
put 'set keytable="&base_libds"';
put ',keycolumn="&retained_key"';
put ',max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt;';
put '%end;';
put '%else %do;';
put 'update &maxkeytable';
put 'set max_key=%eval(&maxkey+&newkey_cnt)';
put ',processed_dttm="%sysfunc(datetime(),%mf_fmtdttm())"dt';
put 'where keytable="&base_libds";';
put '%end;';
put '%mp_lockanytable(UNLOCK';
put ',lib=%scan(&maxkeytable,1,.)';
put ',ds=%scan(&maxkeytable,2,.)';
put ',ref=Updating maxkeyvalues with maxkey=%eval(&maxkey+&newkey_cnt)';
put ',ctl_ds=&locktable';
put ')';
put '%end;';
put '/* fill in the missing retained key values */';
put '%let tempvar=%mf_getuniquename();';
put 'data &outds(drop=&tempvar);';
put 'retain &tempvar %eval(&maxkey+1);';
put 'set &tempds2;';
put 'if &retained_key =. then &retained_key=&tempvar;';
put '&tempvar=&tempvar+1;';
put 'run;';
put '%mend mp_retainedkey;';
put '%macro mp_filterstore(libds=,';
put 'queryds=work.filterquery,';
put 'filter_summary=PERM.FILTER_SUMMARY,';
put 'filter_detail=PERM.FILTER_DETAIL,';
put 'lock_table=PERM.LOCK_TABLE,';
put 'maxkeytable=PERM.MAXKEYTABLE,';
put 'outresult=work.result,';
put 'outquery=work.query,';
put 'mdebug=1';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%local ds0 ds1 ds2 ds3 ds4 filter_hash orig_libds;';
put '%let libds=%upcase(&libds);';
put '%let orig_libds=&libds;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro entry)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_summary)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_summary value: &filter_summary)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&filter_detail)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid filter_detail value: &filter_detail)';
put ')';
put '%mp_abort(iftrue= (%mf_islibds(&lock_table)=0)';
put ',mac=mp_filterstore';
put ',msg=%str(Invalid lock_table value: &lock_table)';
put ')';
put '/**';
put '* validate query';
put '* use format catalog export, if a format';
put '*/';
put '%if "%substr(&libds,%length(&libds)-2,3)"="-FC" %then %do;';
put '%let libds=%scan(&libds,1,-); /* chop off -FC extension */';
put '%let ds0=%mf_getuniquename(prefix=fmtds_);';
put '%let libds=&ds0;';
put '/*';
put 'There is no need to export the entire format catalog here - the validations';
put 'are done against the data model, not the data values. So we can simply';
put 'hardcode the structure based on the cntlout dataset.';
put '*/';
put '%mddl_sas_cntlout(libds=&ds0)';
put '%end;';
put '%mp_filtercheck(&queryds,targetds=&libds,abort=YES)';
put '/* hash the result */';
put '%let ds1=%mf_getuniquename(prefix=hashds);';
put '%mp_hashdataset(&queryds,outds=&ds1,salt=&orig_libds)';
put '%let filter_hash=%upcase(%mf_getvalue(&ds1,hashkey));';
put '%if &mdebug=1 %then %do;';
put 'data _null_;';
put 'putlog "filter_hash=&filter_hash";';
put 'set &ds1;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '/* check if data already exists for this hash */';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc after hash check)';
put ')';
put '%mp_abort(iftrue= ("&filter_hash "=" ")';
put ',mac=mp_filterstore';
put ',msg=%str(problem with filter_hash generation)';
put ')';
put '%if %mf_nobs(&outresult)=0 %then %do;';
put '/* first update summary table */';
put '%let ds3=%mf_getuniquename(prefix=filtersum);';
put 'data work.&ds3;';
put 'if 0 then set &filter_summary;';
put 'filter_table="&orig_libds";';
put 'filter_hash="&filter_hash";';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%let ds4=%mf_getuniquename(prefix=filtersumappend);';
put '%mp_retainedkey(';
put 'base_lib=%scan(&filter_summary,1,.)';
put ',base_dsn=%scan(&filter_summary,2,.)';
put ',append_lib=work';
put ',append_dsn=&ds3';
put ',retained_key=filter_rk';
put ',business_key=filter_hash';
put ',maxkeytable=&maxkeytable';
put ',locktable=&lock_table';
put ',outds=work.&ds4';
put ')';
put 'proc append base=&filter_summary data=&ds4;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_summary,1,.)';
put ',ds=%scan(&filter_summary,2,.)';
put ',ref=MP_FILTERSTORE summary update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds4;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put 'data &outresult;';
put 'set &filter_summary;';
put 'where filter_hash="&filter_hash";';
put 'run;';
put '/* Next, update detail table */';
put '%let ds2=%mf_getuniquename(prefix=filterdetail);';
put 'data &ds2;';
put 'if 0 then set &filter_detail;';
put 'set &queryds;';
put 'format filter_hash $hex32. filter_line 8.;';
put 'filter_hash="&filter_hash";';
put 'filter_line=_n_;';
put 'PROCESSED_DTTM=%sysfunc(datetime());';
put 'run;';
put '%mp_lockanytable(LOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE update - &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put 'proc append base=&filter_detail data=&ds2;';
put 'run;';
put '%mp_lockanytable(UNLOCK,';
put 'lib=%scan(&filter_detail,1,.)';
put ',ds=%scan(&filter_detail,2,.)';
put ',ref=MP_FILTERSTORE detail update &filter_hash';
put ',ctl_ds=&lock_table';
put ')';
put '%if &syscc ne 0 %then %do;';
put 'data _null_;';
put 'set &ds2;';
put 'putlog (_all_)(=);';
put 'run;';
put '%goto err;';
put '%end;';
put '%end;';
put 'proc sort data=&filter_detail(where=(filter_hash="&filter_hash")) out=&outquery;';
put 'by filter_line;';
put 'run;';
put '%err:';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=mp_filterstore';
put ',msg=%str(syscc=&syscc on macro exit)';
put ')';
put '%mend mp_filterstore;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Validates a filter clause before it gets hashified, returns the RK';
put '@details Used to generate a FILTER_RK from an input query dataset.';
put 'Raw values are stored in dc.mpe_filtersource and the meta values are stored';
put 'in dc.mpe_filteranytable';
put ' Service Inputs
';
put ' IWANT
';
put '|FILTER_TABLE:$41.|';
put '|---|';
put '|DC258467.MPE_X_TEST|';
put ' FILTERQUERY
';
put '|GROUP_LOGIC:$3|SUBGROUP_LOGIC:$3|SUBGROUP_ID:8.|VARIABLE_NM:$32|OPERATOR_NM:$10|RAW_VALUE:$32767|';
put '|---|---|---|---|---|---|';
put '|AND|AND|1|SOME_BESTNUM|>|1|';
put '|AND|AND|1|SOME_TIME|=|77333|';
put ' Service Outputs
';
put ' result
';
put '@li FILTER_HASH';
put '@li FILTER_RK';
put '@li FILTER_TABLE';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getvalue.sas';
put '@li mp_filterstore.sas';
put '@li removecolsfromwork.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let ds=%upcase(%mf_getvalue(work.iwant,filter_table));';
put '%dc_assignlib(WRITE,%scan(&ds,1,.))';
put '%mp_filterstore(';
put 'libds=&ds,';
put 'queryds=work.filterquery,';
put 'filter_summary=&dc_libref..mpe_filteranytable,';
put 'filter_detail=&dc_libref..mpe_filtersource,';
put 'lock_table=&dc_libref..mpe_lockanytable,';
put 'maxkeytable=&dc_libref..mpe_maxkeyvalues,';
put 'outresult=work.result,';
put 'outquery=work.query, /* not used */';
put 'mdebug=1';
put ')';
put '%removecolsfromwork(___TMP___MD5)';
put 'proc sql;';
put 'alter table work.result drop PROCESSED_DTTM;';
put '%webout(OPEN)';
put '%webout(OBJ,result)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewdata;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mpe_columnlevelsecurity(tgtlib,tgtds,inds';
put ',mode=VIEW';
put ',groupds=work.groups';
put ',clsds=work.clsview';
put ',outds=CLSVIEW';
put ',outmeta=work.cls_rules';
put ');';
put '%local col_list is_admin;';
put '/* filter for the appropriate rules */';
put 'proc sql;';
put 'create table &outmeta as';
put 'select CLS_VARIABLE_NM,';
put 'min(case when CLS_HIDE=1 then 1 else 0 end) as CLS_HIDE';
put 'from &clsds';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and CLS_SCOPE in ("&mode",''ALL'')';
put 'and CLS_ACTIVE=1';
put '%if &mode=VIEW %then %do;';
put 'and CLS_HIDE ne 1';
put '%end;';
put 'and upcase(CLS_GROUP) in (select upcase(groupname) from &groupds)';
put 'and CLS_LIBREF="%upcase(&tgtlib)"';
put 'and CLS_TABLE="%upcase(&tgtds)"';
put 'group by CLS_VARIABLE_NM;';
put '%let is_admin=0;';
put 'proc sql;';
put 'select count(*) into: is_admin from &groupds where groupname="&MPEADMINS";';
put '%put &sysmacroname: &=is_admin;';
put '%if %mf_nobs(work.cls_rules) = 0 or &is_admin>0 %then %do;';
put '%put &sysmacroname: no CLS rules to apply;';
put '%put &=is_admin;';
put '/* copy using append for speed */';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '/* ensure CLS_RULES is empty in case of admin */';
put 'data &outmeta;';
put 'set &outmeta;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%else %if &mode=VIEW %then %do;';
put '/* just send back the relevant columns */';
put '%let col_list=0;';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=0;';
put '%if &col_list=0 %then %do;';
put '/*';
put 'We have columns that are set to CLS_HIDE=1 but we do not have any to';
put 'explicitly show. Therefore we assume all columns are to be shown except';
put 'those that are explicitly hidden.';
put '*/';
put 'proc sql noprint;';
put 'select CLS_VARIABLE_NM into: col_list separated by '' '' from &outmeta';
put 'where CLS_HIDE=1;';
put 'data &outds;';
put 'set &inds;';
put 'drop &col_list;';
put 'run;';
put '%end;';
put '%else %do;';
put 'data &outds;';
put 'set &inds;';
put 'keep &col_list;';
put 'run;';
put '%end;';
put '%end;';
put '%else %if &mode=EDIT %then %do;';
put '/*';
put 'In this case we pass all columns and the frontend will filter out the';
put 'ones that are not allowed to be edited.';
put '*/';
put 'data &outds;';
put 'set &inds;';
put 'stop;';
put 'run;';
put 'proc append base=&outds data=&inds;';
put 'run;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: invalid mode - &mode!;';
put '%abort;';
put '%end;';
put '%mend mpe_columnlevelsecurity;';
put '%macro mp_dsmeta(libds,outds=work.dsmeta);';
put '%local ds1 ds2;';
put 'data;run; %let ds1=&syslast;';
put 'data;run; %let ds2=&syslast;';
put '/* setup the ODS capture */';
put 'ods output attributes=&ds1 enginehost=&ds2;';
put '/* export the metadata */';
put 'proc contents data=&libds;';
put 'run;';
put '/* load it into a single table */';
put 'data &outds (keep=ods_table name value);';
put 'length ods_table $10 name label2 label1 label $100';
put 'value cvalue cvalue1 cvalue2 $1000';
put 'nvalue nvalue1 nvalue2 8;';
put 'if _n_=1 then call missing (of _all_);';
put '* putlog (_all_)(=);';
put 'set &ds1 (in=atrs) &ds2 (in=eng);';
put 'if atrs then do;';
put 'ods_table=''ATTRIBUTES'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'if label2 ne '''' then do;';
put 'name=label2;';
put 'value=coalescec(cvalue2,put(nvalue2,best.));';
put 'output;';
put 'end;';
put 'end;';
put 'else if eng then do;';
put 'ods_table=''ENGINEHOST'';';
put 'name=coalescec(label1,label);';
put 'value=coalescec(cvalue1,cvalue,put(coalesce(nvalue1,nvalue),best.));';
put 'output;';
put 'end;';
put 'run;';
put 'proc sql;';
put 'drop table &ds1, &ds2;';
put '%mend mp_dsmeta;';
put '%macro mpe_dsmeta(libds, outds=dsmeta);';
put '%local ddsd ddld notes lenstmt;';
put '%let lenstmt=length ods_table $18 name $100 value $1000;';
put '%let libds=%upcase(&libds);';
put '%mp_dsmeta(&libds, outds=&outds)';
put 'data _null_;';
put 'set &mpelib..mpe_datadictionary;';
put 'where &dc_dttmtfmt < tx_to & dd_source=%upcase("&libds") & dd_type=''TABLE'';';
put 'call symputx(''ddsd'',dd_shortdesc,''l'');';
put 'call symputx(''ddld'',dd_longdesc,''l'');';
put 'run;';
put 'data &outds;';
put '&lenstmt;';
put 'if last then do;';
put 'ODS_TABLE=''MPE_DATADICTIONARY'';';
put 'NAME=''DD_SHORTDESC'';';
put 'VALUE="&ddsd";';
put 'output;';
put 'NAME=''DD_LONGDESC'';';
put 'VALUE="&ddld";';
put 'output;';
put 'end;';
put 'set &outds end=last;';
put 'output;';
put 'run;';
put 'data _data_;';
put 'set &mpelib..mpe_tables;';
put 'where libref="%scan(&libds,1,.)"';
put '& dsn="%scan(&libds,2,.)"';
put '& &dc_dttmtfmt 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mf_getattrn(';
put 'libds';
put ',attr';
put ')/*/STORE SOURCE*/;';
put '%local dsid rc;';
put '%let dsid=%sysfunc(open(&libds,is));';
put '%if &dsid = 0 %then %do;';
put '%put %str(WARN)ING: Cannot open %trim(&libds), system message below;';
put '%put %sysfunc(sysmsg());';
put '-1';
put '%end;';
put '%else %do;';
put '%sysfunc(attrn(&dsid,&attr))';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%mend mf_getattrn;';
put '%macro mf_nobs(libds';
put ')/*/STORE SOURCE*/;';
put '%mf_getattrn(&libds,NLOBS)';
put '%mend mf_nobs;';
put '%macro mp_filtergenerate(inds,outref=filter);';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc - on macro entry)';
put ')';
put 'filename &outref temp;';
put '%if %mf_nobs(&inds)=0 %then %do;';
put '/* ensure we have a default filter */';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%else %do;';
put 'proc sort data=&inds;';
put 'by SUBGROUP_ID;';
put 'run;';
put 'data _null_;';
put 'file &outref lrecl=32800;';
put 'set &inds end=last;';
put 'by SUBGROUP_ID;';
put 'if _n_=1 then put ''(('';';
put 'else if first.SUBGROUP_ID then put +1 GROUP_LOGIC ''('';';
put 'else put +2 SUBGROUP_LOGIC;';
put 'put +4 VARIABLE_NM OPERATOR_NM RAW_VALUE;';
put 'if last.SUBGROUP_ID then put '')''@;';
put 'if last then put '')'';';
put 'run;';
put '%end;';
put '%mend mp_filtergenerate;';
put '%macro mpe_filtermaster(mode,libds,';
put 'dclib=,';
put 'filter_rk=-1,';
put 'outref=0,';
put 'outds=work.query';
put ');';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%let mode=%upcase(&mode);';
put '%let libds=%upcase(&libds);';
put '%mp_abort(iftrue= (';
put '&mode ne EDIT and &mode ne VIEW and &mode ne DLOAD and &mode ne ULOAD';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid MODE: &mode)';
put ')';
put '%mp_abort(iftrue= (&outref = 0)';
put ',mac=&sysmacroname';
put ',msg=%str(Please provide a fileref!)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&sysmacroname';
put ',msg=%str(syscc=&syscc)';
put ')';
put 'filename &outref temp;';
put '/* ensure outputs exist */';
put 'data _null_;';
put 'file &outref;';
put 'put '' '';';
put 'run;';
put 'data &outds;';
put 'set &dclib..mpe_filtersource;';
put 'stop;';
put 'run;';
put '/**';
put '* Deal with FILTER_RK first';
put '*/';
put '%if &filter_rk gt 0 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''( ''@@;';
put 'set &dclib..mpe_filteranytable(where=(filter_rk=&filter_rk));';
put 'call symputx(''filter_hash'',filter_hash,''l'');';
put 'run;';
put 'proc sort data=&dclib..mpe_filtersource(where=(filter_hash="&filter_hash"))';
put 'out=&outds(drop=filter_hash filter_line processed_dttm);';
put 'by filter_line;';
put 'run;';
put '%mp_filtergenerate(&outds,outref=&outref)';
put '%end;';
put '/* Now filter for current records if the MODE is EDIT or DLOAD */';
put '%local varfrom varto;';
put '%let varfrom=0;';
put 'proc sql;';
put 'select coalescec(var_txfrom,''0''), var_txto into: varfrom,:varto';
put 'from &dclib..MPE_TABLES';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and libref="%scan(&libds,1,.)" and dsn="%scan(&libds,2,.)";';
put '%put &=varfrom;';
put '%put &=varto;';
put '/**';
put '* Check if the date variables were mentioned in the query';
put '* This is a trigger for serving a historical view instead of current';
put '* we skip this part when checking an ULOAD as there are no date vars';
put '*/';
put '%if &varfrom ne 0 and (&mode=EDIT or &mode=DLOAD) %then %do;';
put '%local validityvars;';
put 'proc sql;';
put 'select count(*) into: validityvars';
put 'from &outds';
put 'where variable_nm in ("&varfrom","&varto");';
put '%if &validityvars=0 %then %do;';
put 'data _null_;';
put 'file &outref mod;';
put 'length filter_text $32767;';
put 'varfrom=symget(''varfrom'');';
put 'varto=symget(''varto'');';
put 'filter_text=catx('' '',';
put '''("%sysfunc(datetime(),'',"%mf_fmtdttm()",'')"dt <'',varto,'')''';
put ');';
put 'if &filter_rk > 0 then put ''AND '' filter_text;';
put 'else put filter_text;';
put 'run;';
put '%end;';
put '%end;';
put '/**';
put '* Now do Row Level Security based on the MPE_ROW_LEVEL_SECURITY table';
put '*/';
put '/* first determine users group membership */';
put '%mpe_getgroups(user=%mf_getuser(),outds=work.groups)';
put '%local admin_check;';
put 'proc sql;';
put 'select count(*) into: admin_check';
put 'from work.groups';
put 'where groupname="&mpeadmins";';
put '%put &sysmacroname: &=admin_check &=mpeadmins;';
put '%if &admin_check=0 %then %do;';
put '%local scopeval;';
put '%if &mode=DLOAD %then %let scopeval=VIEW;';
put '%if &mode=ULOAD %then %let scopeval=EDIT;';
put '%else %let scopeval=&mode;';
put '/* extract relevant rows */';
put '%local rlsds;';
put '%let rlsds=%mf_getuniquename();';
put 'proc sql;';
put 'create table work.&rlsds as';
put 'select rls_group,';
put 'rls_group_logic as group_logic,';
put 'rls_subgroup_logic as subgroup_logic,';
put 'rls_subgroup_id as subgroup_id,';
put 'rls_variable_nm as variable_nm,';
put 'rls_operator_nm as operator_nm,';
put 'rls_raw_value as raw_value';
put 'from &mpelib..mpe_row_level_security';
put 'where &dc_dttmtfmt. lt tx_to';
put 'and rls_scope in ("&scopeval",''ALL'')';
put 'and upcase(rls_group) in (select upcase(groupname) from work.groups)';
put 'and rls_libref="%scan(&libds,1,.)"';
put 'and rls_table="%scan(&libds,2,.)"';
put 'and rls_active=1';
put 'order by rls_group,rls_subgroup_id;';
put '%if &sqlobs>0 %then %do;';
put '/* check if we currently have filter or not */';
put 'data ;';
put 'infile &outref end=eof;';
put 'input;';
put 'if _n_=1 and eof and cats(_infile_)='''' then newfilter=1;';
put 'output;';
put 'stop;';
put 'run;';
put 'data _null_;';
put 'set &syslast;';
put 'file &outref mod;';
put 'if newfilter=1 then put ''('';';
put 'else put ''AND ('';';
put 'run;';
put '/* loop through and apply filters for each group membership */';
put '%local fref ds;';
put '%let fref=%mf_getuniquefileref();';
put '%let ds=%mf_getuniquename();';
put 'proc sql noprint;';
put 'select distinct rls_group into : group1 -';
put 'from work.&rlsds;';
put '%do i=1 %to &sqlobs;';
put 'data work.&ds;';
put 'set work.&rlsds;';
put 'where rls_group="&&group&i";';
put 'drop rls_group;';
put 'run;';
put '%mp_filtergenerate(&ds,outref=&fref)';
put 'data _null_;';
put 'infile &fref;';
put 'file &outref mod;';
put 'input;';
put 'if &i>1 and _n_=1 then put '' OR '';';
put 'put _infile_;';
put 'run;';
put '%end;';
put 'data _null_;';
put 'file &outref mod;';
put 'put '')'';';
put 'run;';
put '%end; /* &sqlobs>0 */';
put '%else %do;';
put '%put &sysmacroname: no matching groups;';
put 'data _null_;';
put 'set work.groups;';
put 'putlog (_all_)(=);';
put 'run;';
put '%end;';
put '%mp_abort(iftrue= (&syscc>0)';
put ',mac=&sysmacroname';
put ',msg=%str(Row Level Security Generation Error)';
put ')';
put '%end; /* &admin_check=0 */';
put '%put leaving &sysmacroname with the following query:;';
put '%local empty;';
put '%let empty=0;';
put 'data _null_;';
put 'infile &outref end=eof;';
put 'input;';
put 'putlog _infile_;';
put 'if _n_=1 and eof and cats(_infile_)='''' then do;';
put 'put ''1=1'';';
put 'call symputx(''empty'',1,''l'');';
put 'end;';
put 'run;';
put '%if &empty=1 %then %do;';
put 'data _null_;';
put 'file &outref;';
put 'put ''1=1'';';
put 'run;';
put '%end;';
put '%mend mpe_filtermaster;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro dc_createdataset(libds=mm_getlibs);';
put 'data viewdata;';
put 'var1=''Table'';';
put 'var2="&libds";';
put 'var3="does not exist!";';
put 'run;';
put '%mend dc_createdataset;';
put '%macro dc_gettableid(libref=';
put ',ds=';
put ',outds=);';
put 'data &outds;';
put 'tableuri='''';';
put 'tablename="&ds";';
put 'run;';
put '%mend dc_gettableid;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '%macro mf_getvarcount(libds,typefilter=A';
put ')/*/STORE SOURCE*/;';
put '%local dsid nvars rc outcnt x;';
put '%let dsid=%sysfunc(open(&libds));';
put '%let nvars=.;';
put '%let outcnt=0;';
put '%let typefilter=%upcase(&typefilter);';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &typefilter=A %then %let outcnt=&nvars;';
put '%else %if &nvars>0 %then %do x=1 %to &nvars;';
put '/* increment based on variable type */';
put '%if %sysfunc(vartype(&dsid,&x))=&typefilter %then %do;';
put '%let outcnt=%eval(&outcnt+1);';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put unable to open &libds (rc=&dsid);';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '&outcnt';
put '%mend mf_getvarcount;';
put '%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1)';
put ')/des=''ungraceful abort'' /*STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mf_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%abort;';
put '%mend mf_abort;';
put '/** @endcond */';
put '%macro mf_verifymacvars(';
put 'verifyVars /* list of macro variable NAMES */';
put ',makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */';
put ',mAbort=SOFT';
put ')/*/STORE SOURCE*/;';
put '%local verifyIterator verifyVar abortmsg;';
put '%do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( )));';
put '%let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( ));';
put '%if not %symexist(&verifyvar) %then %do;';
put '%let abortmsg= Variable &verifyVar is MISSING;';
put '%goto exit_err;';
put '%end;';
put '%if %length(%trim(&&&verifyVar))=0 %then %do;';
put '%let abortmsg= Variable &verifyVar is EMPTY;';
put '%goto exit_err;';
put '%end;';
put '%if &makeupcase=YES %then %do;';
put '%let &verifyVar=%upcase(&&&verifyvar);';
put '%end;';
put '%end;';
put '%goto exit_success;';
put '%exit_err:';
put '%put &abortmsg;';
put '%mf_abort(iftrue=(&mabort ne SOFT),';
put 'mac=mf_verifymacvars,';
put 'msg=%str(&abortmsg)';
put ')';
put '0';
put '%return;';
put '%exit_success:';
put '1';
put '%mend mf_verifymacvars;';
put '%macro mddl_sas_cntlout(libds=WORK.CNTLOUT);';
put 'proc sql;';
put 'create table &libds(';
put 'TYPE char(1) label=';
put '''Format Type: either N (num fmt), C (char fmt), I (num infmt) or J (char infmt)''';
put ',FMTNAME char(32) label=''Format name''';
put ',FMTROW num label=';
put '''CALCULATED Position of record by FMTNAME (reqd for multilabel formats)''';
put ',START char(32767) label=''Starting value for format''';
put '/*';
put 'Keep lengths of START and END the same to avoid this err:';
put '"Start is greater than end: -<."';
put 'Similar usage note: https://support.sas.com/kb/69/330.html';
put '*/';
put ',END char(32767) label=''Ending value for format''';
put ',LABEL char(32767) label=''Format value label''';
put ',MIN num length=3 label=''Minimum length''';
put ',MAX num length=3 label=''Maximum length''';
put ',DEFAULT num length=3 label=''Default length''';
put ',LENGTH num length=3 label=''Format length''';
put ',FUZZ num label=''Fuzz value''';
put ',PREFIX char(2) label=''Prefix characters''';
put ',MULT num label=''Multiplier''';
put ',FILL char(1) label=''Fill character''';
put ',NOEDIT num length=3 label=''Is picture string noedit?''';
put ',SEXCL char(1) label=''Start exclusion''';
put ',EEXCL char(1) label=''End exclusion''';
put ',HLO char(13) label=';
put '''More info: https://core.sasjs.io/mddl__sas__cntlout_8sas_source.html''';
put ',DECSEP char(1) label=''Decimal separator''';
put ',DIG3SEP char(1) label=''Three-digit separator''';
put ',DATATYPE char(8) label=''Date/time/datetime?''';
put ',LANGUAGE char(8) label=''Language for date strings''';
put ');';
put '%local lib;';
put '%let libds=%upcase(&libds);';
put '%if %index(&libds,.)=0 %then %let lib=WORK;';
put '%else %let lib=%scan(&libds,1,.);';
put 'proc datasets lib=&lib noprint;';
put 'modify %scan(&libds,-1,.);';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%mend mddl_sas_cntlout;';
put '%macro mp_aligndecimal(var,width=8);';
put '%local tmpvar;';
put '%let tmpvar=%mf_getuniquename(prefix=aligndp);';
put 'length &tmpvar $&width;';
put 'if index(&var,''.'') then do;';
put '&tmpvar=cats(scan(&var,1,''.''));';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar!!''.''!!cats(scan(&var,2,''.''));';
put 'end;';
put 'else do;';
put '&tmpvar=cats(&var);';
put '&tmpvar=right(&tmpvar);';
put '&var=&tmpvar;';
put 'end;';
put 'drop &tmpvar;';
put '%mend mp_aligndecimal;';
put '%macro mp_cntlout(';
put 'iftrue=(1=1)';
put ',libcat=';
put ',cntlout=work.fmtextract';
put ',fmtlist=0';
put ')/*/STORE SOURCE*/;';
put '%local ddlds cntlds i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%let ddlds=%mf_getuniquename();';
put '%let cntlds=%mf_getuniquename();';
put '%mddl_sas_cntlout(libds=&ddlds)';
put '%if %index(&libcat,-)>0 and %scan(&libcat,2,-)=FC %then %do;';
put '%let libcat=%scan(&libcat,1,-);';
put '%end;';
put 'proc format lib=&libcat cntlout=&cntlds;';
put '%if "&fmtlist" ne "0" and "&fmtlist" ne "" %then %do;';
put 'select';
put '%do i=1 %to %sysfunc(countw(&fmtlist,%str( )));';
put '%scan(&fmtlist,&i,%str( ))';
put '%end;';
put ';';
put '%end;';
put 'run;';
put 'data &cntlout/nonote2err;';
put 'if 0 then set &ddlds;';
put 'set &cntlds;';
put 'by type fmtname notsorted;';
put '/* align the numeric values to avoid overlapping ranges */';
put 'if type in ("I","N") then do;';
put '%mp_aligndecimal(start,width=16)';
put '%mp_aligndecimal(end,width=16)';
put 'end;';
put '/* create row marker. Data cannot be sorted without it! */';
put 'if first.fmtname then fmtrow=1;';
put 'else fmtrow+1;';
put 'run;';
put 'proc sort;';
put 'by type fmtname fmtrow;';
put 'run;';
put 'proc sql;';
put 'drop table &ddlds,&cntlds;';
put '%mend mp_cntlout;';
put '/** @endcond */';
put '%macro mp_getcols(ds, outds=work.cols);';
put '%local dropds;';
put 'proc contents noprint data=&ds';
put 'out=_data_ (keep=name type length label varnum format:);';
put 'run;';
put '%let dropds=&syslast;';
put 'data &outds(keep=name type length varnum format label ddtype fmtname);';
put 'set &dropds(rename=(format=fmtname type=type2));';
put 'name=upcase(name);';
put 'if type2=2 then do;';
put 'length format $49.;';
put 'if fmtname='''' then format=cats(''$'',length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else format=cats(fmtname,formatl,''.'');';
put 'type=''C'';';
put 'ddtype=''CHARACTER'';';
put 'end;';
put 'else do;';
put 'if fmtname='''' then format=cats(length,''.'');';
put 'else if formatl=0 then format=cats(fmtname,''.'');';
put 'else if formatd=0 then format=cats(fmtname,formatl,''.'');';
put 'else format=cats(fmtname,formatl,''.'',formatd);';
put 'type=''N'';';
put 'if format=:''DATETIME'' or format=:''E8601DT'' then ddtype=''DATETIME'';';
put 'else if format=:''DATE'' or format=:''DDMMYY'' or format=:''MMDDYY''';
put 'or format=:''YYMMDD'' or format=:''E8601DA'' or format=:''B8601DA''';
put 'or format=:''MONYY''';
put 'then ddtype=''DATE'';';
put 'else if format=:''TIME'' then ddtype=''TIME'';';
put 'else ddtype=''NUMERIC'';';
put 'end;';
put 'if label='''' then label=name;';
put 'run;';
put 'proc sql;';
put 'drop table &dropds;';
put '%mend mp_getcols;';
put '/** @cond */';
put '%macro mf_existfeature(feature';
put ')/*/STORE SOURCE*/;';
put '%let feature=%upcase(&feature);';
put '%local platform;';
put '%let platform=%mf_getplatform();';
put '%if &feature= %then %do;';
put '%put No feature was requested for detection;';
put '%end;';
put '%else %if &feature=COLCONSTRAINTS %then %do;';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=PROCLUA %then %do;';
put '/* https://blogs.sas.com/content/sasdummy/2015/08/03/using-lua-within-your-sas-programs */';
put '%if &platform=SASVIYA %then 1;';
put '%else %if "&sysver"="9.2" or "&sysver"="9.3" %then 0;';
put '%else %if "&SYSVLONG" < "9.04.01M3" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=DBMS_MEMTYPE %then %do;';
put '/* does dbms_memtype exist in dictionary.tables? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 0;';
put '%else 1;';
put '%end;';
put '%else %if &feature=EXPORTXLS %then %do;';
put '/* is it possible to PROC EXPORT an excel file? */';
put '%if "%substr(&sysver,1,1)"="4" or "%substr(&sysver,1,1)"="5" %then 1;';
put '%else %if %sysfunc(sysprod(SAS/ACCESS Interface to PC Files)) = 1 %then 1;';
put '%else 0;';
put '%end;';
put '%else %do;';
put '-1';
put '%put &sysmacroname: &feature not found;';
put '%end;';
put '%mend mf_existfeature;';
put '/** @endcond */';
put '/** @cond */';
put '%macro mf_getengine(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid engnum rc engine;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(';
put 'open(sashelp.vlibnam(where=(libname="%upcase(&libref)")),i)';
put ');';
put '%if (&dsid ^= 0) %then %do;';
put '%let engnum=%sysfunc(varnum(&dsid,ENGINE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let engine=%sysfunc(getvarc(&dsid,&engnum));';
put '%put &libref. ENGINE is &engine.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '%upcase(&engine)';
put '%mend mf_getengine;';
put '/** @endcond */';
put '%macro mf_getschema(libref';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum rc schema;';
put '/* in case the parameter is a libref.tablename, pull off just the libref */';
put '%let libref = %upcase(%scan(&libref, 1, %str(.)));';
put '%let dsid=%sysfunc(open(sashelp.vlibnam(where=(';
put 'libname="%upcase(&libref)" and sysname=''Schema/Owner''';
put ')),i));';
put '%if (&dsid ^= 0) %then %do;';
put '%let vnum=%sysfunc(varnum(&dsid,SYSVALUE));';
put '%let rc=%sysfunc(fetch(&dsid));';
put '%let schema=%sysfunc(getvarc(&dsid,&vnum));';
put '%put &libref. schema is &schema.;';
put '%let rc= %sysfunc(close(&dsid));';
put '%end;';
put '&schema';
put '%mend mf_getschema;';
put '/** @endcond */';
put '%macro mf_isblank(param';
put ')/*/STORE SOURCE*/;';
put '%sysevalf(%superq(param)=,boolean)';
put '%mend mf_isblank;';
put '%macro mp_dropmembers(';
put 'list /* space separated list of datasets / views */';
put ',libref=WORK /* can only drop from a single library at a time */';
put ',iftrue=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%if %mf_isblank(&list) %then %do;';
put '%put NOTE: nothing to drop!;';
put '%return;';
put '%end;';
put 'proc datasets lib=&libref nolist;';
put 'delete &list;';
put 'delete &list /mtype=view;';
put 'run;';
put '%mend mp_dropmembers;';
put '%macro mp_getconstraints(lib=WORK';
put ',ds=';
put ',outds=mp_getconstraints';
put ',mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '/**';
put '* Cater for environments where sashelp.vcncolu is not available';
put '*/';
put '%if %sysfunc(exist(sashelp.vcncolu,view))=0 %then %do;';
put 'proc sql;';
put 'create table &outds(';
put 'libref char(8)';
put ',TABLE_NAME char(32)';
put ',constraint_type char(8) label=''Constraint Type''';
put ',constraint_name char(32) label=''Constraint Name''';
put ',column_name char(32) label=''Column''';
put ',constraint_order num';
put ');';
put '%return;';
put '%end;';
put '/**';
put '* Neither dictionary tables nor sashelp provides a constraint order column,';
put '* however they DO arrive in the correct order. So, create the col.';
put '**/';
put '%local vw;';
put '%let vw=%mf_getuniquename(prefix=mp_getconstraints_vw_);';
put 'data &vw /view=&vw;';
put 'set sashelp.vcncolu;';
put 'where table_catalog="&lib";';
put '/* use retain approach to reset the constraint order with each constraint */';
put 'length tmp $1000;';
put 'retain tmp;';
put 'drop tmp;';
put 'if tmp ne catx(''|'',table_catalog,table_name,constraint_name) then do;';
put 'constraint_order=1;';
put 'end;';
put 'else constraint_order+1;';
put 'tmp=catx(''|'',table_catalog, table_name,constraint_name);';
put 'run;';
put '/* must use SQL as proc datasets does not support length changes */';
put 'proc sql noprint;';
put 'create table &outds as';
put 'select upcase(a.TABLE_CATALOG) as libref';
put ',upcase(a.TABLE_NAME) as TABLE_NAME';
put ',a.constraint_type';
put ',a.constraint_name';
put ',b.column_name';
put ',b.constraint_order';
put 'from dictionary.TABLE_CONSTRAINTS a';
put 'left join &vw b';
put 'on upcase(a.TABLE_CATALOG)=upcase(b.TABLE_CATALOG)';
put 'and upcase(a.TABLE_NAME)=upcase(b.TABLE_NAME)';
put 'and a.constraint_name=b.constraint_name';
put '/**';
put '* We cannot apply this clause to the underlying dictionary table. See:';
put '* https://communities.sas.com/t5/SAS-Programming/Unexpected-Where-Clause-behaviour-in-dictionary-TABLE/m-p/771554#M244867';
put '* cannot use`where calculated libref="&lib"` either as it will STILL execute';
put '* all the underlying constraint queries, causing exception errors in some';
put '* cases: https://github.com/sasjs/core/issues/283';
put '*/';
put 'where a.TABLE_CATALOG="&lib"';
put '%if "&ds" ne "" %then %do;';
put 'and upcase(a.TABLE_NAME)="&ds"';
put 'and upcase(b.TABLE_NAME)="&ds"';
put '%end;';
put 'order by libref, table_name, constraint_name, constraint_order';
put ';';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&vw,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getconstraints;';
put '%macro mp_getpk(';
put 'lib,';
put 'ds=0,';
put 'outds=work.mp_getpk,';
put 'mdebug=0';
put ')/*/STORE SOURCE*/;';
put '%local engine schema ds1 ds2 ds3 dsn tabs1 tabs2 sum pk4sure pkdefault finalpks';
put 'pkfromindex;';
put '%let lib=%upcase(&lib);';
put '%let ds=%upcase(&ds);';
put '%let engine=%mf_getengine(&lib);';
put '%let schema=%mf_getschema(&lib);';
put '%let ds1=%mf_getuniquename(prefix=getpk_ds1);';
put '%let ds2=%mf_getuniquename(prefix=getpk_ds2);';
put '%let ds3=%mf_getuniquename(prefix=getpk_ds3);';
put '%let tabs1=%mf_getuniquename(prefix=getpk_tabs1);';
put '%let tabs2=%mf_getuniquename(prefix=getpk_tabs2);';
put '%let sum=%mf_getuniquename(prefix=getpk_sum);';
put '%let pk4sure=%mf_getuniquename(prefix=getpk_pk4sure);';
put '%let pkdefault=%mf_getuniquename(prefix=getpk_pkdefault);';
put '%let pkfromindex=%mf_getuniquename(prefix=getpk_pkfromindex);';
put '%let finalpks=%mf_getuniquename(prefix=getpk_finalpks);';
put '%local dbg;';
put '%if &mdebug=1 %then %do;';
put '%put &sysmacroname entry vars:;';
put '%put _local_;';
put '%end;';
put '%else %let dbg=*;';
put 'proc sql;';
put 'create table &ds1 as';
put 'select libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put ',upcase(name) as name';
put ',type';
put ',length';
put ',varnum';
put ',label';
put ',format';
put ',idxusage';
put ',notnull';
put 'from dictionary.columns';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put '%if &engine=SQLSVR %then %do;';
put 'proc sql;';
put 'connect using &lib;';
put 'create table work.&ds2 as';
put 'select * from connection to &lib(';
put 'select';
put 's.name as SchemaName,';
put 't.name as memname,';
put 'tc.name as name,';
put 'ic.key_ordinal as KeyOrderNr';
put 'from';
put 'sys.schemas s';
put 'inner join sys.tables t on s.schema_id=t.schema_id';
put 'inner join sys.indexes i on t.object_id=i.object_id';
put 'inner join sys.index_columns ic on i.object_id=ic.object_id';
put 'and i.index_id=ic.index_id';
put 'inner join sys.columns tc on ic.object_id=tc.object_id';
put 'and ic.column_id=tc.column_id';
put 'where i.is_primary_key=1';
put 'and s.name=%str(%'')&schema%str(%'')';
put 'order by t.name, ic.key_ordinal ;';
put ');disconnect from &lib;';
put 'create table &ds3 as';
put 'select a.*';
put ',case when b.name is not null then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&ds2 b';
put 'on a.dsn=b.memname';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn;';
put '%end;';
put '%else %do;';
put '%if &ds = 0 %then %let dsn=;';
put '/* get all constraints, in constraint order*/';
put '%mp_getconstraints(lib=&lib,ds=&dsn,outds=work.&ds2)';
put '/* extract cols that are clearly primary keys */';
put 'proc sql;';
put 'create table &pk4sure as';
put 'select libref';
put ',table_name';
put ',constraint_name';
put ',constraint_order';
put ',column_name as name';
put 'from work.&ds2';
put 'where constraint_type=''PRIMARY''';
put 'order by 1,2,3,4;';
put '/* extract unique constraints where every col is also NOT NULL */';
put 'proc sql;';
put 'create table &sum as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',count(a.column_name) as unq_cnt';
put ',count(b.column_name) as nul_cnt';
put 'from work.&ds2(where=(constraint_type =''UNIQUE'')) a';
put 'left join work.&ds2(where=(constraint_type =''NOT NULL'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.column_name=b.column_name';
put 'group by 1,2,3';
put 'having unq_cnt=nul_cnt;';
put '/* extract cols from the relevant unique constraints */';
put 'create table &pkdefault as';
put 'select a.libref';
put ',a.table_name';
put ',a.constraint_name';
put ',b.constraint_order';
put ',b.column_name as name';
put 'from &sum a';
put 'left join &ds2(where=(constraint_type =''UNIQUE'')) b';
put 'on a.libref=b.libref';
put 'and a.table_name=b.table_name';
put 'and a.constraint_name=b.constraint_name';
put 'order by 1,2,3,4;';
put '/* extract cols from the relevant unique INDEXES */';
put 'create table &pkfromindex as';
put 'select libname as libref';
put ',memname as table_name';
put ',indxname as constraint_name';
put ',indxpos as constraint_order';
put ',name';
put 'from dictionary.indexes';
put 'where nomiss=''yes'' and unique=''yes'' and upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put 'order by 1,2,3,4;';
put '/* create one table */';
put 'data &finalpks;';
put 'set &pkdefault &pk4sure &pkfromindex;';
put 'pk_ind=1;';
put '/* if there are multiple unique constraints, take the first */';
put 'by libref table_name constraint_name;';
put 'retain keepme;';
put 'if first.table_name then keepme=1;';
put 'if first.constraint_name and not first.table_name then keepme=0;';
put 'if keepme=1;';
put 'run;';
put '/* join back to starting table */';
put 'proc sql;';
put 'create table &ds3 as';
put 'select a.*';
put ',b.constraint_order';
put ',case when b.pk_ind=1 then 1 else 0 end as pk_ind';
put 'from work.&ds1 a';
put 'left join work.&finalpks b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.table_name';
put 'and upcase(a.name)=upcase(b.name)';
put 'order by libref,dsn,constraint_order;';
put '%end;';
put '/* prepare tables */';
put 'proc sql;';
put 'create table work.&tabs1 as select';
put 'libname as libref';
put ',upcase(memname) as dsn';
put ',memtype';
put '%if %mf_existfeature(DBMS_MEMTYPE)=1 %then %do;';
put ',dbms_memtype';
put '%end;';
put '%else %do;';
put ',''n/a'' as dbms_memtype format=$32.';
put '%end;';
put ',typemem';
put ',memlabel';
put ',nvar';
put ',compress';
put 'from dictionary.tables';
put 'where upcase(libname)="&lib"';
put '%if &ds ne 0 %then %do;';
put 'and upcase(memname)="&ds"';
put '%end;';
put ';';
put 'data &tabs2;';
put 'set &ds3;';
put 'length pk_fields $512;';
put 'retain pk_fields;';
put 'by libref dsn constraint_order;';
put 'if first.dsn then pk_fields='''';';
put 'if pk_ind=1 then pk_fields=catx('' '',pk_fields,name);';
put 'if last.dsn then output;';
put 'run;';
put 'proc sql;';
put 'create table &outds as';
put 'select a.libref';
put ',a.dsn';
put ',a.memtype';
put ',a.dbms_memtype';
put ',a.typemem';
put ',a.memlabel';
put ',a.nvar';
put ',a.compress';
put ',b.pk_fields';
put 'from work.&tabs1 a';
put 'left join work.&tabs2 b';
put 'on a.libref=b.libref';
put 'and a.dsn=b.dsn;';
put '/* tidy up */';
put '%mp_dropmembers(';
put '&ds1 &ds2 &ds3 &dsn &tabs1 &tabs2 &sum &pk4sure &pkdefault &finalpks,';
put 'iftrue=(&mdebug=0)';
put ')';
put '%mend mp_getpk;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mf_getvarlist(libds';
put ',dlm=%str( )';
put ',quote=no';
put ',typefilter=A';
put ')/*/STORE SOURCE*/;';
put '/* declare local vars */';
put '%local outvar dsid nvars x rc dlm q var vtype;';
put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */';
put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));';
put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));';
put '/* open dataset in macro */';
put '%let dsid=%sysfunc(open(&libds));';
put '%if &dsid %then %do;';
put '%let nvars=%sysfunc(attrn(&dsid,NVARS));';
put '%if &nvars>0 %then %do;';
put '/* add variables with supplied delimeter */';
put '%do x=1 %to &nvars;';
put '/* get variable type */';
put '%let vtype=%sysfunc(vartype(&dsid,&x));';
put '%if &vtype=&typefilter or &typefilter=A %then %do;';
put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;';
put '%if &var=&q&q %then %do;';
put '%put &sysmacroname: Empty column found in &libds!;';
put '%let var=&q. &q.;';
put '%end;';
put '%if %quote(&outvar)=%quote() %then %let outvar=&var;';
put '%else %let outvar=&outvar.&dlm.&var.;';
put '%end;';
put '%end;';
put '%end;';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: Unable to open &libds (rc=&dsid);';
put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());';
put '%let rc=%sysfunc(close(&dsid));';
put '%end;';
put '%do;%unquote(&outvar)%end;';
put '%mend mf_getvarlist;';
put '%macro mf_getvartype(libds /* two level name */';
put ', var /* variable name from which to return the type */';
put ')/*/STORE SOURCE*/;';
put '%local dsid vnum vtype rc;';
put '/* Open dataset */';
put '%let dsid = %sysfunc(open(&libds));';
put '%if &dsid. > 0 %then %do;';
put '/* Get variable number */';
put '%let vnum = %sysfunc(varnum(&dsid, &var));';
put '/* Get variable type (C/N) */';
put '%if(&vnum. > 0) %then %let vtype = %sysfunc(vartype(&dsid, &vnum.));';
put '%else %do;';
put '%put NOTE: Variable &var does not exist in &libds;';
put '%let vtype = %str( );';
put '%end;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: dataset &libds not opened! (rc=&dsid);';
put '%put &sysmacroname: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '/* Close dataset */';
put '%let rc = %sysfunc(close(&dsid));';
put '/* Return variable type */';
put '&vtype';
put '%mend mf_getvartype;';
put '%macro mf_mkdir(dir';
put ')/*/STORE SOURCE*/;';
put '%local lastchar child parent;';
put '%let lastchar = %substr(&dir, %length(&dir));';
put '%if (%bquote(&lastchar) eq %str(:)) %then %do;';
put '/* Cannot create drive mappings */';
put '%return;';
put '%end;';
put '%if (%bquote(&lastchar)=%str(/)) or (%bquote(&lastchar)=%str(\)) %then %do;';
put '/* last char is a slash */';
put '%if (%length(&dir) eq 1) %then %do;';
put '/* one single slash - root location is assumed to exist */';
put '%return;';
put '%end;';
put '%else %do;';
put '/* strip last slash */';
put '%let dir = %substr(&dir, 1, %length(&dir)-1);';
put '%end;';
put '%end;';
put '%if (%sysfunc(fileexist(%bquote(&dir))) = 0) %then %do;';
put '/* directory does not exist so prepare to create */';
put '/* first get the childmost directory */';
put '%let child = %scan(&dir, -1, %str(/\:));';
put '/*';
put 'If child name = path name then there are no parents to create. Else';
put 'they must be recursively scanned.';
put '*/';
put '%if (%length(&dir) gt %length(&child)) %then %do;';
put '%let parent = %substr(&dir, 1, %length(&dir)-%length(&child));';
put '%mf_mkdir(&parent)';
put '%end;';
put '/*';
put 'Now create the directory. Complain loudly of any errs.';
put '*/';
put '%let dname = %sysfunc(dcreate(&child, &parent));';
put '%if (%bquote(&dname) eq ) %then %do;';
put '%put %str(ERR)OR: could not create &parent + &child;';
put '%abort cancel;';
put '%end;';
put '%else %do;';
put '%put Directory created: &dir;';
put '%end;';
put '%end;';
put '/* exit quietly if directory did exist.*/';
put '%mend mf_mkdir;';
put '%macro mp_searchdata(lib=';
put ',ds=';
put ',string= /* the query will use a contains (?) operator */';
put ',numval= /* numeric must match exactly */';
put ',outloc=0';
put ',outlib=MPSEARCH';
put ',outobs=-1';
put ',filter_text=%str(1=1)';
put ')/*/STORE SOURCE*/;';
put '%local table_list table table_num table colnum col start_tm check_tm vars type';
put 'coltype;';
put '%put process began at %sysfunc(datetime(),datetime19.);';
put '%if &syscc ge 4 %then %do;';
put '%put %str(WAR)NING: SYSCC=&syscc on macro entry;';
put '%return;';
put '%end;';
put '%if &string = %then %let type=N;';
put '%else %let type=C;';
put '%if "&outloc"="0" %then %do;';
put '%let outloc=%sysfunc(pathname(work))/%mf_getuniquename();';
put '%end;';
put '%mf_mkdir(&outloc)';
put 'libname &outlib "&outloc";';
put '/* get the list of tables in the library */';
put 'proc sql noprint;';
put 'select distinct memname into: table_list separated by '' ''';
put 'from dictionary.tables';
put 'where upcase(libname)="%upcase(&lib)"';
put '%if &ds ne %then %do;';
put 'and upcase(memname)=%upcase("&ds")';
put '%end;';
put ';';
put '/* check that we have something to check */';
put '%if %length(&table_list)=0 %then %put library &lib contains no tables!;';
put '/* loop through each table */';
put '%else %do table_num=1 %to %sysfunc(countw(&table_list,%str( )));';
put '%let table=%scan(&table_list,&table_num,%str( ));';
put '%let vars=%mf_getvarlist(&lib..&table);';
put '%if %length(&vars)=0 %then %do;';
put '%put NO COLUMNS IN &lib..&table! This will be skipped.;';
put '%end;';
put '%else %do;';
put '%let check_tm=%sysfunc(datetime());';
put '/* prep input */';
put 'data &outlib..&table;';
put 'set &lib..&table;';
put 'where %unquote(&filter_text) and ( 0';
put '/* loop through columns */';
put '%do colnum=1 %to %sysfunc(countw(&vars,%str( )));';
put '%let col=%scan(&vars,&colnum,%str( ));';
put '%let coltype=%mf_getvartype(&lib..&table,&col);';
put '%if &type=C and &coltype=C %then %do;';
put '/* if a char column, see if it contains the string */';
put 'or ("&col"n ? "&string")';
put '%end;';
put '%else %if &type=N and &coltype=N %then %do;';
put '/* if numeric match exactly */';
put 'or ("&col"n = &numval)';
put '%end;';
put '%end;';
put ');';
put '%if &outobs>-1 %then %do;';
put 'if _n_ > &outobs then stop;';
put '%end;';
put 'run;';
put '%put Search query for &table took';
put '%sysevalf(%sysfunc(datetime())-&check_tm) seconds;';
put '%if &syscc ne 0 %then %do;';
put '%put %str(ERR)ROR: SYSCC=&syscc when processing &lib..&table;';
put '%return;';
put '%end;';
put '%if %mf_nobs(&outlib..&table)=0 %then %do;';
put 'proc sql;';
put 'drop table &outlib..&table;';
put '%end;';
put '%end;';
put '%end;';
put '%put process finished at %sysfunc(datetime(),datetime19.);';
put '%mend mp_searchdata;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewdata.sas';
put '@brief Provide the raw view of the data';
put '@details Pass a LIBDS and FILTER_RK to return a dataset for viewing.';
put 'VIEW datasets include all columns / rows (unlike EDIT, which are filtered';
put 'for current records and don''t include the SCD2 etc cols).';
put ' Service Inputs
';
put ' SASCONTROLTABLE
';
put '|LIBDS:$41.|FILTER_RK:$5.|SEARCHTYPE:$4|SEARCHVAL:$1000';
put '|---|---|---|---';
put '|DC258467.MPE_X_TEST|-1|CHAR|Some String|';
put ' Service Outputs
';
put ' cols
';
put '@li DDTYPE';
put '@li FORMAT';
put '@li LABEL';
put '@li LENGTH';
put '@li NAME';
put '@li TYPE';
put '@li VARNUM';
put ' sasparams
';
put '@li FILTER_TEXT';
put '@li NOBS';
put '@li PK_FIELDS - string seperated list of primary key fields, if they exist';
put '@li TABLENAME';
put '@li TABLEURI';
put '@li VARS';
put ' versions
';
put 'history of DC versions for this particular table';
put ' viewdata
';
put 'The raw data from the target table.';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li dc_createdataset.sas';
put '@li dc_gettableid.sas';
put '@li mf_existds.sas';
put '@li mf_getvarcount.sas';
put '@li mf_nobs.sas';
put '@li mf_verifymacvars.sas';
put '@li mp_abort.sas';
put '@li mp_cntlout.sas';
put '@li mp_getcols.sas';
put '@li mp_getpk.sas';
put '@li mp_jsonout.sas';
put '@li mp_searchdata.sas';
put '@li mp_validatecol.sas';
put '@li mpe_columnlevelsecurity.sas';
put '@li mpe_dsmeta.sas';
put '@li mpe_getversions.sas';
put '@li mpe_filtermaster.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/* configure macvars */';
put '%global LIBDS FILTER_RK SEARCHVAL SEARCHTYPE FMT_IND;';
put '%let maxrows=250;';
put '/* avoid code injection */';
put '%let FMT_IND=0;';
put '%let SEARCHTYPE=;';
put '%let SEARCHVAL=;';
put '%let FILTER_RK=;';
put '%let LIBDS=;';
put '/**';
put '* Validate inputs';
put '*/';
put 'data work.intest;';
put 'length libds $41 filter_rk 8. searchval $100 searchtype $4;';
put 'set work.SASCONTROLTABLE;';
put 'call symputx(''orig_libds'',libds);';
put '/* validate filter_rk */';
put 'if filter_rk le 0 then filter_rk=-1;';
put '/* check if the request is for a format catalog */';
put 'if substr(cats(reverse(libds)),1,3)=:''CF-'' then do;';
put 'libds=scan(libds,1,''-'');';
put 'putlog "Format Catalog Captured";';
put 'call symputx(''fmt_ind'',1);';
put 'end;';
put 'putlog (_all_)(=);';
put '/* validate libds */';
put '%mp_validatecol(LIBDS,LIBDS,is_libds)';
put 'if searchtype in (''CHAR'',''NUM'') then do;';
put 'searchval=tranwrd(searchval,''%'','''');';
put 'searchval=tranwrd(searchval,''&'','''');';
put 'searchval=tranwrd(searchval,'';'','''');';
put 'searchval=tranwrd(searchval,''"'','''');';
put 'call symputx(''searchtype'',searchtype);';
put 'call symputx(''searchval'',searchval);';
put 'end;';
put 'else if searchtype not in ('''',''NONE'') then do;';
put 'putlog ''ERR'' ''OR: Invalid searchtype:'' searchtype;';
put 'stop;';
put 'end;';
put 'if is_libds=0 then do;';
put 'putlog ''ERR'' ''OR: Invalid libds:'' libds;';
put 'stop;';
put 'end;';
put 'else do;';
put 'call symputx(''filter_rk'',filter_rk);';
put 'call symputx(''libds'',libds);';
put 'end;';
put 'output;';
put 'stop;';
put 'run;';
put '%mp_abort(iftrue= (%mf_verifymacvars(libds filter_rk fmt_ind)=0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem with macro inputs)';
put ')';
put '%mp_abort(iftrue= (%mf_nobs(work.intest)=0)';
put ',mac=&_program';
put ',msg=%str(Some err with service inputs)';
put ')';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '/**';
put '* assign the Library';
put '*/';
put '%dc_assignlib(READ,%scan(&LIBDS,1,.))';
put '/* abort if looking for a format and the catalog doesn''t exist */';
put '%mp_abort(iftrue= (&fmt_ind=1 and %sysfunc(exist(&libds,CATALOG))=0)';
put ',mac=&_program..sas';
put ',msg=%str(Catalog &libds does not exist!)';
put ')';
put '/**';
put 'check if dataset can actually be opened - as library may exist but it may not';
put 'be possible to assign, and even if it can, the physical table may not exist';
put '**/';
put 'data _null_;';
put 'if &fmt_ind=0 then do;';
put 'dsid=open("&libds");';
put 'rc=close(dsid);';
put 'end;';
put 'else dsid=42;';
put 'call symputx(''existds'',dsid,''l'');';
put 'putlog ''dataset exists check:'' dsid;';
put 'run;';
put '/**';
put '* get the data';
put '*/';
put '%global dsobs;';
put '%let dsobs=0;';
put '%macro x();';
put '%if &existds>0 %then %do;';
put '%if &fmt_ind=1 %then %do;';
put '/* export format and point the libds to the output table from here on */';
put '%mp_cntlout(';
put 'libcat=&libds';
put ',fmtlist=0';
put ',cntlout=work.fmtextract';
put ')';
put '%let libds=WORK.FMTEXTRACT;';
put 'proc datasets lib=work noprint;';
put 'modify FMTEXTRACT;';
put 'index create';
put 'pk_cntlout=(type fmtname fmtrow)';
put '/nomiss unique;';
put 'quit;';
put '%end;';
put 'proc sql noprint;';
put 'select count(*) into: dsobs from &libds;';
put '%put preparing query;';
put '%mpe_filtermaster(VIEW,&libds,';
put 'dclib=&mpelib,';
put 'filter_rk=&filter_rk,';
put 'outref=filtref,';
put 'outds=work.query';
put ')';
put '%put printing generated filterquery:;';
put 'data _null_;';
put 'infile filtref;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%if &searchtype=NONE or "%trim(&searchtype) " = " " %then %do;';
put '/* get row count */';
put 'filename rows temp;';
put 'data _null_;';
put 'file rows;';
put 'infile filtref end=eof;';
put 'input;';
put 'if _n_=1 then do;';
put 'put ''proc sql;'';';
put 'put "select count(*) into: dsobs from &libds where";';
put 'end;';
put 'put _infile_;';
put 'if eof then put '';'';';
put 'run;';
put 'data _null_;';
put 'infile rows;';
put 'input;';
put 'putlog _infile_;';
put 'run;';
put '%inc rows;';
put '/* send actual data, filtered and row-capped */';
put 'data work.viewdata;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'if _n_>&maxrows then stop;';
put 'run;';
put '%if %mf_nobs(work.viewdata)=0 %then %do;';
put 'data work.viewdata;';
put '/* send empty row if empty table to help with hot rendering */';
put 'output;';
put 'set work.viewdata;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do;';
put 'data work.vwsearch/view=work.vwsearch;';
put 'set &libds;';
put 'where %inc filtref;;';
put 'run;';
put '%if %upcase(&searchtype)=CHAR %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',string=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%else %if %upcase(&searchtype)=NUM %then %do;';
put '%mp_searchdata(lib=work';
put ',ds=vwsearch';
put ',numval=%superq(searchval)';
put ',outobs=&maxrows';
put ')';
put '%end;';
put '%if %mf_existds(libds=MPSEARCH.vwsearch) %then %do;';
put '%let dsobs=%mf_nobs(MPSEARCH.vwsearch);';
put 'data viewdata;';
put 'set MPSEARCH.vwsearch;';
put 'if _n_<&maxrows;';
put 'run;';
put '%end;';
put '%else %do;';
put '%let dsobs=0;';
put 'data viewdata;';
put 'set &libds;';
put 'stop;';
put 'run;';
put '%end;';
put '%end;';
put '%end;';
put '%else %do;';
put '/* physical table is not accessible so create from metatadata definition */';
put '%dc_createdataset(libds=&libds,outds=viewdata)';
put 'data viewData;';
put 'output;';
put 'set viewdata;';
put 'run;';
put '/* make filtref / work.query / work.groups to avoid downstream issues */';
put 'filename filtref temp;';
put 'data work.query;';
put 'file filtref;';
put 'x=0;';
put 'put x;';
put 'run;';
put 'data work.groups;';
put 'length groupuri groupname $32 groupdesc $128 ;';
put 'call missing (of _all_);';
put 'output;';
put 'stop;';
put 'run;';
put '%end;';
put '%mend x; %x()';
put '/* apply column level security */';
put '%mpe_columnlevelsecurity(%scan(&libds,1,.),%scan(&libds,2,.),work.viewdata';
put ',mode=VIEW';
put ',clsds=&mpelib..mpe_column_level_security';
put ',groupds=work.groups /* was created in mpe_filtermaster */';
put ',outds=work.viewdata2';
put ',outmeta=work.cls_rules';
put ')';
put '/* get table uri (if sas 9) to enable linking direct to lineage */';
put '%dc_gettableid(libref=%scan(&libds,1,.)';
put ',ds=%scan(&libds,2,.)';
put ',outds=work.parambase';
put ')';
put 'data _null_;';
put 'infile filtref end=eof;';
put 'input;';
put 'length filter_text $32767;';
put 'retain filter_text;';
put 'filter_text=catx('' '',filter_text,_infile_);';
put 'if eof then do;';
put 'if cats(filter_text)=''1=1'' then filter_text='''';';
put 'call symputx(''filter_text'',filter_text);';
put 'end;';
put 'run;';
put '%mp_getpk(%scan(&libds,1,.), ds=%scan(&libds,2,.), outds=work.pk_fields)';
put '%let pk_fields=;';
put 'data _null_;';
put 'set work.pk_fields;';
put 'call symputx(''pk_fields'',pk_fields);';
put 'run;';
put 'data work.sasparams;';
put 'set work.parambase;';
put 'format FILTER_TEXT $32767.;';
put 'FILTER_TEXT=symget(''FILTER_TEXT'');';
put 'length PK_FIELDS $512;';
put 'PK_FIELDS=symget(''PK_FIELDS'');';
put 'nobs=&dsobs;';
put 'vars=%mf_getvarcount(viewdata);';
put 'maxrows=&maxrows;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mp_getcols(&libds, outds=cols)';
put '%mpe_dsmeta(&libds, outds=dsmeta)';
put '%mpe_getversions(&mpelib,';
put '%scan(&orig_libds,1,.),';
put '%scan(&orig_libds,2,.),';
put 'outds=versions';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,cls_rules)';
put '%webout(OBJ,cols)';
put '%webout(OBJ,dsmeta)';
put '%webout(OBJ,query)';
put '%webout(OBJ,sasparams)';
put '%webout(OBJ,versions)';
put '%webout(OBJ,viewData2,fmt=Y,missing=STRING,showmeta=YES,dslabel=viewdata)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibarray;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=N,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug';
put 'sasjs_tables;';
put '%local i tempds jsonengine;';
put '/* see https://github.com/sasjs/core/issues/41 */';
put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;';
put '%else %let jsonengine=DATASTEP;';
put '%if &action=FETCH %then %do;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '/* now read in the data */';
put '%do i=1 %to &_webin_file_count;';
put '%if &_webin_file_count=1 %then %do;';
put '%let _webin_fileref1=&_webin_fileref;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put 'data _null_;';
put 'infile &&_webin_fileref&i termstr=crlf;';
put 'input;';
put 'call symputx(''input_statement'',_infile_);';
put 'putlog "&&_webin_name&i input statement: " _infile_;';
put 'stop;';
put 'data &&_webin_name&i;';
put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';';
put 'input &input_statement;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put '%end;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* fix encoding */';
put 'OPTIONS NOBOMFILE;';
put '/**';
put '* check xengine type to avoid the below err message:';
put '* > Function is only valid for filerefs using the CACHE access method.';
put '*/';
put 'data _null_;';
put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));';
put 'if xengine=''STREAM'' then do;';
put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");';
put 'end;';
put 'run;';
put '/* setup json */';
put 'data _null_;file &fref encoding=''utf-8'';';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutBEGIN<<'';';
put '%end;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '/* To avoid issues with _webout on EBI we use a temporary file */';
put 'filename _sjsref temp lrecl=131068;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* if debug mode, send back first XX records of each work table also */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put '%end;';
put 'data _null_; file _sjsref mod encoding=''utf-8'';';
put 'put "}";';
put 'run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file _sjsref mod encoding=''utf-8'';';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'put ",""SYSENCODING"" : ""&sysencoding"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}" @;';
put '%if %str(&_debug) ge 131 %then %do;';
put 'put ''>>weboutEND<<'';';
put '%end;';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjsref lrecl=1 recfm=n;';
put 'file &fref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjsref clear;';
put '%end;';
put '%mend mm_webout;';
put '%macro mf_existds(libds';
put ')/*/STORE SOURCE*/;';
put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;';
put '%else 1;';
put '%mend mf_existds;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibarray.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mm_webout.sas';
put '@li mf_existds.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%let keepvars=libraryref libraryname;';
put 'data _null_;';
put 'length keepvars $32;';
put 'set %sysfunc(ifc(%mf_existds(iwant),iwant,_null_));';
put 'call symputx(''keepvars'',keepvars);';
put 'run;';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs (keep=&keepvars);';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%mm_webout(OPEN)';
put '%mm_webout(ARR, mm_getLibs)';
put '%mm_webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewlibs;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewlibs.sas';
put '@brief List the libraries for view access';
put '@details';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '@li mp_abort.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt.lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches where libref=''*ALL*'';';
put '%put securitygroupscount=&securitygroupscount;';
put '%put ALL_CNT=&ALL_CNT;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewlibs();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %do;';
put '%put user in admin group (scenario1=&scenario1);';
put '%return;';
put '%end;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put '%return;';
put '%end;';
put '/* scenario 3 - an *ALL* libref is listed */';
put '%if &all_cnt>0 %then %do;';
put '%put all_cnt=&all_cnt;';
put '%return;';
put '%end;';
put '/* scenario 4 - specific librefs listed */';
put '%if &securitygroupscount>0 %then %do;';
put '%put scenario 4;';
put '%put securitygroupscount=&securitygroupscount;';
put 'proc sql;';
put 'delete from mm_getLibs';
put 'where upcase(libraryref) not in (select upcase(libref) from matches);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put '%put DC_RESTRICT_VIEWER=&DC_RESTRICT_VIEWER;';
put '%put securitygroupscount=&securitygroupscount;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic err!)';
put ')';
put '%mend mpestp_viewlibs;';
put '%mpestp_viewlibs()';
put '%global dc_viewlib_check;';
put '/**';
put '* deal with invalid and duplicate library definitions';
put '*/';
put 'proc sort data=mm_getlibs;';
put 'by libraryref libraryname;';
put 'run;';
put 'data mm_getlibs;';
put 'set mm_getlibs;';
put 'by libraryref;';
put 'if symget(''dc_viewlib_check'')=''YES'' then do;';
put '/* note - invalid libraries can result in exception errors. If this happens,';
put 'configure the dc_viewlib_check variable to NO in Data Controller Settings';
put '*/';
put 'rc=libname(libraryref,,''meta'',cats(''library="'',libraryname,''";''));';
put 'drop rc;';
put 'if rc ne 0 then do;';
put 'putlog "NOTE: Library " libraryname " does not exist!!";';
put 'putlog (_all_) (=);';
put 'delete;';
put 'end;';
put 'end;';
put 'if not first.libraryref then delete;';
put 'run;';
put 'proc sort data=mm_getlibs out=saslibs;';
put 'by libraryname;';
put 'run;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%webout(OPEN)';
put '%webout(OBJ,saslibs)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=viewtables;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '%macro dc_getusergroups(user=,outds=mm_getgroups);';
put '%mv_getusergroups(&user,outds=&outds)';
put 'data &outds;';
put 'length groupname groupdesc $256;';
put 'set &outds(rename=(id=groupname name=groupdesc));';
put 'run;';
put '%mend dc_getusergroups;';
put '%macro mpe_getgroups(user=,outds=);';
put '%if not %symexist(dc_repo_users) %then %let dc_repo_users=foundation;';
put '%dc_getusergroups(user=&user,outds=&outds)';
put 'data;';
put 'length groupname groupdesc $256;';
put 'set &dc_libref..mpe_groups;';
put 'where &dc_dttmtfmt. lt tx_to;';
put 'where also upcase(user_name)="%upcase(&user)";';
put 'groupname=group_name;';
put 'groupdesc=group_desc;';
put 'keep groupname groupdesc;';
put 'run;';
put 'data &outds;';
put 'set &syslast &outds(keep=groupname groupdesc);';
put 'run;';
put '%mend mpe_getgroups;';
put '%macro mpe_getvars(injs,outds);';
put '/* load parameters */';
put 'data _null_;';
put '__dummychar='''';__dummynum=0;';
put 'set &outds;';
put 'array __charvals _character_;';
put 'do over __charvals;';
put 'call symputx(vname(__charvals),__charvals,''g'');';
put 'end;';
put 'array __numvals _numeric_;';
put 'do over __numvals;';
put 'call symputx(vname(__numvals),__numvals,''g'');';
put 'end;';
put 'run;';
put '%mend mpe_getvars;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file viewtables.sas';
put '@brief List the tables and format catalogs the user can view';
put '@details Provide a library and get list of tables and catalogs. Also return';
put 'the libinfo details.';
put ' Service Inputs
';
put ' SASControlTable
';
put 'Just one input - MPLIB (the libref to get tables and info for)';
put '|MPLIB:$char8.|';
put '|---|';
put '|SOMELIB|';
put ' Service Outputs
';
put ' work.mptables
';
put '|MEMNAME:$char32.|';
put '|---|';
put '|DS1|';
put '|DS2|';
put '|DS3|';
put 'etc';
put ' work.libinfo
';
put 'If attributes are empty, they don''t need to be shown on screen.';
put '|engine $|libname $|paths $|perms $|owners $|schemas $ |libid $|libsize $|table_cnt |';
put '|---|---|---|---|---|---|---|---|---|';
put '|V9|SOMELIB|"some/path"|rwxrwxr-x|sassrv|` `|` `|636MB|33|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuser.sas';
put '@li mpe_getgroups.sas';
put '@li mpe_getvars.sas';
put '@li mpeinit.sas';
put '@version 9.2';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%global MPLIB;';
put '/* load parameters */';
put '%mpe_getvars(SASControlTable, SASControlTable)';
put '/**';
put '* assign the Library';
put '*/';
put '%put &=MPLIB;';
put '%dc_assignlib(READ,&MPLIB)';
put '%mp_abort(iftrue= (&syscc ne 0 )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to assign &mplib library)';
put ')';
put '/**';
put '* get the tables';
put '*/';
put 'data members; /* empty table */';
put 'name='''';';
put 'memtype='''';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&mplib ;';
put 'quit;';
put '/* cannot avoid the proc datasets warn!ng for an empty lib */';
put '/* nolist means no output and nowarn has no effect */';
put '%put &=syscc;';
put 'data _null_;';
put 'if "&syscc" ne "0" then do;';
put 'putlog "Library &mplib is empty, setting syscc to zero";';
put 'call symputx(''syscc'',0);';
put 'end;';
put 'run;';
put '%put &=syscc;';
put 'proc sql;';
put 'create table work.mptables as';
put 'select distinct case when memtype=''CATALOG'' then cats(name,''-FC'')';
put 'else name end as memname';
put 'from members;';
put '/* get security groups */';
put '%mpe_getgroups(user=%mf_getuser(),outds=groups)';
put '/* get security settings */';
put 'data sec;';
put 'set &mpelib..mpe_security;';
put 'where &dc_dttmtfmt. lt tx_to and ACCESS_LEVEL=''VIEW'';';
put 'where also libref in (''*ALL*'',"%upcase(&mplib)");';
put 'run;';
put '/* check for any matching groups */';
put 'proc sql noprint;';
put 'create table matches as';
put 'select * from sec';
put 'where upcase(sas_group) in (select upcase(groupname) from groups);';
put 'select count(*) into: securitygroupscount from matches;';
put 'select count(*) into: ALL_CNT from matches';
put 'where libref=''*ALL*''';
put 'or (libref="&mplib" and dsn=''*ALL*'');';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(syscc=&syscc)';
put ')';
put '%macro mpestp_viewtables();';
put '%if not %symexist(DC_RESTRICT_VIEWER) %then %let DC_RESTRICT_VIEWER=NO;';
put '/* scenario 1 - user is in admin group, hence can view all libraries */';
put 'proc sql noprint;';
put 'select count(*) into: scenario1 from groups where groupname="&mpeadmins";';
put '%if &scenario1>0 %then %return;';
put '/* scenario 2 - viewer unrestricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=NO and &securitygroupscount=0 %then %return;';
put '/* scenario 3 - an *ALL* libref or DSN is listed */';
put '%if &all_cnt>0 %then %return;';
put '/* scenario 4 - specific tables listed */';
put '%if &securitygroupscount>0 %then %do;';
put 'proc sql;';
put 'delete from mptables';
put 'where upcase(memname) not in (select upcase(dsn) from sec);';
put '%return;';
put '%end;';
put '/* viewer restricted and no groups listed */';
put '%if &DC_RESTRICT_VIEWER=YES and &securitygroupscount=0 %then %do;';
put 'data mptables;';
put 'set mptables;';
put 'stop;';
put 'run;';
put '%return;';
put '%end;';
put '%mp_abort(iftrue= (1=1)';
put ',mac=&_program..sas';
put ',msg=%str(unhandled security logic error!)';
put ')';
put '%mend mpestp_viewtables;';
put '%mpestp_viewtables()';
put '/* get libinfo */';
put 'proc sql;';
put 'create table work.libinfo as';
put 'select a.engine,';
put 'a.libname,';
put 'a.paths,';
put 'a.perms,';
put 'a.owners,';
put 'a.schemas,';
put 'a.libid,';
put 'coalesce(b.libsize,0) as libsize,';
put 'coalesce(b.table_cnt,0) as table_cnt';
put 'from &mpelib..mpe_datacatalog_libs(where=(&dc_dttmtfmt. lt tx_to)) a';
put 'left join &mpelib..mpe_datastatus_libs(where=(&dc_dttmtfmt. lt tx_to)) b';
put 'on a.libref=b.libref';
put 'where a.libref="&MPLIB";';
put '%webout(OPEN)';
put '%webout(OBJ,mptables)';
put '%webout(OBJ,libinfo)';
put '%webout(CLOSE)';
put '%mpeterm()';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/validations;
%let service=columns_in_libds;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '%macro mf_getuniquename(prefix=MC);';
put '&prefix.%substr(%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32-%length(&prefix))';
put '%mend mf_getuniquename;';
put '%macro mp_validatecol(incol,rule,outcol);';
put '/* tempcol is given a unique name with every invocation */';
put '%local tempcol;';
put '%let tempcol=%mf_getuniquename();';
put '%if &rule=ISINT %then %do;';
put '&outcol=0;';
put 'if not missing(&incol) then do;';
put '&tempcol=input(&incol,?? best32.);';
put 'if not missing(&tempcol) then if mod(&tempcol,1)=0 then &outcol=1;';
put 'end;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=ISNUM %then %do;';
put '/*';
put 'credit SOREN LASSEN';
put 'https://sasmacro.blogspot.com/2009/06/welcome-isnum-macro.html';
put '*/';
put '&tempcol=input(&incol,?? best32.);';
put 'if missing(&tempcol) then &outcol=0;';
put 'else &outcol=1;';
put 'drop &tempcol;';
put '%end;';
put '%else %if &rule=LIBDS %then %do;';
put '/* match libref.dataset */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z]\w{0,7}\.[_a-z]\w{0,31}$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for LIBDS";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%else %if &rule=FORMAT %then %do;';
put '/* match valid format - regex could probably be improved */';
put 'if _n_=1 then do;';
put 'retain &tempcol;';
put '&tempcol=prxparse(''/^[_a-z\$]\w{0,31}\.[0-9]*$/i'');';
put 'if missing(&tempcol) then do;';
put 'putlog ''ERR'' +(-1) "OR: Invalid expression for FORMAT";';
put 'stop;';
put 'end;';
put 'drop &tempcol;';
put 'end;';
put 'if prxmatch(&tempcol, trim(&incol)) then &outcol=1;';
put 'else &outcol=0;';
put '%end;';
put '%mend mp_validatecol;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for table columns';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.sourcerow
';
put 'Has source table structure.';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '@li mf_getuniquename.sas';
put '@li mp_abort.sas';
put '@li mp_validatecol.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlibds=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlibds=%mf_getuniquename();';
put '%let var_is_libds=%mf_getuniquename();';
put 'data _null_;';
put 'length xl_libref base_lib select_lib rls_libref cls_libref libref $8';
put 'xl_table base_ds select_ds rls_table cls_table dsn $32;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=symget(''libds'');';
put 'if &varlibds="&mpelib..MPE_EXCEL_CONFIG"';
put 'then &vartgtlibds=cats(xl_libref,''.'',xl_table);';
put 'else if &varlibds="&mpelib..MPE_VALIDATIONS"';
put 'then &vartgtlibds=cats(BASE_LIB,''.'',BASE_DS);';
put 'else if &varlibds="&mpelib..MPE_SELECTBOX"';
put 'then &vartgtlibds=cats(select_lib,''.'',select_ds);';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(RLS_LIBREF,''.'',RLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlibds=cats(CLS_LIBREF,''.'',CLS_TABLE);';
put 'else if &varlibds="&mpelib..MPE_TABLES"';
put 'then &vartgtlibds=cats(LIBREF,''.'',DSN);';
put '/* validate libds */';
put '%mp_validatecol(&vartgtlibds,LIBDS,&var_is_libds)';
put 'if &var_is_libds=1 then call symputx(''tgtlibds'',&vartgtlibds);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlibds" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Unable to extract libds vars from &libds inputs for &variable_nm)';
put ')';
put '%dc_assignlib(READ,%scan(&tgtlibds,1,.))';
put 'proc contents noprint data=&tgtlibds';
put 'out=work.DYNAMIC_VALUES (keep=name rename=(name=display_value) );';
put 'run;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.DYNAMIC_VALUES;';
put 'raw_value=upcase(display_value);';
put 'format raw_value;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/**';
put '* get full list of libraries';
put '*/';
put '%dc_getlibs(outds=work.mm_getLibs)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libraryname as display_value,';
put 'upcase(libraryref) as raw_value';
put 'from work.mm_getLibs';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=libraries_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct libref as display_value,';
put 'upcase(libref) as raw_value';
put 'from &mpelib..mpe_tables';
put 'where &dc_dttmtfmt. < tx_to';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_alerts.alert_lib;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for alert_lib';
put '@details Fetches libraries from mpe_tables, creates extended values for';
put 'alert_ds, and marks "*ALL*" as the forced (default) value.';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '%mp_abort(iftrue= ("%upcase(&libds)" ne "&DC_LIBREF..MPE_ALERTS" )';
put ',mac=&_program';
put ',msg=%str(';
put 'Invalid validation, expected MPE_ALERTS.ALERT_LIB, got %superq(libds)';
put ')';
put ')';
put 'proc sql;';
put 'create table work.source as';
put 'select libref,dsn';
put 'from &DC_LIBREF..MPE_TABLES';
put 'where tx_to > &dc_dttmtfmt.';
put 'order by 1,2;';
put 'data work.DYNAMIC_VALUES (keep=display_index raw_value display_value);';
put 'set work.source end=last;';
put 'by libref;';
put 'if last.libref then do;';
put 'display_index+1;';
put 'raw_value=libref;';
put 'display_value=libref;';
put 'output;';
put 'end;';
put 'if last then do;';
put 'display_index+1;';
put 'raw_value=''*ALL*'';';
put 'display_value=''*ALL*'';';
put 'output;';
put 'end;';
put 'run;';
put 'data work.dynamic_extended_values(keep=display_index extra_col_name display_type';
put 'display_value RAW_VALUE_CHAR raw_value_num forced_value);';
put 'set work.source end=last;';
put 'by libref dsn;';
put 'retain extra_col_name ''ALERT_DS'';';
put 'retain display_type ''C'';';
put 'retain raw_value_num .;';
put 'raw_value_char=dsn;';
put 'display_value=dsn;';
put 'forced_value=0;';
put 'if first.libref then display_index+1;';
put 'if last.libref then do;';
put 'display_value=''*ALL*'';';
put 'raw_value_char=''*ALL*'';';
put 'forced_value=1;';
put 'output;';
put 'end;';
put 'else output;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_tables.dsn;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief fetch extended values for DSN';
put '@details Fetches datasets in a library, and ALSO fetches a list of numeric';
put 'vars for each dataset for use in adjacent columns (such as VAR_PROCESSED,';
put 'TX_TO etc).';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put 'The FORCED_VALUE column can be used to force an extended value to be selected';
put 'by default when a particular value is chosen.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|FORCED_VALUE|';
put '|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|1|DISCOUNT_RT|"40%"|N|0.4||0|';
put '|1|DISCOUNT_RT|"30%"|N|0.3||1|';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|.|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|.|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||.|';
put '|2|DISCOUNT_RT|"40%"|N|0.4||1|';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|.|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|1|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8;';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else putlog "something unexpected happened";';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'proc sql;';
put 'create table work.source as';
put 'select upcase(memname) as memname';
put ',upcase(name) as name';
put ',type';
put 'from dictionary.columns';
put 'where libname="&TGTLIB"';
put 'and memtype=''DATA'';';
put 'create table work.members as';
put 'select distinct memname as display_value';
put 'from work.source;';
put 'data work.DYNAMIC_VALUES;';
put 'set work.members;';
put 'raw_value=display_value;';
put 'display_index=_n_;';
put 'run;';
put 'proc sql;';
put 'create table work.dynamic_extended_values as';
put 'select a.display_index';
put ',b.name as display_value';
put ',"C" as display_type';
put ',b.name as RAW_VALUE_CHAR';
put ',. as RAW_VALUE_NUM';
put 'from work.dynamic_values a';
put 'left join work.source b';
put 'on a.display_value=b.memname';
put 'where b.type=''num'';';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'extra_col_name=''VAR_PROCESSED'';output;';
put 'extra_col_name=''VAR_TXFROM'';output;';
put 'extra_col_name=''VAR_TXTO'';output;';
put 'extra_col_name=''VAR_BUSFROM'';output;';
put 'extra_col_name=''VAR_BUSTO'';output;';
put 'run;';
put '/* set some force flags */';
put 'data work.dynamic_extended_values;';
put 'set work.DYNAMIC_EXTENDED_VALUES;';
put 'forced_value=0;';
put 'if extra_col_name=''VAR_TXFROM'' & raw_value_char=''TX_FROM'' then forced_value=1;';
put 'if extra_col_name=''VAR_TXTO'' & raw_value_char=''TX_TO'' then forced_value=1;';
put 'run;';
put 'proc sort;';
put 'by extra_col_name display_index;';
put 'run;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=mpe_x_test.some_num;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_getlibs(outds=mm_getlibs);';
put 'proc sql;';
put 'create table &outds as';
put 'select distinct libname as LibraryRef';
put ',libname as LibraryName length=256';
put ',engine';
put ','''' as libraryid length=17';
put 'from dictionary.libnames';
put 'where libname not in (''WORK'',''SASUSER'');';
put 'insert into &syslast values ("&DC_LIBREF", "&DC_LIBNAME",'''',''V9'');';
put '%mend dc_getlibs;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li DC_LIBREF - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'Output should be a single table called "work.dynamic_values" in the format';
put 'below. display_value should always be character, raw_value is unformatted';
put 'character/numeric.';
put '|DISPLAY_VALUE:$|RAW_VALUE:??|';
put '|---|---|';
put '|$44.00|44|';
put ' SAS Macros
';
put '@li dc_getlibs.sas';
put '**/';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct cats(some_num) as display_value,';
put 'some_num as raw_value';
put 'from &libds';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=sas_groups;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroups(access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroups';
put ');';
put '%local oauth_bearer base_uri fname1 libref1;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '/* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getgroups;';
put '%macro dc_getgroups(outds=mm_getgroups);';
put '%mv_getgroups(outds=&outds)';
put 'proc sort';
put 'data=&outds(rename=(id=groupuri name=groupname description=groupdesc))';
put 'out=&outds (keep=groupuri groupname groupdesc);';
put 'by groupname;';
put 'run;';
put '%mend dc_getgroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief validating the mpe_security.sas_group column';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_getgroups.sas';
put '**/';
put '%dc_getgroups(outds=groups)';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct groupname as display_value,';
put 'groupname as raw_value';
put 'from work.groups';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_all;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro dc_assignlib(type,libref,passthru=);';
put '%if %length(&passthru)>0 %then %do;';
put 'proc sql;';
put 'connect using &libref as &passthru;';
put '%end;';
put '%mend dc_assignlib;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for tables in a library';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5||';
put '|1|DISCOUNT_RT|"40%"|N|0.4||';
put '|1|DISCOUNT_RT|"30%"|N|0.3||';
put '|1|CURRENCY_SYMBOL|"GBP"|C||"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C||"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5||';
put '|2|DISCOUNT_RT|"40%"|N|0.4||';
put '|2|CURRENCY_SYMBOL|"EUR"|C||"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C||"HKD"|';
put ' SAS Macros
';
put '@li dc_assignlib.sas';
put '**/';
put '/* send back the raw and formatted values */';
put '%let tgtlib=0;';
put '%let varlibds=%mf_getuniquename();';
put '%let vartgtlib=%mf_getuniquename();';
put '%let var_is_lib=%mf_getuniquename();';
put 'data _null_;';
put 'length &varlibds $41 &vartgtlib $8 libref $8 rls_libref $8;';
put 'if _n_=1 then call missing(of _all_);';
put 'set work.source_row;';
put '&varlibds=upcase(symget(''libds''));';
put 'if &varlibds="&mpelib..MPE_TABLES" then &vartgtlib=LIBREF;';
put 'else if &varlibds="&mpelib..MPE_ROW_LEVEL_SECURITY"';
put 'then &vartgtlib=RLS_LIBREF;';
put 'else if &varlibds="&mpelib..MPE_COLUMN_LEVEL_SECURITY"';
put 'then &vartgtlib=CLS_LIBREF;';
put '/* validate name */';
put 'if nvalid(&vartgtlib,''v7'') then call symputx(''tgtlib'',&vartgtlib);';
put 'call symputx(''vartgtlib'',&vartgtlib);';
put 'putlog (_all_)(=);';
put 'run;';
put '%mp_abort(iftrue= ("&tgtlib" ="0" )';
put ',mac=&_program..sas';
put ',msg=%str(Invalid library - %superq(vartgtlib))';
put ',errds=work.dc_error_response';
put ')';
put '%dc_assignlib(READ,&tgtlib)';
put 'data members; /* empty table */';
put 'name='' '';';
put 'run;';
put 'ods output Members=Members;';
put 'proc datasets library=&tgtlib ;';
put 'run;';
put '/* send back the raw and formatted values */';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct name as display_value,';
put 'upcase(name) as raw_value';
put 'from work.members';
put 'where MemType=''DATA''';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=tables_editable;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file';
put '@brief Generic validator for editable libraries';
put '@details The input table is simply one row from the target table in table';
put 'called "work.source_row".';
put 'Available macro variables:';
put '@li MPELIB - The DC control library';
put '@li LIBDS - The library.dataset being filtered';
put '@li VARIABLE_NM - The column being filtered';
put ' Service Inputs
';
put ' work.source_row
';
put '|libref:$8|';
put '|somelib|';
put ' Service Outputs
';
put 'The values provided below are generic samples - we encourage you to replace';
put 'these with realistic values in your own deployments.';
put 'DYNAMIC_VALUES
';
put 'The RAW_VALUE column may be charactor or numeric. If DISPLAY_INDEX is not';
put 'provided, it is added automatically.';
put '|DISPLAY_INDEX:best.|DISPLAY_VALUE:$|RAW_VALUE|';
put '|---|---|---|';
put '|1|$77.43|77.43|';
put '|2|$88.43|88.43|';
put 'DYNAMIC_EXTENDED_VALUES
';
put 'This table is optional. If provided, it will map the DISPLAY_INDEX from the';
put 'DYNAMIC_VALUES table to additional column/value pairs, that will be used to';
put 'populate dropdowns for _other_ cells in the _same_ row.';
put 'Should be used sparingly! The use of large tables here can slow down the';
put 'browser.';
put '|DISPLAY_INDEX:best.|EXTRA_COL_NAME:$32.|DISPLAY_VALUE:$|DISPLAY_TYPE:$1.|RAW_VALUE_NUM|RAW_VALUE_CHAR:$5000|';
put '|---|---|---|---|---|---|';
put '|1|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|1|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|1|DISCOUNT_RT|"30%"|N|0.3|` `|';
put '|1|CURRENCY_SYMBOL|"GBP"|C|` `|"GBP"|';
put '|1|CURRENCY_SYMBOL|"RSD"|C|` `|"RSD"|';
put '|2|DISCOUNT_RT|"50%"|N|0.5|` `|';
put '|2|DISCOUNT_RT|"40%"|N|0.4|` `|';
put '|2|CURRENCY_SYMBOL|"EUR"|C|` `|"EUR"|';
put '|2|CURRENCY_SYMBOL|"HKD"|C|` `|"HKD"|';
put '**/';
put '/* send back the raw and formatted values */';
put 'data _null_;';
put 'var=symget(''variable_nm'');';
put 'libds=symget(''libds'');';
put 'if libds="&mpelib..MPE_EXCEL_CONFIG" and var=''XL_TABLE'' then do;';
put 'call symputx(''srccol'',''XL_LIBREF'');';
put 'end;';
put 'else call symputx(''srccol'',''libref'');';
put 'run;';
put 'proc sql;';
put 'create table work.DYNAMIC_VALUES as';
put 'select distinct dsn as display_value,';
put 'upcase(dsn) as raw_value';
put 'from &mpelib..mpe_tables';
put '(where=(&dc_dttmtfmt. < tx_to))';
put 'where libref in (select &srccol from work.source_row)';
put 'order by 1;';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/viya_users;
%let service=usergroupsbymember;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusergroups(user';
put ',outds=work.mv_getusergroups';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users/&user/memberships?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: User &user not found!!;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%end;';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusergroups;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usergroupsbymember.sas';
put '@brief List the groups a member is in';
put '@details Runs without \%mpeinit() - this enables the dropdown to be populated';
put 'during configuration, when the settings service does not yet exist.';
put ' SAS Macros
';
put '@li mv_getusergroups.sas';
put '@li mf_getuser.sas';
put '@version 3.4';
put '@author 4GL Apps Ltd';
put '**/';
put '%mv_getusergroups(%mf_getuser(),outds=groups)';
put 'proc sort data=groups(rename=(id=uri name=groupname providerid=groupdesc))';
put 'out=groups;';
put 'by groupname;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,groups)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembers;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getusers(outds=work.mv_getusers';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%put &sysmacroname: grant_type=&grant_type;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put '%let libref1=%mf_getuniquelibref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/users?limit=10000";';
put '%if &grant_type=authorization_code %then %do;';
put 'headers "Authorization"="Bearer &&&access_token_var"';
put '"Accept"="application/json";';
put '%end;';
put '%else %do;';
put 'headers "Accept"="application/json";';
put '%end;';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'set &libref1..items;';
put 'run;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put 'libname &libref1 clear;';
put '%mend mv_getusers;';
put '%macro dc_getusers(outds=mm_getlibs);';
put '%mv_getusers(outds=&outds)';
put 'proc sort data=&outds(rename=(id=uri)) out=&outds(keep=uri name);';
put 'by name;';
put 'run;';
put '%mend dc_getusers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembers.sas';
put '@brief List all SAS users';
put '@details Gets a list of all SAS users';
put ' SAS Macros
';
put '@li dc_getusers.sas';
put '@li mpeinit.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put '%dc_getusers(outds=users)';
put '%webout(OPEN)';
put '%webout(OBJ,users)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let service=usermembersbygroup;
filename sascode temp lrecl=32767;
data _null_;
file sascode;
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '/**';
put '@file mp_jsonout.sas';
put '@brief Writes JSON in SASjs format to a fileref';
put '@details This macro can be used to OPEN a JSON stream and send one or more';
put 'tables as arrays of rows, where each row can be an object or a nested array.';
put 'There are two engines available - DATASTEP or PROCJSON.';
put 'PROC JSON is fast but will produce errs like the ones below if';
put 'special chars are encountered.';
put '> (ERR)OR: Some code points did not transcode.';
put '> An object or array close is not valid at this point in the JSON text.';
put '> Date value out of range';
put 'If this happens, try running with ENGINE=DATASTEP.';
put 'The DATASTEP engine is used to handle special SAS missing numerics, and';
put 'can also convert entire datasets to formatted values. Output JSON is always';
put 'in UTF-8.';
put 'Usage:';
put 'filename tmp temp;';
put 'data class; set sashelp.class;run;';
put '%mp_jsonout(OPEN,jref=tmp)';
put '%mp_jsonout(OBJ,class,jref=tmp)';
put '%mp_jsonout(OBJ,class,dslabel=class2,jref=tmp,showmeta=Y)';
put '%mp_jsonout(CLOSE,jref=tmp)';
put 'data _null_;';
put 'infile tmp;';
put 'input;putlog _infile_;';
put 'run;';
put 'If you are building web apps with SAS then you are strongly encouraged to use';
put 'the mX_createwebservice macros in combination with the';
put '[sasjs adapter](https://github.com/sasjs/adapter).';
put 'For more information see https://sasjs.io';
put '@param [in] action Valid values:';
put '@li OPEN - opens the JSON';
put '@li OBJ - sends a table with each row as an object';
put '@li ARR - sends a table with each row in an array';
put '@li CLOSE - closes the JSON';
put '@param [in] ds The dataset to send. Must be a work table.';
put '@param [out] jref= (_webout) The fileref to which to send the JSON';
put '@param [out] dslabel= The name to give the table in the exported JSON';
put '@param [in] fmt= (Y) Whether to keep (Y) or strip (N) formats from the table';
put '@param [in] engine= (DATASTEP) Which engine to use to send the JSON. Options:';
put '@li PROCJSON (default)';
put '@li DATASTEP (more reliable when data has non standard characters)';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to JSON';
put ' Related Files
';
put '@li mp_ds2fmtds.sas';
put '@version 9.2';
put '@author Allan Bowe';
put '@source https://github.com/sasjs/core';
put '**/';
put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y';
put ',engine=DATASTEP';
put ',missing=NULL';
put ',showmeta=N';
put ',maxobs=MAX';
put ')/*/STORE SOURCE*/;';
put '%local tempds colinfo fmtds i numcols numobs stmt_obs lastobs optval';
put 'tmpds1 tmpds2 tmpds3 tmpds4;';
put '%let numcols=0;';
put '%if &maxobs ne MAX %then %let stmt_obs=%str(if _n_>&maxobs then stop;);';
put '%if &action=OPEN %then %do;';
put 'options nobomfile;';
put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;';
put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';';
put 'run;';
put '%end;';
put '%else %if (&action=ARR or &action=OBJ) %then %do;';
put '/* force variable names to always be uppercase in the JSON */';
put 'options validvarname=upcase;';
put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation';
put '(https://support.sas.com/kb/49/325.html) we use temporary files */';
put 'filename _sjs1 temp lrecl=200 ;';
put 'data _null_; file _sjs1 encoding=''utf-8'';';
put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";';
put 'run;';
put '/* now write to _webout 1 char at a time */';
put 'data _null_;';
put 'infile _sjs1 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs1 clear;';
put '/* grab col defs */';
put 'proc contents noprint data=&ds';
put 'out=_data_(keep=name type length format formatl formatd varnum label);';
put 'run;';
put '%let colinfo=%scan(&syslast,2,.);';
put 'proc sort data=&colinfo;';
put 'by varnum;';
put 'run;';
put '/* move meta to mac vars */';
put 'data &colinfo;';
put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');';
put 'set &colinfo end=last nobs=nobs;';
put 'name=upcase(name);';
put '/* fix formats */';
put 'if type=2 or type=6 then do;';
put 'typelong=''char'';';
put 'length fmt $49.;';
put 'if format='''' then fmt=cats(''$'',length,''.'');';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else fmt=cats(format,formatl,''.'');';
put 'end;';
put 'else do;';
put 'typelong=''num'';';
put 'if format='''' then fmt=''best.'';';
put 'else if formatl=0 then fmt=cats(format,''.'');';
put 'else if formatd=0 then fmt=cats(format,formatl,''.'');';
put 'else fmt=cats(format,formatl,''.'',formatd);';
put 'end;';
put '/* 32 char unique name */';
put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);';
put 'call symputx(cats(''name'',_n_),name,''l'');';
put 'call symputx(cats(''newname'',_n_),newname,''l'');';
put 'call symputx(cats(''length'',_n_),length,''l'');';
put 'call symputx(cats(''fmt'',_n_),fmt,''l'');';
put 'call symputx(cats(''type'',_n_),type,''l'');';
put 'call symputx(cats(''typelong'',_n_),typelong,''l'');';
put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');';
put '/* overwritten when fmt=Y and a custom format exists in catalog */';
put 'if typelong=''num'' then call symputx(cats(''fmtlen'',_n_),200,''l'');';
put 'else call symputx(cats(''fmtlen'',_n_),min(32767,ceil((length+10)*1.5)),''l'');';
put 'run;';
put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql;';
put 'select count(*) into: lastobs from &ds;';
put '%if &maxobs ne MAX %then %let lastobs=%sysfunc(min(&lastobs,&maxobs));';
put '%if &engine=PROCJSON %then %do;';
put '%if &missing=STRING %then %do;';
put '%put &sysmacroname: Special Missings not supported in proc json.;';
put '%put &sysmacroname: Switching to DATASTEP engine;';
put '%goto datastep;';
put '%end;';
put 'data &tempds;';
put 'set &ds;';
put '&stmt_obs;';
put '%if &fmt=N %then format _numeric_ best32.;;';
put '/* PRETTY is necessary to avoid line truncation in large files */';
put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';';
put 'proc json out=_sjs2 pretty';
put '%if &action=ARR %then nokeys ;';
put ';export &tempds / nosastags fmtnumeric;';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs2 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs2 clear;';
put '%end;';
put '%else %if &engine=DATASTEP %then %do;';
put '%datastep:';
put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1';
put '%then %do;';
put '%put &sysmacroname: &ds NOT FOUND!!!;';
put '%return;';
put '%end;';
put '%if &fmt=Y %then %do;';
put '/**';
put '* Extract format definitions';
put '* First, by getting library locations from dictionary.formats';
put '* Then, by exporting the width using proc format';
put '* Cannot use maxw from sashelp.vformat as not always populated';
put '* Cannot use fmtinfo() as not supported in all flavours';
put '*/';
put '%let tmpds1=%substr(fmtsum%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds2=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds3=%substr(cntl%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put '%let tmpds4=%substr(col%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);';
put 'proc sql noprint;';
put 'create table &tmpds1 as';
put 'select cats(libname,''.'',memname) as FMTCAT,';
put 'FMTNAME';
put 'from dictionary.formats';
put 'where fmttype=''F'' and libname is not null';
put 'and fmtname in (select format from &colinfo where format is not null)';
put 'order by 1;';
put 'create table &tmpds2(';
put 'FMTNAME char(32),';
put 'LENGTH num';
put ');';
put '%local catlist cat fmtlist i;';
put 'select distinct fmtcat into: catlist separated by '' '' from &tmpds1;';
put '%do i=1 %to %sysfunc(countw(&catlist,%str( )));';
put '%let cat=%scan(&catlist,&i,%str( ));';
put 'proc sql;';
put 'select distinct fmtname into: fmtlist separated by '' ''';
put 'from &tmpds1 where fmtcat="&cat";';
put 'proc format lib=&cat cntlout=&tmpds3(keep=fmtname length);';
put 'select &fmtlist;';
put 'run;';
put 'proc sql;';
put 'insert into &tmpds2 select distinct fmtname,length from &tmpds3;';
put '%end;';
put 'proc sql;';
put 'create table &tmpds4 as';
put 'select a.*, b.length as MAXW';
put 'from &colinfo a';
put 'left join &tmpds2 b';
put 'on cats(a.format)=cats(upcase(b.fmtname))';
put 'order by a.varnum;';
put 'data _null_;';
put 'set &tmpds4;';
put 'if not missing(maxw);';
put 'call symputx(';
put 'cats(''fmtlen'',_n_),';
put '/* vars need extra padding due to JSON escaping of special chars */';
put 'min(32767,ceil((max(length,maxw)+10)*1.5))';
put ',''l''';
put ');';
put 'run;';
put '/* configure varlenchk - as we are explicitly shortening the variables */';
put '%let optval=%sysfunc(getoption(varlenchk));';
put 'options varlenchk=NOWARN;';
put 'data _data_(compress=char);';
put '/* shorten the new vars */';
put 'length';
put '%do i=1 %to &numcols;';
put '&&name&i $&&fmtlen&i';
put '%end;';
put ';';
put '/* rename on entry */';
put 'set &ds(rename=(';
put '%do i=1 %to &numcols;';
put '&&name&i=&&newname&i';
put '%end;';
put '));';
put '&stmt_obs;';
put 'drop';
put '%do i=1 %to &numcols;';
put '&&newname&i';
put '%end;';
put ';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=num %then %do;';
put '&&name&i=cats(put(&&newname&i,&&fmt&i));';
put '%end;';
put '%else %do;';
put '&&name&i=put(&&newname&i,&&fmt&i);';
put '%end;';
put '%end;';
put 'if _error_ then do;';
put 'call symputx(''syscc'',1012);';
put 'stop;';
put 'end;';
put 'run;';
put '%let fmtds=&syslast;';
put 'options varlenchk=&optval;';
put '%end;';
put 'proc format; /* credit yabwon for special null removal */';
put 'value bart (default=40)';
put '%if &missing=NULL %then %do;';
put '._ - .z = null';
put '%end;';
put '%else %do;';
put '._ = [quote()]';
put '. = null';
put '.a - .z = [quote()]';
put '%end;';
put 'other = [best.];';
put 'data &tempds;';
put 'attrib _all_ label='''';';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'length &&name&i $&&fmtlen&i...;';
put 'format &&name&i $&&fmtlen&i...;';
put '%end;';
put '%end;';
put '%if &fmt=Y %then %do;';
put 'set &fmtds;';
put '%end;';
put '%else %do;';
put 'set &ds;';
put '%end;';
put '&stmt_obs;';
put 'format _numeric_ bart.;';
put '%do i=1 %to &numcols;';
put '%if &&typelong&i=char or &fmt=Y %then %do;';
put 'if findc(&&name&i,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put '&&name&i=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else &&name&i=quote(cats(&&name&i));';
put '%end;';
put '%end;';
put 'run;';
put 'filename _sjs3 temp lrecl=131068 ;';
put 'data _null_;';
put 'file _sjs3 encoding=''utf-8'';';
put 'if _n_=1 then put "[";';
put 'set &tempds;';
put 'if _n_>1 then put "," @; put';
put '%if &action=ARR %then "[" ; %else "{" ;';
put '%do i=1 %to &numcols;';
put '%if &i>1 %then "," ;';
put '%if &action=OBJ %then """&&name&i"":" ;';
put '"&&name&i"n /* name literal for reserved variable names */';
put '%end;';
put '%if &action=ARR %then "]" ; %else "}" ; ;';
put '/* close out the table */';
put 'data _null_;';
put 'file _sjs3 mod encoding=''utf-8'';';
put 'put '']'';';
put 'run;';
put 'data _null_;';
put 'infile _sjs3 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs3 clear;';
put '%end;';
put 'proc sql;';
put 'drop table &colinfo, &tempds;';
put '%if %substr(&showmeta,1,1)=Y %then %do;';
put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';';
put 'data _null_;';
put 'file _sjs4;';
put 'length label $350;';
put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";';
put 'do i=1 to &numcols;';
put 'name=quote(trim(symget(cats(''name'',i))));';
put 'format=quote(trim(symget(cats(''fmt'',i))));';
put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));';
put 'length=quote(trim(symget(cats(''length'',i))));';
put 'type=quote(trim(symget(cats(''typelong'',i))));';
put 'if i>1 then put "," @@;';
put 'put name '':{"format":'' format '',"label":'' label';
put ''',"length":'' length '',"type":'' type ''}'';';
put 'end;';
put 'put ''}}'';';
put 'run;';
put '/* send back to webout */';
put 'data _null_;';
put 'infile _sjs4 lrecl=1 recfm=n;';
put 'file &jref mod lrecl=1 recfm=n;';
put 'input sourcechar $char1. @@;';
put 'format sourcechar hex2.;';
put 'put sourcechar char1. @@;';
put 'run;';
put 'filename _sjs4 clear;';
put '%end;';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put 'data _null_; file &jref encoding=''utf-8'' mod ;';
put 'put "}";';
put 'run;';
put '%end;';
put '%mend mp_jsonout;';
put '/**';
put '@file';
put '@brief Send data to/from the SAS Viya Job Execution Service';
put '@details This macro should be added to the start of each Job Execution';
put 'Service, **immediately** followed by a call to:';
put '%mv_webout(FETCH)';
put 'This will read all the input data and create same-named SAS datasets in the';
put 'WORK library. You can then insert your code, and send data back using the';
put 'following syntax:';
put 'data some datasets; * make some data ;';
put 'retain some columns;';
put 'run;';
put '%mv_webout(OPEN)';
put '%mv_webout(ARR,some) * Array format, fast, suitable for large tables ;';
put '%mv_webout(OBJ,datasets) * Object format, easier to work with ;';
put '%mv_webout(CLOSE)';
put '@param [in] action Either OPEN, ARR, OBJ or CLOSE';
put '@param [in] ds The dataset to send back to the frontend';
put '@param [in] _webout= fileref for returning the json';
put '@param [out] fref=(_mvwtemp) Temp fileref to which to write the output';
put '@param [out] dslabel= value to use instead of table name for sending to JSON';
put '@param [in] fmt= (N) Setting Y converts all vars to their formatted values';
put '@param [in] stream=(Y) Change to N if not streaming to _webout';
put '@param [in] missing= (NULL) Special numeric missing values can be sent as NULL';
put '(eg `null`) or as STRING values (eg `".a"` or `".b"`)';
put '@param [in] showmeta= (N) Set to Y to output metadata alongside each table,';
put 'such as the column formats and types. The metadata is contained inside an';
put 'object with the same name as the table but prefixed with a dollar sign - ie,';
put '`,"$tablename":{"formats":{"col1":"$CHAR1"},"types":{"COL1":"C"}}`';
put '@param [in] maxobs= (MAX) Provide an integer to limit the number of input rows';
put 'that should be converted to output JSON';
put '@param [in] workobs= (0) When set to a positive integer, will create a new';
put 'output object (WORK) which contains this number of observations from all';
put 'tables in the WORK library.';
put ' SAS Macros
';
put '@li mp_jsonout.sas';
put '@li mf_getuser.sas';
put ' Related Macros
';
put '@li ms_webout.sas';
put '@li mm_webout.sas';
put '@version Viya 3.3';
put '@author Allan Bowe, source: https://github.com/sasjs/core';
put '**/';
put '%macro mv_webout(action,ds,fref=_mvwtemp,dslabel=,fmt=N,stream=Y,missing=NULL';
put ',showmeta=N,maxobs=MAX,workobs=0';
put ');';
put '%global _webin_file_count _webin_fileuri _debug _omittextlog _webin_name';
put 'sasjs_tables SYS_JES_JOB_URI;';
put '%if %index("&_debug",log) %then %let _debug=131;';
put '%local i tempds table;';
put '%let action=%upcase(&action);';
put '%if &action=FETCH %then %do;';
put '%if %upcase(&_omittextlog)=FALSE or %str(&_debug) ge 131 %then %do;';
put 'options mprint notes mprintnest;';
put '%end;';
put '%if not %symexist(_webin_fileuri1) %then %do;';
put '%let _webin_file_count=%eval(&_webin_file_count+0);';
put '%let _webin_fileuri1=&_webin_fileuri;';
put '%let _webin_name1=&_webin_name;';
put '%end;';
put '/* if the sasjs_tables param is passed, we expect param based upload */';
put '%if %length(&sasjs_tables.X)>1 %then %do;';
put '/* convert data from macro variables to datasets */';
put '%do i=1 %to %sysfunc(countw(&sasjs_tables));';
put '%let table=%scan(&sasjs_tables,&i,%str( ));';
put '%if %symexist(sasjs&i.data0)=0 %then %let sasjs&i.data0=1;';
put 'data _null_;';
put 'file "%sysfunc(pathname(work))/&table..csv" recfm=n;';
put 'retain nrflg 0;';
put 'length line $32767;';
put 'do i=1 to &&sasjs&i.data0;';
put 'if &&sasjs&i.data0=1 then line=symget("sasjs&i.data");';
put 'else line=symget(cats("sasjs&i.data",i));';
put 'if i=1 and substr(line,1,7)=''%nrstr('' then do;';
put 'nrflg=1;';
put 'line=substr(line,8);';
put 'end;';
put 'if i=&&sasjs&i.data0 and nrflg=1 then do;';
put 'line=substr(line,1,length(line)-1);';
put 'end;';
put 'put line +(-1) @;';
put 'end;';
put 'run;';
put 'data _null_;';
put 'infile "%sysfunc(pathname(work))/&table..csv" termstr=crlf ;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put 'list;';
put 'data work.&table;';
put 'infile "%sysfunc(pathname(work))/&table..csv" firstobs=2 dsd';
put 'termstr=crlf;';
put 'input &input_statement;';
put 'run;';
put '%end;';
put '%end;';
put '%else %do i=1 %to &_webin_file_count;';
put '/* read in any files that are sent */';
put '/* this part needs refactoring for wide files */';
put 'filename indata filesrvc "&&_webin_fileuri&i" lrecl=999999;';
put 'data _null_;';
put 'infile indata termstr=crlf lrecl=32767;';
put 'input;';
put 'if _n_=1 then call symputx(''input_statement'',_infile_);';
put '%if %str(&_debug) ge 131 %then %do;';
put 'if _n_<20 then putlog _infile_;';
put 'else stop;';
put '%end;';
put '%else %do;';
put 'stop;';
put '%end;';
put 'run;';
put 'data &&_webin_name&i;';
put 'infile indata firstobs=2 dsd termstr=crlf ;';
put 'input &input_statement;';
put 'run;';
put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;';
put '%end;';
put '%end;';
put '%else %if &action=OPEN %then %do;';
put '/* setup webout */';
put 'OPTIONS NOBOMFILE;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '/* setup temp ref */';
put '%if %upcase(&fref) ne _WEBOUT %then %do;';
put 'filename &fref temp lrecl=999999 permission=''A::u::rwx,A::g::rw-,A::o::---'';';
put '%end;';
put '/* setup json */';
put 'data _null_;file &fref;';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'run;';
put '%end;';
put '%else %if &action=ARR or &action=OBJ %then %do;';
put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref';
put ',engine=DATASTEP,missing=&missing,showmeta=&showmeta,maxobs=&maxobs';
put ')';
put '%end;';
put '%else %if &action=CLOSE %then %do;';
put '%if %str(&workobs) > 0 %then %do;';
put '/* send back first XX records of each work table for debugging */';
put 'data;run;%let tempds=%scan(&syslast,2,.);';
put 'ods output Members=&tempds;';
put 'proc datasets library=WORK memtype=data;';
put '%local wtcnt;%let wtcnt=0;';
put 'data _null_;';
put 'set &tempds;';
put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */';
put 'i+1;';
put 'call symputx(cats(''wt'',i),name,''l'');';
put 'call symputx(''wtcnt'',i,''l'');';
put 'data _null_; file &fref mod; put ",""WORK"":{";';
put '%do i=1 %to &wtcnt;';
put '%let wt=&&wt&i;';
put 'data _null_; file &fref mod;';
put 'dsid=open("WORK.&wt",''is'');';
put 'nlobs=attrn(dsid,''NLOBS'');';
put 'nvars=attrn(dsid,''NVARS'');';
put 'rc=close(dsid);';
put 'if &i>1 then put '',''@;';
put 'put " ""&wt"" : {";';
put 'put ''"nlobs":'' nlobs;';
put 'put '',"nvars":'' nvars;';
put '%mp_jsonout(OBJ,&wt,jref=&fref,dslabel=first10rows,showmeta=Y';
put ',maxobs=&workobs';
put ')';
put 'data _null_; file &fref mod;put "}";';
put '%end;';
put 'data _null_; file &fref mod;put "}";run;';
put '%end;';
put '/* close off json */';
put 'data _null_;file &fref mod;';
put 'length SYSPROCESSNAME syserrortext syswarningtext autoexec $512;';
put 'put ",""_DEBUG"" : ""&_debug"" ";';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'autoexec=quote(urlencode(trim(getoption(''autoexec''))));';
put 'put '',"AUTOEXEC" : '' autoexec;';
put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";';
put 'SYS_JES_JOB_URI=quote(trim(resolve(symget(''SYS_JES_JOB_URI''))));';
put 'put '',"SYS_JES_JOB_URI" : '' SYS_JES_JOB_URI ;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSPROCESSID"" : ""&SYSPROCESSID"" ";';
put 'put ",""SYSPROCESSMODE"" : ""&SYSPROCESSMODE"" ";';
put 'SYSPROCESSNAME=quote(urlencode(cats(SYSPROCESSNAME)));';
put 'put ",""SYSPROCESSNAME"" : " SYSPROCESSNAME;';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'length memsize $32;';
put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";';
put 'memsize=quote(cats(memsize));';
put 'put '',"MEMSIZE" : '' memsize;';
put 'put "}";';
put '%if %upcase(&fref) ne _WEBOUT and &stream=Y %then %do;';
put 'data _null_; rc=fcopy("&fref","_webout");run;';
put '%end;';
put '%end;';
put '%mend mv_webout;';
put '/* if calling viya service with _job param, _program will conflict */';
put '/* so we provide instead as __program */';
put '%global __program _program;';
put '%let _program=%sysfunc(coalescec(&__program,&_program));';
put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO,maxobs=MAX);';
put '%mv_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt';
put ',missing=&missing';
put ',showmeta=&showmeta';
put ',maxobs=&maxobs';
put ') %mend;';
put '/* provide additional debug info */';
put '%global _program;';
put '%put &=syscc;';
put '%put user=%mf_getuser();';
put '%put pgm=&_program;';
put '%put timestamp=%sysfunc(datetime(),datetime19.);';
put '* Service Variables start;';
put '* Service Variables end;';
put '* SAS Macros start;';
put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)';
put ', errds=work.mp_abort_errds';
put ', mode=REGULAR';
put ')/*/STORE SOURCE*/;';
put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;';
put '%local fref fid i;';
put '%if not(%eval(%unquote(&iftrue))) %then %return;';
put '%put NOTE: /// mp_abort macro executing //;';
put '%if %length(&mac)>0 %then %put NOTE- called by &mac;';
put '%put NOTE - &msg;';
put '%if %symexist(_SYSINCLUDEFILEDEVICE)';
put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */';
put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)';
put '%then %do;';
put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;';
put 'data &errds;';
put 'iftrue=''1=1'';';
put 'length mac $100 msg $5000;';
put 'mac=symget(''mac'');';
put 'msg=symget(''msg'');';
put 'run;';
put 'data _null_;';
put 'abort cancel FILE;';
put 'run;';
put '%return;';
put '%end;';
put '%end;';
put '/* Web App Context */';
put '%if %symexist(_PROGRAM)';
put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)';
put 'or &mode=INCLUDE';
put '%then %do;';
put 'options obs=max replace mprint;';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"';
put '%then %do;';
put 'options nosyntaxcheck;';
put '%end;';
put '%if &mode=INCLUDE %then %do;';
put '%if %sysfunc(exist(&errds))=1 %then %do;';
put 'data _null_;';
put 'set &errds;';
put 'call symputx(''iftrue'',iftrue,''l'');';
put 'call symputx(''mac'',mac,''l'');';
put 'call symputx(''msg'',msg,''l'');';
put 'putlog (_all_)(=);';
put 'run;';
put '%if (&iftrue)=0 %then %return;';
put '%end;';
put '%else %do;';
put '%put &sysmacroname: No include errors found;';
put '%return;';
put '%end;';
put '%end;';
put '/* extract log errs / warns, if exist */';
put '%local logloc logline;';
put '%global logmsg; /* capture global messages */';
put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;';
put '%else %let logloc=%qsysfunc(getoption(LOG));';
put 'proc printto log=log;run;';
put '%let logline=0;';
put '%if %length(&logloc)>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input; putlog _infile_;';
put 'i=1;';
put 'retain logonce 0;';
put 'if (';
put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"';
put ') and logonce=0 then';
put 'do;';
put 'call symputx(''logline'',_n_);';
put 'logonce+1;';
put 'end;';
put 'run;';
put '/* capture log including lines BEFORE the err */';
put '%if &logline>0 %then %do;';
put 'data _null_;';
put 'infile &logloc lrecl=5000;';
put 'input;';
put 'i=1;';
put 'stoploop=0;';
put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);';
put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));';
put 'input;';
put 'i+1;';
put 'stoploop=1;';
put 'end;';
put 'if stoploop=1 then stop;';
put 'run;';
put '%end;';
put '%end;';
put '%if %symexist(SYS_JES_JOB_URI) %then %do;';
put '/* setup webout for Viya */';
put 'options nobomfile;';
put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;';
put 'filename _webout temp lrecl=999999 mod;';
put '%end;';
put '%else %do;';
put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"';
put 'name="_webout.json" lrecl=999999 mod;';
put '%end;';
put '%end;';
put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;';
put 'options nobomfile;';
put '/* set up http header for SASjs Server */';
put '%let fid=%sysfunc(fopen(&fref,A));';
put '%if &fid=0 %then %do;';
put '%put %str(ERR)OR: %sysfunc(sysmsg());';
put '%return;';
put '%end;';
put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));';
put '%let rc=%sysfunc(fwrite(&fid));';
put '%let rc=%sysfunc(fclose(&fid));';
put '%let rc=%sysfunc(filename(&fref));';
put '%end;';
put '/* send response in SASjs JSON format */';
put 'data _null_;';
put 'file _webout mod lrecl=32000 encoding=''utf-8'';';
put 'length msg syswarningtext syserrortext $32767 mode $10 ;';
put 'sasdatetime=datetime();';
put 'msg=symget(''msg'');';
put '%if &logline>0 %then %do;';
put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));';
put '%end;';
put '/* escape the escapes */';
put 'msg=tranwrd(msg,''\'',''\\'');';
put '/* escape the quotes */';
put 'msg=tranwrd(msg,''"'',''\"'');';
put '/* ditch the CRLFs as chrome complains */';
put 'msg=compress(msg,,''kw'');';
put '/* quote without quoting the quotes (which are escaped instead) */';
put 'msg=cats(''"'',msg,''"'');';
put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));';
put 'else debug=''""'';';
put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';';
put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';';
put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';';
put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';';
put 'put '',"sasjsAbort" : [{'';';
put 'put '' "MSG":'' msg ;';
put 'put '' ,"MAC": "'' "&mac" ''"}]'';';
put 'put ",""SYSUSERID"" : ""&sysuserid"" ";';
put 'put '',"_DEBUG":'' debug ;';
put 'if symexist(''_metauser'') then do;';
put '_METAUSER=quote(trim(symget(''_METAUSER'')));';
put 'put ",""_METAUSER"": " _METAUSER;';
put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));';
put 'put '',"_METAPERSON": '' _METAPERSON;';
put 'end;';
put 'if symexist(''SYS_JES_JOB_URI'') then do;';
put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));';
put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;';
put 'end;';
put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));';
put 'put '',"_PROGRAM" : '' _PROGRAM ;';
put 'put ",""SYSCC"" : ""&syscc"" ";';
put 'syserrortext=cats(symget(''syserrortext''));';
put 'if findc(syserrortext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syserrortext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syserrortext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syserrortext=cats(''"'',syserrortext,''"'');';
put 'put '',"SYSERRORTEXT" : '' syserrortext;';
put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";';
put 'put ",""SYSJOBID"" : ""&sysjobid"" ";';
put 'put ",""SYSSCPL"" : ""&sysscpl"" ";';
put 'put ",""SYSSITE"" : ""&syssite"" ";';
put 'sysvlong=quote(trim(symget(''sysvlong'')));';
put 'put '',"SYSVLONG" : '' sysvlong;';
put 'syswarningtext=cats(symget(''syswarningtext''));';
put 'if findc(syswarningtext,''"\''!!''0A0D09000E0F010210111A''x) then do;';
put 'syswarningtext=''"''!!trim(';
put 'prxchange(''s/"/\\"/'',-1, /* double quote */';
put 'prxchange(''s/\x0A/\n/'',-1, /* new line */';
put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */';
put 'prxchange(''s/\x09/\\t/'',-1, /* tab */';
put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */';
put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */';
put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */';
put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */';
put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */';
put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */';
put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */';
put 'prxchange(''s/\x1A/\\u001A/'',-1, /* SUB */';
put 'prxchange(''s/\\/\\\\/'',-1,syswarningtext)';
put ')))))))))))))!!''"'';';
put 'end;';
put 'else syswarningtext=cats(''"'',syswarningtext,''"'');';
put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;';
put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';';
put 'put "}" ;';
put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';';
put 'run;';
put '%put _all_;';
put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;';
put 'data _null_;';
put 'putlog ''stpsrvset program err and syscc'';';
put 'rc=stpsrvset(''program error'', 0);';
put 'call symputx("syscc",0,"g");';
put 'run;';
put '%if &sysscp=WIN';
put 'and 1=0 /* deprecating this logic until we figure out a consistent abort */';
put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"';
put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;';
put '/* skip approach (below) does not work in windows m6+ envs */';
put 'endsas;';
put '%end;';
put '%else %do;';
put '/**';
put '* endsas kills 9.4m3 deployments by orphaning multibridges.';
put '* Abort variants are ungraceful (non zero return code)';
put '* This approach lets SAS run silently until the end :-)';
put '* Caution - fails when called within a %include within a macro';
put '* Use mp_include() to handle this.';
put '*/';
put 'filename skip temp;';
put 'data _null_;';
put 'file skip;';
put 'put ''%macro skip();'';';
put 'comment ''%mend skip; -> fix lint '';';
put 'put ''%macro skippy();'';';
put 'comment ''%mend skippy; -> fix lint '';';
put 'run;';
put '%inc skip;';
put '%end;';
put '%end;';
put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;';
put '/* endsas kills the session making it harder to fetch results */';
put 'data _null_;';
put 'syswarningtext=symget(''syswarningtext'');';
put 'syserrortext=symget(''syserrortext'');';
put 'abort_msg=symget(''msg'');';
put 'syscc=symget(''syscc'');';
put 'sysuserid=symget(''sysuserid'');';
put 'iftrue=symget(''iftrue'');';
put 'put (_all_)(/=);';
put 'call symputx(''syscc'',0);';
put 'abort cancel nolist;';
put 'run;';
put '%end;';
put '%else %do;';
put '%abort cancel;';
put '%end;';
put '%end;';
put '%else %do;';
put '%put _all_;';
put '%abort cancel;';
put '%end;';
put '%mend mp_abort;';
put '/** @endcond */';
put '%macro mf_getapploc(pgm);';
put '%if "&pgm"="" %then %do;';
put '%if %symexist(_program) %then %let pgm=&_program;';
put '%else %do;';
put '%put &sysmacroname: No value provided and no _program variable available;';
put '%return;';
put '%end;';
put '%end;';
put '%local root;';
put '/**';
put '* First check we are not in the tests/macros folder (which has no subfolders)';
put '* or specifically in the testsetup or testteardown services';
put '*/';
put '%if %index(&pgm,/tests/macros/)';
put 'or %index(&pgm,/tests/testsetup)';
put 'or %index(&pgm,/tests/testteardown)';
put '%then %do;';
put '%let root=%substr(&pgm,1,%index(&pgm,/tests)-1);';
put '&root';
put '%return;';
put '%end;';
put '/**';
put '* Next, move up two levels to avoid matches on subfolder or service name';
put '*/';
put '%let root=%substr(&pgm,1,%length(&pgm)-%length(%scan(&pgm,-1,/))-1);';
put '%let root=%substr(&root,1,%length(&root)-%length(%scan(&root,-1,/))-1);';
put '%if %index(&root,/tests/) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/tests/)-1);';
put '%end;';
put '%else %if %index(&root,/services) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/services)-1);';
put '%end;';
put '%else %if %index(&root,/jobs) %then %do;';
put '%let root=%substr(&root,1,%index(&root,/jobs)-1);';
put '%end;';
put '%else %put &sysmacroname: Could not find an app location from &pgm;';
put '&root';
put '%mend mf_getapploc ;';
put '%macro dc_getsettings();';
put '%global DC_LIBNAME DC_LIBREF;';
put '%if %symexist(_PROGRAM) %then %let root=&_program;';
put '%else %do;';
put '%global _metauser;';
put '%let _metauser=&sysuserid;';
put '/* to mimic a "real" _program we need to give a dummy role and stp name */';
put '%let root=/dummyRole/dummyName;';
put '%end;';
put '/* the DC precode is stored in the Admin folder in the root of';
put 'the project. Lets find that root. */';
put '%put &=root;';
put '%let root=%mf_getapploc();';
put '%put &=root;';
put '/* Now we know the root location we can retrieve the params */';
put '/* only do this if the lib is not assigned - this is an expensive Viya call */';
put '%if x&dc_libref.x=xx %then %do;';
put '%put fetching settings from API - this is an expensive call;';
put '%put it is recommended to put these values in the autoexec;';
put 'filename __dc filesrvc folderpath="&root/services";';
put '%inc __dc(settings)/source2;';
put '%end;';
put '%let DC_LIBNAME=&dc_libref;';
put '%let mpelib=&DC_LIBREF;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem running &sysmacroname (&syswarningtext &syserrortext))';
put ')';
put '%mend dc_getsettings;';
put '%macro mf_fmtdttm(';
put ')/*/STORE SOURCE*/;';
put '%if "&sysver"="9.2" or "&sysver"="9.3"';
put 'or ("&sysver"="9.4" and "%substr(&SYSVLONG,9,1)" le "3")';
put 'or "%substr(&sysver,1,1)"="4"';
put 'or "%substr(&sysver,1,1)"="5"';
put '%then %do;DATETIME19.3%end;';
put '%else %do;E8601DT26.6%end;';
put '%mend mf_fmtdttm;';
put '%macro mf_getuser(';
put ')/*/STORE SOURCE*/;';
put '%local user;';
put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;';
put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;';
put '%let user=&SYS_COMPUTE_SESSION_OWNER;';
put '%end;';
put '%else %if %symexist(_metaperson) %then %do;';
put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;';
put '/* sometimes SAS will add @domain extension - remove for consistency */';
put '/* but be sure to quote in case of usernames with commas */';
put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));';
put '%end;';
put '%else %let user=&sysuserid;';
put '%quote(&user)';
put '%mend mf_getuser;';
put '%macro mp_init(prefix=SASJS';
put ')/*/STORE SOURCE*/;';
put '%if %symexist(SASJS_PREFIX) %then %return; /* only run once */';
put '%global';
put 'SASJS_PREFIX /* the ONLY hard-coded global macro variable in SASjs */';
put '&prefix._FUNCTIONS /* used in mcf_init() to track core function compilation */';
put '&prefix._INIT_NUM /* initialisation time as numeric */';
put '&prefix._INIT_DTTM /* initialisation time in E8601DT26.6 format */';
put '&prefix.WORK /* avoid typing %sysfunc(pathname(work)) every time */';
put ';';
put '%let sasjs_prefix=&prefix;';
put 'data _null_;';
put 'dttm=datetime();';
put 'call symputx("&sasjs_prefix._init_num",dttm,''g'');';
put 'call symputx("&sasjs_prefix._init_dttm",put(dttm,E8601DT26.6),''g'');';
put 'call symputx("&sasjs_prefix.work",pathname(''WORK''),''g'');';
put 'run;';
put 'options';
put 'compress=CHAR /* default is none so ensure we have something! */';
put 'datastmtchk=ALLKEYWORDS /* protection from overwriting input datasets */';
put 'errorcheck=STRICT /* catch errs in libname/filename statements */';
put 'fmterr /* ensure err when a format cannot be found */';
put 'mergenoby=%str(ERR)OR /* throw err when a merge has no BY variables */';
put 'missing=. /* changing this can cause hard to detect errs */';
put 'noquotelenmax /* avoid warnings for long strings */';
put 'noreplace /* avoid overwriting permanent datasets */';
put 'ps=max /* reduce log size slightly */';
put 'ls=max /* reduce log even more and avoid word truncation */';
put 'validmemname=COMPATIBLE /* avoid special characters etc in table names */';
put 'validvarname=V7 /* avoid special characters etc in variable names */';
put 'varinitchk=%str(ERR)OR /* avoid data mistakes from variable name typos */';
put 'varlenchk=%str(ERR)OR /* fail hard if truncation (data loss) can result */';
put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" %then %do;';
put 'noautocorrect /* disallow misspelled procedure names */';
put 'dsoptions=note2err /* undocumented - convert bad NOTEs to ERRs */';
put '%end;';
put ';';
put '%mend mp_init;';
put '%macro mpeinit(fetch=YES);';
put '%global mpeinit';
put 'mpeadmins /* group with unrestricted Meditor access */';
put 'mpelocapprovals /* location for landing and staging files */';
put 'mpelib /* location of configuration tables for DC */';
put 'dc_repo_users /* location of user / group metadata */';
put 'dc_licence_key /* extracted in dc_getsettings */';
put 'dc_activation_key /* extracted in dc_getsettings */';
put 'dc_locale /* extracted in dc_getsettings */';
put 'dc_dttmtfmt /* can be overridden in dc_getsettings */';
put '_debug /* automatic variable when provided in URL */';
put 'sasjs_mdebug /* used to show extra info when _debug is enabled */';
put ';';
put '%if &mpeinit=1 %then %return;';
put '%else %let mpeinit=1;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(Problem on service startup (&syswarningtext &syserrortext))';
put ')';
put '%mp_init()';
put '%if &fetch=YES %then %do;';
put '%webout(FETCH)';
put '%end;';
put '%global _CLIENTNAME;';
put '%mp_abort(iftrue= (&_CLIENTNAME=SAS Enterprise Guide)';
put ',mac=&_program..sas';
put ',msg=%str(Data Controller is a web app and should not be executed from EG)';
put ')';
put 'options urlencoding=utf8 nobomfile lrecl=32767;';
put '%let perf=%sysfunc(datetime());';
put '%put perfdiff: 0;';
put '%let dc_locale=SYSTEM; /* default if not set */';
put '/**';
put '* E8601DT26.6 has widest database support - but not all SAS flavours can';
put '* handle it. Override in the settings STP if needed.';
put '*/';
put 'data _null_;';
put 'dc_dttmtfmt=''"%sysfunc(datetime(),''!!"%mf_fmtdttm()"!!'')"dt'';';
put 'call symputx(''dc_dttmtfmt'',dc_dttmtfmt);';
put 'put dc_dttmtfmt=;';
put 'run;';
put '%put &=dc_dttmtfmt;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc prior to dc_getsettings)';
put ')';
put '%dc_getsettings()';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program';
put ',msg=%str(syscc=&syscc after dc_getsettings)';
put ')';
put 'data _null_;';
put 'set &DC_LIBREF..mpe_config(where=(';
put 'var_scope="DC"';
put 'and &dc_dttmtfmt lt tx_to';
put 'and var_active=1';
put '));';
put 'call symputx(var_name,var_value,''G'');';
put 'putlog var_name "=" var_value;';
put 'run;';
put '%let mpelib=&dc_libref;';
put '%let mpeadmins=&dc_admin_group;';
put '%let mpelocapprovals=&dc_staging_area;';
put '%let dc_repo_users=&dc_repo_users;';
put '%if &dc_locale ne SYSTEM %then %do;';
put 'options locale=&dc_locale;';
put '%end;';
put '%mp_abort(iftrue= (&syscc ne 0)';
put ',mac=&_program..sas';
put ',msg=%str(Problem during compilation or with STP precode (&syswarningtext))';
put ')';
put '%if "&_debug"="2477" or "&_debug"="fields,log,trace" or "&_debug"="131"';
put '%then %do;';
put '%let sasjs_mdebug=1;';
put '%end;';
put '%mend mpeinit;';
put '%macro mf_mval(var);';
put '%if %symexist(&var) %then %do;';
put '%superq(&var)';
put '%end;';
put '%mend mf_mval;';
put '%macro mf_trimstr(basestr,trimstr);';
put '%local baselen trimlen trimval;';
put '/* return if basestr is shorter than trimstr (or 0) */';
put '%let baselen=%length(%superq(basestr));';
put '%let trimlen=%length(%superq(trimstr));';
put '%if &baselen < &trimlen or &baselen=0 %then %return;';
put '/* obtain the characters from the end of basestr */';
put '%let trimval=%qsubstr(%superq(basestr)';
put ',%length(%superq(basestr))-&trimlen+1';
put ',&trimlen);';
put '/* compare and if matching, chop it off! */';
put '%if %superq(basestr)=%superq(trimstr) %then %do;';
put '%return;';
put '%end;';
put '%else %if %superq(trimval)=%superq(trimstr) %then %do;';
put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)';
put '%end;';
put '%else %do;';
put '&basestr';
put '%end;';
put '%mend mf_trimstr;';
put '%macro mf_getplatform(switch';
put ')/*/STORE SOURCE*/;';
put '%local a b c;';
put '%if &switch.NONE=NONE %then %do;';
put '%if %symexist(sasjsprocessmode) %then %do;';
put '%if &sasjsprocessmode=Stored Program %then %do;';
put 'SASJS';
put '%return;';
put '%end;';
put '%end;';
put '%if %symexist(sysprocessmode) %then %do;';
put '%if "&sysprocessmode"="SAS Object Server"';
put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;';
put 'SASVIYA';
put '%end;';
put '%else %if "&sysprocessmode"="SAS Stored Process Server"';
put 'or "&sysprocessmode"="SAS Workspace Server"';
put '%then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;';
put 'SASMETA';
put '%return;';
put '%end;';
put '%else %do;';
put 'BASESAS';
put '%return;';
put '%end;';
put '%end;';
put '%else %if &switch=SASSTUDIO %then %do;';
put '/* return the version of SAS Studio else 0 */';
put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;';
put '%let a=%mf_mval(_CLIENTVERSION);';
put '%let b=%scan(&a,1,.);';
put '%if %eval(&b >2) %then %do;';
put '&b';
put '%end;';
put '%else 0;';
put '%end;';
put '%else 0;';
put '%end;';
put '%else %if &switch=VIYARESTAPI %then %do;';
put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)';
put '%end;';
put '%mend mf_getplatform;';
put '%macro mpeterm();';
put '%local oldloc;';
put 'data _null_;';
put 'if symexist(''SYSPRINTTOLOG'') then oldloc=symget(''SYSPRINTTOLOG'');';
put 'else oldloc=getoption(''LOG'');';
put 'if subpad(oldloc,1,1) not in (''"'',"''",'' '') then oldloc=quote(cats(oldloc));';
put 'call symputx(''oldloc'',oldloc,''l'');';
put 'run;';
put '%if %length(&oldloc)>0 %then %do;';
put 'proc printto log=log;';
put 'run;';
put 'data _null_;';
put 'infile &oldloc;';
put 'input; putlog _infile_;';
put 'run;';
put '%end;';
put '%if %sysfunc(exist(&dc_libref..mpe_requests)) and %mf_getplatform() ne SASVIYA';
put '%then %do;';
put 'data ;';
put 'if 0 then set &dc_libref..mpe_requests;';
put 'request_dttm=%sysfunc(datetime());';
put 'request_user="%mf_getuser()";';
put 'request_service="%scan(&_program,-2,/)/%scan(&_program,-1,/)";';
put 'request_params='''';';
put 'output;stop;';
put 'proc append base=&dc_libref..mpe_requests data=&syslast force nowarn;';
put 'run;';
put '%end;';
put '%mend mpeterm;';
put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);';
put '%local rc fname;';
put '%if &prefix=0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%end;';
put '%else %do;';
put '%local x len;';
put '%let len=%eval(8-%length(&prefix));';
put '%let x=0;';
put '%do x=0 %to &maxtries;';
put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);';
put '%if %sysfunc(fileref(&fname)) > 0 %then %do;';
put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));';
put '%if &rc %then %put %sysfunc(sysmsg());';
put '&fname';
put '%return;';
put '%end;';
put '%end;';
put '%put unable to find available fileref after &maxtries attempts;';
put '%end;';
put '%mend mf_getuniquefileref;';
put '%macro mf_getuniquelibref(prefix=mclib,maxtries=1000);';
put '%local x;';
put '%if ( %length(&prefix) gt 7 ) %then %do;';
put '%put %str(ERR)OR: The prefix parameter cannot exceed 7 characters.;';
put '0';
put '%return;';
put '%end;';
put '%else %if (%sysfunc(NVALID(&prefix,v7))=0) %then %do;';
put '%put %str(ERR)OR: Invalid prefix (&prefix);';
put '0';
put '%return;';
put '%end;';
put '/* Set maxtries equal to ''10 to the power of [# unused characters] - 1'' */';
put '%let maxtries=%eval(10**(8-%length(&prefix))-1);';
put '%do x = 0 %to &maxtries;';
put '%if %sysfunc(libref(&prefix&x)) ne 0 %then %do;';
put '&prefix&x';
put '%return;';
put '%end;';
put '%let x = %eval(&x + 1);';
put '%end;';
put '%put %str(ERR)OR: No usable libref in range &prefix.0-&maxtries;';
put '%put %str(ERR)OR- Try reducing the prefix or deleting some libraries!;';
put '0';
put '%mend mf_getuniquelibref;';
put '%macro mv_getgroupmembers(group';
put ',access_token_var=ACCESS_TOKEN';
put ',grant_type=sas_services';
put ',outds=work.viyagroupmembers';
put ');';
put '%local oauth_bearer;';
put '%if &grant_type=detect %then %do;';
put '%if %symexist(&access_token_var) %then %let grant_type=authorization_code;';
put '%else %let grant_type=sas_services;';
put '%end;';
put '%if &grant_type=sas_services %then %do;';
put '%let oauth_bearer=oauth_bearer=sas_services;';
put '%let &access_token_var=;';
put '%end;';
put '%mp_abort(iftrue=(&grant_type ne authorization_code and &grant_type ne password';
put 'and &grant_type ne sas_services';
put ')';
put ',mac=&sysmacroname';
put ',msg=%str(Invalid value for grant_type: &grant_type)';
put ')';
put 'options noquotelenmax;';
put '%local base_uri; /* location of rest apis */';
put '%let base_uri=%mf_getplatform(VIYARESTAPI);';
put '/* fetching folder details for provided path */';
put '%local fname1;';
put '%let fname1=%mf_getuniquefileref();';
put 'proc http method=''GET'' out=&fname1 &oauth_bearer';
put 'url="&base_uri/identities/groups/&group/members?limit=10000";';
put 'headers';
put '%if &grant_type=authorization_code %then %do;';
put '"Authorization"="Bearer &&&access_token_var"';
put '%end;';
put '"Accept"="application/json";';
put 'run;';
put '/*data _null_;infile &fname1;input;putlog _infile_;run;*/';
put '%if &SYS_PROCHTTP_STATUS_CODE=404 %then %do;';
put '%put NOTE: Group &group not found!!;';
put 'data &outds;';
put 'length id name $43;';
put 'call missing(of _all_);';
put 'run;';
put '%end;';
put '%else %do;';
put '%mp_abort(iftrue=(&SYS_PROCHTTP_STATUS_CODE ne 200)';
put ',mac=&sysmacroname';
put ',msg=%str(&SYS_PROCHTTP_STATUS_CODE &SYS_PROCHTTP_STATUS_PHRASE)';
put ')';
put '%let libref1=%mf_getuniquelibref();';
put 'libname &libref1 JSON fileref=&fname1;';
put 'data &outds;';
put 'length id name $43;';
put 'set &libref1..items;';
put 'run;';
put 'libname &libref1 clear;';
put '%end;';
put '/* clear refs */';
put 'filename &fname1 clear;';
put '%mend mv_getgroupmembers;';
put '%macro dc_getgroupmembers(group,outds=dc_getgroupmembers);';
put '%mv_getgroupmembers(%str(&group),outds=&outds)';
put 'data &outds ;';
put 'length membername $64;';
put 'set &outds(rename=(name=MemberName));';
put 'run;';
put '%mend dc_getgroupmembers;';
put '* SAS Macros end;';
put '* SAS Includes start;';
put '* SAS Includes end;';
put '* Binary Files start;';
put '* Binary Files end;';
put '* ServiceInit start;';
put 'options noquotelenmax ps=max;';
put 'cas dcsession sessopts=(caslib=casuser);';
put 'caslib _all_ assign;';
put 'libname casuser cas caslib=casuser;';
put '/*caslib casmusic path=''/opt/sas/viya/cascache/tracks'' libref=casmusic ;*/';
put '%let syscc=0;';
put '%put _global_;';
put '* ServiceInit end;';
put '* Service start;';
put '/**';
put '@file usermembersbygroup.sas';
put '@brief List the members of a group';
put ' SAS Macros
';
put '@li mp_abort.sas';
put '@li mpeinit.sas';
put '@li dc_getgroupmembers.sas';
put '@version 9.3';
put '@author 4GL Apps Ltd';
put '@copyright 4GL Apps Ltd. This code may only be used within Data Controller';
put 'and may not be re-distributed or re-sold without the express permission of';
put '4GL Apps Ltd.';
put '**/';
put '%mpeinit()';
put 'data _null_;';
put 'set iwant;';
put 'call symputx(''groupid'',groupid);';
put 'run;';
put '%dc_getgroupmembers(%str(&groupid),outds=sasMembers)';
put 'proc sort data=sasMembers;';
put 'by membername;';
put 'run;';
put '%webout(OPEN)';
put '%webout(OBJ,sasMembers)';
put '%webout(CLOSE)';
put '* Service end;';
run;
%mv_createwebservice(path=&appLoc/&path, name=&service, code=sascode,replace=yes)
filename sascode clear;
%let path=services/web;
%let filename=favicon.ico;
filename filecode temp lrecl=96132;
data _null_;
file filecode;
put 'iVBORw0KGgoAAAANSUhEUgAAApgAAAJ6CAYAAACMvTJAAAAMFGlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr+kEBJaIAJSQm+CFOnSe0c62AhJgFAiJAQVO7Ko4FpQEQFR0RUQRdcCyKIidmUR7P1hQWVlXSzYUHmTArq+dt49Z/75cufeO9+d3JkzA4CiNSsnJwtVAiCbnyeICvBmJiQmMUmP'@;
put 'AAY0AB0YAiUWW5jjFRkZCqCM9X+XdzcAIu6vWopj/ev4fxVlDlfIBgCJhDiFI2RnQ3wYAFydnSPIA4DQBfUGc/NyxHgIYlUBJAgAERfjNClWF+MUKZ4ksYmJ8oHYEwAylcUSpAGgIObNzGenwTgKYo7WfA6PD3E1xO7sdBYH4nsQT8rOngOxIhli05Tv4qT9LWbKeEwWK20cS3ORCNmXJ8zJYs3/'@;
put 'P5fjf0t2lmhsDn3YqOmCwChxznDd6jPnhIgxFeJ2fkp4BMQqEJ/ncST2YnwnXRQYK7MfZAt94JoBBgAo4LB8QyDWgpghyoz1kmFblkDiC+3RcF5eUIwMpwjmRMnio/n8rPBQWZyV6dygMVzDFfpFj9mk8vyDIIaVhh4uSI+Jl/JET+fz4sIhVoC4R5gZHSLzfVCQ7hM+ZiMQRYk5G0L8NlXgHyW1'@;
put 'wdSzhWN5YVZslmQuWAuYZ156TKDUF0vgChNCxzhwuL5+Ug4Yh8uPlXHDYHV5R8l8i3OyImX2WA03KyBKus7YAWF+9JjvlTxYYNJ1wB5lsIIjZXO9y8mLjJFyw1EQCnyAL2ACEWwpYA7IALzuwZZB+Es64g9YQADSABdYyjRjHvGSET78RoMC8CdEXCAc9/OWjHJBPtR/GddKv5YgVTKaL/HIBE8h'@;
put 'zsY1cXfcFQ+FX0/YbHEn3HnMj6k4NivRj+hLDCT6E83GebAh6yzYBID3b3QhsOfC7MRc+GM5fItHeEroJTwiXCf0EW6DOPBEEkVmNZtXKPiBOROEgT4YzV+WXcr32eHGkLU97o27Qf6QO87ANYElPgVm4oV7wNzsofZ7hqJxbt/W8sf5xKy/z0emVzBXsJexSBn/Z3zGrX6M4vPdGnFgH/KjJbYS'@;
put 'O4Sdw05iF7B2rAUwsRNYK9aFHRPj8Up4IqmEsdmiJNwyYRzemI11o/WA9ecf5mbJ5hevlzCPOy9PvBl85uTMF/DS0vOYXvA05jKD+GyrSUxbaxsnAMRnu/ToeMOQnNkI4+I3XW4HAM4lUJn2TccyAODoUwDo777pDF7Dcl8HwLEetkiQL9WJj2NAABSgCHeFBtABBsAU5mMLHIAr8AR+IBhEgBiQ'@;
put 'CGbBFU8H2ZDzXLAQLAPFoBSsA5tAJdgGdoJ6sA8cBC2gHZwEZ8El0AOug7uwLvrBCzAE3oERBEFICA2hIxqILmKEWCC2iBPijvghoUgUkogkI2kIHxEhC5HlSClShlQiO5AG5FfkKHISuYD0IreRh8gA8hr5hGIoFVVFtVFjdDLqhHqhIWgMOhNNQ3PRArQIXYNWoLXoXrQZPYleQq+jfegLdBgD'@;
put 'mDzGwPQwS8wJ88EisCQsFRNgi7ESrByrxZqwNvg/X8X6sEHsI07E6TgTt4S1GYjH4mw8F1+Mr8Yr8Xq8GT+NX8Uf4kP4VwKNoEWwILgQgggJhDTCXEIxoZywm3CEcAbum37COyKRyCCaEB3hvkwkZhAXEFcTtxL3EzuIvcTHxGESiaRBsiC5kSJILFIeqZi0hbSXdIJ0hdRP+kCWJ+uSbcn+5CQy'@;
put 'n1xILifvIR8nXyE/I4/IKckZybnIRchx5ObLrZXbJdcmd1muX26EokwxobhRYigZlGWUCkoT5QzlHuWNvLy8vryz/DR5nvxS+Qr5A/Ln5R/Kf6SqUM2pPtQZVBF1DbWO2kG9TX1Do9GMaZ60JFoebQ2tgXaK9oD2QYGuYKUQpMBRWKJQpdCscEXhpaKcopGil+IsxQLFcsVDipcVB5XklIyVfJRY'@;
put 'SouVqpSOKt1UGlamK9soRyhnK69W3qN8Qfm5CknFWMVPhaNSpLJT5ZTKYzpGN6D70Nn05fRd9DP0flWiqolqkGqGaqnqPtVu1SE1FbUpanFq89Sq1I6p9TEwhjEjiJHFWMs4yLjB+DRBe4LXBO6EVROaJlyZ8F59orqnOle9RH2/+nX1TxpMDT+NTI31Gi0a9zVxTXPNaZpzNWs0z2gOTlSd6DqR'@;
put 'PbFk4sGJd7RQLXOtKK0FWju1urSGtXW0A7RztLdon9Ie1GHoeOpk6GzUOa4zoEvXddfl6W7UPaH7B1ON6cXMYlYwTzOH9LT0AvVEejv0uvVG9E30Y/UL9ffr3zegGDgZpBpsNOg0GDLUNQwzXGjYaHjHSM7IySjdaLPROaP3xibG8cYrjFuMn5uomwSZFJg0mtwzpZl6mOaa1ppeMyOaOZllmm01'@;
put '6zFHze3N082rzC9boBYOFjyLrRa9kwiTnCfxJ9VOumlJtfSyzLdstHxoxbAKtSq0arF6OdlwctLk9ZPPTf5qbW+dZb3L+q6Nik2wTaFNm81rW3Nbtm2V7TU7mp2/3RK7VrtXUyymcKfUTLllT7cPs19h32n/xcHRQeDQ5DDgaOiY7FjteNNJ1SnSabXTeWeCs7fzEud2548uDi55Lgdd/nK1dM10'@;
put '3eP6fKrJVO7UXVMfu+m7sdx2uPW5M92T3be793noebA8aj0eeRp4cjx3ez7zMvPK8Nrr9dLb2lvgfcT7vY+LzyKfDl/MN8C3xLfbT8Uv1q/S74G/vn+af6P/UIB9wIKAjkBCYEjg+sCbQdpB7KCGoKFgx+BFwadDqCHRIZUhj0LNQwWhbWFoWHDYhrB74Ubh/PCWCBARFLEh4n6kSWRu5G/TiNMi'@;
put 'p1VNexplE7Uw6lw0PXp29J7odzHeMWtj7saaxopiO+MU42bENcS9j/eNL4vvS5icsCjhUqJmIi+xNYmUFJe0O2l4ut/0TdP7Z9jPKJ5xY6bJzHkzL8zSnJU169hsxdms2YeSCcnxyXuSP7MiWLWs4ZSglOqUIbYPezP7BceTs5EzwHXjlnGfpbqllqU+T3NL25A2kO6RXp4+yPPhVfJeZQRmbMt4'@;
put 'nxmRWZc5mhWftT+bnJ2cfZSvws/kn56jM2fenN4ci5zinL5cl9xNuUOCEMFuISKcKWzNU4XXnC6Rqegn0cN89/yq/A9z4+Yemqc8jz+va775/FXznxX4F/yyAF/AXtC5UG/hsoUPF3kt2rEYWZyyuHOJwZKiJf1LA5bWL6Msy1z2e6F1YVnh2+Xxy9uKtIuWFj3+KeCnxmKFYkHxzRWuK7atxFfy'@;
put 'Vnavslu1ZdXXEk7JxVLr0vLSz6vZqy/+bPNzxc+ja1LXdK91WFuzjriOv+7Geo/19WXKZQVljzeEbWjeyNxYsvHtptmbLpRPKd+2mbJZtLmvIrSidYvhlnVbPlemV16v8q7aX61Vvar6/VbO1is1njVN27S3lW77tJ23/daOgB3Ntca15TuJO/N3Pt0Vt+vcL06/NOzW3F26+0sdv66vPqr+dINj'@;
put 'Q8MerT1rG9FGUePA3hl7e/b57mttsmzasZ+xv/QAOCA68Mevyb/eOBhysPOQ06Gmw0aHq4/Qj5Q0I83zm4da0lv6WhNbe48GH+1sc2078pvVb3Xteu1Vx9SOrT1OOV50fPREwYnhjpyOwZNpJx93zu68eyrh1LXT0053nwk5c/6s/9lT57zOnTjvdr79gsuFoxedLrZccrjU3GXfdeR3+9+PdDt0'@;
put 'N192vNza49zT1ju19/gVjysnr/pePXst6Nql6+HXe2/E3rh1c8bNvlucW89vZ91+dSf/zsjdpfcI90ruK90vf6D1oPYfZv/Y3+fQd+yh78OuR9GP7j5mP37xRPjkc3/RU9rT8me6zxqe2z5vH/Af6Plj+h/9L3JejAwW/6n8Z/VL05eH//L8q2soYaj/leDV6OvVbzTe1L2d8rZzOHL4wbvsdyPv'@;
put 'Sz5ofKj/6PTx3Kf4T89G5n4mfa74Yval7WvI13uj2aOjOSwBS3IVwGBDU1MBeF0HAC0R3h16AKAoSN9eEkGk70UJAv8JS99nEnEAoM4TgNilAITCO0oNbEYQU2EvvnrHeALUzm68yUSYamcrjUWFLxjCh9HRN9oAkNoA+CIYHR3ZOjr6ZRckexuAjlzpm08sRHi/324mRt2XRobAD/JPCotuA2JA'@;
put 'n4YAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAGdaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA1LjQuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8y'@;
put 'Mi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2NDwvZXhpZjpQaXhlbFhEaW1lbnNp'@;
put 'b24+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42MzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KSHKtHgAAABxpRE9UAAAAAgAAAAAAAAE9AAAAKAAAAT0AAAE9AACKlRxL/UIAAEAASURB'@;
put 'VHgB7L0HgNxmeqb5FVChIzuRTTZzzlESRUVSFCUqzIwmjyZnx71zWO96b89h7b31ede+27O9DjOe8eSo0USlURxpGESKYhBzzqFJdrNzqADg3g/FoppUk6zuQlWjUC+kZmXgx/OjUC++GFq25v2OcCEBEiABEiABEiABEiABjwiEKDA9IsnVkAAJkAAJkAAJkAAJuAQoMHkgkAAJkAAJkAAJkAAJ'@;
put 'eEqAAtNTnFwZCZAACZAACZAACZAABSaPARIgARIgARIgARIgAU8JUGB6ipMrIwESIAESIAESIAESoMDkMUACJEACJEACJEACJOApAQpMT3FyZSRAAiRAAiRAAiRAAhSYPAZIgARIgARIgARIgAQ8JUCB6SlOrowESIAESIAESIAESIACk8cACZAACZAACZAACZCApwQoMD3FyZWRAAmQAAmQAAmQ'@;
put 'AAlQYPIYIAESIAESIAESIAES8JQABaanOLkyEiABEiABEiABEiABCkweAyRAAiRAAiRAAiRAAp4SoMD0FCdXRgIkQAIkQAIkQAIkQIHJY4AESIAESIAESIAESMBTAhSYnuLkykiABEiABEiABEiABCgweQyQAAmQAAmQAAmQAAl4SoAC01OcXBkJkAAJkAAJkAAJkAAFJo8BEiABEiABEiABEiAB'@;
put 'TwlQYHqKkysjARIgARIgARIgARKgwOQxQAIkQAIkQAIkQAIk4CkBCkxPcXJlJEACJEACJEACJEACFJg8BkiABAJBwHEcMc2QmGFbwtGQhCM27ockEnMkHBOJRHGL52OVtlRW2VJW5UhZpT7W53G/PCTRCkdC+O+GC162EiL9vY4k4yGJ9+OvRx+HpKcTt90hSeA5Ky6SSuI+3qvvTyUMsZL4DJ6z'@;
put 'UrqFm2znhoPgiyRAAiTgbwIUmP6eH46OBEgAOiwCsRgpE4mVO64grKjCfQjDimo8rtDnRaJ4LVrmuILSjAhEo4hpiBhh/BkG/iDp8E9IHLHtNFbbdtw70KaiAhUvZbdgTFgdVog7+r/7l34yvQUR27Lxh1tszMF2kokQBCfEJv5SEKb9EKAJiNI4/vp7DOntdiBUcb/r8nN9+j5DUimIXt0AFxIg'@;
put 'ARIoIgIUmEU0WRwqCQSVQCjkSLlaFGFBrKh1ZFSDI1U16fsV+jwEZQRWyDCskZGwIWYEMi6juSAKIeH0H1ckqk7URUXdFb145U76tYL9e3mMeuPeNdJPGHqL/43LAlXHo0N0LAeC0oYYtcVSyyj+etU62mVId4dIT7uBPzwHS2lPZ0iSeN1x0uvUdXAhARIgAb8QoMD0y0xwHCQQeAJqXRRYHW2p'@;
put 'qheprrelpt6RStxW1YorLqNwU0diEJBwdeuiVkUHwtG1NEIwXjY8ptVYUHmltSesrek7KkYzQlRFqA2LZjKekr5uQ/p6HAhPU7pbRbouhaSzNS1A1U2fhBv+pu7+oDLkfpEACYw4AQrMEZ8CDoAEgkfAhFtahaRaIkc12lI7xpHqBkuqa+DOhkUyVhZ24yPThkeISFju1PLoCsmRsjYWyzRcNlhe'@;
put 'EZ5m2hKq2Ky4Lf39DuJARbph6Wxvgei8gFv86WMVpY59eQXFsr8cJwmQQFESoMAsymnjoEnAHwTUwhhBvGNlLayREJH14yAqxzpSOxqJNDVIoIFFUt3Zqh4zlkiKyDzOnWpHuN3VABxCgpMbD4r7qbiFWE+Izg5HOi4Y0nbelLaLAvEJiydc7bZF0ZnHWeGqSaAkCVBgluS0c6dJYHgEDI2VRGJN'@;
put 'TaMjDeNtaWiCoMT9asRLRitMJNVArMAsqRZJ5LjAJElz5PBIe/wpFZwqPDE/IVg89b4FV3tfry29bQ7EpiGtZwy51GxAgGrSEWM7PZ4Bro4ESo4ABWbJTTl3mASyJ2AY6tqGmISQHD0RgnICXN6Imyyv1jJABvQjxCSECvQkxWT2WP3zTgjO8GXRqZbPVMKCGx1WTrjW284ZcvEUROc5uNcvocQS'@;
put 'Xev+mTeOhASKgAAFZhFMEodIAoUiYJrpDO6GCbY0TlFBaSMZR7O7w9AfaTe3pdnZapmkcbJQ01K47ailE4LTtXSmIxtgzbSksw1CExbOC8dD0noWVk4kFdmWW6ipcGPjlkiABIqKAAVmUU0XB0sC3hIIwUJZhfjJMRMdaZzqyGgIylGjYaGshB/VdXUjfk/FJF3d3oIvprUNtHIiL70PgrPrkrgu'@;
put '9fPHDWk5bbgC1EHNTy4kQAIkkCFAgZkhwVsSKAkC6cLkGj85biqslPirHWMj49uE5QqSEiIhpVXIr9QDKgko3MmhEMBxEtaC9e41iNbptKTjvMgFuNObj4Wk5YyJgvHIVqeFeyhU+V4SCBwBCszATSl3iASuJqBWyuo6WCinODJ+puXGUlbVaXccLVmD0jZaIogWyquh8VH2BNTCibR1vUDRxCHN'@;
put 'VG89G5LmI6ach0u9HQlEzFLPHiffSQJBIUCBGZSZ5H6QwAACZlhLBjkybrolTbNsqUctysoaFKeE21sLdWscJWMoBwDjXW8IZGI4VXAiaSgO6+YlZKU3Q2g2HzZh3Uz3aUekpzfb41pIgAR8S4AC07dTw4GRwNAIRNFGsX6CJRNm2tI0A7UoUT6orNx0M73VskQr5dB48t0eEBhg3Uyh/WUnug2p'@;
put 'G/2Mis0T6l6H0GSrSw9AcxUk4D8CFJj+mxOOiASyIqBFzmNlIg0oHzRxliXjYamsGYNWi1HUMITrW3ta00qZFUq+qRAEoCU1O91AAXgLsb49bbacg8g8cwCudIhOt8sQxWYhZoLbIIGCEKDALAhmboQEvCNgRhwZo5bKOY4rLGsaL4tKTdDR6uZMrvAONteUNwIG3OgmxKbmlHWh2PuF4yKnDkJs'@;
put 'InaztwebpdjMG3uumAQKQYACsxCUuQ0SyJGAgfqUdYipnDQbwnK2dtBBi8YyJOlQVOZIlh/3A4EQxKYmCmlocNclWDaPGXJ6ryHnjpuS6NMRMmbTD/PEMZDAUAhQYA6FFt9LAgUkoIXNq2odCEpLpsyH1XKSjXaMSNWl+7uAs8BNFZpAxrJpIcRDOwqdOWjIyX3oKoRC71aCQrPQ88HtkcBwCVBg'@;
put 'DpccP0cCeSDgxlWWizRNs2TyAhtlhWypqjHh9XYQUwnzDssJ5YE6V+lLAtCSrtiEZTMZt6UFpY9O7Ydlc78p7RCejkWx6ct546BI4DIBCkweCiTgAwLqAteC51MX2jJhnpYVciQcNhBTCWnpNvr2wSA5BBIYKQLQkvp9EPzf3+Wg7JHI8V2mnD1sSH+vCk2KzZGaGm6XBK5HgALzemT4PAnkmYBa'@;
put 'K8sqHNSpdGTGopQ0ThOpqEIcGuIqLSbr5Jk+V1+sBNxe6UgO0koJHS0O3OchObHHlEvokW7Rqlms08pxB5AABWYAJ5W75G8C2lmnZowjUxdZMnW+JbVjUboF5VtYq9Lf88bR+Y+Aljwy4UKP99pyHiWPju40ELMZln7NQqdV038TxhGVFAEKzJKabu7sSBIIwQ3eiESdOStSMnEmrJfV6SxwWitH'@;
put 'cla47UAQ0ILul62a7RccOYEMdHWht51nT/RAzC93oigJUGAW5bRx0MVCwE3agRt84hxbZt1iSeNkR6IxxlYWy/xxnMVHIGPV7O9x5PiekBzZhtqap/RijnGaxTebHHExE6DALObZ49j9S0BLDNU4Mg1u8BnLbNSwRH5CyJBkEgGWLITu33njyAJDQGM1IxFD4nFLLsB9fnir6RZyj/fCeR6i2AzM'@;
put 'RHNHfEuAAtO3U8OBFSMBrV1ZN9aWGbfYMm2hJdUNJmIrbbG1xBAXEiCBwhOAlowgA11LfV06J3L4LVOOvRWSng6kpDNOs/DzwS2WDAEKzJKZau5oPglo4s6YyYivvM2SSXNtZIObkoSwZImhfFLnuklgaARc9znEZmeL5cZoHt5uSPsFjdOkRXNoJPluErg5AQrMmzPiO0jgugS0fuW4GZbMXY4W'@;
put 'jkjciZWjtV0S9VNYEP26zPgCCYw0AW1NqVbNnk5LTqJT0MHNprSgU5BjU2iO9Nxw+8EhQIEZnLnknhSQgAlhOXGOJXPusKVpqiXhSJjxlQXkz02RgCcEEKcZRZxmX68lZw+FZP8bYTl/3EAtWgpNT/hyJSVNgAKzpKefOz9UAmbYlsnoCz5vhSVjpkBYmhSWQ2XI95OA7whonGYUYS1ICDp7JCQH'@;
put 'NoflDLoEUWj6bqY4oCIiQIFZRJPFoY4cgbSwtGXuClvGTnXcLFRN3mFG+MjNCbdMAp4TUKEZMSWVTKEdZVj2bwrJ6QNI1KNF03PUXGHwCVBgBn+OuYc5EDBNWyaiN/j8OwcIS42x5EICJBBcApeFpjZBaD4Wkn2vG3IKQpMWzeBOOffMewIUmN4z5RoDQECTdybOtGT+PbaMmwaLpbZypLAMwMxy'@;
put 'F0hgCAQgNMOwaFpWSs4dMmXvJkPOHqbQHAJBvrWECVBglvDkc9ffSUDbOTZNsWXePSlkhdtu8k6KxdHfCYrPkEApEbgsNNV1fvqQIfs3huUckoHYHaiUDgLu61AJUGAOlRjfH0gCBupY1jfZsuDelEyeq+0cEfBPYRnIueZOkcCwCVx2nSeQDHTqQEj2rtfyRrBosrzRsJHyg8ElQIEZ3LnlnmVB'@;
put 'QDvGVY+GsLwrJdOWoEB6BepYJtjOMQt0fAsJlC4BnDeiyDrv67FRsF1kz+th6WDB9tI9HrjngxKgwBwUC58MPgFHyqscmYNyQ3NQJL26lgXSgz/n3EMS8JjA5Tqa3SjYfuhNuM5RR7OnHeqTLSg9Bs3VFSMBCsxinDWOOScCkYgjU5elZCEywxuaDLZ0zIkmP0wCJJDpDNR20ZZ9KG10ZFtY+ntD'@;
put 'bjkz0iGBUiVAgVmqM1+C+62Z4ePR1nHRKiTyTLPdbo52yilBEtxlEiCBfBAw0ILSRAvKCydt2bXOlFP7kIGeUosmFxIoPQIUmKU35yW3x6GQIzWNtixamZRpC1F2BLFTKY2z5EICJEACeSBgov2kbdtyen9Idr8Wlovoc85EoDyA5ip9TYAC09fTw8HlQsBxHKmoEpm9IiXz7rCkahQTeHLhyc+S'@;
put 'AAkMgQAMl9oVqK/PkiNbDdm70ZSuNgMroEVzCBT51iImQIFZxJPHoV+fgBl2ZPI8SxbfZ8no8Yak0JHDsegOvz4xvkICJJAXApcTgdouWrJnvSFHtkckmaDIzAtrrtRXBCgwfTUdHEyuBNQdXj/OlsWrbZk83xIjZCAGiq0dc+XKz5MACeRGQOMz9e/sEZGdvzJZqD03nPx0ERCgwCyCSeIQb05A'@;
put '3eFllSJz1R1+J93hNyfGd5AACYwEAY0B10Lth+E2370+LN1tas2kRXMk5oLbzC8BCsz88uXaC0DAzQ5HW8clq1Mybgrd4QVAzk2QAAnkQgChmFHEZ7Zd0GxzuM13hMVKUmTmgpSf9R8BCkz/zQlHlDUBR6rqHJQdSsmspbaYUbjDk3SHZ42PbyQBEhhRAuoy125iJw/Abf5KBG0nQ+I4FJojOinc'@;
put 'uGcEKDA9Q8kVFZKAGbZl6mJYLZHEUz/WcF1OwhyeQk4Bt0UCJOARgXAM2eZdlux93ZR9aDuZ6KPI9AgtVzOCBCgwRxA+Nz10Anq1XzPGkqX3Q2AugrUSotJmdvjQQfITJEACviKg3YDCpoHkH1t2vBRmEpCvZoeDGQ4BCszhUONnRoSAiRaPs27RTjwpqalnTcsRmQRulARIIK8EwijSHo/bcvAN'@;
put 'Q/agG1BPl8GWk3klzpXniwAFZr7Icr2eEXBLD421ZemDFmpbwmhpO7RaekaXKyIBEvAdgcu1M5vRcnL7iyhpdNTEOY9uc9/NEwd0QwIUmDfEwxe9IKACMYzC52ZYxIg6KMiRPlGqUEyhT6+N7Ekrpd7ud55ATbx/1rIUYi1TSOgJSxLlPbiQAAmQQCkQ0JaTyYQjBzZnrJmaFPTO82QpsOA+Fh8B'@;
put 'CszimzMfj9iRylr0/R5tS22j9v9Glne1LVG0aywrg7iEiztk4A/Fz1VLhhBCaaHDTjIBl1CfSH9XSLo6DOlqEem4COGJ1xfcjVjL+bBYYq/ZicfHU8+hkQAJ5IfAZWvmeVgzt72I2Myj6GtOa2Z+WHOtnhKgwPQUZ+mtLFpmy+iJtjTNsGTsFJFRDSh4XoVg9bD23H3bne0meOMf93YAJvdaXPUm'@;
put '7hiGxhrph0SSKQslh9DLN3a5E8+1HxywDt4lgaESuMoIdPmBeyzqiq7cuclaBx7PKPR/ZRn4/JUneYcEciOg1sxEwpYDGw3ZtT4i8d5sD9TctstPk8BwCVBgDpdcCX/OMEUap6RkynxbJs52pLpeRAPTNZs7pRndcH3nurg60/0n1zXx80En4P7MwsqjC65R8A9a8qlKTBvK3edV/zn6HyIsbJjG'@;
put 'bbQPtS0cs3jBsWEtx3Fr41at5LbWIbzJIaxGeC3w795ie2qZN3S7JuqxYhAGLrBC+J5oOEh6fFilrlPH4W7THVD6q6KPb7I9dyf4DwngGIvgXHv2iCNbnzel5TSOYRy3XEjAjwQoMP04Kz4dU7TclikLLZl9K6yW421YFxETicLmdF37dMICMqy0QIN4U8GoVu6McIQosyAWk8i41RjeOGoHpuIh'@;
put '3DrS3yuoJYjQix48j+cSsPYk+/FcHJ9BSEYqhYuhBGJ/ITjVUu4gBsO9LsI67SzCfF2LOwSkKkYznB6bhoBEEGdsRnDBFcNfFBb4Mlj08RetwB/CRGIVCBep1Pvpx5EY4pNjKhqwDl0PVuxqTR2PCmGNDdGteHDRll4T/w0CAW032d9tyVu/NhGfaeJYxpeCCwn4jAAFps8mxI/DiZZZKA9ky5wV'@;
put 'ttShqLmNHzsLFqCbWXn8uC8ck38JuJ5qWGhMtQhqhxNXQDoQhRCREId9PRCOiNPt6dA/Q3o7Q9Lbhdjd7hAEZVpAppAwZkNspmMt/Luvhlo8kfgWU6FZrqJTpHwUYpjxV1GTvtX7KkzLIEo1VCQMAeooJFcEqwUWd9L/+3dHObK8EdDviH5XTuwTWDPD0n4RIhPHAxcS8AsBCky/zIQPx6Fuv2mL'@;
put 'LVm80paG8WrtUdciz2A+nKqiGlLGZayu5BBEU0ZIxvtTEodY7IFw7LhgSMclke4WU7rbVVymrZBqqfS7ePRqMtRiG47ZUo4kuSokz2kC3Sgk0FXX6WMbVRVgES2DyID1U5lk3P9q7aTL3atZ8P96IugC1H7Rkm0vmHJyH3qaozIHFxLwAwEKTD/Mgu/G4Ej9OFtueTAlk7TuJMZnJyksfTdNRTCg'@;
put 'a8WkKp8UEhXUha2WyI6WkLRdCEknqgZ0tqhVEglecYMC6SZzayL+s0ItnhCdtWNQsWEc/hosiE9YPKu1aoOJUAKITjgaUrgwFFg7+Q2+CdQiflljfh3EU+zdZMquX6HtJC7IWM6oiCc0IEOnwAzIRHq1GyHDlnl32LL4viR+wMKIacsiIM2rjXM9RU/AFZSXW95p/VONdezvtaX7kiFtEJGtZwxp'@;
put 'P49yVK1wa+NH0GK5FQ/nPO1uV+tmLRoT1EN06m3NaJEKiM4o3OyaAOVgTjR2VWt/UXR6iH+kV4UvXxSxmWeQAPTmLw0kAJm4UKM1c6SnpZS3T4FZyrM/YN/VvlGF2K/lj6ZkxmK1euAZjfHiQgI3IKA/X24smFuWynETbrphheyAiGyBmLx0FsKyGS7ubtNNqLnBqvhSPgjAYhxDfGdVHcJcmhxp'@;
put 'QEmxBngnqhs07lNj+C7HVKuVk4IzHzNQ8HVqAlBvpy1bXzLk2A4YCRCXzIUERoIABeZIUPfbNmFpapxky13vs6RhgiZL0Grptynyy3jcn6rLFkoNntQMbo2RbD0bkgsnDdwidhLxk5rRzcWfBExkv1fUWq6Fc8zkdEUIbYxQVmWIaaqrFRZOCk5/Tl6WozLwHdXv5wG4zHfAZd6L5Di6zLOEx7d5'@;
put 'RoAC0zOUxbkidWNORj3LOx9LIYsVLkvEx3EhgYEEtCyQCg+9TSEWt6fTkfZzITl33ICoRBzlRRMlgSgoBzIrpvuamF4Jt7paOMdMsWTMZEfqxtjIXtc5h4XTrRnKGM5imlN3rJjXjMt8y7Ome/FHl3nRzWJRD5gCs6inL7fBa5b4zFtTcsejlphRLe9Cl3huRIPxaVcqagZzGDFc+K+/N+VaJZsh'@;
put 'KM8fxw/VGS0PRItIMGb7nXuhFk51qY+BV6NpOiycuK2qD0GspJOG1LqpyUNcioOAusy72y2UMorI8d3aGY0Xg8Uxc8U/SgrM4p/DYe2BistZt1ly57tR90UD/xlvOSyOQfmQ/uRkYiltCAi1UraeCsmZo6Y0Hwu55YLQvZNLCRKIlaeThZpm2DJuakrqmxC/WYEsdZg+U3pQMHbT90eFusy1g9Tu'@;
put '9cgyfzWM2rIUmb6ftAAMkAIzAJM41F3IWC7veg9+HLR+HmKuuJQegbSoRNwdalFqUldXqy0X4fI+fcB04ym722mlLL2j4sZ7rO0xR9U7Mg6WzfGzYN2cYKM4PDoQIYQilaTYvDG9EX4VhoQIkvGO77Vly7Nh6URlB1TuH+FBcfNBJkCBGeTZHWTfNOZyygJb7v1gUgwUaKblchBIAX7KFZUaUwn3'@;
put 't4rKbojKc8cMOX3QkIsn0vXzArz73DVPCaTrcI6basnEOY6MRfxmZQ36sFNsekrZ65VpYfbWs7Zsetp0Q14c9jL3GjHXd5kABWYpHQoQl2MnOXL/J+MoXaLB+7RclsL0uzaKyzGV6v7uaHPkAuIpT+6FqDxJUVkKx0Ah9rGyxpax0yyZNEBsapKQRTd6IfAPaRtmxEAdWlveRPefI1vDaP9LS+aQ'@;
put 'APLNWRGgwMwKU/G/SZM1RiFTdM2nU1LXxGzx4p/Rm++BZgebl+tTakzlRZQROr43JM2Iq+zthOLkQgJ5IqDF3sfPdCA2kzJ6CiydVZowph3BkCCUp21ytUMjoDHX2jJr16uGvPVahMk/Q8PHd2dBgAIzC0hBeEsk4sg9H0rI9KUG61wGYUKvsw9qhwjBRWmERRL9trSeFjm535BT6FHc2UpReR1s'@;
put 'fDpPBDQkR/unT5pny+R5joxusiVcpt4TaBvNRs/TdrnaLAnghBFBlvnhbSJvPIMLz27GXWdJjm/LggAFZhaQiv0tIdOWBXdZcvu7UMeQrR+LfToHHX/GWmkjYauzzZYz+005tgexVqdZlmRQYHyy4ARMXOSOmaB1d5Myaa4j1Sh9pNnNllo1qTQLPh8DNxhB7/rmo7Zs+ElE2tHSFZepA1/mfRIY'@;
put 'FgEKzGFhK6IPwYIwZoIlD34uhStVZowX0czddKjuzwAyQzVZK9HjyPlTgjp3ppsF3oc6lVxIwK8EyqscmTgrJVMWatwm2lmWw6qJJHRaNUduxsJI/ulssWT9T8Ny/miYon/kpiIwW6bADMxUDr4jkZgtqz+eRJYnyojQejk4pCJ7VqWjgSB9/QXoanfkNKyVR3cY0oI2jbZFYVlk01nSwzVwAVyH'@;
put 'UkfTITQnzUvJqAaEd+CiyUL3IFo1C39o6MVqsldkMzr/HN1hMvmn8FMQqC1SYAZqOq/eGa13Oef2FHqMj6xr3LW0wRWmrQa1OPOVnrj4BdGOIDZu1bXLgKyr5+/aR2k3eLq8UOsZR47tNOUEMsF72hlbeS0rPi4+AuXVSAqabcm0pZY0TtbYwLTQZCH3ws6lm/yD8/FbSP7ZieQfXrQWln+QtkaB'@;
put 'GaTZHLAvmjVejbIhj/xGQirqDHEKXJJIxZDGV2kP6wQsp71d6GHdJRLvgTu3HyIT/0XLbYlWog9ytYi6zGJlKJeB2owpWC8oNtOT6Ypz6EcD2eCJXlvOomblkW2mnD0CS0OcwnLAIc+7ASGgsZpjJ1syY5lmoltSUYMMdD0lqFUzIPvo+93AiScCL8nezSJvPhfmucb3E+bPAVJg+nNech6Vdty4'@;
put 'ZU1SlqyBEOlHcFOBFrVShiEq4wjcbzkpcuYQivmi1WBHiymJPtWNKpkGLhCWldodxIbVAnFZs21pQK3OCrSiS+oPCgRnKS5pYQkZDpHe22nLqQMhOYx6dRdP4ce2NJGU4mFQ0vusrQ3rxzkybbElUxdaUtOAbwXc5yx1VKDDQkUm4jKP77Ll9V9EpKdjgPepQEPgZoqbAAVmcc/fdUbvSM0YRx7+'@;
put 'Yhw9g2G9VPdznhcVRG7xXojZ0/sMObAFYghFvG1YHoayqFu/fpwtM5ba+FFBTFY9+uZCrMKPPpTVFO17XWEJayXSsdDKzcHJPR0L1XaB1sqinVQOPGcClTXIPl+QkpmwajaMS3tH3OzznNfMFdyMgJthfsyWdU9GkATknqFu9hG+TgIuAQrMAB4Iar1ctiYlS9dI3q2XerpRo6QmnTQfdWT7S2Fp'@;
put 'PmbmThXB/zWwas5HeaXpt8KVHkW5HRWaAV2Uo7rBVUZ3XLDlyM6wHNsRkq42D1gGlBl3q/QIxMrh5UAy0Jxb0Ad9CrwlmhCk9TRL4/pzxCZcM8zbmm1Z/yQMB2dwscse5iM2F8W0YQrMYpqtLMaqbqVR9Y489IW4VNZCsOTRxeyKS7hwraQjezaasvs1uLUT3lraQtBX49F+btnaFOKyUCQ+obVM'@;
put 'sgBRJG95W1g6cqlZ5Og2Q44ieae3y1uORYKDwySBrAhEoojPnO3I7FuTMm6agXhBB0ITkecBOjdkBaKAbzJxkd+DGrsbfhqRs4fx20KRWUD6xbkpCszinLfrjjoE6+U8ZI7ficzxfMZeqjBy4wO7bdn8VERO7EHrmDwtmrBUhQxTFZmzb0FGvPrdi9yY6fKDxVLFcutZWw4hcefErrD0IQmKCwmQ'@;
put 'QHYEwrgAHTsrKfOWO9I0UxNThCWOskM3rHe5ZYz6HNn48wjCdygyhwWxhD5EgRmwydYr+wc/l5CxU/LnUk6LS0O6ECO4Di6TC4i1LMQSiTmy8J6ULL7Pgi7DKIowLvOKsASwtnMQltvVFW5SWBbiAOI2AkvAxClonCs0YdmcEZKwCk26zvMy36EwEq0SjmxGdvmhNzXDnxfFeQEdgJVSYAZgEq/s'@;
put 'Ar7nTXAnP/iZZLrTVx7cRa5Aglu865LIaz8KSwuymgu5hCO2zLvDklvWQmSqi6ZIfGLuKRgGyzCslpfOQ1hu1eSdMFzh7iuFRMhtkUBgCajQbJqZkrk4RzRNh9AMo8YuXeeez7dbKxO/L9teNGT3BnT9YYMHzxkHYYUUmEGYxcv7oMk9t61NyKL7EKuYh9JEaZEUkjg6Pbz6A4+SeYbBXy2Zi1al'@;
put 'ZMkqxF1pzUyfL1q6yYSw7O2y5ehbpuxFvGp3G2MsfT5tHF4REzAhLLXkmZ4nxkxCTQZciGot4DxccxcxpRyHjgQrFfQ7Xg7JW1qQPcWL5RyJBu7jFJgBmtJYmSUPfTEp9eO1Vpz3p1I9fdhwTb/+c1MOb8tfzGU2UxKrsGXFuyyZdStiTX3aAjPdeQc1QeO2nNwVkj2vh+XSucJafLNhyfeQQFAJ'@;
put 'RMscmb4UFs3bbZQ/Q0KihtWoRTOoO1zo/cKPQhgVRHb9GtbMFyIIS6DILPQU+Hl7FJh+np2hjA1lfRon2bIW8ZfaQcfrM6ieNkKwwh14QwUmApxGfEG2fIMjqz8BQT32cku5ER9TegCZLkY2Et5PHxbZs27krL0+QcJhkMCIEiivsmX2cr0gtd2C7W63MDg/KDQ9mBb8OLhdf14X2fJcRFJJikwP'@;
put 'qAZiFRSYgZhGzei2ZeGdltz+Hu+zx93TBdwhbRcceenrUent9od7V0MCJs+zZeWH8xdzOpTDw+UEcW+A1cWTtuzeGJaTu7XYPE+4Q+HI95JAvgiMakAMN86TM2DVjKFbmK3dwqgyc8eNU5x2/dm/yZE3nmVrydyBBmMNFJjBmEe4KRy590MJmbbEkJTHLmOVR45hyIYfm3IEGc9+WlxX+buTMusW'@;
put 'xJ16vN9D2U+NszTQIrPrki374Qo/iHqWiT5/CPGh7AffSwKlQGDMJEsWrrRkEmppmoj2YSKQN7OuXX8ObxWUMUJN5DjPf95QLd61UGAW79xdNfIyxCQ+8hsJGdWIgHYEs3u1uLY3WOTOHxd58ZuIsUn566QRQmjA2Cm23A9XebgMoy1w6SI3zhLCsr/fkWNvhWT3+jBEpr8YeXUscD0kECQCBs4d'@;
put 'k+dbsuDelDSiiYPN+ExPptcVmdsui8x+ngs9gVqkK6HALNKJu3rY6N893pFH0XvcQI0yLwOLXIEJAfX6Tw05uHVkE3uu3ue3H8XKbbnjMe1THCqYFVO5uKU6oDDPHbaRRRlFq0yeTN+eFd4jgeIgEMX5Y/ZtllvaaFQd6gfTbZ7zxKnIPLLNkQ0/o7s8Z5hFvAIKzCKevMzQ1Yo3ZYElqz9uuW0b'@;
put 'M8/neqsiyoGA0oLqv/xKFMXA/SmgDJQkmTTHklWPIxazAO3LXHc4Ep60Z7iWHDoM4Z1iiY5cDzd+ngRGlEDNGJQ1WpmSqQttiURRiYP1M3OaD4rMnPAF4sMUmAGYRk12WXhPUpY/Cgueh/Uv01Y6Qw7vcGT9kzHfktIad1V1jqz9VEJqkFGuPwz5WDLZ4cm4yBG4wzU7vJPu8Hyg5jpJYMQITJqL'@;
put 'bmGrbGmcorGZ6ba0+TmjjNguFmzDaXe5g8ojYUnQXV4w7n7ZEAWmX2Yih3FoUeHbH0nK/Hu8F5haSXfTz0NyYIs/3eMZbNFyR5aDwdzbvXeTu2ECMN5qEs/FkyHZ/kpIzhz0N48MF96SAAkMnYC6zefekZL5K2wpH4WLVi3STpU5dJD4BEXmsLAF4kMUmAGYxnxlkKuwSsL1++I3TLl4yt+CykQW'@;
put '/exbLcRi2ggT8K67jxsmgKDWODLCD2wOyT5kiMd5JR6Abw13gQRuTqBhvCVL70vJxHmGhEIoacQi7TeHNsg7IuUmzp+2bPqF1sn0Z6jVIMPmUzkSoMDMEaAfPq7i6sFPJ9CDFwXHE96IK1dY4Z+eDkH8ZUx6OvUZ/y4hw5GmGYhD/VjKLTviVaKTusW15/mR7SjT9DM/FJj37xxwZCQQRAImQpBm'@;
put 'LLPQgjclo+qRbc4koGFNcxiJP26dzKcgMhmzPiyGxfYhCsxim7FBxhuOWvIIWkQ2TEif/AZ5y5CfcuWkFldvRoLPV6OS8HtNMyQ61Y+F0P5sQmKVGL1H5YpcgYn2mEd3hGT9T6JD5sgPkAAJBINAzWhLFt+fkukLQ6ggwd7mQ55VnJbDUVP2rNeOPyhyb9GSOWSGRfYBCswim7DBhhstt+ThL6Bl'@;
put 'YlM6Vmiw9wz1ubTAFGk5HYLA1B6zfj8ZaOtIS9Z+JiWV9agF6lGiT8aCeQy9xNc9SYE51OOI7yeBIBHAmUVm3AKhiSLtNag5TGvmEGf3ssjc+Qp6l78chsh0f2mGuBK+vVgIUGAWy0zdYJz5FJitZ0Py3Ff8V2D9nTjSAvOhz6akoo4C8518+AwJkIBXBKrrbVn6QDJtzUR4DmMzh0BWRWbEkG0v'@;
put 'iux8LUKROQR0xfZWCsxim7FBxps/gRmSjouOPPuvcJH7PrGFFsxBDg0+RQIkkCcCV6yZqzU2M31Ry0zzLGFDZJpmCH3LDdm7KQyBTktmluSK6m0UmEU1XYMPNl8CU6ty9HVrDGZMutp87iJHDGbDOEce+EweYjA1yectkQ0/8W8t0MGPDD5LAiSQbwJaoP2WB5MyZb6BhECtmwmLZr43GoT1I8Zf'@;
put 'az9pjcwj2xGTaVNkBmFaB+4DBeZAGkV6Pxyx5aEvJNx+ul6X6LFwZfnSt01pPubvMkVXssg/jixyExPp0Rk+HYOJ7MctjrzxNGMwi/QrwmGTQF4JaC3iObdrbGZKyqohNFGgndbMmyPXdrsWGrCt+7EpJ/eYbsWOm3+K7ygWAhSYxTJTNxinlim6/xMJmTjHuzJFujm9ngxBrb3xnCN7N/hbXLl1'@;
put 'MG9LyZ2PiaQS1g1oDe2ltMA0ZNevUWD9ZZYpGho9vpsESotA42RLbllrSdN0GDJZziiryTfCaI7R68jL3w/LeRgyKMyzwlYUb6LALIppuvEgzbAtd70/JbNvy0MnH/TcPrHbkVe/72/3sHbeWPHuJIqtG5KMeyswbduQN5833CLrN54JvkoCJFDqBMoqHFl8XxIWTUdMXJM62gWo1KHcZP9NJP30'@;
put 'tNnyyncj0nIO4VgIS+JS/AQoMIt/DtHC0JFb1iRlyQMQmH0eiiuw0RNjb6fIc/8WlZ52f8Zh6ul7VH06/rKmwdte5GrBTCZM2fjTkBzf4+8wgQAcytwFEggMgelLUrLsAQvnJu1pjrMUVeYN59aMGnLprCO/+m5YOi6hc5LrQ7vhR/iizwlQYPp8grIZnsYfzkKbxHs+6EjKQ+udbjvjJt/8TLpN'@;
put 'YjbjKfR7NP5p6iLd/xRin7zduu5/b6/Iq9+NysXT/hTY3u4x10YCJOAVgbqxttz2CFpNzoLItBGX6U2jNa+G57v1hGOmnDtky69+GJH+bp5vfTdBQxwQBeYQgfnx7WplGzvNkgeRQe31VZ8KLMH3XAuuP/81f/aRjVU6svKDCZmEfsGexl9i121kp3deMOSFb0alr8ul4cdDgGMiARLwKYFIzJYl'@;
put '91sy73Y77TJnP/MbzlQELSWPbLdlw0+jCHfiOfeGsHz+IgWmzycom+G5LuJaWx75rYSUVyGD0aM2iZlt61fcMQy4iQ05vM1fbmIND5g4x5b7HkcqojvQzKhzv1XhrijPHRZ5+btltD7kjpRrIIGSJTBjqSXLHkxIdQ1a+mopI7rMr3ssqMjc/ZojW55nIfbrQiqCFygwi2CSshmilip68DNJGTfD'@;
put '20xy3bar26C22lF0/UXEYvb1+sd1UV5ly6rHUzJ+BrLHk976n1RgOo4m94Rkyy+ZQZ7Nccj3kAAJXJ9Aw3hL7niXJWOm4dzCLPPrg8K5N4wE0zeeDcme11mI/fqg/P0KBaa/5yfr0bmJPmhdtmSNt4k+mQGoyDTwhd+9AVeVz/ojozwctWXeHYhxethGLTVvxaXutwpMK2nKhp8bcmynFtfkQgIk'@;
put 'QAK5ESivcuTWB1Poaa4mTC3Mnk6mzG2twft0CIXY1Rv36x+H5cQu1sgsxhmmwCzGWRtkzCHECk6cY8n9n7TcvriDvCXnp1RwpZBEs+7JMIrijqyr3EBi09jplqx+3JJIOU7QiGvyclFB7YBpT1tIXvhWVLpa/WO19XI/uS4SIIHCE9DEzPl3oTA7yhnFyrQwuwY6cbmWgNbI7O9B0s93Y3L+JM7K'@;
put 'LF90LSJfP6bA9PX0ZD84BwE9laMcefS34lJZmz5hZf/p7N6poktwVdndgbqYyKpu1XplI7FA+NWORtzlR1NS16SdIPJjvdST2ckDIq99P4pYTHfvR2JvuU0SIIGAEpg8z5LbHk1KTR0MmWrJpMp8x0xr+aL2Zlte/nYU5Ys0jZXn4ndA8ukTFJg+nZjhDEvL9dz5GAr8rvC24PrAsehXOwRvcds5'@;
put 'kVd+UHjLnpvQVOPI3R/WuMuQp1njV+0ndtS2UGD9BS3PxPjLgWx4nwRIwDsC9eNtxGUmpXEqXMJsMTkoWC1fdOZAunxRwkc5AIMOlk9eIUCBeQVF8d9RN/mkuSlZrW7yVP72xxWZcF20nhH59RMR6WgplCXTkaoanIzfl5IpKEnkZceed9BS9zgKy7/4rYh0Fmz/3jEKPkECJFACBCqqHVkOkTlt'@;
put 'gVox2cd8sCnXzPK9G2wk/kTFStGKORgjvz1Hgem3GclxPLEKWx76XELqx6OjDVqU5WvRr7eB9l7t523Z+POInD+e5yQYCL66RojLxyzXcplPcZnOHg/Jsd0hWfcjf/dgz9f8cr0kQAKFJRCGB2oJkn8WrHDgJWLyzzvo40dHW0puedqQPZuQ9GNRZL6Dkc+eoMD02YTkOhzNJl9wT0pufxQtDvs9'@;
put 'bmtzzeD06x0yQxJHp5vtr5hycLOZl1hF3afxsyxZjo4YdY1m3tzimd1TgZlE9vj6Hxlycn+ehXNmo7wlARIoeQIaS6/JP8vWpCQaS2dR589MUHy4NbNcDSevPmHK6f0oX8TYeF9PIgWmr6dn6IPTGMWaelse/iKKro/KT7LPwFG515D40odMQ07stuWtVyJyqdkbl7nuSwVKeiy4OyVz7rQliqtX'@;
put 'C7Xj8rm41kts4PzxEILK/dm5KJ/7z3WTAAmMPIGpC1NoMWlJFRI3NfGHyT9vz4lmlne3O27ST1uza+Z4+0Xe8xUBCkxfTYc3g1GL37I1SVmqNTHzbMXMjFi/5uq+6Oly0OZLO/6Y0o4Wi8NZ9Cq+rMKRKYttmb/CkoYmxFuqsPS4Q9FgY1OBaVumbHo6JIe2jmwppsHGx+dIgARKg8DYqZabtFk7'@;
put 'BpZMnBMpMt+ed7dn+REk/XwPPct7hvc78/baeC9fBCgw80V2BNebtmI6sGLGC2LFzOxq2poJoYmC7D2djpw7EoJV05ALJw3p6775SSActqWmEYlK82yZutCS+rFoqYazaj5jSTNj19u3rZfIkEcZpmT85mMe+HneJwESIAEvCdQi7vzO9yZk7FT1RjH5ZyBbTfrZ97otm59m0s9ALn66T4Hpp9nw'@;
put 'cCxqxVy4MinLHy6cFTMz/IzQDEdM16Xd02FLx0VDLp0LSRcys/s6ULBdswDxv1oqK5EZXoOr9PpxKRk1Wp8Lu20fbY+Lp2fGd71bFZippCGvo3PP0Z20Xl6PE58nARIoHAGtb3zH+xIyeTbiD1Esk5bMy+xxvlZjxuanUEpuM+IxbTzBxVcEKDB9NR3eDqa8yhLtT94wAbGLeShGns1o3a88EoFM'@;
put 'xGkauNWAdW3/lWlboaLObQmG522M0RrwWjbr9+o9Og5VvCf2oVPRE7giZoaiV2i5HhIggRwJxModuf3daC+5BP4piswrNPW3I5VAPOZ30pVMKL6voPHFHQpMX0xDfgahdTG1U8R9H0VdTFV0qu64vIOAaktNRuzvFjem5+JpZo6/AxKfIAESGFEC4YgttzyclHnLNXQH53Sez935cDv9nLNQsxiN'@;
put 'P+AhY6efET1Mr9o4BeZVOIL3QLv7rHg3Tkp3Ft5VXiw03dhLx0SpJUd2vca6l8UybxwnCZQaAQM9zJfej1qZKx107WWtzMz8azzmke22rPsxvE9J1x2VeYm3I0iAAnME4Rdi05p9WFVrywOfTko9srFHylVeiH0dzjZccYl/zh5Cz3G0vkwmeHIaDkd+hgRIoHAEFt+XlCWrIDKRGCn4n8ZMEc0s'@;
put '3/KsyO4NiMdkiFPhDsYbbIkC8wZwgvKSiqix0xCP+cmkGFHtd8vTkc6tKyXhbepsDcmr349I23lmjQflmOd+kEDQCWh94KWrUxBW2FOKTLSWAwa0SH75e2FpPqxF2IN+BPh//ygw/T9HnowwBNfK3Nu1rpqNDG6ejTLiMtlnyIZfaJF4Zo17cqBxJSRAAgUjMHdFSm590JJwGdQUGreVuqbSWszt'@;
put 'zZfjMdsQj6nWFS4jRoACc8TQF37DWrrotoeSsmgV4zH1vGPbhux4OSS71kUKPxncIgmQAAl4QGDO7SoyUxIp05Oam87pwVqLdxUaj3l4q8j6n2iZPHqlRnImKTBHkv4IbDuCTMS7PpCSmbeUrshMX9Qasvf1kLz5HFwpaWf5CMwGN0kCJEACuROYudSSWx9NSlk5RabS1MzyTfBM7d9ssj5m7ofX'@;
put 'sNdAgTlsdMX7wRiKm9/zwbhMXWRKsg9+lRJaXHEZMuTgmyJbnkGvcS34zoUESIAEipzADIjM2ygy3VkMoeZyot+Wl74ZlYunYcXUOnRcCk6AArPgyEd+g5pZXlntyL0fTMnEBbBklojIzIjLA2868uYzUYrLkT8UOQISIAEPCajIXA6RGaMlU8KwYjYftVGEPSpxxNpzKTwBCszCM/fNFssqtM9t'@;
put 'SqYvhciMBzdC3L121fMLYi73bArJjhfRipKWS98chxwICZCAdwRmL08i1t6WSAwpPyWezxkpN2XnKyJbcc63WbrIu4MsyzVRYGYJKqhvi8RsWf4ICrHfYUhS20lqq8YALSouQ2G4S/pCsvNVCMz1iMlhzGWAZpi7QgIkcC2B2Uj8Wb4W2eWlLjLxA6C/Aa+gdNHpAzj301V+7aGS18cUmHnFWxwr'@;
put '1+4QC1ehptp9Fgr3hlBLLBgiU13i2v+8sxVXsC+F5fhOtoAsjiOSoyQBEsiVwLw7U3LLAxCZ0dK2ZBooXdRxwZEXvhGWbpYuyvWwGtLnKTCHhCu4b9a+5VPmw5r5rqRUN5iS6i/e5B+9YtWiuyEDMTiHHXkDmeKXmikug3v0cs9IgAQGI7BoJTr+rEZWtVnavcu1dNH+zQ4yyyMoXeT+QgyGi895'@;
put 'TIAC02Ogxb06R2pGO67LfMoCwy3IXmxdf9JWS0P6ey3Z97oJl3gY7R8Z4F3cxyVHTwIkMFwCy9YkZNFKXHCjd3nJdrdRTYmfgQ1PhuUoPFmOTZE53ONpKJ+jwBwKrRJ5rxlG158Vliy6NylVdWFJFEECkJ4uNNZS/zt7xJEdr4Tl/HFaLUvkkOVukgAJXIeAeqdueyQl8+/Q0KfSFZka/tVzyZbn'@;
put 'vxaTjrb0b8V1kPFpjwhQYHoEMnirgTVzjCOL0et2+gJLzBgyrxP+yzR3hSXiLA0jJK3NNoqnm3JsO7PEg3c8co9IgASGSyAMo8GK9yTRYANrcEpXZKqr/BDK1G34aZhdfoZ7MA3hcxSYQ4BVim/Vq9+maZYsXGlJ0wyRMAKmkz4QmpkEHu01237RQmuwiBzaZkpfN10fpXiccp9JgARuTEArhtzz'@;
put 'vqRMXghfsVOiMZn4eTDg2Fr3o4gc22mgXTB/L2581OT2KgVmbvxK5tMqNCfMsmT27ZaMn25LWRWshChrVMiMc/dUAGtlOJyOD209I3J0uylHdyPmsptxliVzMHJHSYAEhkWgrMqWVR+GsQDncG24UYoxma6rvB2u8q/SVT6sg2gIH6LAHAIsvhUEIDRHN9kybYktk+ZYSAoKiQmrppWyxbIQ4+Nx'@;
put 'hSO1VGrbL9PUq01HutstaT4CNzhEZfNRCM0khSWPSxIgARLIlsCoBlvuezwpdeP0E6UpMtVVfnCLIxt/Rld5tsfNcN5HgTkcavyMSyBaZsvYqRYsm46MnWbLqDpHohVht7CtWjZtXB6rKMxGdLrWSRWTiKXUP42p1Of6+1LS0x5y+8meOWzKeYjK3i733ZwFEiABEiCBYRAYM9GSe2DJHFWvzTWy'@;
put 'OkUPYys+/oj7WyPy6ydMOb4rzALseZoqCsw8gS211ZphW2qRFNQwERbOCZogZEtljQXBaUg0elkwuuLxajKIN0c4kCOWbUsi4UiyV2ClDElHiyGXzhnSciYkXbifiFNUXk2OjwYSMFDzNAwrNy5RUI5FZHRDndy+dKHMnzVDImHt3uSxaX3gxod5Xy+++uNxaWvvlIuX2uVSe4f719HZJV3dvdLb'@;
put '1y/JVGqYa+fHSODGBCbMSSEmMyWxKnxncCz67xty4/Hn+mq6ALstL349Kl34zdF4fi7eEqDA9JYn13aFAKyZZSLlVY7EKhGzWRnCYwdJQmqlvPwmCMsEit4m+0TiPSE3QaevN4Qi76GSO9ldwcY7VwhEI2EpLyuTyspyqa6skKqKChlVXSU1+jeqSirdx5VSWV4uFeVlUlYWc+PK9ODR12trRiG0'@;
put 'wt+lqvRHTf/S8XC4wEomXdHZB3HZ1dMrnV09V4Rna1uHtLa1u4K0HSK0o6tb+vrj8BLgKo0LCQyDwOzbknLHY9o8N23GLDWRqa7yXevQ6Q3NOCz2Kh/GEXTjj1Bg3pgPXyUBEsgDARVV5RCEVRCOdRCC9bU1Mrq+VhrqavBXi/t1MqqqQioqyt33RSMRicViCJ1IX53orYqyjLjK3Opzum7L0ixZ'@;
put 'jS8rrp9MHbsuun96X28z9zP7k0gkICz7pfuyAG3r6JQWWEBbLrXJxdY2aYEIVSGqVlAK0DwcvAFb5a1rE7J4FTzliKMvrm+LBxOhXzdo6xe/G0bXN3WVe7BOruIKAQrMKyh4hwRIwEsCGRFZW1Mto+vqZFxjgzSNHSONcF+Paah3LZGjqiulDMIxIx71MyoWM38qqgaKRy/HV6zrGihC1UKrj/U2'@;
put 'I0DjcLurAO3p7RMVn2r5PH+xVc5daHFvVYy2dXTABU/rZ7EeA16O2zRtuftDSZmxBImUSVyYebnyIliXGTXQlMOWl78VlXhfxr1WBAMvgiFSYBbBJHGIJOB3AmWxqGt5HNc4WiY2jXX/xo8bA2FZ67q1K2GJjMAKqWIoIxoHWhn1OS7eEFDGmb+MAM1YfJV5b1+fdHR2w9XeIc0trdJ8oVVOnjmH'@;
put '2xbXEtoJ17sm6HEpHQLlFbas/lRSGicjJh4JmqU2+2G4yrc866C1cERsuso9O/ApMD1DyRWRQPAJqHDReMfG0fUyeUKTTJ3YJFMmjod1crTUw9VdVVWJOqXqakq7p1NIUsncp4j0x/Ghc6iCU8Vnxv2uVmIVnl0Qly2weJ5tviAnIDpVeJ7BfbWCJhJJf+wAR5EXAnWNttz/qbhU1cKKV2JJP1q5'@;
put 'JN6L2phfj0lbs/rNmfDjxUFGgekFRa6DBAJKQOuPumJyfJPMnj5Fpk+ZKBOaGiEma9z4SBUoKk7UMpZxawcUReB3KyM8M+JTH+sFQndPj7S0tsups81y7NQZOXryNIRnsys6dd65BIfARGSWr/xQSsIxSCyYMUvJkqkJP4e3ObL+J0j4YX1lTw5qCkxPMHIlJBAMAhoPqa7tGRCSc2ZMdW/Hjhnt'@;
put 'urnVMqkiUkWH3tIiGYw5v9leqODMiE691Uz3ru4eOXseVs7T52T/4WNy5Php93F/PHGz1fF1nxOYf1dSlj+KQWqinM/H6unw1GgJ4+2vfxCRE3s0iZBWzFz5UmDmSpCfJ4EiJhBBKaAmuLfnzJgmC+bMkOmTJ7iJOFWVle5eqYUqY50s4t3k0D0mkBGc6mbXRa2c5xHLqdbNvYeOysGjJ1yLZzLJ'@;
put 'Op4eo8/76mC4lrseS8isFYiXLrGkH+1K13rGkRe/EZG+Hib85HqwUWDmSpCfJ4EiIqDCoHZUtcycOkkWz5sl82ZPlwnjGmGhrHYTQzLWSbVQciGBbAnocaV/auXWpau7G3GcF+UAhObOvQdcwdmK7HUmD2VLdGTfF9Okn4+lZNx0xFKXWNKPusrffF5k12vw2DDhJ6cDkQIzJ3z8MAn4n0AYVqYJ'@;
put 'yOxWQblo7iyZOW2SWyZIxQAtlP6fv2Ic4UALpx5jrajRefj4KXkLYvOtvYeQOHQeoRaM3/Tz3NaNtWXNpxNSOQomzRJK+rmS8PNvSPi5oG5yusqHe5xSYA6XHD9HAj4moGWDpk+eKEsXznWF5dRJ49HdZpQbN6lWSv3R50IChSKgrvRM1rq2wjx64rRs27VPtu/e72aqsyVmoWZiaNuZujAl934w'@;
put 'JYZGQpRQ0o9aMQ9uEdn4M1OsFF3lQztq3n43BebbLHiPBIqagCbozJo2WW5dPF+WQVhORLZ3BdopDkzMKeod5OADQSDjStcsdY3d1AShzdt3ytad+5AodJEXPz6b5VseTMqS+9DwoJQ6/cBoqVn0L34nLOeOoOwaI4aGdVRSYA4LGz9EAv4gEIGbW62Ty5culOVL5rs1KcvRm1stlGqpZKa3P+aJ'@;
put 'oxicQEZs6u0ltLfUBKGNW3a41k3ttc5l5AmEI7bc9/GkTJoFT7lVOkXYw+jwc/awIy9/JyLJOK2YwzkSKTCHQ42fIYERJKCWH+3ZfRsslXctXyrzZk1HT+9KisoRnBNuOncC6kLPlMI6fe68vLF9l6x/Y7scO3lG6ELPnW8ua6hpQDzm5+JSXQOhVULxmNpGcsOThhzcmk5ey4VhKX6WArMUZ537'@;
put 'XJQE1Fo5fcoEuXfFrXLHrYtRXmiMux+ZzO+i3CkOmgQGIaBCU/+0beXOvQflVxvfkB1aevCmAABAAElEQVR7DqDbUP8g7+ZThSAwBfGYKy/HY5ZKJ1EjHJL2CyLPfCkKKyaTfYZ6nFFgDpUY308CBSagsZWL5s6UB1beIUsXzHWLnmuxaybqFHgiuLmCE1DXufaw1+P9CLLQX9nwhmx88y25hD7q'@;
put 'XApPYPkjSVl4T2nFY2rCz6anRfasixQeeJFvkQKzyCeQww8ugfKyGJJ15snDq+9yywvFIDT1h5Y1KoM759yzwQloWIgKTV1Oo2WlCs3XXn9TzrdcYpzx4Mjy8mwkBlf5JxOoj4ki7CVSHzNkhqS305an/6VM+rpoxRzKgUWBORRafC8JFIBALBqFpXKOvOuBlbJ4/mxR17gKSybsFAA+N+F7Auo6'@;
put '13jNc8g4f3n9ZvkVxKYKTV54FWbqRk+w5IFPpSRaoZnWpZH0E4UVc8erIm8+RyvmUI4yCsyh0OJ7SSCPBMJh0+39/dja1XLnbUtEhSaFZR6Bc9VFTWCg0Hz+1Q2u2Gxto+u8EJM6D/3Kby+hfuUh5DYlEf77zJcj0tGSbo9aCM7Fvg0KzGKfQY6/6AmoZXJ0fa08ev+9cIffLXW1NXSFF/2scgcK'@;
put 'RSAjNI8cPylPvfCabHhzh/T09hVq8yW5nZDhyH2PJ2XKotLpV65WzL2bHNn402hJzvlwdpoCczjU+BkS8IiAWimXLZwjH3r3Wpk/e4Zbu5LJOx7B5WpKikAU3yX97mzduVd+9PQLbv9ztqPM3yEwCqWLHkQryap6xCWWQOkihAHj+HLkuX+NSus5WjGzObIoMLOhxPeQQB4INNTVymNr75NH7r9H'@;
put 'KivKJZFI5GErXCUJlA4BTQZSodmGLPNfvPCq/Oz5X0k8zu9Vvo6AGUstufsDqZKJxYzETDm83ZbXfhjLF9JArZcCM1DTyZ0pBgKaoDAbLR0//eHH3CQetbrQalkMM8cxFguBTN9zzTT/9pNPSfPF1mIZelGNEw5yuefDSZmxVLPKLW1XHuhFrZgw1srzX4vIhRO0Yt5ssikwb0aIr5OAhwQ0kWfV'@;
put 'HbfJJz7wLhnXOBrWlbiHa+eqSIAEMgTUmqmlvbR+5pe+9YTsP3xMUriY4+Itgeo6uMo/m5Tqeqy3BFzlasU8tsuSV74DK6YqTi7XJUCBeV00fIEEvCUQi0Vlzd23y+c/9n7R4umaIc6FBEggvwRUZGqf8y9/50nZtHUn207mAfeMZXCVvw+uctgwS8GKCWUJK2ZYmo/Tinmjw4kC80Z0+BoJeERA'@;
put 'i6Z/8NEH5MPvWYuL3hBd4h5x5WpIIBsCWqS9vz8uX/nuk/Iq3ObxBC/usuGW7XtUWN77kYRMX2KUhKs8gh7lJ/Y78vI3Y4EX1NkeA4O9jwJzMCp8jgQ8JFBRXiYff/+j8v5H1rhZ4iwI7SFcrooEsiSg5YwS8Bp8+Vs/ktc2UWRmiS3rt2lW+drPJaRyFNzGQS/Ajl1EF1N5/uthOXcknDWjUnsj'@;
put 'BWapzTj3t6AEVFx+BFbLjzz2sJslzm48BcXPjZHAVQRUZKol8x++9j26y68i482DOSuScud7oC8R6xp0V3kmFvNlxGKqV4rLOwlQYL6TCZ8hAU8IaI3Lh+67S37jEx9029jRcukJVq6EBHIioO7yVsRk/o9//JocOHJcLNvOaX388NsETBRgX/2JhEyYg+dQMzLIIjOtKRGL+XVTmo/Rivn2UfD2'@;
put 'PQrMt1nwHgl4RkDLpGgB9T/+3c+5CT0sQ+QZWq6IBHImoIk/ew8ekb/556/LBfQx5+IdgdETkVX+qYREyrVXOayZ3q3ad2tSK+bRncgo/y6tmINNDgXmYFT4HAnkSGDsmAb5T//uczJ35nSWIsqRJT9OAvkgUF5eLk+i48/3fvqs9Pah0TQXzwgsezApS1c5Ylt2oAUmksk13FR++dWIXDzFjPJr'@;
put 'DyAKzGuJ8DEJ5EhAM8Y/gIzxT37w3Yj34g9Xjjj5cRLICwEDWRra5ee//f1XZM+Bw3SVe0g5Vo6En8/HpX4cFBgiEIJuxTy41ZZ1P2J3n2sPIQrMa4nwMQnkQECDvSdPaJK/+KPfltH1dW7WeA6r40dJgATySKCsrEx+jYzyf/za96WrpzePWyq9VU9ZmJKVH7bFgMIMssDUWEwb8abPfDkql5pp'@;
put 'xRx4pFNgDqTB+ySQI4EyFFPX/uKf++j7ab3MkSU/TgL5JqAXhFoT8//6/74s+w4dpRXTQ+BaG3PVRxMydVHwa2NGy0zZvcGRTb+Iekiw+FdFgVn8c8g98BGBuppqxF5+Hj3G5zD20kfzwqGQwPUIaCzmD372nDzx1POMxbwepGE+39DkyJrPxKVME36wjqBaMkOoiRnvE3nmX6LS1YYHXFwCFJg8'@;
put 'EEjAIwIa0zVz6kS4x39XKivK3dJEHq2aqyEBEsgTgSjKie3ef0j++n99Vdo7u/O0ldJd7S0PJGXJaiT8pILtKlcr5raXHNn2Iq2YmaOdAjNDgrckkCOBCIo43718qfzRb3+GsZc5suTHSaBQBLSkWHtnl/zZ3/yTnDxzDlnBQbWzFYro1dupqHTkQST81DZqsGJwa2MaZkh6Omx56p9i0t9LK6Ye'@;
put 'BRSYV38X+IgEhk1AC6u/a8298kUUVo/H48NeDz9IAiRQOAIah5lMpeSvkE2+e/9hSaELDRdvCcy+LSV3vg/p5AEvW6RWzA0/Fdm3KeItwCJdGwVmkU4ch+0/Am6Cz0Or5XOPv48JPv6bHo6IBK5LQK2Y/x2dfd7YsQveBwrM64Ia5gtmxJEHUHy9aTriMAPc4ccMh6TlnC3PfqlMrJRGnZb2QoFZ'@;
put '2vPPvfeQQBm6g7z7wZXyeWSQ04LpIViuigTySEAtmPr31//r3+TNnXsoMPPEeuJsC1nlKQmbwXWTK7pw1JCXv2PIiT1sH0mBmacvE1dbegSi6HG86s7b5A9+45OSSCRKDwD3mASKkIAm5/X3x+Wv/kELrh9hqaI8zaHa81Z9NB74skUqME/td+SFb0TdC5c84SyK1VJgFsU0cZDFQMDED9WCOTPk'@;
put 'T3//NyUajTBZoBgmjWMseQLqHr/Y2iZ//rf/JGeaL5Q8j3wCGDPJQp9yWDHLkEgV1FwqKGkH4abPfSUqLWdKO9mHAjOf3yauu+QINI6ulz/7g9+UaZMnSjKZLLn95w6TQLERiCG05c0du+X/+fK3pLOLZYryPX93PpaQ2XdgK8ngli1i4fX0UUSBme9vE9dfUgQqysvkU+hB/n70Iu/rQ+VdLiRA'@;
put 'Ar4moO0iv/KdJ+WZl9ehqw9DW/I9WTVjbHnoiwkB9sAWXw8ZIenrseVplCzq7SpdKyYFZr6/TVx/SRFQN/nCuTPlT2HF1LqYrKlXUtPPnS0yAmF8R1svtclf/M8vy4nTZ/l9LdD8LX8oKQtXBrv4uloxX/+5yJ6NpVuyiAKzQF8obqZ0CFRXVcjvfPojsvruFSxXVDrTzj0tQgLaJvJHaBH5fbSK'@;
put '7O3rL8I9KM4hV9fBivmFuFSMMiSEwvZBDMc0IyG5eNqW576MkkVWaZYsosAszu8nR+1jAgZKnsydNc1N9qmqrMDJhXX1fDxdHFqJEtAWkafPNst/Q4H1U7jlUlgCyx5MytL7gm3F1LqYz3/DlLOHSrNkEQVmYb9T3FqJENCi6+9F0fXPfOS9rIlZInPO3SweApnal//wb9+TdZu3SYIJeQWfvMpa'@;
put 'Wx6GFbOyJrhWzEjMlEPbbPn1E7GC8/XDBikw/TALHEMgCdSOqpbf+8LH5a7ly5jwE8gZ5k4VKwFN7PnZcy/Lt3/8NF3jIziJSx9IyLL70KI8oC0kQ8jviSPX8+l/jkh3uzmCpEdm0xSYI8OdWy0BAmolmTCuUf74dz8rM6dNoSWzBOacu+h/Ahp3ueGN7fKPX/++tHV0+n/AAR5hZQ2smF/shxXT'@;
put 'DGwsppvs8zSSfdaVXrJPSQnMD73rAdmyY4+cOHMuwF9Z7pqfCGhW+ewZU+SPfuszMh5iky0k/TQ7HEupEVBxuX33Pvm7f/22nG+5VGq778v9dWMxVyEWM6BWTDfZ55TIs/8axT6WVrJPyQjM8WPHyD/+1X+Wvv6EfPvJp+T51zayJIUvTzfBG1QYnULmzZ4uv//FT8j4sRSZwZth7lExEFC3+Ft7'@;
put '9ovGXZ670MLzv08mzc0o/3xCKmpQFzOgDX4MeMd/+bWINB8tLTd5yQhMtV5+8RMfcntEa+2z19/cIV//4c/k9Dm2BvPJeSbQw3AtmdOnyP+OmMypkybQkhno2ebO+YmAhqqouNy09S350reekOaLrX4aHscCAssfRl3Me4ObUa5u8r0bHdn482hJzXdJCEztNfs3f/IHKB0z3RWYOsN6wmlta5fv'@;
put 'wJr53K82lHxT+pI66vO0sxH0152xJCnHdoYR2P3O7g36Qzd5wjhYMj8pc2dOc49FFmLP02RwtSQAAnru17/nX90Az9XTcqm9Y9BzvXaXKa+25eJJU6xUabkx/XCg1IL/WmSUl5WHAtndxzBD0ttpyy/+MSb9ve/8bfDDHORjDCUhMOfOnCr//f/8A5ffwB90PfGoNXPd5q3yjSd+LufOt+SDMddZ'@;
put 'AgQM05GJsyy58wO2rH/ClDOHr+8Kmdg0Vj72vkdk5R23um461sksgQOEu1hwApFIBCFRcbeQ+lMvvubev94glqxOyrRFlrz6g6i0X1CBSZF5PVb5ev6u9yZk1gqsPaA9yrVk0Ws/FDm8vXSSfUpCYH7+8ffKR977yHVLxag1s6X1knznx8/IL3Glq5YmLiQwFAKxCkfu/WBCpi4wZd8blqz/cfSG'@;
put 'x9Go6ip5cOUd8oFH1khdbQ2tmUOBzfeSwA0I6Pk7Fou5RdS/8t0fyzYk9aRS1292ECt35IHP9kvT1LDseMWRt16NSDLO34AbIM7LS6MnWbL2UykJwxMUxNY+4aghJ/fa8tK3UBOzRDRG4AWmFrz+u7/8Y5kAq1EqlbruF2OgNfPrP/gZ43SuS4ovXEsghMj0xsmWrPl0SiJRuEK6Q/Lq90y5eOr6'@;
put 'VkxdRzhsytwZ0+Tx9z4kSxfMdVd7o2P02u3yMQmQwNUE1GqpHoFNW3fKE2gBefTkmZsm88y9PSnLH4U7PWJLd6sjL34rIh0t6sakyLyabn4fqXdx9ccSMmURuKfswGlM1ZSJhCPP/EtMOltLw00eeIF5y6J58pf/4XdvKC4Hfm20jEXzhYuuNfOldZsGvsT7JDAogUjMkYX3pOSWtTgvxtVSEpKj'@;
put 'O0TW/ySKk+TNf6SqqyplzT0r5D1rV0lT4xj3WKXbfFDUfJIEBiWQMRBo68cfP/uSrEedy55eVLi+yVJWKXL/J/pl9ER8a2E4MyKGbPyZATcmYjGTN//u3mT1fHmIBCbOsWTVRy0JG8ETmIrCrYn5FGpiri8NN3ngBea/++zj+OFefV33+GDHv8ZlGqhfqLGZas1kvbTBKPG5DIGySlvu+2hKmmYI'@;
put 'fpRs1/uRiBsQmIac2pddD1rtXz5pQpO8a829surO20RFZxLt62zbzmyGtyRAAtcQ0PO09hS/1NYhr76+RZ59ZZ2cbb54U6tlZjWL79N+2BCXhoXPwKuAOLkj20U2/cIcNFEv8zne5oeAiVj2Bz6TkHHTMRm4Vse/gVrCkZCcO+7IL/81lpXxodh3PtACs6qyHO7x/ySNo+tdt8lQJ0utmWebL8Ca'@;
put '+bS8suGNoX6c7y8FAjB71DXa8iBOiuXVhjj2ZZsljB8Xz4TkV99DokFX9u6QCC5utDD7u9aslOVLF0hlRQWFZikcR9zHIRFQYanu8O6eXrf80DMvr5MjJ07dMNby2g2MnoALQ7hkK0bhO+uEXDGj2b7tLY689I0oWvtl/729dt18PHwCs29NyR3vx4V6EAuv43fBxm/Ecyi63nr2xiFUwyfon08G'@;
put 'WmDeccsi+bM//O0rpYmGg12tmRo0/hqujr/xw1/IxUttw1kNPxNQAiE3e9yW1R9PYA9x9rh8yZ2O4Tbk4JtqDYkM+Wo1Go3Iwjkz5dH775FlCPMoRyIaLZoBPYi4W1kTyLjCu7p75I0du+S5V9bL4WOnJAFr/1AWDWu57/G4NM3UsjiOa710P2+EJNXryAvfjkjrGVwwQnhyKSyBWLm2j0xIbaOq'@;
put 'McxNYTef962pm/zN5wUJZcF3kwdaYGrnlEfuv3dI7vHrHV1qzTxx+qzbBUjje7iQgBIwI47Mvg1X3O9xXPf4QCoqMq2UIVtfCsm+jcM7mcSQpDYf9VvXrrpLNJ5Ys89VaDJGcyBp3g8yAb3A1wt9FZda7WPz9l3y8vrNrrBM3iBx83pMVFAufzQpc+9QcZl2jV95r6snHSTpReXUIQjMEmvtd4XD'@;
put 'CN9ZtgahC6uhL5GwFTSBaYZD8G7Z8uyXymDNdA+4Eaadv80HVmBWV1W42eNjGobnHh8MuZ7kUjjgX8HJ7Xs/fRaF2jsGexufKyECboLPyqTc8kBIkv1Xl0JxTx34p79fZPPTYTmOAuzDXdR1PnPaJFl91+1yx62LZXR9nRufqVnnA2u7Dnf9/BwJ+I1Axg2ucch6cb9u8zY3eefc+Yti5RCbvOje'@;
put 'pCy5X4uwXyMuLwMwIADW/ciU47tZdH2kjgktvP4QCq/HKnARAIUZKJGJ3wS1y/7yKzFUGgl2GEZgBaYX7vHBvlx6Na1B5afOnHM7Q6zfQmvmYJxK5blImQ1xaSGLHPWB3Qzyq/fcFZk4h/ShdNHrPzfl1P7hi0xds7acHNc4Wu5evtT907aTGoumQpNWzavZ81HxERhorezs6pY9Bw7LrzdtRS3L'@;
put '/aKPc13m3YlqD2uQpQwXuSB/bjDhYmom+c8NObLNlBQzyXNFPqzP60XzqscTMn0JrMioYTrYPA1rxT75kLrJt73oyLaXgt06MrAC8w/gHn/YI/f4YMdkxpr5MkoZfe+nz7ktyAZ7H58LNoEoijQvfwTuttthwRxEYOreuyIT8dx9+H3c8kxEju3yJri7sqJcFs+b5XYEWjh31lVWTWafB/u4C9re'@;
put 'qftbL5QSiYScPnferWP5OnqHHz911vUa5bq/Wqt28aqULFrliBmGsryOuNTtqMDc9DTip7ewVFGu3HP5/CQtWfQxS8xQ8EoWqZu85QxqYn45hjAA9xciF1S+/WwgBab+8P79fx1+9ni2s5WxZh4/dcatm7nxTRQ/5FJSBKIISF/xrhTiMK8vMBWInkJCSCCI9zuy5dmwHNkRfjuxIEdiGavmbUvm'@;
put 'y+1LF7lZ6FWVlVdc6BSbOQLmx/NCIJOwo8fnRcRW7oCV8nUUSN8Nq6XWsNTzqxeLdupZtjYps2+FuzWEMJYbiEvdHgWmF9RzX0cYhe8f+kJSGiYgy/8mc5b71gq8Bj20YaV9FuWKWpBMFtQlkALztsXz5S9QXF2TIQqxqDVTg83Vmvn9n/2S1sxCQPfJNrIVmDpc9+cS5xKtkXkAVa/2rotIf583'@;
put 'P6IZHBqrOWVik9yK74AmBU2fPFGqUFNTf8TVhU43eoYUbwtNQAXjwLhKTdjZd/g4ROVbsnv/YWnr6HSPUy/HpaWIboWHYfy0ECxFsIRl4WulwPRyBnJb16KVCbl1LdKyApjs42aT/xLZ5L8aXgJobmQL8+lACszf+fRH5L0P3+9J9ni205CxZh5FLTbtab5p285sP8r3FTGBoQjMzG4asGTqD93p'@;
put 'QyI70fc4X4HeGbG5ZMEcWTp/jkyfMtHte67HaiZmkwlCmVnhbT4I6LGmF+DuRTgu+NVSue/QMXlz5x5XVLZeakclmixU3xAHZ6B82PRFKVn2kC1V1TBaarmbLDdDgTlE2Hl8+6gGLVkUlzJN9sF2spzCPI7Iu1WbKLp+/pgtz32lDPvlraHBu1HmtqbACcwYEnD+7i//o0wcP879Ec0Nz9A/rXFE'@;
put 'ccQRaZvJH8CaqVflXIJLYDgCU2ngd9d1mfd02LL39bAc3prfziFhxLiNbqiTeTOnydKFc2X29CkydkyDVKD8llo3VXDqLQVncI/VQuxZxkqp7m+1Vvb29sq5Cy2umNwOF/jBo8elvbM7r8dZ3ThbFt6bkinz1d0N3+oQO8JQYBbiSMluG3o+uu+jCZmq/ckDVnhdfwOslCNPfykq7Re8icvPjmrh'@;
put '3hU4gTl/9nT56//8++4JbKR+LAdaM7/15FPyxvbdhZtRbqmgBIYrMHWQes0aQucQB7XQzp90ZPc6U84eNGHR0Vfyu1SUl8nUieNl7qxpbp1NzUYfXV8rZSjoPtCdPlLfofzuPdfuFYFrBaWGJV1qa5ejJ8+4sZR7Dx51Swz19ce92uR11xOrcGTWLRYS7lJS3aAu8eytlgNXSoE5kMbI35+yICUr'@;
put 'P2KLgeDZIFkwlay6yTf+AuFSG4LpJg+cwPzEBx6VT33osYK6x6/3FXStmfGEvPDaRvnhL57HlXvX9d7K54uUQKTMkVsfTMmCuwcvU5TNbumVrLaoS8RD6F0usm+TKRdOGp4lOdxsDCoStID7ZFj9Z02fLLOnTZGpk8ZLQ10N4jer3I9r7KYKT1o5b0Yz2K9nBKW6vNVCqVnfbe0dyPy+ANf3UcRU'@;
put 'HpWjJ85IB851+XB9D0YXxlKZNC8lc++0ZNxkvAPfJ0fF5WBvzuI5CswsIBXwLVGUglM3ee1YnBMD1tknHDXk5P50a1LXrVVAroXYVKAEptp9/vbP/73MnTm9YAk+N5ukjDXz8LETbt3MLW/tudlH+HoREUjXwYRL7h7numWKst0dFZpm2EA5IwdFnpEIhDIpl86NTIZheVlMxo8d48Ztzpw62b0d'@;
put 'B5e6CtFYLOZ6CCg6s53Z4nxfRkxm3N26Fz09PUhi7HRLCR08clwOHjvpWijbO7pyKn4+HEIGSg81TrNlHoTlxFmOhBHTZqdyt3JRYA5nNvL7mdseTsqiex1P5je/Ix3a2kM4vff3iTzzTzHp7lAFE6wlUAJzEiww/++f/xEKoaP3c7YR3QWaz0yNt2fRO/eJp17wpGhwgYbOzdyAgJcCM7MZTQIK'@;
put 'oU5ab7stpw5qPb6wtJ5GweHMG0bgVksh1cOiqaJTrZuanT5p/FjEcY6WqsoKt/mADku/d5nuQmrt5OJ/AiokrxWTOo+9fX2uJbL5QivqUZ6RIydOywk0mGhGTKWWERqpc6y2ehwz2YErPCkT54VEyxDZiGXz6pRPgem/Y7ZxkiUPfDYpEfSpGMnzYD7IRGDF/NX3DTmaQ6e3fIzLi3UGSmA+uuZe'@;
put '+b0vfMIX7vHBJidjzTx09IR880e/kG274A/lUtQE8iEwFYhey2rdTG1b19dty2kIzcNbDblwIoxSQ/5ApolDtTXVEJ2NSKobK9MQx6kCtHF0HZ4fJeWI51RXqgqRgcIz89gfe1E6o8iISL3NWCV1LtTN3dvX77q6my+2yqmzzXLyjP6dkwstl6Srp9cNjRhpUobhyNgptsxCjOXEWSJllegknsyu'@;
put '9NBQxk6BORRahXmvzv3azyVk7FTIy4DVxNQ4zP2bHVn/k+B19QmUwPyT3/ui3LPiVvR+RvNnHy9qzexH0Pvzl2MzvWiB5uPdDfTQ8iUwB0JzXefoLpLAYX3huCOHUKT9LARn3OMamgO3Odz7Kl40gaihrtYVm01oazmhqdFtbzkG/dNrRlVJGVzs6mbX92bEprrb9T5jPIdHXlnqonGRumQEZOZ5'@;
put 'tSr3wSLpCkm4s1U4nm9pdV3dZ5svuI870IqxHzHjflsiMVvGz7JlJhJ4xk8NSaRMs2+9F5aZ/TZhUdryTEj2bcbFHFtFZrCM+O2ilUnUxNT42mC1jtT4+84WR57655gkE8FykwdGYNYgNuzv/usfuz9sxVBMWk/8+iOrcUxf/+HPZMeeAyP+BeYAhk6gEAIzMyrVEBqjaSHQvf2cI0d3m3Jyjykd'@;
put 'LSMTp5kZVza3eryXxaJSO6ra/Y5qiaTG0fVuqSTNXq+HxVNd7eUQp2r5VIGUEUeZ5KKMyz1zq4I0yEtm/3UfM8JRb/VPX8u8nrFCqiVSs7XV4qgXrS2oMdlyqc0Vjxdb2+QiHmvyTWd3jy8skjebu+p6W6bMtWTKEktGNxk49vMrLDPjCcdMefM5ZPa+jl7kCf9/tzLjDvpt3Vh09vl8XKLlOBEG'@;
put '7KuvrUyf+2oUyZ3BKlcUGIG5fMkC+S9/9Du+Se7J9svuWjPjcXnucmxmF07+XIqHQCEFZoaKXuMaEJp6UurucKT5aMhNCmo+HpaED62amXHf6DaGuOnKigokEVVKHcTmOMR2ahZ7fe0o192uF5DaAlato5qApK73KGreZsTWwHVnrKAZATpQkGaeG/j+wZ4b+PpQ7mdE37WfGSgIM2Ix81zm8cDP'@;
put '6Jj1QlnL/miXsP7+hPQn4q4FsqurxxWJrSgHpHV222CRbEPiTXtnp3R190ovPDhxH1oiB+7f9e5HY46MnmzL9IUpWC0dqarViEsk76gr/Hof8vh5V2D+MiR7NxoUmB6zzWV1eiRoHOb4GfCRB9BNvgVdfd4KWFefwAjML3zs/fLh9zzk2/jLG32x9IdGfyw1NpPWzBuR8t9rIyEwMxRcZwoMLOEw'@;
put 'LC1wGbZfQJmj/SGUvQhJ+9mwpHwSq5kZby63KsJUhKq4VAtnNdpfVsPiWVUFUYpSSlUQn3rfFaF4PSNEowhH0e9WBIxUlCorXZcmLelt5k+/g3o/I/oGik59buAy8DV9Xh8PFLV6P/Onr6UwESoSUyoY9RaP47ioVGujuqTVbd0HUaiJM92wPnbjtqcHf3Bp62N9Xl+PJ5KucLQCljylZYZqYZ2a'@;
put 'NM+SSbNTUjcOc4VwNHWDj4SQoMAceLT76/78u5Ny+yPBc5NruaLThxx54d9w4F9zvvHXDAxtNIEQmJps8D/+5Pdljo/KEw1tGtLvVmumZm4+89Kv5cfPvoQfF9Qv4OJrAmmBaaFM0fDrYHqxg65VE3GayAtC2QtbWs+F5PQ+Q84eNqT9IkoUW1eLJC+26fd1qDDUdpkqKvU2ghRUFZb6PVOxqm54'@;
put 'FaDu87hv4P1agSKzpD+f/mzmpG+hm4i6ogfWeFQxmYD40+fSVseUKyRVTCaT6fsqKlVgaiykPqf3rxWqme2Wwi2mREY1WjIB1qjxc2wZPR5JO2gHiOiPglorB2NNgTkYFX88VzvalrVfSCDBCzoMx0qhrNr53ntN6OzvseVpxGH2dAYnLCMQAnPCuEb5n//lPyCmMVr0J233Rw0/egcQm/nNJ34u'@;
put 'b+09mO9jm+vPgUAELr0lq5KyZE1Ikv3+MBnqBbDGamoqerzHgtg05MzBkJw7Epa2i5p5W3piM4cp5kc9IqDflfomW5qmOzJ+puVaLcsrTJyzCxNbme1uUGBmS6rw70u7yRNwk2PbASy6/tK3EFe/LzhxmIEQmA+uvEP+/W99xvfZ40P5OqpbT62Z2gHoyadfHMpH+d4CEtAfzcWrUrJ0DSyYPhGY'@;
put 'A3dfC/maprp+ITZh2VSBqTGb546giPtZXDX3BudqeeB+8/7IE4CxGDGUSNCZ5EBUWtKI2pVV9WiPF0NNV3i/1Rqst35bKDD9NiNXj2cB3OTLH4X1El6BoFgwdQ+1XNHO1xx549nglCsKhMD8w9/8pKxddXegBKYecGFYMl9EKaO//+p33dgwfY6Lvwj4XWAOpKV2SwNudBWdVkqk+5JaN9EH/Sha'@;
put 'U54ypas13a5y4Gd4nwSyJaDHVeUoGzGUtluvcgySdWrHiJRXIeMdFzl2ErGqKiqzXeEIvY8Cc4TAZ7lZtYKv/SyyycuC5Ykx0YnqwklHnv0SOqW5lZCzBOLjtxW9wFS3+N/9xX9EoedxbnyTj1kPeWgaj/S3//w12bRt15A/yw8UhkAxCcyBRNxTM+qvhdWVDh9lf78tXZccaT1jysVTIbdzUOcl'@;
put 'uP3jeJ0LCQxCIBKxpbJORMvHjJlkS8MEW0aNTgvKsApKnMDUSjkSiTqDDDfrpygws0Y1Im8Moej6Q59Lyli0CRVEJfn9giVbSOplSiYcNw6z81IwzrtFLzBnTp0kf/Onf+hmgAYpaF5jMc+jq8b/8X//vVuKJNuDlO8rLIFiFZjXUnKtmxCb2jlIY5v6+yzp7RBkpqvgNORSc0g6kKXe14NEjBJM'@;
put 'GLqWV6k9Nk0HiRW21DSK1I+33VjKukZHKmsdtGpEghQuVhyrOAXltXNJgXktEf89Xnp/0g1LCpqbPIIarK98PyTH3kLR1wAsRS8w3/3ASvnfPv/xoixPdKPjx0TW67pNW+Vv/+UbN3obXxthAkERmNdi1KvpEESDxm+qjcCCe7OvB3U320XamtPCU0VnF660412oF+iP/KZrd4OPh0HAjDhSUenA'@;
put 'GgkX91gISlgoa/Cn1spyFLlWV55mkLkxlBCVmqQTpIUC0/+zOXZKSh74TEq0GkGQDj+Nw9y93pZNT8X8PwlZjLDoBeYf/+5nZfXdKwIXf2mgbMo/ff378sJrr2cxjXzLSBEIqsC8lqdKCoHW1DI/IbVyQlWkIDrjKK3RC4HZAfd6J8ohdeBPYzl7ukIS70bXIQrPa1H65rEBq2SsDFbIOojJBgdi'@;
put '0pEaiMpR9RCYNfoa6oWqmMTVhpPCRYbW38T/QfpBH2wyKDAHo+Kv5yJRRx7+YhzxvojvxbkoKMdkJg7zuf+fvesAkKo6u2fq9mVhadKLgKggCAFEaVKEqMRobFEsPxr9TTEaY/1jS6ImakSCYk9ETSxYwQIiUhRQmoICgvTey9Zpb/7zvWUImIXd2ZnZeffufbq8KW/uu/fcO/PO+8r5ns6gI8n+'@;
put '1XUW8HH2RmmCKaLLj933ezRv2kS7+EvRwLzzobHYuIXmIrM5FoG6QjArmwD750/4x0FLp1g9o3Svh4KWrcVZVuShm53Ec7cbxXtJPPe6+Jxu9mLGGpW5qRXJUHb5kNlShoDA62WsZEZuFHkFTMKhS1tIZB5JZC6JZQWRpP4nM7tFi0+skTHLpFy1dblwxwOwIZjxoJW+Y08bGUKnXiSXCiSOVRcl'@;
put '+b6yYBfjMP38vVQ/DlNpgqlr/KVUFFm6fBXueeTJCqtBdVenOa7WEajLBPNoYNuUkf8cQTxJVSxaM0XKKcj6AeXllEg6IJZOkHSSgPJx7HmAcZ6BUrpgwxWE52jnMa/bxkXGP1rIzAIyKD6dXc9Cdj7lgbjPpUs7u4DPs/leLv8yaYEWFQFexYRISka3JBJC3NwGzEMIGIJ5CApHP2jNcqIDLuJN'@;
put 'alQvuSKp6jPtJephLlNfD1Npgnn24H749ejL9Iu/9HjxxqQpeOnNyY7+gpvOAYZgxrcKbIMl/7H1Oe1/SJLYhCTo8TrBKjcspxikXFIp7ISiAPfltHiW0Q1fStIpj4OyLwHCAR7HYyMhciT+CWkSd64OmwzD440yy59/JI9+ksPMbBJJEsUsWiOz+ZdLi2RmHl3ZfD2DsZHiNpQkATevSzaJFFxp'@;
put 'JRZhIEnAERZpiGTVq8MQzKoxcsIRObx5GnFNObLzeNMka90JnUpCHyQOc/H0KBZOUV8PU2mCefN1ozC0f1/t4i/FRfXHMU+bKj5J+LKmugkhmKcMDOOUMyusc6k+n+7t2/SQ/0hWslw13EJC+X/sdYtEyWKN6jCJU9gmli6EKe0RJNkM0TIaLHfzMd30tJAG5LVyPqbUUohup3CQf6xiJMdLNSPL'@;
put 'kox4WvKoCRqReCe2Lao60YNZ8rYqRXXjoFi3znb3sxmGT9N6K8/lsdQ4j3I8/GNiqNTY9rIapawbL//8GSSG3EsspJe6fhlZFnx8LNZGv7zG432Mg/SQPHp9UkedbUs9UG5CqKOMixQrpC1YLiRdl6tsGhe6IZhpBD/OUw+5IoDmHfghfgl0Wfpiwdy8ysJHz2dU/KbEiYmTDleWYEr9cYm/bNOy'@;
put 'uXbxl9t27MKtfx6DomKaaczmaAQqapFbrEUuRMZktNTWZNkU6yDREtIlm9t+zndihFRelAMlN4XMS3JU5B8hZBYJakQIWUTqtHMvx9jvSz3sCqJm8T2JKY0eg2TKRY2foLWRpxViKScUQsm+CMEUUul2W/Zzed8jfeSf/X6MLB68Mh66QNp9kc4c7JP9gP2wXzH/pBoBQzBTjXDy2u/SP4Qew+Sm'@;
put 'UB83ufw2lBywMOmJDOUrrSlLMFtSWP3Ru2+GlFTUSf9S5IlmzV2AR556MXnfQtNSyhAwBDNl0Ka04UOe9IMPSPsqyOhhZz10zGGvHevhD62HRzw/+OSI147VmHkvbQgYgpk26OM+cdM2EQweRbkihpJocwNm34O68OFzXmxfz7tShTdlCeaAPj1w269G0w1G35dGm8gTPfvyREyeNkujUek7FEMw'@;
put '9Z1bM7K6iYAhmOrMu4SUDL8myJKkZGW8e9OFZEoc5udvA8vnMZ5G4U1ZgnntZefjgrOHaZXgIzFcpWXluPvhJ/D9uo0KL6u603VDMOvOXJuR1g0EDMFUa54HXBxA2y5URtBIrkiS9VYuiGL2RLUTfZQlmA/e8Rt0PbETs0gZua/JJgRz3cbNuOPBsSgr18syq8kU/dcw/FlR/GhECCf0krrdJgbz'@;
put 'vwAyLxgEFEPA6/dg/ocuLJ/rsZPCFOt+netu59NC6H22XnGYHhaz2L05iklPZVYk8Ck6q0oSzHp5uXj8/ttQvyCfgfkVwfCK4n9EtyX+8pPZ8/D4c68c8bp54lwE/HTR9D47jI49DcF07iyZnhkEqo+AaIXOm+zGyvkeW22g+p80R6YDgYYtwxh2ZYRqC/q4yEUpIlAaweTxWSzPa0eIpwPahM+p'@;
put 'JME8sWM7PHjHjXZyj04JPqY8ZMLrudYbEILZ55wwOvQwBLPWwTcnNAikAAFDMFMAagqbrIjDDDAOk7IMGsVhyjqc+k9KFq2kFIWim5IEU0eB9Vj85f/9dRzWrN+k6HKqe932Z0dxxnkhtGEMUDhoXOR1bwWYEeuGgCGY6s3ogEuCaHMy+61RHKYk+sybBHzzmbqJPkoSzBuvuQzDB52hlcC6ib9U'@;
put '70dNemwIpprzZnptEDgaAoZgHg0Z577e5Ywwegyni1wjPUxJ9Fm1MIpZb6ib6KMcwfRQVfmvf7gJndq3ZVk5lvLQZBP3uOhfPvr0BE1GVDeGYRPMn8rds9tYMOvGlJtRao6AIZjqTfBx7cMYfFmElbP0icOURJ+ddGZ+8JSfxR/UjMNUjmAW1q9nJ/jk5eZol+Dz3CsT8d7Umep9u+twjyX+p+95'@;
put 'EbTtKqUIjYu8Di8FM3RNEDAEU72JzM5jXfJrA8gpYF1yTeIwJdGnvJgVfcZnoPQA40sV3JQjmCd1bI8H77zRJpc6JfgEgyHc99hTWLZyjYLLqO522ZYpGh7GCb1Zi9zIFNXdhWBGrg0CQjDnvOPG94tNFrkqk0oVTAy5OohmbSm1XvG/Kl0/ej9ptJTQuY+eZ0WfdWpW9FGOYOqY4OOm23/rjp24'@;
put '7U9jsL+o+OgLzrzjOAR8GVF0HRhGtzNJMMuNBdNxE2Q6ZBCIEwE3XZOzJ3qwbikJZlhN12ScQ9bicNEjPvmMKKywpVVFn5lvuLBqgZqZ5MoRzBuuvBgjzxqkVQUfIZiLli7D/Y89o1VddS1+taoYhMcfRaeeYfQ517jIq4DKvG0QUAMBcsqZr3qx8TsPrIghmGpMGnB89zBOv4C62Jplki+ZGcWX'@;
put 'H6iZ6KMcwdSxgo+XAusTJ0/Fi29Qk8BsSiHgZlB5i44WBl7KilKKBmIrBbjprEEglQiQT4aZOzp9At2SGzy84TcEM5VwJ7PtwuYRnHVVCF41uVilUHj9bmxYbmHahMxK33f6i0oRzLycbIy5/1Y0KmyACOUItNlcbjz61D/x2ZeLtRlSnRmIK4rCJhaGXhWEP4eB2BYDgMxmEDAIKImAy+NCyd4o'@;
put 'Ba79OLBbyKUhmKpMpCRcjvhFAPUK+TusSaKPm+tx306WjHwyQ8mqUkoRzLYtm+ORu2+mFIHcWepzIS8pLYMIrK/buEWV77Lp52EIZDGD8czLgmjc0s2YLX1Klx42RPPQIFAnEJAEn62rgRl0kZeXqJm5WycmqpJBCicYdgUTfTryTd7o68AQmOODQAB4/wk/ivaptx6VIpin9+yGu377CwJOxDXZ'@;
put 'JEts/aYtuOPBsSgtK9dkVHVrGL5MCz2GRnDSGSbRp27NvBmtbgiIuPXS2cDiaR6qQqh3QddtPuIdT8/hQXTpR36pUaKPWDE/et6DbWvVS/RRimBe+pPhuPLi87RK8PEw/nLO/MV4aNwL8X6XzPEOQUDiMFt3ttDvYgZvGQOmQ2bFdMMgED8C4iKf9ZoH65eZBJ/40Uv/Jzr0CKPvT/VL9Jn5OjPJ'@;
put 'FxqCmdIV9rvrRmFI/75alYj0eLx4/b2P8PJb76cUO9N46hAQ10y9BhYGM8C8XqGLmac6OGdSh5dp2SDgRASEXBbtAab904v9eyjYbeIvnThNx+xT41YRDL0yDK9XDxe5DFZqki+eHsXCKeplLyljwRQpn7/e9Vuc0KGdViUiwQSfvz39ImZ/seiYXxzzprMR8GVY1MKMoOsAI7ju7JkyvTMIVI6A'@;
put 'jxfyZZ8DC6bSPV5u3OOVo+TsV7Pzo/gxE32y85mexft8HW71JWxj9WILM17LcDb4lfROGYKZn5eLscwgb1C/QKsMcom7/MNfn8CaDSw6ajZlEXDx16xxS1oxR1EmQxQljKtc2bk0Ha+DCDCZwmKEy7SXvdixnu5xy2SPq7gK3O4oho8OoFEr9p6/wToQTEk827HBYk3yTOXGowzBbN3iODx69+9o'@;
put '+vZqk0EuCT5bd+zCrX/8G4pKSlX8Pps+H4aAP9tCn7ND6NDDbcpGHoaLeWgQcDoCYiVasySKOW97ESgz1kunz9ex+tf/oiDancLikeGIcoSssnFJkk8RpbMmM5M8oJhlXRmC2bt7F9x98/UIBilorckmcktffbsC9zwyXhvSrMnU1GgYYsVs0pqSRZeH4MvgD5zRxKwRjuZDBoFaRcDNuOkwxdVf'@;
put '8WLrGje/t8Z6Wav4J/lk3QeHcMogWi+pla2DBVOkisIh0cIUbVa1apIrQzBHDhuIG666RKsMcjcJ5kfTP8P4Ca8n+StmmksXAiJZdOqQCE6mVIapTZ6uWTDnNQhUHwE79nIukyg+8iFYbshl9ZFz5pHtu1WUjHRZ+tQkFyvmlBc8vAFSK5NcGYJ5/agLcd6IwVoRTJEoeu6ViXhv6kxnflNNr2qA'@;
put 'QBT5hYzFvCKEgoZGeL0GAJqPGARqDQG3102rkIXpL/uwb4e4xg3BrDXwU3Sixi0PZpL79Mok//RVMNnHlyLUUtOsMgTznpuvQ+9TT9FKZD1CF+pD457Dgq+XpWZ2TatpQcDWxTw5gv4XhCtcNDr4adKCpDmpQSCFCJBLCp2c/ZYX67/xsAqXIZcpRLvWms6tz0Sfa8qRnVshNKXDz69IFc2fEsXX'@;
put '09WSKlKCYEpijyT4tG/TUiuJIikRKRV8Nm7ZVmtfPnOi2kHAli0aEkbXfi6T8FM7kJuzGATiQkASe5bMAr76xFTtiQs4hx/s9Vn48bVBFDQlwdSkJrkQzGVzLcx5Ry2pIiUIZv16+Xjsvt+jQUE9bSSKJIN809btuP2BMSguKXP4V9Z0ryYIZLNG+ek/C6JVJ7mARWrShPmMQcAgkAIEhFyu+9bC'@;
put '3Ld9KC02WeMpgDh9TZJUDtWsJrnX78b65VF8MsEQzKQvrNbNKVF07y3wMilGqqbosIlw/JLlK3H3w09qMyYd5iWpY2BWeUFDCwMuCaGwmQfhoCGZScXXNGYQqAECQi63r4tg1kRm5e4St7hxjdcARkd/pO/IIDr0Zhc1qUnu8bqwa4tFqSLRwlRnvSphwTy1S2fcd8sNCIepJaHJJgk+02bNxdjn'@;
put '/6XJiMwwKkNApIsatrDQ/8IQ8iXpJ2QU2CvDybxmEKgNBLx+D/ZstTDrDS/2bhODRW2c1ZyjthE4ZVAI3QfrI1UkWeTFey28R6miYJk6UkVKEMxhA07DzdddqVcGOWuQ/+vt9/Hqux/V9nfPnK+WEZDqEo1bR9DvggjyCt3GklnL+JvTGQQEgRi5/OwtD3ZvFnKpjiXIzGB8CBzfPYTTz+fdgyZS'@;
put 'RS5qtQbKK8TWi/epE9KhBMH8+U9H4IoLf6IVwXTRRT72uVcw/fMv4/vmmKOVRMAuJdkqgr4kmQWNXIgEjSVTyYk0nVYSAdstznJ7c5gxvne7sVwqOYlxdLpZ+zDOvCwCj0cTqSK5F6LqzPvP+LF7i7FgxrEUqj70N6N/jh8P7q8VwQyFwvjT488wDnNV1QCYI7RAQEhmg+Oi6H9RGPWbMDzIkEwt'@;
put '5tUMwsEI8MIs5HLjCgvzJnkZc2m0Lh08W0nrWoPGFoaOLkdGFudbkzAIDzVbP37Rg00rDcFM2kKRhu5lichep3bVSgOzqLgEdz40lpnkO5KKlWnM6QjQXU5LZo/hFpq1ZbUficnU5AfQ6cib/tUtBMSt6GHs2spFUSya4kPJAcrWSN09s2mPQBYVPEZcG0BugVsrqaJP/02x9a/UEVt3vIvcQ1fy'@;
put 'o/f8Dse3ba2NBqb8yG3dvhO3PfA4DhQVa/9lNwP8IQKs9tMwiu7UyWzfBRDBfVO3/IcYmecGgZojINYeqd+8ZIYb384RBQd14tZqPmrzyRgCumphzpsUxTefqSO27niCmZuTjTHUwGzcsFArDczvVq+jBfPv2owp9sU2++ojIHfZJ54W5p8Fb4bJMK8+cuZIg8DRERDNwOK9UXw13Y3vF3thRYzV'@;
put '8uho6fmOzPiQ/wmgWRu6hyr+V36gIrb+9Ywo5n9oCGbSJrNRYX2bYObm5DAhTI/ECJEomjv/Kzw47vmk4WQaSj8CYm1v0awJ2rZqjhlzFlSrQ76MKFqfFEG3MyOsYe6i1cW4zKsFnDnIIPADBFx0h4tLfOv3Liyc5sbOjW56Bqoml16vB5kZfpSUlhtN4h9gqvLTARcH0LaLC9GIpUUUkhDMFV9E'@;
put '8dlbhmAmbV22a9UCD//hJv5w6COy7vX58MG0WRg/4fWk4WQaSj8CebS2//LqS9H1xI544PFn8c1331erU5L8U9jcQrfBEbTsJO5yJgxGTGBmtcAzBxkEiICHVstwuYXl8zx0ibtRVlS9RIiC/Dxcf8WFOOH4tviUih6vT5qKsvKAwVQDBHqfG0LnPvw91URs3cc1vvYbC9NfyVRmdhzvIu92Uif8'@;
put '8dZf6SWyTg3MV96ajNfem6LMQjEdPTYCcgN0Conlnb++Bn6/D6vXbcBD417A9l17jv3Bw97NzLHQqVfEdpln5Rlr5mHQmIcGgUoRsBN5pMrJJuDrT1l+d5WXxQyqtlpKYxILf93lP8MIKpR4mBAk1dXGv/gapsycg2AwVOn5zIvqIKCb2LrX58bWtRY+eCZDmWQ1xxPMAX164HZetMvLy9VZ2VX0'@;
put 'VFzk41jBZyor+ZhNDwTycrN5sboQg/v1sdeqXKwWLlmGR5+eQNdb9WvNu6nb1riVha5nhtGsHbGhIdNYM/VYI2YUyUVArJahsiizxF1Y9pkXxfuEWFaPXEpPenU7GTdeezmyMyvqO2dkZGD5ytWUj3sWe/cfSG5nTWu1jkCnPmGcdq5YMCNauMilXORuVqGaJOUiFSkS4HiCOXLYANxw1aVaaWBK'@;
put '1vDDT/4DXyxeWutfOnPC5CMglpDj27TEPZTTys/LtRO35DVxcn8yex6efmkiQnGWOc3IjuL4U5kA1NdCfn0XPy9M07jNkz97pkXVEHDzQis0cttaF5bMcnPvqbbVMjZWuSEUb8MJHXgXd7BepHxng6EQ7vvbU1ixai3VHfSI+Y+Nua7t23Zl9bQLI3BpUs1HykUe2BXFJJaLDCmiiuB4gjnqgnNw'@;
put 'Gf/KyqpvBXL6FykQDOLuh5/EyjXrnd5V079qIJDh97MQQD9ce9kFR2i1ygXL4sXrnQ8/wUtvvh93AoHEZtZrZOFkksy23SIUjBbpFZMEVI0pMYdoiIC4w70kl/sZdbJirgurFnkRKK2+xTIGiZcepNGXnIezBp0BNnnE99LP7/LY517GjLkLEDBu8hhkSu5bdIxgwCVheDWp5uPmYi0psjD5yQyU'@;
put 'Fashu+V4gvnLqy7GucMGaUUwi0tKcceDjxuRdSV/tv6702K1vImutt6VFAMQkhlmFuMbk6bUOObW66sQZz/xDAvN20fh8Zn4zP+eBfOKtgjwwuojsSwttrBmCTNp57ntijw1cRN6GSt9+QVn85oykHGXzDI/aL2MYZeZmYm3PpjGGPn3UVqmT1hWbHx1ad+oZQRDrwzDx99PHXw/dj3yAOuRj/Mz'@;
put 'HMQQzKSs5VtvuAqDTu+tTQymEI7tO3eTYI7Fnn37k4KRaSS9CDRv2hj33fK/aNKoYaXJaBKPKdaQf7/9Ad7+aHqNOyuSRs07RHBCHwtNGKfpYdC3sWjWGE7zQacjQOuij2s8QJ63aQWwfK4HOze7a6xrGSOXI88aRMslQ1h+QC4FDonDXPj1t3j4qRdNEQynr48q+lef5SKHjQ6wXKSYqas4WIG3'@;
put 'uWS59hmDSQvmvp3VU0lI97Acb8G8/5Yb0JPB2IGAHtIRQjA3bN6G2x8YY+6Q0736k3B+uWh16dwBd914LV0xR5fSknkPMdj8dVoyJ07+uNKLW3W748uwKGdkoSMzzpu2isJtiGZ1oTPHqYDAQYtlIGhh80oXvvvCg+3r44+zPHyoonV5+fnnYCQtl+JqrIxcyvHiPhcDwL2PPmk8TIcDqODj3PoW'@;
put 'hl8TQHZuRcyu8hyTBJMLFx8+68fOTYZgJrwk5aL88P/dhM4d21M2Iphwe05oQKxZK75fa6r4OGEyktAHv89LC3sv/Gb0ZVWuUZl7SfZ5mfGYk6bOSDiJQCyazWjR7HCqhaZto8jIFHc83UFGQzMJM2uaqG0ERCjdy78A9Sw3r3Tju/nuhImljCGLWeJXXTQSwwaeweQgfj8qsVzGxirXnHAkgj+N'@;
put 'eQZLl69K+Dsaa9fsax+B7FxaMK8pR34Djzb1yOXm6KMXvHZiW+0jGv8ZHW3B9FOQXMpEtmrRTJs65EIyFi1dbmcqxj9d5hNOQ0AuXucNPxNXXDiyWmEcMv+lFHKe/PEMWjKn0XWe+I2Tx2ehUXOgffewbdnMLmB8DnOBwhQY1sE15LQ5N/1JLgKSFS4ZsqX7o9hIV/iqhR7s3kKLZVhMNolt9evl'@;
put '4xfUuuzbsxuJJSu6HINcxs7k43XnEbrIP/9ycdzqD7E2zD79CPgzoxhOF3lBE1owOe/KWzAJqdfrxscT3Nj4nTf9AFejB44mmLE65EeLbavG+Bx3iGhgzp63AA+Pf9FxfTMdih+B7KxMJg2cg/N/PKTaiWhCMoOhMGbOnW8nE+zdXxT/iSv5hJtZ53mFFlqdGEGbkyw0aFbxg2SsmpWAZV5KLwK0'@;
put 'xEhGuFSt2rvTwoZvPFi7xI19u6pX3rE6nZfY6F//z6U4sdPxjF2jFmI1yKW0K3GYT00QwfW5DM1K/AawOn01xyQfAY/HwohfhNDguCgJph732r4MDz55xYV1Sw3BTHjFyN3nY/f+Hg3q17O1BRNu0AENCMGc8unneOKfrzqgN6YLiSKQk52F0Zeeb8sUxSOlJSRTJIwWUYz9pTcnY93GLYl25YjP'@;
put '+/xRNG1DsnlSGMd1iCJfrJo0CEWMC/0InMyTWkSA68/jcdNaCQTKLGynjuXapR5sWulBeYn0I3GLZWw0XTt3pFfhXHRq36bSxLvYcZXtJZP8H6+9g/emfIpyQzArg0iJ19zuKM66OojGbcguNXHmSD3yT19zYTUlulTYHG3BbNqoEI/ddyvESmRpInorQeQig/GP195VYX2YPlaBQG5OFq4fddGh'@;
put 'Cj5VHH7E2xLvJURz3aYteHniZHz51TdHvJ+MJzwFsvMYo9neQuvOEVYJiiKnHpOR+J8hm8lA2LRRFQLi/pYqJKJ4sG8H6N7zYMO3buzZVvOM8KOdUxLthvY/DRecPQSNGzaokWEiKyuLcdKT8eb7/eqQVQAACklJREFUH5u65EcDWoHX5bdvyNUBNBOCqYkF08vqVQunulgW1afADPCWsfvgnxJ6'@;
put 'Z24tmzWlBfMWO7Ovuu4NZ47kP73ysA75y29OYjbx1P+8aB4pi4AQTCkROYQXtZqWM5Wbjn0HiuzEn/c/mR1Xacl4gJM7+uwCSh21i6A5s9AbtSTZzHezri3jNY1lMx4ozbHHQoDrSZIRhFTSM40DuyPYtoakcrkbO9Z5bNkhublK9taEBokLzxmK/n16IjPDXyNyKX0SgvnqOx/aig9GCzPZs1S7'@;
put '7Q0eFUCLjjwnq6A5lujEAYkQzK8/BUmmP45Ppe9QRxPMDm1b4S93/da28mhDMEkmnv/Xm3h3yoz0zbo5c9IQSAbBlM54aHkRQfZFS5fh37y4rV63MWl9rKwhqRKUW2DZ7qPmrHjRRMhmfTf7IVpr4krXxKdU2eDNa8lHgHzRS/e3i+tHLJVFrLazbb0bm1eIxJCLLnAhlMknlbGB/KjbSbjkJyNw'@;
put 'PK8ZDLZMyOMlLvIXX3+Xv9GfGgtmDGBF9wMvDaL1yew8Ex51IJhy07ZmCTDztQwlZsTRBPNkBmf/+fZfJ/Rj4bRZcPMKPu6Ff+HjWfOc1jXTnxogkCyCKacWq44QzW07dtmC7J/M/iIpWeZVDotkMzsnioYUb2/GSkGN20RQ0BDwM6Bc4kSNK71KBOveAeSKHlopXbzgybotL4ngwE4Xtq0jqfze'@;
put 'hV3U6Qva1X1TRyoF9IYNCmxtyyH9ToPUFw9TBizRzcRgJoqgcz7f/6IA2nVlMhlvmHUhmGtJMGcYgpn4Iut+8gm4//e/TMqPRuK9SVIL/DF+7JmXMGvewiQ1aJpJJwLJJJixcdjWTIqyL6Q1U0TZv1u9LvZWyvfiKfDz5rheEwvHtWGiEN3pDZqSgNZjcgbzhKK0bobpbhKXk9nqEALkieL2lnhK'@;
put 'qYITCkVQvBfYs9Vtk8rt61gjfIe4xLlIamHz0RPUp0dXnD9iMNq1aZmw1fLwLksW+fP/fgvvT5vNJB89CnwcPr669LjfzwJo300fginfvx0bLXzwdJYS0+hoC2afU7vgDzddX6WAtRJIH+xkhBfmR8b/A/MWLVWp26avR0EgFQRTTiVWIYnN3L13H6ZSLmXKjM+xa8++o/QidS+LKz0730LDFrCz'@;
put '0huyvm+9hlFk5njZR8Y1GcKZOvDT2TJ5oodrMGahDAdIKA+4sG8bbOukuL33bmcZx1LpZGqtlD+EoWO71rb27I9Y4U10aEOh0A8PSei5EMzxL76GqbOMTFFCQDrgw6f/JIjje3F98oZdh1tiqUe+b3sU747LdAC6VXfB0QSzX+9Tcedvrq1x8kTVw6/9IyS27YG/P2eLrdf+2c0Zk41AqghmrJ9i'@;
put 'zSSTw9oNmyjOPhOfz/8qrSVG3R5qbTaIorA566G3tlDYzEJ+IQlnNqtliIWToZtyExUVC6cOv+ixidB5z+tvzN3NKEqGJEVRXkZCua/CKrlroxs7t7hwYAflhMTtHa1dQhmD/rgmDTGc1XjOPP1HqF9Qz/ZspSI23xDMGOLq7/UkmBYJprFgJrw6B/btidt/dU21BawTPmEtNBAMhvDnsc9iCcuQ'@;
put 'mU19BEQH80pW8Rl51qCUrlOpLiJlJpetXE2iOctOBgpwLaV7k8x0qfnboFnUzkovpKhxfkOL9X9JWvwkx5JwIUlDQjjlz2zpReAwy6SQSU4Ps7ojKD0AFO12UTqI8ZMkk/tpnSzex9Km1BlPRcZ3PCA0KqxPUtkLQ/r1QdPGDW3B9Iikp6doMwQzRcCmoVkdCeaebRYmPWEIZsLL6dyhA3DDVZdo'@;
put 'ZcGUyhD3/m0865GvSxgf00D6ERCCOepn59ouu3iE1mvS85jbXMSfly5fSbf5HCz6ZjlDSNJPNGPjEbd5JhOG6jVm0hDJZgNaOAv4OKcea6XnuCuqt5DViGtdEojEWmYsnTH0krinkdGOmZREHJJKWTuSrBUoJZlk4ajivR6SSdDl7aE2pcu2VgbL5fzpsU5WNnLRsTyjV3ebWIpknWzJSOKp7FyH'@;
put 'v2YI5uFoqP1YO4LJ73HRnijeGmNc5AmvzCt44b7kvBEs16VPoLUEjd/76HgmbqxPGB/TQPoRqE2CGRutkAWxaArR/Pa7VbYigdS3Lym103Zjhzlm76FbPTu/wrJZ0ISkk0lD+SxpmZ3PsnzZJJ5ZjOdkb+08T0M8qz9vBE3WAjkk5YEq9hJOYZFIBmmVDLA6TvEBNy2TJJI7hUhWWClLi2iZtH9S'@;
put 'BXXnbVLiUbxX/Xv3QDM+lq02iGUMCUMwY0iov9eNYNozwq/thLsNwUx4dV5+/tn4Of90IZhyMSgpLcVdf3mCpQE3J4yPaSD9CKSDYMZGHSOaYQawr1q7HjPmzMcXi5di526m9zp8q7B0WsirD+QyhrOAiUOSPJRNd3tWLvd5kuQkuoq0wNnedYnrFI97RXyn7Wy3/3H4QBPpnhBHfl4C+2WuxRIp'@;
put 'Gdzyori2g4EwiSRd3NSYLGECTvFexknSzX1gF5/TvV28HwiVixtcWnH25vV60LFtawxifGUvJu80LGxgy9PVJrGMIWQIZgwJ9fdaEkxOy4R7DMFMeHVeP+pCnDtsoDZZ5IZgJrwkHNdAOgnm4WCIRVPI19YdO/ElFQpmfbEQq9dvpls0dbFqh58/WY/dZJMZWYzrbGAhpwB2QlEuqw/JX1ZexXte'@;
put '/rb6M4SAMsbTdv/y7CSf4nIXd7vtdudLkmh0iIMeepCsntawnQp+KIZGEsWKJzZpFPIozJH/S1ejtEJGKA4dDFh2HKSQyDJaHktJJEuYfFMkfxQzL9vvRlkp3d+2/KM0qtZWkJ+HHl07YwCr73Tu0A45Odl2Vng6SwMbgqnWGjpWb3UkmPLdePm+7GMN2zHvOTqL/LZfXo1+dJMkW4YiXegbgpku'@;
put '5FN3XqcQzNgIRdpI6puXlJRiBfUzP/tyERZ/s0IJq2ZsDEfbe9wWvJkuZqxbdpxnZh5Y6lIsnizvl2sxxlNc7i5kZFjw8zi3Nwo3S/b6xBIqBE6EPIWQygliXIxsTnhpbLMpaex5bB978/B97PPc07Z46B2bOMozeUnalsdCfvmogjQKcZQ/un2ZQBMKuEgiKVROklhezOxtksgyurbLikgoiyus'@;
put 'k4EyN49hW9Z/ziPNqrpl+P2suNMSfXt2Q8+uJ+I4usE9nBv5nU9FVni8OBmCGS9izj1eN4JpyxTtoEzR340FM+FVd9sNJJh9DMFMGEjTQMoQcBrBjA005j6XC/b2nbuxdMUqzF3wFZYzuexAEZmLphsdwjap9Aqx9FnwMdnSz8fezCh8/E32ZXDPMr4iJu/xR1k5ifGs3FeQUVZSYla820twyAxt'@;
put 'PkqSam+yO8jvLBI9SyyGfC4Z8lZIpH1IGENCHGlN5D4UdiMc4D7oIpEkiWR4bDggRNFCJFiRnS1xkHK8fPZQ4/JQw02sza2aH4ceXTrbLvC2rVsgmzW/xcKeDjf4sSA2BPNY6Kj1npYEc7s6MkX/DwAA///r8VITAABAAElEQVTsXQd8FNX2/rZl0xMSSkLovXcBBUSKgNg7dkXF8tRn74o+n/7V'@;
put 'J4oFsIMdO4KCFEFA6b33HkpIAklI22z5nzNhNcQkpGyZuXvmR5jd2Zk7937nzsw3p5q6DrrUA50uj919C/r17o6ioiKd9rBq3TKZTMjNy8NTr4zDnv2pVTtY9tYlAlGREbjhigtxybCByM/P12UfLRYLbDYbHHQdHTpyFBu2bMfS1euxbdc+ZGXn6LLPeuqUx/P3LZKvYVkqh4DNakXD+kno2rEN'@;
put 'undqh6YNUxAXGwO32w2n04mSuFauxcDsZbfbMX7SZMxeuASFhY7AnFTO4hcEzrrUgVY9TPA4Xfj7KvbLqQLSqMlswvEjbvz0TkRAzlfTk5iEYNYUwsofLwSz8lgZZU8jEMySWFrpoc9/TDaPpKVj07adWLl+M7Zs3430Y8d1+9AvOQb5rF8EIiPC0aRhfXTt0Aad27VGo5QkxMbEaPOKSSWTS70v'@;
put 'YWFheOvDz/H74hUodKih3NA75v7q39lXFaJZJyKYLrc6BPMwEcxxQjBrPGdEg1ljCKUBPyNgNIJZEg6vZtPlciE94xh2k1Z93aZt2Eikc//Bw8gvKCy5u3wWBP6BgNlsRp3EWmjVtDE6t2+NNi2aoH69OoiIiADPK/4zAqksOTDW9o/94DMsWLJKexEr+Zt8NhYCqhFMs8WEQzs9mDkx3BCCEA1m'@;
put 'AMUkGswAgh2gUxmZYJaEiIkCP1h5yc8vQOrhNGzfvZfM6TvIlL4XR9IzyKzpKnmIfA5RBGKjozTTd8e2LdG2RVM0bZSChFrx4BcWJpRGd2kqJpifE8FcKQTT4HN84PWFaNiaBuH2KKHBtFhN2L0O+P1ruyEko2uC+fg9I9G3ZzfD37C8M0EIphcJddaqEMzSEuGHLBMG1j5l5+QQ4TyKrTt3Y8uO'@;
put 'Pdi5dz+Oph9DEZk8ZVEfAZ7jKUl10apZY7Rv3QLNGqeQ1jIBEeHhf/lTGk1LWZHUhGBWhI5xfmMf33NvdCClFfVZIYK5YzWw8DshmDWeiQ/dcQMG9OmlHMF8+tVx2L1PgnxqPEF00ICqBLMktKzdZLLp1VDlnMjFwSNp2LF7P5FOIpx79iMtI1NM6iVBM/Bn1lAmk5mbCWXblqyhbKCZwSPJ7M0v'@;
put 'yayhZE2lqosQTDUkazYRwbzFgaSmFN5Drr8qBPlYw8xYPRdYPTvMEELStQbzRorOHXHJeRTJp44vWKHDgefGTNA0QYaYIdLJChEIBYJZGoCShJO1BCeIcGZQgNCeAweJbB7Ajj37cODgERyjCHWViUhpXIz4nSO9E2vFUTBOMmkmG6Bl00ZaYE5iQi1NQ8lj4uAc/guVRQimGpI2W9wYdqsTtRu4'@;
put 'QVxTCYJps1uwdAawYX6xO5PeJaVrgnndZcNx3WUXqEUwKe3Fc68LwdT7hVHZ/oUiwSyNDWu1WLvJ0em8sIaL0x8dPpqB/amHsWvfAeyjNWs9s7JPiGm9NIAB+m61WlArNlbTTnKkd/MmDdGI0ghxkA6nD2L58QsDk8lQfjEQghmgCenn01htHgy/vRDxSSYimGr4YIaFWzB3sgm7Vhffa/0MYY2b'@;
put '1zXBHHHxMNx45UVKEUwOlPjvm+9jLUXrymJ8BIRgli3DklpO3oOtEGxaT888rkWoc5T6vtRDREIzadsx5FFgkV7zIpY9Qv1uZRyjoyJRKy4WKcl10TC5Hho1SKZ1EmonxFPaoGhwKh5emEjyn0o+lDWVjBDMmiKoj+PDI9wYQgSzVh2zMj6YNjKRz/nCjL0bhGDWeJYN6tsTj9w9UrcJrKszQCfl'@;
put '43pl3EdYsXZTdQ6XY3SGgBDMyguEtZys7WRNGa9ZU8YR68ezs8nEnqVFrh+k6PVDaRk4cOgwjmXlaMQzlLVpFaHLGsmoyEjEk/axXp0ELT0Qpwhi/8m6tRO07fw7486LkMmK0Pz7N56f/5swCYtXrBVt+9+wGO5TZCyZyG8rRHS8WRkNJkeRz/7EigPbiq9pvQtF1xrMc87qgcfvuU0pgumBCWPe'@;
put 'nYQ/l6/R+9yQ/lUCASGYlQCpgl2YaHq1nbzmPyaeeVTxKic3D8eJZLJ/J6dJOkLazqOUrzPzeJZmgj+Rl48CcjlRlYCaCRu7PQycvDyOkpXXio9BnYQEjUzWq5NI60QkkJYymoJyOKLba+JmDaaXTIpWuILJV85PrMEc894n+HPZGklTVA5GRtgcm1hMMMMjyUROHVYhyMdMlXx+/ciKw3uEYNZ4'@;
put 'Dp7ZvTOevn8UHBQYo8piogfo2A+oSsSi5aoMKaTHIQTTP+Jnoukln17iyWdi4sTm9gJKAp9P66ycE5pfJ6+PZ2VrWk/2/8wmczyb5HM1Ekr7ExFl4soWhGCag1mbGGazajlHw4k88vyJJi0jm7TjYqKIRMaRaTuGtI+x2nf2jeR9IohkhlMJQ68WmIkjj4fXPB4hkr6bh2Ii9x2WwWwpIcmNoSML'@;
put 'YQsneqkCu2SWTOmWfnk/DBkHhWDWeG717NIBzz54pzJpihgQC5lf3vn4S8yav7jG+EgDwUdACGZwZFCagHrJqJdwMeniYCPO2lBU5NQIJn9mX08Hlf/LLyjQCCoTVS4HWEBklbfzvk4isbzmsAD2mebPbs8/SxxyBLaNyKJ2bpOZ/Bpt8G5j8sg1re20LSLcjgj+TNtY08i/8TZtX/rdTv6QrH3k'@;
put 'MXmXkuPwEkghkV50/LsWgulffAPVer0mLgy+wUnXlhoBPmTQoPuRBz+PD0NWuhDMGs+jTu1a4b+P3qOUCYwJ5qTJU/DDjN9qjI80EHwEhGAGXwYV9cBL2pgEekko7+/dXvJzSQLn/exdl3cObpMX77rkZz7We7xXa1p6XXIfrSH5L+gICMEMugh80oGGrV045xonOB+mEgpMMo8X5rkwbUI4co//'@;
put '/TLqE7D81IiufTA50e8rT92v3by9N2o/4RCwZi0WKyb/NB1f/kjJrGQxPAJMMDlf68XDBirlK2x4wcgABIFqIlBMMKUWeTXh081hLbq60OcyKgjALiS66VX1O8L+l7nZRDDHhaMgTwhm9ZE8eWRjSq3x+uiHNb8jVQgmm8J+mjkPH375Q43xkQaCjwD7zo0ccQnOG9iP/AILgt8h6YEgIAjUCAFO'@;
put '4fQ2uTHN+3OZ5j5Ro8bk4KAh0LZPEXqdR+6X5PKiBMG0mJCV4cbP4+wocgjBrPHESq5XG2Ofe0TzZVKFYLKJfM6CxXjroy9rjI80EHwEoqMicOcNV2FQv95CMIMvDumBIFBjBNh3dsInX2MW3acLKThMFmMi0PXcInTpT0FwFNinAsHkFEUZB4Fp5IPp8RS75uhdMro2kXNSYNZgciSl13dJ74Ce'@;
put 'rn9MMBctW42Xx318ul3ldwMgwATzjuuvxOCzzxSCaQB5SRcFgdMhwATzwy++xy+/LdSCxE63v/yuTwTOutiBlj05MkYNDabVZkbqTjd+/dB+is+3PtEv7pWuCSZXnHjjuYeplFmCMoE+HFywZsMWKhf57l8BAHqeINK3ihEQglkxPvKrIGA0BMIp0n/S11M0VyZObyWLMRE4Z0QhGndkgqmGBpPr'@;
put 'kO9a78K8L8INIxBdE0zO+zb2+Ueo3Fk9LeebYVCtoKNMMLfv2ovHX3pTS4dSwa7ykwEQEBO5AYQkXRQEqoBAREQEvvjhZ3z/yxwtrVUVDpVddYKAiYziw251oG4TMo5ThjEVTORch3zTYg8WTSku86oTqCvshq4JJnsZjP3Po2jepBHloiuqcCBG+ZHTmaRSObzHXxpLiaDzjNJt6Wc5CMRSFZV7'@;
put 'Rl6Dvj27aQnAy9lNNgsCgoBBEGCCOXnKdHwzbZYQTIPIrHQ3w+xEMG8vQHxddcpEMsFcTdkNV86ylR6ubr/rmmAyai89fi86t2+jTDUfJphHMzLx1CvvIC09U7cTQzpWOQRioiM1H0wJ8qkcXrKXIKB3BESDqXcJnb5/UXFEMKkOeVQc5b/lfLSnP0T3ezDBXDwV2PinEEyfCeup+25D317dlQqg'@;
put '4GoiTDD37E/1GU7SUHAQ4DRFt15zKYYN6KvUHA0OmnJWQSD4CLAP5kTywZxK6eTEBzP48qhOD5QrE0kgMMGc+6UJu9ZaqwNJUI7RvQbz37ddp+UYzM/PDwpA/jgpl5574c33sX7zdn80L20GEIFIqhF93aXDcfkFQyTRegBxl1MJAv5CwJumaOb8RVr5UH+dR9r1HwIprVwYQFV8LGY1tJeMFKcp'@;
put 'mjXJgtTtQjB9NnNuufpiXH3xeWo9vKlu8evvfYKFS1f5DCdpKDgIcF3pi4acg1tGXCoazOCIQM4qCPgUAYvFglfHT8SSleskENOnyAausZbdXDiLq/gokgMTHJDipjrk74ch86Ax6pCztHWvwbxs+CCMojyDKmkwORcm51mbOut3loEsBkbARrLs07MrHr7zJmUC0QwsDum6IFAjBDjLR0FhIZ4f'@;
put '8y627txD/IRCkGUxHAJdBjjQZRDFkitSxcdEZSId+S5MHW+cOuQ8aXRPMAf26YlH/zVSKYLJ5SK/+3k2PvmWPHZlMTQCFnogtWnZFM8+cAfsVGJOlYpThhaKdF4QqCYCfG9OPXxEI5iH0tKr2YocFmwE+lxciBY9qZyiIknWzVQmMueYm+qQ2+EoMEaZSJ4DuieYZ3Ruj9EP3aWUdog1mPMXLceY'@;
put '9z4N9nUo568hAkwo69VJxHM0RxulJCs1T2sIjRwuCBgOAfa/XLpqHd744HNk55wwXP+lw4QA3ZMH3+hASiv6TGZlFSLI2f/yaKobv5AG06PZy40had0TzJZNG+HVpx/QSiOpoh2Saj7GuDgq28sYiiT/1y3XoP+ZPcQPs7KgyX6CgA4R4Ajyz7//GT9Mn4P8gkId9lC6dDoEbGFunHebA/FJ6qQo'@;
put 'soaZsW+TG3M+M04VH5aT7glmct3aeIOq+UTQha9KPXLOhbn3wEGtmo/cxE53u9D/72FhNgzpfxbuvulqSbauf3FJDwWBMhHg+zL7XL7wxntYv2WHMuWJyxyswhuj492UZL0QkdFEMGmcKmgwi6v4uKmKj91QktM9wVSxHrkkWzfUNXLazrI8mzSoj/88cjfiYmPkwXRaxGQHQUB/CISRD/XWnbvx'@;
put '0lsfIj3zuP46KD2qFAJ1G7lw7o1OWG1qmMd50Ewwl88A1v5unCTr3G/dE0x2un599ENo1rihUv5tHKk4+rUJ2EZ1yWUxPgJsJueSkWf3FjO58aUpIwhFBMQ8robUm3Z2ot/lbqrg41ZCe8lSYYI5bzKwc7UQTJ/PUtYM9ejcQSnzI/keY8y7n2DRijU+x0saDDwCVsqd17t7Jzxy181aJLkq/sKB'@;
put 'R1LOKAgEHgHOfclBPc+9/i527tkv2SACLwKfnVG1FEUMDEeRz/zYgkO7jJNknfutew0md/KBUddj6Dl9lUpVxJHkH335PX6a+TsPURYFEIgn8/hjlFKrc/vWSr0MKSAaGYIgUCECXH/859nztRKRuXnqVI2rcNCK/tj3CkpR1NUMjyIpisgDC04nJVkfH4asdOMkWefpZQiCeeMVF+Lay85XjmBO'@;
put '/20B3v30W0Uv89AbFidd70tJ1x8YdYMWkCZazNCbAzJi4yHAWT2YVD5P2svt5LLkpjQ3shgTAbPJg3NHOpDUhGRIOfJVkKSZkqznZrsx9R07CvONkwOTZ5AhCOawAX1w/+03KEUw+aa2ct0m/IciFmVRBwEO8vn3rdfizB5dJGWROmKVkSiMAGsvv5n6Kyb/9Cvy8gsUHqn6Q4uMdmMopSiKSVAn'@;
put 'RRHnwEw74MH0CXYizBwXb5zFEARTxWTrTDD37E+VVEXGuVYq1VNvZZ8n770NMdFRElFeKdRkJ0EgOAhw5Piefal46e0PqYJPWnA6IWf1GQKJ9V0YeksRrGE+azLoDdnsFuxc68bvXxkrRREDZwiC2bRRCl575kGwI7ZKZses7Bw88fLbOHTkaNAnsXTAdwiE28Nw0ZBzcPPVl4gvpu9glZYEAZ8i'@;
put 'wC/5bA7nYMulq9ajyOn0afvSWOARaNqJIsivUC+CfM1cN1bMFILplxmVEB+Lsc8/ivi4WKU0Qi6XWzORr9u8zS+4SaPBQyAuJhr3UHWffr27K+XaETxE5cyCgG8R4LREP/wyG1/8OF1M476FNmitdR1UhM4DyPfS5VLC/5KB5BRFC74zYdtyY0WQc98NocG0Wi2UC/Nh5XJhmkkj++6n32DG3D9Y'@;
put 'FrIohAAnX29Yvx4evfsWbd4WUt5TWQQBQUAfCLDf5bLV6zGWao5nHs/SR6ekFzVGoP8IB5p0oGZIeaNCgA8DYuEURZOsOLjDWBHk3HdDEEzu6OgH70Cvbp2VMjlyEvmfZs7Fh1/+yEOURTEE2B+zXavmeOjOG1EnMQEOh0OxEcpwBAHjIWC327F73wG8Om4i9h08rJTblfGk4bseW60erURkQjIR'@;
put 'G2KXKhBMTlFU5OAURXZkZxorgpwlaxiCeecNV+KS8wYpZW5kH6BV6zdr6TF8d5lJS3pCgLXv3Tq0xX0UWc4uHkVFRXrqnvRFEAgpBJhcss/7axMmaVXUuPa4LGogEJdIAT63FSE8kogNDUkFgskJ1rPTPZhGBLPIYawIcp5VhiGYHDRx980jlCKYbEZNPXQEj744VsvDpsZlLqMojQDnx+zZtYPm'@;
put 'k8mR5UIySyMk3wUB/yPA5DItPUMzi6/fskMpf37/o6f/MzRs7UL/a12wUAJMFcglI24NMyN1u5uq+ITrXwBl9NAwBJMf0KMfvEs5MyMn+H361XcoZdHBMsQjm1RBgEkml5K8+6arEU11y50SsaqKaGUcBkCAyeVBSkP01kdfYuO2nUIuDSCzqnax09lF6DZEvQCfjYs8WPyTMfMuGYZgNk5Jxmuj'@;
put 'HwI/qFVKVQSTmdJkTMIfy1ZX9XqS/Q2GAJvLu3dsh/tuuw5cVlJ8Mg0mQOmuIRHgaPFde/fjzQ+/0OqMi1nckGI8bafPvqoQzTqZKIJcHQ0mR5D/SSEam5fYTjt+Pe5gGIIZEx2ppSriYAkXpSBQZeHcnt9Mm4nPv/9FlSHJOCpAgOV9Vo/OuIVyZNarkygkswKs5CdBoCYIsAsSay5Xk5/7BMrW'@;
put 'cYDckZRSTtQEHMWOtdrcOI8q+NRSKMCHRcRVfGZOtFAEufFSFHH/DUMw+Wbx8pP/Roc2LZV6KHOqomWr1uHFtz5kecgSAgiwJrND6xa49ZpL0bxJI20+y4MvBAQvQwwYAvwix0GUs+Yvwmff/aylIuJniCxqIlCrrhtDbimEPYpkrIgDJk9Xx8kI8hwDRpDzTDMMweTO3k+mxaED+ipV45lvevxm'@;
put '/ZgE+rCIQ2bhh1+TBvVx/eXnU/qtTppPplsiWkNG/jJQ/yFgs9lQSCnBfp49H19NmYGCQkkP5j+09dFyk44unH2li9ITqWMe5/yXmUc9+GWcnZ4Pxnw5MhTBvHz4YNx+/RVKRZLz5ZlfUIhnKNBn594D+rhapRcBQyAhPg6XDhuA88/tjzB6MEqEecCglxMpiAD7W3Iwz+SfZuDP5WukQo+CMi5r'@;
put 'SN2HOdCpH+B2qkMwuQb57vUuzP3CmBHkLCdDEcwzOrfHcw/frZSJXBMCabPe+fhLzFm4tKxrR7YpjkBkRDj5ZXbBiIuHoX5SXTGZKy5vGZ7vEfCaxNnf8vMffsGOPfuV8tX3PWLqtMi6vcE3FyKlOVnH3R5VLORaichVczxYNduYEeQ8wwxFMBsk18WYZx/SHLdV8lnjij5sznnv8+/UuepDcSRU'@;
put 'PiIyGrBHeHAsrWpVF7jqT7MmDXHVhUPQm0zmvEgqo1CcRDLmqiLAgTw5J3K1e+jPcxbgWFZ2VZtATIIbucdNcLuNaYqs8oAVOiAixo3htxciKt5MJnJ1CCZrMOd+YSItpjEDfHiKGYpghtvDMPY/jyIlqZ5SD1/2x9uwZTue/d94KqEqlSWMeu8LI2LZY0gREhsAcz+zIje7aiSTx82J2Af17YlL'@;
put 'hg2kKPPaWmlUlV6mjCpb6bf+EGCtJf9t3LpTM4nzPdRR5KxyR9v3caLbQDc2Lzdh7TwrigqFZFYZxCAeUL+FCwOvddJcUIdccoCP00n+l+/acbyKyoogiuIfpzYUweTeP/fQXVQVpaNSNck50CfzeBae+L+3cORoxj+EJBv0j4DZ7EG9JnSju8EJm82CPRtclL+MyntV42FlpYdmk4b1cRn5HPfu'@;
put '1lHT2EvOTP3PAelhYBDg+yVrLdMzMjF97h+YMXchjmefqNbJG7Zxos9lbkREe5B/woM5E8OQfpie7h4hmdUCNAgHdepPCdbPVSvB+t8lIsOoRGTVFRVBEEOZpzQcwbzl6otx9cXnKRfo4yLfkVfHf4xlqzeUKSjZqG8EwiLc6HVBEVp1N8Pp4DytFmxe5sGK6bZqm93YN5P9ji85byBaNWtC7biV'@;
put '0tzrW6LSOz0iEBZGD1yqgrVk5VpM+XUe+Vruo2uienmR4+q4cc7VDsTVI1MeGY6sZJJcORvY8IcVzmq8GOoRL9X7xNadQdc50LAdjdSljgaTS0Tu2+TGnM+MG+DDc89wBLP/mT3w+D23KpWqiAXBpp5vplLCdXJQl8VgCJDvZWKyB+fe5IA9kipJ0MsCmzjcHnJ9WACsmmOj79XTiPANNCE+FoP7'@;
put '9cYwStHFQUAcaa5SsQGDSVu6GwQEOPUQL9t27sGUmfOwYu3GGkWIs580V35JbmEq9tuj3IlmqxkZB9zk9xZWLfeWIMAS8qeMiPJg6KgCxNZSy/+SK/gYPcCHJ6fhCGbTRil47ZkHNUKmkm8a+2FyBOTzb7wn1SYMdtu02jxo09uFnsM9J7WXxQNgTulykVznmLDxz5qV+mKCmlS3Ns4lojmQfDTZ'@;
put 'P1OIpsEminS3yghwACS/fO/Zn4qZvy/C74uWIyuneuZw78nZV6/XRQ607EYXKOdN9Cbm1r56MO/LMKTuNFPJweq9FHrPI2v/I5DczIVB16vlf8mo2UiDOecLM/ZuMG6AD4/DcAQzItyOt//7OOrWTlRKi8MEIi09A0++/DbSM4+zbGQxCAL2SA/6XlGExm1NpxJM7j+5z7C5bdVvZDJfXPObhZnm'@;
put 'SXK9OhQI1EsjmnwdsOlc8mcaZLJINyuFAGss+aV7/8HD+G3hEsz7cznSjx2v8cs32RfQdYgLHfuQTZzs4n+Ry5O94sjdNfM8WPc75aQVM3mlZBXMnTqdTf6XQ9Tyv2TFRFGRGz9PsCM73RJMeGt8bsMRTB7x8w/fhTO6qBXow+MSP0xGwWiLh1KckJnmZgeiEujxRX5AJRdNB8Ik00Ekc45vSCa3'@;
put 'z0SzLtUyH3DWGejfuzsaplARXlqYaKqk2dcGJf+FBAL8ks3EkufvvtRDRCqX4ffFK7QXbp/MaWq30wAnugwgbmly/YNcMsgWmxkHd3ow/ysbCvKMG1wRChOG58TgG4rQoDXdcxXKf8n1xzMPE8EcH05KNGNr0Q1JMG+68kJcc+n5ygX6sDno22mz8Ol300Lh/qDEGE0UPZ7cnMw0lCbDxC+bp/JL'@;
put 'bYx/k0yQZsSKdQss1fbJLAu0WnGx6EWZFdg/uVWzRoiKitKStYufZlloyTa9IcCaSiaW/HK0ffc+zP1jKRZTEM+xrBzfdZXISEfSdnUeaILFSuSynGxwJirPl5flxsyJrD3iK9fYD3jfAai/liJjPTjvtgIl819uX+XBgm+Mm2DdO1sMSTDP6tEZT99/h1KpilggfKNdv3k7Rr8m+TC9E1Tva4vV'@;
put 'jRZdPTjrUhdcZNYob/GSTDf7ZM4in8wlpKkpf/fymqlwu53yxLZp3gRnk0azW8e2mp8mv+Vzwnapc14hdPJjgBFgbaXXvzIrOwfrNm/TzOBrN22tUfBOWcMwUxBex/5OdDqH7rEWijin666M98DiQ+lCdVMqzTmfW5G2x1LtDBBl9UO2+RaBhq1d6H+ti/J1qFMekhHiAJ9FP5mwaVHNXap8i3jV'@;
put 'WzMkwUyhSNoxox9COOVC84nppOq4+e2IbHJgf+Llt6ie7lG/nUMa9h0C1jA3OvR1o/sQD/lsnT5diuZfU2imFEaUDmU+JXX2Q44zflFJIK1m907t0Lt7J7Rp0RRxsTHatSJk03eyl5aqjgAH7Hi1lexfuWTlOixasQZ7ySRe3XRDFfXCaiWfy3OL0LY36SLNREQq8VLHOQgXfGulXLZmuA1uoqwI'@;
put 'G6P/1p2KWnTq71Gq/jgrzPkZMeNDG9L2Gtv/kueXIQmm1WrB66MfRrPGDdULbqDZNfaDzzB/8UqjX/8h0X+b3Y0ug1zodDb5P1aCYDIoZrNJ863ZtdaDNXMpJUqWpt/0C16sJapfrzbl0+ygEc4WTRsimkzootn0C9zSaBkIMKnkechz7iglR2dt5eIVa7GeKu+cyM0v4wjfbLJTbtqe5zvRvAsH'@;
put 'i/8zoKe8s7Af5uKpZmxfaSGrhP+uzfLOL9tPjwAXthhyi4OKW7D/ZQUa6dM3pas9+NnALho/jbejUAEfYEMSTJ4RD4y6HkP691EvHybdiGfO+wPjJn2tq4kvnSkbAVs4lYccWoR2Z5oqTTC5JQ7S8dDfIQooWDXbivRU/7+t2mxWNEiuh64d2qAHJXBv3rgBYmNiNPM5+2uKz2bZMpatVUOAzd9e'@;
put 'v0p2zcik6O+tO/dqfpVMKtMzjlFMRrlG6qqdrJy942q7Nc1lk/acl7by5JKbY4K55Gczti0XglkOvEHfXKuuG0NHFiKM8g6TB0T5Lg9B72nVOqAlWN9CFaU+sVftQJ3ubViCef7gs3HvyGuVC/ThmzPnfHvqlXeQm+e/t3udzkfDdUur4HO+C616VF6D6R0kiVozhxyn6qBrfrNhz3qOWg2MxoSt'@;
put 'AClJ9dClfSt069AWzZs0REKteC34iIMtmBio5n7ixV3WvkeACaVXU8llTdMzj2Hz9t1YRbl9N2zdoZFKF82pQCz1W7rQdZATtVPoWiqZ57KSJxeCWUmggrhb6zOc6H0xMUt6Mfbvq0pgB8n+lytm0vNgbs3yJge21+WfzbAEs2XTRnj16Qe0B6JqD0IHPeD/QwnXN27dWb7k5BddIFBMMJ1EMKum'@;
put 'wfR2numkyWJGYQGwdRkF//xhJdNIYEimtw9c+7x2YjzatWxGwUHtNJ/NOom1wGX5mGiK36YXKVl7EeAXYS+h5G3ZFKiTejgNm7bv0kzg23fto/rgOQF9SbGRP3TrXi6yJrgRGUfc0lm90oFCML1S1u/6bCrx2awjydhFL8L67WaVe8YpimZNsiJ1u/8tWlXuXDUOMCzB5DrNY59/hKqb1FHOtGe1'@;
put '2vDlDz/jq59+rYZI5ZBAIlBTguntK/vesH7n8A56e51HEaz7gnODYeIQExWJFvQC16ltK7Rv3RwN69fTTOn8G5NNNqWr9lLnlYOsy0agNKHMy8ujwhCZVAt8PzZs2YEtO3cj9VAanDQ3grEkJLvQ+RwXGrbhSHEK/CiVj7YqfRKCWRW0Ar+vVh7y9kLEUt5hE7laqEIwNf/LEx5MfYdysOYG5/7v'@;
put 'a2kalmAyEE/eexv6UUqWggJS/yi0sGZg3aZtkq7IADL1FcHkoWomcyKaudkeqvpjIR8wKxwFgdVmloacTenJ9BLHkegdiGy2ataYqmglIDIyUttVzOmlEVPju9fkzfciXphQHqUKYzuJUG7ZsZt8KvfgwKEjPk8pVFX0wuweNOvGWksX4hIo3oMTbteQcQjBrKoUArt/wzYunHONi4qkqaW9ZP/L'@;
put 'A9s9mPUR5b/kh4ECi6EJ5mXDB2HU9Vcq54fJ84r9L5+kdEX7Ug8rMM3UHYIvCSajVGwyJ20mqTMP7TRpSdmP7NbP2yxbDlij2apZE3Ro0wKNqYIQm9O9hNNrTpe8m8aZ86ydZELJkd78mWV3Ijf3Lw0lm7u37dqDg0eOBp1QlkQ1qYkL7fu6kNKyWGvJVbRqyC215oVglkRZf597nU9pp84iWTvV'@;
put 'Ipia/+Vsyiwyx/gJ1r2zxtAEsy1pVV5+6n7NXKeayc5MmoP3P/8Ov8xZ4JWVrHWIgK8JpneI/AKrmUxygZ2rKG/mUgtyj+uvdF0x4UzSgoT4emzSsD7qJiYgOjpKIy18XXpJp2rXqFdWRlp7yaRXQ8l9ZwtQ5vEsHEpLx+59qUQm92prNoGzP7jelthE8rXs7USLTh6Ex3Bi9JprLUuOUQhmSTT0'@;
put '9Zn9bIfdVoRaSR6loscZZfa//HWiBYd2GD/BunfWGJpgRoTb8eZ/HlXSD5NNU0tXrcOLb33olZWsdYiARjAvoCjy7lWPIq/McLR0RsQrjx/xYAuZzXett1A6JP0RTe9YwsJsqFc7USOazRo1IOLZgPJw1kV8XAyiTprVhXR60fLvmkkkE0rWTPJnxj0/Px9czCGNUgVxvW/2odx74KBW2CEnN0/T'@;
put 'Xvq3V9VvPTLGg+bdnGjZ3YXYRHoD46I8NbWHl9EdIZhlgKKTTay1HnorJ74k4ZO62hcaaz0MjZUJuTluTHvHjgIF8l96MTU0weRBPH7PSKrBfIZyfpg8No7CfOKlN3H4KOWxkUWXCIRFUB7MYWSy6VW9KPLKDIrN5mYreRyRf9nh3cCmJfSWu81KmsHKHB3cfZjgcNBQvTqJaNygvkY8G6UkIalO'@;
put 'bdSKj0VEePhfSbg5eIjNs/wn2s7KyY3x9f55Tdz8nbXGOSdywWUYj6RnYP/BIxqh5PVh0lTydn+Qs8r1ump7Rca40aQjlWQlX8uEJL4aSGPpI3N4WT0RglkWKvrYxgE+nSkFVQt6ybCRxk/TXuujazXqBftf7t/swexP1ch/6QXD8ATz/EH9cO+t1ynph2kircP4iZMxa8Fir7xkrTMEbOFUJnIw'@;
put '+4L5R4NZcrjEGyg1jJmqVwEHd5JGc4mV/DSZePJD1zgLEyA2rdemvJv1k+qgQf0kNKDyr/Xr1aFcnHGIJfM6+3R6A0zKIp6hREC9BJLXjIlXM8kYFBYWIr+gEMezsin35HHNzM3BN4fSjpJWMo1M39na78aZHX/3NCrOgyYdqBJPNzcS6nHcAxMK//vdCcH8WwZ6/dSwjZPK8zqRkMzJ8DmrhV57'@;
put 'Wrl+sf/lkp+pfPBCNfJfekdteILJ1Ug4HybfeFV76FjItPXnslV4ZdxEr7xkrTMEmGB2G8z1yCtXi9wX3WeiyfWSnQ4mmiZsW2GmtfGrjjBxioqMQEJ8HFUcqktazkQkE+nkqHXeVkw8I2Cn/Jxcz9q7lNR68j2Av3sXvd4TmCx5Fx43L7z2/nl/Y3LtJZEnKJL7GBHGjGNZWgAOm7bTqPRiJn1n'@;
put 'a0dBIU0IBRau0tK0swuNO7gQz6bwABFLL3RCML1I6HsdGU3azMFFaNHVQ1aQk764+u5y2b3jKU5a+V8+CEP6fv0EdJbd2aptNTzBDKPyd2889ygaNUjWzEJVG76+9+aH0DHSTIiZXL9yCgbB9KLBHMVCpvMiCnJI28vBQFbs32pSooatd4zetY3SJcWQZjMuNgbx9JdIms7aCbU04plApva4mGiq'@;
put 'sR6paUbt9jCNhPJLJ5uNy3r59JJQ75rPw2S0NCEt/d3bn5IEkbfxd++2kp+95LHkcUwavflEC6nqDRPD/PwCMIHMzsklbWSOdt0zkeTgG/7LIr/JE+QjydrK8vrkPYcR11abB3WbuNG8E0eFU6L0WNLMk1YqGJHCQjCNNYMatXORNpMCf+oZU5vJyoKsdPK/HGeHs0i//vXVmRWGJ5g86H/dfDUu'@;
put 'HDJASTM5R5OPm/gVZs0XM3l1Jri/jwkmwfSOzUs02Ucz85AHezZasWeDGdnpat2svOMta82kjgOMIux2RETYERURoRFSJp2sFY0mk3tUZLj2OZyCA8PD7LDbbRoRDSNtKNdp54pGxSZoYu6kU7CSO4LJVBwcU/qcHipB6C196KJqIpxgnMkqE8aiIqdGGjkC2+Eo0ohhHkVq5xGJ5PRjubn5Gplk'@;
put 'H8lcCrrJzy/U9udjVSSPpbHzfuexxtYGGrV2olEHN+o0AKw2E1xkBueqA8GyegrB9ErIOOsICgDrOqgIzbu66aXSWL6ZbB7fstSDP35QJz2Rd+YoQTD79eqGJyjpOpuSVFtYA7J8zQYtmjyUHj5GkaMeCKYXK6ZFHAxkMnm0ZO0HdwB7N9hweI856AnbvX3U41ozS5/UQHJiea8Gkgkn/8YE3ruw'@;
put 'rxd/dxKpZELJf05nMbnk65MDZ+Q69aJV9poDNeo2pcCd9i4kkdYyKo4NhEQKivzvX1l2j07dKgTzVDyM9I3dKrqR2TwhyQJnoTHqlNvsFvw+2YSda9RJT+SdM0oQTA4WGEvpitiEVtLk5R2k0des6eCk6weoFJss+kJATwTTi4zGh0h5yWTJSdqgY4c9ZDrnKEULfSYzUnCq+Xm7J+sQRMBO2RZq'@;
put 'N3ShUVsXkpt6EFObEruzHzGR82BqK8sShRDMslAxzrbIWNJmDihCs+7km0kujXqONOeXVUcBmcfH23HiuFr+lzxjlCCYPJD/PnoPunZsSyYpNRzdeUzehYN9Pv7yB0yZOc+7SdY6QUCPBLMkNEw2zTYKHqEPBfkeZBwksrnFgoM7zMhKM14EesmxyWd9I2CPcCMxxU31wd1IIlIZVxfkisAmcDJ/'@;
put 'kwY4WCbw06EmBPN0CBnjd9aQdzuXk7LrV5tppXtz6g43Zn4cbgxQq9hLZQjm5cMH4XZFy0aymW795u0YPWYCaZ9E/VTFOe7X3fVOMEsOnt+WOSiI1/m5bvLXBFIp+vwwpTo6dpi0SYo5mJccu3wODAIRFNlbhzSV9VuRprIxaSrrkC8rkUoPkUq3jkllSXSEYJZEw9ifo0ib2UWLNGfXFv/mT60O'@;
put 'Uux/uWw6sG7+31kxqtOOXo9RhmC2aNJQS1fEZExFHyiONH1uzHhs3blXr3MpJPtlJIJZUkAUu0IBLcVks7DAQ9pMN47s4zJlZqQftCA/m/ZmJiqLIFABAmZ6aEcnUIBOIw9SWri0dXQtrh5E2nHKbmAUUllyiEIwS6KhxuemlJ2g60AH4pOscOnFN5Nur8xVZnB6ogPqmcd55ihDMNkhf8zoh9GM'@;
put '8mJyChDVFk638t3Ps/HJt1NVG5qhx2NUglkSdKaRHBzE6TI4gvdElgfHDgKHiXCm7aUUGkctcOQL2SyJWSh/DrNT4vPk4rRCyRSsUyuJ0grF0MsKvdyzzy/8WGUnELgLwQwEyoE/Byfu7zLIQXkzi9+d/VkNqjKj49rjmQfd+PldO1km1cz4oQzBZIHeft1luPz8IUqmK+LIVq7Q8diLY7VUJ5WZ'@;
put 'wLKP/xFQgWCWREmjkScDhEDaqaJCIpzHgczDZqRRNPpRIp45aRby5xTCWRI3lT9brGTqTiBC2chNuSpJS9mAtJbxQFg4WYuYT5LpW2+BOjWRhxDMmqCn/2ObdXGSNpOS+NelF6IgajPZPL5uoQfLflYvPZF3FihFMLt2aIP/PPIvJTWYLDBO5THm3Un4c/kar/xkHWQEVCOYpeFkGmkizSb7bvIM'@;
put '1Agnmc+z0kxITyXfTfrLPEI+nTkSnV4aO6N+t1DS8xgikAn1XahHhDKhvgfxtT2wRxancOJyjW6Daykrko0QzIrQUeO36HjOm+lAsy5cICE4vpmswZz1iQWp29RLT+SdJUoRTK5vPPb5R5BUt46SwTBSOtI7bfWzVp1glkZa01sS4SxOQu6hlzkPCvJIy5lJVaeOmJBxqDhgiJO8F+ZSbkOPaDpL'@;
put 'Y6i372GUQiiW/CgTUzxIbOBCYhJpKBPdlLDeqr1c/OVLqdewbx8DKgTTx4DqtDn2f+TE7F0GOlErwNpMdkfKyXRReqJwSlOkpnmcxa4UweQB3XfrtRg+6GwlzeQ8vmzKifn0K+9g/8HD/FWWICMQagSzNNwafaT7o4UTktMbOXmta1rO/FwP+XJyKiQyrx+yaBrP7Ayg8ASlDJFECKVhDNh3WxgR'@;
put 'R4qsja9DZDKZfCmJVMbVoWTnsVQJyU6CpHxWXkLJeYRChFOegr8QzFPgUP5LTLwbXSmdUdPOpM2kGR8I30xOrr51uRt/fG9XGl/lCGbvbp3wzAN3KJkPk2eixWLFVz/+gq9++lXpiWmUwYU6wSxLTsVaTpqrFKruJZ1OqtLCpDM/x4wcIprHj5roz4wT6SbkZpnIp7PYn6+s9mRb1RFgGYRFeqim'@;
put 'txtxiUQoiUzWqgf67CKCaUJ4JLk9aBk3in0oA/FQrfoognOEEMzg4B7Ms7I2s0U3NzqfQ5HmdSnS3OHfKkC2MDN++9xCZX3VjB73ylI5ghkbE423qKpPAlX3UTFnJKdh2rX3AJ5+9R0J9vHO4iCuhWBWDnyNdNJ/mj/nyfRIXDvdUeBCYR75cJ4gjecxC9VPNyE7kzSeR4E88vUszJP8nBUhzJmk'@;
put '7EQkwyn/ZEwtN9X2Jo0k/XFQTjRpZsKjiWhGUI112pG1kRyQw2QyVLWTFWHp/U0IpheJ0FvzNcR5M5uTNpMvEn+8eJnJSpCbQ9Hj4+z00q2ueZxnj3IEkwf14KgbcG7/s1BQUMBflVs42Oe18ROxaOVa5cZmtAEJwayZxDTiSf5IXGnIfJJ4sjahiKI7CylSvZh8msjcToTzGK/NRDxNyMuh30gj'@;
put '6ijg1Eqc+7Zm/dDz0VarmyK2vRpJUO1uIo/0IGQzd2QcmbxjSCNJfpQ2ikq1EJDs9soPRibwHv5TGBt/yE0Ipj9QNU6bfP9p1d2FzuSbGZtIwYs+1mayeXz7ag8WfK1u9LhX2koSzL49u+LJ+25HYWGhd5xKrS2U83PZ6vV48a0PtUStSg3OYIMRgukfgWnEk8gSE08T/ceaT20b3fxdFFjkKKIA'@;
put 'o0JaEwktIC1nYS4R0BO8JvJJnwv5cz7V+c2jYCN6z3QXAUVURZbJqJuy6gR7sVg84GhtK7lg2aiIhz2SNY2kcYwCIqI8RBpZKwnKL0mfo9ywhpOPZDiRSDKtWdnXlTWSRBw5kTlxSPogRNJXMhWC6Sskjd1OLAW6dSVtZpOOxb6ZnDnBFwtfw3O/NGP3enWjx704KUkwVTeTc07M/IJCPENm8h17'@;
put '9ntlKesgICAEMwig0ynZNMz/kccIrTk2hQNUtI9ah1hz52QtHqXUcRK5dDrY1E5rqsHgJKLppHdPRyFpP3k7fS+i7S6NgNJvRRTo4mLNKFei0WgtkTn6TqTW42Zyx6cgOwKd30JKiGLjs4c0sNDIn4nyRtro2WGmtSXMQ8EznOaJCCSRSSsF2dh4bad9iFjy8RZaM2nkVFCsgSxun87ABJLZsLbm'@;
put 'UwqJ1ITr5/+EYPoZYEM1z76ZLnQf4iKXE7NmWalJ90PJPM44KUkweWD333Ydhg7oq6yZnCv7TJ05Dx98+QMPV5YgISAEM0jAV/K0XiLKuzN385I3vtFrX0qQUt6n3OUkuWPS99dCTZj5BNzUaRbtMI0rMkktboSTlGufuNHif6dpRX4OBAJCMAOBsrHOEVvbhZ7nFaFRe28J1OJruKqj0Mzjq8g8'@;
put '/o365nHGRlmC2bNLB4x+6C5lo8lZe3I0IxNP/N9bSM+kUiuyBAUBJpjdB7vQvi9pwchvUBZBQBAwNgJCMI0tP3/1ni0VrXq5tLyZ0XGWat3vrSfN43tCwDzOclCWYEaE2/EmRZOrmnSdhWcmm9ykb6bgxxlz+assQUCA/eJ60Jtt216mat1wgtBlOaUgIAhUgIAQzArAkZ8oUwNpM4cVoXEHCgA6'@;
put 'WdWqMrBo5vFsF6a+E07+4ezbo/6iLMFk0Y26/nJcNvxcZZOuF6cs2o+nKPF6Xr6aEfN6vwQ5MKPXBS6KOhQNpt5lJf0TBCqDgBDMyqAU2vuwNrPNmS50HcB5ZSvnm8m1x7cspeTqP6idXL3kzFCaYHZo3QIvPn4v+cazc3z1fCZKgqXLz2Qqf/ujLzH3z2W67J7qndII5vlOtOohGkzVZS3jCw0E'@;
put 'hGCGhpx9Mcr4ui6yYDnRuK2ZggApo8NJ/+qy2uZ5NfsTEw5spai+EFmUJphWSuczZvRDaN6kEYqKKIRUwYVTFq3btA3PjZlAUbPiAxhoEQvBDDTicj5BwL8ICMH0L76qte7VZnYZ6KK0YmVrM7n2+PEMN34ZF07p0ioRFagISEoTTJbR1RcNxS0jLlXWTM5jdNFb0yvvfITlazfyV1kCiIAQzACC'@;
put 'LacSBAKAgBDMAICs4Clq1SvWZjZq809tJpvH1/7uxvIZoWMeZxErTzAb1k/StJhhlHROVTM5+2IuX7MBL739UXHePAUvXr0OSQimXiUj/RIEqoeAEMzq4SZHEaEyedD2TCdVAXIjMvqkNvOkwvLXD2xI26927fHSc0B5gskDfo7SFfXs2lHZyj48Rgdlin7xzQ+wbvM2/ipLgBAQghkgoOU0gkCA'@;
put 'EBCCGSCgFT5NfD0neg53oSFpMznH7eE9Tkx/P7y4UIPC4y49tJAgmOec2QOP3XOrsknXWahW0tDOX7Qcr737SWkZy3c/IhBGNaB7Dneg9Rll+9748dTStCAgCPgBASGYfgA1BJs0m0mb2ceJHkM8WDXHhPXzQye4xyvukCCYMVGRGEs5MeskJsClaCAMJ14vKHRQsM94bNmxxytfWfsZAZud69W6'@;
put '0LGfpCnyM9TSvCAQEASYYC6aYsbO1RatbGhATionURaBhCQXCnJNyMsJjdyXJQUZEgSTBzzqOsqJeb66OTF5jBYqH7lwyQr8b4JoMRmPQCxcW7rdWW70GEa1r6WSTyAgl3MIAn5FgCN+F3xnwd71lEj7ZC16v55QGhcEFEUgZAhm6+aN8fKT95MTLiUVUDQnJo8tv6AQz78+QbSYAbpgLVYPmnZy'@;
put 'oe/lLridiuZaDRCWchpBIOgIcECGy4PfvrLh4A5LyPnMBR1/6YBSCIQMweT7xouP34fO7VsrW5+cZ6ZoMQN7fXLUYFITFwbd4ITZSucWjhlYAcjZBAFfImA2wZHrwZxPwpB+mJ4aHn5yyCIICALVQSBkCCaDc+7ZvfHgHTcpHewjWszqXAbVP4a14XGJHgy6yYHYRNKOk/ZDFkFAEDAmAmwezzxC'@;
put 'GsxJYcgNQZ85Y0pNeq1XBEKKYMZER2Hs848oHezDE421mH8sXan5YqrqDqCnC8oe6cZZlzrRtIMJTodUU9KTbKQvgkBVELDZLdi+0oMlv1jhyAu9oIyqYCX7CgKnQyCkCCaDMfLqi3HVxecpXdmHx+mg0pj/pbyY6zdv56+y+BEBi82DNj1d6HWhBPr4EWZpWhDwOwKWMDMWUwT59lUU4FMk5nG/'@;
put 'Ay4nUBqBkCOYjRsk47VnHoLNZlU22IdnLNcoX0GlIzn5usvtVnoSB3twFFuFhBQXhtzogC2CtB5UulMWQUAQMBgC5H9ZmOsm/0s7MsT/0mDCk+7qEYGQI5gshGfuH4Uze3RRurIPj5NrlL82YSKWrFrPX2XxIwL2SA/6XuZA4/ZmMZP7EWdpWhDwFwJWMo/vWushDaYVhfliHvcXztJu6CAQkgTz'@;
put 'jC7tMfrBu1BEZmSVF9Zibtq2E6PHTCAy7VB5qEEfm8XiQeOObvS7oogCfYLeHemAICAIVBUBskTM/9qK/VstlHJMzONVhU/2FwRKIxCSBNNGQTD/e+YBtGjaWHmSSYk/MX7SZMxesKS07OW7jxGIjHVj4DUO1GlsJv8tcUvwMbzSnCDgNwSsYRak7nBj4WQb8nJFe+k3oKXhkEIgJAkmS/j8Qf1w'@;
put '763XKR/sYzabsS/1MJ58+S3knMgNqckd6MFarG406+JGn0vccLuEYAYafzmfIFAtBEhZyfrKBd9YsXczaS+lek+1YJSDBIHSCIQswYyNicYbzz2sfMoiFrjVasNn303FN9NmlZa/fPcxAhFRbpx9VRFSWokvpo+hleYEAb8gwKmJdorvpV+wlUZDG4GQJZgs9puuvBDXXHq+8lpMTr6ecSwLz7z6'@;
put 'Dg4eORraM97PozebqbJPMzcGjHDCaqdCIBJR7mfEpXlBoPoImCixegFV7vntUxsyDpops4j4XlYfTTlSEDgVgZAmmMn1auP10Q8jMiICbsVT+VhtNsya9yfenvjVqTNAvvkcAZvdg479i9B1oAlFhRLx43OApUFBwBcIEJdkF6Jl083YulzyXvoCUmlDECiJQEgTTAbivpHXYPjg/iGhxSygSPKX'@;
put '3voQ6zZvKzkH5LMfEIiIJlP5lU40aC0k0w/wSpOCQI0RsIVbsHWZmwimDQ5JS1RjPKUBQaA0AiFPMFs0aYhXnn4AFnqTVb2sIqctWrtxK14Y+75W6af0ZJDvvkNAS76e7EL/EUVUq5yiyp0S9OM7dKUlQaBmCHDOy8O73FhAaYlysswU5COm8ZohKkcLAv9EIOQJJkPyxL234uzePVBQUPBPhBTb'@;
put 'YiIizWmLZs1frNjI9Dcck8WNBi0oAfvlRbBHmig6VSr86E9K0qNQQ8BqM+NYugfzJ1tx7JCFFAuhhoCMVxAIDAJCMAnnTm1b4oVH79E0mKprMTng58jRDDxNAT9HM44FZpaF8FksVg+atHfiTEpdZLFR0I+QzBCeDTL0YCNgIXJ54hhpLr+x4eh+M/nei+Yy2DKR86uLgBBMki2Trucfugs9unRQ'@;
put 'vnwkT2ULJZr/Zc4CvPfZt+rObB2NzGLzoHlnJ3qeLyRTR2KRroQYAkwuc7Pc+PMHGw7uJJcoIZchNgNkuIFGQAjmScTP6EzlI4lkql4+kofLhJoDfl586wOs37w90HMuJM/HJLMFkcwzLnBTXlKIuTwkZ4EMOlgIcKWe7AyXRi4P7xFyGSw5yHlDCwEhmCflzUE+/33sHnRu3yY0tJgn65Q///q7'@;
put 'yC8oDK1ZH6TRcqWf5p3d6HkB5cgkbYpU+wmSIOS0IYUAJ1LPPOzBoh8sSCOzuOS6DCnxy2CDiIAQzBLg9+7WEc88cCccDkeJrep+tFismPTNFPww/Td1B6mzkZktHrTs7kS3QW6Ex5ikZrnO5CPdUQsBTkV0aJcHi6dYcDxNAnrUkq6MRu8ICMEsISGr1YIXH7sXHdq0DAmSyabyrJwTGP2/8dhz'@;
put '4GAJJOSjPxFgc3mDVk50H+ZBfG3A6ZAURv7EW9oOQQTMXCLXjN0bgGU/W8n3koN5JKAnBGeCDDmICAjBLAV+nzO64Mn7bg8JgslDt5JD4OIVa/DK+ElwuaTqTKnp4LevXFIyMcWF7kPdSGkOFHGeTOGZfsNbGg4dBMxU/pErs21facWKmRYUFRDblEUQEAQCjoAQzFKQh5oWk4cvuTFLTYIAfo2O'@;
put 'd1NZSSdadKfgH4skZA8g9HIqBRGwhJlReAJY+7sZO1bRZ6nQo6CUZUhGQUAIZhmSCqWIch4+1+NNS8/E6DHjcfDw0TIQkU3+RMAW7kbTjm50PseF2AQqLVlEqkxJ/uxPyKVt1RAwm8gaY0LaXmD1b1SlZze/rIlJXDUxy3iMhYAQzDLkxRHlLzz6L3Tp0DYkIsoZAqvNhoVLVmDMu5/CReYlWQKL'@;
put 'AJvMayW50GWACw3aerRUUm6nsMzASkHOZkQEOL+lk17Ktq0wY9NCK7KPc+FHIZdGlKX0WS0EhGCWI89uHdviOcqLGUp+iZqpfCKVkVwgZSTLmRZ+32yPcKNZFxfa9/EgjgKAioqIZLqFaPodeDmB4RAwkdbSQlrLzEMerJ1nwf6tRDQd4m9pOEFKh5VFQAhmOaLlCOvRD9yBXt07h0SNcoaBTeVc'@;
put 'PnL0a+ORejitHGRks78RMJkouryeG+37utCknRu2CDL3idnc37BL+0ZBgJSTNtJaFuR5yM8S2LTIhpxjrLEUraVRRCj9DA0EhGBWIOd2rZrhxcfv025bqtco98LApvIlWlT5RDidElXuxSUYa05nVL+5Cx36uFGvKZnNSWOjEc1gdEbOKQjoAAE2h7sp2wWXetz4hw1H9oB8LUVrqQPRSBcEgX8g'@;
put 'IATzH5CcuuGRu27GzJmaHAAAQABJREFUwL69QkaLyaM3U5Wfj778HlNnzT8VDPkWFATCIjxo0tGFNj1dqF3fRJVI+KEqfrJBEYacNCgImMkUbqYXrIyDbmxabMXeDRY4CkRjGRRhyEkFgUoiIATzNEA1bpCM/z3zIOxhYVputdPsrsTP7B5wIjcPXEZy++59SozJ6INgDXpUjAdNO7nQsqcbCfWI'@;
put 'aBLHFKJpdMlK/ytCgHNaMrnMJo+drStN2LnKgtxsCuGhe5QsgoAgoG8EhGBWQj533nAlLjlvEPLz8yuxtxq7WEiLuXHrTrww9j3k5ReoMSglRuFBRAzQrFNx7syEJB4Umc5ZoymxQEpIWAYBCt4xw2QBso+Sn+VqM3autiCHosPhEWIp80MQMAoCQjArIanaCfF447lHERcbHVJR5Vzl5/tfZlO9'@;
put '8qmVQEl2CSQCHmKTkdFAo/YutOjGpnOP9lB2cmojiToPpCjkXL5CgLgjl3fk96TjR4hYrjFhzzoK4DlOG4RY+gplaUcQCBgCQjArCfWVF5yLW6+9PKS0mGyGKipy4vX3P8PilWsriZTsFmgErHY3GrR0o0VXCgZq5kF4uAlOF1FQ+pNFENA7Ahy8xknSucBAxgFg51rysdxoQT5V5JHIcL1LT/on'@;
put 'CJSPgBDM8rE55ZeoyAi8Pvph1E+qS9HVzlN+U/kLpy46cjQDz1LqosNp6SoP1fBjs1jdVN/cg+aURzOltQextdikCJqvYj43vHBVGwBrK6k0KsgMXpDjQepOE3atMVMFHqodXihmcNXELeMJTQSEYFZB7sMG9MF9t14XMtV9vNCwqXzZ6vV4ZdxEOIqKvJtlrVMEOI9mVJwbjdpRUFAHJ5FOyhto'@;
put '59J5HkrxIlpNnYotJLploqAdK/3xS8+xI8C+TRbs3WTG8aNkGncJsQyJSSCDDBkEhGBWQdSsxXzm/jvQqV2rkCOZFosVX02ZTn8zqoCY7BpsBDiXZr1GLjSmWucpLUirSbXOObErk02P+GoGWzwhcX4mlRb6Y2169nEPDpO2cs96M9UNp1RDoq0MiTkggwxNBIRgVkHubC7mEpJP/fv2kEq+zhCx'@;
put 'P2aho4hqlX+CZWs2VAE12VUXCJBWMzIKSGnlQsN2LiQ14mh0Cz3zPaRNoie/kE1diEmVTvxFKulOmZvlwtH9ZuzbbMYhSpCel03aSlGkqyJqGYcgUC4CQjDLhabsH8JsVvzr5hEYOqBvSAX8MBqcuoj9MJ8bMwEHjxwtGyDZqnsETGb2z3Sjfis3GrYmv80GoIh0fuh7RLOpe+nptIOkoORE6Fwb'@;
put 'nPOz5ma7SUNpxoHt5Fe5g/LqZvH8op1kEQQEgZBBQAhmNUTdKCUJLz52X8ilLWKo2B9z5bpN5I/5MfILCquBnhyiJwTMFjabE9lsSWUpW7hQpwFpOkmzCdJ4aj6brNkUbZOeRKafvnD0N5m+TRSrwyVMsylPZdpe4OAOC47sNp3UVAqp1I/ApCeCQGAREIJZDbytVgsuGz4YI0dcGnJaTIaLSeZP'@;
put 'M+fhgy++l4oa1Zg/ej2ENZvRpNms19iDlJaUW5PIZkw8aaVsxVopTn0kpnS9Si8A/SKuaCFSyZV12JG3MNeJYxScc2SviUilGZmpFhTkcT+EVAZAGnIKQUD3CAjBrKaI4mNjMPrBO9GqeRM4HI5qtmLMw9gfk5VaEyZNxqwFS4w5COl1xQiQBjM8Akio70Jy8+JAobh6QEQUVVgh/uBxUfoj1m6K'@;
put '72bFOBr5V5Izm721co3sg13gQm4O56okUrnHqhHLLCKYbon+NrKUpe+CgN8QEIJZTWjNdMPt1a0THvvXLVoL7L8WSguTzByqV/7yOx9pJSVDaeyhOFY2pcfU8mh5Nus1cSGxvhuxtSlQKNKqmdO1uuic3J2vg9C6FNSZDkQoWUNpIg0lX9/OQiKUWR5kHjHj6D6O+jbheJoZhfm0o2gp1ZG7jEQQ'@;
put '8BMCQjBrACwH/Nw78lqc2/+skDSVc9DP/oOH8Z833tOSsdcASjnUYAhY2Jye6CENp5v8NilQiEpVxhHhDI8ivzwbabWIaHIlIRcFfIiWU4fC9WonmVCSDyWXYszPd5LfpAnHDpmQTlrK9FQzsohcFhQU/67DUYR8l2z0DLKH2RAVGYnwsDDY6LM3RJ/f85xUia2ALGx5efnII0G6tAsy5GETAAKE'@;
put 'gBDMGgLdILkeBfzcg4Ra8SFV4ccLG/tjrli7Aa+OnyRBP15QQnBtJpN6RCyRzLpEOpPcSEj2IJ4+R9E2O5nVuRQgazfZtM7k0y3BQ4GbJV7NJAXkEJ8kBTOVZSTtZP4JD7IzyHfysBkZRCozD1JKoWNmFGkeP6yllEVPCERGhCO5Xh00bVgfjVOStapyibXiEBsTjXA7kUubjYKuLKf4xTtdLi1n'@;
put 'M6eYyzmRi6MZx5B6OA17DxzCngMHkXoojdLPhZaLl55kqnpfhGDWUMKsxbtgcD/ceePV9KbPr/qht1jpxjZ9zgK8+9m3xSbS0INARlwGAnRpIDKWTOl1PKhFZDO+jovM6rQt3kWaTjPCqLoQ+/hpxJMt66zxZLWLmNnLQPM0m5gPklmb85lzDkr6qBENFwFamOdEfq4ZJ46xiZs0lEQos2idTd8d'@;
put 'eZKT8jTIBvXnlKQ66NS2FTrSX/PGDVA7IR6RpK3U/ODpOuGyxcXXT7F7Cn/m30ou/J3/OI+z94/3O0GEMy0jE1t27Maq9ZuxadtOHMvKKXmofBYEaoSAEMwawVd8MFf4efLe29CVkrAXFoZm6h6z2YJJ30zBjzPm+gBRaUJVBLiMpT2CUiGRZpPJZkxtIqAUuR5di4hnHJnYIz2w2oGwMCs9FAkF'@;
put 'IpyauZ3LqdNDkasPMQcNOT/Pk5yBrdmshmRizqZtjWjQJlehm4Jw3CjIp0TmWUBOOnCctJM5FISTfYzzUrJPJTdyKvng5mTRFwJ1EmuhZ5cO6Nm1I1o0aYha8XGanIuoTK/b7dauA1/0mOcOK0hY8+kiTWdaegY2bNmBhUtXYc2mrRS8KmWBfYFzKLchBNMH0ucLtW2Lpnj+4bvpwWjTbgI+aNZQ'@;
put 'TTAGRU6XVulnyap1huq7dFYPCHioXjpgJ4IZGcPkk9ZUTz2GSGcEE0+qQsS/hdE+VkqbZAujaHZW19GiEVEioExENULqjWw/SUY1Qso7/vWBv+hgOcn1NNqnMcdi4sg9I2WTRiR5SNqYyHeuyEF/RBId+R7SSBKJzLTgxHHgRCYlMifTdl6OCQW5bP7mFoRIMgpGWfjlqW3LZhjS/0x07dAGdWsn'@;
put 'aqSSM5Twb4FYmGyGkR8nE9mde/bhtz+WYQGRzeNZ2VpfAtEHOYdaCAjB9JE8beSLOOKSYbjusgtCMuCHYWTzy5GjGXiNyklu27XXR8hKM4IA0SUKKgqz0194MdEMjy4OKIqIdmvEMyKKfqO/cCagtI+VYh2sNjcsYTwvKfDISuZBzh+vqf0IUeJff1Ew/nCSyBWv6H/vM927Pp0QvI1p7RZ/0f7X'@;
put 'iGNx+381xc0T+eWAC05m73KaKFE5iEB6UFRABJL+ColA5hFZzD9Bf2S1zM+hYBtaF1AEtyOfgze49eLznK5r8rt+EeAX887tWmH4oH4aseRgHTZ7s0YxmAsTTSace/enYubvizB74RLNhzOYfZJzGw8BIZg+lBnnxnz2wTvQunnTkMuN6YWRSebOPfvx2nuf4OBhKSfpxUXWgUKATOyUUslMWk6L'@;
put '1Wtu98BC5NQWRppPIp62cLdmhrfa6Hfaj9dc4pD3N1PWJYvVreV+5Ie/2UwklROLk2n/L9JZciisPiUNk5MIosftLbdJJmviBy4igW4nkUH6c1EchYO0j07vmrSMHFtRVGAm0zURy0Iz7c8+deyTKsSxJMSqfm7VrDEuHjqA0t11RGREhPbMCJS2srKYchAnm9B37d2Pb6fNwvwlK0PSQldZvGS/'@;
put 'UxEQgnkqHjX6xuSqS/vWeOb+UZpJQW83ixoNrgoHm+nNd82GLXjj/c9wPFucxqsAnewqCAgCiiOQQD6VlwwbgHPPPlOLAGeTtN6fFUwyeVm+ZgM++24adu8/qPs+Kz6NDDE8IZg+FhObym+66kJcccHQkDWVs+aHTZELl67EOxO/QkGhpMHw8TST5gQBQcCACPTs0h7XX34hmlFEOJvBOWjHSEsE'@;
put 'aVozMo/h66kz8ctvCzQ3DyP1X/oaWASEYPoBb35Dff7hu+gm0jBkTeVMMjnWYua8P/DR5B/J9BdcnyI/iFmaFAQEAUGgUgjEREXi6ouHYSgV5QgnR2H2szTqwr6Z/Dd/8Qp8TPf29EyKNJNFECgDASGYZYBS001cRrJbp7Z46r7bQ9pUziTTRSzzh+mz8cUP02sKqxwvCAgCgoDhEGhCidFvu/Yy'@;
put 'dGrXmvx03YbTWpYHOOfj3LZzN97++Cts371PTOblARXC24Vg+kn4xabyi8hUPiRkTeUMLfulchWJz7+fhqmz5vsJbWlWEBAEBAH9IdCzaweMvPoSpFDFNyNrLctD1m63I/PYcYz/5GssXbWeFArGMvmXNy7Z7hsEhGD6BscyW0mIj6WAH4oqb9E0ZBOwMzCsyWQ/zI+/+hGzFiwuEyvZKAgIAoKA'@;
put 'SggMpZyWN1x5EeKolKOK5NIrK44053KT73/+nZY7M9gplrz9knXwERCC6UcZsPauU9uWeJqiylmjaTSHbl9Cw1icyM3TyklypQhZBAFBQBBQFYFLKP3QNZcO12qEh8J9n30yWXv5yTc/YdpsDv4Rn3tV53ZVxiUEsypoVWNfq9WCERcNw/VXXBjSpnKGjknm8ewTGEeR5cso3YUsgoAgIAiohsDl'@;
put 'wwdT0Y3zEGYLLaUC39/ZWvXBF99j+tw/hGSqNrGrMR4hmNUAraqHRHOt8vu4Vnk7FBQUVPVwpfbnmxBHHY6bNBmr1m9WamwyGEFAEAhtBM6nijw3XXWxRi71ntvSH5Li+zuXbB1P9/d5fy6HUzSZ/oDZMG0KwQyAqPitrkWThnjuobsQEx0V8m92bE5JS8/E2A8+x4atOwIgATmFICAICAL+RaBf'@;
put 'r26468arqCpPeEhHVPP93UGBnS+P+wir1m3WCKd/kZfW9YqAEMwASYYvuvMG9MFdN10NI1Ru8Dcs/KZ7mOqWv/3Rl0Iy/Q22tC8ICAJ+RaBdq2Z4cNSNqJNYK6R97b0gc+WfoxmZ+M/r72HPAan648Ul1NZCMAMocbs9DPfecg0GU4mw/Pz8AJ5Zn6cSkqlPuUivBAFBoPII1E1MwKP/uhktmzYW'@;
put 'clkCtvDwcGzYvA0vvvWhlAwugUsofRSCGWBp162dgP88fDcapiSHbJWfkpALySyJhnwWBAQBIyHAQZysNDj7zB4wUcdD0e+yInlxMvYfZ8yhFHVT4KCa67KEFgJCMAMsbyZUXdq31oJ+Qj11kRd6L8l8hypCrN+y3btZ1oKAICAI6BqB4QP74pYRl1IaOouQyzIkxfEH/Pfau59g0fI1koi9DIxU'@;
put '3iQEMwjS5bdeTmVxM1V4CPWoci/8TDKPUODP2x99QSRTAn+8uMhaEBAE9IlAY7JCPUHZQZLqJAq5rEBE7I+ZevgInnl1nBbcWcGu8pNiCAjBDJJAOdLw4TtvwllndBV/zJMy8EaXc9kxSWEUpIkppxUEBIHTImCloM37br1WM41zffFgLawd5Psm//HCL+q8eE31XEGIk557v2s/BuE/MZUHAXQd'@;
put 'nFIIZhCFkJJUF6MfvBP1ac2R5bJAu1FmUG3bdz/9FktXrxdIBAFBQBDQHQK9u3XCv2+7nir12ALeNyaVYWFh2nlzc3ORcSxLyy3M981cDh71gPplR1xsNNjnPyEuFvHxcZqp2ks4A91p7jPnxHxuzARs3Loz6IQ30OMP1fMJwQyi5M100XXr1BZP3Hsb+I04FEqKVQZufhs/np2jVYSQspKVQUz2'@;
put 'EQQEgUAhEBFux1P/vh0d2rREILWXrJ1kYpmbl4ct23dr1dA2Uh7hQ2npyMsvu4BHGJmnE2rFUYR7I3Tt0Aad27VGUt3aGsELtFKDo8qXrFyLl9/5WKtdHih5yXmCh4AQzOBhr52Z/TEvO2+Q5igu/ph/C4Nvply7/NNvp2Hm/EV//yCfBAFBQBAIIgID+5yBO2+8OqDVeuykkTxB2so/l63Gr78v'@;
put 'ws49+6tVJacWaTP7nNGFUuX1RvMmjTSCHKi64azF5OW/b74vCdiDOH8DeWohmIFEu5xzhVN+TPbnGdi3t/hjlsCISWZ+QSG+mjIdP838vcQv8lEQEAQEgcAjwNrLp/89Cu1aN2dHR793wOtfuYzchb6dNgvbdu2tFrEs3dEoKl88qG9PXDx0IJLr1UFhYWHpXfzyXbSYfoFVt40KwdSJaGonxGul'@;
put 'JJs1bhiwi10nQ6+wG0wyi5wuTPn1NyKav4Z8mc0KwZIfBQFBwK8IsPbvnluuRUR4mN/9CNkczlacyT/NwIy5f6LADySQ4wBGjrgEvbp3hpPiAPwdDMRaTK5V/ixFlG/cJr6Yfp2sOmhcCKYOhMBd4AuvXctmmm8P1ytnZ2xZihFgkukmZcHM3//AJ99M1bSago0gIAgIAoFEwEL3oYfvugm9u3Wm'@;
put '0/pXe8km8dRDR/DuZ99g7aZt9Dxw+W2o7P9/1UVDtdR57LLl71iAiIgITJs1j3zsf5Dk636Tqj4aFoKpDzloveAb2MC+vXDvyGu0i9zfb5M6Gvppu8IE3ET4LFq+Gu999p2UHjstYrKDICAI+BKBZo0a4On7b0cCRWT7897M5HL3vgMY+8Hnmq8la/wCsZxLfpm3XnMZRaD7VzvLZv9Minh/7KU3'@;
put 'ceRoRiCGJucIEgJCMIMEfHmn5eo+119+Pq6++DzxxywFEpNMM92c1m7coqUxSj2cVmoP+SoICAKCgH8QuPLCIRhB92WL2eQ3gllMLlPx+vufEslM9bs2sTRS/Xp1IxeAEVqaI39qMnmcbxKB/u2PpT7xKS09DvmuDwSEYOpDDqf0gh3JOQl7n57dhGSegkzxFyuR8J1792MCJWTfunNvGXvIJkFA'@;
put 'EBAEfIcAp/th7WXHtq38FtzDFW/SqJrZa+9OwtYde4JWVvG8AX1w+/VXgNPo+UtTy8E+fyxdqZWQLHRIDmjfzVR9tSQEU1/y+Ks3nCD32QfugAT9/AXJKR+YZPLN+IMvvseSVetO+U2+CAKCgCDgSwSaNUohgnkHmcdj/UK6ioMZnZpZfOmq9RTYGFwf/Fsp8OcSSp/nr1gANpMfy8rGoy+8rpUI'@;
put '9qWspC39ICAEUz+yOKUnbA5u3byJFvQTHxvjtwv9lJMa7AvfpHLz8im6fAamzZ7vlxu/wSCR7goCgoAfEBg+qB9uufoS2CgIxh9aPTYZfzN1Jr6ZNrPcpOl+GFa5TXIp46dPJpP3V55M1tj+39sfUvL1dUHT1pYLgPzgEwSEYPoERv80wkE/Z/borJnLmXD60yfGPyPwf6v85u9yufHLbwvw5Y/T'@;
put 'JcLc/5DLGQSBkEPg/tuvR/8ze/jFPM7kchOl7HmFKtwczTymG2zbtmiKZ6mUMbts+YNUc33yb6b+qhXTCLbGVjegK9YRIZg6FyinjbhoyDm47drL4XA4/HKh6xyC03ZPizA3mbF8zQa89/m3OJqhn5v0aTsvOwgCgoCuEeCk5Oyu1KpZY5/3k+9dHCM+5t1PNFcff6Yjqk7n77zxSgwfdDZcfjDZ'@;
put 'M7Feu3Ernn99AuX4dFSne3KMzhEQgqlzAXH32MH81msuxcXDBkrQTzny4hs1m8x37NmH9ymN0eYdu8vZUzYLAoKAIFB5BBqlJBHBvBOJVNPb1wuTrKXkQ/4GRVRn55zwdfM1bq9Bcl28+Ph9iIuJ9rlyg+/XGZSu6NEX3tCV5rbGoEkDfyEgBPMvKPT9gd+iH7rjRpx1RlchmRWIioN/+KbFCdnn'@;
put 'LVpewZ7ykyAgCAgCp0egZ9cOuP/2GxDpY1NxseXFhP9NmEQkM/iBPeUh8a+br8bQAX19rsXk8bvcbjz18ltaNhB/mOHLG5NsDwwCQjADg7NPzlInoRaevO82tKGKPwUFBT5pU8VG+M24kNwJps76nXx8ZmmfVRynjEkQEAT8j8CF5/bHTVddDKvF7FMtHge57KJ0ay+88b6uNXidKDXTMw+MovFb'@;
put 'fA42l8N8+Z2PqIDGGgn08Tm6wW9QCGbwZVDpHvAbX+MGyRTdNwrJ9epoPpmVPjjEduTgHyrAiaWr12Hi5Ck4lJYeYgjIcAUBQcAXCNxM5JJJpsXHBJNLJn7/y2x88cMvuogcLw8rDvJ5iczkzRo38HmgKWPwwRff4aeZ8/xaDrO8scl2/yIgBNO/+Pq8dSZOHdq0wBP33IroqEhJX1QBwl6/zL0H'@;
put 'DuKjr37E6g1bKthbfhIEBAFB4J8I+COC3Gsef21CcXCP3qOo777pKgwb2M/nZnKOJP/u51mY9PVPQc/9+U/Jy5aaIiAEs6YIBuF4b/qiB0fdCI4y91eesiAMzS+nZL/ME7l5Wo45NptzWiNZBAFBQBA4HQJMBB/71y3o1bXj6Xat0u+sKOCgnudff5eqkh3wqem9Sh2p5M5D+5+Ju2+5Bm6Xq5JH'@;
put 'VG431mDOnPcHxk2aDEdRcJPLV67HsldVEBCCWRW0dLQv+xlySa9RVNKL82OKg3TFwuEbOqcDWUjlyT79dpqkMqoYLvlVEBAECAF+gX/qvtvRuX1rcrjx3cL+l3v3H8Tzb7yrVSTzXcv+aalD6xZaqiabzerTE3DJyAWLV2i116VkpE+h1UVjQjB1IYbqdYJvflddOBTXX36B5MisBIQlTeYfk1/m'@;
put 'qvWbK3GU7CIICAKhioA9jGuQjyK3pJY+TbLO6Yk2bNmOl976EMezc3QPb0pSXfzfE/chJjrKp31lHJavXo+XKNCnUHJh+hRbPTQmBFMPUqhBH2xk/h1JdWMvHT5Y0hdVEkc2meecyNWizH+cMVeizCuJm+wmCIQaAlwycTRVs/F1knUmVivXbaQURZ/oMv9laTnXrZ2AFx+7B3USE3xqLWMcVq3b'@;
put 'hBfefF8IZmnQFfguBFMBIfJb9j0jr8G5Z58lJLOS8mSTOWs0V6zdiE/IZM6BQLIIAoKAIFASAbs9DKMpyXqblk19aiL3Eqv/UQWfLANoMGsnxGsaTH8QzOVrSIP5tmgwS847VT4LwVREkjEUUf7AqBskEXsV5cm+UEeOZuCrKTPw28Ilmp9mFZuQ3QUBQUBRBNhC9PT9t6Mj5YL0pQ8m53/cvH0X'@;
put '/jv2fUOYyJPqJGoEs1Z8nE81mJoP5hLywXzvU7IkFSk6i0J3WEIwFZJ9QnwsHqRqPz06dxBNZhXkyiZzThOycMlKfE456aSWeRXAk10FAYURYEvHE/eMpHtqe5+Oku85Bw+n4bkxEwyRo7c55cB84dF7wDkxfblwFPnsBYvw9kdfShS5L4HVSVtCMHUiCF91oy75yDxKaTXaU9SfVPupPKolA4C+'@;
put '/HEGFq1YU/mDZU9BQBBQFgEu0duvV3fS3PkuvRkT1/yCQox+bTy279oLt4dzXOh36d2tIx65eyTMvlTj0nA5D+aUGb/hwy9/kDyY+hV/tXsmBLPa0On3wOR6temt+za0bNZYSGYVxcSaBQeZamaTufzrn37FsazsKrYguwsCgoBKCIy67nKtFreF2JUv08GxmfzNDz/H74tWkPZO3+bhay4ehmsu'@;
put 'PZ9yCPs2VyVrMCdO/hHfT58jlXxUumhOjkUIpoJC5SE1rJ9ECYJHonmThkIyqyhj1mYy0dxFCZC//PEXLFm1vootyO6CgCCgCgJXnD8YIy4Z7vNa5Ox/OGPuQnDKNC4EodeF74fPUi3ybh3b+bxUJGMwhgKd5v25TGqR63UC1KBfQjBrAJ6eD+WbQtOG9TWS2TAlmVJAFOq5u7rsG5NMdjyf9+dS'@;
put 'qgI0S3wzdSkl6ZQg4F8EzjmzB+666Wpwtg5fajD5/nLoyFGMHjOe1un+HUQNWq9fr44W4BMbE12DVv55KD+jGM/nxryL9ZQTlAuGyKIWAkIw1ZLnKaPhC5idsx+5+xZNoykk8xR4KvWFfaX478DBI/h66q+YT1Un9O0tValhyU6CgCBQSQRaNG2Ep/99O+J8TLD49Gwmf4vN5HRf0WsU9aXnDcTN'@;
put 'V1/i8zKRfF/lfMSPvTgWqRTwJIt6CAjBVE+mp4yISWbLpg3x+D23ol6d2lrFn1N2kC+VQoBLc7roDXvR8jVaTfO9Bw5V6jjZSRAQBIyLQDSlf7vsvEE4b2BfhFNOTF8vnA9z3aateGXcRF36e3Oi+f9S9Di7Wvlaw8gp4rbt2oOnXn5bC3jyNbbSXvAREIIZfBn4vQdMMts0b0KazJuFZNYQbb4p'@;
put 'pqVnYurMeZg5f5HcGGuIpxwuCOgVgTMoNdHVFNzSiu6dbpfLp+bxkmPml9e3KE3PAkqTprdgn6HnnIW7bx7hc+0lj58DfGb9/ifemThZd+MuKR/5XH0EhGBWHztDHamRzBZEMu+6GUl164hPZg2kxw8EKgOETVt3kNl8JlZv2FKD1uRQQUAQ0BMCyeRzePnwQeh/5hla3sciP0d480vr7n2pePGt'@;
put 'D3A4TT++mLXiYvDfx+5Fg+R6Ptdesrw5wOftj76gF/XFFJ3u0tMUkL74CAEhmD4C0gjNFJPMpnjozhtRv15dIZk1FBo/GPLyC8gvczl+/HUuJU4+WsMW5XBBQBAIFgJsAh/crzcuGnIO6ifV1UiPr83C5Y2NydZPZBX57LtpyM3LL2+3gG6/44Yrcf7gs+GiIhS+XvhZxOngnnz5LeykbB2+DJ7y'@;
put 'dV+lveojIASz+tgZ8ki+sDm6/FFKYdRIostrLEN2VOdoUNY88APitz+W6uYBUePBSQOCQIgg0LVDG1x5wRB0aNtSKwnp9AOpqghKvi9z8OA4MhfrwVTet2dXPHD7DbBYzH4hf/xyvp38L59+dZzcLyuaGAb/TQimwQVYne4Xk8wUPEo+mY0bpkiezOqAWOoYNpubiGxuofrC3/08G8vWbPDLjbnU'@;
put 'aeWrICAI1ACBFNJUXkbmcK7UExUZEdQgSH5Rzco5gf+Nn4gNW3cGzWzcjDKPcNR8Yq14v5jGWVzsfzl5ynR88cN0qeBTg/mr90OFYOpdQn7sH2swH77zJs2JPT9fH2YZPw43IE3zmzk76i9ZuQ5TyGy+jcrAySIICAL6QoBzOg45u7dmAq5D5XXZBzBQ5vCKkOC0RVyj/PX3PtXuHZy5IpBLUt3a'@;
put 'ePLeW9G0UQOqrON70ziPxautfZa0lxvIj13M44GUcGDPJQQzsHjr7mwNkutqppD2bVpCSKbvxMMPimzSRsylChU/z1mgJVT2XevSkiAgCFQHgTCbVdNWXjz0HDRrXJx6R28BJpy6KPXQEYybNJkSkO8ImCYzqU4i+effhDYtmvqNXLLM+N64eftOqsM+Qczj1ZnEBjpGCKaBhOWvrtatnYB/33Yd'@;
put 'undqLyTThyB7/TPT0jMwY96flJJjEY5n5/jwDNKUICAIVAYB1pp169hWy2nZoU0L8i20wN/R4ZXpV3n7MAk7npWtlZFcuHSV39P4cEGO+269Tst36W9c2Dz+3qffYBq9ePtLS1oerrI9sAgIwQws3ro8G5so2N/m3pHX4KwzuiIvT791cXUJ4Gk6xQ8zJpv7KDn7dKo9zFpNjj6XRRAQBPyPAGvk'@;
put 'WGPZs2tHSpZuD6qfZVVGyz6ZTjLd/zr3D3z3yxxkHDtelcMrvW+fM7rgtmsvA7sK+Jtc8r2QX7Ife/ENXZfHrDR4smOFCAjBrBCe0PoxNjoKo66/AoPPPlML/BHfGN/Knx8YnD9z/aZtmtl85bpNVB7O4duTSGuCgCCgIcABPJefPxhMoGKiow2Zlo01r2wy37V3P76dNguLVqz1mTYzsVacptEd'@;
put 'RlWKbHRvCoSrQGRkJH6cPgcfffWjBPeEwHUqBDMEhFyVIUaE23HzVRfjQsoF5yDyIySzKuhVbl8OBOK6wxu2bMMvcxZizcatPntoVK4HspcgoC4C7EvI+SwH9OlJRSVqa2ZYPQTw1ARxNpmzOZmDYmaQRnPV+s3VtoJwAvVzzjoDwwb0BZNwbjcQ93m24uQXFODJ/3sbu/enBuScNcFcjq05AkIw'@;
put 'a46hci3w2+wIKpF21UVDtchKo9+c9Sgg1kywRrOw0IF1m7dppvO1G7cJ0dSjsKRPhkCAfckHEakcROSSiSXftwKhlQsUOHzP8BLNfamHsHzNRo1o7j1wENkncivsRgxZp5pRZPgZXdqhV7dOSKZqbkwqA+kDydrLKTNYezlF7nMVSkudH4VgqiNLn46EfWXOH9QPI0dcojnEB/JG5NOB6LyxkkRz'@;
put '/Zbt+HXeH1R6cquYznUuN+mefhDg0o79e3fXtHKskeNF9fsVW0H4Hl1YWIj0zGOaP+Pho+nIPJ5N7k2FGgZ2qkwUHxuDFMoUUp8wYj97NrczNoHGh/vKWTWefPltMDmWJTQQEIIZGnKu1igtZNLoRzfuO6lkWHRUpN8dwKvVSUUOYqJZbDp3YPO2XZj5+59YSWYwvZSNUwRmGYZCCDCZPOesHhqx'@;
put 'DIZGTg9Q8n3Dm63C+9lr7ubv/Jk1uUwog6nN5cjxT7+dim+mzaS+SN1xPcydQPRBCGYgUDbwOfjm1ZHSejww6gbUrZ1oSEd5I8HPDwU2nbtcbkq0vAe/LVyCxZS0nSt8yCIICAJAEyp1O6hvL3A5Q458DrSpV2RQNQTYrM9BSs/+bzyOUeolWUIHASGYoSPrao+USQ+XD7v/tuvRslljyZVZbST/'@;
put 'v73zfI7qStP4u2NQzhEhDBJCEogcTDAGG9tg43EoxxnP7Hpqy7sftnb/jN2q/bjhw1ZN7Uxt7YTd8YzHM2MccMAYE2whkEgiCOWcc8Sw+z6HObjBwghJ3X3vPc+tajrQ995zfu9t9dPvecPMd7RC84Z6IBqaWgW18L746pR0dPfO/CB8JwkEhABWU0qKlpnkna0b1kqGZkDDIxdNr1xA0IZ1GsaL'@;
put 'qmf453//mcaMnhf8PePmDgEKTHdsPeeZ5moQ/d//9eumntyEZgPapZg5H5gH+E4CWDrHhoLtKFNy+ESFegRaPNHa7jsHzv8kgTkSQFWLdatKNHFnm7lHi0fUamTi4RzBRmh3LI2jLNHP//cPLEsUIeZeOg0Fppes4YOxJCclyJs/fFH2PbaTf+gjbC8EyuM2qIWKkXn+2bGT2kquZtblSiI8fJ6O'@;
put 'BGZMICMtVbZvXmeSd0qKCiRGf2RBWPJH7YwRRv2NSCiq1rJK//Rv/8ml8ahbIzoDoMCMDndfn3WBipwfaAmjV5/bxwzzKFgScbEmIUhLHNVqbBOWz788fVY6uXweBWvwlPNFANf1siV5snvbJtNRDJnPWGJFggqF5XxRjsxxEEeOH8L/+K8/lcu1jbRfZLB77iwUmJ4ziT8GhJioPTsf0hZjL2uX'@;
put 'jETftF/zB92ZjzJ0+RzFl7/4qlIuXq1Te1yb+UH4ThKIIoHEhHiz/L17+yZzn67eS8RWRrqUThQRBOrU+KGASMt/+ekvzI/f65rFzs1NAhSYbtp9XmaNPyRlxcvlH7SH+bIli017yXk5MA9y3wSsVxOdMmrqGk2sZnnlOSYF3TdJ7hAJArhel2h9xh2b18vDWzYYzyWyjRlfGQn64TsHPM740ftf'@;
put 'v/mDvPPhIZYkCh9qXxyZAtMXZvL2IFGP7u/eeE22bFjDHuZRNpXNPscwenr75Iz2PT92ssp4NYdHxqI8Op7edQKpmqSzrqxEdm3dJKtLiwTeSiTsQFhy8zcB/O3Bj4Tfaq3LX779HpN6/G3OeRk9Bea8YORBUIj9J68+L89o9x+WD/HG9QAvEf7gT2pP+aaWdm0rV21iNeubWk0vdG+MkqMIOoFY'@;
put 'vQaLly+V7dqicMv61bJYf5AijpveyuBYHuISST1/PHhIfs5WkMEx7BxnQoE5R4Dc/RsCyHB+af/j2sP8aUF5EXolvmET7UdYtoJ9RkZHTYmjijMXpOJstbZt62AtwWgbJ4Dnx7W2dPEi7X29Wm9rTB3d+Lg4xlYG0NY2POft9z5Wz+UB/ngNoI1nOyUKzNmS437TElio2YPwUrz5oxclf1Eu4zKn'@;
put 'pRS9F+0SOr4UhjTLs1braZZrAeTK85ektaOLYjN6pvH9mSEqES6zcc1K2bZxrRRpc4ZkXRK3rQqZCe57E39rAsgWh31//c778rbWu2QbyG8hcvoFCkynzR+eyUO8oNzI32qG+ca1q0x7SX65hIf1XI4KO+ELAqJzcGhI6nTpHJnolXprae+SKcbFzQWvE/suWABRmWtE5ZZ1ZVJUsERSU1JMWRpk'@;
put 'gbMgenAvAyyJoxTRz/7nHa3JWy7MFg+urWc7MwrM2ZLjfvckkJaSLD984WnZ//gjAjHDsiP3RBa1N4SKTSyjN2rM5pnqy3K2ukaFZ4surTNBKGrG8diJEf6CqhEbVpeaskLLl+ZLin7W8SOSotJjxgrDcPCDFB16rtQ2yH/892/kYk0961yGgXMQDkmBGQQrengOsTELtV7mVvmrV56T9NQU4830'@;
put '8HA5NCVgl9Gx5DkxOSntunR+8Wq9VOkyek19k3T39tNb4diVgs46JZqos76s1GR/L87NkURN7LMJffRUunFBIJYbtv74yAn51e/fk76BITcmzlnOigAF5qywcaf7IYCi7KXa7u1vfvyyrNK6mZMqWrhkfj8Eo/temyAEMdE/MGgSg85pq8pqFZ0NzW0yNDwS3QHy7PNOICE+TutU5srKFYXqpSw2'@;
put 'STpZGemmxiGuAybwzTtyTx8QPzZRkaJOO4f9SksQoXMYl8Q9bTJPDI4C0xNmcGMQGWkp8uOXvi97d++41QLOjZkHZ5Z2KR33KH/Uo97MOk0UunClVi6p4Gxp75TRsfHgTNiRmcTGxkhuVoZ6KZfJ6pIiLSu0TPJyssxSKBBg6RvCkptbBPA5R6xlX/+AfHj4mLz70efqtRw0f7/dIsHZzoYABeZs'@;
put 'qHGfWROI0SXzx3XJ/A1dMk/jkvmsOXplR3g2kCiEDV2E+voHpb65VfsPN5iOQk2t7TI4PEqPtVcM9udxwEOZl5NtknJWFhWqhzJf8rT3d3JSkhEP9FJ6zGARHo71WGLF4mj5aTnw8RFpauvg5zjCdvD76Sgw/W5BH44fS+YrCpfKm6+/KGtXlZg+5ozh8qEhpxmyFZyI40QoBL6g2rp65KrGbiJL'@;
put 'vUFv3X39MjY+Mc3efCkcBFA6LC012Sx5o3QQPntL8/MkOyNN4ygTbwlKeCkZuhIOC/jjmPBWIhwGn93O7h45Vl6psZZfSqP+SOR14Q8bem2UFJhes4hD40HbuFef2yfPPrnb/GGb0iVXbsEiAMFpb/CKjY6NSa96OVvUG4JMdXg72zp7pKun14hOfpHNzf5IqkvRz9Vi9UYi03u5CkoUPM9SMYkV'@;
put 'AwgIbHbJm7znxtvPe0NIhopK1MW9VFsvxyvOyFenz0n/IBN4/GxfL4ydAtMLVnB4DPCubN+8Tt7QNpMP6hfhhC6z8ksvuBcEvtSs4MSXG0TnmIrOAf1y69J4zpa2TmlW8Qnh2dM3IAODwybWM7hEZjczMExNTpTM9DRT3BwFzvH5yc/LEZQHS9UbkjLwWQJj3LhKMDvWft4LnzdsVkziusFj3PC3'@;
put 'Fj/2EENddeGS3i7rj71u/v31s8E9NnYKTI8ZxMXh4I/d4twsLWX0vDyydaP5AwcPCzc3CIR++UF0YsPyOmpvDmqGeo8uqXd290q7LrV39fSZ5/0qPPH/ExOTckNFVBA3FDFP0HqDKUk3hWROVros0sSb3KxMyc3OlJzMdI2ZTDRJGBAOEJP43EBIUkwG8YqYfk74/MAzjR8ReGw3++Niauqaad84'@;
put 'rPVtkaCDzxKqP9Q2NEurCkoUSw/dz+7PexKYKwEKzLkS5P7zRgCZrHt3bTfF2TPUMwORwc1dAhCbuEE8WeGJL1FcF4jhHFHP59DQiC7lDZsvzl7NdMVjLO2hdBIE6PjklHk/vmS9IkQhHGNUEMSqhzEx4aaATE1JUs9jinokU029WNwjbhLL3YkqMuM1KcfGx1nhYIUknnNzkwCuCfyo+Ojz43Li'@;
put 'lJYOun7jz2IRnusbxvs/rj/CEJoyqp8ZfA64kUCkCFBgRoo0zzMjAkgAQtzYT157QTZpm0kbKzajnfkmZwhAcMLrYsUnnkNoWfEFETqpX6ao14iySRMqNEfHx81jPMeXLrLecQ8vKEouTU5eM+0xv1YRaz2B+JK+doc3HefAeRcuXCDf+4ub48DjGL3hCx/38XFxEqcdb+JURCYkxBmRiMxteCQT'@;
put '9Tn+Hx1xIDLNvnqPY2Kz8wgVkPRIOnNpz2iiuPZRPqi1o9MUPD9WXsXWrjMixzdFkgAFZiRp81wzJgDPzvef2CUv7n/CxJPRmzljdHyjEsAXsF32s2IUz60n1ApSC8uKOjy3wi70Mf4/dMOxIAjtOUIf4zX7OvbBYysQ7zx26HlDj8/HJHA3AigLhmvq2MlKFZfvm5jlO6/Pu+3L10kgkgQoMCNJ'@;
put 'm+e6LwK2A9BfvvKs9j1eSW/mfdHjm+eLQKhYDD0mv9RDafBxJAjEqee7V2OS33r3Izl4+LjxvEfivDwHCcyGAAXmbKhxn4gSSNKex888/oi89MyTJiaN3syI4ufJSIAEokwAHnJ4Lk9WnZNf/O6A1De1slVjlG3C09+bAAXmvRnxHR4gcMub+bJ6M9esNBmTiJPjRgIkQAJBJoBYSzQseOeDQ/Le'@;
put 'p0dM3HCQ58u5BYcABWZwbOnETJAosV+9mS+rNzM9LdVkCHOp0gnTc5Ik4BQBeCzhuTx19oL88u0D2g2rmV5Lp64A/0+WAtP/NnRuBt/TAPdCzTR//YX9pkg7ACBbmBsJkAAJ+J0AYn7htUSs5e8/+FQ+OHSUXku/G9XR8VNgOmr4IEwbbfEe2/GQaTe5RLuYIDbTZusGYX6cAwmQgFsEUOYKW3nl'@;
put 'OVN+CAXRr2vhfG4k4EcCFJh+tBrHfIsAfu0v0q4mLz3zhOx5eKvWHIw3QvPWG/iABEiABDxOwHotO7Rb1VvvHpRPj37FougetxmHd28CFJj3ZsR3+IAAuqOsLyuRHzz/tKxZWcwkIB/YjEMkARIQ0zN+SkN8Dh8/KW+/94kWT+8yxfbJhgT8ToAC0+8W5PhvI4CSRvse3SEvPLVHcrRnM5bNmQR0'@;
put 'GyI+IQES8AABJPBgSbymrkF+/c4HmsxT/a2uUR4YJodAArMmQIE5a3Tc0asE0KUlf1GOvPLsXtm1daO27IvjsrlXjcVxkYBjBOxy+ODQsBz4+HN5V2+DwyOOUeB0XSBAgemClR2d481l81J57bl9Ztkcnkxmmzt6MXDaJOABAjHacx71e8urzstbfzoodY0tTOLxgF04hPAQoMAMD1ce1UME4uNi'@;
put 'Zc/OrfLi048Lss0hMq9fv+6hEXIoJEACQSZgl8PrGpvlt9rm8XjFGUHcJTcSCDIBCswgW5dzu0UAy1JZGWny3N5HNUbzYUlNSWZ85i06fEACJBAOAnY5HJ14Dnzyuda0PCb9g0PhOBWPSQKeI0CB6TmTcEDhJICWkwVL8403c+dDG0xB46mpKSYChRM6j00CDhJAsXQkGR4trzQF0xu1puUNDdPh'@;
put 'RgKuEKDAdMXSnOdtBBCfuVbLGaF+5vqyUtOSDUKTGwmQAAnMhYAtln7uUo387sBHcqb6isZdMiRnLky5rz8JUGD6024c9TwRiNEyIfBkPv/UY1JaVGg6ATERaJ7g8jAk4BAB2zsc3Xf++OEh+fzLCpmY5I9Why4BTvUOAhSYdwDhUzcJoH7mozu2yLNP7pZlSxazULublwFnTQL3TcAm8KALz4ef'@;
put 'HZWDh4/LgJYg4kYCrhOgwHT9CuD8byOQnpoiTzyyTZ7es1Py83JNSRGUFeFGAiRAAqEEUG8XZYcGNGnnM+3CgySe9s4exnOHQuJjpwlQYDptfk5+OgI243yfdgTau3uH5GZnUWhOB4qvkYCDBGxm+MjomCbwnJZ3PzosjS3trGfp4LXAKX83AQrM7+bD/3WYAL5IcjLTZa8KTXg1F+VkU2g6fD1w'@;
put '6m4TwN8DeCzHxyfkq8pzRljW1DfJ16yp6/aFwdnflQAF5l3R8D9I4CYBKzSf3L1dnty1nUKTFwYJOETACstJrTJx6swF+ZN6LC9cqWOzBoeuAU51dgQoMGfHjXs5SOAboQmP5lYjNNERiDGaDl4MnHLgCYQKy9NnqzXG8oig9BBLDgXe9JzgPBGgwJwnkDyMOwTwxZOVniZ7VGTCo7lEk4HQ55x1'@;
put 'NN25BjjT4BLA5xtF0ie0SDo8lhCW5y9fpbAMrsk5szARoMAME1ge1g0CyDrftW2jaT9Z8GC+ILOUnYHcsD1nGSwCNit8VJN3KtRj+f6nX0h1TS2FZbDMzNlEkAAFZgRh81TBJADvJepoPrxlvXo0d8jKFQWCbh4o2H7jxo1gTpqzIoGAELB1LIeGRzR556wc/Oy4XKptYIxlQOzLaUSPAAVm9Njz'@;
put 'zAEkgM5A68qKZf+eXeY+KTHRCE3EanIjARLwDgF03sGtp7dPjlWckU+OnJD6plaWG/KOiTgSnxOgwPS5ATl8bxJY8MADUlTwoInR3L5prWRlZhiPCNtQetNeHJUbBBBfidUF3Le0dcjhExV6OykdXb1cbXDjEuAsI0iAAjOCsHkq9wjgiyw3O1N2b98sj27fIgUPLjYQIDSxtM6NBEgg/AQQXwlh'@;
put 'iZWEK3UNcuhouRyvqJL+QbZ0DD99nsFVAhSYrlqe8444gcSEeNm8dpU8pW0oVxYVSEJCApfPI24FntAlAnYZfHhkVM5drJFPvvhSKs9fMhniLnHgXEkgGgQoMKNBned0mkBsbIwKzEL1am6SzevKJCcr03gz6dV0+rLg5OeJAFYNICzhtezo6jaeyiNfnpbahmbGV84TYx6GBGZCgAJzJpT4HhII'@;
put 'A4Hv6Rdhji6fb9u4VnY+tEGKC5dKXFwcvZphYM1DBp8AssEhLPFDrb6pRfuEV8mhY+W6DD7EcJTgm58z9CABCkwPGoVDco9AnBZ2XlVcaEodbVm/2ng1QQFdgljqyL3rgTOeGYHQpJ3+gSE5e/GyHD5+UjvuXJUx7RnOjQRIIHoEKDCjx55nJoFvEcCyXmZ6qmzSWM1Htm6UUo3VTE5KMskJEJtM'@;
put 'DPoWMr7gIAFbuxL9wesbW8wy+IlTZ6W9q4f1Kx28HjhlbxKgwPSmXTgqEpCFutyHrHMsoW9ZXybLtFMQPJ0QmsiGpdjkReISAfz4whI4tq6eXjl97qIcO1kl1VdqNWlnyiUUnCsJ+IIABaYvzMRBuk4gThODykqKZOvGNbJpzSrJy82+FW/GIu6uXx3Bnb8VlVgKHxwalktX61VUVkrV+cvSp7GV'@;
put 'DB8Jru05M/8ToMD0vw05A4cI4Is2JSnRiE0UcF+7qtjEa2LJEMkNFJsOXQwBnarNAsc1PTI6KnWNrVJedU4qqi5Ia2cXe4MH1O6cVvAIUGAGz6ackSME4N1JS0mSNSuLZeuGNbK6dIVkZ6aLFZvw7nAZ3ZGLwefTDBWV45qc09jSJhVnL0jFmQuaEd4mU/rjiRsJkIC/CFBg+steHC0JTEsAYjM9'@;
put 'NUU9m8tNbc3VupyODkIxMTEmZpMJQtNi44tRJGCXv3E/Nj4uTS3tJq7y1NlqqW1slskpisoomoenJoE5E6DAnDNCHoAEvEXALqOXriiQDWWluoxeIvmLsiU+Pt7ErLH0kbfs5dJo4F3HDaJyeGREvZOtGk95SSovXDa1KykqXboaONegE6DADLqFOT/nCSTEx0nh0nxZp0JzfVmJLM3PkzT1dkKI'@;
put 'MiPd+csjrABwjUFQIvsb8cEoen61vkmqLlySM9VXpLW9S65pVQRuJEACwSNAgRk8m3JGJHBXAviyz8vJMvU1N6wplZLCZZoklGG8mxAAuDF28674+B8zIGC9lLjH0nen1qa8VNtglr+v1DVKT28/WzbOgCPfQgJ+J0CB6XcLcvwkMAcCSYkJUrBksSYIFZlbgdbaRCwnPE4QmlZ0zuEU3DXgBEJj'@;
put 'KXG99PYPmCSdcxdrtEZlndQ3t7KrTsCvAU6PBKYjQIE5HRW+RgIOEnhA4+Iy0lJl+bIlJlmoWL2bDy7OlXR9Dd4oKzjp4XTw4giZMq4FKyohKFGfsqW9Uy6rlxJFz6/WN0vfwCC9lCHM+JAEXCRAgemi1TlnEpgBAQjOLC17VKjdhFYVL5cVBUuN4ExNSZZY7SgUKjjxmFvwCCCG0opJ3CNmF4Ky'@;
put 'raNLrmgsJQqfI+O7s7uPNViDZ37OiATmRIACc074uDMJuEMAghPicmn+IikuXGo8nVhSz8pIk8SEBJM0hLqbNkudNTj9dW1YMQkhCS8ltomJCeONhIfyakOz1NQ1mWzvnn71UKr3khsJkAAJ3I0ABebdyPB1EiCBexJAhnp2ZoYs1yx1LK0jnjMvN0sLwCdLgopOiBV4NyE6ITjp6bwn0oi84U4x'@;
put 'ieeTk5MyNDyifb77pKm1QwVlk/FOtnV0y8jYOG0XEcvwJCQQHAIUmMGxJWdCAlEnAKGSlBhv2lcuW5JnBCc8nrlZmaY0UrK2uUQCEcSm9XZSeIbPbLCHFZM2dhK8xzW7e3h0zIjJ5rYOaWhuM4k5EJMoJfQ1vZPhMwqPTAKOEKDAdMTQnCYJRJNAfFysZKanaomkbI3jXCRL8nLU05ltWlumJCdJ'@;
put 'ghaBh/DEFhrbCTGEzd6bJ/znNgJWROLeikg8BjN4JYdHRmVA4yY7u3tNMg4EZasKSTyHx/I642dv48knJEAC80OAAnN+OPIoJEAC90kAIigxId6URUJbS9wW6/I6vJ2LsrM03jNJ63PGSZwmFEE4WdEEAYobBJRdcg+qAMWc7YZwg9AbXrcicnxiUkbHxjRecsh4Jds6u6S9s0c6e3qlW+tODg6N'@;
put 'sJ+3Bcl7EiCBiBCgwIwIZp6EBEjgfgjEag/1m+IzWT2faZKtxeCzNZkIZZTS01KMKE1U8QkBivei5zrEV6ggs0IU57VC1N7bsURSmIaODefHeO09/g83+xpex9gQu3rt2jX1RE7JmIpItFccGBzWWpOD0t7VLT19A0ZEwkMJEQmhGck5mQnwHxIgARKYhgAF5jRQ+BIJkIC3CSzU5XQkGOGGzPZU'@;
put 'XWZPSU785rHGeiLeEyIV74EXFPvExcbIAwu0daF6RO1ysvUKWvEZej+dWMP/W0FoKVnxaAUi7u178H57g2DEkvS1qWvGo4je2xMqHkc1iQZdbxAXiWVrCEbcQzTi8Yi+Pqr/Pz4xZUSnPS/vSYAESMCrBCgwvWoZjosESGBeCCxcuMCIy9iYhcbTiXsIzjiNC41diNcW3hSqRqQmmQx4/D/EaXJS'@;
put 'wm1jwGspKlzhKYQAvKFeRgjJGzf+T8Xh6E2hqGJxSOMecYNAnND3jmu5nyn1REJM4jY5NSVTt0TmlJb8YR3R20DzCQmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQ'@;
put 'AAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfs'@;
put 'wdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4i+ZHtw4AAADdSURBVAAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAF'@;
put 'prfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8JUGD63oScAAmQAAmQAAmQAAl4iwAFprfswdGQAAmQAAmQAAmQgO8J/D97oVzdCcK8fgAAAABJRU5ErkJggg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=index.html;
filename filecode temp lrecl=32767;
data _null_;
file filecode;
put 'PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiLz4KICAgIDx0aXRsZT5EYXRhIENvbnRyb2xsZXI8L3RpdGxlPgogICAgPCEtLSA8YmFzZSBocmVmPSIvIj4gLS0+CgogICAgPCEtLSBtZXRhIHRhZ3MgLS0+CiAgICA8bWV0YSBuYW1lPSJk'@;
put 'ZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9Im5hbWUiIGNvbnRlbnQ9IkRhdGEgQ29udHJvbGxlciBmb3IgU0FTwq4iLz4KICAgIDxtZXRhIGl0ZW1wcm9wPSJkZXNjcmlwdGlvbiIgY29udGVudD0iQ2FwdHVy'@;
put 'ZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIvPgogICAgPG1ldGEgaXRlbXByb3A9ImltYWdlIiBjb250ZW50PSJodHRwczovL2RvY3MuZGF0YWNvbnRyb2xsZXIuaW8vaW1nL2RjX2JnX0Fzc2V0LTVAMngucG5nIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6dXJsIiBjb250ZW50PSJodHRwOi8v'@;
put 'ZGVtby5kYXRhY29udHJvbGxlci5pbyIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzp0aXRsZSIgY29udGVudD0iRGF0YSBDb250cm9sbGVyIGZvciBTQVPCriIvPgogICAgPG1ldGEgcHJvcGVydHk9Im9n'@;
put 'OmRlc2NyaXB0aW9uIiBjb250ZW50PSJDYXB0dXJlLCBSZXZpZXcsIGFuZCBBcHByb3ZlIi8+CiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9pbWcvZGNfYmdfQXNzZXQtNUAyeC5wbmciLz4KCiAgICA8bWV0YSBu'@;
put 'YW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSIvPgogICAgPGxpbmsgcmVsPSJpY29uIiB0eXBlPSJpbWFnZS94LWljb24iIGhy'@;
put 'ZWY9ImltYWdlcy9mYXZpY29uLmljbyIvPgogIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3R5bGVzLjc0ZjU2NWQ4YjhhZGE5N2UuY3NzIj48L2hlYWQ+CgogIDwhLS0KICAgICMjIFNBU0pTIEFkYXB0ZXIgY29uZmlnIGRldGFpbHMgIyMKCiAgICAqIGFwcExvYzogVGhlIGxvY2F0'@;
put 'aW9uIGluIG1ldGFkYXRhIG9yIFNBUyBkcml2ZSB3aGVyZSBEQyB3aWxsIGJlIGRlcGxveWVkCiAgICAqIHNlcnZlclR5cGU6IGVpdGhlciBTQVM5LCBTQVNWSVlBIG9yIFNBU0pTCiAgICAqIGxvZ2luTWVjaGFuaXNtOiBVc2UgJ0RlZmF1bHQnIGZvciByZWd1bGFyICh1c2VyL3Bhc3MpIGxv'@;
put 'Z2lucywgb3IgJ1JlZGlyZWN0ZWQnIGZvciAyRkEvU1NPCiAgICAqIGRlYnVnOiBXaGV0aGVyIHRvIGVuYWJsZSBkZWJ1ZyBvbiBzdGFydHVwCgogICAgIyMgVml5YSBvbmx5IHNldHRpbmdzICMjCiAgICAqIGFkbWluR3JvdXA6IFRoaXMgZ3JvdXAgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBh'@;
put 'Y2Nlc3MgKFZpeWEgT25seSkKICAgICogZGNQYXRoOiBUaGUgcGh5c2ljYWwgbG9jYXRpb24gaW4gd2hpY2ggdG8gZGVwbG95IHRoZSBzdGFnaW5nIGFyZWEgKFZpeWEgb25seSkKICAgICogdXNlQ29tcHV0ZUFwaTogQ29ubmVjdGlvbiBtZXRob2QgKFZpeWEgb25seSkKICAgICogY29udGV4'@;
put 'dE5hbWU6IENvbXB1dGUgQ29udGV4dCAoVml5YSBvbmx5KQoKICAtLT4KCiAgPHNhc2pzIHNlcnZlcnVybD0iIiBhcHBsb2M9Ii9QdWJsaWMvYXBwL2RjIiBzZXJ2ZXJ0eXBlPSJTQVNKUyIgbG9naW5tZWNoYW5pc209IkRlZmF1bHQiIGRlYnVnPSJmYWxzZSIgdXNlY29tcHV0ZWFwaT0idHJ1'@;
put 'ZSIgY29udGV4dG5hbWU9IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIgYWRtaW5ncm91cD0ic2VjLXNhczktcHJkLWludC1zYXNwbGF0Zm9ybS0zMDAxMTRzYXNqcyIgZGNwYXRoPSIvdG1wL2RjIiBob3RsaWNlbmNla2V5PSJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlv'@;
put 'biI+CiAgPC9zYXNqcz4KCiAgPGJvZHkgY2RzLXRoZW1lPSJsaWdodCIgY2xhc3M9Im0tMCI+CiAgICA8bXktYXBwPjwvbXktYXBwPgogIDxzY3JpcHQgc3JjPSJydW50aW1lLmYxMmZjNmYwM2IwMjYzNjAuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+PHNjcmlwdCBzcmM9InBvbHlmaWxs'@;
put 'cy5jNzM2NTFlOGVlNTkwODg1LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJzY3JpcHRzLmY0MThkN2U3MWRiZmQzMDkuanMiIGRlZmVyPjwvc2NyaXB0PjxzY3JpcHQgc3JjPSJtYWluLmYxZGIwZmFlYTIyOWFiOTEuanMiIHR5cGU9Im1vZHVsZSI+PC9zY3JpcHQ+'@;
put 'PC9ib2R5Pgo8L2h0bWw+Cg==';
run;
%mv_createfile(path=&appLoc/&path, name=&filename, inref=filecode, intype=BASE64)
filename filecode clear;
%let filename=main.f1db0faea229ab91.js;
filename filecode temp lrecl=12170000;
data _null_;
file filecode;
put 'KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbigkZSl7JGUuZXhwb3J0cz1mdW5jdGlvbihTZSl7dmFyIFI9e307ZnVuY3Rpb24gZWUoYil7aWYoUltiXSlyZXR1cm4g'@;
put 'UltiXS5leHBvcnRzO3ZhciBtPVJbYl09e2k6YixsOiExLGV4cG9ydHM6e319O3JldHVybiBTZVtiXS5jYWxsKG0uZXhwb3J0cyxtLG0uZXhwb3J0cyxlZSksbS5sPSEwLG0uZXhwb3J0c31yZXR1cm4gZWUubT1TZSxlZS5jPVIsZWUuZD1mdW5jdGlvbihiLG0sWCl7ZWUubyhiLG0pfHxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoYixtLHtlbnVtZXJhYmxlOiEwLGdldDpYfSl9LGVlLnI9ZnVuY3Rpb24oYil7dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShiLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sZWUudD1mdW5jdGlvbihiLG0pe2lmKDEmbSYmKGI9ZWUoYikpLDgmbXx8NCZtJiYib2JqZWN0Ij09dHlwZW9mIGImJmImJmIuX19lc01vZHVsZSlyZXR1cm4gYjt2YXIgWD1PYmplY3QuY3JlYXRlKG51bGwp'@;
put 'O2lmKGVlLnIoWCksT2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmJ9KSwyJm0mJiJzdHJpbmciIT10eXBlb2YgYilmb3IodmFyIHcgaW4gYillZS5kKFgsdyxmdW5jdGlvbihBKXtyZXR1cm4gYltBXX0uYmluZChudWxsLHcpKTtyZXR1cm4g'@;
put 'WH0sZWUubj1mdW5jdGlvbihiKXt2YXIgbT1iJiZiLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gYi5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBifTtyZXR1cm4gZWUuZChtLCJhIixtKSxtfSxlZS5vPWZ1bmN0aW9uKGIsbSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3du'@;
put 'UHJvcGVydHkuY2FsbChiLG0pfSxlZS5wPSIiLGVlKGVlLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog'@;
put 'ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5j'@;
put 'dGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ2xhcml0eUljb25zQXBpPXZvaWQgMDt2YXIgYj1lZSgKLyohIC4vdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIgKi8KIi4vcHJvamVjdHMvaWNv'@;
put 'bnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIiksbT17fSxYPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpe31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuc2luZ2xlSW5zdGFuY2V8fCh3LnNpbmds'@;
put 'ZUluc3RhbmNlPW5ldyB3KSx3LnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLHcucHJvdG90eXBlLnZhbGlkYXRlTmFtZT1mdW5jdGlvbihBKXtpZigwPT09QS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3QgYmUg'@;
put 'YSBub24tZW1wdHkgc3RyaW5nISIpO2lmKC9ccy8udGVzdChBKSl0aHJvdyBuZXcgRXJyb3IoIlNoYXBlIG5hbWUgb3IgYWxpYXMgbXVzdCBub3QgY29udGFpbiBhbnkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzISIpO3JldHVybiEwfSx3LnByb3RvdHlwZS5ub3JtYWxpemVTaGFwZU5hbWU9ZnVu'@;
put 'Y3Rpb24oQSl7cmV0dXJuIEEudG9Mb3dlckNhc2UoKX0sdy5wcm90b3R5cGUuc2V0SWNvblRlbXBsYXRlPWZ1bmN0aW9uKEEsRCl7dmFyIFA9RC50cmltKCk7dGhpcy52YWxpZGF0ZU5hbWUoQSkmJihBPXRoaXMubm9ybWFsaXplU2hhcGVOYW1lKEEpLG1bQV0mJmRlbGV0ZSBtW0FdLG1bQV09'@;
put 'UCxiLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5lbWl0Q2hhbmdlcyhBLFApKX0sdy5wcm90b3R5cGUuc2V0SWNvbkFsaWFzZXM9ZnVuY3Rpb24oQSxELFApe2Zvcih2YXIgVT0wLEk9UDtVPEkubGVuZ3RoO1UrKyl7dmFyIEU9SVtVXTt0aGlzLnZhbGlkYXRlTmFtZShFKSYmT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEEsRSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEFbRF19LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQSl7aWYoIm9iamVjdCIhPXR5cGVvZiBBKXRocm93IG5ldyBFcnJvcignVGhlIGFyZ3VtZW50'@;
put 'IG11c3QgYmUgYW4gb2JqZWN0IGxpdGVyYWwgcGFzc2VkIGluIHRoZSBmb2xsb3dpbmcgcGF0dGVybjpcbiAgICAgICAgICAgICAgICB7ICJzaGFwZS1uYW1lIjogInNoYXBlLXRlbXBsYXRlIiB9Jyk7Zm9yKHZhciBEIGluIEEpQS5oYXNPd25Qcm9wZXJ0eShEKSYmdGhpcy5zZXRJY29uVGVt'@;
put 'cGxhdGUoRCxBW0RdKX0sdy5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKEEpe3JldHVybiEhbVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShBKV19LHcucHJvdG90eXBlLmdldD1mdW5jdGlvbihBKXtpZighQSlyZXR1cm4gbTtpZigic3RyaW5nIiE9dHlwZW9mIEEpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cigiT25seSBzdHJpbmcgYXJndW1lbnQgaXMgYWxsb3dlZCBpbiB0aGlzIG1ldGhvZC4iKTtyZXR1cm4gbVt0aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShBKV19LHcucHJvdG90eXBlLmFsaWFzPWZ1bmN0aW9uKEEpe2lmKCJvYmplY3QiIT10eXBlb2YgQSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBh'@;
put 'cmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRlcmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6IFsiYWxpYXMtbmFtZSIsIC4uLl0gfScpO2Zvcih2YXIgRCBpbiBBKWlmKEEuaGFzT3duUHJvcGVydHkoRCkpe2lm'@;
put 'KCFtLmhhc093blByb3BlcnR5KEQpKXRocm93IG5ldyBFcnJvcignQW4gaWNvbiAiJytEKyJcIiB5b3UgYXJlIHRyeWluZyB0byBzZXQgYWxpYXNlcyB0byBkb2Vzbid0IGV4aXN0IGluIHRoZSBDbGFyaXR5IEljb25zIHNldHMhIik7dGhpcy5zZXRJY29uQWxpYXNlcyhtLEQsQVtEXSl9fSx3'@;
put 'fSgpO1IuQ2xhcml0eUljb25zQXBpPVh9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25z'@;
put 'L3NyYy9jbHItaWNvbnMtZWxlbWVudC50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ2xhcml0eUljb25FbGVtZW50PXZvaWQgMDt2YXIgYj1lZSgKLyohIC4vY2xyLWljb25zLWFwaSAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWFwaS50cyIpLG09ZWUoCi8qISAuL3V0aWxz'@;
put 'L3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLFg9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIEE9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBEKCl7dmFyIFA9QS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIFAuY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrWCxYKyssUH0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihBPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3RydWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLFIuQ2xhcml0eUljb25FbGVtZW50PUQsRC5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChELnByb3RvdHlwZT1PYmplY3QuY3Jl'@;
put 'YXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpEfX0pKS5jb25zdHJ1Y3Rvcj1ELEQucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBQPXcuY2xvbmVOb2RlKCExKTtQLmlkPXRo'@;
put 'aXMuY2xySWNvblVuaXFJZCxQLnRleHRDb250ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKFApfSxELnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oUCl7IU51bWJlcihQKXx8TnVtYmVyKFApPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlz'@;
put 'LnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5zdHlsZS53aWR0aD1QKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9UCsicHgiKX0sRC5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKFApe3JldHVybiBQLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEQucHJvdG90eXBlLmNv'@;
put 'bm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgVT10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMu'@;
put 'Y3VycmVudFNpemVBdHRyVmFsIT09VSYmKHRoaXMuY3VycmVudFNpemVBdHRyVmFsPVUsdGhpcy5fc2V0SWNvblNpemUoVSkpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgST10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhp'@;
put 'cy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhJLGZ1bmN0aW9uKEIpe1AuX2luamVjdFRlbXBsYXRlKEIpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPUksIWIuQ2xhcml0eUljb25zQXBpLmluc3RhbmNl'@;
put 'Lmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgRT1iLkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihFPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0'@;
put 'ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZT1FfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgaz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1rJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPWspLCF0'@;
put 'aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEQucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihQLFUsSSl7dmFyIEU9dGhpcztpZigic2l6ZSI9PT1QJiZ0aGlzLl9zZXRJY29uU2l6ZShJKSwic2hhcGUiPT09'@;
put 'UCl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKEkpLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1tLlNoYXBlVGVt'@;
put 'cGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oayl7RS5faW5qZWN0VGVtcGxhdGUoayl9KSksIWIuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lk'@;
put 'IHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPWIuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1QJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUksIXRoaXMuY3VycmVu'@;
put 'dFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEQucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxELnByb3RvdHlwZS5f'@;
put 'c2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24oKXt2YXIgUD10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksST10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO1A/UCYmUC5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmSS5zZXRBdHRyaWJ1dGUoImFyaWEt'@;
put 'bGFiZWxsZWRieSIsUCsiICIrdGhpcy5jbHJJY29uVW5pcUlkKTpJLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxELnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oUCl7UCYmUCE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUm'@;
put 'Jih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPVApLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRC5wcm90b3R5cGUu'@;
put 'X2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPWIuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMg'@;
put 'ZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5DbGFyaXR5SWNvbnM9dm9pZCAwO3ZhciBiPWVlKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2lj'@;
put 'b25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksbT1lZSgKLyohIC4vY2xyLWljb25zLWVsZW1lbnQgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1lbGVtZW50LnRzIiksWD1lZSgKLyohIC4vc2hhcGVzL2NvcmUtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFw'@;
put 'ZXMvY29yZS1zaGFwZXMudHMiKSx3PWIuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlO1IuQ2xhcml0eUljb25zPXcsdy5hZGQoWC5Db3JlU2hhcGVzKSx0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIil8fCh3aW5kb3cuQ2xhcml0eUljb25z'@;
put 'PXcpLGN1c3RvbUVsZW1lbnRzLmdldCgiY2xyLWljb24iKXx8Y3VzdG9tRWxlbWVudHMuZGVmaW5lKCJjbHItaWNvbiIsbS5DbGFyaXR5SWNvbkVsZW1lbnQpKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ29yZVNoYXBlcz1SLkNsclNoYXBlQXJyb3c9Ui5DbHJTaGFwZVN0ZXBGb3J3'@;
put 'YXJkMj1SLkNsclNoYXBlRXllSGlkZT1SLkNsclNoYXBlRXllPVIuQ2xyU2hhcGVFdmVudD1SLkNsclNoYXBlQ2FsZW5kYXI9Ui5DbHJTaGFwZUFuZ2xlRG91YmxlPVIuQ2xyU2hhcGVWaWV3Q29sdW1ucz1SLkNsclNoYXBlU2VhcmNoPVIuQ2xyU2hhcGVWbUJ1Zz1SLkNsclNoYXBlRmlsdGVy'@;
put 'R3JpZENpcmNsZT1SLkNsclNoYXBlRmlsdGVyR3JpZD1SLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD1SLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPVIuQ2xyU2hhcGVDbG91ZD1SLkNsclNoYXBlSW1hZ2U9Ui5DbHJTaGFwZUJlbGw9Ui5DbHJTaGFwZUZvbGRlck9wZW49Ui5DbHJTaGFw'@;
put 'ZUZvbGRlcj1SLkNsclNoYXBlQW5nbGU9Ui5DbHJTaGFwZVVzZXI9Ui5DbHJTaGFwZUJhcnM9Ui5DbHJTaGFwZUhlbHBJbmZvPVIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9Ui5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9Ui5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD1SLkNsclNoYXBlSW5mb1N0'@;
put 'YW5kYXJkPVIuQ2xyU2hhcGVJbmZvQ2lyY2xlPVIuQ2xyU2hhcGVDaGVja0NpcmNsZT1SLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9Ui5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9Ui5DbHJTaGFwZVRpbWVzPVIuQ2xyU2hhcGVDaGVjaz1SLkNsclNoYXBlQ29nPVIuQ2xyU2hhcGVI'@;
put 'b21lPVIuQ2xyU2hhcGVVbmtub3duU3RhdHVzPXZvaWQgMDt2YXIgYj1lZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09ZWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRv'@;
put 'ciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtSLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIy'@;
put 'Ni4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwx'@;
put 'MiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdD'@;
put 'MjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxSLkNsclNoYXBlSG9tZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwx'@;
put 'NWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYz'@;
put 'MmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4Ljcx'@;
put 'YTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAs'@;
put 'MiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksUi5DbHJTaGFwZUNvZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45'@;
put 'LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzIuOCwwLDUsMi4yLDUsNVMyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC42LTEuNWwxLjQtMi42YzAuMy0wLjYsMC4yLTEuNC0wLjMtMS45bC0yLjQtMi40Yy0wLjUtMC41LTEuMy0wLjYtMS45LTAuM2wtMi42LDEuNGwtMS41LTAuNmwtMC45LTIuOEMyMSwyLjUsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41'@;
put 'LTEuNCwxLjJMMTQsNmMtMC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40'@;
put 'YzAsMC43LDAuNSwxLjMsMS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4z'@;
put 'LTAuNSwxLjUtMS4xbDAuOS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTUuNiwzMy41LDE0Ljks'@;
put 'MzIuOCwxNC43eiBNMzIsMTkuNGwtMy42LDEuMUwyOC4zLDIxYy0wLjMsMC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4z'@;
put 'Yy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEuOGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4x'@;
put 'bDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0wLjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjVMMjEsNy43YzAuNywwLjIsMS40LDAuNSwyLjEsMC45bDAuNSwwLjNsMy4zLTEuOGwyLDJsLTEuOCwzLjNsMC4zLDAuNWMwLjQsMC43LDAuNywxLjQsMC45LDIuMWww'@;
put 'LjEsMC41bDMuNiwxLjFWMTkuNHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMS4xLDE4YzAsMy45LDMuMSw3LDcsN2MzLjksMCw3LTMuMSw3LTdzLTMuMS03LTctN0MxNC4y'@;
put 'LDExLDExLjEsMTQuMSwxMS4xLDE4eiBNMjMuMSwxOGMwLDIuOC0yLjIsNS01LDVjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVDMjAuOSwxMywyMy4xLDE1LjIsMjMuMSwxOHoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi44LDE0LjdMMzAsMTMuOGwtMC4xLTAuM2MtMC44LDAtMS42LTAuMi0yLjQtMC40YzAuMywwLjYsMC42LDEuMywwLjgsMS45bDAuMSwwLjVsMy42LDEuMXYyLjhsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAu'@;
put 'MywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41'@;
put 'Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwx'@;
put 'LjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuMywwLjUsMS45LDAuOGMtMC4zLTAuOC0wLjQtMS42LTAuNC0yLjVsLTAuNC0wLjJsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1'@;
put 'LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwy'@;
put 'LjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4z'@;
put 'LDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1h'@;
put 'bGVydGVkIiBkPSJNMzMuNywxNS40aC01LjN2MC4xbDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAuNSwwLjFMMTkuNCwz'@;
put 'MmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjItMC44LDAuNS0xLjUs'@;
put 'MC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNGwxLjQtMi4zbC0wLjYtMkMyMSwyLjQsMjAuNCwyLDE5LjcsMmgtMy40Yy0wLjcsMC0xLjMsMC41LTEuNCwxLjJMMTQsNmMt'@;
put 'MC42LDAuMS0xLjEsMC4zLTEuNiwwLjZMOS44LDUuMkM5LjIsNC45LDguNCw1LDcuOSw1LjVMNS41LDcuOUM1LDguNCw0LjksOS4yLDUuMiw5LjhsMS4zLDIuNWMtMC4yLDAuNS0wLjQsMS4xLTAuNiwxLjZsLTIuOCwwLjlDMi41LDE1LDIsMTUuNiwyLDE2LjN2My40YzAsMC43LDAuNSwxLjMs'@;
put 'MS4yLDEuNUw2LDIyLjFsMC42LDEuNWwtMS40LDIuNmMtMC4zLDAuNi0wLjIsMS40LDAuMywxLjlsMi40LDIuNGMwLjUsMC41LDEuMywwLjYsMS45LDAuM2wyLjYtMS40bDEuNSwwLjZsMC45LDIuOWMwLjIsMC42LDAuOCwxLjEsMS41LDEuMWgzLjRjMC43LDAsMS4zLTAuNSwxLjUtMS4xbDAu'@;
put 'OS0yLjlsMS41LTAuNmwyLjYsMS40YzAuNiwwLjMsMS40LDAuMiwxLjktMC4zbDIuNC0yLjRjMC41LTAuNSwwLjYtMS4zLDAuMy0xLjlsLTEuNC0yLjZsMC42LTEuNWwyLjktMC45YzAuNi0wLjIsMS4xLTAuOCwxLjEtMS41di0zLjRDMzQsMTYsMzMuOSwxNS43LDMzLjcsMTUuNHoiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTE4LjEsMjNjLTIuOCwwLTUtMi4yLTUtNXMyLjItNSw1LTVjMC4yLDAsMC41LDAsMC43LDAuMWMtMC4yLTAuNi0wLjMtMS4zLTAuMi0yaC0w'@;
put 'LjVjLTMuOSwwLTcsMy4xLTcsN2MwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03YzAtMC45LTAuMi0xLjgtMC41LTIuNmgtMi4yYzAuNSwwLjgsMC43LDEuNiwwLjcsMi41QzIzLjEsMjAuOCwyMC45LDIzLDE4LjEsMjN6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQsMC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAu'@;
put 'My0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjU3LDE1LjcybC0zLjM1LTFh'@;
put 'MTEuNjUsMTEuNjUsMCwwLDAtLjk1LTIuMzNsMS42NC0zLjA3YS42MS42MSwwLDAsMC0uMTEtLjcyTDI3LjQxLDYuMmEuNjEuNjEsMCwwLDAtLjcyLS4xMUwyMy42NCw3LjcyYTExLjYyLDExLjYyLDAsMCwwLTIuMzYtMWwtMS0zLjMxQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42'@;
put 'MSwwLDAsMC0uNTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYz'@;
put 'LjM4YS42MS42MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYx'@;
put 'LDAsMCwwLC41OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwu'@;
put 'OTUtMi4yOWwzLjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWk0xOCwyMy41QTUuNSw1LjUsMCwxLDEsMjMuNSwxOCw1LjUsNS41LDAsMCwxLDE4LDIzLjVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTEyLjEyLDEyLjEyLDAsMCwwLS40Ny0xLjMyLDcuNDksNy40OSwwLDAsMS02LjE0LTYuMTYsMTEuODIsMTEuODIsMCwwLDAtMS4zMy0uNDhsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTku'@;
put 'NjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42'@;
put 'MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMu'@;
put 'OTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEu'@;
put 'NjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVy'@;
put 'dGVkIiBkPSJNMzIuNTcsMTUuNzIsMzEuNSwxNS40SDIyLjg1QTUuNSw1LjUsMCwxLDEsMTgsMTIuNWE1LjUzLDUuNTMsMCwwLDEsLjY1LDBBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMi4wOS0zLjYyLS44Ni0yLjgzQS42MS42MSwwLDAsMCwxOS42OSwzSDE2LjMxYS42MS42MSwwLDAsMC0u'@;
put 'NTguNDNsLTEsMy4zYTExLjYzLDExLjYzLDAsMCwwLTIuMzgsMWwtMy0xLjYyYS42MS42MSwwLDAsMC0uNzIuMTFMNi4yLDguNTlhLjYxLjYxLDAsMCwwLS4xMS43MmwxLjYyLDNhMTEuNjMsMTEuNjMsMCwwLDAtMSwyLjM3bC0zLjMxLDFhLjYxLjYxLDAsMCwwLS40My41OHYzLjM4YS42MS42'@;
put 'MSwwLDAsMCwuNDMuNThsMy4zMywxYTExLjYyLDExLjYyLDAsMCwwLDEsMi4zM0w2LjA5LDI2LjY5YS42MS42MSwwLDAsMCwuMTEuNzJMOC41OSwyOS44YS42MS42MSwwLDAsMCwuNzIuMTFsMy4wOS0xLjY1YTExLjY1LDExLjY1LDAsMCwwLDIuMy45NGwxLDMuMzdhLjYxLjYxLDAsMCwwLC41'@;
put 'OC40M2gzLjM4YS42MS42MSwwLDAsMCwuNTgtLjQzbDEtMy4zOGExMS42MywxMS42MywwLDAsMCwyLjI4LS45NGwzLjExLDEuNjZhLjYxLjYxLDAsMCwwLC43Mi0uMTFsMi4zOS0yLjM5YS42MS42MSwwLDAsMCwuMTEtLjcybC0xLjY2LTMuMWExMS42MywxMS42MywwLDAsMCwuOTUtMi4yOWwz'@;
put 'LjM3LTFhLjYxLjYxLDAsMCwwLC40My0uNThWMTYuMzFBLjYxLjYxLDAsMCwwLDMyLjU3LDE1LjcyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwx'@;
put 'LjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxSLkNsclNoYXBlQ2hlY2s9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxSLkNsclNoYXBlVGltZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTku'@;
put 'NDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksUi5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEu'@;
put 'My0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwx'@;
put 'Ljk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0x'@;
put 'OCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxSLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x'@;
put 'OCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2Ex'@;
put 'LjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9'@;
put 'IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0z'@;
put 'LDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxSLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2'@;
put 'QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwt'@;
put 'NS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAs'@;
put 'MCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLFIuQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwx'@;
put 'LDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAs'@;
put 'MTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDEx'@;
put 'LjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxSLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSww'@;
put 'LDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgs'@;
put 'MTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEs'@;
put 'MTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxSLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwy'@;
put 'LDJaIi8+JyksUi5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgs'@;
put 'Mi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksUi5DbHJTaGFwZVdh'@;
put 'cm5pbmdTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xNS4wNjIwNzgy'@;
put 'LDEuNjgxMTk2IEMxNS42Mjk4ODE5LDAuNjQ5MjY2MzU1IDE2LjcxMDkwOTEsMC4wMTAyMjE5Mzk2IDE3Ljg4NSwwLjAxMDIyMTkzOTYgQzE5LjA1OTA5MDksMC4wMTAyMjE5Mzk2IDIwLjE0MDExODEsMC42NDkyNjYzNTUgMjAuNzA4NjQzMywxLjY4MjUyMTI5IEwzNC41OTg2NDQsMjcuMjQy'@;
put 'NTIyNSBDMzUuMTQwNzc0NiwyOC4yNDAxMzk3IDM1LjExNzQzNDUsMjkuNDQ5NTM3MyAzNC41MzcyMTYxLDMwLjQyNTQ5NDMgQzMzLjk1Njk5NzcsMzEuNDAxNDUxNCAzMi45MDU2NzEsMzEuOTk5Njk4NCAzMS43NywzMiBMNC4wMjIzOTMyMywzMS45OTk3NDkyIEMyLjg3NDA5MDA5LDMyLjAy'@;
put 'NTQ2OTkgMS43OTkwMjg0MywzMS40Mzc1NzUzIDEuMjAxMDYzMzUsMzAuNDU2OTEyNiBDMC42MDMwOTgyNjUsMjkuNDc2MjQ5OSAwLjU3Mjc3Nzg5OSwyOC4yNTEzMTc5IDEuMTIyMDc4MTgsMjcuMjQxMTk2IEwxNS4wNjIwNzgyLDEuNjgxMTk2IFogTTIuODc4NTA3NjcsMjguMTk3NzI4MiBD'@;
put 'Mi42NzA2MDk2NiwyOC41ODAwMzc2IDIuNjgyMDk3NSwyOS4wNDQxNDIzIDIuOTA4NjU1NywyOS40MTU2OTc3IEMzLjEzNTIxMzksMjkuNzg3MjUzMiAzLjU0MjUzNTQsMzAuMDA5OTk1OSA0LDMwIEwzMS43Njk3MzQ0LDMwIEMzMi4xOTk5MTkxLDI5Ljk5OTg4NTggMzIuNTk4MjQ3OCwyOS43'@;
put 'NzMyMjA4IDMyLjgxODA4MjEsMjkuNDAzNDQ4MiBDMzMuMDM3OTE2NCwyOS4wMzM2NzU3IDMzLjA0Njc1OTUsMjguNTc1NDU2NyAzMi44NDEzNTY3LDI4LjE5NzQ3ODcgTDE4Ljk1Mzg3MzksMi42NDIwODE5NSBDMTguNzM5NDIzNiwyLjI1MjM0NDM2IDE4LjMyOTg0MTksMi4wMTAyMjE5NCAx'@;
put 'Ny44ODUsMi4wMTAyMjE5NCBDMTcuNDQwNjg4OSwyLjAxMDIyMTk0IDE3LjAzMTU1MzgsMi4yNTE3NjY5MiAxNi44MTY4OTQ2LDIuNjQwNjg3NTMgTDIuODc4NTA3NjcsMjguMTk3NzI4MiBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIgZD0iTTM0LjYsMjkuMjEsMjAuNzEsMy42NWEzLjIyLDMuMjIsMCwwLDAtNS42NiwwTDEuMTcsMjkuMjFBMy4yMiwzLjIyLDAsMCwwLDQsMzRIMzEuNzdhMy4yMiwzLjIyLDAsMCwwLDIuODMtNC43NVpNMTYuNiwxMGExLjQsMS40LDAsMCwxLDIuOCwwdjEyYTEuNCwxLjQsMCww'@;
put 'LDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLFIuQ2xyU2hhcGVIZWxwSW5mbz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEt'@;
put 'Ni4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEuMTItMS0uNDMtMy40OS40Ni0xLjY2LDMuMzItOS40OCw0LTExLjM4bC0yLjE4LjI4Yy0uNjksMS44Ni0zLjI5LDguODQtMy43NiwxMC41OC0uNjgsMi40OS0uMzQsNC4zLDEuMDksNS41NkE1LjU5LDUuNTksMCwwLDAsMTUsMzRh'@;
put 'OS41Myw5LjUzLDAsMCwwLDMuNDUtLjdjMi43OS0xLjA5LDUuNzItNC4xMiw3LjI2LTYuNDdBMSwxLDAsMCwwLDI1LjM5LDI1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuMywxMWE0LjUsNC41LDAs'@;
put 'MSwwLTQuNS00LjVBNC41LDQuNSwwLDAsMCwxOS4zLDExWm0wLTdhMi41LDIuNSwwLDEsMS0yLjUsMi41QTIuNSwyLjUsMCwwLDEsMTkuMyw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuODEsMTVjLjA2'@;
put 'LDAsNi4yNy0uODIsNy43My0xLC42NS0uMSwxLjE0LDAsMS4zLjE1cy4yMS44LS4wNywxLjY4Yy0uNjEsMS44Ni0zLjY5LDExLTQuNTksMTMuNzFhOCw4LDAsMCwwLDEuMjktLjM4LDcuMzIsNy4zMiwwLDAsMCwxLjE1LS42QzE5Ljg1LDI1LDIyLjE1LDE4LjEsMjIuNjcsMTYuNTJzLjM5LTIu'@;
put 'NzgtLjMtMy42YTMuMTYsMy4xNiwwLDAsMC0zLjA4LS44M2MtMS40My4xNS03LjQ3Ljk0LTcuNzMsMWExLDEsMCwwLDAsLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIwLjc1IiBjeT0iNiIgcj0i'@;
put 'NCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC44NCwyNi4yM2ExLDEsMCwwLDAtMS40LjI5LDE2LjYsMTYuNiwwLDAsMS0zLjUxLDMuNzdjLS4zMy4yNS0xLjU2LDEuMi0yLjA4LDEtLjM2LS4xMS0uMTUtLjgyLS4w'@;
put 'OC0xLjEybC41My0xLjU3Yy4yMi0uNjQsNC4wNS0xMiw0LjQ3LTEzLjMuNjItMS45LjM1LTMuNzctMi40OC0zLjMyLS43Ny4wOC04LjU4LDEuMDktOC43MiwxLjFhMSwxLDAsMCwwLC4xMywyczMtLjM5LDMuMzMtLjQyYS44OC44OCwwLDAsMSwuODUuNDQsMi40NywyLjQ3LDAsMCwxLS4wNywx'@;
put 'LjcxYy0uMjYsMS00LjM3LDEyLjU4LTQuNSwxMy4yNWEyLjc4LDIuNzgsMCwwLDAsMS4xOCwzLDUsNSwwLDAsMCwzLjA4LjgzaDBhOC41Myw4LjUzLDAsMCwwLDMuMDktLjYyYzIuNDktMSw1LjA5LTMuNjYsNi40Ni01Ljc1QTEsMSwwLDAsMCwyNC44NCwyNi4yM1oiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZUJhcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxSLkNsclNoYXBlVXNlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEs'@;
put 'MTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0y'@;
put 'VjI1Ljc0QTIsMiwwLDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiww'@;
put 'LDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIsMGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDIwLDE0LjZhNSw1LDAsMSwxLDEuMjQtOC40MmwxLTEuNzZBNyw3LDAsMSwwLDE4LDE3WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRB'@;
put 'MS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMs'@;
put 'MEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1pNMTgsNWE1LDUsMCwxLDEtNSw1QTUsNSwwLDAsMSwxOCw1WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjEwIiByPSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjYxLDI0LjUyYTE3LjE2LDE3'@;
put 'LjE2LDAsMCwwLTI1LjIyLDAsMS41MSwxLjUxLDAsMCwwLS4zOSwxdjZBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41di02QTEuNTEsMS41MSwwLDAsMCwzMC42MSwyNC41MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDQuNDUtMS42aC0uMjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy4xNi01LjQ3QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41'@;
put 'LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxN2E3LDcsMCwwLDAsNi44NS01'@;
put 'LjU2LDcuNCw3LjQsMCwwLDEtMi4yNC02LjY5QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksUi5DbHJTaGFwZUFuZ2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4'@;
put 'LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxSLkNsclNoYXBlRm9sZGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBk'@;
put 'PSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlabTAsMjBINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSww'@;
put 'LDAsMCwuODEuNDFIMzBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNVYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAs'@;
put 'MCwwLC44MS40MWg4LjUxYTcuNSw3LjUsMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzAsMTUuNFYyOUg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCww'@;
put 'LDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsMTFWN2g2LjQ5bDIuNzIsNFoiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAs'@;
put 'NCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2'@;
put 'Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIzLjEzLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuNDksNy40OSww'@;
put 'LDAsMSwzMCwxMy41Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVG'@;
put 'b2xkZXJPcGVuPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0'@;
put 'TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIsMiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTkt'@;
put 'MTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjI5LTJIMTYu'@;
put 'NDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaTTI5LjU1LDI5SDYuOWwzLjg4LTEzLjgxYS42'@;
put 'Ni42NiwwLDAsMSwuMzgtLjI0SDMzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC0uM0wyOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNGg5LjQyQTMuNjcsMy42NywwLDAsMSwxOSwxMy41NmEzLjYz'@;
put 'LDMuNjMsMCwwLDEtLjI2LS41NkgxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWgyLjczQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5TDE5LjU2LDlIMTYuNDJMMTQuMTEsNS44MkEyLDIs'@;
put 'MCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMWExLjY4LDEuNjgsMCwwLDAsLjA3LS4zMkEzLjY3LDMuNjcsMCwwLDEsMzMuNjgsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUs'@;
put 'MS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFIMzJhMiwyLDAsMCwwLTItMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGEx'@;
put 'LDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY5LDMu'@;
put 'NjksMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5'@;
put 'SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRa'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMz'@;
put 'Ljg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDguNTJhNy40OSw3LjQ5LDAsMCwxLTEuMzEtMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAs'@;
put 'MCwwLDQsN1YyOS42OUExLjM3LDEuMzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xQTEuNjQsMS42NCwwLDAsMCwzNS4zMiwxMy43NFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksUi5DbHJTaGFwZUJlbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCww'@;
put 'LDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVBMTAuODEsMTAuODEsMCwwLDAsMTkuMjEsNC40VjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0'@;
put 'LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45MywxLDEsMCwwLDAtLjM0Ljc1djEuMzZhMSwxLDAsMCwwLDEsMWgyNy44YTEsMSwwLDAsMCwxLTFWMjguNThBMSwxLDAsMCwwLDMyLjUxLDI3LjgzWk01LjEzLDI4Ljk0YTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwxNC4yNCwwLDAs'@;
put 'MCwxLjY1LTUuODVWMTUuMTVhOC43NCw4Ljc0LDAsMSwxLDE3LjQ3LDB2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUuODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0x'@;
put 'OCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjUxLDI3Ljgz'@;
put 'QTE0LjQsMTQuNCwwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OSw3LjQ0LDcuNDQsMCwwLDEtMi4yNC0uODQsOC44OSw4Ljg5LDAsMCwxLC40LDIuNjR2NC45NGExNC4yNCwxNC4yNCwwLDAsMCwxLjY1LDUu'@;
put 'ODUsMTYuMTcsMTYuMTcsMCwwLDAsMi40NCwzSDUuMTNhMTYuMTcsMTYuMTcsMCwwLDAsMi40NC0zLDE0LjI0LDE0LjI0LDAsMCwwLDEuNjUtNS44NVYxNS4xNUE4LjgsOC44LDAsMCwxLDE4LDYuMzFhOC42MSw4LjYxLDAsMCwxLDQuNzYsMS40NEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YzAt'@;
put 'LjIxLDAtLjQyLDAtLjYzYTEwLjU4LDEwLjU4LDAsMCwwLTMuMzItMVYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwx'@;
put 'LDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFoMjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi44NSwyOC4xM2wtLjM0LS4zQTE0LjM3LDE0LjM3LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCww'@;
put 'LDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIu'@;
put 'OTNsLS4zNC4zdjIuODJIMzIuODVaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE1LjMyLDMyYTIuNjUsMi42NSwwLDAsMCw1LjI1LDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xOCwzNC4yOEEyLjY3LDIuNjcsMCwwLDAsMjAuNTgsMzJIMTUuMzJBMi42NywyLjY3LDAsMCwwLDE4LDM0LjI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNWExMC45MiwxMC45MiwwLDAsMC0uMTYtMS43OUE3LjUsNy41LDAsMCwxLDIyLjUsNmMwLS4yMSww'@;
put 'LS40MiwwLS42M2ExMC41NywxMC41NywwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3Yy'@;
put 'LjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxSLkNsclNoYXBlSW1hZ2U9KDAsbS5jbHJJY29uU1ZHKSgn'@;
put 'PHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwzMiw0Wk00LDMwVjZIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTguOTIsMTRhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC45MiwxNFptMC00LjZBMS42LDEuNiwwLDEsMSw3LjMzLDExLDEuNiwxLjYsMCwwLDEsOC45Miw5LjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y'@;
put 'Mi43OCwxNS4zN2wtNS40LDUuNC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEuMThsLTUuODEtNS44MUExLDEsMCwwLDAsMjIuNzgsMTUuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjkzLDExYTMsMywwLDEsMC0zLDNBMywzLDAsMCwwLDExLjkzLDExWm0tNC42LDBhMS42LDEuNiwwLDEsMSwxLjYsMS42QTEuNiwxLjYsMCwwLDEsNy4zMywxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjM4LDIwLjc3bC00LTRhMSwxLDAsMCwwLTEuNDEsMEw1LjkyLDIyLjl2Mi44M2w2Ljc5LTYuNzlMMTYsMjIuMThsLTMuNzUsMy43NUgxNWw4LjQ1LTguNDVMMzAsMjRWMjEu'@;
put 'MThsLTUuODEtNS44MWExLDEsMCwwLDAtMS40MSwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDRBMiwy'@;
put 'LDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt'@;
put 'MlY2QTIsMiwwLDAsMCwzMiw0Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1ptMjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ2LDcuNDYs'@;
put 'MCwwLDEsMzAsMTMuNVpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1YyMi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+'@;
put 'JyksUi5DbHJTaGFwZUNsb3VkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAuMTksMTAuMTksMCwwLDEs'@;
put 'MjAuMzMsMS4wNkExMC4wNywxMC4wNywwLDAsMSwyOSwxNi42NmE4LjI5LDguMjksMCwwLDEsNiw4QzM1LDI5LjEsMzEuMzMsMzMsMjcuMTQsMzNaTTE5LjA5LDYuMjNhOC4yNCw4LjI0LDAsMCwwLTguMTksOGwwLC44Ny0uODYuMUE3Ljk0LDcuOTQsMCwwLDAsMywyMy4xYzAsNCwzLjc3LDcu'@;
put 'OSw3LjYyLDcuOUgyNy4xNEMzMC4yMSwzMSwzMywyOCwzMywyNC42NWE2LjMxLDYuMzEsMCwwLDAtNS4zNy02LjI2bC0xLjE4LS4xOC4zOS0xLjEzQTguMTgsOC4xOCwwLDAsMCwxOS4wOSw2LjIzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5LDE2LjY2YTEwLjA3LDEwLjA3LDAsMCwwLC4yNS0yLjI0YzAtLjMzLDAtLjY1LDAtMWE3LjQ1LDcuNDUsMCwwLDEtMi4xLS41NCw4LDgsMCwwLDEtLjMsNC4xNmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCwwLDEs'@;
put 'NS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3YTguMjQsOC4yNCwwLDAsMSw4LjE5LThBOC4xMyw4LjEzLDAsMCwxLDIyLjU4LDdhNy41Myw3LjUzLDAs'@;
put 'MCwxLS4wOC0xLDcuNTEsNy41MSwwLDAsMSwuMDktMS4xMkExMC4xMywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1'@;
put 'QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTQsMTAuMTQsMCwwLDAsLjItMS4zaC0yYTguMjgsOC4yOCwwLDAsMS0uMzcsMS43MmwtLjM5LDEuMTMsMS4xOC4xOGE2LjMxLDYuMzEsMCww'@;
put 'LDEsNS4zNyw2LjI2QzMyLjk1LDI4LDMwLjE2LDMxLDI3LjA5LDMxSDEwLjU3Yy0zLjg0LDAtNy42Mi0zLjkxLTcuNjItNy45YTcuOTQsNy45NCwwLDAsMSw3LTcuODlsLjg2LS4xLDAtLjg3QTguMTYsOC4xNiwwLDAsMSwyMSw2LjQ3bDEtMS44QTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMu'@;
put 'MzZhMTAsMTAsMCwwLDAtOCw5Ljc1YzAsNS4wOSw0LjY3LDkuOSw5LjYyLDkuOUgyNy4wOWM0LjE5LDAsNy44Ni0zLjksNy44Ni04LjM1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwuMjUtMi4yNEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2LDEwLDEwLDAsMCwwLDEsMjMuMUMxLDI4LjE5LDUuNjIsMzMsMTAu'@;
put 'NTcsMzNIMjcuMDlDMzEuMjgsMzMsMzUsMjkuMSwzNSwyNC42NUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywx'@;
put 'MC4wNywwLDAsMCwuMjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NCw3LjQ0LDAsMCwxLTYuNi04LjU4QTEwLjEzLDEwLjEzLDAsMCwwLDE5LDQuMjMsMTAuMjYsMTAuMjYsMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5'@;
put 'QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjksMTYuNjZhMTAuMTUsMTAuMTUsMCwwLDAsLjItMS4yNmgtN0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OWwzLTUuMjFBMTAuMTks'@;
put 'MTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiLz4nKSxSLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIx'@;
put 'OCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBj'@;
put 'eT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksUi5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4y'@;
put 'MywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWww'@;
put 'LTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxSLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1'@;
put 'LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEu'@;
put 'NDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwz'@;
put 'MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41'@;
put 'LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksUi5DbHJTaGFwZVZtQnVnPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYi'@;
put 'IG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIu'@;
put 'MTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEu'@;
put 'MTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIu'@;
put 'NzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQs'@;
put 'MCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwx'@;
put 'LjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0u'@;
put 'NDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLFIuQ2xyU2hhcGVTZWFyY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwx'@;
put 'LDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03'@;
put 'LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLFIuQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5'@;
put 'YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksUi5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLFIuQ2xyU2hhcGVDYWxlbmRhcj0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMw'@;
put 'LjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIyMCIgeT0iMTQiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTYiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgeD0i'@;
put 'MjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMSIgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xNCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNSIgZD0iTTI2LDEwYTEsMSww'@;
put 'LDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgs'@;
put 'MCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiB4PSIyNiIg'@;
put 'eT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIHg9IjgiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC04LS1iYWRnZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgeD0iMjYiIHk9IjE5IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYmFkZ2VkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYmFkZ2Vk'@;
put 'IiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNC0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTE2LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBI'@;
put 'NFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjE0IiB5PSIxNCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'Ni0tYWxlcnRlZCIgeD0iMjAiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0i'@;
put 'MiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC05LS1hbGVydGVkIiB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWFsZXJ0ZWQi'@;
put 'IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMS0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2'@;
put 'IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMjUsNmgtNFY5YTIu'@;
put 'MiwyLjIsMCwxLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpN'@;
put 'MTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zIiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMCwx'@;
put 'MGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZI'@;
put 'MTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMCwxMy41Wk0xMCwyNkg4VjI0aDJabTAtNUg4'@;
put 'VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRoMlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNs'@;
put 'ZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCww'@;
put 'LDM0LDMwLjE5VjE1LjM4Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm02LDVIMjZWMjRoMlptMC01SDI2VjE5aDJaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYu'@;
put 'ODUsMS4xNFoiLz4nKSxSLkNsclNoYXBlRXZlbnQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcsMjNsOC42NC04LjY0YTEs'@;
put 'MSwwLDAsMSwxLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMi4yNSw2SDI5VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCww'@;
put 'LDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYz'@;
put 'QTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTMiIHk9IjYiIHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLTEuNDEtMS40MUwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMy0tYmFkZ2VkIiBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTTIyLjUsNkgxM1Y4aDkuNzhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'IiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMC44MSwyMC41bDUu'@;
put 'MzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAsLjIzLS40MUgyMy44TDE2LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0t'@;
put 'YWxlcnRlZCIgcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdW'@;
put 'NkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDAsMS00'@;
put 'LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0yNS45NCwxNi41OGwt'@;
put 'OS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgy'@;
put 'Ni4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCww'@;
put 'LDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHIt'@;
put 'aS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4x'@;
put 'OVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVFeWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44'@;
put 'Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEy'@;
put 'LjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCww'@;
put 'LDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4y'@;
put 'My05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44'@;
put 'LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxSLkNsclNoYXBlRXllSGlkZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYuNzksMCwwLDAtMi4zNy40'@;
put 'M0wxOCwxMy4yM2E0Ljc4LDQuNzgsMCwwLDEsLjc0LS4wNkE0Ljg3LDQuODcsMCwwLDEsMjMuNjIsMThhNC43OSw0Ljc5LDAsMCwxLS4wNi43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQuMjksMTcuNTNj'@;
put 'LTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwYTE2LjgyLDE2LjgyLDAsMCwwLTUuMjQuODVMMTQuODQsMTBhMTQuNzgsMTQuNzgsMCwwLDEsMy42My0uNDdjNS42MywwLDEwLjc1LDMuMTQsMTMuOCw4LjQzYTE3Ljc1LDE3Ljc1LDAsMCwxLTQuMzcsNS4xbDEuNDIsMS40MmExOS45MywxOS45'@;
put 'MywwLDAsMCw1LTZsLjI2LS40OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDku'@;
put 'MjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOS43NSw5Ljc1LDYuNjUsNi42NWE0LjgxLDQuODEsMCwwLDEtMi41LjcyQTQuODcsNC44NywwLDAsMSwxMy45LDE4LDQuODEsNC44MSwwLDAsMSwxNC42MiwxNS41M1ptLTEuNDUt'@;
put 'MS40NWE2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMzcsMTEuMTdBNi43OSw2Ljc5LDAsMCwwLDE2LDExLjZsOC44LDguOEE2Ljc4LDYuNzgsMCwwLDAsMjUuMjMsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjM3LDExLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43'@;
put 'NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNC44Nyw1Ljc4bDQuNDYsNC40NmExOS41MiwxOS41MiwwLDAsMC02LjY5'@;
put 'LDcuMjlMMi4zOCwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBhMTYuOTMsMTYuOTMsMCwwLDAsNy4zNy0xLjY5bDUsNSwxLjc1LTEuNS0yNi0yNlptOC4zLDguM2E2Ljg1LDYuODUsMCwwLDAsOS41NSw5LjU1bDEuNiwxLjZhMTQuOTEsMTQuOTEsMCwwLDEtNS44NiwxLjJj'@;
put 'LTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxSLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42'@;
put 'OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0i'@;
put 'TTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZUFycm93PSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+'@;
put 'JyksUi5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOlIuQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Ui5DbHJTaGFwZUhvbWUsY29nOlIuQ2xyU2hhcGVDb2csY2hlY2s6Ui5DbHJTaGFwZUNoZWNrLHRpbWVzOlIuQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOlIu'@;
put 'Q2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOlIuQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpSLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpSLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6'@;
put 'Ui5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Ui5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOlIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpSLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8i'@;
put 'OlIuQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOlIuQ2xyU2hhcGVCYXJzLHVzZXI6Ui5DbHJTaGFwZVVzZXIsYW5nbGU6Ui5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpSLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Ui5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpSLkNsclNoYXBlQmVsbCxpbWFn'@;
put 'ZTpSLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Ui5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpSLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Ui5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpSLkNsclNoYXBlRmls'@;
put 'dGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpSLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpSLkNsclNoYXBlVm1CdWcsc2VhcmNoOlIuQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Ui5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOlIuQ2xyU2hh'@;
put 'cGVBbmdsZURvdWJsZSxjYWxlbmRhcjpSLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Ui5DbHJTaGFwZUV2ZW50LGV5ZTpSLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Ui5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpSLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93OlIuQ2xyU2hh'@;
put 'cGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiaG91c2UiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShS'@;
put 'LkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywic3VjY2VzcyIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJjbG9zZSIsKDAsYi5kZXNjcmlwdG9y'@;
put 'Q29uZmlnKShSLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVT'@;
put 'aGFwZXMsImVycm9yIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJpbmZvIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlc1siaW5mby1jaXJjbGUi'@;
put 'XSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVTaGFwZXMsIm1lbnUiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hh'@;
put 'cGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJjYXJldCIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLGIuZGVzY3JpcHRvckNvbmZp'@;
put 'ZykoUi5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwo'@;
put 'MCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEq'@;
put 'XAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0'@;
put 'aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5kZXNjcmlwdG9yQ29uZmlnPXZvaWQgMCxSLmRlc2NyaXB0b3JDb25maWc9ZnVuY3Rpb24gYihtKXtyZXR1cm57'@;
put 'ZW51bWVyYWJsZTohMCx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6bX19fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc2hhcGUtdGVtcGxhdGUtb2JzZXJ2ZXIudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oU2UsUixlZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxSLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj1SLmNoYW5nZUhhbmRsZXJDYWxs'@;
put 'YmFja3M9dm9pZCAwLFIuY2hhbmdlSGFuZGxlckNhbGxiYWNrcz17fTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIG0oKXt0aGlzLmNhbGxiYWNrcz1SLmNoYW5nZUhhbmRsZXJDYWxsYmFja3N9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLCJpbnN0YW5jZSIse2dldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiBtLnNpbmdsZUluc3RhbmNlfHwobS5zaW5nbGVJbnN0YW5jZT1uZXcgbSksbS5zaW5nbGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxtLnByb3RvdHlwZS5zdWJzY3JpYmVUbz1mdW5jdGlvbihYLHcpe3ZhciBBPXRoaXM7cmV0dXJuIHRoaXMu'@;
put 'Y2FsbGJhY2tzW1hdPy0xPT09dGhpcy5jYWxsYmFja3NbWF0uaW5kZXhPZih3KSYmdGhpcy5jYWxsYmFja3NbWF0ucHVzaCh3KTp0aGlzLmNhbGxiYWNrc1tYXT1bd10sZnVuY3Rpb24oKXt2YXIgRD1BLmNhbGxiYWNrc1tYXS5pbmRleE9mKHcpO0EuY2FsbGJhY2tzW1hdLnNwbGljZShELDEp'@;
put 'LDA9PT1BLmNhbGxiYWNrc1tYXS5sZW5ndGgmJmRlbGV0ZSBBLmNhbGxiYWNrc1tYXX19LG0ucHJvdG90eXBlLmVtaXRDaGFuZ2VzPWZ1bmN0aW9uKFgsdyl7dGhpcy5jYWxsYmFja3NbWF0mJnRoaXMuY2FsbGJhY2tzW1hdLm1hcChmdW5jdGlvbihBKXtBKHcpfSl9LG19KCk7Ui5TaGFwZVRl'@;
put 'bXBsYXRlT2JzZXJ2ZXI9Yn0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUp'@;
put 'eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5jbHJJY29uU1ZHPXZvaWQgMDtSLmNsckljb25TVkc9ZnVuY3Rpb24gdyhBKXt2YXIgRD0iIjtyZXR1cm4gQS5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRCs9ImNhbi1iYWRn'@;
put 'ZSAiKSxBLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRCs9ImNhbi1hbGVydCAiKSxBLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihEKz0iaGFzLXNvbGlkICIpLChEPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRCsnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNw'@;
put 'ZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0Jv'@;
put 'eD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+Jykr'@;
put 'QSsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKCRlKXskZS5leHBvcnRzPWZ1bmN0aW9uKFNlKXt2YXIgUj17fTtmdW5jdGlvbiBlZShiKXtpZihSW2JdKXJldHVybiBSW2JdLmV4cG9ydHM7dmFyIG09UltiXT17aTpiLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIFNlW2JdLmNhbGwobS5l'@;
put 'eHBvcnRzLG0sbS5leHBvcnRzLGVlKSxtLmw9ITAsbS5leHBvcnRzfXJldHVybiBlZS5tPVNlLGVlLmM9UixlZS5kPWZ1bmN0aW9uKGIsbSxYKXtlZS5vKGIsbSl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShiLG0se2VudW1lcmFibGU6ITAsZ2V0Olh9KX0sZWUucj1mdW5jdGlvbihiKXt0eXBl'@;
put 'b2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxlZS50PWZ1bmN0aW9uKGIsbSl7'@;
put 'aWYoMSZtJiYoYj1lZShiKSksOCZtfHw0Jm0mJiJvYmplY3QiPT10eXBlb2YgYiYmYiYmYi5fX2VzTW9kdWxlKXJldHVybiBiO3ZhciBYPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoZWUucihYKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWCwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6'@;
put 'Yn0pLDImbSYmInN0cmluZyIhPXR5cGVvZiBiKWZvcih2YXIgdyBpbiBiKWVlLmQoWCx3LGZ1bmN0aW9uKEEpe3JldHVybiBiW0FdfS5iaW5kKG51bGwsdykpO3JldHVybiBYfSxlZS5uPWZ1bmN0aW9uKGIpe3ZhciBtPWImJmIuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBiLmRlZmF1'@;
put 'bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGJ9O3JldHVybiBlZS5kKG0sImEiLG0pLG19LGVlLm89ZnVuY3Rpb24oYixtKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsbSl9LGVlLnA9IiIsZWUoZWUucz0iLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2Fs'@;
put 'bC1zaGFwZXMudHMiKX0oeyIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvYWxsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFw'@;
put 'ZXMvYWxsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQWxsU2hhcGVzPXZvaWQgMDt2YXIgYj1lZSgKLyohIC4vY2hhcnQtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzIiksbT1lZSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICov'@;
put 'CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksWD1lZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpLHc9ZWUoCi8qISAuL2Vzc2VudGlhbC1zaGFwZXMgKi8KIi4vcHJvamVj'@;
put 'dHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIiksQT1lZSgKLyohIC4vbWVkaWEtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRD1lZSgKLyohIC4vc29jaWFsLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9z'@;
put 'cmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiKSxQPWVlKAovKiEgLi90ZWNobm9sb2d5LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzIiksVT1lZSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9z'@;
put 'cmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxJPWVlKAovKiEgLi90cmF2ZWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyIpLEU9W1guQ29yZVNoYXBlcyxtLkNvbW1lcmNlU2hhcGVzLHcuRXNzZW50aWFsU2hhcGVzLEEuTWVk'@;
put 'aWFTaGFwZXMsRC5Tb2NpYWxTaGFwZXMsUC5UZWNobm9sb2d5U2hhcGVzLEkuVHJhdmVsU2hhcGVzLGIuQ2hhcnRTaGFwZXMsVS5UZXh0RWRpdFNoYXBlc10saz17fTtSLkFsbFNoYXBlcz1rO2Zvcih2YXIgQj0wLE49RTtCPE4ubGVuZ3RoO0IrKyl7dmFyIFY9TltCXTtmb3IodmFyIFogaW4g'@;
put 'VilWLmhhc093blByb3BlcnR5KFopJiYoa1taXT1WW1pdKX10eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoayl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRz'@;
put 'IjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5DaGFydFNoYXBlcz1S'@;
put 'LkNsclNoYXBlQmVsbEN1cnZlPVIuQ2xyU2hhcGVUaWNrQ2hhcnQ9Ui5DbHJTaGFwZVNjYXR0ZXJQbG90PVIuQ2xyU2hhcGVQaWVDaGFydD1SLkNsclNoYXBlTGluZUNoYXJ0PVIuQ2xyU2hhcGVIZWF0TWFwPVIuQ2xyU2hhcGVHcmlkQ2hhcnQ9Ui5DbHJTaGFwZUN1cnZlQ2hhcnQ9Ui5DbHJT'@;
put 'aGFwZUNsb3VkQ2hhcnQ9Ui5DbHJTaGFwZUJ1YmJsZUNoYXJ0PVIuQ2xyU2hhcGVCb3hQbG90PVIuQ2xyU2hhcGVCYXJDaGFydD1SLkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgYj1lZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3Ny'@;
put 'Yy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09ZWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtSLkNsclNoYXBlQXhpc0NoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0'@;
put 'IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1Ljgg'@;
put 'MjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1'@;
put 'IDM0IDUuODk2IDM0IDcgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3'@;
put 'IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMg'@;
put 'MjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkg'@;
put 'TCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0gNi4wMDcgMjYuNzMxIEwgMjcuNzMgMjYuNzMgQyAyOC40OSAyNi42'@;
put 'NyAyOC45MSAyNS44IDI4LjQ3IDI1LjE3IEMgMjguMyAyNC45MiAyOC4wMyAyNC43NiAyNy43MyAyNC43NCBMIDguMDAxIDI0LjczNiBMIDguMDEgMTEuMDEgQyA4LjAxIDEwLjIzIDcuMTcgOS43NSA2LjUgMTAuMTQgQyA2LjE5IDEwLjMxIDYgMTAuNjUgNiAxMS4wMSBMIDYuMDA3IDI2Ljcz'@;
put 'MSBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIxLjk2OSA5LjIzMyAyNS4wNSAxMy4xIDI5LjMxIDEz'@;
put 'LjQ2IEwgMzAuMzIgMTMuNDggQyAzMS42MjYgMTMuNDI5IDMyLjg5NSAxMy4wMzYgMzQgMTIuMzQgWiBNIDYuMDA3IDI2LjczMSBMIDI3LjczIDI2LjczIEMgMjguNDkgMjYuNjcgMjguOTEgMjUuOCAyOC40NyAyNS4xNyBDIDI4LjMgMjQuOTIgMjguMDMgMjQuNzYgMjcuNzMgMjQuNzQgTCA4'@;
put 'LjAwMSAyNC43MzYgTCA4LjAxIDExLjAxIEMgOC4wMSAxMC4yMyA3LjE3IDkuNzUgNi41IDEwLjE0IEMgNi4xOSAxMC4zMSA2IDEwLjY1IDYgMTEuMDEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJh'@;
put 'ZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAy'@;
put 'IDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgZD0iTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwgOC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1'@;
put 'IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIEwgNi4wMDcgMjYuNzMxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEu'@;
put 'MTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44'@;
put 'MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4z'@;
put 'NTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA2LjAwNyAyNi43MzEgTCAyNy43MyAyNi43MyBDIDI4LjQ5IDI2LjY3IDI4LjkxIDI1LjggMjguNDcgMjUuMTcgQyAyOC4zIDI0LjkyIDI4LjAzIDI0Ljc2IDI3LjczIDI0Ljc0IEwg'@;
put 'OC4wMDEgMjQuNzM2IEwgOC4wMSAxMS4wMSBDIDguMDEgMTAuMjMgNy4xNyA5Ljc1IDYuNSAxMC4xNCBDIDYuMTkgMTAuMzEgNiAxMC42NSA2IDExLjAxIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1h'@;
put 'bGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMx'@;
put 'OSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz4nKSxSLkNsclNoYXBlQmFyQ2hhcnQ9KDAsbS5jbHJJY29uU1ZHKSgn'@;
put 'XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0i'@;
put 'TSA3IDEwIEwgMTMgMTAgTCAxMyAyNiBMIDExLjQgMjYgTCAxMS40IDExLjYgTCA4LjYgMTEuNiBMIDguNiAyNiBMIDcgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAx'@;
put 'OS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAyNiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjMgMTYgTCAyOSAxNiBMIDI5IDI2IEwgMjcuNCAyNiBMIDI3LjQgMTcuNiBMIDI0'@;
put 'LjYgMTcuNiBMIDI0LjYgMjYgTCAyMyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUg'@;
put 'MzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTUgMzQgNyBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEwIFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAx'@;
put 'OSBaIE0gMjMgMjYgTCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIu'@;
put 'NTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDQgMzQgMjkgTCAz'@;
put 'NCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDcgMTAgTCAxMyAxMCBMIDEzIDI2IEwgMTEuNCAyNiBMIDExLjQgMTEuNiBMIDguNiAxMS42IEwgOC42IDI2IEwgNyAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxOSBMIDIxIDE5IEwgMjEgMjYgTCAxOS40IDI2IEwgMTkuNCAyMC42IEwgMTYuNiAyMC42IEwgMTYuNiAyNiBMIDE1IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNC0tYmFkZ2VkIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMg'@;
put 'MjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNSAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gNyAyNiBMIDEzIDI2IEwgMTMgMTAgTCA3IDEwIFogTSAxNSAyNiBMIDIxIDI2IEwgMjEgMTkgTCAxNSAxOSBaIE0gMjMgMjYg'@;
put 'TCAyOSAyNiBMIDI5IDE2IEwgMjMgMTYgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43'@;
put 'ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMCBMIDEzIDEwIEwgMTMgMjYgTCAxMS40IDI2IEwgMTEuNCAxMS42IEwgOC42IDExLjYgTCA4LjYgMjYgTCA3IDI2IFoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTUgMTkgTCAyMSAxOSBMIDIxIDI2IEwgMTkuNCAyNiBMIDE5LjQgMjAuNiBMIDE2LjYgMjAuNiBMIDE2LjYgMjYgTCAxNSAyNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDIzIDE2IEwgMjkgMTYgTCAyOSAyNiBMIDI3LjQgMjYgTCAyNy40IDE3LjYgTCAyNC42IDE3LjYgTCAyNC42IDI2IEwgMjMgMjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3'@;
put 'OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDEx'@;
put 'LjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAz'@;
put 'NCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEzLjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQg'@;
put 'MTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSA3IDI2IEwgMTMgMjYgTCAxMyAxMCBMIDcgMTAgWiBNIDE1IDI2IEwgMjEgMjYgTCAyMSAxOSBMIDE1IDE5IFogTSAyMyAyNiBMIDI5IDI2IEwgMjkgMTYgTCAyMyAxNiBaIj48L3BhdGg+XG4gIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAy'@;
put 'Mi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4'@;
put 'IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksUi5DbHJTaGFwZUJveFBsb3Q9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgz'@;
put 'MmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsMjlWN0gzMlYyOVoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDEyIEwgMTcgMTIgTCAxNyAyNiBMIDcgMjYgTCA3IDEyIFogTSA4LjYgMjQuNCBMIDE1LjQgMjQuNCBMIDE1LjQgMTguOCBMIDguNiAxOC44IEwgOC42IDI0LjQg'@;
put 'WiBNIDE1LjQgMTMuNiBMIDguNiAxMy42IEwgOC42IDE3LjIgTCAxNS40IDE3LjIgTCAxNS40IDEzLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxOSAyNCBMIDI5IDI0IEwgMjkgMTAgTCAxOSAxMCBMIDE5IDI0'@;
put 'IFogTSAyMC42IDExLjYgTCAyNy40IDExLjYgTCAyNy40IDE3LjIgTCAyMC42IDE3LjIgTCAyMC42IDExLjYgWiBNIDI3LjQgMjIuNCBMIDIwLjYgMjIuNCBMIDIwLjYgMTguOCBMIDI3LjQgMTguOCBMIDI3LjQgMjIuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0'@;
put 'IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTUgMzQgNyBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMTkgMjQgTCAyOSAyNCBMIDI5IDEwIEwgMTkgMTAg'@;
put 'WiBNIDIxIDEyIEwgMjcgMTIgTCAyNyAxNyBMIDIxIDE3IFogTSAyNyAyMiBMIDIxIDIyIEwgMjEgMTkgTCAyNyAxOSBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMy'@;
put 'IDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMx'@;
put 'IEMgMzMuMTA1IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBMIDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAx'@;
put 'NS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAxNy4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8'@;
put 'cGF0aCBkPSJNIDE5IDEwIEwgMjMuNzI4IDEwIEMgMjQuMTA1IDEwLjU5NiAyNC41NjQgMTEuMTM1IDI1LjA5IDExLjYgTCAyMC42IDExLjYgTCAyMC42IDE3LjIgTCAyNy40IDE3LjIgTCAyNy40IDEyLjk4NyBDIDI3LjkwOSAxMy4xNzcgMjguNDQ1IDEzLjMxMyAyOSAxMy4zODcgTCAyOSAy'@;
put 'NCBMIDE5IDI0IFogTSAyNy40IDE4LjggTCAyMC42IDE4LjggTCAyMC42IDIyLjQgTCAyNy40IDIyLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBD'@;
put 'IDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMi41NyA1IEMgMjIuMzEyIDYuODE3IDIyLjczMiA4LjU2NiAyMy42MzMgMTAgTCAxOSAxMCBMIDE5IDI0IEwgMjkgMjQgTCAyOSAx'@;
put 'My40MjcgQyAyOS4xMDMgMTMuNDQgMjkuMjA2IDEzLjQ1MSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSA3IDI2IEwgMTcgMjYgTCAxNyAxMiBMIDcgMTIgWiBNIDkgMTkgTCAxNSAxOSBMIDE1IDI0IEwgOSAyNCBa'@;
put 'IE0gMTUgMTcgTCA5IDE3IEwgOSAxNCBMIDE1IDE0IFogTSAyMSAxMiBMIDI1LjQ3MiAxMiBDIDI1Ljk0IDEyLjM1MiAyNi40NTIgMTIuNjUgMjcgMTIuODg1IEwgMjcgMTcgTCAyMSAxNyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQi'@;
put 'IGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1'@;
put 'NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMiBMIDE3IDEyIEwgMTcgMjYgTCA3IDI2IEwgNyAxMiBaIE0gOC42IDI0LjQgTCAxNS40IDI0LjQgTCAxNS40IDE4LjggTCA4LjYgMTguOCBMIDguNiAyNC40IFogTSAxNS40IDEzLjYgTCA4LjYgMTMuNiBMIDguNiAxNy4yIEwgMTUuNCAx'@;
put 'Ny4yIEwgMTUuNCAxMy42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMjQgTCAxOSAyNCBMIDE5IDE1LjM0NSBDIDE5LjAyMSAxNS4zNDggMjAuNiAxNS4zNiAyMC42IDE1LjM2'@;
put 'IEwgMjAuNiAxNy4yIEwgMjcuNCAxNy4yIEwgMjcuNCAxNS4zNiBMIDI5IDE1LjM1NyBMIDI5IDI0IFogTSAyNy40IDE4LjggTCAyMC42IDE4LjggTCAyMC42IDIyLjQgTCAyNy40IDIyLjQgTCAyNy40IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMtLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0'@;
put 'IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEu'@;
put 'MDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1'@;
put 'IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAxOS4wMjggMTAgTCAxOSAxMCBMIDE5IDEwLjA0OCBMIDE3LjYyNSAxMi4zOTUgQyAxNi44MDcgMTMuNTgzIDE3LjU3MSAxNS4xOTcgMTkgMTUu'@;
put 'MzQ1IEwgMTkgMjQgTCAyOSAyNCBMIDI5IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNyAyNiBMIDE3IDI2IEwgMTcgMTIgTCA3IDEyIFogTSA5IDE5IEwgMTUgMTkgTCAxNSAyNCBMIDkgMjQgWiBNIDE1IDE3IEwgOSAxNyBMIDkgMTQgTCAxNSAxNCBaIE0gMjcgMTcgTCAyMSAxNyBMIDIxIDE1'@;
put 'LjM1NyBMIDI3IDE1LjM1NyBaIE0gMjcgMjIgTCAyMSAyMiBMIDIxIDE5IEwgMjcgMTkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEz'@;
put 'NCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0'@;
put 'IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLFIuQ2xyU2hhcGVCdWJibGVDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAz'@;
put 'MiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyOSAxOCBDIDI5IDE5LjY1NyAyNy42NTcgMjEgMjYgMjEgQyAyNC4zNDMgMjEgMjMgMTkuNjU3IDIzIDE4IEMgMjMgMTYuMzQzIDI0LjM0MyAxNSAyNiAxNSBDIDI3LjY1NyAxNSAyOSAx'@;
put 'Ni4zNDMgMjkgMTggWiBNIDI2IDE2LjYgQyAyNS4yMjcgMTYuNiAyNC42IDE3LjIyNyAyNC42IDE4IEMgMjQuNiAxOC43NzMgMjUuMjI3IDE5LjQgMjYgMTkuNCBDIDI2Ljc3MyAxOS40IDI3LjQgMTguNzczIDI3LjQgMTggQyAyNy40IDE3LjIyNyAyNi43NzMgMTYuNiAyNiAxNi42IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAxMSAxMCBDIDEzLjIwOSAx'@;
put 'MCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUgOC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDExLjYgMTEgMTEuNiBaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMSAyMyBDIDIxIDI0LjY1NyAxOS42NTcgMjYgMTggMjYgQyAxNi4zNDMgMjYgMTUgMjQuNjU3IDE1IDIzIEMgMTUgMjEuMzQzIDE2LjM0MyAyMCAxOCAyMCBDIDE5'@;
put 'LjY1NyAyMCAyMSAyMS4zNDMgMjEgMjMgWiBNIDE4IDIxLjYgQyAxNy4yMjcgMjEuNiAxNi42IDIyLjIyNyAxNi42IDIzIEMgMTYuNiAyMy43NzMgMTcuMjI3IDI0LjQgMTggMjQuNCBDIDE4Ljc3MyAyNC40IDE5LjQgMjMuNzczIDE5LjQgMjMgQyAxOS40IDIyLjIyNyAxOC43NzMgMjEuNiAx'@;
put 'OCAyMS42IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiByeD0iMyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0'@;
put 'IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gMTEgMTAgQyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTggQyAxMy4yMDkgMTggMTUg'@;
put 'MTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMjYgMTUgQyAyNC4zNDMgMTUgMjMgMTYuMzQzIDIzIDE4IEMgMjMgMTkuNjU3IDI0LjM0MyAyMSAyNiAyMSBDIDI3LjY1NyAyMSAyOSAxOS42NTcgMjkgMTggQyAyOSAxNi4zNDMgMjcuNjU3IDE1IDI2IDE1IFog'@;
put 'TSAxOCAyMCBDIDE2LjM0MyAyMCAxNSAyMS4zNDMgMTUgMjMgQyAxNSAyNC42NTcgMTYuMzQzIDI2IDE4IDI2IEMgMTkuNjU3IDI2IDIxIDI0LjY1NyAyMSAyMyBDIDIxIDIxLjM0MyAxOS42NTcgMjAgMTggMjAgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFk'@;
put 'Z2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1'@;
put 'IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDI5IDE4IEMgMjkg'@;
put 'MTkuNjU3IDI3LjY1NyAyMSAyNiAyMSBDIDI0LjM0MyAyMSAyMyAxOS42NTcgMjMgMTggQyAyMyAxNi4zNDMgMjQuMzQzIDE1IDI2IDE1IEMgMjcuNjU3IDE1IDI5IDE2LjM0MyAyOSAxOCBaIE0gMjYgMTYuNiBDIDI1LjIyNyAxNi42IDI0LjYgMTcuMjI3IDI0LjYgMTggQyAyNC42IDE4Ljc3'@;
put 'MyAyNS4yMjcgMTkuNCAyNiAxOS40IEMgMjYuNzczIDE5LjQgMjcuNCAxOC43NzMgMjcuNCAxOCBDIDI3LjQgMTcuMjI3IDI2Ljc3MyAxNi42IDI2IDE2LjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiByeD0iMyI+PC9wYXRo'@;
put 'PlxuICA8cGF0aCBkPSJNIDE1IDE0IEMgMTUgMTYuMjA5IDEzLjIwOSAxOCAxMSAxOCBDIDguNzkxIDE4IDcgMTYuMjA5IDcgMTQgQyA3IDExLjc5MSA4Ljc5MSAxMCAxMSAxMCBDIDEzLjIwOSAxMCAxNSAxMS43OTEgMTUgMTQgWiBNIDExIDExLjYgQyA5LjY3NSAxMS42IDguNiAxMi42NzUg'@;
put 'OC42IDE0IEMgOC42IDE1LjMyNSA5LjY3NSAxNi40IDExIDE2LjQgQyAxMi4zMjUgMTYuNCAxMy40IDE1LjMyNSAxMy40IDE0IEMgMTMuNCAxMi42NzUgMTIuMzI1IDExLjYgMTEgMTEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn'@;
put 'ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMgQyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMg'@;
put 'MTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYgMjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTggMjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0'@;
put 'IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTEgMTAgQyA4Ljc5MSAxMCA3IDExLjc5MSA3IDE0IEMgNyAxNi4yMDkgOC43OTEgMTggMTEgMTgg'@;
put 'QyAxMy4yMDkgMTggMTUgMTYuMjA5IDE1IDE0IEMgMTUgMTEuNzkxIDEzLjIwOSAxMCAxMSAxMCBaIE0gMjYgMTUgQyAyNC4zNDMgMTUgMjMgMTYuMzQzIDIzIDE4IEMgMjMgMTkuNjU3IDI0LjM0MyAyMSAyNiAyMSBDIDI3LjY1NyAyMSAyOSAxOS42NTcgMjkgMTggQyAyOSAxNi4zNDMgMjcu'@;
put 'NjU3IDE1IDI2IDE1IFogTSAxOCAyMCBDIDE2LjM0MyAyMCAxNSAyMS4zNDMgMTUgMjMgQyAxNSAyNC42NTcgMTYuMzQzIDI2IDE4IDI2IEMgMTkuNjU3IDI2IDIxIDI0LjY1NyAyMSAyMyBDIDIxIDIxLjM0MyAxOS42NTcgMjAgMTggMjAgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0g'@;
put 'MzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48'@;
put 'L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjkgMTggQyAyOSAxOS42NTcgMjcuNjU3IDIxIDI2IDIxIEMgMjQuMzQzIDIxIDIzIDE5LjY1NyAyMyAxOCBDIDIzIDE2LjM0MyAyNC4zNDMgMTUgMjYgMTUgQyAyNy42NTcgMTUgMjkgMTYuMzQzIDI5IDE4IFogTSAyNiAxNi42IEMgMjUuMjI3IDE2LjYg'@;
put 'MjQuNiAxNy4yMjcgMjQuNiAxOCBDIDI0LjYgMTguNzczIDI1LjIyNyAxOS40IDI2IDE5LjQgQyAyNi43NzMgMTkuNCAyNy40IDE4Ljc3MyAyNy40IDE4IEMgMjcuNCAxNy4yMjcgMjYuNzczIDE2LjYgMjYgMTYuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMi0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNSAxNCBDIDE1IDE2LjIwOSAxMy4yMDkgMTggMTEgMTggQyA4Ljc5MSAxOCA3IDE2LjIwOSA3IDE0IEMgNyAxMS43OTEgOC43OTEgMTAgMTEgMTAgQyAxMy4yMDkgMTAgMTUgMTEuNzkxIDE1IDE0IFog'@;
put 'TSAxMSAxMS42IEMgOS42NzUgMTEuNiA4LjYgMTIuNjc1IDguNiAxNCBDIDguNiAxNS4zMjUgOS42NzUgMTYuNCAxMSAxNi40IEMgMTIuMzI1IDE2LjQgMTMuNCAxNS4zMjUgMTMuNCAxNCBDIDEzLjQgMTIuNjc1IDEyLjMyNSAxMS42IDExIDExLjYgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHJ4PSIzIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjEgMjMgQyAyMSAyNC42NTcgMTkuNjU3IDI2IDE4IDI2IEMgMTYuMzQzIDI2IDE1IDI0LjY1NyAxNSAyMyBDIDE1IDIxLjM0MyAxNi4zNDMgMjAgMTggMjAgQyAxOS42'@;
put 'NTcgMjAgMjEgMjEuMzQzIDIxIDIzIFogTSAxOCAyMS42IEMgMTcuMjI3IDIxLjYgMTYuNiAyMi4yMjcgMTYuNiAyMyBDIDE2LjYgMjMuNzczIDE3LjIyNyAyNC40IDE4IDI0LjQgQyAxOC43NzMgMjQuNCAxOS40IDIzLjc3MyAxOS40IDIzIEMgMTkuNCAyMi4yMjcgMTguNzczIDIxLjYgMTgg'@;
put 'MjEuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgcng9IjMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQi'@;
put 'IGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEu'@;
put 'OTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjEuOTU4IDUgTCAxNy42MjUgMTIuMzk1IEMgMTYuNzk1IDEz'@;
put 'LjYwMSAxNy41OTQgMTUuMjQ1IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjQuNTc5IDE1LjM1NyBDIDIzLjYzOSAxNS44NjMgMjMgMTYuODU3IDIzIDE4IEMgMjMgMTkuNjU3IDI0LjM0MyAyMSAyNiAyMSBDIDI3LjY1NyAyMSAy'@;
put 'OSAxOS42NTcgMjkgMTggQyAyOSAxNi44NTcgMjguMzYxIDE1Ljg2MyAyNy40MjEgMTUuMzU3IEwgMzQgMTUuMzU3IFogTSAxMSAxMCBDIDguNzkxIDEwIDcgMTEuNzkxIDcgMTQgQyA3IDE2LjIwOSA4Ljc5MSAxOCAxMSAxOCBDIDEzLjIwOSAxOCAxNSAxNi4yMDkgMTUgMTQgQyAxNSAxMS43'@;
put 'OTEgMTMuMjA5IDEwIDExIDEwIFogTSAxOCAyMCBDIDE2LjM0MyAyMCAxNSAyMS4zNDMgMTUgMjMgQyAxNSAyNC42NTcgMTYuMzQzIDI2IDE4IDI2IEMgMTkuNjU3IDI2IDIxIDI0LjY1NyAyMSAyMyBDIDIxIDIxLjM0MyAxOS42NTcgMjAgMTggMjAgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4'@;
put 'IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5'@;
put 'OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLFIuQ2xyU2hhcGVDbG91ZENoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJh'@;
put 'MiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk00LDI5VjdIMzJWMjlaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjAuOTcxIDExLjI0MyBDIDIzLjMxNCAxMy41ODYgMjIuMzY0IDE4LjMzNSAxOC44NDkgMjEuODQ5IEMgMTUuMzM0IDI1LjM2NCAxMC41ODYgMjYuMzE0IDguMjQzIDIz'@;
put 'Ljk3IEMgNS44OTkgMjEuNjI3IDYuODQ5IDE2Ljg3OCAxMC4zNjQgMTMuMzY0IEMgMTMuODc5IDkuODQ5IDE4LjYyOCA4LjkgMjAuOTcxIDExLjI0MyBaIE0gMTEuNjM2IDE0LjYzNyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4wNTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43'@;
put 'NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAyMC4zODggMTcuNzY1IDIxLjMzOCAxNC4xNTYgMTkuNjk3IDEyLjUxNiBDIDE4LjA1NyAxMC44NzYgMTQuNDQ4IDExLjgyNSAxMS42MzYgMTQuNjM3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BhdGg+'@;
put 'XG4gIDxwYXRoIGQ9Ik0gMjggMjIgQyAyOCAyMy42NTcgMjYuNjU3IDI1IDI1IDI1IEMgMjMuMzQzIDI1IDIyIDIzLjY1NyAyMiAyMiBDIDIyIDIwLjM0MyAyMy4zNDMgMTkgMjUgMTkgQyAyNi42NTcgMTkgMjggMjAuMzQzIDI4IDIyIFogTSAyNSAyMC42IEMgMjQuMjI3IDIwLjYgMjMuNiAy'@;
put 'MS4yMjcgMjMuNiAyMiBDIDIzLjYgMjIuNzczIDI0LjIyNyAyMy40IDI1IDIzLjQgQyAyNS43NzMgMjMuNCAyNi40IDIyLjc3MyAyNi40IDIyIEMgMjYuNCAyMS4yMjcgMjUuNzczIDIwLjYgMjUgMjAuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0i'@;
put 'NyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUg'@;
put 'TCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTUgMzQgNyBaIE0gMTAuMzY0IDEzLjM2NCBDIDYuODQ5IDE2Ljg3OCA1Ljg5OSAyMS42MjcgOC4yNDMgMjMuOTcgQyAxMC41ODYgMjYuMzE0IDE1LjMzNCAyNS4zNjQgMTguODQ5IDIxLjg0OSBDIDIyLjM2NCAxOC4zMzUgMjMuMzE0IDEzLjU4NiAy'@;
put 'MC45NzEgMTEuMjQzIEMgMTguNjI4IDguOSAxMy44NzkgOS44NDkgMTAuMzY0IDEzLjM2NCBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3'@;
put 'IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIu'@;
put 'NSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43'@;
put 'MDYgMTMuMDI2IDMyIDEzLjIyIFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyMC45NzEgMTEuMjQzIEMgMjMuMzE0IDEzLjU4NiAyMi4zNjQgMTguMzM1IDE4Ljg0OSAyMS44NDkgQyAxNS4zMzQgMjUuMzY0IDEwLjU4NiAyNi4zMTQgOC4yNDMgMjMuOTcgQyA1Ljg5OSAyMS42MjcgNi44NDkg'@;
put 'MTYuODc4IDEwLjM2NCAxMy4zNjQgQyAxMy44NzkgOS44NDkgMTguNjI4IDguOSAyMC45NzEgMTEuMjQzIFogTSAxMS42MzYgMTQuNjM3IEMgOC44MjQgMTcuNDQ5IDcuODc1IDIxLjA1OCA5LjUxNSAyMi42OTggQyAxMS4xNTUgMjQuMzM4IDE0Ljc2NCAyMy4zODkgMTcuNTc2IDIwLjU3NyBD'@;
put 'IDIwLjM4OCAxNy43NjUgMjEuMzM4IDE0LjE1NiAxOS42OTcgMTIuNTE2IEMgMTguMDU3IDEwLjg3NiAxNC40NDggMTEuODI1IDExLjYzNiAxNC42MzcgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxwYXRo'@;
put 'IGQ9Ik0gMjggMjIgQyAyOCAyMy42NTcgMjYuNjU3IDI1IDI1IDI1IEMgMjMuMzQzIDI1IDIyIDIzLjY1NyAyMiAyMiBDIDIyIDIwLjM0MyAyMy4zNDMgMTkgMjUgMTkgQyAyNi42NTcgMTkgMjggMjAuMzQzIDI4IDIyIFogTSAyNSAyMC42IEMgMjQuMjI2IDIwLjYgMjMuNiAyMS4yMjYgMjMu'@;
put 'NiAyMiBDIDIzLjYgMjIuNzczIDI0LjIyNiAyMy40IDI1IDIzLjQgQyAyNS43NzMgMjMuNCAyNi40IDIyLjc3MyAyNi40IDIyIEMgMjYuNCAyMS4yMjYgMjUuNzczIDIwLjYgMjUgMjAuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn'@;
put 'ZWQiIHg9IjciPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMg'@;
put 'MjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI1IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAx'@;
put 'OC44NDkgMjEuODQ5IEMgMjIuMzY0IDE4LjMzNSAyMy4zMTQgMTMuNTg2IDIwLjk3MSAxMS4yNDMgQyAxOC42MjggOC45IDEzLjg3OSA5Ljg0OSAxMC4zNjQgMTMuMzY0IFogTSAyNSAxOSBDIDIzLjM0MyAxOSAyMiAyMC4zNDMgMjIgMjIgQyAyMiAyMy42NTcgMjMuMzQzIDI1IDI1IDI1IEMg'@;
put 'MjYuNjU3IDI1IDI4IDIzLjY1NyAyOCAyMiBDIDI4IDIwLjM0MyAyNi42NTcgMTkgMjUgMTkgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48'@;
put 'L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1'@;
put 'IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTguODQ5IDIxLjg0OSBDIDE1LjMzNCAyNS4zNjQgMTAuNTg2IDI2LjMxNCA4LjI0MyAyMy45NyBDIDUu'@;
put 'ODk5IDIxLjYyNyA2Ljg0OSAxNi44NzggMTAuMzY0IDEzLjM2NCBDIDEzLjA0OSAxMC42NzkgMTYuNDUzIDkuNDkyIDE4Ljk1NiAxMC4xMjQgTCAxOC4wMDggMTEuNzQxIEMgMTYuMTggMTEuNTE4IDEzLjY5NSAxMi41NzggMTEuNjM2IDE0LjYzNyBDIDguODI0IDE3LjQ0OSA3Ljg3NSAyMS4w'@;
put 'NTggOS41MTUgMjIuNjk4IEMgMTEuMTU1IDI0LjMzOCAxNC43NjQgMjMuMzg5IDE3LjU3NiAyMC41NzcgQyAxOS4yMjggMTguOTI1IDIwLjIzNyAxNi45OTggMjAuNDU2IDE1LjM1NyBMIDIyLjIyIDE1LjM1NyBDIDIyLjAwNiAxNy40NzcgMjAuODM4IDE5Ljg2MSAxOC44NDkgMjEuODQ5IFoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMjggMjIgQyAyOCAyMy42NTcgMjYuNjU3IDI1IDI1IDI1IEMgMjMuMzQzIDI1IDIyIDIzLjY1NyAyMiAyMiBDIDIyIDIwLjM0MyAyMy4zNDMg'@;
put 'MTkgMjUgMTkgQyAyNi42NTcgMTkgMjggMjAuMzQzIDI4IDIyIFogTSAyNSAyMC42IEMgMjQuMjI2IDIwLjYgMjMuNiAyMS4yMjYgMjMuNiAyMiBDIDIzLjYgMjIuNzczIDI0LjIyNiAyMy40IDI1IDIzLjQgQyAyNS43NzMgMjMuNCAyNi40IDIyLjc3MyAyNi40IDIyIEMgMjYuNCAyMS4yMjYg'@;
put 'MjUuNzczIDIwLjYgMjUgMjAuNiBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgeD0iNyI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRl'@;
put 'ZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMu'@;
put 'MDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDE4Ljk1NiAxMC4x'@;
put 'MjQgQyAxNi40NTMgOS40OTIgMTMuMDQ5IDEwLjY3OSAxMC4zNjQgMTMuMzY0IEMgNi44NDkgMTYuODc4IDUuODk5IDIxLjYyNyA4LjI0MyAyMy45NyBDIDEwLjU4NiAyNi4zMTQgMTUuMzM0IDI1LjM2NCAxOC44NDkgMjEuODQ5IEMgMjAuODM4IDE5Ljg2MSAyMi4wMDYgMTcuNDc3IDIyLjIy'@;
put 'IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMjUgMTkgQyAyMy4zNDMgMTkgMjIgMjAuMzQzIDIyIDIyIEMgMjIgMjMuNjU3IDIzLjM0MyAyNSAyNSAyNSBDIDI2LjY1NyAyNSAyOCAyMy42NTcgMjggMjIgQyAyOCAyMC4zNDMgMjYuNjU3IDE5IDI1IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4'@;
put 'OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4y'@;
put 'OTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxSLkNsclNoYXBlQ3VydmVDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5'@;
put 'IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAx'@;
put 'MS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcuODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIg'@;
put 'MTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1Ljgg'@;
put 'MTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2LjkxMSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDExLjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDM0IDcgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4x'@;
put 'MDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTguMjc1IEMgMTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAx'@;
put 'OS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIwLjMyNiAyMi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjE4OCAxNS4wMTYgMTcuNzk5IDEz'@;
put 'Ljg4MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzMiAxMy4yMiBMIDMyIDI5IEwgNCAyOSBMIDQgNyBMIDIyLjU3IDcgQyAyMi41MjQgNi42NjggMjIuNTAxIDYuMzM0IDIyLjUgNiBDIDIyLjUwMSA1LjY2NSAyMi41MjQgNS4zMzEgMjIuNTcgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcg'@;
put 'TCAyIDI5IEMgMiAzMC4xMDQgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA0IDMxIDM0IDMwLjEwNCAzNCAyOSBMIDM0IDEyLjM0IEMgMzMuMzggMTIuNzMgMzIuNzA2IDEzLjAyNiAzMiAxMy4yMiBaIj48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gNyAxMS44IEMgNi41NTggMTEuOCA2LjIg'@;
put 'MTEuNDQyIDYuMiAxMSBDIDYuMiAxMC41NTggNi41NTggMTAuMiA3IDEwLjIgTCAxMyAxMC4yIEMgMTUuNDA0IDEwLjIgMTYuMzY4IDExLjkwNyAxNy42NTMgMTYuNDc4IEMgMTcuNjk1IDE2LjYyOCAxNy43NDQgMTYuODAzIDE3LjgzNSAxNy4xMjkgQyAxNy45MDkgMTcuMzkyIDE3Ljk2NCAx'@;
put 'Ny41ODggMTguMDE5IDE3Ljc4IEMgMTkuMzMyIDIyLjM3NSAyMC41NDkgMjQuMiAyMyAyNC4yIEwgMjkgMjQuMiBDIDI5LjQ0MiAyNC4yIDI5LjggMjQuNTU4IDI5LjggMjUgQyAyOS44IDI1LjQ0MiAyOS40NDIgMjUuOCAyOSAyNS44IEwgMjMgMjUuOCBDIDE5LjUzNSAyNS44IDE3Ljk4MSAy'@;
put 'My40NjkgMTYuNDgxIDE4LjIyIEMgMTYuNDI1IDE4LjAyNSAxNi4zNjkgMTcuODI2IDE2LjI5NSAxNy41NiBDIDE2LjIwMyAxNy4yMzQgMTYuMTU0IDE3LjA2IDE2LjExMyAxNi45MTEgQyAxNS4wNDMgMTMuMTA1IDE0LjMwNSAxMS44IDEzIDExLjggTCA3IDExLjggWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNs'@;
put 'ZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYg'@;
put 'Mi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMTMgMTIgQyAxNC44MTcgMTIgMTUuNjc0IDEzLjQ5OSAxNy4wMzkgMTguMjc1IEMg'@;
put 'MTcuODEzIDIwLjk4NCAxOC4yMDEgMjIuMTE4IDE4Ljg4MiAyMy4zMDkgQyAxOS44NyAyNS4wMzggMjEuMjA1IDI2IDIzIDI2IEwgMjkgMjYgQyAyOS41NTIgMjYgMzAgMjUuNTUyIDMwIDI1IEMgMzAgMjQuNDQ4IDI5LjU1MiAyNCAyOSAyNCBMIDIzIDI0IEMgMjEuMTgzIDI0IDIwLjMyNiAy'@;
put 'Mi41MDEgMTguOTYyIDE3LjcyNSBDIDE4LjE4OCAxNS4wMTYgMTcuNzk5IDEzLjg4MiAxNy4xMTggMTIuNjkxIEMgMTYuMTMgMTAuOTYyIDE0Ljc5NSAxMCAxMyAxMCBMIDcgMTAgQyA2LjQ0OCAxMCA2IDEwLjQ0OCA2IDExIEMgNiAxMS41NTIgNi40NDggMTIgNyAxMiBaIj48L3BhdGg+XG4g'@;
put 'IDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3'@;
put 'IEwgMzQgMTUuMzU3IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSA3IDExLjggQyA2LjU1OCAxMS44IDYuMiAxMS40NDIgNi4yIDExIEMgNi4yIDEwLjU1OCA2LjU1OCAxMC4yIDcgMTAuMiBMIDEzIDEwLjIgQyAxNS40MDQgMTAuMiAxNi4zNjggMTEuOTA3IDE3LjY1MyAxNi40NzggQyAxNy42'@;
put 'OTUgMTYuNjI4IDE3Ljc0NCAxNi44MDMgMTcuODM1IDE3LjEyOSBDIDE3LjkwOSAxNy4zOTIgMTcuOTY0IDE3LjU4OCAxOC4wMTkgMTcuNzggQyAxOS4zMzIgMjIuMzc1IDIwLjU0OSAyNC4yIDIzIDI0LjIgTCAyOSAyNC4yIEMgMjkuNDQyIDI0LjIgMjkuOCAyNC41NTggMjkuOCAyNSBDIDI5'@;
put 'LjggMjUuNDQyIDI5LjQ0MiAyNS44IDI5IDI1LjggTCAyMyAyNS44IEMgMTkuNTM1IDI1LjggMTcuOTgxIDIzLjQ2OSAxNi40ODEgMTguMjIgQyAxNi40MjUgMTguMDI1IDE2LjM2OSAxNy44MjYgMTYuMjk1IDE3LjU2IEMgMTYuMjAzIDE3LjIzNCAxNi4xNTQgMTcuMDYgMTYuMTEzIDE2Ljkx'@;
put 'MSBDIDE1LjA0MyAxMy4xMDUgMTQuMzA1IDExLjggMTMgMTEuOCBMIDcgMTEuOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4'@;
put 'NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAy'@;
put 'MS45NTggNSBMIDE3LjYyNSAxMi4zOTUgQyAxNy40NzYgMTIuNjEyIDE3LjM3OSAxMi44NDMgMTcuMzMgMTMuMDc3IEMgMTcuMjYyIDEyLjk0OCAxNy4xOTIgMTIuODIgMTcuMTE4IDEyLjY5MSBDIDE2LjEzIDEwLjk2MiAxNC43OTUgMTAgMTMgMTAgTCA3IDEwIEMgNi40NDggMTAgNiAxMC40'@;
put 'NDggNiAxMSBDIDYgMTEuNTUyIDYuNDQ4IDEyIDcgMTIgTCAxMyAxMiBDIDE0LjgxNyAxMiAxNS42NzQgMTMuNDk5IDE3LjAzOSAxOC4yNzUgQyAxNy44MTMgMjAuOTg0IDE4LjIwMSAyMi4xMTggMTguODgyIDIzLjMwOSBDIDE5Ljg3IDI1LjAzOCAyMS4yMDUgMjYgMjMgMjYgTCAyOSAyNiBD'@;
put 'IDI5LjU1MiAyNiAzMCAyNS41NTIgMzAgMjUgQyAzMCAyNC40NDggMjkuNTUyIDI0IDI5IDI0IEwgMjMgMjQgQyAyMS4xODMgMjQgMjAuMzI2IDIyLjUwMSAxOC45NjIgMTcuNzI1IEMgMTguNjQgMTYuNTk4IDE4LjM4NSAxNS43NDQgMTguMTQ3IDE1LjA0NCBDIDE4LjQwNyAxNS4yMTUgMTgu'@;
put 'NzE3IDE1LjMyNiAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkg'@;
put 'MTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIj48L3BhdGg+JyksUi5DbHJTaGFwZUdyaWRDaGFydD0oMCxtLmNsckljb25T'@;
put 'VkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsMTdIMjFhMiwyLDAsMCwxLTItMlY4YTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwxN1pNMjEsOHY3SDMyVjhaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNIDE1IDE3IEwgNCAx'@;
put 'NyBDIDIuODk1IDE3IDIgMTYuMTA1IDIgMTUgTCAyIDggQyAyIDYuODk1IDIuODk1IDYgNCA2IEwgMTUgNiBDIDE2LjEwNSA2IDE3IDYuODk1IDE3IDggTCAxNyAxNSBDIDE3IDE2LjEwNSAxNi4xMDUgMTcgMTUgMTcgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0yIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAzMiA2IEMgMzMuMTA1IDYgMzQgNi44OTUgMzQgOCBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4g'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0gMTUgMzAgTCA0IDMwIEMgMi44OTUgMzAgMiAyOS4xMDUgMiAyOCBMIDIgMjEgQyAyIDE5Ljg5NSAyLjg5NSAxOSA0IDE5IEwgMTUgMTkgQyAxNi4xMDUgMTkgMTcgMTkuODk1IDE3IDIxIEwgMTcgMjgg'@;
put 'QyAxNyAyOS4xMDUgMTYuMTA1IDMwIDE1IDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTSAzMiAzMCBMIDIxIDMwIEMgMTkuODk1IDMwIDE5IDI5LjEwNSAxOSAyOCBMIDE5IDIxIEMgMTkgMTkuODk1IDE5Ljg5NSAxOSAyMSAxOSBM'@;
put 'IDMyIDE5IEMgMzMuMTA1IDE5IDM0IDE5Ljg5NSAzNCAyMSBMIDM0IDI4IEMgMzQgMjkuMTA1IDMzLjEwNSAzMCAzMiAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtYWxlcnRlZCIgZD0iTTE1LDE3SDRhMiwyLDAsMCwx'@;
put 'LTItMlY4QTIsMiwwLDAsMSw0LDZIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwxN1pNNCw4djdIMTVWOFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi1hbGVydGVkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAyMC4w'@;
put 'MTQgMTcgMTkuMTk1IDE2LjI4NyAxOS4wMyAxNS4zNDggQyAxOS4wNDEgMTUuMzQ5IDE5LjA1MyAxNS4zNSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDMzLjk2OCAxNS4zNTcgQyAzMy44IDE2LjI5MiAzMi45ODMgMTcgMzIgMTcg'@;
put 'WiBNIDE5IDggQyAxOSA2Ljg5NSAxOS44OTUgNiAyMSA2IEwgMjEuMzcyIDYgTCAxOSAxMC4wNDggWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLWFsZXJ0ZWQiIGQ9Ik0xNSwzMEg0YTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAs'@;
put 'MCwxLDItMkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDMwWk00LDIxdjdIMTVWMjFaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtYWxlcnRlZCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAs'@;
put 'MCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAy'@;
put 'MS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0'@;
put 'LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIg'@;
put 'ZD0iTSAxNSAxNyBMIDQgMTcgQyAyLjg5NSAxNyAyIDE2LjEwNSAyIDE1IEwgMiA4IEMgMiA2Ljg5NSAyLjg5NSA2IDQgNiBMIDE1IDYgQyAxNi4xMDUgNiAxNyA2Ljg5NSAxNyA4IEwgMTcgMTUgQyAxNyAxNi4xMDUgMTYuMTA1IDE3IDE1IDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTSAzMiAxNyBMIDIxIDE3IEMgMjAuMDE0IDE3IDE5LjE5NSAxNi4yODcgMTkuMDMgMTUuMzQ4IEMgMTkuMDQxIDE1LjM0OSAxOS4wNTMgMTUuMzUgMTkuMDY0IDE1LjM1MSBDIDE5LjEzNCAxNS4zNTcgMTku'@;
put 'MjAxIDE1LjM1OSAxOS4yNyAxNS4zNTcgTCAzMy45NjggMTUuMzU3IEMgMzMuOCAxNi4yOTIgMzIuOTgzIDE3IDMyIDE3IFogTSAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIxLjM3MiA2IEwgMTkgMTAuMDQ4IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgZD0iTSAxNSAzMCBMIDQgMzAgQyAyLjg5NSAzMCAyIDI5LjEwNSAyIDI4IEwgMiAyMSBDIDIgMTkuODk1IDIuODk1IDE5IDQgMTkgTCAxNSAxOSBDIDE2LjEwNSAxOSAxNyAxOS44OTUgMTcgMjEgTCAxNyAyOCBDIDE3IDI5LjEwNSAx'@;
put 'Ni4xMDUgMzAgMTUgMzAgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwgMTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIx'@;
put 'IDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwgMzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAy'@;
put 'Ni44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQu'@;
put 'ODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTUsMTdINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgxNWEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDE1LDE3Wk00LDh2N0gxNVY4WiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yLS1iYWRnZWQiIGQ9Ik0gMzIgMTcgTCAyMSAxNyBDIDE5Ljg5NSAxNyAxOSAxNi4xMDUgMTkgMTUgTCAxOSA4IEMgMTkgNi44OTUgMTkuODk1IDYgMjEgNiBMIDIyLjU5IDYgQyAyMi41OSA2LjAxOSAyMi41OSA2LjAzNyAyMi41OSA2LjA1NiBDIDIyLjU5IDYuNzI5IDIyLjY4IDcuMzgx'@;
put 'IDIyLjg0OCA4IEwgMjEgOCBMIDIxIDE1IEwgMzIgMTUgTCAzMiAxMy4xNzUgQyAzMi43MTcgMTIuOTcyIDMzLjM4OSAxMi42NjQgMzQgMTIuMjY5IEwgMzQgMTUgQyAzNCAxNi4xMDUgMzMuMTA1IDE3IDMyIDE3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTUsMzBINGEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMTVhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwxNSwzMFpNNCwyMXY3SDE1VjIxWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMiwzMEgyMWEyLDIsMCwwLDEtMi0yVjIxYTIsMiwwLDAsMSwyLTJIMzJhMiwyLDAsMCwxLDIsMnY3QTIsMiwwLDAsMSwzMiwzMFpNMjEsMjF2N0gzMlYyMVoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMTUgMTcgTCA0IDE3IEMgMi44OTUgMTcgMiAxNi4x'@;
put 'MDUgMiAxNSBMIDIgOCBDIDIgNi44OTUgMi44OTUgNiA0IDYgTCAxNSA2IEMgMTYuMTA1IDYgMTcgNi44OTUgMTcgOCBMIDE3IDE1IEMgMTcgMTYuMTA1IDE2LjEwNSAxNyAxNSAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0t'@;
put 'YmFkZ2VkIiBkPSJNIDMyIDE3IEwgMjEgMTcgQyAxOS44OTUgMTcgMTkgMTYuMTA1IDE5IDE1IEwgMTkgOCBDIDE5IDYuODk1IDE5Ljg5NSA2IDIxIDYgTCAyMi41OSA2IEMgMjIuNTkgNi4wMTkgMjIuNTkgNi4wMzcgMjIuNTkgNi4wNTYgQyAyMi41OSAxMC4xNDEgMjUuOTAxIDEzLjQ1MiAy'@;
put 'OS45ODYgMTMuNDUyIEMgMzEuNDY2IDEzLjQ1MiAzMi44NDQgMTMuMDE4IDM0IDEyLjI2OSBMIDM0IDE1IEMgMzQgMTYuMTA1IDMzLjEwNSAxNyAzMiAxNyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNIDE1'@;
put 'IDMwIEwgNCAzMCBDIDIuODk1IDMwIDIgMjkuMTA1IDIgMjggTCAyIDIxIEMgMiAxOS44OTUgMi44OTUgMTkgNCAxOSBMIDE1IDE5IEMgMTYuMTA1IDE5IDE3IDE5Ljg5NSAxNyAyMSBMIDE3IDI4IEMgMTcgMjkuMTA1IDE2LjEwNSAzMCAxNSAzMCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBkPSJNIDMyIDMwIEwgMjEgMzAgQyAxOS44OTUgMzAgMTkgMjkuMTA1IDE5IDI4IEwgMTkgMjEgQyAxOSAxOS44OTUgMTkuODk1IDE5IDIxIDE5IEwgMzIgMTkgQyAzMy4xMDUgMTkgMzQgMTkuODk1IDM0IDIxIEwg'@;
put 'MzQgMjggQyAzNCAyOS4xMDUgMzMuMTA1IDMwIDMyIDMwIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVIZWF0TWFwPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1'@;
put 'IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDggMTAgTCAyOCAxMCBMIDI4IDI2IEwgOCAyNiBaIE0gOS42IDI0IEwgMTQuMSAyNCBMIDE0LjEgMTguOCBMIDkuNiAxOC44'@;
put 'IFogTSAxNC4xIDExLjYgTCA5LjYgMTEuNiBMIDkuNiAxNy4yIEwgMTQuMSAxNy4yIFogTSAyNiAyNCBMIDI2IDE4LjggTCAyMS45IDE4LjggTCAyMS45IDI0IFogTSAyNiAxMS42IEwgMjEuOSAxMS42IEwgMjEuOSAxNy4yIEwgMjYgMTcuMiBaIE0gMTUuNyAxMS42IEwgMTUuNyAxNy4yIEwg'@;
put 'MjAuMyAxNy4yIEwgMjAuMyAxMS42IFogTSAxNS43IDI0IEwgMjAuMyAyNCBMIDIwLjMgMTguOCBMIDE1LjcgMTguOCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUg'@;
put 'MiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDggMTAgTCAyMy43MjggMTAgQyAy'@;
put 'NC4xMDUgMTAuNTk2IDI0LjU2NCAxMS4xMzUgMjUuMDkgMTEuNiBMIDIxLjkgMTEuNiBMIDIxLjkgMTcuMiBMIDI2IDE3LjIgTCAyNiAxMi4yODcgQyAyNi42MTEgMTIuNjc5IDI3LjI4NCAxMi45ODMgMjggMTMuMTgyIEwgMjggMjYgTCA4IDI2IFogTSA5LjYgMjQgTCAxNC4xIDI0IEwgMTQu'@;
put 'MSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTEuNiBaIE0gMTUu'@;
put 'NyAyNCBMIDIwLjMgMjQgTCAyMC4zIDE4LjggTCAxNS43IDE4LjggWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMjItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAz'@;
put 'MSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDggMTAgTCAxOS4w'@;
put 'MjggMTAgTCAxOC4wOTEgMTEuNiBMIDE1LjcgMTEuNiBMIDE1LjcgMTcuMiBMIDIwLjMgMTcuMiBMIDIwLjMgMTUuMzU3IEwgMjEuOSAxNS4zNTcgTCAyMS45IDE3LjIgTCAyNiAxNy4yIEwgMjYgMTUuMzU3IEwgMjggMTUuMzU3IEwgMjggMjYgTCA4IDI2IFogTSA5LjYgMjQgTCAxNC4xIDI0'@;
put 'IEwgMTQuMSAxOC44IEwgOS42IDE4LjggWiBNIDE0LjEgMTEuNiBMIDkuNiAxMS42IEwgOS42IDE3LjIgTCAxNC4xIDE3LjIgWiBNIDI2IDI0IEwgMjYgMTguOCBMIDIxLjkgMTguOCBMIDIxLjkgMjQgWiBNIDE1LjcgMjQgTCAyMC4zIDI0IEwgMjAuMyAxOC44IEwgMTUuNyAxOC44IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4x'@;
put 'NDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEy'@;
put 'MiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAz'@;
put 'NCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMzIgNSBDIDMzLjEwNSA1IDM0IDUuODk2IDM0IDcgWiBNIDggMjYgTCAyOCAyNiBMIDI4IDEwIEwgOCAxMCBa'@;
put 'IE0gMTAgMTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDEyIEwgMjYgMTIgWiBNIDIwIDEyIEwgMjAgMTcgTCAxNiAxNyBMIDE2'@;
put 'IDEyIFogTSAxNCAxMiBMIDE0IDE3IEwgMTAgMTcgTCAxMCAxMiBaIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDM0IDEyLjM0IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwg'@;
put 'NCAzMSBDIDIuODk2IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk2IDIuODk2IDUgNCA1IEwgMjIuNTcgNSBDIDIyLjMxMiA2LjgxNyAyMi43MzIgOC41NjYgMjMuNjMzIDEwIEwgOCAxMCBMIDggMjYgTCAyOCAyNiBMIDI4IDEzLjIzMiBDIDI4LjQyMSAxMy4zNDUgMjguODU5IDEz'@;
put 'LjQyMiAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEyLjM0IFogTSAxMCAxOSBMIDE0IDE5IEwgMTQgMjQgTCAxMCAyNCBaIE0gMjIgMjQgTCAyMiAxOSBMIDI2IDE5IEwgMjYgMjQgWiBNIDIwIDE5IEwgMjAgMjQgTCAxNiAyNCBM'@;
put 'IDE2IDE5IFogTSAyNiAxNyBMIDIyIDE3IEwgMjIgMTIgTCAyNS41ODQgMTIgQyAyNS43MTkgMTIuMSAyNS44NTggMTIuMTk2IDI2IDEyLjI4NyBaIE0gMjAgMTIgTCAyMCAxNyBMIDE2IDE3IEwgMTYgMTIgWiBNIDE0IDEyIEwgMTQgMTcgTCAxMCAxNyBMIDEwIDEyIFoiPjwvcGF0aD5cbiAg'@;
put 'PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIyLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiPjwvY2lyY2xlPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1h'@;
put 'bGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTkuMDI4IDEwIEwgOCAxMCBMIDggMjYgTCAyOCAyNiBMIDI4IDE1LjM1NyBM'@;
put 'IDM0IDE1LjM1NyBaIE0gMTAgMTkgTCAxNCAxOSBMIDE0IDI0IEwgMTAgMjQgWiBNIDIyIDI0IEwgMjIgMTkgTCAyNiAxOSBMIDI2IDI0IFogTSAyMCAxOSBMIDIwIDI0IEwgMTYgMjQgTCAxNiAxOSBaIE0gMjYgMTcgTCAyMiAxNyBMIDIyIDE1LjM1NyBMIDI2IDE1LjM1NyBaIE0gMjAgMTcg'@;
put 'TCAxNiAxNyBMIDE2IDEyIEwgMTcuODU2IDEyIEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDIwIDE1LjM1NyBaIE0gMTQgMTIgTCAxNCAxNyBMIDEw'@;
put 'IDE3IEwgMTAgMTIgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4xNDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4'@;
put 'IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAy'@;
put 'OS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxSLkNsclNoYXBlTGluZUNoYXJ0PSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1'@;
put 'IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNSAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDUgMzEgMzQgMzAuMTA1IDM0IDI5IEwgMzQgNyBDIDM0IDUuODk1IDMzLjEwNSA1IDMyIDUgWiBNIDQgMjkgTCA0IDcgTCAzMiA3IEwgMzIgMjkgWiI+PC9w'@;
put 'YXRoPlxuICA8cG9seWdvbiBwb2ludHM9IjE1LjYyIDE1LjIyMiA5LjYwMiAyMy45NjggNS41NSAyMC4zODQgNi42MSAxOS4xODYgOS4zMDggMjEuNTcyIDE1LjYzNCAxMi4zOCAyMi4zODQgMjIuMzk1IDI5LjEzOCAxMy40NyAzMC40MTQgMTQuNDM2IDIyLjMwOCAyNS4xNDUiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIj48L3BvbHlnb24+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk2IDUgMiA1Ljg5NiAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTYgMzEgNCAzMSBM'@;
put 'IDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NiAzMy4xMDUgNSAzMiA1IFogTSAyMi41NiAyNS45NCBMIDE1LjQ2IDE1LjM2IEwgOS4xMiAyNC42NCBMIDQuNjIgMjAuNjQgTCA2IDE5LjA1IEwgOC43IDIxLjQ0IEwgMTUuNDYgMTEuNTYgTCAyMi42'@;
put 'NSAyMi4yNyBMIDI5LjY1IDEzIEwgMzEuMzUgMTQuMjggWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIuNTI0'@;
put 'IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAzNCAx'@;
put 'Mi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cG9seWdvbiBwb2ludHM9IjE1LjYyIDE1LjIyMiA5LjYwMiAyMy45NjggNS41NSAyMC4zODQgNi42MSAxOS4xODYgOS4zMDggMjEuNTcyIDE1LjYzNCAxMi4zOCAyMi4zODQgMjIuMzk1IDI5'@;
put 'LjEzOCAxMy40NyAzMC40MTQgMTQuNDM2IDIyLjMwOCAyNS4xNDUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wb2x5Z29uPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMwLjMyIDEzLjQ4IEwgMzEuMzggMTQuMjggTCAyMi41NiAyNS45'@;
put 'NCBMIDE1LjQ2IDE1LjM2IEwgOS4xMiAyNC42NCBMIDQuNjIgMjAuNjQgTCA2IDE5LjA1IEwgOC43IDIxLjQ0IEwgMTUuNDYgMTEuNTYgTCAyMi42NSAyMi4yNyBMIDI5LjMxIDEzLjQ2IEMgMjUuMDUgMTMuMSAyMS45NjkgOS4yMzMgMjIuNTcgNSBMIDQgNSBDIDIuODk2IDUgMiA1Ljg5NiAy'@;
put 'IDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTYgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDEyLjM0IEMgMzIuODk1IDEzLjAzNiAzMS42MjYgMTMuNDI5IDMwLjMyIDEzLjQ4IFoiPjwvcGF0aD5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSI+PC9jaXJjbGU+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQg'@;
put 'MzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NSAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NSAyLjg5NSA1IDQgNSBMIDIxLjk1OCA1IEwgMjAuNzg2IDcgTCA0IDcgTCA0IDI5IEwgMzIgMjkgTCAzMiAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8'@;
put 'cGF0aCBkPSJNIDE1LjYyIDE1LjIyMiBMIDkuNjAyIDIzLjk2OCBMIDUuNTUgMjAuMzg0IEwgNi42MSAxOS4xODYgTCA5LjMwOCAyMS41NzIgTCAxNS42MzQgMTIuMzggTCAyMi4zODQgMjIuMzk1IEwgMjcuNzE3IDE1LjM0OCBMIDI5LjcyNCAxNS4zNDggTCAyMi4zMDggMjUuMTQ1IFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0'@;
put 'NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIy'@;
put 'IEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0x'@;
put 'LS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0IDE1LjI0'@;
put 'NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDI3LjQ1MiAxNS4zNTcgTCAyMi4zOCAyMi4wNiBMIDE1LjYzIDEyIEwgOS4yOCAyMS4yOCBMIDYuNzUgMTkuMDQgTCA1LjQyIDIwLjUzIEwgOS42NSAyNC4yOCBMIDE1LjYxIDE1LjU2'@;
put 'IEwgMjIuMjggMjUuNSBMIDI5Ljk1OSAxNS4zNTcgTCAzNCAxNS4zNTcgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQg'@;
put 'QyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAz'@;
put 'NC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPicpLFIuQ2xyU2hhcGVQaWVDaGFydD0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5'@;
put 'IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAxNyAyNyBDIDEyLjU4MiAyNyA5IDIzLjQxOCA5IDE5IEMgOSAxNC41ODIgMTIuNTgyIDExIDE3IDExIEwgMTcgMTkgTCAyNSAxOSBDIDI1IDIzLjQxOCAyMS40MTggMjcgMTcgMjcgWiBNIDIzLjI0NyAyMC40'@;
put 'IEwgMTUuNCAyMC40IEwgMTUuNCAxMi44MDIgQyAxMi42NCAxMy41MTMgMTAuNjAxIDE2LjAxOCAxMC42IDE5IEMgMTAuNiAyMi41MzUgMTMuNDY1IDI1LjQgMTcgMjUuNCBDIDIwLjA1NCAyNS40MDEgMjIuNjA4IDIzLjI2MSAyMy4yNDcgMjAuNCBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5IDkgQyAyMy40MTggOSAyNyAxMi41ODIgMjcgMTcgTCAxOSAxNyBaIE0gMjUuMTk4IDE1LjQgQyAyNC42MiAxMy4xNSAyMi44NDkgMTEuMzggMjAuNiAxMC44MDEgTCAyMC42IDE1LjQgWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTSAzNCA3IEwgMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEMgMzIgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIg'@;
put 'NS44OTYgMi44OTYgNSA0IDUgTCAzMiA1IEMgMzMuMTA1IDUgMzQgNS44OTYgMzQgNyBaIE0gMjUgMTkgTCAxNyAxOSBMIDE3IDExIEMgMTIuNTgyIDExIDkgMTQuNTgyIDkgMTkgQyA5IDIzLjQxOCAxMi41ODIgMjcgMTcgMjcgQyAyMS40MTggMjcgMjUgMjMuNDE4IDI1IDE5IFogTSAxOSAx'@;
put 'NyBMIDI3IDE3IEMgMjcgMTIuNTgyIDIzLjQxOCA5IDE5IDkgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzIgMTMuMjIgTCAzMiAyOSBMIDQgMjkgTCA0IDcgTCAyMi41NyA3IEMgMjIu'@;
put 'NTI0IDYuNjY4IDIyLjUwMSA2LjMzNCAyMi41IDYgQyAyMi41MDEgNS42NjUgMjIuNTI0IDUuMzMxIDIyLjU3IDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA0IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNCAzMSAzNCAzMC4xMDQgMzQgMjkgTCAz'@;
put 'NCAxMi4zNCBDIDMzLjM4IDEyLjczIDMyLjcwNiAxMy4wMjYgMzIgMTMuMjIgWiI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE3IDI3IEMgMTIuNTgyIDI3IDkgMjMuNDE4IDkgMTkgQyA5IDE0LjU4MiAxMi41ODIgMTEgMTcgMTEgTCAxNyAxOSBMIDI1IDE5IEMgMjUgMjMuNDE4IDIxLjQxOCAy'@;
put 'NyAxNyAyNyBaIE0gMjMuMjQ3IDIwLjQgTCAxNS40IDIwLjQgTCAxNS40IDEyLjgwMiBDIDEyLjY0IDEzLjUxMyAxMC42MDEgMTYuMDE4IDEwLjYgMTkgQyAxMC42IDIyLjUzNSAxMy40NjUgMjUuNCAxNyAyNS40IEMgMjAuMDU0IDI1LjQwMSAyMi42MDggMjMuMjYxIDIzLjI0NyAyMC40IFoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCI+PC9wYXRoPlxuICA8cGF0aCBkPSJNIDE5IDkgQyAyMy40MTggOSAyNyAxMi41ODIgMjcgMTcgTCAxOSAxNyBaIE0gMjUuMTk4IDE1LjQgQyAyNC42MiAxMy4xNSAyMi44NDkgMTEuMzgg'@;
put 'MjAuNiAxMC44MDEgTCAyMC42IDE1LjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIj48L3BhdGg+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNs'@;
put 'ci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMg'@;
put 'Mi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMzIDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gMjUgMTkgTCAx'@;
put 'NyAxOSBMIDE3IDExIEMgMTIuNTgyIDExIDkgMTQuNTgyIDkgMTkgQyA5IDIzLjQxOCAxMi41ODIgMjcgMTcgMjcgQyAyMS40MTggMjcgMjUgMjMuNDE4IDI1IDE5IFogTSAxOSAxNyBMIDI3IDE3IEMgMjcgMTIuNTgyIDIzLjQxOCA5IDE5IDkgWiI+PC9wYXRoPlxuICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ij48L2NpcmNsZT5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBa'@;
put 'Ij48L3BhdGg+XG4gIDxwYXRoIGQ9Ik0gMTcgMjcgQyAxMi41ODIgMjcgOSAyMy40MTggOSAxOSBDIDkgMTQuNTgyIDEyLjU4MiAxMSAxNyAxMSBMIDE3IDE5IEwgMjUgMTkgQyAyNSAyMy40MTggMjEuNDE4IDI3IDE3IDI3IFogTSAyMy4yNDcgMjAuNCBMIDE1LjQgMjAuNCBMIDE1LjQgMTIu'@;
put 'ODAyIEMgMTIuNjQgMTMuNTEzIDEwLjYwMSAxNi4wMTggMTAuNiAxOSBDIDEwLjYgMjIuNTM1IDEzLjQ2NSAyNS40IDE3IDI1LjQgQyAyMC4wNTQgMjUuNDAxIDIyLjYwOCAyMy4yNjEgMjMuMjQ3IDIwLjQgWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQiPjwvcGF0aD5cbiAgPHBhdGggZD0iTSAyNyAxNyBMIDE5IDE3IEwgMTkgMTUuMzQ1IEMgMTkuMDIxIDE1LjM0OCAxOS4wNDMgMTUuMzQ5IDE5LjA2NCAxNS4zNTEgQyAxOS4xMzQgMTUuMzU3IDE5LjIwMSAxNS4zNTkgMTkuMjcgMTUuMzU3IEwgMjYuODMxIDE1LjM1'@;
put 'NyBDIDI2Ljk0MiAxNS44ODcgMjcgMTYuNDM3IDI3IDE3IFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIj48L3BhdGg+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0'@;
put 'LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiI+PC9wYXRoPlxuICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcu'@;
put 'NjI1IDEyLjM5NSBDIDE2LjgwNyAxMy41ODMgMTcuNTcxIDE1LjE5NyAxOSAxNS4zNDUgTCAxOSAxNyBMIDI3IDE3IEMgMjcgMTYuNDM3IDI2Ljk0MiAxNS44ODcgMjYuODMxIDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gMjUgMTkgTCAxNyAxOSBMIDE3IDExIEMgMTIuNTgyIDExIDkgMTQuNTgy'@;
put 'IDkgMTkgQyA5IDIzLjQxOCAxMi41ODIgMjcgMTcgMjcgQyAyMS40MTggMjcgMjUgMjMuNDE4IDI1IDE5IFoiPjwvcGF0aD5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTSAyNi44NTQgMS4x'@;
put 'NDQgTCAyMS4xMzQgMTEuMDA0IEMgMjAuNTc5IDExLjgxOCAyMS4xMTQgMTIuOTI4IDIyLjA5NyAxMy4wMDEgQyAyMi4xNDIgMTMuMDA1IDIyLjE4OCAxMy4wMDYgMjIuMjM0IDEzLjAwNCBMIDMzLjY4NCAxMy4wMDQgQyAzNC42NjkgMTMuMDM2IDM1LjMxOSAxMS45OTEgMzQuODU1IDExLjEy'@;
put 'MiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxSLkNsclNoYXBlU2NhdHRlclBsb3Q9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIuODk1IDMxIDQgMzEgTCAzMiAzMSBDIDMzLjEwNSAzMSAzNCAzMC4xMDUgMzQgMjkgTCAzNCA3IEMgMzQgNS44OTUg'@;
put 'MzMuMTA1IDUgMzIgNSBaIE0gNCAyOSBMIDQgNyBMIDMyIDcgTCAzMiAyOSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkx'@;
put 'IDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4y'@;
put 'MTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIu'@;
put 'MzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1'@;
put 'Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTku'@;
put 'NzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIg'@;
put 'MjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUuNTM2IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMg'@;
put 'MTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYu'@;
put 'OTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMg'@;
put 'MjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5'@;
put 'NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA5LjEwMSAxNS44IEMgOS40MTMgMTYuMTExIDkuOTE5IDE2LjExMSAxMC4yMzEgMTUuOCBMIDExLjM5MSAxNC42NCBMIDEyLjU1MSAxNS44IEMgMTIuOTY0IDE2LjI1NiAxMy43MTcgMTYuMDk0IDEzLjkwNSAxNS41'@;
put 'MDcgQyAxNC4wMDIgMTUuMjA4IDEzLjkxNCAxNC44ODEgMTMuNjgxIDE0LjY3IEwgMTIuNTMxIDEzLjU0IEwgMTMuNjkxIDEyLjM4IEMgMTQuMTQ3IDExLjk2NiAxMy45ODUgMTEuMjE0IDEzLjM5OSAxMS4wMjUgQyAxMy4xIDEwLjkyOSAxMi43NzIgMTEuMDE3IDEyLjU2MSAxMS4yNSBMIDEx'@;
put 'LjQwMSAxMi40MSBMIDEwLjIzMSAxMS4yMiBDIDkuODE3IDEwLjc2MyA5LjA2NSAxMC45MjYgOC44NzcgMTEuNTEyIEMgOC43OCAxMS44MTEgOC44NjggMTIuMTM5IDkuMTAxIDEyLjM1IEwgMTAuMjYxIDEzLjU0IEwgOS4xMDEgMTQuNjcgQyA4Ljc4OSAxNC45ODIgOC43ODkgMTUuNDg3IDku'@;
put 'MTAxIDE1LjggWiBNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45'@;
put 'ODkgMjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMw'@;
put 'NiAyMC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYg'@;
put 'MjUuNTM2IFogTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBDIDI3LjgxMyAxOS43NTEgMjcuNzI1'@;
put 'IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1LjIxMiAxNi45NTMgTCAyNC4wNDIg'@;
put 'MTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIuNiAyMC4wMyAyMi45MTIgMjAuMzQz'@;
put 'IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUu'@;
put 'NjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEz'@;
put 'LjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYuMTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAx'@;
put 'Mi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAxNC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEg'@;
put 'MTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgxMSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEw'@;
put 'MSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUu'@;
put 'ODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4x'@;
put 'MTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMgMTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBD'@;
put 'IDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYgQyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgZD0iTSAyMi45MTIgMjAuMzQzIEMgMjMuMjI0IDIwLjY1NCAyMy43MyAyMC42NTQgMjQuMDQyIDIwLjM0MyBMIDI1LjIwMiAxOS4xODMgTCAyNi4zNjIgMjAuMzQzIEMgMjYuNzc1IDIwLjc5OSAyNy41MjggMjAuNjM3IDI3LjcxNiAyMC4wNSBD'@;
put 'IDI3LjgxMyAxOS43NTEgMjcuNzI1IDE5LjQyNCAyNy40OTIgMTkuMjEzIEwgMjYuMzQyIDE4LjA4MyBMIDI3LjUwMiAxNi45MjMgQyAyNy45NTggMTYuNTA5IDI3Ljc5NiAxNS43NTcgMjcuMjEgMTUuNTY4IEMgMjYuOTExIDE1LjQ3MiAyNi41ODMgMTUuNTYgMjYuMzcyIDE1Ljc5MyBMIDI1'@;
put 'LjIxMiAxNi45NTMgTCAyNC4wNDIgMTUuNzYzIEMgMjMuNjI4IDE1LjMwNiAyMi44NzYgMTUuNDY5IDIyLjY4OCAxNi4wNTUgQyAyMi41OTEgMTYuMzU0IDIyLjY3OSAxNi42ODIgMjIuOTEyIDE2Ljg5MyBMIDI0LjA3MiAxOC4wODMgTCAyMi45MTIgMTkuMjEzIEMgMjIuNiAxOS41MjUgMjIu'@;
put 'NiAyMC4wMyAyMi45MTIgMjAuMzQzIFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0gMzQgMTIuMzQgTCAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTYgMzEgMiAzMC4xMDUgMiAyOSBMIDIgNyBDIDIgNS44OTYgMi44OTYgNSA0IDUgTCAyMi41NyA1IEMgMjEuOTY5IDkuMjMz'@;
put 'IDI1LjA1IDEzLjEgMjkuMzEgMTMuNDYgTCAzMC4zMiAxMy40OCBDIDMxLjYyNiAxMy40MjkgMzIuODk1IDEzLjAzNiAzNCAxMi4zNCBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEy'@;
put 'Ljk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAx'@;
put 'MC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAx'@;
put 'IDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1'@;
put 'LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMg'@;
put 'MTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYg'@;
put 'QyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYz'@;
put 'NyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2'@;
put 'LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBD'@;
put 'IDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0gMzQgMjkgQyAzNCAzMC4xMDUgMzMuMTA1IDMxIDMyIDMxIEwgNCAzMSBDIDIuODk1IDMxIDIgMzAuMTA1IDIgMjkgTCAyIDcgQyAyIDUuODk1IDIuODk1IDUgNCA1IEwgMjEuOTU4IDUgTCAyMC43'@;
put 'ODYgNyBMIDQgNyBMIDQgMjkgTCAzMiAyOSBMIDMyIDE1LjM1NyBMIDM0IDE1LjM1NyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNIDkuMTAxIDE1LjggQyA5LjQxMyAxNi4xMTEgOS45MTkgMTYu'@;
put 'MTExIDEwLjIzMSAxNS44IEwgMTEuMzkxIDE0LjY0IEwgMTIuNTUxIDE1LjggQyAxMi45NjQgMTYuMjU2IDEzLjcxNyAxNi4wOTQgMTMuOTA1IDE1LjUwNyBDIDE0LjAwMiAxNS4yMDggMTMuOTE0IDE0Ljg4MSAxMy42ODEgMTQuNjcgTCAxMi41MzEgMTMuNTQgTCAxMy42OTEgMTIuMzggQyAx'@;
put 'NC4xNDcgMTEuOTY2IDEzLjk4NSAxMS4yMTQgMTMuMzk5IDExLjAyNSBDIDEzLjEgMTAuOTI5IDEyLjc3MiAxMS4wMTcgMTIuNTYxIDExLjI1IEwgMTEuNDAxIDEyLjQxIEwgMTAuMjMxIDExLjIyIEMgOS44MTcgMTAuNzYzIDkuMDY1IDEwLjkyNiA4Ljg3NyAxMS41MTIgQyA4Ljc4IDExLjgx'@;
put 'MSA4Ljg2OCAxMi4xMzkgOS4xMDEgMTIuMzUgTCAxMC4yNjEgMTMuNTQgTCA5LjEwMSAxNC42NyBDIDguNzg5IDE0Ljk4MiA4Ljc4OSAxNS40ODcgOS4xMDEgMTUuOCBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVy'@;
put 'dGVkIiBkPSJNIDE1LjE3NiAyNS41MzYgQyAxNS40ODggMjUuODQ3IDE1Ljk5NCAyNS44NDcgMTYuMzA2IDI1LjUzNiBMIDE3LjQ2NiAyNC4zNzYgTCAxOC42MjYgMjUuNTM2IEMgMTkuMDM5IDI1Ljk5MiAxOS43OTIgMjUuODMgMTkuOTggMjUuMjQzIEMgMjAuMDc3IDI0Ljk0NCAxOS45ODkg'@;
put 'MjQuNjE3IDE5Ljc1NiAyNC40MDYgTCAxOC42MDYgMjMuMjc2IEwgMTkuNzY2IDIyLjExNiBDIDIwLjIyMiAyMS43MDIgMjAuMDYgMjAuOTUgMTkuNDc0IDIwLjc2MSBDIDE5LjE3NSAyMC42NjUgMTguODQ3IDIwLjc1MyAxOC42MzYgMjAuOTg2IEwgMTcuNDc2IDIyLjE0NiBMIDE2LjMwNiAy'@;
put 'MC45NTYgQyAxNS44OTIgMjAuNDk5IDE1LjE0IDIwLjY2MiAxNC45NTIgMjEuMjQ4IEMgMTQuODU1IDIxLjU0NyAxNC45NDMgMjEuODc1IDE1LjE3NiAyMi4wODYgTCAxNi4zMzYgMjMuMjc2IEwgMTUuMTc2IDI0LjQwNiBDIDE0Ljg2NCAyNC43MTggMTQuODY0IDI1LjIyMyAxNS4xNzYgMjUu'@;
put 'NTM2IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYy'@;
put 'IDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYzNyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1'@;
put 'LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44'@;
put 'OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBDIDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJN'@;
put 'IDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5MSAz'@;
put 'NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcuNTk0'@;
put 'IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gOS4xMDEgMTUuOCBDIDkuNDEzIDE2LjExMSA5LjkxOSAxNi4xMTEgMTAuMjMxIDE1LjggTCAxMS4zOTEgMTQuNjQgTCAxMi41NTEgMTUuOCBDIDEy'@;
put 'Ljk2NCAxNi4yNTYgMTMuNzE3IDE2LjA5NCAxMy45MDUgMTUuNTA3IEMgMTQuMDAyIDE1LjIwOCAxMy45MTQgMTQuODgxIDEzLjY4MSAxNC42NyBMIDEyLjUzMSAxMy41NCBMIDEzLjY5MSAxMi4zOCBDIDE0LjE0NyAxMS45NjYgMTMuOTg1IDExLjIxNCAxMy4zOTkgMTEuMDI1IEMgMTMuMSAx'@;
put 'MC45MjkgMTIuNzcyIDExLjAxNyAxMi41NjEgMTEuMjUgTCAxMS40MDEgMTIuNDEgTCAxMC4yMzEgMTEuMjIgQyA5LjgxNyAxMC43NjMgOS4wNjUgMTAuOTI2IDguODc3IDExLjUxMiBDIDguNzggMTEuODExIDguODY4IDEyLjEzOSA5LjEwMSAxMi4zNSBMIDEwLjI2MSAxMy41NCBMIDkuMTAx'@;
put 'IDE0LjY3IEMgOC43ODkgMTQuOTgyIDguNzg5IDE1LjQ4NyA5LjEwMSAxNS44IFogTSAxNS4xNzYgMjUuNTM2IEMgMTUuNDg4IDI1Ljg0NyAxNS45OTQgMjUuODQ3IDE2LjMwNiAyNS41MzYgTCAxNy40NjYgMjQuMzc2IEwgMTguNjI2IDI1LjUzNiBDIDE5LjAzOSAyNS45OTIgMTkuNzkyIDI1'@;
put 'LjgzIDE5Ljk4IDI1LjI0MyBDIDIwLjA3NyAyNC45NDQgMTkuOTg5IDI0LjYxNyAxOS43NTYgMjQuNDA2IEwgMTguNjA2IDIzLjI3NiBMIDE5Ljc2NiAyMi4xMTYgQyAyMC4yMjIgMjEuNzAyIDIwLjA2IDIwLjk1IDE5LjQ3NCAyMC43NjEgQyAxOS4xNzUgMjAuNjY1IDE4Ljg0NyAyMC43NTMg'@;
put 'MTguNjM2IDIwLjk4NiBMIDE3LjQ3NiAyMi4xNDYgTCAxNi4zMDYgMjAuOTU2IEMgMTUuODkyIDIwLjQ5OSAxNS4xNCAyMC42NjIgMTQuOTUyIDIxLjI0OCBDIDE0Ljg1NSAyMS41NDcgMTQuOTQzIDIxLjg3NSAxNS4xNzYgMjIuMDg2IEwgMTYuMzM2IDIzLjI3NiBMIDE1LjE3NiAyNC40MDYg'@;
put 'QyAxNC44NjQgMjQuNzE4IDE0Ljg2NCAyNS4yMjMgMTUuMTc2IDI1LjUzNiBaIE0gMjIuOTEyIDIwLjM0MyBDIDIzLjIyNCAyMC42NTQgMjMuNzMgMjAuNjU0IDI0LjA0MiAyMC4zNDMgTCAyNS4yMDIgMTkuMTgzIEwgMjYuMzYyIDIwLjM0MyBDIDI2Ljc3NSAyMC43OTkgMjcuNTI4IDIwLjYz'@;
put 'NyAyNy43MTYgMjAuMDUgQyAyNy44MTMgMTkuNzUxIDI3LjcyNSAxOS40MjQgMjcuNDkyIDE5LjIxMyBMIDI2LjM0MiAxOC4wODMgTCAyNy41MDIgMTYuOTIzIEMgMjcuOTU4IDE2LjUwOSAyNy43OTYgMTUuNzU3IDI3LjIxIDE1LjU2OCBDIDI2LjkxMSAxNS40NzIgMjYuNTgzIDE1LjU2IDI2'@;
put 'LjM3MiAxNS43OTMgTCAyNS4yMTIgMTYuOTUzIEwgMjQuMDQyIDE1Ljc2MyBDIDIzLjYyOCAxNS4zMDYgMjIuODc2IDE1LjQ2OSAyMi42ODggMTYuMDU1IEMgMjIuNTkxIDE2LjM1NCAyMi42NzkgMTYuNjgyIDIyLjkxMiAxNi44OTMgTCAyNC4wNzIgMTguMDgzIEwgMjIuOTEyIDE5LjIxMyBD'@;
put 'IDIyLjYgMTkuNTI1IDIyLjYgMjAuMDMgMjIuOTEyIDIwLjM0MyBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAx'@;
put 'MS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAwNSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0'@;
put 'MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcuMzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+XG4gIDxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgZmlsbC1vcGFjaXR5PSIwIi8+JyksUi5DbHJTaGFwZVRpY2tDaGFydD0oMCxtLmNsckljb25TVkcp'@;
put 'KCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1Ljg5NSAyIDcgTCAyIDI5IEMgMiAzMC4xMDUgMi44OTUgMzEgNCAzMSBMIDMyIDMxIEMgMzMuMTA1IDMxIDM0IDMwLjEwNSAzNCAyOSBMIDM0'@;
put 'IDcgQyAzNCA1Ljg5NSAzMy4xMDUgNSAzMiA1IFogTSA0IDI5IEwgNCA3IEwgMzIgNyBMIDMyIDI5IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwg'@;
put 'MTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIwIDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAyOC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45'@;
put 'MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0gMzQgNyBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMg'@;
put 'MiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDMyIDUgQyAzMy4xMDUgNSAzNCA1Ljg5NiAzNCA3IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMgMjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAy'@;
put 'NSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAyMiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEwIDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNIDMyIDEzLjIyIEwgMzIgMjkgTCA0IDI5IEwgNCA3IEwgMjIuNTcgNyBDIDIyLjUyNCA2LjY2OCAyMi41MDEgNi4zMzQgMjIuNSA2IEMgMjIuNTAxIDUuNjY1IDIyLjUyNCA1LjMzMSAyMi41NyA1IEwgNCA1IEMgMi44OTUg'@;
put 'NSAyIDUuODk1IDIgNyBMIDIgMjkgQyAyIDMwLjEwNCAyLjg5NSAzMSA0IDMxIEwgMzIgMzEgQyAzMy4xMDQgMzEgMzQgMzAuMTA0IDM0IDI5IEwgMzQgMTIuMzQgQyAzMy4zOCAxMi43MyAzMi43MDYgMTMuMDI2IDMyIDEzLjIyIFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNIDYgMjUgTCA4IDI1IEwgOCAyMiBMIDEwIDIyIEwgMTAgMjUgTCAxMyAyNSBMIDEzIDIyIEwgMTUgMjIgTCAxNSAyNSBMIDE4IDI1IEwgMTggMjIgTCAyMCAyMiBMIDIwIDI1IEwgMjMgMjUgTCAyMyAyMiBMIDI1IDIy'@;
put 'IEwgMjUgMjUgTCAyNy43MjMgMjUgQyAyOC4wMjMgMjUuMDIgMjguMjkzIDI1LjE4IDI4LjQ2MyAyNS40MyBDIDI4LjkwMyAyNi4wNiAyOC40ODMgMjYuOTMgMjcuNzIzIDI2Ljk5IEwgNiAyNi45OTEgWiIvPlxuICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTSAzNCAxMi4zNCBMIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAz'@;
put 'MSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIyLjU3IDUgQyAyMS45NjkgOS4yMzMgMjUuMDUgMTMuMSAyOS4zMSAxMy40NiBMIDMwLjMyIDEzLjQ4IEMgMzEuNjI2IDEzLjQyOSAzMi44OTUgMTMuMDM2IDM0IDEy'@;
put 'LjM0IFogTSA2IDI2Ljk5MSBMIDI3LjcyMyAyNi45OSBDIDI4LjQ4MyAyNi45MyAyOC45MDMgMjYuMDYgMjguNDYzIDI1LjQzIEMgMjguMjkzIDI1LjE4IDI4LjAyMyAyNS4wMiAyNy43MjMgMjUgTCAyNSAyNSBMIDI1IDIyIEwgMjMgMjIgTCAyMyAyNSBMIDIwIDI1IEwgMjAgMjIgTCAxOCAy'@;
put 'MiBMIDE4IDI1IEwgMTUgMjUgTCAxNSAyMiBMIDEzIDIyIEwgMTMgMjUgTCAxMCAyNSBMIDEwIDIyIEwgOCAyMiBMIDggMjUgTCA2IDI1IFoiLz5cbiAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTSAzNCAyOSBDIDM0IDMwLjEwNSAzMy4xMDUgMzEgMzIgMzEgTCA0IDMxIEMgMi44OTUgMzEgMiAzMC4xMDUgMiAyOSBMIDIg'@;
put 'NyBDIDIgNS44OTUgMi44OTUgNSA0IDUgTCAyMS45NTggNSBMIDIwLjc4NiA3IEwgNCA3IEwgNCAyOSBMIDMyIDI5IEwgMzIgMTUuMzU3IEwgMzQgMTUuMzU3IFoiLz5cbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQi'@;
put 'IGQ9Ik0gNiAyNSBMIDggMjUgTCA4IDIyIEwgMTAgMjIgTCAxMCAyNSBMIDEzIDI1IEwgMTMgMjIgTCAxNSAyMiBMIDE1IDI1IEwgMTggMjUgTCAxOCAyMiBMIDIwIDIyIEwgMjAgMjUgTCAyMyAyNSBMIDIzIDIyIEwgMjUgMjIgTCAyNSAyNSBMIDI3LjcyMyAyNSBDIDI4LjAyMyAyNS4wMiAy'@;
put 'OC4yOTMgMjUuMTggMjguNDYzIDI1LjQzIEMgMjguOTAzIDI2LjA2IDI4LjQ4MyAyNi45MyAyNy43MjMgMjYuOTkgTCA2IDI2Ljk5MSBaIi8+XG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk'@;
put 'PSJNIDI2Ljg1NCAxLjE0NCBMIDIxLjEzNCAxMS4wMDQgQyAyMC41NzkgMTEuODE4IDIxLjExNCAxMi45MjggMjIuMDk3IDEzLjAwMSBDIDIyLjE0MiAxMy4wMDUgMjIuMTg4IDEzLjAwNiAyMi4yMzQgMTMuMDA0IEwgMzMuNjg0IDEzLjAwNCBDIDM0LjY2OSAxMy4wMzYgMzUuMzE5IDExLjk5'@;
put 'MSAzNC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPlxuICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNIDM0IDI5IEMgMzQgMzAuMTA1IDMzLjEwNSAzMSAzMiAzMSBMIDQgMzEgQyAyLjg5NiAzMSAyIDMwLjEwNSAyIDI5IEwgMiA3IEMgMiA1Ljg5NiAyLjg5NiA1IDQgNSBMIDIxLjk1OCA1IEwgMTcuNjI1IDEyLjM5NSBDIDE2Ljc5NSAxMy42MDEgMTcu'@;
put 'NTk0IDE1LjI0NSAxOS4wNjQgMTUuMzUxIEMgMTkuMTM0IDE1LjM1NyAxOS4yMDEgMTUuMzU5IDE5LjI3IDE1LjM1NyBMIDM0IDE1LjM1NyBaIE0gNiAyNi45OTEgTCAyNy43MjMgMjYuOTkgQyAyOC40ODMgMjYuOTMgMjguOTAzIDI2LjA2IDI4LjQ2MyAyNS40MyBDIDI4LjI5MyAyNS4xOCAy'@;
put 'OC4wMjMgMjUuMDIgMjcuNzIzIDI1IEwgMjUgMjUgTCAyNSAyMiBMIDIzIDIyIEwgMjMgMjUgTCAyMCAyNSBMIDIwIDIyIEwgMTggMjIgTCAxOCAyNSBMIDE1IDI1IEwgMTUgMjIgTCAxMyAyMiBMIDEzIDI1IEwgMTAgMjUgTCAxMCAyMiBMIDggMjIgTCA4IDI1IEwgNiAyNSBaIi8+XG4gIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0gMjYuODU0IDEuMTQ0IEwgMjEuMTM0IDExLjAwNCBDIDIwLjU3OSAxMS44MTggMjEuMTE0IDEyLjkyOCAyMi4wOTcgMTMuMDAxIEMgMjIuMTQyIDEzLjAw'@;
put 'NSAyMi4xODggMTMuMDA2IDIyLjIzNCAxMy4wMDQgTCAzMy42ODQgMTMuMDA0IEMgMzQuNjY5IDEzLjAzNiAzNS4zMTkgMTEuOTkxIDM0Ljg1NSAxMS4xMjIgQyAzNC44MzQgMTEuMDgxIDM0LjgxIDExLjA0MiAzNC43ODQgMTEuMDA0IEwgMjkuMDY0IDEuMTQ0IEMgMjguNTcgMC4yOTkgMjcu'@;
put 'MzQ4IDAuMjk5IDI2Ljg1NCAxLjE0NCBaIi8+JyksUi5DbHJTaGFwZUJlbGxDdXJ2ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsMjlIM0ExLDEsMCwxLDEsMywyN0gzM0ExLDEsMCwxLDEsMzMsMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg'@;
put 'Lz48cGF0aCBkPSJNMzMsMjVoLS42MmE4LjExLDguMTEsMCwwLDEtOC02LjY3QzIzLjYyLDE0LjQ0LDIxLjg5LDcuOTQsMTgsNy45NHMtNS42OSw2LjUxLTYuMzgsMTAuMzlhOC4xMSw4LjExLDAsMCwxLTgsNi42NUgzYTEsMSwwLDEsMSwwLTJoLjZBNi4xMSw2LjExLDAsMCwwLDkuNiwxOGMx'@;
put 'LjQxLTcuODgsNC4zLTEyLDguMzUtMTJzNi45Myw0LjE2LDguMzMsMTJhNi4xMSw2LjExLDAsMCwwLDYsNUgzM2ExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksUi5DaGFydFNoYXBlcz17ImF4aXMtY2hhcnQiOlIuQ2xyU2hh'@;
put 'cGVBeGlzQ2hhcnQsImJhci1jaGFydCI6Ui5DbHJTaGFwZUJhckNoYXJ0LCJidWJibGUtY2hhcnQiOlIuQ2xyU2hhcGVCdWJibGVDaGFydCwiY2xvdWQtY2hhcnQiOlIuQ2xyU2hhcGVDbG91ZENoYXJ0LCJjdXJ2ZS1jaGFydCI6Ui5DbHJTaGFwZUN1cnZlQ2hhcnQsImdyaWQtY2hhcnQiOlIu'@;
put 'Q2xyU2hhcGVHcmlkQ2hhcnQsImxpbmUtY2hhcnQiOlIuQ2xyU2hhcGVMaW5lQ2hhcnQsInBpZS1jaGFydCI6Ui5DbHJTaGFwZVBpZUNoYXJ0LCJ0aWNrLWNoYXJ0IjpSLkNsclNoYXBlVGlja0NoYXJ0LCJzY2F0dGVyLXBsb3QiOlIuQ2xyU2hhcGVTY2F0dGVyUGxvdCwiYm94LXBsb3QiOlIu'@;
put 'Q2xyU2hhcGVCb3hQbG90LCJoZWF0LW1hcCI6Ui5DbHJTaGFwZUhlYXRNYXAsImJlbGwtY3VydmUiOlIuQ2xyU2hhcGVCZWxsQ3VydmV9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNoYXJ0U2hhcGVzLCJhbmFseXRpY3MiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5DaGFydFNoYXBlc1si'@;
put 'bGluZS1jaGFydCJdKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKFIuQ2hhcnRTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvbW1lcmNlLXNoYXBlcy50cyI6Ci8q'@;
put 'ISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ29tbWVyY2VT'@;
put 'aGFwZXM9Ui5DbHJTaGFwZUZhY3Rvcnk9Ui5DbHJTaGFwZUVtcGxveWVlPVIuQ2xyU2hhcGVFbXBsb3llZUdyb3VwPVIuQ2xyU2hhcGVSdWJsZT1SLkNsclNoYXBlUGVzbz1SLkNsclNoYXBlQ29pbkJhZz1SLkNsclNoYXBlQml0Y29pbj1SLkNsclNoYXBlWWVuPVIuQ2xyU2hhcGVXb249Ui5D'@;
put 'bHJTaGFwZVJ1cGVlPVIuQ2xyU2hhcGVQb3VuZD1SLkNsclNoYXBlRUNoZWNrPVIuQ2xyU2hhcGVEb2xsYXJCaWxsPVIuQ2xyU2hhcGVCYW5rPVIuQ2xyU2hhcGVDcmVkaXRDYXJkPVIuQ2xyU2hhcGVEb2xsYXI9Ui5DbHJTaGFwZUV1cm89Ui5DbHJTaGFwZVN0b3JlPVIuQ2xyU2hhcGVXYWxs'@;
put 'ZXQ9Ui5DbHJTaGFwZVNob3BwaW5nQ2FydD1SLkNsclNoYXBlUGlnZ3lCYW5rPVIuQ2xyU2hhcGVTaG9wcGluZ0JhZz1SLkNsclNoYXBlQ2FsY3VsYXRvcj12b2lkIDA7dmFyIGI9ZWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRp'@;
put 'bHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWVlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ui5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNOCwzMlY0SDI4VjMyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiw4SDI1LjY3VjZIMTFhMSwxLDAsMCwwLTEsMXY0LjY3aDJaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMiAxNiAxMCAxNiAxMCAx'@;
put 'OCAxNCAxOCAxNCAxNCAxMiAxNCAxMiAxNiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHBvaW50cz0iMjQgMTYgMjIgMTYgMjIgMTggMjYgMTggMjYgMTQgMjQgMTQgMjQgMTYiLz5cbiAgICAgICAgICAgIDxwb2x5'@;
put 'Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBwb2ludHM9IjE4IDE2IDE2IDE2IDE2IDE4IDIwIDE4IDIwIDE0IDE4IDE0IDE4IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIg'@;
put 'cG9pbnRzPSIxMiAyMiAxMCAyMiAxMCAyNCAxNCAyNCAxNCAyMCAxMiAyMCAxMiAyMiIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHBvaW50cz0iMjQgMjIgMjIgMjIgMjIgMjQgMjYgMjQgMjYgMjAgMjQgMjAgMjQg'@;
put 'MjIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiBwb2ludHM9IjE4IDIyIDE2IDIyIDE2IDI0IDIwIDI0IDIwIDIwIDE4IDIwIDE4IDIyIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgcG9pbnRzPSIxMiAyOCAxMCAyOCAxMCAzMCAxNCAzMCAxNCAyNiAxMiAyNiAxMiAyOCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiBwb2ludHM9IjI0IDI4IDIyIDI4IDIy'@;
put 'IDMwIDI2IDMwIDI2IDI2IDI0IDI2IDI0IDI4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHBvaW50cz0iMTggMjggMTYgMjggMTYgMzAgMjAgMzAgMjAgMjYgMTggMjYgMTggMjgiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlpNMTIsMjhIMTBWMjZoMlptMC02SDEwVjIwaDJabTAtNkgxMFYxNGgyWm03LDEy'@;
put 'SDE3VjI2aDJabTAtNkgxN1YyMGgyWm0wLTZIMTdWMTRoMlptNywxMkgyNFYyNmgyWm0wLTZIMjRWMjBoMlptMC02SDI0VjE0aDJabTAtN0gxMFY1SDI2WiIvPicpLFIuQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAu'@;
put 'MDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksUi5DbHJTaGFwZVBpZ2d5QmFu'@;
put 'az0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEwLjQ3YTExLjY1LDExLjY1LDAsMCwwLTYuMzEuNTJBLjguOCwwLDEsMCwxNCwxMi40OCwxMC4xMSwxMC4xMSwwLDAsMSwxOS40NCwxMmEuOC44LDAs'@;
put 'MSwwLC4yOC0xLjU3WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjI1LjM4IiBjeT0iMTYuNzEiIHI9IjEuMzYiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0zIiBkPSJNMzUuNTEsMTguNjNhMSwxLDAsMCwwLS44NC0uNDQsMy40MiwzLjQyLDAsMCwxLTIuMDktMS4xMiwxNy4zNSwxNy4zNSwwLDAsMS0yLjYzLTMuNzhsMi44OC00LjVBMS44OSwxLjg5LDAsMCwwLDMzLDdhMS43NywxLjc3LDAsMCwwLTEuMzMtMSwxMC4xMiwxMC4xMiww'@;
put 'LDAsMC01LjM5Ljc1LDEyLjcyLDEyLjcyLDAsMCwwLTIuNzIsMS42MywxNi45NCwxNi45NCwwLDAsMC01LjE2LTEuMzlDMTEuMzEsNi4zLDQuODMsMTAuOSw0LDE3SDRhMi41NiwyLjU2LDAsMCwxLTEuMzgtMS41MywxLjgxLDEuODEsMCwwLDEsLjE0LTEuNCwxLjE5LDEuMTksMCwwLDEsLjQz'@;
put 'LS40MywxLjA4LDEuMDgsMCwwLDAtMS4xMi0xLjg1QTMuMzEsMy4zMSwwLDAsMCwuOTEsMTNhNCw0LDAsMCwwLS4zMywzLjA4QTQuNzYsNC43NiwwLDAsMCwzLDE4Ljk1bC45Mi40NmExNy41OCwxNy41OCwwLDAsMCwxLjgyLDdsLjE3LjM4QTIzLDIzLDAsMCwwLDkuMiwzMS44OGExLDEsMCww'@;
put 'LDAsLjc1LjM0aDQuNTJhMSwxLDAsMCwwLC45Mi0xLjM4TDE1LDI5Ljk0bDEuMTguMTNhMjAuMzMsMjAuMzMsMCwwLDAsNCwwYy4zNy42Ljc3LDEuMiwxLjIxLDEuNzlhMSwxLDAsMCwwLC44LjQxaDQuMzRhMSwxLDAsMCwwLC45Mi0xLjM5Yy0uMTctLjQtLjM0LS44My0uNDctMS4yLS4xOC0u'@;
put 'NTMtLjMyLTEtLjQzLTEuNDVBMTMuMTgsMTMuMTgsMCwwLDAsMjkuNTYsMjZhMTIuNSwxMi41LDAsMCwwLDMsMCwxLDEsMCwwLDAsLjc4LS42MmwyLjI2LTUuODFBMSwxLDAsMCwwLDM1LjUxLDE4LjYzWm0tMy43OCw1LjQ0YTExLjM3LDExLjM3LDAsMCwxLTIuMzUtLjExaDBhOC4yLDguMiww'@;
put 'LDAsMS0yLjUzLS44NywxLDEsMCwwLDAtLjkzLDEuNzcsMTEuNzIsMTEuNzIsMCwwLDAsMS4yOS41OCw4LDgsMCwwLDEtMS44LDEuMTZsLTEuMDYuNDhzLjQ5LDIuMTkuODIsMy4xNkgyMi43OWMtLjI0LS4zNC0xLjQ1LTIuMzYtMS40NS0yLjM2bC0uNjcuMDlhMTguNTMsMTguNTMsMCwwLDEt'@;
put 'NC4yNS4xMmMtLjY2LS4wNi0xLjc2LS4yLTIuNjItLjM1bC0xLjU1LS4yN3MuNjMsMi40My43NSwyLjc0djBIMTAuNDJBMjAuNTcsMjAuNTcsMCwwLDEsNy43NiwyNmwtLjE4LS4zOUExNC42MiwxNC42MiwwLDAsMSw2LDE3LjQ4Yy41NC01LjE5LDYuMTItOS4xMSwxMi4xOS04LjU0YTE1LjQ3'@;
put 'LDE1LjQ3LDAsMCwxLDUuMDgsMS40OGwuNjIuMjkuNS0uNDdBMTAuMjksMTAuMjksMCwwLDEsMjcsOC41NGE4LjI1LDguMjUsMCwwLDEsNC0uNjVsLTMuMzgsNS4yOS4yNS41aDBhMjEuMTYsMjEuMTYsMCwwLDAsMy4zMSw0Ljg0LDYuNDksNi40OSwwLDAsMCwyLjE0LDEuMzlaIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUsMTguODdBNS44Myw1LjgzLDAsMCwxLDMzLDE3LjYxYTIxLjYzLDIxLjYzLDAsMCwxLTMuMjktNC44NGwzLjM5LTUuMjlhLjkuOSwwLDAsMC0uNTQtMS4zOCw5LjY3LDkuNjcsMCwwLDAt'@;
put 'NS4xMy43MiwxMiwxMiwwLDAsMC0zLjEzLDJBMTcuMzcsMTcuMzcsMCwwLDAsMTguNiw3LjE1QzExLjgsNi41Miw1LjI3LDEwLjksNC41NCwxN2wtLjE0LS4wN0EyLjc2LDIuNzYsMCwwLDEsMi45LDE1LjI5YTIsMiwwLDAsMSwuMTUtMS41NSwxLjMyLDEuMzIsMCwwLDEsLjQ3LS40OCwxLjA4'@;
put 'LDEuMDgsMCwxLDAtMS4xMi0xLjg1LDMuNDUsMy40NSwwLDAsMC0xLjIzLDEuMjVBNC4xNiw0LjE2LDAsMCwwLC44NCwxNS45YTUsNSwwLDAsMCwyLjU3LDNsMSwuNTRhMTguNjIsMTguNjIsMCwwLDAsMiw3LjMsMjMsMjMsMCwwLDAsMyw0Ljc5LDEsMSwwLDAsMCwuOC4zOGgzLjYxYS41Mi41'@;
put 'MiwwLDAsMCwuNC0uNzVMMTQsMzAuMzhhMTEsMTEsMCwwLDEtLjMzLTEuMThjLjkxLjE2LDIuMDguMzEsMi44Ny4zOGEyMC4wNywyMC4wNywwLDAsMCwzLjEyLDBjLjM5LjcuNzksMS4zMywxLjE1LDEuODVhLjkzLjkzLDAsMCwwLC43Ny40MWgzLjExYS42NS42NSwwLDAsMCwuNjEtLjg1Yy0u'@;
put 'MjMtLjc0LS41My0xLjc1LS43MS0yLjM3YTE1LjksMTUuOSwwLDAsMCwzLjc1LTEuNzZjLjE2LS4xMS4zMi0uMjYuNDgtLjM5YTEzLjc3LDEzLjc3LDAsMCwxLTIuNDItMSwuOC44LDAsMCwxLC43NC0xLjQyLDExLjY0LDExLjY0LDAsMCwwLDMuMTgsMS4xLDEzLjMxLDEzLjMxLDAsMCwwLDIu'@;
put 'NjguMTIsMSwxLDAsMCwwLC45LS42NmwxLjczLTQuNDRBMSwxLDAsMCwwLDM1LDE4Ljg3Wk0xMy43OSwxMS41OWEuODYuODYsMCwwLDEtLjMuMDUuODUuODUsMCwwLDEtLjMtMS42NCwxMi40MSwxMi40MSwwLDAsMSw2LjY5LS41NS44NS44NSwwLDEsMS0uMywxLjY3QTEwLjc1LDEwLjc1LDAs'@;
put 'MCwwLDEzLjc5LDExLjU5Wm0xMi41Miw2LjEyYTEuNDQsMS40NCwwLDEsMSwxLjQ0LTEuNDRBMS40NCwxLjQ0LDAsMCwxLDI2LjMyLDE3LjcyWiIvPicpLFIuQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4y'@;
put 'NSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMy4wOCw1LjM3QTEsMSwwLDAsMCwzMi4zMSw1SDExLjQ5bC42NSwySDMxTDI4LjMzLDE5aC0xNUw4Ljc2LDQuNTNhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjYyYTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjRsNC41OSwxNC41TDkuOTUsMjEuNDhsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAs'@;
put 'OS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEzYTEsMSwwLDAsMCwxLS43OGwzLjE3LTE0QTEsMSwwLDAsMCwzMy4wOCw1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy4zMyIgY3k9IjI5Ljc1IiByPSIyLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI3IiBjeT0i'@;
put 'MjkuNzUiIHI9IjIuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMC43MSA3IDIxLjg3IDUgMTEuNDkgNSAxMi4xNCA3IDIwLjcxIDciIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjE1LDE1LjQsMjguMzMsMTloLTE1TDguNzYsNC41M2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjJhMSwxLDAsMSwwLS41OSwxLjkyTDcsNS42NGw0LjU5LDE0'@;
put 'LjVMOS45NSwyMS40OGwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSwwLDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTNhMSwxLDAsMCwwLDEtLjc4bDEuMDktNC44MloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjciIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTIyLjU3LDdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUgxMS40OWwuNjUsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMCwxMy41bC0uNDIsMEwyOC4zMywxOWgtMTVMOC43Niw0LjUzYTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42MmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY0bDQuNTksMTQuNUw5Ljk1LDIxLjQ4bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDkuNzQsMjUsMi43NSwyLjc1LDAsMCww'@;
put 'LDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xM2ExLDEsMCwwLDAsMS0uNzhsMS41Ny02LjkxQTcuNTEsNy41MSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTMuNSIgY3k9'@;
put 'IjI5LjUiIHI9IjIuNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMzMuMSw2LjM5QTEsMSwwLDAsMCwzMi4zMSw2SDkuMjFMOC43Niw0LjU3YTEsMSwwLDAsMC0uNjYtLjY1TDQsMi42NmExLDEsMCwxLDAtLjU5LDEuOTJMNyw1LjY4bDQuNTgsMTQuNDdMOS45NSwyMS40OWwtLjEzLjEzQTIuNjYsMi42NiwwLDAsMCw5Ljc0LDI1LDIuNzUsMi43NSww'@;
put 'LDAsMCwxMiwyNkgyOC42OWExLDEsMCwwLDAsMC0ySDExLjg0YS42Ny42NywwLDAsMS0uNTYtMWwyLjQxLTJIMjkuMTJhMSwxLDAsMCwwLDEtLjc2bDMuMi0xM0ExLDEsMCwwLDAsMzMuMSw2LjM5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY3g9IjEzLjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNi41IiBjeT0iMjkuNSIgcj0iMi41IiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkg5LjIxTDguNzYsNC41N2ExLDEsMCwwLDAtLjY2LS42NUw0LDIuNjZhMSwxLDAsMSwwLS41OSwx'@;
put 'LjkyTDcsNS42OGw0LjU4LDE0LjQ3TDkuOTUsMjEuNDlsLS4xMy4xM0EyLjY2LDIuNjYsMCwwLDAsOS43NCwyNSwyLjc1LDIuNzUsMCwwLDAsMTIsMjZIMjguNjlhMSwxLDAsMCwwLDAtMkgxMS44NGEuNjcuNjcsMCwwLDEtLjU2LTFsMi40MS0ySDI5LjEyYTEsMSwwLDAsMCwxLS43NmwxLjE5'@;
put 'LTQuODRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxMy41IiBjeT0iMjkuNSIgcj0iMi41IiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI2LjUiIGN5PSIyOS41IiByPSIyLjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMi41LDZIOS4yMUw4Ljc2LDQuNTdhMSwxLDAsMCwwLS42Ni0uNjVMNCwyLjY2YTEsMSwwLDEsMC0uNTksMS45Mkw3LDUuNjhsNC41OCwxNC40N0w5Ljk1LDIxLjQ5bC0uMTMuMTNBMi42NiwyLjY2LDAsMCwwLDku'@;
put 'NzQsMjUsMi43NSwyLjc1LDAsMCwwLDEyLDI2SDI4LjY5YTEsMSwwLDAsMCwwLTJIMTEuODRhLjY3LjY3LDAsMCwxLS41Ni0xbDIuNDEtMkgyOS4xMmExLDEsMCwwLDAsMS0uNzZsMS43MS03QTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlV2FsbGV0PSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEsMCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2Ez'@;
put 'LjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAsMS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEw'@;
put 'SDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAsMCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMyww'@;
put 'LDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAg'@;
put 'ICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUiLz4nKSxSLkNsclNoYXBlU3RvcmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEy'@;
put 'LDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCwwLDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMs'@;
put 'NC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEs'@;
put 'Mi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQu'@;
put 'MTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIs'@;
put 'MkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMu'@;
put 'MjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAsMCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCww'@;
put 'LDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2EyLjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3'@;
put 'LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksUi5DbHJTaGFwZUV1cm89KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIs'@;
put 'MTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAs'@;
put 'MSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCwwLDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEs'@;
put 'MC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwxMS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4'@;
put 'LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxSLkNsclNoYXBlRG9sbGFyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjYsMjEuMTVhNi45MSw2LjkxLDAsMCwwLTQu'@;
put 'MzgtMy4zMkEyNiwyNiwwLDAsMCwxOSwxNy4xOVY4LjEyQTEwLjA1LDEwLjA1LDAsMCwxLDIzLjg2LDEwYTEsMSwwLDAsMCwxLjMzLTEuNUExMS43NSwxMS43NSwwLDAsMCwxOSw2LjFWM2ExLDEsMCwwLDAtMiwwVjZjLTQuNC4xLTYuODMsMi4yOS03LjU3LDQuMThBNS41Niw1LjU2LDAsMCww'@;
put 'LDExLjY2LDE3LDEzLjIsMTMuMiwwLDAsMCwxNywxOC44NFYyOGExMi4zLDEyLjMsMCwwLDEtNy4xNC0yLjc0QTEsMSwwLDEsMCw4LjQ5LDI2LjcsMTQuMDksMTQuMDksMCwwLDAsMTcsMzB2M2ExLDEsMCwwLDAsMiwwVjMwYzIuODItLjE5LDYuMDctMS4wOSw3LjMtNC43NkE1LjMzLDUuMzMs'@;
put 'MCwwLDAsMjYsMjEuMTVaTTEyLjc5LDE1LjMyYTMuNTcsMy41NywwLDAsMS0xLjQ5LTQuMzlDMTEuNDEsMTAuNjMsMTIuNTMsOC4xMiwxNyw4djguOEExMC43LDEwLjcsMCwwLDEsMTIuNzksMTUuMzJaTTI0LjQsMjQuNTZjLS43MiwyLjE0LTIuMzIsMy4xNy01LjQsMy40VjE5LjIzYy42NC4x'@;
put 'NCwxLjMuMywyLC41MWE1LDUsMCwwLDEsMy4xOSwyLjMyQTMuMzQsMy4zNCwwLDAsMSwyNC40LDI0LjU2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx'@;
put 'OCwxNiwxNiwwLDAsMCwxOCwyWm03LjY1LDIxLjU5Yy0xLDMtMy42MSwzLjg0LTUuOSw0djJhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI3LjU5QTExLjQ3LDExLjQ3LDAsMCwxLDExLDI1YTEuMjUsMS4yNSwwLDEsMSwxLjcxLTEuODMsOS4xMSw5LjExLDAsMCwwLDQuNTUsMS45NFYxOC44M2E5'@;
put 'LjYzLDkuNjMsMCwwLDEtMy43My0xLjQxLDQuOCw0LjgsMCwwLDEtMS45MS01Ljg0Yy41OS0xLjUxLDIuNDItMy4yMyw1LjY0LTMuNTFWNi4yNWExLjI1LDEuMjUsMCwwLDEsMi41LDBWOC4xMWE5LjY3LDkuNjcsMCwwLDEsNC45LDJBMS4yNSwxLjI1LDAsMCwxLDIzLDExLjk1YTcuMTQsNy4x'@;
put 'NCwwLDAsMC0zLjI0LTEuMzF2Ni4xM2MuNi4xMywxLjI0LjI3LDEuOTEuNDhhNS44NSw1Ljg1LDAsMCwxLDMuNjksMi44MkE0LjY0LDQuNjQsMCwwLDEsMjUuNjUsMjMuNTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJN'@;
put 'MjAuOTIsMTkuNjRjLS40LS4xMi0uNzktLjIyLTEuMTctLjN2NS43NmMyLS4yLDMuMDctLjksMy41My0yLjNhMi4xNSwyLjE1LDAsMCwwLS4xNS0xLjU4QTMuNDksMy40OSwwLDAsMCwyMC45MiwxOS42NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMiIGQ9Ik0xMy45NCwxMi40OGEyLjMxLDIuMzEsMCwwLDAsMSwyLjg3LDYuNTMsNi41MywwLDAsMCwyLjMyLjkyVjEwLjU1QzE1LjE2LDEwLjgsMTQuMTksMTEuODQsMTMuOTQsMTIuNDhaIi8+JyksUi5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRo'@;
put 'PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVCYW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zLjUsMTMuNTYsMTgsNS4yM2wxNC41LDguMzNhMSwxLDAsMCwwLDEtMS43M0wxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczWiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAtMkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNS4wMiIgeT0iMTQiIHdpZHRoPSIyNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4xNSwxMS41OGgzLjIxTDE4LjY1LDcuNzJhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMu'@;
put 'ODZoMy4yMWwzLjktMi4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMjhWMTcuNjNIMjZWMjVIMTlWMTcuNjNIMTdWMjVIMTBWMTcuNjNIOFYy'@;
put 'NUg1QTEsMSwwLDAsMCw0LDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI1LjAyIiB5PSIxNCIgd2lkdGg9IjI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAsMCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjIuMTUsMTEuNThoMy4yMUwxOC42NSw3LjcyYS44LjgsMCwwLDAtLjgsMGwtNi43MiwzLjg2aDMuMjFsMy45LTIuMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0yMi41LDZjMC0uMTYsMC0uMzIsMC0uNDhMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIyLjc3LDhBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjk0LDEzLjI0bC41Ni4zMmExLDEsMCwwLDAsMS40NC0xLjE5QTcuNDUsNy40NSwwLDAsMSwzMS45NCwxMy4yNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik00LDI2YTEsMSwwLDAsMCwxLDFIMzFhMSwxLDAsMCwwLDAt'@;
put 'MkgyOFYxNy42M0gyNlYyNUgxOVYxNy42M0gxN1YyNUgxMFYxNy42M0g4VjI1SDVBMSwxLDAsMCwwLDQsMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDI5SDNhMSwxLDAs'@;
put 'MCwwLDAsMkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDE1QTMuNTEsMy41MSwwLDAsMSwyMCwxNEg1djJIMzFWMTVaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjQ2LDkuNzRsLjY4LTEuMTctMS40OS0uODVhLjguOCwwLDAsMC0uOCwwbC02LjcyLDMuODZoMy4yMWwzLjktMi4yNCwxLjEuNjNDMTkuMzksOS44OSwx'@;
put 'OS40Miw5LjgxLDE5LjQ2LDkuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjA1LDUuMjUsMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M0wxOCw1LjIzLDIx'@;
put 'LjA1LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43'@;
put 'OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjUsMTMuNTYsNSwxMi42OFYxNkgz'@;
put 'MVYxMi43MWwxLjQ4Ljg1YTEsMSwwLDAsMCwxLTEuNzNMMTgsMi45MiwyLjUsMTEuODNhMSwxLDAsMSwwLDEsMS43M1pNMTcuODUsNy4xMWEuOC44LDAsMCwxLC44LDBMMjUuMzcsMTFIMjIuMTVsLTMuOS0yLjI0TDE0LjM1LDExSDExLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjg1LDI3SDMydi0uODVBMS4xNSwxLjE1LDAsMCwwLDMwLjg1LDI1SDI4VjE3LjYzSDI0VjI1SDIwVjE3LjYzSDE2VjI1SDEyVjE3LjYzSDhWMjVINS4xNUExLjE1LDEuMTUsMCwwLDAsNCwyNi4xNVYyN0gzLjE1QTEuMTUs'@;
put 'MS4xNSwwLDAsMCwyLDI4LjE1VjMxSDM0VjI4LjE1QTEuMTUsMS4xNSwwLDAsMCwzMi44NSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi44NSwyN0gzMnYtLjg1QTEuMTUsMS4xNSwwLDAsMCwzMC44NSwyNUgy'@;
put 'OFYxNy42M0gyNFYyNUgyMFYxNy42M0gxNlYyNUgxMlYxNy42M0g4VjI1SDUuMTVBMS4xNSwxLjE1LDAsMCwwLDQsMjYuMTVWMjdIMy4xNUExLjE1LDEuMTUsMCwwLDAsMiwyOC4xNVYzMUgzNFYyOC4xNUExLjE1LDEuMTUsMCwwLDAsMzIuODUsMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40Nyw3LjQ3LDAsMCwxLDI0LjM5LDExSDIyLjE1bC0zLjktMi4yNEwxNC4zNSwxMUgxMS4xNGw2LjcyLTMuODZhLjguOCwwLDAsMSwuOCwwbDUsMi44N0E3LjQ1LDcuNDUs'@;
put 'MCwwLDEsMjIuNSw2YzAtLjE2LDAtLjMyLDAtLjQ4TDE4LDIuOTIsMi41LDExLjgzYTEsMSwwLDEsMCwxLDEuNzNMNSwxMi42OFYxNkgzMVYxMy40MkE3LjUzLDcuNTMsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2Vk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTQsMTMuMjRsLjU2LjMyYTEsMSwwLDAsMCwxLjQ0LTEuMTlBNy40NSw3LjQ1LDAsMCwxLDMxLjk0LDEzLjI0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuODUsMjdIMzJ2LS44NUExLjE1LDEuMTUsMCwwLDAsMzAuODUsMjVI'@;
put 'MjhWMTcuNjNIMjRWMjVIMjBWMTcuNjNIMTZWMjVIMTJWMTcuNjNIOFYyNUg1LjE1QTEuMTUsMS4xNSwwLDAsMCw0LDI2LjE1VjI3SDMuMTVBMS4xNSwxLjE1LDAsMCwwLDIsMjguMTVWMzFIMzRWMjguMTVBMS4xNSwxLjE1LDAsMCwwLDMyLjg1LDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsMTVhMy41MSwzLjUxLDAsMCwxLTMtNS4yNmwuMTQtLjI0LTEuMzUtLjc4TDE0LjM1LDExSDExLjE0bDYuNzItMy44NmEuOC44LDAsMCwxLC44LDBsMS43NSwxLDEuNjUtMi44'@;
put 'NkwxOCwyLjkyLDIuNSwxMS44M2ExLDEsMCwxLDAsMSwxLjczTDUsMTIuNjhWMTZIMzFWMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEu'@;
put 'MjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksUi5D'@;
put 'bHJTaGFwZURvbGxhckJpbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAs'@;
put 'NmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAsMCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4y'@;
put 'NSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIuMDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1'@;
put 'Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEwLjg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIz'@;
put 'LjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1'@;
put 'LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40NywwLTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZI'@;
put 'MjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAgICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIi'@;
put 'Lz4nKSxSLkNsclNoYXBlRUNoZWNrPSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjAiIHk9IjIxIiB3aWR0aD0iMTEiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0zNCw4SDEyLjkzYTguMzUsOC4zNSwwLDAsMSwuNzksMkgzM1Yy'@;
put 'NkgzVjE5LjlhNy44Myw3LjgzLDAsMCwxLTItMS4zNFYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAsMzQsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNNi41NywxOC42OGE2'@;
put 'LjE3LDYuMTcsMCwwLDAsNC4zMi0xLjU5LDEuMiwxLjIsMCwwLDAsLjM2LS44NCwxLjA4LDEuMDgsMCwwLDAtMS4wOS0xLjExLDEsMSwwLDAsMC0uNzEuMjUsNC4zMiw0LjMyLDAsMCwxLTIuODQsMSwzLjM1LDMuMzUsMCwwLDEtMy40Ni0zaDcuNTNBMS4yOSwxLjI5LDAsMCwwLDEyLDEyLjA2'@;
put 'LDUuNjgsNS42OCwwLDAsMCw2LjI3LDYuMTQsNiw2LDAsMCwwLC40LDEyLjR2MEE2LDYsMCwwLDAsNi41NywxOC42OFpNNi4yNSw4LjM5YzEuODIsMCwyLjg3LDEuMzksMywzLjE2SDMuMTNDMy4zOCw5LjY5LDQuNTYsOC4zOSw2LjI1LDguMzlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzQsOEgxMi45MWE4LjYxLDguNjEsMCwwLDEsMS4yLDQuMzksOCw4LDAsMCwxLTcuNzgsOC4yN0E3LjUxLDcuNTEsMCwwLDEsMSwxOC40MVYyN2ExLDEsMCwwLDAsMSwxSDM0YTEsMSwwLDAsMCwxLTFWOUExLDEsMCwwLDAs'@;
put 'MzQsOFpNMzEsMjNIMjBWMjFIMzFabTAtNUgxNlYxNkgzMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik02LjU3LDE4LjY4QTYsNiwwLDAsMSwuNCwxMi40NHYwQTYsNiwwLDAsMSw2LjI3LDYuMTQsNS42OCw1LjY4LDAs'@;
put 'MCwxLDEyLDEyLjA2YTEuMjksMS4yOSwwLDAsMS0xLjMsMS4zMkgzLjE1YTMuMzUsMy4zNSwwLDAsMCwzLjQ2LDMsNC4zMiw0LjMyLDAsMCwwLDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNyww'@;
put 'LDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxSLkNsclNoYXBlUG91bmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9'@;
put 'Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQsMCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYx'@;
put 'OUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwxLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYs'@;
put 'MCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcyLS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAs'@;
put 'MSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4yMiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41'@;
put 'WiIvPicpLFIuQ2xyU2hhcGVSdXBlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41'@;
put 'NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3'@;
put 'LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEs'@;
put 'MCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEuOTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4x'@;
put 'MywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLFIuQ2xyU2hhcGVXb249KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSwwLDAsMCwwLTJIMjkuNzRsMi4xNy04Ljc2QTEsMSwwLDAsMCwzMCw0Ljc2TDI3LjY4LDE0SDIxLjMxTDE5LDQuNzZhMSwxLDAsMCwwLTEuOTQsMEwx'@;
put 'NC43OSwxNEg4LjQyTDYuMTMsNC43NmExLDEsMCwwLDAtMS45NC40OEw2LjM2LDE0SDNhMSwxLDAsMCwwLDAsMkg2Ljg1bC41LDJIM2ExLDEsMCwwLDAsMCwySDcuODRsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCwwTDE1LjM2LDIwaDUuMzhsMi43OSwxMS4yNGExLDEsMCwwLDAsMS45NCww'@;
put 'TDI4LjI1LDIwSDMzYTEsMSwwLDAsMCwwLTJabS01LjgyLTItLjUsMkgyMi4zbC0uNS0yWk0xOCw5LjE2LDE5LjI1LDE0aC0yLjRaTTguOTEsMTZoNS4zOGwtLjUsMkg5LjQxWk0xMS42LDI2Ljg0LDkuOTEsMjBIMTMuM1pNMTUuODUsMThsLjUtMmgzLjM5bC41LDJabTguNjQsOC44NEwyMi44'@;
put 'LDIwaDMuMzlaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBwb2ludHM9IjE3Ljc0IDE2IDE3LjIyIDE4IDE4Ljg1IDE4IDE4LjMyIDE2IDE3Ljc0IDE2Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIiBwb2ludHM9IjExLjk0IDE4IDE0LjYzIDE4IDE1LjE2IDE2IDExLjQxIDE2IDExLjk0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBwb2ludHM9IjEzLjI5IDIzLjEgMTQu'@;
put 'MSAyMCAxMi40NyAyMCAxMy4yOSAyMy4xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBwb2ludHM9IjIxLjQ0IDE4IDI0LjEzIDE4IDI0LjY2IDE2IDIwLjkxIDE2IDIxLjQ0IDE4Ii8+XG4gICAgICAgICAgICA8cG9seWdv'@;
put 'biBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01IiBwb2ludHM9IjIyLjc4IDIzLjEgMjMuNiAyMCAyMS45NyAyMCAyMi43OCAyMy4xIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTgsMkExNiwxNiww'@;
put 'LDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOSwyMEgyNi4xOUwyNCwyOC4zMmExLjI1LDEuMjUsMCwwLDEtMi40MiwwTDE5LjM4LDIwSDE2LjY5bC0yLjE5LDguMzJhMS4yNSwxLjI1LDAsMCwxLTIuNDIsMEw5Ljg4LDIwSDdhMSwxLDAsMCwxLDAtMkg5LjM1bC0uNTMtMkg3YTEsMSww'@;
put 'LDAsMSwwLTJIOC4zbC0xLTMuNjhhMS4yNSwxLjI1LDAsMCwxLDIuNDItLjY0TDEwLjg4LDE0aDQuOGwxLjE0LTQuMzJhMS4yNSwxLjI1LDAsMCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgy'@;
put 'Ny4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxSLkNsclNoYXBlWWVuPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywz'@;
put 'LjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEuNmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJI'@;
put 'MTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4yNkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oi'@;
put 'Lz4nKSxSLkNsclNoYXBlQml0Y29pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIxLDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEs'@;
put 'MCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCwwLDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUs'@;
put 'MjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43'@;
put 'LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2'@;
put 'LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIx'@;
put 'LjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwyNS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiww'@;
put 'VjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLFIuQ2xyU2hhcGVDb2luQmFnPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFo'@;
put 'LTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjU0LDI0aC02YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLDMySDE2YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMyLjcsMzJoLTdhMSwxLDAsMCwwLDAsMmg3YTEsMSwwLDAsMCwwLTJa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuNywyOGgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMy43NCwyNmEy'@;
put 'OCwyOCwwLDAsMC0yLjgyLTEwLjEyQTIwLjI0LDIwLjI0LDAsMCwwLDI0LjYsOC43MUwyNywzLjQyYTEsMSwwLDAsMC0uMDctMUExLDEsMCwwLDAsMjYuMTMsMkg5LjhhMSwxLDAsMCwwLS45MSwxLjQybDIuNDUsNS4zMWEyMC4zMywyMC4zMywwLDAsMC02LjI4LDcuMTVjLTIuMTUsNC0yLjgy'@;
put 'LDguODktMywxMi4yOGEzLjYsMy42LDAsMCwwLDEsMi43MUEzLjc5LDMuNzksMCwwLDAsNS44LDMxLjk0SDEyVjMwSDUuNzJhMS42OCwxLjY4LDAsMCwxLTEuMjEtLjUyLDEuNjIsMS42MiwwLDAsMS0uNDUtMS4yM2MuMTQtMi42MS42OS03LjU4LDIuNzYtMTEuNDVBMTgsMTgsMCwwLDEsMTMu'@;
put 'MDgsMTBoMWEzMC44MSwzMC44MSwwLDAsMC0xLjg3LDIuOTIsMjIuNzgsMjIuNzgsMCwwLDAtMS40NywzLjM0bDEuMzcuOTJhMjQsMjQsMCwwLDEsMS40OS0zLjQ3QTI5LjEsMjkuMSwwLDAsMSwxNi4wNSwxMGgxYTIxLjQ1LDIxLjQ1LDAsMCwxLDEuNDEsNSwyMi41NCwyMi41NCwwLDAsMSwu'@;
put 'MzIsMy44NmwxLjU4LTEuMTFhMjQuMTUsMjQuMTUsMCwwLDAtLjMyLTNBMjQuODIsMjQuODIsMCwwLDAsMTguNzYsMTBoLjc4bC45MS0ySDEzLjIxTDExLjM2LDRIMjQuNTdsLTIuNSw1LjQ3YTkuOTMsOS45MywwLDAsMSwxLjIzLjc4LDE4LjYzLDE4LjYzLDAsMCwxLDUuODYsNi41N0EyNi41'@;
put 'OSwyNi41OSwwLDAsMSwzMS43MywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgIDxwYXRoIGQ9Ik0yNC44OSwyNmg3Ljg2Yy0uNjYtOC43MS00LjQxLTE0LjEyLTkuMjItMTcuMzJMMjUuNzIsMy45YTEsMSwwLDAsMC0uOTEtMS40SDExLjFh'@;
put 'MSwxLDAsMCwwLS45MSwxLjRsMS4yLDIuNkgyMS41MWwtLjksMkgxOC43NkEyNC45LDI0LjksMCwwLDEsMjAsMTMuMTlhMjQuNDksMjQuNDksMCwwLDEsLjMyLDNsLTEuNTgsMS4xMWEyMi41NCwyMi41NCwwLDAsMC0uMzItMy44NkEyMS43NCwyMS43NCwwLDAsMCwxNyw4LjVoLTFhMjguMjIs'@;
put 'MjguMjIsMCwwLDAtMi40OCwzLjcsMjMuOTEsMjMuOTEsMCwwLDAtMS40OSwzLjQ2bC0xLjM3LS45MWEyMi43OCwyMi43OCwwLDAsMSwxLjQ3LTMuMzRBMzAuODEsMzAuODEsMCwwLDEsMTQuMDUsOC41SDEyLjNsLjA4LjE3QzcuMDgsMTIuMiwzLjA1LDE4LjQsMy4wNSwyOC43NUExLjY1LDEu'@;
put 'NjUsMCwwLDAsNC42MSwzMC41aDhBMi42NywyLjY3LDAsMCwxLDE0LjIxLDI2YTIuNjcsMi42NywwLDAsMS0uMzctMS4zNCwyLjcsMi43LDAsMCwxLDIuNy0yLjdoNmEyLjcsMi43LDAsMCwxLDIuNywyLjdBMi42MywyLjYzLDAsMCwxLDI0Ljg5LDI2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEuNiwyOC41YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI4LjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMi41NCwyMy41aC02YTEsMSww'@;
put 'LDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjIsMzEuNUgxNmExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBh'@;
put 'dGggZD0iTTMyLjcsMzEuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjcsMjcuNWgtN2ExLDEsMCwwLDAsMCwyaDdhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+JyksUi5DbHJTaGFwZVBlc289KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcuODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDgu'@;
put 'NDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdh'@;
put 'Ni41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRo'@;
put 'IGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlI'@;
put 'MTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0i'@;
put 'TTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYuMzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45'@;
put 'LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwx'@;
put 'LjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLFIuQ2xyU2hhcGVSdWJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYx'@;
put 'OEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBaTTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRBNC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwy'@;
put 'QTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4yNSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4y'@;
put 'MVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIwLjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxtLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFabTAtOS40YTMuNywzLjcsMCwxLDAsMy43NiwzLjdBMy43NCwzLjc0LDAsMCwwLDE4LjQyLDYuOTFaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjEuOTEsMTcuNjVhMjAuNiwyMC42LDAsMCwwLTEzLDJBMS43NywxLjc3LDAsMCwwLDgsMjEuMjV2My41NmExLDEsMCwwLDAsMiwwVjIxLjM4YTE4LjkyLDE4LjkyLDAsMCwxLDEyLTEuNjhaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzMsMjJIMjYuM1YyMC41MmExLDEsMCwwLDAtMiwwVjIySDE3YTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjIzQTEsMSwwLDAsMCwzMywyMlpNMzIsMzJIMThW'@;
put 'MjRoNi4zdi40MWExLDEsMCwwLDAsMiwwVjI0SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMjEuODEiIHk9IjI3LjQyIiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMC44NCwxMi4yNGExOCwxOCwwLDAsMC03Ljk1LDJBMS42NywxLjY3LDAsMCwwLDIsMTUuNzF2My4xYTEsMSwwLDAsMCwyLDB2LTIuOWExNiwxNiwwLDAsMSw3LjU4LTEuNjdBNy4yOCw3LjI4LDAsMCwxLDEwLjg0LDEyLjI0WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMzLjExLDE0LjIzYTE3LjgsMTcuOCwwLDAsMC03LjEyLTIsNy40Niw3LjQ2LDAsMCwxLS43MywyQTE1Ljg5LDE1Ljg5LDAsMCwxLDMyLDE1LjkxdjIuOWExLDEsMCwxLDAsMiwwdi0zLjFBMS42NywxLjY3'@;
put 'LDAsMCwwLDMzLjExLDE0LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHBhdGggZD0iTTEwLjY2LDEwLjYxYzAtLjIzLDAtLjQ1LDAtLjY3YTMuMDcsMy4wNywwLDAsMSwuNTQtNi4xMSwzLjE1LDMuMTUsMCwwLDEsMi4yLjg5LDguMTYsOC4x'@;
put 'NiwwLDAsMSwxLjctMS4wOCw1LjEzLDUuMTMsMCwwLDAtOSwzLjI3LDUuMSw1LjEsMCwwLDAsNC43LDVBNy40Miw3LjQyLDAsMCwxLDEwLjY2LDEwLjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHBhdGggZD0iTTI0Ljc3LDEuODNhNS4xNyw1'@;
put 'LjE3LDAsMCwwLTMuNjksMS41NSw3Ljg3LDcuODcsMCwwLDEsMS45LDEsMy4xNCwzLjE0LDAsMCwxLDQuOTMsMi41MiwzLjA5LDMuMDksMCwwLDEtMS43OSwyLjc3LDcuMTQsNy4xNCwwLDAsMSwuMDYuOTMsNy44OCw3Ljg4LDAsMCwxLS4xLDEuMiw1LjEsNS4xLDAsMCwwLDMuODMtNC45QTUu'@;
put 'MTIsNS4xMiwwLDAsMCwyNC43NywxLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiLz5cbiAgXG4gIDxlbGxpcHNlIGN4PSIxOCIgY3k9IjExLjI4IiByeD0iNC43NiIgcnk9IjQuNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIv'@;
put 'PlxuICA8cGF0aCBkPSJNMTAuNzgsMTEuNzVjLjE2LDAsLjMyLDAsLjQ4LDAsMC0uMTUsMC0uMjgsMC0uNDNhNi43LDYuNywwLDAsMSwzLjc1LTYsNC42Miw0LjYyLDAsMSwwLTQuMjEsNi40NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0i'@;
put 'TTI0Ljc2LDExLjI4YzAsLjE1LDAsLjI4LDAsLjQzLjE2LDAsLjMyLDAsLjQ4LDBBNC41OCw0LjU4LDAsMSwwLDIxLDUuMjksNi43LDYuNywwLDAsMSwyNC43NiwxMS4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTIyLjI5LDE2LjQ1'@;
put 'YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEsMiwyLjcxLDIuNzEsMCwwLDEsLjY4LjUzSDM0VjE1LjU2YS43Mi43MiwwLDAsMC0uMzgtLjY0LDE4LDE4LDAsMCwwLTguNC0yLjA1bC0uNjYsMEE2LjY2LDYuNjYsMCwwLDEsMjIuMjksMTYuNDVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik02LjUzLDIwLjkyQTIuNzYsMi43NiwwLDAsMSw4LDE4LjQ3YTIxLjQ1LDIxLjQ1LDAsMCwxLDUuNzEtMiw2LjY2LDYuNjYsMCwwLDEtMi4yNy0zLjU1bC0uNjYsMGExOCwxOCwwLDAsMC04LjQsMi4wNS43Mi43MiwwLDAsMC0uMzguNjRWMjJINi41'@;
put 'M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iMjEuNDYiIHk9IjI2LjY5IiB3aWR0aD0iNS45NiIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgPHBhdGggZD0iTTMyLjgxLDIxLjI2'@;
put 'SDI1Ljk0di0xYTEsMSwwLDAsMC0yLDB2MUgyMlYxOC40M0EyMC4xNywyMC4xNywwLDAsMCwxOCwxOGExOS4yNywxOS4yNywwLDAsMC05LjA2LDIuMjIuNzYuNzYsMCwwLDAtLjQxLjY4djUuNjFoNy4xMXY2LjA5YTEsMSwwLDAsMCwxLDFIMzIuODFhMSwxLDAsMCwwLDEtMVYyMi4yNkExLDEs'@;
put 'MCwwLDAsMzIuODEsMjEuMjZabS0xLDEwLjM2SDE3LjY0VjIzLjI2aDYuM3YuOTFhMSwxLDAsMCwwLDIsMHYtLjkxaDUuODdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+JyksUi5DbHJTaGFwZUVtcGxveWVlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x'@;
put 'Ni40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwxNi40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEs'@;
put 'MjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCwwLDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4'@;
put 'LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGExLDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2'@;
put 'LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksUi5DbHJTaGFwZUZhY3Rvcnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQuNjJhMSwxLDAsMCwwLS43OC0xbC00LS45YTEsMSwwLDAsMC0uODUuMkExLDEsMCwwLDAsNCwzLjczVjE0SDNhMSwxLDAsMCwwLTEsMVYzMWExLDEs'@;
put 'MCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWOC4yNkExLDEsMCwwLDAsMzMuNDcsNy4zN1pNNiw1bDIsLjQ0VjE0SDZaTTMyLDMwSDRWMTZoOS44M2ExLDEsMCwwLDAsLjY0LS4yM0wyMSwxMC4zN3Y1LjI4YTEsMSwwLDAsMCwxLjU2LjgzTDMyLDEwLjE0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNiIgeT0iMTcuOTkiIHdpZHRoPSI4IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxyZWN0IHg9IjYiIHk9IjIxLjk5IiB3aWR0aD0iOCIgaGVpZ2h0PSIyIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSI2IiB5PSIyNS45OSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHJlY3QgeD0iMTkiIHk9IjE4Ljk5IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cmVjdCB4PSIxOSIgeT0iMjQuOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9'@;
put 'IjIzIiB5PSIxOC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgPHJlY3QgeD0iMjMiIHk9IjI0Ljk5IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtOCIvPlxuICA8cmVjdCB4PSIyNyIgeT0iMTguOTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjI3IiB5PSIyNC45OSIgd2lkdGg9IjIiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIi8+XG4gIFxuICA8cGF0aCBkPSJNMzIuNDUsOC40NCwyMiwxNS4zVjkuNTFhMSwxLDAsMCwwLTEuNjMtLjc4TDE0LjA3LDE0SDEwVjQuMDZMNCwyLjcxVjE0SDJWMzFhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjkuMjdBMSwxLDAsMCww'@;
put 'LDMyLjQ1LDguNDRaTTE0LDI5SDZWMjdoOFptMC00SDZWMjNoOFptMC00SDZWMTloOFptOCw4SDIwVjI2aDJabTAtNkgyMFYyMGgyWm00LDZIMjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEiLz4nKSxSLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOlIuQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjpSLkNsclNoYXBlUGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOlIuQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Ui5DbHJTaGFwZVNob3BwaW5nQ2Fy'@;
put 'dCx3YWxsZXQ6Ui5DbHJTaGFwZVdhbGxldCxzdG9yZTpSLkNsclNoYXBlU3RvcmUsZXVybzpSLkNsclNoYXBlRXVybyxkb2xsYXI6Ui5DbHJTaGFwZURvbGxhcixwZXNvOlIuQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Ui5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpSLkNsclNoYXBlQmFu'@;
put 'aywiZG9sbGFyLWJpbGwiOlIuQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpSLkNsclNoYXBlRUNoZWNrLHBvdW5kOlIuQ2xyU2hhcGVQb3VuZCxydXBlZTpSLkNsclNoYXBlUnVwZWUsd29uOlIuQ2xyU2hhcGVXb24seWVuOlIuQ2xyU2hhcGVZZW4sYml0Y29pbjpSLkNsclNoYXBlQml0'@;
put 'Y29pbixydWJsZTpSLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpSLkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOlIuQ2xyU2hhcGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOlIuQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5OlIuQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoUi5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvbW1lcmNlU2hhcGVzWyJwaWdneS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJ'@;
put 'Y29ucy5hZGQoUi5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv'@;
put 'aWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oU2UsUixlZSl7InVzZSBzdHJp'@;
put 'Y3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxSLkNvcmVTaGFwZXM9Ui5DbHJTaGFwZUFycm93PVIuQ2xyU2hhcGVTdGVwRm9yd2FyZDI9Ui5DbHJTaGFwZUV5ZUhpZGU9Ui5DbHJTaGFwZUV5ZT1SLkNsclNoYXBlRXZlbnQ9Ui5DbHJTaGFwZUNh'@;
put 'bGVuZGFyPVIuQ2xyU2hhcGVBbmdsZURvdWJsZT1SLkNsclNoYXBlVmlld0NvbHVtbnM9Ui5DbHJTaGFwZVNlYXJjaD1SLkNsclNoYXBlVm1CdWc9Ui5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9Ui5DbHJTaGFwZUZpbHRlckdyaWQ9Ui5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9Ui5DbHJT'@;
put 'aGFwZUVsbGlwc2lzSG9yaXpvbnRhbD1SLkNsclNoYXBlQ2xvdWQ9Ui5DbHJTaGFwZUltYWdlPVIuQ2xyU2hhcGVCZWxsPVIuQ2xyU2hhcGVGb2xkZXJPcGVuPVIuQ2xyU2hhcGVGb2xkZXI9Ui5DbHJTaGFwZUFuZ2xlPVIuQ2xyU2hhcGVVc2VyPVIuQ2xyU2hhcGVCYXJzPVIuQ2xyU2hhcGVI'@;
put 'ZWxwSW5mbz1SLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkPVIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPVIuQ2xyU2hhcGVTdWNjZXNzU3RhbmRhcmQ9Ui5DbHJTaGFwZUluZm9TdGFuZGFyZD1SLkNsclNoYXBlSW5mb0NpcmNsZT1SLkNsclNoYXBlQ2hlY2tDaXJjbGU9Ui5DbHJTaGFwZUV4Y2xh'@;
put 'bWF0aW9uQ2lyY2xlPVIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlPVIuQ2xyU2hhcGVUaW1lcz1SLkNsclNoYXBlQ2hlY2s9Ui5DbHJTaGFwZUNvZz1SLkNsclNoYXBlSG9tZT1SLkNsclNoYXBlVW5rbm93blN0YXR1cz12b2lkIDA7dmFyIGI9ZWUoCi8qISAuLi91dGlscy9kZXNjcmlw'@;
put 'dG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWVlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Ui5DbHJTaGFw'@;
put 'ZVVua25vd25TdGF0dXM9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE3LjU4IiBjeT0iMjYuMjMiIHI9IjEuNCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuNywxM2E1LjE4LDUuMTgsMCwwLDAtMi4xNi0zLjU2LDcuMjYsNy4yNiwwLDAsMC01LjcxLTEuMDlBMTEuMzQsMTEuMzQsMCwwLDAsMTIsMTAuNDQsMSwxLDAsMSwwLDEzLjI2LDEyYTkuMzIsOS4zMiwwLDAsMSwzLjk0LTEuNzIsNS4yOSw1LjI5LDAs'@;
put 'MCwxLDQuMTYuNzQsMy4yMSwzLjIxLDAsMCwxLDEuMzUsMi4xOWMuMzMsMi42OS0zLjE5LDMuNzUtNS4zMiw0LjE0bC0uODIuMTV2NC4zNmExLDEsMCwwLDAsMiwwVjE5LjE3QzI0LjYxLDE3Ljc5LDI0Ljg4LDE0LjQxLDI0LjcsMTNaIi8+JyksUi5DbHJTaGFwZUhvbWU9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMy43MSwxNy4yOWwtMTUtMTVhMSwxLDAsMCwwLTEuNDEsMGwtMTUsMTVhMSwxLDAsMCwwLDEuNDEsMS40MUwxOCw0LjQxLDMyLjI5LDE4LjcxYTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOCwzMmgtNVYyMkgxM1YzMkg4VjE4TDYsMjBWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2bC0yLTJaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDE5YTEsMSwwLDAsMS0uNzEtLjI5TDE4LDQuNDEsMy43MSwxOC43MWExLDEsMCwwLDEtMS40MS0xLjQxbDE1LTE1YTEsMSwwLDAsMSwxLjQxLDBsMTUsMTVBMSwxLDAsMCwxLDMzLDE5'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xOCw3Ljc5LDYsMTkuODNWMzJhMiwyLDAsMCwwLDIsMmg3VjI0aDZWMzRoN2EyLDIsMCwwLDAsMi0yVjE5Ljc2WiIvPicpLFIuQ2xyU2hhcGVDb2c9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOC4xLDExYy0zLjksMC03LDMuMS03LDdzMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN1MyMiwxMSwxOC4xLDExeiBNMTguMSwyM2MtMi44LDAtNS0yLjItNS01czIuMi01LDUtNWMy'@;
put 'LjgsMCw1LDIuMiw1LDVTMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuNi0xLjVsMS40LTIuNmMwLjMtMC42LDAuMi0xLjQtMC4zLTEuOWwt'@;
put 'Mi40LTIuNGMtMC41LTAuNS0xLjMtMC42LTEuOS0wLjNsLTIuNiwxLjRsLTEuNS0wLjZsLTAuOS0yLjhDMjEsMi41LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3Ljks'@;
put 'NS41TDUuNSw3LjlDNSw4LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCww'@;
put 'LjMsMS45bDIuNCwyLjRjMC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQt'@;
put 'Mi40YzAuNS0wLjUsMC42LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE1LjYsMzMuNSwxNC45LDMyLjgsMTQuN3ogTTMyLDE5LjRsLTMuNiwxLjFMMjguMywyMWMtMC4zLDAuNy0wLjYsMS40LTAuOSwyLjFsLTAu'@;
put 'MywwLjVsMS44LDMuM2wtMiwybC0zLjMtMS44bC0wLjUsMC4zYy0wLjcsMC40LTEuNCwwLjctMi4xLDAuOWwtMC41LDAuMUwxOS40LDMyaC0yLjhsLTEuMS0zLjZMMTUsMjguM2MtMC43LTAuMy0xLjQtMC42LTIuMS0wLjlsLTAuNS0wLjNsLTMuMywxLjhsLTItMmwxLjgtMy4zbC0wLjMtMC41'@;
put 'Yy0wLjQtMC43LTAuNy0xLjQtMC45LTIuMWwtMC4xLTAuNUw0LDE5LjR2LTIuOGwzLjQtMWwwLjItMC41YzAuMi0wLjgsMC41LTEuNSwwLjktMi4ybDAuMy0wLjVMNy4xLDkuMWwyLTJsMy4yLDEuOGwwLjUtMC4zYzAuNy0wLjQsMS40LTAuNywyLjItMC45bDAuNS0wLjJMMTYuNiw0aDIuOGwx'@;
put 'LjEsMy41TDIxLDcuN2MwLjcsMC4yLDEuNCwwLjUsMi4xLDAuOWwwLjUsMC4zbDMuMy0xLjhsMiwybC0xLjgsMy4zbDAuMywwLjVjMC40LDAuNywwLjcsMS40LDAuOSwyLjFsMC4xLDAuNWwzLjYsMS4xVjE5LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMSwxOGMwLDMuOSwzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03cy0zLjEtNy03LTdDMTQuMiwxMSwxMS4xLDE0LjEsMTEuMSwxOHogTTIzLjEsMThjMCwyLjgtMi4yLDUtNSw1Yy0yLjgsMC01LTIuMi01LTVz'@;
put 'Mi4yLTUsNS01QzIwLjksMTMsMjMuMSwxNS4yLDIzLjEsMTh6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuOCwxNC43TDMwLDEzLjhsLTAuMS0wLjNjLTAuOCwwLTEuNi0w'@;
put 'LjItMi40LTAuNGMwLjMsMC42LDAuNiwxLjMsMC44LDEuOWwwLjEsMC41bDMuNiwxLjF2Mi44bC0zLjYsMS4xTDI4LjMsMjFjLTAuMywwLjctMC42LDEuNC0wLjksMi4xbC0wLjMsMC41bDEuOCwzLjNsLTIsMmwtMy4zLTEuOGwtMC41LDAuM2MtMC43LDAuNC0xLjQsMC43LTIuMSwwLjlsLTAu'@;
put 'NSwwLjFMMTkuNCwzMmgtMi44bC0xLjEtMy42TDE1LDI4LjNjLTAuNy0wLjMtMS40LTAuNi0yLjEtMC45bC0wLjUtMC4zbC0zLjMsMS44bC0yLTJsMS44LTMuM2wtMC4zLTAuNWMtMC40LTAuNy0wLjctMS40LTAuOS0yLjFsLTAuMS0wLjVMNCwxOS40di0yLjhsMy40LTFsMC4yLTAuNWMwLjIt'@;
put 'MC44LDAuNS0xLjUsMC45LTIuMmwwLjMtMC41TDcuMSw5LjFsMi0ybDMuMiwxLjhsMC41LTAuM2MwLjctMC40LDEuNC0wLjcsMi4yLTAuOWwwLjUtMC4yTDE2LjYsNGgyLjhsMS4xLDMuNUwyMSw3LjdjMC43LDAuMiwxLjMsMC41LDEuOSwwLjhjLTAuMy0wLjgtMC40LTEuNi0wLjQtMi41bC0w'@;
put 'LjQtMC4ybC0wLjktMi44QzIxLDIuNSwyMC40LDIsMTkuNywyaC0zLjRjLTAuNywwLTEuMywwLjUtMS40LDEuMkwxNCw2Yy0wLjYsMC4xLTEuMSwwLjMtMS42LDAuNkw5LjgsNS4yQzkuMiw0LjksOC40LDUsNy45LDUuNUw1LjUsNy45QzUsOC40LDQuOSw5LjIsNS4yLDkuOGwxLjMsMi41Yy0w'@;
put 'LjIsMC41LTAuNCwxLjEtMC42LDEuNmwtMi44LDAuOUMyLjUsMTUsMiwxNS42LDIsMTYuM3YzLjRjMCwwLjcsMC41LDEuMywxLjIsMS41TDYsMjIuMWwwLjYsMS41bC0xLjQsMi42Yy0wLjMsMC42LTAuMiwxLjQsMC4zLDEuOWwyLjQsMi40YzAuNSwwLjUsMS4zLDAuNiwxLjksMC4zbDIuNi0x'@;
put 'LjRsMS41LDAuNmwwLjksMi45YzAuMiwwLjYsMC44LDEuMSwxLjUsMS4xaDMuNGMwLjcsMCwxLjMtMC41LDEuNS0xLjFsMC45LTIuOWwxLjUtMC42bDIuNiwxLjRjMC42LDAuMywxLjQsMC4yLDEuOS0wLjNsMi40LTIuNGMwLjUtMC41LDAuNi0xLjMsMC4zLTEuOWwtMS40LTIuNmwwLjYtMS41'@;
put 'bDIuOS0wLjljMC42LTAuMiwxLjEtMC44LDEuMS0xLjV2LTMuNEMzNCwxNS42LDMzLjUsMTQuOSwzMi44LDE0Ljd6Ii8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2Ui'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjcsMTUuNGgtNS4zdjAuMWwzLjYsMS4xdjIuOGwtMy42LDEuMUwyOC4zLDIxYy0wLjMs'@;
put 'MC43LTAuNiwxLjQtMC45LDIuMWwtMC4zLDAuNWwxLjgsMy4zbC0yLDJsLTMuMy0xLjhsLTAuNSwwLjNjLTAuNywwLjQtMS40LDAuNy0yLjEsMC45bC0wLjUsMC4xTDE5LjQsMzJoLTIuOGwtMS4xLTMuNkwxNSwyOC4zYy0wLjctMC4zLTEuNC0wLjYtMi4xLTAuOWwtMC41LTAuM2wtMy4zLDEu'@;
put 'OGwtMi0ybDEuOC0zLjNsLTAuMy0wLjVjLTAuNC0wLjctMC43LTEuNC0wLjktMi4xbC0wLjEtMC41TDQsMTkuNHYtMi44bDMuNC0xbDAuMi0wLjVjMC4yLTAuOCwwLjUtMS41LDAuOS0yLjJsMC4zLTAuNUw3LjEsOS4xbDItMmwzLjIsMS44bDAuNS0wLjNjMC43LTAuNCwxLjQtMC43LDIuMi0w'@;
put 'LjlsMC41LTAuMkwxNi42LDRoMi44bDEuMSwzLjRsMS40LTIuM2wtMC42LTJDMjEsMi40LDIwLjQsMiwxOS43LDJoLTMuNGMtMC43LDAtMS4zLDAuNS0xLjQsMS4yTDE0LDZjLTAuNiwwLjEtMS4xLDAuMy0xLjYsMC42TDkuOCw1LjJDOS4yLDQuOSw4LjQsNSw3LjksNS41TDUuNSw3LjlDNSw4'@;
put 'LjQsNC45LDkuMiw1LjIsOS44bDEuMywyLjVjLTAuMiwwLjUtMC40LDEuMS0wLjYsMS42bC0yLjgsMC45QzIuNSwxNSwyLDE1LjYsMiwxNi4zdjMuNGMwLDAuNywwLjUsMS4zLDEuMiwxLjVMNiwyMi4xbDAuNiwxLjVsLTEuNCwyLjZjLTAuMywwLjYtMC4yLDEuNCwwLjMsMS45bDIuNCwyLjRj'@;
put 'MC41LDAuNSwxLjMsMC42LDEuOSwwLjNsMi42LTEuNGwxLjUsMC42bDAuOSwyLjljMC4yLDAuNiwwLjgsMS4xLDEuNSwxLjFoMy40YzAuNywwLDEuMy0wLjUsMS41LTEuMWwwLjktMi45bDEuNS0wLjZsMi42LDEuNGMwLjYsMC4zLDEuNCwwLjIsMS45LTAuM2wyLjQtMi40YzAuNS0wLjUsMC42'@;
put 'LTEuMywwLjMtMS45bC0xLjQtMi42bDAuNi0xLjVsMi45LTAuOWMwLjYtMC4yLDEuMS0wLjgsMS4xLTEuNXYtMy40QzM0LDE2LDMzLjksMTUuNywzMy43LDE1LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xOC4xLDIzYy0yLjgsMC01LTIuMi01LTVzMi4yLTUsNS01YzAuMiwwLDAuNSwwLDAuNywwLjFjLTAuMi0wLjYtMC4zLTEuMy0wLjItMmgtMC41Yy0zLjksMC03LDMuMS03LDdjMCwzLjksMy4xLDcsNyw3YzMuOSwwLDctMy4xLDctN2MwLTAuOS0wLjItMS44'@;
put 'LTAuNS0yLjZoLTIuMmMwLjUsMC44LDAuNywxLjYsMC43LDIuNUMyMy4xLDIwLjgsMjAuOSwyMywxOC4xLDIzeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBk'@;
put 'PSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywx'@;
put 'LDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi41NywxNS43MmwtMy4zNS0xYTExLjY1LDExLjY1LDAsMCwwLS45NS0yLjMzbDEuNjQtMy4wN2EuNjEuNjEsMCwwLDAtLjExLS43MkwyNy40MSw2'@;
put 'LjJhLjYxLjYxLDAsMCwwLS43Mi0uMTFMMjMuNjQsNy43MmExMS42MiwxMS42MiwwLDAsMC0yLjM2LTFsLTEtMy4zMUEuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCww'@;
put 'LDAtLjcyLjExTDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42'@;
put 'OWEuNjEuNjEsMCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAs'@;
put 'Mi4yOC0uOTRsMy4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43'@;
put 'MlpNMTgsMjMuNUE1LjUsNS41LDAsMSwxLDIzLjUsMTgsNS41LDUuNSwwLDAsMSwxOCwyMy41WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIuNTcsMTUuNzJsLTMuMzUtMWExMi4x'@;
put 'MiwxMi4xMiwwLDAsMC0uNDctMS4zMiw3LjQ5LDcuNDksMCwwLDEtNi4xNC02LjE2LDExLjgyLDExLjgyLDAsMCwwLTEuMzMtLjQ4bC0xLTMuMzFBLjYxLjYxLDAsMCwwLDE5LjY5LDNIMTYuMzFhLjYxLjYxLDAsMCwwLS41OC40M2wtMSwzLjNhMTEuNjMsMTEuNjMsMCwwLDAtMi4zOCwxbC0z'@;
put 'LTEuNjJhLjYxLjYxLDAsMCwwLS43Mi4xMUw2LjIsOC41OWEuNjEuNjEsMCwwLDAtLjExLjcybDEuNjIsM2ExMS42MywxMS42MywwLDAsMC0xLDIuMzdsLTMuMzEsMWEuNjEuNjEsMCwwLDAtLjQzLjU4djMuMzhhLjYxLjYxLDAsMCwwLC40My41OGwzLjMzLDFhMTEuNjIsMTEuNjIsMCwwLDAs'@;
put 'MSwyLjMzTDYuMDksMjYuNjlhLjYxLjYxLDAsMCwwLC4xMS43Mkw4LjU5LDI5LjhhLjYxLjYxLDAsMCwwLC43Mi4xMWwzLjA5LTEuNjVhMTEuNjUsMTEuNjUsMCwwLDAsMi4zLjk0bDEsMy4zN2EuNjEuNjEsMCwwLDAsLjU4LjQzaDMuMzhhLjYxLjYxLDAsMCwwLC41OC0uNDNsMS0zLjM4YTEx'@;
put 'LjYzLDExLjYzLDAsMCwwLDIuMjgtLjk0bDMuMTEsMS42NmEuNjEuNjEsMCwwLDAsLjcyLS4xMWwyLjM5LTIuMzlhLjYxLjYxLDAsMCwwLC4xMS0uNzJsLTEuNjYtMy4xYTExLjYzLDExLjYzLDAsMCwwLC45NS0yLjI5bDMuMzctMWEuNjEuNjEsMCwwLDAsLjQzLS41OFYxNi4zMUEuNjEuNjEs'@;
put 'MCwwLDAsMzIuNTcsMTUuNzJaTTE4LDIzLjVBNS41LDUuNSwwLDEsMSwyMy41LDE4LDUuNSw1LjUsMCwwLDEsMTgsMjMuNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdl'@;
put 'IiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMyLjU3LDE1LjcyLDMxLjUsMTUuNEgyMi44NUE1LjUsNS41LDAsMSwxLDE4LDEyLjVhNS41Myw1'@;
put 'LjUzLDAsMCwxLC42NSwwQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42Mi0uODYtMi44M0EuNjEuNjEsMCwwLDAsMTkuNjksM0gxNi4zMWEuNjEuNjEsMCwwLDAtLjU4LjQzbC0xLDMuM2ExMS42MywxMS42MywwLDAsMC0yLjM4LDFsLTMtMS42MmEuNjEuNjEsMCwwLDAtLjcyLjEx'@;
put 'TDYuMiw4LjU5YS42MS42MSwwLDAsMC0uMTEuNzJsMS42MiwzYTExLjYzLDExLjYzLDAsMCwwLTEsMi4zN2wtMy4zMSwxYS42MS42MSwwLDAsMC0uNDMuNTh2My4zOGEuNjEuNjEsMCwwLDAsLjQzLjU4bDMuMzMsMWExMS42MiwxMS42MiwwLDAsMCwxLDIuMzNMNi4wOSwyNi42OWEuNjEuNjEs'@;
put 'MCwwLDAsLjExLjcyTDguNTksMjkuOGEuNjEuNjEsMCwwLDAsLjcyLjExbDMuMDktMS42NWExMS42NSwxMS42NSwwLDAsMCwyLjMuOTRsMSwzLjM3YS42MS42MSwwLDAsMCwuNTguNDNoMy4zOGEuNjEuNjEsMCwwLDAsLjU4LS40M2wxLTMuMzhhMTEuNjMsMTEuNjMsMCwwLDAsMi4yOC0uOTRs'@;
put 'My4xMSwxLjY2YS42MS42MSwwLDAsMCwuNzItLjExbDIuMzktMi4zOWEuNjEuNjEsMCwwLDAsLjExLS43MmwtMS42Ni0zLjFhMTEuNjMsMTEuNjMsMCwwLDAsLjk1LTIuMjlsMy4zNy0xYS42MS42MSwwLDAsMCwuNDMtLjU4VjE2LjMxQS42MS42MSwwLDAsMCwzMi41NywxNS43MloiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksUi5DbHJTaGFwZUNoZWNrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTMuNzIsMjcuNjksMy4yOSwxNy4yN2ExLDEsMCww'@;
put 'LDEsMS40MS0xLjQxbDksOUwzMS4yOSw3LjI5YTEsMSwwLDAsMSwxLjQxLDEuNDFaIi8+JyksUi5DbHJTaGFwZVRpbWVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSww'@;
put 'LDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPicpLFIuQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFu'@;
put 'Z2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjEuMzJhMS4zLDEuMywwLDAsMCwxLjMtMS4zVjE0YTEuMywxLjMsMCwxLDAtMi42LDB2NkExLjMsMS4zLDAsMCwwLDE4LDIxLjMyWiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGN4PSIxNy45NSIgY3k9IjI0LjI3IiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMw'@;
put 'LjMzLDI1LjU0LDIwLjU5LDcuNmEzLDMsMCwwLDAtNS4yNywwTDUuNTcsMjUuNTRBMywzLDAsMCwwLDguMjEsMzBIMjcuNjlhMywzLDAsMCwwLDIuNjQtNC40M1ptLTEuNzgsMS45NGExLDEsMCwwLDEtLjg2LjQ5SDguMjFhMSwxLDAsMCwxLS44OC0xLjQ4TDE3LjA3LDguNTVhMSwxLDAsMCwx'@;
put 'LDEuNzYsMGw5Ljc0LDE3Ljk0QTEsMSwwLDAsMSwyOC41NSwyNy40OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMs'@;
put 'MCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWk0xNi40NiwxMi43NGExLjQ5LDEuNDksMCwwLDEsMywwdjYuODlhMS40OSwxLjQ5LDAsMSwxLTMsMFpNMTgsMjYuMjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjYuMjVaIi8+Jyks'@;
put 'Ui5DbHJTaGFwZUV4Y2xhbWF0aW9uQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEw'@;
put 'LDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMjAuMDdhMS4zLDEuMywwLDAsMS0xLjMtMS4zdi02YTEuMywxLjMsMCwxLDEsMi42LDB2NkExLjMsMS4zLDAsMCwxLDE4LDIw'@;
put 'LjA3WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1LjVaIi8+'@;
put 'JyksUi5DbHJTaGFwZUNoZWNrQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEw'@;
put 'LDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMThBMTIsMTIsMCwxLDEsMTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3LjE2YTEuNCwx'@;
put 'LjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nKSxSLkNsclNoYXBlSW5mb0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAgY3g9IjE3LjkzIiBjeT0iMTEuOSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiICBkPSJNMjEsMjNIMTlWMTVIMTZhMSwxLDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiICBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0wLDIyQTEwLDEwLDAsMSwxLDI4LDE4LDEwLDEwLDAsMCwxLDE4LDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0yLDUuMTVhMiwyLDAsMSwxLDIsMkEyLDIsMCwwLDEsMTUuOSwxMS4xNVpNMjMsMjRhMSwxLDAsMCwxLTEsMUgxNWExLDEsMCwxLDEsMC0yaDJWMTdIMTZhMSwxLDAsMCwxLDAtMmg0'@;
put 'djhoMkExLDEsMCwwLDEsMjMsMjRaIi8+JyksUi5DbHJTaGFwZUluZm9TdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yMSwyNUgxOVYxNC4xSDE2YTEsMSwwLDAsMCwwLDJoMVYyNUgxNWExLDEsMCwwLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFabS0uMSw1LjI4YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDE3LjksNy4zOFptMy42LDIxLjI1aC03YTEuNCwxLjQsMCwxLDEsMC0yLjhoMi4xdi05LjJIMTVhMS40LDEuNCww'@;
put 'LDEsMSwwLTIuOGg0LjR2MTJoMi4xYTEuNCwxLjQsMCwxLDEsMCwyLjhaIi8+JyksUi5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQs'@;
put 'MTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDEyLjFhMSwxLDAsMCwwLTEuNDEsMEwxNS40'@;
put 'OSwyMy4xNWwtNi02QTEsMSwwLDAsMCw4LDE4LjUzTDE1LjQ5LDI2LDI4LDEzLjUyQTEsMSwwLDAsMCwyOCwxMi4xWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2'@;
put 'LDAsMCwwLDE4LDJaTTI4LjQ1LDEyLjYzLDE1LjMxLDI1Ljc2LDcuNTUsMThhMS40LDEuNCwwLDAsMSwyLTJsNS43OCw1Ljc4TDI2LjQ3LDEwLjY1YTEuNCwxLjQsMCwxLDEsMiwyWiIvPicpLFIuQ2xyU2hhcGVFcnJvclN0YW5kYXJkPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxOCIgY3k9IjI2LjA2IiByPSIxLjMzIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMi42MWExLDEsMCwwLDEtMS0xdi0xMmEx'@;
put 'LDEsMCwxLDEsMiwwdjEyQTEsMSwwLDAsMSwxOCwyMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAs'@;
put 'MSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2LjYsOC44YTEuNCwxLjQsMCwwLDEs'@;
put 'Mi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPicpLFIuQ2xyU2hhcGVXYXJuaW5nU3RhbmRhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwx'@;
put 'LDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTUuMDYyMDc4MiwxLjY4MTE5NiBDMTUuNjI5ODgxOSwwLjY0OTI2NjM1NSAxNi43MTA5MDkxLDAuMDEwMjIxOTM5NiAxNy44ODUs'@;
put 'MC4wMTAyMjE5Mzk2IEMxOS4wNTkwOTA5LDAuMDEwMjIxOTM5NiAyMC4xNDAxMTgxLDAuNjQ5MjY2MzU1IDIwLjcwODY0MzMsMS42ODI1MjEyOSBMMzQuNTk4NjQ0LDI3LjI0MjUyMjUgQzM1LjE0MDc3NDYsMjguMjQwMTM5NyAzNS4xMTc0MzQ1LDI5LjQ0OTUzNzMgMzQuNTM3MjE2MSwzMC40'@;
put 'MjU0OTQzIEMzMy45NTY5OTc3LDMxLjQwMTQ1MTQgMzIuOTA1NjcxLDMxLjk5OTY5ODQgMzEuNzcsMzIgTDQuMDIyMzkzMjMsMzEuOTk5NzQ5MiBDMi44NzQwOTAwOSwzMi4wMjU0Njk5IDEuNzk5MDI4NDMsMzEuNDM3NTc1MyAxLjIwMTA2MzM1LDMwLjQ1NjkxMjYgQzAuNjAzMDk4MjY1LDI5'@;
put 'LjQ3NjI0OTkgMC41NzI3Nzc4OTksMjguMjUxMzE3OSAxLjEyMjA3ODE4LDI3LjI0MTE5NiBMMTUuMDYyMDc4MiwxLjY4MTE5NiBaIE0yLjg3ODUwNzY3LDI4LjE5NzcyODIgQzIuNjcwNjA5NjYsMjguNTgwMDM3NiAyLjY4MjA5NzUsMjkuMDQ0MTQyMyAyLjkwODY1NTcsMjkuNDE1Njk3NyBD'@;
put 'My4xMzUyMTM5LDI5Ljc4NzI1MzIgMy41NDI1MzU0LDMwLjAwOTk5NTkgNCwzMCBMMzEuNzY5NzM0NCwzMCBDMzIuMTk5OTE5MSwyOS45OTk4ODU4IDMyLjU5ODI0NzgsMjkuNzczMjIwOCAzMi44MTgwODIxLDI5LjQwMzQ0ODIgQzMzLjAzNzkxNjQsMjkuMDMzNjc1NyAzMy4wNDY3NTk1LDI4'@;
put 'LjU3NTQ1NjcgMzIuODQxMzU2NywyOC4xOTc0Nzg3IEwxOC45NTM4NzM5LDIuNjQyMDgxOTUgQzE4LjczOTQyMzYsMi4yNTIzNDQzNiAxOC4zMjk4NDE5LDIuMDEwMjIxOTQgMTcuODg1LDIuMDEwMjIxOTQgQzE3LjQ0MDY4ODksMi4wMTAyMjE5NCAxNy4wMzE1NTM4LDIuMjUxNzY2OTIgMTYu'@;
put 'ODE2ODk0NiwyLjY0MDY4NzUzIEwyLjg3ODUwNzY3LDI4LjE5NzcyODIgWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC42LDI5LjIxLDIwLjcxLDMuNjVhMy4yMiwzLjIyLDAsMCwwLTUuNjYsMEwxLjE3LDI5'@;
put 'LjIxQTMuMjIsMy4yMiwwLDAsMCw0LDM0SDMxLjc3YTMuMjIsMy4yMiwwLDAsMCwyLjgzLTQuNzVaTTE2LjYsMTBhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOS44NWExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOS44NVoi'@;
put 'Lz4nKSxSLkNsclNoYXBlSGVscEluZm89KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI1LjM5LDI1LjQ1YTEsMSwwLDAsMC0xLjM4LjI5Yy0xLjQxLDIuMTYtNCw0LjgxLTYuMzEsNS43cy00LjEyLjU3LTQuODQsMGMtLjMxLS4yNy0xLjEyLTEtLjQzLTMuNDkuNDYtMS42NiwzLjMyLTku'@;
put 'NDgsNC0xMS4zOGwtMi4xOC4yOGMtLjY5LDEuODYtMy4yOSw4Ljg0LTMuNzYsMTAuNTgtLjY4LDIuNDktLjM0LDQuMywxLjA5LDUuNTZBNS41OSw1LjU5LDAsMCwwLDE1LDM0YTkuNTMsOS41MywwLDAsMCwzLjQ1LS43YzIuNzktMS4wOSw1LjcyLTQuMTIsNy4yNi02LjQ3QTEsMSwwLDAsMCwy'@;
put 'NS4zOSwyNS40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjMsMTFhNC41LDQuNSwwLDEsMC00LjUtNC41QTQuNSw0LjUsMCwwLDAsMTkuMywxMVptMC03YTIuNSwyLjUsMCwxLDEtMi41LDIuNUEyLjUs'@;
put 'Mi41LDAsMCwxLDE5LjMsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjgxLDE1Yy4wNiwwLDYuMjctLjgyLDcuNzMtMSwuNjUtLjEsMS4xNCwwLDEuMy4xNXMuMjEuOC0uMDcsMS42OGMtLjYxLDEuODYt'@;
put 'My42OSwxMS00LjU5LDEzLjcxYTgsOCwwLDAsMCwxLjI5LS4zOCw3LjMyLDcuMzIsMCwwLDAsMS4xNS0uNkMxOS44NSwyNSwyMi4xNSwxOC4xLDIyLjY3LDE2LjUycy4zOS0yLjc4LS4zLTMuNmEzLjE2LDMuMTYsMCwwLDAtMy4wOC0uODNjLTEuNDMuMTUtNy40Ny45NC03LjczLDFhMSwxLDAs'@;
put 'MCwwLC4yNiwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyMC43NSIgY3k9IjYiIHI9IjQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBk'@;
put 'PSJNMjQuODQsMjYuMjNhMSwxLDAsMCwwLTEuNC4yOSwxNi42LDE2LjYsMCwwLDEtMy41MSwzLjc3Yy0uMzMuMjUtMS41NiwxLjItMi4wOCwxLS4zNi0uMTEtLjE1LS44Mi0uMDgtMS4xMmwuNTMtMS41N2MuMjItLjY0LDQuMDUtMTIsNC40Ny0xMy4zLjYyLTEuOS4zNS0zLjc3LTIuNDgtMy4z'@;
put 'Mi0uNzcuMDgtOC41OCwxLjA5LTguNzIsMS4xYTEsMSwwLDAsMCwuMTMsMnMzLS4zOSwzLjMzLS40MmEuODguODgsMCwwLDEsLjg1LjQ0LDIuNDcsMi40NywwLDAsMS0uMDcsMS43MWMtLjI2LDEtNC4zNywxMi41OC00LjUsMTMuMjVhMi43OCwyLjc4LDAsMCwwLDEuMTgsMyw1LDUsMCwwLDAs'@;
put 'My4wOC44M2gwYTguNTMsOC41MywwLDAsMCwzLjA5LS42MmMyLjQ5LTEsNS4wOS0zLjY2LDYuNDYtNS43NUExLDEsMCwwLDAsMjQuODQsMjYuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVCYXJzPSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMjlINGExLDEsMCwwLDEsMC0ySDMyYTEsMSwwLDAsMSwwLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z'@;
put 'MiwxOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTMyLDlINEExLDEsMCwwLDEsNCw3SDMyYTEsMSwwLDAsMSwwLDJaIi8+JyksUi5DbHJTaGFw'@;
put 'ZVVzZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE3YTcsNywwLDEsMC03LTdBNyw3LDAsMCwwLDE4LDE3Wk0xOCw1YTUsNSwwLDEsMS01LDVBNSw1LDAsMCwxLDE4LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMC40NywyNC4zN2ExNy4xNiwxNy4xNiwwLDAsMC0yNC45MywwQTIsMiwwLDAsMCw1LDI1Ljc0VjMxYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyNS43NEEyLDIsMCwwLDAsMzAuNDcsMjQuMzdaTTI5LDMxSDdWMjUuNzNhMTUuMTcsMTUuMTcsMCwwLDEsMjIs'@;
put 'MGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNDcsMjQuMzdhMTcuMTYsMTcuMTYsMCwwLDAtMjQuOTMsMEEyLDIsMCwwLDAsNSwyNS43NFYzMWEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJW'@;
put 'MjUuNzRBMiwyLDAsMCwwLDMwLjQ3LDI0LjM3Wk0yOSwzMUg3VjI1LjczYTE1LjE3LDE1LjE3LDAsMCwxLDIyLDBoMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcs'@;
put 'NywwLDAsMCw0LjQ1LTEuNmgtLjIyQTMuNjgsMy42OCwwLDAsMSwyMCwxNC42YTUsNSwwLDEsMSwxLjI0LTguNDJsMS0xLjc2QTcsNywwLDEsMCwxOCwxN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjQ3LDI0LjM3YTE3LjE2LDE3LjE2LDAsMCwwLTI0LjkzLDBBMiwyLDAsMCwwLDUsMjUuNzRWMzFhMiwyLDAsMCwwLDIsMkgyOWEyLDIsMCwwLDAsMi0yVjI1Ljc0QTIsMiww'@;
put 'LDAsMCwzMC40NywyNC4zN1pNMjksMzFIN1YyNS43M2ExNS4xNywxNS4xNywwLDAsMSwyMiwwaDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUt'@;
put 'NS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41'@;
put 'MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgi'@;
put 'IGN5PSIxMCIgcj0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC42MSwyNC41MmExNy4xNiwxNy4xNiwwLDAsMC0yNS4yMiwwLDEuNTEsMS41MSwwLDAsMC0uMzksMXY2QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIz'@;
put 'QTEuNSwxLjUsMCwwLDAsMzEsMzEuNXYtNkExLjUxLDEuNTEsMCwwLDAsMzAuNjEsMjQuNTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE3YTcsNywwLDAsMCw0LjQ1LTEuNmgt'@;
put 'LjIyQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDMuMTYtNS40N0E3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwx'@;
put 'LjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNjEsMjQuNTJhMTcuMTYsMTcuMTYsMCwwLDAtMjUuMjIsMCwxLjUxLDEuNTEsMCwwLDAtLjM5LDF2NkExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjV2LTZBMS41MSwxLjUxLDAsMCwwLDMwLjYxLDI0LjUyWiIgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMCwwLDYuODUtNS41Niw3LjQsNy40LDAsMCwxLTIuMjQtNi42OUE3LDcsMCwxLDAsMTgsMTdaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFIuQ2xyU2hhcGVB'@;
put 'bmdsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjUyLDIyLjUyLDE4LDEwLjYsNi40OCwyMi41MmExLjcsMS43LDAsMCwwLDIuNDUsMi4zNkwxOCwxNS40OWw5LjA4LDkuMzlhMS43LDEuNywwLDAsMCwy'@;
put 'LjQ1LTIuMzZaIi8+JyksUi5DbHJTaGFwZUZvbGRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjlhMiwy'@;
put 'LDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wm0wLDIwSDZWMTNoNy4zMWEyLDIsMCwwLDAsMi0ySDZWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwyLTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MWE3LjUsNy41LDAsMCwxLTEuMjktMkgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx'@;
put 'Mi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0y'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMwLDE1LjRWMjlINlYxM2g3LjMxYTIsMiwwLDAsMCwy'@;
put 'LTJINlY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNS40'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMwLDlIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2'@;
put 'QTIsMiwwLDAsMCw0LDdWMjlhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMCw5Wk02LDExVjdoNi40OWwyLjcyLDRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxl'@;
put 'cnRlZCIgZD0iTTIyLjIzLDE1LjRBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwxMVY3aDYuNDlsMi43Miw0WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAs'@;
put 'MzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTMwLDEzLjVBNy41LDcuNSwwLDAsMSwyMy4xMyw5SDE2'@;
put 'LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMuNVpNNiwxMVY3aDYuNDlsMi43Miw0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxSLkNsclNoYXBlRm9sZGVyT3Blbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMmEyLDIsMCwwLDAtMi0ySDE2LjQyTDE0'@;
put 'LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYs'@;
put 'MCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zNS4zMiwxMy43NEExLjcxLDEuNzEsMCwwLDAsMzMuODcsMTNIMTEuMTdhMi41OSwyLjU5LDAs'@;
put 'MCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwuMTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoOC41MmE3LjQ5LDcuNDksMCwwLDEtMS4yOS0ySDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNyww'@;
put 'LDAsMCw1LjQxLDMxSDMwLjM0YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFBMS42NCwxLjY0LDAsMCwwLDM1LjMyLDEzLjc0Wk0yOS41NSwyOUg2LjlsMy44OC0xMy44MWEuNjYuNjYsMCwwLDEsLjM4LS4yNEgzMy40OVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVk'@;
put 'IiBkPSJNMzMuNjgsMTUuNGgtLjNMMjkuNTUsMjlINi45bDMuODgtMTMuODFhLjY2LjY2LDAsMCwxLC4zOC0uMjRoOS40MkEzLjY3LDMuNjcsMCwwLDEsMTksMTMuNTZhMy42MywzLjYzLDAsMCwxLS4yNi0uNTZIMTEuMTdhMi41OSwyLjU5LDAsMCwwLTIuMjUsMS41MiwxLDEsMCwwLDAsMCwu'@;
put 'MTRMNiwyNVY3aDYuNDlsMi42MSwzLjU5YTEsMSwwLDAsMCwuODEuNDFoMi43M0EzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwxOS41Niw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5LjY5QTEuMzcsMS4zNywwLDAsMCw1LjQxLDMxSDMwLjM0'@;
put 'YTEsMSwwLDAsMCwxLS43Mmw0LjE5LTE1LjFhMS42OCwxLjY4LDAsMCwwLC4wNy0uMzJBMy42NywzLjY3LDAsMCwxLDMzLjY4LDE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQg'@;
put 'Y2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxSDMyYTIs'@;
put 'MiwwLDAsMC0yLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTktMTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDExLjE3YTIuNTksMi41OSwwLDAsMC0y'@;
put 'LjI1LDEuNTIsMSwxLDAsMCwwLDAsLjE0TDYsMjVWN2g2LjQ5bDIuNjEsMy41OWExLDEsMCwwLDAsLjgxLjQxaDIuNzNBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOS42OUExLjM3LDEu'@;
put 'MzcsMCwwLDAsNS40MSwzMUgzMC4zNGExLDEsMCwwLDAsMS0uNzJsNC4xOS0xNS4xYTEuNjgsMS42OCwwLDAsMCwuMDctLjMyQTMuNjcsMy42NywwLDAsMSwzMy42OCwxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTM1LjMyLDEzLjc0QTEuNzEsMS43MSwwLDAsMCwzMy44NywxM0gxMS4xN2EyLjU5LDIuNTksMCwwLDAtMi4yNSwxLjUyLDEsMSwwLDAsMCwwLC4xNEw2LDI1VjdoNi40'@;
put 'OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MWg4LjUyYTcuNDksNy40OSwwLDAsMS0xLjMxLTJIMTYuNDJMMTQuMTEsNS44MkEyLDIsMCwwLDAsMTIuNDksNUg2QTIsMiwwLDAsMCw0LDdWMjkuNjlBMS4zNywxLjM3LDAsMCwwLDUuNDEsMzFIMzAuMzRhMSwxLDAsMCwwLDEtLjcybDQuMTkt'@;
put 'MTUuMUExLjY0LDEuNjQsMCwwLDAsMzUuMzIsMTMuNzRaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVC'@;
put 'ZWxsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuNTEsMjcuODNBMTQuNCwxNC40LDAsMCwxLDMwLDI0LjlhMTIuNjMsMTIuNjMsMCwwLDEtMS4zNS00LjgxVjE1LjE1QTEwLjgxLDEwLjgxLDAsMCwwLDE5'@;
put 'LjIxLDQuNFYzLjExYTEuMzMsMS4zMywwLDEsMC0yLjY3LDBWNC40MkExMC44MSwxMC44MSwwLDAsMCw3LjIxLDE1LjE1djQuOTRBMTIuNjMsMTIuNjMsMCwwLDEsNS44NiwyNC45YTE0LjQsMTQuNCwwLDAsMS0yLjQ3LDIuOTMsMSwxLDAsMCwwLS4zNC43NXYxLjM2YTEsMSwwLDAsMCwxLDFo'@;
put 'MjcuOGExLDEsMCwwLDAsMS0xVjI4LjU4QTEsMSwwLDAsMCwzMi41MSwyNy44M1pNNS4xMywyOC45NGExNi4xNywxNi4xNywwLDAsMCwyLjQ0LTMsMTQuMjQsMTQuMjQsMCwwLDAsMS42NS01Ljg1VjE1LjE1YTguNzQsOC43NCwwLDEsMSwxNy40NywwdjQuOTRhMTQuMjQsMTQuMjQsMCwwLDAs'@;
put 'MS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDM0LjI4QTIuNjcsMi42NywwLDAsMCwyMC41OCwzMkgxNS4zMkEyLjY3LDIuNjcsMCwwLDAs'@;
put 'MTgsMzQuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAsMCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIs'@;
put 'MTAuOTIsMCwwLDAtLjE2LTEuNzksNy40NCw3LjQ0LDAsMCwxLTIuMjQtLjg0LDguODksOC44OSwwLDAsMSwuNCwyLjY0djQuOTRhMTQuMjQsMTQuMjQsMCwwLDAsMS42NSw1Ljg1LDE2LjE3LDE2LjE3LDAsMCwwLDIuNDQsM0g1LjEzYTE2LjE3LDE2LjE3LDAsMCwwLDIuNDQtMywxNC4yNCwx'@;
put 'NC4yNCwwLDAsMCwxLjY1LTUuODVWMTUuMTVBOC44LDguOCwwLDAsMSwxOCw2LjMxYTguNjEsOC42MSwwLDAsMSw0Ljc2LDEuNDRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNmMwLS4yMSwwLS40MiwwLS42M2ExMC41OCwxMC41OCwwLDAsMC0zLjMyLTFWMy4xMWExLjMzLDEuMzMsMCwxLDAtMi42'@;
put 'NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzLDEsMSwwLDAsMC0uMzQuNzV2MS4zNmExLDEsMCwwLDAsMSwxaDI3LjhhMSwxLDAsMCwwLDEtMVYyOC41OEExLDEsMCww'@;
put 'LDAsMzIuNTEsMjcuODNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuODUsMjguMTNsLS4zNC0uM0ExNC4zNywxNC4zNywwLDAsMSwzMCwyNC45YTEyLjYzLDEyLjYzLDAsMCwxLTEuMzUtNC44MVYxNS4xNUExMC44MSwxMC44MSwwLDAsMCwxOS4yMSw0LjRWMy4xMWExLjMzLDEuMzMsMCwx'@;
put 'LDAtMi42NywwVjQuNDJBMTAuODEsMTAuODEsMCwwLDAsNy4yMSwxNS4xNXY0Ljk0QTEyLjYzLDEyLjYzLDAsMCwxLDUuODYsMjQuOWExNC40LDE0LjQsMCwwLDEtMi40NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xNS4zMiwzMmEyLjY1LDIuNjUsMCwwLDAsNS4yNSwwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTgsMzQuMjhBMi42NywyLjY3LDAs'@;
put 'MCwwLDIwLjU4LDMySDE1LjMyQTIuNjcsMi42NywwLDAsMCwxOCwzNC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTMyLjg1LDI4LjEzbC0uMzQtLjNBMTQuMzcsMTQuMzcsMCww'@;
put 'LDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQuODFWMTUuMTVhMTAuOTIsMTAuOTIsMCwwLDAtLjE2LTEuNzlBNy41LDcuNSwwLDAsMSwyMi41LDZjMC0uMjEsMC0uNDIsMC0uNjNhMTAuNTcsMTAuNTcsMCwwLDAtMy4zMi0xVjMuMTFhMS4zMywxLjMzLDAsMSwwLTIuNjcsMFY0'@;
put 'LjQyQTEwLjgxLDEwLjgxLDAsMCwwLDcuMjEsMTUuMTV2NC45NEExMi42MywxMi42MywwLDAsMSw1Ljg2LDI0LjlhMTQuNCwxNC40LDAsMCwxLTIuNDcsMi45M2wtLjM0LjN2Mi44MkgzMi44NVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksUi5DbHJTaGFwZUltYWdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJW'@;
put 'NkEyLDIsMCwwLDAsMzIsNFpNNCwzMFY2SDMyVjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjkyLDE0YTMsMywwLDEsMC0zLTNBMywzLDAsMCwwLDguOTIsMTRabTAtNC42QTEuNiwxLjYsMCwxLDEsNy4z'@;
put 'MywxMSwxLjYsMS42LDAsMCwxLDguOTIsOS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNzgsMTUuMzdsLTUuNCw1LjQtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5'@;
put 'TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFBMSwxLDAsMCwwLDIyLjc4LDE1LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45MywxMWEzLDMsMCwx'@;
put 'LDAtMywzQTMsMywwLDAsMCwxMS45MywxMVptLTQuNiwwYTEuNiwxLjYsMCwxLDEsMS42LDEuNkExLjYsMS42LDAsMCwxLDcuMzMsMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'Ny4zOCwyMC43N2wtNC00YTEsMSwwLDAsMC0xLjQxLDBMNS45MiwyMi45djIuODNsNi43OS02Ljc5TDE2LDIyLjE4bC0zLjc1LDMuNzVIMTVsOC40NS04LjQ1TDMwLDI0VjIxLjE4bC01LjgxLTUuODFhMSwxLDAsMCwwLTEuNDEsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWNkgyMi41YTcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDUsNy40NSwwLDAs'@;
put 'MSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNOC45Miw4YTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDguOTIsOFpNNiwyN1Yy'@;
put 'Mi45bDYtNi4wOGExLDEsMCwwLDEsMS40MSwwTDE2LDE5LjM1LDguMzIsMjdabTI0LDBIMTEuMTVsNi4yMy02LjIzLDUuNC01LjRhMSwxLDAsMCwxLDEuNDEsMEwzMCwyMS4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMCwxMy41QTcuNDgsNy40OCwwLDAsMSwyMi43OCw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2'@;
put 'LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMyLDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFIuQ2xyU2hhcGVDbG91ZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDMzSDEwLjYyQzUuNjcsMzMsMSwyOC4xOSwxLDIzLjFhMTAsMTAsMCwwLDEsOC05Ljc1LDEwLjE5LDEwLjE5LDAsMCwxLDIwLjMzLDEuMDZBMTAuMDcsMTAuMDcsMCwwLDEsMjksMTYuNjZhOC4yOSw4LjI5LDAsMCwxLDYsOEMzNSwyOS4x'@;
put 'LDMxLjMzLDMzLDI3LjE0LDMzWk0xOS4wOSw2LjIzYTguMjQsOC4yNCwwLDAsMC04LjE5LDhsMCwuODctLjg2LjFBNy45NCw3Ljk0LDAsMCwwLDMsMjMuMWMwLDQsMy43Nyw3LjksNy42Miw3LjlIMjcuMTRDMzAuMjEsMzEsMzMsMjgsMzMsMjQuNjVhNi4zMSw2LjMxLDAsMCwwLTUuMzctNi4y'@;
put 'NmwtMS4xOC0uMTguMzktMS4xM0E4LjE4LDguMTgsMCwwLDAsMTkuMDksNi4yM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yOSwxNi42NmExMC4wNywxMC4wNywwLDAsMCwu'@;
put 'MjUtMi4yNGMwLS4zMywwLS42NSwwLTFhNy40NSw3LjQ1LDAsMCwxLTIuMS0uNTQsOCw4LDAsMCwxLS4zLDQuMTZsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03LjYy'@;
put 'LTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N2E4LjI0LDguMjQsMCwwLDEsOC4xOS04QTguMTMsOC4xMywwLDAsMSwyMi41OCw3YTcuNTMsNy41MywwLDAsMS0uMDgtMSw3LjUxLDcuNTEsMCwwLDEsLjA5LTEuMTJBMTAuMTMsMTAuMTMsMCwwLDAsMTksNC4yMywxMC4y'@;
put 'NiwxMC4yNiwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYtMy45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRl'@;
put 'ZCIgZD0iTTI5LDE2LjY2YTEwLjE0LDEwLjE0LDAsMCwwLC4yLTEuM2gtMmE4LjI4LDguMjgsMCwwLDEtLjM3LDEuNzJsLS4zOSwxLjEzLDEuMTguMThhNi4zMSw2LjMxLDAsMCwxLDUuMzcsNi4yNkMzMi45NSwyOCwzMC4xNiwzMSwyNy4wOSwzMUgxMC41N2MtMy44NCwwLTcuNjItMy45MS03'@;
put 'LjYyLTcuOWE3Ljk0LDcuOTQsMCwwLDEsNy03Ljg5bC44Ni0uMSwwLS44N0E4LjE2LDguMTYsMCwwLDEsMjEsNi40N2wxLTEuOEExMC4xOSwxMC4xOSwwLDAsMCw4LjkxLDEzLjM2YTEwLDEwLDAsMCwwLTgsOS43NWMwLDUuMDksNC42Nyw5LjksOS42Miw5LjlIMjcuMDljNC4xOSwwLDcuODYt'@;
put 'My45LDcuODYtOC4zNUE4LjI5LDguMjksMCwwLDAsMjksMTYuNjZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjks'@;
put 'MTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRBMTAuMTksMTAuMTksMCwwLDAsOC45MSwxMy4zNiwxMCwxMCwwLDAsMCwxLDIzLjFDMSwyOC4xOSw1LjYyLDMzLDEwLjU3LDMzSDI3LjA5QzMxLjI4LDMzLDM1LDI5LjEsMzUsMjQuNjVBOC4yOSw4LjI5LDAsMCwwLDI5LDE2LjY2WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjksMTYuNjZhMTAuMDcsMTAuMDcsMCwwLDAsLjI1LTIuMjRjMC0uMzMsMC0uNjUsMC0xYTcuNDQsNy40NCwwLDAsMS02LjYtOC41OEExMC4x'@;
put 'MywxMC4xMywwLDAsMCwxOSw0LjIzLDEwLjI2LDEwLjI2LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41NywzM0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI5LDE2LjY2YTEwLjE1LDEwLjE1LDAsMCwwLC4yLTEuMjZoLTdBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMy01LjIxQTEwLjE5LDEwLjE5LDAsMCwwLDguOTEsMTMuMzYsMTAsMTAsMCwwLDAsMSwyMy4xQzEsMjguMTksNS42MiwzMywxMC41Nywz'@;
put 'M0gyNy4wOUMzMS4yOCwzMywzNSwyOS4xLDM1LDI0LjY1QTguMjksOC4yOSwwLDAsMCwyOSwxNi42NloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUs'@;
put 'MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksUi5DbHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbD0oMCxtLmNsckljb25TVkcpKCc8Y2ly'@;
put 'Y2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksUi5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWw9KDAsbS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIzMS4xIiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIg'@;
put 'cj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'My0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFIuQ2xyU2hhcGVGaWx0ZXJHcmlkPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEu'@;
put 'NDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEsMXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNOCwxMXYxLjEy'@;
put 'YS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+Jyks'@;
put 'Ui5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSww'@;
put 'LDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwu'@;
put 'MTUtLjM1VjExWiIvPicpLFIuQ2xyU2hhcGVWbUJ1Zz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHJ4PSIzIiBmaWxsPSIjZmZmZmZmIiBvcGFjaXR5PSIwLjE1IiBzdHlsZT0iaXNvbGF0aW9uOmlzb2xhdGUiLz48cGF0aCBkPSJNMy43OSwxNC44M2Ex'@;
put 'LjA5LDEuMDksMCwwLDAtMS40Ny0uNTYsMS4wOSwxLjA5LDAsMCwwLS41NCwxLjQ5bDIuNDcsNS40Yy4zOS44NS44LDEuMjksMS41NywxLjI5UzcsMjIsNy4zOSwyMS4xNmwyLjE3LTQuNzdhLjMzLjMzLDAsMCwxLC4zMS0uMi4zNS4zNSwwLDAsMSwuMzUuMzV2NC42MWExLjE1LDEuMTUsMCww'@;
put 'LDAsMS4xNCwxLjMsMS4xNywxLjE3LDAsMCwwLDEuMTctMS4zVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCwwLDEsMS4xOCwxLjJ2My43N2ExLjE3LDEuMTcsMCwxLDAsMi4zMiwwVjE3LjM4YTEuMTUsMS4xNSwwLDAsMSwxLjIyLTEuMiwxLjEzLDEuMTMsMCww'@;
put 'LDEsMS4xOCwxLjJ2My43N2ExLjE2LDEuMTYsMCwxLDAsMi4zMSwwVjE2Ljg2YTIuNjksMi42OSwwLDAsMC0yLjc4LTIuNjksMy41NywzLjU3LDAsMCwwLTIuNDcsMS4wNSwyLjc1LDIuNzUsMCwwLDAtMi4zOC0xLjA1QTMuOTMsMy45MywwLDAsMCwxMiwxNS4yMmEyLjgyLDIuODIsMCwwLDAt'@;
put 'Mi4wOC0xLjA1QTIuNTUsMi41NSwwLDAsMCw3LjQsMTUuODlMNS44MiwxOS42M2wtMi00LjgiIGZpbGw9IiNmZmZmZmYiLz48cGF0aCBkPSJNMzMsMTQuMThBMS4xNCwxLjE0LDAsMCwwLDMxLjksMTVsLTEuMTksMy43M0wyOS41LDE1LjA1YTEuMTgsMS4xOCwwLDAsMC0xLjE1LS44N2gtLjFh'@;
put 'MS4yLDEuMiwwLDAsMC0xLjE1Ljg3bC0xLjE5LDMuNzEtMS4xOC0zLjcxYTEuMTUsMS4xNSwwLDAsMC0xLjExLS44NywxLjA4LDEuMDgsMCwwLDAtMS4xMiwxLjA3LDEuNjgsMS42OCwwLDAsMCwuMS41NGwyLDUuN2ExLjI3LDEuMjcsMCwwLDAsMS4yNywxLDEuMjQsMS4yNCwwLDAsMCwxLjIt'@;
put 'LjkzbDEuMi0zLjY0LDEuMiwzLjY0YTEuMjUsMS4yNSwwLDAsMCwxLjI2LjkzQTEuMjcsMS4yNywwLDAsMCwzMiwyMS41TDM0LDE1LjczYTEuNzcsMS43NywwLDAsMCwuMDgtLjQ4QTEuMDcsMS4wNywwLDAsMCwzMywxNC4xOFoiIGZpbGw9IiNmZmZmZmYiLz4nKSxSLkNsclNoYXBlU2VhcmNo'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMzMsNS4wNUExMC45NSwxMC45NSwwLDEsMSw1LjM5LDE2LDExLDExLDAsMCwxLDE2LjMzLDUuMDVtMC0yLjA1YTEzLDEzLDAsMSwwLDEzLDEzLDEzLDEzLDAs'@;
put 'MCwwLTEzLTEzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzUsMzMuMjlsLTcuMzctNy40Mi0xLjQyLDEuNDEsNy4zNyw3LjQyQTEsMSwwLDEsMCwzNSwzMy4yOVoiLz4nKSxSLkNsclNoYXBlVmlld0Nv'@;
put 'bHVtbnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIsMCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEw'@;
put 'LDBIMTVWN2g4WiIvPicpLFIuQ2xyU2hhcGVBbmdsZURvdWJsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEt'@;
put 'MS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksMzAuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsMTkuODMsNy43MSwzMC4x'@;
put 'MmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDE3LDI5LjcxLDI4LjcxQTEsMSwwLDAsMSwyOSwzMC40MVoiLz4nKSxSLkNsclNoYXBlQ2FsZW5kYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi4yNSw2SDI5'@;
put 'VjhoM1YzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBo'@;
put 'ZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMjAiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTUiIHg9IjI2IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iMjAi'@;
put 'IHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEzIiB4PSIyNiIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEs'@;
put 'MSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwxMFoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTYiIHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdl'@;
put 'ZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjIwIiB5PSIxNCIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIg'@;
put 'eD0iMTQiIHk9IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIiB4PSIyMCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiIHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQiIHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIgeD0iMTQiIHk9IjI0IiB3aWR0'@;
put 'aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MTQtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE1LS1iYWRnZWQiIGQ9Ik0yMi41'@;
put 'LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAg'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMy'@;
put 'aDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI4IiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgeD0iMTQiIHk9'@;
put 'IjE5IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiIHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIgeD0iOCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCIgeD0iMTQiIHk9IjI0IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIiB4PSIyMCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWFsZXJ0ZWQiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xMi0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwb2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEzLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAs'@;
put 'MCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMSwxLTQuNCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCww'@;
put 'LDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlpt'@;
put 'MC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTAtNUgyMFYxNGgyWm02LDEwSDI2VjI0aDJabTAtNUgyNlYxOWgyWm0wLTVIMjZWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTAs'@;
put 'MTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAs'@;
put 'MCwwLDI2LDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4'@;
put 'LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgy'@;
put 'MFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAtNUgyNlYxNGgyWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMzMuNjgsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMS4yOSw2SDEyLjJW'@;
put 'OUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0'@;
put 'aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptNiw1SDI2VjI0aDJabTAtNUgyNlYxOWgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQi'@;
put 'IGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUs'@;
put 'MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksUi5DbHJTaGFwZUV2ZW50PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTYuMTcsMjUuODYsMTAuODEsMjAuNWExLDEsMCwwLDEsMS40MS0xLjQxTDE2LjE3LDIzbDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIu'@;
put 'MjUsNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUi'@;
put 'IHg9IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLjgxLDIwLjVsNS4zNiw1LjM2TDI2LjIyLDE1LjgxYTEsMSwwLDAs'@;
put 'MC0xLjQxLTEuNDFMMTYuMTcsMjNsLTMuOTQtMy45NGExLDEsMCwwLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0Ex'@;
put 'LDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3'@;
put 'LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC00LS1iYWRnZWQiIGQ9Ik0yMi41LDZIMTNWOGg5Ljc4QTcuNDksNy40OSwwLDAsMSwyMi41LDZaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIz'@;
put 'MCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxu'@;
put 'ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwxLDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEs'@;
put 'MSwwLDAsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVB'@;
put 'MS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgs'@;
put 'MCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTEwLDEwYTEsMSww'@;
put 'LDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSwwLDAsMCwyNiwx'@;
put 'MFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuMjUsNmgtNFY5YTIuMiwyLjIsMCwwLDEtNC40LDBWNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAu'@;
put 'MTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4LDEuNzgsMCwwLDAsMzIuMjUsNlpNMjUuOTQsMTYuNThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEsMTIuOSwxOWwzLjM4LDMuMzhMMjQsMTQuNjZhMS4z'@;
put 'NiwxLjM2LDAsMSwxLDEuOTMsMS45M1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBa'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMzLjY4LDE1LjRIMjYuM2ExLjM0LDEuMzQsMCwwLDEtLjM2LDEuMThsLTkuNjcsOS42N0wxMSwyMC45NEExLjM2LDEuMzYsMCwwLDEs'@;
put 'MTIuOSwxOWwzLjM4LDMuMzgsNy03aC0xQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0'@;
put 'LDMwLjE5VjE1LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEwLDEwYTEsMSwwLDAsMCwx'@;
put 'LTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzAsMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNkgxMi4yVjlBMi4yLDIu'@;
put 'MiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVabS00LjA2LDMuMDgtOS42Nyw5LjY3TDExLDIwLjk0QTEu'@;
put 'MzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOEwyNCwxNC42NmExLjM2LDEuMzYsMCwxLDEsMS45MywxLjkzWiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4'@;
put 'PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxSLkNsclNoYXBlRXllPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBz'@;
put 'MTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCwwLDEsMTgu'@;
put 'MDksMjIuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4y'@;
put 'OCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOC4wOSIgY3k9IjE4LjAzIiByPSI2Ljg2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+JyksUi5DbHJTaGFwZUV5ZUhpZGU9KDAsbS5jbHJJY29u'@;
put 'U1ZHKSgnPHBhdGggZD0iTTI1LjE5LDIwLjRBNi43OCw2Ljc4LDAsMCwwLDI1LjYyLDE4YTYuODYsNi44NiwwLDAsMC02Ljg2LTYuODYsNi43OSw2Ljc5LDAsMCwwLTIuMzcuNDNMMTgsMTMuMjNhNC43OCw0Ljc4LDAsMCwxLC43NC0uMDZBNC44Nyw0Ljg3LDAsMCwxLDIzLjYyLDE4YTQuNzks'@;
put 'NC43OSwwLDAsMS0uMDYuNzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44MiwwLDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0'@;
put 'Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTku'@;
put 'NzUsOS43NSw2LjY1LDYuNjVhNC44MSw0LjgxLDAsMCwxLTIuNS43MkE0Ljg3LDQuODcsMCwwLDEsMTMuOSwxOCw0LjgxLDQuODEsMCwwLDEsMTQuNjIsMTUuNTNabS0xLjQ1LTEuNDVhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4y'@;
put 'Yy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjM3LDExLjE3QTYuNzksNi43OSwwLDAsMCwxNiwxMS42bDgu'@;
put 'OCw4LjhBNi43OCw2Ljc4LDAsMCwwLDI1LjIzLDE4LDYuODYsNi44NiwwLDAsMCwxOC4zNywxMS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBh'@;
put 'MTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYzLS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQuODcsNS43OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCww'@;
put 'LDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwxLjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksUi5DbHJTaGFwZVN0ZXBGb3J3YXJkMj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNy4wOCw2LjUyYTEuNjgsMS42OCwwLDAsMCwwLDIuNEwxNi41MSwxOCw3LjEyLDI3LjA4YTEuNywxLjcsMCwwLDAsMi4zNiwyLjQ0aDBM'@;
put 'MjEuNCwxOCw5LjQ4LDYuNDdBMS42OSwxLjY5LDAsMCwwLDcuMDgsNi41MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEuNywx'@;
put 'LjcsMCwwLDAsMjYuNDksNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcuNjYsMTUuNjEsMTgsNiw4LjM0LDE1LjYxQTEsMSwwLDEsMCw5Ljc1LDE3TDE3LDkuODFW'@;
put 'MjguOTRhMSwxLDAsMSwwLDIsMFY5LjgxTDI2LjI1LDE3YTEsMSwwLDAsMCwxLjQxLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPicpLFIuQ29yZVNoYXBlcz17InVua25vd24tc3RhdHVzIjpSLkNsclNoYXBlVW5rbm93blN0YXR1cyxob21lOlIu'@;
put 'Q2xyU2hhcGVIb21lLGNvZzpSLkNsclNoYXBlQ29nLGNoZWNrOlIuQ2xyU2hhcGVDaGVjayx0aW1lczpSLkNsclNoYXBlVGltZXMsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIjpSLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZSwiZXhjbGFtYXRpb24tY2lyY2xlIjpSLkNsclNoYXBlRXhjbGFt'@;
put 'YXRpb25DaXJjbGUsImNoZWNrLWNpcmNsZSI6Ui5DbHJTaGFwZUNoZWNrQ2lyY2xlLCJpbmZvLWNpcmNsZSI6Ui5DbHJTaGFwZUluZm9DaXJjbGUsImluZm8tc3RhbmRhcmQiOlIuQ2xyU2hhcGVJbmZvU3RhbmRhcmQsInN1Y2Nlc3Mtc3RhbmRhcmQiOlIuQ2xyU2hhcGVTdWNjZXNzU3RhbmRh'@;
put 'cmQsImVycm9yLXN0YW5kYXJkIjpSLkNsclNoYXBlRXJyb3JTdGFuZGFyZCwid2FybmluZy1zdGFuZGFyZCI6Ui5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZCwiaGVscC1pbmZvIjpSLkNsclNoYXBlSGVscEluZm8sYmFyczpSLkNsclNoYXBlQmFycyx1c2VyOlIuQ2xyU2hhcGVVc2VyLGFuZ2xl'@;
put 'OlIuQ2xyU2hhcGVBbmdsZSxmb2xkZXI6Ui5DbHJTaGFwZUZvbGRlciwiZm9sZGVyLW9wZW4iOlIuQ2xyU2hhcGVGb2xkZXJPcGVuLGJlbGw6Ui5DbHJTaGFwZUJlbGwsaW1hZ2U6Ui5DbHJTaGFwZUltYWdlLGNsb3VkOlIuQ2xyU2hhcGVDbG91ZCwiZWxsaXBzaXMtaG9yaXpvbnRhbCI6Ui5D'@;
put 'bHJTaGFwZUVsbGlwc2lzSG9yaXpvbnRhbCwiZWxsaXBzaXMtdmVydGljYWwiOlIuQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsLCJmaWx0ZXItZ3JpZCI6Ui5DbHJTaGFwZUZpbHRlckdyaWQsImZpbHRlci1ncmlkLWNpcmNsZSI6Ui5DbHJTaGFwZUZpbHRlckdyaWRDaXJjbGUsInZtLWJ1ZyI6'@;
put 'Ui5DbHJTaGFwZVZtQnVnLHNlYXJjaDpSLkNsclNoYXBlU2VhcmNoLCJ2aWV3LWNvbHVtbnMiOlIuQ2xyU2hhcGVWaWV3Q29sdW1ucywiYW5nbGUtZG91YmxlIjpSLkNsclNoYXBlQW5nbGVEb3VibGUsY2FsZW5kYXI6Ui5DbHJTaGFwZUNhbGVuZGFyLGV2ZW50OlIuQ2xyU2hhcGVFdmVudCxl'@;
put 'eWU6Ui5DbHJTaGFwZUV5ZSwiZXllLWhpZGUiOlIuQ2xyU2hhcGVFeWVIaWRlLCJzdGVwLWZvcndhcmQtMiI6Ui5DbHJTaGFwZVN0ZXBGb3J3YXJkMixhcnJvdzpSLkNsclNoYXBlQXJyb3d9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVTaGFwZXMsImhvdXNlIiwoMCxiLmRlc2NyaXB0'@;
put 'b3JDb25maWcpKFIuQ29yZVNoYXBlcy5ob21lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywic2V0dGluZ3MiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmNvZykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkNvcmVTaGFwZXMsInN1Y2Nlc3MiLCgw'@;
put 'LGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmNoZWNrKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiY2xvc2UiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLnRpbWVzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywi'@;
put 'd2FybmluZyIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJlcnJvciIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXNbImV4Y2xhbWF0aW9uLWNp'@;
put 'cmNsZSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiaW5mbyIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXNbImluZm8tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJtZW51IiwoMCxiLmRlc2NyaXB0b3JDb25m'@;
put 'aWcpKFIuQ29yZVNoYXBlcy5iYXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiYXZhdGFyIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlcy51c2VyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiY2FyZXQiLCgwLGIuZGVzY3Jp'@;
put 'cHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmFuZ2xlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuQ29yZVNoYXBlcywiZGlyZWN0b3J5IiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuQ29yZVNoYXBlcy5mb2xkZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJub3Rp'@;
put 'ZmljYXRpb24iLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Db3JlU2hhcGVzLmJlbGwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Db3JlU2hhcGVzLCJjb2xsYXBzZSIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkNvcmVTaGFwZXNbImFuZ2xlLWRvdWJsZSJdKSl9LCIuL3Byb2plY3Rz'@;
put 'L2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNo'@;
put 'YXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ2xyU2hhcGVMb2dvdXQ9Ui5DbHJTaGFwZUxvZ2luPVIuQ2xyU2hhcGVIZWxwPVIuQ2xyU2hhcGVDb3B5PVIuQ2xyU2hhcGVDaGlsZEFycm93PVIuQ2xyU2hhcGVDaXJjbGVBcnJvdz1SLkNsclNoYXBlQWxhcm1DbG9jaz1SLkNs'@;
put 'clNoYXBlQ2xvY2s9Ui5DbHJTaGFwZUhpc3Rvcnk9Ui5DbHJTaGFwZVRhZ3M9Ui5DbHJTaGFwZVRhZz1SLkNsclNoYXBlVHJhc2g9Ui5DbHJTaGFwZVRpbWVzQ2lyY2xlPVIuQ2xyU2hhcGVCYW49Ui5DbHJTaGFwZVBsdXNDaXJjbGU9Ui5DbHJTaGFwZU1pbnVzQ2lyY2xlPVIuQ2xyU2hhcGVN'@;
put 'aW51cz1SLkNsclNoYXBlUGx1cz1SLkNsclNoYXBlRmlsZT1SLkNsclNoYXBlUGluPVIuQ2xyU2hhcGVGaWx0ZXI9Ui5DbHJTaGFwZVBvcE91dD1SLkNsclNoYXBlVXNlcnM9Ui5DbHJTaGFwZVVubG9jaz1SLkNsclNoYXBlTG9jaz1SLkNsclNoYXBlVXBsb2FkPVIuQ2xyU2hhcGVEb3dubG9h'@;
put 'ZD1SLkNsclNoYXBlTGlnaHRidWxiPVIuQ2xyU2hhcGVWaWV3Q2FyZHM9Ui5DbHJTaGFwZVZpZXdMaXN0PVIuQ2xyU2hhcGVTeW5jPVIuQ2xyU2hhcGVSZWZyZXNoPVIuQ2xyU2hhcGVOb3RlPVIuQ2xyU2hhcGVQZW5jaWw9Ui5DbHJTaGFwZVRoZXJtb21ldGVyPVIuQ2xyU2hhcGVCdWc9Ui5D'@;
put 'bHJTaGFwZVNjaXNzb3JzPVIuQ2xyU2hhcGVBc3Rlcmlzaz1SLkNsclNoYXBlQm9vaz1SLkNsclNoYXBlT2JqZWN0cz1SLkNsclNoYXBlUmVzaXplPVIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Ui5DbHJTaGFwZUN1cnNvckhhbmQ9Ui5DbHJTaGFwZUN1cnNvckFycm93PVIuQ2xyU2hhcGVH'@;
put 'cmlkVmlldz1SLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Ui5DbHJTaGFwZU5ldz1SLkNsclNoYXBlQWxhcm1PZmY9Ui5DbHJTaGFwZVBpbmJvYXJkPVIuQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxSLkNsclNoYXBlQ2xvbmU9Ui5DbHJTaGFwZUN1cnNvck1vdmU9Ui5DbHJTaGFwZVdhbmQ9'@;
put 'Ui5DbHJTaGFwZVN1bj1SLkNsclNoYXBlTW9vbj1SLkNsclNoYXBlRmlsdGVyMj1SLkNsclNoYXBlRHJhZ0hhbmRsZT1SLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPVIuQ2xyU2hhcGVDb2xvclBpY2tlcj1SLkNsclNoYXBlQnJpZWZjYXNlPVIuQ2xyU2hhcGVFeHBhbmRDYXJkPVIuQ2xyU2hh'@;
put 'cGVDb2xsYXBzZUNhcmQ9Ui5DbHJTaGFwZVNvcnRCeT1SLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Ui5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPVIuQ2xyU2hhcGVTaHJpbms9Ui5DbHJTaGFwZVBhcGVyY2xpcD1SLkNsclNoYXBlRmlsZUdyb3VwPVIuQ2xyU2hhcGVSZXBlYXQ9Ui5DbHJTaGFw'@;
put 'ZUlkQmFkZ2U9Ui5DbHJTaGFwZUJhbGFuY2U9Ui5DbHJTaGFwZU9yZ2FuaXphdGlvbj1SLkNsclNoYXBlTm9BY2Nlc3M9Ui5DbHJTaGFwZUhvdXJnbGFzcz1SLkNsclNoYXBlRmxhbWU9Ui5DbHJTaGFwZVRhcmdldD1SLkNsclNoYXBlQnVsbHNleWU9Ui5DbHJTaGFwZVdyZW5jaD1SLkNsclNo'@;
put 'YXBlQm9sdD1SLkNsclNoYXBlTGlicmFyeT1SLkNsclNoYXBlS2V5PVIuQ2xyU2hhcGVab29tT3V0PVIuQ2xyU2hhcGVab29tSW49Ui5DbHJTaGFwZVdpbmRvd1Jlc3RvcmU9Ui5DbHJTaGFwZVdpbmRvd01pbj1SLkNsclNoYXBlV2luZG93TWF4PVIuQ2xyU2hhcGVXaW5kb3dDbG9zZT1SLkNs'@;
put 'clNoYXBlVG9vbHM9Ui5DbHJTaGFwZVN3aXRjaD1SLkNsclNoYXBlVHdvV2F5QXJyb3dzPVIuQ2xyU2hhcGVGaWxlU2V0dGluZ3M9Ui5DbHJTaGFwZVNjcm9sbD1SLkNsclNoYXBlVW5kbz1SLkNsclNoYXBlUmVkbz1SLkNsclNoYXBlTGlzdD1SLkNsclNoYXBlRmlyZXdhbGw9Ui5DbHJTaGFw'@;
put 'ZUNsaXBib2FyZD1SLkNsclNoYXBlU2xpZGVyPVIuQ2xyU2hhcGVXb3JsZD1SLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsUi5Fc3NlbnRpYWxTaGFwZXM9Ui5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1SLkNsclNoYXBlRmlyc3RBaWQ9Ui5DbHJTaGFwZUJldGE9Ui5DbHJTaGFwZURvdENpcmNsZT1S'@;
put 'LkNsclNoYXBlQ2lyY2xlPVIuQ2xyU2hhcGVDcm9zc2hhaXJzPVIuQ2xyU2hhcGVWb2x1bWU9Ui5DbHJTaGFwZVRhYmxlPVIuQ2xyU2hhcGVTbm93Zmxha2U9Ui5DbHJTaGFwZUZ1ZWw9Ui5DbHJTaGFwZUZvcm09Ui5DbHJTaGFwZUZpc2g9Ui5DbHJTaGFwZVRyZWU9Ui5DbHJTaGFwZVJlY3lj'@;
put 'bGU9Ui5DbHJTaGFwZUZpbHRlck9mZj1SLkNsclNoYXBlRmlsZVppcD1SLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49Ui5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPVIuQ2xyU2hhcGVUcmVlVmlldz1SLkNsclNoYXBlUG9ydHJhaXQ9Ui5DbHJTaGFwZVBhc3RlPVIuQ2xyU2hhcGVMYW5kc2NhcGU9'@;
put 'Ui5DbHJTaGFwZUVyYXNlcj1SLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1SLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIGI9ZWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxt'@;
put 'PWVlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIiksWD1lZSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO1Iu'@;
put 'Q2xyU2hhcGVBZGRUZXh0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gx'@;
put 'M2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCww'@;
put 'LDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxSLkNsclNoYXBlUGluYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0'@;
put 'SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcs'@;
put 'N2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIu'@;
put 'NzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNsMi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMx'@;
put 'OS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAs'@;
put 'Mi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwz'@;
put 'LjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgsMS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLFIuQ2xyU2hhcGVBbGFybU9mZj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40NywzLjg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNS4zMywyMS41NGEuOS45LDAsMCwwLS40MS0xLjJsLTMuMi0xLjU2TDI0Ljg5LDIyQS44OS44OSwwLDAsMCwyNS4zMywyMS41NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsOC42YS45LjksMCwwLDAtLjkuOXY0LjZsMS44LDEuODFWOS41QS45LjksMCwwLDAsMTgsOC42WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xMS40MiwzLjQzYTUuOCw1'@;
put 'LjgsMCwwLDAtNS44MS0uODFMOC4zLDUuMzJBMTYsMTYsMCwwLDEsMTEuNDIsMy40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMTgsNGExMy45MSwxMy45MSwwLDAsMC04LjMsMi43NWwxLjQyLDEuNDNBMTIs'@;
put 'MTIsMCwwLDEsMjcuODIsMjQuOWwxLjQyLDEuNDNBMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMS41Niw0LjIxLDIuNzMsNS4zOGE1LjcsNS43LDAsMCwwLC42Nyw2LjFBMTUuNzgs'@;
put 'MTUuNzgsMCwwLDEsNS40Niw4LjEyTDYuODgsOS41NUExMy45NCwxMy45NCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjg5LDEzLjg5LDAsMCwwLDE2LjgsMGw0LjE0LDQuMTVMMzIsMzEuOSwzLDIuOFpNMjUsMjcuNzJBMTEuODks'@;
put 'MTEuODksMCwwLDEsMTgsMzAsMTIsMTIsMCwwLDEsNiwxOGExMS44OSwxMS44OSwwLDAsMSwyLjI5LTdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAtNy4zNy0uNjMsMTYu'@;
put 'MDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTEuNDIsMy40M2E1LjgsNS44LDAsMCwwLTUuNzctLjgyTDguMzMsNS4zQTE2LDE2'@;
put 'LDAsMCwxLDExLjQyLDMuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjQuOTIsMjEuOTRsNC4zNCw0LjM2QTE0LDE0LDAsMCwwLDkuNzUsNi43M0wxNywxNFY5LjY5YTEsMSwwLDAsMSwyLDBWMTZsMi4zMywyLjM0'@;
put 'TDI1LDIwLjFhMSwxLDAsMCwxLC40NywxLjMzQTEsMSwwLDAsMSwyNC45MiwyMS45NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0xLjYxLDQuMjEsMi43Myw1LjM0YTUuNzMsNS43MywwLDAsMCwuNjcsNi4xNUExNS44'@;
put 'OCwxNS44OCwwLDAsMSw1LjQ4LDguMUw2LjkxLDkuNTJBMTMuOTQsMTMuOTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLFIuQ2xyU2hh'@;
put 'cGVOZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4wOC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSww'@;
put 'LDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCwwLDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAxNi44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEg'@;
put 'MTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40'@;
put 'MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIsMkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMu'@;
put 'MjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0xLjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44'@;
put 'NSwxNWgxLjIzWiIvPicpLFIuQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCww'@;
put 'LDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYs'@;
put 'MCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0x'@;
put 'OCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywx'@;
put 'MywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEsMCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2'@;
put 'LjQ3WiIvPicpLFIuQ2xyU2hhcGVHcmlkVmlldz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAs'@;
put 'MTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAsNEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRW'@;
put 'Nmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAsMCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAg'@;
put 'ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIy'@;
put 'MCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPicpLFIuQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZh'@;
put 'MSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCwwLDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3'@;
put 'Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1'@;
put 'bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAsMCwwLDI5LDEyLjM2WiIvPicpLFIuQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4LDEwLjU4VjUuMjhBMy40LDMuNCwwLDAsMCwxNC41LDIsMy40LDMuNCwwLDAsMCwxMSw1LjI4djEwTDkuNCwxMy43YTMuNzcsMy43'@;
put 'NywwLDAsMC01LjI4LDBBMy42NywzLjY3LDAsMCwwLDMsMTYuMzNhMy42LDMuNiwwLDAsMCwxLDIuNTZsNC42Niw1LjUyYTExLjUzLDExLjUzLDAsMCwwLDEuNDMsNCwxMC4xMiwxMC4xMiwwLDAsMCwyLDIuNTR2MS45MmExLjA3LDEuMDcsMCwwLDAsMSwxLjA4SDI3YTEuMDcsMS4wNywwLDAs'@;
put 'MCwxLTEuMDh2LTIuN2ExMi44MSwxMi44MSwwLDAsMCwzLTguMzZ2LTZBMSwxLDAsMCwwLDMwLjc0LDE1LjE5Wk0yOSwyMS44NmExMC43MiwxMC43MiwwLDAsMS0yLjYsNy4yNiwxLjExLDEuMTEsMCwwLDAtLjQuNzJWMzJIMTQuMTRWMzAuNTJhMSwxLDAsMCwwLS40NC0uODMsNy4yNiw3LjI2'@;
put 'LDAsMCwxLTEuODItMi4yMyw5LjE0LDkuMTQsMCwwLDEtMS4yLTMuNTIsMSwxLDAsMCwwLS4yMy0uNTlMNS41MywxNy41M2ExLjcsMS43LDAsMCwxLDAtMi40MiwxLjc2LDEuNzYsMCwwLDEsMi40NywwbDMsM3YzLjE0bDItMVY1LjI4QTEuNDIsMS40MiwwLDAsMSwxNC41LDQsMS40MiwxLjQy'@;
put 'LDAsMCwxLDE2LDUuMjh2MTEuOGwyLC40M1YxMi41OWEyNC4yNywyNC4yNywwLDAsMSwyLjUxLjE4VjE4bDEuNi4zNVYxM2MuNDEuMDguODMuMTcsMS4yNi4yOGExNC44OCwxNC44OCwwLDAsMSwxLjUzLjQ5djUuMTVsMS42LjM1VjE0LjVBMTEuMDYsMTEuMDYsMCwwLDEsMjksMTYuMjNaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjguNjksMTQuMzN2NC44M2wtMi0uNDNWMTMuMjRhMTYuMTksMTYuMTksMCwwLDAtMi4zMy0uODR2NS44MmwtMi0uNDNWMTJjLTEuMS0uMTgtMi4xOC0uMy0zLjA4LS4zNnY1LjUx'@;
put 'bC0yLS40M1YxMS40OGgwVjQuMzRhMi41MywyLjUzLDAsMCwwLTIuNi0yLjQzLDIuNTMsMi41MywwLDAsMC0yLjYsMi40M1YxNy4yN2gwdjIuNTlsLTIsMVYxNS42TDcuNzUsMTMuMjFhMi44MywyLjgzLDAsMCwwLTQsMCwyLjkzLDIuOTMsMCwwLDAsMCw0LjA5bDYsNy4xYTEwLjgyLDEwLjgy'@;
put 'LDAsMCwwLDEuMzksNC4yMiw4LjQyLDguNDIsMCwwLDAsMi4yMSwyLjczdjIuNTZIMjcuNzlWMzAuNjJhMTIuNTQsMTIuNTQsMCwwLDAsMy04LjV2LTZBMTAsMTAsMCwwLDAsMjguNjksMTQuMzNaIi8+JyksUi5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0wLjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxu'@;
put 'ICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQtMS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45'@;
put 'LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUuOFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01'@;
put 'LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYtMy4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6'@;
put 'IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4g'@;
put 'ICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjksMC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4x'@;
put 'LTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwxLjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4z'@;
put 'LDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksUi5DbHJTaGFwZVJlc2l6ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAs'@;
put 'Mmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05'@;
put 'LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksUi5DbHJTaGFwZU9iamVjdHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEw'@;
put 'LjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgzMlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSwwLDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEs'@;
put 'MCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUsMjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAs'@;
put 'MywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAs'@;
put 'MCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxSLkNsclNoYXBlQm9vaz0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODks'@;
put 'MS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDksMSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2'@;
put 'LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3'@;
put 'aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAs'@;
put 'MCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4wNiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxSLkNsclNoYXBlQXN0ZXJpc2s9KDAsbS5jbHJJ'@;
put 'Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUu'@;
put 'NzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEs'@;
put 'MCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEtMS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODct'@;
put 'NC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCww'@;
put 'LDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4'@;
put 'LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksUi5DbHJTaGFwZVNjaXNzb3JzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAg'@;
put 'ICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41'@;
put 'OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41NywwLDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZh'@;
put 'MSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMuNzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYsMEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2'@;
put 'LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwx'@;
put 'MiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwxLDcuNDUsMTMuMjNaIi8+JyksUi5DbHJTaGFwZUJ1Zz0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjIyLjQyIiBjeT0iMjUuODgiIHI9IjEuNTgiLz5cbiAgICAgICAg'@;
put 'ICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGN4PSIxMi44NiIgY3k9IjE3Ljc0IiByPSIxLjk1Ii8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBjeD0iMTMuOTkiIGN5'@;
put 'PSIyNS44OCIgcj0iMS41OCIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0xLjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuNjRBMTcu'@;
put 'NjUsMTcuNjUsMCwwLDEsMjcsMjAuNzJDMjcsMjcsMjMuOCwzMS4yMywxOC44LDMxLjYyVjE1SDE3LjJWMzEuNjJDMTIuMjIsMzEuMjEsOSwyNyw5LDIwLjcyYTE3Ljc0LDE3Ljc0LDAsMCwxLDEuNzMtNy4zNEw3LjcsMTEuNzJhMSwxLDAsMCwwLS45NSwxLjc2bDEuNS44QTE5LjM4LDE5LjM4'@;
put 'LDAsMCwwLDcuMDcsMjBINS4xN2ExLDEsMCwwLDAsMCwySDcuMWExNC42MiwxNC42MiwwLDAsMCwxLjY2LDYuMTdMNi44NywyOS40OUExLDEsMCwxLDAsOCwzMS4xMmwxLjg0LTEuMjlBMTAuMzgsMTAuMzgsMCwwLDAsMTgsMzMuNjZhMTAuMzgsMTAuMzgsMCwwLDAsOC4xNC0zLjgxTDI4LDMx'@;
put 'LjEyYTEsMSwwLDEsMCwxLjE1LTEuNjRsLTEuODYtMS4zQTE0LjYxLDE0LjYxLDAsMCwwLDI4Ljk0LDIyaDEuODlhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiBkPSJNMTEuNTEsNS4zNmExLjY3'@;
put 'LDEuNjcsMCwwLDAsMS4wNy0uNTFBMy4yMSwzLjIxLDAsMCwxLDEzLjc2LDZhMTYuMzgsMTYuMzgsMCwwLDAtMi42NSwyLjg5LDIsMiwwLDAsMCwxLjYxLDMuMTlIMjMuMzJBMiwyLDAsMCwwLDI1LjEsMTFhMiwyLDAsMCwwLS4xNy0yLjFBMTYuMzQsMTYuMzQsMCwwLDAsMjIuMjUsNmEzLjIx'@;
put 'LDMuMjEsMCwwLDEsMS4xNy0xLjExQTEuNjgsMS42OCwwLDEsMCwyMywzLjI3LDQuNzcsNC43NywwLDAsMCwyMSw1YTUuODEsNS44MSwwLDAsMC0yLjkzLTEsNS44Myw1LjgzLDAsMCwwLTMsMUE0Ljc3LDQuNzcsMCwwLDAsMTMsMy4yN2ExLjY4LDEuNjgsMCwxLDAtMS40OSwyLjA5Wk0xOCw2'@;
put 'LjA3YzEuNDUsMCwzLjUzLDEuNTcsNS4zMSw0aDBsLTEwLjYsMEMxNC40OSw3LjYzLDE2LjU2LDYuMDcsMTgsNi4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC44MywyMEgyOWExOS4yOSwxOS4yOSwwLDAsMC0x'@;
put 'LjE4LTUuNzNsMS40Ni0uNzlhMSwxLDAsMCwwLS45NS0xLjc2bC0zLDEuMjhIMTAuNzhMNy43LDExLjcyYTEsMSwwLDAsMC0uOTUsMS43NmwxLjUuOEExOS4zOCwxOS4zOCwwLDAsMCw3LjA3LDIwSDUuMTdhMSwxLDAsMCwwLDAsMkg3LjFhMTQuNjIsMTQuNjIsMCwwLDAsMS42Niw2LjE3TDYu'@;
put 'ODcsMjkuNDlBMSwxLDAsMSwwLDgsMzEuMTJsMS44NC0xLjI5QTEwLjI5LDEwLjI5LDAsMCwwLDE3LDMzLjZWMTVoMlYzMy42YTEwLjI5LDEwLjI5LDAsMCwwLDcuMTYtMy43NUwyOCwzMS4xMmExLDEsMCwxLDAsMS4xNS0xLjY0bC0xLjg2LTEuM0ExNC42MSwxNC42MSwwLDAsMCwyOC45NCwy'@;
put 'MmgxLjg5YTEsMSwwLDAsMCwwLTJaTTEwLjkxLDE3Ljc0YTEuOTUsMS45NSwwLDEsMSwxLjk1LDEuOTVBMS45NSwxLjk1LDAsMCwxLDEwLjkxLDE3Ljc0Wk0xNCwyNy40NmExLjU4LDEuNTgsMCwxLDEsMS41OC0xLjU4QTEuNTgsMS41OCwwLDAsMSwxNCwyNy40NlptOC40MywwQTEuNTgsMS41'@;
put 'OCwwLDEsMSwyNCwyNS44OCwxLjU4LDEuNTgsMCwwLDEsMjIuNDIsMjcuNDZabTEuMTMtNy43N2ExLjk1LDEuOTUsMCwxLDEsMS45NS0xLjk1QTEuOTUsMS45NSwwLDAsMSwyMy41NiwxOS42OVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTIiIGQ9Ik0xMS4yMyw1LjI2YTEuNjcsMS42NywwLDAsMCwuNTQtLjMyLDUuOSw1LjksMCwwLDEsLjg5LjU4LDcuNDQsNy40NCwwLDAsMSwuOTUuOTRBMTguNDgsMTguNDgsMCwwLDAsMTAuNzksOS43Yy0uNC41Ny4wOSwxLjI4Ljg2LDEuMjhIMjQuNDRjLjc3LDAsMS4yNi0uNzEuODYt'@;
put 'MS4yOGExOC4zOCwxOC4zOCwwLDAsMC0yLjg4LTMuMjgsNy4yOCw3LjI4LDAsMCwxLC45MS0uOSw1LjksNS45LDAsMCwxLC44OS0uNTgsMS42OSwxLjY5LDAsMSwwLS41Ni0xLjUxLDcuNDksNy40OSwwLDAsMC0xLjMyLjgzLDkuMDYsOS4wNiwwLDAsMC0xLjE5LDEuMThBNS44NSw1Ljg1LDAs'@;
put 'MCwwLDE4LDQuM2E1LjkxLDUuOTEsMCwwLDAtMy4xNywxLjE5LDkuMiw5LjIsMCwwLDAtMS4yMi0xLjIxLDcuNDksNy40OSwwLDAsMC0xLjMyLS44MywxLjY4LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLFIuQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAs'@;
put 'MCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSwwLDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0'@;
put 'bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxSLkNsclNoYXBlUGVuY2lsPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywy'@;
put 'My4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAsMCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYt'@;
put 'NiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQuMjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2'@;
put 'LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4zMmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNyww'@;
put 'LDAsMCwzMy44Miw4LjMyWiIvPicpLFIuQ2xyU2hhcGVOb3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0'@;
put 'Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAs'@;
put 'MCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVSZWZyZXNoPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDksMCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEu'@;
put 'NDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDExLjY1WiIvPicpLFIuQ2xyU2hhcGVTeW5jPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDguNywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSwwLDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAs'@;
put 'MCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCwwLDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksUi5DbHJTaGFwZVZpZXdM'@;
put 'aXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2'@;
put 'SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLFIuQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEs'@;
put 'NCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgz'@;
put 'MmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIs'@;
put 'MiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIs'@;
put 'MCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLFIuQ2xyU2hhcGVMaWdodGJ1bGI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuMjVhMTEsMTEsMCwwLDAtMTEsMTEsMTAuNjgsMTAuNjgsMCwwLDAsMSw0LjYzLDE2LjM2LDE2LjM2LDAsMCww'@;
put 'LDEuMTIsMS43OCwxNywxNywwLDAsMSwyLDMuNDcsMTYuMTksMTYuMTksMCwwLDEsLjU5LDRoMkExOC4xNywxOC4xNywwLDAsMCwxMywyMi40NGExOC40NiwxOC40NiwwLDAsMC0yLjIyLTMuOTIsMTUuNzksMTUuNzksMCwwLDEtMS0xLjU0QTguNjQsOC42NCwwLDAsMSw5LDEzLjIzYTksOSww'@;
put 'LDAsMSwxOC4wNywwQTguNjQsOC42NCwwLDAsMSwyNi4yMSwxN2ExNS43OSwxNS43OSwwLDAsMS0xLDEuNTRBMTguNDYsMTguNDYsMCwwLDAsMjMsMjIuNDRhMTguMTcsMTguMTcsMCwwLDAtLjcxLDQuNzFoMmExNi4xOSwxNi4xOSwwLDAsMSwuNTktNCwxNywxNywwLDAsMSwyLTMuNDdBMTYu'@;
put 'MzEsMTYuMzEsMCwwLDAsMjgsMTcuODZhMTAuNjgsMTAuNjgsMCwwLDAsMS00LjYzQTExLDExLDAsMCwwLDE4LDIuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjYzLDE1LjUxYS44LjgsMCwwLDAtMS4x'@;
put 'MywwbC0zLDMsMi44NiwzLjEzdjUuNTRIMTlWMjFsLTIuMjQtMi40NSwxLjg5LTEuODlBLjguOCwwLDAsMCwxOC42MywxNS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODYsMjkuMTVIMTIuMTFhLjgu'@;
put 'OCwwLDEsMCwwLDEuNkgyMy44NmEuOC44LDAsMCwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjMyLDEwLjg5bC0yLjczLDIuNzNhLjguOCwwLDAsMCwxLjEzLDEuMTNMMTguNDUsMTJhLjguOCwwLDEsMC0xLjEzLTEuMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDI3LjE1VjIxbC0yLjI0LTIuNDUsMS44OS0xLjg5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0zLDMsMi44NiwzLjEzdjUuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS43MiwxNC43NSwxOC40'@;
put 'NSwxMmEuOC44LDAsMSwwLTEuMTMtMS4xM2wtMi43MywyLjczYS44LjgsMCwwLDAsMS4xMywxLjEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTIuODhjMCwuMTIsMCwuMjMs'@;
put 'MCwuMzVBOC42NCw4LjY0LDAsMCwxLDI2LjIxLDE3YTE1Ljc5LDE1Ljc5LDAsMCwxLTEsMS41NEExOC40NiwxOC40NiwwLDAsMCwyMywyMi40NGExOC4xNywxOC4xNywwLDAsMC0uNzEsNC43MWgyYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4z'@;
put 'MSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy40NSw3LjQ1LDAsMCwxLDI3LDEyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNzEsMjcuMTVB'@;
put 'MTguMTcsMTguMTcsMCwwLDAsMTMsMjIuNDRhMTguNDYsMTguNDYsMCwwLDAtMi4yMi0zLjkyLDE1Ljc5LDE1Ljc5LDAsMCwxLTEtMS41NEE4LjY0LDguNjQsMCwwLDEsOSwxMy4yMyw5LDksMCwwLDEsMjIuNTMsNS40N2E3LjQ1LDcuNDUsMCwwLDEsLjQzLTIsMTEsMTEsMCwwLDAtMTYsOS44'@;
put 'LDEwLjY4LDEwLjY4LDAsMCwwLDEsNC42MywxNi4zNiwxNi4zNiwwLDAsMCwxLjEyLDEuNzgsMTcsMTcsMCwwLDEsMiwzLjQ3LDE2LjE5LDE2LjE5LDAsMCwxLC41OSw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjg2LDI5LjE1SDEyLjExYS44LjgsMCwxLDAsMCwx'@;
put 'LjZIMjMuODZhLjguOCwwLDAsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiwzMi4xNUgxNGEuOC44LDAsMSwwLDAsMS42SDIyYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMi4yNWExMSwxMSwwLDAsMC0xMSwxMSwxMC42OCwxMC42OCwwLDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1'@;
put 'LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42OCwxMC42OCwwLDAsMCwxLTQu'@;
put 'NjNBMTEsMTEsMCwwLDAsMTgsMi4yNVpNMTguNDUsMTJsLTIuNzMsMi43M2EuOC44LDAsMSwxLTEuMTMtMS4xM2wyLjczLTIuNzNBLjguOCwwLDEsMSwxOC40NSwxMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44'@;
put 'NiwyOS4xNUgxMi4xMWEuOC44LDAsMSwwLDAsMS42SDIzLjg2YS44LjgsMCwwLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDMyLjE1SDE0YS44LjgsMCwxLDAsMCwxLjZI'@;
put 'MjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2QTcuNDcsNy40NywwLDAsMSwyMywzLjQ0YTExLDExLDAsMCwwLTE2LDkuOCwxMC42OCwxMC42OCww'@;
put 'LDAsMCwxLDQuNjMsMTYuMzYsMTYuMzYsMCwwLDAsMS4xMiwxLjc4LDE3LDE3LDAsMCwxLDIsMy40NywxNi4xOSwxNi4xOSwwLDAsMSwuNTksNGg1LjY5VjIxLjYxbC0yLjg2LTMuMTMsMy0zYS44LjgsMCwwLDEsMS4xMywxLjEzbC0xLjg5LDEuODlMMTksMjF2Ni4xN0gyNC4zYTE2LjE5LDE2'@;
put 'LjE5LDAsMCwxLC41OS00LDE3LDE3LDAsMCwxLDItMy40N0ExNi4zMSwxNi4zMSwwLDAsMCwyOCwxNy44NmExMC42MywxMC42MywwLDAsMCwxLTQuNDNBNy41LDcuNSwwLDAsMSwyMi41LDZabS00LDYtMi43MywyLjczYS44LjgsMCwxLDEtMS4xMy0xLjEzbDIuNzMtMi43M0EuOC44LDAsMSwx'@;
put 'LDE4LjQ1LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiLz4nKSxSLkNsclNoYXBlRG93bmxvYWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDI5LjQ4LDI4LjYxLDE4Ljg3YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMjUuNjVWNWExLDEsMCwwLDAtMiwwVjI1LjY1TDguODEsMTcuNDZhMSwxLDAsMSwwLTEuNDEsMS40MVoiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMSwzMUg1YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xOCwyOS40OCwyOC42MSwxOC44N2ExLDEsMCwwLDAtMS40MS0xLjQxTDE5LDI1LjY1VjVhMSwxLDAsMCwwLTIsMFYyNS42NUw4LjgxLDE3LjQ2YTEsMSwwLDEsMC0xLjQxLDEuNDFaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMTgs'@;
put 'MjkuNDgsMjguNjEsMTguODdhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwyNS42NVY1YTEsMSwwLDAsMC0yLDBWMjUuNjVMOC44MSwxNy40NmExLDEsMCwxLDAtMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+JyksUi5DbHJT'@;
put 'aGFwZVVwbG9hZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTMxLDMxSDVjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMjZjMC42LDAsMS0wLjQsMS0xUzMxLjYsMzEsMzEsMzF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik04LjgsMTVMMTcsNi44djIwLjZjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMVY2LjhMMjAuMSw4bDEtMS44TDE4LDNMNy40LDEzLjZDNywxNCw2LjksMTQuNiw3LjIsMTVzMSwwLjUsMS40LDAu'@;
put 'MUM4LjcsMTUuMSw4LjgsMTUuMSw4LjgsMTV6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDEuMUwyMS4xLDExYy0wLjQsMC42LTAuMiwxLjQs'@;
put 'MC4zLDEuOGMwLjIsMC4yLDAuNSwwLjIsMC44LDAuMmgxMS41YzAuNywwLDEuMy0wLjUsMS4zLTEuMmMwLTAuMy0wLjEtMC41LTAuMi0wLjhsLTUuNy05LjljLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC44LDI3LDEsMjYuOSwxLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGgg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzEsMzFINWExLDEsMCwwLDAsMCwySDMxYTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNOC44MSwxNSwxNyw2LjgzVjI3LjQ4YTEsMSwwLDAsMCwyLDBWNi44M0wyNy4xOSwxNWExLDEsMCwwLDAsMS40MS0xLjQxTDE4LDMsNy4zOSwxMy42MUExLDEsMCwxLDAsOC44MSwxNVoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVMb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVW'@;
put 'MTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVaTTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAsMCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpN'@;
put 'MTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAsMSw2LDYuMzZaIi8+JyksUi5DbHJTaGFwZVVubG9jaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgs'@;
put 'OC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiww'@;
put 'LDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVoiLz4nKSxSLkNsclNoYXBlVXNlcnM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44LDIuMi00LjgsNC44QzEzLDE1LjEsMTUuMiwxNy4zLDE3LjksMTcuM3ogTTE3LjgsOS42QzE3LjksOS42LDE3LjksOS42LDE3Ljgs'@;
put 'OS42YzEuNiwwLDIuOSwxLjMsMi45LDIuOXMtMS4zLDIuOC0yLjksMi44Yy0xLjYsMC0yLjgtMS4zLTIuOC0yLjhDMTUsMTAuOSwxNi4zLDkuNiwxNy44LDkuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i'@;
put 'TTMyLjcsMTYuN2MtMS45LTEuNy00LjQtMi42LTctMi41Yy0wLjMsMC0wLjUsMC0wLjgsMGMtMC4yLDAuOC0wLjUsMS41LTAuOSwyLjFjMC42LTAuMSwxLjEtMC4xLDEuNy0wLjFjMS45LTAuMSwzLjgsMC41LDUuMywxLjZWMjVoMnYtOEwzMi43LDE2Ljd6Ii8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMy40LDcuOGMwLjUtMS4yLDEuOS0xLjgsMy4yLTEuM2MxLjIsMC41LDEuOCwxLjksMS4zLDMuMmMtMC40LDAuOS0xLjMsMS41LTIuMiwxLjVjLTAuMiwwLTAuNSwwLTAuNy0wLjFjMC4xLDAuNSww'@;
put 'LjEsMSwwLjEsMS40YzAsMC4yLDAsMC40LDAsMC42YzAuMiwwLDAuNCwwLjEsMC42LDAuMWMyLjUsMCw0LjUtMiw0LjUtNC40YzAtMi41LTItNC41LTQuNC00LjVjLTEuNiwwLTMsMC44LTMuOCwyLjJDMjIuNSw2LjgsMjMsNy4yLDIzLjQsNy44eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMTIsMTYuNGMtMC40LTAuNi0wLjctMS4zLTAuOS0yLjFjLTAuMywwLTAuNSwwLTAuOCwwYy0yLjYtMC4xLTUuMSwwLjgtNywyLjRMMywxN3Y4aDJ2LTcuMmMxLjYtMS4xLDMuNC0xLjcsNS4zLTEuNkMxMC45'@;
put 'LDE2LjIsMTEuNSwxNi4zLDEyLDE2LjR6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0xMC4zLDEzLjFjMC4yLDAsMC40LDAsMC42LTAuMWMwLTAuMiwwLTAuNCwwLTAuNmMwLTAuNSwwLTEsMC4xLTEuNGMt'@;
put 'MC4yLDAuMS0wLjUsMC4xLTAuNywwLjFjLTEuMywwLTIuNC0xLjEtMi40LTIuNGMwLTEuMywxLjEtMi40LDIuNC0yLjRjMSwwLDEuOSwwLjYsMi4zLDEuNWMwLjQtMC41LDEtMSwxLjUtMS40Yy0xLjMtMi4xLTQtMi44LTYuMS0xLjVjLTIuMSwxLjMtMi44LDQtMS41LDYuMUM3LjMsMTIuMyw4'@;
put 'LjcsMTMuMSwxMC4zLDEzLjF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0yNi4xLDIyLjdsLTAuMi0wLjNjLTItMi4yLTQuOC0zLjUtNy44LTMuNGMtMy0wLjEtNS45LDEuMi03LjksMy40TDEwLDIyLjd2'@;
put 'Ny42YzAsMC45LDAuNywxLjcsMS43LDEuN2MwLDAsMCwwLDAsMGgxMi44YzAuOSwwLDEuNy0wLjgsMS43LTEuN2MwLDAsMCwwLDAsMFYyMi43eiBNMjQuMSwzMEgxMnYtNi42YzEuNi0xLjYsMy44LTIuNCw2LjEtMi40YzIuMi0wLjEsNC40LDAuOCw2LDIuNFYzMHoiLz5cbiAgICAgICAgICAg'@;
put 'ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTExLjA5LDE0LjU3Yy4xLDAsLjIsMCwuMzEsMGE2LjQzLDYuNDMsMCwwLDEsLjA5LTIsMi4wOSwyLjA5LDAsMSwxLDEuNDctMyw2LjU4LDYuNTgsMCwwLDEs'@;
put 'MS41NS0xLjMxLDQuMDksNC4wOSwwLDEsMC0zLjQyLDYuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42'@;
put 'MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFhNyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMy0tYWxlcnRlZCIgZD0iTTMxLjM1LDE4LjQyQTguNTksOC41OSwwLDAsMCwyNSwxNS45MWMtLjMyLDAtLjYsMC0uOS4wNmE2LjUzLDYuNTMsMCwwLDEtMS4zNSwyLjI1QTcuOSw3LjksMCwwLDEsMjUsMTcuOTFhNi45NCw2Ljk0LDAsMCwxLDQuNjQsMS41OHY2LjI3aDJWMTguN1oiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgZD0iTTE4LjEsMTkuNzNBOS42OSw5LjY5LDAsMCwwLDExLDIyLjQ3bC0uMjUuMjh2Ny4zM2ExLjU3LDEuNTcsMCwwLDAsMS42MSwxLjU0SDIz'@;
put 'LjgzYTEuNTcsMS41NywwLDAsMCwxLjYxLTEuNTRWMjIuNzNsLS4yNS0uMjhBOS41OCw5LjU4LDAsMCwwLDE4LjEsMTkuNzNabTUuMzMsOS44OEgxMi43M1YyMy41NWE4LjA4LDguMDgsMCwwLDEsNS4zNy0xLjgyLDgsOCwwLDAsMSw1LjMzLDEuOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTIwLjI4LDE0LjI3YTIuNDYsMi40NiwwLDEsMS0yLjQyLTIuODksMi40NCwyLjQ0LDAsMCwxLDEsLjI0LDMuNjcsMy42NywwLDAsMSwuNDMtMiw0LjQxLDQuNDEsMCwwLDAt'@;
put 'MS40OC0uMjdBNC40Nyw0LjQ3LDAsMSwwLDIyLjE0LDE1LDMuNjksMy42OSwwLDAsMSwyMC4yOCwxNC4yN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i'@;
put 'TTI3LjE4LjhsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzRhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjM5LjhBMS4yOCwxLjI4LDAsMCwwLDI3LjE4LjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTEuMDksMTQuNTdjLjEsMCwuMiwwLC4zMSwwYTYuNDMsNi40MywwLDAsMSwuMDktMiwyLjA5LDIuMDksMCwxLDEsMS40Ny0zLDYuNTgsNi41OCwwLDAsMSwxLjU1LTEuMzEsNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0xMywxOC4xNGE2LjUzLDYuNTMsMCwwLDEtMS4yOC0yLjJsLS42MywwYTguNjcsOC42NywwLDAsMC02LjQzLDIuNTJsLS4yNC4yOHY3aDJWMTkuNTFh'@;
put 'Nyw3LDAsMCwxLDQuNjctMS42QTguMDksOC4wOSwwLDAsMSwxMywxOC4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMS4zNSwxOC40MkE4LjU5LDguNTksMCwwLDAsMjUs'@;
put 'MTUuOTFjLS4zMiwwLS42LDAtLjkuMDZhNi41Myw2LjUzLDAsMCwxLTEuMzUsMi4yNUE3LjksNy45LDAsMCwxLDI1LDE3LjkxYTYuOTQsNi45NCwwLDAsMSw0LjY0LDEuNTh2Ni4yN2gyVjE4LjdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiBkPSJNMTcuODYsMTguM2E0LjQ3LDQuNDcsMCwxLDAtNC40Ny00LjQ3QTQuNDcsNC40NywwLDAsMCwxNy44NiwxOC4zWm0wLTYuOTNhMi40NywyLjQ3LDAsMSwxLTIuNDcsMi40N0EyLjQ3LDIuNDcsMCwwLDEsMTcuODYsMTEuMzdaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMSwxOS43M0E5LjY5LDkuNjksMCwwLDAsMTEsMjIuNDdsLS4yNS4yOHY3LjMzYTEuNTcsMS41NywwLDAsMCwxLjYxLDEuNTRIMjMu'@;
put 'ODNhMS41NywxLjU3LDAsMCwwLDEuNjEtMS41NFYyMi43M2wtLjI1LS4yOEE5LjU4LDkuNTgsMCwwLDAsMTguMSwxOS43M1ptNS4zMyw5Ljg4SDEyLjczVjIzLjU1YTguMDgsOC4wOCwwLDAsMSw1LjM3LTEuODIsOCw4LDAsMCwxLDUuMzMsMS44WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTI2LjM3LDEyYTIsMiwwLDAsMS0yLjA5LjQyLDYuNTMsNi41MywwLDAsMSwuMTUsMS4zOCw2LjU5LDYuNTksMCwwLDEsMCwuNjgsNCw0LDAsMCwwLC41Ny4wNiw0LjA4LDQuMDgs'@;
put 'MCwwLDAsMy4zLTEuN0E3LjQ1LDcuNDUsMCwwLDEsMjYuMzcsMTJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiBkPSJNMjIuOTUsNi45M2E0LjE2LDQuMTYsMCwwLDAtMS40NywxLjQ0'@;
put 'QTYuNTksNi41OSwwLDAsMSwyMyw5Ljc3YTIuMSwyLjEsMCwwLDEsLjU5LS44M0E3LjQ0LDcuNDQsMCwwLDEsMjIuOTUsNi45M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHIt'@;
put 'aS1iYWRnZSIgY3g9IjMwLjMzIiBjeT0iNS42NyIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhI'@;
put 'OC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42Nyww'@;
put 'LDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBhNi40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQi'@;
put 'IGQ9Ik0yNC40MywxMy40NGE2LjU0LDYuNTQsMCwwLDEsMCwuNjksNC4wOSw0LjA5LDAsMCwwLC41OC4wNWguMTlBNC4wOSw0LjA5LDAsMSwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtNSIgY3g9IjE3Ljg3IiBjeT0iMTMuNDUiIHI9IjQuNDciLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMz'@;
put 'YTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMiwxNi4xNHEtLjQzLDAtLjg3LDBhOC42Nyw4LjY3LDAsMCwwLTYuNDMsMi41MmwtLjI0LjI4djguMjhIOC41NHYtNC43bC41NS0uNjIuMjUtLjI5YTExLDExLDAsMCwxLDQuNzEtMi44NkE2LjU5LDYuNTksMCwwLDEsMTIsMTYuMTRaIi8+XG4gICAgICAg'@;
put 'ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEw'@;
put 'LjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0xMS4xLDE0LjE5Yy4xMSwwLC4yLDAsLjMxLDBh'@;
put 'Ni40NSw2LjQ1LDAsMCwxLDMuMTEtNi4yOSw0LjA5LDQuMDksMCwxLDAtMy40Miw2LjMzWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xOC4xMSwyMC4zQTkuNjksOS42OSwwLDAs'@;
put 'MCwxMSwyM2wtLjI1LjI4djYuMzNhMS41NywxLjU3LDAsMCwwLDEuNiwxLjU0SDIzLjg0YTEuNTcsMS41NywwLDAsMCwxLjYtMS41NFYyMy4zTDI1LjIsMjNBOS41OCw5LjU4LDAsMCwwLDE4LjExLDIwLjNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTE3Ljg3LDE3LjkyYTQuNDYsNC40NiwwLDAsMCw0LTIuNTRBMy42NywzLjY3LDAsMCwxLDE5LDkuODlsLjM1LS42MUE0LjQyLDQuNDIsMCwwLDAsMTcuODcsOWE0LjQ3LDQuNDcsMCwxLDAsMCw4LjkzWiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFM'@;
put 'MjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTEyLDE2LjE0cS0uNDMsMC0uODcsMGE4LjY3LDguNjcsMCwwLDAtNi40'@;
put 'MywyLjUybC0uMjQuMjh2OC4yOEg4LjU0di00LjdsLjU1LS42Mi4yNS0uMjlhMTEsMTEsMCwwLDEsNC43MS0yLjg2QTYuNTgsNi41OCwwLDAsMSwxMiwxNi4xNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt'@;
put 'LWJhZGdlZCIgZD0iTTMxLjM0LDE4LjYzYTguNjcsOC42NywwLDAsMC02LjQzLTIuNTIsMTAuNDcsMTAuNDcsMCwwLDAtMS4wOS4wNiw2LjU5LDYuNTksMCwwLDEtMiwyLjQ1LDEwLjkxLDEwLjkxLDAsMCwxLDUsM2wuMjUuMjguNTQuNjJ2NC43MWgzLjk0VjE4LjkxWiIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMTEuMSwxNC4xOWMuMTEsMCwuMiwwLC4zMSwwYTYuNDUsNi40NSwwLDAsMSwzLjExLTYuMjksNC4wOSw0LjA5LDAsMSwwLTMuNDIsNi4zM1oiLz5cbiAgICAgICAg'@;
put 'ICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiBjeD0iMTcuODciIGN5PSIxMy40NSIgcj0iNC40NyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtNS0tYmFkZ2VkIiBkPSJNMTguMTEsMjAuM0E5LjY5LDkuNjksMCwwLDAsMTEsMjNsLS4yNS4yOHY2LjMzYTEuNTcsMS41NywwLDAsMCwxLjYsMS41NEgyMy44NGExLjU3LDEuNTcsMCwwLDAsMS42LTEuNTRWMjMuM0wyNS4yLDIzQTkuNTgsOS41OCwwLDAsMCwxOC4xMSwyMC4zWiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNi0tYmFkZ2VkIiBkPSJNMjQuNDMsMTMuNDRhNi41NCw2LjU0LDAsMCwxLDAsLjY5LDQuMDksNC4wOSwwLDAsMCwuNTguMDVoLjE5YTQuMDUsNC4wNSwwLDAsMCwyLjUy'@;
put 'LTEsNy41LDcuNSwwLDAsMS01LjE0LTYuMzJBNC4xMyw0LjEzLDAsMCwwLDIxLjQ3LDgsNi41Myw2LjUzLDAsMCwxLDI0LjQzLDEzLjQ0WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxSLkNsclNoYXBlUG9wT3V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5'@;
put 'SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwz'@;
put 'MSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxSLkNsclNoYXBlRmlsdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUz'@;
put 'LDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAg'@;
put 'ICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4y'@;
put 'N0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywxLjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41'@;
put 'MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZVBpbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEs'@;
put 'MSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0x'@;
put 'LjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAsMCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAs'@;
put 'MCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEuNDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwxLjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43'@;
put 'MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksUi5DbHJTaGFwZUZpbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44'@;
put 'OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJabS0uMywyLjQ5LDYsNS45aC02Wk04LDMwVjZIMjB2OGg4VjMwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTIxLjU5LDEyLjM5VjYuNDlsMS4wNywxYTcuMzEsNy4zMSwwLDAsMSwwLTIuODJMMjEuODksNEg3LjgzQTEuODgsMS44OCwwLDAsMCw2LDUuOTFWMzAuMDlBMS44OCwxLjg4LDAsMCwwLDcuODMsMzJIMjgu'@;
put 'MTdBMS44OCwxLjg4LDAsMCwwLDMwLDMwLjA5VjEzLjVhNy40NSw3LjQ1LDAsMCwxLTMuOTEtMS4xMVpNMjgsMzBIOFY2SDIwdjhoOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBj'@;
put 'bHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMjgsMTUuNFYzMEg4VjZIMjBWOC4yNWwyLjI1LTMuOUwyMS44OSw0SDcu'@;
put 'ODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMS44OSw0SDcuODNBMS44OCwxLjg4LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTEuOTJaTTIxLDEzVjUuODRM'@;
put 'MjguMywxM1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI3LjI1LDEzSDIxVjUuODRsMS42NCwxLjZhNy4yNSw3LjI1LDAsMCwxLDAtMi43NEwyMS44OSw0SDcuODNBMS44OCwxLjg4'@;
put 'LDAsMCwwLDYsNS45MVYzMC4wOUExLjg4LDEuODgsMCwwLDAsNy44MywzMkgyOC4xN0ExLjg4LDEuODgsMCwwLDAsMzAsMzAuMDlWMTMuNUE3LjQ3LDcuNDcsMCwwLDEsMjcuMjUsMTNaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yMi4yLDE1LjRjLTIsMC0zLjctMS42'@;
put 'LTMuNy0zLjZjMC0wLjcsMC4yLTEuMywwLjUtMS45bDMuMi01LjVMMjEuOSw0SDcuOEM2LjgsNCw2LDQuOSw2LDUuOXYyNC4yYzAsMSwwLjgsMS45LDEuOCwxLjloMjAuM2MxLDAsMS44LTAuOSwxLjgtMS45VjE1LjRIMjIuMnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4x'@;
put 'LTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLFIuQ2xyU2hhcGVQbHVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAs'@;
put 'MTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEsMCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxSLkNsclNoYXBlTWludXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwx'@;
put 'NiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAs'@;
put 'MC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCww'@;
put 'LDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwx'@;
put 'NCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThBMTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBW'@;
put 'MTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFIuQ2xyU2hhcGVCYW49KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVM'@;
put 'OC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLFIuQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40'@;
put 'MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJsLTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2'@;
put 'LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLFIuQ2xyU2hhcGVUcmFzaD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYs'@;
put 'MzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBk'@;
put 'PSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAg'@;
put 'ICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0y'@;
put 'Myw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gy'@;
put 'Ny4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAs'@;
put 'MCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxSLkNsclNoYXBlVGFnPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIsMiwwLDAsMCwzMS45MywxOS4y'@;
put 'Wk0yMC42MiwzMC41Miw2LDE1LjkxVjZoOS45MmwxNC42LDE0LjYyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVy'@;
put 'dGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMmwtMy44LTMuOEgyNS4zMWw1LjIyLDUuMjItOS45LDkuOUw2LDE1LjkxVjZoOS45MmwzLjQxLDMuNDEsMS0xLjc4LTMtM0EyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwy'@;
put 'LDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjEwLjUyIiBjeT0iMTAuNTIiIHI9IjEuNDMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMxLjkzLDE5LjIsMTcuMzMsNC42QTIsMiwwLDAsMCwxNS45Miw0TDYsNEEyLDIsMCwwLDAsNCw2bDAsOS45MmEyLDIsMCwwLDAsLjU5LDEuNDFsMTQuNiwxNC42YTIsMiwwLDAsMCwyLjgzLDBsOS45LTkuOUEyLDIsMCwwLDAsMzEuOTMsMTkuMlpNMjAuNjIsMzAuNTIs'@;
put 'NiwxNS45MVY2aDkuOTJsMTQuNiwxNC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS45MywxOS4yLDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAs'@;
put 'Mi44MywwbDkuOS05LjlBMiwyLDAsMCwwLDMxLjkzLDE5LjJaTTkuNjUsMTEuMzFhMS42NiwxLjY2LDAsMSwxLDEuNjYtMS42NkExLjY2LDEuNjYsMCwwLDEsOS42NSwxMS4zMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0yOC40NiwxNS43M0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksMTAuMjJsMS40My0yLjQ3TDE3LjMzLDQuNkEyLDIsMCwwLDAsMTUuOTIsNEw2LDRBMiwyLDAsMCwwLDQsNmwwLDkuOTJhMiwyLDAsMCwwLC41OSwxLjQxbDE0LjYsMTQuNmEyLDIsMCwwLDAsMi44MywwbDkuOS05LjlhMiwy'@;
put 'LDAsMCwwLDAtMi44M1pNOS42NSwxMS4zMWExLjY2LDEuNjYsMCwxLDEsMS42Ni0xLjY2QTEuNjYsMS42NiwwLDAsMSw5LjY1LDExLjMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2'@;
put 'Ljg1LDEuNDdsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuNDdBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuNDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuOTMsMTkuMiwxNy4zMyw0LjZBMiwyLDAsMCwwLDE1LjkyLDRMNiw0QTIsMiwwLDAsMCw0LDZsMCw5LjkyYTIsMiwwLDAsMCwuNTksMS40MWwxNC42LDE0LjZhMiwyLDAsMCwwLDIuODMsMGw5LjktOS45QTIs'@;
put 'MiwwLDAsMCwzMS45MywxOS4yWk05LjY1LDExLjMxYTEuNjYsMS42NiwwLDEsMSwxLjY2LTEuNjZBMS42NiwxLjY2LDAsMCwxLDkuNjUsMTEuMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj'@;
put 'eD0iMzAiIGN5PSI2LjMzIiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFIuQ2xyU2hhcGVUYWdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIs'@;
put 'MS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45'@;
put 'MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZMMTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTE3LjI2LDI5LjY5LDMuNjksMTYuMTVWN2g5LjFMMjYuMzcsMjAuNDhaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0yNy43OCwxOS4xNywxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2LjkzdjkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFB'@;
put 'MS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk0xNy4yNiwyOS42OSwzLjY5LDE2LjE1VjdoOS4xTDI2LjM3LDIwLjQ4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTku'@;
put 'MTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNy44'@;
put 'MSIgY3k9IjExLjE0IiByPSIxLjMzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNBMy42NSwzLjY1LDAsMCwxLDIxLDE1LjE5bDUuMzMs'@;
put 'NS4yOS05LjExLDkuMjFMMy42OSwxNi4xNVY3aDkuMWw2LDUuOTRhMy42OCwzLjY4LDAsMCwxLC4xLTIuNjlMMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEuOTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwz'@;
put 'MS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuODMsNi44LDE5'@;
put 'LjU4LDUuNTVBMS45MiwxLjkyLDAsMCwwLDE4LjIxLDVIMTYuMTJMMTkuNzksOC42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywyOS40MywxNS40SDI2LjY1'@;
put 'bDUuMSw1TDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2'@;
put 'Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUt'@;
put 'LWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45'@;
put 'MywwLDAsMCwwLTIuNzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuNzgsMTkuMTcsMTQuMiw1LjU4QTEuOTIsMS45MiwwLDAsMCwxMi44Myw1SDMuNjFBMS45MywxLjkzLDAsMCwwLDEuNjgsNi45M3Y5LjIyYTEu'@;
put 'OTIsMS45MiwwLDAsMCwuNTcsMS4zNkwxNS44NCwzMS4xYTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxQTEuOTMsMS45MywwLDAsMCwyNy43OCwxOS4xN1pNNi42NywxMS43MkExLjczLDEuNzMsMCwxLDEsOC40LDEwLDEuNzMsMS43MywwLDAsMSw2LjY3LDExLjcyWiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDE0LjIsNS41OEExLjkyLDEuOTIsMCwwLDAsMTIuODMsNUgzLjYxQTEuOTMsMS45MywwLDAsMCwxLjY4LDYuOTN2OS4yMmExLjkyLDEuOTIsMCwwLDAsLjU3LDEuMzZM'@;
put 'MTUuODQsMzEuMWExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMUExLjkzLDEuOTMsMCwwLDAsMjcuNzgsMTkuMTdaTTYuNjcsMTEuNzJBMS43MywxLjczLDAsMSwxLDguNCwxMCwxLjczLDEuNzMsMCwwLDEsNi42NywxMS43MloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwzMS43NSwyMC40NSwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkz'@;
put 'LDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0z'@;
put 'LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMC44Myw2LjgsMTkuNTgsNS41NUExLjkyLDEuOTIsMCwwLDAsMTguMjEsNUgxNi4xMkwxOS43OSw4LjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVk'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTYsMTkuMTMsMjkuNDMsMTUuNEgyNi42NWw1LjEsNUwyMS4yMiwzMS4wN2ExLjkzLDEuOTMsMCwwLDAsMi43MywwbDkuMjEtOS4yMWExLjkzLDEuOTMsMCwwLDAsMC0yLjczWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3Ljc4LDE5LjE3LDI0LDE1LjRIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuMzYtNS4xNUwxNC4yLDUuNThBMS45MiwxLjkyLDAsMCwwLDEyLjgzLDVIMy42MUExLjkzLDEuOTMsMCwwLDAsMS42OCw2Ljkz'@;
put 'djkuMjJhMS45MiwxLjkyLDAsMCwwLC41NywxLjM2TDE1Ljg0LDMxLjFhMS45MywxLjkzLDAsMCwwLDIuNzMsMGw5LjIxLTkuMjFBMS45MywxLjkzLDAsMCwwLDI3Ljc4LDE5LjE3Wk02LjY3LDExLjcyQTEuNzMsMS43MywwLDEsMSw4LjQsMTAsMS43MywxLjczLDAsMCwxLDYuNjcsMTEuNzJa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2'@;
put 'LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+JyksUi5DbHJTaGFwZUhpc3Rvcnk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwx'@;
put 'LDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCww'@;
put 'LDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksUi5D'@;
put 'bHJTaGFwZUNsb2NrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjkyLDE4LjRWMTAuNzVhMSwxLDAsMCwwLTIsMHY4LjcybDUuOSw0YTEsMSwwLDEsMCwxLjExLTEuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTgsMTcu'@;
put 'OTRBOS45NCw5Ljk0LDAsMCwxLDIzLjQxLDkuNTlsLjg1LTEuMzZhMTEuNTUsMTEuNTUsMCwxLDAtOC41MywyMUwxNiwyNy43QTEwLDEwLDAsMCwxLDgsMTcuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4'@;
put 'LjkyLDEwLjc1YTEsMSwwLDAsMC0yLDB2OC43Mmw1LjksNGExLDEsMCwxLDAsMS4xMS0xLjY2bC01LTMuMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ0'@;
put 'LDcuNDQsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw2LjM4YTExLjU2LDExLjU2LDAsMCwwLTIuMjcsMjIuODlMMTYsMjcuN2ExMCwxMCwwLDEsMSw3LjM5LTE4LjFoMGE3LjQ1LDcuNDUsMCwwLDEtLjc4LTIuMjNBMTEuNDUsMTEuNDUsMCwwLDAsMTgsNi4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1i'@;
put 'YWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0xOC45MiwxMC43NWExLDEsMCwwLDAtMiwwdjguNzJsNS45LDRhMSwxLDAsMSwwLDEuMTEtMS42NmwtNS0zLjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0z'@;
put 'My43NywxNS4zOWgtMkExNCwxNCwwLDEsMSwyMi4wOSw0LjYxbDEtMS43NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTgsOGE5LjgxLDkuODEsMCwwLDEsMiwuMjNsLjg1LTEuNDZhMTEuNTUsMTEuNTUsMCwxLDAtNS4xMywyMi41MkwxNiwyNy43QTEwLDEwLDAsMCwxLDE4LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTYuMiwyMS4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIs'@;
put 'MFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFpNMjMuODUsOC4yM2ExMS4zOSwxMS4zOSwwLDEsMC04LjU0LDIwLjgzTDE1LDMwLjYzYTEzLDEzLDAsMSwxLDkuNy0yMy43N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMy4xMiwxMi44MUE3LjQ4LDcuNDgsMCwwLDEsMjIuNjgsNy42MywxMS4yNCwxMS4yNCwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgxLDEyLjgxLDAsMCwxLDQuNTEuODIsNy40Niw3LjQ2LDAs'@;
put 'MCwxLC42OC0yLjk0LDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1pNMjQuMiwyMy4xOGExLDEsMCwwLDEtMS4zOS4yOGwtNS45LTRWMTAuNzVhMSwxLDAsMCwxLDIsMFYxOC40bDUsMy4zOUExLDEsMCwwLDEsMjQuMiwyMy4xOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzcs'@;
put 'MTUuMzlIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2YzAtLjA5LS4wOS0uMTgtLjEzLS4yN1YxOC40bDUsMy4zOWExLDEsMCwwLDEtMS4xMSwxLjY2bC01LjktNFYxMC43NWExLDEsMCwwLDEsMS45MS0uNDFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMjAuNzQsN0ExMS4xOSwxMS4x'@;
put 'OSwwLDAsMCwxOCw2LjZhMTEuMzksMTEuMzksMCwwLDAtMi42OSwyMi40N0wxNSwzMC42M0ExMywxMywwLDAsMSwxOCw1YTEyLjgsMTIuOCwwLDAsMSwzLjU3LjUxbDEuNTMtMi42NkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwzMy43NywxNS4zOVoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCww'@;
put 'LDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxSLkNsclNoYXBlQWxhcm1DbG9jaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDcsMy44NGE1Ljc4LDUuNzgsMCwwLDAt'@;
put 'Ny4zNy0uNjMsMTYuMDgsMTYuMDgsMCwwLDEsOC4yLDcuNjVBNS43Myw1LjczLDAsMCwwLDMxLjQ3LDMuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQu'@;
put 'NDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQsNC4wOUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYs'@;
put 'MzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTYuNCw0LjA5Wk0xOS41OCwyOS45QTEyLDEyLDAsMSwxLDI5LjkyLDE5LjU2LDEyLDEyLDAs'@;
put 'MCwxLDE5LjU4LDI5LjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjkyLDIwLjM0bC02LjA2LTNWOS41YS45LjksMCwwLDAtMS44LDB2OUwyNC4xMiwyMmEuOS45LDAsMSwwLC43OS0xLjYyWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS40MiwzLjQzYTUuNzcsNS43NywwLDAsMC03LjY0LjQxLDUuNzIsNS43MiwwLDAsMC0uMzgsNy42NEExNi4wOCwxNi4wOCwwLDAsMSwxMS40MiwzLjQzWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC44Niw5LjVhLjkuOSwwLDAsMC0xLjgsMHY5TDI0LjEyLDIyYS45LjksMCwxLDAsLjc5LTEuNjJsLTYuMDYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNGgtMmExMi4wNywxMi4wNywwLDEsMS04LjY3LTlsMS0xLjhhMTQsMTQsMCwwLDAtMTQsMjMuMjdMNS41NiwzMC40'@;
put 'M0ExLDEsMCwxLDAsNywzMS44NGwyLjY2LTIuNjZhMTMuOSwxMy45LDAsMCwwLDE2Ljg4LS4wOGwyLjc0LDIuNzRhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhBMTMuODgsMTMuODgsMCwwLDAsMzEuNzcsMTUuNEgyMi4yM0EzLjY5LDMuNjksMCwwLDEsMTksMTMuNTZMMTksMTMuNHYzLjc4TDI1LDIwLjFhMSwxLDAsMSwx'@;
put 'LS44NywxLjhMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwVjEwTDE5LDkuODlsMy01LjI4YTE0LDE0LDAsMCwwLTE0LDIzLjI3TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSwwLDAsMCwxLjQx'@;
put 'LTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx'@;
put 'TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42'@;
put 'NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCww'@;
put 'LDAsMy4yMS0xNC4zOUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2YTcuNTIsNy41MiwwLDAsMSwuMTEtMS4yMUExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0YTEsMSww'@;
put 'LDAsMCwxLjQxLTEuNDFabS0yLjUyLTYuMzVhMSwxLDAsMCwxLTEuMzMuNDdMMTcsMTguNDRWOS42OWExLDEsMCwwLDEsMiwwdjcuNUwyNSwyMC4xQTEsMSwwLDAsMSwyNS40OSwyMS40M1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+'@;
put 'XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuNDIsMy40M2E1Ljc3LDUuNzcsMCwwLDAtNy42'@;
put 'NC40MSw1LjcyLDUuNzIsMCwwLDAtLjM4LDcuNjRBMTYuMDgsMTYuMDgsMCwwLDEsMTEuNDIsMy40M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg2LDkuNWEuOS45LDAsMCww'@;
put 'LTEuOCwwdjlMMjQuMTIsMjJhLjkuOSwwLDEsMCwuNzktMS42MmwtNi4wNi0zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMjcuNzhhMTMuODksMTMuODksMCwwLDAsMy4yMS0x'@;
put 'NC4zOSw3LDcsMCwwLDEtMi4xMS4wNUExMiwxMiwwLDEsMSwyMi41Niw2LjksNy41NCw3LjU0LDAsMCwxLDIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjExLTEuMjFBMTQsMTQsMCwwLDAsOC4xMSwyNy44OEw1LjU2LDMwLjQzQTEsMSwwLDEsMCw3LDMxLjg0bDIuNjYtMi42NmExMy45LDEzLjks'@;
put 'MCwwLDAsMTYuODgtLjA4bDIuNzQsMi43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2LjA4LDAsMCwxLDguMiw3LjY1QTUuNzMsNS43MywwLDAsMCwzMS40'@;
put 'NywzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjQyLDMuNDNhNS43Nyw1Ljc3LDAsMCwwLTcuNjQuNDEsNS43Miw1LjcyLDAsMCwwLS4zOCw3LjY0QTE2LjA4LDE2LjA4LDAsMCwxLDExLjQyLDMuNDNaIiBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsNEExNCwxNCwwLDAsMCw4LjExLDI3Ljg4TDUuNTYsMzAuNDNBMSwxLDAsMSwwLDcsMzEuODRsMi42Ni0yLjY2YTEzLjksMTMuOSwwLDAsMCwxNi44OC0uMDhsMi43NCwyLjc0'@;
put 'YTEsMSwwLDAsMCwxLjQxLTEuNDFMMjgsMjcuNzhBMTQsMTQsMCwwLDAsMTgsNFptNy40NywxNy40M2ExLDEsMCwwLDEtMS4zMy40N0wxNywxOC40NFY5LjY5YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMyIvPicpLFIuQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEuNDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2'@;
put 'LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksUi5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGgg'@;
put 'ZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCwwLDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMx'@;
put 'LDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZUNvcHk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSww'@;
put 'LDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAs'@;
put 'MCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0'@;
put 'LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxSLkNsclNoYXBlSGVscD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4yOSw4LjkyYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0u'@;
put 'MjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1YzMtLjQyLDUuNDMt'@;
put 'Miw1LjQzLTUuMjh2LS4wNUMyNC4xOCwxMS4xMiwyMS44NCw4LjkyLDE4LjI5LDguOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuNzgiIGN5PSIyNi4yIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgsNy4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAs'@;
put 'MCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44LjgsMCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIx'@;
put 'Ljc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNy43OCIgY3k9IjI2LjIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDMsNy40MywwLDAsMS0xLjkxLjU4LDE0LjA1LDE0LjA1LDAsMSwxLTguNi04LjYsNy40NCw3LjQ0LDAsMCwxLC41OC0xLjkxLDE2LjA2LDE2LjA2LDAs'@;
put 'MSwwLDkuOTMsOS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3LjQ5LDcuNDksMCwwLDEtOS45My05LjkzLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M1ptLTE1LjM0LDE1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAs'@;
put 'MCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEuMzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44'@;
put 'My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4x'@;
put 'NSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNs'@;
put 'ci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0tLjIyLDI1Ljg1YTEuNjUsMS42NSwwLDEsMSwxLjY1LTEuNjVBMS42NSwxLjY1LDAsMCwxLDE3Ljc4LDI3Ljg1Wm0xLjM3LTguMDZ2MS43MmExLjM3LDEu'@;
put 'MzcsMCwwLDEtMS4zLDEuMzZoLS4xMWExLjM0LDEuMzQsMCwwLDEtMS4zOS0xLjNjMC0uNDQsMC0yLjc2LDAtMi43NmExLjE5LDEuMTksMCwwLDEsMS4xMi0xLjMxYzEuNTctLjEyLDQuMTgtLjcsNC4xOC0zLjI1LDAtMS44My0xLjQxLTMuMDctMy40My0zLjA3YTUuMzEsNS4zMSwwLDAsMC00'@;
put 'LDEuOTIsMS4zNiwxLjM2LDAsMCwxLTIuMzUtLjksMS40MywxLjQzLDAsMCwxLC40My0xLDcuNzcsNy43NywwLDAsMSw2LTIuNjljMy43LDAsNi4yOCwyLjMsNi4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTEiLz4nKSxSLkNsclNoYXBlTG9naW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYyMC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFI'@;
put 'MTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEt'@;
put 'MS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEs'@;
put 'MCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVMb2dvdXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJI'@;
put 'MjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgx'@;
put 'NC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAs'@;
put 'Mi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMs'@;
put 'MjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxSLkNsclNoYXBlUHJpbnRlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCww'@;
put 'LDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5Wk0yNSw5SDExVjdIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDE4SDhhMSwxLDAsMCwwLDAsMkg5VjMySDI3VjIwaDFhMSwxLDAsMCwwLDAtMlpNMjUsMzBIMTFWMjBIMjVaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDIyLjA5IDI5LjA4IDIyLjA5IDI5LjA4IDI0IDMzIDI0IDMzIDE1LjQgMzEgMTUuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik01LDEzYTIsMiwwLDAsMSwyLTJIMTguNjRBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTQsOUgxMVY3aDkuNzFsMS4xMy0ySDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4w'@;
put 'OUg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs'@;
put 'MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMThIOGExLDEsMCwwLDAsMCwySDlW'@;
put 'MzJIMjdWMjBoMWExLDEsMCwwLDAsMC0yWk0yNSwzMEgxMVYyMEgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjEzLjA0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxMi44OGE3LjQ1LDcuNDUsMCwwLDEtMiwuNTV2OC42NkgyOS4wOFYyNEgzM1YxM0MzMywxMywzMywxMi45MywzMywxMi44OFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTNhMiwyLDAsMCwxLDItMkgyNC40MmE3LjUsNy41LDAsMCwxLTEuMjctMkgxMVY3SDIyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjU0LDcuNTQs'@;
put 'MCwwLDEsLjA3LTFIOVY5SDdhNCw0LDAsMCwwLTQsNFYyNEg2LjkyVjIyLjA5SDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZWMTNBNCw0LDAsMCwwLDI5LDlaTTI1LDI0djZIMTFWMTlIMjVa'@;
put 'TTI1LDlIMTFWN0gyNVptNCw2SDI3VjEzaDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwxOS41NCw5SDExVjdoOS43MWwxLjEzLTJIOVY5SDdhNCw0LDAs'@;
put 'MCwwLTQsNFYyNEg5djhIMjdWMjRoNlYxNS40Wk0yNSwyNHY2SDExVjE5SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCww'@;
put 'LDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMzLDEyLjg4YTcuMyw3LjMsMCwwLDEtNCwuNTVWMTVIMjdWMTNoLjMyYTcuNTIsNy41MiwwLDAsMS00LjE4LTRIMTFWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41NCw3LjU0LDAsMCwxLC4wNy0xSDlWOUg3YTQsNCwwLDAsMC00LDRWMjRIOXY4SDI3VjI0aDZW'@;
put 'MTNDMzMsMTMsMzMsMTIuOTMsMzMsMTIuODhaTTI1LDI0djZIMTFWMTlIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLFIuQ2xyU2hhcGVXb3JsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYuNTQsMThhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLTRoMy42YTEyLjMsMTIuMywwLDAsMC0uNjctMS42SDI1LjY5QTE5'@;
put 'LjcyLDE5LjcyLDAsMCwwLDIyLjgsNi41M2ExMi4zLDEyLjMsMCwwLDAtMi41NS0uNzYsMTcuODMsMTcuODMsMCwwLDEsMy44OSw2LjU5SDE4Ljc1VjUuNmMtLjI1LDAtLjUxLDAtLjc3LDBzLS40OSwwLS43MywwdjYuNzdIMTEuODZhMTcuODMsMTcuODMsMCwwLDEsMy45LTYuNiwxMi4yOCwx'@;
put 'Mi4yOCwwLDAsMC0yLjU0Ljc1LDE5LjcyLDE5LjcyLDAsMCwwLTIuOTEsNS44NUg2Ljk0QTEyLjMsMTIuMywwLDAsMCw2LjI2LDE0SDkuODlhMTkuMzgsMTkuMzgsMCwwLDAtLjQzLDQsMTkuNjcsMTkuNjcsMCwwLDAsLjUsNC4zN0g2LjQyQTEyLjM0LDEyLjM0LDAsMCwwLDcuMTYsMjRoMy4y'@;
put 'M2ExOS4zMiwxOS4zMiwwLDAsMCwyLjY5LDUuMzYsMTIuMjgsMTIuMjgsMCwwLDAsMi42MS43OUExNy45MSwxNy45MSwwLDAsMSwxMiwyNGg1LjI2djYuMzRjLjI0LDAsLjQ5LDAsLjczLDBzLjUxLDAsLjc3LDBWMjRIMjRhMTcuOSwxNy45LDAsMCwxLTMuNyw2LjE1LDEyLjI4LDEyLjI4LDAs'@;
put 'MCwwLDIuNjItLjgxQTE5LjMyLDE5LjMyLDAsMCwwLDI1LjYxLDI0aDMuMmExMi4zNCwxMi4zNCwwLDAsMCwuNzQtMS42SDI2QTE5LjY3LDE5LjY3LDAsMCwwLDI2LjU0LDE4Wm0tOS4yOSw0LjM3SDExLjUxYTE3LjY5LDE3LjY5LDAsMCwxLS4wOS04LjRoNS44M1ptNy4yNCwwSDE4Ljc1VjE0'@;
put 'aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMTgsMTguMTIsMTguMTIsMCwwLDEsMjQuNDksMjIuMzdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAs'@;
put 'MTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuMTIsMTIuODFhNy40NCw3LjQ0LDAsMCwxLTEuOTEuNTgsMTQuMDUsMTQuMDUs'@;
put 'MCwxLDEtOC42LTguNiw3LjQzLDcuNDMsMCwwLDEsLjU4LTEuOTEsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAuMjUsNS43N2Ex'@;
put 'Ny44MywxNy44MywwLDAsMSwzLjg5LDYuNTlIMTguNzVWNS42Yy0uMjUsMC0uNTEsMC0uNzcsMHMtLjQ5LDAtLjczLDB2Ni43N0gxMS44NmExNy44MywxNy44MywwLDAsMSwzLjktNi42LDEyLjI4LDEyLjI4LDAsMCwwLTIuNTQuNzUsMTkuNzIsMTkuNzIsMCwwLDAtMi45MSw1Ljg1SDYuOTRB'@;
put 'MTIuMywxMi4zLDAsMCwwLDYuMjYsMTRIOS44OWExOS4zOCwxOS4zOCwwLDAsMC0uNDMsNCwxOS42NywxOS42NywwLDAsMCwuNSw0LjM3SDYuNDJBMTIuMzQsMTIuMzQsMCwwLDAsNy4xNiwyNGgzLjIzYTE5LjMyLDE5LjMyLDAsMCwwLDIuNjksNS4zNiwxMi4yOCwxMi4yOCwwLDAsMCwyLjYx'@;
put 'Ljc5QTE3LjkxLDE3LjkxLDAsMCwxLDEyLDI0aDUuMjZ2Ni4zNGMuMjQsMCwuNDksMCwuNzMsMHMuNTEsMCwuNzcsMFYyNEgyNGExNy45LDE3LjksMCwwLDEtMy43LDYuMTUsMTIuMjgsMTIuMjgsMCwwLDAsMi42Mi0uODFBMTkuMzIsMTkuMzIsMCwwLDAsMjUuNjEsMjRoMy4yYTEyLjM0LDEy'@;
put 'LjM0LDAsMCwwLC43NC0xLjZIMjZhMTkuNjcsMTkuNjcsMCwwLDAsLjUtNC4zNywxOS4zOCwxOS4zOCwwLDAsMC0uNDMtNGgzLjZjLS4wNi0uMTctLjEyLS4zMy0uMTktLjQ5YTcuNDUsNy40NSwwLDAsMS0zLjQ3LTEuMTFoLS4zNmMwLS4xMS0uMDgtLjIxLS4xMS0uMzJhNy40OCw3LjQ4LDAs'@;
put 'MCwxLTMuMDYtNS42MkExMi40MSwxMi40MSwwLDAsMCwyMC4yNSw1Ljc3Wm0tMywxNi41OUgxMS41MWExNy42OSwxNy42OSwwLDAsMS0uMDktOC40aDUuODNaTTI1LDE4YTE4LjEyLDE4LjEyLDAsMCwxLS41NSw0LjM3SDE4Ljc1VjE0aDUuODNBMTguMjEsMTguMjEsMCwwLDEsMjUsMThaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1p'@;
put 'LWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMDUsMThhMjAuNDYsMjAuNDYsMCwwLDAsLjYyLDQuOTNoNi40OFYxMy40NUgxMC41OEEyMC41NSwyMC41NSwwLDAsMCwxMC4wNSwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOC44NSwxMy40NXY5LjQ4aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAtLjUyLTQuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiww'@;
put 'LDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0zMC4yMiwyNC43MUgyNi42YTIxLjgsMjEuOCwwLDAsMS0zLDYsMTMuODYsMTMuODYsMCwwLDEtMywuOTIsMjAuMjEsMjAuMjEsMCwwLDAsNC4xOC02Ljk0SDE4Ljg2djcuMTVjLS4yOSwwLS41NywwLS44Niwwcy0uNTUsMC0uODMsMFYyNC43'@;
put 'MUgxMS4yMmEyMC4yMSwyMC4yMSwwLDAsMCw0LjE4LDYuOTUsMTMuODYsMTMuODYsMCwwLDEtMi45NC0uOSwyMS44LDIxLjgsMCwwLDEtMy02LjA1SDUuNzhhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLTEuODFoNEEyMi4yLDIyLjIsMCwwLDEsOC4zNywxOGEyMS44OCwyMS44OCwwLDAsMSwuNDgt'@;
put 'NC41NUg0Ljc2YTEzLjg4LDEzLjg4LDAsMCwxLC43Ni0xLjgxSDkuMzNBMjIuMjYsMjIuMjYsMCwwLDEsMTIuNjEsNWExMy44NiwxMy44NiwwLDAsMSwyLjg3LS44NCwyMC4xMywyMC4xMywwLDAsMC00LjQsNy40NWg2LjA5VjRjLjI4LDAsLjU1LDAsLjgzLDBzLjU4LDAsLjg2LDB2Ny42NGg2'@;
put 'LjA5YTIwLjEzLDIwLjEzLDAsMCwwLTQuMzktNy40NEExMy44OSwxMy44OSwwLDAsMSwyMy40Myw1YTIyLjI2LDIyLjI2LDAsMCwxLDMuMjcsNi41OWgzLjc3YTEzLjg5LDEzLjg5LDAsMCwxLC43NiwxLjgxSDI3LjE3QTIxLjg4LDIxLjg4LDAsMCwxLDI3LjY2LDE4YTIyLjIsMjIuMiwwLDAs'@;
put 'MS0uNTcsNC45M2g0QTEzLjk0LDEzLjk0LDAsMCwxLDMwLjIyLDI0LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjA1LDE4YTIwLjQ2LDIwLjQ2LDAsMCwwLC42Miw0LjkzaDYuNDhWMTMuNDVIMTAuNThBMjAu'@;
put 'NTUsMjAuNTUsMCwwLDAsMTAuMDUsMThaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4Ljg1LDIyLjk0aDYuNDhBMjAuNDYsMjAuNDYsMCwwLDAsMjYsMThhMjAuNTUsMjAuNTUsMCwwLDAt'@;
put 'LjUyLTQuNTVIMTguODVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDQsNy40NCwwLDAsMS0xLjkuNTh2MEgzMWE2Ljc3LDYuNzcsMCwwLDEtMi4wNywwaC0xLjhB'@;
put 'MjEuODgsMjEuODgsMCwwLDEsMjcuNjYsMThhMjIuMiwyMi4yLDAsMCwxLS41Nyw0LjkzaDRhMTMuOTQsMTMuOTQsMCwwLDEtLjgzLDEuODFIMjYuNmEyMS44LDIxLjgsMCwwLDEtMyw2LDEzLjg2LDEzLjg2LDAsMCwxLTMsLjkyLDIwLjIxLDIwLjIxLDAsMCwwLDQuMTgtNi45NEgxOC44NnY3'@;
put 'LjE1Yy0uMjksMC0uNTcsMC0uODYsMHMtLjU1LDAtLjgzLDBWMjQuNzFIMTEuMjJhMjAuMjEsMjAuMjEsMCwwLDAsNC4xOCw2Ljk1LDEzLjg2LDEzLjg2LDAsMCwxLTIuOTQtLjksMjEuOCwyMS44LDAsMCwxLTMtNi4wNUg1Ljc4YTEzLjk0LDEzLjk0LDAsMCwxLS44My0xLjgxaDRBMjIuMiwy'@;
put 'Mi4yLDAsMCwxLDguMzcsMThhMjEuODgsMjEuODgsMCwwLDEsLjQ4LTQuNTVINC43NmExMy44OCwxMy44OCwwLDAsMSwuNzYtMS44MUg5LjMzQTIyLjI2LDIyLjI2LDAsMCwxLDEyLjYxLDVhMTMuODYsMTMuODYsMCwwLDEsMi44Ny0uODQsMjAuMTMsMjAuMTMsMCwwLDAtNC40LDcuNDVoNi4w'@;
put 'OVY0Yy4yOCwwLC41NSwwLC44Mywwcy41OCwwLC44NiwwdjcuNjRoNi4wOWwwLS4xM2E3LjQ3LDcuNDcsMCwwLDEtMi4zNi00Ljc2LDIwLjM3LDIwLjM3LDAsMCwwLTItMi41NSwxNC4yMywxNC4yMywwLDAsMSwyLjA2LjU2LDcuNDQsNy40NCwwLDAsMSwuNTctMS44NiwxNi4wNiwxNi4wNiww'@;
put 'LDEsMCw5LjkzLDkuOTNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIvPicpLFIuQ2xyU2hhcGVTbGlkZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDguNDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwx'@;
put 'MiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0'@;
put 'LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCwwLDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAsMCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLFIuQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43'@;
put 'LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsNy4zM0EyLjM0LDIuMzQsMCwwLDAsMjMuNjcsNUgyMS44N2E0LDQsMCwwLDAtNy43'@;
put 'NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI2Wk0yNCw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMy42N2EuMzMuMzMsMCwwLDEsLjMzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTQiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIyIiB3aWR0aD0iMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIx'@;
put 'MSIgeT0iMjYiIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOCIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IHg9IjExIiB5PSIyMiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIyNiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDEyVjcuMzNBLjMzLjMzLDAsMCwxLDEyLjMzLDdIMTZWNmEyLDIsMCwwLDEsNCwwVjdoMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3'@;
put 'LjUyLDAsMCwxLC4wNy0xaC0uN2E0LDQsMCwwLDAtNy43NSwwSDEyLjMzQTIuMzQsMi4zNCwwLDAsMCwxMCw3LjMzVjExSDI0LjQyQTcuNSw3LjUsMCwwLDEsMjMuMTMsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNTIsNy41MiwwLDAsMS0xLS4wN1YzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcsMS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxMy40M0E3LjUyLDcuNTIsMCwwLDEs'@;
put 'MzAsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTct'@;
put 'LWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yOSw1SDIyLjE3YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUEx'@;
put 'LjcsMS43LDAsMCwwLDMxLDMyLjMxVjYuNjlBMS43LDEuNywwLDAsMCwyOS4yOSw1Wm0tMTgsM2ExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMWEyLjMxLDIuMzEsMCwxLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxdjJIMTEuMzFaTTI1LDI4SDExVjI2SDI1Wm0wLTRIMTFWMjJIMjVabTAt'@;
put 'NEgxMVYxOEgyNVptMC00SDExVjE0SDI1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMEgxMS4zMVY4YTEsMSwwLDAsMSwxLTFoMy40NFY2LjMxYTIuMzEsMi4z'@;
put 'MSwwLDEsMSw0LjYzLDBWN2gyLjE5YTcuNTQsNy41NCwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS40YTQuNDUsNC40NSwwLDAsMC00LjExLTNBNC40Niw0LjQ2LDAsMCwwLDE0LDVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwz'@;
put 'NEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yNSwyOEgxMVYyNkgyNVptMC00SDExVjIySDI1Wm0wLTRIMTFWMThIMjVabTAtNEgxMVYxNEgyNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksUi5DbHJTaGFwZUZpcmV3YWxsPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMydjUuMDhIMjMuOHYtNEgyMnY0SDE0di00SDEydjRINFptMCw3SDMydjYuMDhIMjguOTJWMTYuMjdIMjd2NC44MUgxOC45MlYxNi4y'@;
put 'N0gxN3Y0LjgxSDguOVYxNi4yN0g3djQuODFINFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMnY1'@;
put 'LjY4SDI4LjkyVjE2LjI3SDI3djQuODFIMTguOTJWMTYuMjdIMTd2NC44MUg4LjlWMTYuMjdIN3Y0LjgxSDRWMTVIMjAuNThhMy41OCwzLjU4LDAsMCwxLTEuNzYtMS45MkgxNHYtNEgxMnY0SDRWOEgyMC4xNGwxLjE1LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwy'@;
put 'LDAsMCwwLDItMlYxNS4zOFpNMjMuOCwyOFYyNC4yN0gyMi4yVjI4SDE0VjI0LjI3aC0xLjZWMjhINFYyM0gzMnY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4x'@;
put 'NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0'@;
put 'ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ3LDcuNDcsMCwwLDEtMi40NS0uNDJIMjMuOFYxMC4yMmE3LjUsNy41LDAsMCwxLS42My0xLjE0SDIydjRIMTR2LTRIMTJ2NEg0VjhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDRBMiwyLDAs'@;
put 'MCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Ni4wOEgyOC45MlYxNi4yN0gyN3Y0LjgxSDE4LjkyVjE2LjI3SDE3djQuODFIOC45VjE2LjI3SDd2NC44MUg0Wk0yMy44LDI4VjI0LjI3SDIyLjJW'@;
put 'MjhIMTRWMjQuMjdoLTEuNlYyOEg0VjIzSDMydjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTE0LDI4SDEyVjI0aDJabTEwLDBIMjJW'@;
put 'MjRoMlptOC02SDRWMjBIN1YxNkg5djRoOFYxNmgydjRoOFYxNmgydjRoM1ptMC04SDRWMTJoOFY4aDJ2NGg4VjhoMnY0aDhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OSwzLjY5'@;
put 'LDAsMCwxLDE5LjM1LDE0SDRWMTJoOFY4aDJ2NGg0LjU3QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTQsMjhIMTJWMjRoMlptMTAsMEgyMlYyNGgyWm04LTZINFYyMEg3VjE2'@;
put 'SDl2NGg4VjE2aDJ2NGg4VjE2aDJ2NGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LDEwLjQ5'@;
put 'VjEyaDEuNTFBNy41Myw3LjUzLDAsMCwxLDI0LDEwLjQ5WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTMuMjJWMTRINFYxMmg4VjhoMnY0aDhWOGguNzhhNy40OSw3LjQ5LDAsMCwx'@;
put 'LS4yOC0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWk0xNCwyOEgxMlYyNGgyWm0xMCwwSDIyVjI0aDJabTgtNkg0VjIwSDdWMTZIOXY0aDhWMTZoMnY0aDhWMTZoMnY0aDNaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicp'@;
put 'LFIuQ2xyU2hhcGVMaXN0PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIxMiIgd2lkdGg9IjkiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTYiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNCIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjE2IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxyZWN0IHg9IjExIiB5PSIyMCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTIiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5'@;
put 'PSIxNiIgd2lkdGg9IjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjIwIiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjQiIHdpZHRoPSI5IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjExIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxNiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFk'@;
put 'Z2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMjQiIHdpZHRoPSIy'@;
put 'IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSw4djJoOC42NmE3LjQ1LDcuNDUsMCwwLDEtLjg5LTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xMC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg4LTJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSww'@;
put 'LDAsMSwyOCwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDJIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwyOCwyWk0xMywyNkgxMVYyNGgyWm0wLTRIMTFWMjBoMlptMC00SDExVjE2'@;
put 'aDJabTAtNEgxMVYxMmgyWm0wLTRIMTFWOGgyWk0yNSwyNkgxNVYyNEgyNVptMC00SDE1VjIwSDI1Wm0wLTRIMTVWMTZIMjVabTAtNEgxNVYxMkgyNVptMC00SDE1VjhIMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTIzLjY2LDEwSDE1VjhoNy43OGE3LjQyLDcuNDIsMCwwLDEsLjg5LTZIOEEyLDIsMCwwLDAsNiw0VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyMy42NiwxMFpNMTMsMjZIMTFWMjRoMlptMC00SDExVjIwaDJabTAtNEgxMVYxNmgyWm0w'@;
put 'LTRIMTFWMTJoMlptMC00SDExVjhoMlpNMjUsMjZIMTVWMjRIMjVabTAtNEgxNVYyMEgyNVptMC00SDE1VjE2SDI1Wm0wLTRIMTVWMTJIMjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFIuQ2xyU2hhcGVSZWRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41'@;
put 'Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEzbC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiAvPicpLFIuQ2xyU2hhcGVVbmRvPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwxMiw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEz'@;
put 'LDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVTY3JvbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYu'@;
put 'NThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYxMy4xM2gtMlYyOS41NGEyLjUsMi41LDAsMCwx'@;
put 'LTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRabS00LjUtN0EyLjUsMi41LDAsMCwxLDMyLDYuNThWOS4xMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMDgsMTUuNFYyOS41NGEyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoMi42MUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwu'@;
put 'NDQtLjc2SDE4VjYuNThhNC40OCw0LjQ4LDAsMCwwLS43Ni0yLjVIMjIuNGwxLjE1LTJIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQuNSw0LjUsMCwwLDAsNi41LDM0SDI1LjU4YTQuNSw0LjUsMCwwLDAsNC41LTQuNVYx'@;
put 'NS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4'@;
put 'LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCww'@;
put 'LDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjUsNy41LDAsMCwxLTEuMzUtMkgxOFY2LjU4YTQuNDgsNC40OCwwLDAsMC0uNzYtMi41aDUuNTJhNy40NCw3'@;
put 'LjQ0LDAsMCwxLC44Ni0ySDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNTh2MjNhMi41LDIuNSwwLDEsMS01LDBWMjZINy4xOVYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUsNC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjVWMTMuMTNoLTJWMjkuNTRhMi41LDIuNSwwLDAsMS0yLjUsMi41SDEw'@;
put 'LjI0YTQuNDcsNC40NywwLDAsMCwuNzYtMi41di0yM2EyLjUsMi41LDAsMCwxLDUsMHY0LjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4wOCwxNS40VjI5LjU0YTIuNSwyLjUsMCwwLDEtMi41LDIuNUgxMC4y'@;
put 'NGE0LjQ3LDQuNDcsMCwwLDAsLjc2LTIuNXYtMjNhMi41LDIuNSwwLDAsMSw1LDB2NC41NGgyLjYxQTMuNjYsMy42NiwwLDAsMSwxOSw5Ljg5bDQuNTEtNy44SDEzLjVBNC41LDQuNSwwLDAsMCw5LDYuNThWMjRIMnY1LjVBNC41LDQuNSwwLDAsMCw2LjUsMzRIMjUuNThhNC41LDQuNSwwLDAs'@;
put 'MCw0LjUtNC41VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAs'@;
put 'MCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNWE3LjQ5LDcuNDks'@;
put 'MCwwLDEtMS45Mi0uMjZ2MTYuM2EyLjUsMi41LDAsMCwxLTIuNSwyLjVIMTAuMjRhNC40Nyw0LjQ3LDAsMCwwLC43Ni0yLjV2LTIzYTIuNSwyLjUsMCwwLDEsNSwwdjQuNTRoOC41NGE3LjQ2LDcuNDYsMCwwLDEtLjkyLTlIMTMuNUE0LjUsNC41LDAsMCwwLDksNi41OFYyNEgydjUuNUE0LjUs'@;
put 'NC41LDAsMCwwLDYuNSwzNEgyNS41OGE0LjUsNC41LDAsMCwwLDQuNS00LjV2LTE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy44MywyMy40M2ExLjE2LDEuMTYsMCwwLDAtLjcxLTEuMTJsLTEuNjgtLjVjLS4wOS0uMjQt'@;
put 'LjE4LS40OC0uMjktLjcxbC43OC0xLjQ0YTEuMTYsMS4xNiwwLDAsMC0uMjEtMS4zN2wtMS40Mi0xLjQxYTEuMTYsMS4xNiwwLDAsMC0xLjM3LS4ybC0xLjQ1Ljc2YTcuODQsNy44NCwwLDAsMC0uNzYtLjMybC0uNDgtMS41OGExLjE1LDEuMTUsMCwwLDAtMS4xMS0uNzdoLTJhMS4xNiwxLjE2'@;
put 'LDAsMCwwLTEuMTEuODJsLS40NywxLjU0YTcuNzYsNy43NiwwLDAsMC0uNzcuMzJsLTEuNDItLjc2YTEuMTYsMS4xNiwwLDAsMC0xLjM2LjJsLTEuNDUsMS40YTEuMTYsMS4xNiwwLDAsMC0uMjEsMS4zOEwxNy4wOCwyMWE3LjY0LDcuNjQsMCwwLDAtLjMxLjc0bC0xLjU4LjQ3YTEuMTUsMS4x'@;
put 'NSwwLDAsMC0uODMsMS4xMXYyYTEuMTUsMS4xNSwwLDAsMCwuODMsMS4xbDEuNTkuNDdhNy41Myw3LjUzLDAsMCwwLC4zMS43MmwtLjc4LDEuNDZhMS4xNiwxLjE2LDAsMCwwLC4yMSwxLjM3bDEuNDIsMS40YTEuMTYsMS4xNiwwLDAsMCwxLjM3LjIxbDEuNDgtLjc4Yy4yMy4xMS40Ny4yLjcy'@;
put 'LjI5TDIyLDMzLjE4YTEuMTYsMS4xNiwwLDAsMCwxLjExLjgxaDJhMS4xNiwxLjE2LDAsMCwwLDEuMTEtLjgybC40Ny0xLjU4Yy4yNC0uMDguNDctLjE4LjctLjI5bDEuNS43OWExLjE2LDEuMTYsMCwwLDAsMS4zNi0uMmwxLjQyLTEuNGExLjE2LDEuMTYsMCwwLDAsLjIxLTEuMzhsLS43OS0x'@;
put 'LjQ1cS4xNi0uMzQuMjktLjY5TDMzLDI2LjVhMS4xNSwxLjE1LDAsMCwwLC44My0xLjExWm0tMS42LDEuNjMtMi4xMS42Mi0uMTIuNDJhNiw2LDAsMCwxLS41LDEuMTlsLS4yMS4zOCwxLDEuOTEtMSwxLTItMS0uMzcuMmE2LjIxLDYuMjEsMCwwLDEtMS4yLjQ5bC0uNDIuMTItLjYzLDIuMDlI'@;
put 'MjMuNDJsLS42My0yLjA4LS40Mi0uMTJhNi4yMyw2LjIzLDAsMCwxLTEuMjEtLjQ5bC0uMzctLjItMS45NCwxLTEtMSwxLTEuOTQtLjIyLS4zOEE2LDYsMCwwLDEsMTguMTcsMjZMMTgsMjUuNjMsMTYsMjVWMjMuNjlMMTgsMjMuMDhsLjEzLS40MWE1Ljk0LDUuOTQsMCwwLDEsLjUzLTEuMjNM'@;
put 'MTguOSwyMWwtMS0xLjg1LDEtLjk0LDEuODksMSwuMzgtLjIxYTYuMjMsNi4yMywwLDAsMSwxLjI2LS41MmwuNDEtLjEyLjYzLTJoMS4zOGwuNjIsMiwuNDEuMTJBNi4yMSw2LjIxLDAsMCwxLDI3LjEsMTlsLjM4LjIxLDEuOTItMSwxLDEtMSwxLjg5LjIxLjM4YTYuMDgsNi4wOCwwLDAsMSwu'@;
put 'NSwxLjIxbC4xMi40MiwyLjA2LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAuMzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIu'@;
put 'NDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyNnY3Ljg5YTMuMiwzLjIsMCwwLDEsMiwxLjcyVjVhMiwy'@;
put 'LDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMTIsMjAu'@;
put 'MzVhNCw0LDAsMSwwLDQuMDgsNEE0LjA2LDQuMDYsMCwwLDAsMjQuMTIsMjAuMzVabTAsNi40NmEyLjQzLDIuNDMsMCwxLDEsMi40OC0yLjQzQTIuNDYsMi40NiwwLDAsMSwyNC4xMiwyNi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1h'@;
put 'bGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjQzYTEuMTYsMS4xNiwwLDAsMC0uNzEtMS4xMmwtMS42OC0uNWMtLjA5LS4yNC0uMTgtLjQ4LS4yOS0uNzFsLjc4LTEuNDRhMS4xNiwxLjE2LDAsMCwwLS4yMS0xLjM3bC0xLjQyLTEuNDFhMS4xNiwxLjE2LDAsMCww'@;
put 'LTEuMzctLjJsLTEuNDUuNzZhNy44NCw3Ljg0LDAsMCwwLS43Ni0uMzJsLS40OC0xLjU4YTEuMTUsMS4xNSwwLDAsMC0xLjExLS43N2gtMmExLjE2LDEuMTYsMCwwLDAtMS4xMS44MmwtLjQ3LDEuNTRhNy43Niw3Ljc2LDAsMCwwLS43Ny4zMmwtMS40Mi0uNzZhMS4xNiwxLjE2LDAsMCwwLTEu'@;
put 'MzYuMmwtMS40NSwxLjRhMS4xNiwxLjE2LDAsMCwwLS4yMSwxLjM4TDE3LjA4LDIxYTcuNjQsNy42NCwwLDAsMC0uMzEuNzRsLTEuNTguNDdhMS4xNSwxLjE1LDAsMCwwLS44MywxLjExdjJhMS4xNSwxLjE1LDAsMCwwLC44MywxLjFsMS41OS40N2E3LjUzLDcuNTMsMCwwLDAsLjMxLjcybC0u'@;
put 'NzgsMS40NmExLjE2LDEuMTYsMCwwLDAsLjIxLDEuMzdsMS40MiwxLjRhMS4xNiwxLjE2LDAsMCwwLDEuMzcuMjFsMS40OC0uNzhjLjIzLjExLjQ3LjIuNzIuMjlMMjIsMzMuMThhMS4xNiwxLjE2LDAsMCwwLDEuMTEuODFoMmExLjE2LDEuMTYsMCwwLDAsMS4xMS0uODJsLjQ3LTEuNThjLjI0'@;
put 'LS4wOC40Ny0uMTguNy0uMjlsMS41Ljc5YTEuMTYsMS4xNiwwLDAsMCwxLjM2LS4ybDEuNDItMS40YTEuMTYsMS4xNiwwLDAsMCwuMjEtMS4zOGwtLjc5LTEuNDVxLjE2LS4zNC4yOS0uNjlMMzMsMjYuNWExLjE1LDEuMTUsMCwwLDAsLjgzLTEuMTFabS0xLjYsMS42My0yLjExLjYyLS4xMi40'@;
put 'MmE2LDYsMCwwLDEtLjUsMS4xOWwtLjIxLjM4LDEsMS45MS0xLDEtMi0xLS4zNy4yYTYuMjEsNi4yMSwwLDAsMS0xLjIuNDlsLS40Mi4xMi0uNjMsMi4wOUgyMy40MmwtLjYzLTIuMDgtLjQyLS4xMmE2LjIzLDYuMjMsMCwwLDEtMS4yMS0uNDlsLS4zNy0uMi0xLjk0LDEtMS0xLDEtMS45NC0u'@;
put 'MjItLjM4QTYsNiwwLDAsMSwxOC4xNywyNkwxOCwyNS42MywxNiwyNVYyMy42OUwxOCwyMy4wOGwuMTMtLjQxYTUuOTQsNS45NCwwLDAsMSwuNTMtMS4yM0wxOC45LDIxbC0xLTEuODUsMS0uOTQsMS44OSwxLC4zOC0uMjFhNi4yMyw2LjIzLDAsMCwxLDEuMjYtLjUybC40MS0uMTIuNjMtMmgx'@;
put 'LjM4bC42MiwyLC40MS4xMkE2LjIxLDYuMjEsMCwwLDEsMjcuMSwxOWwuMzguMjEsMS45Mi0xLDEsMS0xLDEuODkuMjEuMzhhNi4wOCw2LjA4LDAsMCwxLC41LDEuMjFsLjEyLjQyLDIuMDYuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC40OSwzMUg2VjVIMjEuODdMMjMsM0g2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1'@;
put 'LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuODMsMjMuNDNhMS4xNiwxLjE2LDAsMCwwLS43MS0xLjEybC0xLjY4LS41Yy0uMDktLjI0LS4x'@;
put 'OC0uNDgtLjI5LS43MWwuNzgtMS40NGExLjE2LDEuMTYsMCwwLDAtLjIxLTEuMzdsLTEuNDItMS40MWExLjE2LDEuMTYsMCwwLDAtMS4zNy0uMmwtMS40NS43NmE3Ljg0LDcuODQsMCwwLDAtLjc2LS4zMmwtLjQ4LTEuNThhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjc3aC0yYTEuMTYsMS4xNiww'@;
put 'LDAsMC0xLjExLjgybC0uNDcsMS41NGE3Ljc2LDcuNzYsMCwwLDAtLjc3LjMybC0xLjQyLS43NmExLjE2LDEuMTYsMCwwLDAtMS4zNi4ybC0xLjQ1LDEuNGExLjE2LDEuMTYsMCwwLDAtLjIxLDEuMzhMMTcuMDgsMjFhNy42NCw3LjY0LDAsMCwwLS4zMS43NGwtMS41OC40N2ExLjE1LDEuMTUs'@;
put 'MCwwLDAtLjgzLDEuMTF2MmExLjE1LDEuMTUsMCwwLDAsLjgzLDEuMWwxLjU5LjQ3YTcuNTMsNy41MywwLDAsMCwuMzEuNzJsLS43OCwxLjQ2YTEuMTYsMS4xNiwwLDAsMCwuMjEsMS4zN2wxLjQyLDEuNGExLjE2LDEuMTYsMCwwLDAsMS4zNy4yMWwxLjQ4LS43OGMuMjMuMTEuNDcuMi43Mi4y'@;
put 'OUwyMiwzMy4xOGExLjE2LDEuMTYsMCwwLDAsMS4xMS44MWgyYTEuMTYsMS4xNiwwLDAsMCwxLjExLS44MmwuNDctMS41OGMuMjQtLjA4LjQ3LS4xOC43LS4yOWwxLjUuNzlhMS4xNiwxLjE2LDAsMCwwLDEuMzYtLjJsMS40Mi0xLjRhMS4xNiwxLjE2LDAsMCwwLC4yMS0xLjM4bC0uNzktMS40'@;
put 'NXEuMTYtLjM0LjI5LS42OUwzMywyNi41YTEuMTUsMS4xNSwwLDAsMCwuODMtMS4xMVptLTEuNiwxLjYzLTIuMTEuNjItLjEyLjQyYTYsNiwwLDAsMS0uNSwxLjE5bC0uMjEuMzgsMSwxLjkxLTEsMS0yLTEtLjM3LjJhNi4yMSw2LjIxLDAsMCwxLTEuMi40OWwtLjQyLjEyLS42MywyLjA5SDIz'@;
put 'LjQybC0uNjMtMi4wOC0uNDItLjEyYTYuMjMsNi4yMywwLDAsMS0xLjIxLS40OWwtLjM3LS4yLTEuOTQsMS0xLTEsMS0xLjk0LS4yMi0uMzhBNiw2LDAsMCwxLDE4LjE3LDI2TDE4LDI1LjYzLDE2LDI1VjIzLjY5TDE4LDIzLjA4bC4xMy0uNDFhNS45NCw1Ljk0LDAsMCwxLC41My0xLjIzTDE4'@;
put 'LjksMjFsLTEtMS44NSwxLS45NCwxLjg5LDEsLjM4LS4yMWE2LjIzLDYuMjMsMCwwLDEsMS4yNi0uNTJsLjQxLS4xMi42My0yaDEuMzhsLjYyLDIsLjQxLjEyQTYuMjEsNi4yMSwwLDAsMSwyNy4xLDE5bC4zOC4yMSwxLjkyLTEsMSwxLTEsMS44OS4yMS4zOGE2LjA4LDYuMDgsMCwwLDEsLjUs'@;
put 'MS4yMWwuMTIuNDIsMi4wNi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC4xMiwyMC4zNWE0LDQsMCwxLDAsNC4wOCw0QTQuMDYsNC4wNiwwLDAsMCwyNC4xMiwyMC4zNVpt'@;
put 'MCw2LjQ2YTIuNDMsMi40MywwLDEsMSwyLjQ4LTIuNDNBMi40NiwyLjQ2LDAsMCwxLDI0LjEyLDI2LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjQ5LDMxSDZWNUgyMy4w'@;
put 'OGE2Ljk0LDYuOTQsMCwwLDEsLjYtMkg2QTIsMiwwLDAsMCw0LDVWMzFhMiwyLDAsMCwwLDIsMkgxNi4yM2wtMS4xLTEuMDhBMy4xMSwzLjExLDAsMCwxLDE0LjQ5LDMxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTI4LDE1LjMzVjEyLjcxYTcsNywwLDAsMS0yLTF2MS44OEEzLjIsMy4yLDAsMCwxLDI4LDE1LjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0i'@;
put 'MzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyNnY4Ljc4YTIuMzcsMi4zNywwLDAsMSwyLDEuNTdWNWEyLDIs'@;
put 'MCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNVYzMWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy41NCwyMy40N2wtMi0uNjFh'@;
put 'Ny4wNiw3LjA2LDAsMCwwLS41OC0xLjQxbDEtMS44NmEuMzcuMzcsMCwwLDAtLjA3LS40NEwzMC40MSwxNy43YS4zNy4zNywwLDAsMC0uNDQtLjA3bC0xLjg1LDFBNyw3LDAsMCwwLDI2LjY5LDE4bC0uNjEtMmEuMzcuMzcsMCwwLDAtLjM2LS4yNWgtMmEuMzcuMzcsMCwwLDAtLjM1LjI2bC0u'@;
put 'NjEsMmE3LDcsMCwwLDAtMS40NC42MWwtMS44Mi0xYS4zNy4zNywwLDAsMC0uNDQuMDdsLTEuNDcsMS40NGEuMzcuMzcsMCwwLDAtLjA3LjQ0bDEsMS44MmE3LDcsMCwwLDAtLjYxLDEuNDRsLTIsLjYxYS4zNy4zNywwLDAsMC0uMjYuMzV2MmEuMzcuMzcsMCwwLDAsLjI2LjM1bDIsLjYxYTcs'@;
put 'NywwLDAsMCwuNjEsMS40MWwtMSwxLjlhLjM3LjM3LDAsMCwwLC4wNy40NEwxOSwzMmEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCww'@;
put 'LDEuMzgtLjU3bDEuODksMWEuMzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OGE3LjA2LDcuMDYsMCwwLDAsLjU4LTEuMzlsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjMuODNBLjM3LjM3LDAsMCwwLDMzLjU0LDIzLjQ3Wk0yNC43'@;
put 'LDI4LjE5QTMuMzMsMy4zMywwLDEsMSwyOCwyNC44NiwzLjMzLDMuMzMsMCwwLDEsMjQuNywyOC4xOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAsMC0uNTgt'@;
put 'MS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQu'@;
put 'NjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEuNDFsLTEs'@;
put 'MS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM3'@;
put 'LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMuMzMsMCwx'@;
put 'LDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LjU1LDMxSDZWNUgyMS44N0wyMywzSDZBMiwyLDAsMCwwLDQsNVYz'@;
put 'MWEyLDIsMCwwLDAsMiwySDE3LjE2bC0xLTFBMi4zOCwyLjM4LDAsMCwxLDE1LjU1LDMxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAg'@;
put 'ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNTQsMjMuNDdsLTItLjYxYTcuMDYsNy4wNiwwLDAs'@;
put 'MC0uNTgtMS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuNDEsMTcuN2EuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxQTcsNywwLDAsMCwyNi42OSwxOGwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCww'@;
put 'LTEuNDQuNjFsLTEuODItMWEuMzcuMzcsMCwwLDAtLjQ0LjA3bC0xLjQ3LDEuNDRhLjM3LjM3LDAsMCwwLS4wNy40NGwxLDEuODJhNyw3LDAsMCwwLS42MSwxLjQ0bC0yLC42MWEuMzcuMzcsMCwwLDAtLjI2LjM1djJhLjM3LjM3LDAsMCwwLC4yNi4zNWwyLC42MWE3LDcsMCwwLDAsLjYxLDEu'@;
put 'NDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTksMzJhLjM3LjM3LDAsMCwwLC40NC4wN2wxLjg3LTFhNy4wNiw3LjA2LDAsMCwwLDEuMzkuNTdsLjYxLDJhLjM3LjM3LDAsMCwwLC4zNS4yNmgyYS4zNy4zNywwLDAsMCwuMzUtLjI2bC42MS0yYTcsNywwLDAsMCwxLjM4LS41N2wxLjg5'@;
put 'LDFhLjM3LjM3LDAsMCwwLC40NC0uMDdsMS40NS0xLjQ1YS4zNy4zNywwLDAsMCwuMDctLjQ0bC0xLTEuODhhNy4wNiw3LjA2LDAsMCwwLC41OC0xLjM5bDItLjYxYS4zNy4zNywwLDAsMCwuMjYtLjM1VjIzLjgzQS4zNy4zNywwLDAsMCwzMy41NCwyMy40N1pNMjQuNywyOC4xOUEzLjMzLDMu'@;
put 'MzMsMCwxLDEsMjgsMjQuODYsMy4zMywzLjMzLDAsMCwxLDI0LjcsMjguMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNS41NSwzMUg2VjVIMjMuMDhhNi45NCw2Ljk0LDAsMCwxLC42'@;
put 'LTJINkEyLDIsMCwwLDAsNCw1VjMxYTIsMiwwLDAsMCwyLDJIMTcuMTZsLTEtMUEyLjM4LDIuMzgsMCwwLDEsMTUuNTUsMzFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS4zNlYx'@;
put 'Mi43MWE3LDcsMCwwLDEtMi0xdjJBMi4zNywyLjM3LDAsMCwxLDI4LDE1LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIC8+JyksUi5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMs'@;
put 'MTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjkuNTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEuNDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlU3dpdGNoPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFMOS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIx'@;
put 'MiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSww'@;
put 'LDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIgeT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxu'@;
put 'ICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFIuQ2xyU2hhcGVUb29scz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEs'@;
put 'MXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIs'@;
put 'OC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCwwLDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMu'@;
put 'MDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFMMzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3Qg'@;
put 'eD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwy'@;
put 'SDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjky'@;
put 'LDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40'@;
put 'MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlV2luZG93TWF4PSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcuODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksUi5D'@;
put 'bHJTaGFwZVdpbmRvd01pbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZVpvb21Jbj0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEwLDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLFIuQ2xyU2hhcGVab29tT3V0PSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCwwLDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVI'@;
put 'MTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlS2V5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjYuMzMiIHk9IjEwLjcxIiB3aWR0aD0iOS43MSIgaGVpZ2h0PSIyLjU3'@;
put 'IiByeD0iMSIgcnk9IjEiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC01LjIxIDExLjQzKSByb3RhdGUoLTQ1KSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5'@;
put 'LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40'@;
put 'MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4yNGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjMzIiB5PSIxMC43MSIgd2lkdGg9IjkuNzEiIGhlaWdodD0iMi41NyIgcng9IjEiIHJ5PSIxIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtNS4yMSAxMS40Mykgcm90YXRlKC00NSkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM1LDE2LjhsLjYzLS42M2E1LDUsMCwwLDAsLjYzLS43N0gyMi4yM2wtLjI5LDBMMjAuNTIsMTYuOCwzMiwyOC4yOFYzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2'@;
put 'LTNIMTguOGwtMy0zTDE0LDIzLjMxYTMsMywwLDAsMS00LjI0LDBMNC41LDE4YTMsMywwLDAsMSwwLTQuMjRsOC41Ni04LjU2YTMsMywwLDAsMSw0LjI0LDBMMjAuMSw4LjA2bDEtMS43OUwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3bDUu'@;
put 'MjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40LS40TDE4LDI2LjQ4aDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1'@;
put 'LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1h'@;
put 'bGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4zMyIgeT0iMTAuNzEiIHdpZHRoPSI5LjcxIiBoZWlnaHQ9IjIuNTciIHJ4PSIxIiByeT0iMSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTUuMjEgMTEuNDMpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMzUsMTYuOGwuNjMtLjYzQTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAtNy4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2'@;
put 'LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNC0uNEwxOCwyNi40OGgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0zLTNMMTQsMjMuMzFhMywzLDAsMCwxLTQuMjQsMEw0LjUsMThhMywzLDAsMCwxLDAtNC4y'@;
put 'NGw4LjU2LTguNTZhMywzLDAsMCwxLDQuMjQsMGw1LjI2LDUuMjZhMywzLDAsMCwxLDAsNC4yNGwtMiwyTDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5'@;
put 'PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42QTUsNSwwLDAsMCwyNCw5LjFMMTguNzEsMy44NGE1LDUsMCwwLDAt'@;
put 'Ny4wNywwTDMuMDksMTIuMzlhNSw1LDAsMCwwLDAsNy4wN2w1LjI2LDUuMjZhNSw1LDAsMCwwLDcuMDcsMGwuNDUtLjQ1LDIuMSwyLjJoMy40NHYzaDMuNjl2MS42M0wyOCwzNGg2VjI3LjQ1Wm0tOC41Ni02LjU5TDkuMzcsMTUuNjRhMSwxLDAsMCwxLTEuNDEsMGwtLjQtLjRhMSwxLDAsMCwx'@;
put 'LDAtMS40MUwxMyw4LjM2YTEsMSwwLDAsMSwxLjQxLDBsLjQuNEExLDEsMCwwLDEsMTQuODIsMTAuMThaTTMyLDMySDI4Ljg2bC0xLjc3LTEuNzZ2LTIuOEgyMy40MXYtM0gxOC44bC0xLjUyLTEuNjFMMjIsMTguMTgsMzIsMjguMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjM4LDE2Ljc3bC42LS42YTUsNSwwLDAsMCwuNjMtLjc3SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5bDIuMDktMy42MkwxOC43MSwzLjg0YTUsNSwwLDAsMC03LjA3LDBMMy4wOSwxMi4zOWE1LDUsMCwwLDAsMCw3LjA3'@;
put 'bDUuMjYsNS4yNmE1LDUsMCwwLDAsNy4wNywwbC40NS0uNDUsMi4xLDIuMmgzLjQ0djNoMy42OXYxLjYzTDI4LDM0aDZWMjcuNDVabS04LjU2LTYuNTlMOS4zNywxNS42NGExLDEsMCwwLDEtMS40MSwwbC0uNC0uNGExLDEsMCwwLDEsMC0xLjQxTDEzLDguMzZhMSwxLDAsMCwxLDEuNDEsMGwu'@;
put 'NC40QTEsMSwwLDAsMSwxNC44MiwxMC4xOFpNMzIsMzJIMjguODZsLTEuNzctMS43NnYtMi44SDIzLjQxdi0zSDE4LjhsLTEuNTItMS42MUwyMiwxOC4xOCwzMiwyOC4yOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4zOCwxNi43N2wuNi0uNkE1LDUsMCwwLDAsMjQsOS4xTDE4LjcxLDMuODRhNSw1LDAsMCwwLTcuMDcsMEwzLjA5LDEyLjM5YTUsNSwwLDAsMCwwLDcuMDdsNS4yNiw1LjI2'@;
put 'YTUsNSwwLDAsMCw3LjA3LDBsLjQ1LS40NSwyLjEsMi4yaDMuNDR2M2gzLjY5djEuNjNMMjgsMzRoNlYyNy40NVptLTguNTYtNi41OUw5LjM3LDE1LjY0YTEsMSwwLDAsMS0xLjQxLDBsLS40LS40YTEsMSwwLDAsMSwwLTEuNDFMMTMsOC4zNmExLDEsMCwwLDEsMS40MSwwbC40LjRBMSwxLDAs'@;
put 'MCwxLDE0LjgyLDEwLjE4Wk0zMiwzMkgyOC44NmwtMS43Ny0xLjc2di0yLjhIMjMuNDF2LTNIMTguOGwtMS41Mi0xLjYxTDIyLDE4LjE4LDMyLDI4LjI4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2ly'@;
put 'Y2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlTGlicmFyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEu'@;
put 'ODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAs'@;
put 'MCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMuOTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwt'@;
put 'Ni45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZUJvbHQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgzMC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAs'@;
put 'MSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSwwLDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUuNywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUs'@;
put 'MCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVXcmVuY2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEz'@;
put 'LjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcsMCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2'@;
put 'LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAuNUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNyww'@;
put 'LDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAsMSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZUJ1bGxzZXllPSgw'@;
put 'LG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBsLTEuODYtLjc4QTE2LDE2LDAsMSwwLDE4LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik03LjQ1LDE1LjdhMTAuODEsMTAuODEsMCwxLDAsOC4zLTguMjZMMTYuMzcsOUE5LjI0LDkuMjQsMCwxLDEsOSwxNi4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4'@;
put 'LDIyLjA5YTQuMDgsNC4wOCwwLDAsMS00LTMuNjhsLTEuNjMtLjY4YzAsLjA5LDAsLjE4LDAsLjI3QTUuNjksNS42OSwwLDEsMCwxOCwxMi4zMWgtLjI0TDE4LjQzLDE0QTQuMDcsNC4wNywwLDAsMSwxOCwyMi4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTguMiwxMy4zNGEuNS41LDAsMCwwLC4zNS4xNUgxMi4ybDUuMzcsNS4zN0ExLDEsMCwwLDAsMTksMTcuNDRMMTMuNTMsMTJWOC41MWEuNS41LDAsMCwwLS4xNS0uMzVMNy43OSwyLjU3YS41LjUsMCwwLDAtLjg1LjM1djRIM2EuNS41LDAsMCww'@;
put 'LS4zNS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDE4Ljg1YTEsMSwwLDAsMS0xLjQxLDBsLTMtM0E0LDQsMCwwLDAsMTMuOTEsMTgsNC4wOSw0LjA5LDAsMSwwLDE4LDEzLjkxYTQsNCwwLDAsMC0y'@;
put 'LC41NWwzLDNBMSwxLDAsMCwxLDE5LDE4Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsMS42LDMuODlBMTEuODksMTEuODksMCwxLDEsNi40OSwxNS4zTDIu'@;
put 'NjEsMTMuNjhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOCwxNS45NEExMC4xNywxMC4xNywwLDEsMCwxNiw4bDEuNjksNC4xMS4zMSwwQTUuODgsNS44OCwwLDEsMSwxMi4xMiwxOGMw'@;
put 'LS4xMiwwLS4yMywwLS4zNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC4yLDEzLjM0YS41LjUsMCwwLDAsLjM1LjE1SDEyLjJsMi4zNSwyLjM1QTQuMDksNC4wOSwwLDAsMSwxNiwxNC40NkwxMy41MywxMlY4LjUx'@;
put 'YS41LjUsMCwwLDAtLjE1LS4zNUw3Ljc5LDIuNTdhLjUuNSwwLDAsMC0uODUuMzV2NEgzYS41LjUsMCwwLDAtLjM1Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxSLkNsclNoYXBlVGFyZ2V0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwy'@;
put 'QTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44'@;
put 'LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4'@;
put 'LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgsNC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgs'@;
put 'Ny44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4'@;
put 'LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLFIuQ2xyU2hhcGVGbGFtZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42'@;
put 'NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy43OCw0LjQyLDE5LjVBOS4zLDkuMywwLDAsMCwzLDI0LjYxQzMsMjkuNzIsNS44NiwzNCwxMS42NywzNEgyMi40OEMyOC4yOCwz'@;
put 'NCwzMywyOSwzMywyMi43OEExMS4xMywxMS4xMywwLDAsMCwzMS4zLDE2LjY2Wk0yMi40OCwzMkgxMS43N0M4LjEzLDMyLDUsMjguNjYsNSwyNC42MWE3LjQzLDcuNDMsMCwwLDEsMS4xNi00LjEzYy43My0xLjI5LDQuMDUtNy4yMSw1LjY1LTEwLjA3bDMsNS4yOGExLDEsMCwwLDAsLjg3LjUx'@;
put 'aDBhMSwxLDAsMCwwLC44Ny0uNTFMMjIuNDksNWMxLjg2LDMuMzMsNi4xNSwxMSw3LjA3LDEyLjZBOS4yNCw5LjI0LDAsMCwxLDMxLDIyLjc4QzMxLDI3Ljg3LDI3LjE4LDMyLDIyLjQ4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjUuNzUsMjEuNzNjLS42NS0xLjE2LTQuMzgtNy44MS00LjM4LTcuODFhLjguOCwwLDAsMC0xLjQsMGwtNC4yLDcuNDgtMS41OS0yLjQ5YS44LjgsMCwwLDAtMS4zNSwwTDkuMzcsMjQuMzVhNC4zNSw0LjM1LDAsMCwwLS44MiwyLjYsNC40OSw0LjQ5LDAsMCwwLC41'@;
put 'LDJIMTFhMywzLDAsMCwxLS44My0yLDIuNzgsMi43OCwwLDAsMSwuNTYtMS43M2wyLjgtNC4zOCwxLjY2LDIuNmEuOC44LDAsMCwwLDEuNDEtLjEyLDcuODIsNy44MiwwLDAsMSwuNC0uOEwyMC42NywxNmwzLjY5LDYuNTdhNC44Myw0LjgzLDAsMCwxLC43NywyLjcxQTUsNSwwLDAsMSwyMy40'@;
put 'NiwyOWgyLjEzYTYuNjgsNi42OCwwLDAsMCwxLjE0LTMuNzQsNi40NSw2LjQ1LDAsMCwwLTEtMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMywxNi4zMmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45'@;
put 'NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwxNy40Myw0LjQyLDE5LjE1QTkuMyw5LjMsMCwwLDAsMywyNC4yNmMwLDUuMTEsMy44OCw5LjY1LDguNjcsOS43NEgyMi40OEMyOC4yOCwzNCwzMywyOC42MiwzMywyMi40NEExMS4x'@;
put 'MywxMS4xMywwLDAsMCwzMS4zLDE2LjMyWk0yMS40OCwzMkgxNC41NEE0LjY4LDQuNjgsMCwwLDEsMTAsMjcuNDFhMy45MSwzLjkxLDAsMCwxLC43NS0yLjM0bDMuMzUtNS4yMWEuNS41LDAsMCwxLC44NCwwbDEuNzgsMi43NywwLS4wOGMuNjMtMS4xMSw0LjIzLTcuNDgsNC4yMy03LjQ4YS41'@;
put 'LjUsMCwwLDEsLjg3LDBzMy42LDYuMzgsNC4yMyw3LjQ4QTUuODMsNS44MywwLDAsMSwyNywyNS43NkMyNywzMiwyMi4xLDMyLDIxLjQ4LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlSG91cmdsYXNzPSgwLG0uY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMUE2LjY3LDYuNjcsMCwwLDAsMjYsMTEuMDlWNGgzYTEsMSwwLDAsMCwwLTJIN0ExLDEsMCww'@;
put 'LDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaTTEy'@;
put 'LDI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0uNjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlW'@;
put 'NEgyNHY3LjA5YTQuNjYsNC42NiwwLDAsMS0xLjg4LDMuNzJsLTEuMjgsMWgwYTQuNjYsNC42NiwwLDAsMS0xLjE4LjYzLDEsMSwwLDAsMC0uNjUuOTR2MS4zNGExLDEsMCwwLDAsLjY1Ljk0LDQuNjcsNC42NywwLDAsMSwxLjE5LjYzbDEuMjgsMUE0LjY2LDQuNjYsMCwwLDEsMjQsMjQuOTFW'@;
put 'MzJIMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCww'@;
put 'LDEtLjYybDEuMjgtMWE2LjY0LDYuNjQsMCwwLDAsMS4wOS0xSDIyLjIzYTMuNjQsMy42NCwwLDAsMS0uNzgtLjA5bC0uNjIuNDZoMGE0LjY2LDQuNjYsMCwwLDEtMS4xOC42MywxLDEsMCwwLDAtLjY1Ljk0djEuMzRhMSwxLDAsMCwwLC42NS45NCw0LjY3LDQuNjcsMCwwLDEsMS4xOS42M2wx'@;
put 'LjI4LDFBNC42Niw0LjY2LDAsMCwxLDI0LDI0LjkxVjMySDEyVjI0LjkxYTQuNjYsNC42NiwwLDAsMSwxLjg4LTMuNzJsMS4yOC0xYTQuNjYsNC42NiwwLDAsMSwxLjE4LS42MywxLDEsMCwwLDAsLjY1LS45NFYxNy4zM2ExLDEsMCwwLDAtLjY1LS45NCw0LjY3LDQuNjcsMCwwLDEtMS4xOS0u'@;
put 'NjNsLTEuMjgtMUE0LjY2LDQuNjYsMCwwLDEsMTIsMTEuMDlWNEgyMi40NUwyMy42LDJIN0ExLDEsMCwwLDAsNyw0aDN2Ny4wOWE2LjY3LDYuNjcsMCwwLDAsMi42OSw1LjMzbDEuMjgsMUE2LjM2LDYuMzYsMCwwLDAsMTUsMThoMGE2LjI3LDYuMjcsMCwwLDAtMSwuNjJsLTEuMjgsMUE2LjY3'@;
put 'LDYuNjcsMCwwLDAsMTAsMjQuOTFWMzJIN2ExLDEsMCwwLDAsMCwySDI5YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDEx'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1h'@;
put 'bGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2LjI5LDAsMCwwLDEtLjYybDEuMjgtMWE2LjY4LDYuNjgsMCwwLDAsMi41Ny00LjE2QTcuNTMs'@;
put 'Ny41MywwLDAsMSwyNCwxMC40OXYuNjFhNC42Niw0LjY2LDAsMCwxLTEuODgsMy43MmwtMS4yOCwxaDBhNC42Niw0LjY2LDAsMCwxLTEuMTguNjMsMSwxLDAsMCwwLS42NS45NHYxLjM0YTEsMSwwLDAsMCwuNjUuOTQsNC42Nyw0LjY3LDAsMCwxLDEuMTkuNjNsMS4yOCwxQTQuNjYsNC42Niww'@;
put 'LDAsMSwyNCwyNC45MVYzMkgxMlYyNC45MWE0LjY2LDQuNjYsMCwwLDEsMS44OC0zLjcybDEuMjgtMWE0LjY2LDQuNjYsMCwwLDEsMS4xOC0uNjMsMSwxLDAsMCwwLC42NS0uOTRWMTcuMzNhMSwxLDAsMCwwLS42NS0uOTQsNC42Nyw0LjY3LDAsMCwxLTEuMTktLjYzbC0xLjI4LTFBNC42Niw0'@;
put 'LjY2LDAsMCwxLDEyLDExLjA5VjRIMjIuNzhhNy40NSw3LjQ1LDAsMCwxLC44OS0ySDdBMSwxLDAsMCwwLDcsNGgzdjcuMDlhNi42Nyw2LjY3LDAsMCwwLDIuNjksNS4zM2wxLjI4LDFBNi4zNiw2LjM2LDAsMCwwLDE1LDE4aDBhNi4yNyw2LjI3LDAsMCwwLTEsLjYybC0xLjI4LDFBNi42Nyw2'@;
put 'LjY3LDAsMCwwLDEwLDI0LjkxVjMySDdhMSwxLDAsMCwwLDAsMkgyOWExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNGgyMmExLDEsMCwwLDAsMC0yaC0yMmExLDEsMCwxLDAsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC42NywzMmgtMjJhMSwxLDAsMCwwLDAsMmgyMmExLDEsMCwxLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwxNS42N0E2LjA3'@;
put 'LDYuMDcsMCwwLDAsMjUsMTEuMTJWNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZhMTEuNDgsMTEuNDgsMCwwLDAtMi45MSwxLjcyLDYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3'@;
put 'LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4LDAsMCwwLTIuOTEtMS43MlYxNy4zOUExMS40OCwxMS40OCwwLDAsMCwyMi41NSwxNS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguNjcsMzJoLTIy'@;
put 'YTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi42Nyw0SDIyLjQ1TDIzLjYsMkg2LjY3YTEsMSwwLDEsMCwwLDJaIiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLjUxLDIwLjI3YTYuMDcsNi4wNywwLDAsMC0yLjQ1LDQuNTV2NS4xMkgyNVYyNC44MmE2LjA3LDYuMDcsMCwwLDAtMi40NS00LjU1LDExLjQ4LDExLjQ4'@;
put 'LDAsMCwwLTIuOTEtMS43MlYxNy4zOWExMS40OCwxMS40OCwwLDAsMCwyLjkxLTEuNzJsLjMtLjI3aC0uNjJBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMC4wNnY1LjEyYTYuMDcsNi4wNywwLDAsMCwyLjQ1LDQuNTUsMTEuNDgsMTEuNDgsMCwwLDAsMi45MSwxLjcydjEuMTZB'@;
put 'MTEuNDgsMTEuNDgsMCwwLDAsMTIuNTEsMjAuMjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgu'@;
put 'NjcsMzJoLTIyYTEsMSwwLDAsMCwwLDJoMjJhMSwxLDAsMSwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYuNjcsNEgyMi43OGE3LjQ1LDcuNDUsMCwwLDEsLjg5LTJoLTE3YTEs'@;
put 'MSwwLDEsMCwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41NSwyMC4yN2ExMS40OCwxMS40OCwwLDAsMC0yLjkxLTEuNzJWMTcuMzlhMTEuNDgsMTEuNDgsMCwwLDAsMi45MS0x'@;
put 'LjcyQTYuMjUsNi4yNSwwLDAsMCwyNSwxMS41NSw3LjQ3LDcuNDcsMCwwLDEsMjIuNSw2SDEwLjA2djUuMTJhNi4wNyw2LjA3LDAsMCwwLDIuNDUsNC41NSwxMS40OCwxMS40OCwwLDAsMCwyLjkxLDEuNzJ2MS4xNmExMS40OCwxMS40OCwwLDAsMC0yLjkxLDEuNzIsNi4wNyw2LjA3LDAsMCww'@;
put 'LTIuNDUsNC41NXY1LjEySDI1VjI0LjgyQTYuMDcsNi4wNywwLDAsMCwyMi41NSwyMC4yN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksUi5DbHJTaGFwZU5vQWNjZXNzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwx'@;
put 'LDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFI'@;
put 'MjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4yNUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwu'@;
put 'MjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1'@;
put 'LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBw'@;
put 'b2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAxNy4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDItMlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVBMiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiwwLDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIyIiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIw'@;
put 'IiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksUi5DbHJTaGFwZUJhbGFuY2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEyYTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x'@;
put 'IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSww'@;
put 'LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIzLDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41'@;
put 'OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2Eu'@;
put 'OC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIz'@;
put 'LDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcuMjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0uNjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLFIuQ2xyU2hhcGVJZEJhZGdlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0LjIzLDQuMjMsMCwxLDAtNC4yMy00LjIzQTQuMjMsNC4yMywwLDAsMCwxOCwyMlptMC02Ljg2YTIuNjMsMi42MywwLDEsMS0yLjYz'@;
put 'LDIuNjNBMi42MywyLjYzLDAsMCwxLDE4LDE1LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNGEyLDIsMCwwLDAtMi0ySDE2YTIsMiwwLDAsMC0yLDJ2N2g4Wk0yMCw5SDE2VjRoNFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMwVjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNW'@;
put 'MzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCw2SDI0VjhoNFYzMkg4VjhoNFY2SDhBMiwy'@;
put 'LDAsMCwwLDYsOFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMjgsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIyYTQuMjMsNC4yMywwLDEsMC00LjIzLTQuMjNB'@;
put 'NC4yMyw0LjIzLDAsMCwwLDE4LDIyWm0wLTYuODZhMi42MywyLjYzLDAsMSwxLTIuNjMsMi42M0EyLjYzLDIuNjMsMCwwLDEsMTgsMTUuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwaDEuNlYyNy44N0E4LjMzLDguMzMsMCwwLDEsMTgsMjUuMjlhOC4zMyw4LjMzLDAsMCwxLDYuNCwyLjU5VjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45'@;
put 'LDAsMCwwLDEwLjI2LDI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOS44OSwxOS41Niw5SDE2VjRoNFY4LjI0bDItMy40NlY0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAs'@;
put 'MCwwLTIsMnY3aDQuNjRBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg0VjZIOEEyLDIsMCwwLDAsNiw4VjMy'@;
put 'YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIu'@;
put 'MjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMTgsMjJhNC4yMyw0LjIzLDAsMSwwLTQuMjMtNC4yM0E0LjIzLDQuMjMsMCwwLDAsMTgsMjJabTAtNi44NmEyLjYzLDIuNjMsMCwxLDEtMi42MywyLjYzQTIuNjMsMi42MywwLDAsMSwxOCwxNS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0YTIsMiwwLDAsMC0yLTJIMTZhMiwyLDAsMCwwLTIsMnY3aDhaTTIwLDlIMTZWNGg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBoMS42VjI3Ljg3QTguMzMsOC4zMywwLDAsMSwxOCwyNS4yOWE4LjMzLDguMzMsMCwwLDEsNi40LDIuNTlWMzBIMjZWMjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCww'@;
put 'LDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJWMzJIOFY4aDRWNkg4QTIsMiwwLDAsMCw2LDhWMzJhMiwyLDAs'@;
put 'MCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0yMSw0YTIsMiwwLDAsMC0yLTJIMTdhMiwyLDAsMCwwLTIsMnY2aDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI2LDI3YTEuMTMsMS4xMywwLDAsMC0uMjYuNzNWMzBIMjZW'@;
put 'MjcuN2ExLjEyLDEuMTIsMCwwLDAtLjI2LS43M0E5LjksOS45LDAsMCwwLDE4LDIzLjY5LDkuOSw5LjksMCwwLDAsMTAuMjYsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDZIMjNWOGg1VjMySDhWOGg1VjZI'@;
put 'OEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwyOCw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSw5Ljg5LDIxLDYuNVY0YTIsMiwwLDAsMC0yLTJI'@;
put 'MTdhMiwyLDAsMCwwLTIsMnY2aDRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC4yNiwyN2ExLjEzLDEuMTMsMCwwLDAtLjI2LjczVjMwSDI2VjI3LjdhMS4xMiwxLjEyLDAsMCwwLS4yNi0uNzNBOS45LDkuOSwwLDAsMCwxOCwyMy42OSw5LjksOS45LDAsMCwwLDEwLjI2LDI3WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOCwxNS40VjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTgiIGN5PSIxNy43NyIgcj0iNC4yMyIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNGEyLDIsMCwwLDAtMi0ySDE3YTIsMiwwLDAsMC0yLDJ2Nmg2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuMjYsMjdhMS4xMywxLjEzLDAsMCwwLS4yNi43M1YzMEgyNlYyNy43YTEuMTIsMS4xMiwwLDAsMC0uMjYtLjczQTkuOSw5LjksMCwwLDAsMTgsMjMuNjksOS45LDkuOSwwLDAsMCwxMC4yNiwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDEzLjIyVjMySDhWOGg1VjZIOEEyLDIsMCwwLDAsNiw4VjMyYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMy41QTcuNDksNy40OSwwLDAsMSwyOCwxMy4yMloiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+Jyks'@;
put 'Ui5DbHJTaGFwZVJlcGVhdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYsMTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAs'@;
put 'MjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4x'@;
put 'NywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxSLkNsclNoYXBlRmlsZUdyb3Vw'@;
put 'PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwxLTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg'@;
put 'eD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAsMCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYi'@;
put 'IGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAs'@;
put 'MCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYz'@;
put 'YTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwx'@;
put 'LDAsMCwwLDEsMWgxWiIvPicpLFIuQ2xyU2hhcGVQYXBlcmNsaXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEs'@;
put 'MiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDksMCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0'@;
put 'YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSwwLDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRh'@;
put 'Mi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQuNjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4y'@;
put 'OCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLFIuQ2xyU2hhcGVTaHJpbms9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEt'@;
put 'MS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAs'@;
put 'MS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksUi5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40NCwzMS45NGE3LjMxLDcuMzEsMCwwLDEtNS43LTExLjg4TDcuMzIsMTguNjRhOS4zLDkuMywwLDAsMCwxMy4x'@;
put 'LDEzLjExTDE5LDMwLjMzQTcuMjksNy4yOSwwLDAsMSwxNC40NCwzMS45NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LjM2LDEuNjdhNC4xMiw0LjEyLDAsMSwwLDQuMTEsNC4xMUE0LjEyLDQuMTIsMCww'@;
put 'LDAsMjUuMzYsMS42N1ptMCw2LjIzYTIuMTIsMi4xMiwwLDEsMSwyLjExLTIuMTJBMi4xMiwyLjEyLDAsMCwxLDI1LjM2LDcuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LjU2LDE4LjE4aC01YTEsMSww'@;
put 'LDAsMC0uMjQuMDVsMy4wOS0zLjU1YTIuODMsMi44MywwLDAsMC0uNjktNC4zM2wtOC00LjZhMSwxLDAsMCwwLTEuMTIuMDhMOS44Myw5LjU4QTEsMSwwLDAsMCw5LjY2LDExYTEsMSwwLDAsMCwuNzkuMzgsMSwxLDAsMCwwLC42MS0uMjFsNC4yNy0zLjM0LDMuMTEsMS43Ny01LjA4LDUuNzho'@;
put 'MGE5LjI4LDkuMjgsMCwwLDAtNC41MywxLjgzbDEuNDMsMS40M0E3LjMsNy4zLDAsMCwxLDIwLjQyLDI4LjgxbDEuNDIsMS40M2E5LjI3LDkuMjcsMCwwLDAsLjc3LTEwLjA2aDIuODJsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODgsMS4xMWguMTJhMSwxLDAsMCwwLDEtLjg4bC45LTcuNjJhMSwx'@;
put 'LDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjU2LDE4LjE4Wm0tNi4zNy03LjU2LDIuNTIsMS40NmEuNzkuNzksMCwwLDEsLjQuNTkuODEuODEsMCwwLDEtLjIuNjlMMTkuNzUsMTdBOS4xNyw5LjE3LDAsMCwwLDE2LDE1LjQ1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuNzcsMzEuOTRhNy4zMSw3LjMxLDAsMCwxLTUuNy0xMS44OEw3LjY1LDE4LjY0YTkuMyw5LjMsMCwwLDAsMTMuMSwxMy4xMWwtMS40Mi0xLjQyQTcuMjksNy4yOSwwLDAsMSwxNC43NywzMS45NFoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNjUsMi4xYTMuMTIsMy4xMiwwLDEsMCwzLjExLDMuMTJBMy4xMiwzLjEyLDAsMCwwLDI2LjY1LDIuMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjYuODEsMTguMThIMjEuNDdxLS4zMS0uMzMtLjY2LS42M2w0LjM4LTQuODZhMi4xNCwyLjE0LDAsMCwwLS41My0zLjI3TDIwLjksNy4yM2wwLDBMMTcuMDUsNS4wN2ExLDEsMCwwLDAtMS4xMS4wOEwxMS4xNSw4LjlhMSwxLDAsMCwwLDEuMjMsMS41OGw0LjI3LTMu'@;
put 'MzQsMi44NywxLjYzTDEzLjYsMTUuMzlhOS4zMyw5LjMzLDAsMCwwLTQuNDQsMS44MmwxLjQyLDEuNDNBNy4zLDcuMywwLDAsMSwyMC43NSwyOC44MWwxLjQzLDEuNDNBOS4yNyw5LjI3LDAsMCwwLDIzLDIwLjE4aDIuNzRsLS43Nyw2LjUxYTEsMSwwLDAsMCwuODcsMS4xMWguMTJhMSwxLDAs'@;
put 'MCwwLDEtLjg4bC45LTcuNjJhMSwxLDAsMCwwLS4yNS0uNzhBMSwxLDAsMCwwLDI2LjgxLDE4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDEx'@;
put 'aC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEsMCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYt'@;
put 'LjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00'@;
put 'LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwzMy4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUu'@;
put 'MzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZVNvcnRC'@;
put 'eT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEs'@;
put 'MSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywyMUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2'@;
put 'SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0x'@;
put 'LjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgs'@;
put 'Ny40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAtMS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEsMCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwx'@;
put 'LDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksUi5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSww'@;
put 'LDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3'@;
put 'TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEu'@;
put 'ODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEs'@;
put 'MUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEs'@;
put 'MSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAsMCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlQnJp'@;
put 'ZWZjYXNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwxLDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0z'@;
put 'Myw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSwwLDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0z'@;
put 'LDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAsMCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4'@;
put 'QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYs'@;
put 'MCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBW'@;
put 'MjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZUNvbG9yUGlja2VyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCww'@;
put 'LDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2EyLjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQu'@;
put 'MDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgz'@;
put 'TDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAsMS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44'@;
put 'MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQuMDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDIt'@;
put 'MS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNM'@;
put 'MTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBI'@;
put 'MjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCwwLDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQyLTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMz'@;
put 'LjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhBMS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMzSDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC00IiAvPicpLFIuQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFIuQ2xyU2hhcGVGaWx0ZXIyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCwwLDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGgg'@;
put 'ZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksUi5DbHJTaGFwZU1vb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0xLS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42'@;
put 'Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAsMzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMs'@;
put 'MTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCww'@;
put 'LDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZVN1bj0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0xOCwyOS42OWExLDEsMCwwLDAtMSwxdjMuNGExLDEsMCwwLDAs'@;
put 'Miwwdi0zLjRBMSwxLDAsMCwwLDE4LDI5LjY5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNOC4zMiw5Ljc0QTEsMSwwLDAsMCw5LDEwYTEsMSwwLDAsMCwuNzEtLjI5LDEsMSwwLDAsMCwwLTEuNDJMNy4zMyw1LjkyQTEsMSwwLDAs'@;
put 'MCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNjgsMjYuMjZhMSwxLDAsMSwwLTEuNDIsMS40MmwyLjQxLDIuNGExLDEsMCwwLDAsLjcxLjMsMSwxLDAsMCwwLC43LS4zLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNNi4zMSwxOGExLDEsMCwwLDAtMS0xSDEuOTFhMSwxLDAsMCwwLDAsMmgzLjRBMSwxLDAsMCwwLDYuMzEsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0'@;
put 'aCBkPSJNMzQuMDksMTdoLTMuNGExLDEsMCwxLDAsMCwyaDMuNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTguMzIsMjYuMjZsLTIuNCwyLjQxYTEsMSwwLDAsMCwuNywxLjcxLDEsMSwwLDAsMCwuNzEtLjNs'@;
put 'Mi40MS0yLjRhMSwxLDAsMSwwLTEuNDItMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNywxMGExLDEsMCwwLDAsLjcxLS4yOWwyLjQtMi40MWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQxLDBsLTIuNDEsMi40YTEs'@;
put 'MSwwLDAsMCwwLDEuNDJBMSwxLDAsMCwwLDI3LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHBhdGggZD0iTTE4LjEzLDcuNzVhMTAuMTMsMTAuMTMsMCwxLDAsMTAsMTAuMTNBMTAuMDgsMTAuMDgsMCwwLDAsMTguMTMsNy43NVptMCwxOC4yNWE4'@;
put 'LjEzLDguMTMsMCwxLDEsOC04LjEyQTguMDgsOC4wOCwwLDAsMSwxOC4xMywyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwYXRoIGQ9Ik0xOCw2LjQyYTEsMSwwLDAsMCwxLTFWMS45MWExLDEsMCwwLDAtMiwwVjUuNDJBMSwxLDAsMCwwLDE4LDYu'@;
put 'NDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyOS41OGExLDEsMCwwLDAtMSwxdjMuNTFhMSwxLDAsMCwwLDIsMFYzMC41OEExLDEsMCwwLDAsMTgsMjkuNThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAv'@;
put 'PjxwYXRoIGQ9Ik04LjQsOS44MUExLDEsMCwwLDAsOS44MSw4LjRMNy4zMyw1LjkyQTEsMSwwLDAsMCw1LjkyLDcuMzNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yNy42LDI2LjE5YTEsMSwwLDAsMC0xLjQxLDEuNDFsMi40OCwyLjQ4YTEs'@;
put 'MSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LjQyLDE4YTEsMSwwLDAsMC0xLTFIMS45MWExLDEsMCwwLDAsMCwySDUuNDJBMSwxLDAsMCwwLDYuNDIsMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zNC4wOSwxN0gzMC41OGExLDEsMCwwLDAsMCwyaDMuNTFhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiIC8+PHBhdGggZD0iTTguNCwyNi4xOSw1LjkyLDI4LjY3YTEsMSwwLDAsMCwxLjQxLDEuNDFM'@;
put 'OS44MSwyNy42QTEsMSwwLDAsMCw4LjQsMjYuMTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03IiAvPjxwYXRoIGQ9Ik0yNy42LDkuODFsMi40OC0yLjQ4YTEsMSwwLDAsMC0xLjQxLTEuNDFMMjYuMTksOC40QTEsMSwwLDAsMCwyNy42LDkuODFaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC04IiAvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjEwIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC05IiAvPicpLFIuQ2xyU2hhcGVXYW5kPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwy'@;
put 'LjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjhaTTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEzbC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwx'@;
put 'LjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5'@;
put 'QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSwwLDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEuMTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYs'@;
put 'MS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksUi5DbHJTaGFwZUN1cnNvck1vdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwx'@;
put 'LDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVhMSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQx'@;
put 'LDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwx'@;
put 'LDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlQ2xvbmU9KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIz'@;
put 'IDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwx'@;
put 'LDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2'@;
put 'NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlRGV0YWlscz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMy'@;
put 'LDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCwwLDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBk'@;
put 'PSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2Ex'@;
put 'LDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLG0uY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQi'@;
put 'IHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFIuQ2xyU2hhcGVFcmFzZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEy'@;
put 'YTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMu'@;
put 'OTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44Miww'@;
put 'LDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwyOC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCww'@;
put 'LDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgzLDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlTGFuZHNjYXBlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpt'@;
put 'MCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44Miww'@;
put 'LDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNsMS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcs'@;
put 'My43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhh'@;
put 'MSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4wNiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywx'@;
put 'NS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZVBhc3RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2Mmgy'@;
put 'VjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMw'@;
put 'LDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYs'@;
put 'NkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEy'@;
put 'LDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9'@;
put 'IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBIMjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0'@;
put 'IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLFIuQ2xyU2hhcGVQb3J0cmFpdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAs'@;
put 'MC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTguOCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCww'@;
put 'LDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAs'@;
put 'MjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAsMCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAs'@;
put 'MCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEuMzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4'@;
put 'LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlVHJlZVZpZXc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDMySDExYTEsMSwwLDAsMS0xLTFWMjdhMSwxLDAsMCwxLDEtMWg0YTEsMSwwLDAsMSwx'@;
put 'LDF2NEExLDEsMCwwLDEsMTUsMzJabS0zLTJoMlYyOEgxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxNkgxMWExLDEsMCwwLDAtMSwxdjEuMkg1LjhWMTJIN2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDcsNkgzQTEsMSww'@;
put 'LDAsMCwyLDd2NGExLDEsMCwwLDAsMSwxSDQuMlYyOS44aDYuMzZhLjguOCwwLDAsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaTTQsOEg2djJINFpNMTQsMjBIMTJWMThoMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNCw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzM0ExLDEsMCwwLDAsMzQsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOEgxOHYySDMzYTEsMSwwLDAsMCwwLTJa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMsMjhIMTh2MkgzM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHJlY3QgeD0iMTAiIHk9IjI2IiB3aWR0aD0iNiIgaGVp'@;
put 'Z2h0PSI2IiByeD0iMSIgcnk9IjEiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE2SDExYTEsMSwwLDAsMC0xLDF2MS4ySDUuOFYxMkg3YTEsMSwwLDAsMCwxLTFWN0ExLDEsMCwwLDAsNyw2SDNBMSwxLDAsMCwwLDIsN3Y0YTEsMSwwLDAs'@;
put 'MCwxLDFINC4yVjI5LjhIMTFhLjguOCwwLDEsMCwwLTEuNkg1LjhWMTkuOEgxMFYyMWExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxN0ExLDEsMCwwLDAsMTUsMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw4SDEwdjJIMzNh'@;
put 'MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDE4SDE4djJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTMzLDI4SDE4djJIMzNhMSwx'@;
put 'LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksUi5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0y'@;
put 'LjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEu'@;
put 'NzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAsMCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYx'@;
put 'LDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIuMzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5'@;
put 'YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2Ex'@;
put 'LjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEs'@;
put 'My4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTks'@;
put 'MCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUz'@;
put 'LTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4yNVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40'@;
put 'MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgxLjh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0'@;
put 'YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVGaWxlWmlwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4y'@;
put 'VjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIwLjNcblx0XHRjMSwwLDEuOC0wLjcsMS44LTEuN0MzMCwzMC4zLDMwLDMwLjIsMzAsMzAuMnogTTIyLDYuNmw1LjYsNS40SDIyVjYu'@;
put 'NnogTTI4LDMwSDcuOUw4LDZoMTJ2OGg4VjMweiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTEyLDI0YzAsMS43LDEuMywzLDMsM3MzLTEuMywzLTN2LTRoLTZWMjR6IE0xMy40LDI0di0yLjZoMy4yVjI0YzAuMSwwLjktMC42LDEuNy0x'@;
put 'LjUsMS43Yy0wLjksMC4xLTEuNy0wLjYtMS43LTEuNVxuXHRcdEMxMy40LDI0LjIsMTMuNCwyNC4xLDEzLjQsMjR6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTguMiw5YzAtMC42LTAuNC0xLTEtMUgxNXYyaDIuMkMxNy44LDEwLDE4'@;
put 'LjIsOS42LDE4LjIsOXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi43LDEwYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxSDE1di0ySDEyLjd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48'@;
put 'cGF0aCBkPSJNMTcuMiwxNGMwLjYsMCwxLTAuNCwxLTFzLTAuNC0xLTEtMUgxNXYySDE3LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTEuNywxNWMwLDAuNiwwLjQsMSwxLDFIMTV2LTJoLTIuM0MxMi4yLDE0LDExLjcsMTQuNCwx'@;
put 'MS43LDE1eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE3LjIsMThjMC42LDAsMS0wLjQsMS0xcy0wLjQtMS0xLTFIMTV2MkgxNy4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0i'@;
put 'TTE1LDI1LjZjMC45LDAsMS42LTAuNywxLjYtMS42di0yLjZoLTMuMlYyNEMxMy40LDI0LjksMTQuMSwyNS42LDE1LDI1LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45LDRINy44QzYuOCw0LDYsNC45LDYsNS45djI0LjJjMCwxLDAu'@;
put 'OCwxLjksMS44LDEuOWgyMC4zYzEsMCwxLjgtMC45LDEuOC0xLjlWMTEuOUwyMS45LDR6IE0xOCwyNGMwLDEuNy0xLjMsMy0zLDNcblx0XHRzLTMtMS4zLTMtM3YtNGg2VjI0eiBNMTcuMiwxMmMwLjYsMCwxLDAuNCwxLDFzLTAuNCwxLTEsMUgxNXYyaDIuMmMwLjYsMCwxLDAuNCwxLDFzLTAu'@;
put 'NCwxLTEsMUgxNXYtMmgtMi4yYy0wLjYsMC0xLTAuNC0xLTFcblx0XHRzMC40LTEsMS0xSDE1di0yaC0yLjJjLTAuNiwwLTEtMC40LTEtMXMwLjQtMSwxLTFIMTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlRmlsdGVyT2ZmPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgs'@;
put 'OC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRM'@;
put 'MTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAuMWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0'@;
put 'aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwyMy45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwx'@;
put 'LjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFsOCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAv'@;
put 'PicpLFIuQ2xyU2hhcGVSZWN5Y2xlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCwwLjQtMC4xLDAuNS0wLjFsNy00LjFjMC4zLTAuMiwwLjUtMC41LDAuNS0wLjljMC0wLjQtMC4yLTAuNy0wLjUtMC45TDExLjksMTBc'@;
put 'blx0XHRMMTQsNi4yYzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjNjMCwwLDAsMCwwLjEsMGMwLjQtMC4zLDAuNS0wLjksMC4zLTEuM1xuXHRcdGMtMC42LTEtMS40LTEuOS0yLjQtMi40Yy0zLTEuNi02LjctMC42LTgu'@;
put 'MywyLjRMOS42LDkuOWMtMC4zLDAuNS0wLjEsMS4xLDAuMywxLjRsMiwxLjJsLTQsMi40VjguMmMwLTAuNi0wLjQtMS0xLTFcblx0XHRDNi40LDcuMyw2LDcuNyw2LDguM3Y4LjNDNiwxNi45LDYuMiwxNy4yLDYuNCwxNy40eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+PHBhdGggZD0iTTMyLjEsMjFsLTMuNS02LjJjLTAuMS0wLjItMC40LTAuNC0wLjYtMC41Yy0wLjMtMC4xLTAuNSwwLTAuOCwwLjFsLTIuMiwxLjNWMTFsNS41LDMuM2MwLjEsMCwwLjEsMC4xLDAuMiwwLjFcblx0XHRjMC41LDAuMiwxLjEsMCwxLjMtMC41YzAuMi0wLjUsMC0x'@;
put 'LjEtMC41LTEuM2wtNy00LjJjLTAuMy0wLjItMC43LTAuMi0xLDBDMjMuMSw4LjUsMjMsOC44LDIzLDkuMnY4LjNjMCwwLjQsMC4xLDAuOCwwLjQsMVxuXHRcdGMwLjMsMC4yLDAuNywwLjIsMSwwbDIuOS0xLjdsMyw1LjNjMC43LDEuMywwLjcsMi44LDAsNC4xYy0wLjYsMS4yLTEuOSwxLjkt'@;
put 'My4yLDEuOWgtMC45Yy0wLjUsMC0xLjIsMC40LTEuMiwxXG5cdFx0YzAuMSwwLjYsMC42LDEsMS4yLDFoMC45YzIuMSwwLDQtMS4xLDUtMi45QzMzLjIsMjUuMiwzMy4yLDIyLjksMzIuMSwyMXoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9'@;
put 'Ik0yMi40LDI4LjJsLTctNC4yYy0wLjMtMC4yLTAuNy0wLjItMSwwYy0wLjMsMC4yLTAuNCwwLjUtMC40LDAuOXYzLjNIOS4xYy0xLjUtMC4xLTIuOS0wLjktMy42LTIuM1xuXHRcdGMtMC44LTEuNC0wLjgtMy4yLDAtNC42YzAuMy0wLjUsMC4xLTEuMS0wLjQtMS40Yy0wLjUtMC4zLTEuMS0w'@;
put 'LjEtMS40LDAuNGMtMS4yLDIuMS0xLjEsNC42LDAuMSw2LjZDNC45LDI4LjgsNywzMCw5LjIsMzBIMTVcblx0XHRjMC42LDAsMS0wLjQsMS0xdi0yLjRsNCwyLjRsLTUuNiwzLjNjLTAuMywwLjItMC41LDAuNS0wLjUsMC45YzAsMC42LDAuNSwxLDEsMWMwLjIsMCwwLjMtMC4xLDAuNS0wLjJs'@;
put 'Ny00LjJcblx0XHRjMC4yLTAuMSwwLjMtMC4yLDAuNC0wLjRDMjMuMSwyOSwyMi45LDI4LjQsMjIuNCwyOC4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIwLjgsMy4xYy0zLTEuNi02LjctMC42LTguNCwyLjRsLTIuMiwzLjhsLTIt'@;
put 'MS4xQzguMiw4LDgsOCw3LjksOEM3LjQsOCw3LDguNCw3LDguOXY3LjJjMCwwLjMsMC4xLDAuNiwwLjQsMC44XG5cdFx0YzAuMSwwLjEsMC4zLDAuMSwwLjQsMC4xYzAuMiwwLDAuMywwLDAuNC0wLjFsNi4zLTMuNmMwLjMtMC4yLDAuNC0wLjQsMC40LTAuOGMwLTAuMy0wLjItMC42LTAuNC0w'@;
put 'LjhMMTIsMTAuM2wyLjItMy44XG5cdFx0YzAuNC0wLjcsMS0xLjMsMS43LTEuN2MyLTEuMSw0LjUtMC4zLDUuNiwxLjdjMC4zLDAuNSwwLjksMC42LDEuNCwwLjRjMC41LTAuMywwLjYtMC45LDAuNC0xLjRDMjIuNiw0LjUsMjEuOCwzLjYsMjAuOCwzLjF6IiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMi4yLDIxLjFsLTMtNS4zbDIuMy0xLjNjMC4zLTAuMiwwLjQtMC40LDAuNC0wLjhjMC0wLjMtMC4yLTAuNi0wLjQtMC44bC02LjItMy42Yy0wLjEtMC4xLTAuMy0wLjEtMC40LTAuMVxuXHRcdGMtMC41LDAtMC45LDAuNC0wLjksMC45'@;
put 'djcuMmMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4yLDAsMC4zLTAuMSwwLjQtMC4xbDIuMi0xLjNsMyw1LjNcblx0XHRjMC43LDEuMiwwLjcsMi44LDAsNGMtMC43LDEuMi0xLjksMS45LTMuMiwxLjloLTAuOWMtMC42LDAtMSwwLjQtMSwxYzAsMC42'@;
put 'LDAuNCwxLDEsMWgwLjljMi4xLDAsNC0xLjEsNS0zXG5cdFx0QzMzLjIsMjUuMywzMy4yLDIzLDMyLjIsMjEuMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjcsMjguNGwtNi4yLTMuNmMtMC4xLTAuMS0wLjMtMC4xLTAuNC0wLjFjLTAu'@;
put 'NSwwLTAuOSwwLjQtMC45LDAuOXYyLjZIOS4zYy0xLjUsMC0yLjktMC44LTMuNi0yLjFcblx0XHRjLTAuOC0xLjQtMC44LTMuMSwwLTQuNWMwLjMtMC41LDAuMS0xLjEtMC40LTEuNGMtMC41LTAuMy0xLjEtMC4xLTEuNCwwLjRjLTEuMiwyLTEuMiw0LjUsMCw2LjVjMS4xLDEuOSwzLjEsMy4x'@;
put 'LDUuNCwzLjFoNC44djIuNlxuXHRcdGMwLDAuMywwLjIsMC42LDAuNCwwLjhjMC4xLDAuMSwwLjMsMC4xLDAuNCwwLjFjMC4xLDAsMC4zLDAsMC40LTAuMWw2LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlVHJlZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYs'@;
put 'MC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEu'@;
put 'NGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgs'@;
put 'MjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAuOCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0x'@;
put 'LDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQtMC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCww'@;
put 'LDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAu'@;
put 'NCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlRmlzaD0oMCxtLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43'@;
put 'NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEuOTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwx'@;
put 'OGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0uMTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkz'@;
put 'LDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4xMywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVGb3JtPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSwwLDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEsMCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEyLjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4w'@;
put 'NiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAsMCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0'@;
put 'YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCww'@;
put 'LTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCwwLDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwy'@;
put 'OC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxSLkNsclNoYXBlRnVlbD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIs'@;
put 'MzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEuMTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwu'@;
put 'ODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgy'@;
put 'Mi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5'@;
put 'LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSww'@;
put 'LDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLFIuQ2xyU2hhcGVTbm93Zmxha2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LjA1LDMzLjYxYTEsMSwwLDAsMS0xLTFWMy4zN2ExLDEsMCwxLDEsMS45NSwwVjMyLjYz'@;
put 'QTEsMSwwLDAsMSwxOC4wNSwzMy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOC4wNiwxMC4wNywxNC41Miw2LjU0YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMGwyLjEzLDIuMTIsMi4xMi0yLjEyYTEsMSwwLDAs'@;
put 'MSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMC44NSwzMS4xN2ExLDEsMCwwLDEtLjctLjI5TDE4LDI4Ljc2LDE1LjksMzAuODhhMSwxLDAsMCwxLTEuNDEsMCwxLDEsMCwwLDEsMC0xLjQy'@;
put 'TDE4LDI1LjkzbDMuNTQsMy41M2ExLDEsMCwwLDEsMCwxLjQyQTEsMSwwLDAsMSwyMC44NSwzMS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC45MiwyNi41YTEsMSwwLDAsMS0uNS0uMTNsLTI2LTE1QTEsMSwwLDAsMSw0LjA3'@;
put 'LDEwYTEsMSwwLDAsMSwxLjM3LS4zNmwyNiwxNWExLDEsMCwwLDEtLjUsMS44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDE1LjM3YTEsMSwwLDAsMS0uMjYtMmwyLjktLjc4TDcuODQsOS43M2ExLDEsMCwxLDEsMS45My0uNTJM'@;
put 'MTEuMDcsMTQsNi4yNCwxNS4zM0EuODIuODIsMCwwLDEsNiwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNy4wNSwyNy41NGExLDEsMCwwLDEtMS0uNzVMMjQuOCwyMmw0LjgyLTEuM2ExLDEsMCwxLDEsLjUyLDEuOTNsLTIu'@;
put 'OS43OC43OCwyLjlhMSwxLDAsMCwxLS43MSwxLjIyQS43NS43NSwwLDAsMSwyNy4wNSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik00Ljk0LDI2LjVhMSwxLDAsMCwxLS41LTEuODdsMjYtMTVhMSwxLDAsMCwxLDEuMzYuMzYs'@;
put 'MSwxLDAsMCwxLS4zNiwxLjM3bC0yNiwxNUExLDEsMCwwLDEsNC45NCwyNi41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBhdGggZD0iTTguODEsMjcuNTRhLjc1Ljc1LDAsMCwxLS4yNiwwLDEsMSwwLDAsMS0uNzEtMS4yMmwuNzgtMi45LTIuOS0u'@;
put 'NzhBMSwxLDAsMCwxLDUsMjEuMzhhMSwxLDAsMCwxLDEuMjMtLjcxTDExLjA3LDIybC0xLjMsNC44MkExLDEsMCwwLDEsOC44MSwyNy41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPjxwYXRoIGQ9Ik0yOS44OCwxNS4zN2EuODIuODIsMCwwLDEtLjI2'@;
put 'LDBMMjQuOCwxNGwxLjI5LTQuODNBMSwxLDAsMSwxLDI4LDkuNzNsLS43OCwyLjg5LDIuOS43OGExLDEsMCwwLDEtLjI2LDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxSLkNsclNoYXBlVGFibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0i'@;
put 'TTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEs'@;
put 'MCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEtMVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEs'@;
put 'MCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMzYTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxSLkNsclNo'@;
put 'YXBlVm9sdW1lPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEtLjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2'@;
put 'bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4'@;
put 'Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEs'@;
put 'MCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgx'@;
put 'OGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxSLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwx'@;
put 'OCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdh'@;
put 'MSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMuMSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTYiIC8+JyksUi5DbHJTaGFwZUNpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZURvdENpcmNsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0'@;
put 'aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQs'@;
put 'MTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVCZXRhPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjIxLDE0LjA3aDNhMS42MSwxLjYxLDAsMCwxLDEuODEsMS41LDEuNDQsMS40NCwwLDAsMS0uODQs'@;
put 'MS4zNCwxLjY3LDEuNjcsMCwwLDEsMS4xLDEuNTMsMS43NSwxLjc1LDAsMCwxLTIsMS42M0g3LjIxWm0yLjcxLDIuNDJjLjQ4LDAsLjgyLS4yOC44Mi0uNjdzLS4zNC0uNjUtLjgyLS42NUg4LjQ5djEuMzJabS4yLDIuNDhhLjc1Ljc1LDAsMSwwLDAtMS40N0g4LjQ5VjE5WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE0LjU1LDE1LjIzdjEuMmgzdjEuMTZoLTN2MS4zMmgzLjMzdjEuMTZIMTMuMjZ2LTZoNC42MnYxLjE2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGgg'@;
put 'ZD0iTTIwLjQxLDE1LjIzSDE4LjU0VjE0LjA3aDV2MS4xNkgyMS43djQuODRIMjAuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMjgsMTkuMTJIMjUuMzJsLS4zOC45NUgyMy41bDIuNDQtNmgxLjQ0bDIuNDUsNkgyOC4zOFpN'@;
put 'MjcuNTUsMThsLS44OS0yLjE5TDI1Ljc3LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTguMDYsMzBhLjg0Ljg0LDAsMCwxLS4zOC0uMDhBMSwxLDAsMCwxLDcuMDYsMjlWMjVoLTRhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCww'@;
put 'LDEsMS0xaDMwYTEsMSwwLDAsMSwxLDFWMjRhMSwxLDAsMCwxLTEsMUgxMy40OEw4Ljc3LDI5LjcxQTEsMSwwLDAsMSw4LjA2LDMwWm0tNC03aDRhMSwxLDAsMCwxLDEsMXYyLjU5bDMuMy0zLjNhMSwxLDAsMCwxLC43LS4yOWgxOVYxMWgtMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNSIvPlxuXG4gIDxwb2x5Z29uIHBvaW50cz0iMjUuOCwxOCAyNy41LDE4IDI2LjcsMTUuOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXHQ8cGF0aCBkPSJNMTAuNCwxNy41Yy0wLjEsMC0wLjIsMC0wLjMsMEg4LjVWMTlsMS42LDBj'@;
put 'MC40LDAuMSwwLjgtMC4yLDAuOS0wLjZDMTEuMSwxOCwxMC44LDE3LjYsMTAuNCwxNy41eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuXHQ8cGF0aCBkPSJNMTAuNywxNS44YzAtMC40LTAuMy0wLjctMC44LTAuN0g4LjV2MS4zaDEuNEMxMC40LDE2LjUsMTAu'@;
put 'NywxNi4yLDEwLjcsMTUuOHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblx0PHBhdGggZD0iTTMzLjEsOWgtMzBjLTAuNiwwLTEsMC40LTEsMXYxNGMwLDAuNiwwLjQsMSwxLDFoNHY0YzAsMC40LDAuMiwwLjgsMC42LDAuOUM3LjgsMzAsNy45LDMwLDguMSwz'@;
put 'MGMwLjMsMCwwLjUtMC4xLDAuNy0wLjNcblx0XHRsNC43LTQuN2gxOS42YzAuNiwwLDEtMC40LDEtMVYxMEMzNC4xLDkuNCwzMy42LDksMzMuMSw5eiBNMTAuNCwyMC4xYy0wLjEsMC0wLjEsMC0wLjIsMEg3LjJ2LTZoM2MwLjktMC4xLDEuNywwLjUsMS44LDEuNFxuXHRcdGMwLDAsMCwwLjEs'@;
put 'MCwwLjFjMCwwLjYtMC4zLDEuMS0wLjgsMS4zYzAuNiwwLjIsMS4xLDAuOCwxLjEsMS41QzEyLjIsMTkuNCwxMS40LDIwLjEsMTAuNCwyMC4xeiBNMTcuOSwxNS4yaC0zLjN2MS4yaDN2MS4yaC0zdjEuM1xuXHRcdGgzLjN2MS4yaC00LjZ2LTZoNC42VjE1LjJ6IE0yMS43LDIwLjFoLTEuM3Yt'@;
put 'NC44aC0xLjl2LTEuMmg1djEuMmgtMS44VjIwLjF6IE0yOC40LDIwLjFsLTAuNC0xaC0yLjdsLTAuNCwxaC0xLjRsMi40LTZoMS40bDIuNSw2XG5cdFx0SDI4LjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00Ii8+XG4nKSxSLkNsclNoYXBlRmlyc3RBaWQ9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0'@;
put 'LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43'@;
put 'YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMsMS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwx'@;
put 'LjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYuOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFW'@;
put 'NC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41'@;
put 'VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUs'@;
put 'MCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxSLkNsclNoYXBlQ29sb3JQYWxldHRlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS41NCwyMy4wNWEzLjIyLDMuMjIsMCwwLDEtMy0x'@;
put 'Ljc3QTMuMDUsMy4wNSwwLDAsMSwxOC41LDE5YTMuNzQsMy43NCwwLDAsMSwxLjk1LTIuMDZBMy40LDMuNCwwLDAsMSwyNSwxOC4zYTMsMywwLDAsMSwuMDgsMi4zMiwzLjY5LDMuNjksMCwwLDEtMiwyLjA3QTMuODUsMy44NSwwLDAsMSwyMS41NCwyMy4wNVptLjU0LTQuOTFhMi40MSwyLjQx'@;
put 'LDAsMCwwLTEsLjIxaDBBMi4xMywyLjEzLDAsMCwwLDIwLDE5LjUxYTEuMzcsMS4zNywwLDAsMCwwLDEuMDksMS44MSwxLjgxLDAsMCwwLDIuNDUuNjMsMi4xLDIuMSwwLDAsMCwxLjEyLTEuMTUsMS40LDEuNCwwLDAsMCwwLTEuMUExLjU5LDEuNTksMCwwLDAsMjIuMDgsMTguMTRabS0xLjI5'@;
put 'LS41MmgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE2LjE5LDMzLjg3QTEzLjcyLDEzLjcyLDAsMCwxLDYuNCwzMCwxMy44NiwxMy44NiwwLDAsMSwyLDIwYzAtNC40LDItOC44NCw1LjY4LTEyLjVhMTguMiwxOC4yLDAsMCwx'@;
put 'LDEzLjEtNS4zN2guMTJjMy4zMywwLDYuODUsMS40OSw3LjI0LDQuNzMuMjEsMS43Ny0uNTksMy40Ny0xLjI5LDUtLjU1LDEuMTctMS4xMSwyLjM5LS43MiwyLjgxczEsLjEyLDIuMDktLjJhNi4yNyw2LjI3LDAsMCwxLDMuMzgtLjM2LDMsMywwLDAsMSwxLjg3LDEuNTZjLjk0LDEuODMuNDcs'@;
put 'NC42Ny0uMjMsNi41NGgwQTE3LjM4LDE3LjM4LDAsMCwxLDI5LDI4Ljc0LDE5LjQzLDE5LjQzLDAsMCwxLDE2LjE5LDMzLjg3Wk0yMC43OCw0LjE2QTE2LjIyLDE2LjIyLDAsMCwwLDkuMDksOUM1Ljc5LDEyLjIzLDQsMTYuMTYsNCwyMEExMS45MiwxMS45MiwwLDAsMCw3LjgsMjguNmM1LjM4'@;
put 'LDUuMjUsMTQuNjIsMy41NSwxOS44Ny0xLjMzYTE1LjUyLDE1LjUyLDAsMCwwLDMuNy01Ljc1aDBjLjctMS45Ljg0LTMuOTIuMzItNC45MmExLDEsMCwwLDAtLjYxLS41NSw0Ljg2LDQuODYsMCwwLDAtMi4yOS4zNWMtMS4zMS4zOS0zLC44OS00LjEyLS4zNS0xLjMyLTEuNC0uNDYtMy4yNS4z'@;
put 'Ny01YTcuOTMsNy45MywwLDAsMCwxLjExLTMuOWMtLjI0LTItMi44MS0yLjk1LTUuMjYtM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy44NywyNi42NUEyLjU5LDIuNTksMCwwLDAsMjIuMzUsMjVMMjIsMjQuOWwtLjQ2LDEu'@;
put 'NTMuMTYsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1cy0xLjcxLS4wNy0xLjg4LS42NmwtMS41NC40M2gwYTIuODMsMi44MywwLDAsMCwyLjg0LDEuOTEsNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwyMy44NywyNi42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0xNS4wNywyNS41OWgwYTIuNzMsMi43MywwLDAsMC0yLjI0LTEuODRsLS4yNywxLjU4YTEuMTIsMS4xMiwwLDAsMSwxLC43Yy4xNy41OS0uNDEsMS4zLTEuMjYsMS41NEExLjkyLDEuOTIsMCwwLDEsMTEsMjcuNTJhMSwxLDAs'@;
put 'MCwxLS42LS42MXMwLS4wOSwwLS4xM2wtMS41OC4xNmEyLDIsMCwwLDAsLjA2LjQxQTIuNTksMi41OSwwLDAsMCwxMC4zNywyOWEzLjM2LDMuMzYsMCwwLDAsMS4zMS4yNSwzLjcsMy43LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxNS4wNywyNS41OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0xMC43OCwxOS4xN2EyLjU5LDIuNTksMCwwLDAtMS41Mi0xLjY1LDIuOTEsMi45MSwwLDAsMC0uNS0uMTZsLS4zNywxLjU2YTEuMjEsMS4yMSwwLDAsMSwuMjUuMDgsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwx'@;
put 'LjU1cy0xLjcxLS4wNi0xLjg4LS42NmEuODYuODYsMCwwLDEsMC0uMzlsLTEuNTYtLjM0YTIuNCwyLjQsMCwwLDAsMCwxLjE2QTIuODMsMi44MywwLDAsMCw3LjQsMjIuODNhNCw0LDAsMCwwLDEtLjE0QTMsMywwLDAsMCwxMC43OCwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC01Ii8+XG4gIDxwYXRoIGQ9Ik0xMy40NSwxMS40YTIuNTksMi41OSwwLDAsMC0xLjUyLTEuNjUsMS4xNywxLjE3LDAsMCwwLS4yLS4wNmwtLjUyLDEuNTFhLjM4LjM4LDAsMCwxLC4xLDAsMSwxLDAsMCwxLC42LjZjLjE3LjYtLjQxLDEuMzEtMS4yNiwxLjU1YTIuMDYs'@;
put 'Mi4wNiwwLDAsMS0xLjI4LS4wNSwxLDEsMCwwLDEtLjYtLjYxLjg1Ljg1LDAsMCwxLDAtLjMybC0xLjU4LS4xOWEyLjMsMi4zLDAsMCwwLC4wNi45NEEyLjU2LDIuNTYsMCwwLDAsOC43NSwxNC44YTMuMzcsMy4zNywwLDAsMCwxLjMxLjI2LDQsNCwwLDAsMCwxLS4xNEEzLDMsMCwwLDAsMTMu'@;
put 'NDUsMTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxwYXRoIGQ9Ik0yMSw2Ljc4YTIuNTYsMi41NiwwLDAsMC0xLjUyLTEuNjVsLS4zLS4xTDE4LjcsNi41NmwuMTUsMGExLDEsMCwwLDEsLjYuNjFjLjE3LjYtLjQxLDEuMy0xLjI2LDEuNTRz'@;
put 'LTEuNzEtLjA2LTEuODgtLjY1YS45LjksMCwwLDEsLjA2LS41OEwxNC44OSw2LjlhMi40NywyLjQ3LDAsMCwwLS4xMiwxLjYzLDIuODQsMi44NCwwLDAsMCwyLjg0LDEuOTEsMy41OCwzLjU4LDAsMCwwLDEtLjE1QTMsMywwLDAsMCwyMSw2Ljc4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTciLz5cblxuICA8cGF0aCBkPSJNMzIuMjMsMTQuODljLTIuMS0uNTYtNC45MywxLjgtNi4zNC4zLTEuNzEtMS44MiwyLjI3LTUuNTMsMS44Ni04LjkyLS4zMy0yLjc4LTMuNTEtNC4wOC02LjY2LTQuMUExOC41LDE4LjUsMCwwLDAsNy43NCw3LjU5Yy02LjY0LDYu'@;
put 'NTktOC4wNywxNi0xLjM3LDIyLjQ4LDYuMjEsNiwxNi42MSw0LjIzLDIyLjY3LTEuNGExNy43MywxNy43MywwLDAsMCw0LjIyLTYuNTRDMzQuMzQsMTkuMjMsMzQuNDQsMTUuNDksMzIuMjMsMTQuODlaTTkuNCwxMC41N2EyLjIzLDIuMjMsMCwwLDEsMi44NywxLjIxLDIuMjIsMi4yMiwwLDAs'@;
put 'MS0xLjgxLDIuNTNBMi4yMiwyLjIyLDAsMCwxLDcuNTksMTMuMSwyLjIzLDIuMjMsMCwwLDEsOS40LDEwLjU3Wk01LjA3LDIwLjgyYTIuMjIsMi4yMiwwLDAsMSwxLjgyLTIuNTNBMi4yMiwyLjIyLDAsMCwxLDkuNzUsMTkuNSwyLjIzLDIuMjMsMCwwLDEsNy45NCwyMiwyLjI0LDIuMjQsMCww'@;
put 'LDEsNS4wNywyMC44MlptNyw4LjMzYTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjFBMi4yMywyLjIzLDAsMCwxLDExLDI1LjQxYTIuMjMsMi4yMywwLDAsMSwyLjg3LDEuMjFBMi4yMiwyLjIyLDAsMCwxLDEyLDI5LjE1Wk0xNSw4LjI2YTIuMjMsMi4yMywwLDAsMSwxLjgxLTIuNTMsMi4yNCwy'@;
put 'LjI0LDAsMCwxLDIuODcsMS4yMSwyLjIyLDIuMjIsMCwwLDEtMS44MiwyLjUzQTIuMjEsMi4yMSwwLDAsMSwxNSw4LjI2Wm01LjgyLDIyLjE5YTIuMjIsMi4yMiwwLDAsMS0yLjg3LTEuMjEsMi4yMywyLjIzLDAsMCwxLDEuODEtMi41MywyLjI0LDIuMjQsMCwwLDEsMi44NywxLjIxQTIuMjIs'@;
put 'Mi4yMiwwLDAsMSwyMC43OCwzMC40NVptNS0xMC40NmEzLjIsMy4yLDAsMCwxLTEuNjksMS43NiwzLjUzLDMuNTMsMCwwLDEtMS40LjMsMi43OCwyLjc4LDAsMCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJB'@;
put 'Mi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFIuRXNzZW50aWFsU2hhcGVzPXsiYWRkLXRleHQiOlIuQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOlIuQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpSLkNsclNo'@;
put 'YXBlUGluYm9hcmQsbmV3OlIuQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Ui5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXciOlIuQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpSLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpSLkNs'@;
put 'clNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOlIuQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOlIuQ2xyU2hhcGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Ui5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6'@;
put 'Ui5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Ui5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpSLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Ui5DbHJTaGFwZU9iamVjdHMsYm9vazpSLkNsclNoYXBlQm9vayxhc3RlcmlzazpSLkNsclNoYXBlQXN0ZXJpc2ssYnVnOlIuQ2xyU2hhcGVC'@;
put 'dWcsc2Npc3NvcnM6Ui5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOlIuQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Ui5DbHJTaGFwZVBlbmNpbCxub3RlOlIuQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Ui5DbHJTaGFwZVJlZnJlc2gsc3luYzpSLkNsclNoYXBlU3luYywidmlldy1saXN0'@;
put 'IjpSLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOlIuQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Ui5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0YnVsYjpSLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOlIuQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Ui5DbHJTaGFwZVVwbG9h'@;
put 'ZCxsb2NrOlIuQ2xyU2hhcGVMb2NrLHVubG9jazpSLkNsclNoYXBlVW5sb2NrLHVzZXJzOlIuQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Ui5DbHJTaGFwZVBvcE91dCxmaWx0ZXI6Ui5DbHJTaGFwZUZpbHRlcixwaW46Ui5DbHJTaGFwZVBpbixmaWxlOlIuQ2xyU2hhcGVGaWxlLHBsdXM6Ui5D'@;
put 'bHJTaGFwZVBsdXMsbWludXM6Ui5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOlIuQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOlIuQ2xyU2hhcGVQbHVzQ2lyY2xlLGJhbjpSLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOlIuQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFz'@;
put 'aDpSLkNsclNoYXBlVHJhc2gsY2lyY2xlOlIuQ2xyU2hhcGVDaXJjbGUsdGFnOlIuQ2xyU2hhcGVUYWcsdGFnczpSLkNsclNoYXBlVGFncyxoaXN0b3J5OlIuQ2xyU2hhcGVIaXN0b3J5LGNsb2NrOlIuQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOlIuQ2xyU2hhcGVBbGFybUNsb2NrLGFy'@;
put 'cm93OlguQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpSLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpSLkNsclNoYXBlQ2hpbGRBcnJvdyxjb3B5OlIuQ2xyU2hhcGVDb3B5LGhlbHA6Ui5DbHJTaGFwZUhlbHAsbG9naW46Ui5DbHJTaGFwZUxvZ2luLGxvZ291dDpSLkNs'@;
put 'clNoYXBlTG9nb3V0LHByaW50ZXI6Ui5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Ui5DbHJTaGFwZVdvcmxkLHNsaWRlcjpSLkNsclNoYXBlU2xpZGVyLGNsaXBib2FyZDpSLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOlIuQ2xyU2hhcGVGaXJld2FsbCxsaXN0OlIuQ2xyU2hhcGVMaXN0LHJl'@;
put 'ZG86Ui5DbHJTaGFwZVJlZG8sdW5kbzpSLkNsclNoYXBlVW5kbyxzY3JvbGw6Ui5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6Ui5DbHJTaGFwZUZpbGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOlIuQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOlIuQ2xyU2hhcGVTd2l0Y2gs'@;
put 'dG9vbHM6Ui5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOlIuQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6Ui5DbHJTaGFwZVdpbmRvd01heCwid2luZG93LW1pbiI6Ui5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOlIuQ2xyU2hhcGVXaW5kb3dSZXN0b3Jl'@;
put 'LCJ6b29tLWluIjpSLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Ui5DbHJTaGFwZVpvb21PdXQsa2V5OlIuQ2xyU2hhcGVLZXksbGlicmFyeTpSLkNsclNoYXBlTGlicmFyeSxib2x0OlIuQ2xyU2hhcGVCb2x0LHdyZW5jaDpSLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOlIuQ2xyU2hhcGVC'@;
put 'dWxsc2V5ZSx0YXJnZXQ6Ui5DbHJTaGFwZVRhcmdldCxmbGFtZTpSLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOlIuQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFjY2VzcyI6Ui5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpSLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Ui5DbHJT'@;
put 'aGFwZUJhbGFuY2UsImlkLWJhZGdlIjpSLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Ui5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6Ui5DbHJTaGFwZUZpbGVHcm91cCxwYXBlcmNsaXA6Ui5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Ui5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0'@;
put 'eS0xIjpSLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Ui5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpSLkNsclNoYXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpSLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Ui5DbHJTaGFwZUV4'@;
put 'cGFuZENhcmQsYnJpZWZjYXNlOlIuQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Ui5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBib2FyZCI6Ui5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOlIuQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6'@;
put 'Ui5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpSLkNsclNoYXBlTW9vbixzdW46Ui5DbHJTaGFwZVN1bix3YW5kOlIuQ2xyU2hhcGVXYW5kLGNsb25lOlIuQ2xyU2hhcGVDbG9uZSxkZXRhaWxzOlIuQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOlIuQ2xyU2hhcGVEcmFnSGFu'@;
put 'ZGxlQ29ybmVyLGVyYXNlcjpSLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpSLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOlIuQ2xyU2hhcGVQYXN0ZSxwb3J0cmFpdDpSLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpSLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Ui5DbHJTaGFw'@;
put 'ZUZpbHRlck9mZixyZWN5Y2xlOlIuQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Ui5DbHJTaGFwZVRyZWUsZmlzaDpSLkNsclNoYXBlRmlzaCxmb3JtOlIuQ2xyU2hhcGVGb3JtLGZ1ZWw6Ui5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOlIuQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Ui5DbHJTaGFwZVRh'@;
put 'YmxlLCJkb3QtY2lyY2xlIjpSLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpSLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6Ui5DbHJTaGFwZUNyb3NzaGFpcnMsYmV0YTpSLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Ui5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KFIuRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNz'@;
put 'ZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVu'@;
put 'dCIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuRXNzZW50aWFsU2hhcGVzLCJhZGQiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShSLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVz'@;
put 'WyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywic2lnbi1v'@;
put 'dXQiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuRXNzZW50aWFsU2hhcGVzLCJsaWdodG5pbmciLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCxiLmRlc2NyaXB0b3JDb25m'@;
put 'aWcpKFIuRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywicGlubmVkIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KFIuRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShS'@;
put 'LkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLkVzc2VudGlh'@;
put 'bFNoYXBlcywicmVzaXplLXVwIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChSLkVzc2VudGlhbFNo'@;
put 'YXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21l'@;
put 'ZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5NZWRpYVNoYXBlcz1SLkNsclNoYXBlTWljcm9waG9uZU11dGU9Ui5DbHJTaGFwZU1pY3JvcGhvbmU9Ui5DbHJTaGFwZVZpZGVvR2FsbGVyeT1SLkNsclNoYXBlUmVwbGF5T25lPVIuQ2xyU2hhcGVSZXBsYXlBbGw9Ui5DbHJT'@;
put 'aGFwZUltYWdlR2FsbGVyeT1SLkNsclNoYXBlTXVzaWNOb3RlPVIuQ2xyU2hhcGVGaWxtU3RyaXA9Ui5DbHJTaGFwZUhlYWRwaG9uZXM9Ui5DbHJTaGFwZVZvbHVtZU11dGU9Ui5DbHJTaGFwZVZvbHVtZVVwPVIuQ2xyU2hhcGVWb2x1bWVEb3duPVIuQ2xyU2hhcGVTaHVmZmxlPVIuQ2xyU2hh'@;
put 'cGVWaWRlb0NhbWVyYT1SLkNsclNoYXBlQ2FtZXJhPVIuQ2xyU2hhcGVGYXN0Rm9yd2FyZD1SLkNsclNoYXBlUmV3aW5kPVIuQ2xyU2hhcGVQb3dlcj1SLkNsclNoYXBlU3RvcD1SLkNsclNoYXBlU3RlcEZvcndhcmQ9Ui5DbHJTaGFwZVBhdXNlPVIuQ2xyU2hhcGVQbGF5PXZvaWQgMDt2YXIg'@;
put 'Yj1lZSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO1IuQ2xyU2hhcGVQbGF5PSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIuMDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wu'@;
put 'MS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiww'@;
put 'LDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLFIuQ2xyU2hhcGVQYXVzZT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAs'@;
put 'MCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEyLjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDda'@;
put 'Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxSLkNsclNoYXBlU3RlcEZvcndhcmQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAg'@;
put 'PHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgzYTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIzLjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAg'@;
put 'ICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0iMiIgcnk9IjIiLz4nKSxSLkNsclNoYXBlU3RvcD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCwwLDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksUi5DbHJTaGFwZVBvd2VyPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgs'@;
put 'MjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzQuMTVhMTUsMTUsMCwwLDEtNy41Mi0yOCwxLDEsMCwwLDEs'@;
put 'MSwxLjczLDEzLDEzLDAsMSwwLDEzLDAsMSwxLDAsMSwxLDEtMS43MywxNSwxNSwwLDAsMS03LjUyLDI4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTgsMjFhMSwxLDAs'@;
put 'MCwwLDEtMVY0YTEsMSwwLDAsMC0yLDBWMjBBMSwxLDAsMCwwLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzIuNTEsMTUuNEgzMC40NGExMywxMywwLDEsMS0x'@;
put 'OS03LjUsMSwxLDAsMCwwLTEtMS43M0ExNSwxNSwwLDEsMCwzMywxOS4xNSwxNC45LDE0LjksMCwwLDAsMzIuNTEsMTUuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1h'@;
put 'bGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDIxYTEsMSwwLDAsMS0xLTFWNGExLDEsMCwwLDEsMiwwVjIwQTEsMSwwLDAsMSwxOCwyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41bC0uMzEsMEExMywxMywwLDEsMSwxMS40OCw3LjlhMSwxLDAsMCwwLTEtMS43MywxNSwxNSwwLDEsMCwyMS4zMSw3LjFBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiww'@;
put 'LDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0uMDYsMTcuNjhhMS4yOCwxLjI4LDAsMCwxLTEuMjktMS4yOFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDBWMTguNEExLjI4LDEuMjgsMCwwLDEsMTguMDYsMTkuNjhaTTE4LDI3Ljc5QTkuODgsOS44OCwwLDAsMSwxMi4xNyw5Ljg1YTEu'@;
put 'NCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDExLjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuNCwxLjQsMCwwLDEsMS45NC0uMjlBOS44OCw5Ljg4LDAsMCwxLDE4LDI3Ljc5'@;
put 'WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40aC02QTkuNyw5LjcsMCwwLDEsMjgsMTcuODlhMTAsMTAsMCwxLDEtMTUuODMtOCwxLjQsMS40LDAsMCwxLDEuOTQu'@;
put 'MzEsMS4zNywxLjM3LDAsMCwxLS4zMSwxLjkyLDcuMTgsNy4xOCwwLDEsMCwxMS40Myw1LjgsNy4wOCw3LjA4LDAsMCwwLS40NS0yLjQ5SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNHY0LjRhMS4yOSwxLjI5LDAsMCwxLTIuNTgsMFY4LjY1YTEuMjksMS4yOSwwLDAsMSwyLjU4LDB2'@;
put 'LjcxbDMuNzYtNi41MUExNiwxNiwwLDEsMCwzNCwxOGExNiwxNiwwLDAsMC0uMjMtMi42MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwy'@;
put 'MS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0zLjU3LS45QTkuODMsOS44MywwLDAsMSwyOCwxNy44OWExMCwxMCwwLDEsMS0xNS44My04LDEuNCwxLjQsMCwwLDEsMS45NC4zMSwxLjM3LDEuMzcsMCwwLDEtLjMxLDEuOTIsNy4xOCw3LjE4LDAsMSwwLDEx'@;
put 'LjQzLDUuOCw3LjA3LDcuMDcsMCwwLDAtMy01Ljc2QTEuMzcsMS4zNywwLDAsMSwyMiwxMC4yYTEuMzgsMS4zOCwwLDAsMSwxLjUyLS40OSw3LjQ1LDcuNDUsMCwwLDEtLjMtNi44MywxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNBNy40Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTE2Ljc3LDgu'@;
put 'NjVhMS4yOSwxLjI5LDAsMCwxLDIuNTgsMFYxOC40YTEuMjksMS4yOSwwLDAsMS0yLjU4LDBaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPicpLFIuQ2xyU2hhcGVSZXdpbmQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4w'@;
put 'Ni0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43'@;
put 'OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEs'@;
put 'MC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIy'@;
put 'TDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLFIuQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3'@;
put 'LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiwwLDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFW'@;
put 'NS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiwwLDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMw'@;
put 'VjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45MywwLDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4n'@;
put 'KSxSLkNsclNoYXBlQ2FtZXJhPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVpt'@;
put 'MTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAs'@;
put 'MCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFs'@;
put 'Ljg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44Nywx'@;
put 'LjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAsMCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41'@;
put 'MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLFIuQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSww'@;
put 'LDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZa'@;
put 'TTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVhLjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEu'@;
put 'MSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxSLkNsclNoYXBlU2h1ZmZsZT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywz'@;
put 'LjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAsMC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQs'@;
put 'MjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEsMTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFa'@;
put 'Ii8+JyksUi5DbHJTaGFwZVZvbHVtZURvd249KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEs'@;
put 'MS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAs'@;
put 'MCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyWk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZa'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0xLjg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUs'@;
put 'MSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwz'@;
put 'MS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLFIuQ2xyU2hhcGVWb2x1bWVVcD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIzLjQxLDI1LjI1YTEsMSwwLDAsMS0uNTQtMS44NSw2LjIxLDYu'@;
put 'MjEsMCwwLDAtLjE5LTEwLjY1LDEsMSwwLDEsMSwxLTEuNzMsOC4yMSw4LjIxLDAsMCwxLC4yNCwxNC4wNkExLDEsMCwwLDEsMjMuNDEsMjUuMjVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4'@;
put 'YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMyIgZD0iTTE4LDMyLjA2YTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjM5QTIsMiwwLDAsMSwyMCw2djI0YTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMyLjA2Wk00LDE0djhI'@;
put 'OS41NmExLDEsMCwwLDEsLjcxLjNMMTgsMzAuMDZWNkwxMC4zNSwxMy43YTEsMSwwLDAsMS0uNzEuM1pNMTgsNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yMy40MSwyNS4yNWExLDEsMCwwLDEtLjU0LTEuODUsNi4y'@;
put 'MSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczLDguMjEsOC4yMSwwLDAsMSwuMjQsMTQuMDZBMSwxLDAsMCwxLDIzLjQxLDI1LjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI1LjYyLDMxLjE4'@;
put 'YTEsMSwwLDAsMS0uNDUtMS44OUExMi40NCwxMi40NCwwLDAsMCwyNSw2Ljg5YTEsMSwwLDEsMSwuODctMS44LDE0LjQ0LDE0LjQ0LDAsMCwxLC4yNCwyNkExLDEsMCwwLDEsMjUuNjIsMzEuMThaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zIiBkPSJNMTguMzMsNCw5LjA3LDEyaC02YTEsMSwwLDAsMC0xLDF2OS45MmExLDEsMCwwLDAsMSwxSDguODhsOS40Niw4LjI0QTEsMSwwLDAsMCwyMCwzMS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLFIuQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLGIuY2xySWNvblNWRyko'@;
put 'JzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMkg5LjE0bDcuNDEsNy40N0EyLDIsMCwwLDAsMTgsMzJhMiwyLDAsMCwwLC43Ni0uMTVBMiwyLDAsMCwwLDIw'@;
put 'LDMwVjIyLjc3bDUuODksNS44OWMtLjI1LjE1LS40OS4yOS0uNzUuNDJhMSwxLDAsMCwwLC45LDEuNzksMTQuNCwxNC40LDAsMCwwLDEuMzEtLjc1bDIuMjgsMi4yOEwzMSwzMSw1LDVaTTE4LDMwbC03LjczLTcuNzdBMSwxLDAsMCwwLDkuNTYsMjJINFYxNEg5LjY0YTEsMSwwLDAsMCwuNzEt'@;
put 'LjNsLjI2LS4yNkwxOCwyMC44MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjQuODksNi42OUExMi40MiwxMi40MiwwLDAsMSwyOSwyNi4xbDEuNDIsMS40MkExNC40MiwxNC40MiwwLDAsMCwyNS43Niw0Ljg4'@;
put 'YTEsMSwwLDEsMC0uODcsMS44WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS4yNCwzLjcxTDI2LDIzLjEzQTguMTUs'@;
put 'OC4xNSwwLDAsMCwyNy44LDE4YTguMjgsOC4yOCwwLDAsMC00LjEtNy4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIGQ9Ik0xOCw2djkuMTVsMiwyVjZhMiwyLDAsMCwwLTMuNDItMS40'@;
put 'MUwxMiw5LjE3bDEuNDEsMS40MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNC44Nyw2LjY5QTEyLjQyLDEyLjQyLDAsMCwxLDI4Ljc1LDI2LjNsMS40MiwxLjQyQTE0LjQzLDE0LjQzLDAsMCwwLDI1Ljc0LDQuODhh'@;
put 'MSwxLDAsMCwwLS44NywxLjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjcuMywyNy42N2gwbC0zLjg0LTMuODQtLjU3LS41N2gwTDQuNjMsNSwzLjIxLDYuNDEsOC44LDEySDNhMSwxLDAsMCwwLTEsMVYyM2ExLDEs'@;
put 'MCwwLDAsMSwxSDguODNsOS41MSw4LjNBMSwxLDAsMCwwLDIwLDMxLjU1VjIzLjJsNS41OSw1LjU5Yy0uMTcuMS0uMzQuMi0uNTEuMjlhMSwxLDAsMCwwLC45LDEuNzljLjM3LS4xOS43Mi0uNCwxLjA4LS42MmwyLjE0LDIuMTRMMzAuNjEsMzFsLTMuMjUtMy4yNVoiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yMi42OSwxMi42MkE2LjI3LDYuMjcsMCwwLDEsMjUuOCwxOGE2LjE3LDYuMTcsMCwwLDEtMS40MiwzLjkybDEuNDIsMS40MmE4LjE2LDguMTYsMCwwLDAsMi01LjM0LDguMjgsOC4yOCwwLDAsMC00LjEt'@;
put 'Ny4xMSwxLDEsMCwxLDAtMSwxLjczWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTIwLDQuNjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxSLkNsclNoYXBlSGVhZHBob25lcz0oMCxi'@;
put 'LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwxNy41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVB'@;
put 'MTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwyLjc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44'@;
put 'LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwyNiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9'@;
put 'Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFINlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43'@;
put 'NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxSLkNsclNoYXBlRmlsbVN0cmlwPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0x'@;
put 'NC42LDIzLjA3YTEuMjksMS4yOSwwLDAsMCwxLjI0LjA5bDguNzMtNGExLjMsMS4zLDAsMCwwLDAtMi4zN2gwbC04LjczLTRBMS4zLDEuMywwLDAsMCwxNCwxNHY4QTEuMjksMS4yOSwwLDAsMCwxNC42LDIzLjA3Wm0xLTguNkwyMy4zMSwxOCwxNS42LDIxLjUxWiIvPlxuICAgICAgICAgICAg'@;
put 'PHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjgiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxNCIgeT0iNyIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIwIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIzIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNiIgeD0iMjYiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiB4PSI4IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3Qg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIHg9IjE0IiB5PSIyNiIgd2lkdGg9IjIiIGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTkiIHg9IjIwIiB5PSIyNiIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMyIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEwIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjMiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTEiIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjAsN2gydjNIMjBaTTE0LDdoMnYzSDE0Wk0xMCwyOUg4VjI2aDJabTAtMTlIOFY3aDJabTYsMTlIMTRWMjZoMlptNiwwSDIwVjI2aDJabTMu'@;
put 'MTYtMTAuMTZMMTUuMzksMjMuMkExLDEsMCwwLDEsMTQsMjIuMjhWMTMuNTdhMSwxLDAsMCwxLDEuNDEtLjkxTDI1LjE2LDE3QTEsMSwwLDAsMSwyNS4xNiwxOC44NFpNMjgsMjlIMjZWMjZoMlptMC0xOUgyNlY3aDJaIi8+JyksUi5DbHJTaGFwZU11c2ljTm90ZT0oMCxiLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMtMTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41'@;
put 'My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEs'@;
put 'Ni41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMzLDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1'@;
put 'LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUyLDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwy'@;
put 'Ny45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4gICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44'@;
put 'OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAsMi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjIt'@;
put 'NC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEuOS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMx'@;
put 'LjY4LDYuMTZaIi8+JyksUi5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCwwLDAsMiwxMS44OFYzMC4xMkExLjg4LDEuODgsMCwwLDAsMy44OCwzMkgzMi4xMkExLjg4LDEuODgsMCwwLDAsMzQsMzAuMTJW'@;
put 'MTEuODhBMS44OCwxLjg4LDAsMCwwLDMyLjEyLDEwWk0zMiwzMEg0VjEySDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTguNTYsMTkuNDVhMywzLDAsMSwwLTMtM0EzLDMsMCwwLDAsOC41NiwxOS40NVptMC00LjZBMS42LDEuNiww'@;
put 'LDEsMSw3LDE2LjQ1LDEuNiwxLjYsMCwwLDEsOC41NiwxNC44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik03LjksMjhsNi02LDMuMTgsMy4xOEwxNC4yNiwyOGgybDcuNDYtNy40NkwzMCwyNi43N3YtMkwyNC4yLDE5YS43MS43MSww'@;
put 'LDAsMC0xLDBsLTUuMTYsNS4xNkwxNC4zNywyMC41YS43MS43MSwwLDAsMC0xLDBMNS45MiwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzIuMTIsN1Y3YTEsMSwwLDAsMC0xLTFoLTI2YTEsMSwwLDAsMC0xLDFoMFY4aDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMwLjE0'@;
put 'LDNoMGExLDEsMCwwLDAtMS0xaC0yMmExLDEsMCwwLDAtMSwxaDBWNGgyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDEwSDMuODhBMS44OCwxLjg4LDAsMCwwLDIsMTEuODhWMzAuMTJBMS44OCwxLjg4LDAsMCwwLDMuODgsMzJIMzIuMTJBMS44OCwxLjg4LDAsMCwwLDM0LDMwLjEyVjExLjg4QTEuODgsMS44OCwwLDAsMCwzMi4xMiwxMFpN'@;
put 'OC41NiwxMy40NWEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjU2LDEzLjQ1Wk0zMCwyOGgtMjRsNy40Ni03LjQ3YS43MS43MSwwLDAsMSwxLDBsMy42OCwzLjY4TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0zIiAvPicpLFIuQ2xyU2hhcGVSZXBsYXlBbGw9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMs'@;
put 'MCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYtNS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2'@;
put 'LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2'@;
put 'LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlUmVwbGF5T25lPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFI'@;
put 'MTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3Ljcx'@;
put 'LDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4'@;
put 'QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCww'@;
put 'LDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQsMCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQu'@;
put 'NDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4yNS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4'@;
put 'LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEy'@;
put 'QTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEEx'@;
put 'LDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCwwLTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAv'@;
put 'PjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLFIuQ2xyU2hhcGVNaWNyb3Bob25lPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjks'@;
put 'MCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4yLDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYzMmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0z'@;
put 'LjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYuMyw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5c'@;
put 'dFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUs'@;
put 'My41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCw0YzIuOCwwLDUsMi4yLDUsNXY4YzAsMC40LTAuMSwwLjgtMC4yLDEuMmwxLjYsMS42YzAuNC0wLjksMC42'@;
put 'LTEuOCwwLjYtMi44VjljMC0zLjktMy4yLTctNy4xLTYuOVxuXHRcdGMtMi45LDAtNS42LDEuOS02LjUsNC43TDEzLDguM0MxMy41LDUuOSwxNS42LDQuMiwxOCw0eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI1LjIsMjYuNmw2Ljks'@;
put 'Ni45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42SDZjMC4xLDYuMiw0Ljgs'@;
put 'MTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiBNMTMuOCwxOS43QzEzLjMsMTguOSwxMywxOCwxMywxN3YtMi42bDcuMSw3LjFDMTcuOSwy'@;
put 'Mi41LDE1LjIsMjEuOCwxMy44LDE5Ljd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCwxLjgtMC41LDMuNS0xLjQsNWwxLjUsMS41QzI5LjMsMjEuNSwyOS45LDE5LjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yNSwxN1Y5YzAtMy45LTMuMi03LTcuMS02LjljLTIuOSwwLTUuNiwxLjktNi41LDQuN2wxMywxM0MyNC44LDE4LjksMjUsMTcuOSwyNSwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0i'@;
put 'TTI1LjIsMjYuNmw2LjksNi45bDEuNC0xLjRMNCwyLjZMMi42LDRsOC40LDguNFYxN2MwLDMuOSwzLjEsNyw3LDdjMS4zLDAsMi41LTAuMywzLjYtMWwyLjIsMi4yQzIyLjEsMjYuNCwyMC4xLDI3LDE4LDI3XG5cdFx0Yy01LjQsMC4yLTkuOC00LjEtMTAtOS40YzAtMC4yLDAtMC40LDAtMC42'@;
put 'SDZjMC4xLDYuMiw0LjgsMTEuNCwxMSwxMnYzaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MyIgLz4nKSxSLk1lZGlhU2hhcGVzPXtwbGF5OlIuQ2xyU2hhcGVQbGF5LHBhdXNlOlIuQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpSLkNsclNoYXBlU3RlcEZvcndhcmQsc3RvcDpSLkNsclNoYXBlU3RvcCxwb3dlcjpSLkNsclNoYXBlUG93ZXIscmV3aW5kOlIuQ2xyU2hhcGVSZXdp'@;
put 'bmQsImZhc3QtZm9yd2FyZCI6Ui5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpSLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOlIuQ2xyU2hhcGVWaWRlb0NhbWVyYSxzaHVmZmxlOlIuQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOlIuQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1l'@;
put 'LWRvd24iOlIuQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Ui5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpSLkNsclNoYXBlSGVhZHBob25lcywiZmlsbS1zdHJpcCI6Ui5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Ui5DbHJTaGFwZU11c2ljTm90ZSwiaW1h'@;
put 'Z2UtZ2FsbGVyeSI6Ui5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Ui5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6Ui5DbHJTaGFwZVJlcGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Ui5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOlIuQ2xyU2hhcGVNaWNy'@;
put 'b3Bob25lLCJtaWNyb3Bob25lLW11dGUiOlIuQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKFIuTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29u'@;
put 'cy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQog'@;
put 'ICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24oU2UsUixlZSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShSLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxSLlNvY2lhbFNoYXBlcz1SLkNsclNoYXBlSGFzaHRhZz1SLkNsclNoYXBlQ3Jvd249Ui5DbHJTaGFwZVRodW1ic0Rvd249Ui5DbHJTaGFwZVRodW1ic1VwPVIuQ2xyU2hhcGVTYWRGYWNlPVIuQ2xyU2hhcGVOZXV0cmFsRmFjZT1SLkNsclNoYXBlSGFwcHlGYWNl'@;
put 'PVIuQ2xyU2hhcGVQaWN0dXJlPVIuQ2xyU2hhcGVDaGF0QnViYmxlPVIuQ2xyU2hhcGVUYWxrQnViYmxlcz1SLkNsclNoYXBlSGVhcnRCcm9rZW49Ui5DbHJTaGFwZUhlYXJ0PVIuQ2xyU2hhcGVJbmJveD1SLkNsclNoYXBlRmxhZz1SLkNsclNoYXBlVGFza3M9Ui5DbHJTaGFwZUVudmVsb3Bl'@;
put 'PVIuQ2xyU2hhcGVCb29rbWFyaz1SLkNsclNoYXBlSGFsZlN0YXI9Ui5DbHJTaGFwZVN0YXI9Ui5DbHJTaGFwZVNoYXJlPXZvaWQgMDt2YXIgYj1lZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZp'@;
put 'Zy50cyIpLG09ZWUoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKSxYPWVlKAovKiEgLi9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVz'@;
put 'LnRzIik7Ui5DbHJTaGFwZVNoYXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuNTMsMjRhNSw1LDAsMCwwLTMuNiwxLjU1TDExLjc0LDE5LjQ1YTQuNDcsNC40NywwLDAsMCwwLTIuOGwxMi4yMS02LjIx'@;
put 'YTUuMTIsNS4xMiwwLDEsMC0xLjA3LTEuN0wxMC43OSwxNC44OWE1LDUsMCwxLDAsMCw2LjMzbDEyLjA2LDYuMDdBNC45Myw0LjkzLDAsMCwwLDIyLjU0LDI5YTUsNSwwLDEsMCw1LTVabTAtMjBhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsMjcuNTMsNFpNNywyMWEzLDMsMCwxLDEsMy0zQTMs'@;
put 'MywwLDAsMSw3LDIxWk0yNy41MywzMmEzLDMsMCwxLDEsMy0zQTMsMywwLDAsMSwyNy41MywzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjcuNTMsMjRhNSw1LDAsMCwwLTMuNiwxLjU1TDExLjc0LDE5LjQ1'@;
put 'YTQuNDcsNC40NywwLDAsMCwwLTIuOGwxMi4yMS02LjIxYTUuMTIsNS4xMiwwLDEsMC0xLjA3LTEuN0wxMC43OSwxNC44OWE1LDUsMCwxLDAsMCw2LjMzbDEyLjA2LDYuMDdBNC45Myw0LjkzLDAsMCwwLDIyLjU0LDI5YTUsNSwwLDEsMCw1LTVaIi8+JyksUi5DbHJTaGFwZVN0YXI9KDAsbS5j'@;
put 'bHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy4xOSwzNGEyLjIyLDIuMjIsMCwwLDEtMS4yNC0uMzhsLTcuNDYtNWEuMjIuMjIsMCwwLDAtLjI1LDBsLTcuNDYsNUEyLjIyLDIuMjIsMCwwLDEsNy40LDMxLjIxbDIuNDUt'@;
put 'OC42NGEuMjMuMjMsMCwwLDAtLjA4LS4yNEwyLjcxLDE2Ljc4YTIuMjIsMi4yMiwwLDAsMSwxLjI5LTRsOS0uMzRhLjIzLjIzLDAsMCwwLC4yLS4xNWwzLjEtOC40M2EyLjIyLDIuMjIsMCwwLDEsNC4xNywwbDMuMSw4LjQzYS4yMy4yMywwLDAsMCwuMi4xNWw5LC4zNGEyLjIyLDIuMjIsMCww'@;
put 'LDEsMS4yOSw0TDI3LDIyLjMzYS4yMi4yMiwwLDAsMC0uMDguMjRsMi40NSw4LjY0QTIuMjMsMi4yMywwLDAsMSwyNy4xOSwzNFptLTguODItNy40MkEyLjIxLDIuMjEsMCwwLDEsMTkuNiwyN2w3LjQ2LDVhLjIyLjIyLDAsMCwwLC4zNC0uMjVsLTIuNDUtOC42NGEyLjIxLDIuMjEsMCwwLDEs'@;
put 'Ljc3LTIuMzVsNy4wNi01LjU1YS4yMi4yMiwwLDAsMC0uMTMtLjRsLTktLjM0YTIuMjIsMi4yMiwwLDAsMS0yLTEuNDZsLTMuMS04LjQzYS4yMi4yMiwwLDAsMC0uNDIsMEwxNS4wNiwxM2EyLjIyLDIuMjIsMCwwLDEtMiwxLjQ2bC05LC4zNGEuMjIuMjIsMCwwLDAtLjEzLjRMMTEsMjAuNzZh'@;
put 'Mi4yMiwyLjIyLDAsMCwxLC43NywyLjM1TDkuMzMsMzEuNzVhLjIxLjIxLDAsMCwwLC4wOC4yNC4yLjIsMCwwLDAsLjI2LDBsNy40Ni01QTIuMjIsMi4yMiwwLDAsMSwxOC4zNiwyNi42MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcu'@;
put 'MDYsNS41NWEuMjMuMjMsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFhMi4yMiwyLjIyLDAsMCwwLDMuMzgsMi40NWw3LjQ2LTVhLjIyLjIyLDAsMCwxLC4yNSwwbDcuNDYsNWEyLjIsMi4yLDAsMCwwLDIuNTUsMCwyLjIsMi4yLDAsMCwwLC44My0yLjRsLTIuNDUtOC42NGEuMjIuMjIsMCwwLDEs'@;
put 'LjA4LS4yNFoiLz4nKSxSLkNsclNoYXBlSGFsZlN0YXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw'@;
put 'LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMi4yMiwwLDAsMSwuMDguMjRMNy4zNSwzMS4yMUEyLjIzLDIuMjMsMCwwLDAsOS40OSwzNGEyLjIyLDIuMjIs'@;
put 'MCwwLDAsMS4yNC0uMzhsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVhMi4yMiwyLjIyLDAsMCwwLDMuMzgtMi40NWwtMi40NS04LjY0YS4yMy4yMywwLDAsMSwuMDgtLjI0Wk0xOC4zMywyNi42MmgwYTIuMjEsMi4yMSwwLDAsMC0xLjI0LjM4TDkuNjIsMzJhLjIyLjIyLDAsMCwx'@;
put 'LS4zNC0uMjVsMi40NS04LjY0QTIuMjEsMi4yMSwwLDAsMCwxMSwyMC43NkwzLjksMTUuMjFhLjIyLjIyLDAsMCwxLC4xMy0uNGw5LS4zNEEyLjIyLDIuMjIsMCwwLDAsMTUsMTNsMy4xLTguNDNhLjIuMiwwLDAsMSwuMjEtLjE1aDBaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRh'@;
put 'Mi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVhMi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40'@;
put 'bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaTTI0LjksMjMuMTFsMi40NSw4LjY0QS4yMi4yMiwwLDAsMSwyNywzMmwtNy40Ni01YTIuMjEsMi4yMSwwLDAsMC0xLjI0LS4zOGgwVjQuNDRoMGEuMi4yLDAsMCwxLC4yMS4xNUwyMS42MiwxM2EyLjIyLDIuMjIsMCwwLDAsMiwxLjQ2'@;
put 'bDksLjM0YS4yMi4yMiwwLDAsMSwuMTMuNGwtNy4wNiw1LjU1QTIuMjEsMi4yMSwwLDAsMCwyNC45LDIzLjExWiIvPicpLFIuQ2xyU2hhcGVCb29rbWFyaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI2LDM0'@;
put 'YTIsMiwwLDAsMS0xLjQxLS41OEwxOCwyNi44MmwtNi41NCw2LjUyQTIsMiwwLDAsMSw4LDMxLjkzVjRhMiwyLDAsMCwxLDItMkgyNmEyLDIsMCwwLDEsMiwyVjMyYTIsMiwwLDAsMS0yLDJabTAtMmgwVjRIMTBWMzEuOTNMMTgsMjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LDJIMTBBMiwyLDAsMCwwLDgsNFYzMS45M2EyLDIsMCwwLDAsMy40MiwxLjQxbDYuNTQtNi41Miw2LjYzLDYuNkEyLDIsMCwwLDAsMjgsMzJWNEEyLDIsMCwwLDAsMjYsMloiLz4nKSxSLkNsclNoYXBlRW52ZWxvcGU9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMzAuNDYsMjhINS42Nmw3LTcuMjQtMS40'@;
put 'NC0xLjM5TDQsMjYuODRWOS41MkwxNi40MywyMS44OWEyLDIsMCwwLDAsMi44MiwwTDMyLDkuMjF2MTcuNWwtNy4zNi03LjM2LTEuNDEsMS40MVpNNS4zMSw4SDMwLjM4TDE3Ljg0LDIwLjQ3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTMyLDEzLjA4VjI2LjcxbC03LjM2LTcuMzYtMS40MSwxLjQxTDMwLjQ2LDI4SDUuNjZsNy03LjI0LTEuNDQtMS4zOUw0LDI2Ljg0VjkuNTJMMTYuNDMsMjEuODlhMiwyLDAsMCwwLDIuODIsMGw4LjgzLTguNzhhNy40NCw3LjQ0LDAs'@;
put 'MCwxLTItLjg1bC04LjI2LDguMjFMNS4zMSw4SDIyLjgxYTcuNDksNy40OSwwLDAsMS0uMzEtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjJBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjA4WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS4yNkgzMlYyNi43MWwtNy4zNi03LjM2LTEuNDEsMS40MUwzMC40NiwyOEg1LjY2bDctNy4yNC0xLjQ0LTEuMzlMNCwyNi44NFY5LjUyTDE2LjQzLDIxLjg5YTIsMiwwLDAsMCwyLjgyLDBsNi42Ni02LjYzSDIzLjA4bC01LjI0LDUuMjFMNS4z'@;
put 'MSw4SDIwLjA2bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE1LjI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiBkPSJNMjYuODUsMWwtNS43Miw5LjkxYTEuMjgsMS4yOCwwLDAsMCwxLjEsMS45MUgzMy42OGExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMUExLjI4LDEuMjgsMCwwLDAsMjYuODUsMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQg'@;
put 'Y2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuMzMsNmEyLDIsMCwwLDAtLjQxLDBoLTI4YTIsMiwwLDAsMC0uNTMuMDhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjgxLDcuMzksMTku'@;
put 'MjUsMjEuODlhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMzLjgxLDcuMzlaTTUuMywyOEgzLjkxVjI2LjU3bDcuMjctNy4yMSwxLjQxLDEuNDFabTI2LjYxLDBIMzAuNTFsLTcuMjkt'@;
put 'Ny4yMywxLjQxLTEuNDEsNy4yNyw3LjIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMjYsMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDIyLjUsNkgzLjkyYTIsMiwwLDAsMC0uNTMuMDhM'@;
put 'MTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS0yLS4yOWwtOC43MSw4LjY4YTIsMiwwLDAsMS0yLjgyLDBMMiw3LjVhMiwy'@;
put 'LDAsMCwwLS4wNy41VjI4YTIsMiwwLDAsMCwyLDJoMjhhMiwyLDAsMCwwLDItMlYxMi4zOUE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVpNNS4zLDI4SDMuOTFWMjYuNTdsNy4yNy03LjIxLDEuNDEsMS40MVptMjYuNjEsMEgzMC41MWwtNy4yOS03LjIzLDEuNDEtMS40MSw3LjI3LDcuMjFaIi8+'@;
put 'XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDI1Ljc3bC02LjUyLDYuNDlhMiwyLDAsMCwxLTIuODIsMEwyLDcuNWEyLDIsMCwwLDAtLjA3LjVWMjhhMiwyLDAsMCwwLDIsMmgyOGEyLDIsMCwwLDAsMi0yVjE1LjM4Wk01LjMsMjhIMy45MVYyNi41N2w3LjI3'@;
put 'LTcuMjEsMS40MSwxLjQxWm0yNi42MSwwSDMwLjUxbC03LjI5LTcuMjMsMS40MS0xLjQxLDcuMjcsNy4yMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiBkPSJNMjIuOTQsMTUuNGgtLjdB'@;
put 'My42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgzLjkyYTIsMiwwLDAsMC0uNTMuMDhMMTcuODQsMjAuNDdaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0i'@;
put 'TTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPicpLFIuQ2xyU2hhcGVUYXNrcz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI5LjI5LDM0SDYuNzFBMS43LDEuNywwLDAsMSw1LDMyLjMxVjYuNjlBMS43NSwxLjc1LDAsMCwxLDcsNUg5VjdIN1YzMkgyOVY3SDI3VjVoMi4yNUExLjcsMS43LDAsMCwxLDMxLDYuNjlWMzIuMzFBMS43LDEuNyww'@;
put 'LDAsMSwyOS4yOSwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE2LjY2LDI1Ljc2LDExLjMsMjAuNEExLDEsMCwwLDEsMTIuNzIsMTlsMy45NCwzLjk0LDguNjQtOC42NGExLDEsMCwwLDEsMS40MSwx'@;
put 'LjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjYsMTFIMTBWNy4zM0EyLjM0LDIuMzQsMCwwLDEsMTIuMzMsNWgxLjc5YTQsNCwwLDAsMSw3Ljc1LDBoMS43OUEyLjM0LDIuMzQsMCwwLDEsMjYsNy4z'@;
put 'M1pNMTIsOUgyNFY3LjMzQS4zMy4zMywwLDAsMCwyMy42Nyw3SDIwVjZhMiwyLDAsMCwwLTQsMFY3SDEyLjMzYS4zMy4zMywwLDAsMC0uMzMuMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTJWNy4zM0EuMzMuMzMsMCwwLDEsMTIuMzMsN0gxNlY2YTIsMiwwLDAsMSw0LDBWN2guNzFsMS4xNi0yYTQsNCwwLDAsMC03Ljc0LDBIMTIuMzNBMi4zNCwyLjM0LDAsMCwwLDEwLDcuMzNWMTFoOC42NEEzLjY1LDMuNjUsMCwwLDEsMTksOS44'@;
put 'OVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTI0LjE5LDE1LjRsLTcuNTMsNy41M0wxMi43MiwxOUExLDEsMCwwLDAsMTEuMywyMC40bDUuMzYsNS4zNkwyNi43MSwxNS43'@;
put 'MWExLDEsMCwwLDAsLjItLjMxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiBkPSJNMjksMTUuNFYzMkg3VjdIOVY1SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42OVYzMi4zMUExLjcs'@;
put 'MS43LDAsMCwwLDYuNzEsMzRIMjkuMjlBMS43LDEuNywwLDAsMCwzMSwzMi4zMVYxNS40WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4x'@;
put 'NCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMTIuNzIsMTlBMSwxLDAsMCwwLDExLjMsMjAuNGw1LjM2LDUuMzZMMjYuNzEsMTUuNzFhMSwxLDAsMCwwLTEuNDEtMS40MWwtOC42NCw4LjY0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRn'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTIzLjEzLDlIMTJWNy4zM0EuMzMuMzMsMCwwLDEsMTIuMzMsN0gxNlY2YTIsMiwwLDAsMSw0LDBWN2gyLjU3YTcuNTIsNy41MiwwLDAsMS0uMDctMSw3LjUyLDcuNTIsMCwwLDEsLjA3LTFoLS43YTQsNCwwLDAsMC03Ljc1LDBI'@;
put 'MTIuMzNBMi4zNCwyLjM0LDAsMCwwLDEwLDcuMzNWMTFIMjQuNDJBNy41LDcuNSwwLDAsMSwyMy4xMyw5WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTMwLDEzLjVhNy41Miw3'@;
put 'LjUyLDAsMCwxLTEtLjA3VjMySDdWN0g5VjVIN0ExLjc1LDEuNzUsMCwwLDAsNSw2LjY5VjMyLjMxQTEuNywxLjcsMCwwLDAsNi43MSwzNEgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjMxVjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJj'@;
put 'bGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI5'@;
put 'LjI5LDQuOTVoLTcuMmE0LjMxLDQuMzEsMCwwLDAtOC4xNywwSDdBMS43NSwxLjc1LDAsMCwwLDUsNi42NFYzMi4yNmExLjcsMS43LDAsMCwwLDEuNzEsMS42OUgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjI2VjYuNjRBMS43LDEuNywwLDAsMCwyOS4yOSw0Ljk1Wm0tMTgsM2ExLDEsMCww'@;
put 'LDEsMS0xaDMuNDRWNi4zMmEyLjMxLDIuMzEsMCwwLDEsNC42MywwVjdoMy40NGExLDEsMCwwLDEsMSwxVjkuOEgxMS4yNVptMTQuNTIsOS4yMy05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4yNiw3LjE0LTcuMTRhMS40LDEuNCwwLDEsMSwyLDJaIi8+XG4g'@;
put 'ICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTI1Ljg4LDE1LjRhMS4zOCwxLjM4LDAsMCwxLS4xMSwxLjgxbC05LjEyLDkuMTItNS4yNC01LjI0YTEuNCwxLjQsMCwwLDEsMi0ybDMuMjYsMy4y'@;
put 'Niw3LTdIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsMC0uMDlIMTEuMjVWOGExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMmEyLjMxLDIuMzEsMCwwLDEsNC42MywwVjdoLjQyTDIyLDQuNzZhNC4zLDQuMywwLDAsMC04LjA5LjE5SDdBMS43NSwxLjc1LDAsMCwwLDUsNi42NFYzMi4yNmEx'@;
put 'LjcsMS43LDAsMCwwLDEuNzEsMS42OUgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjI2VjE1LjRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEu'@;
put 'MTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzAsMTMuNWE3LjQ5LDcuNDksMCwwLDEtNi40Ni0zLjdIMTEuMjVWOGExLDEsMCwwLDEsMS0xaDMuNDRWNi4zMmEyLjMxLDIuMzEsMCwwLDEsNC42MywwVjdoMi4yNmE3LjUzLDcuNTMsMCwwLDEtLjA3LTEsNy41Myw3LjUzLDAsMCwxLC4wOC0x'@;
put 'LjA1aC0uNWE0LjMxLDQuMzEsMCwwLDAtOC4xNywwSDdBMS43NSwxLjc1LDAsMCwwLDUsNi42NFYzMi4yNmExLjcsMS43LDAsMCwwLDEuNzEsMS42OUgyOS4yOUExLjcsMS43LDAsMCwwLDMxLDMyLjI2VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wm0tNC4yMywzLjcxLTkuMTIsOS4x'@;
put 'Mi01LjI0LTUuMjRhMS40LDEuNCwwLDAsMSwyLTJsMy4yNiwzLjI2LDcuMTQtNy4xNGExLjQsMS40LDAsMSwxLDIsMloiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBj'@;
put 'eD0iMzAiIGN5PSI2IiByPSI1Ii8+JyksUi5DbHJTaGFwZUZsYWc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik02LDM0YTEsMSwwLDAsMS0xLTFWM0ExLDEsMCwwLDEsNywzVjMzQTEsMSwwLDAsMSw2LDM0WiIv'@;
put 'PlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNTUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAs'@;
put 'MCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDIuODVWNS4wOEE4LjgsOC44LDAsMCwxLDEzLjI1LDRhMTEuMjIsMTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2QTE4Ljc1LDE4Ljc1LDAsMCwwLDI5LDYuMTJWMTguOTVhMTYuMTYsMTYuMTYsMCwwLDEt'@;
put 'NS41OC45MywxMy4xMSwxMy4xMSwwLDAsMS01LjE4LTEuNDksMTIuNzgsMTIuNzgsMCwwLDAtNS0xLjQ1QTEwLjg2LDEwLjg2LDAsMCwwLDksMTcuNzlWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIsMTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2'@;
put 'LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41NSwzLjgyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik01LjkyLDJhMSwxLDAsMCwwLTEsMVYzM2Ex'@;
put 'LDEsMCwwLDAsMiwwVjNBMSwxLDAsMCwwLDUuOTIsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNSwzLjgyYTEsMSwwLDAsMC0xLDAsMTQuOSwxNC45LDAsMCwxLTYuMTMsMS4xNiwxMy4xMSwxMy4xMSww'@;
put 'LDAsMS01LjE4LTEuNDlBMTIuNzgsMTIuNzgsMCwwLDAsMTMuMiwyLDEwLjg2LDEwLjg2LDAsMCwwLDksMi44NVYyMGE4LjgsOC44LDAsMCwxLDQuMjUtMS4wOCwxMS4yMiwxMS4yMiwwLDAsMSw0LjIsMS4yOCwxNC44NCwxNC44NCwwLDAsMCw2LDEuNjYsMTYuNzksMTYuNzksMCwwLDAsNy0x'@;
put 'LjM3LDEsMSwwLDAsMCwuNTUtLjg5VjQuNjdBMSwxLDAsMCwwLDMwLjUsMy44MloiLz4nKSxSLkNsclNoYXBlSW5ib3g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwx'@;
put 'OSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuNSw1SDIyVjdoN1YyMUgy'@;
put 'My42MWwtLjEuODlhNS40Miw1LjQyLDAsMCwxLTEwLjc3LDBsLS4xLS44OUg3VjdoN1Y1SDYuNUExLjUsMS41LDAsMCwwLDUsNi41djI1QTEuNSwxLjUsMCwwLDAsNi41LDMzaDIzQTEuNSwxLjUsMCwwLDAsMzEsMzEuNVY2LjVBMS41LDEuNSwwLDAsMCwyOS41LDVaTTI5LDMxSDdWMjNoMy45'@;
put 'MWE3LjQyLDcuNDIsMCwwLDAsMTQuNDQsMEgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMjMsMTMuMDlhMSwxLDAsMCwwLDAsMS40MUwxOCwyMC4zbDUuNzktNS43OWExLDEsMCwwLDAtMS40MS0xLjQx'@;
put 'TDE5LDE2LjQ3VjJBMSwxLDAsMCwwLDE4LDFhMSwxLDAsMCwwLTEsMXYxNC41bC0zLjM4LTMuMzhBMSwxLDAsMCwwLDEyLjIzLDEzLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzAsMTMuNWE3LjUyLDcuNTIsMCwwLDEtMS0uMDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwzM2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWMTMuNDNB'@;
put 'Ny41Miw3LjUyLDAsMCwxLDMwLDEzLjVaTTI5LDMxSDdWMjNoMy45MWE3LjQyLDcuNDIsMCwwLDAsMTQuNDQsMEgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2'@;
put 'IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxSLkNsclNoYXBlSGVhcnQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDMyLjQzYTEsMSwwLDAsMS0uNjEtLjIxQzExLjgzLDI3Ljks'@;
put 'OCwyNC4xOCw1LjMyLDIwLjUxLDEuOSwxNS44MiwxLjEyLDExLjQ5LDMsNy42NGMxLjM0LTIuNzUsNS4xOS01LDkuNjktMy42OUE5Ljg3LDkuODcsMCwwLDEsMTgsNy43MmE5Ljg3LDkuODcsMCwwLDEsNS4zMS0zLjc3YzQuNDktMS4yOSw4LjM1Ljk0LDkuNjksMy42OSwxLjg4LDMuODUsMS4x'@;
put 'LDguMTgtMi4zMiwxMi44N0MyOCwyNC4xOCwyNC4xNywyNy45LDE4LjYxLDMyLjIyQTEsMSwwLDAsMSwxOCwzMi40M1pNMTAuMTMsNS41OEE1LjksNS45LDAsMCwwLDQuOCw4LjUxYy0xLjU1LDMuMTgtLjg1LDYuNzIsMi4xNCwxMC44MUE1Ny4xMyw1Ny4xMywwLDAsMCwxOCwzMC4xNiw1Ny4x'@;
put 'Myw1Ny4xMywwLDAsMCwyOS4wNiwxOS4zM2MzLTQuMSwzLjY5LTcuNjQsMi4xNC0xMC44MS0xLTItNC0zLjU5LTcuMzQtMi42NWE4LDgsMCwwLDAtNC45NCw0LjIsMSwxLDAsMCwxLTEuODUsMCw3LjkzLDcuOTMsMCwwLDAtNC45NC00LjJBNy4zMSw3LjMxLDAsMCwwLDEwLjEzLDUuNThaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLDcuNjRjLTEuMzQtMi43NS01LjItNS05LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwwLDE4LDcuNzJhOS44Nyw5Ljg3LDAsMCwwLTUuMzEtMy43N0M4LjE5LDIuNjYsNC4z'@;
put 'NCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0xMS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksUi5DbHJTaGFwZUhlYXJ0QnJva2VuPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4wOS01LTkuNjktMy42OWE5Ljg3LDkuODcsMCwwLDAtNiw0Ljg0LDE4LjksMTguOSwwLDAsMC0yLjIzLDUu'@;
put 'MzNsNS4yOCwyLjM0LTQuNiw0LjM3LDMuNDksNC4xLDEuNTItMS4zTDE4LjU0LDIxbDUuNC01LjEzTDE3LjU4LDEzQTE2LjIzLDE2LjIzLDAsMCwxLDE5Ljc1LDguOWE3LjY4LDcuNjgsMCwwLDEsNC4xMS0zYzMuMzQtLjg5LDYuMzQuNiw3LjM0LDIuNjUsMS41NSwzLjE4Ljg1LDYuNzItMi4x'@;
put 'NCwxMC44MUE1Ny4xNiw1Ny4xNiwwLDAsMSwxOCwzMC4xNiw1Ny4xNiw1Ny4xNiwwLDAsMSw2Ljk0LDE5LjMzYy0zLTQuMS0zLjY5LTcuNjQtMi4xNC0xMC44MWE1LjksNS45LDAsMCwxLDUuMzMtMi45Myw3LjMxLDcuMzEsMCwwLDEsMiwuMjksNy43LDcuNywwLDAsMSwzLjM4LDJsLjE1LS4z'@;
put 'YTEwLjY2LDEwLjY2LDAsMCwxLDEtMS40MSw5LjY0LDkuNjQsMCwwLDAtMy45NC0yLjIyQzguMiwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4z'@;
put 'MSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0zLjY5QTExLjU1LDEx'@;
put 'LjU1LDAsMCwwLDE4LjE5LDcuNWExNi44OSwxNi44OSwwLDAsMC0yLjQ4LDQuNTZMMjIuMjcsMTUsMTYuNywyMC4yNiwxOSwyM2wtMS41NywxLjM0LTMuNi00LjIyLDQuNzQtNC41MS01LjQ0LTIuNDFhMTkuNDksMTkuNDksMCwwLDEsMi4zLTUuNSwxNC43NywxNC43NywwLDAsMSwxLjA2LTEu'@;
put 'NTRsLjA2LDBhOS42Niw5LjY2LDAsMCwwLTMuODktMi4xOEM4LjE5LDIuNjYsNC4zNCw0Ljg5LDMsNy42NGMtMS44OCwzLjg1LTEuMSw4LjE4LDIuMzIsMTIuODdDOCwyNC4xOCwxMS44MywyNy45LDE3LjM5LDMyLjIyYTEsMSwwLDAsMCwxLjIzLDBjNS41NS00LjMxLDkuMzktOCwxMi4wNy0x'@;
put 'MS43MUMzNC4xLDE1LjgyLDM0Ljg4LDExLjQ5LDMzLDcuNjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksUi5DbHJTaGFwZVRhbGtCdWJibGVzPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMywyNmExLDEsMCwwLDEtMSwxSDhjLS4yMiwwLS40My4y'@;
put 'LS42MS4zM0w0LDMwVjE0YTEsMSwwLDAsMSwxLTFIOC44NlYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsNEgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjdBMywzLDAsMCwwLDMxLDRaTTMyLDIyLjk0LDI4LjUsMjAuMjFh'@;
put 'MSwxLDAsMCwwLS42MS0uMjFIMTRhMSwxLDAsMCwxLTEtMVY3YTEsMSwwLDAsMSwxLTFIMzFBMS4xLDEuMSwwLDAsMSwzMiw3LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMywyNmExLDEsMCwwLDEtMSwx'@;
put 'SDhjLS4yMiwwLS40My4yLS42MS4zM0w0LDMwVjE0YTEsMSwwLDAsMSwxLTFIOC44NlYxMUg1YTMsMywwLDAsMC0zLDNWMzJhMSwxLDAsMCwwLC41Ni44OSwxLDEsMCwwLDAsMS0uMUw4LjcxLDI5SDIyLjE1QTIuNzcsMi43NywwLDAsMCwyNSwyNi4xM1YyNUgyM1oiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIydjkuNzJMMjguNSwyMC4yMWExLDEsMCwwLDAtLjYxLS4yMUgxNGExLDEsMCwwLDEtMS0xVjdhMSwxLDAsMCwxLDEtMUgyMi41YTcuNDksNy40OSwwLDAs'@;
put 'MSwuMjgtMkgxNGEzLDMsMCwwLDAtMywzVjE5YTMsMywwLDAsMCwzLDNIMjcuNTVsNC43OCwzLjcxYTEsMSwwLDAsMCwxLC4xMSwxLDEsMCwwLDAsLjU3LS45VjEyLjM3QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LDE5VjEx'@;
put 'SDVhMywzLDAsMCwwLTMsM1YzMmExLDEsMCwwLDAsLjU2Ljg5LDEsMSwwLDAsMCwxLS4xTDguNzEsMjlIMjIuMTVBMi43NywyLjc3LDAsMCwwLDI1LDI2LjEzVjI1SDE0QTYsNiwwLDAsMSw4LDE5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTMxLDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41Ny0uOVY3QTMsMywwLDAsMCwzMSw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTgsMTlWMTFINWEzLDMsMCwwLDAtMywzVjMyYTEsMSwwLDAsMCwuNTYuODksMSwxLDAsMCwwLDEtLjFMOC43MSwyOUgyMi4xNUEyLjc3LDIuNzcsMCwwLDAsMjUsMjYuMTNWMjVIMTRBNiw2LDAsMCwxLDgsMTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVBNy40OCw3LjQ4LDAsMCwxLDIyLjc4LDRIMTRhMywzLDAsMCwwLTMsM1YxOWEzLDMsMCwwLDAsMywzSDI3LjU1bDQuNzgsMy43MWExLDEsMCwwLDAsMSwuMTEsMSwxLDAsMCwwLC41'@;
put 'Ny0uOVYxMi4zN0E3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksUi5DbHJTaGFwZUNoYXRCdWJibGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJh'@;
put 'MSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0'@;
put 'LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0LjYxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNUgxMWExLDEsMCwwLDAsMCwy'@;
put 'SDI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS43NSwyMC41aC03LjVhMSwxLDAsMCwwLDAsMmg3LjVhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjI4LDEyLjVIMjQuNzJhMSwxLDAsMCwwLDAtMkgxMS4yOGExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJN'@;
put 'MzMuMzgsMTIuNjlhNy40Myw3LjQzLDAsMCwxLTEuODkuNjZBMTAuMzUsMTAuMzUsMCwwLDEsMzIsMTYuNWExMS4wOCwxMS4wOCwwLDAsMS0zLjcxLDguMTEsMSwxLDAsMCwwLS4zMi43M2wwLDUuMzQtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExQTE2LDE2LDAsMCwxLDE4LDI4LjVjLTcu'@;
put 'NzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTJhMTYsMTYsMCwwLDEsNC41NS42NkE3LjQ0LDcuNDQsMCwwLDEsMjMsMy4yMmExOCwxOCwwLDAsMC01LS43MmMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwx'@;
put 'LDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdBMTIuMzIsMTIuMzIsMCwwLDAsMzMuMzgsMTIuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsMTUu'@;
put 'NWExLDEsMCwwLDAsMCwySDI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjUsMjAuNWExLDEsMCwwLDAsMCwyaDcuNWExLDEsMCwwLDAsMC0yWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjI4LDExLjVhMSwxLDAsMCwwLDEsMUgyNC43MmExLDEsMCwwLDAsLjgzLS40N0E3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNUgxMS4yOEEx'@;
put 'LDEsMCwwLDAsMTAuMjgsMTEuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyLjVjLTguODIsMC0xNiw2LjI4LTE2LDE0czcuMTgsMTQsMTYsMTRhMTgsMTgsMCwwLDAsNC44OC0uNjhsNS41MywzLjUyYTEsMSwwLDAsMCwxLjU0LS44NGwwLTYuNzNhMTMsMTMs'@;
put 'MCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVptOCwxNGExLDEsMCwwLDEtMSwxSDExYTEsMSwwLDAsMSwwLTJIMjVBMSwxLDAsMCwxLDI2LDE2LjVabS0zLjI1LDVhMSwxLDAsMCwxLTEsMWgtNy41YTEsMSwwLDAsMSwwLTJoNy41QTEsMSwwLDAsMSwyMi43NSwyMS41Wm0t'@;
put 'MTIuNDctMTBhMSwxLDAsMCwxLDEtMUgyNC43MmExLDEsMCwwLDEsMCwySDExLjI4QTEsMSwwLDAsMSwxMC4yOCwxMS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy4yNWE3LjQ2LDcuNDYsMCwwLDEtNC4z'@;
put 'NS0xLjQsMSwxLDAsMCwxLS45My42NUgxMS4yOGExLDEsMCwwLDEsMC0ySDI0LjJBNy40Niw3LjQ2LDAsMCwxLDIzLDMuMmExOCwxOCwwLDAsMC01LS43Yy04LjgyLDAtMTYsNi4yOC0xNiwxNHM3LjE4LDE0LDE2LDE0YTE4LDE4LDAsMCwwLDQuODgtLjY4bDUuNTMsMy41MmExLDEsMCwwLDAs'@;
put 'MS41NC0uODRsMC02LjczYTEzLDEzLDAsMCwwLDQtOS4yNywxMi4zNCwxMi4zNCwwLDAsMC0uNjgtNEE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuMjVaTTIxLjc1LDIyLjVoLTcuNWExLDEsMCwwLDEsMC0yaDcuNWExLDEsMCwwLDEsMCwyWm0zLjI1LTVIMTFhMSwxLDAsMCwxLDAtMkgyNWExLDEs'@;
put 'MCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuNzUiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlUGljdHVyZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTQsMzBWNkgzMlYzMFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC45MiwxNGEzLDMsMCwxLDAtMy0zQTMsMywwLDAsMCw4LjkyLDE0Wm0wLTQuNkExLjYsMS42LDAsMSwxLDcuMzMsMTEsMS42LDEuNiwwLDAsMSw4LjkyLDkuNDFaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjc4LDE1LjM3bC01LjQsNS40LTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIuOXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYy'@;
put 'MS4xOGwtNS44MS01LjgxQTEsMSwwLDAsMCwyMi43OCwxNS4zN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEuOTMsMTFhMywzLDAsMSwwLTMsM0EzLDMsMCwwLDAsMTEuOTMsMTFabS00LjYsMGExLjYsMS42'@;
put 'LDAsMSwxLDEuNiwxLjZBMS42LDEuNiwwLDAsMSw3LjMzLDExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuMzgsMjAuNzdsLTQtNGExLDEsMCwwLDAtMS40MSwwTDUuOTIsMjIu'@;
put 'OXYyLjgzbDYuNzktNi43OUwxNiwyMi4xOGwtMy43NSwzLjc1SDE1bDguNDUtOC40NUwzMCwyNFYyMS4xOGwtNS44MS01LjgxYTEsMSwwLDAsMC0xLjQxLDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiwxMy4yMlYzMEg0VjZIMjIuNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMyLDRaTTguOTIsOGEzLDMsMCwxLDEtMywzQTMsMywwLDAsMSw4LjkyLDhaTTYsMjdWMjIuOWw2LTYuMDhhMSwxLDAsMCwxLDEuNDEsMEwxNiwxOS4zNSw4LjMy'@;
put 'LDI3Wm0yNCwwSDExLjE1bDYuMjMtNi4yMyw1LjQtNS40YTEsMSwwLDAsMSwxLjQxLDBMMzAsMjEuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ4LDcuNDgsMCwwLDEsMjIuNzgsNEg0QTIsMiww'@;
put 'LDAsMCwyLDZWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk04LjkyLDhhMywzLDAsMSwxLTMsM0EzLDMsMCwwLDEsOC45Miw4Wk02LDI3VjIyLjlsNi02LjA4YTEsMSwwLDAsMSwxLjQxLDBMMTYsMTkuMzUsOC4zMiwyN1pt'@;
put 'MjQsMEgxMS4xNWw2LjIzLTYuMjMsNS40LTUuNGExLDEsMCwwLDEsMS40MSwwTDMwLDIxLjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxSLkNsclNoYXBlSGFwcHlGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwx'@;
put 'LDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTAuODkiIGN5PSIxMy44OSIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjA1IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTMsMjguMjFhOC42Nyw4LjY3LDAsMCwwLDguMjYtNkg5Ljg3QTguNjcs'@;
put 'OC42NywwLDAsMCwxOC4xMywyOC4yMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk04Ljg5LDEzLjg5YTIsMiwwLDEsMSwyLDJBMiwyLDAs'@;
put 'MCwxLDguODksMTMuODlabTkuMjQsMTQuMzJhOC42Nyw4LjY3LDAsMCwxLTguMjYtNkgyNi4zOEE4LjY3LDguNjcsMCwwLDEsMTguMTMsMjguMjFabTYuOTMtMTIuMzJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMjUuMDUsMTUuODlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIi8+JyksUi5DbHJTaGFwZU5ldXRyYWxGYWNlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNC4wNSwyMi4wNmgtMTJhMSwxLDAsMCwwLDAsMmgxMmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBj'@;
put 'eD0iMjUuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTEuMTYiIGN5PSIxNC4yOCIgcj0iMS44IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'NCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNy4wNSwyMS4wNmExLDEsMCwwLDEtMSwxaC0xMmExLDEsMCwwLDEsMC0yaDEyQTEsMSwwLDAsMSwyNS4wNSwyMy4wNlpNMjcsMTQuMjhhMS44LDEuOCwwLDEsMS0xLjgt'@;
put 'MS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS44LDEuOGExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxMS4xNiwxNi4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxSLkNsclNoYXBlU2FkRmFjZT0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjExLjQxIiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4xNiwyMGE5LDksMCwwLDAtNy4zMywzLjc4LDEsMSwwLDEsMCwxLjYzLDEuMTYsNyw3LDAsMCwxLDExLjMxLS4xMywxLDEsMCwwLDAsMS42LTEuMkE5LDksMCwwLDAsMTguMTYsMjBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptOSwxMi4yOGExLjgsMS44LDAsMSwxLTEuOC0xLjhBMS44LDEuOCwwLDAsMSwyNywxNC4yOFptLTE1LjU1LDEuOGExLjgsMS44LDAsMSwxLDEuOC0xLjhB'@;
put 'MS44LDEuOCwwLDAsMSwxMS40MSwxNi4wOFptMTQsNy41M2ExLDEsMCwwLDEtMS42LDEuMiw3LDcsMCwwLDAtMTEuMzEuMTMsMSwxLDAsMSwxLTEuNjMtMS4xNiw5LDksMCwwLDEsMTQuNTQtLjE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFIuQ2xyU2hh'@;
put 'cGVUaHVtYnNVcD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQsMjZjLTIuOTIsMS44Mi03LjMsNC05LjM3LDRoLTZhMTYuNjgsMTYuNjgsMCwwLDEtMy4zMS02LjA4QTI2LjcxLDI2LjcxLDAsMCwxLDQsMTZoOVY2YTIuMDUsMi4wNSwwLDAsMSwxLjI2LTEuNjljLjc3LDIsMi42Miw2'@;
put 'LjU3LDQuMjMsOC43MkExMS4zOSwxMS4zOSwwLDAsMCwyNCwxNi45MVYxNC43OGE5LjEzLDkuMTMsMCwwLDEtMy45MS0zYy0xLjg4LTIuNTEtNC4yOS05LjExLTQuMzEtOS4xN0ExLDEsMCwwLDAsMTQuNTksMkMxMy4yNSwyLjM4LDExLDMuNiwxMSw2djhIM2ExLDEsMCwwLDAtMSwxLDI5LDI5'@;
put 'LDAsMCwwLDEuNCw5LjYyYzEuODksNS40LDQuMSw3LjE0LDQuMiw3LjIyYTEsMSwwLDAsMCwuNjEuMjFoNi40MmMyLjQzLDAsNi41NS0yLDkuMzctMy42M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDMx'@;
put 'SDI3YTEsMSwwLDAsMS0xLTFWMTRhMSwxLDAsMCwxLDEtMWg3Wm0tNi0yaDRWMTVIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS42MywxMi4xMkMxNy41MSw5LjI4LDE0Ljg4LDIsMTQuODgsMlMxMiwy'@;
put 'LjgzLDEyLDUuMjVWMTVIMi4yM2EyOS40NiwyOS40NiwwLDAsMCwxLjQ0LDkuNzRDNS42MSwzMC4yNyw3LjgsMzIsNy44LDMyaDYuODZDMTYuOSwzMiwyMSwzMC4wNiwyNCwyOC4zMVYxNS41MUExMC44NCwxMC44NCwwLDAsMSwxOS42MywxMi4xMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjcsMTNhMSwxLDAsMCwwLTEsMVYzMGExLDEsMCwwLDAsMSwxaDdWMTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVUaHVtYnNEb3duPSgwLG0uY2xySWNvblNW'@;
put 'RykoJzxwYXRoIGQ9Ik0xMiwxMGMyLjkyLTEuODIsNy4zLTQsOS4zNy00aDZhMTYuNjgsMTYuNjgsMCwwLDEsMy4zMSw2LjA4QTI2LjcxLDI2LjcxLDAsMCwxLDMyLDIwSDIzVjMwYTIuMDUsMi4wNSwwLDAsMS0xLjI2LDEuNjljLS43Ny0yLTIuNjItNi41Ny00LjIzLTguNzJBMTEuMzksMTEu'@;
put 'MzksMCwwLDAsMTIsMTkuMDl2Mi4xM2E5LjEzLDkuMTMsMCwwLDEsMy45MSwzYzEuODgsMi41MSw0LjI5LDkuMTEsNC4zMSw5LjE3YTEsMSwwLDAsMCwxLjE5LjYzQzIyLjc1LDMzLjYyLDI1LDMyLjQsMjUsMzBWMjJoOGExLDEsMCwwLDAsMS0xLDI5LDI5LDAsMCwwLTEuNC05LjYyYy0xLjg5'@;
put 'LTUuNC00LjEtNy4xNC00LjItNy4yMkExLDEsMCwwLDAsMjcuNzksNEgyMS4zN0MxOC45NCw0LDE0LjgzLDYsMTIsNy42M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIsNUg5YTEsMSwwLDAsMSwxLDFWMjJh'@;
put 'MSwxLDAsMCwxLTEsMUgyWk04LDdINFYyMUg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTYuMzcsMjMuODRjMi4xMiwyLjg0LDQuNzYsMTAuMDcsNC43NiwxMC4wN1MyNCwzMy4xMywyNCwzMC43MVYyMWg5'@;
put 'Ljc3YTI5LjQ2LDI5LjQ2LDAsMCwwLTEuNDQtOS43NEMzMC4zOSw1LjY4LDI4LjIsNCwyOC4yLDRIMjEuMzVDMTkuMSw0LDE1LDUuOSwxMiw3LjY1djEyLjhBMTAuODQsMTAuODQsMCwwLDEsMTYuMzcsMjMuODRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTksMjNhMSwxLDAsMCwwLDEtMVY2QTEsMSwwLDAsMCw5LDVIMlYyM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZUNyb3duPSgwLG0uY2xySWNvblNWRykoJ1xuICA8cGF0aCBkPSJNNCwxMy4zM0Ex'@;
put 'LjM5LDEuMzksMCwxLDAsMi42LDE0LjcyLDEuMzksMS4zOSwwLDAsMCw0LDEzLjMzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjgxLDE1Ljg0YTIwLjM1LDIwLjM1LDAsMCwwLTQuNTgsMS40MywyMi43LDIyLjcsMCwwLDAt'@;
put 'My40OCwyLjFBMTcuNjksMTcuNjksMCwwLDEsMjIsMTYuNTdhNDcuNjUsNDcuNjUsMCwwLDEtMi44LTcuNjksMSwxLDAsMCwwLTEtLjc0LDEsMSwwLDAsMC0xLC43NCw0Ni43MSw0Ni43MSwwLDAsMS0yLjgsNy42OSwxNywxNywwLDAsMS0xLjc2LDIuOCwyMi43LDIyLjcsMCwwLDAtMy40OC0y'@;
put 'LjEsMjAuNjYsMjAuNjYsMCwwLDAtNC41OC0xLjQzLDEsMSwwLDAsMC0xLC4zOSwxLDEsMCwwLDAtLjA5LDEuMDVBNTAuMTMsNTAuMTMsMCwwLDEsNy44MiwzMS4xN2ExLDEsMCwwLDAsMSwuODNIMjcuNjJhMSwxLDAsMCwwLDEtLjgzLDUwLjE1LDUwLjE1LDAsMCwxLDQuMjYtMTMuODksMSwx'@;
put 'LDAsMCwwLS4wOS0xLjA1QTEsMSwwLDAsMCwzMS44MSwxNS44NFpNMjYuNzksMzBIOS42NGE1NS42Niw1NS42NiwwLDAsMC0zLjQtMTEuNzEsMTUuNzUsMTUuNzUsMCwwLDEsMi4wOS43OCwyMCwyMCwwLDAsMSwzLjg1LDIuNDUsMSwxLDAsMCwwLDEuMzktLjA5LDE5LjI4LDE5LjI4LDAsMCww'@;
put 'LDIuNjctNCw0My40Niw0My40NiwwLDAsMCwyLTQuODksNDEuNzQsNDEuNzQsMCwwLDAsMiw0Ljg5LDE5LjkyLDE5LjkyLDAsMCwwLDIuNjYsNCwxLDEsMCwwLDAsMS40LjA5LDE5LjIxLDE5LjIxLDAsMCwxLDMuODUtMi40NSwxNC43NywxNC43NywwLDAsMSwyLjA5LS43OEE1NS4wNyw1NS4w'@;
put 'NywwLDAsMCwyNi43OSwzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxlbGxpcHNlIGN4PSIzMy44MyIgY3k9IjEzLjMzIiByeD0iMS4zOSIgcnk9IjEuMzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4g'@;
put 'IDxwYXRoIGQ9Ik0xOC4yMiw2LjM5QTEuMzksMS4zOSwwLDEsMCwxNi44NCw1LDEuMzksMS4zOSwwLDAsMCwxOC4yMiw2LjM5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjIzLDI2LjM0YTEuMTEsMS4xMSwwLDEsMCwxLjEs'@;
put 'MS4xQTEuMSwxLjEsMCwwLDAsMTguMjMsMjYuMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNMTIuNTgsMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwxMi41OCwyNi4zNFoiLz48cGF0aCBkPSJN'@;
put 'MjMuODksMjYuMzRhMS4xMSwxLjExLDAsMSwwLDEuMSwxLjFBMS4xLDEuMSwwLDAsMCwyMy44OSwyNi4zNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG5cbiAgPHBhdGggZD0iTTIuNiwxMS45M0ExLjQsMS40LDAsMSwwLDQsMTMuMzMsMS40LDEuNCww'@;
put 'LDAsMCwyLjYsMTEuOTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxlbGxpcHNlIGN4PSIzMy44MyIgY3k9IjEzLjMzIiByeD0iMS4zOSIgcnk9IjEuMzkiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgPHBhdGggZD0i'@;
put 'TTE4LjIyLDYuMzlBMS4zOSwxLjM5LDAsMSwwLDE2Ljg0LDUsMS4zOSwxLjM5LDAsMCwwLDE4LjIyLDYuMzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS42MywxNi4xQTE4LjYxLDE4LjYxLDAsMCwwLDI4LDE3LjM0YTIxLjU3LDIx'@;
put 'LjU3LDAsMCwwLTQsMi40OSwxOS4yLDE5LjIsMCwwLDEtMi4yNi0zLjQ5LDQ4LjkyLDQ4LjkyLDAsMCwxLTIuNTItNi41OCwxLDEsMCwwLDAtMS0uNzFoMGExLDEsMCwwLDAtMSwuNzEsNDguNDIsNDguNDIsMCwwLDEtMi41Miw2LjU4LDE4LjY5LDE4LjY5LDAsMCwxLTIuMjYsMy40OCwyMi44'@;
put 'MSwyMi44MSwwLDAsMC00LTIuNDhBMTguODMsMTguODMsMCwwLDAsNC45LDE2LjFhMSwxLDAsMCwwLTEsLjMzLDEsMSwwLDAsMC0uMTMsMS4wNyw1NS45LDU1LjksMCwwLDEsNCwxMy41LDEsMSwwLDAsMCwxLC44M2gxOWExLDEsMCwwLDAsMS0uODMsNTUuOSw1NS45LDAsMCwxLDQtMTMuNSwx'@;
put 'LDEsMCwwLDAtLjEzLTEuMDdBMSwxLDAsMCwwLDMxLjYzLDE2LjFaTTExLjA4LDI4LjU1YTEuMTEsMS4xMSwwLDEsMSwxLjEtMS4xMUExLjExLDEuMTEsMCwwLDEsMTEuMDgsMjguNTVabTcuMTUsMGExLjExLDEuMTEsMCwwLDEsMC0yLjIxLDEuMTEsMS4xMSwwLDAsMSwwLDIuMjFabTcuMTYs'@;
put 'MGExLjExLDEuMTEsMCwxLDEsMS4xLTEuMTFBMS4xMSwxLjExLDAsMCwxLDI1LjM5LDI4LjU1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAnKSxSLkNsclNoYXBlSGFzaHRhZz0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDEySDI1LjM0'@;
put 'bDEuNTUtNy43NGExLDEsMCwwLDAtMi0uMzlMMjMuMywxMkgxNS4xMWwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDEzLjA3LDEySDZhMSwxLDAsMCwwLDAsMmg2LjY3bC0xLjYsOEg0YTEsMSwwLDAsMCwwLDJoNi42Nkw5LjExLDMxLjc0YTEsMSwwLDAsMCwuNzksMS4xNy42OC42OCwwLDAs'@;
put 'MCwuMiwwLDEsMSwwLDAsMCwxLS44TDEyLjcsMjRoOC4xOWwtMS41NSw3Ljc0YTEsMSwwLDAsMCwuNzksMS4xNy42Mi42MiwwLDAsMCwuMTksMCwxLDEsMCwwLDAsMS0uOEwyMi45MywyNEgzMGExLDEsMCwwLDAsMC0ySDIzLjMzbDEuNjEtOEgzMmExLDEsMCwwLDAsMC0yWk0yMS4yOSwyMkgx'@;
put 'My4xbDEuNjEtOEgyMi45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cblxuICA8cGF0aCBkPSJNMzEuODcsMTBIMjYuMzJsMS00LjgzQTEsMSwwLDAsMCwyNi4zNSw0aC0yYTEsMSwwLDAsMC0xLC43OEwyMi4zMywxMGgtNS40bDEtNC44M0ExLDEsMCww'@;
put 'LDAsMTcsNEgxNWExLDEsMCwwLDAtMSwuNzhMMTMsMTBIN2ExLDEsMCwwLDAtMSwuOGwtLjQxLDJhMSwxLDAsMCwwLDEsMS4yaDUuNTVMMTAuNSwyMmgtNmExLDEsMCwwLDAtMSwuOGwtLjQxLDJhMSwxLDAsMCwwLDEsMS4ySDkuNjhsLTEsNC44M2ExLDEsMCwwLDAsMSwxLjE3aDJhMSwxLDAs'@;
put 'MCwwLC45NS0uNzhMMTMuNjcsMjZoNS40bC0xLDQuODNBMSwxLDAsMCwwLDE5LDMyaDJhMSwxLDAsMCwwLDEtLjc4TDIzLjA1LDI2aDZhMSwxLDAsMCwwLDEtLjhsLjQtMmExLDEsMCwwLDAtMS0xLjJIMjMuODdsMS42My04aDZhMSwxLDAsMCwwLDEtLjhsLjQxLTJBMSwxLDAsMCwwLDMxLjg3'@;
put 'LDEwWm0tMTIsMTJoLTUuNGwxLjY0LThoNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxSLlNvY2lhbFNoYXBlcz17Y3Jvd246Ui5DbHJTaGFwZUNyb3duLHNoYXJlOlIuQ2xyU2hhcGVTaGFyZSxzdGFyOlIuQ2xyU2hhcGVTdGFyLCJoYWxmLXN0'@;
put 'YXIiOlIuQ2xyU2hhcGVIYWxmU3Rhcixib29rbWFyazpSLkNsclNoYXBlQm9va21hcmssZW52ZWxvcGU6Ui5DbHJTaGFwZUVudmVsb3BlLGNhbGVuZGFyOlguQ2xyU2hhcGVDYWxlbmRhcixldmVudDpYLkNsclNoYXBlRXZlbnQsdGFza3M6Ui5DbHJTaGFwZVRhc2tzLGZsYWc6Ui5DbHJTaGFw'@;
put 'ZUZsYWcsaW5ib3g6Ui5DbHJTaGFwZUluYm94LGhhc2h0YWc6Ui5DbHJTaGFwZUhhc2h0YWcsaGVhcnQ6Ui5DbHJTaGFwZUhlYXJ0LCJoZWFydC1icm9rZW4iOlIuQ2xyU2hhcGVIZWFydEJyb2tlbiwidGFsay1idWJibGVzIjpSLkNsclNoYXBlVGFsa0J1YmJsZXMsImNoYXQtYnViYmxlIjpS'@;
put 'LkNsclNoYXBlQ2hhdEJ1YmJsZSxwaWN0dXJlOlIuQ2xyU2hhcGVQaWN0dXJlLCJoYXBweS1mYWNlIjpSLkNsclNoYXBlSGFwcHlGYWNlLCJuZXV0cmFsLWZhY2UiOlIuQ2xyU2hhcGVOZXV0cmFsRmFjZSwic2FkLWZhY2UiOlIuQ2xyU2hhcGVTYWRGYWNlLCJ0aHVtYnMtdXAiOlIuQ2xyU2hh'@;
put 'cGVUaHVtYnNVcCwidGh1bWJzLWRvd24iOlIuQ2xyU2hhcGVUaHVtYnNEb3dufSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5Tb2NpYWxTaGFwZXMsImZhdm9yaXRlIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuU29jaWFsU2hhcGVzLnN0YXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5T'@;
put 'b2NpYWxTaGFwZXMsImVtYWlsIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuU29jaWFsU2hhcGVzLmVudmVsb3BlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuU29jaWFsU2hhcGVzLCJkYXRlIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuU29jaWFsU2hhcGVzLmNhbGVuZGFyKSksdHlw'@;
put 'ZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKFIuU29jaWFsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RlY2hub2xvZ3ktc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuQ2xyU2hhcGVWTVdBcHA9Ui5D'@;
put 'bHJTaGFwZVZNPVIuQ2xyU2hhcGVSb3V0ZXI9Ui5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9Ui5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz1SLkNsclNoYXBlTmV0d29ya0dsb2JlPVIuQ2xyU2hhcGVUYWJsZXQ9Ui5DbHJTaGFwZU1vYmlsZT1SLkNsclNoYXBlQmF0dGVyeT1SLkNsclNoYXBlQXBw'@;
put 'bGljYXRpb249Ui5DbHJTaGFwZUNvZGU9Ui5DbHJTaGFwZVRlcm1pbmFsPVIuQ2xyU2hhcGVEaXNwbGF5PVIuQ2xyU2hhcGVDb21wdXRlcj1SLkNsclNoYXBlRmxvcHB5PVIuQ2xyU2hhcGVQbHVnaW49Ui5DbHJTaGFwZURvd25sb2FkQ2xvdWQ9Ui5DbHJTaGFwZVVwbG9hZENsb3VkPVIuQ2xy'@;
put 'U2hhcGVFeHBvcnQ9Ui5DbHJTaGFwZUltcG9ydD1SLkNsclNoYXBlU2hpZWxkWD1SLkNsclNoYXBlU2hpZWxkPVIuQ2xyU2hhcGVTaGllbGRDaGVjaz1SLkNsclNoYXBlUmVzb3VyY2VQb29sPVIuQ2xyU2hhcGVEYXRhQ2x1c3Rlcj1SLkNsclNoYXBlTWVtb3J5PVIuQ2xyU2hhcGVDUFU9Ui5D'@;
put 'bHJTaGFwZUJ1aWxkaW5nPVIuQ2xyU2hhcGVBcHBsaWNhdGlvbnM9Ui5DbHJTaGFwZUNsdXN0ZXI9Ui5DbHJTaGFwZVN0b3JhZ2U9Ui5DbHJTaGFwZUhvc3Q9Ui5DbHJTaGFwZURhc2hib2FyZD1SLkNsclNoYXBlTW91c2U9Ui5DbHJTaGFwZUtleWJvYXJkPVIuQ2xyU2hhcGVEZXZpY2VzPVIu'@;
put 'Q2xyU2hhcGVCYWNrdXA9Ui5DbHJTaGFwZUJhY2t1cFJlc3RvcmU9Ui5DbHJTaGFwZUhhcmREaXNrPVIuQ2xyU2hhcGVSYWNrU2VydmVyPVIuQ2xyU2hhcGVXaWZpPVIuQ2xyU2hhcGVCdW5kbGU9Ui5DbHJTaGFwZUJsb2Nrc0dyb3VwPVIuQ2xyU2hhcGVCbG9jaz1SLkNsclNoYXBlTGF5ZXJz'@;
put 'PVIuQ2xyU2hhcGVVbmluc3RhbGw9Ui5DbHJTaGFwZUluc3RhbGw9Ui5DbHJTaGFwZU5vV2lmaT1SLkNsclNoYXBlUGhvbmVIYW5kc2V0PVIuQ2xyU2hhcGVSdWxlclBlbmNpbD12b2lkIDAsUi5UZWNobm9sb2d5U2hhcGVzPVIuQ2xyU2hhcGVGaWxlU2hhcmUyPVIuQ2xyU2hhcGVDaUNkPVIu'@;
put 'Q2xyU2hhcGVBbmltYXRpb249Ui5DbHJTaGFwZVRhcGVEcml2ZT1SLkNsclNoYXBlTWVkaWFDaGFuZ2VyPVIuQ2xyQ29udHJvbEx1bj1SLkNsclNoYXBlUG9kPVIuQ2xyU2hhcGVOb2RlPVIuQ2xyU2hhcGVOYW1lc3BhY2U9Ui5DbHJTaGFwZU5vZGVzPVIuQ2xyU2hhcGVOb2RlR3JvdXA9Ui5D'@;
put 'bHJTaGFwZVN0b3JhZ2VBZGFwdGVyPVIuQ2xyU2hhcGVIb3N0R3JvdXA9Ui5DbHJTaGFwZVNxdWlkPVIuQ2xyU2hhcGVDYXBhY2l0b3I9Ui5DbHJTaGFwZVJlc2lzdG9yPVIuQ2xyU2hhcGVJbmR1Y3Rvcj1SLkNsclNoYXBlUmFkYXI9Ui5DbHJTaGFwZVVzYj1SLkNsclNoYXBlUXJDb2RlPVIu'@;
put 'Q2xyU2hhcGVGaWxlU2hhcmU9Ui5DbHJTaGFwZUNvbnRhaW5lclZvbHVtZT1SLkNsclNoYXBlQ29udGFpbmVyPVIuQ2xyU2hhcGVDZER2ZD1SLkNsclNoYXBlQmFyQ29kZT1SLkNsclNoYXBlQXRvbT1SLkNsclNoYXBlQXNzaWduVXNlcj1SLkNsclNoYXBlUHJvY2Vzc09uVk09Ui5DbHJTaGFw'@;
put 'ZUJsdWV0b290aE9mZj1SLkNsclNoYXBlQmx1ZXRvb3RoPVIuQ2xyU2hhcGVTU0Q9Ui5DbHJTaGFwZU5WTWU9Ui5DbHJTaGFwZUhhcmREcml2ZURpc2tzPVIuQ2xyU2hhcGVIYXJkRHJpdmU9Ui5DbHJTaGFwZUFkbWluaXN0cmF0b3I9Ui5DbHJTaGFwZUZsYXNrPVIuQ2xyU2hhcGVIZWxpeD1S'@;
put 'LkNsclNoYXBlRGVwbG95PVIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9Ui5DbHJTaGFwZUNsb3VkU2NhbGU9Ui5DbHJTaGFwZUNsb3VkTmV0d29yaz1SLkNsclNoYXBlVW5saW5rPVIuQ2xyU2hhcGVMaW5rPVIuQ2xyU2hhcGVEaXNjb25uZWN0PVIuQ2xyU2hhcGVDb25uZWN0PVIuQ2xyU2hhcGVV'@;
put 'bmFyY2hpdmU9Ui5DbHJTaGFwZUFyY2hpdmU9Ui5DbHJTaGFwZUNlcnRpZmljYXRlPXZvaWQgMDt2YXIgYj1lZSgKLyohIC4uL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLG09ZWUoCi8qISAuLi91'@;
put 'dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtSLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44'@;
put 'NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4wOEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0w'@;
put 'LDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4zN1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSww'@;
put 'LDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0xMCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdM'@;
put 'MjgsOS4yNloiLz5cbicpLFIuQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYu'@;
put 'NjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODdsNSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44'@;
put 'OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMuODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCww'@;
put 'LDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBh'@;
put 'MTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2Eu'@;
put 'NjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEzMy43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwy'@;
put 'LDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLFIuQ2xyU2hhcGVOb1dpZmk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIGQ9Ik0xOCwyNC40MmE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwyNC40MlptMCw2YTIsMiwwLDEsMSwyLTJBMiwyLDAsMCwxLDE4LDMwLjQyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0y'@;
put 'Ni4yMSwyMS44NWExLDEsMCwwLDAtLjIzLTEuNCwxMy41NiwxMy41NiwwLDAsMC01LTIuMjNsMy44NywzLjg3QTEsMSwwLDAsMCwyNi4yMSwyMS44NVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTAu'@;
put 'NzJhMjAuODgsMjAuODgsMCwwLDAtNC4xNi40M2wxLjc0LDEuNzRhMTksMTksMCwwLDEsMi40Mi0uMTdBMTguNzYsMTguNzYsMCwwLDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzMuNTUsOC4yQTI4LjExLDI4LjExLDAsMCwwLDguMTEsNS4zNkw5LjY5LDYuOTNBMjYsMjYsMCwwLDEsMzIuNDUsOS44N2ExLDEsMCwwLDAsMS4xLTEuNjdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTEuODQsNC43NSw0LjI3LDcuMThjLS42Mi4zNC0xLjIzLjctMS44MywxLjFBMSwxLDAsMSwwLDMuNTYsOS45NEM0LjI2LDkuNDcsNSw5LDUuNzQsOC42NWwzLjg3LDMuODdBMjAuNTksMjAuNTksMCwwLDAsNi4yMywxNC40LDEs'@;
put 'MSwwLDAsMCw3LjM2LDE2YTE4LjgyLDE4LjgyLDAsMCwxLDMuNzctMmw0LjE2LDQuMTZBMTMuNTEsMTMuNTEsMCwwLDAsMTAsMjAuNTVhMSwxLDAsMCwwLDEuMTgsMS42MUExMS41MiwxMS41MiwwLDAsMSwxNywyMGwxMC44LDEwLjgsMS40MS0xLjQxLTI2LTI2WiIvPlxuICAgICAgICAgICAg'@;
put 'PGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBjeD0iMTgiIGN5PSIyOS41NCIgcj0iMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5LjE4LDE3LjcxbC4xMS0uMTdhMS41MSwxLjUx'@;
put 'LDAsMCwwLS40Ny0yLjFBMjAuNTcsMjAuNTcsMCwwLDAsMTgsMTIuMzdjLS41NiwwLTEuMTEsMC0xLjY1LjA3bDMuMjEsMy4yMWExNy40MSwxNy40MSwwLDAsMSw3LjYsMi41MkExLjQ5LDEuNDksMCwwLDAsMjkuMTgsMTcuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMzIuNzYsOS4zOEEyNy45LDI3LjksMCwwLDAsMTAuMTgsNi4yN0wxMi44MSw4LjlBMjQuNjgsMjQuNjgsMCwwLDEsMzEuMSwxMi4xMmExLjQ5LDEuNDksMCwwLDAsMi0uNDZsLjExLS4xN0ExLjUxLDEuNTEsMCwwLDAsMzIuNzYsOS4zOFoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIGQ9Ik0zLDQuNzVsMy4xLDMuMUEyNy4yOCwyNy4yOCwwLDAsMCwzLjE4LDkuNDJhMS41MSwxLjUxLDAsMCwwLS40OCwyLjExbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMjQu'@;
put 'NjksMjQuNjksMCwwLDEsMy42Ny0xLjlsMy4xNCwzLjE0YTIwLjYzLDIwLjYzLDAsMCwwLTQuNTMsMi4wOSwxLjUxLDEuNTEsMCwwLDAtLjQ2LDIuMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2QTE3LjQ2LDE3LjQ2LDAsMCwxLDE0LjI1LDE2bDMuNiwzLjZhMTMuMzksMTMuMzksMCww'@;
put 'LDAtNi43OSwxLjkzLDEuNSwxLjUsMCwwLDAtLjQ2LDIuMDlsLjEuMTZhMS41MiwxLjUyLDAsMCwwLDIuMDYuNDQsMTAuMiwxMC4yLDAsMCwxLDktLjdMMjksMzAuNzVsMS40MS0xLjQxLTI2LTI2WiIvPlxuJyksUi5DbHJTaGFwZUluc3RhbGw9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYx'@;
put 'MEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTAuMywxOC44N2w3LDYuODlhMSwxLDAsMCwwLDEuNCwwbDctNi44OWExLDEsMCwwLDAtMS40LTEuNDNMMTksMjIuNjVWNGExLDEs'@;
put 'MCwwLDAtMiwwVjIyLjY1bC01LjMtNS4yMWExLDEsMCwwLDAtMS40LDEuNDNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBs'@;
put 'Ny02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwyMi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz48cGF0aCBkPSJNMzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCww'@;
put 'LDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMw'@;
put 'IiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0xMC4zLDE4Ljg3bDcsNi44OWExLDEsMCwwLDAsMS40LDBsNy02Ljg5YTEsMSwwLDAsMC0xLjQtMS40M0wxOSwy'@;
put 'Mi42NVY0YTEsMSwwLDAsMC0yLDBWMjIuNjVsLTUuMy01LjIxYTEsMSwwLDAsMC0xLjQsMS40M1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhh'@;
put 'MSwxLDAsMCwwLDAtMkg1LjA4QTIsMiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBj'@;
put 'bHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksUi5DbHJTaGFwZVVuaW5zdGFsbD0oMCxtLmNs'@;
put 'ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40'@;
put 'MS0xLjQyTDE4LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC45Miw4'@;
put 'SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMEEyLDIsMCwwLDAsMzAuOTIsOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDlsNS4zLDUuMjNBMSwxLDAsMCwwLDI0LjcsMjUuM2wtNS4yOC01LjIxLDUuMjgtNS4yMWExLDEsMCwwLDAtMS40MS0xLjQyTDE4'@;
put 'LDE4LjY4bC01LjMtNS4yM2ExLDEsMCwwLDAtMS40MSwxLjQybDUuMjgsNS4yMUwxMS4zLDI1LjNBMSwxLDAsMCwwLDExLjI5LDI2LjcyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJN'@;
put 'MzEsMTMuNDNWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJINS4wOEEyLDIsMCwwLDAsMywxMFYzMGEyLDIsMCwwLDAsMi4wOCwySDMwLjkyQTIsMiwwLDAsMCwzMywzMFYxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIGQ9'@;
put 'Ik0xMS4yOSwyNi43MmExLDEsMCwwLDAsMS40MSwwTDE4LDIxLjQ5bDUuMyw1LjIzQTEsMSwwLDAsMCwyNC43LDI1LjNsLTUuMjgtNS4yMSw0Ljc1LTQuNjlIMjIuMjNhMy42NSwzLjY1LDAsMCwxLS44MS0uMUwxOCwxOC42OGwtNS4zLTUuMjNhMSwxLDAsMCwwLTEuNDEsMS40Mmw1LjI4LDUu'@;
put 'MjFMMTEuMywyNS4zQTEsMSwwLDAsMCwxMS4yOSwyNi43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiBkPSJNMzEsMTUuNFYzMEg1VjEwSDkuMzhhMSwxLDAsMCwwLDAtMkg1LjA4QTIs'@;
put 'MiwwLDAsMCwzLDEwVjMwYTIsMiwwLDAsMCwyLjA4LDJIMzAuOTJBMiwyLDAsMCwwLDMzLDMwVjE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1'@;
put 'LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksUi5DbHJTaGFwZUxheWVycz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIw'@;
put 'LjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4'@;
put 'LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUt'@;
put 'Ny4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEs'@;
put 'MSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEsMzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicp'@;
put 'LFIuQ2xyU2hhcGVCbG9jaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMEEx'@;
put 'LDEsMCwwLDAsMzEuNDIsOS4wOVpNMTgsNS4xLDI4LjYxLDEwLDE4LDE0LjksNy4zOSwxMFpNNiwxMS41NmwxMSw1LjA4djE0LjhMNiwyNi4zNlpNMTksMzEuNDRWMTYuNjRsMTEtNS4wOHYxNC44WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNTNWMjYuMzZMMTksMzEuNDRWMTYuNjRsMi41Ny0xLjE5YTMuNjcsMy42NywwLDAsMS0yLjExLTEuMjJMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWwzLjA4LDEuNDIsMS0xLjc0TDE4LjQyLDMuMDlhMSwxLDAsMCwwLS44NCwwbC0xMyw2QTEsMSwwLDAs'@;
put 'MCw0LDEwVjI3YTEsMSwwLDAsMCwuNTguOTFsMTMsNmExLDEsMCwwLDAsLjg0LDBsMTMtNkExLDEsMCwwLDAsMzIsMjdWMTUuNTNaTTE3LDMxLjQ0LDYsMjYuMzZWMTEuNTZsMTEsNS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg3LDEuMjZsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTJIMzMuN2ExLjI4LDEuMjgsMCwwLDAsMS4xLTEuOTJMMjkuMDgsMS4yNkExLjI4LDEuMjgsMCwwLDAsMjYuODcsMS4yNloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUu'@;
put 'MWw0LjYxLDIuMTNBNy4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4y'@;
put 'MkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMzEuNDQsNiwyNi4zNlYxMS41NmwxMSw1LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40Miw5LjA5bC0xMy02YTEsMSwwLDAsMC0uODQsMGwtMTMsNkExLDEsMCwwLDAsNCwxMFYy'@;
put 'N2ExLDEsMCwwLDAsLjU4LjkxbDEzLDZhMSwxLDAsMCwwLC44NCwwbDEzLTZBMSwxLDAsMCwwLDMyLDI3VjEwQTEsMSwwLDAsMCwzMS40Miw5LjA5Wk0xOCwxNC45LDcuMzksMTAsMTgsNS4xLDI4LjYxLDEwWk0zMCwyNi4zNiwxOSwzMS40NFYxNi42NGwxMS01LjA4WiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS4zOHYxMUwxOSwzMS40NFYxNi42NGwyLjc5LTEuMjlhMy42OCwzLjY4LDAsMCwxLTIuMjUtMS4xNkwxOCwxNC45LDcuMzksMTAsMTgsNS4xbDMsMS4zOSwxLTEuNzVMMTguNDIsMy4wOWEx'@;
put 'LDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xMiwyMS4xMywxMWExLjI3LDEuMjcsMCwwLDAsMS4xLDEuOTFIMzMuNjhBMS4yNywxLjI3LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTJBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMjYuMzZMMTksMzEuNDRWMTYuNjRsOC4wOC0zLjczYTcuNTcsNy41NywwLDAsMS0yLTEuMjdMMTgsMTQuOSw3LjM5LDEwLDE4LDUuMWw0LjYxLDIuMTNB'@;
put 'Ny4xMiw3LjEyLDAsMCwxLDIyLjUsNmE4LDgsMCwwLDEsLjA3LTFMMTguNDIsMy4wOWExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdhMSwxLDAsMCwwLC41OC45MWwxMyw2YTEsMSwwLDAsMCwuODQsMGwxMy02QTEsMSwwLDAsMCwzMiwyN1YxMy4yMkE3LjM3LDcuMzcs'@;
put 'MCwwLDEsMzAsMTMuNVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJh'@;
put 'ZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxSLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAt'@;
put 'LjU4LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSww'@;
put 'LDAsMCwzMy41MywxOC43NlptLTIuODEuOTFMMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzVaTTE4LjEsNC4wOGw1LjExLDIuMzVMMTguMSw4Ljc4LDEzLDYuNDNaTTEwLjYsMTcuMzFsNS4xMSwyLjM1TDEwLjYsMjIsNS40OSwxOS42N1ptNi41LDExLjQ5LTYuNSwzLTYuNS0zVjIxLjIz'@;
put 'TDEwLjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFpNMTEuNiwxNS41N2gwVjhsNi4wOCwyLjhhMSwxLDAsMCwwLC44NCwwTDI0LjYsOHY3LjU4aDBsLTYuNSwzWk0zMi4xMSwyOC44MWwtNi41LDMtNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOFoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdoLTJ2MGwtNi41LDMtNi41LTNWOGw2LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBsLjI0LS4xMWE0LjE3LDQuMTcsMCwwLDEsLjI5LS42NWwxLjMzLTIu'@;
put 'MzEtMi4yOCwxTDEzLDYuNDNsNS4xLTIuMzUsMy40NywxLjYsMS0xLjczTDE4LjUsMi4wOGExLDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAs'@;
put 'MCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlpNMTAuNiwxNy4zMWw1LjExLDIuMzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm0wLDE0LjQ5LTYuNS0zVjIxLjIzTDEw'@;
put 'LjE4LDI0QTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOCwwLDcuNlptMTUtMTQuNDgsNS4xMSwyLjM1TDI1LjYxLDIyLDIwLjUsMTkuNjdabTAsMTQuNDktNi41MS0zVjIxLjIyTDI1LjE5LDI0QTEsMSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0t'@;
put 'YWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbjxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx'@;
put 'LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG48cGF0aCBkPSJNMzMuNTMsMTguNzYsMjYuNiwxNS41N1YxMi43YTcuNTgsNy41OCwwLDAsMS0yLTEuNTF2NC4zOWwtNi41LDMtNi41LTNWOGw2'@;
put 'LjA4LDIuOGExLDEsMCwwLDAsLjg0LDBMMjMsOC43MmE3LjA1LDcuMDUsMCwwLDEtLjQ3LTJsLTQuNDcsMkwxMyw2LjQzbDUuMS0yLjM1LDQuNDQsMnMwLS4wNiwwLS4wOWE3LjU1LDcuNTUsMCwwLDEsLjI3LTJsLTQuMy0yYTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41'@;
put 'OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMz'@;
put 'LjUzLDE4Ljc2Wk0xMC42LDE3LjMxbDUuMTEsMi4zNUwxMC42LDIyLDUuNDksMTkuNjdabTAsMTQuNDktNi41LTNWMjEuMjNMMTAuMTgsMjRBMSwxLDAsMCwwLDExLDI0bDYuMDgtMi44LDAsNy42Wm0xNS0xNC40OCw1LjExLDIuMzVMMjUuNjEsMjIsMjAuNSwxOS42N1ptMCwxNC40OS02LjUx'@;
put 'LTNWMjEuMjJMMjUuMTksMjRBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbjxjaXJjbGUgY3g9IjMwLjAzIiBjeT0iNi4wMyIgcj0iNSIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0ExLDEsMCwwLDAsMjYsNS41M2wtNy41LTMuNDVhMSwxLDAsMCwwLS44NCwwbC03LjUsMy40NWExLDEsMCwwLDAtLjU4'@;
put 'LjkxdjkuMTRMMi42OCwxOC43NmExLDEsMCwwLDAtLjU4LjkxdjkuNzhoMGExLDEsMCwwLDAsLjU4LjkxbDcuNSwzLjQ1YTEsMSwwLDAsMCwuODQsMGw3LjA4LTMuMjYsNy4wOCwzLjI2YTEsMSwwLDAsMCwuODQsMGw3LjUtMy40NWExLDEsMCwwLDAsLjU4LS45MWgwVjE5LjY3QTEsMSwwLDAs'@;
put 'MCwzMy41MywxOC43NlpNMjUuNjEsMjIsMjAuNSwxOS42N2w1LjExLTIuMzUsNS4xMSwyLjM1Wm0tMS02LjQ0LTYuNDQsM1YxMC44N2ExLDEsMCwwLDAsLjM1LS4wOEwyNC42LDh2Ny41OFpNMTguMSw0LjA4bDUuMTEsMi4zNUwxOC4xLDguNzgsMTMsNi40M1pNMTAuNiwxNy4zMWw1LjExLDIu'@;
put 'MzVMMTAuNiwyMiw1LjQ5LDE5LjY3Wm02LjUsMTEuNDktNi41LDNoMFYyNC4xMWgwQTEsMSwwLDAsMCwxMSwyNGw2LjA4LTIuOFptMTUsMC02LjQ2LDNWMjQuMTFBMSwxLDAsMCwwLDI2LDI0bDYuMDgtMi44WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxw'@;
put 'YXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3djBoLTJ2MGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4bC4xNC0uMDZBMy4yMywzLjIzLDAsMCwxLDE5LDEwbDEuMjgtMi4yMi0yLjE0LDFMMTMsNi40M2w1LjEtMi4zNSwzLjM5LDEuNTYsMS0xLjczLTQtMS44M2Ex'@;
put 'LDEsMCwwLDAtLjg0LDBsLTcuNSwzLjQ1YTEsMSwwLDAsMC0uNTguOTF2OS4xNGwtNi45LDMuMThhMSwxLDAsMCwwLS41OC45MXY5Ljc4YTEsMSwwLDAsMCwuNTguOTFsNy41LDMuNDVhMSwxLDAsMCwwLC44NCwwbDcuMDgtMy4yNiw3LjA4LDMuMjZhMSwxLDAsMCwwLC44NCwwbDcuNS0zLjQ1'@;
put 'YTEsMSwwLDAsMCwuNTgtLjkxVjE5LjY3QTEsMSwwLDAsMCwzMy41MywxOC43NlptLTI4LC45MSw1LjExLTIuMzYsNS4xMSwyLjM1TDEwLjYsMjJaTTEwLjYsMzEuOFYyNC4xMUExLjA4LDEuMDgsMCwwLDAsMTEsMjRsNi4wOC0yLjgsMCw3LjZabTkuOS0xMi4xMyw1LjExLTIuMzUsNS4xMSwy'@;
put 'LjM1TDI1LjYxLDIyWk0yNS42NCwzMS44VjI0LjExQS44OS44OSwwLDAsMCwyNiwyNGw2LjA4LTIuOCwwLDcuNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG48cGF0aCBkPSJNMjYuODksMS4xNGwtNS43Miw5LjkxQTEuMjcs'@;
put 'MS4yNywwLDAsMCwyMi4yNywxM0gzMy43MmExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMSwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44OSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbjxw'@;
put 'YXRoIGQ9Ik0zMy41MywxOC43NiwyNi42LDE1LjU3VjEyLjY5YTcuNjYsNy42NiwwLDAsMS0yLTEuNDd2NC4zNGwtNi40MywzVjEwLjg3YTEuMDUsMS4wNSwwLDAsMCwuMzUtLjA4TDIzLDguNzNhNy42NSw3LjY1LDAsMCwxLS40OC0ybC00LjQyLDJMMTMsNi40M2w1LjEtMi4zNSw0LjM4LDJW'@;
put 'NmE3LjU1LDcuNTUsMCwwLDEsLjI3LTJMMTguNSwyLjA4YTEsMSwwLDAsMC0uODQsMGwtNy41LDMuNDVhMSwxLDAsMCwwLS41OC45MXY5LjE0bC02LjksMy4xOGExLDEsMCwwLDAtLjU4LjkxdjkuNzhhMSwxLDAsMCwwLC41OC45MWw3LjUsMy40NWExLDEsMCwwLDAsLjg0LDBsNy4wOC0zLjI2'@;
put 'LDcuMDgsMy4yNmExLDEsMCwwLDAsLjg0LDBsNy41LTMuNDVhMSwxLDAsMCwwLC41OC0uOTFWMTkuNjdBMSwxLDAsMCwwLDMzLjUzLDE4Ljc2Wm0tMjgsLjkxLDUuMTEtMi4zNiw1LjExLDIuMzVMMTAuNiwyMlpNMTAuNiwzMS44VjI0LjExQTEuMDgsMS4wOCwwLDAsMCwxMSwyNGw2LjA4LTIu'@;
put 'OCwwLDcuNlptOS45LTEyLjEzLDUuMTEtMi4zNSw1LjExLDIuMzVMMjUuNjEsMjJaTTI1LjY0LDMxLjhWMjQuMTFBLjg5Ljg5LDAsMCwwLDI2LDI0bDYuMDgtMi44LDAsNy42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG48Y2ly'@;
put 'Y2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLFIuQ2xyU2hhcGVCdW5kbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSww'@;
put 'LDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIuMTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1'@;
put 'LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxS'@;
put 'LkNsclNoYXBlV2lmaT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4LjEsMCwwLDAtMzEuMTEuMDhBMSwxLDAsMSwwLDMuNTYsOS45NGEyNi4xMSwyNi4xMSwwLDAsMSwyOC44OS0u'@;
put 'MDcsMSwxLDAsMCwwLDEuMS0xLjY3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOC4wNSwxMC43MkEyMC43NCwyMC43NCwwLDAsMCw2LjIzLDE0LjQsMSwxLDAsMCwwLDcuMzYsMTYsMTguODUsMTguODUsMCww'@;
put 'LDEsMjguNjQsMTZhMSwxLDAsMCwwLDEuMTItMS42NUEyMC43NSwyMC43NSwwLDAsMCwxOC4wNSwxMC43MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTguMDUsMTcuOWExMy41MSwxMy41MSwwLDAsMC04LDIu'@;
put 'NjQsMSwxLDAsMCwwLDEuMTgsMS42MSwxMS41NiwxMS41NiwwLDAsMSwxMy42Mi0uMDhBMSwxLDAsMSwwLDI2LDIwLjQ2LDEzLjUyLDEzLjUyLDAsMCwwLDE4LjA1LDE3LjlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIg'@;
put 'ZD0iTTE4LDI0LjQyYTQsNCwwLDEsMCw0LDRBNCw0LDAsMCwwLDE4LDI0LjQyWm0wLDZhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMzAuNDJaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGN4PSIxOCIgY3k9IjI5LjU0'@;
put 'IiByPSIzIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIuNzYsOS4zOGEyNy44NywyNy44NywwLDAsMC0yOS41NywwLDEuNTEsMS41MSwwLDAsMC0uNDgsMi4xMWwuMTEuMTdhMS40OSwxLjQ5LDAsMCwwLDIsLjQ2LDI0'@;
put 'LjY4LDI0LjY4LDAsMCwxLDI2LjI2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDMyLjc2LDkuMzhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiBkPSJNMjguODIsMTUuNDRhMjAuNTks'@;
put 'MjAuNTksMCwwLDAtMjEuNywwLDEuNTEsMS41MSwwLDAsMC0uNDYsMi4xbC4xMS4xN2ExLjQ5LDEuNDksMCwwLDAsMiwuNDYsMTcuNCwxNy40LDAsMCwxLDE4LjM2LDAsMS40OSwxLjQ5LDAsMCwwLDItLjQ2bC4xMS0uMTdBMS41MSwxLjUxLDAsMCwwLDI4LjgyLDE1LjQ0WiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTI0Ljg4LDIxLjQ5YTEzLjQxLDEzLjQxLDAsMCwwLTEzLjgyLDAsMS41LDEuNSwwLDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwx'@;
put 'MC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksUi5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTEtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIiIGhlaWdodD0i'@;
put 'MiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1h'@;
put 'bGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiBkPSJNMTguNjQsMTFBMy42NSwzLjY1LDAsMCwxLDE5LDkuODlMMTkuNTYsOUgxMHYyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFs'@;
put 'ZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDMyVjIxSDRWMTVIMjAuNThBMy42NywzLjY3LDAsMCwxLDE5LDEzLjU2YTMuNjMsMy42MywwLDAsMS0uMjYtLjU2SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNNCwy'@;
put 'OVYyM0gzMnY2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4'@;
put 'LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgeD0iNiIgeT0iOSIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiB4PSIxMCIgeT0iMTciIHdpZHRoPSIxNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIHg9IjYiIHk9IjI1'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCIgZD0iTTEwLDExSDI0di0uNTFBNy40OCw3LjQ4LDAsMCwxLDIzLjEzLDlIMTBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC03LS1iYWRnZWQiIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjY4LS41SDRWN0gyMi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40'@;
put 'Niw3LjQ2LDAsMCwxLDMwLDEzLjVaTTQsMTVIMzJ2Nkg0Wk00LDI5VjIzSDMydjZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIx'@;
put 'MCIgeT0iOSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSI2IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEwIiB5PSIxNyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNMzIsNUg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjdBMiwyLDAsMCwwLDMyLDVaTTQsN0gzMnY2SDRabTAsOEgzMnY2SDRaTTQsMjlWMjNIMzJ2NloiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiB4PSI2IiB5PSIyNSIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIHg9IjEwIiB5PSIyNSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0xOSw5Ljg5LDE5LjU2LDlIMTBWN0gyMC43MWwxLjczLTNINEEyLDIsMCwwLDAsMiw2djZIMTguNTdBMy42NywzLjY3LDAsMCwxLDE5LDkuODlaTTgsOUg2VjdIOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMy42OCwxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOS4zNSwxNEgydjhIMzRWMTUuMzhaTTgsMTlINlYxN0g4Wm0xNiwwSDEwVjE3SDI0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yLDE0djhIMzRWMTRabTYsNUg2VjE3SDhabTE2LDBIMTBWMTdIMjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgZD0iTTIsMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0SDJabTgtM0gyNHYySDEwWk02LDI3SDh2Mkg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1i'@;
put 'YWRnZWQiIGQ9Ik0yMy4xMyw5SDEwVjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNDksNy40OSwwLDAsMSwuMjgtMkg0QTIsMiwwLDAsMCwyLDZ2NkgyNS41MUE3LjUyLDcuNTIsMCwwLDEsMjMuMTMsOVpNOCw5SDZWN0g4WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTIsMjJIMzRWMTRIMlptOC01SDI0'@;
put 'djJIMTBaTTYsMTdIOHYySDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzIsNEg0QTIsMiwwLDAsMCwyLDZ2NkgzNFY2QTIsMiwwLDAsMCwzMiw0Wk04LDlINlY3SDhaTTI0LDlIMTBWN0gyNFoiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yLDMwYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNEgyWm04LTNIMjR2MkgxMFpNNiwyN0g4djJINloiLz5cbicpLFIuQ2xyU2hhcGVIYXJkRGlzaz0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTM0LDIxLjA4bC0xLjQtNS42OEgzMC41MWwx'@;
put 'LjQ5LDZWMjlINFYyMS40NEw3LjA2LDloMTIuNWwxLjE1LTJINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0'@;
put 'QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI0IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0z'@;
put 'LS1iYWRnZWQiIGQ9Ik0zNCwyMS4wOCwzMiwxMy4yMWE3LjQ5LDcuNDksMCwwLDEtMiwuMjlsMiw3Ljk0VjI5SDRWMjEuNDRMNy4wNiw5SDIzLjEzYTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjA2QTIsMiwwLDAsMCw1LjEzLDguNDdMMiwyMS4wOGExLDEsMCwwLDAsMCwuMjRWMjlhMiwyLDAs'@;
put 'MCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIxLjMxQTEsMSwwLDAsMCwzNCwyMS4wOFoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDIxLjA4LDMwLjg2LDguNDNBMiwyLDAsMCwwLDI4Ljk0LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIsMjEuMDhhMSwxLDAsMCwwLDAsLjI0VjI5YTIsMiww'@;
put 'LDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMS4zMUExLDEsMCwwLDAsMzQsMjEuMDhaTTQsMjlWMjEuNDRMNy4wNiw5SDI4LjkzTDMyLDIxLjQ0VjI5WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjYiIHk9IjIw'@;
put 'IiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjI2IiB5PSIyNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTIt'@;
put 'LWFsZXJ0ZWQiIGQ9Ik0zMi41OCwxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjJ2N2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjJabTI4LDVIMjZWMjVoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFk'@;
put 'Z2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiBkPSJNMzIsMTMuMjFBNy40Nyw3LjQ3LDAsMCwxLDIyLjU3LDdINy4wNkEyLDIsMCwwLDAsNS4xMyw4LjQ3TDIuMjksMjBIMzMuNzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMS0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAuODYsOC40M0EyLDIsMCwwLDAsMjguOTQsN0g3LjA2QTIsMiwwLDAsMCw1'@;
put 'LjEzLDguNDdMMi4yOSwyMEgzMy43MVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yLDIydjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyWm0yOCw1SDI2VjI1aDRaIi8+XG4nKSxSLkNsclNoYXBlQmFj'@;
put 'a3VwUmVzdG9yZT0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIg'@;
put 'ZD0iTTEzLDkuOTIsMTcsNlYxOWExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1h'@;
put 'bGVydGVkIiBkPSJNMzEuNTgsMTUuNEgyOS40NmMxLDIuODUsMi4zMSw2LjM3LDIuNTQsNy4wOFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIs'@;
put 'MkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEyLDM0LDIyLDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDEuMTQsMjEu'@;
put 'MTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIy'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0xMyw5LjkyLDE3LDZWMTlhMSwxLDAsMSwwLDIsMFY2bDQsMy45NWExLDEsMCwwLDAsLjcxLjI5bC4xMSwwYTcuNDYsNy40NiwwLDAsMS0x'@;
put 'LjI1LTMuNTJMMTgsMi4xNiwxMS42MSw4LjVBMSwxLDAsMCwwLDEzLDkuOTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1'@;
put 'QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXYyaDcuOTVDMzAsMTYuOTQsMzEuNzIsMjEuNjUsMzIsMjIuNDhWMzBINFYyMi40OEM0LjI4LDIxLjY1LDcuMDUsMTQsNy4wNSwxNEgxNVYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLDIyLDIsMjIuMSwyLDIyLjMzVjMwYTIs'@;
put 'MiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMi4zM0MzNCwyMi4xLDM0LDIyLDMwLjg3LDEzLjQ1WiIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIg'@;
put 'Y3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSI2IiB5PSIyMiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTMsOS45MiwxNyw2VjE5YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVBMSwxLDAsMSwwLDI0'@;
put 'LjM4LDguNUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjJoNy45NUMzMCwx'@;
put 'Ni45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDE1VjEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIy'@;
put 'LjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNUgyNlYyN2g0WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTEzLDkuOTIsMTcsNlYxOGExLDEsMCwxLDAsMiwwVjZsMS40NywxLjQ2LDEtMS43OUwxOCwyLjE2LDExLjYxLDguNUExLDEsMCwwLDAsMTMsOS45Mloi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDIyLjIzQTMuNjIsMy42MiwwLDAsMSwyMSwxNS4xNlYxOGEzLDMsMCwxLDEtNiwwVjEySDcuMDdhMS45MiwxLjkyLDAsMCww'@;
put 'LTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDMzLjkzQzMzLjc5LDIxLjQ5LDMzLjI4LDIwLjA3LDMxLjU4LDE1LjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDVIMjZWMjdoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'Mi0tYmFkZ2VkIiBkPSJNMTMsOS45MiwxNyw2VjE4YTEsMSwwLDEsMCwyLDBWNmw0LDMuOTVhMSwxLDAsMCwwLC43MS4yOWwuMTEsMGE3LjQ2LDcuNDYsMCwwLDEtMS4yNS0zLjUyTDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiIGQ9Ik0zMC44NywxMy40NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1QTcuNDYsNy40NiwwLDAsMSwyNS41MSwxMkgyMXY2YTMsMywwLDEsMS02LDBWMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEu'@;
put 'MzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMzMuOTNDMzMuNzcsMjEuNDMsMzMuMTUsMTkuNywzMC44NywxMy40NVoiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2Ui'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yLDI0djZhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjI0Wm0yOCw1SDI2VjI3aDRaIi8+XG4gICAgICAgICAgICA8cGF0aCBj'@;
put 'bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuODQsMTMuMzdBMS45NCwxLjk0LDAsMCwwLDI4LjkzLDEySDIxdjZhMywzLDAsMSwxLTYsMFYxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgzMy45'@;
put 'M0MzMy43NywyMS40MywzMy4xNCwxOS42OSwzMC44NCwxMy4zN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4'@;
put 'LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksUi5DbHJTaGFwZUJhY2t1cD0oMCxtLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjIiIHdpZHRoPSIy'@;
put 'NCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgZD0iTTE4LDE5Ljg0bDQuNDctNC40NGgtLjIzYTMuNjcsMy42NywwLDAsMS0yLS42MUwxOSwxNlY0YTEsMSwwLDEsMC0yLDBWMTZsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0zMS41OCwxNS40SDI5LjQ2YzEsMi44NSwyLjMxLDYuMzcsMi41NCw3LjA4VjMwSDRWMjIuNDhDNC4yOCwyMS42NSw3LjA1LDE0LDcuMDUsMTRIOS41OGEzLDMs'@;
put 'MCwwLDEtLjE0LTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMiwyMiwyLDIyLjEsMiwyMi4zM1YzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjIuMzNDMzQsMjIuMTIsMzQsMjIsMzEuNTgsMTUuNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCww'@;
put 'LDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIHg9IjYiIHk9IjIyIiB3aWR0aD0iMjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiB4PSIyNiIgeT0iMjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTE4'@;
put 'LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJh'@;
put 'ZGdlZCIgZD0iTTMwLjg3LDEzLjQ1YTcuNTUsNy41NSwwLDAsMS0uODcuMDUsNy40Niw3LjQ2LDAsMCwxLTMuMzUtLjgsMywzLDAsMCwxLS4yNCwxLjNoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThh'@;
put 'MywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIsMjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODcsMTMuNDVaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHg9IjYiIHk9IjIyIiB3aWR0'@;
put 'aD0iMjQiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiXG4gICAgICAgICAgICAgICAgZD0iTTMwLjg0LDEzLjM3QTEuOTQsMS45'@;
put 'NCwwLDAsMCwyOC45MywxMkgyNi41NWEzLDMsMCwwLDEtLjE0LDJoMi41NEMzMCwxNi45NCwzMS43MiwyMS42NSwzMiwyMi40OFYzMEg0VjIyLjQ4QzQuMjgsMjEuNjUsNy4wNSwxNCw3LjA1LDE0SDkuNThhMywzLDAsMCwxLS4xNC0ySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIs'@;
put 'MjIsMiwyMi4xLDIsMjIuMzNWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjIyLjMzQzM0LDIyLjEsMzQsMjIsMzAuODQsMTMuMzdaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE4LDE5Ljg0bDYu'@;
put 'MzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'Ni41OCwyMS4yNiwxMC4yLDE0LjkxQTMsMywwLDAsMSw5LjQ0LDEySDcuMDdhMS45MiwxLjkyLDAsMCwwLTEuOSwxLjMyQzIuODYsMTkuNjgsMi4yNCwyMS40MywyLjA3LDIySDE3LjMzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMi0tYWxlcnRlZCIgZD0iTTIsMjR2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjRabTI4LDRIMjZWMjZoNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIGQ9Ik0x'@;
put 'OC42NiwyMkgzMy45M2MtLjE1LS41MS0uNjUtMS45My0yLjM1LTYuNkgyNS4zbC01Ljg5LDUuODZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIiBkPSJNMTgsMTkuODRsNC40Ny00LjQ0aC0uMjNh'@;
put 'My42NCwzLjY0LDAsMCwxLTItLjYxTDE5LDE2VjRhMSwxLDAsMSwwLTIsMFYxNmwtNC0zLjk1YTEsMSwwLDAsMC0xLjQxLDEuNDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0'@;
put 'IiBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMTYuNTgsMjEuMjYsMTAuMiwxNC45MUEzLDMsMCwwLDEsOS40NCwxMkg3LjA3YTEuOTIsMS45MiwwLDAsMC0xLjksMS4zMkMyLjg2LDE5LjY4LDIuMjQsMjEuNDMsMi4wNywyMkgxNy4zM1oiLz5cbiAgICAgICAg'@;
put 'ICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQiIGQ9Ik0xOC42NiwyMkgzMy45M2MtLjE3LS41Ny0uNzktMi4zLTMuMDYtOC41NWE3LjU1LDcuNTUsMCwwLDEtLjg3LjA1LDcuNDYsNy40NiwwLDAsMS0zLjM1LS44LDMsMywwLDAsMS0uODYsMi4yMWwtNi4zOCw2LjM1WiIvPlxu'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MSIgZD0iTTE4LDE5Ljg0bDYuMzgtNi4zNUExLDEsMCwxLDAsMjMsMTIuMDhMMTksMTZWNGExLDEsMCwxLDAtMiwwVjE2bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0x'@;
put 'OS40MSwyMS4yNmwtLjc0Ljc0SDMzLjkzYy0uMTctLjU3LS43OS0yLjMxLTMuMDktOC42M0ExLjk0LDEuOTQsMCwwLDAsMjguOTMsMTJIMjYuNTVhMywzLDAsMCwxLS43NiwyLjkyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIg'@;
put 'ZD0iTTE2LjU4LDIxLjI2LDEwLjIsMTQuOTFBMywzLDAsMCwxLDkuNDQsMTJINy4wN2ExLjkyLDEuOTIsMCwwLDAtMS45LDEuMzJDMi44NiwxOS42OCwyLjI0LDIxLjQzLDIuMDcsMjJIMTcuMzNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksUi5DbHJTaGFwZURldmljZXM9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0z'@;
put 'MiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhWMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAs'@;
put 'MCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwyaDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIw'@;
put 'VjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLFIuQ2xyU2hhcGVLZXlib2FyZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwy'@;
put 'LDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFptMCwxOEg0VjEwSDMyWiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTUiIHk9IjEzIiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTkiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtNiIgeD0iMjMiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMjciIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAg'@;
put 'ICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgeD0iNyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiB4PSIxMSIgeT0iMTciIHdp'@;
put 'ZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMCIgeD0iMTUiIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTEiIHg9IjE5IiB5PSIxNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIiB4PSIyMyIgeT0iMTciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIgeD0iMjciIHk9IjE3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIHg9IjI3IiB5PSIy'@;
put 'MiIgd2lkdGg9IjEuOTQiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE1IiB4PSI3IiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiB4PSIxMS4xMyIgeT0iMjIiIHdpZHRoPSIxMy43NSIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsOEg0YTIsMiwwLDAsMC0yLDJWMjZhMiwyLDAsMCww'@;
put 'LDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk0xOSwxM2gydjJIMTlabTAsNGgydjJIMTlabS00LTRoMnYySDE1Wm0wLDRoMnYySDE1Wm0tNC00aDJ2MkgxMVpNOSwyNEg3VjIySDlabTAtNUg3VjE3SDlabTAtNEg3VjEzSDlabTIsMmgydjJIMTFabTEzLjg4LDdIMTEu'@;
put 'MTNWMjJIMjQuODhaTTI1LDE5SDIzVjE3aDJabTAtNEgyM1YxM2gyWm0zLjk0LDlIMjdWMjJoMS45NFpNMjksMTlIMjdWMTdoMlptMC00SDI3VjEzaDJaIi8+XG4nKSxSLkNsclNoYXBlTW91c2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYyNGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4'@;
put 'LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMsMCwwLDEsMi42LDBaIi8+XG4nKSxSLkNsclNoYXBlRGFzaGJvYXJkPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMiIgZD0iTTE4LDQuMjVBMTYuNDksMTYuNDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptMTEuMzQsMjUuNUg2LjY2YTE0LjQzLDE0LjQzLDAsMCwxLTMuMTEtNy44NEg3di0ySDMuNTVBMTQuNDEsMTQuNDEsMCwwLDEsNywx'@;
put 'MS4yOWwyLjQ1LDIuNDUsMS40MS0xLjQxTDguNDMsOS44N0ExNC40MSwxNC40MSwwLDAsMSwxNyw2LjI5djMuNWgyVjYuM2ExNC40NywxNC40NywwLDAsMSwxMy40LDEzLjYxSDI4LjkydjJoMy41M0ExNC40MywxNC40MywwLDAsMSwyOS4zNCwyOS43NVoiLz5cbiAgICAgICAgICAgICAgICA8'@;
put 'cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNS44NSwxOC42OWEzLDMsMCwxLDAsNC44My44NWw1LjkyLTUuODEtMS40MS0xLjQxLTUuOTEsNS44MUEzLDMsMCwwLDAsMTUuODUsMTguNjlaIi8+XG4gICAgICAgICAg'@;
put 'ICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiBkPSJNMzIuNTgsMTNhNy40NSw3LjQ1LDAsMCwxLTIuMDYuNDQsMTQuNCwxNC40LDAsMCwxLDEuOTMsNi40M0gyOC45MnYyaDMuNTNhMTQuNDMsMTQuNDMsMCwwLDEt'@;
put 'My4xMSw3Ljg0SDYuNjZhMTQuNDMsMTQuNDMsMCwwLDEtMy4xMS03Ljg0SDd2LTJIMy41NUExNC40MSwxNC40MSwwLDAsMSw3LDExLjI5bDIuNDUsMi40NSwxLjQxLTEuNDFMOC40Myw5Ljg3QTE0LjQxLDE0LjQxLDAsMCwxLDE3LDYuMjl2My41aDJWNi4zQTE0LjQxLDE0LjQxLDAsMCwxLDIy'@;
put 'LjU4LDdhNy41Miw3LjUyLDAsMCwxLS4wOC0xLDcuNTIsNy41MiwwLDAsMSwuMDktMS4wOUExNi40OSwxNi40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDQuMjVBMTYuNDksMTYu'@;
put 'NDksMCwwLDAsNS40LDMxLjRsLjMuMzVIMzAuM2wuMy0uMzVBMTYuNDksMTYuNDksMCwwLDAsMTgsNC4yNVptOC42LDkuNDgtNS45Miw1LjgxYTMsMywwLDEsMS0xLjQxLTEuNDJsNS45MS01LjgxWm0tMjMsNi4xN0g3djJIMy41NmMwLS4zOS0uMDUtLjc3LS4wNS0xLjE3UzMuNTMsMjAuMTgs'@;
put 'My41NSwxOS45Wm00Ljg4LTEwLDIuNDYsMi40Nkw5LjQ3LDEzLjc0LDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3Wk0xOSw5Ljc5SDE3VjYuMjljLjMyLDAsLjYzLDAsMSwwcy43LDAsMSwuMDVaTTMyLjQ5LDIwLjc0YzAsLjM5LDAsLjc5LS4wNSwxLjE3SDI4Ljkydi0yaDMu'@;
put 'NTNDMzIuNDcsMjAuMTgsMzIuNDksMjAuNDYsMzIuNDksMjAuNzRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0zMi41OCwxM2E3LjQ2LDcuNDYsMCwwLDEtMTAtOC4xMkExNi40OSwx'@;
put 'Ni40OSwwLDAsMCw1LjQsMzEuNGwuMy4zNUgzMC4zbC4zLS4zNWExNi40NSwxNi40NSwwLDAsMCwyLTE4LjM2Wk0xNyw2LjI5Yy4zMiwwLC42MywwLDEsMHMuNywwLDEsLjA1djMuNUgxN1pNNywyMS45MUgzLjU2YzAtLjM5LS4wNS0uNzctLjA1LTEuMTdzMC0uNTYsMC0uODNIN1ptMi41MS04'@;
put 'LjE2TDcsMTEuMjlBMTQuNTcsMTQuNTcsMCwwLDEsOC40Myw5Ljg3bDIuNDYsMi40NlptMTAuNjIsOS4xOWEzLDMsMCwxLDEtLjgyLTQuODFsNS45MS01LjgxLDEuNDEsMS40MS01LjkyLDUuODFBMywzLDAsMCwxLDIwLjA5LDIyLjkzWm0xMi4zNS0xSDI4Ljkydi0yaDMuNTNjMCwuMjgsMCwu'@;
put 'NTUsMCwuODNTMzIuNDcsMjEuNTIsMzIuNDQsMjEuOTFaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksUi5DbHJTaGFw'@;
put 'ZUhvc3Q9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwyLjQ4LDIuNDdBMi40OCwyLjQ4LDAsMCwwLDE4LDI0LjNabTAsMy42YTEuMTMsMS4xMywwLDEsMSwxLjEzLTEu'@;
put 'MTJBMS4xMywxLjEzLDAsMCwxLDE4LDI3LjlaIi8+PHJlY3QgeD0iMTMuNSIgeT0iMjAuNyIgd2lkdGg9IjkiIGhlaWdodD0iMS40NCIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjUuNjUsMy42SDEwLjM1'@;
put 'QTEuMzUsMS4zNSwwLDAsMCw5LDQuOTVWMzIuNEgyN1Y0Ljk1QTEuMzUsMS4zNSwwLDAsMCwyNS42NSwzLjZabS0uNDUsMjdIMTAuOFY1LjRIMjUuMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTIuNiIg'@;
put 'eT0iNy4yIiB3aWR0aD0iMTAuOCIgaGVpZ2h0PSIxLjQ0Ii8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjYiIHk9IjEwLjgiIHdpZHRoPSIxMC44IiBoZWlnaHQ9IjEuNDQiLz5cbiAgICAgICAgICAgICAg'@;
put 'ICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE1LjIsMjcuOGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcu'@;
put 'OGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIg'@;
put 'eD0iMTMiIHk9IjIxIiB3aWR0aD0iMTAiIGhlaWdodD0iMS42Ii8+XG4gICAgICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIHBvaW50cz0iMjEuMyw2IDEyLDYgMTIsNy42IDIwLjQsNy42Ii8+'@;
put 'XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIGQ9Ik0xMiwxMS42aDYuNmMwLTAuNiwwLjItMS4xLDAuNC0xLjZoLTdWMTEuNnoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIgZD0iTTI2LDE1LjRWMzJIMTBWNGgxMi41bDEuMS0ySDkuNUM4LjcsMiw4LDIuNyw4LDMuNVYzNGgyMFYxNS40SDI2eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuOSwxLjFMMjEuMSwxMWMtMC40LDAuNi0wLjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAu'@;
put 'NS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgZD0iTTE1LjIsMjcu'@;
put 'OGMwLDEuNSwxLjIsMi44LDIuOCwyLjhzMi44LTEuMiwyLjgtMi44UzE5LjUsMjUsMTgsMjVTMTUuMiwyNi4yLDE1LjIsMjcuOHogTTE5LjIsMjcuOGMwLDAuNy0wLjYsMS4yLTEuMiwxLjJzLTEuMi0wLjYtMS4yLTEuMnMwLjYtMS4yLDEuMi0xLjJTMTkuMiwyNy4xLDE5LjIsMjcuOHoiLz5c'@;
put 'biAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIHg9IjEzIiB5PSIyMSIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgZD0iTTI0LDEwLjVjLTAuMS0wLjItMC4yLTAuMy0wLjMtMC41SDEydjEuNmgxMlYxMC41eiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTQtLWJhZGdlZCIgZD0iTTEyLDZ2MS42aDEwLjdjLTAuMS0wLjUtMC4yLTEuMS0wLjItMS42SDEyeiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIgZD0iTTI2LDEyLjNWMzJIMTBWNGgx'@;
put 'Mi44YzAuMi0wLjcsMC41LTEuNCwwLjktMkg5LjVDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMTMuMkMyNy4zLDEzLDI2LjYsMTIuNywyNiwxMi4zeiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0t'@;
put 'YmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI2LjUsMmgtMTdDOC43LDIsOCwyLjcsOCwzLjVWMzRoMjBWMy41QzI4LDIuNywyNy4zLDIsMjYu'@;
put 'NSwyeiBNMTgsMzAuNWMtMS41LDAtMi44LTEuMi0yLjgtMi44UzE2LjUsMjUsMTgsMjVzMi44LDEuMiwyLjgsMi44UzE5LjUsMzAuNSwxOCwzMC41eiBNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiBNMjQsMTEuNkgxMlYxMGgxMlYxMS42eiBNMjQsNy42SDEyVjZoMTJWNy42eiIvPlxuICAgICAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgY3g9IjE4IiBjeT0iMjcuOCIgcj0iMS4yIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIg'@;
put 'ZD0iTTIyLjIsMTUuM2MtMiwwLTMuNy0xLjYtMy43LTMuN0gxMlYxMGg2LjljMC0wLjEsMC4xLTAuMiwwLjEtMC4ybDEuMi0yLjJIMTJWNmg5LjJsMi4zLTRoLTE0QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjE1LjNIMjIuMnogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41'@;
put 'LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXogTTIzLDIyLjZIMTNWMjFoMTBWMjIuNnoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIGN4PSIxOCIgY3k9'@;
put 'IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi45LDFsLTUuNyw5LjljLTAuMywwLjYtMC4xLDEuNCwwLjUsMS43YzAuMiwwLjEsMC40'@;
put 'LDAuMiwwLjYsMC4yaDExLjRjMC43LDAsMS4zLTAuNiwxLjMtMS4zYzAtMC4yLTAuMS0wLjQtMC4yLTAuNkwyOS4xLDFjLTAuNC0wLjYtMS4xLTAuOC0xLjgtMC41QzI3LjEsMC43LDI3LDAuOCwyNi45LDF6Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0yNCwxMC4zdjEuMkgxMlYxMGgxMS44Yy0wLjUtMC43LTAuOC0xLjUtMS0yLjRIMTJWNmgxMC41YzAsMCwwLTAuMSwwLTAuMWMwLTEuNCwwLjQtMi43LDEuMS0zLjlIOS41QzguNywyLDgsMi43LDgsMy41VjM0aDIwVjEzLjFD'@;
put 'MjYuNCwxMi42LDI1LDExLjcsMjQsMTAuM3ogTTE4LDMwLjVjLTEuNSwwLTIuOC0xLjItMi44LTIuOFMxNi41LDI1LDE4LDI1czIuOCwxLjIsMi44LDIuOFMxOS41LDMwLjUsMTgsMzAuNXpNMjMsMjIuNkgxM1YyMWgxMFYyMi42eiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIgY3k9IjI3LjgiIHI9IjEuMiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFk'@;
put 'Z2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksUi5DbHJTaGFwZVN0b3JhZ2U9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMyw2LjY5aDBjLS4xOC0zLjQxLTkuNDctNC4zMy0xNS00LjMzUzMsMy4y'@;
put 'OSwzLDYuNzhWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0LjQzczE1LS45MywxNS00LjQzVjYuNzhzMCwwLDAsMFMzMyw2LjcsMzMsNi42OVptLTIsNy41NmMtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMTUuMzR2Mi4wOEE0My4zMiw0My4zMiwwLDAs'@;
put 'MCwxOCwxOC43YzQsMCw5LjkzLS40OCwxMy0ydjUuMTdjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDIyLjkyVjI1YTQzLjMyLDQzLjMyLDAsMCwwLDExLDEuMjhjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xYy0uMzUuODYtNS4wOCwyLjQ1LTEzLDIuNDVTNS4z'@;
put 'LDMwLjIsNSwyOS4zN1Y2LjgyQzUuMyw2LDEwLDQuMzYsMTgsNC4zNmM3Ljc3LDAsMTIuNDYsMS41MywxMywyLjM3LS41Mi44Ny01LjIxLDIuMzktMTMsMi4zOUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2M0LDAsOS45My0uNDgsMTMtMloi'@;
put 'Lz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgZD0iTTE5LjUxLDkuMDksMTgsOS4xMUEzNy42LDM3LjYsMCwwLDEsNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yN2gu'@;
put 'NjFBMy42NiwzLjY2LDAsMCwxLDE5LDkuODlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIGQ9Ik0yOC44MywxNS40QTM4LjM3LDM4LjM3LDAsMCwxLDE4LDE2LjcsMzcuNDUsMzcu'@;
put 'NDUsMCwwLDEsNywxNS4zNHYyLjA4QTQzLjMzLDQzLjMzLDAsMCwwLDE4LDE4LjdjNCwwLDkuOTMtLjQ4LDEzLTJ2NS4xN2MtLjMzLjg2LTUuMDYsMi40NS0xMywyLjQ1QTM3LjQ1LDM3LjQ1LDAsMCwxLDcsMjIuOTJWMjVhNDMuMzMsNDMuMzMsMCwwLDAsMTEsMS4yOGM0LDAsOS45My0uNDgs'@;
put 'MTMtMnY1LjFjLS4zNS44Ni01LjA4LDIuNDUtMTMsMi40NVM1LjMsMzAuMiw1LDI5LjM3VjYuODJDNS4zLDYsMTAsNC4zNiwxOCw0LjM2YzEuNSwwLDIuODkuMDYsNC4xNS4xNmwxLjEtMS45Yy0xLjg2LS4xOC0zLjctLjI2LTUuMjUtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4zN2Mw'@;
put 'LDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDN2LTE0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0IiBkPSJNMjYuODUsMS4xNCwyMS4xMywx'@;
put 'MUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMS0tYmFkZ2VkIiBkPSJNNyw3Ljc2VjkuODVhNDMuNTMsNDMuNTMsMCwwLDAsMTEsMS4yNyw1NC44Miw1NC44MiwwLDAsMCw2LjItLjM2LDcuNSw3LjUsMCwwLDEtMS4xMy0xLjg4Yy0xLjUuMTUtMy4yLjI0LTUuMDcuMjRBMzcuNiwzNy42LDAsMCwxLDcsNy43NloiLz5cbiAgICAg'@;
put 'ICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIGQ9Ik0zMSwxMy40M3YuODJjLS4zMy44Ni01LjA2LDIuNDUtMTMsMi40NUEzNy40NSwzNy40NSwwLDAsMSw3LDE1LjM0djIuMDhBNDMuMzMsNDMuMzMsMCww'@;
put 'LDAsMTgsMTguN2M0LDAsOS45My0uNDgsMTMtMnY1LjE3Yy0uMzMuODYtNS4wNiwyLjQ1LTEzLDIuNDVBMzcuNDUsMzcuNDUsMCwwLDEsNywyMi45MlYyNWE0My4zMyw0My4zMywwLDAsMCwxMSwxLjI4YzQsMCw5LjkzLS40OCwxMy0ydjUuMWMtLjM1Ljg2LTUuMDgsMi40NS0xMywyLjQ1UzUu'@;
put 'MywzMC4yLDUsMjkuMzdWNi44MkM1LjMsNiwxMCw0LjM2LDE4LDQuMzZjMS43LDAsMy4yNS4wOCw0LjY0LjJhNy40NCw3LjQ0LDAsMCwxLC42Ny0xLjk0Yy0xLjg4LS4xOC0zLjc1LS4yNi01LjMxLS4yNi01LjU3LDAtMTUsLjkzLTE1LDQuNDNWMjkuMzdjMCwzLjQ5LDkuNDMsNC40MywxNSw0'@;
put 'LjQzczE1LS45MywxNS00LjQzVjEyLjg3QTcuNDUsNy40NSwwLDAsMSwzMSwxMy40M1oiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIg'@;
put 'cj0iNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0VjguNTljLS40MywyLjItNywzLjk0LTE1LjA5LDMuOTRBMzkuNCwzOS40LDAsMCwxLDYu'@;
put 'MjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MUMyNiwxMC41MywzMi41Miw4Ljc5LDMzLDYuNjFoMEMzMi44LDMuMiwyMy41MiwyLjI4LDE4LDIuMjhTMywzLjIxLDMsNi43MVYyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUtLjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcs'@;
put 'MjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0y'@;
put 'QTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiBkPSJNMTcuOTEsMjAuMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMTguNzd2LTJhMzkuNCwz'@;
put 'OS40LDAsMCwwLDExLjY2LDEuNTFjNi45LDAsMTIuNy0xLjI3LDE0LjUxLTNIMjIuMjNhMy42NywzLjY3LDAsMCwxLTMuNTUtMi43NWgtLjc3QTM5LjQsMzkuNCwwLDAsMSw2LjI1LDExVjlhMzkuNCwzOS40LDAsMCwwLDExLjY2LDEuNTFoLjgyQTMuNjQsMy42NCwwLDAsMSwxOSw5Ljc1bDQu'@;
put 'MTctNy4yMmMtMS44NS0uMTgtMy42OC0uMjUtNS4yMS0uMjUtNS41NywwLTE1LC45My0xNSw0LjQzVjI5LjI5YzAsMy40OSw5LjQzLDQuNDMsMTUsNC40M3MxNS0uOTMsMTUtNC40M1YyNC4wOUMzMi41NywyNi4yOCwyNiwyOCwxNy45MSwyOEEzOS40LDM5LjQsMCwwLDEsNi4yNSwyNi41MnYt'@;
put 'MkEzOS40LDM5LjQsMCwwLDAsMTcuOTEsMjZDMjYsMjYsMzIuNTcsMjQuMjgsMzMsMjIuMDlWMTYuMzRDMzIuNTcsMTguNTMsMjYsMjAuMjgsMTcuOTEsMjAuMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'Mi0tYWxlcnRlZCBjbHItaS1hbGVydCIgZD0iTTI2Ljg1LDFsLTUuNzIsOS45MWExLjI4LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDFBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xh'@;
put 'c3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIGQ9Ik0xNy45MSwxOC4yOGM4LjA4LDAsMTQuNjYtMS43NCwxNS4wOS0zLjk0di0xLjZhNy40Nyw3LjQ3LDAsMCwxLTcuMzgtLjgsNDguMyw0OC4zLDAsMCwxLTcuNzEuNTlBMzkuNCwzOS40LDAsMCwx'@;
put 'LDYuMjUsMTFWOWEzOS40LDM5LjQsMCwwLDAsMTEuNjYsMS41MSw1MSw1MSwwLDAsMCw2LS4zNCw3LjQ2LDcuNDYsMCwwLDEtLjU5LTcuNjVjLTEuODctLjE4LTMuNzMtLjI2LTUuMjgtLjI2LTUuNTcsMC0xNSwuOTMtMTUsNC40M1YyOS4yOWMwLDMuNDksOS40Myw0LjQzLDE1LDQuNDNzMTUt'@;
put 'LjkzLDE1LTQuNDNWMjQuMDlDMzIuNTcsMjYuMjgsMjYsMjgsMTcuOTEsMjhBMzkuNCwzOS40LDAsMCwxLDYuMjUsMjYuNTJ2LTJBMzkuNCwzOS40LDAsMCwwLDE3LjkxLDI2QzI2LDI2LDMyLjU3LDI0LjI4LDMzLDIyLjA5VjE2LjM0Yy0uNDMsMi4yLTcsMy45NC0xNS4wOSwzLjk0QTM5LjQs'@;
put 'MzkuNCwwLDAsMSw2LjI1LDE4Ljc3di0yQTM5LjQsMzkuNCwwLDAsMCwxNy45MSwxOC4yOFoiLz5cbiAgICAgICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI1Ljg2'@;
put 'IiByPSI1Ii8+XG4nKSxSLkNsclNoYXBlQ2x1c3Rlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwxLjY1LDAsMCwwLDMxLjM2LDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz48ZWxsaXBzZSBjeD0iMTguMDEiIGN5PSIyNS45OSIgcng9IjEuOCIgcnk9'@;
put 'IjEuNzkiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0yNCwzMEgxMlY2SDI0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik01LDEwSDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1YzMkg4LjVWMzBINVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5'@;
put 'PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDkuODlsLjM5LS42OEgxMy41djEuNmg1LjE3QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNCwzMEgxMlY2aDkuMjlsMS4xNS0ySDExLjY4QTEuNjgsMS42OCwwLDAsMCwxMCw1LjY4VjMySDI2VjE1LjRIMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMSAxNS40IDMxIDMwIDI3LjUgMzAgMjcuNSAzMiAzMyAzMiAzMyAxNS40IDMxIDE1LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUsMTBIOC41VjhINC42NEExLjY1LDEuNjUsMCwwLDAsMyw5LjY3VjMySDguNVYzMEg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUt'@;
put 'LWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+PGVsbGlwc2UgY3g9IjE4LjAxIiBjeT0iMjUuOTkiIHJ4PSIxLjgiIHJ5PSIxLjc5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjEzLjUiIHk9IjkuMjEiIHdpZHRoPSI5IiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTAuNDlWMzBIMTJWNkgyMi41YTcuNDksNy40OSwwLDAs'@;
put 'MSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjUzLDcuNTMsMCwwLDEsMjQsMTAuNDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMSwx'@;
put 'My40M1YzMEgyNy41djJIMzNWMTIuODdBNy40NSw3LjQ1LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjM2LDhIMjcuNVYzMkgzM1Y5LjY3QTEuNjUsMS42NSwwLDAsMCwzMS4zNiw4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQuMzIsNEgxMS42OEExLjY4LDEu'@;
put 'NjgsMCwwLDAsMTAsNS42OFYzMkgyNlY1LjY4QTEuNjgsMS42OCwwLDAsMCwyNC4zMiw0Wk0xOCwyNy43OUExLjc5LDEuNzksMCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsOS42N1YzMkg4LjVWOEg0LjY0QTEuNjUsMS42NSwwLDAsMCwzLDkuNjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy41IiB5PSIx'@;
put 'NS40IiB3aWR0aD0iNS41IiBoZWlnaHQ9IjE2LjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NmEzLjY4LDMuNjgsMCwwLDEtLjMxLTNIMTNWOWg2LjU2bDIuODktNUgxMS42'@;
put 'OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxNS40SDIyLjIzQTMuNjksMy42OSwwLDAsMSwxOSwxMy41NlpNMTgsMjcuNzlBMS43OSwxLjc5LDAsMSwxLDE5LjgxLDI2LDEuOCwxLjgsMCwwLDEsMTgsMjcuNzlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29s'@;
put 'aWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMyw5LjY3VjMySDguNVY4SDQuNjRBMS42NSwxLjY1LDAsMCwwLDMsOS42N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgtMkgxMS42OEExLjY4LDEuNjgsMCwwLDAsMTAsNS42OFYzMkgyNlYxMi4zNEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2Wk0xOCwyNy43OUExLjc5LDEuNzks'@;
put 'MCwxLDEsMTkuODEsMjYsMS44LDEuOCwwLDAsMSwxOCwyNy43OVpNMjMsMTAuNkgxM1Y5SDIzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDcsNy40NywwLDAsMS0yLjUt'@;
put 'LjQ0VjMySDMzVjEyLjg3QTcuNDcsNy40NywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjggOCA0IDggNCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDggMTUgOCAxNSAxMCAyMSAxMCAyMSA0IDE5IDQgMTkgOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBv'@;
put 'aW50cz0iMzAgNCAzMCA4IDI2IDggMjYgMTAgMzIgMTAgMzIgNCAzMCA0IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICAgICAgICAg'@;
put 'ICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSAzMCAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYg'@;
put 'OCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYgMzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjggOCA0IDgg'@;
put 'NCAxMCAxMCAxMCAxMCA0IDggNCA4IDgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSA4IDE1IDggMTUgMTAgMjEgMTAgMjEgNCAxOSA0IDE5IDgiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxOSAxOSAxNSAxOSAxNSAyMSAyMSAyMSAyMSAxNSAxOSAxNSAxOSAxOSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cG9s'@;
put 'eWdvbiBwb2ludHM9IjMwIDE5IDI2IDE5IDI2IDIxIDMyIDIxIDMyIDE1IDMwIDE1IDMwIDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAg'@;
put 'MzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTkgMzAgMTUgMzAgMTUgMzIgMjEgMzIgMjEgMjYgMTkgMjYgMTkgMzAiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAzMCAyNiAzMCAyNiAzMiAzMiAzMiAzMiAyNiAzMCAyNiAzMCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtOC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4'@;
put 'IDggNCA4IDQgMTAgMTAgMTAgMTAgNCA4IDQgOCA4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE5IDQgMTkgNCAyMSAxMCAyMSAxMCAxNSA4IDE1IDggMTkiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE5IDE5IDE1IDE5IDE1IDIxIDIxIDIxIDIxIDE1IDE5IDE1IDE5IDE5IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIzMCAxNSAzMCAxOSAyNiAxOSAyNiAyMSAzMiAyMSAzMiAxNSAzMCAxNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAzMCA0IDMwIDQgMzIgMTAgMzIgMTAgMjYgOCAyNiA4IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIx'@;
put 'OSAzMCAxNSAzMCAxNSAzMiAyMSAzMiAyMSAyNiAxOSAyNiAxOSAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMzAgMzAgMjYgMzAgMjYgMzIgMzIgMzIgMzIgMjYg'@;
put 'MzAgMjYgMzAgMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksOEgxNXYyaDRMMTksOS44OSwyMSw2LjVWNEgxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEu'@;
put 'MTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOS0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xy'@;
put 'LWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0i'@;
put 'NiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMjYiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjI2IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC03Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1w'@;
put 'YXRoLTgiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI2IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iNCIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IHg9IjQiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNSIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNS0tYWxlcnRl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNiIgeT0iMjYiIHdpZHRoPSI2IiBoZWln'@;
put 'aHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTctLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNSwxMGg0TDE5LDkuODksMjEsNi41VjRIMTVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC04'@;
put 'LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC05LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iNCIgeT0iMTUiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI0IiB5PSIyNiIgd2lkdGg9IjYiIGhlaWdodD0iNiIg'@;
put 'Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE1IiB5PSI0IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCIv'@;
put 'PlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTUiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTYtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjE1IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTctLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjYiIHk9IjI2IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlQnVpbGRpbmc9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5Ljg4LDNINi4xMkEyLjEyLDIuMTIsMCwwLDAsNCw1LjEyVjMzSDIyVjUu'@;
put 'MTJBMi4xMiwyLjEyLDAsMCwwLDE5Ljg4LDNaTTIwLDMxSDE3VjI4SDl2M0g2VjUuMTJBLjEyLjEyLDAsMCwxLDYuMTIsNUgxOS44OGEuMTIuMTIsMCwwLDEsLjEyLjEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSI4IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTctLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4'@;
put 'IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdl'@;
put 'ZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1iYWRnZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVp'@;
put 'Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xNi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTE3LS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9'@;
put 'IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsMTMuNDNWMzFIMjN2MkgzM1YxMi44N0E3LjQ1LDcuNDUsMCwwLDEsMzEsMTMuNDNaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yMC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTIxLS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iOCIgd2lkdGg9'@;
put 'IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4'@;
put 'PSIxMiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWFsZXJ0ZWQiLz5c'@;
put 'biAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdo'@;
put 'dD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjgiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMTAtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIyMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNiIg'@;
put 'eT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE0LS1hbGVydGVkIi8+XG4g'@;
put 'ICAgICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0'@;
put 'PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTYtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMCwzMUgxN1YyOEg5djNINlY1LjEyQS4xMi4xMiwwLDAsMSw2LjEyLDVIMTkuODhhLjEyLjEyLDAsMCwxLC4xMi4xMlY4LjI0'@;
put 'bDItMy40MUEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWMTUuMzhhMy42OCwzLjY4LDAsMCwxLTItLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTE3LS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cG9seWdvbiBwb2ludHM9IjMxIDE1LjQgMzEgMzEgMjMgMzEgMjMgMzMgMzMgMzMgMzMgMTUuNCAzMSAxNS40IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTgtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44'@;
put 'NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xOS0t'@;
put 'YWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDhIMjJWMzNIMzNWMTBBMiwyLDAsMCwwLDMxLDhaTTI2LDI1SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMlptMC01SDI4VjEzaDJaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThIOVpt'@;
put 'MC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0y'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIOVYzMGg2djNoNVYxNC42NGEzLjY3LDMuNjcsMCwwLDEtMS00Ljc2bDEtMS42NVY1LjEyQTIuMTIsMi4xMiwwLDAsMCwxNy44OCwzWk05LDI1SDdWMjNIOVptMC01SDdWMThI'@;
put 'OVptMC01SDdWMTNIOVptMC01SDdWOEg5Wm00LDE1SDExVjIzaDJabTAtNUgxMVYxOGgyWm0wLTVIMTFWMTNoMlptMC01SDExVjhoMlptNCwxNUgxNVYyM2gyWm0wLTVIMTVWMThoMlptMC01SDE1VjEzaDJabTAtNUgxNVY4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNGwtLjIzLDBWMzNIMzNWMTUuNFpNMjYsMjVIMjRWMjNoMlptMC01SDI0VjE4aDJabTQsNUgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNy44OCwzSDYuMTJBMi4xMiwyLjEyLDAsMCwwLDQsNS4xMlYzM0g5VjMwaDZ2M2g1VjUuMTJBMi4xMiwyLjEyLDAsMCww'@;
put 'LDE3Ljg4LDNaTTksMjVIN1YyM0g5Wm0wLTVIN1YxOEg5Wm0wLTVIN1YxM0g5Wm0wLTVIN1Y4SDlabTQsMTVIMTFWMjNoMlptMC01SDExVjE4aDJabTAtNUgxMVYxM2gyWm0wLTVIMTFWOGgyWm00LDE1SDE1VjIzaDJabTAtNUgxNVYxOGgyWm0wLTVIMTVWMTNoMlptMC01SDE1VjhoMloiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNVYxNUgyOFYxMy4yMkE3LjUsNy41LDAsMCwxLDIyLjc4LDhIMjJWMzNIMzNWMTIuODdBNy40Nyw3LjQ3LDAsMCwxLDMwLDEzLjVaTTI2LDI1'@;
put 'SDI0VjIzaDJabTAtNUgyNFYxOGgyWm0wLTVIMjRWMTNoMlptNCwxMEgyOFYyM2gyWm0wLTVIMjhWMThoMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEsOEgyM3YyaDhWMzFIMjN2MkgzM1YxMEEyLDIsMCwwLDAsMzEsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODgsM0g2LjEyQTIuMTIsMi4xMiwwLDAsMCw0LDUuMTJWMzNIMjJWNS4xMkEyLjEyLDIuMTIsMCwwLDAsMTkuODgsM1pNMjAsMzFIMTdWMjhIOXYzSDZWNS4xMkEuMTIuMTIsMCwwLDEsNi4xMiw1SDE5Ljg4YS4xMi4xMiww'@;
put 'LDAsMSwuMTIuMTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjEyIiB5PSI4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC01Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEyIiB5PSIxMyIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgICAgICAgICAg'@;
put 'IDxyZWN0IHg9IjgiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIiIHk9IjE4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMTAiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE2IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSIyMyIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEyIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMyIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMTYiIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIzIiB5PSIxMyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTE1Ii8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjE4IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTciLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE4Ii8+XG4gICAg'@;
put 'ICAgICAgICA8cmVjdCB4PSIyMyIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUNQVT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEuNUgyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxMS4zM2gtMS41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDE4LjE1YS44LjgsMCwxLDAsMC0xLjZIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFY4LjFBMi4xLDIuMSwwLDAsMCwyNy45LDZIMjYuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40'@;
put 'VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZoLTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIu'@;
put 'MSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40'@;
put 'Wk0yOCwyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOEgyNy45YS4xLjEsMCwwLDEsLjEuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTIuMDYs'@;
put 'MjQuNTdIMjMuODNhLjc1Ljc1LDAsMCwwLC43NS0uNzVWMTEuMzNoLTEuNVYyMy4wN2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44'@;
put 'LjgsMCwxLDAsMC0xLjZIMzBWMTMuNWE3LjQ5LDcuNDksMCwwLDEtMi0uMjhWMjcuOWEuMS4xLDAsMCwxLS4xLjFIOC4xYS4xLjEsMCwwLDEtLjEtLjFWOC4xQS4xLjEsMCwwLDEsOC4xLDhIMjIuNzhhNy40OSw3LjQ5LDAsMCwxLS4yOC0ySDE5LjM1VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZo'@;
put 'LTUuNFYzLjhhLjguOCwwLDEsMC0xLjYsMFY2SDguMUEyLjEsMi4xLDAsMCwwLDYsOC4xVjkuNTVIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINnY1LjRIMy44YS44LjgsMCwxLDAsMCwxLjZINlYyNy45QTIuMSwyLjEsMCwwLDAsOC4xLDMwaDIuNjV2'@;
put 'Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMEgyNy45QTIuMSwyLjEsMCwwLDAsMzAsMjcuOVYyNS4xNWgyLjJhLjguOCwwLDEsMCwwLTEuNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zMi4yLDIzLjU1SDMwdi01LjRoMi4yYS44LjgsMCwxLDAsMC0xLjZIMzBWMTUuNEgyOFYyNy45YS4xLjEsMCwwLDEtLjEuMUg4LjFhLjEuMSwwLDAsMS0uMS0uMVY4LjFBLjEuMSwwLDAsMSw4LjEsOGgxMmwxLjE1LTJIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMu'@;
put 'OGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjgu'@;
put 'OCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi4wNiwyNC41N0gyMy44M2EuNzUuNzUsMCwwLDAsLjc1LS43NVYxNS40aC0xLjV2Ny42N2gtMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxl'@;
put 'cnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMiwyMy41NUgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjE1LjRIMjV2OC40MUExLjE4LDEuMTgsMCwwLDEsMjQsMjVIMTNWMjNI'@;
put 'MjNWMTUuNGgtLjc3QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIxLjI5LDZIMTkuMzVWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAsMSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjgu'@;
put 'OCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIu'@;
put 'MSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIy'@;
put 'LjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMyLjIsMjMuNTVIMzB2LTUuNGgyLjJhLjguOCwwLDEsMCwwLTEuNkgzMFYxMy41YTcuNDYsNy40NiwwLDAsMS01LTEuOTJWMjMuODFBMS4xOCwxLjE4LDAsMCwxLDI0LDI1SDEzVjIzSDIzVjExaDEuNDJBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkgxOS4zNVYzLjhhLjguOCwwLDEs'@;
put 'MC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNkg4LjFBMi4xLDIuMSwwLDAsMCw2LDguMVY5LjU1SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZ2NS40SDMuOGEuOC44LDAsMSwwLDAsMS42SDZWMjcuOUEyLjEsMi4xLDAsMCwwLDgu'@;
put 'MSwzMGgyLjY1djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwaDUuNHYyLjJhLjguOCwwLDEsMCwxLjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBIMjcuOUEyLjEsMi4xLDAsMCwwLDMwLDI3LjlWMjUuMTVoMi4yYS44LjgsMCwxLDAsMC0xLjZaIiBjbGFzcz0iY2xyLWktc29saWQt'@;
put 'LWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTMyLjIsMTguMTVhLjguOCwwLDEsMCwwLTEuNkgzMHYtNS40aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwVjguMUEyLjEsMi4xLDAsMCwwLDI3LjksNkgyNi4zNVYzLjhhLjguOCwwLDEsMC0xLjYsMFY2aC01LjRWMy44YS44LjgsMCwxLDAtMS42LDBWNmgtNS40VjMuOGEuOC44LDAs'@;
put 'MSwwLTEuNiwwVjZIOC4xQTIuMSwyLjEsMCwwLDAsNiw4LjFWOS41NUgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2djUuNEgzLjhhLjguOCwwLDEsMCwwLDEuNkg2VjI3LjlBMi4xLDIuMSwwLDAsMCw4LjEsMzBoMi42NXYyLjJhLjguOCwwLDEsMCwx'@;
put 'LjYsMFYzMGg1LjR2Mi4yYS44LjgsMCwxLDAsMS42LDBWMzBoNS40djIuMmEuOC44LDAsMSwwLDEuNiwwVjMwSDI3LjlBMi4xLDIuMSwwLDAsMCwzMCwyNy45VjI1LjE1aDIuMmEuOC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gy'@;
put 'M1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlTWVtb3J5PSgwLG0uY2xySWNvblNWRykoJzxyZWN0IHg9IjgiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjQiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0'@;
put 'PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDI3SDRWMTdIMlYyN2EyLDIsMCwwLDAsMiwySDE2LjYxVjI1LjU1aDIuMjZWMjRIMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDdINEEyLDIsMCwwLDAsMiw5djRINFY5SDMydjRoMlY5QTIsMiwwLDAsMCwzMiw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwyN0gxOXYySDMy'@;
put 'YTIsMiwwLDAsMCwyLTJWMTdIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUsMjdINFYxN0gyVjI3YTIsMiwwLDAsMCwyLDJIMTYuNjFWMjUuNTVoMi4yNlYyNEgxNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAsMi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOSwxMy41NkEzLjY2LDMuNjYsMCwwLDEs'@;
put 'MTguNTcsMTJIMTZ2OGg0VjE0LjY0QTMuNjcsMy42NywwLDAsMSwxOSwxMy41NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNCIgeT0iMTUuNCIgd2lkdGg9IjQiIGhlaWdodD0i'@;
put 'NC42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgxOS41NmwxLjE1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC02LS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iOCIgeT0iMTIiIHdpZHRoPSI0IiBoZWlnaHQ9IjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYiIHk9IjEyIiB3aWR0aD0iNCIgaGVpZ2h0PSI4IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0x'@;
put 'NSwyN0g0VjE3SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NWgyLjI2VjI0SDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIsMTdWMjdIMTl2MkgzMmEyLDIsMCwwLDAs'@;
put 'Mi0yVjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTMuMjJBNy40Niw3LjQ2LDAsMCwxLDI1LjUxLDEySDI0djhoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsOUgyMy4xM2E3LjQ1LDcuNDUsMCwwLDEtLjU1LTJINEEyLDIsMCwwLDAsMiw5djRINFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwxM1Y5YTIsMiwwLDAsMC0yLTJI'@;
put 'NEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3SDMyVjEzWk0xMiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0Wm04LDBIMjRWMTJoNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxN1YxNS4wN0gyOFYyMEgyNFYxNS4wN0gyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMjAsMTQuMzFWMjBIMTZWMTJoMi42MUEzLjY4LDMuNjgsMCwwLDEsMTksOS41NUwyMC41Miw3SDRBMiwyLDAsMCwwLDIsOXY0SDR2NEgyVjI3YTIsMiwwLDAs'@;
put 'MCwyLDJIMTYuNjFWMjUuNTVIMTlWMjlIMzJhMiwyLDAsMCwwLDItMlYxN1pNMTIsMjBIOFYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LjhsLTUuNzIsOS45MWExLjI4'@;
put 'LDEuMjgsMCwwLDAsMS4xLDEuOTFIMzMuNjhhMS4yOCwxLjI4LDAsMCwwLDEuMS0xLjkxTDI5LjA2LjhBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LjhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMzIsMTdWMTMuMjJhNy4zMyw3LjMzLDAsMCwxLTQsMFYyMEgyNFYxMmgxLjUxYTcuNDgsNy40OCwwLDAsMS0yLjk0LTVINEEyLDIsMCwwLDAsMiw5djRINHY0SDJWMjdhMiwyLDAsMCwwLDIsMkgxNi42MVYyNS41NUgxOVYyOUgzMmEyLDIsMCwwLDAsMi0yVjE3Wk0x'@;
put 'MiwyMEg4VjEyaDRabTgsMEgxNlYxMmg0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhDMjIuNzcsNC4wOCwxOSw1LjQsMTksNy45MVY5LjVhMTguNzUsMTguNzUsMCwwLDEsMiwuMlY3LjkxYzAtLjY1'@;
put 'LDIuMDktMS44NCw1LjUtMS44NFMzMiw3LjI3LDMyLDcuOTFWMTguMjRjMCwuNTQtMS40NiwxLjQ0LTMuOSwxLjczdjJjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMy'@;
put 'LDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41'@;
put 'NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMTUuMjNDMjYuNjUsMTIuNzMsMjIuOTMsMTAuODUsMTgsMTAuODVabTYuNjUsNy42N2MtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2LjMzLDAsMCww'@;
put 'LDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42NSwyLjM4LTYu'@;
put 'NjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4czYuNjUsMS40Myw2LjY1LDIuMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMTguMjRWNy45MWMw'@;
put 'LS42NSwyLjA5LTEuODQsNS41LTEuODRTMTUsNy4yNywxNSw3LjkxVjkuN2ExOC43NSwxOC43NSwwLDAsMSwyLS4yVjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyVjIwQzUuNDYsMTkuNjgsNCwxOC43OCw0'@;
put 'LDE4LjI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNC42NSwxOC41MmMtLjg1LDEtMy40MiwyLTYuNjUsMkExNC40OSwxNC40OSwwLDAsMSwxNCwyMHYxLjQ2YTE2LjMzLDE2'@;
put 'LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYzLjEyYy0uODUsMS0zLjQyLDItNi42NSwyYTE0LjQ5LDE0LjQ5LDAsMCwxLTQtLjUzdjEuNDZhMTYuMzMsMTYuMzMsMCwwLDAsNCwuNDcsMTIuNzYsMTIuNzYsMCwwLDAsNi42NS0xLjU2djIuMjljMCwuOTUtMi42'@;
put 'NSwyLjM4LTYuNjUsMi4zOHMtNi42NS0xLjQzLTYuNjUtMi4zOFYxNS4yM2MwLS45NSwyLjY1LTIuMzgsNi42NS0yLjM4bC43NSwwYTMuNjksMy42OSwwLDAsMS0uMDgtMmwtLjY2LDBjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41LDMuNzIsNC4zOCw4LjY1LDQuMzhz'@;
put 'OC42NS0xLjg4LDguNjUtNC4zOFYxNS40aC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0LjhjLTEuNzUuNjMtMywxLjY4LTMsMy4xMlY5LjVsLjI1LDBaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2Mi44NGMwLC41NC0xLjQ2LDEuNDQtMy45LDEuNzN2MmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjE1LjM4WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4x'@;
put 'NEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwxOC4yNFY3LjkxYzAtLjY1LDIuMDktMS44NCw1LjUtMS44'@;
put 'NFMxNSw3LjI3LDE1LDcuOTFWOS43YTE4Ljc1LDE4Ljc1LDAsMCwxLDItLjJWNy45MWMwLTIuNTItMy43Ny0zLjg0LTcuNS0zLjg0UzIsNS40LDIsNy45MVYxOC4yNEMyLDIwLjQsNC43NywyMS42Nyw3LjksMjJWMjBDNS40NiwxOS42OCw0LDE4Ljc4LDQsMTguMjRaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxMC44NWMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjE1LjIz'@;
put 'QzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1Wm02LjY1LDcuNjdjLS44NSwxLTMuNDIsMi02LjY1LDJBMTQuNDksMTQuNDksMCwwLDEsMTQsMjB2MS40NmExNi4zMywxNi4zMywwLDAsMCw0LC40NywxMi43NiwxMi43NiwwLDAsMCw2LjY1LTEuNTZ2My4xMmMtLjg1LDEtMy40Miwy'@;
put 'LTYuNjUsMmExNC40OSwxNC40OSwwLDAsMS00LS41M3YxLjQ2YTE2LjMzLDE2LjMzLDAsMCwwLDQsLjQ3LDEyLjc2LDEyLjc2LDAsMCwwLDYuNjUtMS41NnYyLjI5YzAsLjk1LTIuNjUsMi4zOC02LjY1LDIuMzhzLTYuNjUtMS40My02LjY1LTIuMzhWMTUuMjNjMC0uOTUsMi42NS0yLjM4LDYu'@;
put 'NjUtMi4zOHM2LjY1LDEuNDMsNi42NSwyLjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEsNy45MWMwLS4zMy41NS0uOCwxLjU0LTEuMTgsMC0uMjQsMC0uNDgsMC0uNzNhNy41'@;
put 'Miw3LjUyLDAsMCwxLC4xNC0xLjQxQzIwLjU1LDUuMTksMTksNi4zLDE5LDcuOTFWOS41YTE4Ljc1LDE4Ljc1LDAsMCwxLDIsLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwx'@;
put 'My4yMnY1YzAsLjU0LTEuNDYsMS40NC0zLjksMS43M3YyYzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzV2LTUuOUE3LjQ1LDcuNDUsMCwwLDEsMzIsMTMuMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNSw0LjA4QzIyLjc3LDQuMDgsMTksNS40LDE5LDcuOTFWOS40'@;
put 'OGM1LjMuMjYsOSwyLjYsOSw1Ljc2djYuN2wuMDUuMDZjMy4xMy0uMzIsNS45LTEuNiw1LjktMy43NVY3LjkxQzM0LDUuNCwzMC4yMyw0LjA4LDI2LjUsNC4wOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4'@;
put 'VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcsMjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTE4LDEwLjg1Yy00LjkzLDAtOC42NSwxLjg4LTguNjUsNC4zOFYyNy41NGMwLDIuNSwzLjcyLDQuMzgsOC42NSw0LjM4czguNjUtMS44OCw4LjY1LTQuMzhWMjUuMzhBMTMuNTgsMTMuNTgsMCwwLDEsMTgsMjhhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjI1LjI3YTE0'@;
put 'LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4yMyw4LjYzLTMuMjNWMjAuNDdDMjQuOCwyMiwyMS43MiwyMywxOCwyM2ExNi43NywxNi43NywwLDAsMS02LTFWMjAuMjNhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjExLDguNjMtMy4xMVYxNS4yM0MyNi42'@;
put 'NSwxMi43MywyMi45MywxMC44NSwxOCwxMC44NVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNyw5LjQ4VjcuOTFjMC0yLjUyLTMuNzctMy44NC03LjUtMy44NFMyLDUuNCwyLDcuOTFWMTguMjRDMiwyMC40LDQuNzcs'@;
put 'MjEuNjcsNy45LDIyTDgsMjEuOTN2LTYuN0M4LDEyLjA4LDExLjcsOS43NCwxNyw5LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2YTMuNjgsMy42OCwwLDAsMS0uMzkt'@;
put 'Mi43bC0uNjYsMGMtNC45MywwLTguNjUsMS44OC04LjY1LDQuMzhWMjcuNTRjMCwyLjUsMy43Miw0LjM4LDguNjUsNC4zOHM4LjY1LTEuODgsOC42NS00LjM4VjI1LjM4QTEzLjU4LDEzLjU4LDAsMCwxLDE4LDI4YTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyNS4yN2ExNC41LDE0LjUsMCwwLDAs'@;
put 'NiwxLjE3YzQuMjEsMCw3LjY1LTEuMjMsOC42My0zLjIzVjIwLjQ3QzI0LjgsMjIsMjEuNzIsMjMsMTgsMjNhMTYuNzcsMTYuNzcsMCwwLDEtNi0xVjIwLjIzYTE0LjUsMTQuNSwwLDAsMCw2LDEuMTdjNC4yMSwwLDcuNjUtMS4xMSw4LjYzLTMuMTFWMTUuNEgyMi4yM0EzLjY5LDMuNjksMCww'@;
put 'LDEsMTksMTMuNTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNC44Yy0xLjc1LjYzLTMsMS42OC0zLDMuMTJWOS40OGwuMjcsMFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRl'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDI4djYuNTNsLjA1LjA2YzMuMTMtLjMyLDUuOS0xLjYsNS45LTMuNzVWMTUuMzhaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1h'@;
put 'bGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcsOS40OFY3LjkxYzAtMi41Mi0zLjc3LTMuODQtNy41LTMuODRTMiw1LjQsMiw3LjkxVjE4LjI0QzIsMjAuNCw0Ljc3LDIxLjY3LDcuOSwyMkw4LDIx'@;
put 'Ljkzdi02LjdDOCwxMi4wOCwxMS43LDkuNzQsMTcsOS40OFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTAuODVjLTQuOTMsMC04LjY1LDEuODgtOC42NSw0LjM4VjI3LjU0YzAsMi41'@;
put 'LDMuNzIsNC4zOCw4LjY1LDQuMzhzOC42NS0xLjg4LDguNjUtNC4zOFYyNS4zOEExMy41OCwxMy41OCwwLDAsMSwxOCwyOGExNi43NywxNi43NywwLDAsMS02LTFWMjUuMjdhMTQuNSwxNC41LDAsMCwwLDYsMS4xN2M0LjIxLDAsNy42NS0xLjIzLDguNjMtMy4yM1YyMC40N0MyNC44LDIyLDIx'@;
put 'LjcyLDIzLDE4LDIzYTE2Ljc3LDE2Ljc3LDAsMCwxLTYtMVYyMC4yM2ExNC41LDE0LjUsMCwwLDAsNiwxLjE3YzQuMjEsMCw3LjY1LTEuMTEsOC42My0zLjExVjE1LjIzQzI2LjY1LDEyLjczLDIyLjkzLDEwLjg1LDE4LDEwLjg1WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWkt'@;
put 'c29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy41Miw3LjUyLDAsMCwxLC4xNC0xLjRDMjAuNTUsNS4xOSwxOSw2LjMsMTksNy45MVY5LjQ4YTE1LjMzLDE1LjMzLDAsMCwxLDUsMUE3LjQ2LDcuNDYsMCwwLDEsMjIuNSw2WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy40OUE3LjQ3LDcuNDcsMCwwLDEsMjcuMzUsMTNhNCw0LDAsMCwxLC43LDIuMjN2Ni43bC4wNS4wNmMzLjEzLS4zMiw1LjktMS42LDUuOS0zLjc1VjEyLjMz'@;
put 'QTcuNDYsNy40NiwwLDAsMSwzMCwxMy40OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjUuOTkiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4LDE1LjRIMzEuNzNhMTQsMTQsMCwwLDEsLjIyLDEuNkgxNy40OUw4LjMsMjguMDdBMTQsMTQsMCwwLDEsMjIu'@;
put 'MDksNC42MmwxLTEuNzZBMTYsMTYsMCwxLDAsMzQsMThhMTYsMTYsMCwwLDAtLjIzLTIuNjFaTTE4LDMyYTEzLjkxLDEzLjkxLDAsMCwxLTguMTYtMi42NUwxOC40MywxOUgzMS45NUExNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNNCwxOGExNCwxNCwwLDAsMSwyNy45NS0xSDE3LjQ5'@;
put 'TDguMywyOC4wN0ExNCwxNCwwLDAsMSw0LDE4Wk0xOCwzMmExMy45MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0i'@;
put 'TTMxLjIsMTMuNGExMy45MSwxMy45MSwwLDAsMSwuNzUsMy42SDE3LjQ5TDguMywyOC4wN0ExNCwxNCwwLDAsMSwyMi42MSw0LjhhNy40Myw3LjQzLDAsMCwxLC41OC0xLjkyLDE2LjA2LDE2LjA2LDAsMSwwLDkuOTMsOS45M0E3LjQzLDcuNDMsMCwwLDEsMzEuMiwxMy40Wk0xOCwzMmExMy45'@;
put 'MSwxMy45MSwwLDAsMS04LjE2LTIuNjVMMTguNDMsMTlIMzEuOTVBMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOC41NywzMC45QTE2LDE2LDAsMCwwLDMzLjk1LDE5SDE4LjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3QTE2LDE2LDAsMSwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlI'@;
put 'MTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjk1LDE3YTE1LjkxLDE1LjkxLDAsMCwwLS44NC00LjE4LDcuNDksNy40OSwwLDAsMS05LjkyLTkuOTRBMTYsMTYsMCwwLDAsNywy'@;
put 'OS42TDE3LjQ5LDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRn'@;
put 'ZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik04LjU3LDMwLjlBMTYsMTYsMCwwLDAsMzMuOTUsMTlIMTguNDNaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMu'@;
put 'OTUsMTdhMTYsMTYsMCwwLDAtLjE4LTEuNjFIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsNC4wNi03QTE2LDE2LDAsMCwwLDcsMjkuNkwxNy40OSwxN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xp'@;
put 'ZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41'@;
put 'NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1'@;
put 'LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSwwLDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djgu'@;
put 'MzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwx'@;
put 'LDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVNoaWVsZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFM'@;
put 'MTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNj'@;
put 'MCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTUuNHYuNTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAs'@;
put 'MCwwLDUuODItM2MxLC42NCwyLjIsMS4yNywzLjQzLDEuODlsMS0xLjc0YTQxLjEsNDEuMSwwLDAsMS0zLjg5LTIuMThMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx'@;
put 'My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTUuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywx'@;
put 'MUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1h'@;
put 'bGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjV2Mi40M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ2LjE5LDQ2LjE5LDAsMCww'@;
put 'LDQuNTEsMi40MmMwLS4xLDAtLjE5LDAtLjI5YTcuNDksNy40OSwwLDAsMSwuMjMtMS44Myw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIuMzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzks'@;
put 'MTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjIt'@;
put 'Mi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUs'@;
put 'MTMuNjYtMTguNDVWNy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yMywxNS40QTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIyLjQzLDRhNDEuMSw0MS4xLDAsMCwxLTMuODktMi4xOEwxOCwxLjVsLS41NC4z'@;
put 'NWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVYxNS40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1h'@;
put 'bGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwy'@;
put 'Ni44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Nyw3LjQ3LDAsMCwxLTcuMjctOS4zMyw0MS42MSw0MS42MSwwLDAsMS00LjE5LTIu'@;
put 'MzNMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWMTMuMjJBNy40OSw3'@;
put 'LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTIt'@;
put 'LWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlU2hpZWxkWD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCww'@;
put 'LDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0y'@;
put 'LS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1LjgyLDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00LjgxLDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40'@;
put 'MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4'@;
put 'LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQu'@;
put 'NTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlSW1wb3J0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3TDgsMTAuODZWMTVoMlYxMy42MWg3LjYxVjZIMjhWMzBIOGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwy'@;
put 'LTJWNkEyLDIsMCwwLDAsMjgsNFpNMTYsMTJIMTB2LS4zMkwxNS43LDZIMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjk0LDI2LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTksMjJsLTUuNjgtNS42OGEx'@;
put 'LDEsMCwwLDAtMS40MSwxLjQxTDE1LjIsMjFIM2ExLDEsMCwxLDAsMCwySDE1LjIzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUu'@;
put 'NjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjgsMTUuNFYzMEg4YTIsMiwwLDAsMCwy'@;
put 'LDJIMjhhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMCwxMy42MWg3LjYxVjZoMy42OGwxLjE1LTJIMTQuODdMOCwxMC44NlYxNWgyWm0wLTEu'@;
put 'OTJMMTUuNyw2SDE2djZIMTBaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMS45NCwyNi4y'@;
put 'OGExLDEsMCwxLDAsMS40MSwxLjQxTDE5LDIybC01LjY4LTUuNjhhMSwxLDAsMCwwLTEuNDEsMS40MUwxNS4yLDIxSDNhMSwxLDAsMSwwLDAsMkgxNS4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI4LDEzLjIyVjMwSDhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjEzLjVBNy40OSw3LjQ5LDAsMCwxLDI4LDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTAsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMTVoMlptMC0xLjkyTDE1LjcsNkgxNnY2SDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4gICAgICAgICAg'@;
put 'ICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1p'@;
put 'LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTQuODdMOCwxMC44NlYyMUgxNS4ybC0zLjI1LTMuMjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxOSwyMmwtNS42OCw1LjY4YTEsMSwwLDAsMS0xLjQxLTEuNDFMMTUuMjMsMjNIOHY3YTIsMiww'@;
put 'LDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0Wk0xNiwxMkgxMHYtLjMyTDE1LjY5LDZIMTZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMywyMWExLDEsMCwxLDAsMCwySDhWMjFaIiBjbGFz'@;
put 'cz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwx'@;
put 'LjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTUuNFpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBh'@;
put 'dGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs'@;
put 'ci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMsMjFhMSwxLDAsMSwwLDAsMkg4VjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQi'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi41LDZhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDE0Ljg3TDgsMTAuODZWMjFIMTUuMmwtMy4yNS0zLjI1YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTksMjJsLTUuNjgsNS42OGExLDEsMCwwLDEtMS40MS0xLjQxTDE1LjIzLDIzSDh2N2EyLDIsMCww'@;
put 'LDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTMuNUE3LjUsNy41LDAsMCwxLDIyLjUsNlpNMTYsMTJIMTB2LS4zMkwxNS42OSw2SDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBj'@;
put 'eT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUV4cG9ydD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNiwxMy42MWg3LjYxVjZIMjR2OC4zOGgyVjZh'@;
put 'MiwyLDAsMCwwLTItMkgxMC44N0w0LDEwLjg3VjMwYTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkg2Wm0wLTEuOTJMMTEuNjksNkgxMnY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2'@;
put 'LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4'@;
put 'LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwzLjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2aDcuNjhsMS4xNS0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0ySDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxp'@;
put 'bmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTYsMjFIMThhMSwxLDAsMCwwLDAsMkgzMC4xOWwtMy4yOCwz'@;
put 'LjI4YTEsMSwwLDEsMCwxLjQxLDEuNDFMMzQsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwxMi4zNGE3LjUzLDcuNTMsMCwwLDEtMi0xLjg1djMuODloMloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTYsMTMuNjFoNy42MVY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDEwLjg3TDQsMTAuODdWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0y'@;
put 'SDZabTAtMS45MkwxMS42OSw2SDEydjZINloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWNmEyLDIsMCwwLDAtMi0ySDEwLjg3TDQsMTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwx'@;
put 'NywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwx'@;
put 'LDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjMyLDE2LjM1YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzEuMTYsMjFIMjZ2Mmg1LjE5bC0zLjI4LDMuMjhhMSwxLDAsMSwwLDEuNDEsMS40'@;
put 'MUwzNSwyMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMi40NSw0SDEwLjg3TDQs'@;
put 'MTAuODZWMzBhMiwyLDAsMCwwLDIsMkgyNGEyLDIsMCwwLDAsMi0yVjIzSDE4QTEsMSwwLDAsMSwxNywyMlpNMTIsMTJINnYtLjMyTDExLjY5LDZIMTJaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0'@;
put 'aC0zLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuMzIsMTYuMzVhMSwxLDAsMCwwLTEuNDEsMS40MUwzMS4xNiwyMUgyNnYyaDUuMTlsLTMuMjgsMy4yOGExLDEsMCwxLDAsMS40MSwxLjQxTDM1LDIyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRn'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNywyMmExLDEsMCwwLDEsMS0xaDhWMTIuMzRBNy40Niw3LjQ2LDAsMCwxLDIyLjc4LDRIMTAuODdMNCwxMC44NlYzMGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMjNIMThBMSwx'@;
put 'LDAsMCwxLDE3LDIyWk0xMiwxMkg2di0uMzJMMTEuNjksNkgxMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2Vk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40Nywx'@;
put 'MC40NywwLDAsMC05LjYsNi4xQTkuNzQsOS43NCwwLDAsMCwxLjYsMTguNCw5LjYyLDkuNjIsMCwwLDAsMTEuMjUsMjhIMTVWMjZIMTEuMjVBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguMjYsOC4yNiwwLDAsMSw4LjQ1LDgs'@;
put 'Ny43NSw3Ljc1LDAsMCwxLDAsLjhsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDMuOTMtMTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDIxLjg1QTEs'@;
put 'MSwwLDAsMCwyMywyMC4xNGwtNS01LTUsNWExLDEsMCwwLDAsMS40MSwxLjQxTDE3LDE5VjMxLjI1YTEsMSwwLDEsMCwyLDBWMTlsMi41NywyLjU3QTEsMSwwLDAsMCwyMi4yOCwyMS44NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMjIuMjgsMjEuODVBMSwxLDAsMCwwLDIzLDIwLjE0bC01LTUtNSw1YTEsMSwwLDAsMCwxLjQxLDEuNDFMMTcsMTlWMzEuMjVhMSwxLDAsMSwwLDIsMFYxOWwyLjU3LDIuNTdBMSwxLDAsMCwwLDIyLjI4LDIxLjg1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguODEsOC44MSwwLDAsMSwyLC4yNWwxLTEuOGExMC44LDEwLjgs'@;
put 'MCwwLDAtMy4wNy0uNDUsMTAuNDcsMTAuNDcsMCwwLDAtOS42LDYuMUE5Ljc0LDkuNzQsMCwwLDAsMS42LDE4LjQsOS42Miw5LjYyLDAsMCwwLDExLjI1LDI4SDE1VjI2SDExLjI1QTcuNjYsNy42NiwwLDAsMSwzLjYsMTguMzhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjF2Mmg1LjM4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyMS44NUExLDEsMCwwLDAsMjMsMjAuMTRsLTUtNS01LDVhMSwxLDAsMCwwLDEuNDEsMS40MUwxNywxOVYzMS4yNWExLDEs'@;
put 'MCwxLDAsMiwwVjE5bDIuNTcsMi41N0ExLDEsMCwwLDAsMjIuMjgsMjEuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCwwLDEtMi42My0u'@;
put 'MTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyMXYyaDUuMzhhOCw4LDAsMCwwLDQuNTQtMTQuNTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zLjYsMTguMzhBNy43MSw3LjcxLDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNhOC40Myw4LjQzLDAsMCwxLDgtNS40LDguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAs'@;
put 'MCwwLTkuNiw2LjFBOS43NCw5Ljc0LDAsMCwwLDEuNiwxOC40LDkuNjIsOS42MiwwLDAsMCwxMS4yNSwyOEgxNVYyNkgxMS4yNUE3LjY2LDcuNjYsMCwwLDEsMy42LDE4LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIi8+XG4g'@;
put 'ICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSwwLDAsMCwxMC44OSwyOGEzLDMsMCwwLDEsMC0yQTcuNjUsNy42NSwwLDAsMSwxMSwxMC43NGwuNjcsMCwuMjMt'@;
put 'LjYzYTguNDMsOC40MywwLDAsMSw4LTUuNCw4LjI2LDguMjYsMCwwLDEsOC40NSw4LDcuNzUsNy43NSwwLDAsMSwwLC44bC0uMDguNzIuNjUuM0E2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4YTgsOCwwLDAsMCwzLjkzLTE1WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcx'@;
put 'LTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjI4LDI2LjA3YTEsMSwwLDAsMC0uNzEuMjlMMTksMjguOTRWMTYuNjhhMSwxLDAsMSwwLTIsMFYyOC45NGwtMi41Ny0yLjU3QTEsMSwwLDAsMCwxMywy'@;
put 'Ny43OGw1LDUsNS01YTEsMSwwLDAsMC0uNzEtMS43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuODcsNC42OWE4LjgxLDguODEsMCwwLDEsMiwuMjVsMS0xLjhhMTAuOCwx'@;
put 'MC44LDAsMCwwLTMuMDctLjQ1LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAsMCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjksMTUuNEgzMC4yMUE2LDYsMCwwLDEsMjYuMzgsMjZIMjUuMDlhMywzLDAsMCwxLDAsMmgxLjI4QTgsOCwwLDAsMCwzMi45LDE1LjRaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEu'@;
put 'MjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMi4yOCwyNi4wN2ExLDEsMCwwLDAtLjcxLjI5TDE5LDI4Ljk0VjE2'@;
put 'LjY4YTEsMSwwLDEsMC0yLDBWMjguOTRsLTIuNTctMi41N0ExLDEsMCwwLDAsMTMsMjcuNzhsNSw1LDUtNWExLDEsMCwwLDAtLjcxLTEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xOS44Nyw0LjY5YTguNzksOC43OSwwLDAsMSwyLjY4LjQyLDcuNDUsNy40NSwwLDAsMSwuNS0xLjk0LDEwLjc5LDEwLjc5LDAsMCwwLTMuMTgtLjQ4LDEwLjQ3LDEwLjQ3LDAsMCwwLTkuNiw2LjFBOS42NSw5LjY1LDAsMCwwLDEwLjg5LDI4YTMsMywwLDAsMSwwLTJBNy42NSw3LjY1LDAs'@;
put 'MCwxLDExLDEwLjc0bC42NywwLC4yMy0uNjNBOC40Myw4LjQzLDAsMCwxLDE5Ljg3LDQuNjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC45MiwxMy40NGE3LjEzLDcuMTMsMCww'@;
put 'LDEtMi42My0uMTRjMCwuMDgsMCwuMTUsMCwuMjNsLS4wOC43Mi42NS4zQTYsNiwwLDAsMSwyNi4zOCwyNkgyNS4wOWEzLDMsMCwwLDEsMCwyaDEuMjhhOCw4LDAsMCwwLDQuNTQtMTQuNjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRn'@;
put 'ZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVQbHVnaW49KDAsbS5jbHJJY29uU1ZH'@;
put 'KSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEs'@;
put 'NSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZabTIuNDEsN0EzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsNC44'@;
put 'MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2g4VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjkuODEsMTZIMjl2LS42SDI3VjE4aDIuODFBMy4xMywzLjEzLDAsMCwxLDMzLDIwLjY5LDMsMywwLDAsMSwzMi4yMiwyMywzLDMsMCwwLDEsMzAsMjRIMjd2Ny44M0g0VjI1SDVhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUu'@;
put 'MTUsMCwwLDAsNC44MSwxNUg0VjguODNoOVY3YTMsMywwLDAsMSwxLTIuMjJBMywzLDAsMCwxLDE2LjMxLDQsMy4xMywzLjEzLDAsMCwxLDE5LDcuMTlWOC44M2guNjZMMjEsNi41OUE1LjEyLDUuMTIsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdI'@;
put 'NC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwzLDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4y'@;
put 'OCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjQ1LDcuNDUsMCwwLDEtMi0uNTVWMThoMi44'@;
put 'MUEzLjEzLDMuMTMsMCwwLDEsMzMsMjAuNjksMywzLDAsMCwxLDMyLjIyLDIzLDMsMywwLDAsMSwzMCwyNEgyN3Y3LjgzSDRWMjVINWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCw0LjgxLDE1SDRWOC44M2g5VjdhMywzLDAsMCwxLDEtMi4yMkEzLDMsMCwwLDEsMTYuMzEsNCwz'@;
put 'LjEzLDMuMTMsMCwwLDEsMTksNy4xOVY4LjgzaDQuMDZhNy40NCw3LjQ0LDAsMCwxLS41MS0ySDIxQTUuMTQsNS4xNCwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIy'@;
put 'LDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVY4LjgzYTIsMiwwLDAsMC0y'@;
put 'LTJIMjFBNS4xNCw1LjE0LDAsMCwwLDE2LjUxLDIsNSw1LDAsMCwwLDExLDYuODNINGEyLDIsMCwwLDAtMiwyVjE3SDQuODFBMy4xMywzLjEzLDAsMCwxLDgsMTkuNjksMywzLDAsMCwxLDcuMjIsMjIsMywzLDAsMCwxLDUsMjNIMnY4LjgzYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDIt'@;
put 'MlYyNmgxYTUsNSwwLDAsMCw1LTUuNTFBNS4xNSw1LjE1LDAsMCwwLDI5LjgxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjgxLDE2SDI5di0uNkgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTksOS44OUwyMSw2'@;
put 'LjU5QTUuMTIsNS4xMiwwLDAsMCwxNi41MSwyLDUsNSwwLDAsMCwxMSw2LjgzSDRhMiwyLDAsMCwwLTIsMlYxN0g0LjgxQTMuMTMsMy4xMywwLDAsMSw4LDE5LjY5LDMsMywwLDAsMSw3LjIyLDIyLDMsMywwLDAsMSw1LDIzSDJ2OC44M2EyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJW'@;
put 'MjZoMWE1LDUsMCwwLDAsNS01LjUxQTUuMTUsNS4xNSwwLDAsMCwyOS44MSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAs'@;
put 'MCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0yOS44MSwxNkgyOVYxMy40M2E3LjUsNy41LDAsMCwxLTYuNDUtNi41OUgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0yLDJWMTdINC44MUEzLjEzLDMuMTMsMCwwLDEsOCwxOS42OSwzLDMsMCwwLDEsNy4yMiwyMiwz'@;
put 'LDMsMCwwLDEsNSwyM0gydjguODNhMiwyLDAsMCwwLDIsMkgyN2EyLDIsMCwwLDAsMi0yVjI2aDFhNSw1LDAsMCwwLDUtNS41MUE1LjE1LDUuMTUsMCwwLDAsMjkuODEsMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAg'@;
put 'ICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxSLkNsclNoYXBlRmxvcHB5PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4z'@;
put 'Niw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OEg2VjZoNHY2YTIsMiwwLDAsMCwyLDJIMjRhMiwyLDAsMCwwLDItMkgxMlY2SDI2'@;
put 'LjUxTDMwLDkuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41aDBWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwySDI0YTIsMiww'@;
put 'LDAsMCwyLTEuNjhsLS40My0uM0gxMlY2SDIyLjVhNy40OSw3LjQ5LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI1LDMwSDExVjIySDI1WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMwLDE1LjRWMzBIMjdWMjJhMiwyLDAsMCwwLTItMkgxMWEyLDIsMCwwLDAtMiwydjhINlY2aDR2NmEyLDIsMCwwLDAsMiwyaDcuMzVhMy41NCwzLjU0LDAsMCwxLS43Ny0ySDEyVjZoOS4yOWwxLjE1LTJINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwy'@;
put 'LDJIMzBhMiwyLDAsMCwwLDItMlYxNS40Wk0yNSwzMEgxMVYyMkgyNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAs'@;
put 'MjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI3LjM2LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY4Ljc4Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaTTI0LDE0SDEyYTIsMiwwLDAsMS0yLTJWNmgy'@;
put 'djZIMjZBMiwyLDAsMCwxLDI0LDE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy40Niw3LjQ2LDAsMCwxLTQtMS4xOEEyLDIsMCwwLDEsMjQsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2NkgyNS41NGE3'@;
put 'LjQ1LDcuNDUsMCwwLDEtMi43Ni04SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTI2LDMwSDEwVjIxLjVBMS41LDEuNSwwLDAsMSwxMS41LDIwaDEzQTEuNSwxLjUsMCwwLDEsMjYsMjEuNVoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdl'@;
put 'Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY5LDMuNjksMCwwLDEsMTkuMzUsMTRIMTJhMiwyLDAsMCwxLTItMlY2aDJ2Nmg2LjU4QTMuNjcsMy42NywwLDAsMSwxOSw5Ljg5TDIyLjQ1LDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAs'@;
put 'MCwwLDItMlYxNS40Wk0yNiwzMEgxMFYyMS41QTEuNSwxLjUsMCwwLDEsMTEuNSwyMGgxM0ExLjUsMS41LDAsMCwxLDI2LDIxLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUs'@;
put 'MS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVk'@;
put 'IGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVDb21wdXRlcj0oMCxtLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAyNC40IDEwLjYgMjUuOTggOSA4IDkgOCAyMi44OCA5LjYgMjIuODgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNiw3SDMwVjIzaDJWNi41QTEuNSwxLjUsMCwwLDAsMzAuNSw1SDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYsMCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0'@;
put 'LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEsMjV2My40QTIuNiwyLjYsMCwwLDAsMy42LDMxSDMyLjM0YTIuNiwyLjYsMCwwLDAsMi42LTIuNlYyNVptMzIsMy40YS42LjYs'@;
put 'MCwwLDEtLjYuNkgzLjU2YS42LjYsMCwwLDEtLjYtLjZWMjYuNTNoOS45NWExLjY0LDEuNjQsMCwwLDAsMS41LDFoNy4xM2ExLjY0LDEuNjQsMCwwLDAsMS41LTFIMzNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTkuNiwyMi44OFYxMC42aDkuMTRBMy42NCwzLjY0LDAsMCwxLDE5LDkuODlMMTkuNTYsOUg4VjIyLjg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik02LDdIMjAuNzFsMS4xNS0ySDUuNUExLjUsMS41LDAsMCwwLDQsNi41VjIzSDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMzAiIHk9IjE1LjQiIHdpZHRoPSIyIiBoZWlnaHQ9'@;
put 'IjcuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgs'@;
put 'MTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMSwyNXYzLjRBMi42LDIuNiwwLDAsMCwz'@;
put 'LjYsMzFIMzIuMzRhMi42LDIuNiwwLDAsMCwyLjYtMi42VjI1Wm0zMiwzLjRhLjYuNiwwLDAsMS0uNi42SDMuNTZhLjYuNiwwLDAsMS0uNi0uNlYyNi41M2g5Ljk1YTEuNjQsMS42NCwwLDAsMCwxLjUsMWg3LjEzYTEuNjQsMS42NCwwLDAsMCwxLjUtMUgzM1oiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLjUsNmE3LjUyLDcuNTIsMCwwLDEsLjA3LTFINS41QTEuNSwxLjUsMCwwLDAsNCw2LjVWMjNINlY3SDIyLjU3QTcuNTIsNy41MiwwLDAsMSwyMi41LDZaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41VjIzaDJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUt'@;
put 'cGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy4xMyw5SDhWMjIuODhIOS42VjEwLjZIMjQuMDhBNy40OSw3LjQ5LDAsMCwxLDIzLjEzLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45LS45NCwxLjUtMS42MSwxLjVI'@;
put 'MTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNywxMEgy'@;
put 'OVYyNGgzVjcuNTdBMS41NCwxLjU0LDAsMCwwLDMwLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLjgxLDI2Yy0uMzUuOS0uOTQsMS41LTEuNjEsMS41'@;
put 'SDEzLjc0Yy0uNjgsMC0xLjI2LS42LTEuNjEtMS41SDF2MS43NUEyLjQ1LDIuNDUsMCwwLDAsMy42LDMwSDMyLjRBMi40NSwyLjQ1LDAsMCwwLDM1LDI3Ljc1VjI2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iMjkiIHk9IjE1LjQiIHdpZHRoPSIzIiBoZWlnaHQ9IjguNiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMTlMMTksOS44OSwyMS4yOSw2SDUuNUExLjU0LDEu'@;
put 'NTQsMCwwLDAsNCw3LjU3VjI0SDdaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4'@;
put 'LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuODEsMjZjLS4zNS45'@;
put 'LS45NCwxLjUtMS42MSwxLjVIMTMuNzRjLS42OCwwLTEuMjYtLjYtMS42MS0xLjVIMXYxLjc1QTIuNDUsMi40NSwwLDAsMCwzLjYsMzBIMzIuNEEyLjQ1LDIuNDUsMCwwLDAsMzUsMjcuNzVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdl'@;
put 'ZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTcsMTBIMjMuNjZBNy40Niw3LjQ2LDAsMCwxLDIyLjUsNkg1LjVBMS41NCwxLjU0LDAsMCwwLDQsNy41N1YyNEg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAg'@;
put 'IDxwYXRoIGQ9Ik0zMiwxMy4yMmE3LjE0LDcuMTQsMCwwLDEtMywuMlYyNGgzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlk'@;
put 'LS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZURpc3BsYXk9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gy'@;
put 'OUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwxLjUsMCwwLDAsMzIuNSwzWk0zMiwyNUg0VjVIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI3LjcgOC43NiAyOC4xMyA4Ljc2IDI5Ljk0'@;
put 'IDcuMTYgNi4xIDcuMTYgNi4xIDIzIDcuNyAyMyA3LjcgOC43NiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIs'@;
put 'NC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMySDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNI'@;
put 'MTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI1SDRWNUgyMS44N0wyMywzSDMuNUExLjUsMS41LDAsMCwwLDIsNC41djIxQTEuNSwxLjUsMCwwLDAsMy41LDI3aDI5QTEuNSwxLjUsMCwwLDAsMzQsMjUuNVYxNS4zOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIi8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcuNyAyMyA3LjcgOC43NiAxOS43IDguNzYgMjAuNjIgNy4xNiA2LjEgNy4xNiA2LjEgMjMgNy43IDIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtMy0tYWxlcnRlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMjEuMjRWMjkuNUE0LjIsNC4yLDAsMCwwLDIyLjE3LDMy'@;
put 'SDEzLjgzYTQuMiw0LjIsMCwwLDAsLjkzLTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAsMCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNi4xLDIzSDcuN1Y4Ljc2SDIzYTcuNDQsNy40NCwwLDAsMS0uNDMtMS42SDYuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMyLDEzLjIyVjI1SDRWNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4y'@;
put 'MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQg'@;
put 'Y2xyLWktYmFkZ2UiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiwzMkgyNC4yNmEzLjYxLDMuNjEsMCwwLDEtMS41LTIuNTJWMjguMTNIMTMuMjRWMjkuNUEzLjYxLDMuNjEsMCwwLDEsMTEuNzQsMzJIOS45NGExLDEsMCwxLDAsMCwySDI2LjA2YS45Mi45MiwwLDAsMCwxLTFBMSwxLDAs'@;
put 'MCwwLDI2LDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjUsM0gzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWNC41QTEuNSwx'@;
put 'LjUsMCwwLDAsMzIuNSwzWk0zMSwyMS44M0g1VjdIMzFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMzJIMjQuMjZhMy42MSwzLjYxLDAsMCwxLTEuNS0yLjUyVjI4LjEzSDEzLjI0VjI5LjVBMy42MSwzLjYxLDAs'@;
put 'MCwxLDExLjc0LDMySDkuOTRhMSwxLDAsMSwwLDAsMkgyNi4wNmEuOTIuOTIsMCwwLDAsMS0xQTEsMSwwLDAsMCwyNiwzMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40'@;
put 'SDMxdjYuNDNINVY3SDIwLjcxTDIzLDNIMy41QTEuNSwxLjUsMCwwLDAsMiw0LjV2MjFBMS41LDEuNSwwLDAsMCwzLjUsMjdoMjlBMS41LDEuNSwwLDAsMCwzNCwyNS41VjE1LjM4WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVk'@;
put 'IGNsci1pLXNvbGlkLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2LDMySDI0LjI2YTMuNjEsMy42MSwwLDAsMS0xLjUtMi41MlYyOC4xM0gxMy4yNFYyOS41QTMuNjEsMy42MSwwLDAsMSwxMS43NCwzMkg5Ljk0YTEsMSwwLDEsMCwwLDJI'@;
put 'MjYuMDZhLjkyLjkyLDAsMCwwLDEtMUExLDEsMCwwLDAsMjYsMzJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLDEzLjQzdjguNDFINVY3SDIyLjU3YTcuMjksNy4yOSwwLDAsMSwuNTUt'@;
put 'NEgzLjVBMS41LDEuNSwwLDAsMCwyLDQuNXYyMUExLjUsMS41LDAsMCwwLDMuNSwyN2gyOUExLjUsMS41LDAsMCwwLDM0LDI1LjVWMTIuMzRBNy40NCw3LjQ0LDAsMCwxLDMxLDEzLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5c'@;
put 'biAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVRlcm1pbmFsPSgwLG0uY2xySWNvblNWRykoJzxwYXRo'@;
put 'IGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhIMzJWMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg'@;
put 'ICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMTUuNjggMTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEgMTYuNiAxOS43'@;
put 'IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyMyIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjcgMjQuMTEgMTYuNiAxOS43IDE2LjYgMTcuODkgNyAxMy40OCA3IDE1LjY4IDEzLjc5IDE4LjggNyAyMS45MSA3IDI0LjExIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy42OCwxNS40SDMyVjI5SDRWMTAuOEgxOC42OEEzLjY2LDMuNjYsMCwwLDEsMTksOS44OWwuNC0uNjlINFY3SDIwLjcxbDEuMTUtMkg0QTIsMiwwLDAsMCwyLDdWMjlhMiwyLDAsMCwwLDIsMkgz'@;
put 'MmEyLDIsMCwwLDAsMi0yVjE1LjM4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNyIg'@;
put 'eT0iMjMiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iNyAyNC4xMSAxNi42IDE5LjcgMTYuNiAxNy44OSA3IDEzLjQ4IDcgMTUuNjgg'@;
put 'MTMuNzkgMTguOCA3IDIxLjkxIDcgMjQuMTEiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMlYyOUg0VjEwLjhIMjQuMjRhNy41MSw3LjUxLDAsMCwxLTEtMS42SDRWN0gy'@;
put 'Mi41N2E3LjUyLDcuNTIsMCwwLDEtLjA3LTEsNy41Miw3LjUyLDAsMCwxLC4wNy0xSDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMiw1Wk02LjgsMTUuODFWMTMuMTdsMTAsNC41OXYyLjA4bC0xMCw0LjU5VjIxLjc4bDYuNTEtM1pNMjMuNCwyNS40SDE3VjIzaDYuNFpNNCw5LjJWN0gzMlY5LjJa'@;
put 'IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlsLjQtLjY5SDRWN0gyMC43MWwxLjE1LTJINEEyLDIsMCwwLDAsMiw3VjI5YTIsMiwwLDAsMCwyLDJI'@;
put 'MzJhMiwyLDAsMCwwLDItMlYxNS4zOFpNMTYuOCwxOS44M2wtMTAsNC41OVYyMS43OGw2LjUxLTMtNi41MS0zVjEzLjE3bDEwLDQuNTlabTYuNiw1LjU3SDE3VjIzaDYuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAg'@;
put 'ICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS02Ljc4LTQuM0g0VjdIMjIuNTdhNy41Miw3LjUyLDAsMCwxLS4wNy0xLDcuNTIsNy41MiwwLDAsMSwuMDctMUg0QTIsMiwwLDAsMCwy'@;
put 'LDdWMjlhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNDYsNy40NiwwLDAsMSwzMCwxMy41Wk0xNi44LDE5LjgzbC0xMCw0LjU5VjIxLjc4bDYuNTEtMy02LjUxLTNWMTMuMTdsMTAsNC41OVptNi42LDUuNTdIMTdWMjNoNi40WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1i'@;
put 'YWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksUi5D'@;
put 'bHJTaGFwZUNvZGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEs'@;
put 'MTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtNi41My00LjQ1QTEsMSwwLDEsMCwyMi41NSwxNGw1LjMyLDMuNjMtNS4zMiwzLjYzYTEsMSwwLDAsMCwxLjEzLDEuNjVsNi41My00'@;
put 'LjQ1YTEsMSwwLDAsMCwwLTEuNjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCw5LjgzYS45LjksMCwwLDAtMS4wOS42NkwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45Ljks'@;
put 'MCwwLDAsLjg3LS42OGwzLjQ0LTEzLjgxQS45LjksMCwwLDAsMTkuOTQsOS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSww'@;
put 'LDAsMCwwLDEuNjVsNi41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxw'@;
put 'YXRoIGQ9Ik0xOC41NiwxMS42MiwxNS40MSwyNC4yOWEuOS45LDAsMCwwLC42NiwxLjA5bC4yMiwwYS45LjksMCwwLDAsLjg3LS42OEwxOS43MywxNC40YTMuNTksMy41OSwwLDAsMS0xLjE2LTIuNzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'Mi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4yMSwxNi43OGwtMi0xLjM4SDI0LjY0bDMuMjQsMi4yMS01LjMyLDMuNjNhMSwxLDAsMCwwLDEuMTMsMS42NWw2LjUzLTQuNDVhMSwxLDAsMCwwLDAtMS42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNs'@;
put 'ci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwx'@;
put 'LjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVs'@;
put 'Ni41Myw0LjQ1YTEsMSwwLDEsMCwxLjEzLTEuNjVMOC4xMywxNy42MSwxMy40NSwxNEExLDEsMCwwLDAsMTMuNzEsMTIuNTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuMjEs'@;
put 'MTYuNzhsLTYuNTMtNC40NUExLDEsMCwxLDAsMjIuNTUsMTRsNS4zMiwzLjYzLTUuMzIsMy42M2ExLDEsMCwwLDAsMS4xMywxLjY1bDYuNTMtNC40NWExLDEsMCwwLDAsMC0xLjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDkuODNhLjkuOSwwLDAsMC0xLjA5LjY2TDE1LjQxLDI0LjI5YS45LjksMCwwLDAsLjY2LDEuMDlsLjIyLDBhLjkuOSwwLDAsMCwuODctLjY4bDMuNDQtMTMuODFBLjkuOSwwLDAsMCwxOS45NCw5LjgzWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAg'@;
put 'ICAgICAnKSxSLkNsclNoYXBlQXBwbGljYXRpb249KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3'@;
put 'aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMydjQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh'@;
put 'dGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVCYXR0ZXJ5PSgwLG0uY2xySWNvblNWRykoJzxw'@;
put 'YXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAg'@;
put 'PHBhdGggZD0iTTI1LjEyLDRIMjNWMy41OEExLjU4LDEuNTgsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJBMS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwy'@;
put 'NywzMi4xMlY1Ljg4QTEuODgsMS44OCwwLDAsMCwyNS4xMiw0Wk0yNSwzMkgxMVY2aDRWNGg2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjU5LDExLjc3YTEsMSwwLDAsMC0xLjczLDFsMi41LDQu'@;
put 'MzQtNi4wNy0xLDUuMjksMTAuNTlhMSwxLDAsMCwwLDEuNzktLjg5bC0zLjUzLTcuMDgsNi4zOCwxLjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4x'@;
put 'MywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQgY2xy'@;
put 'LWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTUuNFYzMkgxMVY2aDRWNGg2VjZoLjI4bDEuNjQtMi44NUExLjU3LDEuNTcsMCwwLDAsMjEuNDIsMkgxNC41OEExLjU4LDEuNTgsMCwwLDAsMTMsMy41OFY0SDEwLjg4QTEuODgsMS44OCwwLDAsMCw5LDUuODhWMzIuMTJB'@;
put 'MS44OCwxLjg4LDAsMCwwLDEwLjg4LDM0SDI1LjEyQTEuODgsMS44OCwwLDAsMCwyNywzMi4xMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9'@;
put 'IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguNTksMTEuNzdhMSwxLDAsMCwwLTEuNzMsMWwyLjUsNC4zNC02LjA3LTEsNS4yOSwxMC41OWExLDEsMCww'@;
put 'LDAsMS43OS0uODlsLTMuNTMtNy4wOCw2LjM4LDEuMDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMTEuNThWMzJIMTFWNmg0VjRoNlY2SDIyLjVBNy40Nyw3LjQ3LDAsMCwx'@;
put 'LDIzLDMuMzgsMS41NywxLjU3LDAsMCwwLDIxLjQyLDJIMTQuNThBMS41OCwxLjU4LDAsMCwwLDEzLDMuNThWNEgxMC44OEExLjg4LDEuODgsMCwwLDAsOSw1Ljg4VjMyLjEyQTEuODgsMS44OCwwLDAsMCwxMC44OCwzNEgyNS4xMkExLjg4LDEuODgsMCwwLDAsMjcsMzIuMTJWMTIuODdBNy41'@;
put 'LDcuNSwwLDAsMSwyNSwxMS41OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiw0VjIuNjJBLjYuNiwwLDAsMCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBB'@;
put 'MS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0di0yOEExLjA5LDEuMDksMCwwLDAsMjYsNFpNMjAuMjYsMjUuNDRhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgt'@;
put 'MS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwx'@;
put 'MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuMjMsMTUuNEEzLjY2LDMuNjYsMCwwLDEs'@;
put 'MjAuNTUsMTVsMi43Niw0Ljc5TDE2LjksMTguN2wzLjM2LDYuNzNhMS4yLDEuMiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybC4wOS4xNUEzLjY2LDMuNjYsMCwwLDEsMTksOS44OUwyMi40NSw0SDIyVjIuNjJBLjYuNiwwLDAs'@;
put 'MCwyMS40MiwySDE0LjU4YS42LjYsMCwwLDAtLjU4LjYyVjRIMTBBMS4wOSwxLjA5LDAsMCwwLDksNS4wN3YyOEExLDEsMCwwLDAsMTAsMzRIMjZhMSwxLDAsMCwwLDEtLjk0VjE1LjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIiAv'@;
put 'PlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuNSw2YTcuNDksNy40OSwwLDAsMSwuMjgt'@;
put 'MkgyMlYyLjYyQS42LjYsMCwwLDAsMjEuNDIsMkgxNC41OGEuNi42LDAsMCwwLS41OC42MlY0SDEwQTEuMDksMS4wOSwwLDAsMCw5LDUuMDd2MjhBMSwxLDAsMCwwLDEwLDM0SDI2YTEsMSwwLDAsMCwxLS45NFYxMi44N0E3LjUsNy41LDAsMCwxLDIyLjUsNlpNMjAuMjYsMjUuNDRhMS4yLDEu'@;
put 'MiwwLDAsMS0yLjE1LDEuMDdMMTIuNjUsMTUuNTZsNiwxLTIuMjktNGExLjIsMS4yLDAsMSwxLDIuMDgtMS4ybDQuODMsOC4zN0wxNi45LDE4LjdaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFw'@;
put 'ZU1vYmlsZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2'@;
put 'VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxSLkNsclNoYXBlVGFibGV0PSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCww'@;
put 'LDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBh'@;
put 'MiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxSLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9'@;
put 'Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAs'@;
put 'MGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJabTAsMmExMiwxMiwwLDAsMSw4LjQ0LDMuNDhjMCwuMzMsMCwuNjYsMCwxQTE4LjUxLDE4LjUxLDAsMCwwLDE0LDguNTNhMi4zMywyLjMzLDAsMCwwLTEuMTQtLjYxbC0uMjUsMGMtLjEyLS40Mi0uMjMtLjg0LS4zMi0xLjI3cy0uMTQtLjgxLS4xOS0x'@;
put 'LjIyQTExLjkyLDExLjkyLDAsMCwxLDE3Ljc1LDRabS0zLDUuODdBMTcsMTcsMCwwLDEsMjUuOTIsMTBhMTYuOSwxNi45LDAsMCwxLTMuMTEsNywyLjI4LDIuMjgsMCwwLDAtMi41OC41N2MtLjM1LS4yLS43LS40LTEtLjYzYTE2LDE2LDAsMCwxLTQuOTMtNS4yMywyLjI1LDIuMjUsMCwwLDAs'@;
put 'LjQ3LTEuNzdabS00LTMuNmMwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEyLDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwt'@;
put 'LjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAsMCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIw'@;
put 'YTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAsMCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYy'@;
put 'LDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhabTYuNTEtOC45YTIuMzMsMi4zMywwLDAsMC0uMzMtMS4xOSwxOC40LDE4LjQsMCwwLDAsMy4zOS03LjM3cS43NS4zNSwxLjQ4Ljc4YTEyLDEyLDAsMCwxLC40Miw4LjJBMTYsMTYsMCwwLDEsMjQu'@;
put 'MjcsMTkuMTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNGgtMmMwLC4yLDAsLjQsMCwuNjFhMTIsMTIsMCwwLDEtLjUzLDMuNTIsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4Ljg3LDE4Ljg3LDAsMCwwLDEuNjIt'@;
put 'Mi41MkgyMy44M2ExNy4yOSwxNy4yOSwwLDAsMS0xLDEuNTQsMi4yOCwyLjI4LDAsMCwwLTIuNTguNTdjLS4zNS0uMi0uNy0uNC0xLS42M2ExNiwxNiwwLDAsMS00LjkzLTUuMjMsMi4yNSwyLjI1LDAsMCwwLC40Ny0xLjc3QTE3LjA4LDE3LjA4LDAsMCwxLDE5LjU2LDlsLjg3LTEuNTFhMTgu'@;
put 'NTksMTguNTksMCwwLDAtNi4zOSwxLDIuMzMsMi4zMywwLDAsMC0xLjE0LS42MWwtLjI1LDBjLS4xMi0uNDItLjIzLS44NC0uMzItMS4yN3MtLjE0LS44MS0uMTktMS4yMkExMS44OCwxMS44OCwwLDAsMSwyMiw0Ljc5TDIzLDNBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywx'@;
put 'LjMzbDAsMGgwQTE0LDE0LDAsMCwwLDMxLjc2LDE2QzMxLjc2LDE1LjgsMzEuNzQsMTUuNiwzMS43MywxNS40Wm0tMjEtOS4xM2MwLC4yMS4wNi40My4xLjY0LjA5LjQ0LjIxLjg3LjMzLDEuM2EyLjI4LDIuMjgsMCwwLDAtMS4xLDIuMjVBMTguMzIsMTguMzIsMCwwLDAsNS45LDE0LjIyLDEy'@;
put 'LDEyLDAsMCwxLDEwLjc2LDYuMjdabTAsMTUuNzFBMi4zNCwyLjM0LDAsMCwwLDkuMiwyMy43NGwtLjY0LDBBMTEuOTQsMTEuOTQsMCwwLDEsNS44LDE2LjkybC4xMS0uMTlhMTYuOSwxNi45LDAsMCwxLDQuODEtNC44OSwyLjMxLDIuMzEsMCwwLDAsMi4yOC42MywxNy41MywxNy41MywwLDAs'@;
put 'MCw1LjM1LDUuNjVjLjQxLjI3LjgzLjUyLDEuMjUuNzZBMi4zMiwyLjMyLDAsMCwwLDE5Ljc4LDIwYTE2Ljk0LDE2Ljk0LDAsMCwxLTYuMiwzLjExQTIuMzQsMi4zNCwwLDAsMCwxMC43NiwyMlptNyw2YTExLjkyLDExLjkyLDAsMCwxLTUuODEtMS41MWwuMjgtLjA2YTIuMzQsMi4zNCwwLDAs'@;
put 'MCwxLjU3LTEuNzksMTguNDMsMTguNDMsMCwwLDAsNy0zLjUsMi4yOSwyLjI5LDAsMCwwLDMtLjYyLDE3LjQxLDE3LjQxLDAsMCwwLDQuMzIuNTZsLjUzLDBBMTIsMTIsMCwwLDEsMTcuNzUsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0t'@;
put 'YWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMxLjUsMTMuMzVhNy41NCw3LjU0LDAsMCwxLTEuNS4xNWwtLjUxLDBhMTEuOTEsMTEuOTEsMCwwLDEtLjI1LDYsMTYsMTYsMCwwLDEtNS0uNDEsMi4zMywyLjMzLDAsMCwwLS4zMy0xLjE5LDE4LjU5'@;
put 'LDE4LjU5LDAsMCwwLDIuNzgtNS4xOCw3LjQ5LDcuNDksMCwwLDEtMS4zMS0uODIsMTcsMTcsMCwwLDEtMi42MSw1LDIuMjgsMi4yOCwwLDAsMC0yLjU4LjU3Yy0uMzUtLjItLjctLjQtMS0uNjNhMTYsMTYsMCwwLDEtNC45My01LjIzLDIuMjUsMi4yNSwwLDAsMCwuNDctMS43NywxNywxNyww'@;
put 'LDAsMSw4LjUzLS42Miw3LjQzLDcuNDMsMCwwLDEtLjU2LTEuNTlBMTguNTYsMTguNTYsMCwwLDAsMTQsOC41M2EyLjMzLDIuMzMsMCwwLDAtMS4xNC0uNjFsLS4yNSwwYy0uMTItLjQyLS4yMy0uODQtLjMyLTEuMjdzLS4xNC0uODEtLjE5LTEuMjJBMTEuOTIsMTEuOTIsMCwwLDEsMjIuNTcs'@;
put 'NWE3LjQ1LDcuNDUsMCwwLDEsLjUzLTJBMTQsMTQsMCwwLDAsMy43NSwxNmMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwYTE0LDE0LDAsMSwwLDI3LjY4LTRaTTEwLjc2LDYuMjdjMCwuMjEuMDYuNDMuMS42NC4wOS40NC4yMS44Ny4zMywxLjNhMi4yOCwyLjI4LDAsMCwwLTEuMSwyLjI1QTE4'@;
put 'LjMyLDE4LjMyLDAsMCwwLDUuOSwxNC4yMiwxMiwxMiwwLDAsMSwxMC43Niw2LjI3Wm0wLDE1LjcxQTIuMzQsMi4zNCwwLDAsMCw5LjIsMjMuNzRsLS42NCwwQTExLjk0LDExLjk0LDAsMCwxLDUuOCwxNi45MmwuMTEtLjE5YTE2LjksMTYuOSwwLDAsMSw0LjgxLTQuODksMi4zMSwyLjMxLDAs'@;
put 'MCwwLDIuMjguNjMsMTcuNTMsMTcuNTMsMCwwLDAsNS4zNSw1LjY1Yy40MS4yNy44My41MiwxLjI1Ljc2QTIuMzIsMi4zMiwwLDAsMCwxOS43OCwyMGExNi45NCwxNi45NCwwLDAsMS02LjIsMy4xMUEyLjM0LDIuMzQsMCwwLDAsMTAuNzYsMjJabTcsNmExMS45MiwxMS45MiwwLDAsMS01Ljgx'@;
put 'LTEuNTFsLjI4LS4wNmEyLjM0LDIuMzQsMCwwLDAsMS41Ny0xLjc5LDE4LjQzLDE4LjQzLDAsMCwwLDctMy41LDIuMjksMi4yOSwwLDAsMCwzLS42MiwxNy40MSwxNy40MSwwLDAsMCw0LjMyLjU2bC41MywwQTEyLDEyLDAsMCwxLDE3Ljc1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAg'@;
put 'ICAgPHBhdGggZD0iTTI2LjU4LDMyaC0xOGExLDEsMCwxLDAsMCwyaDE4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LjcyLDkuODdhMi4yNSwyLjI1LDAsMCwxLS40NywxLjc3LDE2LDE2'@;
put 'LDAsMCwwLDQuOTMsNS4yM2MuMzQuMjMuNjkuNDMsMSwuNjNhMi4yOCwyLjI4LDAsMCwxLDIuNTgtLjU3LDE2LjksMTYuOSwwLDAsMCwzLjExLTdBMTcsMTcsMCwwLDAsMTQuNzIsOS44N1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMTcuNzUsMmExNCwxNCwwLDAsMC0xNCwxNGMwLC40NSwwLC44OS4wNywxLjMzbDAsMGgwQTE0LDE0LDAsMSwwLDE3Ljc1LDJaTTI4LjEsMjEuMDlhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0uNTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41'@;
put 'LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgsMjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4y'@;
put 'NS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0xLjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEu'@;
put 'MS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMsMi4zMywwLDAsMSwxNCw4LjUzYTE4LjUxLDE4LjUxLDAsMCwxLDEyLjExLS4wN2Mw'@;
put 'LS4zMiwwLS42NSwwLTFoMGExMiwxMiwwLDAsMSwyLjYyLDMuODVoMHEtLjczLS40My0xLjQ4LS43OGExOC40LDE4LjQsMCwwLDEtMy4zOSw3LjM3LDIuMzMsMi4zMywwLDAsMSwuMzMsMS4xOSwyMiwyMiwwLDAsMCw1LC40NSwxMS44OCwxMS44OCwwLDAsMS0uNjEsMS41M1oiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuNTgsMzJoLTE4YTEsMSwwLDEsMCwwLDJoMThhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzMsMTUuNEgyNS41NmExOC44NywxOC44NywwLDAsMS0xLjYyLDIuNTIsMi4zMywyLjMzLDAsMCwxLC4zMywxLjE5LDIyLDIyLDAsMCwwLDUsLjQ1LDExLjg4LDExLjg4LDAsMCwxLS42MSwxLjUzSDI4LjFhMTcuNDEsMTcuNDEsMCwwLDEtNC4zMi0u'@;
put 'NTYsMi4yOSwyLjI5LDAsMCwxLTMsLjYyLDE4LjQzLDE4LjQzLDAsMCwxLTcsMy41LDIuMzQsMi4zNCwwLDAsMS0xLjU3LDEuNzlsLS4yOS4wNmExMS45MywxMS45MywwLDAsMS0zLjM5LTIuOGwuNjYsMGEyLjMzLDIuMzMsMCwwLDEsNC4zNy0uNThBMTYuOTQsMTYuOTQsMCwwLDAsMTkuNzgs'@;
put 'MjBhMi4zMiwyLjMyLDAsMCwxLS4xOC0xLjE3Yy0uNDItLjI0LS44NC0uNDktMS4yNS0uNzZBMTcuNTMsMTcuNTMsMCwwLDEsMTMsMTIuNDdhMi4zMSwyLjMxLDAsMCwxLTIuMjgtLjYzLDI3LjMxLDI3LjMxLDAsMCwwLTUsNC43NGMwLS4yLDAtLjM5LDAtLjU3YTEyLDEyLDAsMCwxLC4xNC0x'@;
put 'LjczLDE4Ljc1LDE4Ljc1LDAsMCwxLDQuMi0zLjgsMi4yOCwyLjI4LDAsMCwxLDEuMS0yLjI1Yy0uMTItLjQzLS4yNC0uODYtLjMzLTEuMywwLS4xNCwwLS4yOS0uMTEtLjY0YTEyLDEyLDAsMCwxLDEuMzctLjg3Yy4xLjU5LjE0LjkuMjEsMS4yMXMuMi44NS4zMiwxLjI3bC4yNSwwQTIuMzMs'@;
put 'Mi4zMywwLDAsMSwxNCw4LjUzYTE4LjU5LDE4LjU5LDAsMCwxLDYuMzktMUwyMywzQTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMEExNCwxNCwwLDAsMCwzMS43NiwxNkMzMS43NiwxNS44LDMxLjc0LDE1LjYsMzEuNzMsMTUuNFoiIGNsYXNzPSJjbHItaS1z'@;
put 'b2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTQuMjYsMTEuNjRhMTYsMTYsMCwwLDAsNC45Myw1LjIzYy4zNC4yMy42OS40MywxLC42M2EyLjI4LDIuMjgsMCwwLDEsMi41OC0uNTcsMTcuMjksMTcuMjksMCwwLDAs'@;
put 'MS0xLjU0aC0xLjZBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMTkuNTYsOWExNy4wOCwxNy4wOCwwLDAsMC00Ljg0Ljg4LDIuMjUsMi4yNSwwLDAsMS0uNDcsMS43N1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAg'@;
put 'ICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5c'@;
put 'biAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS41LDEzLjM1YTcuNTQsNy41NCwwLDAsMS0xLjUuMTUsNy40Niw3LjQ2LDAsMCwxLTMuMjgtLjc2LDE4LjU5LDE4LjU5LDAsMCwxLTIuNzgsNS4xOCwyLjMzLDIuMzMsMCwwLDEsLjMzLDEuMTksMjIsMjIsMCwwLDAsNSwuNDUsMTEuODgsMTEuODgs'@;
put 'MCwwLDEtLjYxLDEuNTNIMjguMWExNy40MSwxNy40MSwwLDAsMS00LjMyLS41NiwyLjI5LDIuMjksMCwwLDEtMywuNjIsMTguNDMsMTguNDMsMCwwLDEtNywzLjUsMi4zNCwyLjM0LDAsMCwxLTEuNTcsMS43OWwtLjI5LjA2YTExLjkzLDExLjkzLDAsMCwxLTMuMzktMi44bC42NiwwYTIuMzMs'@;
put 'Mi4zMywwLDAsMSw0LjM3LS41OEExNi45NCwxNi45NCwwLDAsMCwxOS43OCwyMGEyLjMyLDIuMzIsMCwwLDEtLjE4LTEuMTdjLS40Mi0uMjQtLjg0LS40OS0xLjI1LS43NkExNy41MywxNy41MywwLDAsMSwxMywxMi40N2EyLjMxLDIuMzEsMCwwLDEtMi4yOC0uNjMsMjcuMzEsMjcuMzEsMCww'@;
put 'LDAtNSw0Ljc0YzAtLjIsMC0uMzksMC0uNTdhMTIsMTIsMCwwLDEsLjE0LTEuNzMsMTguNzUsMTguNzUsMCwwLDEsNC4yLTMuOCwyLjI4LDIuMjgsMCwwLDEsMS4xLTIuMjVjLS4xMi0uNDMtLjI0LS44Ni0uMzMtMS4zLDAtLjE0LDAtLjI5LS4xMS0uNjRhMTIsMTIsMCwwLDEsMS4zNy0uODdj'@;
put 'LjEuNTkuMTQuOS4yMSwxLjIxcy4yLjg1LjMyLDEuMjdsLjI1LDBBMi4zMywyLjMzLDAsMCwxLDE0LDguNTNhMTguNTYsMTguNTYsMCwwLDEsOC42NS0uODcsNy40NSw3LjQ1LDAsMCwxLC40MS00LjU5QTE0LDE0LDAsMCwwLDMuNzUsMTZjMCwuNDUsMCwuODkuMDcsMS4zM2wwLDBoMGExNCwx'@;
put 'NCwwLDEsMCwyNy42OC00WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNC43Miw5Ljg3YTIuMjUsMi4yNSwwLDAsMS0uNDcsMS43NywxNiwxNiwwLDAsMCw0LjkzLDUuMjNjLjM0LjIzLjY5'@;
put 'LjQzLDEsLjYzYTIuMjgsMi4yOCwwLDAsMSwyLjU4LS41NywxNywxNywwLDAsMCwyLjYxLTUsNy41Miw3LjUyLDAsMCwxLTIuMTYtMi42N0ExNywxNywwLDAsMCwxNC43Miw5Ljg3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQiLz5cbiAg'@;
put 'ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEsMTcuNDQsMTcuNDQsMCwwLDEtMS44Mi42MiwyLjI4LDIuMjgsMCwwLDAtNC4yOC42M2wtLjQ1LDBoMGExMS45'@;
put 'MywxMS45MywwLDAsMS0yLjg4LTcuMjcsMTcuNzksMTcuNzksMCwwLDEsNS00LjcyLDIuMjMsMi4yMywwLDAsMCwyLjI5LjU2LDE4LjUyLDE4LjUyLDAsMCwwLDQuNDcsNSwyLjc0LDIuNzQsMCwwLDEsLjIxLS4yNGwuOTUtLjkxYTE2LjksMTYuOSwwLDAsMS00LjM1LTQuNzksMi4yNywyLjI3'@;
put 'LDAsMCwwLC4zNS0xLjJjMC0uMDcsMC0uMTQsMC0uMjJBMTcuNjksMTcuNjksMCwwLDEsMjUsMTFhMTcuNDksMTcuNDksMCwwLDEtMS4xNSwzLjM0bC4xOSwwaDEuNTZhMTksMTksMCwwLDAsLjkxLTIuNzJjLjQzLjE5Ljg0LjQxLDEuMjYuNjRhMTEuOTQsMTEuOTQsMCwwLDEsMSw0LjA5bDAs'@;
put 'MEEyLjc3LDIuNzcsMCwwLDEsMzAsMTZhMi43MywyLjczLDAsMCwxLC42OC4xQTE0LDE0LDAsMSwwLDE2LjA4LDMxYTIuNzIsMi43MiwwLDAsMSwwLTJBMTEuOTMsMTEuOTMsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43'@;
put 'NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywxNywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3Mw'@;
put 'LC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsMjEuMTlBMy44NCwzLjg0LDAsMSwwLDI4Ljg4LDI1LDMu'@;
put 'ODcsMy44NywwLDAsMCwyNSwyMS4xOVptMCw2LjA4QTIuMjQsMi4yNCwwLDEsMSwyNy4yOCwyNSwyLjI2LDIuMjYsMCwwLDEsMjUsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNC4xNywyNC4xNGEx'@;
put 'LjE0LDEuMTQsMCwwLDAtLjctMS4xbC0xLjU2LS40NnEtLjExLS4zMi0uMjYtLjYzbC43Mi0xLjMzYTEuMTQsMS4xNCwwLDAsMC0uMjEtMS4zNGwtMS4zNC0xLjMyYTEuMTQsMS4xNCwwLDAsMC0xLjM0LS4ybC0xLjM0LjcxYTcuMjgsNy4yOCwwLDAsMC0uNjctLjI4TDI3LDE2LjcxYTEuMTQs'@;
put 'MS4xNCwwLDAsMC0xLjA4LS43NkgyNGExLjE0LDEuMTQsMCwwLDAtMS4wOC44bC0uNDQsMS40M2E3LjMyLDcuMzIsMCwwLDAtLjY4LjI4bC0xLjMyLS43YTEuMTQsMS4xNCwwLDAsMC0xLjMzLjE5bC0xLjM3LDEuMzFhMS4xNCwxLjE0LDAsMCwwLS4yMSwxLjM1bC43LDEuMjhxLS4xNi4zMi0u'@;
put 'MjguNjVMMTYuNTgsMjNhMS4xMywxLjEzLDAsMCwwLS44MSwxLjA5djEuODdBMS4xNCwxLjE0LDAsMCwwLDE2LjU5LDI3bDEuNDcuNDRxLjEyLjMyLjI4LjY0bC0uNzIsMS4zNWExLjE0LDEuMTQsMCwwLDAsLjIsMS4zNWwxLjM0LDEuMzJhMS4xNCwxLjE0LDAsMCwwLDEuMzQuMmwxLjM3LS43'@;
put 'MnEuMzEuMTQuNjMuMjZsLjQ0LDEuNDdhMS4xNCwxLjE0LDAsMCwwLDEuMDkuOGgxLjlBMS4xNCwxLjE0LDAsMCwwLDI3LDMzLjMxbC40NC0xLjQ3Yy4yMS0uMDcuNDItLjE2LjYyLS4yNWwxLjM4LjczYTEuMTQsMS4xNCwwLDAsMCwxLjMzLS4ybDEuMzQtMS4zMmExLjE0LDEuMTQsMCwwLDAs'@;
put 'LjIxLTEuMzVsLS43My0xLjM0cS4xNC0uMy4yNS0uNmwxLjUtLjQ0QTEuMTMsMS4xMywwLDAsMCwzNC4xNywyNlptLTEuNiwxLjUtMiwuNTgtLjEyLjQyQTUuNTUsNS41NSwwLDAsMSwzMCwyNy43M2wtLjIxLjM4LDEsMS43OS0uODYuODQtMS44Mi0xLS4zNy4yYTUuNzgsNS43OCwwLDAsMS0x'@;
put 'LjEyLjQ2bC0uNDIuMTItLjU5LDJIMjQuMzhsLS41OS0xLjk1LS40Mi0uMTJBNS44Niw1Ljg2LDAsMCwxLDIyLjI0LDMwbC0uMzctLjItMS44MSwxLS44Ni0uODUsMS0xLjgyLS4yMi0uMzhhNS42LDUuNiwwLDAsMS0uNDktMS4xM2wtLjEzLS40MS0xLjk1LS41OFYyNC40MmwxLjk0LS41OC4x'@;
put 'Mi0uNDFhNS41Myw1LjUzLDAsMCwxLC40OS0xLjE0bC4yMi0uMzktMS0xLjczLjg3LS44NCwxLjc3Ljk0LjM4LS4yMWE1LjgsNS44LDAsMCwxLDEuMTctLjQ5bC40MS0uMTIuNTktMS45MWgxLjIzbC41OCwxLjkuNDEuMTJhNS43OSw1Ljc5LDAsMCwxLDEuMTYuNDhsLjM4LjIxLDEuOC0uOTUu'@;
put 'ODYuODUtMSwxLjc3LjIxLjM4YTUuNTMsNS41MywwLDAsMSwuNDcsMS4xM2wuMTIuNDIsMS45My41N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTM0LDIzLjYzLDMyLDIzYTcuMDYsNy4wNiwwLDAsMC0uNTgt'@;
put 'MS40MWwxLTEuODZhLjM3LjM3LDAsMCwwLS4wNy0uNDRMMzAuOSwxNy44NmEuMzcuMzcsMCwwLDAtLjQ0LS4wN2wtMS44NSwxYTcsNywwLDAsMC0xLjQzLS42MWwtLjYxLTJhLjM3LjM3LDAsMCwwLS4zNi0uMjVoLTJhLjM3LjM3LDAsMCwwLS4zNS4yNmwtLjYxLDJhNyw3LDAsMCwwLTEuNDQu'@;
put 'NjFMMjAsMTcuOGEuMzcuMzcsMCwwLDAtLjQ0LjA3TDE4LDE5LjMxYS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcsNywwLDAsMCwxOC4zNSwyM2wtMiwuNjFhLjM3LjM3LDAsMCwwLS4yNi4zNXYyYS4zNy4zNywwLDAsMCwuMjYuMzVsMiwuNjFBNyw3LDAsMCwwLDE5LDI4LjM3bC0xLDEu'@;
put 'OWEuMzcuMzcsMCwwLDAsLjA3LjQ0bDEuNDUsMS40NWEuMzcuMzcsMCwwLDAsLjQ0LjA3bDEuODctMWE3LjA2LDcuMDYsMCwwLDAsMS4zOS41N2wuNjEsMmEuMzcuMzcsMCwwLDAsLjM1LjI2aDJhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTJhNyw3LDAsMCwwLDEuMzgtLjU3bDEuODksMWEu'@;
put 'MzcuMzcsMCwwLDAsLjQ0LS4wN2wxLjQ1LTEuNDVhLjM3LjM3LDAsMCwwLC4wNy0uNDRsLTEtMS44OEE3LDcsMCwwLDAsMzEuOTUsMjdsMi0uNjFhLjM3LjM3LDAsMCwwLC4yNi0uMzVWMjRBLjM3LjM3LDAsMCwwLDM0LDIzLjYzWm0tOC44Myw0LjcyQTMuMzMsMy4zMywwLDEsMSwyOC41Mywy'@;
put 'NSwzLjMzLDMuMzMsMCwwLDEsMjUuMTksMjguMzRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjg1LDI3LjQ0YTIuMjksMi4yOSwwLDAsMCwxLjc0LTEuNjgsMTkuNzEsMTkuNzEsMCwwLDAsMS44OS0uNlYyMy45'@;
put 'NWEyLDIsMCwwLDEsLjA5LS41NSwxNy40MiwxNy40MiwwLDAsMS0yLjE3Ljc4LDIuMjgsMi4yOCwwLDAsMC00LjI4LjYzbC0uNDUsMGgwYTExLjkzLDExLjkzLDAsMCwxLTIuODgtNy4yNywxNy43OSwxNy43OSwwLDAsMSw1LTQuNzIsMi4yMywyLjIzLDAsMCwwLDIuMjkuNTYsMTguNTIsMTgu'@;
put 'NTIsMCwwLDAsNC42NSw1LjA5LDEuOTMsMS45MywwLDAsMSwuMjMtLjMybC44OS0uODdhMTYuODksMTYuODksMCwwLDEtNC40OS00Ljg5LDIuMjcsMi4yNywwLDAsMCwuMzUtMS4yYzAtLjA3LDAtLjE0LDAtLjIyQTE3LjY5LDE3LjY5LDAsMCwxLDI1LDExYTE3LjQ5LDE3LjQ5LDAsMCwxLTEu'@;
put 'MTUsMy4zNSwxLjk0LDEuOTQsMCwwLDEsLjMxLS4wNWgxLjQ1YTE5LjA2LDE5LjA2LDAsMCwwLC45LTIuN2MuNDMuMTkuODQuNDEsMS4yNi42NGExMS45MywxMS45MywwLDAsMSwxLDQuNjNsMS0uNTFhMiwyLDAsMCwxLC45Mi0uMjNoLjA4QTE0LDE0LDAsMSwwLDE2LjQ0LDMxYTEuOTQsMS45'@;
put 'NCwwLDAsMSwuMTItMS40NmwuMjgtLjUzaC0uMDdBMTEuOTEsMTEuOTEsMCwwLDEsMTAuODUsMjcuNDRaTTE2Ljc2LDVhMTIsMTIsMCwwLDEsOC42MSwzLjY2YzAsLjI1LDAsLjUxLS4wOC43NmExOS4yMSwxOS4yMSwwLDAsMC0xMi4zNS4xMUEyLjI4LDIuMjgsMCwwLDAsMTEuNzQsOWExNywx'@;
put 'NywwLDAsMS0uNjEtMi41M0ExMS45MiwxMS45MiwwLDAsMSwxNi43Niw1Wk05LjY2LDcuMzZhMTguNzIsMTguNzIsMCwwLDAsLjQ5LDEuOTIsMi4yOCwyLjI4LDAsMCwwLTEuMDcsMS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMwLjc4LDguNDFBMiwyLDAsMCwwLDI4Ljg3LDdINy4xM0EyLDIsMCwwLDAs'@;
put 'NS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZBMiwyLDAsMCwwLDMzLjkxLDE4LjQ3Wk0zMiwyN0g0VjE5LjA2TDcuMTMsOUgyOC44N0wzMiwxOS4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRo'@;
put 'PSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQi'@;
put 'IC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIxLjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAg'@;
put 'ICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMi4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdo'@;
put 'dD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxNy4xMSIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxy'@;
put 'ZWN0IHg9IjI3LjEiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC01LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNi4yMyIgeT0iMTgiIHdpZHRoPSIyMy42OSIgaGVpZ2h0PSIx'@;
put 'LjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3LDMzLDE1LjRIMzAuODZMMzIsMTkuMDZWMjdINFYxOS4wNkw3LjEzLDlIMTkuNTZsMS4xNS0ySDcuMTNBMiwy'@;
put 'LDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2QTIsMiwwLDAsMCwzMy45MSwxOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNy4xMiIgeT0iMjIiIHdpZHRoPSIxLjgiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'MS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTIuMTIiIHk9IjIyIiB3aWR0aD0iMS44IiBoZWlnaHQ9IjMiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3LjExIiB5'@;
put 'PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyMi4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNy4xIiB5PSIyMiIgd2lkdGg9IjEuOCIgaGVpZ2h0PSIzIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiIC8+'@;
put 'XG4gICAgICAgICAgICA8cmVjdCB4PSI2LjIzIiB5PSIxOCIgd2lkdGg9IjIzLjY5IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjkxLDE4LjQ3bC0xLjY1'@;
put 'LTUuMzJhNy40OSw3LjQ5LDAsMCwxLTIsLjMzTDMyLDE5LjA2VjI3SDRWMTkuMDZMNy4xMyw5aDE2YTcuNDUsNy40NSwwLDAsMS0uNTUtMkg3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDIt'@;
put 'MlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC03LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC04LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuOTEsMTguNDcsMzAuNzgsOC40MUEyLDIsMCwwLDAsMjguODcsN0g3LjEzQTIsMiwwLDAsMCw1LjIyLDguNDFMMi4wOSwxOC40OGEyLDIsMCwwLDAtLjA5LjU5VjI3'@;
put 'YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOS4wNkEyLDIsMCwwLDAsMzMuOTEsMTguNDdaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMx'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMywxNS40SDIyLjIzQTMuNjgsMy42OCwwLDAsMSwxOSw5Ljg5TDIwLjcxLDdINy4xM0EyLDIsMCwwLDAsNS4yMiw4LjQxTDIuMDksMTguNDhhMiwyLDAsMCwwLS4wOS41'@;
put 'OVYyN2EyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTkuMDZhMiwyLDAsMCwwLS4wOS0uNTlaTTguOTIsMjVINy4xMlYyMmgxLjhabTUsMGgtMS44VjIyaDEuOFptNSwwaC0xLjhWMjJoMS44Wm01LDBIMjIuMVYyMmgxLjhabTUsMEgyNy4xVjIyaDEuOFpNMzEsMTkuNEg1VjE4SDMx'@;
put 'WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjku'@;
put 'MDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEzLjE1QTcuNDksNy40OSwwLDAsMSwyMi41'@;
put 'Nyw3SDcuMTNBMiwyLDAsMCwwLDUuMjIsOC40MUwyLjA5LDE4LjQ4YTIsMiwwLDAsMC0uMDkuNTlWMjdhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5LjA2YTIsMiwwLDAsMC0uMDktLjU5Wk04LjkyLDI1SDcuMTJWMjJoMS44Wm01LDBoLTEuOFYyMmgxLjhabTUsMGgtMS44VjIy'@;
put 'aDEuOFptNSwwSDIyLjFWMjJoMS44Wm01LDBIMjcuMVYyMmgxLjhaTTMxLDE5LjRINVYxOEgzMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVSb3V0ZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDE0Ljg3bDUuMTEtNS4xNGExLDEsMCwxLDAtMS40Mi0xLjQxTDE5LDEx'@;
put 'VjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMS4xM2wtNS4xMSw1LjE0YTEsMSwwLDAsMCwxLjQyLDEuNDFM'@;
put 'MTcsMjV2Ny42OWExLDEsMCwwLDAsMiwwVjI1bDIuNjksMi43MWExLDEsMCwwLDAsMS40Mi0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4x'@;
put 'NSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNS44NSwxOWg3LjY5YTEsMSwwLDAsMCwwLTJI'@;
put 'NS44NWwyLjcxLTIuNjlhMSwxLDAsMSwwLTEuNDEtMS40MkwyLDE4bDUuMTQsNS4xMWExLDEsMCwxLDAsMS40MS0xLjQyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjEuMTNsLTUuMTEsNS4xNGExLDEs'@;
put 'MCwwLDAsMS40MiwxLjQxTDE3LDI1djcuNjlhMSwxLDAsMCwwLDIsMFYyNWwyLjY5LDIuNzFhMSwxLDAsMCwwLDEuNDItMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUu'@;
put 'ODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBhdGggZD0iTTMxLjM4LDE1LjRIMjguNTRMMzAuMTUsMTdIMjIuNDZhMSwxLDAsMSwwLDAsMmg3LjY5bC0yLjcxLDIuNjlhMSwxLDAsMCwwLDEuNDEsMS40MkwzNCwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVy'@;
put 'dGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0Ljg3bDEuMTUtMS4xNi0uMS0uMTVBMy42OCwzLjY4LDAsMCwxLDE5LDEwVjMuMzNhMSwxLDAsMCwwLTIsMFYxMUwxNC4zMSw4LjMyYTEsMSwwLDEsMC0xLjQyLDEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUs'@;
put 'MS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxNC44N2w1LjExLTUuMTRhMSwxLDAsMSwwLTEuNDItMS40MUwxOSwxMVYzLjMzYTEsMSwwLDAs'@;
put 'MC0yLDBWMTFMMTQuMzEsOC4zMmExLDEsMCwxLDAtMS40MiwxLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDIxLjEzbC01LjExLDUuMTRhMSwxLDAsMCwwLDEuNDIsMS40'@;
put 'MUwxNywyNXY3LjY5YTEsMSwwLDAsMCwyLDBWMjVsMi42OSwyLjcxYTEsMSwwLDAsMCwxLjQyLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguODUsMTIuODlhMSwxLDAs'@;
put 'MCwwLTEuNDEsMS40MkwzMC4xNSwxN0gyMi40NmExLDEsMCwxLDAsMCwyaDcuNjlsLTIuNzEsMi42OWExLDEsMCwwLDAsMS40MSwxLjQyTDM0LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTUuODUsMTloNy42OWExLDEsMCwwLDAsMC0ySDUuODVsMi43MS0yLjY5YTEsMSwwLDEsMC0xLjQxLTEuNDJMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMSwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxLjY3YTE2LDE2LDAsMSwwLDE2'@;
put 'LDE2QTE2LDE2LDAsMCwwLDE4LDEuNjdaTTEzLjg2LDkuOTJhLjguOCwwLDAsMSwxLjEzLDBsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY2LjE4TDIxLDkuOTJhLjguOCwwLDEsMSwxLjEzLDEuMTRMMTgsMTUuMTVsLTQuMTQtNC4xQS44LjgsMCwwLDEsMTMuODYsOS45MlpNMTAu'@;
put 'MzIsMjEuNzRhLjguOCwwLDAsMS0xLjEzLDBMNSwxNy42N2w0LjE5LTQuMDlhLjguOCwwLDEsMSwxLjEyLDEuMTRsLTIuMiwyLjE0aDYuMjdhLjguOCwwLDAsMSwwLDEuNkg4LjExbDIuMiwyLjE1QS44LjgsMCwwLDEsMTAuMzIsMjEuNzRabTExLjgyLDMuNjdhLjguOCwwLDAsMS0xLjEzLDBM'@;
put 'MTguOCwyMy4yM1YyOS40YS44LjgsMCwwLDEtMS42LDBWMjMuMjNMMTUsMjUuNDJhLjguOCwwLDEsMS0xLjEzLTEuMTRMMTgsMjAuMThsNC4xNCw0LjFBLjguOCwwLDAsMSwyMi4xNCwyNS40MVptNC42Ny0zLjY2YS44LjgsMCwxLDEtMS4xMi0xLjE0bDIuMi0yLjE1SDIxLjYzYS44LjgsMCww'@;
put 'LDEsMC0xLjZoNi4yN2wtMi4yLTIuMTRhLjguOCwwLDEsMSwxLjEyLTEuMTRMMzEsMTcuNjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgyLDE1LjM5SDI4LjY4TDMxLDE3LjY3bC00LjE5LDQuMDlhLjguOCww'@;
put 'LDEsMS0xLjEyLTEuMTRsMi4yLTIuMTVIMjEuNjNhLjguOCwwLDAsMSwwLTEuNmg2LjI3bC0xLjUtMS40N0gyMi4yM2EzLjY4LDMuNjgsMCwwLDEtMy0xLjUxTDE4LDE1LjE1bC00LjE0LTQuMUEuOC44LDAsMSwxLDE1LDkuOTJsMi4yMSwyLjE5VjUuOTNhLjguOCwwLDAsMSwxLjYsMHY0LjQ5'@;
put 'QTMuNjUsMy42NSwwLDAsMSwxOSw5Ljg5bDQuMjItNy4zMUExNiwxNiwwLDEsMCwzNCwxNy42NywxNiwxNiwwLDAsMCwzMy44MiwxNS4zOVptLTIzLjUsNi4zNWEuOC44LDAsMCwxLTEuMTMsMEw1LDE3LjY3bDQuMTktNC4wOWEuOC44LDAsMSwxLDEuMTIsMS4xNGwtMi4yLDIuMTRoNi4yN2Eu'@;
put 'OC44LDAsMCwxLDAsMS42SDguMTFsMi4yLDIuMTVBLjguOCwwLDAsMSwxMC4zMiwyMS43NFptMTEuODIsMy42N2EuOC44LDAsMCwxLTEuMTMsMEwxOC44LDIzLjIzVjI5LjRhLjguOCwwLDAsMS0xLjYsMFYyMy4yM0wxNSwyNS40MmEuOC44LDAsMSwxLTEuMTMtMS4xNEwxOCwyMC4xOGw0LjE0'@;
put 'LDQuMUEuOC44LDAsMCwxLDIyLjE0LDI1LjQxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiICBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjIy'@;
put 'LDEyLjc2QTcuNDksNy40OSwwLDAsMSwyMy4zMiwyLjZhMTYsMTYsMCwxLDAsOS45LDEwLjE3Wk0xMy44Niw5LjkyYS44LjgsMCwwLDEsMS4xMywwbDIuMjEsMi4xOVY1LjkzYS44LjgsMCwwLDEsMS42LDB2Ni4xOEwyMSw5LjkyYS44LjgsMCwxLDEsMS4xMywxLjE0TDE4LDE1LjE1bC00LjE0'@;
put 'LTQuMUEuOC44LDAsMCwxLDEzLjg2LDkuOTJaTTEwLjMyLDIxLjc0YS44LjgsMCwwLDEtMS4xMywwTDUsMTcuNjdsNC4xOS00LjA5YS44LjgsMCwxLDEsMS4xMiwxLjE0bC0yLjIsMi4xNGg2LjI3YS44LjgsMCwwLDEsMCwxLjZIOC4xMWwyLjIsMi4xNUEuOC44LDAsMCwxLDEwLjMyLDIxLjc0'@;
put 'Wm0xMS44MiwzLjY3YS44LjgsMCwwLDEtMS4xMywwTDE4LjgsMjMuMjNWMjkuNGEuOC44LDAsMCwxLTEuNiwwVjIzLjIzTDE1LDI1LjQyYS44LjgsMCwxLDEtMS4xMy0xLjE0TDE4LDIwLjE4bDQuMTQsNC4xQS44LjgsMCwwLDEsMjIuMTQsMjUuNDFabTQuNjctMy42NmEuOC44LDAsMSwxLTEu'@;
put 'MTItMS4xNGwyLjItMi4xNUgyMS42M2EuOC44LDAsMCwxLDAtMS42aDYuMjdsLTIuMi0yLjE0YS44LjgsMCwxLDEsMS4xMi0xLjE0TDMxLDE3LjY3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xl'@;
put 'IGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVZNPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiww'@;
put 'LDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMEgxN3YyaDh2NmgyVjEyaDNWMjZIMjJWMTdhMiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJW'@;
put 'MzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI4aDhhMiwyLDAsMCwwLDItMlYxMkEyLDIsMCwwLDAsMzAsMTBaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4g'@;
put 'ICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMS44N0wyMywzSDExQTIsMiwwLDAsMCw5LDV2Ni44NWgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIyNS4wMSIgeT0iMTUuNCIg'@;
put 'd2lkdGg9IjEuOTkiIGhlaWdodD0iMi42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxNS40VjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIs'@;
put 'MiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTUuNFpNNiwzMVYxN0gyMHY5SDE2VjIwSDE0djZhMiwyLDAsMCwwLDIsMmg0djNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIgLz5cbiAg'@;
put 'ICAgICAgICAgIDxwYXRoIGQ9Ik0xNywxMHYyaDEuNTdBMy42NywzLjY3LDAsMCwxLDE5LDEwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUEx'@;
put 'LjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTEsNUgyMi41N2E3LjQ1LDcuNDUsMCwwLDEsLjU1LTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cGF0aCBkPSJNMzAsMTMuNWgwVjI2SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOGg4YTIsMiwwLDAsMCwyLTJWMTMuMjJBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaTTYsMzFWMTdIMjB2OUgxNlYyMEgxNHY2'@;
put 'YTIsMiwwLDAsMCwyLDJoNHYzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEyaDh2NmgyVjEyLjg3QTcuNTIsNy41MiwwLDAsMSwyMy42NiwxMEgxN1oiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIg'@;
put 'Lz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjdWNWEyLDIsMCwwLDAtMi0ySDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGgg'@;
put 'ZD0iTTMwLDEwSDE3LjE5YTIsMiwwLDAsMC0yLDJ2MS40SDIwQTMuNiwzLjYsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiwwLDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYy'@;
put 'MGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJBMiwyLDAsMCwwLDMwLDEwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZoMi43MkwyMywz'@;
put 'SDExQTIsMiwwLDAsMCw5LDV2OC40aDQuNTlaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjE5LDEwYTIsMiwwLDAsMC0yLDJ2MS40SDE5QTMuNjgsMy42OCwwLDAsMSwxOSwxMFoi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMuMjEsMTUuNEEzLjU1LDMuNTUsMCwwLDEsMjMuNiwxN3Y4SDIyVjE3YTIsMiwwLDAsMC0yLTJINmEyLDIsMCwwLDAtMiwyVjMxYTIsMiww'@;
put 'LDAsMCwyLDJIMjBhMiwyLDAsMCwwLDItMlYyOS42SDE3LjE5YTMuNiwzLjYsMCwwLDEtMy42LTMuNlYyMGgxLjZ2NmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+'@;
put 'XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVy'@;
put 'dGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy41OSwxMmEzLjYsMy42LDAsMCwxLDMuNi0zLjZIMjIuOUE3LjQ1LDcuNDUsMCwwLDEsMjMuMTMsM0gxMUEyLDIsMCwwLDAsOSw1djguNGg0LjU5WiIgY2xhc3M9'@;
put 'ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsMTMuNUE3LjQ5LDcuNDksMCwwLDEsMjMuNjYsMTBIMTcuMTlhMiwyLDAsMCwwLTIsMnYxLjRIMjBBMy42LDMuNiwwLDAsMSwyMy42LDE3djhIMjJWMTdh'@;
put 'MiwyLDAsMCwwLTItMkg2YTIsMiwwLDAsMC0yLDJWMzFhMiwyLDAsMCwwLDIsMkgyMGEyLDIsMCwwLDAsMi0yVjI5LjZIMTcuMTlhMy42LDMuNiwwLDAsMS0zLjYtMy42VjIwaDEuNnY2YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjQ5LDcuNDksMCwwLDEsMzAsMTMu'@;
put 'NVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiAgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWkt'@;
put 'YmFkZ2UiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVWTVdBcHA9KDAsbS5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAyMCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjE0IDMwIDYgMzAgNiAyMiA4IDIyIDggMjAgNCAyMCA0IDMyIDE2IDMyIDE2IDI4IDE0IDI4IDE0IDMwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOCAxNCA2IDE0IDYgNiAxNCA2IDE0IDggMTYgOCAxNiA0IDQgNCA0IDE2IDggMTYgOCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9IjIwIDQgMjAgOCAy'@;
put 'MiA4IDIyIDYgMzAgNiAzMCAxNCAyOCAxNCAyOCAxNiAzMiAxNiAzMiA0IDIwIDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjExIiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE5IiB5PSIxMSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTkiIHdp'@;
put 'ZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5c'@;
put 'biAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMjggMjIgMzAgMjIgMzAgMzAgMjIgMzAgMjIgMjggMjAgMjggMjAgMzIgMzIgMzIgMzIgMjAgMjggMjAgMjggMjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAg'@;
put 'ICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAxNiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8'@;
put 'cG9seWdvbiBwb2ludHM9IjggMTQgNiAxNCA2IDYgMTQgNiAxNCA4IDE2IDggMTYgNCA0IDQgNCAxNiA4IDE2IDggMTQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTEiIHk9IjEx'@;
put 'IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFs'@;
put 'ZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxOSIgeT0iMTkiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHBhdGggZD0iTTI1LDE1LjRIMjIuMjNBMy42OSwzLjY5LDAsMCwxLDE5LDEzLjU2bDAtLjFWMTdoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyMi40'@;
put 'NSA0IDIwIDQgMjAgOCAyMC4xNCA4IDIyLjQ1IDQiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC04LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjgiIHk9IjE1LjQiIHdpZHRoPSI0IiBoZWlnaHQ9IjAuNiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDExTDI5LjA2LDEuMTRBMS4y'@;
put 'OCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAyOCAy'@;
put 'MCAyOCAyMCAzMiAzMiAzMiAzMiAyMCAyOCAyMCAyOCAyMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSIxNCAzMCA2IDMwIDYgMjIgOCAyMiA4IDIwIDQgMjAgNCAzMiAx'@;
put 'NiAzMiAxNiAyOCAxNCAyOCAxNCAzMCIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBvbHlnb24gcG9pbnRzPSI4IDE0IDYgMTQgNiA2IDE0IDYgMTQgOCAxNiA4IDE2IDQgNCA0IDQgMTYgOCAxNiA4'@;
put 'IDE0IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMTEiIHdpZHRoPSI2IiBoZWlnaHQ9IjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjExIiB5PSIxOSIgd2lkdGg9IjYiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjE5'@;
put 'IiB3aWR0aD0iNiIgaGVpZ2h0PSI2IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsNmguNWE3LjQ5LDcuNDksMCwwLDEsLjI4LTJIMjBWOGgyWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVWMTRIMjh2Mmg0VjEzLjIyQTcuNDksNy40OSwwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgt'@;
put 'OC0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI1LDExLjU4YTcuNTMsNy41MywwLDAsMS0uNTgtLjU4SDE5djZoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9'@;
put 'IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEwLS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIs'@;
put 'MiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCwwLDAsMzIsNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3'@;
put 'LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQu'@;
put 'MzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1p'@;
put 'LW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMjMiIHdpZHRoPSIxMCIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBh'@;
put 'dGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYsNi4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwx'@;
put 'LDEsNC4zNy00LjMxQTQuMzUsNC4zNSwwLDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDEzLjU2QTMuNjYsMy42NiwwLDAsMSwxOC41NywxMkg3'@;
put 'djEuNkgxOS4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJ2MS4xNmE4LjQxLDguNDEsMCwwLDEsMiwxLjgxdi0zWiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNNCwyOFY4SDIwLjE0bDEuMTUtMkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOFoiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC02LS1hbGVydGVkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI2Ljg1LDEuMTQsMjEuMTMsMTFBMS4yOCwxLjI4LDAsMCwwLDIyLjIzLDEzSDMzLjY4QTEuMjgsMS4yOCwwLDAsMCwzNC43OCwxMUwyOS4wNiwxLjE0QTEuMjgs'@;
put 'MS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIGNsci1pLWFsZXJ0IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNyIgeT0iMTIiIHdpZHRoPSIxNyIgaGVpZ2h0PSIxLjYiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjciIHk9IjE2IiB3aWR0aD0iMTEiIGhlaWdodD0iMS42IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRn'@;
put 'ZWQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIyMyIgd2lkdGg9IjEwIiBoZWlnaHQ9IjEuNiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LjQ2LDE3LjIzYTYuMzYs'@;
put 'Ni4zNiwwLDAsMC00LjQsMTFsLTEuOTQsMi4zNy45LDMuNjEsMy42Ni00LjQ2YTYuMjYsNi4yNiwwLDAsMCwzLjU1LDBsMy42Niw0LjQ2LjktMy42MS0xLjk0LTIuMzdhNi4zNiw2LjM2LDAsMCwwLTQuNC0xMVptMCwxMC42OGE0LjMxLDQuMzEsMCwxLDEsNC4zNy00LjMxQTQuMzUsNC4zNSww'@;
put 'LDAsMSwyNy40NiwyNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiwxMy4yMnYzLjM0YTguNDEsOC40MSwwLDAsMSwyLDEuODF2LTZBNy40NSw3LjQ1LDAsMCwxLDMyLDEz'@;
put 'LjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTQsMjhWOEgyMi43OGE3LjQ5LDcuNDksMCwwLDEtLjI4LTJINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMTlsLjU3'@;
put 'LS43LjkzLTEuMTRMMjAuNDEsMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTksMzBINGEyLDIsMCwwLDEtMi0yVjhBMiwyLDAsMCwxLDQsNkgzMmEyLDIsMCwwLDEsMiwyVjE4LjM3YTguMzQsOC4zNCwwLDAsMC0xMy40OSw5Ljc5bC0uOTMsMS4xNFpNNywxMnYx'@;
put 'LjZIMjRWMTJabTAsNS42SDE4VjE2SDdabTAsN0gxN1YyM0g3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy44MywyMy41OWE2LjM3LDYuMzcsMCwxLDAtMTAuNzcsNC41OWwtMS45NCwyLjM3LjksMy42MSwzLjY2'@;
put 'LTQuNDZhNi4yNiw2LjI2LDAsMCwwLDMuNTUsMGwzLjY2LDQuNDYuOS0zLjYxLTEuOTQtMi4zN0E2LjM0LDYuMzQsMCwwLDAsMzMuODMsMjMuNTlabS0xMC43NCwwYTQuMzcsNC4zNywwLDEsMSw0LjM3LDQuMzFBNC4zNSw0LjM1LDAsMCwxLDIzLjEsMjMuNTlaIiBjbGFzcz0iY2xyLWktc29s'@;
put 'aWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjgzLDIzLjU5YTYuMzcsNi4zNywwLDEsMC0xMC43Nyw0LjU5bC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3'@;
put 'QTYuMzQsNi4zNCwwLDAsMCwzMy44MywyMy41OVptLTEwLjc0LDBhNC4zNyw0LjM3LDAsMSwxLDQuMzcsNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjMuMSwyMy41OVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAg'@;
put 'ICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgyOS4yNWE4LjM2LDguMzYsMCwwLDEsNC43NSwzdi0zWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMi0tYWxlcnRlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS4wNywxMy42SDdWMTJIMTguNTdBMy42'@;
put 'NywzLjY3LDAsMCwxLDE5LDkuODlMMjEuMjksNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEE4LjM0LDguMzQsMCwwLDEsMjUuNjYsMTUuNEgyMi4yM0EzLjY4LDMuNjgsMCwwLDEsMTkuMDcsMTMuNlpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1Yx'@;
put 'NkgxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYuODUsMS4xNCwyMS4xMywxMUExLjI4LDEuMjgsMCwwLDAsMjIuMjMsMTNIMzMuNjhBMS4yOCwxLjI4LDAsMCwwLDM0Ljc4LDEx'@;
put 'TDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiAgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtNC0tYWxlcnRlZCBjbHItaS1hbGVydCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNy40NiwxNy4yM2E2LjM2LDYuMzYsMCwwLDAt'@;
put 'NC40LDExbC0xLjk0LDIuMzcuOSwzLjYxLDMuNjYtNC40NmE2LjI2LDYuMjYsMCwwLDAsMy41NSwwbDMuNjYsNC40Ni45LTMuNjEtMS45NC0yLjM3YTYuMzYsNi4zNiwwLDAsMC00LjQtMTFabTAsMTAuNjhhNC4zMSw0LjMxLDAsMSwxLDQuMzctNC4zMUE0LjM1LDQuMzUsMCwwLDEsMjcuNDYs'@;
put 'MjcuOTFaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDE5bC41Ny0uNy45My0x'@;
put 'LjE0QTguMzQsOC4zNCwwLDAsMSwzNCwxOC4zN3YtNkE3LjQ2LDcuNDYsMCwwLDEsMzAsMTMuNVpNMTcsMjQuNkg3VjIzSDE3Wm0xLTdIN1YxNkgxOFptNi00SDdWMTJIMjRaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxSLkNsclNoYXBlQXJjaGl2ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDI0YTEsMSwwLDAsMCwxLDFoNmExLDEsMCwwLDAsMC0ySDE1QTEs'@;
put 'MSwwLDAsMCwxNCwyNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDE4SDZWMTRoNGEzLDMsMCwwLDEtLjY4LTEuODdzMC0uMDksMC0uMTNINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE2WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM0EzLDMsMCwwLDEsMjYsMTRoNHY0SDIybC0yLDJIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMwLjUsMTJaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwxOS4xOGw2LjM4LTYuMzVBMSwxLDAsMSwwLDIzLDExLjQxbC00LDMuOTVWM2ExLDEsMCwxLDAtMiwwdjEyLjRsLTQtMy45NWExLDEsMCwwLDAtMS40MSwxLjQyWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNDEsMjAuNiwxOCwyMmwtMS40MS0xLjRMMTYsMjBINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjBIMjBaTTIyLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMCwx'@;
put 'LDAtMmg2QTEsMSwwLDAsMSwyMiwyNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyNi42NnMwLC4wOSwwLC4xM2EzLDMsMCwwLDEtLjg4LDIuMTJMMjIsMThIMzJWMTMuNUExLjUsMS41LDAsMCwwLDMw'@;
put 'LjUsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLjIsMTQuMjVhMywzLDAsMCwxLS44OC0yLjEyczAtLjA5LDAtLjEzSDUuNUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNFoiIGNsYXNzPSJjbHItaS1zb2xp'@;
put 'ZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMTkuMThsNi4zOC02LjM1QTEsMSwwLDEsMCwyMywxMS40MWwtNCwzLjk1VjNhMSwxLDAsMSwwLTIsMHYxMi40bC00LTMuOTVhMSwxLDAsMCwwLTEuNDEsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBj'@;
put 'bHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVVbmFyY2hpdmU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIsMCwwLDAsMiwySDI5YTIsMiwwLDAsMCwyLTJWMjJIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCwyNGExLDEsMCwwLDAsMSwxaDZhMSwxLDAsMCwwLDAtMkgxNUExLDEsMCwwLDAsMTQsMjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0xNSwxOEg2VjE0aDlWMTJINS41QTEuNSwxLjUsMCwwLDAsNCwxMy41VjIwSDE1Ljc4QTMsMywwLDAsMSwxNSwxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjUsMTJIMjF2Mmg5djRIMjFhMywzLDAs'@;
put 'MCwxLS43OCwySDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsOS41NSwxNyw1LjZWMThhMSwxLDAsMSwwLDIsMFY1LjZsNCwzLjk1YTEsMSwwLDEsMCwx'@;
put 'LjQxLTEuNDJMMTgsMS43OCwxMS42MSw4LjEzQTEsMSwwLDAsMCwxMyw5LjU1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMjFhMywzLDAsMCwxLTIuMjItMUg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwy'@;
put 'LDAsMCwwLDItMlYyMEgyMC4yMUEzLDMsMCwwLDEsMTgsMjFabTQsM2ExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDAsMSwwLTJoNkExLDEsMCwwLDEsMjIsMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE1LDEySDUu'@;
put 'NUExLjUsMS41LDAsMCwwLDQsMTMuNVYxOEgxNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAuNSwxMkgyMXY2SDMyVjEzLjVBMS41LDEuNSwwLDAsMCwzMC41LDEyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1p'@;
put 'LXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMyw5LjU1LDE3LDUuNlYxOGExLDEsMCwxLDAsMiwwVjUuNmw0LDMuOTVhMSwxLDAsMSwwLDEuNDEtMS40MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy'@;
put 'LWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxSLkNsclNoYXBlQ29ubmVjdD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCww'@;
put 'LDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjItNUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcp'@;
put 'LFIuQ2xyU2hhcGVEaXNjb25uZWN0PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAsMCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCww'@;
put 'LDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEs'@;
put 'MSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNI'@;
put 'MzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z'@;
put 'b2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVMaW5rPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwxLTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYs'@;
put 'My44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUs'@;
put 'MEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcuODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIu'@;
put 'MS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0xLjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiww'@;
put 'LDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVVubGluaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5'@;
put 'LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAsNS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiww'@;
put 'LDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxSLkNsclNoYXBlQ2xvdWROZXR3b3JrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwx'@;
put 'MS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5'@;
put 'LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4'@;
put 'LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwzLjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4x'@;
put 'NSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0'@;
put 'aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwyLjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1'@;
put 'LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCww'@;
put 'LTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJIMTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3'@;
put 'LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsbS5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEuODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi'@;
put 'IC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRo'@;
put 'IGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4yNSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAv'@;
put 'PlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44'@;
put 'NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4z'@;
put 'OWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1'@;
put 'LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZURlcGxveT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTgu'@;
put 'ODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCww'@;
put 'LDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdBMSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44'@;
put 'NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRM'@;
put 'MzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxu'@;
put 'ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'NCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUhlbGl4PSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC44OCwx'@;
put 'My4wN2EuOS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMSwxLDEsMS41Mkw5LjM3LDEyLjkyQS45LjksMCwwLDEsOC44OCwxMy4wN1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTMuMjUsMTUu'@;
put 'MTFhLjkuOSwwLDAsMS0uNDktMS42NkwxOCwxMC4wOGEuOS45LDAsMSwxLDEsMS41MkwxMy43NCwxNUEuOS45LDAsMCwxLDEzLjI1LDE1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0xOS43MiwzMC4yM2Eu'@;
put 'OS45LDAsMCwxLS40OS0xLjY2bDguOTMtNS43M2EuOS45LDAsMCwxLDEsMS41MkwyMC4yLDMwLjA5QS45LjksMCwwLDEsMTkuNzIsMzAuMjNaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTE4LjkyLDI1Ljk0YS45'@;
put 'LjksMCwwLDEtLjQ5LTEuNjZsNS4yNS0zLjM3YS45LjksMCwxLDEsMSwxLjUxTDE5LjQsMjUuOEEuODkuODksMCwwLDEsMTguOTIsMjUuOTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgZD0iTTIxLjU2LDUuNjlhMy41'@;
put 'OSwzLjU5LDAsMCwxLC4xNSwzLjUzTDE4LjgzLDE1aDIuMjVsMi40My00Ljg3YTUuNjEsNS42MSwwLDAsMC01LTguMTRIMTMuMjZsLTEsMmg2LjIyQTMuNjEsMy42MSwwLDAsMSwyMS41Niw1LjY5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIGQ9Ik0zMi45MSwyMC43OEE1LjUzLDUuNTMsMCwwLDAsMjcuNjYsMTdIOS4zMWEzLjU0LDMuNTQsMCwwLDEtMy41Ni0zLjY3LDMuNjEsMy42MSwwLDAsMSwuNDItMS41NGw0LjI2LTguNDlhMSwxLDAsMSwwLTEuNzktLjlMNC40LDEwLjg0QTUuNjcsNS42NywwLDAsMCw0'@;
put 'LDE1LjIyLDUuNTMsNS41MywwLDAsMCw5LjI4LDE5aDcuNmwtMy40NCw2Ljg3YTUuNjQsNS42NCwwLDAsMCwxLjUsNi45MkE1LjM4LDUuMzgsMCwwLDAsMTguNDEsMzRoNS4yNWwxLTJIMTguNDNhMy41OCwzLjU4LDAsMCwxLTMuMjItNS4yMUwxOS4xMSwxOWg4LjU0YTMuNDIsMy40MiwwLDAs'@;
put 'MSwyLjE1LjcxLDMuNTcsMy41NywwLDAsMSwxLDQuNDNsLTQuMTIsOC4yMmExLDEsMCwxLDAsMS43OS45bDQuMDYtOC4xQTUuNjcsNS42NywwLDAsMCwzMi45MSwyMC43OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0z'@;
put 'Mi4xNiwxOS42M0E1LjU1LDUuNTUsMCwwLDAsMjcuNDIsMTdIMTAuMDZhNC4zNiw0LjM2LDAsMCwxLTMuNjctMiw0LjA3LDQuMDcsMCwwLDEtLjE5LTQuMTNsMy42Mi03LDEuNDIsMS42My0yLjc0LDUuMyw4Ljg0LTUuNjZhLjkxLjkxLDAsMCwxLDEsMS41M0w3Ljg0LDEzLjM4YTIuMTMsMi4x'@;
put 'MywwLDAsMCwuMjQuNTIsMi4yOCwyLjI4LDAsMCwwLDEuNjUsMUwxOC4xMSw5LjVhLjkxLjkxLDAsMCwxLDEsMS41MkwxMywxNC45NEgyMC44bDIuNDEtNC44MmE1LjYsNS42LDAsMCwwLTUtOC4xMkg5YTEsMSwwLDAsMC0uOS41NkwzLjg4LDEwLjg5YTUuNiw1LjYsMCwwLDAsNSw4LjEyaDcu'@;
put 'NjVsLTMuNDMsNi44N2E1LjYsNS42LDAsMCwwLDUsOC4xMmg5LjI4YTEsMSwwLDAsMCwuOTMtLjY1bDQuMTQtOC4yNEE1LjU4LDUuNTgsMCwwLDAsMzIuMTYsMTkuNjNaTTE3Ljc1LDI1LjU3QS45MS45MSwwLDAsMSwxOCwyNC4zMWw2LTMuODhBLjkxLjkxLDAsMSwxLDI1LDIybC02LDMuODhh'@;
put 'LjkxLjkxLDAsMCwxLTEuMjYtLjI3Wk0yOSwyNC4zNGwtOSw1Ljc4YS45MS45MSwwLDEsMS0xLTEuNTNsOS01Ljc4YS45MS45MSwwLDEsMSwxLDEuNTNaIi8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVGbGFzaz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQu'@;
put 'ODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwzNEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhh'@;
put 'Mi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4wNUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l'@;
put 'LXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRMNC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4z'@;
put 'Niw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAs'@;
put 'bS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQuNzYsNC43NiwwLDEsMCw0Ljc2LDQuNzZBNC43Niw0Ljc2LDAsMCwwLDE0LjY4LDMuM1oiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE2LjQyLDMxLjY4QTIuMTQsMi4xNCwwLDAsMSwxNS44LDMwSDRWMjQuMjJhMTQuODEsMTQuODEsMCwwLDEsMTEuMDktNC42OGwuNzIsMGEyLjIsMi4yLDAsMCwxLC42Mi0xLjg1bC4xMi0u'@;
put 'MTFjLS40NywwLTEtLjA2LTEuNDYtLjA2QTE2LjQ3LDE2LjQ3LDAsMCwwLDIuMiwyMy4yNmExLDEsMCwwLDAtLjIuNlYzMGEyLDIsMCwwLDAsMiwySDE2LjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi44'@;
put 'NywxNi4yOWEuMzcuMzcsMCwwLDEsLjE1LDAsLjQyLjQyLDAsMCwwLS4xNSwwWiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjY4LDIzLjMybC0yLS42MWE3LjIxLDcuMjEsMCwwLDAtLjU4LTEuNDFsMS0x'@;
put 'Ljg2QS4zOC4zOCwwLDAsMCwzMiwxOWwtMS40NS0xLjQ1YS4zNi4zNiwwLDAsMC0uNDQtLjA3bC0xLjg0LDFhNy4xNSw3LjE1LDAsMCwwLTEuNDMtLjYxbC0uNjEtMmEuMzYuMzYsMCwwLDAtLjM2LS4yNEgyMy44MmEuMzYuMzYsMCwwLDAtLjM1LjI2bC0uNjEsMmE3LDcsMCwwLDAtMS40NC42'@;
put 'bC0xLjgyLTFhLjM1LjM1LDAsMCwwLS40My4wN0wxNy42OSwxOWEuMzguMzgsMCwwLDAtLjA2LjQ0bDEsMS44MkE2Ljc3LDYuNzcsMCwwLDAsMTgsMjIuNjlsLTIsLjZhLjM2LjM2LDAsMCwwLS4yNi4zNXYyLjA1QS4zNS4zNSwwLDAsMCwxNiwyNmwyLC42MWE3LDcsMCwwLDAsLjYsMS40MWwt'@;
put 'MSwxLjkxYS4zNi4zNiwwLDAsMCwuMDYuNDNsMS40NSwxLjQ1YS4zOC4zOCwwLDAsMCwuNDQuMDdsMS44Ny0xYTcuMDksNy4wOSwwLDAsMCwxLjQuNTdsLjYsMmEuMzguMzgsMCwwLDAsLjM1LjI2aDIuMDVhLjM3LjM3LDAsMCwwLC4zNS0uMjZsLjYxLTIuMDVhNi45Miw2LjkyLDAsMCwwLDEu'@;
put 'MzgtLjU3bDEuODksMWEuMzYuMzYsMCwwLDAsLjQzLS4wN0wzMiwzMC40QS4zNS4zNSwwLDAsMCwzMiwzMGwtMS0xLjg4YTcsNywwLDAsMCwuNTgtMS4zOWwyLS42MWEuMzYuMzYsMCwwLDAsLjI2LS4zNVYyMy42N0EuMzYuMzYsMCwwLDAsMzMuNjgsMjMuMzJaTTI0Ljg1LDI4YTMuMzQsMy4z'@;
put 'NCwwLDEsMSwzLjMzLTMuMzNBMy4zNCwzLjM0LDAsMCwxLDI0Ljg1LDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxNC42NyIgY3k9IjguMyIgcj0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNi40NCwzMS44MmEyLjE1LDIuMTUsMCwwLDEtLjM4LTIuNTVsLjUzLTEtMS4wOS0uMzNBMi4xNCwyLjE0LDAsMCwxLDE0LDI1Ljg0VjIzLjc5YTIuMTYsMi4xNiwwLDAsMSwxLjUzLTIuMDdsMS4wOS0uMzMtLjUyLTFhMi4x'@;
put 'NywyLjE3LDAsMCwxLC4zNS0yLjUyLDE4LjkyLDE4LjkyLDAsMCwwLTIuMzItLjE2QTE1LjU4LDE1LjU4LDAsMCwwLDIsMjMuMDd2Ny43NWExLDEsMCwwLDAsMSwxSDE2LjQ0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9'@;
put 'Ik0zMy43LDIzLjQ2bC0yLS42YTYuNzMsNi43MywwLDAsMC0uNTgtMS40MmwxLTEuODZhLjM1LjM1LDAsMCwwLS4wNy0uNDNsLTEuNDUtMS40NmEuMzguMzgsMCwwLDAtLjQzLS4wN2wtMS44NSwxYTcuNzQsNy43NCwwLDAsMC0xLjQzLS42bC0uNjEtMmEuMzguMzgsMCwwLDAtLjM2LS4yNUgy'@;
put 'My44NGEuMzguMzgsMCwwLDAtLjM1LjI2bC0uNiwyYTYuODUsNi44NSwwLDAsMC0xLjQ1LjYxbC0xLjgxLTFhLjM4LjM4LDAsMCwwLS40NC4wNmwtMS40NywxLjQ0YS4zNy4zNywwLDAsMC0uMDcuNDRsMSwxLjgyQTcuMjQsNy4yNCwwLDAsMCwxOCwyMi44M2wtMiwuNjFhLjM2LjM2LDAsMCww'@;
put 'LS4yNi4zNXYyLjA1YS4zNi4zNiwwLDAsMCwuMjYuMzVsMiwuNjFhNy4yOSw3LjI5LDAsMCwwLC42LDEuNDFsLTEsMS45YS4zNy4zNywwLDAsMCwuMDcuNDRMMTkuMTYsMzJhLjM4LjM4LDAsMCwwLC40NC4wNmwxLjg3LTFhNy4wOSw3LjA5LDAsMCwwLDEuNC41N2wuNiwyLjA1YS4zOC4zOCww'@;
put 'LDAsMCwuMzYuMjZoMi4wNWEuMzguMzgsMCwwLDAsLjM1LS4yNmwuNi0yLjA1YTYuNjgsNi42OCwwLDAsMCwxLjM4LS41N2wxLjg5LDFhLjM4LjM4LDAsMCwwLC40NC0uMDZMMzIsMzAuNTVhLjM4LjM4LDAsMCwwLC4wNi0uNDRsLTEtMS44OGE2LjkyLDYuOTIsMCwwLDAsLjU3LTEuMzhsMi0u'@;
put 'NjFhLjM5LjM5LDAsMCwwLC4yNy0uMzVWMjMuODJBLjQuNCwwLDAsMCwzMy43LDIzLjQ2Wm0tOC44Myw0LjcyYTMuMzQsMy4zNCwwLDEsMSwzLjMzLTMuMzRBMy4zNCwzLjM0LDAsMCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAg'@;
put 'ICAgICAgJyksUi5DbHJTaGFwZUhhcmREcml2ZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJaTTMyLDI4SDRWOEgzMlYyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjEwLjI1IiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMTAuMjUi'@;
put 'IHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iNi4yMSIgY3k9IjI1LjQyIiByPSIxLjI1IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAg'@;
put 'IDxjaXJjbGUgY3g9IjI5LjgxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjg4LDE4LjA4YTMuNTksMy41OSwwLDEsMCwzLjU5LTMuNTksMy44NCwzLjg0LDAsMCwwLS45'@;
put 'MS4xM0wxNSwxNi4xNmEyLjA4LDIuMDgsMCwwLDEsLjUtLjA3LDIsMiwwLDEsMS0yLDIsMS42NCwxLjY0LDAsMCwxLC4wOC0uNUwxMiwxNy4xNkEzLjUzLDMuNTMsMCwwLDAsMTEuODgsMTguMDhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAg'@;
put 'ICAgICAgIDxwYXRoIGQ9Ik0xNS40NywyNS43M2E3LjY2LDcuNjYsMCwwLDEtNy42NS03LjY1LDcuNTUsNy41NSwwLDAsMSwuMjctMkw2LjU0LDE1LjdhOS4yNCw5LjI0LDAsMCwwLDE3LjgsNC45NUgyMi42NkE3LjY0LDcuNjQsMCwwLDEsMTUuNDcsMjUuNzNaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOC4yMiwxNy44M2EuOC44LDAsMCwwLS44LS44SDI0LjY2YTkuMjYsOS4yNiwwLDAsMC05LjE5LTguMiw5LjM2LDkuMzYsMCwwLDAtMi4zOC4zMmwuNDIsMS41NGE3Ljg2LDcuODYsMCwwLDEsMi0u'@;
put 'MjZBNy42Niw3LjY2LDAsMCwxLDIzLDE3SDIwLjkyYS44LjgsMCwwLDAsMCwxLjZoNi41QS44LjgsMCwwLDAsMjguMjIsMTcuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIs'@;
put 'OFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMTIsMTcuMTZsMS41NC40MmExLjY0LDEuNjQsMCwwLDAtLjA4LjUsMiwyLDAsMSwwLDItMiwyLjA4LDIuMDgsMCwwLDAtLjUuMDdsLS40MS0xLjU0YTMuODQsMy44NCwwLDAsMSwuOTEtLjEzLDMu'@;
put 'NTksMy41OSwwLDEsMS0zLjU5LDMuNTlBMy41MywzLjUzLDAsMCwxLDEyLDE3LjE2Wk01LjMxLDhBMS4yNSwxLjI1LDAsMSwxLDQuMDYsOS4yNSwxLjI1LDEuMjUsMCwwLDEsNS4zMSw4Wm0wLDIwLjA2YTEuMjUsMS4yNSwwLDEsMSwxLjI1LTEuMjVBMS4yNSwxLjI1LDAsMCwxLDUuMzEsMjgu'@;
put 'MDZabTEwLjE2LS43M0E5LjIyLDkuMjIsMCwwLDEsNi41NCwxNS43bDEuNTUuNDFhNy41NSw3LjU1LDAsMCwwLS4yNywyLDcuNjQsNy42NCwwLDAsMCwxNC44NCwyLjU3aDEuNjhBOS4yNSw5LjI1LDAsMCwxLDE1LjQ3LDI3LjMzWm0xMi04LjdoLTYuNWEuOC44LDAsMCwxLDAtMS42SDIzYTcu'@;
put 'NjYsNy42NiwwLDAsMC03LjU3LTYuNiw3Ljg2LDcuODYsMCwwLDAtMiwuMjZsLS40Mi0xLjU0YTkuMzYsOS4zNiwwLDAsMSwyLjM4LS4zMkE5LjI2LDkuMjYsMCwwLDEsMjQuNjYsMTdoMi43NmEuOC44LDAsMCwxLDAsMS42Wm0zLjM5LDkuNDNhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUEx'@;
put 'LjI1LDEuMjUsMCwwLDEsMzAuODEsMjguMDZabTAtMTcuNTZhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuODEsMTAuNVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVIYXJkRHJpdmVE'@;
put 'aXNrcz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43NCwxLjc0LDAsMCwwLDMuNzQsMjJINFY2SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzAsOS43NEExLjc0LDEuNzQsMCwwLDAsMjguMjYsOEg3Ljc0QTEuNzQsMS43NCwwLDAsMCw2LDkuNzRWMjQuMjZBMS43NCwxLjc0LDAsMCwwLDcuNzQsMjZIOFYxMEgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjI2LDEySDExLjc0QTEuNzQsMS43NCwwLDAsMCwxMCwxMy43NFYyOC4yNkExLjc0LDEuNzQsMCwwLDAsMTEuNzQsMzBIMzIuMjZBMS43NCwxLjc0LDAsMCwwLDM0LDI4LjI2VjEzLjc0QTEuNzQsMS43NCwwLDAsMCwz'@;
put 'Mi4yNiwxMlpNMzIsMjhIMTJWMTRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwyMy42OGEyLjY0LDIuNjQsMCwxLDAtMi43LTIuNjNBMi42NywyLjY3LDAsMCwwLDE5Ljk0LDIzLjY4Wm0wLTMu'@;
put 'ODdhMS4yNCwxLjI0LDAsMSwxLTEuMjksMS4yNEExLjI3LDEuMjcsMCwwLDEsMTkuOTQsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOS45NCwxNi4yMmE0LjkzLDQuOTMsMCwwLDEsNC45NSw0LjM1'@;
put 'SDIzLjcxVjIyaDQuNDFhLjcuNywwLDAsMCwwLTEuNEgyNi4zMWE2LjMzLDYuMzMsMCwwLDAtNi4zNy01Ljc1LDYuNTgsNi41OCwwLDAsMC0xLjQ4LjE3bC4zNSwxLjM3QTQuNzMsNC43MywwLDAsMSwxOS45NCwxNi4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC01IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5Ljk0LDI3LjI3YTYuNDIsNi40MiwwLDAsMCw1LjY3LTMuMzVIMjMuOTNhNSw1LDAsMCwxLTQsMS45NSw0LjkxLDQuOTEsMCwwLDEtNS00LjgyLDUuMTYsNS4xNiwwLDAsMSwuMDgtLjc5TDEzLjYzLDIwYTcsNywwLDAsMC0uMDksMUE2'@;
put 'LjMyLDYuMzIsMCwwLDAsMTkuOTQsMjcuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNiw1Ljc0QTEuNzQsMS43NCwwLDAsMCwyNC4yNiw0SDMuNzRBMS43NCwxLjc0LDAsMCwwLDIsNS43NFYyMC4yNkEx'@;
put 'Ljc0LDEuNzQsMCwwLDAsMy43NCwyMkg0VjZIMjZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDkuNzRBMS43NCwxLjc0LDAsMCwwLDI4LjI2LDhINy43NEExLjc0LDEuNzQsMCwwLDAsNiw5Ljc0VjI0LjI2QTEu'@;
put 'NzQsMS43NCwwLDAsMCw3Ljc0LDI2SDhWMTBIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYyLDIyLjZBMS41NSwxLjU1LDAsMSwwLDE4LDIxLjA1LDEuNiwxLjYsMCwwLDAsMTkuNjIsMjIuNloiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjYsMTJIMTEuNzRBMS43NCwxLjc0LDAsMCwwLDEwLDEzLjc0VjI4LjI2QTEuNzQsMS43NCwwLDAsMCwxMS43NCwzMEgzMi4yNkExLjc0LDEuNzQsMCwwLDAsMzQsMjguMjZWMTMu'@;
put 'NzRBMS43NCwxLjc0LDAsMCwwLDMyLjI2LDEyWk0xOS42MiwxNy43NGEzLjMxLDMuMzEsMCwxLDEtMy4zOCwzLjMxQTMuMzUsMy4zNSwwLDAsMSwxOS42MiwxNy43NFptMCwxMS4xM2E3Ljk0LDcuOTQsMCwwLDEtOC03LjgyLDcuODMsNy44MywwLDAsMSwuMTEtMS4yOWwxLjc1LjNhNS4zNiw1'@;
put 'LjM2LDAsMCwwLS4xMSwxLDYuMTgsNi4xOCwwLDAsMCw2LjI4LDYuMDYsNi4zNSw2LjM1LDAsMCwwLDUtMi40NmgyLjFBOC4wNiw4LjA2LDAsMCwxLDE5LjYyLDI4Ljg3Wk0yOS44OSwyMi4ySDI0LjM2VjIwLjQ0aDEuNDhBNi4xOSw2LjE5LDAsMCwwLDE5LjYyLDE1YTYuNDgsNi40OCwwLDAs'@;
put 'MC0xLjQxLjE2bC0uNDUtMS43YTguMTYsOC4xNiwwLDAsMSwxLjg2LS4yMiw4LDgsMCwwLDEsOCw3LjIxaDIuMjZhLjg4Ljg4LDAsMCwxLDAsMS43NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVOVk1lPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRIMjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAg'@;
put 'ICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEsMSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFa'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEsMSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAs'@;
put 'MCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksUi5DbHJTaGFwZVNTRD0oMCxtLmNsckljb25TVkcpKCc8'@;
put 'cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4'@;
put 'PSI2LjIxIiBjeT0iMTAuMjUiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIxMC4yNSIgcj0iMS4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI2LjIxIiBjeT0iMjUuNDIiIHI9IjEuMjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjkuODEiIGN5PSIyNS40MiIgcj0iMS4yNSIgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAsMTguNjJjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMnMtLjUzLDEuMDktMS41NSwxLjA5YTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRj'@;
put 'MiwwLDMuMS0xLDMuMS0yLjUycy0xLjE1LTIuMDUtMi44Ny0yLjQ0Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTAsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xQTQuNTgsNC41OCwwLDAsMCwxMCwxMy42OWMtMS43NCwwLTMsMS4wNS0zLDIu'@;
put 'NDlTOC4yNiwxOC4yMiwxMCwxOC42MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LjgzLDIwLjkzYTQsNCwwLDAsMS0yLjcxLTEuMTFsLS44NiwxLjA2YTUsNSwwLDAsMCwzLjUyLDEuMzRjMiwwLDMuMS0x'@;
put 'LDMuMS0yLjUyUzE5LjczLDE3LjY1LDE4LDE3LjI2Yy0xLjMxLS4zLTEuOTItLjU0LTEuOTItMS4yMUExLjI1LDEuMjUsMCwwLDEsMTcuNDgsMTVhMy42OCwzLjY4LDAsMCwxLDIuMzcsMWwuODEtMS4xYTQuNTYsNC41NiwwLDAsMC0zLjEyLTEuMTVjLTEuNzMsMC0zLDEuMDUtMywyLjQ5czEu'@;
put 'MTksMiwyLjg5LDIuNDRjMS4zMi4zMSwxLjkxLjU0LDEuOTEsMS4yMlMxOC44NSwyMC45MywxNy44MywyMC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjksMThjMC0yLjQxLTEuOTItNC4xMi00LjY0'@;
put 'LTQuMTJoLTIuOXY4LjI0aDIuOUMyOCwyMi4wOCwyOS45LDIwLjM3LDI5LjksMThabS02LTIuNzZoMS41NmEyLjc3LDIuNzcsMCwxLDEsMCw1LjUzSDIzLjg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIs'@;
put 'Nkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTUuMjEsOEExLjI1LDEuMjUsMCwxLDEsNCw5LjI1LDEuMjUsMS4yNSwwLDAsMSw1LjIxLDhabTAsMjBhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUs'@;
put 'MCwwLDEsNS4yMSwyOFptNS4wNi01Ljc4YTUsNSwwLDAsMS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjItMi40OSwzLTIuNDlhNC41OCw0'@;
put 'LjU4LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMUEzLjY4LDMuNjgsMCwwLDAsMTAsMTVhMS4yNSwxLjI1LDAsMCwwLTEuMzksMS4wOGMwLC42Ny42MS45MSwxLjkyLDEuMjEsMS43Mi4zOSwyLjg3Ljk0LDIuODcsMi40NFMxMi4yNCwyMi4yMiwxMC4yNywyMi4yMlptNy41MSwwYTUsNSwwLDAs'@;
put 'MS0zLjUyLTEuMzRsLjg2LTEuMDZhNCw0LDAsMCwwLDIuNzEsMS4xMWMxLDAsMS41NS0uNSwxLjU1LTEuMDlzLS41OS0uOTEtMS45MS0xLjIyYy0xLjctLjQtMi44OS0uODktMi44OS0yLjQ0czEuMjMtMi40OSwzLTIuNDlhNC41Niw0LjU2LDAsMCwxLDMuMTIsMS4xNWwtLjgxLDEuMWEzLjY4'@;
put 'LDMuNjgsMCwwLDAtMi4zNy0xLDEuMjUsMS4yNSwwLDAsMC0xLjM5LDEuMDhjMCwuNjcuNjEuOTEsMS45MiwxLjIxLDEuNzIuMzksMi44Ny45NCwyLjg3LDIuNDRTMTkuNzUsMjIuMjIsMTcuNzgsMjIuMjJabTQuNTgtLjE0VjEzLjg0aDIuOWMyLjcyLDAsNC42NCwxLjcxLDQuNjQsNC4xMlMy'@;
put 'OCwyMi4wOCwyNS4yNiwyMi4wOFpNMzAuNjksMjhhMS4yNSwxLjI1LDAsMSwxLDEuMjUtMS4yNUExLjI1LDEuMjUsMCwwLDEsMzAuNjksMjhabTAtMTcuNWExLjI1LDEuMjUsMCwxLDEsMS4yNS0xLjI1QTEuMjUsMS4yNSwwLDAsMSwzMC42OSwxMC41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMy44NiwxNS4yaDEuNTZhMi43NywyLjc3LDAsMSwxLDAsNS41M0gyMy44NloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLFIuQ2xyU2hhcGVCbHVldG9vdGg9'@;
put 'KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAsMCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4'@;
put 'TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAs'@;
put 'MCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0x'@;
put 'MkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVWMTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42'@;
put 'LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIuMzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIu'@;
put 'NTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40'@;
put 'bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMu'@;
put 'MzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0EyLDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpN'@;
put 'MTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0zLjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41'@;
put 'MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAs'@;
put 'OS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNW'@;
put 'MjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40'@;
put 'LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40NiwxMi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1'@;
put 'LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwxLjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44'@;
put 'NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIsMTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNhMSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5'@;
put 'LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEz'@;
put 'SDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLFIuQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLG0uY2xySWNv'@;
put 'blNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1LjQ1QTUuNDYsNS40NiwwLDAsMSwxOCw0LjA3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu'@;
put 'ZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzEuODlWMjUuNzdhMTYuMTMsMTYuMTMsMCwwLDEsMTItNSwxNi42MSwxNi42MSwwLDAsMSw4LjcxLDIuMzNsMS4zNS0xLjUxQTE4LjUzLDE4LjUzLDAsMCwwLDE4LDE4Ljc0LDE3LjcsMTcuNywwLDAsMCw0LjIxLDI0LjhhMSwxLDAsMCwwLS4yMS42'@;
put 'djYuNDlBMi4wNiwyLjA2LDAsMCwwLDYsMzRIMTguMzlsLTEuOS0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMxLjg5LDMwLDMySDI2Ljg1bC0xLjgsMkgzMGEyLjA2LDIuMDYsMCwwLDAsMi0yLjA3VjI2LjJsLTIsMi4yM1oi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zNC43NiwxOC42MmExLDEsMCwwLDAtMS40MS4wOGwtMTEuNjIsMTMtNS4yLTUuNTlBMSwxLDAsMCwwLDE1LjEyLDI2YTEsMSwwLDAsMC0uMDYsMS40Mmw2LjY5LDcuMkwzNC44NCwyMEExLDEs'@;
put 'MCwwLDAsMzQuNzYsMTguNjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48Y2lyY2xlIGN4PSIxNy45OSIgY3k9IjEwLjM2IiByPSI2LjgxIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xMiwyNi42NWEy'@;
put 'LjgsMi44LDAsMCwxLDQuODUtMS44TDIwLjcxLDI5bDYuODQtNy42M0ExNi44MSwxNi44MSwwLDAsMCwxOCwxOC41NSwxNi4xMywxNi4xMywwLDAsMCw1LjUsMjRhMSwxLDAsMCwwLS4yLjYxVjMwYTIsMiwwLDAsMCwxLjk0LDJoOC41N2wtMy4wNy0zLjNBMi44MSwyLjgxLDAsMCwxLDEyLDI2'@;
put 'LjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjguNzYsMzJhMiwyLDAsMCwwLDEuOTQtMlYyNi4yNEwyNS41NywzMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjc3LDE4LjYyYTEs'@;
put 'MSwwLDAsMC0xLjQyLjA4bC0xMS42MiwxMy01LjItNS41OUExLDEsMCwwLDAsMTQuMTIsMjZhMSwxLDAsMCwwLDAsMS40Mmw2LjY4LDcuMkwzMy44NCwyMEExLDEsMCwwLDAsMzMuNzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLFIuQ2xyU2hh'@;
put 'cGVBdG9tPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwyLjQyLTIuNDJBMi40MiwyLjQyLDAsMCwxLDE4LDIwLjQ5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt'@;
put 'b3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI0LjIzLDExLjcxYTM5LjE0LDM5LjE0LDAsMCwwLTQuNTctMy45MiwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LTEuNzJjLjMyLS4xMi42Mi0uMjEuOTItLjNhMi4yOCwyLjI4LDAsMCwwLDMuODEtLjQ2LDMuMzEsMy4zMSwwLDAsMSwxLjkyLjg0'@;
put 'YzEuMTksMS4xOSwxLjIyLDMuNTkuMSw2LjU4LjQ5LjY1Ljk0LDEuMzEsMS4zNSwyLC4xNy0uNC4zNS0uNzkuNDktMS4xOCwxLjQ3LTMuODUsMS4yOC03LS41My04Ljc4YTUuMjksNS4yOSwwLDAsMC0zLjMzLTEuNDQsMi4yOSwyLjI5LDAsMCwwLTQuMzEuNTRjLS4zNy4xMS0uNzQuMjItMS4x'@;
put 'My4zN2EyNS43OSwyNS43OSwwLDAsMC00LjU3LDIuMzVBMjYuMjEsMjYuMjEsMCwwLDAsMTMuMjgsNC4yYy0zLjg1LTEuNDYtNy0xLjI4LTguNzcuNTNDMi44NSw2LjQsMi41OCw5LjE3LDMuNjgsMTIuNTlhMi4yOCwyLjI4LDAsMCwwLDEuNTksMy42N2MuMzIuNjEuNjcsMS4yMiwxLjA2LDEu'@;
put 'ODJBMjUuNTQsMjUuNTQsMCwwLDAsNCwyMi42NmMtMS40NywzLjg0LTEuMjgsNywuNTMsOC43N2E1LjYzLDUuNjMsMCwwLDAsNC4xMiwxLjUxLDEzLjM0LDEzLjM0LDAsMCwwLDQuNjUtMSwyNi4yMSwyNi4yMSwwLDAsMCw0LjU4LTIuMzVBMjUuNzksMjUuNzksMCwwLDAsMjIuNDMsMzJhMTQu'@;
put 'MTYsMTQuMTYsMCwwLDAsMy42NS45QTIuMywyLjMsMCwwLDAsMzAuNDYsMzJhNC41NSw0LjU1LDAsMCwwLC43NC0uNTdjMS44MS0xLjgxLDItNC45My41My04Ljc3QTMyLjY4LDMyLjY4LDAsMCwwLDI0LjIzLDExLjcxWk0xMi41NywzMC4wOWMtMywxLjE1LTUuNDUsMS4xMy02LjY1LS4wOHMt'@;
put 'MS4yMy0zLjYyLS4wNy02LjY0YTIyLjc3LDIyLjc3LDAsMCwxLDEuNzEtMy40OCw0MC4xOSw0MC4xOSwwLDAsMCwzLjkyLDQuNTZjLjQzLjQzLjg3Ljg1LDEuMzEsMS4yNXEuOS0uNDYsMS44My0xLjA1Yy0uNTgtLjUyLTEuMTYtMS0xLjcyLTEuNjFhMzQsMzQsMCwwLDEtNS43NC03LjQ3QTIu'@;
put 'MjksMi4yOSwwLDAsMCw1LjUsMTEuNjloMGMtLjc1LTIuNS0uNjItNC40OS40My01LjU0YTMuNzIsMy43MiwwLDAsMSwyLjcyLS45MiwxMS40LDExLjQsMCwwLDEsMy45My44NCwyMi44NiwyMi44NiwwLDAsMSwzLjQ4LDEuNzIsMzkuMTQsMzkuMTQsMCwwLDAtNC41NywzLjkyYy0uNDQuNDQt'@;
put 'Ljg3LjktMS4yOSwxLjM2YTIwLjI3LDIwLjI3LDAsMCwwLDEsMS44NWMuNTQtLjYxLDEuMDktMS4yMSwxLjY4LTEuOGEzNi4zMywzNi4zMywwLDAsMSw1LTQuMTcsMzYuODgsMzYuODgsMCwwLDEsNC45NSw0LjE3LDM2LjI2LDM2LjI2LDAsMCwxLDQuMTcsNSwzNywzNywwLDAsMS00LjE3LDVB'@;
put 'MzAuNjgsMzAuNjgsMCwwLDEsMTIuNTcsMzAuMDlaTTI5Ljc5LDMwbC0uMTYuMTNhMi4yNywyLjI3LDAsMCwwLTMuNS43MiwxMi41NywxMi41NywwLDAsMS0zLS43NywyMiwyMiwwLDAsMS0zLjQ4LTEuNzIsMzkuMTQsMzkuMTQsMCwwLDAsNC41Ny0zLjkyLDM4LjI2LDM4LjI2LDAsMCwwLDMu'@;
put 'OTItNC41NiwyMi44OCwyMi44OCwwLDAsMSwxLjcyLDMuNDhDMzEsMjYuMzksMzEsMjguODEsMjkuNzksMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQuMjMsMTEuNzFhMzkuMTQsMzkuMTQsMCwwLDAtNC41Ny0zLjkyLDIyLjg2'@;
put 'LDIyLjg2LDAsMCwxLDMuNDgtMS43MmMuMzItLjEyLjYyLS4yMS45Mi0uM2EyLjI4LDIuMjgsMCwwLDAsMy44MS0uNDYsMy4zMSwzLjMxLDAsMCwxLDEuOTIuODRjMS4xOSwxLjE5LDEuMjIsMy41OS4xLDYuNTguNDkuNjUuOTQsMS4zMSwxLjM1LDIsLjE3LS40LjM1LS43OS40OS0xLjE4LDEu'@;
put 'NDctMy44NSwxLjI4LTctLjUzLTguNzhhNS4yOSw1LjI5LDAsMCwwLTMuMzMtMS40NCwyLjI5LDIuMjksMCwwLDAtNC4zMS41NGMtLjM3LjExLS43NC4yMi0xLjEzLjM3YTI1Ljc5LDI1Ljc5LDAsMCwwLTQuNTcsMi4zNUEyNi4yMSwyNi4yMSwwLDAsMCwxMy4yOCw0LjJjLTMuODUtMS40Ni03'@;
put 'LTEuMjgtOC43Ny41M0MyLjg1LDYuNCwyLjU4LDkuMTcsMy42OCwxMi41OWEyLjI4LDIuMjgsMCwwLDAsMS41OSwzLjY3Yy4zMi42MS42NywxLjIyLDEuMDYsMS44MkEyNS41NCwyNS41NCwwLDAsMCw0LDIyLjY2Yy0xLjQ3LDMuODQtMS4yOCw3LC41Myw4Ljc3YTUuNjMsNS42MywwLDAsMCw0'@;
put 'LjEyLDEuNTEsMTMuMzQsMTMuMzQsMCwwLDAsNC42NS0xLDI2LjIxLDI2LjIxLDAsMCwwLDQuNTgtMi4zNUEyNS43OSwyNS43OSwwLDAsMCwyMi40MywzMmExNC4xNiwxNC4xNiwwLDAsMCwzLjY1LjlBMi4zLDIuMywwLDAsMCwzMC40NiwzMmE0LjU1LDQuNTUsMCwwLDAsLjc0LS41N2MxLjgx'@;
put 'LTEuODEsMi00LjkzLjUzLTguNzdBMzIuNjgsMzIuNjgsMCwwLDAsMjQuMjMsMTEuNzFaTTEyLjU3LDMwLjA5Yy0zLDEuMTUtNS40NSwxLjEzLTYuNjUtLjA4cy0xLjIzLTMuNjItLjA3LTYuNjRhMjIuNzcsMjIuNzcsMCwwLDEsMS43MS0zLjQ4LDQwLjE5LDQwLjE5LDAsMCwwLDMuOTIsNC41'@;
put 'NmMuNDMuNDMuODcuODUsMS4zMSwxLjI1cS45LS40NiwxLjgzLTEuMDVjLS41OC0uNTItMS4xNi0xLTEuNzItMS42MWEzNCwzNCwwLDAsMS01Ljc0LTcuNDdBMi4yOSwyLjI5LDAsMCwwLDUuNSwxMS42OWgwYy0uNzUtMi41LS42Mi00LjQ5LjQzLTUuNTRhMy43MiwzLjcyLDAsMCwxLDIuNzIt'@;
put 'LjkyLDExLjQsMTEuNCwwLDAsMSwzLjkzLjg0LDIyLjg2LDIyLjg2LDAsMCwxLDMuNDgsMS43MiwzOS4xNCwzOS4xNCwwLDAsMC00LjU3LDMuOTJjLS40NC40NC0uODcuOS0xLjI5LDEuMzZhMjAuMjcsMjAuMjcsMCwwLDAsMSwxLjg1Yy41NC0uNjEsMS4wOS0xLjIxLDEuNjgtMS44YTM2LjMz'@;
put 'LDM2LjMzLDAsMCwxLDUtNC4xNywzNi44OCwzNi44OCwwLDAsMSw0Ljk1LDQuMTcsMzYuMjYsMzYuMjYsMCwwLDEsNC4xNyw1LDM3LDM3LDAsMCwxLTQuMTcsNUEzMC42OCwzMC42OCwwLDAsMSwxMi41NywzMC4wOVpNMjkuNzksMzBsLS4xNi4xM2EyLjI3LDIuMjcsMCwwLDAtMy41LjcyLDEy'@;
put 'LjU3LDEyLjU3LDAsMCwxLTMtLjc3LDIyLDIyLDAsMCwxLTMuNDgtMS43MiwzOS4xNCwzOS4xNCwwLDAsMCw0LjU3LTMuOTIsMzguMjYsMzguMjYsMCwwLDAsMy45Mi00LjU2LDIyLjg4LDIyLjg4LDAsMCwxLDEuNzIsMy40OEMzMSwyNi4zOSwzMSwyOC44MSwyOS43OSwzMFoiIGNsYXNzPSJj'@;
put 'bHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTcuOTkiIGN5PSIxOC4wNyIgcj0iMy4zIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMi42NiAzLjExKSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLFIu'@;
put 'Q2xyU2hhcGVCYXJDb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCww'@;
put 'LDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAt'@;
put 'MSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEsMSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAt'@;
put 'MSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLFIuQ2xyU2hhcGVDZER2ZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAs'@;
put 'MCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIyLjMzLDE4YTQuNDYsNC40NiwwLDEsMC00LjQ1LDQuNDZBNC40Niw0LjQ2LDAsMCwwLDIyLjMzLDE4'@;
put 'Wk0xNy44OCwyMC45QTIuODYsMi44NiwwLDEsMSwyMC43MywxOCwyLjg2LDIuODYsMCwwLDEsMTcuODgsMjAuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNy44OCw3LjQzSDE4VjUuODRoLS4xMkExMi4yMSwxMi4yMSwwLDAsMCw1'@;
put 'LjY4LDE3Ljc1aDEuNkExMC42MSwxMC42MSwwLDAsMSwxNy44OCw3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjA4LDE4SDI4LjQ5djBBMTAuNjEsMTAuNjEsMCwwLDEsMTguMjUsMjguNjN2MS42QTEyLjIyLDEyLjIyLDAs'@;
put 'MCwwLDMwLjA5LDE4UzMwLjA4LDE4LDMwLjA4LDE4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDExVjkuNDRoLS4xMmE4LjYyLDguNjIsMCwwLDAtOC42LDguMzJoMS42YTcsNywwLDAsMSw3LTYuNzJaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTguMjUsMjV2MS42QTguNjEsOC42MSwwLDAsMCwyNi40OCwxOHYwaC0xLjZ2MEE3LDcsMCwwLDEsMTguMjUsMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJN'@;
put 'MTguMTcsMS45MmExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOC4xNywxLjkyWk0yNi4yMywxOGgxLjU0YTkuNjEsOS42MSwwLDAsMS05LjYsOS41M0gxOFYyNmguMTdBOC4wNyw4LjA3LDAsMCwwLDI2LjIzLDE4Wk02LjA1LDE4SDQuNDV2LS4wOEExMy43MiwxMy43MiwwLDAsMSwx'@;
put 'OCw0LjIxdjEuNkExMi4xMywxMi4xMywwLDAsMCw2LjA1LDE3LjkyWm00LjA1LDBIOC41NnYtLjA4QTkuNjEsOS42MSwwLDAsMSwxOCw4LjMyVjkuODZhOC4wNyw4LjA3LDAsMCwwLTcuOSw4LjA2Wm00LjMyLS4wOGEzLjc1LDMuNzUsMCwxLDEsMy43NSwzLjc1QTMuNzUsMy43NSwwLDAsMSwx'@;
put 'NC40MiwxNy45MlptMy43NSwxMy43MUgxOFYzMGguMTdBMTIuMTMsMTIuMTMsMCwwLDAsMzAuMjgsMThoMS42QTEzLjczLDEzLjczLDAsMCwxLDE4LjE3LDMxLjYzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlQ29udGFpbmVyPSgwLG0u'@;
put 'Y2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhWMjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9'@;
put 'Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCww'@;
put 'LDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAv'@;
put 'PjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzksMCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43'@;
put 'OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEsLjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43'@;
put 'OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCwwLDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt'@;
put 'cGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQuMTMsNC4xMywwLDAsMSwuOTItMS4zNywzMC45NCwzMC45NCwwLDAsMS03LjIyLTFaIiBjbGFzcz0iY2xyLWkt'@;
put 'b3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNiwyOFY4LjE5Yy4zNC0uNzYsNC4zMS0yLjExLDExLTIuMTFzMTAuNjcsMS4zNSwxMSwydi4zYy0uODIuNzktNC41OCwyLjA1LTExLjExLDIuMDVBMzMuNDgsMzMuNDgsMCwwLDEsOCw5LjQ0djEuNDRhMzUuNiwzNS42'@;
put 'LDAsMCwwLDguODksMWM0LjI5LDAsOC44LS41OCwxMS4xMS0xLjgydjUuMDdhNS4zLDUuMywwLDAsMS0xLjgxLjg4SDMwVjguMTJjMC0zLjE5LTguMTctNC0xMy00cy0xMywuODUtMTMsNFYyOEM0LDMwLjYzLDkuMzksMzEuNjgsMTQsMzJWMzBDOS4xMywyOS42Niw2LjI4LDI4LjYyLDYsMjha'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOCwyNC4yOGEzMS4zLDMxLjMsMCwwLDAsNiwuODl2LTEuNGEyOC45MywyOC45MywwLDAsMS02LS45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw'@;
put 'YXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTIxLDIxLjdh'@;
put 'LjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDAsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjEsMjEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSwyMS44MmEuNy43LDAsMCwwLS43LjdWMzBhLjcuNywwLDEsMCwxLjQsMFYy'@;
put 'Mi41MkEuNy43LDAsMCwwLDI1LDIxLjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCwwLDAsMjksMjEuN1oiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPjxwYXRoIGQ9Ik0zMiwxOEgxOGEyLDIsMCwwLDAtMiwyVjMyYTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyMEEyLDIsMCwwLDAsMzIsMThaTTE4LDMyVjIwSDMyVjMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMjEsMjEuN2EuNy43LDAsMCwwLS43Ljd2Ny40OWEuNy43LDAsMCwwLDEuNCwwVjIyLjRBLjcuNywwLDAsMCwyMSwyMS43WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMjUsMjEuODJhLjcuNywwLDAs'@;
put 'MC0uNy43VjMwYS43LjcsMCwxLDAsMS40LDBWMjIuNTJBLjcuNywwLDAsMCwyNSwyMS44MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI5LDIxLjdhLjcuNywwLDAsMC0uNy43djcuNDlhLjcuNywwLDEsMCwxLjQsMFYyMi40QS43LjcsMCww'@;
put 'LDAsMjksMjEuN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+PHBhdGggZD0iTTE4LDE2SDI4VjguMTJjMC0xLjY4LTUuMzgtMy0xMi0zUzQsNi40NCw0LDguMTJWMjhjMCwxLjUsNC4zMywyLjc1LDEwLDNWMjUuMjJhMjkuMTcsMjkuMTcsMCwwLDEtOC0xLjI5'@;
put 'VjIyLjQ0bC4yNC4xQTI2LjYzLDI2LjYzLDAsMCwwLDE0LDIzLjgyVjIwYTQsNCwwLDAsMSwuMjktMS40N0EyOS4xOSwyOS4xOSwwLDAsMSw2LDE3LjIzVjE1Ljc1bC4yNC4wOWEyOSwyOSwwLDAsMCw5LDEuMzJoMEE0LDQsMCwwLDEsMTgsMTZaTTYsMTAuNTRWOS4wNWwuMjQuMDlBMzAuMTIs'@;
put 'MzAuMTIsMCwwLDAsMTYsMTAuNDcsMjguMzMsMjguMzMsMCwwLDAsMjYsOS4wNXYxLjVhMzIuNTMsMzIuNTMsMCwwLDEtMTAsMS4zMkEzMi40NCwzMi40NCwwLDAsMSw2LDEwLjU0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxSLkNsclNoYXBlRmlsZVNo'@;
put 'YXJlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCww'@;
put 'LDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4'@;
put 'LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs'@;
put 'aW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEy'@;
put 'LjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwxLC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNs'@;
put 'YXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZVFyQ29kZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiwwLDAsMCw0LDUuNlYxMmg4VjRaTTEwLDEwSDZWNmg0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQsMzAuNEExLjYsMS42LDAsMCwwLDUuNiwzMkgxMlYyNEg0Wk02LDI2aDR2NEg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI0LDMyaDYuNEExLjYsMS42LDAsMCwwLDMyLDMwLjRWMjRI'@;
put 'MjRabTItNmg0djRIMjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzAuNCw0SDI0djhoOFY1LjZBMS42LDEuNiwwLDAsMCwzMC40LDRaTTMwLDEwSDI2VjZoNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0'@;
put 'aC00IiAvPjxwb2x5Z29uIHBvaW50cz0iMjAgMTAgMjAgOCAxNiA4IDE2IDEyIDE4IDEyIDE4IDEwIDIwIDEwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cmVjdCB4PSIxMiIgeT0iMTIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxyZWN0IHg9IjE0IiB5PSIxNCIgd2lkdGg9IjQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTciIC8+PHBvbHlnb24gcG9pbnRzPSIyMCA2IDIwIDggMjIgOCAyMiA0IDE0IDQgMTQgOCAx'@;
put 'NiA4IDE2IDYgMjAgNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiIC8+PHJlY3QgeD0iNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjQiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05IiAvPjxwb2x5Z29uIHBvaW50cz0iMTIg'@;
put 'MTYgMTIgMTggMTAgMTggMTAgMTQgOCAxNCA4IDE4IDYgMTggNiAyMCA0IDIwIDQgMjIgOCAyMiA4IDIwIDEwIDIwIDEwIDIyIDEyIDIyIDEyIDIwIDE0IDIwIDE0IDE2IDEyIDE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiIC8+PHBvbHlnb24gcG9pbnRz'@;
put 'PSIyMCAxNiAyMiAxNiAyMiAxOCAyNCAxOCAyNCAxNiAyNiAxNiAyNiAxNCAyMiAxNCAyMiAxMCAyMCAxMCAyMCAxMiAxOCAxMiAxOCAxNCAyMCAxNCAyMCAxNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTExIiAvPjxwb2x5Z29uIHBvaW50cz0iMTggMzAgMTQg'@;
put 'MzAgMTQgMzIgMjIgMzIgMjIgMzAgMjAgMzAgMjAgMjggMTggMjggMTggMzAiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xMiIgLz48cG9seWdvbiBwb2ludHM9IjIyIDIwIDIyIDE4IDIwIDE4IDIwIDE2IDE4IDE2IDE4IDE4IDE2IDE4IDE2IDIwIDE4IDIwIDE4'@;
put 'IDIyIDIwIDIyIDIwIDIwIDIyIDIwIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTMiIC8+PHJlY3QgeD0iMzAiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTQiIC8+PHJlY3QgeD0i'@;
put 'MjIiIHk9IjIwIiB3aWR0aD0iNiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTUiIC8+PHBvbHlnb24gcG9pbnRzPSIzMCAxNCAyOCAxNCAyOCAxNiAyNiAxNiAyNiAxOCAyOCAxOCAyOCAyMCAzMCAyMCAzMCAxOCAzMiAxOCAzMiAxNiAzMCAx'@;
put 'NiAzMCAxNCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE2IiAvPjxyZWN0IHg9IjIwIiB5PSIyMiIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjgg'@;
put 'MTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxSLkNsclNoYXBlVXNiPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC4yOSwxMS40YTEuNDksMS40OSwwLDAs'@;
put 'MSwxLjI4LS43MmgxYTIuODksMi44OSwwLDAsMCwyLjc1LDIuMDksMywzLDAsMCwwLDAtNS45MSwyLjksMi45LDAsMCwwLTIuNjcsMS44MkgxNS41N2EzLjQ5LDMuNDksMCwwLDAtMywxLjY2bC0zLDQuODNoMi4zNlptNS0yLjk0QTEuMzYsMS4zNiwwLDEsMSwxOCw5LjgxLDEuMzIsMS4zMiww'@;
put 'LDAsMSwxOS4zMyw4LjQ2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTM0LjMsMTcuMzdsLTYuMTEtMy42NmEuNy43LDAsMCwwLS43LDAsLjcxLjcxLDAsMCwwLS4zNi42MVYxN0g2LjkyYTIuMzMsMi4zMywwLDAsMSwuMzIsMS4xNywy'@;
put 'LjQ3LDIuNDcsMCwxLDEtMi40Ny0yLjQ2LDIuMzcsMi4zNywwLDAsMSwxLjE1LjNsLjkzLTEuNzZBNC40NCw0LjQ0LDAsMSwwLDkuMTUsMTloMy41OGw0LjE3LDYuNjVhMy40OSwzLjQ5LDAsMCwwLDMsMS42NmgxLjY2djEuMjhhLjc5Ljc5LDAsMCwwLC44Ljc5aDQuNDlhLjc5Ljc5LDAsMCww'@;
put 'LC44LS43OXYtNC40YS43OS43OSwwLDAsMC0uOC0uOEgyMi4zNGEuOC44LDAsMCwwLS44Ljh2MS4xMkgxOS44OGExLjUxLDEuNTEsMCwwLDEtMS4yOC0uNzJMMTUuMDksMTloMTJ2Mi42NmEuNjkuNjksMCwwLDAsLjM2LjYxLjY3LjY3LDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFs'@;
put 'Ni4xMS0zLjY2YS42OS42OSwwLDAsMCwuMzQtLjZBLjcxLjcxLDAsMCwwLDM0LjMsMTcuMzdaTTIzLjE0LDI1SDI2djIuOEgyMy4xNFptNS4zOS00LjU2VjE1LjU1bDQsMi40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zNC43Miwx'@;
put 'Ny4zN2wtNS41MS0zLjMxYS43MS43MSwwLDAsMC0xLjA3LjZWMTdIMTEuNzdsMy41Mi01LjZhMS40OSwxLjQ5LDAsMCwxLDEuMjgtLjcyaDEuNjRhMi40MSwyLjQxLDAsMCwwLDIuMjUsMS42MSwyLjQ4LDIuNDgsMCwwLDAsMC00Ljk1LDIuMzgsMi4zOCwwLDAsMC0yLjEzLDEuMzRIMTYuNTdh'@;
put 'My40OSwzLjQ5LDAsMCwwLTMsMS42Nkw5LjQxLDE3SDhhMy40NiwzLjQ2LDAsMSwwLC4wOCwyaDUuNjRsNC4xNSw2LjYyYTMuNDksMy40OSwwLDAsMCwzLDEuNjZoMi41OXYuOTJoNC40VjIzLjhoLTQuNHYxLjQ4SDIwLjg4YTEuNTEsMS41MSwwLDAsMS0xLjI4LS43MkwxNi4xMSwxOWgxMnYy'@;
put 'LjI4YS43LjcsMCwwLDAsLjM2LjYxLjcyLjcyLDAsMCwwLC4zNC4wOS42NS42NSwwLDAsMCwuMzYtLjFsNS41Mi0zLjMxYS43LjcsMCwwLDAsMC0xLjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVSYWRhcj0oMCxtLmNsckljb25TVkcp'@;
put 'KCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTkuNCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0z'@;
put 'LjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4y'@;
put 'LDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcu'@;
put 'Ny02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43'@;
put 'LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywyLjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYs'@;
put 'Ny4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUu'@;
put 'ODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwzLjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3'@;
put 'LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcsMi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEs'@;
put 'MC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAsMCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMy'@;
put 'LjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0xLjg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMx'@;
put 'LDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwxNC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4y'@;
put 'NywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVSZXNpc3Rvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcsMCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4x'@;
put 'MmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEsMSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40'@;
put 'NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCww'@;
put 'LDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksUi5DbHJTaGFwZUNhcGFjaXRvcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAs'@;
put 'MCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAs'@;
put 'MSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRo'@;
put 'IGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxSLkNsclNoYXBlU3F1aWQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5'@;
put 'YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCwwLDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGlu'@;
put 'ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSwwLTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5'@;
put 'LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDEx'@;
put 'LDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCww'@;
put 'LDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTls'@;
put 'LTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxSLkNsclNoYXBlSG9zdEdyb3VwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRBMS4wOCwxLjA4LDAsMCwxLDYsMzNWMTJhMS4wOCwxLjA4LDAsMCwxLDEuMDgtMS4wOGgxNEExLjA4LDEuMDgs'@;
put 'MCwwLDEsMjIuMTYsMTJWMzNBMS4wOCwxLjA4LDAsMCwxLDIxLjA4LDM0Wk04LjE2LDMxLjg4SDIwVjEzSDguMTZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxyZWN0IHg9IjEwLjA4IiB5PSIxNC45NiIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTI2LjEsMjcuODFoLTJWOWgtMTJWN2gxM2ExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG48cGF0aCBkPSJNMzAuMDgsMjNoLTJWNWgt'@;
put 'MTFWM2gxMmExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMTMuMDgiIHk9IjI3Ljg4IiB3aWR0aD0iMiIgaGVpZ2h0PSIyLjE2IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5c'@;
put 'blxuPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE1LjA4LDMxIEwxLjA4LDMxIEMwLjUxMzQyNzE5NywzMS4wMDE1NTY0IDAuMDQxOTY2Mzc2NSwzMC41NjUwMTg2IDAsMzAgTDAsOSBDMCw4LjQwMzUzMjQ3IDAuNDgzNTMyNDcsNy45MiAxLjA4LDcu'@;
put 'OTIgTDE1LjA4LDcuOTIgQzE1LjY3NjQ2NzUsNy45MiAxNi4xNiw4LjQwMzUzMjQ3IDE2LjE2LDkgTDE2LjE2LDMwIEMxNi4xMTgwMzM2LDMwLjU2NTAxODYgMTUuNjQ2NTcyOCwzMS4wMDE1NTY0IDE1LjA4LDMxIFogTTQuMDgsMTEuOTYgTDQuMDgsMTMuOTYgTDEyLjA4LDEzLjk2IEwxMi4w'@;
put 'OCwxMS45NiBMNC4wOCwxMS45NiBaIE03LjA4LDI0Ljg4IEw3LjA4LDI3LjA0IEw5LjA4LDI3LjA0IEw5LjA4LDI0Ljg4IEw3LjA4LDI0Ljg4IFoiIC8+XG48cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjAuMSwyNC44MSBMMTguMSwyNC44MSBMMTgu'@;
put 'MSw2IEw2LjEsNiBMNi4xLDQgTDE5LjEsNCBDMTkuNjUyMjg0Nyw0IDIwLjEsNC40NDc3MTUyNSAyMC4xLDUgTDIwLjEsMjQuODEgWiIgLz5cbjxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0yNC4wOCwyMCBMMjIuMDgsMjAgTDIyLjA4LDIgTDExLjA4'@;
put 'LDIgTDExLjA4LDAgTDIzLjA4LDAgQzIzLjYzMjI4NDcsMCAyNC4wOCwwLjQ0NzcxNTI1IDI0LjA4LDEgTDI0LjA4LDIwIFoiIC8+JyksUi5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCww'@;
put 'LDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwx'@;
put 'LTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRoPSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4g'@;
put 'IDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksUi5DbHJTaGFwZU5vZGVHcm91cD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1YxMy4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSww'@;
put 'LDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41'@;
put 'LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYy'@;
put 'Mi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0xVjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNh'@;
put 'MSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUu'@;
put 'MDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLFIuQ2xyU2hhcGVOb2Rlcz0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAu'@;
put 'NSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwy'@;
put 'MC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQuOXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksUi5DbHJTaGFwZU5hbWVzcGFjZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwxLDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4z'@;
put 'Ny4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDkuNjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0u'@;
put 'MzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAsMiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1'@;
put 'SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLFIuQ2xyU2hhcGVOb2RlPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUu'@;
put 'MzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksUi5DbHJTaGFwZVBvZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2'@;
put 'LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v'@;
put 'dXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2'@;
put 'LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEu'@;
put 'NDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxSLkNsckNvbnRyb2xMdW49KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUsMjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywy'@;
put 'NC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik02LDI3LjUzVjEwLjNjMi45LDEuNDMsOC4zNCwxLjg4LDEyLDEuODhzOS4xLS40NSwxMi0xLjg4djUuMTFjLS45MS44Mi01LDIuMTMtMTIsMi4xM0EzNC44'@;
put 'MSwzNC44MSwwLDAsMSw4LDE2LjMzVjE4YTQwLjg2LDQwLjg2LDAsMCwwLDEwLDEuMTZjMy40NiwwLDkuMTMtLjQ1LDEyLTEuOTF2My4yM2gyVjhoMHMwLDAsMC0uMDdjMC0zLjM1LTguOC00LjI1LTE0LTQuMjVTNCw0LjU4LDQsNy45M3YxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDgu'@;
put 'MzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaTTE4LDUuNjhjNy4xNSwwLDExLjUzLDEuNDQsMTIsMi4yNS0uNDYuODEtNC44NCwyLjI1LTEyLDIuMjVTNi4zMSw4LjY5LDYsOEM2LjMxLDcuMTgsMTAuNzEsNS42OCwxOCw1LjY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xy'@;
put 'LWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkzQTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xy'@;
put 'LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuXG4gIDxwYXRoIGQ9Ik04LDI0LjU5YTI1LjUs'@;
put 'MjUuNSwwLDAsMCwyLjc1LjU5bDEuMjEtMS40MWEyNC4xMywyNC4xMywwLDAsMS00LS44M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIuMDksMjJIMTUuNDZsLTUuNDEsNi4zMUwxNS40OSwzNGgx'@;
put 'Ni42YTIsMiwwLDAsMCwyLTJWMjMuOTNBMiwyLDAsMCwwLDMyLjA5LDIyWm0wLDEwSDE2LjM0bC0zLjU5LTMuNzdMMTYuMzgsMjRIMzIuMDl2OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEs'@;
put 'MjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTE4LDE3LjU0QTM0LjgxLDM0LjgxLDAsMCwxLDgsMTYuMzNWMThhNDAuODYsNDAuODYsMCww'@;
put 'LDAsMTAsMS4xNmMzLjQ2LDAsOS4xMy0uNDUsMTItMS45MXYzLjIzaDJWMTMuMjJhNy4zMiw3LjMyLDAsMCwxLTIsLjI4djEuOTFDMjkuMDksMTYuMjMsMjUsMTcuNTQsMTgsMTcuNTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQi'@;
put 'Lz5cbiAgPHBhdGggZD0iTTYsMjcuNTNWMTAuM2MyLjksMS40Myw4LjM0LDEuODgsMTIsMS44OGE0Ny42Niw0Ny42NiwwLDAsMCw3LjA5LS41Miw3LjQ1LDcuNDUsMCwwLDEtMS41MS0xLjgsNDcuNCw0Ny40LDAsMCwxLTUuNTguMzJDMTAuNzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgs'@;
put 'NC43Mi0yLjMsMTItMi4zLDEuNjYsMCwzLjE2LjA4LDQuNTEuMjFhNy41Niw3LjU2LDAsMCwxLC4yOS0yYy0xLjctLjE3LTMuMzgtLjI0LTQuOC0uMjQtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhDNywyOC4yOCw2LjEzLDI3Ljg0'@;
put 'LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC01LS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQgY2xy'@;
put 'LWktYmFkZ2UiLz5cblxuICA8cGF0aCBkPSJNOCwyNC41OWEyNS41LDI1LjUsMCwwLDAsMi43NS41OWwxLjIxLTEuNDFhMjQuMTMsMjQuMTMsMCwwLDEtNC0uODNaIi8+PHBhdGggZD0iTTMyLjA5LDIySDE1LjQ2bC01LjQxLDYuMzFMMTUuNDksMzRoMTYuNmEyLDIsMCwwLDAsMi0yVjIzLjkz'@;
put 'QTIsMiwwLDAsMCwzMi4wOSwyMlptMCwxMEgxNi4zNGwtMy41OS0zLjc3TDE2LjM4LDI0SDMyLjA5djhaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEs'@;
put 'MCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNNiwyNy41M1YxMC4zYzIuOSwxLjQzLDguMzQsMS44OCwxMiwxLjg4aC41OWEzLjU5LDMuNTksMCwwLDEsLjMyLTJIMThDMTAu'@;
put 'NzEsMTAuMTgsNi4zMSw4LjY5LDYsOGMuMzItLjgsNC43Mi0yLjMsMTItMi4zLDEuMjIsMCwyLjM1LjA1LDMuNDEuMTJsMS4xLTEuOTFjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4yLDAtMTQsLjktMTQsNC4yNXYxOS42YzAsMiwzLjE3LDMuMTQsNi44MywzLjcyTDguMzgsMjguNjhD'@;
put 'NywyOC4yOCw2LjEzLDI3Ljg0LDYsMjcuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNOCwxNi4zM1YxOGE0MC44Niw0MC44NiwwLDAsMCwxMCwxLjE2YzMuNDYsMCw5LjEzLS40NSwxMi0xLjkx'@;
put 'djMuMjNoMlYxNS40SDMwYy0uOTEuODItNSwyLjEzLTEyLDIuMTNBMzQuODEsMzQuODEsMCwwLDEsOCwxNi4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFB'@;
put 'MS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxl'@;
put 'cnQiLz5cblxuICA8cGF0aCBkPSJNMTYuMTEsMjdhMSwxLDAsMSwwLDEsMUExLDEsMCwwLDAsMTYuMTEsMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMi4wOSwyMUgzMlYxNy4zMmMtMS45LDIuOTMtMTAuNDYsMy4zLTE0LDMuM0E0'@;
put 'Mi40Myw0Mi40MywwLDAsMSw4LDE5LjU2VjE3Ljg4QTQwLjU5LDQwLjU5LDAsMCwwLDE4LDE5YzUsMCwxMy4yLS44MiwxNC0zLjgyVjEwLjcyYy0yLjIxLDMuMzYtMTAuNDksMy40Ni0xNCwzLjQ2QTQyLjEyLDQyLjEyLDAsMCwxLDgsMTMuMTFWMTFhNDAuNTksNDAuNTksMCwwLDAsMTAsMS4x'@;
put 'NGM1LDAsMTMuMjgtLjgzLDE0LTMuODhWNy44M2gwYy0uMTktMy4yNy04Ljg0LTQuMTUtMTQtNC4xNVM0LjIxLDQuNTYsNCw3LjgzSDR2MTkuN2MwLDIuMTYsMy42NCwzLjMsNy42MywzLjg0bDIuODQsMywuNTkuNjJoMTdhMywzLDAsMCwwLDMtM1YyMy45M0EzLDMsMCwwLDAsMzIuMDksMjFa'@;
put 'TTgsMjYuMDhWMjQuNGEyNS43OSwyNS43OSwwLDAsMCwzLjQ2LjdsLTEuMjQsMS40NEM5LjQ2LDI2LjQyLDguNzEsMjYuMjcsOCwyNi4wOFpNMzMuMDksMzJhMSwxLDAsMCwxLTEsMUgxNS45MkwxMS40LDI4LjIzLDE1LjkyLDIzSDMyLjA5YTEsMSwwLDAsMSwxLDFaIiBjbGFzcz0iY2xyLWkt'@;
put 'c29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTE2LjExLDI3YTEsMSwwLDEsMCwxLDFBMSwxLDAsMCwwLDE2LjExLDI3WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0xLS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIx'@;
put 'SDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNSwwLDEzLjItLjgyLDE0LTMuODJ2LTJhNy4zNCw3LjM0LDAsMCwxLTQuMTIsMCwzOS40NywzOS40NywwLDAsMS05Ljg4LDFB'@;
put 'NDIuMTIsNDIuMTIsMCwwLDEsOCwxMy4xMVYxMWE0MC41OSw0MC41OSwwLDAsMCwxMCwxLjE0LDQ3Ljc2LDQ3Ljc2LDAsMCwwLDcuMDktLjUyQTcuNDUsNy40NSwwLDAsMSwyMi44LDMuOTJjLTEuNy0uMTctMy4zOC0uMjQtNC44LS4yNC01LjE0LDAtMTMuNzkuODgtMTQsNC4xNUg0djE5Ljdj'@;
put 'MCwyLjE2LDMuNjQsMy4zLDcuNjMsMy44NGwyLjg0LDMsLjU5LjYyaDE3YTMsMywwLDAsMCwzLTNWMjMuOTNBMywzLDAsMCwwLDMyLjA5LDIxWk04LDI2LjA4VjI0LjRhMjUuNzksMjUuNzksMCwwLDAsMy40Ni43bC0xLjI0LDEuNDRDOS40NiwyNi40Miw4LjcxLDI2LjI3LDgsMjYuMDhaTTMz'@;
put 'LjA5LDMyYTEsMSwwLDAsMS0xLDFIMTUuOTJMMTEuNCwyOC4yMywxNS45MiwyM0gzMi4wOWExLDEsMCwwLDEsMSwxWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik0xNi4xMSwyN2ExLDEsMCwxLDAsMSwxQTEsMSwwLDAsMCwxNi4xMSwyN1oiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMyLjA5LDIxSDMyVjE3LjMyYy0xLjksMi45My0xMC40NiwzLjMtMTQsMy4zQTQyLjQzLDQyLjQzLDAsMCwxLDgsMTkuNTZWMTcuODhBNDAuNTksNDAuNTksMCwwLDAsMTgsMTljNC44NSwwLDEyLjgtLjc5LDEzLjkxLTMuNjJIMjIuMjNhMy42'@;
put 'OCwzLjY4LDAsMCwxLTIuNzMtMS4yM0gxOEE0Mi4xMiw0Mi4xMiwwLDAsMSw4LDEzLjExVjExYTQwLjU5LDQwLjU5LDAsMCwwLDEwLDEuMTRoLjU5YTMuNjEsMy42MSwwLDAsMSwuNDYtMi4yOWwzLjQ2LTZjLTEuNi0uMTUtMy4xNy0uMjEtNC41MS0uMjEtNS4xNCwwLTEzLjc5Ljg4LTE0LDQu'@;
put 'MTVINHYxOS43YzAsMi4xNiwzLjY0LDMuMyw3LjYzLDMuODRsMi44NCwzLC41OS42MmgxN2EzLDMsMCwwLDAsMy0zVjIzLjkzQTMsMywwLDAsMCwzMi4wOSwyMVpNOCwyNi4wOFYyNC40YTI1Ljc5LDI1Ljc5LDAsMCwwLDMuNDYuN2wtMS4yNCwxLjQ0QzkuNDYsMjYuNDIsOC43MSwyNi4yNyw4'@;
put 'LDI2LjA4Wk0zMy4wOSwzMmExLDEsMCwwLDEtMSwxSDE1LjkyTDExLjQsMjguMjMsMTUuOTIsMjNIMzIuMDlhMSwxLDAsMCwxLDEsMVoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUu'@;
put 'NzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0zLS1hbGVydGVkIGNsci1p'@;
put 'LWFsZXJ0Ii8+XG4gICcpLFIuQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsbS5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEy'@;
put 'LDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRaTTYsMzBWNkgzMFYzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxyZWN0IHg9IjIwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cmVjdCB4PSIyNCIgeT0i'@;
put 'MjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0yNy4yMiwxMEgyMHY0YS44LjgsMCwxLDAsMS41OSwwVjExLjZoNS42M2EuOC44LDAsMSwwLDAtMS42WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMTAiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIy'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxOCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTgiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0iMjIi'@;
put 'IHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC05Ii8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMTAiLz5c'@;
put 'blxuICA8cmVjdCB4PSIyMCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1v'@;
put 'dXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIyMCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSIy'@;
put 'NCIgeT0iMjIiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxMCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNS0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjE0IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC02LS1iYWRnZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIg'@;
put 'eT0iMTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTctLWJhZGdlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyMiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJh'@;
put 'ZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYmFkZ2VkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjI2IiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC05LS1iYWRnZWQiLz5cbiAgPHBhdGggZD0iTTIwLDE0'@;
put 'YS44LjgsMCwxLDAsMS41OSwwVjExLjZIMjVBNy43NCw3Ljc0LDAsMCwxLDIzLjY2LDEwSDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTAtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzAsMTMuNWgwVjMwSDZWNkgyMi41VjZhNy4zNyw3LjM3'@;
put 'LDAsMCwxLC4yOC0ySDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjEzLjIyQTcuMzcsNy4zNywwLDAsMSwzMCwxMy41WiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEyLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cblxuICA8cmVjdCB4PSIy'@;
put 'MCIgeT0iMTgiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjI0IiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0'@;
put 'ZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iMjAiIHk9IjIyIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSIyNCIgeT0iMjIi'@;
put 'IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjEwIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtNS0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIxNCIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTYtLWFsZXJ0ZWQiLz5cbiAgPHJlY3QgeD0iOC44MSIgeT0i'@;
put 'MTgiIHdpZHRoPSI4LjE0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC03LS1hbGVydGVkIi8+XG4gIDxyZWN0IHg9IjguODEiIHk9IjIyIiB3aWR0aD0iOC4xNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxl'@;
put 'cnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtOC0tYWxlcnRlZCIvPlxuICA8cmVjdCB4PSI4LjgxIiB5PSIyNiIgd2lkdGg9IjguMTQiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTktLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTMw'@;
put 'LDE1LjRWMzBINlY2SDIxLjI3bDEuMTgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxNS40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTEwLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwxLjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTExLS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG5cbiAgPHBhdGggZD0iTTMwLDRINkEyLDIsMCwwLDAsNCw2VjMwYTIsMiwwLDAsMCwyLDJINy44OHYxLjU3YTEsMSwwLDAsMCwyLDBWMzJoMTZ2MS41N2Ex'@;
put 'LDEsMCwwLDAsMiwwVjMySDMwYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMTcsMjhIOC44MVYyNkgxN1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRI'@;
put 'MjRWMjJoMlptMC00SDI0VjE4aDJabTAtNkgyMFYxMGg2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuXG4gIDxwYXRoIGQ9Ik0zMCwxMy41YTcuNDksNy40OSwwLDAsMS00LTEuMTZWMTRIMjBWMTBoMy42NkE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2YTcuMzcs'@;
put 'Ny4zNywwLDAsMSwuMjgtMkg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkg3Ljg4djEuNTdhMSwxLDAsMCwwLDIsMFYzMmgxNnYxLjU3YTEsMSwwLDAsMCwyLDBWMzJIMzBhMiwyLDAsMCwwLDItMlYxMy4yMkE3LjM3LDcuMzcsMCwwLDEsMzAsMTMuNVpNMTcsMjhIOC44MVYyNkgx'@;
put 'N1ptMC00SDguODFWMjJIMTdabTAtNEg4LjgxVjE4SDE3Wm0wLTRIOC44MVYxNEgxN1ptMC00SDguODFWMTBIMTdaTTIyLDI0SDIwVjIyaDJabTAtNEgyMFYxOGgyWm00LDRIMjRWMjJoMlptMC00SDI0VjE4aDJaIiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTEtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTIyLjIzLDE1LjRhMy42OCwzLjY4LDAsMCwxLTMuMTgtNS41'@;
put 'MUwyMi40NSw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDcuODh2MS41N2ExLDEsMCwwLDAsMiwwVjMyaDE2djEuNTdhMSwxLDAsMCwwLDIsMFYzMkgzMGEyLDIsMCwwLDAsMi0yVjE1LjRaTTE3LDI4SDguODFWMjZIMTdabTAtNEg4LjgxVjIySDE3Wm0wLTRIOC44MVYxOEgx'@;
put 'N1ptMC00SDguODFWMTRIMTdabTAtNEg4LjgxVjEwSDE3Wk0yMiwyNEgyMFYyMmgyWm0wLTRIMjBWMThoMlptNCw0SDI0VjIyaDJabTAtNEgyNFYxOGgyWiIgY2xhc3M9ImNsci1pLXNvbGlkLS1hbGVydGVkIGNsci1pLXNvbGlkLXBhdGgtMS0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjYu'@;
put 'ODUsMS4xNGwtNS43Miw5LjkxQTEuMjcsMS4yNywwLDAsMCwyMi4yMywxM0gzMy42OGExLjI3LDEuMjcsMCwwLDAsMS4xLTEuOTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFs'@;
put 'ZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksUi5DbHJTaGFwZVRhcGVEcml2ZT0oMCxtLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk00LDI4VjhIMzJWMjha'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTMuMzMsMTMuMzVhNC41Miw0LjUyLDAsMSwwLDQuNTMsNC41MkE0LjUzLDQuNTMsMCwwLDAsMTMuMzMsMTMuMzVabTAsNy40NGEyLjkyLDIuOTIsMCwxLDEsMi45My0yLjkyQTIuOTIs'@;
put 'Mi45MiwwLDAsMSwxMy4zMywyMC43OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMy42MiwxMy4zNWE0LjUyLDQuNTIsMCwxLDAsNC41Miw0LjUyQTQuNTMsNC41MywwLDAsMCwyMy42MiwxMy4zNVptMCw3LjQ0YTIuOTIsMi45'@;
put 'MiwwLDEsMSwyLjkyLTIuOTJBMi45MiwyLjkyLDAsMCwxLDIzLjYyLDIwLjc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTYsMTFWMjMuNTVIOFYxMkgyOS4zNFYxMEg3QTEsMSwwLDAsMCw2LDExWiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cblxuICA8cGF0aCBkPSJNOC44MSwxNy44N2E0LjUzLDQuNTMsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCw4LjgxLDE3Ljg3Wm03LjQ1LDBBMi45MywyLjkzLDAsMSwxLDEzLjMzLDE1LDIuOTMsMi45MywwLDAsMSwxNi4yNiwx'@;
put 'Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMTkuMSwxNy44N2E0LjUyLDQuNTIsMCwxLDAsNC41Mi00LjUyQTQuNTMsNC41MywwLDAsMCwxOS4xLDE3Ljg3Wm03LjQ0LDBBMi45MiwyLjkyLDAs'@;
put 'MSwxLDIzLjYyLDE1LDIuOTIsMi45MiwwLDAsMSwyNi41NCwxNy44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNMzIsMTMuMjJWMjhINFY4SDIyLjc4YTcuMzcsNy4zNywwLDAsMS0uMjgtMkg0QTIs'@;
put 'MiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEyLjM0QTcuNjUsNy42NSwwLDAsMSwzMiwxMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIvPlxuICA8cGF0aCBkPSJNNiwxMVYyMy41NUg4'@;
put 'VjEySDI1LjUxYTcuNjYsNy42NiwwLDAsMS0xLjg1LTJIN0ExLDEsMCwwLDAsNiwxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'LS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuXG4gIDxwYXRoIGQ9Ik04LjgxLDE3Ljg3YTQuNTMsNC41MywwLDEsMCw0LjUyLTQuNTJBNC41Myw0LjUzLDAsMCwwLDguODEsMTcuODdabTcuNDUsMEEyLjkzLDIuOTMsMCwxLDEsMTMuMzMsMTUs'@;
put 'Mi45MywyLjkzLDAsMCwxLDE2LjI2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTcsMTBhMSwxLDAsMCwwLTEsMVYyMy41NUg4VjEySDE4LjU3QTMuNywzLjcsMCwwLDEsMTksMTBaIiBj'@;
put 'bGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMi0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYyOEg0VjhIMjAuMTRsMS4xNS0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTUuMzha'@;
put 'IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYWxlcnRlZCIvPlxuICA8cGF0aCBkPSJNMjIuMDksMTUuMzlhMy42NSwzLjY1LDAsMCwxLTEuOC0uNTUsNC41MSw0LjUxLDAsMSwwLDcuMTEuNTZIMjUuMTdhMi45MiwyLjkyLDAsMSwxLTMuMDgs'@;
put 'MFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1hbGVydGVkIGNsci1pLW91dGxpbmUtcGF0aC00LS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0yNi44NSwxLjE0bC01LjcyLDkuOTFBMS4yNywxLjI3LDAsMCwwLDIyLjIzLDEzSDMzLjY4YTEuMjcsMS4yNywwLDAsMCwxLjEtMS45MUwyOS4wNiwx'@;
put 'LjE0QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWFsZXJ0ZWQgY2xyLWktb3V0bGluZS1wYXRoLTUtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cblxuICA8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTMwLDI0SDZWMTJIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMi4yMSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwxMi4yMSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwy'@;
put 'LDAsMCwxLDEyLjIxLDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMjMuNzksMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMjMuNzksMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwyMy43OSwxNloiIGNsYXNzPSJjbHIt'@;
put 'aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz5cblxuICA8cGF0aCBkPSJNMTIuMjEsMjNhNSw1LDAsMSwwLTUtNUE1LDUsMCwwLDAsMTIuMjEsMjNabTAtN2EyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxMi4yMSwxNloiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMS0tYmFkZ2VkIi8+XG4gIDxwYXRoIGQ9Ik0yMy43OSwyM2E1LDUsMCwxLDAtNS01QTUsNSwwLDAsMCwyMy43OSwyM1ptMC03YTIsMiwwLDEsMS0yLDJBMiwyLDAsMCwxLDIzLjc5LDE2WiIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRn'@;
put 'ZWQiLz5cbiAgPHBhdGggZD0iTTMwLDEzLjVWMjRINlYxMkgyNS41MWE3LjQ5LDcuNDksMCwwLDEtMy02SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTIuMzRBNy40OSw3LjQ5LDAsMCwxLDMwLDEzLjVaIiBjbGFzcz0iY2xyLWktc29saWQtLWJh'@;
put 'ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCIvPlxuICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+XG5cbiAgPHBhdGggZD0iTTcuMiwxOGE1LDUsMCwx'@;
put 'LDAsNS01QTUsNSwwLDAsMCw3LjIsMThabTcsMGEyLDIsMCwxLDEtMi0yQTIsMiwwLDAsMSwxNC4yMiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTE4Ljc4LDE4YTUsNSwwLDEsMCw5LjI3LTIuNkgy'@;
put 'Mi4yM2EzLjcxLDMuNzEsMCwwLDEtMi4xNy0uNzFBNSw1LDAsMCwwLDE4Ljc4LDE4Wm01LTJhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMjMuNzksMTZaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0ZWQgY2xyLWktc29saWQtcGF0aC0yLS1hbGVydGVkIi8+XG4gIDxwYXRoIGQ9Ik0zMy42'@;
put 'OCwxNS40SDMwVjI0SDZWMTJIMTguNTdhMy42NSwzLjY1LDAsMCwxLC40OC0yLjExTDIxLjI5LDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxNS4zOFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFs'@;
put 'ZXJ0ZWQiLz5cbiAgPHBhdGggZD0iTTI2Ljg1LDEuMTRsLTUuNzIsOS45MUExLjI3LDEuMjcsMCwwLDAsMjIuMjMsMTNIMzMuNjhhMS4yNywxLjI3LDAsMCwwLDEuMS0xLjkxTDI5LjA2LDEuMTRBMS4yOCwxLjI4LDAsMCwwLDI2Ljg1LDEuMTRaIiBjbGFzcz0iY2xyLWktc29saWQtLWFsZXJ0'@;
put 'ZWQgY2xyLWktc29saWQtcGF0aC00LS1hbGVydGVkIGNsci1pLWFsZXJ0Ii8+XG4gICcpLFIuQ2xyU2hhcGVBbmltYXRpb249KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0'@;
put 'LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3'@;
put 'LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIyLDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoi'@;
put 'IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIuMTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQu'@;
put 'MTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2'@;
put 'LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQu'@;
put 'NTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIsMTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxu'@;
put 'ICAnKSxSLkNsclNoYXBlQ2lDZD0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwxLC43MiwyLjEzYy4zLDAsLjYxLDAsLjkzLDBhOS41Miw5LjUyLDAsMCwwLDMtLjQ5bC0uOTMtMS44MUE3LjY3'@;
put 'LDcuNjcsMCwwLDEsMjMuNTMsMTkuODFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMTguMzYsMTcuODcsMTgsMTcuNDlhNy40LDcuNCwwLDAsMS0yLjItNS45Miw3LjMxLDcuMzEsMCwwLDEsMS41NC00TDE3LjI2LDlBMSwxLDAs'@;
put 'MCwwLDE4LjE3LDEwaC4wOWExLDEsMCwwLDAsMS0uOTFMMTkuNiw1YTEsMSwwLDAsMC0uMjktLjc5QTEsMSwwLDAsMCwxOC41Miw0bC00LjA5LjM1YTEsMSwwLDAsMCwuMTcsMmwxLjI5LS4xMWE5LjQ1LDkuNDUsMCwwLDAtMi4wNSw1LjMyLDkuMjgsOS4yOCwwLDAsMCwyLjY3LDcuMjZsLjMx'@;
put 'LjM3YTcuMzMsNy4zMywwLDAsMSwyLjA2LDQuOTEsNy4zOSw3LjM5LDAsMCwxLS4yNiwyLjQ3bDEuOC45MWE4Ljc2LDguNzYsMCwwLDAsLjQ1LTMuNTFBOS4yOCw5LjI4LDAsMCwwLDE4LjM2LDE3Ljg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAg'@;
put 'PHBhdGggZD0iTTMyLjQsMTcuOTEsMzEuMTksMThBOS42NSw5LjY1LDAsMCwwLDIzLjUzLDIuNDVhOS4zMyw5LjMzLDAsMCwwLTMsLjQ5bC45MSwxLjhhNy42Nyw3LjY3LDAsMCwxLDkuNzYsNy4zOSw3LjU4LDcuNTgsMCwwLDEtMS42NSw0LjcybC4xLTEuNTRhMSwxLDAsMSwwLTItLjEzbC0u'@;
put 'MjgsNC4wOGExLDEsMCwwLDAsLjMxLjc4Ljk0Ljk0LDAsMCwwLC42OS4yOGguMWw0LjA4LS40MmExLDEsMCwwLDAsLjktMS4xQTEsMSwwLDAsMCwzMi40LDE3LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTQuMDcsMjAuNDRo'@;
put 'LjA4bDQuMDktLjM1YTEsMSwwLDEsMC0uMTctMmwtMS4zOS4xMmE3LjYzLDcuNjMsMCwwLDEsNC41Mi0xLjQ5LDcuOSw3LjksMCwwLDEsMS42My4xOCwxMC4yMywxMC4yMywwLDAsMS0uNzEtMi4xM2MtLjMsMC0uNjEsMC0uOTIsMGE5LjY2LDkuNjYsMCwwLDAtNS45LDJsLjEyLTEuMzFhMSwx'@;
put 'LDAsMCwwLS45Mi0xLjA4LDEsMSwwLDAsMC0xLjA4LjkxbC0uMzUsNC4wOGExLDEsMCwwLDAsMSwxLjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTE4LjQyLDI4LjIzbC00LjA5LjI3YTEsMSwwLDAsMCwuMTMsMkwxNiwzMC4z'@;
put 'OWE3LjcxLDcuNzEsMCwwLDEtMTIuNTQtNiw3LjYsNy42LDAsMCwxLC4yOS0yTDIsMjEuNDZhOS41OSw5LjU5LDAsMCwwLS40NywyLjk1QTkuNyw5LjcsMCwwLDAsMTcuMTksMzJsLS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCww'@;
put 'LDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLFIuQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAs'@;
put 'Ny44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0x'@;
put 'LjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIs'@;
put 'MjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1'@;
put 'VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwyLjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUu'@;
put 'NzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLFIuVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Ui5DbHJT'@;
put 'aGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpSLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpSLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6Ui5DbHJTaGFwZUluc3RhbGwsdW5pbnN0YWxsOlIuQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOlIuQ2xyU2hhcGVMYXllcnMsYmxv'@;
put 'Y2s6Ui5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOlIuQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Ui5DbHJTaGFwZUJ1bmRsZSx3aWZpOlIuQ2xyU2hhcGVXaWZpLCJyYWNrLXNlcnZlciI6Ui5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Ui5DbHJTaGFwZUhhcmREaXNr'@;
put 'LCJiYWNrdXAtcmVzdG9yZSI6Ui5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOlIuQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpSLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpSLkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Ui5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpSLkNsclNoYXBlRGFz'@;
put 'aGJvYXJkLGhvc3Q6Ui5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpSLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOlIuQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpSLkNsclNoYXBlQXBwbGljYXRpb25zLGJ1aWxkaW5nOlIuQ2xyU2hhcGVCdWlsZGluZyxjcHU6Ui5DbHJTaGFwZUNQVSxtZW1v'@;
put 'cnk6Ui5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpSLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOlIuQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxkOlIuQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Ui5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQt'@;
put 'eCI6Ui5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0OlIuQ2xyU2hhcGVJbXBvcnQsZXhwb3J0OlIuQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6Ui5DbHJTaGFwZVVwbG9hZENsb3VkLCJkb3dubG9hZC1jbG91ZCI6Ui5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOlIuQ2xyU2hhcGVQ'@;
put 'bHVnaW4sZmxvcHB5OlIuQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Ui5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Ui5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6Ui5DbHJTaGFwZVRlcm1pbmFsLGNvZGU6Ui5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Ui5DbHJTaGFwZUFwcGxpY2F0aW9u'@;
put 'LGJhdHRlcnk6Ui5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOlIuQ2xyU2hhcGVNb2JpbGUsdGFibGV0OlIuQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOlIuQ2xyU2hhcGVOZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOlIuQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdv'@;
put 'cmstc3dpdGNoIjpSLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Ui5DbHJTaGFwZVJvdXRlcix2bTpSLkNsclNoYXBlVk0sInZtdy1hcHAiOlIuQ2xyU2hhcGVWTVdBcHAsY2VydGlmaWNhdGU6Ui5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Ui5DbHJTaGFwZUFyY2hpdmUsdW5h'@;
put 'cmNoaXZlOlIuQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpSLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0OlIuQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6Ui5DbHJTaGFwZUxpbmssdW5saW5rOlIuQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOlIuQ2xyU2hhcGVDbG91ZE5ldHdv'@;
put 'cmssImNsb3VkLXNjYWxlIjpSLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Ui5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOlIuQ2xyQ29udHJvbEx1bixkZXBsb3k6Ui5DbHJTaGFwZURlcGxveSxoZWxpeDpSLkNsclNoYXBlSGVsaXgsZmxhc2s6Ui5DbHJT'@;
put 'aGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Ui5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOlIuQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOlIuQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOlIuQ2xyU2hhcGVOVk1lLHNzZDpSLkNsclNoYXBlU1NELGJs'@;
put 'dWV0b290aDpSLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpSLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpSLkNsclNoYXBlUHJvY2Vzc09uVk0sImFzc2lnbi11c2VyIjpSLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOlIuQ2xyU2hhcGVBdG9tLCJiYXIt'@;
put 'Y29kZSI6Ui5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Ui5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpSLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpSLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpSLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2Rl'@;
put 'IjpSLkNsclNoYXBlUXJDb2RlLHVzYjpSLkNsclNoYXBlVXNiLHJhZGFyOlIuQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Ui5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpSLkNsclNoYXBlU3F1aWQsaW5kdWN0b3I6Ui5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOlIuQ2xyU2hhcGVSZXNpc3Rv'@;
put 'ciwiaG9zdC1ncm91cCI6Ui5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpSLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOlIuQ2xyU2hhcGVOb2RlR3JvdXAsbm9kZXM6Ui5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpSLkNsclNoYXBlTmFtZXNwYWNlLG5v'@;
put 'ZGU6Ui5DbHJTaGFwZU5vZGUscG9kOlIuQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOlIuQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOlIuQ2xyU2hhcGVUYXBlRHJpdmUsYW5pbWF0aW9uOlIuQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpSLkNsclNoYXBlQ2lDZCwiZmls'@;
put 'ZS1zaGFyZS0yIjpSLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuVGVjaG5vbG9n'@;
put 'eVNoYXBlcywiY29tbWFuZCIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5UZWNobm9sb2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5UZWNobm9sb2d5U2hh'@;
put 'cGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5UZWNobm9sb2d5U2hhcGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuVGVjaG5vbG9neVNoYXBlcywiZGlz'@;
put 'Y29ubmVjdGVkIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuVGVjaG5vbG9neVNoYXBlcywicmVjZWl2ZXIiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5UZWNobm9sb2d5U2hhcGVzWyJwaG9u'@;
put 'ZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5UZWNobm9sb2d5U2hhcGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSLlRlY2hub2xvZ3lTaGFwZXMs'@;
put 'ImRuYSIsKDAsYi5kZXNjcmlwdG9yQ29uZmlnKShSLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5UZWNobm9sb2d5U2hhcGVzLCJmb2xkZXItc2hhcmUiLCgwLGIuZGVzY3JpcHRvckNvbmZpZykoUi5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJl'@;
put 'Il0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoUi5UZWNobm9sb2d5U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksUi5UZXh0RWRpdFNo'@;
put 'YXBlcz1SLkNsclNoYXBlU3VwZXJzY3JpcHQ9Ui5DbHJTaGFwZVN1YnNjcmlwdD1SLkNsclNoYXBlU3RyaWtldGhyb3VnaD1SLkNsclNoYXBlSW5kZW50PVIuQ2xyU2hhcGVPdXRkZW50PVIuQ2xyU2hhcGVIaWdobGlnaHRlcj1SLkNsclNoYXBlVGV4dENvbG9yPVIuQ2xyU2hhcGVMYW5ndWFn'@;
put 'ZT1SLkNsclNoYXBlQWxpZ25Ub3A9Ui5DbHJTaGFwZUFsaWduTWlkZGxlPVIuQ2xyU2hhcGVBbGlnbkJvdHRvbT1SLkNsclNoYXBlVW5kZXJsaW5lPVIuQ2xyU2hhcGVUZXh0PVIuQ2xyU2hhcGVBbGlnblJpZ2h0VGV4dD1SLkNsclNoYXBlQmxvY2tRdW90ZT1SLkNsclNoYXBlUGFpbnRSb2xs'@;
put 'ZXI9Ui5DbHJTaGFwZU51bWJlckxpc3Q9Ui5DbHJTaGFwZUFsaWduTGVmdFRleHQ9Ui5DbHJTaGFwZUp1c3RpZnlUZXh0PVIuQ2xyU2hhcGVJdGFsaWM9Ui5DbHJTaGFwZUFsaWduUmlnaHQ9Ui5DbHJTaGFwZUFsaWduTGVmdD1SLkNsclNoYXBlQWxpZ25DZW50ZXI9Ui5DbHJTaGFwZUZvbnRT'@;
put 'aXplPVIuQ2xyU2hhcGVDaGVja2JveExpc3Q9Ui5DbHJTaGFwZUNlbnRlclRleHQ9Ui5DbHJTaGFwZUJ1bGxldExpc3Q9Ui5DbHJTaGFwZUJvbGQ9dm9pZCAwO3ZhciBiPWVlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2'@;
put 'Zy10YWctZ2VuZXJhdG9yLnRzIik7Ui5DbHJTaGFwZUJvbGQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcx'@;
put 'LDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43MywxOC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZj'@;
put 'MCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwyLjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksUi5DbHJT'@;
put 'aGFwZUJ1bGxldExpc3Q9KDAsYi5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQy'@;
put 'LDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJI'@;
put 'MzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLFIuQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4x'@;
put 'LDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWExLjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIu'@;
put 'MkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksUi5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIg'@;
put 'Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCww'@;
put 'LDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEs'@;
put 'MS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLFIuQ2xyU2hhcGVGb250U2l6ZT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwx'@;
put 'LDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4x'@;
put 'OUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJN'@;
put 'MzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAs'@;
put 'MCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLFIuQ2xyU2hhcGVBbGlnbkxlZnQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCww'@;
put 'LDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFz'@;
put 'cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEwVjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxSLkNs'@;
put 'clNoYXBlQWxpZ25SaWdodD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwx'@;
put 'LDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEyLDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksUi5DbHJTaGFwZUl0YWxpYz0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEuMSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIu'@;
put 'MTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxSLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBh'@;
put 'dGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSww'@;
put 'LDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQuNWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w'@;
put 'YXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxSLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCxiLmNscklj'@;
put 'b25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9'@;
put 'Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxSLkNsclNoYXBlTnVtYmVyTGlzdD0oMCxiLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDEx'@;
put 'LjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcs'@;
put 'MS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEuMDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCwwLTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4z'@;
put 'Ni42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEuOTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40'@;
put 'MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYi'@;
put 'IC8+JyksUi5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCwwLDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAsMCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIw'@;
put 'LDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJN'@;
put 'MzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSwwLDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlk'@;
put 'LXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlQmxvY2tRdW90ZT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQsMTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01'@;
put 'Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4x'@;
put 'MS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQuMzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91'@;
put 'dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEsMCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0i'@;
put 'Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwyMS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0i'@;
put 'TTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksUi5DbHJTaGFwZVRleHQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4y'@;
put 'OSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQu'@;
put 'NTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwyNy42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAs'@;
put 'Ljk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQuNDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcs'@;
put 'NC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4w'@;
put 'NmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLFIuQ2xyU2hhcGVVbmRlcmxpbmU9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMu'@;
put 'MDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUsMCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1p'@;
put 'LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlQWxpZ25C'@;
put 'b3R0b209KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVW'@;
put 'MjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAsMCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0zIiAvPicpLFIuQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCwwLDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCww'@;
put 'LDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZoNlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IC8+JyksUi5DbHJTaGFwZUFsaWduVG9wPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEs'@;
put 'MWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0'@;
put 'bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxSLkNsclNoYXBlTGFuZ3VhZ2U9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSwwLjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40'@;
put 'LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMtMS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91'@;
put 'dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJMMTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh'@;
put 'dGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJoNS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0y'@;
put 'LjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29uIHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNv'@;
put 'bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUuMWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0x'@;
put 'My4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0xLjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41'@;
put 'LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs'@;
put 'ci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxSLkNsclNoYXBlVGV4dENvbG9yPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgxOGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwx'@;
put 'LDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIy'@;
put 'WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksUi5DbHJTaGFw'@;
put 'ZUhpZ2hsaWdodGVyPSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSwwLDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0Ex'@;
put 'LDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEs'@;
put 'OS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIyQTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRM'@;
put 'OS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIyLTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5'@;
put 'LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxp'@;
put 'bmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxSLkNsclNoYXBlT3V0ZGVudD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5c'@;
put 'biAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2'@;
put 'LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41NiwyMi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3'@;
put 'LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLFIuQ2xyU2hhcGVJbmRlbnQ9KDAsYi5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAs'@;
put 'MSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBh'@;
put 'dGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJj'@;
put 'bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRh'@;
put 'MSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxSLkNs'@;
put 'clNoYXBlU3RyaWtldGhyb3VnaD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik03LjI3LDE1Ljg2'@;
put 'YTEyLjksMTIuOSwwLDAsMSwxLjI5LS41MkE1LjY5LDUuNjksMCwwLDEsMTAuMzksMTVhMy4xOCwzLjE4LDAsMCwxLDIuNzUsMS4xMUE0LjQ0LDQuNDQsMCwwLDEsMTQsMTguODV2LjQ5YTEzLjgzLDEzLjgzLDAsMCwwLTQuMjktLjc0LDYuMTksNi4xOSwwLDAsMC0yLjU5LjU0QTUsNSwwLDAs'@;
put 'MCw1LjgxLDIwSDE1Ljg4VjE4Ljg1YTUuNjcsNS42NywwLDAsMC0xLjM3LTQsNS4xNiw1LjE2LDAsMCwwLTQtMS40OSwxMCwxMCwwLDAsMC0zLjkxLjg4Ljg3Ljg3LDAsMCwwLS40NCwxLjE4QS44NC44NCwwLDAsMCw3LjI3LDE1Ljg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0'@;
put 'bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTIxLDIwYTUuOTQsNS45NCwwLDAsMSwuNTQtMi4zMSw0LjM1LDQuMzUsMCwwLDEsMS41OC0xLjgzLDQuMjcsNC4yNywwLDAsMSw0LjU5LDAsNC40Nyw0LjQ3LDAsMCwxLDEuNTcsMS44M0E2LjEyLDYuMTIsMCwwLDEsMjkuODUsMjBoMmE3Ljcz'@;
put 'LDcuNzMsMCwwLDAtLjc4LTMuMTksNiw2LDAsMCwwLTIuMTgtMi40NSw1Ljc0LDUuNzQsMCwwLDAtMy4xLS44OCw1LjM5LDUuMzksMCwwLDAtMi44LjczLDUuNTUsNS41NSwwLDAsMC0yLDIuMDVWMTBhLjg3Ljg3LDAsMCwwLS44Ni0uODZIMjBhLjg3Ljg3LDAsMCwwLS44Ni44NlYyMFoiIGNs'@;
put 'YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0yOS42NywyMmE1LjYxLDUuNjEsMCwwLDEtLjM2LDEuMDcsNC40Nyw0LjQ3LDAsMCwxLTEuNTcsMS44NSw0LjMyLDQuMzIsMCwwLDEtNC41OSwwLDQuMzUsNC4zNSwwLDAsMS0xLjU4LTEuODVB'@;
put 'NS42NCw1LjY0LDAsMCwxLDIxLjIsMjJIMTkuMDl2NC4xM0EuODcuODcsMCwwLDAsMjAsMjdoLjJhLjg3Ljg3LDAsMCwwLC44Ni0uODZWMjQuNTFhNS41OCw1LjU4LDAsMCwwLDIsMi4wNiw1LjQ4LDUuNDgsMCwwLDAsMi44LjcyLDUuNjYsNS42NiwwLDAsMCwzLjEtLjg4QTUuODgsNS44OCww'@;
put 'LDAsMCwzMS4wOSwyNCw3LjA5LDcuMDksMCwwLDAsMzEuNzMsMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICA8cGF0aCBkPSJNMTQsMjJ2Ljc2YTMuMzQsMy4zNCwwLDAsMS0xLjYyLDIsNS4zNCw1LjM0LDAsMCwxLTIuNjkuNzIsMy43OCwzLjc4'@;
put 'LDAsMCwxLTIuMzYtLjcsMi4yNCwyLjI0LDAsMCwxLS45NC0xLjksMi4yOSwyLjI5LDAsMCwxLC4yLS45MUg0LjYyYTQsNCwwLDAsMC0uMTMsMSwzLjgzLDMuODMsMCwwLDAsMS4zNSwzLjA2QTUuMTUsNS4xNSwwLDAsMCw5LjMxLDI3LjIsNiw2LDAsMCwwLDEyLDI2LjU3YTQuNjIsNC42Miww'@;
put 'LDAsMCwyLTEuNzRWMjZhLjg2Ljg2LDAsMCwwLC44Ni44NkgxNWEuODYuODYsMCwwLDAsLjg2LS44NlYyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksUi5DbHJTaGFwZVN1YnNjcmlwdD0oMCxiLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUs'@;
put 'MThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0x'@;
put 'LjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3'@;
put 'LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwyLjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40'@;
put 'OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgsMi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNz'@;
put 'PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksUi5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLGIuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0'@;
put 'LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjky'@;
put 'LS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQuNTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3'@;
put 'LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAsMCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCww'@;
put 'LDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNIMjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLFIuVGV4'@;
put 'dEVkaXRTaGFwZXM9e2JvbGQ6Ui5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpSLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6Ui5DbHJTaGFwZUNoZWNrYm94TGlzdCwibnVtYmVyLWxpc3QiOlIuQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOlIuQ2xyU2hhcGVG'@;
put 'b250U2l6ZSxpdGFsaWM6Ui5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpSLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0IjpSLkNsclNoYXBlQ2VudGVyVGV4dCwiYWxpZ24tbGVmdC10ZXh0IjpSLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6'@;
put 'Ui5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOlIuQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOlIuQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Ui5DbHJTaGFwZVRleHQsdW5kZXJsaW5lOlIuQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Ui5D'@;
put 'bHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpSLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Ui5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6Ui5DbHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOlIuQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxp'@;
put 'Z24tdG9wIjpSLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Ui5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpSLkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOlIuQ2xyU2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Ui5DbHJTaGFwZUluZGVudCxvdXRkZW50OlIuQ2xyU2hhcGVP'@;
put 'dXRkZW50LHN0cmlrZXRocm91Z2g6Ui5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0OlIuQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6Ui5DbHJTaGFwZVN1cGVyc2NyaXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMi'@;
put 'KSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoUi5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg'@;
put 'ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9m'@;
put 'dW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFIuVHJhdmVsU2hhcGVzPVIuQ2xyU2hhcGVPbkhvbGlkYXk9Ui5DbHJTaGFwZVRyYWlsZXI9Ui5DbHJTaGFwZUZlcnJ5PVIuQ2xyU2hhcGVDYXJhdmFu'@;
put 'PVIuQ2xyU2hhcGVDYW1wZXJ2YW49Ui5DbHJTaGFwZUJvYXQ9Ui5DbHJTaGFwZUJpY3ljbGU9Ui5DbHJTaGFwZU1hcE1hcmtlcj1SLkNsclNoYXBlQ29tcGFzcz1SLkNsclNoYXBlTWFwPVIuQ2xyU2hhcGVDYXI9Ui5DbHJTaGFwZUFpcnBsYW5lPVIuQ2xyU2hhcGVUcnVjaz12b2lkIDA7dmFy'@;
put 'IGI9ZWUoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxtPWVlKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10'@;
put 'YWctZ2VuZXJhdG9yLnRzIik7Ui5DbHJTaGFwZVRydWNrPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRW'@;
put 'OEgyNFYxOS43YTYuNDUsNi40NSwwLDAsMSwxLjU2LS4yYy4xNSwwLC4yOSwwLC40NCwwVjE0aDRhMiwyLDAsMCwxLDIsMnYxSDI4djJoNHY1SDI5LjZhNC41NCw0LjU0LDAsMCwwLTguMzQsMEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZI'@;
put 'MjFhNC40OSw0LjQ5LDAsMCwwLDguOTIsMEgzM2ExLDEsMCwwLDAsMS0xVjE2QTQsNCwwLDAsMCwzMCwxMlpNMTAuMjYsMjhhMi4zOCwyLjM4LDAsMSwxLDAtNC43NSwyLjM4LDIuMzgsMCwxLDEsMCw0Ljc1Wm0xNS4xNywwYTIuMzgsMi4zOCwwLDEsMSwyLjUtMi4zN0EyLjQ0LDIuNDQsMCww'@;
put 'LDEsMjUuNDMsMjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzAsMTJIMjZWN2ExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsN1YyNWExLDEsMCwwLDAsMSwxSDRWOEgyNFYyMS40OUE0LjQ1LDQuNDUsMCwwLDAs'@;
put 'MjEuMjUsMjRIMTQuNDNhNC41LDQuNSwwLDAsMC00LjE3LTIuNzZBNC4zOCw0LjM4LDAsMSwwLDE0LjcyLDI2SDIxYTQuNDgsNC40OCwwLDAsMCw4LjkxLDBIMzRWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEsMSwwLDQu'@;
put 'NzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MiwyOFpNMzIsMTdIMjZWMTRoNGEyLDIsMCwwLDEsMiwyWiIvPicpLFIuQ2xyU2hhcGVBaXJwbGFuZT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt'@;
put 'aS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM1Ljc3LDguMTZhMi40MywyLjQzLDAsMCwwLTEuOS0yTDI4LDQuODdhNC41LDQuNSwwLDAsMC0zLjY1Ljc5TDcsMTguMywyLjE0LDE4LjFBMS44NiwxLjg2LDAsMCwwLC45MSwyMS40MWw1LDMuOTNjLjYuNzMsMSwuNTksMTAuOTMtNC44MmwuOTMsOS40'@;
put 'MmExLjM2LDEuMzYsMCwwLDAsLjg1LDEuMTgsMS40MywxLjQzLDAsMCwwLC41NC4xLDEuNTQsMS41NCwwLDAsMCwxLS40MWwyLjM5LTIuMThhMS41MiwxLjUyLDAsMCwwLC40Ni0uODNMMjUuMiwxNS45YzMuNTctMiw2Ljk1LTMuODgsOS4zNi01LjI1QTIuNDMsMi40MywwLDAsMCwzNS43Nyw4'@;
put 'LjE2Wm0tMi4yLjc1Yy0yLjUsMS40Mi02LDMuNDEtOS43Niw1LjQ3bC0uNDEuMjNMMjEuMDcsMjcuMjhsLTEuNDcsMS4zNEwxOC41LDE3LjMyLDE3LjE3LDE4QzEwLDIyLDcuNjEsMjMuMTYsNi43OSwyMy41MmwtNC4zLTMuNDEsNS4wOC4yMiwxOC0xMy4wNmEyLjUxLDIuNTEsMCwwLDEsMi0u'@;
put 'NDVsNS44NSwxLjI2YS40My40MywwLDAsMSwuMzUuMzdBLjQyLjQyLDAsMCwxLDMzLjU3LDguOTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTcsMTIuNTRsMy41NiwxLDEuNjQtMS4xOS00LTEuMTZMMTAsMTAu'@;
put 'MDlsNS40Ny0uMTYsMi4zLTEuNjdMMTAsOC41YTEuMjUsMS4yNSwwLDAsMC0uNy4xN0w2LjY3LDEwLjJBMS4yOCwxLjI4LDAsMCwwLDcsMTIuNTRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNi4yNSwxMS41LDEyLDEz'@;
put 'LjE2bDYuMzItNC41OS05LjA3LjI2QS41Mi41MiwwLDAsMCw5LDguOTFMNi4xMywxMC41NkEuNTEuNTEsMCwwLDAsNi4yNSwxMS41WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTM0LjUyLDYuMzYsMjguMjIsNWEzLjc4'@;
put 'LDMuNzgsMCwwLDAtMy4wNy42N0w2LjEyLDE5LjVsLTQuNTctLjJhMS4yNSwxLjI1LDAsMCwwLS44MywyLjIybDQuNDUsMy41M2EuNTUuNTUsMCwwLDAsLjUzLjA5YzEuMjctLjQ5LDYtMywxMS41OS02LjA3bDEuMTIsMTEuNTFhLjU1LjU1LDAsMCwwLC45LjM3bDIuNS0yLjA4YS43Ni43Niww'@;
put 'LDAsMCwuMjYtLjQ1bDIuMzctMTMuMjljNC0yLjIyLDcuODItNC4zNywxMC41MS01Ljg5QTEuNTUsMS41NSwwLDAsMCwzNC41Miw2LjM2WiIvPicpLFIuQ2xyU2hhcGVDYXI9KDAsbS5jbHJJY29uU1ZHKSgnPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi'@;
put 'IHg9IjE1IiB5PSIxNyIgd2lkdGg9IjMiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYuNDUsMTQuMTdBMjIuMSwyMi4xLDAsMCwwLDE5LjM4LDdhOS42NCw5LjY0LDAsMCwwLTktLjcs'@;
put 'OC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ3LS4xNC45Mi0uMiwxLjM2QTQsNCwwLDAsMCwyLDE4djYuMTNhMiwyLDAsMCwwLDIsMlYyMEg0VjE4YTIsMiwwLDAsMSwyLTJIMjQuNzNBNy4yOCw3LjI4LDAsMCwxLDMyLDIzLjI3VjI0aC0yYTQuNTMsNC41MywwLDEsMCwuMzMsMkgzMmEy'@;
put 'LDIsMCwwLDAsMi0ydi0uNzNBOS4yOCw5LjI4LDAsMCwwLDI2LjQ1LDE0LjE3Wk0xMSwxNEg2LjkzYzAtLjMxLjA5LS42My4xNS0xQTYuNTIsNi41MiwwLDAsMSwxMSw4aDBabTIsMFY3LjU4YTguMTcsOC4xNywwLDAsMSw1LjM2LDEuMTZBMTksMTksMCwwLDEsMjMuOSwxNFpNMjUuOCwyOC4z'@;
put 'OGEyLjUsMi41LDAsMSwxLDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNS44LDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuMTcsMjRhNC41Myw0LjUzLDAsMSwwLC4zMywyaDUuM2MwLS4wOCww'@;
put 'LS4xNywwLS4yNUE2LDYsMCwwLDEsMjAsMjRaTTEwLDI4LjM4YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLDI4LjM4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNi44NywxNC4yOEEy'@;
put 'Mi4zNiwyMi4zNiwwLDAsMCwxOS42NSw2LjlhOS42NCw5LjY0LDAsMCwwLTktLjcsOC42LDguNiwwLDAsMC00LjgyLDYuNGMtLjA4LjQ5LS4xNSwxLS4yMSwxLjRoLTFBMi41OSwyLjU5LDAsMCwwLDIsMTYuNTl2OC41NWEuODYuODYsMCwwLDAsLjg2Ljg2SDQuNTljMC0uMTMsMC0uMjYsMC0u'@;
put 'MzlhNS43Nyw1Ljc3LDAsMCwxLDcuNzEtNS40NWwtMSwxYTQuNTYsNC41NiwwLDAsMC00LjM0LDEuNTgsMywzLDAsMCwwLS42My45M0E0LjUsNC41LDAsMSwwLDE0LjgyLDI2aDUuNDhjMC0uMTMsMC0uMjYsMC0uMzlBNS43Nyw1Ljc3LDAsMCwxLDI4LDIwLjE2bC0xLDFhNC41Niw0LjU2LDAs'@;
put 'MCwwLTQuMzQsMS41OCwzLDMsMCwwLDAtLjYzLjkzQTQuNSw0LjUsMCwxLDAsMzAuNTMsMjZoMi42MWEuODYuODYsMCwwLDAsLjg2LS44NlYyMy4zNkE5LjM5LDkuMzksMCwwLDAsMjYuODcsMTQuMjhaTTEyLDE0SDhjMC0uMzUuMS0uNzEuMTYtMS4wN2E2LjUyLDYuNTIsMCwwLDEsMy44Ny01'@;
put 'aDBaTTEwLjM2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDEwLjM2LDI4LjM2Wk0xOSwxOUgxNlYxN2gzWm0tNi01VjcuNDdhOC4xNiw4LjE2LDAsMCwxLDUuNCwxLjE1QTE5LjE1LDE5LjE1LDAsMCwxLDI0LDE0Wk0yNi4wNiwyOC4zNmEyLjUsMi41LDAsMSwx'@;
put 'LDIuNS0yLjVBMi41LDIuNSwwLDAsMSwyNi4wNiwyOC4zNloiLz4nKSxSLkNsclNoYXBlTWFwPSgwLG0uY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuNTksNi4xOUExLDEsMCwwLDAsMzIuNyw2TDIzLjA5LDksMTMu'@;
put 'NDYsNC4xMWExLDEsMCwwLDAtLjg0LDBMMi42Miw4LjJBMSwxLDAsMCwwLDIsOS4xM1YyOS42MWExLDEsMCwwLDAsMS4zOC45MkwxMywyNi41OGw5LjU5LDQuOTJhMSwxLDAsMCwwLC40Ni4xMSwxLDEsMCwwLDAsLjMsMGwxMC0zLjEyYTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLjU5'@;
put 'LDYuMTlaTTMyLDI2Ljc1bC04LjMyLDIuNlYyNy4wNmgtMS42djJsLTguNC00LjMxVjIzLjA2aC0xLjZ2MS43Mkw0LDI4LjExVjkuNzlsOC4wOC0zLjMzVjguODFoMS42VjYuNDdsOC40LDQuM3YyLjFoMS42VjExTDMyLDguMzZaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNs'@;
put 'ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHg9IjIyLjA4IiB5PSIxNS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIHg9IjIyLjA4IiB5PSIyMS4w'@;
put 'NiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIHg9IjEyLjA4IiB5PSIxMS4wNiIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjgxIi8+XG4gICAgICAgICAgICAgICAgPHJl'@;
put 'Y3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjEyLjA4IiB5PSIxNy4xMyIgd2lkdGg9IjEuNiIgaGVpZ2h0PSIzLjc1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMzLjMx'@;
put 'LDcuMzUsMjUsOS45NFYxNEgyM1YxMC4yOUwxNCw1LjY4VjlIMTJWNS4yN2wtOS42Nyw0QS41My41MywwLDAsMCwyLDkuNzVWMzAuNDVhLjUzLjUzLDAsMCwwLC43NC40OUwxMiwyNy4xMlYyM2gydjQuNTNsOSw0LjYxVjI4aDJ2My43OWw4LjYzLTIuN2EuNTMuNTMsMCwwLDAsLjM3LS41MVY3'@;
put 'Ljg2QS41My41MywwLDAsMCwzMy4zMSw3LjM1Wk0xNCwyMUgxMlYxN2gyWm0wLTZIMTJWMTFoMlpNMjUsMjZIMjNWMjJoMlptMC02SDIzVjE2aDJaIi8+JyksUi5DbHJTaGFwZUNvbXBhc3M9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIwLjgyLDE1LjMxaDBMMTAuNDYsOWMtLjQ2LS4y'@;
put 'Ni0xLjExLjM3LS44Ni44NGw2LjE1LDEwLjU2LDEwLjU2LDYuMTVhLjY2LjY2LDAsMCwwLC44NC0uODZabS00LDQsMy0zLDQuNTUsNy40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwx'@;
put 'LDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMSwyOS45NVYyOS41M0gxN3YyLjQyQTE0LDE0LDAsMCwxLDQuMDUsMTlINi40N1YxN0g0LjA1QTE0LDE0LDAsMCwxLDE3LDQuMDVWNi40N2gyVjQuMDVBMTQsMTQsMCwwLDEsMzEuOTUsMTdIMjkuNTN2MmgyLjQyQTE0LDE0LDAsMCwxLDE5LDMx'@;
put 'Ljk1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk02LjQ3LDE5SDQuMDVjMC0uMzMtLjA1LS42Ni0uMDUtMXMwLS42Ny4wNS0xSDYuNDda'@;
put 'TTE3LDQuMDVjLjMzLDAsLjY2LS4wNSwxLS4wNXMuNjcsMCwxLC4wNVY2LjQ3SDE3Wm0yLDI3LjljLS4zMywwLS42Ni4wNS0xLC4wNXMtLjY3LDAtMS0uMDVWMjkuNTNoMlptOC01LjU4YS41OS41OSwwLDAsMS0uNjkuMTZMMTUuNzUsMjAuMzgsOS42LDkuODJjLS4yNS0uNDcuMzktMS4xLjg2'@;
put 'LS44NGwxMC4zNyw2LjMzaDBsNi4zMywxMC4zN0EuNTkuNTksMCwwLDEsMjcsMjYuMzdaTTI5LjUzLDE5VjE3aDIuNDJjMCwuMzMuMDUuNjYuMDUsMXMwLC42Ny0uMDUsMVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cG9seWdvbiBw'@;
put 'b2ludHM9IjE2Ljc3IDE5LjM1IDI0LjM1IDIzLjc3IDE5LjggMTYuMzMgMTYuNzcgMTkuMzUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZU1hcE1hcmtlcj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj'@;
put 'bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxw'@;
put 'YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMkExMS43OSwxMS43OSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIs'@;
put 'OTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQTExLjc5LDExLjc5LDAsMCwwLDE4LDJaTTIzLjU5LDI0bC0uMzYuNTNjLTEuNzIsMi41OC00LDUuNDctNS4yMyw2LjktMS4xOC0xLjQzLTMuNTEtNC4zMi01LjIzLTYuOUwxMi40MiwyNGMt'@;
put 'MS43Ny0yLjY0LTQuMi02LjI1LTQuMi0xMC4zMWE5Ljc4LDkuNzgsMCwxLDEsMTkuNTYsMEMyNy43OCwxNy43OSwyNS4zNiwyMS40LDIzLjU5LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJh'@;
put 'ZGdlZCIgZD0iTTE4LDYuNzJhNS43Myw1LjczLDAsMSwwLDUuNzMsNS43M0E1LjczLDUuNzMsMCwwLDAsMTgsNi43MlptMCw5LjQ2YTMuNzMsMy43MywwLDEsMSwzLjczLTMuNzNBMy43MywzLjczLDAsMCwxLDE4LDE2LjE3WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5YTcuNDksNy40OSwwLDAsMS0yLS4zM2MwLC4xOSwwLC4zOCwwLC41NywwLDQuMDYtMi40Miw3LjY3LTQuMTksMTAuMzFsLS4zNi41M2MtMS43MiwyLjU4LTQsNS40Ny01LjIzLDYu'@;
put 'OS0xLjE4LTEuNDMtMy41MS00LjMyLTUuMjMtNi45TDEyLjQyLDI0Yy0xLjc3LTIuNjQtNC4yLTYuMjUtNC4yLTEwLjMxQTkuNzcsOS43NywwLDAsMSwyMi41Niw1LjA5YTcuNDUsNy40NSwwLDAsMSwuNTItMkExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgs'@;
put 'NC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4zNS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAg'@;
put 'ICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiBjeD0iMzAiIGN5PSI2IiByPSI1Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv'@;
put 'bGlkLXBhdGgtMSIgZD0iTTE4LDJBMTEuNzksMTEuNzksMCwwLDAsNi4yMiwxMy43M2MwLDQuNjcsMi42Miw4LjU4LDQuNTQsMTEuNDNsLjM1LjUyYTk5LjYxLDk5LjYxLDAsMCwwLDYuMTQsOGwuNzYuODkuNzYtLjg5YTk5LjgyLDk5LjgyLDAsMCwwLDYuMTQtOGwuMzUtLjUzYzEuOTEtMi44'@;
put 'NSw0LjUzLTYuNzUsNC41My0xMS40MkExMS43OSwxMS43OSwwLDAsMCwxOCwyWm0wLDE3YTYuNTYsNi41NiwwLDEsMSw2LjU2LTYuNTZBNi41Niw2LjU2LDAsMCwxLDE4LDE5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt'@;
put 'MiIgY3g9IjE4IiBjeT0iMTIuNDQiIHI9IjMuNzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWJhZGdlZCIgZD0iTTI5Ljc3LDEzLjQ5QTcuNDcsNy40NywwLDAsMSwyNC4zOCwxMWE2LjU4LDYuNTgsMCwx'@;
put 'LDEtMS42MS0zLDcuNDIsNy40MiwwLDAsMSwuMzEtNC44NEExMS43NSwxMS43NSwwLDAsMCw2LjIyLDEzLjczYzAsNC42NywyLjYyLDguNTgsNC41NCwxMS40M2wuMzUuNTJhOTkuNjEsOTkuNjEsMCwwLDAsNi4xNCw4bC43Ni44OS43Ni0uODlhOTkuODIsOTkuODIsMCwwLDAsNi4xNC04bC4z'@;
put 'NS0uNTNjMS45MS0yLjg1LDQuNTMtNi43NSw0LjUzLTExLjQyQzI5Ljc4LDEzLjY1LDI5Ljc3LDEzLjU3LDI5Ljc3LDEzLjQ5WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiIGN4PSIxOCIg'@;
put 'Y3k9IjEyLjQ0IiByPSIzLjczIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLFIuQ2xyU2hhcGVCaWN5Y2xlPSgwLG0uY2xy'@;
put 'SWNvblNWRykoJzxwYXRoIGQ9Ik04LjUsMjkuNjVBNi41MSw2LjUxLDAsMCwxLDIsMjMuMTVhNi4zOSw2LjM5LDAsMCwxLDYuNS02LjM2QTYuMzksNi4zOSwwLDAsMSwxNSwyMy4xNSw2LjUxLDYuNTEsMCwwLDEsOC41LDI5LjY1Wm0wLTExYTQuNSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQu'@;
put 'NTEsMCwwLDAsOC41LDE4LjY1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI3LjUsMjkuNjVhNi41MSw2LjUxLDAsMCwxLTYuNS02LjUsNi41LDYuNSwwLDAsMSwxMywwQTYuNTEsNi41MSwwLDAsMSwyNy41LDI5LjY1Wm0wLTExYTQu'@;
put 'NSw0LjUsMCwxLDAsNC41LDQuNUE0LjUxLDQuNTEsMCwwLDAsMjcuNSwxOC42NVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOSwyNC42Nkg4YTEsMSwwLDAsMS0uODktMS40NWw1LTEwLDEuNzguOUw5LjYyLDIyLjczSDE5WiIgY2xh'@;
put 'c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHJlY3QgeD0iMTMiIHk9IjEyLjY4IiB3aWR0aD0iMTEiIGhlaWdodD0iMS45MSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI4LDI0LjY2YTEsMSwwLDAsMS0u'@;
put 'OTQtLjY2TDIyLjI5LDEwLjY2SDIwYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtLjkzaDNhLjk0Ljk0LDAsMCwxLC45NC42bDUsMTRhMSwxLDAsMCwxLS42LDEuMjdBMSwxLDAsMCwxLDI4LDI0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBh'@;
put 'dGggZD0iTTEzLDE0LjY2YTEsMSwwLDAsMS0uNzEtLjI5bC0xLjctMS43MUg4YTEsMSwwLDAsMS0xLTEsLjk0Ljk0LDAsMCwxLDEtMWgzYTEuMDgsMS4wOCwwLDAsMSwuNzUuMjdsMiwyYTEsMSwwLDAsMSwwLDEuNDFBMSwxLDAsMCwxLDEzLDE0LjY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUg'@;
put 'Y2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTE1LDIxLjljLTAuMi0yLTEuMi0zLjgtMi45LTQuOWwtMi41LDQuOUgxNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTcuMiwyMy40Yy0wLjItMC4zLTAuMi0wLjcsMC0xbDMuMi02'@;
put 'LjNjLTAuNi0wLjItMS4yLTAuMi0xLjgtMC4yQzUsMTUuOSwyLDE4LjgsMiwyMi40YzAsMy42LDIuOSw2LjUsNi41LDYuNVxuXHRjMywwLDUuNi0yLjEsNi4zLTVIOEM3LjcsMjMuOSw3LjMsMjMuNyw3LjIsMjMuNHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+'@;
put 'PHBhdGggZD0iTTE5LDIxLjloLTRjMCwwLjIsMCwwLjMsMCwwLjVjMCwwLjUtMC4xLDEtMC4yLDEuNUgxOVYyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz48cGF0aCBkPSJNMjcuNSwxNS45Yy0wLjMsMC0wLjYsMC0wLjksMC4xbDIuNCw2LjZjMC4yLDAu'@;
put 'NS0wLjEsMS4xLTAuNiwxLjNjLTAuMSwwLTAuMiwwLjEtMC4zLDAuMWMtMC40LDAtMC44LTAuMy0wLjktMC43bC0yLjQtNi43XG5cdGMtMy4yLDEuNi00LjUsNS41LTMsOC43YzEuNiwzLjIsNS41LDQuNSw4LjcsM2MzLjItMS42LDQuNS01LjUsMy04LjdDMzIuMiwxNy4zLDMwLDE1LjksMjcu'@;
put 'NSwxNS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cGF0aCBkPSJNMjQuNywxNi43YzAuNi0wLjMsMS4zLTAuNSwxLjktMC42bC0yLjctNy40QzIzLjgsOC4yLDIzLjQsOCwyMyw3LjloLTNjLTAuNiwwLTEsMC41LTEsMS4xYzAsMC41LDAuNCwwLjksMSww'@;
put 'Ljlcblx0YzAsMCwwLDAsMCwwaDIuM2wwLjcsMmgtOS42bC0xLjctMS43QzExLjUsMTAuMSwxMS4zLDEwLDExLDEwSDhjLTAuNiwwLTEsMC40LTEsMXMwLjQsMSwxLDFoMi42bDEuMiwxLjJsLTEuNSwzXG5cdGMwLjYsMC4yLDEuMywwLjUsMS44LDAuOGwxLjYtMy4yaDEwTDI0LjcsMTYuN3oi'@;
put 'IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTUiIC8+JyksUi5DbHJTaGFwZUJvYXQ9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjEsMjcuMUMyOCwyNywyNi45LDI3LjQsMjYsMjguMmMtMS4xLDEuMS0yLjksMS4xLTQuMSwwYy0xLTAuNy0yLjEtMS4xLTMuMy0x'@;
put 'LjFjLTEuMi0wLjEtMi40LDAuMy0zLjMsMS4xXG5cdFx0QzE0LjcsMjguNywxNCwyOSwxMy4yLDI5cy0xLjUtMC4zLTIuMS0wLjhjLTEtMC44LTIuMi0xLjItMy40LTEuMnMtMi40LDAuNC0zLjQsMS4yQzMuNywyOC43LDIuOCwyOSwyLDI5djJcblx0XHRjMS4zLDAuMSwyLjYtMC4zLDMuNi0x'@;
put 'LjJDNi4yLDI5LjMsNy4xLDI5LDcuOSwyOWMwLjcsMCwxLjUsMC4zLDIuMSwwLjhjMS44LDEuNiw0LjYsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44XG5cdFx0YzAuNywwLDEuNCwwLjMsMiwwLjhjMS45LDEuNiw0LjYsMS42LDYuNSwwYzAuNS0wLjUsMS4zLTAuOCwyLTAuOGMw'@;
put 'LjcsMCwxLjQsMC4zLDEuOSwwLjhjMC45LDAuNywxLjksMS4xLDMsMS4ydi0yXG5cdFx0Yy0xLDAtMS4yLTAuNC0xLjctMC44QzMxLjQsMjcuNSwzMC4zLDI3LjEsMjkuMSwyNy4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMjNj'@;
put 'MC0wLjYsMC41LTEsMS4xLTFIMzJsLTMuNSwzLjFoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJjMC43LTAuOCwwLjYtMi4xLTAuMi0yLjhcblx0XHRDMzMsMjAuMiwzMi42LDIwLDMyLjEsMjBoLTI1Yy0xLjcsMC0zLDEuMy0zLDN2My4yYzAuNS0wLjUsMS4yLTAu'@;
put 'OCwxLjktMS4xVjIzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTguOSwxOUgxNXYtNy44YzAtMC42LTAuMy0xLjItMC44LTEuNkMxMy4zLDguOSwxMiw5LjEsMTEuNCwxMGwtNC4xLDUuOWMtMC40LDAuNi0wLjQsMS40LTAuMSwyLjFD'@;
put 'Ny41LDE4LjYsOC4yLDE5LDguOSwxOVxuXHRcdHogTTEzLjEsMTEuMkwxMywxN0g4LjlMMTMuMSwxMS4yeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI2LDE4YzAuNC0wLjYsMC40LTEuNCwwLTJMMTkuNyw1LjZjLTAuNC0wLjYtMS0x'@;
put 'LTEuNy0xYy0xLjEsMC0yLDAuOS0yLDJWMTloOC4zQzI1LDE5LDI1LjcsMTguNiwyNiwxOHogTTE3LjksNi42XG5cdFx0bDYuNCwxMC41aC02LjRWNi42eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTM0LDMxYy0xLjEtMC4xLTIuMS0w'@;
put 'LjUtMy0xLjJjLTAuNS0wLjUtMS4yLTAuOC0yLTAuOGMtMC43LDAtMS41LDAuMy0yLDAuOGMtMC45LDAuOC0yLDEuMS0zLjEsMS4xYy0xLjIsMC0yLjQtMC40LTMuMy0xLjFcblx0Yy0xLjItMS4xLTMtMS4xLTQuMSwwYy0wLjksMC44LTIuMSwxLjItMy40LDEuMmMtMS4yLDAtMi4zLTAuNC0z'@;
put 'LjItMS4yYy0wLjYtMC41LTEuMy0wLjgtMi0wLjhjLTAuOCwwLTEuNywwLjMtMi4zLDAuOFxuXHRjLTEsMC44LTIuMywxLjItMy41LDEuMVYyOWMwLjgsMCwxLjctMC4zLDIuMy0wLjljMS0wLjgsMi4yLTEuMiwzLjQtMS4xYzEuMiwwLDIuNCwwLjQsMy4zLDEuMmMxLjIsMS4xLDMsMS4xLDQu'@;
put 'MiwwXG5cdGMxLjktMS42LDQuNy0xLjYsNi41LDBjMS4yLDEuMSwzLDEuMSw0LjEsMGMwLjktMC44LDIuMS0xLjIsMy4zLTEuMmMxLjEsMCwyLjIsMC40LDMsMS4yQzMyLjgsMjguNywzMywyOSwzNCwyOUwzNCwzMXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+'@;
put 'PHBhdGggZD0iTTQuMSwyNi4yYzAuNi0wLjUsMS4yLTAuOCwxLjktMVYyM2MwLTAuNiwwLjQtMS4xLDEtMS4xaDI1TDI4LjQsMjVoMC4yYzAuOCwwLDEuNiwwLjIsMi4yLDAuNWwyLjUtMi4ybDAuMi0wLjJcblx0YzAuNy0wLjksMC41LTIuMS0wLjQtMi44QzMyLjksMjAuMSwzMi40LDIwLDMy'@;
put 'LDIwSDdjLTEuNywwLTMsMS4zLTMsM0w0LjEsMjYuMkw0LjEsMjYuMnoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTE0LjksMTguOUg4LjljLTEuMSwwLTItMC45LTItMmMwLTAuNCwwLjEtMC44LDAuNC0xLjJsNC4xLTUuOGMwLjYtMC45LDEu'@;
put 'OS0xLjEsMi44LTAuNWMwLjUsMC40LDAuOCwxLDAuOCwxLjZWMTguOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LjMsMTguOUgxNlY2LjRjMC0xLjEsMC45LTIsMi0yYzAuNywwLDEuMywwLjQsMS43LDFMMjYsMTUuOGMwLjYsMSwwLjIs'@;
put 'Mi4yLTAuNywyLjdDMjUsMTguNywyNC42LDE4LjgsMjQuMywxOC45XG5cdEwyNC4zLDE4Ljl6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLFIuQ2xyU2hhcGVDYW1wZXJ2YW49KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTkuNSwyNEM5LjUsMjQsOS41'@;
put 'LDI0LDkuNSwyNEM3LjYsMjQsNiwyNS42LDYsMjcuNWMwLDAsMCwwLDAsMEM2LDI5LjQsNy42LDMxLDkuNSwzMWMxLjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMTEuNCwyNCw5LjUsMjR6IE05LjUsMjlDOC43LDI5LDgsMjguMyw4LDI3LjVTOC43LDI2LDkuNSwyNnMxLjUsMC43LDEuNSwx'@;
put 'LjVTMTAuMywyOSw5LjUsMjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMjMuNSwyNEMyMy41LDI0LDIzLjUsMjQsMjMuNSwyNGMtMS45LDAtMy41LDEuNi0zLjUsMy41YzAsMCwwLDAsMCwwYzAsMS45LDEuNSwzLjUsMy41LDMuNWMx'@;
put 'LjksMCwzLjUtMS42LDMuNS0zLjVcblx0XHRTMjUuNCwyNCwyMy41LDI0eiBNMjMuNSwyOWMtMC44LDAtMS41LTAuNy0xLjUtMS41czAuNy0xLjUsMS41LTEuNXMxLjUsMC43LDEuNSwxLjVTMjQuMywyOSwyMy41LDI5eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo'@;
put 'LTIiIC8+PHBhdGggZD0iTTMzLDIwLjFWMjBoLTAuMWwtMy41LTUuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjNWOS43QzMyLDcuMSwyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzXG5cdFx0djE3aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEw'@;
put 'LjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMwLDEuNS0xLjIsMi43LTIuNywyLjdIMjR2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDMzLDIwLjF6IE0y'@;
put 'NiwyMHYtNWgxLjVsMy4xLDVIMjZ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cmVjdCB4PSIxOSIgeT0iOSIgd2lkdGg9IjgiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBvbHlnb24gcG9p'@;
put 'bnRzPSIyMCwyMiAyMiwyMiAyMiwxMyAxNSwxMyAxNSwyOCAxNywyOCAxNywxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTYsMjBoN3YtN0g2VjIweiBNOCwxNWgzdjNIOFYxNXoiIGNsYXNzPSJjbHItaS1vdXRsaW5l'@;
put 'IGNsci1pLW91dGxpbmUtcGF0aC02IiAvPjxwYXRoIGQ9Ik05LjUsMjRDNy42LDI0LDYsMjUuNiw2LDI3LjVTNy42LDMxLDkuNSwzMWMwLDAsMCwwLDAsMGMxLjksMCwzLjUtMS42LDMuNS0zLjVjMCwwLDAtMC4xLDAtMC4xQzEzLDI1LjUsMTEuNCwyNCw5LjUsMjR6IlxuXHRcdCBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxjaXJjbGUgY3g9IjIzLjUiIGN5PSIyNy41IiByPSIzLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+PHBhdGggZD0iTTI5LjUsMTQuNUMzMSwxMy42LDMyLDEyLDMyLDEwLjJWOS43YzAsMCwwLDAs'@;
put 'MC0wLjFDMzIsNywyOS45LDUsMjcuMyw1aC04LjVjLTEuOSwwLTMuNywxLjItNC40LDNINWMtMS43LDAtMywxLjMtMywzdjE3XG5cdFx0aDJWMTFjMC0wLjYsMC40LTEsMS0xaDEwLjlMMTYsOS4yQzE2LjMsNy45LDE3LjQsNywxOC43LDdoOC41QzI4LjgsNywzMCw4LjIsMzAsOS43djAuNWMw'@;
put 'LDEuNS0xLjIsMi43LTIuNywyLjdIMjdoLTN2OWg3Ljhcblx0XHRsMC4yLDAuM1YyNWMwLDAuNi0wLjQsMS0xLDFoLTJ2MmgyYzEuNywwLDMtMS4zLDMtM3YtMy4zTDI5LjUsMTQuNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHJlY3QgeD0iMTkiIHk9Ijki'@;
put 'IHdpZHRoPSI3LjkiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgLz48cG9seWdvbiBwb2ludHM9IjIwLDIyIDIxLjksMjIgMjEuOSwxMyAxNSwxMyAxNSwyOCAxNi45LDI4IDE2LjksMTUgMjAsMTUgXHQiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt'@;
put 'aS1zb2xpZC1wYXRoLTUiIC8+PHJlY3QgeD0iNiIgeT0iMTMiIHdpZHRoPSI2LjkiIGhlaWdodD0iNyIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNiIgLz4nKSxSLkNsclNoYXBlQ2FyYXZhbj0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTMuNSwyMUMxMSwyMSw5'@;
put 'LDIzLDksMjUuNXMyLDQuNSw0LjUsNC41YzIuNSwwLDQuNS0yLDQuNS00LjVDMTgsMjMsMTYsMjEsMTMuNSwyMXogTTEzLjUsMjhjLTEuNCwwLTIuNS0xLjEtMi41LTIuNVxuXHRcdHMxLjEtMi41LDIuNS0yLjVzMi41LDEuMSwyLjUsMi41UzE0LjksMjgsMTMuNSwyOHoiIGNsYXNzPSJjbHIt'@;
put 'aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEuNUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdFx0Yy0wLjYs'@;
put 'MC0xLTAuNC0xLTFWOWMwLTAuNiwwLjQtMSwxLTFoMTguOGMwLjQsMCwwLjcsMC4yLDAuOSwwLjVsNC4yLDcuNWMwLjEsMC4xLDAuMSwwLjMsMC4xLDAuNVYyNGgtNFYxMmgtN3Y4aDJ2LTZoM3YxMGgtM3YyaDEzXG5cdFx0YzAuNiwwLDEtMC40LDEtMVMzMy42LDI0LDMzLDI0eiIgY2xhc3M9'@;
put 'ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTE2LDEySDd2Nmg5VjEyeiBNMTQsMTZIOXYtMmg1VjE2eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTEzLjUsMzBDMTEsMzAsOSwyOCw5LDI1LjVz'@;
put 'Mi00LjUsNC41LTQuNXM0LjUsMiw0LjUsNC41QzE4LDI4LDE2LDMwLDEzLjUsMzB6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMywyNGgtMnYtNy41YzAtMC41LTAuMS0xLTAuNC0xLjVsLTQuMi03LjVjLTAuNS0xLTEuNS0xLjUtMi42LTEu'@;
put 'NUg1QzMuMyw2LDIsNy4zLDIsOXYxNGMwLDEuNywxLjMsMywzLDNoMnYtMkg1XG5cdGMtMC42LDAtMS0wLjQtMS0xVjljMC0wLjYsMC40LTEsMS0xaDE4LjhjMC40LDAsMC43LDAuMiwwLjksMC41bDQuMiw3LjVjMC4xLDAuMSwwLjEsMC4zLDAuMSwwLjVWMjRoLTRWMTJoLTd2OGgydi02aDN2'@;
put 'MTBoLTN2MmgxM1xuXHRjMC42LDAsMS0wLjQsMS0xUzMzLjYsMjQsMzMsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNiwxOEg3di02aDlWMTh6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLFIuQ2xy'@;
put 'U2hhcGVGZXJyeT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMjUuMWMtMS4yLDAtMi4zLDAuNC0zLjMsMS4xYzAsMCwwLDAsMCwwYy0xLjEsMS4xLTMsMS4xLTQuMSwwYy0wLjktMC44LTIuMS0xLjItMy4zLTEuMmMtMS4yLDAtMi4zLDAuNC0zLjIsMS4yXG5cdFx0Yy0xLjIsMS4x'@;
put 'LTMsMS4xLTQuMiwwQzEwLDI1LjQsOC44LDI1LDcuNiwyNWMtMS4yLDAtMi40LDAuNC0zLjQsMS4xQzMuNiwyNi43LDIuOCwyNywyLDI3djJjMS4zLDAuMSwyLjUtMC40LDMuNC0xLjJcblx0XHRDNi4xLDI3LjMsNi45LDI3LDcuNywyN2MwLjgsMCwxLjUsMC4zLDIuMSwwLjhjMS45LDEuNiw0'@;
put 'LjcsMS42LDYuNSwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOFxuXHRcdGMxLjksMS42LDQuNiwxLjYsNi41LDBjMC41LTAuNSwxLjMtMC44LDItMC44YzAuNywwLDEuNSwwLjMsMiwwLjhjMC45LDAuNywyLDEuMSwzLjEsMS4ydi0xLjljLTAuNywwLTEu'@;
put 'NC0wLjMtMS45LTAuOVxuXHRcdEMzMS4zLDI1LjQsMzAuMSwyNSwyOSwyNS4xeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTUuOSwyMy4yVjIwSDMybC0zLjUsM2gwLjJjMC44LDAsMS42LDAuMiwyLjIsMC41bDIuNS0yLjJsMC4yLTAu'@;
put 'MmMwLjUtMC42LDAuNS0xLjQsMC4yLTIuMWMtMC40LTAuNy0xLTEtMS44LTFoLTQuNFxuXHRcdEwyMi41LDExSDE3Yy0xLjcsMC0zLDEuMy0zLDNoLTJWOC4xSDZ2Ni4xYy0xLjIsMC40LTIsMS41LTIsMi44djEuMVYyMHY0LjNsMC4xLTAuMUM0LjYsMjMuNyw1LjIsMjMuNCw1LjksMjMuMnog'@;
put 'TTgsMTBoMnY0SDhWMTB6XG5cdFx0IE02LDE3YzAtMC42LDAuNC0xLDEtMWg5di0yYzAtMC42LDAuNC0xLDEtMWg1bDAuNiwxSDE4djJoNS44bDEuMiwyLjFINlYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yOC4yLDI1Yy0xLjIs'@;
put 'MC0yLjQsMC40LTMuMywxLjJjLTEuMiwxLjEtMywxLjEtNC4xLDBjLTEuOS0xLjYtNC42LTEuNi02LjUsMGMtMS4yLDEuMS0yLjksMS4xLTQuMSwwXG5cdFx0Yy0wLjktMC44LTItMS4yLTMuMi0xLjJjLTEuMiwwLTIuMywwLjQtMy4yLDEuMkMzLjQsMjYuNywyLjcsMjcsMiwyN3YyYzEuMS0w'@;
put 'LjEsMi4yLTAuNSwzLjEtMS4yQzUuNiwyNy4zLDYuMywyNyw3LDI3XG5cdFx0YzAuNywwLDEuNSwwLjMsMiwwLjhjMS45LDEuNiw0LjcsMS42LDYuNiwwYzAuNi0wLjUsMS4zLTAuOCwyLjEtMC44YzAuOCwwLDEuNSwwLjMsMi4xLDAuOGMxLjksMS42LDQuNywxLjYsNi41LDBcblx0XHRjMC42'@;
put 'LTAuNSwxLjMtMC44LDIuMS0wLjhjMC44LDAsMS42LDAuMywyLjEsMC44YzAuOSwwLjgsMi4yLDEuMywzLjQsMS4ydi0yYy0wLjgsMC0xLjYtMC4zLTIuMi0wLjhDMzAuNywyNS40LDI5LjUsMjUsMjguMiwyNXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBh'@;
put 'dGggZD0iTTUuOCwyMy4ydi0zLjNoMjYuMUwyOC40LDIzaDAuMmMwLjgsMCwxLjYsMC4yLDIuMiwwLjVsMi41LTIuMmwwLjEtMC4yYzAuNy0wLjksMC41LTIuMS0wLjQtMi44Yy0wLjMtMC4zLTAuOC0wLjQtMS4yLTAuNFxuXHRcdGgtNC4xbC01LjQtN2gtNS41Yy0xLjcsMC0zLDEuMy0zLDNo'@;
put 'LTJWOEg2djYuMmMtMS4yLDAuNC0yLjEsMS41LTIuMSwyLjhsMCw3LjJsMC4xLDBDNC41LDIzLjcsNS4xLDIzLjQsNS44LDIzLjJ6IE0xNy45LDE0aDQuMlxuXHRcdGwxLjQsMmgtNS43VjE0eiBNNy45LDEwaDJ2NGgtMlYxMHoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo'@;
put 'LTIiIC8+JyksUi5DbHJTaGFwZVRyYWlsZXI9KDAsbS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44UzE4LjIsMTkuMiwxNSwxOS4yeiBNMTUsMjkuMmMtMi4zLDAtNC4yLTEuOS00LjIt'@;
put 'NC4yXG5cdFx0czEuOS00LjIsNC4yLTQuMnM0LjIsMS45LDQuMiw0LjJTMTcuMywyOS4yLDE1LDI5LjJ6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cmVjdCB4PSIxNCIgeT0iMjQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRs'@;
put 'aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMyw5SDJ2MTMuMWMwLDAsMCwwLDAsMEMyLDI0LjMsMy43LDI2LDUuOSwyNkg3di0ySDUuOWMtMSwwLTEuOC0wLjgtMS45LTEuOVYxNWgyMnY3LjFjMCwxLTAuOCwxLjgtMS45LDEuOUgyM3YyaDEuMVxuXHRcdGMwLDAsMCww'@;
put 'LDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IE0yNiwxM0g0di0yaDIyVjEzeiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQu'@;
put 'MywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjktMS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdGMwLDAsMCwwLDAsMGMyLjEsMCwzLjgtMS43LDMuOC0zLjlWMTFoNWMwLjYsMCwxLTAuNCwxLTFTMzMuNiw5LDMzLDl6IiBjbGFzcz0i'@;
put 'Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNSwxOS4yYy0zLjIsMC01LjgsMi42LTUuOCw1LjhzMi42LDUuOCw1LjgsNS44czUuOC0yLjYsNS44LTUuOGwwLDBDMjAuOCwyMS44LDE4LjIsMTkuMiwxNSwxOS4yeiBNMTYsMjZoLTJ2LTJoMlYyNnoiIGNsYXNz'@;
put 'PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksUi5DbHJTaGFwZU9uSG9saWRheT0oMCxtLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguMDgsMi4zNGMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNEExNy45MSwxNy45MSwwLDAsMCwyMywyOS42Nmw1LjUz'@;
put 'LDMuNTJhMSwxLDAsMCwwLDEuMzgtLjMsMSwxLDAsMCwwLC4xNi0uNTRWMjUuNjFhMTMsMTMsMCwwLDAsNC05LjI3QzM0LjA4LDguNjIsMjYuOSwyLjM0LDE4LjA4LDIuMzRaTTI4LjM3LDI0LjQ1YTEsMSwwLDAsMC0uMzIuNzN2NS4zNGwtNC4zOC0yLjc5YTEsMSwwLDAsMC0uODMtLjExLDE2'@;
put 'LDE2LDAsMCwxLTQuNzYuNzJjLTcuNzIsMC0xNC01LjM4LTE0LTEyczYuMjgtMTIsMTQtMTIsMTQsNS4zOCwxNCwxMkExMS4xLDExLjEsMCwwLDEsMjguMzcsMjQuNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzEuMSwxNS44'@;
put 'MiwzMSwxNS42NywyOC41LDEzLjQ0YTMuMjUsMy4yNSwwLDAsMC0yLjM5LS44NGwtNS4zOC4zNC0zLjU5LTNhLjgxLjgxLDAsMCwwLS41Mi0uMTlIMTMuNTZhLjc4Ljc4LDAsMCwwLS42OS40Ljc3Ljc3LDAsMCwwLDAsLjc5bDEuMzYsMi40NC00LjcxLjI5LDEuMzEsMS41MiwxNS4zOS0xYTEu'@;
put 'NjUsMS42NSwwLDAsMSwxLjIyLjQzbDIuMzYsMi4xM2EuMTEuMTEsMCwwLDEsMCwuMDdjMCwuMDYtLjA5LjA1LS4xLjA2SDIxLjgybC0uMzUuMzctNS4xOSw1LjUzSDE0LjY0bDIuNzMtNS45SDguNTRMNy4xMywxNC4xNiw2LjUxLDEzYS44LjgsMCwwLDAtMS0uMkEuODEuODEsMCwwLDAsNS4y'@;
put 'LDEzLjlsMiwzLjk0YTEuMjEsMS4yMSwwLDAsMCwxLjA4LjY1aDYuNTdsLTEuOTQsNC4xOEExLjIsMS4yLDAsMCwwLDEzLDIzLjgzYTEuMjIsMS4yMiwwLDAsMCwxLC41NmgyLjQzYTEuMTcsMS4xNywwLDAsMCwuODgtLjM5bDUuMTgtNS41MWg3LjE2YTEuNjUsMS42NSwwLDAsMCwxLjUyLS45'@;
put 'MUExLjc0LDEuNzQsMCwwLDAsMzEuMSwxNS44MlpNMTQuOTIsMTEuMzFoMS40MWwyLjA5LDEuNzdMMTYsMTMuMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwx'@;
put 'NCwxNiwxNGExNy45MSwxNy45MSwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuMzgtLjNBMSwxLDAsMCwwLDMwLDMyLjVWMjUuNzdhMTMsMTMsMCwwLDAsNC05LjI3QzM0LDguNzgsMjYuODIsMi41LDE4LDIuNVpNMjkuODQsMThIMjEuNTFhLjQyLjQyLDAsMCwwLS4zLjEz'@;
put 'bC01LjMsNS42NGEuMzkuMzksMCwwLDEtLjI5LjEzSDEzLjE5YS40MS40MSwwLDAsMS0uMzctLjU4bDIuNDctNS4zMkg3LjQ2YS40Mi40MiwwLDAsMS0uMzYtLjIybC0yLjctNUg2LjI0YS41My41MywwLDAsMSwuMzkuMThsMS41NiwxLjY5YS4zOC4zOCwwLDAsMCwuMzMuMTRsNi4xOC0uMzgt'@;
put 'Mi0zLjU1aDIuODlhLjQ3LjQ3LDAsMCwxLC4zMS4xMUwxOS42MywxNGw2LjY5LS4zNWEyLjQ0LDIuNDQsMCwwLDEsMS44MS42M2wyLjQ3LDIuMjNBLjkyLjkyLDAsMCwxLDI5Ljg0LDE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxSLlRyYXZlbFNo'@;
put 'YXBlcz17dHJ1Y2s6Ui5DbHJTaGFwZVRydWNrLGFpcnBsYW5lOlIuQ2xyU2hhcGVBaXJwbGFuZSxjYXI6Ui5DbHJTaGFwZUNhcixtYXA6Ui5DbHJTaGFwZU1hcCxjb21wYXNzOlIuQ2xyU2hhcGVDb21wYXNzLCJtYXAtbWFya2VyIjpSLkNsclNoYXBlTWFwTWFya2VyLGJpY3ljbGU6Ui5DbHJT'@;
put 'aGFwZUJpY3ljbGUsYm9hdDpSLkNsclNoYXBlQm9hdCxjYW1wZXJ2YW46Ui5DbHJTaGFwZUNhbXBlcnZhbixjYXJhdmFuOlIuQ2xyU2hhcGVDYXJhdmFuLGZlcnJ5OlIuQ2xyU2hhcGVGZXJyeSx0cmFpbGVyOlIuQ2xyU2hhcGVUcmFpbGVyLCJvbi1ob2xpZGF5IjpSLkNsclNoYXBlT25Ib2xp'@;
put 'ZGF5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoUi5UcmF2ZWxTaGFwZXMsInBsYW5lIiwoMCxiLmRlc2NyaXB0b3JDb25maWcpKFIuVHJhdmVsU2hhcGVzLmFpcnBsYW5lKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFIuVHJhdmVsU2hhcGVzLCJhdXRvIiwoMCxiLmRlc2NyaXB0b3JDb25maWcp'@;
put 'KFIuVHJhdmVsU2hhcGVzLmNhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChSLlRyYXZlbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZp'@;
put 'Zy50cyI6Ci8qISoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihTZSxSLGVlKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KFIsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LFIuZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsUi5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIGIobSl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOm19fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9y'@;
put 'LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoq'@;
put 'KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKFNlLFIsZWUpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoUiwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'Ui5jbHJJY29uU1ZHPXZvaWQgMDtSLmNsckljb25TVkc9ZnVuY3Rpb24gdyhBKXt2YXIgRD0iIjtyZXR1cm4gQS5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRCs9ImNhbi1iYWRnZSAiKSxBLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRCs9ImNhbi1hbGVydCAiKSxBLmluZGV4T2YoImNs'@;
put 'ci1pLXNvbGlkIik+LTEmJihEKz0iaGFzLXNvbGlkICIpLChEPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRCsnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn'@;
put 'IiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJo'@;
put 'dHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrQSsiPC9zdmc+In19fSl9LDcwNzgzOigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9e307Ui5yKGVl'@;
put 'KSxSLmQoZWUse2FycmF5QXZnOigpPT5pT2UsYXJyYXlFYWNoOigpPT5SbixhcnJheUZpbHRlcjooKT0+ZmQsYXJyYXlGbGF0dGVuOigpPT5EaWUsYXJyYXlNYXA6KCk9Pl9zLGFycmF5TWF4OigpPT5uT2UsYXJyYXlNaW46KCk9PnJPZSxhcnJheVJlZHVjZTooKT0+c2MsYXJyYXlTdW06KCk9'@;
put 'PlRpZSxhcnJheVVuaXF1ZTooKT0+SFYsZXh0ZW5kQXJyYXk6KCk9PkZWLGdldERpZmZlcmVuY2VPZkFycmF5czooKT0+TlYsZ2V0SW50ZXJzZWN0aW9uT2ZBcnJheXM6KCk9Pm9PZSxnZXRVbmlvbk9mQXJyYXlzOigpPT5zT2UscGl2b3Q6KCk9Pm53LHN0cmluZ1RvQXJyYXk6KCk9PlZWLHRv'@;
put 'MmRBcnJheTooKT0+RWllfSk7dmFyIGI9e307Ui5yKGIpLFIuZChiLHtfaW5qZWN0UHJvZHVjdEluZm86KCk9PlBpZSxpc0RlZmluZWQ6KCk9PmVvLGlzRW1wdHk6KCk9PnFjLGlzUmVnRXhwOigpPT5BaWUsaXNVbmRlZmluZWQ6KCk9PmlsLHN0cmluZ2lmeTooKT0+JGx9KTt2YXIgbT17fTtS'@;
put 'LnIobSksUi5kKG0se2VxdWFsc0lnbm9yZUNhc2U6KCk9PnVPZSxpc1BlcmNlbnRWYWx1ZTooKT0+WVYscmFuZG9tU3RyaW5nOigpPT5CVixzYW5pdGl6ZTooKT0+Z1Qsc3RyaXBUYWdzOigpPT5VVixzdWJzdGl0dXRlOigpPT56Vix0b1VwcGVyQ2FzZUZpcnN0OigpPT5hMH0pO3ZhciBYPXt9'@;
put 'O1IucihYKSxSLmQoWCx7SFRNTF9DSEFSQUNURVJTOigpPT5qaWUsYWRkQ2xhc3M6KCk9PndpLGFkZEV2ZW50OigpPT5mT2UsY2xlYXJUZXh0U2VsZWN0aW9uOigpPT5HVixjbG9zZXN0OigpPT5RNCxjbG9zZXN0RG93bjooKT0+YXcsZW1wdHk6KCk9PmgyLGZhc3RJbm5lckhUTUw6KCk9PkZn'@;
put 'LGZhc3RJbm5lclRleHQ6KCk9Pm5tLGdldENhcmV0UG9zaXRpb246KCk9PldWLGdldENvbXB1dGVkU3R5bGU6KCk9PnJtLGdldENzc1RyYW5zZm9ybTooKT0+Z09lLGdldEZyYW1lRWxlbWVudDooKT0+SGllLGdldFBhcmVudDooKT0+RmllLGdldFBhcmVudFdpbmRvdzooKT0+c3csZ2V0U2Ny'@;
put 'b2xsTGVmdDooKT0+X1QsZ2V0U2Nyb2xsVG9wOigpPT5sdyxnZXRTY3JvbGxhYmxlRWxlbWVudDooKT0+Y3csZ2V0U2Nyb2xsYmFyV2lkdGg6KCk9PmZ1LGdldFNlbGVjdGlvbkVuZFBvc2l0aW9uOigpPT5CaWUsZ2V0U2VsZWN0aW9uVGV4dDooKT0+WWllLGdldFN0eWxlOigpPT5jOSxnZXRU'@;
put 'cmltbWluZ0NvbnRhaW5lcjooKT0+TmcsZ2V0V2luZG93U2Nyb2xsTGVmdDooKT0+SGcsZ2V0V2luZG93U2Nyb2xsVG9wOigpPT5sOSxoYXNBY2Nlc3NUb1BhcmVudFdpbmRvdzooKT0+ZE9lLGhhc0NsYXNzOigpPT5RbyxoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOigpPT5VaWUsaGFzVmVydGlj'@;
put 'YWxTY3JvbGxiYXI6KCk9PnppZSxpbmRleDooKT0+TmllLGlubmVySGVpZ2h0OigpPT5pcCxpbm5lcldpZHRoOigpPT51dyxpc0NoaWxkT2Y6KCk9PmVtLGlzRGV0YWNoZWQ6KCk9PnFWLGlzSW5wdXQ6KCk9PmZ3LGlzT3V0c2lkZUlucHV0OigpPT55VCxpc1Zpc2libGU6KCk9PmE5LG1hdGNo'@;
put 'ZXNDU1NSdWxlczooKT0+aE9lLG9ic2VydmVWaXNpYmlsaXR5Q2hhbmdlT25jZTooKT0+V2llLG9mZnNldDooKT0+U2Msb3V0ZXJIZWlnaHQ6KCk9PlZsLG91dGVyV2lkdGg6KCk9Pk5hLG92ZXJsYXlDb250YWluc0VsZW1lbnQ6KCk9PnRtLHJlbW92ZUNsYXNzOigpPT5zcyxyZW1vdmVFdmVu'@;
put 'dDooKT0+cE9lLHJlbW92ZVRleHROb2RlczooKT0+WlYscmVzZXRDc3NUcmFuc2Zvcm06KCk9Pmh3LHNlbGVjdEVsZW1lbnRJZkFsbG93ZWQ6KCk9PlppZSxzZXRDYXJldFBvc2l0aW9uOigpPT5kdyxzZXRPdmVybGF5UG9zaXRpb246KCk9PnZUfSk7dmFyIHc9e307Ui5yKHcpLFIuZCh3LHtj'@;
put 'dXJyeTooKT0+JGllLGN1cnJ5UmlnaHQ6KCk9PnlPZSxkZWJvdW5jZTooKT0+S1YsZmFzdENhbGw6KCk9PmJULGlzRnVuY3Rpb246KCk9Pm9sLHBhcnRpYWw6KCk9PlhWLHBpcGU6KCk9PnZPZSx0aHJvdHRsZTooKT0+R2llLHRocm90dGxlQWZ0ZXJIaXRzOigpPT5fT2V9KTt2YXIgQT17fTtS'@;
put 'LnIoQSksUi5kKEEse2Nsb25lOigpPT5JMCxjcmVhdGVPYmplY3RQcm9wTGlzdGVuZXI6KCk9PlZnLGRlZXBDbG9uZTooKT0+bDAsZGVlcEV4dGVuZDooKT0+cHcsZGVlcE9iamVjdFNpemU6KCk9PkNULGRlZmluZUdldHRlcjooKT0+Q2YsZHVja1NjaGVtYTooKT0+dTksZXh0ZW5kOigpPT54'@;
put 'YyxnZXRQcm9wZXJ0eTooKT0+cWllLGhhc093blByb3BlcnR5OigpPT5xbCxpbmhlcml0OigpPT5vcCxpc09iamVjdDooKT0+dnMsaXNPYmplY3RFcXVhbDooKT0+d1QsbWl4aW46KCk9PkdhLG9iamVjdEVhY2g6KCk9PnlzLHNldFByb3BlcnR5OigpPT5NVH0pO3ZhciBEPXt9O1IucihEKSxS'@;
put 'LmQoRCx7aXNDaHJvbWU6KCk9PkpWLGlzQ2hyb21lV2ViS2l0OigpPT5KaWUsaXNFZGdlOigpPT5lb2UsaXNFZGdlV2ViS2l0OigpPT53T2UsaXNGaXJlZm94OigpPT5TVCxpc0ZpcmVmb3hXZWJLaXQ6KCk9PlFpZSxpc0lPUzooKT0+UVYsaXNJcGFkT1M6KCk9PmVqLGlzTGludXhPUzooKT0+'@;
put 'TU9lLGlzTWFjT1M6KCk9PnhULGlzTW9iaWxlQnJvd3NlcjooKT0+ZjIsaXNTYWZhcmk6KCk9PmJPZSxpc1dpbmRvd3NPUzooKT0+dGosc2V0QnJvd3Nlck1ldGE6KCk9PktpZSxzZXRQbGF0Zm9ybU1ldGE6KCk9PlhpZX0pO3ZhciBQPXt9O1IucihQKSxSLmQoUCx7S0VZX0NPREVTOigpPT51'@;
put 'byxpc0N0cmxLZXk6KCk9PlNPZSxpc0N0cmxNZXRhS2V5OigpPT5ub2UsaXNGdW5jdGlvbktleTooKT0+bmosaXNLZXk6KCk9Pmg5LGlzUHJpbnRhYmxlQ2hhcjooKT0+dG9lfSk7dmFyIFU9e307Ui5yKFUpLFIuZChVLHtpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDooKT0+amcsaXNM'@;
put 'ZWZ0Q2xpY2s6KCk9PmtULGlzUmlnaHRDbGljazooKT0+aW0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOigpPT5wMn0pO3ZhciBJPXt9O1IucihJKSxSLmQoSSx7X2RhdGFUb0hUTUw6KCk9PnVqLGh0bWxUb0dyaWRTZXR0aW5nczooKT0+Y29lLGluc3RhbmNlVG9IVE1MOigpPT5jan0pO3Zh'@;
put 'ciBFPXt9O1IucihFKSxSLmQoRSx7aXNOdW1lcmljOigpPT5SMCxpc051bWVyaWNMaWtlOigpPT51b2UscmFuZ2VFYWNoOigpPT5NbyxyYW5nZUVhY2hSZXZlcnNlOigpPT5BVCx2YWx1ZUFjY29yZGluZ1BlcmNlbnQ6KCk9PmRqfSk7dmFyIGs9e307Ui5yKGspLFIuZChrLHtjYW5jZWxBbmlt'@;
put 'YXRpb25GcmFtZTooKT0+X3csZ2V0Q29tcGFyaXNvbkZ1bmN0aW9uOigpPT5nb2UsaXNUb3VjaFN1cHBvcnRlZDooKT0+X2oscmVxdWVzdEFuaW1hdGlvbkZyYW1lOigpPT5SVH0pO3ZhciBCPXt9O1IucihCKSxSLmQoQix7Y291bnRGaXJzdFJvd0tleXM6KCk9PllqLGNyZWF0ZUVtcHR5U3By'@;
put 'ZWFkc2hlZXREYXRhOigpPT5CRmUsY3JlYXRlU3ByZWFkc2hlZXREYXRhOigpPT5WRmUsY3JlYXRlU3ByZWFkc2hlZXRPYmplY3REYXRhOigpPT5qRmUsZGF0YVJvd1RvQ2hhbmdlc0FycmF5OigpPT5Caixpc0FycmF5T2ZBcnJheXM6KCk9PldvZSxpc0FycmF5T2ZPYmplY3RzOigpPT5Hb2Us'@;
put 'c3ByZWFkc2hlZXRDb2x1bW5JbmRleDooKT0+TkZlLHNwcmVhZHNoZWV0Q29sdW1uTGFiZWw6KCk9PkhUfSk7dmFyIE49e307Ui5yKE4pLFIuZChOLHtDT05URVhUTUVOVV9JVEVNU19BRERfQ09NTUVOVDooKT0+dkIsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UOigpPT5NQixDT05URVhU'@;
put 'TUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NOigpPT5EQixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSOigpPT5TQixDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfSlVTVElGWTooKT0+a0IsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0xFRlQ6KCk9PkNCLENPTlRF'@;
put 'WFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEU6KCk9PlRCLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9SSUdIVDooKT0+eEIsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX1RPUDooKT0+RUIsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSUzooKT0+QUIsQ09OVEVYVE1FTlVfSVRF'@;
put 'TVNfQk9SREVSU19CT1RUT006KCk9PlJCLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfTEVGVDooKT0+T0IsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19SSUdIVDooKT0+SUIsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19UT1A6KCk9PkxCLENPTlRFWFRNRU5VX0lURU1TX0NMRUFSX0NP'@;
put 'TFVNTjooKT0+bEIsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWTooKT0+Y0IsQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZOigpPT5oQixDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0dST1VQX0hFQURFUlM6KCk9PmRCLENPTlRFWFRNRU5VX0lURU1T'@;
put 'X0NPUFlfV0lUSF9DT0xVTU5fSEVBREVSUzooKT0+dUIsQ09OVEVYVE1FTlVfSVRFTVNfQ1VUOigpPT5mQixDT05URVhUTUVOVV9JVEVNU19FRElUX0NPTU1FTlQ6KCk9PnlCLENPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU46KCk9PnBCLENPTlRFWFRNRU5VX0lURU1TX0hJREVfQ09M'@;
put 'VU1OOigpPT5OQixDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+akIsQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX0xFRlQ6KCk9PnRCLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVDooKT0+bkIsQ09OVEVYVE1FTlVfSVRFTVNfTUVSR0VfQ0VMTFM6KCk9PmdCLENPTlRFWFRN'@;
put 'RU5VX0lURU1TX05FU1RFRF9ST1dTX0RFVEFDSF9DSElMRDooKT0+SEIsQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfSU5TRVJUX0NISUxEOigpPT5GQixDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUzooKT0+SmosQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9PTkxZOigpPT5hQixDT05U'@;
put 'RVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVDooKT0+d0IsQ09OVEVYVE1FTlVfSVRFTVNfUkVETzooKT0+c0IsQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JPUkRFUlM6KCk9PlBCLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT0xVTU46KCk9PmlCLENPTlRFWFRNRU5VX0lURU1T'@;
put 'X1JFTU9WRV9DT01NRU5UOigpPT5iQixDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfUk9XOigpPT5yQixDT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkU6KCk9PlFqLENPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPVzooKT0+ZUIsQ09OVEVYVE1FTlVfSVRFTVNfU0hPV19DT0xVTU46KCk9PlZC'@;
put 'LENPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XOigpPT5CQixDT05URVhUTUVOVV9JVEVNU19VTkRPOigpPT5vQixDT05URVhUTUVOVV9JVEVNU19VTkZSRUVaRV9DT0xVTU46KCk9Pm1CLENPTlRFWFRNRU5VX0lURU1TX1VOTUVSR0VfQ0VMTFM6KCk9Pl9CLENPTlRFWFRfTUVOVV9JVEVNU19O'@;
put 'QU1FU1BBQ0U6KCk9PmlzZSxGSUxURVJTX0JVVFRPTlNfQ0FOQ0VMOigpPT5mWSxGSUxURVJTX0JVVFRPTlNfQ0xFQVI6KCk9PmRZLEZJTFRFUlNfQlVUVE9OU19PSzooKT0+aFksRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJDSDooKT0+cFksRklMVEVSU19CVVRUT05TX1BMQUNF'@;
put 'SE9MREVSX1NFQ09ORF9WQUxVRTooKT0+Z1ksRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1ZBTFVFOigpPT5tWSxGSUxURVJTX0JVVFRPTlNfU0VMRUNUX0FMTDooKT0+dVksRklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5uWSxGSUxURVJTX0NPTkRJVElPTlNfQkVGT1JFOigpPT5y'@;
put 'WSxGSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEg6KCk9PldCLEZJTFRFUlNfQ09ORElUSU9OU19CRVRXRUVOOigpPT5lWSxGSUxURVJTX0NPTkRJVElPTlNfQllfVkFMVUU6KCk9PmhIZSxGSUxURVJTX0NPTkRJVElPTlNfQ09OVEFJTlM6KCk9PiRCLEZJTFRFUlNfQ09ORElUSU9OU19F'@;
put 'TVBUWTooKT0+WUIsRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSDooKT0+R0IsRklMVEVSU19DT05ESVRJT05TX0VRVUFMOigpPT5VQixGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOOigpPT5LQixGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOX09SX0VRVUFMOigpPT5Y'@;
put 'QixGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOOigpPT5KQixGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOX09SX0VRVUFMOigpPT5RQixGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFOigpPT5LbCxGSUxURVJTX0NPTkRJVElPTlNfTk9ORTooKT0+WlQsRklMVEVSU19DT05ESVRJ'@;
put 'T05TX05PVF9CRVRXRUVOOigpPT50WSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0NPTlRBSU46KCk9PnFCLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFk6KCk9PnpCLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUw6KCk9PlpCLEZJTFRFUlNfQ09ORElUSU9OU19UT0RBWTooKT0+aVks'@;
put 'RklMVEVSU19DT05ESVRJT05TX1RPTU9SUk9XOigpPT5vWSxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT5zWSxGSUxURVJTX0RJVlNfRklMVEVSX0JZX0NPTkRJVElPTjooKT0+YVksRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9WQUxVRTooKT0+bFksRklMVEVSU19MQUJFTFNfQ09O'@;
put 'SlVOQ1RJT046KCk9PmNZLEZJTFRFUlNfTEFCRUxTX0RJU0pVTkNUSU9OOigpPT5XVCxGSUxURVJTX05BTUVTUEFDRTooKT0+TzAsRklMVEVSU19WQUxVRVNfQkxBTktfQ0VMTFM6KCk9PkdUfSk7dmFyIFY9e307ZnVuY3Rpb24gWihjLGwsYSxkLGgsZix2KXt0cnl7dmFyIFQ9Y1tmXSh2KSxZ'@;
put 'PVQudmFsdWV9Y2F0Y2gocmUpe3JldHVybiB2b2lkIGEocmUpfVQuZG9uZT9sKFkpOlByb21pc2UucmVzb2x2ZShZKS50aGVuKGQsaCl9ZnVuY3Rpb24gVyhjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihkLGgp'@;
put 'e3ZhciBmPWMuYXBwbHkobCxhKTtmdW5jdGlvbiB2KFkpe1ooZixkLGgsdixULCJuZXh0IixZKX1mdW5jdGlvbiBUKFkpe1ooZixkLGgsdixULCJ0aHJvdyIsWSl9dih2b2lkIDApfSl9fVIucihWKSxSLmQoVix7Z2V0Tm9ybWFsaXplZERhdGU6KCk9PnpzZX0pO2xldCBxPW51bGwsdGU9MTtj'@;
put 'b25zdCBhZT1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIHNlKGMpe2NvbnN0IGw9cTtyZXR1cm4gcT1jLGx9ZnVuY3Rpb24gSChjKXtpZigoIXVlKGMpfHxjLmRpcnR5KSYmKGMuZGlydHl8fGMubGFzdENsZWFuRXBvY2ghPT10ZSkpe2lmKCFjLnByb2R1Y2VyTXVzdFJlY29tcHV0ZShjKSYm'@;
put 'IXAoYykpcmV0dXJuIGMuZGlydHk9ITEsdm9pZChjLmxhc3RDbGVhbkVwb2NoPXRlKTtjLnByb2R1Y2VyUmVjb21wdXRlVmFsdWUoYyksYy5kaXJ0eT0hMSxjLmxhc3RDbGVhbkVwb2NoPXRlfX1mdW5jdGlvbiBwKGMpe2hlKGMpO2ZvcihsZXQgbD0wO2w8Yy5wcm9kdWNlck5vZGUubGVuZ3Ro'@;
put 'O2wrKyl7Y29uc3QgYT1jLnByb2R1Y2VyTm9kZVtsXSxkPWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb25bbF07aWYoZCE9PWEudmVyc2lvbnx8KEgoYSksZCE9PWEudmVyc2lvbikpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gbmUoYyxsKXtpZihmdW5jdGlvbiB4ZShjKXtjLmxpdmVDb25z'@;
put 'dW1lck5vZGU/Pz1bXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzPz89W119KGMpLGhlKGMpLDE9PT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKWZvcihsZXQgZD0wO2Q8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2QrKyluZShjLnByb2R1Y2VyTm9kZVtkXSxjLnByb2R1Y2VySW5kZXhPZlRo'@;
put 'aXNbZF0pO2NvbnN0IGE9Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0xO2lmKGMubGl2ZUNvbnN1bWVyTm9kZVtsXT1jLmxpdmVDb25zdW1lck5vZGVbYV0sYy5saXZlQ29uc3VtZXJJbmRleE9mVGhpc1tsXT1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2FdLGMubGl2ZUNvbnN1bWVyTm9k'@;
put 'ZS5sZW5ndGgtLSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzLmxlbmd0aC0tLGw8Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aCl7Y29uc3QgZD1jLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdLGg9Yy5saXZlQ29uc3VtZXJOb2RlW2xdO2hlKGgpLGgucHJvZHVjZXJJbmRleE9mVGhpc1tk'@;
put 'XT1sfX1mdW5jdGlvbiB1ZShjKXtyZXR1cm4gYy5jb25zdW1lcklzQWx3YXlzTGl2ZXx8KGM/LmxpdmVDb25zdW1lck5vZGU/Lmxlbmd0aD8/MCk+MH1mdW5jdGlvbiBoZShjKXtjLnByb2R1Y2VyTm9kZT8/PVtdLGMucHJvZHVjZXJJbmRleE9mVGhpcz8/PVtdLGMucHJvZHVjZXJMYXN0UmVh'@;
put 'ZFZlcnNpb24/Pz1bXX1sZXQgVWU9bnVsbDtmdW5jdGlvbiBsdChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBDdChjKXtjb25zdCBhPWMoZD0+e0Vycm9yLmNhbGwoZCksZC5zdGFjaz0obmV3IEVycm9yKS5zdGFja30pO3JldHVybiBhLnByb3RvdHlwZT1PYmplY3Qu'@;
put 'Y3JlYXRlKEVycm9yLnByb3RvdHlwZSksYS5wcm90b3R5cGUuY29uc3RydWN0b3I9YSxhfWNvbnN0IEZ0PUN0KGM9PmZ1bmN0aW9uKGEpe2ModGhpcyksdGhpcy5tZXNzYWdlPWE/YCR7YS5sZW5ndGh9IGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG4ke2EubWFwKChk'@;
put 'LGgpPT5gJHtoKzF9KSAke2QudG9TdHJpbmcoKX1gKS5qb2luKCJcbiAgIil9YDoiIix0aGlzLm5hbWU9IlVuc3Vic2NyaXB0aW9uRXJyb3IiLHRoaXMuZXJyb3JzPWF9KTtmdW5jdGlvbiBSdChjLGwpe2lmKGMpe2NvbnN0IGE9Yy5pbmRleE9mKGwpOzA8PWEmJmMuc3BsaWNlKGEsMSl9fWNs'@;
put 'YXNzIFh0e2NvbnN0cnVjdG9yKGwpe3RoaXMuaW5pdGlhbFRlYXJkb3duPWwsdGhpcy5jbG9zZWQ9ITEsdGhpcy5fcGFyZW50YWdlPW51bGwsdGhpcy5fZmluYWxpemVycz1udWxsfXVuc3Vic2NyaWJlKCl7bGV0IGw7aWYoIXRoaXMuY2xvc2VkKXt0aGlzLmNsb3NlZD0hMDtjb25zdHtfcGFy'@;
put 'ZW50YWdlOmF9PXRoaXM7aWYoYSlpZih0aGlzLl9wYXJlbnRhZ2U9bnVsbCxBcnJheS5pc0FycmF5KGEpKWZvcihjb25zdCBmIG9mIGEpZi5yZW1vdmUodGhpcyk7ZWxzZSBhLnJlbW92ZSh0aGlzKTtjb25zdHtpbml0aWFsVGVhcmRvd246ZH09dGhpcztpZihsdChkKSl0cnl7ZCgpfWNhdGNo'@;
put 'KGYpe2w9ZiBpbnN0YW5jZW9mIEZ0P2YuZXJyb3JzOltmXX1jb25zdHtfZmluYWxpemVyczpofT10aGlzO2lmKGgpe3RoaXMuX2ZpbmFsaXplcnM9bnVsbDtmb3IoY29uc3QgZiBvZiBoKXRyeXt2bihmKX1jYXRjaCh2KXtsPWw/P1tdLHYgaW5zdGFuY2VvZiBGdD9sPVsuLi5sLC4uLnYuZXJy'@;
put 'b3JzXTpsLnB1c2godil9fWlmKGwpdGhyb3cgbmV3IEZ0KGwpfX1hZGQobCl7dmFyIGE7aWYobCYmbCE9PXRoaXMpaWYodGhpcy5jbG9zZWQpdm4obCk7ZWxzZXtpZihsIGluc3RhbmNlb2YgWHQpe2lmKGwuY2xvc2VkfHxsLl9oYXNQYXJlbnQodGhpcykpcmV0dXJuO2wuX2FkZFBhcmVudCh0'@;
put 'aGlzKX0odGhpcy5fZmluYWxpemVycz1udWxsIT09KGE9dGhpcy5fZmluYWxpemVycykmJnZvaWQgMCE9PWE/YTpbXSkucHVzaChsKX19X2hhc1BhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7cmV0dXJuIGE9PT1sfHxBcnJheS5pc0FycmF5KGEpJiZhLmluY2x1ZGVzKGwpfV9h'@;
put 'ZGRQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO3RoaXMuX3BhcmVudGFnZT1BcnJheS5pc0FycmF5KGEpPyhhLnB1c2gobCksYSk6YT9bYSxsXTpsfV9yZW1vdmVQYXJlbnQobCl7Y29uc3R7X3BhcmVudGFnZTphfT10aGlzO2E9PT1sP3RoaXMuX3BhcmVudGFnZT1udWxsOkFy'@;
put 'cmF5LmlzQXJyYXkoYSkmJlJ0KGEsbCl9cmVtb3ZlKGwpe2NvbnN0e19maW5hbGl6ZXJzOmF9PXRoaXM7YSYmUnQoYSxsKSxsIGluc3RhbmNlb2YgWHQmJmwuX3JlbW92ZVBhcmVudCh0aGlzKX19WHQuRU1QVFk9KCgpPT57Y29uc3QgYz1uZXcgWHQ7cmV0dXJuIGMuY2xvc2VkPSEwLGN9KSgp'@;
put 'O2NvbnN0IFNuPVh0LkVNUFRZO2Z1bmN0aW9uIHp0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgWHR8fGMmJiJjbG9zZWQiaW4gYyYmbHQoYy5yZW1vdmUpJiZsdChjLmFkZCkmJmx0KGMudW5zdWJzY3JpYmUpfWZ1bmN0aW9uIHZuKGMpe2x0KGMpP2MoKTpjLnVuc3Vic2NyaWJlKCl9Y29uc3Qg'@;
put 'Qm49e29uVW5oYW5kbGVkRXJyb3I6bnVsbCxvblN0b3BwZWROb3RpZmljYXRpb246bnVsbCxQcm9taXNlOnZvaWQgMCx1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiExLHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDohMX0sdG49e3NldFRpbWVvdXQoYyxsLC4uLmEpe2Nv'@;
put 'bnN0e2RlbGVnYXRlOmR9PXRuO3JldHVybiBkPy5zZXRUaW1lb3V0P2Quc2V0VGltZW91dChjLGwsLi4uYSk6c2V0VGltZW91dChjLGwsLi4uYSl9LGNsZWFyVGltZW91dChjKXtjb25zdHtkZWxlZ2F0ZTpsfT10bjtyZXR1cm4obD8uY2xlYXJUaW1lb3V0fHxjbGVhclRpbWVvdXQpKGMpfSxk'@;
put 'ZWxlZ2F0ZTp2b2lkIDB9O2Z1bmN0aW9uIFpuKGMpe3RuLnNldFRpbWVvdXQoKCk9Pntjb25zdHtvblVuaGFuZGxlZEVycm9yOmx9PUJuO2lmKCFsKXRocm93IGM7bChjKX0pfWZ1bmN0aW9uIE9uKCl7fWNvbnN0IHB0PU10KCJDIix2b2lkIDAsdm9pZCAwKTtmdW5jdGlvbiBNdChjLGwsYSl7'@;
put 'cmV0dXJue2tpbmQ6Yyx2YWx1ZTpsLGVycm9yOmF9fWxldCBZdD1udWxsO2Z1bmN0aW9uIF90KGMpe2lmKEJuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpe2NvbnN0IGw9IVl0O2lmKGwmJihZdD17ZXJyb3JUaHJvd246ITEsZXJyb3I6bnVsbH0pLGMoKSxsKXtjb25z'@;
put 'dHtlcnJvclRocm93bjphLGVycm9yOmR9PVl0O2lmKFl0PW51bGwsYSl0aHJvdyBkfX1lbHNlIGMoKX1jbGFzcyBwbiBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5pc1N0b3BwZWQ9ITEsbD8odGhpcy5kZXN0aW5hdGlvbj1sLHp0KGwpJiZsLmFkZCh0aGlzKSk6dGhp'@;
put 'cy5kZXN0aW5hdGlvbj1CdH1zdGF0aWMgY3JlYXRlKGwsYSxkKXtyZXR1cm4gbmV3IFR0KGwsYSxkKX1uZXh0KGwpe3RoaXMuaXNTdG9wcGVkP2tuKGZ1bmN0aW9uIGRuKGMpe3JldHVybiBNdCgiTiIsYyx2b2lkIDApfShsKSx0aGlzKTp0aGlzLl9uZXh0KGwpfWVycm9yKGwpe3RoaXMuaXNT'@;
put 'dG9wcGVkP2tuKGZ1bmN0aW9uIGZuKGMpe3JldHVybiBNdCgiRSIsdm9pZCAwLGMpfShsKSx0aGlzKToodGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy5fZXJyb3IobCkpfWNvbXBsZXRlKCl7dGhpcy5pc1N0b3BwZWQ/a24ocHQsdGhpcyk6KHRoaXMuaXNTdG9wcGVkPSEwLHRoaXMuX2NvbXBsZXRl'@;
put 'KCkpfXVuc3Vic2NyaWJlKCl7dGhpcy5jbG9zZWR8fCh0aGlzLmlzU3RvcHBlZD0hMCxzdXBlci51bnN1YnNjcmliZSgpLHRoaXMuZGVzdGluYXRpb249bnVsbCl9X25leHQobCl7dGhpcy5kZXN0aW5hdGlvbi5uZXh0KGwpfV9lcnJvcihsKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5lcnJvcihs'@;
put 'KX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19X2NvbXBsZXRlKCl7dHJ5e3RoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKX1maW5hbGx5e3RoaXMudW5zdWJzY3JpYmUoKX19fWNvbnN0IHJ0PUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO2Z1bmN0aW9uIEV0KGMsbCl7cmV0dXJuIHJ0LmNh'@;
put 'bGwoYyxsKX1jbGFzcyBRdHtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcnRpYWxPYnNlcnZlcj1sfW5leHQobCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5uZXh0KXRyeXthLm5leHQobCl9Y2F0Y2goZCl7bXQoZCl9fWVycm9yKGwpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjph'@;
put 'fT10aGlzO2lmKGEuZXJyb3IpdHJ5e2EuZXJyb3IobCl9Y2F0Y2goZCl7bXQoZCl9ZWxzZSBtdChsKX1jb21wbGV0ZSgpe2NvbnN0e3BhcnRpYWxPYnNlcnZlcjpsfT10aGlzO2lmKGwuY29tcGxldGUpdHJ5e2wuY29tcGxldGUoKX1jYXRjaChhKXttdChhKX19fWNsYXNzIFR0IGV4dGVuZHMg'@;
put 'cG57Y29uc3RydWN0b3IobCxhLGQpe2xldCBoO2lmKHN1cGVyKCksbHQobCl8fCFsKWg9e25leHQ6bD8/dm9pZCAwLGVycm9yOmE/P3ZvaWQgMCxjb21wbGV0ZTpkPz92b2lkIDB9O2Vsc2V7bGV0IGY7dGhpcyYmQm4udXNlRGVwcmVjYXRlZE5leHRDb250ZXh0PyhmPU9iamVjdC5jcmVhdGUo'@;
put 'bCksZi51bnN1YnNjcmliZT0oKT0+dGhpcy51bnN1YnNjcmliZSgpLGg9e25leHQ6bC5uZXh0JiZFdChsLm5leHQsZiksZXJyb3I6bC5lcnJvciYmRXQobC5lcnJvcixmKSxjb21wbGV0ZTpsLmNvbXBsZXRlJiZFdChsLmNvbXBsZXRlLGYpfSk6aD1sfXRoaXMuZGVzdGluYXRpb249bmV3IFF0'@;
put 'KGgpfX1mdW5jdGlvbiBtdChjKXtCbi51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nP2Z1bmN0aW9uIGp0KGMpe0JuLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcmJll0JiYoWXQuZXJyb3JUaHJvd249ITAsWXQuZXJyb3I9Yyl9KGMpOlpuKGMpfWZ1'@;
put 'bmN0aW9uIGtuKGMsbCl7Y29uc3R7b25TdG9wcGVkTm90aWZpY2F0aW9uOmF9PUJuO2EmJnRuLnNldFRpbWVvdXQoKCk9PmEoYyxsKSl9Y29uc3QgQnQ9e2Nsb3NlZDohMCxuZXh0Ok9uLGVycm9yOmZ1bmN0aW9uIEd0KGMpe3Rocm93IGN9LGNvbXBsZXRlOk9ufSxibj0iZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgU3ltYm9sJiZTeW1ib2wub2JzZXJ2YWJsZXx8IkBAb2JzZXJ2YWJsZSI7ZnVuY3Rpb24gQ24oYyl7cmV0dXJuIGN9ZnVuY3Rpb24gUG4oYyl7cmV0dXJuIDA9PT1jLmxlbmd0aD9DbjoxPT09Yy5sZW5ndGg/Y1swXTpmdW5jdGlvbihhKXtyZXR1cm4gYy5yZWR1Y2UoKGQsaCk9Pmgo'@;
put 'ZCksYSl9fWxldCB3bj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe2EmJih0aGlzLl9zdWJzY3JpYmU9YSl9bGlmdChhKXtjb25zdCBkPW5ldyBjO3JldHVybiBkLnNvdXJjZT10aGlzLGQub3BlcmF0b3I9YSxkfXN1YnNjcmliZShhLGQsaCl7Y29uc3QgZj1mdW5jdGlvbiBjaShjKXty'@;
put 'ZXR1cm4gYyYmYyBpbnN0YW5jZW9mIHBufHxmdW5jdGlvbiBXbihjKXtyZXR1cm4gYyYmbHQoYy5uZXh0KSYmbHQoYy5lcnJvcikmJmx0KGMuY29tcGxldGUpfShjKSYmenQoYyl9KGEpP2E6bmV3IFR0KGEsZCxoKTtyZXR1cm4gX3QoKCk9Pntjb25zdHtvcGVyYXRvcjp2LHNvdXJjZTpUfT10'@;
put 'aGlzO2YuYWRkKHY/di5jYWxsKGYsVCk6VD90aGlzLl9zdWJzY3JpYmUoZik6dGhpcy5fdHJ5U3Vic2NyaWJlKGYpKX0pLGZ9X3RyeVN1YnNjcmliZShhKXt0cnl7cmV0dXJuIHRoaXMuX3N1YnNjcmliZShhKX1jYXRjaChkKXthLmVycm9yKGQpfX1mb3JFYWNoKGEsZCl7cmV0dXJuIG5ldyhk'@;
put 'PSR0KGQpKSgoaCxmKT0+e2NvbnN0IHY9bmV3IFR0KHtuZXh0OlQ9Pnt0cnl7YShUKX1jYXRjaChZKXtmKFkpLHYudW5zdWJzY3JpYmUoKX19LGVycm9yOmYsY29tcGxldGU6aH0pO3RoaXMuc3Vic2NyaWJlKHYpfSl9X3N1YnNjcmliZShhKXt2YXIgZDtyZXR1cm4gbnVsbD09PShkPXRoaXMu'@;
put 'c291cmNlKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5zdWJzY3JpYmUoYSl9W2JuXSgpe3JldHVybiB0aGlzfXBpcGUoLi4uYSl7cmV0dXJuIFBuKGEpKHRoaXMpfXRvUHJvbWlzZShhKXtyZXR1cm4gbmV3KGE9JHQoYSkpKChkLGgpPT57bGV0IGY7dGhpcy5zdWJzY3JpYmUodj0+Zj12LHY9Pmgo'@;
put 'diksKCk9PmQoZikpfSl9fXJldHVybiBjLmNyZWF0ZT1sPT5uZXcgYyhsKSxjfSkoKTtmdW5jdGlvbiAkdChjKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPWM/P0JuLlByb21pc2UpJiZ2b2lkIDAhPT1sP2w6UHJvbWlzZX1jb25zdCBsbj1DdChjPT5mdW5jdGlvbigpe2ModGhpcyksdGhpcy5u'@;
put 'YW1lPSJPYmplY3RVbnN1YnNjcmliZWRFcnJvciIsdGhpcy5tZXNzYWdlPSJvYmplY3QgdW5zdWJzY3JpYmVkIn0pO2xldCBubj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgd257Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuY2xvc2VkPSExLHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLHRo'@;
put 'aXMub2JzZXJ2ZXJzPVtdLHRoaXMuaXNTdG9wcGVkPSExLHRoaXMuaGFzRXJyb3I9ITEsdGhpcy50aHJvd25FcnJvcj1udWxsfWxpZnQoYSl7Y29uc3QgZD1uZXcgdWkodGhpcyx0aGlzKTtyZXR1cm4gZC5vcGVyYXRvcj1hLGR9X3Rocm93SWZDbG9zZWQoKXtpZih0aGlzLmNsb3NlZCl0aHJv'@;
put 'dyBuZXcgbG59bmV4dChhKXtfdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuY3VycmVudE9ic2VydmVyc3x8KHRoaXMuY3VycmVudE9ic2VydmVycz1BcnJheS5mcm9tKHRoaXMub2JzZXJ2ZXJzKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jdXJy'@;
put 'ZW50T2JzZXJ2ZXJzKWQubmV4dChhKX19KX1lcnJvcihhKXtfdCgoKT0+e2lmKHRoaXMuX3Rocm93SWZDbG9zZWQoKSwhdGhpcy5pc1N0b3BwZWQpe3RoaXMuaGFzRXJyb3I9dGhpcy5pc1N0b3BwZWQ9ITAsdGhpcy50aHJvd25FcnJvcj1hO2NvbnN0e29ic2VydmVyczpkfT10aGlzO2Zvcig7'@;
put 'ZC5sZW5ndGg7KWQuc2hpZnQoKS5lcnJvcihhKX19KX1jb21wbGV0ZSgpe190KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5pc1N0b3BwZWQ9ITA7Y29uc3R7b2JzZXJ2ZXJzOmF9PXRoaXM7Zm9yKDthLmxlbmd0aDspYS5zaGlmdCgpLmNvbXBs'@;
put 'ZXRlKCl9fSl9dW5zdWJzY3JpYmUoKXt0aGlzLmlzU3RvcHBlZD10aGlzLmNsb3NlZD0hMCx0aGlzLm9ic2VydmVycz10aGlzLmN1cnJlbnRPYnNlcnZlcnM9bnVsbH1nZXQgb2JzZXJ2ZWQoKXt2YXIgYTtyZXR1cm4obnVsbD09PShhPXRoaXMub2JzZXJ2ZXJzKXx8dm9pZCAwPT09YT92b2lk'@;
put 'IDA6YS5sZW5ndGgpPjB9X3RyeVN1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHN1cGVyLl90cnlTdWJzY3JpYmUoYSl9X3N1YnNjcmliZShhKXtyZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSksdGhpcy5f'@;
put 'aW5uZXJTdWJzY3JpYmUoYSl9X2lubmVyU3Vic2NyaWJlKGEpe2NvbnN0e2hhc0Vycm9yOmQsaXNTdG9wcGVkOmgsb2JzZXJ2ZXJzOmZ9PXRoaXM7cmV0dXJuIGR8fGg/U246KHRoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGYucHVzaChhKSxuZXcgWHQoKCk9Pnt0aGlzLmN1cnJlbnRPYnNl'@;
put 'cnZlcnM9bnVsbCxSdChmLGEpfSkpfV9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGEpe2NvbnN0e2hhc0Vycm9yOmQsdGhyb3duRXJyb3I6aCxpc1N0b3BwZWQ6Zn09dGhpcztkP2EuZXJyb3IoaCk6ZiYmYS5jb21wbGV0ZSgpfWFzT2JzZXJ2YWJsZSgpe2NvbnN0IGE9bmV3IHduO3JldHVybiBh'@;
put 'LnNvdXJjZT10aGlzLGF9fXJldHVybiBjLmNyZWF0ZT0obCxhKT0+bmV3IHVpKGwsYSksY30pKCk7Y2xhc3MgdWkgZXh0ZW5kcyBubntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5kZXN0aW5hdGlvbj1sLHRoaXMuc291cmNlPWF9bmV4dChsKXt2YXIgYSxkO251bGw9PT0oZD1udWxs'@;
put 'PT09KGE9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWE/dm9pZCAwOmEubmV4dCl8fHZvaWQgMD09PWR8fGQuY2FsbChhLGwpfWVycm9yKGwpe3ZhciBhLGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5lcnJvcil8fHZvaWQg'@;
put 'MD09PWR8fGQuY2FsbChhLGwpfWNvbXBsZXRlKCl7dmFyIGwsYTtudWxsPT09KGE9bnVsbD09PShsPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmNvbXBsZXRlKXx8dm9pZCAwPT09YXx8YS5jYWxsKGwpfV9zdWJzY3JpYmUobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9'@;
put 'PShkPW51bGw9PT0oYT10aGlzLnNvdXJjZSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc3Vic2NyaWJlKGwpKSYmdm9pZCAwIT09ZD9kOlNufX1jbGFzcyBBciBleHRlbmRzIG5ue2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fdmFsdWU9bH1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5nZXRW'@;
put 'YWx1ZSgpfV9zdWJzY3JpYmUobCl7Y29uc3QgYT1zdXBlci5fc3Vic2NyaWJlKGwpO3JldHVybiFhLmNsb3NlZCYmbC5uZXh0KHRoaXMuX3ZhbHVlKSxhfWdldFZhbHVlKCl7Y29uc3R7aGFzRXJyb3I6bCx0aHJvd25FcnJvcjphLF92YWx1ZTpkfT10aGlzO2lmKGwpdGhyb3cgYTtyZXR1cm4g'@;
put 'dGhpcy5fdGhyb3dJZkNsb3NlZCgpLGR9bmV4dChsKXtzdXBlci5uZXh0KHRoaXMuX3ZhbHVlPWwpfX1mdW5jdGlvbiBtcihjKXtyZXR1cm4gbHQoYz8ubGlmdCl9ZnVuY3Rpb24geWkoYyl7cmV0dXJuIGw9PntpZihtcihsKSlyZXR1cm4gbC5saWZ0KGZ1bmN0aW9uKGEpe3RyeXtyZXR1cm4g'@;
put 'YyhhLHRoaXMpfWNhdGNoKGQpe3RoaXMuZXJyb3IoZCl9fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKX19ZnVuY3Rpb24gJHIoYyxsLGEsZCxoKXtyZXR1cm4gbmV3IEppKGMsbCxhLGQsaCl9Y2xhc3MgSmkgZXh0ZW5kcyBw'@;
put 'bntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7c3VwZXIobCksdGhpcy5vbkZpbmFsaXplPWYsdGhpcy5zaG91bGRVbnN1YnNjcmliZT12LHRoaXMuX25leHQ9YT9mdW5jdGlvbihUKXt0cnl7YShUKX1jYXRjaChZKXtsLmVycm9yKFkpfX06c3VwZXIuX25leHQsdGhpcy5fZXJyb3I9aD9mdW5j'@;
put 'dGlvbihUKXt0cnl7aChUKX1jYXRjaChZKXtsLmVycm9yKFkpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX06c3VwZXIuX2Vycm9yLHRoaXMuX2NvbXBsZXRlPWQ/ZnVuY3Rpb24oKXt0cnl7ZCgpfWNhdGNoKFQpe2wuZXJyb3IoVCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpz'@;
put 'dXBlci5fY29tcGxldGV9dW5zdWJzY3JpYmUoKXt2YXIgbDtpZighdGhpcy5zaG91bGRVbnN1YnNjcmliZXx8dGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKXtjb25zdHtjbG9zZWQ6YX09dGhpcztzdXBlci51bnN1YnNjcmliZSgpLCFhJiYobnVsbD09PShsPXRoaXMub25GaW5hbGl6ZSl8fHZv'@;
put 'aWQgMD09PWx8fGwuY2FsbCh0aGlzKSl9fX1mdW5jdGlvbiB5cihjLGwpe3JldHVybiB5aSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoJHIoZCxmPT57ZC5uZXh0KGMuY2FsbChsLGYsaCsrKSl9KSl9KX1jb25zdCBubz0iaHR0cHM6Ly9nLmNvL25nL3NlY3VyaXR5I3hzcyI7Y2xhc3Mg'@;
put 'em4gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGZ1bmN0aW9uIFppKGMsbCl7cmV0dXJuYE5HMCR7TWF0aC5hYnMoYyl9JHtsPyI6ICIrbDoiIn1gfShsLGEpKSx0aGlzLmNvZGU9bH19ZnVuY3Rpb24gTG8oYyl7cmV0dXJue3RvU3RyaW5nOmN9LnRvU3RyaW5nKCl9Y29u'@;
put 'c3QgZXM9Il9fcGFyYW1ldGVyc19fIjtmdW5jdGlvbiBBYyhjLGwsYSl7cmV0dXJuIExvKCgpPT57Y29uc3QgZD1mdW5jdGlvbiBJbChjKXtyZXR1cm4gZnVuY3Rpb24oLi4uYSl7aWYoYyl7Y29uc3QgZD1jKC4uLmEpO2Zvcihjb25zdCBoIGluIGQpdGhpc1toXT1kW2hdfX19KGwpO2Z1bmN0'@;
put 'aW9uIGgoLi4uZil7aWYodGhpcyBpbnN0YW5jZW9mIGgpcmV0dXJuIGQuYXBwbHkodGhpcyxmKSx0aGlzO2NvbnN0IHY9bmV3IGgoLi4uZik7cmV0dXJuIFQuYW5ub3RhdGlvbj12LFQ7ZnVuY3Rpb24gVChZLHJlLGZlKXtjb25zdCBfZT1ZLmhhc093blByb3BlcnR5KGVzKT9ZW2VzXTpPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoWSxlcyx7dmFsdWU6W119KVtlc107Zm9yKDtfZS5sZW5ndGg8PWZlOylfZS5wdXNoKG51bGwpO3JldHVybihfZVtmZV09X2VbZmVdfHxbXSkucHVzaCh2KSxZfX1yZXR1cm4gYSYmKGgucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpKSxoLnBy'@;
put 'b3RvdHlwZS5uZ01ldGFkYXRhTmFtZT1jLGguYW5ub3RhdGlvbkNscz1oLGh9KX1jb25zdCBTcz1nbG9iYWxUaGlzO2Z1bmN0aW9uIHJvKGMpe2ZvcihsZXQgbCBpbiBjKWlmKGNbbF09PT1ybylyZXR1cm4gbDt0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgcmVuYW1lZCBwcm9wZXJ0eSBv'@;
put 'biB0YXJnZXQgb2JqZWN0LiIpfWZ1bmN0aW9uIHdsKGMsbCl7Zm9yKGNvbnN0IGEgaW4gbClsLmhhc093blByb3BlcnR5KGEpJiYhYy5oYXNPd25Qcm9wZXJ0eShhKSYmKGNbYV09bFthXSl9ZnVuY3Rpb24gZHIoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKEFycmF5Lmlz'@;
put 'QXJyYXkoYykpcmV0dXJuIlsiK2MubWFwKGRyKS5qb2luKCIsICIpKyJdIjtpZihudWxsPT1jKXJldHVybiIiK2M7aWYoYy5vdmVycmlkZGVuTmFtZSlyZXR1cm5gJHtjLm92ZXJyaWRkZW5OYW1lfWA7aWYoYy5uYW1lKXJldHVybmAke2MubmFtZX1gO2NvbnN0IGw9Yy50b1N0cmluZygpO2lm'@;
put 'KG51bGw9PWwpcmV0dXJuIiIrbDtjb25zdCBhPWwuaW5kZXhPZigiXG4iKTtyZXR1cm4tMT09PWE/bDpsLnN1YnN0cmluZygwLGEpfWZ1bmN0aW9uIFkwKGMsbCl7cmV0dXJuIG51bGw9PWN8fCIiPT09Yz9udWxsPT09bD8iIjpsOm51bGw9PWx8fCIiPT09bD9jOmMrIiAiK2x9Y29uc3QgVXU9'@;
put 'cm8oe19fZm9yd2FyZF9yZWZfXzpyb30pO2Z1bmN0aW9uIFBzKGMpe3JldHVybiBjLl9fZm9yd2FyZF9yZWZfXz1QcyxjLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIGRyKHRoaXMoKSl9LGN9ZnVuY3Rpb24gVGkoYyl7cmV0dXJuICRhKGMpP2MoKTpjfWZ1bmN0aW9uICRhKGMpe3JldHVy'@;
put 'biJmdW5jdGlvbiI9PXR5cGVvZiBjJiZjLmhhc093blByb3BlcnR5KFV1KSYmYy5fX2ZvcndhcmRfcmVmX189PT1Qc31mdW5jdGlvbiBscihjKXtyZXR1cm57dG9rZW46Yy50b2tlbixwcm92aWRlZEluOmMucHJvdmlkZWRJbnx8bnVsbCxmYWN0b3J5OmMuZmFjdG9yeSx2YWx1ZTp2b2lkIDB9'@;
put 'fWZ1bmN0aW9uIF9pKGMpe3JldHVybntwcm92aWRlcnM6Yy5wcm92aWRlcnN8fFtdLGltcG9ydHM6Yy5pbXBvcnRzfHxbXX19ZnVuY3Rpb24gSWMoYyl7cmV0dXJuIHloKGMsJG4pfHx5aChjLEJyKX1mdW5jdGlvbiB5aChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KGwpP2NbbF06bnVs'@;
put 'bH1mdW5jdGlvbiBLaShjKXtyZXR1cm4gYyYmKGMuaGFzT3duUHJvcGVydHkoZWkpfHxjLmhhc093blByb3BlcnR5KEVvKSk/Y1tlaV06bnVsbH1jb25zdCAkbj1ybyh7XHUwMjc1cHJvdjpyb30pLGVpPXJvKHtcdTAyNzVpbmo6cm99KSxCcj1ybyh7bmdJbmplY3RhYmxlRGVmOnJvfSksRW89'@;
put 'cm8oe25nSW5qZWN0b3JEZWY6cm99KTtjbGFzcyBZcntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX2Rlc2M9bCx0aGlzLm5nTWV0YWRhdGFOYW1lPSJJbmplY3Rpb25Ub2tlbiIsdGhpcy5cdTAyNzVwcm92PXZvaWQgMCwibnVtYmVyIj09dHlwZW9mIGE/dGhpcy5fX05HX0VMRU1FTlRfSURfXz1h'@;
put 'OnZvaWQgMCE9PWEmJih0aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOnRoaXMscHJvdmlkZWRJbjphLnByb3ZpZGVkSW58fCJyb290IixmYWN0b3J5OmEuZmFjdG9yeX0pKX1nZXQgbXVsdGkoKXtyZXR1cm4gdGhpc310b1N0cmluZygpe3JldHVybmBJbmplY3Rpb25Ub2tlbiAke3RoaXMuX2Rl'@;
put 'c2N9YH19ZnVuY3Rpb24gRHUoYyl7cmV0dXJuIGMmJiEhYy5cdTAyNzVwcm92aWRlcnN9Y29uc3QgazE9cm8oe1x1MDI3NWNtcDpyb30pLE1kPXJvKHtcdTAyNzVkaXI6cm99KSxHZj1ybyh7XHUwMjc1cGlwZTpyb30pLHZ1PXJvKHtcdTAyNzVtb2Q6cm99KSxycz1ybyh7XHUwMjc1ZmFjOnJv'@;
put 'fSksYmg9cm8oe19fTkdfRUxFTUVOVF9JRF9fOnJvfSksVHA9cm8oe19fTkdfRU5WX0lEX186cm99KTtmdW5jdGlvbiBZbyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/YzpudWxsPT1jPyIiOlN0cmluZyhjKX1mdW5jdGlvbiBIcyhjLGwpe3Rocm93IG5ldyB6bigtMjAxLCExKX12YXIg'@;
put 'QWk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5EZWZhdWx0PTBdPSJEZWZhdWx0IixjW2MuSG9zdD0xXT0iSG9zdCIsY1tjLlNlbGY9Ml09IlNlbGYiLGNbYy5Ta2lwU2VsZj00XT0iU2tpcFNlbGYiLGNbYy5PcHRpb25hbD04XT0iT3B0aW9uYWwiLGN9KEFpfHx7fSk7bGV0IGJvO2Z1bmN0aW9u'@;
put 'IEUyKCl7cmV0dXJuIGJvfWZ1bmN0aW9uIFdzKGMpe2NvbnN0IGw9Ym87cmV0dXJuIGJvPWMsbH1mdW5jdGlvbiBwMChjLGwsYSl7Y29uc3QgZD1JYyhjKTtyZXR1cm4gZCYmInJvb3QiPT1kLnByb3ZpZGVkSW4/dm9pZCAwPT09ZC52YWx1ZT9kLnZhbHVlPWQuZmFjdG9yeSgpOmQudmFsdWU6'@;
put 'YSZBaS5PcHRpb25hbD9udWxsOnZvaWQgMCE9PWw/bDp2b2lkIEhzKCl9Y29uc3QgeXU9e30semw9Il9fTkdfRElfRkxBR19fIixDbD0ibmdUZW1wVG9rZW5QYXRoIixBbT0vXG4vZ20sSW89Il9fc291cmNlIjtsZXQgQ2Q7ZnVuY3Rpb24gWnUoYyl7Y29uc3QgbD1DZDtyZXR1cm4gQ2Q9Yyxs'@;
put 'fWZ1bmN0aW9uIEF1KGMsbD1BaS5EZWZhdWx0KXtpZih2b2lkIDA9PT1DZCl0aHJvdyBuZXcgem4oLTIwMywhMSk7cmV0dXJuIG51bGw9PT1DZD9wMChjLHZvaWQgMCxsKTpDZC5nZXQoYyxsJkFpLk9wdGlvbmFsP251bGw6dm9pZCAwLGwpfWZ1bmN0aW9uIGZyKGMsbD1BaS5EZWZhdWx0KXty'@;
put 'ZXR1cm4oRTIoKXx8QXUpKFRpKGMpLGwpfWZ1bmN0aW9uIFZyKGMsbD1BaS5EZWZhdWx0KXtyZXR1cm4gZnIoYyxUMihsKSl9ZnVuY3Rpb24gVDIoYyl7cmV0dXJuIHR5cGVvZiBjPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBjP2M6KGMub3B0aW9uYWwmJjgpfChjLmhvc3QmJjEpfChjLnNlbGYm'@;
put 'JjIpfChjLnNraXBTZWxmJiY0KX1mdW5jdGlvbiBEMihjKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25zdCBkPVRpKGNbYV0pO2lmKEFycmF5LmlzQXJyYXkoZCkpe2lmKDA9PT1kLmxlbmd0aCl0aHJvdyBuZXcgem4oOTAwLCExKTtsZXQgaCxmPUFpLkRlZmF1'@;
put 'bHQ7Zm9yKGxldCB2PTA7djxkLmxlbmd0aDt2Kyspe2NvbnN0IFQ9ZFt2XSxZPVd1KFQpOyJudW1iZXIiPT10eXBlb2YgWT8tMT09PVk/aD1ULnRva2VuOmZ8PVk6aD1UfWwucHVzaChmcihoLGYpKX1lbHNlIGwucHVzaChmcihkKSl9cmV0dXJuIGx9ZnVuY3Rpb24gaGMoYyxsKXtyZXR1cm4g'@;
put 'Y1t6bF09bCxjLnByb3RvdHlwZVt6bF09bCxjfWZ1bmN0aW9uIFd1KGMpe3JldHVybiBjW3psXX1jb25zdCBMdT1oYyhBYygiT3B0aW9uYWwiKSw4KSxidT1oYyhBYygiU2tpcFNlbGYiKSw0KTtmdW5jdGlvbiBTbChjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KHJzKT9jW3JzXTpudWxs'@;
put 'fWZ1bmN0aW9uIFNkKGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/U2QoYSxsKTpsKGEpKX1mdW5jdGlvbiBoYShjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNlKGwsMCxhKX1mdW5jdGlvbiBlYyhjLGwpe3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6'@;
put 'Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBwYyhjLGwsYSl7bGV0IGQ9VzAoYyxsKTtyZXR1cm4gZD49MD9jWzF8ZF09YTooZD1+ZCxmdW5jdGlvbiBBcChjLGwsYSxkKXtsZXQgaD1jLmxlbmd0aDtpZihoPT1sKWMucHVzaChhLGQpO2Vsc2UgaWYoMT09PWgpYy5wdXNoKGQsY1swXSksY1sw'@;
put 'XT1hO2Vsc2V7Zm9yKGgtLSxjLnB1c2goY1toLTFdLGNbaF0pO2g+bDspY1toXT1jW2gtMl0saC0tO2NbbF09YSxjW2wrMV09ZH19KGMsZCxsLGEpKSxkfWZ1bmN0aW9uIFhmKGMsbCl7Y29uc3QgYT1XMChjLGwpO2lmKGE+PTApcmV0dXJuIGNbMXxhXX1mdW5jdGlvbiBXMChjLGwpe3JldHVy'@;
put 'biBmdW5jdGlvbiBVbChjLGwsYSl7bGV0IGQ9MCxoPWMubGVuZ3RoPj5hO2Zvcig7aCE9PWQ7KXtjb25zdCBmPWQrKGgtZD4+MSksdj1jW2Y8PGFdO2lmKGw9PT12KXJldHVybiBmPDxhO3Y+bD9oPWY6ZD1mKzF9cmV0dXJufihoPDxhKX0oYyxsLDEpfWNvbnN0IE9jPXt9LGZzPVtdLG0wPW5l'@;
put 'dyBZcigiIiksSTE9bmV3IFlyKCIiLC0xKSxKZj1uZXcgWXIoIiIpO2NsYXNzIEEye2dldChsLGE9eXUpe2lmKGE9PT15dSl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBObyBwcm92aWRlciBmb3IgJHtkcihsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JF'@;
put 'cnJvciIsZH1yZXR1cm4gYX19dmFyIFIxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuT25QdXNoPTBdPSJPblB1c2giLGNbYy5EZWZhdWx0PTFdPSJEZWZhdWx0IixjfShSMXx8e30pLEdzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixjW2MuTm9uZT0yXT0i'@;
put 'Tm9uZSIsY1tjLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixjfShHc3x8e30pLFFuPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpZ25hbEJhc2VkPTFdPSJTaWduYWxCYXNlZCIsY1tjLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0'@;
put 'b3JJbnB1dFRyYW5zZm9ybSIsY30oUW58fHt9KTtmdW5jdGlvbiBPbShjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4gaDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lm'@;
put 'KGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4gaH1hPWgrMX19ZnVuY3Rpb24gQ2goYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJudW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLHY9'@;
put 'YVtkKytdLFQ9YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsdixULGYpfWVsc2V7Y29uc3QgZj1oLHY9YVsrK2RdO0kyKGYpP2Muc2V0UHJvcGVydHkobCxmLHYpOmMuc2V0QXR0cmlidXRlKGwsZix2KSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIEwyKGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9'@;
put 'PT1jfWZ1bmN0aW9uIEkyKGMpe3JldHVybiA2ND09PWMuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBPMShjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxlbmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7'@;
put 'ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9aDowPT09YXx8UWYoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gUWYoYyxsLGEsZCxoKXtsZXQgZj0wLHY9Yy5sZW5ndGg7aWYoLTE9PT1sKXY9LTE7ZWxzZSBmb3Io'@;
put 'O2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZisrXTtpZigibnVtYmVyIj09dHlwZW9mIFQpe2lmKFQ9PT1sKXt2PS0xO2JyZWFrfWlmKFQ+bCl7dj1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBUPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBUKWJyZWFrO2lmKFQ9PT1hKXtp'@;
put 'ZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisxXT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYrK30tMSE9PXYmJihjLnNwbGljZSh2LDAsbCksZj12KzEpLGMuc3BsaWNlKGYrKywwLGEpLG51'@;
put 'bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5zcGxpY2UoZisrLDAsaCl9Y29uc3QgTHA9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBlMyhjLGwsYSxkKXtsZXQgaD0wO2lmKGQpe2Zvcig7aDxsLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBsW2hdO2grPTIpaWYoImNsYXNz'@;
put 'Ij09PWxbaF0mJi0xIT09T20obFtoKzFdLnRvTG93ZXJDYXNlKCksYSwwKSlyZXR1cm4hMH1lbHNlIGlmKFNoKGMpKXJldHVybiExO2lmKGg9bC5pbmRleE9mKDEsaCksaD4tMSl7bGV0IGY7Zm9yKDsrK2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YoZj1sW2hdKTspaWYoZi50b0xvd2Vy'@;
put 'Q2FzZSgpPT09YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBTaChjKXtyZXR1cm4gND09PWMudHlwZSYmYy52YWx1ZSE9PUxwfWZ1bmN0aW9uIG1jKGMsbCxhKXtyZXR1cm4gbD09PSg0IT09Yy50eXBlfHxhP2MudmFsdWU6THApfWZ1bmN0aW9uIFBtKGMsbCxhKXtsZXQgZD00O2NvbnN0'@;
put 'IGg9Yy5hdHRycyxmPW51bGwhPT1oP2Z1bmN0aW9uIFJwKGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKEwyKGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk6MDtsZXQgdj0hMTtmb3IobGV0IFQ9MDtUPGwubGVuZ3RoO1QrKyl7Y29uc3QgWT1sW1RdO2lmKCJudW1i'@;
put 'ZXIiIT10eXBlb2YgWSl7aWYoIXYpaWYoNCZkKXtpZihkPTJ8MSZkLCIiIT09WSYmIW1jKGMsWSxhKXx8IiI9PT1ZJiYxPT09bC5sZW5ndGgpe2lmKHVsKGQpKXJldHVybiExO3Y9ITB9fWVsc2UgaWYoOCZkKXtpZihudWxsPT09aHx8IWUzKGMsaCxZLGEpKXtpZih1bChkKSlyZXR1cm4hMTt2'@;
put 'PSEwfX1lbHNle2NvbnN0IHJlPWxbKytUXSxmZT1nMChZLGgsU2goYyksYSk7aWYoLTE9PT1mZSl7aWYodWwoZCkpcmV0dXJuITE7dj0hMDtjb250aW51ZX1pZigiIiE9PXJlKXtsZXQgX2U7aWYoX2U9ZmU+Zj8iIjpoW2ZlKzFdLnRvTG93ZXJDYXNlKCksMiZkJiZyZSE9PV9lKXtpZih1bChk'@;
put 'KSlyZXR1cm4hMTt2PSEwfX19fWVsc2V7aWYoIXYmJiF1bChkKSYmIXVsKFkpKXJldHVybiExO2lmKHYmJnVsKFkpKWNvbnRpbnVlO3Y9ITEsZD1ZfDEmZH19cmV0dXJuIHVsKGQpfHx2fWZ1bmN0aW9uIHVsKGMpe3JldHVybiEoMSZjKX1mdW5jdGlvbiBnMChjLGwsYSxkKXtpZihudWxsPT09'@;
put 'bClyZXR1cm4tMTtsZXQgaD0wO2lmKGR8fCFhKXtsZXQgZj0hMTtmb3IoO2g8bC5sZW5ndGg7KXtjb25zdCB2PWxbaF07aWYodj09PWMpcmV0dXJuIGg7aWYoMz09PXZ8fDY9PT12KWY9ITA7ZWxzZXtpZigxPT09dnx8Mj09PXYpe2xldCBUPWxbKytoXTtmb3IoOyJzdHJpbmciPT10eXBlb2Yg'@;
put 'VDspVD1sWysraF07Y29udGludWV9aWYoND09PXYpYnJlYWs7aWYoMD09PXYpe2grPTQ7Y29udGludWV9fWgrPWY/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlvbiBPcChjLGwpe2xldCBhPWMuaW5kZXhPZig0KTtpZihhPi0xKWZvcihhKys7YTxjLmxlbmd0aDspe2NvbnN0IGQ9Y1thXTtp'@;
put 'ZigibnVtYmVyIj09dHlwZW9mIGQpcmV0dXJuLTE7aWYoZD09PWwpcmV0dXJuIGE7YSsrfXJldHVybi0xfShsLGMpfWZ1bmN0aW9uIHhoKGMsbCxhPSExKXtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKylpZihQbShjLGxbZF0sYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRm0oYyxs'@;
put 'KXtlOmZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtjb25zdCBkPWxbYV07aWYoYy5sZW5ndGg9PT1kLmxlbmd0aCl7Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDtoKyspaWYoY1toXSE9PWRbaF0pY29udGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gUHAoYyxsKXtyZXR1cm4g'@;
put 'Yz8iOm5vdCgiK2wudHJpbSgpKyIpIjpsfWZ1bmN0aW9uIEhtKGMpe2xldCBsPWNbMF0sYT0xLGQ9MixoPSIiLGY9ITE7Zm9yKDthPGMubGVuZ3RoOyl7bGV0IHY9Y1thXTtpZigic3RyaW5nIj09dHlwZW9mIHYpaWYoMiZkKXtjb25zdCBUPWNbKythXTtoKz0iWyIrdisoVC5sZW5ndGg+MD8n'@;
put 'PSInK1QrJyInOiIiKSsiXSJ9ZWxzZSA4JmQ/aCs9Ii4iK3Y6NCZkJiYoaCs9IiAiK3YpO2Vsc2UiIiE9PWgmJiF1bCh2KSYmKGwrPVBwKGYsaCksaD0iIiksZD12LGY9Znx8IXVsKGQpO2ErK31yZXR1cm4iIiE9PWgmJihsKz1QcChmLGgpKSxsfWZ1bmN0aW9uIGtyKGMpe3JldHVybiBMbygo'@;
put 'KT0+e2NvbnN0IGw9dDMoYyksYT17Li4ubCxkZWNsczpjLmRlY2xzLHZhcnM6Yy52YXJzLHRlbXBsYXRlOmMudGVtcGxhdGUsY29uc3RzOmMuY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczpjLm5nQ29udGVudFNlbGVjdG9ycyxvblB1c2g6Yy5jaGFuZ2VEZXRlY3Rpb249PT1SMS5P'@;
put 'blB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsZGVwZW5kZW5jaWVzOmwuc3RhbmRhbG9uZSYmYy5kZXBlbmRlbmNpZXN8fG51bGwsZ2V0U3RhbmRhbG9uZUluamVjdG9yOm51bGwsc2lnbmFsczpjLnNpZ25hbHM/PyExLGRhdGE6Yy5kYXRhfHx7fSxlbmNhcHN1bGF0aW9u'@;
put 'OmMuZW5jYXBzdWxhdGlvbnx8R3MuRW11bGF0ZWQsc3R5bGVzOmMuc3R5bGVzfHxmcyxfOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxpZDoiIn07SmMoYSk7Y29uc3QgZD1jLmRlcGVuZGVuY2llcztyZXR1cm4gYS5kaXJlY3RpdmVEZWZzPVIyKGQsITEpLGEucGlw'@;
put 'ZURlZnM9UjIoZCwhMCksYS5pZD1mdW5jdGlvbiBWbShjKXtsZXQgbD0wO2NvbnN0IGE9W2Muc2VsZWN0b3JzLGMubmdDb250ZW50U2VsZWN0b3JzLGMuaG9zdFZhcnMsYy5ob3N0QXR0cnMsYy5jb25zdHMsYy52YXJzLGMuZGVjbHMsYy5lbmNhcHN1bGF0aW9uLGMuc3RhbmRhbG9uZSxjLnNp'@;
put 'Z25hbHMsYy5leHBvcnRBcyxKU09OLnN0cmluZ2lmeShjLmlucHV0cyksSlNPTi5zdHJpbmdpZnkoYy5vdXRwdXRzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjLnR5cGUucHJvdG90eXBlKSwhIWMuY29udGVudFF1ZXJpZXMsISFjLnZpZXdRdWVyeV0uam9pbigifCIpO2Zvcihjb25z'@;
put 'dCBoIG9mIGEpbD1NYXRoLmltdWwoMzEsbCkraC5jaGFyQ29kZUF0KDApfDA7cmV0dXJuIGwrPTIxNDc0ODM2NDgsImMiK2x9KGEpLGF9KX1mdW5jdGlvbiBHMChjKXtyZXR1cm4gdHMoYyl8fEthKGMpfWZ1bmN0aW9uIFAxKGMpe3JldHVybiBudWxsIT09Y31mdW5jdGlvbiBzaShjKXtyZXR1'@;
put 'cm4gTG8oKCk9Pih7dHlwZTpjLnR5cGUsYm9vdHN0cmFwOmMuYm9vdHN0cmFwfHxmcyxkZWNsYXJhdGlvbnM6Yy5kZWNsYXJhdGlvbnN8fGZzLGltcG9ydHM6Yy5pbXBvcnRzfHxmcyxleHBvcnRzOmMuZXhwb3J0c3x8ZnMsdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOmMu'@;
put 'c2NoZW1hc3x8bnVsbCxpZDpjLmlkfHxudWxsfSkpfWZ1bmN0aW9uICQwKGMsbCl7aWYobnVsbD09YylyZXR1cm4gT2M7Y29uc3QgYT17fTtmb3IoY29uc3QgZCBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9Y1tkXTtsZXQgZix2LFQ9UW4uTm9uZTtBcnJheS5pc0FycmF5'@;
put 'KGgpPyhUPWhbMF0sZj1oWzFdLHY9aFsyXT8/Zik6KGY9aCx2PWgpLGw/KGFbZl09VCE9PVFuLk5vbmU/W2QsVF06ZCxsW2ZdPXYpOmFbZl09ZH1yZXR1cm4gYX1mdW5jdGlvbiB2cihjKXtyZXR1cm4gTG8oKCk9Pntjb25zdCBsPXQzKGMpO3JldHVybiBKYyhsKSxsfSl9ZnVuY3Rpb24gRHMo'@;
put 'Yyl7cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIHRzKGMpe3JldHVybiBjW2sx'@;
put 'XXx8bnVsbH1mdW5jdGlvbiBLYShjKXtyZXR1cm4gY1tNZF18fG51bGx9ZnVuY3Rpb24gT2woYyl7cmV0dXJuIGNbR2ZdfHxudWxsfWZ1bmN0aW9uIHRjKGMsbCl7Y29uc3QgYT1jW3Z1XXx8bnVsbDtpZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke2RyKGMpfSBkb2VzIG5v'@;
put 'dCBoYXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIHQzKGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9yeTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpj'@;
put 'Lmhvc3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fE9jLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51'@;
put 'bGwsc3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8ZnMsdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2'@;
put 'ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czokMChjLmlucHV0cyxsKSxvdXRwdXRzOiQwKGMub3V0cHV0cyksZGVidWdJbmZvOm51bGx9fWZ1bmN0aW9uIEpjKGMpe2MuZmVhdHVyZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gUjIoYyxsKXtpZighYylyZXR1cm4g'@;
put 'bnVsbDtjb25zdCBhPWw/T2w6RzA7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcihQMSl9ZnVuY3Rpb24gam0oLi4uYyl7cmV0dXJue1x1MDI3NXByb3ZpZGVyczpfMCgwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24g'@;
put 'XzAoYywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtjb25zdCBmPXY9PnthLnB1c2godil9O3JldHVybiBTZChsLHY9Pntjb25zdCBUPXY7a2goVCxmLFtdLGQpJiYoaHx8PVtdLGgucHVzaChUKSl9KSx2b2lkIDAhPT1oJiZIcChoLGYpLGF9ZnVuY3Rpb24gSHAoYyxsKXtmb3Io'@;
put 'bGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3R7bmdNb2R1bGU6ZCxwcm92aWRlcnM6aH09Y1thXTtuMyhoLGY9PntsKGYsZCl9KX19ZnVuY3Rpb24ga2goYyxsLGEsZCl7aWYoIShjPVRpKGMpKSlyZXR1cm4hMTtsZXQgaD1udWxsLGY9S2koYyk7Y29uc3Qgdj0hZiYmdHMoYyk7aWYoZnx8'@;
put 'dil7aWYodiYmIXYuc3RhbmRhbG9uZSlyZXR1cm4hMTtoPWN9ZWxzZXtjb25zdCBZPWMubmdNb2R1bGU7aWYoZj1LaShZKSwhZilyZXR1cm4hMTtoPVl9Y29uc3QgVD1kLmhhcyhoKTtpZih2KXtpZihUKXJldHVybiExO2lmKGQuYWRkKGgpLHYuZGVwZW5kZW5jaWVzKXtjb25zdCBZPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiB2LmRlcGVuZGVuY2llcz92LmRlcGVuZGVuY2llcygpOnYuZGVwZW5kZW5jaWVzO2Zvcihjb25zdCByZSBvZiBZKWtoKHJlLGwsYSxkKX19ZWxzZXtpZighZilyZXR1cm4hMTt7aWYobnVsbCE9Zi5pbXBvcnRzJiYhVCl7bGV0IHJlO2QuYWRkKGgpO3RyeXtTZChmLmlt'@;
put 'cG9ydHMsZmU9PntraChmZSxsLGEsZCkmJihyZXx8PVtdLHJlLnB1c2goZmUpKX0pfWZpbmFsbHl7fXZvaWQgMCE9PXJlJiZIcChyZSxsKX1pZighVCl7Y29uc3QgcmU9U2woaCl8fCgoKT0+bmV3IGgpO2woe3Byb3ZpZGU6aCx1c2VGYWN0b3J5OnJlLGRlcHM6ZnN9LGgpLGwoe3Byb3ZpZGU6'@;
put 'SmYsdXNlVmFsdWU6aCxtdWx0aTohMH0saCksbCh7cHJvdmlkZTptMCx1c2VWYWx1ZTooKT0+ZnIoaCksbXVsdGk6ITB9LGgpfWNvbnN0IFk9Zi5wcm92aWRlcnM7aWYobnVsbCE9WSYmIVQpe2NvbnN0IHJlPWM7bjMoWSxmZT0+e2woZmUscmUpfSl9fX1yZXR1cm4gaCE9PWMmJnZvaWQgMCE9'@;
put 'PWMucHJvdmlkZXJzfWZ1bmN0aW9uIG4zKGMsbCl7Zm9yKGxldCBhIG9mIGMpRHUoYSkmJihhPWEuXHUwMjc1cHJvdmlkZXJzKSxBcnJheS5pc0FycmF5KGEpP24zKGEsbCk6bChhKX1jb25zdCBCbT1ybyh7cHJvdmlkZTpTdHJpbmcsdXNlVmFsdWU6cm99KTtmdW5jdGlvbiByMyhjKXtyZXR1'@;
put 'cm4gbnVsbCE9PWMmJiJvYmplY3QiPT10eXBlb2YgYyYmQm0gaW4gY31mdW5jdGlvbiBIMShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31jb25zdCBvMz1uZXcgWXIoIiIpLEswPXt9LFltPXt9O2xldCBzMztmdW5jdGlvbiB4ZCgpe3JldHVybiB2b2lkIDA9PT1zMyYmKHMzPW5ldyBB'@;
put 'MiksczN9Y2xhc3MgZGx7fWNsYXNzIFFjIGV4dGVuZHMgZGx7Z2V0IGRlc3Ryb3llZCgpe3JldHVybiB0aGlzLl9kZXN0cm95ZWR9Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLnBhcmVudD1hLHRoaXMuc291cmNlPWQsdGhpcy5zY29wZXM9aCx0aGlzLnJlY29yZHM9bmV3IE1h'@;
put 'cCx0aGlzLl9uZ09uRGVzdHJveUhvb2tzPW5ldyBTZXQsdGhpcy5fb25EZXN0cm95SG9va3M9W10sdGhpcy5fZGVzdHJveWVkPSExLFAyKGwsdj0+dGhpcy5wcm9jZXNzUHJvdmlkZXIodikpLHRoaXMucmVjb3Jkcy5zZXQoSTEsa2Qodm9pZCAwLHRoaXMpKSxoLmhhcygiZW52aXJvbm1lbnQi'@;
put 'KSYmdGhpcy5yZWNvcmRzLnNldChkbCxrZCh2b2lkIDAsdGhpcykpO2NvbnN0IGY9dGhpcy5yZWNvcmRzLmdldChvMyk7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBmLnZhbHVlJiZ0aGlzLnNjb3Blcy5hZGQoZi52YWx1ZSksdGhpcy5pbmplY3RvckRlZlR5cGVzPW5ldyBTZXQodGhpcy5n'@;
put 'ZXQoSmYsZnMsQWkuU2VsZikpfWRlc3Ryb3koKXt0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX2Rlc3Ryb3llZD0hMDtjb25zdCBsPXNlKG51bGwpO3RyeXtmb3IoY29uc3QgZCBvZiB0aGlzLl9uZ09uRGVzdHJveUhvb2tzKWQubmdPbkRlc3Ryb3koKTtjb25zdCBhPXRoaXMuX29u'@;
put 'RGVzdHJveUhvb2tzO3RoaXMuX29uRGVzdHJveUhvb2tzPVtdO2Zvcihjb25zdCBkIG9mIGEpZCgpfWZpbmFsbHl7dGhpcy5yZWNvcmRzLmNsZWFyKCksdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5jbGVhcigpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcy5jbGVhcigpLHNlKGwpfX1vbkRlc3Ryb3ko'@;
put 'bCl7cmV0dXJuIHRoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksdGhpcy5fb25EZXN0cm95SG9va3MucHVzaChsKSwoKT0+dGhpcy5yZW1vdmVPbkRlc3Ryb3kobCl9cnVuSW5Db250ZXh0KGwpe3RoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCk7Y29uc3QgYT1adSh0aGlzKSxkPVdzKHZvaWQgMCk7'@;
put 'dHJ5e3JldHVybiBsKCl9ZmluYWxseXtadShhKSxXcyhkKX19Z2V0KGwsYT15dSxkPUFpLkRlZmF1bHQpe2lmKHRoaXMuYXNzZXJ0Tm90RGVzdHJveWVkKCksbC5oYXNPd25Qcm9wZXJ0eShUcCkpcmV0dXJuIGxbVHBdKHRoaXMpO2Q9VDIoZCk7Y29uc3QgZj1adSh0aGlzKSx2PVdzKHZvaWQg'@;
put 'MCk7dHJ5e2lmKCEoZCZBaS5Ta2lwU2VsZikpe2xldCBZPXRoaXMucmVjb3Jkcy5nZXQobCk7aWYodm9pZCAwPT09WSl7Y29uc3QgcmU9ZnVuY3Rpb24gVW0oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIFlyfShsKSYmSWMo'@;
put 'bCk7WT1yZSYmdGhpcy5pbmplY3RhYmxlRGVmSW5TY29wZShyZSk/a2QoTzIobCksSzApOm51bGwsdGhpcy5yZWNvcmRzLnNldChsLFkpfWlmKG51bGwhPVkpcmV0dXJuIHRoaXMuaHlkcmF0ZShsLFkpfXJldHVybihkJkFpLlNlbGY/eGQoKTp0aGlzLnBhcmVudCkuZ2V0KGwsYT1kJkFpLk9w'@;
put 'dGlvbmFsJiZhPT09eXU/bnVsbDphKX1jYXRjaChUKXtpZigiTnVsbEluamVjdG9yRXJyb3IiPT09VC5uYW1lKXtpZigoVFtDbF09VFtDbF18fFtdKS51bnNoaWZ0KGRyKGwpKSxmKXRocm93IFQ7cmV0dXJuIGZ1bmN0aW9uIFQxKGMsbCxhLGQpe2NvbnN0IGg9Y1tDbF07dGhyb3cgbFtJb10m'@;
put 'JmgudW5zaGlmdChsW0lvXSksYy5tZXNzYWdlPWZ1bmN0aW9uIEQxKGMsbCxhLGQ9bnVsbCl7Yz1jJiYiXG4iPT09Yy5jaGFyQXQoMCkmJiJcdTAyNzUiPT1jLmNoYXJBdCgxKT9jLnNsaWNlKDIpOmM7bGV0IGg9ZHIobCk7aWYoQXJyYXkuaXNBcnJheShsKSloPWwubWFwKGRyKS5qb2luKCIg'@;
put 'LT4gIik7ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIGwpe2xldCBmPVtdO2ZvcihsZXQgdiBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkodikpe2xldCBUPWxbdl07Zi5wdXNoKHYrIjoiKygic3RyaW5nIj09dHlwZW9mIFQ/SlNPTi5zdHJpbmdpZnkoVCk6ZHIoVCkpKX1oPWB7JHtmLmpvaW4o'@;
put 'IiwgIil9fWB9cmV0dXJuYCR7YX0ke2Q/IigiK2QrIikiOiIifVske2h9XTogJHtjLnJlcGxhY2UoQW0sIlxuICAiKX1gfSgiXG4iK2MubWVzc2FnZSxoLGEsZCksYy5uZ1Rva2VuUGF0aD1oLGNbQ2xdPW51bGwsY30oVCxsLCJSM0luamVjdG9yRXJyb3IiLHRoaXMuc291cmNlKX10aHJvdyBU'@;
put 'fWZpbmFsbHl7V3ModiksWnUoZil9fXJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpe2NvbnN0IGw9c2UobnVsbCksYT1adSh0aGlzKSxkPVdzKHZvaWQgMCk7dHJ5e2NvbnN0IGY9dGhpcy5nZXQobTAsZnMsQWkuU2VsZik7Zm9yKGNvbnN0IHYgb2YgZil2KCl9ZmluYWxseXtadShhKSxX'@;
put 'cyhkKSxzZShsKX19dG9TdHJpbmcoKXtjb25zdCBsPVtdLGE9dGhpcy5yZWNvcmRzO2Zvcihjb25zdCBkIG9mIGEua2V5cygpKWwucHVzaChkcihkKSk7cmV0dXJuYFIzSW5qZWN0b3JbJHtsLmpvaW4oIiwgIil9XWB9YXNzZXJ0Tm90RGVzdHJveWVkKCl7aWYodGhpcy5fZGVzdHJveWVkKXRo'@;
put 'cm93IG5ldyB6bigyMDUsITEpfXByb2Nlc3NQcm92aWRlcihsKXtsZXQgYT1IMShsPVRpKGwpKT9sOlRpKGwmJmwucHJvdmlkZSk7Y29uc3QgZD1mdW5jdGlvbiBhMyhjKXtyZXR1cm4gcjMoYyk/a2Qodm9pZCAwLGMudXNlVmFsdWUpOmtkKEJwKGMpLEswKX0obCk7aWYoIUgxKGwpJiYhMD09'@;
put 'PWwubXVsdGkpe2xldCBoPXRoaXMucmVjb3Jkcy5nZXQoYSk7aHx8KGg9a2Qodm9pZCAwLEswLCEwKSxoLmZhY3Rvcnk9KCk9PkQyKGgubXVsdGkpLHRoaXMucmVjb3Jkcy5zZXQoYSxoKSksYT1sLGgubXVsdGkucHVzaChsKX10aGlzLnJlY29yZHMuc2V0KGEsZCl9aHlkcmF0ZShsLGEpe2Nv'@;
put 'bnN0IGQ9c2UobnVsbCk7dHJ5e3JldHVybiBhLnZhbHVlPT09SzAmJihhLnZhbHVlPVltLGEudmFsdWU9YS5mYWN0b3J5KCkpLCJvYmplY3QiPT10eXBlb2YgYS52YWx1ZSYmYS52YWx1ZSYmZnVuY3Rpb24gbDMoYyl7cmV0dXJuIG51bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBjLm5nT25EZXN0cm95fShhLnZhbHVlKSYmdGhpcy5fbmdPbkRlc3Ryb3lIb29rcy5hZGQoYS52YWx1ZSksYS52YWx1ZX1maW5hbGx5e3NlKGQpfX1pbmplY3RhYmxlRGVmSW5TY29wZShsKXtpZighbC5wcm92aWRlZEluKXJldHVybiExO2NvbnN0IGE9VGkobC5wcm92'@;
put 'aWRlZEluKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/ImFueSI9PT1hfHx0aGlzLnNjb3Blcy5oYXMoYSk6dGhpcy5pbmplY3RvckRlZlR5cGVzLmhhcyhhKX1yZW1vdmVPbkRlc3Ryb3kobCl7Y29uc3QgYT10aGlzLl9vbkRlc3Ryb3lIb29rcy5pbmRleE9mKGwpOy0xIT09YSYmdGhpcy5f'@;
put 'b25EZXN0cm95SG9va3Muc3BsaWNlKGEsMSl9fWZ1bmN0aW9uIE8yKGMpe2NvbnN0IGw9SWMoYyksYT1udWxsIT09bD9sLmZhY3Rvcnk6U2woYyk7aWYobnVsbCE9PWEpcmV0dXJuIGE7aWYoYyBpbnN0YW5jZW9mIFlyKXRocm93IG5ldyB6bigyMDQsITEpO2lmKGMgaW5zdGFuY2VvZiBGdW5j'@;
put 'dGlvbilyZXR1cm4gZnVuY3Rpb24ganAoYyl7aWYoYy5sZW5ndGg+MCl0aHJvdyBuZXcgem4oMjA0LCExKTtjb25zdCBhPWZ1bmN0aW9uIGFsKGMpe3JldHVybiBjJiYoY1skbl18fGNbQnJdKXx8bnVsbH0oYyk7cmV0dXJuIG51bGwhPT1hPygpPT5hLmZhY3RvcnkoYyk6KCk9Pm5ldyBjfShj'@;
put 'KTt0aHJvdyBuZXcgem4oMjA0LCExKX1mdW5jdGlvbiBCcChjLGwsYSl7bGV0IGQ7aWYoSDEoYykpe2NvbnN0IGg9VGkoYyk7cmV0dXJuIFNsKGgpfHxPMihoKX1pZihyMyhjKSlkPSgpPT5UaShjLnVzZVZhbHVlKTtlbHNlIGlmKGZ1bmN0aW9uIFZwKGMpe3JldHVybiEoIWN8fCFjLnVzZUZh'@;
put 'Y3RvcnkpfShjKSlkPSgpPT5jLnVzZUZhY3RvcnkoLi4uRDIoYy5kZXBzfHxbXSkpO2Vsc2UgaWYoZnVuY3Rpb24gTnAoYyl7cmV0dXJuISghY3x8IWMudXNlRXhpc3RpbmcpfShjKSlkPSgpPT5mcihUaShjLnVzZUV4aXN0aW5nKSk7ZWxzZXtjb25zdCBoPVRpKGMmJihjLnVzZUNsYXNzfHxj'@;
put 'LnByb3ZpZGUpKTtpZighZnVuY3Rpb24gem0oYyl7cmV0dXJuISFjLmRlcHN9KGMpKXJldHVybiBTbChoKXx8TzIoaCk7ZD0oKT0+bmV3IGgoLi4uRDIoYy5kZXBzKSl9cmV0dXJuIGR9ZnVuY3Rpb24ga2QoYyxsLGE9ITEpe3JldHVybntmYWN0b3J5OmMsdmFsdWU6bCxtdWx0aTphP1tdOnZv'@;
put 'aWQgMH19ZnVuY3Rpb24gUDIoYyxsKXtmb3IoY29uc3QgYSBvZiBjKUFycmF5LmlzQXJyYXkoYSk/UDIoYSxsKTphJiZEdShhKT9QMihhLlx1MDI3NXByb3ZpZGVycyxsKTpsKGEpfWZ1bmN0aW9uIGV1KGMsbCl7YyBpbnN0YW5jZW9mIFFjJiZjLmFzc2VydE5vdERlc3Ryb3llZCgpO2NvbnN0'@;
put 'IGQ9WnUoYyksaD1Xcyh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7WnUoZCksV3MoaCl9fWZ1bmN0aW9uIFlwKCl7cmV0dXJuIHZvaWQgMCE9PUUyKCl8fG51bGwhPWZ1bmN0aW9uIExtKCl7cmV0dXJuIENkfSgpfWNvbnN0IHUzPUZ1bmN0aW9uO2NvbnN0IENhPTAseGk9MSxwbz0y'@;
put 'LFFhPTMsbmE9NCxqYT01LGtsPTYsd3U9NyxyYT04LGhsPTksSXU9MTAsT289MTEsdjA9MTIsVGg9MTMsZ2M9MTQsQXM9MTUsRGg9MTYsajE9MTcsR3U9MTgsUGM9MTksSjA9MjAsUTA9MjEsSDI9MjIsQjE9MjMsem89MjUsaDM9MSxPYT03LEVkPTksZWw9MTA7dmFyIE4yPWZ1bmN0aW9uKGMp'@;
put 'e3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLkhhc1RyYW5zcGxhbnRlZFZpZXdzPTJdPSJIYXNUcmFuc3BsYW50ZWRWaWV3cyIsY30oTjJ8fHt9KTtmdW5jdGlvbiByYyhjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjW2gzXX1mdW5jdGlvbiBpYyhj'@;
put 'KXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmITA9PT1jW2gzXX1mdW5jdGlvbiBQbChjKXtyZXR1cm4hISg0JmMuZmxhZ3MpfWZ1bmN0aW9uIFkxKGMpe3JldHVybiBjLmNvbXBvbmVudE9mZnNldD4tMX1mdW5jdGlvbiBmbChjKXtyZXR1cm4hKDEmfmMuZmxhZ3MpfWZ1bmN0aW9uIFNhKGMp'@;
put 'e3JldHVybiEhYy50ZW1wbGF0ZX1mdW5jdGlvbiBMaChjKXtyZXR1cm4hISg1MTImY1twb10pfWNsYXNzIFpBe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnByZXZpb3VzVmFsdWU9bCx0aGlzLmN1cnJlbnRWYWx1ZT1hLHRoaXMuZmlyc3RDaGFuZ2U9ZH1pc0ZpcnN0Q2hhbmdlKCl7cmV0dXJu'@;
put 'IHRoaXMuZmlyc3RDaGFuZ2V9fWZ1bmN0aW9uIGtNKGMsbCxhLGQpe251bGwhPT1sP2wuYXBwbHlWYWx1ZVRvSW5wdXRTaWduYWwobCxkKTpjW2FdPWR9ZnVuY3Rpb24gQmEoKXtyZXR1cm4gRU19ZnVuY3Rpb24gRU0oYyl7cmV0dXJuIGMudHlwZS5wcm90b3R5cGUubmdPbkNoYW5nZXMmJihj'@;
put 'LnNldElucHV0PUdBKSxXQX1mdW5jdGlvbiBXQSgpe2NvbnN0IGM9RE0odGhpcyksbD1jPy5jdXJyZW50O2lmKGwpe2NvbnN0IGE9Yy5wcmV2aW91cztpZihhPT09T2MpYy5wcmV2aW91cz1sO2Vsc2UgZm9yKGxldCBkIGluIGwpYVtkXT1sW2RdO2MuY3VycmVudD1udWxsLHRoaXMubmdPbkNo'@;
put 'YW5nZXMobCl9fWZ1bmN0aW9uIEdBKGMsbCxhLGQsaCl7Y29uc3QgZj10aGlzLmRlY2xhcmVkSW5wdXRzW2RdLHY9RE0oYyl8fGZ1bmN0aW9uICRBKGMsbCl7cmV0dXJuIGNbVE1dPWx9KGMse3ByZXZpb3VzOk9jLGN1cnJlbnQ6bnVsbH0pLFQ9di5jdXJyZW50fHwodi5jdXJyZW50PXt9KSxZ'@;
put 'PXYucHJldmlvdXMscmU9WVtmXTtUW2ZdPW5ldyBaQShyZSYmcmUuY3VycmVudFZhbHVlLGEsWT09PU9jKSxrTShjLGwsaCxhKX1CYS5uZ0luaGVyaXQ9ITA7Y29uc3QgVE09Il9fbmdTaW1wbGVDaGFuZ2VzX18iO2Z1bmN0aW9uIERNKGMpe3JldHVybiBjW1RNXXx8bnVsbH1jb25zdCBEZD1m'@;
put 'dW5jdGlvbihjLGwsYSl7fTtsZXQgTE09ITE7ZnVuY3Rpb24geGEoYyl7Zm9yKDtBcnJheS5pc0FycmF5KGMpOyljPWNbQ2FdO3JldHVybiBjfWZ1bmN0aW9uIFVwKGMsbCl7cmV0dXJuIHhhKGxbY10pfWZ1bmN0aW9uIFJ1KGMsbCl7cmV0dXJuIHhhKGxbYy5pbmRleF0pfWZ1bmN0aW9uICRt'@;
put 'KGMsbCl7cmV0dXJuIGMuZGF0YVtsXX1mdW5jdGlvbiBwMyhjLGwpe3JldHVybiBjW2xdfWZ1bmN0aW9uIHkwKGMsbCl7Y29uc3QgYT1sW2NdO3JldHVybiByYyhhKT9hOmFbQ2FdfWZ1bmN0aW9uIHJfKGMpe3JldHVybiEoMTI4Jn5jW3BvXSl9ZnVuY3Rpb24gQWQoYyxsKXtyZXR1cm4gbnVs'@;
put 'bD09bD9udWxsOmNbbF19ZnVuY3Rpb24gaV8oYyl7Y1tqMV09MH1mdW5jdGlvbiBRQShjKXsxMDI0JmNbcG9dfHwoY1twb118PTEwMjQscl8oYykmJnFtKGMpKX1mdW5jdGlvbiBTNihjKXtyZXR1cm4hISg5MjE2JmNbcG9dfHxjW0IxXT8uZGlydHkpfWZ1bmN0aW9uIHNfKGMpe2NbSXVdLmNo'@;
put 'YW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDEpLFM2KGMpP3FtKGMpOjY0JmNbcG9dJiYoZnVuY3Rpb24gS0EoKXtyZXR1cm4gTE19KCk/KGNbcG9dfD0xMDI0LHFtKGMpKTpjW0l1XS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgpKX1mdW5jdGlvbiBxbShjKXtjW0l1'@;
put 'XS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgpO2xldCBsPW0zKGMpO2Zvcig7bnVsbCE9PWwmJiEoODE5MiZsW3BvXSkmJihsW3BvXXw9ODE5MixyXyhsKSk7KWw9bTMobCl9ZnVuY3Rpb24geDYoYyxsKXtpZighKDI1NiZ+Y1twb10pKXRocm93IG5ldyB6big5MTEsITEpO251'@;
put 'bGw9PT1jW1EwXSYmKGNbUTBdPVtdKSxjW1EwXS5wdXNoKGwpfWZ1bmN0aW9uIG0zKGMpe2NvbnN0IGw9Y1tRYV07cmV0dXJuIGljKGwpP2xbUWFdOmx9Y29uc3QgR289e2xGcmFtZTpWTShudWxsKSxiaW5kaW5nc0VuYWJsZWQ6ITAsc2tpcEh5ZHJhdGlvblJvb3RUTm9kZTpudWxsfTtmdW5j'@;
put 'dGlvbiBQTSgpe3JldHVybiBHby5iaW5kaW5nc0VuYWJsZWR9ZnVuY3Rpb24gWnAoKXtyZXR1cm4gbnVsbCE9PUdvLnNraXBIeWRyYXRpb25Sb290VE5vZGV9ZnVuY3Rpb24gTnIoKXtyZXR1cm4gR28ubEZyYW1lLmxWaWV3fWZ1bmN0aW9uIGtzKCl7cmV0dXJuIEdvLmxGcmFtZS50Vmlld31m'@;
put 'dW5jdGlvbiBTdChjKXtyZXR1cm4gR28ubEZyYW1lLmNvbnRleHRMVmlldz1jLGNbcmFdfWZ1bmN0aW9uIHh0KGMpe3JldHVybiBHby5sRnJhbWUuY29udGV4dExWaWV3PW51bGwsY31mdW5jdGlvbiBmYSgpe2xldCBjPWFfKCk7Zm9yKDtudWxsIT09YyYmNjQ9PT1jLnR5cGU7KWM9Yy5wYXJl'@;
put 'bnQ7cmV0dXJuIGN9ZnVuY3Rpb24gYV8oKXtyZXR1cm4gR28ubEZyYW1lLmN1cnJlbnRUTm9kZX1mdW5jdGlvbiBMZChjLGwpe2NvbnN0IGE9R28ubEZyYW1lO2EuY3VycmVudFROb2RlPWMsYS5pc1BhcmVudD1sfWZ1bmN0aW9uIGxfKCl7cmV0dXJuIEdvLmxGcmFtZS5pc1BhcmVudH1mdW5j'@;
put 'dGlvbiBjXygpe0dvLmxGcmFtZS5pc1BhcmVudD0hMX1mdW5jdGlvbiBPdSgpe2NvbnN0IGM9R28ubEZyYW1lO2xldCBsPWMuYmluZGluZ1Jvb3RJbmRleDtyZXR1cm4tMT09PWwmJihsPWMuYmluZGluZ1Jvb3RJbmRleD1jLnRWaWV3LmJpbmRpbmdTdGFydEluZGV4KSxsfWZ1bmN0aW9uIFJo'@;
put 'KCl7cmV0dXJuIEdvLmxGcmFtZS5iaW5kaW5nSW5kZXh9ZnVuY3Rpb24gejEoKXtyZXR1cm4gR28ubEZyYW1lLmJpbmRpbmdJbmRleCsrfWZ1bmN0aW9uIE9oKGMpe2NvbnN0IGw9R28ubEZyYW1lLGE9bC5iaW5kaW5nSW5kZXg7cmV0dXJuIGwuYmluZGluZ0luZGV4PWwuYmluZGluZ0luZGV4'@;
put 'K2MsYX1mdW5jdGlvbiBjTChjLGwpe2NvbnN0IGE9R28ubEZyYW1lO2EuYmluZGluZ0luZGV4PWEuYmluZGluZ1Jvb3RJbmRleD1jLHVfKGwpfWZ1bmN0aW9uIHVfKGMpe0dvLmxGcmFtZS5jdXJyZW50RGlyZWN0aXZlSW5kZXg9Y31mdW5jdGlvbiBkXyhjKXtjb25zdCBsPUdvLmxGcmFtZS5j'@;
put 'dXJyZW50RGlyZWN0aXZlSW5kZXg7cmV0dXJuLTE9PT1sP251bGw6Y1tsXX1mdW5jdGlvbiBoXygpe3JldHVybiBHby5sRnJhbWUuY3VycmVudFF1ZXJ5SW5kZXh9ZnVuY3Rpb24gVjIoYyl7R28ubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4PWN9ZnVuY3Rpb24gZl8oYyl7Y29uc3QgbD1jW3hp'@;
put 'XTtyZXR1cm4gMj09PWwudHlwZT9sLmRlY2xUTm9kZToxPT09bC50eXBlP2NbamFdOm51bGx9ZnVuY3Rpb24gRTYoYyxsLGEpe2lmKGEmQWkuU2tpcFNlbGYpe2xldCBoPWwsZj1jO2Zvcig7IShoPWgucGFyZW50LG51bGwhPT1ofHxhJkFpLkhvc3R8fChoPWZfKGYpLG51bGw9PT1ofHwoZj1m'@;
put 'W2djXSwxMCZoLnR5cGUpKSk7KTtpZihudWxsPT09aClyZXR1cm4hMTtsPWgsYz1mfWNvbnN0IGQ9R28ubEZyYW1lPWoyKCk7cmV0dXJuIGQuY3VycmVudFROb2RlPWwsZC5sVmlldz1jLCEwfWZ1bmN0aW9uIFhtKGMpe2NvbnN0IGw9ajIoKSxhPWNbeGldO0dvLmxGcmFtZT1sLGwuY3VycmVu'@;
put 'dFROb2RlPWEuZmlyc3RDaGlsZCxsLmxWaWV3PWMsbC50Vmlldz1hLGwuY29udGV4dExWaWV3PWMsbC5iaW5kaW5nSW5kZXg9YS5iaW5kaW5nU3RhcnRJbmRleCxsLmluSTE4bj0hMX1mdW5jdGlvbiBqMigpe2NvbnN0IGM9R28ubEZyYW1lLGw9bnVsbD09PWM/bnVsbDpjLmNoaWxkO3JldHVy'@;
put 'biBudWxsPT09bD9WTShjKTpsfWZ1bmN0aW9uIFZNKGMpe2NvbnN0IGw9e2N1cnJlbnRUTm9kZTpudWxsLGlzUGFyZW50OiEwLGxWaWV3Om51bGwsdFZpZXc6bnVsbCxzZWxlY3RlZEluZGV4Oi0xLGNvbnRleHRMVmlldzpudWxsLGVsZW1lbnREZXB0aENvdW50OjAsY3VycmVudE5hbWVzcGFj'@;
put 'ZTpudWxsLGN1cnJlbnREaXJlY3RpdmVJbmRleDotMSxiaW5kaW5nUm9vdEluZGV4Oi0xLGJpbmRpbmdJbmRleDotMSxjdXJyZW50UXVlcnlJbmRleDowLHBhcmVudDpjLGNoaWxkOm51bGwsaW5JMThuOiExfTtyZXR1cm4gbnVsbCE9PWMmJihjLmNoaWxkPWwpLGx9ZnVuY3Rpb24gVDYoKXtj'@;
put 'b25zdCBjPUdvLmxGcmFtZTtyZXR1cm4gR28ubEZyYW1lPWMucGFyZW50LGMuY3VycmVudFROb2RlPW51bGwsYy5sVmlldz1udWxsLGN9Y29uc3Qgak09VDY7ZnVuY3Rpb24gV3AoKXtjb25zdCBjPVQ2KCk7Yy5pc1BhcmVudD0hMCxjLnRWaWV3PW51bGwsYy5zZWxlY3RlZEluZGV4PS0xLGMu'@;
put 'Y29udGV4dExWaWV3PW51bGwsYy5lbGVtZW50RGVwdGhDb3VudD0wLGMuY3VycmVudERpcmVjdGl2ZUluZGV4PS0xLGMuY3VycmVudE5hbWVzcGFjZT1udWxsLGMuYmluZGluZ1Jvb3RJbmRleD0tMSxjLmJpbmRpbmdJbmRleD0tMSxjLmN1cnJlbnRRdWVyeUluZGV4PTB9ZnVuY3Rpb24gRmMo'@;
put 'KXtyZXR1cm4gR28ubEZyYW1lLnNlbGVjdGVkSW5kZXh9ZnVuY3Rpb24gZzMoYyl7R28ubEZyYW1lLnNlbGVjdGVkSW5kZXg9Y31mdW5jdGlvbiBhYSgpe2NvbnN0IGM9R28ubEZyYW1lO3JldHVybiAkbShjLnRWaWV3LGMuc2VsZWN0ZWRJbmRleCl9bGV0IFlNPSEwO2Z1bmN0aW9uIEptKCl7'@;
put 'cmV0dXJuIFlNfWZ1bmN0aW9uIElkKGMpe1lNPWN9ZnVuY3Rpb24gRDYoYyxsKXtmb3IobGV0IGE9bC5kaXJlY3RpdmVTdGFydCxkPWwuZGlyZWN0aXZlRW5kO2E8ZDthKyspe2NvbnN0IGY9Yy5kYXRhW2FdLnR5cGUucHJvdG90eXBlLHtuZ0FmdGVyQ29udGVudEluaXQ6dixuZ0FmdGVyQ29u'@;
put 'dGVudENoZWNrZWQ6VCxuZ0FmdGVyVmlld0luaXQ6WSxuZ0FmdGVyVmlld0NoZWNrZWQ6cmUsbmdPbkRlc3Ryb3k6ZmV9PWY7diYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsdiksVCYmKChjLmNvbnRlbnRIb29rcz8/PVtdKS5wdXNoKGEsVCksKGMuY29udGVudENoZWNrSG9va3M/'@;
put 'Pz1bXSkucHVzaChhLFQpKSxZJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxZKSxyZSYmKChjLnZpZXdIb29rcz8/PVtdKS5wdXNoKGEscmUpLChjLnZpZXdDaGVja0hvb2tzPz89W10pLnB1c2goYSxyZSkpLG51bGwhPWZlJiYoYy5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLGZlKX19'@;
put 'ZnVuY3Rpb24gQTYoYyxsLGEpe3pNKGMsbCwzLGEpfWZ1bmN0aW9uIEw2KGMsbCxhLGQpeygzJmNbcG9dKT09PWEmJnpNKGMsbCxhLGQpfWZ1bmN0aW9uIG1fKGMsbCl7bGV0IGE9Y1twb107KDMmYSk9PT1sJiYoYSY9MTYzODMsYSs9MSxjW3BvXT1hKX1mdW5jdGlvbiB6TShjLGwsYSxkKXtj'@;
put 'b25zdCBmPWQ/Py0xLHY9bC5sZW5ndGgtMTtsZXQgVD0wO2ZvcihsZXQgWT12b2lkIDAhPT1kPzY1NTM1JmNbajFdOjA7WTx2O1krKylpZigibnVtYmVyIj09dHlwZW9mIGxbWSsxXSl7aWYoVD1sW1ldLG51bGwhPWQmJlQ+PWQpYnJlYWt9ZWxzZSBsW1ldPDAmJihjW2oxXSs9NjU1MzYpLChU'@;
put 'PGZ8fC0xPT1mKSYmKGdMKGMsYSxsLFkpLGNbajFdPSg0Mjk0OTAxNzYwJmNbajFdKStZKzIpLFkrK31mdW5jdGlvbiBVTShjLGwpe0RkKDQsYyxsKTtjb25zdCBhPXNlKG51bGwpO3RyeXtsLmNhbGwoYyl9ZmluYWxseXtzZShhKSxEZCg1LGMsbCl9fWZ1bmN0aW9uIGdMKGMsbCxhLGQpe2Nv'@;
put 'bnN0IGg9YVtkXTwwLGY9YVtkKzFdLFQ9Y1toPy1hW2RdOmFbZF1dO2g/Y1twb10+PjE0PGNbajFdPj4xNiYmKDMmY1twb10pPT09bCYmKGNbcG9dKz0xNjM4NCxVTShULGYpKTpVTShULGYpfWNvbnN0IF8zPS0xO2NsYXNzIGIwe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmZhY3Rvcnk9bCx0'@;
put 'aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9YSx0aGlzLmluamVjdEltcGw9ZH19ZnVuY3Rpb24gSTYoYyl7cmV0dXJuIGMhPT1fM31mdW5jdGlvbiBRbShjKXtyZXR1cm4gMzI3NjcmY31mdW5jdGlvbiBlNShjLGwpe2xldCBhPWZ1bmN0aW9uIE1MKGMpe3JldHVy'@;
put 'biBjPj4xNn0oYyksZD1sO2Zvcig7YT4wOylkPWRbZ2NdLGEtLTtyZXR1cm4gZH1sZXQgX189ITA7ZnVuY3Rpb24gUjYoYyl7Y29uc3QgbD1fXztyZXR1cm4gX189YyxsfWNvbnN0IE82PTI1NSx2Xz01O2xldCBDTD0wO2NvbnN0IFJkPXt9O2Z1bmN0aW9uIFA2KGMsbCl7Y29uc3QgYT1GNihj'@;
put 'LGwpO2lmKC0xIT09YSlyZXR1cm4gYTtjb25zdCBkPWxbeGldO2QuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmplY3RvckluZGV4PWwubGVuZ3RoLHlfKGQuZGF0YSxjKSx5XyhsLG51bGwpLHlfKGQuYmx1ZXByaW50LG51bGwpKTtjb25zdCBoPUdwKGMsbCksZj1jLmluamVjdG9ySW5kZXg7aWYo'@;
put 'STYoaCkpe2NvbnN0IHY9UW0oaCksVD1lNShoLGwpLFk9VFt4aV0uZGF0YTtmb3IobGV0IHJlPTA7cmU8ODtyZSsrKWxbZityZV09VFt2K3JlXXxZW3YrcmVdfXJldHVybiBsW2YrOF09aCxmfWZ1bmN0aW9uIHlfKGMsbCl7Yy5wdXNoKDAsMCwwLDAsMCwwLDAsMCxsKX1mdW5jdGlvbiBGNihj'@;
put 'LGwpe3JldHVybi0xPT09Yy5pbmplY3RvckluZGV4fHxjLnBhcmVudCYmYy5wYXJlbnQuaW5qZWN0b3JJbmRleD09PWMuaW5qZWN0b3JJbmRleHx8bnVsbD09PWxbYy5pbmplY3RvckluZGV4KzhdPy0xOmMuaW5qZWN0b3JJbmRleH1mdW5jdGlvbiBHcChjLGwpe2lmKGMucGFyZW50JiYtMSE9'@;
put 'PWMucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIGMucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGE9MCxkPW51bGwsaD1sO2Zvcig7bnVsbCE9PWg7KXtpZihkPVoxKGgpLG51bGw9PT1kKXJldHVybiBfMztpZihhKyssaD1oW2djXSwtMSE9PWQuaW5qZWN0b3JJbmRleClyZXR1cm4gZC5p'@;
put 'bmplY3RvckluZGV4fGE8PDE2fXJldHVybiBfM31mdW5jdGlvbiB0MShjLGwsYSl7IWZ1bmN0aW9uIFNMKGMsbCxhKXtsZXQgZDsic3RyaW5nIj09dHlwZW9mIGE/ZD1hLmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNPd25Qcm9wZXJ0eShiaCkmJihkPWFbYmhdKSxudWxsPT1kJiYoZD1hW2JoXT1D'@;
put 'TCsrKTtjb25zdCBoPWQmTzY7bC5kYXRhW2MrKGg+PnZfKV18PTE8PGh9KGMsbCxhKX1mdW5jdGlvbiBaTShjLGwsYSl7aWYoYSZBaS5PcHRpb25hbHx8dm9pZCAwIT09YylyZXR1cm4gYztIcygpfWZ1bmN0aW9uIFUxKGMsbCxhLGQpe2lmKGEmQWkuT3B0aW9uYWwmJnZvaWQgMD09PWQmJihk'@;
put 'PW51bGwpLCEoYSYoQWkuU2VsZnxBaS5Ib3N0KSkpe2NvbnN0IGg9Y1tobF0sZj1Xcyh2b2lkIDApO3RyeXtyZXR1cm4gaD9oLmdldChsLGQsYSZBaS5PcHRpb25hbCk6cDAobCxkLGEmQWkuT3B0aW9uYWwpfWZpbmFsbHl7V3MoZil9fXJldHVybiBaTShkLDAsYSl9ZnVuY3Rpb24gV00oYyxs'@;
put 'LGEsZD1BaS5EZWZhdWx0LGgpe2lmKG51bGwhPT1jKXtpZigyMDQ4JmxbcG9dJiYhKGQmQWkuU2VsZikpe2NvbnN0IHY9ZnVuY3Rpb24gWTIoYyxsLGEsZCxoKXtsZXQgZj1jLHY9bDtmb3IoO251bGwhPT1mJiZudWxsIT09diYmMjA0OCZ2W3BvXSYmISg1MTImdltwb10pOyl7Y29uc3QgVD0k'@;
put 'cChmLHYsYSxkfEFpLlNlbGYsUmQpO2lmKFQhPT1SZClyZXR1cm4gVDtsZXQgWT1mLnBhcmVudDtpZighWSl7Y29uc3QgcmU9dltKMF07aWYocmUpe2NvbnN0IGZlPXJlLmdldChhLFJkLGQpO2lmKGZlIT09UmQpcmV0dXJuIGZlfVk9WjEodiksdj12W2djXX1mPVl9cmV0dXJuIGh9KGMsbCxh'@;
put 'LGQsUmQpO2lmKHYhPT1SZClyZXR1cm4gdn1jb25zdCBmPSRwKGMsbCxhLGQsUmQpO2lmKGYhPT1SZClyZXR1cm4gZn1yZXR1cm4gVTEobCxhLGQsaCl9ZnVuY3Rpb24gJHAoYyxsLGEsZCxoKXtjb25zdCBmPWZ1bmN0aW9uIEhsKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYy5j'@;
put 'aGFyQ29kZUF0KDApfHwwO2NvbnN0IGw9Yy5oYXNPd25Qcm9wZXJ0eShiaCk/Y1tiaF06dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sPj0wP2wmTzY6JHU6bH0oYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpe2lmKCFFNihsLGMsZCkpcmV0dXJuIGQmQWkuSG9zdD9aTShoLDAs'@;
put 'ZCk6VTEobCxhLGQsaCk7dHJ5e2xldCB2O2lmKHY9ZihkKSxudWxsIT12fHxkJkFpLk9wdGlvbmFsKXJldHVybiB2O0hzKCl9ZmluYWxseXtqTSgpfX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZil7bGV0IHY9bnVsbCxUPUY2KGMsbCksWT1fMyxyZT1kJkFpLkhvc3Q/bFtBc11bamFdOm51'@;
put 'bGw7Zm9yKCgtMT09PVR8fGQmQWkuU2tpcFNlbGYpJiYoWT0tMT09PVQ/R3AoYyxsKTpsW1QrOF0sWSE9PV8zJiZLcChkLCExKT8odj1sW3hpXSxUPVFtKFkpLGw9ZTUoWSxsKSk6VD0tMSk7LTEhPT1UOyl7Y29uc3QgZmU9bFt4aV07aWYocXAoZixULGZlLmRhdGEpKXtjb25zdCBfZT1HTShU'@;
put 'LGwsYSx2LGQscmUpO2lmKF9lIT09UmQpcmV0dXJuIF9lfVk9bFtUKzhdLFkhPT1fMyYmS3AoZCxsW3hpXS5kYXRhW1QrOF09PT1yZSkmJnFwKGYsVCxsKT8odj1mZSxUPVFtKFkpLGw9ZTUoWSxsKSk6VD0tMX19cmV0dXJuIGh9ZnVuY3Rpb24gR00oYyxsLGEsZCxoLGYpe2NvbnN0IHY9bFt4'@;
put 'aV0sVD12LmRhdGFbYys4XSxmZT1INihULHYsYSxudWxsPT1kP1kxKFQpJiZfXzpkIT12JiYhISgzJlQudHlwZSksaCZBaS5Ib3N0JiZmPT09VCk7cmV0dXJuIG51bGwhPT1mZT92MyhsLHYsZmUsVCk6UmR9ZnVuY3Rpb24gSDYoYyxsLGEsZCxoKXtjb25zdCBmPWMucHJvdmlkZXJJbmRleGVz'@;
put 'LHY9bC5kYXRhLFQ9MTA0ODU3NSZmLFk9Yy5kaXJlY3RpdmVTdGFydCxmZT1mPj4yMCxrZT1oP1QrZmU6Yy5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBXZT1kP1Q6VCtmZTtXZTxrZTtXZSsrKXtjb25zdCBKZT12W1dlXTtpZihXZTxZJiZhPT09SmV8fFdlPj1ZJiZKZS50eXBlPT09YSlyZXR1cm4g'@;
put 'V2V9aWYoaCl7Y29uc3QgV2U9dltZXTtpZihXZSYmU2EoV2UpJiZXZS50eXBlPT09YSlyZXR1cm4gWX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB2MyhjLGwsYSxkKXtsZXQgaD1jW2FdO2NvbnN0IGY9bC5kYXRhO2lmKGZ1bmN0aW9uIF9MKGMpe3JldHVybiBjIGluc3RhbmNlb2YgYjB9KGgpKXtj'@;
put 'b25zdCB2PWg7di5yZXNvbHZpbmcmJmZ1bmN0aW9uIERtKGMsbCl7dGhyb3cgbCYmbC5qb2luKCIgPiAiKSxuZXcgem4oLTIwMCxjKX0oZnVuY3Rpb24gZm8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5uYW1lfHxjLnRvU3RyaW5nKCk6Im9iamVjdCI9PXR5cGVvZiBjJiZudWxs'@;
put 'IT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50eXBlP2MudHlwZS5uYW1lfHxjLnR5cGUudG9TdHJpbmcoKTpZbyhjKX0oZlthXSkpO2NvbnN0IFQ9UjYodi5jYW5TZWVWaWV3UHJvdmlkZXJzKTt2LnJlc29sdmluZz0hMDtjb25zdCByZT12LmluamVjdEltcGw/V3Modi5pbmplY3RJbXBsKTpu'@;
put 'dWxsO0U2KGMsZCxBaS5EZWZhdWx0KTt0cnl7aD1jW2FdPXYuZmFjdG9yeSh2b2lkIDAsZixjLGQpLGwuZmlyc3RDcmVhdGVQYXNzJiZhPj1kLmRpcmVjdGl2ZVN0YXJ0JiZmdW5jdGlvbiBtTChjLGwsYSl7Y29uc3R7bmdPbkNoYW5nZXM6ZCxuZ09uSW5pdDpoLG5nRG9DaGVjazpmfT1sLnR5'@;
put 'cGUucHJvdG90eXBlO2lmKGQpe2NvbnN0IHY9RU0obCk7KGEucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGMsdiksKGEucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYyx2KX1oJiYoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goMC1jLGgpLGYmJigoYS5wcmVPcmRlckhvb2tzPz89'@;
put 'W10pLnB1c2goYyxmKSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLGYpKX0oYSxmW2FdLGwpfWZpbmFsbHl7bnVsbCE9PXJlJiZXcyhyZSksUjYoVCksdi5yZXNvbHZpbmc9ITEsak0oKX19cmV0dXJuIGh9ZnVuY3Rpb24gcXAoYyxsLGEpe3JldHVybiEhKGFbbCsoYz4+dl8p'@;
put 'XSYxPDxjKX1mdW5jdGlvbiBLcChjLGwpe3JldHVybiEoYyZBaS5TZWxmfHxjJkFpLkhvc3QmJmwpfWNsYXNzIEhje2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdE5vZGU9bCx0aGlzLl9sVmlldz1hfWdldChsLGEsZCl7cmV0dXJuIFdNKHRoaXMuX3ROb2RlLHRoaXMuX2xWaWV3LGwsVDIoZCks'@;
put 'YSl9fWZ1bmN0aW9uICR1KCl7cmV0dXJuIG5ldyBIYyhmYSgpLE5yKCkpfWZ1bmN0aW9uIGlhKGMpe3JldHVybiBMbygoKT0+e2NvbnN0IGw9Yy5wcm90b3R5cGUuY29uc3RydWN0b3IsYT1sW3JzXXx8RmgobCksZD1PYmplY3QucHJvdG90eXBlO2xldCBoPU9iamVjdC5nZXRQcm90b3R5cGVP'@;
put 'ZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtoJiZoIT09ZDspe2NvbnN0IGY9aFtyc118fEZoKGgpO2lmKGYmJmYhPT1hKXJldHVybiBmO2g9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpfXJldHVybiBmPT5uZXcgZn0pfWZ1bmN0aW9uIEZoKGMpe3JldHVybiAkYShjKT8oKT0+e2Nv'@;
put 'bnN0IGw9RmgoVGkoYykpO3JldHVybiBsJiZsKCl9OlNsKGMpfWZ1bmN0aW9uIFoxKGMpe2NvbnN0IGw9Y1t4aV0sYT1sLnR5cGU7cmV0dXJuIDI9PT1hP2wuZGVjbFROb2RlOjE9PT1hP2NbamFdOm51bGx9ZnVuY3Rpb24gSGgoYyl7cmV0dXJuIGZ1bmN0aW9uIHhMKGMsbCl7aWYoImNsYXNz'@;
put 'Ij09PWwpcmV0dXJuIGMuY2xhc3NlcztpZigic3R5bGUiPT09bClyZXR1cm4gYy5zdHlsZXM7Y29uc3QgYT1jLmF0dHJzO2lmKGEpe2NvbnN0IGQ9YS5sZW5ndGg7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9YVtoXTtpZihMMihmKSlicmVhaztpZigwPT09ZiloKz0yO2Vsc2UgaWYoIm51'@;
put 'bWJlciI9PXR5cGVvZiBmKWZvcihoKys7aDxkJiYic3RyaW5nIj09dHlwZW9mIGFbaF07KWgrKztlbHNle2lmKGY9PT1sKXJldHVybiBhW2grMV07aCs9Mn19fXJldHVybiBudWxsfShmYSgpLGMpfWZ1bmN0aW9uIHhfKGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBoPWIzKGMsbCxhLGQpO3Jl'@;
put 'dHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gYjMoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxmcyxqbShjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6ZHIoYykpLG5ldyBRYyhmLGx8fHhkKCks'@;
put 'ZHx8bnVsbCxoKX1sZXQgcGE9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlRIUk9XX0lGX05PVF9GT1VORD15dTtzdGF0aWMjdD10aGlzLk5VTEw9bmV3IEEyO3N0YXRpYyBjcmVhdGUoYSxkKXtpZihBcnJheS5pc0FycmF5KGEpKXJldHVybiB4Xyh7bmFtZToiIn0sZCxhLCIiKTt7Y29u'@;
put 'c3QgaD1hLm5hbWU/PyIiO3JldHVybiB4Xyh7bmFtZTpofSxhLnBhcmVudCxhLnByb3ZpZGVycyxoKX19c3RhdGljI249dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+ZnIoSTEpfSk7c3RhdGljI3I9dGhpcy5fX05HX0VMRU1FTlRfSURf'@;
put 'Xz0tMX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gUXAoYyl7cmV0dXJuIGMubmdPcmlnaW5hbEVycm9yfWNsYXNzIE9ke2NvbnN0cnVjdG9yKCl7dGhpcy5fY29uc29sZT1jb25zb2xlfWhhbmRsZUVycm9yKGwpe2NvbnN0IGE9dGhpcy5fZmluZE9yaWdpbmFsRXJyb3IobCk7dGhpcy5fY29uc29s'@;
put 'ZS5lcnJvcigiRVJST1IiLGwpLGEmJnRoaXMuX2NvbnNvbGUuZXJyb3IoIk9SSUdJTkFMIEVSUk9SIixhKX1fZmluZE9yaWdpbmFsRXJyb3IobCl7bGV0IGE9bCYmUXAobCk7Zm9yKDthJiZRcChhKTspYT1RcChhKTtyZXR1cm4gYXx8bnVsbH19Y29uc3QgWE09bmV3IFlyKCIiLHtwcm92aWRl'@;
put 'ZEluOiJyb290IixmYWN0b3J5OigpPT5WcihPZCkuaGFuZGxlRXJyb3IuYmluZCh2b2lkIDApfSk7bGV0IGU0PSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5fX05HX0VMRU1FTlRfSURfXz1VMjtzdGF0aWMjdD10aGlzLl9fTkdfRU5WX0lEX189YT0+YX1yZXR1cm4gY30pKCk7Y2xhc3Mg'@;
put 'ejIgZXh0ZW5kcyBlNHtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2xWaWV3PWx9b25EZXN0cm95KGwpe3JldHVybiB4Nih0aGlzLl9sVmlldyxsKSwoKT0+ZnVuY3Rpb24gazYoYyxsKXtpZihudWxsPT09Y1tRMF0pcmV0dXJuO2NvbnN0IGE9Y1tRMF0uaW5kZXhPZihsKTstMSE9PWEm'@;
put 'JmNbUTBdLnNwbGljZShhLDEpfSh0aGlzLl9sVmlldyxsKX19ZnVuY3Rpb24gVTIoKXtyZXR1cm4gbmV3IHoyKE5yKCkpfWZ1bmN0aW9uIFRMKCl7cmV0dXJuIHczKGZhKCksTnIoKSl9ZnVuY3Rpb24gdzMoYyxsKXtyZXR1cm4gbmV3ICRpKFJ1KGMsbCkpfWxldCAkaT0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEpe3RoaXMubmF0aXZlRWxlbWVudD1hfXN0YXRpYyNlPXRoaXMuX19OR19FTEVNRU5UX0lEX189VEx9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFFNKGMpe3JldHVybiBjIGluc3RhbmNlb2YgJGk/Yy5uYXRpdmVFbGVtZW50OmN9ZnVuY3Rpb24ga18oYyl7cmV0dXJuIGw9'@;
put 'PntzZXRUaW1lb3V0KGMsdm9pZCAwLGwpfX1jb25zdCBJcj1jbGFzcyBETCBleHRlbmRzIG5ue2NvbnN0cnVjdG9yKGw9ITEpe3N1cGVyKCksdGhpcy5kZXN0cm95UmVmPXZvaWQgMCx0aGlzLl9faXNBc3luYz1sLFlwKCkmJih0aGlzLmRlc3Ryb3lSZWY9VnIoZTQse29wdGlvbmFsOiEwfSk/'@;
put 'P3ZvaWQgMCl9ZW1pdChsKXtjb25zdCBhPXNlKG51bGwpO3RyeXtzdXBlci5uZXh0KGwpfWZpbmFsbHl7c2UoYSl9fXN1YnNjcmliZShsLGEsZCl7bGV0IGg9bCxmPWF8fCgoKT0+bnVsbCksdj1kO2lmKGwmJiJvYmplY3QiPT10eXBlb2YgbCl7Y29uc3QgWT1sO2g9WS5uZXh0Py5iaW5kKFkp'@;
put 'LGY9WS5lcnJvcj8uYmluZChZKSx2PVkuY29tcGxldGU/LmJpbmQoWSl9dGhpcy5fX2lzQXN5bmMmJihmPWtfKGYpLGgmJihoPWtfKGgpKSx2JiYodj1rXyh2KSkpO2NvbnN0IFQ9c3VwZXIuc3Vic2NyaWJlKHtuZXh0OmgsZXJyb3I6Zixjb21wbGV0ZTp2fSk7cmV0dXJuIGwgaW5zdGFuY2Vv'@;
put 'ZiBYdCYmbC5hZGQoVCksVH19O2Z1bmN0aW9uIEFMKCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbU3ltYm9sLml0ZXJhdG9yXSgpfWNsYXNzIG4xe3N0YXRpYyNlPVN5bWJvbC5pdGVyYXRvcjtnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IElyfWNvbnN0cnVjdG9yKGw9'@;
put 'ITEpe3RoaXMuX2VtaXREaXN0aW5jdENoYW5nZXNPbmx5PWwsdGhpcy5kaXJ0eT0hMCx0aGlzLl9vbkRpcnR5PXZvaWQgMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hMSx0aGlzLl9jaGFuZ2VzPXZvaWQgMCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAw'@;
put 'LHRoaXMubGFzdD12b2lkIDA7Y29uc3QgYT1uMS5wcm90b3R5cGU7YVtTeW1ib2wuaXRlcmF0b3JdfHwoYVtTeW1ib2wuaXRlcmF0b3JdPUFMKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJu'@;
put 'IHRoaXMuX3Jlc3VsdHMuZmlsdGVyKGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9y'@;
put 'ZXN1bHRzLnNvbWUobCl9dG9BcnJheSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7dGhpcy5kaXJ0eT0hMTtjb25zdCBkPWZ1bmN0aW9uIGZjKGMpe3JldHVybiBjLmZsYXQoTnVtYmVy'@;
put 'LlBPU0lUSVZFX0lORklOSVRZKX0obCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24gQTEoYyxsLGEpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2xldCBoPWNbZF0sZj1sW2RdO2lmKGEmJihoPWEoaCksZj1hKGYp'@;
put 'KSxmIT09aClyZXR1cm4hMX1yZXR1cm4hMH0odGhpcy5fcmVzdWx0cyxkLGEpKSYmKHRoaXMuX3Jlc3VsdHM9ZCx0aGlzLmxlbmd0aD1kLmxlbmd0aCx0aGlzLmxhc3Q9ZFt0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PWRbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3ZvaWQgMCE9PXRoaXMuX2No'@;
put 'YW5nZXMmJih0aGlzLl9jaGFuZ2VzRGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1vbkRpcnR5KGwpe3RoaXMuX29uRGlydHk9bH1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT8uKCl9ZGVzdHJv'@;
put 'eSgpe3ZvaWQgMCE9PXRoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fY2hhbmdlcy51bnN1YnNjcmliZSgpKX19ZnVuY3Rpb24gQjYoYyl7cmV0dXJuISgxMjgmfmMuZmxhZ3MpfWNvbnN0IEVfPW5ldyBNYXA7bGV0IElMPTA7Y29uc3QgRF89Il9fbmdDb250'@;
put 'ZXh0X18iO2Z1bmN0aW9uIE5jKGMsbCl7cmMobCk/KGNbRF9dPWxbUGNdLGZ1bmN0aW9uIE9MKGMpe0VfLnNldChjW1BjXSxjKX0obCkpOmNbRF9dPWx9ZnVuY3Rpb24gc0MoYyl7cmV0dXJuIGxDKGNbdjBdKX1mdW5jdGlvbiBhQyhjKXtyZXR1cm4gbEMoY1tuYV0pfWZ1bmN0aW9uIGxDKGMp'@;
put 'e2Zvcig7bnVsbCE9PWMmJiFpYyhjKTspYz1jW25hXTtyZXR1cm4gY31sZXQgTF87ZnVuY3Rpb24gWjIoKXtpZih2b2lkIDAhPT1MXylyZXR1cm4gTF87aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3IHpuKDIxMCwhMSl9Y29uc3QgWjY9bmV3IFlyKCIi'@;
put 'LHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5YTH0pLFhMPSJuZyIsbUM9bmV3IFlyKCIiKSxBbz1uZXcgWXIoIiIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxnQz1uZXcgWXIoIiIpLGk0PW5ldyBZcigiIix7cHJvdmlkZWRJbjoicm9vdCIs'@;
put 'ZmFjdG9yeTooKT0+WjIoKS5ib2R5Py5xdWVyeVNlbGVjdG9yKCJbbmdDc3BOb25jZV0iKT8uZ2V0QXR0cmlidXRlKCJuZ0NzcE5vbmNlIil8fG51bGx9KTtsZXQgdkM9KCk9Pm51bGw7ZnVuY3Rpb24gRl8oYyxsLGE9ITEpe3JldHVybiB2QyhjLGwsYSl9Y29uc3Qgd0M9bmV3IFlyKCIiLHtw'@;
put 'cm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMX0pO2xldCBLNixYNjtmdW5jdGlvbiBhNChjKXtyZXR1cm4gZnVuY3Rpb24gQl8oKXtpZih2b2lkIDA9PT1LNiYmKEs2PW51bGwsU3MudHJ1c3RlZFR5cGVzKSl0cnl7SzY9U3MudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxh'@;
put 'ciIse2NyZWF0ZUhUTUw6Yz0+YyxjcmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gSzZ9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gWV8oKXtpZih2b2lkIDA9PT1YNiYmKFg2PW51bGwsU3MudHJ1c3RlZFR5cGVzKSl0cnl7WDY9U3Mu'@;
put 'dHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiBYNn1mdW5jdGlvbiBDQyhjKXtyZXR1cm4gWV8oKT8uY3JlYXRlSFRNTChj'@;
put 'KXx8Y31mdW5jdGlvbiB4QyhjKXtyZXR1cm4gWV8oKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIGtDe2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJv'@;
put 'cGVydHldPWJpbmRpbmc6ICR7dGhpcy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7bm99KWB9fWZ1bmN0aW9uIFBkKGMpe3JldHVybiBjIGluc3RhbmNlb2Yga0M/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24g'@;
put 'eDMoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIEVDKGMpe3JldHVybiBjIGluc3RhbmNlb2Yga0MmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVsbCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJl'@;
put 'ZCBhIHNhZmUgJHtsfSwgZ290IGEgJHthfSAoc2VlICR7bm99KWApfXJldHVybiBhPT09bH1jbGFzcyBUQ3tjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25z'@;
put 'dCBhPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGE0KGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNh'@;
put 'dGNoe3JldHVybiBudWxsfX19Y2xhc3MgX0l7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVs'@;
put 'ZW1lbnQobCl7Y29uc3QgYT10aGlzLmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9YTQobCksYX19Y29uc3Qgdkk9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rp'@;
put 'b24gVV8oYyl7cmV0dXJuKGM9U3RyaW5nKGMpKS5tYXRjaCh2SSk/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBWaChjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIGw1KC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEg'@;
put 'b2YgYylmb3IoY29uc3QgZCBpbiBhKWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCBBQz1WaCgiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLExDPVZoKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksSUM9VmgoInJw'@;
put 'LHJ0IiksWl89bDUoQUMsbDUoTEMsVmgoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlu'@;
put 'cyxtYWluLG1hcCxtZW51LG5hdixvbCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLGw1KElDLFZoKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJl'@;
put 'LHEscnVieSxycCxydCxzLHNhbXAsc21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSksbDUoSUMsTEMpKSxXXz1WaCgiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpo'@;
put 'cmVmIiksUkM9bDUoV18sVmgoImFiYnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZh'@;
put 'dWx0LGRpcixkb3dubG9hZCxmYWNlLGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9s'@;
put 'ZSxyb3dzLHJvd3NwYW4scnVsZXMsc2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLFZoKCJh'@;
put 'cmlhLWFjdGl2ZWRlc2NlbmRhbnQsYXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1k'@;
put 'ZXRhaWxzLGFyaWEtZGlzYWJsZWQsYXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1ncmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJp'@;
put 'YS1sYWJlbGxlZGJ5LGFyaWEtbGV2ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1vcmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5'@;
put 'LGFyaWEtcmVsZXZhbnQsYXJpYS1yZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dzcGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1'@;
put 'ZW5vdyxhcmlhLXZhbHVldGV4dCIpKSx5ST1WaCgic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3MgT0N7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwLGg9W107'@;
put 'Zm9yKDthOylpZihhLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU/ZD10aGlzLnN0YXJ0RWxlbWVudChhKTphLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhhLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZCYmYS5maXJzdENoaWxkKWgucHVz'@;
put 'aChhKSxhPU1JKGEpO2Vsc2UgZm9yKDthOyl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoYSk7bGV0IGY9d0koYSk7aWYoZil7YT1mO2JyZWFrfWE9aC5wb3AoKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGwpe2NvbnN0IGE9'@;
put 'UEMobCkudG9Mb3dlckNhc2UoKTtpZighWl8uaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCF5SS5oYXNPd25Qcm9wZXJ0eShhKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChhKTtjb25zdCBkPWwuYXR0cmlidXRlcztmb3IobGV0'@;
put 'IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kLml0ZW0oaCksdj1mLm5hbWUsVD12LnRvTG93ZXJDYXNlKCk7aWYoIVJDLmhhc093blByb3BlcnR5KFQpKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgWT1mLnZhbHVlO1dfW1RdJiYoWT1VXyhZKSksdGhpcy5i'@;
put 'dWYucHVzaCgiICIsdiwnPSInLEhDKFkpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KGwpe2NvbnN0IGE9UEMobCkudG9Mb3dlckNhc2UoKTtaXy5oYXNPd25Qcm9wZXJ0eShhKSYmIUFDLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8i'@;
put 'KSx0aGlzLmJ1Zi5wdXNoKGEpLHRoaXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChIQyhsKSl9fWZ1bmN0aW9uIHdJKGMpe2NvbnN0IGw9Yy5uZXh0U2libGluZztpZihsJiZjIT09bC5wcmV2aW91c1NpYmxpbmcpdGhyb3cgRkMobCk7cmV0dXJuIGx9ZnVuY3Rpb24g'@;
put 'TUkoYyl7Y29uc3QgbD1jLmZpcnN0Q2hpbGQ7aWYobCYmZnVuY3Rpb24gYkkoYyxsKXtyZXR1cm4oYy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkhPT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWX0oYyxs'@;
put 'KSl0aHJvdyBGQyhsKTtyZXR1cm4gbH1mdW5jdGlvbiBQQyhjKXtjb25zdCBsPWMubm9kZU5hbWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6IkZPUk0ifWZ1bmN0aW9uIEZDKGMpe3JldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1l'@;
put 'bnQgaXMgY2xvYmJlcmVkOiAke2Mub3V0ZXJIVE1MfWApfWNvbnN0IENJPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxTST0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gSEMoYyl7cmV0dXJuIGMucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoQ0ksZnVuY3Rpb24obCl7'@;
put 'cmV0dXJuIiYjIisoMTAyNCoobC5jaGFyQ29kZUF0KDApLTU1Mjk2KSsobC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShTSSxmdW5jdGlvbihsKXtyZXR1cm4iJiMiK2wuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+'@;
put 'L2csIiZndDsiKX1sZXQgSjY7ZnVuY3Rpb24gR18oYyl7cmV0dXJuImNvbnRlbnQiaW4gYyYmZnVuY3Rpb24ga0koYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWMubm9kZU5hbWV9KGMpP2MuY29udGVudDpudWxsfXZhciBjND1mdW5jdGlv'@;
put 'bihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5PTkUiLGNbYy5IVE1MPTFdPSJIVE1MIixjW2MuU1RZTEU9Ml09IlNUWUxFIixjW2MuU0NSSVBUPTNdPSJTQ1JJUFQiLGNbYy5VUkw9NF09IlVSTCIsY1tjLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixjfShjNHx8e30pO2Z1bmN0aW9u'@;
put 'IEUzKGMpe2NvbnN0IGw9YzUoKTtyZXR1cm4gbD9DQyhsLnNhbml0aXplKGM0LkhUTUwsYyl8fCIiKTp4MyhjLCJIVE1MIik/Q0MoUGQoYykpOmZ1bmN0aW9uIHhJKGMsbCl7bGV0IGE9bnVsbDt0cnl7SjY9SjZ8fGZ1bmN0aW9uIHpfKGMpe2NvbnN0IGw9bmV3IF9JKGMpO3JldHVybiBmdW5j'@;
put 'dGlvbiBEQygpe3RyeXtyZXR1cm4hIShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGE0KCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBUQyhsKTpsfShjKTtsZXQgZD1sP1N0cmluZyhsKToiIjthPUo2LmdldEluZXJ0Qm9keUVsZW1lbnQoZCk7'@;
put 'bGV0IGg9NSxmPWQ7ZG97aWYoMD09PWgpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2gtLSxkPWYsZj1hLmlubmVySFRNTCxhPUo2LmdldEluZXJ0Qm9keUVsZW1lbnQoZCl9d2hpbGUoZCE9PWYpO3JldHVy'@;
put 'biBhNCgobmV3IE9DKS5zYW5pdGl6ZUNoaWxkcmVuKEdfKGEpfHxhKSl9ZmluYWxseXtpZihhKXtjb25zdCBkPUdfKGEpfHxhO2Zvcig7ZC5maXJzdENoaWxkOylkLnJlbW92ZUNoaWxkKGQuZmlyc3RDaGlsZCl9fX0oWjIoKSxZbyhjKSl9ZnVuY3Rpb24gJF8oYyl7Y29uc3QgbD1jNSgpO3Jl'@;
put 'dHVybiBsP2wuc2FuaXRpemUoYzQuVVJMLGMpfHwiIjp4MyhjLCJVUkwiKT9QZChjKTpVXyhZbyhjKSl9ZnVuY3Rpb24gTkMoYyl7Y29uc3QgbD1jNSgpO2lmKGwpcmV0dXJuIHhDKGwuc2FuaXRpemUoYzQuUkVTT1VSQ0VfVVJMLGMpfHwiIik7aWYoeDMoYywiUmVzb3VyY2VVUkwiKSlyZXR1'@;
put 'cm4geEMoUGQoYykpO3Rocm93IG5ldyB6big5MDQsITEpfWZ1bmN0aW9uIGM1KCl7Y29uc3QgYz1OcigpO3JldHVybiBjJiZjW0l1XS5zYW5pdGl6ZXJ9Y29uc3QgSUk9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxSST0vKDx8PikvZyxPST0iXHUyMDBiJDFcdTIwMGIiO2Z1bmN0aW9u'@;
put 'IGV2KGMpe3JldHVybiBjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gVDMoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudH1mdW5jdGlvbiB3MChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP2MoKTpjfXZhciBHMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9y'@;
put 'dGFudD0xXT0iSW1wb3J0YW50IixjW2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShHMnx8e30pO2xldCB0djtmdW5jdGlvbiBudihjLGwpe3JldHVybiB0dihjLGwpfWZ1bmN0aW9uIGQ0KGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsdj0hMTtpYyhkKT9mPWQ6cmMoZCkmJih2PSEw'@;
put 'LGQ9ZFtDYV0pO2NvbnN0IFQ9eGEoZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/cjgobCxhLFQpOlIzKGwsYSxULGh8fG51bGwsITApOjE9PT1jJiZudWxsIT09YT9SMyhsLGEsVCxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiBwNShjLGwsYSl7Y29uc3QgZD0kMihjLGwpO2QmJmZ1bmN0'@;
put 'aW9uIGQ1KGMsbCxhLGQpe2MucmVtb3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxULHYpOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKFQpLG51bGwhPWYmJmZ1bmN0aW9uIFdJKGMsbCxhLGQsaCl7Y29uc3QgZj1hW09hXTtmIT09eGEoYSkmJmQ0KGwsYyxkLGYsaCk7Zm9yKGxldCBUPWVsO1Q8'@;
put 'YS5sZW5ndGg7VCsrKXtjb25zdCBZPWFbVF07aTgoWVt4aV0sWSxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIGl2KGMsbCl7cmV0dXJuIGMuY3JlYXRlQ29tbWVudChmdW5jdGlvbiB1NChjKXtyZXR1cm4gYy5yZXBsYWNlKElJLGw9PmwucmVwbGFjZShSSSxPSSkpfShsKSl9ZnVu'@;
put 'Y3Rpb24gTDMoYyxsLGEpe3JldHVybiBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiBHQyhjLGwpe2xbSXVdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDEpLGk4KGMsbCxsW09vXSwyLG51bGwsbnVsbCl9ZnVuY3Rpb24gc3YoYyxsKXtjb25zdCBhPWNbRWRdLGQ9YS5p'@;
put 'bmRleE9mKGwpO2Euc3BsaWNlKGQsMSl9ZnVuY3Rpb24gdTUoYyxsKXtpZihjLmxlbmd0aDw9ZWwpcmV0dXJuO2NvbnN0IGE9ZWwrbCxkPWNbYV07aWYoZCl7Y29uc3QgaD1kW0RoXTtudWxsIT09aCYmaCE9PWMmJnN2KGgsZCksbD4wJiYoY1thLTFdW25hXT1kW25hXSk7Y29uc3QgZj1lYyhj'@;
put 'LGVsK2wpOyFmdW5jdGlvbiBXQyhjLGwpe0dDKGMsbCksbFtDYV09bnVsbCxsW2phXT1udWxsfShkW3hpXSxkKTtjb25zdCB2PWZbR3VdO251bGwhPT12JiZ2LmRldGFjaFZpZXcoZlt4aV0pLGRbUWFdPW51bGwsZFtuYV09bnVsbCxkW3BvXSY9LTEyOX1yZXR1cm4gZH1mdW5jdGlvbiBJMyhj'@;
put 'LGwpe2lmKCEoMjU2JmxbcG9dKSl7Y29uc3QgYT1sW09vXTthLmRlc3Ryb3lOb2RlJiZpOChjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gWUkoYyl7bGV0IGw9Y1t2MF07aWYoIWwpcmV0dXJuIGF2KGNbeGldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYocmMobCkpYT1sW3YwXTtlbHNl'@;
put 'e2NvbnN0IGQ9bFtlbF07ZCYmKGE9ZCl9aWYoIWEpe2Zvcig7bCYmIWxbbmFdJiZsIT09YzspcmMobCkmJmF2KGxbeGldLGwpLGw9bFtRYV07bnVsbD09PWwmJihsPWMpLHJjKGwpJiZhdihsW3hpXSxsKSxhPWwmJmxbbmFdfWw9YX19KGwpfX1mdW5jdGlvbiBhdihjLGwpe2lmKDI1NiZsW3Bv'@;
put 'XSlyZXR1cm47Y29uc3QgYT1zZShudWxsKTt0cnl7bFtwb10mPS0xMjksbFtwb118PTI1NixsW0IxXSYmZnVuY3Rpb24gQyhjKXtpZihoZShjKSx1ZShjKSlmb3IobGV0IGw9MDtsPGMucHJvZHVjZXJOb2RlLmxlbmd0aDtsKyspbmUoYy5wcm9kdWNlck5vZGVbbF0sYy5wcm9kdWNlckluZGV4'@;
put 'T2ZUaGlzW2xdKTtjLnByb2R1Y2VyTm9kZS5sZW5ndGg9Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5sZW5ndGg9Yy5wcm9kdWNlckluZGV4T2ZUaGlzLmxlbmd0aD0wLGMubGl2ZUNvbnN1bWVyTm9kZSYmKGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGg9Yy5saXZlQ29uc3VtZXJJbmRleE9m'@;
put 'VGhpcy5sZW5ndGg9MCl9KGxbQjFdKSxmdW5jdGlvbiBVSShjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBiMCkpe2NvbnN0IGY9YVtkKzFd'@;
put 'O2lmKEFycmF5LmlzQXJyYXkoZikpZm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kz0yKXtjb25zdCBUPWhbZlt2XV0sWT1mW3YrMV07RGQoNCxULFkpO3RyeXtZLmNhbGwoVCl9ZmluYWxseXtEZCg1LFQsWSl9fWVsc2V7RGQoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtEZCg1LGgsZil9'@;
put 'fX19fShjLGwpLGZ1bmN0aW9uICRDKGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW3d1XTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09dHlwZW9mIGFbZl0pe2NvbnN0IHY9YVtmKzNdO3Y+PTA/ZFt2XSgpOmRbLXZdLnVuc3Vic2NyaWJl'@;
put 'KCksZis9Mn1lbHNlIGFbZl0uY2FsbChkW2FbZisxXV0pO251bGwhPT1kJiYobFt3dV09bnVsbCk7Y29uc3QgaD1sW1EwXTtpZihudWxsIT09aCl7bFtRMF09bnVsbDtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFt4aV0udHlwZSYmbFtPb10uZGVz'@;
put 'dHJveSgpO2NvbnN0IGQ9bFtEaF07aWYobnVsbCE9PWQmJmljKGxbUWFdKSl7ZCE9PWxbUWFdJiZzdihkLGwpO2NvbnN0IGg9bFtHdV07bnVsbCE9PWgmJmguZGV0YWNoVmlldyhjKX0hZnVuY3Rpb24gUEwoYyl7RV8uZGVsZXRlKGNbUGNdKX0obCl9ZmluYWxseXtzZShhKX19ZnVuY3Rpb24g'@;
put 'bjgoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBsdihjLGwsYSl7bGV0IGQ9bDtmb3IoO251bGwhPT1kJiY0MCZkLnR5cGU7KWQ9KGw9ZCkucGFyZW50O2lmKG51bGw9PT1kKXJldHVybiBhW0NhXTt7Y29uc3R7Y29tcG9uZW50T2Zmc2V0Omh9PWQ7aWYoaD4tMSl7Y29uc3R7ZW5jYXBzdWxhdGlv'@;
put 'bjpmfT1jLmRhdGFbZC5kaXJlY3RpdmVTdGFydCtoXTtpZihmPT09R3MuTm9uZXx8Zj09PUdzLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBSdShkLGEpfX0oYyxsLnBhcmVudCxhKX1mdW5jdGlvbiBSMyhjLGwsYSxkLGgpe2MuaW5zZXJ0QmVmb3JlKGwsYSxkLGgpfWZ1bmN0aW9uIHI4'@;
put 'KGMsbCxhKXtjLmFwcGVuZENoaWxkKGwsYSl9ZnVuY3Rpb24gcUMoYyxsLGEsZCxoKXtudWxsIT09ZD9SMyhjLGwsYSxkLGgpOnI4KGMsbCxhKX1mdW5jdGlvbiAkMihjLGwpe3JldHVybiBjLnBhcmVudE5vZGUobCl9ZnVuY3Rpb24gZjUoYyxsLGEpe3JldHVybiBxMihjLGwsYSl9bGV0IGR2'@;
put 'LHEyPWZ1bmN0aW9uIHV2KGMsbCxhKXtyZXR1cm4gNDAmYy50eXBlP1J1KGMsYSk6bnVsbH07ZnVuY3Rpb24gcnUoYyxsLGEsZCl7Y29uc3QgaD1uOChjLGQsbCksZj1sW09vXSxUPWY1KGQucGFyZW50fHxsW2phXSxkLGwpO2lmKG51bGwhPWgpaWYoQXJyYXkuaXNBcnJheShhKSlmb3IobGV0'@;
put 'IFk9MDtZPGEubGVuZ3RoO1krKylxQyhmLGgsYVtZXSxULCExKTtlbHNlIHFDKGYsaCxhLFQsITEpO3ZvaWQgMCE9PWR2JiZkdihmLGQsbCxhLGgpfWZ1bmN0aW9uIEsyKGMsbCl7aWYobnVsbCE9PWwpe2NvbnN0IGE9bC50eXBlO2lmKDMmYSlyZXR1cm4gUnUobCxjKTtpZig0JmEpcmV0dXJu'@;
put 'IGZ2KC0xLGNbbC5pbmRleF0pO2lmKDgmYSl7Y29uc3QgZD1sLmNoaWxkO2lmKG51bGwhPT1kKXJldHVybiBLMihjLGQpO3tjb25zdCBoPWNbbC5pbmRleF07cmV0dXJuIGljKGgpP2Z2KC0xLGgpOnhhKGgpfX1pZigzMiZhKXJldHVybiBudihsLGMpKCl8fHhhKGNbbC5pbmRleF0pO3tjb25z'@;
put 'dCBkPUtDKGMsbCk7cmV0dXJuIG51bGwhPT1kP0FycmF5LmlzQXJyYXkoZCk/ZFswXTpLMihtMyhjW0FzXSksZCk6SzIoYyxsLm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBLQyhjLGwpe3JldHVybiBudWxsIT09bD9jW0FzXVtqYV0ucHJvamVjdGlvbltsLnByb2plY3Rpb25dOm51bGx9'@;
put 'ZnVuY3Rpb24gZnYoYyxsKXtjb25zdCBhPWVsK2MrMTtpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV0saD1kW3hpXS5maXJzdENoaWxkO2lmKG51bGwhPT1oKXJldHVybiBLMihkLGgpfXJldHVybiBsW09hXX1mdW5jdGlvbiBwdihjLGwsYSxkLGgsZix2KXtmb3IoO251bGwhPWE7KXtjb25z'@;
put 'dCBUPWRbYS5pbmRleF0sWT1hLnR5cGU7aWYodiYmMD09PWwmJihUJiZOYyh4YShUKSxkKSxhLmZsYWdzfD0yKSwzMiZ+YS5mbGFncylpZig4JlkpcHYoYyxsLGEuY2hpbGQsZCxoLGYsITEpLGQ0KGwsYyxoLFQsZik7ZWxzZSBpZigzMiZZKXtjb25zdCByZT1udihhLGQpO2xldCBmZTtmb3Io'@;
put 'O2ZlPXJlKCk7KWQ0KGwsYyxoLGZlLGYpO2Q0KGwsYyxoLFQsZil9ZWxzZSAxNiZZP0pDKGMsbCxkLGEsaCxmKTpkNChsLGMsaCxULGYpO2E9dj9hLnByb2plY3Rpb25OZXh0OmEubmV4dH19ZnVuY3Rpb24gaTgoYyxsLGEsZCxoLGYpe3B2KGEsZCxjLmZpcnN0Q2hpbGQsbCxoLGYsITEpfWZ1'@;
put 'bmN0aW9uIEpDKGMsbCxhLGQsaCxmKXtjb25zdCB2PWFbQXNdLFk9dltqYV0ucHJvamVjdGlvbltkLnByb2plY3Rpb25dO2lmKEFycmF5LmlzQXJyYXkoWSkpZm9yKGxldCByZT0wO3JlPFkubGVuZ3RoO3JlKyspZDQobCxjLGgsWVtyZV0sZik7ZWxzZXtsZXQgcmU9WTtjb25zdCBmZT12W1Fh'@;
put 'XTtCNihkKSYmKHJlLmZsYWdzfD0xMjgpLHB2KGMsbCxyZSxmZSxoLGYsITApfX1mdW5jdGlvbiB0UyhjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRBdHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIG5TKGMsbCxhKXtjb25zdHttZXJnZWRBdHRy'@;
put 'czpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxsIT09ZCYmQ2goYyxsLGQpLG51bGwhPT1oJiZ0UyhjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIGVTKGMsbCxhKXtjLnNldEF0dHJpYnV0ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1jb25zdCBpcz17fTtmdW5jdGlvbiB3ZShjPTEpe212KGtz'@;
put 'KCksTnIoKSxGYygpK2MsITEpfWZ1bmN0aW9uIG12KGMsbCxhLGQpe2lmKCFkKWlmKDMmfmxbcG9dKXtjb25zdCBmPWMucHJlT3JkZXJIb29rcztudWxsIT09ZiYmTDYobCxmLDAsYSl9ZWxzZXtjb25zdCBmPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1mJiZBNihsLGYsYSl9ZzMoYSl9'@;
put 'ZnVuY3Rpb24gc3QoYyxsPUFpLkRlZmF1bHQpe2NvbnN0IGE9TnIoKTtyZXR1cm4gbnVsbD09PWE/ZnIoYyxsKTpXTShmYSgpLGEsVGkoYyksbCl9ZnVuY3Rpb24gaVMoYyxsLGEsZCxoLGYpe2NvbnN0IHY9c2UobnVsbCk7dHJ5e2xldCBUPW51bGw7aCZRbi5TaWduYWxCYXNlZCYmKFQ9bFtk'@;
put 'XVthZV0pLG51bGwhPT1UJiZ2b2lkIDAhPT1ULnRyYW5zZm9ybUZuJiYoZj1ULnRyYW5zZm9ybUZuKGYpKSxoJlFuLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtJiYoZj1jLmlucHV0VHJhbnNmb3Jtc1tkXS5jYWxsKGwsZikpLG51bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxULGYs'@;
put 'YSxkKTprTShsLFQsZCxmKX1maW5hbGx5e3NlKHYpfX1mdW5jdGlvbiBvOChjLGwsYSxkLGgsZix2LFQsWSxyZSxmZSl7Y29uc3QgX2U9bC5ibHVlcHJpbnQuc2xpY2UoKTtyZXR1cm4gX2VbQ2FdPWgsX2VbcG9dPTIwNHxkLChudWxsIT09cmV8fGMmJjIwNDgmY1twb10pJiYoX2VbcG9dfD0y'@;
put 'MDQ4KSxpXyhfZSksX2VbUWFdPV9lW2djXT1jLF9lW3JhXT1hLF9lW0l1XT12fHxjJiZjW0l1XSxfZVtPb109VHx8YyYmY1tPb10sX2VbaGxdPVl8fGMmJmNbaGxdfHxudWxsLF9lW2phXT1mLF9lW1BjXT1mdW5jdGlvbiBSTCgpe3JldHVybiBJTCsrfSgpLF9lW2tsXT1mZSxfZVtKMF09cmUs'@;
put 'X2VbQXNdPTI9PWwudHlwZT9jW0FzXTpfZSxfZX1mdW5jdGlvbiBoNChjLGwsYSxkLGgpe2xldCBmPWMuZGF0YVtsXTtpZihudWxsPT09ZilmPWZ1bmN0aW9uIGd2KGMsbCxhLGQsaCl7Y29uc3QgZj1hXygpLHY9bF8oKSxZPWMuZGF0YVtsXT1mdW5jdGlvbiB1UyhjLGwsYSxkLGgsZil7bGV0'@;
put 'IHY9bD9sLmluamVjdG9ySW5kZXg6LTEsVD0wO3JldHVybiBacCgpJiYoVHw9MTI4KSx7dHlwZTphLGluZGV4OmQsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnYsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNv'@;
put 'bXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdzOm51bGwsZmxhZ3M6VCxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTpoLGF0dHJzOmYsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3'@;
put 'Om51bGwsbmV4dDpudWxsLHByZXY6bnVsbCxwcm9qZWN0aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmwscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91'@;
put 'dEhvc3Q6bnVsbCxyZXNpZHVhbENsYXNzZXM6dm9pZCAwLGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9fSgwLHY/ZjpmJiZmLnBhcmVudCxhLGwsZCxoKTtyZXR1cm4gbnVsbD09PWMuZmlyc3RDaGlsZCYmKGMuZmlyc3RDaGlsZD1ZKSxudWxsIT09ZiYmKHY/bnVsbD09Zi5jaGls'@;
put 'ZCYmbnVsbCE9PVkucGFyZW50JiYoZi5jaGlsZD1ZKTpudWxsPT09Zi5uZXh0JiYoZi5uZXh0PVksWS5wcmV2PWYpKSxZfShjLGwsYSxkLGgpLGZ1bmN0aW9uIGxMKCl7cmV0dXJuIEdvLmxGcmFtZS5pbkkxOG59KCkmJihmLmZsYWdzfD0zMik7ZWxzZSBpZig2NCZmLnR5cGUpe2YudHlwZT1h'@;
put 'LGYudmFsdWU9ZCxmLmF0dHJzPWg7Y29uc3Qgdj1mdW5jdGlvbiBLbSgpe2NvbnN0IGM9R28ubEZyYW1lLGw9Yy5jdXJyZW50VE5vZGU7cmV0dXJuIGMuaXNQYXJlbnQ/bDpsLnBhcmVudH0oKTtmLmluamVjdG9ySW5kZXg9bnVsbD09PXY/LTE6di5pbmplY3RvckluZGV4fXJldHVybiBMZChm'@;
put 'LCEwKSxmfWZ1bmN0aW9uIG01KGMsbCxhLGQpe2lmKDA9PT1hKXJldHVybi0xO2NvbnN0IGg9bC5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxhO2YrKylsLnB1c2goZCksYy5ibHVlcHJpbnQucHVzaChkKSxjLmRhdGEucHVzaChudWxsKTtyZXR1cm4gaH1mdW5jdGlvbiBvUyhjLGwsYSxkLGgpe2Nv'@;
put 'bnN0IGY9RmMoKSx2PTImZDt0cnl7ZzMoLTEpLHYmJmwubGVuZ3RoPnpvJiZtdihjLGwsem8sITEpLERkKHY/MjowLGgpLGEoZCxoKX1maW5hbGx5e2czKGYpLERkKHY/MzoxLGgpfX1mdW5jdGlvbiBfdihjLGwsYSl7aWYoUGwobCkpe2NvbnN0IGQ9c2UobnVsbCk7dHJ5e2NvbnN0IGY9bC5k'@;
put 'aXJlY3RpdmVFbmQ7Zm9yKGxldCB2PWwuZGlyZWN0aXZlU3RhcnQ7djxmO3YrKyl7Y29uc3QgVD1jLmRhdGFbdl07VC5jb250ZW50UXVlcmllcyYmVC5jb250ZW50UXVlcmllcygxLGFbdl0sdil9fWZpbmFsbHl7c2UoZCl9fX1mdW5jdGlvbiB2dihjLGwsYSl7UE0oKSYmKGZ1bmN0aW9uIG5S'@;
put 'KGMsbCxhLGQpe2NvbnN0IGg9YS5kaXJlY3RpdmVTdGFydCxmPWEuZGlyZWN0aXZlRW5kO1kxKGEpJiZmdW5jdGlvbiBsUihjLGwsYSl7Y29uc3QgZD1SdShsLGMpLGg9czgoYSk7bGV0IHY9MTY7YS5zaWduYWxzP3Y9NDA5NjphLm9uUHVzaCYmKHY9NjQpO2NvbnN0IFQ9ZzUoYyxvOChjLGgs'@;
put 'bnVsbCx2LGQsbCxudWxsLGNbSXVdLnJlbmRlcmVyRmFjdG9yeS5jcmVhdGVSZW5kZXJlcihkLGEpLG51bGwsbnVsbCxudWxsKSk7Y1tsLmluZGV4XT1UfShsLGEsYy5kYXRhW2grYS5jb21wb25lbnRPZmZzZXRdKSxjLmZpcnN0Q3JlYXRlUGFzc3x8UDYoYSxsKSxOYyhkLGwpO2NvbnN0IHY9'@;
put 'YS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgVD1oO1Q8ZjtUKyspe2NvbnN0IFk9Yy5kYXRhW1RdLHJlPXYzKGwsYyxULGEpO05jKHJlLGwpLG51bGwhPT12JiZhOCgwLFQtaCxyZSxZLDAsdiksU2EoWSkmJih5MChhLmluZGV4LGwpW3JhXT12MyhsLGMsVCxhKSl9fShjLGwsYSxSdShhLGwpKSwh'@;
put 'KDY0Jn5hLmZsYWdzKSYmcFMoYyxsLGEpKX1mdW5jdGlvbiB5dihjLGwsYT1SdSl7Y29uc3QgZD1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWQpe2xldCBoPWwuaW5kZXgrMTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrPTIpe2NvbnN0IHY9ZFtmKzFdLFQ9LTE9PT12P2EobCxjKTpjW3ZdO2Nb'@;
put 'aCsrXT1UfX19ZnVuY3Rpb24gczgoYyl7Y29uc3QgbD1jLnRWaWV3O3JldHVybiBudWxsPT09bHx8bC5pbmNvbXBsZXRlRmlyc3RQYXNzP2MudFZpZXc9YnYoMSxudWxsLGMudGVtcGxhdGUsYy5kZWNscyxjLnZhcnMsYy5kaXJlY3RpdmVEZWZzLGMucGlwZURlZnMsYy52aWV3UXVlcnksYy5z'@;
put 'Y2hlbWFzLGMuY29uc3RzLGMuaWQpOmx9ZnVuY3Rpb24gYnYoYyxsLGEsZCxoLGYsdixULFkscmUsZmUpe2NvbnN0IF9lPXpvK2Qsa2U9X2UraCxXZT1mdW5jdGlvbiAkSShjLGwpe2NvbnN0IGE9W107Zm9yKGxldCBkPTA7ZDxsO2QrKylhLnB1c2goZDxjP251bGw6aXMpO3JldHVybiBhfShf'@;
put 'ZSxrZSksSmU9ImZ1bmN0aW9uIj09dHlwZW9mIHJlP3JlKCk6cmU7cmV0dXJuIFdlW3hpXT17dHlwZTpjLGJsdWVwcmludDpXZSx0ZW1wbGF0ZTphLHF1ZXJpZXM6bnVsbCx2aWV3UXVlcnk6VCxkZWNsVE5vZGU6bCxkYXRhOldlLnNsaWNlKCkuZmlsbChudWxsLF9lKSxiaW5kaW5nU3RhcnRJ'@;
put 'bmRleDpfZSxleHBhbmRvU3RhcnRJbmRleDprZSxob3N0QmluZGluZ09wQ29kZXM6bnVsbCxmaXJzdENyZWF0ZVBhc3M6ITAsZmlyc3RVcGRhdGVQYXNzOiEwLHN0YXRpY1ZpZXdRdWVyaWVzOiExLHN0YXRpY0NvbnRlbnRRdWVyaWVzOiExLHByZU9yZGVySG9va3M6bnVsbCxwcmVPcmRlckNo'@;
put 'ZWNrSG9va3M6bnVsbCxjb250ZW50SG9va3M6bnVsbCxjb250ZW50Q2hlY2tIb29rczpudWxsLHZpZXdIb29rczpudWxsLHZpZXdDaGVja0hvb2tzOm51bGwsZGVzdHJveUhvb2tzOm51bGwsY2xlYW51cDpudWxsLGNvbnRlbnRRdWVyaWVzOm51bGwsY29tcG9uZW50czpudWxsLGRpcmVjdGl2'@;
put 'ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiBmP2YoKTpmLHBpcGVSZWdpc3RyeToiZnVuY3Rpb24iPT10eXBlb2Ygdj92KCk6dixmaXJzdENoaWxkOm51bGwsc2NoZW1hczpZLGNvbnN0czpKZSxpbmNvbXBsZXRlRmlyc3RQYXNzOiExLHNzcklkOmZlfX1sZXQgc1M9KCk9Pm51bGw7ZnVu'@;
put 'Y3Rpb24gZFMoYyxsLGEsZCxoKXtmb3IobGV0IGYgaW4gbCl7aWYoIWwuaGFzT3duUHJvcGVydHkoZikpY29udGludWU7Y29uc3Qgdj1sW2ZdO2lmKHZvaWQgMD09PXYpY29udGludWU7ZD8/PXt9O2xldCBULFk9UW4uTm9uZTtBcnJheS5pc0FycmF5KHYpPyhUPXZbMF0sWT12WzFdKTpUPXY7'@;
put 'bGV0IHJlPWY7aWYobnVsbCE9PWgpe2lmKCFoLmhhc093blByb3BlcnR5KGYpKWNvbnRpbnVlO3JlPWhbZl19MD09PWM/aFMoZCxhLHJlLFQsWSk6aFMoZCxhLHJlLFQpfXJldHVybiBkfWZ1bmN0aW9uIGhTKGMsbCxhLGQsaCl7bGV0IGY7Yy5oYXNPd25Qcm9wZXJ0eShhKT8oZj1jW2FdKS5w'@;
put 'dXNoKGwsZCk6Zj1jW2FdPVtsLGRdLHZvaWQgMCE9PWgmJmYucHVzaChoKX1mdW5jdGlvbiBGdShjLGwsYSxkLGgsZix2LFQpe2NvbnN0IFk9UnUobCxhKTtsZXQgZmUscmU9bC5pbnB1dHM7IVQmJm51bGwhPXJlJiYoZmU9cmVbZF0pPyhrdihjLGEsZmUsZCxoKSxZMShsKSYmZnVuY3Rpb24g'@;
put 'UUkoYyxsKXtjb25zdCBhPXkwKGwsYyk7MTYmYVtwb118fChhW3BvXXw9NjQpfShhLGwuaW5kZXgpKTozJmwudHlwZSYmKGQ9ZnVuY3Rpb24gSkkoYyl7cmV0dXJuImNsYXNzIj09PWM/ImNsYXNzTmFtZSI6ImZvciI9PT1jPyJodG1sRm9yIjoiZm9ybWFjdGlvbiI9PT1jPyJmb3JtQWN0aW9u'@;
put 'IjoiaW5uZXJIdG1sIj09PWM/ImlubmVySFRNTCI6InJlYWRvbmx5Ij09PWM/InJlYWRPbmx5IjoidGFiaW5kZXgiPT09Yz8idGFiSW5kZXgiOmN9KGQpLGg9bnVsbCE9dj92KGgsbC52YWx1ZXx8IiIsZCk6aCxmLnNldFByb3BlcnR5KFksZCxoKSl9ZnVuY3Rpb24gd3YoYyxsLGEsZCl7aWYo'@;
put 'UE0oKSl7Y29uc3QgaD1udWxsPT09ZD9udWxsOnsiIjotMX0sZj1mdW5jdGlvbiByUihjLGwpe2NvbnN0IGE9Yy5kaXJlY3RpdmVSZWdpc3RyeTtsZXQgZD1udWxsLGg9bnVsbDtpZihhKWZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKXtjb25zdCB2PWFbZl07aWYoeGgobCx2LnNlbGVjdG9y'@;
put 'cywhMSkpaWYoZHx8KGQ9W10pLFNhKHYpKWlmKG51bGwhPT12LmZpbmRIb3N0RGlyZWN0aXZlRGVmcyl7Y29uc3QgVD1bXTtoPWh8fG5ldyBNYXAsdi5maW5kSG9zdERpcmVjdGl2ZURlZnModixULGgpLGQudW5zaGlmdCguLi5ULHYpLEN2KGMsbCxULmxlbmd0aCl9ZWxzZSBkLnVuc2hpZnQo'@;
put 'diksQ3YoYyxsLDApO2Vsc2UgaD1ofHxuZXcgTWFwLHYuZmluZEhvc3REaXJlY3RpdmVEZWZzPy4odixkLGgpLGQucHVzaCh2KX1yZXR1cm4gbnVsbD09PWQ/bnVsbDpbZCxoXX0oYyxhKTtsZXQgdixUO251bGw9PT1mP3Y9VD1udWxsOlt2LFRdPWYsbnVsbCE9PXYmJk12KGMsbCxhLHYsaCxU'@;
put 'KSxoJiZmdW5jdGlvbiBpUihjLGwsYSl7aWYobCl7Y29uc3QgZD1jLmxvY2FsTmFtZXM9W107Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKz0yKXtjb25zdCBmPWFbbFtoKzFdXTtpZihudWxsPT1mKXRocm93IG5ldyB6bigtMzAxLCExKTtkLnB1c2gobFtoXSxmKX19fShhLGQsaCl9YS5tZXJn'@;
put 'ZWRBdHRycz1PMShhLm1lcmdlZEF0dHJzLGEuYXR0cnMpfWZ1bmN0aW9uIE12KGMsbCxhLGQsaCxmKXtmb3IobGV0IHJlPTA7cmU8ZC5sZW5ndGg7cmUrKyl0MShQNihhLGwpLGMsZFtyZV0udHlwZSk7IWZ1bmN0aW9uIHNSKGMsbCxhKXtjLmZsYWdzfD0xLGMuZGlyZWN0aXZlU3RhcnQ9bCxj'@;
put 'LmRpcmVjdGl2ZUVuZD1sK2EsYy5wcm92aWRlckluZGV4ZXM9bH0oYSxjLmRhdGEubGVuZ3RoLGQubGVuZ3RoKTtmb3IobGV0IHJlPTA7cmU8ZC5sZW5ndGg7cmUrKyl7Y29uc3QgZmU9ZFtyZV07ZmUucHJvdmlkZXJzUmVzb2x2ZXImJmZlLnByb3ZpZGVyc1Jlc29sdmVyKGZlKX1sZXQgdj0h'@;
put 'MSxUPSExLFk9bTUoYyxsLGQubGVuZ3RoLG51bGwpO2ZvcihsZXQgcmU9MDtyZTxkLmxlbmd0aDtyZSsrKXtjb25zdCBmZT1kW3JlXTthLm1lcmdlZEF0dHJzPU8xKGEubWVyZ2VkQXR0cnMsZmUuaG9zdEF0dHJzKSxhUihjLGEsbCxZLGZlKSxvUihZLGZlLGgpLG51bGwhPT1mZS5jb250ZW50'@;
put 'UXVlcmllcyYmKGEuZmxhZ3N8PTQpLChudWxsIT09ZmUuaG9zdEJpbmRpbmdzfHxudWxsIT09ZmUuaG9zdEF0dHJzfHwwIT09ZmUuaG9zdFZhcnMpJiYoYS5mbGFnc3w9NjQpO2NvbnN0IF9lPWZlLnR5cGUucHJvdG90eXBlOyF2JiYoX2UubmdPbkNoYW5nZXN8fF9lLm5nT25Jbml0fHxfZS5u'@;
put 'Z0RvQ2hlY2spJiYoKGMucHJlT3JkZXJIb29rcz8/PVtdKS5wdXNoKGEuaW5kZXgpLHY9ITApLCFUJiYoX2UubmdPbkNoYW5nZXN8fF9lLm5nRG9DaGVjaykmJigoYy5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSxUPSEwKSxZKyt9IWZ1bmN0aW9uIFhJKGMsbCxhKXtj'@;
put 'b25zdCBoPWwuZGlyZWN0aXZlRW5kLGY9Yy5kYXRhLHY9bC5hdHRycyxUPVtdO2xldCBZPW51bGwscmU9bnVsbDtmb3IobGV0IGZlPWwuZGlyZWN0aXZlU3RhcnQ7ZmU8aDtmZSsrKXtjb25zdCBfZT1mW2ZlXSxrZT1hP2EuZ2V0KF9lKTpudWxsLEplPWtlP2tlLm91dHB1dHM6bnVsbDtZPWRT'@;
put 'KDAsX2UuaW5wdXRzLGZlLFksa2U/a2UuaW5wdXRzOm51bGwpLHJlPWRTKDEsX2Uub3V0cHV0cyxmZSxyZSxKZSk7Y29uc3QgdHQ9bnVsbD09PVl8fG51bGw9PT12fHxTaChsKT9udWxsOmdTKFksZmUsdik7VC5wdXNoKHR0KX1udWxsIT09WSYmKFkuaGFzT3duUHJvcGVydHkoImNsYXNzIikm'@;
put 'JihsLmZsYWdzfD04KSxZLmhhc093blByb3BlcnR5KCJzdHlsZSIpJiYobC5mbGFnc3w9MTYpKSxsLmluaXRpYWxJbnB1dHM9VCxsLmlucHV0cz1ZLGwub3V0cHV0cz1yZX0oYyxhLGYpfWZ1bmN0aW9uIHBTKGMsbCxhKXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVu'@;
put 'ZCxmPWEuaW5kZXgsdj1mdW5jdGlvbiB1TCgpe3JldHVybiBHby5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4fSgpO3RyeXtnMyhmKTtmb3IobGV0IFQ9ZDtUPGg7VCsrKXtjb25zdCBZPWMuZGF0YVtUXSxyZT1sW1RdO3VfKFQpLChudWxsIT09WS5ob3N0QmluZGluZ3N8fDAhPT1ZLmhv'@;
put 'c3RWYXJzfHxudWxsIT09WS5ob3N0QXR0cnMpJiZtUyhZLHJlKX19ZmluYWxseXtnMygtMSksdV8odil9fWZ1bmN0aW9uIG1TKGMsbCl7bnVsbCE9PWMuaG9zdEJpbmRpbmdzJiZjLmhvc3RCaW5kaW5ncygxLGwpfWZ1bmN0aW9uIEN2KGMsbCxhKXtsLmNvbXBvbmVudE9mZnNldD1hLChjLmNv'@;
put 'bXBvbmVudHM/Pz1bXSkucHVzaChsLmluZGV4KX1mdW5jdGlvbiBvUihjLGwsYSl7aWYoYSl7aWYobC5leHBvcnRBcylmb3IobGV0IGQ9MDtkPGwuZXhwb3J0QXMubGVuZ3RoO2QrKylhW2wuZXhwb3J0QXNbZF1dPWM7U2EobCkmJihhWyIiXT1jKX19ZnVuY3Rpb24gYVIoYyxsLGEsZCxoKXtj'@;
put 'LmRhdGFbZF09aDtjb25zdCBmPWguZmFjdG9yeXx8KGguZmFjdG9yeT1TbChoLnR5cGUpKSx2PW5ldyBiMChmLFNhKGgpLHN0KTtjLmJsdWVwcmludFtkXT12LGFbZF09dixmdW5jdGlvbiBmUyhjLGwsYSxkLGgpe2NvbnN0IGY9aC5ob3N0QmluZGluZ3M7aWYoZil7bGV0IHY9Yy5ob3N0Qmlu'@;
put 'ZGluZ09wQ29kZXM7bnVsbD09PXYmJih2PWMuaG9zdEJpbmRpbmdPcENvZGVzPVtdKTtjb25zdCBUPX5sLmluZGV4OyhmdW5jdGlvbiB0UihjKXtsZXQgbD1jLmxlbmd0aDtmb3IoO2w+MDspe2NvbnN0IGE9Y1stLWxdO2lmKCJudW1iZXIiPT10eXBlb2YgYSYmYTwwKXJldHVybiBhfXJldHVy'@;
put 'biAwfSkodikhPVQmJnYucHVzaChUKSx2LnB1c2goYSxkLGYpfX0oYyxsLGQsbTUoYyxhLGguaG9zdFZhcnMsaXMpLGgpfWZ1bmN0aW9uIEcxKGMsbCxhLGQsaCxmKXtjb25zdCB2PVJ1KGMsbCk7IWZ1bmN0aW9uIFN2KGMsbCxhLGQsaCxmLHYpe2lmKG51bGw9PWYpYy5yZW1vdmVBdHRyaWJ1'@;
put 'dGUobCxoLGEpO2Vsc2V7Y29uc3QgVD1udWxsPT12P1lvKGYpOnYoZixkfHwiIixoKTtjLnNldEF0dHJpYnV0ZShsLGgsVCxhKX19KGxbT29dLHYsZixjLnZhbHVlLGEsZCxoKX1mdW5jdGlvbiBhOChjLGwsYSxkLGgsZil7Y29uc3Qgdj1mW2xdO2lmKG51bGwhPT12KWZvcihsZXQgVD0wO1Q8'@;
put 'di5sZW5ndGg7KWlTKGQsYSx2W1QrK10sdltUKytdLHZbVCsrXSx2W1QrK10pfWZ1bmN0aW9uIGdTKGMsbCxhKXtsZXQgZD1udWxsLGg9MDtmb3IoO2g8YS5sZW5ndGg7KXtjb25zdCBmPWFbaF07aWYoMCE9PWYpaWYoNSE9PWYpe2lmKCJudW1iZXIiPT10eXBlb2YgZilicmVhaztpZihjLmhh'@;
put 'c093blByb3BlcnR5KGYpKXtudWxsPT09ZCYmKGQ9W10pO2NvbnN0IHY9Y1tmXTtmb3IobGV0IFQ9MDtUPHYubGVuZ3RoO1QrPTMpaWYodltUXT09PWwpe2QucHVzaChmLHZbVCsxXSx2W1QrMl0sYVtoKzFdKTticmVha319aCs9Mn1lbHNlIGgrPTI7ZWxzZSBoKz00fXJldHVybiBkfWZ1bmN0'@;
put 'aW9uIHh2KGMsbCxhLGQpe3JldHVybltjLCEwLDAsbCxudWxsLGQsbnVsbCxhLG51bGwsbnVsbF19ZnVuY3Rpb24gX1MoYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXM7aWYobnVsbCE9PWEpe2NvbnN0IGQ9c2UobnVsbCk7dHJ5e2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCs9Mil7Y29u'@;
put 'c3Qgdj1hW2grMV07aWYoLTEhPT12KXtjb25zdCBUPWMuZGF0YVt2XTtWMihhW2hdKSxULmNvbnRlbnRRdWVyaWVzKDIsbFt2XSx2KX19fWZpbmFsbHl7c2UoZCl9fX1mdW5jdGlvbiBnNShjLGwpe3JldHVybiBjW3YwXT9jW1RoXVtuYV09bDpjW3YwXT1sLGNbVGhdPWwsbH1mdW5jdGlvbiBs'@;
put 'OChjLGwsYSl7VjIoMCk7Y29uc3QgZD1zZShudWxsKTt0cnl7bChjLGEpfWZpbmFsbHl7c2UoZCl9fWZ1bmN0aW9uIHZTKGMpe3JldHVybiBjW3d1XXx8KGNbd3VdPVtdKX1mdW5jdGlvbiBfNShjKXtyZXR1cm4gYy5jbGVhbnVwfHwoYy5jbGVhbnVwPVtdKX1mdW5jdGlvbiBPMyhjLGwsYSl7'@;
put 'cmV0dXJuKG51bGw9PT1jfHxTYShjKSkmJihhPWZ1bmN0aW9uIG5fKGMpe2Zvcig7QXJyYXkuaXNBcnJheShjKTspe2lmKCJvYmplY3QiPT10eXBlb2YgY1toM10pcmV0dXJuIGM7Yz1jW0NhXX1yZXR1cm4gbnVsbH0oYVtsLmluZGV4XSkpLGFbT29dfWZ1bmN0aW9uIGY0KGMsbCl7Y29uc3Qg'@;
put 'YT1jW2hsXSxkPWE/YS5nZXQoT2QsbnVsbCk6bnVsbDtkJiZkLmhhbmRsZUVycm9yKGwpfWZ1bmN0aW9uIGt2KGMsbCxhLGQsaCl7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDspe2NvbnN0IHY9YVtmKytdLFQ9YVtmKytdLFk9YVtmKytdO2lTKGMuZGF0YVt2XSxsW3ZdLGQsVCxZLGgpfX1mdW5j'@;
put 'dGlvbiBGZChjLGwsYSl7Y29uc3QgZD1VcChsLGMpOyFmdW5jdGlvbiBaQyhjLGwsYSl7Yy5zZXRWYWx1ZShsLGEpfShjW09vXSxkLGEpfWZ1bmN0aW9uIHVSKGMsbCl7Y29uc3QgYT15MChsLGMpLGQ9YVt4aV07IWZ1bmN0aW9uIGRSKGMsbCl7Zm9yKGxldCBhPWwubGVuZ3RoO2E8Yy5ibHVl'@;
put 'cHJpbnQubGVuZ3RoO2ErKylsLnB1c2goYy5ibHVlcHJpbnRbYV0pfShkLGEpO2NvbnN0IGg9YVtDYV07bnVsbCE9PWgmJm51bGw9PT1hW2tsXSYmKGFba2xdPUZfKGgsYVtobF0pKSxFdihkLGEsYVtyYV0pfWZ1bmN0aW9uIEV2KGMsbCxhKXtYbShsKTt0cnl7Y29uc3QgZD1jLnZpZXdRdWVy'@;
put 'eTtudWxsIT09ZCYmbDgoMSxkLGEpO2NvbnN0IGg9Yy50ZW1wbGF0ZTtudWxsIT09aCYmb1MoYyxsLGgsMSxhKSxjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuZmlyc3RDcmVhdGVQYXNzPSExKSxsW0d1XT8uZmluaXNoVmlld0NyZWF0aW9uKGMpLGMuc3RhdGljQ29udGVudFF1ZXJpZXMmJl9TKGMs'@;
put 'bCksYy5zdGF0aWNWaWV3UXVlcmllcyYmbDgoMixjLnZpZXdRdWVyeSxhKTtjb25zdCBmPWMuY29tcG9uZW50cztudWxsIT09ZiYmZnVuY3Rpb24gaFIoYyxsKXtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyl1UihjLGxbYV0pfShsLGYpfWNhdGNoKGQpe3Rocm93IGMuZmlyc3RDcmVhdGVQ'@;
put 'YXNzJiYoYy5pbmNvbXBsZXRlRmlyc3RQYXNzPSEwLGMuZmlyc3RDcmVhdGVQYXNzPSExKSxkfWZpbmFsbHl7bFtwb10mPS01LFdwKCl9fWZ1bmN0aW9uIHA0KGMsbCl7cmV0dXJuIWx8fG51bGw9PT1sLmZpcnN0Q2hpbGR8fEI2KGMpfWZ1bmN0aW9uIGI1KGMsbCxhLGQ9ITApe2NvbnN0IGg9'@;
put 'bFt4aV07aWYoZnVuY3Rpb24gb3YoYyxsLGEsZCl7Y29uc3QgaD1lbCtkLGY9YS5sZW5ndGg7ZD4wJiYoYVtoLTFdW25hXT1sKSxkPGYtZWw/KGxbbmFdPWFbaF0saGEoYSxlbCtkLGwpKTooYS5wdXNoKGwpLGxbbmFdPW51bGwpLGxbUWFdPWE7Y29uc3Qgdj1sW0RoXTtudWxsIT09diYmYSE9'@;
put 'PXYmJmZ1bmN0aW9uIHpJKGMsbCl7Y29uc3QgYT1jW0VkXTtsW0FzXSE9PWxbUWFdW1FhXVtBc10mJihjW3BvXXw9TjIuSGFzVHJhbnNwbGFudGVkVmlld3MpLG51bGw9PT1hP2NbRWRdPVtsXTphLnB1c2gobCl9KHYsbCk7Y29uc3QgVD1sW0d1XTtudWxsIT09VCYmVC5pbnNlcnRWaWV3KGMp'@;
put 'LHNfKGwpLGxbcG9dfD0xMjh9KGgsbCxjLGEpLGQpe2NvbnN0IHY9ZnYoYSxjKSxUPWxbT29dLFk9JDIoVCxjW09hXSk7bnVsbCE9PVkmJmZ1bmN0aW9uIEJJKGMsbCxhLGQsaCxmKXtkW0NhXT1oLGRbamFdPWwsaTgoYyxkLGEsMSxoLGYpfShoLGNbamFdLFQsbCxZLHYpfWNvbnN0IGY9bFtr'@;
put 'bF07bnVsbCE9PWYmJm51bGwhPT1mLmZpcnN0Q2hpbGQmJihmLmZpcnN0Q2hpbGQ9bnVsbCl9ZnVuY3Rpb24gdzUoYyxsLGEsZCxoPSExKXtmb3IoO251bGwhPT1hOyl7Y29uc3QgZj1sW2EuaW5kZXhdO251bGwhPT1mJiZkLnB1c2goeGEoZikpLGljKGYpJiZ5UyhmLGQpO2NvbnN0IHY9YS50'@;
put 'eXBlO2lmKDgmdil3NShjLGwsYS5jaGlsZCxkKTtlbHNlIGlmKDMyJnYpe2NvbnN0IFQ9bnYoYSxsKTtsZXQgWTtmb3IoO1k9VCgpOylkLnB1c2goWSl9ZWxzZSBpZigxNiZ2KXtjb25zdCBUPUtDKGwsYSk7aWYoQXJyYXkuaXNBcnJheShUKSlkLnB1c2goLi4uVCk7ZWxzZXtjb25zdCBZPW0z'@;
put 'KGxbQXNdKTt3NShZW3hpXSxZLFQsZCwhMCl9fWE9aD9hLnByb2plY3Rpb25OZXh0OmEubmV4dH1yZXR1cm4gZH1mdW5jdGlvbiB5UyhjLGwpe2ZvcihsZXQgYT1lbDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdLGg9ZFt4aV0uZmlyc3RDaGlsZDtudWxsIT09aCYmdzUoZFt4aV0sZCxo'@;
put 'LGwpfWNbT2FdIT09Y1tDYV0mJmwucHVzaChjW09hXSl9bGV0IGJTPVtdO2NvbnN0IGdSPXt2ZXJzaW9uOjAsbGFzdENsZWFuRXBvY2g6MCxkaXJ0eTohMSxwcm9kdWNlck5vZGU6dm9pZCAwLHByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uOnZvaWQgMCxwcm9kdWNlckluZGV4T2ZUaGlzOnZvaWQg'@;
put 'MCxuZXh0UHJvZHVjZXJJbmRleDowLGxpdmVDb25zdW1lck5vZGU6dm9pZCAwLGxpdmVDb25zdW1lckluZGV4T2ZUaGlzOnZvaWQgMCxjb25zdW1lckFsbG93U2lnbmFsV3JpdGVzOiExLGNvbnN1bWVySXNBbHdheXNMaXZlOiExLHByb2R1Y2VyTXVzdFJlY29tcHV0ZTooKT0+ITEscHJvZHVj'@;
put 'ZXJSZWNvbXB1dGVWYWx1ZTooKT0+e30sY29uc3VtZXJNYXJrZWREaXJ0eTooKT0+e30sY29uc3VtZXJPblNpZ25hbFJlYWQ6KCk9Pnt9LGNvbnN1bWVySXNBbHdheXNMaXZlOiEwLGNvbnN1bWVyTWFya2VkRGlydHk6Yz0+e3FtKGMubFZpZXcpfSxjb25zdW1lck9uU2lnbmFsUmVhZCgpe3Ro'@;
put 'aXMubFZpZXdbQjFdPXRoaXN9fSx3Uz0xMDA7ZnVuY3Rpb24gYzgoYyxsPSEwLGE9MCl7Y29uc3QgZD1jW0l1XSxoPWQucmVuZGVyZXJGYWN0b3J5O2guYmVnaW4/LigpO3RyeXshZnVuY3Rpb24gX1IoYyxsKXtEdihjLGwpO2xldCBhPTA7Zm9yKDtTNihjKTspe2lmKGE9PT13Uyl0aHJvdyBu'@;
put 'ZXcgem4oMTAzLCExKTthKyssRHYoYywxKX19KGMsYSl9Y2F0Y2godil7dGhyb3cgbCYmZjQoYyx2KSx2fWZpbmFsbHl7aC5lbmQ/LigpLGQuaW5saW5lRWZmZWN0UnVubmVyPy5mbHVzaCgpfX1mdW5jdGlvbiB2UihjLGwsYSxkKXtjb25zdCBoPWxbcG9dO2lmKCEoMjU2Jn5oKSlyZXR1cm47'@;
put 'bFtJdV0uaW5saW5lRWZmZWN0UnVubmVyPy5mbHVzaCgpLFhtKGwpO2xldCB2PW51bGwsVD1udWxsOyhmdW5jdGlvbiB5UihjKXtyZXR1cm4gMiE9PWMudHlwZX0pKGMpJiYoVD1mdW5jdGlvbiBmUihjKXtyZXR1cm4gY1tCMV0/P2Z1bmN0aW9uIHBSKGMpe2NvbnN0IGw9YlMucG9wKCk/P09i'@;
put 'amVjdC5jcmVhdGUoZ1IpO3JldHVybiBsLmxWaWV3PWMsbH0oYyl9KGwpLHY9ZnVuY3Rpb24geChjKXtyZXR1cm4gYyYmKGMubmV4dFByb2R1Y2VySW5kZXg9MCksc2UoYyl9KFQpKTt0cnl7aV8obCksZnVuY3Rpb24gSE0oYyl7cmV0dXJuIEdvLmxGcmFtZS5iaW5kaW5nSW5kZXg9Y30oYy5i'@;
put 'aW5kaW5nU3RhcnRJbmRleCksbnVsbCE9PWEmJm9TKGMsbCxhLDIsZCk7Y29uc3QgWT0hKDMmfmgpO2lmKFkpe2NvbnN0IF9lPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1fZSYmQTYobCxfZSxudWxsKX1lbHNle2NvbnN0IF9lPWMucHJlT3JkZXJIb29rcztudWxsIT09X2UmJkw2KGws'@;
put 'X2UsMCxudWxsKSxtXyhsLDApfWlmKGZ1bmN0aW9uIGJSKGMpe2ZvcihsZXQgbD1zQyhjKTtudWxsIT09bDtsPWFDKGwpKXtpZighKGxbcG9dJk4yLkhhc1RyYW5zcGxhbnRlZFZpZXdzKSljb250aW51ZTtjb25zdCBhPWxbRWRdO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtRQShhW2Rd'@;
put 'KX19fShsKSxNUyhsLDApLG51bGwhPT1jLmNvbnRlbnRRdWVyaWVzJiZfUyhjLGwpLFkpe2NvbnN0IF9lPWMuY29udGVudENoZWNrSG9va3M7bnVsbCE9PV9lJiZBNihsLF9lKX1lbHNle2NvbnN0IF9lPWMuY29udGVudEhvb2tzO251bGwhPT1fZSYmTDYobCxfZSwxKSxtXyhsLDEpfSFmdW5j'@;
put 'dGlvbiBHSShjLGwpe2NvbnN0IGE9Yy5ob3N0QmluZGluZ09wQ29kZXM7aWYobnVsbCE9PWEpdHJ5e2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBoPWFbZF07aWYoaDwwKWczKH5oKTtlbHNle2NvbnN0IGY9aCx2PWFbKytkXSxUPWFbKytkXTtjTCh2LGYpLFQoMixsW2ZdKX19'@;
put 'fWZpbmFsbHl7ZzMoLTEpfX0oYyxsKTtjb25zdCByZT1jLmNvbXBvbmVudHM7bnVsbCE9PXJlJiZTUyhsLHJlLDApO2NvbnN0IGZlPWMudmlld1F1ZXJ5O2lmKG51bGwhPT1mZSYmbDgoMixmZSxkKSxZKXtjb25zdCBfZT1jLnZpZXdDaGVja0hvb2tzO251bGwhPT1fZSYmQTYobCxfZSl9ZWxz'@;
put 'ZXtjb25zdCBfZT1jLnZpZXdIb29rcztudWxsIT09X2UmJkw2KGwsX2UsMiksbV8obCwyKX1pZighMD09PWMuZmlyc3RVcGRhdGVQYXNzJiYoYy5maXJzdFVwZGF0ZVBhc3M9ITEpLGxbSDJdKXtmb3IoY29uc3QgX2Ugb2YgbFtIMl0pX2UoKTtsW0gyXT1udWxsfWxbcG9dJj0tNzN9Y2F0Y2go'@;
put 'WSl7dGhyb3cgcW0obCksWX1maW5hbGx5e251bGwhPT1UJiYoZnVuY3Rpb24gXyhjLGwpe2lmKHNlKGwpLGMmJnZvaWQgMCE9PWMucHJvZHVjZXJOb2RlJiZ2b2lkIDAhPT1jLnByb2R1Y2VySW5kZXhPZlRoaXMmJnZvaWQgMCE9PWMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24pe2lmKHVlKGMp'@;
put 'KWZvcihsZXQgYT1jLm5leHRQcm9kdWNlckluZGV4O2E8Yy5wcm9kdWNlck5vZGUubGVuZ3RoO2ErKyluZShjLnByb2R1Y2VyTm9kZVthXSxjLnByb2R1Y2VySW5kZXhPZlRoaXNbYV0pO2Zvcig7Yy5wcm9kdWNlck5vZGUubGVuZ3RoPmMubmV4dFByb2R1Y2VySW5kZXg7KWMucHJvZHVjZXJO'@;
put 'b2RlLnBvcCgpLGMucHJvZHVjZXJMYXN0UmVhZFZlcnNpb24ucG9wKCksYy5wcm9kdWNlckluZGV4T2ZUaGlzLnBvcCgpfX0oVCx2KSxmdW5jdGlvbiBtUihjKXtjLmxWaWV3W0IxXSE9PWMmJihjLmxWaWV3PW51bGwsYlMucHVzaChjKSl9KFQpKSxXcCgpfX1mdW5jdGlvbiBNUyhjLGwpe2Zv'@;
put 'cihsZXQgYT1zQyhjKTtudWxsIT09YTthPWFDKGEpKWZvcihsZXQgZD1lbDtkPGEubGVuZ3RoO2QrKylDUyhhW2RdLGwpfWZ1bmN0aW9uIHdSKGMsbCxhKXtDUyh5MChsLGMpLGEpfWZ1bmN0aW9uIENTKGMsbCl7cl8oYykmJkR2KGMsbCl9ZnVuY3Rpb24gRHYoYyxsKXtjb25zdCBkPWNbeGld'@;
put 'LGg9Y1twb10sZj1jW0IxXTtsZXQgdj0hISgwPT09bCYmMTYmaCk7aWYodnx8PSEhKDY0JmgmJjA9PT1sKSx2fHw9ISEoMTAyNCZoKSx2fHw9ISghZj8uZGlydHl8fCFwKGYpKSxmJiYoZi5kaXJ0eT0hMSksY1twb10mPS05MjE3LHYpdlIoZCxjLGQudGVtcGxhdGUsY1tyYV0pO2Vsc2UgaWYo'@;
put 'ODE5MiZoKXtNUyhjLDEpO2NvbnN0IFQ9ZC5jb21wb25lbnRzO251bGwhPT1UJiZTUyhjLFQsMSl9fWZ1bmN0aW9uIFNTKGMsbCxhKXtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2QrKyl3UihjLGxbZF0sYSl9ZnVuY3Rpb24gTTUoYyl7Zm9yKGNbSXVdLmNoYW5nZURldGVjdGlvblNjaGVkdWxl'@;
put 'cj8ubm90aWZ5KCk7Yzspe2NbcG9dfD02NDtjb25zdCBsPW0zKGMpO2lmKExoKGMpJiYhbClyZXR1cm4gYztjPWx9cmV0dXJuIG51bGx9Y2xhc3MgQzV7Z2V0IHJvb3ROb2Rlcygpe2NvbnN0IGw9dGhpcy5fbFZpZXcsYT1sW3hpXTtyZXR1cm4gdzUoYSxsLGEuZmlyc3RDaGlsZCxbXSl9Y29u'@;
put 'c3RydWN0b3IobCxhLGQ9ITApe3RoaXMuX2xWaWV3PWwsdGhpcy5fY2RSZWZJbmplY3RpbmdWaWV3PWEsdGhpcy5ub3RpZnlFcnJvckhhbmRsZXI9ZCx0aGlzLl9hcHBSZWY9bnVsbCx0aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1nZXQgY29udGV4dCgpe3JldHVybiB0aGlzLl9s'@;
put 'Vmlld1tyYV19c2V0IGNvbnRleHQobCl7dGhpcy5fbFZpZXdbcmFdPWx9Z2V0IGRlc3Ryb3llZCgpe3JldHVybiEoMjU2Jn50aGlzLl9sVmlld1twb10pfWRlc3Ryb3koKXtpZih0aGlzLl9hcHBSZWYpdGhpcy5fYXBwUmVmLmRldGFjaFZpZXcodGhpcyk7ZWxzZSBpZih0aGlzLl9hdHRhY2hl'@;
put 'ZFRvVmlld0NvbnRhaW5lcil7Y29uc3QgbD10aGlzLl9sVmlld1tRYV07aWYoaWMobCkpe2NvbnN0IGE9bFs4XSxkPWE/YS5pbmRleE9mKHRoaXMpOi0xO2Q+LTEmJih1NShsLGQpLGVjKGEsZCkpfXRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSExfUkzKHRoaXMuX2xWaWV3W3hpXSx0'@;
put 'aGlzLl9sVmlldyl9b25EZXN0cm95KGwpe3g2KHRoaXMuX2xWaWV3LGwpfW1hcmtGb3JDaGVjaygpe001KHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlld3x8dGhpcy5fbFZpZXcpfWRldGFjaCgpe3RoaXMuX2xWaWV3W3BvXSY9LTEyOX1yZWF0dGFjaCgpe3NfKHRoaXMuX2xWaWV3KSx0aGlzLl9s'@;
put 'Vmlld1twb118PTEyOH1kZXRlY3RDaGFuZ2VzKCl7dGhpcy5fbFZpZXdbcG9dfD0xMDI0LGM4KHRoaXMuX2xWaWV3LHRoaXMubm90aWZ5RXJyb3JIYW5kbGVyKX1jaGVja05vQ2hhbmdlcygpe31hdHRhY2hUb1ZpZXdDb250YWluZXJSZWYoKXtpZih0aGlzLl9hcHBSZWYpdGhyb3cgbmV3IHpu'@;
put 'KDkwMiwhMSk7dGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITB9ZGV0YWNoRnJvbUFwcFJlZigpe3RoaXMuX2FwcFJlZj1udWxsLEdDKHRoaXMuX2xWaWV3W3hpXSx0aGlzLl9sVmlldyl9YXR0YWNoVG9BcHBSZWYobCl7aWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpdGhy'@;
put 'b3cgbmV3IHpuKDkwMiwhMSk7dGhpcy5fYXBwUmVmPWwsc18odGhpcy5fbFZpZXcpfX1sZXQgdGw9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLl9fTkdfRUxFTUVOVF9JRF9fPVNSfXJldHVybiBjfSkoKTtjb25zdCBNUj10bCxDUj1jbGFzcyBleHRlbmRzIE1Se2NvbnN0cnVjdG9yKGws'@;
put 'YSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRl'@;
put 'ZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSl9Y3JlYXRlRW1iZWRkZWRWaWV3SW1wbChsLGEsZCl7Y29uc3QgaD1mdW5jdGlvbiB2NShjLGwsYSxkKXtjb25zdCBoPXNlKG51bGwpO3RyeXtjb25zdCBmPWwudFZpZXcsWT1vOChjLGYsYSw0MDk2JmNb'@;
put 'cG9dPzQwOTY6MTYsbnVsbCxsLG51bGwsbnVsbCxkPy5pbmplY3Rvcj8/bnVsbCxkPy5lbWJlZGRlZFZpZXdJbmplY3Rvcj8/bnVsbCxkPy5kZWh5ZHJhdGVkVmlldz8/bnVsbCk7WVtEaF09Y1tsLmluZGV4XTtjb25zdCBmZT1jW0d1XTtyZXR1cm4gbnVsbCE9PWZlJiYoWVtHdV09ZmUuY3Jl'@;
put 'YXRlRW1iZWRkZWRWaWV3KGYpKSxFdihmLFksYSksWX1maW5hbGx5e3NlKGgpfX0odGhpcy5fZGVjbGFyYXRpb25MVmlldyx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIsbCx7ZW1iZWRkZWRWaWV3SW5qZWN0b3I6YSxkZWh5ZHJhdGVkVmlldzpkfSk7cmV0dXJuIG5ldyBDNShoKX19O2Z1'@;
put 'bmN0aW9uIFNSKCl7cmV0dXJuIHU4KGZhKCksTnIoKSl9ZnVuY3Rpb24gdTgoYyxsKXtyZXR1cm4gNCZjLnR5cGU/bmV3IENSKGwsYyx3MyhjLGwpKTpudWxsfWNsYXNzIG04e31jbGFzcyBHUnt9Y2xhc3MgUlN7fWNsYXNzIEtSe3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe3Rocm93IGZ1'@;
put 'bmN0aW9uICRSKGMpe2NvbnN0IGw9RXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke2RyKGMpfS5gKTtyZXR1cm4gbC5uZ0NvbXBvbmVudD1jLGx9KGwpfX1sZXQgZzQ9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLk5VTEw9bmV3IEtSfXJldHVybiBjfSkoKTtjbGFz'@;
put 'cyBUNXt9bGV0IGNzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRlc3Ryb3lOb2RlPW51bGx9c3RhdGljI2U9dGhpcy5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gWFIoKXtjb25zdCBjPU5yKCksYT15MChmYSgpLmluZGV4LGMpO3JldHVybihyYyhhKT9hOmMpW09v'@;
put 'XX0oKX1yZXR1cm4gY30pKCksSlI9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bnVsbH0pfXJldHVybiBjfSkoKTtjb25zdCBGdj17fSxPUz1uZXcgU2V0O2Z1bmN0aW9uIEhkKGMpe09TLmhh'@;
put 'cyhjKXx8KE9TLmFkZChjKSxwZXJmb3JtYW5jZT8ubWFyaz8uKCJtYXJrX2ZlYXR1cmVfdXNhZ2UiLHtkZXRhaWw6e2ZlYXR1cmU6Y319KSl9dmFyIFAzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRWFybHlSZWFkPTBdPSJFYXJseVJlYWQiLGNbYy5Xcml0ZT0xXT0iV3JpdGUiLGNbYy5NaXhl'@;
put 'ZFJlYWRXcml0ZT0yXT0iTWl4ZWRSZWFkV3JpdGUiLGNbYy5SZWFkPTNdPSJSZWFkIixjfShQM3x8e30pO2NvbnN0IFBTPXtkZXN0cm95KCl7fX07ZnVuY3Rpb24gTnYoYyxsKXshbCYmZnVuY3Rpb24gTjEoYyl7aWYoIVlwKCkpdGhyb3cgbmV3IHpuKC0yMDMsITEpfSgpO2NvbnN0IGE9bD8u'@;
put 'aW5qZWN0b3I/P1ZyKHBhKTtpZighZnVuY3Rpb24gamgoYyl7cmV0dXJuImJyb3dzZXIiPT09KGM/P1ZyKHBhKSkuZ2V0KEFvKX0oYSkpcmV0dXJuIFBTO0hkKCJOZ0FmdGVyTmV4dFJlbmRlciIpO2NvbnN0IGQ9YS5nZXQoRDUpLGg9ZC5oYW5kbGVyPz89bmV3IEhTLGY9bD8ucGhhc2U/P1Az'@;
put 'Lk1peGVkUmVhZFdyaXRlLHY9KCk9PntoLnVucmVnaXN0ZXIoWSksVCgpfSxUPWEuZ2V0KGU0KS5vbkRlc3Ryb3kodiksWT1ldShhLCgpPT5uZXcgRlMoZiwoKT0+e3YoKSxjKCl9KSk7cmV0dXJuIGgucmVnaXN0ZXIoWSkse2Rlc3Ryb3k6dn19Y2xhc3MgRlN7Y29uc3RydWN0b3IobCxhKXt0'@;
put 'aGlzLnBoYXNlPWwsdGhpcy5jYWxsYmFja0ZuPWEsdGhpcy5lcnJvckhhbmRsZXI9VnIoT2Qse29wdGlvbmFsOiEwfSksVnIobTgse29wdGlvbmFsOiEwfSk/Lm5vdGlmeSgxKX1pbnZva2UoKXt0cnl7dGhpcy5jYWxsYmFja0ZuKCl9Y2F0Y2gobCl7dGhpcy5lcnJvckhhbmRsZXI/LmhhbmRs'@;
put 'ZUVycm9yKGwpfX19Y2xhc3MgSFN7Y29uc3RydWN0b3IoKXt0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz0hMSx0aGlzLmJ1Y2tldHM9e1tQMy5FYXJseVJlYWRdOm5ldyBTZXQsW1AzLldyaXRlXTpuZXcgU2V0LFtQMy5NaXhlZFJlYWRXcml0ZV06bmV3IFNldCxbUDMuUmVhZF06bmV3IFNldH0s'@;
put 'dGhpcy5kZWZlcnJlZENhbGxiYWNrcz1uZXcgU2V0fXJlZ2lzdGVyKGwpeyh0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz90aGlzLmRlZmVycmVkQ2FsbGJhY2tzOnRoaXMuYnVja2V0c1tsLnBoYXNlXSkuYWRkKGwpfXVucmVnaXN0ZXIobCl7dGhpcy5idWNrZXRzW2wucGhhc2VdLmRlbGV0ZShs'@;
put 'KSx0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmRlbGV0ZShsKX1leGVjdXRlKCl7dGhpcy5leGVjdXRpbmdDYWxsYmFja3M9ITA7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWZvcihjb25zdCBhIG9mIGwpYS5pbnZva2UoKTt0aGlzLmV4ZWN1dGluZ0NhbGxiYWNr'@;
put 'cz0hMTtmb3IoY29uc3QgbCBvZiB0aGlzLmRlZmVycmVkQ2FsbGJhY2tzKXRoaXMuYnVja2V0c1tsLnBoYXNlXS5hZGQobCk7dGhpcy5kZWZlcnJlZENhbGxiYWNrcy5jbGVhcigpfWRlc3Ryb3koKXtmb3IoY29uc3QgbCBvZiBPYmplY3QudmFsdWVzKHRoaXMuYnVja2V0cykpbC5jbGVhcigp'@;
put 'O3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX19bGV0IEQ1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmludGVybmFsQ2FsbGJhY2tzPVtdfWV4ZWN1dGUoKXt0aGlzLmV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpLHRoaXMuaGFuZGxl'@;
put 'cj8uZXhlY3V0ZSgpfWV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpe2NvbnN0IGE9Wy4uLnRoaXMuaW50ZXJuYWxDYWxsYmFja3NdO3RoaXMuaW50ZXJuYWxDYWxsYmFja3MubGVuZ3RoPTA7Zm9yKGNvbnN0IGQgb2YgYSlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmhhbmRsZXI/LmRlc3Ryb3ko'@;
put 'KSx0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0aD0wfXN0YXRpYyNlPXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5uZXcgY30pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB2OChjLGwsYSl7bGV0IGQ9'@;
put 'YT9jLnN0eWxlczpudWxsLGg9YT9jLmNsYXNzZXM6bnVsbCxmPTA7aWYobnVsbCE9PWwpZm9yKGxldCB2PTA7djxsLmxlbmd0aDt2Kyspe2NvbnN0IFQ9bFt2XTsibnVtYmVyIj09dHlwZW9mIFQ/Zj1UOjE9PWY/aD1ZMChoLFQpOjI9PWYmJihkPVkwKGQsVCsiOiAiK2xbKyt2XSsiOyIpKX1h'@;
put 'P2Muc3R5bGVzPWQ6Yy5zdHlsZXNXaXRob3V0SG9zdD1kLGE/Yy5jbGFzc2VzPWg6Yy5jbGFzc2VzV2l0aG91dEhvc3Q9aH1jbGFzcyBZUyBleHRlbmRzIGc0e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5uZ01vZHVsZT1sfXJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe2NvbnN0IGE9'@;
put 'dHMobCk7cmV0dXJuIG5ldyBMNShhLHRoaXMubmdNb2R1bGUpfX1mdW5jdGlvbiB6UyhjKXtjb25zdCBsPVtdO2Zvcihjb25zdCBhIGluIGMpe2lmKCFjLmhhc093blByb3BlcnR5KGEpKWNvbnRpbnVlO2NvbnN0IGQ9Y1thXTt2b2lkIDAhPT1kJiZsLnB1c2goe3Byb3BOYW1lOkFycmF5Lmlz'@;
put 'QXJyYXkoZCk/ZFswXTpkLHRlbXBsYXRlTmFtZTphfSl9cmV0dXJuIGx9Y2xhc3MgeTh7Y29uc3RydWN0b3IobCxhKXt0aGlzLmluamVjdG9yPWwsdGhpcy5wYXJlbnRJbmplY3Rvcj1hfWdldChsLGEsZCl7ZD1UMihkKTtjb25zdCBoPXRoaXMuaW5qZWN0b3IuZ2V0KGwsRnYsZCk7cmV0dXJu'@;
put 'IGghPT1Gdnx8YT09PUZ2P2g6dGhpcy5wYXJlbnRJbmplY3Rvci5nZXQobCxhLGQpfX1jbGFzcyBMNSBleHRlbmRzIFJTe2dldCBpbnB1dHMoKXtjb25zdCBsPXRoaXMuY29tcG9uZW50RGVmLGE9bC5pbnB1dFRyYW5zZm9ybXMsZD16UyhsLmlucHV0cyk7aWYobnVsbCE9PWEpZm9yKGNvbnN0'@;
put 'IGggb2YgZClhLmhhc093blByb3BlcnR5KGgucHJvcE5hbWUpJiYoaC50cmFuc2Zvcm09YVtoLnByb3BOYW1lXSk7cmV0dXJuIGR9Z2V0IG91dHB1dHMoKXtyZXR1cm4gelModGhpcy5jb21wb25lbnREZWYub3V0cHV0cyl9Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY29tcG9uZW50'@;
put 'RGVmPWwsdGhpcy5uZ01vZHVsZT1hLHRoaXMuY29tcG9uZW50VHlwZT1sLnR5cGUsdGhpcy5zZWxlY3Rvcj1mdW5jdGlvbiBObShjKXtyZXR1cm4gYy5tYXAoSG0pLmpvaW4oIiwiKX0obC5zZWxlY3RvcnMpLHRoaXMubmdDb250ZW50U2VsZWN0b3JzPWwubmdDb250ZW50U2VsZWN0b3JzP2wu'@;
put 'bmdDb250ZW50U2VsZWN0b3JzOltdLHRoaXMuaXNCb3VuZFRvTW9kdWxlPSEhYX1jcmVhdGUobCxhLGQsaCl7Y29uc3QgZj1zZShudWxsKTt0cnl7bGV0IHY9KGg9aHx8dGhpcy5uZ01vZHVsZSlpbnN0YW5jZW9mIGRsP2g6aD8uaW5qZWN0b3I7diYmbnVsbCE9PXRoaXMuY29tcG9uZW50RGVm'@;
put 'LmdldFN0YW5kYWxvbmVJbmplY3RvciYmKHY9dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yKHYpfHx2KTtjb25zdCBUPXY/bmV3IHk4KGwsdik6bCxZPVQuZ2V0KFQ1LG51bGwpO2lmKG51bGw9PT1ZKXRocm93IG5ldyB6big0MDcsITEpO2NvbnN0IHJlPVQuZ2V0KEpS'@;
put 'LG51bGwpLGtlPXtyZW5kZXJlckZhY3Rvcnk6WSxzYW5pdGl6ZXI6cmUsaW5saW5lRWZmZWN0UnVubmVyOm51bGwsYWZ0ZXJSZW5kZXJFdmVudE1hbmFnZXI6VC5nZXQoRDUsbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOlQuZ2V0KG04LG51bGwpfSxXZT1ZLmNyZWF0ZVJlbmRlcmVy'@;
put 'KG51bGwsdGhpcy5jb21wb25lbnREZWYpLEplPXRoaXMuY29tcG9uZW50RGVmLnNlbGVjdG9yc1swXVswXXx8ImRpdiIsdHQ9ZD9mdW5jdGlvbiBxSShjLGwsYSxkKXtjb25zdCBmPWQuZ2V0KHdDLCExKXx8YT09PUdzLlNoYWRvd0RvbSx2PWMuc2VsZWN0Um9vdEVsZW1lbnQobCxmKTtyZXR1'@;
put 'cm4gZnVuY3Rpb24gS0koYyl7c1MoYyl9KHYpLHZ9KFdlLGQsdGhpcy5jb21wb25lbnREZWYuZW5jYXBzdWxhdGlvbixUKTpMMyhXZSxKZSxmdW5jdGlvbiBlTyhjKXtjb25zdCBsPWMudG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PWw/InN2ZyI6Im1hdGgiPT09bD8ibWF0aCI6bnVsbH0o'@;
put 'SmUpKTtsZXQgeXQ9NTEyO3RoaXMuY29tcG9uZW50RGVmLnNpZ25hbHM/eXR8PTQwOTY6dGhpcy5jb21wb25lbnREZWYub25QdXNofHwoeXR8PTE2KTtsZXQgd3Q9bnVsbDtudWxsIT09dHQmJih3dD1GXyh0dCxULCEwKSk7Y29uc3QgTHQ9YnYoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxu'@;
put 'dWxsLG51bGwsbnVsbCxudWxsKSxvbj1vOChudWxsLEx0LG51bGwseXQsbnVsbCxudWxsLGtlLFdlLFQsbnVsbCx3dCk7bGV0IHNuLE1uO1htKG9uKTt0cnl7Y29uc3QgVm49dGhpcy5jb21wb25lbnREZWY7bGV0IHVyLFRyPW51bGw7Vm4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyh1cj1bXSxU'@;
put 'cj1uZXcgTWFwLFZuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcyhWbix1cixUciksdXIucHVzaChWbikpOnVyPVtWbl07Y29uc3QgUGk9ZnVuY3Rpb24gbk8oYyxsKXtjb25zdCBhPWNbeGldLGQ9em87cmV0dXJuIGNbZF09bCxoNChhLGQsMiwiI2hvc3QiLG51bGwpfShvbix0dCksSGk9ZnVuY3Rp'@;
put 'b24gck8oYyxsLGEsZCxoLGYsdil7Y29uc3QgVD1oW3hpXTshZnVuY3Rpb24gaU8oYyxsLGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPU8xKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYodjgobCxsLm1lcmdlZEF0dHJzLCEwKSxu'@;
put 'dWxsIT09YSYmblMoZCxhLGwpKX0oZCxjLGwsdik7bGV0IFk9bnVsbDtudWxsIT09bCYmKFk9Rl8obCxoW2hsXSkpO2NvbnN0IHJlPWYucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGwsYSk7bGV0IGZlPTE2O2Euc2lnbmFscz9mZT00MDk2OmEub25QdXNoJiYoZmU9NjQpO2NvbnN0'@;
put 'IF9lPW84KGgsczgoYSksbnVsbCxmZSxoW2MuaW5kZXhdLGMsZixyZSxudWxsLG51bGwsWSk7cmV0dXJuIFQuZmlyc3RDcmVhdGVQYXNzJiZDdihULGMsZC5sZW5ndGgtMSksZzUoaCxfZSksaFtjLmluZGV4XT1fZX0oUGksdHQsVm4sdXIsb24sa2UsV2UpO01uPSRtKEx0LHpvKSx0dCYmZnVu'@;
put 'Y3Rpb24gc08oYyxsLGEsZCl7aWYoZClDaChjLGEsWyJuZy12ZXJzaW9uIiwiMTcuMy43Il0pO2Vsc2V7Y29uc3R7YXR0cnM6aCxjbGFzc2VzOmZ9PWZ1bmN0aW9uIF9vKGMpe2NvbnN0IGw9W10sYT1bXTtsZXQgZD0xLGg9Mjtmb3IoO2Q8Yy5sZW5ndGg7KXtsZXQgZj1jW2RdO2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgZikyPT09aD8iIiE9PWYmJmwucHVzaChmLGNbKytkXSk6OD09PWgmJmEucHVzaChmKTtlbHNle2lmKCF1bChoKSlicmVhaztoPWZ9ZCsrfXJldHVybnthdHRyczpsLGNsYXNzZXM6YX19KGwuc2VsZWN0b3JzWzBdKTtoJiZDaChjLGEsaCksZiYmZi5sZW5ndGg+MCYmdFMo'@;
put 'YyxhLGYuam9pbigiICIpKX19KFdlLFZuLHR0LGQpLHZvaWQgMCE9PWEmJmZ1bmN0aW9uIGFPKGMsbCxhKXtjb25zdCBkPWMucHJvamVjdGlvbj1bXTtmb3IobGV0IGg9MDtoPGwubGVuZ3RoO2grKyl7Y29uc3QgZj1hW2hdO2QucHVzaChudWxsIT1mP0FycmF5LmZyb20oZik6bnVsbCl9fShN'@;
put 'bix0aGlzLm5nQ29udGVudFNlbGVjdG9ycyxhKSxzbj1mdW5jdGlvbiBvTyhjLGwsYSxkLGgsZil7Y29uc3Qgdj1mYSgpLFQ9aFt4aV0sWT1SdSh2LGgpO012KFQsaCx2LGEsbnVsbCxkKTtmb3IobGV0IGZlPTA7ZmU8YS5sZW5ndGg7ZmUrKylOYyh2MyhoLFQsdi5kaXJlY3RpdmVTdGFydCtm'@;
put 'ZSx2KSxoKTtwUyhULGgsdiksWSYmTmMoWSxoKTtjb25zdCByZT12MyhoLFQsdi5kaXJlY3RpdmVTdGFydCt2LmNvbXBvbmVudE9mZnNldCx2KTtpZihjW3JhXT1oW3JhXT1yZSxudWxsIT09Zilmb3IoY29uc3QgZmUgb2YgZilmZShyZSxsKTtyZXR1cm4gX3YoVCx2LGgpLHJlfShIaSxWbix1'@;
put 'cixUcixvbixbbE9dKSxFdihMdCxvbixudWxsKX1maW5hbGx5e1dwKCl9cmV0dXJuIG5ldyB0Tyh0aGlzLmNvbXBvbmVudFR5cGUsc24sdzMoTW4sb24pLG9uLE1uKX1maW5hbGx5e3NlKGYpfX19Y2xhc3MgdE8gZXh0ZW5kcyBHUntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKCksdGhp'@;
put 'cy5sb2NhdGlvbj1kLHRoaXMuX3Jvb3RMVmlldz1oLHRoaXMuX3ROb2RlPWYsdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPW51bGwsdGhpcy5pbnN0YW5jZT1hLHRoaXMuaG9zdFZpZXc9dGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1uZXcgQzUoaCx2b2lkIDAsITEpLHRoaXMuY29tcG9uZW50VHlw'@;
put 'ZT1sfXNldElucHV0KGwsYSl7Y29uc3QgZD10aGlzLl90Tm9kZS5pbnB1dHM7bGV0IGg7aWYobnVsbCE9PWQmJihoPWRbbF0pKXtpZih0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXM/Pz1uZXcgTWFwLHRoaXMucHJldmlvdXNJbnB1dFZhbHVlcy5oYXMobCkmJk9iamVjdC5pcyh0aGlzLnByZXZp'@;
put 'b3VzSW5wdXRWYWx1ZXMuZ2V0KGwpLGEpKXJldHVybjtjb25zdCBmPXRoaXMuX3Jvb3RMVmlldztrdihmW3hpXSxmLGgsbCxhKSx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuc2V0KGwsYSksTTUoeTAodGhpcy5fdE5vZGUuaW5kZXgsZikpfX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IEhj'@;
put 'KHRoaXMuX3ROb2RlLHRoaXMuX3Jvb3RMVmlldyl9ZGVzdHJveSgpe3RoaXMuaG9zdFZpZXcuZGVzdHJveSgpfW9uRGVzdHJveShsKXt0aGlzLmhvc3RWaWV3Lm9uRGVzdHJveShsKX19ZnVuY3Rpb24gbE8oKXtjb25zdCBjPWZhKCk7RDYoTnIoKVt4aV0sYyl9bGV0IHBzPSgoKT0+e2NsYXNz'@;
put 'IGN7c3RhdGljI2U9dGhpcy5fX05HX0VMRU1FTlRfSURfXz1jT31yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY08oKXtyZXR1cm4gV1MoZmEoKSxOcigpKX1jb25zdCB1Tz1wcyxVUz1jbGFzcyBleHRlbmRzIHVPe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0'@;
put 'aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiB3Myh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IEhjKHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJ'@;
put 'bmplY3Rvcigpe2NvbnN0IGw9R3AodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYoSTYobCkpe2NvbnN0IGE9ZTUobCx0aGlzLl9ob3N0TFZpZXcpLGQ9UW0obCk7cmV0dXJuIG5ldyBIYyhhW3hpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyBIYyhudWxsLHRoaXMuX2hvc3RM'@;
put 'Vmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3RoLTEpfWdldChsKXtjb25zdCBhPVpTKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVu'@;
put 'Z3RoLWVsfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9mIGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVjdG9yKTtjb25zdCBUPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydElt'@;
put 'cGwoVCxoLHA0KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksVH1jcmVhdGVDb21wb25lbnQobCxhLGQsaCxmKXtjb25zdCB2PWwmJiFmdW5jdGlvbiBucihjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY30obCk7bGV0IFQ7aWYodilUPWE7ZWxzZXtjb25zdCBKZT1hfHx7fTtUPUplLmluZGV4'@;
put 'LGQ9SmUuaW5qZWN0b3IsaD1KZS5wcm9qZWN0YWJsZU5vZGVzLGY9SmUuZW52aXJvbm1lbnRJbmplY3Rvcnx8SmUubmdNb2R1bGVSZWZ9Y29uc3QgWT12P2w6bmV3IEw1KHRzKGwpKSxyZT1kfHx0aGlzLnBhcmVudEluamVjdG9yO2lmKCFmJiZudWxsPT1ZLm5nTW9kdWxlKXtjb25zdCB0dD0o'@;
put 'dj9yZTp0aGlzLnBhcmVudEluamVjdG9yKS5nZXQoZGwsbnVsbCk7dHQmJihmPXR0KX10cyhZLmNvbXBvbmVudFR5cGU/P3t9KTtjb25zdCBXZT1ZLmNyZWF0ZShyZSxoLG51bGwsZik7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChXZS5ob3N0VmlldyxULHA0KHRoaXMuX2hvc3RUTm9kZSxudWxs'@;
put 'KSksV2V9aW5zZXJ0KGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChsLGEsITApfWluc2VydEltcGwobCxhLGQpe2NvbnN0IGg9bC5fbFZpZXc7aWYoZnVuY3Rpb24gSU0oYyl7cmV0dXJuIGljKGNbUWFdKX0oaCkpe2NvbnN0IFQ9dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09VCl0aGlzLmRl'@;
put 'dGFjaChUKTtlbHNle2NvbnN0IFk9aFtRYV0scmU9bmV3IFVTKFksWVtqYV0sWVtRYV0pO3JlLmRldGFjaChyZS5pbmRleE9mKGwpKX19Y29uc3QgZj10aGlzLl9hZGp1c3RJbmRleChhKSx2PXRoaXMuX2xDb250YWluZXI7cmV0dXJuIGI1KHYsaCxmLGQpLGwuYXR0YWNoVG9WaWV3Q29udGFp'@;
put 'bmVyUmVmKCksaGEoanYodiksZixsKSxsfW1vdmUobCxhKXtyZXR1cm4gdGhpcy5pbnNlcnQobCxhKX1pbmRleE9mKGwpe2NvbnN0IGE9WlModGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1hP2EuaW5kZXhPZihsKTotMX1yZW1vdmUobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRl'@;
put 'eChsLC0xKSxkPXU1KHRoaXMuX2xDb250YWluZXIsYSk7ZCYmKGVjKGp2KHRoaXMuX2xDb250YWluZXIpLGEpLEkzKGRbeGldLGQpKX1kZXRhY2gobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChsLC0xKSxkPXU1KHRoaXMuX2xDb250YWluZXIsYSk7cmV0dXJuIGQmJm51bGwhPWVjKGp2'@;
put 'KHRoaXMuX2xDb250YWluZXIpLGEpP25ldyBDNShkKTpudWxsfV9hZGp1c3RJbmRleChsLGE9MCl7cmV0dXJuIGw/P3RoaXMubGVuZ3RoK2F9fTtmdW5jdGlvbiBaUyhjKXtyZXR1cm4gY1s4XX1mdW5jdGlvbiBqdihjKXtyZXR1cm4gY1s4XXx8KGNbOF09W10pfWZ1bmN0aW9uIFdTKGMsbCl7'@;
put 'bGV0IGE7Y29uc3QgZD1sW2MuaW5kZXhdO3JldHVybiBpYyhkKT9hPWQ6KGE9eHYoZCxsLG51bGwsYyksbFtjLmluZGV4XT1hLGc1KGwsYSkpLEdTKGEsbCxjLGQpLG5ldyBVUyhhLGMsbCl9bGV0IEdTPWZ1bmN0aW9uIHFTKGMsbCxhLGQpe2lmKGNbT2FdKXJldHVybjtsZXQgaDtoPTgmYS50'@;
put 'eXBlP3hhKGQpOmZ1bmN0aW9uIGRPKGMsbCl7Y29uc3QgYT1jW09vXSxkPWEuY3JlYXRlQ29tbWVudCgiIiksaD1SdShsLGMpO3JldHVybiBSMyhhLCQyKGEsaCksZCxmdW5jdGlvbiBjdihjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbT2FdPWh9LEJ2'@;
put 'PSgpPT4hMTtjbGFzcyBZdntjb25zdHJ1Y3RvcihsKXt0aGlzLnF1ZXJ5TGlzdD1sLHRoaXMubWF0Y2hlcz1udWxsfWNsb25lKCl7cmV0dXJuIG5ldyBZdih0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyB6dntjb25zdHJ1Y3Rvcihs'@;
put 'PVtdKXt0aGlzLnF1ZXJpZXM9bH1jcmVhdGVFbWJlZGRlZFZpZXcobCl7Y29uc3QgYT1sLnF1ZXJpZXM7aWYobnVsbCE9PWEpe2NvbnN0IGQ9bnVsbCE9PWwuY29udGVudFF1ZXJpZXM/bC5jb250ZW50UXVlcmllc1swXTphLmxlbmd0aCxoPVtdO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2NvbnN0'@;
put 'IHY9YS5nZXRCeUluZGV4KGYpO2gucHVzaCh0aGlzLnF1ZXJpZXNbdi5pbmRleEluRGVjbGFyYXRpb25WaWV3XS5jbG9uZSgpKX1yZXR1cm4gbmV3IHp2KGgpfXJldHVybiBudWxsfWluc2VydFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKX1kZXRhY2hWaWV3KGwpe3Ro'@;
put 'aXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZmluaXNoVmlld0NyZWF0aW9uKGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyludWxsIT09R3YobCxhKS5t'@;
put 'YXRjaGVzJiZ0aGlzLnF1ZXJpZXNbYV0uc2V0RGlydHkoKX19Y2xhc3MgS1N7Y29uc3RydWN0b3IobCxhLGQ9bnVsbCl7dGhpcy5mbGFncz1hLHRoaXMucmVhZD1kLHRoaXMucHJlZGljYXRlPSJzdHJpbmciPT10eXBlb2YgbD9mdW5jdGlvbiBueChjKXtyZXR1cm4gYy5zcGxpdCgiLCIpLm1h'@;
put 'cChsPT5sLnRyaW0oKSl9KGwpOmx9fWNsYXNzIFV2e2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVlcmllcz1sfWVsZW1lbnRTdGFydChsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLmVsZW1lbnRTdGFydChsLGEpfWVsZW1lbnRFbmQo'@;
put 'bCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyl0aGlzLnF1ZXJpZXNbYV0uZWxlbWVudEVuZChsKX1lbWJlZGRlZFRWaWV3KGwpe2xldCBhPW51bGw7Zm9yKGxldCBkPTA7ZDx0aGlzLmxlbmd0aDtkKyspe2NvbnN0IGg9bnVsbCE9PWE/YS5sZW5ndGg6MCxmPXRoaXMu'@;
put 'Z2V0QnlJbmRleChkKS5lbWJlZGRlZFRWaWV3KGwsaCk7ZiYmKGYuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz1kLG51bGwhPT1hP2EucHVzaChmKTphPVtmXSl9cmV0dXJuIG51bGwhPT1hP25ldyBVdihhKTpudWxsfXRlbXBsYXRlKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVu'@;
put 'Z3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0udGVtcGxhdGUobCxhKX1nZXRCeUluZGV4KGwpe3JldHVybiB0aGlzLnF1ZXJpZXNbbF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKGwpe3RoaXMucXVlcmllcy5wdXNoKGwpfX1jbGFzcyBadntjb25zdHJ1Y3Rv'@;
put 'cihsLGE9LTEpe3RoaXMubWV0YWRhdGE9bCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJhdGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1hfWVsZW1lbnRT'@;
put 'dGFydChsLGEpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShhKSYmdGhpcy5tYXRjaFROb2RlKGwsYSl9ZWxlbWVudEVuZChsKXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PWwuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUobCxhKXt0aGlzLmVsZW1lbnRT'@;
put 'dGFydChsLGEpfWVtYmVkZGVkVFZpZXcobCxhKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGwpPyh0aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLWwuaW5kZXgsYSksbmV3IFp2KHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUobCl7aWYo'@;
put 'dGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0YWRhdGEuZmxhZ3Mpe2NvbnN0IGE9dGhpcy5fZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylkPWQucGFyZW50O3JldHVybiBhPT09KG51bGwh'@;
put 'PT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRj'@;
put 'aFROb2RlV2l0aFJlYWRPcHRpb24obCxhLG1PKGEsZikpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxINihhLGwsZiwhMSwhMSkpfWVsc2UgZD09PXRsPzQmYS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhS'@;
put 'ZWFkT3B0aW9uKGwsYSxINihhLGwsZCwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsZCl7aWYobnVsbCE9PWQpe2NvbnN0IGg9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1oKWlmKGg9PT0kaXx8aD09PXBzfHxoPT09dGwmJjQmYS50eXBlKXRoaXMuYWRkTWF0Y2go'@;
put 'YS5pbmRleCwtMik7ZWxzZXtjb25zdCBmPUg2KGEsbCxoLCExLCExKTtudWxsIT09ZiYmdGhpcy5hZGRNYXRjaChhLmluZGV4LGYpfWVsc2UgdGhpcy5hZGRNYXRjaChhLmluZGV4LGQpfX1hZGRNYXRjaChsLGEpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVtsLGFdOnRoaXMu'@;
put 'bWF0Y2hlcy5wdXNoKGwsYSl9fWZ1bmN0aW9uIG1PKGMsbCl7Y29uc3QgYT1jLmxvY2FsTmFtZXM7aWYobnVsbCE9PWEpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKWlmKGFbZF09PT1sKXJldHVybiBhW2QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gWFMoYyxsLGEsZCl7cmV0dXJuLTE9'@;
put 'PT1hP2Z1bmN0aW9uIGdPKGMsbCl7cmV0dXJuIDExJmMudHlwZT93MyhjLGwpOjQmYy50eXBlP3U4KGMsbCk6bnVsbH0obCxjKTotMj09PWE/ZnVuY3Rpb24gSlMoYyxsLGEpe3JldHVybiBhPT09JGk/dzMobCxjKTphPT09dGw/dTgobCxjKTphPT09cHM/V1MobCxjKTp2b2lkIDB9KGMsbCxk'@;
put 'KTp2MyhjLGNbeGldLGEsbCl9ZnVuY3Rpb24gSHUoYyxsLGEsZCl7Y29uc3QgaD1sW0d1XS5xdWVyaWVzW2RdO2lmKG51bGw9PT1oLm1hdGNoZXMpe2NvbnN0IGY9Yy5kYXRhLHY9YS5tYXRjaGVzLFQ9W107Zm9yKGxldCBZPTA7bnVsbCE9PXYmJlk8di5sZW5ndGg7WSs9Mil7Y29uc3QgcmU9'@;
put 'dltZXTtULnB1c2gocmU8MD9udWxsOlhTKGwsZltyZV0sdltZKzFdLGEubWV0YWRhdGEucmVhZCkpfWgubWF0Y2hlcz1UfXJldHVybiBoLm1hdGNoZXN9ZnVuY3Rpb24gYjgoYyxsLGEsZCl7Y29uc3QgaD1jLnF1ZXJpZXMuZ2V0QnlJbmRleChhKSxmPWgubWF0Y2hlcztpZihudWxsIT09Zil7'@;
put 'Y29uc3Qgdj1IdShjLGwsaCxhKTtmb3IobGV0IFQ9MDtUPGYubGVuZ3RoO1QrPTIpe2NvbnN0IFk9ZltUXTtpZihZPjApZC5wdXNoKHZbVC8yXSk7ZWxzZXtjb25zdCByZT1mW1QrMV0sZmU9bFstWV07Zm9yKGxldCBfZT1lbDtfZTxmZS5sZW5ndGg7X2UrKyl7Y29uc3Qga2U9ZmVbX2VdO2tl'@;
put 'W0RoXT09PWtlW1FhXSYmYjgoa2VbeGldLGtlLHJlLGQpfWlmKG51bGwhPT1mZVtFZF0pe2NvbnN0IF9lPWZlW0VkXTtmb3IobGV0IGtlPTA7a2U8X2UubGVuZ3RoO2tlKyspe2NvbnN0IFdlPV9lW2tlXTtiOChXZVt4aV0sV2UscmUsZCl9fX19fXJldHVybiBkfWZ1bmN0aW9uIFFTKGMsbCxh'@;
put 'KXtjb25zdCBkPW5ldyBuMSghKDQmfmEpKTtyZXR1cm4gZnVuY3Rpb24gY1MoYyxsLGEsZCl7Y29uc3QgaD12UyhsKTtoLnB1c2goYSksYy5maXJzdENyZWF0ZVBhc3MmJl81KGMpLnB1c2goZCxoLmxlbmd0aC0xKX0oYyxsLGQsZC5kZXN0cm95KSwobFtHdV0/Pz1uZXcgenYpLnF1ZXJpZXMu'@;
put 'cHVzaChuZXcgWXYoZCkpLTF9ZnVuY3Rpb24gcngoYyxsLGEpe251bGw9PT1jLnF1ZXJpZXMmJihjLnF1ZXJpZXM9bmV3IFV2KSxjLnF1ZXJpZXMudHJhY2sobmV3IFp2KGwsYSkpfWZ1bmN0aW9uIEd2KGMsbCl7cmV0dXJuIGMucXVlcmllcy5nZXRCeUluZGV4KGwpfWZ1bmN0aW9uIGl4KGMs'@;
put 'bCl7Y29uc3QgYT1jW3hpXSxkPUd2KGEsbCk7cmV0dXJuIGQuY3Jvc3Nlc05nVGVtcGxhdGU/YjgoYSxjLGwsW10pOkh1KGEsYyxkLGwpfWZ1bmN0aW9uIE04KGMpe3JldHVybiBmdW5jdGlvbiBJNShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmdm9pZCAwIT09Y1thZV19KGMpJiYi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgYy5zZXR9ZnVuY3Rpb24gc28oYyl7bGV0IGw9ZnVuY3Rpb24gZ3goYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KGMudHlwZSksYT0hMDtjb25zdCBkPVtjXTtmb3IoO2w7KXtsZXQgaDtpZihTYShjKSlo'@;
put 'PWwuXHUwMjc1Y21wfHxsLlx1MDI3NWRpcjtlbHNle2lmKGwuXHUwMjc1Y21wKXRocm93IG5ldyB6big5MDMsITEpO2g9bC5cdTAyNzVkaXJ9aWYoaCl7aWYoYSl7ZC5wdXNoKGgpO2NvbnN0IHY9Yzt2LmlucHV0cz1OdShjLmlucHV0cyksdi5pbnB1dFRyYW5zZm9ybXM9TnUoYy5pbnB1dFRy'@;
put 'YW5zZm9ybXMpLHYuZGVjbGFyZWRJbnB1dHM9TnUoYy5kZWNsYXJlZElucHV0cyksdi5vdXRwdXRzPU51KGMub3V0cHV0cyk7Y29uc3QgVD1oLmhvc3RCaW5kaW5ncztUJiZrTyhjLFQpO2NvbnN0IFk9aC52aWV3UXVlcnkscmU9aC5jb250ZW50UXVlcmllcztpZihZJiZ2eChjLFkpLHJlJiZ4'@;
put 'TyhjLHJlKSxTTyhjLGgpLHdsKGMub3V0cHV0cyxoLm91dHB1dHMpLFNhKGgpJiZoLmRhdGEuYW5pbWF0aW9uKXtjb25zdCBmZT1jLmRhdGE7ZmUuYW5pbWF0aW9uPShmZS5hbmltYXRpb258fFtdKS5jb25jYXQoaC5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGY9aC5mZWF0dXJlcztpZihmKWZv'@;
put 'cihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBUPWZbdl07VCYmVC5uZ0luaGVyaXQmJlQoYyksVD09PXNvJiYoYT0hMSl9fWw9T2JqZWN0LmdldFByb3RvdHlwZU9mKGwpfSFmdW5jdGlvbiBfeChjKXtsZXQgbD0wLGE9bnVsbDtmb3IobGV0IGQ9Yy5sZW5ndGgtMTtkPj0wO2QtLSl7'@;
put 'Y29uc3QgaD1jW2RdO2guaG9zdFZhcnM9bCs9aC5ob3N0VmFycyxoLmhvc3RBdHRycz1PMShoLmhvc3RBdHRycyxhPU8xKGEsaC5ob3N0QXR0cnMpKX19KGQpfWZ1bmN0aW9uIFNPKGMsbCl7Zm9yKGNvbnN0IGEgaW4gbC5pbnB1dHMpe2lmKCFsLmlucHV0cy5oYXNPd25Qcm9wZXJ0eShhKXx8'@;
put 'Yy5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgZD1sLmlucHV0c1thXTtpZih2b2lkIDAhPT1kJiYoYy5pbnB1dHNbYV09ZCxjLmRlY2xhcmVkSW5wdXRzW2FdPWwuZGVjbGFyZWRJbnB1dHNbYV0sbnVsbCE9PWwuaW5wdXRUcmFuc2Zvcm1zKSl7Y29uc3QgaD1BcnJh'@;
put 'eS5pc0FycmF5KGQpP2RbMF06ZDtpZighbC5pbnB1dFRyYW5zZm9ybXMuaGFzT3duUHJvcGVydHkoaCkpY29udGludWU7Yy5pbnB1dFRyYW5zZm9ybXM/Pz17fSxjLmlucHV0VHJhbnNmb3Jtc1toXT1sLmlucHV0VHJhbnNmb3Jtc1toXX19fWZ1bmN0aW9uIE51KGMpe3JldHVybiBjPT09T2M/'@;
put 'e306Yz09PWZzP1tdOmN9ZnVuY3Rpb24gdngoYyxsKXtjb25zdCBhPWMudmlld1F1ZXJ5O2Mudmlld1F1ZXJ5PWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIHhPKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2MuY29udGVudFF1ZXJpZXM9YT8oZCxoLGYpPT57bChk'@;
put 'LGgsZiksYShkLGgsZil9Omx9ZnVuY3Rpb24ga08oYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdzO2MuaG9zdEJpbmRpbmdzPWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIFh1KGMpe2NvbnN0IGw9YT0+e2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYyk/YzpjKCkpLm1hcCho'@;
put 'PT4iZnVuY3Rpb24iPT10eXBlb2YgaD97ZGlyZWN0aXZlOlRpKGgpLGlucHV0czpPYyxvdXRwdXRzOk9jfTp7ZGlyZWN0aXZlOlRpKGguZGlyZWN0aXZlKSxpbnB1dHM6YngoaC5pbnB1dHMpLG91dHB1dHM6YngoaC5vdXRwdXRzKX0pO251bGw9PT1hLmhvc3REaXJlY3RpdmVzPyhhLmZpbmRI'@;
put 'b3N0RGlyZWN0aXZlRGVmcz1RdixhLmhvc3REaXJlY3RpdmVzPWQpOmEuaG9zdERpcmVjdGl2ZXMudW5zaGlmdCguLi5kKX07cmV0dXJuIGwubmdJbmhlcml0PSEwLGx9ZnVuY3Rpb24gUXYoYyxsLGEpe2lmKG51bGwhPT1jLmhvc3REaXJlY3RpdmVzKWZvcihjb25zdCBkIG9mIGMuaG9zdERp'@;
put 'cmVjdGl2ZXMpe2NvbnN0IGg9S2EoZC5kaXJlY3RpdmUpO3d4KGguZGVjbGFyZWRJbnB1dHMsZC5pbnB1dHMpLFF2KGgsbCxhKSxhLnNldChoLGQpLGwucHVzaChoKX19ZnVuY3Rpb24gYngoYyl7aWYodm9pZCAwPT09Y3x8MD09PWMubGVuZ3RoKXJldHVybiBPYztjb25zdCBsPXt9O2Zvcihs'@;
put 'ZXQgYT0wO2E8Yy5sZW5ndGg7YSs9MilsW2NbYV1dPWNbYSsxXTtyZXR1cm4gbH1mdW5jdGlvbiB3eChjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmKGNbbFthXV09Y1thXSl9ZnVuY3Rpb24gUTIoYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9e307Zm9yKGNv'@;
put 'bnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFszXSYmKGFbZF09aFszXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1jbGFzcyBlZnt9Y2xhc3MgdHl7fWNsYXNzIG55IGV4dGVuZHMgZWZ7Y29uc3RydWN0b3IobCxhLGQpe3N1'@;
put 'cGVyKCksdGhpcy5fcGFyZW50PWEsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IFlTKHRoaXMpO2NvbnN0IGg9dGMobCk7dGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz13MChoLmJvb3RzdHJh'@;
put 'cCksdGhpcy5fcjNJbmplY3Rvcj1iMyhsLGEsW3twcm92aWRlOmVmLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOmc0LHVzZVZhbHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfSwuLi5kXSxkcihsKSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVz'@;
put 'b2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldChsKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9yM0luamVjdG9yOyFsLmRlc3Ryb3llZCYmbC5kZXN0cm95KCks'@;
put 'dGhpcy5kZXN0cm95Q2JzLmZvckVhY2goYT0+YSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kobCl7dGhpcy5kZXN0cm95Q2JzLnB1c2gobCl9fWNsYXNzIHJ5IGV4dGVuZHMgdHl7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm1vZHVsZVR5cGU9bH1jcmVhdGUobCl7cmV0'@;
put 'dXJuIG5ldyBueSh0aGlzLm1vZHVsZVR5cGUsbCxbXSl9fWNsYXNzIE14IGV4dGVuZHMgZWZ7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgWVModGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2NvbnN0IGE9bmV3IFFjKFsuLi5sLnByb3Zp'@;
put 'ZGVycyx7cHJvdmlkZTplZix1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTpnNCx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcn1dLGwucGFyZW50fHx4ZCgpLGwuZGVidWdOYW1lLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSk7dGhpcy5pbmplY3Rvcj1hLGwucnVuRW52aXJv'@;
put 'bm1lbnRJbml0aWFsaXplcnMmJmEucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl9ZGVzdHJveSgpe3RoaXMuaW5qZWN0b3IuZGVzdHJveSgpfW9uRGVzdHJveShsKXt0aGlzLmluamVjdG9yLm9uRGVzdHJveShsKX19ZnVuY3Rpb24geDgoYyxsLGE9bnVsbCl7cmV0dXJuIG5ldyBNeCh7'@;
put 'cHJvdmlkZXJzOmMscGFyZW50OmwsZGVidWdOYW1lOmEscnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnM6ITB9KS5pbmplY3Rvcn1sZXQgbWE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudGFza0lkPTAsdGhpcy5wZW5kaW5nVGFza3M9bmV3IFNldCx0aGlzLmhhc1BlbmRpbmdU'@;
put 'YXNrcz1uZXcgQXIoITEpfWdldCBfaGFzUGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMuaGFzUGVuZGluZ1Rhc2tzLnZhbHVlfWFkZCgpe3RoaXMuX2hhc1BlbmRpbmdUYXNrc3x8dGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlz'@;
put 'LnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBlbmRpbmdUYXNrcy5zaXplJiZ0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfW5nT25EZXN0cm95KCl7dGhpcy5wZW5k'@;
put 'aW5nVGFza3MuY2xlYXIoKSx0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0'@;
put 'b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFA1KGMpe3JldHVybiEhRTgoYykmJihBcnJheS5pc0FycmF5KGMpfHwhKGMgaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gYyl9ZnVuY3Rpb24gRTgoYyl7cmV0dXJuIG51'@;
put 'bGwhPT1jJiYoImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyl9ZnVuY3Rpb24gTTAoYyxsLGEpe3JldHVybiBjW2xdPWF9ZnVuY3Rpb24gcGwoYyxsLGEpe3JldHVybiFPYmplY3QuaXMoY1tsXSxhKSYmKGNbbF09YSwhMCl9ZnVuY3Rpb24gSDMoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1wbChjLGwsYSk7cmV0dXJuIHBsKGMsbCsxLGQpfHxofWZ1bmN0aW9uIEg1KGMsbCxhLGQsaCl7Y29uc3QgZj1IMyhjLGwsYSxkKTtyZXR1cm4gcGwoYyxsKzIsaCl8fGZ9ZnVuY3Rpb24gQzAoYyxsLGEsZCxoLGYpe2NvbnN0IHY9SDMoYyxsLGEsZCk7cmV0dXJuIEgzKGMsbCsyLGgs'@;
put 'Zil8fHZ9ZnVuY3Rpb24gYnQoYyxsLGEsZCxoLGYsdixUKXtjb25zdCBZPU5yKCkscmU9a3MoKSxmZT1jK3pvLF9lPXJlLmZpcnN0Q3JlYXRlUGFzcz9mdW5jdGlvbiB4eChjLGwsYSxkLGgsZix2LFQsWSl7Y29uc3QgcmU9bC5jb25zdHMsZmU9aDQobCxjLDQsdnx8bnVsbCxBZChyZSxUKSk7'@;
put 'd3YobCxhLGZlLEFkKHJlLFkpKSxENihsLGZlKTtjb25zdCBfZT1mZS50Vmlldz1idigyLGZlLGQsaCxmLGwuZGlyZWN0aXZlUmVnaXN0cnksbC5waXBlUmVnaXN0cnksbnVsbCxsLnNjaGVtYXMscmUsbnVsbCk7cmV0dXJuIG51bGwhPT1sLnF1ZXJpZXMmJihsLnF1ZXJpZXMudGVtcGxhdGUo'@;
put 'bCxmZSksX2UucXVlcmllcz1sLnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhmZSkpLGZlfShmZSxyZSxZLGwsYSxkLGgsZix2KTpyZS5kYXRhW2ZlXTtMZChfZSwhMSk7Y29uc3Qga2U9a3gocmUsWSxfZSxjKTtKbSgpJiZydShyZSxZLGtlLF9lKSxOYyhrZSxZKTtjb25zdCBXZT14dihrZSxZLGtl'@;
put 'LF9lKTtyZXR1cm4gWVtmZV09V2UsZzUoWSxXZSksZnVuY3Rpb24gJFMoYyxsLGEpe3JldHVybiBCdihjLGwsYSl9KFdlLF9lLFkpLGZsKF9lKSYmdnYocmUsWSxfZSksbnVsbCE9diYmeXYoWSxfZSxUKSxidH1sZXQga3g9ZnVuY3Rpb24gRXgoYyxsLGEsZCl7cmV0dXJuIElkKCEwKSxsW09v'@;
put 'XS5jcmVhdGVDb21tZW50KCIiKX07ZnVuY3Rpb24gTDgoLi4uYyl7fWNsYXNzIFBve2NvbnN0cnVjdG9yKHtlbmFibGVMb25nU3RhY2tUcmFjZTpsPSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246YT0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjpkPSEx'@;
put 'fSl7aWYodGhpcy5oYXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBJcighMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBJcighMSksdGhpcy5vblN0YWJsZT1uZXcgSXIoITEp'@;
put 'LHRoaXMub25FcnJvcj1uZXcgSXIoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgem4oOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7Y29uc3QgaD10aGlzO2guX25lc3Rpbmc9MCxoLl9vdXRlcj1oLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5UYXNrVHJhY2tpbmdab25l'@;
put 'U3BlYyYmKGguX2lubmVyPWguX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxsJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLGguc2hvdWxkQ29hbGVzY2VF'@;
put 'dmVudENoYW5nZURldGVjdGlvbj0hZCYmYSxoLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWQsaC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsaC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24gQzQoKXtjb25zdCBjPSJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7bGV0IGw9U3NbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9U3NbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwmJmEpe2NvbnN0IGQ9bFtab25lLl9f'@;
put 'c3ltYm9sX18oIk9yaWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2VsQW5pbWF0aW9uRnJhbWU6YX19KCku'@;
put 'bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIEhPKGMpe2NvbnN0IGw9KCk9PnshZnVuY3Rpb24gVmQoYyl7Yy5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KGMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPWMu'@;
put 'bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLmNhbGwoU3MsKCk9PntjLmZha2VUb3BFdmVudFRhc2t8fChjLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e2MubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0x'@;
put 'LEk4KGMpLGMuaXNDaGVja1N0YWJsZVJ1bm5pbmc9ITAsc3koYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxjLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxJOChjKSl9KGMpfTtjLl9pbm5lcj1jLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1'@;
put 'bGFyIixwcm9wZXJ0aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGEsZCxoLGYsdixUKT0+e2lmKGZ1bmN0aW9uIE5PKGMpe3JldHVybiEoIUFycmF5LmlzQXJyYXkoYyl8fDEhPT1jLmxlbmd0aCkmJiEwPT09Y1swXS5kYXRhPy5fX2lnbm9yZV9uZ196b25lX199KFQpKXJl'@;
put 'dHVybiBhLmludm9rZVRhc2soaCxmLHYsVCk7dHJ5e3JldHVybiBWNShjKSxhLmludm9rZVRhc2soaCxmLHYsVCl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVj'@;
put 'dGlvbikmJmwoKSxheShjKX19LG9uSW52b2tlOihhLGQsaCxmLHYsVCxZKT0+e3RyeXtyZXR1cm4gVjUoYyksYS5pbnZva2UoaCxmLHYsVCxZKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSxheShjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhh'@;
put 'c1Rhc2soaCxmKSxkPT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssSTgoYyksc3koYykpOiJtYWNyb1Rhc2siPT1mLmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJv'@;
put 'cjooYSxkLGgsZik9PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3Vs'@;
put 'YXJab25lIil9c3RhdGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighUG8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IHpuKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihQby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgem4oOTA5LCExKX1ydW4o'@;
put 'bCxhLGQpe3JldHVybiB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcix2PWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK2gsbCxGTyxMOCxMOCk7dHJ5e3JldHVybiBmLnJ1blRhc2sodixhLGQpfWZpbmFsbHl7Zi5j'@;
put 'YW5jZWxUYXNrKHYpfX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZChsLGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bihsKX19Y29uc3QgRk89e307ZnVuY3Rpb24gc3koYyl7aWYoMD09Yy5fbmVzdGluZyYmIWMu'@;
put 'aGFzUGVuZGluZ01pY3JvdGFza3MmJiFjLmlzU3RhYmxlKXRyeXtjLl9uZXN0aW5nKyssYy5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZihjLl9uZXN0aW5nLS0sIWMuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e2MucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25TdGFi'@;
put 'bGUuZW1pdChudWxsKSl9ZmluYWxseXtjLmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gSTgoYyl7Yy5oYXNQZW5kaW5nTWljcm90YXNrcz0hIShjLl9oYXNQZW5kaW5nTWljcm90YXNrc3x8KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbnx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNo'@;
put 'YW5nZURldGVjdGlvbikmJi0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpfWZ1bmN0aW9uIFY1KGMpe2MuX25lc3RpbmcrKyxjLmlzU3RhYmxlJiYoYy5pc1N0YWJsZT0hMSxjLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gYXkoYyl7Yy5fbmVzdGluZy0tLHN5KGMp'@;
put 'fWNsYXNzIGx5e2NvbnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBJcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IElyLHRoaXMub25TdGFibGU9'@;
put 'bmV3IElyLHRoaXMub25FcnJvcj1uZXcgSXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9'@;
put 'fWZ1bmN0aW9uIGhyKGMsbCxhLGQpe2NvbnN0IGg9TnIoKTtyZXR1cm4gcGwoaCx6MSgpLGwpJiYoa3MoKSxHMShhYSgpLGgsYyxsLGEsZCkpLGhyfWZ1bmN0aW9uIFlhKGMsbCxhLGQpe3JldHVybiBwbChjLHoxKCksYSk/bCtZbyhhKStkOmlzfWZ1bmN0aW9uIGdzKGMsbCl7cmV0dXJuIGM8'@;
put 'PDE3fGw8PDJ9ZnVuY3Rpb24gRWEoYyl7cmV0dXJuIGM+PjE3JjMyNzY3fWZ1bmN0aW9uIFloKGMpe3JldHVybiAyfGN9ZnVuY3Rpb24gczEoYyl7cmV0dXJuKDEzMTA2OCZjKT4+Mn1mdW5jdGlvbiBybihjLGwpe3JldHVybi0xMzEwNjkmY3xsPDwyfWZ1bmN0aW9uIGFuKGMpe3JldHVybiAx'@;
put 'fGN9ZnVuY3Rpb24gaXIoYyxsLGEsZCl7Y29uc3QgaD1jW2ErMV0sZj1udWxsPT09bDtsZXQgdj1kP0VhKGgpOnMxKGgpLFQ9ITE7Zm9yKDswIT09diYmKCExPT09VHx8Zik7KXtjb25zdCByZT1jW3YrMV07U3IoY1t2XSxsKSYmKFQ9ITAsY1t2KzFdPWQ/YW4ocmUpOlloKHJlKSksdj1kP0Vh'@;
put 'KHJlKTpzMShyZSl9VCYmKGNbYSsxXT1kP1loKGgpOmFuKGgpKX1mdW5jdGlvbiBTcihjLGwpe3JldHVybiBudWxsPT09Y3x8bnVsbD09bHx8KEFycmF5LmlzQXJyYXkoYyk/Y1sxXTpjKT09PWx8fCEoIUFycmF5LmlzQXJyYXkoYyl8fCJzdHJpbmciIT10eXBlb2YgbCkmJlcwKGMsbCk+PTB9'@;
put 'Y29uc3QgRnI9e3RleHRFbmQ6MCxrZXk6MCxrZXlFbmQ6MCx2YWx1ZTowLHZhbHVlRW5kOjB9O2Z1bmN0aW9uIFJyKGMpe3JldHVybiBjLnN1YnN0cmluZyhGci5rZXksRnIua2V5RW5kKX1mdW5jdGlvbiBUbyhjLGwpe2NvbnN0IGE9RnIudGV4dEVuZDtyZXR1cm4gYT09PWw/LTE6KGw9RnIu'@;
put 'a2V5RW5kPWZ1bmN0aW9uIEp1KGMsbCxhKXtmb3IoO2w8YSYmYy5jaGFyQ29kZUF0KGwpPjMyOylsKys7cmV0dXJuIGx9KGMsRnIua2V5PWwsYSksVnMoYyxsLGEpKX1mdW5jdGlvbiBWcyhjLGwsYSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKTw9MzI7KWwrKztyZXR1cm4gbH1mdW5jdGlv'@;
put 'biBQZShjLGwsYSl7Y29uc3QgZD1OcigpO3JldHVybiBwbChkLHoxKCksbCkmJkZ1KGtzKCksYWEoKSxkLGMsbCxkW09vXSxhLCExKSxQZX1mdW5jdGlvbiAkMShjLGwsYSxkLGgpe2NvbnN0IHY9aD8iY2xhc3MiOiJzdHlsZSI7a3YoYyxhLGwuaW5wdXRzW3ZdLHYsZCl9ZnVuY3Rpb24gQmQo'@;
put 'YyxsLGEpe3JldHVybiB6aChjLGwsYSwhMSksQmR9ZnVuY3Rpb24gYnIoYyxsKXtyZXR1cm4gemgoYyxsLG51bGwsITApLGJyfWZ1bmN0aW9uIHJmKGMsbCl7Zm9yKGxldCBhPWZ1bmN0aW9uIGJpKGMpe3JldHVybiBmdW5jdGlvbiBYbyhjKXtGci5rZXk9MCxGci5rZXlFbmQ9MCxGci52YWx1'@;
put 'ZT0wLEZyLnZhbHVlRW5kPTAsRnIudGV4dEVuZD1jLmxlbmd0aH0oYyksVG8oYyxWcyhjLDAsRnIudGV4dEVuZCkpfShsKTthPj0wO2E9VG8obCxhKSlwYyhjLFJyKGwpLCEwKX1mdW5jdGlvbiB6aChjLGwsYSxkKXtjb25zdCBoPU5yKCksZj1rcygpLHY9T2goMik7Zi5maXJzdFVwZGF0ZVBh'@;
put 'c3MmJlZXKGYsYyx2LGQpLGwhPT1pcyYmcGwoaCx2LGwpJiZCVyhmLGYuZGF0YVtGYygpXSxoLGhbT29dLGMsaFt2KzFdPWZ1bmN0aW9uIFYwZShjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWN8fCgic3RyaW5nIj09dHlwZW9mIGw/Yys9bDoib2JqZWN0Ij09dHlwZW9mIGMmJihjPWRyKFBk'@;
put 'KGMpKSkpLGN9KGwsYSksZCx2KX1mdW5jdGlvbiBOVyhjLGwpe3JldHVybiBsPj1jLmV4cGFuZG9TdGFydEluZGV4fWZ1bmN0aW9uIFZXKGMsbCxhLGQpe2NvbnN0IGg9Yy5kYXRhO2lmKG51bGw9PT1oW2ErMV0pe2NvbnN0IGY9aFtGYygpXSx2PU5XKGMsYSk7elcoZixkKSYmbnVsbD09PWwm'@;
put 'JiF2JiYobD0hMSksbD1mdW5jdGlvbiBJMGUoYyxsLGEsZCl7Y29uc3QgaD1kXyhjKTtsZXQgZj1kP2wucmVzaWR1YWxDbGFzc2VzOmwucmVzaWR1YWxTdHlsZXM7aWYobnVsbD09PWgpMD09PShkP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MpJiYoYT11eShhPWpPKG51bGwsYyxs'@;
put 'LGEsZCksbC5hdHRycyxkKSxmPW51bGwpO2Vsc2V7Y29uc3Qgdj1sLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2lmKC0xPT09dnx8Y1t2XSE9PWgpaWYoYT1qTyhoLGMsbCxhLGQpLG51bGw9PT1mKXtsZXQgWT1mdW5jdGlvbiBSMGUoYyxsLGEpe2NvbnN0IGQ9YT9sLmNsYXNzQmluZGluZ3M6bC5z'@;
put 'dHlsZUJpbmRpbmdzO2lmKDAhPT1zMShkKSlyZXR1cm4gY1tFYShkKV19KGMsbCxkKTt2b2lkIDAhPT1ZJiZBcnJheS5pc0FycmF5KFkpJiYoWT1qTyhudWxsLGMsbCxZWzFdLGQpLFk9dXkoWSxsLmF0dHJzLGQpLGZ1bmN0aW9uIE8wZShjLGwsYSxkKXtjW0VhKGE/bC5jbGFzc0JpbmRpbmdz'@;
put 'Omwuc3R5bGVCaW5kaW5ncyldPWR9KGMsbCxkLFkpKX1lbHNlIGY9ZnVuY3Rpb24gUDBlKGMsbCxhKXtsZXQgZDtjb25zdCBoPWwuZGlyZWN0aXZlRW5kO2ZvcihsZXQgZj0xK2wuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7ZjxoO2YrKylkPXV5KGQsY1tmXS5ob3N0QXR0cnMsYSk7cmV0dXJuIHV5'@;
put 'KGQsbC5hdHRycyxhKX0oYyxsLGQpfXJldHVybiB2b2lkIDAhPT1mJiYoZD9sLnJlc2lkdWFsQ2xhc3Nlcz1mOmwucmVzaWR1YWxTdHlsZXM9ZiksYX0oaCxmLGwsZCksZnVuY3Rpb24gaG4oYyxsLGEsZCxoLGYpe2xldCB2PWY/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncyxUPUVh'@;
put 'KHYpLFk9czEodik7Y1tkXT1hO2xldCBmZSxyZT0hMTtpZihBcnJheS5pc0FycmF5KGEpPyhmZT1hWzFdLChudWxsPT09ZmV8fFcwKGEsZmUpPjApJiYocmU9ITApKTpmZT1hLGgpaWYoMCE9PVkpe2NvbnN0IGtlPUVhKGNbVCsxXSk7Y1tkKzFdPWdzKGtlLFQpLDAhPT1rZSYmKGNba2UrMV09'@;
put 'cm4oY1trZSsxXSxkKSksY1tUKzFdPWZ1bmN0aW9uIFRhKGMsbCl7cmV0dXJuIDEzMTA3MSZjfGw8PDE3fShjW1QrMV0sZCl9ZWxzZSBjW2QrMV09Z3MoVCwwKSwwIT09VCYmKGNbVCsxXT1ybihjW1QrMV0sZCkpLFQ9ZDtlbHNlIGNbZCsxXT1ncyhZLDApLDA9PT1UP1Q9ZDpjW1krMV09cm4o'@;
put 'Y1tZKzFdLGQpLFk9ZDtyZSYmKGNbZCsxXT1ZaChjW2QrMV0pKSxpcihjLGZlLGQsITApLGlyKGMsZmUsZCwhMSksZnVuY3Rpb24gSW4oYyxsLGEsZCxoKXtjb25zdCBmPWg/Yy5yZXNpZHVhbENsYXNzZXM6Yy5yZXNpZHVhbFN0eWxlcztudWxsIT1mJiYic3RyaW5nIj09dHlwZW9mIGwmJlcw'@;
put 'KGYsbCk+PTAmJihhW2QrMV09YW4oYVtkKzFdKSl9KGwsZmUsYyxkLGYpLHY9Z3MoVCxZKSxmP2wuY2xhc3NCaW5kaW5ncz12Omwuc3R5bGVCaW5kaW5ncz12fShoLGYsbCxhLHYsZCl9fWZ1bmN0aW9uIGpPKGMsbCxhLGQsaCl7bGV0IGY9bnVsbDtjb25zdCB2PWEuZGlyZWN0aXZlRW5kO2xl'@;
put 'dCBUPWEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q7Zm9yKC0xPT09VD9UPWEuZGlyZWN0aXZlU3RhcnQ6VCsrO1Q8diYmKGY9bFtUXSxkPXV5KGQsZi5ob3N0QXR0cnMsaCksZiE9PWMpOylUKys7cmV0dXJuIG51bGwhPT1jJiYoYS5kaXJlY3RpdmVTdHlsaW5nTGFzdD1UKSxkfWZ1bmN0aW9uIHV5'@;
put 'KGMsbCxhKXtjb25zdCBkPWE/MToyO2xldCBoPS0xO2lmKG51bGwhPT1sKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtjb25zdCB2PWxbZl07Im51bWJlciI9PXR5cGVvZiB2P2g9djpoPT09ZCYmKEFycmF5LmlzQXJyYXkoYyl8fChjPXZvaWQgMD09PWM/W106WyIiLGNdKSxwYyhjLHYs'@;
put 'ISFhfHxsWysrZl0pKX1yZXR1cm4gdm9pZCAwPT09Yz9udWxsOmN9ZnVuY3Rpb24gQlcoYyxsLGEsZCxoLGYsdixUKXtpZighKDMmbC50eXBlKSlyZXR1cm47Y29uc3QgWT1jLmRhdGEscmU9WVtUKzFdLGZlPWZ1bmN0aW9uIHluKGMpe3JldHVybiEoMSZ+Yyl9KHJlKT9ZVyhZLGwsYSxoLHMx'@;
put 'KHJlKSx2KTp2b2lkIDA7SHgoZmUpfHwoSHgoZil8fGZ1bmN0aW9uIGJjKGMpe3JldHVybiEoMiZ+Yyl9KHJlKSYmKGY9WVcoWSxudWxsLGEsaCxULHYpKSxmdW5jdGlvbiBRQyhjLGwsYSxkLGgpe2lmKGwpaD9jLmFkZENsYXNzKGEsZCk6Yy5yZW1vdmVDbGFzcyhhLGQpO2Vsc2V7bGV0IGY9'@;
put 'LTE9PT1kLmluZGV4T2YoIi0iKT92b2lkIDA6RzIuRGFzaENhc2U7bnVsbD09aD9jLnJlbW92ZVN0eWxlKGEsZCxmKTooInN0cmluZyI9PXR5cGVvZiBoJiZoLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihoPWguc2xpY2UoMCwtMTApLGZ8PUcyLkltcG9ydGFudCksYy5zZXRTdHlsZShhLGQs'@;
put 'aCxmKSl9fShkLHYsVXAoRmMoKSxhKSxoLGYpKX1mdW5jdGlvbiBZVyhjLGwsYSxkLGgsZil7Y29uc3Qgdj1udWxsPT09bDtsZXQgVDtmb3IoO2g+MDspe2NvbnN0IFk9Y1toXSxyZT1BcnJheS5pc0FycmF5KFkpLGZlPXJlP1lbMV06WSxfZT1udWxsPT09ZmU7bGV0IGtlPWFbaCsxXTtrZT09'@;
put 'PWlzJiYoa2U9X2U/ZnM6dm9pZCAwKTtsZXQgV2U9X2U/WGYoa2UsZCk6ZmU9PT1kP2tlOnZvaWQgMDtpZihyZSYmIUh4KFdlKSYmKFdlPVhmKFksZCkpLEh4KFdlKSYmKFQ9V2UsdikpcmV0dXJuIFQ7Y29uc3QgSmU9Y1toKzFdO2g9dj9FYShKZSk6czEoSmUpfWlmKG51bGwhPT1sKXtsZXQg'@;
put 'WT1mP2wucmVzaWR1YWxDbGFzc2VzOmwucmVzaWR1YWxTdHlsZXM7bnVsbCE9WSYmKFQ9WGYoWSxkKSl9cmV0dXJuIFR9ZnVuY3Rpb24gSHgoYyl7cmV0dXJuIHZvaWQgMCE9PWN9ZnVuY3Rpb24gelcoYyxsKXtyZXR1cm4hIShjLmZsYWdzJihsPzg6MTYpKX1mdW5jdGlvbiBVVyhjLGwsYSl7'@;
put 'IWZ1bmN0aW9uIFVoKGMsbCxhLGQpe2NvbnN0IGg9a3MoKSxmPU9oKDIpO2guZmlyc3RVcGRhdGVQYXNzJiZWVyhoLG51bGwsZixkKTtjb25zdCB2PU5yKCk7aWYoYSE9PWlzJiZwbCh2LGYsYSkpe2NvbnN0IFQ9aC5kYXRhW0ZjKCldO2lmKHpXKFQsZCkmJiFOVyhoLGYpKXtsZXQgWT1kP1Qu'@;
put 'Y2xhc3Nlc1dpdGhvdXRIb3N0OlQuc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PVkmJihhPVkwKFksYXx8IiIpKSwkMShoLFQsdixhLGQpfWVsc2UhZnVuY3Rpb24gTjBlKGMsbCxhLGQsaCxmLHYsVCl7aD09PWlzJiYoaD1mcyk7bGV0IFk9MCxyZT0wLGZlPTA8aC5sZW5ndGg/aFswXTpudWxs'@;
put 'LF9lPTA8Zi5sZW5ndGg/ZlswXTpudWxsO2Zvcig7bnVsbCE9PWZlfHxudWxsIT09X2U7KXtjb25zdCBrZT1ZPGgubGVuZ3RoP2hbWSsxXTp2b2lkIDAsV2U9cmU8Zi5sZW5ndGg/ZltyZSsxXTp2b2lkIDA7bGV0IHR0LEplPW51bGw7ZmU9PT1fZT8oWSs9MixyZSs9MixrZSE9PVdlJiYoSmU9'@;
put 'X2UsdHQ9V2UpKTpudWxsPT09X2V8fG51bGwhPT1mZSYmZmU8X2U/KFkrPTIsSmU9ZmUpOihyZSs9MixKZT1fZSx0dD1XZSksbnVsbCE9PUplJiZCVyhjLGwsYSxkLEplLHR0LHYsVCksZmU9WTxoLmxlbmd0aD9oW1ldOm51bGwsX2U9cmU8Zi5sZW5ndGg/ZltyZV06bnVsbH19KGgsVCx2LHZb'@;
put 'T29dLHZbZisxXSx2W2YrMV09ZnVuY3Rpb24gRjBlKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIGZzO2NvbnN0IGQ9W10saD1QZChhKTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10'@;
put 'eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09dHlwZW9mIGgmJmwoZCxoKTtyZXR1cm4gZH0oYyxsLGEpLGQsZil9fShwYyxyZixZYShOcigpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gZ2UoYyxsLGEsZCl7Y29uc3Qg'@;
put 'aD1OcigpLGY9a3MoKSx2PXpvK2MsVD1oW09vXSxZPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIGExZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1sLmNvbnN0cyxZPWg0KGwsYywyLGQsQWQodixoKSk7cmV0dXJuIHd2KGwsYSxZLEFkKHYsZikpLG51bGwhPT1ZLmF0dHJzJiZ2OChZLFkuYXR0'@;
put 'cnMsITEpLG51bGwhPT1ZLm1lcmdlZEF0dHJzJiZ2OChZLFkubWVyZ2VkQXR0cnMsITApLG51bGwhPT1sLnF1ZXJpZXMmJmwucXVlcmllcy5lbGVtZW50U3RhcnQobCxZKSxZfSh2LGYsaCxsLGEsZCk6Zi5kYXRhW3ZdLHJlPSRXKGYsaCxZLFQsbCxjKTtoW3ZdPXJlO2NvbnN0IGZlPWZsKFkp'@;
put 'O3JldHVybiBMZChZLCEwKSxuUyhULHJlLFkpLCFmdW5jdGlvbiBOMyhjKXtyZXR1cm4hKDMyJn5jLmZsYWdzKX0oWSkmJkptKCkmJnJ1KGYsaCxyZSxZKSwwPT09ZnVuY3Rpb24gZUwoKXtyZXR1cm4gR28ubEZyYW1lLmVsZW1lbnREZXB0aENvdW50fSgpJiZOYyhyZSxoKSxmdW5jdGlvbiB0'@;
put 'TCgpe0dvLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudCsrfSgpLGZlJiYodnYoZixoLFkpLF92KGYsWSxoKSksbnVsbCE9PWQmJnl2KGgsWSksZ2V9ZnVuY3Rpb24gYmUoKXtsZXQgYz1mYSgpO2xfKCk/Y18oKTooYz1jLnBhcmVudCxMZChjLCExKSk7Y29uc3QgbD1jOyhmdW5jdGlvbiBuTChj'@;
put 'KXtyZXR1cm4gR28uc2tpcEh5ZHJhdGlvblJvb3RUTm9kZT09PWN9KShsKSYmZnVuY3Rpb24gc0woKXtHby5za2lwSHlkcmF0aW9uUm9vdFROb2RlPW51bGx9KCksZnVuY3Rpb24gT00oKXtHby5sRnJhbWUuZWxlbWVudERlcHRoQ291bnQtLX0oKTtjb25zdCBhPWtzKCk7cmV0dXJuIGEuZmly'@;
put 'c3RDcmVhdGVQYXNzJiYoRDYoYSxjKSxQbChjKSYmYS5xdWVyaWVzLmVsZW1lbnRFbmQoYykpLG51bGwhPWwuY2xhc3Nlc1dpdGhvdXRIb3N0JiZmdW5jdGlvbiB5TChjKXtyZXR1cm4hISg4JmMuZmxhZ3MpfShsKSYmJDEoYSxsLE5yKCksbC5jbGFzc2VzV2l0aG91dEhvc3QsITApLG51bGwh'@;
put 'PWwuc3R5bGVzV2l0aG91dEhvc3QmJmZ1bmN0aW9uIGJMKGMpe3JldHVybiEhKDE2JmMuZmxhZ3MpfShsKSYmJDEoYSxsLE5yKCksbC5zdHlsZXNXaXRob3V0SG9zdCwhMSksYmV9ZnVuY3Rpb24gSnQoYyxsLGEsZCl7cmV0dXJuIGdlKGMsbCxhLGQpLGJlKCksSnR9bGV0ICRXPShjLGwsYSxk'@;
put 'LGgsZik9PihJZCghMCksTDMoZCxoLGZ1bmN0aW9uIEJNKCl7cmV0dXJuIEdvLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7ZnVuY3Rpb24gcmkoYyxsLGEpe2NvbnN0IGQ9TnIoKSxoPWtzKCksZj1jK3pvLHY9aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gdTFlKGMsbCxhLGQsaCl7'@;
put 'Y29uc3QgZj1sLmNvbnN0cyx2PUFkKGYsZCksVD1oNChsLGMsOCwibmctY29udGFpbmVyIix2KTtyZXR1cm4gbnVsbCE9PXYmJnY4KFQsdiwhMCksd3YobCxhLFQsQWQoZixoKSksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVzLmVsZW1lbnRTdGFydChsLFQpLFR9KGYsaCxkLGwsYSk6aC5k'@;
put 'YXRhW2ZdO0xkKHYsITApO2NvbnN0IFQ9cVcoaCxkLHYsYyk7cmV0dXJuIGRbZl09VCxKbSgpJiZydShoLGQsVCx2KSxOYyhULGQpLGZsKHYpJiYodnYoaCxkLHYpLF92KGgsdixkKSksbnVsbCE9YSYmeXYoZCx2KSxyaX1mdW5jdGlvbiBpaSgpe2xldCBjPWZhKCk7Y29uc3QgbD1rcygpO3Jl'@;
put 'dHVybiBsXygpP2NfKCk6KGM9Yy5wYXJlbnQsTGQoYywhMSkpLGwuZmlyc3RDcmVhdGVQYXNzJiYoRDYobCxjKSxQbChjKSYmbC5xdWVyaWVzLmVsZW1lbnRFbmQoYykpLGlpfWZ1bmN0aW9uIE5sKGMsbCxhKXtyZXR1cm4gcmkoYyxsLGEpLGlpKCksTmx9bGV0IHFXPShjLGwsYSxkKT0+KElk'@;
put 'KCEwKSxpdihsW09vXSwiIikpO2Z1bmN0aW9uIEhuKCl7cmV0dXJuIE5yKCl9ZnVuY3Rpb24gc2YoYyxsLGEpe2NvbnN0IGQ9TnIoKTtyZXR1cm4gcGwoZCx6MSgpLGwpJiZGdShrcygpLGFhKCksZCxjLGwsZFtPb10sYSwhMCksc2Z9ZnVuY3Rpb24gWk8oYyxsLGEpe2NvbnN0IGQ9TnIoKTtp'@;
put 'ZihwbChkLHoxKCksbCkpe2NvbnN0IGY9a3MoKSx2PWFhKCk7RnUoZix2LGQsYyxsLE8zKGRfKGYuZGF0YSksdixkKSxhLCEwKX1yZXR1cm4gWk99Y29uc3QgQjU9dm9pZCAwO3ZhciBwMWU9WyJlbiIsW1siYSIsInAiXSxbIkFNIiwiUE0iXSxCNV0sW1siQU0iLCJQTSJdLEI1LEI1XSxbWyJT'@;
put 'IiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0sWyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIs'@;
put 'IlRoIiwiRnIiLCJTYSJdXSxCNSxbWyJKIiwiRiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5'@;
put 'IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXV0sQjUsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwwLFs2LDBdLFsiTS9k'@;
put 'L3l5IiwiTU1NIGQsIHkiLCJNTU1NIGQsIHkiLCJFRUVFLCBNTU1NIGQsIHkiXSxbImg6bW0gYSIsImg6bW06c3MgYSIsImg6bW06c3MgYSB6IiwiaDptbTpzcyBhIHp6enoiXSxbInsxfSwgezB9IixCNSwiezF9ICdhdCcgezB9IixCNV0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwi'@;
put 'XHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJVU0QiLCIkIiwiVVMgRG9sbGFyIix7fSwibHRyIixmdW5jdGlvbiBmMWUoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJzKGMpKSxkPWMudG9T'@;
put 'dHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XTtsZXQgRjg9e307ZnVuY3Rpb24gZTAoYyl7Y29uc3QgbD1mdW5jdGlvbiBnMWUoYyl7cmV0dXJuIGMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKX0oYyk7bGV0IGE9'@;
put 'WFcobCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPVhXKGQpLGEpcmV0dXJuIGE7aWYoImVuIj09PWQpcmV0dXJuIHAxZTt0aHJvdyBuZXcgem4oNzAxLCExKX1mdW5jdGlvbiBYVyhjKXtyZXR1cm4gYyBpbiBGOHx8KEY4W2NdPVNzLm5nJiZTcy5uZy5jb21t'@;
put 'b24mJlNzLm5nLmNvbW1vbi5sb2NhbGVzJiZTcy5uZy5jb21tb24ubG9jYWxlc1tjXSksRjhbY119dmFyIHJsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTG9jYWxlSWQ9MF09IkxvY2FsZUlkIixjW2MuRGF5UGVyaW9kc0Zvcm1hdD0xXT0iRGF5UGVyaW9kc0Zvcm1hdCIsY1tjLkRheVBlcmlv'@;
put 'ZHNTdGFuZGFsb25lPTJdPSJEYXlQZXJpb2RzU3RhbmRhbG9uZSIsY1tjLkRheXNGb3JtYXQ9M109IkRheXNGb3JtYXQiLGNbYy5EYXlzU3RhbmRhbG9uZT00XT0iRGF5c1N0YW5kYWxvbmUiLGNbYy5Nb250aHNGb3JtYXQ9NV09Ik1vbnRoc0Zvcm1hdCIsY1tjLk1vbnRoc1N0YW5kYWxvbmU9'@;
put 'Nl09Ik1vbnRoc1N0YW5kYWxvbmUiLGNbYy5FcmFzPTddPSJFcmFzIixjW2MuRmlyc3REYXlPZldlZWs9OF09IkZpcnN0RGF5T2ZXZWVrIixjW2MuV2Vla2VuZFJhbmdlPTldPSJXZWVrZW5kUmFuZ2UiLGNbYy5EYXRlRm9ybWF0PTEwXT0iRGF0ZUZvcm1hdCIsY1tjLlRpbWVGb3JtYXQ9MTFd'@;
put 'PSJUaW1lRm9ybWF0IixjW2MuRGF0ZVRpbWVGb3JtYXQ9MTJdPSJEYXRlVGltZUZvcm1hdCIsY1tjLk51bWJlclN5bWJvbHM9MTNdPSJOdW1iZXJTeW1ib2xzIixjW2MuTnVtYmVyRm9ybWF0cz0xNF09Ik51bWJlckZvcm1hdHMiLGNbYy5DdXJyZW5jeUNvZGU9MTVdPSJDdXJyZW5jeUNvZGUi'@;
put 'LGNbYy5DdXJyZW5jeVN5bWJvbD0xNl09IkN1cnJlbmN5U3ltYm9sIixjW2MuQ3VycmVuY3lOYW1lPTE3XT0iQ3VycmVuY3lOYW1lIixjW2MuQ3VycmVuY2llcz0xOF09IkN1cnJlbmNpZXMiLGNbYy5EaXJlY3Rpb25hbGl0eT0xOV09IkRpcmVjdGlvbmFsaXR5IixjW2MuUGx1cmFsQ2FzZT0y'@;
put 'MF09IlBsdXJhbENhc2UiLGNbYy5FeHRyYURhdGE9MjFdPSJFeHRyYURhdGEiLGN9KHJsfHx7fSk7Y29uc3QgSDg9ImVuLVVTIjtsZXQgSlc9SDg7ZnVuY3Rpb24gSHQoYyxsLGEsZCl7Y29uc3QgaD1OcigpLGY9a3MoKSx2PWZhKCk7cmV0dXJuIHFPKGYsaCxoW09vXSx2LGMsbCxkKSxIdH1m'@;
put 'dW5jdGlvbiAkTyhjLGwpe2NvbnN0IGE9ZmEoKSxkPU5yKCksaD1rcygpO3JldHVybiBxTyhoLGQsTzMoZF8oaC5kYXRhKSxhLGQpLGEsYyxsKSwkT31mdW5jdGlvbiBxTyhjLGwsYSxkLGgsZix2KXtjb25zdCBUPWZsKGQpLHJlPWMuZmlyc3RDcmVhdGVQYXNzJiZfNShjKSxmZT1sW3JhXSxf'@;
put 'ZT12UyhsKTtsZXQga2U9ITA7aWYoMyZkLnR5cGV8fHYpe2NvbnN0IHR0PVJ1KGQsbCkseXQ9dj92KHR0KTp0dCx3dD1fZS5sZW5ndGgsTHQ9dj9zbj0+dih4YShzbltkLmluZGV4XSkpOmQuaW5kZXg7bGV0IG9uPW51bGw7aWYoIXYmJlQmJihvbj1mdW5jdGlvbiBoZGUoYyxsLGEsZCl7Y29u'@;
put 'c3QgaD1jLmNsZWFudXA7aWYobnVsbCE9aClmb3IobGV0IGY9MDtmPGgubGVuZ3RoLTE7Zis9Mil7Y29uc3Qgdj1oW2ZdO2lmKHY9PT1hJiZoW2YrMV09PT1kKXtjb25zdCBUPWxbd3VdLFk9aFtmKzJdO3JldHVybiBULmxlbmd0aD5ZP1RbWV06bnVsbH0ic3RyaW5nIj09dHlwZW9mIHYmJihm'@;
put 'Kz0yKX1yZXR1cm4gbnVsbH0oYyxsLGgsZC5pbmRleCkpLG51bGwhPT1vbikob24uX19uZ0xhc3RMaXN0ZW5lckZuX198fG9uKS5fX25nTmV4dExpc3RlbmVyRm5fXz1mLG9uLl9fbmdMYXN0TGlzdGVuZXJGbl9fPWYsa2U9ITE7ZWxzZXtmPXhHKGQsbCxmZSxmLCExKTtjb25zdCBzbj1hLmxp'@;
put 'c3Rlbih5dCxoLGYpO19lLnB1c2goZixzbikscmUmJnJlLnB1c2goaCxMdCx3dCx3dCsxKX19ZWxzZSBmPXhHKGQsbCxmZSxmLCExKTtjb25zdCBXZT1kLm91dHB1dHM7bGV0IEplO2lmKGtlJiZudWxsIT09V2UmJihKZT1XZVtoXSkpe2NvbnN0IHR0PUplLmxlbmd0aDtpZih0dClmb3IobGV0'@;
put 'IHl0PTA7eXQ8dHQ7eXQrPTIpe2NvbnN0IE1uPWxbSmVbeXRdXVtKZVt5dCsxXV0uc3Vic2NyaWJlKGYpLFZuPV9lLmxlbmd0aDtfZS5wdXNoKGYsTW4pLHJlJiZyZS5wdXNoKGgsZC5pbmRleCxWbiwtKFZuKzEpKX19fWZ1bmN0aW9uIFNHKGMsbCxhLGQpe2NvbnN0IGg9c2UobnVsbCk7dHJ5'@;
put 'e3JldHVybiBEZCg2LGwsYSksITEhPT1hKGQpfWNhdGNoKGYpe3JldHVybiBmNChjLGYpLCExfWZpbmFsbHl7RGQoNyxsLGEpLHNlKGgpfX1mdW5jdGlvbiB4RyhjLGwsYSxkLGgpe3JldHVybiBmdW5jdGlvbiBmKHYpe2lmKHY9PT1GdW5jdGlvbilyZXR1cm4gZDtNNShjLmNvbXBvbmVudE9m'@;
put 'ZnNldD4tMT95MChjLmluZGV4LGwpOmwpO2xldCBZPVNHKGwsYSxkLHYpLHJlPWYuX19uZ05leHRMaXN0ZW5lckZuX187Zm9yKDtyZTspWT1TRyhsLGEscmUsdikmJlkscmU9cmUuX19uZ05leHRMaXN0ZW5lckZuX187cmV0dXJuIGgmJiExPT09WSYmdi5wcmV2ZW50RGVmYXVsdCgpLFl9fWZ1'@;
put 'bmN0aW9uIFplKGM9MSl7cmV0dXJuIGZ1bmN0aW9uIGRMKGMpe3JldHVybihHby5sRnJhbWUuY29udGV4dExWaWV3PWZ1bmN0aW9uIG9fKGMsbCl7Zm9yKDtjPjA7KWw9bFtnY10sYy0tO3JldHVybiBsfShjLEdvLmxGcmFtZS5jb250ZXh0TFZpZXcpKVtyYV19KGMpfWZ1bmN0aW9uIGZkZShj'@;
put 'LGwpe2xldCBhPW51bGw7Y29uc3QgZD1mdW5jdGlvbiBJcChjKXtjb25zdCBsPWMuYXR0cnM7aWYobnVsbCE9bCl7Y29uc3QgYT1sLmluZGV4T2YoNSk7aWYoISgxJmEpKXJldHVybiBsW2ErMV19cmV0dXJuIG51bGx9KGMpO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWxb'@;
put 'aF07aWYoIioiIT09Zil7aWYobnVsbD09PWQ/eGgoYyxmLCEwKTpGbShkLGYpKXJldHVybiBofWVsc2UgYT1ofXJldHVybiBhfWZ1bmN0aW9uIGppKGMpe2NvbnN0IGw9TnIoKVtBc11bamFdO2lmKCFsLnByb2plY3Rpb24pe2NvbnN0IGQ9bC5wcm9qZWN0aW9uPWZ1bmN0aW9uIFowKGMsbCl7'@;
put 'Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGM7ZCsrKWEucHVzaChsKTtyZXR1cm4gYX0oYz9jLmxlbmd0aDoxLG51bGwpLGg9ZC5zbGljZSgpO2xldCBmPWwuY2hpbGQ7Zm9yKDtudWxsIT09Zjspe2NvbnN0IHY9Yz9mZGUoZixjKTowO251bGwhPT12JiYoaFt2XT9oW3ZdLnByb2plY3Rpb25O'@;
put 'ZXh0PWY6ZFt2XT1mLGhbdl09ZiksZj1mLm5leHR9fX1mdW5jdGlvbiBPcihjLGw9MCxhKXtjb25zdCBkPU5yKCksaD1rcygpLGY9aDQoaCx6bytjLDE2LG51bGwsYXx8bnVsbCk7bnVsbD09PWYucHJvamVjdGlvbiYmKGYucHJvamVjdGlvbj1sKSxjXygpLCghZFtrbF18fFpwKCkpJiYzMiZ+'@;
put 'Zi5mbGFncyYmZnVuY3Rpb24gWkkoYyxsLGEpe0pDKGxbT29dLDAsbCxhLG44KGMsYSxsKSxmNShhLnBhcmVudHx8bFtqYV0sYSxsKSl9KGgsZCxmKX1mdW5jdGlvbiBrNChjLGwsYSl7cmV0dXJuIF95KGMsIiIsbCwiIixhKSxrNH1mdW5jdGlvbiBfeShjLGwsYSxkLGgpe2NvbnN0IGY9TnIo'@;
put 'KSx2PVlhKGYsbCxhLGQpO3JldHVybiB2IT09aXMmJkZ1KGtzKCksYWEoKSxmLGMsdixmW09vXSxoLCExKSxfeX1mdW5jdGlvbiBucyhjLGwsYSxkKXshZnVuY3Rpb24gdHgoYyxsLGEsZCl7Y29uc3QgaD1rcygpO2lmKGguZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBmPWZhKCk7cngoaCxuZXcg'@;
put 'S1MobCxhLGQpLGYuaW5kZXgpLGZ1bmN0aW9uIF9PKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzfHwoYy5jb250ZW50UXVlcmllcz1bXSk7bCE9PShhLmxlbmd0aD9hW2EubGVuZ3RoLTFdOi0xKSYmYS5wdXNoKGMucXVlcmllcy5sZW5ndGgtMSxsKX0oaCxjKSwhKDImfmEpJiYoaC5z'@;
put 'dGF0aWNDb250ZW50UXVlcmllcz0hMCl9cmV0dXJuIFFTKGgsTnIoKSxhKX0oYyxsLGEsZCl9ZnVuY3Rpb24gVW8oYyxsLGEpeyFmdW5jdGlvbiBleChjLGwsYSl7Y29uc3QgZD1rcygpO3JldHVybiBkLmZpcnN0Q3JlYXRlUGFzcyYmKHJ4KGQsbmV3IEtTKGMsbCxhKSwtMSksISgyJn5sKSYm'@;
put 'KGQuc3RhdGljVmlld1F1ZXJpZXM9ITApKSxRUyhkLE5yKCksbCl9KGMsbCxhKX1mdW5jdGlvbiBNaShjKXtjb25zdCBsPU5yKCksYT1rcygpLGQ9aF8oKTtWMihkKzEpO2NvbnN0IGg9R3YoYSxkKTtpZihjLmRpcnR5JiZmdW5jdGlvbiBKQShjKXtyZXR1cm4hKDQmfmNbcG9dKX0obCk9PT0h'@;
put 'KDImfmgubWV0YWRhdGEuZmxhZ3MpKXtpZihudWxsPT09aC5tYXRjaGVzKWMucmVzZXQoW10pO2Vsc2V7Y29uc3QgZj1peChsLGQpO2MucmVzZXQoZixRTSksYy5ub3RpZnlPbkNoYW5nZXMoKX1yZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBDaSgpe3JldHVybiBmdW5jdGlvbiBXdihjLGwp'@;
put 'e3JldHVybiBjW0d1XS5xdWVyaWVzW2xdLnF1ZXJ5TGlzdH0oTnIoKSxoXygpKX1mdW5jdGlvbiBYaShjKXtyZXR1cm4gcDMoZnVuY3Rpb24gYUwoKXtyZXR1cm4gR28ubEZyYW1lLmNvbnRleHRMVmlld30oKSx6bytjKX1mdW5jdGlvbiB6ZShjLGw9IiIpe2NvbnN0IGE9TnIoKSxkPWtzKCks'@;
put 'aD1jK3pvLGY9ZC5maXJzdENyZWF0ZVBhc3M/aDQoZCxoLDEsbCxudWxsKTpkLmRhdGFbaF0sdj16RyhkLGEsZixsLGMpO2FbaF09dixKbSgpJiZydShkLGEsdixmKSxMZChmLCExKX1sZXQgekc9KGMsbCxhLGQsaCk9PihJZCghMCksZnVuY3Rpb24gQTMoYyxsKXtyZXR1cm4gYy5jcmVhdGVU'@;
put 'ZXh0KGwpfShsW09vXSxkKSk7ZnVuY3Rpb24gcHIoYyl7cmV0dXJuIHhyKCIiLGMsIiIpLHByfWZ1bmN0aW9uIHhyKGMsbCxhKXtjb25zdCBkPU5yKCksaD1ZYShkLGMsbCxhKTtyZXR1cm4gaCE9PWlzJiZGZChkLEZjKCksaCkseHJ9ZnVuY3Rpb24gdDAoYyxsLGEsZCxoKXtjb25zdCBmPU5y'@;
put 'KCksdj1mdW5jdGlvbiB6YShjLGwsYSxkLGgsZil7Y29uc3QgVD1IMyhjLFJoKCksYSxoKTtyZXR1cm4gT2goMiksVD9sK1lvKGEpK2QrWW8oaCkrZjppc30oZixjLGwsYSxkLGgpO3JldHVybiB2IT09aXMmJkZkKGYsRmMoKSx2KSx0MH1mdW5jdGlvbiBaaChjLGwsYSxkLGgsZix2KXtjb25z'@;
put 'dCBUPU5yKCksWT1mdW5jdGlvbiB5YyhjLGwsYSxkLGgsZix2LFQpe2NvbnN0IHJlPUg1KGMsUmgoKSxhLGgsdik7cmV0dXJuIE9oKDMpLHJlP2wrWW8oYSkrZCtZbyhoKStmK1lvKHYpK1Q6aXN9KFQsYyxsLGEsZCxoLGYsdik7cmV0dXJuIFkhPT1pcyYmRmQoVCxGYygpLFkpLFpofWZ1bmN0'@;
put 'aW9uIFl4KGMsbCxhLGQsaCxmLHYsVCxZKXtjb25zdCByZT1OcigpLGZlPWZ1bmN0aW9uIGthKGMsbCxhLGQsaCxmLHYsVCxZLHJlKXtjb25zdCBfZT1DMChjLFJoKCksYSxoLHYsWSk7cmV0dXJuIE9oKDQpLF9lP2wrWW8oYSkrZCtZbyhoKStmK1lvKHYpK1QrWW8oWSkrcmU6aXN9KHJlLGMs'@;
put 'bCxhLGQsaCxmLHYsVCxZKTtyZXR1cm4gZmUhPT1pcyYmRmQocmUsRmMoKSxmZSksWXh9ZnVuY3Rpb24gV3IoYyxsLGEpe004KGwpJiYobD1sKCkpO2NvbnN0IGQ9TnIoKTtyZXR1cm4gcGwoZCx6MSgpLGwpJiZGdShrcygpLGFhKCksZCxjLGwsZFtPb10sYSwhMSksV3J9ZnVuY3Rpb24gcXIo'@;
put 'YyxsKXtjb25zdCBhPU04KGMpO3JldHVybiBhJiZjLnNldChsKSxhfWZ1bmN0aW9uIEdyKGMsbCl7Y29uc3QgYT1OcigpLGQ9a3MoKSxoPWZhKCk7cmV0dXJuIHFPKGQsYSxhW09vXSxoLGMsbCksR3J9ZnVuY3Rpb24gS08oYyxsLGEsZCxoKXtpZihjPVRpKGMpLEFycmF5LmlzQXJyYXkoYykp'@;
put 'Zm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspS08oY1tmXSxsLGEsZCxoKTtlbHNle2NvbnN0IGY9a3MoKSx2PU5yKCksVD1mYSgpO2xldCBZPUgxKGMpP2M6VGkoYy5wcm92aWRlKTtjb25zdCByZT1CcChjKSxmZT0xMDQ4NTc1JlQucHJvdmlkZXJJbmRleGVzLF9lPVQuZGlyZWN0aXZlU3Rh'@;
put 'cnQsa2U9VC5wcm92aWRlckluZGV4ZXM+PjIwO2lmKEgxKGMpfHwhYy5tdWx0aSl7Y29uc3QgV2U9bmV3IGIwKHJlLGgsc3QpLEplPUpPKFksbCxoP2ZlOmZlK2tlLF9lKTstMT09PUplPyh0MShQNihULHYpLGYsWSksWE8oZixjLGwubGVuZ3RoKSxsLnB1c2goWSksVC5kaXJlY3RpdmVTdGFy'@;
put 'dCsrLFQuZGlyZWN0aXZlRW5kKyssaCYmKFQucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxhLnB1c2goV2UpLHYucHVzaChXZSkpOihhW0plXT1XZSx2W0plXT1XZSl9ZWxzZXtjb25zdCBXZT1KTyhZLGwsZmUra2UsX2UpLEplPUpPKFksbCxmZSxmZStrZSkseXQ9SmU+PTAmJmFbSmVdO2lm'@;
put 'KGgmJiF5dHx8IWgmJiEoV2U+PTAmJmFbV2VdKSl7dDEoUDYoVCx2KSxmLFkpO2NvbnN0IHd0PWZ1bmN0aW9uIElkZShjLGwsYSxkLGgpe2NvbnN0IGY9bmV3IGIwKGMsYSxzdCk7cmV0dXJuIGYubXVsdGk9W10sZi5pbmRleD1sLGYuY29tcG9uZW50UHJvdmlkZXJzPTAscUcoZixoLGQmJiFh'@;
put 'KSxmfShoP0xkZTpBZGUsYS5sZW5ndGgsaCxkLHJlKTshaCYmeXQmJihhW0plXS5wcm92aWRlckZhY3Rvcnk9d3QpLFhPKGYsYyxsLmxlbmd0aCwwKSxsLnB1c2goWSksVC5kaXJlY3RpdmVTdGFydCsrLFQuZGlyZWN0aXZlRW5kKyssaCYmKFQucHJvdmlkZXJJbmRleGVzKz0xMDQ4NTc2KSxh'@;
put 'LnB1c2god3QpLHYucHVzaCh3dCl9ZWxzZSBYTyhmLGMsV2U+LTE/V2U6SmUscUcoYVtoP0plOldlXSxyZSwhaCYmZCkpOyFoJiZkJiZ5dCYmYVtKZV0uY29tcG9uZW50UHJvdmlkZXJzKyt9fX1mdW5jdGlvbiBYTyhjLGwsYSxkKXtjb25zdCBoPUgxKGwpLGY9ZnVuY3Rpb24gaTMoYyl7cmV0'@;
put 'dXJuISFjLnVzZUNsYXNzfShsKTtpZihofHxmKXtjb25zdCBZPShmP1RpKGwudXNlQ2xhc3MpOmwpLnByb3RvdHlwZS5uZ09uRGVzdHJveTtpZihZKXtjb25zdCByZT1jLmRlc3Ryb3lIb29rc3x8KGMuZGVzdHJveUhvb2tzPVtdKTtpZighaCYmbC5tdWx0aSl7Y29uc3QgZmU9cmUuaW5kZXhP'@;
put 'ZihhKTstMT09PWZlP3JlLnB1c2goYSxbZCxZXSk6cmVbZmUrMV0ucHVzaChkLFkpfWVsc2UgcmUucHVzaChhLFkpfX19ZnVuY3Rpb24gcUcoYyxsLGEpe3JldHVybiBhJiZjLmNvbXBvbmVudFByb3ZpZGVycysrLGMubXVsdGkucHVzaChsKS0xfWZ1bmN0aW9uIEpPKGMsbCxhLGQpe2Zvcihs'@;
put 'ZXQgaD1hO2g8ZDtoKyspaWYobFtoXT09PWMpcmV0dXJuIGg7cmV0dXJuLTF9ZnVuY3Rpb24gQWRlKGMsbCxhLGQpe3JldHVybiBRTyh0aGlzLm11bHRpLFtdKX1mdW5jdGlvbiBMZGUoYyxsLGEsZCl7Y29uc3QgaD10aGlzLm11bHRpO2xldCBmO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtj'@;
put 'b25zdCB2PXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxUPXYzKGEsYVt4aV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5kZXgsZCk7Zj1ULnNsaWNlKDAsdiksUU8oaCxmKTtmb3IobGV0IFk9djtZPFQubGVuZ3RoO1krKylmLnB1c2goVFtZXSl9ZWxzZSBmPVtdLFFP'@;
put 'KGgsZik7cmV0dXJuIGZ9ZnVuY3Rpb24gUU8oYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsLnB1c2goKDAsY1thXSkoKSk7cmV0dXJuIGx9ZnVuY3Rpb24gR2koYyxsPVtdKXtyZXR1cm4gYT0+e2EucHJvdmlkZXJzUmVzb2x2ZXI9KGQsaCk9PmZ1bmN0aW9uIERkZShjLGwsYSl7'@;
put 'Y29uc3QgZD1rcygpO2lmKGQuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBoPVNhKGMpO0tPKGEsZC5kYXRhLGQuYmx1ZXByaW50LGgsITApLEtPKGwsZC5kYXRhLGQuYmx1ZXByaW50LGgsITEpfX0oZCxoP2goYyk6YyxsKX19bGV0IFJkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3Ro'@;
put 'aXMuX2luamVjdG9yPWEsdGhpcy5jYWNoZWRJbmplY3RvcnM9bmV3IE1hcH1nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihhKXtpZighYS5zdGFuZGFsb25lKXJldHVybiBudWxsO2lmKCF0aGlzLmNhY2hlZEluamVjdG9ycy5oYXMoYSkpe2NvbnN0IGQ9XzAoMCxhLnR5cGUpLGg9ZC5s'@;
put 'ZW5ndGg+MD94OChbZF0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHthLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9ycy5zZXQoYSxoKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGEpfW5nT25EZXN0cm95KCl7dHJ5e2Zvcihjb25zdCBhIG9mIHRo'@;
put 'aXMuY2FjaGVkSW5qZWN0b3JzLnZhbHVlcygpKW51bGwhPT1hJiZhLmRlc3Ryb3koKX1maW5hbGx5e3RoaXMuY2FjaGVkSW5qZWN0b3JzLmNsZWFyKCl9fXN0YXRpYyNlPXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46Yyxwcm92aWRlZEluOiJlbnZpcm9ubWVudCIsZmFjdG9yeTooKT0+bmV3'@;
put 'IGMoZnIoZGwpKX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBlUChjKXtIZCgiTmdTdGFuZGFsb25lIiksYy5nZXRTdGFuZGFsb25lSW5qZWN0b3I9bD0+bC5nZXQoUmRlKS5nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihjKX1mdW5jdGlvbiBEYShjLGwsYSl7Y29uc3QgZD1PdSgpK2Ms'@;
put 'aD1OcigpO3JldHVybiBoW2RdPT09aXM/TTAoaCxkLGE/bC5jYWxsKGEpOmwoKSk6ZnVuY3Rpb24gRjUoYyxsKXtyZXR1cm4gY1tsXX0oaCxkKX1mdW5jdGlvbiBhZihjLGwsYSxkKXtyZXR1cm4gWEcoTnIoKSxPdSgpLGMsbCxhLGQpfWZ1bmN0aW9uIGxmKGMsbCxhLGQsaCl7cmV0dXJuIEpH'@;
put 'KE5yKCksT3UoKSxjLGwsYSxkLGgpfWZ1bmN0aW9uIHZ5KGMsbCxhLGQsaCxmKXtyZXR1cm4gUUcoTnIoKSxPdSgpLGMsbCxhLGQsaCxmKX1mdW5jdGlvbiBVeChjLGwsYSxkLGgsZix2KXtyZXR1cm4gZnVuY3Rpb24gZSQoYyxsLGEsZCxoLGYsdixULFkpe2NvbnN0IHJlPWwrYTtyZXR1cm4g'@;
put 'QzAoYyxyZSxoLGYsdixUKT9NMChjLHJlKzQsWT9kLmNhbGwoWSxoLGYsdixUKTpkKGgsZix2LFQpKTp5eShjLHJlKzQpfShOcigpLE91KCksYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24geXkoYyxsKXtjb25zdCBhPWNbbF07cmV0dXJuIGE9PT1pcz92b2lkIDA6YX1mdW5jdGlvbiBYRyhjLGws'@;
put 'YSxkLGgsZil7Y29uc3Qgdj1sK2E7cmV0dXJuIHBsKGMsdixoKT9NMChjLHYrMSxmP2QuY2FsbChmLGgpOmQoaCkpOnl5KGMsdisxKX1mdW5jdGlvbiBKRyhjLGwsYSxkLGgsZix2KXtjb25zdCBUPWwrYTtyZXR1cm4gSDMoYyxULGgsZik/TTAoYyxUKzIsdj9kLmNhbGwodixoLGYpOmQoaCxm'@;
put 'KSk6eXkoYyxUKzIpfWZ1bmN0aW9uIFFHKGMsbCxhLGQsaCxmLHYsVCl7Y29uc3QgWT1sK2E7cmV0dXJuIEg1KGMsWSxoLGYsdik/TTAoYyxZKzMsVD9kLmNhbGwoVCxoLGYsdik6ZChoLGYsdikpOnl5KGMsWSszKX1mdW5jdGlvbiBQYShjLGwpe2NvbnN0IGE9a3MoKTtsZXQgZDtjb25zdCBo'@;
put 'PWMrem87YS5maXJzdENyZWF0ZVBhc3M/KGQ9ZnVuY3Rpb24gQmRlKGMsbCl7aWYobClmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSl7Y29uc3QgZD1sW2FdO2lmKGM9PT1kLm5hbWUpcmV0dXJuIGR9fShsLGEucGlwZVJlZ2lzdHJ5KSxhLmRhdGFbaF09ZCxkLm9uRGVzdHJveSYmKGEu'@;
put 'ZGVzdHJveUhvb2tzPz89W10pLnB1c2goaCxkLm9uRGVzdHJveSkpOmQ9YS5kYXRhW2hdO2NvbnN0IGY9ZC5mYWN0b3J5fHwoZC5mYWN0b3J5PVNsKGQudHlwZSkpLFQ9V3Moc3QpO3RyeXtjb25zdCBZPVI2KCExKSxyZT1mKCk7cmV0dXJuIFI2KFkpLGZ1bmN0aW9uIF9kZShjLGwsYSxkKXth'@;
put 'Pj1jLmRhdGEubGVuZ3RoJiYoYy5kYXRhW2FdPW51bGwsYy5ibHVlcHJpbnRbYV09bnVsbCksbFthXT1kfShhLE5yKCksaCxyZSkscmV9ZmluYWxseXtXcyhUKX19ZnVuY3Rpb24gd2MoYyxsLGEpe2NvbnN0IGQ9Yyt6byxoPU5yKCksZj1wMyhoLGQpO3JldHVybiBieShoLGQpP1hHKGgsT3Uo'@;
put 'KSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gWTUoYyxsLGEsZCl7Y29uc3QgaD1jK3pvLGY9TnIoKSx2PXAzKGYsaCk7cmV0dXJuIGJ5KGYsaCk/SkcoZixPdSgpLGwsdi50cmFuc2Zvcm0sYSxkLHYpOnYudHJhbnNmb3JtKGEsZCl9ZnVuY3Rpb24gdFAoYyxs'@;
put 'LGEsZCxoKXtjb25zdCBmPWMrem8sdj1OcigpLFQ9cDModixmKTtyZXR1cm4gYnkodixmKT9RRyh2LE91KCksbCxULnRyYW5zZm9ybSxhLGQsaCxUKTpULnRyYW5zZm9ybShhLGQsaCl9ZnVuY3Rpb24gYnkoYyxsKXtyZXR1cm4gY1t4aV0uZGF0YVtsXS5wdXJlfWZ1bmN0aW9uIG91KGMsbCl7'@;
put 'cmV0dXJuIHU4KGMsbCl9bGV0IF8kPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7'@;
put 'dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKTtjb25zdCBNJD1uZXcgWXIoIiIpLEd4PW5ldyBZcigiIik7bGV0IGNQLGFQPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMucmVn'@;
put 'aXN0cnk9ZCx0aGlzLl9wZW5kaW5nQ291bnQ9MCx0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fY2FsbGJhY2tzPVtdLHRoaXMudGFza1RyYWNraW5nWm9uZT1udWxsLGNQfHwoZnVuY3Rpb24gRmhlKGMpe2NQPWN9KGgpLGguYWRkVG9XaW5kb3coZCkpLHRoaXMuX3dhdGNoQW5ndWxhckV2'@;
put 'ZW50cygpLGEucnVuKCgpPT57dGhpcy50YXNrVHJhY2tpbmdab25lPXR5cGVvZiBab25lPiJ1Ij9udWxsOlpvbmUuY3VycmVudC5nZXQoIlRhc2tUcmFja2luZ1pvbmUiKX0pfV93YXRjaEFuZ3VsYXJFdmVudHMoKXt0aGlzLl9uZ1pvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoe25leHQ6KCk9'@;
put 'Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITF9fSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnN1YnNjcmliZSh7bmV4dDooKT0+e1BvLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuX2lzWm9u'@;
put 'ZVN0YWJsZT0hMCx0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCl9KX19KX0pfWluY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe3JldHVybiB0aGlzLl9wZW5kaW5nQ291bnQrPTEsdGhpcy5fcGVuZGluZ0NvdW50fWRlY3JlYXNlUGVuZGluZ1JlcXVlc3RDb3VudCgpe2lmKHRoaXMuX3Bl'@;
put 'bmRpbmdDb3VudC09MSx0aGlzLl9wZW5kaW5nQ291bnQ8MCl0aHJvdyBuZXcgRXJyb3IoInBlbmRpbmcgYXN5bmMgcmVxdWVzdHMgYmVsb3cgemVybyIpO3JldHVybiB0aGlzLl9ydW5DYWxsYmFja3NJZlJlYWR5KCksdGhpcy5fcGVuZGluZ0NvdW50fWlzU3RhYmxlKCl7cmV0dXJuIHRoaXMu'@;
put 'X2lzWm9uZVN0YWJsZSYmMD09PXRoaXMuX3BlbmRpbmdDb3VudCYmIXRoaXMuX25nWm9uZS5oYXNQZW5kaW5nTWFjcm90YXNrc31fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpe2lmKHRoaXMuaXNTdGFibGUoKSlxdWV1ZU1pY3JvdGFzaygoKT0+e2Zvcig7MCE9PXRoaXMuX2NhbGxiYWNrcy5sZW5n'@;
put 'dGg7KXtsZXQgYT10aGlzLl9jYWxsYmFja3MucG9wKCk7Y2xlYXJUaW1lb3V0KGEudGltZW91dElkKSxhLmRvbmVDYigpfX0pO2Vsc2V7bGV0IGE9dGhpcy5nZXRQZW5kaW5nVGFza3MoKTt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcihkPT4hZC51cGRhdGVDYnx8IWQu'@;
put 'dXBkYXRlQ2IoYSl8fChjbGVhclRpbWVvdXQoZC50aW1lb3V0SWQpLCExKSl9fWdldFBlbmRpbmdUYXNrcygpe3JldHVybiB0aGlzLnRhc2tUcmFja2luZ1pvbmU/dGhpcy50YXNrVHJhY2tpbmdab25lLm1hY3JvVGFza3MubWFwKGE9Pih7c291cmNlOmEuc291cmNlLGNyZWF0aW9uTG9jYXRp'@;
put 'b246YS5jcmVhdGlvbkxvY2F0aW9uLGRhdGE6YS5kYXRhfSkpOltdfWFkZENhbGxiYWNrKGEsZCxoKXtsZXQgZj0tMTtkJiZkPjAmJihmPXNldFRpbWVvdXQoKCk9Pnt0aGlzLl9jYWxsYmFja3M9dGhpcy5fY2FsbGJhY2tzLmZpbHRlcih2PT52LnRpbWVvdXRJZCE9PWYpLGEoKX0sZCkpLHRo'@;
put 'aXMuX2NhbGxiYWNrcy5wdXNoKHtkb25lQ2I6YSx0aW1lb3V0SWQ6Zix1cGRhdGVDYjpofSl9d2hlblN0YWJsZShhLGQsaCl7aWYoaCYmIXRoaXMudGFza1RyYWNraW5nWm9uZSl0aHJvdyBuZXcgRXJyb3IoJ1Rhc2sgdHJhY2tpbmcgem9uZSBpcyByZXF1aXJlZCB3aGVuIHBhc3NpbmcgYW4g'@;
put 'dXBkYXRlIGNhbGxiYWNrIHRvIHdoZW5TdGFibGUoKS4gSXMgInpvbmUuanMvcGx1Z2lucy90YXNrLXRyYWNraW5nIiBsb2FkZWQ/Jyk7dGhpcy5hZGRDYWxsYmFjayhhLGQsaCksdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfWdldFBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhp'@;
put 'cy5fcGVuZGluZ0NvdW50fXJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5yZWdpc3RyeS5yZWdpc3RlckFwcGxpY2F0aW9uKGEsdGhpcyl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMucmVnaXN0cnkudW5yZWdpc3RlckFwcGxpY2F0aW9uKGEpfWZpbmRQcm92aWRlcnMoYSxkLGgp'@;
put 'e3JldHVybltdfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoUG8pLGZyKGxQKSxmcihHeCkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxsUD0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYXBwbGljYXRpb25zPW5ldyBNYXB9cmVnaXN0ZXJBcHBsaWNhdGlvbihhLGQpe3RoaXMuX2FwcGxpY2F0aW9ucy5zZXQoYSxkKX11bnJlZ2lzdGVyQXBwbGljYXRpb24oYSl7dGhpcy5fYXBwbGljYXRpb25zLmRlbGV0ZShhKX11bnJlZ2lz'@;
put 'dGVyQWxsQXBwbGljYXRpb25zKCl7dGhpcy5fYXBwbGljYXRpb25zLmNsZWFyKCl9Z2V0VGVzdGFiaWxpdHkoYSl7cmV0dXJuIHRoaXMuX2FwcGxpY2F0aW9ucy5nZXQoYSl8fG51bGx9Z2V0QWxsVGVzdGFiaWxpdGllcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy52'@;
put 'YWx1ZXMoKSl9Z2V0QWxsUm9vdEVsZW1lbnRzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fYXBwbGljYXRpb25zLmtleXMoKSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGEsZD0hMCl7cmV0dXJuIGNQPy5maW5kVGVzdGFiaWxpdHlJblRyZWUodGhpcyxhLGQpPz9udWxsfXN0YXRpYyNlPXRo'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBTeShjKXtyZXR1cm4hIWMmJiJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59ZnVuY3Rpb24gQyQoYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zdWJzY3JpYmV9Y29uc3QgdVA9bmV3IFlyKCIiKTtsZXQgZFA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy5kb25l'@;
put 'PSExLHRoaXMuZG9uZVByb21pc2U9bmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnJlc29sdmU9YSx0aGlzLnJlamVjdD1kfSksdGhpcy5hcHBJbml0cz1Wcih1UCx7b3B0aW9uYWw6ITB9KT8/W119cnVuSW5pdGlhbGl6ZXJzKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47Y29uc3QgYT1b'@;
put 'XTtmb3IoY29uc3QgaCBvZiB0aGlzLmFwcEluaXRzKXtjb25zdCBmPWgoKTtpZihTeShmKSlhLnB1c2goZik7ZWxzZSBpZihDJChmKSl7Y29uc3Qgdj1uZXcgUHJvbWlzZSgoVCxZKT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpULGVycm9yOll9KX0pO2EucHVzaCh2KX19Y29uc3QgZD0oKT0+'@;
put 'e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYmZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgaFA9bmV3IFlyKCIiKTtmdW5jdGlvbiBrJChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGwp'@;
put 'P2wucmVkdWNlKGskLGMpOnsuLi5jLC4uLmx9fWxldCBqMz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzPVtdLHRoaXMuX3J1bm5pbmdUaWNrPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX3Zp'@;
put 'ZXdzPVtdLHRoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXI9VnIoWE0pLHRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyPVZyKEQ1KSx0aGlzLmV4dGVybmFsVGVzdFZpZXdzPW5ldyBTZXQsdGhpcy5iZWZvcmVSZW5kZXI9bmV3IG5uLHRoaXMuYWZ0ZXJUaWNrPW5ldyBubix0aGlzLmNvbXBv'@;
put 'bmVudFR5cGVzPVtdLHRoaXMuY29tcG9uZW50cz1bXSx0aGlzLmlzU3RhYmxlPVZyKG1hKS5oYXNQZW5kaW5nVGFza3MucGlwZSh5cihhPT4hYSkpLHRoaXMuX2luamVjdG9yPVZyKGRsKX1nZXQgZGVzdHJveWVkKCl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3llZH1nZXQgaW5qZWN0b3IoKXtyZXR1'@;
put 'cm4gdGhpcy5faW5qZWN0b3J9Ym9vdHN0cmFwKGEsZCl7Y29uc3QgaD1hIGluc3RhbmNlb2YgUlM7aWYoIXRoaXMuX2luamVjdG9yLmdldChkUCkuZG9uZSl0aHJvdyFoJiZmdW5jdGlvbiBxMChjKXtjb25zdCBsPXRzKGMpfHxLYShjKXx8T2woYyk7cmV0dXJuIG51bGwhPT1sJiZsLnN0YW5k'@;
put 'YWxvbmV9KGEpLG5ldyB6big0MDUsITEpO2xldCB2O3Y9aD9hOnRoaXMuX2luamVjdG9yLmdldChnNCkucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoYSksdGhpcy5jb21wb25lbnRUeXBlcy5wdXNoKHYuY29tcG9uZW50VHlwZSk7Y29uc3QgVD1mdW5jdGlvbiBIaGUoYyl7cmV0dXJuIGMuaXNC'@;
put 'b3VuZFRvTW9kdWxlfSh2KT92b2lkIDA6dGhpcy5faW5qZWN0b3IuZ2V0KGVmKSxyZT12LmNyZWF0ZShwYS5OVUxMLFtdLGR8fHYuc2VsZWN0b3IsVCksZmU9cmUubG9jYXRpb24ubmF0aXZlRWxlbWVudCxfZT1yZS5pbmplY3Rvci5nZXQoTSQsbnVsbCk7cmV0dXJuIF9lPy5yZWdpc3RlckFw'@;
put 'cGxpY2F0aW9uKGZlKSxyZS5vbkRlc3Ryb3koKCk9Pnt0aGlzLmRldGFjaFZpZXcocmUuaG9zdFZpZXcpLCR4KHRoaXMuY29tcG9uZW50cyxyZSksX2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihmZSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KHJlKSxyZX10aWNrKCl7dGhpcy5fdGljayghMCl9'@;
put 'X3RpY2soYSl7aWYodGhpcy5fcnVubmluZ1RpY2spdGhyb3cgbmV3IHpuKDEwMSwhMSk7Y29uc3QgZD1zZShudWxsKTt0cnl7dGhpcy5fcnVubmluZ1RpY2s9ITAsdGhpcy5kZXRlY3RDaGFuZ2VzSW5BdHRhY2hlZFZpZXdzKGEpfWNhdGNoKGgpe3RoaXMuaW50ZXJuYWxFcnJvckhhbmRsZXIo'@;
put 'aCl9ZmluYWxseXt0aGlzLmFmdGVyVGljay5uZXh0KCksdGhpcy5fcnVubmluZ1RpY2s9ITEsc2UoZCl9fWRldGVjdENoYW5nZXNJbkF0dGFjaGVkVmlld3MoYSl7bGV0IGQ9MDtjb25zdCBoPXRoaXMuYWZ0ZXJSZW5kZXJFZmZlY3RNYW5hZ2VyO2Zvcig7Oyl7aWYoZD09PXdTKXRocm93IG5l'@;
put 'dyB6bigxMDMsITEpO2lmKGEpe2NvbnN0IGY9MD09PWQ7dGhpcy5iZWZvcmVSZW5kZXIubmV4dChmKTtmb3IobGV0e19sVmlldzp2LG5vdGlmeUVycm9ySGFuZGxlcjpUfW9mIHRoaXMuX3ZpZXdzKVZoZSh2LGYsVCl9aWYoZCsrLGguZXhlY3V0ZUludGVybmFsQ2FsbGJhY2tzKCksIVsuLi50'@;
put 'aGlzLmV4dGVybmFsVGVzdFZpZXdzLmtleXMoKSwuLi50aGlzLl92aWV3c10uc29tZSgoe19sVmlldzpmfSk9PmZQKGYpKSYmKGguZXhlY3V0ZSgpLCFbLi4udGhpcy5leHRlcm5hbFRlc3RWaWV3cy5rZXlzKCksLi4udGhpcy5fdmlld3NdLnNvbWUoKHtfbFZpZXc6Zn0pPT5mUChmKSkpKWJy'@;
put 'ZWFrfX1hdHRhY2hWaWV3KGEpe2NvbnN0IGQ9YTt0aGlzLl92aWV3cy5wdXNoKGQpLGQuYXR0YWNoVG9BcHBSZWYodGhpcyl9ZGV0YWNoVmlldyhhKXtjb25zdCBkPWE7JHgodGhpcy5fdmlld3MsZCksZC5kZXRhY2hGcm9tQXBwUmVmKCl9X2xvYWRDb21wb25lbnQoYSl7dGhpcy5hdHRhY2hW'@;
put 'aWV3KGEuaG9zdFZpZXcpLHRoaXMudGljaygpLHRoaXMuY29tcG9uZW50cy5wdXNoKGEpO2NvbnN0IGQ9dGhpcy5faW5qZWN0b3IuZ2V0KGhQLFtdKTtbLi4udGhpcy5fYm9vdHN0cmFwTGlzdGVuZXJzLC4uLmRdLmZvckVhY2goaD0+aChhKSl9bmdPbkRlc3Ryb3koKXtpZighdGhpcy5fZGVz'@;
put 'dHJveWVkKXRyeXt0aGlzLl9kZXN0cm95TGlzdGVuZXJzLmZvckVhY2goYT0+YSgpKSx0aGlzLl92aWV3cy5zbGljZSgpLmZvckVhY2goYT0+YS5kZXN0cm95KCkpfWZpbmFsbHl7dGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX3ZpZXdzPVtdLHRoaXMuX2Jvb3RzdHJhcExpc3RlbmVycz1bXSx0'@;
put 'aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdfX1vbkRlc3Ryb3koYSl7cmV0dXJuIHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChhKSwoKT0+JHgodGhpcy5fZGVzdHJveUxpc3RlbmVycyxhKX1kZXN0cm95KCl7aWYodGhpcy5fZGVzdHJveWVkKXRocm93IG5ldyB6big0MDYsITEpO2NvbnN0'@;
put 'IGE9dGhpcy5faW5qZWN0b3I7YS5kZXN0cm95JiYhYS5kZXN0cm95ZWQmJmEuZGVzdHJveSgpfWdldCB2aWV3Q291bnQoKXtyZXR1cm4gdGhpcy5fdmlld3MubGVuZ3RofXdhcm5JZkRlc3Ryb3llZCgpe31zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8'@;
put 'fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiAkeChjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gVmhl'@;
put 'KGMsbCxhKXshbCYmIWZQKGMpfHxmdW5jdGlvbiBqaGUoYyxsLGEpe2xldCBkO2E/KGQ9MCxjW3BvXXw9MTAyNCk6ZD02NCZjW3BvXT8wOjEsYzgoYyxsLGQpfShjLGEsbCl9ZnVuY3Rpb24gZlAoYyl7cmV0dXJuIFM2KGMpfWNsYXNzIEJoZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMubmdNb2R1'@;
put 'bGVGYWN0b3J5PWwsdGhpcy5jb21wb25lbnRGYWN0b3JpZXM9YX19bGV0IEUkPSgoKT0+e2NsYXNzIGN7Y29tcGlsZU1vZHVsZVN5bmMoYSl7cmV0dXJuIG5ldyByeShhKX1jb21waWxlTW9kdWxlQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVTeW5j'@;
put 'KGEpKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSl7Y29uc3QgZD10aGlzLmNvbXBpbGVNb2R1bGVTeW5jKGEpLGY9dzAodGMoYSkuZGVjbGFyYXRpb25zKS5yZWR1Y2UoKHYsVCk9Pntjb25zdCBZPXRzKFQpO3JldHVybiBZJiZ2LnB1c2gobmV3IEw1KFkpKSx2fSxbXSk7'@;
put 'cmV0dXJuIG5ldyBCaGUoZCxmKX1jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGEpe3JldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoYSkpfWNsZWFyQ2FjaGUoKXt9Y2xlYXJDYWNoZUZvcihhKXt9Z2V0TW9kdWxl'@;
put 'SWQoYSl7fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLFVoZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKCl7dGhpcy56b25lPVZyKFBvKSx0aGlzLmFwcGxpY2F0aW9uUmVmPVZyKGozKX1pbml0aWFsaXplKCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbnx8KHRoaXMuX29uTWljcm90YXNrRW1wdHlTdWJzY3JpcHRpb249dGhpcy56b25lLm9uTWljcm90'@;
put 'YXNrRW1wdHkuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy56b25lLnJ1bigoKT0+e3RoaXMuYXBwbGljYXRpb25SZWYudGljaygpfSl9fSkpfW5nT25EZXN0cm95KCl7dGhpcy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1zdGF0aWMjZT10aGlzLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBaaGUoKXtjb25zdCBjPVZyKFBvKSxsPVZyKE9kKTty'@;
put 'ZXR1cm4gYT0+Yy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bC5oYW5kbGVFcnJvcihhKSl9bGV0IEdoZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdWJzY3JpcHRpb249bmV3IFh0LHRoaXMuaW5pdGlhbGl6ZWQ9ITEsdGhpcy56b25lPVZyKFBvKSx0aGlzLnBlbmRpbmdUYXNr'@;
put 'cz1WcihtYSl9aW5pdGlhbGl6ZSgpe2lmKHRoaXMuaW5pdGlhbGl6ZWQpcmV0dXJuO3RoaXMuaW5pdGlhbGl6ZWQ9ITA7bGV0IGE9bnVsbDshdGhpcy56b25lLmlzU3RhYmxlJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tz'@;
put 'JiYoYT10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5zdWJzY3JpcHRpb24uYWRkKHRoaXMuem9uZS5vblN0YWJsZS5zdWJzY3JpYmUoKCk9PntQby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9'@;
put 'PntudWxsIT09YSYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWFjcm90YXNrcyYmIXRoaXMuem9uZS5oYXNQZW5kaW5nTWljcm90YXNrcyYmKHRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShhKSxhPW51bGwpfSl9KSl9KSx0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uVW5zdGFibGUu'@;
put 'c3Vic2NyaWJlKCgpPT57UG8uYXNzZXJ0SW5Bbmd1bGFyWm9uZSgpLGE/Pz10aGlzLnBlbmRpbmdUYXNrcy5hZGQoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgV2g9bmV3IFlyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5WcihXaCxBaS5PcHRpb25hbHxB'@;
put 'aS5Ta2lwU2VsZil8fGZ1bmN0aW9uICRoZSgpe3JldHVybiB0eXBlb2YgJGxvY2FsaXplPCJ1IiYmJGxvY2FsaXplLmxvY2FsZXx8SDh9KCl9KSxwUD1uZXcgWXIoIiIpO2xldCBMJD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1b'@;
put 'XSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBJeChjPSJ6b25lLmpzIixsKXtyZXR1cm4ibm9vcCI9PT1jP25ldyBseToiem9uZS5qcyI9PT1jP25ldyBQbyhsKTpjfShkPy5u'@;
put 'Z1pvbmUsZnVuY3Rpb24gQSQoYyl7cmV0dXJue2VuYWJsZUxvbmdTdGFja1RyYWNlOiExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246Yz8uZXZlbnRDb2FsZXNjaW5nPz8hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjpjPy5ydW5Db2FsZXNjaW5nPz8hMX19'@;
put 'KHtldmVudENvYWxlc2Npbmc6ZD8ubmdab25lRXZlbnRDb2FsZXNjaW5nLHJ1bkNvYWxlc2Npbmc6ZD8ubmdab25lUnVuQ29hbGVzY2luZ30pKTtyZXR1cm4gaC5ydW4oKCk9Pntjb25zdCBmPWZ1bmN0aW9uIEFPKGMsbCxhKXtyZXR1cm4gbmV3IG55KGMsbCxhKX0oYS5tb2R1bGVUeXBlLHRo'@;
put 'aXMuaW5qZWN0b3IsZnVuY3Rpb24gRCQoYyl7cmV0dXJuW3twcm92aWRlOlBvLHVzZUZhY3Rvcnk6Y30se3Byb3ZpZGU6bTAsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9VnIoVWhlLHtvcHRpb25hbDohMH0pO3JldHVybigpPT5sLmluaXRpYWxpemUoKX19LHtwcm92aWRlOm0w'@;
put 'LG11bHRpOiEwLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBsPVZyKEdoZSk7cmV0dXJuKCk9PntsLmluaXRpYWxpemUoKX19fSx7cHJvdmlkZTpYTSx1c2VGYWN0b3J5OlpoZX1dfSgoKT0+aCkpLHY9Zi5pbmplY3Rvci5nZXQoT2QsbnVsbCk7cmV0dXJuIGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9'@;
put 'Pntjb25zdCBUPWgub25FcnJvci5zdWJzY3JpYmUoe25leHQ6WT0+e3YuaGFuZGxlRXJyb3IoWSl9fSk7Zi5vbkRlc3Ryb3koKCk9PnskeCh0aGlzLl9tb2R1bGVzLGYpLFQudW5zdWJzY3JpYmUoKX0pfSksZnVuY3Rpb24geCQoYyxsLGEpe3RyeXtjb25zdCBkPWEoKTtyZXR1cm4gU3koZCk/'@;
put 'ZC5jYXRjaChoPT57dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihoKSksaH0pOmR9Y2F0Y2goZCl7dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihkKSksZH19KHYsaCwoKT0+e2NvbnN0IFQ9Zi5pbmplY3Rvci5nZXQoZFApO3Jl'@;
put 'dHVybiBULnJ1bkluaXRpYWxpemVycygpLFQuZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uIFFXKGMpeyJzdHJpbmciPT10eXBlb2YgYyYmKEpXPWMudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9fL2csIi0iKSl9KGYuaW5qZWN0b3IuZ2V0KFdoLEg4KXx8SDgpLHRoaXMuX21vZHVsZURv'@;
put 'Qm9vdHN0cmFwKGYpLGYpKX0pfSl9Ym9vdHN0cmFwTW9kdWxlKGEsZD1bXSl7Y29uc3QgaD1rJCh7fSxkKTtyZXR1cm4gZnVuY3Rpb24gemhlKGMsbCxhKXtjb25zdCBkPW5ldyByeShhKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGQpfSgwLDAsYSkudGhlbihmPT50aGlzLmJvb3RzdHJhcE1v'@;
put 'ZHVsZUZhY3RvcnkoZixoKSl9X21vZHVsZURvQm9vdHN0cmFwKGEpe2NvbnN0IGQ9YS5pbmplY3Rvci5nZXQoajMpO2lmKGEuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApYS5fYm9vdHN0cmFwQ29tcG9uZW50cy5mb3JFYWNoKGg9PmQuYm9vdHN0cmFwKGgpKTtlbHNle2lmKCFhLmlu'@;
put 'c3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IHpuKC00MDMsITEpO2EuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChkKX10aGlzLl9tb2R1bGVzLnB1c2goYSl9b25EZXN0cm95KGEpe3RoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMucHVzaChhKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5f'@;
put 'aW5qZWN0b3J9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgem4oNDA0LCExKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGQ9PmQoKSk7Y29uc3QgYT10aGlzLl9pbmplY3Rv'@;
put 'ci5nZXQocFAsbnVsbCk7YSYmKGEuZm9yRWFjaChkPT5kKCkpLGEuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIocGEp'@;
put 'KX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpLEU0PW51bGw7Y29uc3QgSSQ9bmV3IFlyKCIiKTtmdW5jdGlvbiBSJChjLGwsYT1bXSl7Y29uc3QgZD1gUGxhdGZvcm06'@;
put 'ICR7bH1gLGg9bmV3IFlyKGQpO3JldHVybihmPVtdKT0+e2xldCB2PW1QKCk7aWYoIXZ8fHYuaW5qZWN0b3IuZ2V0KEkkLCExKSl7Y29uc3QgVD1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6ITB9XTtjP2MoVCk6ZnVuY3Rpb24gWGhlKGMpe2lmKEU0JiYhRTQuZ2V0KEkkLCExKSl0'@;
put 'aHJvdyBuZXcgem4oNDAwLCExKTsoZnVuY3Rpb24gUyQoKXshZnVuY3Rpb24gYXQoYyl7VWU9Y30oKCk9Pnt0aHJvdyBuZXcgem4oNjAwLCExKX0pfSkoKSxFND1jO2NvbnN0IGw9Yy5nZXQoTCQpOyhmdW5jdGlvbiBQJChjKXtjLmdldChtQyxudWxsKT8uZm9yRWFjaChhPT5hKCkpfSkoYyl9'@;
put 'KGZ1bmN0aW9uIE8kKGM9W10sbCl7cmV0dXJuIHBhLmNyZWF0ZSh7bmFtZTpsLHByb3ZpZGVyczpbe3Byb3ZpZGU6bzMsdXNlVmFsdWU6InBsYXRmb3JtIn0se3Byb3ZpZGU6cFAsdXNlVmFsdWU6bmV3IFNldChbKCk9PkU0PW51bGxdKX0sLi4uY119KX0oVCxkKSl9cmV0dXJuIGZ1bmN0aW9u'@;
put 'IEpoZShjKXtjb25zdCBsPW1QKCk7aWYoIWwpdGhyb3cgbmV3IHpuKDQwMSwhMSk7cmV0dXJuIGx9KCl9fWZ1bmN0aW9uIG1QKCl7cmV0dXJuIEU0Py5nZXQoTCQpPz9udWxsfWxldCBGYT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuX19OR19FTEVNRU5UX0lEX189ZTJlfXJldHVybiBj'@;
put 'fSkoKTtmdW5jdGlvbiBlMmUoYyl7cmV0dXJuIGZ1bmN0aW9uIHQyZShjLGwsYSl7aWYoWTEoYykmJiFhKXtjb25zdCBkPXkwKGMuaW5kZXgsbCk7cmV0dXJuIG5ldyBDNShkLGQpfXJldHVybiA0NyZjLnR5cGU/bmV3IEM1KGxbQXNdLGwpOm51bGx9KGZhKCksTnIoKSwhKDE2Jn5jKSl9Y2xh'@;
put 'c3MgaiR7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIFA1KGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHMyZShsKX19Y29uc3QgbzJlPShjLGwpPT5sO2NsYXNzIHMyZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91'@;
put 'bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNU'@;
put 'YWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8bzJlfWZvckVhY2hJdGVtKGwpe2xldCBhO2Zv'@;
put 'cihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1udWxsO2Zvcig7YXx8ZDspe2NvbnN0IHY9IWR8fGEmJmEuY3VycmVudEluZGV4PFkkKGQsaCxmKT9h'@;
put 'OmQsVD1ZJCh2LGgsZiksWT12LmN1cnJlbnRJbmRleDtpZih2PT09ZCloLS0sZD1kLl9uZXh0UmVtb3ZlZDtlbHNlIGlmKGE9YS5fbmV4dCxudWxsPT12LnByZXZpb3VzSW5kZXgpaCsrO2Vsc2V7Znx8KGY9W10pO2NvbnN0IHJlPVQtaCxmZT1ZLWg7aWYocmUhPWZlKXtmb3IobGV0IGtlPTA7'@;
put 'a2U8cmU7a2UrKyl7Y29uc3QgV2U9a2U8Zi5sZW5ndGg/ZltrZV06ZltrZV09MCxKZT1XZStrZTtmZTw9SmUmJkplPHJlJiYoZltrZV09V2UrMSl9Zlt2LnByZXZpb3VzSW5kZXhdPWZlLXJlfX1UIT09WSYmbCh2LFQsWSl9fWZvckVhY2hQcmV2aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhp'@;
put 'cy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoTW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRo'@;
put 'aXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVudGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10'@;
put 'aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIVA1KGwpKXRocm93IG5ldyB6big5MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hl'@;
put 'Y2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLHYsYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IFQ9MDtUPHRoaXMubGVuZ3RoO1QrKylmPWxbVF0sdj10aGlzLl90cmFja0J5Rm4oVCxmKSxudWxsIT09YSYmT2Jq'@;
put 'ZWN0LmlzKGEudHJhY2tCeUlkLHYpPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsdixUKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxmKSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLHYsVCksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0w'@;
put 'LGZ1bmN0aW9uIFN4KGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTspbChkLnZhbHVlKX19KGwsVD0+e3Y9dGhpcy5f'@;
put 'dHJhY2tCeUZuKGgsVCksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxULHYsaCkpLE9iamVjdC5pcyhhLml0ZW0sVCl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsVCkpOihhPXRoaXMuX21pc21hdGNoKGEsVCx2'@;
put 'LGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hl'@;
put 'YWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJldmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJl'@;
put 'dmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVs'@;
put 'bCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9p'@;
put 'ZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5r'@;
put 'ZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShsPW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5n'@;
put 'ZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgYTJlKGEsZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlvbihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhp'@;
put 'cy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwuY3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGws'@;
put 'aCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5f'@;
put 'YWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCksbnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09'@;
put 'dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEs'@;
put 'ZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJuIG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVhZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09'@;
put 'PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRk'@;
put 'VG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1s'@;
put 'LGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1sOmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9pdEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRo'@;
put 'aXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBCJCksdGhpcy5fbGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9ZCxsfV9yZW1vdmUobCl7cmV0dXJuIHRoaXMuX2FkZFRvUmVtb3ZhbHModGhpcy5fdW5saW5rKGwpKX1fdW5saW5rKGwpe251bGwh'@;
put 'PT10aGlzLl9saW5rZWRSZWNvcmRzJiZ0aGlzLl9saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBhPWwuX3ByZXYsZD1sLl9uZXh0O3JldHVybiBudWxsPT09YT90aGlzLl9pdEhlYWQ9ZDphLl9uZXh0PWQsbnVsbD09PWQ/dGhpcy5faXRUYWlsPWE6ZC5fcHJldj1hLGx9X2FkZFRvTW92'@;
put 'ZXMobCxhKXtyZXR1cm4gbC5wcmV2aW91c0luZGV4PT09YXx8KHRoaXMuX21vdmVzVGFpbD1udWxsPT09dGhpcy5fbW92ZXNUYWlsP3RoaXMuX21vdmVzSGVhZD1sOnRoaXMuX21vdmVzVGFpbC5fbmV4dE1vdmVkPWwpLGx9X2FkZFRvUmVtb3ZhbHMobCl7cmV0dXJuIG51bGw9PT10aGlzLl91'@;
put 'bmxpbmtlZFJlY29yZHMmJih0aGlzLl91bmxpbmtlZFJlY29yZHM9bmV3IEIkKSx0aGlzLl91bmxpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PW51bGwsbC5fbmV4dFJlbW92ZWQ9bnVsbCxudWxsPT09dGhpcy5fcmVtb3ZhbHNUYWlsPyh0aGlzLl9yZW1vdmFsc1RhaWw9dGhp'@;
put 'cy5fcmVtb3ZhbHNIZWFkPWwsbC5fcHJldlJlbW92ZWQ9bnVsbCk6KGwuX3ByZXZSZW1vdmVkPXRoaXMuX3JlbW92YWxzVGFpbCx0aGlzLl9yZW1vdmFsc1RhaWw9dGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1sKSxsfV9hZGRJZGVudGl0eUNoYW5nZShsLGEpe3JldHVybiBsLml0'@;
put 'ZW09YSx0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGw9PT10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsP3RoaXMuX2lkZW50aXR5Q2hhbmdlc0hlYWQ9bDp0aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bCxsfX1jbGFzcyBhMmV7Y29uc3RydWN0b3Io'@;
put 'bCxhKXt0aGlzLml0ZW09bCx0aGlzLnRyYWNrQnlJZD1hLHRoaXMuY3VycmVudEluZGV4PW51bGwsdGhpcy5wcmV2aW91c0luZGV4PW51bGwsdGhpcy5fbmV4dFByZXZpb3VzPW51bGwsdGhpcy5fcHJldj1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2RHVwPW51bGwsdGhpcy5fbmV4'@;
put 'dER1cD1udWxsLHRoaXMuX3ByZXZSZW1vdmVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0QWRkZWQ9bnVsbCx0aGlzLl9uZXh0TW92ZWQ9bnVsbCx0aGlzLl9uZXh0SWRlbnRpdHlDaGFuZ2U9bnVsbH19Y2xhc3MgbDJle2NvbnN0cnVjdG9yKCl7dGhpcy5faGVhZD1u'@;
put 'dWxsLHRoaXMuX3RhaWw9bnVsbH1hZGQobCl7bnVsbD09PXRoaXMuX2hlYWQ/KHRoaXMuX2hlYWQ9dGhpcy5fdGFpbD1sLGwuX25leHREdXA9bnVsbCxsLl9wcmV2RHVwPW51bGwpOih0aGlzLl90YWlsLl9uZXh0RHVwPWwsbC5fcHJldkR1cD10aGlzLl90YWlsLGwuX25leHREdXA9bnVsbCx0'@;
put 'aGlzLl90YWlsPWwpfWdldChsLGEpe2xldCBkO2ZvcihkPXRoaXMuX2hlYWQ7bnVsbCE9PWQ7ZD1kLl9uZXh0RHVwKWlmKChudWxsPT09YXx8YTw9ZC5jdXJyZW50SW5kZXgpJiZPYmplY3QuaXMoZC50cmFja0J5SWQsbCkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9'@;
put 'bC5fcHJldkR1cCxkPWwuX25leHREdXA7cmV0dXJuIG51bGw9PT1hP3RoaXMuX2hlYWQ9ZDphLl9uZXh0RHVwPWQsbnVsbD09PWQ/dGhpcy5fdGFpbD1hOmQuX3ByZXZEdXA9YSxudWxsPT09dGhpcy5faGVhZH19Y2xhc3MgQiR7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChs'@;
put 'KXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgbDJlLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMubWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEpOm51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50'@;
put 'cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFyKCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24gWSQoYyxsLGEpe2NvbnN0IGQ9Yy5wcmV2aW91'@;
put 'c0luZGV4O2lmKG51bGw9PT1kKXJldHVybiBkO2xldCBoPTA7cmV0dXJuIGEmJmQ8YS5sZW5ndGgmJihoPWFbZF0pLGQrbCtofWNsYXNzIHoke2NvbnN0cnVjdG9yKCl7fXN1cHBvcnRzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTWFwfHxFOChsKX1jcmVhdGUoKXtyZXR1cm4gbmV3IGMyZX19'@;
put 'Y2xhc3MgYzJle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVjb3Jkcz1uZXcgTWFwLHRoaXMuX21hcEhlYWQ9bnVsbCx0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX3ByZXZpb3VzTWFwSGVhZD1udWxsLHRoaXMuX2NoYW5nZXNIZWFkPW51bGwsdGhpcy5fY2hhbmdlc1RhaWw9bnVsbCx0aGlz'@;
put 'Ll9hZGRpdGlvbnNIZWFkPW51bGwsdGhpcy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsLHRoaXMuX3JlbW92YWxzVGFpbD1udWxsfWdldCBpc0RpcnR5KCl7cmV0dXJuIG51bGwhPT10aGlzLl9hZGRpdGlvbnNIZWFkfHxudWxsIT09dGhpcy5fY2hhbmdlc0hl'@;
put 'YWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR9Zm9yRWFjaEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fbWFwSGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoUHJldmlvdXNJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09YTthPWEu'@;
put 'X25leHRQcmV2aW91cylsKGEpfWZvckVhY2hDaGFuZ2VkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09YTthPWEuX25leHRDaGFuZ2VkKWwoYSl9Zm9yRWFjaEFkZGVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1hO2E9'@;
put 'YS5fbmV4dEFkZGVkKWwoYSl9Zm9yRWFjaFJlbW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX3JlbW92YWxzSGVhZDtudWxsIT09YTthPWEuX25leHRSZW1vdmVkKWwoYSl9ZGlmZihsKXtpZihsKXtpZighKGwgaW5zdGFuY2VvZiBNYXB8fEU4KGwpKSl0aHJvdyBuZXcgem4oOTAwLCEx'@;
put 'KX1lbHNlIGw9bmV3IE1hcDtyZXR1cm4gdGhpcy5jaGVjayhsKT90aGlzOm51bGx9b25EZXN0cm95KCl7fWNoZWNrKGwpe3RoaXMuX3Jlc2V0KCk7bGV0IGE9dGhpcy5fbWFwSGVhZDtpZih0aGlzLl9hcHBlbmRBZnRlcj1udWxsLHRoaXMuX2ZvckVhY2gobCwoZCxoKT0+e2lmKGEmJmEua2V5'@;
put 'PT09aCl0aGlzLl9tYXliZUFkZFRvQ2hhbmdlcyhhLGQpLHRoaXMuX2FwcGVuZEFmdGVyPWEsYT1hLl9uZXh0O2Vsc2V7Y29uc3QgZj10aGlzLl9nZXRPckNyZWF0ZVJlY29yZEZvcktleShoLGQpO2E9dGhpcy5faW5zZXJ0QmVmb3JlT3JBcHBlbmQoYSxmKX19KSxhKXthLl9wcmV2JiYoYS5f'@;
put 'cHJldi5fbmV4dD1udWxsKSx0aGlzLl9yZW1vdmFsc0hlYWQ9YTtmb3IobGV0IGQ9YTtudWxsIT09ZDtkPWQuX25leHRSZW1vdmVkKWQ9PT10aGlzLl9tYXBIZWFkJiYodGhpcy5fbWFwSGVhZD1udWxsKSx0aGlzLl9yZWNvcmRzLmRlbGV0ZShkLmtleSksZC5fbmV4dFJlbW92ZWQ9ZC5fbmV4'@;
put 'dCxkLnByZXZpb3VzVmFsdWU9ZC5jdXJyZW50VmFsdWUsZC5jdXJyZW50VmFsdWU9bnVsbCxkLl9wcmV2PW51bGwsZC5fbmV4dD1udWxsfXJldHVybiB0aGlzLl9jaGFuZ2VzVGFpbCYmKHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1udWxsKSx0aGlzLl9hZGRpdGlvbnNUYWlsJiYo'@;
put 'dGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPW51bGwpLHRoaXMuaXNEaXJ0eX1faW5zZXJ0QmVmb3JlT3JBcHBlbmQobCxhKXtpZihsKXtjb25zdCBkPWwuX3ByZXY7cmV0dXJuIGEuX25leHQ9bCxhLl9wcmV2PWQsbC5fcHJldj1hLGQmJihkLl9uZXh0PWEpLGw9PT10aGlzLl9tYXBI'@;
put 'ZWFkJiYodGhpcy5fbWFwSGVhZD1hKSx0aGlzLl9hcHBlbmRBZnRlcj1sLGx9cmV0dXJuIHRoaXMuX2FwcGVuZEFmdGVyPyh0aGlzLl9hcHBlbmRBZnRlci5fbmV4dD1hLGEuX3ByZXY9dGhpcy5fYXBwZW5kQWZ0ZXIpOnRoaXMuX21hcEhlYWQ9YSx0aGlzLl9hcHBlbmRBZnRlcj1hLG51bGx9'@;
put 'X2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5KGwsYSl7aWYodGhpcy5fcmVjb3Jkcy5oYXMobCkpe2NvbnN0IGg9dGhpcy5fcmVjb3Jkcy5nZXQobCk7dGhpcy5fbWF5YmVBZGRUb0NoYW5nZXMoaCxhKTtjb25zdCBmPWguX3ByZXYsdj1oLl9uZXh0O3JldHVybiBmJiYoZi5fbmV4dD12KSx2JiYo'@;
put 'di5fcHJldj1mKSxoLl9uZXh0PW51bGwsaC5fcHJldj1udWxsLGh9Y29uc3QgZD1uZXcgdTJlKGwpO3JldHVybiB0aGlzLl9yZWNvcmRzLnNldChsLGQpLGQuY3VycmVudFZhbHVlPWEsdGhpcy5fYWRkVG9BZGRpdGlvbnMoZCksZH1fcmVzZXQoKXtpZih0aGlzLmlzRGlydHkpe2xldCBsO2Zv'@;
put 'cih0aGlzLl9wcmV2aW91c01hcEhlYWQ9dGhpcy5fbWFwSGVhZCxsPXRoaXMuX3ByZXZpb3VzTWFwSGVhZDtudWxsIT09bDtsPWwuX25leHQpbC5fbmV4dFByZXZpb3VzPWwuX25leHQ7Zm9yKGw9dGhpcy5fY2hhbmdlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0Q2hhbmdlZClsLnByZXZpb3Vz'@;
put 'VmFsdWU9bC5jdXJyZW50VmFsdWU7Zm9yKGw9dGhpcy5fYWRkaXRpb25zSGVhZDtudWxsIT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTt0aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9dGhp'@;
put 'cy5fYWRkaXRpb25zVGFpbD1udWxsLHRoaXMuX3JlbW92YWxzSGVhZD1udWxsfX1fbWF5YmVBZGRUb0NoYW5nZXMobCxhKXtPYmplY3QuaXMoYSxsLmN1cnJlbnRWYWx1ZSl8fChsLnByZXZpb3VzVmFsdWU9bC5jdXJyZW50VmFsdWUsbC5jdXJyZW50VmFsdWU9YSx0aGlzLl9hZGRUb0NoYW5n'@;
put 'ZXMobCkpfV9hZGRUb0FkZGl0aW9ucyhsKXtudWxsPT09dGhpcy5fYWRkaXRpb25zSGVhZD90aGlzLl9hZGRpdGlvbnNIZWFkPXRoaXMuX2FkZGl0aW9uc1RhaWw9bDoodGhpcy5fYWRkaXRpb25zVGFpbC5fbmV4dEFkZGVkPWwsdGhpcy5fYWRkaXRpb25zVGFpbD1sKX1fYWRkVG9DaGFuZ2Vz'@;
put 'KGwpe251bGw9PT10aGlzLl9jaGFuZ2VzSGVhZD90aGlzLl9jaGFuZ2VzSGVhZD10aGlzLl9jaGFuZ2VzVGFpbD1sOih0aGlzLl9jaGFuZ2VzVGFpbC5fbmV4dENoYW5nZWQ9bCx0aGlzLl9jaGFuZ2VzVGFpbD1sKX1fZm9yRWFjaChsLGEpe2wgaW5zdGFuY2VvZiBNYXA/bC5mb3JFYWNoKGEp'@;
put 'Ok9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+YShsW2RdLGQpKX19Y2xhc3MgdTJle2NvbnN0cnVjdG9yKGwpe3RoaXMua2V5PWwsdGhpcy5wcmV2aW91c1ZhbHVlPW51bGwsdGhpcy5jdXJyZW50VmFsdWU9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlzLl9uZXh0PW51bGwsdGhp'@;
put 'cy5fcHJldj1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRSZW1vdmVkPW51bGwsdGhpcy5fbmV4dENoYW5nZWQ9bnVsbH19ZnVuY3Rpb24gVSQoKXtyZXR1cm4gbmV3IHh5KFtuZXcgaiRdKX1sZXQgeHk9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NXByb3Y9'@;
put 'bHIoe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTpVJH0pO2NvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShhLGQpe2lmKG51bGwhPWQpe2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGgpfXJldHVybiBuZXcgYyhhKX1z'@;
put 'dGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fFUkKCkpLGRlcHM6W1tjLG5ldyBidSxuZXcgTHVdXX19ZmluZChhKXtjb25zdCBkPXRoaXMuZmFjdG9yaWVzLmZpbmQoaD0+aC5zdXBwb3J0cyhhKSk7aWYobnVsbCE9ZClyZXR1cm4g'@;
put 'ZDt0aHJvdyBuZXcgem4oOTAxLCExKX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIFokKCl7cmV0dXJuIG5ldyBreShbbmV3IHokXSl9bGV0IGt5PSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6WiR9KTtj'@;
put 'b25zdHJ1Y3RvcihhKXt0aGlzLmZhY3Rvcmllcz1hfXN0YXRpYyBjcmVhdGUoYSxkKXtpZihkKXtjb25zdCBoPWQuZmFjdG9yaWVzLnNsaWNlKCk7YT1hLmNvbmNhdChoKX1yZXR1cm4gbmV3IGMoYSl9c3RhdGljIGV4dGVuZChhKXtyZXR1cm57cHJvdmlkZTpjLHVzZUZhY3Rvcnk6ZD0+Yy5j'@;
put 'cmVhdGUoYSxkfHxaJCgpKSxkZXBzOltbYyxuZXcgYnUsbmV3IEx1XV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKGQpcmV0dXJuIGQ7dGhyb3cgbmV3IHpuKDkwMSwhMSl9fXJldHVybiBjfSkoKTtjb25zdCBmMmU9UiQobnVsbCwi'@;
put 'Y29yZSIsW10pO2xldCBwMmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihqMykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAy'@;
put 'NzVpbmo9X2koe30pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB4MChjKXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiBjP2M6bnVsbCE9YyYmImZhbHNlIiE9PWN9ZnVuY3Rpb24gZnEoYyl7Y29uc3QgbD1zZShudWxsKTt0cnl7cmV0dXJuIGMoKX1maW5hbGx5e3NlKGwpfX1sZXQgbXE9bnVsbDtm'@;
put 'dW5jdGlvbiBUNCgpe3JldHVybiBtcX1jbGFzcyBYMmV7fWNvbnN0ICRzPW5ldyBZcigiIik7bGV0IE1QPSgoKT0+e2NsYXNzIGN7aGlzdG9yeUdvKGEpe3Rocm93IG5ldyBFcnJvcigiIil9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3Rh'@;
put 'dGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PlZyKFEyZSkscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJuIGN9KSgpO2NvbnN0IEoyZT1uZXcgWXIoIiIpO2xldCBRMmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIE1Qe2NvbnN0cnVjdG9yKCl7c3VwZXIo'@;
put 'KSx0aGlzLl9kb2M9VnIoJHMpLHRoaXMuX2xvY2F0aW9uPXdpbmRvdy5sb2NhdGlvbix0aGlzLl9oaXN0b3J5PXdpbmRvdy5oaXN0b3J5fWdldEJhc2VIcmVmRnJvbURPTSgpe3JldHVybiBUNCgpLmdldEJhc2VIcmVmKHRoaXMuX2RvYyl9b25Qb3BTdGF0ZShhKXtjb25zdCBkPVQ0KCkuZ2V0'@;
put 'R2xvYmFsRXZlbnRUYXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsYSwhMSksKCk9PmQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9wc3RhdGUiLGEpfW9uSGFzaENoYW5nZShhKXtjb25zdCBkPVQ0KCkuZ2V0R2xvYmFsRXZlbnRU'@;
put 'YXJnZXQodGhpcy5fZG9jLCJ3aW5kb3ciKTtyZXR1cm4gZC5hZGRFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVyKCJoYXNoY2hhbmdlIixhKX1nZXQgaHJlZigpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ocmVmfWdldCBwcm90b2NvbCgp'@;
put 'e3JldHVybiB0aGlzLl9sb2NhdGlvbi5wcm90b2NvbH1nZXQgaG9zdG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaG9zdG5hbWV9Z2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucG9ydH1nZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24ucGF0aG5hbWV9Z2V0'@;
put 'IHNlYXJjaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5zZWFyY2h9Z2V0IGhhc2goKXtyZXR1cm4gdGhpcy5fbG9jYXRpb24uaGFzaH1zZXQgcGF0aG5hbWUoYSl7dGhpcy5fbG9jYXRpb24ucGF0aG5hbWU9YX1wdXNoU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucHVzaFN0YXRlKGEsZCxo'@;
put 'KX1yZXBsYWNlU3RhdGUoYSxkLGgpe3RoaXMuX2hpc3RvcnkucmVwbGFjZVN0YXRlKGEsZCxoKX1mb3J3YXJkKCl7dGhpcy5faGlzdG9yeS5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX2hpc3RvcnkuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2hpc3RvcnkuZ28oYSl9Z2V0U3RhdGUoKXty'@;
put 'ZXR1cm4gdGhpcy5faGlzdG9yeS5zdGF0ZX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTooKT0+bmV3IGMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9cmV0dXJu'@;
put 'IGN9KSgpO2Z1bmN0aW9uIENQKGMsbCl7aWYoMD09Yy5sZW5ndGgpcmV0dXJuIGw7aWYoMD09bC5sZW5ndGgpcmV0dXJuIGM7bGV0IGE9MDtyZXR1cm4gYy5lbmRzV2l0aCgiLyIpJiZhKyssbC5zdGFydHNXaXRoKCIvIikmJmErKywyPT1hP2MrbC5zdWJzdHJpbmcoMSk6MT09YT9jK2w6Yysi'@;
put 'LyIrbH1mdW5jdGlvbiBncShjKXtjb25zdCBsPWMubWF0Y2goLyN8XD98JC8pLGE9bCYmbC5pbmRleHx8Yy5sZW5ndGg7cmV0dXJuIGMuc2xpY2UoMCxhLSgiLyI9PT1jW2EtMV0/MTowKSkrYy5zbGljZShhKX1mdW5jdGlvbiBCMyhjKXtyZXR1cm4gYyYmIj8iIT09Y1swXT8iPyIrYzpjfWxl'@;
put 'dCBVNT0oKCk9PntjbGFzcyBje2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OigpPT5Wcih2cSkscHJv'@;
put 'dmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgX3E9bmV3IFlyKCIiKTtsZXQgdnE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFU1e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5f'@;
put 'YmFzZUhyZWY9ZD8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/VnIoJHMpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgp'@;
put 'KCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShhKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFy'@;
put 'ZUV4dGVybmFsVXJsKGEpe3JldHVybiBDUCh0aGlzLl9iYXNlSHJlZixhKX1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZStCMyh0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnNlYXJjaCksaD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJu'@;
put 'IGgmJmE/YCR7ZH0ke2h9YDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrQjMoZikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRlKGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRl'@;
put 'cm5hbFVybChoK0IzKGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9w'@;
put 'bGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKE1QKSxmcihfcSw4KSl9O3N0YXRpYyN0PXRoaXMu'@;
put 'XHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGVmZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVTV7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb249YSx0aGlzLl9iYXNl'@;
put 'SHJlZj0iIix0aGlzLl9yZW1vdmVMaXN0ZW5lckZucz1bXSxudWxsIT1kJiYodGhpcy5fYmFzZUhyZWY9ZCl9bmdPbkRlc3Ryb3koKXtmb3IoO3RoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLmxlbmd0aDspdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnMucG9wKCkoKX1vblBvcFN0YXRlKGEpe3RoaXMu'@;
put 'X3JlbW92ZUxpc3RlbmVyRm5zLnB1c2godGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5vblBvcFN0YXRlKGEpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25IYXNoQ2hhbmdlKGEpKX1nZXRCYXNlSHJlZigpe3JldHVybiB0aGlzLl9iYXNlSHJlZn1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhpcy5fcGxh'@;
put 'dGZvcm1Mb2NhdGlvbi5oYXNoPz8iIyI7cmV0dXJuIGQubGVuZ3RoPjA/ZC5zdWJzdHJpbmcoMSk6ZH1wcmVwYXJlRXh0ZXJuYWxVcmwoYSl7Y29uc3QgZD1DUCh0aGlzLl9iYXNlSHJlZixhKTtyZXR1cm4gZC5sZW5ndGg+MD8iIyIrZDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtsZXQgdj10aGlz'@;
put 'LnByZXBhcmVFeHRlcm5hbFVybChoK0IzKGYpKTswPT12Lmxlbmd0aCYmKHY9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wdXNoU3RhdGUoYSxkLHYpfXJlcGxhY2VTdGF0ZShhLGQsaCxmKXtsZXQgdj10aGlzLnByZXBhcmVFeHRlcm5h'@;
put 'bFVybChoK0IzKGYpKTswPT12Lmxlbmd0aCYmKHY9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSksdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5yZXBsYWNlU3RhdGUoYSxkLHYpfWZvcndhcmQoKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmZvcndhcmQoKX1iYWNrKCl7dGhpcy5fcGxh'@;
put 'dGZvcm1Mb2NhdGlvbi5iYWNrKCl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRTdGF0ZSgpfWhpc3RvcnlHbyhhPTApe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGlzdG9yeUdvPy4oYSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0'@;
put 'dXJuIG5ldyhkfHxjKShmcihNUCksZnIoX3EsOCkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxxMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3N1YmplY3Q9bmV3IElyLHRoaXMuX3Vy'@;
put 'bENoYW5nZUxpc3RlbmVycz1bXSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCx0aGlzLl9sb2NhdGlvblN0cmF0ZWd5PWE7Y29uc3QgZD10aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmdldEJhc2VIcmVmKCk7dGhpcy5fYmFzZVBhdGg9ZnVuY3Rpb24gcmZlKGMpe2lmKG5ldyBSZWdF'@;
put 'eHAoIl4oaHR0cHM/Oik/Ly8iKS50ZXN0KGMpKXtjb25zdFssYV09Yy5zcGxpdCgvXC9cL1teXC9dKy8pO3JldHVybiBhfXJldHVybiBjfShncSh5cShkKSkpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kub25Qb3BTdGF0ZShoPT57dGhpcy5fc3ViamVjdC5lbWl0KHt1cmw6dGhpcy5wYXRoKCEw'@;
put 'KSxwb3A6ITAsc3RhdGU6aC5zdGF0ZSx0eXBlOmgudHlwZX0pfSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdfXBhdGgoYT0hMSl7cmV0dXJuIHRoaXMubm9ybWFsaXplKHRoaXMuX2xv'@;
put 'Y2F0aW9uU3RyYXRlZ3kucGF0aChhKSl9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5fbG9jYXRpb25TdHJhdGVneS5nZXRTdGF0ZSgpfWlzQ3VycmVudFBhdGhFcXVhbFRvKGEsZD0iIil7cmV0dXJuIHRoaXMucGF0aCgpPT10aGlzLm5vcm1hbGl6ZShhK0IzKGQpKX1ub3JtYWxpemUoYSl7cmV0'@;
put 'dXJuIGMuc3RyaXBUcmFpbGluZ1NsYXNoKGZ1bmN0aW9uIG5mZShjLGwpe2lmKCFjfHwhbC5zdGFydHNXaXRoKGMpKXJldHVybiBsO2NvbnN0IGE9bC5zdWJzdHJpbmcoYy5sZW5ndGgpO3JldHVybiIiPT09YXx8WyIvIiwiOyIsIj8iLCIjIl0uaW5jbHVkZXMoYVswXSk/YTpsfSh0aGlzLl9i'@;
put 'YXNlUGF0aCx5cShhKSkpfXByZXBhcmVFeHRlcm5hbFVybChhKXtyZXR1cm4gYSYmIi8iIT09YVswXSYmKGE9Ii8iK2EpLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHJlcGFyZUV4dGVybmFsVXJsKGEpfWdvKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucHVzaFN0YXRl'@;
put 'KGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStCMyhkKSksaCl9cmVwbGFjZVN0YXRlKGEsZD0iIixoPW51bGwpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kucmVwbGFjZVN0YXRlKGgsIiIsYSxkKSx0aGlzLl9ub3RpZnlV'@;
put 'cmxDaGFuZ2VMaXN0ZW5lcnModGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoYStCMyhkKSksaCl9Zm9yd2FyZCgpe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZm9yd2FyZCgpfWJhY2soKXt0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LmJhY2soKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9sb2NhdGlvblN0'@;
put 'cmF0ZWd5Lmhpc3RvcnlHbz8uKGEpfW9uVXJsQ2hhbmdlKGEpe3JldHVybiB0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMucHVzaChhKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb24/Pz10aGlzLnN1YnNjcmliZShkPT57dGhpcy5fbm90aWZ5VXJsQ2hhbmdlTGlzdGVuZXJzKGQudXJsLGQu'@;
put 'c3RhdGUpfSksKCk9Pntjb25zdCBkPXRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5pbmRleE9mKGEpO3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5zcGxpY2UoZCwxKSwwPT09dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmxlbmd0aCYmKHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8udW5z'@;
put 'dWJzY3JpYmUoKSx0aGlzLl91cmxDaGFuZ2VTdWJzY3JpcHRpb249bnVsbCl9fV9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoYT0iIixkKXt0aGlzLl91cmxDaGFuZ2VMaXN0ZW5lcnMuZm9yRWFjaChoPT5oKGEsZCkpfXN1YnNjcmliZShhLGQsaCl7cmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vi'@;
put 'c2NyaWJlKHtuZXh0OmEsZXJyb3I6ZCxjb21wbGV0ZTpofSl9c3RhdGljI2U9dGhpcy5ub3JtYWxpemVRdWVyeVBhcmFtcz1CMztzdGF0aWMjdD10aGlzLmpvaW5XaXRoU2xhc2g9Q1A7c3RhdGljI249dGhpcy5zdHJpcFRyYWlsaW5nU2xhc2g9Z3E7c3RhdGljI3I9dGhpcy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihVNSkpfTtzdGF0aWMjaT10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTooKT0+ZnVuY3Rpb24gdGZlKCl7cmV0dXJuIG5ldyBxMShmcihVNSkpfSgpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0'@;
put 'aW9uIHlxKGMpe3JldHVybiBjLnJlcGxhY2UoL1wvaW5kZXguaHRtbCQvLCIiKX12YXIgYXU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Gb3JtYXQ9MF09IkZvcm1hdCIsY1tjLlN0YW5kYWxvbmU9MV09IlN0YW5kYWxvbmUiLGN9KGF1fHx7fSksZ2E9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5O'@;
put 'YXJyb3c9MF09Ik5hcnJvdyIsY1tjLkFiYnJldmlhdGVkPTFdPSJBYmJyZXZpYXRlZCIsY1tjLldpZGU9Ml09IldpZGUiLGNbYy5TaG9ydD0zXT0iU2hvcnQiLGN9KGdhfHx7fSksbDE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TaG9ydD0wXT0iU2hvcnQiLGNbYy5NZWRpdW09MV09Ik1lZGl1'@;
put 'bSIsY1tjLkxvbmc9Ml09IkxvbmciLGNbYy5GdWxsPTNdPSJGdWxsIixjfShsMXx8e30pO2Z1bmN0aW9uIFNQKGMsbCxhKXtjb25zdCBkPWUwKGMpLGY9emQoW2RbcmwuRGF5c0Zvcm1hdF0sZFtybC5EYXlzU3RhbmRhbG9uZV1dLGwpO3JldHVybiB6ZChmLGEpfWZ1bmN0aW9uIHhQKGMsbCxh'@;
put 'KXtjb25zdCBkPWUwKGMpLGY9emQoW2RbcmwuTW9udGhzRm9ybWF0XSxkW3JsLk1vbnRoc1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gemQoZixhKX1mdW5jdGlvbiB6ZChjLGwpe2ZvcihsZXQgYT1sO2E+LTE7YS0tKWlmKHR5cGVvZiBjW2FdPCJ1IilyZXR1cm4gY1thXTt0aHJvdyBuZXcgRXJy'@;
put 'b3IoIkxvY2FsZSBkYXRhIEFQSTogbG9jYWxlIGRhdGEgdW5kZWZpbmVkIil9ZnVuY3Rpb24gVHEoYyxsKXtsPWVuY29kZVVSSUNvbXBvbmVudChsKTtmb3IoY29uc3QgYSBvZiBjLnNwbGl0KCI7Iikpe2NvbnN0IGQ9YS5pbmRleE9mKCI9IiksW2gsZl09LTE9PWQ/W2EsIiJdOlthLnNsaWNl'@;
put 'KDAsZCksYS5zbGljZShkKzEpXTtpZihoLnRyaW0oKT09PWwpcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChmKX1yZXR1cm4gbnVsbH1jb25zdCBQUD0vXHMrLyxEcT1bXTtsZXQgVWM9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nRWw9YSx0aGlzLl9yZW5kZXJlcj1k'@;
put 'LHRoaXMuaW5pdGlhbENsYXNzZXM9RHEsdGhpcy5zdGF0ZU1hcD1uZXcgTWFwfXNldCBrbGFzcyhhKXt0aGlzLmluaXRpYWxDbGFzc2VzPW51bGwhPWE/YS50cmltKCkuc3BsaXQoUFApOkRxfXNldCBuZ0NsYXNzKGEpe3RoaXMucmF3Q2xhc3M9InN0cmluZyI9PXR5cGVvZiBhP2EudHJpbSgp'@;
put 'LnNwbGl0KFBQKTphfW5nRG9DaGVjaygpe2Zvcihjb25zdCBkIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpdGhpcy5fdXBkYXRlU3RhdGUoZCwhMCk7Y29uc3QgYT10aGlzLnJhd0NsYXNzO2lmKEFycmF5LmlzQXJyYXkoYSl8fGEgaW5zdGFuY2VvZiBTZXQpZm9yKGNvbnN0IGQgb2YgYSl0aGlz'@;
put 'Ll91cGRhdGVTdGF0ZShkLCEwKTtlbHNlIGlmKG51bGwhPWEpZm9yKGNvbnN0IGQgb2YgT2JqZWN0LmtleXMoYSkpdGhpcy5fdXBkYXRlU3RhdGUoZCwhIWFbZF0pO3RoaXMuX2FwcGx5U3RhdGVEaWZmKCl9X3VwZGF0ZVN0YXRlKGEsZCl7Y29uc3QgaD10aGlzLnN0YXRlTWFwLmdldChhKTt2'@;
put 'b2lkIDAhPT1oPyhoLmVuYWJsZWQhPT1kJiYoaC5jaGFuZ2VkPSEwLGguZW5hYmxlZD1kKSxoLnRvdWNoZWQ9ITApOnRoaXMuc3RhdGVNYXAuc2V0KGEse2VuYWJsZWQ6ZCxjaGFuZ2VkOiEwLHRvdWNoZWQ6ITB9KX1fYXBwbHlTdGF0ZURpZmYoKXtmb3IoY29uc3QgYSBvZiB0aGlzLnN0YXRl'@;
put 'TWFwKXtjb25zdCBkPWFbMF0saD1hWzFdO2guY2hhbmdlZD8odGhpcy5fdG9nZ2xlQ2xhc3MoZCxoLmVuYWJsZWQpLGguY2hhbmdlZD0hMSk6aC50b3VjaGVkfHwoaC5lbmFibGVkJiZ0aGlzLl90b2dnbGVDbGFzcyhkLCExKSx0aGlzLnN0YXRlTWFwLmRlbGV0ZShkKSksaC50b3VjaGVkPSEx'@;
put 'fX1fdG9nZ2xlQ2xhc3MoYSxkKXsoYT1hLnRyaW0oKSkubGVuZ3RoPjAmJmEuc3BsaXQoUFApLmZvckVhY2goaD0+e2Q/dGhpcy5fcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpOnRoaXMuX3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuX25nRWwubmF0aXZl'@;
put 'RWxlbWVudCxoKX0pfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoJGkpLHN0KGNzKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nQ2xhc3MiLCIiXV0saW5wdXRzOntrbGFzczpbUW4u'@;
put 'Tm9uZSwiY2xhc3MiLCJrbGFzcyJdLG5nQ2xhc3M6Im5nQ2xhc3MifSxzdGFuZGFsb25lOiEwfSl9cmV0dXJuIGN9KSgpO2NsYXNzIFlmZXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLiRpbXBsaWNpdD1sLHRoaXMubmdGb3JPZj1hLHRoaXMuaW5kZXg9ZCx0aGlzLmNvdW50PWh9Z2V0IGZp'@;
put 'cnN0KCl7cmV0dXJuIDA9PT10aGlzLmluZGV4fWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuaW5kZXg9PT10aGlzLmNvdW50LTF9Z2V0IGV2ZW4oKXtyZXR1cm4gdGhpcy5pbmRleCUyPT0wfWdldCBvZGQoKXtyZXR1cm4hdGhpcy5ldmVufX1sZXQgTHM9KCgpPT57Y2xhc3MgY3tzZXQgbmdGb3JP'@;
put 'ZihhKXt0aGlzLl9uZ0Zvck9mPWEsdGhpcy5fbmdGb3JPZkRpcnR5PSEwfXNldCBuZ0ZvclRyYWNrQnkoYSl7dGhpcy5fdHJhY2tCeUZuPWF9Z2V0IG5nRm9yVHJhY2tCeSgpe3JldHVybiB0aGlzLl90cmFja0J5Rm59Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3ZpZXdDb250YWluZXI9YSx0'@;
put 'aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl9uZ0Zvck9mPW51bGwsdGhpcy5fbmdGb3JPZkRpcnR5PSEwLHRoaXMuX2RpZmZlcj1udWxsfXNldCBuZ0ZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl90ZW1wbGF0ZT1hKX1uZ0RvQ2hlY2soKXtpZih0aGlzLl9uZ0Zvck9mRGly'@;
put 'dHkpe3RoaXMuX25nRm9yT2ZEaXJ0eT0hMTtjb25zdCBhPXRoaXMuX25nRm9yT2Y7IXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKHRoaXMubmdGb3JUcmFja0J5KSl9aWYodGhpcy5fZGlmZmVyKXtjb25zdCBhPXRoaXMuX2RpZmZl'@;
put 'ci5kaWZmKHRoaXMuX25nRm9yT2YpO2EmJnRoaXMuX2FwcGx5Q2hhbmdlcyhhKX19X2FwcGx5Q2hhbmdlcyhhKXtjb25zdCBkPXRoaXMuX3ZpZXdDb250YWluZXI7YS5mb3JFYWNoT3BlcmF0aW9uKChoLGYsdik9PntpZihudWxsPT1oLnByZXZpb3VzSW5kZXgpZC5jcmVhdGVFbWJlZGRlZFZp'@;
put 'ZXcodGhpcy5fdGVtcGxhdGUsbmV3IFlmZShoLml0ZW0sdGhpcy5fbmdGb3JPZiwtMSwtMSksbnVsbD09PXY/dm9pZCAwOnYpO2Vsc2UgaWYobnVsbD09dilkLnJlbW92ZShudWxsPT09Zj92b2lkIDA6Zik7ZWxzZSBpZihudWxsIT09Zil7Y29uc3QgVD1kLmdldChmKTtkLm1vdmUoVCx2KSxM'@;
put 'cShULGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgVD1kLmdldChoKS5jb250ZXh0O1QuaW5kZXg9aCxULmNvdW50PWYsVC5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5mb3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e0xxKGQuZ2V0KGguY3VycmVudEluZGV4KSxo'@;
put 'KX0pfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChwcyksc3QodGwpLHN0KHh5KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRlbXBsYXRlOiJuZ0ZvclRlbXBsYXRlIn0sc3RhbmRhbG9uZTohMH0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBMcShjLGwp'@;
put 'e2MuY29udGV4dC4kaW1wbGljaXQ9bC5pdGVtfWxldCBxaT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMuX2NvbnRleHQ9bmV3IHpmZSx0aGlzLl90aGVuVGVtcGxhdGVSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWY9bnVsbCx0'@;
put 'aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmPWR9c2V0IG5nSWYoYSl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ9dGhpcy5fY29udGV4dC5uZ0lmPWEsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmVGhlbihhKXtJcSgi'@;
put 'bmdJZlRoZW4iLGEpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1hLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShhKXtJcSgibmdJZkVsc2UiLGEpLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1hLHRoaXMuX2Vsc2VWaWV3UmVmPW51bGwsdGhpcy5f'@;
put 'dXBkYXRlVmlldygpfV91cGRhdGVWaWV3KCl7dGhpcy5fY29udGV4dC4kaW1wbGljaXQ/dGhpcy5fdGhlblZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFpbmVyLmNsZWFyKCksdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWYmJih0aGlzLl90aGVuVmlld1JlZj10'@;
put 'aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90aGVuVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKTp0aGlzLl9lbHNlVmlld1JlZnx8KHRoaXMuX3ZpZXdDb250YWluZXIuY2xlYXIoKSx0aGlzLl90aGVuVmlld1JlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0'@;
put 'ZVJlZiYmKHRoaXMuX2Vsc2VWaWV3UmVmPXRoaXMuX3ZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZix0aGlzLl9jb250ZXh0KSkpfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9c3RhdGljI2U9dGhpcy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChwcyksc3QodGwpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5n'@;
put 'SWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pfXJldHVybiBjfSkoKTtjbGFzcyB6ZmV7Y29uc3RydWN0b3IoKXt0aGlzLiRpbXBsaWNpdD1udWxsLHRoaXMubmdJZj1udWxsfX1mdW5jdGlvbiBJcShjLGwpe2lmKGwmJiFsLmNyZWF0ZUVtYmVkZGVkVmlldyl0aHJvdyBuZXcgRXJyb3IoYCR7Y30g'@;
put 'bXVzdCBiZSBhIFRlbXBsYXRlUmVmLCBidXQgcmVjZWl2ZWQgJyR7ZHIobCl9Jy5gKX1jbGFzcyBGUHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9bCx0aGlzLl90ZW1wbGF0ZVJlZj1hLHRoaXMuX2NyZWF0ZWQ9ITF9Y3JlYXRlKCl7dGhpcy5fY3JlYXRlZD0hMCx0'@;
put 'aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZVJlZil9ZGVzdHJveSgpe3RoaXMuX2NyZWF0ZWQ9ITEsdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpfWVuZm9yY2VTdGF0ZShsKXtsJiYhdGhpcy5fY3JlYXRlZD90aGlzLmNyZWF0ZSgp'@;
put 'OiFsJiZ0aGlzLl9jcmVhdGVkJiZ0aGlzLmRlc3Ryb3koKX19bGV0IFVkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0Vmlld3M9W10sdGhpcy5fZGVmYXVsdFVzZWQ9ITEsdGhpcy5fY2FzZUNvdW50PTAsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5f'@;
put 'bGFzdENhc2VzTWF0Y2hlZD0hMX1zZXQgbmdTd2l0Y2goYSl7dGhpcy5fbmdTd2l0Y2g9YSwwPT09dGhpcy5fY2FzZUNvdW50JiZ0aGlzLl91cGRhdGVEZWZhdWx0Q2FzZXMoITApfV9hZGRDYXNlKCl7cmV0dXJuIHRoaXMuX2Nhc2VDb3VudCsrfV9hZGREZWZhdWx0KGEpe3RoaXMuX2RlZmF1'@;
put 'bHRWaWV3cy5wdXNoKGEpfV9tYXRjaENhc2UoYSl7Y29uc3QgZD1hPT09dGhpcy5fbmdTd2l0Y2g7cmV0dXJuIHRoaXMuX2xhc3RDYXNlc01hdGNoZWR8fD1kLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleCsrLHRoaXMuX2xhc3RDYXNlQ2hlY2tJbmRleD09PXRoaXMuX2Nhc2VDb3VudCYmKHRo'@;
put 'aXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghdGhpcy5fbGFzdENhc2VzTWF0Y2hlZCksdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PTAsdGhpcy5fbGFzdENhc2VzTWF0Y2hlZD0hMSksZH1fdXBkYXRlRGVmYXVsdENhc2VzKGEpe2lmKHRoaXMuX2RlZmF1bHRWaWV3cy5sZW5ndGg+MCYmYSE9PXRo'@;
put 'aXMuX2RlZmF1bHRVc2VkKXt0aGlzLl9kZWZhdWx0VXNlZD1hO2Zvcihjb25zdCBkIG9mIHRoaXMuX2RlZmF1bHRWaWV3cylkLmVuZm9yY2VTdGF0ZShhKX19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVk'@;
put 'aXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2giLCIiXV0saW5wdXRzOntuZ1N3aXRjaDoibmdTd2l0Y2gifSxzdGFuZGFsb25lOiEwfSl9cmV0dXJuIGN9KSgpLGNmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMubmdTd2l0Y2g9aCxoLl9hZGRDYXNl'@;
put 'KCksdGhpcy5fdmlldz1uZXcgRlAoYSxkKX1uZ0RvQ2hlY2soKXt0aGlzLl92aWV3LmVuZm9yY2VTdGF0ZSh0aGlzLm5nU3dpdGNoLl9tYXRjaENhc2UodGhpcy5uZ1N3aXRjaENhc2UpKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHBz'@;
put 'KSxzdCh0bCksc3QoVWQsOSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ1N3aXRjaENhc2UiLCIiXV0saW5wdXRzOntuZ1N3aXRjaENhc2U6Im5nU3dpdGNoQ2FzZSJ9LHN0YW5kYWxvbmU6ITB9KX1yZXR1cm4gY30pKCksT3E9KCgpPT57'@;
put 'Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdFbD1hLHRoaXMuX2RpZmZlcnM9ZCx0aGlzLl9yZW5kZXJlcj1oLHRoaXMuX25nU3R5bGU9bnVsbCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdTdHlsZShhKXt0aGlzLl9uZ1N0eWxlPWEsIXRoaXMuX2RpZmZlciYmYSYmKHRoaXMu'@;
put 'X2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTthJiZ0aGlzLl9hcHBseUNoYW5nZXMoYSl9fV9zZXRTdHlsZShhLGQpe2NvbnN0W2gsZl09YS5z'@;
put 'cGxpdCgiLiIpLHY9LTE9PT1oLmluZGV4T2YoIi0iKT92b2lkIDA6RzIuRGFzaENhc2U7bnVsbCE9ZD90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCxmP2Ake2R9JHtmfWA6ZCx2KTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0Vs'@;
put 'Lm5hdGl2ZUVsZW1lbnQsaCx2KX1fYXBwbHlDaGFuZ2VzKGEpe2EuZm9yRWFjaFJlbW92ZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LG51bGwpKSxhLmZvckVhY2hBZGRlZEl0ZW0oZD0+dGhpcy5fc2V0U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKSxhLmZvckVhY2hDaGFuZ2Vk'@;
put 'SXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoJGkpLHN0KGt5KSxzdChjcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9y'@;
put 'czpbWyIiLCJuZ1N0eWxlIiwiIl1dLGlucHV0czp7bmdTdHlsZToibmdTdHlsZSJ9LHN0YW5kYWxvbmU6ITB9KX1yZXR1cm4gY30pKCksSzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl92aWV3Q29udGFpbmVyUmVmPWEsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1w'@;
put 'bGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj1udWxsfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX3Nob3VsZFJlY3JlYXRlVmlldyhhKSl7Y29uc3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lm'@;
put 'KHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksIXRoaXMubmdUZW1wbGF0ZU91dGxldClyZXR1cm4gdm9pZCh0aGlzLl92aWV3UmVmPW51bGwpO2NvbnN0IGg9dGhpcy5fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpO3RoaXMuX3ZpZXdSZWY9ZC5j'@;
put 'cmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LGgse2luamVjdG9yOnRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPz92b2lkIDB9KX19X3Nob3VsZFJlY3JlYXRlVmlldyhhKXtyZXR1cm4hIWEubmdUZW1wbGF0ZU91dGxldHx8ISFhLm5nVGVtcGxhdGVPdXRsZXRJ'@;
put 'bmplY3Rvcn1fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpe3JldHVybiBuZXcgUHJveHkoe30se3NldDooYSxkLGgpPT4hIXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJlJlZmxlY3Quc2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKSxnZXQ6KGEsZCxoKT0+e2lm'@;
put 'KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKX19KX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHBzKSl9O3N0YXRpYyN0PXRoaXMuXHUw'@;
put 'Mjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nVGVtcGxhdGVPdXRsZXQiLCIiXV0saW5wdXRzOntuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dDoibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLG5nVGVtcGxhdGVPdXRsZXQ6Im5nVGVtcGxhdGVPdXRsZXQiLG5nVGVtcGxhdGVPdXRs'@;
put 'ZXRJbmplY3RvcjoibmdUZW1wbGF0ZU91dGxldEluamVjdG9yIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbQmFdfSl9cmV0dXJuIGN9KSgpO2NsYXNzIEdmZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gZnEoKCk9Pmwuc3Vic2NyaWJlKHtuZXh0OmEsZXJyb3I6ZD0+e3Rocm93'@;
put 'IGR9fSkpfWRpc3Bvc2UobCl7ZnEoKCk9PmwudW5zdWJzY3JpYmUoKSl9fWNsYXNzICRmZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gbC50aGVuKGEsZD0+e3Rocm93IGR9KX1kaXNwb3NlKGwpe319Y29uc3QgcWZlPW5ldyAkZmUsS2ZlPW5ldyBHZmU7bGV0IGZrPSgoKT0+e2Ns'@;
put 'YXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fbGF0ZXN0VmFsdWU9bnVsbCx0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITAsdGhpcy5fc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5fb2JqPW51bGwsdGhpcy5fc3RyYXRlZ3k9bnVsbCx0aGlzLl9yZWY9YX1uZ09uRGVzdHJveSgpe3Ro'@;
put 'aXMuX3N1YnNjcmlwdGlvbiYmdGhpcy5fZGlzcG9zZSgpLHRoaXMuX3JlZj1udWxsfXRyYW5zZm9ybShhKXtpZighdGhpcy5fb2JqKXtpZihhKXRyeXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITEsdGhpcy5fc3Vic2NyaWJlKGEpfWZpbmFsbHl7dGhpcy5tYXJrRm9yQ2hlY2tP'@;
put 'blZhbHVlVXBkYXRlPSEwfXJldHVybiB0aGlzLl9sYXRlc3RWYWx1ZX1yZXR1cm4gYSE9PXRoaXMuX29iaj8odGhpcy5fZGlzcG9zZSgpLHRoaXMudHJhbnNmb3JtKGEpKTp0aGlzLl9sYXRlc3RWYWx1ZX1fc3Vic2NyaWJlKGEpe3RoaXMuX29iaj1hLHRoaXMuX3N0cmF0ZWd5PXRoaXMuX3Nl'@;
put 'bGVjdFN0cmF0ZWd5KGEpLHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLl9zdHJhdGVneS5jcmVhdGVTdWJzY3JpcHRpb24oYSxkPT50aGlzLl91cGRhdGVMYXRlc3RWYWx1ZShhLGQpKX1fc2VsZWN0U3RyYXRlZ3koYSl7aWYoU3koYSkpcmV0dXJuIHFmZTtpZihDJChhKSlyZXR1cm4gS2ZlO3Ro'@;
put 'cm93IGZ1bmN0aW9uICRoKGMsbCl7cmV0dXJuIG5ldyB6bigyMTAwLCExKX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91'@;
put 'cGRhdGVMYXRlc3RWYWx1ZShhLGQpe2E9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1kLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZSYmdGhpcy5fcmVmPy5tYXJrRm9yQ2hlY2soKSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk'@;
put 'fHxjKShzdChGYSwxNikpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXBpcGU9RHMoe25hbWU6ImFzeW5jIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9cmV0dXJuIGN9KSgpLFBxPSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9'@;
put 'c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwaXBlPURzKHtuYW1lOiJqc29uIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9cmV0dXJuIGN9KSgpLHBrPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0'@;
put 'b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49RnF9dHJhbnNmb3JtKGEsZD1GcSl7aWYoIWF8fCEoYSBpbnN0YW5jZW9mIE1hcCkmJiJvYmplY3QiIT10eXBlb2YgYSlyZXR1cm4gbnVsbDt0aGlzLmRpZmZlcj8/PXRoaXMuZGlmZmVycy5maW5k'@;
put 'KGEpLmNyZWF0ZSgpO2NvbnN0IGg9dGhpcy5kaWZmZXIuZGlmZihhKSxmPWQhPT10aGlzLmNvbXBhcmVGbjtyZXR1cm4gaCYmKHRoaXMua2V5VmFsdWVzPVtdLGguZm9yRWFjaEl0ZW0odj0+e3RoaXMua2V5VmFsdWVzLnB1c2goZnVuY3Rpb24gbDNlKGMsbCl7cmV0dXJue2tleTpjLHZhbHVl'@;
put 'Omx9fSh2LmtleSx2LmN1cnJlbnRWYWx1ZSkpfSkpLChofHxmKSYmKHRoaXMua2V5VmFsdWVzLnNvcnQoZCksdGhpcy5jb21wYXJlRm49ZCksdGhpcy5rZXlWYWx1ZXN9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChreSwxNikpfTtzdGF0'@;
put 'aWMjdD10aGlzLlx1MDI3NXBpcGU9RHMoe25hbWU6ImtleXZhbHVlIix0eXBlOmMscHVyZTohMSxzdGFuZGFsb25lOiEwfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEZxKGMsbCl7Y29uc3QgYT1jLmtleSxkPWwua2V5O2lmKGE9PT1kKXJldHVybiAwO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE7'@;
put 'aWYodm9pZCAwPT09ZClyZXR1cm4tMTtpZihudWxsPT09YSlyZXR1cm4gMTtpZihudWxsPT09ZClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGEmJiJzdHJpbmciPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7aWYoIm51bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQp'@;
put 'cmV0dXJuIGEtZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtjb25zdCBoPVN0cmluZyhhKSxmPVN0cmluZyhkKTtyZXR1cm4gaD09Zj8wOmg8Zj8tMToxfWxldCBtbz0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7fSl9cmV0dXJuIGN9KSgpO2NvbnN0IEhxPSJicm93c2VyIjtmdW5jdGlvbiBsYShjKXtyZXR1cm4gYz09PUhxfWZ1'@;
put 'bmN0aW9uIE5xKGMpe3JldHVybiJzZXJ2ZXIiPT09Y31sZXQgbTNlPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLHByb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmxhKFZyKEFvKSk/bmV3IGczZShWcigkcyksd2luZG93KTpuZXcgdjNlfSl9'@;
put 'cmV0dXJuIGN9KSgpO2NsYXNzIGczZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0'@;
put 'dXJuW3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV19c2Nyb2xsVG9Qb3NpdGlvbihsKXt0aGlzLndpbmRvdy5zY3JvbGxUbyhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2NvbnN0IGE9ZnVuY3Rpb24gXzNlKGMsbCl7Y29uc3QgYT1jLmdldEVsZW1lbnRCeUlk'@;
put 'KGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNyZWF0ZVRyZWVXYWxrZXIoYy5i'@;
put 'b2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2RlO2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IHY9Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7aWYodilyZXR1cm4gdn1oPWQu'@;
put 'bmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe3RoaXMud2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRpb249bH1zY3JvbGxUb0VsZW1l'@;
put 'bnQobCl7Y29uc3QgYT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9YS5sZWZ0K3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LGg9YS50b3ArdGhpcy53aW5kb3cucGFnZVlPZmZzZXQsZj10aGlzLm9mZnNldCgpO3RoaXMud2luZG93LnNjcm9sbFRvKGQtZlswXSxoLWZbMV0pfX1jbGFzcyB2'@;
put 'M2V7c2V0T2Zmc2V0KGwpe31nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7fXNjcm9sbFRvQW5jaG9yKGwpe31zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24obCl7fX1jbGFzcyBWcXt9Y2xhc3MgVzNlIGV4dGVuZHMgWDJle2NvbnN0cnVjdG9y'@;
put 'KCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnN1cHBvcnRzRE9NRXZlbnRzPSEwfX1jbGFzcyBqUCBleHRlbmRzIFczZXtzdGF0aWMgbWFrZUN1cnJlbnQoKXshZnVuY3Rpb24gSzJlKGMpe21xPz89Y30obmV3IGpQKX1vbkFuZENhbmNlbChsLGEsZCl7cmV0dXJuIGwuYWRkRXZlbnRMaXN0'@;
put 'ZW5lcihhLGQpLCgpPT57bC5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCl9fWRpc3BhdGNoRXZlbnQobCxhKXtsLmRpc3BhdGNoRXZlbnQoYSl9cmVtb3ZlKGwpe2wucGFyZW50Tm9kZSYmbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGwpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4oYT1hfHx0'@;
put 'aGlzLmdldERlZmF1bHREb2N1bWVudCgpKS5jcmVhdGVFbGVtZW50KGwpfWNyZWF0ZUh0bWxEb2N1bWVudCgpe3JldHVybiBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoImZha2VUaXRsZSIpfWdldERlZmF1bHREb2N1bWVudCgpe3JldHVybiBkb2N1bWVudH1p'@;
put 'c0VsZW1lbnROb2RlKGwpe3JldHVybiBsLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREV9aXNTaGFkb3dSb290KGwpe3JldHVybiBsIGluc3RhbmNlb2YgRG9jdW1lbnRGcmFnbWVudH1nZXRHbG9iYWxFdmVudFRhcmdldChsLGEpe3JldHVybiJ3aW5kb3ciPT09YT93aW5kb3c6ImRvY3Vt'@;
put 'ZW50Ij09PWE/bDoiYm9keSI9PT1hP2wuYm9keTpudWxsfWdldEJhc2VIcmVmKGwpe2NvbnN0IGE9ZnVuY3Rpb24gRzNlKCl7cmV0dXJuIFJ5PVJ5fHxkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJiYXNlIiksUnk/UnkuZ2V0QXR0cmlidXRlKCJocmVmIik6bnVsbH0oKTtyZXR1cm4gbnVsbD09'@;
put 'YT9udWxsOmZ1bmN0aW9uICQzZShjKXtyZXR1cm4gbmV3IFVSTChjLGRvY3VtZW50LmJhc2VVUkkpLnBhdGhuYW1lfShhKX1yZXNldEJhc2VFbGVtZW50KCl7Unk9bnVsbH1nZXRVc2VyQWdlbnQoKXtyZXR1cm4gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnR9Z2V0Q29va2llKGwpe3JldHVy'@;
put 'biBUcShkb2N1bWVudC5jb29raWUsbCl9fWxldCBSeT1udWxsLEszZT0oKCk9PntjbGFzcyBje2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXBy'@;
put 'b3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCBCUD1uZXcgWXIoIiIpO2xldCAkcT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fem9uZT1kLHRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luPW5ldyBNYXAsYS5mb3JFYWNoKGg9'@;
put 'PntoLm1hbmFnZXI9dGhpc30pLHRoaXMuX3BsdWdpbnM9YS5zbGljZSgpLnJldmVyc2UoKX1hZGRFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gdGhpcy5fZmluZFBsdWdpbkZvcihkKS5hZGRFdmVudExpc3RlbmVyKGEsZCxoKX1nZXRab25lKCl7cmV0dXJuIHRoaXMuX3pvbmV9X2ZpbmRQ'@;
put 'bHVnaW5Gb3IoYSl7bGV0IGQ9dGhpcy5fZXZlbnROYW1lVG9QbHVnaW4uZ2V0KGEpO2lmKGQpcmV0dXJuIGQ7aWYoZD10aGlzLl9wbHVnaW5zLmZpbmQoZj0+Zi5zdXBwb3J0cyhhKSksIWQpdGhyb3cgbmV3IHpuKDUxMDEsITEpO3JldHVybiB0aGlzLl9ldmVudE5hbWVUb1BsdWdpbi5zZXQo'@;
put 'YSxkKSxkfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoQlApLGZyKFBvKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NsYXNzIHFxe2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMuX2RvYz1sfX1jb25zdCBZUD0ibmctYXBwLWlkIjtsZXQgS3E9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmPXt9KXt0aGlzLmRvYz1hLHRoaXMuYXBwSWQ9ZCx0aGlzLm5vbmNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5zdHlsZVJlZj1uZXcgTWFwLHRo'@;
put 'aXMuaG9zdE5vZGVzPW5ldyBTZXQsdGhpcy5zdHlsZU5vZGVzSW5ET009dGhpcy5jb2xsZWN0U2VydmVyUmVuZGVyZWRTdHlsZXMoKSx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9TnEoZiksdGhpcy5yZXNldEhvc3ROb2RlcygpfWFkZFN0eWxlcyhhKXtmb3IoY29uc3QgZCBvZiBhKTE9PT10aGlz'@;
put 'LmNoYW5nZVVzYWdlQ291bnQoZCwxKSYmdGhpcy5vblN0eWxlQWRkZWQoZCl9cmVtb3ZlU3R5bGVzKGEpe2Zvcihjb25zdCBkIG9mIGEpdGhpcy5jaGFuZ2VVc2FnZUNvdW50KGQsLTEpPD0wJiZ0aGlzLm9uU3R5bGVSZW1vdmVkKGQpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnN0eWxl'@;
put 'Tm9kZXNJbkRPTTthJiYoYS5mb3JFYWNoKGQ9PmQucmVtb3ZlKCkpLGEuY2xlYXIoKSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLm9uU3R5bGVSZW1vdmVkKGQpO3RoaXMucmVzZXRIb3N0Tm9kZXMoKX1hZGRIb3N0KGEpe3RoaXMuaG9zdE5vZGVzLmFkZChhKTtm'@;
put 'b3IoY29uc3QgZCBvZiB0aGlzLmdldEFsbFN0eWxlcygpKXRoaXMuYWRkU3R5bGVUb0hvc3QoYSxkKX1yZW1vdmVIb3N0KGEpe3RoaXMuaG9zdE5vZGVzLmRlbGV0ZShhKX1nZXRBbGxTdHlsZXMoKXtyZXR1cm4gdGhpcy5zdHlsZVJlZi5rZXlzKCl9b25TdHlsZUFkZGVkKGEpe2Zvcihjb25z'@;
put 'dCBkIG9mIHRoaXMuaG9zdE5vZGVzKXRoaXMuYWRkU3R5bGVUb0hvc3QoZCxhKX1vblN0eWxlUmVtb3ZlZChhKXtjb25zdCBkPXRoaXMuc3R5bGVSZWY7ZC5nZXQoYSk/LmVsZW1lbnRzPy5mb3JFYWNoKGg9PmgucmVtb3ZlKCkpLGQuZGVsZXRlKGEpfWNvbGxlY3RTZXJ2ZXJSZW5kZXJlZFN0'@;
put 'eWxlcygpe2NvbnN0IGE9dGhpcy5kb2MuaGVhZD8ucXVlcnlTZWxlY3RvckFsbChgc3R5bGVbJHtZUH09IiR7dGhpcy5hcHBJZH0iXWApO2lmKGE/Lmxlbmd0aCl7Y29uc3QgZD1uZXcgTWFwO3JldHVybiBhLmZvckVhY2goaD0+e251bGwhPWgudGV4dENvbnRlbnQmJmQuc2V0KGgudGV4dENv'@;
put 'bnRlbnQsaCl9KSxkfXJldHVybiBudWxsfWNoYW5nZVVzYWdlQ291bnQoYSxkKXtjb25zdCBoPXRoaXMuc3R5bGVSZWY7aWYoaC5oYXMoYSkpe2NvbnN0IGY9aC5nZXQoYSk7cmV0dXJuIGYudXNhZ2UrPWQsZi51c2FnZX1yZXR1cm4gaC5zZXQoYSx7dXNhZ2U6ZCxlbGVtZW50czpbXX0pLGR9'@;
put 'Z2V0U3R5bGVFbGVtZW50KGEsZCl7Y29uc3QgaD10aGlzLnN0eWxlTm9kZXNJbkRPTSxmPWg/LmdldChkKTtpZihmPy5wYXJlbnROb2RlPT09YSlyZXR1cm4gaC5kZWxldGUoZCksZi5yZW1vdmVBdHRyaWJ1dGUoWVApLGY7e2NvbnN0IHY9dGhpcy5kb2MuY3JlYXRlRWxlbWVudCgic3R5bGUi'@;
put 'KTtyZXR1cm4gdGhpcy5ub25jZSYmdi5zZXRBdHRyaWJ1dGUoIm5vbmNlIix0aGlzLm5vbmNlKSx2LnRleHRDb250ZW50PWQsdGhpcy5wbGF0Zm9ybUlzU2VydmVyJiZ2LnNldEF0dHJpYnV0ZShZUCx0aGlzLmFwcElkKSxhLmFwcGVuZENoaWxkKHYpLHZ9fWFkZFN0eWxlVG9Ib3N0KGEsZCl7'@;
put 'Y29uc3QgaD10aGlzLmdldFN0eWxlRWxlbWVudChhLGQpLGY9dGhpcy5zdHlsZVJlZix2PWYuZ2V0KGQpPy5lbGVtZW50czt2P3YucHVzaChoKTpmLnNldChkLHtlbGVtZW50czpbaF0sdXNhZ2U6MX0pfXJlc2V0SG9zdE5vZGVzKCl7Y29uc3QgYT10aGlzLmhvc3ROb2RlczthLmNsZWFyKCks'@;
put 'YS5hZGQodGhpcy5kb2MuaGVhZCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcigkcyksZnIoWjYpLGZyKGk0LDgpLGZyKEFvKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9'@;
put 'cmV0dXJuIGN9KSgpO2NvbnN0IHpQPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFt'@;
put 'ZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8iLG1hdGg6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aE1MLyJ9LFVQPS8lQ09NUCUvZyxlcGU9bmV3IFlyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4hMH0pO2Z1bmN0aW9uIEpxKGMsbCl7'@;
put 'cmV0dXJuIGwubWFwKGE9PmEucmVwbGFjZShVUCxjKSl9bGV0IFpQPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQsWSxyZT1udWxsKXt0aGlzLmV2ZW50TWFuYWdlcj1hLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1kLHRoaXMuYXBwSWQ9aCx0aGlzLnJlbW92ZVN0eWxlc09u'@;
put 'Q29tcERlc3Ryb3k9Zix0aGlzLmRvYz12LHRoaXMucGxhdGZvcm1JZD1ULHRoaXMubmdab25lPVksdGhpcy5ub25jZT1yZSx0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9TnEoVCksdGhpcy5kZWZhdWx0UmVuZGVyZXI9bmV3IFdQKGEsdixZLHRo'@;
put 'aXMucGxhdGZvcm1Jc1NlcnZlcil9Y3JlYXRlUmVuZGVyZXIoYSxkKXtpZighYXx8IWQpcmV0dXJuIHRoaXMuZGVmYXVsdFJlbmRlcmVyO3RoaXMucGxhdGZvcm1Jc1NlcnZlciYmZC5lbmNhcHN1bGF0aW9uPT09R3MuU2hhZG93RG9tJiYoZD17Li4uZCxlbmNhcHN1bGF0aW9uOkdzLkVtdWxh'@;
put 'dGVkfSk7Y29uc3QgaD10aGlzLmdldE9yQ3JlYXRlUmVuZGVyZXIoYSxkKTtyZXR1cm4gaCBpbnN0YW5jZW9mIGVLP2guYXBwbHlUb0hvc3QoYSk6aCBpbnN0YW5jZW9mIEdQJiZoLmFwcGx5U3R5bGVzKCksaH1nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCl7Y29uc3QgaD10aGlzLnJlbmRlcmVy'@;
put 'QnlDb21wSWQ7bGV0IGY9aC5nZXQoZC5pZCk7aWYoIWYpe2NvbnN0IHY9dGhpcy5kb2MsVD10aGlzLm5nWm9uZSxZPXRoaXMuZXZlbnRNYW5hZ2VyLHJlPXRoaXMuc2hhcmVkU3R5bGVzSG9zdCxmZT10aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3ksX2U9dGhpcy5wbGF0Zm9ybUlzU2Vy'@;
put 'dmVyO3N3aXRjaChkLmVuY2Fwc3VsYXRpb24pe2Nhc2UgR3MuRW11bGF0ZWQ6Zj1uZXcgZUsoWSxyZSxkLHRoaXMuYXBwSWQsZmUsdixULF9lKTticmVhaztjYXNlIEdzLlNoYWRvd0RvbTpyZXR1cm4gbmV3IGlwZShZLHJlLGEsZCx2LFQsdGhpcy5ub25jZSxfZSk7ZGVmYXVsdDpmPW5ldyBH'@;
put 'UChZLHJlLGQsZmUsdixULF9lKX1oLnNldChkLmlkLGYpfXJldHVybiBmfW5nT25EZXN0cm95KCl7dGhpcy5yZW5kZXJlckJ5Q29tcElkLmNsZWFyKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcigkcSksZnIoS3EpLGZyKFo2KSxmcihl'@;
put 'cGUpLGZyKCRzKSxmcihBbyksZnIoUG8pLGZyKGk0KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NsYXNzIFdQe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuZXZlbnRNYW5hZ2VyPWwsdGhpcy5kb2M9'@;
put 'YSx0aGlzLm5nWm9uZT1kLHRoaXMucGxhdGZvcm1Jc1NlcnZlcj1oLHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMudGhyb3dPblN5bnRoZXRpY1Byb3BzPSEwLHRoaXMuZGVzdHJveU5vZGU9bnVsbH1kZXN0cm95KCl7fWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gYT90aGlz'@;
put 'LmRvYy5jcmVhdGVFbGVtZW50TlMoelBbYV18fGEsbCk6dGhpcy5kb2MuY3JlYXRlRWxlbWVudChsKX1jcmVhdGVDb21tZW50KGwpe3JldHVybiB0aGlzLmRvYy5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZG9jLmNyZWF0ZVRleHROb2RlKGwpfWFwcGVuZENo'@;
put 'aWxkKGwsYSl7KFFxKGwpP2wuY29udGVudDpsKS5hcHBlbmRDaGlsZChhKX1pbnNlcnRCZWZvcmUobCxhLGQpe2wmJihRcShsKT9sLmNvbnRlbnQ6bCkuaW5zZXJ0QmVmb3JlKGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtsJiZsLnJlbW92ZUNoaWxkKGEpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7'@;
put 'bGV0IGQ9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IobCk6bDtpZighZCl0aHJvdyBuZXcgem4oLTUxMDQsITEpO3JldHVybiBhfHwoZC50ZXh0Q29udGVudD0iIiksZH1wYXJlbnROb2RlKGwpe3JldHVybiBsLnBhcmVudE5vZGV9bmV4dFNpYmxpbmcobCl7cmV0'@;
put 'dXJuIGwubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKGwsYSxkLGgpe2lmKGgpe2E9aCsiOiIrYTtjb25zdCBmPXpQW2hdO2Y/bC5zZXRBdHRyaWJ1dGVOUyhmLGEsZCk6bC5zZXRBdHRyaWJ1dGUoYSxkKX1lbHNlIGwuc2V0QXR0cmlidXRlKGEsZCl9cmVtb3ZlQXR0cmlidXRlKGwsYSxkKXtp'@;
put 'ZihkKXtjb25zdCBoPXpQW2RdO2g/bC5yZW1vdmVBdHRyaWJ1dGVOUyhoLGEpOmwucmVtb3ZlQXR0cmlidXRlKGAke2R9OiR7YX1gKX1lbHNlIGwucmVtb3ZlQXR0cmlidXRlKGEpfWFkZENsYXNzKGwsYSl7bC5jbGFzc0xpc3QuYWRkKGEpfXJlbW92ZUNsYXNzKGwsYSl7bC5jbGFzc0xpc3Qu'@;
put 'cmVtb3ZlKGEpfXNldFN0eWxlKGwsYSxkLGgpe2gmKEcyLkRhc2hDYXNlfEcyLkltcG9ydGFudCk/bC5zdHlsZS5zZXRQcm9wZXJ0eShhLGQsaCZHMi5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOmwuc3R5bGVbYV09ZH1yZW1vdmVTdHlsZShsLGEsZCl7ZCZHMi5EYXNoQ2FzZT9sLnN0eWxl'@;
put 'LnJlbW92ZVByb3BlcnR5KGEpOmwuc3R5bGVbYV09IiJ9c2V0UHJvcGVydHkobCxhLGQpe251bGwhPWwmJihsW2FdPWQpfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPVQ0KCkuZ2V0R2xvYmFsRXZlbnRUYXJnZXQo'@;
put 'dGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGQpKX1kZWNvcmF0ZVBy'@;
put 'ZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJldHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVuY3Rpb24gUXEoYyl7cmV0'@;
put 'dXJuIlRFTVBMQVRFIj09PWMudGFnTmFtZSYmdm9pZCAwIT09Yy5jb250ZW50fWNsYXNzIGlwZSBleHRlbmRzIFdQe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LFQsWSl7c3VwZXIobCxmLHYsWSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5ob3N0RWw9ZCx0aGlzLnNoYWRvd1Jvb3Q9'@;
put 'ZC5hdHRhY2hTaGFkb3coe21vZGU6Im9wZW4ifSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0LmFkZEhvc3QodGhpcy5zaGFkb3dSb290KTtjb25zdCByZT1KcShoLmlkLGguc3R5bGVzKTtmb3IoY29uc3QgZmUgb2YgcmUpe2NvbnN0IF9lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7'@;
put 'VCYmX2Uuc2V0QXR0cmlidXRlKCJub25jZSIsVCksX2UudGV4dENvbnRlbnQ9ZmUsdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKF9lKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENoaWxkKGwsYSl7cmV0dXJu'@;
put 'IHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNlcnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3VwZXIucmVtb3ZlQ2hpbGQo'@;
put 'dGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlSG9zdCh0aGlzLnNo'@;
put 'YWRvd1Jvb3QpfX1jbGFzcyBHUCBleHRlbmRzIFdQe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LFQsWSl7c3VwZXIobCxmLHYsVCksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9WT9KcShZLGQuc3R5bGVzKTpkLnN0'@;
put 'eWxlc31hcHBseVN0eWxlcygpe3RoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRTdHlsZXModGhpcy5zdHlsZXMpfWRlc3Ryb3koKXt0aGlzLnJlbW92ZVN0eWxlc09uQ29tcERlc3Ryb3kmJnRoaXMuc2hhcmVkU3R5bGVzSG9zdC5yZW1vdmVTdHlsZXModGhpcy5zdHlsZXMpfX1jbGFzcyBlSyBl'@;
put 'eHRlbmRzIEdQe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LFQsWSl7Y29uc3QgcmU9aCsiLSIrZC5pZDtzdXBlcihsLGEsZCxmLHYsVCxZLHJlKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHRwZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2UoVVAsYyl9KHJlKSx0aGlz'@;
put 'Lmhvc3RBdHRyPWZ1bmN0aW9uIG5wZShjKXtyZXR1cm4iX25naG9zdC0lQ09NUCUiLnJlcGxhY2UoVVAsYyl9KHJlKX1hcHBseVRvSG9zdChsKXt0aGlzLmFwcGx5U3R5bGVzKCksdGhpcy5zZXRBdHRyaWJ1dGUobCx0aGlzLmhvc3RBdHRyLCIiKX1jcmVhdGVFbGVtZW50KGwsYSl7Y29uc3Qg'@;
put 'ZD1zdXBlci5jcmVhdGVFbGVtZW50KGwsYSk7cmV0dXJuIHN1cGVyLnNldEF0dHJpYnV0ZShkLHRoaXMuY29udGVudEF0dHIsIiIpLGR9fWxldCBvcGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHFxe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiEwfWFkZEV2ZW50'@;
put 'TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLmFkZEV2ZW50TGlzdGVuZXIoZCxoLCExKSwoKT0+dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKX1yZW1vdmVFdmVudExpc3RlbmVyKGEsZCxoKXtyZXR1cm4gYS5yZW1vdmVFdmVudExpc3RlbmVyKGQsaCl9c3RhdGljI2U9dGhpcy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcigkcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjb25zdCB0Sz1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hpZnQiXSxzcGU9eyJc'@;
put 'YiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVudToiQ29udGV4dE1l'@;
put 'bnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LGFwZT17YWx0OmM9PmMuYWx0S2V5LGNvbnRyb2w6Yz0+Yy5jdHJsS2V5LG1ldGE6Yz0+Yy5tZXRhS2V5LHNoaWZ0OmM9PmMuc2hpZnRLZXl9O2xldCBscGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHFxe2NvbnN0cnVjdG9yKGEpe3N1'@;
put 'cGVyKGEpfXN1cHBvcnRzKGEpe3JldHVybiBudWxsIT1jLnBhcnNlRXZlbnROYW1lKGEpfWFkZEV2ZW50TGlzdGVuZXIoYSxkLGgpe2NvbnN0IGY9Yy5wYXJzZUV2ZW50TmFtZShkKSx2PWMuZXZlbnRDYWxsYmFjayhmLmZ1bGxLZXksaCx0aGlzLm1hbmFnZXIuZ2V0Wm9uZSgpKTtyZXR1cm4g'@;
put 'dGhpcy5tYW5hZ2VyLmdldFpvbmUoKS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+VDQoKS5vbkFuZENhbmNlbChhLGYuZG9tRXZlbnROYW1lLHYpKX1zdGF0aWMgcGFyc2VFdmVudE5hbWUoYSl7Y29uc3QgZD1hLnRvTG93ZXJDYXNlKCkuc3BsaXQoIi4iKSxoPWQuc2hpZnQoKTtpZigwPT09ZC5s'@;
put 'ZW5ndGh8fCJrZXlkb3duIiE9PWgmJiJrZXl1cCIhPT1oKXJldHVybiBudWxsO2NvbnN0IGY9Yy5fbm9ybWFsaXplS2V5KGQucG9wKCkpO2xldCB2PSIiLFQ9ZC5pbmRleE9mKCJjb2RlIik7aWYoVD4tMSYmKGQuc3BsaWNlKFQsMSksdj0iY29kZS4iKSx0Sy5mb3JFYWNoKHJlPT57Y29uc3Qg'@;
put 'ZmU9ZC5pbmRleE9mKHJlKTtmZT4tMSYmKGQuc3BsaWNlKGZlLDEpLHYrPXJlKyIuIil9KSx2Kz1mLDAhPWQubGVuZ3RofHwwPT09Zi5sZW5ndGgpcmV0dXJuIG51bGw7Y29uc3QgWT17fTtyZXR1cm4gWS5kb21FdmVudE5hbWU9aCxZLmZ1bGxLZXk9dixZfXN0YXRpYyBtYXRjaEV2ZW50RnVs'@;
put 'bEtleUNvZGUoYSxkKXtsZXQgaD1zcGVbYS5rZXldfHxhLmtleSxmPSIiO3JldHVybiBkLmluZGV4T2YoImNvZGUuIik+LTEmJihoPWEuY29kZSxmPSJjb2RlLiIpLCEobnVsbD09aHx8IWgpJiYoaD1oLnRvTG93ZXJDYXNlKCksIiAiPT09aD9oPSJzcGFjZSI6Ii4iPT09aCYmKGg9ImRvdCIp'@;
put 'LHRLLmZvckVhY2godj0+e3YhPT1oJiYoMCxhcGVbdl0pKGEpJiYoZis9disiLiIpfSksZis9aCxmPT09ZCl9c3RhdGljIGV2ZW50Q2FsbGJhY2soYSxkLGgpe3JldHVybiBmPT57Yy5tYXRjaEV2ZW50RnVsbEtleUNvZGUoZixhKSYmaC5ydW5HdWFyZGVkKCgpPT5kKGYpKX19c3RhdGljIF9u'@;
put 'b3JtYWxpemVLZXkoYSl7cmV0dXJuImVzYyI9PT1hPyJlc2NhcGUiOmF9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcigkcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJl'@;
put 'dHVybiBjfSkoKTtjb25zdCBySz1be3Byb3ZpZGU6QW8sdXNlVmFsdWU6SHF9LHtwcm92aWRlOm1DLHVzZVZhbHVlOmZ1bmN0aW9uIGNwZSgpe2pQLm1ha2VDdXJyZW50KCl9LG11bHRpOiEwfSx7cHJvdmlkZTokcyx1c2VGYWN0b3J5OmZ1bmN0aW9uIGRwZSgpe3JldHVybiBmdW5jdGlvbiBL'@;
put 'TChjKXtMXz1jfShkb2N1bWVudCksZG9jdW1lbnR9LGRlcHM6W119XSxocGU9UiQoZjJlLCJicm93c2VyIixySyksZnBlPW5ldyBZcigiIiksaUs9W3twcm92aWRlOkd4LHVzZUNsYXNzOmNsYXNzIHEzZXthZGRUb1dpbmRvdyhsKXtTcy5nZXRBbmd1bGFyVGVzdGFiaWxpdHk9KGQsaD0hMCk9'@;
put 'Pntjb25zdCBmPWwuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGQsaCk7aWYobnVsbD09Zil0aHJvdyBuZXcgem4oNTEwMywhMSk7cmV0dXJuIGZ9LFNzLmdldEFsbEFuZ3VsYXJUZXN0YWJpbGl0aWVzPSgpPT5sLmdldEFsbFRlc3RhYmlsaXRpZXMoKSxTcy5nZXRBbGxBbmd1bGFyUm9vdEVsZW1l'@;
put 'bnRzPSgpPT5sLmdldEFsbFJvb3RFbGVtZW50cygpLFNzLmZyYW1ld29ya1N0YWJpbGl6ZXJzfHwoU3MuZnJhbWV3b3JrU3RhYmlsaXplcnM9W10pLFNzLmZyYW1ld29ya1N0YWJpbGl6ZXJzLnB1c2goZD0+e2NvbnN0IGg9U3MuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXMoKTtsZXQgZj1o'@;
put 'Lmxlbmd0aDtjb25zdCB2PWZ1bmN0aW9uKCl7Zi0tLDA9PWYmJmQoKX07aC5mb3JFYWNoKFQ9PntULndoZW5TdGFibGUodil9KX0pfWZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEsZCl7cmV0dXJuIG51bGw9PWE/bnVsbDpsLmdldFRlc3RhYmlsaXR5KGEpPz8oZD9UNCgpLmlzU2hhZG93Um9v'@;
put 'dChhKT90aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEuaG9zdCwhMCk6dGhpcy5maW5kVGVzdGFiaWxpdHlJblRyZWUobCxhLnBhcmVudEVsZW1lbnQsITApOm51bGwpfX0sZGVwczpbXX0se3Byb3ZpZGU6TSQsdXNlQ2xhc3M6YVAsZGVwczpbUG8sbFAsR3hdfSx7cHJvdmlkZTphUCx1'@;
put 'c2VDbGFzczphUCxkZXBzOltQbyxsUCxHeF19XSxvSz1be3Byb3ZpZGU6bzMsdXNlVmFsdWU6InJvb3QifSx7cHJvdmlkZTpPZCx1c2VGYWN0b3J5OmZ1bmN0aW9uIHVwZSgpe3JldHVybiBuZXcgT2R9LGRlcHM6W119LHtwcm92aWRlOkJQLHVzZUNsYXNzOm9wZSxtdWx0aTohMCxkZXBzOlsk'@;
put 'cyxQbyxBb119LHtwcm92aWRlOkJQLHVzZUNsYXNzOmxwZSxtdWx0aTohMCxkZXBzOlskc119LFpQLEtxLCRxLHtwcm92aWRlOlQ1LHVzZUV4aXN0aW5nOlpQfSx7cHJvdmlkZTpWcSx1c2VDbGFzczpLM2UsZGVwczpbXX0sW11dO2xldCBzSz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e31zdGF0aWMgd2l0aFNlcnZlclRyYW5zaXRpb24oYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOlt7cHJvdmlkZTpaNix1c2VWYWx1ZTphLmFwcElkfV19fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoZnBlLDEyKSl9O3N0YXRp'@;
put 'YyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7cHJvdmlkZXJzOlsuLi5vSywuLi5pS10saW1wb3J0czpbbW8scDJlXX0pfXJldHVybiBjfSkoKSxwcGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9kb2M9YX1nZXRU'@;
put 'aXRsZSgpe3JldHVybiB0aGlzLl9kb2MudGl0bGV9c2V0VGl0bGUoYSl7dGhpcy5fZG9jLnRpdGxlPWF8fCIifXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoJHMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7UigzNzQ4MiksUig4MDY4NSk7Y29uc3QgJFA9e2ZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIsd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LEdu'@;
put 'PXtyb290UGFyYW06IiIsZGNMaWI6IiIseGxtYXBzOltdLGVkaXRvcjp7c3RhcnR1cFNldDohMSx0cmVlTm9kZUxpYnJhcmllczpbXSxsaWJzQW5kVGFibGVzOltdLGxpYnJhcmllczpbXSxsaWJyYXJ5OiIiLHRhYmxlOiIiLGZpbHRlcjp7Y29sczpbXSx2YWxzOltdLGdyb3VwTG9naWM6IiIs'@;
put 'd2hlcmVDbGF1c2U6IiIsbGliZHM6IiIsY2xhdXNlczpbXSxxdWVyeTpbXX19LHZpZXdlcjp7c3RhcnR1cFNldDohMSx0YWJsZXNTZXQ6ITEsbGlicmFyaWVzOltdLHRhYmxlczpudWxsLGxpYnJhcnk6IiIsdGFibGU6IiIsbGliaW5mbzpbXSxsaWJyYXJpZXNTZWFyY2g6IiIsZmlsdGVyOntj'@;
put 'b2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfSxjdXJyZW50U2VsZWN0aW9uOiIifSx2aWV3Ym94ZXM6e30sbGluZWFnZTp7bGlicmFyeUxpc3Q6W10sdGFibGVzTGlzdDpbXSxjb2x1bW5zTGlzdDpbXSxsaWJy'@;
put 'YXJpZXNTZWFyY2g6IiIsbGliOiIiLHRhYmxlOiIiLGNvbHVtbjoiIixjdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZToiIixjdXJyZW50TGluZWFnZVBhdGhDb2x1bW46IiJ9LG1ldGFkYXRhOnttZXRhRGF0YUxpc3Q6dm9pZCAwLG1ldGFEYXRhU2VhcmNoOiIiLG1ldGFPYmplY3RMaXN0Oltd'@;
put 'LG1ldGFPYmplY3RTZWFyY2g6IiIsbWV0YVJlcG9zaXRvcmllczp2b2lkIDAsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx2aXlhQXBpOntjb2xsZWN0aW9uc0xpc3Q6dm9pZCAwLGNvbGxlY3Rpb25zU2VhcmNoOiIiLHNlbGVjdGVkUmVwb3NpdG9yeToiIn0sdXNlcm5hdjp7dXNlckxpc3Q6dm9p'@;
put 'ZCAwLHVzZXJTZWFyY2g6IiIsZ3JvdXBMaXN0OnZvaWQgMCxncm91cFNlYXJjaDoiIixyb2xlTGlzdDp2b2lkIDAscm9sZVNlYXJjaDoiIn0sb3BlcmF0b3JzOntudW1PcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQkVUV0VFTiIsIklOIiwiTk9UIElOIiwiTkUiXSxjaGFyT3Bl'@;
put 'cmF0b3JzOlsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdfX07dmFyIFgxPVIoOTc1ODYpLHVLPVIubihYMSk7ZnVuY3Rpb24gcVAoYyl7cmV0dXJuISFjJiYoYyBpbnN0YW5jZW9mIHdufHxsdChjLmxpZnQpJiZsdChjLnN1YnNjcmliZSkpfWZ1'@;
put 'bmN0aW9uIHZsKGMsbCxhLGQpe3ZhciB2LGg9YXJndW1lbnRzLmxlbmd0aCxmPWg8Mz9sOm51bGw9PT1kP2Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGEpOmQ7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0'@;
put 'ZSlmPVJlZmxlY3QuZGVjb3JhdGUoYyxsLGEsZCk7ZWxzZSBmb3IodmFyIFQ9Yy5sZW5ndGgtMTtUPj0wO1QtLSkodj1jW1RdKSYmKGY9KGg8Mz92KGYpOmg+Mz92KGwsYSxmKTp2KGwsYSkpfHxmKTtyZXR1cm4gaD4zJiZmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobCxhLGYpLGZ9ZnVuY3Rp'@;
put 'b24gRDQoYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBEND8odGhpcy52PWMsdGhpcyk6bmV3IEQ0KGMpfWZ1bmN0aW9uIHBLKGMpe2lmKCFTeW1ib2wuYXN5bmNJdGVyYXRvcil0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTt2YXIg'@;
put 'YSxsPWNbU3ltYm9sLmFzeW5jSXRlcmF0b3JdO3JldHVybiBsP2wuY2FsbChjKTooYz1mdW5jdGlvbiBRUChjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3IsYT1sJiZjW2xdLGQ9MDtpZihhKXJldHVybiBhLmNhbGwoYyk7aWYoYyYmIm51bWJlciI9'@;
put 'PXR5cGVvZiBjLmxlbmd0aClyZXR1cm57bmV4dDpmdW5jdGlvbigpe3JldHVybiBjJiZkPj1jLmxlbmd0aCYmKGM9dm9pZCAwKSx7dmFsdWU6YyYmY1tkKytdLGRvbmU6IWN9fX07dGhyb3cgbmV3IFR5cGVFcnJvcihsPyJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLiI6IlN5bWJvbC5pdGVyYXRv'@;
put 'ciBpcyBub3QgZGVmaW5lZC4iKX0oYyksYT17fSxkKCJuZXh0IiksZCgidGhyb3ciKSxkKCJyZXR1cm4iKSxhW1N5bWJvbC5hc3luY0l0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxhKTtmdW5jdGlvbiBkKGYpe2FbZl09Y1tmXSYmZnVuY3Rpb24odil7cmV0dXJuIG5ldyBQcm9t'@;
put 'aXNlKGZ1bmN0aW9uKFQsWSl7IWZ1bmN0aW9uIGgoZix2LFQsWSl7UHJvbWlzZS5yZXNvbHZlKFkpLnRoZW4oZnVuY3Rpb24ocmUpe2Yoe3ZhbHVlOnJlLGRvbmU6VH0pfSx2KX0oVCxZLCh2PWNbZl0odikpLmRvbmUsdi52YWx1ZSl9KX19fSJmdW5jdGlvbiI9PXR5cGVvZiBTdXBwcmVzc2Vk'@;
put 'RXJyb3ImJlN1cHByZXNzZWRFcnJvcjtjb25zdCBlRj1jPT5jJiYibnVtYmVyIj09dHlwZW9mIGMubGVuZ3RoJiYiZnVuY3Rpb24iIT10eXBlb2YgYztmdW5jdGlvbiBtSyhjKXtyZXR1cm4gbHQoYz8udGhlbil9ZnVuY3Rpb24gZ0soYyl7cmV0dXJuIGx0KGNbYm5dKX1mdW5jdGlvbiBfSyhj'@;
put 'KXtyZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3ImJmx0KGM/LltTeW1ib2wuYXN5bmNJdGVyYXRvcl0pfWZ1bmN0aW9uIHZLKGMpe3JldHVybiBuZXcgVHlwZUVycm9yKGBZb3UgcHJvdmlkZWQgJHtudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjPyJhbiBpbnZhbGlkIG9iamVjdCI6YCck'@;
put 'e2N9J2B9IHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCl9Y29uc3QgeUs9ZnVuY3Rpb24gTnBlKCl7cmV0dXJuImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciJ9KCk7ZnVuY3Rpb24gYksoYyl7cmV0dXJuIGx0KGM/Llt5S10pfWZ1bmN0aW9uIHdLKGMpe3JldHVybiBmdW5jdGlvbiBmSyhjLGwsYSl7aWYoIVN5bWJvbC5hc3luY0l0ZXJh'@;
put 'dG9yKXRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpO3ZhciBoLGQ9YS5hcHBseShjLGx8fFtdKSxmPVtdO3JldHVybiBoPXt9LHYoIm5leHQiKSx2KCJ0aHJvdyIpLHYoInJldHVybiIpLGhbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGg7ZnVuY3Rpb24gdihrZSl7ZFtrZV0mJihoW2tlXT1mdW5jdGlvbihXZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEplLHR0KXtmLnB1c2goW2tlLFdlLEplLHR0XSk+MXx8VChrZSxXZSl9KX0pfWZ1bmN0aW9uIFQoa2UsV2Upe3RyeXshZnVu'@;
put 'Y3Rpb24gWShrZSl7a2UudmFsdWUgaW5zdGFuY2VvZiBEND9Qcm9taXNlLnJlc29sdmUoa2UudmFsdWUudikudGhlbihyZSxmZSk6X2UoZlswXVsyXSxrZSl9KGRba2VdKFdlKSl9Y2F0Y2goSmUpe19lKGZbMF1bM10sSmUpfX1mdW5jdGlvbiByZShrZSl7VCgibmV4dCIsa2UpfWZ1bmN0aW9u'@;
put 'IGZlKGtlKXtUKCJ0aHJvdyIsa2UpfWZ1bmN0aW9uIF9lKGtlLFdlKXtrZShXZSksZi5zaGlmdCgpLGYubGVuZ3RoJiZUKGZbMF1bMF0sZlswXVsxXSl9fSh0aGlzLGFyZ3VtZW50cyxmdW5jdGlvbiooKXtjb25zdCBhPWMuZ2V0UmVhZGVyKCk7dHJ5e2Zvcig7Oyl7Y29uc3R7dmFsdWU6ZCxk'@;
put 'b25lOmh9PXlpZWxkIEQ0KGEucmVhZCgpKTtpZihoKXJldHVybiB5aWVsZCBENCh2b2lkIDApO3lpZWxkIHlpZWxkIEQ0KGQpfX1maW5hbGx5e2EucmVsZWFzZUxvY2soKX19KX1mdW5jdGlvbiBNSyhjKXtyZXR1cm4gbHQoYz8uZ2V0UmVhZGVyKX1mdW5jdGlvbiBjMShjKXtpZihjIGluc3Rh'@;
put 'bmNlb2Ygd24pcmV0dXJuIGM7aWYobnVsbCE9Yyl7aWYoZ0soYykpcmV0dXJuIGZ1bmN0aW9uIFZwZShjKXtyZXR1cm4gbmV3IHduKGw9Pntjb25zdCBhPWNbYm5dKCk7aWYobHQoYS5zdWJzY3JpYmUpKXJldHVybiBhLnN1YnNjcmliZShsKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRl'@;
put 'ZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KGMpO2lmKGVGKGMpKXJldHVybiBmdW5jdGlvbiBqcGUoYyl7cmV0dXJuIG5ldyB3bihsPT57Zm9yKGxldCBhPTA7YTxjLmxlbmd0aCYmIWwuY2xvc2VkO2ErKylsLm5leHQoY1thXSk7'@;
put 'bC5jb21wbGV0ZSgpfSl9KGMpO2lmKG1LKGMpKXJldHVybiBmdW5jdGlvbiBCcGUoYyl7cmV0dXJuIG5ldyB3bihsPT57Yy50aGVuKGE9PntsLmNsb3NlZHx8KGwubmV4dChhKSxsLmNvbXBsZXRlKCkpfSxhPT5sLmVycm9yKGEpKS50aGVuKG51bGwsWm4pfSl9KGMpO2lmKF9LKGMpKXJldHVy'@;
put 'biBDSyhjKTtpZihiSyhjKSlyZXR1cm4gZnVuY3Rpb24gWXBlKGMpe3JldHVybiBuZXcgd24obD0+e2Zvcihjb25zdCBhIG9mIGMpaWYobC5uZXh0KGEpLGwuY2xvc2VkKXJldHVybjtsLmNvbXBsZXRlKCl9KX0oYyk7aWYoTUsoYykpcmV0dXJuIGZ1bmN0aW9uIHpwZShjKXtyZXR1cm4gQ0so'@;
put 'd0soYykpfShjKX10aHJvdyB2SyhjKX1mdW5jdGlvbiBDSyhjKXtyZXR1cm4gbmV3IHduKGw9PnsoZnVuY3Rpb24gVXBlKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9uIGRLKGMsbCxhLGQpe3JldHVybiBuZXcoYXx8KGE9UHJvbWlzZSkpKGZ1bmN0aW9uKGYsdil7ZnVuY3Rpb24g'@;
put 'VChmZSl7dHJ5e3JlKGQubmV4dChmZSkpfWNhdGNoKF9lKXt2KF9lKX19ZnVuY3Rpb24gWShmZSl7dHJ5e3JlKGQudGhyb3coZmUpKX1jYXRjaChfZSl7dihfZSl9fWZ1bmN0aW9uIHJlKGZlKXtmZS5kb25lP2YoZmUudmFsdWUpOmZ1bmN0aW9uIGgoZil7cmV0dXJuIGYgaW5zdGFuY2VvZiBh'@;
put 'P2Y6bmV3IGEoZnVuY3Rpb24odil7dihmKX0pfShmZS52YWx1ZSkudGhlbihULFkpfXJlKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1wSyhjKTshKGQ9eWllbGQgYS5uZXh0KCkpLmRvbmU7KWlmKGwubmV4'@;
put 'dChkLnZhbHVlKSxsLmNsb3NlZClyZXR1cm59Y2F0Y2godil7aD17ZXJyb3I6dn19ZmluYWxseXt0cnl7ZCYmIWQuZG9uZSYmKGY9YS5yZXR1cm4pJiYoeWllbGQgZi5jYWxsKGEpKX1maW5hbGx5e2lmKGgpdGhyb3cgaC5lcnJvcn19bC5jb21wbGV0ZSgpfSl9KShjLGwpLmNhdGNoKGE9Pmwu'@;
put 'ZXJyb3IoYSkpfSl9ZnVuY3Rpb24gVTMoYyxsLGEsZD0wLGg9ITEpe2NvbnN0IGY9bC5zY2hlZHVsZShmdW5jdGlvbigpe2EoKSxoP2MuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCxkKSk6dGhpcy51bnN1YnNjcmliZSgpfSxkKTtpZihjLmFkZChmKSwhaClyZXR1cm4gZn1mdW5jdGlvbiBTSyhj'@;
put 'LGw9MCl7cmV0dXJuIHlpKChhLGQpPT57YS5zdWJzY3JpYmUoJHIoZCxoPT5VMyhkLGMsKCk9PmQubmV4dChoKSxsKSwoKT0+VTMoZCxjLCgpPT5kLmNvbXBsZXRlKCksbCksaD0+VTMoZCxjLCgpPT5kLmVycm9yKGgpLGwpKSl9KX1mdW5jdGlvbiB4SyhjLGw9MCl7cmV0dXJuIHlpKChhLGQp'@;
put 'PT57ZC5hZGQoYy5zY2hlZHVsZSgoKT0+YS5zdWJzY3JpYmUoZCksbCkpfSl9ZnVuY3Rpb24ga0soYyxsKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkl0ZXJhYmxlIGNhbm5vdCBiZSBudWxsIik7cmV0dXJuIG5ldyB3bihhPT57VTMoYSxsLCgpPT57Y29uc3QgZD1jW1N5bWJvbC5hc3luY0l0'@;
put 'ZXJhdG9yXSgpO1UzKGEsbCwoKT0+e2QubmV4dCgpLnRoZW4oaD0+e2guZG9uZT9hLmNvbXBsZXRlKCk6YS5uZXh0KGgudmFsdWUpfSl9LDAsITApfSl9KX1mdW5jdGlvbiBaYyhjLGwpe3JldHVybiBsP2Z1bmN0aW9uIEtwZShjLGwpe2lmKG51bGwhPWMpe2lmKGdLKGMpKXJldHVybiBmdW5j'@;
put 'dGlvbiBacGUoYyxsKXtyZXR1cm4gYzEoYykucGlwZSh4SyhsKSxTSyhsKSl9KGMsbCk7aWYoZUYoYykpcmV0dXJuIGZ1bmN0aW9uIEdwZShjLGwpe3JldHVybiBuZXcgd24oYT0+e2xldCBkPTA7cmV0dXJuIGwuc2NoZWR1bGUoZnVuY3Rpb24oKXtkPT09Yy5sZW5ndGg/YS5jb21wbGV0ZSgp'@;
put 'OihhLm5leHQoY1tkKytdKSxhLmNsb3NlZHx8dGhpcy5zY2hlZHVsZSgpKX0pfSl9KGMsbCk7aWYobUsoYykpcmV0dXJuIGZ1bmN0aW9uIFdwZShjLGwpe3JldHVybiBjMShjKS5waXBlKHhLKGwpLFNLKGwpKX0oYyxsKTtpZihfSyhjKSlyZXR1cm4ga0soYyxsKTtpZihiSyhjKSlyZXR1cm4g'@;
put 'ZnVuY3Rpb24gJHBlKGMsbCl7cmV0dXJuIG5ldyB3bihhPT57bGV0IGQ7cmV0dXJuIFUzKGEsbCwoKT0+e2Q9Y1t5S10oKSxVMyhhLGwsKCk9PntsZXQgaCxmO3RyeXsoe3ZhbHVlOmgsZG9uZTpmfT1kLm5leHQoKSl9Y2F0Y2godil7cmV0dXJuIHZvaWQgYS5lcnJvcih2KX1mP2EuY29tcGxl'@;
put 'dGUoKTphLm5leHQoaCl9LDAsITApfSksKCk9Pmx0KGQ/LnJldHVybikmJmQucmV0dXJuKCl9KX0oYyxsKTtpZihNSyhjKSlyZXR1cm4gZnVuY3Rpb24gcXBlKGMsbCl7cmV0dXJuIGtLKHdLKGMpLGwpfShjLGwpfXRocm93IHZLKGMpfShjLGwpOmMxKGMpfWZ1bmN0aW9uIEVLKGMpe3JldHVy'@;
put 'biBjJiZsdChjLnNjaGVkdWxlKX1mdW5jdGlvbiB0RihjKXtyZXR1cm4gY1tjLmxlbmd0aC0xXX1mdW5jdGlvbiBUSyhjKXtyZXR1cm4gbHQodEYoYykpP2MucG9wKCk6dm9pZCAwfWZ1bmN0aW9uIFB5KGMpe3JldHVybiBFSyh0RihjKSk/Yy5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gTm8oLi4u'@;
put 'Yyl7cmV0dXJuIFpjKGMsUHkoYykpfWNvbnN0e2lzQXJyYXk6SnBlfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6UXBlLHByb3RvdHlwZTplNGUsa2V5czp0NGV9PU9iamVjdDtmdW5jdGlvbiBESyhjKXtpZigxPT09Yy5sZW5ndGgpe2NvbnN0IGw9Y1swXTtpZihKcGUobCkpcmV0dXJue2FyZ3M6'@;
put 'bCxrZXlzOm51bGx9O2lmKGZ1bmN0aW9uIG40ZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiZRcGUoYyk9PT1lNGV9KGwpKXtjb25zdCBhPXQ0ZShsKTtyZXR1cm57YXJnczphLm1hcChkPT5sW2RdKSxrZXlzOmF9fX1yZXR1cm57YXJnczpjLGtleXM6bnVsbH19Y29uc3R7aXNB'@;
put 'cnJheTpyNGV9PUFycmF5O2Z1bmN0aW9uIG5GKGMpe3JldHVybiB5cihsPT5mdW5jdGlvbiBpNGUoYyxsKXtyZXR1cm4gcjRlKGwpP2MoLi4ubCk6YyhsKX0oYyxsKSl9ZnVuY3Rpb24gQUsoYyxsKXtyZXR1cm4gYy5yZWR1Y2UoKGEsZCxoKT0+KGFbZF09bFtoXSxhKSx7fSl9ZnVuY3Rpb24g'@;
put 'WTgoLi4uYyl7Y29uc3QgbD1QeShjKSxhPVRLKGMpLHthcmdzOmQsa2V5czpofT1ESyhjKTtpZigwPT09ZC5sZW5ndGgpcmV0dXJuIFpjKFtdLGwpO2NvbnN0IGY9bmV3IHduKGZ1bmN0aW9uIG80ZShjLGwsYT1Dbil7cmV0dXJuIGQ9PntMSyhsLCgpPT57Y29uc3R7bGVuZ3RoOmh9PWMsZj1u'@;
put 'ZXcgQXJyYXkoaCk7bGV0IHY9aCxUPWg7Zm9yKGxldCBZPTA7WTxoO1krKylMSyhsLCgpPT57Y29uc3QgcmU9WmMoY1tZXSxsKTtsZXQgZmU9ITE7cmUuc3Vic2NyaWJlKCRyKGQsX2U9PntmW1ldPV9lLGZlfHwoZmU9ITAsVC0tKSxUfHxkLm5leHQoYShmLnNsaWNlKCkpKX0sKCk9PnstLXZ8'@;
put 'fGQuY29tcGxldGUoKX0pKX0sZCl9LGQpfX0oZCxsLGg/dj0+QUsoaCx2KTpDbikpO3JldHVybiBhP2YucGlwZShuRihhKSk6Zn1mdW5jdGlvbiBMSyhjLGwsYSl7Yz9VMyhhLGMsbCk6bCgpfWNvbnN0IHZrPUN0KGM9PmZ1bmN0aW9uKCl7Yyh0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3Ii'@;
put 'LHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifSk7ZnVuY3Rpb24gVnUoYyxsLGE9MS8wKXtyZXR1cm4gbHQobCk/VnUoKGQsaCk9PnlyKChmLHYpPT5sKGQsZixoLHYpKShjMShjKGQsaCkpKSxhKTooIm51bWJlciI9PXR5cGVvZiBsJiYoYT1sKSx5aSgoZCxoKT0+ZnVu'@;
put 'Y3Rpb24gczRlKGMsbCxhLGQsaCxmLHYsVCl7Y29uc3QgWT1bXTtsZXQgcmU9MCxmZT0wLF9lPSExO2NvbnN0IGtlPSgpPT57X2UmJiFZLmxlbmd0aCYmIXJlJiZsLmNvbXBsZXRlKCl9LFdlPXR0PT5yZTxkP0plKHR0KTpZLnB1c2godHQpLEplPXR0PT57ZiYmbC5uZXh0KHR0KSxyZSsrO2xl'@;
put 'dCB5dD0hMTtjMShhKHR0LGZlKyspKS5zdWJzY3JpYmUoJHIobCx3dD0+e2g/Lih3dCksZj9XZSh3dCk6bC5uZXh0KHd0KX0sKCk9Pnt5dD0hMH0sdm9pZCAwLCgpPT57aWYoeXQpdHJ5e2ZvcihyZS0tO1kubGVuZ3RoJiZyZTxkOyl7Y29uc3Qgd3Q9WS5zaGlmdCgpO3Y/VTMobCx2LCgpPT5K'@;
put 'ZSh3dCkpOkplKHd0KX1rZSgpfWNhdGNoKHd0KXtsLmVycm9yKHd0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZSgkcihsLFdlLCgpPT57X2U9ITAsa2UoKX0pKSwoKT0+e1Q/LigpfX0oZCxoLGMsYSkpKX1mdW5jdGlvbiB6OChjPTEvMCl7cmV0dXJuIFZ1KENuLGMpfWZ1bmN0aW9uIHJGKC4u'@;
put 'LmMpe3JldHVybiBmdW5jdGlvbiBhNGUoKXtyZXR1cm4gejgoMSl9KCkoWmMoYyxQeShjKSkpfWZ1bmN0aW9uIElLKGMpe3JldHVybiBuZXcgd24obD0+e2MxKGMoKSkuc3Vic2NyaWJlKGwpfSl9ZnVuY3Rpb24geWsoYyxsKXtjb25zdCBhPWx0KGMpP2M6KCk9PmMsZD1oPT5oLmVycm9yKGEo'@;
put 'KSk7cmV0dXJuIG5ldyB3bihsP2g9Pmwuc2NoZWR1bGUoZCwwLGgpOmQpfWNvbnN0IHFoPW5ldyB3bihjPT5jLmNvbXBsZXRlKCkpO2Z1bmN0aW9uIGlGKCl7cmV0dXJuIHlpKChjLGwpPT57bGV0IGE9bnVsbDtjLl9yZWZDb3VudCsrO2NvbnN0IGQ9JHIobCx2b2lkIDAsdm9pZCAwLHZvaWQg'@;
put 'MCwoKT0+e2lmKCFjfHxjLl9yZWZDb3VudDw9MHx8MDwtLWMuX3JlZkNvdW50KXJldHVybiB2b2lkKGE9bnVsbCk7Y29uc3QgaD1jLl9jb25uZWN0aW9uLGY9YTthPW51bGwsaCYmKCFmfHxoPT09ZikmJmgudW5zdWJzY3JpYmUoKSxsLnVuc3Vic2NyaWJlKCl9KTtjLnN1YnNjcmliZShkKSxk'@;
put 'LmNsb3NlZHx8KGE9Yy5jb25uZWN0KCkpfSl9Y2xhc3MgUksgZXh0ZW5kcyB3bntjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5zb3VyY2U9bCx0aGlzLnN1YmplY3RGYWN0b3J5PWEsdGhpcy5fc3ViamVjdD1udWxsLHRoaXMuX3JlZkNvdW50PTAsdGhpcy5fY29ubmVjdGlvbj1udWxs'@;
put 'LG1yKGwpJiYodGhpcy5saWZ0PWwubGlmdCl9X3N1YnNjcmliZShsKXtyZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCkuc3Vic2NyaWJlKGwpfWdldFN1YmplY3QoKXtjb25zdCBsPXRoaXMuX3N1YmplY3Q7cmV0dXJuKCFsfHxsLmlzU3RvcHBlZCkmJih0aGlzLl9zdWJqZWN0PXRoaXMuc3ViamVj'@;
put 'dEZhY3RvcnkoKSksdGhpcy5fc3ViamVjdH1fdGVhcmRvd24oKXt0aGlzLl9yZWZDb3VudD0wO2NvbnN0e19jb25uZWN0aW9uOmx9PXRoaXM7dGhpcy5fc3ViamVjdD10aGlzLl9jb25uZWN0aW9uPW51bGwsbD8udW5zdWJzY3JpYmUoKX1jb25uZWN0KCl7bGV0IGw9dGhpcy5fY29ubmVjdGlv'@;
put 'bjtpZighbCl7bD10aGlzLl9jb25uZWN0aW9uPW5ldyBYdDtjb25zdCBhPXRoaXMuZ2V0U3ViamVjdCgpO2wuYWRkKHRoaXMuc291cmNlLnN1YnNjcmliZSgkcihhLHZvaWQgMCwoKT0+e3RoaXMuX3RlYXJkb3duKCksYS5jb21wbGV0ZSgpfSxkPT57dGhpcy5fdGVhcmRvd24oKSxhLmVycm9y'@;
put 'KGQpfSwoKT0+dGhpcy5fdGVhcmRvd24oKSkpKSxsLmNsb3NlZCYmKHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxsPVh0LkVNUFRZKX1yZXR1cm4gbH1yZWZDb3VudCgpe3JldHVybiBpRigpKHRoaXMpfX1mdW5jdGlvbiB1MShjLGwpe3JldHVybiB5aSgoYSxkKT0+e2xldCBoPW51bGwsZj0wLHY9'@;
put 'ITE7Y29uc3QgVD0oKT0+diYmIWgmJmQuY29tcGxldGUoKTthLnN1YnNjcmliZSgkcihkLFk9PntoPy51bnN1YnNjcmliZSgpO2xldCByZT0wO2NvbnN0IGZlPWYrKztjMShjKFksZmUpKS5zdWJzY3JpYmUoaD0kcihkLF9lPT5kLm5leHQobD9sKFksX2UsZmUscmUrKyk6X2UpLCgpPT57aD1u'@;
put 'dWxsLFQoKX0pKX0sKCk9Pnt2PSEwLFQoKX0pKX0pfWZ1bmN0aW9uIEtoKGMpe3JldHVybiBjPD0wPygpPT5xaDp5aSgobCxhKT0+e2xldCBkPTA7bC5zdWJzY3JpYmUoJHIoYSxoPT57KytkPD1jJiYoYS5uZXh0KGgpLGM8PWQmJmEuY29tcGxldGUoKSl9KSl9KX1mdW5jdGlvbiBaNSguLi5j'@;
put 'KXtjb25zdCBsPVB5KGMpO3JldHVybiB5aSgoYSxkKT0+eyhsP3JGKGMsYSxsKTpyRihjLGEpKS5zdWJzY3JpYmUoZCl9KX1mdW5jdGlvbiBIYShjLGwpe3JldHVybiB5aSgoYSxkKT0+e2xldCBoPTA7YS5zdWJzY3JpYmUoJHIoZCxmPT5jLmNhbGwobCxmLGgrKykmJmQubmV4dChmKSkpfSl9'@;
put 'ZnVuY3Rpb24gYmsoYyl7cmV0dXJuIHlpKChsLGEpPT57bGV0IGQ9ITE7bC5zdWJzY3JpYmUoJHIoYSxoPT57ZD0hMCxhLm5leHQoaCl9LCgpPT57ZHx8YS5uZXh0KGMpLGEuY29tcGxldGUoKX0pKX0pfWZ1bmN0aW9uIE9LKGM9YzRlKXtyZXR1cm4geWkoKGwsYSk9PntsZXQgZD0hMTtsLnN1'@;
put 'YnNjcmliZSgkcihhLGg9PntkPSEwLGEubmV4dChoKX0sKCk9PmQ/YS5jb21wbGV0ZSgpOmEuZXJyb3IoYygpKSkpfSl9ZnVuY3Rpb24gYzRlKCl7cmV0dXJuIG5ldyB2a31mdW5jdGlvbiBBNChjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5waXBlKGM/SGEo'@;
put 'KGgsZik9PmMoaCxmLGQpKTpDbixLaCgxKSxhP2JrKGwpOk9LKCgpPT5uZXcgdmspKX1mdW5jdGlvbiBVOChjLGwpe3JldHVybiBsdChsKT9WdShjLGwsMSk6VnUoYywxKX1mdW5jdGlvbiBsdShjLGwsYSl7Y29uc3QgZD1sdChjKXx8bHx8YT97bmV4dDpjLGVycm9yOmwsY29tcGxldGU6YX06'@;
put 'YztyZXR1cm4gZD95aSgoaCxmKT0+e3ZhciB2O251bGw9PT0odj1kLnN1YnNjcmliZSl8fHZvaWQgMD09PXZ8fHYuY2FsbChkKTtsZXQgVD0hMDtoLnN1YnNjcmliZSgkcihmLFk9Pnt2YXIgcmU7bnVsbD09PShyZT1kLm5leHQpfHx2b2lkIDA9PT1yZXx8cmUuY2FsbChkLFkpLGYubmV4dChZ'@;
put 'KX0sKCk9Pnt2YXIgWTtUPSExLG51bGw9PT0oWT1kLmNvbXBsZXRlKXx8dm9pZCAwPT09WXx8WS5jYWxsKGQpLGYuY29tcGxldGUoKX0sWT0+e3ZhciByZTtUPSExLG51bGw9PT0ocmU9ZC5lcnJvcil8fHZvaWQgMD09PXJlfHxyZS5jYWxsKGQsWSksZi5lcnJvcihZKX0sKCk9Pnt2YXIgWSxy'@;
put 'ZTtUJiYobnVsbD09PShZPWQudW5zdWJzY3JpYmUpfHx2b2lkIDA9PT1ZfHxZLmNhbGwoZCkpLG51bGw9PT0ocmU9ZC5maW5hbGl6ZSl8fHZvaWQgMD09PXJlfHxyZS5jYWxsKGQpfSkpfSk6Q259ZnVuY3Rpb24gWjgoYyl7cmV0dXJuIHlpKChsLGEpPT57bGV0IGYsZD1udWxsLGg9ITE7ZD1s'@;
put 'LnN1YnNjcmliZSgkcihhLHZvaWQgMCx2b2lkIDAsdj0+e2Y9YzEoYyh2LFo4KGMpKGwpKSksZD8oZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSk6aD0hMH0pKSxoJiYoZC51bnN1YnNjcmliZSgpLGQ9bnVsbCxmLnN1YnNjcmliZShhKSl9KX1mdW5jdGlvbiBvRihjKXty'@;
put 'ZXR1cm4gYzw9MD8oKT0+cWg6eWkoKGwsYSk9PntsZXQgZD1bXTtsLnN1YnNjcmliZSgkcihhLGg9PntkLnB1c2goaCksYzxkLmxlbmd0aCYmZC5zaGlmdCgpfSwoKT0+e2Zvcihjb25zdCBoIG9mIGQpYS5uZXh0KGgpO2EuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57ZD1udWxsfSkpfSl9ZnVu'@;
put 'Y3Rpb24gRnkoYyl7cmV0dXJuIHlpKChsLGEpPT57dHJ5e2wuc3Vic2NyaWJlKGEpfWZpbmFsbHl7YS5hZGQoYyl9fSl9ZnVuY3Rpb24gWGgoYyl7cmV0dXJuIHlpKChsLGEpPT57YzEoYykuc3Vic2NyaWJlKCRyKGEsKCk9PmEuY29tcGxldGUoKSxPbikpLCFhLmNsb3NlZCYmbC5zdWJzY3Jp'@;
put 'YmUoYSl9KX1jb25zdCB3cz0icHJpbWFyeSIsSHk9U3ltYm9sKCJSb3V0ZVRpdGxlIik7Y2xhc3MgcDRle2NvbnN0cnVjdG9yKGwpe3RoaXMucGFyYW1zPWx8fHt9fWhhcyhsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMucGFyYW1zLGwpfWdldChs'@;
put 'KXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hWzBdOmF9cmV0dXJuIG51bGx9Z2V0QWxsKGwpe2lmKHRoaXMuaGFzKGwpKXtjb25zdCBhPXRoaXMucGFyYW1zW2xdO3JldHVybiBBcnJheS5pc0FycmF5KGEpP2E6W2FdfXJl'@;
put 'dHVybltdfWdldCBrZXlzKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zKX19ZnVuY3Rpb24gVzgoYyl7cmV0dXJuIG5ldyBwNGUoYyl9ZnVuY3Rpb24gbTRlKGMsbCxhKXtjb25zdCBkPWEucGF0aC5zcGxpdCgiLyIpO2lmKGQubGVuZ3RoPmMubGVuZ3RofHwiZnVsbCI9PT1hLnBh'@;
put 'dGhNYXRjaCYmKGwuaGFzQ2hpbGRyZW4oKXx8ZC5sZW5ndGg8Yy5sZW5ndGgpKXJldHVybiBudWxsO2NvbnN0IGg9e307Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXSxUPWNbZl07aWYodi5zdGFydHNXaXRoKCI6IikpaFt2LnN1YnN0cmluZygxKV09VDtlbHNlIGlm'@;
put 'KHYhPT1ULnBhdGgpcmV0dXJuIG51bGx9cmV0dXJue2NvbnN1bWVkOmMuc2xpY2UoMCxkLmxlbmd0aCkscG9zUGFyYW1zOmh9fWZ1bmN0aW9uIGRmKGMsbCl7Y29uc3QgYT1jP3NGKGMpOnZvaWQgMCxkPWw/c0YobCk6dm9pZCAwO2lmKCFhfHwhZHx8YS5sZW5ndGghPWQubGVuZ3RoKXJldHVy'@;
put 'biExO2xldCBoO2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7ZisrKWlmKGg9YVtmXSwhUEsoY1toXSxsW2hdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBzRihjKXtyZXR1cm5bLi4uT2JqZWN0LmtleXMoYyksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhjKV19ZnVuY3Rpb24g'@;
put 'UEsoYyxsKXtpZihBcnJheS5pc0FycmF5KGMpJiZBcnJheS5pc0FycmF5KGwpKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2NvbnN0IGE9Wy4uLmNdLnNvcnQoKSxkPVsuLi5sXS5zb3J0KCk7cmV0dXJuIGEuZXZlcnkoKGgsZik9PmRbZl09PT1oKX1yZXR1cm4gYz09PWx9ZnVu'@;
put 'Y3Rpb24gRksoYyl7cmV0dXJuIGMubGVuZ3RoPjA/Y1tjLmxlbmd0aC0xXTpudWxsfWZ1bmN0aW9uIEw0KGMpe3JldHVybiBxUChjKT9jOlN5KGMpP1pjKFByb21pc2UucmVzb2x2ZShjKSk6Tm8oYyl9Y29uc3QgXzRlPXtleGFjdDpmdW5jdGlvbiBWSyhjLGwsYSl7aWYoIVc1KGMuc2VnbWVu'@;
put 'dHMsbC5zZWdtZW50cyl8fCF3ayhjLnNlZ21lbnRzLGwuc2VnbWVudHMsYSl8fGMubnVtYmVyT2ZDaGlsZHJlbiE9PWwubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4hMTtmb3IoY29uc3QgZCBpbiBsLmNoaWxkcmVuKWlmKCFjLmNoaWxkcmVuW2RdfHwhVksoYy5jaGlsZHJlbltkXSxsLmNoaWxk'@;
put 'cmVuW2RdLGEpKXJldHVybiExO3JldHVybiEwfSxzdWJzZXQ6akt9LEhLPXtleGFjdDpmdW5jdGlvbiB2NGUoYyxsKXtyZXR1cm4gZGYoYyxsKX0sc3Vic2V0OmZ1bmN0aW9uIHk0ZShjLGwpe3JldHVybiBPYmplY3Qua2V5cyhsKS5sZW5ndGg8PU9iamVjdC5rZXlzKGMpLmxlbmd0aCYmT2Jq'@;
put 'ZWN0LmtleXMobCkuZXZlcnkoYT0+UEsoY1thXSxsW2FdKSl9LGlnbm9yZWQ6KCk9PiEwfTtmdW5jdGlvbiBOSyhjLGwsYSl7cmV0dXJuIF80ZVthLnBhdGhzXShjLnJvb3QsbC5yb290LGEubWF0cml4UGFyYW1zKSYmSEtbYS5xdWVyeVBhcmFtc10oYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5UGFy'@;
put 'YW1zKSYmISgiZXhhY3QiPT09YS5mcmFnbWVudCYmYy5mcmFnbWVudCE9PWwuZnJhZ21lbnQpfWZ1bmN0aW9uIGpLKGMsbCxhKXtyZXR1cm4gQksoYyxsLGwuc2VnbWVudHMsYSl9ZnVuY3Rpb24gQksoYyxsLGEsZCl7aWYoYy5zZWdtZW50cy5sZW5ndGg+YS5sZW5ndGgpe2NvbnN0IGg9Yy5z'@;
put 'ZWdtZW50cy5zbGljZSgwLGEubGVuZ3RoKTtyZXR1cm4hKCFXNShoLGEpfHxsLmhhc0NoaWxkcmVuKCl8fCF3ayhoLGEsZCkpfWlmKGMuc2VnbWVudHMubGVuZ3RoPT09YS5sZW5ndGgpe2lmKCFXNShjLnNlZ21lbnRzLGEpfHwhd2soYy5zZWdtZW50cyxhLGQpKXJldHVybiExO2Zvcihjb25z'@;
put 'dCBoIGluIGwuY2hpbGRyZW4paWYoIWMuY2hpbGRyZW5baF18fCFqSyhjLmNoaWxkcmVuW2hdLGwuY2hpbGRyZW5baF0sZCkpcmV0dXJuITE7cmV0dXJuITB9e2NvbnN0IGg9YS5zbGljZSgwLGMuc2VnbWVudHMubGVuZ3RoKSxmPWEuc2xpY2UoYy5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEh'@;
put 'KFc1KGMuc2VnbWVudHMsaCkmJndrKGMuc2VnbWVudHMsaCxkKSYmYy5jaGlsZHJlblt3c10pJiZCSyhjLmNoaWxkcmVuW3dzXSxsLGYsZCl9fWZ1bmN0aW9uIHdrKGMsbCxhKXtyZXR1cm4gbC5ldmVyeSgoZCxoKT0+SEtbYV0oY1toXS5wYXJhbWV0ZXJzLGQucGFyYW1ldGVycykpfWNsYXNz'@;
put 'IEc4e2NvbnN0cnVjdG9yKGw9bmV3IFVhKFtdLHt9KSxhPXt9LGQ9bnVsbCl7dGhpcy5yb290PWwsdGhpcy5xdWVyeVBhcmFtcz1hLHRoaXMuZnJhZ21lbnQ9ZH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89VzgodGhpcy5xdWVyeVBhcmFtcyksdGhp'@;
put 'cy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiBNNGUuc2VyaWFsaXplKHRoaXMpfX1jbGFzcyBVYXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2VnbWVudHM9bCx0aGlzLmNoaWxkcmVuPWEsdGhpcy5wYXJlbnQ9bnVsbCxPYmplY3QudmFsdWVzKGEpLmZvckVhY2goZD0+ZC5wYXJl'@;
put 'bnQ9dGhpcyl9aGFzQ2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5udW1iZXJPZkNoaWxkcmVuPjB9Z2V0IG51bWJlck9mQ2hpbGRyZW4oKXtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbikubGVuZ3RofXRvU3RyaW5nKCl7cmV0dXJuIE1rKHRoaXMpfX1jbGFzcyBOeXtjb25zdHJ1Y3Rv'@;
put 'cihsLGEpe3RoaXMucGF0aD1sLHRoaXMucGFyYW1ldGVycz1hfWdldCBwYXJhbWV0ZXJNYXAoKXtyZXR1cm4gdGhpcy5fcGFyYW1ldGVyTWFwPz89VzgodGhpcy5wYXJhbWV0ZXJzKSx0aGlzLl9wYXJhbWV0ZXJNYXB9dG9TdHJpbmcoKXtyZXR1cm4gVUsodGhpcyl9fWZ1bmN0aW9uIFc1KGMs'@;
put 'bCl7cmV0dXJuIGMubGVuZ3RoPT09bC5sZW5ndGgmJmMuZXZlcnkoKGEsZCk9PmEucGF0aD09PWxbZF0ucGF0aCl9bGV0ICQ4PSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92'@;
put 'PWxyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBhRixwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjbGFzcyBhRntwYXJzZShsKXtjb25zdCBhPW5ldyBSNGUobCk7cmV0dXJuIG5ldyBHOChhLnBhcnNlUm9vdFNlZ21lbnQoKSxhLnBhcnNlUXVlcnlQYXJhbXMoKSxhLnBhcnNl'@;
put 'RnJhZ21lbnQoKSl9c2VyaWFsaXplKGwpe2NvbnN0IGE9YC8ke1Z5KGwucm9vdCwhMCl9YCxkPWZ1bmN0aW9uIHg0ZShjKXtjb25zdCBsPU9iamVjdC5lbnRyaWVzKGMpLm1hcCgoW2EsZF0pPT5BcnJheS5pc0FycmF5KGQpP2QubWFwKGg9PmAke0NrKGEpfT0ke0NrKGgpfWApLmpvaW4oIiYi'@;
put 'KTpgJHtDayhhKX09JHtDayhkKX1gKS5maWx0ZXIoYT0+YSk7cmV0dXJuIGwubGVuZ3RoP2A/JHtsLmpvaW4oIiYiKX1gOiIifShsLnF1ZXJ5UGFyYW1zKTtyZXR1cm5gJHthfSR7ZH0keyJzdHJpbmciPT10eXBlb2YgbC5mcmFnbWVudD9gIyR7ZnVuY3Rpb24gQzRlKGMpe3JldHVybiBlbmNv'@;
put 'ZGVVUkkoYyl9KGwuZnJhZ21lbnQpfWA6IiJ9YH19Y29uc3QgTTRlPW5ldyBhRjtmdW5jdGlvbiBNayhjKXtyZXR1cm4gYy5zZWdtZW50cy5tYXAobD0+VUsobCkpLmpvaW4oIi8iKX1mdW5jdGlvbiBWeShjLGwpe2lmKCFjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIE1rKGMpO2lmKGwpe2NvbnN0'@;
put 'IGE9Yy5jaGlsZHJlblt3c10/VnkoYy5jaGlsZHJlblt3c10sITEpOiIiLGQ9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtoLGZdKT0+e2ghPT13cyYmZC5wdXNoKGAke2h9OiR7VnkoZiwhMSl9YCl9KSxkLmxlbmd0aD4wP2Ake2F9KCR7ZC5qb2luKCIv'@;
put 'LyIpfSlgOmF9e2NvbnN0IGE9ZnVuY3Rpb24gdzRlKGMsbCl7bGV0IGE9W107cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2Q9PT13cyYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChb'@;
put 'ZCxoXSk9PntkIT09d3MmJihhPWEuY29uY2F0KGwoaCxkKSkpfSksYX0oYywoZCxoKT0+aD09PXdzP1tWeShjLmNoaWxkcmVuW3dzXSwhMSldOltgJHtofToke1Z5KGQsITEpfWBdKTtyZXR1cm4gMT09PU9iamVjdC5rZXlzKGMuY2hpbGRyZW4pLmxlbmd0aCYmbnVsbCE9Yy5jaGlsZHJlblt3'@;
put 'c10/YCR7TWsoYyl9LyR7YVswXX1gOmAke01rKGMpfS8oJHthLmpvaW4oIi8vIil9KWB9fWZ1bmN0aW9uIFlLKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2Uo'@;
put 'LyUyQy9naSwiLCIpfWZ1bmN0aW9uIENrKGMpe3JldHVybiBZSyhjKS5yZXBsYWNlKC8lM0IvZ2ksIjsiKX1mdW5jdGlvbiBsRihjKXtyZXR1cm4gWUsoYykucmVwbGFjZSgvXCgvZywiJTI4IikucmVwbGFjZSgvXCkvZywiJTI5IikucmVwbGFjZSgvJTI2L2dpLCImIil9ZnVuY3Rpb24gU2so'@;
put 'Yyl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChjKX1mdW5jdGlvbiB6SyhjKXtyZXR1cm4gU2soYy5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gVUsoYyl7cmV0dXJuYCR7bEYoYy5wYXRoKX0ke2Z1bmN0aW9uIFM0ZShjKXtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykubWFwKChb'@;
put 'bCxhXSk9PmA7JHtsRihsKX09JHtsRihhKX1gKS5qb2luKCIiKX0oYy5wYXJhbWV0ZXJzKX1gfWNvbnN0IGs0ZT0vXlteXC8oKT87I10rLztmdW5jdGlvbiBjRihjKXtjb25zdCBsPWMubWF0Y2goazRlKTtyZXR1cm4gbD9sWzBdOiIifWNvbnN0IEU0ZT0vXlteXC8oKT87PSNdKy8sRDRlPS9e'@;
put 'W149PyYjXSsvLEw0ZT0vXlteJiNdKy87Y2xhc3MgUjRle2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWwsdGhpcy5yZW1haW5pbmc9bH1wYXJzZVJvb3RTZWdtZW50KCl7cmV0dXJuIHRoaXMuY29uc3VtZU9wdGlvbmFsKCIvIiksIiI9PT10aGlzLnJlbWFpbmluZ3x8dGhpcy5wZWVrU3RhcnRz'@;
put 'V2l0aCgiPyIpfHx0aGlzLnBlZWtTdGFydHNXaXRoKCIjIik/bmV3IFVhKFtdLHt9KTpuZXcgVWEoW10sdGhpcy5wYXJzZUNoaWxkcmVuKCkpfXBhcnNlUXVlcnlQYXJhbXMoKXtjb25zdCBsPXt9O2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI/IikpZG97dGhpcy5wYXJzZVF1ZXJ5UGFyYW0o'@;
put 'bCl9d2hpbGUodGhpcy5jb25zdW1lT3B0aW9uYWwoIiYiKSk7cmV0dXJuIGx9cGFyc2VGcmFnbWVudCgpe3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiIyIpP2RlY29kZVVSSUNvbXBvbmVudCh0aGlzLnJlbWFpbmluZyk6bnVsbH1wYXJzZUNoaWxkcmVuKCl7aWYoIiI9PT10aGlzLnJl'@;
put 'bWFpbmluZylyZXR1cm57fTt0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpO2NvbnN0IGw9W107Zm9yKHRoaXMucGVla1N0YXJ0c1dpdGgoIigiKXx8bC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO3RoaXMucGVla1N0YXJ0c1dpdGgoIi8iKSYmIXRoaXMucGVla1N0YXJ0c1dpdGgoIi8vIikm'@;
put 'JiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvKCIpOyl0aGlzLmNhcHR1cmUoIi8iKSxsLnB1c2godGhpcy5wYXJzZVNlZ21lbnQoKSk7bGV0IGE9e307dGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKSYmKHRoaXMuY2FwdHVyZSgiLyIpLGE9dGhpcy5wYXJzZVBhcmVucyghMCkpO2xldCBkPXt9O3Jl'@;
put 'dHVybiB0aGlzLnBlZWtTdGFydHNXaXRoKCIoIikmJihkPXRoaXMucGFyc2VQYXJlbnMoITEpKSwobC5sZW5ndGg+MHx8T2JqZWN0LmtleXMoYSkubGVuZ3RoPjApJiYoZFt3c109bmV3IFVhKGwsYSkpLGR9cGFyc2VTZWdtZW50KCl7Y29uc3QgbD1jRih0aGlzLnJlbWFpbmluZyk7aWYoIiI9'@;
put 'PT1sJiZ0aGlzLnBlZWtTdGFydHNXaXRoKCI7IikpdGhyb3cgbmV3IHpuKDQwMDksITEpO3JldHVybiB0aGlzLmNhcHR1cmUobCksbmV3IE55KFNrKGwpLHRoaXMucGFyc2VNYXRyaXhQYXJhbXMoKSl9cGFyc2VNYXRyaXhQYXJhbXMoKXtjb25zdCBsPXt9O2Zvcig7dGhpcy5jb25zdW1lT3B0'@;
put 'aW9uYWwoIjsiKTspdGhpcy5wYXJzZVBhcmFtKGwpO3JldHVybiBsfXBhcnNlUGFyYW0obCl7Y29uc3QgYT1mdW5jdGlvbiBUNGUoYyl7Y29uc3QgbD1jLm1hdGNoKEU0ZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO2lmKCFhKXJldHVybjt0aGlzLmNhcHR1cmUoYSk7bGV0'@;
put 'IGQ9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9uYWwoIj0iKSl7Y29uc3QgaD1jRih0aGlzLnJlbWFpbmluZyk7aCYmKGQ9aCx0aGlzLmNhcHR1cmUoZCkpfWxbU2soYSldPVNrKGQpfXBhcnNlUXVlcnlQYXJhbShsKXtjb25zdCBhPWZ1bmN0aW9uIEE0ZShjKXtjb25zdCBsPWMubWF0Y2goRDRl'@;
put 'KTtyZXR1cm4gbD9sWzBdOiIifSh0aGlzLnJlbWFpbmluZyk7aWYoIWEpcmV0dXJuO3RoaXMuY2FwdHVyZShhKTtsZXQgZD0iIjtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPSIpKXtjb25zdCB2PWZ1bmN0aW9uIEk0ZShjKXtjb25zdCBsPWMubWF0Y2goTDRlKTtyZXR1cm4gbD9sWzBdOiIi'@;
put 'fSh0aGlzLnJlbWFpbmluZyk7diYmKGQ9dix0aGlzLmNhcHR1cmUoZCkpfWNvbnN0IGg9eksoYSksZj16SyhkKTtpZihsLmhhc093blByb3BlcnR5KGgpKXtsZXQgdj1sW2hdO0FycmF5LmlzQXJyYXkodil8fCh2PVt2XSxsW2hdPXYpLHYucHVzaChmKX1lbHNlIGxbaF09Zn1wYXJzZVBhcmVu'@;
put 'cyhsKXtjb25zdCBhPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXtjb25zdCBkPWNGKHRoaXMucmVtYWluaW5nKSxoPXRoaXMucmVtYWluaW5nW2QubGVuZ3RoXTtpZigiLyIhPT1oJiYiKSIhPT1o'@;
put 'JiYiOyIhPT1oKXRocm93IG5ldyB6big0MDEwLCExKTtsZXQgZjtkLmluZGV4T2YoIjoiKT4tMT8oZj1kLnNsaWNlKDAsZC5pbmRleE9mKCI6IikpLHRoaXMuY2FwdHVyZShmKSx0aGlzLmNhcHR1cmUoIjoiKSk6bCYmKGY9d3MpO2NvbnN0IHY9dGhpcy5wYXJzZUNoaWxkcmVuKCk7YVtmXT0x'@;
put 'PT09T2JqZWN0LmtleXModikubGVuZ3RoP3Zbd3NdOm5ldyBVYShbXSx2KSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gYX1wZWVrU3RhcnRzV2l0aChsKXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChsKX1jb25zdW1lT3B0aW9uYWwobCl7cmV0dXJuISF0aGlz'@;
put 'LnBlZWtTdGFydHNXaXRoKGwpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKGwubGVuZ3RoKSwhMCl9Y2FwdHVyZShsKXtpZighdGhpcy5jb25zdW1lT3B0aW9uYWwobCkpdGhyb3cgbmV3IHpuKDQwMTEsITEpfX1mdW5jdGlvbiBaSyhjKXtyZXR1cm4gYy5zZWdt'@;
put 'ZW50cy5sZW5ndGg+MD9uZXcgVWEoW10se1t3c106Y30pOmN9ZnVuY3Rpb24gV0soYyl7Y29uc3QgbD17fTtmb3IoY29uc3RbZCxoXW9mIE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pKXtjb25zdCBmPVdLKGgpO2lmKGQ9PT13cyYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxk'@;
put 'cmVuKCkpZm9yKGNvbnN0W3YsVF1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW3ZdPVQ7ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0NoaWxkcmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gTzRlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hp'@;
put 'bGRyZW5bd3NdKXtjb25zdCBsPWMuY2hpbGRyZW5bd3NdO3JldHVybiBuZXcgVWEoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9cmV0dXJuIGN9KG5ldyBVYShjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBxOChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEc4fWZ1bmN0'@;
put 'aW9uIEdLKGMpe2xldCBsO2NvbnN0IGg9WksoZnVuY3Rpb24gYShmKXtjb25zdCB2PXt9O2Zvcihjb25zdCBZIG9mIGYuY2hpbGRyZW4pe2NvbnN0IHJlPWEoWSk7dltZLm91dGxldF09cmV9Y29uc3QgVD1uZXcgVWEoZi51cmwsdik7cmV0dXJuIGY9PT1jJiYobD1UKSxUfShjLnJvb3QpKTty'@;
put 'ZXR1cm4gbD8/aH1mdW5jdGlvbiAkSyhjLGwsYSxkKXtsZXQgaD1jO2Zvcig7aC5wYXJlbnQ7KWg9aC5wYXJlbnQ7aWYoMD09PWwubGVuZ3RoKXJldHVybiB1RihoLGgsaCxhLGQpO2NvbnN0IGY9ZnVuY3Rpb24gRjRlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgY1swXSYmMT09PWMubGVuZ3Ro'@;
put 'JiYiLyI9PT1jWzBdKXJldHVybiBuZXcgS0soITAsMCxjKTtsZXQgbD0wLGE9ITE7Y29uc3QgZD1jLnJlZHVjZSgoaCxmLHYpPT57aWYoIm9iamVjdCI9PXR5cGVvZiBmJiZudWxsIT1mKXtpZihmLm91dGxldHMpe2NvbnN0IFQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGYub3V0bGV0cyku'@;
put 'Zm9yRWFjaCgoW1kscmVdKT0+e1RbWV09InN0cmluZyI9PXR5cGVvZiByZT9yZS5zcGxpdCgiLyIpOnJlfSksWy4uLmgse291dGxldHM6VH1dfWlmKGYuc2VnbWVudFBhdGgpcmV0dXJuWy4uLmgsZi5zZWdtZW50UGF0aF19cmV0dXJuInN0cmluZyIhPXR5cGVvZiBmP1suLi5oLGZdOjA9PT12'@;
put 'PyhmLnNwbGl0KCIvIikuZm9yRWFjaCgoVCxZKT0+ezA9PVkmJiIuIj09PVR8fCgwPT1ZJiYiIj09PVQ/YT0hMDoiLi4iPT09VD9sKys6IiIhPVQmJmgucHVzaChUKSl9KSxoKTpbLi4uaCxmXX0sW10pO3JldHVybiBuZXcgS0soYSxsLGQpfShsKTtpZihmLnRvUm9vdCgpKXJldHVybiB1Riho'@;
put 'LGgsbmV3IFVhKFtdLHt9KSxhLGQpO2NvbnN0IHY9ZnVuY3Rpb24gSDRlKGMsbCxhKXtpZihjLmlzQWJzb2x1dGUpcmV0dXJuIG5ldyBrayhsLCEwLDApO2lmKCFhKXJldHVybiBuZXcga2sobCwhMSxOYU4pO2lmKG51bGw9PT1hLnBhcmVudClyZXR1cm4gbmV3IGtrKGEsITAsMCk7Y29uc3Qg'@;
put 'ZD14ayhjLmNvbW1hbmRzWzBdKT8wOjE7cmV0dXJuIGZ1bmN0aW9uIE40ZShjLGwsYSl7bGV0IGQ9YyxoPWwsZj1hO2Zvcig7Zj5oOyl7aWYoZi09aCxkPWQucGFyZW50LCFkKXRocm93IG5ldyB6big0MDA1LCExKTtoPWQuc2VnbWVudHMubGVuZ3RofXJldHVybiBuZXcga2soZCwhMSxoLWYp'@;
put 'fShhLGEuc2VnbWVudHMubGVuZ3RoLTErZCxjLm51bWJlck9mRG91YmxlRG90cyl9KGYsaCxjKSxUPXYucHJvY2Vzc0NoaWxkcmVuP0J5KHYuc2VnbWVudEdyb3VwLHYuaW5kZXgsZi5jb21tYW5kcyk6WEsodi5zZWdtZW50R3JvdXAsdi5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4gdUYoaCx2'@;
put 'LnNlZ21lbnRHcm91cCxULGEsZCl9ZnVuY3Rpb24geGsoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdtZW50UGF0aH1mdW5jdGlvbiBqeShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlv'@;
put 'biB1RihjLGwsYSxkLGgpe2xldCB2LGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW1kscmVdKT0+e2ZbWV09QXJyYXkuaXNBcnJheShyZSk/cmUubWFwKGZlPT5gJHtmZX1gKTpgJHtyZX1gfSksdj1jPT09bD9hOnFLKGMsbCxhKTtjb25zdCBUPVpLKFdLKHYpKTtyZXR1cm4g'@;
put 'bmV3IEc4KFQsZixoKX1mdW5jdGlvbiBxSyhjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0pPT57ZFtoXT1mPT09bD9hOnFLKGYsbCxhKX0pLG5ldyBVYShjLnNlZ21lbnRzLGQpfWNsYXNzIEtLe2NvbnN0cnVjdG9yKGws'@;
put 'YSxkKXtpZih0aGlzLmlzQWJzb2x1dGU9bCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1hLHRoaXMuY29tbWFuZHM9ZCxsJiZkLmxlbmd0aD4wJiZ4ayhkWzBdKSl0aHJvdyBuZXcgem4oNDAwMywhMSk7Y29uc3QgaD1kLmZpbmQoankpO2lmKGgmJmghPT1GSyhkKSl0aHJvdyBuZXcgem4oNDAw'@;
put 'NCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19fWNsYXNzIGtre2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5p'@;
put 'bmRleD1kfX1mdW5jdGlvbiBYSyhjLGwsYSl7aWYoYz8/PW5ldyBVYShbXSx7fSksMD09PWMuc2VnbWVudHMubGVuZ3RoJiZjLmhhc0NoaWxkcmVuKCkpcmV0dXJuIEJ5KGMsbCxhKTtjb25zdCBkPWZ1bmN0aW9uIGo0ZShjLGwsYSl7bGV0IGQ9MCxoPWw7Y29uc3QgZj17bWF0Y2g6ITEscGF0'@;
put 'aEluZGV4OjAsY29tbWFuZEluZGV4OjB9O2Zvcig7aDxjLnNlZ21lbnRzLmxlbmd0aDspe2lmKGQ+PWEubGVuZ3RoKXJldHVybiBmO2NvbnN0IHY9Yy5zZWdtZW50c1toXSxUPWFbZF07aWYoankoVCkpYnJlYWs7Y29uc3QgWT1gJHtUfWAscmU9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lm'@;
put 'KGg+MCYmdm9pZCAwPT09WSlicmVhaztpZihZJiZyZSYmIm9iamVjdCI9PXR5cGVvZiByZSYmdm9pZCAwPT09cmUub3V0bGV0cyl7aWYoIVFLKFkscmUsdikpcmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFRSyhZLHt9LHYpKXJldHVybiBmO2QrK31oKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRl'@;
put 'eDpoLGNvbW1hbmRJbmRleDpkfX0oYyxsLGEpLGg9YS5zbGljZShkLmNvbW1hbmRJbmRleCk7aWYoZC5tYXRjaCYmZC5wYXRoSW5kZXg8Yy5zZWdtZW50cy5sZW5ndGgpe2NvbnN0IGY9bmV3IFVhKGMuc2VnbWVudHMuc2xpY2UoMCxkLnBhdGhJbmRleCkse30pO3JldHVybiBmLmNoaWxkcmVu'@;
put 'W3dzXT1uZXcgVWEoYy5zZWdtZW50cy5zbGljZShkLnBhdGhJbmRleCksYy5jaGlsZHJlbiksQnkoZiwwLGgpfXJldHVybiBkLm1hdGNoJiYwPT09aC5sZW5ndGg/bmV3IFVhKGMuc2VnbWVudHMse30pOmQubWF0Y2gmJiFjLmhhc0NoaWxkcmVuKCk/ZEYoYyxsLGEpOmQubWF0Y2g/QnkoYyww'@;
put 'LGgpOmRGKGMsbCxhKX1mdW5jdGlvbiBCeShjLGwsYSl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBuZXcgVWEoYy5zZWdtZW50cyx7fSk7e2NvbnN0IGQ9ZnVuY3Rpb24gVjRlKGMpe3JldHVybiBqeShjWzBdKT9jWzBdLm91dGxldHM6e1t3c106Y319KGEpLGg9e307aWYoT2JqZWN0LmtleXMo'@;
put 'ZCkuc29tZShmPT5mIT09d3MpJiZjLmNoaWxkcmVuW3dzXSYmMT09PWMubnVtYmVyT2ZDaGlsZHJlbiYmMD09PWMuY2hpbGRyZW5bd3NdLnNlZ21lbnRzLmxlbmd0aCl7Y29uc3QgZj1CeShjLmNoaWxkcmVuW3dzXSxsLGEpO3JldHVybiBuZXcgVWEoYy5zZWdtZW50cyxmLmNoaWxkcmVuKX1y'@;
put 'ZXR1cm4gT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW2Ysdl0pPT57InN0cmluZyI9PXR5cGVvZiB2JiYodj1bdl0pLG51bGwhPT12JiYoaFtmXT1YSyhjLmNoaWxkcmVuW2ZdLGwsdikpfSksT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2Ysdl0pPT57dm9pZCAwPT09'@;
put 'ZFtmXSYmKGhbZl09dil9KSxuZXcgVWEoYy5zZWdtZW50cyxoKX19ZnVuY3Rpb24gZEYoYyxsLGEpe2NvbnN0IGQ9Yy5zZWdtZW50cy5zbGljZSgwLGwpO2xldCBoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKGp5KGYpKXtjb25zdCBZPUI0ZShmLm91dGxldHMpO3JldHVy'@;
put 'biBuZXcgVWEoZCxZKX1pZigwPT09aCYmeGsoYVswXSkpe2QucHVzaChuZXcgTnkoYy5zZWdtZW50c1tsXS5wYXRoLEpLKGFbMF0pKSksaCsrO2NvbnRpbnVlfWNvbnN0IHY9ankoZik/Zi5vdXRsZXRzW3dzXTpgJHtmfWAsVD1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7diYmVCYmeGsoVCk/'@;
put 'KGQucHVzaChuZXcgTnkodixKSyhUKSkpLGgrPTIpOihkLnB1c2gobmV3IE55KHYse30pKSxoKyspfXJldHVybiBuZXcgVWEoZCx7fSl9ZnVuY3Rpb24gQjRlKGMpe2NvbnN0IGw9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVhY2goKFthLGRdKT0+eyJzdHJpbmciPT10eXBlb2Yg'@;
put 'ZCYmKGQ9W2RdKSxudWxsIT09ZCYmKGxbYV09ZEYobmV3IFVhKFtdLHt9KSwwLGQpKX0pLGx9ZnVuY3Rpb24gSksoYyl7Y29uc3QgbD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYykuZm9yRWFjaCgoW2EsZF0pPT5sW2FdPWAke2R9YCksbH1mdW5jdGlvbiBRSyhjLGwsYSl7cmV0dXJuIGM9'@;
put 'PWEucGF0aCYmZGYobCxhLnBhcmFtZXRlcnMpfWNvbnN0IFl5PSJpbXBlcmF0aXZlIjt2YXIgWXM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OYXZpZ2F0aW9uU3RhcnQ9MF09Ik5hdmlnYXRpb25TdGFydCIsY1tjLk5hdmlnYXRpb25FbmQ9MV09Ik5hdmlnYXRpb25FbmQiLGNbYy5OYXZpZ2F0'@;
put 'aW9uQ2FuY2VsPTJdPSJOYXZpZ2F0aW9uQ2FuY2VsIixjW2MuTmF2aWdhdGlvbkVycm9yPTNdPSJOYXZpZ2F0aW9uRXJyb3IiLGNbYy5Sb3V0ZXNSZWNvZ25pemVkPTRdPSJSb3V0ZXNSZWNvZ25pemVkIixjW2MuUmVzb2x2ZVN0YXJ0PTVdPSJSZXNvbHZlU3RhcnQiLGNbYy5SZXNvbHZlRW5k'@;
put 'PTZdPSJSZXNvbHZlRW5kIixjW2MuR3VhcmRzQ2hlY2tTdGFydD03XT0iR3VhcmRzQ2hlY2tTdGFydCIsY1tjLkd1YXJkc0NoZWNrRW5kPThdPSJHdWFyZHNDaGVja0VuZCIsY1tjLlJvdXRlQ29uZmlnTG9hZFN0YXJ0PTldPSJSb3V0ZUNvbmZpZ0xvYWRTdGFydCIsY1tjLlJvdXRlQ29uZmln'@;
put 'TG9hZEVuZD0xMF09IlJvdXRlQ29uZmlnTG9hZEVuZCIsY1tjLkNoaWxkQWN0aXZhdGlvblN0YXJ0PTExXT0iQ2hpbGRBY3RpdmF0aW9uU3RhcnQiLGNbYy5DaGlsZEFjdGl2YXRpb25FbmQ9MTJdPSJDaGlsZEFjdGl2YXRpb25FbmQiLGNbYy5BY3RpdmF0aW9uU3RhcnQ9MTNdPSJBY3RpdmF0'@;
put 'aW9uU3RhcnQiLGNbYy5BY3RpdmF0aW9uRW5kPTE0XT0iQWN0aXZhdGlvbkVuZCIsY1tjLlNjcm9sbD0xNV09IlNjcm9sbCIsY1tjLk5hdmlnYXRpb25Ta2lwcGVkPTE2XT0iTmF2aWdhdGlvblNraXBwZWQiLGN9KFlzfHx7fSk7Y2xhc3MgaGZ7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWws'@;
put 'dGhpcy51cmw9YX19Y2xhc3MgRWsgZXh0ZW5kcyBoZntjb25zdHJ1Y3RvcihsLGEsZD0iaW1wZXJhdGl2ZSIsaD1udWxsKXtzdXBlcihsLGEpLHRoaXMudHlwZT1Zcy5OYXZpZ2F0aW9uU3RhcnQsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5n'@;
put 'KCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGZmIGV4dGVuZHMgaGZ7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT1Zcy5OYXZpZ2F0aW9uRW5k'@;
put 'fXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX12YXIgSjE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SZWRpcmVjdD0wXT0iUmVk'@;
put 'aXJlY3QiLGNbYy5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uPTFdPSJTdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uIixjW2MuTm9EYXRhRnJvbVJlc29sdmVyPTJdPSJOb0RhdGFGcm9tUmVzb2x2ZXIiLGNbYy5HdWFyZFJlamVjdGVkPTNdPSJHdWFyZFJlamVjdGVkIixjfShKMXx8e30pLFRr'@;
put 'PWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uPTBdPSJJZ25vcmVkU2FtZVVybE5hdmlnYXRpb24iLGNbYy5JZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5PTFdPSJJZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5IixjfShUa3x8e30pO2NsYXNzIEs4'@;
put 'IGV4dGVuZHMgaGZ7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnJlYXNvbj1kLHRoaXMuY29kZT1oLHRoaXMudHlwZT1Zcy5OYXZpZ2F0aW9uQ2FuY2VsfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25DYW5jZWwoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51'@;
put 'cmx9JylgfX1jbGFzcyBYOCBleHRlbmRzIGhme2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9aCx0aGlzLnR5cGU9WXMuTmF2aWdhdGlvblNraXBwZWR9fWNsYXNzIERrIGV4dGVuZHMgaGZ7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIo'@;
put 'bCxhKSx0aGlzLmVycm9yPWQsdGhpcy50YXJnZXQ9aCx0aGlzLnR5cGU9WXMuTmF2aWdhdGlvbkVycm9yfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FcnJvcihpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCBlcnJvcjogJHt0aGlzLmVycm9yfSlgfX1jbGFzcyBlWCBl'@;
put 'eHRlbmRzIGhme2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9WXMuUm91dGVzUmVjb2duaXplZH10b1N0cmluZygpe3JldHVybmBSb3V0ZXNSZWNvZ25pemVkKGlkOiAke3RoaXMuaWR9LCB1cmw6'@;
put 'ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIFk0ZSBleHRlbmRzIGhme2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1k'@;
put 'LHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9WXMuR3VhcmRzQ2hlY2tTdGFydH10b1N0cmluZygpe3JldHVybmBHdWFyZHNDaGVja1N0YXJ0KGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJlY3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0'@;
put 'YXRlOiAke3RoaXMuc3RhdGV9KWB9fWNsYXNzIHo0ZSBleHRlbmRzIGhme2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMuc2hvdWxkQWN0aXZhdGU9Zix0aGlzLnR5cGU9WXMuR3VhcmRzQ2hlY2tFbmR9'@;
put 'dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hlY2tFbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0sIHNob3VsZEFjdGl2YXRlOiAke3RoaXMuc2hv'@;
put 'dWxkQWN0aXZhdGV9KWB9fWNsYXNzIFU0ZSBleHRlbmRzIGhme2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnR5cGU9WXMuUmVzb2x2ZVN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVTdGFydChp'@;
put 'ZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBaNGUgZXh0ZW5kcyBoZntjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMu'@;
put 'dXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPVlzLlJlc29sdmVFbmR9dG9TdHJpbmcoKXtyZXR1cm5gUmVzb2x2ZUVuZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0'@;
put 'c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyBXNGV7Y29uc3RydWN0b3IobCl7dGhpcy5yb3V0ZT1sLHRoaXMudHlwZT1Zcy5Sb3V0ZUNvbmZpZ0xvYWRTdGFydH10b1N0cmluZygpe3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRTdGFydChwYXRoOiAke3RoaXMucm91dGUucGF0aH0p'@;
put 'YH19Y2xhc3MgRzRle2NvbnN0cnVjdG9yKGwpe3RoaXMucm91dGU9bCx0aGlzLnR5cGU9WXMuUm91dGVDb25maWdMb2FkRW5kfXRvU3RyaW5nKCl7cmV0dXJuYFJvdXRlQ29uZmlnTG9hZEVuZChwYXRoOiAke3RoaXMucm91dGUucGF0aH0pYH19Y2xhc3MgJDRle2NvbnN0cnVjdG9yKGwpe3Ro'@;
put 'aXMuc25hcHNob3Q9bCx0aGlzLnR5cGU9WXMuQ2hpbGRBY3RpdmF0aW9uU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gQ2hpbGRBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNs'@;
put 'YXNzIHE0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVlzLkNoaWxkQWN0aXZhdGlvbkVuZH10b1N0cmluZygpe3JldHVybmBDaGlsZEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNv'@;
put 'bmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIEs0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVlzLkFjdGl2YXRpb25TdGFydH10b1N0cmluZygpe3JldHVybmBBY3RpdmF0aW9uU3RhcnQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5z'@;
put 'bmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIFg0ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVlzLkFjdGl2YXRpb25FbmR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvbkVuZChwYXRoOiAnJHt0aGlzLnNuYXBzaG90LnJvdXRlQ29u'@;
put 'ZmlnJiZ0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnLnBhdGh8fCIifScpYH19Y2xhc3MgdFh7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm91dGVyRXZlbnQ9bCx0aGlzLnBvc2l0aW9uPWEsdGhpcy5hbmNob3I9ZCx0aGlzLnR5cGU9WXMuU2Nyb2xsfXRvU3RyaW5nKCl7cmV0dXJuYFNjcm9s'@;
put 'bChhbmNob3I6ICcke3RoaXMuYW5jaG9yfScsIHBvc2l0aW9uOiAnJHt0aGlzLnBvc2l0aW9uP2Ake3RoaXMucG9zaXRpb25bMF19LCAke3RoaXMucG9zaXRpb25bMV19YDpudWxsfScpYH19Y2xhc3MgaEZ7fWNsYXNzIGZGe2NvbnN0cnVjdG9yKGwpe3RoaXMudXJsPWx9fWNsYXNzIEo0ZXtj'@;
put 'b25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0PW51bGwsdGhpcy5yb3V0ZT1udWxsLHRoaXMuaW5qZWN0b3I9bnVsbCx0aGlzLmNoaWxkcmVuPW5ldyB6eSx0aGlzLmF0dGFjaFJlZj1udWxsfX1sZXQgenk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29udGV4dHM9bmV3IE1hcH1v'@;
put 'bkNoaWxkT3V0bGV0Q3JlYXRlZChhLGQpe2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZUNvbnRleHQoYSk7aC5vdXRsZXQ9ZCx0aGlzLmNvbnRleHRzLnNldChhLGgpfW9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoYSl7Y29uc3QgZD10aGlzLmdldENvbnRleHQoYSk7ZCYmKGQub3V0bGV0PW51bGws'@;
put 'ZC5hdHRhY2hSZWY9bnVsbCl9b25PdXRsZXREZWFjdGl2YXRlZCgpe2NvbnN0IGE9dGhpcy5jb250ZXh0cztyZXR1cm4gdGhpcy5jb250ZXh0cz1uZXcgTWFwLGF9b25PdXRsZXRSZUF0dGFjaGVkKGEpe3RoaXMuY29udGV4dHM9YX1nZXRPckNyZWF0ZUNvbnRleHQoYSl7bGV0IGQ9dGhpcy5n'@;
put 'ZXRDb250ZXh0KGEpO3JldHVybiBkfHwoZD1uZXcgSjRlLHRoaXMuY29udGV4dHMuc2V0KGEsZCkpLGR9Z2V0Q29udGV4dChhKXtyZXR1cm4gdGhpcy5jb250ZXh0cy5nZXQoYSl8fG51bGx9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3Rh'@;
put 'dGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y2xhc3Mgblh7Y29uc3RydWN0b3IobCl7dGhpcy5fcm9vdD1sfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9cGFyZW50'@;
put 'KGwpe2NvbnN0IGE9dGhpcy5wYXRoRnJvbVJvb3QobCk7cmV0dXJuIGEubGVuZ3RoPjE/YVthLmxlbmd0aC0yXTpudWxsfWNoaWxkcmVuKGwpe2NvbnN0IGE9cEYobCx0aGlzLl9yb290KTtyZXR1cm4gYT9hLmNoaWxkcmVuLm1hcChkPT5kLnZhbHVlKTpbXX1maXJzdENoaWxkKGwpe2NvbnN0'@;
put 'IGE9cEYobCx0aGlzLl9yb290KTtyZXR1cm4gYSYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9c2libGluZ3MobCl7Y29uc3QgYT1tRihsLHRoaXMuX3Jvb3QpO3JldHVybiBhLmxlbmd0aDwyP1tdOmFbYS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGg9Pmgu'@;
put 'dmFsdWUpLmZpbHRlcihoPT5oIT09bCl9cGF0aEZyb21Sb290KGwpe3JldHVybiBtRihsLHRoaXMuX3Jvb3QpLm1hcChhPT5hLnZhbHVlKX19ZnVuY3Rpb24gcEYoYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm4gbDtmb3IoY29uc3QgYSBvZiBsLmNoaWxkcmVuKXtjb25zdCBkPXBGKGMsYSk7'@;
put 'aWYoZClyZXR1cm4gZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBtRihjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybltsXTtmb3IoY29uc3QgYSBvZiBsLmNoaWxkcmVuKXtjb25zdCBkPW1GKGMsYSk7aWYoZC5sZW5ndGgpcmV0dXJuIGQudW5zaGlmdChsKSxkfXJldHVybltdfWNsYXNzIEpoe2Nv'@;
put 'bnN0cnVjdG9yKGwsYSl7dGhpcy52YWx1ZT1sLHRoaXMuY2hpbGRyZW49YX10b1N0cmluZygpe3JldHVybmBUcmVlTm9kZSgke3RoaXMudmFsdWV9KWB9fWZ1bmN0aW9uIEo4KGMpe2NvbnN0IGw9e307cmV0dXJuIGMmJmMuY2hpbGRyZW4uZm9yRWFjaChhPT5sW2EudmFsdWUub3V0bGV0XT1h'@;
put 'KSxsfWNsYXNzIHJYIGV4dGVuZHMgblh7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsKSx0aGlzLnNuYXBzaG90PWEsdkYodGhpcyxsKX10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90LnRvU3RyaW5nKCl9fWZ1bmN0aW9uIGlYKGMpe2NvbnN0IGw9ZnVuY3Rpb24gUTRlKGMpe2NvbnN0'@;
put 'IGY9bmV3IF9GKFtdLHt9LHt9LCIiLHt9LHdzLGMsbnVsbCx7fSk7cmV0dXJuIG5ldyBvWCgiIixuZXcgSmgoZixbXSkpfShjKSxhPW5ldyBBcihbbmV3IE55KCIiLHt9KV0pLGQ9bmV3IEFyKHt9KSxoPW5ldyBBcih7fSksZj1uZXcgQXIoe30pLHY9bmV3IEFyKCIiKSxUPW5ldyBNYyhhLGQs'@;
put 'Zix2LGgsd3MsYyxsLnJvb3QpO3JldHVybiBULnNuYXBzaG90PWwucm9vdCxuZXcgclgobmV3IEpoKFQsW10pLGwpfWNsYXNzIE1je2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LFQsWSl7dGhpcy51cmxTdWJqZWN0PWwsdGhpcy5wYXJhbXNTdWJqZWN0PWEsdGhpcy5xdWVyeVBhcmFtc1N1Ympl'@;
put 'Y3Q9ZCx0aGlzLmZyYWdtZW50U3ViamVjdD1oLHRoaXMuZGF0YVN1YmplY3Q9Zix0aGlzLm91dGxldD12LHRoaXMuY29tcG9uZW50PVQsdGhpcy5fZnV0dXJlU25hcHNob3Q9WSx0aGlzLnRpdGxlPXRoaXMuZGF0YVN1YmplY3Q/LnBpcGUoeXIocmU9PnJlW0h5XSkpPz9Obyh2b2lkIDApLHRo'@;
put 'aXMudXJsPWwsdGhpcy5wYXJhbXM9YSx0aGlzLnF1ZXJ5UGFyYW1zPWQsdGhpcy5mcmFnbWVudD1oLHRoaXMuZGF0YT1mfWdldCByb3V0ZUNvbmZpZygpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZ31nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5y'@;
put 'b290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRo'@;
put 'aXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXRoaXMucGFyYW1zLnBpcGUoeXIobD0+VzgobCkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJh'@;
put 'bU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dGhpcy5xdWVyeVBhcmFtcy5waXBlKHlyKGw9Plc4KGwpKSksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5f'@;
put 'ZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIGdGKGMsbCxhPSJlbXB0eU9ubHkiKXtsZXQgZDtjb25zdHtyb3V0ZUNvbmZpZzpofT1jO3JldHVybiBkPW51bGw9PT1sfHwiYWx3YXlzIiE9PWEmJiIiIT09aD8ucGF0aCYmKGwuY29tcG9uZW50fHxsLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9u'@;
put 'ZW50KT97cGFyYW1zOnsuLi5jLnBhcmFtc30sZGF0YTp7Li4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRhPz97fX19OntwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmMucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRh'@;
put 'dGEsLi4ubC5kYXRhLC4uLmg/LmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRhfX0saCYmYVgoaCkmJihkLnJlc29sdmVbSHldPWgudGl0bGUpLGR9Y2xhc3MgX0Z7Z2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGF0YT8uW0h5XX1jb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixULFkscmUpe3RoaXMudXJs'@;
put 'PWwsdGhpcy5wYXJhbXM9YSx0aGlzLnF1ZXJ5UGFyYW1zPWQsdGhpcy5mcmFnbWVudD1oLHRoaXMuZGF0YT1mLHRoaXMub3V0bGV0PXYsdGhpcy5jb21wb25lbnQ9VCx0aGlzLnJvdXRlQ29uZmlnPVksdGhpcy5fcmVzb2x2ZT1yZX1nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0'@;
put 'ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVu'@;
put 'KHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgpe3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PVc4KHRoaXMucGFyYW1zKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVy'@;
put 'biB0aGlzLl9xdWVyeVBhcmFtTWFwPz89VzgodGhpcy5xdWVyeVBhcmFtcyksdGhpcy5fcXVlcnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybmBSb3V0ZSh1cmw6JyR7dGhpcy51cmwubWFwKGQ9PmQudG9TdHJpbmcoKSkuam9pbigiLyIpfScsIHBhdGg6JyR7dGhpcy5yb3V0ZUNvbmZpZz90'@;
put 'aGlzLnJvdXRlQ29uZmlnLnBhdGg6IiJ9JylgfX1jbGFzcyBvWCBleHRlbmRzIG5Ye2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoYSksdGhpcy51cmw9bCx2Rih0aGlzLGEpfXRvU3RyaW5nKCl7cmV0dXJuIHNYKHRoaXMuX3Jvb3QpfX1mdW5jdGlvbiB2RihjLGwpe2wudmFsdWUuX3JvdXRlclN0'@;
put 'YXRlPWMsbC5jaGlsZHJlbi5mb3JFYWNoKGE9PnZGKGMsYSkpfWZ1bmN0aW9uIHNYKGMpe2NvbnN0IGw9Yy5jaGlsZHJlbi5sZW5ndGg+MD9gIHsgJHtjLmNoaWxkcmVuLm1hcChzWCkuam9pbigiLCAiKX0gfSBgOiIiO3JldHVybmAke2MudmFsdWV9JHtsfWB9ZnVuY3Rpb24geUYoYyl7aWYo'@;
put 'Yy5zbmFwc2hvdCl7Y29uc3QgbD1jLnNuYXBzaG90LGE9Yy5fZnV0dXJlU25hcHNob3Q7Yy5zbmFwc2hvdD1hLGRmKGwucXVlcnlQYXJhbXMsYS5xdWVyeVBhcmFtcyl8fGMucXVlcnlQYXJhbXNTdWJqZWN0Lm5leHQoYS5xdWVyeVBhcmFtcyksbC5mcmFnbWVudCE9PWEuZnJhZ21lbnQmJmMu'@;
put 'ZnJhZ21lbnRTdWJqZWN0Lm5leHQoYS5mcmFnbWVudCksZGYobC5wYXJhbXMsYS5wYXJhbXMpfHxjLnBhcmFtc1N1YmplY3QubmV4dChhLnBhcmFtcyksZnVuY3Rpb24gZzRlKGMsbCl7aWYoYy5sZW5ndGghPT1sLmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IGE9MDthPGMubGVuZ3RoOysrYSlp'@;
put 'ZighZGYoY1thXSxsW2FdKSlyZXR1cm4hMTtyZXR1cm4hMH0obC51cmwsYS51cmwpfHxjLnVybFN1YmplY3QubmV4dChhLnVybCksZGYobC5kYXRhLGEuZGF0YSl8fGMuZGF0YVN1YmplY3QubmV4dChhLmRhdGEpfWVsc2UgYy5zbmFwc2hvdD1jLl9mdXR1cmVTbmFwc2hvdCxjLmRhdGFTdWJq'@;
put 'ZWN0Lm5leHQoYy5fZnV0dXJlU25hcHNob3QuZGF0YSl9ZnVuY3Rpb24gYkYoYyxsKXtjb25zdCBhPWRmKGMucGFyYW1zLGwucGFyYW1zKSYmZnVuY3Rpb24gYjRlKGMsbCl7cmV0dXJuIFc1KGMsbCkmJmMuZXZlcnkoKGEsZCk9PmRmKGEucGFyYW1ldGVycyxsW2RdLnBhcmFtZXRlcnMpKX0o'@;
put 'Yy51cmwsbC51cmwpO3JldHVybiBhJiYhKCFjLnBhcmVudCE9IWwucGFyZW50KSYmKCFjLnBhcmVudHx8YkYoYy5wYXJlbnQsbC5wYXJlbnQpKX1mdW5jdGlvbiBhWChjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMudGl0bGV8fG51bGw9PT1jLnRpdGxlfWxldCBJND0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKCl7dGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMubmFtZT13cyx0aGlzLmFjdGl2YXRlRXZlbnRzPW5ldyBJcix0aGlzLmRlYWN0aXZhdGVFdmVudHM9bmV3IElyLHRoaXMuYXR0YWNoRXZlbnRzPW5ldyBJcix0aGlzLmRldGFj'@;
put 'aEV2ZW50cz1uZXcgSXIsdGhpcy5wYXJlbnRDb250ZXh0cz1Wcih6eSksdGhpcy5sb2NhdGlvbj1WcihwcyksdGhpcy5jaGFuZ2VEZXRlY3Rvcj1WcihGYSksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPVZyKGRsKSx0aGlzLmlucHV0QmluZGVyPVZyKEFrLHtvcHRpb25hbDohMH0pLHRoaXMu'@;
put 'c3VwcG9ydHNCaW5kaW5nVG9Db21wb25lbnRJbnB1dHM9ITB9Z2V0IGFjdGl2YXRlZENvbXBvbmVudFJlZigpe3JldHVybiB0aGlzLmFjdGl2YXRlZH1uZ09uQ2hhbmdlcyhhKXtpZihhLm5hbWUpe2NvbnN0e2ZpcnN0Q2hhbmdlOmQscHJldmlvdXNWYWx1ZTpofT1hLm5hbWU7aWYoZClyZXR1'@;
put 'cm47dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGgpJiYodGhpcy5kZWFjdGl2YXRlKCksdGhpcy5wYXJlbnRDb250ZXh0cy5vbkNoaWxkT3V0bGV0RGVzdHJveWVkKGgpKSx0aGlzLmluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpfX1uZ09uRGVzdHJveSgpe3RoaXMuaXNUcmFja2Vk'@;
put 'SW5QYXJlbnRDb250ZXh0cyh0aGlzLm5hbWUpJiZ0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQodGhpcy5uYW1lKSx0aGlzLmlucHV0QmluZGVyPy51bnN1YnNjcmliZUZyb21Sb3V0ZURhdGEodGhpcyl9aXNUcmFja2VkSW5QYXJlbnRDb250ZXh0cyhhKXtyZXR1'@;
put 'cm4gdGhpcy5wYXJlbnRDb250ZXh0cy5nZXRDb250ZXh0KGEpPy5vdXRsZXQ9PT10aGlzfW5nT25Jbml0KCl7dGhpcy5pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKX1pbml0aWFsaXplT3V0bGV0V2l0aE5hbWUoKXtpZih0aGlzLnBhcmVudENvbnRleHRzLm9uQ2hpbGRPdXRsZXRDcmVhdGVk'@;
put 'KHRoaXMubmFtZSx0aGlzKSx0aGlzLmFjdGl2YXRlZClyZXR1cm47Y29uc3QgYT10aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQodGhpcy5uYW1lKTthPy5yb3V0ZSYmKGEuYXR0YWNoUmVmP3RoaXMuYXR0YWNoKGEuYXR0YWNoUmVmLGEucm91dGUpOnRoaXMuYWN0aXZhdGVXaXRoKGEu'@;
put 'cm91dGUsYS5pbmplY3RvcikpfWdldCBpc0FjdGl2YXRlZCgpe3JldHVybiEhdGhpcy5hY3RpdmF0ZWR9Z2V0IGNvbXBvbmVudCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgem4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlfWdldCBhY3RpdmF0ZWRSb3V0'@;
put 'ZSgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgem4oNDAxMiwhMSk7cmV0dXJuIHRoaXMuX2FjdGl2YXRlZFJvdXRlfWdldCBhY3RpdmF0ZWRSb3V0ZURhdGEoKXtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGU/dGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QuZGF0YTp7fX1k'@;
put 'ZXRhY2goKXtpZighdGhpcy5hY3RpdmF0ZWQpdGhyb3cgbmV3IHpuKDQwMTIsITEpO3RoaXMubG9jYXRpb24uZGV0YWNoKCk7Y29uc3QgYT10aGlzLmFjdGl2YXRlZDtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGV0YWNoRXZlbnRz'@;
put 'LmVtaXQoYS5pbnN0YW5jZSksYX1hdHRhY2goYSxkKXt0aGlzLmFjdGl2YXRlZD1hLHRoaXMuX2FjdGl2YXRlZFJvdXRlPWQsdGhpcy5sb2NhdGlvbi5pbnNlcnQoYS5ob3N0VmlldyksdGhpcy5pbnB1dEJpbmRlcj8uYmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyks'@;
put 'dGhpcy5hdHRhY2hFdmVudHMuZW1pdChhLmluc3RhbmNlKX1kZWFjdGl2YXRlKCl7aWYodGhpcy5hY3RpdmF0ZWQpe2NvbnN0IGE9dGhpcy5jb21wb25lbnQ7dGhpcy5hY3RpdmF0ZWQuZGVzdHJveSgpLHRoaXMuYWN0aXZhdGVkPW51bGwsdGhpcy5fYWN0aXZhdGVkUm91dGU9bnVsbCx0aGlz'@;
put 'LmRlYWN0aXZhdGVFdmVudHMuZW1pdChhKX19YWN0aXZhdGVXaXRoKGEsZCl7aWYodGhpcy5pc0FjdGl2YXRlZCl0aHJvdyBuZXcgem4oNDAxMywhMSk7dGhpcy5fYWN0aXZhdGVkUm91dGU9YTtjb25zdCBoPXRoaXMubG9jYXRpb24sdj1hLnNuYXBzaG90LmNvbXBvbmVudCxUPXRoaXMucGFy'@;
put 'ZW50Q29udGV4dHMuZ2V0T3JDcmVhdGVDb250ZXh0KHRoaXMubmFtZSkuY2hpbGRyZW4sWT1uZXcgd0YoYSxULGguaW5qZWN0b3IpO3RoaXMuYWN0aXZhdGVkPWguY3JlYXRlQ29tcG9uZW50KHYse2luZGV4OmgubGVuZ3RoLGluamVjdG9yOlksZW52aXJvbm1lbnRJbmplY3RvcjpkPz90aGlz'@;
put 'LmVudmlyb25tZW50SW5qZWN0b3J9KSx0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpLHRoaXMuaW5wdXRCaW5kZXI/LmJpbmRBY3RpdmF0ZWRSb3V0ZVRvT3V0bGV0Q29tcG9uZW50KHRoaXMpLHRoaXMuYWN0aXZhdGVFdmVudHMuZW1pdCh0aGlzLmFjdGl2YXRlZC5pbnN0YW5j'@;
put 'ZSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sicm91dGVyLW91dGxldCJdXSxpbnB1dHM6e25hbWU6Im5hbWUifSxvdXRwdXRzOnthY3RpdmF0ZUV2ZW50'@;
put 'czoiYWN0aXZhdGUiLGRlYWN0aXZhdGVFdmVudHM6ImRlYWN0aXZhdGUiLGF0dGFjaEV2ZW50czoiYXR0YWNoIixkZXRhY2hFdmVudHM6ImRldGFjaCJ9LGV4cG9ydEFzOlsib3V0bGV0Il0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbQmFdfSl9cmV0dXJuIGN9KSgpO2NsYXNzIHdGe19fbmdP'@;
put 'dXRsZXRJbmplY3RvcihsKXtyZXR1cm4gbmV3IHdGKHRoaXMucm91dGUsdGhpcy5jaGlsZENvbnRleHRzLGwpfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnJvdXRlPWwsdGhpcy5jaGlsZENvbnRleHRzPWEsdGhpcy5wYXJlbnQ9ZH1nZXQobCxhKXtyZXR1cm4gbD09PU1jP3RoaXMucm91dGU6'@;
put 'bD09PXp5P3RoaXMuY2hpbGRDb250ZXh0czp0aGlzLnBhcmVudC5nZXQobCxhKX19Y29uc3QgQWs9bmV3IFlyKCIiKTtsZXQgbFg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxl'@;
put 'dENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxl'@;
put 'dERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1hLGg9WTgoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlwZSh1MSgoW2YsdixUXSxZKT0+KFQ9ey4uLmYsLi4udiwuLi5UfSwwPT09WT9O'@;
put 'byhUKTpQcm9taXNlLnJlc29sdmUoVCkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29tcG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVE'@;
put 'YXRhKGEpO2NvbnN0IHY9ZnVuY3Rpb24gcTJlKGMpe2NvbnN0IGw9dHMoYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgTDUobCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9yfSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1'@;
put 'dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygpe3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRhbG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3Jl'@;
put 'dHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKHYpZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpUfW9mIHYuaW5wdXRzKWEuYWN0aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KFQsZltUXSk7ZWxzZSB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0'@;
put 'RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVXko'@;
put 'YyxsLGEpe2lmKGEmJmMuc2hvdWxkUmV1c2VSb3V0ZShsLnZhbHVlLGEudmFsdWUuc25hcHNob3QpKXtjb25zdCBkPWEudmFsdWU7ZC5fZnV0dXJlU25hcHNob3Q9bC52YWx1ZTtjb25zdCBoPWZ1bmN0aW9uIHRtZShjLGwsYSl7cmV0dXJuIGwuY2hpbGRyZW4ubWFwKGQ9Pntmb3IoY29uc3Qg'@;
put 'aCBvZiBhLmNoaWxkcmVuKWlmKGMuc2hvdWxkUmV1c2VSb3V0ZShkLnZhbHVlLGgudmFsdWUuc25hcHNob3QpKXJldHVybiBVeShjLGQsaCk7cmV0dXJuIFV5KGMsZCl9KX0oYyxsLGEpO3JldHVybiBuZXcgSmgoZCxoKX17aWYoYy5zaG91bGRBdHRhY2gobC52YWx1ZSkpe2NvbnN0IGY9Yy5y'@;
put 'ZXRyaWV2ZShsLnZhbHVlKTtpZihudWxsIT09Zil7Y29uc3Qgdj1mLnJvdXRlO3JldHVybiB2LnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1sLnZhbHVlLHYuY2hpbGRyZW49bC5jaGlsZHJlbi5tYXAoVD0+VXkoYyxUKSksdn19Y29uc3QgZD1mdW5jdGlvbiBubWUoYyl7cmV0dXJuIG5ldyBNYyhu'@;
put 'ZXcgQXIoYy51cmwpLG5ldyBBcihjLnBhcmFtcyksbmV3IEFyKGMucXVlcnlQYXJhbXMpLG5ldyBBcihjLmZyYWdtZW50KSxuZXcgQXIoYy5kYXRhKSxjLm91dGxldCxjLmNvbXBvbmVudCxjKX0obC52YWx1ZSksaD1sLmNoaWxkcmVuLm1hcChmPT5VeShjLGYpKTtyZXR1cm4gbmV3IEpoKGQs'@;
put 'aCl9fWNvbnN0IGNYPSJuZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciI7ZnVuY3Rpb24gdVgoYyxsKXtjb25zdHtyZWRpcmVjdFRvOmEsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczpkfT1xOChsKT97cmVkaXJlY3RUbzpsLG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM6dm9pZCAwfTpsLGg9'@;
put 'ZFgoITEsSjEuUmVkaXJlY3QpO3JldHVybiBoLnVybD1hLGgubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1kLGh9ZnVuY3Rpb24gZFgoYyxsKXtjb25zdCBhPW5ldyBFcnJvcihgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiAke2N8fCIifWApO3JldHVybiBhW2NYXT0hMCxhLmNhbmNlbGxh'@;
put 'dGlvbkNvZGU9bCxhfWZ1bmN0aW9uIGhYKGMpe3JldHVybiEhYyYmY1tjWF19bGV0IGZYPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1sibmctY29tcG9uZW50Il1dLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W2VQXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmSnQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W0k0XSxlbmNhcHN1bGF0aW9uOjJ9KX1yZXR1cm4gY30pKCk7ZnVu'@;
put 'Y3Rpb24gTUYoYyl7Y29uc3QgbD1jLmNoaWxkcmVuJiZjLmNoaWxkcmVuLm1hcChNRiksYT1sP3suLi5jLGNoaWxkcmVuOmx9OnsuLi5jfTtyZXR1cm4hYS5jb21wb25lbnQmJiFhLmxvYWRDb21wb25lbnQmJihsfHxhLmxvYWRDaGlsZHJlbikmJmEub3V0bGV0JiZhLm91dGxldCE9PXdzJiYo'@;
put 'YS5jb21wb25lbnQ9ZlgpLGF9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuIGMub3V0bGV0fHx3c31mdW5jdGlvbiBaeShjKXtpZighYylyZXR1cm4gbnVsbDtpZihjLnJvdXRlQ29uZmlnPy5faW5qZWN0b3IpcmV0dXJuIGMucm91dGVDb25maWcuX2luamVjdG9yO2ZvcihsZXQgbD1jLnBhcmVudDts'@;
put 'O2w9bC5wYXJlbnQpe2NvbnN0IGE9bC5yb3V0ZUNvbmZpZztpZihhPy5fbG9hZGVkSW5qZWN0b3IpcmV0dXJuIGEuX2xvYWRlZEluamVjdG9yO2lmKGE/Ll9pbmplY3RvcilyZXR1cm4gYS5faW5qZWN0b3J9cmV0dXJuIG51bGx9Y2xhc3MgdW1le2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhp'@;
put 'cy5yb3V0ZVJldXNlU3RyYXRlZ3k9bCx0aGlzLmZ1dHVyZVN0YXRlPWEsdGhpcy5jdXJyU3RhdGU9ZCx0aGlzLmZvcndhcmRFdmVudD1oLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZD1mfWFjdGl2YXRlKGwpe2NvbnN0IGE9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxkPXRoaXMuY3VyclN0YXRl'@;
put 'P3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpLHlGKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKX1kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9SjgoYSk7bC5j'@;
put 'aGlsZHJlbi5mb3JFYWNoKGY9Pntjb25zdCB2PWYudmFsdWUub3V0bGV0O3RoaXMuZGVhY3RpdmF0ZVJvdXRlcyhmLGhbdl0sZCksZGVsZXRlIGhbdl19KSxPYmplY3QudmFsdWVzKGgpLmZvckVhY2goZj0+e3RoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZixkKX0pfWRlYWN0'@;
put 'aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1ZTpudWxsO2lmKGg9PT1mKWlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0Q29udGV4dChoLm91dGxldCk7diYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5k'@;
put 'ZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpO2Vsc2UgZiYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihhLGQpfWRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGwsYSl7bC52YWx1ZS5jb21wb25lbnQmJnRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFj'@;
put 'aChsLnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGwsYSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQobCxhKX1kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQm'@;
put 'JmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPUo4KGwpO2Zvcihjb25zdCB2IG9mIE9iamVjdC52YWx1ZXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih2LGgpO2lmKGQmJmQub3V0bGV0KXtjb25zdCB2PWQub3V0bGV0LmRldGFjaCgpLFQ9ZC5jaGlsZHJl'@;
put 'bi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29tcG9uZW50UmVmOnYscm91dGU6bCxjb250ZXh0czpUfSl9fWRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFs'@;
put 'dWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPUo4KGwpO2Zvcihjb25zdCB2IG9mIE9iamVjdC52YWx1ZXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih2LGgpO2QmJihkLm91dGxldCYmKGQub3V0bGV0LmRlYWN0aXZhdGUoKSxk'@;
put 'LmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksZC5hdHRhY2hSZWY9bnVsbCxkLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9SjgoYSk7bC5jaGlsZHJlbi5mb3JFYWNoKGY9Pnt0aGlzLmFjdGl2YXRlUm91dGVzKGYsaFtmLnZhbHVlLm91dGxl'@;
put 'dF0sZCksdGhpcy5mb3J3YXJkRXZlbnQobmV3IFg0ZShmLnZhbHVlLnNuYXBzaG90KSl9KSxsLmNoaWxkcmVuLmxlbmd0aCYmdGhpcy5mb3J3YXJkRXZlbnQobmV3IHE0ZShsLnZhbHVlLnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1'@;
put 'ZTpudWxsO2lmKHlGKGgpLGg9PT1mKWlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGlmKGgu'@;
put 'Y29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0KTtpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goaC5zbmFwc2hvdCkpe2NvbnN0IFQ9dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoaC5zbmFwc2hvdCk7dGhpcy5yb3V0'@;
put 'ZVJldXNlU3RyYXRlZ3kuc3RvcmUoaC5zbmFwc2hvdCxudWxsKSx2LmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChULmNvbnRleHRzKSx2LmF0dGFjaFJlZj1ULmNvbXBvbmVudFJlZix2LnJvdXRlPVQucm91dGUudmFsdWUsdi5vdXRsZXQmJnYub3V0bGV0LmF0dGFjaChULmNvbXBvbmVu'@;
put 'dFJlZixULnJvdXRlLnZhbHVlKSx5RihULnJvdXRlLnZhbHVlKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hpbGRyZW4pfWVsc2V7Y29uc3QgVD1aeShoLnNuYXBzaG90KTt2LmF0dGFjaFJlZj1udWxsLHYucm91dGU9aCx2LmluamVjdG9yPVQsdi5vdXRsZXQmJnYub3V0'@;
put 'bGV0LmFjdGl2YXRlV2l0aChoLHYuaW5qZWN0b3IpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsdi5jaGlsZHJlbil9fWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxkKX19Y2xhc3MgcFh7Y29uc3RydWN0b3IobCl7dGhpcy5wYXRoPWwsdGhpcy5yb3V0ZT10'@;
put 'aGlzLnBhdGhbdGhpcy5wYXRoLmxlbmd0aC0xXX19Y2xhc3MgTGt7Y29uc3RydWN0b3IobCxhKXt0aGlzLmNvbXBvbmVudD1sLHRoaXMucm91dGU9YX19ZnVuY3Rpb24gZG1lKGMsbCxhKXtjb25zdCBkPWMuX3Jvb3Q7cmV0dXJuIFd5KGQsbD9sLl9yb290Om51bGwsYSxbZC52YWx1ZV0pfWZ1'@;
put 'bmN0aW9uIFE4KGMsbCl7Y29uc3QgYT1TeW1ib2woKSxkPWwuZ2V0KGMsYSk7cmV0dXJuIGQ9PT1hPyJmdW5jdGlvbiIhPXR5cGVvZiBjfHxmdW5jdGlvbiBSYyhjKXtyZXR1cm4gbnVsbCE9PUljKGMpfShjKT9sLmdldChjKTpjOmR9ZnVuY3Rpb24gV3koYyxsLGEsZCxoPXtjYW5EZWFjdGl2'@;
put 'YXRlQ2hlY2tzOltdLGNhbkFjdGl2YXRlQ2hlY2tzOltdfSl7Y29uc3QgZj1KOChsKTtyZXR1cm4gYy5jaGlsZHJlbi5mb3JFYWNoKHY9PnsoZnVuY3Rpb24gZm1lKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9Yy52YWx1'@;
put 'ZSx2PWw/bC52YWx1ZTpudWxsLFQ9YT9hLmdldENvbnRleHQoYy52YWx1ZS5vdXRsZXQpOm51bGw7aWYodiYmZi5yb3V0ZUNvbmZpZz09PXYucm91dGVDb25maWcpe2NvbnN0IFk9ZnVuY3Rpb24gcG1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSlyZXR1cm4gYShjLGwpO3N3aXRj'@;
put 'aChhKXtjYXNlInBhdGhQYXJhbXNDaGFuZ2UiOnJldHVybiFXNShjLnVybCxsLnVybCk7Y2FzZSJwYXRoUGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIVc1KGMudXJsLGwudXJsKXx8IWRmKGMucXVlcnlQYXJhbXMsbC5xdWVyeVBhcmFtcyk7Y2FzZSJhbHdheXMiOnJldHVybiEw'@;
put 'O2Nhc2UicGFyYW1zT3JRdWVyeVBhcmFtc0NoYW5nZSI6cmV0dXJuIWJGKGMsbCl8fCFkZihjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2RlZmF1bHQ6cmV0dXJuIWJGKGMsbCl9fSh2LGYsZi5yb3V0ZUNvbmZpZy5ydW5HdWFyZHNBbmRSZXNvbHZlcnMpO1k/aC5jYW5BY3RpdmF0ZUNo'@;
put 'ZWNrcy5wdXNoKG5ldyBwWChkKSk6KGYuZGF0YT12LmRhdGEsZi5fcmVzb2x2ZWREYXRhPXYuX3Jlc29sdmVkRGF0YSksV3koYyxsLGYuY29tcG9uZW50P1Q/VC5jaGlsZHJlbjpudWxsOmEsZCxoKSxZJiZUJiZULm91dGxldCYmVC5vdXRsZXQuaXNBY3RpdmF0ZWQmJmguY2FuRGVhY3RpdmF0'@;
put 'ZUNoZWNrcy5wdXNoKG5ldyBMayhULm91dGxldC5jb21wb25lbnQsdikpfWVsc2UgdiYmR3kobCxULGgpLGguY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgcFgoZCkpLFd5KGMsbnVsbCxmLmNvbXBvbmVudD9UP1QuY2hpbGRyZW46bnVsbDphLGQsaCl9KSh2LGZbdi52YWx1ZS5vdXRsZXRd'@;
put 'LGEsZC5jb25jYXQoW3YudmFsdWVdKSxoKSxkZWxldGUgZlt2LnZhbHVlLm91dGxldF19KSxPYmplY3QuZW50cmllcyhmKS5mb3JFYWNoKChbdixUXSk9Pkd5KFQsYS5nZXRDb250ZXh0KHYpLGgpKSxofWZ1bmN0aW9uIEd5KGMsbCxhKXtjb25zdCBkPUo4KGMpLGg9Yy52YWx1ZTtPYmplY3Qu'@;
put 'ZW50cmllcyhkKS5mb3JFYWNoKChbZix2XSk9PntHeSh2LGguY29tcG9uZW50P2w/bC5jaGlsZHJlbi5nZXRDb250ZXh0KGYpOm51bGw6bCxhKX0pLGEuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBMayhoLmNvbXBvbmVudCYmbCYmbC5vdXRsZXQmJmwub3V0bGV0LmlzQWN0aXZhdGVk'@;
put 'P2wub3V0bGV0LmNvbXBvbmVudDpudWxsLGgpKX1mdW5jdGlvbiAkeShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBtWChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIHZrfHwiRW1wdHlFcnJvciI9PT1jPy5uYW1lfWNvbnN0IElrPVN5bWJvbCgiSU5JVElBTF9WQUxVRSIp'@;
put 'O2Z1bmN0aW9uIGU3KCl7cmV0dXJuIHUxKGM9Plk4KGMubWFwKGw9PmwucGlwZShLaCgxKSxaNShJaykpKSkucGlwZSh5cihsPT57Zm9yKGNvbnN0IGEgb2YgbClpZighMCE9PWEpe2lmKGE9PT1JaylyZXR1cm4gSWs7aWYoITE9PT1hfHxhIGluc3RhbmNlb2YgRzgpcmV0dXJuIGF9cmV0dXJu'@;
put 'ITB9KSxIYShsPT5sIT09SWspLEtoKDEpKSl9ZnVuY3Rpb24gZ1goYyl7cmV0dXJuIGZ1bmN0aW9uIGVuKC4uLmMpe3JldHVybiBQbihjKX0obHUobD0+e2lmKHE4KGwpKXRocm93IHVYKDAsbCl9KSx5cihsPT4hMD09PWwpKX1jbGFzcyBDRntjb25zdHJ1Y3RvcihsKXt0aGlzLnNlZ21lbnRH'@;
put 'cm91cD1sfHxudWxsfX1jbGFzcyBTRiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy51cmxUcmVlPWx9fWZ1bmN0aW9uIHQ3KGMpe3JldHVybiB5ayhuZXcgQ0YoYykpfWNsYXNzIFJtZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMu'@;
put 'dXJsVHJlZT1hfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1kLmNvbmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBObyhkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bd3NdKXJl'@;
put 'dHVybiB5ayhuZXcgem4oNGUzLCExKSk7aD1oLmNoaWxkcmVuW3dzXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsYSxkKXtjb25zdCBoPXRoaXMuYXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYSksbCxkKTtpZihhLnN0YXJ0c1dpdGgoIi8i'@;
put 'KSl0aHJvdyBuZXcgU0YoaCk7cmV0dXJuIGh9YXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUobCxhLGQsaCl7Y29uc3QgZj10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLGEucm9vdCxkLGgpO3JldHVybiBuZXcgRzgoZix0aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGEucXVlcnlQYXJhbXMsdGhp'@;
put 'cy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxhLmZyYWdtZW50KX1jcmVhdGVRdWVyeVBhcmFtcyhsLGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFtoLGZdKT0+e2lmKCJzdHJpbmciPT10eXBlb2YgZiYmZi5zdGFydHNXaXRoKCI6Iikpe2NvbnN0IFQ9Zi5z'@;
put 'dWJzdHJpbmcoMSk7ZFtoXT1hW1RdfWVsc2UgZFtoXT1mfSksZH1jcmVhdGVTZWdtZW50R3JvdXAobCxhLGQsaCl7Y29uc3QgZj10aGlzLmNyZWF0ZVNlZ21lbnRzKGwsYS5zZWdtZW50cyxkLGgpO2xldCB2PXt9O3JldHVybiBPYmplY3QuZW50cmllcyhhLmNoaWxkcmVuKS5mb3JFYWNoKChb'@;
put 'VCxZXSk9Pnt2W1RdPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKGwsWSxkLGgpfSksbmV3IFVhKGYsdil9Y3JlYXRlU2VnbWVudHMobCxhLGQsaCl7cmV0dXJuIGEubWFwKGY9PmYucGF0aC5zdGFydHNXaXRoKCI6Iik/dGhpcy5maW5kUG9zUGFyYW0obCxmLGgpOnRoaXMuZmluZE9yUmV0dXJu'@;
put 'KGYsZCkpfWZpbmRQb3NQYXJhbShsLGEsZCl7Y29uc3QgaD1kW2EucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFoKXRocm93IG5ldyB6big0MDAxLCExKTtyZXR1cm4gaH1maW5kT3JSZXR1cm4obCxhKXtsZXQgZD0wO2Zvcihjb25zdCBoIG9mIGEpe2lmKGgucGF0aD09PWwucGF0aClyZXR1cm4g'@;
put 'YS5zcGxpY2UoZCksaDtkKyt9cmV0dXJuIGx9fWNvbnN0IHhGPXttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10scmVtYWluaW5nU2VnbWVudHM6W10scGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07ZnVuY3Rpb24gT21lKGMsbCxhLGQsaCl7Y29uc3QgZj1r'@;
put 'RihjLGwsYSk7cmV0dXJuIGYubWF0Y2hlZD8oZD1mdW5jdGlvbiBpbWUoYyxsKXtyZXR1cm4gYy5wcm92aWRlcnMmJiFjLl9pbmplY3RvciYmKGMuX2luamVjdG9yPXg4KGMucHJvdmlkZXJzLGwsYFJvdXRlOiAke2MucGF0aH1gKSksYy5faW5qZWN0b3I/P2x9KGwsZCksZnVuY3Rpb24gQW1l'@;
put 'KGMsbCxhLGQpe2NvbnN0IGg9bC5jYW5NYXRjaDtyZXR1cm4gaCYmMCE9PWgubGVuZ3RoP05vKGgubWFwKHY9Pntjb25zdCBUPVE4KHYsYyk7cmV0dXJuIEw0KGZ1bmN0aW9uIGJtZShjKXtyZXR1cm4gYyYmJHkoYy5jYW5NYXRjaCl9KFQpP1QuY2FuTWF0Y2gobCxhKTpldShjLCgpPT5UKGws'@;
put 'YSkpKX0pKS5waXBlKGU3KCksZ1goKSk6Tm8oITApfShkLGwsYSkucGlwZSh5cih2PT4hMD09PXY/Zjp7Li4ueEZ9KSkpOk5vKGYpfWZ1bmN0aW9uIGtGKGMsbCxhKXtpZigiKioiPT09bC5wYXRoKXJldHVybiBmdW5jdGlvbiBQbWUoYyl7cmV0dXJue21hdGNoZWQ6ITAscGFyYW1ldGVyczpj'@;
put 'Lmxlbmd0aD4wP0ZLKGMpLnBhcmFtZXRlcnM6e30sY29uc3VtZWRTZWdtZW50czpjLHJlbWFpbmluZ1NlZ21lbnRzOltdLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnt9fX0oYSk7aWYoIiI9PT1sLnBhdGgpcmV0dXJuImZ1bGwiPT09bC5wYXRoTWF0Y2gmJihjLmhhc0NoaWxkcmVuKCl8fGEu'@;
put 'bGVuZ3RoPjApP3suLi54Rn06e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpbXSxyZW1haW5pbmdTZWdtZW50czphLHBhcmFtZXRlcnM6e30scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O2NvbnN0IGg9KGwubWF0Y2hlcnx8bTRlKShhLGMsbCk7aWYoIWgpcmV0dXJuey4uLnhGfTtj'@;
put 'b25zdCBmPXt9O09iamVjdC5lbnRyaWVzKGgucG9zUGFyYW1zPz97fSkuZm9yRWFjaCgoW1QsWV0pPT57ZltUXT1ZLnBhdGh9KTtjb25zdCB2PWguY29uc3VtZWQubGVuZ3RoPjA/ey4uLmYsLi4uaC5jb25zdW1lZFtoLmNvbnN1bWVkLmxlbmd0aC0xXS5wYXJhbWV0ZXJzfTpmO3JldHVybntt'@;
put 'YXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6aC5jb25zdW1lZCxyZW1haW5pbmdTZWdtZW50czphLnNsaWNlKGguY29uc3VtZWQubGVuZ3RoKSxwYXJhbWV0ZXJzOnYscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6aC5wb3NQYXJhbXM/P3t9fX1mdW5jdGlvbiBfWChjLGwsYSxkKXtyZXR1cm4g'@;
put 'YS5sZW5ndGg+MCYmZnVuY3Rpb24gTm1lKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9PlJrKGMsbCxkKSYmcGYoZCkhPT13cyl9KGMsYSxkKT97c2VnbWVudEdyb3VwOm5ldyBVYShsLEhtZShkLG5ldyBVYShhLGMuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6W119OjA9PT1hLmxlbmd0aCYm'@;
put 'ZnVuY3Rpb24gVm1lKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9PlJrKGMsbCxkKSl9KGMsYSxkKT97c2VnbWVudEdyb3VwOm5ldyBVYShjLnNlZ21lbnRzLEZtZShjLGEsZCxjLmNoaWxkcmVuKSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgVWEoYy5zZWdtZW50cyxjLmNo'@;
put 'aWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBGbWUoYyxsLGEsZCl7Y29uc3QgaD17fTtmb3IoY29uc3QgZiBvZiBhKWlmKFJrKGMsbCxmKSYmIWRbcGYoZildKXtjb25zdCB2PW5ldyBVYShbXSx7fSk7aFtwZihmKV09dn1yZXR1cm57Li4uZCwuLi5ofX1mdW5jdGlvbiBIbWUo'@;
put 'YyxsKXtjb25zdCBhPXt9O2Fbd3NdPWw7Zm9yKGNvbnN0IGQgb2YgYylpZigiIj09PWQucGF0aCYmcGYoZCkhPT13cyl7Y29uc3QgaD1uZXcgVWEoW10se30pO2FbcGYoZCldPWh9cmV0dXJuIGF9ZnVuY3Rpb24gUmsoYyxsLGEpe3JldHVybighKGMuaGFzQ2hpbGRyZW4oKXx8bC5sZW5ndGg+'@;
put 'MCl8fCJmdWxsIiE9PWEucGF0aE1hdGNoKSYmIiI9PT1hLnBhdGh9Y2xhc3MgWW1le31jbGFzcyBabWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsVCl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9hZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhp'@;
put 'cy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXYsdGhpcy51cmxTZXJpYWxpemVyPVQsdGhpcy5hcHBseVJlZGlyZWN0cz1uZXcgUm1lKHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnVybFRyZWUpLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PTAsdGhpcy5hbGxv'@;
put 'd1JlZGlyZWN0cz0hMH1ub01hdGNoRXJyb3IobCl7cmV0dXJuIG5ldyB6big0MDAyLGAnJHtsLnNlZ21lbnRHcm91cH0nYCl9cmVjb2duaXplKCl7Y29uc3QgbD1fWCh0aGlzLnVybFRyZWUucm9vdCxbXSxbXSx0aGlzLmNvbmZpZykuc2VnbWVudEdyb3VwO3JldHVybiB0aGlzLm1hdGNoKGwp'@;
put 'LnBpcGUoeXIoYT0+e2NvbnN0IGQ9bmV3IF9GKFtdLE9iamVjdC5mcmVlemUoe30pLE9iamVjdC5mcmVlemUoey4uLnRoaXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCx7fSx3cyx0aGlzLnJvb3RDb21wb25lbnRUeXBlLG51bGwse30pLGg9bmV3IEpoKGQs'@;
put 'YSksZj1uZXcgb1goIiIsaCksdj1mdW5jdGlvbiBQNGUoYyxsLGE9bnVsbCxkPW51bGwpe3JldHVybiAkSyhHSyhjKSxsLGEsZCl9KGQsW10sdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zLHRoaXMudXJsVHJlZS5mcmFnbWVudCk7cmV0dXJuIHYucXVlcnlQYXJhbXM9dGhpcy51cmxUcmVlLnF1'@;
put 'ZXJ5UGFyYW1zLGYudXJsPXRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodiksdGhpcy5pbmhlcml0UGFyYW1zQW5kRGF0YShmLl9yb290LG51bGwpLHtzdGF0ZTpmLHRyZWU6dn19KSl9bWF0Y2gobCl7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnRHcm91cCh0aGlzLmluamVjdG9yLHRo'@;
put 'aXMuY29uZmlnLGwsd3MpLnBpcGUoWjgoZD0+e2lmKGQgaW5zdGFuY2VvZiBTRilyZXR1cm4gdGhpcy51cmxUcmVlPWQudXJsVHJlZSx0aGlzLm1hdGNoKGQudXJsVHJlZS5yb290KTt0aHJvdyBkIGluc3RhbmNlb2YgQ0Y/dGhpcy5ub01hdGNoRXJyb3IoZCk6ZH0pKX1pbmhlcml0UGFyYW1z'@;
put 'QW5kRGF0YShsLGEpe2NvbnN0IGQ9bC52YWx1ZSxoPWdGKGQsYSx0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpO2QucGFyYW1zPU9iamVjdC5mcmVlemUoaC5wYXJhbXMpLGQuZGF0YT1PYmplY3QuZnJlZXplKGguZGF0YSksbC5jaGlsZHJlbi5mb3JFYWNoKGY9PnRoaXMuaW5oZXJp'@;
put 'dFBhcmFtc0FuZERhdGEoZixkKSl9cHJvY2Vzc1NlZ21lbnRHcm91cChsLGEsZCxoKXtyZXR1cm4gMD09PWQuc2VnbWVudHMubGVuZ3RoJiZkLmhhc0NoaWxkcmVuKCk/dGhpcy5wcm9jZXNzQ2hpbGRyZW4obCxhLGQpOnRoaXMucHJvY2Vzc1NlZ21lbnQobCxhLGQsZC5zZWdtZW50cyxoLCEw'@;
put 'KS5waXBlKHlyKGY9PmYgaW5zdGFuY2VvZiBKaD9bZl06W10pKX1wcm9jZXNzQ2hpbGRyZW4obCxhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgT2JqZWN0LmtleXMoZC5jaGlsZHJlbikpInByaW1hcnkiPT09Zj9oLnVuc2hpZnQoZik6aC5wdXNoKGYpO3JldHVybiBaYyhoKS5waXBl'@;
put 'KFU4KGY9Pntjb25zdCB2PWQuY2hpbGRyZW5bZl0sVD1mdW5jdGlvbiBsbWUoYyxsKXtjb25zdCBhPWMuZmlsdGVyKGQ9PnBmKGQpPT09bCk7cmV0dXJuIGEucHVzaCguLi5jLmZpbHRlcihkPT5wZihkKSE9PWwpKSxhfShhLGYpO3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAobCxU'@;
put 'LHYsZil9KSxmdW5jdGlvbiBkNGUoYyxsKXtyZXR1cm4geWkoZnVuY3Rpb24gdTRlKGMsbCxhLGQsaCl7cmV0dXJuKGYsdik9PntsZXQgVD1hLFk9bCxyZT0wO2Yuc3Vic2NyaWJlKCRyKHYsZmU9Pntjb25zdCBfZT1yZSsrO1k9VD9jKFksZmUsX2UpOihUPSEwLGZlKSxkJiZ2Lm5leHQoWSl9'@;
put 'LGgmJigoKT0+e1QmJnYubmV4dChZKSx2LmNvbXBsZXRlKCl9KSkpfX0oYyxsLGFyZ3VtZW50cy5sZW5ndGg+PTIsITApKX0oKGYsdik9PihmLnB1c2goLi4udiksZikpLGJrKG51bGwpLGZ1bmN0aW9uIGg0ZShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5w'@;
put 'aXBlKGM/SGEoKGgsZik9PmMoaCxmLGQpKTpDbixvRigxKSxhP2JrKGwpOk9LKCgpPT5uZXcgdmspKX0oKSxWdShmPT57aWYobnVsbD09PWYpcmV0dXJuIHQ3KGQpO2NvbnN0IHY9dlgoZik7cmV0dXJuIGZ1bmN0aW9uIFdtZShjKXtjLnNvcnQoKGwsYSk9PmwudmFsdWUub3V0bGV0PT09d3M/'@;
put 'LTE6YS52YWx1ZS5vdXRsZXQ9PT13cz8xOmwudmFsdWUub3V0bGV0LmxvY2FsZUNvbXBhcmUoYS52YWx1ZS5vdXRsZXQpKX0odiksTm8odil9KSl9cHJvY2Vzc1NlZ21lbnQobCxhLGQsaCxmLHYpe3JldHVybiBaYyhhKS5waXBlKFU4KFQ9PnRoaXMucHJvY2Vzc1NlZ21lbnRBZ2FpbnN0Um91'@;
put 'dGUoVC5faW5qZWN0b3I/P2wsYSxULGQsaCxmLHYpLnBpcGUoWjgoWT0+e2lmKFkgaW5zdGFuY2VvZiBDRilyZXR1cm4gTm8obnVsbCk7dGhyb3cgWX0pKSksQTQoVD0+ISFUKSxaOChUPT57aWYobVgoVCkpcmV0dXJuIGZ1bmN0aW9uIEJtZShjLGwsYSl7cmV0dXJuIDA9PT1sLmxlbmd0aCYm'@;
put 'IWMuY2hpbGRyZW5bYV19KGQsaCxmKT9ObyhuZXcgWW1lKTp0NyhkKTt0aHJvdyBUfSkpfXByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZix2LFQpe3JldHVybiBmdW5jdGlvbiBqbWUoYyxsLGEsZCl7cmV0dXJuISEocGYoYyk9PT1kfHxkIT09d3MmJlJrKGwsYSxjKSkmJmtG'@;
put 'KGwsYyxhKS5tYXRjaGVkfShkLGgsZix2KT92b2lkIDA9PT1kLnJlZGlyZWN0VG8/dGhpcy5tYXRjaFNlZ21lbnRBZ2FpbnN0Um91dGUobCxoLGQsZix2KTp0aGlzLmFsbG93UmVkaXJlY3RzJiZUP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxoLGEsZCxm'@;
put 'LHYpOnQ3KGgpOnQ3KGgpfWV4cGFuZFNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0KGwsYSxkLGgsZix2KXtjb25zdHttYXRjaGVkOlQsY29uc3VtZWRTZWdtZW50czpZLHBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzOnJlLHJlbWFpbmluZ1NlZ21lbnRzOmZlfT1rRihhLGgsZik7aWYo'@;
put 'IVQpcmV0dXJuIHQ3KGEpO2gucmVkaXJlY3RUby5zdGFydHNXaXRoKCIvIikmJih0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudCsrLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PjMxJiYodGhpcy5hbGxvd1JlZGlyZWN0cz0hMSkpO2NvbnN0IF9lPXRoaXMuYXBwbHlSZWRpcmVjdHMuYXBw'@;
put 'bHlSZWRpcmVjdENvbW1hbmRzKFksaC5yZWRpcmVjdFRvLHJlKTtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0cy5saW5lcmFsaXplU2VnbWVudHMoaCxfZSkucGlwZShWdShrZT0+dGhpcy5wcm9jZXNzU2VnbWVudChsLGQsYSxrZS5jb25jYXQoZmUpLHYsITEpKSl9bWF0Y2hTZWdtZW50QWdh'@;
put 'aW5zdFJvdXRlKGwsYSxkLGgsZil7Y29uc3Qgdj1PbWUoYSxkLGgsbCk7cmV0dXJuIioqIj09PWQucGF0aCYmKGEuY2hpbGRyZW49e30pLHYucGlwZSh1MShUPT5ULm1hdGNoZWQ/dGhpcy5nZXRDaGlsZENvbmZpZyhsPWQuX2luamVjdG9yPz9sLGQsaCkucGlwZSh1MSgoe3JvdXRlczpZfSk9'@;
put 'Pntjb25zdCByZT1kLl9sb2FkZWRJbmplY3Rvcj8/bCx7Y29uc3VtZWRTZWdtZW50czpmZSxyZW1haW5pbmdTZWdtZW50czpfZSxwYXJhbWV0ZXJzOmtlfT1ULFdlPW5ldyBfRihmZSxrZSxPYmplY3QuZnJlZXplKHsuLi50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUu'@;
put 'ZnJhZ21lbnQsZnVuY3Rpb24gJG1lKGMpe3JldHVybiBjLmRhdGF8fHt9fShkKSxwZihkKSxkLmNvbXBvbmVudD8/ZC5fbG9hZGVkQ29tcG9uZW50Pz9udWxsLGQsZnVuY3Rpb24gcW1lKGMpe3JldHVybiBjLnJlc29sdmV8fHt9fShkKSkse3NlZ21lbnRHcm91cDpKZSxzbGljZWRTZWdtZW50'@;
put 'czp0dH09X1goYSxmZSxfZSxZKTtpZigwPT09dHQubGVuZ3RoJiZKZS5oYXNDaGlsZHJlbigpKXJldHVybiB0aGlzLnByb2Nlc3NDaGlsZHJlbihyZSxZLEplKS5waXBlKHlyKHd0PT5udWxsPT09d3Q/bnVsbDpuZXcgSmgoV2Usd3QpKSk7aWYoMD09PVkubGVuZ3RoJiYwPT09dHQubGVuZ3Ro'@;
put 'KXJldHVybiBObyhuZXcgSmgoV2UsW10pKTtjb25zdCB5dD1wZihkKT09PWY7cmV0dXJuIHRoaXMucHJvY2Vzc1NlZ21lbnQocmUsWSxKZSx0dCx5dD93czpmLCEwKS5waXBlKHlyKHd0PT5uZXcgSmgoV2Usd3QgaW5zdGFuY2VvZiBKaD9bd3RdOltdKSkpfSkpOnQ3KGEpKSl9Z2V0Q2hpbGRD'@;
put 'b25maWcobCxhLGQpe3JldHVybiBhLmNoaWxkcmVuP05vKHtyb3V0ZXM6YS5jaGlsZHJlbixpbmplY3RvcjpsfSk6YS5sb2FkQ2hpbGRyZW4/dm9pZCAwIT09YS5fbG9hZGVkUm91dGVzP05vKHtyb3V0ZXM6YS5fbG9hZGVkUm91dGVzLGluamVjdG9yOmEuX2xvYWRlZEluamVjdG9yfSk6ZnVu'@;
put 'Y3Rpb24gRG1lKGMsbCxhLGQpe2NvbnN0IGg9bC5jYW5Mb2FkO3JldHVybiB2b2lkIDA9PT1ofHwwPT09aC5sZW5ndGg/Tm8oITApOk5vKGgubWFwKHY9Pntjb25zdCBUPVE4KHYsYyk7cmV0dXJuIEw0KGZ1bmN0aW9uIGdtZShjKXtyZXR1cm4gYyYmJHkoYy5jYW5Mb2FkKX0oVCk/VC5jYW5M'@;
put 'b2FkKGwsYSk6ZXUoYywoKT0+VChsLGEpKSl9KSkucGlwZShlNygpLGdYKCkpfShsLGEsZCkucGlwZShWdShoPT5oP3RoaXMuY29uZmlnTG9hZGVyLmxvYWRDaGlsZHJlbihsLGEpLnBpcGUobHUoZj0+e2EuX2xvYWRlZFJvdXRlcz1mLnJvdXRlcyxhLl9sb2FkZWRJbmplY3Rvcj1mLmluamVj'@;
put 'dG9yfSkpOmZ1bmN0aW9uIEltZShjKXtyZXR1cm4geWsoZFgoITEsSjEuR3VhcmRSZWplY3RlZCkpfSgpKSk6Tm8oe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIEdtZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9u'@;
put 'IHZYKGMpe2NvbnN0IGw9W10sYT1uZXcgU2V0O2Zvcihjb25zdCBkIG9mIGMpe2lmKCFHbWUoZCkpe2wucHVzaChkKTtjb250aW51ZX1jb25zdCBoPWwuZmluZChmPT5kLnZhbHVlLnJvdXRlQ29uZmlnPT09Zi52YWx1ZS5yb3V0ZUNvbmZpZyk7dm9pZCAwIT09aD8oaC5jaGlsZHJlbi5wdXNo'@;
put 'KC4uLmQuY2hpbGRyZW4pLGEuYWRkKGgpKTpsLnB1c2goZCl9Zm9yKGNvbnN0IGQgb2YgYSl7Y29uc3QgaD12WChkLmNoaWxkcmVuKTtsLnB1c2gobmV3IEpoKGQudmFsdWUsaCkpfXJldHVybiBsLmZpbHRlcihkPT4hYS5oYXMoZCkpfWZ1bmN0aW9uIHlYKGMpe2NvbnN0IGw9Yy5jaGlsZHJl'@;
put 'bi5tYXAoYT0+eVgoYSkpLmZsYXQoKTtyZXR1cm5bYywuLi5sXX1mdW5jdGlvbiBFRihjKXtyZXR1cm4gdTEobD0+e2NvbnN0IGE9YyhsKTtyZXR1cm4gYT9aYyhhKS5waXBlKHlyKCgpPT5sKSk6Tm8obCl9KX1sZXQgYlg9KCgpPT57Y2xhc3MgY3tidWlsZFRpdGxlKGEpe2xldCBkLGg9YS5y'@;
put 'b290O2Zvcig7dm9pZCAwIT09aDspZD10aGlzLmdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShoKT8/ZCxoPWguY2hpbGRyZW4uZmluZChmPT5mLm91dGxldD09PXdzKTtyZXR1cm4gZH1nZXRSZXNvbHZlZFRpdGxlRm9yUm91dGUoYSl7cmV0dXJuIGEuZGF0YVtIeV19c3RhdGljI2U9dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PlZyKHQ1ZSkscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksdDVlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiWHtjb25zdHJ1'@;
put 'Y3RvcihhKXtzdXBlcigpLHRoaXMudGl0bGU9YX11cGRhdGVUaXRsZShhKXtjb25zdCBkPXRoaXMuYnVpbGRUaXRsZShhKTt2b2lkIDAhPT1kJiZ0aGlzLnRpdGxlLnNldFRpdGxlKGQpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIocHBl'@;
put 'KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IG43PW5ldyBZcigiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pLHI3PW5ldyBZcigiIik7'@;
put 'bGV0IFRGPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbXBvbmVudExvYWRlcnM9bmV3IFdlYWtNYXAsdGhpcy5jaGlsZHJlbkxvYWRlcnM9bmV3IFdlYWtNYXAsdGhpcy5jb21waWxlcj1WcihFJCl9bG9hZENvbXBvbmVudChhKXtpZih0aGlzLmNvbXBvbmVudExvYWRlcnMu'@;
put 'Z2V0KGEpKXJldHVybiB0aGlzLmNvbXBvbmVudExvYWRlcnMuZ2V0KGEpO2lmKGEuX2xvYWRlZENvbXBvbmVudClyZXR1cm4gTm8oYS5fbG9hZGVkQ29tcG9uZW50KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihhKTtjb25zdCBkPUw0KGEubG9h'@;
put 'ZENvbXBvbmVudCgpKS5waXBlKHlyKHdYKSxsdShmPT57dGhpcy5vbkxvYWRFbmRMaXN0ZW5lciYmdGhpcy5vbkxvYWRFbmRMaXN0ZW5lcihhKSxhLl9sb2FkZWRDb21wb25lbnQ9Zn0pLEZ5KCgpPT57dGhpcy5jb21wb25lbnRMb2FkZXJzLmRlbGV0ZShhKX0pKSxoPW5ldyBSSyhkLCgpPT5u'@;
put 'ZXcgbm4pLnBpcGUoaUYoKSk7cmV0dXJuIHRoaXMuY29tcG9uZW50TG9hZGVycy5zZXQoYSxoKSxofWxvYWRDaGlsZHJlbihhLGQpe2lmKHRoaXMuY2hpbGRyZW5Mb2FkZXJzLmdldChkKSlyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpO2lmKGQuX2xvYWRlZFJvdXRlcylyZXR1'@;
put 'cm4gTm8oe3JvdXRlczpkLl9sb2FkZWRSb3V0ZXMsaW5qZWN0b3I6ZC5fbG9hZGVkSW5qZWN0b3J9KTt0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXImJnRoaXMub25Mb2FkU3RhcnRMaXN0ZW5lcihkKTtjb25zdCBmPWZ1bmN0aW9uIG41ZShjLGwsYSxkKXtyZXR1cm4gTDQoYy5sb2FkQ2hpbGRy'@;
put 'ZW4oKSkucGlwZSh5cih3WCksVnUoaD0+aCBpbnN0YW5jZW9mIHR5fHxBcnJheS5pc0FycmF5KGgpP05vKGgpOlpjKGwuY29tcGlsZU1vZHVsZUFzeW5jKGgpKSkseXIoaD0+e2QmJmQoYyk7bGV0IGYsdixUPSExO3JldHVybiBBcnJheS5pc0FycmF5KGgpPyh2PWgsITApOihmPWguY3JlYXRl'@;
put 'KGEpLmluamVjdG9yLHY9Zi5nZXQocjcsW10se29wdGlvbmFsOiEwLHNlbGY6ITB9KS5mbGF0KCkpLHtyb3V0ZXM6di5tYXAoTUYpLGluamVjdG9yOmZ9fSkpfShkLHRoaXMuY29tcGlsZXIsYSx0aGlzLm9uTG9hZEVuZExpc3RlbmVyKS5waXBlKEZ5KCgpPT57dGhpcy5jaGlsZHJlbkxvYWRl'@;
put 'cnMuZGVsZXRlKGQpfSkpLHY9bmV3IFJLKGYsKCk9Pm5ldyBubikucGlwZShpRigpKTtyZXR1cm4gdGhpcy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsdiksdn1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXBy'@;
put 'b3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiB3WChjKXtyZXR1cm4gZnVuY3Rpb24gcjVlKGMpe3JldHVybiBjJiYib2JqZWN0Ij09dHlwZW9mIGMmJiJkZWZhdWx0ImluIGN9KGMpP2MuZGVmYXVsdDpj'@;
put 'fWxldCBERj0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OigpPT5WcihpNWUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgp'@;
put 'LGk1ZT0oKCk9PntjbGFzcyBje3Nob3VsZFByb2Nlc3NVcmwoYSl7cmV0dXJuITB9ZXh0cmFjdChhKXtyZXR1cm4gYX1tZXJnZShhLGQpe3JldHVybiBhfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJv'@;
put 'dj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NvbnN0IE1YPW5ldyBZcigiIiksQ1g9bmV3IFlyKCIiKTtmdW5jdGlvbiBvNWUoYyxsLGEpe2NvbnN0IGQ9Yy5nZXQoQ1gpLGg9Yy5nZXQoJHMpO3JldHVybiBjLmdldChQ'@;
put 'bykucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZighaC5zdGFydFZpZXdUcmFuc2l0aW9ufHxkLnNraXBOZXh0VHJhbnNpdGlvbilyZXR1cm4gZC5za2lwTmV4dFRyYW5zaXRpb249ITEsUHJvbWlzZS5yZXNvbHZlKCk7bGV0IGY7Y29uc3Qgdj1uZXcgUHJvbWlzZShyZT0+e2Y9cmV9KSxUPWgu'@;
put 'c3RhcnRWaWV3VHJhbnNpdGlvbigoKT0+KGYoKSxmdW5jdGlvbiBzNWUoYyl7cmV0dXJuIG5ldyBQcm9taXNlKGw9PntOdihsLHtpbmplY3RvcjpjfSl9KX0oYykpKSx7b25WaWV3VHJhbnNpdGlvbkNyZWF0ZWQ6WX09ZDtyZXR1cm4gWSYmZXUoYywoKT0+WSh7dHJhbnNpdGlvbjpULGZyb206'@;
put 'bCx0bzphfSkpLHZ9KX1sZXQgT2s9KCgpPT57Y2xhc3MgY3tnZXQgaGFzUmVxdWVzdGVkTmF2aWdhdGlvbigpe3JldHVybiAwIT09dGhpcy5uYXZpZ2F0aW9uSWR9Y29uc3RydWN0b3IoKXt0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPW51bGwsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRo'@;
put 'aXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPW51bGwsdGhpcy5ldmVudHM9bmV3IG5uLHRoaXMudHJhbnNpdGlvbkFib3J0U3ViamVjdD1uZXcgbm4sdGhpcy5jb25maWdMb2FkZXI9VnIoVEYpLHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcj1WcihkbCksdGhpcy51cmxTZXJpYWxpemVyPVZy'@;
put 'KCQ4KSx0aGlzLnJvb3RDb250ZXh0cz1Wcih6eSksdGhpcy5sb2NhdGlvbj1WcihxMSksdGhpcy5pbnB1dEJpbmRpbmdFbmFibGVkPW51bGwhPT1WcihBayx7b3B0aW9uYWw6ITB9KSx0aGlzLnRpdGxlU3RyYXRlZ3k9VnIoYlgpLHRoaXMub3B0aW9ucz1WcihuNyx7b3B0aW9uYWw6ITB9KXx8'@;
put 'e30sdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9VnIoREYpLHRoaXMuY3JlYXRlVmlld1RyYW5zaXRpb249VnIoTVgse29wdGlvbmFsOiEwfSks'@;
put 'dGhpcy5uYXZpZ2F0aW9uSWQ9MCx0aGlzLmFmdGVyUHJlYWN0aXZhdGlvbj0oKT0+Tm8odm9pZCAwKSx0aGlzLnJvb3RDb21wb25lbnRUeXBlPW51bGwsdGhpcy5jb25maWdMb2FkZXIub25Mb2FkRW5kTGlzdGVuZXI9aD0+dGhpcy5ldmVudHMubmV4dChuZXcgRzRlKGgpKSx0aGlzLmNvbmZp'@;
put 'Z0xvYWRlci5vbkxvYWRTdGFydExpc3RlbmVyPWg9PnRoaXMuZXZlbnRzLm5leHQobmV3IFc0ZShoKSl9Y29tcGxldGUoKXt0aGlzLnRyYW5zaXRpb25zPy5jb21wbGV0ZSgpfWhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KGEpe2NvbnN0IGQ9Kyt0aGlzLm5hdmlnYXRpb25JZDt0aGlzLnRyYW5z'@;
put 'aXRpb25zPy5uZXh0KHsuLi50aGlzLnRyYW5zaXRpb25zLnZhbHVlLC4uLmEsaWQ6ZH0pfXNldHVwTmF2aWdhdGlvbnMoYSxkLGgpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zPW5ldyBBcih7aWQ6MCxjdXJyZW50VXJsVHJlZTpkLGN1cnJlbnRSYXdVcmw6ZCxleHRyYWN0ZWRVcmw6dGhpcy51'@;
put 'cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZCksdXJsQWZ0ZXJSZWRpcmVjdHM6dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZCkscmF3VXJsOmQsZXh0cmFzOnt9LHJlc29sdmU6bnVsbCxyZWplY3Q6bnVsbCxwcm9taXNlOlByb21pc2UucmVzb2x2ZSghMCksc291cmNlOll5'@;
put 'LHJlc3RvcmVkU3RhdGU6bnVsbCxjdXJyZW50U25hcHNob3Q6aC5zbmFwc2hvdCx0YXJnZXRTbmFwc2hvdDpudWxsLGN1cnJlbnRSb3V0ZXJTdGF0ZTpoLHRhcmdldFJvdXRlclN0YXRlOm51bGwsZ3VhcmRzOntjYW5BY3RpdmF0ZUNoZWNrczpbXSxjYW5EZWFjdGl2YXRlQ2hlY2tzOltdfSxn'@;
put 'dWFyZHNSZXN1bHQ6bnVsbH0pLHRoaXMudHJhbnNpdGlvbnMucGlwZShIYShmPT4wIT09Zi5pZCkseXIoZj0+KHsuLi5mLGV4dHJhY3RlZFVybDp0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdChmLnJhd1VybCl9KSksdTEoZj0+e2xldCB2PSExLFQ9ITE7cmV0dXJuIE5vKGYpLnBp'@;
put 'cGUodTEoWT0+e2lmKHRoaXMubmF2aWdhdGlvbklkPmYuaWQpcmV0dXJuIHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oZiwiIixKMS5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKSxxaDt0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWYsdGhpcy5jdXJyZW50TmF2aWdhdGlvbj17aWQ6'@;
put 'WS5pZCxpbml0aWFsVXJsOlkucmF3VXJsLGV4dHJhY3RlZFVybDpZLmV4dHJhY3RlZFVybCx0cmlnZ2VyOlkuc291cmNlLGV4dHJhczpZLmV4dHJhcyxwcmV2aW91c05hdmlnYXRpb246dGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24/ey4uLnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0'@;
put 'aW9uLHByZXZpb3VzTmF2aWdhdGlvbjpudWxsfTpudWxsfTtjb25zdCByZT0hYS5uYXZpZ2F0ZWR8fHRoaXMuaXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXx8dGhpcy5pc1VwZGF0ZWRCcm93c2VyVXJsKCk7aWYoIXJlJiYicmVsb2FkIiE9PShZLmV4dHJhcy5vblNhbWVVcmxOYXZpZ2F0aW9u'@;
put 'Pz9hLm9uU2FtZVVybE5hdmlnYXRpb24pKXtjb25zdCBfZT0iIjtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgWDgoWS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFkucmF3VXJsKSxfZSxUay5JZ25vcmVkU2FtZVVybE5hdmlnYXRpb24pKSxZLnJlc29sdmUobnVsbCkscWh9'@;
put 'aWYodGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoWS5yYXdVcmwpKXJldHVybiBObyhZKS5waXBlKHUxKF9lPT57Y29uc3Qga2U9dGhpcy50cmFuc2l0aW9ucz8uZ2V0VmFsdWUoKTtyZXR1cm4gdGhpcy5ldmVudHMubmV4dChuZXcgRWsoX2UuaWQsdGhpcy51cmxT'@;
put 'ZXJpYWxpemVyLnNlcmlhbGl6ZShfZS5leHRyYWN0ZWRVcmwpLF9lLnNvdXJjZSxfZS5yZXN0b3JlZFN0YXRlKSksa2UhPT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpP3FoOlByb21pc2UucmVzb2x2ZShfZSl9KSxmdW5jdGlvbiBLbWUoYyxsLGEsZCxoLGYpe3JldHVybiBWdSh2PT5m'@;
put 'dW5jdGlvbiB6bWUoYyxsLGEsZCxoLGYsdj0iZW1wdHlPbmx5Iil7cmV0dXJuIG5ldyBabWUoYyxsLGEsZCxoLHYsZikucmVjb2duaXplKCl9KGMsbCxhLGQsdi5leHRyYWN0ZWRVcmwsaCxmKS5waXBlKHlyKCh7c3RhdGU6VCx0cmVlOll9KT0+KHsuLi52LHRhcmdldFNuYXBzaG90OlQsdXJs'@;
put 'QWZ0ZXJSZWRpcmVjdHM6WX0pKSkpfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsdGhpcy5jb25maWdMb2FkZXIsdGhpcy5yb290Q29tcG9uZW50VHlwZSxhLmNvbmZpZyx0aGlzLnVybFNlcmlhbGl6ZXIsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5KSxsdShfZT0+e2YudGFyZ2V0'@;
put 'U25hcHNob3Q9X2UudGFyZ2V0U25hcHNob3QsZi51cmxBZnRlclJlZGlyZWN0cz1fZS51cmxBZnRlclJlZGlyZWN0cyx0aGlzLmN1cnJlbnROYXZpZ2F0aW9uPXsuLi50aGlzLmN1cnJlbnROYXZpZ2F0aW9uLGZpbmFsVXJsOl9lLnVybEFmdGVyUmVkaXJlY3RzfTtjb25zdCBrZT1uZXcgZVgo'@;
put 'X2UuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShfZS5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoX2UudXJsQWZ0ZXJSZWRpcmVjdHMpLF9lLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KGtlKX0pKTtpZihyZSYmdGhpcy51cmxIYW5k'@;
put 'bGluZ1N0cmF0ZWd5LnNob3VsZFByb2Nlc3NVcmwoWS5jdXJyZW50UmF3VXJsKSl7Y29uc3R7aWQ6X2UsZXh0cmFjdGVkVXJsOmtlLHNvdXJjZTpXZSxyZXN0b3JlZFN0YXRlOkplLGV4dHJhczp0dH09WSx5dD1uZXcgRWsoX2UsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShrZSksV2Us'@;
put 'SmUpO3RoaXMuZXZlbnRzLm5leHQoeXQpO2NvbnN0IHd0PWlYKHRoaXMucm9vdENvbXBvbmVudFR5cGUpLnNuYXBzaG90O3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWY9ey4uLlksdGFyZ2V0U25hcHNob3Q6d3QsdXJsQWZ0ZXJSZWRpcmVjdHM6a2UsZXh0cmFzOnsuLi50dCxza2lw'@;
put 'TG9jYXRpb25DaGFuZ2U6ITEscmVwbGFjZVVybDohMX19LHRoaXMuY3VycmVudE5hdmlnYXRpb24uZmluYWxVcmw9a2UsTm8oZil9e2NvbnN0IF9lPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBYOChZLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoWS5leHRyYWN0ZWRV'@;
put 'cmwpLF9lLFRrLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3kpKSxZLnJlc29sdmUobnVsbCkscWh9fSksbHUoWT0+e2NvbnN0IHJlPW5ldyBZNGUoWS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFkuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXpl'@;
put 'KFkudXJsQWZ0ZXJSZWRpcmVjdHMpLFkudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQocmUpfSkseXIoWT0+KHRoaXMuY3VycmVudFRyYW5zaXRpb249Zj17Li4uWSxndWFyZHM6ZG1lKFkudGFyZ2V0U25hcHNob3QsWS5jdXJyZW50U25hcHNob3QsdGhpcy5yb290Q29udGV4dHMp'@;
put 'fSxmKSksZnVuY3Rpb24gd21lKGMsbCl7cmV0dXJuIFZ1KGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGN1cnJlbnRTbmFwc2hvdDpoLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6ZixjYW5EZWFjdGl2YXRlQ2hlY2tzOnZ9fT1hO3JldHVybiAwPT09di5sZW5ndGgmJjA9PT1mLmxlbmd0'@;
put 'aD9Obyh7Li4uYSxndWFyZHNSZXN1bHQ6ITB9KTpmdW5jdGlvbiBNbWUoYyxsLGEsZCl7cmV0dXJuIFpjKGMpLnBpcGUoVnUoaD0+ZnVuY3Rpb24gVG1lKGMsbCxhLGQsaCl7Y29uc3QgZj1sJiZsLnJvdXRlQ29uZmlnP2wucm91dGVDb25maWcuY2FuRGVhY3RpdmF0ZTpudWxsO3JldHVybiBm'@;
put 'JiYwIT09Zi5sZW5ndGg/Tm8oZi5tYXAoVD0+e2NvbnN0IFk9WnkobCk/P2gscmU9UTgoVCxZKTtyZXR1cm4gTDQoZnVuY3Rpb24geW1lKGMpe3JldHVybiBjJiYkeShjLmNhbkRlYWN0aXZhdGUpfShyZSk/cmUuY2FuRGVhY3RpdmF0ZShjLGwsYSxkKTpldShZLCgpPT5yZShjLGwsYSxkKSkp'@;
put 'LnBpcGUoQTQoKSl9KSkucGlwZShlNygpKTpObyghMCl9KGguY29tcG9uZW50LGgucm91dGUsYSxsLGQpKSxBNChoPT4hMCE9PWgsITApKX0odixkLGgsYykucGlwZShWdShUPT5UJiZmdW5jdGlvbiBtbWUoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgY30oVCk/ZnVuY3Rpb24gQ21lKGMs'@;
put 'bCxhLGQpe3JldHVybiBaYyhsKS5waXBlKFU4KGg9PnJGKGZ1bmN0aW9uIHhtZShjLGwpe3JldHVybiBudWxsIT09YyYmbCYmbChuZXcgJDRlKGMpKSxObyghMCl9KGgucm91dGUucGFyZW50LGQpLGZ1bmN0aW9uIFNtZShjLGwpe3JldHVybiBudWxsIT09YyYmbCYmbChuZXcgSzRlKGMpKSxO'@;
put 'byghMCl9KGgucm91dGUsZCksZnVuY3Rpb24gRW1lKGMsbCxhKXtjb25zdCBkPWxbbC5sZW5ndGgtMV0sZj1sLnNsaWNlKDAsbC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcCh2PT5mdW5jdGlvbiBobWUoYyl7Y29uc3QgbD1jLnJvdXRlQ29uZmlnP2Mucm91dGVDb25maWcuY2FuQWN0aXZhdGVD'@;
put 'aGlsZDpudWxsO3JldHVybiBsJiYwIT09bC5sZW5ndGg/e25vZGU6YyxndWFyZHM6bH06bnVsbH0odikpLmZpbHRlcih2PT5udWxsIT09dikubWFwKHY9PklLKCgpPT5Obyh2Lmd1YXJkcy5tYXAoWT0+e2NvbnN0IHJlPVp5KHYubm9kZSk/P2EsZmU9UTgoWSxyZSk7cmV0dXJuIEw0KGZ1bmN0'@;
put 'aW9uIHZtZShjKXtyZXR1cm4gYyYmJHkoYy5jYW5BY3RpdmF0ZUNoaWxkKX0oZmUpP2ZlLmNhbkFjdGl2YXRlQ2hpbGQoZCxjKTpldShyZSwoKT0+ZmUoZCxjKSkpLnBpcGUoQTQoKSl9KSkucGlwZShlNygpKSkpO3JldHVybiBObyhmKS5waXBlKGU3KCkpfShjLGgucGF0aCxhKSxmdW5jdGlv'@;
put 'biBrbWUoYyxsLGEpe2NvbnN0IGQ9bC5yb3V0ZUNvbmZpZz9sLnJvdXRlQ29uZmlnLmNhbkFjdGl2YXRlOm51bGw7aWYoIWR8fDA9PT1kLmxlbmd0aClyZXR1cm4gTm8oITApO2NvbnN0IGg9ZC5tYXAoZj0+SUsoKCk9Pntjb25zdCB2PVp5KGwpPz9hLFQ9UTgoZix2KTtyZXR1cm4gTDQoZnVu'@;
put 'Y3Rpb24gX21lKGMpe3JldHVybiBjJiYkeShjLmNhbkFjdGl2YXRlKX0oVCk/VC5jYW5BY3RpdmF0ZShsLGMpOmV1KHYsKCk9PlQobCxjKSkpLnBpcGUoQTQoKSl9KSk7cmV0dXJuIE5vKGgpLnBpcGUoZTcoKSl9KGMsaC5yb3V0ZSxhKSkpLEE0KGg9PiEwIT09aCwhMCkpfShkLGYsYyxsKTpO'@;
put 'byhUKSkseXIoVD0+KHsuLi5hLGd1YXJkc1Jlc3VsdDpUfSkpKX0pfSh0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsWT0+dGhpcy5ldmVudHMubmV4dChZKSksbHUoWT0+e2lmKGYuZ3VhcmRzUmVzdWx0PVkuZ3VhcmRzUmVzdWx0LHE4KFkuZ3VhcmRzUmVzdWx0KSl0aHJvdyB1WCgwLFkuZ3Vh'@;
put 'cmRzUmVzdWx0KTtjb25zdCByZT1uZXcgejRlKFkuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShZLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShZLnVybEFmdGVyUmVkaXJlY3RzKSxZLnRhcmdldFNuYXBzaG90LCEhWS5ndWFyZHNSZXN1bHQpO3Ro'@;
put 'aXMuZXZlbnRzLm5leHQocmUpfSksSGEoWT0+ISFZLmd1YXJkc1Jlc3VsdHx8KHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oWSwiIixKMS5HdWFyZFJlamVjdGVkKSwhMSkpLEVGKFk9PntpZihZLmd1YXJkcy5jYW5BY3RpdmF0ZUNoZWNrcy5sZW5ndGgpcmV0dXJuIE5vKFkpLnBp'@;
put 'cGUobHUocmU9Pntjb25zdCBmZT1uZXcgVTRlKHJlLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUocmUuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJlLnVybEFmdGVyUmVkaXJlY3RzKSxyZS50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4'@;
put 'dChmZSl9KSx1MShyZT0+e2xldCBmZT0hMTtyZXR1cm4gTm8ocmUpLnBpcGUoZnVuY3Rpb24gWG1lKGMsbCl7cmV0dXJuIFZ1KGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6aH19PWE7aWYoIWgubGVuZ3RoKXJldHVybiBObyhhKTtjb25zdCBm'@;
put 'PW5ldyBTZXQoaC5tYXAoWT0+WS5yb3V0ZSkpLHY9bmV3IFNldDtmb3IoY29uc3QgWSBvZiBmKWlmKCF2LmhhcyhZKSlmb3IoY29uc3QgcmUgb2YgeVgoWSkpdi5hZGQocmUpO2xldCBUPTA7cmV0dXJuIFpjKHYpLnBpcGUoVTgoWT0+Zi5oYXMoWSk/ZnVuY3Rpb24gSm1lKGMsbCxhLGQpe2Nv'@;
put 'bnN0IGg9Yy5yb3V0ZUNvbmZpZyxmPWMuX3Jlc29sdmU7cmV0dXJuIHZvaWQgMCE9PWg/LnRpdGxlJiYhYVgoaCkmJihmW0h5XT1oLnRpdGxlKSxmdW5jdGlvbiBRbWUoYyxsLGEsZCl7Y29uc3QgaD1zRihjKTtpZigwPT09aC5sZW5ndGgpcmV0dXJuIE5vKHt9KTtjb25zdCBmPXt9O3JldHVy'@;
put 'biBaYyhoKS5waXBlKFZ1KHY9PmZ1bmN0aW9uIGU1ZShjLGwsYSxkKXtjb25zdCBoPVp5KGwpPz9kLGY9UTgoYyxoKTtyZXR1cm4gTDQoZi5yZXNvbHZlP2YucmVzb2x2ZShsLGEpOmV1KGgsKCk9PmYobCxhKSkpfShjW3ZdLGwsYSxkKS5waXBlKEE0KCksbHUoVD0+e2Zbdl09VH0pKSksb0Yo'@;
put 'MSksZnVuY3Rpb24gZjRlKGMpe3JldHVybiB5cigoKT0+Yyl9KGYpLFo4KHY9Pm1YKHYpP3FoOnlrKHYpKSl9KGYsYyxsLGQpLnBpcGUoeXIodj0+KGMuX3Jlc29sdmVkRGF0YT12LGMuZGF0YT1nRihjLGMucGFyZW50LGEpLnJlc29sdmUsbnVsbCkpKX0oWSxkLGMsbCk6KFkuZGF0YT1nRihZ'@;
put 'LFkucGFyZW50LGMpLnJlc29sdmUsTm8odm9pZCAwKSkpLGx1KCgpPT5UKyspLG9GKDEpLFZ1KFk9PlQ9PT12LnNpemU/Tm8oYSk6cWgpKX0pfSh0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3ksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yKSxsdSh7bmV4dDooKT0+ZmU9ITAsY29tcGxl'@;
put 'dGU6KCk9PntmZXx8dGhpcy5jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihyZSwiIixKMS5Ob0RhdGFGcm9tUmVzb2x2ZXIpfX0pKX0pLGx1KHJlPT57Y29uc3QgZmU9bmV3IFo0ZShyZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJlLmV4dHJhY3RlZFVybCksdGhpcy51cmxT'@;
put 'ZXJpYWxpemVyLnNlcmlhbGl6ZShyZS51cmxBZnRlclJlZGlyZWN0cykscmUudGFyZ2V0U25hcHNob3QpO3RoaXMuZXZlbnRzLm5leHQoZmUpfSkpfSksRUYoWT0+e2NvbnN0IHJlPWZlPT57Y29uc3QgX2U9W107ZmUucm91dGVDb25maWc/LmxvYWRDb21wb25lbnQmJiFmZS5yb3V0ZUNvbmZp'@;
put 'Zy5fbG9hZGVkQ29tcG9uZW50JiZfZS5wdXNoKHRoaXMuY29uZmlnTG9hZGVyLmxvYWRDb21wb25lbnQoZmUucm91dGVDb25maWcpLnBpcGUobHUoa2U9PntmZS5jb21wb25lbnQ9a2V9KSx5cigoKT0+e30pKSk7Zm9yKGNvbnN0IGtlIG9mIGZlLmNoaWxkcmVuKV9lLnB1c2goLi4ucmUoa2Up'@;
put 'KTtyZXR1cm4gX2V9O3JldHVybiBZOChyZShZLnRhcmdldFNuYXBzaG90LnJvb3QpKS5waXBlKGJrKG51bGwpLEtoKDEpKX0pLEVGKCgpPT50aGlzLmFmdGVyUHJlYWN0aXZhdGlvbigpKSx1MSgoKT0+e2NvbnN0e2N1cnJlbnRTbmFwc2hvdDpZLHRhcmdldFNuYXBzaG90OnJlfT1mLGZlPXRo'@;
put 'aXMuY3JlYXRlVmlld1RyYW5zaXRpb24/Lih0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsWS5yb290LHJlLnJvb3QpO3JldHVybiBmZT9aYyhmZSkucGlwZSh5cigoKT0+ZikpOk5vKGYpfSkseXIoWT0+e2NvbnN0IHJlPWZ1bmN0aW9uIGVtZShjLGwsYSl7Y29uc3QgZD1VeShjLGwuX3Jvb3Qs'@;
put 'YT9hLl9yb290OnZvaWQgMCk7cmV0dXJuIG5ldyByWChkLGwpfShhLnJvdXRlUmV1c2VTdHJhdGVneSxZLnRhcmdldFNuYXBzaG90LFkuY3VycmVudFJvdXRlclN0YXRlKTtyZXR1cm4gdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mPXsuLi5ZLHRhcmdldFJvdXRlclN0YXRlOnJlfSx0aGlzLmN1'@;
put 'cnJlbnROYXZpZ2F0aW9uLnRhcmdldFJvdXRlclN0YXRlPXJlLGZ9KSxsdSgoKT0+e3RoaXMuZXZlbnRzLm5leHQobmV3IGhGKX0pLCgoYyxsLGEsZCk9PnlyKGg9PihuZXcgdW1lKGwsaC50YXJnZXRSb3V0ZXJTdGF0ZSxoLmN1cnJlbnRSb3V0ZXJTdGF0ZSxhLGQpLmFjdGl2YXRlKGMpLGgp'@;
put 'KSkodGhpcy5yb290Q29udGV4dHMsYS5yb3V0ZVJldXNlU3RyYXRlZ3ksWT0+dGhpcy5ldmVudHMubmV4dChZKSx0aGlzLmlucHV0QmluZGluZ0VuYWJsZWQpLEtoKDEpLGx1KHtuZXh0Olk9Pnt2PSEwLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPXRoaXMuY3VycmVudE5hdmlnYXRp'@;
put 'b24sdGhpcy5ldmVudHMubmV4dChuZXcgZmYoWS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFkuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKFkudXJsQWZ0ZXJSZWRpcmVjdHMpKSksdGhpcy50aXRsZVN0cmF0ZWd5Py51cGRhdGVUaXRsZShZLnRh'@;
put 'cmdldFJvdXRlclN0YXRlLnNuYXBzaG90KSxZLnJlc29sdmUoITApfSxjb21wbGV0ZTooKT0+e3Y9ITB9fSksWGgodGhpcy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0LnBpcGUobHUoWT0+e3Rocm93IFl9KSkpLEZ5KCgpPT57IXYmJiFUJiZ0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9u'@;
put 'KGYsIiIsSjEuU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiksdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uaWQ9PT1mLmlkJiYodGhpcy5jdXJyZW50TmF2aWdhdGlvbj1udWxsLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCl9KSxaOChZPT57aWYoVD0hMCxoWChZKSl0aGlzLmV2ZW50cy5u'@;
put 'ZXh0KG5ldyBLOChmLmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoZi5leHRyYWN0ZWRVcmwpLFkubWVzc2FnZSxZLmNhbmNlbGxhdGlvbkNvZGUpKSxmdW5jdGlvbiBybWUoYyl7cmV0dXJuIGhYKGMpJiZxOChjLnVybCl9KFkpP3RoaXMuZXZlbnRzLm5leHQobmV3IGZGKFkudXJs'@;
put 'KSk6Zi5yZXNvbHZlKCExKTtlbHNle3RoaXMuZXZlbnRzLm5leHQobmV3IERrKGYuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShmLmV4dHJhY3RlZFVybCksWSxmLnRhcmdldFNuYXBzaG90Pz92b2lkIDApKTt0cnl7Zi5yZXNvbHZlKGEuZXJyb3JIYW5kbGVyKFkpKX1jYXRjaChy'@;
put 'ZSl7dGhpcy5vcHRpb25zLnJlc29sdmVOYXZpZ2F0aW9uUHJvbWlzZU9uRXJyb3I/Zi5yZXNvbHZlKCExKTpmLnJlamVjdChyZSl9fXJldHVybiBxaH0pKX0pKX1jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgSzgoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIu'@;
put 'c2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX1pc1VwZGF0aW5nSW50ZXJuYWxTdGF0ZSgpe3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYWN0ZWRVcmwudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFRyYW5z'@;
put 'aXRpb24/LmN1cnJlbnRVcmxUcmVlLnRvU3RyaW5nKCl9aXNVcGRhdGVkQnJvd3NlclVybCgpe3JldHVybiB0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuZXh0cmFjdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSkpLnRvU3RyaW5nKCkhPT10aGlzLmN1'@;
put 'cnJlbnRUcmFuc2l0aW9uPy5leHRyYWN0ZWRVcmwudG9TdHJpbmcoKSYmIXRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2V9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAy'@;
put 'NzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYTVlKGMpe3JldHVybiBjIT09WXl9bGV0IGw1ZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVy'@;
put 'biBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OigpPT5Wcih1NWUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2NsYXNzIGM1ZXtzaG91bGREZXRhY2gobCl7cmV0dXJuITF9c3RvcmUobCxhKXt9c2hvdWxkQXR0YWNoKGwp'@;
put 'e3JldHVybiExfXJldHJpZXZlKGwpe3JldHVybiBudWxsfXNob3VsZFJldXNlUm91dGUobCxhKXtyZXR1cm4gbC5yb3V0ZUNvbmZpZz09PWEucm91dGVDb25maWd9fWxldCB1NWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGM1ZXtzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTty'@;
put 'ZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPWlhKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxTWD0oKCk9PntjbGFzcyBje3N0YXRpYyNl'@;
put 'PXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OigpPT5WcihkNWUpLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGQ1ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgU1h7'@;
put 'Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMubG9jYXRpb249VnIocTEpLHRoaXMudXJsU2VyaWFsaXplcj1WcigkOCksdGhpcy5vcHRpb25zPVZyKG43LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb249dGhpcy5vcHRpb25z'@;
put 'LmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb258fCJyZXBsYWNlIix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9VnIoREYpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMuY3VycmVudFVybFRyZWU9bmV3IEc4'@;
put 'LHRoaXMucmF3VXJsVHJlZT10aGlzLmN1cnJlbnRVcmxUcmVlLHRoaXMuY3VycmVudFBhZ2VJZD0wLHRoaXMubGFzdFN1Y2Nlc3NmdWxJZD0tMSx0aGlzLnJvdXRlclN0YXRlPWlYKG51bGwpLHRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCl9Z2V0Q3VycmVudFVy'@;
put 'bFRyZWUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VXJsVHJlZX1nZXRSYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMucmF3VXJsVHJlZX1yZXN0b3JlZFN0YXRlKCl7cmV0dXJuIHRoaXMubG9jYXRpb24uZ2V0U3RhdGUoKX1nZXQgYnJvd3NlclBhZ2VJZCgpe3JldHVybiJjb21wdXRlZCIhPT10aGlz'@;
put 'LmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/dGhpcy5jdXJyZW50UGFnZUlkOnRoaXMucmVzdG9yZWRTdGF0ZSgpPy5cdTAyNzVyb3V0ZXJQYWdlSWQ/P3RoaXMuY3VycmVudFBhZ2VJZH1nZXRSb3V0ZXJTdGF0ZSgpe3JldHVybiB0aGlzLnJvdXRlclN0YXRlfWNyZWF0ZVN0YXRlTWVt'@;
put 'ZW50bygpe3JldHVybntyYXdVcmxUcmVlOnRoaXMucmF3VXJsVHJlZSxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLHJvdXRlclN0YXRlOnRoaXMucm91dGVyU3RhdGV9fXJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoYSl7cmV0dXJuIHRoaXMu'@;
put 'bG9jYXRpb24uc3Vic2NyaWJlKGQ9PnsicG9wc3RhdGUiPT09ZC50eXBlJiZhKGQudXJsLGQuc3RhdGUpfSl9aGFuZGxlUm91dGVyRXZlbnQoYSxkKXtpZihhIGluc3RhbmNlb2YgRWspdGhpcy5zdGF0ZU1lbWVudG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKTtlbHNlIGlmKGEgaW5zdGFu'@;
put 'Y2VvZiBYOCl0aGlzLnJhd1VybFRyZWU9ZC5pbml0aWFsVXJsO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIGVYKXtpZigiZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmIWQuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZSl7Y29uc3QgaD10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVy'@;
put 'Z2UoZC5maW5hbFVybCxkLmluaXRpYWxVcmwpO3RoaXMuc2V0QnJvd3NlclVybChoLGQpfX1lbHNlIGEgaW5zdGFuY2VvZiBoRj8odGhpcy5jdXJyZW50VXJsVHJlZT1kLmZpbmFsVXJsLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UoZC5maW5hbFVybCxk'@;
put 'LmluaXRpYWxVcmwpLHRoaXMucm91dGVyU3RhdGU9ZC50YXJnZXRSb3V0ZXJTdGF0ZSwiZGVmZXJyZWQiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneSYmKGQuZXh0cmFzLnNraXBMb2NhdGlvbkNoYW5nZXx8dGhpcy5zZXRCcm93c2VyVXJsKHRoaXMucmF3VXJsVHJlZSxkKSkpOmEgaW5zdGFu'@;
put 'Y2VvZiBLOCYmKGEuY29kZT09PUoxLkd1YXJkUmVqZWN0ZWR8fGEuY29kZT09PUoxLk5vRGF0YUZyb21SZXNvbHZlcik/dGhpcy5yZXN0b3JlSGlzdG9yeShkKTphIGluc3RhbmNlb2YgRGs/dGhpcy5yZXN0b3JlSGlzdG9yeShkLCEwKTphIGluc3RhbmNlb2YgZmYmJih0aGlzLmxhc3RTdWNj'@;
put 'ZXNzZnVsSWQ9YS5pZCx0aGlzLmN1cnJlbnRQYWdlSWQ9dGhpcy5icm93c2VyUGFnZUlkKX1zZXRCcm93c2VyVXJsKGEsZCl7Y29uc3QgaD10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEpO2lmKHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8oaCl8fGQuZXh0cmFzLnJl'@;
put 'cGxhY2VVcmwpe2NvbnN0IHY9ey4uLmQuZXh0cmFzLnN0YXRlLC4uLnRoaXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGQuaWQsdGhpcy5icm93c2VyUGFnZUlkKX07dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaCwiIix2KX1lbHNle2NvbnN0IGY9ey4uLmQuZXh0cmFzLnN0YXRlLC4uLnRo'@;
put 'aXMuZ2VuZXJhdGVOZ1JvdXRlclN0YXRlKGQuaWQsdGhpcy5icm93c2VyUGFnZUlkKzEpfTt0aGlzLmxvY2F0aW9uLmdvKGgsIiIsZil9fXJlc3RvcmVIaXN0b3J5KGEsZD0hMSl7aWYoImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbil7Y29uc3QgZj10aGlz'@;
put 'LmN1cnJlbnRQYWdlSWQtdGhpcy5icm93c2VyUGFnZUlkOzAhPT1mP3RoaXMubG9jYXRpb24uaGlzdG9yeUdvKGYpOnRoaXMuY3VycmVudFVybFRyZWU9PT1hLmZpbmFsVXJsJiYwPT09ZiYmKHRoaXMucmVzZXRTdGF0ZShhKSx0aGlzLnJlc2V0VXJsVG9DdXJyZW50VXJsVHJlZSgpKX1lbHNl'@;
put 'InJlcGxhY2UiPT09dGhpcy5jYW5jZWxlZE5hdmlnYXRpb25SZXNvbHV0aW9uJiYoZCYmdGhpcy5yZXNldFN0YXRlKGEpLHRoaXMucmVzZXRVcmxUb0N1cnJlbnRVcmxUcmVlKCkpfXJlc2V0U3RhdGUoYSl7dGhpcy5yb3V0ZXJTdGF0ZT10aGlzLnN0YXRlTWVtZW50by5yb3V0ZXJTdGF0ZSx0'@;
put 'aGlzLmN1cnJlbnRVcmxUcmVlPXRoaXMuc3RhdGVNZW1lbnRvLmN1cnJlbnRVcmxUcmVlLHRoaXMucmF3VXJsVHJlZT10aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kubWVyZ2UodGhpcy5jdXJyZW50VXJsVHJlZSxhLmZpbmFsVXJsPz90aGlzLnJhd1VybFRyZWUpfXJlc2V0VXJsVG9DdXJyZW50'@;
put 'VXJsVHJlZSgpe3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUodGhpcy5yYXdVcmxUcmVlKSwiIix0aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZSh0aGlzLmxhc3RTdWNjZXNzZnVsSWQsdGhpcy5jdXJyZW50UGFnZUlkKSl9Z2VuZXJhdGVO'@;
put 'Z1JvdXRlclN0YXRlKGEsZCl7cmV0dXJuImNvbXB1dGVkIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj97bmF2aWdhdGlvbklkOmEsXHUwMjc1cm91dGVyUGFnZUlkOmR9OntuYXZpZ2F0aW9uSWQ6YX19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0'@;
put 'dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1pYShjKSkpKGh8fGMpfX0pKCk7c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7dmFyIHF5PWZ1bmN0aW9uKGMpe3JldHVybiBj'@;
put 'W2MuQ09NUExFVEU9MF09IkNPTVBMRVRFIixjW2MuRkFJTEVEPTFdPSJGQUlMRUQiLGNbYy5SRURJUkVDVElORz0yXT0iUkVESVJFQ1RJTkciLGN9KHF5fHx7fSk7ZnVuY3Rpb24geFgoYyxsKXtjLmV2ZW50cy5waXBlKEhhKGE9PmEgaW5zdGFuY2VvZiBmZnx8YSBpbnN0YW5jZW9mIEs4fHxh'@;
put 'IGluc3RhbmNlb2YgRGt8fGEgaW5zdGFuY2VvZiBYOCkseXIoYT0+YSBpbnN0YW5jZW9mIGZmfHxhIGluc3RhbmNlb2YgWDg/cXkuQ09NUExFVEU6YSBpbnN0YW5jZW9mIEs4JiYoYS5jb2RlPT09SjEuUmVkaXJlY3R8fGEuY29kZT09PUoxLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pP3F5'@;
put 'LlJFRElSRUNUSU5HOnF5LkZBSUxFRCksSGEoYT0+YSE9PXF5LlJFRElSRUNUSU5HKSxLaCgxKSkuc3Vic2NyaWJlKCgpPT57bCgpfSl9ZnVuY3Rpb24gaDVlKGMpe3Rocm93IGN9Y29uc3QgZjVlPXtwYXRoczoiZXhhY3QiLGZyYWdtZW50OiJpZ25vcmVkIixtYXRyaXhQYXJhbXM6Imlnbm9y'@;
put 'ZWQiLHF1ZXJ5UGFyYW1zOiJleGFjdCJ9LHA1ZT17cGF0aHM6InN1YnNldCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6InN1YnNldCJ9O2xldCB6cz0oKCk9PntjbGFzcyBje2dldCBjdXJyZW50VXJsVHJlZSgpe3JldHVybiB0aGlzLnN0'@;
put 'YXRlTWFuYWdlci5nZXRDdXJyZW50VXJsVHJlZSgpfWdldCByYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldFJhd1VybFRyZWUoKX1nZXQgZXZlbnRzKCl7cmV0dXJuIHRoaXMuX2V2ZW50c31nZXQgcm91dGVyU3RhdGUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIu'@;
put 'Z2V0Um91dGVyU3RhdGUoKX1jb25zdHJ1Y3Rvcigpe3RoaXMuZGlzcG9zZWQ9ITEsdGhpcy5pc05nWm9uZUVuYWJsZWQ9ITEsdGhpcy5jb25zb2xlPVZyKF8kKSx0aGlzLnN0YXRlTWFuYWdlcj1WcihTWCksdGhpcy5vcHRpb25zPVZyKG43LHtvcHRpb25hbDohMH0pfHx7fSx0aGlzLnBlbmRp'@;
put 'bmdUYXNrcz1WcihtYSksdGhpcy51cmxVcGRhdGVTdHJhdGVneT10aGlzLm9wdGlvbnMudXJsVXBkYXRlU3RyYXRlZ3l8fCJkZWZlcnJlZCIsdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnM9VnIoT2spLHRoaXMudXJsU2VyaWFsaXplcj1WcigkOCksdGhpcy5sb2NhdGlvbj1WcihxMSksdGhp'@;
put 'cy51cmxIYW5kbGluZ1N0cmF0ZWd5PVZyKERGKSx0aGlzLl9ldmVudHM9bmV3IG5uLHRoaXMuZXJyb3JIYW5kbGVyPXRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXJ8fGg1ZSx0aGlzLm5hdmlnYXRlZD0hMSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneT1WcihsNWUpLHRoaXMub25TYW1lVXJsTmF2'@;
put 'aWdhdGlvbj10aGlzLm9wdGlvbnMub25TYW1lVXJsTmF2aWdhdGlvbnx8Imlnbm9yZSIsdGhpcy5jb25maWc9VnIocjcse29wdGlvbmFsOiEwfSk/LmZsYXQoKT8/W10sdGhpcy5jb21wb25lbnRJbnB1dEJpbmRpbmdFbmFibGVkPSEhVnIoQWsse29wdGlvbmFsOiEwfSksdGhpcy5ldmVudHNT'@;
put 'dWJzY3JpcHRpb249bmV3IFh0LHRoaXMuaXNOZ1pvbmVFbmFibGVkPVZyKFBvKWluc3RhbmNlb2YgUG8mJlBvLmlzSW5Bbmd1bGFyWm9uZSgpLHRoaXMucmVzZXRDb25maWcodGhpcy5jb25maWcpLHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLnNldHVwTmF2aWdhdGlvbnModGhpcyx0aGlz'@;
put 'LmN1cnJlbnRVcmxUcmVlLHRoaXMucm91dGVyU3RhdGUpLnN1YnNjcmliZSh7ZXJyb3I6YT0+e3RoaXMuY29uc29sZS53YXJuKGEpfX0pLHRoaXMuc3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl9c3Vic2NyaWJlVG9OYXZpZ2F0aW9uRXZlbnRzKCl7Y29uc3QgYT10aGlzLm5hdmlnYXRp'@;
put 'b25UcmFuc2l0aW9ucy5ldmVudHMuc3Vic2NyaWJlKGQ9Pnt0cnl7Y29uc3QgaD10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50VHJhbnNpdGlvbixmPXRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9uO2lmKG51bGwhPT1oJiZudWxsIT09ZilpZih0'@;
put 'aGlzLnN0YXRlTWFuYWdlci5oYW5kbGVSb3V0ZXJFdmVudChkLGYpLGQgaW5zdGFuY2VvZiBLOCYmZC5jb2RlIT09SjEuUmVkaXJlY3QmJmQuY29kZSE9PUoxLlN1cGVyc2VkZWRCeU5ld05hdmlnYXRpb24pdGhpcy5uYXZpZ2F0ZWQ9ITA7ZWxzZSBpZihkIGluc3RhbmNlb2YgZmYpdGhpcy5u'@;
put 'YXZpZ2F0ZWQ9ITA7ZWxzZSBpZihkIGluc3RhbmNlb2YgZkYpe2NvbnN0IHY9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGQudXJsLGguY3VycmVudFJhd1VybCksVD17aW5mbzpoLmV4dHJhcy5pbmZvLHNraXBMb2NhdGlvbkNoYW5nZTpoLmV4dHJhcy5za2lwTG9jYXRpb25DaGFu'@;
put 'Z2UscmVwbGFjZVVybDoiZWFnZXIiPT09dGhpcy51cmxVcGRhdGVTdHJhdGVneXx8YTVlKGguc291cmNlKX07dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24odixZeSxudWxsLFQse3Jlc29sdmU6aC5yZXNvbHZlLHJlamVjdDpoLnJlamVjdCxwcm9taXNlOmgucHJvbWlzZX0pfShmdW5jdGlvbiBn'@;
put 'NWUoYyl7cmV0dXJuIShjIGluc3RhbmNlb2YgaEZ8fGMgaW5zdGFuY2VvZiBmRil9KShkKSYmdGhpcy5fZXZlbnRzLm5leHQoZCl9Y2F0Y2goaCl7dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMudHJhbnNpdGlvbkFib3J0U3ViamVjdC5uZXh0KGgpfX0pO3RoaXMuZXZlbnRzU3Vic2NyaXB0'@;
put 'aW9uLmFkZChhKX1yZXNldFJvb3RDb21wb25lbnRUeXBlKGEpe3RoaXMucm91dGVyU3RhdGUucm9vdC5jb21wb25lbnQ9YSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5yb290Q29tcG9uZW50VHlwZT1hfWluaXRpYWxOYXZpZ2F0aW9uKCl7dGhpcy5zZXRVcExvY2F0aW9uQ2hhbmdlTGlz'@;
put 'dGVuZXIoKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5oYXNSZXF1ZXN0ZWROYXZpZ2F0aW9ufHx0aGlzLm5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSxZeSx0aGlzLnN0YXRlTWFuYWdlci5yZXN0b3JlZFN0YXRlKCkpfXNldFVwTG9jYXRpb25D'@;
put 'aGFuZ2VMaXN0ZW5lcigpe3RoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uPz89dGhpcy5zdGF0ZU1hbmFnZXIucmVnaXN0ZXJOb25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VMaXN0ZW5lcigoYSxkKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLm5hdmlnYXRlVG9T'@;
put 'eW5jV2l0aEJyb3dzZXIoYSwicG9wc3RhdGUiLGQpfSwwKX0pfW5hdmlnYXRlVG9TeW5jV2l0aEJyb3dzZXIoYSxkLGgpe2NvbnN0IGY9e3JlcGxhY2VVcmw6ITB9LHY9aD8ubmF2aWdhdGlvbklkP2g6bnVsbDtpZihoKXtjb25zdCBZPXsuLi5ofTtkZWxldGUgWS5uYXZpZ2F0aW9uSWQsZGVs'@;
put 'ZXRlIFkuXHUwMjc1cm91dGVyUGFnZUlkLDAhPT1PYmplY3Qua2V5cyhZKS5sZW5ndGgmJihmLnN0YXRlPVkpfWNvbnN0IFQ9dGhpcy5wYXJzZVVybChhKTt0aGlzLnNjaGVkdWxlTmF2aWdhdGlvbihULGQsdixmKX1nZXQgdXJsKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplVXJsKHRoaXMuY3Vy'@;
put 'cmVudFVybFRyZWUpfWdldEN1cnJlbnROYXZpZ2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmN1cnJlbnROYXZpZ2F0aW9ufWdldCBsYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb24oKXtyZXR1cm4gdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMubGFzdFN1Y2Nlc3Nm'@;
put 'dWxOYXZpZ2F0aW9ufXJlc2V0Q29uZmlnKGEpe3RoaXMuY29uZmlnPWEubWFwKE1GKSx0aGlzLm5hdmlnYXRlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuZGlzcG9zZSgpfWRpc3Bvc2UoKXt0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jb21wbGV0ZSgpLHRoaXMubm9uUm91dGVyQ3VycmVu'@;
put 'dEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uJiYodGhpcy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj12b2lkIDApLHRoaXMuZGlzcG9zZWQ9ITAsdGhpcy5ldmVu'@;
put 'dHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1jcmVhdGVVcmxUcmVlKGEsZD17fSl7Y29uc3R7cmVsYXRpdmVUbzpoLHF1ZXJ5UGFyYW1zOmYsZnJhZ21lbnQ6dixxdWVyeVBhcmFtc0hhbmRsaW5nOlQscHJlc2VydmVGcmFnbWVudDpZfT1kLHJlPVk/dGhpcy5jdXJyZW50VXJsVHJlZS5m'@;
put 'cmFnbWVudDp2O2xldCBfZSxmZT1udWxsO3N3aXRjaChUKXtjYXNlIm1lcmdlIjpmZT17Li4udGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcywuLi5mfTticmVhaztjYXNlInByZXNlcnZlIjpmZT10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6ZmU9'@;
put 'Znx8bnVsbH1udWxsIT09ZmUmJihmZT10aGlzLnJlbW92ZUVtcHR5UHJvcHMoZmUpKTt0cnl7X2U9R0soaD9oLnNuYXBzaG90OnRoaXMucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCl9Y2F0Y2h7KCJzdHJpbmciIT10eXBlb2YgYVswXXx8IWFbMF0uc3RhcnRzV2l0aCgiLyIpKSYmKGE9W10p'@;
put 'LF9lPXRoaXMuY3VycmVudFVybFRyZWUucm9vdH1yZXR1cm4gJEsoX2UsYSxmZSxyZT8/bnVsbCl9bmF2aWdhdGVCeVVybChhLGQ9e3NraXBMb2NhdGlvbkNoYW5nZTohMX0pe2NvbnN0IGg9cTgoYSk/YTp0aGlzLnBhcnNlVXJsKGEpLGY9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdl'@;
put 'KGgsdGhpcy5yYXdVcmxUcmVlKTtyZXR1cm4gdGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oZixZeSxudWxsLGQpfW5hdmlnYXRlKGEsZD17c2tpcExvY2F0aW9uQ2hhbmdlOiExfSl7cmV0dXJuIGZ1bmN0aW9uIG01ZShjKXtmb3IobGV0IGw9MDtsPGMubGVuZ3RoO2wrKylpZihudWxsPT1jW2xd'@;
put 'KXRocm93IG5ldyB6big0MDA4LCExKX0oYSksdGhpcy5uYXZpZ2F0ZUJ5VXJsKHRoaXMuY3JlYXRlVXJsVHJlZShhLGQpLGQpfXNlcmlhbGl6ZVVybChhKXtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShhKX1wYXJzZVVybChhKXt0cnl7cmV0dXJuIHRoaXMudXJsU2VyaWFs'@;
put 'aXplci5wYXJzZShhKX1jYXRjaHtyZXR1cm4gdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKCIvIil9fWlzQWN0aXZlKGEsZCl7bGV0IGg7aWYoaD0hMD09PWQ/ey4uLmY1ZX06ITE9PT1kP3suLi5wNWV9OmQscTgoYSkpcmV0dXJuIE5LKHRoaXMuY3VycmVudFVybFRyZWUsYSxoKTtjb25zdCBm'@;
put 'PXRoaXMucGFyc2VVcmwoYSk7cmV0dXJuIE5LKHRoaXMuY3VycmVudFVybFRyZWUsZixoKX1yZW1vdmVFbXB0eVByb3BzKGEpe3JldHVybiBPYmplY3QuZW50cmllcyhhKS5yZWR1Y2UoKGQsW2gsZl0pPT4obnVsbCE9ZiYmKGRbaF09ZiksZCkse30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQs'@;
put 'aCxmLHYpe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IFQsWSxyZTt2PyhUPXYucmVzb2x2ZSxZPXYucmVqZWN0LHJlPXYucHJvbWlzZSk6cmU9bmV3IFByb21pc2UoKF9lLGtlKT0+e1Q9X2UsWT1rZX0pO2NvbnN0IGZlPXRoaXMucGVuZGluZ1Rhc2tz'@;
put 'LmFkZCgpO3JldHVybiB4WCh0aGlzLCgpPT57cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMucGVuZGluZ1Rhc2tzLnJlbW92ZShmZSkpfSksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFuZGxlTmF2aWdhdGlvblJlcXVlc3Qoe3NvdXJjZTpkLHJlc3RvcmVkU3RhdGU6aCxjdXJyZW50VXJs'@;
put 'VHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLGN1cnJlbnRSYXdVcmw6dGhpcy5jdXJyZW50VXJsVHJlZSxyYXdVcmw6YSxleHRyYXM6ZixyZXNvbHZlOlQscmVqZWN0OlkscHJvbWlzZTpyZSxjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3Rh'@;
put 'dGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLHJlLmNhdGNoKF9lPT5Qcm9taXNlLnJlamVjdChfZSkpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'LHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGswPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQpe3RoaXMucm91dGVyPWEsdGhpcy5yb3V0ZT1kLHRoaXMudGFiSW5kZXhBdHRyaWJ1dGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMubG9jYXRp'@;
put 'b25TdHJhdGVneT1ULHRoaXMuaHJlZj1udWxsLHRoaXMuY29tbWFuZHM9bnVsbCx0aGlzLm9uQ2hhbmdlcz1uZXcgbm4sdGhpcy5wcmVzZXJ2ZUZyYWdtZW50PSExLHRoaXMuc2tpcExvY2F0aW9uQ2hhbmdlPSExLHRoaXMucmVwbGFjZVVybD0hMTtjb25zdCBZPXYubmF0aXZlRWxlbWVudC50'@;
put 'YWdOYW1lPy50b0xvd2VyQ2FzZSgpO3RoaXMuaXNBbmNob3JFbGVtZW50PSJhIj09PVl8fCJhcmVhIj09PVksdGhpcy5pc0FuY2hvckVsZW1lbnQ/dGhpcy5zdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKHJlPT57cmUgaW5zdGFuY2VvZiBmZiYmdGhpcy51cGRhdGVIcmVmKCl9KTp0'@;
put 'aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKCIwIil9c2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoYSl7bnVsbCE9dGhpcy50YWJJbmRleEF0dHJpYnV0ZXx8dGhpcy5pc0FuY2hvckVsZW1lbnR8fHRoaXMuYXBwbHlBdHRyaWJ1dGVWYWx1ZSgidGFiaW5kZXgiLGEpfW5nT25DaGFu'@;
put 'Z2VzKGEpe3RoaXMuaXNBbmNob3JFbGVtZW50JiZ0aGlzLnVwZGF0ZUhyZWYoKSx0aGlzLm9uQ2hhbmdlcy5uZXh0KHRoaXMpfXNldCByb3V0ZXJMaW5rKGEpe251bGwhPWE/KHRoaXMuY29tbWFuZHM9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2'@;
put 'ZUVsKCIwIikpOih0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbChudWxsKSl9b25DbGljayhhLGQsaCxmLHYpe2NvbnN0IFQ9dGhpcy51cmxUcmVlO3JldHVybiEhKG51bGw9PT1UfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxm'@;
put 'fHx2fHwic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChULHtza2lwTG9jYXRpb25DaGFuZ2U6dGhpcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDp0aGlzLnJlcGxhY2VVcmwsc3RhdGU6'@;
put 'dGhpcy5zdGF0ZSxpbmZvOnRoaXMuaW5mb30pLCF0aGlzLmlzQW5jaG9yRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX11cGRhdGVIcmVmKCl7Y29uc3QgYT10aGlzLnVybFRyZWU7dGhpcy5ocmVmPW51bGwhPT1hJiZ0aGlzLmxvY2F0aW9u'@;
put 'U3RyYXRlZ3k/dGhpcy5sb2NhdGlvblN0cmF0ZWd5Py5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKGEpKTpudWxsO2NvbnN0IGQ9bnVsbD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFZDKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gTEkoYyxsKXtyZXR1cm4i'@;
put 'c3JjIj09PWwmJigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFzZSI9PT1jfHwibGluayI9PT1jKT9OQzokX30obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50'@;
put 'YWdOYW1lLnRvTG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGQpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBoPXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQp'@;
put 'OmgucmVtb3ZlQXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0'@;
put 'aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJhbXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfXN0YXRpYyNlPXRoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoenMpLHN0KE1jKSxIaCgidGFiaW5kZXgiKSxzdChjcyksc3QoJGkpLHN0KFU1KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJvdXRlckxpbmsiLCIiXV0saG9zdFZhcnM6'@;
put 'MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJjbGljayIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DbGljayh2LmJ1dHRvbix2LmN0cmxLZXksdi5zaGlmdEtleSx2LmFsdEtleSx2Lm1ldGFLZXkpfSksMiZkJiZocigidGFyZ2V0IixoLnRhcmdldCl9LGlucHV0czp7dGFy'@;
put 'Z2V0OiJ0YXJnZXQiLHF1ZXJ5UGFyYW1zOiJxdWVyeVBhcmFtcyIsZnJhZ21lbnQ6ImZyYWdtZW50IixxdWVyeVBhcmFtc0hhbmRsaW5nOiJxdWVyeVBhcmFtc0hhbmRsaW5nIixzdGF0ZToic3RhdGUiLGluZm86ImluZm8iLHJlbGF0aXZlVG86InJlbGF0aXZlVG8iLHByZXNlcnZlRnJhZ21l'@;
put 'bnQ6W1FuLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJwcmVzZXJ2ZUZyYWdtZW50IiwicHJlc2VydmVGcmFnbWVudCIseDBdLHNraXBMb2NhdGlvbkNoYW5nZTpbUW4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInNraXBMb2NhdGlvbkNoYW5nZSIsInNraXBMb2NhdGlvbkNoYW5n'@;
put 'ZSIseDBdLHJlcGxhY2VVcmw6W1FuLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJyZXBsYWNlVXJsIiwicmVwbGFjZVVybCIseDBdLHJvdXRlckxpbms6InJvdXRlckxpbmsifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltRMixCYV19KX1yZXR1cm4gY30pKCksS3k9KCgpPT57Y2xhc3Mg'@;
put 'Y3tnZXQgaXNBY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJvdXRlcj1hLHRoaXMuZWxlbWVudD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNkcj1mLHRoaXMubGluaz12LHRoaXMuY2xhc3Nlcz1bXSx0aGlzLl9pc0FjdGl2ZT0hMSx0'@;
put 'aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zPXtleGFjdDohMX0sdGhpcy5pc0FjdGl2ZUNoYW5nZT1uZXcgSXIsdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249YS5ldmVudHMuc3Vic2NyaWJlKFQ9PntUIGluc3RhbmNlb2YgZmYmJnRoaXMudXBkYXRlKCl9KX1uZ0FmdGVyQ29udGVu'@;
put 'dEluaXQoKXtObyh0aGlzLmxpbmtzLmNoYW5nZXMsTm8obnVsbCkpLnBpcGUoejgoKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZSgpLHRoaXMuc3Vic2NyaWJlVG9FYWNoTGlua09uQ2hhbmdlcygpfSl9c3Vic2NyaWJlVG9FYWNoTGlua09uQ2hhbmdlcygpe3RoaXMubGlua0lucHV0Q2hh'@;
put 'bmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtjb25zdCBhPVsuLi50aGlzLmxpbmtzLnRvQXJyYXkoKSx0aGlzLmxpbmtdLmZpbHRlcihkPT4hIWQpLm1hcChkPT5kLm9uQ2hhbmdlcyk7dGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPVpjKGEpLnBpcGUoejgoKSkuc3Vi'@;
put 'c2NyaWJlKGQ9Pnt0aGlzLl9pc0FjdGl2ZSE9PXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKShkKSYmdGhpcy51cGRhdGUoKX0pfXNldCByb3V0ZXJMaW5rQWN0aXZlKGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKT9hOmEuc3BsaXQoIiAiKTt0aGlzLmNsYXNzZXM9ZC5maWx0ZXIo'@;
put 'aD0+ISFoKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnVwZGF0ZSgpfW5nT25EZXN0cm95KCl7dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlKCl7IXRoaXMubGlua3N8'@;
put 'fCF0aGlzLnJvdXRlci5uYXZpZ2F0ZWR8fHF1ZXVlTWljcm90YXNrKCgpPT57Y29uc3QgYT10aGlzLmhhc0FjdGl2ZUxpbmtzKCk7dGhpcy5jbGFzc2VzLmZvckVhY2goZD0+e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRl'@;
put 'cmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlh'@;
put 'Q3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIpLHRoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNrKCks'@;
put 'dGhpcy5pc0FjdGl2ZUNoYW5nZS5lbWl0KGEpKX0pfWlzTGlua0FjdGl2ZShhKXtjb25zdCBkPWZ1bmN0aW9uIF81ZShjKXtyZXR1cm4hIWMucGF0aHN9KHRoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnMpP3RoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6dGhpcy5yb3V0ZXJMaW5rQWN0'@;
put 'aXZlT3B0aW9ucy5leGFjdHx8ITE7cmV0dXJuIGg9Pntjb25zdCBmPWgudXJsVHJlZTtyZXR1cm4hIWYmJmEuaXNBY3RpdmUoZixkKX19aGFzQWN0aXZlTGlua3MoKXtjb25zdCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhpcy5saW5rJiZhKHRoaXMubGluayl8'@;
put 'fHRoaXMubGlua3Muc29tZShhKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHpzKSxzdCgkaSksc3QoY3MpLHN0KEZhKSxzdChrMCw4KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsInJv'@;
put 'dXRlckxpbmtBY3RpdmUiLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oZCxoLGYpe2lmKDEmZCYmbnMoZixrMCw1KSwyJmQpe2xldCB2O01pKHY9Q2koKSkmJihoLmxpbmtzPXYpfX0saW5wdXRzOntyb3V0ZXJMaW5rQWN0aXZlT3B0aW9uczoicm91dGVyTGlua0FjdGl2ZU9wdGlvbnMi'@;
put 'LGFyaWFDdXJyZW50V2hlbkFjdGl2ZToiYXJpYUN1cnJlbnRXaGVuQWN0aXZlIixyb3V0ZXJMaW5rQWN0aXZlOiJyb3V0ZXJMaW5rQWN0aXZlIn0sb3V0cHV0czp7aXNBY3RpdmVDaGFuZ2U6ImlzQWN0aXZlQ2hhbmdlIn0sZXhwb3J0QXM6WyJyb3V0ZXJMaW5rQWN0aXZlIl0sc3RhbmRhbG9u'@;
put 'ZTohMCxmZWF0dXJlczpbQmFdfSl9cmV0dXJuIGN9KSgpO2NsYXNzIGtYe31sZXQgdjVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJvdXRlcj1hLHRoaXMuaW5qZWN0b3I9aCx0aGlzLnByZWxvYWRpbmdTdHJhdGVneT1mLHRoaXMubG9hZGVyPXZ9c2V0VXBQ'@;
put 'cmVsb2FkaW5nKCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoSGEoYT0+YSBpbnN0YW5jZW9mIGZmKSxVOCgoKT0+dGhpcy5wcmVsb2FkKCkpKS5zdWJzY3JpYmUoKCk9Pnt9KX1wcmVsb2FkKCl7cmV0dXJuIHRoaXMucHJvY2Vzc1JvdXRlcyh0aGlzLmluamVj'@;
put 'dG9yLHRoaXMucm91dGVyLmNvbmZpZyl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1wcm9jZXNzUm91dGVzKGEsZCl7Y29uc3QgaD1bXTtmb3IoY29uc3QgZiBvZiBkKXtmLnByb3ZpZGVycyYmIWYuX2luamVjdG9yJiYo'@;
put 'Zi5faW5qZWN0b3I9eDgoZi5wcm92aWRlcnMsYSxgUm91dGU6ICR7Zi5wYXRofWApKTtjb25zdCB2PWYuX2luamVjdG9yPz9hLFQ9Zi5fbG9hZGVkSW5qZWN0b3I/P3Y7KGYubG9hZENoaWxkcmVuJiYhZi5fbG9hZGVkUm91dGVzJiZ2b2lkIDA9PT1mLmNhbkxvYWR8fGYubG9hZENvbXBvbmVu'@;
put 'dCYmIWYuX2xvYWRlZENvbXBvbmVudCkmJmgucHVzaCh0aGlzLnByZWxvYWRDb25maWcodixmKSksKGYuY2hpbGRyZW58fGYuX2xvYWRlZFJvdXRlcykmJmgucHVzaCh0aGlzLnByb2Nlc3NSb3V0ZXMoVCxmLmNoaWxkcmVuPz9mLl9sb2FkZWRSb3V0ZXMpKX1yZXR1cm4gWmMoaCkucGlwZSh6'@;
put 'OCgpKX1wcmVsb2FkQ29uZmlnKGEsZCl7cmV0dXJuIHRoaXMucHJlbG9hZGluZ1N0cmF0ZWd5LnByZWxvYWQoZCwoKT0+e2xldCBoO2g9ZC5sb2FkQ2hpbGRyZW4mJnZvaWQgMD09PWQuY2FuTG9hZD90aGlzLmxvYWRlci5sb2FkQ2hpbGRyZW4oYSxkKTpObyhudWxsKTtjb25zdCBmPWgucGlw'@;
put 'ZShWdSh2PT5udWxsPT09dj9Obyh2b2lkIDApOihkLl9sb2FkZWRSb3V0ZXM9di5yb3V0ZXMsZC5fbG9hZGVkSW5qZWN0b3I9di5pbmplY3Rvcix0aGlzLnByb2Nlc3NSb3V0ZXModi5pbmplY3Rvcj8/YSx2LnJvdXRlcykpKSk7cmV0dXJuIGQubG9hZENvbXBvbmVudCYmIWQuX2xvYWRlZENv'@;
put 'bXBvbmVudD9aYyhbZix0aGlzLmxvYWRlci5sb2FkQ29tcG9uZW50KGQpXSkucGlwZSh6OCgpKTpmfSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcih6cyksZnIoRSQpLGZyKGRsKSxmcihrWCksZnIoVEYpKX07c3RhdGljI3Q9dGhpcy5c'@;
put 'dTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgQUY9bmV3IFlyKCIiKTtsZXQgRVg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHY9e30pe3RoaXMudXJsU2VyaWFsaXplcj1hLHRo'@;
put 'aXMudHJhbnNpdGlvbnM9ZCx0aGlzLnZpZXdwb3J0U2Nyb2xsZXI9aCx0aGlzLnpvbmU9Zix0aGlzLm9wdGlvbnM9dix0aGlzLmxhc3RJZD0wLHRoaXMubGFzdFNvdXJjZT0iaW1wZXJhdGl2ZSIsdGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zdG9yZT17fSx0aGlzLmVudmlyb25tZW50SW5qZWN0'@;
put 'b3I9VnIoZGwpLHYuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbnx8PSJkaXNhYmxlZCIsdi5hbmNob3JTY3JvbGxpbmd8fD0iZGlzYWJsZWQifWluaXQoKXsiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5z'@;
put 'ZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24oIm1hbnVhbCIpLHRoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY3JlYXRlU2Nyb2xsRXZlbnRzKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb249dGhpcy5jb25zdW1lU2Nyb2xsRXZlbnRzKCl9Y3JlYXRlU2Nyb2xsRXZl'@;
put 'bnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIEVrPyh0aGlzLnN0b3JlW3RoaXMubGFzdElkXT10aGlzLnZpZXdwb3J0U2Nyb2xsZXIuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLmxhc3RTb3VyY2U9YS5uYXZpZ2F0aW9uVHJp'@;
put 'Z2dlcix0aGlzLnJlc3RvcmVkSWQ9YS5yZXN0b3JlZFN0YXRlP2EucmVzdG9yZWRTdGF0ZS5uYXZpZ2F0aW9uSWQ6MCk6YSBpbnN0YW5jZW9mIGZmPyh0aGlzLmxhc3RJZD1hLmlkLHRoaXMuc2NoZWR1bGVTY3JvbGxFdmVudChhLHRoaXMudXJsU2VyaWFsaXplci5wYXJzZShhLnVybEFmdGVy'@;
put 'UmVkaXJlY3RzKS5mcmFnbWVudCkpOmEgaW5zdGFuY2VvZiBYOCYmYS5jb2RlPT09VGsuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uJiYodGhpcy5sYXN0U291cmNlPXZvaWQgMCx0aGlzLnJlc3RvcmVkSWQ9MCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIu'@;
put 'cGFyc2UoYS51cmwpLmZyYWdtZW50KSl9KX1jb25zdW1lU2Nyb2xsRXZlbnRzKCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShhPT57YSBpbnN0YW5jZW9mIHRYJiYoYS5wb3NpdGlvbj8idG9wIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0'@;
put 'aW9uP3RoaXMudmlld3BvcnRTY3JvbGxlci5zY3JvbGxUb1Bvc2l0aW9uKFswLDBdKToiZW5hYmxlZCI9PT10aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oYS5wb3NpdGlvbik6YS5hbmNob3ImJiJl'@;
put 'bmFibGVkIj09PXRoaXMub3B0aW9ucy5hbmNob3JTY3JvbGxpbmc/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvQW5jaG9yKGEuYW5jaG9yKToiZGlzYWJsZWQiIT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24mJnRoaXMudmlld3BvcnRTY3JvbGxlci5zY3Jv'@;
put 'bGxUb1Bvc2l0aW9uKFswLDBdKSl9KX1zY2hlZHVsZVNjcm9sbEV2ZW50KGEsZCl7dmFyIGg9dGhpczt0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoVyhmdW5jdGlvbiooKXt5aWVsZCBuZXcgUHJvbWlzZShmPT57c2V0VGltZW91dCgoKT0+e2YoKX0pLE52KCgpPT57ZigpfSx7aW5qZWN0'@;
put 'b3I6aC5lbnZpcm9ubWVudEluamVjdG9yfSl9KSxoLnpvbmUucnVuKCgpPT57aC50cmFuc2l0aW9ucy5ldmVudHMubmV4dChuZXcgdFgoYSwicG9wc3RhdGUiPT09aC5sYXN0U291cmNlP2guc3RvcmVbaC5yZXN0b3JlZElkXTpudWxsLGQpKX0pfSkpfW5nT25EZXN0cm95KCl7dGhpcy5yb3V0'@;
put 'ZXJFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7IWZ1bmN0aW9uIHJTKCl7dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIil9KCl9O3N0'@;
put 'YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG1mKGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19ZnVuY3Rpb24gRFgoKXtjb25zdCBjPVZyKHBhKTtyZXR1cm4gbD0+'@;
put 'e2NvbnN0IGE9Yy5nZXQoajMpO2lmKGwhPT1hLmNvbXBvbmVudHNbMF0pcmV0dXJuO2NvbnN0IGQ9Yy5nZXQoenMpLGg9Yy5nZXQoQVgpOzE9PT1jLmdldChMRikmJmQuaW5pdGlhbE5hdmlnYXRpb24oKSxjLmdldChMWCxudWxsLEFpLk9wdGlvbmFsKT8uc2V0VXBQcmVsb2FkaW5nKCksYy5n'@;
put 'ZXQoQUYsbnVsbCxBaS5PcHRpb25hbCk/LmluaXQoKSxkLnJlc2V0Um9vdENvbXBvbmVudFR5cGUoYS5jb21wb25lbnRUeXBlc1swXSksaC5jbG9zZWR8fChoLm5leHQoKSxoLmNvbXBsZXRlKCksaC51bnN1YnNjcmliZSgpKX19Y29uc3QgQVg9bmV3IFlyKCIiLHtmYWN0b3J5OigpPT5uZXcg'@;
put 'bm59KSxMRj1uZXcgWXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PjF9KSxMWD1uZXcgWXIoIiIpO2Z1bmN0aW9uIE01ZShjKXtyZXR1cm4gbWYoMCxbe3Byb3ZpZGU6TFgsdXNlRXhpc3Rpbmc6djVlfSx7cHJvdmlkZTprWCx1c2VFeGlzdGluZzpjfV0pfWZ1bmN0aW9uIFM1'@;
put 'ZShjKXtyZXR1cm4gbWYoOSxbe3Byb3ZpZGU6TVgsdXNlVmFsdWU6bzVlfSx7cHJvdmlkZTpDWCx1c2VWYWx1ZTp7c2tpcE5leHRUcmFuc2l0aW9uOiEhYz8uc2tpcEluaXRpYWxUcmFuc2l0aW9uLC4uLmN9fV0pfWNvbnN0IElYPW5ldyBZcigiUk9VVEVSX0ZPUlJPT1RfR1VBUkQiKSx4NWU9'@;
put 'W3ExLHtwcm92aWRlOiQ4LHVzZUNsYXNzOmFGfSx6cyx6eSx7cHJvdmlkZTpNYyx1c2VGYWN0b3J5OmZ1bmN0aW9uIFRYKGMpe3JldHVybiBjLnJvdXRlclN0YXRlLnJvb3R9LGRlcHM6W3pzXX0sVEYsW11dO2xldCBXYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9y'@;
put 'Um9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbeDVlLFtdLHtwcm92aWRlOnI3LG11bHRpOiEwLHVzZVZhbHVlOmF9LHtwcm92aWRlOklYLHVzZUZhY3Rvcnk6RDVlLGRlcHM6W1t6cyxuZXcgTHUsbmV3IGJ1XV19LHtwcm92aWRlOm43LHVzZVZhbHVlOmR8fHt9fSxkPy51'@;
put 'c2VIYXNoP3twcm92aWRlOlU1LHVzZUNsYXNzOmVmZX06e3Byb3ZpZGU6VTUsdXNlQ2xhc3M6dnF9LHtwcm92aWRlOkFGLHVzZUZhY3Rvcnk6KCk9Pntjb25zdCBjPVZyKG0zZSksbD1WcihQbyksYT1WcihuNyksZD1WcihPayksaD1WcigkOCk7cmV0dXJuIGEuc2Nyb2xsT2Zmc2V0JiZjLnNl'@;
put 'dE9mZnNldChhLnNjcm9sbE9mZnNldCksbmV3IEVYKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/TTVlKGQucHJlbG9hZGluZ1N0cmF0ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10sZD8uaW5pdGlhbE5hdmlnYXRpb24/QTVlKGQpOltdLGQ/LmJpbmRUb0NvbXBvbmVudElucHV0'@;
put 'cz9tZig4LFtsWCx7cHJvdmlkZTpBayx1c2VFeGlzdGluZzpsWH1dKS5cdTAyNzVwcm92aWRlcnM6W10sZD8uZW5hYmxlVmlld1RyYW5zaXRpb25zP1M1ZSgpLlx1MDI3NXByb3ZpZGVyczpbXSxbe3Byb3ZpZGU6UlgsdXNlRmFjdG9yeTpEWH0se3Byb3ZpZGU6aFAsbXVsdGk6ITAsdXNlRXhp'@;
put 'c3Rpbmc6Ulh9XV19fXN0YXRpYyBmb3JDaGlsZChhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnI3LG11bHRpOiEwLHVzZVZhbHVlOmF9XX19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihJWCw4KSl9O3N0YXRp'@;
put 'YyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7fSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEQ1ZShjKXtyZXR1cm4iZ3VhcmRlZCJ9ZnVuY3Rpb24gQTVlKGMpe3JldHVyblsiZGlzYWJsZWQiPT09Yy5pbml0aWFsTmF2aWdhdGlvbj9t'@;
put 'ZigzLFt7cHJvdmlkZTp1UCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1Wcih6cyk7cmV0dXJuKCk9PntsLnNldFVwTG9jYXRpb25DaGFuZ2VMaXN0ZW5lcigpfX19LHtwcm92aWRlOkxGLHVzZVZhbHVlOjJ9XSkuXHUwMjc1cHJvdmlkZXJzOltdLCJlbmFibGVkQmxvY2tpbmci'@;
put 'PT09Yy5pbml0aWFsTmF2aWdhdGlvbj9tZigyLFt7cHJvdmlkZTpMRix1c2VWYWx1ZTowfSx7cHJvdmlkZTp1UCxtdWx0aTohMCxkZXBzOltwYV0sdXNlRmFjdG9yeTpsPT57Y29uc3QgYT1sLmdldChKMmUsUHJvbWlzZS5yZXNvbHZlKCkpO3JldHVybigpPT5hLnRoZW4oKCk9Pm5ldyBQcm9t'@;
put 'aXNlKGQ9Pntjb25zdCBoPWwuZ2V0KHpzKSxmPWwuZ2V0KEFYKTt4WChoLCgpPT57ZCghMCl9KSxsLmdldChPaykuYWZ0ZXJQcmVhY3RpdmF0aW9uPSgpPT4oZCghMCksZi5jbG9zZWQ/Tm8odm9pZCAwKTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpb'@;
put 'XV19Y29uc3QgUlg9bmV3IFlyKCIiKTt2YXIgT1g9Uig1NTE4OCksSTVlPVIoNzg3NTUpO2NvbnN0IElGPXt1c2Vyc19hbGxvd2VkOjEsdmlld2VyX3Jvd3NfYWxsb3dlZDoxNSxlZGl0b3Jfcm93c19hbGxvd2VkOjE1LHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93'@;
put 'ZWQ6MTUsc3VibWl0X3Jvd3NfbGltaXQ6NSx2aWV3Ym94X2xpbWl0OjEsbGluZWFnZV9kYWlseV9saW1pdDozLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OjM1LHZpZXdib3g6ITAsZmlsZVVwbG9hZDohMCxlZGl0UmVjb3JkOiEwLGFkZFJlY29yZDohMH07dmFyIFExPWZ1bmN0aW9uKGMpe3Jl'@;
put 'dHVybiBjW2Mudmlld2VyX3Jvd3NfYWxsb3dlZD0wXT0idmlld2VyX3Jvd3NfYWxsb3dlZCIsY1tjLmVkaXRvcl9yb3dzX2FsbG93ZWQ9MV09ImVkaXRvcl9yb3dzX2FsbG93ZWQiLGNbYy5zdGFnZV9yb3dzX2FsbG93ZWQ9Ml09InN0YWdlX3Jvd3NfYWxsb3dlZCIsY1tjLmhpc3Rvcnlfcm93'@;
put 'c19hbGxvd2VkPTNdPSJoaXN0b3J5X3Jvd3NfYWxsb3dlZCIsY1tjLnN1Ym1pdF9yb3dzX2xpbWl0PTRdPSJzdWJtaXRfcm93c19saW1pdCIsY1tjLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0PTVdPSJ0YWJsZXNfaW5fbGlicmFyeV9saW1pdCIsY1tjLnZpZXdib3g9Nl09InZpZXdib3giLGNb'@;
put 'Yy52aWV3Ym94X2xpbWl0PTddPSJ2aWV3Ym94X2xpbWl0IixjW2MubGluZWFnZV9kYWlseV9saW1pdD04XT0ibGluZWFnZV9kYWlseV9saW1pdCIsY1tjLmZpbGVVcGxvYWQ9OV09ImZpbGVVcGxvYWQiLGNbYy5lZGl0UmVjb3JkPTEwXT0iZWRpdFJlY29yZCIsY1tjLmFkZFJlY29yZD0xMV09'@;
put 'ImFkZFJlY29yZCIsY30oUTF8fHt9KSxlZD1SKDM3MzQpLFBYPVIubihlZCksQ3U9UigxMzI0Nyk7bGV0IGk3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9c2V0RGNBZGFwdGVyU2V0dGluZ3MoYSl7dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1hfWdldERjQWRhcHRlclNldHRpbmdzKCl7'@;
put 'cmV0dXJuIHRoaXMuZGNBZGFwdGVyU2V0dGluZ3N9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1'@;
put 'cm4gY30pKCksUkY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudXNlckNoYW5nZT1uZXcgbm59c2V0IHVzZXIoYSl7dGhpcy5fdXNlcj1hLHRoaXMudXNlckNoYW5nZS5uZXh0KGEpfWdldCB1c2VyKCl7cmV0dXJuIHRoaXMuX3VzZXJ9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9'@;
put 'ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCksT0Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBubn1zdGF0aWMjZT10aGlz'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKSxHbD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuYWxlcnRzU2VydmljZT1h'@;
put 'LHRoaXMub25TaWRlYmFyVG9nZ2xlPW5ldyBJcix0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQ9bmV3IElyLHRoaXMub25TaG93QWJvcnRNb2RhbD1uZXcgSXIsdGhpcy5vblJlcXVlc3RzTW9kYWxPcGVuPW5ldyBJcix0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93PW5ldyBJcix0aGlzLnZpZXdM'@;
put 'YXN0VXJsPW51bGwsdGhpcy5zaWRlYmFyQ2xvc2VMaW1pdD0xMjgwfXNob3dEZW1vTGltaXRNb2RhbChhKXt0aGlzLm9uRGVtb0xpbWl0TW9kYWxTaG93LmVtaXQoYSl9c2hvd0luZm9Nb2RhbChhPSJJbmZvIixkKXt0aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh7bW9kYWxUaXRsZTphLG1l'@;
put 'c3NhZ2U6ZCxzYXNTZXJ2aWNlOiIiLGRldGFpbHM6bnVsbH0pfXNob3dBYm9ydE1vZGFsKGEsZCxoLGY9dm9pZCAwKXtofHwoaD1udWxsKTtsZXQgdj17c2FzU2VydmljZTphLG1lc3NhZ2U6ZCxkZXRhaWxzOmh9O2YmJih2Lm1vZGFsVGl0bGU9ZiksdGhpcy5vblNob3dBYm9ydE1vZGFsLmVt'@;
put 'aXQodil9b3BlblJlcXVlc3RzTW9kYWwoKXt0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW4uZW1pdCghMCl9Y2F0Y2hSZXNwb25zZUVycm9yKGEsZCl7bGV0IGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiO2lmKGQuZXJyb3Ipe2xldCBmO2g9ZC5lcnJvci5tZXNzYWdlLGQuZXJyb3IuZGV0'@;
put 'YWlscyYmZC5lcnJvci5kZXRhaWxzLmxvZyYmKGY9ZC5lcnJvci5kZXRhaWxzLmxvZyksKCFofHxoLnRyaW0oKS5sZW5ndGg8MSkmJihoPSJTQVMgU2VydmljZSBlcnJvciBvY3VycmVkIiksdGhpcy5zaG93QWJvcnRNb2RhbChhLGgse0xPRzpmfSwiUmVxdWVzdCBlcnJvciIpfWVsc2UgdGhp'@;
put 'cy5zaG93QWJvcnRNb2RhbChhLGgpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KCl9Y2xvc2VTaWRlYmFyKCl7d2luZG93LmlubmVyV2lkdGg8dGhpcy5zaWRlYmFyQ2xvc2VMaW1pdCYmdGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMX0pfW9wZW5T'@;
put 'aWRlYmFyKCl7dGhpcy5vblNpZGViYXJUb2dnbGUuZW1pdCh7b3BlbjohMH0pfXN0YXJ0dXBEYXRhTG9hZGVkKCl7dGhpcy5vblN0YXJ0dXBEYXRhTG9hZGVkLmVtaXQoKX1kaXNwYXRjaEV2ZW50KGEpe2xldCBkOyJmdW5jdGlvbiI9PXR5cGVvZiBFdmVudD9kPW5ldyBFdmVudChhKTooZD1k'@;
put 'b2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSxkLmluaXRFdmVudChhLCEwLCEwKSksd2luZG93LmRpc3BhdGNoRXZlbnQoZCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihPRikpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIo'@;
put 'e3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjbGFzcyBQa3t9Y2xhc3MgRmt7fWNsYXNzIFpke2NvbnN0cnVjdG9yKGwpe3RoaXMubm9ybWFsaXplZE5hbWVzPW5ldyBNYXAsdGhpcy5sYXp5VXBkYXRlPW51bGwsbD8ic3RyaW5n'@;
put 'Ij09dHlwZW9mIGw/dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLGwuc3BsaXQoIlxuIikuZm9yRWFjaChhPT57Y29uc3QgZD1hLmluZGV4T2YoIjoiKTtpZihkPjApe2NvbnN0IGg9YS5zbGljZSgwLGQpLGY9aC50b0xvd2VyQ2FzZSgpLHY9YS5zbGljZShkKzEpLnRy'@;
put 'aW0oKTt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUoaCxmKSx0aGlzLmhlYWRlcnMuaGFzKGYpP3RoaXMuaGVhZGVycy5nZXQoZikucHVzaCh2KTp0aGlzLmhlYWRlcnMuc2V0KGYsW3ZdKX19KX06dHlwZW9mIEhlYWRlcnM8InUiJiZsIGluc3RhbmNlb2YgSGVhZGVycz8odGhpcy5oZWFk'@;
put 'ZXJzPW5ldyBNYXAsbC5mb3JFYWNoKChhLGQpPT57dGhpcy5zZXRIZWFkZXJFbnRyaWVzKGQsYSl9KSk6dGhpcy5sYXp5SW5pdD0oKT0+e3RoaXMuaGVhZGVycz1uZXcgTWFwLE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFthLGRdKT0+e3RoaXMuc2V0SGVhZGVyRW50cmllcyhhLGQpfSl9'@;
put 'OnRoaXMuaGVhZGVycz1uZXcgTWFwfWhhcyhsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmhhcyhsLnRvTG93ZXJDYXNlKCkpfWdldChsKXt0aGlzLmluaXQoKTtjb25zdCBhPXRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gYSYmYS5sZW5ndGg+MD9h'@;
put 'WzBdOm51bGx9a2V5cygpe3JldHVybiB0aGlzLmluaXQoKSxBcnJheS5mcm9tKHRoaXMubm9ybWFsaXplZE5hbWVzLnZhbHVlcygpKX1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMuaGVhZGVycy5nZXQobC50b0xvd2VyQ2FzZSgpKXx8bnVsbH1hcHBlbmQobCxhKXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6ImEifSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJzIn0pfWRlbGV0ZShsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiZCJ9KX1tYXliZVNldE5vcm1hbGl6ZWROYW1l'@;
put 'KGwsYSl7dGhpcy5ub3JtYWxpemVkTmFtZXMuaGFzKGEpfHx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsKX1pbml0KCl7dGhpcy5sYXp5SW5pdCYmKHRoaXMubGF6eUluaXQgaW5zdGFuY2VvZiBaZD90aGlzLmNvcHlGcm9tKHRoaXMubGF6eUluaXQpOnRoaXMubGF6eUluaXQoKSx0aGlz'@;
put 'LmxhenlJbml0PW51bGwsdGhpcy5sYXp5VXBkYXRlJiYodGhpcy5sYXp5VXBkYXRlLmZvckVhY2gobD0+dGhpcy5hcHBseVVwZGF0ZShsKSksdGhpcy5sYXp5VXBkYXRlPW51bGwpKX1jb3B5RnJvbShsKXtsLmluaXQoKSxBcnJheS5mcm9tKGwuaGVhZGVycy5rZXlzKCkpLmZvckVhY2goYT0+'@;
put 'e3RoaXMuaGVhZGVycy5zZXQoYSxsLmhlYWRlcnMuZ2V0KGEpKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5zZXQoYSxsLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSkpfSl9Y2xvbmUobCl7Y29uc3QgYT1uZXcgWmQ7cmV0dXJuIGEubGF6eUluaXQ9dGhpcy5sYXp5SW5pdCYmdGhpcy5sYXp5SW5pdCBp'@;
put 'bnN0YW5jZW9mIFpkP3RoaXMubGF6eUluaXQ6dGhpcyxhLmxhenlVcGRhdGU9KHRoaXMubGF6eVVwZGF0ZXx8W10pLmNvbmNhdChbbF0pLGF9YXBwbHlVcGRhdGUobCl7Y29uc3QgYT1sLm5hbWUudG9Mb3dlckNhc2UoKTtzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmxldCBkPWwudmFs'@;
put 'dWU7aWYoInN0cmluZyI9PXR5cGVvZiBkJiYoZD1bZF0pLDA9PT1kLmxlbmd0aClyZXR1cm47dGhpcy5tYXliZVNldE5vcm1hbGl6ZWROYW1lKGwubmFtZSxhKTtjb25zdCBoPSgiYSI9PT1sLm9wP3RoaXMuaGVhZGVycy5nZXQoYSk6dm9pZCAwKXx8W107aC5wdXNoKC4uLmQpLHRoaXMuaGVh'@;
put 'ZGVycy5zZXQoYSxoKTticmVhaztjYXNlImQiOmNvbnN0IGY9bC52YWx1ZTtpZihmKXtsZXQgdj10aGlzLmhlYWRlcnMuZ2V0KGEpO2lmKCF2KXJldHVybjt2PXYuZmlsdGVyKFQ9Pi0xPT09Zi5pbmRleE9mKFQpKSwwPT09di5sZW5ndGg/KHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5u'@;
put 'b3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpKTp0aGlzLmhlYWRlcnMuc2V0KGEsdil9ZWxzZSB0aGlzLmhlYWRlcnMuZGVsZXRlKGEpLHRoaXMubm9ybWFsaXplZE5hbWVzLmRlbGV0ZShhKX19c2V0SGVhZGVyRW50cmllcyhsLGEpe2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYSk/YTpbYV0pLm1h'@;
put 'cChmPT5mLnRvU3RyaW5nKCkpLGg9bC50b0xvd2VyQ2FzZSgpO3RoaXMuaGVhZGVycy5zZXQoaCxkKSx0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobCxoKX1mb3JFYWNoKGwpe3RoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMua2V5cygpKS5mb3JFYWNoKGE9'@;
put 'PmwodGhpcy5ub3JtYWxpemVkTmFtZXMuZ2V0KGEpLHRoaXMuaGVhZGVycy5nZXQoYSkpKX19Y2xhc3MgUjVle2VuY29kZUtleShsKXtyZXR1cm4gRlgobCl9ZW5jb2RlVmFsdWUobCl7cmV0dXJuIEZYKGwpfWRlY29kZUtleShsKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGwpfWRlY29k'@;
put 'ZVZhbHVlKGwpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQobCl9fWNvbnN0IFA1ZT0vJShcZFthLWYwLTldKS9naSxGNWU9ezQwOiJAIiwiM0EiOiI6IiwyNDoiJCIsIjJDIjoiLCIsIjNCIjoiOyIsIjNEIjoiPSIsIjNGIjoiPyIsIjJGIjoiLyJ9O2Z1bmN0aW9uIEZYKGMpe3JldHVybiBl'@;
put 'bmNvZGVVUklDb21wb25lbnQoYykucmVwbGFjZShQNWUsKGwsYSk9PkY1ZVthXT8/bCl9ZnVuY3Rpb24gSGsoYyl7cmV0dXJuYCR7Y31gfWNsYXNzIFI0e2NvbnN0cnVjdG9yKGw9e30pe2lmKHRoaXMudXBkYXRlcz1udWxsLHRoaXMuY2xvbmVGcm9tPW51bGwsdGhpcy5lbmNvZGVyPWwuZW5j'@;
put 'b2Rlcnx8bmV3IFI1ZSxsLmZyb21TdHJpbmcpe2lmKGwuZnJvbU9iamVjdCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBzcGVjaWZ5IGJvdGggZnJvbVN0cmluZyBhbmQgZnJvbU9iamVjdC4iKTt0aGlzLm1hcD1mdW5jdGlvbiBPNWUoYyxsKXtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGMubGVu'@;
put 'Z3RoPjAmJmMucmVwbGFjZSgvXlw/LywiIikuc3BsaXQoIiYiKS5mb3JFYWNoKGg9Pntjb25zdCBmPWguaW5kZXhPZigiPSIpLFt2LFRdPS0xPT1mP1tsLmRlY29kZUtleShoKSwiIl06W2wuZGVjb2RlS2V5KGguc2xpY2UoMCxmKSksbC5kZWNvZGVWYWx1ZShoLnNsaWNlKGYrMSkpXSxZPWEu'@;
put 'Z2V0KHYpfHxbXTtZLnB1c2goVCksYS5zZXQodixZKX0pLGF9KGwuZnJvbVN0cmluZyx0aGlzLmVuY29kZXIpfWVsc2UgbC5mcm9tT2JqZWN0Pyh0aGlzLm1hcD1uZXcgTWFwLE9iamVjdC5rZXlzKGwuZnJvbU9iamVjdCkuZm9yRWFjaChhPT57Y29uc3QgZD1sLmZyb21PYmplY3RbYV0saD1B'@;
put 'cnJheS5pc0FycmF5KGQpP2QubWFwKEhrKTpbSGsoZCldO3RoaXMubWFwLnNldChhLGgpfSkpOnRoaXMubWFwPW51bGx9aGFzKGwpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLm1hcC5oYXMobCl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5tYXAuZ2V0KGwpO3JldHVybiBhP2Fb'@;
put 'MF06bnVsbH1nZXRBbGwobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmdldChsKXx8bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5tYXAua2V5cygpKX1hcHBlbmQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJh'@;
put 'In0pfWFwcGVuZEFsbChsKXtjb25zdCBhPVtdO3JldHVybiBPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9Pntjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goZj0+e2EucHVzaCh7cGFyYW06ZCx2YWx1ZTpmLG9wOiJhIn0pfSk6YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmgs'@;
put 'b3A6ImEifSl9KSx0aGlzLmNsb25lKGEpfXNldChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtwYXJhbTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoiZCJ9KX10b1N0cmluZygpe3JldHVybiB0aGlzLmluaXQoKSx0'@;
put 'aGlzLmtleXMoKS5tYXAobD0+e2NvbnN0IGE9dGhpcy5lbmNvZGVyLmVuY29kZUtleShsKTtyZXR1cm4gdGhpcy5tYXAuZ2V0KGwpLm1hcChkPT5hKyI9Iit0aGlzLmVuY29kZXIuZW5jb2RlVmFsdWUoZCkpLmpvaW4oIiYiKX0pLmZpbHRlcihsPT4iIiE9PWwpLmpvaW4oIiYiKX1jbG9uZShs'@;
put 'KXtjb25zdCBhPW5ldyBSNCh7ZW5jb2Rlcjp0aGlzLmVuY29kZXJ9KTtyZXR1cm4gYS5jbG9uZUZyb209dGhpcy5jbG9uZUZyb218fHRoaXMsYS51cGRhdGVzPSh0aGlzLnVwZGF0ZXN8fFtdKS5jb25jYXQobCksYX1pbml0KCl7bnVsbD09PXRoaXMubWFwJiYodGhpcy5tYXA9bmV3IE1hcCks'@;
put 'bnVsbCE9PXRoaXMuY2xvbmVGcm9tJiYodGhpcy5jbG9uZUZyb20uaW5pdCgpLHRoaXMuY2xvbmVGcm9tLmtleXMoKS5mb3JFYWNoKGw9PnRoaXMubWFwLnNldChsLHRoaXMuY2xvbmVGcm9tLm1hcC5nZXQobCkpKSx0aGlzLnVwZGF0ZXMuZm9yRWFjaChsPT57c3dpdGNoKGwub3Ape2Nhc2Ui'@;
put 'YSI6Y2FzZSJzIjpjb25zdCBhPSgiYSI9PT1sLm9wP3RoaXMubWFwLmdldChsLnBhcmFtKTp2b2lkIDApfHxbXTthLnB1c2goSGsobC52YWx1ZSkpLHRoaXMubWFwLnNldChsLnBhcmFtLGEpO2JyZWFrO2Nhc2UiZCI6aWYodm9pZCAwPT09bC52YWx1ZSl7dGhpcy5tYXAuZGVsZXRlKGwucGFy'@;
put 'YW0pO2JyZWFrfXtsZXQgZD10aGlzLm1hcC5nZXQobC5wYXJhbSl8fFtdO2NvbnN0IGg9ZC5pbmRleE9mKEhrKGwudmFsdWUpKTstMSE9PWgmJmQuc3BsaWNlKGgsMSksZC5sZW5ndGg+MD90aGlzLm1hcC5zZXQobC5wYXJhbSxkKTp0aGlzLm1hcC5kZWxldGUobC5wYXJhbSl9fX0pLHRoaXMu'@;
put 'Y2xvbmVGcm9tPXRoaXMudXBkYXRlcz1udWxsKX19Y2xhc3MgSDVle2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1zZXQobCxhKXtyZXR1cm4gdGhpcy5tYXAuc2V0KGwsYSksdGhpc31nZXQobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKXx8dGhpcy5tYXAuc2V0KGwsbC5kZWZhdWx0'@;
put 'VmFsdWUoKSksdGhpcy5tYXAuZ2V0KGwpfWRlbGV0ZShsKXtyZXR1cm4gdGhpcy5tYXAuZGVsZXRlKGwpLHRoaXN9aGFzKGwpe3JldHVybiB0aGlzLm1hcC5oYXMobCl9a2V5cygpe3JldHVybiB0aGlzLm1hcC5rZXlzKCl9fWZ1bmN0aW9uIEhYKGMpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZm'@;
put 'ZXI8InUiJiZjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gTlgoYyl7cmV0dXJuIHR5cGVvZiBCbG9iPCJ1IiYmYyBpbnN0YW5jZW9mIEJsb2J9ZnVuY3Rpb24gVlgoYyl7cmV0dXJuIHR5cGVvZiBGb3JtRGF0YTwidSImJmMgaW5zdGFuY2VvZiBGb3JtRGF0YX1jbGFzcyBYeXtj'@;
put 'b25zdHJ1Y3RvcihsLGEsZCxoKXtsZXQgZjtpZih0aGlzLnVybD1hLHRoaXMuYm9keT1udWxsLHRoaXMucmVwb3J0UHJvZ3Jlc3M9ITEsdGhpcy53aXRoQ3JlZGVudGlhbHM9ITEsdGhpcy5yZXNwb25zZVR5cGU9Impzb24iLHRoaXMubWV0aG9kPWwudG9VcHBlckNhc2UoKSxmdW5jdGlvbiBO'@;
put 'NWUoYyl7c3dpdGNoKGMpe2Nhc2UiREVMRVRFIjpjYXNlIkdFVCI6Y2FzZSJIRUFEIjpjYXNlIk9QVElPTlMiOmNhc2UiSlNPTlAiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fSh0aGlzLm1ldGhvZCl8fGg/KHRoaXMuYm9keT12b2lkIDAhPT1kP2Q6bnVsbCxmPWgpOmY9ZCxmJiYodGhp'@;
put 'cy5yZXBvcnRQcm9ncmVzcz0hIWYucmVwb3J0UHJvZ3Jlc3MsdGhpcy53aXRoQ3JlZGVudGlhbHM9ISFmLndpdGhDcmVkZW50aWFscyxmLnJlc3BvbnNlVHlwZSYmKHRoaXMucmVzcG9uc2VUeXBlPWYucmVzcG9uc2VUeXBlKSxmLmhlYWRlcnMmJih0aGlzLmhlYWRlcnM9Zi5oZWFkZXJzKSxm'@;
put 'LmNvbnRleHQmJih0aGlzLmNvbnRleHQ9Zi5jb250ZXh0KSxmLnBhcmFtcyYmKHRoaXMucGFyYW1zPWYucGFyYW1zKSx0aGlzLnRyYW5zZmVyQ2FjaGU9Zi50cmFuc2ZlckNhY2hlKSx0aGlzLmhlYWRlcnM/Pz1uZXcgWmQsdGhpcy5jb250ZXh0Pz89bmV3IEg1ZSx0aGlzLnBhcmFtcyl7Y29u'@;
put 'c3Qgdj10aGlzLnBhcmFtcy50b1N0cmluZygpO2lmKDA9PT12Lmxlbmd0aCl0aGlzLnVybFdpdGhQYXJhbXM9YTtlbHNle2NvbnN0IFQ9YS5pbmRleE9mKCI/Iik7dGhpcy51cmxXaXRoUGFyYW1zPWErKC0xPT09VD8iPyI6VDxhLmxlbmd0aC0xPyImIjoiIikrdn19ZWxzZSB0aGlzLnBhcmFt'@;
put 'cz1uZXcgUjQsdGhpcy51cmxXaXRoUGFyYW1zPWF9c2VyaWFsaXplQm9keSgpe3JldHVybiBudWxsPT09dGhpcy5ib2R5P251bGw6InN0cmluZyI9PXR5cGVvZiB0aGlzLmJvZHl8fEhYKHRoaXMuYm9keSl8fE5YKHRoaXMuYm9keSl8fFZYKHRoaXMuYm9keSl8fGZ1bmN0aW9uIFY1ZShjKXty'@;
put 'ZXR1cm4gdHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSImJmMgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXN9KHRoaXMuYm9keSk/dGhpcy5ib2R5OnRoaXMuYm9keSBpbnN0YW5jZW9mIFI0P3RoaXMuYm9keS50b1N0cmluZygpOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwiYm9vbGVh'@;
put 'biI9PXR5cGVvZiB0aGlzLmJvZHl8fEFycmF5LmlzQXJyYXkodGhpcy5ib2R5KT9KU09OLnN0cmluZ2lmeSh0aGlzLmJvZHkpOnRoaXMuYm9keS50b1N0cmluZygpfWRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHl8fFZYKHRoaXMuYm9keSk/bnVsbDpO'@;
put 'WCh0aGlzLmJvZHkpP3RoaXMuYm9keS50eXBlfHxudWxsOkhYKHRoaXMuYm9keSk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keT8idGV4dC9wbGFpbiI6dGhpcy5ib2R5IGluc3RhbmNlb2YgUjQ/ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04'@;
put 'Ijoib2JqZWN0Ij09dHlwZW9mIHRoaXMuYm9keXx8Im51bWJlciI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keT8iYXBwbGljYXRpb24vanNvbiI6bnVsbH1jbG9uZShsPXt9KXtjb25zdCBhPWwubWV0aG9kfHx0aGlzLm1ldGhvZCxkPWwudXJsfHx0aGlz'@;
put 'LnVybCxoPWwucmVzcG9uc2VUeXBlfHx0aGlzLnJlc3BvbnNlVHlwZSxmPWwudHJhbnNmZXJDYWNoZT8/dGhpcy50cmFuc2ZlckNhY2hlLHY9dm9pZCAwIT09bC5ib2R5P2wuYm9keTp0aGlzLmJvZHksVD1sLndpdGhDcmVkZW50aWFscz8/dGhpcy53aXRoQ3JlZGVudGlhbHMsWT1sLnJlcG9y'@;
put 'dFByb2dyZXNzPz90aGlzLnJlcG9ydFByb2dyZXNzO2xldCByZT1sLmhlYWRlcnN8fHRoaXMuaGVhZGVycyxmZT1sLnBhcmFtc3x8dGhpcy5wYXJhbXM7Y29uc3QgX2U9bC5jb250ZXh0Pz90aGlzLmNvbnRleHQ7cmV0dXJuIHZvaWQgMCE9PWwuc2V0SGVhZGVycyYmKHJlPU9iamVjdC5rZXlz'@;
put 'KGwuc2V0SGVhZGVycykucmVkdWNlKChrZSxXZSk9PmtlLnNldChXZSxsLnNldEhlYWRlcnNbV2VdKSxyZSkpLGwuc2V0UGFyYW1zJiYoZmU9T2JqZWN0LmtleXMobC5zZXRQYXJhbXMpLnJlZHVjZSgoa2UsV2UpPT5rZS5zZXQoV2UsbC5zZXRQYXJhbXNbV2VdKSxmZSkpLG5ldyBYeShhLGQs'@;
put 'dix7cGFyYW1zOmZlLGhlYWRlcnM6cmUsY29udGV4dDpfZSxyZXBvcnRQcm9ncmVzczpZLHJlc3BvbnNlVHlwZTpoLHdpdGhDcmVkZW50aWFsczpULHRyYW5zZmVyQ2FjaGU6Zn0pfX12YXIgTzQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5TZW50PTBdPSJTZW50IixjW2MuVXBsb2FkUHJvZ3Jl'@;
put 'c3M9MV09IlVwbG9hZFByb2dyZXNzIixjW2MuUmVzcG9uc2VIZWFkZXI9Ml09IlJlc3BvbnNlSGVhZGVyIixjW2MuRG93bmxvYWRQcm9ncmVzcz0zXT0iRG93bmxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlPTRdPSJSZXNwb25zZSIsY1tjLlVzZXI9NV09IlVzZXIiLGN9KE80fHx7fSk7Y2xh'@;
put 'c3MgUEZ7Y29uc3RydWN0b3IobCxhPUp5Lk9rLGQ9Ik9LIil7dGhpcy5oZWFkZXJzPWwuaGVhZGVyc3x8bmV3IFpkLHRoaXMuc3RhdHVzPXZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOmEsdGhpcy5zdGF0dXNUZXh0PWwuc3RhdHVzVGV4dHx8ZCx0aGlzLnVybD1sLnVybHx8bnVsbCx0aGlz'@;
put 'Lm9rPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMH19Y2xhc3MgTmsgZXh0ZW5kcyBQRntjb25zdHJ1Y3RvcihsPXt9KXtzdXBlcihsKSx0aGlzLnR5cGU9TzQuUmVzcG9uc2VIZWFkZXJ9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBOayh7aGVhZGVyczpsLmhlYWRlcnN8fHRoaXMu'@;
put 'aGVhZGVycyxzdGF0dXM6dm9pZCAwIT09bC5zdGF0dXM/bC5zdGF0dXM6dGhpcy5zdGF0dXMsc3RhdHVzVGV4dDpsLnN0YXR1c1RleHR8fHRoaXMuc3RhdHVzVGV4dCx1cmw6bC51cmx8fHRoaXMudXJsfHx2b2lkIDB9KX19Y2xhc3MgRzUgZXh0ZW5kcyBQRntjb25zdHJ1Y3RvcihsPXt9KXtz'@;
put 'dXBlcihsKSx0aGlzLnR5cGU9TzQuUmVzcG9uc2UsdGhpcy5ib2R5PXZvaWQgMCE9PWwuYm9keT9sLmJvZHk6bnVsbH1jbG9uZShsPXt9KXtyZXR1cm4gbmV3IEc1KHtib2R5OnZvaWQgMCE9PWwuYm9keT9sLmJvZHk6dGhpcy5ib2R5LGhlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMs'@;
put 'c3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIG83IGV4dGVuZHMgUEZ7Y29uc3RydWN0b3IobCl7c3VwZXIobCwwLCJV'@;
put 'bmtub3duIEVycm9yIiksdGhpcy5uYW1lPSJIdHRwRXJyb3JSZXNwb25zZSIsdGhpcy5vaz0hMSx0aGlzLm1lc3NhZ2U9dGhpcy5zdGF0dXM+PTIwMCYmdGhpcy5zdGF0dXM8MzAwP2BIdHRwIGZhaWx1cmUgZHVyaW5nIHBhcnNpbmcgZm9yICR7bC51cmx8fCIodW5rbm93biB1cmwpIn1gOmBI'@;
put 'dHRwIGZhaWx1cmUgcmVzcG9uc2UgZm9yICR7bC51cmx8fCIodW5rbm93biB1cmwpIn06ICR7bC5zdGF0dXN9ICR7bC5zdGF0dXNUZXh0fWAsdGhpcy5lcnJvcj1sLmVycm9yfHxudWxsfX12YXIgSnk9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Db250aW51ZT0xMDBdPSJDb250aW51ZSIsY1tj'@;
put 'LlN3aXRjaGluZ1Byb3RvY29scz0xMDFdPSJTd2l0Y2hpbmdQcm90b2NvbHMiLGNbYy5Qcm9jZXNzaW5nPTEwMl09IlByb2Nlc3NpbmciLGNbYy5FYXJseUhpbnRzPTEwM109IkVhcmx5SGludHMiLGNbYy5Paz0yMDBdPSJPayIsY1tjLkNyZWF0ZWQ9MjAxXT0iQ3JlYXRlZCIsY1tjLkFjY2Vw'@;
put 'dGVkPTIwMl09IkFjY2VwdGVkIixjW2MuTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uPTIwM109Ik5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiIsY1tjLk5vQ29udGVudD0yMDRdPSJOb0NvbnRlbnQiLGNbYy5SZXNldENvbnRlbnQ9MjA1XT0iUmVzZXRDb250ZW50IixjW2MuUGFydGlh'@;
put 'bENvbnRlbnQ9MjA2XT0iUGFydGlhbENvbnRlbnQiLGNbYy5NdWx0aVN0YXR1cz0yMDddPSJNdWx0aVN0YXR1cyIsY1tjLkFscmVhZHlSZXBvcnRlZD0yMDhdPSJBbHJlYWR5UmVwb3J0ZWQiLGNbYy5JbVVzZWQ9MjI2XT0iSW1Vc2VkIixjW2MuTXVsdGlwbGVDaG9pY2VzPTMwMF09Ik11bHRp'@;
put 'cGxlQ2hvaWNlcyIsY1tjLk1vdmVkUGVybWFuZW50bHk9MzAxXT0iTW92ZWRQZXJtYW5lbnRseSIsY1tjLkZvdW5kPTMwMl09IkZvdW5kIixjW2MuU2VlT3RoZXI9MzAzXT0iU2VlT3RoZXIiLGNbYy5Ob3RNb2RpZmllZD0zMDRdPSJOb3RNb2RpZmllZCIsY1tjLlVzZVByb3h5PTMwNV09IlVz'@;
put 'ZVByb3h5IixjW2MuVW51c2VkPTMwNl09IlVudXNlZCIsY1tjLlRlbXBvcmFyeVJlZGlyZWN0PTMwN109IlRlbXBvcmFyeVJlZGlyZWN0IixjW2MuUGVybWFuZW50UmVkaXJlY3Q9MzA4XT0iUGVybWFuZW50UmVkaXJlY3QiLGNbYy5CYWRSZXF1ZXN0PTQwMF09IkJhZFJlcXVlc3QiLGNbYy5V'@;
put 'bmF1dGhvcml6ZWQ9NDAxXT0iVW5hdXRob3JpemVkIixjW2MuUGF5bWVudFJlcXVpcmVkPTQwMl09IlBheW1lbnRSZXF1aXJlZCIsY1tjLkZvcmJpZGRlbj00MDNdPSJGb3JiaWRkZW4iLGNbYy5Ob3RGb3VuZD00MDRdPSJOb3RGb3VuZCIsY1tjLk1ldGhvZE5vdEFsbG93ZWQ9NDA1XT0iTWV0'@;
put 'aG9kTm90QWxsb3dlZCIsY1tjLk5vdEFjY2VwdGFibGU9NDA2XT0iTm90QWNjZXB0YWJsZSIsY1tjLlByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZD00MDddPSJQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQiLGNbYy5SZXF1ZXN0VGltZW91dD00MDhdPSJSZXF1ZXN0VGltZW91dCIsY1tj'@;
put 'LkNvbmZsaWN0PTQwOV09IkNvbmZsaWN0IixjW2MuR29uZT00MTBdPSJHb25lIixjW2MuTGVuZ3RoUmVxdWlyZWQ9NDExXT0iTGVuZ3RoUmVxdWlyZWQiLGNbYy5QcmVjb25kaXRpb25GYWlsZWQ9NDEyXT0iUHJlY29uZGl0aW9uRmFpbGVkIixjW2MuUGF5bG9hZFRvb0xhcmdlPTQxM109IlBh'@;
put 'eWxvYWRUb29MYXJnZSIsY1tjLlVyaVRvb0xvbmc9NDE0XT0iVXJpVG9vTG9uZyIsY1tjLlVuc3VwcG9ydGVkTWVkaWFUeXBlPTQxNV09IlVuc3VwcG9ydGVkTWVkaWFUeXBlIixjW2MuUmFuZ2VOb3RTYXRpc2ZpYWJsZT00MTZdPSJSYW5nZU5vdFNhdGlzZmlhYmxlIixjW2MuRXhwZWN0YXRp'@;
put 'b25GYWlsZWQ9NDE3XT0iRXhwZWN0YXRpb25GYWlsZWQiLGNbYy5JbUFUZWFwb3Q9NDE4XT0iSW1BVGVhcG90IixjW2MuTWlzZGlyZWN0ZWRSZXF1ZXN0PTQyMV09Ik1pc2RpcmVjdGVkUmVxdWVzdCIsY1tjLlVucHJvY2Vzc2FibGVFbnRpdHk9NDIyXT0iVW5wcm9jZXNzYWJsZUVudGl0eSIs'@;
put 'Y1tjLkxvY2tlZD00MjNdPSJMb2NrZWQiLGNbYy5GYWlsZWREZXBlbmRlbmN5PTQyNF09IkZhaWxlZERlcGVuZGVuY3kiLGNbYy5Ub29FYXJseT00MjVdPSJUb29FYXJseSIsY1tjLlVwZ3JhZGVSZXF1aXJlZD00MjZdPSJVcGdyYWRlUmVxdWlyZWQiLGNbYy5QcmVjb25kaXRpb25SZXF1aXJl'@;
put 'ZD00MjhdPSJQcmVjb25kaXRpb25SZXF1aXJlZCIsY1tjLlRvb01hbnlSZXF1ZXN0cz00MjldPSJUb29NYW55UmVxdWVzdHMiLGNbYy5SZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U9NDMxXT0iUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlIixjW2MuVW5hdmFpbGFibGVGb3JMZWdhbFJl'@;
put 'YXNvbnM9NDUxXT0iVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMiLGNbYy5JbnRlcm5hbFNlcnZlckVycm9yPTUwMF09IkludGVybmFsU2VydmVyRXJyb3IiLGNbYy5Ob3RJbXBsZW1lbnRlZD01MDFdPSJOb3RJbXBsZW1lbnRlZCIsY1tjLkJhZEdhdGV3YXk9NTAyXT0iQmFkR2F0ZXdheSIs'@;
put 'Y1tjLlNlcnZpY2VVbmF2YWlsYWJsZT01MDNdPSJTZXJ2aWNlVW5hdmFpbGFibGUiLGNbYy5HYXRld2F5VGltZW91dD01MDRdPSJHYXRld2F5VGltZW91dCIsY1tjLkh0dHBWZXJzaW9uTm90U3VwcG9ydGVkPTUwNV09Ikh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIixjW2MuVmFyaWFudEFsc29O'@;
put 'ZWdvdGlhdGVzPTUwNl09IlZhcmlhbnRBbHNvTmVnb3RpYXRlcyIsY1tjLkluc3VmZmljaWVudFN0b3JhZ2U9NTA3XT0iSW5zdWZmaWNpZW50U3RvcmFnZSIsY1tjLkxvb3BEZXRlY3RlZD01MDhdPSJMb29wRGV0ZWN0ZWQiLGNbYy5Ob3RFeHRlbmRlZD01MTBdPSJOb3RFeHRlbmRlZCIsY1tj'@;
put 'Lk5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkPTUxMV09Ik5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkIixjfShKeXx8e30pO2Z1bmN0aW9uIEZGKGMsbCl7cmV0dXJue2JvZHk6bCxoZWFkZXJzOmMuaGVhZGVycyxjb250ZXh0OmMuY29udGV4dCxvYnNlcnZlOmMub2JzZXJ2ZSxw'@;
put 'YXJhbXM6Yy5wYXJhbXMscmVwb3J0UHJvZ3Jlc3M6Yy5yZXBvcnRQcm9ncmVzcyxyZXNwb25zZVR5cGU6Yy5yZXNwb25zZVR5cGUsd2l0aENyZWRlbnRpYWxzOmMud2l0aENyZWRlbnRpYWxzLHRyYW5zZmVyQ2FjaGU6Yy50cmFuc2ZlckNhY2hlfX1sZXQgSEY9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhKXt0aGlzLmhhbmRsZXI9YX1yZXF1ZXN0KGEsZCxoPXt9KXtsZXQgZjtpZihhIGluc3RhbmNlb2YgWHkpZj1hO2Vsc2V7bGV0IFkscmU7WT1oLmhlYWRlcnMgaW5zdGFuY2VvZiBaZD9oLmhlYWRlcnM6bmV3IFpkKGguaGVhZGVycyksaC5wYXJhbXMmJihyZT1oLnBhcmFtcyBp'@;
put 'bnN0YW5jZW9mIFI0P2gucGFyYW1zOm5ldyBSNCh7ZnJvbU9iamVjdDpoLnBhcmFtc30pKSxmPW5ldyBYeShhLGQsdm9pZCAwIT09aC5ib2R5P2guYm9keTpudWxsLHtoZWFkZXJzOlksY29udGV4dDpoLmNvbnRleHQscGFyYW1zOnJlLHJlcG9ydFByb2dyZXNzOmgucmVwb3J0UHJvZ3Jlc3Ms'@;
put 'cmVzcG9uc2VUeXBlOmgucmVzcG9uc2VUeXBlfHwianNvbiIsd2l0aENyZWRlbnRpYWxzOmgud2l0aENyZWRlbnRpYWxzLHRyYW5zZmVyQ2FjaGU6aC50cmFuc2ZlckNhY2hlfSl9Y29uc3Qgdj1ObyhmKS5waXBlKFU4KFk9PnRoaXMuaGFuZGxlci5oYW5kbGUoWSkpKTtpZihhIGluc3RhbmNl'@;
put 'b2YgWHl8fCJldmVudHMiPT09aC5vYnNlcnZlKXJldHVybiB2O2NvbnN0IFQ9di5waXBlKEhhKFk9PlkgaW5zdGFuY2VvZiBHNSkpO3N3aXRjaChoLm9ic2VydmV8fCJib2R5Iil7Y2FzZSJib2R5Ijpzd2l0Y2goZi5yZXNwb25zZVR5cGUpe2Nhc2UiYXJyYXlidWZmZXIiOnJldHVybiBULnBp'@;
put 'cGUoeXIoWT0+e2lmKG51bGwhPT1ZLmJvZHkmJiEoWS5ib2R5IGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGFuIEFycmF5QnVmZmVyLiIpO3JldHVybiBZLmJvZHl9KSk7Y2FzZSJibG9iIjpyZXR1cm4gVC5waXBlKHlyKFk9PntpZihu'@;
put 'dWxsIT09WS5ib2R5JiYhKFkuYm9keSBpbnN0YW5jZW9mIEJsb2IpKXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgQmxvYi4iKTtyZXR1cm4gWS5ib2R5fSkpO2Nhc2UidGV4dCI6cmV0dXJuIFQucGlwZSh5cihZPT57aWYobnVsbCE9PVkuYm9keSYmInN0cmluZyIhPXR5cGVv'@;
put 'ZiBZLmJvZHkpdGhyb3cgbmV3IEVycm9yKCJSZXNwb25zZSBpcyBub3QgYSBzdHJpbmcuIik7cmV0dXJuIFkuYm9keX0pKTtkZWZhdWx0OnJldHVybiBULnBpcGUoeXIoWT0+WS5ib2R5KSl9Y2FzZSJyZXNwb25zZSI6cmV0dXJuIFQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVucmVhY2hh'@;
put 'YmxlOiB1bmhhbmRsZWQgb2JzZXJ2ZSB0eXBlICR7aC5vYnNlcnZlfX1gKX19ZGVsZXRlKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiREVMRVRFIixhLGQpfWdldChhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkdFVCIsYSxkKX1oZWFkKGEsZD17fSl7cmV0dXJuIHRoaXMucmVx'@;
put 'dWVzdCgiSEVBRCIsYSxkKX1qc29ucChhLGQpe3JldHVybiB0aGlzLnJlcXVlc3QoIkpTT05QIixhLHtwYXJhbXM6KG5ldyBSNCkuYXBwZW5kKGQsIkpTT05QX0NBTExCQUNLIiksb2JzZXJ2ZToiYm9keSIscmVzcG9uc2VUeXBlOiJqc29uIn0pfW9wdGlvbnMoYSxkPXt9KXtyZXR1cm4gdGhp'@;
put 'cy5yZXF1ZXN0KCJPUFRJT05TIixhLGQpfXBhdGNoKGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQQVRDSCIsYSxGRihoLGQpKX1wb3N0KGEsZCxoPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJQT1NUIixhLEZGKGgsZCkpfXB1dChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVz'@;
put 'dCgiUFVUIixhLEZGKGgsZCkpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoUGspKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gQlgo'@;
put 'YyxsKXtyZXR1cm4gbChjKX1mdW5jdGlvbiBVNWUoYyxsKXtyZXR1cm4oYSxkKT0+bC5pbnRlcmNlcHQoYSx7aGFuZGxlOmg9PmMoaCxkKX0pfWNvbnN0IFc1ZT1uZXcgWXIoIiIpLFF5PW5ldyBZcigiIiksWVg9bmV3IFlyKCIiKSx6WD1uZXcgWXIoIiIpO2Z1bmN0aW9uIEc1ZSgpe2xldCBj'@;
put 'PW51bGw7cmV0dXJuKGwsYSk9PntudWxsPT09YyYmKGM9KFZyKFc1ZSx7b3B0aW9uYWw6ITB9KT8/W10pLnJlZHVjZVJpZ2h0KFU1ZSxCWCkpO2NvbnN0IGQ9VnIobWEpLGg9ZC5hZGQoKTtyZXR1cm4gYyhsLGEpLnBpcGUoRnkoKCk9PmQucmVtb3ZlKGgpKSl9fWxldCBVWD0oKCk9PntjbGFz'@;
put 'cyBjIGV4dGVuZHMgUGt7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuYmFja2VuZD1hLHRoaXMuaW5qZWN0b3I9ZCx0aGlzLmNoYWluPW51bGwsdGhpcy5wZW5kaW5nVGFza3M9VnIobWEpO2NvbnN0IGg9VnIoelgse29wdGlvbmFsOiEwfSk7dGhpcy5iYWNrZW5kPWg/P2F9aGFuZGxl'@;
put 'KGEpe2lmKG51bGw9PT10aGlzLmNoYWluKXtjb25zdCBoPUFycmF5LmZyb20obmV3IFNldChbLi4udGhpcy5pbmplY3Rvci5nZXQoUXkpLC4uLnRoaXMuaW5qZWN0b3IuZ2V0KFlYLFtdKV0pKTt0aGlzLmNoYWluPWgucmVkdWNlUmlnaHQoKGYsdik9PmZ1bmN0aW9uIFo1ZShjLGwsYSl7cmV0'@;
put 'dXJuKGQsaCk9PmV1KGEsKCk9PmwoZCxmPT5jKGYsaCkpKX0oZix2LHRoaXMuaW5qZWN0b3IpLEJYKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZShoKSkucGlwZShGeSgoKT0+dGhpcy5wZW5kaW5nVGFz'@;
put 'a3MucmVtb3ZlKGQpKSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihGayksZnIoZGwpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgSjVl'@;
put 'PS9eXClcXVx9Jyw/XG4vO2xldCBXWD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMueGhyRmFjdG9yeT1hfWhhbmRsZShhKXtpZigiSlNPTlAiPT09YS5tZXRob2QpdGhyb3cgbmV3IHpuKC0yODAwLCExKTtjb25zdCBkPXRoaXMueGhyRmFjdG9yeTtyZXR1cm4oZC5cdTAyNzVs'@;
put 'b2FkSW1wbD9aYyhkLlx1MDI3NWxvYWRJbXBsKCkpOk5vKG51bGwpKS5waXBlKHUxKCgpPT5uZXcgd24oZj0+e2NvbnN0IHY9ZC5idWlsZCgpO2lmKHYub3BlbihhLm1ldGhvZCxhLnVybFdpdGhQYXJhbXMpLGEud2l0aENyZWRlbnRpYWxzJiYodi53aXRoQ3JlZGVudGlhbHM9ITApLGEuaGVh'@;
put 'ZGVycy5mb3JFYWNoKCh0dCx5dCk9PnYuc2V0UmVxdWVzdEhlYWRlcih0dCx5dC5qb2luKCIsIikpKSxhLmhlYWRlcnMuaGFzKCJBY2NlcHQiKXx8di5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiKSwhYS5oZWFkZXJzLmhhcygi'@;
put 'Q29udGVudC1UeXBlIikpe2NvbnN0IHR0PWEuZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKTtudWxsIT09dHQmJnYuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIix0dCl9aWYoYS5yZXNwb25zZVR5cGUpe2NvbnN0IHR0PWEucmVzcG9uc2VUeXBlLnRvTG93ZXJDYXNlKCk7di5yZXNw'@;
put 'b25zZVR5cGU9Impzb24iIT09dHQ/dHQ6InRleHQifWNvbnN0IFQ9YS5zZXJpYWxpemVCb2R5KCk7bGV0IFk9bnVsbDtjb25zdCByZT0oKT0+e2lmKG51bGwhPT1ZKXJldHVybiBZO2NvbnN0IHR0PXYuc3RhdHVzVGV4dHx8Ik9LIix5dD1uZXcgWmQodi5nZXRBbGxSZXNwb25zZUhlYWRlcnMo'@;
put 'KSksd3Q9ZnVuY3Rpb24gUTVlKGMpe3JldHVybiJyZXNwb25zZVVSTCJpbiBjJiZjLnJlc3BvbnNlVVJMP2MucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/Yy5nZXRSZXNwb25zZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51'@;
put 'bGx9KHYpfHxhLnVybDtyZXR1cm4gWT1uZXcgTmsoe2hlYWRlcnM6eXQsc3RhdHVzOnYuc3RhdHVzLHN0YXR1c1RleHQ6dHQsdXJsOnd0fSksWX0sZmU9KCk9PntsZXR7aGVhZGVyczp0dCxzdGF0dXM6eXQsc3RhdHVzVGV4dDp3dCx1cmw6THR9PXJlKCksb249bnVsbDt5dCE9PUp5Lk5vQ29u'@;
put 'dGVudCYmKG9uPXR5cGVvZiB2LnJlc3BvbnNlPiJ1Ij92LnJlc3BvbnNlVGV4dDp2LnJlc3BvbnNlKSwwPT09eXQmJih5dD1vbj9KeS5PazowKTtsZXQgc249eXQ+PTIwMCYmeXQ8MzAwO2lmKCJqc29uIj09PWEucmVzcG9uc2VUeXBlJiYic3RyaW5nIj09dHlwZW9mIG9uKXtjb25zdCBNbj1v'@;
put 'bjtvbj1vbi5yZXBsYWNlKEo1ZSwiIik7dHJ5e29uPSIiIT09b24/SlNPTi5wYXJzZShvbik6bnVsbH1jYXRjaChWbil7b249TW4sc24mJihzbj0hMSxvbj17ZXJyb3I6Vm4sdGV4dDpvbn0pfX1zbj8oZi5uZXh0KG5ldyBHNSh7Ym9keTpvbixoZWFkZXJzOnR0LHN0YXR1czp5dCxzdGF0dXNU'@;
put 'ZXh0Ond0LHVybDpMdHx8dm9pZCAwfSkpLGYuY29tcGxldGUoKSk6Zi5lcnJvcihuZXcgbzcoe2Vycm9yOm9uLGhlYWRlcnM6dHQsc3RhdHVzOnl0LHN0YXR1c1RleHQ6d3QsdXJsOkx0fHx2b2lkIDB9KSl9LF9lPXR0PT57Y29uc3R7dXJsOnl0fT1yZSgpLHd0PW5ldyBvNyh7ZXJyb3I6dHQs'@;
put 'c3RhdHVzOnYuc3RhdHVzfHwwLHN0YXR1c1RleHQ6di5zdGF0dXNUZXh0fHwiVW5rbm93biBFcnJvciIsdXJsOnl0fHx2b2lkIDB9KTtmLmVycm9yKHd0KX07bGV0IGtlPSExO2NvbnN0IFdlPXR0PT57a2V8fChmLm5leHQocmUoKSksa2U9ITApO2xldCB5dD17dHlwZTpPNC5Eb3dubG9hZFBy'@;
put 'b2dyZXNzLGxvYWRlZDp0dC5sb2FkZWR9O3R0Lmxlbmd0aENvbXB1dGFibGUmJih5dC50b3RhbD10dC50b3RhbCksInRleHQiPT09YS5yZXNwb25zZVR5cGUmJnYucmVzcG9uc2VUZXh0JiYoeXQucGFydGlhbFRleHQ9di5yZXNwb25zZVRleHQpLGYubmV4dCh5dCl9LEplPXR0PT57bGV0IHl0'@;
put 'PXt0eXBlOk80LlVwbG9hZFByb2dyZXNzLGxvYWRlZDp0dC5sb2FkZWR9O3R0Lmxlbmd0aENvbXB1dGFibGUmJih5dC50b3RhbD10dC50b3RhbCksZi5uZXh0KHl0KX07cmV0dXJuIHYuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZmUpLHYuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLF9lKSx2'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLF9lKSx2LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixfZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFdlKSxudWxsIT09VCYmdi51cGxvYWQmJnYudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInBy'@;
put 'b2dyZXNzIixKZSkpLHYuc2VuZChUKSxmLm5leHQoe3R5cGU6TzQuU2VudH0pLCgpPT57di5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsX2UpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLF9lKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoImxvYWQiLGZlKSx2LnJlbW92ZUV2ZW50'@;
put 'TGlzdGVuZXIoInRpbWVvdXQiLF9lKSxhLnJlcG9ydFByb2dyZXNzJiYodi5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsV2UpLG51bGwhPT1UJiZ2LnVwbG9hZCYmdi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEplKSksdi5yZWFkeVN0YXRlIT09di5ET05F'@;
put 'JiZ2LmFib3J0KCl9fSkpKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKFZxKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGpGPW5ldyBZ'@;
put 'cigiIiksR1g9bmV3IFlyKCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT4iWFNSRi1UT0tFTiJ9KSwkWD1uZXcgWXIoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYLVhTUkYtVE9LRU4ifSk7Y2xhc3MgcVh7fWxldCBuZ2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1'@;
put 'Y3RvcihhLGQsaCl7dGhpcy5kb2M9YSx0aGlzLnBsYXRmb3JtPWQsdGhpcy5jb29raWVOYW1lPWgsdGhpcy5sYXN0Q29va2llU3RyaW5nPSIiLHRoaXMubGFzdFRva2VuPW51bGwsdGhpcy5wYXJzZUNvdW50PTB9Z2V0VG9rZW4oKXtpZigic2VydmVyIj09PXRoaXMucGxhdGZvcm0pcmV0dXJu'@;
put 'IG51bGw7Y29uc3QgYT10aGlzLmRvYy5jb29raWV8fCIiO3JldHVybiBhIT09dGhpcy5sYXN0Q29va2llU3RyaW5nJiYodGhpcy5wYXJzZUNvdW50KyssdGhpcy5sYXN0VG9rZW49VHEoYSx0aGlzLmNvb2tpZU5hbWUpLHRoaXMubGFzdENvb2tpZVN0cmluZz1hKSx0aGlzLmxhc3RUb2tlbn1z'@;
put 'dGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKCRzKSxmcihBbyksZnIoR1gpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gcmdlKGMsbCl7'@;
put 'Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFWcihqRil8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2NvbnN0IGQ9VnIocVgpLmdldFRva2VuKCks'@;
put 'aD1WcigkWCk7cmV0dXJuIG51bGwhPWQmJiFjLmhlYWRlcnMuaGFzKGgpJiYoYz1jLmNsb25lKHtoZWFkZXJzOmMuaGVhZGVycy5zZXQoaCxkKX0pKSxsKGMpfXZhciBQND1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkludGVyY2VwdG9ycz0wXT0iSW50ZXJjZXB0b3JzIixjW2MuTGVnYWN5SW50'@;
put 'ZXJjZXB0b3JzPTFdPSJMZWdhY3lJbnRlcmNlcHRvcnMiLGNbYy5DdXN0b21Yc3JmQ29uZmlndXJhdGlvbj0yXT0iQ3VzdG9tWHNyZkNvbmZpZ3VyYXRpb24iLGNbYy5Ob1hzcmZQcm90ZWN0aW9uPTNdPSJOb1hzcmZQcm90ZWN0aW9uIixjW2MuSnNvbnBTdXBwb3J0PTRdPSJKc29ucFN1cHBv'@;
put 'cnQiLGNbYy5SZXF1ZXN0c01hZGVWaWFQYXJlbnQ9NV09IlJlcXVlc3RzTWFkZVZpYVBhcmVudCIsY1tjLkZldGNoPTZdPSJGZXRjaCIsY30oUDR8fHt9KTtmdW5jdGlvbiBpZ2UoLi4uYyl7Y29uc3QgbD1bSEYsV1gsVVgse3Byb3ZpZGU6UGssdXNlRXhpc3Rpbmc6VVh9LHtwcm92aWRlOkZr'@;
put 'LHVzZUV4aXN0aW5nOldYfSx7cHJvdmlkZTpReSx1c2VWYWx1ZTpyZ2UsbXVsdGk6ITB9LHtwcm92aWRlOmpGLHVzZVZhbHVlOiEwfSx7cHJvdmlkZTpxWCx1c2VDbGFzczpuZ2V9XTtmb3IoY29uc3QgYSBvZiBjKWwucHVzaCguLi5hLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9u'@;
put 'IEYxKGMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6Y319KGwpfWNvbnN0IEtYPW5ldyBZcigiIik7ZnVuY3Rpb24gb2dlKCl7cmV0dXJuIGZ1bmN0aW9uICQ1KGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRlcnM6bH19KFA0LkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3Zp'@;
put 'ZGU6S1gsdXNlRmFjdG9yeTpHNWV9LHtwcm92aWRlOlF5LHVzZUV4aXN0aW5nOktYLG11bHRpOiEwfV0pfWxldCBzZ2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7'@;
put 'dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe3Byb3ZpZGVyczpbaWdlKG9nZSgpKV19KX1yZXR1cm4gY30pKCksaUo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaHR0cD1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy51cmw9IiIsdGhpcy5kcml2'@;
put 'ZVVybD0iIix0aGlzLmh0dHBPcHRpb25zPXt3aXRoQ3JlZGVudGlhbHM6ITB9fXNldHVwKCl7Y29uc3QgYT10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMudXJsPWAke2E/LnNlcnZlclVybHx8IiJ9L1NBU2pzQXBpYCx0aGlzLmRyaXZlVXJsPWAke3Ro'@;
put 'aXMudXJsfS9kcml2ZWB9Z2V0U2VydmVySW5mbygpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMudXJsfS9pbmZvYCl9Z2V0RmlsZUZyb21Ecml2ZShhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmRyaXZlVXJsfS9maWxlLz9fZmlsZVBhdGg9JHthfWAsdGhpcy5odHRwT3B0'@;
put 'aW9ucyl9Z2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZm9sZGVyP19mb2xkZXJQYXRoPSR7YX1gLHRoaXMuaHR0cE9wdGlvbnMpfWdldEZpbGVUcmVlRnJvbURyaXZlKCl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7'@;
put 'dGhpcy5kcml2ZVVybH0vZmlsZXRyZWVgLHRoaXMuaHR0cE9wdGlvbnMpfWdldEZpbGVGcm9tRmlsZVRyZWUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57dGhpcy5nZXRGaWxlVHJlZUZyb21Ecml2ZSgpLnN1YnNjcmliZShmPT57Y29uc3QgVD10aGlzLmZpbmRJblRyZWUoZi50cmVl'@;
put 'LGEpO2QoVCl9KX0pfWZpbmRJblRyZWUoYSxkKXtpZihhLnJlbGF0aXZlUGF0aD09PWQpcmV0dXJuIGE7Zm9yKGxldCBoIG9mIGEuY2hpbGRyZW4pe2NvbnN0IGY9dGhpcy5maW5kSW5UcmVlKGgsZCk7aWYoZilyZXR1cm4gZn19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIG5ldyhkfHxjKShmcihIRiksZnIoaTcpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCkseWE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCl7'@;
put 'dGhpcy5hcHBTdG9yZVNlcnZpY2U9YSx0aGlzLnVzZXJTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc2pzU2VydmljZT1mLHRoaXMubG9nZ2VyU2VydmljZT12LHRoaXMucm91dGVyPVQsdGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyPW5ldyBJcix0aGlzLmluY29y'@;
put 'cmVjdFNpdGVJZEVtaXR0ZXI9bmV3IElyLHRoaXMucmVxdWVzdFNpdGVJZEVtaXR0ZXI9bmV3IElyLHRoaXMuc2FzanNBZGFwdGVyPW5ldyhQWCgpKSx0aGlzLmFwcExvY0NoZWNrUGVuZGluZz0hMSx0aGlzLnNob3VsZExvZ2luPW5ldyBBcighMSksdGhpcy5saWNlbnNlX3NpdGVfaWQ9bmV3'@;
put 'IEFyKG51bGwpfXNhc1NlcnZpY2VJbml0KCl7aWYodGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz10aGlzLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpLHRoaXMuc2FzanNTZXJ2aWNlLnNldHVwKCksdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncyl7c3dpdGNoKHRoaXMuc2FzanNB'@;
put 'ZGFwdGVyPW5ldyhQWCgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgQ3UuWS5TYXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBDdS5Z'@;
put 'LlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIEN1LlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1YnNj'@;
put 'cmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2VudC4i'@;
put 'KX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJvbWlzZSgodixUKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2luLm5l'@;
put 'eHQoITApfSkudGhlbihZPT57aWYoITE9PT1ZLmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxUKCExKSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmWS5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpZLk1GX0dFVFVTRVJ9KSxZLlNZU1NJVEUm'@;
put 'Jih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoWS5TWVNTSVRFKSx0aGlzLmdldExpY2Vuc2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKFkuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KFkuU1lTU0lU'@;
put 'RSkpKSw0MDQ9PT1ZLnN0YXR1cyYmVCh7TUVTU0FHRTpZLmJvZHl8fCJTQVMgUmVzcG9uZGVkIHdpdGggZXJyb3IifSksdHlwZW9mIFkuc2FzanNBYm9ydDwidSIpe2NvbnN0IHJlPVksZmU9cmUuc2FzanNBYm9ydFswXS5NU0csX2U9cmUuc2FzanNBYm9ydFswXS5NQUM7aWYoZmUuaW5jbHVk'@;
put 'ZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBUKHtlcnJvcjpmZX0pO2Y/LnN1cHBy'@;
put 'ZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiksZmUse1NZU1dBUk5JTkdURVhUOnJlLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpyZS5TWVNFUlJPUlRFWFQsTUFDOl9lfSksVCh7ZXJyb3I6'@;
put 'ZmV9KX12KFkpfSxZPT57aWYoY29uc29sZS5lcnJvcihZKSxZLmVycm9yKXtsZXQgZmUscmU9WS5lcnJvci5tZXNzYWdlO1kuZXJyb3IuZGV0YWlscyYmWS5lcnJvci5kZXRhaWxzLmxvZyYmKGZlPVkuZXJyb3IuZGV0YWlscy5sb2cpLCghcmV8fHJlLnRyaW0oKS5sZW5ndGg8MSkmJihyZT0i'@;
put 'U0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLHJlLHtMT0c6ZmV9LCJSZXF1ZXN0IGVycm9yIiksVCh7ZXJyb3I6cmV9KX1UKFkpfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1'@;
put 'cm4gdGhpcy5zYXNqc0FkYXB0ZXIudXBsb2FkRmlsZShhLGQsaCl9bG9naW4oYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1DdS5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4gaC5zYXNqc0FkYXB0ZXIubG9n'@;
put 'SW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2VyTmFtZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiKSxoLmFwcExvY0NoZWNrUGVu'@;
put 'ZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xlLmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxpZCBob3N0IiksITEpKX0pKCl9'@;
put 'Z2V0TGljZW5zZVNpdGVJZCgpe3JldHVybiB0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNpdGVJZChhKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgYT9hOlthXSl9Y2hlY2tTYXNqc0RlcGxveSgpe3ZhciBhPXRoaXM7cmV0dXJu'@;
put 'IFcoZnVuY3Rpb24qKCl7Y29uc3QgaD1gJHthLmdldFNhc2pzQ29uZmlnKCkuYXBwTG9jfS9zZXJ2aWNlcy9hZG1pbmA7YS5zYXNqc1NlcnZpY2UuZ2V0Rm9sZGVyQ29udGVudHNGcm9tRHJpdmUoaCkuc3Vic2NyaWJlKGY9PntmLmZpbGVzLmluY2x1ZGVzKCJtYWtlZGF0YS5zYXMiKT8oYS5l'@;
put 'dmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpOihhLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpLGEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKSl9'@;
put 'LGY9PntmLmVycm9yLmluY2x1ZGVzKCJVbmF1dGhvcml6ZWQiKT8oYS5zaG91bGRMb2dpbi5uZXh0KCEwKSxhLnNob3VsZExvZ2luLnN1YnNjcmliZSh2PT57ITE9PT12JiZsb2NhdGlvbi5yZWxvYWQoKX0pKTpmLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmKGNv'@;
put 'bnNvbGUud2FybigiU0FTanMgU0FTIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IikpfSl9KSgpfXNhc2pzTWFrZWRhdGFDaGVj'@;
put 'a2luZygpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9VyhmdW5jdGlvbiooaCxmKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoVyhmdW5jdGlvbiooKXthLnNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgp'@;
put 'LnRoZW4odj0+e3YmJihjbGVhckludGVydmFsKGEuY2hlY2tpbmdJbnRlcnZhbCksaCh2KSl9KS5jYXRjaCh2PT57Y2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGYodil9KX0pLDFlMyl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50'@;
put 'cyl9fSgpKX0pKCl9c2FzanNNYWtlZGF0YVN1Y2Nlc3NmdWxsKCl7dmFyIGE9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9Pntjb25zdCB2PWAke2EuZ2V0U2FzanNDb25maWcoKS5hcHBMb2N9L3NlcnZpY2VzL2FkbWluYDthLnNhc2pzU2Vydmlj'@;
put 'ZS5nZXRGb2xkZXJDb250ZW50c0Zyb21Ecml2ZSh2KS5zdWJzY3JpYmUoVD0+e1QuZmlsZXMuaW5jbHVkZXMoIm1ha2VkYXRhLnNhcyIpP2QoITEpOmQoITApfSxUPT57VC5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRvZXNuJ3QgZXhpc3QuIikmJmgoKX0pfSl9KSgpfWNoZWNrVml5YURlcGxv'@;
put 'eShhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBmPSExO2Y9dHlwZW9mIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcjwidSI/eWllbGQgZC5hcHBMb2NDaGVjayhhKTp5aWVsZCBkLmFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRlcihhKSxmJiZkLmxvYWRTdGFydHVwU2Vy'@;
put 'dmljZUVtaXR0ZXIuZW1pdCgpfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPVcoZnVuY3Rpb24qKGYsdil7bGV0IFksVD0hMTt0cnl7WT15aWVsZCBkLnNhc2pzQWRhcHRlci5nZXRGb2xkZXIoYSl9Y2F0Y2gocmUpeyJM'@;
put 'b2dpblJlcXVpcmVkRXJyb3IiPT09cmUubmFtZT8oZC5hcHBMb2NDaGVja1BlbmRpbmc9ITAsZC5zaG91bGRMb2dpbi5uZXh0KCEwKSxmKCExKSk6VD0hMH1pZihUKXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExv'@;
put 'Yy4iKSxkLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxmKCExKTtmKCEwKX0pO3JldHVybiBmdW5jdGlvbihmLHYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpfWFwcExvY0NoZWNrUHJlQXhpb3Nk'@;
put 'QWRhcHRlcihhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntsZXQgdj0hMTtyZXR1cm4gZmV0Y2goYC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2F9YCkudGhlbihUPT4oNDA0PT09VC5zdGF0dXMmJih2PSEwKSxULnRleHQoKSkpLnRoZW4oVD0+e2lmKHRoaXMuaXNMb2dpblJl'@;
put 'cXVpcmVkKFQpKXRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSEwLHRoaXMuc2hvdWxkTG9naW4ubmV4dCghMCk7ZWxzZXtpZih2KXJldHVybiBjb25zb2xlLndhcm4oIlZpeWEgc2VydmljZXMgYXJlIG5vdCBwcmVzZW50IG9uIHRoZSBjdXJyZW50IGFwcExvYy4iKSx0aGlzLmV2ZW50U2Vydmlj'@;
put 'ZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSxkKCExKTtsZXQgWT1udWxsO3RyeXtZPUpTT04ucGFyc2UoVCl9Y2F0Y2h7fWlmKFkmJlkuaHR0cFN0YXR1c0NvZGUmJjQwND09PVkuaHR0cFN0YXR1c0NvZGUpcmV0dXJuIGNvbnNvbGUu'@;
put 'd2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2QoITApfX0pLmNhdGNoKFQ9PntkKCEx'@;
put 'KX0pfSl9aXNMb2dpblJlcXVpcmVkKGEpe3JldHVybi88Zm9ybS4rYWN0aW9uPSIoLipMb2dvblteIl0qKS4qPi9nbS50ZXN0KGEpfWxvZ291dCgpe3RoaXMuc2FzanNBZGFwdGVyLmxvZ091dCgpLnRoZW4oKCk9Pntsb2NhdGlvbi5yZWxvYWQoKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJu'@;
put 'IHRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzUmVxdWVzdHMoKX1zZXREZWJ1Z1N0YXRlKGEpe3RoaXMuc2FzanNBZGFwdGVyLnNldERlYnVnU3RhdGUoYSl9Z2V0U2FzanNJbnN0YW5jZSgp'@;
put 'e3JldHVybiB0aGlzLnNhc2pzQWRhcHRlcn1nZXRTZXJ2ZXJUeXBlKCl7Y29uc3QgYT10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3JldHVybiBhLnNlcnZlclR5cGU/YS5zZXJ2ZXJUeXBlOiJTQVNWSVlBIn1nZXRFeGVjdXRpb25QYXRoKCl7Y29uc3QgYT10aGlzLnNhc2pz'@;
put 'QWRhcHRlci5nZXRTYXNqc0NvbmZpZygpO3N3aXRjaChhLnNlcnZlclR5cGUpe2Nhc2UgQ3UuWS5TYXNWaXlhOnJldHVybiBhLnBhdGhTQVNWaXlhO2Nhc2UgQ3UuWS5TYXM5OnJldHVybiBhLnBhdGhTQVM5O2Nhc2UgQ3UuWS5TYXNqczpyZXR1cm4gYS5wYXRoU0FTSlN9fXN0YXRpYyNlPXRo'@;
put 'aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoaTcpLGZyKFJGKSxmcihHbCksZnIoaUopLGZyKGQxKSxmcih6cykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJl'@;
put 'dHVybiBjfSkoKSxkMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5kZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xlLmxvZyhhKSl9ZXJyb3IoYSxkKXtj'@;
put 'b25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2YgT2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0aGlzLmxvZygiLS0tLS0tIil9ZWxz'@;
put 'ZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KHlhKTt0aGlzLnNhc2pzQ29uZmlnPWEuZ2V0U2FzanNDb25maWcoKX19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihwYSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBvSj1mdW5jdGlvbiBwZ2UoYyxsKXtyZXR1cm4gYz09PWx8fGMh'@;
put 'PWMmJmwhPWx9LGprPWZ1bmN0aW9uIG1nZShjLGwpe2Zvcih2YXIgYT1jLmxlbmd0aDthLS07KWlmKG9KKGNbYV1bMF0sbCkpcmV0dXJuIGE7cmV0dXJuLTF9O3ZhciBfZ2U9QXJyYXkucHJvdG90eXBlLnNwbGljZTtmdW5jdGlvbiBzNyhjKXt2YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0'@;
put 'aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1zNy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gaGdlKCl7dGhpcy5fX2RhdGFfXz1bXSx0aGlzLnNpemU9MH0sczcucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiB2Z2UoYyl7dmFyIGw9'@;
put 'dGhpcy5fX2RhdGFfXyxhPWprKGwsYyk7cmV0dXJuIShhPDB8fChhPT1sLmxlbmd0aC0xP2wucG9wKCk6X2dlLmNhbGwobCxhLDEpLC0tdGhpcy5zaXplLDApKX0sczcucHJvdG90eXBlLmdldD1mdW5jdGlvbiBiZ2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWprKGwsYyk7cmV0dXJuIGE8'@;
put 'MD92b2lkIDA6bFthXVsxXX0sczcucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBNZ2UoYyl7cmV0dXJuIGprKHRoaXMuX19kYXRhX18sYyk+LTF9LHM3LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gU2dlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXyxkPWprKGEsYyk7cmV0dXJuIGQ8MD8oKyt0aGlz'@;
put 'LnNpemUsYS5wdXNoKFtjLGxdKSk6YVtkXVsxXT1sLHRoaXN9O2NvbnN0IEJrPXM3LHNKPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2YXIgUGdlPSJvYmplY3QiPT10eXBlb2Ygc2VsZiYmc2VsZiYmc2VsZi5PYmplY3Q9'@;
put 'PT1PYmplY3QmJnNlbGY7Y29uc3QgZ2Y9c0p8fFBnZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxGND1nZi5TeW1ib2w7dmFyIGFKPU9iamVjdC5wcm90b3R5cGUsTmdlPWFKLmhhc093blByb3BlcnR5LFZnZT1hSi50b1N0cmluZyxlYj1GND9GNC50b1N0cmluZ1RhZzp2b2lkIDA7dmFy'@;
put 'IHpnZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3ZhciBsSj1GND9GNC50b1N0cmluZ1RhZzp2b2lkIDA7Y29uc3QgYTc9ZnVuY3Rpb24gJGdlKGMpe3JldHVybiBudWxsPT1jP3ZvaWQgMD09PWM/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOmxKJiZsSiBpbiBPYmpl'@;
put 'Y3QoYyk/ZnVuY3Rpb24gamdlKGMpe3ZhciBsPU5nZS5jYWxsKGMsZWIpLGE9Y1tlYl07dHJ5e2NbZWJdPXZvaWQgMDt2YXIgZD0hMH1jYXRjaHt9dmFyIGg9VmdlLmNhbGwoYyk7cmV0dXJuIGQmJihsP2NbZWJdPWE6ZGVsZXRlIGNbZWJdKSxofShjKTpmdW5jdGlvbiBVZ2UoYyl7cmV0dXJu'@;
put 'IHpnZS5jYWxsKGMpfShjKX0sdGI9ZnVuY3Rpb24gcWdlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiBudWxsIT1jJiYoIm9iamVjdCI9PWx8fCJmdW5jdGlvbiI9PWwpfSxjSj1mdW5jdGlvbiBlNmUoYyl7aWYoIXRiKGMpKXJldHVybiExO3ZhciBsPWE3KGMpO3JldHVybiJbb2JqZWN0IEZ1'@;
put 'bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PWx8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bHx8IltvYmplY3QgUHJveHldIj09bH07dmFyIGMsdDZlPWdmWyJfX2NvcmUtanNfc2hhcmVkX18iXSx1Sj0oYz0vW14uXSskLy5leGVjKHQ2ZSYmdDZlLmtleXMm'@;
put 'JnQ2ZS5rZXlzLklFX1BST1RPfHwiIikpPyJTeW1ib2woc3JjKV8xLiIrYzoiIjt2YXIgbzZlPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztjb25zdCBxNT1mdW5jdGlvbiBzNmUoYyl7aWYobnVsbCE9Yyl7dHJ5e3JldHVybiBvNmUuY2FsbChjKX1jYXRjaHt9dHJ5e3JldHVybiBjKyIi'@;
put 'fWNhdGNoe319cmV0dXJuIiJ9O3ZhciBsNmU9L15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC8sZjZlPVJlZ0V4cCgiXiIrRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSkucmVwbGFjZSgvW1xcXiQuKis/KClbXF17fXxd'@;
put 'L2csIlxcJCYiKS5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcKCl8IGZvciAuKz8oPz1cXFxdKS9nLCIkMS4qPyIpKyIkIik7Y29uc3QgbTZlPWZ1bmN0aW9uIHA2ZShjKXtyZXR1cm4hKCF0YihjKXx8ZnVuY3Rpb24gbjZlKGMpe3JldHVybiEhdUomJnVKIGlu'@;
put 'IGN9KGMpKSYmKGNKKGMpP2Y2ZTpsNmUpLnRlc3QocTUoYykpfSxLNT1mdW5jdGlvbiB2NmUoYyxsKXt2YXIgYT1mdW5jdGlvbiBnNmUoYyxsKXtyZXR1cm4gYz8uW2xdfShjLGwpO3JldHVybiBtNmUoYSk/YTp2b2lkIDB9LG5iPUs1KGdmLCJNYXAiKSxyYj1LNShPYmplY3QsImNyZWF0ZSIp'@;
put 'O3ZhciBFNmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTDZlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gbDcoYyl7dmFyIGw9LTEsYT1udWxsPT1jPzA6Yy5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK2w8YTspe3ZhciBkPWNbbF07dGhp'@;
put 'cy5zZXQoZFswXSxkWzFdKX19bDcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIHc2ZSgpe3RoaXMuX19kYXRhX189cmI/cmIobnVsbCk6e30sdGhpcy5zaXplPTB9LGw3LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gQzZlKGMpe3ZhciBsPXRoaXMuaGFzKGMpJiZkZWxldGUgdGhpcy5fX2Rh'@;
put 'dGFfX1tjXTtyZXR1cm4gdGhpcy5zaXplLT1sPzE6MCxsfSxsNy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIFQ2ZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO2lmKHJiKXt2YXIgYT1sW2NdO3JldHVybiJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIj09PWE/dm9pZCAwOmF9cmV0dXJuIEU2ZS5j'@;
put 'YWxsKGwsYyk/bFtjXTp2b2lkIDB9LGw3LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSTZlKGMpe3ZhciBsPXRoaXMuX19kYXRhX187cmV0dXJuIHJiP3ZvaWQgMCE9PWxbY106TDZlLmNhbGwobCxjKX0sbDcucHJvdG90eXBlLnNldD1mdW5jdGlvbiBQNmUoYyxsKXt2YXIgYT10aGlzLl9fZGF0'@;
put 'YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKGMpPzA6MSxhW2NdPXJiJiZ2b2lkIDA9PT1sPyJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjpsLHRoaXN9O2NvbnN0IGRKPWw3LFlrPWZ1bmN0aW9uIEI2ZShjLGwpe3ZhciBhPWMuX19kYXRhX187cmV0dXJuIGZ1bmN0aW9uIFY2ZShj'@;
put 'KXt2YXIgbD10eXBlb2YgYztyZXR1cm4ic3RyaW5nIj09bHx8Im51bWJlciI9PWx8fCJzeW1ib2wiPT1sfHwiYm9vbGVhbiI9PWw/Il9fcHJvdG9fXyIhPT1jOm51bGw9PT1jfShsKT9hWyJzdHJpbmciPT10eXBlb2YgbD8ic3RyaW5nIjoiaGFzaCJdOmEubWFwfTtmdW5jdGlvbiBjNyhjKXt2'@;
put 'YXIgbD0tMSxhPW51bGw9PWM/MDpjLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrbDxhOyl7dmFyIGQ9Y1tsXTt0aGlzLnNldChkWzBdLGRbMV0pfX1jNy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gSDZlKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgZEosbWFwOm5l'@;
put 'dyhuYnx8QmspLHN0cmluZzpuZXcgZEp9fSxjNy5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uIFk2ZShjKXt2YXIgbD1Zayh0aGlzLGMpLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplLT1sPzE6MCxsfSxjNy5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIFU2ZShjKXtyZXR1cm4gWWsodGhpcyxj'@;
put 'KS5nZXQoYyl9LGM3LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gVzZlKGMpe3JldHVybiBZayh0aGlzLGMpLmhhcyhjKX0sYzcucHJvdG90eXBlLnNldD1mdW5jdGlvbiAkNmUoYyxsKXt2YXIgYT1Zayh0aGlzLGMpLGQ9YS5zaXplO3JldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZSs9YS5zaXpl'@;
put 'PT1kPzA6MSx0aGlzfTtjb25zdCBZRj1jNztmdW5jdGlvbiB1NyhjKXt2YXIgbD10aGlzLl9fZGF0YV9fPW5ldyBCayhjKTt0aGlzLnNpemU9bC5zaXplfXU3LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBrZ2UoKXt0aGlzLl9fZGF0YV9fPW5ldyBCayx0aGlzLnNpemU9MH0sdTcucHJvdG90'@;
put 'eXBlLmRlbGV0ZT1mdW5jdGlvbiBUZ2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXyxhPWwuZGVsZXRlKGMpO3JldHVybiB0aGlzLnNpemU9bC5zaXplLGF9LHU3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gQWdlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChjKX0sdTcucHJvdG90eXBlLmhh'@;
put 'cz1mdW5jdGlvbiBJZ2UoYyl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKGMpfSx1Ny5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uIFg2ZShjLGwpe3ZhciBhPXRoaXMuX19kYXRhX187aWYoYSBpbnN0YW5jZW9mIEJrKXt2YXIgZD1hLl9fZGF0YV9fO2lmKCFuYnx8ZC5sZW5ndGg8MTk5KXJldHVy'@;
put 'biBkLnB1c2goW2MsbF0pLHRoaXMuc2l6ZT0rK2Euc2l6ZSx0aGlzO2E9dGhpcy5fX2RhdGFfXz1uZXcgWUYoZCl9cmV0dXJuIGEuc2V0KGMsbCksdGhpcy5zaXplPWEuc2l6ZSx0aGlzfTtjb25zdCBRNmU9dTc7dmFyIG44ZT1mdW5jdGlvbigpe3RyeXt2YXIgYz1LNShPYmplY3QsImRlZmlu'@;
put 'ZVByb3BlcnR5Iik7cmV0dXJuIGMoe30sIiIse30pLGN9Y2F0Y2h7fX0oKTtjb25zdCBoSj1uOGUsZko9ZnVuY3Rpb24gcjhlKGMsbCxhKXsiX19wcm90b19fIj09bCYmaEo/aEooYyxsLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTphLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'fTt2YXIgbzhlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgcEo9ZnVuY3Rpb24gczhlKGMsbCxhKXt2YXIgZD1jW2xdOyghbzhlLmNhbGwoYyxsKXx8IW9KKGQsYSl8fHZvaWQgMD09PWEmJiEobCBpbiBjKSkmJmZKKGMsbCxhKX0sems9ZnVuY3Rpb24gYThlKGMsbCxh'@;
put 'LGQpe3ZhciBoPSFhO2F8fChhPXt9KTtmb3IodmFyIGY9LTEsdj1sLmxlbmd0aDsrK2Y8djspe3ZhciBUPWxbZl0sWT1kP2QoYVtUXSxjW1RdLFQsYSxjKTp2b2lkIDA7dm9pZCAwPT09WSYmKFk9Y1tUXSksaD9mSihhLFQsWSk6cEooYSxULFkpfXJldHVybiBhfSxkNz1mdW5jdGlvbiB1OGUo'@;
put 'Yyl7cmV0dXJuIG51bGwhPWMmJiJvYmplY3QiPT10eXBlb2YgY30sbUo9ZnVuY3Rpb24gaDhlKGMpe3JldHVybiBkNyhjKSYmIltvYmplY3QgQXJndW1lbnRzXSI9PWE3KGMpfTt2YXIgZ0o9T2JqZWN0LnByb3RvdHlwZSxmOGU9Z0ouaGFzT3duUHJvcGVydHkscDhlPWdKLnByb3BlcnR5SXNF'@;
put 'bnVtZXJhYmxlLG04ZT1tSihmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP21KOmZ1bmN0aW9uKGMpe3JldHVybiBkNyhjKSYmZjhlLmNhbGwoYywiY2FsbGVlIikmJiFwOGUuY2FsbChjLCJjYWxsZWUiKX07Y29uc3QgZzhlPW04ZSxoNz1BcnJheS5pc0FycmF5O3ZhciBfSj0ib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLHZKPV9KJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUseUo9dkomJnZKLmV4cG9ydHM9PT1fSj9nZi5CdWZmZXI6dm9pZCAwO2Nv'@;
put 'bnN0IGJKPSh5Sj95Si5pc0J1ZmZlcjp2b2lkIDApfHxmdW5jdGlvbiB2OGUoKXtyZXR1cm4hMX07dmFyIFM4ZT0vXig/OjB8WzEtOV1cZCopJC87Y29uc3QgazhlPWZ1bmN0aW9uIHg4ZShjLGwpe3ZhciBhPXR5cGVvZiBjO3JldHVybiEhKGw9bD8/OTAwNzE5OTI1NDc0MDk5MSkmJigibnVt'@;
put 'YmVyIj09YXx8InN5bWJvbCIhPWEmJlM4ZS50ZXN0KGMpKSYmYz4tMSYmYyUxPT0wJiZjPGx9LHdKPWZ1bmN0aW9uIFQ4ZShjKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGMmJmM+LTEmJmMlMT09MCYmYzw9OTAwNzE5OTI1NDc0MDk5MX07dmFyIEVsPXt9O0VsWyJbb2JqZWN0IEZsb2F0MzJB'@;
put 'cnJheV0iXT1FbFsiW29iamVjdCBGbG9hdDY0QXJyYXldIl09RWxbIltvYmplY3QgSW50OEFycmF5XSJdPUVsWyJbb2JqZWN0IEludDE2QXJyYXldIl09RWxbIltvYmplY3QgSW50MzJBcnJheV0iXT1FbFsiW29iamVjdCBVaW50OEFycmF5XSJdPUVsWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFy'@;
put 'cmF5XSJdPUVsWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUVsWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEVsWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1FbFsiW29iamVjdCBBcnJheV0iXT1FbFsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1FbFsiW29iamVjdCBCb29sZWFuXSJdPUVsWyJb'@;
put 'b2JqZWN0IERhdGFWaWV3XSJdPUVsWyJbb2JqZWN0IERhdGVdIl09RWxbIltvYmplY3QgRXJyb3JdIl09RWxbIltvYmplY3QgRnVuY3Rpb25dIl09RWxbIltvYmplY3QgTWFwXSJdPUVsWyJbb2JqZWN0IE51bWJlcl0iXT1FbFsiW29iamVjdCBPYmplY3RdIl09RWxbIltvYmplY3QgUmVnRXhw'@;
put 'XSJdPUVsWyJbb2JqZWN0IFNldF0iXT1FbFsiW29iamVjdCBTdHJpbmddIl09RWxbIltvYmplY3QgV2Vha01hcF0iXT0hMTtjb25zdCB6Rj1mdW5jdGlvbiB0N2UoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpfX07dmFyIE1KPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhw'@;
put 'b3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsaWI9TUomJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiFtb2R1bGUubm9kZVR5cGUmJm1vZHVsZSxVRj1pYiYmaWIuZXhwb3J0cz09PU1KJiZzSi5wcm9jZXNzO2NvbnN0IGY3PWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBp'@;
put 'YiYmaWIucmVxdWlyZSYmaWIucmVxdWlyZSgidXRpbCIpLnR5cGVzfHxVRiYmVUYuYmluZGluZyYmVUYuYmluZGluZygidXRpbCIpfWNhdGNoe319KCk7dmFyIENKPWY3JiZmNy5pc1R5cGVkQXJyYXk7Y29uc3QgbzdlPUNKP3pGKENKKTpmdW5jdGlvbiBROGUoYyl7cmV0dXJuIGQ3KGMpJiZ3'@;
put 'SihjLmxlbmd0aCkmJiEhRWxbYTcoYyldfTt2YXIgYTdlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgU0o9ZnVuY3Rpb24gbDdlKGMsbCl7dmFyIGE9aDcoYyksZD0hYSYmZzhlKGMpLGg9IWEmJiFkJiZiSihjKSxmPSFhJiYhZCYmIWgmJm83ZShjKSx2PWF8fGR8fGh8'@;
put 'fGYsVD12P2Z1bmN0aW9uIGw4ZShjLGwpe2Zvcih2YXIgYT0tMSxkPUFycmF5KGMpOysrYTxjOylkW2FdPWwoYSk7cmV0dXJuIGR9KGMubGVuZ3RoLFN0cmluZyk6W10sWT1ULmxlbmd0aDtmb3IodmFyIHJlIGluIGMpKGx8fGE3ZS5jYWxsKGMscmUpKSYmKCF2fHwhKCJsZW5ndGgiPT1yZXx8'@;
put 'aCYmKCJvZmZzZXQiPT1yZXx8InBhcmVudCI9PXJlKXx8ZiYmKCJidWZmZXIiPT1yZXx8ImJ5dGVMZW5ndGgiPT1yZXx8ImJ5dGVPZmZzZXQiPT1yZSl8fGs4ZShyZSxZKSkpJiZULnB1c2gocmUpO3JldHVybiBUfTt2YXIgYzdlPU9iamVjdC5wcm90b3R5cGU7Y29uc3QgWkY9ZnVuY3Rpb24g'@;
put 'dTdlKGMpe3ZhciBsPWMmJmMuY29uc3RydWN0b3I7cmV0dXJuIGM9PT0oImZ1bmN0aW9uIj09dHlwZW9mIGwmJmwucHJvdG90eXBlfHxjN2UpfSx4Sj1mdW5jdGlvbiBkN2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGMobChhKSl9fSxmN2U9eEooT2JqZWN0LmtleXMsT2JqZWN0'@;
put 'KTt2YXIgbTdlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3Qga0o9ZnVuY3Rpb24gdjdlKGMpe3JldHVybiBudWxsIT1jJiZ3SihjLmxlbmd0aCkmJiFjSihjKX0sV0Y9ZnVuY3Rpb24geTdlKGMpe3JldHVybiBrSihjKT9TSihjKTpmdW5jdGlvbiBnN2UoYyl7aWYoIVpG'@;
put 'KGMpKXJldHVybiBmN2UoYyk7dmFyIGw9W107Zm9yKHZhciBhIGluIE9iamVjdChjKSltN2UuY2FsbChjLGEpJiYiY29uc3RydWN0b3IiIT1hJiZsLnB1c2goYSk7cmV0dXJuIGx9KGMpfTt2YXIgeDdlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgRTdlPWZ1bmN0aW9u'@;
put 'IGs3ZShjKXtpZighdGIoYykpcmV0dXJuIGZ1bmN0aW9uIE03ZShjKXt2YXIgbD1bXTtpZihudWxsIT1jKWZvcih2YXIgYSBpbiBPYmplY3QoYykpbC5wdXNoKGEpO3JldHVybiBsfShjKTt2YXIgbD1aRihjKSxhPVtdO2Zvcih2YXIgZCBpbiBjKSJjb25zdHJ1Y3RvciI9PWQmJihsfHwheDdl'@;
put 'LmNhbGwoYyxkKSl8fGEucHVzaChkKTtyZXR1cm4gYX0sR0Y9ZnVuY3Rpb24gVDdlKGMpe3JldHVybiBrSihjKT9TSihjLCEwKTpFN2UoYyl9O3ZhciBFSj0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLFRKPUVKJiYib2JqZWN0'@;
put 'Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsREo9VEomJlRKLmV4cG9ydHM9PT1FSj9nZi5CdWZmZXI6dm9pZCAwLEFKPURKP0RKLmFsbG9jVW5zYWZlOnZvaWQgMDtjb25zdCBMSj1mdW5jdGlvbiBON2UoKXtyZXR1cm5bXX07dmFyIGo3ZT1PYmpl'@;
put 'Y3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLElKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsQjdlPUlKP2Z1bmN0aW9uKGMpe3JldHVybiBudWxsPT1jP1tdOihjPU9iamVjdChjKSxmdW5jdGlvbiBGN2UoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5n'@;
put 'dGgsaD0wLGY9W107KythPGQ7KXt2YXIgdj1jW2FdO2wodixhLGMpJiYoZltoKytdPXYpfXJldHVybiBmfShJSihjKSxmdW5jdGlvbihsKXtyZXR1cm4gajdlLmNhbGwoYyxsKX0pKX06TEo7Y29uc3QgJEY9QjdlLFJKPWZ1bmN0aW9uIFU3ZShjLGwpe2Zvcih2YXIgYT0tMSxkPWwubGVuZ3Ro'@;
put 'LGg9Yy5sZW5ndGg7KythPGQ7KWNbaCthXT1sW2FdO3JldHVybiBjfSxPSj14SihPYmplY3QuZ2V0UHJvdG90eXBlT2YsT2JqZWN0KTt2YXIgRzdlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPVtdO2M7KVJKKGwsJEYoYykpLGM9T0ooYyk7cmV0'@;
put 'dXJuIGx9OkxKO2NvbnN0IFBKPUc3ZSxGSj1mdW5jdGlvbiBLN2UoYyxsLGEpe3ZhciBkPWwoYyk7cmV0dXJuIGg3KGMpP2Q6UkooZCxhKGMpKX0sSjdlPWZ1bmN0aW9uIFg3ZShjKXtyZXR1cm4gRkooYyxXRiwkRil9LGU5ZT1mdW5jdGlvbiBRN2UoYyl7cmV0dXJuIEZKKGMsR0YsUEopfSxx'@;
put 'Rj1LNShnZiwiRGF0YVZpZXciKSxLRj1LNShnZiwiUHJvbWlzZSIpLFhGPUs1KGdmLCJTZXQiKSxKRj1LNShnZiwiV2Vha01hcCIpO3ZhciBISj0iW29iamVjdCBNYXBdIixOSj0iW29iamVjdCBQcm9taXNlXSIsVko9IltvYmplY3QgU2V0XSIsako9IltvYmplY3QgV2Vha01hcF0iLEJKPSJb'@;
put 'b2JqZWN0IERhdGFWaWV3XSIsczllPXE1KHFGKSxhOWU9cTUobmIpLGw5ZT1xNShLRiksYzllPXE1KFhGKSx1OWU9cTUoSkYpLFg1PWE3OyhxRiYmWDUobmV3IHFGKG5ldyBBcnJheUJ1ZmZlcigxKSkpIT1CSnx8bmImJlg1KG5ldyBuYikhPUhKfHxLRiYmWDUoS0YucmVzb2x2ZSgpKSE9Tkp8'@;
put 'fFhGJiZYNShuZXcgWEYpIT1WSnx8SkYmJlg1KG5ldyBKRikhPWpKKSYmKFg1PWZ1bmN0aW9uKGMpe3ZhciBsPWE3KGMpLGE9IltvYmplY3QgT2JqZWN0XSI9PWw/Yy5jb25zdHJ1Y3Rvcjp2b2lkIDAsZD1hP3E1KGEpOiIiO2lmKGQpc3dpdGNoKGQpe2Nhc2UgczllOnJldHVybiBCSjtjYXNl'@;
put 'IGE5ZTpyZXR1cm4gSEo7Y2FzZSBsOWU6cmV0dXJuIE5KO2Nhc2UgYzllOnJldHVybiBWSjtjYXNlIHU5ZTpyZXR1cm4gakp9cmV0dXJuIGx9KTtjb25zdCBRRj1YNTt2YXIgaDllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgWUo9Z2YuVWludDhBcnJheSxlSD1mdW5j'@;
put 'dGlvbiBnOWUoYyl7dmFyIGw9bmV3IGMuY29uc3RydWN0b3IoYy5ieXRlTGVuZ3RoKTtyZXR1cm4gbmV3IFlKKGwpLnNldChuZXcgWUooYykpLGx9O3ZhciB5OWU9L1x3KiQvO3ZhciB6Sj1GND9GNC5wcm90b3R5cGU6dm9pZCAwLFVKPXpKP3pKLnZhbHVlT2Y6dm9pZCAwO2NvbnN0IFc5ZT1m'@;
put 'dW5jdGlvbiBaOWUoYyxsLGEpe3ZhciBkPWMuY29uc3RydWN0b3I7c3dpdGNoKGwpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiBlSChjKTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBkKCtjKTtjYXNlIltvYmplY3QgRGF0'@;
put 'YVZpZXddIjpyZXR1cm4gZnVuY3Rpb24gXzllKGMsbCl7dmFyIGE9bD9lSChjLmJ1ZmZlcik6Yy5idWZmZXI7cmV0dXJuIG5ldyBjLmNvbnN0cnVjdG9yKGEsYy5ieXRlT2Zmc2V0LGMuYnl0ZUxlbmd0aCl9KGMsYSk7Y2FzZSJbb2JqZWN0IEZsb2F0MzJBcnJheV0iOmNhc2UiW29iamVjdCBG'@;
put 'bG9hdDY0QXJyYXldIjpjYXNlIltvYmplY3QgSW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDE2QXJyYXldIjpjYXNlIltvYmplY3QgSW50MzJBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI6Y2FzZSJbb2JqZWN0IFVp'@;
put 'bnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQzMkFycmF5XSI6cmV0dXJuIGZ1bmN0aW9uIFM5ZShjLGwpe3ZhciBhPWw/ZUgoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmxlbmd0aCl9KGMsYSk7Y2FzZSJbb2JqZWN0IE1h'@;
put 'cF0iOmNhc2UiW29iamVjdCBTZXRdIjpyZXR1cm4gbmV3IGQ7Y2FzZSJbb2JqZWN0IE51bWJlcl0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gbmV3IGQoYyk7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOnJldHVybiBmdW5jdGlvbiBiOWUoYyl7dmFyIGw9bmV3IGMuY29uc3RydWN0b3Io'@;
put 'Yy5zb3VyY2UseTllLmV4ZWMoYykpO3JldHVybiBsLmxhc3RJbmRleD1jLmxhc3RJbmRleCxsfShjKTtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIGZ1bmN0aW9uIE05ZShjKXtyZXR1cm4gVUo/T2JqZWN0KFVKLmNhbGwoYykpOnt9fShjKX19O3ZhciBaSj1PYmplY3QuY3JlYXRlLEc5'@;
put 'ZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGMoKXt9cmV0dXJuIGZ1bmN0aW9uKGwpe2lmKCF0YihsKSlyZXR1cm57fTtpZihaSilyZXR1cm4gWkoobCk7Yy5wcm90b3R5cGU9bDt2YXIgYT1uZXcgYztyZXR1cm4gYy5wcm90b3R5cGU9dm9pZCAwLGF9fSgpO2NvbnN0ICQ5ZT1HOWU7dmFyIFdKPWY3'@;
put 'JiZmNy5pc01hcDtjb25zdCB0X2U9V0o/ekYoV0opOmZ1bmN0aW9uIEo5ZShjKXtyZXR1cm4gZDcoYykmJiJbb2JqZWN0IE1hcF0iPT1RRihjKX07dmFyIEdKPWY3JiZmNy5pc1NldDtjb25zdCBzX2U9R0o/ekYoR0opOmZ1bmN0aW9uIHJfZShjKXtyZXR1cm4gZDcoYykmJiJbb2JqZWN0IFNl'@;
put 'dF0iPT1RRihjKX07dmFyICRKPSJbb2JqZWN0IEFyZ3VtZW50c10iLHFKPSJbb2JqZWN0IEZ1bmN0aW9uXSIsS0o9IltvYmplY3QgT2JqZWN0XSIseWw9e307eWxbJEpdPXlsWyJbb2JqZWN0IEFycmF5XSJdPXlsWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPXlsWyJbb2JqZWN0IERhdGFWaWV3'@;
put 'XSJdPXlsWyJbb2JqZWN0IEJvb2xlYW5dIl09eWxbIltvYmplY3QgRGF0ZV0iXT15bFsiW29iamVjdCBGbG9hdDMyQXJyYXldIl09eWxbIltvYmplY3QgRmxvYXQ2NEFycmF5XSJdPXlsWyJbb2JqZWN0IEludDhBcnJheV0iXT15bFsiW29iamVjdCBJbnQxNkFycmF5XSJdPXlsWyJbb2JqZWN0'@;
put 'IEludDMyQXJyYXldIl09eWxbIltvYmplY3QgTWFwXSJdPXlsWyJbb2JqZWN0IE51bWJlcl0iXT15bFtLSl09eWxbIltvYmplY3QgUmVnRXhwXSJdPXlsWyJbb2JqZWN0IFNldF0iXT15bFsiW29iamVjdCBTdHJpbmddIl09eWxbIltvYmplY3QgU3ltYm9sXSJdPXlsWyJbb2JqZWN0IFVpbnQ4'@;
put 'QXJyYXldIl09eWxbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09eWxbIltvYmplY3QgVWludDE2QXJyYXldIl09eWxbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAseWxbIltvYmplY3QgRXJyb3JdIl09eWxbcUpdPXlsWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgUl9lPWZ1'@;
put 'bmN0aW9uIFVrKGMsbCxhLGQsaCxmKXt2YXIgdixUPTEmbCxZPTImbCxyZT00Jmw7aWYoYSYmKHY9aD9hKGMsZCxoLGYpOmEoYykpLHZvaWQgMCE9PXYpcmV0dXJuIHY7aWYoIXRiKGMpKXJldHVybiBjO3ZhciBmZT1oNyhjKTtpZihmZSl7aWYodj1mdW5jdGlvbiBmOWUoYyl7dmFyIGw9Yy5s'@;
put 'ZW5ndGgsYT1uZXcgYy5jb25zdHJ1Y3RvcihsKTtyZXR1cm4gbCYmInN0cmluZyI9PXR5cGVvZiBjWzBdJiZoOWUuY2FsbChjLCJpbmRleCIpJiYoYS5pbmRleD1jLmluZGV4LGEuaW5wdXQ9Yy5pbnB1dCksYX0oYyksIVQpcmV0dXJuIGZ1bmN0aW9uIE83ZShjLGwpe3ZhciBhPS0xLGQ9Yy5s'@;
put 'ZW5ndGg7Zm9yKGx8fChsPUFycmF5KGQpKTsrK2E8ZDspbFthXT1jW2FdO3JldHVybiBsfShjLHYpfWVsc2V7dmFyIF9lPVFGKGMpLGtlPV9lPT1xSnx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09X2U7aWYoYkooYykpcmV0dXJuIGZ1bmN0aW9uIEk3ZShjLGwpe2lmKGwpcmV0dXJu'@;
put 'IGMuc2xpY2UoKTt2YXIgYT1jLmxlbmd0aCxkPUFKP0FKKGEpOm5ldyBjLmNvbnN0cnVjdG9yKGEpO3JldHVybiBjLmNvcHkoZCksZH0oYyxUKTtpZihfZT09S0p8fF9lPT0kSnx8a2UmJiFoKXtpZih2PVl8fGtlP3t9OmZ1bmN0aW9uIHE5ZShjKXtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'Yy5jb25zdHJ1Y3Rvcnx8WkYoYyk/e306JDllKE9KKGMpKX0oYyksIVQpcmV0dXJuIFk/ZnVuY3Rpb24gJDdlKGMsbCl7cmV0dXJuIHprKGMsUEooYyksbCl9KGMsZnVuY3Rpb24gRDdlKGMsbCl7cmV0dXJuIGMmJnprKGwsR0YobCksYyl9KHYsYykpOmZ1bmN0aW9uIFk3ZShjLGwpe3JldHVy'@;
put 'biB6ayhjLCRGKGMpLGwpfShjLGZ1bmN0aW9uIGI3ZShjLGwpe3JldHVybiBjJiZ6ayhsLFdGKGwpLGMpfSh2LGMpKX1lbHNle2lmKCF5bFtfZV0pcmV0dXJuIGg/Yzp7fTt2PVc5ZShjLF9lLFQpfX1mfHwoZj1uZXcgUTZlKTt2YXIgV2U9Zi5nZXQoYyk7aWYoV2UpcmV0dXJuIFdlO2Yuc2V0'@;
put 'KGMsdiksc19lKGMpP2MuZm9yRWFjaChmdW5jdGlvbih5dCl7di5hZGQoVWsoeXQsbCxhLHl0LGMsZikpfSk6dF9lKGMpJiZjLmZvckVhY2goZnVuY3Rpb24oeXQsd3Qpe3Yuc2V0KHd0LFVrKHl0LGwsYSx3dCxjLGYpKX0pO3ZhciB0dD1mZT92b2lkIDA6KHJlP1k/ZTllOko3ZTpZP0dGOldG'@;
put 'KShjKTtyZXR1cm4gZnVuY3Rpb24gZThlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoOysrYTxkJiYhMSE9PWwoY1thXSxhLGMpOyk7fSh0dHx8YyxmdW5jdGlvbih5dCx3dCl7dHQmJih5dD1jW3d0PXl0XSkscEoodix3dCxVayh5dCxsLGEsd3QsYyxmKSl9KSx2fSxa'@;
put 'az1mdW5jdGlvbiBGX2UoYyl7cmV0dXJuIFJfZShjLDUpfTt2YXIgSF9lPVIoNzg4NTUpO2xldCBjdT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLmxvYWRNb3JlQ291bnQ9NTAsdGhpcy5pc01pY3Jvc29mdD0hMSx0aGlzLmlzTWljcm9z'@;
put 'b2Z0PXRoaXMuaXNJRW9yRURHRSgpLGNvbnNvbGUubG9nKCJJcyBJRSBvciBFZGdlPyIsdGhpcy5pc01pY3Jvc29mdCl9Y29udmVydEpzRGF0ZVRvU2FzRGF0ZShhLGQ9ImRheXMiKXtsZXQgaCxmPTA7aD1hIGluc3RhbmNlb2YgRGF0ZT9hOm5ldyBEYXRlKGEpLGY9bmV3IERhdGUoRGF0ZS5V'@;
put 'VEMoaC5nZXRGdWxsWWVhcigpLGguZ2V0TW9udGgoKSxoLmdldERhdGUoKSxoLmdldEhvdXJzKCksaC5nZXRNaW51dGVzKCksaC5nZXRTZWNvbmRzKCkpKS52YWx1ZU9mKCk7Y29uc3QgWT1mKzMxNTYxOTJlNTtzd2l0Y2goZCl7Y2FzZSJkYXlzIjp7bGV0IHJlPVkvODY0ZTU7cmV0dXJuIHJl'@;
put 'PU1hdGguYWJzKHJlKSxyZT1NYXRoLmZsb29yKHJlKSxyZX1jYXNlInNlY29uZHMiOnJldHVybiBZLzFlM31yZXR1cm4gMH1jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZD0iZGF5cyIpe2lmKCJudW1iZXIiIT10eXBlb2YgYSYmKGE9cGFyc2VGbG9hdChhKSksInNlY29uZHMiPT09ZCl7bGV0'@;
put 'IFQ9MWUzKmEtMzE1NjE5MmU1O3JldHVybiBUKz02MCpuZXcgRGF0ZShUKS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyxuZXcgRGF0ZShUKX1yZXR1cm4gbmV3IERhdGUoODY0ZTUqYS0zMTU2MTkyZTUpfXRyZWVPbkZpbHRlcihhLGQpe2xldCBoPWEuc2VhcmNoU3RyaW5nP2Euc2VhcmNoU3Ry'@;
put 'aW5nOiIiLGY9ZC5zcGxpdCgiLiIpWzBdLHY9ZC5zcGxpdCgiLiIpWzFdLFQ9ZisiQWxsIjthW2ZdJiYoYVtUXXx8KGFbVF09dGhpcy5kZWVwQ2xvbmUoYVtmXSkpLGFbZl09dGhpcy5kZWVwQ2xvbmUoYVtUXSksaC5sZW5ndGg+MCYmKGFbZl09YVtmXS5maWx0ZXIodj9ZPT5ZW3ZdLnRvTG93'@;
put 'ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKTpZPT5ZLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoaC50b0xvd2VyQ2FzZSgpKSkpKX1saWJyYXJ5T25GaWx0ZXIoYSxkLGgpe2QubGVuZ3RoPjA/YS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZC50b0xv'@;
put 'd2VyQ2FzZSgpKT8oZi5oaWRkZW49ITEsZi5pbkZvcmVncm91bmQ9ITApOihmLmhpZGRlbj0hMCxmLmluRm9yZWdyb3VuZD0hMSl9KToodGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLHRoaXMuZGlzcGxheUxpYnJhcmllcyhhKSl9ZGlzcGxheUxpYnJhcmllcyhhLGQpe2Q/dGhpcy5zaG93bkxp'@;
put 'YnJhcmllcys9dGhpcy5sb2FkTW9yZUNvdW50Oih0aGlzLnNob3duTGlicmFyaWVzPTUwLHRoaXMucmVzZXRMaWJyYXJ5Rm9yZWdyb3VuZChhKSk7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aCYmaCE9PXRoaXMuc2hvd25MaWJyYXJpZXM7aCsrKWFbaF0uaW5Gb3JlZ3JvdW5kPSEwfXJlc2V0TGli'@;
put 'cmFyeUZvcmVncm91bmQoYSl7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5pbkZvcmVncm91bmQ9ITF9bWV0YU9iamVjdE9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wPyh0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSksYS5mb3JFYWNoKGY9PntmW2hdLnRvTG93ZXJDYXNlKCkuaW5j'@;
put 'bHVkZXMoZC50b0xvd2VyQ2FzZSgpKXx8KGYuaGlkZGVuPSEwKX0pKTp0aGlzLnJlc2V0QXJyYXlGaWx0ZXIoYSl9cmVzZXRBcnJheUZpbHRlcihhKXthLmZvckVhY2goZD0+e2QuaGlkZGVuPSExLGQuaW5Gb3JlZ3JvdW5kJiZkZWxldGUgZC5pbkZvcmVncm91bmR9KX1pc0lFb3JFREdFKCl7'@;
put 'dmFyIGE9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7cmV0dXJuIGEuaW5kZXhPZigiTVNJRSAiKT4wfHwoYS5pbmRleE9mKCJUcmlkZW50LyIpPjA/KGEuaW5kZXhPZigicnY6IiksITApOmEuaW5kZXhPZigiRWRnZS8iKT4wKX1jb252ZXJ0T2JqZWN0c1RvQXJyYXkoYSxkPSExKXtyZXR1'@;
put 'cm4gZCYmKGE9dGhpcy5kZWVwQ2xvbmUoYSkpLGEubWFwKGg9Pk9iamVjdC5rZXlzKGgpLm1hcChmPT5oW2ZdKSl9YWRkTGVhZGluZ1plcm8oYSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBhJiYoYT1hLnRvU3RyaW5nKCkpLGEubGVuZ3RoPDI/IjAiK2E6YX1kZWxldGVLZXlzQW5kSGFzaChh'@;
put 'LGQsaD0hMCl7Y29uc3QgZj1oP3RoaXMuZGVlcENsb25lKGEpOmE7Zm9yKGxldCB2IG9mIGQpZGVsZXRlIGZbdl07cmV0dXJuIEhfZShKU09OLnN0cmluZ2lmeShmKSkudG9TdHJpbmcoKX1kb3dubG9hZFRleHRGaWxlKGEsZCl7Y29uc3QgaD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7'@;
put 'aC5zZXRBdHRyaWJ1dGUoImhyZWYiLCJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD11dGYtOCwiK2VuY29kZVVSSUNvbXBvbmVudChkKSksaC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixhKyIudHh0IiksaC5zdHlsZS5kaXNwbGF5PSJub25lIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGgp'@;
put 'LGguY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGgpfWNvbnZlcnRBcnJheVZhbHVlcyhhLGQpe2lmKGEubGVuZ3RoPDEpcmV0dXJuW107c3dpdGNoKGQpe2Nhc2UibnVtYmVyIjpyZXR1cm4gYS5tYXAoaD0+MSpoKTtjYXNlInN0cmluZyI6cmV0dXJuIGEudG9TdHJpbmcoKS5z'@;
put 'cGxpdCgiLCIpfX1kZWJvdW5jZUNhbGwoYSxkKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoZCxhKX1kZWVwQ2xvbmUoYSl7cmV0dXJuIFprKGEpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl'@;
put 'dHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGgxPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQpe3RoaXMubG9nZ2VyU2Vydmlj'@;
put 'ZT1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmhlbHBlclNlcnZpY2U9dix0aGlzLnJvdXRlcj1ULHRoaXMudXNlckNvdW50TGltaXRhdGlvbj0hMSx0aGlzLmxpY2Vuc2VLZXlEYXRhPW51bGwsdGhpcy5fbGljZW5j'@;
put 'ZVN0YXRlPUlGLHRoaXMuYWxsRmVhdHVyZXNPbj17dmlld2VyX3Jvd3NfYWxsb3dlZDoxLzAsZWRpdG9yX3Jvd3NfYWxsb3dlZDoxLzAsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5X3Jvd3NfYWxsb3dlZDoxLzAsc3VibWl0X3Jvd3NfbGltaXQ6MS8wLHRhYmxlc19pbl9saWJyYXJ5'@;
put 'X2xpbWl0OjEvMCx2aWV3Ym94X2xpbWl0OjEvMCxsaW5lYWdlX2RhaWx5X2xpbWl0OjEvMCx2aWV3Ym94OiEwLGZpbGVVcGxvYWQ6ITAsZWRpdFJlY29yZDohMCxhZGRSZWNvcmQ6ITB9LHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YT17ZGVtbzohMCxob3RfbGljZW5zZV9rZXk6dGhpcy5hcHBT'@;
put 'dG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx1c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkfHwxLHZhbGlkX3VudGlsOlgxKCkuYWRkKDEsInllYXIiKS5mb3JtYXQoIllZWVktTU0tREQiKSxzaXRlX2lkOiIiLHNp'@;
put 'dGVfaWRfbXVsdGlwbGU6W119LHRoaXMuaXNBcHBBY3RpdmF0ZWQ9bmV3IEFyKG51bGwpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHk9bmV3IEFyKCExKSx0aGlzLmN1cnJlbnRVc2VyQ2FuUmVnaXN0ZXI9bmV3IEFyKCExKSx0aGlzLmFwcExvY2tlZD1uZXcgQXIoITEpLHRoaXMubGljZW5zZUV4'@;
put 'cGlyZXNJbkRheXM9bmV3IEFyKG51bGwpLHRoaXMuaXNBcHBGcmVlVGllcj1uZXcgQXIoITEpLHRoaXMubGljZW5jZVByb2JsZW09bmV3IEFyKG51bGwpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5PW5ldyBBcih2b2lkIDApLHRoaXMubGljZW5jZVN0YXRlPW5ldyBBcih0aGlzLl9saWNlbmNlU3Rh'@;
put 'dGUpLHRoaXMuc2FzU2VydmljZS5pbmNvcnJlY3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShZPT57aWYobnVsbCE9PXRoaXMuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiF0aGlzLmlzQXBwRnJlZVRpZXIudmFsdWUpe2NvbnN0IHJlPWAvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmbWlz'@;
put 'c21hdGNoSWQ9JHtZfSZmb3JjZT10cnVlYDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQocmUpLHRoaXMuZGVhY3RpdmF0ZUFwcChyZSl9fSl9YWN0aXZhdGlvbihhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2QuZnJlZVRpZXJMaWNlbmNlRGF0YS5ob3RfbGljZW5zZV9rZXk9'@;
put 'ZC5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSx5aWVsZCBkLnNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSkseWllbGQgZC5saWNlbnNpbmcoYS5nbG9idmFycyxhLlNZU1NJVEUpfSkoKX1zZXRTdGFydHVwc2VydmljZVJ1bGVzKGEpe3RoaXMu'@;
put 'X2xpY2VuY2VTdGF0ZS5lZGl0UmVjb3JkPSJZRVMiIT09YS5nbG9idmFyc1swXS5EQ19SRVNUUklDVF9FRElUUkVDT1JEfWxpY2Vuc2luZyhhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdFcnJvciBnZXR0aW5nICJHbG9idmFycyIg'@;
put 'ZnJvbSBzdGFydHVwc2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKHYpfWApfWxldCBm'@;
put 'PWFbMF07cmV0dXJuIHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JFR0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IiksaC5pc0Fw'@;
put 'cEFjdGl2YXRlZC5uZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZmLkFDVElWQVRJT05fS0VZPyhoLmxpY2Vu'@;
put 'Y2VLZXk9Zi5MSUNFTkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxmLkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9VyhmdW5jdGlvbiooVCl7eWllbGQgaC5hcHBs'@;
put 'aWNhdGlvbkFjdGl2YXRpb24oVCxmLGQpfSk7cmV0dXJuIGZ1bmN0aW9uKFQpe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksZnVuY3Rpb24oKXt2YXIgdj1XKGZ1bmN0aW9uKihUKXtjb25zdCBZPWBFcnJvciBkZWNyeXB0aW5nIGxpY2Vuc2Uga2V5LiAke1R9YDtjb25zb2xl'@;
put 'LmVycm9yKFkpO2NvbnN0IHJlPWAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKFkpfSZmb3JjZT10cnVlYDtoLmxpY2VuY2VQcm9ibGVtLm5leHQocmUpLGgucm91dGVyLm5hdmlnYXRlQnlVcmwocmUpLHNldFRpbWVvdXQoKCk9PmguYXBwbGljYXRpb25BY3Rp'@;
put 'dmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQsITApKX0pO3JldHVybiBmdW5jdGlvbihUKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSkpOnlpZWxkIGguYXBwbGljYXRpb25BY3RpdmF0aW9uKGguZnJlZVRpZXJMaWNlbmNlRGF0YSxmLGQpfSkoKX1hcHBsaWNh'@;
put 'dGlvbkFjdGl2YXRpb24oYSxkLGgsZil7Znx8KGY9ITEpLHRoaXMuc2V0U2l0ZUlkKGEpLCFhLmRlbW8mJmQmJmgmJnRoaXMuaGFuZGxlU2l0ZUlkTWlzc21hdGNoKGEsZCxoLGYpO2xldCB2PXZvaWQgMCE9PWEuaG90X2xpY2Vuc2Vfa2V5P2EuaG90X2xpY2Vuc2Vfa2V5OnRoaXMuaG90X2xp'@;
put 'Y2Vuc2Vfa2V5LnZhbHVlO3Z8fCh2PXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXkpLHRoaXMuaG90X2xpY2Vuc2Vfa2V5Lm5leHQodiksdGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiZ0aGlzLmhhbmRsZVVzZXJzQWxsb3dlZChhKSx0'@;
put 'aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYSksd2luZG93LmFwcGluZm8oKTtjb25zdHtleHBpcnlfZGF0ZTpULGRheXNUb0V4cGlyeTpZfT10aGlzLmNhbGN1bGF0ZUV4cGlyeShhKTtpZih3aW5kb3cubGljZW5zZUV4cGlyZXNJbj1ZLHRoaXMubGlj'@;
put 'ZW5zZUV4cGlyZXNJbkRheXMubmV4dChZKSxZPD0wKXJldHVybiBjb25zb2xlLmVycm9yKCJMaWNlbnNlIGtleSBoYXMgZXhwaXJlZCIpLHZvaWQoZCYmaCYmdGhpcy5oYW5kbGVFeHBpcnkoVCxkLGgsZikpO3RoaXMuaXNBcHBGcmVlVGllci5uZXh0KCEhYS5kZW1vKSxkJiZ0aGlzLmhhbmRs'@;
put 'ZVVzZXJSZWdpc3RyYXRpb24oYSxkLGYpLHRoaXMuZGVjb2RlTGljZW5jZUZlYXR1cmVzKGEpLHRoaXMubGljZW5jZVN0YXRlLm5leHQodGhpcy5fbGljZW5jZVN0YXRlKX1kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSl7aWYoIWEuZmVhdHVyZXMpe2lmKGEuZGVtbylyZXR1cm47cmV0dXJuIHZv'@;
put 'aWQodGhpcy5fbGljZW5jZVN0YXRlPXRoaXMuYWxsRmVhdHVyZXNPbil9Y29uc3QgZD1hLmZlYXR1cmVzLnNwbGl0KCIsIik7dGhpcy5fbGljZW5jZVN0YXRlPXsuLi50aGlzLl9saWNlbmNlU3RhdGUsdmlld2VyX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbUTEudmll'@;
put 'd2VyX3Jvd3NfYWxsb3dlZF0pLGVkaXRvcl9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW1ExLmVkaXRvcl9yb3dzX2FsbG93ZWRdKSxzdGFnZV9yb3dzX2FsbG93ZWQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW1ExLnN0YWdlX3Jvd3NfYWxsb3dlZF0pLGhpc3Rvcnlf'@;
put 'cm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtRMS5oaXN0b3J5X3Jvd3NfYWxsb3dlZF0pLHN1Ym1pdF9yb3dzX2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtRMS5zdWJtaXRfcm93c19saW1pdF0pLHRhYmxlc19pbl9saWJyYXJ5X2xpbWl0OnRoaXMucGFyc2VG'@;
put 'ZWF0dXJlVmFsdWUoZFtRMS50YWJsZXNfaW5fbGlicmFyeV9saW1pdF0pLHZpZXdib3hfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW1ExLnZpZXdib3hfbGltaXRdKSxsaW5lYWdlX2RhaWx5X2xpbWl0OnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtRMS5saW5lYWdlX2RhaWx5X2xp'@;
put 'bWl0XSksdmlld2JveDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW1ExLnZpZXdib3hdKSxmaWxlVXBsb2FkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbUTEuZmlsZVVwbG9hZF0pLGVkaXRSZWNvcmQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtRMS5lZGl0UmVjb3JkXSksYWRkUmVj'@;
put 'b3JkOnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbUTEuYWRkUmVjb3JkXSl9LHRoaXMubG9nZ2VyU2VydmljZS5sb2coIkxpY2VuY2Ugc3RhdGU6Iix0aGlzLl9saWNlbmNlU3RhdGUpfXBhcnNlRmVhdHVyZVZhbHVlKGEpe3JldHVybiItIj09PWE/MS8wOnBhcnNlSW50KGEpfXBhcnNlRmVh'@;
put 'dHVyZVRvZ2dsZShhKXtyZXR1cm4hIXBhcnNlSW50KGEpfWRlY3J5cHRMaWNlbnNlS2V5KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZj1XKGZ1bmN0aW9uKih2LFQpe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0bGUpdHJ5'@;
put 'e2xldCBrZT1hdG9iKGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKGtlKSl9Y2F0Y2goa2Upe1QoIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNlIGtleSBkYXRhLiAiK2tlKX1sZXQgcmUsWT15aWVsZCBoLmJhc2U2NFRvQXJyYXlCdWZmZXIoYSkuY2F0Y2go'@;
put 'a2U9PntUKGtlKX0pO2NvbnN0IGZlPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1ZmZlcihkKS5jYXRjaChrZT0+e1Qoa2UpfSk7aWYoIWZlKXJldHVybiB2b2lkIFQoIk1pc3NpbmcgYWN0aXZhdGlvbiBrZXkiKTtsZXQgX2U7cmU9ZmU7dHJ5e19lPXlpZWxkIHdpbmRvdy5jcnlwdG8uc3VidGxl'@;
put 'LmltcG9ydEtleSgicGtjczgiLHJlLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaChrZSl7VCgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleTogIitrZSl9aWYoX2UpaWYoWSl0cnl7d2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlw'@;
put 'dCh7bmFtZToiUlNBLU9BRVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sX2UsWSkudGhlbihrZT0+e2xldCBXZT0obmV3IEk1ZS5UZXh0RGVjb2RlcikuZGVjb2RlKGtlKTt0cnl7dihKU09OLnBhcnNlKFdlKSl9Y2F0Y2goSmUpe1QoIkVycm9yIHBhcnNpbmcgbGljZW5zZSBrZXkgZGF0YS4g'@;
put 'IitKZSl9fSxrZT0+e1Qoa2UpfSl9Y2F0Y2goa2Upe1Qoa2UpfWVsc2UgVCgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgVCgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsVCl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfX0oKSl9Z2V0SG90TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlEYXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRlPUlGLHRoaXMuYXBwbGljYXRpb25B'@;
put 'Y3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJldHVybiExO2NvbnN0IGQ9bG9jYWxT'@;
put 'dG9yYWdlLmdldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIpLGg9WDEoKS52YWx1ZU9mKCk7aWYoIWQpcmV0dXJuIGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExO2NvbnN0IGY9cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzBdKSx2PXBhcnNlSW50KGQuc3BsaXQoIiwiKVsxXSk7cmV0dXJu'@;
put 'IFgxKGYpLmlzU2FtZShYMSgpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisxKSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExKX1zZXRMaW5lYWdlUmVuZGVyKGEs'@;
put 'ZCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9VyhmdW5jdGlvbiooaCxmKXtoKE9YLkQoYSkpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7'@;
put 'cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9YXJyYXlCdWZmZXJUb0Jhc2U2NChhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntkKE9YLmwoYSkpfSl9c2V0U2l0ZUlkKGEpe2Euc2l0ZV9pZF9tdWx0aXBsZT90aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChh'@;
put 'LnNpdGVfaWRfbXVsdGlwbGUpOmEuc2l0ZV9pZCYmdGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkKX1oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZil7bGV0IHY9ITEsVD0hMTtpZigoIWEuc2l0ZV9pZHx8YS5zaXRlX2lkIT09aCkmJih2PSEwKSwoIWEuc2l0'@;
put 'ZV9pZF9tdWx0aXBsZXx8IWEuc2l0ZV9pZF9tdWx0aXBsZS5pbmNsdWRlcyhoKSkmJihUPSEwKSx2JiZUKXJldHVybiBjb25zb2xlLmVycm9yKCJUaGUga2V5IHByb3ZpZGVkIGlzIGZvciBkaWZmZXJlbnQgb3JnYW5pemF0aW9uLiIpLHZvaWQgc2V0VGltZW91dCgoKT0+e2NvbnN0IFk9Ii9s'@;
put 'aWNlbnNpbmcva2V5P2Vycm9yPW1pc3NtYXRjaCZmb3JjZT10cnVlIjt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoWSksdGhpcy5fbGljZW5jZVN0YXRlPUlGLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVy'@;
put 'Lm5hdmlnYXRlQnlVcmwoWSl9KX1jYWxjdWxhdGVFeHBpcnkoYSl7bGV0IGQ9WDEoYS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLGg9WDEoKS5zdGFydE9mKCJkYXkiKSxmPWQuZGlmZihoLCJkYXlzIik7cmV0dXJue2V4cGlyeV9kYXRlOmQsZGF5c1RvRXhwaXJ5'@;
put 'OmZ9fWhhbmRsZUV4cGlyeShhLGQsaCxmKXtzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHtidG9hKCJFeHBpcnkgZGF0ZTogIithLmZvcm1hdCgiREQvTU0vWVlZWSIpKX1gO3RoaXMubGljZW5jZVByb2Js'@;
put 'ZW0ubmV4dCh2KSx0aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHYpfSl9aGFuZGxlVXNlcnNBbGxvd2VkKGEpe2EuZGVtbyYmdm9pZCAwIT09dGhpcy5fbGljZW5jZVN0YXRlLnVz'@;
put 'ZXJzX2FsbG93ZWQmJihhLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkPjA/YS51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWR9aGFuZGxlVXNlclJlZ2lzdHJh'@;
put 'dGlvbihhLGQsaCl7aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoZC5SRUdJU1RFUkNPVU5UPmEudXNlcnNfYWxsb3dlZD8oY29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUgdXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHkubmV4dCgh'@;
put 'MCkpOmQuUkVHSVNURVJDT1VOVD09PWEudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1c2VycyByZWdpc3RlcmVkLiIpKSwxIT09ZC5JU1JFR0lTVEVSRUQpcmV0dXJuIGQuUkVHSVNURVJDT1VOVDxhLnVzZXJzX2FsbG93ZWR8fCF0aGlzLnVzZXJD'@;
put 'b3VudExpbWl0YXRpb24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9yZWdp'@;
put 'c3RlciIpKSk6KHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCEwKX1zdGF0'@;
put 'aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKGQxKSxmcihpNyksZnIoR2wpLGZyKHlhKSxmcihjdSksZnIoenMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9v'@;
put 'dCJ9KX1yZXR1cm4gY30pKCksV2s9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMucm91dGVyPXYsdGhpcy5zeXNzaXRl'@;
put 'PW5ldyBBcihudWxsKSx0aGlzLmVudmlyb25tZW50SW5mbz1udWxsLHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShUPT57VCBpbnN0YW5jZW9mIGZmJiYiL2RlcGxveSI9PT1ULnVybCYmdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0p'@;
put 'fXNhc1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVwRGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RT'@;
put 'aXRlSWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwo'@;
put 'ZC5wdXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBkPSExO3lpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvc3RhcnR1cHNlcnZpY2UiLG51bGwpLnRoZW4oZnVuY3Rpb24oKXt2YXIg'@;
put 'aD1XKGZ1bmN0aW9uKihmKXthLnN5c3NpdGUubmV4dChbZi5TWVNTSVRFXSk7bGV0IHY9W107aWYoKCFmLmdsb2J2YXJzfHxmLmdsb2J2YXJzJiYhZi5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLnNhc2RhdGFzZXRzfHx2LnB1c2goIlNhc2RhdGFzZXRzIiksZi5zYXNsaWJz'@;
put 'fHx2LnB1c2goIlNhc2xpYnMiKSxmLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt2LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2'@;
put 'b2lkIGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7YS5lbnZpcm9ubWVudEluZm89e1NZU1NJVEU6Zi5TWVNTSVRFLFNZU1NDUEw6Zi5TWVNTQ1BMLFNZU1RDUElQSE9TVE5BTUU6Zi5TWVNUQ1BJUEhPU1ROQU1FLFNZU1ZMT05HOmYuU1lTVkxPTkcsTUVNU0laRTpm'@;
put 'Lk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6Zi5TWVNQUk9DRVNTTU9ERSxTWVNIT1NUTkFNRTpmLlNZU0hPU1ROQU1FLFNZU0hPU1RJTkZPTE9ORzpmLlNZU0hPU1RJTkZPTE9ORyxTWVNFTkNPRElORzpmLlNZU0VOQ09ESU5HLEFVVE9FWEVDOmYuQVVUT0VYRUMsSVNBRE1JTjpmLmdsb2J2YXJz'@;
put 'WzBdLklTQURNSU4sRENfQURNSU5fR1JPVVA6Zi5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9VUH07bGV0IHJlLGZlLFQ9Zi5zYXNkYXRhc2V0cyxZPXt9O2ZvcihsZXQgSmUgb2YgVClZW0plLkxJQlJFRl18fChZW0plLkxJQlJFRl09W10pLFlbSmUuTElCUkVGXS5wdXNoKEplLkRTTik7bGV0'@;
put 'IF9lPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoWSkpLGtlPVtdO2ZvcihsZXQgSmUgb2YgT2JqZWN0LmtleXMoX2UpKWtlLnB1c2goe0xJQlJBUllSRUY6SmUsdGFibGVzOl9lW0plXX0pO2xldCBXZT1rZTtyZT1ZLGZlPU9iamVjdC5rZXlzKFkpLHZvaWQgMCE9PXJlJiYoR24uZWRpdG9y'@;
put 'LmxpYnNBbmRUYWJsZXM9cmUpLEduLnhsbWFwcz1mLnhsbWFwcy5tYXAoSmU9Pih7aWQ6SmVbMF0sZGVzY3JpcHRpb246SmVbMV0sdGFyZ2V0RFM6SmVbMl19KSksR24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzPVdlLEduLmVkaXRvci5saWJyYXJpZXM9ZmUsR24uZWRpdG9yLnN0YXJ0dXBT'@;
put 'ZXQ9ITAsR24uZGNMaWI9Zi5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oZil9KTtyZXR1cm4gZnVuY3Rpb24oZil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkuY2F0Y2goaD0+e2Q9ITAsYS5ldmVudFNlcnZpY2Uuc2hvd0lu'@;
put 'Zm9Nb2RhbCgiRXJyb3IiLCJUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHN0YXJ0dXBzZXJ2aWNlIHJlc3BvbnNlIiksYS5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC5uZXh0KCExKX0pLGEubG9nZ2VyU2VydmljZS5sb2coIkFjdGl2YXRlZDoiLGEubGljZW5jZVNlcnZpY2UuaXNBcHBB'@;
put 'Y3RpdmF0ZWQudmFsdWUpLGR8fChhLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWU/YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSYmYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2hvbWUiKTohYS5y'@;
put 'b3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWEucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcva2V5P2Vycm9yPW1pc3NpbmcmZm9yY2U9dHJ1ZSIpKX0pKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihoMSksZnIoR2wpLGZyKHlhKSxmcihkMSksZnIoenMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCksWEo9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh'@;
put 'LGQpe3RoaXMuX3JlbmRlcmVyPWEsdGhpcy5fZWxlbWVudFJlZj1kLHRoaXMub25DaGFuZ2U9aD0+e30sdGhpcy5vblRvdWNoZWQ9KCk9Pnt9fXNldFByb3BlcnR5KGEsZCl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGEsZCl9cmVn'@;
put 'aXN0ZXJPblRvdWNoZWQoYSl7dGhpcy5vblRvdWNoZWQ9YX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9YX1zZXREaXNhYmxlZFN0YXRlKGEpe3RoaXMuc2V0UHJvcGVydHkoImRpc2FibGVkIixhKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'bmV3KGR8fGMpKHN0KGNzKSxzdCgkaSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjfSl9cmV0dXJuIGN9KSgpLEo1PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBYSntzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'KGF8fChhPWlhKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLGZlYXR1cmVzOltzb119KX1yZXR1cm4gY30pKCk7Y29uc3QgX2Y9bmV3IFlyKCIiKSxWX2U9e3Byb3ZpZGU6X2YsdXNlRXhpc3Rpbmc6UHMoKCk9PmYxKSxtdWx0aTohMH07bGV0IGYx'@;
put 'PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBKNXt3cml0ZVZhbHVlKGEpe3RoaXMuc2V0UHJvcGVydHkoImNoZWNrZWQiLGEpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9aWEoYykpKShofHxjKX19KSgpO3N0YXRpYyN0'@;
put 'PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsIm5nTW9k'@;
put 'ZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC5jaGVja2VkKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGZlYXR1cmVzOltHaShbVl9lXSks'@;
put 'c29dfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGpfZT17cHJvdmlkZTpfZix1c2VFeGlzdGluZzpQcygoKT0+VGwpLG11bHRpOiEwfSxZX2U9bmV3IFlyKCIiKTtsZXQgVGw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFhKe2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQpLHRoaXMuX2NvbXBvc2l0'@;
put 'aW9uTW9kZT1oLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uIEJfZSgpe2NvbnN0IGM9VDQoKT9UNCgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lkIChcZCspLy50ZXN0KGMudG9M'@;
put 'b3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1faGFuZGxlSW5wdXQoYSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRoaXMub25DaGFuZ2UoYSl9X2Nv'@;
put 'bXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoYSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KShzdChjcyksc3QoJGkpLHN0KFlfZSw4KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1'@;
put 'dCIsImZvcm1Db250cm9sIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwibmdNb2RlbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyJ0ZXh0YXJlYSIsIm5nTW9kZWwiLCIiXSxbIiIsIm5nRGVmYXVsdENvbnRyb2wiLCIi'@;
put 'XV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgiaW5wdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9oYW5kbGVJbnB1dCh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pKCJjb21wb3NpdGlvbnN0YXJ0IixmdW5jdGlv'@;
put 'bigpe3JldHVybiBoLl9jb21wb3NpdGlvblN0YXJ0KCl9KSgiY29tcG9zaXRpb25lbmQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLl9jb21wb3NpdGlvbkVuZCh2LnRhcmdldC52YWx1ZSl9KX0sZmVhdHVyZXM6W0dpKFtqX2VdKSxzb119KX1yZXR1cm4gY30pKCk7Y29uc3QganU9bmV3IFlyKCIi'@;
put 'KSxOND1uZXcgWXIoIiIpO2Z1bmN0aW9uIGFRKGMpe3JldHVybiBudWxsIT1jfWZ1bmN0aW9uIGxRKGMpe3JldHVybiBTeShjKT9aYyhjKTpjfWZ1bmN0aW9uIGNRKGMpe2xldCBsPXt9O3JldHVybiBjLmZvckVhY2goYT0+e2w9bnVsbCE9YT97Li4ubCwuLi5hfTpsfSksMD09PU9iamVjdC5r'@;
put 'ZXlzKGwpLmxlbmd0aD9udWxsOmx9ZnVuY3Rpb24gdVEoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YShjKSl9ZnVuY3Rpb24gZFEoYyl7cmV0dXJuIGMubWFwKGw9PmZ1bmN0aW9uIFVfZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBuSChjKXty'@;
put 'ZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiBoUShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKGFRKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gY1EodVEoYSxsKSl9fShkUShjKSk6bnVsbH1mdW5jdGlvbiBySChjKXtyZXR1cm4gbnVsbCE9'@;
put 'Yz9mdW5jdGlvbiBmUShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKGFRKTtyZXR1cm4gMD09bC5sZW5ndGg/bnVsbDpmdW5jdGlvbihhKXtyZXR1cm4gZnVuY3Rpb24gTl9lKC4uLmMpe2NvbnN0IGw9VEsoYykse2FyZ3M6YSxrZXlzOmR9PURLKGMpLGg9bmV3IHduKGY9'@;
put 'Pntjb25zdHtsZW5ndGg6dn09YTtpZighdilyZXR1cm4gdm9pZCBmLmNvbXBsZXRlKCk7Y29uc3QgVD1uZXcgQXJyYXkodik7bGV0IFk9dixyZT12O2ZvcihsZXQgZmU9MDtmZTx2O2ZlKyspe2xldCBfZT0hMTtjMShhW2ZlXSkuc3Vic2NyaWJlKCRyKGYsa2U9PntfZXx8KF9lPSEwLHJlLS0p'@;
put 'LFRbZmVdPWtlfSwoKT0+WS0tLHZvaWQgMCwoKT0+eyghWXx8IV9lKSYmKHJlfHxmLm5leHQoZD9BSyhkLFQpOlQpLGYuY29tcGxldGUoKSl9KSl9fSk7cmV0dXJuIGw/aC5waXBlKG5GKGwpKTpofSh1UShhLGwpLm1hcChsUSkpLnBpcGUoeXIoY1EpKX19KGRRKGMpKTpudWxsfWZ1bmN0aW9u'@;
put 'IHBRKGMsbCl7cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJheS5pc0FycmF5KGMpP1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIGlIKGMpe3JldHVybiBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gJGsoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwp'@;
put 'OmM9PT1sfWZ1bmN0aW9uIF9RKGMsbCl7Y29uc3QgYT1pSChsKTtyZXR1cm4gaUgoYykuZm9yRWFjaChoPT57JGsoYSxoKXx8YS5wdXNoKGgpfSksYX1mdW5jdGlvbiB2UShjLGwpe3JldHVybiBpSChsKS5maWx0ZXIoYT0+ISRrKGMsYSkpfWNsYXNzIHlRe2NvbnN0cnVjdG9yKCl7dGhpcy5f'@;
put 'cmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlz'@;
put 'LmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVsbH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhp'@;
put 'cy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3Rp'@;
put 'bmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51'@;
put 'bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/'@;
put 'dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPWx8'@;
put 'fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49bkgodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPXJIKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9y'@;
put 'cyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxi'@;
put 'YWNrcy5wdXNoKGwpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFz'@;
put 'RXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIEUwIGV4dGVuZHMgeVF7Z2V0IGZvcm1EaXJlY3RpdmUo'@;
put 'KXtyZXR1cm4gbnVsbH1nZXQgcGF0aCgpe3JldHVybiBudWxsfX1jbGFzcyBUMCBleHRlbmRzIHlRe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9wYXJlbnQ9bnVsbCx0aGlzLm5hbWU9bnVsbCx0aGlzLnZhbHVlQWNjZXNzb3I9bnVsbH19Y2xhc3MgYlF7Y29uc3Ry'@;
put 'dWN0b3IobCl7dGhpcy5fY2Q9bH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQgaXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250'@;
put 'cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlz'@;
put 'UGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uc3VibWl0dGVkfX1sZXQgY2E9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJRe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpYyNlPXRoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoVDAsMikpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RW'@;
put 'YXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmYnIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1Zh'@;
put 'bGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZyl9LGZlYXR1cmVzOltzb119KX1yZXR1cm4gY30pKCksUTU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGJRe2NvbnN0cnVjdG9yKGEpe3N1cGVyKGEpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoRTAsMTApKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiZm9ybUdyb3VwTmFtZSIsIiJdLFsiIiwiZm9ybUFycmF5TmFtZSIsIiJdLFsiIiwibmdNb2RlbEdyb3VwIiwiIl0sWyIiLCJmb3Jt'@;
put 'R3JvdXAiLCIiXSxbImZvcm0iLDMsIm5nTm9Gb3JtIiwiIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdFZhcnM6MTYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiZicigibmctdW50b3VjaGVkIixoLmlzVW50b3VjaGVkKSgibmctdG91Y2hlZCIsaC5pc1RvdWNoZWQpKCJuZy1wcmlz'@;
put 'dGluZSIsaC5pc1ByaXN0aW5lKSgibmctZGlydHkiLGguaXNEaXJ0eSkoIm5nLXZhbGlkIixoLmlzVmFsaWQpKCJuZy1pbnZhbGlkIixoLmlzSW52YWxpZCkoIm5nLXBlbmRpbmciLGguaXNQZW5kaW5nKSgibmctc3VibWl0dGVkIixoLmlzU3VibWl0dGVkKX0sZmVhdHVyZXM6W3NvXX0pfXJl'@;
put 'dHVybiBjfSkoKTtjb25zdCBvYj0iVkFMSUQiLEtrPSJJTlZBTElEIixwNz0iUEVORElORyIsc2I9IkRJU0FCTEVEIjtmdW5jdGlvbiBhSChjKXtyZXR1cm4oWGsoYyk/Yy52YWxpZGF0b3JzOmMpfHxudWxsfWZ1bmN0aW9uIGxIKGMsbCl7cmV0dXJuKFhrKGwpP2wuYXN5bmNWYWxpZGF0b3Jz'@;
put 'OmMpfHxudWxsfWZ1bmN0aW9uIFhrKGMpe3JldHVybiBudWxsIT1jJiYhQXJyYXkuaXNBcnJheShjKSYmIm9iamVjdCI9PXR5cGVvZiBjfWNsYXNzIGNIe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fcGVuZGluZ0RpcnR5PSExLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0'@;
put 'aGlzLl9wZW5kaW5nVG91Y2hlZD0hMSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9KCk9Pnt9LHRoaXMuX3BhcmVudD1udWxsLHRoaXMucHJpc3RpbmU9ITAsdGhpcy50b3VjaGVkPSExLHRoaXMuX29uRGlzYWJsZWRDaGFuZ2U9W10sdGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKSx0aGlzLl9h'@;
put 'c3NpZ25Bc3luY1ZhbGlkYXRvcnMoYSl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufXNldCB2YWxpZGF0b3IobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz10aGlzLl9jb21wb3NlZFZhbGlkYXRvckZuPWx9Z2V0IGFzeW5jVmFsaWRhdG9yKCl7cmV0dXJu'@;
put 'IHRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbn1zZXQgYXN5bmNWYWxpZGF0b3IobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkQXN5bmNWYWxpZGF0b3JGbj1sfWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcGFyZW50fWdldCB2YWxpZCgpe3JldHVybiB0'@;
put 'aGlzLnN0YXR1cz09PW9ifWdldCBpbnZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09S2t9Z2V0IHBlbmRpbmcoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PXA3fWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLnN0YXR1cz09PXNifWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzIT09'@;
put 'c2J9Z2V0IGRpcnR5KCl7cmV0dXJuIXRoaXMucHJpc3RpbmV9Z2V0IHVudG91Y2hlZCgpe3JldHVybiF0aGlzLnRvdWNoZWR9Z2V0IHVwZGF0ZU9uKCl7cmV0dXJuIHRoaXMuX3VwZGF0ZU9uP3RoaXMuX3VwZGF0ZU9uOnRoaXMucGFyZW50P3RoaXMucGFyZW50LnVwZGF0ZU9uOiJjaGFuZ2Ui'@;
put 'fXNldFZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduVmFsaWRhdG9ycyhsKX1zZXRBc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fYXNzaWduQXN5bmNWYWxpZGF0b3JzKGwpfWFkZFZhbGlkYXRvcnMobCl7dGhpcy5zZXRWYWxpZGF0b3JzKF9RKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFz'@;
put 'eW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhfUShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfXJlbW92ZVZhbGlkYXRvcnMobCl7dGhpcy5zZXRWYWxpZGF0b3JzKHZRKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfXJlbW92ZUFzeW5jVmFsaWRhdG9ycyhsKXt0'@;
put 'aGlzLnNldEFzeW5jVmFsaWRhdG9ycyh2UShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1cm4gJGsodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gJGsodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNs'@;
put 'ZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRhdG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtB'@;
put 'c1RvdWNoZWQobCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JFYWNoQ2hpbGQobD0+bC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNo'@;
put 'ZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1tYXJrQXNEaXJ0eShsPXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3Bh'@;
put 'cmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eShsKX1tYXJrQXNQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0'@;
put 'aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfW1hcmtBc1BlbmRpbmcobD17fSl7dGhpcy5zdGF0dXM9cDcsITEhPT1sLmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIWwu'@;
put 'b25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKGwpfWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRNYXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz1zYix0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5kaXNhYmxlKHsu'@;
put 'Li5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdlcy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQ'@;
put 'cmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMCkpfWVuYWJsZShsPXt9KXtjb25zdCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPW9iLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4u'@;
put 'Lmwsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1pdEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2go'@;
put 'ZD0+ZCghMSkpfV91cGRhdGVBbmNlc3RvcnMobCl7dGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3Vw'@;
put 'ZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KGwpe3RoaXMuX3BhcmVudD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0'@;
put 'aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PW9ifHx0aGlzLnN0YXR1cz09PXA3KSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3Io'@;
put 'bC5lbWl0RXZlbnQpKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlk'@;
put 'aXR5KGwpfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5p'@;
put 'dGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT9zYjpvYn1fcnVuVmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwpe2lmKHRoaXMuYXN5bmNWYWxpZGF0'@;
put 'b3Ipe3RoaXMuc3RhdHVzPXA3LHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtjb25zdCBhPWxRKHRoaXMuYXN5bmNWYWxpZGF0b3IodGhpcykpO3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT57dGhpcy5faGFzT3duUGVuZGluZ0Fz'@;
put 'eW5jVmFsaWRhdG9yPSExLHRoaXMuc2V0RXJyb3JzKGQse2VtaXRFdmVudDpsfSl9KX19X2NhbmNlbEV4aXN0aW5nU3Vic2NyaXB0aW9uKCl7dGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uJiYodGhpcy5fYXN5bmNWYWxpZGF0aW9uU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCks'@;
put 'dGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExKX1zZXRFcnJvcnMobCxhPXt9KXt0aGlzLmVycm9ycz1sLHRoaXMuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKCExIT09YS5lbWl0RXZlbnQpfWdldChsKXtsZXQgYT1sO3JldHVybiBudWxsPT1hfHwoQXJyYXkuaXNBcnJheShhKXx8'@;
put 'KGE9YS5zcGxpdCgiLiIpKSwwPT09YS5sZW5ndGgpP251bGw6YS5yZWR1Y2UoKGQsaCk9PmQmJmQuX2ZpbmQoaCksdGhpcyl9Z2V0RXJyb3IobCxhKXtjb25zdCBkPWE/dGhpcy5nZXQoYSk6dGhpcztyZXR1cm4gZCYmZC5lcnJvcnM/ZC5lcnJvcnNbbF06bnVsbH1oYXNFcnJvcihsLGEpe3Jl'@;
put 'dHVybiEhdGhpcy5nZXRFcnJvcihsLGEpfWdldCByb290KCl7bGV0IGw9dGhpcztmb3IoO2wuX3BhcmVudDspbD1sLl9wYXJlbnQ7cmV0dXJuIGx9X3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpe3RoaXMuc3RhdHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLGwmJnRoaXMuc3RhdHVzQ2hhbmdl'@;
put 'cy5lbWl0KHRoaXMuc3RhdHVzKSx0aGlzLl9wYXJlbnQmJnRoaXMuX3BhcmVudC5fdXBkYXRlQ29udHJvbHNFcnJvcnMobCl9X2luaXRPYnNlcnZhYmxlcygpe3RoaXMudmFsdWVDaGFuZ2VzPW5ldyBJcix0aGlzLnN0YXR1c0NoYW5nZXM9bmV3IElyfV9jYWxjdWxhdGVTdGF0dXMoKXtyZXR1'@;
put 'cm4gdGhpcy5fYWxsQ29udHJvbHNEaXNhYmxlZCgpP3NiOnRoaXMuZXJyb3JzP0trOnRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcnx8dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHA3KT9wNzp0aGlzLl9hbnlDb250cm9sc0hhdmVTdGF0dXMoS2spP0trOm9ifV9hbnlDb250'@;
put 'cm9sc0hhdmVTdGF0dXMobCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGE9PmEuc3RhdHVzPT09bCl9X2FueUNvbnRyb2xzRGlydHkoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC5kaXJ0eSl9X2FueUNvbnRyb2xzVG91Y2hlZCgpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhs'@;
put 'PT5sLnRvdWNoZWQpfV91cGRhdGVQcmlzdGluZShsPXt9KXt0aGlzLnByaXN0aW5lPSF0aGlzLl9hbnlDb250cm9sc0RpcnR5KCksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVQcmlzdGluZShsKX1fdXBkYXRlVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNo'@;
put 'ZWQ9dGhpcy5fYW55Q29udHJvbHNUb3VjaGVkKCksdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Ll91cGRhdGVUb3VjaGVkKGwpfV9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZShsKXt0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2U9bH1fc2V0VXBkYXRlU3RyYXRlZ3ko'@;
put 'bCl7WGsobCkmJm51bGwhPWwudXBkYXRlT24mJih0aGlzLl91cGRhdGVPbj1sLnVwZGF0ZU9uKX1fcGFyZW50TWFya2VkRGlydHkobCl7cmV0dXJuIWwmJiEoIXRoaXMuX3BhcmVudHx8IXRoaXMuX3BhcmVudC5kaXJ0eSkmJiF0aGlzLl9wYXJlbnQuX2FueUNvbnRyb2xzRGlydHkoKX1fZmlu'@;
put 'ZChsKXtyZXR1cm4gbnVsbH1fYXNzaWduVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRWYWxpZGF0b3JGbj1mdW5jdGlvbiAkX2UoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYyk/bkgoYyk6Y3x8bnVs'@;
put 'bH0odGhpcy5fcmF3VmFsaWRhdG9ycyl9X2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9QXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKCk6bCx0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm49ZnVuY3Rpb24gcV9lKGMpe3JldHVybiBBcnJheS5p'@;
put 'c0FycmF5KGMpP3JIKGMpOmN8fG51bGx9KHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9fWNsYXNzIEprIGV4dGVuZHMgY0h7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGFIKGEpLGxIKGQsYSkpLHRoaXMuY29udHJvbHM9bCx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLl9zZXRVcGRh'@;
put 'dGVTdHJhdGVneShhKSx0aGlzLl9zZXRVcENvbnRyb2xzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5jVmFsaWRhdG9yfSl9cmVnaXN0ZXJDb250cm9sKGwsYSl7cmV0dXJuIHRoaXMuY29udHJvbHNbbF0/dGhpcy5jb250'@;
put 'cm9sc1tsXToodGhpcy5jb250cm9sc1tsXT1hLGEuc2V0UGFyZW50KHRoaXMpLGEuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSksYSl9YWRkQ29udHJvbChsLGEsZD17fSl7dGhpcy5yZWdpc3RlckNvbnRyb2wobCxhKSx0aGlzLnVwZGF0ZVZh'@;
put 'bHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXJlbW92ZUNvbnRyb2wobCxhPXt9KXt0aGlzLmNvbnRyb2xzW2xdJiZ0aGlzLmNvbnRyb2xzW2xdLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5nZSgoKT0+e30pLGRlbGV0'@;
put 'ZSB0aGlzLmNvbnRyb2xzW2xdLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9c2V0Q29udHJvbChsLGEsZD17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJP'@;
put 'bkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSxhJiZ0aGlzLnJlZ2lzdGVyQ29udHJvbChsLGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OmQuZW1pdEV2ZW50fSksdGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlKCl9Y29udGFp'@;
put 'bnMobCl7cmV0dXJuIHRoaXMuY29udHJvbHMuaGFzT3duUHJvcGVydHkobCkmJnRoaXMuY29udHJvbHNbbF0uZW5hYmxlZH1zZXRWYWx1ZShsLGE9e30peyhmdW5jdGlvbiBDUShjLGwsYSl7Yy5fZm9yRWFjaENoaWxkKChkLGgpPT57aWYodm9pZCAwPT09YVtoXSl0aHJvdyBuZXcgem4oMTAw'@;
put 'MiwiIil9KX0pKHRoaXMsMCxsKSxPYmplY3Qua2V5cyhsKS5mb3JFYWNoKGQ9PnsoZnVuY3Rpb24gTVEoYyxsLGEpe2NvbnN0IGQ9Yy5jb250cm9scztpZighKGw/T2JqZWN0LmtleXMoZCk6ZCkubGVuZ3RoKXRocm93IG5ldyB6bigxZTMsIiIpO2lmKCFkW2FdKXRocm93IG5ldyB6bigxMDAx'@;
put 'LCIiKX0pKHRoaXMsITAsZCksdGhpcy5jb250cm9sc1tkXS5zZXRWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7bnVsbCE9bCYmKE9iamVjdC5rZXlzKGwpLmZv'@;
put 'ckVhY2goZD0+e2NvbnN0IGg9dGhpcy5jb250cm9sc1tkXTtoJiZoLnBhdGNoVmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGw9e30sYT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChk'@;
put 'LGgpPT57ZC5yZXNldChsP2xbaF06bnVsbCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0'@;
put 'aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0NvbnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51'@;
put 'cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hp'@;
put 'bGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2Jq'@;
put 'ZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1fcmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZh'@;
put 'bHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRy'@;
put 'b2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlzLmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgZWc9bmV3'@;
put 'IFlyKCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmFifSksYWI9ImFsd2F5cyI7ZnVuY3Rpb24gbGIoYyxsLGE9YWIpe3VIKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09'@;
put 'YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gSl9lKGMsbCl7bC52YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJj'@;
put 'aGFuZ2UiPT09Yy51cGRhdGVPbiYmU1EoYyxsKX0pfShjLGwpLGZ1bmN0aW9uIGV2ZShjLGwpe2NvbnN0IGE9KGQsaCk9PntsLnZhbHVlQWNjZXNzb3Iud3JpdGVWYWx1ZShkKSxoJiZsLnZpZXdUb01vZGVsVXBkYXRlKGQpfTtjLnJlZ2lzdGVyT25DaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRl'@;
put 'c3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25DaGFuZ2UoYSl9KX0oYyxsKSxmdW5jdGlvbiBRX2UoYyxsKXtsLnZhbHVlQWNjZXNzb3IucmVnaXN0ZXJPblRvdWNoZWQoKCk9PntjLl9wZW5kaW5nVG91Y2hlZD0hMCwiYmx1ciI9PT1jLnVwZGF0ZU9uJiZjLl9wZW5kaW5nQ2hhbmdlJiZTUShj'@;
put 'LGwpLCJzdWJtaXQiIT09Yy51cGRhdGVPbiYmYy5tYXJrQXNUb3VjaGVkKCl9KX0oYyxsKSxmdW5jdGlvbiBYX2UoYyxsKXtpZihsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZSl7Y29uc3QgYT1kPT57bC52YWx1ZUFjY2Vzc29yLnNldERpc2FibGVkU3RhdGUoZCl9O2MucmVnaXN0'@;
put 'ZXJPbkRpc2FibGVkQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSl9KX19KGMsbCl9ZnVuY3Rpb24gdEUoYyxsKXtjLmZvckVhY2goYT0+e2EucmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZSYmYS5yZWdpc3Rlck9uVmFs'@;
put 'aWRhdG9yQ2hhbmdlKGwpfSl9ZnVuY3Rpb24gdUgoYyxsKXtjb25zdCBhPWZ1bmN0aW9uIG1RKGMpe3JldHVybiBjLl9yYXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKHBRKGEsbC52YWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgYSYmYy5z'@;
put 'ZXRWYWxpZGF0b3JzKFthXSk7Y29uc3QgZD1mdW5jdGlvbiBnUShjKXtyZXR1cm4gYy5fcmF3QXN5bmNWYWxpZGF0b3JzfShjKTtudWxsIT09bC5hc3luY1ZhbGlkYXRvcj9jLnNldEFzeW5jVmFsaWRhdG9ycyhwUShkLGwuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYm'@;
put 'Yy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTt0RShsLl9yYXdWYWxpZGF0b3JzLGgpLHRFKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiBTUShjLGwpe2MuX3BlbmRpbmdEaXJ0eSYmYy5tYXJrQXNEaXJ0eSgp'@;
put 'LGMuc2V0VmFsdWUoYy5fcGVuZGluZ1ZhbHVlLHtlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSxsLnZpZXdUb01vZGVsVXBkYXRlKGMuX3BlbmRpbmdWYWx1ZSksYy5fcGVuZGluZ0NoYW5nZT0hMX1jb25zdCBvdmU9e3Byb3ZpZGU6RTAsdXNlRXhpc3Rpbmc6UHMoKCk9PnZmKX0sY2I9UHJv'@;
put 'bWlzZS5yZXNvbHZlKCk7bGV0IHZmPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBFMHtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoKSx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPWgsdGhpcy5zdWJtaXR0ZWQ9ITEsdGhpcy5fZGlyZWN0aXZlcz1uZXcgU2V0LHRoaXMubmdTdWJtaXQ9bmV3IEly'@;
put 'LHRoaXMuZm9ybT1uZXcgSmsoe30sbkgoYSksckgoZCkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpc31nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLmZvcm19Z2V0IHBhdGgoKXtyZXR1cm5bXX1nZXQg'@;
put 'Y29udHJvbHMoKXtyZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzfWFkZENvbnRyb2woYSl7Y2IudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2EuY29udHJvbD1kLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsYS5jb250cm9sKSxsYihhLmNvbnRyb2wsYSx0aGlz'@;
put 'LmNhbGxTZXREaXNhYmxlZFN0YXRlKSxhLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSksdGhpcy5fZGlyZWN0aXZlcy5hZGQoYSl9KX1nZXRDb250cm9sKGEpe3JldHVybiB0aGlzLmZvcm0uZ2V0KGEucGF0aCl9cmVtb3ZlQ29udHJvbChhKXtjYi50aGVu'@;
put 'KCgpPT57Y29uc3QgZD10aGlzLl9maW5kQ29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSksdGhpcy5fZGlyZWN0aXZlcy5kZWxldGUoYSl9KX1hZGRGb3JtR3JvdXAoYSl7Y2IudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpLGg9'@;
put 'bmV3IEprKHt9KTsoZnVuY3Rpb24geFEoYyxsKXt1SChjLGwpfSkoaCxhKSxkLnJlZ2lzdGVyQ29udHJvbChhLm5hbWUsaCksaC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KX0pfXJlbW92ZUZvcm1Hcm91cChhKXtjYi50aGVuKCgpPT57Y29uc3QgZD10aGlzLl9maW5k'@;
put 'Q29udGFpbmVyKGEucGF0aCk7ZCYmZC5yZW1vdmVDb250cm9sKGEubmFtZSl9KX1nZXRGb3JtR3JvdXAoYSl7cmV0dXJuIHRoaXMuZm9ybS5nZXQoYS5wYXRoKX11cGRhdGVNb2RlbChhLGQpe2NiLnRoZW4oKCk9Pnt0aGlzLmZvcm0uZ2V0KGEucGF0aCkuc2V0VmFsdWUoZCl9KX1zZXRWYWx1'@;
put 'ZShhKXt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSl9b25TdWJtaXQoYSl7cmV0dXJuIHRoaXMuc3VibWl0dGVkPSEwLGZ1bmN0aW9uIGtRKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1kLnVwZGF0ZU9uJiZk'@;
put 'Ll9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9Nb2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRpbmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksImRpYWxvZyI9PT1hPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0'@;
put 'KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oYT12b2lkIDApe3RoaXMuZm9ybS5yZXNldChhKSx0aGlzLnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhp'@;
put 'cy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxlbmd0aD90aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGp1LDEwKSxzdChONCwxMCksc3Qo'@;
put 'ZWcsOCkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiIsMywiZm9ybUdyb3VwIiwiIl0sWyJuZy1mb3JtIl0sWyIiLCJuZ0Zvcm0iLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgic3Vi'@;
put 'bWl0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vblN1Ym1pdCh2KX0pKCJyZXNldCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblJlc2V0KCl9KX0saW5wdXRzOntvcHRpb25zOltRbi5Ob25lLCJuZ0Zvcm1PcHRpb25zIiwib3B0aW9ucyJdfSxvdXRwdXRzOntuZ1N1Ym1pdDoibmdTdWJtaXQifSxl'@;
put 'eHBvcnRBczpbIm5nRm9ybSJdLGZlYXR1cmVzOltHaShbb3ZlXSksc29dfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEVRKGMsbCl7Y29uc3QgYT1jLmluZGV4T2YobCk7YT4tMSYmYy5zcGxpY2UoYSwxKX1mdW5jdGlvbiBUUShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1j'@;
put 'JiYyPT09T2JqZWN0LmtleXMoYykubGVuZ3RoJiYidmFsdWUiaW4gYyYmImRpc2FibGVkImluIGN9Y29uc3QgcEg9Y2xhc3MgZXh0ZW5kcyBjSHtjb25zdHJ1Y3RvcihsPW51bGwsYSxkKXtzdXBlcihhSChhKSxsSChkLGEpKSx0aGlzLmRlZmF1bHRWYWx1ZT1udWxsLHRoaXMuX29uQ2hhbmdl'@;
put 'PVtdLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITEsdGhpcy5fYXBwbHlGb3JtU3RhdGUobCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6ISF0aGlzLmFzeW5j'@;
put 'VmFsaWRhdG9yfSksWGsoYSkmJihhLm5vbk51bGxhYmxlfHxhLmluaXRpYWxWYWx1ZUlzRGVmYXVsdCkmJih0aGlzLmRlZmF1bHRWYWx1ZT1UUShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9vbkNoYW5nZS5sZW5n'@;
put 'dGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe3RoaXMuc2V0VmFs'@;
put 'dWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVsdFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwpLHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3Vw'@;
put 'ZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhsKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe0VRKHRoaXMuX29uQ2hhbmdl'@;
put 'LGwpfXJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXt0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLnB1c2gobCl9X3VucmVnaXN0ZXJPbkRpc2FibGVkQ2hhbmdlKGwpe0VRKHRoaXMuX29uRGlzYWJsZWRDaGFuZ2UsbCl9X2ZvckVhY2hDaGlsZChsKXt9X3N5bmNQZW5kaW5nQ29udHJvbHMoKXty'@;
put 'ZXR1cm4hKCJzdWJtaXQiIT09dGhpcy51cGRhdGVPbnx8KHRoaXMuX3BlbmRpbmdEaXJ0eSYmdGhpcy5tYXJrQXNEaXJ0eSgpLHRoaXMuX3BlbmRpbmdUb3VjaGVkJiZ0aGlzLm1hcmtBc1RvdWNoZWQoKSwhdGhpcy5fcGVuZGluZ0NoYW5nZSl8fCh0aGlzLnNldFZhbHVlKHRoaXMuX3BlbmRp'@;
put 'bmdWYWx1ZSx7b25seVNlbGY6ITAsZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksMCkpfV9hcHBseUZvcm1TdGF0ZShsKXtUUShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxsLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiEx'@;
put 'fSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMuX3BlbmRpbmdWYWx1ZT1sfX0sbHZlPXtwcm92aWRlOlQwLHVzZUV4aXN0aW5nOlBzKCgpPT5vYSl9LEFRPVByb21pc2UucmVzb2x2ZSgpO2xldCBvYT0oKCk9PntjbGFzcyBjIGV4dGVu'@;
put 'ZHMgVDB7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQpe3N1cGVyKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9dix0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlPVQsdGhpcy5jb250cm9sPW5ldyBwSCx0aGlzLl9yZWdpc3RlcmVkPSExLHRoaXMubmFtZT0iIix0aGlzLnVwZGF0ZT1uZXcgSXIs'@;
put 'dGhpcy5fcGFyZW50PWEsdGhpcy5fc2V0VmFsaWRhdG9ycyhkKSx0aGlzLl9zZXRBc3luY1ZhbGlkYXRvcnMoaCksdGhpcy52YWx1ZUFjY2Vzc29yPWZ1bmN0aW9uIGZIKGMsbCl7aWYoIWwpcmV0dXJuIG51bGw7bGV0IGEsZCxoO3JldHVybiBBcnJheS5pc0FycmF5KGwpLGwuZm9yRWFjaChm'@;
put 'PT57Zi5jb25zdHJ1Y3Rvcj09PVRsP2E9ZjpmdW5jdGlvbiBydmUoYyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLmNvbnN0cnVjdG9yKT09PUo1fShmKT9kPWY6aD1mfSksaHx8ZHx8YXx8bnVsbH0oMCxmKX1uZ09uQ2hhbmdlcyhhKXtpZih0aGlzLl9jaGVja0ZvckVycm9ycygp'@;
put 'LCF0aGlzLl9yZWdpc3RlcmVkfHwibmFtZSJpbiBhKXtpZih0aGlzLl9yZWdpc3RlcmVkJiYodGhpcy5fY2hlY2tOYW1lKCksdGhpcy5mb3JtRGlyZWN0aXZlKSl7Y29uc3QgZD1hLm5hbWUucHJldmlvdXNWYWx1ZTt0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh7bmFtZTpkLHBh'@;
put 'dGg6dGhpcy5fZ2V0UGF0aChkKX0pfXRoaXMuX3NldFVwQ29udHJvbCgpfSJpc0Rpc2FibGVkImluIGEmJnRoaXMuX3VwZGF0ZURpc2FibGVkKGEpLGZ1bmN0aW9uIGhIKGMsbCl7aWYoIWMuaGFzT3duUHJvcGVydHkoIm1vZGVsIikpcmV0dXJuITE7Y29uc3QgYT1jLm1vZGVsO3JldHVybiEh'@;
put 'YS5pc0ZpcnN0Q2hhbmdlKCl8fCFPYmplY3QuaXMobCxhLmN1cnJlbnRWYWx1ZSl9KGEsdGhpcy52aWV3TW9kZWwpJiYodGhpcy5fdXBkYXRlVmFsdWUodGhpcy5tb2RlbCksdGhpcy52aWV3TW9kZWw9dGhpcy5tb2RlbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmZvcm1EaXJlY3RpdmUmJnRoaXMu'@;
put 'Zm9ybURpcmVjdGl2ZS5yZW1vdmVDb250cm9sKHRoaXMpfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuX2dldFBhdGgodGhpcy5uYW1lKX1nZXQgZm9ybURpcmVjdGl2ZSgpe3JldHVybiB0aGlzLl9wYXJlbnQ/dGhpcy5fcGFyZW50LmZvcm1EaXJlY3RpdmU6bnVsbH12aWV3VG9Nb2RlbFVwZGF0'@;
put 'ZShhKXt0aGlzLnZpZXdNb2RlbD1hLHRoaXMudXBkYXRlLmVtaXQoYSl9X3NldFVwQ29udHJvbCgpe3RoaXMuX3NldFVwZGF0ZVN0cmF0ZWd5KCksdGhpcy5faXNTdGFuZGFsb25lKCk/dGhpcy5fc2V0VXBTdGFuZGFsb25lKCk6dGhpcy5mb3JtRGlyZWN0aXZlLmFkZENvbnRyb2wodGhpcyks'@;
put 'dGhpcy5fcmVnaXN0ZXJlZD0hMH1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuY29udHJvbC5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1faXNTdGFuZGFsb25lKCl7cmV0dXJuIXRoaXMuX3BhcmVu'@;
put 'dHx8ISghdGhpcy5vcHRpb25zfHwhdGhpcy5vcHRpb25zLnN0YW5kYWxvbmUpfV9zZXRVcFN0YW5kYWxvbmUoKXtsYih0aGlzLmNvbnRyb2wsdGhpcyx0aGlzLmNhbGxTZXREaXNhYmxlZFN0YXRlKSx0aGlzLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiExfSl9'@;
put 'X2NoZWNrRm9yRXJyb3JzKCl7dGhpcy5faXNTdGFuZGFsb25lKCl8fHRoaXMuX2NoZWNrUGFyZW50VHlwZSgpLHRoaXMuX2NoZWNrTmFtZSgpfV9jaGVja1BhcmVudFR5cGUoKXt9X2NoZWNrTmFtZSgpe3RoaXMub3B0aW9ucyYmdGhpcy5vcHRpb25zLm5hbWUmJih0aGlzLm5hbWU9dGhpcy5v'@;
put 'cHRpb25zLm5hbWUpLHRoaXMuX2lzU3RhbmRhbG9uZSgpfV91cGRhdGVWYWx1ZShhKXtBUS50aGVuKCgpPT57dGhpcy5jb250cm9sLnNldFZhbHVlKGEse2VtaXRWaWV3VG9Nb2RlbENoYW5nZTohMX0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPy5tYXJrRm9yQ2hlY2soKX0pfV91cGRhdGVE'@;
put 'aXNhYmxlZChhKXtjb25zdCBkPWEuaXNEaXNhYmxlZC5jdXJyZW50VmFsdWUsaD0wIT09ZCYmeDAoZCk7QVEudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5h'@;
put 'YmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgoYSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBRayhjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChFMCw5KSxzdChqdSwxMCksc3QoTjQsMTApLHN0KF9mLDEwKSxzdChGYSw4KSxzdChlZyw4KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nTW9kZWwiLCIiLDMsImZvcm1Db250cm9sTmFt'@;
put 'ZSIsIiIsMywiZm9ybUNvbnRyb2wiLCIiXV0saW5wdXRzOntuYW1lOiJuYW1lIixpc0Rpc2FibGVkOltRbi5Ob25lLCJkaXNhYmxlZCIsImlzRGlzYWJsZWQiXSxtb2RlbDpbUW4uTm9uZSwibmdNb2RlbCIsIm1vZGVsIl0sb3B0aW9uczpbUW4uTm9uZSwibmdNb2RlbE9wdGlvbnMiLCJvcHRp'@;
put 'b25zIl19LG91dHB1dHM6e3VwZGF0ZToibmdNb2RlbENoYW5nZSJ9LGV4cG9ydEFzOlsibmdNb2RlbCJdLGZlYXR1cmVzOltHaShbbHZlXSksc28sQmFdfSl9cmV0dXJuIGN9KSgpLHRnPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZm9ybSIsMywibmdOb0Zvcm0iLCIiLDMsIm5nTmF0aXZlVmFsaWRhdGUiLCIiXV0saG9zdEF0dHJzOlsibm92YWxpZGF0ZSIsIiJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGN2ZT17cHJvdmlk'@;
put 'ZTpfZix1c2VFeGlzdGluZzpQcygoKT0+ckUpLG11bHRpOiEwfTtsZXQgckU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEo1e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2EoIiI9PWQ/bnVs'@;
put 'bDpwYXJzZUZsb2F0KGQpKX19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1pYShjKSkpKGh8fGMpfX0pKCk7c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBl'@;
put 'IiwibnVtYmVyIiwiZm9ybUNvbnRyb2xOYW1lIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwibnVtYmVyIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJpbnB1dCIsZnVuY3Rp'@;
put 'b24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0sZmVhdHVyZXM6W0dpKFtjdmVdKSxzb119KX1yZXR1cm4gY30pKCk7Y29uc3QgdXZlPXtwcm92aWRlOl9mLHVzZUV4aXN0aW5nOlBzKCgpPT5p'@;
put 'RSksbXVsdGk6ITB9O2xldCBkdmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1bXX1hZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDstLWQpaWYodGhp'@;
put 'cy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2VsZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZkWzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZhbHVlKX0pfV9p'@;
put 'c1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5jb250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9wYXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3'@;
put 'NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxpRT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSjV7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkKSx0aGlzLl9yZWdpc3RyeT1oLHRoaXMuX2luamVjdG9yPWYs'@;
put 'dGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1WcihlZyx7b3B0aW9uYWw6ITB9KT8/YWJ9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChUMCksdGhpcy5fY2hlY2tOYW1l'@;
put 'KCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3RyeS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9'@;
put 'cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRoaXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMuX3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3aGVuRGlzYWJsZWRGb3JMZWdh'@;
put 'Y3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSksdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlzLmZv'@;
put 'cm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChjcyksc3QoJGkpLHN0KGR2ZSksc3QocGEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwiZm9ybUNvbnRyb2wiLCIiXSxbImlucHV0IiwidHlwZSIsInJhZGlvIiwibmdNb2RlbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxo'@;
put 'KXsxJmQmJkh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7bmFtZToibmFtZSIsZm9ybUNvbnRyb2xOYW1lOiJmb3JtQ29udHJvbE5hbWUiLHZhbHVlOiJ2YWx1ZSJ9LGZl'@;
put 'YXR1cmVzOltHaShbdXZlXSksc29dfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGdIPW5ldyBZcigiIiksdnZlPXtwcm92aWRlOl9mLHVzZUV4aXN0aW5nOlBzKCgpPT50ZCksbXVsdGk6ITB9O2Z1bmN0aW9uIFBRKGMsbCl7cmV0dXJuIG51bGw9PWM/YCR7bH1gOihsJiYib2JqZWN0Ij09dHlwZW9m'@;
put 'IGwmJihsPSJPYmplY3QiKSxgJHtjfTogJHtsfWAuc2xpY2UoMCw1MCkpfWxldCB0ZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSjV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVX'@;
put 'aXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoYSl7dGhpcy5fY29tcGFyZVdpdGg9YX13cml0ZVZhbHVlKGEpe3RoaXMudmFsdWU9YTtjb25zdCBoPVBRKHRoaXMuX2dldE9wdGlvbklkKGEpLGEpO3RoaXMuc2V0UHJvcGVydHkoInZhbHVlIixoKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3Ro'@;
put 'aXMub25DaGFuZ2U9ZD0+e3RoaXMudmFsdWU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUoZCksYSh0aGlzLnZhbHVlKX19X3JlZ2lzdGVyT3B0aW9uKCl7cmV0dXJuKHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpfV9nZXRPcHRpb25JZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLl9vcHRpb25N'@;
put 'YXAua2V5cygpKWlmKHRoaXMuX2NvbXBhcmVXaXRoKHRoaXMuX29wdGlvbk1hcC5nZXQoZCksYSkpcmV0dXJuIGQ7cmV0dXJuIG51bGx9X2dldE9wdGlvblZhbHVlKGEpe2NvbnN0IGQ9ZnVuY3Rpb24geXZlKGMpe3JldHVybiBjLnNwbGl0KCI6IilbMF19KGEpO3JldHVybiB0aGlzLl9vcHRp'@;
put 'b25NYXAuaGFzKGQpP3RoaXMuX29wdGlvbk1hcC5nZXQoZCk6YX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPWlhKGMpKSkoaHx8Yyl9fSkoKTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVj'@;
put 'dG9yczpbWyJzZWxlY3QiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJmb3JtQ29udHJvbCIsIiIsMywibXVsdGlwbGUiLCIiXSxbInNlbGVjdCIsIm5nTW9kZWwiLCIiLDMsIm11bHRpcGxlIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgp'@;
put 'ezEmZCYmSHQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQudmFsdWUpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgifSxmZWF0dXJlczpbR2koW3Z2ZV0pLHNv'@;
put 'XX0pfXJldHVybiBjfSkoKSxuZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24oKSl9c2V0IG5nVmFs'@;
put 'dWUoYSl7bnVsbCE9dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuc2V0KHRoaXMuaWQsYSksdGhpcy5fc2V0RWxlbWVudFZhbHVlKFBRKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlz'@;
put 'Ll9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9'@;
put 'bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhpcy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KShzdCgkaSksc3QoY3MpLHN0KHRkLDkpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1ZSIsdmFsdWU6InZhbHVlIn19KX1yZXR1cm4gY30pKCk7Y29uc3QgYnZlPXtwcm92aWRlOl9mLHVz'@;
put 'ZUV4aXN0aW5nOlBzKCgpPT51YiksbXVsdGk6ITB9O2Z1bmN0aW9uIEZRKGMsbCl7cmV0dXJuIG51bGw9PWM/YCR7bH1gOigic3RyaW5nIj09dHlwZW9mIGwmJihsPWAnJHtsfSdgKSxsJiYib2JqZWN0Ij09dHlwZW9mIGwmJihsPSJPYmplY3QiKSxgJHtjfTogJHtsfWAuc2xpY2UoMCw1MCkp'@;
put 'fWxldCB1Yj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSjV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX29wdGlvbk1hcD1uZXcgTWFwLHRoaXMuX2lkQ291bnRlcj0wLHRoaXMuX2NvbXBhcmVXaXRoPU9iamVjdC5pc31zZXQgY29tcGFyZVdpdGgoYSl7dGhpcy5fY29t'@;
put 'cGFyZVdpdGg9YX13cml0ZVZhbHVlKGEpe2xldCBkO2lmKHRoaXMudmFsdWU9YSxBcnJheS5pc0FycmF5KGEpKXtjb25zdCBoPWEubWFwKGY9PnRoaXMuX2dldE9wdGlvbklkKGYpKTtkPShmLHYpPT57Zi5fc2V0U2VsZWN0ZWQoaC5pbmRleE9mKHYudG9TdHJpbmcoKSk+LTEpfX1lbHNlIGQ9'@;
put 'KGgsZik9PntoLl9zZXRTZWxlY3RlZCghMSl9O3RoaXMuX29wdGlvbk1hcC5mb3JFYWNoKGQpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57Y29uc3QgaD1bXSxmPWQuc2VsZWN0ZWRPcHRpb25zO2lmKHZvaWQgMCE9PWYpe2NvbnN0IHY9Zjtmb3IobGV0IFQ9MDtUPHYu'@;
put 'bGVuZ3RoO1QrKyl7Y29uc3QgcmU9dGhpcy5fZ2V0T3B0aW9uVmFsdWUodltUXS52YWx1ZSk7aC5wdXNoKHJlKX19ZWxzZXtjb25zdCB2PWQub3B0aW9ucztmb3IobGV0IFQ9MDtUPHYubGVuZ3RoO1QrKyl7Y29uc3QgWT12W1RdO2lmKFkuc2VsZWN0ZWQpe2NvbnN0IHJlPXRoaXMuX2dldE9w'@;
put 'dGlvblZhbHVlKFkudmFsdWUpO2gucHVzaChyZSl9fX10aGlzLnZhbHVlPWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNv'@;
put 'bnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiB3dmUoYyl7cmV0dXJuIGMuc3BsaXQo'@;
put 'IjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPWlhKGMpKSkoaHx8Yyl9fSkoKTtzdGF0'@;
put 'aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsic2VsZWN0IiwibXVsdGlwbGUiLCIiLCJuZ01vZGVsIiwi'@;
put 'Il1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntjb21wYXJlV2l0aDoiY29tcGFyZVdpdGgi'@;
put 'fSxmZWF0dXJlczpbR2koW2J2ZV0pLHNvXX0pfXJldHVybiBjfSkoKSxyZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVn'@;
put 'aXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKEZRKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0'@;
put 'aGlzLl9zZWxlY3Q/KHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxlbWVudFZhbHVlKEZRKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpOnRoaXMuX3NldEVsZW1lbnRWYWx1ZShhKX1fc2V0RWxlbWVudFZhbHVlKGEpe3RoaXMuX3JlbmRl'@;
put 'cmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwidmFsdWUiLGEpfV9zZXRTZWxlY3RlZChhKXt0aGlzLl9yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsInNlbGVjdGVkIixhKX1uZ09uRGVzdHJveSgpe3RoaXMuX3NlbGVj'@;
put 'dCYmKHRoaXMuX3NlbGVjdC5fb3B0aW9uTWFwLmRlbGV0ZSh0aGlzLmlkKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KCRpKSxzdChjcyksc3QodWIsOSkp'@;
put 'fTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJvcHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfXJldHVybiBjfSkoKSxXUT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7fSl9cmV0dXJuIGN9KSgpLENjPSgoKT0+e2NsYXNzIGN7c3RhdGljIHdpdGhDb25maWcoYSl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlk'@;
put 'ZXJzOlt7cHJvdmlkZTplZyx1c2VWYWx1ZTphLmNhbGxTZXREaXNhYmxlZFN0YXRlPz9hYn1dfX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAy'@;
put 'NzVpbmo9X2koe2ltcG9ydHM6W1dRXX0pfXJldHVybiBjfSkoKSxMdmU9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOmdILHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5'@;
put 'cyJ9LHtwcm92aWRlOmVnLHVzZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2FifV19fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3'@;
put 'NWluaj1faSh7aW1wb3J0czpbV1FdfSl9cmV0dXJuIGN9KSgpO2NsYXNzIEl2ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZm49bCx0aGlzLnN1YnNjcmlwdGlvbnM9YX11bnN1YnNjcmliZSgpe2NvbnN0IGw9dGhpcy5zdWJzY3JpcHRpb25zLmluZGV4T2YodGhpcyk7LTEhPT1sJiZ0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMuc3BsaWNlKGwsMSl9fWZ1bmN0aW9uIFY0KGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJiEwPT09Y1siQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIl19ZnVuY3Rpb24gWjMoYyl7cmV0dXJuIGZ1bmN0aW9uIGwoYSl7cmV0dXJuIDA9PT1hcmd1bWVu'@;
put 'dHMubGVuZ3RofHxWNChhKT9sOmMuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBtNyhjKXtyZXR1cm4gZnVuY3Rpb24gbChhLGQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIGw7Y2FzZSAxOnJldHVybiBWNChhKT9sOlozKGZ1bmN0aW9uKGgpe3JldHVy'@;
put 'biBjKGEsaCl9KTtkZWZhdWx0OnJldHVybiBWNChhKSYmVjQoZCk/bDpWNChhKT9aMyhmdW5jdGlvbihoKXtyZXR1cm4gYyhoLGQpfSk6VjQoZCk/WjMoZnVuY3Rpb24oaCl7cmV0dXJuIGMoYSxoKX0pOmMoYSxkKX19fWNvbnN0IGFFPW03KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEgaW5zdGFu'@;
put 'Y2VvZiBsfHxudWxsIT1hJiYoYS5jb25zdHJ1Y3Rvcj09PWx8fCJPYmplY3QiPT09bC5uYW1lJiYib2JqZWN0Ij09dHlwZW9mIGEpfSk7ZnVuY3Rpb24gbEUoYyxsKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGwsYyl9dmFyIEdRPU9iamVjdC5wcm90b3R5'@;
put 'cGUudG9TdHJpbmc7Y29uc3QgJFE9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PUdRLmNhbGwoYXJndW1lbnRzKT9mdW5jdGlvbihsKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PUdRLmNhbGwobCl9OmZ1bmN0aW9uKGwpe3JldHVybiBsRSgiY2FsbGVlIixs'@;
put 'KX19KCksRnZlPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiZsLmxlbmd0aD49MCYmIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKX07ZnVuY3Rpb24gcVEoYyl7cmV0dXJuIltvYmplY3QgU3RyaW5nXSI9PT1PYmpl'@;
put 'Y3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9dmFyIFZ2ZT1aMyhmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2xbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9bCYmbnVsbCE9bC5jb25zdHJ1Y3Rv'@;
put 'ciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2wuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZW1wdHk/bC5lbXB0eSgpOm51bGwhPWwmJm51bGwhPWwuY29uc3Ry'@;
put 'dWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yLmVtcHR5P2wuY29uc3RydWN0b3IuZW1wdHkoKTpGdmUobCk/W106cVEobCk/IiI6ZnVuY3Rpb24gSHZlKGMpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpfShs'@;
put 'KT97fTokUShsKT9mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCk6ZnVuY3Rpb24gTnZlKGMpe3ZhciBsPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKTtyZXR1cm4iW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iPT09bHx8IltvYmplY3QgSW50OEFycmF5XSI9PT1sfHwi'@;
put 'W29iamVjdCBVaW50OEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MTZBcnJheV0iPT09bHx8IltvYmplY3QgSW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgVWludDMyQXJyYXldIj09PWx8fCJbb2JqZWN0IEZsb2F0MzJBcnJheV0iPT09bHx8'@;
put 'IltvYmplY3QgRmxvYXQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdJbnQ2NEFycmF5XSI9PT1sfHwiW29iamVjdCBCaWdVaW50NjRBcnJheV0iPT09bH0obCk/bC5jb25zdHJ1Y3Rvci5mcm9tKCIiKTp2b2lkIDB9KTtjb25zdCBqdmU9VnZlO2Z1bmN0aW9uIEtRKGMpe2Zvcih2YXIgYSxs'@;
put 'PVtdOyEoYT1jLm5leHQoKSkuZG9uZTspbC5wdXNoKGEudmFsdWUpO3JldHVybiBsfWZ1bmN0aW9uIFhRKGMsbCxhKXtmb3IodmFyIGQ9MCxoPWEubGVuZ3RoO2Q8aDspe2lmKGMobCxhW2RdKSlyZXR1cm4hMDtkKz0xfXJldHVybiExfWNvbnN0IHlIPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmpl'@;
put 'Y3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uIFl2ZShjLGwpe3JldHVybiBjPT09bD8wIT09Y3x8MS9jPT0xL2w6YyE9YyYmbCE9bH07dmFyIHp2ZT0he3RvU3RyaW5nOm51bGx9LnByb3BlcnR5SXNFbnVtZXJhYmxlKCJ0b1N0cmluZyIpLEpRPVsiY29uc3RydWN0b3IiLCJ2YWx1ZU9mIiwiaXNQ'@;
put 'cm90b3R5cGVPZiIsInRvU3RyaW5nIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNPd25Qcm9wZXJ0eSIsInRvTG9jYWxlU3RyaW5nIl0sUVE9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJsZW5ndGgiKX0oKSxVdmU9ZnVuY3Rpb24obCxhKXtm'@;
put 'b3IodmFyIGQ9MDtkPGwubGVuZ3RoOyl7aWYobFtkXT09PWEpcmV0dXJuITA7ZCs9MX1yZXR1cm4hMX07Y29uc3QgZWVlPVozKCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3Qua2V5c3x8UVE/ZnVuY3Rpb24obCl7aWYoT2JqZWN0KGwpIT09bClyZXR1cm5bXTt2YXIgYSxkLGg9W10sZj1RUSYm'@;
put 'JFEobCk7Zm9yKGEgaW4gbClsRShhLGwpJiYoIWZ8fCJsZW5ndGgiIT09YSkmJihoW2gubGVuZ3RoXT1hKTtpZih6dmUpZm9yKGQ9SlEubGVuZ3RoLTE7ZD49MDspbEUoYT1KUVtkXSxsKSYmIVV2ZShoLGEpJiYoaFtoLmxlbmd0aF09YSksZC09MTtyZXR1cm4gaH06ZnVuY3Rpb24obCl7cmV0'@;
put 'dXJuIE9iamVjdChsKSE9PWw/W106T2JqZWN0LmtleXMobCl9KSx0ZWU9WjMoZnVuY3Rpb24obCl7cmV0dXJuIG51bGw9PT1sPyJOdWxsIjp2b2lkIDA9PT1sPyJVbmRlZmluZWQiOk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsKS5zbGljZSg4LC0xKX0pO2Z1bmN0aW9uIG5lZShj'@;
put 'LGwsYSxkKXt2YXIgaD1LUShjKTtmdW5jdGlvbiB2KFQsWSl7cmV0dXJuIGJIKFQsWSxhLnNsaWNlKCksZC5zbGljZSgpKX1yZXR1cm4hWFEoZnVuY3Rpb24oVCxZKXtyZXR1cm4hWFEodixZLFQpfSxLUShsKSxoKX1mdW5jdGlvbiBiSChjLGwsYSxkKXtpZih5SChjLGwpKXJldHVybiEwO3Zh'@;
put 'ciBoPXRlZShjKTtpZihoIT09dGVlKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFu'@;
put 'ZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'bC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNhc2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10'@;
put 'eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gQnZlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2Fz'@;
put 'ZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCF5SChjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjppZigheUgoYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVybiExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVy'@;
put 'biBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5pZ25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGluZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9'@;
put 'PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0xfXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09PWwuc2l6ZSYmbmVlKGMuZW50cmllcygpLGwu'@;
put 'ZW50cmllcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJTZXQiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJm5lZShjLnZhbHVlcygpLGwudmFsdWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIkFyZ3VtZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmpl'@;
put 'Y3QiOmNhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjpjYXNlIkRhdGUiOmNhc2UiRXJyb3IiOmNhc2UiUmVnRXhwIjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5IjpjYXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2'@;
put 'QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkFycmF5QnVmZmVyIjpicmVhaztkZWZhdWx0OnJldHVybiExfXZhciB2PWVlZShjKTtpZih2Lmxlbmd0aCE9PWVlZShsKS5sZW5ndGgpcmV0'@;
put 'dXJuITE7dmFyIFQ9YS5jb25jYXQoW2NdKSxZPWQuY29uY2F0KFtsXSk7Zm9yKGY9di5sZW5ndGgtMTtmPj0wOyl7dmFyIHJlPXZbZl07aWYoIWxFKHJlLGwpfHwhYkgobFtyZV0sY1tyZV0sVCxZKSlyZXR1cm4hMTtmLT0xfXJldHVybiEwfWNvbnN0ICR2ZT1tNyhmdW5jdGlvbihsLGEpe3Jl'@;
put 'dHVybiBiSChsLGEsW10sW10pfSkscmVlPVozKGZ1bmN0aW9uKGwpe3JldHVybiBudWxsIT1sJiYkdmUobCxqdmUobCkpfSk7ZnVuY3Rpb24gZGIoYyl7cmV0dXJuIG51bGw9PWN9ZnVuY3Rpb24gajQoYyl7cmV0dXJuIGRiKGMpfHxyZWUoYyl9ZnVuY3Rpb24gd0goYyl7cmV0dXJuIGFFKFN0'@;
put 'cmluZyxjKX1mdW5jdGlvbiBjRShjKXtyZXR1cm4gYUUoT2JqZWN0LGMpfWZ1bmN0aW9uIG9lZShjKXtyZXR1cm4gYUUoTWFwLGMpfWZ1bmN0aW9uIHNlZShjLGwpe3JldHVybiBjIT09bH1mdW5jdGlvbiBhZWUoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lm'@;
put 'eShsKX1mdW5jdGlvbiBsZWUoYyl7Y29uc3QgbD1uZXcgTWFwO2Zvcihjb25zdFthLGRdb2YgYylvZWUoZCk/bC5zZXQoYSxsZWUoZCkpOmwuc2V0KGEsZCk7cmV0dXJuIGx9ZnVuY3Rpb24gZXllKGMpe3N3aXRjaCghMCl7Y2FzZSBvZWUoYyk6cmV0dXJuIGxlZShjKTtjYXNlIGNFKGMpJiYh'@;
put 'QXJyYXkuaXNBcnJheShjKTpyZXR1cm4gcmcoe30sYyk7ZGVmYXVsdDpyZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjKSl9fWZ1bmN0aW9uIHJnKC4uLmMpe2NvbnN0IGw9e307cmV0dXJuIGMubWFwKGE9PmNFKGEpP3suLi5hfTp7fSkuZm9yRWFjaChhPT57T2JqZWN0LmtleXMo'@;
put 'YSkuZm9yRWFjaChkPT57Y29uc3QgaD1hW2RdO2xbZF09QXJyYXkuaXNBcnJheShoKT9BcnJheS5mcm9tKGgpOmNFKGgpP3JnKGxbZF18fHt9LGgpOmh9KX0pLGx9ZnVuY3Rpb24gdWVlKGM9d2luZG93KXtyZXR1cm4hZGIoYyl9bGV0IHVFLGRlZSxNSCxDSDtmdW5jdGlvbiBoZWUoYz0hMCl7'@;
put 'aWYoIWN8fCF1RSl7Y29uc3QgbD1kb2N1bWVudCYmZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiW25nLXZlcnNpb25dIik7dUU9bD8iIitsLmdldEF0dHJpYnV0ZSgibmctdmVyc2lvbiIpOnZvaWQgMH1yZXR1cm4gdUV9ZnVuY3Rpb24gc3llKGM9ITApe3JldHVybiBjJiZ1RXx8KGRlZT13aW5k'@;
put 'b3c/LmFuZ3VsYXI/LnZlcnNpb24/LmZ1bGwpLGRlZX1mdW5jdGlvbiBmZWUoYz0hMCl7cmV0dXJuIGMmJk1IfHwoTUg9d2luZG93Py5DRFM/Ll9yZWFjdD8udmVyc2lvbj93aW5kb3cuQ0RTLl9yZWFjdC52ZXJzaW9uOmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltkYXRhLXJlYWN0cm9vdF0s'@;
put 'IFtkYXRhLXJlYWN0aWRdIik/InVua25vd24gdmVyc2lvbiI6dm9pZCAwKSxNSH1mdW5jdGlvbiBwZWUoYz0hMCl7aWYoIWN8fCFDSCl7Y29uc3QgbD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIqIik7bGV0IGE7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspaWYobFtkXS5fX3Z1ZV9f'@;
put 'KXthPWxbZF07YnJlYWt9Q0g9YT8idW5rbm93biB2ZXJzaW9uIjp2b2lkIDB9cmV0dXJuIENIfWZ1bmN0aW9uIGlnKGMpe3JldHVybiBjLnJlcGxhY2UoL1tBLVpdL2csbD0+Ii0iK2wudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gX2VlKGMpe3JldHVybiBjLmNoYXJBdCgwKS50b1VwcGVyQ2Fz'@;
put 'ZSgpK2Muc2xpY2UoMSl9Y29uc3QgZnllPW5ldyBjbGFzc3tjb25zdHJ1Y3Rvcigpe2lmKHRoaXMuc3VwcG9ydHM9e2pzOiEwfSwhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoImNkcy1zdXBwb3J0cyIpfHwibm8tanMiPT09ZG9jdW1lbnQuYm9keS5nZXRBdHRyaWJ1dGUoImNkcy1zdXBw'@;
put 'b3J0cyIpKXtjb25zdCBjPWlnKE9iamVjdC5rZXlzKHRoaXMuc3VwcG9ydHMpLnJlZHVjZSgobCxhKT0+YCR7bH0gJHt0aGlzLnN1cHBvcnRzW2FdP2E6Im5vLSIrYX1gLCIiKSkudHJpbSgpO2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiLGMpfX19O2Z1bmN0aW9u'@;
put 'IGJlZShjLGwpe3N3aXRjaChjKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihhLGQpe3Jl'@;
put 'dHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSAzOnJldHVybiBmdW5jdGlvbihhLGQsaCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA1OnJl'@;
put 'dHVybiBmdW5jdGlvbihhLGQsaCxmLHYpe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA2OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsVCl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDc6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixULFkpe3Jl'@;
put 'dHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07Y2FzZSA4OnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsVCxZLHJlKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgOTpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LFQsWSxyZSxmZSl7cmV0dXJuIGwuYXBwbHkodGhp'@;
put 'cyxhcmd1bWVudHMpfTtjYXNlIDEwOnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBfYXJpdHkgbXVzdCBiZSBhIG5vbi1uZWdhdGl2'@;
put 'ZSBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiB0ZW4iKX19ZnVuY3Rpb24gd2VlKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGQ9W10saD0wLGY9Yyx2PTAsVD0hMTt2PGwubGVuZ3RofHxoPGFyZ3VtZW50cy5sZW5ndGg7KXt2YXIgWTt2PGwubGVuZ3RoJiYoIVY0KGxbdl0pfHxo'@;
put 'Pj1hcmd1bWVudHMubGVuZ3RoKT9ZPWxbdl06KFk9YXJndW1lbnRzW2hdLGgrPTEpLGRbdl09WSxWNChZKT9UPSEwOmYtPTEsdis9MX1yZXR1cm4hVCYmZjw9MD9hLmFwcGx5KHRoaXMsZCk6YmVlKE1hdGgubWF4KDAsZiksd2VlKGMsZCxhKSl9fWNvbnN0IE1lZT1tNyhmdW5jdGlvbihsLGEp'@;
put 'e3JldHVybiAxPT09bD9aMyhhKTpiZWUobCx3ZWUobCxbXSxhKSl9KSxteWU9TnVtYmVyLmlzSW50ZWdlcnx8ZnVuY3Rpb24obCl7cmV0dXJuKDB8bCk9PT1sfSxfeWU9bTcoZnVuY3Rpb24obCxhKXt2YXIgZD1sPDA/YS5sZW5ndGgrbDpsO3JldHVybiBxUShhKT9hLmNoYXJBdChkKTphW2Rd'@;
put 'fSkseXllPW03KGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGwubWFwKGZ1bmN0aW9uKGQpe2Zvcih2YXIgdixoPWEsZj0wO2Y8ZC5sZW5ndGg7KXtpZihudWxsPT1oKXJldHVybjtoPW15ZSh2PWRbZl0pP195ZSh2LGgpOmhbdl0sZis9MX1yZXR1cm4gaH0pfSksd3llPW03KGZ1bmN0aW9uKGwsYSl7'@;
put 'cmV0dXJuIHl5ZShbbF0sYSlbMF19KSxDeWU9TWVlKDIsKGMsbCk9PnZvaWQgMCE9PXd5ZShjLGwpKSxDZWU9Q3llKHsiQEBmdW5jdGlvbmFsL3BsYWNlaG9sZGVyIjohMH0sd2luZG93KTtjbGFzcyBvZ3tzdGF0aWMgbG9nKC4uLmwpe2tIKCkmJnhIKCkmJmNvbnNvbGUubG9nKC4uLmwpfXN0'@;
put 'YXRpYyB3YXJuKC4uLmwpe2tIKCkmJnhIKCkmJmNvbnNvbGUud2FybiguLi5sKX1zdGF0aWMgZXJyb3IoLi4ubCl7a0goKSYmeEgoKSYmY29uc29sZS5lcnJvciguLi5sKX19ZnVuY3Rpb24geEgoKXtyZXR1cm4hQ2VlKFsiamFzbWluZSJdKX1mdW5jdGlvbiBrSCgpe3JldHVybiF3aW5kb3cu'@;
put 'Q0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gU2VlKCl7dWVlKCkmJih3aW5kb3cuQ0RTPXdpbmRvdy5DRFN8fHtfdmVyc2lvbjpbXSxfcmVhY3Q6e3ZlcnNpb246dm9pZCAwfSxfc3VwcG9ydHM6ZnllLnN1cHBvcnRzLF9pc1N0YXRlUHJveGllZDohMSxfc3RhdGU6e2ZvY3Vz'@;
put 'VHJhcEl0ZW1zOltdLGxheWVyRWxlbWVudHM6W10saTE4blJlZ2lzdHJ5Ont9LGVsZW1lbnRSZWdpc3RyeTp7fSxpY29uUmVnaXN0cnk6e30sbW90aW9uUmVnaXN0cnk6e319LGVudmlyb25tZW50Ontwcm9kdWN0aW9uOiExfSxnZXREZXRhaWxzOnhlZSxsb2dEZXRhaWxzOnh5ZX0sZnVuY3Rp'@;
put 'b24oKXtjb25zdCBjPSI2LjEwLjAiO3dpbmRvdy5DRFMuX3ZlcnNpb24uaW5kZXhPZihjKTwwJiYod2luZG93LkNEUy5fdmVyc2lvbi5wdXNoKGMpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uc2V0QXR0cmlidXRlKCJjZHMtdmVyc2lvbiIsd2luZG93LkNEUy5fdmVyc2lvbi5q'@;
put 'b2luKCIgIikpKSx3aW5kb3cuQ0RTLl92ZXJzaW9uLmxlbmd0aD4xJiZvZy53YXJuKCJSdW5uaW5nIG1vcmUgdGhhbiBvbmUgdmVyc2lvbiBvZiBDbGFyaXR5IGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4gUGxlYXNlIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGxvYWRlZC4iKX0o'@;
put 'KSx3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZHx8KHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkPSEwLHdpbmRvdy5DRFMuX3N0YXRlPW5ldyBQcm94eSh3aW5kb3cuQ0RTLl9zdGF0ZSx7c2V0OihjLGwsYSk9Pntjb25zdCBkPXtrZXk6bCxwcmV2OndpbmRvdy5DRFMuX3N0YXRlW2xdLGN1'@;
put 'cnJlbnQ6YX07cmV0dXJuIGNbbF09YSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiQ0RTX1NUQVRFX1VQREFURSIse2RldGFpbDpkfSkpLCEwfX0pKSl9ZnVuY3Rpb24geGVlKCl7cmV0dXJue3ZlcnNpb25zOndpbmRvdy5DRFMuX3ZlcnNpb24sZW52aXJvbm1lbnQ6'@;
put 'd2luZG93LkNEUy5lbnZpcm9ubWVudCx1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxzdXBwb3J0czp3aW5kb3cuQ0RTLl9zdXBwb3J0cyxhbmd1bGFyVmVyc2lvbjpoZWUoITEpLGFuZ3VsYXJKU1ZlcnNpb246c3llKCExKSxyZWFjdFZlcnNpb246ZmVlKCExKSx2dWVWZXJzaW9uOnBl'@;
put 'ZSghMSksc3RhdGU6ey4uLndpbmRvdy5DRFMuX3N0YXRlLGljb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5pY29uUmVnaXN0cnkpLG1vdGlvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLm1vdGlvblJlZ2lzdHJ5KSxmb2N1c1RyYXBSZWdp'@;
put 'c3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5mb2N1c1RyYXBJdGVtcy5tYXAoYz0+Yy5mb2N1c1RyYXBJZCkpfX19ZnVuY3Rpb24geHllKCl7b2cubG9nKEpTT04uc3RyaW5naWZ5KHhlZSgpLG51bGwsMikpfWNvbnN0IEVIPW5ldyBjbGFzcyBSdmV7Y29uc3RydWN0b3IoKXt0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IEl2ZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1pdChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2Jz'@;
put 'ZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07RUgubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+RUguZW1pdChjLmRldGFpbCkpO2NsYXNzIHV1e3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gU2VlKCksd2luZG93LkNEUy5fc3RhdGV9c3Rh'@;
put 'dGljIGdldFZhbHVlKGwpe3JldHVybiB1dS5zdGF0ZVtsXX1zdGF0aWMgc2V0VmFsdWUobCxhKXt1dS5zdGF0ZVtsXT1hfXN0YXRpYyBsb2coKXtvZy5sb2coSlNPTi5zdHJpbmdpZnkodXUuc3RhdGUsbnVsbCwyKSl9fXV1LnN0YXRlVXBkYXRlcz1FSC50b0V2ZW50T2JzZXJ2YWJsZSgpO2Nv'@;
put 'bnN0IGt5ZT1bInVua25vd24iLHtvdXRsaW5lOic8Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTMiIGN4PSIzMS4xIiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9ImNkcy1pbnRlcm5hbC1kb3QtMiIgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY2xhc3M9'@;
put 'ImNkcy1pbnRlcm5hbC1kb3QtMSIgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiLz4nfV07Y2xhc3MgcXN7c3RhdGljIGdldCByZWdpc3RyeSgpe3JldHVybnt1bmtub3duOmt5ZVsxXSwuLi51dS5zdGF0ZS5pY29uUmVnaXN0cnl9fXN0YXRpYyBhZGRJY29ucyguLi5sKXt1dS5zdGF0ZS5pY29u'@;
put 'UmVnaXN0cnk9ey4uLnV1LnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMobC5maWx0ZXIoKFthXSk9PiFxcy5yZWdpc3RyeVthXSkpfX1zdGF0aWMgYWRkQWxpYXNlcyguLi5sKXtjb25zdCBhPWwuZmlsdGVyKChbZF0pPT5xcy5yZWdpc3RyeVtkXSkuZmxhdE1hcCgo'@;
put 'W2QsaF0pPT5oLm1hcChmPT5bZixxcy5yZWdpc3RyeVtkXV0pKTt1dS5zdGF0ZS5pY29uUmVnaXN0cnk9ey4uLnV1LnN0YXRlLmljb25SZWdpc3RyeSwuLi5PYmplY3QuZnJvbUVudHJpZXMoYSl9fXN0YXRpYyBnZXRJY29uTmFtZUZyb21TaGFwZShsKXtyZXR1cm4gbFswXX19Y29uc3QgZzc9'@;
put 'WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSxXZD1bImV4Y2xhbWF0aW9uLWNpcmNsZSIse291dGxp'@;
put 'bmU6JzxwYXRoIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+PHBhdGggZD0iTTE4LDIwLjA3YTEuMywxLjMsMCwwLDEtMS4zLTEuM3YtNmExLjMsMS4zLDAsMSwxLDIuNiwwdjZB'@;
put 'MS4zLDEuMywwLDAsMSwxOCwyMC4wN1oiLz48Y2lyY2xlIGN4PSIxNy45NSIgY3k9IjIzLjAyIiByPSIxLjUiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMS40OSw2YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu'@;
put 'NDksMCwxLDEtMywwWk0xOCwyNS41YTEuNzIsMS43MiwwLDEsMSwxLjcyLTEuNzJBMS43MiwxLjcyLDAsMCwxLDE4LDI1LjVaIi8+J31dLEdkPVsiY2hlY2stY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkEx'@;
put 'MCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz48cGF0aCBkPSJNMTYuMzQsMjMuNzRsLTUtNWExLDEsMCwwLDEsMS40MS0xLjQxbDMuNTksMy41OSw2Ljc4LTYuNzhhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAsMThBMTIsMTIsMCwxLDEs'@;
put 'MTgsNiwxMiwxMiwwLDAsMSwzMCwxOFptLTQuNzctMi4xNmExLjQsMS40LDAsMCwwLTItMmwtNi43Nyw2Ljc3TDEzLDE3LjE2YTEuNCwxLjQsMCwwLDAtMiwybDUuNDUsNS40NVoiLz4nfV0sa2VlPVsiZWxsaXBzaXMtaG9yaXpvbnRhbCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjMxLjEiIGN5'@;
put 'PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMi45Ii8+PGNpcmNsZSBjeD0iNC45IiBjeT0iMTgiIHI9IjIuOSIvPicsb3V0bGluZUJhZGdlZDonPGNpcmNsZSBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjki'@;
put 'Lz48Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45Ii8+J31dLGhiPVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBhdGggZD0iTTE5LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwx'@;
put 'OCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+J31dLEV5ZT1bImV2ZW50Iix7b3V0bGluZTonPHBhdGggZD0iTTE2LjE3LDI1Ljg2LDEwLjgxLDIwLjVhMSwxLDAsMCwxLDEuNDEtMS40MUwxNi4xNywyM2w4'@;
put 'LjY0LTguNjRhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz48cGF0aCBkPSJNMzIuMjUsNkgyOVY4aDNWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWNy44MUExLjc4'@;
put 'LDEuNzgsMCwwLDAsMzIuMjUsNloiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTI2LDEwYTEsMSwwLDAsMCwxLTFWM2ExLDEsMCwwLDAtMiwwVjlBMSwxLDAsMCwwLDI2LDEwWiIvPjxyZWN0IHg9'@;
put 'IjEzIiB5PSI2IiB3aWR0aD0iMTAiIGhlaWdodD0iMiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMTAuODEsMjAuNWw1LjM2LDUuMzZMMjYuMjIsMTUuODFhMSwx'@;
put 'LDAsMCwwLC4yMy0uNDFIMjMuOEwxNi4xNywyM2wtMy45NC0zLjk0YTEsMSwwLDAsMC0xLjQxLDEuNDFaIi8+PHBvbHlnb24gcG9pbnRzPSIyMS4yOSA2IDEzIDYgMTMgOCAyMC4xNCA4IDIxLjI5IDYiLz48cGF0aCBkPSJNMzMuNjgsMTUuNEgzMlYzMEg0VjhIN1Y2SDMuNzVBMS43OCwxLjc4'@;
put 'LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxNS4zOFoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0xMC44MSwyMC41bDUuMzYsNS4zNkwyNi4yMiwxNS44MWExLDEsMCwwLDAtMS40MS0xLjQxTDE2'@;
put 'LjE3LDIzbC0zLjk0LTMuOTRhMSwxLDAsMCwwLTEuNDEsMS40MVoiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+PHBhdGggZD0iTTMyLDEzLjIyVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3Ljgx'@;
put 'VjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjEyLjM0QTcuNDUsNy40NSwwLDAsMSwzMiwxMy4yMloiLz48cGF0aCBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDksMCwwLDEsMjIuNSw2WiIvPicsc29saWQ6JzxwYXRoIGQ9'@;
put 'Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+PHBhdGggZD0iTTMyLjI1LDZoLTRWOWEyLjIsMi4yLDAsMCwxLTQu'@;
put 'NCwwVjZIMTIuMlY5QTIuMiwyLjIsMCwwLDEsNy44LDlWNmgtNEExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1LDZaTTI1Ljk0LDE2LjU4bC05'@;
put 'LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+Jyxzb2xpZEFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwx'@;
put 'MCwxMFoiLz48cGF0aCBkPSJNMzMuNjgsMTUuNEgyNi4zYTEuMzQsMS4zNCwwLDAsMS0uMzYsMS4xOGwtOS42Nyw5LjY3TDExLDIwLjk0QTEuMzYsMS4zNiwwLDAsMSwxMi45LDE5bDMuMzgsMy4zOCw3LTdoLTFBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIu'@;
put 'MiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCww'@;
put 'LDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43'@;
put 'OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcuNDUsMCwwLDEsMzAsMTMuNVptLTQuMDYsMy4wOC05LjY3LDkuNjdMMTEsMjAuOTRBMS4zNiwxLjM2LDAsMCwxLDEyLjksMTlsMy4zOCwzLjM4TDI0LDE0LjY2YTEuMzYsMS4zNiwwLDEsMSwxLjkzLDEuOTNaIi8+J31dLFR5ZT1bImNhbGVu'@;
put 'ZGFyIix7b3V0bGluZTonPHBhdGggZD0iTTMyLjI1LDZIMjlWOGgzVjMwSDRWOEg3VjZIMy43NUExLjc4LDEuNzgsMCwwLDAsMiw3LjgxVjMwLjE5QTEuNzgsMS43OCwwLDAsMCwzLjc1LDMyaDI4LjVBMS43OCwxLjc4LDAsMCwwLDM0LDMwLjE5VjcuODFBMS43OCwxLjc4LDAsMCwwLDMyLjI1'@;
put 'LDZaIi8+PHJlY3QgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTQiIHdpZHRoPSIyIiBoZWln'@;
put 'aHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QiIHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIi'@;
put 'IGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjYsMTBhMSwxLDAsMCwwLDEtMVYzYTEsMSwwLDAsMC0yLDBWOUExLDEsMCwwLDAsMjYsMTBaIi8+PHJlY3QgeD0iMTMiIHk9IjYi'@;
put 'IHdpZHRoPSIxMCIgaGVpZ2h0PSIyIi8+JyxvdXRsaW5lQWxlcnRlZDonPHBhdGggZD0iTTMzLjY4LDE1LjRIMzJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlW'@;
put 'MTUuMzhaIi8+PHJlY3QgeD0iOCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTQiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIxOSIgd2lkdGg9IjIiIGhl'@;
put 'aWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIxOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjgiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjI0IiB3aWR0aD0iMiIg'@;
put 'aGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjI0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxw'@;
put 'b2x5Z29uIHBvaW50cz0iMjEuMjkgNiAxMyA2IDEzIDggMjAuMTQgOCAyMS4yOSA2Ii8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNMzIsMTMuMjJWMzBINFY4SDdWNkgzLjc1QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCwwLDMuNzUsMzJoMjguNUExLjc4'@;
put 'LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTIuMzRBNy40NSw3LjQ1LDAsMCwxLDMyLDEzLjIyWiIvPjxyZWN0IHg9IjgiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMTQiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjAiIHk9IjE0IiB3aWR0aD0i'@;
put 'MiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iMjYiIHk9IjE0IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+PHJlY3QgeD0iOCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIxNCIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyMCIgeT0iMTkiIHdpZHRo'@;
put 'PSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSIyNiIgeT0iMTkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz48cmVjdCB4PSI4IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjIwIiB5PSIyNCIgd2lk'@;
put 'dGg9IjIiIGhlaWdodD0iMiIvPjxyZWN0IHg9IjI2IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPjxwYXRoIGQ9Ik0xMCwxMGExLDEsMCwwLDAsMS0xVjNBMSwxLDAsMCwwLDksM1Y5QTEsMSwwLDAsMCwxMCwxMFoiLz48cGF0aCBkPSJNMjIuNSw2SDEzVjhoOS43OEE3LjQ5LDcuNDks'@;
put 'MCwwLDEsMjIuNSw2WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMi4yNSw2aC00VjlhMi4yLDIuMiwwLDEsMS00LjQsMFY2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgs'@;
put 'MS43OCwwLDAsMCwzNCwzMC4xOVY3LjgxQTEuNzgsMS43OCwwLDAsMCwzMi4yNSw2Wk0xMCwyNkg4VjI0aDJabTAtNUg4VjE5aDJabTAtNUg4VjE0aDJabTYsMTBIMTRWMjRoMlptMC01SDE0VjE5aDJabTAtNUgxNFYxNGgyWm02LDEwSDIwVjI0aDJabTAtNUgyMFYxOWgyWm0wLTVIMjBWMTRo'@;
put 'MlptNiwxMEgyNlYyNGgyWm0wLTVIMjZWMTloMlptMC01SDI2VjE0aDJaIi8+PHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxwYXRoIGQ9Ik0yNiwxMGExLDEsMCwwLDAsMS0xVjNhMSwxLDAsMCwwLTIsMFY5QTEsMSww'@;
put 'LDAsMCwyNiwxMFoiLz4nLHNvbGlkQWxlcnRlZDonPHBhdGggZD0iTTMzLjY4LDE1LjRIMjIuMjNBMy42OCwzLjY4LDAsMCwxLDE5LDkuODlMMjEuMjksNkgxMi4yVjlBMi4yLDIuMiwwLDAsMSw3LjgsOVY2aC00QTEuNzgsMS43OCwwLDAsMCwyLDcuODFWMzAuMTlBMS43OCwxLjc4LDAsMCww'@;
put 'LDMuNzUsMzJoMjguNUExLjc4LDEuNzgsMCwwLDAsMzQsMzAuMTlWMTUuMzhaTTEwLDI2SDhWMjRoMlptMC01SDhWMTloMlptMC01SDhWMTRoMlptNiwxMEgxNFYyNGgyWm0wLTVIMTRWMTloMlptMC01SDE0VjE0aDJabTYsMTBIMjBWMjRoMlptMC01SDIwVjE5aDJabTYsNUgyNlYyNGgyWm0w'@;
put 'LTVIMjZWMTloMloiLz48cGF0aCBkPSJNMTAsMTBhMSwxLDAsMCwwLDEtMVYzQTEsMSwwLDAsMCw5LDNWOUExLDEsMCwwLDAsMTAsMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwLDEwYTEsMSwwLDAsMCwxLTFWM0ExLDEsMCwwLDAsOSwzVjlBMSwxLDAsMCwwLDEwLDEwWiIvPjxw'@;
put 'YXRoIGQ9Ik0zMCwxMy41QTcuNSw3LjUsMCwwLDEsMjIuNSw2SDEyLjJWOUEyLjIsMi4yLDAsMCwxLDcuOCw5VjZoLTRBMS43OCwxLjc4LDAsMCwwLDIsNy44MVYzMC4xOUExLjc4LDEuNzgsMCwwLDAsMy43NSwzMmgyOC41QTEuNzgsMS43OCwwLDAsMCwzNCwzMC4xOVYxMi4zNEE3LjQ1LDcu'@;
put 'NDUsMCwwLDEsMzAsMTMuNVpNMTAsMjZIOFYyNGgyWm0wLTVIOFYxOWgyWm0wLTVIOFYxNGgyWm02LDEwSDE0VjI0aDJabTAtNUgxNFYxOWgyWm0wLTVIMTRWMTRoMlptNiwxMEgyMFYyNGgyWm0wLTVIMjBWMTloMlptMC01SDIwVjE0aDJabTYsMTBIMjZWMjRoMlptMC01SDI2VjE5aDJabTAt'@;
put 'NUgyNlYxNGgyWiIvPid9XSxEeWU9WyJleWUtaGlkZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNS4xOSwyMC40QTYuNzgsNi43OCwwLDAsMCwyNS42MiwxOGE2Ljg2LDYuODYsMCwwLDAtNi44Ni02Ljg2LDYuNzksNi43OSwwLDAsMC0yLjM3LjQzTDE4LDEzLjIzYTQuNzgsNC43OCwwLDAsMSwu'@;
put 'NzQtLjA2QTQuODcsNC44NywwLDAsMSwyMy42MiwxOGE0Ljc5LDQuNzksMCwwLDEtLjA2Ljc0WiIvPjxwYXRoIGQ9Ik0zNC4yOSwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODItMTBhMTYuODIsMTYuODIsMCwwLDAtNS4yNC44NUwxNC44NCwxMGExNC43OCwxNC43OCwwLDAsMSwzLjYz'@;
put 'LS40N2M1LjYzLDAsMTAuNzUsMy4xNCwxMy44LDguNDNhMTcuNzUsMTcuNzUsMCwwLDEtNC4zNyw1LjFsMS40MiwxLjQyYTE5LjkzLDE5LjkzLDAsMCwwLDUtNmwuMjYtLjQ4WiIvPjxwYXRoIGQ9Ik00Ljg3LDUuNzhsNC40Niw0LjQ2YTE5LjUyLDE5LjUyLDAsMCwwLTYuNjksNy4yOUwyLjM4'@;
put 'LDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMGExNi45MywxNi45MywwLDAsMCw3LjM3LTEuNjlsNSw1LDEuNzUtMS41LTI2LTI2Wm05Ljc1LDkuNzUsNi42NSw2LjY1YTQuODEsNC44MSwwLDAsMS0yLjUuNzJBNC44Nyw0Ljg3LDAsMCwxLDEzLjksMTgsNC44MSw0LjgxLDAs'@;
put 'MCwxLDE0LjYyLDE1LjUzWm0tMS40NS0xLjQ1YTYuODUsNi44NSwwLDAsMCw5LjU1LDkuNTVsMS42LDEuNmExNC45MSwxNC45MSwwLDAsMS01Ljg2LDEuMmMtNS42MywwLTEwLjc1LTMuMTQtMTMuOC04LjQzYTE3LjI5LDE3LjI5LDAsMCwxLDYuMTItNi4zWiIvPicsc29saWQ6JzxwYXRoIGQ9'@;
put 'Ik0xOC4zNywxMS4xN0E2Ljc5LDYuNzksMCwwLDAsMTYsMTEuNmw4LjgsOC44QTYuNzgsNi43OCwwLDAsMCwyNS4yMywxOCw2Ljg2LDYuODYsMCwwLDAsMTguMzcsMTEuMTdaIi8+PHBhdGggZD0iTTM0LjI5LDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMGExNi44MiwxNi44Miww'@;
put 'LDAsMC01LjI0Ljg1TDE0Ljg0LDEwYTE0Ljc4LDE0Ljc4LDAsMCwxLDMuNjMtLjQ3YzUuNjMsMCwxMC43NSwzLjE0LDEzLjgsOC40M2ExNy43NSwxNy43NSwwLDAsMS00LjM3LDUuMWwxLjQyLDEuNDJhMTkuOTMsMTkuOTMsMCwwLDAsNS02bC4yNi0uNDhaIi8+PHBhdGggZD0iTTQuODcsNS43'@;
put 'OGw0LjQ2LDQuNDZhMTkuNTIsMTkuNTIsMCwwLDAtNi42OSw3LjI5TDIuMzgsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwYTE2LjkzLDE2LjkzLDAsMCwwLDcuMzctMS42OWw1LDUsMS43NS0xLjUtMjYtMjZabTguMyw4LjNhNi44NSw2Ljg1LDAsMCwwLDkuNTUsOS41NWwx'@;
put 'LjYsMS42YTE0LjkxLDE0LjkxLDAsMCwxLTUuODYsMS4yYy01LjYzLDAtMTAuNzUtMy4xNC0xMy44LTguNDNhMTcuMjksMTcuMjksMCwwLDEsNi4xMi02LjNaIi8+J31dLEF5ZT1bImV5ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMy42MiwxNy41M2MtMy4zNy02LjIzLTkuMjgtMTAtMTUuODIt'@;
put 'MTBTNS4zNCwxMS4zLDIsMTcuNTNMMS43MiwxOGwuMjYuNDhjMy4zNyw2LjIzLDkuMjgsMTAsMTUuODIsMTBzMTIuNDYtMy43MiwxNS44Mi0xMGwuMjYtLjQ4Wk0xNy44LDI2LjQzQzEyLjE3LDI2LjQzLDcsMjMuMjksNCwxOGMzLTUuMjksOC4xNy04LjQzLDEzLjgtOC40M1MyOC41NCwxMi43'@;
put 'MiwzMS41OSwxOEMyOC41NCwyMy4yOSwyMy40MiwyNi40MywxNy44LDI2LjQzWiIvPjxwYXRoIGQ9Ik0xOC4wOSwxMS4xN0E2Ljg2LDYuODYsMCwxLDAsMjUsMTgsNi44Niw2Ljg2LDAsMCwwLDE4LjA5LDExLjE3Wm0wLDExLjcyQTQuODYsNC44NiwwLDEsMSwyMywxOCw0Ljg3LDQuODcsMCww'@;
put 'LDEsMTguMDksMjIuODlaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDha'@;
put 'TTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIi8+PGNpcmNsZSBjeD0iMTguMDkiIGN5PSIxOC4wMyIgcj0iNi44NiIvPid9'@;
put 'XSxMeWU9WyJlbGxpcHNpcy12ZXJ0aWNhbCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjE4IiBjeT0iNC45IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIvPicsb3V0bGluZUJhZGdlZDonPGNpcmNsZSBj'@;
put 'eD0iMTgiIGN5PSI0LjkiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIvPjxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45Ii8+J31dLEl5ZT1bInZpZXctY29sdW1ucyIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMSw1SDVBMiwyLDAsMCwwLDMsN1YyOWEyLDIs'@;
put 'MCwwLDAsMiwySDMxYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzEsNVpNMTMsMjlINVY3aDhabTEwLDBIMTVWN2g4WiIvPid9XSxSeWU9WyJhcnJvdyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYy'@;
put 'OC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiLz4nfV0sRWVlPVsidGltZXMiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTkuNDEsMThsOC4yOS04LjI5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTgsMTYuNTksOS43MSw4LjI5QTEsMSwwLDAsMCw4LjI5'@;
put 'LDkuNzFMMTYuNTksMTgsOC4yOSwyNi4yOWExLDEsMCwxLDAsMS40MSwxLjQxTDE4LDE5LjQxbDguMjksOC4yOWExLDEsMCwwLDAsMS40MS0xLjQxWiIvPid9XSxPeWU9WyJzdGVwLWZvcndhcmQtMiIse291dGxpbmU6JzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40'@;
put 'TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIvPjxwYXRoIGQ9Ik0yNi40OSw1YTEuNywxLjcsMCwwLDAtMS43LDEuN1YyOS4zYTEuNywxLjcsMCwwLDAsMy40LDBWNi43QTEu'@;
put 'NywxLjcsMCwwLDAsMjYuNDksNVoiLz4nfV0sVGVlPVsiYW5nbGUtZG91YmxlIix7b3V0bGluZTonPHBhdGggZD0iTTI5LDE5LjQxYTEsMSwwLDAsMS0uNzEtLjI5TDE4LDguODMsNy43MSwxOS4xMmExLDEsMCwwLDEtMS40MS0xLjQxTDE4LDYsMjkuNzEsMTcuNzFBMSwxLDAsMCwxLDI5LDE5'@;
put 'LjQxWiIvPjxwYXRoIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPid9XSxQeWU9WyJmaWx0ZXItZ3JpZC1jaXJjbGUiLHtvdXRsaW5lOic8'@;
put 'cGF0aCBkPSJNMTUsMjUuODZsMiwxVjIwLjI3YTEsMSwwLDAsMC0uMjktLjdMMTAuMjMsMTNIMjUuNzlsLTYuNDcsNi41N2ExLDEsMCwwLDAtLjI5LjdMMTksMjhsMiwxVjIwLjY4TDI3LjU4LDE0QTEuNDYsMS40NiwwLDAsMCwyOCwxM1YxMmExLDEsMCwwLDAtMS0xSDlhMSwxLDAsMCwwLTEs'@;
put 'MXYxYTEuNDYsMS40NiwwLDAsMCwuNDIsMUwxNSwyMC42OFoiLz48cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs'@;
put 'MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+PHBhdGggZD0iTTgsMTF2MS4xMmEuNS41LDAsMCwwLC4xNS4zNWw3LjI4LDcuMzZhLjUuNSwwLDAsMSwuMTUuMzV2Ni44OWEuNS41LDAsMCwwLC4yOC40NWwzLjk1'@;
put 'LDEuNDFhLjUuNSwwLDAsMCwuNzItLjQ1bDAtOC4zOWEuNTQuNTQsMCwwLDEsLjE4LS4zNWw3LjEyLTcuMjVhLjUuNSwwLDAsMCwuMTUtLjM1VjExWiIvPid9XSxGeWU9WyJmaWx0ZXItZ3JpZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0u'@;
put 'N0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPicsc29s'@;
put 'aWQ6JzxwYXRoIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUs'@;
put 'MCwwLDAsLjE1LS4zNVYxMVoiLz4nfV0sVEg9WyJlcnJvci1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIsMHYxMkExLDEsMCwwLDEsMTgsMjIuNjFa'@;
put 'Ii8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDIuMWExNiwxNiwwLDEsMCwxNiwxNkExNiwxNiwwLDAsMCwxOCwyLjFaTTE2'@;
put 'LjYsOC44YTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAsMS0yLjgsMFpNMTgsMjguNmExLjgsMS44LDAsMSwxLDEuOC0xLjhBMS44LDEuOCwwLDAsMSwxOCwyOC42WiIvPid9XSxIeWU9WyJoZWxwIix7b3V0bGluZTonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgs'@;
put 'MTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz48cGF0aCBkPSJNMTguMjksOC45MmE3LjM4LDcuMzgsMCwwLDAtNS43MiwyLjU3LDEsMSwwLDAsMC0uMzIuNzEuOTIuOTIsMCwwLDAsLjk1LjkyLDEuMDgsMS4wOCwwLDAsMCwuNzEt'@;
put 'LjI5LDUuNyw1LjcsMCwwLDEsNC4zMy0yYzIuMzYsMCwzLjgzLDEuNTIsMy44MywzLjQxdi4wNWMwLDIuMjEtMS43NiwzLjQ0LTQuNTQsMy42NWEuOC44LDAsMCwwLS43Ni45MnMwLDIuMzIsMCwyLjc1YTEsMSwwLDAsMCwxLC45aC4xMWExLDEsMCwwLDAsLjktMVYxOS40NWMzLS40Miw1LjQz'@;
put 'LTIsNS40My01LjI4di0uMDVDMjQuMTgsMTEuMTIsMjEuODQsOC45MiwxOC4yOSw4LjkyWiIvPjxjaXJjbGUgY3g9IjE3Ljc4IiBjeT0iMjYuMiIgcj0iMS4yNSIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTI0LjE4LDE0LjE3di0uMDVjMC0zLTIuMzQtNS4yLTUuODgtNS4yYTcuMzgs'@;
put 'Ny4zOCwwLDAsMC01LjcyLDIuNTcsMSwxLDAsMCwwLS4zMi43MS45Mi45MiwwLDAsMCwuOTUuOTIsMS4wOCwxLjA4LDAsMCwwLC43MS0uMjksNS43LDUuNywwLDAsMSw0LjMzLTJjMi4zNiwwLDMuODMsMS41MiwzLjgzLDMuNDF2LjA1YzAsMi4yMS0xLjc2LDMuNDQtNC41NCwzLjY1YS44Ljgs'@;
put 'MCwwLDAtLjc2LjkyczAsMi4zMiwwLDIuNzVhMSwxLDAsMCwwLDEsLjloLjExYTEsMSwwLDAsMCwuOS0xVjE5LjQ1QzIxLjc1LDE5LDI0LjE4LDE3LjQ1LDI0LjE4LDE0LjE3WiIvPjxjaXJjbGUgY3g9IjE3Ljc4IiBjeT0iMjYuMiIgcj0iMS4yNSIvPjxwYXRoIGQ9Ik0zMy4xMiwxMi44MWE3'@;
put 'LjQzLDcuNDMsMCwwLDEtMS45MS41OCwxNC4wNSwxNC4wNSwwLDEsMS04LjYtOC42LDcuNDQsNy40NCwwLDAsMSwuNTgtMS45MSwxNi4wNiwxNi4wNiwwLDEsMCw5LjkzLDkuOTNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpt'@;
put 'LS4yMiwyNS44NWExLjY1LDEuNjUsMCwxLDEsMS42NS0xLjY1QTEuNjUsMS42NSwwLDAsMSwxNy43OCwyNy44NVptMS4zNy04LjA2djEuNzJhMS4zNywxLjM3LDAsMCwxLTEuMywxLjM2aC0uMTFhMS4zNCwxLjM0LDAsMCwxLTEuMzktMS4zYzAtLjQ0LDAtMi43NiwwLTIuNzZhMS4xOSwxLjE5'@;
put 'LDAsMCwxLDEuMTItMS4zMWMxLjU3LS4xMiw0LjE4LS43LDQuMTgtMy4yNSwwLTEuODMtMS40MS0zLjA3LTMuNDMtMy4wN2E1LjMxLDUuMzEsMCwwLDAtNCwxLjkyLDEuMzYsMS4zNiwwLDAsMS0yLjM1LS45LDEuNDMsMS40MywwLDAsMSwuNDMtMSw3Ljc3LDcuNzcsMCwwLDEsNi0yLjY5YzMu'@;
put 'NywwLDYuMjgsMi4zLDYuMjgsNS42QzI0LjU4LDE3LjE2LDIyLjYxLDE5LjIsMTkuMTUsMTkuNzlaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMzLjEyLDEyLjgxYTcuNDksNy40OSwwLDAsMS05LjkzLTkuOTMsMTYuMDYsMTYuMDYsMCwxLDAsOS45Myw5LjkzWm0tMTUuMzQsMTVhMS42'@;
put 'NSwxLjY1LDAsMSwxLDEuNjUtMS42NUExLjY1LDEuNjUsMCwwLDEsMTcuNzgsMjcuODVabTEuMzctOC4wNnYxLjcyYTEuMzcsMS4zNywwLDAsMS0xLjMsMS4zNmgtLjExYTEuMzQsMS4zNCwwLDAsMS0xLjM5LTEuM2MwLS40NCwwLTIuNzYsMC0yLjc2YTEuMTksMS4xOSwwLDAsMSwxLjEyLTEu'@;
put 'MzFjMS41Ny0uMTIsNC4xOC0uNyw0LjE4LTMuMjUsMC0xLjgzLTEuNDEtMy4wNy0zLjQzLTMuMDdhNS4zMSw1LjMxLDAsMCwwLTQsMS45MiwxLjM2LDEuMzYsMCwwLDEtMi4zNS0uOSwxLjQzLDEuNDMsMCwwLDEsLjQzLTEsNy43Nyw3Ljc3LDAsMCwxLDYtMi42OWMzLjcsMCw2LjI4LDIuMyw2'@;
put 'LjI4LDUuNkMyNC41OCwxNy4xNiwyMi42MSwxOS4yLDE5LjE1LDE5Ljc5WiIvPid9XSxOeWU9WyJpbmZvLXN0YW5kYXJkIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTciIGN5PSIxMC40NSIgcj0iMS40Ii8+PHBhdGggZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1'@;
put 'SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFpNMTgsNEExNCwxNCwwLDEsMCwzMiwxOCwxNCwxNCwwLDAsMCwxOCw0WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCwyLjFhMTYsMTYs'@;
put 'MCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTgsMi4xWm0tLjEsNS4yOGEyLDIsMCwxLDEtMiwyQTIsMiwwLDAsMSwxNy45LDcuMzhabTMuNiwyMS4yNWgtN2ExLjQsMS40LDAsMSwxLDAtMi44aDIuMXYtOS4ySDE1YTEuNCwxLjQsMCwxLDEsMC0yLjhoNC40djEyaDIuMWExLjQsMS40LDAsMSwx'@;
put 'LDAsMi44WiIvPid9XSxWeWU9WyJub3RlIix7b3V0bGluZTonPHBhdGggZD0iTTI4LDMwSDZWOEgxOS4yMmwyLTJINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxNWwtMiwyWiIvPjxwYXRoIGQ9Ik0zMy41Myw1Ljg0LDMwLjE2LDIuNDdhMS42MSwx'@;
put 'LjYxLDAsMCwwLTIuMjgsMEwxNC4xNywxNi4yNmwtMS4xMSw0LjgxQTEuNjEsMS42MSwwLDAsMCwxNC42MywyMywxLjY5LDEuNjksMCwwLDAsMTUsMjNsNC44NS0xLjA3TDMzLjUzLDguMTJBMS42MSwxLjYxLDAsMCwwLDMzLjUzLDUuODRaTTE4LjgxLDIwLjA4bC0zLjY2LjgxTDE2LDE3LjI2'@;
put 'LDI2LjMyLDYuODdsMi44MiwyLjgyWk0zMC4yNyw4LjU2LDI3LjQ1LDUuNzQsMjksNC4xNiwzMS44NCw3WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4'@;
put 'YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwzLjIzLDMuMjNaIi8+J31dLERlZT1bInN1Y2Nlc3Mtc3RhbmRh'@;
put 'cmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPjxwYXRoIGQ9Ik0yOCwxMi4xYTEsMSwwLDAsMC0xLjQxLDBMMTUuNDksMjMuMTVsLTYtNkExLDEs'@;
put 'MCwwLDAsOCwxOC41M0wxNS40OSwyNiwyOCwxMy41MkExLDEsMCwwLDAsMjgsMTIuMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWk0yOC40NSwxMi42MywxNS4zMSwyNS43Niw3LjU1LDE4YTEuNCwxLjQsMCwwLDEsMi0ybDUu'@;
put 'NzgsNS43OEwyNi40NywxMC42NWExLjQsMS40LDAsMSwxLDIsMloiLz4nfV0sanllPVsid2FybmluZy1zdGFuZGFyZCIse291dGxpbmU6JzxjaXJjbGUgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz48cGF0aCBkPSJNMTgsMjIuNjFhMSwxLDAsMCwxLTEtMXYtMTJhMSwxLDAsMSwxLDIs'@;
put 'MHYxMkExLDEsMCwwLDEsMTgsMjIuNjFaIi8+PHBhdGggZD0iTTE1LjA2MjA3ODIsMS42ODExOTYgQzE1LjYyOTg4MTksMC42NDkyNjYzNTUgMTYuNzEwOTA5MSwwLjAxMDIyMTkzOTYgMTcuODg1LDAuMDEwMjIxOTM5NiBDMTkuMDU5MDkwOSwwLjAxMDIyMTkzOTYgMjAuMTQwMTE4MSwwLjY0'@;
put 'OTI2NjM1NSAyMC43MDg2NDMzLDEuNjgyNTIxMjkgTDM0LjU5ODY0NCwyNy4yNDI1MjI1IEMzNS4xNDA3NzQ2LDI4LjI0MDEzOTcgMzUuMTE3NDM0NSwyOS40NDk1MzczIDM0LjUzNzIxNjEsMzAuNDI1NDk0MyBDMzMuOTU2OTk3NywzMS40MDE0NTE0IDMyLjkwNTY3MSwzMS45OTk2OTg0IDMx'@;
put 'Ljc3LDMyIEw0LjAyMjM5MzIzLDMxLjk5OTc0OTIgQzIuODc0MDkwMDksMzIuMDI1NDY5OSAxLjc5OTAyODQzLDMxLjQzNzU3NTMgMS4yMDEwNjMzNSwzMC40NTY5MTI2IEMwLjYwMzA5ODI2NSwyOS40NzYyNDk5IDAuNTcyNzc3ODk5LDI4LjI1MTMxNzkgMS4xMjIwNzgxOCwyNy4yNDExOTYg'@;
put 'TDE1LjA2MjA3ODIsMS42ODExOTYgWiBNMi44Nzg1MDc2NywyOC4xOTc3MjgyIEMyLjY3MDYwOTY2LDI4LjU4MDAzNzYgMi42ODIwOTc1LDI5LjA0NDE0MjMgMi45MDg2NTU3LDI5LjQxNTY5NzcgQzMuMTM1MjEzOSwyOS43ODcyNTMyIDMuNTQyNTM1NCwzMC4wMDk5OTU5IDQsMzAgTDMxLjc2'@;
put 'OTczNDQsMzAgQzMyLjE5OTkxOTEsMjkuOTk5ODg1OCAzMi41OTgyNDc4LDI5Ljc3MzIyMDggMzIuODE4MDgyMSwyOS40MDM0NDgyIEMzMy4wMzc5MTY0LDI5LjAzMzY3NTcgMzMuMDQ2NzU5NSwyOC41NzU0NTY3IDMyLjg0MTM1NjcsMjguMTk3NDc4NyBMMTguOTUzODczOSwyLjY0MjA4MTk1'@;
put 'IEMxOC43Mzk0MjM2LDIuMjUyMzQ0MzYgMTguMzI5ODQxOSwyLjAxMDIyMTk0IDE3Ljg4NSwyLjAxMDIyMTk0IEMxNy40NDA2ODg5LDIuMDEwMjIxOTQgMTcuMDMxNTUzOCwyLjI1MTc2NjkyIDE2LjgxNjg5NDYsMi42NDA2ODc1MyBMMi44Nzg1MDc2NywyOC4xOTc3MjgyIFoiLz4nLHNvbGlk'@;
put 'Oic8cGF0aCBkPSJNMzQuNiwyOS4yMSwyMC43MSwzLjY1YTMuMjIsMy4yMiwwLDAsMC01LjY2LDBMMS4xNywyOS4yMUEzLjIyLDMuMjIsMCwwLDAsNCwzNEgzMS43N2EzLjIyLDMuMjIsMCwwLDAsMi44My00Ljc1Wk0xNi42LDEwYTEuNCwxLjQsMCwwLDEsMi44LDB2MTJhMS40LDEuNCwwLDAs'@;
put 'MS0yLjgsMFpNMTgsMjkuODVhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTgsMjkuODVaIi8+J31dLEJ5ZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPGNpcmNsZSBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz48cGF0aCBkPSJNMjEsMjNIMTlWMTVIMTZhMSwx'@;
put 'LDAsMCwwLDAsMmgxdjZIMTVhMSwxLDAsMSwwLDAsMmg2YTEsMSwwLDAsMCwwLTJaIi8+PHBhdGggZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptMCwyMkExMCwxMCwwLDEsMSwyOCwxOCwxMCwxMCwwLDAsMSwxOCwyOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJN'@;
put 'MTgsNkExMiwxMiwwLDEsMCwzMCwxOCwxMiwxMiwwLDAsMCwxOCw2Wm0tMiw1LjE1YTIsMiwwLDEsMSwyLDJBMiwyLDAsMCwxLDE1LjksMTEuMTVaTTIzLDI0YTEsMSwwLDAsMS0xLDFIMTVhMSwxLDAsMSwxLDAtMmgyVjE3SDE2YTEsMSwwLDAsMSwwLTJoNHY4aDJBMSwxLDAsMCwxLDIzLDI0'@;
put 'WiIvPid9XSxZeWU9WyJjaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEs'@;
put 'MzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaIi8+J31dLHp5ZT1bImRvdC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03Ii8+PHBhdGggZD0iTTE4LDM0QTE2LDE2LDAsMSwxLDM0LDE4LDE2LDE2LDAsMCwxLDE4LDM0Wk0xOCw0QTE0'@;
put 'LDE0LDAsMSwwLDMyLDE4LDE0LDE0LDAsMCwwLDE4LDRaIi8+J31dO2NsYXNzIFd5ZSBleHRlbmRzIFh0e2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKX1zY2hlZHVsZShsLGE9MCl7cmV0dXJuIHRoaXN9fWNvbnN0IGRFPXtzZXRJbnRlcnZhbChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09'@;
put 'ZEU7cmV0dXJuIGQ/LnNldEludGVydmFsP2Quc2V0SW50ZXJ2YWwoYyxsLC4uLmEpOnNldEludGVydmFsKGMsbCwuLi5hKX0sY2xlYXJJbnRlcnZhbChjKXtjb25zdHtkZWxlZ2F0ZTpsfT1kRTtyZXR1cm4obD8uY2xlYXJJbnRlcnZhbHx8Y2xlYXJJbnRlcnZhbCkoYyl9LGRlbGVnYXRlOnZv'@;
put 'aWQgMH07Y2xhc3MgREggZXh0ZW5kcyBXeWV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWEsdGhpcy5wZW5kaW5nPSExfXNjaGVkdWxlKGwsYT0wKXt2YXIgZDtpZih0aGlzLmNsb3NlZClyZXR1cm4gdGhpczt0aGlzLnN0YXRlPWw7Y29u'@;
put 'c3QgaD10aGlzLmlkLGY9dGhpcy5zY2hlZHVsZXI7cmV0dXJuIG51bGwhPWgmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoZixoLGEpKSx0aGlzLnBlbmRpbmc9ITAsdGhpcy5kZWxheT1hLHRoaXMuaWQ9bnVsbCE9PShkPXRoaXMuaWQpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5yZXF1ZXN0'@;
put 'QXN5bmNJZChmLHRoaXMuaWQsYSksdGhpc31yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gZEUuc2V0SW50ZXJ2YWwobC5mbHVzaC5iaW5kKGwsdGhpcyksZCl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7aWYobnVsbCE9ZCYmdGhpcy5kZWxheT09PWQmJiExPT09dGhpcy5wZW5kaW5n'@;
put 'KXJldHVybiBhO251bGwhPWEmJmRFLmNsZWFySW50ZXJ2YWwoYSl9ZXhlY3V0ZShsLGEpe2lmKHRoaXMuY2xvc2VkKXJldHVybiBuZXcgRXJyb3IoImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24iKTt0aGlzLnBlbmRpbmc9ITE7Y29uc3QgZD10aGlzLl9leGVjdXRlKGwsYSk7aWYoZCly'@;
put 'ZXR1cm4gZDshMT09PXRoaXMucGVuZGluZyYmbnVsbCE9dGhpcy5pZCYmKHRoaXMuaWQ9dGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlcix0aGlzLmlkLG51bGwpKX1fZXhlY3V0ZShsLGEpe2xldCBoLGQ9ITE7dHJ5e3RoaXMud29yayhsKX1jYXRjaChmKXtkPSEwLGg9Znx8bmV3'@;
put 'IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIil9aWYoZClyZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLGh9dW5zdWJzY3JpYmUoKXtpZighdGhpcy5jbG9zZWQpe2NvbnN0e2lkOmwsc2NoZWR1bGVyOmF9PXRoaXMse2FjdGlvbnM6ZH09YTt0aGlzLndvcms9dGhp'@;
put 'cy5zdGF0ZT10aGlzLnNjaGVkdWxlcj1udWxsLHRoaXMucGVuZGluZz0hMSxSdChkLHRoaXMpLG51bGwhPWwmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQoYSxsLG51bGwpKSx0aGlzLmRlbGF5PW51bGwsc3VwZXIudW5zdWJzY3JpYmUoKX19fWNvbnN0IEFIPXtub3c6KCk9PihBSC5k'@;
put 'ZWxlZ2F0ZXx8RGF0ZSkubm93KCksZGVsZWdhdGU6dm9pZCAwfTtjbGFzcyBmYntjb25zdHJ1Y3RvcihsLGE9ZmIubm93KXt0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3I9bCx0aGlzLm5vdz1hfXNjaGVkdWxlKGwsYT0wLGQpe3JldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRo'@;
put 'aXMsbCkuc2NoZWR1bGUoZCxhKX19ZmIubm93PUFILm5vdztjbGFzcyBMSCBleHRlbmRzIGZie2NvbnN0cnVjdG9yKGwsYT1mYi5ub3cpe3N1cGVyKGwsYSksdGhpcy5hY3Rpb25zPVtdLHRoaXMuX2FjdGl2ZT0hMX1mbHVzaChsKXtjb25zdHthY3Rpb25zOmF9PXRoaXM7aWYodGhpcy5fYWN0'@;
put 'aXZlKXJldHVybiB2b2lkIGEucHVzaChsKTtsZXQgZDt0aGlzLl9hY3RpdmU9ITA7ZG97aWYoZD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZShsPWEuc2hpZnQoKSk7aWYodGhpcy5fYWN0aXZlPSExLGQpe2Zvcig7bD1hLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0'@;
put 'aHJvdyBkfX19Y29uc3QgaEU9bmV3IExIKERIKSxHeWU9aEU7ZnVuY3Rpb24gc2coYyxsPWhFKXtyZXR1cm4geWkoKGEsZCk9PntsZXQgaD1udWxsLGY9bnVsbCx2PW51bGw7Y29uc3QgVD0oKT0+e2lmKGgpe2gudW5zdWJzY3JpYmUoKSxoPW51bGw7Y29uc3QgcmU9ZjtmPW51bGwsZC5uZXh0'@;
put 'KHJlKX19O2Z1bmN0aW9uIFkoKXtjb25zdCByZT12K2MsZmU9bC5ub3coKTtpZihmZTxyZSlyZXR1cm4gaD10aGlzLnNjaGVkdWxlKHZvaWQgMCxyZS1mZSksdm9pZCBkLmFkZChoKTtUKCl9YS5zdWJzY3JpYmUoJHIoZCxyZT0+e2Y9cmUsdj1sLm5vdygpLGh8fChoPWwuc2NoZWR1bGUoWSxj'@;
put 'KSxkLmFkZChoKSl9LCgpPT57VCgpLGQuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57Zj1oPW51bGx9KSl9KX1jb25zdCAkeWU9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0scXllPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxLeWU9WyJvbiIsIm9m'@;
put 'ZiJdO2Z1bmN0aW9uIFFoKGMsbCxhLGQpe2lmKGx0KGEpJiYoZD1hLGE9dm9pZCAwKSxkKXJldHVybiBRaChjLGwsYSkucGlwZShuRihkKSk7Y29uc3RbaCxmXT1mdW5jdGlvbiBReWUoYyl7cmV0dXJuIGx0KGMuYWRkRXZlbnRMaXN0ZW5lcikmJmx0KGMucmVtb3ZlRXZlbnRMaXN0ZW5lcil9'@;
put 'KGMpP3F5ZS5tYXAodj0+VD0+Y1t2XShsLFQsYSkpOmZ1bmN0aW9uIFh5ZShjKXtyZXR1cm4gbHQoYy5hZGRMaXN0ZW5lcikmJmx0KGMucmVtb3ZlTGlzdGVuZXIpfShjKT8keWUubWFwKExlZShjLGwpKTpmdW5jdGlvbiBKeWUoYyl7cmV0dXJuIGx0KGMub24pJiZsdChjLm9mZil9KGMpP0t5'@;
put 'ZS5tYXAoTGVlKGMsbCkpOltdO2lmKCFoJiZlRihjKSlyZXR1cm4gVnUodj0+UWgodixsLGEpKShjMShjKSk7aWYoIWgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IHduKHY9Pntjb25zdCBUPSguLi5ZKT0+di5uZXh0KDE8WS5sZW5ndGg/'@;
put 'WTpZWzBdKTtyZXR1cm4gaChUKSwoKT0+ZihUKX0pfWZ1bmN0aW9uIExlZShjLGwpe3JldHVybiBhPT5kPT5jW2FdKGwsZCl9Y2xhc3MgZkUgZXh0ZW5kcyBubntjb25zdHJ1Y3RvcihsPTEvMCxhPTEvMCxkPUFIKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9bCx0aGlzLl93aW5kb3dUaW1l'@;
put 'PWEsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9ZCx0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1hPT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSxsKSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4KDEs'@;
put 'YSl9bmV4dChsKXtjb25zdHtpc1N0b3BwZWQ6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpoLF90aW1lc3RhbXBQcm92aWRlcjpmLF93aW5kb3dUaW1lOnZ9PXRoaXM7YXx8KGQucHVzaChsKSwhaCYmZC5wdXNoKGYubm93KCkrdikpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBlci5u'@;
put 'ZXh0KGwpfV9zdWJzY3JpYmUobCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCBhPXRoaXMuX2lubmVyU3Vic2NyaWJlKGwpLHtfaW5maW5pdGVUaW1lV2luZG93OmQsX2J1ZmZlcjpofT10aGlzLGY9aC5zbGljZSgpO2ZvcihsZXQgdj0wO3Y8Zi5sZW5n'@;
put 'dGgmJiFsLmNsb3NlZDt2Kz1kPzE6MilsLm5leHQoZlt2XSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMobCksYX1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZmZXJTaXplOmwsX3RpbWVzdGFtcFByb3ZpZGVyOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6aH09'@;
put 'dGhpcyxmPShoPzE6MikqbDtpZihsPDEvMCYmZjxkLmxlbmd0aCYmZC5zcGxpY2UoMCxkLmxlbmd0aC1mKSwhaCl7Y29uc3Qgdj1hLm5vdygpO2xldCBUPTA7Zm9yKGxldCBZPTE7WTxkLmxlbmd0aCYmZFtZXTw9djtZKz0yKVQ9WTtUJiZkLnNwbGljZSgwLFQrMSl9fX1mdW5jdGlvbiBwRSgu'@;
put 'Li5jKXtjb25zdCBsPVB5KGMpLGE9ZnVuY3Rpb24gWHBlKGMsbCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0RihjKT9jLnBvcCgpOmx9KGMsMS8wKSxkPWM7cmV0dXJuIGQubGVuZ3RoPzE9PT1kLmxlbmd0aD9jMShkWzBdKTp6OChhKShaYyhkLGwpKTpxaH12YXIgSm89ZnVuY3Rpb24oYyl7'@;
put 'cmV0dXJuIGNbYy5TdGF0ZT0wXT0iU3RhdGUiLGNbYy5UcmFuc2l0aW9uPTFdPSJUcmFuc2l0aW9uIixjW2MuU2VxdWVuY2U9Ml09IlNlcXVlbmNlIixjW2MuR3JvdXA9M109Ikdyb3VwIixjW2MuQW5pbWF0ZT00XT0iQW5pbWF0ZSIsY1tjLktleWZyYW1lcz01XT0iS2V5ZnJhbWVzIixjW2Mu'@;
put 'U3R5bGU9Nl09IlN0eWxlIixjW2MuVHJpZ2dlcj03XT0iVHJpZ2dlciIsY1tjLlJlZmVyZW5jZT04XT0iUmVmZXJlbmNlIixjW2MuQW5pbWF0ZUNoaWxkPTldPSJBbmltYXRlQ2hpbGQiLGNbYy5BbmltYXRlUmVmPTEwXT0iQW5pbWF0ZVJlZiIsY1tjLlF1ZXJ5PTExXT0iUXVlcnkiLGNbYy5T'@;
put 'dGFnZ2VyPTEyXT0iU3RhZ2dlciIsY30oSm98fHt9KTtjb25zdCBXMz0iKiI7ZnVuY3Rpb24gaWQoYyxsKXtyZXR1cm57dHlwZTpKby5UcmlnZ2VyLG5hbWU6YyxkZWZpbml0aW9uczpsLG9wdGlvbnM6e319fWZ1bmN0aW9uIG4wKGMsbD1udWxsKXtyZXR1cm57dHlwZTpKby5BbmltYXRlLHN0'@;
put 'eWxlczpsLHRpbWluZ3M6Y319ZnVuY3Rpb24gSXMoYyl7cmV0dXJue3R5cGU6Sm8uU3R5bGUsc3R5bGVzOmMsb2Zmc2V0Om51bGx9fWZ1bmN0aW9uIG1FKGMsbCxhKXtyZXR1cm57dHlwZTpKby5TdGF0ZSxuYW1lOmMsc3R5bGVzOmwsb3B0aW9uczphfX1mdW5jdGlvbiB0YmUoYyl7cmV0dXJu'@;
put 'e3R5cGU6Sm8uS2V5ZnJhbWVzLHN0ZXBzOmN9fWZ1bmN0aW9uIEdjKGMsbCxhPW51bGwpe3JldHVybnt0eXBlOkpvLlRyYW5zaXRpb24sZXhwcjpjLGFuaW1hdGlvbjpsLG9wdGlvbnM6YX19Y2xhc3MgcGJ7Y29uc3RydWN0b3IobD0wLGE9MCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29u'@;
put 'U3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLl9zdGFydGVkPSExLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9wb3NpdGlvbj0wLHRoaXMu'@;
put 'cGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9bCthfV9vbkZpbmlzaCgpe3RoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fb25Eb25lRm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRvbmVGbnM9W10pfW9uU3RhcnQobCl7dGhpcy5fb3JpZ2luYWxPblN0'@;
put 'YXJ0Rm5zLnB1c2gobCksdGhpcy5fb25TdGFydEZucy5wdXNoKGwpfW9uRG9uZShsKXt0aGlzLl9vcmlnaW5hbE9uRG9uZUZucy5wdXNoKGwpLHRoaXMuX29uRG9uZUZucy5wdXNoKGwpfW9uRGVzdHJveShsKXt0aGlzLl9vbkRlc3Ryb3lGbnMucHVzaChsKX1oYXNTdGFydGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuX3N0YXJ0ZWR9aW5pdCgpe31wbGF5KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0KCksdGhpcy50cmlnZ2VyTWljcm90YXNrKCkpLHRoaXMuX3N0YXJ0ZWQ9ITB9dHJpZ2dlck1pY3JvdGFzaygpe3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKX1f'@;
put 'b25TdGFydCgpe3RoaXMuX29uU3RhcnRGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W119cGF1c2UoKXt9cmVzdGFydCgpe31maW5pc2goKXt0aGlzLl9vbkZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLl9kZXN0cm95ZWR8fCh0aGlzLl9kZXN0cm95ZWQ9ITAsdGhpcy5oYXNT'@;
put 'dGFydGVkKCl8fHRoaXMuX29uU3RhcnQoKSx0aGlzLmZpbmlzaCgpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fb25TdGFydEZucz10aGlzLl9v'@;
put 'cmlnaW5hbE9uU3RhcnRGbnMsdGhpcy5fb25Eb25lRm5zPXRoaXMuX29yaWdpbmFsT25Eb25lRm5zfXNldFBvc2l0aW9uKGwpe3RoaXMuX3Bvc2l0aW9uPXRoaXMudG90YWxUaW1lP2wqdGhpcy50b3RhbFRpbWU6MX1nZXRQb3NpdGlvbigpe3JldHVybiB0aGlzLnRvdGFsVGltZT90aGlzLl9w'@;
put 'b3NpdGlvbi90aGlzLnRvdGFsVGltZToxfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgSWVle2NvbnN0cnVjdG9yKGwpe3RoaXMuX29uRG9uZUZu'@;
put 'cz1bXSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29uRGVzdHJveUZucz1bXSx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMudG90YWxUaW1lPTAsdGhpcy5wbGF5ZXJzPWw7bGV0IGE9MCxk'@;
put 'PTAsaD0wO2NvbnN0IGY9dGhpcy5wbGF5ZXJzLmxlbmd0aDswPT1mP3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLl9vbkZpbmlzaCgpKTp0aGlzLnBsYXllcnMuZm9yRWFjaCh2PT57di5vbkRvbmUoKCk9PnsrK2E9PWYmJnRoaXMuX29uRmluaXNoKCl9KSx2Lm9uRGVzdHJveSgoKT0+eysrZD09'@;
put 'ZiYmdGhpcy5fb25EZXN0cm95KCl9KSx2Lm9uU3RhcnQoKCk9PnsrK2g9PWYmJnRoaXMuX29uU3RhcnQoKX0pfSksdGhpcy50b3RhbFRpbWU9dGhpcy5wbGF5ZXJzLnJlZHVjZSgodixUKT0+TWF0aC5tYXgodixULnRvdGFsVGltZSksMCl9X29uRmluaXNoKCl7dGhpcy5fZmluaXNoZWR8fCh0'@;
put 'aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9aW5pdCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuaW5pdCgpKX1vblN0YXJ0KGwpe3RoaXMuX29uU3RhcnRGbnMucHVzaChsKX1fb25TdGFydCgpe3RoaXMuaGFz'@;
put 'U3RhcnRlZCgpfHwodGhpcy5fc3RhcnRlZD0hMCx0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdKX1vbkRvbmUobCl7dGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0'@;
put 'ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1wbGF5KCl7dGhpcy5wYXJlbnRQbGF5ZXJ8fHRoaXMuaW5pdCgpLHRoaXMuX29uU3RhcnQoKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBsYXkoKSl9cGF1c2UoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnBhdXNlKCkpfXJlc3RhcnQo'@;
put 'KXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc3RhcnQoKSl9ZmluaXNoKCl7dGhpcy5fb25GaW5pc2goKSx0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLmZpbmlzaCgpKX1kZXN0cm95KCl7dGhpcy5fb25EZXN0cm95KCl9X29uRGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMu'@;
put 'X2Rlc3Ryb3llZD0hMCx0aGlzLl9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZGVzdHJveSgpKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9cmVzZXQoKXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT5sLnJlc2V0'@;
put 'KCkpLHRoaXMuX2Rlc3Ryb3llZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9zdGFydGVkPSExfXNldFBvc2l0aW9uKGwpe2NvbnN0IGE9bCp0aGlzLnRvdGFsVGltZTt0aGlzLnBsYXllcnMuZm9yRWFjaChkPT57Y29uc3QgaD1kLnRvdGFsVGltZT9NYXRoLm1pbigxLGEvZC50b3RhbFRp'@;
put 'bWUpOjE7ZC5zZXRQb3NpdGlvbihoKX0pfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLnBsYXllcnMucmVkdWNlKChhLGQpPT5udWxsPT09YXx8ZC50b3RhbFRpbWU+YS50b3RhbFRpbWU/ZDphLG51bGwpO3JldHVybiBudWxsIT1sP2wuZ2V0UG9zaXRpb24oKTowfWJlZm9yZURlc3Ryb3ko'@;
put 'KXt0aGlzLnBsYXllcnMuZm9yRWFjaChsPT57bC5iZWZvcmVEZXN0cm95JiZsLmJlZm9yZURlc3Ryb3koKX0pfXRyaWdnZXJDYWxsYmFjayhsKXtjb25zdCBhPSJzdGFydCI9PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19'@;
put 'bGV0IFJIO3RyeXtSSD10eXBlb2YgSW50bDwidSImJkludGwudjhCcmVha0l0ZXJhdG9yfWNhdGNoe1JIPSExfWxldCBtYixPSCxnRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtSWQ9YSx0aGlzLmlzQnJvd3Nlcj10aGlzLl9wbGF0Zm9ybUlkP2xhKHRoaXMu'@;
put 'X3BsYXRmb3JtSWQpOiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQsdGhpcy5FREdFPXRoaXMuaXNCcm93c2VyJiYvKGVkZ2UpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLlRSSURFTlQ9dGhpcy5pc0Jyb3dzZXImJi8obXNpZXx0cmlkZW50KS9pLnRlc3Qo'@;
put 'bmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5CTElOSz10aGlzLmlzQnJvd3NlciYmISghd2luZG93LmNocm9tZSYmIVJIKSYmdHlwZW9mIENTUzwidSImJiF0aGlzLkVER0UmJiF0aGlzLlRSSURFTlQsdGhpcy5XRUJLSVQ9dGhpcy5pc0Jyb3dzZXImJi9BcHBsZVdlYktpdC9pLnRlc3QobmF2'@;
put 'aWdhdG9yLnVzZXJBZ2VudCkmJiF0aGlzLkJMSU5LJiYhdGhpcy5FREdFJiYhdGhpcy5UUklERU5ULHRoaXMuSU9TPXRoaXMuaXNCcm93c2VyJiYvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmISgiTVNTdHJlYW0iaW4gd2luZG93KSx0aGlzLkZJUkVGT1g9'@;
put 'dGhpcy5pc0Jyb3dzZXImJi8oZmlyZWZveHxtaW5lZmllbGQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkFORFJPSUQ9dGhpcy5pc0Jyb3dzZXImJi9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuVFJJREVOVCx0aGlzLlNBRkFSST10aGlzLmlz'@;
put 'QnJvd3NlciYmL3NhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkmJnRoaXMuV0VCS0lUfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoQW8pKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6'@;
put 'Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gdjcoYyl7cmV0dXJuIGZ1bmN0aW9uIHNiZSgpe2lmKG51bGw9PW1iJiZ0eXBlb2Ygd2luZG93PCJ1Iil0cnl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInRlc3QiLG51bGwsT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KHt9LCJwYXNzaXZlIix7Z2V0OigpPT5tYj0hMH0pKX1maW5hbGx5e21iPW1ifHwhMX1yZXR1cm4gbWJ9KCk/YzohIWMuY2FwdHVyZX1mdW5jdGlvbiBPZWUoYyl7aWYoZnVuY3Rpb24gYWJlKCl7aWYobnVsbD09T0gpe2NvbnN0IGM9dHlwZW9mIGRvY3VtZW50PCJ1Ij9kb2N1'@;
put 'bWVudC5oZWFkOm51bGw7T0g9ISghY3x8IWMuY3JlYXRlU2hhZG93Um9vdCYmIWMuYXR0YWNoU2hhZG93KX1yZXR1cm4gT0h9KCkpe2NvbnN0IGw9Yy5nZXRSb290Tm9kZT9jLmdldFJvb3ROb2RlKCk6bnVsbDtpZih0eXBlb2YgU2hhZG93Um9vdDwidSImJlNoYWRvd1Jvb3QmJmwgaW5zdGFu'@;
put 'Y2VvZiBTaGFkb3dSb290KXJldHVybiBsfXJldHVybiBudWxsfWZ1bmN0aW9uIHZFKGMpe3JldHVybiBjLmNvbXBvc2VkUGF0aD9jLmNvbXBvc2VkUGF0aCgpWzBdOmMudGFyZ2V0fWxldCBMYmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9wbGF0Zm9ybT1hfWlzRGlzYWJs'@;
put 'ZWQoYSl7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpfWlzVmlzaWJsZShhKXtyZXR1cm4gZnVuY3Rpb24gUmJlKGMpe3JldHVybiEhKGMub2Zmc2V0V2lkdGh8fGMub2Zmc2V0SGVpZ2h0fHwiZnVuY3Rpb24iPT10eXBlb2YgYy5nZXRDbGllbnRSZWN0cyYmYy5nZXRDbGllbnRS'@;
put 'ZWN0cygpLmxlbmd0aCl9KGEpJiYidmlzaWJsZSI9PT1nZXRDb21wdXRlZFN0eWxlKGEpLnZpc2liaWxpdHl9aXNUYWJiYWJsZShhKXtpZighdGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyKXJldHVybiExO2NvbnN0IGQ9ZnVuY3Rpb24gSWJlKGMpe3RyeXtyZXR1cm4gYy5mcmFtZUVsZW1lbnR9'@;
put 'Y2F0Y2h7cmV0dXJuIG51bGx9fShmdW5jdGlvbiBCYmUoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudCYmYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3fHx3aW5kb3d9KGEpKTtpZihkJiYoLTE9PT1OZWUoZCl8fCF0aGlzLmlzVmlzaWJsZShkKSkpcmV0dXJuITE7bGV0IGg9YS5ub2RlTmFt'@;
put 'ZS50b0xvd2VyQ2FzZSgpLGY9TmVlKGEpO3JldHVybiBhLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIik/LTEhPT1mOiEoImlmcmFtZSI9PT1ofHwib2JqZWN0Ij09PWh8fHRoaXMuX3BsYXRmb3JtLldFQktJVCYmdGhpcy5fcGxhdGZvcm0uSU9TJiYhZnVuY3Rpb24gVmJlKGMpe2xl'@;
put 'dCBsPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxhPSJpbnB1dCI9PT1sJiZjLnR5cGU7cmV0dXJuInRleHQiPT09YXx8InBhc3N3b3JkIj09PWF8fCJzZWxlY3QiPT09bHx8InRleHRhcmVhIj09PWx9KGEpKSYmKCJhdWRpbyI9PT1oPyEhYS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikmJi0x'@;
put 'IT09ZjoidmlkZW8iPT09aD8tMSE9PWYmJihudWxsIT09Znx8dGhpcy5fcGxhdGZvcm0uRklSRUZPWHx8YS5oYXNBdHRyaWJ1dGUoImNvbnRyb2xzIikpOmEudGFiSW5kZXg+PTApfWlzRm9jdXNhYmxlKGEsZCl7cmV0dXJuIGZ1bmN0aW9uIGpiZShjKXtyZXR1cm4hZnVuY3Rpb24gUGJlKGMp'@;
put 'e3JldHVybiBmdW5jdGlvbiBIYmUoYyl7cmV0dXJuImlucHV0Ij09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfShjKSYmImhpZGRlbiI9PWMudHlwZX0oYykmJihmdW5jdGlvbiBPYmUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT1sfHwic2VsZWN0'@;
put 'Ij09PWx8fCJidXR0b24iPT09bHx8InRleHRhcmVhIj09PWx9KGMpfHxmdW5jdGlvbiBGYmUoYyl7cmV0dXJuIGZ1bmN0aW9uIE5iZShjKXtyZXR1cm4iYSI9PWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0oYykmJmMuaGFzQXR0cmlidXRlKCJocmVmIil9KGMpfHxjLmhhc0F0dHJpYnV0ZSgi'@;
put 'Y29udGVudGVkaXRhYmxlIil8fEhlZShjKSl9KGEpJiYhdGhpcy5pc0Rpc2FibGVkKGEpJiYoZD8uaWdub3JlVmlzaWJpbGl0eXx8dGhpcy5pc1Zpc2libGUoYSkpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoZ0UpKX07c3RhdGljI3Q9'@;
put 'dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSGVlKGMpe2lmKCFjLmhhc0F0dHJpYnV0ZSgidGFiaW5kZXgiKXx8dm9pZCAwPT09Yy50YWJJbmRleClyZXR1cm4hMTtsZXQgbD1j'@;
put 'LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKTtyZXR1cm4hKCFsfHxpc05hTihwYXJzZUludChsLDEwKSkpfWZ1bmN0aW9uIE5lZShjKXtpZighSGVlKGMpKXJldHVybiBudWxsO2NvbnN0IGw9cGFyc2VJbnQoYy5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iil8fCIiLDEwKTtyZXR1cm4gaXNOYU4o'@;
put 'bCk/LTE6bH1jbGFzcyBWZWV7Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChsKXt0aGlzLl9lbmFibGVkPWwsdGhpcy5fc3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNo'@;
put 'b3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmPSExKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWgsdGhpcy5faGFzQXR0YWNoZWQ9ITEsdGhp'@;
put 'cy5zdGFydEFuY2hvckxpc3RlbmVyPSgpPT50aGlzLmZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuZW5kQW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpLHRoaXMuX2VuYWJsZWQ9ITAsZnx8dGhpcy5hdHRhY2hBbmNob3JzKCl9ZGVzdHJv'@;
put 'eSgpe2NvbnN0IGw9dGhpcy5fc3RhcnRBbmNob3IsYT10aGlzLl9lbmRBbmNob3I7bCYmKGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuc3RhcnRBbmNob3JMaXN0ZW5lciksbC5yZW1vdmUoKSksYSYmKGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZW5kQW5j'@;
put 'aG9yTGlzdGVuZXIpLGEucmVtb3ZlKCkpLHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2VuZEFuY2hvcj1udWxsLHRoaXMuX2hhc0F0dGFjaGVkPSExfWF0dGFjaEFuY2hvcnMoKXtyZXR1cm4hIXRoaXMuX2hhc0F0dGFjaGVkfHwodGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57'@;
put 'dGhpcy5fc3RhcnRBbmNob3J8fCh0aGlzLl9zdGFydEFuY2hvcj10aGlzLl9jcmVhdGVBbmNob3IoKSx0aGlzLl9zdGFydEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSksdGhpcy5fZW5kQW5jaG9yfHwodGhpcy5fZW5kQW5jaG9yPXRo'@;
put 'aXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX2VuZEFuY2hvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lcikpfSksdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiYodGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLl9zdGFydEFu'@;
put 'Y2hvcix0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX2VuZEFuY2hvcix0aGlzLl9lbGVtZW50Lm5leHRTaWJsaW5nKSx0aGlzLl9oYXNBdHRhY2hlZD0hMCksdGhpcy5faGFzQXR0YWNoZWQpfWZvY3VzSW5pdGlhbEVsZW1lbnRXaGVu'@;
put 'UmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0luaXRpYWxFbGVtZW50KGwpKSl9KX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0'@;
put 'ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKSkpfSl9Zm9jdXNMYXN0VGFiYmFibGVFbGVtZW50V2hlblJlYWR5KGwpe3JldHVybiBuZXcgUHJvbWlzZShhPT57dGhpcy5fZXhlY3V0ZU9uU3RhYmxlKCgpPT5hKHRoaXMuZm9jdXNMYXN0VGFiYmFibGVF'@;
put 'bGVtZW50KGwpKSl9KX1fZ2V0UmVnaW9uQm91bmRhcnkobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtjZGstZm9jdXMtcmVnaW9uLSR7bH1dLCBbY2RrRm9jdXNSZWdpb24ke2x9XSwgW2Nkay1mb2N1cy0ke2x9XWApO3JldHVybiJzdGFydCI9PWw/YS5sZW5n'@;
put 'dGg/YVswXTp0aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50KTphLmxlbmd0aD9hW2EubGVuZ3RoLTFdOnRoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQodGhpcy5fZWxlbWVudCl9Zm9jdXNJbml0aWFsRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQu'@;
put 'cXVlcnlTZWxlY3RvcigiW2Nkay1mb2N1cy1pbml0aWFsXSwgW2Nka0ZvY3VzSW5pdGlhbF0iKTtpZihhKXtpZighdGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShhKSl7Y29uc3QgZD10aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhKTtyZXR1cm4gZD8uZm9jdXMobCksISFkfXJldHVy'@;
put 'biBhLmZvY3VzKGwpLCEwfXJldHVybiB0aGlzLmZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnQobCl9Zm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJzdGFydCIpO3JldHVybiBhJiZhLmZvY3VzKGwpLCEhYX1mb2N1c0xhc3RUYWJi'@;
put 'YWJsZUVsZW1lbnQobCl7Y29uc3QgYT10aGlzLl9nZXRSZWdpb25Cb3VuZGFyeSgiZW5kIik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWhhc0F0dGFjaGVkKCl7cmV0dXJuIHRoaXMuX2hhc0F0dGFjaGVkfV9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChsKXtpZih0aGlzLl9jaGVja2VyLmlz'@;
put 'Rm9jdXNhYmxlKGwpJiZ0aGlzLl9jaGVja2VyLmlzVGFiYmFibGUobCkpcmV0dXJuIGw7Y29uc3QgYT1sLmNoaWxkcmVuO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKXtjb25zdCBoPWFbZF0ubm9kZVR5cGU9PT10aGlzLl9kb2N1bWVudC5FTEVNRU5UX05PREU/dGhpcy5fZ2V0Rmlyc3RU'@;
put 'YWJiYWJsZUVsZW1lbnQoYVtkXSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25zdCBhPWwuY2hpbGRy'@;
put 'ZW47Zm9yKGxldCBkPWEubGVuZ3RoLTE7ZD49MDtkLS0pe2NvbnN0IGg9YVtkXS5ub2RlVHlwZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRMYXN0VGFiYmFibGVFbGVtZW50KGFbZF0pOm51bGw7aWYoaClyZXR1cm4gaH1yZXR1cm4gbnVsbH1fY3JlYXRlQW5jaG9y'@;
put 'KCl7Y29uc3QgbD10aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgodGhpcy5fZW5hYmxlZCxsKSxsLmNsYXNzTGlzdC5hZGQoImNkay12aXN1YWxseS1oaWRkZW4iKSxsLmNsYXNzTGlzdC5hZGQoImNkay1mb2N1cy10'@;
put 'cmFwLWFuY2hvciIpLGwuc2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIsInRydWUiKSxsfV90b2dnbGVBbmNob3JUYWJJbmRleChsLGEpe2w/YS5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiMCIpOmEucmVtb3ZlQXR0cmlidXRlKCJ0YWJpbmRleCIpfXRvZ2dsZUFuY2hvcnMobCl7dGhpcy5f'@;
put 'c3RhcnRBbmNob3ImJnRoaXMuX2VuZEFuY2hvciYmKHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fc3RhcnRBbmNob3IpLHRoaXMuX3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsdGhpcy5fZW5kQW5jaG9yKSl9X2V4ZWN1dGVPblN0YWJsZShsKXt0aGlzLl9uZ1pvbmUuaXNTdGFi'@;
put 'bGU/bCgpOnRoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEtoKDEpKS5zdWJzY3JpYmUobCl9fWxldCBZYmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fY2hlY2tlcj1hLHRoaXMuX25nWm9uZT1kLHRoaXMuX2RvY3VtZW50PWh9Y3JlYXRlKGEsZD0hMSl7cmV0dXJu'@;
put 'IG5ldyBWZWUoYSx0aGlzLl9jaGVja2VyLHRoaXMuX25nWm9uZSx0aGlzLl9kb2N1bWVudCxkKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKExiZSksZnIoUG8pLGZyKCRzKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cHJvdj1scih7dG9r'@;
put 'ZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpLGplZT0oKCk9PntjbGFzcyBje2dldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNUcmFwPy5lbmFibGVkfHwhMX1zZXQgZW5hYmxlZChhKXt0aGlzLmZvY3VzVHJhcCYmKHRoaXMuZm9j'@;
put 'dXNUcmFwLmVuYWJsZWQ9YSl9Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnRSZWY9YSx0aGlzLl9mb2N1c1RyYXBGYWN0b3J5PWQsdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwsVnIoZ0UpLmlzQnJvd3NlciYmKHRoaXMuZm9jdXNUcmFwPXRoaXMuX2ZvY3VzVHJh'@;
put 'cEZhY3RvcnkuY3JlYXRlKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwhMCkpfW5nT25EZXN0cm95KCl7dGhpcy5mb2N1c1RyYXA/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQmJih0aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQuZm9jdXMoKSx0'@;
put 'aGlzLl9wcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQ9bnVsbCl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5mb2N1c1RyYXA/LmF0dGFjaEFuY2hvcnMoKSx0aGlzLmF1dG9DYXB0dXJlJiZ0aGlzLl9jYXB0dXJlRm9jdXMoKX1uZ0RvQ2hlY2soKXt0aGlzLmZvY3VzVHJhcCYmIXRoaXMuZm9j'@;
put 'dXNUcmFwLmhhc0F0dGFjaGVkKCkmJnRoaXMuZm9jdXNUcmFwLmF0dGFjaEFuY2hvcnMoKX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEuYXV0b0NhcHR1cmU7ZCYmIWQuZmlyc3RDaGFuZ2UmJnRoaXMuYXV0b0NhcHR1cmUmJnRoaXMuZm9jdXNUcmFwPy5oYXNBdHRhY2hlZCgpJiZ0aGlzLl9j'@;
put 'YXB0dXJlRm9jdXMoKX1fY2FwdHVyZUZvY3VzKCl7dGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PWZ1bmN0aW9uIGxiZSgpe2xldCBjPXR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50P2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQ6bnVsbDtmb3IoO2MmJmMuc2hhZG93Um9vdDspe2Nv'@;
put 'bnN0IGw9Yy5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7aWYobD09PWMpYnJlYWs7Yz1sfXJldHVybiBjfSgpLHRoaXMuZm9jdXNUcmFwPy5mb2N1c0luaXRpYWxFbGVtZW50V2hlblJlYWR5KCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShz'@;
put 'dCgkaSksc3QoWWJlKSxzdCgkcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0saW5wdXRzOntlbmFibGVkOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzIiwiZW5hYmxlZCIs'@;
put 'eDBdLGF1dG9DYXB0dXJlOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiLCJhdXRvQ2FwdHVyZSIseDBdfSxleHBvcnRBczpbImNka1RyYXBGb2N1cyJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W1EyLEJhXX0pfXJldHVybiBjfSkoKTtm'@;
put 'dW5jdGlvbiBCZWUoYyxsPTApe3JldHVybiBmdW5jdGlvbiAkYmUoYyl7cmV0dXJuIWlzTmFOKHBhcnNlRmxvYXQoYykpJiYhaXNOYU4oTnVtYmVyKGMpKX0oYyk/TnVtYmVyKGMpOmx9ZnVuY3Rpb24gcDEoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiAkaT9jLm5hdGl2ZUVsZW1lbnQ6Y31jb25z'@;
put 'dCBfYj17c2NoZWR1bGUoYyl7bGV0IGw9cmVxdWVzdEFuaW1hdGlvbkZyYW1lLGE9Y2FuY2VsQW5pbWF0aW9uRnJhbWU7Y29uc3R7ZGVsZWdhdGU6ZH09X2I7ZCYmKGw9ZC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1kLmNhbmNlbEFuaW1hdGlvbkZyYW1lKTtjb25zdCBoPWwoZj0+e2E9dm9p'@;
put 'ZCAwLGMoZil9KTtyZXR1cm4gbmV3IFh0KCgpPT5hPy4oaCkpfSxyZXF1ZXN0QW5pbWF0aW9uRnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09X2I7cmV0dXJuKGw/LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8cmVxdWVzdEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sY2FuY2VsQW5pbWF0aW9u'@;
put 'RnJhbWUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09X2I7cmV0dXJuKGw/LmNhbmNlbEFuaW1hdGlvbkZyYW1lfHxjYW5jZWxBbmltYXRpb25GcmFtZSkoLi4uYyl9LGRlbGVnYXRlOnZvaWQgMH0sWWVlPW5ldyBjbGFzcyBYYmUgZXh0ZW5kcyBMSHtmbHVzaChsKXt0aGlzLl9hY3RpdmU9ITA7'@;
put 'Y29uc3QgYT10aGlzLl9zY2hlZHVsZWQ7dGhpcy5fc2NoZWR1bGVkPXZvaWQgMDtjb25zdHthY3Rpb25zOmR9PXRoaXM7bGV0IGg7bD1sfHxkLnNoaWZ0KCk7ZG97aWYoaD1sLmV4ZWN1dGUobC5zdGF0ZSxsLmRlbGF5KSlicmVha313aGlsZSgobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQo'@;
put 'KSk7aWYodGhpcy5fYWN0aXZlPSExLGgpe2Zvcig7KGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCk7KWwudW5zdWJzY3JpYmUoKTt0aHJvdyBofX19KGNsYXNzIEtiZSBleHRlbmRzIERIe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1h'@;
put 'fXJlcXVlc3RBc3luY0lkKGwsYSxkPTApe3JldHVybiBudWxsIT09ZCYmZD4wP3N1cGVyLnJlcXVlc3RBc3luY0lkKGwsYSxkKToobC5hY3Rpb25zLnB1c2godGhpcyksbC5fc2NoZWR1bGVkfHwobC5fc2NoZWR1bGVkPV9iLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+bC5mbHVzaCh2b2lk'@;
put 'IDApKSkpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe3ZhciBoO2lmKG51bGwhPWQ/ZD4wOnRoaXMuZGVsYXk+MClyZXR1cm4gc3VwZXIucmVjeWNsZUFzeW5jSWQobCxhLGQpO2NvbnN0e2FjdGlvbnM6Zn09bDtudWxsIT1hJiYobnVsbD09PShoPWZbZi5sZW5ndGgtMV0pfHx2b2lkIDA9PT1o'@;
put 'P3ZvaWQgMDpoLmlkKSE9PWEmJihfYi5jYW5jZWxBbmltYXRpb25GcmFtZShhKSxsLl9zY2hlZHVsZWQ9dm9pZCAwKX19KTtsZXQgUEgsSmJlPTE7Y29uc3QgeUU9e307ZnVuY3Rpb24gemVlKGMpe3JldHVybiBjIGluIHlFJiYoZGVsZXRlIHlFW2NdLCEwKX1jb25zdCBRYmU9e3NldEltbWVk'@;
put 'aWF0ZShjKXtjb25zdCBsPUpiZSsrO3JldHVybiB5RVtsXT0hMCxQSHx8KFBIPVByb21pc2UucmVzb2x2ZSgpKSxQSC50aGVuKCgpPT56ZWUobCkmJmMoKSksbH0sY2xlYXJJbW1lZGlhdGUoYyl7emVlKGMpfX0se3NldEltbWVkaWF0ZTpld2UsY2xlYXJJbW1lZGlhdGU6dHdlfT1RYmUsYkU9'@;
put 'e3NldEltbWVkaWF0ZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1iRTtyZXR1cm4obD8uc2V0SW1tZWRpYXRlfHxld2UpKC4uLmMpfSxjbGVhckltbWVkaWF0ZShjKXtjb25zdHtkZWxlZ2F0ZTpsfT1iRTtyZXR1cm4obD8uY2xlYXJJbW1lZGlhdGV8fHR3ZSkoYyl9LGRlbGVnYXRlOnZvaWQg'@;
put 'MH07bmV3IGNsYXNzIHJ3ZSBleHRlbmRzIExIe2ZsdXNoKGwpe3RoaXMuX2FjdGl2ZT0hMDtjb25zdCBhPXRoaXMuX3NjaGVkdWxlZDt0aGlzLl9zY2hlZHVsZWQ9dm9pZCAwO2NvbnN0e2FjdGlvbnM6ZH09dGhpcztsZXQgaDtsPWx8fGQuc2hpZnQoKTtkb3tpZihoPWwuZXhlY3V0ZShsLnN0'@;
put 'YXRlLGwuZGVsYXkpKWJyZWFrfXdoaWxlKChsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpKTtpZih0aGlzLl9hY3RpdmU9ITEsaCl7Zm9yKDsobD1kWzBdKSYmbC5pZD09PWEmJmQuc2hpZnQoKTspbC51bnN1YnNjcmliZSgpO3Rocm93IGh9fX0oY2xhc3MgbndlIGV4dGVuZHMgREh7Y29u'@;
put 'c3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHRoaXMuc2NoZWR1bGVyPWwsdGhpcy53b3JrPWF9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIG51bGwhPT1kJiZkPjA/c3VwZXIucmVxdWVzdEFzeW5jSWQobCxhLGQpOihsLmFjdGlvbnMucHVzaCh0aGlzKSxsLl9zY2hlZHVsZWR8fChs'@;
put 'Ll9zY2hlZHVsZWQ9YkUuc2V0SW1tZWRpYXRlKGwuZmx1c2guYmluZChsLHZvaWQgMCkpKSl9cmVjeWNsZUFzeW5jSWQobCxhLGQ9MCl7dmFyIGg7aWYobnVsbCE9ZD9kPjA6dGhpcy5kZWxheT4wKXJldHVybiBzdXBlci5yZWN5Y2xlQXN5bmNJZChsLGEsZCk7Y29uc3R7YWN0aW9uczpmfT1s'@;
put 'O251bGwhPWEmJihudWxsPT09KGg9ZltmLmxlbmd0aC0xXSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaWQpIT09YSYmKGJFLmNsZWFySW1tZWRpYXRlKGEpLGwuX3NjaGVkdWxlZD09PWEmJihsLl9zY2hlZHVsZWQ9dm9pZCAwKSl9fSk7ZnVuY3Rpb24gVWVlKGM9MCxsLGE9R3llKXtsZXQgZD0t'@;
put 'MTtyZXR1cm4gbnVsbCE9bCYmKEVLKGwpP2E9bDpkPWwpLG5ldyB3bihoPT57bGV0IGY9ZnVuY3Rpb24gc3dlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYmIWlzTmFOKGMpfShjKT8rYy1hLm5vdygpOmM7ZjwwJiYoZj0wKTtsZXQgdj0wO3JldHVybiBhLnNjaGVkdWxlKGZ1bmN0aW9u'@;
put 'KCl7aC5jbG9zZWR8fChoLm5leHQodisrKSwwPD1kP3RoaXMuc2NoZWR1bGUodm9pZCAwLGQpOmguY29tcGxldGUoKSl9LGYpfSl9ZnVuY3Rpb24gWmVlKGMsbD1oRSl7cmV0dXJuIGZ1bmN0aW9uIG93ZShjKXtyZXR1cm4geWkoKGwsYSk9PntsZXQgZD0hMSxoPW51bGwsZj1udWxsLHY9ITE7'@;
put 'Y29uc3QgVD0oKT0+e2lmKGY/LnVuc3Vic2NyaWJlKCksZj1udWxsLGQpe2Q9ITE7Y29uc3QgcmU9aDtoPW51bGwsYS5uZXh0KHJlKX12JiZhLmNvbXBsZXRlKCl9LFk9KCk9PntmPW51bGwsdiYmYS5jb21wbGV0ZSgpfTtsLnN1YnNjcmliZSgkcihhLHJlPT57ZD0hMCxoPXJlLGZ8fGMxKGMo'@;
put 'cmUpKS5zdWJzY3JpYmUoZj0kcihhLFQsWSkpfSwoKT0+e3Y9ITAsKCFkfHwhZnx8Zi5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9PlVlZShjLGwpKX1sZXQgbHdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPWQs'@;
put 'dGhpcy5fc2Nyb2xsZWQ9bmV3IG5uLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX3Njcm9sbGVkQ291bnQ9MCx0aGlzLnNjcm9sbENvbnRhaW5lcnM9bmV3IE1hcCx0aGlzLl9kb2N1bWVudD1ofXJlZ2lzdGVyKGEpe3RoaXMuc2Nyb2xsQ29udGFpbmVycy5oYXMoYSl8fHRo'@;
put 'aXMuc2Nyb2xsQ29udGFpbmVycy5zZXQoYSxhLmVsZW1lbnRTY3JvbGxlZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChhKSkpfWRlcmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGEpO2QmJihkLnVuc3Vic2NyaWJlKCksdGhpcy5zY3Jv'@;
put 'bGxDb250YWluZXJzLmRlbGV0ZShhKSl9c2Nyb2xsZWQoYT0yMCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgd24oZD0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBoPWE+MD90aGlzLl9zY3JvbGxlZC5waXBl'@;
put 'KFplZShhKSkuc3Vic2NyaWJlKGQpOnRoaXMuX3Njcm9sbGVkLnN1YnNjcmliZShkKTtyZXR1cm4gdGhpcy5fc2Nyb2xsZWRDb3VudCsrLCgpPT57aC51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbGVkQ291bnQtLSx0aGlzLl9zY3JvbGxlZENvdW50fHx0aGlzLl9yZW1vdmVHbG9iYWxMaXN0'@;
put 'ZW5lcigpfX0pOk5vKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpLHRoaXMuc2Nyb2xsQ29udGFpbmVycy5mb3JFYWNoKChhLGQpPT50aGlzLmRlcmVnaXN0ZXIoZCkpLHRoaXMuX3Njcm9sbGVkLmNvbXBsZXRlKCl9YW5jZXN0b3JTY3JvbGxlZChhLGQpe2Nv'@;
put 'bnN0IGg9dGhpcy5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSk7cmV0dXJuIHRoaXMuc2Nyb2xsZWQoZCkucGlwZShIYShmPT4hZnx8aC5pbmRleE9mKGYpPi0xKSl9Z2V0QW5jZXN0b3JTY3JvbGxDb250YWluZXJzKGEpe2NvbnN0IGQ9W107cmV0dXJuIHRoaXMuc2Nyb2xsQ29udGFp'@;
put 'bmVycy5mb3JFYWNoKChoLGYpPT57dGhpcy5fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChmLGEpJiZkLnB1c2goZil9KSxkfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fc2Nyb2xsYWJsZUNvbnRhaW5zRWxlbWVudChhLGQpe2xldCBo'@;
put 'PXAxKGQpLGY9YS5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudDtkb3tpZihoPT1mKXJldHVybiEwfXdoaWxlKGg9aC5wYXJlbnRFbGVtZW50KTtyZXR1cm4hMX1fYWRkR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249dGhpcy5fbmdab25lLnJ1bk91dHNpZGVB'@;
put 'bmd1bGFyKCgpPT5RaCh0aGlzLl9nZXRXaW5kb3coKS5kb2N1bWVudCwic2Nyb2xsIikuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxlZC5uZXh0KCkpKX1fcmVtb3ZlR2xvYmFsTGlzdGVuZXIoKXt0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24mJih0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb24u'@;
put 'dW5zdWJzY3JpYmUoKSx0aGlzLl9nbG9iYWxTdWJzY3JpcHRpb249bnVsbCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihQbyksZnIoZ0UpLGZyKCRzLDgpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCksdXdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3BsYXRmb3JtPWEsdGhpcy5fY2hhbmdlPW5ldyBubix0aGlzLl9jaGFuZ2VMaXN0ZW5lcj1mPT57dGhpcy5fY2hhbmdlLm5leHQo'@;
put 'Zil9LHRoaXMuX2RvY3VtZW50PWgsZC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2lmKGEuaXNCcm93c2VyKXtjb25zdCBmPXRoaXMuX2dldFdpbmRvdygpO2YuYWRkRXZlbnRMaXN0ZW5lcigicmVzaXplIix0aGlzLl9jaGFuZ2VMaXN0ZW5lciksZi5hZGRFdmVudExpc3RlbmVyKCJvcmllbnRh'@;
put 'dGlvbmNoYW5nZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpfXRoaXMuY2hhbmdlKCkuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3cG9ydFNpemU9bnVsbCl9KX1uZ09uRGVzdHJveSgpe2lmKHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcil7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTthLnJlbW92'@;
put 'ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLl9jaGFuZ2UuY29tcGxldGUoKX1nZXRWaWV3cG9ydFNpemUoKXt0aGlzLl92aWV3cG9y'@;
put 'dFNpemV8fHRoaXMuX3VwZGF0ZVZpZXdwb3J0U2l6ZSgpO2NvbnN0IGE9e3dpZHRoOnRoaXMuX3ZpZXdwb3J0U2l6ZS53aWR0aCxoZWlnaHQ6dGhpcy5fdmlld3BvcnRTaXplLmhlaWdodH07cmV0dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcnx8KHRoaXMuX3ZpZXdwb3J0U2l6ZT1udWxs'@;
put 'KSxhfWdldFZpZXdwb3J0UmVjdCgpe2NvbnN0IGE9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCkse3dpZHRoOmQsaGVpZ2h0Omh9PXRoaXMuZ2V0Vmlld3BvcnRTaXplKCk7cmV0dXJue3RvcDphLnRvcCxsZWZ0OmEubGVmdCxib3R0b206YS50b3AraCxyaWdodDphLmxlZnQrZCxo'@;
put 'ZWlnaHQ6aCx3aWR0aDpkfX1nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7aWYoIXRoaXMuX3BsYXRmb3JtLmlzQnJvd3NlcilyZXR1cm57dG9wOjAsbGVmdDowfTtjb25zdCBhPXRoaXMuX2RvY3VtZW50LGQ9dGhpcy5fZ2V0V2luZG93KCksaD1hLmRvY3VtZW50RWxlbWVudCxmPWguZ2V0'@;
put 'Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDotZi50b3B8fGEuYm9keS5zY3JvbGxUb3B8fGQuc2Nyb2xsWXx8aC5zY3JvbGxUb3B8fDAsbGVmdDotZi5sZWZ0fHxhLmJvZHkuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxYfHxoLnNjcm9sbExlZnR8fDB9fWNoYW5nZShhPTIwKXtyZXR1cm4g'@;
put 'YT4wP3RoaXMuX2NoYW5nZS5waXBlKFplZShhKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9ydFNpemU9'@;
put 'dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDphLmlubmVyV2lkdGgsaGVpZ2h0OmEuaW5uZXJIZWlnaHR9Ont3aWR0aDowLGhlaWdodDowfX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKGdFKSxmcihQbyksZnIoJHMsOCkpfTtz'@;
put 'dGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKSxkd2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0'@;
put 'aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe30pfXJldHVybiBjfSkoKTtjb25zdCBmd2U9bmV3IFlyKCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gcHdlKCl7cmV0dXJuIFZyKCRzKX19'@;
put 'KSxtd2U9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEpKSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IFdlZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'dmFsdWU9Imx0ciIsdGhpcy5jaGFuZ2U9bmV3IElyLGEmJih0aGlzLnZhbHVlPWZ1bmN0aW9uIGd3ZShjKXtjb25zdCBsPWM/LnRvTG93ZXJDYXNlKCl8fCIiO3JldHVybiJhdXRvIj09PWwmJnR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3I/Lmxhbmd1YWdlP213ZS50ZXN0KG5hdmln'@;
put 'YXRvci5sYW5ndWFnZSk/InJ0bCI6Imx0ciI6InJ0bCI9PT1sPyJydGwiOiJsdHIifSgoYS5ib2R5P2EuYm9keS5kaXI6bnVsbCl8fChhLmRvY3VtZW50RWxlbWVudD9hLmRvY3VtZW50RWxlbWVudC5kaXI6bnVsbCl8fCJsdHIiKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmNoYW5nZS5jb21wbGV0'@;
put 'ZSgpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoZndlLDgpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7ZnVuY3Rp'@;
put 'b24gRkgoYyxsLGEpe2ZvcihsZXQgZCBpbiBsKWlmKGwuaGFzT3duUHJvcGVydHkoZCkpe2NvbnN0IGg9bFtkXTtoP2Muc2V0UHJvcGVydHkoZCxoLGE/LmhhcyhkKT8iaW1wb3J0YW50IjoiIik6Yy5yZW1vdmVQcm9wZXJ0eShkKX1yZXR1cm4gY31mdW5jdGlvbiB5NyhjLGwpe2NvbnN0IGE9'@;
put 'bD8iIjoibm9uZSI7RkgoYy5zdHlsZSx7InRvdWNoLWFjdGlvbiI6bD8iIjoibm9uZSIsIi13ZWJraXQtdXNlci1kcmFnIjpsPyIiOiJub25lIiwiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIjpsPyIiOiJ0cmFuc3BhcmVudCIsInVzZXItc2VsZWN0IjphLCItbXMtdXNlci1zZWxlY3Qi'@;
put 'OmEsIi13ZWJraXQtdXNlci1zZWxlY3QiOmEsIi1tb3otdXNlci1zZWxlY3QiOmF9KX1mdW5jdGlvbiBHZWUoYyxsLGEpe0ZIKGMuc3R5bGUse3Bvc2l0aW9uOmw/IiI6ImZpeGVkIix0b3A6bD8iIjoiMCIsb3BhY2l0eTpsPyIiOiIwIixsZWZ0Omw/IiI6Ii05OTllbSJ9LGEpfWZ1bmN0aW9u'@;
put 'IHdFKGMsbCl7cmV0dXJuIGwmJiJub25lIiE9bD9jKyIgIitsOmN9ZnVuY3Rpb24gJGVlKGMsbCl7Yy5zdHlsZS53aWR0aD1gJHtsLndpZHRofXB4YCxjLnN0eWxlLmhlaWdodD1gJHtsLmhlaWdodH1weGAsYy5zdHlsZS50cmFuc2Zvcm09TUUobC5sZWZ0LGwudG9wKX1mdW5jdGlvbiBNRShj'@;
put 'LGwpe3JldHVybmB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoYyl9cHgsICR7TWF0aC5yb3VuZChsKX1weCwgMClgfWZ1bmN0aW9uIEhIKGMpe2NvbnN0IGw9Yy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOmwudG9wLHJpZ2h0OmwucmlnaHQsYm90dG9tOmwuYm90dG9tLGxl'@;
put 'ZnQ6bC5sZWZ0LHdpZHRoOmwud2lkdGgsaGVpZ2h0OmwuaGVpZ2h0LHg6bC54LHk6bC55fX1mdW5jdGlvbiBOSChjLGwsYSl7Y29uc3R7dG9wOmQsYm90dG9tOmgsbGVmdDpmLHJpZ2h0OnZ9PWM7cmV0dXJuIGE+PWQmJmE8PWgmJmw+PWYmJmw8PXZ9ZnVuY3Rpb24gdmIoYyxsLGEpe2MudG9w'@;
put 'Kz1sLGMuYm90dG9tPWMudG9wK2MuaGVpZ2h0LGMubGVmdCs9YSxjLnJpZ2h0PWMubGVmdCtjLndpZHRofWZ1bmN0aW9uIHFlZShjLGwsYSxkKXtjb25zdHt0b3A6aCxyaWdodDpmLGJvdHRvbTp2LGxlZnQ6VCx3aWR0aDpZLGhlaWdodDpyZX09YyxmZT1ZKmwsX2U9cmUqbDtyZXR1cm4gZD5o'@;
put 'LV9lJiZkPHYrX2UmJmE+VC1mZSYmYTxmK2ZlfWNsYXNzIEtlZXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMucG9zaXRpb25zPW5ldyBNYXB9Y2xlYXIoKXt0aGlzLnBvc2l0aW9ucy5jbGVhcigpfWNhY2hlKGwpe3RoaXMuY2xlYXIoKSx0aGlzLnBvc2l0aW9ucy5zZXQo'@;
put 'dGhpcy5fZG9jdW1lbnQse3Njcm9sbFBvc2l0aW9uOnRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfSksbC5mb3JFYWNoKGE9Pnt0aGlzLnBvc2l0aW9ucy5zZXQoYSx7c2Nyb2xsUG9zaXRpb246e3RvcDphLnNjcm9sbFRvcCxsZWZ0OmEuc2Nyb2xsTGVmdH0sY2xpZW50UmVjdDpI'@;
put 'SChhKX0pfSl9aGFuZGxlU2Nyb2xsKGwpe2NvbnN0IGE9dkUobCksZD10aGlzLnBvc2l0aW9ucy5nZXQoYSk7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1kLnNjcm9sbFBvc2l0aW9uO2xldCBmLHY7aWYoYT09PXRoaXMuX2RvY3VtZW50KXtjb25zdCByZT10aGlzLmdldFZpZXdwb3J0U2Ny'@;
put 'b2xsUG9zaXRpb24oKTtmPXJlLnRvcCx2PXJlLmxlZnR9ZWxzZSBmPWEuc2Nyb2xsVG9wLHY9YS5zY3JvbGxMZWZ0O2NvbnN0IFQ9aC50b3AtZixZPWgubGVmdC12O3JldHVybiB0aGlzLnBvc2l0aW9ucy5mb3JFYWNoKChyZSxmZSk9PntyZS5jbGllbnRSZWN0JiZhIT09ZmUmJmEuY29udGFp'@;
put 'bnMoZmUpJiZ2YihyZS5jbGllbnRSZWN0LFQsWSl9KSxoLnRvcD1mLGgubGVmdD12LHt0b3A6VCxsZWZ0Oll9fWdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm57dG9wOndpbmRvdy5zY3JvbGxZLGxlZnQ6d2luZG93LnNjcm9sbFh9fX1mdW5jdGlvbiBYZWUoYyl7Y29uc3QgbD1j'@;
put 'LmNsb25lTm9kZSghMCksYT1sLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZF0iKSxkPWMubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtsLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grKylhW2hdLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTtyZXR1cm4iY2FudmFzIj09'@;
put 'PWQ/ZXRlKGMsbCk6KCJpbnB1dCI9PT1kfHwic2VsZWN0Ij09PWR8fCJ0ZXh0YXJlYSI9PT1kKSYmUWVlKGMsbCksSmVlKCJjYW52YXMiLGMsbCxldGUpLEplZSgiaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QiLGMsbCxRZWUpLGx9ZnVuY3Rpb24gSmVlKGMsbCxhLGQpe2NvbnN0IGg9bC5xdWVy'@;
put 'eVNlbGVjdG9yQWxsKGMpO2lmKGgubGVuZ3RoKXtjb25zdCBmPWEucXVlcnlTZWxlY3RvckFsbChjKTtmb3IobGV0IHY9MDt2PGgubGVuZ3RoO3YrKylkKGhbdl0sZlt2XSl9fWxldCBfd2U9MDtmdW5jdGlvbiBRZWUoYyxsKXsiZmlsZSIhPT1sLnR5cGUmJihsLnZhbHVlPWMudmFsdWUpLCJy'@;
put 'YWRpbyI9PT1sLnR5cGUmJmwubmFtZSYmKGwubmFtZT1gbWF0LWNsb25lLSR7bC5uYW1lfS0ke193ZSsrfWApfWZ1bmN0aW9uIGV0ZShjLGwpe2NvbnN0IGE9bC5nZXRDb250ZXh0KCIyZCIpO2lmKGEpdHJ5e2EuZHJhd0ltYWdlKGMsMCwwKX1jYXRjaHt9fWZ1bmN0aW9uIHR0ZShjLGwpe2Nv'@;
put 'bnN0IGE9Yy5yb290Tm9kZXM7aWYoMT09PWEubGVuZ3RoJiZhWzBdLm5vZGVUeXBlPT09bC5FTEVNRU5UX05PREUpcmV0dXJuIGFbMF07Y29uc3QgZD1sLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBhLmZvckVhY2goaD0+ZC5hcHBlbmRDaGlsZChoKSksZH1mdW5jdGlvbiBudGUoYyl7'@;
put 'Y29uc3QgbD1jLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigibXMiKT4tMT8xOjFlMztyZXR1cm4gcGFyc2VGbG9hdChjKSpsfWZ1bmN0aW9uIFZIKGMsbCl7cmV0dXJuIGMuZ2V0UHJvcGVydHlWYWx1ZShsKS5zcGxpdCgiLCIpLm1hcChkPT5kLnRyaW0oKSl9Y29uc3QgeXdlPW5ldyBTZXQoWyJw'@;
put 'b3NpdGlvbiJdKTtjbGFzcyBid2V7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsVCxZLHJlKXt0aGlzLl9kb2N1bWVudD1sLHRoaXMuX3Jvb3RFbGVtZW50PWEsdGhpcy5fZGlyZWN0aW9uPWQsdGhpcy5faW5pdGlhbERvbVJlY3Q9aCx0aGlzLl9wcmV2aWV3VGVtcGxhdGU9Zix0aGlzLl9wcmV2'@;
put 'aWV3Q2xhc3M9dix0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZT1ULHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09WSx0aGlzLl96SW5kZXg9cmV9YXR0YWNoKGwpe3RoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlldygpLGwuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksInNob3dQb3Bv'@;
put 'dmVyImluIHRoaXMuX3ByZXZpZXcmJnRoaXMuX3ByZXZpZXcuc2hvd1BvcG92ZXIoKX1kZXN0cm95KCl7dGhpcy5fcHJldmlldy5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PW51bGx9'@;
put 'c2V0VHJhbnNmb3JtKGwpe3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPWx9Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9YWRkQ2xhc3MobCl7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKGwpfWdldFRy'@;
put 'YW5zaXRpb25EdXJhdGlvbigpe3JldHVybiBmdW5jdGlvbiB2d2UoYyl7Y29uc3QgbD1nZXRDb21wdXRlZFN0eWxlKGMpLGE9VkgobCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLGQ9YS5maW5kKFQ9PiJ0cmFuc2Zvcm0iPT09VHx8ImFsbCI9PT1UKTtpZighZClyZXR1cm4gMDtjb25zdCBoPWEu'@;
put 'aW5kZXhPZihkKSxmPVZIKGwsInRyYW5zaXRpb24tZHVyYXRpb24iKSx2PVZIKGwsInRyYW5zaXRpb24tZGVsYXkiKTtyZXR1cm4gbnRlKGZbaF0pK250ZSh2W2hdKX0odGhpcy5fcHJldmlldyl9YWRkRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcihs'@;
put 'LGEpfXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhKX1fY3JlYXRlUHJldmlldygpe2NvbnN0IGw9dGhpcy5fcHJldmlld1RlbXBsYXRlLGE9dGhpcy5fcHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYo'@;
put 'ZCYmbCl7Y29uc3QgZj1sLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsRG9tUmVjdDpudWxsLHY9bC52aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7di5kZXRlY3RDaGFuZ2VzKCksaD10dGUodix0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld0VtYmVkZGVk'@;
put 'Vmlldz12LGwubWF0Y2hTaXplPyRlZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPU1FKHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPVhlZSh0aGlzLl9yb290RWxlbWVudCksJGVlKGgsdGhpcy5faW5pdGlhbERvbVJlY3Qp'@;
put 'LHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtKTtyZXR1cm4gRkgoaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgi'@;
put 'OnRoaXMuX3pJbmRleCsiIn0seXdlKSx5NyhoLCExKSxoLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXByZXZpZXciKSxoLnNldEF0dHJpYnV0ZSgicG9wb3ZlciIsIm1hbnVhbCIpLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuX2RpcmVjdGlvbiksYSYmKEFycmF5LmlzQXJyYXkoYSk/YS5m'@;
put 'b3JFYWNoKGY9PmguY2xhc3NMaXN0LmFkZChmKSk6aC5jbGFzc0xpc3QuYWRkKGEpKSxofX1jb25zdCBydGU9djcoe3Bhc3NpdmU6ITB9KSxDRT12Nyh7cGFzc2l2ZTohMX0pLGl0ZT12Nyh7cGFzc2l2ZTohMSxjYXB0dXJlOiEwfSksb3RlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBN'@;
put 'd2V7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLl9kcm9wQ29udGFpbmVyfHwhdGhpcy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2whPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWwsdGhpcy5fdG9nZ2xlTmF0'@;
put 'aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChhPT55NyhhLGwpKSl9Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMuX2NvbmZpZz1hLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuX2RyYWdEcm9w'@;
put 'UmVnaXN0cnk9dix0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMSx0aGlzLl9tb3ZlRXZlbnRzPW5ldyBubix0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj1YdC5FTVBU'@;
put 'WSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249WHQuRU1QVFksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPVh0LkVNUFRZLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1YdC5FTVBUWSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bnVsbCx0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVk'@;
put 'PSEwLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzPW5ldyBTZXQsdGhpcy5fZGlyZWN0aW9uPSJsdHIiLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IG5uLHRoaXMuc3RhcnRlZD1uZXcgbm4sdGhpcy5y'@;
put 'ZWxlYXNlZD1uZXcgbm4sdGhpcy5lbmRlZD1uZXcgbm4sdGhpcy5lbnRlcmVkPW5ldyBubix0aGlzLmV4aXRlZD1uZXcgbm4sdGhpcy5kcm9wcGVkPW5ldyBubix0aGlzLm1vdmVkPXRoaXMuX21vdmVFdmVudHMsdGhpcy5fcG9pbnRlckRvd249VD0+e2lmKHRoaXMuYmVmb3JlU3RhcnRlZC5u'@;
put 'ZXh0KCksdGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IFk9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKFQpO1kmJiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKFkpJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShZLFQpfWVsc2UgdGhpcy5kaXNhYmxlZHx8'@;
put 'dGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZSh0aGlzLl9yb290RWxlbWVudCxUKX0sdGhpcy5fcG9pbnRlck1vdmU9VD0+e2NvbnN0IFk9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKFQpO2lmKCF0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpe2lmKE1hdGguYWJzKFkueC10aGlz'@;
put 'Ll9waWNrdXBQb3NpdGlvbk9uUGFnZS54KStNYXRoLmFicyhZLnktdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSk+PXRoaXMuX2NvbmZpZy5kcmFnU3RhcnRUaHJlc2hvbGQpe2NvbnN0IFdlPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVs'@;
put 'YXkoVCksSmU9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighV2UpcmV0dXJuIHZvaWQgdGhpcy5fZW5kRHJhZ1NlcXVlbmNlKFQpOyghSmV8fCFKZS5pc0RyYWdnaW5nKCkmJiFKZS5pc1JlY2VpdmluZygpKSYmKFQuY2FuY2VsYWJsZSYmVC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2hhc1N0YXJ0'@;
put 'ZWREcmFnZ2luZz0hMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERyYWdTZXF1ZW5jZShUKSkpfXJldHVybn1ULmNhbmNlbGFibGUmJlQucHJldmVudERlZmF1bHQoKTtjb25zdCByZT10aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihZKTtpZih0aGlzLl9oYXNN'@;
put 'b3ZlZD0hMCx0aGlzLl9sYXN0S25vd25Qb2ludGVyUG9zaXRpb249WSx0aGlzLl91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEocmUpLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcihyZSxZKTtlbHNle2NvbnN0IGZlPXRoaXMuY29uc3RyYWlu'@;
put 'UG9zaXRpb24/dGhpcy5faW5pdGlhbERvbVJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsX2U9dGhpcy5fYWN0aXZlVHJhbnNmb3JtO19lLng9cmUueC1mZS54K3RoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueCxfZS55PXJlLnktZmUueSt0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLnksdGhp'@;
put 'cy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShfZS54LF9lLnkpfXRoaXMuX21vdmVFdmVudHMub2JzZXJ2ZXJzLmxlbmd0aCYmdGhpcy5fbmdab25lLnJ1bigoKT0+e3RoaXMuX21vdmVFdmVudHMubmV4dCh7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOnJlLGV2ZW50OlQsZGlzdGFu'@;
put 'Y2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKHJlKSxkZWx0YTp0aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGF9KX0pfSx0aGlzLl9wb2ludGVyVXA9VD0+e3RoaXMuX2VuZERyYWdTZXF1ZW5jZShUKX0sdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0PVQ9PntpZih0aGlzLl9oYW5kbGVzLmxlbmd0aCl7'@;
put 'Y29uc3QgWT10aGlzLl9nZXRUYXJnZXRIYW5kbGUoVCk7WSYmIXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMoWSkmJiF0aGlzLmRpc2FibGVkJiZULnByZXZlbnREZWZhdWx0KCl9ZWxzZSB0aGlzLmRpc2FibGVkfHxULnByZXZlbnREZWZhdWx0KCl9LHRoaXMud2l0aFJvb3RFbGVtZW50KGwp'@;
put 'LndpdGhQYXJlbnQoYS5wYXJlbnREcmFnUmVmfHxudWxsKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IEtlZShkKSx2LnJlZ2lzdGVyRHJhZ0l0ZW0odGhpcyl9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyfWdldFJvb3RFbGVtZW50KCl7cmV0dXJu'@;
put 'IHRoaXMuX3Jvb3RFbGVtZW50fWdldFZpc2libGVFbGVtZW50KCl7cmV0dXJuIHRoaXMuaXNEcmFnZ2luZygpP3RoaXMuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6dGhpcy5nZXRSb290RWxlbWVudCgpfXdpdGhIYW5kbGVzKGwpe3RoaXMuX2hhbmRsZXM9bC5tYXAoZD0+cDEoZCkpLHRoaXMu'@;
put 'X2hhbmRsZXMuZm9yRWFjaChkPT55NyhkLHRoaXMuZGlzYWJsZWQpKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCk7Y29uc3QgYT1uZXcgU2V0O3JldHVybiB0aGlzLl9kaXNhYmxlZEhhbmRsZXMuZm9yRWFjaChkPT57dGhpcy5faGFuZGxlcy5pbmRleE9mKGQpPi0xJiZh'@;
put 'LmFkZChkKX0pLHRoaXMuX2Rpc2FibGVkSGFuZGxlcz1hLHRoaXN9d2l0aFByZXZpZXdUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcHJldmlld1RlbXBsYXRlPWwsdGhpc313aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShsKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1sLHRoaXN9'@;
put 'd2l0aFJvb3RFbGVtZW50KGwpe2NvbnN0IGE9cDEobCk7cmV0dXJuIGEhPT10aGlzLl9yb290RWxlbWVudCYmKHRoaXMuX3Jvb3RFbGVtZW50JiZ0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFy'@;
put 'KCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLHRoaXMuX3BvaW50ZXJEb3duLENFKSxhLmFkZEV2ZW50TGlzdGVuZXIoInRvdWNoc3RhcnQiLHRoaXMuX3BvaW50ZXJEb3duLHJ0ZSksYS5hZGRFdmVudExpc3RlbmVyKCJkcmFnc3RhcnQiLHRoaXMuX25hdGl2ZURyYWdTdGFy'@;
put 'dCxDRSl9KSx0aGlzLl9pbml0aWFsVHJhbnNmb3JtPXZvaWQgMCx0aGlzLl9yb290RWxlbWVudD1hKSx0eXBlb2YgU1ZHRWxlbWVudDwidSImJnRoaXMuX3Jvb3RFbGVtZW50IGluc3RhbmNlb2YgU1ZHRWxlbWVudCYmKHRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9yb290RWxlbWVudC5v'@;
put 'd25lclNWR0VsZW1lbnQpLHRoaXN9d2l0aEJvdW5kYXJ5RWxlbWVudChsKXtyZXR1cm4gdGhpcy5fYm91bmRhcnlFbGVtZW50PWw/cDEobCk6bnVsbCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxsJiYodGhpcy5fcmVzaXplU3Vic2NyaXB0aW9uPXRoaXMuX3ZpZXdw'@;
put 'b3J0UnVsZXIuY2hhbmdlKDEwKS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NvbnRhaW5JbnNpZGVCb3VuZGFyeU9uUmVzaXplKCkpKSx0aGlzfXdpdGhQYXJlbnQobCl7cmV0dXJuIHRoaXMuX3BhcmVudERyYWdSZWY9bCx0aGlzfWRpc3Bvc2UoKXt0aGlzLl9yZW1vdmVSb290RWxlbWVudExpc3Rl'@;
put 'bmVycyh0aGlzLl9yb290RWxlbWVudCksdGhpcy5pc0RyYWdnaW5nKCkmJnRoaXMuX3Jvb3RFbGVtZW50Py5yZW1vdmUoKSx0aGlzLl9hbmNob3I/LnJlbW92ZSgpLHRoaXMuX2Rlc3Ryb3lQcmV2aWV3KCksdGhpcy5fZGVzdHJveVBsYWNlaG9sZGVyKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3Ry'@;
put 'eS5yZW1vdmVEcmFnSXRlbSh0aGlzKSx0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLmJlZm9yZVN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnN0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlbGVhc2VkLmNvbXBsZXRlKCksdGhpcy5lbmRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21w'@;
put 'bGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5fbW92ZUV2ZW50cy5jb21wbGV0ZSgpLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmNsZWFyKCksdGhpcy5fZHJvcENvbnRhaW5lcj12b2lkIDAsdGhpcy5fcmVz'@;
put 'aXplU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCksdGhpcy5fYm91bmRhcnlFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50PXRoaXMuX293bmVyU1ZHRWxlbWVudD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPXRoaXMuX3ByZXZpZXdUZW1w'@;
put 'bGF0ZT10aGlzLl9hbmNob3I9dGhpcy5fcGFyZW50RHJhZ1JlZj1udWxsfWlzRHJhZ2dpbmcoKXtyZXR1cm4gdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nJiZ0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcodGhpcyl9cmVzZXQoKXt0aGlzLl9yb290RWxlbWVudC5zdHlsZS50cmFu'@;
put 'c2Zvcm09dGhpcy5faW5pdGlhbFRyYW5zZm9ybXx8IiIsdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfX1kaXNhYmxlSGFuZGxlKGwpeyF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiZ0aGlzLl9oYW5kbGVzLmluZGV4'@;
put 'T2YobCk+LTEmJih0aGlzLl9kaXNhYmxlZEhhbmRsZXMuYWRkKGwpLHk3KGwsITApKX1lbmFibGVIYW5kbGUobCl7dGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhsKSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5kZWxldGUobCkseTcobCx0aGlzLmRpc2FibGVkKSl9d2l0aERpcmVjdGlvbihs'@;
put 'KXtyZXR1cm4gdGhpcy5fZGlyZWN0aW9uPWwsdGhpc31fd2l0aERyb3BDb250YWluZXIobCl7dGhpcy5fZHJvcENvbnRhaW5lcj1sfWdldEZyZWVEcmFnUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuaXNEcmFnZ2luZygpP3RoaXMuX2FjdGl2ZVRyYW5zZm9ybTp0aGlzLl9wYXNzaXZlVHJhbnNm'@;
put 'b3JtO3JldHVybnt4OmwueCx5OmwueX19c2V0RnJlZURyYWdQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5fYWN0aXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9wYXNzaXZlVHJhbnNmb3JtLng9bC54LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueT1sLnksdGhpcy5fZHJvcENvbnRhaW5lcnx8'@;
put 'dGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLngsbC55KSx0aGlzfXdpdGhQcmV2aWV3Q29udGFpbmVyKGwpe3JldHVybiB0aGlzLl9wcmV2aWV3Q29udGFpbmVyPWwsdGhpc31fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9sYXN0S25vd25Qb2lu'@;
put 'dGVyUG9zaXRpb247bCYmdGhpcy5fZHJvcENvbnRhaW5lciYmdGhpcy5fdXBkYXRlQWN0aXZlRHJvcENvbnRhaW5lcih0aGlzLl9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKSxsKX1fcmVtb3ZlTGlzdGVuZXJzKCl7dGhpcy5fcG9pbnRlck1vdmVTdWJzY3JpcHRpb24udW5zdWJz'@;
put 'Y3JpYmUoKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9nZXRTaGFkb3dSb290KCk/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixhdGUsaXRlKX1fZGVzdHJveVBy'@;
put 'ZXZpZXcoKXt0aGlzLl9wcmV2aWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz1udWxsfV9kZXN0cm95UGxhY2Vob2xkZXIoKXt0aGlzLl9wbGFjZWhvbGRlcj8ucmVtb3ZlKCksdGhpcy5fcGxhY2Vob2xkZXJSZWY/LmRlc3Ryb3koKSx0aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9wbGFjZWhv'@;
put 'bGRlclJlZj1udWxsfV9lbmREcmFnU2VxdWVuY2UobCl7aWYodGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5pc0RyYWdnaW5nKHRoaXMpJiYodGhpcy5fcmVtb3ZlTGlzdGVuZXJzKCksdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5zdG9wRHJhZ2dpbmcodGhpcyksdGhpcy5fdG9nZ2xlTmF0aXZlRHJh'@;
put 'Z0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMmJih0aGlzLl9yb290RWxlbWVudC5zdHlsZS53ZWJraXRUYXBIaWdobGlnaHRDb2xvcj10aGlzLl9yb290RWxlbWVudFRhcEhpZ2hsaWdodCksdGhpcy5faGFzU3RhcnRlZERyYWdnaW5nKSlpZih0aGlzLnJlbGVhc2VkLm5leHQoe3NvdXJj'@;
put 'ZTp0aGlzLGV2ZW50Omx9KSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX2Ryb3BDb250YWluZXIuX3N0b3BTY3JvbGxpbmcoKSx0aGlzLl9hbmltYXRlUHJldmlld1RvUGxhY2Vob2xkZXIoKS50aGVuKCgpPT57dGhpcy5fY2xlYW51cERyYWdBcnRpZmFjdHMobCksdGhpcy5fY2xlYW51cENh'@;
put 'Y2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX0pO2Vsc2V7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54O2NvbnN0IGE9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpO3RoaXMuX3Bh'@;
put 'c3NpdmVUcmFuc2Zvcm0ueT10aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSx0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5lbmRlZC5uZXh0KHtzb3VyY2U6dGhpcyxkaXN0YW5jZTp0aGlzLl9nZXREcmFnRGlzdGFuY2UoYSksZHJvcFBvaW50OmEsZXZlbnQ6bH0pfSksdGhpcy5fY2xlYW51cENh'@;
put 'Y2hlZERpbWVuc2lvbnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKX19X3N0YXJ0RHJhZ1NlcXVlbmNlKGwpe3liKGwpJiYodGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lPURhdGUubm93KCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKTtj'@;
put 'b25zdCBhPXRoaXMuX2dldFNoYWRvd1Jvb3QoKSxkPXRoaXMuX2Ryb3BDb250YWluZXI7aWYoYSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57YS5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3RzdGFydCIsYXRlLGl0ZSl9KSxkKXtjb25zdCBoPXRoaXMuX3Jvb3RFbGVtZW50'@;
put 'LGY9aC5wYXJlbnROb2RlLHY9dGhpcy5fcGxhY2Vob2xkZXI9dGhpcy5fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCksVD10aGlzLl9hbmNob3I9dGhpcy5fYW5jaG9yfHx0aGlzLl9kb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKTtmLmluc2VydEJlZm9yZShULGgpLHRoaXMuX2luaXRpYWxU'@;
put 'cmFuc2Zvcm09aC5zdHlsZS50cmFuc2Zvcm18fCIiLHRoaXMuX3ByZXZpZXc9bmV3IGJ3ZSh0aGlzLl9kb2N1bWVudCx0aGlzLl9yb290RWxlbWVudCx0aGlzLl9kaXJlY3Rpb24sdGhpcy5faW5pdGlhbERvbVJlY3QsdGhpcy5fcHJldmlld1RlbXBsYXRlfHxudWxsLHRoaXMucHJldmlld0Ns'@;
put 'YXNzfHxudWxsLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0sdGhpcy5fY29uZmlnLnpJbmRleHx8MWUzKSx0aGlzLl9wcmV2aWV3LmF0dGFjaCh0aGlzLl9nZXRQcmV2aWV3SW5zZXJ0aW9uUG9pbnQoZixhKSksR2VlKGgsITEsb3RlKSx0aGlzLl9k'@;
put 'b2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGYucmVwbGFjZUNoaWxkKHYsaCkpLHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksZC5zdGFydCgpLHRoaXMuX2luaXRpYWxDb250YWluZXI9ZCx0aGlzLl9pbml0aWFsSW5kZXg9ZC5nZXRJdGVtSW5kZXgodGhpcyl9ZWxz'@;
put 'ZSB0aGlzLnN0YXJ0ZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2luaXRpYWxDb250YWluZXI9dGhpcy5faW5pdGlhbEluZGV4PXZvaWQgMDt0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2FjaGUoZD9kLmdldFNjcm9sbGFibGVQYXJlbnRzKCk6W10pfV9pbml0aWFsaXplRHJh'@;
put 'Z1NlcXVlbmNlKGwsYSl7dGhpcy5fcGFyZW50RHJhZ1JlZiYmYS5zdG9wUHJvcGFnYXRpb24oKTtjb25zdCBkPXRoaXMuaXNEcmFnZ2luZygpLGg9eWIoYSksZj0haCYmMCE9PWEuYnV0dG9uLHY9dGhpcy5fcm9vdEVsZW1lbnQsVD12RShhKSxZPSFoJiZ0aGlzLl9sYXN0VG91Y2hFdmVudFRp'@;
put 'bWUmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSs4MDA+RGF0ZS5ub3coKSxyZT1oP2Z1bmN0aW9uIFViZShjKXtjb25zdCBsPWMudG91Y2hlcyYmYy50b3VjaGVzWzBdfHxjLmNoYW5nZWRUb3VjaGVzJiZjLmNoYW5nZWRUb3VjaGVzWzBdO3JldHVybiEoIWx8fC0xIT09bC5pZGVudGlmaWVy'@;
put 'fHxudWxsIT1sLnJhZGl1c1gmJjEhPT1sLnJhZGl1c1h8fG51bGwhPWwucmFkaXVzWSYmMSE9PWwucmFkaXVzWSl9KGEpOmZ1bmN0aW9uIHpiZShjKXtyZXR1cm4gMD09PWMuYnV0dG9uc3x8MD09PWMuZGV0YWlsfShhKTtpZihUJiZULmRyYWdnYWJsZSYmIm1vdXNlZG93biI9PT1hLnR5cGUm'@;
put 'JmEucHJldmVudERlZmF1bHQoKSxkfHxmfHxZfHxyZSlyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IGtlPXYuc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9a2Uud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLGtlLndlYmtpdFRhcEhpZ2hsaWdodENv'@;
put 'bG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3Zl'@;
put 'U3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJNb3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJVcCks'@;
put 'dGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93Um9vdCgpKS5zdWJzY3JpYmUoa2U9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKGtlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhpcy5fYm91bmRhcnlSZWN0PUhI'@;
put 'KHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IGZlPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudD1mZSYmZmUudGVtcGxhdGUmJiFmZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlz'@;
put 'Ll9pbml0aWFsRG9tUmVjdCxsLGEpO2NvbnN0IF9lPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlz'@;
put 'Ll9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6X2UueCx5Ol9lLnl9LHRoaXMuX2RyYWdTdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRpZmFjdHMobCl7R2VlKHRoaXMu'@;
put 'X3Jvb3RFbGVtZW50LCEwLG90ZSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVtZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9pbml0aWFsRG9tUmVjdD10aGlz'@;
put 'Ll9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmdab25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRoaXMpLGg9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25Q'@;
put 'YWdlKGwpLGY9dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLHY9YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5kZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06dGhpcyxjdXJyZW50SW5k'@;
put 'ZXg6ZCxwcmV2aW91c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlzLl9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6dixkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSxhLmRyb3AodGhpcyxkLHRo'@;
put 'aXMuX2luaXRpYWxJbmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLHYsZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhpcy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7eDpkLHk6aH0pe2xldCBmPXRoaXMuX2luaXRpYWxDb250'@;
put 'YWluZXIuX2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVyIT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29udGFpbmVyKGwsYSkmJihmPXRoaXMuX2luaXRpYWxDb250'@;
put 'YWluZXIpLGYmJmYhPT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRhaW5lci5leGl0KHRoaXMpLHRoaXMuX2Ryb3BDb250YWlu'@;
put 'ZXI9Zix0aGlzLl9kcm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNvcnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjpmLGN1cnJlbnRJbmRl'@;
put 'eDpmLmdldEl0ZW1JbmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhpcyxsLGEsdGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRh'@;
put 'KSx0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55KSl9X2FuaW1hdGVQ'@;
put 'cmV2aWV3VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmFkZENsYXNzKCJjZGstZHJhZy1hbmltYXRpbmciKSx0aGlz'@;
put 'Ll9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPXRoaXMuX3ByZXZpZXcuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uKCk7cmV0dXJuIDA9PT1hP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bmV3IFByb21pc2UoZD0+'@;
put 'e2NvbnN0IGg9dj0+eyghdnx8dkUodik9PT10aGlzLl9wcmV2aWV3JiYidHJhbnNmb3JtIj09PXYucHJvcGVydHlOYW1lKSYmKHRoaXMuX3ByZXZpZXc/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpLGQoKSxjbGVhclRpbWVvdXQoZikpfSxmPXNldFRpbWVvdXQoaCwx'@;
put 'LjUqYSk7dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKX0pKX1fY3JlYXRlUGxhY2Vob2xkZXJFbGVtZW50KCl7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLGE9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGQ7cmV0dXJuIGE/KHRoaXMuX3Bs'@;
put 'YWNlaG9sZGVyUmVmPWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSxsLmNvbnRleHQpLHRoaXMuX3BsYWNlaG9sZGVyUmVmLmRldGVjdENoYW5nZXMoKSxkPXR0ZSh0aGlzLl9wbGFjZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOmQ9WGVlKHRoaXMuX3Jvb3RFbGVtZW50'@;
put 'KSxkLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLGQuY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcGxhY2Vob2xkZXIiKSxkfV9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuX3Jvb3RFbGVtZW50P251bGw6YSxmPWg/aC5nZXRCb3VuZGluZ0Ns'@;
put 'aWVudFJlY3QoKTpsLHY9eWIoZCk/ZC50YXJnZXRUb3VjaGVzWzBdOmQsVD10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7cmV0dXJue3g6Zi5sZWZ0LWwubGVmdCsodi5wYWdlWC1mLmxlZnQtVC5sZWZ0KSx5OmYudG9wLWwudG9wKyh2LnBhZ2VZLWYudG9wLVQudG9wKX19X2dl'@;
put 'dFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKXtjb25zdCBhPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxkPXliKGwpP2wudG91Y2hlc1swXXx8bC5jaGFuZ2VkVG91Y2hlc1swXXx8e3BhZ2VYOjAscGFnZVk6MH06bCxoPWQucGFnZVgtYS5sZWZ0LGY9ZC5wYWdlWS1hLnRvcDtp'@;
put 'Zih0aGlzLl9vd25lclNWR0VsZW1lbnQpe2NvbnN0IHY9dGhpcy5fb3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpO2lmKHYpe2NvbnN0IFQ9dGhpcy5fb3duZXJTVkdFbGVtZW50LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIFQueD1oLFQueT1mLFQubWF0cml4VHJhbnNmb3JtKHYuaW52'@;
put 'ZXJzZSgpKX19cmV0dXJue3g6aCx5OmZ9fV9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMuX2Ryb3BDb250YWluZXI/dGhpcy5fZHJvcENvbnRhaW5lci5sb2NrQXhpczpudWxsO2xldHt4OmQseTpofT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuY29u'@;
put 'c3RyYWluUG9zaXRpb24obCx0aGlzLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50KTpsO2lmKCJ4Ij09PXRoaXMubG9ja0F4aXN8fCJ4Ij09PWE/aD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3Ro'@;
put 'aXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lnk6MCk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWEpJiYoZD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lng6MCkpLHRoaXMuX2Jv'@;
put 'dW5kYXJ5UmVjdCl7Y29uc3R7eDpmLHk6dn09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj97eDowLHk6MH06dGhpcy5fcGlja3VwUG9zaXRpb25JbkVsZW1lbnQsVD10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOlksaGVpZ2h0OnJlfT10aGlzLl9nZXRQcmV2aWV3UmVjdCgpLGZlPVQudG9wK3Ys'@;
put 'X2U9VC5ib3R0b20tKHJlLXYpO2Q9c3RlKGQsVC5sZWZ0K2YsVC5yaWdodC0oWS1mKSksaD1zdGUoaCxmZSxfZSl9cmV0dXJue3g6ZCx5Omh9fV91cGRhdGVQb2ludGVyRGlyZWN0aW9uRGVsdGEobCl7Y29uc3R7eDphLHk6ZH09bCxoPXRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YSxmPXRo'@;
put 'aXMuX3BvaW50ZXJQb3NpdGlvbkF0TGFzdERpcmVjdGlvbkNoYW5nZSx2PU1hdGguYWJzKGEtZi54KSxUPU1hdGguYWJzKGQtZi55KTtyZXR1cm4gdj50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueD1hPmYueD8xOi0xLGYueD1hKSxUPnRoaXMuX2Nv'@;
put 'bmZpZy5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkJiYoaC55PWQ+Zi55PzE6LTEsZi55PWQpLGh9X3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFjdGlvbnMoKXtpZighdGhpcy5fcm9vdEVsZW1lbnR8fCF0aGlzLl9oYW5kbGVzKXJldHVybjtjb25zdCBsPXRoaXMuX2hhbmRsZXMubGVu'@;
put 'Z3RoPjB8fCF0aGlzLmlzRHJhZ2dpbmcoKTtsIT09dGhpcy5fbmF0aXZlSW50ZXJhY3Rpb25zRW5hYmxlZCYmKHRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQ9bCx5Nyh0aGlzLl9yb290RWxlbWVudCxsKSl9X3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKGwpe2wucmVtb3ZlRXZl'@;
put 'bnRMaXN0ZW5lcigibW91c2Vkb3duIix0aGlzLl9wb2ludGVyRG93bixDRSksbC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0Iix0aGlzLl9wb2ludGVyRG93bixydGUpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ3N0YXJ0Iix0aGlzLl9uYXRpdmVEcmFnU3RhcnQsQ0UpfV9h'@;
put 'cHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwsYSl7Y29uc3QgZD1NRShsLGEpLGg9dGhpcy5fcm9vdEVsZW1lbnQuc3R5bGU7bnVsbD09dGhpcy5faW5pdGlhbFRyYW5zZm9ybSYmKHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09aC50cmFuc2Zvcm0mJiJub25lIiE9aC50cmFuc2Zvcm0/aC50cmFu'@;
put 'c2Zvcm06IiIpLGgudHJhbnNmb3JtPXdFKGQsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSl9X2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld1RlbXBsYXRlPy50ZW1wbGF0ZT92b2lkIDA6dGhpcy5faW5pdGlhbFRyYW5zZm9ybSxoPU1FKGwsYSk7dGhpcy5f'@;
put 'cHJldmlldy5zZXRUcmFuc2Zvcm0od0UoaCxkKSl9X2dldERyYWdEaXN0YW5jZShsKXtjb25zdCBhPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlO3JldHVybiBhP3t4OmwueC1hLngseTpsLnktYS55fTp7eDowLHk6MH19X2NsZWFudXBDYWNoZWREaW1lbnNpb25zKCl7dGhpcy5fYm91bmRh'@;
put 'cnlSZWN0PXRoaXMuX3ByZXZpZXdSZWN0PXZvaWQgMCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKX1fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUoKXtsZXR7eDpsLHk6YX09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybTtpZigwPT09bCYmMD09PWF8fHRoaXMuaXNEcmFnZ2luZygp'@;
put 'fHwhdGhpcy5fYm91bmRhcnlFbGVtZW50KXJldHVybjtjb25zdCBkPXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9dGhpcy5fYm91bmRhcnlFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKDA9PT1oLndpZHRoJiYwPT09aC5oZWlnaHR8fDA9PT1k'@;
put 'LndpZHRoJiYwPT09ZC5oZWlnaHQpcmV0dXJuO2NvbnN0IGY9aC5sZWZ0LWQubGVmdCx2PWQucmlnaHQtaC5yaWdodCxUPWgudG9wLWQudG9wLFk9ZC5ib3R0b20taC5ib3R0b207aC53aWR0aD5kLndpZHRoPyhmPjAmJihsKz1mKSx2PjAmJihsLT12KSk6bD0wLGguaGVpZ2h0PmQuaGVpZ2h0'@;
put 'PyhUPjAmJihhKz1UKSxZPjAmJihhLT1ZKSk6YT0wLChsIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54fHxhIT09dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55KSYmdGhpcy5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHt5OmEseDpsfSl9X2dldERyYWdTdGFydERlbGF5KGwpe2NvbnN0IGE9dGhpcy5k'@;
put 'cmFnU3RhcnREZWxheTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGE/YTp5YihsKT9hLnRvdWNoOmE/YS5tb3VzZTowfV91cGRhdGVPblNjcm9sbChsKXtjb25zdCBhPXRoaXMuX3BhcmVudFBvc2l0aW9ucy5oYW5kbGVTY3JvbGwobCk7aWYoYSl7Y29uc3QgZD12RShsKTt0aGlzLl9ib3VuZGFy'@;
put 'eVJlY3QmJmQhPT10aGlzLl9ib3VuZGFyeUVsZW1lbnQmJmQuY29udGFpbnModGhpcy5fYm91bmRhcnlFbGVtZW50KSYmdmIodGhpcy5fYm91bmRhcnlSZWN0LGEudG9wLGEubGVmdCksdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueCs9YS5sZWZ0LHRoaXMuX3BpY2t1cFBvc2l0aW9uT25Q'@;
put 'YWdlLnkrPWEudG9wLHRoaXMuX2Ryb3BDb250YWluZXJ8fCh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueC09YS5sZWZ0LHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LT1hLnRvcCx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKHRoaXMuX2FjdGl2ZVRyYW5zZm9ybS54LHRoaXMuX2FjdGl2'@;
put 'ZVRyYW5zZm9ybS55KSl9fV9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZ2V0KHRoaXMuX2RvY3VtZW50KT8uc2Nyb2xsUG9zaXRpb258fHRoaXMuX3BhcmVudFBvc2l0aW9ucy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0'@;
put 'aW9uKCl9X2dldFNoYWRvd1Jvb3QoKXtyZXR1cm4gdm9pZCAwPT09dGhpcy5fY2FjaGVkU2hhZG93Um9vdCYmKHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9T2VlKHRoaXMuX3Jvb3RFbGVtZW50KSksdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fZ2V0UHJldmlld0luc2VydGlvblBvaW50KGwsYSl7'@;
put 'Y29uc3QgZD10aGlzLl9wcmV2aWV3Q29udGFpbmVyfHwiZ2xvYmFsIjtpZigicGFyZW50Ij09PWQpcmV0dXJuIGw7aWYoImdsb2JhbCI9PT1kKXtjb25zdCBoPXRoaXMuX2RvY3VtZW50O3JldHVybiBhfHxoLmZ1bGxzY3JlZW5FbGVtZW50fHxoLndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxo'@;
put 'Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxoLm1zRnVsbHNjcmVlbkVsZW1lbnR8fGguYm9keX1yZXR1cm4gcDEoZCl9X2dldFByZXZpZXdSZWN0KCl7cmV0dXJuKCF0aGlzLl9wcmV2aWV3UmVjdHx8IXRoaXMuX3ByZXZpZXdSZWN0LndpZHRoJiYhdGhpcy5fcHJldmlld1JlY3QuaGVpZ2h0KSYm'@;
put 'KHRoaXMuX3ByZXZpZXdSZWN0PXRoaXMuX3ByZXZpZXc/dGhpcy5fcHJldmlldy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTp0aGlzLl9pbml0aWFsRG9tUmVjdCksdGhpcy5fcHJldmlld1JlY3R9X2dldFRhcmdldEhhbmRsZShsKXtyZXR1cm4gdGhpcy5faGFuZGxlcy5maW5kKGE9PmwudGFy'@;
put 'Z2V0JiYobC50YXJnZXQ9PT1hfHxhLmNvbnRhaW5zKGwudGFyZ2V0KSkpfX1mdW5jdGlvbiBzdGUoYyxsLGEpe3JldHVybiBNYXRoLm1heChsLE1hdGgubWluKGEsYykpfWZ1bmN0aW9uIHliKGMpe3JldHVybiJ0Ij09PWMudHlwZVswXX1mdW5jdGlvbiBhdGUoYyl7Yy5wcmV2ZW50RGVmYXVs'@;
put 'dCgpfWZ1bmN0aW9uIGx0ZShjLGwsYSl7Y29uc3QgZD1iYihsLGMubGVuZ3RoLTEpLGg9YmIoYSxjLmxlbmd0aC0xKTtpZihkPT09aClyZXR1cm47Y29uc3QgZj1jW2RdLHY9aDxkPy0xOjE7Zm9yKGxldCBUPWQ7VCE9PWg7VCs9diljW1RdPWNbVCt2XTtjW2hdPWZ9ZnVuY3Rpb24gYmIoYyxs'@;
put 'KXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbihsLGMpKX1jbGFzcyBTd2V7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuX3ByZXZp'@;
put 'b3VzU3dhcD17ZHJhZzpudWxsLGRlbHRhOjAsb3ZlcmxhcHM6ITF9fXN0YXJ0KGwpe3RoaXMud2l0aEl0ZW1zKGwpfXNvcnQobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pdGVtUG9zaXRpb25zLHY9dGhpcy5fZ2V0SXRlbUluZGV4RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKTtpZigtMT09'@;
put 'PXYmJmYubGVuZ3RoPjApcmV0dXJuIG51bGw7Y29uc3QgVD0iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uLFk9Zi5maW5kSW5kZXgoeXQ9Pnl0LmRyYWc9PT1sKSxyZT1mW3ZdLF9lPXJlLmNsaWVudFJlY3Qsa2U9WT52PzE6LTEsV2U9dGhpcy5fZ2V0SXRlbU9mZnNldFB4KGZbWV0u'@;
put 'Y2xpZW50UmVjdCxfZSxrZSksSmU9dGhpcy5fZ2V0U2libGluZ09mZnNldFB4KFksZixrZSksdHQ9Zi5zbGljZSgpO3JldHVybiBsdGUoZixZLHYpLGYuZm9yRWFjaCgoeXQsd3QpPT57aWYodHRbd3RdPT09eXQpcmV0dXJuO2NvbnN0IEx0PXl0LmRyYWc9PT1sLG9uPUx0P1dlOkplLHNuPUx0'@;
put 'P2wuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCk6eXQuZHJhZy5nZXRSb290RWxlbWVudCgpO3l0Lm9mZnNldCs9b24sVD8oc24uc3R5bGUudHJhbnNmb3JtPXdFKGB0cmFuc2xhdGUzZCgke01hdGgucm91bmQoeXQub2Zmc2V0KX1weCwgMCwgMClgLHl0LmluaXRpYWxUcmFuc2Zvcm0pLHZiKHl0'@;
put 'LmNsaWVudFJlY3QsMCxvbikpOihzbi5zdHlsZS50cmFuc2Zvcm09d0UoYHRyYW5zbGF0ZTNkKDAsICR7TWF0aC5yb3VuZCh5dC5vZmZzZXQpfXB4LCAwKWAseXQuaW5pdGlhbFRyYW5zZm9ybSksdmIoeXQuY2xpZW50UmVjdCxvbiwwKSl9KSx0aGlzLl9wcmV2aW91c1N3YXAub3ZlcmxhcHM9'@;
put 'TkgoX2UsYSxkKSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1yZS5kcmFnLHRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YT1UP2gueDpoLnkse3ByZXZpb3VzSW5kZXg6WSxjdXJyZW50SW5kZXg6dn19ZW50ZXIobCxhLGQsaCl7Y29uc3QgZj1udWxsPT1ofHxoPDA/dGhpcy5fZ2V0SXRlbUluZGV4'@;
put 'RnJvbVBvaW50ZXJQb3NpdGlvbihsLGEsZCk6aCx2PXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMsVD12LmluZGV4T2YobCksWT1sLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpO2xldCByZT12W2ZdO2lmKHJlPT09bCYmKHJlPXZbZisxXSksIXJlJiYobnVsbD09Znx8LTE9PT1mfHxmPHYubGVuZ3Ro'@;
put 'LTEpJiZ0aGlzLl9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChhLGQpJiYocmU9dlswXSksVD4tMSYmdi5zcGxpY2UoVCwxKSxyZSYmIXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhyZSkpe2NvbnN0IGZlPXJlLmdldFJvb3RFbGVtZW50KCk7ZmUucGFyZW50RWxlbWVudC5pbnNl'@;
put 'cnRCZWZvcmUoWSxmZSksdi5zcGxpY2UoZiwwLGwpfWVsc2UgcDEodGhpcy5fZWxlbWVudCkuYXBwZW5kQ2hpbGQoWSksdi5wdXNoKGwpO1kuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhJdGVtcyhsKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPWwu'@;
put 'c2xpY2UoKSx0aGlzLl9jYWNoZUl0ZW1Qb3NpdGlvbnMoKX13aXRoU29ydFByZWRpY2F0ZShsKXt0aGlzLl9zb3J0UHJlZGljYXRlPWx9cmVzZXQoKXt0aGlzLl9hY3RpdmVEcmFnZ2FibGVzLmZvckVhY2gobD0+e2NvbnN0IGE9bC5nZXRSb290RWxlbWVudCgpO2lmKGEpe2NvbnN0IGQ9dGhp'@;
put 'cy5faXRlbVBvc2l0aW9ucy5maW5kKGg9PmguZHJhZz09PWwpPy5pbml0aWFsVHJhbnNmb3JtO2Euc3R5bGUudHJhbnNmb3JtPWR8fCIifX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnM9W10sdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcz1bXSx0aGlzLl9wcmV2aW91c1N3YXAuZHJhZz1udWxsLHRoaXMu'@;
put 'X3ByZXZpb3VzU3dhcC5kZWx0YT0wLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz0hMX1nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCl7cmV0dXJuIHRoaXMuX2FjdGl2ZURyYWdnYWJsZXN9Z2V0SXRlbUluZGV4KGwpe3JldHVybigiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiYi'@;
put 'cnRsIj09PXRoaXMuZGlyZWN0aW9uP3RoaXMuX2l0ZW1Qb3NpdGlvbnMuc2xpY2UoKS5yZXZlcnNlKCk6dGhpcy5faXRlbVBvc2l0aW9ucykuZmluZEluZGV4KGQ9PmQuZHJhZz09PWwpfXVwZGF0ZU9uU2Nyb2xsKGwsYSl7dGhpcy5faXRlbVBvc2l0aW9ucy5mb3JFYWNoKCh7Y2xpZW50UmVj'@;
put 'dDpkfSk9Pnt2YihkLGwsYSl9KSx0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtkcmFnOmR9KT0+e3RoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyhkKSYmZC5fc29ydEZyb21MYXN0UG9pbnRlclBvc2l0aW9uKCl9KX1fY2FjaGVJdGVtUG9zaXRpb25zKCl7Y29uc3QgbD0i'@;
put 'aG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uO3RoaXMuX2l0ZW1Qb3NpdGlvbnM9dGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5tYXAoYT0+e2NvbnN0IGQ9YS5nZXRWaXNpYmxlRWxlbWVudCgpO3JldHVybntkcmFnOmEsb2Zmc2V0OjAsaW5pdGlhbFRyYW5zZm9ybTpkLnN0eWxlLnRyYW5z'@;
put 'Zm9ybXx8IiIsY2xpZW50UmVjdDpISChkKX19KS5zb3J0KChhLGQpPT5sP2EuY2xpZW50UmVjdC5sZWZ0LWQuY2xpZW50UmVjdC5sZWZ0OmEuY2xpZW50UmVjdC50b3AtZC5jbGllbnRSZWN0LnRvcCl9X2dldEl0ZW1PZmZzZXRQeChsLGEsZCl7Y29uc3QgaD0iaG9yaXpvbnRhbCI9PT10aGlz'@;
put 'Lm9yaWVudGF0aW9uO2xldCBmPWg/YS5sZWZ0LWwubGVmdDphLnRvcC1sLnRvcDtyZXR1cm4tMT09PWQmJihmKz1oP2Eud2lkdGgtbC53aWR0aDphLmhlaWdodC1sLmhlaWdodCksZn1fZ2V0U2libGluZ09mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50'@;
put 'YXRpb24sZj1hW2xdLmNsaWVudFJlY3Qsdj1hW2wrLTEqZF07bGV0IFQ9ZltoPyJ3aWR0aCI6ImhlaWdodCJdKmQ7aWYodil7Y29uc3QgWT1oPyJsZWZ0IjoidG9wIixyZT1oPyJyaWdodCI6ImJvdHRvbSI7LTE9PT1kP1QtPXYuY2xpZW50UmVjdFtZXS1mW3JlXTpUKz1mW1ldLXYuY2xpZW50'@;
put 'UmVjdFtyZV19cmV0dXJuIFR9X3Nob3VsZEVudGVyQXNGaXJzdENoaWxkKGwsYSl7aWYoIXRoaXMuX2FjdGl2ZURyYWdnYWJsZXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGQ9dGhpcy5faXRlbVBvc2l0aW9ucyxoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247aWYoZFswXS5kcmFn'@;
put 'IT09dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc1swXSl7Y29uc3Qgdj1kW2QubGVuZ3RoLTFdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bD49di5yaWdodDphPj12LmJvdHRvbX17Y29uc3Qgdj1kWzBdLmNsaWVudFJlY3Q7cmV0dXJuIGg/bDw9di5sZWZ0OmE8PXYudG9wfX1fZ2V0SXRlbUluZGV4RnJv'@;
put 'bVBvaW50ZXJQb3NpdGlvbihsLGEsZCxoKXtjb25zdCBmPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24sdj10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmRJbmRleCgoe2RyYWc6VCxjbGllbnRSZWN0Oll9KT0+VCE9PWwmJigoIWh8fFQhPT10aGlzLl9wcmV2aW91c1N3YXAuZHJhZ3x8'@;
put 'IXRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwc3x8KGY/aC54OmgueSkhPT10aGlzLl9wcmV2aW91c1N3YXAuZGVsdGEpJiYoZj9hPj1NYXRoLmZsb29yKFkubGVmdCkmJmE8TWF0aC5mbG9vcihZLnJpZ2h0KTpkPj1NYXRoLmZsb29yKFkudG9wKSYmZDxNYXRoLmZsb29yKFkuYm90dG9tKSkp'@;
put 'KTtyZXR1cm4tMSE9PXYmJnRoaXMuX3NvcnRQcmVkaWNhdGUodixsKT92Oi0xfX12YXIgJGQ9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OT05FPTBdPSJOT05FIixjW2MuVVA9MV09IlVQIixjW2MuRE9XTj0yXT0iRE9XTiIsY30oJGR8fHt9KSxEMD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5P'@;
put 'TkU9MF09Ik5PTkUiLGNbYy5MRUZUPTFdPSJMRUZUIixjW2MuUklHSFQ9Ml09IlJJR0hUIixjfShEMHx8e30pO2NsYXNzIHh3ZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9uZ1pvbmU9aCx0aGlzLl92aWV3cG9ydFJ1bGVyPWYsdGhpcy5k'@;
put 'aXNhYmxlZD0hMSx0aGlzLnNvcnRpbmdEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxEaXNhYmxlZD0hMSx0aGlzLmF1dG9TY3JvbGxTdGVwPTIsdGhpcy5lbnRlclByZWRpY2F0ZT0oKT0+ITAsdGhpcy5zb3J0UHJlZGljYXRlPSgpPT4hMCx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IG5uLHRo'@;
put 'aXMuZW50ZXJlZD1uZXcgbm4sdGhpcy5leGl0ZWQ9bmV3IG5uLHRoaXMuZHJvcHBlZD1uZXcgbm4sdGhpcy5zb3J0ZWQ9bmV3IG5uLHRoaXMucmVjZWl2aW5nU3RhcnRlZD1uZXcgbm4sdGhpcy5yZWNlaXZpbmdTdG9wcGVkPW5ldyBubix0aGlzLl9pc0RyYWdnaW5nPSExLHRoaXMuX2RyYWdn'@;
put 'YWJsZXM9W10sdGhpcy5fc2libGluZ3M9W10sdGhpcy5fYWN0aXZlU2libGluZ3M9bmV3IFNldCx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj1YdC5FTVBUWSx0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj0kZC5OT05FLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rp'@;
put 'b249RDAuTk9ORSx0aGlzLl9zdG9wU2Nyb2xsVGltZXJzPW5ldyBubix0aGlzLl9jYWNoZWRTaGFkb3dSb290PW51bGwsdGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbD0oKT0+e3RoaXMuX3N0b3BTY3JvbGxpbmcoKSxmdW5jdGlvbiBod2UoYz0wLGw9aEUpe3JldHVybiBjPDAmJihjPTApLFVl'@;
put 'ZShjLGMsbCl9KDAsWWVlKS5waXBlKFhoKHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMpKS5zdWJzY3JpYmUoKCk9Pntjb25zdCB2PXRoaXMuX3Njcm9sbE5vZGUsVD10aGlzLmF1dG9TY3JvbGxTdGVwO3RoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPT09JGQuVVA/di5zY3JvbGxCeSgwLC1U'@;
put 'KTp0aGlzLl92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbj09PSRkLkRPV04mJnYuc2Nyb2xsQnkoMCxUKSx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPT09RDAuTEVGVD92LnNjcm9sbEJ5KC1ULDApOnRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb249PT1EMC5SSUdIVCYmdi5z'@;
put 'Y3JvbGxCeShULDApfSl9LHRoaXMuZWxlbWVudD1wMShsKSx0aGlzLl9kb2N1bWVudD1kLHRoaXMud2l0aFNjcm9sbGFibGVQYXJlbnRzKFt0aGlzLmVsZW1lbnRdKSxhLnJlZ2lzdGVyRHJvcENvbnRhaW5lcih0aGlzKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnM9bmV3IEtlZShkKSx0aGlzLl9z'@;
put 'b3J0U3RyYXRlZ3k9bmV3IFN3ZSh0aGlzLmVsZW1lbnQsYSksdGhpcy5fc29ydFN0cmF0ZWd5LndpdGhTb3J0UHJlZGljYXRlKCh2LFQpPT50aGlzLnNvcnRQcmVkaWNhdGUodixULHRoaXMpKX1kaXNwb3NlKCl7dGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnMu'@;
put 'Y29tcGxldGUoKSx0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMuZW50ZXJlZC5jb21wbGV0ZSgpLHRoaXMuZXhpdGVkLmNvbXBsZXRlKCksdGhpcy5kcm9wcGVkLmNvbXBsZXRlKCksdGhpcy5z'@;
put 'b3J0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0YXJ0ZWQuY29tcGxldGUoKSx0aGlzLnJlY2VpdmluZ1N0b3BwZWQuY29tcGxldGUoKSx0aGlzLl9hY3RpdmVTaWJsaW5ncy5jbGVhcigpLHRoaXMuX3Njcm9sbE5vZGU9bnVsbCx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0'@;
put 'aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyb3BDb250YWluZXIodGhpcyl9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nfXN0YXJ0KCl7dGhpcy5fZHJhZ2dpbmdTdGFydGVkKCksdGhpcy5fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKX1lbnRlcihsLGEsZCxoKXt0'@;
put 'aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSxudWxsPT1oJiZ0aGlzLnNvcnRpbmdEaXNhYmxlZCYmKGg9dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpKSx0aGlzLl9zb3J0U3RyYXRlZ3kuZW50ZXIobCxhLGQsaCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9ub3RpZnlSZWNl'@;
put 'aXZpbmdTaWJsaW5ncygpLHRoaXMuZW50ZXJlZC5uZXh0KHtpdGVtOmwsY29udGFpbmVyOnRoaXMsY3VycmVudEluZGV4OnRoaXMuZ2V0SXRlbUluZGV4KGwpfSl9ZXhpdChsKXt0aGlzLl9yZXNldCgpLHRoaXMuZXhpdGVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpc30pfWRyb3AobCxh'@;
put 'LGQsaCxmLHYsVCxZPXt9KXt0aGlzLl9yZXNldCgpLHRoaXMuZHJvcHBlZC5uZXh0KHtpdGVtOmwsY3VycmVudEluZGV4OmEscHJldmlvdXNJbmRleDpkLGNvbnRhaW5lcjp0aGlzLHByZXZpb3VzQ29udGFpbmVyOmgsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpmLGRpc3RhbmNlOnYsZHJvcFBv'@;
put 'aW50OlQsZXZlbnQ6WX0pfXdpdGhJdGVtcyhsKXtjb25zdCBhPXRoaXMuX2RyYWdnYWJsZXM7cmV0dXJuIHRoaXMuX2RyYWdnYWJsZXM9bCxsLmZvckVhY2goZD0+ZC5fd2l0aERyb3BDb250YWluZXIodGhpcykpLHRoaXMuaXNEcmFnZ2luZygpJiYoYS5maWx0ZXIoaD0+aC5pc0RyYWdnaW5n'@;
put 'KCkpLmV2ZXJ5KGg9Pi0xPT09bC5pbmRleE9mKGgpKT90aGlzLl9yZXNldCgpOnRoaXMuX3NvcnRTdHJhdGVneS53aXRoSXRlbXModGhpcy5fZHJhZ2dhYmxlcykpLHRoaXN9d2l0aERpcmVjdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbj1sLHRoaXN9Y29ubmVj'@;
put 'dGVkVG8obCl7cmV0dXJuIHRoaXMuX3NpYmxpbmdzPWwuc2xpY2UoKSx0aGlzfXdpdGhPcmllbnRhdGlvbihsKXtyZXR1cm4gdGhpcy5fc29ydFN0cmF0ZWd5Lm9yaWVudGF0aW9uPWwsdGhpc313aXRoU2Nyb2xsYWJsZVBhcmVudHMobCl7Y29uc3QgYT1wMSh0aGlzLmVsZW1lbnQpO3JldHVy'@;
put 'biB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHM9LTE9PT1sLmluZGV4T2YoYSk/W2EsLi4ubF06bC5zbGljZSgpLHRoaXN9Z2V0U2Nyb2xsYWJsZVBhcmVudHMoKXtyZXR1cm4gdGhpcy5fc2Nyb2xsYWJsZUVsZW1lbnRzfWdldEl0ZW1JbmRleChsKXtyZXR1cm4gdGhpcy5faXNEcmFnZ2luZz90'@;
put 'aGlzLl9zb3J0U3RyYXRlZ3kuZ2V0SXRlbUluZGV4KGwpOnRoaXMuX2RyYWdnYWJsZXMuaW5kZXhPZihsKX1pc1JlY2VpdmluZygpe3JldHVybiB0aGlzLl9hY3RpdmVTaWJsaW5ncy5zaXplPjB9X3NvcnRJdGVtKGwsYSxkLGgpe2lmKHRoaXMuc29ydGluZ0Rpc2FibGVkfHwhdGhpcy5fZG9t'@;
put 'UmVjdHx8IXFlZSh0aGlzLl9kb21SZWN0LC4wNSxhLGQpKXJldHVybjtjb25zdCBmPXRoaXMuX3NvcnRTdHJhdGVneS5zb3J0KGwsYSxkLGgpO2YmJnRoaXMuc29ydGVkLm5leHQoe3ByZXZpb3VzSW5kZXg6Zi5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpmLmN1cnJlbnRJbmRleCxjb250'@;
put 'YWluZXI6dGhpcyxpdGVtOmx9KX1fc3RhcnRTY3JvbGxpbmdJZk5lY2Vzc2FyeShsLGEpe2lmKHRoaXMuYXV0b1Njcm9sbERpc2FibGVkKXJldHVybjtsZXQgZCxoPSRkLk5PTkUsZj1EMC5OT05FO2lmKHRoaXMuX3BhcmVudFBvc2l0aW9ucy5wb3NpdGlvbnMuZm9yRWFjaCgodixUKT0+e1Q9'@;
put 'PT10aGlzLl9kb2N1bWVudHx8IXYuY2xpZW50UmVjdHx8ZHx8cWVlKHYuY2xpZW50UmVjdCwuMDUsbCxhKSYmKFtoLGZdPWZ1bmN0aW9uIGt3ZShjLGwsYSxkLGgpe2NvbnN0IGY9ZHRlKGwsaCksdj1odGUobCxkKTtsZXQgVD0kZC5OT05FLFk9RDAuTk9ORTtpZihmKXtjb25zdCByZT1jLnNj'@;
put 'cm9sbFRvcDtmPT09JGQuVVA/cmU+MCYmKFQ9JGQuVVApOmMuc2Nyb2xsSGVpZ2h0LXJlPmMuY2xpZW50SGVpZ2h0JiYoVD0kZC5ET1dOKX1pZih2KXtjb25zdCByZT1jLnNjcm9sbExlZnQ7InJ0bCI9PT1hP3Y9PT1EMC5SSUdIVD9yZTwwJiYoWT1EMC5SSUdIVCk6Yy5zY3JvbGxXaWR0aCty'@;
put 'ZT5jLmNsaWVudFdpZHRoJiYoWT1EMC5MRUZUKTp2PT09RDAuTEVGVD9yZT4wJiYoWT1EMC5MRUZUKTpjLnNjcm9sbFdpZHRoLXJlPmMuY2xpZW50V2lkdGgmJihZPUQwLlJJR0hUKX1yZXR1cm5bVCxZXX0oVCx2LmNsaWVudFJlY3QsdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbixsLGEp'@;
put 'LChofHxmKSYmKGQ9VCkpfSksIWgmJiFmKXtjb25zdHt3aWR0aDp2LGhlaWdodDpUfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLFk9e3dpZHRoOnYsaGVpZ2h0OlQsdG9wOjAscmlnaHQ6dixib3R0b206VCxsZWZ0OjB9O2g9ZHRlKFksYSksZj1odGUoWSxsKSxkPXdp'@;
put 'bmRvd31kJiYoaCE9PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9ufHxmIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ZCE9PXRoaXMuX3Njcm9sbE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249aCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0'@;
put 'aW9uPWYsdGhpcy5fc2Nyb2xsTm9kZT1kLChofHxmKSYmZD90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhpcy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3RoaXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9k'@;
put 'cmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCBsPXAxKHRoaXMuZWxlbWVudCkuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRoaXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlwZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3Jv'@;
put 'bGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9Im5vbmUiLHRoaXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlz'@;
put 'dGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKXtjb25zdCBsPXAxKHRoaXMuZWxlbWVudCk7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hlKHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyksdGhpcy5fZG9tUmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRp'@;
put 'b25zLmdldChsKS5jbGllbnRSZWN0fV9yZXNldCgpe3RoaXMuX2lzRHJhZ2dpbmc9ITE7Y29uc3QgbD1wMSh0aGlzLmVsZW1lbnQpLnN0eWxlO2wuc2Nyb2xsU25hcFR5cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxTY3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2go'@;
put 'YT0+YS5fc3RvcFJlY2VpdmluZyh0aGlzKSksdGhpcy5fc29ydFN0cmF0ZWd5LnJlc2V0KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2lzT3ZlckNvbnRh'@;
put 'aW5lcihsLGEpe3JldHVybiBudWxsIT10aGlzLl9kb21SZWN0JiZOSCh0aGlzLl9kb21SZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxhLGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5kKGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShs'@;
put 'LGEsZCl7aWYoIXRoaXMuX2RvbVJlY3R8fCFOSCh0aGlzLl9kb21SZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10aGlzLl9nZXRTaGFkb3dSb290KCkuZWxlbWVudEZyb21Qb2ludChhLGQpO2lmKCFoKXJldHVybiExO2NvbnN0IGY9cDEo'@;
put 'dGhpcy5lbGVtZW50KTtyZXR1cm4gaD09PWZ8fGYuY29udGFpbnMoaCl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5oYXMobCkmJmEuZXZlcnkoaD0+dGhpcy5lbnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4'@;
put 'T2YoaCk+LTEpJiYoZC5hZGQobCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhp'@;
put 'cy5fYWN0aXZlU2libGluZ3MuZGVsZXRlKGwpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVkLm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3'@;
put 'cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRo'@;
put 'aXMuX3NvcnRTdHJhdGVneS51cGRhdGVPblNjcm9sbChhLnRvcCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpfSl9X2dldFNoYWRvd1Jvb3QoKXtpZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD1PZWUocDEodGhp'@;
put 'cy5lbGVtZW50KSk7dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1sfHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2aW5nU2libGluZ3MoKXtjb25zdCBsPXRoaXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmls'@;
put 'dGVyKGE9PmEuaXNEcmFnZ2luZygpKTt0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiBkdGUoYyxsKXtjb25zdHt0b3A6YSxib3R0b206ZCxoZWlnaHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj8kZC5VUDps'@;
put 'Pj1kLWYmJmw8PWQrZj8kZC5ET1dOOiRkLk5PTkV9ZnVuY3Rpb24gaHRlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9EMC5MRUZUOmw+PWQtZiYmbDw9ZCtmP0QwLlJJR0hUOkQwLk5PTkV9Y29uc3QgU0U9djcoe3Bh'@;
put 'c3NpdmU6ITEsY2FwdHVyZTohMH0pO2xldCBFd2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9uZT1hLHRoaXMuX2Ryb3BJbnN0YW5jZXM9bmV3IFNldCx0aGlzLl9kcmFnSW5zdGFuY2VzPW5ldyBTZXQsdGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcz1bXSx0aGlz'@;
put 'Ll9nbG9iYWxMaXN0ZW5lcnM9bmV3IE1hcCx0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZT1oPT5oLmlzRHJhZ2dpbmcoKSx0aGlzLnBvaW50ZXJNb3ZlPW5ldyBubix0aGlzLnBvaW50ZXJVcD1uZXcgbm4sdGhpcy5zY3JvbGw9bmV3IG5uLHRoaXMuX3ByZXZlbnREZWZhdWx0V2hpbGVEcmFnZ2lu'@;
put 'Zz1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+MCYmaC5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXI9aD0+e3RoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoPjAmJih0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLnNv'@;
put 'bWUodGhpcy5fZHJhZ2dpbmdQcmVkaWNhdGUpJiZoLnByZXZlbnREZWZhdWx0KCksdGhpcy5wb2ludGVyTW92ZS5uZXh0KGgpKX0sdGhpcy5fZG9jdW1lbnQ9ZH1yZWdpc3RlckRyb3BDb250YWluZXIoYSl7dGhpcy5fZHJvcEluc3RhbmNlcy5oYXMoYSl8fHRoaXMuX2Ryb3BJbnN0YW5jZXMu'@;
put 'YWRkKGEpfXJlZ2lzdGVyRHJhZ0l0ZW0oYSl7dGhpcy5fZHJhZ0luc3RhbmNlcy5hZGQoYSksMT09PXRoaXMuX2RyYWdJbnN0YW5jZXMuc2l6ZSYmdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2htb3ZlIix0'@;
put 'aGlzLl9wZXJzaXN0ZW50VG91Y2htb3ZlTGlzdGVuZXIsU0UpfSl9cmVtb3ZlRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFuY2VzLmRlbGV0ZShhKX1yZW1vdmVEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmRlbGV0ZShhKSx0aGlzLnN0b3BEcmFnZ2luZyhhKSwwPT09'@;
put 'dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixTRSl9c3RhcnREcmFnZ2luZyhhLGQpe2lmKCEodGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5pbmRl'@;
put 'eE9mKGEpPi0xKSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMucHVzaChhKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgpKXtjb25zdCBoPWQudHlwZS5zdGFydHNXaXRoKCJ0b3VjaCIpO3RoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoaD8idG91Y2hlbmQiOiJtb3Vz'@;
put 'ZXVwIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJVcC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNjcm9sbCIse2hhbmRsZXI6Zj0+dGhpcy5zY3JvbGwubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0KCJzZWxlY3RzdGFydCIse2hhbmRsZXI6dGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURy'@;
put 'YWdnaW5nLG9wdGlvbnM6U0V9KSxofHx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KCJtb3VzZW1vdmUiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlck1vdmUubmV4dChmKSxvcHRpb25zOlNFfSksdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVu'@;
put 'ZXJzLmZvckVhY2goKGYsdik9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHYsZi5oYW5kbGVyLGYub3B0aW9ucyl9KX0pfX1zdG9wRHJhZ2dpbmcoYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMuX2FjdGl2ZURyYWdJ'@;
put 'bnN0YW5jZXMuc3BsaWNlKGQsMSksMD09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpKX1pc0RyYWdnaW5nKGEpe3JldHVybiB0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTF9c2Nyb2xsZWQoYSl7Y29u'@;
put 'c3QgZD1bdGhpcy5zY3JvbGxdO3JldHVybiBhJiZhIT09dGhpcy5fZG9jdW1lbnQmJmQucHVzaChuZXcgd24oaD0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj1UPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJmgubmV4dChUKX07cmV0dXJu'@;
put 'IGEuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix2LCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix2LCEwKX19KSkpLHBFKC4uLmQpfW5nT25EZXN0cm95KCl7dGhpcy5fZHJhZ0luc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJhZ0l0ZW0oYSkpLHRoaXMu'@;
put 'X2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyb3BDb250YWluZXIoYSkpLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRoaXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl7dGhp'@;
put 'cy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGQsYS5oYW5kbGVyLGEub3B0aW9ucyl9KSx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuY2xlYXIoKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1'@;
put 'cm4gbmV3KGR8fGMpKGZyKFBvKSxmcigkcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCBUd2U9e2RyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rp'@;
put 'b25DaGFuZ2VUaHJlc2hvbGQ6NX0seEU9bmV3IFNldDtsZXQgRHdlPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9u'@;
put 'ZW50Il1dLGhvc3RBdHRyczpbImNkay1kcmFnLXJlc2V0cy1jb250YWluZXIiLCIiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltlUF0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXt9LHN0eWxlczpbIkBsYXllciBjZGstcmVzZXRzey5jZGstZHJhZy1wcmV2aWV3e2Jh'@;
put 'Y2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdH19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9cmV0dXJuIGN9KSgpLGpIPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9u'@;
put 'Z1pvbmU9ZCx0aGlzLl92aWV3cG9ydFJ1bGVyPWgsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1mLHRoaXMuX2FwcFJlZj1WcihqMyksdGhpcy5fZW52aXJvbm1lbnRJbmplY3Rvcj1WcihkbCl9Y3JlYXRlRHJhZyhhLGQ9VHdlKXtyZXR1cm4gdGhpcy5fbG9hZFJlc2V0cygpLG5ldyBNd2UoYSxk'@;
put 'LHRoaXMuX2RvY3VtZW50LHRoaXMuX25nWm9uZSx0aGlzLl92aWV3cG9ydFJ1bGVyLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkpfWNyZWF0ZURyb3BMaXN0KGEpe3JldHVybiBuZXcgeHdlKGEsdGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeSx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5f'@;
put 'dmlld3BvcnRSdWxlcil9X2xvYWRSZXNldHMoKXtpZigheEUuaGFzKHRoaXMuX2FwcFJlZikpe3hFLmFkZCh0aGlzLl9hcHBSZWYpO2NvbnN0IGE9ZnVuY3Rpb24gJDJlKGMsbCl7Y29uc3QgYT10cyhjKSxkPWwuZWxlbWVudEluamVjdG9yfHx4ZCgpO3JldHVybiBuZXcgTDUoYSkuY3JlYXRl'@;
put 'KGQsbC5wcm9qZWN0YWJsZU5vZGVzLGwuaG9zdEVsZW1lbnQsbC5lbnZpcm9ubWVudEluamVjdG9yKX0oRHdlLHtlbnZpcm9ubWVudEluamVjdG9yOnRoaXMuX2Vudmlyb25tZW50SW5qZWN0b3J9KTt0aGlzLl9hcHBSZWYub25EZXN0cm95KCgpPT57eEUuZGVsZXRlKHRoaXMuX2FwcFJlZiks'@;
put 'MD09PXhFLnNpemUmJmEuZGVzdHJveSgpfSl9fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoJHMpLGZyKFBvKSxmcih1d2UpLGZyKEV3ZSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3'@;
put 'NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtjb25zdCB3Yj1uZXcgWXIoIkNES19EUkFHX1BBUkVOVCIpLGZ0ZT1uZXcgWXIoIkNka0RyYWdIYW5kbGUiKTtsZXQgcHRlPSgoKT0+e2NsYXNzIGN7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfXNldCBk'@;
put 'aXNhYmxlZChhKXt0aGlzLl9kaXNhYmxlZD1hLHRoaXMuX3N0YXRlQ2hhbmdlcy5uZXh0KHRoaXMpfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fcGFyZW50RHJhZz1kLHRoaXMuX3N0YXRlQ2hhbmdlcz1uZXcgbm4sdGhpcy5fZGlzYWJsZWQ9ITEsZD8uX2FkZEhhbmRs'@;
put 'ZSh0aGlzKX1uZ09uRGVzdHJveSgpe3RoaXMuX3BhcmVudERyYWc/Ll9yZW1vdmVIYW5kbGUodGhpcyksdGhpcy5fc3RhdGVDaGFuZ2VzLmNvbXBsZXRlKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdCgkaSksc3Qod2IsMTIpKX07c3Rh'@;
put 'dGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJhZ0hhbmRsZSIsIiJdXSxob3N0QXR0cnM6WzEsImNkay1kcmFnLWhhbmRsZSJdLGlucHV0czp7ZGlzYWJsZWQ6W1FuLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcmFnSGFuZGxlRGlz'@;
put 'YWJsZWQiLCJkaXNhYmxlZCIseDBdfSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltHaShbe3Byb3ZpZGU6ZnRlLHVzZUV4aXN0aW5nOmN9XSksUTJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IG10ZT1uZXcgWXIoIkNES19EUkFHX0NPTkZJRyIpLGd0ZT1uZXcgWXIoIkNka0Ryb3BMaXN0Iik7bGV0'@;
put 'IEJIPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5fZHJhZ0luc3RhbmNlcz1bXTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fHRoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kaXNhYmxl'@;
put 'ZD1hLHRoaXMuX2RyYWdSZWYuZGlzYWJsZWQ9dGhpcy5fZGlzYWJsZWR9Y29uc3RydWN0b3IoYSxkLGgsZix2LFQsWSxyZSxmZSxfZSxrZSl7dGhpcy5lbGVtZW50PWEsdGhpcy5kcm9wQ29udGFpbmVyPWQsdGhpcy5fbmdab25lPWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZj12LHRoaXMuX2Rp'@;
put 'cj1ZLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWZlLHRoaXMuX3NlbGZIYW5kbGU9X2UsdGhpcy5fcGFyZW50RHJhZz1rZSx0aGlzLl9kZXN0cm95ZWQ9bmV3IG5uLHRoaXMuX2hhbmRsZXM9bmV3IEFyKFtdKSx0aGlzLnN0YXJ0ZWQ9bmV3IElyLHRoaXMucmVsZWFzZWQ9bmV3IElyLHRoaXMu'@;
put 'ZW5kZWQ9bmV3IElyLHRoaXMuZW50ZXJlZD1uZXcgSXIsdGhpcy5leGl0ZWQ9bmV3IElyLHRoaXMuZHJvcHBlZD1uZXcgSXIsdGhpcy5tb3ZlZD1uZXcgd24oV2U9Pntjb25zdCBKZT10aGlzLl9kcmFnUmVmLm1vdmVkLnBpcGUoeXIodHQ9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9u'@;
put 'OnR0LnBvaW50ZXJQb3NpdGlvbixldmVudDp0dC5ldmVudCxkZWx0YTp0dC5kZWx0YSxkaXN0YW5jZTp0dC5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKFdlKTtyZXR1cm4oKT0+e0plLnVuc3Vic2NyaWJlKCl9fSksdGhpcy5fZHJhZ1JlZj1yZS5jcmVhdGVEcmFnKGEse2RyYWdTdGFydFRocmVz'@;
put 'aG9sZDpUJiZudWxsIT1ULmRyYWdTdGFydFRocmVzaG9sZD9ULmRyYWdTdGFydFRocmVzaG9sZDo1LHBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQ6VCYmbnVsbCE9VC5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkP1QucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9s'@;
put 'ZDo1LHpJbmRleDpUPy56SW5kZXh9KSx0aGlzLl9kcmFnUmVmLmRhdGE9dGhpcyxjLl9kcmFnSW5zdGFuY2VzLnB1c2godGhpcyksVCYmdGhpcy5fYXNzaWduRGVmYXVsdHMoVCksZCYmKHRoaXMuX2RyYWdSZWYuX3dpdGhEcm9wQ29udGFpbmVyKGQuX2Ryb3BMaXN0UmVmKSxkLmFkZEl0ZW0o'@;
put 'dGhpcykpLHRoaXMuX3N5bmNJbnB1dHModGhpcy5fZHJhZ1JlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRoaXMuX2RyYWdSZWYpfWdldFBsYWNlaG9sZGVyRWxlbWVudCgpe3JldHVybiB0aGlzLl9kcmFnUmVmLmdldFBsYWNlaG9sZGVyRWxlbWVudCgpfWdldFJvb3RFbGVtZW50KCl7cmV0dXJu'@;
put 'IHRoaXMuX2RyYWdSZWYuZ2V0Um9vdEVsZW1lbnQoKX1yZXNldCgpe3RoaXMuX2RyYWdSZWYucmVzZXQoKX1nZXRGcmVlRHJhZ1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX2RyYWdSZWYuZ2V0RnJlZURyYWdQb3NpdGlvbigpfXNldEZyZWVEcmFnUG9zaXRpb24oYSl7dGhpcy5fZHJhZ1JlZi5z'@;
put 'ZXRGcmVlRHJhZ1Bvc2l0aW9uKGEpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5waXBlKEtoKDEpLFhoKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3VwZGF0ZVJvb3RFbGVt'@;
put 'ZW50KCksdGhpcy5fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKSx0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2RyYWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfSl9KX1uZ09uQ2hhbmdlcyhhKXtjb25zdCBkPWEucm9vdEVsZW1lbnRTZWxlY3Rvcixo'@;
put 'PWEuZnJlZURyYWdQb3NpdGlvbjtkJiYhZC5maXJzdENoYW5nZSYmdGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSxoJiYhaC5maXJzdENoYW5nZSYmdGhpcy5mcmVlRHJhZ1Bvc2l0aW9uJiZ0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24odGhpcy5mcmVlRHJhZ1Bvc2l0aW9uKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuZHJvcENvbnRhaW5lciYmdGhpcy5kcm9wQ29udGFpbmVyLnJlbW92ZUl0ZW0odGhpcyk7Y29uc3QgYT1jLl9kcmFnSW5zdGFuY2VzLmluZGV4T2YodGhpcyk7YT4tMSYmYy5fZHJhZ0luc3RhbmNlcy5zcGxpY2UoYSwxKSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lk'@;
put 'ZUFuZ3VsYXIoKCk9Pnt0aGlzLl9oYW5kbGVzLmNvbXBsZXRlKCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl9kcmFnUmVmLmRpc3Bvc2UoKX0pfV9hZGRIYW5kbGUoYSl7Y29uc3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCk7ZC5w'@;
put 'dXNoKGEpLHRoaXMuX2hhbmRsZXMubmV4dChkKX1fcmVtb3ZlSGFuZGxlKGEpe2NvbnN0IGQ9dGhpcy5faGFuZGxlcy5nZXRWYWx1ZSgpLGg9ZC5pbmRleE9mKGEpO2g+LTEmJihkLnNwbGljZShoLDEpLHRoaXMuX2hhbmRsZXMubmV4dChkKSl9X3NldFByZXZpZXdUZW1wbGF0ZShhKXt0aGlz'@;
put 'Ll9wcmV2aWV3VGVtcGxhdGU9YX1fcmVzZXRQcmV2aWV3VGVtcGxhdGUoYSl7YT09PXRoaXMuX3ByZXZpZXdUZW1wbGF0ZSYmKHRoaXMuX3ByZXZpZXdUZW1wbGF0ZT1udWxsKX1fc2V0UGxhY2Vob2xkZXJUZW1wbGF0ZShhKXt0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWF9X3Jlc2V0UGxh'@;
put 'Y2Vob2xkZXJUZW1wbGF0ZShhKXthPT09dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZSYmKHRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9bnVsbCl9X3VwZGF0ZVJvb3RFbGVtZW50KCl7Y29uc3QgYT10aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtsZXQgZD1hO3RoaXMucm9vdEVsZW1lbnRT'@;
put 'ZWxlY3RvciYmKGQ9dm9pZCAwIT09YS5jbG9zZXN0P2EuY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpOmEucGFyZW50RWxlbWVudD8uY2xvc2VzdCh0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3IpKSx0aGlzLl9kcmFnUmVmLndpdGhSb290RWxlbWVudChkfHxhKX1fZ2V0Qm91bmRh'@;
put 'cnlFbGVtZW50KCl7Y29uc3QgYT10aGlzLmJvdW5kYXJ5RWxlbWVudDtyZXR1cm4gYT8ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xvc2VzdChhKTpwMShhKTpudWxsfV9zeW5jSW5wdXRzKGEpe2EuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntp'@;
put 'ZighYS5pc0RyYWdnaW5nKCkpe2NvbnN0IGQ9dGhpcy5fZGlyLGg9dGhpcy5kcmFnU3RhcnREZWxheSxmPXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wbGFjZWhvbGRlclRlbXBs'@;
put 'YXRlLmRhdGEsdmlld0NvbnRhaW5lcjp0aGlzLl92aWV3Q29udGFpbmVyUmVmfTpudWxsLHY9dGhpcy5fcHJldmlld1RlbXBsYXRlP3t0ZW1wbGF0ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUudGVtcGxhdGVSZWYsY29udGV4dDp0aGlzLl9wcmV2aWV3VGVtcGxhdGUuZGF0YSxtYXRjaFNpemU6'@;
put 'dGhpcy5fcHJldmlld1RlbXBsYXRlLm1hdGNoU2l6ZSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGw7YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLmRyYWdTdGFydERlbGF5PSJvYmplY3QiPT10eXBlb2YgaCYmaD9o'@;
put 'OkJlZShoKSxhLmNvbnN0cmFpblBvc2l0aW9uPXRoaXMuY29uc3RyYWluUG9zaXRpb24sYS5wcmV2aWV3Q2xhc3M9dGhpcy5wcmV2aWV3Q2xhc3MsYS53aXRoQm91bmRhcnlFbGVtZW50KHRoaXMuX2dldEJvdW5kYXJ5RWxlbWVudCgpKS53aXRoUGxhY2Vob2xkZXJUZW1wbGF0ZShmKS53aXRo'@;
put 'UHJldmlld1RlbXBsYXRlKHYpLndpdGhQcmV2aWV3Q29udGFpbmVyKHRoaXMucHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCIpLGQmJmEud2l0aERpcmVjdGlvbihkLnZhbHVlKX19KSxhLmJlZm9yZVN0YXJ0ZWQucGlwZShLaCgxKSkuc3Vic2NyaWJlKCgpPT57aWYodGhpcy5fcGFyZW50RHJh'@;
put 'ZylyZXR1cm4gdm9pZCBhLndpdGhQYXJlbnQodGhpcy5fcGFyZW50RHJhZy5fZHJhZ1JlZik7bGV0IGQ9dGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDtmb3IoO2Q7KXtpZihkLmNsYXNzTGlzdC5jb250YWlucygiY2RrLWRyYWciKSl7YS53aXRoUGFyZW50KGMuX2Ry'@;
put 'YWdJbnN0YW5jZXMuZmluZChoPT5oLmVsZW1lbnQubmF0aXZlRWxlbWVudD09PWQpPy5fZHJhZ1JlZnx8bnVsbCk7YnJlYWt9ZD1kLnBhcmVudEVsZW1lbnR9fSl9X2hhbmRsZUV2ZW50cyhhKXthLnN0YXJ0ZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnN0YXJ0ZWQuZW1pdCh7c291cmNlOnRoaXMs'@;
put 'ZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5yZWxlYXNlZC5zdWJzY3JpYmUoZD0+e3RoaXMucmVsZWFzZWQuZW1pdCh7c291cmNlOnRoaXMsZXZlbnQ6ZC5ldmVudH0pfSksYS5lbmRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kZWQu'@;
put 'ZW1pdCh7c291cmNlOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRh'@;
put 'aW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXh9KX0pLGEuZXhpdGVkLnN1YnNjcmliZShkPT57dGhpcy5leGl0ZWQuZW1pdCh7Y29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXRlbTp0aGlzfSl9KSxhLmRyb3BwZWQuc3Vic2NyaWJl'@;
put 'KGQ9Pnt0aGlzLmRyb3BwZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LHByZXZpb3VzQ29udGFpbmVyOmQucHJldmlvdXNDb250YWluZXIuZGF0YSxjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpc1BvaW50ZXJPdmVy'@;
put 'Q29udGFpbmVyOmQuaXNQb2ludGVyT3ZlckNvbnRhaW5lcixpdGVtOnRoaXMsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pfSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ1N0YXJ0RGVsYXk6aCxjb25zdHJh'@;
put 'aW5Qb3NpdGlvbjpmLHByZXZpZXdDbGFzczp2LGJvdW5kYXJ5RWxlbWVudDpULGRyYWdnaW5nRGlzYWJsZWQ6WSxyb290RWxlbWVudFNlbGVjdG9yOnJlLHByZXZpZXdDb250YWluZXI6ZmV9PWE7dGhpcy5kaXNhYmxlZD1ZPz8hMSx0aGlzLmRyYWdTdGFydERlbGF5PWh8fDAsZCYmKHRoaXMu'@;
put 'bG9ja0F4aXM9ZCksZiYmKHRoaXMuY29uc3RyYWluUG9zaXRpb249ZiksdiYmKHRoaXMucHJldmlld0NsYXNzPXYpLFQmJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1UKSxyZSYmKHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcj1yZSksZmUmJih0aGlzLnByZXZpZXdDb250YWluZXI9ZmUpfV9zZXR1'@;
put 'cEhhbmRsZXNMaXN0ZW5lcigpe3RoaXMuX2hhbmRsZXMucGlwZShsdShhPT57Y29uc3QgZD1hLm1hcChoPT5oLmVsZW1lbnQpO3RoaXMuX3NlbGZIYW5kbGUmJnRoaXMucm9vdEVsZW1lbnRTZWxlY3RvciYmZC5wdXNoKHRoaXMuZWxlbWVudCksdGhpcy5fZHJhZ1JlZi53aXRoSGFuZGxlcyhk'@;
put 'KX0pLHUxKGE9PnBFKC4uLmEubWFwKGQ9PmQuX3N0YXRlQ2hhbmdlcy5waXBlKFo1KGQpKSkpKSxYaCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoYT0+e2NvbnN0IGQ9dGhpcy5fZHJhZ1JlZixoPWEuZWxlbWVudC5uYXRpdmVFbGVtZW50O2EuZGlzYWJsZWQ/ZC5kaXNhYmxlSGFuZGxl'@;
put 'KGgpOmQuZW5hYmxlSGFuZGxlKGgpfSl9c3RhdGljI3Q9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdCgkaSksc3QoZ3RlLDEyKSxzdCgkcyksc3QoUG8pLHN0KHBzKSxzdChtdGUsOCksc3QoV2VlLDgpLHN0KGpIKSxzdChGYSksc3QoZnRlLDEwKSxzdCh3'@;
put 'YiwxMikpfTtzdGF0aWMjbj10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWciXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmYnIoImNkay1kcmFnLWRpc2FibGVkIixo'@;
put 'LmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGguX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntkYXRhOltRbi5Ob25lLCJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2NrQXhpczpbUW4uTm9uZSwiY2RrRHJhZ0xvY2tBeGlzIiwibG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVj'@;
put 'dG9yOltRbi5Ob25lLCJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlFbGVtZW50OltRbi5Ob25lLCJjZGtEcmFnQm91bmRhcnkiLCJib3VuZGFyeUVsZW1lbnQiXSxkcmFnU3RhcnREZWxheTpbUW4uTm9uZSwiY2RrRHJhZ1N0YXJ0RGVsYXkiLCJk'@;
put 'cmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246W1FuLk5vbmUsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiLHgwXSxjb25z'@;
put 'dHJhaW5Qb3NpdGlvbjpbUW4uTm9uZSwiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6W1FuLk5vbmUsImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xhc3MiXSxwcmV2aWV3Q29udGFpbmVyOltRbi5Ob25lLCJjZGtEcmFn'@;
put 'UHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWluZXIiXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVyZWQ6ImNka0RyYWdFbnRlcmVkIixleGl0ZWQ6ImNka0RyYWdFeGl0'@;
put 'ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3ZlZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtEcmFnIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbR2koW3twcm92aWRlOndiLHVzZUV4aXN0aW5nOmN9XSksUTIsQmFdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFlIPW5ldyBZ'@;
put 'cigiQ2RrRHJvcExpc3RHcm91cCIpO2xldCBfdGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2l0ZW1zPW5ldyBTZXQsdGhpcy5kaXNhYmxlZD0hMX1uZ09uRGVzdHJveSgpe3RoaXMuX2l0ZW1zLmNsZWFyKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7'@;
put 'cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RHcm91cERpc2FibGVk'@;
put 'IiwiZGlzYWJsZWQiLHgwXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbR2koW3twcm92aWRlOllILHVzZUV4aXN0aW5nOmN9XSksUTJdfSl9cmV0dXJuIGN9KSgpLEx3ZT0wLHZ0ZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuX2Ry'@;
put 'b3BMaXN0cz1bXTtnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR8fCEhdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLmRpc2FibGVkfXNldCBkaXNhYmxlZChhKXt0aGlzLl9kcm9wTGlzdFJlZi5kaXNhYmxlZD10aGlzLl9kaXNhYmxlZD1hfWNvbnN0cnVjdG9yKGEsZCxoLGYs'@;
put 'dixULFkpe3RoaXMuZWxlbWVudD1hLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPWgsdGhpcy5fc2Nyb2xsRGlzcGF0Y2hlcj1mLHRoaXMuX2Rpcj12LHRoaXMuX2dyb3VwPVQsdGhpcy5fZGVzdHJveWVkPW5ldyBubix0aGlzLmNvbm5lY3RlZFRvPVtdLHRoaXMuaWQ9ImNkay1kcm9wLWxpc3Qt'@;
put 'IitMd2UrKyx0aGlzLmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuZHJvcHBlZD1uZXcgSXIsdGhpcy5lbnRlcmVkPW5ldyBJcix0aGlzLmV4aXRlZD1uZXcgSXIsdGhpcy5zb3J0ZWQ9bmV3IElyLHRoaXMuX3Vuc29ydGVkSXRlbXM9bmV3IFNl'@;
put 'dCx0aGlzLl9kcm9wTGlzdFJlZj1kLmNyZWF0ZURyb3BMaXN0KGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmRhdGE9dGhpcyxZJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhZKSx0aGlzLl9kcm9wTGlzdFJlZi5lbnRlclByZWRpY2F0ZT0ocmUsZmUpPT50aGlzLmVudGVyUHJlZGljYXRlKHJlLmRhdGEs'@;
put 'ZmUuZGF0YSksdGhpcy5fZHJvcExpc3RSZWYuc29ydFByZWRpY2F0ZT0ocmUsZmUsX2UpPT50aGlzLnNvcnRQcmVkaWNhdGUocmUsZmUuZGF0YSxfZS5kYXRhKSx0aGlzLl9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbih0aGlzLl9kcm9wTGlzdFJlZiksdGhpcy5faGFuZGxlRXZlbnRzKHRo'@;
put 'aXMuX2Ryb3BMaXN0UmVmKSxjLl9kcm9wTGlzdHMucHVzaCh0aGlzKSxUJiZULl9pdGVtcy5hZGQodGhpcyl9YWRkSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmFkZChhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1yZW1vdmVJ'@;
put 'dGVtKGEpe3RoaXMuX3Vuc29ydGVkSXRlbXMuZGVsZXRlKGEpLHRoaXMuX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSYmdGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpfWdldFNvcnRlZEl0ZW1zKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5fdW5zb3J0ZWRJdGVtcykuc29ydCgoYSxkKT0+YS5f'@;
put 'ZHJhZ1JlZi5nZXRWaXNpYmxlRWxlbWVudCgpLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKSkmTm9kZS5ET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkc/LTE6MSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPWMuX2Ryb3BMaXN0cy5pbmRleE9m'@;
put 'KHRoaXMpO2E+LTEmJmMuX2Ryb3BMaXN0cy5zcGxpY2UoYSwxKSx0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmRlbGV0ZSh0aGlzKSx0aGlzLl91bnNvcnRlZEl0ZW1zLmNsZWFyKCksdGhpcy5fZHJvcExpc3RSZWYuZGlzcG9zZSgpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhp'@;
put 'cy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9X3NldHVwSW5wdXRTeW5jU3Vic2NyaXB0aW9uKGEpe3RoaXMuX2RpciYmdGhpcy5fZGlyLmNoYW5nZS5waXBlKFo1KHRoaXMuX2Rpci52YWx1ZSksWGgodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGQ9PmEud2l0aERpcmVjdGlvbihkKSksYS5i'@;
put 'ZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2NvbnN0IGQ9ZnVuY3Rpb24gcWJlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP2M6W2NdfSh0aGlzLmNvbm5lY3RlZFRvKS5tYXAoaD0+InN0cmluZyI9PXR5cGVvZiBoP2MuX2Ryb3BMaXN0cy5maW5kKHY9PnYuaWQ9PT1oKTpoKTtpZih0'@;
put 'aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuX2l0ZW1zLmZvckVhY2goaD0+ey0xPT09ZC5pbmRleE9mKGgpJiZkLnB1c2goaCl9KSwhdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZCl7Y29uc3QgaD10aGlzLl9zY3JvbGxEaXNwYXRjaGVyLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVy'@;
put 'cyh0aGlzLmVsZW1lbnQpLm1hcChmPT5mLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50KTt0aGlzLl9kcm9wTGlzdFJlZi53aXRoU2Nyb2xsYWJsZVBhcmVudHMoaCksdGhpcy5fc2Nyb2xsYWJsZVBhcmVudHNSZXNvbHZlZD0hMH1hLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2Nr'@;
put 'QXhpcz10aGlzLmxvY2tBeGlzLGEuc29ydGluZ0Rpc2FibGVkPXRoaXMuc29ydGluZ0Rpc2FibGVkLGEuYXV0b1Njcm9sbERpc2FibGVkPXRoaXMuYXV0b1Njcm9sbERpc2FibGVkLGEuYXV0b1Njcm9sbFN0ZXA9QmVlKHRoaXMuYXV0b1Njcm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZp'@;
put 'bHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVmKSkud2l0aE9yaWVudGF0aW9uKHRoaXMub3JpZW50YXRpb24pfSl9X2hhbmRsZUV2ZW50cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5fc3luY0l0ZW1zV2l0aFJlZigpLHRoaXMuX2NoYW5n'@;
put 'ZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGEsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMu'@;
put 'ZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuc29ydGVkLnN1YnNjcmliZShkPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlvdXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVu'@;
put 'dEluZGV4OmQuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJyZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlv'@;
put 'dXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06ZC5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFuY2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9w'@;
put 'UG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSkscEUoYS5yZWNlaXZpbmdTdGFydGVkLGEucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2ln'@;
put 'bkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ2dpbmdEaXNhYmxlZDpoLHNvcnRpbmdEaXNhYmxlZDpmLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6dixsaXN0T3JpZW50YXRpb246VH09YTt0aGlzLmRpc2FibGVkPWg/PyExLHRoaXMuc29ydGluZ0Rpc2FibGVkPWY/PyExLHRoaXMu'@;
put 'YXV0b1Njcm9sbERpc2FibGVkPXY/PyExLHRoaXMub3JpZW50YXRpb249VHx8InZlcnRpY2FsIixkJiYodGhpcy5sb2NrQXhpcz1kKX1fc3luY0l0ZW1zV2l0aFJlZigpe3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0aGlzLmdldFNvcnRlZEl0ZW1zKCkubWFwKGE9PmEuX2RyYWdSZWYp'@;
put 'KX1zdGF0aWMjdD10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KCRpKSxzdChqSCksc3QoRmEpLHN0KGx3ZSksc3QoV2VlLDgpLHN0KFlILDEyKSxzdChtdGUsOCkpfTtzdGF0aWMjbj10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIi'@;
put 'LCJjZGtEcm9wTGlzdCIsIiJdLFsiY2RrLWRyb3AtbGlzdCJdXSxob3N0QXR0cnM6WzEsImNkay1kcm9wLWxpc3QiXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmKGhyKCJpZCIsaC5pZCksYnIoImNkay1kcm9wLWxpc3QtZGlzYWJsZWQiLGguZGlzYWJsZWQp'@;
put 'KCJjZGstZHJvcC1saXN0LWRyYWdnaW5nIixoLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkpKCJjZGstZHJvcC1saXN0LXJlY2VpdmluZyIsaC5fZHJvcExpc3RSZWYuaXNSZWNlaXZpbmcoKSkpfSxpbnB1dHM6e2Nvbm5lY3RlZFRvOltRbi5Ob25lLCJjZGtEcm9wTGlzdENvbm5lY3RlZFRv'@;
put 'IiwiY29ubmVjdGVkVG8iXSxkYXRhOltRbi5Ob25lLCJjZGtEcm9wTGlzdERhdGEiLCJkYXRhIl0sb3JpZW50YXRpb246W1FuLk5vbmUsImNka0Ryb3BMaXN0T3JpZW50YXRpb24iLCJvcmllbnRhdGlvbiJdLGlkOiJpZCIsbG9ja0F4aXM6W1FuLk5vbmUsImNka0Ryb3BMaXN0TG9ja0F4aXMi'@;
put 'LCJsb2NrQXhpcyJdLGRpc2FibGVkOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3REaXNhYmxlZCIsImRpc2FibGVkIix4MF0sc29ydGluZ0Rpc2FibGVkOltRbi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RTb3J0aW5nRGlzYWJsZWQi'@;
put 'LCJzb3J0aW5nRGlzYWJsZWQiLHgwXSxlbnRlclByZWRpY2F0ZTpbUW4uTm9uZSwiY2RrRHJvcExpc3RFbnRlclByZWRpY2F0ZSIsImVudGVyUHJlZGljYXRlIl0sc29ydFByZWRpY2F0ZTpbUW4uTm9uZSwiY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlIiwic29ydFByZWRpY2F0ZSJdLGF1dG9T'@;
put 'Y3JvbGxEaXNhYmxlZDpbUW4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sImNka0Ryb3BMaXN0QXV0b1Njcm9sbERpc2FibGVkIiwiYXV0b1Njcm9sbERpc2FibGVkIix4MF0sYXV0b1Njcm9sbFN0ZXA6W1FuLk5vbmUsImNka0Ryb3BMaXN0QXV0b1Njcm9sbFN0ZXAiLCJhdXRvU2Nyb2xs'@;
put 'U3RlcCJdfSxvdXRwdXRzOntkcm9wcGVkOiJjZGtEcm9wTGlzdERyb3BwZWQiLGVudGVyZWQ6ImNka0Ryb3BMaXN0RW50ZXJlZCIsZXhpdGVkOiJjZGtEcm9wTGlzdEV4aXRlZCIsc29ydGVkOiJjZGtEcm9wTGlzdFNvcnRlZCJ9LGV4cG9ydEFzOlsiY2RrRHJvcExpc3QiXSxzdGFuZGFsb25l'@;
put 'OiEwLGZlYXR1cmVzOltHaShbe3Byb3ZpZGU6WUgsdXNlVmFsdWU6dm9pZCAwfSx7cHJvdmlkZTpndGUsdXNlRXhpc3Rpbmc6Y31dKSxRMl19KX1yZXR1cm4gY30pKCkseXRlPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj'@;
put 'KX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtwcm92aWRlcnM6W2pIXSxpbXBvcnRzOltkd2VdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFB3ZT1NZWUoMywoYyxsLGEpPT57IWZ1bmN0aW9uIFN5ZShjLGwpe3JldHVybiBs'@;
put 'fHwobD13aW5kb3cmJndpbmRvdy5jdXN0b21FbGVtZW50cyksIWx8fCEhbC5nZXQoYyl9KGMpfHxmdW5jdGlvbiBheWUoKXtyZXR1cm4gd2luZG93Py5sb2NhdGlvbj8uaHJlZj8uaW5jbHVkZXMoImxvY2FsaG9zdDo2MDA2Iil9KCk/KGEuZGVmaW5lKGMsbCksU2VlKCksd2luZG93JiYhT2Jq'@;
put 'ZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5KS5zb21lKGQ9PmQ9PT1jKSYmKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeT17Li4ud2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5LFtjXTp7fX0pKTpvZy53YXJuKGMrIiBoYXMgYWxyZWFk'@;
put 'eSBiZWVuIHJlZ2lzdGVyZWQiKX0pO2Z1bmN0aW9uIGJ0ZShjLGwpe3VlZSgpJiZDZWUoWyJjdXN0b21FbGVtZW50cyJdKSYmUHdlKGMsbCx3aW5kb3cuY3VzdG9tRWxlbWVudHMpfWxldCB3dGU9ITE7ZnVuY3Rpb24gRndlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlz'@;
put 'Lmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighd3RlKXt3dGU9ITA7Y29uc3QgYz1SZWZsZWN0LmdldFByb3RvdHlwZU9mKEludDhBcnJheSk7Zm9yKGNvbnN0IGwgb2ZbQXJyYXksU3RyaW5nLGNdKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3Rv'@;
put 'dHlwZSwiYXQiLHt2YWx1ZTpGd2Usd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1sZXQgTXRlPSExLEN0ZT0hMTtmdW5jdGlvbiBTdGUoYyxsLGEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShsKT90aGlzLmdldEF0dHJpYnV0ZShsKTpudWxsfSxzZXQ6ZnVuY3Rpb24oZCl7bnVsbCE9PWQ/dGhpcy5zZXRBdHRyaWJ1dGUobCxkKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZShsKX19KX1NdGV8fEVsZW1lbnQucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5KCJyb2xlIil8fChTdGUoRWxlbWVudC5wcm90b3R5cGUsInJvbGUiLCJyb2xlIiksTXRlPSEwKSxDdGV8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFiZWwiKXx8KEN0ZT0hMCxbIkFjdGl2ZURlc2NlbmRhbnQiLCJBdG9taWMiLCJBdXRvQ29t'@;
put 'cGxldGUiLCJCdXN5IiwiQ2hlY2tlZCIsIkNvbENvdW50IiwiQ29sSW5kZXgiLCJDb2xTcGFuIiwiQ29udHJvbHMiLCJDdXJyZW50IiwiRGVzY3JpYmVkQnkiLCJEZXRhaWxzIiwiRGlzYWJsZWQiLCJFcnJvck1lc3NhZ2UiLCJFeHBhbmRlZCIsIkZsb3dUbyIsIkhhc1BvcHVwIiwiSGlkZGVu'@;
put 'IiwiSW52YWxpZCIsIktleVNob3J0Y3V0cyIsIkxhYmVsIiwiTGFiZWxsZWRCeSIsIkxldmVsIiwiTGl2ZSIsIk1vZGFsIiwiTXVsdGlMaW5lIiwiTXVsdGlTZWxlY3RhYmxlIiwiT3JpZW50YXRpb24iLCJPd25zIiwiUGxhY2Vob2xkZXIiLCJQb3NJblNldCIsIlByZXNzZWQiLCJSZWFkT25s'@;
put 'eSIsIlJlbGV2YW50IiwiUmVxdWlyZWQiLCJSb2xlRGVzY3JpcHRpb24iLCJSb3dDb3VudCIsIlJvd0luZGV4IiwiUm93U3BhbiIsIlNlbGVjdGVkIiwiU2V0U2l6ZSIsIlNvcnQiLCJWYWx1ZU1heCIsIlZhbHVlTWluIiwiVmFsdWVOb3ciLCJWYWx1ZVRleHQiXS5mb3JFYWNoKGM9PlN0ZShF'@;
put 'bGVtZW50LnByb3RvdHlwZSwiYXJpYS0iK2MudG9Mb3dlckNhc2UoKSwiYXJpYSIrYykpKTtjb25zdCBrRT13aW5kb3csekg9a0UuU2hhZG93Um9vdCYmKHZvaWQgMD09PWtFLlNoYWR5Q1NTfHxrRS5TaGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3Vt'@;
put 'ZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsVUg9U3ltYm9sKCkseHRlPW5ldyBXZWFrTWFwO2NsYXNzIGt0ZXtjb25zdHJ1Y3RvcihsLGEsZCl7aWYodGhpcy5fJGNzc1Jlc3VsdCQ9ITAsZCE9PVVIKXRocm93IEVycm9yKCJDU1NSZXN1bHQgaXMg'@;
put 'bm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD1sLHRoaXMudD1hfWdldCBzdHlsZVNoZWV0KCl7bGV0IGw9dGhpcy5vO2NvbnN0IGE9dGhpcy50O2lmKHpIJiZ2b2lkIDA9PT1sKXtjb25zdCBkPXZvaWQgMCE9PWEmJjE9'@;
put 'PT1hLmxlbmd0aDtkJiYobD14dGUuZ2V0KGEpKSx2b2lkIDA9PT1sJiYoKHRoaXMubz1sPW5ldyBDU1NTdHlsZVNoZWV0KS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLGQmJnh0ZS5zZXQoYSxsKSl9cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBaSD0o'@;
put 'YywuLi5sKT0+e2NvbnN0IGE9MT09PWMubGVuZ3RoP2NbMF06bC5yZWR1Y2UoKGQsaCxmKT0+ZCsodj0+e2lmKCEwPT09di5fJGNzc1Jlc3VsdCQpcmV0dXJuIHYuY3NzVGV4dDtpZigibnVtYmVyIj09dHlwZW9mIHYpcmV0dXJuIHY7dGhyb3cgRXJyb3IoIlZhbHVlIHBhc3NlZCB0byAnY3Nz'@;
put 'JyBmdW5jdGlvbiBtdXN0IGJlIGEgJ2NzcycgZnVuY3Rpb24gcmVzdWx0OiAiK3YrIi4gVXNlICd1bnNhZmVDU1MnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LiIpfSkoaCkrY1tmKzFdLGNbMF0pO3JldHVybiBuZXcg'@;
put 'a3RlKGEsYyxVSCl9LEV0ZT16SD9jPT5jOmM9PmMgaW5zdGFuY2VvZiBDU1NTdHlsZVNoZWV0PyhsPT57bGV0IGE9IiI7Zm9yKGNvbnN0IGQgb2YgbC5jc3NSdWxlcylhKz1kLmNzc1RleHQ7cmV0dXJuKGM9Pm5ldyBrdGUoInN0cmluZyI9PXR5cGVvZiBjP2M6YysiIix2b2lkIDAsVUgpKShh'@;
put 'KX0pKGMpOmM7dmFyIFdIO2NvbnN0IEVFPXdpbmRvdyxUdGU9RUUudHJ1c3RlZFR5cGVzLFZ3ZT1UdGU/VHRlLmVtcHR5U2NyaXB0OiIiLER0ZT1FRS5yZWFjdGl2ZUVsZW1lbnRQb2x5ZmlsbFN1cHBvcnQsR0g9e3RvQXR0cmlidXRlKGMsbCl7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjpjPWM/'@;
put 'VndlOm51bGw7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTpjPW51bGw9PWM/YzpKU09OLnN0cmluZ2lmeShjKX1yZXR1cm4gY30sZnJvbUF0dHJpYnV0ZShjLGwpe2xldCBhPWM7c3dpdGNoKGwpe2Nhc2UgQm9vbGVhbjphPW51bGwhPT1jO2JyZWFrO2Nhc2UgTnVtYmVyOmE9bnVsbD09'@;
put 'PWM/bnVsbDpOdW1iZXIoYyk7YnJlYWs7Y2FzZSBPYmplY3Q6Y2FzZSBBcnJheTp0cnl7YT1KU09OLnBhcnNlKGMpfWNhdGNoe2E9bnVsbH19cmV0dXJuIGF9fSxBdGU9KGMsbCk9PmwhPT1jJiYobD09bHx8Yz09YyksJEg9e2F0dHJpYnV0ZTohMCx0eXBlOlN0cmluZyxjb252ZXJ0ZXI6R0gs'@;
put 'cmVmbGVjdDohMSxoYXNDaGFuZ2VkOkF0ZX0scUg9ImZpbmFsaXplZCI7Y2xhc3MgYjcgZXh0ZW5kcyBIVE1MRWxlbWVudHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5fJEVpPW5ldyBNYXAsdGhpcy5pc1VwZGF0ZVBlbmRpbmc9ITEsdGhpcy5oYXNVcGRhdGVkPSExLHRoaXMuXyRFbD1u'@;
put 'dWxsLHRoaXMuXyRFdSgpfXN0YXRpYyBhZGRJbml0aWFsaXplcihsKXt2YXIgYTt0aGlzLmZpbmFsaXplKCksKG51bGwhPT0oYT10aGlzLmgpJiZ2b2lkIDAhPT1hP2E6dGhpcy5oPVtdKS5wdXNoKGwpfXN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCl7dGhpcy5maW5hbGl6ZSgpO2Nv'@;
put 'bnN0IGw9W107cmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9dGhpcy5fJEVwKGQsYSk7dm9pZCAwIT09aCYmKHRoaXMuXyRFdi5zZXQoaCxkKSxsLnB1c2goaCkpfSksbH1zdGF0aWMgY3JlYXRlUHJvcGVydHkobCxhPSRIKXtpZihhLnN0YXRl'@;
put 'JiYoYS5hdHRyaWJ1dGU9ITEpLHRoaXMuZmluYWxpemUoKSx0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldChsLGEpLCFhLm5vQWNjZXNzb3ImJiF0aGlzLnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eShsKSl7Y29uc3QgZD0ic3ltYm9sIj09dHlwZW9mIGw/U3ltYm9sKCk6Il9fIitsLGg9dGhp'@;
put 'cy5nZXRQcm9wZXJ0eURlc2NyaXB0b3IobCxkLGEpO3ZvaWQgMCE9PWgmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLnByb3RvdHlwZSxsLGgpfX1zdGF0aWMgZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsYSxkKXtyZXR1cm57Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXtjb25zdCBm'@;
put 'PXRoaXNbbF07dGhpc1thXT1oLHRoaXMucmVxdWVzdFVwZGF0ZShsLGYsZCl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfX1zdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKGwpe3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmdldChsKXx8JEh9c3RhdGljIGZpbmFsaXplKCl7'@;
put 'aWYodGhpcy5oYXNPd25Qcm9wZXJ0eShxSCkpcmV0dXJuITE7dGhpc1txSF09ITA7Y29uc3QgbD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcyk7aWYobC5maW5hbGl6ZSgpLHZvaWQgMCE9PWwuaCYmKHRoaXMuaD1bLi4ubC5oXSksdGhpcy5lbGVtZW50UHJvcGVydGllcz1uZXcgTWFwKGwu'@;
put 'ZWxlbWVudFByb3BlcnRpZXMpLHRoaXMuXyRFdj1uZXcgTWFwLHRoaXMuaGFzT3duUHJvcGVydHkoInByb3BlcnRpZXMiKSl7Y29uc3QgYT10aGlzLnByb3BlcnRpZXMsZD1bLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSksLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhh'@;
put 'KV07Zm9yKGNvbnN0IGggb2YgZCl0aGlzLmNyZWF0ZVByb3BlcnR5KGgsYVtoXSl9cmV0dXJuIHRoaXMuZWxlbWVudFN0eWxlcz10aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKSwhMH1zdGF0aWMgZmluYWxpemVTdHlsZXMobCl7Y29uc3QgYT1bXTtpZihBcnJheS5pc0FycmF5KGwp'@;
put 'KXtjb25zdCBkPW5ldyBTZXQobC5mbGF0KDEvMCkucmV2ZXJzZSgpKTtmb3IoY29uc3QgaCBvZiBkKWEudW5zaGlmdChFdGUoaCkpfWVsc2Ugdm9pZCAwIT09bCYmYS5wdXNoKEV0ZShsKSk7cmV0dXJuIGF9c3RhdGljIF8kRXAobCxhKXtjb25zdCBkPWEuYXR0cmlidXRlO3JldHVybiExPT09'@;
put 'ZD92b2lkIDA6InN0cmluZyI9PXR5cGVvZiBkP2Q6InN0cmluZyI9PXR5cGVvZiBsP2wudG9Mb3dlckNhc2UoKTp2b2lkIDB9XyRFdSgpe3ZhciBsO3RoaXMuXyRFXz1uZXcgUHJvbWlzZShhPT50aGlzLmVuYWJsZVVwZGF0aW5nPWEpLHRoaXMuXyRBTD1uZXcgTWFwLHRoaXMuXyRFZygpLHRo'@;
put 'aXMucmVxdWVzdFVwZGF0ZSgpLG51bGw9PT0obD10aGlzLmNvbnN0cnVjdG9yLmgpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+YSh0aGlzKSl9YWRkQ29udHJvbGxlcihsKXt2YXIgYSxkOyhudWxsIT09KGE9dGhpcy5fJEVTKSYmdm9pZCAwIT09YT9hOnRoaXMuXyRFUz1bXSkucHVzaChs'@;
put 'KSx2b2lkIDAhPT10aGlzLnJlbmRlclJvb3QmJnRoaXMuaXNDb25uZWN0ZWQmJihudWxsPT09KGQ9bC5ob3N0Q29ubmVjdGVkKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGwpKX1yZW1vdmVDb250cm9sbGVyKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLnNwbGlj'@;
put 'ZSh0aGlzLl8kRVMuaW5kZXhPZihsKT4+PjAsMSl9XyRFZygpe3RoaXMuY29uc3RydWN0b3IuZWxlbWVudFByb3BlcnRpZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuaGFzT3duUHJvcGVydHkoYSkmJih0aGlzLl8kRWkuc2V0KGEsdGhpc1thXSksZGVsZXRlIHRoaXNbYV0pfSl9Y3JlYXRlUmVu'@;
put 'ZGVyUm9vdCgpe3ZhciBsO2NvbnN0IGE9bnVsbCE9PShsPXRoaXMuc2hhZG93Um9vdCkmJnZvaWQgMCE9PWw/bDp0aGlzLmF0dGFjaFNoYWRvdyh0aGlzLmNvbnN0cnVjdG9yLnNoYWRvd1Jvb3RPcHRpb25zKTtyZXR1cm4oKGMsbCk9Pnt6SD9jLmFkb3B0ZWRTdHlsZVNoZWV0cz1sLm1hcChh'@;
put 'PT5hIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD9hOmEuc3R5bGVTaGVldCk6bC5mb3JFYWNoKGE9Pntjb25zdCBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIiksaD1rRS5saXROb25jZTt2b2lkIDAhPT1oJiZkLnNldEF0dHJpYnV0ZSgibm9uY2UiLGgpLGQudGV4dENvbnRlbnQ9'@;
put 'YS5jc3NUZXh0LGMuYXBwZW5kQ2hpbGQoZCl9KX0pKGEsdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50U3R5bGVzKSxhfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7dm9pZCAwPT09dGhpcy5yZW5kZXJSb290JiYodGhpcy5yZW5kZXJSb290PXRoaXMuY3JlYXRlUmVuZGVyUm9vdCgpKSx0aGlz'@;
put 'LmVuYWJsZVVwZGF0aW5nKCEwKSxudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShkPWEuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWVuYWJsZVVwZGF0aW5nKGwpe31kaXNjb25u'@;
put 'ZWN0ZWRDYWxsYmFjaygpe3ZhciBsO251bGw9PT0obD10aGlzLl8kRVMpfHx2b2lkIDA9PT1sfHxsLmZvckVhY2goYT0+e3ZhciBkO3JldHVybiBudWxsPT09KGQ9YS5ob3N0RGlzY29ubmVjdGVkKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jYWxsKGEpfSl9YXR0cmlidXRlQ2hhbmdlZENhbGxi'@;
put 'YWNrKGwsYSxkKXt0aGlzLl8kQUsobCxkKX1fJEVPKGwsYSxkPSRIKXt2YXIgaDtjb25zdCBmPXRoaXMuY29uc3RydWN0b3IuXyRFcChsLGQpO2lmKHZvaWQgMCE9PWYmJiEwPT09ZC5yZWZsZWN0KXtjb25zdCB2PSh2b2lkIDAhPT0obnVsbD09PShoPWQuY29udmVydGVyKXx8dm9pZCAwPT09'@;
put 'aD92b2lkIDA6aC50b0F0dHJpYnV0ZSk/ZC5jb252ZXJ0ZXI6R0gpLnRvQXR0cmlidXRlKGEsZC50eXBlKTt0aGlzLl8kRWw9bCxudWxsPT12P3RoaXMucmVtb3ZlQXR0cmlidXRlKGYpOnRoaXMuc2V0QXR0cmlidXRlKGYsdiksdGhpcy5fJEVsPW51bGx9fV8kQUsobCxhKXt2YXIgZDtjb25z'@;
put 'dCBoPXRoaXMuY29uc3RydWN0b3IsZj1oLl8kRXYuZ2V0KGwpO2lmKHZvaWQgMCE9PWYmJnRoaXMuXyRFbCE9PWYpe2NvbnN0IHY9aC5nZXRQcm9wZXJ0eU9wdGlvbnMoZiksVD0iZnVuY3Rpb24iPT10eXBlb2Ygdi5jb252ZXJ0ZXI/e2Zyb21BdHRyaWJ1dGU6di5jb252ZXJ0ZXJ9OnZvaWQg'@;
put 'MCE9PShudWxsPT09KGQ9di5jb252ZXJ0ZXIpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmZyb21BdHRyaWJ1dGUpP3YuY29udmVydGVyOkdIO3RoaXMuXyRFbD1mLHRoaXNbZl09VC5mcm9tQXR0cmlidXRlKGEsdi50eXBlKSx0aGlzLl8kRWw9bnVsbH19cmVxdWVzdFVwZGF0ZShsLGEsZCl7bGV0'@;
put 'IGg9ITA7dm9pZCAwIT09bCYmKCgoZD1kfHx0aGlzLmNvbnN0cnVjdG9yLmdldFByb3BlcnR5T3B0aW9ucyhsKSkuaGFzQ2hhbmdlZHx8QXRlKSh0aGlzW2xdLGEpPyh0aGlzLl8kQUwuaGFzKGwpfHx0aGlzLl8kQUwuc2V0KGwsYSksITA9PT1kLnJlZmxlY3QmJnRoaXMuXyRFbCE9PWwmJih2'@;
put 'b2lkIDA9PT10aGlzLl8kRUMmJih0aGlzLl8kRUM9bmV3IE1hcCksdGhpcy5fJEVDLnNldChsLGQpKSk6aD0hMSksIXRoaXMuaXNVcGRhdGVQZW5kaW5nJiZoJiYodGhpcy5fJEVfPXRoaXMuXyRFaigpKX1fJEVqKCl7dmFyIGw9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsLmlzVXBkYXRl'@;
put 'UGVuZGluZz0hMDt0cnl7eWllbGQgbC5fJEVffWNhdGNoKGQpe1Byb21pc2UucmVqZWN0KGQpfWNvbnN0IGE9bC5zY2hlZHVsZVVwZGF0ZSgpO3JldHVybiBudWxsIT1hJiYoeWllbGQgYSksIWwuaXNVcGRhdGVQZW5kaW5nfSkoKX1zY2hlZHVsZVVwZGF0ZSgpe3JldHVybiB0aGlzLnBlcmZv'@;
put 'cm1VcGRhdGUoKX1wZXJmb3JtVXBkYXRlKCl7dmFyIGw7aWYoIXRoaXMuaXNVcGRhdGVQZW5kaW5nKXJldHVybjt0aGlzLl8kRWkmJih0aGlzLl8kRWkuZm9yRWFjaCgoaCxmKT0+dGhpc1tmXT1oKSx0aGlzLl8kRWk9dm9pZCAwKTtsZXQgYT0hMTtjb25zdCBkPXRoaXMuXyRBTDt0cnl7YT10'@;
put 'aGlzLnNob3VsZFVwZGF0ZShkKSxhPyh0aGlzLndpbGxVcGRhdGUoZCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChoPT57dmFyIGY7cmV0dXJuIG51bGw9PT0oZj1oLmhvc3RVcGRhdGUpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmNhbGwoaCl9KSx0aGlzLnVw'@;
put 'ZGF0ZShkKSk6dGhpcy5fJEVrKCl9Y2F0Y2goaCl7dGhyb3cgYT0hMSx0aGlzLl8kRWsoKSxofWEmJnRoaXMuXyRBRShkKX13aWxsVXBkYXRlKGwpe31fJEFFKGwpe3ZhciBhO251bGw9PT0oYT10aGlzLl8kRVMpfHx2b2lkIDA9PT1hfHxhLmZvckVhY2goZD0+e3ZhciBoO3JldHVybiBudWxs'@;
put 'PT09KGg9ZC5ob3N0VXBkYXRlZCl8fHZvaWQgMD09PWg/dm9pZCAwOmguY2FsbChkKX0pLHRoaXMuaGFzVXBkYXRlZHx8KHRoaXMuaGFzVXBkYXRlZD0hMCx0aGlzLmZpcnN0VXBkYXRlZChsKSksdGhpcy51cGRhdGVkKGwpfV8kRWsoKXt0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLmlzVXBkYXRl'@;
put 'UGVuZGluZz0hMX1nZXQgdXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpfWdldFVwZGF0ZUNvbXBsZXRlKCl7cmV0dXJuIHRoaXMuXyRFX31zaG91bGRVcGRhdGUobCl7cmV0dXJuITB9dXBkYXRlKGwpe3ZvaWQgMCE9PXRoaXMuXyRFQyYmKHRoaXMuXyRF'@;
put 'Qy5mb3JFYWNoKChhLGQpPT50aGlzLl8kRU8oZCx0aGlzW2RdLGEpKSx0aGlzLl8kRUM9dm9pZCAwKSx0aGlzLl8kRWsoKX11cGRhdGVkKGwpe31maXJzdFVwZGF0ZWQobCl7fX12YXIgS0g7YjdbcUhdPSEwLGI3LmVsZW1lbnRQcm9wZXJ0aWVzPW5ldyBNYXAsYjcuZWxlbWVudFN0eWxlcz1b'@;
put 'XSxiNy5zaGFkb3dSb290T3B0aW9ucz17bW9kZToib3BlbiJ9LER0ZT8uKHtSZWFjdGl2ZUVsZW1lbnQ6Yjd9KSwobnVsbCE9PShXSD1FRS5yZWFjdGl2ZUVsZW1lbnRWZXJzaW9ucykmJnZvaWQgMCE9PVdIP1dIOkVFLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zPVtdKS5wdXNoKCIxLjYuMyIp'@;
put 'O2NvbnN0IFRFPXdpbmRvdyx3Nz1URS50cnVzdGVkVHlwZXMsTHRlPXc3P3c3LmNyZWF0ZVBvbGljeSgibGl0LWh0bWwiLHtjcmVhdGVIVE1MOmM9PmN9KTp2b2lkIDAsREU9IiRsaXQkIixHMz1gbGl0JCR7KE1hdGgucmFuZG9tKCkrIiIpLnNsaWNlKDkpfSRgLFhIPSI/IitHMyxqd2U9YDwk'@;
put 'e1hIfT5gLGxnPWRvY3VtZW50LE1iPSgpPT5sZy5jcmVhdGVDb21tZW50KCIiKSxDYj1jPT5udWxsPT09Y3x8Im9iamVjdCIhPXR5cGVvZiBjJiYiZnVuY3Rpb24iIT10eXBlb2YgYyxJdGU9QXJyYXkuaXNBcnJheSxKSD0iWyBcdFxuXGZccl0iLFNiPS88KD86KCEtLXxcL1teYS16QS1aXSl8'@;
put 'KFwvP1thLXpBLVpdW14+XHNdKil8KFwvPyQpKS9nLE90ZT0vLS0+L2csUHRlPS8+L2csY2c9UmVnRXhwKGA+fCR7Skh9KD86KFteXFxzIic+PS9dKykoJHtKSH0qPSR7Skh9Kig/OlteIFx0XG5cZlxyIidcYDw+PV18KCJ8Jyl8KSl8JClgLCJnIiksRnRlPS8nL2csSHRlPS8iL2csTnRlPS9e'@;
put 'KD86c2NyaXB0fHN0eWxlfHRleHRhcmVhfHRpdGxlKSQvaSxWdGU9Yz0+KGwsLi4uYSk9Pih7XyRsaXRUeXBlJDpjLHN0cmluZ3M6bCx2YWx1ZXM6YX0pLFFIPVZ0ZSgxKSxCd2U9VnRlKDIpLE03PVN5bWJvbC5mb3IoImxpdC1ub0NoYW5nZSIpLGR1PVN5bWJvbC5mb3IoImxpdC1ub3RoaW5n'@;
put 'IiksanRlPW5ldyBXZWFrTWFwLHVnPWxnLmNyZWF0ZVRyZWVXYWxrZXIobGcsMTI5LG51bGwsITEpO2Z1bmN0aW9uIEJ0ZShjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNPd25Qcm9wZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJh'@;
put 'eSIpO3JldHVybiB2b2lkIDAhPT1MdGU/THRlLmNyZWF0ZUhUTUwobCk6bH1jbGFzcyB4Yntjb25zdHJ1Y3Rvcih7c3RyaW5nczpsLF8kbGl0VHlwZSQ6YX0sZCl7bGV0IGg7dGhpcy5wYXJ0cz1bXTtsZXQgZj0wLHY9MDtjb25zdCBUPWwubGVuZ3RoLTEsWT10aGlzLnBhcnRzLFtyZSxmZV09'@;
put 'KChjLGwpPT57Y29uc3QgYT1jLmxlbmd0aC0xLGQ9W107bGV0IGgsZj0yPT09bD8iPHN2Zz4iOiIiLHY9U2I7Zm9yKGxldCBUPTA7VDxhO1QrKyl7Y29uc3QgWT1jW1RdO2xldCByZSxmZSxfZT0tMSxrZT0wO2Zvcig7a2U8WS5sZW5ndGgmJih2Lmxhc3RJbmRleD1rZSxmZT12LmV4ZWMoWSks'@;
put 'bnVsbCE9PWZlKTspa2U9di5sYXN0SW5kZXgsdj09PVNiPyIhLS0iPT09ZmVbMV0/dj1PdGU6dm9pZCAwIT09ZmVbMV0/dj1QdGU6dm9pZCAwIT09ZmVbMl0/KE50ZS50ZXN0KGZlWzJdKSYmKGg9UmVnRXhwKCI8LyIrZmVbMl0sImciKSksdj1jZyk6dm9pZCAwIT09ZmVbM10mJih2PWNnKTp2'@;
put 'PT09Y2c/Ij4iPT09ZmVbMF0/KHY9aD8/U2IsX2U9LTEpOnZvaWQgMD09PWZlWzFdP19lPS0yOihfZT12Lmxhc3RJbmRleC1mZVsyXS5sZW5ndGgscmU9ZmVbMV0sdj12b2lkIDA9PT1mZVszXT9jZzonIic9PT1mZVszXT9IdGU6RnRlKTp2PT09SHRlfHx2PT09RnRlP3Y9Y2c6dj09PU90ZXx8'@;
put 'dj09PVB0ZT92PVNiOih2PWNnLGg9dm9pZCAwKTtjb25zdCBXZT12PT09Y2cmJmNbVCsxXS5zdGFydHNXaXRoKCIvPiIpPyIgIjoiIjtmKz12PT09U2I/WStqd2U6X2U+PTA/KGQucHVzaChyZSksWS5zbGljZSgwLF9lKStERStZLnNsaWNlKF9lKStHMytXZSk6WStHMysoLTI9PT1fZT8oZC5w'@;
put 'dXNoKHZvaWQgMCksVCk6V2UpfXJldHVybltCdGUoYyxmKyhjW2FdfHwiPD8+IikrKDI9PT1sPyI8L3N2Zz4iOiIiKSksZF19KShsLGEpO2lmKHRoaXMuZWw9eGIuY3JlYXRlRWxlbWVudChyZSxkKSx1Zy5jdXJyZW50Tm9kZT10aGlzLmVsLmNvbnRlbnQsMj09PWEpe2NvbnN0IF9lPXRoaXMu'@;
put 'ZWwuY29udGVudCxrZT1fZS5maXJzdENoaWxkO2tlLnJlbW92ZSgpLF9lLmFwcGVuZCguLi5rZS5jaGlsZE5vZGVzKX1mb3IoO251bGwhPT0oaD11Zy5uZXh0Tm9kZSgpKSYmWS5sZW5ndGg8VDspe2lmKDE9PT1oLm5vZGVUeXBlKXtpZihoLmhhc0F0dHJpYnV0ZXMoKSl7Y29uc3QgX2U9W107'@;
put 'Zm9yKGNvbnN0IGtlIG9mIGguZ2V0QXR0cmlidXRlTmFtZXMoKSlpZihrZS5lbmRzV2l0aChERSl8fGtlLnN0YXJ0c1dpdGgoRzMpKXtjb25zdCBXZT1mZVt2KytdO2lmKF9lLnB1c2goa2UpLHZvaWQgMCE9PVdlKXtjb25zdCBKZT1oLmdldEF0dHJpYnV0ZShXZS50b0xvd2VyQ2FzZSgpK0RF'@;
put 'KS5zcGxpdChHMyksdHQ9LyhbLj9AXSk/KC4qKS8uZXhlYyhXZSk7WS5wdXNoKHt0eXBlOjEsaW5kZXg6ZixuYW1lOnR0WzJdLHN0cmluZ3M6SmUsY3RvcjoiLiI9PT10dFsxXT9VdGU6Ij8iPT09dHRbMV0/WnRlOiJAIj09PXR0WzFdP1d0ZTprYn0pfWVsc2UgWS5wdXNoKHt0eXBlOjYsaW5k'@;
put 'ZXg6Zn0pfWZvcihjb25zdCBrZSBvZiBfZSloLnJlbW92ZUF0dHJpYnV0ZShrZSl9aWYoTnRlLnRlc3QoaC50YWdOYW1lKSl7Y29uc3QgX2U9aC50ZXh0Q29udGVudC5zcGxpdChHMyksa2U9X2UubGVuZ3RoLTE7aWYoa2U+MCl7aC50ZXh0Q29udGVudD13Nz93Ny5lbXB0eVNjcmlwdDoiIjtm'@;
put 'b3IobGV0IFdlPTA7V2U8a2U7V2UrKyloLmFwcGVuZChfZVtXZV0sTWIoKSksdWcubmV4dE5vZGUoKSxZLnB1c2goe3R5cGU6MixpbmRleDorK2Z9KTtoLmFwcGVuZChfZVtrZV0sTWIoKSl9fX1lbHNlIGlmKDg9PT1oLm5vZGVUeXBlKWlmKGguZGF0YT09PVhIKVkucHVzaCh7dHlwZToyLGlu'@;
put 'ZGV4OmZ9KTtlbHNle2xldCBfZT0tMTtmb3IoOy0xIT09KF9lPWguZGF0YS5pbmRleE9mKEczLF9lKzEpKTspWS5wdXNoKHt0eXBlOjcsaW5kZXg6Zn0pLF9lKz1HMy5sZW5ndGgtMX1mKyt9fXN0YXRpYyBjcmVhdGVFbGVtZW50KGwsYSl7Y29uc3QgZD1sZy5jcmVhdGVFbGVtZW50KCJ0ZW1w'@;
put 'bGF0ZSIpO3JldHVybiBkLmlubmVySFRNTD1sLGR9fWZ1bmN0aW9uIGRnKGMsbCxhPWMsZCl7dmFyIGgsZix2LFQ7aWYobD09PU03KXJldHVybiBsO2xldCBZPXZvaWQgMCE9PWQ/bnVsbD09PShoPWEuXyRDbyl8fHZvaWQgMD09PWg/dm9pZCAwOmhbZF06YS5fJENsO2NvbnN0IHJlPUNiKGwp'@;
put 'P3ZvaWQgMDpsLl8kbGl0RGlyZWN0aXZlJDtyZXR1cm4gWT8uY29uc3RydWN0b3IhPT1yZSYmKG51bGw9PT0oZj1ZPy5fJEFPKXx8dm9pZCAwPT09Znx8Zi5jYWxsKFksITEpLHZvaWQgMD09PXJlP1k9dm9pZCAwOihZPW5ldyByZShjKSxZLl8kQVQoYyxhLGQpKSx2b2lkIDAhPT1kPyhudWxs'@;
put 'IT09KHY9KFQ9YSkuXyRDbykmJnZvaWQgMCE9PXY/djpULl8kQ289W10pW2RdPVk6YS5fJENsPVkpLHZvaWQgMCE9PVkmJihsPWRnKGMsWS5fJEFTKGMsbC52YWx1ZXMpLFksZCkpLGx9Y2xhc3MgenRle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fJEFWPVtdLHRoaXMuXyRBTj12b2lkIDAsdGhp'@;
put 'cy5fJEFEPWwsdGhpcy5fJEFNPWF9Z2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFNLnBhcmVudE5vZGV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9dShsKXt2YXIgYTtjb25zdHtlbDp7Y29udGVudDpkfSxwYXJ0czpofT10aGlzLl8kQUQsZj0obnVsbCE9PShhPWw/'@;
put 'LmNyZWF0aW9uU2NvcGUpJiZ2b2lkIDAhPT1hP2E6bGcpLmltcG9ydE5vZGUoZCwhMCk7dWcuY3VycmVudE5vZGU9ZjtsZXQgdj11Zy5uZXh0Tm9kZSgpLFQ9MCxZPTAscmU9aFswXTtmb3IoO3ZvaWQgMCE9PXJlOyl7aWYoVD09PXJlLmluZGV4KXtsZXQgZmU7Mj09PXJlLnR5cGU/ZmU9bmV3'@;
put 'IEM3KHYsdi5uZXh0U2libGluZyx0aGlzLGwpOjE9PT1yZS50eXBlP2ZlPW5ldyByZS5jdG9yKHYscmUubmFtZSxyZS5zdHJpbmdzLHRoaXMsbCk6Nj09PXJlLnR5cGUmJihmZT1uZXcgR3RlKHYsdGhpcyxsKSksdGhpcy5fJEFWLnB1c2goZmUpLHJlPWhbKytZXX1UIT09cmU/LmluZGV4JiYo'@;
put 'dj11Zy5uZXh0Tm9kZSgpLFQrKyl9cmV0dXJuIHVnLmN1cnJlbnROb2RlPWxnLGZ9dihsKXtsZXQgYT0wO2Zvcihjb25zdCBkIG9mIHRoaXMuXyRBVil2b2lkIDAhPT1kJiYodm9pZCAwIT09ZC5zdHJpbmdzPyhkLl8kQUkobCxkLGEpLGErPWQuc3RyaW5ncy5sZW5ndGgtMik6ZC5fJEFJKGxb'@;
put 'YV0pKSxhKyt9fWNsYXNzIEM3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3ZhciBmO3RoaXMudHlwZT0yLHRoaXMuXyRBSD1kdSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBQT1sLHRoaXMuXyRBQj1hLHRoaXMuXyRBTT1kLHRoaXMub3B0aW9ucz1oLHRoaXMuXyRDcD1udWxsPT09KGY9aD8uaXND'@;
put 'b25uZWN0ZWQpfHx2b2lkIDA9PT1mfHxmfWdldCBfJEFVKCl7dmFyIGwsYTtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0obD10aGlzLl8kQU0pfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLl8kQVUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5fJENwfWdldCBwYXJlbnROb2RlKCl7bGV0IGw9dGhpcy5fJEFB'@;
put 'LnBhcmVudE5vZGU7Y29uc3QgYT10aGlzLl8kQU07cmV0dXJuIHZvaWQgMCE9PWEmJjExPT09bD8ubm9kZVR5cGUmJihsPWEucGFyZW50Tm9kZSksbH1nZXQgc3RhcnROb2RlKCl7cmV0dXJuIHRoaXMuXyRBQX1nZXQgZW5kTm9kZSgpe3JldHVybiB0aGlzLl8kQUJ9XyRBSShsLGE9dGhpcyl7'@;
put 'bD1kZyh0aGlzLGwsYSksQ2IobCk/bD09PWR1fHxudWxsPT1sfHwiIj09PWw/KHRoaXMuXyRBSCE9PWR1JiZ0aGlzLl8kQVIoKSx0aGlzLl8kQUg9ZHUpOmwhPT10aGlzLl8kQUgmJmwhPT1NNyYmdGhpcy5fKGwpOnZvaWQgMCE9PWwuXyRsaXRUeXBlJD90aGlzLmcobCk6dm9pZCAwIT09bC5u'@;
put 'b2RlVHlwZT90aGlzLiQobCk6KGM9Pkl0ZShjKXx8ImZ1bmN0aW9uIj09dHlwZW9mIGM/LltTeW1ib2wuaXRlcmF0b3JdKShsKT90aGlzLlQobCk6dGhpcy5fKGwpfWsobCl7cmV0dXJuIHRoaXMuXyRBQS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLHRoaXMuXyRBQil9JChsKXt0aGlzLl8k'@;
put 'QUghPT1sJiYodGhpcy5fJEFSKCksdGhpcy5fJEFIPXRoaXMuayhsKSl9XyhsKXt0aGlzLl8kQUghPT1kdSYmQ2IodGhpcy5fJEFIKT90aGlzLl8kQUEubmV4dFNpYmxpbmcuZGF0YT1sOnRoaXMuJChsZy5jcmVhdGVUZXh0Tm9kZShsKSksdGhpcy5fJEFIPWx9ZyhsKXt2YXIgYTtjb25zdHt2'@;
put 'YWx1ZXM6ZCxfJGxpdFR5cGUkOmh9PWwsZj0ibnVtYmVyIj09dHlwZW9mIGg/dGhpcy5fJEFDKGwpOih2b2lkIDA9PT1oLmVsJiYoaC5lbD14Yi5jcmVhdGVFbGVtZW50KEJ0ZShoLmgsaC5oWzBdKSx0aGlzLm9wdGlvbnMpKSxoKTtpZigobnVsbD09PShhPXRoaXMuXyRBSCl8fHZvaWQgMD09'@;
put 'PWE/dm9pZCAwOmEuXyRBRCk9PT1mKXRoaXMuXyRBSC52KGQpO2Vsc2V7Y29uc3Qgdj1uZXcgenRlKGYsdGhpcyksVD12LnUodGhpcy5vcHRpb25zKTt2LnYoZCksdGhpcy4kKFQpLHRoaXMuXyRBSD12fX1fJEFDKGwpe2xldCBhPWp0ZS5nZXQobC5zdHJpbmdzKTtyZXR1cm4gdm9pZCAwPT09'@;
put 'YSYmanRlLnNldChsLnN0cmluZ3MsYT1uZXcgeGIobCkpLGF9VChsKXtJdGUodGhpcy5fJEFIKXx8KHRoaXMuXyRBSD1bXSx0aGlzLl8kQVIoKSk7Y29uc3QgYT10aGlzLl8kQUg7bGV0IGQsaD0wO2Zvcihjb25zdCBmIG9mIGwpaD09PWEubGVuZ3RoP2EucHVzaChkPW5ldyBDNyh0aGlzLmso'@;
put 'TWIoKSksdGhpcy5rKE1iKCkpLHRoaXMsdGhpcy5vcHRpb25zKSk6ZD1hW2hdLGQuXyRBSShmKSxoKys7aDxhLmxlbmd0aCYmKHRoaXMuXyRBUihkJiZkLl8kQUIubmV4dFNpYmxpbmcsaCksYS5sZW5ndGg9aCl9XyRBUihsPXRoaXMuXyRBQS5uZXh0U2libGluZyxhKXt2YXIgZDtmb3IobnVs'@;
put 'bD09PShkPXRoaXMuXyRBUCl8fHZvaWQgMD09PWR8fGQuY2FsbCh0aGlzLCExLCEwLGEpO2wmJmwhPT10aGlzLl8kQUI7KXtjb25zdCBoPWwubmV4dFNpYmxpbmc7bC5yZW1vdmUoKSxsPWh9fXNldENvbm5lY3RlZChsKXt2YXIgYTt2b2lkIDA9PT10aGlzLl8kQU0mJih0aGlzLl8kQ3A9bCxu'@;
put 'dWxsPT09KGE9dGhpcy5fJEFQKXx8dm9pZCAwPT09YXx8YS5jYWxsKHRoaXMsbCkpfX1jbGFzcyBrYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMudHlwZT0xLHRoaXMuXyRBSD1kdSx0aGlzLl8kQU49dm9pZCAwLHRoaXMuZWxlbWVudD1sLHRoaXMubmFtZT1hLHRoaXMuXyRBTT1oLHRo'@;
put 'aXMub3B0aW9ucz1mLGQubGVuZ3RoPjJ8fCIiIT09ZFswXXx8IiIhPT1kWzFdPyh0aGlzLl8kQUg9QXJyYXkoZC5sZW5ndGgtMSkuZmlsbChuZXcgU3RyaW5nKSx0aGlzLnN0cmluZ3M9ZCk6dGhpcy5fJEFIPWR1fWdldCB0YWdOYW1lKCl7cmV0dXJuIHRoaXMuZWxlbWVudC50YWdOYW1lfWdl'@;
put 'dCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5fJEFVfV8kQUkobCxhPXRoaXMsZCxoKXtjb25zdCBmPXRoaXMuc3RyaW5ncztsZXQgdj0hMTtpZih2b2lkIDA9PT1mKWw9ZGcodGhpcyxsLGEsMCksdj0hQ2IobCl8fGwhPT10aGlzLl8kQUgmJmwhPT1NNyx2JiYodGhpcy5fJEFIPWwpO2Vsc2V7'@;
put 'Y29uc3QgVD1sO2xldCBZLHJlO2ZvcihsPWZbMF0sWT0wO1k8Zi5sZW5ndGgtMTtZKyspcmU9ZGcodGhpcyxUW2QrWV0sYSxZKSxyZT09PU03JiYocmU9dGhpcy5fJEFIW1ldKSx2fHwodj0hQ2IocmUpfHxyZSE9PXRoaXMuXyRBSFtZXSkscmU9PT1kdT9sPWR1OmwhPT1kdSYmKGwrPShyZT8/'@;
put 'IiIpK2ZbWSsxXSksdGhpcy5fJEFIW1ldPXJlfXYmJiFoJiZ0aGlzLmoobCl9aihsKXtsPT09ZHU/dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpOnRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLGw/PyIiKX19Y2xhc3MgVXRlIGV4dGVuZHMga2J7Y29u'@;
put 'c3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMudHlwZT0zfWoobCl7dGhpcy5lbGVtZW50W3RoaXMubmFtZV09bD09PWR1P3ZvaWQgMDpsfX1jb25zdCBZd2U9dzc/dzcuZW1wdHlTY3JpcHQ6IiI7Y2xhc3MgWnRlIGV4dGVuZHMga2J7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h'@;
put 'cmd1bWVudHMpLHRoaXMudHlwZT00fWoobCl7bCYmbCE9PWR1P3RoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5uYW1lLFl3ZSk6dGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpfX1jbGFzcyBXdGUgZXh0ZW5kcyBrYntjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1'@;
put 'cGVyKGwsYSxkLGgsZiksdGhpcy50eXBlPTV9XyRBSShsLGE9dGhpcyl7dmFyIGQ7aWYoKGw9bnVsbCE9PShkPWRnKHRoaXMsbCxhLDApKSYmdm9pZCAwIT09ZD9kOmR1KT09PU03KXJldHVybjtjb25zdCBoPXRoaXMuXyRBSCxmPWw9PT1kdSYmaCE9PWR1fHxsLmNhcHR1cmUhPT1oLmNhcHR1'@;
put 'cmV8fGwub25jZSE9PWgub25jZXx8bC5wYXNzaXZlIT09aC5wYXNzaXZlLHY9bCE9PWR1JiYoaD09PWR1fHxmKTtmJiZ0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhpcyxoKSx2JiZ0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLm5hbWUsdGhp'@;
put 'cyxsKSx0aGlzLl8kQUg9bH1oYW5kbGVFdmVudChsKXt2YXIgYSxkOyJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl8kQUg/dGhpcy5fJEFILmNhbGwobnVsbCE9PShkPW51bGw9PT0oYT10aGlzLm9wdGlvbnMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhvc3QpJiZ2b2lkIDAhPT1kP2Q6dGhpcy5l'@;
put 'bGVtZW50LGwpOnRoaXMuXyRBSC5oYW5kbGVFdmVudChsKX19Y2xhc3MgR3Rle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLnR5cGU9Nix0aGlzLl8kQU49dm9pZCAwLHRoaXMuXyRBTT1hLHRoaXMub3B0aW9ucz1kfWdldCBfJEFVKCl7cmV0dXJuIHRoaXMuXyRBTS5f'@;
put 'JEFVfV8kQUkobCl7ZGcodGhpcyxsKX19Y29uc3QgJHRlPVRFLmxpdEh0bWxQb2x5ZmlsbFN1cHBvcnQ7JHRlPy4oeGIsQzcpLChudWxsIT09KEtIPVRFLmxpdEh0bWxWZXJzaW9ucykmJnZvaWQgMCE9PUtIP0tIOlRFLmxpdEh0bWxWZXJzaW9ucz1bXSkucHVzaCgiMi44LjAiKTtjb25zdCBx'@;
put 'dGU9KGMsbCxhKT0+e3ZhciBkLGg7Y29uc3QgZj1udWxsIT09KGQ9YT8ucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09ZD9kOmw7bGV0IHY9Zi5fJGxpdFBhcnQkO2lmKHZvaWQgMD09PXYpe2NvbnN0IFQ9bnVsbCE9PShoPWE/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWg/aDpudWxsO2YuXyRs'@;
put 'aXRQYXJ0JD12PW5ldyBDNyhsLmluc2VydEJlZm9yZShNYigpLFQpLFQsdm9pZCAwLGE/P3t9KX1yZXR1cm4gdi5fJEFJKGMpLHZ9O3ZhciBlTix0TjtjbGFzcyBTNyBleHRlbmRzIGI3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnJlbmRlck9wdGlvbnM9e2hvc3Q6'@;
put 'dGhpc30sdGhpcy5fJERvPXZvaWQgMH1jcmVhdGVSZW5kZXJSb290KCl7dmFyIGwsYTtjb25zdCBkPXN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTtyZXR1cm4gbnVsbCE9PShsPShhPXRoaXMucmVuZGVyT3B0aW9ucykucmVuZGVyQmVmb3JlKSYmdm9pZCAwIT09bHx8KGEucmVuZGVyQmVmb3Jl'@;
put 'PWQuZmlyc3RDaGlsZCksZH11cGRhdGUobCl7Y29uc3QgYT10aGlzLnJlbmRlcigpO3RoaXMuaGFzVXBkYXRlZHx8KHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZD10aGlzLmlzQ29ubmVjdGVkKSxzdXBlci51cGRhdGUobCksdGhpcy5fJERvPXF0ZShhLHRoaXMucmVuZGVyUm9vdCx0'@;
put 'aGlzLnJlbmRlck9wdGlvbnMpfWNvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERvKXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITApfWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7dmFyIGw7c3VwZXIuZGlzY29u'@;
put 'bmVjdGVkQ2FsbGJhY2soKSxudWxsPT09KGw9dGhpcy5fJERvKXx8dm9pZCAwPT09bHx8bC5zZXRDb25uZWN0ZWQoITEpfXJlbmRlcigpe3JldHVybiBNN319UzcuZmluYWxpemVkPSEwLFM3Ll8kbGl0RWxlbWVudCQ9ITAsbnVsbD09PShlTj1nbG9iYWxUaGlzLmxpdEVsZW1lbnRIeWRyYXRl'@;
put 'U3VwcG9ydCl8fHZvaWQgMD09PWVOfHxlTi5jYWxsKGdsb2JhbFRoaXMse0xpdEVsZW1lbnQ6Uzd9KTtjb25zdCBLdGU9Z2xvYmFsVGhpcy5saXRFbGVtZW50UG9seWZpbGxTdXBwb3J0O0t0ZT8uKHtMaXRFbGVtZW50OlM3fSksKG51bGwhPT0odE49Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVy'@;
put 'c2lvbnMpJiZ2b2lkIDAhPT10Tj90TjpnbG9iYWxUaGlzLmxpdEVsZW1lbnRWZXJzaW9ucz1bXSkucHVzaCgiMy4zLjMiKTtjb25zdCBYdGU9WkhgQGNoYXJzZXQgIlVURi04Ijs6aG9zdCw6cm9vdHstLc60Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMsIGNhbGMoNCAqIDFy'@;
put 'ZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzLCBjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60NDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSwgY2FsYygx'@;
put 'MiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ1OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLW1kLCBjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDY6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbGcs'@;
put 'IGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Nzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCwgY2FsYygzMiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13'@;
put 'cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwO2p1c3RpZnktaXRlbXM6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3dpZHRoOjEwMCU7bWFyZ2luOjA7bWluLWhlaWdodDowfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtdGV4dF17d2lkdGg6aW5pdGlhbCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQi'@;
put 'XXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpz'@;
put 'dHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpz'@;
put 'dHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtj'@;
put 'ZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxh'@;
put 'eW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2Rz'@;
put 'LWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlv'@;
put 'dXR+PXZlcnRpY2FsXXt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2p1c3RpZnktY29u'@;
put 'dGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1s'@;
put 'YXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxh'@;
put 'eW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRlcjpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVy'@;
put 'c2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh'@;
put 'eW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jp'@;
put 'em9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21h'@;
put 'cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWduLWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0'@;
put 'ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMsMTIpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRvKX1bY2RzLWxheW91dH49Z3JpZF0+W2Nk'@;
put 'cy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1b'@;
put 'Y2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0'@;
put 'cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMt'@;
put 'bGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRl'@;
put 'bnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9OjpzbG90dGVkKFtjZHMtbGF5b3V0fj0i'@;
put 'ZGlzcGxheTpzY3JlZW4tcmVhZGVyLW9ubHkiXSksW2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJde3Bvc2l0aW9uOmFic29sdXRlIWltcG9ydGFudDtjbGlwOnJlY3QoMXB4LDFweCwxcHgsMXB4KTtjbGlwLXBhdGg6aW5zZXQoNTAlKTtwYWRkaW5nOjA7Ym9yZGVy'@;
put 'OjA7aGVpZ2h0OjFweDt3aWR0aDoxcHg7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0b3A6MDtsZWZ0OjA7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJnYXA6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4cyJde2dhcDp2YXIoLS3OtDIp'@;
put 'fVtjZHMtbGF5b3V0Kj0iZ2FwOnhzIl17Z2FwOnZhcigtLc60Myl9W2Nkcy1sYXlvdXQqPSJnYXA6c20iXXtnYXA6dmFyKC0tzrQ0KX1bY2RzLWxheW91dCo9ImdhcDptZCJde2dhcDp2YXIoLS3OtDUpfVtjZHMtbGF5b3V0Kj0iZ2FwOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+'@;
put 'PSJwOm5vbmUiXXtwYWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMiXXtwYWRkaW5nOnZhcigtLc60MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4cyJde3BhZGRpbmc6dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIo'@;
put 'LS3OtDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bWQiXXtwYWRkaW5nOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTptZCJde21hcmdpbjp2YXIoLS3OtDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6bGciXXtwYWRkaW5nOnZhcigtLc60NikhaW1wb3J0YW50'@;
put 'fVtjZHMtbGF5b3V0fj0icC15OnhzIl17cGFkZGluZy10b3A6dmFyKC0tzrQzKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2'@;
put 'YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTpsZyJde3BhZGRpbmctdG9wOnZhcigtLc60NikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLc60NSkhaW1wb3J0'@;
put 'YW50fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS3OtDYpfVtjZHMtbGF5b3V0fj0icEBtZDpsZyJde3BhZGRpbmc6dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnhsIl17bWFyZ2luOnZhcigtLc60Nykh'@;
put 'aW1wb3J0YW50fX1bY2RzLWxheW91dH49ZmlsbF17d2lkdGg6MTAwJSFpbXBvcnRhbnR9Kiw6YWZ0ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT46OnNsb3R0ZWQo'@;
put 'KiksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+OjpzbG90dGVkKCopLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKil7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRp'@;
put 'Y2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49'@;
put 'dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0g'@;
put 'OjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbjpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5'@;
put 'b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRv'@;
put 'fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206'@;
put 'Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFs'@;
put 'aWduQHNtOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0'@;
put 'ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9t'@;
put 'OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRl'@;
put 'cn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe21hcmdp'@;
put 'bi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJd'@;
put 'KXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu'@;
put 'QGxnOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGlj'@;
put 'YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91'@;
put 'dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSks'@;
put 'W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhs'@;
put 'OmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dG9w'@;
put 'Il0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxh'@;
put 'eW91dCo9ImFsaWduQHhsOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMt'@;
put 'bGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9'@;
put 'ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jp'@;
put 'em9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49'@;
put 'aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0'@;
put 'YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1j'@;
put 'ZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1j'@;
put 'ZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1o'@;
put 'b3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRh'@;
put 'bnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxh'@;
put 'eW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv'@;
put 'dXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxh'@;
put 'eW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1l'@;
put 'bmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21h'@;
put 'cmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91'@;
put 'dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq'@;
put 'PSJhbGlnbkBtZDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJdKXthbGlnbi1zZWxmOmZs'@;
put 'ZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJdKXtt'@;
put 'YXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXR+PWhvcml6'@;
put 'b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdo'@;
put 'dDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl0pe2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90'@;
put 'dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv'@;
put 'dXQqPSJhbGlnbkBsZzpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9u'@;
put 'dGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRh'@;
put 'bF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGln'@;
put 'bkB4bDp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5'@;
put 'b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1bY2RzLXRleHRde2ZvbnQtZmFt'@;
put 'aWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjB9W2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtj'@;
put 'ZHMtbGF5b3V0fj1ncmlkXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmFmdGVyLFtjZHMtdGV4dF1bY2RzLWxheW91dH49aG9yaXpvbnRhbF06OmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMt'@;
put 'bGF5b3V0fj12ZXJ0aWNhbF06OmJlZm9yZXtkaXNwbGF5Om5vbmV9W2Nkcy10ZXh0Kj1kaXNwbGF5XSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRl'@;
put 'ci1mb250LWZhbWlseSwgIkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWYpO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwLCMyMTMzM2IpKX1bY2RzLXRleHQqPWJv'@;
put 'ZHldLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci01MDAsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjaywjMDAwKSl9W2Nkcy10ZXh0Kj1pbmxpbmVde3dpZHRoOmF1dG8haW1wb3J0YW50'@;
put 'O2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1bY2RzLXRleHQqPWRpc3BsYXlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUsY2FsYyg0MCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6'@;
put 'dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQsNTAwKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRp'@;
put 'c3BsYXktbGV0dGVyLXNwYWNpbmcsLS4wMTI1ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQs'@;
put 'LjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCwxLjFlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWRpc3BsYXldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6'@;
put 'MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14'@;
put 'LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9dGl0bGVde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0'@;
put 'bGUtZm9udC1zaXplLGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRs'@;
put 'ZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGV0dGVyLXNwYWNpbmcsLS4wMDgzMzMzM2VtKX1bY2RzLXRleHQqPXRpdGxlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3'@;
put 'aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIpKSotMSkgKyAu'@;
put 'MDM3ZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWds'@;
put 'b2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1saW5lLWhlaWdodCwxLjMzMzMzM2VtKSAtIDFlbSkvIDIp'@;
put 'KSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSxjYWxjKDIwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFs'@;
put 'LXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3Bh'@;
put 'Y2luZywtLjAxZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCwxLjJlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY3Rpb25dOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMo'@;
put 'KCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSAr'@;
put 'IGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQt'@;
put 'c2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0'@;
put 'aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6'@;
put 'MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkg'@;
put 'KyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0g'@;
put 'MWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1ib2R5XXtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCw0MDApO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUsY2FsYygxNCAq'@;
put 'IDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcsLS4wMDcxNDI4NmVtKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhl'@;
put 'aWdodCwxLjQyODU3MTRlbSl9W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMo'@;
put 'KHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMo'@;
put 'KCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSAr'@;
put 'IGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfWJvZHlbY2RzLXRleHQqPWJvZHldOjphZnRlcixib2R5W2Nkcy10ZXh0Kj1ib2R5XTo6YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2Rz'@;
put 'LXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXNpemUsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2Ut'@;
put 'Zm9udC13ZWlnaHQsY2FsYyg0MDAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw'@;
put 'aHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl'@;
put 'aWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxpbmUtaGVpZ2h0LDEuNWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3'@;
put 'aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh'@;
put 'cGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnlde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n'@;
put 'cmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSxjYWxjKDEzICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0LDQwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh'@;
put 'bC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcsLS4wMDc2OTJlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjpiZWZvcmV7Y29udGVudDoi'@;
put 'IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwx'@;
put 'LjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOjphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1n'@;
put 'YXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcwM2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRh'@;
put 'cnktbGluZS1oZWlnaHQsMS4yMzA3N2VtKSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dH49bGlua117Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3IsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwjMDA3OWFkKSkhaW1wb3J0YW50'@;
put 'O3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUhaW1wb3J0YW50O2xpbmUtaGVpZ2h0OmluaGVyaXQhaW1wb3J0YW50O2ZvbnQtc2l6ZTppbmhlcml0IWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRs'@;
put 'aW5lLEhpZ2hsaWdodCBzb2xpZCAycHgpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1bY2RzLXRleHR+PWxpbmtdOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhv'@;
put 'dmVyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDAsIzAwNjA4YSkpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSl7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCx2YXIoLS1j'@;
put 'ZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCwjM2I0MGNlKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3Zlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyLHZh'@;
put 'cigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNzAwLCMyNDI5YzIpKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRs'@;
put 'aW5lLXdlYmtpdCw1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IpfX1bY2RzLXRleHR+PWNvZGVde2NvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwjZTAyMjAwKSk7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2Zv'@;
put 'bnQtc2l6ZToxLjFlbX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO292ZXJmbG93OmhpZGRlbjtib3gtc2hhZG93OnZhcigt'@;
put 'LWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwjY2JkNGQ4KSkgMCAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwLGNhbGMoMSAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2Us'@;
put 'MjApKSkgaW5zZXR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0LDMwMCkhaW1wb3J0YW50fVtjZHMtdGV4dH49anVzdGlmeV17dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1bY2RzLXRleHR+PWxl'@;
put 'ZnRde3RleHQtYWxpZ246bGVmdCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1yaWdodF17dGV4dC1hbGlnbjpyaWdodCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jZW50ZXJde3RleHQtYWxpZ246Y2VudGVyIWltcG9ydGFudH1bY2RzLXRleHR+PWxoZV17cGFkZGluZzouMDVweCAwfVtjZHMtdGV4dH49'@;
put 'bGhlXTo6YmVmb3Jle2NvbnRlbnQ6IiI7bWFyZ2luLXRvcDotLjEyNGVtO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjB9W2Nkcy10ZXh0fj1saGVdOjphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dCo9aDJdLFtjZHMt'@;
put 'dGV4dCo9aDNde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtmb250LXNpemU6MS40cmVtO2ZvbnQtd2VpZ2h0OjIwMDtjb2xvcjp2YXIoLS1jZHMtZ2xv'@;
put 'YmFsLXR5cG9ncmFwaHktY29sb3ItNDAwKTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0t'@;
put 'Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWgyXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpj'@;
put 'YWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2Vt'@;
put 'KSkgKyBjYWxjKCgxLjcxNDNlbSAtIDFlbSkvIDIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDNde2ZvbnQtc2l6ZToxLjFyZW07bGluZS1oZWlnaHQ6MS4wOTA5ZW07bGV0dGVyLXNwYWNpbmc6LS4wMTM2MzZlbX1bY2RzLXRleHQqPWgzXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh'@;
put 'eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106OmFmdGVye2Nv'@;
put 'bnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4x'@;
put 'NzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX06aG9zdHthbGw6aW5pdGlhbDtkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6aW5oZXJpdDtmb250LWZhbWlseTp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtjb250YWluOmxheW91dDtib3gtc2l6aW5nOmJvcmRlci1ib3ghaW1wb3J0YW50Oy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudH0qLDph'@;
put 'ZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9c2xvdHtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC1mYW1pbHksICJDbGFyaXR5IENpdHkiLCAiQXZlbmlyIE5leHQiLCBzYW5zLXNlcmlmKTtkaXNwbGF5OmNvbnRlbnRzIWltcG9y'@;
put 'dGFudH06OnNsb3R0ZWQoKil7Zm9udC1mYW1pbHk6aW5oZXJpdDtib3gtc2l6aW5nOmluaGVyaXR9OjpzbG90dGVkKCopOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYw'@;
put 'MCwjNGY2MTY5KSl9Omhvc3QoW19pcy1hbmNob3JdKSw6aG9zdChbcm9sZT1idXR0b25dKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRhbnR9Omhvc3QoW19pcy1hbmNob3JdKSA6OnNsb3R0ZWQoKiksOmhvc3QoW3JvbGU9YnV0dG9uXSkgOjpzbG90dGVkKCope2N1cnNvcjpwb2ludGVyIWltcG9y'@;
put 'dGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSl7Y3Vyc29yOm5vdC1hbGxvd2VkIWltcG9ydGFudH06aG9zdChbcm9sZT1idXR0b25dW2Rpc2FibGVkXSkgOjpzbG90dGVkKCope2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX06aG9zdChb'@;
put 'aGlkZGVuXSksW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH06aG9zdChbaGlkZGVuKj1mYWxzZV0pe2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSksOmhvc3QoW3JvbGU9ZGlhbG9nXVtoaWRkZW5dKSA6OnNsb3R0ZWQoKil7ZGlzcGxh'@;
put 'eTpibG9jayFpbXBvcnRhbnQ7dmlzaWJpbGl0eTpoaWRkZW4haW1wb3J0YW50fTpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuKj1mYWxzZV0pIDo6c2xvdHRlZCgqKXt2aXNpYmlsaXR5OnZpc2libGUhaW1wb3J0YW50fTpob3N0'@;
put 'KFtfZm9jdXNlZF0pIC5pbnB1dCw6aG9zdChbX2ZvY3VzZWRdKSBbZm9jdXNhYmxlXSw6aG9zdChbdGFiaW5kZXg9IjAiXTpmb2N1cyksOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpIFtmb2N1c2FibGVdLFt0YWJpbmRleD0iMCJdW2ZvY3VzYWJsZV06Zm9jdXN7b3V0bGluZTpIaWdobGln'@;
put 'aHQgc29saWQgMnB4O291dGxpbmU6NXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQsMXB4KX1gO2Z1bmN0aW9uIG5OKGMpe3JldHVybmBjYWxjKCgke2N9IC8gdmFy'@;
put 'KC0tY2RzLWdsb2JhbC1iYXNlKSkgKiAxcmVtKWB9Y29uc3QgR3dlPShjLGwpPT4ibWV0aG9kIj09PWwua2luZCYmbC5kZXNjcmlwdG9yJiYhKCJ2YWx1ZSJpbiBsLmRlc2NyaXB0b3IpP3suLi5sLGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXksYyl9fTp7a2luZDoiZmllbGQi'@;
put 'LGtleTpTeW1ib2woKSxwbGFjZW1lbnQ6Im93biIsZGVzY3JpcHRvcjp7fSxvcmlnaW5hbEtleTpsLmtleSxpbml0aWFsaXplcigpeyJmdW5jdGlvbiI9PXR5cGVvZiBsLmluaXRpYWxpemVyJiYodGhpc1tsLmtleV09bC5pbml0aWFsaXplci5jYWxsKHRoaXMpKX0sZmluaXNoZXIoYSl7YS5j'@;
put 'cmVhdGVQcm9wZXJ0eShsLmtleSxjKX19LCR3ZT0oYyxsLGEpPT57bC5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShhLGMpfTtmdW5jdGlvbiBKdGUoYyl7cmV0dXJuKGwsYSk9PnZvaWQgMCE9PWE/JHdlKGMsbCxhKTpHd2UoYyxsKX1mdW5jdGlvbiB0bmUoYyxsKXtzd2l0Y2gobCYmbC50'@;
put 'eXBlKXtjYXNlIEFycmF5OmNhc2UgT2JqZWN0OnJldHVybntyZWZsZWN0OiExLC4uLmx9O2Nhc2UgU3RyaW5nOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTppZyhjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmF8fG51bGx9LC4uLmx9O2Nhc2UgTnVtYmVyOnJldHVybntyZWZsZWN0'@;
put 'OiEwLGF0dHJpYnV0ZTppZyhjKSwuLi5sfTtjYXNlIEJvb2xlYW46cmV0dXJue3JlZmxlY3Q6ITAsYXR0cmlidXRlOmlnKGMpLGNvbnZlcnRlcjp7dG9BdHRyaWJ1dGU6YT0+YT8iIjpudWxsLGZyb21BdHRyaWJ1dGU6YT0+ZnVuY3Rpb24gUXdlKGMpe3JldHVybiBudWxsIT1jJiYiIitjIT0i'@;
put 'ZmFsc2UifShhKX0sLi4ubH07Y2FzZSBEYXRlOnJldHVybntyZWZsZWN0OiExLGNvbnZlcnRlcjp7ZnJvbUF0dHJpYnV0ZTphPT5uZXcgRGF0ZShhKX0sLi4ubH07ZGVmYXVsdDpyZXR1cm57Li4ubH19fWZ1bmN0aW9uIG9jKGMpe3JldHVybihsLGEpPT4oYz8ucmVxdWlyZWQmJmZ1bmN0aW9u'@;
put 'IGVNZShjLGwsYSl7Y29uc3QgZD1jLmZpcnN0VXBkYXRlZDtjLmZpcnN0VXBkYXRlZD1mdW5jdGlvbihoKXtpZihhJiZhLnJlcXVpcmVkJiZqNCh0aGlzW2xdKSl7Y29uc3QgZj1hLnJlcXVpcmVkTWVzc2FnZXx8ZnVuY3Rpb24odj0id2FybmluZyIsVCxZKXtjb25zdCByZT1ZLnRvTG9jYWxl'@;
put 'TG93ZXJDYXNlKCk7cmV0dXJuYCR7X2VlKHYpfTogJHtUfSBpcyByZXF1aXJlZCB0byB1c2UgJHtyZX0gY29tcG9uZW50LiBTZXQgdGhlIEpTIFByb3BlcnR5IG9yIEhUTUwgQXR0cmlidXRlLlxuXG5gKyhoZWUoKT9gQW5ndWxhcjogPCR7cmV9IFske1R9XT0iLi4uIj48LyR7cmV9PlxuYDoi'@;
put 'IikrKHBlZSgpP2BWdWU6IDwke3JlfSA6JHtUfT0iLi4uIj48LyR7cmV9PlxuYDoiIikrKGZlZSgpP2BSZWFjdDogPCR7ZnVuY3Rpb24gY3llKGMpe3JldHVybiBfZWUoZnVuY3Rpb24gbHllKGMpe3JldHVybiBjLnNwbGl0KCItIikubWFwKChsLGEpPT5hP2wuY2hhckF0KDApLnRvVXBwZXJD'@;
put 'YXNlKCkrbC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpOmwpLmpvaW4oIiIpfShjKSl9KHJlKX0gJHtmZT1ULGZlLnN0YXJ0c1dpdGgoImFyaWEiKT9pZyhmZSk6ZmV9PXsuLi59IC8+XG5gOiIiKStgSFRNTDogPCR7cmV9ICR7aWcoVCl9PSIuLi4iPjwvJHtyZX0+XG5KYXZhU2NyaXB0OiBkb2N1'@;
put 'bWVudC5xdWVyeVNlbGVjdG9yKCcke3JlfScpLiR7VH0gPSAnLi4uJztcblxuYDt2YXIgZmV9KGEucmVxdWlyZWQsbCx0aGlzLnRhZ05hbWUpO2lmKCJlcnJvciI9PT1hLnJlcXVpcmVkKXRocm93IEVycm9yKGYpO29nLndhcm4oZix0aGlzKX1kJiZkLmNhbGwodGhpcyxoKX19KGwsYSxjKSxK'@;
put 'dGUodG5lKGEsYykpKGwsYSkpfWZ1bmN0aW9uIG5uZShjKXtyZXR1cm4obCxhKT0+e2NvbnN0IGQ9dG5lKGEsYyk7cmV0dXJuIGQmJihkLnJlZmxlY3Q9ISFjPy5yZWZsZWN0JiZjLnJlZmxlY3QsZC5yZWZsZWN0JiYhYz8uYXR0cmlidXRlJiYoZC5hdHRyaWJ1dGU9Il8iK2lnKGEpKSksSnRl'@;
put 'KGQpKGwsYSl9fXZhciB5ZixyTWU9WkhgQGtleWZyYW1lcyBmYWRlSW5BbmRPdXR7MCUsdG97b3BhY2l0eTowfTc1JXtvcGFjaXR5OjF9fTpob3N0ey0tY29sb3I6Y3VycmVudENvbG9yO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygx'@;
put 'NiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVt'@;
put 'IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246bWlkZGxlO2ZpbGw6dmFyKC0tY29sb3IpO2NvbG9y'@;
put 'OnZhcigtLWNvbG9yKTtjb250YWluOnN0cmljdDtjdXJzb3I6aW5oZXJpdH1zdmd7ZGlzcGxheTpibG9ja306aG9zdChbc2l6ZSo9eHNdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7d2lkdGg6dmFy'@;
put 'KC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPXNtXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIo'@;
put 'LS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLXdpZHRoOnZhcigtLWNk'@;
put 'cy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bWRdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZh'@;
put 'cigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0t'@;
put 'Y2RzLWdsb2JhbC1zcGFjZS05LGNhbGMoMjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1sZ10pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRo'@;
put 'OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13aWR0aDp2'@;
put 'YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14bF0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp'@;
put 'O3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIsY2FsYyg0OCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi13'@;
put 'aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj14eGxdKXtoZWlnaHQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2Jh'@;
put 'bC1iYXNlLDIwKSkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpO3dpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp'@;
put 'KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4taGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZh'@;
put 'cigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTttaW4td2lkdGg6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzLGNhbGMoNjQgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpIC0gdmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSkpfTpob3N0KFtzaXplKj1maXRdKXtoZWlnaHQ6YXV0bzt3aWR0aDphdXRvO2NvbnRhaW46bGF5b3V0fTpob3N0KFtzdGF0dXM9c3VjY2Vzc10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFz'@;
put 'LXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtzdGF0dXM9ZGFuZ2VyXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9'@;
put 'Omhvc3QoW3N0YXR1cz13YXJuaW5nXSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbc3RhdHVzPWluZm9dKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt'@;
put 'aW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTpob3N0KFtzdGF0dXM9bmV1dHJhbF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06'@;
put 'aG9zdChbaW52ZXJzZV0pey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwLCAjY2JkNGQ4KX06aG9zdChbZGlyZWN0aW9uPXVwXSl7dHJhbnNmb3JtOnJvdGF0ZSgwKX06aG9zdChbZGlyZWN0aW9uPWRvd25dKXt0cmFuc2Zvcm06cm90YXRlKDE4MGRlZyl9'@;
put 'Omhvc3QoW2RpcmVjdGlvbj1yaWdodF0pe3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfTpob3N0KFtkaXJlY3Rpb249bGVmdF0pe3RyYW5zZm9ybTpyb3RhdGUoMjcwZGVnKX06aG9zdChbZmxpcD1ob3Jpem9udGFsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Omhvc3Qo'@;
put 'W2ZsaXA9dmVydGljYWxdKXt0cmFuc2Zvcm06c2NhbGUoLTEpIHJvdGF0ZVkoMTgwZGVnKX0uYWxlcnQsLmJhZGdle2ZpbGw6dmFyKC0tYmFkZ2UtY29sb3IsdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDApKSl9Omhv'@;
put 'c3QoW2JhZGdlPXN1Y2Nlc3NdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbYmFkZ2U9ZGFuZ2VyXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3Rh'@;
put 'dHVzLWRhbmdlciwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCAjZTAyMjAwKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNh'@;
put 'MzY1MDApKX06aG9zdChbYmFkZ2U9aW5oZXJpdF0pey0tYmFkZ2UtY29sb3I6Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZT1pbmZvXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX06'@;
put 'aG9zdChbYmFkZ2U9bmV1dHJhbF0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAsICM0ZjYxNjkpKX06aG9zdChbYmFkZ2U9aW5oZXJpdC10cmlhbmdsZV0pey0tYmFkZ2UtY29sb3I6'@;
put 'Y3VycmVudENvbG9yfTpob3N0KFtiYWRnZV1baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXVtpbnZlcnNlXSl7LS1iYWRnZS1j'@;
put 'b2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlKj13YXJuaW5nXVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctZGFyaywg'@;
put 'dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDAsICNhMzY1MDApKX06aG9zdChbYmFkZ2UqPWluaGVyaXRdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0'@;
put 'YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCAjMDA3OWFkKSl9LmNkcy1pbnRlcm5hbC1kb3QtMXthbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1pbiAwcyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ye2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQg'@;
put 'MS44cyBlYXNlLW91dCAuNDIycyBpbmZpbml0ZX0uY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpmYWRlSW5BbmRPdXQgMS44cyBlYXNlLW91dCAuNjc1cyBpbmZpbml0ZX1AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pey5jZHMtaW50ZXJuYWwtZG90LTEsLmNkcy1pbnRlcm5h'@;
put 'bC1kb3QtMiwuY2RzLWludGVybmFsLWRvdC0ze2FuaW1hdGlvbjpub25lfX1gO2Z1bmN0aW9uIGFNZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBpTWUoYyl7c3dpdGNoKCEwKXtjYXNlIGo0KGMpOnJldHVybiB5Zi5OaWxTaXplVmFsdWU7Y2FzZSBmdW5jdGlvbiBybmUoYyl7cmV0'@;
put 'dXJuWyJ4eHMiLCJ4cyIsInNtIiwibWQiLCJsZyIsInhsIiwieHhsIl0uaW5kZXhPZihjKT4tMX0oYyk6cmV0dXJuIHlmLlZhbGlkU2l6ZVN0cmluZztjYXNlIGZ1bmN0aW9uIGllZShjKXtyZXR1cm4gd0goYykmJiFyZWUoYy50cmltKCkpJiYrYz09K2N9KGMpOnJldHVybiB5Zi5WYWxpZE51'@;
put 'bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4geWYuQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gb01lKGMpe3JldHVybiBqNChjKT8iIjpmdW5jdGlvbiB1eWUoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYhPT1sKTpkLm1hcChmPT5mPT09bD9h'@;
put 'OmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIHlmLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT1uTihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBad2UoYywuLi5sKXtsLmZvckVhY2goKFthLGRdKT0+e2Muc3R5bGVbYV09ZH0p'@;
put 'fShjLC4uLmZ1bmN0aW9uIHNNZShjLGwpe3JldHVybiFkYihjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsiaGVpZ2h0IixsXSxbIm1pbi13aWR0'@;
put 'aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgeWYuVmFsaWRTaXplU3RyaW5nOmNhc2UgeWYuTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIFd3ZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3aWR0aCIsImhlaWdodCIsIm1pbi13'@;
put 'aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24gck4oYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0hZnVuY3Rpb24oYyl7Yy5CYWRTaXplVmFsdWU9ImJhZC12YWx1'@;
put 'ZSIsYy5WYWxpZFNpemVTdHJpbmc9InZhbHVlLWlzLXN0cmluZyIsYy5WYWxpZE51bWVyaWNTdHJpbmc9InZhbHVlLWlzLW51bWVyaWMiLGMuTmlsU2l6ZVZhbHVlPSJ2YWx1ZS1pcy1uaWwifSh5Znx8KHlmPXt9KSk7Y2xhc3MgZTIgZXh0ZW5kcyBTN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4u'@;
put 'LmFyZ3VtZW50cyksdGhpcy5fc2hhcGU9InVua25vd24iLHRoaXMuc29saWQ9ITEsdGhpcy5pbnZlcnNlPSExfXN0YXRpYyBnZXQgc3R5bGVzKCl7cmV0dXJuW1h0ZSxyTWVdfWdldCBzaGFwZSgpe3JldHVybiB0aGlzLl9zaGFwZX1zZXQgc2hhcGUobCl7aWYoZnVuY3Rpb24gSnZlKGMsbCl7'@;
put 'cmV0dXJuIWo0KGMpJiZzZWUoYyxsKX0obCx0aGlzLl9zaGFwZSkpe2NvbnN0IGE9dGhpcy5fc2hhcGU7dGhpcy5fc2hhcGU9bCx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIixhKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShsKXtpZihmdW5jdGlvbiBYdmUoYyxs'@;
put 'KXtyZXR1cm4gZnVuY3Rpb24gS3ZlKGMpe3JldHVybiBhRShTdHJpbmcsYyl8fGRiKGMpfShjKSYmc2VlKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsYU1lKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19dXBkYXRlZChs'@;
put 'KXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPW5OKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7bk4oMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0eWxlLmhlaWdo'@;
put 'dD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPXV1LnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZD0+'@;
put 'eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJnFzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gd0gocXMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP1FIYDxzcGFuIC5pbm5lckhUTUw9IiR7cXMucmVnaXN0cnlbdGhpcy5zaGFwZV19Ij48L3NwYW4+YDpCd2VgPHN2ZyAuaW5uZXJIVE1MPSIke2Z1bmN0aW9u'@;
put 'IGNNZShjKXtjb25zdCBsPXFzLnJlZ2lzdHJ5W2Muc2hhcGVdPz9xcy5yZWdpc3RyeS51bmtub3duO2xldCBhPWMuc29saWQmJmwuc29saWQ/bC5zb2xpZDpsLm91dGxpbmU7cmV0dXJuIGMuYmFkZ2UmJiFyTihjKSYmKGE9Yy5zb2xpZD9sLnNvbGlkQmFkZ2VkPz9hOmwub3V0bGluZUJhZGdl'@;
put 'ZD8/YSksck4oYykmJihhPWMuc29saWQ/bC5zb2xpZEFsZXJ0ZWQ/P2E6bC5vdXRsaW5lQWxlcnRlZD8/YSksYX0odGhpcykrZnVuY3Rpb24gbE1lKGMpe2xldCBsPSIiO3JldHVybiBjLmJhZGdlJiZyTihjKT9sPSc8cGF0aCBkPSJNMjYuODUgMS4xNEwyMS4xMyAxMWExLjI4IDEuMjggMCAw'@;
put 'MDEuMSAyaDExLjQ1YTEuMjggMS4yOCAwIDAwMS4xLTJsLTUuNzItOS44NmExLjI4IDEuMjggMCAwMC0yLjIxIDB6IiBjbGFzcz0iYWxlcnQiIC8+JzpjLmJhZGdlJiYobD0nPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iYmFkZ2UiIC8+JyksbH0odGhpcyl9IiB2aWV3Qm94'@;
put 'PSIwIDAgMzYgMzYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgYXJpYS1oaWRkZW49InRydWUiPjwvc3ZnPmB9fXZsKFtvYyh7dHlwZTpTdHJpbmd9KV0sZTIucHJvdG90eXBlLCJzaGFwZSIsbnVsbCksdmwoW29jKHt0eXBlOlN0cmluZ30pXSxlMi5wcm90b3R5cGUsInNp'@;
put 'emUiLG51bGwpLHZsKFtvYyh7dHlwZTpTdHJpbmd9KV0sZTIucHJvdG90eXBlLCJkaXJlY3Rpb24iLHZvaWQgMCksdmwoW29jKHt0eXBlOlN0cmluZ30pXSxlMi5wcm90b3R5cGUsImZsaXAiLHZvaWQgMCksdmwoW29jKHt0eXBlOkJvb2xlYW59KV0sZTIucHJvdG90eXBlLCJzb2xpZCIsdm9p'@;
put 'ZCAwKSx2bChbb2Moe3R5cGU6U3RyaW5nfSldLGUyLnByb3RvdHlwZSwic3RhdHVzIix2b2lkIDApLHZsKFtvYyh7dHlwZTpCb29sZWFufSldLGUyLnByb3RvdHlwZSwiaW52ZXJzZSIsdm9pZCAwKSx2bChbb2Moe3R5cGU6U3RyaW5nfSldLGUyLnByb3RvdHlwZSwiYmFkZ2UiLHZvaWQgMCks'@;
put 'dmwoW25uZSh7dHlwZTpOdW1iZXJ9KV0sZTIucHJvdG90eXBlLCJpbm5lck9mZnNldCIsdm9pZCAwKSx2bChbZnVuY3Rpb24gbk1lKGMsbCl7cmV0dXJuKCh7ZmluaXNoZXI6YyxkZXNjcmlwdG9yOmx9KT0+KGEsZCk9Pnt2YXIgaDtpZih2b2lkIDA9PT1kKXtjb25zdCBmPW51bGwhPT0oaD1h'@;
put 'Lm9yaWdpbmFsS2V5KSYmdm9pZCAwIT09aD9oOmEua2V5LHY9bnVsbCE9bD97a2luZDoibWV0aG9kIixwbGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OmYsZGVzY3JpcHRvcjpsKGEua2V5KX06ey4uLmEsa2V5OmZ9O3JldHVybiBudWxsIT1jJiYodi5maW5pc2hlcj1mdW5jdGlvbihUKXtjKFQs'@;
put 'Zil9KSx2fXtjb25zdCBmPWEuY29uc3RydWN0b3I7dm9pZCAwIT09bCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsZCxsKGQpKSxjPy4oZixkKX19KSh7ZGVzY3JpcHRvcjphPT57Y29uc3QgZD17Z2V0KCl7dmFyIGgsZjtyZXR1cm4gbnVsbCE9PShmPW51bGw9PT0oaD10aGlzLnJlbmRlclJv'@;
put 'b3QpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT1mP2Y6bnVsbH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9O2lmKGwpe2NvbnN0IGg9InN5bWJvbCI9PXR5cGVvZiBhP1N5bWJvbCgpOiJfXyIrYTtkLmdldD1mdW5jdGlvbigpe3ZhciBm'@;
put 'LHY7cmV0dXJuIHZvaWQgMD09PXRoaXNbaF0mJih0aGlzW2hdPW51bGwhPT0odj1udWxsPT09KGY9dGhpcy5yZW5kZXJSb290KXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5xdWVyeVNlbGVjdG9yKGMpKSYmdm9pZCAwIT09dj92Om51bGwpLHRoaXNbaF19fXJldHVybiBkfX0pfSgic3ZnIildLGUy'@;
put 'LnByb3RvdHlwZSwic3ZnIix2b2lkIDApLGJ0ZSgiY2RzLWljb24iLGUyKTtjbGFzcyBkTWV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdENvbm5lY3RlZCgpe3ZhciBsPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7eWllbGQg'@;
put 'bC5ob3N0LnVwZGF0ZUNvbXBsZXRlLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixhPT5sLmVtdWxhdGVBY3RpdmUoYSkpLGwuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLGE9PmwuZW11bGF0ZUFjdGl2ZShhKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImtl'@;
put 'eXVwIiwoKT0+bC5lbXVsYXRlSW5hY3RpdmUoKSksbC5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCgpPT5sLmVtdWxhdGVJbmFjdGl2ZSgpKSxsLmhvc3QuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsKCk9PmwuZW11bGF0ZUluYWN0aXZlKCkpfSkoKX1lbXVsYXRlQWN0aXZlKGwp'@;
put 'e3RoaXMuaG9zdC5kaXNhYmxlZHx8dGhpcy5ob3N0Py5zZXRBdHRyaWJ1dGUoImNkcy1hY3RpdmUiLCIiKSwiU3BhY2UiPT09bC5jb2RlJiZsLnRhcmdldD09PXRoaXMuaG9zdCYmbC5wcmV2ZW50RGVmYXVsdCgpfWVtdWxhdGVJbmFjdGl2ZSgpe3RoaXMuaG9zdC5yZW1vdmVBdHRyaWJ1dGUo'@;
put 'ImNkcy1hY3RpdmUiKX19Y2xhc3MgZk1le2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXsodGhpcy5ob3N0Lmhhc0F0dHJpYnV0ZSgiYXJpYS1jb250cm9scyIpfHx0aGlzLmhvc3QuYXJpYUNvbnRyb2xzKSYm'@;
put 'KHRoaXMuaG9zdC5hcmlhSGFzUG9wdXA9InRydWUiLHRoaXMuaG9zdC5hcmlhRXhwYW5kZWQ9ImZhbHNlIil9fWNsYXNzIG1NZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLmhvc3QuYWRkQ29udHJvbGxlcih0aGlzKX1ob3N0VXBkYXRlZCgpe251bGwhPT10aGlzLmhvc3QuZGlz'@;
put 'YWJsZWQmJih0aGlzLmhvc3QuYXJpYURpc2FibGVkPXRoaXMuaG9zdC5kaXNhYmxlZCksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFEaXNhYmxlZD1udWxsKX19Y2xhc3MgX01le2NvbnN0cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRo'@;
put 'aXMpfWhvc3RVcGRhdGVkKCl7bnVsbCE9dGhpcy5ob3N0LnByZXNzZWQmJih0aGlzLmhvc3QuYXJpYVByZXNzZWQ9dGhpcy5ob3N0LnByZXNzZWQ/InRydWUiOiJmYWxzZSIpLHRoaXMuaG9zdC5yZWFkb25seSYmKHRoaXMuaG9zdC5hcmlhUHJlc3NlZD1udWxsKX19Y2xhc3MgeU1le2NvbnN0'@;
put 'cnVjdG9yKGwpe3RoaXMuaG9zdD1sLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RDb25uZWN0ZWQoKXt0aGlzLmhvc3QudGFiSW5kZXg9MH1ob3N0VXBkYXRlZCgpe3RoaXMuaG9zdC5yb2xlPXRoaXMuaG9zdC5yZWFkb25seT9udWxsOiJidXR0b24iLHRoaXMuaG9zdC50YWJJ'@;
put 'bmRleD10aGlzLmhvc3QuZGlzYWJsZWQ/LTE6MCx0aGlzLmhvc3QucmVhZG9ubHkmJnRoaXMuaG9zdC5yZW1vdmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9fWNsYXNzIHdNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLmhvc3QuYWRkQ29udHJvbGxlcih0aGlzKX1nZXQgY3VycmVu'@;
put 'dEFuY2hvcigpe3JldHVybiJBIj09PXRoaXMuaG9zdC5wYXJlbnRFbGVtZW50Py50YWdOYW1lP3RoaXMuaG9zdC5wYXJlbnRFbGVtZW50Om51bGx9aG9zdENvbm5lY3RlZCgpe3RoaXMuc2V0QW5jaG9yKCl9aG9zdFVwZGF0ZWQoKXt0aGlzLnNldEFuY2hvcigpfXNldEFuY2hvcigpe3RoaXMu'@;
put 'Y3VycmVudEFuY2hvciYmdGhpcy5jdXJyZW50QW5jaG9yIT09dGhpcy5wcmV2aW91c0FuY2hvciYmKHRoaXMucHJldmlvdXNBbmNob3I9dGhpcy5jdXJyZW50QW5jaG9yLHRoaXMuaG9zdC5yZWFkb25seT0hMCx0aGlzLmN1cnJlbnRBbmNob3Iuc3R5bGUubGluZUhlaWdodD0iMCIsdGhpcy5j'@;
put 'dXJyZW50QW5jaG9yLnN0eWxlLnRleHREZWNvcmF0aW9uPSJub25lIil9fWNvbnN0IGlOPWM9PmM/P2R1O2Z1bmN0aW9uIGluZShjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wUHJvcGFnYXRpb24oKX1jb25zdCBvTj1uZXcgTWFwKFtbImFycm93LWxlZnQiLCJBcnJvd0xlZnQiXSxbImFy'@;
put 'cm93LXJpZ2h0IiwiQXJyb3dSaWdodCJdLFsiYXJyb3ctdXAiLCJBcnJvd1VwIl0sWyJhcnJvdy1kb3duIiwiQXJyb3dEb3duIl0sWyJ0YWIiLCJUYWIiXSxbImVudGVyIiwiRW50ZXIiXSxbImVzY2FwZSIsIkVzY2FwZSJdLFsic3BhY2UiLCIgIl0sWyJob21lIiwiSG9tZSJdLFsiZW5kIiwi'@;
put 'RW5kIl1dKTtjbGFzcyBDTWV7c3RhdGljIGdldCBrZXljb2Rlcygpe3JldHVybiBleWUob04pfXN0YXRpYyBhZGQobCxhKXtvTi5zZXQobCxhKX1zdGF0aWMgaGFzKGwpe3JldHVybiBvTi5oYXMobCl9c3RhdGljIGdldENvZGUobCxhPXRoaXMua2V5Y29kZXMpe3JldHVybiBmdW5jdGlvbiBT'@;
put 'TWUoYyxsKXtyZXR1cm4gbC5nZXQoYyl8fCIifShsLGEpfX12YXIgYmY7IWZ1bmN0aW9uKGMpe2MuQXJyb3dVcD0iQXJyb3dVcCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1JpZ2h0PSJBcnJvd1JpZ2h0IixjLkVuZD0iRW5kIixjLkhv'@;
put 'bWU9IkhvbWUiLGMuUGFnZVVwPSJQYWdlVXAiLGMuUGFnZURvd249IlBhZ2VEb3duIn0oYmZ8fChiZj17fSkpO2NsYXNzIExNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmhvc3Q9bCx0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXI9dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9u'@;
put 'QmVoYXZpb3IuYmluZCh0aGlzKSx0aGlzLmVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3JIYW5kbGVyPXRoaXMuZW11bGF0ZUtleUJvYXJkRXZlbnRCZWhhdmlvci5iaW5kKHRoaXMpLHRoaXMuaG9zdC5hZGRDb250cm9sbGVyKHRoaXMpfWhvc3RVcGRhdGVkKCl7dGhpcy5zZXRCdXR0b25U'@;
put 'eXBlKCksdGhpcy5zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl9c2V0QnV0dG9uVHlwZSgpeyF0aGlzLmhvc3QudHlwZSYmdGhpcy5ob3N0LmNsb3Nlc3QoImZvcm0iKSYmKHRoaXMuaG9zdC50eXBlPSJzdWJtaXQiKX1zZXR1cE5hdGl2ZUJ1dHRvbkJlaGF2aW9yKCl7dGhpcy5ob3N0LnJl'@;
put 'YWRvbmx5fHx0aGlzLmhvc3QuZGlzYWJsZWQ/KHRoaXMuaG9zdC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3JIYW5kbGVyKSx0aGlzLmhvc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5dXAiLHRoaXMuZW11bGF0ZUtleUJvYXJk'@;
put 'RXZlbnRCZWhhdmlvckhhbmRsZXIpKToodGhpcy5ob3N0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLnRyaWdnZXJOYXRpdmVCdXR0b25CZWhhdmlvckhhbmRsZXIpLHRoaXMuaG9zdC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5lbXVsYXRlS2V5Qm9hcmRFdmVudEJlaGF2'@;
put 'aW9ySGFuZGxlcikpfWVtdWxhdGVLZXlCb2FyZEV2ZW50QmVoYXZpb3IobCl7IWZ1bmN0aW9uIHhNZShjLGwsYSl7Yy5maWx0ZXIoZD0+ZnVuY3Rpb24gc04oYyxsKXtyZXR1cm4gQ01lLmdldENvZGUobCk9PT1jLmtleX0obCxkKSkubGVuZ3RoPjAmJmEoKX0oWyJlbnRlciIsInNwYWNlIl0s'@;
put 'bCwoKT0+eyJzdWJtaXQiPT09dGhpcy5ob3N0LnR5cGU/dGhpcy50cmlnZ2VyTmF0aXZlQnV0dG9uQmVoYXZpb3IobCk6dGhpcy5ob3N0LmNsaWNrKCksaW5lKGwpfSl9dHJpZ2dlck5hdGl2ZUJ1dHRvbkJlaGF2aW9yKGwpe2lmKHRoaXMuaG9zdC5kaXNhYmxlZClpbmUobCk7ZWxzZSBpZigh'@;
put 'bC5kZWZhdWx0UHJldmVudGVkKXtjb25zdCBhPWZ1bmN0aW9uIERNZShjLGwsYSl7Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLmFwcGVuZENoaWxkKGQpLHF0ZShjLGwse3JlbmRlckJlZm9yZTpkLC4uLmF9KTtjb25zdCBoPWQucHJldmlvdXNTaWJsaW5nO3JldHVy'@;
put 'biBkLnJlbW92ZSgpLGh9KFFIYDxidXR0b24gYXJpYS1oaWRkZW49InRydWUiIHJvbGU9InByZXNlbnRhdGlvbiIgP2Rpc2FibGVkPSIke3RoaXMuaG9zdC5kaXNhYmxlZH0iIHRhYmluZGV4PSItMSIgc3R5bGU9ImRpc3BsYXk6bm9uZSFpbXBvcnRhbnQiIHZhbHVlPSIke2lOKHRoaXMuaG9z'@;
put 'dC52YWx1ZSl9IiBuYW1lPSIke2lOKHRoaXMuaG9zdC5uYW1lKX0iIHR5cGU9IiR7aU4odGhpcy5ob3N0LnR5cGUpfSI+PC9idXR0b24+YCx0aGlzLmhvc3QpO2E/LmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIix7cmVsYXRlZFRhcmdldDp0aGlzLmhvc3QsY29tcG9zZWQ6'@;
put 'ITB9KSksYT8ucmVtb3ZlKCl9fX1jbGFzcyBSTWV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3N0PWwsdGhpcy5ob3N0LmFkZENvbnRyb2xsZXIodGhpcyl9aG9zdFVwZGF0ZWQoKXtudWxsIT10aGlzLmhvc3QuZXhwYW5kZWQmJih0aGlzLmhvc3QuYXJpYUV4cGFuZGVkPXRoaXMuaG9zdC5leHBh'@;
put 'bmRlZD8idHJ1ZSI6ImZhbHNlIiksdGhpcy5ob3N0LnJlYWRvbmx5JiYodGhpcy5ob3N0LmFyaWFFeHBhbmRlZD1udWxsKX19bGV0IHQyPWNsYXNzIGV4dGVuZHMgUzd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuX2Rpc2FibGVkPSExfWdldCBkaXNhYmxlZCgpe3Jl'@;
put 'dHVybiB0aGlzLl9kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYyl7Y29uc3QgbD10aGlzLl9kaXNhYmxlZDt0aGlzLl9kaXNhYmxlZD1jLHRoaXMucmVxdWVzdFVwZGF0ZSgiZGlzYWJsZWQiLGwpfX07dmwoW29jKHt0eXBlOkJvb2xlYW59KV0sdDIucHJvdG90eXBlLCJwcmVzc2VkIix2b2lkIDAp'@;
put 'LHZsKFtvYyh7dHlwZTpCb29sZWFufSldLHQyLnByb3RvdHlwZSwiZXhwYW5kZWQiLHZvaWQgMCksdmwoW29jKHt0eXBlOkJvb2xlYW59KV0sdDIucHJvdG90eXBlLCJyZWFkb25seSIsdm9pZCAwKSx2bChbb2Moe3R5cGU6U3RyaW5nfSldLHQyLnByb3RvdHlwZSwidHlwZSIsdm9pZCAwKSx2'@;
put 'bChbb2Moe3R5cGU6U3RyaW5nfSldLHQyLnByb3RvdHlwZSwibmFtZSIsdm9pZCAwKSx2bChbb2Moe3R5cGU6U3RyaW5nfSldLHQyLnByb3RvdHlwZSwidmFsdWUiLHZvaWQgMCksdmwoW29jKHt0eXBlOkJvb2xlYW59KV0sdDIucHJvdG90eXBlLCJkaXNhYmxlZCIsbnVsbCksdmwoW29jKHt0'@;
put 'eXBlOlN0cmluZ30pXSx0Mi5wcm90b3R5cGUsInBvcHVwIix2b2lkIDApLHQyPXZsKFtmdW5jdGlvbiB1TWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgZE1lKGwpKX0oKSxmdW5jdGlvbiB2TWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgeU1lKGwp'@;
put 'KX0oKSxmdW5jdGlvbiBnTWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgX01lKGwpKX0oKSxmdW5jdGlvbiBJTWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgUk1lKGwpKX0oKSxmdW5jdGlvbiBwTWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXpl'@;
put 'cihsPT5uZXcgbU1lKGwpKX0oKSxmdW5jdGlvbiBoTWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgZk1lKGwpKX0oKSxmdW5jdGlvbiBBTWUoKXtyZXR1cm4gYz0+Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgTE1lKGwpKX0oKSxmdW5jdGlvbiBiTWUoKXtyZXR1cm4gYz0+'@;
put 'Yy5hZGRJbml0aWFsaXplcihsPT5uZXcgd01lKGwpKX0oKV0sdDIpO2NvbnN0IEFFPXthY3Rpb25zOntzb3J0OiJTb3J0IixleHBhbmQ6IkV4cGFuZCIsY2xvc2U6IkNsb3NlIixyZXNpemU6IlJlc2l6ZSIsZmlsdGVyOiJGaWx0ZXIifSxhbGVydDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNs'@;
put 'b3NlIixsb2FkaW5nOiJMb2FkaW5nIixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5nZXI6IkVycm9yIn0sZHJvcGRvd246e29wZW46Ik9wZW4ifSxmaWxlOnticm93c2U6ImJyb3dzZSIsZmlsZXM6ImZpbGVzIixyZW1vdmVGaWxlOiJyZW1vdmUg'@;
put 'ZmlsZSJ9LG1vZGFsOntjbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgbW9kYWwiLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIG1vZGFsIGNvbnRlbnQiLGNvbnRlbnRCb3g6IlNjcm9sbGFibGUgbW9kYWwgYm9keSIsY29udGVudEVuZDoiRW5kIG9mIG1vZGFsIGNvbnRlbnQifSxuYXZp'@;
put 'Z2F0aW9uOntuYXZpZ2F0aW9uRWxlbWVudDoibmF2aWdhdGlvbiIsbmF2aWdhdGlvbkxhYmVsOiJuYXZpZ2F0aW9uIG1lbnUiLG5hdmlnYXRpb25BYnJpZGdlZFRleHQ6IlZpZXcgYWJyaWRnZWQgbWVudSIsbmF2aWdhdGlvblVuYWJyaWRnZWRUZXh0OiJWaWV3IHVuYWJyaWRnZWQgbWVudSJ9'@;
put 'LG92ZXJsYXk6e2Nsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBkaWFsb2ciLGNvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIGRpYWxvZyBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgZGlhbG9nIGNvbnRlbnQifSxwb3B1cDp7Y2xvc2VCdXR0b25BcmlhTGFiZWw6IkNsb3NlIHBvcHVw'@;
put 'Iixjb250ZW50U3RhcnQ6IkJlZ2lubmluZyBvZiBwb3B1cCBjb250ZW50Iixjb250ZW50RW5kOiJFbmQgb2YgcG9wdXAgY29udGVudCJ9LHBhc3N3b3JkOntzaG93QnV0dG9uQXJpYUxhYmVsOiJTaG93IHBhc3N3b3JkIixoaWRlQnV0dG9uQXJpYUxhYmVsOiJIaWRlIHBhc3N3b3JkIn0scHJv'@;
put 'Z3Jlc3M6e2xvYWRpbmc6IkxvYWRpbmciLGxvb3Bpbmc6IkxvYWRpbmcifSx0cmVldmlldzp7bG9hZGluZzoiTG9hZGluZyJ9LGdyaWQ6e3Jlc2l6ZUNvbHVtbjoiUmVzaXplIENvbHVtbiIsY2xvc2VEZXRhaWxzOiJDbG9zZSBEZXRhaWxzIixub0RhdGE6Ik5vIFJlc3VsdHMgRm91bmQiLHJv'@;
put 'd0RldGFpbFN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIscm93RGV0YWlsRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLGZvb3RlckVuZDoiRW5kIG9mIGdyaWQgcm93cyIsYWN0aW9uOiJBY3Rpb24iLGRyb3BUYXJnZXQ6IkRyb3AgSXRlbSIscGFnaW5hdGlvbjp7bGFiZWw6ImdyaWQgcGFn'@;
put 'aW5hdGlvbiIsZmlyc3RQYWdlOiJnbyB0byBmaXJzdCBwYWdlIixwcmV2aW91c1BhZ2U6ImdvIHRvIHByZXZpb3VzIHBhZ2UiLG5leHRQYWdlOiJnbyB0byBuZXh0IHBhZ2UiLGxhc3RQYWdlOiJnbyB0byBsYXN0IHBhZ2UiLHBhZ2VTaXplOiJyb3dzIHBlciBwYWdlIixwYWdlOiJwYWdlIn19'@;
put 'fTtjbGFzcyBoZ3tzdGF0aWMgZ2V0IGtleXMoKXtyZXR1cm4gMD09PU9iamVjdC5rZXlzKHV1LnN0YXRlLmkxOG5SZWdpc3RyeSkubGVuZ3RoJiYodXUuc3RhdGUuaTE4blJlZ2lzdHJ5PXJnKEFFLHV1LnN0YXRlLmkxOG5SZWdpc3RyeSkpLHJnKEFFLHV1LnN0YXRlLmkxOG5SZWdpc3RyeSl9'@;
put 'c3RhdGljIGZpbmRLZXkobCl7Y29uc3QgYT1oZy5rZXlzO3JldHVybiBPYmplY3Qua2V5cyhhKS5maW5kKGQ9PmFlZShhW2RdLGwpKX1zdGF0aWMgZ2V0KGwpe3JldHVybiBsJiZoZy5rZXlzW2xdfHx7fX1zdGF0aWMgcmVzZXQoKXt1dS5zdGF0ZS5pMThuUmVnaXN0cnk9cmcoe30sQUUpfXN0'@;
put 'YXRpYyBoeWRyYXRlKGwsYSl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gaHllKGMsbCxhKXtyZXR1cm4gYy5yZXBsYWNlKC9cJFx7Lis/XH0vZyxkPT5mdW5jdGlvbiBRdmUoYyxsLGE9YFwkeyR7Y319YCl7cmV0dXJuIGMuc3BsaXQoIi4iKS5yZWR1Y2UoKGQsaCk9Pnt0cnl7Y29uc3Qg'@;
put 'Zj1kW2hdO3N3aXRjaCghMCl7Y2FzZSBudWxsPT09ZjpjYXNlITE9PT1mOmNhc2UiIj09PWY6Y2FzZSAwPT09ZjpyZXR1cm4gZjtkZWZhdWx0OnJldHVybiBmfHxhfX1jYXRjaHtyZXR1cm4gYX19LGwpfShkLnN1YnN0cigyLGQubGVuZ3RoLTMpLnRyaW0oKSxsLGEpKX0oSlNPTi5zdHJpbmdp'@;
put 'ZnkobCksYSkpfXN0YXRpYyBsb2NhbGl6ZShsKXt1dS5zdGF0ZS5pMThuUmVnaXN0cnk9cmcoQUUsdXUuc3RhdGUuaTE4blJlZ2lzdHJ5LGwpfX12YXIgSE1lPVpIYDpob3N0ey0taWNvbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsIGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2Rz'@;
put 'LWdsb2JhbC1iYXNlLCAyMCkpKTstLWljb24taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNywgY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0td2lkdGg6dmFyKC0taWNvbi13aWR0aCk7LS1oZWlnaHQ6dmFyKC0taWNvbi13aWR0aCk7LS1jdXJz'@;
put 'b3I6cG9pbnRlcjstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0zMDAsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCwgIzJkNDA0OCkpOy0tZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMywgY2Fs'@;
put 'YygxMyAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tYmFja2dyb3VuZDp0cmFuc3BhcmVudDstLXBhZGRpbmc6MDstLW91dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLCBIaWdobGlnaHQgc29saWQgMnB4KTstLW91dGxpbmUt'@;
put 'b2Zmc2V0OmNhbGModmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwgMXB4KSAqIC0xKTtwb2ludGVyLWV2ZW50czpub25lO2Rpc3BsYXk6aW5saW5lLWJsb2NrO291dGxpbmU6MCFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9YnV0dG9uXSl7cG9pbnRlci1l'@;
put 'dmVudHM6aW5pdGlhbDtjdXJzb3I6dmFyKC0tY3Vyc29yKSFpbXBvcnRhbnR9Omhvc3QoW3N0YXR1cz1hY3RpdmVdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfTo6c2xvdHRlZChbc2hhcGU9'@;
put 'Y2xvc2VdKSw6OnNsb3R0ZWQoW3NoYXBlPWluZm8tY2lyY2xlXSksOjpzbG90dGVkKFtzaGFwZT10aW1lc10pLDpob3N0KFtzaGFwZT1jbG9zZV0pLDpob3N0KFtzaGFwZT1pbmZvLWNpcmNsZV0pey0taWNvbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgsIGNhbGMoMTggKiAxcmVt'@;
put 'IC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLWljb24taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCwgY2FsYygxOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpfTpob3N0KDpob3Zlcil7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu'@;
put 'dGVyYWN0aW9uLWNvbG9yLWhvdmVyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwLCAjMWIyYjMyKSl9Omhvc3QoOmFjdGl2ZSl7LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSwgdmFyKC0tY2RzLWdsb2JhbC1j'@;
put 'b2xvci1jb25zdHJ1Y3Rpb24tMTAwMCwgIzFiMmIzMikpfTpob3N0KDphY3RpdmUpIC5wcml2YXRlLWhvc3R7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKS8gMikpfTpo'@;
put 'b3N0KFtkaXNhYmxlZF0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwLCAjYWViOGJjKSl9LnByaXZhdGUtaG9zdHstLWljb24tY29sb3I6dmFyKC0tY29sb3Ip'@;
put 'O2JhY2tncm91bmQ6dmFyKC0tYmFja2dyb3VuZCk7cGFkZGluZzp2YXIoLS1wYWRkaW5nKTtjb2xvcjp2YXIoLS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWZvbnQtc2l6ZSk7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi13aWR0aDp2'@;
put 'YXIoLS13aWR0aCk7bWluLWhlaWdodDp2YXIoLS1oZWlnaHQpfTo6c2xvdHRlZChjZHMtaWNvbiksY2RzLWljb257d2lkdGg6dmFyKC0taWNvbi13aWR0aCk7aGVpZ2h0OnZhcigtLWljb24taGVpZ2h0KTtwb2ludGVyLWV2ZW50czpub25lfTo6c2xvdHRlZChjZHMtaWNvbjpub3QoW3N0YXR1'@;
put 'c10pKSxjZHMtaWNvbnstLWNvbG9yOnZhcigtLWljb24tY29sb3IpfTpob3N0KFtkaXNhYmxlZF06YWN0aXZlKXtwb2ludGVyLWV2ZW50czpub25lIWltcG9ydGFudH0ucHJpdmF0ZS1ob3N0OjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Y2FsYygtMSp2YXIoLS13'@;
put 'aWR0aCkgLSAxKTt0b3A6Y2FsYygtMSp2YXIoLS1oZWlnaHQpIC0gMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi10b3VjaC10YXJnZXQsY2FsYygzNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1v'@;
put 'YmplY3QtaW50ZXJhY3Rpb24tdG91Y2gtdGFyZ2V0LGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtkaXNhYmxlZF0pIC5wcml2YXRlLWhvc3Q6OmFmdGVye291dGxpbmU6MCFpbXBvcnRhbnR9Omhvc3QoOmZvY3VzKSAucHJpdmF0ZS1ob3N0Ojph'@;
put 'ZnRlcntvdXRsaW5lOnZhcigtLW91dGxpbmUpO291dGxpbmUtb2Zmc2V0OnZhcigtLW91dGxpbmUtb2Zmc2V0KX1AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXs6aG9zdCg6Zm9jdXMpIC5wcml2YXRlLWhvc3Q6OmFmdGVye291dGxpbmUtY29sb3I6LXdlYmtpdC1m'@;
put 'b2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0b319YDtjbGFzcyBmZyBleHRlbmRzIHQye2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmkxOG49aGcua2V5cy5hY3Rpb25zLHRoaXMuY2RzQnV0dG9uQWN0aW9uPSEwfXJlbmRlcigpe3JldHVybiBRSGA8ZGl2'@;
put 'IGNsYXNzPSJwcml2YXRlLWhvc3QiPjxzbG90PjxjZHMtaWNvbiAuc2hhcGU9IiR7dGhpcy5zaGFwZT90aGlzLnNoYXBlOiJlbGxpcHNpcy12ZXJ0aWNhbCJ9IiAuc2l6ZT0iJHt0aGlzLmljb25TaXplfSIgP3NvbGlkPSIke3RoaXMucHJlc3NlZHx8dGhpcy5leHBhbmRlZH0iIGlubmVyLW9m'@;
put 'ZnNldD0iJHsxfSI+PC9jZHMtaWNvbj48L3Nsb3Q+PC9kaXY+YH11cGRhdGVkKGwpe3N1cGVyLnVwZGF0ZWQobCksdGhpcy5hcmlhTGFiZWx8fHRoaXMucmVhZG9ubHl8fG9nLndhcm4oIkEgYXJpYS1sYWJlbCBpcyByZXF1aXJlZCBmb3IgaW50ZXJhY3RpdmUgY2RzLWJ1dHRvbi1hY3Rpb24g'@;
put 'dHlwZSIsdGhpcyksbC5oYXMoInJlYWRvbmx5IikmJih0aGlzLmFyaWFIaWRkZW49dGhpcy5yZWFkb25seSYmIXRoaXMuaGFzQXR0cmlidXRlKCJhcmlhLWxhYmVsIik/InRydWUiOm51bGwpfX1mZy5zdHlsZXM9W1h0ZSxITWVdLHZsKFtvYyh7dHlwZTpTdHJpbmd9KV0sZmcucHJvdG90eXBl'@;
put 'LCJzaGFwZSIsdm9pZCAwKSx2bChbb2Moe3R5cGU6U3RyaW5nLHJlZmxlY3Q6ITB9KV0sZmcucHJvdG90eXBlLCJhY3Rpb24iLHZvaWQgMCksdmwoW29jKHt0eXBlOlN0cmluZ30pXSxmZy5wcm90b3R5cGUsImljb25TaXplIix2b2lkIDApLHZsKFtmdW5jdGlvbiBPTWUoKXtyZXR1cm4oYyxs'@;
put 'KT0+e2NvbnN0IGE9Yy5jb25uZWN0ZWRDYWxsYmFjayxkPWMuZGlzY29ubmVjdGVkQ2FsbGJhY2s7Yy5jb25uZWN0ZWRDYWxsYmFjaz1mdW5jdGlvbigpe2MuX19pMThuU3ViPXV1LnN0YXRlVXBkYXRlcy5zdWJzY3JpYmUoZj0+eyJpMThuUmVnaXN0cnkiPT09Zi5rZXkmJnRoaXMucmVxdWVz'@;
put 'dFVwZGF0ZShsKX0pLGEmJmEuYXBwbHkodGhpcyl9LGMuZGlzY29ubmVjdGVkQ2FsbGJhY2s9ZnVuY3Rpb24oKXtjLl9faTE4blN1Yi51bnN1YnNjcmliZSgpLGQmJmQuYXBwbHkodGhpcyl9O2NvbnN0IGg9e2dldCgpe2NvbnN0IGY9cmcoaGcua2V5c1t0aGlzLl9faTE4bktleV0sdGhpcy5f'@;
put 'X2kxOG58fHt9KTtyZXR1cm4gaGcuaHlkcmF0ZShmLHRoaXMpfSxzZXQoZil7Y29uc3Qgdj1mdW5jdGlvbiBQTWUoYyxsKXtpZihqNChjKSl7bGV0IGE9e307aWYobC5oYXNBdHRyaWJ1dGUoImNkcy1pMThuIikpe2NvbnN0IGQ9bC5nZXRBdHRyaWJ1dGUoImNkcy1pMThuIikrIiI7aWYoajQo'@;
put 'ZCkpYT17fTtlbHNlIHRyeXthPUpTT04ucGFyc2UoZCl9Y2F0Y2h7b2cud2FybigiQ2xhcml0eSBpMThuOiBJbnZhbGlkIEpTT04gcGFzc2VkIHRvIGNkcy1pMThuIiksYT17fX19cmV0dXJuIGF9cmV0dXJuIGN9KGYsdGhpcyksVD1mdW5jdGlvbiBGTWUoYyxsLGEsZCl7cmV0dXJuIGo0KGMp'@;
put 'P2FlZShhLGQpP3t1cGRhdGU6ITF9Ont1cGRhdGU6ITAsdmFsdWVzOmF9OmM9PT1sP3t1cGRhdGU6ITEsdmFsdWVzOnt9fTp7dXBkYXRlOiEwLGtleTpjLHZhbHVlczp7fX19KGhnLmZpbmRLZXkodil8fCIiLHRoaXMuX19pMThuS2V5LHYsdGhpcy5fX2kxOG4pO3ZvaWQgMCE9PVQua2V5JiYo'@;
put 'dGhpcy5fX2kxOG5LZXk9VC5rZXkrIiIpLHZvaWQgMCE9PVQudmFsdWVzJiYodGhpcy5fX2kxOG49ey4uLlQudmFsdWVzfSksITA9PT1ULnVwZGF0ZSYmdGhpcy5yZXF1ZXN0VXBkYXRlKCksdGhpcy5yZXF1ZXN0VXBkYXRlKGwpfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07cmV0'@;
put 'dXJuIHZvaWQgMCE9PWw/ZnVuY3Rpb24oZix2LFQpe2NvbnN0IFk9T2JqZWN0LmRlZmluZVByb3BlcnR5KHYsVCxmKTtyZXR1cm4gb2Moe3R5cGU6T2JqZWN0LGF0dHJpYnV0ZToiY2RzLWkxOG4ifSkoWSxUKX0oaCxjLGwpOmZ1bmN0aW9uKGYsdil7Y29uc3QgVD17a2luZDoibWV0aG9kIixw'@;
put 'bGFjZW1lbnQ6InByb3RvdHlwZSIsa2V5OnYua2V5LGRlc2NyaXB0b3I6Zn07cmV0dXJuIG9jKHt0eXBlOk9iamVjdH0pKFQpfShoLGMpfX0oKV0sZmcucHJvdG90eXBlLCJpMThuIix2b2lkIDApLHZsKFtubmUoe3R5cGU6Qm9vbGVhbixyZWZsZWN0OiEwLGF0dHJpYnV0ZToiY2RzLWJ1dHRv'@;
put 'bi1hY3Rpb24ifSldLGZnLnByb3RvdHlwZSwiY2RzQnV0dG9uQWN0aW9uIix2b2lkIDApO2NsYXNzIHNuZSBleHRlbmRzIGZne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnNoYXBlPSJjbG9zZSJ9Y29ubmVjdGVkQ2FsbGJhY2soKXtzdXBlci5jb25uZWN0ZWRDYWxs'@;
put 'YmFjaygpLHRoaXMuYXJpYUxhYmVsPXRoaXMuYXJpYUxhYmVsP3RoaXMuYXJpYUxhYmVsOnRoaXMuaTE4bi5jbG9zZX19dmwoW29jKHt0eXBlOlN0cmluZ30pXSxzbmUucHJvdG90eXBlLCJzaGFwZSIsdm9pZCAwKSxidGUoImNkcy1pbnRlcm5hbC1jbG9zZS1idXR0b24iLHNuZSkscXMuYWRk'@;
put 'SWNvbnMoRWVlKSxxcy5hZGRBbGlhc2VzKFsidGltZXMiLFsiY2xvc2UiXV0pO2NvbnN0IFpvPVsiKiJdLGFuZT1bW1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0sW1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24i'@;
put 'XV0sIioiXSxsbmU9WyJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZSIsImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sIGNsci1zdGVwLWRlc2NyaXB0aW9uIiwiKiJdO2Z1bmN0aW9uIFZNZShjLGwpe2lmKDEmYyYmKHJpKDApLHplKDEpLGlpKCkpLDImYyl7Y29uc3QgYT1a'@;
put 'ZSgyKTt3ZSgpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcil9fWZ1bmN0aW9uIGpNZShjLGwpe2lmKDEmYyYmKHJpKDApLHplKDEpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3MpfX1mdW5jdGlvbiBCTWUoYyxsKXtp'@;
put 'ZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDEzKSxIdCgiQHRvZ2dsZS5kb25lIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuY29sbGFwc2VQYW5lbE9uQW5pbWF0aW9uRG9uZShoKSl9KSxnZSgxLCJkaXYiLDE0KSxPcigyLDIp'@;
put 'LGJlKCkoKX0yJmMmJlBlKCJAdG9nZ2xlIix2b2lkIDApfWZ1bmN0aW9uIFlNZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO3JpKDApLGdlKDEsImRpdiIsMikoMiwiZGl2IiwzKSgzLCJidXR0b24iLDQsMCksUGEoNSwiYXN5bmMiKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0'@;
put 'KGEpLHh0KFplKCkudG9nZ2xlUGFuZWwoKSl9KSxnZSg2LCJzcGFuIiw1KSxidCg3LFZNZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoOCxqTWUsMiwxLCJuZy1jb250YWluZXIiLDEpLGJlKCksZ2UoOSwic3BhbiIsNiksSnQoMTAsImNkcy1pY29uIiw3KSxnZSgxMSwic3BhbiIsOCksemUoMTIp'@;
put 'LGJlKCksSnQoMTMsImNkcy1pY29uIiw5KSgxNCwiY2RzLWljb24iLDEwKSxiZSgpLE9yKDE1KSxPcigxNiwxKSxiZSgpKCksZ2UoMTcsImRpdiIsMTEpLGJ0KDE4LEJNZSwzLDEsImRpdiIsMTIpLGJlKCkoKSxpaSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1sLiRpbXBsaWNpdCxoPVplKCk7'@;
put 'd2UoKSxQZSgibmdDbGFzcyIsaC5nZXRQYW5lbFN0YXRlQ2xhc3NlcyhkKSksd2UoMiksYnIoImNsci1hY2NvcmRpb24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShhPXdjKDUsMTYsaC5hY2NvcmRpb25EZXNjcmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDphLmxlbmd0aCl8fGguYWNj'@;
put 'b3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSxQZSgiaWQiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSkoImRpc2FibGVkIixoLmlzQWNjb3JkaW9uJiZkLmRpc2FibGVkKSxocigiYXJpYS1kaXNhYmxlZCIsIWguaXNBY2NvcmRpb24mJmQuZGlzYWJsZWQpKCJhcmlhLWNv'@;
put 'bnRyb2xzIixoLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBsYXRlSWQpKSgiYXJpYS1leHBhbmRlZCIsZC5vcGVuKSx3ZSg0KSxQZSgibmdJZiIsZC5zdGF0dXM9PT1oLkFjY29yZGlvblN0YXR1cy5FcnJvciksd2UoKSxQZSgibmdJZiIsZC5zdGF0dXM9PT1oLkFjY29yZGlvblN0YXR1'@;
put 'cy5Db21wbGV0ZSksd2UoNCkseHIoIiIsaC5wYW5lbE51bWJlciwiLiIpLHdlKDUpLFBlKCJAc2tpcEluaXRpYWxSZW5kZXIiLHZvaWQgMCkoImlkIixoLmdldEFjY29yZGlvbkNvbnRlbnRJZChkLnRlbXBsYXRlSWQpKSxocigiYXJpYS1oaWRkZW4iLCFkLm9wZW4pKCJhcmlhLWxhYmVsbGVk'@;
put 'YnkiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSksd2UoKSxQZSgibmdJZiIsZC5vcGVuKX19Y29uc3Qgc0NlPVsiY2xyTG9hZGluZyIsIiJdO2Z1bmN0aW9uIGFDZShjLGwpezEmYyYmKHJpKDApLEp0KDEsInNwYW4iLDMpLGlpKCkpLDImYyYmKHdlKCksUGUoIkBzcGlu'@;
put 'bmVyIix2b2lkIDApKX1mdW5jdGlvbiBsQ2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJzcGFuIiw0KSxIdCgiQHZhbGlkYXRlZC5kb25lIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4geHQoaC5sb2FkaW5nU3RhdGVDaGFuZ2UoaC5idXR0b25T'@;
put 'dGF0ZS5ERUZBVUxUKSl9KSxiZSgpLGlpKCl9MiZjJiYod2UoKSxQZSgiQHZhbGlkYXRlZCIsdm9pZCAwKSl9ZnVuY3Rpb24gY0NlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIsNSksT3IoMSksYmUoKSksMiZjJiZQZSgiQGRlZmF1bHRCdXR0b24iLHZvaWQgMCl9Y29uc3QgdUNlPVtbWyIiLCJj'@;
put 'bHJDaGVja2JveCIsIiJdLFsiIiwiY2xyVG9nZ2xlIiwiIl1dLFtbImxhYmVsIl1dXSxkQ2U9WyJbY2xyQ2hlY2tib3hdLFtjbHJUb2dnbGVdIiwibGFiZWwiXTtmdW5jdGlvbiBoQ2UoYyxsKXsxJmMmJkp0KDAsImxhYmVsIil9Y29uc3QgZkNlPVtbWyJsYWJlbCJdXSxbWyJjbHItY2hlY2ti'@;
put 'b3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13cmFwcGVyIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxwQ2U9WyJsYWJlbCIsImNsci1jaGVja2JveC13cmFwcGVyLGNsci10b2dnbGUtd3JhcHBl'@;
put 'ciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIG1DZShjLGwpezEmYyYmSnQoMCwibGFiZWwiKX1mdW5jdGlvbiBnQ2UoYyxsKXsxJmMmJk9yKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlv'@;
put 'biBfQ2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiB2Q2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiB5Q2UoYyxsKXsxJmMmJk9yKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gYkNlKGMsbCl7MSZjJiZPcigwLDQsWyIq'@;
put 'bmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCB3Q2U9WyJjbHJLZXlGb2N1cyIsIiJdLGtDZT1bW1sibGFiZWwiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLEVD'@;
put 'ZT1bImxhYmVsIiwiW2NscklucHV0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIFRDZShjLGwpezEmYyYmSnQoMCwibGFiZWwiKX1mdW5jdGlvbiBEQ2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw1'@;
put 'KX1mdW5jdGlvbiBBQ2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBMQ2UoYyxsKXsxJmMmJk9yKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBJQ2UoYyxsKXsxJmMmJk9yKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gUkNl'@;
put 'KGMsbCl7MSZjJiZPcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBPQ2UoYyxsKXtpZigxJmMmJihnZSgwLCJ0aCIsNCkoMSwic3BhbiIpLHplKDIpLGJlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCksaHIoImFyaWEtbGFiZWwiLGEuZGF5KSx3ZSgpLHBy'@;
put 'KGEubmFycm93KX19ZnVuY3Rpb24gUENlKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGQiLDcpLEp0KDEsImNsci1kYXkiLDgpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLFBlKCJjbHJEYXlWaWV3IixhKX19ZnVuY3Rpb24gRkNlKGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiLDUp'@;
put 'LGJ0KDEsUENlLDIsMSwidGQiLDYpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLFBlKCJuZ0Zvck9mIixhKX19ZnVuY3Rpb24gSENlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiwxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChh'@;
put 'KS5pbmRleDtyZXR1cm4geHQoWmUoKS5jaGFuZ2VNb250aChoKSl9KSx6ZSgxKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1aZSgpO2JyKCJpcy1zZWxlY3RlZCIsZD09PWguY2FsZW5kYXJNb250aEluZGV4KSxocigidGFiaW5kZXgiLGguZ2V0VGFiSW5k'@;
put 'ZXgoZCkpLHdlKCkseHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gTkNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiw3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuY2hhbmdlWWVhcihoKSl9KSx6ZSgx'@;
put 'KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKCk7YnIoImlzLXNlbGVjdGVkIixhPT09ZC5jYWxlbmRhclllYXIpLGhyKCJ0YWJpbmRleCIsZC5nZXRUYWJJbmRleChhKSksd2UoKSx4cigiICIsYSwiICIpfX1mdW5jdGlvbiBWQ2UoYyxsKXsxJmMmJkp0KDAsImNsci1t'@;
put 'b250aHBpY2tlciIpfWZ1bmN0aW9uIGpDZShjLGwpezEmYyYmSnQoMCwiY2xyLXllYXJwaWNrZXIiKX1mdW5jdGlvbiBCQ2UoYyxsKXsxJmMmJkp0KDAsImNsci1kYXlwaWNrZXIiKX1jb25zdCBZQ2U9WyJhY3Rpb25CdXR0b24iXSx6Q2U9W1tbImxhYmVsIl1dLFtbIiIsImNsckRhdGUiLCIi'@;
put 'XV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFVDZT1bImxhYmVsIiwiW2NsckRhdGVdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNz'@;
put 'Il07ZnVuY3Rpb24gWkNlKGMsbCl7MSZjJiZKdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIFdDZShjLGwpezEmYyYmKGdlKDAsImJ1dHRvbiIsOSwwKSxKdCgyLCJjZHMtaWNvbiIsMTApLGJlKCkpLDImYyYmUGUoImRpc2FibGVkIixaZSgpLmlzSW5wdXREYXRlRGlzYWJsZWQpfWZ1bmN0aW9uIEdD'@;
put 'ZShjLGwpezEmYyYmSnQoMCwiY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIiwxMSl9ZnVuY3Rpb24gJENlKGMsbCl7MSZjJiZKdCgwLCJjZHMtaWNvbiIsMTIpfWZ1bmN0aW9uIHFDZShjLGwpezEmYyYmSnQoMCwiY2RzLWljb24iLDEzKX1mdW5jdGlvbiBLQ2UoYyxsKXsxJmMmJk9yKDAs'@;
put 'MixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBYQ2UoYyxsKXsxJmMmJk9yKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gSkNlKGMsbCl7MSZjJiZPcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBRQ2U9W1tbIiIsImNsclJhZGlvIiwiIl1d'@;
put 'LFtbImxhYmVsIl1dXSxlU2U9WyJbY2xyUmFkaW9dIiwibGFiZWwiXTtmdW5jdGlvbiB0U2UoYyxsKXsxJmMmJkp0KDAsImxhYmVsIil9Y29uc3QgblNlPVtbWyJsYWJlbCJdXSxbWyJjbHItcmFkaW8td3JhcHBlciJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wt'@;
put 'ZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sclNlPVsibGFiZWwiLCJjbHItcmFkaW8td3JhcHBlciIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIGlTZShjLGwpezEmYyYmSnQoMCwibGFi'@;
put 'ZWwiKX1mdW5jdGlvbiBvU2UoYyxsKXsxJmMmJk9yKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBzU2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBhU2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBsU2UoYyxsKXsxJmMm'@;
put 'Jk9yKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gY1NlKGMsbCl7MSZjJiZPcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCB1U2U9W1tbImxhYmVsIl1dLFtbIiIsImNsclNlbGVjdCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNv'@;
put 'bnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXV0sZFNlPVsibGFiZWwiLCJbY2xyU2VsZWN0XSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNvbnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIGhTZShjLGwpezEmYyYmSnQoMCwibGFi'@;
put 'ZWwiKX1mdW5jdGlvbiBmU2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBwU2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiBtU2UoYyxsKXsxJmMmJk9yKDAsMixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBnU2UoYyxsKXsxJmMm'@;
put 'Jk9yKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gX1NlKGMsbCl7MSZjJiZPcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCB2U2U9W1tbImxhYmVsIl1dLFtbIiIsImNsclRleHRhcmVhIiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHIt'@;
put 'Y29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSx5U2U9WyJsYWJlbCIsIltjbHJUZXh0YXJlYV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBiU2UoYyxsKXsxJmMmJkp0KDAs'@;
put 'ImxhYmVsIil9ZnVuY3Rpb24gd1NlKGMsbCl7MSZjJiZKdCgwLCJjZHMtaWNvbiIsNSl9ZnVuY3Rpb24gTVNlKGMsbCl7MSZjJiZKdCgwLCJjZHMtaWNvbiIsNil9ZnVuY3Rpb24gQ1NlKGMsbCl7MSZjJiZPcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gU1NlKGMsbCl7'@;
put 'MSZjJiZPcigwLDMsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0aW9uIHhTZShjLGwpezEmYyYmT3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3Qga1NlPVsiYW5jaG9yIl07ZnVuY3Rpb24gRVNlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpKDIs'@;
put 'ImJ1dHRvbiIsNiksSnQoMywiY2RzLWljb24iLDcpLGJlKCkoKSxPcig0KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTtQZSgiaWQiLGEucG9wb3ZlcklkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJEaWFsb2dBcmlhTGFiZWwpLHdlKDMpLGhy'@;
put 'KCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpfX1jb25zdCBUU2U9WyJpbnB1dF9sb3ciXSxEU2U9WyJpbnB1dCJdLEFTZT1bImNvbHVtblBvcnRhbCJdO2Z1bmN0aW9uIExTZShjLGwpezEmYyYmT3IoMCl9Y29uc3QgSVNlPVsicmVzaXplVHJhY2tlciJdLFJTZT1bImNvbHVt'@;
put 'bkhhbmRsZSJdLE9TZT1bW1siY2xyLWRnLWZpbHRlciJdLFsiY2xyLWRnLXN0cmluZy1maWx0ZXIiXSxbImNsci1kZy1udW1lcmljLWZpbHRlciJdXSwiKiJdLFBTZT1bImNsci1kZy1maWx0ZXIsIGNsci1kZy1zdHJpbmctZmlsdGVyLCBjbHItZGctbnVtZXJpYy1maWx0ZXIiLCIqIl07ZnVu'@;
put 'Y3Rpb24gRlNlKGMsbCl7MSZjJiZObCgwKX1mdW5jdGlvbiBIU2UoYyxsKXsxJmMmJkp0KDAsImNkcy1pY29uIiwxMCksMiZjJiZocigiZGlyZWN0aW9uIixaZSgyKS5zb3J0RGlyZWN0aW9uKX1mdW5jdGlvbiBOU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDcp'@;
put 'LEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5zb3J0KCkpfSksYnQoMSxGU2UsMSwwLCJuZy1jb250YWluZXIiLDgpKDIsSFNlLDEsMSwiY2RzLWljb24iLDkpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKCksZD1YaSg2KTt3ZSgpLFBlKCJuZ1RlbXBsYXRlT3V0'@;
put 'bGV0IixkKSx3ZSgpLFBlKCJuZ0lmIixhLnNvcnREaXJlY3Rpb24pfX1mdW5jdGlvbiBWU2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMTEpLEdyKCJjbHJGaWx0ZXJWYWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1a'@;
put 'ZSgpO3JldHVybiBxcihmLmZpbHRlclZhbHVlLGgpfHwoZi5maWx0ZXJWYWx1ZT1oKSx4dChoKX0pLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7UGUoImNsckZpbHRlclBsYWNlaG9sZGVyIixhLmZpbHRlclN0cmluZ1BsYWNlaG9sZGVyKSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGEucmVnaXN0'@;
put 'ZXJlZCksV3IoImNsckZpbHRlclZhbHVlIixhLmZpbHRlclZhbHVlKX19ZnVuY3Rpb24galNlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWRnLW51bWVyaWMtZmlsdGVyIiwxMiksR3IoImNsckZpbHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBm'@;
put 'PVplKCk7cmV0dXJuIHFyKGYuZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLHh0KGgpfSksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTtQZSgiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLGEuZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIpKCJjbHJGaWx0ZXJNaW5QbGFjZWhv'@;
put 'bGRlciIsYS5maWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlcikoImNsckRnTnVtZXJpY0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxXcigiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBCU2UoYyxsKXsxJmMmJk9yKDAsMSl9ZnVuY3Rpb24gWVNlKGMsbCl7MSZjJiZObCgw'@;
put 'KX1mdW5jdGlvbiB6U2UoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiwxMyksYnQoMSxZU2UsMSwwLCJuZy1jb250YWluZXIiLDgpLGJlKCkpLDImYyl7WmUoKTtjb25zdCBhPVhpKDYpO3dlKCksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEpfX1mdW5jdGlvbiBVU2UoYyxsKXsxJmMmJkp0KDAs'@;
put 'ImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIil9ZnVuY3Rpb24gWlNlKGMsbCl7MSZjJiZKdCgwLCJkaXYiLDQpfWZ1bmN0aW9uIFdTZShjLGwpezEmYyYmT3IoMCwwLFsiKm5nSWYiLCJlbXB0eURhdGFncmlkIl0pfWZ1bmN0aW9uIEdTZShjLGwpe2lmKDEmYyYmKHJpKDApLGdlKDEsImJ1dHRv'@;
put 'biIsMSksSnQoMiwiY2RzLWljb24iLDIpLGJlKCksaWkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2lnbnBvc3RUb2dnbGUpLHdlKCksaHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5pbmZvKX19Y29uc3QgJFNl'@;
put 'PVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIHFTZShjLGwpezEmYyYmT3IoMCl9Y29uc3QgS1NlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gWFNlKGMsbCl7MSZjJiZPcigwKX1jb25zdCBKU2U9WyJkZXRhaWxCdXR0b24iXSxRU2U9WyJzdGlja3lDZWxscyJdLGV4ZT1bInNjcm9sbGFibGVDZWxs'@;
put 'cyJdLHR4ZT1bImNhbGN1bGF0ZWRDZWxscyJdLG54ZT1bW1siY2xyLWRnLXJvdy1kZXRhaWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0scnhlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rpb24tb3ZlcmZs'@;
put 'b3ciXSxpeGU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSxjbmU9Yz0+KHsiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIG94ZShjLGwpe31mdW5jdGlvbiBzeGUoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxidCgxLG94ZSww'@;
put 'LDAsIm5nLXRlbXBsYXRlIiwxMSksYmUoKSksMiZjKXtjb25zdCBhPVplKDIpLGQ9WGkoNik7UGUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksd2UoKSxQZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIGF4ZShjLGwpe31mdW5jdGlvbiBseGUo'@;
put 'YyxsKXsxJmMmJmJ0KDAsYXhlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihaZSgyKSxQZSgibmdUZW1wbGF0ZU91dGxldCIsWGkoNikpKX1mdW5jdGlvbiBjeGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDkpLEh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKGgpe3Jl'@;
put 'dHVybiBTdChhKSx4dChaZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3JldHVybiB4dChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxidCgxLHN4ZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixseGUs'@;
put 'MSwxLG51bGwsOCksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLFBlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKSx3ZSgpLFBlKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIHV4ZShjLGwpe31mdW5jdGlvbiBkeGUoYyxsKXtpZigxJmMmJihnZSgwLCJj'@;
put 'bHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxidCgxLHV4ZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCksZD1YaSg2KTtQZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSx3ZSgpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0'@;
put 'IixkKX19ZnVuY3Rpb24gaHhlKGMsbCl7fWZ1bmN0aW9uIGZ4ZShjLGwpezEmYyYmYnQoMCxoeGUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFplKCksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLFhpKDYpKSl9ZnVuY3Rpb24gcHhlKGMsbCl7MSZjJiZPcigwKX1mdW5jdGlvbiBteGUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDIwKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIsImlucHV0IiwyMSksSHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgyKS50b2dnbGUoaCkpfSksYmUoKSxnZSgzLCJsYWJlbCIsMjIp'@;
put 'LEh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmNsZWFyUmFuZ2VzKGgpKX0pLGdlKDQsInNwYW4iLDIzKSx6ZSg1KSxiZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKTtQZSgibmdDbGFzcyIsYWYoNyxjbmUsIWEuY2xyRGdTZWxlY3RhYmxlKSksd2Uo'@;
put 'MiksUGUoIm5nTW9kZWwiLGEuc2VsZWN0ZWQpKCJpZCIsYS5jaGVja2JveElkKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksd2UoKSxQZSgiZm9yIixhLmNoZWNrYm94SWQpLHdlKDIpLHBy'@;
put 'KGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gZ3hlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwyMCkoMSwiY2xyLXJhZGlvLXdyYXBwZXIiKSgyLCJpbnB1dCIsMjQpLEdyKCJuZ01vZGVsQ2hhbmdl'@;
put 'IixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpO3JldHVybiBxcihmLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlLGgpfHwoZi5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1oKSx4dChoKX0pLGJlKCksZ2UoMywibGFiZWwiLDI1KSg0LCJzcGFuIiwyMyksemUoNSksYmUoKSgpKCkoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9WmUoMik7UGUoIm5nQ2xhc3MiLGFmKDEwLGNuZSwhYS5jbHJEZ1NlbGVjdGFibGUpKSx3ZSgyKSxQZSgiaWQiLGEucmFkaW9JZCkoIm5hbWUiLGEuc2VsZWN0aW9uLmlkKyItcmFkaW8iKSgidmFsdWUiLGEuaXRlbSksV3IoIm5nTW9kZWwiLGEuc2VsZWN0aW9uLmN1'@;
put 'cnJlbnRTaW5nbGUpLFBlKCJjaGVja2VkIixhLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPT09YS5pdGVtKSgiZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksaHIoImFyaWEtZGlzYWJsZWQiLCFhLmNsckRnU2VsZWN0YWJsZXx8bnVsbCksd2UoKSxQZSgiZm9yIixhLnJhZGlv'@;
put 'SWQpLHdlKDIpLHByKGEuY2xyRGdSb3dTZWxlY3Rpb25MYWJlbHx8YS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0KX19ZnVuY3Rpb24gX3hlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiwyNiksT3IoMSwyKSxiZSgpKX1mdW5jdGlvbiB2eGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgw'@;
put 'LCJidXR0b24iLDMwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDQpLnRvZ2dsZUV4cGFuZCgpKX0pLEp0KDEsImNkcy1pY29uIiwzMSksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoNCk7aHIoImFyaWEtZXhwYW5kZWQiLGEuZXhwYW5kLmV4cGFuZGVkKSgiYXJp'@;
put 'YS1sYWJlbCIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jbHJEZ0RldGFpbENsb3NlTGFiZWw6YS5jbHJEZ0RldGFpbE9wZW5MYWJlbCkoImFyaWEtY29udHJvbHMiLGEuZXhwYW5kYWJsZUlkKSx3ZSgpLGhyKCJkaXJlY3Rpb24iLGEuZXhwYW5kLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKSgidGl0'@;
put 'bGUiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY29tbW9uU3RyaW5ncy5rZXlzLmNvbGxhcHNlOmEuY29tbW9uU3RyaW5ncy5rZXlzLmV4cGFuZCl9fWZ1bmN0aW9uIHl4ZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci1zcGlubmVyIiwzMiksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKDQpO3dl'@;
put 'KCkscHIoYS5jb21tb25TdHJpbmdzLmtleXMubG9hZGluZyl9fWZ1bmN0aW9uIGJ4ZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsdnhlLDIsNSwiYnV0dG9uIiwyOCkoMix5eGUsMiwxLCJjbHItc3Bpbm5lciIsMjkpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgpLFBlKCJuZ0lmIiwh'@;
put 'YS5leHBhbmQubG9hZGluZyksd2UoKSxQZSgibmdJZiIsYS5leHBhbmQubG9hZGluZyl9fWZ1bmN0aW9uIHd4ZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMjcpLGJ0KDEsYnhlLDMsMiwibmctY29udGFpbmVyIiw4KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIs'@;
put 'YS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIE14ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMzMpKDEsImJ1dHRvbiIsMzQsNSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WGkoMiksZj1aZSgyKTtyZXR1cm4geHQoZi5kZXRhaWxTZXJ2'@;
put 'aWNlLnRvZ2dsZShmLml0ZW0saCkpfSksSnQoMywiY2RzLWljb24iLDM1KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO3dlKCksYnIoImlzLW9wZW4iLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKSksaHIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09w'@;
put 'ZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzT3BlbikoImFyaWEtY29udHJvbHMiLGEuZGV0YWlsU2VydmljZS5pZCksd2UoMiksaHIoImRpcmVjdGlvbiIsYS5kZXRhaWxT'@;
put 'ZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pPyJsZWZ0IjoicmlnaHQiKSgidGl0bGUiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT9hLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZTphLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVuKX19ZnVuY3Rpb24gQ3hlKGMsbCl7fWZ1bmN0aW9u'@;
put 'IFN4ZShjLGwpezEmYyYmYnQoMCxDeGUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKFplKDIpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixYaSg0KSkpfWZ1bmN0aW9uIHh4ZShjLGwpe31mdW5jdGlvbiBreGUoYyxsKXsxJmMmJmJ0KDAseHhlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMm'@;
put 'JihaZSgyKSxQZSgibmdUZW1wbGF0ZU91dGxldCIsWGkoNCkpKX1mdW5jdGlvbiBFeGUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDEyKSgxLCJkaXYiLDEzKSxyaSgyLG51bGwsMyksYnQoNCxteGUsNiw5LCJkaXYiLDE0KSg1LGd4ZSw2LDEyLCJkaXYiLDE0KSg2LF94ZSwyLDAsImRpdiIs'@;
put 'MTUpKDcsd3hlLDIsMSwiZGl2IiwxNikoOCxNeGUsNCw3LCJkaXYiLDE3KSxpaSgpLGJlKCksZ2UoOSwiZGl2IiwxOCkoMTAsImRpdiIsMTkpLE9yKDExLDEpLE5sKDEyLG51bGwsNCksYmUoKSxidCgxNCxTeGUsMSwxLG51bGwsOCkoMTUsa3hlLDEsMSxudWxsLDgpLGJlKCkoKSksMiZjKXtj'@;
put 'b25zdCBhPVplKCk7YnIoImRhdGFncmlkLXJvdy1kZXRhaWwtb3BlbiIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pKSxQZSgiaWQiLGEuaWQpLHdlKDQpLFBlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5NdWx0aSksd2UoKSxQ'@;
put 'ZSgibmdJZiIsYS5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWEuU0VMRUNUSU9OX1RZUEUuU2luZ2xlKSx3ZSgpLFBlKCJuZ0lmIixhLnJvd0FjdGlvblNlcnZpY2UuaGFzQWN0aW9uYWJsZVJvdyksd2UoKSxQZSgibmdJZiIsYS5nbG9iYWxFeHBhbmRhYmxlLmhhc0V4cGFuZGFibGVSb3cp'@;
put 'LHdlKCksUGUoIm5nSWYiLGEuZGV0YWlsU2VydmljZS5lbmFibGVkKSx3ZSgpLFBlKCJuZ0NsYXNzIixhZigxMSxpeGUsYS5yZXBsYWNlZCYmYS5leHBhbmRlZCkpLHdlKDUpLFBlKCJuZ0lmIixhLnJlcGxhY2VkJiYhYS5leHBhbmQubG9hZGluZyksd2UoKSxQZSgibmdJZiIsIWEucmVwbGFj'@;
put 'ZWQmJiFhLmV4cGFuZC5sb2FkaW5nKX19Y29uc3QgVHhlPVsiZGF0YWdyaWRUYWJsZSJdLER4ZT1bInNjcm9sbGFibGVDb2x1bW5zIl0sQXhlPVsicHJvamVjdGVkRGlzcGxheUNvbHVtbnMiXSxMeGU9WyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiXSxJeGU9WyJkaXNwbGF5ZWRSb3dz'@;
put 'Il0sUnhlPVsiY2FsY3VsYXRpb25Sb3dzIl0sT3hlPVtbWyJjbHItZGctYWN0aW9uLWJhciJdXSxbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0sW1siY2xyLWRnLWZvb3RlciJdXSxbWyIiLCJjbHJJZkRldGFpbCIsIiJdLFsiY2xyLWRnLWRldGFpbCJdXV0sUHhlPVsiY2xyLWRnLWFjdGlvbi1i'@;
put 'YXIiLCJjbHItZGctcGxhY2Vob2xkZXIiLCJjbHItZGctZm9vdGVyIiwiW2NscklmRGV0YWlsXSxjbHItZGctZGV0YWlsIl07ZnVuY3Rpb24gRnhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwyNCksSHQoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2Nv'@;
put 'bnN0IGY9WmUoKTtyZXR1cm4gZi5hbGxTZWxlY3RlZD0hZi5hbGxTZWxlY3RlZCx4dChoLnByZXZlbnREZWZhdWx0KCkpfSksZ2UoMSwiZGl2IiwyNSkoMiwiaW5wdXQiLDI2KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3JldHVybiBxcihmLmFs'@;
put 'bFNlbGVjdGVkLGgpfHwoZi5hbGxTZWxlY3RlZD1oKSx4dChoKX0pLGJlKCksZ2UoMywibGFiZWwiLDI3KSg0LCJzcGFuIiwyOCksemUoNSksYmUoKSgpKCksSnQoNiwiZGl2IiwyOSksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSgyKSxQZSgiaWQiLGEuc2VsZWN0QWxsSWQpLFdyKCJu'@;
put 'Z01vZGVsIixhLmFsbFNlbGVjdGVkKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKSx3ZSgpLFBlKCJmb3IiLGEuc2VsZWN0QWxsSWQpLHdlKDIpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIEh4ZShjLGwpezEmYyYm'@;
put 'KGdlKDAsImRpdiIsMzApLEp0KDEsImRpdiIsMjkpLGJlKCkpLDImYyYmaHIoImFyaWEtbGFiZWwiLFplKCkuY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwpfWZ1bmN0aW9uIE54ZShjLGwpezEmYyYmKGdlKDAsImRpdiIsMzEpLEp0KDEsImRpdiIsMjkpLGJlKCkpLDImYyYmaHIoImFy'@;
put 'aWEtbGFiZWwiLFplKCkuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsKX1mdW5jdGlvbiBWeGUoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDMyKSxKdCgxLCJkaXYiLDI5KSxiZSgpKSwyJmMmJmhyKCJhcmlhLWxhYmVsIixaZSgpLmNsckRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwpfWZ1'@;
put 'bmN0aW9uIGp4ZShjLGwpezEmYyYmSnQoMCwiY2xyLWRnLXBsYWNlaG9sZGVyIil9ZnVuY3Rpb24gQnhlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiwzMykoMSwiY2xyLXNwaW5uZXIiLDM0KSx6ZSgyLCJMb2FkaW5nIiksYmUoKSgpKX1jb25zdCB6eGU9WyJhbGxTZWxlY3RlZCJdO2Z1bmN0aW9u'@;
put 'IFV4ZShjLGwpe31mdW5jdGlvbiBaeGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJsaSIpKDEsImNsci1jaGVja2JveC13cmFwcGVyIikoMiwiaW5wdXQiLDEzKSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0'@;
put 'KFplKDIpLnRvZ2dsZUNvbHVtblN0YXRlKGYsIWgpKX0pLGJlKCksZ2UoMywibGFiZWwiKSxidCg0LFV4ZSwwLDAsIm5nLXRlbXBsYXRlIiwxNCksYmUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoMik7d2UoMiksUGUoImRpc2FibGVkIixkLmhhc09ubHlPbmVWaXNp'@;
put 'YmxlQ29sdW1uJiYhYS5oaWRkZW4pKCJuZ01vZGVsIiwhYS5oaWRkZW4pLHdlKDIpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixhLnRpdGxlVGVtcGxhdGVSZWYpfX1mdW5jdGlvbiBXeGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDMpKDEsImRpdiIsNCkoMiwiZGl2Iiw1'@;
put 'LDApLHplKDQpLGJlKCksZ2UoNSwiaDIiKSx6ZSg2KSxiZSgpLGdlKDcsImJ1dHRvbiIsNiksSnQoOCwiY2RzLWljb24iLDcpLGdlKDksInNwYW4iLDgpLHplKDEwKSxiZSgpKCkoKSxnZSgxMSwidWwiLDkpLGJ0KDEyLFp4ZSw1LDMsImxpIiwxMCksYmUoKSxnZSgxMywiZGl2IiwxMSkoMTQs'@;
put 'ImNsci1kZy1jb2x1bW4tdG9nZ2xlLWJ1dHRvbiIsMTIpLEh0KCJjbHJBbGxTZWxlY3RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5hbGxDb2x1bW5zU2VsZWN0ZWQoKSl9KSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTtQZSgiaWQiLGEucG9wb3ZlcklkKSxocigi'@;
put 'YXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnNNZW51RGVzY3JpcHRpb24pLHdlKDQpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLmFsbENvbHVtbnNTZWxlY3RlZCksd2UoMikscHIoYS5jb21tb25TdHJpbmdzLmtleXMuc2hvd0NvbHVtbnMpLHdlKCksaHIoImFy'@;
put 'aWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSx3ZSgpLGhyKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpLHdlKDIpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSx3ZSgyKSxQZSgibmdGb3JPZiIsYS5oaWRlYWJsZUNvbHVtblN0YXRlcykoIm5n'@;
put 'Rm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1jb25zdCAkeGU9W1tbImNsci1kZy1wYWdpbmF0aW9uIl1dLCIqIl0scXhlPVsiY2xyLWRnLXBhZ2luYXRpb24iLCIqIl07ZnVuY3Rpb24gS3hlKGMsbCl7aWYoMSZjJiYocmkoMCksZ2UoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBl'@;
put 'ciIsMiksSnQoMywiaW5wdXQiLDMpLGdlKDQsImxhYmVsIiksemUoNSksYmUoKSxnZSg2LCJzcGFuIiw0KSx6ZSg3KSxiZSgpKCkoKSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSg1KSxwcihhLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aCksd2UoMikscHIoYS5jb21tb25TdHJpbmdzLmtl'@;
put 'eXMuc2VsZWN0ZWRSb3dzKX19ZnVuY3Rpb24gWHhlKGMsbCl7MSZjJiZKdCgwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIpfWZ1bmN0aW9uIEp4ZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsWHhlLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLGdlKDIsImRpdiIsNSksT3IoMywxKSxi'@;
put 'ZSgpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuaGFzSGlkZWFibGVDb2x1bW5zKX19ZnVuY3Rpb24gUXhlKGMsbCl7aWYoMSZjJiYoZ2UoMCwib3B0aW9uIiw0KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UGUoIm5nVmFsdWUiLGEpLHdl'@;
put 'KCkscHIoYSl9fWNvbnN0IGVrZT1bImN1cnJlbnRQYWdlSW5wdXQiXSx0a2U9WyIqIixbWyJjbHItZGctcGFnZS1zaXplIl1dXSxua2U9WyIqIiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uIHJrZShjLGwpezEmYyYmKGdlKDAsImRpdiIsNiksT3IoMSwxKSxiZSgpKX1mdW5jdGlvbiBp'@;
put 'a2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJpbnB1dCIsMTgsMSksSHQoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDMp'@;
put 'LnZlcmlmeUN1cnJlbnRQYWdlKGgpKX0pLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO1BlKCJzaXplIixhLnBhZ2UubGFzdC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksaHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdl'@;
put 'KX19ZnVuY3Rpb24gb2tlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgpLHByKGEucGFnZS5jdXJyZW50KX19ZnVuY3Rpb24gc2tlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw3KSgxLCJidXR0b24iLDgp'@;
put 'LEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikucGFnZS5jdXJyZW50PTEpfSksZ2UoMiwic3BhbiIsOSksemUoMyksYmUoKSxKdCg0LCJjZHMtaWNvbiIsMTApLGJlKCksZ2UoNSwiYnV0dG9uIiwxMSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0'@;
put 'IGg9WmUoMik7cmV0dXJuIHh0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZ2UoNiwic3BhbiIsOSksemUoNyksYmUoKSxKdCg4LCJjZHMtaWNvbiIsMTIpLGJlKCksYnQoOSxpa2UsMiwzLCJpbnB1dCIsMTMpKDEwLG9rZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDAsb3Up'@;
put 'LHplKDEyLCIgXHhhMC9ceGEwIiksZ2UoMTMsInNwYW4iKSx6ZSgxNCksYmUoKSxnZSgxNSwiYnV0dG9uIiwxNCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIHh0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZ2UoMTYsInNwYW4i'@;
put 'LDkpLHplKDE3KSxiZSgpLEp0KDE4LCJjZHMtaWNvbiIsMTUpLGJlKCksZ2UoMTksImJ1dHRvbiIsMTYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiB4dChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxnZSgyMCwic3BhbiIsOSksemUoMjEp'@;
put 'LGJlKCksSnQoMjIsImNkcy1pY29uIiwxNyksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1YaSgxMSksZD1aZSgyKTt3ZSgpLFBlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLHdlKDIpLHByKGQuY29t'@;
put 'bW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksd2UoMiksUGUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksd2UoMikscHIoZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSx3ZSgy'@;
put 'KSxQZSgibmdJZiIsIWQuZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQpKCJuZ0lmRWxzZSIsYSksd2UoNCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnRvdGFsUGFnZXMpLHdlKCkscHIoZC5wYWdlLmxhc3QpLHdlKCksUGUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49'@;
put 'ZC5wYWdlLmxhc3QpLGhyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksd2UoMikscHIoZC5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLHdlKDIpLFBlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxocigiYXJpYS1sYWJlbCIs'@;
put 'ZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpLHdlKDIpLHByKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19ZnVuY3Rpb24gYWtlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxya2UsMiwwLCJkaXYiLDMpLGdlKDIsImRpdiIsNCksT3IoMyksYmUoKSxidCg0LHNrZSwyMywx'@;
put 'NiwiZGl2Iiw1KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLFBlKCJuZ0lmIixhLl9wYWdlU2l6ZUNvbXBvbmVudCksd2UoMyksUGUoIm5nSWYiLGEucGFnZS5sYXN0PjEpfX1mdW5jdGlvbiBsa2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJkaXYiLDE5KSx6'@;
put 'ZSgyKSxiZSgpLGdlKDMsImRpdiIsNykoNCwiYnV0dG9uIiwxMSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4geHQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxnZSg1LCJzcGFuIiw5KSx6ZSg2KSxiZSgpLEp0KDcsImNkcy1pY29u'@;
put 'IiwxMiksYmUoKSxnZSg4LCJzcGFuIiksemUoOSksYmUoKSxnZSgxMCwiYnV0dG9uIiwxNCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4geHQoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxnZSgxMSwic3BhbiIsOSksemUoMTIpLGJl'@;
put 'KCksSnQoMTMsImNkcy1pY29uIiwxNSksYmUoKSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoMiksWmgoIiAiLGEucGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSx3ZSgyKSxQZSgiZGlzYWJsZWQiLGEucGFn'@;
put 'ZS5jdXJyZW50PD0xKSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSx3ZSgyKSxwcihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLHdlKDMpLHByKGEucGFnZS5jdXJyZW50KSx3ZSgpLFBlKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJl'@;
put 'bnQ+PWEucGFnZS5sYXN0KSxocigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLHdlKDIpLHByKGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKX19Y29uc3QgY2tlPVtbWyJjbHItc3RhY2stbGFiZWwiXV0sIioiLFtbImNsci1zdGFjay1ibG9jayJdXV0s'@;
put 'dWtlPVsiY2xyLXN0YWNrLWxhYmVsIiwiKiIsImNsci1zdGFjay1ibG9jayJdO2Z1bmN0aW9uIGRrZShjLGwpezEmYyYmSnQoMCwiY2RzLWljb24iLDcpLDImYyYmaHIoImRpcmVjdGlvbiIsWmUoKS5jYXJldERpcmVjdGlvbil9ZnVuY3Rpb24gaGtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3Bh'@;
put 'biIsOCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxwcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zdGFja1ZpZXdDaGFuZ2VkKX19ZnVuY3Rpb24gZmtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw5KSxPcigxLDIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO0JkKCJoZWln'@;
put 'aHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLGhyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBwa2U9W1tbImNsci1zdGFjay1oZWFkZXIiXV0sIioiXSxta2U9WyJjbHItc3RhY2staGVhZGVyIiwiKiJdO2Z1bmN0'@;
put 'aW9uIHZrZShjLGwpezEmYyYmTmwoMCl9ZnVuY3Rpb24geWtlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSx2a2UsMSwwLCJuZy1jb250YWluZXIiLDIpLGlpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKDIpO3dlKCksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQuZmVhdHVyZXNT'@;
put 'ZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixkLmdldENvbnRleHQoYSkpfX1mdW5jdGlvbiBia2UoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLHlrZSwyLDIsIm5nLWNvbnRhaW5lciIsMSksaWkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQ'@;
put 'ZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3Qgd2tlPVsiY29udGVudENvbnRhaW5lciJdLE1rZT1bW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLCIqIl0sQ2tlPVsiY2xyLXRy'@;
put 'ZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSIsIioiXTtmdW5jdGlvbiBTa2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDkpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5leHBhbmRTZXJ2aWNlLnRvZ2dsZSgpKX0pKCJmb2N1cyIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5mb2N1c1RyZWVOb2RlKCkpfSksSnQoMSwiY2RzLWljb24iLDEwKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpO3dlKCksaHIoImRpcmVjdGlvbiIsYS5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJkb3duIjoicmlnaHQiKX19ZnVuY3Rp'@;
put 'b24geGtlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiwxMSksSnQoMSwic3BhbiIsMTIpLGJlKCkpfWZ1bmN0aW9uIGtrZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTMpKDEsImlucHV0IiwxNCksSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCk7'@;
put 'cmV0dXJuIHh0KGguX21vZGVsLnRvZ2dsZVNlbGVjdGlvbihoLmZlYXR1cmVzU2VydmljZS5lYWdlcikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxiZSgpLGdlKDIsImxhYmVsIiwxNSksTmwoMywxNiksYmUoKSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1aZSgpLGQ9WGkoNyk7d2UoKSxfeSgiaWQiLCIiLGEubm9kZUlkLCItY2hlY2siKSxQZSgiY2hlY2tlZCIsYS5fbW9kZWwuc2VsZWN0ZWQudmFsdWU9PT1hLlNUQVRFUy5TRUxFQ1RFRCkoImluZGV0ZXJtaW5hdGUiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFU'@;
put 'RVMuSU5ERVRFUk1JTkFURSksd2UoKSxfeSgiZm9yIiwiIixhLm5vZGVJZCwiLWNoZWNrIiksd2UoKSxQZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIEVrZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTcpLEh0KCJtb3VzZXVwIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBTdChhKSx4dChaZSgpLmZvY3VzVHJlZU5vZGUoKSl9KSxObCgxLDE2KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLGQ9WGkoNyk7YnIoImNsci10cmVlbm9kZS10ZXh0LW9ubHkiLGEudHJlZU5vZGVDb250ZW50VGV4dE9ubHkpLHdlKCksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQp'@;
put 'fX1mdW5jdGlvbiBUa2UoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiksemUoMSwiIHNlbGVjdGVkIiksYmUoKSl9ZnVuY3Rpb24gRGtlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIpLHplKDEsIiB1bnNlbGVjdGVkIiksYmUoKSl9ZnVuY3Rpb24gQWtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiwx'@;
put 'OSksYnQoMSxUa2UsMiwwLCJzcGFuIiwyMCkoMixEa2UsMiwwLCJzcGFuIiwyMCksYmUoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKCksUGUoIm5nSWYiLGEuYXJpYVNlbGVjdGVkKSx3ZSgpLFBlKCJuZ0lmIiwhYS5hcmlhU2VsZWN0ZWQpfX1mdW5jdGlvbiBMa2UoYyxsKXtpZigxJmMmJihP'@;
put 'cigwLDIpLGJ0KDEsQWtlLDMsMiwiZGl2IiwxOCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGV8fGEuYXJpYVNlbGVjdGVkKX19ZnVuY3Rpb24gSWtlKGMsbCl7MSZjJiZKdCgwLCJjbHItcmVjdXJzaXZlLWNoaWxkcmVuIiwx'@;
put 'KSwyJmMmJlBlKCJjaGlsZHJlbiIsWmUoKS5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uLnJvb3QpfWZ1bmN0aW9uIFJrZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5jbG9zZSgp'@;
put 'KX0pLEp0KDEsImNkcy1pY29uIiw1KSxiZSgpfTImYyYmaHIoImFyaWEtbGFiZWwiLFplKDIpLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsKX1mdW5jdGlvbiBPa2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksT3IoMiksYmUoKSxidCgzLFJrZSwyLDEsImJ1dHRvbiIs'@;
put 'MyksYmUoKSksMiZjKXtjb25zdCBhPVplKCk7YnIoImFsZXJ0LXNtIixhLmlzU21hbGwpKCJhbGVydC1saWdodHdlaWdodCIsYS5pc0xpZ2h0d2VpZ2h0KSgiYWxlcnQtYXBwLWxldmVsIixhLmlzQXBwTGV2ZWwpLFBlKCJuZ0NsYXNzIixhLmFsZXJ0Q2xhc3MpLHdlKDMpLFBlKCJuZ0lmIixh'@;
put 'LmNsb3NhYmxlKX19ZnVuY3Rpb24gUGtlKGMsbCl7MSZjJiZKdCgwLCJjbHItc3Bpbm5lciIsMyl9ZnVuY3Rpb24gRmtlKGMsbCl7aWYoMSZjJiZKdCgwLCJjZHMtaWNvbiIsNCksMiZjKXtjb25zdCBhPVplKCk7aHIoInNoYXBlIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblNoYXBlKSgiYXJp'@;
put 'YS1sYWJlbCIsYS5pY29uU2VydmljZS5hbGVydEljb25UaXRsZSl9fWNvbnN0IEhrZT1bW1siY2xyLWFsZXJ0Il1dXSxOa2U9WyJjbHItYWxlcnQiXTtmdW5jdGlvbiBWa2UoYyxsKXsxJmMmJkp0KDAsImNsci1hbGVydHMtcGFnZXIiLDIpLDImYyYmUGUoImNsckN1cnJlbnRBbGVydEluZGV4'@;
put 'IixaZSgpLmN1cnJlbnRBbGVydEluZGV4KX1mdW5jdGlvbiBZa2UoYyxsKXsxJmMmJk9yKDApfWNvbnN0IHprZT1bInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiXTtmdW5jdGlvbiBVa2UoYyxsKXtpZigxJmMmJihnZSgwLCJzZWN0aW9uIiwxKSxPcigxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUo'@;
put 'KTticigiYWN0aXZlIixhLmFjdGl2ZSksUGUoImlkIixhLnRhYkNvbnRlbnRJZCkoImhpZGRlbiIsIWEuYWN0aXZlKSxocigiYXJpYS1sYWJlbGxlZGJ5IixhLmFyaWFMYWJlbGxlZEJ5KSgiYXJpYS1oaWRkZW4iLCFhLmFjdGl2ZSl9fWNvbnN0IFprZT1bInRhYkNvbnRlbnRWaWV3Q29udGFp'@;
put 'bmVyIl07ZnVuY3Rpb24gV2tlKGMsbCl7aWYoMSZjJiYocmkoMCksZ2UoMSwibGkiLDUpLE5sKDIsNiksYmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoMiksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEudGVtcGxhdGVSZWZDb250YWluZXIudGVtcGxhdGUpfX1mdW5j'@;
put 'dGlvbiBHa2UoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLFdrZSwzLDEsIm5nLWNvbnRhaW5lciIsNCksaWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoKTt3ZSgpLFBlKCJuZ0lmIixhLnRhYnNJZD09PWQudGFic0lkJiYhYS5pbk92ZXJmbG93KX19ZnVuY3Rpb24gJGtlKGMs'@;
put 'bCl7MSZjJiZObCgwLDYpLDImYyYmUGUoIm5nVGVtcGxhdGVPdXRsZXQiLFplKCkuJGltcGxpY2l0LnRlbXBsYXRlUmVmQ29udGFpbmVyLnRlbXBsYXRlKX1mdW5jdGlvbiBxa2UoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLCRrZSwxLDEsIm5nLWNvbnRhaW5lciIsMTMpLGlpKCkpLDImYyl7'@;
put 'Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKDMpO3dlKCksUGUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJmEuaW5PdmVyZmxvdyl9fWZ1bmN0aW9uIEtrZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTIpLEh0KCJrZXlkb3du'@;
put 'LmVzY2FwZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikuY2xvc2VPbkVzY2FwZUtleSgpKX0sMCxUMykoImNsaWNrIixmdW5jdGlvbihoKXtTdChhKSxaZSgpO2NvbnN0IGY9WGkoNCk7cmV0dXJuIHh0KFplKCkuY2xvc2VPbk91dHNpZGVDbGljayhoLGYpKX0sITEsVDMpKCJm'@;
put 'b2N1c291dCIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmNsb3NlT25Gb2N1c091dChoKSl9KSxidCgxLHFrZSwyLDEsIm5nLWNvbnRhaW5lciIsMyksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdGb3JPZiIsYS50YWJMaW5rRGlyZWN0aXZlcyl9fWZ1'@;
put 'bmN0aW9uIFhrZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO3JpKDApLGdlKDEsImRpdiIsNykoMiwibGkiLDgpKDMsImJ1dHRvbiIsOSwxKSxIdCgibW91c2Vkb3duIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLl9tb3VzZWRvd249ITApfSkoImZvY3VzIixmdW5jdGlvbigp'@;
put 'e3JldHVybiBTdChhKSx4dChaZSgpLm9wZW5PdmVyZmxvd09uRm9jdXMoKSl9KSgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkudG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCkpfSksSnQoNSwiY2RzLWljb24iLDEwKSxiZSgpKCksYnQoNixLa2UsMiwxLCJjbHItdGFiLW92'@;
put 'ZXJmbG93LWNvbnRlbnQiLDExKSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoKSxicigib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLHdlKDIpLGJyKCJhY3RpdmUiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdykoIm9wZW4iLGEudG9nZ2xlU2VydmljZS5vcGVuKSxocigidGFi'@;
put 'aW5kZXgiLGEuYWN0aXZlVGFiSW5PdmVyZmxvdyYmIWEudG9nZ2xlU2VydmljZS5vcGVuPzA6LTEpKCJ0aXRsZSIsYS5jb21tb25TdHJpbmdzLmtleXMubW9yZSksd2UoMiksaHIoInN0YXR1cyIsYS50b2dnbGVTZXJ2aWNlLm9wZW4/ImluZm8iOm51bGwpKCJ0aXRsZSIsYS5jb21tb25TdHJp'@;
put 'bmdzLmtleXMubW9yZSksd2UoKSxQZSgibmdJZiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pfX1mdW5jdGlvbiBKa2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS50b2dnbGVCeUJ1dHRv'@;
put 'bigpKX0pLEp0KDEsImNkcy1pY29uIiw0KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpO2JyKCJvbi1jb2xsYXBzZSIsYS5jb2xsYXBzZWQpLGhyKCJhcmlhLWV4cGFuZGVkIixhLmFyaWFFeHBhbmRlZCkoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9n'@;
put 'Z2xlKSx3ZSgpLGhyKCJkaXJlY3Rpb24iLGEuY29sbGFwc2VkPyJyaWdodCI6ImxlZnQiKX19ZnVuY3Rpb24gUWtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiw1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuY29sbGFwc2VkPSEx'@;
put 'KX0pLGJlKCl9MiZjJiZocigiYXJpYS1sYWJlbCIsWmUoKS5jb21tb25TdHJpbmdzLmtleXMudmVydGljYWxOYXZUb2dnbGUpfWNvbnN0IG5FZT1bImNsclZlcnRpY2FsTmF2TGluayIsIiJdLHJFZT1bW1siIiwiY2xyVmVydGljYWxOYXZJY29uIiwiIl1dLCIqIl0saUVlPVsiW2NsclZlcnRp'@;
put 'Y2FsTmF2SWNvbl0iLCIqIl0sb0VlPVtbWyIiLDgsIm1vZGFsLW5hdiJdXSxbWyIiLDgsIm1vZGFsLXRpdGxlIl1dLFtbIiIsOCwibW9kYWwtYm9keSJdXSxbWyIiLDgsIm1vZGFsLWZvb3RlciJdXV0sc0VlPVsiLm1vZGFsLW5hdiIsIi5tb2RhbC10aXRsZSIsIi5tb2RhbC1ib2R5IiwiLm1v'@;
put 'ZGFsLWZvb3RlciJdO2Z1bmN0aW9uIGFFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsMTEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikuY2xvc2UoKSl9KSxKdCgxLCJjZHMtaWNvbiIsMTIpLGJlKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVplKDIpO2hyKCJhcmlhLWxhYmVsIixhLmNsb3NlQnV0dG9uQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWZ1bmN0aW9uIGxFZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxIdCgiQGZhZGVEb3duLmRvbmUiLGZ1bmN0'@;
put 'aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLmZhZGVEb25lKGgpKX0pLGdlKDIsImRpdiIsMyksemUoMyksYmUoKSxnZSg0LCJkaXYiLDQpLE9yKDUpLGdlKDYsImRpdiIsNSkoNywiZGl2Iiw2KSg4LCJkaXYiLDcpLE9yKDksMSksYmUoKSxidCgxMCxhRWUsMiwxLCJidXR0b24iLDgpLGJl'@;
put 'KCksZ2UoMTEsImRpdiIsOSksT3IoMTIsMiksYmUoKSxPcigxMywzKSxiZSgpKCksZ2UoMTQsImRpdiIsMyksemUoMTUpLGJlKCkoKSxnZSgxNiwiZGl2IiwxMCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4geHQoaC5zdGF0aWNCYWNrZHJvcHx8aC5j'@;
put 'bG9zZSgpKX0pLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLGJyKCJtb2RhbC1zbSIsInNtIj09YS5zaXplKSgibW9kYWwtbGciLCJsZyI9PWEuc2l6ZSkoIm1vZGFsLXhsIiwieGwiPT1hLnNpemUpLFBlKCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsITApKCJAZmFkZURvd24i'@;
put 'LGEuc2tpcEFuaW1hdGlvbiksaHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5KSx3ZSgyKSxwcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksd2UoNSksazQoImlkIixhLm1vZGFsSWQpLHdlKDIpLFBlKCJuZ0lm'@;
put 'IixhLmNsb3NhYmxlKSx3ZSg1KSxwcihhLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpLHdlKCksUGUoIkBmYWRlIix2b2lkIDApfX1sZXQgWmE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1'@;
put 'ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksY30pKCksS3M9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNkcy1pY29uIl1dfSks'@;
put 'Y30pKCksYmE9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW9dfSksY30pKCk7Y2xhc3MgRWJ7fXZhciBBMD1mdW5jdGlvbihjKXty'@;
put 'ZXR1cm4gY1tjLkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5HPTFdPSJMT0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oQTB8fHt9KTtsZXQgcjA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxpc3RlbmVyPWEs'@;
put 'dGhpcy5fbG9hZGluZ1N0YXRlPUEwLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT1BMC5MT0FESU5HOmF8fChhPUEwLkRFRkFVTFQpLGEhPT10aGlzLl9sb2FkaW5nU3RhdGUmJih0aGlzLl9s'@;
put 'b2FkaW5nU3RhdGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT1BMC5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChFYiw4'@;
put 'KSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6W1FuLk5vbmUsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxjfSkoKSxMMD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5l'@;
put 'eHBhbmRhYmxlPTAsdGhpcy5fbG9hZGluZz0hMSx0aGlzLl9leHBhbmRlZD0hMSx0aGlzLl9leHBhbmRDaGFuZ2U9bmV3IG5ufWdldCBsb2FkaW5nKCl7cmV0dXJuIHRoaXMuX2xvYWRpbmd9c2V0IGxvYWRpbmcoYSl7KGE9ISFhKSE9PXRoaXMuX2xvYWRpbmcmJih0aGlzLl9sb2FkaW5nPWEp'@;
put 'fWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9leHBhbmRDaGFuZ2UubmV4dChhKSl9Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRD'@;
put 'aGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKCl7dGhpcy5leHBhbmRlZD0hdGhpcy5fZXhwYW5kZWR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3RoaXMubG9hZGluZz1hPT09QTAuTE9BRElOR319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUw'@;
put 'Mjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSUVlPTA7ZnVuY3Rpb24gaHUoKXtyZXR1cm4iY2xyLWlkLSIrSUVlKyt9bGV0IHVuZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIiwhMCl9'@;
put 'LG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksT3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKTt2YXIgbjI9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSW5hY3RpdmU9ImluYWN0'@;
put 'aXZlIixjLkVycm9yPSJlcnJvciIsYy5Db21wbGV0ZT0iY29tcGxldGUiLGN9KG4yfHx7fSk7Y29uc3QgcjI9IjAuMnMgZWFzZS1pbi1vdXQiLFJFZT1baWQoInNraXBJbml0aWFsUmVuZGVyIixbR2MoIjplbnRlciIsW10pXSksaWQoInRvZ2dsZSIsW0djKCJ2b2lkID0+ICoiLFtJcyh7ZGlz'@;
put 'cGxheToiYmxvY2siLGhlaWdodDowfSksbjAocjIsSXMoe2hlaWdodDoiKiJ9KSldKV0pXSxhTj0oaWQoInNraXBJbml0aWFsUmVuZGVyIixbR2MoIjplbnRlciIsW10pXSksaWQoInRvZ2dsZSIsW0djKCJ2b2lkID0+ICoiLFtJcyh7ZGlzcGxheToiYmxvY2siLGhlaWdodDowfSksbjAocjIs'@;
put 'SXMoe2hlaWdodDoiKiJ9KSldKSxHYygiKiA9PiB2b2lkIixbSXMoe2Rpc3BsYXk6ImJsb2NrIn0pLG4wKHIyLElzKHtoZWlnaHQ6MCxkaXNwbGF5OiJub25lIn0pKV0pXSkse29wZW46Ik9wZW4iLGNsb3NlOiJDbG9zZSIsc2hvdzoiU2hvdyIsaGlkZToiSGlkZSIsZXhwYW5kOiJFeHBhbmQi'@;
put 'LGNvbGxhcHNlOiJDb2xsYXBzZSIsbW9yZToiTW9yZSIsc2VsZWN0OiJTZWxlY3QiLHNlbGVjdEFsbDoiU2VsZWN0IEFsbCIscHJldmlvdXM6IlByZXZpb3VzIixuZXh0OiJOZXh0IixjdXJyZW50OiJKdW1wIHRvIGN1cnJlbnQiLGluZm86IkluZm8iLHN1Y2Nlc3M6IlN1Y2Nlc3MiLHdhcm5p'@;
put 'bmc6Ildhcm5pbmciLGRhbmdlcjoiRXJyb3IiLG5ldXRyYWw6Ik5ldXRyYWwiLHVua25vd246IlVua25vd24iLHJvd0FjdGlvbnM6IkF2YWlsYWJsZSBhY3Rpb25zIixwaWNrQ29sdW1uczoiTWFuYWdlIENvbHVtbnMiLHNob3dDb2x1bW5zOiJTaG93IENvbHVtbnMiLHNvcnRDb2x1bW46IlNv'@;
put 'cnQgQ29sdW1uIixmaXJzdFBhZ2U6IkZpcnN0IFBhZ2UiLGxhc3RQYWdlOiJMYXN0IFBhZ2UiLG5leHRQYWdlOiJOZXh0IFBhZ2UiLHByZXZpb3VzUGFnZToiUHJldmlvdXMgUGFnZSIsY3VycmVudFBhZ2U6IkN1cnJlbnQgUGFnZSIsdG90YWxQYWdlczoiVG90YWwgUGFnZXMiLGZpbHRlckl0'@;
put 'ZW1zOiJGaWx0ZXIgaXRlbXMiLG1pblZhbHVlOiJNaW4gdmFsdWUiLG1heFZhbHVlOiJNYXggdmFsdWUiLG1vZGFsQ29udGVudFN0YXJ0OiJCZWdpbm5pbmcgb2YgTW9kYWwgQ29udGVudCIsbW9kYWxDb250ZW50RW5kOiJFbmQgb2YgTW9kYWwgQ29udGVudCIsc2hvd0NvbHVtbnNNZW51RGVz'@;
put 'Y3JpcHRpb246IlNob3cgb3IgaGlkZSBjb2x1bW5zIG1lbnUiLGFsbENvbHVtbnNTZWxlY3RlZDoiQWxsIGNvbHVtbnMgc2VsZWN0ZWQiLHNpZ25wb3N0VG9nZ2xlOiJTaWducG9zdCBUb2dnbGUiLHNpZ25wb3N0Q2xvc2U6IlNpZ25wb3N0IENsb3NlIixsb2FkaW5nOiJMb2FkaW5nIixkZXRh'@;
put 'aWxQYW5lU3RhcnQ6IlN0YXJ0IG9mIHJvdyBkZXRhaWxzIixkZXRhaWxQYW5lRW5kOiJFbmQgb2Ygcm93IGRldGFpbHMiLHNpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiU2luZ2xlIHNlbGVjdGlvbiBoZWFkZXIiLHNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWw6IlNpbmdsZSBhY3Rpb25hYmxl'@;
put 'IGhlYWRlciIsZGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbDoiVG9nZ2xlIG1vcmUgcm93IGNvbnRlbnQiLGRhdGFncmlkRmlsdGVyQXJpYUxhYmVsOiJUb2dnbGUge0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbDoiRmlsdGVyIGRpYWxvZyIsY29sdW1uU2Vw'@;
put 'YXJhdG9yQXJpYUxhYmVsOiJDb2x1bW4gcmVzaXplIGhhbmRsZSIsY29sdW1uU2VwYXJhdG9yRGVzY3JpcHRpb246IlVzZSBsZWZ0IG9yIHJpZ2h0IGtleSB0byByZXNpemUgdGhlIGNvbHVtbiIsYWxlcnRDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiQ2xvc2UgYWxlcnQiLGFsZXJ0TmV4dEFsZXJ0'@;
put 'QXJpYUxhYmVsOiJOZXh0IGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixhbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWw6IlByZXZpb3VzIGFsZXJ0IG1lc3NhZ2UsIHtDVVJSRU5UfSBvZiB7Q09VTlR9IixkYXRlcGlja2VyRGlhbG9nTGFiZWw6IkNob29zZSBkYXRlIixk'@;
put 'YXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsOiJDaG9vc2UgZGF0ZSIsZGF0ZXBpY2tlclRvZ2dsZUNoYW5nZURhdGVMYWJlbDoiQ2hhbmdlIGRhdGUsIHtTRUxFQ1RFRF9EQVRFfSIsZGF0ZXBpY2tlclByZXZpb3VzTW9udGg6IlByZXZpb3VzIG1vbnRoIixkYXRlcGlja2VyQ3VycmVu'@;
put 'dE1vbnRoOiJDdXJyZW50IG1vbnRoIixkYXRlcGlja2VyTmV4dE1vbnRoOiJOZXh0IG1vbnRoIixkYXRlcGlja2VyUHJldmlvdXNEZWNhZGU6IlByZXZpb3VzIGRlY2FkZSIsZGF0ZXBpY2tlck5leHREZWNhZGU6Ik5leHQgZGVjYWRlIixkYXRlcGlja2VyQ3VycmVudERlY2FkZToiQ3VycmVu'@;
put 'dCBkZWNhZGUiLGRhdGVwaWNrZXJTZWxlY3RNb250aFRleHQ6IlNlbGVjdCBtb250aCwgdGhlIGN1cnJlbnQgbW9udGggaXMge0NBTEVOREFSX01PTlRIfSIsZGF0ZXBpY2tlclNlbGVjdFllYXJUZXh0OiJTZWxlY3QgeWVhciwgdGhlIGN1cnJlbnQgeWVhciBpcyB7Q0FMRU5EQVJfWUVBUn0i'@;
put 'LGRhdGVwaWNrZXJTZWxlY3RlZExhYmVsOiJ7RlVMTF9EQVRFfSAtIFNlbGVjdGVkIixzdGFja1ZpZXdDaGFuZ2VkOiJWYWx1ZSBjaGFuZ2VkLiIscmVzcG9uc2l2ZU5hdlRvZ2dsZU9wZW46Ik9wZW4gbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2VG9nZ2xlQ2xvc2U6IkNsb3NlIG5h'@;
put 'dmlnYXRpb24gbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93T3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHJlc3BvbnNpdmVOYXZPdmVyZmxvd0Nsb3NlOiJDbG9zZSBuYXZpZ2F0aW9uIG92ZXJmbG93IG1lbnUiLHZlcnRpY2FsTmF2VG9nZ2xlOiJUb2dnbGUgdmVydGlj'@;
put 'YWwgbmF2aWdhdGlvbiIsdGltZWxpbmVTdGVwTm90U3RhcnRlZDoiTm90IHN0YXJ0ZWQiLHRpbWVsaW5lU3RlcEN1cnJlbnQ6IkN1cnJlbnQiLHRpbWVsaW5lU3RlcFN1Y2Nlc3M6IkNvbXBsZXRlZCIsdGltZWxpbmVTdGVwRXJyb3I6IkVycm9yIix0aW1lbGluZVN0ZXBQcm9jZXNzaW5nOiJJ'@;
put 'biBwcm9ncmVzcyIsY29tYm9ib3hEZWxldGU6IkRlbGV0ZSBzZWxlY3RlZCBvcHRpb24iLGNvbWJvYm94U2VhcmNoaW5nOidTZWFyY2hpbmcgZm9yIG1hdGNoZXMgZm9yICJ7SU5QVVR9IicsY29tYm9ib3hTZWxlY3Rpb246IlNlbGVjdGlvbiIsY29tYm9ib3hTZWxlY3RlZDoiU2VsZWN0ZWQi'@;
put 'LGNvbWJvYm94Tm9SZXN1bHRzOiJObyByZXN1bHRzIixjb21ib2JveE9wZW46IlNob3cgb3B0aW9ucyIsZGF0YWdyaWRFeHBhbmRhYmxlQmVnaW5uaW5nT2Y6IkJlZ2lubmluZyBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlRW5kT2Y6IkVuZCBvZiIsZGF0YWdyaWRFeHBhbmRhYmxlUm93Q29udGVu'@;
put 'dDoiRXhwYW5kYWJsZSByb3cgY29udGVudCIsZGF0YWdyaWRFeHBhbmRhYmxlUm93c0hlbHBlclRleHQ6IlNjcmVlbiByZWFkZXIgdGFibGUgY29tbWFuZHMgbWF5IG5vdCB3b3JrIGZvciB2aWV3aW5nIGV4cGFuZGVkIGNvbnRlbnQsIHBsZWFzZSB1c2UgeW91ciBzY3JlZW4gcmVhZGVyJ3Mg'@;
put 'YnJvd3NlIG1vZGUgdG8gcmVhZCB0aGUgY29udGVudCBleHBvc2VkIGJ5IHRoaXMgYnV0dG9uIix3aXphcmRTdGVwU3VjY2VzczoiQ29tcGxldGVkIix3aXphcmRTdGVwRXJyb3I6IkVycm9yIix3aXphcmRTdGVwbmF2QXJpYUxhYmVsOiJTdGVwIG5hdmlnYXRpb24iLHBhc3N3b3JkSGlkZToi'@;
put 'SGlkZSBwYXNzd29yZCBmb3Ige0xBQkVMfSIscGFzc3dvcmRTaG93OiJTaG93IHBhc3N3b3JkIGZvciB7TEFCRUx9IixzZWxlY3RlZFJvd3M6IlNlbGVjdGVkIHJvd3MifSk7bGV0IFJzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdzPWFOfWdldCBrZXlzKCl7cmV0'@;
put 'dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUoYSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5hfX1wYXJzZShhLGQ9e30pe2NvbnN0IGg9T2JqZWN0LmtleXMoZCk7bGV0IGY9YTtyZXR1cm4gaC5sZW5ndGgmJmguZm9yRWFjaCh2PT57Zj1mLnJlcGxhY2UoYHske3Z9fWAs'@;
put 'ZFt2XSl9KSxmfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKTt2YXIgVGI9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRGVmYXVs'@;
put 'dD0iZGVmYXVsdCIsYy5NdWx0aT0ibXVsdGkiLGN9KFRifHx7fSk7bGV0IFBFZT0wO2NsYXNzIEZFZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLmFjY29yZGlvbklkPWEsdGhpcy5zdGF0dXM9bjIuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhp'@;
put 'cy5vcGVuPSExLHRoaXMudGVtcGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9uSWR9YH19Y2xhc3MgZG5le2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1UYi5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9UEVlKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXty'@;
put 'ZXR1cm4gT2JqZWN0LmtleXModGhpcy5fcGFuZWxzKS5tYXAobD0+dGhpcy5fcGFuZWxzW2xdKX1zZXRTdHJhdGVneShsKXt0aGlzLnN0cmF0ZWd5PWx9dXBkYXRlUGFuZWxPcmRlcihsKXtsLmZvckVhY2goKGEsZCk9PnRoaXMuX3BhbmVsc1thXS5pbmRleD1kKSx0aGlzLnJlbW92ZU9sZFBh'@;
put 'bmVscyhsKX1hZGRQYW5lbChsLGE9ITEpe3RoaXMuX3BhbmVsc1tsXT1uZXcgRkVlKGwsdGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2xdLm9wZW49YX10b2dnbGVQYW5lbChsLGEpe2NvbnN0IGg9dm9pZCAwIT09YT9hOiF0aGlzLl9wYW5lbHNbbF0ub3BlbjtoJiZ0aGlzLnN0'@;
put 'cmF0ZWd5PT09VGIuRGVmYXVsdCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWh9ZGlzYWJsZVBhbmVsKGwsYSl7dGhpcy5fcGFuZWxzW2xdLmRpc2FibGVkPWF9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGw9PnRoaXMuX3BhbmVsc1ts'@;
put 'LmlkXS5vcGVuPSExKX1yZW1vdmVPbGRQYW5lbHMobCl7dGhpcy5wYW5lbHMuZmlsdGVyKGE9PnZvaWQgMD09PWwuZmluZChkPT5kPT09YS5pZCkpLmZvckVhY2goYT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1thLmlkXSl9fWxldCBEYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5h'@;
put 'Y2NvcmRpb249bmV3IGRuZSx0aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBBcih0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKHlyKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlz'@;
put 'LmFjY29yZGlvbi5zZXRTdHJhdGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFu'@;
put 'ZWxzKCl9ZGlzYWJsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1p'@;
put 'dFVwZGF0ZWRQYW5lbHMoKXt0aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30p'@;
put 'KCksTEU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmFjY29yZGlvblNlcnZpY2U9ZCx0aGlzLmlmRXhwYW5kU2VydmljZT1oLHRoaXMuY2RyPWYsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnBhbmVsT3Blbj0hMSx0aGlzLnBhbmVs'@;
put 'T3BlbkNoYW5nZT1uZXcgSXIsdGhpcy5BY2NvcmRpb25TdGF0dXM9bjIsdGhpcy5pc0FjY29yZGlvbj0hMCx0aGlzLl9pZD1odSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YX1nZXQgcGFuZWxOdW1iZXIoKXtyZXR1cm4gdGhpcy5fcGFuZWxJbmRleCsx'@;
put 'fW5nT25Jbml0KCl7dGhpcy5wYW5lbD10aGlzLmFjY29yZGlvblNlcnZpY2UuZ2V0UGFuZWxDaGFuZ2VzKHRoaXMuaWQpLnBpcGUobHUoYT0+dGhpcy5lbWl0UGFuZWxDaGFuZ2UoYSkpKSx0aGlzLmFjY29yZGlvblNlcnZpY2UuYWRkUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhp'@;
put 'cy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsdGhpcy5wYW5lbE9wZW4pLHRoaXMuYWNjb3JkaW9uU2VydmljZS5kaXNhYmxlUGFuZWwodGhpcy5pZCx0aGlzLmRpc2FibGVkKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnBhbmVsJiZhLnBhbmVsT3BlbiYmYS5wYW5lbE9wZW4u'@;
put 'Y3VycmVudFZhbHVlIT09YS5wYW5lbE9wZW4ucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQsYS5wYW5lbE9wZW4uY3VycmVudFZhbHVlKSx0aGlzLnBhbmVsJiZhLmRpc2FibGVkJiZhLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSE9PWEuZGlz'@;
put 'YWJsZWQucHJldmlvdXNWYWx1ZSYmdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlzLmlkLGEuZGlzYWJsZWQuY3VycmVudFZhbHVlKX10b2dnbGVQYW5lbCgpe3RoaXMuYWNjb3JkaW9uU2VydmljZS50b2dnbGVQYW5lbCh0aGlzLmlkKX1jb2xsYXBzZVBhbmVsT25Bbmlt'@;
put 'YXRpb25Eb25lKGEpe2Eub3Blbnx8KHRoaXMuaWZFeHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSExKX1nZXRQYW5lbFN0YXRlQ2xhc3NlcyhhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1wYW5lbC0ke2Euc3RhdHVzfSAke2Eub3Blbj8iY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuIjoiIn1gfWdldEFj'@;
put 'Y29yZGlvbkNvbnRlbnRJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1jb250ZW50LSR7YX0nYH1nZXRBY2NvcmRpb25IZWFkZXJJZChhKXtyZXR1cm5gY2xyLWFjY29yZGlvbi1oZWFkZXItJHthfWB9ZW1pdFBhbmVsQ2hhbmdlKGEpe2EuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhp'@;
put 'cy5fcGFuZWxJbmRleD1hLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSksYS5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KGEub3BlbiksdGhpcy5wYW5lbE9wZW49YS5vcGVuKSxhLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBh'@;
put 'bmRlZD0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFJzKSxzdChEYiksc3QoTDApLHN0KEZhKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVu'@;
put 'Y3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCx1bmUsNCksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5hY2NvcmRpb25EZXNjcmlwdGlvbj1mKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNj'@;
put 'b3JkaW9uLXBhbmVsLWRpc2FibGVkIixkLmRpc2FibGVkKX0saW5wdXRzOntkaXNhYmxlZDpbUW4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOltRbi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXX0sb3V0cHV0'@;
put 'czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UifSxmZWF0dXJlczpbR2koW0wwXSksQmFdLG5nQ29udGVudFNlbGVjdG9yczpsbmUsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxb'@;
put 'MSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiY2xpY2siLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImNsci1hY2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwi'@;
put 'ZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbMSwiY2xyLWFjY29yZGlvbi1udW1iZXIiXSxbInN0YXR1cyIsImRhbmdlciIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwxLCJjbHItYWNjb3JkaW9uLWVycm9yLWljb24iXSxbInN0YXR1cyIsInN1Y2Nl'@;
put 'c3MiLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsMSwiY2xyLWFjY29yZGlvbi1jb21wbGV0ZS1pY29uIl0sWyJyb2xlIiwicmVnaW9uIiwxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQtcmVnaW9uIiwzLCJpZCJdLFsiY2xhc3MiLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiLDQsIm5nSWYiXSxbMSwi'@;
put 'Y2xyLWFjY29yZGlvbi1jb250ZW50Il0sWzEsImNsci1hY2NvcmRpb24taW5uZXItY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKGFuZSksYnQoMCxZTWUsMTksMTgsIm5nLWNvbnRhaW5lciIsMSksUGEoMSwiYXN5bmMiKSksMiZhJiZQZSgibmdJZiIsd2MoMSwx'@;
put 'LGQucGFuZWwpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxLcyxma10sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpSRWV9LGNoYW5nZURldGVjdGlvbjowfSksY30pKCksaG5lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlPWEsdGhpcy5t'@;
put 'dWx0aVBhbmVsPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ09uSW5pdCgpe3RoaXMuc2V0QWNjb3JkaW9uU3RyYXRlZ3koKX1uZ09uQ2hhbmdlcyhhKXthLm11bHRpUGFuZWwuY3VycmVudFZhbHVlIT09YS5tdWx0aVBhbmVsLnByZXZpb3VzVmFsdWUmJnRoaXMuc2V0QWNjb3JkaW9uU3Ry'@;
put 'YXRlZ3koKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRPTUNoYW5nZXMoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldEFjY29yZGlvblN0cmF0ZWd5KCl7dGhp'@;
put 'cy5hY2NvcmRpb25TZXJ2aWNlLnNldFN0cmF0ZWd5KHRoaXMubXVsdGlQYW5lbD9UYi5NdWx0aTpUYi5EZWZhdWx0KX1saXN0ZW5Gb3JET01DaGFuZ2VzKCl7cmV0dXJuIHRoaXMucGFuZWxzLmNoYW5nZXMucGlwZShaNSh0aGlzLnBhbmVscykpLnN1YnNjcmliZShhPT50aGlzLmFjY29yZGlv'@;
put 'blNlcnZpY2UudXBkYXRlUGFuZWxPcmRlcihhLnRvQXJyYXkoKS5tYXAoZD0+ZC5pZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRGIpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbiJdXSxj'@;
put 'b250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLExFLDQpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQucGFuZWxzPWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJjbHItYWNjb3JkaW9uIiwhMCl9LGlucHV0czp7bXVs'@;
put 'dGlQYW5lbDpbUW4uTm9uZSwiY2xyQWNjb3JkaW9uTXVsdGlQYW5lbCIsIm11bHRpUGFuZWwiXX0sZmVhdHVyZXM6W0dpKFtEYl0pLEJhXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLE9yKDApKX0sZW5jYXBz'@;
put 'dWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksZm5lPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxb'@;
put 'ImNsci1zdGVwLWNvbnRlbnQiXV0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLHBuZT0oKCk9PntjbGFzcyBje31yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFjY29yZGlvbi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm'@;
put 'JmJyKCJjbHItYWNjb3JkaW9uLXRpdGxlIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksT3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSx4Nz0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEsdGhpcy5fY2hvY29sYXRlPW5ldyBubn1nZXQgY2hvY29sYXRlKCl7cmV0dXJuIHRoaXMuX2Nob2NvbGF0ZS5hc09ic2VydmFibGUoKX1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLmRpc2FibGVDaG9jb2xh'@;
put 'dGVDaGVja3x8dGhpcy5fY2hvY29sYXRlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmN9KSxjfSkoKSxrNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zdWJzY3JpcHRpb249'@;
put 'ZC5jaG9jb2xhdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5sYXRlc3RGbGF2b3IhPT10aGlzLmZsYXZvciYmKGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSEwLGEuZGV0ZWN0Q2hhbmdlcygpLGQuZGlzYWJsZUNob2NvbGF0ZUNoZWNrPSExKX0pfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMu'@;
put 'bGF0ZXN0Rmxhdm9yPXRoaXMuZmxhdm9yfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRmEpLHN0KHg3KSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmN9KSxjfSko'@;
put 'KSxsTj0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeDd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPWlhKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1d'@;
put 'LGZlYXR1cmVzOltzb119KSxjfSkoKSxtbmU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGs3e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1hY2NvcmRpb24tcGFuZWwgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgY2xyLWFjY29yZGlvbiIpO3N1cGVy'@;
put 'KGEsZCksdGhpcy5leHBhbmQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuZXhwYW5kLmV4cGFuZGVkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChGYSksc3QobE4sOCksc3QoTDApKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siY2xyLWFjY29yZGlvbi1wYW5lbCJdXSxmZWF0dXJlczpbc29dfSksY30pKCksZ25lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhnNyxXZCxHZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v'@;
put 'ZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhXX0pLGN9KSgpLEJFZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtp'@;
put 'bXBvcnRzOlttbyxiYSxnbmUsZ25lXX0pLGN9KSgpO3ZhciBrbz1mdW5jdGlvbihjKXtyZXR1cm4gYy5BcnJvd0xlZnQ9IkFycm93TGVmdCIsYy5BcnJvd1VwPSJBcnJvd1VwIixjLkFycm93UmlnaHQ9IkFycm93UmlnaHQiLGMuQXJyb3dEb3duPSJBcnJvd0Rvd24iLGMuQmFja3NwYWNlPSJC'@;
put 'YWNrc3BhY2UiLGMuVGFiPSJUYWIiLGMuRW50ZXI9IkVudGVyIixjLkVzY2FwZT0iRXNjYXBlIixjLlNwYWNlPSJTcGFjZSIsYy5TcGFjZWJhcj0iICIsYy5Ib21lPSJIb21lIixjLkVuZD0iRW5kIixjfShrb3x8e30pLHBnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFy'@;
put 'cm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdodCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShwZ3x8e30pO2Z1bmN0aW9uIHFkKGMpe3JldHVybiBjPT09a28uQXJyb3dVcHx8Yz09PXBnLkFycm93VXA/a28uQXJyb3dVcDpj'@;
put 'PT09a28uQXJyb3dEb3dufHxjPT09cGcuQXJyb3dEb3duP2tvLkFycm93RG93bjpjPT09a28uQXJyb3dSaWdodHx8Yz09PXBnLkFycm93UmlnaHQ/a28uQXJyb3dSaWdodDpjPT09a28uQXJyb3dMZWZ0fHxjPT09cGcuQXJyb3dMZWZ0P2tvLkFycm93TGVmdDpjPT09a28uU3BhY2V8fGM9PT1w'@;
put 'Zy5TcGFjZT9rby5TcGFjZTpjPT09a28uRXNjYXBlfHxjPT09cGcuRXNjYXBlP2tvLkVzY2FwZTpjfWZ1bmN0aW9uIGROKGMpe2NvbnN0IGw9cWQoYy5rZXkpOyhsPT09a28uQXJyb3dVcHx8bD09PWtvLkFycm93RG93bnx8bD09PWtvLkFycm93TGVmdHx8bD09PWtvLkFycm93UmlnaHQpJiZj'@;
put 'LnByZXZlbnREZWZhdWx0KCl9bGV0IERsPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IG5uLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgbm4sdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IG5uLHRoaXMuX3BvcG92ZXJWaXNp'@;
put 'YmxlPW5ldyBubn1nZXQgb3BlbkNoYW5nZSgpe3JldHVybiB0aGlzLl9vcGVuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3BvdmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5F'@;
put 'dmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5FdmVudD1hLHRoaXMuX29wZW5FdmVudENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5u'@;
put 'ZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVybiB0aGlzLl9vcGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09i'@;
put 'c2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7ZE4oYSksdGhpcy5vcGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9wb3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWdu'@;
put 'ZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTGI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1h'@;
put 'LHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9jdW1lbnQ9aCx0aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8o'@;
put 'dGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRkQ2xpY2tMaXN0ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPVFoKHRoaXMuZG9j'@;
put 'dW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlwZShIYSh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9w'@;
put 'ZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJlbW92ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7'@;
put 'dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2'@;
put 'aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9cmVtb3ZlQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRl'@;
put 'bGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikpfWFkZEVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlz'@;
put 'LnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVMaXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXImJih0aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQu'@;
put 'Zm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5jaG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQu'@;
put 'bG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1cm4hIWQuY2xhc3NMaXN0JiYhZC5jbGFzc0xpc3QuY29udGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNr'@;
put 'TGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3RlbmVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKGNzKSxmcihEbCksZnIoJHMpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxJ'@;
put 'Yj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7YS5hbmNob3JCdXR0b25SZWY9ZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoTGIpLHN0KCRpKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92'@;
put 'ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJjbHItYW5jaG9yIiwhMCl9fSksY30pKCkseW5lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNl'@;
put 'PWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5jbG9zZUNoYW5nZT1uZXcgSXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKEhhKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9'@;
put 'KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxl'@;
put 'bWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCgkaSks'@;
put 'c3QoTGIpLHN0KERsKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVD'@;
put 'bGljayhmKX0pLDImYSYmYnIoImNsci1zbWFydC1jbG9zZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgbzA9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJ'@;
put 'Wk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShvMHx8e30pLFVzPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KFVzfHx7fSksUmI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09'@;
put 'IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oUmJ8fHt9KTtjb25zdCBCND1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSwkMz0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8'@;
put 'YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24gRTcoYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gb2QoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9Ym5lKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztj'@;
put 'YXNlIDE6ZCs9Ym5lKGMsbCxhKSxoKz1sLmhlaWdodDticmVhaztjYXNlIDA6ZC09YS53aWR0aCxoKz13bmUoYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPXduZShjLGwsYSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0Omh9fWZ1bmN0aW9uIGJuZShjLGwsYSl7bGV0IGQ9MDtz'@;
put 'd2l0Y2goYy5hbmNob3Ipe2Nhc2UgVXMuU1RBUlQ6YnJlYWs7Y2FzZSBVcy5DRU5URVI6ZCs9bC53aWR0aC8yO2JyZWFrO2Nhc2UgVXMuRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBVcy5TVEFSVDpicmVhaztjYXNlIFVzLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7'@;
put 'Y2FzZSBVcy5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1mdW5jdGlvbiB3bmUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIFVzLlNUQVJUOmJyZWFrO2Nhc2UgVXMuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBVcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMu'@;
put 'Y29udGVudCl7Y2FzZSBVcy5TVEFSVDpicmVhaztjYXNlIFVzLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgVXMuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBNbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0'@;
put 'Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcgbm4sdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudChhKXtpZighbGEodGhpcy5wbGF0Zm9ybUlk'@;
put 'KSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGlu'@;
put 'Z0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRzPW9kKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IGQ9ZnVuY3Rpb24gekVlKGMsbCl7Y29uc3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWln'@;
put 'aHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9mZnNldCtsLndpZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8fGEucHVzaChSYi5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKFJiLkxFRlQpLGRfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu'@;
put 'Y2xpZW50SGVpZ2h0KXx8YS5wdXNoKFJiLkJPVFRPTSksZF9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1c2goUmIuUklHSFQpLGF9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jk'@;
put 'cyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVybiAxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PW8wLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09bzAuSE9SSVpP'@;
put 'TlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25lVmlvbGF0aW9uKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09bzAuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlz'@;
put 'PT09bzAuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0'@;
put 'aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xh'@;
put 'dGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0aGlzLmNvbnRlbnRPZmZzZXRzPW9kKEI0KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz1vZCh0aGlz'@;
put 'LnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9b2QoJDMo'@;
put 'dGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9RTcoQjQsJDMsITApO3RoaXMuY29udGVudE9mZnNldHM9'@;
put 'b2QoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPUU3KEI0LCQzLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPW9kKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9y'@;
put 'Q29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZD1FNyhCNCwkMywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1vZChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJl'@;
put 'bnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2NvbnN0IGQ9RTcoQjQsJDMsITEpO3RoaXMuY29udGVudE9mZnNldHM9b2QoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9u'@;
put 'dGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPW9kKEI0KHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50'@;
put 'T2Zmc2V0cz1vZCgkMyh0aGlzLnBvc2l0aW9uLCEwKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9b2QoJDModGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRo'@;
put 'aXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVIb3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9RTcoQjQsJDMsITEpO3RoaXMuY29udGVudE9mZnNldHM9b2QoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNo'@;
put 'b3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZD1FNyhCNCwkMywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz1vZChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0'@;
put 'aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihMYiksZnIoQW8pKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxPYj0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixULFkpe3RoaXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPVQsdGhpcy5zbWFydE9wZW5T'@;
put 'ZXJ2aWNlPVksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMuY2hlY2tDb2xsZWN0b3I9bmV3IElyfXNldCBvcGVuKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuPSEhYX1zZXQgY29udGVu'@;
put 'dEF0KGEpe3RoaXMuc21hcnRQb3NpdGlvblNlcnZpY2UucG9zaXRpb249YX1zZXQgb3V0c2lkZUNsaWNrQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uub3V0c2lkZUNsaWNrQ2xvc2U9ISFhfXNldCBzY3JvbGxUb0Nsb3NlKGEpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLnNjcm9s'@;
put 'bFRvQ2xvc2U9ISFhfW5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpe3RoaXMuc21hcnRPcGVuU2VydmljZS5vcGVuJiZ0aGlzLnZpZXcmJnRoaXMuc2hvdWxkUmVhbGlnbiYmdGhpcy5jaGVja0NvbGxlY3Rvci5lbWl0KCl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2go'@;
put 'dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0h'@;
put 'MH0pLHRoaXMuY2hlY2tDb2xsZWN0b3IucGlwZShzZygwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIp'@;
put 'LHRoaXMuc21hcnRPcGVuU2VydmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRh'@;
put 'aW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJl'@;
put 'ci5zZXRTdHlsZShhLCJ0b3AiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9'@;
put 'Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3BlbkV2ZW50PWR9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZp'@;
put 'ZXcmJih0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVu'@;
put 'dC5ib2R5LGEpKSx0aGlzLmNvbnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2Vydmlj'@;
put 'ZS5hbGlnbkNvbnRlbnQodGhpcy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke2EueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7'@;
put 'YS54T2Zmc2V0fXB4YCksdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoJHMpLHN0KHBzKSxzdCh0bCksc3QoY3MpLHN0KE1uZSks'@;
put 'c3QoTGIpLHN0KERsKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbUW4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0OltRbi5Ob25lLCJjbHJQb3BvdmVyQ29udGVu'@;
put 'dEF0IiwiY29udGVudEF0Il0sb3V0c2lkZUNsaWNrQ2xvc2U6W1FuLk5vbmUsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbUW4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Ny'@;
put 'b2xsVG9DbG9zZSJdfX0pLGN9KSgpLFBiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xvc2VDaGFuZ2U9bmV3IElyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnNtYXJ0T3Bl'@;
put 'blNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e3RoaXMub3BlbkNsb3NlQ2hhbmdlLm5leHQoZCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9'@;
put 'PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KERsKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiXV0saG9zdFZhcnM6Mixob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQuaGFuZGxlQ2xpY2soZil9KSwyJmEmJmJyKCJjbHItc21hcnQtb3Blbi1jbG9zZSIsITApfSxvdXRwdXRzOntvcGVuQ2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPcGVuQ2xvc2VDaGFuZ2UifX0p'@;
put 'LGN9KSgpLEZiPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe30pLGN9KSgpO3ZhciBzZD1mdW5jdGlvbihjKXtyZXR1cm4gYy5VUD0idXAiLGMuRE9X'@;
put 'Tj0iZG93biIsYy5MRUZUPSJsZWZ0IixjLlJJR0hUPSJyaWdodCIsY30oc2R8fHt9KTtsZXQgd2Y9Y2xhc3N7Y29uc3RydWN0b3IobCl7dGhpcy5yZW5kZXJlcj1sLHRoaXMuX3VubGlzdGVuRnVuY3M9W119Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1yZXNldChsKXt0aGlz'@;
put 'Ll9jdXJyZW50PWx9bGlzdGVuVG9BcnJvd0tleXMobCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uYXJyb3d1cCIsKCk9PiF0aGlzLm1vdmUoc2QuVVApKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlz'@;
put 'dGVuKGwsImtleWRvd24uYXJyb3dkb3duIiwoKT0+IXRoaXMubW92ZShzZC5ET1dOKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93bGVmdCIsKCk9PiF0aGlzLm1vdmUoc2QuTEVGVCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNz'@;
put 'LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd3JpZ2h0IiwoKT0+IXRoaXMubW92ZShzZC5SSUdIVCkpKX1yZWdpc3RlckNvbnRhaW5lcihsLGE9IjAiKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsLCJ0YWJpbmRleCIsYSksdGhpcy5saXN0ZW5Ub0Fycm93'@;
put 'S2V5cyhsKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5zcGFjZSIsKCk9PiF0aGlzLmFjdGl2YXRlQ3VycmVudCgpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uZW50ZXIi'@;
put 'LCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpfW1vdmVUbyhsKXt2b2lkIDAhPT1sJiYodGhpcy5jdXJyZW50JiZ0aGlzLmN1cnJlbnQuYmx1cigpLGwuZm9jdXMoKSx0aGlzLl9jdXJyZW50PWwpfW1vdmUobCl7bGV0IGE9ITE7aWYodGhpcy5jdXJyZW50KXtjb25zdCBkPXRoaXMuY3Vy'@;
put 'cmVudFtsXTtkJiYocVAoZCk/ZDpObyhkKSkuc3Vic2NyaWJlKGY9PntmJiYodGhpcy5tb3ZlVG8oZiksYT0hMCl9KX1yZXR1cm4gYX1hY3RpdmF0ZUN1cnJlbnQoKXtyZXR1cm4hKCF0aGlzLmN1cnJlbnR8fCF0aGlzLmN1cnJlbnQuYWN0aXZhdGV8fCh0aGlzLmN1cnJlbnQuYWN0aXZhdGUo'@;
put 'KSwwKSl9ZGV0YWNoTGlzdGVuZXJzKCl7dGhpcy5fdW5saXN0ZW5GdW5jcy5mb3JFYWNoKGw9PmwoKSl9fTt3Zi5cdTAyNzVmYWM9ZnVuY3Rpb24obCl7cmV0dXJuIG5ldyhsfHx3ZikoZnIoY3MpKX0sd2YuXHUwMjc1cHJvdj1scih7dG9rZW46d2YsZmFjdG9yeTp3Zi5cdTAyNzVmYWN9KTtj'@;
put 'b25zdCB4bmU9e3Byb3ZpZGU6d2YsdXNlRmFjdG9yeTpmdW5jdGlvbiBVRWUoYyxsKXtyZXR1cm4gY3x8bmV3IHdmKGwpfSxkZXBzOltbbmV3IEx1LG5ldyBidSx3Zl0sY3NdfTt2YXIgS2Q9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CRUZPUkU9LTFdPSJCRUZPUkUiLGNbYy5BRlRFUj0xXT0i'@;
put 'QUZURVIiLGN9KEtkfHx7fSk7Y2xhc3MgbTF7fW0xWyJ0b3AtcmlnaHQiXT17YXhpczpvMC5WRVJUSUNBTCxzaWRlOktkLkJFRk9SRSxhbmNob3I6VXMuRU5ELGNvbnRlbnQ6VXMuRU5EfSxtMVsidG9wLWxlZnQiXT17YXhpczpvMC5WRVJUSUNBTCxzaWRlOktkLkJFRk9SRSxhbmNob3I6VXMu'@;
put 'U1RBUlQsY29udGVudDpVcy5TVEFSVH0sbTFbImJvdHRvbS1yaWdodCJdPXtheGlzOm8wLlZFUlRJQ0FMLHNpZGU6S2QuQUZURVIsYW5jaG9yOlVzLkVORCxjb250ZW50OlVzLkVORH0sbTFbImJvdHRvbS1sZWZ0Il09e2F4aXM6bzAuVkVSVElDQUwsc2lkZTpLZC5BRlRFUixhbmNob3I6VXMu'@;
put 'U1RBUlQsY29udGVudDpVcy5TVEFSVH0sbTFbInJpZ2h0LXRvcCJdPXtheGlzOm8wLkhPUklaT05UQUwsc2lkZTpLZC5BRlRFUixhbmNob3I6VXMuQ0VOVEVSLGNvbnRlbnQ6VXMuRU5EfSxtMVsicmlnaHQtYm90dG9tIl09e2F4aXM6bzAuSE9SSVpPTlRBTCxzaWRlOktkLkFGVEVSLGFuY2hv'@;
put 'cjpVcy5TVEFSVCxjb250ZW50OlVzLlNUQVJUfSxtMVsibGVmdC10b3AiXT17YXhpczpvMC5IT1JJWk9OVEFMLHNpZGU6S2QuQkVGT1JFLGFuY2hvcjpVcy5DRU5URVIsY29udGVudDpVcy5FTkR9LG0xWyJsZWZ0LWJvdHRvbSJdPXtheGlzOm8wLkhPUklaT05UQUwsc2lkZTpLZC5CRUZPUkUs'@;
put 'YW5jaG9yOlVzLlNUQVJULGNvbnRlbnQ6VXMuU1RBUlR9O2NvbnN0IElFPW5ldyBZcigiUE9QT1ZFUl9IT1NUX0FOQ0hPUiIpO2xldCBaRWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLmxhc3RPcGVuQ2hhbmdlPW51bGx9bmdPbkluaXQo'@;
put 'KXt0aGlzLnN1YnNjcmlwdGlvbj10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMubGFzdE9wZW5DaGFuZ2U9YX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9b25Fc2NhcGVLZXkoYSl7bnVsbCE9PXRoaXMubGFz'@;
put 'dE9wZW5DaGFuZ2UmJighMT09PXRoaXMubGFzdE9wZW5DaGFuZ2UmJmEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRGwpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6'@;
put 'Yyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJrZXl1cC5lc2NhcGUiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRXNjYXBlS2V5KGYpfSl9LHN0YW5kYWxvbmU6ITB9KSxjfSkoKSxxMz0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltHaShbRGwsTGIsTW5lLHtwcm92aWRlOklFLHVzZUV4aXN0aW5nOiRpfV0pLFh1KFtaRWVdKV19KSxjfSkoKTtjbGFzcyBmTntzdGF0aWMgbGlua1BhcmVudChsLGEsZCl7bC5mb3JF'@;
put 'YWNoKGg9PmhbZF09YSl9c3RhdGljIGxpbmtWZXJ0aWNhbChsLGE9ITApe2wuZm9yRWFjaCgoZCxoKT0+e2g+MCYmKGQudXA9bFtoLTFdKSxoPGwubGVuZ3RoLTEmJihkLmRvd249bFtoKzFdKX0pLGEmJmwubGVuZ3RoPjEmJihsWzBdLnVwPWxbbC5sZW5ndGgtMV0sbFtsLmxlbmd0aC0xXS5k'@;
put 'b3duPWxbMF0pfX1sZXQgSzM9KCgpPT57Y2xhc3MgY3t1c2VyRGVmaW5lZFdpZHRoKGEpe2EuY2xhc3NMaXN0LmFkZCgiZGF0YWdyaWQtY2VsbC13aWR0aC16ZXJvIik7Y29uc3QgZD10aGlzLmNsaWVudFJlY3QoYSkud2lkdGg7cmV0dXJuIGEuY2xhc3NMaXN0LnJlbW92ZSgiZGF0YWdyaWQt'@;
put 'Y2VsbC13aWR0aC16ZXJvIiksZH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0eWxlKGEp'@;
put 'LmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5sZWZ0LDEwKSxy'@;
put 'aWdodDpwYXJzZUludChkLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgiKSwxMCl9'@;
put 'Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbGVt'@;
put 'ZW50PWEsdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5zdGFydEhlaWdodD0wfWdldCBleHBhbmRBbmltYXRpb24oKXtyZXR1cm57dmFsdWU6dGhpcy5jbHJFeHBhbmRUcmlnZ2VyLHBhcmFtczp7c3RhcnRIZWlnaHQ6dGhpcy5zdGFydEhlaWdodH19fWFuaW1hdGlvbkRvbmUoKXt0aGlzLnVwZGF0'@;
put 'ZVN0YXJ0SGVpZ2h0KCl9dXBkYXRlU3RhcnRIZWlnaHQoKXt0aGlzLnN0YXJ0SGVpZ2h0PXRoaXMuZG9tQWRhcHRlci5jb21wdXRlZEhlaWdodCh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCl8fDB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0'@;
put 'KCRpKSxzdChLMykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJiRPKCJAZXhwYW5kQW5pbWF0aW9uLmRvbmUiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGQuYW5pbWF0aW9uRG9uZSgpfSksMiZhJiZaTygiQGV4cGFuZEFuaW1hdGlvbiIsZC5leHBhbmRBbmltYXRpb24pfSxpbnB1dHM6e2NsckV4cGFuZFRyaWdnZXI6ImNsckV4cGFuZFRyaWdnZXIifSxmZWF0dXJlczpbR2koW0szXSldLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoxLHZh'@;
put 'cnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksT3IoMCkpfSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7b3ZlcmZsb3c6aGlkZGVufSJdLGRhdGE6e2FuaW1hdGlvbjpbaWQoImV4cGFuZEFuaW1hdGlvbiIsW0djKCJ0cnVlIDw9PiBmYWxzZSIs'@;
put 'W0lzKHtoZWlnaHQ6Int7c3RhcnRIZWlnaHR9fXB4In0pLG4wKCIwLjJzIGVhc2UtaW4tb3V0IixJcyh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLGN9KSgpLHBOPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1v'@;
put 'ZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vXX0pLGN9KSgpLFdFZT0wO2NvbnN0IEQ3PW5ldyBZcigiSUZfQUNUSVZFX0lEIiksJEVlPXtwcm92aWRlOkQ3LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gR0VlKCl7cmV0dXJuKytXRWV9fTtsZXQgbWc9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2N1cnJlbnRDaGFuZ2U9bmV3IG5ufWdldCBjdXJyZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJy'@;
put 'ZW50IT09YSYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoYSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxBNz0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLmNvbnRhaW5lcj1mLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBJcighMSksdGhpcy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZp'@;
put 'ZXcoYS5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50Q2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcodil9KX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlz'@;
put 'LmlkfXNldCBhY3RpdmUoYSl7YSYmKHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXVwZGF0ZVZpZXcoYSl7YT90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1w'@;
put 'bGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKX1jaGVja0FuZFVwZGF0ZVZpZXcoYSl7Y29uc3QgZD1hPT09dGhpcy5pZDtkIT09dGhpcy53YXNBY3RpdmUmJih0aGlzLnVwZGF0ZVZpZXcoZCksdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChkKSx0aGlzLndhc0FjdGl2ZT1kKX19cmV0dXJuIGMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QobWcpLHN0KEQ3KSxzdCh0bCksc3QocHMpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZBY3RpdmUiLCIiXV0saW5wdXRzOnthY3RpdmU6W1FuLk5vbmUsImNscklmQWN0aXZlIiwi'@;
put 'YWN0aXZlIl19LG91dHB1dHM6e2FjdGl2ZUNoYW5nZToiY2xySWZBY3RpdmVDaGFuZ2UifX0pLGN9KSgpLFhkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudGVtcGxhdGU9ZCx0aGlzLmNvbnRhaW5lcj1oLHRoaXMub3BlbkNoYW5n'@;
put 'ZT1uZXcgSXIoITEpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGYpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0'@;
put 'IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVh'@;
put 'cigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChEbCksc3QodGwpLHN0KHBzKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46W1FuLk5vbmUsImNscklmT3BlbiIs'@;
put 'Im9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxrbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5leHBh'@;
put 'bmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBJcighMCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godi5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENo'@;
put 'YW5nZS5lbWl0KHRoaXMuZXhwYW5kLmV4cGFuZGVkKX0pKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5fZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpeyJib29sZWFuIj09dHlwZW9mIGEmJih0aGlzLmV4cGFuZC5leHBhbmRlZD1hLHRoaXMuX2V4cGFuZGVkPWEpfW5nT25Jbml0KCl7dGhp'@;
put 'cy5leHBhbmQuZXhwYW5kYWJsZSsrLHRoaXMudXBkYXRlVmlldygpfW5nT25EZXN0cm95KCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZS0tLHRoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXVwZGF0ZVZpZXcoKXtpZighdGhpcy5leHBhbmQuZXhwYW5kZWR8'@;
put 'fDA9PT10aGlzLmNvbnRhaW5lci5sZW5ndGgpaWYodGhpcy50ZW1wbGF0ZSl0aGlzLmV4cGFuZC5leHBhbmRlZD90aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSk6dGhpcy5jb250YWluZXIuY2xlYXIoKTtlbHNlIHRyeXt0aGlzLnJlbmRlcmVyLnNldFN0'@;
put 'eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzcGxheSIsdGhpcy5leHBhbmQuZXhwYW5kZWQ/bnVsbDoibm9uZSIpfWNhdGNoe319fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHRsLDgpLHN0KHBzKSxzdCgkaSksc3QoY3MpLHN0KEwwKSl9'@;
put 'LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmRXhwYW5kZWQiLCIiXV0saW5wdXRzOntleHBhbmRlZDpbUW4uTm9uZSwiY2xySWZFeHBhbmRlZCIsImV4cGFuZGVkIl19LG91dHB1dHM6e2V4cGFuZGVkQ2hhbmdlOiJjbHJJZkV4cGFuZGVkQ2hhbmdlIn19KSxj'@;
put 'fSkoKSxKZD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttb119KSxjfSkoKTtjb25zdCBxRWU9e3Byb3ZpZGU6bmV3IFlyKCJGT0NV'@;
put 'U19PTl9WSUVXX0lOSVQiKSx1c2VWYWx1ZTohMH07bGV0IE9FPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe3Byb3ZpZGVyczpbcUVlXSxpbXBvcnRz'@;
put 'Olttb119KSxjfSkoKSxYRWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sYmEsRmJdfSksY30pKCksbzI9KCgpPT57Y2xhc3Mg'@;
put 'Y3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5jbHJMb2FkaW5nQ2hhbmdlPW5ldyBJcighMSksdGhpcy5idXR0b25TdGF0ZT1BMCx0aGlzLnN0YXRlPUEwLkRFRkFVTFR9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe2lmKGEhPT10aGlzLnN0YXRlKXtzd2l0'@;
put 'Y2godGhpcy5zdGF0ZT1hLGEpe2Nhc2UgQTAuREVGQVVMVDp0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiKSx0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidHJhbnNmb3JtIiksdGhpcy5kaXNhYmxl'@;
put 'ZHx8dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIpO2JyZWFrO2Nhc2UgQTAuTE9BRElORzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwi'@;
put 'dHJhbnNmb3JtIiwidHJhbnNsYXRleigwKSIpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGlzYWJsZWQiLCIiKTticmVhaztjYXNlIEEwLlNVQ0NFU1M6dGhpcy5zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCk7YnJlYWs7Y2FzZSBBMC5FUlJPUjp0'@;
put 'aGlzLmxvYWRpbmdTdGF0ZUNoYW5nZShBMC5ERUZBVUxUKX10aGlzLmNsckxvYWRpbmdDaGFuZ2UuZW1pdChhKX19c2V0RXhwbGljaXRCdXR0b25XaWR0aCgpe2lmKHRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCl7Y29u'@;
put 'c3QgYT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksZD1NYXRoLm1heCg0MixhLndpZHRoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLGAke2R9cHhgKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KCRpKSxzdChjcykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJidXR0b24iLCJjbHJMb2FkaW5nIiwiIl1dLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZocigiZGlzYWJsZWQiLGQuZGlzYWJs'@;
put 'ZWQ/IiI6bnVsbCl9LGlucHV0czp7ZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7Y2xyTG9hZGluZ0NoYW5nZToiY2xyTG9hZGluZ0NoYW5nZSJ9LGZlYXR1cmVzOltHaShbe3Byb3ZpZGU6RWIsdXNlRXhpc3Rpbmc6Y31dKV0sYXR0cnM6c0NlLG5nQ29udGVudFNlbGVjdG9yczpabyxk'@;
put 'ZWNsczo0LHZhcnM6NSxjb25zdHM6W1szLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbImNsYXNzIiwiY2xyLWxvYWRpbmctYnRuLWNvbnRlbnQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5s'@;
put 'aW5lIiwic3Bpbm5lci1jaGVjayJdLFsxLCJjbHItbG9hZGluZy1idG4tY29udGVudCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksZ2UoMCwic3BhbiIsMCksYnQoMSxhQ2UsMiwxLCJuZy1jb250YWluZXIiLDEpKDIsbENlLDIsMSwibmctY29udGFpbmVyIiwxKSgzLGND'@;
put 'ZSwyLDEsInNwYW4iLDIpLGJlKCkpLDImYSYmKFBlKCJAcGFyZW50Iix2b2lkIDApKCJuZ1N3aXRjaCIsZC5zdGF0ZSksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLkxPQURJTkcpLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5TVUNDRVNTKSx3ZSgp'@;
put 'LFBlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuREVGQVVMVCkpfSxkZXBlbmRlbmNpZXM6W1VkLGNmXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOltpZCgicGFyZW50IixbR2MoIjplbnRlciIsW10pXSksaWQoImRlZmF1bHRCdXR0b24iLFtHYygiOmVudGVyIixbSXMo'@;
put 'e29wYWNpdHk6MH0pLG4wKCIyMDBtcyAxMDBtcyBlYXNlLWluIixJcyh7b3BhY2l0eToxfSkpXSksR2MoIjpsZWF2ZSIsW0lzKHtvcGFjaXR5OjB9KV0pXSksaWQoInNwaW5uZXIiLFtHYygiOmVudGVyIixbSXMoe29wYWNpdHk6MH0pLG4wKCIyMDBtcyAxMDBtcyBlYXNlLWluIixJcyh7b3Bh'@;
put 'Y2l0eToxfSkpXSksR2MoIjpsZWF2ZSIsW0lzKHtvcGFjaXR5OjF9KSxuMCgiMTAwbXMgZWFzZS1vdXQiLElzKHtvcGFjaXR5OjB9KSldKV0pLGlkKCJ2YWxpZGF0ZWQiLFtHYygiOmVudGVyIixbbjAoIjYwMG1zIix0YmUoW0lzKHt0cmFuc2Zvcm06InNjYWxlKDAsMCkiLG9mZnNldDowfSks'@;
put 'SXMoe29wYWNpdHk6MSxvZmZzZXQ6LjJ9KSxJcyh7dHJhbnNmb3JtOiJzY2FsZSgxLjIsMS4yKSIsb2Zmc2V0Oi40fSksSXMoe3RyYW5zZm9ybToic2NhbGUoLjksLjkpIixvZmZzZXQ6LjZ9KSxJcyh7dHJhbnNmb3JtOiJzY2FsZSgxLDEpIixvZmZzZXQ6MX0pXSkpXSksR2MoIjpsZWF2ZSIs'@;
put 'W0lzKHtvcGFjaXR5OjF9KSxuMCgiMTAwbXMgZWFzZS1vdXQiLElzKHtvcGFjaXR5OjB9KSldKV0pXX19KSxjfSkoKSxRRWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1'@;
put 'MDI3NWluaj1faSh7aW1wb3J0czpbbW9dfSksY30pKCksZVRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhrZWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1'@;
put 'aW5qPV9pKHtpbXBvcnRzOltRRWUsWEVlXX0pLGN9KSgpLHRUZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGRlY2xzOjAsdmFy'@;
put 'czowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7fSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQRT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHt9KSxj'@;
put 'fSkoKSxuVGU9MCxRZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9ImNsci1mb3JtLWNvbnRyb2wtIisgKytuVGUsdGhpcy5faWRDaGFuZ2U9bmV3IEFyKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRD'@;
put 'aGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9'@;
put 'KSgpLHJUZT0wLGdnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD0iY2xyLWZvcm0tY29udGFpbmVyLSIrICsrclRlLHRoaXMuX2lkQ2hhbmdlPW5ldyBBcih0aGlzLl9pZCl9Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkfXNldCBpZChhKXt0aGlzLl9pZD1hLHRoaXMuX2lk'@;
put 'Q2hhbmdlLm5leHQoYSl9Z2V0IGlkQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2lkQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxj'@;
put 'fSkoKTtsZXQgbU49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuY29udHJvbElkU2VydmljZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9ImFic3RyYWN0In1nZXQgaWQoKXtyZXR1cm4gdGhpcy5jb250YWluZXJJZFNlcnZpY2U/'@;
put 'YCR7dGhpcy5jb250YWluZXJJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDp0aGlzLmNvbnRyb2xJZFNlcnZpY2U/YCR7dGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkfS0ke3RoaXMuY29udHJvbElkU3VmZml4fWA6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yykoc3QoUWQsOCksc3QoZ2csOCkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjfSksY30pKCksaVRlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBtTntjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWlu'@;
put 'ZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iZXJyb3IifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChRZCw4KSxzdChnZyw4KSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWVycm9y'@;
put 'Il1dLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImlkIixkLmlkKSxicigiY2xyLXN1YnRleHQiLCEwKSgiZXJyb3IiLCEwKSl9LGZlYXR1cmVzOltzb10sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u'@;
put 'KGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGdOPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBtTntjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRy'@;
put 'b2xJZFN1ZmZpeD0iaGVscGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoUWQsOCksc3QoZ2csOCkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY29udHJvbC1oZWxwZXIiXV0saG9zdFZhcnM6Myxob3N0Qmlu'@;
put 'ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiaWQiLGQuaWQpLGJyKCJjbHItc3VidGV4dCIsITApKX0sZmVhdHVyZXM6W3NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLE9yKDApKX0sZW5jYXBzdWxh'@;
put 'dGlvbjoyfSksY30pKCksZzE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NvbnRyb2xDaGFuZ2VzPW5ldyBubix0aGlzLl9oZWxwZXJzPW5ldyBubn1nZXQgY29udHJvbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY29udHJvbENoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IGhl'@;
put 'bHBlcnNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5faGVscGVycy5hc09ic2VydmFibGUoKX1zZXRDb250cm9sKGEpe3RoaXMuX2NvbnRyb2xDaGFuZ2VzLm5leHQoYSl9c2V0SGVscGVycyhhKXt0aGlzLl9oZWxwZXJzLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBzMj1mdW5jdGlvbihjKXtyZXR1cm4gYy5OT05FPSJOT05FIixjLlZBTElEPSJWQUxJRCIsYy5JTlZBTElEPSJJTlZBTElEIixjfShzMnx8e30pO2xldCBlaD0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubmdDb250cm9sU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdGF0dXNDaGFuZ2VzPW5ldyBBcihzMi5OT05FKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5n'@;
put 'ZXMuc3Vic2NyaWJlKGQ9PntkJiYodGhpcy5jb250cm9sPWQsdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlKCl9KSkpfSkpfWdldCBzdGF0dXNDaGFuZ2VzKCl7cmV0dXJuIHRo'@;
put 'aXMuX3N0YXR1c0NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRyaWdnZXJTdGF0dXNDaGFuZ2UoKXtpZih0aGlzLmNvbnRyb2wpe2NvbnN0IGE9czJbdGhpcy5jb250cm9sLnN0YXR1c107'@;
put 'dGhpcy5fc3RhdHVzQ2hhbmdlcy5uZXh0KFsiVkFMSUQiLCJJTlZBTElEIl0uaW5jbHVkZXMoYSk/YTpzMi5OT05FKX19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKGcxKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUw'@;
put 'Mjc1ZmFjfSksY30pKCk7dmFyIF9nPWZ1bmN0aW9uKGMpe3JldHVybiBjLlZFUlRJQ0FMPSJ2ZXJ0aWNhbCIsYy5IT1JJWk9OVEFMPSJob3Jpem9udGFsIixjLkNPTVBBQ1Q9ImNvbXBhY3QiLGN9KF9nfHx7fSk7bGV0IFgzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm1pbkxh'@;
put 'YmVsU2l6ZT0xLHRoaXMubWF4TGFiZWxTaXplPTEyLHRoaXMubGF5b3V0PV9nLkhPUklaT05UQUwsdGhpcy5sYXlvdXRWYWx1ZXM9T2JqZWN0LmtleXMoX2cpLm1hcChhPT5fZ1thXSksdGhpcy5fbGFiZWxTaXplPTJ9Z2V0IGxhYmVsU2l6ZSgpe3JldHVybiB0aGlzLl9sYWJlbFNpemV9c2V0'@;
put 'IGxhYmVsU2l6ZShhKXt0aGlzLmxhYmVsU2l6ZUlzVmFsaWQoYSkmJih0aGlzLl9sYWJlbFNpemU9YSl9Z2V0IGxheW91dENsYXNzKCl7cmV0dXJuYGNsci1mb3JtLSR7dGhpcy5sYXlvdXR9YH1pc1ZlcnRpY2FsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09X2cuVkVSVElDQUx9aXNIb3Jpem9u'@;
put 'dGFsKCl7cmV0dXJuIHRoaXMubGF5b3V0PT09X2cuSE9SSVpPTlRBTH1pc0NvbXBhY3QoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1fZy5DT01QQUNUfWlzVmFsaWQoYSl7cmV0dXJuIHRoaXMubGF5b3V0VmFsdWVzLmluZGV4T2YoYSk+LTF9bGFiZWxTaXplSXNWYWxpZChhKXtyZXR1cm4gTnVt'@;
put 'YmVyLmlzSW50ZWdlcihhKSYmYT49dGhpcy5taW5MYWJlbFNpemUmJmE8PXRoaXMubWF4TGFiZWxTaXplfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxY'@;
put 'cz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMuZWw9dix0aGlzLmVuYWJsZUdyaWQ9ITAsdGhpcy5zdWJzY3Jp'@;
put 'cHRpb25zPVtdfWdldCBsYWJlbFRleHQoKXtyZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnR9bmdPbkluaXQoKXsodGhpcy5jb250cm9sSWRTZXJ2aWNlfHx0aGlzLm5nQ29udHJvbFNlcnZpY2UpJiZ0aGlzLnJlbmRlcmVyLmFk'@;
put 'ZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbnRyb2wtbGFiZWwiKSx0aGlzLmVuYWJsZUdyaWQmJnRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50'@;
put 'LmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIik8MCYmKHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29sLTEyIiksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNl'@;
put 'cnZpY2UubGFiZWxTaXplfWApKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJiF0aGlzLmZvckF0dHImJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbElkU2VydmljZS5pZENoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5mb3JBdHRyPWEpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vi'@;
put 'c2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9ZGlzYWJsZUdyaWQoKXt0aGlzLmVuYWJsZUdyaWQ9ITF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFFkLDgpLHN0KFgzLDgpLHN0KGcxLDgpLHN0KGNzKSxzdCgkaSkpfSxj'@;
put 'Llx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJsYWJlbCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoImZvciIsZC5mb3JBdHRyKX0saW5wdXRzOntmb3JBdHRyOltRbi5Ob25lLCJmb3IiLCJmb3JBdHRyIl19fSksY30pKCksb1RlPSgo'@;
put 'KT0+e2NsYXNzIGMgZXh0ZW5kcyBtTntjb25zdHJ1Y3RvcihhLGQpe3N1cGVyKGEsZCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0ic3VjY2VzcyJ9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKHN0KFFkLDgpLHN0KGdnLDgpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtc3VjY2VzcyJdXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJpZCIsZC5pZCksYnIoImNsci1zdWJ0'@;
put 'ZXh0IiwhMCkoInN1Y2Nlc3MiLCEwKSl9LGZlYXR1cmVzOltzb10sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHRoPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5jbGFzc05hbWU9IiJ9Y29udHJvbENsYXNzKGE9czIuTk9ORSxkPSExLGg9IiIpe2NvbnN0IGY9W3RoaXMuY2xhc3NOYW1lLGhdO3N3aXRjaChhKXtjYXNlIHMyLlZBTElEOmYucHVzaCgiY2xyLXN1Y2Nlc3MiKTticmVhaztjYXNl'@;
put 'IHMyLklOVkFMSUQ6Zi5wdXNoKCJjbHItZXJyb3IiKX1yZXR1cm4gZCYmdGhpcy5sYXlvdXRTZXJ2aWNlJiYtMT09PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoImNsci1jb2wiKSYmZi5wdXNoKGBjbHItY29sLW1kLSR7dGhpcy5sYXlvdXRTZXJ2aWNlLm1heExhYmVsU2l6ZS10aGlzLmxheW91'@;
put 'dFNlcnZpY2UubGFiZWxTaXplfSBjbHItY29sLTEyYCksZi5qb2luKCIgIikudHJpbSgpfWluaXRDb250cm9sQ2xhc3MoYSxkKXtkJiZkLmNsYXNzTmFtZSYmKHRoaXMuY2xhc3NOYW1lPWQuY2xhc3NOYW1lLGQuY2xhc3NOYW1lLnNwbGl0KCIgIikuZm9yRWFjaChmPT57Zi5zdGFydHNXaXRo'@;
put 'KCJjbHItY29sIikmJmEucmVtb3ZlQ2xhc3MoZCxmKX0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoWDMsOCkpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEk3PSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9Zix0aGlzLl9keW5hbWljPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS5zdGF0dXNDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5zdGF0ZT12LHRoaXMudXBkYXRlSGVscGVycygpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9s'@;
put 'Q2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuY29udHJvbD12fSkpfWdldCBzaG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnR9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1zMi5WQUxJRCYmISF0aGlzLmNvbnRy'@;
put 'b2xTdWNjZXNzQ29tcG9uZW50fWdldCBzaG93SW52YWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1zMi5JTlZBTElEJiYhIXRoaXMuY29udHJvbEVycm9yQ29tcG9uZW50fWdldCB0b3VjaGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD8udG91Y2hlZH1uZ0FmdGVyQ29u'@;
put 'dGVudEluaXQoKXt0aGlzLnVwZGF0ZUhlbHBlcnMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29udHJvbENsYXNzKCl7cmV0dXJuIHRoaXMuY29udHJvbENsYXNzU2VydmljZS5jb250cm9sQ2xhc3MoIXRoaXMuY29udHJv'@;
put 'bFN1Y2Nlc3NDb21wb25lbnQmJnRoaXMuc3RhdGU9PT1zMi5WQUxJRHx8IXRoaXMudG91Y2hlZD9zMi5OT05FOnRoaXMuc3RhdGUsdGhpcy5hZGRHcmlkKCkpfWFkZEdyaWQoKXtyZXR1cm4gdGhpcy5sYXlvdXRTZXJ2aWNlJiYhdGhpcy5sYXlvdXRTZXJ2aWNlLmlzVmVydGljYWwoKX11cGRh'@;
put 'dGVIZWxwZXJzKCl7dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbFNlcnZpY2Uuc2V0SGVscGVycyh7c2hvdzp0aGlzLnNob3dJbnZhbGlkfHx0aGlzLnNob3dIZWxwZXJ8fHRoaXMuc2hvd1ZhbGlkLHNob3dJbnZhbGlkOnRoaXMuc2hvd0ludmFsaWQsc2hvd0hlbHBlcjp0'@;
put 'aGlzLnNob3dIZWxwZXIsc2hvd1ZhbGlkOnRoaXMuc2hvd1ZhbGlkfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KGVoKSxzdChYMyw4KSxzdCh0aCksc3QoZzEpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6Yyxjb250ZW50UXVlcmllczpmdW5j'@;
put 'dGlvbihhLGQsaCl7aWYoMSZhJiYobnMoaCxYcyw1KSxucyhoLG9UZSw1KSxucyhoLGlUZSw1KSxucyhoLGdOLDUpKSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLmxhYmVsPWYuZmlyc3QpLE1pKGY9Q2koKSkmJihkLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50PWYuZmlyc3QpLE1pKGY9Q2ko'@;
put 'KSkmJihkLmNvbnRyb2xFcnJvckNvbXBvbmVudD1mLmZpcnN0KSxNaShmPUNpKCkpJiYoZC5jb250cm9sSGVscGVyQ29tcG9uZW50PWYuZmlyc3QpfX19KSxjfSkoKTtjbGFzcyBGRXtjb25zdHJ1Y3RvcihsLGEsZD0wKXtpZih0aGlzLmluamVjdG9yPWEuaW5qZWN0b3IsIXRoaXMuaW5qZWN0'@;
put 'b3IuZ2V0KGwsbnVsbCkpe2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQoZzQpLGY9dGhpcy5pbmplY3Rvci5nZXQoJGkpO2EuY3JlYXRlQ29tcG9uZW50KGgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkodFRlKSk7Y29uc3Qgdj1oLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpLFQ9W107VFtk'@;
put 'XT1bZi5uYXRpdmVFbGVtZW50XTtjb25zdCBZPWEuY3JlYXRlQ29tcG9uZW50KHYsdm9pZCAwLHZvaWQgMCxUKTthLnJlbW92ZSgwKSxZLmluc3RhbmNlLl9keW5hbWljPSEwLHRoaXMuaW5qZWN0b3I9WS5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KGwsYSl9'@;
put 'fWxldCBfTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgbm59Z2V0IHRvdWNoZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciB2Tj1mdW5jdGlvbihjKXtyZXR1cm4gYy5GT1JNPSJmb3JtIixjLk1PREVMPSJtb2RlbCIsY30odk58fHt9KTtsZXQgUjc9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCl7dGhpcy52Y3I9YSx0aGlzLndyYXBwZXJUeXBlPWQsdGhpcy5uZ0NvbnRyb2w9Zix0aGlzLmluZGV4PTAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMucmVuZGVyZXI9dix0aGlzLmVsPVQsaCYmKHRoaXMubmdDb250cm9sU2Vy'@;
put 'dmljZT1oLmdldChnMSxudWxsKSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1oLmdldChlaCxudWxsKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9aC5nZXQodGgsbnVsbCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2U9aC5nZXQoX04sbnVsbCksdGhpcy5kaWZmZXJzPWguZ2V0KGt5LG51'@;
put 'bGwpKSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2UmJnRoaXMuY29udHJvbENsYXNzU2VydmljZS5pbml0Q29udHJvbENsYXNzKHYsVC5uYXRpdmVFbGVtZW50KSx0aGlzLm1hcmtDb250cm9sU2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tYXJrQ29udHJvbFNlcnZpY2Uu'@;
put 'dG91Y2hlZENoYW5nZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLm1hcmtBc1RvdWNoZWQoKX0pKSx0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5oZWxwZXJzQ2hhbmdlLnN1YnNjcmliZShZPT57dGhpcy5zZXRBcmlhRGVz'@;
put 'Y3JpYmVkQnkoWSl9KSksZiYmKHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKGYpLmNyZWF0ZSgpKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5jb250cm9sSWRTZXJ2aWNlJiYodGhpcy5jb250cm9sSWRTZXJ2aWNlLmlkPWEpfW5nT25J'@;
put 'bml0KCl7dGhpcy5fY29udGFpbmVySW5qZWN0b3I9bmV3IEZFKHRoaXMud3JhcHBlclR5cGUsdGhpcy52Y3IsdGhpcy5pbmRleCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldChRZCksdGhpcy5jb250YWluZXJJZFNlcnZpY2U9dGhpcy5fY29udGFp'@;
put 'bmVySW5qZWN0b3IuZ2V0KGdnLG51bGwpLHRoaXMuX2lkP3RoaXMuY29udHJvbElkU2VydmljZS5pZD10aGlzLl9pZDp0aGlzLl9pZD10aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLm5nQ29udHJvbCYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNl'@;
put 'dENvbnRyb2wodGhpcy5uZ0NvbnRyb2wpfW5nRG9DaGVjaygpe2lmKHRoaXMuZGlmZmVyKXtjb25zdCBhPXRoaXMuZGlmZmVyLmRpZmYodGhpcy5uZ0NvbnRyb2wpO2EmJmEuZm9yRWFjaENoYW5nZWRJdGVtKGQ9PnsoZC5rZXk9PT12Ti5GT1JNfHxkLmtleT09PXZOLk1PREVMKSYmZC5jdXJy'@;
put 'ZW50VmFsdWUhPT1kLnByZXZpb3VzVmFsdWUmJnRoaXMudHJpZ2dlclZhbGlkYXRpb24oKX0pfX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZSYm'@;
put 'dGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2UudHJpZ2dlclN0YXR1c0NoYW5nZSgpfWdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihhLGQpe3RyeXtyZXR1cm4gdGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGEsZCl9Y2F0Y2h7cmV0dXJuIGR9fW1hcmtBc1RvdWNoZWQoKXt0aGlzLm5nQ29u'@;
put 'dHJvbCYmKHRoaXMubmdDb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpLHRoaXMubmdDb250cm9sLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpKX1zZXRBcmlhRGVzY3JpYmVkQnkoYSl7aWYoYS5zaG93KXtjb25zdCBkPXRoaXMuZ2V0QXJpYURlc2NyaWJlZEJ5SWQoYSk7'@;
put 'aWYobnVsbCE9PWQpcmV0dXJuIHZvaWQgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5IixkKX10aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtZGVzY3JpYmVkYnki'@;
put 'KX1nZXRBcmlhRGVzY3JpYmVkQnlJZChhKXtjb25zdCBkPXRoaXMuY29udGFpbmVySWRTZXJ2aWNlPy5pZHx8dGhpcy5jb250cm9sSWRTZXJ2aWNlPy5pZDtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPVtgJHtkfS1oZWxwZXJgXTtyZXR1cm4gYS5zaG93SW52YWxpZD9oLnB1c2goYCR7ZH0t'@;
put 'ZXJyb3JgKTphLnNob3dWYWxpZCYmaC5wdXNoKGAke2R9LXN1Y2Nlc3NgKSxoLmpvaW4oIiAiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QocHMpLHN0KHUzKSxzdChwYSksc3QoVDApLHN0KGNzKSxzdCgkaSkpfSxjLlx1MDI3NWRpcj12cih7'@;
put 'dHlwZTpjLGhvc3RWYXJzOjEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZzZigiaWQiLGQuaWQpfSxpbnB1dHM6e2lkOiJpZCJ9fSksY30pKCksQW5lPSgoKT0+e2NsYXNzIGN7'@;
put 'Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLm1hcmtDb250cm9sU2VydmljZT1kfXNldCBsYWJlbFNpemUoYSl7Y29uc3QgZD1wYXJzZUludChhLDEwKXx8Mjt0aGlzLmxheW91dFNlcnZpY2UubGFiZWxTaXplPWR9b25Gb3JtU3VibWl0KCl7dGhpcy5tYXJrQXNU'@;
put 'b3VjaGVkKCl9bWFya0FzVG91Y2hlZCgpe3RoaXMubWFya0NvbnRyb2xTZXJ2aWNlLm1hcmtBc1RvdWNoZWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoWDMpLHN0KF9OKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'IiIsImNsckZvcm0iLCIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCxYcyw1KSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLmxhYmVscz1mKX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgic3VibWl0IixmdW5j'@;
put 'dGlvbigpe3JldHVybiBkLm9uRm9ybVN1Ym1pdCgpfSksMiZhJiZicigiY2xyLWZvcm0iLCEwKSgiY2xyLWZvcm0taG9yaXpvbnRhbCIsZC5sYXlvdXRTZXJ2aWNlLmlzSG9yaXpvbnRhbCgpKSgiY2xyLWZvcm0tY29tcGFjdCIsZC5sYXlvdXRTZXJ2aWNlLmlzQ29tcGFjdCgpKX0saW5wdXRz'@;
put 'OntsYWJlbFNpemU6W1FuLk5vbmUsImNsckxhYmVsU2l6ZSIsImxhYmVsU2l6ZSJdfSxmZWF0dXJlczpbR2koW1gzLF9OXSldfSksY30pKCksU3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKFdkLEdkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sYmFdfSksY30pKCk7Y29uc3QgeU49bmV3IFlyKCJJU19UT0dHTEUiKSxjVGU9e3Byb3ZpZGU6eU4sdXNlRmFjdG9yeTpmdW5jdGlvbiBsVGUoKXtyZXR1cm4gbmV3IEFy'@;
put 'KCExKX19O2xldCBfMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2R5bmFtaWM9ITEsdGhpcy50b2dnbGU9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLnRvZ2dsZT1kfSkpfW5nT25Jbml0KCl7'@;
put 'dGhpcy5sYWJlbCYmdGhpcy5sYWJlbC5kaXNhYmxlR3JpZCgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoeU4pKX0sYy5cdTAyNzVj'@;
put 'bXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbImNsci10b2dnbGUtd3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLFhzLDcpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQubGFiZWw9Zi5maXJzdCl9'@;
put 'fSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNsci1jaGVja2JveC13cmFwcGVyIiwhZC50b2dnbGUpKCJjbHItdG9nZ2xlLXdyYXBwZXIiLGQudG9nZ2xlKX0sZmVhdHVyZXM6W0dpKFtRZCxjVGVdKV0sbmdDb250ZW50U2VsZWN0b3JzOmRDZSxkZWNs'@;
put 'czozLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkodUNlKSxPcigwKSxPcigxLDEpLGJ0KDIsaENlLDEsMCwibGFiZWwiLDApKSwyJmEmJih3ZSgyKSxQZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltxaSxYc10sZW5j'@;
put 'YXBzdWxhdGlvbjoyfSksY30pKCksdjE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFI3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixUKXtzdXBlcihhLF8xLGQsaCxmLHYpLHRoaXMudG9nZ2xlPVR9bmdPbkluaXQoKXtzdXBlci5uZ09uSW5pdCgpO2NvbnN0IGE9dGhpcy5nZXRQcm92aWRlckZyb21D'@;
put 'b250YWluZXIoeU4sbnVsbCk7YSYmbnVsbCE9PXRoaXMudG9nZ2xlJiZhLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChwcyksc3QocGEpLHN0KFQwLDEwKSxzdChjcyksc3QoJGkpLEhoKCJjbHJUb2dnbGUiKSl9LGMuXHUwMjc1'@;
put 'ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dnbGUiLCIiXV0sZmVhdHVyZXM6W3NvXX0pLGN9KSgpLE83PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBJN3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91'@;
put 'dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMuaW5saW5lPSExfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLmlu'@;
put 'bGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMuY2hlY2tib3hlcy5sZW5ndGg/Imdyb3VwIjpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChYMyw4KSxzdCh0aCksc3QoZzEpLHN0KGVoKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jaGVja2JveC1jb250YWluZXIiXSxbImNsci10b2dnbGUtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0'@;
put 'aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsdjEsNSksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5jaGVja2JveGVzPWYpfX0saG9zdFZhcnM6Nyxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigicm9sZSIsZC5yb2xlKSxicigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHIt'@;
put 'Zm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W0dpKFtlaCxnMSx0aCxnZ10pLHNvXSxuZ0NvbnRlbnRTZWxl'@;
put 'Y3RvcnM6cENlLGRlY2xzOjEwLHZhcnM6OSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItc3VidGV4dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJj'@;
put 'bGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwi'@;
put 'ZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNv'@;
put 'biJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKGZDZSksT3IoMCksYnQoMSxtQ2UsMSwwLCJsYWJlbCIsMCksZ2UoMiwiZGl2IiwxKSxPcigzLDEpLGdlKDQsImRpdiIsMiksYnQoNSxnQ2UsMSwwLCJuZy1jb250ZW50IiwwKSg2LF9DZSwxLDAsImNkcy1pY29uIiwzKSg3LHZD'@;
put 'ZSwxLDAsImNkcy1pY29uIiw0KSg4LHlDZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksYkNlLDEsMCwibmctY29udGVudCIsMCksYmUoKSgpKSwyJmEmJih3ZSgpLFBlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLHdlKCksYnIoImNsci1jb250cm9sLWlubGluZSIsZC5jbHJJbmxpbmUp'@;
put 'LFBlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSx3ZSgzKSxQZSgibmdJZiIsZC5zaG93SGVscGVyKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dWYWxpZCksd2UoKSxQZSgibmdJZiIsZC5zaG93SW52YWxpZCksd2UoKSxQZSgibmdJZiIs'@;
put 'ZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxLcyxYc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdVRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhXZCxHZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'fSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhLFN1LFBFLFN1XX0pLGN9KSgpO2Z1bmN0aW9uIGEyKGMpe3JldHVybiBudWxsIT09YyYmKCJzdHJpbmciPT10eXBlb2YgYz9jLmxlbmd0aD49MDoiYm9vbGVhbiI9PXR5cGVvZiBjJiZjKX1s'@;
put 'ZXQgbmg9KCgpPT57Y2xhc3MgY3tnZXQgc3Bpbm5lckNsYXNzKCl7cmV0dXJuITB9Z2V0IGlubGluZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2lubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuX2lubGluZT1hMihhKX1nZXQgaW52ZXJzZUNsYXNzKCl7cmV0dXJuIHRoaXMuX2ludmVyc2V9c2V0'@;
put 'IGNsckludmVyc2UoYSl7dGhpcy5faW52ZXJzZT1hMihhKX1nZXQgc21hbGxDbGFzcygpe3JldHVybiB0aGlzLl9zbWFsbH1zZXQgY2xyU21hbGwoYSl7dGhpcy5fc21hbGw9YTIoYSl9Z2V0IG1lZGl1bUNsYXNzKCl7cmV0dXJuIXRoaXMuX3NtYWxsJiZ0aGlzLl9tZWRpdW19c2V0IGNsck1l'@;
put 'ZGl1bShhKXt0aGlzLl9tZWRpdW09YTIoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3Bpbm5lciJdXSxob3N0VmFyczoxMSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk'@;
put 'KXsyJmEmJihocigiYXJpYS1idXN5IiwhMCksYnIoInNwaW5uZXIiLGQuc3Bpbm5lckNsYXNzKSgic3Bpbm5lci1pbmxpbmUiLGQuaW5saW5lQ2xhc3MpKCJzcGlubmVyLWludmVyc2UiLGQuaW52ZXJzZUNsYXNzKSgic3Bpbm5lci1zbSIsZC5zbWFsbENsYXNzKSgic3Bpbm5lci1tZCIsZC5t'@;
put 'ZWRpdW1DbGFzcykpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIixjbHJJbnZlcnNlOiJjbHJJbnZlcnNlIixjbHJTbWFsbDoiY2xyU21hbGwiLGNsck1lZGl1bToiY2xyTWVkaXVtIn0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u'@;
put 'KGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFA3PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6'@;
put 'W21vXX0pLGN9KSgpO3ZhciBZND1mdW5jdGlvbihjKXtyZXR1cm4gYy5WRVJUSUNBTD0idmVydGljYWwiLGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5CT1RIPSJib3RoIixjfShZNHx8e30pO2xldCBMbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZWxlbWVudFJl'@;
put 'Zj1hLHRoaXMucGxhdGZvcm1JZD1kfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWZvY3VzKCl7bGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoJGkpLHN0KEFvKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZvY3VzSXRlbSIsIiJdXX0pLGN9KSgpLEY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5lbGVtZW50UmVmPWEs'@;
put 'dGhpcy5kaXJlY3Rpb249WTQuVkVSVElDQUwsdGhpcy5mb2N1c09uTG9hZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5mb2N1c0NoYW5nZT1uZXcgSXIsdGhpcy5fY3VycmVudD0wfWdldCBmb2N1c2FibGVJdGVtcygpe3JldHVybiB0aGlzLl9mb2N1c2FibGVJdGVtcz90aGlzLl9m'@;
put 'b2N1c2FibGVJdGVtczp0aGlzLmNscktleUZvY3VzSXRlbXM/dGhpcy5jbHJLZXlGb2N1c0l0ZW1zLnRvQXJyYXkoKTpbXX1zZXQgZm9jdXNhYmxlSXRlbXMoYSl7QXJyYXkuaXNBcnJheShhKSYmYS5sZW5ndGgmJih0aGlzLl9mb2N1c2FibGVJdGVtcz1hLHRoaXMuaW5pdGlhbGl6ZUZvY3Vz'@;
put 'KCkpfWdldCBuYXRpdmVFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50fWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy5fY3VycmVudCE9PWEmJih0aGlzLl9jdXJyZW50PWEpfWdldCBjdXJyZW50SXRlbSgp'@;
put 'e3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW1zW3RoaXMuX2N1cnJlbnRdfWdldCBjdXJyZW50SXRlbUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5jdXJyZW50SXRlbS5uYXRpdmVFbGVtZW50P3RoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudDp0aGlzLmN1cnJlbnRJdGVtfW5nQWZ0ZXJDb250'@;
put 'ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9ySXRlbVVwZGF0ZXMoKSksdGhpcy5pbml0aWFsaXplRm9jdXMoKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlS2V5Ym9hcmRFdmVu'@;
put 'dChhKXtpZih0aGlzLmN1cnJlbnRJdGVtRWxlbWVudCE9PWEudGFyZ2V0KXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTt0aGlzLnBvc2l0aW9uSW5SYW5nZShkKSYmKHRoaXMuY3VycmVudD1kKX10aGlzLnByZXZLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1'@;
put 'c0lzTm90Rmlyc3RJdGVtKCk/dGhpcy5tb3ZlVG8odGhpcy5jdXJyZW50LTEpOnRoaXMubmV4dEtleVByZXNzZWQoYSkmJnRoaXMuY3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudCsxKTphLmNvZGU9PT1rby5Ib21lP3RoaXMubW92ZVRvKDApOmEu'@;
put 'Y29kZT09PWtvLkVuZCYmdGhpcy5tb3ZlVG8odGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksZE4oYSl9c2V0Q2xpY2tlZEl0ZW1DdXJyZW50KGEpe2NvbnN0IGQ9dGhpcy5nZXRJdGVtUG9zaXRpb24oYS50YXJnZXQpO2Q+LTEmJnRoaXMubW92ZVRvKGQpfWZvY3VzQ3VycmVudCgpe3Ro'@;
put 'aXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9bW92ZVRvKGEpe3RoaXMucG9zaXRpb25JblJhbmdlKGEpJiYodGhpcy5jdXJyZW50PWEsdGhpcy5mb2N1c0N1cnJlbnQoKSl9cG9zaXRpb25JblJhbmdlKGEpe3JldHVybiBhPj0wJiZh'@;
put 'PHRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RofWN1cnJlbnRGb2N1c0lzTm90Rmlyc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQtMT49MH1jdXJyZW50Rm9jdXNJc05vdExhc3RJdGVtKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnQrMTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1pbml0'@;
put 'aWFsaXplRm9jdXMoKXt0aGlzLmZvY3VzYWJsZUl0ZW1zJiZ0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ+PXRoaXMuZm9jdXNhYmxlSXRlbXMubGVuZ3RoJiYodGhpcy5fY3VycmVudD10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aC0xKSx0aGlzLmZvY3VzT25M'@;
put 'b2FkJiYodGhpcy5jdXJyZW50SXRlbS5mb2N1cygpLHRoaXMuZm9jdXNDaGFuZ2UuZW1pdCgpKSl9bmV4dEtleVByZXNzZWQoYSl7Y29uc3QgZD1xZChhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIFk0LlZFUlRJQ0FMOnJldHVybiBkPT09a28uQXJyb3dEb3duO2Nhc2UgWTQu'@;
put 'SE9SSVpPTlRBTDpyZXR1cm4gZD09PWtvLkFycm93UmlnaHQ7Y2FzZSBZNC5CT1RIOnJldHVybiBkPT09a28uQXJyb3dEb3dufHxkPT09a28uQXJyb3dSaWdodDtkZWZhdWx0OnJldHVybiExfX1wcmV2S2V5UHJlc3NlZChhKXtjb25zdCBkPXFkKGEua2V5KTtzd2l0Y2godGhpcy5kaXJlY3Rp'@;
put 'b24pe2Nhc2UgWTQuVkVSVElDQUw6cmV0dXJuIGQ9PT1rby5BcnJvd1VwO2Nhc2UgWTQuSE9SSVpPTlRBTDpyZXR1cm4gZD09PWtvLkFycm93TGVmdDtjYXNlIFk0LkJPVEg6cmV0dXJuIGQ9PT1rby5BcnJvd1VwfHxkPT09a28uQXJyb3dMZWZ0O2RlZmF1bHQ6cmV0dXJuITF9fWdldEl0ZW1Q'@;
put 'b3NpdGlvbihhKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5mb2N1c2FibGVJdGVtcy5pbmRleE9mKGEpOnRoaXMuZm9jdXNhYmxlSXRlbXMubWFwKGQ9PmQubmF0aXZlRWxlbWVudCkuaW5kZXhPZihhKX1saXN0ZW5Gb3JJdGVtVXBkYXRlcygpe3JldHVybiB0aGlzLmNscktl'@;
put 'eUZvY3VzSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLmluaXRpYWxpemVGb2N1cygpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KCRpKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscktleUZv'@;
put 'Y3VzIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsTG5lLDUpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQuY2xyS2V5Rm9jdXNJdGVtcz1mKX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImtleWRvd24iLGZ1bmN0aW9uKGYp'@;
put 'e3JldHVybiBkLmhhbmRsZUtleWJvYXJkRXZlbnQoZil9KSgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLnNldENsaWNrZWRJdGVtQ3VycmVudChmKX0pfSxpbnB1dHM6e2RpcmVjdGlvbjpbUW4uTm9uZSwiY2xyRGlyZWN0aW9uIiwiZGlyZWN0aW9uIl0sZm9jdXNPbkxvYWQ6W1FuLk5v'@;
put 'bmUsImNsckZvY3VzT25Mb2FkIiwiZm9jdXNPbkxvYWQiXSxmb2N1c2FibGVJdGVtczpbUW4uTm9uZSwiY2xyS2V5Rm9jdXMiLCJmb2N1c2FibGVJdGVtcyJdfSxvdXRwdXRzOntmb2N1c0NoYW5nZToiY2xyRm9jdXNDaGFuZ2UifSxhdHRyczp3Q2UsbmdDb250ZW50U2VsZWN0b3JzOlpvLGRl'@;
put 'Y2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGJOPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlw'@;
put 'ZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vXX0pLGN9KSgpO2NsYXNzIGRUZXtjb250YWluc0l0ZW0obCl7cmV0dXJuISF0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmluY2x1ZGVzKGwpfXNlbGVjdChsKXt0aGlzLmFkZEl0ZW0obCl9dW5zZWxlY3QobCl7dGhpcy5yZW1vdmVJdGVt'@;
put 'KGwpfWlzRW1wdHkoKXtyZXR1cm4hKHRoaXMubW9kZWwmJnRoaXMubW9kZWwubGVuZ3RoPjApfXBvcCgpe2xldCBsO3JldHVybiB0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxlbmd0aD4wJiYobD10aGlzLm1vZGVsW3RoaXMubW9kZWwubGVuZ3RoLTFdLHRoaXMucmVtb3ZlSXRlbShsKSksbH10'@;
put 'b1N0cmluZyhsLGE9LTEpe2xldCBkPSIiO3JldHVybiB0aGlzLm1vZGVsJiYoYT4tMT90aGlzLm1vZGVsW2FdJiYoZCs9bCYmdGhpcy5tb2RlbFthXVtsXT90aGlzLm1vZGVsW2FdW2xdOnRoaXMubW9kZWxbYV0udG9TdHJpbmcoKSk6dGhpcy5tb2RlbC5mb3JFYWNoKGg9PntkKz1sJiZoW2xd'@;
put 'P2hbbF06aC50b1N0cmluZygpLGQrPSIgIn0pKSxkLnRyaW0oKX1hZGRJdGVtKGwpe3RoaXMuY29udGFpbnNJdGVtKGwpfHwodGhpcy5tb2RlbD10aGlzLm1vZGVsfHxbXSx0aGlzLm1vZGVsLnB1c2gobCkpfXJlbW92ZUl0ZW0obCl7aWYobnVsbD09dGhpcy5tb2RlbClyZXR1cm47Y29uc3Qg'@;
put 'YT10aGlzLm1vZGVsLmluZGV4T2YobCk7YT4tMSYmdGhpcy5tb2RlbC5zcGxpY2UoYSwxKSwwPT09dGhpcy5tb2RlbC5sZW5ndGgmJih0aGlzLm1vZGVsPW51bGwpfX1jbGFzcyBoVGV7Y29udGFpbnNJdGVtKGwpe3JldHVybiB0aGlzLm1vZGVsPT09bH1zZWxlY3QobCl7dGhpcy5tb2RlbD1s'@;
put 'fXVuc2VsZWN0KGwpe3RoaXMuY29udGFpbnNJdGVtKGwpJiYodGhpcy5tb2RlbD1udWxsKX1pc0VtcHR5KCl7cmV0dXJuIXRoaXMubW9kZWx9cG9wKCl7Y29uc3QgbD10aGlzLm1vZGVsO3JldHVybiB0aGlzLm1vZGVsPW51bGwsbH10b1N0cmluZyhsKXtyZXR1cm4gdGhpcy5tb2RlbD9sJiZ0'@;
put 'aGlzLm1vZGVsW2xdP3RoaXMubW9kZWxbbF06dGhpcy5tb2RlbC50b1N0cmluZygpOiIifX1jbGFzcyBIRXt9ZnVuY3Rpb24gSW5lKGMpe3JldHVybltjLHtwcm92aWRlOkhFLHVzZUV4aXN0aW5nOmN9XX1jbGFzcyBmVGUgZXh0ZW5kcyBoVGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1'@;
put 'bWVudHMpLHRoaXMuX2ZvY3VzQ2hhbmdlZD1uZXcgQXIobnVsbCl9Z2V0IGZvY3VzQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZWQuYXNPYnNlcnZhYmxlKCl9c2VsZWN0KGwpe3RoaXMubW9kZWwhPT1sJiYodGhpcy5tb2RlbD1sLHRoaXMuX2ZvY3VzQ2hhbmdlZC5uZXh0KGwp'@;
put 'KX19bGV0IHBUZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nPSExLHRoaXMuc2hvd0FsbE9wdGlvbnM9ITAsdGhpcy5fY3VycmVudElucHV0PSIiLHRoaXMuX2lucHV0Q2hhbmdlZD1uZXcgQXIoIiIpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQ9bmV3IGZFKDEpLHRo'@;
put 'aXMuaW5wdXRDaGFuZ2VkPXRoaXMuX2lucHV0Q2hhbmdlZC5hc09ic2VydmFibGUoKX1nZXQgY3VycmVudElucHV0KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRJbnB1dH1zZXQgY3VycmVudElucHV0KGEpeyIiPT09YSYmIXRoaXMubXVsdGlzZWxlY3RhYmxlJiZ0aGlzLnNldFNlbGVjdGlvblZh'@;
put 'bHVlKG51bGwpLHRoaXMuX2N1cnJlbnRJbnB1dD1hLHRoaXMuX2lucHV0Q2hhbmdlZC5uZXh0KGEpfWdldCBzZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IG11bHRpc2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLnNlbGVj'@;
put 'dGlvbk1vZGVsIGluc3RhbmNlb2YgZFRlfXNlbGVjdChhKXtudWxsPT1hfHx0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9dG9n'@;
put 'Z2xlKGEpe251bGwhPWEmJih0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKT90aGlzLnNlbGVjdGlvbk1vZGVsLnVuc2VsZWN0KGEpOnRoaXMuc2VsZWN0aW9uTW9kZWwuc2VsZWN0KGEpLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9'@;
put 'dW5zZWxlY3QoYSl7bnVsbD09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwuY29udGFpbnNJdGVtKGEpfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXNldFNlbGVjdGlvblZhbHVlKGEpeyF0'@;
put 'aGlzLnNlbGVjdGlvbk1vZGVsfHx0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsPT09YXx8IXRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWwmJiFhfHwodGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD1hLHRoaXMuX3NlbGVjdGlvbkNoYW5nZWQubmV4dCh0aGlzLnNlbGVjdGlvbk1vZGVsKSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO0luZSgoKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMu'@;
put 'c2VsZWN0aW9uU2VydmljZT1oLHRoaXMucGxhdGZvcm1JZD1mLHRoaXMucHNldWRvRm9jdXM9bmV3IGZUZSx0aGlzLm9wdGlvbkRhdGE9W10sdGhpcy5oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpLHRoaXMucmVuZGVyZXI9YS5jcmVhdGVSZW5kZXJlcihudWxsLG51bGwpfWdldCB0cmlnZ2Vy'@;
put 'KCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMuYWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKX1nZXQgbGlzdGJveCgpe3JldHVybiB0aGlzLl9saXN0Ym94fXNldCBsaXN0Ym94KGEpe3RoaXMuX2xpc3Rib3g9YSx0aGlzLmFkZEZvY3Vz'@;
put 'T25CbHVyTGlzdGVuZXIoYSl9Z2V0IHRleHRJbnB1dCgpe3JldHVybiB0aGlzLl90ZXh0SW5wdXR9c2V0IHRleHRJbnB1dChhKXt0aGlzLl90ZXh0SW5wdXQ9YSx0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duIixkPT4hdGhpcy5oYW5kbGVUZXh0SW5wdXQoZCkpLHRoaXMuYWRkRm9j'@;
put 'dXNPbkJsdXJMaXN0ZW5lcihhKX1mb2N1c0lucHV0KCl7dGhpcy50ZXh0SW5wdXQmJmxhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudGV4dElucHV0LmZvY3VzKCl9Zm9jdXNGaXJzdEFjdGl2ZSgpe2lmKHRoaXMub3B0aW9uRGF0YS5sZW5ndGg+MClpZih0aGlzLnNlbGVjdGlvblNlcnZpY2Uu'@;
put 'c2VsZWN0aW9uTW9kZWwuaXNFbXB0eSgpKXRoaXMucHNldWRvRm9jdXMuc2VsZWN0KHRoaXMub3B0aW9uRGF0YVswXSk7ZWxzZXtsZXQgYTthPXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLm1vZGVsWzBd'@;
put 'OnRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbDtjb25zdCBkPXRoaXMub3B0aW9uRGF0YS5maW5kKGg9PmgudmFsdWU9PT1hKTt0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdChkfHx0aGlzLm9wdGlvbkRhdGFbMF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwo'@;
put 'ImF1dG8iKX19YWRkT3B0aW9uVmFsdWVzKGEpe3RoaXMub3B0aW9uRGF0YT1hfWhhbmRsZUZvY3VzU3Vic2NyaXB0aW9uKCl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthfHwodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbD1udWxsKX0pfW1vdmVGb2N1c1RvKGEp'@;
put 'e2xldCBkPXRoaXMub3B0aW9uRGF0YS5maW5kSW5kZXgoaD0+aC5lcXVhbHModGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCkpO2E9PT1zZC5VUD8tMT09PWR8fDA9PT1kP2Q9dGhpcy5vcHRpb25EYXRhLmxlbmd0aC0xOmQtLTphPT09c2QuRE9XTiYmKC0xPT09ZHx8ZD09PXRoaXMub3B0aW9uRGF0'@;
put 'YS5sZW5ndGgtMT9kPTA6ZCsrKSx0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbZF0pLHRoaXMuc2Nyb2xsSW50b1NlbGVjdGVkTW9kZWwoKX1vcGVuQW5kTW92ZVRvKGEpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuP3RoaXMubW92ZUZvY3VzVG8oYSk6KHRoaXMudG9n'@;
put 'Z2xlU2VydmljZS5vcGVuQ2hhbmdlLnBpcGUoS2goMSkpLnN1YnNjcmliZShkPT57ZCYmdGhpcy5tb3ZlRm9jdXNUbyhhKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1oYW5kbGVUZXh0SW5wdXQoYSl7bGV0IGQ9ITE7Y29uc3QgaD1xZChhLmtleSk7aWYoYSlzd2l0Y2goaCl7Y2Fz'@;
put 'ZSBrby5FbnRlcjp0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmdGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbCYmKHRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGU/dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRvZ2dsZSh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKTp0aGlzLnNl'@;
put 'bGVjdGlvblNlcnZpY2Uuc2VsZWN0KHRoaXMucHNldWRvRm9jdXMubW9kZWwudmFsdWUpLGQ9ITApO2JyZWFrO2Nhc2Uga28uU3BhY2U6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW58fCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCxkPSEwKTticmVhaztjYXNlIGtvLkFycm93VXA6dGhpcy5w'@;
put 'cmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSksdGhpcy5vcGVuQW5kTW92ZVRvKHNkLlVQKSxkPSEwO2JyZWFrO2Nhc2Uga28uQXJyb3dEb3duOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyhzZC5ET1dOKSxkPSEwO2JyZWFrO2RlZmF1bHQ6YS5r'@;
put 'ZXkhPT1rby5UYWImJighdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLm11bHRpc2VsZWN0YWJsZXx8YS5rZXkhPT1rby5CYWNrc3BhY2UpJiZhLmtleSE9PWtvLkVzY2FwZSYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfXJldHVybiBkfXNjcm9s'@;
put 'bEludG9TZWxlY3RlZE1vZGVsKGE9InNtb290aCIpe3RoaXMucHNldWRvRm9jdXMubW9kZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwmJnRoaXMucHNldWRvRm9jdXMubW9kZWwuZWwuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOmEsYmxvY2s6ImNlbnRlciIsaW5saW5lOiJuZWFyZXN0'@;
put 'In0pfXByZXZlbnRWaWV3cG9ydFNjcm9sbGluZyhhKXthLnByZXZlbnREZWZhdWx0KCksYS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpe2xhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlz'@;
put 'LmZvY3VzT3V0T2ZDb21wb25lbnQoZCkmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLmNvbXBvbmVudENkUmVmJiZ0aGlzLmNvbXBvbmVudENkUmVmLmRldGVjdENoYW5nZXMoKSl9KX1mb2N1c091dE9mQ29tcG9uZW50KGEpe2NvbnN0IGQ9YS5yZWxhdGVkVGFyZ2V0fHxkb2N1'@;
put 'bWVudC5hY3RpdmVFbGVtZW50O3JldHVybiEodGhpcy50ZXh0SW5wdXQuY29udGFpbnMoZCl8fHRoaXMudHJpZ2dlci5jb250YWlucyhkKXx8dGhpcy5saXN0Ym94LmNvbnRhaW5zKGQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoVDUpLGZy'@;
put 'KERsKSxmcihwVGUpLGZyKEFvKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkpO2xldCBtVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKFdkLEdkLGc3LGhiKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sQ2MsYmEsYk4sU3UsSmQsRmIsUDcsU3UsSmRdfSksY30pKCksd049KCgpPT57Y2xhc3MgYyBleHRlbmRzIEk3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57'@;
put 'bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1pYShjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWlucHV0LWNvbnRhaW5lciJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNs'@;
put 'ci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbR2koW2VoLGcxLFFkLHRoXSksc29dLG5nQ29udGVudFNlbGVjdG9yczpF'@;
put 'Q2UsZGVjbHM6MTAsdmFyczo3LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0'@;
put 'dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbInNoYXBlIiwiZXhjbGFtYXRp'@;
put 'b24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdLFsic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJjbHItdmFsaWRhdGUtaWNvbiJdXSx0ZW1w'@;
put 'bGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKGtDZSksT3IoMCksYnQoMSxUQ2UsMSwwLCJsYWJlbCIsMCksZ2UoMiwiZGl2IiwxKSgzLCJkaXYiLDIpLE9yKDQsMSksYnQoNSxEQ2UsMSwwLCJjZHMtaWNvbiIsMykoNixBQ2UsMSwwLCJjZHMtaWNvbiIsNCksYmUoKSxidCg3LExDZSwxLDAs'@;
put 'Im5nLWNvbnRlbnQiLDApKDgsSUNlLDEsMCwibmctY29udGVudCIsMCkoOSxSQ2UsMSwwLCJuZy1jb250ZW50IiwwKSxiZSgpKSwyJmEmJih3ZSgpLFBlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLHdlKCksUGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLHdlKDMpLFBlKCJu'@;
put 'Z0lmIixkLnNob3dJbnZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dWYWxpZCksd2UoKSxQZSgibmdJZiIsZC5zaG93SGVscGVyKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1VjLHFpLEtzLFhzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxhZD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUjd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHdOLGQsaCxmLHYpLHRoaXMuaW5kZXg9MX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QocHMpLHN0'@;
put 'KHBhKSxzdChUMCwxMCksc3QoY3MpLHN0KCRpKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklucHV0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiY2xyLWlucHV0IiwhMCl9LGZlYXR1cmVzOltzb119KSxj'@;
put 'fSkoKSxSbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKFdkLEdkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sQ2MsYmEs'@;
put 'U3UsU3VdfSksY30pKCksTU49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzZWQ9bmV3IEFyKCExKX1nZXQgZm9jdXNDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNlZC5hc09ic2VydmFibGUoKX1zZXQgZm9jdXNlZChhKXt0aGlzLl9mb2N1c2VkLm5leHQoYSl9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGdUZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7cXMuYWRkSWNvbnMoV2QsR2QpfX1yZXR1cm4gYy5cdTAy'@;
put 'NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxSbmUsYmFdfSksY30pKCksSDc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGplZXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBs'@;
put 'O3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9aWEoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxmZWF0dXJlczpbc29dfSksY30pKCksQ049KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7fSksY30pKCk7Y29uc3QgdlRlPS9kKy4rbSsuK3krL2kseVRlPS9tKy4rZCsuK3krL2ksYlRlPS9kK3xtK3x5Ky9pLHdUZT0vXGQrL2csTVRlPS9Nb2JpL2ks'@;
put 'Q1RlPS9cdTIwMGYvZyxTTj0iWVlZWSIsTkU9e25hbWU6IkxJVFRMRV9FTkRJQU4iLGZvcm1hdDpbIkREIiwiTU0iLFNOXX0sRU49e25hbWU6Ik1JRERMRV9FTkRJQU4iLGZvcm1hdDpbIk1NIiwiREQiLFNOXX0sU1RlPXtuYW1lOiJCSUdfRU5ESUFOIixmb3JtYXQ6W1NOLCJNTSIsIkREIl19'@;
put 'O2Z1bmN0aW9uIFBuZShjLGwpe3JldHVybiBuZXcgRGF0ZShjLGwrMSwwKS5nZXREYXRlKCl9Y2xhc3MgRFRle2NvbnN0cnVjdG9yKGwsYT0hMSxkPSExLGg9ITEsZj0hMSx2PSExKXt0aGlzLmRheU1vZGVsPWwsdGhpcy5pc1RvZGF5c0RhdGU9YSx0aGlzLmlzRXhjbHVkZWQ9ZCx0aGlzLmlz'@;
put 'RGlzYWJsZWQ9aCx0aGlzLmlzU2VsZWN0ZWQ9Zix0aGlzLmlzRm9jdXNhYmxlPXZ9Z2V0IHRhYkluZGV4KCl7cmV0dXJuIHRoaXMuaXNGb2N1c2FibGU/MDotMX19Y2xhc3MgbGR7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMueWVhcj1sLHRoaXMubW9udGg9YSx0aGlzLmRhdGU9ZH1pc0VxdWFs'@;
put 'KGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aCYmdGhpcy5kYXRlPT09bC5kYXRlfXRvRGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUpfWluY3JlbWVudEJ5KGwpe2NvbnN0IGE9bmV3IERhdGUo'@;
put 'dGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlK2wpO3JldHVybiBuZXcgbGQoYS5nZXRGdWxsWWVhcigpLGEuZ2V0TW9udGgoKSxhLmdldERhdGUoKSl9Y2xvbmUoKXtyZXR1cm4gbmV3IGxkKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZSl9dG9Db21wYXJpc29uU3RyaW5nKCl7'@;
put 'cmV0dXJuYCR7dGhpcy55ZWFyfSR7dGhpcy5wYWQodGhpcy5tb250aCl9JHt0aGlzLnBhZCh0aGlzLmRhdGUpfWB9dG9EYXRlU3RyaW5nKCl7cmV0dXJuIHRoaXMudG9EYXRlKCkudG9Mb2NhbGVEYXRlU3RyaW5nKHZvaWQgMCx7d2Vla2RheToibG9uZyIsbW9udGg6ImxvbmciLGRheToibnVt'@;
put 'ZXJpYyIseWVhcjoibnVtZXJpYyJ9KX1wYWQobCl7cmV0dXJuIGw8MTA/YDAke2x9YDpgJHtsfWB9fWNsYXNzIEFUZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5jYWxlbmRhcj1sLHRoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLmZvY3VzYWJsZURheT1kLHRoaXMudG9kYXk9aCx0aGlz'@;
put 'LmZpcnN0RGF5T2ZXZWVrPWYsdGhpcy5leGNsdWRlZERhdGVzPXYsdGhpcy5jdXJyTW9udGhEYXlWaWV3cz1bXSx0aGlzLmluaXRpYWxpemVDYWxlbmRhclZpZXcoKX1nZXQgY2FsZW5kYXJWaWV3KCl7cmV0dXJuIHRoaXMuX2NhbGVuZGFyVmlld311cGRhdGVGb2N1c2FibGVEYXkobCl7dGhp'@;
put 'cy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCExKSx0aGlzLnNldEZvY3VzYWJsZUZsYWcobCwhMCksdGhpcy5mb2N1c2FibGVEYXk9bH1pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl7Y29uc3QgbD10aGlzLmNhbGVuZGFyLnByZXZpb3VzTW9udGgoKSxhPXRoaXMuY2FsZW5k'@;
put 'YXIubmV4dE1vbnRoKCksZD10aGlzLm51bURheXNGcm9tUHJldk1vbnRoSW5DYWxWaWV3KHRoaXMuY2FsZW5kYXIueWVhcix0aGlzLmNhbGVuZGFyLm1vbnRoKSxoPTQyLSh0aGlzLmNhbGVuZGFyLmRheXMubGVuZ3RoK2QpO2xldCBmPVtdLHY9W107ZD4wJiYoZj10aGlzLmdlbmVyYXRlRGF5'@;
put 'Vmlld01vZGVscyhsLmRheXMuc2xpY2UoLTEqZCksITAsITEpKSx0aGlzLmN1cnJNb250aERheVZpZXdzPXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKHRoaXMuY2FsZW5kYXIuZGF5cywhMSwhMCksaD4wJiYodj10aGlzLmdlbmVyYXRlRGF5Vmlld01vZGVscyhhLmRheXMuc2xpY2UoMCxo'@;
put 'KSwhMCwhMSkpLHRoaXMuX2NhbGVuZGFyVmlldz10aGlzLmdlbmVyYXRlQ2FsZW5kYXJWaWV3KGYsdGhpcy5jdXJyTW9udGhEYXlWaWV3cyx2KSx0aGlzLmluaXRpYWxpemVTZWxlY3RlZERheSgpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpfWlzRGF0ZUV4Y2x1ZGVkKGwpe2NvbnN0'@;
put 'e21pbkRhdGU6YSxtYXhEYXRlOmR9PXRoaXMuZXhjbHVkZWREYXRlcyxoPWEudG9Db21wYXJpc29uU3RyaW5nKCksZj1kLnRvQ29tcGFyaXNvblN0cmluZygpLHY9bC50b0NvbXBhcmlzb25TdHJpbmcoKTtyZXR1cm4hKHY+PWgmJnY8PWYpfWdlbmVyYXRlRGF5Vmlld01vZGVscyhsLGEsZCl7'@;
put 'Y29uc3QgaD1sLm1hcChmPT5uZXcgRFRlKGYsITEsYSx0aGlzLmlzRGF0ZUV4Y2x1ZGVkKGYpLCExLCExKSk7cmV0dXJuIGQmJnRoaXMuY2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpJiYoaFt0aGlzLnRvZGF5LmRhdGUtMV0uaXNUb2RheXNEYXRlPSEwKSxofW51bURheXNG'@;
put 'cm9tUHJldk1vbnRoSW5DYWxWaWV3KGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBrVGUoYyxsLGEpe3JldHVybiBuZXcgRGF0ZShjLGwsYSkuZ2V0RGF5KCl9KGwsYSwxKTtyZXR1cm4gZD49dGhpcy5maXJzdERheU9mV2Vlaz9kLXRoaXMuZmlyc3REYXlPZldlZWs6NytkLXRoaXMuZmlyc3REYXlP'@;
put 'ZldlZWt9aXNEYXlJbkNhbGVuZGFyVmlldyhsKXtyZXR1cm4hIXRoaXMuY2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKGwpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KGwsYSxkKXtjb25zdCBoPVsuLi5sLC4uLmEsLi4uZF0sZj1bXTtmb3IobGV0IHY9MDt2PDY7disrKWZbdl09aC5zbGljZSg3KnYs'@;
put 'NyoodisxKSk7cmV0dXJuIGZ9aW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCl7dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkpJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1t0aGlzLnNlbGVjdGVkRGF5LmRhdGUtMV0uaXNTZWxlY3RlZD0h'@;
put 'MCl9aW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpe3RoaXMuZm9jdXNhYmxlRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5mb2N1c2FibGVEYXkpP3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMCk6dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUlu'@;
put 'Q2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkpPyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZERheS5jbG9uZSgpKTp0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy50b2RheSk/KHRoaXMuc2V0'@;
put 'Rm9jdXNhYmxlRmxhZyh0aGlzLnRvZGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnRvZGF5LmNsb25lKCkpOih0aGlzLmZvY3VzYWJsZURheT1uZXcgbGQodGhpcy5jYWxlbmRhci55ZWFyLHRoaXMuY2FsZW5kYXIubW9udGgsMTUpLHRoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZv'@;
put 'Y3VzYWJsZURheSwhMCkpfXNldEZvY3VzYWJsZUZsYWcobCxhKXtsJiYodGhpcy5jdXJyTW9udGhEYXlWaWV3c1tsLmRhdGUtMV0uaXNGb2N1c2FibGU9YSl9fWxldCBIYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubG9jYWxlPWEsdGhpcy5fZmlyc3REYXlPZldlZWs9MCx0'@;
put 'aGlzLmluaXRpYWxpemVMb2NhbGVEYXRhKCl9Z2V0IGZpcnN0RGF5T2ZXZWVrKCl7cmV0dXJuIHRoaXMuX2ZpcnN0RGF5T2ZXZWVrfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXN9Z2V0IGxvY2FsZURheXNOYXJyb3coKXtyZXR1cm4gdGhpcy5fbG9jYWxlRGF5cy5t'@;
put 'YXAoYT0+YS5uYXJyb3cpfWdldCBsb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNBYmJyZXZpYXRlZH1nZXQgbG9jYWxlTW9udGhzV2lkZSgpe3JldHVybiB0aGlzLl9sb2NhbGVNb250aHNXaWRlfWdldCBsb2NhbGVEYXRlRm9ybWF0KCl7cmV0dXJu'@;
put 'IHRoaXMuX2xvY2FsZURhdGVGb3JtYXR9aW5pdGlhbGl6ZUxvY2FsZURhdGEoKXt0aGlzLmluaXRpYWxpemVGaXJzdERheU9mV2VlaygpLHRoaXMuaW5pdGlhbGl6ZUxvY2FsZURhdGVGb3JtYXQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpLHRoaXMuaW5pdGlh'@;
put 'bGl6ZUxvY2FsZU1vbnRoc1dpZGUoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVEYXlzKCl9aW5pdGlhbGl6ZUxvY2FsZURheXMoKXtjb25zdCBhPVtdLGQ9U1AodGhpcy5sb2NhbGUsYXUuU3RhbmRhbG9uZSxnYS5XaWRlKS5zbGljZSgpLGg9U1AodGhpcy5sb2NhbGUsYXUuU3RhbmRhbG9uZSxn'@;
put 'YS5OYXJyb3cpLnNsaWNlKCksZj10aGlzLmZpcnN0RGF5T2ZXZWVrO2ZvcihsZXQgdj0wO3Y8Nzt2KyspYS5wdXNoKHtkYXk6ZFt2XSxuYXJyb3c6aFt2XX0pO2lmKGY+MCl7Y29uc3Qgdj1hLnNwbGljZSgwLGYpO2EucHVzaCguLi52KX10aGlzLl9sb2NhbGVEYXlzPWF9aW5pdGlhbGl6ZUxv'@;
put 'Y2FsZU1vbnRoc0FiYnJldmlhdGVkKCl7dGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQ9eFAodGhpcy5sb2NhbGUsYXUuU3RhbmRhbG9uZSxnYS5BYmJyZXZpYXRlZCkuc2xpY2UoKX1pbml0aWFsaXplTG9jYWxlTW9udGhzV2lkZSgpe3RoaXMuX2xvY2FsZU1vbnRoc1dpZGU9eFAodGhp'@;
put 'cy5sb2NhbGUsYXUuU3RhbmRhbG9uZSxnYS5XaWRlKS5zbGljZSgpfWluaXRpYWxpemVGaXJzdERheU9mV2Vlaygpe3RoaXMuX2ZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIGxmZShjKXtyZXR1cm4gZTAoYylbcmwuRmlyc3REYXlPZldlZWtdfSh0aGlzLmxvY2FsZSl9aW5pdGlhbGl6ZUxvY2Fs'@;
put 'ZURhdGVGb3JtYXQoKXt0aGlzLl9sb2NhbGVEYXRlRm9ybWF0PWZ1bmN0aW9uIER5KGMsbCl7cmV0dXJuIHpkKGUwKGMpW3JsLkRhdGVGb3JtYXRdLGwpfSh0aGlzLmxvY2FsZSxsMS5TaG9ydCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKFdo'@;
put 'KSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgbDJ7Y29uc3RydWN0b3IobCxhKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRoPWEsdGhpcy5pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKX1pc0VxdWFsKGwpe3JldHVybiEhbCYmdGhp'@;
put 'cy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRoPT09bC5tb250aH1pc0RheUluQ2FsZW5kYXIobCl7cmV0dXJuISFsJiZ0aGlzLnllYXI9PT1sLnllYXImJnRoaXMubW9udGg9PT1sLm1vbnRofXByZXZpb3VzTW9udGgoKXtyZXR1cm4gMD09PXRoaXMubW9udGg/bmV3IGwyKHRoaXMueWVhci0x'@;
put 'LDExKTpuZXcgbDIodGhpcy55ZWFyLHRoaXMubW9udGgtMSl9bmV4dE1vbnRoKCl7cmV0dXJuIDExPT09dGhpcy5tb250aD9uZXcgbDIodGhpcy55ZWFyKzEsMCk6bmV3IGwyKHRoaXMueWVhcix0aGlzLm1vbnRoKzEpfWluaXRpYWxpemVEYXlzSW5DYWxlbmRhcigpe2NvbnN0IGw9UG5lKHRo'@;
put 'aXMueWVhcix0aGlzLm1vbnRoKTt0aGlzLmRheXM9QXJyYXkobCkuZmlsbChudWxsKS5tYXAoKGEsZCk9Pm5ldyBsZCh0aGlzLnllYXIsdGhpcy5tb250aCxkKzEpKX19bGV0IEozPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlz'@;
put 'Ll9zZWxlY3RlZERheUNoYW5nZT1uZXcgbm4sdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2U9bmV3IG5uLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZT1uZXcgbm4sdGhpcy5fZm9jdXNlZERheUNoYW5nZT1uZXcgbm59Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX3RvZGF5fWdldCBk'@;
put 'aXNwbGF5ZWRDYWxlbmRhcigpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXlDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpc3BsYXllZENhbGVuZGFyQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2Rp'@;
put 'c3BsYXllZENhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c09uQ2FsZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c2VkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWREYXlDaGFu'@;
put 'Z2UuYXNPYnNlcnZhYmxlKCl9bm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGEpe3RoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZS5uZXh0KGEpfWluaXRpYWxpemVDYWxlbmRhcigpe3RoaXMuZm9jdXNlZERheT1udWxsLHRoaXMuaW5pdGlhbGl6ZVRvZGF5c0RhdGUo'@;
put 'KSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj10aGlzLnNlbGVjdGVkRGF5P25ldyBsMih0aGlzLnNlbGVjdGVkRGF5LnllYXIsdGhpcy5zZWxlY3RlZERheS5tb250aCk6bmV3IGwyKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKX1jaGFuZ2VNb250aChhKXt0aGlzLnNldERpc3Bs'@;
put 'YXllZENhbGVuZGFyKG5ldyBsMih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci55ZWFyLGEpKX1jaGFuZ2VZZWFyKGEpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IGwyKGEsdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubW9udGgpKX1tb3ZlVG9OZXh0TW9udGgoKXt0aGlzLnNldERpc3Bs'@;
put 'YXllZENhbGVuZGFyKHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm5leHRNb250aCgpKX1tb3ZlVG9QcmV2aW91c01vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91c01vbnRoKCkpfW1vdmVUb0N1cnJlbnRNb250aCgpe3RoaXMu'@;
put 'ZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKHRoaXMudG9kYXkpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBsMih0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9aW5jcmVtZW50Rm9jdXNE'@;
put 'YXkoYSl7dGhpcy5mb2N1c2VkRGF5PXRoaXMuZm9jdXNlZERheS5pbmNyZW1lbnRCeShhKSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy5mb2N1c2VkRGF5KT90aGlzLl9mb2N1c2VkRGF5Q2hhbmdlLm5leHQodGhpcy5mb2N1c2VkRGF5KTp0aGlzLnNldERp'@;
put 'c3BsYXllZENhbGVuZGFyKG5ldyBsMih0aGlzLmZvY3VzZWREYXkueWVhcix0aGlzLmZvY3VzZWREYXkubW9udGgpKSx0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UubmV4dCgpfXNldERpc3BsYXllZENhbGVuZGFyKGEpe3RoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRXF1YWwoYSl8fCh0'@;
put 'aGlzLl9kaXNwbGF5ZWRDYWxlbmRhcj1hLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlLm5leHQoKSl9aW5pdGlhbGl6ZVRvZGF5c0RhdGUoKXt0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl90b2RheT1uZXcgbGQodGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0RnVsbFll'@;
put 'YXIoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXRNb250aCgpLHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdldERhdGUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30p'@;
put 'LGN9KSgpLFY3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1mb2N1c0NlbGwoYSl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmliZSgo'@;
put 'KT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1t0YWJpbmRleD0iMCJdJyk7ZCYmZC5mb2N1cygpfSl9KX1mb2N1c0lucHV0KGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+dGhpcy5uZ1pvbmVJc1N0YWJsZUluQnJvd3NlcigpLnN1YnNjcmli'@;
put 'ZSgoKT0+YS5mb2N1cygpKSl9ZWxlbWVudElzRm9jdXNlZChhKXtyZXR1cm4gbGEodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PWF9bmdab25lSXNTdGFibGVJbkJyb3dzZXIoKXtyZXR1cm4gdGhpcy5fbmdab25lLm9uU3RhYmxlLmFzT2JzZXJ2YWJsZSgpLnBp'@;
put 'cGUoQTQoKSxIYSgoKT0+bGEodGhpcy5wbGF0Zm9ybUlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihQbyksZnIoQW8pKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqNz0oKCk9Pntj'@;
put 'bGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IGxkKDAsMCwxKSxtYXhEYXRlOm5ldyBsZCg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2Nh'@;
put 'bGVEaXNwbGF5Rm9ybWF0PU5FLHRoaXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD10aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRl'@;
put 'clRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3JtYXQ7cmV0dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJz'@;
put 'ZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IGxkKGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IGxkKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYs'@;
put 'MTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgbGQoZCxoLTEsZil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgbGQoOTk5OSwxMSwzMSl9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4i'@;
put 'Ijtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0cmluZygpOiIwIitkLHY9aD45P2gudG9TdHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09TkU/Zit0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNb'@;
put 'MV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PUVOP3YrdGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhpcy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9'@;
put 'cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVsbDtjb25zdCBkPWEubWF0Y2god1RlKTtpZighZHx8MyE9PWQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2gsZix2XT1kO3JldHVybiB0aGlzLmxvY2FsZURp'@;
put 'c3BsYXlGb3JtYXQ9PT1ORT90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGYsaCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09RU4/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixoLGYpOnRoaXMudmFsaWRhdGVBbmRHZXREYXRlKGgsZix2KX1pbml0aWFsaXplTG9jYWxlRGlzcGxheUZv'@;
put 'cm1hdCgpe2NvbnN0IGE9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMubG9jYWxlRGlzcGxheUZvcm1hdD12VGUudGVzdChhKT9ORTp5VGUudGVzdChhKT9FTjpTVGUsdGhpcy5leHRyYWN0RGVsaW1pdGVycygpfWV4dHJhY3REZWxpbWl0ZXJzKCl7'@;
put 'aWYodGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdCl7Y29uc3QgZD10aGlzLmNsZHJMb2NhbGVEYXRlRm9ybWF0LnJlcGxhY2UoQ1RlLCIiKS5zcGxpdChiVGUpO2QmJjQ9PT1kLmxlbmd0aD90aGlzLmRlbGltaXRlcnM9W2RbMV0sZFsyXV06Y29uc29sZS5lcnJvcigiVW5leHBlY3RlZCBkYXRl'@;
put 'IGZvcm1hdCByZWNlaXZlZC4gRGVsaW1pdGVycyBleHRyYWN0ZWQ6ICIsZCl9fWlzVmFsaWRNb250aChhKXtyZXR1cm4gYT4tMSYmYTwxMn1pc1ZhbGlkRGF0ZShhLGQsaCl7cmV0dXJuIGg+MCYmaDw9UG5lKGEsZCl9dmFsaWRhdGVBbmRHZXREYXRlKGEsZCxoKXtjb25zdCBmPSthLHY9K2Qt'@;
put 'MSxUPStoO2lmKCF0aGlzLmlzVmFsaWRNb250aCh2KXx8IXRoaXMuaXNWYWxpZERhdGUoZix2LFQpKXJldHVybiBudWxsO2NvbnN0IFk9ZnVuY3Rpb24gRVRlKGMpe2lmKGM+OTk5OXx8Yz4xMDAmJmM8OTk5fHxjPDEwKXJldHVybi0xO2lmKGM+OTk5KXJldHVybiBjO2NvbnN0IGw9KG5ldyBE'@;
put 'YXRlKS5nZXRGdWxsWWVhcigpO2xldCBkPWMrMTAwKk1hdGguZmxvb3IobC8xMDApO3JldHVybiBkPmwrMjAmJihkLT0xMDApLGR9KGYpO3JldHVybi0xIT09WT9uZXcgRGF0ZShZLHYsVCk6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIo'@;
put 'SGIpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxOYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZENoYW5nZT1uZXcgbm4sdGhpcy5fZGlydHlDaGFuZ2U9bmV3IG5ufWdldCB0b3VjaGVkQ2hhbmdlKCl7cmV0'@;
put 'dXJuIHRoaXMuX3RvdWNoZWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGRpcnR5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2RpcnR5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLl90b3VjaGVkQ2hhbmdlLm5leHQoKX1tYXJrQXNEaXJ0eSgpe3RoaXMuX2RpcnR5'@;
put 'Q2hhbmdlLm5leHQoKX1zZXREaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZuZT0oKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuX3RvZ2dsZVNlcnZpY2U9ZCx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgZGF5Vmlldygpe3JldHVybiB0aGlzLl9kYXlWaWV3fXNldCBk'@;
put 'YXlWaWV3KGEpe3RoaXMuX2RheVZpZXc9YX1nZXQgZGF5U3RyaW5nKCl7cmV0dXJuIHRoaXMuZGF5Vmlldy5pc1NlbGVjdGVkP3RoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0ZWRMYWJlbCx7RlVMTF9EQVRFOnRoaXMuX2Rh'@;
put 'eVZpZXcuZGF5TW9kZWwudG9EYXRlU3RyaW5nKCl9KTp0aGlzLl9kYXlWaWV3LmRheU1vZGVsLnRvRGF0ZVN0cmluZygpfW9uRGF5Vmlld0ZvY3VzKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsfXNlbGVjdERheSgpe3RoaXMu'@;
put 'X2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQodGhpcy5kYXlWaWV3LmRheU1vZGVsKSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UubWFya0FzRGlydHkoKSx0aGlzLl90b2dnbGVTZXJ2aWNlLm9wZW49ITF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEozKSxzdChEbCksc3QoTmIpLHN0KFJzKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXkiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJkYXkiLCEwKX0saW5wdXRz'@;
put 'OntkYXlWaWV3OltRbi5Ob25lLCJjbHJEYXlWaWV3IiwiZGF5VmlldyJdfSxkZWNsczoyLHZhcnM6MTMsY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihnZSgwLCJidXR0b24iLDApLEh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdGb2N1cygpfSksemUoMSksYmUoKSksMiZhJiYoYnIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5'@;
put 'Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQiLGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxocigidGFiaW5kZXgiLGQuZGF5Vmlldy50YWJJbmRleCkoImFyaWEtY3VycmVudCIsZC5kYXlWaWV3LmlzVG9kYXlzRGF0ZT8iZGF0'@;
put 'ZSI6ImZhbHNlIikoImFyaWEtbGFiZWwiLGQuZGF5U3RyaW5nKSgiYXJpYS1zZWxlY3RlZCIsZC5kYXlWaWV3LmlzU2VsZWN0ZWQpLHdlKCkseHIoIiAiLGQuZGF5Vmlldy5kYXlNb2RlbC5kYXRlLCIgIikpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxIbmU9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlPWgsdGhpcy5fZGF0ZUlPU2VydmljZT1mLHRoaXMuX2VsUmVmPXYsdGhpcy5fc3Vicz1bXSx0aGlzLmdl'@;
put 'bmVyYXRlQ2FsZW5kYXJWaWV3KCksdGhpcy5pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpfWdldCBsb2NhbGVEYXlzKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlRGF5c31nZXQgY2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRp'@;
put 'c3BsYXllZENhbGVuZGFyfWdldCBzZWxlY3RlZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3VzZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRo'@;
put 'aXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1vbktleURvd24o'@;
put 'YSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChxZChhLmtleSkpe2Nhc2Uga28uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNlIGtvLkFycm93RG93bjphLnByZXZlbnREZWZh'@;
put 'dWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2Uga28uQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9jdXNEYXkoLTEpO2JyZWFrO2Nhc2Uga28uQXJy'@;
put 'b3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJD'@;
put 'aGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxl'@;
put 'RGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKX1nZW5lcmF0ZUNhbGVuZGFyVmll'@;
put 'dygpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWw9bmV3IEFUZSh0aGlzLmNhbGVuZGFyLHRoaXMuc2VsZWN0ZWREYXksdGhpcy5mb2N1c2VkRGF5LHRoaXMudG9kYXksdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5maXJzdERheU9mV2Vlayx0aGlzLl9kYXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0'@;
put 'ZXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChIYiksc3QoSjMpLHN0KFY3KSxzdChqNyksc3QoJGkpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihh'@;
put 'LGQpezEmYSYmSHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwi'@;
put 'Y2FsZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQs'@;
put 'Im5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihnZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGJ0KDIsT0NlLDMsMiwidGgiLDIpLGJlKCksYnQoMyxG'@;
put 'Q2UsMiwxLCJ0ciIsMyksYmUoKSksMiZhJiYod2UoMiksUGUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksd2UoKSxQZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdNb2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltMcyxGbmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFZFPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSx0aGlzLl9kb2N1bWVudCYmKHRoaXMuX2lzVXNlckFnZW50TW9iaWxlPU1UZS50ZXN0KGEuZGVmYXVsdFZpZXcubmF2aWdhdG9yLnVzZXJBZ2VudCksdGhpcy5faW5u'@;
put 'ZXJXaWR0aD1hLmRlZmF1bHRWaWV3LmlubmVyV2lkdGgpfWdldCBpc0VuYWJsZWQoKXtyZXR1cm4hKHRoaXMuX2RvY3VtZW50JiZ0aGlzLl9pbm5lcldpZHRoPDc2OCYmdGhpcy5faXNVc2VyQWdlbnRNb2JpbGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKShmcigkcykpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEI3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aW9uPW0xWyJib3R0b20tbGVmdCJdLHRoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn1nZXQgaXNE'@;
put 'YXlWaWV3KCl7cmV0dXJuIkRBWVZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4iWUVBUlZJRVciPT09dGhpcy5fY3VycmVudFZpZXd9Z2V0IGlzTW9udGhWaWV3KCl7cmV0dXJuIk1PTlRIVklFVyI9PT10aGlzLl9jdXJyZW50Vmlld31jaGFuZ2VUb01v'@;
put 'bnRoVmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJNT05USFZJRVcifWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iWUVBUlZJRVcifWNoYW5nZVRvRGF5Vmlldygpe3RoaXMuX2N1cnJlbnRWaWV3PSJEQVlWSUVXIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp'@;
put 'e3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTm5lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNl'@;
put 'PWQsdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1mLHRoaXMuX2VsUmVmPXYsdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg9dGhpcy5jYWxlbmRhck1vbnRoSW5kZXh9Z2V0IG1vbnRoTmFtZXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVs'@;
put 'cGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlfWdldCBjYWxlbmRhck1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRofW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXND'@;
put 'ZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1xZChhLmtleSk7ZD09PWtvLkFycm93VXAmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PjA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC0tLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1Nl'@;
put 'cnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PWtvLkFycm93RG93biYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleCsrLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMu'@;
put 'X2VsUmVmKSk6ZD09PWtvLkFycm93UmlnaHQmJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDY/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLl9mb2N1c2VkTW9udGhJbmRleCs2LHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRo'@;
put 'aXMuX2VsUmVmKSk6ZD09PWtvLkFycm93TGVmdCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+NSYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleD10aGlzLl9mb2N1c2VkTW9udGhJbmRleC02LHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxs'@;
put 'KHRoaXMuX2VsUmVmKSl9fWNoYW5nZU1vbnRoKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VNb250aChhKSx0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIGE9PT10aGlzLl9mb2N1c2VkTW9udGhJbmRl'@;
put 'eD8wOi0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChCNyksc3QoSGIpLHN0KEozKSxzdChWNyksc3QoJGkpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vbnRocGlja2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJp'@;
put 'bmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgia2V5ZG93biIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25LZXlEb3duKGYpfSksMiZhJiZicigibW9udGhwaWNrZXIiLCEwKX0sZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImNhbGVuZGFyLWJ0biBt'@;
put 'b250aCIsMywiaXMtc2VsZWN0ZWQiLCJjbGljayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJmJ0KDAsSENlLDIsNCwiYnV0dG9uIiwwKSwyJmEmJlBl'@;
put 'KCJuZ0Zvck9mIixkLm1vbnRoTmFtZXMpfSxkZXBlbmRlbmNpZXM6W0xzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBWYntjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9Z2V0IG1pZGRsZVllYXIoKXty'@;
put 'ZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHREZWNhZGUoKXtyZXR1cm4gbmV3IFZiKHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IFZiKHRoaXMueWVhci0xMCl9Y3VycmVudERlY2FkZSgpe3JldHVy'@;
put 'biBuZXcgVmIoKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJSYW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdlPXRoaXMuZ2VuZXJhdGVSYW5n'@;
put 'ZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQsaCk9PmgrbCl9fWxldCBqbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuX3ZpZXdNYW5hZ2Vy'@;
put 'U2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IFZiKHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNhbGVuZGFyWWVhcn1nZXQgY2Fs'@;
put 'ZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3Qg'@;
put 'ZD1xZChhLmtleSk7ZD09PWtvLkFycm93VXA/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC0xKSk6ZD09PWtvLkFycm93RG93bj8oYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT1rby5BcnJvd1JpZ2h0Pyhh'@;
put 'LnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSg1KSk6ZD09PWtvLkFycm93TGVmdCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KC01KSl9fWNoYW5nZVllYXIoYSl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNoYW5n'@;
put 'ZVllYXIoYSksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5S'@;
put 'YW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2Fk'@;
put 'ZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVs'@;
put 'LmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwubWlkZGxlWWVhciksdGhpcy5fZm9jdXNlZFllYXI9PT1hPzA6LTF9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIr'@;
put 'YSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9j'@;
put 'dXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEozKSxzdChCNyksc3QoVjcpLHN0KCRpKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIteWVhcnBp'@;
put 'Y2tlciJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmYnIoInllYXJwaWNrZXIiLCEwKX0sZGVjbHM6OSx2YXJzOjcsY29uc3RzOltbMSwieWVhci1zd2l0Y2hl'@;
put 'cnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdLFsxLCJ5ZWFycyJd'@;
put 'LFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIHllYXIiLDMsImlzLXNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxk'@;
put 'KXsxJmEmJihnZSgwLCJkaXYiLDApKDEsImJ1dHRvbiIsMSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzRGVjYWRlKCl9KSxKdCgyLCJjZHMtaWNvbiIsMiksYmUoKSxnZSgzLCJidXR0b24iLDEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50'@;
put 'RGVjYWRlKCl9KSxKdCg0LCJjZHMtaWNvbiIsMyksYmUoKSxnZSg1LCJidXR0b24iLDEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0RGVjYWRlKCl9KSxKdCg2LCJjZHMtaWNvbiIsNCksYmUoKSgpLGdlKDcsImRpdiIsNSksYnQoOCxOQ2UsMiw0LCJidXR0b24iLDYpLGJl'@;
put 'KCkpLDImYSYmKHdlKCksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksd2UoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZSksd2UoKSxocigiYXJpYS1sYWJlbCIsZC5j'@;
put 'b21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLHdlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudERlY2FkZSksd2UoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNh'@;
put 'ZGUpLHdlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dERlY2FkZSksd2UoMiksUGUoIm5nRm9yT2YiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlKSl9LGRlcGVuZGVuY2llczpbTHMsS3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEJuZT0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zn1nZXQgbW9udGhBdHRyU3RyaW5nKCl7cmV0dXJu'@;
put 'IHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyU2VsZWN0TW9udGhUZXh0LHtDQUxFTkRBUl9NT05USDp0aGlzLmNhbGVuZGFyTW9udGh9KX1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNl'@;
put 'KHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyTW9udGgoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNBYmJy'@;
put 'ZXZpYXRlZFt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIubW9udGhdfWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl92'@;
put 'aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9Nb250aFZpZXcoKX1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvWWVhclZpZXcoKX1uZXh0TW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvTmV4dE1vbnRoKCl9cHJldmlv'@;
put 'dXNNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c01vbnRoKCl9Y3VycmVudE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb0N1cnJlbnRNb250aCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKShzdChCNyksc3QoSjMpLHN0KEhiKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF5cGlja2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiZGF5cGlja2VyIiwhMCl9LGRlY2xzOjE4LHZh'@;
put 'cnM6MTQsY29uc3RzOltbMSwiY2xyLXNyLW9ubHkiXSxbMSwiY2FsZW5kYXItaGVhZGVyIl0sWzEsImNhbGVuZGFyLXBpY2tlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsIm1vbnRocGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJj'@;
put 'YWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsi'@;
put 'c2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZ2UoMCwiZGl2IiwwKSx6ZSgxKSxiZSgpLGdlKDIsImRpdiIsMSkoMywiZGl2IiwyKSg0LCJidXR0b24iLDMpLEh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gZC5jaGFuZ2VUb01vbnRoVmlldygpfSksemUoNSksYmUoKSxnZSg2LCJidXR0b24iLDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jaGFuZ2VUb1llYXJWaWV3KCl9KSx6ZSg3KSxiZSgpKCksZ2UoOCwiZGl2Iiw1KSg5LCJidXR0b24iLDYpLEh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wcmV2aW91c01vbnRoKCl9KSxKdCgxMCwiY2RzLWljb24iLDcpLGJlKCksZ2UoMTEsImJ1dHRvbiIsNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmN1cnJlbnRNb250aCgpfSksSnQoMTIsImNkcy1pY29uIiw4KSxiZSgpLGdlKDEzLCJi'@;
put 'dXR0b24iLDYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5uZXh0TW9udGgoKX0pLEp0KDE0LCJjZHMtaWNvbiIsOSksYmUoKSgpKCksSnQoMTUsImNsci1jYWxlbmRhciIpLGdlKDE2LCJkaXYiLDApLHplKDE3KSxiZSgpKSwyJmEmJih3ZSgpLHByKGQuY29tbW9uU3RyaW5ncy5r'@;
put 'ZXlzLm1vZGFsQ29udGVudFN0YXJ0KSx3ZSgzKSxocigiYXJpYS1sYWJlbCIsZC5tb250aEF0dHJTdHJpbmcpKCJ0aXRsZSIsZC5tb250aEF0dHJTdHJpbmcpLHdlKCkseHIoIiAiLGQuY2FsZW5kYXJNb250aCwiICIpLHdlKCksaHIoImFyaWEtbGFiZWwiLGQueWVhckF0dHJTdHJpbmcpKCJ0'@;
put 'aXRsZSIsZC55ZWFyQXR0clN0cmluZyksd2UoKSx4cigiICIsZC5jYWxlbmRhclllYXIsIiAiKSx3ZSgyKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLHdlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRl'@;
put 'cGlja2VyUHJldmlvdXNNb250aCksd2UoKSxocigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnRNb250aCksd2UoKSxocigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLHdlKCksaHIoImFyaWEtbGFi'@;
put 'ZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0TW9udGgpLHdlKCksaHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSx3ZSgzKSxwcihkLmNvbW1vblN0cmluZ3Mua2V5cy5tb2RhbENvbnRlbnRFbmQpKX0sZGVwZW5kZW5jaWVz'@;
put 'OltLcyxIbmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFluZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3TWFuYWdlclNlcnZpY2U9ZH1nZXQgaXNNb250aFZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2Uu'@;
put 'aXNNb250aFZpZXd9Z2V0IGlzWWVhclZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNZZWFyVmlld31nZXQgaXNEYXlWaWV3KCl7cmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzRGF5Vmlld319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy'@;
put 'biBuZXcoYXx8Yykoc3QoUnMpLHN0KEI3KSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiZGlhbG9nIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm'@;
put 'JihocigiYXJpYS1tb2RhbCIsITApKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyRGlhbG9nTGFiZWwpLGJyKCJkYXRlcGlja2VyIiwhMCkpfSxmZWF0dXJlczpbR2koW1Y3XSldLGRlY2xzOjMsdmFyczozLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJmJ0KDAsVkNlLDEsMCwiY2xyLW1vbnRocGlja2VyIiwwKSgxLGpDZSwxLDAsImNsci15ZWFycGlja2VyIiwwKSgyLEJDZSwxLDAsImNsci1kYXlwaWNrZXIiLDApLDImYSYmKFBlKCJuZ0lmIixkLmlzTW9udGhWaWV3KSx3ZSgpLFBlKCJuZ0lmIixkLmlzWWVh'@;
put 'clZpZXcpLHdlKCksUGUoIm5nSWYiLGQuaXNEYXlWaWV3KSl9LGRlcGVuZGVuY2llczpbcWksTm5lLGpuZSxCbmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGpiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBJN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lLGtlLFdlLEplKXtz'@;
put 'dXBlcihKZSxrZSxfZSxXZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMudG9nZ2xlU2VydmljZT1kLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWgsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9Zix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9dix0aGlzLmRhdGVJT1NlcnZpY2U9'@;
put 'VCx0aGlzLmNvbW1vblN0cmluZ3M9WSx0aGlzLmZvY3VzU2VydmljZT1yZSx0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1mZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9X2UsdGhpcy5sYXlvdXRTZXJ2aWNlPWtlLHRoaXMubmdDb250cm9sU2VydmljZT1XZSx0aGlzLmlmQ29udHJvbFN0YXRl'@;
put 'U2VydmljZT1KZSx0aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzQ2hhbmdlLnN1YnNjcmliZSh0dD0+e3RoaXMuZm9jdXM9dHR9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uu'@;
put 'c3Vic2NyaWJlKCgpPT57dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc1RvdWNoZWQoKX0pKX1zZXQgY2xyUG9zaXRpb24oYSl7YSYmbTFbYV0mJih0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbj1tMVthXSl9c2V0IGFjdGlvbkJ1dHRvbihhKXt0aGlzLnRvZ2dsZUJ1'@;
put 'dHRvbj1hfWdldCBwb3BvdmVyUG9zaXRpb24oKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb259Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59Z2V0IGlzRW5hYmxlZCgpe3JldHVybiB0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZS5p'@;
put 'c0VuYWJsZWR9Z2V0IGlzSW5wdXREYXRlRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wuZGlzYWJsZWR8fHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZSYmdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpc2FibGVkfW5nQWZ0ZXJWaWV3SW5pdCgpe3Ro'@;
put 'aXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57YT90aGlzLmluaXRpYWxpemVDYWxlbmRhcigpOnRoaXMudG9nZ2xlQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlz'@;
put 'Lmxpc3RlbkZvckRhdGVDaGFuZ2VzKCkpfWdldFRvZ2dsZUJ1dHRvbkxhYmVsKGEpe2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhLnRvRGF0ZSgpKTtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9u'@;
put 'U3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJUb2dnbGVDaGFuZ2VEYXRlTGFiZWwse1NFTEVDVEVEX0RBVEU6ZH0pfXJldHVybiB0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hvb3NlRGF0ZUxhYmVsfWxpc3RlbkZvckRhdGVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGF0'@;
put 'ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoWjUodGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkpKS5zdWJzY3JpYmUoYT0+e2lmKHRoaXMuaXNFbmFibGVkKXtjb25zdCBkPXRoaXMuZ2V0VG9nZ2xlQnV0dG9uTGFiZWwoYSksaD10aGlzLnRv'@;
put 'Z2dsZUJ1dHRvbi5uYXRpdmVFbGVtZW50O3RoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsImFyaWEtbGFiZWwiLGQpLHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGgsInRpdGxlIixkKX19KX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pbml0'@;
put 'aWFsaXplQ2FsZW5kYXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoY3MpLHN0KERsKSxzdChKMyksc3QoVkUpLHN0KE5iKSxzdChqNyksc3QoUnMpLHN0KE1OKSxzdChCNyksc3QodGgpLHN0KFgzLDgpLHN0KGcxKSxzdChlaCkpfSxjLlx1'@;
put 'MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZVbyhZQ2UsNSksMiZhKXtsZXQgaDtNaShoPUNpKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9fSxob3N0VmFyczo4LGhvc3RCaW5k'@;
put 'aW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0saW5wdXRzOntjbHJQb3Np'@;
put 'dGlvbjoiY2xyUG9zaXRpb24ifSxmZWF0dXJlczpbR2koW1FkLEhiLHRoLE1OLGcxLGo3LEozLFZFLE5iLEI3LGVoXSksWHUoW3EzXSksc29dLG5nQ29udGVudFNlbGVjdG9yczpVQ2UsZGVjbHM6MTMsdmFyczoxNCxjb25zdHM6W1siYWN0aW9uQnV0dG9uIiwiIl0sWzQsIm5nSWYiXSxbMSwi'@;
put 'Y2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbHJQb3BvdmVyQW5jaG9yIiwiIiwxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHItaW5wdXQtZ3JvdXAiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwiY2xhc3MiLCJjbHIt'@;
put 'aW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIiw0LCJuZ0lmIl0sWyJjZGtUcmFwRm9jdXMiLCIiLDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250'@;
put 'ZW50U2Nyb2xsVG9DbG9zZSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJj'@;
put 'aGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uIiwzLCJkaXNhYmxlZCJdLFsic3RhdHVz'@;
put 'IiwiaW5mbyIsInNoYXBlIiwiY2FsZW5kYXIiXSxbImNka1RyYXBGb2N1cyIsIiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIs'@;
put 'InN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoekNlKSxPcigwKSxidCgxLFpDZSwxLDAsImxhYmVsIiwxKSxnZSgyLCJkaXYiLDIpKDMsImRpdiIsMykoNCwiZGl2Iiw0'@;
put 'KSxPcig1LDEpLGJ0KDYsV0NlLDMsMSwiYnV0dG9uIiw1KSg3LEdDZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksYmUoKSxidCg4LCRDZSwxLDAsImNkcy1pY29uIiw3KSg5LHFDZSwxLDAsImNkcy1pY29uIiw4KSxiZSgpLGJ0KDEwLEtDZSwxLDAsIm5nLWNvbnRlbnQi'@;
put 'LDEpKDExLFhDZSwxLDAsIm5nLWNvbnRlbnQiLDEpKDEyLEpDZSwxLDAsIm5nLWNvbnRlbnQiLDEpLGJlKCkpLDImYSYmKHdlKCksUGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksd2UoKSxQZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksd2UoMiksYnIoImNsci1mb2N1cyIs'@;
put 'ZC5mb2N1cyksd2UoMiksUGUoIm5nSWYiLGQuaXNFbmFibGVkKSx3ZSgpLFBlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9w'@;
put 'b3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksd2UoKSxQZSgibmdJZiIsZC5zaG93SW52YWxpZCksd2UoKSxQZSgibmdJZiIsZC5zaG93VmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd0hlbHBlciksd2UoKSxQZSgibmdJZiIsZC5zaG93SW52YWxpZCksd2UoKSxQZSgibmdJZiIsZC5z'@;
put 'aG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxINyxJYixQYixPYixLcyxYcyxZbmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEROPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lLGtlLFdlLEplKXtzdXBlcihhLGpiLGQs'@;
put 'dixmLGgpLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5jb250cm9sPXYsdGhpcy5jb250YWluZXI9VCx0aGlzLmRhdGVJT1NlcnZpY2U9WSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1yZSx0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1mZSx0aGlzLmRhdGVGb3JtQ29u'@;
put 'dHJvbFNlcnZpY2U9X2UsdGhpcy5wbGF0Zm9ybUlkPWtlLHRoaXMuZm9jdXNTZXJ2aWNlPVdlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1KZSx0aGlzLmRhdGVDaGFuZ2U9bmV3IElyKCExKSx0aGlzLmluZGV4PTF9c2V0IGRhdGUoYSl7dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1h'@;
put 'JiZ0aGlzLnVwZGF0ZURhdGUodGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpKSx0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZXx8KHRoaXMuaW5pdGlhbENsckRhdGVJbnB1dFZhbHVlPWEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhp'@;
put 'cy50cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVG'@;
put 'b3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWQ6bnVsbH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2Uuc2V0RGlzYWJsZWQoYTIoYSkpfWdldCBwbGFjZWhvbGRlclRleHQoKXtyZXR1cm4gdGhpcy5wbGFjZWhv'@;
put 'bGRlcj90aGlzLnBsYWNlaG9sZGVyOnRoaXMuZGF0ZUlPU2VydmljZS5wbGFjZWhvbGRlclRleHR9Z2V0IGlucHV0VHlwZSgpe3JldHVybiBsYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyJkYXRlIjoidGV4dCJ9bmdPbkluaXQoKXtzdXBlci5uZ09u'@;
put 'SW5pdCgpLHRoaXMucG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvckNvbnRyb2xWYWx1ZUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZv'@;
put 'clRvdWNoQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yRGlydHlDaGFuZ2VzKCksdGhpcy5saXN0ZW5Gb3JJbnB1dFJlZm9jdXMoKSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5wcm9jZXNzSW5pdGlhbElucHV0cygpfXNldEZvY3VzU3RhdGVzKCl7dGhpcy5zZXRGb2N1cyghMCl9dHJpZ2dlclZh'@;
put 'bGlkYXRpb24oKXtzdXBlci50cmlnZ2VyVmFsaWRhdGlvbigpLHRoaXMuc2V0Rm9jdXMoITEpfW9uVmFsdWVDaGFuZ2UoYSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52YWx1ZSk7aWYodGhpcy51c2luZ0NsYXJpdHlEYXRlcGlja2Vy'@;
put 'KCkmJmQpdGhpcy51cGRhdGVEYXRlKGQsITApO2Vsc2UgaWYodGhpcy51c2luZ05hdGl2ZURhdGVwaWNrZXIoKSl7Y29uc3RbaCxmLHZdPWEudmFsdWUuc3BsaXQoIi0iKTt0aGlzLnVwZGF0ZURhdGUobmV3IERhdGUoK2gsK2YtMSwrdiksITApfWVsc2UgdGhpcy5lbWl0RGF0ZU91dHB1dChu'@;
put 'dWxsKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMu'@;
put 'Zm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX10cmlnZ2VyQ29udHJvbFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0p'@;
put 'LHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9cG9wdWxhdGVTZXJ2aWNlc0Zyb21Db250YWluZXJDb21wb25lbnQoKXt0aGlzLmNvbnRhaW5lcnx8KHRoaXMuZGF0ZUlPU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRh'@;
put 'aW5lcihqNyksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoSjMpLHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlPXRoaXMuZ2V0UHJvdmlkZXJGcm9tQ29udGFpbmVyKFZFKSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9dGhp'@;
put 'cy5nZXRQcm92aWRlckZyb21Db250YWluZXIoTmIpKX1wcm9jZXNzSW5pdGlhbElucHV0cygpe3RoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCk/dGhpcy51cGRhdGVEYXRlKHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyh0aGlzLmNvbnRyb2wudmFs'@;
put 'dWUpKTp0aGlzLnVwZGF0ZURhdGUodGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFsdWUpfXVwZGF0ZURhdGUoYSxkPSExKXtjb25zdCBoPXRoaXMuZ2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKTtkP3RoaXMuZW1pdERhdGVPdXRwdXQoaCk6dGhpcy5wcmV2aW91c0RhdGVDaGFuZ2U9aCx0'@;
put 'aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWg/bmV3IGxkKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCkpOm51bGwpLHRoaXMudXBkYXRlSW5wdXQoaCl9dXBkYXRlSW5wdXQoYSl7aWYoYSl7'@;
put 'Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UudG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpO3RoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/KGEuc2V0TWludXRlcyhhLmdldE1pbnV0ZXMoKS1hLmdldFRpbWV6b25lT2Zmc2V0KCkpLHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHko'@;
put 'dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZUFzRGF0ZSIsYSkpOnRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkmJmQhPT10aGlzLmNvbnRyb2wudmFsdWU/dGhpcy5jb250cm9sLmNvbnRyb2wuc2V0VmFsdWUoZCk6dGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5h'@;
put 'dGl2ZUVsZW1lbnQsInZhbHVlIixkKX1lbHNlIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsIiIpfWdldFZhbGlkRGF0ZVZhbHVlRnJvbURhdGUoYSl7aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2Vydmlj'@;
put 'ZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYSk7cmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhkKX1yZXR1cm4gbnVsbH1lbWl0RGF0ZU91dHB1dChhKXshZnVuY3Rpb24gVFRlKGMsbCl7cmV0dXJuIGMgaW5zdGFuY2VvZiBEYXRlJiZs'@;
put 'IGluc3RhbmNlb2YgRGF0ZSYmYy5nZXRGdWxsWWVhcigpPT09bC5nZXRGdWxsWWVhcigpJiZjLmdldE1vbnRoKCk9PT1sLmdldE1vbnRoKCkmJmMuZ2V0RGF0ZSgpPT09bC5nZXREYXRlKCl9KGEsdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UpPyh0aGlzLmRhdGVDaGFuZ2UuZW1pdChhKSx0aGlz'@;
put 'LnByZXZpb3VzRGF0ZUNoYW5nZT1hKTohYSYmdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UmJih0aGlzLmRhdGVDaGFuZ2UuZW1pdChudWxsKSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZT1udWxsKX1kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKXtyZXR1cm4hIXRoaXMuY29udHJvbH1saXN0ZW5G'@;
put 'b3JDb250cm9sVmFsdWVDaGFuZ2VzKCl7cmV0dXJuIE5vKHRoaXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpLnBpcGUoSGEoYT0+YSksdTEoKCk9PnRoaXMuY29udHJvbC52YWx1ZUNoYW5nZXMpLEhhKCgpPT4hdGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmVsZW1lbnRJc0ZvY3Vz'@;
put 'ZWQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSkpLnN1YnNjcmliZShhPT50aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGEpKSl9bGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0'@;
put 'aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy51cGRhdGVEYXRlKGEudG9EYXRlKCksITApKX1saXN0ZW5Gb3JUb3VjaENoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2UucGlwZShIYSgoKT0+dGhpcy5k'@;
put 'YXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5jb250cm9sLmNvbnRyb2wubWFya0FzVG91Y2hlZCgpKX1saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLmRpcnR5Q2hhbmdlLnBpcGUoSGEoKCk9PnRo'@;
put 'aXMuZGF0ZXBpY2tlckhhc0Zvcm1Db250cm9sKCkpKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBc0RpcnR5KCkpfWxpc3RlbkZvcklucHV0UmVmb2N1cygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKEhh'@;
put 'KGE9PiEhYSkpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHBzKSxzdChwYSksc3QoJGkpLHN0KGNzKSxz'@;
put 'dChUMCwxMCksc3QoamIsOCksc3QoajcsOCksc3QoSjMsOCksc3QoVkUsOCksc3QoTmIsOCksc3QoQW8pLHN0KE1OLDgpLHN0KFY3KSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24o'@;
put 'YSxkKXsxJmEmJkh0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSks'@;
put 'MiZhJiYoc2YoImRpc2FibGVkIixkLmRpc2FibGVkKSxocigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpLGJyKCJjbHItaW5wdXQiLCEwKSl9LGlucHV0czp7cGxhY2Vob2xkZXI6InBsYWNlaG9sZGVyIixkYXRlOltRbi5Ob25lLCJjbHJEYXRl'@;
put 'IiwiZGF0ZSJdLG1pbjoibWluIixtYXg6Im1heCIsZGlzYWJsZWQ6ImRpc2FibGVkIn0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltHaShbVjddKSxzb119KSxjfSkoKSxBTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZGF0ZUlPU2Vy'@;
put 'dmljZT1hfXZhbGlkYXRlKGEpe2lmKHRoaXMuZGF0ZUlPU2VydmljZSl7Y29uc3QgZD10aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYS52YWx1ZSksaD10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJsZWREYXRlcy5taW5EYXRlLnRvRGF0ZSgpLGY9dGhpcy5k'@;
put 'YXRlSU9TZXJ2aWNlLmRpc2FibGVkRGF0ZXMubWF4RGF0ZS50b0RhdGUoKTtpZihkJiZkPHRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCkpcmV0dXJue21pbjp7bWluOmgudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmQudG9Mb2NhbGVEYXRlU3Ry'@;
put 'aW5nKCl9fTtpZihkJiZkPnRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1heERhdGUudG9EYXRlKCkpcmV0dXJue21heDp7bWF4OmYudG9Mb2NhbGVEYXRlU3RyaW5nKCksYWN0dWFsOmQudG9Mb2NhbGVEYXRlU3RyaW5nKCl9fX1yZXR1cm4gbnVsbH19cmV0dXJuIGMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoajcsOCkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJEYXRlIiwiIl1dLGZlYXR1cmVzOltHaShbe3Byb3ZpZGU6anUsdXNlRXhpc3Rpbmc6YyxtdWx0aTohMH1dKV19KSxjfSkoKSxJVGU9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKFdkLEdkLGc3LEV5ZSxUeWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxDTixQRSxK'@;
put 'ZCxGYixiYSxTdV19KSxjfSkoKTtuZXcgWXIodm9pZCAwKTtsZXQgUFRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhEeWUsQXllLFdkLEdkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0'@;
put 'eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sQ2MsYmEsU3UsU3VdfSksY30pKCksTE49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8td3JhcHBlciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLFhzLDcpLDImYSl7bGV0IGY7TWkoZj1DaSgp'@;
put 'KSYmKGQubGFiZWw9Zi5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNsci1yYWRpby13cmFwcGVyIiwhMCl9LGZlYXR1cmVzOltHaShbUWRdKV0sbmdDb250ZW50U2VsZWN0b3JzOmVTZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1s0LCJu'@;
put 'Z0lmIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoUUNlKSxPcigwKSxPcigxLDEpLGJ0KDIsdFNlLDEsMCwibGFiZWwiLDApKSwyJmEmJih3ZSgyKSxQZSgibmdJZiIsIWQubGFiZWwpKX0sZGVwZW5kZW5jaWVzOltxaSxYc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSU49'@;
put 'KCgpPT57Y2xhc3MgYyBleHRlbmRzIFI3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxMTixkLGgsZix2KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QocHMpLHN0KHBhKSxzdChUMCwxMCksc3QoY3MpLHN0KCRpKSl9LGMuXHUwMjc1'@;
put 'ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclJhZGlvIiwiIl1dLGZlYXR1cmVzOltzb119KSxjfSkoKSxGVGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEk3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJv'@;
put 'bENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2Yg'@;
put 'YT8iZmFsc2UiIT09YTohIWF9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXRBcmlhUm9sZXMoKX1zZXRBcmlhUm9sZXMoKXt0aGlzLnJvbGU9dGhpcy5yYWRpb3MubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyko'@;
put 'c3QoWDMsOCksc3QodGgpLHN0KGcxKSxzdChlaCkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItcmFkaW8tY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsSU4sNSksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYo'@;
put 'ZC5yYWRpb3M9Zil9fSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIixkLnJvbGUpLGJyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNh'@;
put 'YmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKSl9LGlucHV0czp7Y2xySW5saW5lOiJjbHJJbmxpbmUifSxmZWF0dXJlczpbR2koW2cxLGVoLHRoLGdnXSksc29dLG5nQ29udGVudFNlbGVjdG9yczpyU2UsZGVjbHM6MTAsdmFyczo5LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRy'@;
put 'b2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzEsImNsci1zdWJ0ZXh0LXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUi'@;
put 'LDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoblNlKSxPcigwKSxidCgxLGlTZSwx'@;
put 'LDAsImxhYmVsIiwwKSxnZSgyLCJkaXYiLDEpLE9yKDMsMSksZ2UoNCwiZGl2IiwyKSxidCg1LG9TZSwxLDAsIm5nLWNvbnRlbnQiLDApKDYsc1NlLDEsMCwiY2RzLWljb24iLDMpKDcsYVNlLDEsMCwiY2RzLWljb24iLDQpKDgsbFNlLDEsMCwibmctY29udGVudCIsMCkoOSxjU2UsMSwwLCJu'@;
put 'Zy1jb250ZW50IiwwKSxiZSgpKCkpLDImYSYmKHdlKCksUGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksd2UoKSxicigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSksUGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLHdlKDMpLFBlKCJuZ0lmIixkLnNob3dIZWxw'@;
put 'ZXIpLHdlKCksUGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W1VjLHFpLFhzLEtzXSxlbmNhcHN1bGF0aW9uOjJ9'@;
put 'KSxjfSkoKSxIVGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKFdkLEdkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sU3Us'@;
put 'UEUsYmEsU3VdfSksY30pKCksTlRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhXZCxHZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9y'@;
put 'dHM6W21vLFN1LFBFLGJhLFN1XX0pLGN9KSgpLFk3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBJN3tjb25zdHJ1Y3RvcihhLGQsaCxmKXtzdXBlcihmLGEsZCxoKSx0aGlzLmxheW91dFNlcnZpY2U9YSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0'@;
put 'aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1mLHRoaXMubXVsdGk9ITF9bmdPbkluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbENoYW5nZXMuc3Vic2NyaWJlKGE9PnthJiYodGhpcy5tdWx0aT1hLnZhbHVlQWNjZXNzb3IgaW5zdGFu'@;
put 'Y2VvZiB1Yix0aGlzLmNvbnRyb2w9YSl9KSl9d3JhcHBlckNsYXNzKCl7cmV0dXJuIHRoaXMubXVsdGk/ImNsci1tdWx0aXNlbGVjdC13cmFwcGVyIjoiY2xyLXNlbGVjdC13cmFwcGVyIn19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoWDMsOCks'@;
put 'c3QodGgpLHN0KGcxKSxzdChlaCkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2VsZWN0LWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLHViLDUpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQubXVsdGlw'@;
put 'bGU9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsbnVsbD09ZC5jb250cm9sP251bGw6ZC5jb250cm9sLmRpc2FibGVkKSgiY2xyLXJvdyIsZC5h'@;
put 'ZGRHcmlkKCkpfSxmZWF0dXJlczpbR2koW2VoLGcxLFFkLHRoXSksc29dLG5nQ29udGVudFNlbGVjdG9yczpkU2UsZGVjbHM6MTAsdmFyczo4LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWzMsIm5nQ2xhc3MiXSxbImNsYXNzIiwi'@;
put 'Y2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2Vz'@;
put 'cyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nl'@;
put 'c3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkodVNlKSxPcigwKSxidCgxLGhTZSwxLDAsImxhYmVsIiwwKSxnZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksT3IoNCwxKSxidCg1LGZTZSwxLDAsImNk'@;
put 'cy1pY29uIiwzKSg2LHBTZSwxLDAsImNkcy1pY29uIiw0KSxiZSgpLGJ0KDcsbVNlLDEsMCwibmctY29udGVudCIsMCkoOCxnU2UsMSwwLCJuZy1jb250ZW50IiwwKSg5LF9TZSwxLDAsIm5nLWNvbnRlbnQiLDApLGJlKCkpLDImYSYmKHdlKCksUGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdy'@;
put 'aWQoKSksd2UoKSxQZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksd2UoKSxQZSgibmdDbGFzcyIsZC53cmFwcGVyQ2xhc3MoKSksd2UoMiksUGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dIZWxwZXIp'@;
put 'LHdlKCksUGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbVWMscWksS3MsWHNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHo3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBSN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1'@;
put 'cGVyKGEsWTcsZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChwcyksc3QocGEpLHN0KFQwLDEwKSxzdChjcyksc3QoJGkpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU2Vs'@;
put 'ZWN0IiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiY2xyLXNlbGVjdCIsITApfSxmZWF0dXJlczpbc29dfSksY30pKCksVlRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhXZCxHZCl9fXJldHVybiBjLlx1MDI3NWZh'@;
put 'Yz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLENjLGJhLFN1LFN1XX0pLGN9KSgpLHpuZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSTd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQg'@;
put 'bDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPWlhKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGV4dGFyZWEtY29udGFpbmVyIl1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiY2xy'@;
put 'LWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltHaShbZWgsZzEsUWQsdGhdKSxzb10sbmdDb250ZW50U2VsZWN0b3JzOnlT'@;
put 'ZSxkZWNsczoxMCx2YXJzOjcsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLXRleHRhcmVhLXdyYXBwZXIiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0'@;
put 'YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1h'@;
put 'dGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRl'@;
put 'bXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkodlNlKSxPcigwKSxidCgxLGJTZSwxLDAsImxhYmVsIiwwKSxnZSgyLCJkaXYiLDEpKDMsImRpdiIsMiksT3IoNCwxKSxidCg1LHdTZSwxLDAsImNkcy1pY29uIiwzKSg2LE1TZSwxLDAsImNkcy1pY29uIiw0KSxiZSgpLGJ0KDcsQ1NlLDEs'@;
put 'MCwibmctY29udGVudCIsMCkoOCxTU2UsMSwwLCJuZy1jb250ZW50IiwwKSg5LHhTZSwxLDAsIm5nLWNvbnRlbnQiLDApLGJlKCkpLDImYSYmKHdlKCksUGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksd2UoKSxQZSgibmdDbGFzcyIsZC5jb250cm9sQ2xhc3MoKSksd2UoMyksUGUo'@;
put 'Im5nSWYiLGQuc2hvd0ludmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSx3ZSgpLFBlKCJuZ0lmIixkLnNob3dIZWxwZXIpLHdlKCksUGUoIm5nSWYiLGQuc2hvd0ludmFsaWQpLHdlKCksUGUoIm5nSWYiLGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbVWMscWksS3MsWHNd'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGpUZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgUjd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLHpuZSxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHBz'@;
put 'KSxzdChwYSksc3QoVDAsMTApLHN0KGNzKSxzdCgkaSkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUZXh0YXJlYSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImNsci10ZXh0YXJlYSIsITApfSxmZWF0dXJl'@;
put 'czpbc29dfSksY30pKCksQlRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhXZCxHZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6'@;
put 'W21vLENjLGJhLFN1LFN1XX0pLGN9KSgpLFVuZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxTdSx1VGUsbVRlLElUZSxSbmUs'@;
put 'UFRlLEhUZSxWVGUsQlRlLE5UZSxnVGVdfSksY30pKCksWm5lPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vXX0pLGN9KSgpLFlU'@;
put 'ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQkh7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPWlhKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGZl'@;
put 'YXR1cmVzOltzb119KSxjfSkoKSx6VGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7fSksY30pKCksVVRlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj'@;
put 'Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vXX0pLGN9KSgpO2NsYXNzIGpFe31sZXQgQmI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmJDaGFuZ2VzPTAs'@;
put 'dGhpcy5fY2hhbmdlPW5ldyBubn1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1jaGFuZ2VTdGFydCgpe3RoaXMubmJDaGFuZ2VzKyt9Y2hhbmdlRG9uZSgpezA9PS0tdGhpcy5uYkNoYW5nZXMmJnRoaXMuX2NoYW5nZS5uZXh0KCl9fXJldHVybiBjLlx1'@;
put 'MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHo0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlcj1hLHRoaXMuYWN0aXZhdGVkPSExLHRo'@;
put 'aXMuX3NpemU9MCx0aGlzLl9jdXJyZW50PTEsdGhpcy5fY2hhbmdlPW5ldyBubix0aGlzLnByZXZlbnRFbWl0PSExLHRoaXMuX3NpemVDaGFuZ2U9bmV3IG5ufWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplO2EhPT1kJiYodGhpcy5w'@;
put 'cmV2ZW50RW1pdHx8dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3NpemU9YSx0aGlzLl9jdXJyZW50PTA9PT1hPzE6TWF0aC5mbG9vcihkL2EqKHRoaXMuX2N1cnJlbnQtMSkpKzEsdGhpcy5wcmV2ZW50RW1pdHx8KHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJl'@;
put 'bnQpLHRoaXMuX3NpemVDaGFuZ2UubmV4dCh0aGlzLl9zaXplKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKSkpLHRoaXMucHJldmVudEVtaXQ9ITF9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5fdG90YWxJdGVtc3x8MH1zZXQgdG90YWxJdGVtcyhhKXt0aGlzLl90b3Rh'@;
put 'bEl0ZW1zPWEsdGhpcy5jdXJyZW50PnRoaXMubGFzdCYmKHRoaXMuY3VycmVudD10aGlzLmxhc3QpfWdldCBsYXN0KCl7cmV0dXJuIHRoaXMuX2xhc3Q/dGhpcy5fbGFzdDp0aGlzLnNpemU+MCYmdGhpcy50b3RhbEl0ZW1zP01hdGguY2VpbCh0aGlzLnRvdGFsSXRlbXMvdGhpcy5zaXplKTox'@;
put 'fXNldCBsYXN0KGEpe3RoaXMuX2xhc3Q9YX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgc2l6ZUNoYW5nZSgpe3JldHVybiB0aGlzLl9zaXplQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9'@;
put 'c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY3VycmVudD1hLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKX1nZXQgZmlyc3RJdGVtKCl7cmV0dXJuIDA9'@;
put 'PT10aGlzLl90b3RhbEl0ZW1zPy0xOjA9PT10aGlzLnNpemU/MDoodGhpcy5jdXJyZW50LTEpKnRoaXMuc2l6ZX1nZXQgbGFzdEl0ZW0oKXtpZigwPT09dGhpcy5fdG90YWxJdGVtcylyZXR1cm4tMTtpZigwPT09dGhpcy5zaXplKXJldHVybiB0aGlzLnRvdGFsSXRlbXMtMTtsZXQgYT10aGlz'@;
put 'LmN1cnJlbnQqdGhpcy5zaXplLTE7cmV0dXJuIHRoaXMudG90YWxJdGVtcyYmKGE9TWF0aC5taW4oYSx0aGlzLnRvdGFsSXRlbXMtMSkpLGF9cHJldmlvdXMoKXt0aGlzLmN1cnJlbnQ+MSYmdGhpcy5jdXJyZW50LS19bmV4dCgpe3RoaXMuY3VycmVudDx0aGlzLmxhc3QmJnRoaXMuY3VycmVu'@;
put 'dCsrfXJlc2V0UGFnZVNpemUoYT0hMSl7dGhpcy5wcmV2ZW50RW1pdD1hLHRoaXMuc2l6ZT0wfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihCYikpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'LFEzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9wYWdlPWEsdGhpcy5zdGF0ZURlYm91bmNlcj1kLHRoaXMuX2NoYW5nZT1uZXcgbm4sdGhpcy5fYWxsPVtdfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWhhc0FjdGl2ZUZpbHRl'@;
put 'cnMoKXtmb3IoY29uc3R7ZmlsdGVyOmF9b2YgdGhpcy5fYWxsKWlmKGEmJmEuaXNBY3RpdmUoKSlyZXR1cm4hMDtyZXR1cm4hMX1nZXRBY3RpdmVGaWx0ZXJzKCl7Y29uc3QgYT1bXTtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWQmJmQuaXNBY3RpdmUoKSYmYS5wdXNoKGQpO3Jl'@;
put 'dHVybiBhfWFkZChhKXtjb25zdCBkPWEuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbYV0pKTtsZXQgaD0hMTtjb25zdCBmPW5ldyBCRShhLCgpPT57aWYoaClyZXR1cm47ZC51bnN1YnNjcmliZSgpO2NvbnN0IHY9dGhpcy5fYWxsLmZp'@;
put 'bmRJbmRleChUPT5ULmZpbHRlcj09PWEpO3Y+PTAmJnRoaXMuX2FsbC5zcGxpY2UodiwxKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdlQW5kRW1pdEZpbHRlckNoYW5nZShbXSksaD0hMH0pO3JldHVybiB0aGlzLl9hbGwucHVzaChmKSxhLmlzQWN0aXZlKCkmJnRoaXMucmVzZXRQYWdl'@;
put 'QW5kRW1pdEZpbHRlckNoYW5nZShbYV0pLGZ9YWNjZXB0cyhhKXtmb3IoY29uc3R7ZmlsdGVyOmR9b2YgdGhpcy5fYWxsKWlmKGQmJmQuaXNBY3RpdmUoKSYmIWQuYWNjZXB0cyhhKSlyZXR1cm4hMTtyZXR1cm4hMH1yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKGEpe3RoaXMuc3RhdGVE'@;
put 'ZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9wYWdlLmN1cnJlbnQ9MSx0aGlzLl9jaGFuZ2UubmV4dChhKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoejQpLGZyKEJiKSl9LGMu'@;
put 'XHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgQkV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmZpbHRlcj1sLHRoaXMudW5yZWdpc3Rlcj1hfX1sZXQgWUU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbHRlcnM9YX1nZXQg'@;
put 'ZmlsdGVyKCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZCYmdGhpcy5yZWdpc3RlcmVkLmZpbHRlcn1uZ09uRGVzdHJveSgpe3RoaXMuZGVsZXRlRmlsdGVyKCl9c2V0RmlsdGVyKGEpe3RoaXMuZGVsZXRlRmlsdGVyKCksYSBpbnN0YW5jZW9mIEJFP3RoaXMucmVnaXN0ZXJlZD1hOmEmJih0aGlz'@;
put 'LnJlZ2lzdGVyZWQ9dGhpcy5maWx0ZXJzLmFkZChhKSl9ZGVsZXRlRmlsdGVyKCl7dGhpcy5yZWdpc3RlcmVkJiYodGhpcy5yZWdpc3RlcmVkLnVucmVnaXN0ZXIoKSxkZWxldGUgdGhpcy5yZWdpc3RlcmVkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'Yykoc3QoUTMpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6Y30pLGN9KSgpLFliPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBZRXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlPWgsdGhpcy5wbGF0Zm9ybUlk'@;
put 'PWYsdGhpcy5lbGVtZW50UmVmPXYsdGhpcy5vcGVuQ2hhbmdlPW5ldyBJcighMSksdGhpcy5hcmlhRXhwYW5kZWQ9ITEsdGhpcy5wb3BvdmVySWQ9aHUoKSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6bzAuVkVSVElDQUwsc2lkZTpLZC5BRlRFUixhbmNob3I6VXMuRU5ELGNvbnRlbnQ6VXMu'@;
put 'RU5EfSx0aGlzLl9vcGVuPSExLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaChoLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKFQ9Pnt0aGlzLm9wZW49VCx0aGlzLmFyaWFFeHBhbmRlZD1UfSkpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5vcGVuIT09KGE9'@;
put 'ISFhKSYmKHRoaXMuc21hcnRUb2dnbGVTZXJ2aWNlLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKSwhYSYmbGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5hbmNob3IubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuX29wZW49YSl9c2V0IGN1c3RvbUZpbHRlcihhKXt0aGlzLnNldEZp'@;
put 'bHRlcihhKX1nZXQgYWN0aXZlKCl7cmV0dXJuISF0aGlzLmZpbHRlciYmdGhpcy5maWx0ZXIuaXNBY3RpdmUoKX1uZ09uQ2hhbmdlcygpe3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vicy5mb3JFYWNoKGE9'@;
put 'PmEudW5zdWJzY3JpYmUoKSl9c2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl7Y29uc3QgaD10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudD8uY2xvc2VzdCgiY2xyLWRnLWNvbHVtbiIpPy5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtY29sdW1uLXRpdGxlIik/LnRleHRDb250ZW50LnRy'@;
put 'aW0oKS50b0xvY2FsZUxvd2VyQ2FzZSgpO3RoaXMudG9nZ2xlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRhZ3JpZEZpbHRlckFyaWFMYWJlbCx7Q09MVU1OOmh8fCIifSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j'@;
put 'dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFEzKSxzdChScyksc3QoRGwpLHN0KEFvKSxzdCgkaSkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVW8oa1NlLDUsJGkpLDImYSl7'@;
put 'bGV0IGg7TWkoaD1DaSgpKSYmKGQuYW5jaG9yPWguZmlyc3QpfX0saW5wdXRzOntvcGVuOltRbi5Ob25lLCJjbHJEZ0ZpbHRlck9wZW4iLCJvcGVuIl0sY3VzdG9tRmlsdGVyOltRbi5Ob25lLCJjbHJEZ0ZpbHRlciIsImN1c3RvbUZpbHRlciJdfSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJjbHJE'@;
put 'Z0ZpbHRlck9wZW5DaGFuZ2UifSxmZWF0dXJlczpbR2koW3twcm92aWRlOmpFLHVzZUV4aXN0aW5nOmN9XSksc28sQmFdLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczo0LHZhcnM6MTMsY29uc3RzOltbImFuY2hvciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJBbmNob3Ii'@;
put 'LCIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJkYXRhZ3JpZC1maWx0ZXItdG9nZ2xlIl0sWyJzb2xpZCIsIiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1maWx0ZXIiLCJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwzLCJpZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQi'@;
put 'LCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1maWx0ZXIiLDMsImlkIl0sWzEsImRh'@;
put 'dGFncmlkLWZpbHRlci1jbG9zZS13cmFwcGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwxLCJjbG9zZSJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLGdlKDAsImJ1dHRvbiIsMSwwKSxK'@;
put 'dCgyLCJjZHMtaWNvbiIsMiksYmUoKSxidCgzLEVTZSw1LDMsImRpdiIsMykpLDImYSYmKGJyKCJkYXRhZ3JpZC1maWx0ZXItb3BlbiIsZC5vcGVuKSgiZGF0YWdyaWQtZmlsdGVyZWQiLGQuYWN0aXZlKSxocigiYXJpYS1sYWJlbCIsZC50b2dnbGVCdXR0b25BcmlhTGFiZWwpKCJhcmlhLWV4'@;
put 'cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQucG9wb3ZlcklkKSx3ZSgyKSxocigic3RhdHVzIixkLmFjdGl2ZT8iaW5mbyI6bnVsbCkoInNoYXBlIixkLmFjdGl2ZT8iZmlsdGVyLWdyaWQtY2lyY2xlIjoiZmlsdGVyLWdyaWQiKSx3ZSgpLFBlKCJjbHJQb3BvdmVy'@;
put 'Q29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5zbWFydFBvc2l0aW9uKSgiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwhMCkoImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSIsITApKX0sZGVwZW5kZW5jaWVzOltINyxLcyxJYix5bmUs'@;
put 'UGIsT2JdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NsYXNzIFJOe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLGwuaW5kZXhPZigiLiIpPj0wJiYodGhpcy5zcGxpdFByb3A9bC5zcGxpdCgiLiIpKX1nZXRQcm9wVmFsdWUobCl7aWYodGhpcy5zcGxpdFByb3Ape2xldCBhPWw7Zm9yKGNv'@;
put 'bnN0IGQgb2YgdGhpcy5zcGxpdFByb3Ape2lmKG51bGw9PT1hfHx0eXBlb2YgYT4idSJ8fHR5cGVvZiBhW2RdPiJ1IilyZXR1cm47YT1hW2RdfXJldHVybiBhfXJldHVybiBsW3RoaXMucHJvcF19fWNsYXNzIHpFe2NvbnN0cnVjdG9yKGwsYT0hMSl7dGhpcy5wcm9wPWwsdGhpcy5leGFjdD1h'@;
put 'LHRoaXMubmVzdGVkUHJvcD1uZXcgUk4obCl9YWNjZXB0cyhsLGEsZCl7Y29uc3QgaD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodm9pZCAwPT09aHx8bnVsbCE9PWEmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg8YSl8fG51bGwhPT1kJiYoIm51bWJlciIhPXR5cGVv'@;
put 'ZiBofHxoPmQpKX19Y2xhc3Mgdmd7Y29uc3RydWN0b3IobCl7dGhpcy5maWx0ZXJGbj1sLHRoaXMuX2NoYW5nZXM9bmV3IG5uLHRoaXMuX2xvdz1udWxsLHRoaXMuX2hpZ2g9bnVsbH1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCB2YWx1ZSgp'@;
put 'e3JldHVyblt0aGlzLl9sb3csdGhpcy5faGlnaF19c2V0IHZhbHVlKGwpe2NvbnN0IGE9bFswXSxkPWxbMV07KGEhPT10aGlzLl9sb3d8fGQhPT10aGlzLl9oaWdoKSYmKHRoaXMuX2xvdz1hLHRoaXMuX2hpZ2g9ZCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkp'@;
put 'fWdldCBsb3coKXtyZXR1cm4gdGhpcy5fbG93fXNldCBsb3cobCl7bCE9PXRoaXMuX2xvdyYmKHRoaXMuX2xvdz1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGhpZ2goKXtyZXR1cm4gdGhpcy5faGlnaH1zZXQgaGlnaChsKXtsIT09dGhpcy5faGln'@;
put 'aCYmKHRoaXMuX2hpZ2g9bCx0aGlzLl9jaGFuZ2VzLm5leHQoW3RoaXMuX2xvdyx0aGlzLl9oaWdoXSkpfWdldCBzdGF0ZSgpe3JldHVybiB0aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgekU/e3Byb3BlcnR5OnRoaXMuZmlsdGVyRm4ucHJvcCxsb3c6dGhpcy5fbG93LGhpZ2g6dGhpcy5faGln'@;
put 'aH06dGhpc31pc0FjdGl2ZSgpe3JldHVybiBudWxsIT09dGhpcy5fbG93fHxudWxsIT09dGhpcy5oaWdofWFjY2VwdHMobCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4uYWNjZXB0cyhsLHRoaXMuX2xvdyx0aGlzLl9oaWdoKX1lcXVhbHMobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiB2ZyYmKGwuZmls'@;
put 'dGVyRm4gaW5zdGFuY2VvZiB6RT90aGlzLmZpbHRlckZuIGluc3RhbmNlb2YgekUmJmwuZmlsdGVyRm4ucHJvcD09PXRoaXMuZmlsdGVyRm4ucHJvcCYmbC5sb3c9PT10aGlzLl9sb3cmJmwuaGlnaD09PXRoaXMuX2hpZ2g6bD09PXRoaXMpfX1sZXQgV25lPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyBZRXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2U9Zix0aGlzLm5nWm9uZT12LHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IElyLHRoaXMub3Blbj0hMSx0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnM9W119Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXX1zZXQgdmFsdWUoYSl7dGhpcy5maWx0ZXImJkFycmF5LmlzQXJyYXkoYSk/YSYmKGFbMF0hPT10aGlzLmZpbHRlci5sb3d8fGFbMV0hPT10aGlzLmZpbHRlci5oaWdo'@;
put 'KSYmKHRoaXMuZmlsdGVyLmxvdz0ibnVtYmVyIj09dHlwZW9mIGFbMF0/YVswXTpudWxsLHRoaXMuZmlsdGVyLmhpZ2g9Im51bWJlciI9PXR5cGVvZiBhWzFdP2FbMV06bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoYSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlcz1hfXNldCBjdXN0'@;
put 'b21OdW1lcmljRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiBCRT9hOm5ldyB2ZyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWVzJiYodGhpcy52YWx1ZT10aGlzLmluaXRGaWx0ZXJWYWx1ZXMsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlcyl9Z2V0IG1heFBsYWNlaG9s'@;
put 'ZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5tYXhQbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWF4VmFsdWV9Z2V0IG1pblBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5taW5QbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJpbmdzLmtleXMubWluVmFsdWV9Z2V0IGxv'@;
put 'dygpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIubG93JiZpc0Zpbml0ZSh0aGlzLmZpbHRlci5sb3cpP3RoaXMuZmlsdGVyLmxvdzpudWxsfXNldCBsb3coYSl7Im51bWJlciI9PXR5cGVvZiBhJiZhIT09dGhpcy5maWx0ZXIubG93Pyh0aGlzLmZpbHRlci5sb3c9YSx0aGlz'@;
put 'LmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmxvdz1udWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hd'@;
put 'KSl9Z2V0IGhpZ2goKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHRoaXMuZmlsdGVyLmhpZ2gmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmhpZ2gpP3RoaXMuZmlsdGVyLmhpZ2g6bnVsbH1zZXQgaGlnaChhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5oaWdoPyh0aGlzLmZp'@;
put 'bHRlci5oaWdoPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKToibnVtYmVyIiE9dHlwZW9mIGEmJih0aGlzLmZpbHRlci5oaWdoPW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRlci5sb3cs'@;
put 'dGhpcy5maWx0ZXIuaGlnaF0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnBvcG92ZXJUb2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVl'@;
put 'c3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfX1yZXR1'@;
put 'cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChRMyksc3QoSzMpLHN0KFJzKSxzdChEbCksc3QoUG8pKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQp'@;
put 'e2lmKDEmYSYmKFVvKFRTZSw1KSxVbyhZYiw1KSksMiZhKXtsZXQgaDtNaShoPUNpKCkpJiYoZC5pbnB1dD1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5maWx0ZXJDb250YWluZXI9aC5maXJzdCl9fSxpbnB1dHM6e21pblBsYWNlaG9sZGVyOltRbi5Ob25lLCJjbHJGaWx0ZXJNaW5QbGFjZWhv'@;
put 'bGRlciIsIm1pblBsYWNlaG9sZGVyIl0sbWF4UGxhY2Vob2xkZXI6W1FuLk5vbmUsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwibWF4UGxhY2Vob2xkZXIiXSx2YWx1ZTpbUW4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdLGN1c3RvbU51bWVyaWNGaWx0ZXI6W1FuLk5vbmUsImNs'@;
put 'ckRnTnVtZXJpY0ZpbHRlciIsImN1c3RvbU51bWVyaWNGaWx0ZXIiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W0dpKFt7cHJvdmlkZTpqRSx1c2VFeGlzdGluZzpjfV0pLHNvXSxkZWNsczo2LHZhcnM6OCxjb25zdHM6W1si'@;
put 'aW5wdXRfbG93IiwiIl0sWyJpbnB1dF9oaWdoIiwiIl0sWzMsImNsckRnRmlsdGVyT3BlbkNoYW5nZSIsImNsckRnRmlsdGVyIiwiY2xyRGdGaWx0ZXJPcGVuIl0sWyJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1m'@;
put 'aWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWlucHV0LXNwYWNlciJdLFsidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJoaWdoIiwxLCJkYXRhZ3JpZC1udW1lcmljLWZp'@;
put 'bHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1IbigpO2dlKDAsImNsci1kZy1maWx0ZXIiLDIpLEdyKCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3Jl'@;
put 'dHVybiBTdChoKSxxcihkLm9wZW4sdil8fChkLm9wZW49dikseHQodil9KSxnZSgxLCJpbnB1dCIsMywwKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIFN0KGgpLHFyKGQubG93LHYpfHwoZC5sb3c9dikseHQodil9KSxiZSgpLEp0KDMsInNwYW4iLDQpLGdlKDQsImlu'@;
put 'cHV0Iiw1LDEpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gU3QoaCkscXIoZC5oaWdoLHYpfHwoZC5oaWdoPXYpLHh0KHYpfSksYmUoKSgpfTImYSYmKFBlKCJjbHJEZ0ZpbHRlciIsZC5yZWdpc3RlcmVkKSxXcigiY2xyRGdGaWx0ZXJPcGVuIixkLm9wZW4pLHdlKCks'@;
put 'V3IoIm5nTW9kZWwiLGQubG93KSxQZSgicGxhY2Vob2xkZXIiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksaHIoImFyaWEtbGFiZWwiLGQubWluUGxhY2Vob2xkZXJWYWx1ZSksd2UoMyksV3IoIm5nTW9kZWwiLGQuaGlnaCksUGUoInBsYWNlaG9sZGVyIixkLm1heFBsYWNlaG9sZGVyVmFsdWUp'@;
put 'LGhyKCJhcmlhLWxhYmVsIixkLm1heFBsYWNlaG9sZGVyVmFsdWUpKX0sZGVwZW5kZW5jaWVzOltUbCxyRSxjYSxvYSxZYl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgVUV7Y29uc3RydWN0b3IobCxhPSExKXt0aGlzLnByb3A9bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9w'@;
put 'PW5ldyBSTihsKX1hY2NlcHRzKGwsYSl7Y29uc3QgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodHlwZW9mIGQ+InUiKSYmKHRoaXMuZXhhY3Q/KCIiK2QpLnRvTG93ZXJDYXNlKCk9PT1hOigiIitkKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYSk+PTApfX1jbGFz'@;
put 'cyB5Z3tjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgbm4sdGhpcy5fbG93ZXJDYXNlVmFsdWU9IiIsdGhpcy5fcmF3VmFsdWU9IiJ9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgbG93ZXJDYXNlVmFs'@;
put 'dWUoKXtyZXR1cm4gdGhpcy5fbG93ZXJDYXNlVmFsdWV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBVRT97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLHZhbHVlOnRoaXMudmFsdWV9OnRoaXN9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3Jhd1ZhbHVl'@;
put 'fXNldCB2YWx1ZShsKXtsfHwobD0iIiksbCE9PXRoaXMuX3Jhd1ZhbHVlJiYodGhpcy5fcmF3VmFsdWU9bCx0aGlzLl9sb3dlckNhc2VWYWx1ZT1sLnRvTG93ZXJDYXNlKCkudHJpbSgpLHRoaXMuX2NoYW5nZXMubmV4dChsKSl9aXNBY3RpdmUoKXtyZXR1cm4hIXRoaXMudmFsdWV9YWNjZXB0'@;
put 'cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5sb3dlckNhc2VWYWx1ZSl9ZXF1YWxzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgeWcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgVUU/dGhpcy5maWx0ZXJGbiBpbnN0YW5jZW9mIFVFJiZsLmZpbHRlckZuLnByb3A9PT10'@;
put 'aGlzLmZpbHRlckZuLnByb3AmJmwudmFsdWU9PT10aGlzLnZhbHVlOmw9PT10aGlzKX19bGV0IE9OPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBZRXtjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKGEpLHRoaXMuZG9tQWRhcHRlcj1kLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc21hcnRU'@;
put 'b2dnbGVTZXJ2aWNlPWYsdGhpcy5uZ1pvbmU9dix0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBJcix0aGlzLm9wZW49ITEsdGhpcy5zdWJzPVtdfXNldCBjdXN0b21TdHJpbmdGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mIEJFP2E6bmV3IHlnKGEpKSx0aGlzLmluaXRG'@;
put 'aWx0ZXJWYWx1ZSYmKHRoaXMudmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX1nZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIudmFsdWV9c2V0IHZhbHVlKGEpe3RoaXMuZmlsdGVyJiYic3RyaW5nIj09dHlwZW9mIGE/KGF8fChhPSIi'@;
put 'KSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChhKSkpOnRoaXMuaW5pdEZpbHRlclZhbHVlPWF9Z2V0IHBsYWNlaG9sZGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5wbGFjZWhvbGRlcnx8dGhpcy5jb21tb25TdHJp'@;
put 'bmdzLmtleXMuZmlsdGVySXRlbXN9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzLnB1c2godGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlv'@;
put 'bkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChRMyksc3QoSzMpLHN0KFJzKSxzdChEbCksc3QoUG8pKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXN0cmluZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVW8oRFNlLDUpLFVv'@;
put 'KFliLDUpKSwyJmEpe2xldCBoO01pKGg9Q2koKSkmJihkLmlucHV0PWguZmlyc3QpLE1pKGg9Q2koKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7cGxhY2Vob2xkZXI6W1FuLk5vbmUsImNsckZpbHRlclBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxjdXN0b21T'@;
put 'dHJpbmdGaWx0ZXI6W1FuLk5vbmUsImNsckRnU3RyaW5nRmlsdGVyIiwiY3VzdG9tU3RyaW5nRmlsdGVyIl0sdmFsdWU6W1FuLk5vbmUsImNsckZpbHRlclZhbHVlIiwidmFsdWUiXX0sb3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6'@;
put 'W0dpKFt7cHJvdmlkZTpqRSx1c2VFeGlzdGluZzpjfV0pLHNvXSxkZWNsczozLHZhcnM6NSxjb25zdHM6W1siaW5wdXQiLCIiXSxbMywiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbInR5cGUiLCJ0ZXh0IiwiYXV0b2NvbXBsZXRlIiwi'@;
put 'b2ZmIiwibmFtZSIsInNlYXJjaCIsMSwiY2xyLWlucHV0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsInBsYWNlaG9sZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPUhuKCk7Z2UoMCwiY2xyLWRnLWZpbHRlciIsMSksR3IoImNsckRnRmlsdGVyT3Bl'@;
put 'bkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIFN0KGgpLHFyKGQub3Blbix2KXx8KGQub3Blbj12KSx4dCh2KX0pLGdlKDEsImlucHV0IiwyLDApLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gU3QoaCkscXIoZC52YWx1ZSx2KXx8KGQudmFsdWU9dikseHQodil9KSxi'@;
put 'ZSgpKCl9MiZhJiYoUGUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLFdyKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3Blbiksd2UoKSxXcigibmdNb2RlbCIsZC52YWx1ZSksUGUoInBsYWNlaG9sZGVyIixkLnBsYWNlaG9sZGVyVmFsdWUpLGhyKCJhcmlhLWxhYmVsIixkLnBsYWNlaG9sZGVy'@;
put 'VmFsdWUpKX0sZGVwZW5kZW5jaWVzOltUbCxjYSxvYSxZYl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksVTQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHg3e31yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1pYShjKSkpKGR8fGMp'@;
put 'fX0pKCksYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGZlYXR1cmVzOltzb119KSxjfSkoKSxVNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQ9MH1nZXQgaGFzQWN0aW9uYWJsZVJvdygpe3JldHVybiB0'@;
put 'aGlzLmFjdGlvbmFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5hY3Rpb25hYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46'@;
put 'YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWjc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGs3e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihh'@;
put 'LGQpLHRoaXMucm93QWN0aW9ucz1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5yb3dBY3Rpb25zLmhhc0FjdGlvbmFibGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEZhKSxzdChVNCw4KSxzdChVNykpfSxjLlx1MDI3NWRpcj12cih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W3NvXX0pLGN9KSgpLEduZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMucGxhdGZvcm1JZD1hLHRoaXMubW9kYWxTdGFjaz1bXSx0aGlzLmtleVVwRXZlbnRMaXN0ZW5l'@;
put 'cj10aGlzLm9uS2V5VXAuYmluZCh0aGlzKX10cmFja01vZGFsT3BlbihhKXshMT09PXRoaXMubW9kYWxTdGFjay5pbmNsdWRlcyhhKSYmdGhpcy5tb2RhbFN0YWNrLnVuc2hpZnQoYSksbGEodGhpcy5wbGF0Zm9ybUlkKSYmZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIs'@;
put 'dGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfXRyYWNrTW9kYWxDbG9zZShhKXtjb25zdCBkPXRoaXMubW9kYWxTdGFjay5pbmRleE9mKGEpO2Q+LTEmJnRoaXMubW9kYWxTdGFjay5zcGxpY2UoZCwxKSwwPT09dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmbGEodGhpcy5wbGF0Zm9ybUlkKSYmZG9j'@;
put 'dW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXl1cCIsdGhpcy5rZXlVcEV2ZW50TGlzdGVuZXIpfW9uS2V5VXAoYSl7dGhpcy5tb2RhbFN0YWNrLmxlbmd0aCYmcWQoYS5rZXkpPT09a28uRXNjYXBlJiYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCksdGhpcy5tb2RhbFN0'@;
put 'YWNrWzBdLmNsb3NlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihBbykpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLGMyPSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSl7dGhpcy5tb2RhbFN0YWNrU2VydmljZT1hLHRoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgQXIodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChhKXt0aGlz'@;
put 'Ll9lbmFibGVkPWF9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuY2FjaGV9Z2V0IHN0YXRlQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3N0YXRlLmFzT2JzZXJ2YWJsZSgpfWdldCBpc09wZW4oKXtyZXR1cm4hMD09PXRoaXMudG9nZ2xlU3RhdGV9b3BlbihhLGQpe3RoaXMuY2FjaGU9YSx0aGlzLmJ1'@;
put 'dHRvbj1kLHRoaXMudG9nZ2xlU3RhdGU9ITAsdGhpcy5fc3RhdGUubmV4dCh0aGlzLnRvZ2dsZVN0YXRlKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpfWNsb3NlKCl7dGhpcy50b2dnbGVTdGF0ZT0hMSx0aGlzLl9zdGF0ZS5uZXh0KHRoaXMudG9nZ2xlU3Rh'@;
put 'dGUpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpLHRoaXMuYnV0dG9uJiYodGhpcy5idXR0b24uZm9jdXMoKSx0aGlzLmJ1dHRvbj1udWxsKX10b2dnbGUoYSxkKXt0aGlzLmlzUm93T3BlbihhKXx8IWE/dGhpcy5jbG9zZSgpOnRoaXMub3BlbihhLGQpfWlz'@;
put 'Um93T3BlbihhKXtyZXR1cm4hKCF0aGlzLnRvZ2dsZVN0YXRlfHx0aGlzLmNhY2hlIT09YSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKEduZSkpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'LFc3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kZXRhaWxTZXJ2aWNlPWEsdGhpcy5leHBhbmRhYmxlQ291bnQ9MH1nZXQgaGFzRXhwYW5kYWJsZVJvdygpe3JldHVybiF0aGlzLmRldGFpbFNlcnZpY2UuZW5hYmxlZCYmdGhpcy5leHBhbmRhYmxlQ291bnQ+MH1yZWdpc3Rl'@;
put 'cigpe3RoaXMuZXhwYW5kYWJsZUNvdW50Kyt9dW5yZWdpc3Rlcigpe3RoaXMuZXhwYW5kYWJsZUNvdW50LS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKGMyKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'fSksY30pKCksRzc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGs3e2NvbnN0cnVjdG9yKGEsZCxoKXtpZighZCl0aHJvdyBuZXcgRXJyb3IoImNsci1kZy1yb3cgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZGF0YWdyaWQiKTtzdXBlcihhLGQpLHRoaXMuZXhwYW5kYWJsZUNv'@;
put 'dW50PWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmV4cGFuZGFibGVDb3VudC5oYXNFeHBhbmRhYmxlUm93fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChGYSksc3QoVTQsOCksc3QoVzcpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siY2xyLWRhdGFncmlkIl0sWyJjbHItZGctcm93Il1dLGZlYXR1cmVzOltzb119KSxjfSkoKTtjbGFzcyBaRXtjb25zdHJ1Y3RvcihsKXt0aGlzLnByb3A9bCx0aGlzLm5lc3RlZFByb3A9bmV3IFJOKGwpfWNvbXBhcmUobCxhKXtsZXQgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJv'@;
put 'cFZhbHVlKGwpLGg9dGhpcy5uZXN0ZWRQcm9wLmdldFByb3BWYWx1ZShhKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGQmJihkPWQudG9Mb3dlckNhc2UoKSksInN0cmluZyI9PXR5cGVvZiBoJiYoaD1oLnRvTG93ZXJDYXNlKCkpLHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQ/dHlwZW9mIGg+InUi'@;
put 'fHxudWxsPT09aD8wOjE6dHlwZW9mIGg+InUifHxudWxsPT09aHx8ZDxoPy0xOmQ+aD8xOjB9fXZhciBjZD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlVOU09SVEVEPTBdPSJVTlNPUlRFRCIsY1tjLkFTQz0xXT0iQVNDIixjW2MuREVTQz0tMV09IkRFU0MiLGN9KGNkfHx7fSk7bGV0IFBOPSgo'@;
put 'KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9keW5hbWljPSExfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuY29sdW1uVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY29sdW1uVmlldy5kZXN0cm95KCl9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNvbHVtbiJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlVvKEFTZSw1KSwyJmEpe2xldCBoO01pKGg9Q2koKSkm'@;
put 'JihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjIsdmFyczowLGNvbnN0czpbWyJjb2x1bW5Qb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLGJ0KDAsTFNlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxvdSkp'@;
put 'fSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxXRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXI9YSx0aGlzLl9yZXZlcnNlPSExLHRoaXMuX2NoYW5nZT1uZXcgbm59Z2V0IGNvbXBhcmF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcGFyYXRvcn1zZXQgY29t'@;
put 'cGFyYXRvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fY29tcGFyYXRvcj1hLHRoaXMuZW1pdENoYW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWdldCByZXZlcnNlKCl7cmV0dXJuIHRoaXMuX3JldmVyc2V9c2V0IHJldmVyc2UoYSl7'@;
put 'dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3JldmVyc2U9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgY2hhbmdlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoYSxkKXt0aGlz'@;
put 'LnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5jb21wYXJhdG9yPT09YT90aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZHx8IXRoaXMuX3JldmVyc2U6KHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLl9yZXZlcnNlPXR5cGVvZiBkPCJ1IiYmZCksdGhpcy5lbWl0Q2hhbmdlKCks'@;
put 'dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Y2xlYXIoKXt0aGlzLmNvbXBhcmF0b3I9bnVsbH1jb21wYXJlKGEsZCl7cmV0dXJuKHRoaXMucmV2ZXJzZT8tMToxKSp0aGlzLmNvbXBhcmF0b3IuY29tcGFyZShhLGQpfWVtaXRDaGFuZ2UoKXt0aGlzLl9jaGFuZ2UubmV4dCh0aGlz'@;
put 'KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoQmIpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTt2YXIgdTI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5BTElHTl9DT0xVTU5TPTBdPSJBTElH'@;
put 'Tl9DT0xVTU5TIixjW2MuQ0FMQ1VMQVRFX01PREVfT049MV09IkNBTENVTEFURV9NT0RFX09OIixjW2MuQ0FMQ1VMQVRFX01PREVfT0ZGPTJdPSJDQUxDVUxBVEVfTU9ERV9PRkYiLGNbYy5DTEVBUl9XSURUSFM9M109IkNMRUFSX1dJRFRIUyIsY1tjLkNPTVBVVEVfQ09MVU1OX1dJRFRIUz00'@;
put 'XT0iQ09NUFVURV9DT0xVTU5fV0lEVEhTIixjfSh1Mnx8e30pO2xldCBiZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fcmVuZGVyU3RlcD1uZXcgbm4sdGhpcy5hbHJlYWR5U2l6ZWQ9ITF9Z2V0IHJlbmRlclN0ZXAoKXtyZXR1cm4gdGhpcy5fcmVuZGVyU3RlcC5hc09ic2Vy'@;
put 'dmFibGUoKX1maWx0ZXJSZW5kZXJTdGVwcyhhKXtyZXR1cm4gdGhpcy5yZW5kZXJTdGVwLnBpcGUoSGEoZD0+YT09PWQpKX1yZXNpemUoKXt0aGlzLl9yZW5kZXJTdGVwLm5leHQodTIuQ0FMQ1VMQVRFX01PREVfT04pLHRoaXMuYWxyZWFkeVNpemVkJiZ0aGlzLl9yZW5kZXJTdGVwLm5leHQo'@;
put 'dTIuQ0xFQVJfV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQodTIuQ09NUFVURV9DT0xVTU5fV0lEVEhTKSx0aGlzLl9yZW5kZXJTdGVwLm5leHQodTIuQUxJR05fQ09MVU1OUyksdGhpcy5hbHJlYWR5U2l6ZWQ9ITAsdGhpcy5fcmVuZGVyU3RlcC5uZXh0KHUyLkNBTENVTEFURV9NT0RF'@;
put 'X09GRil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEZOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLmRvbUFk'@;
put 'YXB0ZXI9ZCx0aGlzLm9yZ2FuaXplcj1oLHRoaXMuX3Jlc2l6ZWRCeT0wfWdldCByZXNpemVkQnkoKXtyZXR1cm4gdGhpcy5fcmVzaXplZEJ5fWdldCBtaW5Db2x1bW5XaWR0aCgpe3JldHVybiB0aGlzLmRvbUFkYXB0ZXIubWluV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50KXx8OTZ9Z2V0'@;
put 'IG1heFJlc2l6ZVJhbmdlKCl7cmV0dXJuIHRoaXMud2lkdGhCZWZvcmVSZXNpemUtdGhpcy5taW5Db2x1bW5XaWR0aH1nZXQgd2lkdGhBZnRlclJlc2l6ZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplK3RoaXMuX3Jlc2l6ZWRCeX1zdGFydFJlc2l6ZSgpe3RoaXMuX3Jlc2l6ZWRC'@;
put 'eT0wLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT0hMCx0aGlzLndpZHRoQmVmb3JlUmVzaXplPXRoaXMuZG9tQWRhcHRlci5jbGllbnRSZWN0KHRoaXMuZWwubmF0aXZlRWxlbWVudCkud2lkdGh9ZW5kUmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9Y2FsY3VsYXRlUmVzaXpl'@;
put 'KGEpe2E8LXRoaXMubWF4UmVzaXplUmFuZ2U/KHRoaXMuX3Jlc2l6ZWRCeT0tdGhpcy5tYXhSZXNpemVSYW5nZSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITEpOih0aGlzLl9yZXNpemVkQnk9YSx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITApfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcigkaSksZnIoSzMpLGZyKGJnKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSE49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBsYXRmb3JtSWQ9YX1nZXQgdGFi'@;
put 'bGVSZWYoKXtyZXR1cm4gdGhpcy5fdGFibGVSZWZ9c2V0IHRhYmxlUmVmKGEpe3RoaXMuX3RhYmxlUmVmPWF9c2V0IHRhYmxlKGEpe2xhKHRoaXMucGxhdGZvcm1JZCkmJmEubmF0aXZlRWxlbWVudCYmKHRoaXMudGFibGVSZWY9YS5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRh'@;
put 'Z3JpZC10YWJsZSIpKX1nZXRDb2x1bW5EcmFnSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGFibGVSZWY/YCR7dGhpcy50YWJsZVJlZi5jbGllbnRIZWlnaHR9cHhgOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKEFvKSl9LGMuXHUwMjc1cHJv'@;
put 'dj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCkscW5lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2U9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLnRhYmxlU2l6ZVNlcnZpY2U9'@;
put 'Zix0aGlzLmNvbW1vblN0cmluZz12LHRoaXMuZG9jdW1lbnQ9VCx0aGlzLmNvbHVtblNlcGFyYXRvcklkPWh1KCksdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMudW5saXN0ZW5lcnM9W119Z2V0IGRlc2NyaXB0aW9uSWQoKXtyZXR1cm5gJHt0aGlzLmNvbHVtblNlcGFyYXRv'@;
put 'cklkfS1hcmlhLWRlc2NyaWJlZGJ5YH1nZXQgcmVzaXplVHJhY2tlckVsKCl7cmV0dXJuIHRoaXMucmVzaXplVHJhY2tlclJlZi5uYXRpdmVFbGVtZW50fWdldCBjb2x1bW5IYW5kbGVFbCgpe3JldHVybiB0aGlzLmNvbHVtbkhhbmRsZVJlZi5uYXRpdmVFbGVtZW50fW5nQWZ0ZXJWaWV3SW5p'@;
put 'dCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleWRvd24iLGE9Pnt0aGlzLnNob3dUcmFja2VyT25GaXJzdEtleURvd24oYSksdGhpcy5tb3ZlVHJhY2tl'@;
put 'ck9uS2V5RG93bihhKX0pKSx0aGlzLnVubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5jb2x1bW5IYW5kbGVFbCwia2V5dXAiLGE9Pnt0aGlzLmhpZGVUcmFja2VyT25LZXlVcChhKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy51bmxpc3RlbmVycy5mb3JFYWNoKGE9'@;
put 'PmEoKSl9c2hvd1RyYWNrZXIoKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnN0YXJ0UmVzaXplKCk7Y29uc3QgYT10aGlzLnRhYmxlU2l6ZVNlcnZpY2UuZ2V0Q29sdW1uRHJhZ0hlaWdodCgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImhlaWdodCIs'@;
put 'YSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsImJsb2NrIil9bW92ZVRyYWNrZXIoYSl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5jYWxjdWxhdGVSZXNpemUoYSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNr'@;
put 'ZXJFbCwidHJhbnNmb3JtIixgdHJhbnNsYXRlWCgke3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5fXB4KWApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJjb2wtcmVzaXplIiksdGhpcy5yZWRGbGFnVHJhY2tlcigpfWhpZGVU'@;
put 'cmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5lbmRSZXNpemUoKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJkaXNwbGF5Iiwibm9uZSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsInRyYW5zZm9ybSIs'@;
put 'InRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5jb2x1bW5IYW5kbGVFbCwidHJhbnNmb3JtIiwidHJhbnNsYXRlWCgwcHgpIiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmRvY3VtZW50LmJvZHksImN1cnNvciIsImF1dG8iKX1zaG93VHJhY2tlck9u'@;
put 'Rmlyc3RLZXlEb3duKGEpeyF0aGlzLnJlc2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSEwLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhp'@;
put 'cy5yZXNpemVUcmFja2VyRWwsIm9uLWFycm93LWtleS1yZXNpemUiKSx0aGlzLnNob3dUcmFja2VyKCkpfW1vdmVUcmFja2VyT25LZXlEb3duKGEpe3RoaXMuaXNBcnJvd0xlZnRLZXlFdmVudChhKT8oYS5zdG9wUHJvcGFnYXRpb24oKSx0aGlzLm1vdmVUcmFja2VyKHRoaXMuY29sdW1uUmVz'@;
put 'aXplclNlcnZpY2UucmVzaXplZEJ5LTEyKSk6dGhpcy5pc0Fycm93UmlnaHRLZXlFdmVudChhKSYmKGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeSsxMikpfWhpZGVUcmFja2VyT25LZXlVcChhKXt0aGlzLnJl'@;
put 'c2l6ZVN0YXJ0ZWRPbktleURvd24mJih0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSl8fHRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkpJiYodGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duPSExLHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsIm9u'@;
put 'LWFycm93LWtleS1yZXNpemUiKSx0aGlzLmhpZGVUcmFja2VyKCksdGhpcy5jb2x1bW5IYW5kbGVFbC5mb2N1cygpKX1yZWRGbGFnVHJhY2tlcigpe3RoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSE9PXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuaXNXaXRoaW5NYXhSZXNpemVSYW5nZSYm'@;
put 'KHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlP3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1h'@;
put 'eCIpOnRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5yZXNpemVUcmFja2VyRWwsImV4Y2VlZGVkLW1heCIpKX1pc0Fycm93TGVmdEtleUV2ZW50KGEpe3JldHVybiBxZChhLmtleSk9PT1rby5BcnJvd0xlZnR9aXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSl7cmV0dXJuIHFkKGEua2V5KT09PWtv'@;
put 'LkFycm93UmlnaHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEZOKSxzdChjcyksc3QoUG8pLHN0KEhOKSxzdChScyksc3QoJHMpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3Ii'@;
put 'XV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVW8oSVNlLDUpLFVvKFJTZSw1KSksMiZhKXtsZXQgaDtNaShoPUNpKCkpJiYoZC5yZXNpemVUcmFja2VyUmVmPWguZmlyc3QpLE1pKGg9Q2koKSkmJihkLmNvbHVtbkhhbmRsZVJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9z'@;
put 'dEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvciIsITApfSxkZWNsczo2LHZhcnM6NCxjb25zdHM6W1siY29sdW1uSGFuZGxlIiwiIl0sWyJyZXNpemVUcmFja2VyIiwiIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2RrRHJhZyIsIiIsImNka0Ry'@;
put 'YWdMb2NrQXhpcyIsIngiLDEsImRhdGFncmlkLWNvbHVtbi1oYW5kbGUiLDMsImNka0RyYWdTdGFydGVkIiwiY2RrRHJhZ01vdmVkIiwiY2RrRHJhZ0VuZGVkIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1yZXNpemUtdHJhY2tlciJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpe2lmKDEmYSl7Y29uc3QgaD1IbigpO2dlKDAsImJ1dHRvbiIsMiwwKSxIdCgiY2RrRHJhZ1N0YXJ0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGgpLHh0KGQuc2hvd1RyYWNrZXIoKSl9KSgiY2RrRHJhZ01vdmVkIixmdW5jdGlvbih2KXtyZXR1cm4gU3QoaCkseHQoZC5tb3ZlVHJh'@;
put 'Y2tlcih2LmRpc3RhbmNlLngpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKHYpe3JldHVybiBTdChoKSxkLmhpZGVUcmFja2VyKCkseHQodi5zb3VyY2UuX2RyYWdSZWYucmVzZXQoKSl9KSxiZSgpLGdlKDIsInNwYW4iLDMpLHplKDMpLGJlKCksSnQoNCwiZGl2Iiw0LDEpfTImYSYmKGhy'@;
put 'KCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZy5rZXlzLmNvbHVtblNlcGFyYXRvckFyaWFMYWJlbCkoImFyaWEtZGVzY3JpYmVkYnkiLGQuZGVzY3JpcHRpb25JZCksd2UoMiksaHIoImlkIixkLmRlc2NyaXB0aW9uSWQpLHdlKCkseHIoIiAiLGQuY29tbW9uU3RyaW5nLmtleXMuY29sdW1u'@;
put 'U2VwYXJhdG9yRGVzY3JpcHRpb24sIiAiKSl9LGRlcGVuZGVuY2llczpbWVRlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx3Zz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWUV7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihkKSx0aGlzLl9zb3J0PWEsdGhpcy52Y3I9aCx0aGlzLmRldGFp'@;
put 'bFNlcnZpY2U9Zix0aGlzLmNoYW5nZURldGVjdG9yUmVmPXYsdGhpcy5zb3J0T3JkZXJDaGFuZ2U9bmV3IElyLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2U9bmV3IElyLHRoaXMuc2hvd1NlcGFyYXRvcj0hMCx0aGlzLmN1c3RvbUZpbHRlcj0hMSx0aGlzLl9jb2xUeXBlPSJzdHJpbmciLHRoaXMu'@;
put 'X3NvcnRPcmRlcj1jZC5VTlNPUlRFRCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCkpfWdldCBj'@;
put 'b2xUeXBlKCl7cmV0dXJuIHRoaXMuX2NvbFR5cGV9c2V0IGNvbFR5cGUoYSl7dGhpcy5fY29sVHlwZT1hfWdldCBmaWVsZCgpe3JldHVybiB0aGlzLl9maWVsZH1zZXQgZmllbGQoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYodGhpcy5fZmllbGQ9YSx0aGlzLl9zb3J0Qnl8fCh0aGlzLl9zb3J0'@;
put 'Qnk9bmV3IFpFKGEpKSl9Z2V0IHNvcnRCeSgpe3JldHVybiB0aGlzLl9zb3J0Qnl9c2V0IHNvcnRCeShhKXsic3RyaW5nIj09dHlwZW9mIGE/dGhpcy5fc29ydEJ5PW5ldyBaRShhKTphP3RoaXMuX3NvcnRCeT1hOnRoaXMuZmllbGQ/dGhpcy5fc29ydEJ5PW5ldyBaRSh0aGlzLmZpZWxkKTpk'@;
put 'ZWxldGUgdGhpcy5fc29ydEJ5fWdldCBzb3J0T3JkZXIoKXtyZXR1cm4gdGhpcy5fc29ydE9yZGVyfXNldCBzb3J0T3JkZXIoYSl7aWYoISh0eXBlb2YgYT4idSIpJiZ0aGlzLl9zb3J0T3JkZXIhPT1hKXN3aXRjaChhKXtkZWZhdWx0OmNhc2UgY2QuVU5TT1JURUQ6dGhpcy5fc29ydC5jbGVh'@;
put 'cigpO2JyZWFrO2Nhc2UgY2QuQVNDOnRoaXMuc29ydCghMSk7YnJlYWs7Y2FzZSBjZC5ERVNDOnRoaXMuc29ydCghMCl9fXNldCB1cGRhdGVGaWx0ZXJWYWx1ZShhKXt0aGlzLmZpbHRlcj90aGlzLmZpbHRlciBpbnN0YW5jZW9mIHlnPygoIWF8fCJzdHJpbmciIT10eXBlb2YgYSkmJihhPSIi'@;
put 'KSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiB2ZyYmKCghYXx8IShhIGluc3RhbmNlb2YgQXJyYXkpKSYmKGE9W251bGwsbnVsbF0pLDI9PT1hLmxlbmd0aCYmKGFbMF0hPT10aGlzLmZpbHRlci52YWx1ZVswXXx8'@;
put 'YVsxXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzFdKSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfXNldCBwcm9qZWN0ZWRGaWx0ZXIoYSl7YSYmKHRoaXMuZGVsZXRlRmlsdGVyKCksdGhpcy5jdXN0b21GaWx0ZXI9ITApfWdldCBzb3J0YWJsZSgpe3JldHVy'@;
put 'biEhdGhpcy5fc29ydEJ5fWdldCBhcmlhU29ydCgpe3N3aXRjaCh0aGlzLl9zb3J0T3JkZXIpe2RlZmF1bHQ6Y2FzZSBjZC5VTlNPUlRFRDpyZXR1cm4ibm9uZSI7Y2FzZSBjZC5BU0M6cmV0dXJuImFzY2VuZGluZyI7Y2FzZSBjZC5ERVNDOnJldHVybiJkZXNjZW5kaW5nIn19Z2V0IHNvcnRE'@;
put 'aXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5fc29ydERpcmVjdGlvbn1nZXQgZmlsdGVyVmFsdWUoKXtyZXR1cm4gdGhpcy5maWx0ZXIgaW5zdGFuY2VvZiB5Z3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiB2Zz90aGlzLmZpbHRlci52YWx1ZTpudWxsfXNldCBmaWx0ZXJWYWx1ZShhKXsodGhpcy5m'@;
put 'aWx0ZXIgaW5zdGFuY2VvZiB5Z3x8dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiB2ZykmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPWEsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyLnZhbHVlKSl9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdl'@;
put 'dChQTix0aGlzLnZjcikuY29sdW1uVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBGRShQTix0aGlzLnZjcil9bmdPbkNoYW5nZXMoYSl7YS5jb2xUeXBlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlJiZhLmNvbFR5cGUuY3VycmVudFZhbHVlIT09YS5jb2xUeXBlLnBy'@;
put 'ZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmIXRoaXMuZmlsdGVyJiZ0aGlzLmNvbFR5cGUmJnRoaXMuZmllbGQmJnRoaXMuc2V0dXBEZWZhdWx0RmlsdGVyKHRoaXMuZmllbGQsdGhpcy5jb2xUeXBlKSxhLmZpZWxkJiZhLmZpZWxkLmN1cnJlbnRWYWx1ZSYmYS5maWVsZC5jdXJy'@;
put 'ZW50VmFsdWUhPT1hLmZpZWxkLnByZXZpb3VzVmFsdWUmJiF0aGlzLmN1c3RvbUZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSl9bmdPbkRlc3Ryb3koKXtzdXBlci5uZ09uRGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0'@;
put 'aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c29ydChhKXt0aGlzLnNvcnRhYmxlJiYodGhpcy5fc29ydC50b2dnbGUodGhpcy5fc29ydEJ5LGEpLHRoaXMuX3NvcnRPcmRlcj10aGlzLl9zb3J0LnJldmVyc2U/Y2QuREVTQzpjZC5BU0MsdGhpcy5fc29ydERpcmVjdGlvbj10aGlz'@;
put 'Ll9zb3J0T3JkZXI9PT1jZC5ERVNDPyJkb3duIjoidXAiLHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSl9bGlzdGVuRm9yRGV0YWlsUGFuZUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5z'@;
put 'aG93U2VwYXJhdG9yIT09IWEmJih0aGlzLnNob3dTZXBhcmF0b3I9IWEsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9KX1saXN0ZW5Gb3JTb3J0aW5nQ2hhbmdlcygpe3JldHVybiB0aGlzLl9zb3J0LmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hhbmdlRGV0ZWN0'@;
put 'b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5zb3J0T3JkZXIhPT1jZC5VTlNPUlRFRCYmYS5jb21wYXJhdG9yIT09dGhpcy5fc29ydEJ5JiYodGhpcy5fc29ydE9yZGVyPWNkLlVOU09SVEVELHRoaXMuc29ydE9yZGVyQ2hhbmdlLmVtaXQodGhpcy5fc29ydE9yZGVyKSx0aGlzLl9zb3J0RGly'@;
put 'ZWN0aW9uPW51bGwpfSl9c2V0dXBEZWZhdWx0RmlsdGVyKGEsZCl7Im51bWJlciI9PT1kP3RoaXMuc2V0RmlsdGVyKG5ldyB2ZyhuZXcgekUoYSkpKToic3RyaW5nIj09PWQmJnRoaXMuc2V0RmlsdGVyKG5ldyB5ZyhuZXcgVUUoYSkpKSx0aGlzLmZpbHRlciYmdGhpcy5pbml0RmlsdGVyVmFs'@;
put 'dWUmJih0aGlzLnVwZGF0ZUZpbHRlclZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1ZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFdFKSxzdChRMyksc3QocHMpLHN0KGMyKSxzdChGYSkpfSxj'@;
put 'Llx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsakUsNSksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5wcm9qZWN0ZWRGaWx0ZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6'@;
put 'WyJyb2xlIiwiY29sdW1uaGVhZGVyIl0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihocigiYXJpYS1zb3J0IixkLmFyaWFTb3J0KSxicigiZGF0YWdyaWQtY29sdW1uIiwhMCkpfSxpbnB1dHM6e2ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOltRbi5Ob25lLCJj'@;
put 'bHJGaWx0ZXJTdHJpbmdQbGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1BsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6W1FuLk5vbmUsImNsckZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJN'@;
put 'aW5QbGFjZWhvbGRlcjpbUW4uTm9uZSwiY2xyRmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciJdLGNvbFR5cGU6W1FuLk5vbmUsImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbUW4uTm9uZSwiY2xyRGdGaWVsZCIsImZpZWxkIl0s'@;
put 'c29ydEJ5OltRbi5Ob25lLCJjbHJEZ1NvcnRCeSIsInNvcnRCeSJdLHNvcnRPcmRlcjpbUW4uTm9uZSwiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSx1cGRhdGVGaWx0ZXJWYWx1ZTpbUW4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntz'@;
put 'b3J0T3JkZXJDaGFuZ2U6ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbWHUoW3EzXSksc28sQmFdLG5nQ29udGVudFNlbGVjdG9yczpQU2UsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbImNvbHVtblRpdGxl'@;
put 'IiwiIl0sWzEsImRhdGFncmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIs'@;
put 'ImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFz'@;
put 'cyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJj'@;
put 'bGFzcyIsInNvcnQtaWNvbiIsNCwibmdJZiJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVl'@;
put 'Il0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlv'@;
put 'bihhLGQpezEmYSYmKGppKE9TZSksZ2UoMCwiZGl2IiwxKSxidCgxLE5TZSwzLDIsImJ1dHRvbiIsMiksT3IoMiksYnQoMyxWU2UsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCxqU2UsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDQpKDUsQlNlLDEsMCwibmctdGVtcGxhdGUi'@;
put 'LG51bGwsMCxvdSkoNyx6U2UsMiwxLCJzcGFuIiw1KSg4LFVTZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSxiZSgpKSwyJmEmJih3ZSgpLFBlKCJuZ0lmIixkLnNvcnRhYmxlKSx3ZSgyKSxQZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ZC5j'@;
put 'b2xUeXBlKSx3ZSgpLFBlKCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJudW1iZXIiPT1kLmNvbFR5cGUpLHdlKDMpLFBlKCJuZ0lmIiwhZC5zb3J0YWJsZSksd2UoKSxQZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbcWksSzEsS3MscW5lLFduZSxP'@;
put 'Tl0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksTWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZmlsdGVycz1hLHRoaXMuX3NvcnQ9ZCx0aGlzLl9wYWdlPWgsdGhpcy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3Bs'@;
put 'YXllZD1bXSx0aGlzLl9jaGFuZ2U9bmV3IG5uLHRoaXMuX2FsbENoYW5nZXM9bmV3IG5uLHRoaXMudHJhY2tCeT1mPT5mfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2FsbH1zZXQgYWxsKGEpe3RoaXMuX2FsbD1hLHRoaXMuZW1pdEFsbENo'@;
put 'YW5nZXMoYSksdGhpcy5zbWFydD90aGlzLl9maWx0ZXJJdGVtcygpOih0aGlzLl9kaXNwbGF5ZWQ9YSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9'@;
put 'Z2V0IGFsbENoYW5nZXMoKXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMuX2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3Vi'@;
put 'JiZ0aGlzLl9zb3J0U3ViLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFnZVN1YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJ'@;
put 'dGVtcygpKSx0aGlzLl9zb3J0U3ViPXRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFyYXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRo'@;
put 'aXMuX2NoYW5nZVBhZ2UoKSl9cmVmcmVzaCgpe3RoaXMuc21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7'@;
put 'dGhpcy51bmluaXRpYWxpemVkfHwodGhpcy5fZmlsdGVyZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhpcy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0'@;
put 'ZXJlZC5sZW5ndGgsdGhpcy5fc29ydEl0ZW1zKCkpfV9zb3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9zb3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFu'@;
put 'Z2VQYWdlKCl7dGhpcy51bmluaXRpYWxpemVkfHx0aGlzLl9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJ'@;
put 'dGVtKzEpOnRoaXMuX2ZpbHRlcmVkLHRoaXMuZW1pdENoYW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoUTMpLGZyKFdFKSxmcih6NCkpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgp'@;
put 'LCQ3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLnZjcj1mLHRoaXMuZGlmZmVyPW51bGwsdGhpcy5zdWJzY3JpcHRpb25zPVtdLGguc21hcnRlblVwKCksdGhpcy5pdGVyYWJsZVByb3h5'@;
put 'PW5ldyBMcyh0aGlzLnZjcix0aGlzLnRlbXBsYXRlLHRoaXMuZGlmZmVycyksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5jaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLml0ZXJhYmxlUHJveHkubmdGb3JPZj12LHRoaXMuaXRlcmFibGVQcm94eS5uZ0RvQ2hlY2soKX0pKX1zZXQgcmF3SXRl'@;
put 'bXMoYSl7dGhpcy5fcmF3SXRlbXM9YXx8W119c2V0IHRyYWNrQnkoYSl7dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yVHJhY2tCeT1hfXN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKGEsZCl7cmV0dXJuITB9bmdEb0NoZWNrKCl7dGhpcy5kaWZmZXJ8fCh0aGlzLmRpZmZlcj10aGlzLmRp'@;
put 'ZmZlcnMuZmluZCh0aGlzLl9yYXdJdGVtcykuY3JlYXRlKHRoaXMuaXRlcmFibGVQcm94eS5uZ0ZvclRyYWNrQnkpKSx0aGlzLmRpZmZlciYmdGhpcy5kaWZmZXIuZGlmZih0aGlzLl9yYXdJdGVtcykmJih0aGlzLml0ZW1zLmFsbD10aGlzLl9yYXdJdGVtcyl9bmdPbkRlc3Ryb3koKXt0aGlz'@;
put 'LnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCh0bCksc3QoeHkpLHN0KE1nKSxzdChwcykpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJE'@;
put 'Z0l0ZW1zIiwiIiwiY2xyRGdJdGVtc09mIiwiIl1dLGlucHV0czp7cmF3SXRlbXM6W1FuLk5vbmUsImNsckRnSXRlbXNPZiIsInJhd0l0ZW1zIl0sdHJhY2tCeTpbUW4uTm9uZSwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19fSksY30pKCksTk49KCgpPT57Y2xhc3MgY3tjb25zdHJ1'@;
put 'Y3RvcihhKXt0aGlzLml0ZW1zPWF9Z2V0IGVtcHR5RGF0YWdyaWQoKXtyZXR1cm4hKHRoaXMuaXRlbXMubG9hZGluZ3x8dGhpcy5pdGVtcy5kaXNwbGF5ZWQmJjAhPT10aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKShzdChNZykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGxhY2Vob2xkZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIiLCEwKX0sbmdDb250'@;
put 'ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1wbGFjZWhv'@;
put 'bGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLGdlKDAsImRpdiIsMCksYnQoMSxaU2UsMSwwLCJkaXYiLDEpLGdlKDIsInNwYW4iLDIpLGJ0KDMsV1NlLDEsMCwibmctY29u'@;
put 'dGVudCIsMyksYmUoKSgpKSwyJmEmJihicigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksd2UoKSxQZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSx3ZSgyKSxQZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbcWldLGVuY2Fwc3VsYXRpb246Mn0pLGN9'@;
put 'KSgpLFZOPSgoKT0+e2NsYXNzIGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmlnZ2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5c'@;
put 'dTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxqTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IG5ufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1y'@;
put 'ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxHRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixUKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0'@;
put 'aGlzLmVsPWQsdGhpcy5zaWducG9zdElkU2VydmljZT1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9Zix0aGlzLnBsYXRmb3JtSWQ9VCx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5kb2N1bWVudD12fW5nT25Jbml0KCl7dGhpcy5zaWducG9zdEZv'@;
put 'Y3VzTWFuYWdlci50cmlnZ2VyRWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5hcmlhRXhwYW5kZWQ9YTtjb25zdCBkPXRoaXMuaXNPcGVuO3RoaXMuaXNPcGVuPWEs'@;
put 'IXRoaXMuaXNPcGVuJiZkJiZ0aGlzLmZvY3VzT25DbG9zZSgpfSksdGhpcy5zaWducG9zdElkU2VydmljZS5pZC5zdWJzY3JpYmUoYT0+dGhpcy5hcmlhQ29udHJvbD1hKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uU2ln'@;
put 'bnBvc3RUcmlnZ2VyQ2xpY2soYSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX1mb2N1c09uQ2xvc2UoKXtsYSh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5z'@;
put 'aWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRGwpLHN0KCRpKSxzdChqTiksc3QoVk4pLHN0KCRzKSxzdChBbykpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIi'@;
put 'LCJjbHJTaWducG9zdFRyaWdnZXIiLCIiXV0saG9zdEF0dHJzOlsxLCJzaWducG9zdC10cmlnZ2VyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkh0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TaWducG9zdFRyaWdnZXJDbGljayhmKX0pLDIm'@;
put 'YSYmKGhyKCJhcmlhLWV4cGFuZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2wpLGJyKCJhY3RpdmUiLGQuaXNPcGVuKSl9fSksY30pKCksQk49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnVzZUN1'@;
put 'c3RvbVRyaWdnZXI9ITF9c2V0IGN1c3RvbVRyaWdnZXIoYSl7dGhpcy51c2VDdXN0b21UcmlnZ2VyPSEhYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoUnMpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25w'@;
put 'b3N0Il1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsR0UsNSksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5jdXN0b21UcmlnZ2VyPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJzaWducG9zdCIs'@;
put 'ITApfSxmZWF0dXJlczpbR2koW1ZOLGpOXSksWHUoW3EzXSldLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzaWducG9zdC1hY3Rpb24iLCJidG4iLCJidG4t'@;
put 'c20iLCJidG4taWNvbiIsImJ0bi1saW5rIl0sWyJzaGFwZSIsImluZm8tY2lyY2xlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxidCgwLEdTZSwzLDIsIm5nLWNvbnRhaW5lciIsMCksT3IoMSkpLDImYSYmUGUoIm5nSWYiLCFkLnVzZUN1c3RvbVRyaWdnZXIpfSxkZXBl'@;
put 'bmRlbmNpZXM6W3FpLEtzLEdFXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZHluYW1pYz0hMX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNlbGxWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwp'@;
put 'fW5nT25EZXN0cm95KCl7dGhpcy5jZWxsVmlldy5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkZy13cmFwcGVkLWNlbGwiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEs'@;
put 'ZCl7aWYoMSZhJiZVbygkU2UsNSksMiZhKXtsZXQgaDtNaShoPUNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY2VsbFBvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGpp'@;
put 'KCksYnQoMCxxU2UsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLG91KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFo0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52Y3I9YX1nZXQgX3ZpZXcoKXtyZXR1cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KFlOLHRoaXMudmNy'@;
put 'KS5jZWxsVmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBGRShZTix0aGlzLnZjcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHBzKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1j'@;
put 'ZWxsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsQk4sNCksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5zaWducG9zdD1mKX19LGhvc3RBdHRyczpbInJvbGUiLCJncmlkY2VsbCJdLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7'@;
put 'MiZhJiZicigiZGF0YWdyaWQtY2VsbCIsITApKCJkYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIixkLnNpZ25wb3N0Lmxlbmd0aD4wKX0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3Vs'@;
put 'YXRpb246Mn0pLGN9KSgpLEtuZT0wLHpiPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBMMHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5leHBhbmRhYmxlSWQ9IiIsdGhpcy5fcmVwbGFjZT1uZXcgQXIoITEpLHRoaXMuX2FuaW1hdGU9bmV3IG5uLEtuZSsrLHRoaXMuZXhwYW5kYWJsZUlkPSJj'@;
put 'bHItZGctZXhwYW5kYWJsZS1yb3ctIitLbmV9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2FuaW1hdGUubmV4dCgpLHRoaXMuX2V4cGFuZENoYW5nZS5u'@;
put 'ZXh0KGEpKX1nZXQgcmVwbGFjZSgpe3JldHVybiB0aGlzLl9yZXBsYWNlLmFzT2JzZXJ2YWJsZSgpfWdldCBhbmltYXRlKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGUuYXNPYnNlcnZhYmxlKCl9bG9hZGluZ1N0YXRlQ2hhbmdlKGEpe3N1cGVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSxhIT09QTAu'@;
put 'TE9BRElORyYmdGhpcy5fYW5pbWF0ZS5uZXh0KCl9c2V0UmVwbGFjZShhKXt0aGlzLl9yZXBsYWNlLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9'@;
put 'KSgpO3ZhciBxNz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRJU1BMQVk9MF09IkRJU1BMQVkiLGNbYy5DQUxDVUxBVEU9MV09IkNBTENVTEFURSIsY30ocTd8fHt9KSx3YT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5TaW5nbGU9MV09IlNpbmdsZSIsY1tjLk11'@;
put 'bHRpPTJdPSJNdWx0aSIsY30od2F8fHt9KTtsZXQgek49KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2R5bmFtaWM9ITF9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7'@;
put 'dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVW8oS1Nl'@;
put 'LDUpLDImYSl7bGV0IGg7TWkoaD1DaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksYnQoMCxYU2UsMSwwLCJu'@;
put 'Zy10ZW1wbGF0ZSIsbnVsbCwwLG91KSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFdUZT0wLEs3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMuX2ZpbHRlcnM9ZCx0aGlzLnByZXNlcnZlU2VsZWN0aW9uPSExLHRoaXMuc2hpZnRQcmVzc2VkPSEx'@;
put 'LHRoaXMucm93U2VsZWN0aW9uTW9kZT0hMSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzPVtdLHRoaXMubG9ja2VkUmVmcz1bXSx0aGlzLnZhbHVlQ29sbGVjdG9yPW5ldyBubix0aGlzLl9zZWxlY3Rpb25UeXBlPXdhLk5vbmUsdGhpcy5fY2hhbmdlPW5ldyBubix0aGlzLnN1YnNjcmlwdGlvbnM9'@;
put 'W10sdGhpcy5pZD0iY2xyLWRnLXNlbGVjdGlvbiIrV1RlKyssdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57IXRoaXMuX3NlbGVjdGFibGV8fHRoaXMucHJlc2VydmVTZWxlY3Rpb258fHRoaXMuY2xlYXJTZWxlY3Rpb24oKX0pKSx0'@;
put 'aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9pdGVtcy5hbGxDaGFuZ2VzLnN1YnNjcmliZShoPT57Y29uc3QgZj1bXTtzd2l0Y2godGhpcy5zZWxlY3Rpb25UeXBlKXtjYXNlIHdhLk5vbmU6YnJlYWs7Y2FzZSB3YS5TaW5nbGU6e2xldCB2LFQ9ITE7dGhpcy5jdXJyZW50U2luZ2xlJiYh'@;
put 'dGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmJiYodGhpcy5wcmV2U2luZ2xlU2VsZWN0aW9uUmVmPXRoaXMuX2l0ZW1zLnRyYWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaC5mb3JFYWNoKFk9Pntjb25zdCByZT10aGlzLl9pdGVtcy50cmFja0J5KFkpO3RoaXMucHJldlNpbmdsZVNlbGVj'@;
put 'dGlvblJlZj09PXJlJiYodj1ZLFQ9ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKHJlKT4tMSYmZi5wdXNoKHJlKX0pLHRoaXMuX2l0ZW1zLnNtYXJ0JiYhdiYmKFQ9ITApLHNldFRpbWVvdXQoKCk9PntUJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31jYXNlIHdhLk11bHRp'@;
put 'OntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxUPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChZPT57dGhp'@;
put 'cy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKHRoaXMuX2l0ZW1zLnRyYWNrQnkoWSkpfSkpLGguZm9yRWFjaChZPT57Y29uc3QgcmU9dGhpcy5faXRlbXMudHJhY2tCeShZKTt0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihyZSk+LTEmJmYucHVzaChyZSl9KSx2Lmxlbmd0aD4wJiYoaC5mb3JFYWNo'@;
put 'KFk9Pntjb25zdCByZT10aGlzLl9pdGVtcy50cmFja0J5KFkpLGZlPXRoaXMucHJldlNlbGVjdGlvblJlZnMuaW5kZXhPZihyZSk7ZmU+LTEmJih2W2ZlXT1ZLFQ9ITApfSksdGhpcy5faXRlbXMuc21hcnQmJih2PXYuZmlsdGVyKFk9PmguaW5kZXhPZihZKT4tMSksdGhpcy5jdXJyZW50Lmxl'@;
put 'bmd0aCE9PXYubGVuZ3RoJiYoVD0hMCkpLHNldFRpbWVvdXQoKCk9PntUJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlwZShzZygwKSkuc3Vic2NyaWJlKCgpPT50'@;
put 'aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxhPT09d2EuTm9uZT9kZWxldGUgdGhpcy5jdXJyZW50'@;
put 'OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5n'@;
put 'bGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNP'@;
put 'YnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT13YS5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXdhLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlz'@;
put 'LnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVudChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxk'@;
put 'JiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PXdhLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT13YS5NdWx0aSYmdGhpcy5jdXJyZW50LmluZGV4T2YoYSk+PTB9'@;
put 'c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSB3YS5Ob25lOmNhc2Ugd2EuU2luZ2xlOmJyZWFrO2Nhc2Ugd2EuTXVsdGk6aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0'@;
put 'ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09d2EuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZmlsdGVyKGY9PiExPT09dGhp'@;
put 'cy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9dGhpcy5faXRlbXMudHJhY2tCeShhKTsh'@;
put 'MD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFja0J5KGEpO3JldHVybiB0aGlzLmxvY2tl'@;
put 'ZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09d2EuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PXdhLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRpc3BsYXllZC5mb3JFYWNoKGE9Pntjb25z'@;
put 'dCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYmITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0'@;
put 'aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVtKGEpe2lmKHRoaXMuY3VycmVudD10aGlzLmN1cnJl'@;
put 'bnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhpcy5sb2NrZWRSZWZzLmZpbHRlcihoPT5o'@;
put 'IT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PXdhLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT13YS5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2luZ2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBl'@;
put 'PT09d2EuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKE1nKSxmcihRMykpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFVO'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlldz1uZXcgQXIocTcuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHModTIuQ0FMQ1VMQVRFX01PREVfT04pLnN1YnNjcmliZSgoKT0+dGhp'@;
put 'cy5fdmlldy5uZXh0KHE3LkNBTENVTEFURSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKHUyLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQocTcuRElTUExBWSkpKX1nZXQgdmlldygpe3JldHVybiB0aGlzLl92'@;
put 'aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoYmcpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZh'@;
put 'Y3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9PWEudGFyZ2V0LnRhZ05hbWUmJiJJTlBV'@;
put 'VCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEs3KSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwiZGF0'@;
put 'YWdyaWQtc2VsZWN0Il1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vblNlbGVjdGlvbkNlbGxDbGljayhmKX0pfX0pLGN9KSgpLCRFPTAsQ2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJl'@;
put 'LGZlLF9lLGtlLFdlKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1kLHRoaXMuZ2xvYmFsRXhwYW5kYWJsZT1oLHRoaXMuZXhwYW5kPWYsdGhpcy5kZXRhaWxTZXJ2aWNlPXYsdGhpcy5kaXNwbGF5TW9kZT1ULHRoaXMudmNyPVksdGhpcy5yZW5kZXJlcj1yZSx0aGlz'@;
put 'LmVsPWZlLHRoaXMuY29tbW9uU3RyaW5ncz1fZSx0aGlzLml0ZW1zPWtlLHRoaXMuZG9jdW1lbnQ9V2UsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IElyKCExKSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBJcighMSksdGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5leHBhbmRBbmltYXRpb25U'@;
put 'cmlnZ2VyPSExLHRoaXMuU0VMRUNUSU9OX1RZUEU9d2EsdGhpcy5pdGVtQ2hhbmdlcz1uZXcgZkUoMSksdGhpcy5fc2VsZWN0ZWQ9ITEsdGhpcy5fZGV0YWlsT3BlbkxhYmVsPSIiLHRoaXMuX2RldGFpbENsb3NlTGFiZWw9IiIsdGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9IiIsdGhpcy5zdWJz'@;
put 'Y3JpcHRpb25zPVtdLHRoaXMuX3NlbGVjdGFibGU9ITAsJEUrKyx0aGlzLmlkPSJjbHItZGctcm93IiskRSx0aGlzLnJhZGlvSWQ9ImNsci1kZy1yb3ctcmQiKyRFLHRoaXMuY2hlY2tib3hJZD0iY2xyLWRnLXJvdy1jYiIrJEUsdGhpcy5leHBhbmRhYmxlSWQ9Zi5leHBhbmRhYmxlSWQsdGhp'@;
put 'cy5zdWJzY3JpcHRpb25zLnB1c2goWTgodGhpcy5leHBhbmQucmVwbGFjZSx0aGlzLmV4cGFuZC5leHBhbmRDaGFuZ2UpLnN1YnNjcmliZSgoW0plLHR0XSk9PntKZSYmdHQ/KHRoaXMucmVwbGFjZWQ9ITAsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRh'@;
put 'dGFncmlkLXJvdy1yZXBsYWNlZCIpKToodGhpcy5yZXBsYWNlZD0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiZGF0YWdyaWQtcm93LXJlcGxhY2VkIikpfSkpfWdldCBpdGVtKCl7cmV0dXJuIHRoaXMuX2l0ZW19c2V0IGl0ZW0oYSl7dGhpcy5f'@;
put 'aXRlbT1hLHRoaXMuaXRlbUNoYW5nZXMubmV4dChhKSx0aGlzLmNsckRnU2VsZWN0YWJsZT10aGlzLl9zZWxlY3RhYmxlfWdldCBjbHJEZ1NlbGVjdGFibGUoKXtyZXR1cm4hdGhpcy5zZWxlY3Rpb24uaXNMb2NrZWQodGhpcy5pdGVtKX1zZXQgY2xyRGdTZWxlY3RhYmxlKGEpe3RoaXMuaXRl'@;
put 'bSYmdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCJmYWxzZSI9PT1hfHwhMT09PWEpLHRoaXMuX3NlbGVjdGFibGU9YX1nZXQgc2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXdhLk5vbmU/dGhpcy5fc2VsZWN0ZWQ6dGhpcy5zZWxlY3Rp'@;
put 'b24uaXNTZWxlY3RlZCh0aGlzLml0ZW0pfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09d2EuTm9uZT90aGlzLl9zZWxlY3RlZD1hOihhJiZ0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09d2EuTXVsdGk/dGhpcy5yYW5nZVNlbGVjdCgpOnRoaXMu'@;
put 'c2VsZWN0aW9uLnJhbmdlU3RhcnQ9bnVsbCx0aGlzLnNlbGVjdGlvbi5zZXRTZWxlY3RlZCh0aGlzLml0ZW0sYSkpfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZC5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmQuZXhwYW5kZWQ9YX1nZXQgY2xyRGdEZXRhaWxP'@;
put 'cGVuTGFiZWwoKXtyZXR1cm4gdGhpcy5fZGV0YWlsT3BlbkxhYmVsP3RoaXMuX2RldGFpbE9wZW5MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5vcGVufXNldCBjbHJEZ0RldGFpbE9wZW5MYWJlbChhKXt0aGlzLl9kZXRhaWxPcGVuTGFiZWw9YX1nZXQgY2xyRGdEZXRhaWxDbG9zZUxh'@;
put 'YmVsKCl7cmV0dXJuIHRoaXMuX2RldGFpbENsb3NlTGFiZWw/dGhpcy5fZGV0YWlsQ2xvc2VMYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZX1zZXQgY2xyRGdEZXRhaWxDbG9zZUxhYmVsKGEpe3RoaXMuX2RldGFpbENsb3NlTGFiZWw9YX1nZXQgY2xyRGdSb3dTZWxlY3Rpb25M'@;
put 'YWJlbCgpe3JldHVybiB0aGlzLl9yb3dTZWxlY3Rpb25MYWJlbD90aGlzLl9yb3dTZWxlY3Rpb25MYWJlbDp0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3R9c2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoYSl7dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw9YX1nZXQgX3ZpZXcoKXtyZXR1'@;
put 'cm4gdGhpcy53cmFwcGVkSW5qZWN0b3IuZ2V0KHpOLHRoaXMudmNyKS5yb3dWaWV3fW5nT25Jbml0KCl7dGhpcy53cmFwcGVkSW5qZWN0b3I9bmV3IEZFKHpOLHRoaXMudmNyKSx0aGlzLnNlbGVjdGlvbi5sb2NrSXRlbSh0aGlzLml0ZW0sITE9PT10aGlzLmNsckRnU2VsZWN0YWJsZSl9bmdB'@;
put 'ZnRlckNvbnRlbnRJbml0KCl7dGhpcy5kZ0NlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5kZ0NlbGxzLmZvckVhY2goYT0+e2EuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuaW5zZXJ0KGEuX3ZpZXcpfSl9KX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnN1'@;
put 'YnNjcmlwdGlvbnMucHVzaCh0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Njcm9sbGFibGVDZWxscy5kZXRhY2goKTtmb3IobGV0IGQ9dGhpcy5fY2FsY3VsYXRlZENlbGxzLmxl'@;
put 'bmd0aDtkPjA7ZC0tKXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5kZXRhY2goKTthPT09cTcuQ0FMQ1VMQVRFPyh0aGlzLmRpc3BsYXlDZWxscz0hMSx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX2NhbGN1bGF0ZWRDZWxscy5pbnNlcnQoZC5fdmlldyl9'@;
put 'KSk6KHRoaXMuZGlzcGxheUNlbGxzPSEwLHRoaXMuZGdDZWxscy5mb3JFYWNoKGQ9PntkLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChkLl92aWV3KX0pKX0pLHRoaXMuZXhwYW5kLmFuaW1hdGUuc3Vic2NyaWJlKCgpPT57dGhpcy5leHBhbmRBbmltYXRp'@;
put 'b25UcmlnZ2VyPSF0aGlzLmV4cGFuZEFuaW1hdGlvblRyaWdnZXJ9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZShhPSF0aGlzLnNlbGVjdGVkKXthIT09dGhpcy5zZWxlY3RlZCYmKHRoaXMuc2VsZWN0ZWQ9YSx0'@;
put 'aGlzLnNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpKX10b2dnbGVFeHBhbmQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlJiYodGhpcy5leHBhbmRBbmltYXRpb24udXBkYXRlU3RhcnRIZWlnaHQoKSx0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0'@;
put 'aGlzLmV4cGFuZGVkKSl9Y2xlYXJSYW5nZXMoYSl7YS5zaGlmdEtleSYmKHRoaXMuZG9jdW1lbnQuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCksLTEhPT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikmJihhLnByZXZlbnREZWZhdWx0KCksdGhp'@;
put 'cy50b2dnbGUoITApKSl9c2VsZWN0Um93KGE9IXRoaXMuc2VsZWN0ZWQsZCl7IkxBQkVMIiE9PWQudGFyZ2V0LnRhZ05hbWUmJih0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09dGhpcy5TRUxFQ1RJT05fVFlQRS5TaW5nbGU/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT10aGlz'@;
put 'Lml0ZW06dGhpcy50b2dnbGUoYSkpfXJhbmdlU2VsZWN0KCl7Y29uc3QgYT10aGlzLml0ZW1zLmRpc3BsYXllZDtpZighYSlyZXR1cm47Y29uc3QgZD1hLmluZGV4T2YodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCk7aWYodGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCYmdGhpcy5zZWxlY3Rp'@;
put 'b24uY3VycmVudC5pbmNsdWRlcyh0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0KSYmdGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkJiYtMSE9PWQpe2NvbnN0IGg9YS5pbmRleE9mKHRoaXMuaXRlbSksZj1uZXcgU2V0KHRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuY29uY2F0KGEuc2xpY2UoTWF0'@;
put 'aC5taW4oZCxoKSxNYXRoLm1heChkLGgpKzEpKSk7dGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKSx0aGlzLnNlbGVjdGlvbi5jdXJyZW50LnB1c2goLi4uZil9ZWxzZSB0aGlzLnNlbGVjdGlvbi5yYW5nZVN0YXJ0PXRoaXMuaXRlbX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yykoc3QoSzcpLHN0KFU3KSxzdChXNyksc3QoemIpLHN0KGMyKSxzdChVTiksc3QocHMpLHN0KGNzKSxzdCgkaSksc3QoUnMpLHN0KE1nKSxzdCgkcykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il1dLGNvbnRlbnRR'@;
put 'dWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsWjQsNCksMiZhKXtsZXQgZjtNaShmPUNpKCkpJiYoZC5kZ0NlbGxzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVW8oUkUsNSksVW8oSlNlLDUpLFVvKFFTZSw1LHBzKSxVbyhleGUsNSxwcyksVW8odHhl'@;
put 'LDUscHMpKSwyJmEpe2xldCBoO01pKGg9Q2koKSkmJihkLmV4cGFuZEFuaW1hdGlvbj1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5kZXRhaWxCdXR0b249aC5maXJzdCksTWkoaD1DaSgpKSYmKGQuX3N0aWNreUNlbGxzPWguZmlyc3QpLE1pKGg9Q2koKSkmJihkLl9zY3JvbGxhYmxlQ2VsbHM9'@;
put 'aC5maXJzdCksTWkoaD1DaSgpKSYmKGQuX2NhbGN1bGF0ZWRDZWxscz1oLmZpcnN0KX19LGhvc3RBdHRyczpbInJvbGUiLCJyb3dncm91cCJdLGhvc3RWYXJzOjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoaHIoImFyaWEtb3ducyIsZC5pZCksYnIoImRhdGFncmlkLXJvdyIs'@;
put 'ITApKCJkYXRhZ3JpZC1zZWxlY3RlZCIsZC5zZWxlY3RlZCkpfSxpbnB1dHM6e2l0ZW06W1FuLk5vbmUsImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0YWJsZSIsc2VsZWN0ZWQ6W1FuLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFu'@;
put 'ZGVkOltRbi5Ob25lLCJjbHJEZ0V4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJEZ0RldGFpbE9wZW5MYWJlbDoiY2xyRGdEZXRhaWxPcGVuTGFiZWwiLGNsckRnRGV0YWlsQ2xvc2VMYWJlbDoiY2xyRGdEZXRhaWxDbG9zZUxhYmVsIixjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsOiJjbHJEZ1Jvd1Nl'@;
put 'bGVjdGlvbkxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hhbmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltHaShbemIse3Byb3ZpZGU6TDAsdXNlRXhpc3Rpbmc6emJ9LHtwcm92aWRlOkViLHVzZUV4aXN0'@;
put 'aW5nOnpifV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6cnhlLGRlY2xzOjksdmFyczozLGNvbnN0czpbWyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsiZGV0YWlsQnV0'@;
put 'dG9uIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNlZG93biIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGlj'@;
put 'ayJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxl'@;
put 'Y3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwi'@;
put 'LDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1u'@;
put 'IGRhdGFncmlkLWNlbGwiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRh'@;
put 'dGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbInR5cGUiLCJjaGVja2JveCIsImNsckNoZWNrYm94IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImlkIiwiZGlzYWJsZWQiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImNsaWNrIiwiZm9yIl0sWzEs'@;
put 'ImNsci1zci1vbmx5Il0sWyJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWyJy'@;
put 'b2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQt'@;
put 'Y2VsbCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b24i'@;
put 'LDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWljb24iXSxbImNsclNtYWxsIiwiIl0sWzEsImRhdGFncmlkLWRldGFpbC1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiXSxbInR5cGUiLCJidXR0b24i'@;
put 'LCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsImRhdGFncmlkLWRldGFpbC1jYXJldC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkobnhlKSxi'@;
put 'dCgwLGN4ZSwzLDIsImRpdiIsNikoMSxkeGUsMiwyLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDcpKDIsZnhlLDEsMSxudWxsLDgpKDMscHhlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxvdSkoNSxFeGUsMTYsMTMsIm5nLXRlbXBsYXRlIixudWxsLDEsb3UpLE5sKDcsbnVsbCwyKSks'@;
put 'MiZhJiYoUGUoIm5nSWYiLGQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUpLHdlKCksUGUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiZkLmV4cGFuZC5leHBhbmRhYmxlKSx3ZSgpLFBlKCJuZ0lmIiwhZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSYmIWQuZXhw'@;
put 'YW5kLmV4cGFuZGFibGUpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxLMSxLcyxYcyx2MSxfMSxJTixMTixUbCxmMSxpRSxjYSxvYSxSRSxuaCxaTl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyIHkxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuV0lEVEg9MF09IldJRFRIIixjW2MuSElEREVO'@;
put 'PTFdPSJISURERU4iLGN9KHkxfHx7fSk7Y29uc3QgWG5lPU9iamVjdC5rZXlzKHkxKS5tYXAoYz0+eTFbY10pLmZpbHRlcihjPT5jPT09cGFyc2VJbnQoYywxMCkpO2xldCBlcD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb2x1bW5zPVtdLHRoaXMuX2NhY2hlPVtdfWdldCBj'@;
put 'b2x1bW5TdGF0ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zLm1hcChhPT5hLnZhbHVlKX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uU3RhdGVzLmZpbHRlcihhPT5hLmhpZGVhYmxlKS5sZW5ndGg+MH1jYWNoZSgpe3RoaXMuX2NhY2hlPXRoaXMuY29sdW1ucy5t'@;
put 'YXAoYT0+e2NvbnN0IGQ9ey4uLmEudmFsdWV9O3JldHVybiBkZWxldGUgZC5jaGFuZ2VzLGR9KX1oYXNDYWNoZSgpe3JldHVybiEhdGhpcy5fY2FjaGUubGVuZ3RofXJlc2V0VG9MYXN0Q2FjaGUoKXt0aGlzLl9jYWNoZS5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zW2RdLm5leHQoey4u'@;
put 'LmEsY2hhbmdlczpYbmV9KX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7YS5uZXh0KHsuLi5hLnZhbHVlLC4uLmR9KX19cmV0'@;
put 'dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksSm5lPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5maWx0ZXJzPWEsdGhpcy5zb3J0PWQs'@;
put 'dGhpcy5wYWdlPWgsdGhpcy5kZWJvdW5jZXI9Zix0aGlzLmNoYW5nZT10aGlzLmRlYm91bmNlci5jaGFuZ2UucGlwZSh5cigoKT0+dGhpcy5zdGF0ZSkpfWdldCBzdGF0ZSgpe2NvbnN0IGE9e307dGhpcy5wYWdlLnNpemU+MCYmKGEucGFnZT17ZnJvbTp0aGlzLnBhZ2UuZmlyc3RJdGVtLHRv'@;
put 'OnRoaXMucGFnZS5sYXN0SXRlbSxzaXplOnRoaXMucGFnZS5zaXplLGN1cnJlbnQ6dGhpcy5wYWdlLmN1cnJlbnR9KSx0aGlzLnNvcnQuY29tcGFyYXRvciYmKGEuc29ydD10aGlzLnNvcnQuY29tcGFyYXRvciBpbnN0YW5jZW9mIFpFP3tieTp0aGlzLnNvcnQuY29tcGFyYXRvci5wcm9wLHJl'@;
put 'dmVyc2U6dGhpcy5zb3J0LnJldmVyc2V9OntieTp0aGlzLnNvcnQuY29tcGFyYXRvcixyZXZlcnNlOnRoaXMuc29ydC5yZXZlcnNlfSk7Y29uc3QgZD10aGlzLmZpbHRlcnMuZ2V0QWN0aXZlRmlsdGVycygpO2lmKGQubGVuZ3RoPjApe2EuZmlsdGVycz1bXTtmb3IoY29uc3QgaCBvZiBkKWEu'@;
put 'ZmlsdGVycy5wdXNoKGguc3RhdGU/aC5zdGF0ZTpoKX1yZXR1cm4gYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoZnIoUTMpLGZyKFdFKSxmcih6NCksZnIoQmIpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9'@;
put 'KSxjfSkoKSxRbmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnpvbmU9YSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IG5uLHRoaXMuY29uZmlnPXtrZXlHcmlkUm93czoiW3JvbGU9cm93XTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyKSIsa2V5'@;
put 'R3JpZENlbGxzOiJbcm9sZT1ncmlkY2VsbF06bm90KC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uKTpub3QoLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRlbnQpLCBbcm9sZT1jb2x1bW5oZWFkZXJdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRl'@;
put 'ci1jb250ZW50KSwgLmRhdGFncmlkLWRldGFpbC1jYXJldCIsa2V5R3JpZDoiW3JvbGU9Z3JpZF0ifX1nZXQgZ3JpZCgpe3JldHVybiB0aGlzLmhvc3Q/LnF1ZXJ5U2VsZWN0b3IodGhpcy5jb25maWcua2V5R3JpZCl9Z2V0IHJvd3MoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9y'@;
put 'QWxsKHRoaXMuY29uZmlnLmtleUdyaWRSb3dzKX1nZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscyl9bmdPbkRlc3Ryb3koKXt0aGlzLmRlc3Ryb3kkLm5leHQoKSx0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCl9YWRk'@;
put 'TGlzdGVuZXJzKCl7dGhpcy5saXN0ZW5lcnNBZGRlZHx8KHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e1FoKHRoaXMuZ3JpZCwibW91c2Vkb3duIikucGlwZShYaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigxPT09YS5idXR0b25zJiYhYS5jdHJsS2V5KXtjb25z'@;
put 'dCBkPXRoaXMuY2VsbHM/QXJyYXkuZnJvbSh0aGlzLmNlbGxzKS5maW5kKGg9Pmg9PT1hLnRhcmdldHx8aD09PWEudGFyZ2V0LmNsb3Nlc3QodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSk6bnVsbDtkJiZ0aGlzLnNldEFjdGl2ZUNlbGwoZCl9fSksUWgodGhpcy5ncmlkLCJrZXlkb3duIiku'@;
put 'cGlwZShYaCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKGE9PntpZigoIWEudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZHJhZy1oYW5kbGUiKXx8IkFycm93TGVmdCIhPT1hLmNvZGUmJiJBcnJvd1JpZ2h0IiE9PWEuY29kZSkmJigiQXJyb3dVcCI9PT1hLmNvZGV8fCJBcnJvd0Rvd24i'@;
put 'PT09YS5jb2RlfHwiQXJyb3dMZWZ0Ij09PWEuY29kZXx8IkFycm93UmlnaHQiPT09YS5jb2RlfHwiRW5kIj09PWEuY29kZXx8IkhvbWUiPT09YS5jb2RlfHwiUGFnZVVwIj09PWEuY29kZXx8IlBhZ2VEb3duIj09PWEuY29kZSkpe2NvbnN0e3g6ZCx5Omh9PXRoaXMuZ2V0TmV4dEl0ZW1Db29y'@;
put 'ZGluYXRlKGEpLGY9dGhpcy5yb3dzP0FycmF5LmZyb20odGhpcy5yb3dzW2hdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKSlbZF06bnVsbDtmJiZ0aGlzLnNldEFjdGl2ZUNlbGwoZiksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRl'@;
put 'ZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5ob3N0PWEsdGhpcy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMuY2VsbHM/LmZvckVhY2goZD0+ZC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSksKHRoaXMuY2VsbHM/dGhp'@;
put 'cy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKX1zZXRBY3RpdmVDZWxsKGEpe2NvbnN0IGQ9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQodj0+IjAiPT09di5nZXRBdHRyaWJ1dGUoInRhYmluZGV4IikpOm51bGw7ZCYmZC5zZXRBdHRy'@;
put 'aWJ1dGUoInRhYmluZGV4IiwiLTEiKSxhLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik7Y29uc3QgaD1mdW5jdGlvbiBHVGUoYyl7Y29uc3QgbD1bImFbaHJlZl0iLCJhcmVhW2hyZWZdIiwiaW5wdXQ6bm90KFtkaXNhYmxlZF0pIiwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKSIsInNlbGVj'@;
put 'dDpub3QoW2Rpc2FibGVkXSkiLCJ0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSkiLCJpZnJhbWUiLCJvYmplY3QiLCJlbWJlZCIsIipbdGFiaW5kZXhdIiwiKltjb250ZW50ZWRpdGFibGU9dHJ1ZV0iLCJbcm9sZT1idXR0b25dOm5vdChbZGlzYWJsZWRdKSJdLmpvaW4oIiwiKTtyZXR1cm4gQXJy'@;
put 'YXkuZnJvbShjLnF1ZXJ5U2VsZWN0b3JBbGwobCkpfShhKTsoImNvbHVtbmhlYWRlciIhPT1hLmdldEF0dHJpYnV0ZSgicm9sZSIpJiZoWzBdP2hbMF06YSkuZm9jdXMoKX1nZXROZXh0SXRlbUNvb3JkaW5hdGUoYSl7bGV0IGQ9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZp'@;
put 'bmQoV2U9PiIwIj09PVdlLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbDsiVGFiIj09PWEuY29kZSYmKGQ9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7Y29uc3QgaD10aGlzLnJvd3MmJmQ/QXJyYXkuZnJvbSh0aGlzLnJvd3MpLmZpbmQoV2U9PldlLmNvbnRhaW5zKGQpKTpudWxsLGY9'@;
put 'dGhpcy5yb3dzP3RoaXMucm93cy5sZW5ndGgtMTowLHY9dGhpcy5jZWxscz90aGlzLmNlbGxzLmxlbmd0aC90aGlzLnJvd3MubGVuZ3RoLTE6MDtsZXQgVD1oJiZkP0FycmF5LmZyb20oaC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpLmluZGV4T2YoZCk6MCxZ'@;
put 'PWgmJmQmJnRoaXMucm93cz9BcnJheS5mcm9tKHRoaXMucm93cykuaW5kZXhPZihoKTowO2NvbnN0IHJlPXRoaXMuaG9zdC5kaXIsa2U9dGhpcy5yb3dzLmxlbmd0aHx8MDtyZXR1cm4iQXJyb3dVcCI9PT1hLmNvZGUmJjAhPT1ZP1ktPTE6IkFycm93RG93biI9PT1hLmNvZGUmJlk8Zj9ZKz0x'@;
put 'OmEuY29kZT09PSgicnRsIj09PXJlPyJBcnJvd1JpZ2h0IjoiQXJyb3dMZWZ0IikmJjAhPT1UP1QtPTE6YS5jb2RlPT09KCJydGwiPT09cmU/IkFycm93TGVmdCI6IkFycm93UmlnaHQiKSYmVDx2P1QrPTE6IkVuZCI9PT1hLmNvZGU/KFQ9dixhLmN0cmxLZXkmJihZPWYpKToiSG9tZSI9PT1h'@;
put 'LmNvZGU/KFQ9MCxhLmN0cmxLZXkmJihZPTApKToiUGFnZVVwIj09PWEuY29kZT9ZPVkta2U+MD9ZLWtlOjA6IlBhZ2VEb3duIj09PWEuY29kZSYmKFk9WStrZTxmP1kra2U6Zikse3g6VCx5Oll9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihQ'@;
put 'bykpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFg3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LFQsWSxyZSxmZSxfZSxrZSxXZSxKZSx0dCx5dCx3dCl7dGhpcy5vcmdhbml6ZXI9YSx0aGlzLml0ZW1zPWQsdGhpcy5l'@;
put 'eHBhbmRhYmxlUm93cz1oLHRoaXMuc2VsZWN0aW9uPWYsdGhpcy5yb3dBY3Rpb25TZXJ2aWNlPXYsdGhpcy5zdGF0ZVByb3ZpZGVyPVQsdGhpcy5kaXNwbGF5TW9kZT1ZLHRoaXMucmVuZGVyZXI9cmUsdGhpcy5kZXRhaWxTZXJ2aWNlPWZlLHRoaXMuZG9jdW1lbnQ9X2UsdGhpcy5lbD1rZSx0'@;
put 'aGlzLnBhZ2U9V2UsdGhpcy5jb21tb25TdHJpbmdzPUplLHRoaXMuY29sdW1uc1NlcnZpY2U9dHQsdGhpcy5rZXlOYXZpZ2F0aW9uPXl0LHRoaXMuem9uZT13dCx0aGlzLmNsckRnU2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZVNlbGVjdGlv'@;
put 'bkFyaWFMYWJlbCx0aGlzLmNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbD10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kZXRhaWxFeHBh'@;
put 'bmRhYmxlQXJpYUxhYmVsLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzPSExLHRoaXMuc2VsZWN0ZWRDaGFuZ2VkPW5ldyBJcighMSksdGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQ9bmV3IElyKCExKSx0aGlzLnJlZnJlc2g9bmV3IElyKCExKSx0aGlzLlNFTEVDVElPTl9UWVBFPXdhLHRo'@;
put 'aXMuX3N1YnNjcmlwdGlvbnM9W107Y29uc3QgTHQ9aHUoKTt0aGlzLnNlbGVjdEFsbElkPSJjbHItZGctc2VsZWN0LWFsbC0iK0x0LHRoaXMuZGV0YWlsU2VydmljZS5pZD1MdH1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLml0ZW1zLmxvYWRpbmd9c2V0IGxvYWRpbmcoYSl7dGhpcy5pdGVt'@;
put 'cy5sb2FkaW5nPWF9c2V0IHNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9YT93YS5NdWx0aTp3YS5Ob25lLHRoaXMuc2VsZWN0aW9uLnVwZGF0ZUN1cnJlbnQoYSwhMSl9c2V0IHNpbmdsZVNlbGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9d2Eu'@;
put 'U2luZ2xlLGE/dGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1hOnRoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGUmJih0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlPW51bGwpfXNldCBjbHJEZ1ByZXNlcnZlU2VsZWN0aW9uKGEpe3RoaXMuc2VsZWN0aW9uLnByZXNlcnZlU2VsZWN0'@;
put 'aW9uPWF9c2V0IHJvd1NlbGVjdGlvbk1vZGUoYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZT1hfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlbXMudHJhY2tCeT1hfWdldCBhbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc0FsbFNlbGVjdGVkKCl9c2V0IGFsbFNl'@;
put 'bGVjdGVkKGEpe3RoaXMuc2VsZWN0aW9uLnRvZ2dsZUFsbCgpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuaXRlbXMuc21hcnR8fCh0aGlzLml0ZW1zLmFsbD10aGlzLnJvd3MubWFwKGQ9PmQuaXRlbSkpO2NvbnN0IGE9dGhpcy5yb3dzLmNoYW5nZXMucGlwZSh1MShkPT5wRShObyhkLm1h'@;
put 'cChoPT5oLml0ZW0pKSxZOChkLm1hcChoPT5oLml0ZW1DaGFuZ2VzKSkucGlwZShzZygwKSkpKSk7dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3Vic2NyaWJlKGQ9Pnt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9ZCl9KSx0aGlzLnJvd3MuY2hhbmdlcy5zdWJzY3JpYmUo'@;
put 'KCk9Pntmb3IobGV0IGQ9dGhpcy5fZGlzcGxheWVkUm93cy5sZW5ndGgtMTtkPj0wO2QtLSl0aGlzLl9kaXNwbGF5ZWRSb3dzLmdldChkKS5kZXN0cm95ZWQmJnRoaXMuX2Rpc3BsYXllZFJvd3MucmVtb3ZlKGQpO2lmKHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dz'@;
put 'Lmluc2VydChkLl92aWV3KX0pLHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZSYmdGhpcy5kZXRhaWxTZXJ2aWNlLmlzT3Blbil7Y29uc3QgZD10aGlzLnJvd3MuZmluZChoPT50aGlzLml0ZW1zLnRyYWNrQnkoaC5pdGVtKT09PXRoaXMuaXRlbXMudHJhY2tCeSh0aGlzLmRldGFpbFNlcnZpY2Uu'@;
put 'c3RhdGUpKTtkP3RoaXMuZGV0YWlsU2VydmljZS5vcGVuKGQuaXRlbSxkLmRldGFpbEJ1dHRvbi5uYXRpdmVFbGVtZW50KTp0aGlzLmRldGFpbFNlcnZpY2UuY2xvc2UoKX19KSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5rZXlOYXZpZ2F0aW9uLmluaXRpYWxpemVLZXlHcmlkKHRoaXMuZWwu'@;
put 'bmF0aXZlRWxlbWVudCksdGhpcy5yZWZyZXNoLmVtaXQodGhpcy5zdGF0ZVByb3ZpZGVyLnN0YXRlKSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zdGF0ZVByb3ZpZGVyLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5yZWZyZXNoLmVtaXQoYSkpLHRoaXMuc2VsZWN0aW9uLmNoYW5n'@;
put 'ZS5zdWJzY3JpYmUoYT0+e3RoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT13YS5TaW5nbGU/dGhpcy5zaW5nbGVTZWxlY3RlZENoYW5nZWQuZW1pdChhKTp0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09d2EuTXVsdGkmJnRoaXMuc2VsZWN0ZWRDaGFuZ2VkLmVtaXQoYSl9KSx0'@;
put 'aGlzLnBhZ2UuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMua2V5TmF2aWdhdGlvbi5yZXNldEtleUdyaWQoKSx0aGlzLmNsckRnRGlzYWJsZVBhZ2VGb2N1c3x8dGhpcy5kYXRhZ3JpZFRhYmxlLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pLFk4KHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1u'@;
put 'cykuc3Vic2NyaWJlKCgpPT50aGlzLmtleU5hdmlnYXRpb24/LnJlc2V0S2V5R3JpZCgpKSx0aGlzLmRpc3BsYXlNb2RlLnZpZXcuc3Vic2NyaWJlKGE9Pntmb3IobGV0IGQ9dGhpcy5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fcHJvamVjdGVkRGlzcGxh'@;
put 'eUNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0aW9uUm93cy5sZW5ndGg7ZD4wO2Qt'@;
put 'LSl0aGlzLl9jYWxjdWxhdGlvblJvd3MuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5kZXRhY2goKTthPT09cTcuRElTUExBWT8odGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVs'@;
put 'ZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmluc2VydChkLl92aWV3KX0pLHRoaXMucm93cy5mb3JFYWNoKGQ9Pnt0aGlzLl9kaXNwbGF5ZWRSb3dzLmluc2VydChkLl92aWV3KX0p'@;
put 'KToodGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIiksdGhpcy5jb2x1bW5zLmZvckVhY2goZD0+e3RoaXMuX3Byb2plY3RlZENhbGN1bGF0aW9uQ29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9y'@;
put 'RWFjaChkPT57dGhpcy5fY2FsY3VsYXRpb25Sb3dzLmluc2VydChkLl92aWV3KX0pKX0pKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2goUWgodGhpcy5kb2N1bWVudC5ib2R5LCJrZXlkb3duIikuc3Vic2NyaWJlKGE9PnsiU2hpZnQi'@;
put 'PT09YS5rZXkmJih0aGlzLnNlbGVjdGlvbi5zaGlmdFByZXNzZWQ9ITApfSksUWgodGhpcy5kb2N1bWVudC5ib2R5LCJrZXl1cCIpLnN1YnNjcmliZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSExKX0pKX0pfW5nT25EZXN0cm95KCl7dGhpcy5f'@;
put 'c3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9cmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9ZGF0YUNoYW5nZWQoKXt0aGlzLml0ZW1zLnJlZnJlc2goKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoYmcp'@;
put 'LHN0KE1nKSxzdChXNyksc3QoSzcpLHN0KFU3KSxzdChKbmUpLHN0KFVOKSxzdChjcyksc3QoYzIpLHN0KCRzKSxzdCgkaSksc3QoejQpLHN0KFJzKSxzdChlcCksc3QoUW5lKSxzdChQbykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQiXV0sY29u'@;
put 'dGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKG5zKGgsJDcsNSksbnMoaCxOTiw1KSxucyhoLHdnLDQpLG5zKGgsQ2csNCkpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCksTWkoZj1DaSgpKSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCksTWko'@;
put 'Zj1DaSgpKSYmKGQuY29sdW1ucz1mKSxNaShmPUNpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYoVW8oVHhlLDUsJGkpLFVvKER4ZSw1LHBzKSxVbyhBeGUsNSxwcyksVW8oTHhlLDUscHMpLFVvKEl4ZSw1LHBzKSxVbyhSeGUsNSxwcykpLDImYSl7'@;
put 'bGV0IGg7TWkoaD1DaSgpKSYmKGQuZGF0YWdyaWRUYWJsZT1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5zY3JvbGxhYmxlQ29sdW1ucz1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5fcHJvamVjdGVkRGlzcGxheUNvbHVtbnM9aC5maXJzdCksTWkoaD1DaSgpKSYmKGQuX3Byb2plY3RlZENhbGN1'@;
put 'bGF0aW9uQ29sdW1ucz1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5fZGlzcGxheWVkUm93cz1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC5fY2FsY3VsYXRpb25Sb3dzPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJkYXRhZ3JpZC1ob3N0'@;
put 'IiwhMCkoImRhdGFncmlkLWRldGFpbC1vcGVuIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKX0saW5wdXRzOntjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5n'@;
put 'bGVBY3Rpb25hYmxlQXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGluZzpbUW4uTm9uZSwiY2xyRGdMb2FkaW5nIiwibG9h'@;
put 'ZGluZyJdLHNlbGVjdGVkOltRbi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbUW4uTm9uZSwiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbiIs'@;
put 'cm93U2VsZWN0aW9uTW9kZTpbUW4uTm9uZSwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbUW4uTm9uZSwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsc2lu'@;
put 'Z2xlU2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2gifSxmZWF0dXJlczpbR2koW0s3LFdFLFEzLHo0LE1nLGJnLFU3LFc3LEJiLGMyLEpuZSxITixlcCxVTixRbmVdKV0sbmdDb250ZW50U2VsZWN0b3JzOlB4ZSxkZWNsczoz'@;
put 'Mix2YXJzOjcsY29uc3RzOltbImRhdGFncmlkIiwiIl0sWyJkYXRhZ3JpZFRhYmxlIiwiIl0sWyJwcm9qZWN0ZWREaXNwbGF5Q29sdW1ucyIsIiJdLFsiZGlzcGxheWVkUm93cyIsIiJdLFsicHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIiwiIl0sWyJjYWxjdWxhdGlvblJvd3MiLCIiXSxb'@;
put 'MSwiZGF0YWdyaWQtb3V0ZXItd3JhcHBlciJdLFsxLCJkYXRhZ3JpZC1pbm5lci13cmFwcGVyIl0sWzEsImRhdGFncmlkIl0sWzEsImRhdGFncmlkLXRhYmxlLXdyYXBwZXIiXSxbInJvbGUiLCJncmlkIiwidGFiaW5kZXgiLCItMSIsMSwiZGF0YWdyaWQtdGFibGUiXSxbInJvbGUiLCJyb3dn'@;
put 'cm91cCIsMSwiZGF0YWdyaWQtaGVhZGVyIl0sWyJyb2xlIiwicm93IiwxLCJkYXRhZ3JpZC1yb3ciXSxbMSwiZGF0YWdyaWQtcm93LW1hc3RlciIsImRhdGFncmlkLXJvdy1mbGV4Il0sWzEsImRhdGFncmlkLXJvdy1zdGlja3kiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRh'@;
put 'dGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtc2VsZWN0IGRhdGFncmlkLWZpeGVkLWNvbHVt'@;
put 'biIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRhdGFncmlkLXJvdy1hY3Rpb25zIGRhdGFncmlkLWZpeGVkLWNvbHVtbiIsNCwibmdJZiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1uIGRh'@;
put 'dGFncmlkLWV4cGFuZGFibGUtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLXJvdy1zY3JvbGxhYmxlIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtc3Bpbm5lciIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJs'@;
put 'ZSJdLFsxLCJkYXRhZ3JpZC1jYWxjdWxhdGlvbi1oZWFkZXIiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsMywia2V5ZG93bi5zcGFjZSJdLFsxLCJjbHItY2hlY2tib3gtd3JhcHBl'@;
put 'ciJdLFsidHlwZSIsImNoZWNrYm94IiwidGFiaW5kZXgiLCItMSIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0sWzEsImNsci1zci1vbmx5Il0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0'@;
put 'b3IiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMiLCJkYXRhZ3Jp'@;
put 'ZC1maXhlZC1jb2x1bW4iXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLDEsImRhdGFncmlkLWNvbHVtbiIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQiLCJkYXRhZ3JpZC1maXhlZC1jb2x1bW4iXSxbMSwiZGF0YWdyaWQtc3Bpbm5lciJdLFsiY2xyTWVkaXVtIiwiIl1dLHRlbXBsYXRlOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiYoamkoT3hlKSxPcigwKSxnZSgxLCJkaXYiLDYpKDIsImRpdiIsNykoMywiZGl2Iiw4LDApKDUsImRpdiIsOSkoNiwiZGl2IiwxMCwxKSg4LCJkaXYiLDExKSg5LCJkaXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpLGJ0KDEyLEZ4ZSw3LDUsImRpdiIs'@;
put 'MTUpKDEzLEh4ZSwyLDEsImRpdiIsMTYpKDE0LE54ZSwyLDEsImRpdiIsMTcpKDE1LFZ4ZSwyLDEsImRpdiIsMTgpLGJlKCksZ2UoMTYsImRpdiIsMTkpLE5sKDE3LG51bGwsMiksYmUoKSgpKCkoKSxObCgxOSxudWxsLDMpLE9yKDIxLDEpLGJ0KDIyLGp4ZSwxLDAsImNsci1kZy1wbGFjZWhv'@;
put 'bGRlciIsMjApLGJlKCkoKSgpLE9yKDIzLDIpLGJ0KDI0LEJ4ZSwzLDAsImRpdiIsMjEpLGJlKCksT3IoMjUsMyksYmUoKSxnZSgyNiwiZGl2IiwyMikoMjcsImRpdiIsMjMpLE5sKDI4LG51bGwsNCksYmUoKSxObCgzMCxudWxsLDUpLGJlKCkpLDImYSYmKHdlKDMpLGhyKCJhcmlhLWhpZGRl'@;
put 'biIsISFkLmRldGFpbFNlcnZpY2UuaXNPcGVufHxudWxsKSx3ZSg5KSxQZSgibmdJZiIsZC5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWQuU0VMRUNUSU9OX1RZUEUuTXVsdGkpLHdlKCksUGUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLlNp'@;
put 'bmdsZSksd2UoKSxQZSgibmdJZiIsZC5yb3dBY3Rpb25TZXJ2aWNlLmhhc0FjdGlvbmFibGVSb3cpLHdlKCksUGUoIm5nSWYiLGQuZXhwYW5kYWJsZVJvd3MuaGFzRXhwYW5kYWJsZVJvd3x8ZC5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLHdlKDcpLFBlKCJuZ0lmIiwhZC5wbGFjZWhvbGRlciks'@;
put 'd2UoMiksUGUoIm5nSWYiLGQubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3FpLFhzLGYxLGNhLG9hLG5oLE5OLFpOXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBYVGU9Yz0+YztsZXQgZXJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmNvbW1vblN0cmluZ3M9'@;
put 'YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhpcy5hbGxTZWxlY3RlZD1uZXcgSXJ9Z2V0IGNsckFsbFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuYWxsU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbEhpZGVhYmxlc1Zpc2libGUoKXtyZXR1cm4gMD09PXRoaXMuaGlkZWFibGVDb2x1bW5z'@;
put 'KCkuZmlsdGVyKGE9PmEudmFsdWUuaGlkZGVuKS5sZW5ndGh9c2VsZWN0QWxsKCl7dGhpcy5oaWRlYWJsZUNvbHVtbnMoKS5mb3JFYWNoKGE9PnRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGEse2hpZGRlbjohMSxjaGFuZ2VzOlt5MS5ISURERU5dfSkpLHRoaXMuYWxsU2Vs'@;
put 'ZWN0ZWQubmV4dCghMCl9aGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoYT0+YS52YWx1ZS5oaWRlYWJsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFJzKSxzdChlcCkpfSxjLlx1'@;
put 'MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iXV0sb3V0cHV0czp7Y2xyQWxsU2VsZWN0ZWQ6ImNsckFsbFNlbGVjdGVkIn0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0'@;
put 'bi1saW5rIiwic3dpdGNoLWJ1dHRvbiIsMywiY2xpY2siLCJkaXNhYmxlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGdlKDAsImJ1dHRvbiIsMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnNlbGVjdEFsbCgpfSksemUoMSksYmUoKSksMiZhJiYoUGUoImRpc2Fi'@;
put 'bGVkIixkLmFsbEhpZGVhYmxlc1Zpc2libGUpLHdlKCkseHIoIiAiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksdHJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMu'@;
put 'Y29sdW1uc1NlcnZpY2U9ZCx0aGlzLnBvcG92ZXJJZD1odSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpvMC5WRVJUSUNBTCxzaWRlOktkLkJFRk9SRSxhbmNob3I6VXMuU1RBUlQsY29udGVudDpVcy5TVEFSVH0sdGhpcy50cmFja0J5Rm49WFRlLHRoaXMuc3Vic2NyaXB0aW9uPWgub3Bl'@;
put 'bkNoYW5nZS5zdWJzY3JpYmUoZj0+dGhpcy5vcGVuU3RhdGU9Zil9Z2V0IGFsbENvbHVtbnNWaXNpYmxlKCl7cmV0dXJuIHRoaXMuX2FsbENvbHVtbnNWaXNpYmxlfXNldCBhbGxDb2x1bW5zVmlzaWJsZShhKXt0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZT1hfWdldCBoaWRlYWJsZUNvbHVtblN0'@;
put 'YXRlcygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGQ9PmQudmFsdWUuaGlkZWFibGUpLm1hcChkPT5kLnZhbHVlKX1nZXQgaGFzT25seU9uZVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmxlbmd0aC10aGlzLmhp'@;
put 'ZGVhYmxlQ29sdW1uU3RhdGVzLmxlbmd0aD09MCYmMT09PXRoaXMuaGlkZWFibGVDb2x1bW5TdGF0ZXMuZmlsdGVyKGQ9PiFkLmhpZGRlbikubGVuZ3RofW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX10b2dnbGVDb2x1bW5TdGF0ZShhLGQpe2NvbnN0IGg9'@;
put 'dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihmPT5mLnZhbHVlPT09YSlbMF07dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoaCx7aGlkZGVuOmQsY2hhbmdlczpbeTEuSElEREVOXX0pfXRvZ2dsZVN3aXRjaFBhbmVsKCl7dGhpcy5vcGVuU3RhdGU9IXRoaXMu'@;
put 'b3BlblN0YXRlfWFsbENvbHVtbnNTZWxlY3RlZCgpe3RoaXMuYWxsU2VsZWN0ZWRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoUnMpLHN0KGVwKSxzdChEbCkpfSxjLlx1MDI3NWNtcD1rcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uLXRvZ2dsZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlVvKHp4ZSw1LCRpKSwyJmEpe2xldCBoO01pKGg9Q2koKSkmJihkLmFsbFNlbGVjdGVkRWxlbWVudD1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRp'@;
put 'bmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiY29sdW1uLXN3aXRjaC13cmFwcGVyIiwhMCkoImFjdGl2ZSIsZC5vcGVuU3RhdGUpfSxmZWF0dXJlczpbWHUoW3EzXSldLGRlY2xzOjMsdmFyczo4LGNvbnN0czpbWyJhbGxTZWxlY3RlZCIsIiJdLFsicm9sZSIsImJ1dHRvbiIsInR5cGUiLCJi'@;
put 'dXR0b24iLCJjbHJQb3BvdmVyQW5jaG9yIiwiIiwiY2xyUG9wb3Zlck9wZW5DbG9zZUJ1dHRvbiIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiY29sdW1uLXRvZ2dsZS0tYWN0aW9uIl0sWyJjbGFzcyIsImNvbHVtbi1zd2l0Y2giLCJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwzLCJp'@;
put 'ZCIsNCwiY2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJyb2xlIiwiZGlhbG9nIiwiY2RrVHJhcEZvY3VzIiwiIiwxLCJjb2x1bW4t'@;
put 'c3dpdGNoIiwzLCJpZCJdLFsxLCJzd2l0Y2gtaGVhZGVyIl0sWyJ0YWJpbmRleCIsIi0xIiwxLCJjbHItc3Itb25seSJdLFsiY2xyUG9wb3ZlckNsb3NlQnV0dG9uIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLCJ0b2dnbGUtc3dpdGNoLWNsb3NlLWJ1'@;
put 'dHRvbiJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiLCJhcmlhLWhpZGRlbiIsInRydWUiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwic3dpdGNoLWNvbnRlbnQiLCJsaXN0LXVuc3R5bGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJzd2l0Y2gtZm9vdGVyIl0s'@;
put 'WzMsImNsckFsbFNlbGVjdGVkIl0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZ2UoMCwiYnV0dG9uIiwx'@;
put 'KSx6ZSgxKSxiZSgpLGJ0KDIsV3hlLDE1LDksImRpdiIsMikpLDImYSYmKGhyKCJhcmlhLWNvbnRyb2xzIixkLnBvcG92ZXJJZCkoImFyaWEtb3ducyIsZC5wb3BvdmVySWQpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW5TdGF0ZSksd2UoKSx4cigiICIsZC5jb21tb25TdHJpbmdzLmtleXMucGlj'@;
put 'a0NvbHVtbnMsIiAiKSx3ZSgpLFBlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Ns'@;
put 'b3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W0xzLEsxLEg3LEtzLFhzLHYxLF8xLGYxLGNhLG9hLEliLHluZSxQYixPYixlcmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHJyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLHRoaXMuZXhw'@;
put 'YW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnJlZ2lzdGVyKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmV4cGFuZGFibGVSb3dzQ291bnQmJnRoaXMuZXhwYW5kYWJsZVJvd3NDb3VudC51bnJlZ2lzdGVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty'@;
put 'ZXR1cm4gbmV3KGF8fGMpKHN0KFc3LDgpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xySWZFeHBhbmRlZCIsIiJdXX0pLGN9KSgpLHFFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zZWxlY3Rpb249YSx0aGlzLmRldGFpbFNlcnZp'@;
put 'Y2U9ZCx0aGlzLmNvbHVtbnNTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5TRUxFQ1RJT05fVFlQRT13YX1nZXQgaGFzSGlkZWFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuaGFzSGlkZWFibGVDb2x1bW5zfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChLNyksc3QoYzIpLHN0KGVwKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctZm9vdGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiZGF0YWdyaWQt'@;
put 'Zm9vdGVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczpxeGUsZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIl0sWzEsImRhdGFncmlkLWZvb3Rlci1zZWxlY3QiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94'@;
put 'IiwiY2hlY2tlZCIsImNoZWNrZWQiLCJkaXNhYmxlZCIsIiJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1mb290ZXItZGVzY3JpcHRpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgkeGUpLGJ0KDAsS3hlLDgsMiwibmctY29udGFpbmVyIiwwKSgxLEp4ZSw0'@;
put 'LDEsIm5nLWNvbnRhaW5lciIsMCksT3IoMikpLDImYSYmKFBlKCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5NdWx0aSYmZC5zZWxlY3Rpb24uY3VycmVudC5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsIWQuZGV0YWlsU2VydmljZS5pc09wZW4p'@;
put 'KX0sZGVwZW5kZW5jaWVzOltxaSxYcyx2MSxfMSx0cmVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IFdOPW5ldyBZcigiQ09MVU1OX1NUQVRFIiksdERlPXtwcm92aWRlOldOLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZURlKCl7cmV0dXJuIG5ldyBBcih7Y2hhbmdlczpbXX0pfX07bGV0'@;
put 'IEdOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wYWdlPWEsdGhpcy5wYWdlU2l6ZU9wdGlvbnNJZD1odSgpfW5nT25Jbml0KCl7KCF0aGlzLnBhZ2VTaXplT3B0aW9uc3x8MD09PXRoaXMucGFnZVNpemVPcHRpb25zLmxlbmd0aCkmJih0aGlzLnBhZ2VTaXplT3B0aW9ucz1b'@;
put 'dGhpcy5wYWdlLnNpemVdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoejQpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2Utc2l6ZSJdXSxpbnB1dHM6e3BhZ2VTaXplT3B0aW9uczpbUW4uTm9uZSwi'@;
put 'Y2xyUGFnZVNpemVPcHRpb25zIiwicGFnZVNpemVPcHRpb25zIl0scGFnZVNpemVPcHRpb25zSWQ6W1FuLk5vbmUsImNsclBhZ2VTaXplT3B0aW9uc0lkIiwicGFnZVNpemVPcHRpb25zSWQiXX0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjUsdmFyczo2LGNvbnN0czpbWzMsImZvciJd'@;
put 'LFsxLCJjbHItc2VsZWN0LXdyYXBwZXIiXSxbMywibmdNb2RlbENoYW5nZSIsImlkIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksZ2UoMCwibGFiZWwiLDApLE9yKDEp'@;
put 'LGJlKCksZ2UoMiwiZGl2IiwxKSgzLCJzZWxlY3QiLDIpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihmKXtyZXR1cm4gcXIoZC5wYWdlLnNpemUsZil8fChkLnBhZ2Uuc2l6ZT1mKSxmfSksYnQoNCxReGUsMiwyLCJvcHRpb24iLDMpLGJlKCkoKSksMiZhJiYoUGUoImZvciIsZC5wYWdl'@;
put 'U2l6ZU9wdGlvbnNJZCksd2UoMyksYnIoImNsci1wYWdlLXNpemUtc2VsZWN0IiwhMCksUGUoImlkIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxXcigibmdNb2RlbCIsZC5wYWdlLnNpemUpLHdlKCksUGUoIm5nRm9yT2YiLGQucGFnZVNpemVPcHRpb25zKSl9LGRlcGVuZGVuY2llczpbTHMsWHMs'@;
put 'bmQscmQsdGQsY2Esb2FdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEtFPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucGFnZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuZGV0YWlsU2VydmljZT1oLHRoaXMuY3VycmVudENoYW5nZWQ9bmV3IElyKCExKSx0aGlz'@;
put 'LnBhZ2UuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1zZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRvdGFs'@;
put 'SXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQgY3VycmVudFBhZ2UoKXty'@;
put 'ZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3RJ'@;
put 'dGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZhLnB1c2godGhpcy5wYWdl'@;
put 'LmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMucGFn'@;
put 'ZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJzZUlu'@;
put 'dChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3VycmVudCYmKGEudGFyZ2V0LnZhbHVlPXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJyZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihkKXx8KHRoaXMucGFnZS5jdXJyZW50PWQ8'@;
put 'MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZCksdGhpcy5jdXJyZW50UGFnZUlucHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHo0KSxzdChScyks'@;
put 'c3QoYzIpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXBhZ2luYXRpb24iXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCxHTiw1KSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLl9wYWdlU2l6ZUNvbXBvbmVudD1mLmZp'@;
put 'cnN0KX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVW8oZWtlLDUpLDImYSl7bGV0IGg7TWkoaD1DaSgpKSYmKGQuY3VycmVudFBhZ2VJbnB1dFJlZj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigicGFnaW5hdGlvbiIs'@;
put 'ITApfSxpbnB1dHM6e2Rpc2FibGVDdXJyZW50UGFnZUlucHV0OltRbi5Ob25lLCJjbHJEZ1BhZ2VJbnB1dERpc2FibGVkIiwiZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQiXSxwYWdlU2l6ZTpbUW4uTm9uZSwiY2xyRGdQYWdlU2l6ZSIsInBhZ2VTaXplIl0sdG90YWxJdGVtczpbUW4uTm9uZSwi'@;
put 'Y2xyRGdUb3RhbEl0ZW1zIiwidG90YWxJdGVtcyJdLGxhc3RQYWdlOltRbi5Ob25lLCJjbHJEZ0xhc3RQYWdlIiwibGFzdFBhZ2UiXSxjdXJyZW50UGFnZTpbUW4uTm9uZSwiY2xyRGdQYWdlIiwiY3VycmVudFBhZ2UiXX0sb3V0cHV0czp7Y3VycmVudENoYW5nZWQ6ImNsckRnUGFnZUNoYW5n'@;
put 'ZSJ9LG5nQ29udGVudFNlbGVjdG9yczpua2UsZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbInJlYWRPbmx5IiwiIl0sWyJjdXJyZW50UGFnZUlucHV0IiwiIl0sWzQsIm5nSWYiXSxbImNsYXNzIiwicGFnaW5hdGlvbi1zaXplIiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tZGVzY3JpcHRpb24i'@;
put 'XSxbImNsYXNzIiwicGFnaW5hdGlvbi1saXN0Iiw0LCJuZ0lmIl0sWzEsInBhZ2luYXRpb24tc2l6ZSJdLFsxLCJwYWdpbmF0aW9uLWxpc3QiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tZmlyc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInNo'@;
put 'YXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJkb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLXByZXZpb3VzIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsidHlwZSIsInRleHQiLCJjbGFzcyIs'@;
put 'InBhZ2luYXRpb24tY3VycmVudCBjbHItaW5wdXQiLDMsInNpemUiLCJ2YWx1ZSIsImtleWRvd24uZW50ZXIiLCJibHVyIiw0LCJuZ0lmIiwibmdJZkVsc2UiXSxbInR5cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tbmV4dCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJhbmds'@;
put 'ZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJwYWdpbmF0aW9uLWxhc3QiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwic3RlcC1mb3J3YXJkLTIiLCJkaXJlY3Rpb24iLCJ1cCJdLFsidHlwZSIsInRleHQiLDEsInBhZ2luYXRpb24tY3VycmVudCIs'@;
put 'ImNsci1pbnB1dCIsMywia2V5ZG93bi5lbnRlciIsImJsdXIiLCJzaXplIiwidmFsdWUiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbi1jb21wYWN0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkodGtlKSxidCgwLGFrZSw1LDIsIm5nLWNvbnRhaW5lciIsMikoMSxsa2Us'@;
put 'MTQsMTAsIm5nLWNvbnRhaW5lciIsMikpLDImYSYmKFBlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbiksd2UoKSxQZSgibmdJZiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W3FpLEtzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBKNz0iZGF0'@;
put 'YWdyaWQtZml4ZWQtd2lkdGgiLFhFPSJkYXRhZ3JpZC1oaWRkZW4tY29sdW1uIjtsZXQgU2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0'@;
put 'ZXJSZW5kZXJTdGVwcyh1Mi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRoKCkpKX1zZXQgY29sdW1uU3RhdGUoYSl7dGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMucnVuQWxsQ2hhbmdlcz1Y'@;
put 'bmUsdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbj1hLnN1YnNjcmliZShkPT50aGlzLnN0YXRlQ2hhbmdlcyhkKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpLHRoaXMuc3RhdGVTdWJzY3JpcHRpb24mJnRoaXMuc3RhdGVTdWJzY3Jp'@;
put 'cHRpb24udW5zdWJzY3JpYmUoKX1zdGF0ZUNoYW5nZXMoYSl7dGhpcy5ydW5BbGxDaGFuZ2VzJiYoYS5jaGFuZ2VzPXRoaXMucnVuQWxsQ2hhbmdlcyxkZWxldGUgdGhpcy5ydW5BbGxDaGFuZ2VzKSxhLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntz'@;
put 'd2l0Y2goZCl7Y2FzZSB5MS5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgeTEuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxKNyksdGhpcy5yZW5kZXJlci5zZXRT'@;
put 'dHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEo3KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxK'@;
put 'NyksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxYRSk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFz'@;
put 'cyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWEUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCgkaSksc3QoY3MpLHN0KGJnKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jZWxsIl1dfSksY30pKCkseGc9KCgp'@;
put 'PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZKXt0aGlzLmVsPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMub3JnYW5pemVyPWgsdGhpcy5kb21BZGFwdGVyPWYsdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZT12LHRoaXMuY29sdW1uc1NlcnZpY2U9VCx0aGlzLmNvbHVtblN0YXRl'@;
put 'PVksdGhpcy5yZXNpemVFbWl0dGVyPW5ldyBJcix0aGlzLndpZHRoU2V0PSExLHRoaXMuYXV0b1NldD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5vcmdhbml6ZXIuZmlsdGVyUmVuZGVyU3RlcHModTIuQ0xFQVJfV0lEVEhTKS5zdWJzY3Jp'@;
put 'YmUoKCk9PnRoaXMuY2xlYXJXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goWS5zdWJzY3JpYmUocmU9PnRoaXMuc3RhdGVDaGFuZ2VzKHJlKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1nZXRDb2x1bW5XaWR0'@;
put 'aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNvbHVtblN0YXRlfXN0YXRlQ2hh'@;
put 'bmdlcyhhKXthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGQ9Pntzd2l0Y2goZCl7Y2FzZSB5MS5XSURUSDp0aGlzLnNldFdpZHRoKGEpO2JyZWFrO2Nhc2UgeTEuSElEREVOOnRoaXMuc2V0SGlkZGVuKGEpfX0pfWNsZWFyV2lkdGgoKXt0aGlzLndpZHRo'@;
put 'U2V0JiYhdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkmJnRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsbnVsbCksdGhpcy5hdXRvU2V0JiZ0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxK'@;
put 'Nyl9ZGV0ZWN0U3RyaWN0V2lkdGgoKXtyZXR1cm4gdGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnk/dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS53aWR0aEFmdGVyUmVzaXplOnRoaXMuYXV0b1NldD8wOnRoaXMuZG9tQWRhcHRlci51c2VyRGVmaW5lZFdpZHRoKHRoaXMuZWwu'@;
put 'bmF0aXZlRWxlbWVudCl9Y29tcHV0ZVdpZHRoKGEpe2xldCBkPWE7cmV0dXJuIGR8fChkPXRoaXMuZG9tQWRhcHRlci5zY3JvbGxXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSxkfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXpl'@;
put 'ZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVt'@;
put 'ZW50LEo3KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxKNyksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhp'@;
put 'cy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsWEUpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LFhFKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9u'@;
put 'KGEpe3JldHVybiBuZXcoYXx8Yykoc3QoJGkpLHN0KGNzKSxzdChiZyksc3QoSzMpLHN0KEZOKSxzdChlcCksc3QoV04pKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRzOntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6'@;
put 'ZSJ9LGZlYXR1cmVzOltHaShbRk4sdERlXSldfSksY30pKCksb0RlPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4gMH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGll'@;
put 'bnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rv'@;
put 'a2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGtnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENvbHVtblN0YXRlKCksdGhpcy5zdWJzY3Jp'@;
put 'cHRpb25zLnB1c2godGhpcy5jZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuc2V0Q29sdW1uU3RhdGUoKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0Q29sdW1uU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0'@;
put 'aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmKGEuY29sdW1uU3RhdGU9dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zW2RdKX0pfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChlcCkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcm93Il0sWyJjbHItZGctcm93LWRldGFpbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLFNnLDQpLDIm'@;
put 'YSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpO2NvbnN0IHNEZT1jPT5sYShjKT9uZXcgSzM6bmV3IG9EZTtsZXQgUTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lKXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0'@;
put 'aGlzLnBhZ2U9aCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1ULHRoaXMuZGV0YWlsU2VydmljZT1ZLHRoaXMudGFibGVTaXplU2VydmljZT1yZSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWZlLHRoaXMubmdab25lPV9lLHRoaXMuX2hlaWdodFNldD0hMSx0aGlzLnNo'@;
put 'b3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMub3JnYW5pemVyLmZpbHRlclJlbmRlclN0ZXBzKHUyLkNPTVBVVEVfQ09MVU1OX1dJRFRIUykuc3Vic2NyaWJl'@;
put 'KCgpPT50aGlzLmNvbXB1dGVIZWFkZXJzV2lkdGgoKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucGFnZS5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hlaWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2go'@;
put 'dGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlQ2hhbmdlLnN1YnNjcmliZShrZT0+dGhpcy50b2dnbGVEZXRhaWxQYW5lKGtlKSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuaXRlbXMuY2hhbmdlLnN1YnNjcmliZSgoKT0+dGhpcy5zaG91bGRTdGFiaWxpemVDb2x1bW5zPSEwKSl9bmdB'@;
put 'ZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmhlYWRlcnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldHVwQ29sdW1ucygpLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3RhYmlsaXplQ29sdW1u'@;
put 'cygpfSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMudGFibGVTaXplU2VydmljZS50YWJsZT10aGlzLmVsfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucyYmdGhpcy5zdGFiaWxpemVDb2x1bW5zKCksdGhpcy5zaG91bGRDb21wdXRlSGVpZ2h0KCkmJnRo'@;
put 'aXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+e3RoaXMuY29tcHV0ZURhdGFncmlkSGVpZ2h0KCl9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGVEZXRhaWxQYW5lKGEpe3Ro'@;
put 'aXMuaGVhZGVycyYmKGEmJiF0aGlzLmNvbHVtbnNTZXJ2aWNlLmhhc0NhY2hlKCk/KHRoaXMuY29sdW1uc1NlcnZpY2UuY2FjaGUoKSx0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZCxoKT0+e2g+MCYmdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChoLHtjaGFuZ2VzOlt5MS5I'@;
put 'SURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChhLGQpPT5hLnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRo'@;
put 'aXMuaGVhZGVycy5sZW5ndGgpLHRoaXMucm93cy5mb3JFYWNoKGE9PmEuc2V0Q29sdW1uU3RhdGUoKSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5z'@;
put 'aXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpe2NvbnN0IGE9dGhpcy5kb21BZGFwdGVyLmNsaWVudFJlY3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSsicHgiKSx0aGlzLl9oZWln'@;
put 'aHRTZXQ9ITB9cmVzZXREYXRhZ3JpZEhlaWdodCgpe3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJoZWlnaHQiLCIiKSx0aGlzLl9oZWlnaHRTZXQ9ITF9Y29tcHV0ZUhlYWRlcnNXaWR0aCgpe2NvbnN0IGE9dGhpcy5oZWFkZXJzLmxlbmd0aDtsZXQgZD0h'@;
put 'MDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoaCxmKT0+e2NvbnN0IHY9e2NoYW5nZXM6W3kxLldJRFRIXSwuLi5oLmdldENvbHVtbldpZHRoU3RhdGUoKX07di5zdHJpY3RXaWR0aHx8KGQ9ITEpLGE9PT1mKzEmJmQmJih2LnN0cmljdFdpZHRoPTApLHRoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0'@;
put 'YXRlQ2hhbmdlQXQoZix2KX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnM9ITEsIXRoaXMuY29sdW1uc1NpemVzU3RhYmxlJiZ0aGlzLml0ZW1zLmRpc3BsYXllZC5sZW5ndGg+MCYmKHRoaXMub3JnYW5pemVyLnJlc2l6ZSgpLHRoaXMuY29sdW1uc1Np'@;
put 'emVzU3RhYmxlPSEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoYmcpLHN0KE1nKSxzdCh6NCksc3QoSzMpLHN0KCRpKSxzdChjcyksc3QoYzIpLHN0KEhOKSxzdChlcCksc3QoUG8pKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihucyhoLHhnLDQpLG5zKGgsa2csNSkpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQuaGVhZGVycz1mKSxNaShmPUNpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W0dpKFt7cHJv'@;
put 'dmlkZTpLMyx1c2VGYWN0b3J5OnNEZSxkZXBzOltBb119XSldfSksY30pKCksYURlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhMeWUsSXllLGhiLFJ5ZSxFZWUsT3llLFRlZSxQeWUsRnllKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBu'@;
put 'ZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8selRlLENOLGJhLFVuZSxDYyxwTixKZCxVVGUsWm5lLFA3LEZiLGJOXX0pLGN9KSgpLGlyZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0'@;
put 'dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWNvbnRlbnQiXV19KSxjfSkoKSwkTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgpe3JldHVybiB0'@;
put 'aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWE/YTp0aGlzLl9nZW5lcmF0ZWRJZCsiIn1uZ09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitodSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9nZW5lcmF0ZWRJ'@;
put 'ZCsiIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmhyKCJpZCIsZC5p'@;
put 'ZCl9LGlucHV0czp7aWQ6ImlkIn0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG9yZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5w'@;
put 'YXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBJcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9aHUoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxs'@;
put 'eUluaXRpYWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUoYSl7dGhpcy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuKys6dGhpcy5w'@;
put 'YXJlbnQuX2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMuX2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlJiYhdGhpcy5l'@;
put 'eHBhbmRlZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBjYXJldERpcmVj'@;
put 'dGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJsZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0'@;
put 'aGlzLmV4cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7c3JlKGEpfHx0aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4'@;
put 'cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGlsZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnREZWZhdWx0SWZO'@;
put 'b3RJbnB1dEV2ZW50KGEpe3NyZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChjLDEyKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stYmxvY2siXV0s'@;
put 'Y29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCwkTiw1KSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwiaGVhZGlu'@;
put 'ZyIpKCJhcmlhLWxldmVsIixkLmhlYWRpbmdMZXZlbCksYnIoInN0YWNrLWJsb2NrIiwhMCkoInN0YWNrLWJsb2NrLWV4cGFuZGVkIixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRDaGFuZ2VkVmFs'@;
put 'dWUpKCJvbi1mb2N1cyIsZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVkOltRbi5Ob25lLCJjbHJTYkV4cGFuZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOltRbi5Ob25lLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOltRbi5Ob25lLCJj'@;
put 'bHJTdGFja1ZpZXdMZXZlbCIsImFyaWFMZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbUW4uTm9uZSwiY2xyU2JOb3RpZnlDaGFuZ2UiLCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6dWtl'@;
put 'LGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNrLWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwi'@;
put 'bmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJyZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaShja2UpLGdlKDAsImRpdiIsMCksSHQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4g'@;
put 'ZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJrZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnBy'@;
put 'ZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITB9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksYnQoMSxka2UsMSwxLCJjZHMtaWNvbiIsMSkoMixoa2UsMiwxLCJzcGFuIiwyKSxnZSgz'@;
put 'LCJkaXYiLDMpLE9yKDQpLGJlKCksZ2UoNSwiZGl2Iiw0KSxPcig2LDEpLGJlKCkoKSxnZSg3LCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDUpLGJ0KDgsZmtlLDIsNCwiZGl2Iiw2KSxiZSgpKSwyJmEmJihQZSgiaWQiLGQudW5pcXVlSWQpLGhyKCJyb2xlIixkLnJvbGUpKCJ0YWJpbmRl'@;
put 'eCIsZC50YWJJbmRleCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5nZXRTdGFja0NoaWxkcmVuSWQoKSksd2UoKSxQZSgibmdJZiIsZC5leHBhbmRhYmxlKSx3ZSgpLFBlKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksd2UoNSksUGUoImNsckV4'@;
put 'cGFuZFRyaWdnZXIiLGQuZXhwYW5kZWQpLHdlKCksUGUoIm5nSWYiLGQuZXhwYW5kZWQpKX0sZGVwZW5kZW5jaWVzOltxaSxLcyxSRV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCk7ZnVuY3Rpb24gc3JlKGMpe3JldHVybiJJTlBVVCI9PT1jPy50'@;
put 'YXJnZXQ/LnRhZ05hbWV9bGV0IHFOPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6bWtlLGRl'@;
put 'Y2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaShwa2UpLE9yKDApLGdlKDEsImRpdiIsMCksT3IoMiwxKSxiZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksY0Rl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhnNyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLENjLGJhLFpuZV19KSxjfSko'@;
put 'KSxFZz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IG5ufX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tl'@;
put 'bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBhcmU9e3Byb3ZpZGU6RWcsdXNlRmFjdG9yeTpmdW5jdGlvbiB1RGUoYyl7cmV0dXJuIGN8fG5ldyBFZ30sZGVwczpbW25ldyBMdSxuZXcgYnUsRWddXX07bGV0IGxyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7'@;
put 'dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmV4cGFuZFNlcnZpY2U9ZCxkJiYodGhpcy5zdWJzY3JpcHRpb249dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoaD0+eyFoJiZ0aGlzLnBhcmVudCYmIXRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyJiZ0aGlzLmZl'@;
put 'YXR1cmVzU2VydmljZS5yZWN1cnNpb24mJnRoaXMucGFyZW50LmNsZWFyQ2hpbGRyZW4oKX0pKX1zaG91bGRSZW5kZXIoKXtyZXR1cm4gdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uJiYodGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXJ8fCF0aGlzLmV4cGFuZFNlcnZpY2V8fHRoaXMu'@;
put 'ZXhwYW5kU2VydmljZS5leHBhbmRlZCl9Z2V0Q29udGV4dChhKXtyZXR1cm57JGltcGxpY2l0OmEubW9kZWwsY2xyTW9kZWw6YX19bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRWcpLHN0KEwwLDgpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLCJncm91cCIp'@;
put 'fSxpbnB1dHM6e3BhcmVudDoicGFyZW50IixjaGlsZHJlbjoiY2hpbGRyZW4ifSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFs0LCJuZ1RlbXBsYXRlT3V0bGV0IiwibmdUZW1wbGF0ZU91dGxldENvbnRleHQiXV0sdGVtcGxhdGU6ZnVu'@;
put 'Y3Rpb24oYSxkKXsxJmEmJmJ0KDAsYmtlLDIsMSwibmctY29udGFpbmVyIiwwKSwyJmEmJlBlKCJuZ0lmIixkLnNob3VsZFJlbmRlcigpKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxLMV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7dmFyICRjPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TRUxF'@;
put 'Q1RFRD0wXT0iVU5TRUxFQ1RFRCIsY1tjLlNFTEVDVEVEPTFdPSJTRUxFQ1RFRCIsY1tjLklOREVURVJNSU5BVEU9Ml09IklOREVURVJNSU5BVEUiLGN9KCRjfHx7fSk7Y2xhc3MgY3Jle2NvbnN0cnVjdG9yKCl7dGhpcy5sb2FkaW5nJD1uZXcgQXIoITEpLHRoaXMuc2VsZWN0ZWQ9bmV3IEFy'@;
put 'KCRjLlVOU0VMRUNURUQpLHRoaXMuX2xvYWRpbmc9ITF9Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9hZGluZyhsKXt0aGlzLl9sb2FkaW5nPWwsdGhpcy5sb2FkaW5nJC5uZXh0KGwpfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0'@;
put 'ZWQobCxhLGQpe2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT0kYy5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+aC5zZXRTZWxlY3RlZChsLCExLCEwKSksYSYmdGhpcy5wYXJlbnQmJnRo'@;
put 'aXMucGFyZW50Ll91cGRhdGVTZWxlY3Rpb25Gcm9tQ2hpbGRyZW4oKSl9dG9nZ2xlU2VsZWN0aW9uKGwpe3RoaXMuc2V0U2VsZWN0ZWQodGhpcy5zZWxlY3RlZC52YWx1ZT09PSRjLlNFTEVDVEVEPyRjLlVOU0VMRUNURUQ6JGMuU0VMRUNURUQsITAsbCl9X3VwZGF0ZVNlbGVjdGlvbkZyb21D'@;
put 'aGlsZHJlbigpe2NvbnN0IGw9dGhpcy5jb21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKTtsIT09dGhpcy5zZWxlY3RlZC52YWx1ZSYmKHRoaXMuc2VsZWN0ZWQubmV4dChsKSx0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNlbGVjdGlvbkZyb21DaGlsZHJlbigpKX1j'@;
put 'b21wdXRlU2VsZWN0aW9uU3RhdGVGcm9tQ2hpbGRyZW4oKXtsZXQgbD0hMSxhPSExO2Zvcihjb25zdCBkIG9mIHRoaXMuY2hpbGRyZW4pc3dpdGNoKGQuc2VsZWN0ZWQudmFsdWUpe2Nhc2UgJGMuSU5ERVRFUk1JTkFURTpyZXR1cm4gJGMuSU5ERVRFUk1JTkFURTtjYXNlICRjLlNFTEVDVEVE'@;
put 'OmlmKGw9ITAsYSlyZXR1cm4gJGMuSU5ERVRFUk1JTkFURTticmVhaztkZWZhdWx0OmlmKGE9ITAsbClyZXR1cm4gJGMuSU5ERVRFUk1JTkFURX1yZXR1cm4gbD9hPyRjLlVOU0VMRUNURUQ6JGMuU0VMRUNURUQ6JGMuVU5TRUxFQ1RFRH19Y2xhc3MgSkUgZXh0ZW5kcyBjcmV7Y29uc3RydWN0'@;
put 'b3IobCxhLGQsaCl7c3VwZXIoKSx0aGlzLmdldENoaWxkcmVuPWQsdGhpcy5mZWF0dXJlc1NlcnZpY2U9aCx0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMSx0aGlzLl9jaGlsZHJlbj1bXSx0aGlzLm1vZGVsPWwsdGhpcy5wYXJlbnQ9YX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5mZXRjaENo'@;
put 'aWxkcmVuKCksdGhpcy5fY2hpbGRyZW59c2V0IGNoaWxkcmVuKGwpe3RoaXMuX2NoaWxkcmVuPWx9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHN1cGVyLmRlc3Ryb3koKX1jbGVhckNoaWxkcmVuKCl7dGhpcy5fY2hpbGRyZW4u'@;
put 'Zm9yRWFjaChsPT5sLmRlc3Ryb3koKSksZGVsZXRlIHRoaXMuX2NoaWxkcmVuLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSExfWZldGNoQ2hpbGRyZW4oKXtpZih0aGlzLmNoaWxkcmVuRmV0Y2hlZClyZXR1cm47Y29uc3QgbD10aGlzLmdldENoaWxkcmVuKHRoaXMubW9kZWwpOyFmdW5jdGlvbiBk'@;
put 'RGUoYyl7cmV0dXJuIGMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnRoZW59KGwpP3FQKGwpPyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zdWJzY3JpcHRpb249bC5zdWJzY3JpYmUoYT0+e3RoaXMuX2NoaWxkcmVuPXRoaXMud3JhcENoaWxkcmVuKGEpLHRoaXMubG9hZGluZz0hMX0pKTp0aGlzLl9j'@;
put 'aGlsZHJlbj1sP3RoaXMud3JhcENoaWxkcmVuKGwpOltdOih0aGlzLmxvYWRpbmc9ITAsbC50aGVuKGE9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxvYWRpbmc9ITF9KSksdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITAsdGhpcy5mZWF0dXJlc1NlcnZpY2UmJnRo'@;
put 'aXMuZmVhdHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5uZXh0KCl9d3JhcENoaWxkcmVuKGwpe3JldHVybiBsLm1hcChhPT5uZXcgSkUoYSx0aGlzLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKX19bGV0IHVyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs'@;
put 'ZCxoKXt0aGlzLnRlbXBsYXRlPWEsdGhpcy5mZWF0dXJlc1NlcnZpY2U9ZCx0aGlzLmNkcj1ofW5nT25DaGFuZ2VzKCl7bGV0IGE7YT1BcnJheS5pc0FycmF5KHRoaXMubm9kZXMpP3RoaXMubm9kZXMubWFwKGQ9Pm5ldyBKRShkLG51bGwsdGhpcy5nZXRDaGlsZHJlbix0aGlzLmZlYXR1cmVz'@;
put 'U2VydmljZSkpOltuZXcgSkUodGhpcy5ub2RlcyxudWxsLHRoaXMuZ2V0Q2hpbGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpXSx0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb258fCh0aGlzLmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb249dGhpcy5mZWF0dXJlc1NlcnZpY2UuY2hpbGRy'@;
put 'ZW5GZXRjaGVkLnBpcGUoc2coMCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pKSx0aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb249e3RlbXBsYXRlOnRoaXMudGVtcGxhdGUscm9vdDphfX1uZ09uRGVzdHJveSgpe3RoaXMuY2hpbGRyZW5GZXRjaFN1YnNj'@;
put 'cmlwdGlvbiYmdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHRsKSxzdChFZyksc3QoRmEpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwi'@;
put 'Y2xyUmVjdXJzaXZlRm9yIiwiIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCIiXV0saW5wdXRzOntub2RlczpbUW4uTm9uZSwiY2xyUmVjdXJzaXZlRm9yT2YiLCJub2RlcyJdLGdldENoaWxkcmVuOltRbi5Ob25lLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsImdldENoaWxkcmVuIl19LGZl'@;
put 'YXR1cmVzOltCYV19KSxjfSkoKSxLTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZm9jdXNSZXF1ZXN0PW5ldyBubix0aGlzLl9mb2N1c0NoYW5nZT1uZXcgbm59Z2V0IGZvY3VzUmVxdWVzdCgpe3JldHVybiB0aGlzLl9mb2N1c1JlcXVlc3QuYXNPYnNlcnZhYmxlKCl9Z2V0'@;
put 'IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWZvY3VzTm9kZShhKXthJiZ0aGlzLl9mb2N1c1JlcXVlc3QubmV4dChhLm5vZGVJZCl9YnJvYWRjYXN0Rm9jdXNlZE5vZGUoYSl7dGhpcy5mb2N1c2VkTm9kZUlkIT09YSYmKHRoaXMuZm9jdXNl'@;
put 'ZE5vZGVJZD1hLHRoaXMuX2ZvY3VzQ2hhbmdlLm5leHQoYSkpfWZvY3VzUGFyZW50KGEpe2EmJnRoaXMuZm9jdXNOb2RlKGEucGFyZW50KX1mb2N1c0ZpcnN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzWzBdKX1m'@;
put 'b2N1c0xhc3RWaXNpYmxlTm9kZSgpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZExhc3RWaXNpYmxlSW5UcmVlKCkpfWZvY3VzTm9kZUFib3ZlKGEpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZE5vZGVBYm92ZShhKSl9Zm9jdXNOb2RlQmVsb3coYSl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5k'@;
put 'Tm9kZUJlbG93KGEpKX1mb2N1c05vZGVTdGFydHNXaXRoKGEsZCl7dGhpcy5mb2N1c05vZGUodGhpcy5maW5kQ2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCkpfWZpbmRTaWJsaW5ncyhhKXtyZXR1cm4gYS5wYXJlbnQ/YS5wYXJlbnQuY2hpbGRyZW46dGhpcy5yb290Tm9kZU1vZGVsc31maW5k'@;
put 'TGFzdFZpc2libGVJbk5vZGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZD1hLmNoaWxkcmVuO3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZShkW2QubGVuZ3RoLTFdKX1yZXR1cm4gYX1maW5kTmV4dEZvY3Vz'@;
put 'YWJsZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiBoPGQubGVuZ3RoLTE/ZFtoKzFdOmg9PT1kLmxlbmd0aC0xP3RoaXMuZmluZE5leHRGb2N1c2FibGUoYS5wYXJlbnQpOm51bGx9ZmluZExhc3RWaXNpYmxl'@;
put 'SW5UcmVlKCl7cmV0dXJuIHRoaXMuZmluZExhc3RWaXNpYmxlSW5Ob2RlKHRoaXMucm9vdE5vZGVNb2RlbHMmJnRoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoJiZ0aGlzLnJvb3ROb2RlTW9kZWxzW3RoaXMucm9vdE5vZGVNb2RlbHMubGVuZ3RoLTFdKX1maW5kTm9kZUFib3ZlKGEpe2lmKCFh'@;
put 'KXJldHVybiBudWxsO2NvbnN0IGQ9dGhpcy5maW5kU2libGluZ3MoYSksaD1kLmluZGV4T2YoYSk7cmV0dXJuIDA9PT1oP2EucGFyZW50Omg+MD90aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZShkW2gtMV0pOm51bGx9ZmluZE5vZGVCZWxvdyhhKXtyZXR1cm4gYT9hLmV4cGFuZGVkJiZhLmNo'@;
put 'aWxkcmVuLmxlbmd0aD4wP2EuY2hpbGRyZW5bMF06dGhpcy5maW5kTmV4dEZvY3VzYWJsZShhKTpudWxsfWZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKXtpZihkLmV4cGFuZGVkJiZkLmNoaWxkcmVuLmxlbmd0aD4wKWZvcihjb25zdCBoIG9mIGQuY2hpbGRyZW4pe2NvbnN0IGY9'@;
put 'dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmRTaWJsaW5nTm9kZVN0YXJ0c1dpdGgoYSxkKXtjb25zdCBoPXRoaXMuZmluZFNpYmxpbmdzKGQpO2ZvcihsZXQgdj1oLmluZGV4T2YoZCkrMTt2PGgubGVuZ3RoO3YrKyl7Y29uc3QgWT10'@;
put 'aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGhbdl0pO2lmKFkpcmV0dXJuIFl9cmV0dXJuIG51bGx9ZmluZFJvb3ROb2RlU3RhcnRzV2l0aChhLGQpe2Zvcihjb25zdCBoIG9mIHRoaXMucm9vdE5vZGVNb2RlbHMpe2lmKGQucGFyZW50JiZkLnBhcmVudD09PWgpY29udGludWU7Y29uc3QgZj10'@;
put 'aGlzLmZpbmROb2RlU3RhcnRzV2l0aChhLGgpO2lmKGYpcmV0dXJuIGZ9cmV0dXJuIG51bGx9ZmluZE5vZGVTdGFydHNXaXRoKGEsZCl7cmV0dXJuIGQ/ZC50ZXh0Q29udGVudC5zdGFydHNXaXRoKGEpP2Q6dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk6bnVsbH1maW5k'@;
put 'Q2xvc2VzdE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD10aGlzLmZpbmREZXNjZW5kZW50Tm9kZVN0YXJ0c1dpdGgoYSxkKTtpZihoKXJldHVybiBoO2NvbnN0IGY9dGhpcy5maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCk7cmV0dXJuIGZ8fCh0aGlz'@;
put 'LmZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXx8dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxkLnBhcmVudCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxj'@;
put 'fSkoKTtjbGFzcyBoRGUgZXh0ZW5kcyBjcmV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLnBhcmVudD1sLGwmJmwuX2FkZENoaWxkKHRoaXMpLHRoaXMuY2hpbGRyZW49W119ZGVzdHJveSgpe3RoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fcmVtb3ZlQ2hpbGQodGhpcyksc3VwZXIuZGVz'@;
put 'dHJveSgpfV9hZGRDaGlsZChsKXt0aGlzLmNoaWxkcmVuLnB1c2gobCl9X3JlbW92ZUNoaWxkKGwpe2NvbnN0IGE9dGhpcy5jaGlsZHJlbi5pbmRleE9mKGwpO2E+LTEmJnRoaXMuY2hpbGRyZW4uc3BsaWNlKGEsMSl9fWxldCBXND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMu'@;
put 'ZWw9YX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoImFjdGl2ZSIpfWFjdGl2YXRlKCl7dGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xpY2smJnRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGlj'@;
put 'aygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCgkaSkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLDgsImNsci10cmVlbm9kZS1saW5rIl1dfSksY30pKCksdWQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQs'@;
put 'aCxmLHYsVCxZLHJlKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuZXhwYW5kU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMuZm9jdXNNYW5hZ2VyPVQsdGhpcy5lbGVtZW50UmVmPVksdGhpcy5zZWxlY3RlZENoYW5nZT1uZXcgSXIoITEp'@;
put 'LHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IElyLHRoaXMuU1RBVEVTPSRjLHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9aHUoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyPSIi'@;
put 'LHRoaXMudHlwZUFoZWFkS2V5RXZlbnQ9bmV3IG5uLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD10aGlzLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/cmUudmlldz9yZS52aWV3LmNvbnRleHQuY2xyTW9kZWw6cmUuX2xWaWV3WzhdLmNsck1vZGVsOm5ldyBoRGUoZD9kLl9t'@;
put 'b2RlbDpudWxsKSx0aGlzLl9tb2RlbC5ub2RlSWQ9dGhpcy5ub2RlSWR9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGVkLnZhbHVlfXNldCBzZWxlY3RlZChhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09YXx8dHlwZW9mIGE+InUi'@;
put 'KSYmKGE9JGMuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgYSYmKGE9YT8kYy5TRUxFQ1RFRDokYy5VTlNFTEVDVEVEKSx0aGlzLnNraXBFbWl0Q2hhbmdlPSEwLHRoaXMuX21vZGVsLnNldFNlbGVjdGVkKGEsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1Nl'@;
put 'cnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPWF9c2V0IGNsckZvclR5cGVBaGVhZChhKXt0aGlzLl9tb2Rl'@;
put 'bC50ZXh0Q29udGVudD1kcmUoYXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PSRjLlNFTEVDVEVEOiEhdGhpcy50cmVlTm9k'@;
put 'ZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVDb250ZW50VGV4dE9ubHkoKXtyZXR1cm4gMD09PXRoaXMudHJlZU5vZGVMaW5rTGlzdC5sZW5ndGh9Z2V0IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJz'@;
put 'dH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7dGhpcy5fbW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5zZWxlY3Rl'@;
put 'ZC5waXBlKEhhKCgpPT4hdGhpcy5za2lwRW1pdENoYW5nZSkpLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3RlZENoYW5nZS5lbWl0KGEpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmV4cGFuZGVk'@;
put 'Q2hhbmdlLmVtaXQoYSksdGhpcy5fbW9kZWwuZXhwYW5kZWQ9YX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1JlcXVlc3Quc3Vic2NyaWJlKGE9Pnt0aGlzLm5vZGVJZD09PWEmJnRoaXMuZm9jdXNUcmVlTm9kZSgpfSksdGhpcy5mb2N1c01hbmFn'@;
put 'ZXIuZm9jdXNDaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmNoZWNrVGFiSW5kZXgoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5fbW9kZWwubG9hZGluZyQucGlwZShzZygwKSkuc3Vic2NyaWJlKGE9PnRoaXMuaXNNb2RlbExvYWRpbmc9YSkpfW5nQWZ0ZXJDb250ZW50SW5p'@;
put 'dCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudHlwZUFoZWFkS2V5RXZlbnQucGlwZShzZygyMDApKS5zdWJzY3JpYmUoYT0+e3RoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZVN0YXJ0c1dpdGgoYSx0aGlzLl9tb2RlbCksdGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9KSl9bmdB'@;
put 'ZnRlclZpZXdJbml0KCl7dGhpcy5fbW9kZWwudGV4dENvbnRlbnR8fCh0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1kcmUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpKX1uZ09uRGVzdHJveSgpe3RoaXMuX21vZGVsLmRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlv'@;
put 'bnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWlzRXhwYW5kYWJsZSgpe3JldHVybiB0eXBlb2YgdGhpcy5leHBhbmRhYmxlPCJ1Ij90aGlzLmV4cGFuZGFibGU6ISF0aGlzLmV4cGFuZFNlcnZpY2UuZXhwYW5kYWJsZXx8dGhpcy5pc1BhcmVudH1pc1NlbGVjdGFibGUoKXtyZXR1cm4g'@;
put 'dGhpcy5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZX1mb2N1c1RyZWVOb2RlKCl7Y29uc3QgYT10aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudDtsYSh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09YSYmKHRoaXMuc2V0VGFiSW5kZXgoMCksYS5m'@;
put 'b2N1cygpLGEuc2Nyb2xsSW50b1ZpZXcoe2Jsb2NrOiJuZWFyZXN0IixpbmxpbmU6Im5lYXJlc3QifSkpfWJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKXt0aGlzLmZvY3VzTWFuYWdlci5icm9hZGNhc3RGb2N1c2VkTm9kZSh0aGlzLm5vZGVJZCl9b25LZXlEb3duKGEpe3N3aXRjaChkTihh'@;
put 'KSxxZChhLmtleSkpe2Nhc2Uga28uQXJyb3dVcDp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVBYm92ZSh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSBrby5BcnJvd0Rvd246dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlQmVsb3codGhpcy5fbW9kZWwpO2JyZWFrO2Nhc2Uga28uQXJyb3dS'@;
put 'aWdodDp0aGlzLmV4cGFuZE9yRm9jdXNGaXJzdENoaWxkKCk7YnJlYWs7Y2FzZSBrby5BcnJvd0xlZnQ6dGhpcy5jb2xsYXBzZU9yRm9jdXNQYXJlbnQoKTticmVhaztjYXNlIGtvLkhvbWU6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzRmlyc3RWaXNpYmxlTm9k'@;
put 'ZSgpO2JyZWFrO2Nhc2Uga28uRW5kOmEucHJldmVudERlZmF1bHQoKSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0xhc3RWaXNpYmxlTm9kZSgpO2JyZWFrO2Nhc2Uga28uRW50ZXI6dGhpcy50b2dnbGVFeHBhbmRPclRyaWdnZXJEZWZhdWx0KCk7YnJlYWs7Y2FzZSBrby5TcGFjZTpjYXNlIGtv'@;
put 'LlNwYWNlYmFyOmEucHJldmVudERlZmF1bHQoKSx0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztkZWZhdWx0OmlmKHRoaXMuX21vZGVsLnRleHRDb250ZW50JiZmdW5jdGlvbiBZRWUoYyl7Y29uc3QgbD1jLmtleTtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpIT09bC50'@;
put 'b1VwcGVyQ2FzZSgpfHxsPj0iMCImJmw8PSI5In0oYSkpcmV0dXJuIHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKz1hLmtleSx2b2lkIHRoaXMudHlwZUFoZWFkS2V5RXZlbnQubmV4dCh0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcil9dGhpcy50eXBlQWhlYWRLZXlCdWZmZXI9IiJ9c2V0VGFiSW5k'@;
put 'ZXgoYSl7dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXg9YSx0aGlzLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IixhKX1jaGVja1RhYkluZGV4KGEpe2xhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMubm9kZUlkIT09YSYmLTEhPT10aGlz'@;
put 'LmNvbnRlbnRDb250YWluZXJUYWJpbmRleCYmdGhpcy5zZXRUYWJJbmRleCgtMSl9dG9nZ2xlRXhwYW5kT3JUcmlnZ2VyRGVmYXVsdCgpe3RoaXMuaXNFeHBhbmRhYmxlKCkmJiF0aGlzLmlzU2VsZWN0YWJsZSgpP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hdGhpcy5leHBhbmRlZDp0'@;
put 'aGlzLnRyaWdnZXJEZWZhdWx0QWN0aW9uKCl9ZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmV4cGFuZGVkP3RoaXMuaXNQYXJlbnQmJnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzTm9kZUJlbG93KHRoaXMuX21vZGVsKTp0aGlzLmlzRXhwYW5kYWJsZSgpJiYodGhpcy5leHBhbmRTZXJ2'@;
put 'aWNlLmV4cGFuZGVkPSEwKX1jb2xsYXBzZU9yRm9jdXNQYXJlbnQoKXt0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCl9dHJpZ2dlckRlZmF1bHRBY3Rpb24oKXt0aGlzLnRyZWVOb2Rl'@;
put 'TGluaz90aGlzLnRyZWVOb2RlTGluay5hY3RpdmF0ZSgpOnRoaXMuaXNTZWxlY3RhYmxlKCkmJnRoaXMuX21vZGVsLnRvZ2dsZVNlbGVjdGlvbih0aGlzLmZlYXR1cmVzU2VydmljZS5lYWdlcil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KEFv'@;
put 'KSxzdChjLDEyKSxzdChFZyksc3QoTDApLHN0KFJzKSxzdChLTiksc3QoJGkpLHN0KHBhKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlLW5vZGUiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCxXNCw0KSwyJmEpe2xl'@;
put 'dCBmO01pKGY9Q2koKSkmJihkLnRyZWVOb2RlTGlua0xpc3Q9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlVvKHdrZSw3LCRpKSwyJmEpe2xldCBoO01pKGg9Q2koKSkmJihkLmNvbnRlbnRDb250YWluZXI9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpm'@;
put 'dW5jdGlvbihhLGQpezImYSYmYnIoImNsci10cmVlLW5vZGUiLCEwKX0saW5wdXRzOntleHBhbmRhYmxlOltRbi5Ob25lLCJjbHJFeHBhbmRhYmxlIiwiZXhwYW5kYWJsZSJdLHNlbGVjdGVkOltRbi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W1FuLk5vbmUsImNs'@;
put 'ckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlOiJjbHJTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W0dpKFthcmUsTDAse3Byb3Zp'@;
put 'ZGU6RWIsdXNlRXhpc3Rpbmc6TDB9XSldLG5nQ29udGVudFNlbGVjdG9yczpDa2UsZGVjbHM6MTIsdmFyczo5LGNvbnN0czpbWyJjb250ZW50Q29udGFpbmVyIiwiIl0sWyJ0cmVlbm9kZUNvbnRlbnQiLCIiXSxbInJvbGUiLCJ0cmVlaXRlbSIsInRhYmluZGV4IiwiLTEiLDEsImNsci10cmVl'@;
put 'LW5vZGUtY29udGVudC1jb250YWluZXIiLDMsImtleWRvd24iLCJmb2N1cyJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidHlwZSIsImJ1dHRvbiIsInRhYmluZGV4IiwiLTEiLCJjbGFzcyIsImNsci10cmVlbm9kZS1jYXJldCIsMywiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3Mi'@;
put 'LCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIgY2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJjbHItdHJlZW5vZGUtdGV4dC1vbmx5'@;
put 'IiwibW91c2V1cCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY2hpbGRyZW4iXSxbMywicGFyZW50Il0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIl0sWyJzaGFw'@;
put 'ZSIsImFuZ2xlIiwxLCJjbHItdHJlZW5vZGUtY2FyZXQtaWNvbiJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiXSxbMSwiY2xyLXRyZWVub2RlLXNwaW5uZXIiLCJzcGlubmVyIl0sWzEsImNsci1jaGVja2JveC13cmFwcGVyIiwiY2xyLXRyZWVub2RlLWNoZWNrYm94Il0s'@;
put 'WyJhcmlhLWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiY2hlY2tib3giLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItY2hlY2tib3giLDMsImNoYW5nZSIsImZvY3VzIiwiaWQiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsMywiZm9yIl0sWzMsIm5nVGVt'@;
put 'cGxhdGVPdXRsZXQiXSxbMSwiY2xyLXRyZWVub2RlLWNvbnRlbnQiLDMsIm1vdXNldXAiXSxbImNsYXNzIiwiY2xyLXNyLW9ubHkiLDQsIm5nSWYiXSxbMSwiY2xyLXNyLW9ubHkiXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1IbigpO2ppKE1r'@;
put 'ZSksZ2UoMCwiZGl2IiwyLDApLEh0KCJrZXlkb3duIixmdW5jdGlvbih2KXtyZXR1cm4gU3QoaCkseHQoZC5vbktleURvd24odikpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBTdChoKSx4dChkLmJyb2FkY2FzdEZvY3VzT25Db250YWluZXIoKSl9KSxidCgyLFNrZSwyLDEsImJ1dHRv'@;
put 'biIsMykoMyx4a2UsMiwwLCJkaXYiLDQpKDQsa2tlLDQsNywiZGl2Iiw1KSg1LEVrZSwyLDMsImRpdiIsNikoNixMa2UsMiwxLCJuZy10ZW1wbGF0ZSIsbnVsbCwxLG91KSxiZSgpLGdlKDgsImRpdiIsNyksT3IoOSksT3IoMTAsMSksSnQoMTEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDgp'@;
put 'LGJlKCl9MiZhJiYoaHIoImFyaWEtZXhwYW5kZWQiLGQuaXNFeHBhbmRhYmxlKCk/ZC5leHBhbmRlZDpudWxsKSgiYXJpYS1zZWxlY3RlZCIsZC5hcmlhU2VsZWN0ZWQpLHdlKDIpLFBlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5pc01vZGVsTG9hZGluZyYmIWQuZXhwYW5kU2Vydmlj'@;
put 'ZS5sb2FkaW5nKSx3ZSgpLFBlKCJuZ0lmIixkLmV4cGFuZFNlcnZpY2UubG9hZGluZ3x8ZC5pc01vZGVsTG9hZGluZyksd2UoKSxQZSgibmdJZiIsZC5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZSksd2UoKSxQZSgibmdJZiIsIWQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLHdlKDMp'@;
put 'LFBlKCJAdG9nZ2xlQ2hpbGRyZW5BbmltIixkLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImV4cGFuZGVkIjoiY29sbGFwc2VkIiksaHIoInJvbGUiLGQuaXNFeHBhbmRhYmxlKCkmJiFkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24/Imdyb3VwIjpudWxsKSx3ZSgzKSxQZSgicGFyZW50Iixk'@;
put 'Ll9tb2RlbCkpfSxkZXBlbmRlbmNpZXM6W3FpLEsxLEtzLGxyZV0sZW5jYXBzdWxhdGlvbjoyLGRhdGE6e2FuaW1hdGlvbjpbaWQoInRvZ2dsZUNoaWxkcmVuQW5pbSIsW0djKCJjb2xsYXBzZWQgPT4gZXhwYW5kZWQiLFtJcyh7aGVpZ2h0OjB9KSxuMCgyMDAsSXMoe2hlaWdodDoiKiJ9KSld'@;
put 'KSxHYygiZXhwYW5kZWQgPT4gY29sbGFwc2VkIixbSXMoe2hlaWdodDoiKiJ9KSxuMCgyMDAsSXMoe2hlaWdodDowfSkpXSksbUUoImV4cGFuZGVkIixJcyh7aGVpZ2h0OiIqIiwib3ZlcmZsb3cteSI6InZpc2libGUifSkpLG1FKCJjb2xsYXBzZWQiLElzKHtoZWlnaHQ6MH0pKV0pXX19KSxj'@;
put 'fSkoKTtmdW5jdGlvbiBkcmUoYyl7cmV0dXJuIGMudG9Mb2NhbGVMb3dlckNhc2UoKS50cmltKCl9bGV0IHJoPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLHtuYXRpdmVFbGVtZW50Omh9LGYsdil7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2U9'@;
put 'ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W107Y29uc3QgVD12LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5RaChoLCJmb2N1c2luIikuc3Vic2NyaWJlKFk9PntZLnRhcmdldD09PWgmJih0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2UuZm9jdXNGaXJzdFZpc2libGVOb2RlKCksZi5yZW1vdmVBdHRyaWJ1'@;
put 'dGUoaCwidGFiaW5kZXgiKSl9KSk7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goVCl9c2V0IGxhenkoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXI9IWF9Z2V0IGlzTXVsdGlTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUmJnRoaXMucm9vdE5v'@;
put 'ZGVzLmxlbmd0aD4wfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Um9vdE5vZGVzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5yb290Tm9kZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldFJvb3ROb2RlcygpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3Jp'@;
put 'cHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRSb290Tm9kZXMoKXt0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2Uucm9vdE5vZGVNb2RlbHM9dGhpcy5yb290Tm9kZXMubWFwKGE9PmEuX21vZGVsKS5maWx0ZXIoYT0+IWEucGFyZW50KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1'@;
put 'bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRWcpLHN0KEtOKSxzdCgkaSksc3QoY3MpLHN0KFBvKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJm5zKGgsdWQsNCksMiZh'@;
put 'KXtsZXQgZjtNaShmPUNpKCkpJiYoZC5yb290Tm9kZXM9Zil9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmaHIoInJvbGUiLCJ0cmVlIikoImFyaWEtbXVsdGlzZWxlY3RhYmxlIixkLmlzTXVsdGlTZWxlY3Rh'@;
put 'YmxlKX0saW5wdXRzOntsYXp5OltRbi5Ob25lLCJjbHJMYXp5IiwibGF6eSJdfSxmZWF0dXJlczpbR2koW2FyZSxLTl0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMywiY2hpbGRyZW4iLDQsIm5nSWYiXSxbMywiY2hpbGRyZW4iXV0sdGVtcGxhdGU6'@;
put 'ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLE9yKDApLGJ0KDEsSWtlLDEsMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsMCkpLDImYSYmKHdlKCksUGUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbikpfSxkZXBlbmRlbmNpZXM6W3FpLGxyZV0sZW5jYXBzdWxhdGlvbjoyfSks'@;
put 'Y30pKCksbURlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhnNyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhLHBOXX0p'@;
put 'LGN9KSgpLGdEZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlthRGUsY0RlLG1EZV19KSxjfSkoKTtmdW5jdGlvbiBocmUoYyxsLGEp'@;
put 'e3JldHVybiB3bi5jcmVhdGUoZD0+e2woZCk7Y29uc3QgaD1jLnN1YnNjcmliZShkKTtyZXR1cm4oKT0+e2gudW5zdWJzY3JpYmUoKSxhJiZhKGQpfX0pfWxldCBRRT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yZW5kZXJlcj1hLHRoaXMucGFyZW50PWQsdGhp'@;
put 'cy50b2dnbGVTZXJ2aWNlPWgsdGhpcy5mb2N1c1NlcnZpY2U9Zix0aGlzLnBsYXRmb3JtSWQ9dix0aGlzLmlkPWh1KCksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMuX3VubGlzdGVuRnVuY3M9W10sdGhpcy5yZXNldENoaWxkcmVuKCksdGhpcy5tb3ZlVG9GaXJz'@;
put 'dEl0ZW1XaGVuT3BlbigpLHRoaXMucGFyZW50fHx0aGlzLmhhbmRsZVJvb3RGb2N1cygpfWdldCB0cmlnZ2VyKCl7cmV0dXJuIHRoaXMuX3RyaWdnZXJ9c2V0IHRyaWdnZXIoYSl7dGhpcy5fdHJpZ2dlcj1hLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRl'@;
put 'cmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93cmlnaHQiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKToodGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uYXJyb3d1cCIsZD0+dGhpcy50b2dnbGVTZXJ2aWNl'@;
put 'LnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93ZG93biIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuZm9jdXNTZXJ2aWNlLmxpc3RlblRvQXJyb3dL'@;
put 'ZXlzKGEpKX1nZXQgY29udGFpbmVyKCl7cmV0dXJuIHRoaXMuX2NvbnRhaW5lcn1zZXQgY29udGFpbmVyKGEpe3RoaXMuX2NvbnRhaW5lcj1hLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLnRhYiIsZD0+dGhpcy50b2dnbGVTZXJ2aWNl'@;
put 'LnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMucGFyZW50P3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmUoc2QuTEVGVCksZC5zdG9wUHJvcGFnYXRpb24oKX0pKToodGhpcy5m'@;
put 'b2N1c1NlcnZpY2UucmVnaXN0ZXJDb250YWluZXIoYSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImtleWRvd24uZXNjYXBlIixkPT50aGlzLnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNo'@;
put 'KHRoaXMucmVuZGVyZXIubGlzdGVuKGEsImJsdXIiLGQ9Pnt0aGlzLmNoaWxkcmVuLnBpcGUoS2goMSkpLnN1YnNjcmliZShmPT5mLmZvckVhY2godj0+di5ibHVyKCkpKTtjb25zdCBoPWQucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtoJiZsYSh0aGlzLnBsYXRmb3Jt'@;
put 'SWQpJiYoYS5jb250YWlucyhoKXx8aD09PXRoaXMudHJpZ2dlcil8fCh0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSkpKX1uZ09uRGVzdHJveSgpe3RoaXMuX3VubGlzdGVuRnVuY3MuZm9yRWFjaChhPT5hKCkpLHRoaXMu'@;
put 'Zm9jdXNTZXJ2aWNlLmRldGFjaExpc3RlbmVycygpfW1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMudG9nZ2xlU2VydmljZS5vcmlnaW5hbEV2ZW50JiZzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5mb2N1c1NlcnZpY2UubW92ZVRvKHRoaXMpLHRoaXMuZm9jdXNTZXJ2aWNlLm1vdmUodGhpcy5wYXJlbnQ/c2QuUklHSFQ6c2QuRE9XTil9KX0pO3RoaXMuX3VubGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1oYW5kbGVSb290Rm9jdXMoKXtjb25zdCBhPXRoaXMudG9n'@;
put 'Z2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShkPT57ZHx8KHRoaXMuZm9jdXNTZXJ2aWNlLnJlc2V0KHRoaXMpLHRoaXMuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZCYmdGhpcy5mb2N1cygpKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ZH0pO3RoaXMuX3Vu'@;
put 'bGlzdGVuRnVuY3MucHVzaCgoKT0+YS51bnN1YnNjcmliZSgpKX1mb2N1cygpe3RoaXMudHJpZ2dlciYmbGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmZvY3VzKCl9Ymx1cigpe3RoaXMudHJpZ2dlciYmbGEodGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy50cmlnZ2VyLmJsdXIoKX1h'@;
put 'Y3RpdmF0ZSgpe2xhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5jbGljaygpfXJlc2V0Q2hpbGRyZW4oKXt0aGlzLmNoaWxkcmVuPW5ldyBmRSgxKSx0aGlzLnBhcmVudD90aGlzLnJpZ2h0PXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZSh5cihhPT5hWzBdKSk6KHRoaXMu'@;
put 'ZG93bj10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoeXIoYT0+YVswXSkpLHRoaXMudXA9dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKHlyKGE9PmFbYS5sZW5ndGgtMV0pKSl9YWRkQ2hpbGRyZW4oYSl7Zk4ubGlua1ZlcnRpY2FsKGEpLHRoaXMucGFyZW50JiZmTi5saW5r'@;
put 'UGFyZW50KGEsdGhpcy5jbG9zZUFuZEdldFRoaXMoKSxzZC5MRUZUKSx0aGlzLmNoaWxkcmVuLm5leHQoYSl9b3BlbkFuZEdldENoaWxkcmVuKCl7cmV0dXJuIGhyZSh0aGlzLmNoaWxkcmVuLCgpPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9Y2xvc2VBbmRHZXRUaGlzKCl7cmV0dXJu'@;
put 'IGhyZShObyh0aGlzKSwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcihjcyksZnIoYywxMiksZnIoRGwpLGZyKHdmKSxmcihBbykpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9y'@;
put 'eTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IF9EZT1JbmUoUUUpO2xldCBVYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fY2hhbmdlcz1uZXcgbm59Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1jbG9zZU1lbnVzKCl7dGhpcy5f'@;
put 'Y2hhbmdlcy5uZXh0KCExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3QgeURlPXtwcm92aWRlOlViLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gdkRl'@;
put 'KGMpe3JldHVybiBjfHxuZXcgVWJ9LGRlcHM6W1tuZXcgTHUsbmV3IGJ1LFViXV19O2xldCB0cD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5wYXJlbnQ9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmZvY3VzSGFuZGxlcj1oLHRoaXMuY2RyPWYsdGhpcy5p'@;
put 'c01lbnVDbG9zYWJsZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godi5jaGFuZ2VzLnN1YnNjcmliZShUPT50aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1UKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+'@;
put 'dGhpcy5jZHIubWFya0ZvckNoZWNrKCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KGMsMTIpLHN0KERsKSxzdChRRSksc3QoRmEp'@;
put 'LHN0KFViKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kcm9wZG93biJdXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImRyb3Bkb3duIiwhMCkoIm9wZW4iLGQudG9nZ2xlU2VydmljZS5vcGVuKX0saW5wdXRzOntpc01l'@;
put 'bnVDbG9zYWJsZTpbUW4uTm9uZSwiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCJpc01lbnVDbG9zYWJsZSJdfSxmZWF0dXJlczpbR2koW3lEZSx4bmUsX0RlXSksWHUoW3EzXSldLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEm'@;
put 'YSYmKGppKCksT3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjb25zdCBiRGU9W3twcm92aWRlOkhFLHVzZUNsYXNzOigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWw9YSx0aGlzLnJlbmRlcmVyPWQsdGhpcy5wbGF0Zm9ybUlkPWgsdGhpcy5pZD1odSgpLHRo'@;
put 'aXMuZGlzYWJsZWQ9ITEsZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJpZCIsdGhpcy5pZCksZC5zZXRBdHRyaWJ1dGUoYS5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIi0xIil9Zm9jdXMoKXtsYSh0aGlzLnBsYXRmb3JtSWQpJiYodGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUo'@;
put 'dGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0YWJpbmRleCIsIjAiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe2JlaGF2aW9yOiJzbW9vdGgiLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KSl9Ymx1cigp'@;
put 'e2xhKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYmx1cigpKX1hY3RpdmF0ZSgpe2xhKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWwubmF0aXZl'@;
put 'RWxlbWVudC5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShmcigkaSksZnIoY3MpLGZyKEFvKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCl9XTtsZXQgZTk9KCgpPT57Y2xhc3MgY3tj'@;
put 'b25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kcm9wZG93bj1hLHRoaXMuX2Ryb3Bkb3duU2VydmljZT1kLHRoaXMuZm9jdXNhYmxlSXRlbT1ofWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5k'@;
put 'aXNhYmxlZD0hIWF8fCIiPT09YX1nZXQgZHJvcGRvd25JdGVtSWQoKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtLmlkfXNldCBkcm9wZG93bkl0ZW1JZChhKXt0aGlzLmZvY3VzYWJsZUl0ZW0uaWQ9YX1vbkRyb3Bkb3duSXRlbUNsaWNrKCl7aWYodGhpcy5kcm9wZG93bi5pc01lbnVDbG9z'@;
put 'YWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuZHJvcGRvd24udG9nZ2xlU2VydmljZS5vcGVuKXtjb25zdCBhPXRoaXMuZmluZFJvb3REcm9wZG93bigpO2EuZm9jdXNIYW5kbGVyLmZvY3VzKCksYS5mb2N1c0hhbmRsZXIuZm9jdXNCYWNrT25UcmlnZ2VyV2hlbkNsb3NlZD0hMX1zZXRUaW1l'@;
put 'b3V0KCgpPT57dGhpcy5kcm9wZG93bi5pc01lbnVDbG9zYWJsZSYmIXRoaXMuZGlzYWJsZWQmJnRoaXMuX2Ryb3Bkb3duU2VydmljZS5jbG9zZU1lbnVzKCl9KX1vblNwYWNlS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9b25FbnRlcktleWRv'@;
put 'd24oYSl7dGhpcy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb25JZkRpc2FibGVkKGEpfXN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZCYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX1maW5kUm9vdERyb3Bk'@;
put 'b3duKCl7bGV0IGE9dGhpcy5kcm9wZG93bjtmb3IoO2EucGFyZW50OylhPWEucGFyZW50O3JldHVybiBhfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCh0cCksc3QoVWIpLHN0KEhFKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbIiIsImNsckRyb3Bkb3duSXRlbSIsIiJdXSxob3N0VmFyczo3LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm9uRHJvcGRvd25JdGVtQ2xpY2soKX0pKCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5v'@;
put 'blNwYWNlS2V5ZG93bihmKX0pKCJrZXlkb3duLmVudGVyIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVudGVyS2V5ZG93bihmKX0pLDImYSYmKGhyKCJyb2xlIiwibWVudWl0ZW0iKSgiYXJpYS1kaXNhYmxlZCIsZC5kaXNhYmxlZCkoImlkIixkLmRyb3Bkb3duSXRlbUlkKSxicigiZGlzYWJs'@;
put 'ZWQiLGQuZGlzYWJsZWQpKCJkcm9wZG93bi1pdGVtIiwhMCkpfSxpbnB1dHM6e2Rpc2FibGVkOltRbi5Ob25lLCJjbHJEaXNhYmxlZCIsImRpc2FibGVkIl0sZHJvcGRvd25JdGVtSWQ6W1FuLk5vbmUsImlkIiwiZHJvcGRvd25JdGVtSWQiXX0sZmVhdHVyZXM6W0dpKFtiRGVdKV19KSxjfSko'@;
put 'KTt2YXIgb2k9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SSUdIVF9DRU5URVI9MF09IlJJR0hUX0NFTlRFUiIsY1tjLlJJR0hUX1RPUD0xXT0iUklHSFRfVE9QIixjW2MuUklHSFRfQk9UVE9NPTJdPSJSSUdIVF9CT1RUT00iLGNbYy5UT1BfQ0VOVEVSPTNdPSJUT1BfQ0VOVEVSIixjW2MuVE9Q'@;
put 'X1JJR0hUPTRdPSJUT1BfUklHSFQiLGNbYy5UT1BfTEVGVD01XT0iVE9QX0xFRlQiLGNbYy5CT1RUT01fQ0VOVEVSPTZdPSJCT1RUT01fQ0VOVEVSIixjW2MuQk9UVE9NX1JJR0hUPTddPSJCT1RUT01fUklHSFQiLGNbYy5CT1RUT01fTEVGVD04XT0iQk9UVE9NX0xFRlQiLGNbYy5MRUZUX0NF'@;
put 'TlRFUj05XT0iTEVGVF9DRU5URVIiLGNbYy5MRUZUX1RPUD0xMF09IkxFRlRfVE9QIixjW2MuTEVGVF9CT1RUT009MTFdPSJMRUZUX0JPVFRPTSIsY30ob2l8fHt9KTtjbGFzcyBDRGV7Y29uc3RydWN0b3IobCl7dGhpcy5lbGVtZW50PWwsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXI9dGhp'@;
put 'cy5lbWl0U2Nyb2xsRXZlbnQuYmluZCh0aGlzKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cz1bXSxsLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5zdHlsZS50b3A9MCxsLnN0eWxlLmJvdHRvbT0iYXV0byIsbC5zdHlsZS5sZWZ0PTAsbC5zdHlsZS5yaWdodD0iYXV0byJ9YW5jaG9yKGws'@;
put 'YSxkLHtvZmZzZXRYOmg9MCxvZmZzZXRZOmY9MCx1c2VBbmNob3JQYXJlbnQ6dj0hMX09e30pe3RoaXMuYWRkU2Nyb2xsRXZlbnRMaXN0ZW5lcnMobCksdiYmKGw9bC5wYXJlbnROb2RlKSxsLnN0eWxlLnBvc2l0aW9uPSJzdGF0aWMiO2NvbnN0IFQ9bC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo'@;
put 'KSxZPXRoaXMuZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgcmU9VC5sZWZ0LVkubGVmdCtoLGZlPVQudG9wLVkudG9wK2Y7c3dpdGNoKGEpe2Nhc2Ugb2kuTEVGVF9UT1A6Y2FzZSBvaS5UT1BfTEVGVDpicmVhaztjYXNlIG9pLlRPUF9DRU5URVI6cmUrPVQud2lkdGgvMjti'@;
put 'cmVhaztjYXNlIG9pLlRPUF9SSUdIVDpjYXNlIG9pLlJJR0hUX1RPUDpyZSs9VC53aWR0aDticmVhaztjYXNlIG9pLkxFRlRfQk9UVE9NOmNhc2Ugb2kuQk9UVE9NX0xFRlQ6ZmUrPVQuaGVpZ2h0O2JyZWFrO2Nhc2Ugb2kuQk9UVE9NX0NFTlRFUjpmZSs9VC5oZWlnaHQscmUrPVQud2lkdGgv'@;
put 'MjticmVhaztjYXNlIG9pLkJPVFRPTV9SSUdIVDpjYXNlIG9pLlJJR0hUX0JPVFRPTTpmZSs9VC5oZWlnaHQscmUrPVQud2lkdGg7YnJlYWs7Y2FzZSBvaS5MRUZUX0NFTlRFUjpmZSs9VC5oZWlnaHQvMjticmVhaztjYXNlIG9pLlJJR0hUX0NFTlRFUjpmZSs9VC5oZWlnaHQvMixyZSs9VC53'@;
put 'aWR0aH1zd2l0Y2goZCl7Y2FzZSBvaS5MRUZUX1RPUDpjYXNlIG9pLlRPUF9MRUZUOmJyZWFrO2Nhc2Ugb2kuVE9QX0NFTlRFUjpyZS09WS53aWR0aC8yO2JyZWFrO2Nhc2Ugb2kuVE9QX1JJR0hUOmNhc2Ugb2kuUklHSFRfVE9QOnJlLT1ZLndpZHRoO2JyZWFrO2Nhc2Ugb2kuTEVGVF9CT1RU'@;
put 'T006Y2FzZSBvaS5CT1RUT01fTEVGVDpmZS09WS5oZWlnaHQ7YnJlYWs7Y2FzZSBvaS5CT1RUT01fQ0VOVEVSOmZlLT1ZLmhlaWdodCxyZS09WS53aWR0aC8yO2JyZWFrO2Nhc2Ugb2kuQk9UVE9NX1JJR0hUOmNhc2Ugb2kuUklHSFRfQk9UVE9NOmZlLT1ZLmhlaWdodCxyZS09WS53aWR0aDti'@;
put 'cmVhaztjYXNlIG9pLkxFRlRfQ0VOVEVSOmZlLT1ZLmhlaWdodC8yO2JyZWFrO2Nhc2Ugb2kuUklHSFRfQ0VOVEVSOmZlLT1ZLmhlaWdodC8yLHJlLT1ZLndpZHRofWNvbnN0IF9lPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxrZT1wYXJzZUludChfZS5tYXJnaW5MZWZ0LDEwKSxX'@;
put 'ZT1wYXJzZUludChfZS5tYXJnaW5SaWdodCwxMCksSmU9cGFyc2VJbnQoX2UubWFyZ2luVG9wLDEwKSx0dD1wYXJzZUludChfZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIG9pLkxFRlRfVE9QOmNhc2Ugb2kuVE9QX0xFRlQ6Y2FzZSBvaS5UT1BfUklHSFQ6Y2FzZSBvaS5SSUdI'@;
put 'VF9UT1A6KGQ9PT1vaS5CT1RUT01fUklHSFR8fGQ9PT1vaS5SSUdIVF9CT1RUT00pJiYoZmUtPXR0LHJlLT1XZSksKGQ9PT1vaS5CT1RUT01fTEVGVHx8ZD09PW9pLkxFRlRfQk9UVE9NKSYmKGZlLT1KZSxyZSs9a2UpLChkPT09b2kuVE9QX0xFRlR8fGQ9PT1vaS5MRUZUX1RPUCkmJihmZSs9'@;
put 'SmUscmUrPWtlKSwoZD09PW9pLlRPUF9SSUdIVHx8ZD09PW9pLlJJR0hUX1RPUCkmJihmZSs9SmUscmUtPVdlKTticmVhaztjYXNlIG9pLkxFRlRfQk9UVE9NOmNhc2Ugb2kuQk9UVE9NX0xFRlQ6Y2FzZSBvaS5CT1RUT01fUklHSFQ6Y2FzZSBvaS5SSUdIVF9CT1RUT006KGQ9PT1vaS5CT1RU'@;
put 'T01fTEVGVHx8ZD09PW9pLkxFRlRfQk9UVE9NKSYmKGZlLT10dCxyZSs9a2UpLChkPT09b2kuQk9UVE9NX1JJR0hUfHxkPT09b2kuUklHSFRfQk9UVE9NKSYmKGZlLT10dCxyZS09V2UpLChkPT09b2kuVE9QX0xFRlR8fGQ9PT1vaS5MRUZUX1RPUCkmJihmZSs9SmUscmUrPWtlKSwoZD09PW9p'@;
put 'LlRPUF9SSUdIVHx8ZD09PW9pLlJJR0hUX1RPUCkmJihmZSs9SmUscmUtPVdlKTticmVhaztjYXNlIG9pLlRPUF9DRU5URVI6ZmUtPXR0LHJlKz1rZSxyZS09V2U7YnJlYWs7Y2FzZSBvaS5CT1RUT01fQ0VOVEVSOmZlKz1KZSxyZSs9a2UscmUtPVdlO2JyZWFrO2Nhc2Ugb2kuTEVGVF9DRU5U'@;
put 'RVI6ZmUrPUplLGZlLT10dCxyZS09V2U7YnJlYWs7Y2FzZSBvaS5SSUdIVF9DRU5URVI6ZmUrPUplLGZlLT10dCxyZSs9a2V9cmV0dXJuIHRoaXMuZWxlbWVudC5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZVgoJHtNYXRoLnJvdW5kKHJlKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91bmQo'@;
put 'ZmUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0aW9u'@;
put 'O3JldHVybiJyZWxhdGl2ZSI9PT1hfHwiYWJzb2x1dGUiPT09YXx8ImZpeGVkIj09PWF9ZW1pdFNjcm9sbEV2ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKXt0aGlzLl9zY3JvbGw9bmV3IG5uO2NvbnN0IGE9bDtsZXQgZD1sO2Zvcig7ZCYmZCE9'@;
put 'PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKGQpJiYoZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMuYm91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5wdXNoKGQpKSxkPT09YXx8IXRoaXMuaXNQb3NpdGlvbmVkKGQpKTspZD1kLnBhcmVudE5vZGV9'@;
put 'cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgbCBvZiB0aGlzLnNjcm9sbGFibGVFbGVtZW50cylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMu'@;
put 'X3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpO3JldHVybiJzY3JvbGwiPT09YS5vdmVyZmxvd1h8fCJhdXRvIj09PWEub3ZlcmZsb3dYfHwic2Nyb2xsIj09PWEub3ZlcmZs'@;
put 'b3dZfHwiYXV0byI9PT1hLm92ZXJmbG93WX19bGV0IFhOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnBhcmVudEhvc3Q9ZCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITEsdGhpcy5wb3BvdmVyT3B0aW9ucz17fSx0aGlzLnVwZGF0ZUFuY2hvcj0hMSx0aGlzLmRvY3Vt'@;
put 'ZW50RVNDTGlzdGVuZXI9bnVsbCx0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaz1oPT57dGhpcy5hbmNob3JFbGVtLmNvbnRhaW5zKGgudGFyZ2V0KXx8KHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0sdGhpcy5lbD1hLmdldCgkaSksdGhpcy50b2dnbGVTZXJ2aWNlPWEuZ2V0'@;
put 'KERsKSx0aGlzLnJlbmRlcmVyPWEuZ2V0KGNzKSx0aGlzLm5nWm9uZT1hLmdldChQbyksdGhpcy5yZWY9YS5nZXQoRmEpLHRoaXMuYW5jaG9yRWxlbT1kLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3BvdmVySW5zdGFuY2U9bmV3IENEZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMuc3Vic2Ny'@;
put 'aXB0aW9uPXRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShoPT57aD8odGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpOih0aGlzLnJlbGVhc2UoKSx0aGlzLmRldGFjaEVTQ0xpc3RlbmVyKCkpfSksdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJih0'@;
put 'aGlzLmFuY2hvcigpLHRoaXMuYXR0YWNoRVNDTGlzdGVuZXIoKSl9Z2V0IGlzT2ZmU2NyZWVuKCl7cmV0dXJuIXRoaXMudG9nZ2xlU2VydmljZS5vcGVufW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMudXBkYXRlQW5jaG9yJiYodGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5wb3BvdmVySW5z'@;
put 'dGFuY2UuYW5jaG9yKHRoaXMuYW5jaG9yRWxlbSx0aGlzLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMpLnN1YnNjcmliZSgoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfSksdGhpcy5hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpKX1u'@;
put 'Z09uRGVzdHJveSgpe3RoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWFuY2hvcigpe3RoaXMudXBkYXRlQW5jaG9yPSEwfXJlbGVhc2UoKXt0aGlzLmRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCksdGhpcy5w'@;
put 'b3BvdmVySW5zdGFuY2UucmVsZWFzZSgpfWF0dGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcnx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5s'@;
put 'aXN0ZW4oImRvY3VtZW50Iiwia2V5ZG93biIsYT0+e2EmJmEua2V5JiZxZChhLmtleSk9PT1rby5Fc2NhcGUmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRoaXMucmVmLm1hcmtGb3JDaGVjaygpfSl9KX0pfWRldGFjaEVTQ0xpc3RlbmVyKCl7dGhp'@;
put 'cy5kb2N1bWVudEVTQ0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyKCksdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwpfWF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmZG9j'@;
put 'dW1lbnQmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9ZGV0YWNoT3V0c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJmRvY3Vt'@;
put 'ZW50JiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChwYSks'@;
put 'c3QoJGksNCkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiaXMtb2ZmLXNjcmVlbiIsZC5pc09mZlNjcmVlbil9fSksY30pKCksVGc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFhOe2NvbnN0cnVjdG9yKGEsZCxo'@;
put 'LGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRvd24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9b2kuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PW9pLkxFRlRfVE9Q'@;
put 'KToodGhpcy5hbmNob3JQb2ludD1vaS5CT1RUT01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1vaS5MRUZUX1RPUCksdGhpcy5wb3BvdmVyT3B0aW9ucy5hbGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VP'@;
put 'bk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3VzSGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9b2kuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PW9pLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0'@;
put 'aGlzLmFuY2hvclBvaW50PW9pLlRPUF9MRUZULHRoaXMucG9wb3ZlclBvaW50PW9pLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PW9pLkJPVFRPTV9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1vaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0'@;
put 'b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hvclBvaW50PW9pLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBvaW50PW9pLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PW9pLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1vaS5MRUZUX1RPUDticmVh'@;
put 'aztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1vaS5SSUdIVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9b2kuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1vaS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1vaS5SSUdIVF9U'@;
put 'T1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6dGhpcy5hbmNob3JQb2ludD1vaS5MRUZUX0JPVFRPTSx0aGlzLnBvcG92ZXJQb2ludD1vaS5SSUdIVF9CT1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNIYW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQs'@;
put 'dGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4odGhpcy5pdGVtcy50b0FycmF5KCkpKSx0aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxl'@;
put 'ci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHBhKSxzdChJRSw4KSxzdChjLDEyKSxzdChRRSkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50'@;
put 'UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZucyhoLEhFLDQpLDImYSl7bGV0IGY7TWkoZj1DaSgpKSYmKGQuaXRlbXM9Zil9fSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGhyKCJyb2xlIiwibWVudSIpLGJyKCJkcm9wZG93bi1tZW51IiwhMCkp'@;
put 'fSxpbnB1dHM6e3Bvc2l0aW9uOltRbi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOltzb10sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0p'@;
put 'LGN9KSgpLERnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2'@;
put 'ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHRwKSxzdChEbCksc3Qo'@;
put 'JGkpLHN0KFFFKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZIdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25UcmlnZ2VyQ2xpY2soZil9KSwyJmEmJihocigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsZC5hY3RpdmUpLGJyKCJkcm9wZG93bi10b2dnbGUiLGQuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5p'@;
put 'c1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFibGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixkLmFjdGl2ZSkpfX0pLGN9KSgpLEpOPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLEpkLGJhXX0pLGN9KSgpO2NvbnN0IFNEZT1bImluZm8iLCJ3YXJuaW5nIiwiZGFuZ2VyIiwic3VjY2VzcyIsIm5ldXRyYWwiLCJ1bmtub3duIiwibG9hZGluZyJdO2xldCBRTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEp'@;
put 'e3RoaXMuY29tbW9uU3RyaW5ncz1hLHRoaXMuZGVmYXVsdEljb25TaGFwZT0iaW5mby1zdGFuZGFyZCIsdGhpcy5fYWxlcnRJY29uU2hhcGU9IiIsdGhpcy5fYWxlcnRUeXBlPSJpbmZvIn1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuX2FsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEpe1NE'@;
put 'ZS5pbmRleE9mKGEpPi0xJiYodGhpcy5fYWxlcnRUeXBlPWEpfWdldCBhbGVydEljb25TaGFwZSgpe3JldHVybiIiPT09dGhpcy5fYWxlcnRJY29uU2hhcGU/dGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkuc2hhcGU6dGhpcy5fYWxlcnRJY29uU2hhcGV9c2V0IGFsZXJ0'@;
put 'SWNvblNoYXBlKGEpe2E/YSE9PXRoaXMuX2FsZXJ0SWNvblNoYXBlJiYodGhpcy5fYWxlcnRJY29uU2hhcGU9YSk6dGhpcy5fYWxlcnRJY29uU2hhcGU9IiJ9Z2V0IGFsZXJ0SWNvblRpdGxlKCl7cmV0dXJuIHRoaXMuaWNvbkluZm9Gcm9tVHlwZSh0aGlzLl9hbGVydFR5cGUpLnRpdGxlfWlj'@;
put 'b25JbmZvRnJvbVR5cGUoYSl7Y29uc3QgZD17c2hhcGU6IiIsY3NzQ2xhc3M6IiIsdGl0bGU6IiJ9O3N3aXRjaChhKXtjYXNlIndhcm5pbmciOmQuc2hhcGU9Indhcm5pbmctc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXdhcm5pbmciLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtl'@;
put 'eXMud2FybmluZzticmVhaztjYXNlImRhbmdlciI6ZC5zaGFwZT0iZXJyb3Itc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LWRhbmdlciIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYW5nZXI7YnJlYWs7Y2FzZSJzdWNjZXNzIjpkLnNoYXBlPSJzdWNjZXNzLXN0YW5kYXJk'@;
put 'IixkLmNzc0NsYXNzPSJhbGVydC1zdWNjZXNzIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnN1Y2Nlc3M7YnJlYWs7Y2FzZSJuZXV0cmFsIjpkLnNoYXBlPSJub3RlIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLm5l'@;
put 'dXRyYWw7YnJlYWs7Y2FzZSJ1bmtub3duIjpkLnNoYXBlPSJoZWxwIixkLmNzc0NsYXNzPSJhbGVydC1uZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7Y2FzZSJsb2FkaW5nIjpkLnNoYXBlPSJsb2FkaW5nIixkLmNzc0NsYXNzPSJhbGVydC1u'@;
put 'ZXV0cmFsIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnVua25vd247YnJlYWs7ZGVmYXVsdDpkLnNoYXBlPXRoaXMuZGVmYXVsdEljb25TaGFwZSxkLmNzc0NsYXNzPSJhbGVydC1pbmZvIixkLnRpdGxlPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmluZm99cmV0dXJuIGR9fXJl'@;
put 'dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKFJzKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksZVQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZT1uZXcgbm59Z2V0IGNo'@;
put 'YW5nZXMoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7YSE9PXRoaXMuX2N1cnJlbnQmJih0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSkpfWdldCBhY3RpdmVBbGVy'@;
put 'dHMoKXtyZXR1cm4gdGhpcy5hbGxBbGVydHMmJnRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hYS5fY2xvc2VkKX1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0c1t0aGlzLmN1cnJlbnRdfXNldCBjdXJyZW50QWxlcnQoYSl7dGhp'@;
put 'cy5jdXJyZW50PXRoaXMuYWN0aXZlQWxlcnRzLmluZGV4T2YoYSl9Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuYWN0aXZlQWxlcnRzJiZ0aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGh8fDB9bWFuYWdlKGEpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgp'@;
put 'LHRoaXMuYWxsQWxlcnRzPWEsdGhpcy5jdXJyZW50PSJudW1iZXIiPT10eXBlb2YgdGhpcy5fY3VycmVudD90aGlzLl9jdXJyZW50OjAsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50KSx0aGlzLnN1YnNjcmlwdGlvbj10aGlzLmFsbEFsZXJ0cy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+'@;
put 'e3RoaXMuY3VycmVudD49dGhpcy5hbGxBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5hbGxBbGVydHMubGVuZ3RoLTEpKX0pfW5leHQoKXt0aGlzLl9jdXJyZW50PXRoaXMuY3VycmVudD09PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xPzA6dGhpcy5jdXJy'@;
put 'ZW50KzEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCl9cHJldmlvdXMoKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5fY3VycmVudD0wPT09dGhpcy5jdXJyZW50P3RoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aC0xOnRoaXMuY3VycmVudC0xLHRoaXMuX2NoYW5n'@;
put 'ZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1vcGVuKCl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxlbmd0aCYmKHRoaXMuY3VycmVudEFsZXJ0fHwodGhpcy5fY3VycmVudD0wKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9Y2xvc2UoYSl7MCE9PXRoaXMuYWN0aXZlQWxlcnRzLmxl'@;
put 'bmd0aCYmKGEmJih0aGlzLl9jdXJyZW50PU1hdGgubWF4KDAsdGhpcy5jdXJyZW50LTEpKSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KSl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVm'@;
put 'YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxaYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixUKXt0aGlzLmljb25TZXJ2aWNlPWEsdGhpcy5jZHI9ZCx0aGlzLm11'@;
put 'bHRpQWxlcnRTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWYsdGhpcy5yZW5kZXJlcj12LHRoaXMuaG9zdEVsZW1lbnQ9VCx0aGlzLmlzU21hbGw9ITEsdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmlzQXBwTGV2ZWw9ITEsdGhpcy5jbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbD10aGlzLmNvbW1v'@;
put 'blN0cmluZ3Mua2V5cy5hbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsLHRoaXMuX2Nsb3NlZENoYW5nZWQ9bmV3IElyKCExKSx0aGlzLl9jbG9zZWQ9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuX2lzTGlnaHR3ZWlnaHQ9ITF9Z2V0IGlzTGlnaHR3ZWlnaHQoKXtyZXR1cm4gdGhpcy5f'@;
put 'aXNMaWdodHdlaWdodH1zZXQgaXNMaWdodHdlaWdodChhKXt0aGlzLl9pc0xpZ2h0d2VpZ2h0PWEsdGhpcy5jb25maWdBbGVydFR5cGUodGhpcy5fb3JpZ0FsZXJ0VHlwZSl9Z2V0IGFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmFsZXJ0VHlwZX1zZXQgYWxlcnRUeXBlKGEp'@;
put 'e3RoaXMuX29yaWdBbGVydFR5cGU9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZShhKX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydEljb25TaGFwZT1hfXNldCBjbG9zZWQoYSl7YSYmIXRoaXMuX2Nsb3NlZD90aGlzLmNsb3NlKCk6IWEmJnRoaXMuX2Nsb3NlZCYm'@;
put 'dGhpcy5vcGVuKCl9Z2V0IGFsZXJ0Q2xhc3MoKXtyZXR1cm4gdGhpcy5pY29uU2VydmljZS5pY29uSW5mb0Zyb21UeXBlKHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlKS5jc3NDbGFzc31nZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuX2hpZGRlbn1zZXQgaGlkZGVuKGEpe2EhPT10aGlzLl9o'@;
put 'aWRkZW4mJih0aGlzLl9oaWRkZW49YSx0aGlzLl9oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpOnRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50LCJh'@;
put 'bGVydC1oaWRkZW4iKSx0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpfW5nT25Jbml0KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZSYmdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuaGlkZGVuPXRoaXMubXVs'@;
put 'dGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0IT09dGhpc30pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9Y29uZmlnQWxlcnRUeXBlKGEpe3RoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlPWF9b3Blbigpe3RoaXMuX2Nsb3Nl'@;
put 'ZD0hMSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm9wZW4oKSx0aGlzLl9jbG9zZWRDaGFuZ2VkLmVtaXQoITEpfWNsb3NlKCl7aWYoIXRoaXMuY2xvc2FibGUpcmV0dXJuO2NvbnN0IGE9dGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uY3VycmVudEFsZXJ0'@;
put 'PT09dGhpczt0aGlzLl9jbG9zZWQ9ITAsdGhpcy5tdWx0aUFsZXJ0U2VydmljZT8uYWN0aXZlQWxlcnRzJiZ0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNsb3NlKGEpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3'@;
put 'KGF8fGMpKHN0KFFOKSxzdChGYSksc3QoZVQsOCksc3QoUnMpLHN0KGNzKSxzdCgkaSkpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnQiXV0saW5wdXRzOntpc1NtYWxsOltRbi5Ob25lLCJjbHJBbGVydFNpemVTbWFsbCIsImlzU21hbGwiXSxjbG9zYWJs'@;
put 'ZTpbUW4uTm9uZSwiY2xyQWxlcnRDbG9zYWJsZSIsImNsb3NhYmxlIl0saXNBcHBMZXZlbDpbUW4uTm9uZSwiY2xyQWxlcnRBcHBMZXZlbCIsImlzQXBwTGV2ZWwiXSxjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbDoiY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwiLGlzTGlnaHR3ZWlnaHQ6W1FuLk5v'@;
put 'bmUsImNsckFsZXJ0TGlnaHR3ZWlnaHQiLCJpc0xpZ2h0d2VpZ2h0Il0sYWxlcnRUeXBlOltRbi5Ob25lLCJjbHJBbGVydFR5cGUiLCJhbGVydFR5cGUiXSxhbGVydEljb25TaGFwZTpbUW4uTm9uZSwiY2xyQWxlcnRJY29uIiwiYWxlcnRJY29uU2hhcGUiXSxjbG9zZWQ6W1FuLk5vbmUsImNs'@;
put 'ckFsZXJ0Q2xvc2VkIiwiY2xvc2VkIl19LG91dHB1dHM6e19jbG9zZWRDaGFuZ2VkOiJjbHJBbGVydENsb3NlZENoYW5nZSJ9LGZlYXR1cmVzOltHaShbUU5dKV0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWyJjbGFzcyIsImFsZXJ0IiwzLCJuZ0NsYXNz'@;
put 'IiwiYWxlcnQtc20iLCJhbGVydC1saWdodHdlaWdodCIsImFsZXJ0LWFwcC1sZXZlbCIsNCwibmdJZiJdLFsxLCJhbGVydCIsMywibmdDbGFzcyJdLFsxLCJhbGVydC1pdGVtcyJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwi'@;
put 'YnV0dG9uIiwxLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxidCgwLE9rZSw0LDgsImRpdiIsMCkpLDImYSYmUGUoIm5nSWYiLCFkLl9jbG9zZWQpfSxkZXBlbmRlbmNpZXM6W1VjLHFpLEtzXSxl'@;
put 'bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxncmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmljb25TZXJ2aWNlPWF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFFOKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3Jz'@;
put 'OltbImNsci1hbGVydC1pdGVtIl1dLGhvc3RBdHRyczpbMSwiYWxlcnQtaXRlbSJdLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbImNsYXNzIiwiYWxlcnQtc3Bpbm5lciIsImNscklubGluZSIsIiIsNCwibmdJ'@;
put 'ZiJdLFsiY2xhc3MiLCJhbGVydC1pY29uIiwicm9sZSIsImltZyIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwiIiwxLCJhbGVydC1zcGlubmVyIl0sWyJyb2xlIiwiaW1nIiwxLCJhbGVydC1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxnZSgwLCJkaXYiLDApLGJ0'@;
put 'KDEsUGtlLDEsMCwiY2xyLXNwaW5uZXIiLDEpKDIsRmtlLDEsMiwiY2RzLWljb24iLDIpLGJlKCksT3IoMykpLDImYSYmKHdlKCksUGUoIm5nSWYiLCJsb2FkaW5nIj09PWQuaWNvblNlcnZpY2UuYWxlcnRJY29uU2hhcGUpLHdlKCksUGUoIm5nSWYiLCJsb2FkaW5nIiE9PWQuaWNvblNlcnZp'@;
put 'Y2UuYWxlcnRJY29uU2hhcGUpKX0sZGVwZW5kZW5jaWVzOltxaSxLcyxuaF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksV2I9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0'@;
put 'b3JzOltbIiIsOCwiYWxlcnQtdGV4dCJdXX0pLGN9KSgpLF9yZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlPW5ldyBJcighMSksdGhpcy5jdXJyZW50QWxl'@;
put 'cnRJbmRleENoYW5nZT1uZXcgSXJ9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgY3VycmVudEFsZXJ0SW5k'@;
put 'ZXgoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50fXNldCBjdXJyZW50QWxlcnRJbmRleChhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YX1nZXQgcHJldmlvdXNBbGVydEFyaWFMYWJlbCgpe2NvbnN0IGE9dGhpcy5jdXJyZW50QWxlcnRJbmRleCsxO3Jl'@;
put 'dHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuYWxlcnRQcmV2aW91c0FsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOigxPT09YT90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50OmEtMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRT'@;
put 'ZXJ2aWNlLmNvdW50LnRvU3RyaW5nKCl9KX1nZXQgbmV4dEFsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydE5leHRBbGVydEFyaWFMYWJlbCx7'@;
put 'Q1VSUkVOVDooYT09PXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ/MTphKzEpLnRvU3RyaW5nKCksQ09VTlQ6dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudC50b1N0cmluZygpfSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlQ2hhbmdlcz10aGlzLm11bHRpQWxlcnRT'@;
put 'ZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKGE9Pnt0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlLmVtaXQoYSksdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2UuZW1pdCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmFjdGl2ZUFsZXJ0c1thXSl9KX1uZ09uRGVzdHJveSgpe3RoaXMubXVsdGlBbGVy'@;
put 'dFNlcnZpY2VDaGFuZ2VzLnVuc3Vic2NyaWJlKCl9cGFnZVVwKCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5uZXh0KCl9cGFnZURvd24oKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLnByZXZpb3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0'@;
put 'KGVUKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWxlcnRzLXBhZ2VyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiYWxlcnRzLXBhZ2VyIiwhMCl9LGlucHV0czp7Y3VycmVudEFsZXJ0OltRbi5Ob25l'@;
put 'LCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXSxjdXJyZW50QWxlcnRJbmRleDpbUW4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLCJjdXJyZW50QWxlcnRJbmRleCJdfSxvdXRwdXRzOntjdXJyZW50QWxlcnRDaGFuZ2U6ImNsckN1cnJlbnRBbGVydENoYW5nZSIsY3VycmVu'@;
put 'dEFsZXJ0SW5kZXhDaGFuZ2U6ImNsckN1cnJlbnRBbGVydEluZGV4Q2hhbmdlIn0sZGVjbHM6OSx2YXJzOjQsY29uc3RzOltbMSwiYWxlcnRzLXBhZ2VyLWNvbnRyb2wiXSxbMSwiYWxlcnRzLXBhZ2UtZG93biJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYWxlcnRzLXBhZ2VyLWJ1dHRvbiIsMywi'@;
put 'Y2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWzEsImFsZXJ0cy1wYWdlci10ZXh0Il0sWzEsImFsZXJ0cy1wYWdlLXVwIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihnZSgwLCJk'@;
put 'aXYiLDApKDEsImRpdiIsMSkoMiwiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZURvd24oKX0pLEp0KDMsImNkcy1pY29uIiwzKSxiZSgpKCksZ2UoNCwiZGl2Iiw0KSx6ZSg1KSxiZSgpLGdlKDYsImRpdiIsNSkoNywiYnV0dG9uIiwyKSxIdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7cmV0dXJuIGQucGFnZVVwKCl9KSxKdCg4LCJjZHMtaWNvbiIsNiksYmUoKSgpKCkpLDImYSYmKHdlKDIpLGhyKCJhcmlhLWxhYmVsIixkLnByZXZpb3VzQWxlcnRBcmlhTGFiZWwpLHdlKDMpLHQwKCIiLGQubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudCsxLCIgLyAiLGQu'@;
put 'bXVsdGlBbGVydFNlcnZpY2UuY291bnQsIiIpLHdlKDIpLGhyKCJhcmlhLWxhYmVsIixkLm5leHRBbGVydEFyaWFMYWJlbCkpfSxkZXBlbmRlbmNpZXM6W0tzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx2cmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm11bHRpQWxlcnRT'@;
put 'ZXJ2aWNlPWEsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IElyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBJcighMSksdGhpcy5zdWJzY3JpcHRpb25zPVtdfXNldCBhbGxBbGVydHMoYSl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5tYW5hZ2UoYSl9c2V0IF9pbnB1'@;
put 'dEN1cnJlbnRJbmRleChhKXtOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEp'@;
put 'e3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudD1hfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnR9c2V0IGN1cnJlbnRBbGVydChhKXthJiYodGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ9YSl9Z2V0IGFs'@;
put 'ZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cy5maWx0ZXIoYT0+ITE9PT1hLmhpZGRlbil9Z2V0IGN1cnJlbnRBbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQ/dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQuYWxlcnRUeXBl'@;
put 'OiIifW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UubmV4dChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5uZXh0KHRoaXMu'@;
put 'bXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5tdWx0aUFsZXJ0U2VydmljZS5kZXN0cm95KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1'@;
put 'cm4gbmV3KGF8fGMpKHN0KGVUKSl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCxaYiw0KSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLmFsbEFsZXJ0cz1mKX19LGhv'@;
put 'c3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmYnIoImFsZXJ0cyIsITApKCJhbGVydC1kYW5nZXIiLCJkYW5nZXIiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1pbmZvIiwiaW5mbyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LXN1Y2Nlc3MiLCJzdWNj'@;
put 'ZXNzIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtd2FybmluZyIsIndhcm5pbmciPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC1uZXV0cmFsIiwibmV1dHJhbCI9PWQuY3VycmVudEFsZXJ0VHlwZSl9LGlucHV0czp7X2lucHV0Q3VycmVudEluZGV4OltRbi5Ob25lLCJjbHJDdXJy'@;
put 'ZW50QWxlcnRJbmRleCIsIl9pbnB1dEN1cnJlbnRJbmRleCJdLGN1cnJlbnRBbGVydDpbUW4uTm9uZSwiY2xyQ3VycmVudEFsZXJ0IiwiY3VycmVudEFsZXJ0Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENo'@;
put 'YW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxmZWF0dXJlczpbR2koW2VUXSldLG5nQ29udGVudFNlbGVjdG9yczpOa2UsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbMSwiYWxlcnRzLXdyYXBwZXIiXSxbMywiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLDQsIm5nSWYiXSxbMywiY2xy'@;
put 'Q3VycmVudEFsZXJ0SW5kZXgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaShIa2UpLGdlKDAsImRpdiIsMCksYnQoMSxWa2UsMSwxLCJjbHItYWxlcnRzLXBhZ2VyIiwxKSxPcigyKSxiZSgpKSwyJmEmJih3ZSgpLFBlKCJuZ0lmIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50'@;
put 'PjEpKX0sZGVwZW5kZW5jaWVzOltxaSxfcmVdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pLGN9KSgpLHlyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7cXMuYWRkSWNvbnMoVEgsSHllLE55ZSxWeWUsRGVlLGp5ZSxoYil9fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhLEpOLFA3XX0pLGN9KSgpLHhEZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l'@;
put 'dyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlt5cmVdfSksY30pKCksa0RlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSks'@;
put 'Yy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhXX0pLGN9KSgpLExEZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxiYSxK'@;
put 'Tl19KSxjfSkoKSxNcmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJlVv'@;
put 'KHRsLDUpLDImYSl7bGV0IGg7TWkoaD1DaSgpKSYmKGQudGVtcGxhdGU9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLGJ0KDAsWWtlLDEsMCwibmctdGVtcGxhdGUiKSl9LGVuY2Fwc3VsYXRp'@;
put 'b246Mn0pLGN9KSgpLElEZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttb119KSxjfSkoKSxHND0oKCk9PntjbGFzcyBjIGV4dGVu'@;
put 'ZHMgeDd7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPWlhKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdGFicyJdXSxmZWF0dXJlczpbc29dfSksY30pKCksQWc9KCgp'@;
put 'PT57Y2xhc3MgYyBleHRlbmRzIGs3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyVGFiTGluayBhbmQgY2xyLXRhYi1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXRhYnMiKTtzdXBlcihhLGQpLHRoaXMuaWZBY3RpdmU9'@;
put 'Zix0aGlzLmlkPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLmlmQWN0aXZlLmN1cnJlbnQ9PT10aGlzLmlkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChGYSksc3QoRzQsOCksc3QoRDcpLHN0KG1nKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBl'@;
put 'OmMsc2VsZWN0b3JzOltbIiIsImNsclRhYkxpbmsiLCIiXSxbImNsci10YWItY29udGVudCJdXSxmZWF0dXJlczpbc29dfSksY30pKCk7dmFyIExnPWZ1bmN0aW9uKGMpe3JldHVybiBjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuVkVSVElDQUw9InZlcnRpY2FsIixjfShMZ3x8e30pO2xl'@;
put 'dCBHYj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5sYXlvdXQ9TGcuSE9SSVpPTlRBTCx0aGlzLl9jaGlsZHJlbj1bXX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fY2hpbGRyZW59Z2V0IGFjdGl2ZVRhYigpe3JldHVybiB0aGlzLmNoaWxkcmVuLmZpbmQoYT0+YS5hY3Rp'@;
put 'dmUpfWdldCBvdmVyZmxvd1RhYnMoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT1MZy5WRVJUSUNBTD9bXTp0aGlzLmNoaWxkcmVuLmZpbHRlcihhPT4hMD09PWEudGFiTGluay5pbk92ZXJmbG93KX1yZWdpc3RlcihhKXt0aGlzLl9jaGlsZHJlbi5wdXNoKGEpfXVucmVnaXN0ZXIoYSl7Y29uc3Qg'@;
put 'ZD10aGlzLmNoaWxkcmVuLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5jaGlsZHJlbi5zcGxpY2UoZCwxKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUkRl'@;
put 'PTAsJDQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5pZkFjdGl2ZVNlcnZpY2U9YSx0aGlzLmlkPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFiQ29udGVudElkfHwodGhpcy50YWJDb250ZW50SWQ9ImNsci10YWItY29udGVudC0iK1JEZSsrKX1nZXQgYWN0aXZl'@;
put 'KCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfWdldCBhcmlhTGFiZWxsZWRCeSgpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLmNoaWxkcmVuLmZpbmQoYT0+YS50YWJDb250ZW50PT09dGhpcyk/LnRhYkxpbms/LnRhYkxpbmtJZH1zZXQgdGVtcGxhdGVS'@;
put 'ZWYoYSl7dGhpcy52aWV3UmVmPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KGEpfW5nT25EZXN0cm95KCl7Y29uc3QgYT10aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLmluZGV4T2YodGhpcy52aWV3UmVm'@;
put 'KTthPi0xJiZ0aGlzLnRhYnNTZXJ2aWNlLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyLnJlbW92ZShhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QobWcpLHN0KEQ3KSxzdChHYikpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpb'@;
put 'WyJjbHItdGFiLWNvbnRlbnQiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZVbyh6a2UsNyksMiZhKXtsZXQgaDtNaShoPUNpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LGlucHV0czp7dGFiQ29udGVudElkOltRbi5Ob25lLCJpZCIsInRhYkNvbnRlbnRJZCJdfSxu'@;
put 'Z0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInRhYkNvbnRlbnRQcm9qZWN0ZWRSZWYiLCIiXSxbInJvbGUiLCJ0YWJwYW5lbCIsMSwidGFiLWNvbnRlbnQiLDMsImlkIiwiaGlkZGVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxidCgw'@;
put 'LFVrZSwyLDYsIm5nLXRlbXBsYXRlIixudWxsLDAsb3UpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksT0RlPTA7Y29uc3QgZVY9bmV3IFlyKCJUQUJTX0lEIiksRkRlPXtwcm92aWRlOmVWLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gUERlKCl7cmV0dXJuImNsci10YWJzLSIrT0RlKyt9fTtsZXQg'@;
put 'SERlPTAscTQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZKXt0aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLmVsPWgsdGhpcy5jZnI9Zix0aGlzLnZpZXdDb250YWluZXJSZWY9dix0aGlzLnRhYnNTZXJ2aWNlPVQsdGhpcy50YWJzSWQ9WSx0aGlz'@;
put 'LnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmstIitIRGUrKyk7Y29uc3QgcmU9dGhpcy5jZnIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTXJlKTt0aGlzLnRlbXBsYXRlUmVmQ29udGFpbmVyPXRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQocmUs'@;
put 'dm9pZCAwLHZvaWQgMCxbW3RoaXMuZWwubmF0aXZlRWxlbWVudF1dKS5pbnN0YW5jZX1nZXQgaW5PdmVyZmxvdygpe3JldHVybiB0aGlzLl9pbk92ZXJmbG93JiZ0aGlzLnRhYnNTZXJ2aWNlLmxheW91dCE9PUxnLlZFUlRJQ0FMfXNldCBpbk92ZXJmbG93KGEpe3RoaXMuX2luT3ZlcmZsb3c9'@;
put 'YX1nZXQgYWRkTGlua0NsYXNzZXMoKXtyZXR1cm4hdGhpcy5pbk92ZXJmbG93fWdldCBhcmlhQ29udHJvbHMoKXtyZXR1cm4gdGhpcy50YWJzU2VydmljZS5jaGlsZHJlbi5maW5kKGE9PmEudGFiTGluaz09PXRoaXMpPy50YWJDb250ZW50Py50YWJDb250ZW50SWR9Z2V0IGFjdGl2ZSgpe3Jl'@;
put 'dHVybiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PT09dGhpcy5pZH1nZXQgdGFiaW5kZXgoKXtyZXR1cm4gdGhpcy5hY3RpdmU/MDotMX1hY3RpdmF0ZSgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9dGhpcy5pZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl'@;
put 'dHVybiBuZXcoYXx8Yykoc3QobWcpLHN0KEQ3KSxzdCgkaSksc3QoZzQpLHN0KHBzKSxzdChHYiksc3QoZVYpKX0sYy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdXSxob3N0QXR0cnM6WyJyb2xlIiwidGFiIiwidHlwZSIsImJ1dHRvbiJdLGhv'@;
put 'c3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFjdGl2YXRlKCl9KSwyJmEmJihzZigiaWQiLGQudGFiTGlua0lkKSxocigiYXJpYS1jb250cm9scyIsZC5hcmlhQ29udHJvbHMpKCJhcmlhLXNlbGVjdGVkIixk'@;
put 'LmFjdGl2ZSkoInRhYmluZGV4IixkLnRhYmluZGV4KSxicigiYnRuIiwhMCkoImJ0bi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgibmF2LWxpbmsiLGQuYWRkTGlua0NsYXNzZXMpKCJhY3RpdmUiLGQuYWN0aXZlKSl9LGlucHV0czp7dGFiTGlua0lkOltRbi5Ob25lLCJpZCIsInRhYkxpbmtJ'@;
put 'ZCJdLGluT3ZlcmZsb3c6W1FuLk5vbmUsImNsclRhYkxpbmtJbk92ZXJmbG93IiwiaW5PdmVyZmxvdyJdfX0pLGN9KSgpLEs0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGFic1NlcnZpY2U9aCxoLnJlZ2lz'@;
put 'dGVyKHRoaXMpfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9bmdPbkRlc3Ryb3koKXt0aGlzLnRhYnNTZXJ2aWNlLnVucmVnaXN0ZXIodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp'@;
put 'KHN0KG1nKSxzdChENyksc3QoR2IpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobnMoaCxxNCw3KSxucyhoLCQ0LDcpKSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLnRhYkxp'@;
put 'bms9Zi5maXJzdCksTWkoZj1DaSgpKSYmKGQudGFiQ29udGVudD1mLmZpcnN0KX19LGZlYXR1cmVzOltHaShbJEVlXSldLG5nQ29udGVudFNlbGVjdG9yczpabyxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksT3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9'@;
put 'KSxjfSkoKSx0Vj0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1'@;
put 'bmN0aW9uKGEsZCl7MiZhJiZicigiZHJvcGRvd24tbWVudSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihqaSgpLE9yKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWc9KCgpPT57Y2xhc3MgY3tjb25z'@;
put 'dHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYsdGhpcy5jb21tb25TdHJpbmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMu'@;
put 'c3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoYSl7T2JqZWN0LmtleXMoTGcpLm1hcChkPT5MZ1tkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2Uu'@;
put 'bGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4t'@;
put 'MX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVybiB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNW'@;
put 'ZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PUxnLlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVFbGVtZW50LHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBv'@;
put 'dmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGEpe3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29u'@;
put 'dGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3Rp'@;
put 'dmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9ufW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Bl'@;
put 'bj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0FjdGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3VycmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0'@;
put 'aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xlT3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0'@;
put 'aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZsb3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNP'@;
put 'dXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRhYkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0'@;
put 'aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7YS50'@;
put 'YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1saXN0ZW5Gb3JUYWJMaW5rQ2hh'@;
put 'bmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKFo1KHRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+e3RoaXMuX3RhYkxpbmtEaXJlY3RpdmVzPXRoaXMudGFicy5tYXAoYT0+YS50YWJMaW5rKSx0aGlzLnRhYkxpbmtFbGVtZW50cz10aGlzLl90'@;
put 'YWJMaW5rRGlyZWN0aXZlcy5tYXAoYT0+YS5lbC5uYXRpdmVFbGVtZW50KX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChtZyksc3QoRGwpLHN0KEdiKSxzdChlViksc3QoUnMpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbnMoaCxLNCw0KSwyJmEpe2xldCBmO01pKGY9Q2koKSkmJihkLnRhYnM9Zil9fSx2aWV3UXVlcnk6ZnVuY3Rpb24oYSxkKXtpZigxJmEmJihVbyhGNyw3KSxVbyh0Viw1LCRpKSxVbyhaa2UsNyxw'@;
put 'cykpLDImYSl7bGV0IGg7TWkoaD1DaSgpKSYmKGQua2V5Rm9jdXM9aC5maXJzdCksTWkoaD1DaSgpKSYmKGQudGFiT3ZlcmZsb3dFbD1oLmZpcnN0KSxNaShoPUNpKCkpJiYoZC50YWJDb250ZW50Vmlld0NvbnRhaW5lcj1oLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0'@;
put 'aW9uKGEsZCl7MiZhJiZicigidGFicy12ZXJ0aWNhbCIsZC5pc1ZlcnRpY2FsKX0saW5wdXRzOntsYXlvdXQ6W1FuLk5vbmUsImNsckxheW91dCIsImxheW91dCJdfSxmZWF0dXJlczpbR2koW21nLEdiLEZEZV0pLFh1KFtxM10pXSxkZWNsczo1LHZhcnM6Myxjb25zdHM6W1sidGFiQ29udGVu'@;
put 'dFZpZXdDb250YWluZXIiLCIiXSxbInRhYk92ZXJmbG93VHJpZ2dlciIsIiJdLFsicm9sZSIsInRhYmxpc3QiLCJjbHJEaXJlY3Rpb24iLCJib3RoIiwxLCJuYXYiLDMsImNsckZvY3VzQ2hhbmdlIiwiZm9jdXNvdXQiLCJjbHJLZXlGb2N1cyJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwi'@;
put 'bmdJZiJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwibmF2LWl0ZW0iXSxbMywibmdUZW1wbGF0ZU91dGxldCJdLFsicm9sZSIsInByZXNlbnRhdGlvbiIsMSwidGFicy1vdmVyZmxvdyIsImJvdHRvbS1yaWdodCJdLFsicm9sZSIsImFwcGxpY2F0aW9uIiwxLCJuYXYtaXRlbSJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiYnRuIiwiYnRuLWxpbmsiLCJuYXYtbGluayIsImRyb3Bkb3duLXRvZ2dsZSIsMywibW91c2Vkb3duIiwiZm9jdXMiLCJjbGljayJdLFsic2hhcGUiLCJlbGxpcHNpcy1ob3Jpem9udGFsIl0sWzMsImtleWRvd24uZXNjYXBlIiwi'@;
put 'Y2xpY2siLCJmb2N1c291dCIsNCwibmdJZiJdLFszLCJrZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiXSxbMywibmdUZW1wbGF0ZU91dGxldCIsNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1IbigpO2dlKDAsInVsIiwyKSxIdCgiY2xy'@;
put 'Rm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBTdChoKSx4dChkLnRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbih2KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHYpe3JldHVybiBTdChoKSx4dChkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3RpdmUodikpfSksYnQoMSxHa2UsMiwxLCJu'@;
put 'Zy1jb250YWluZXIiLDMpKDIsWGtlLDcsMTEsIm5nLWNvbnRhaW5lciIsNCksYmUoKSxObCgzLG51bGwsMCl9MiZhJiYoUGUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksd2UoKSxQZSgibmdGb3JPZiIsZC50YWJMaW5rRGlyZWN0aXZlcyksd2UoKSxQZSgibmdJZiIsZC50YWJz'@;
put 'U2VydmljZS5vdmVyZmxvd1RhYnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxLMSxLcyxGNyx0Vl0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksTkRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhrZWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxKZCxiYSxJRGUsYk4sSmRdfSksY30pKCksblY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2'@;
put 'R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFj'@;
put 'fSksY30pKCksclY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigpe3RoaXMuX2ljb25zLS19fXJldHVybiBjLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGlWPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25Db2xsYXBzZWQ9bmV3IG5uLHRoaXMuX2NvbGxhcHNl'@;
put 'ZENoYW5nZWQ9bmV3IG5uLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29sbGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9j'@;
put 'b2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhpcy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdl'@;
put 'dCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVw'@;
put 'ZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVw'@;
put 'cm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxDcmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLl9uYXZTZXJ2aWNlPWEsdGhpcy5fbmF2SWNvblNlcnZpY2U9ZCx0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2U9aCx0aGlz'@;
put 'LmNvbW1vblN0cmluZ3M9Zix0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkPW5ldyBJcighMCksdGhpcy5fc3ViPXRoaXMuX25hdlNlcnZpY2UuY29sbGFwc2VkQ2hhbmdlZC5zdWJzY3JpYmUodj0+e3RoaXMuX2NvbGxhcHNlZENoYW5nZWQuZW1pdCh2KX0pfWdldCBjb2xsYXBzaWJsZSgpe3JldHVy'@;
put 'biB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlfXNldCBjb2xsYXBzaWJsZShhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNpYmxlPWF9Z2V0IGNvbGxhcHNlZCgpe3JldHVybiB0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZH1zZXQgY29sbGFwc2VkKGEpe3RoaXMuX25hdlNlcnZpY2Uu'@;
put 'Y29sbGFwc2VkPWF9Z2V0IGhhc05hdkdyb3Vwcygpe3JldHVybiB0aGlzLl9uYXZHcm91cFJlZ2lzdHJhdGlvblNlcnZpY2UubmF2R3JvdXBDb3VudD4wfWdldCBoYXNJY29ucygpe3JldHVybiB0aGlzLl9uYXZJY29uU2VydmljZS5oYXNJY29uc31nZXQgYXJpYUV4cGFuZGVkKCl7cmV0dXJu'@;
put 'IHRoaXMuY29sbGFwc2libGU/dGhpcy5jb2xsYXBzZWQ/ImZhbHNlIjoidHJ1ZSI6bnVsbH1uZ09uRGVzdHJveSgpe3RoaXMuX3N1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZUJ5QnV0dG9uKCl7dGhpcy5jb2xsYXBzZWQ9IXRoaXMuY29sbGFwc2VkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChpViksc3QoclYpLHN0KG5WKSxzdChScykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdmVydGljYWwtbmF2Il1dLGhvc3RBdHRyczpbMSwiY2xyLXZlcnRpY2FsLW5hdiJdLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdz'@;
put 'OmZ1bmN0aW9uKGEsZCl7MiZhJiZicigiaXMtY29sbGFwc2VkIixkLmNvbGxhcHNlZCkoImhhcy1uYXYtZ3JvdXBzIixkLmhhc05hdkdyb3VwcykoImhhcy1pY29ucyIsZC5oYXNJY29ucyl9LGlucHV0czp7Y29sbGFwc2libGU6W1FuLk5vbmUsImNsclZlcnRpY2FsTmF2Q29sbGFwc2libGUi'@;
put 'LCJjb2xsYXBzaWJsZSJdLGNvbGxhcHNlZDpbUW4uTm9uZSwiY2xyVmVydGljYWxOYXZDb2xsYXBzZWQiLCJjb2xsYXBzZWQiXX0sb3V0cHV0czp7X2NvbGxhcHNlZENoYW5nZWQ6ImNsclZlcnRpY2FsTmF2Q29sbGFwc2VkQ2hhbmdlIn0sZmVhdHVyZXM6W0dpKFtpVixyVixuVl0pXSxuZ0Nv'@;
put 'bnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsIm5hdi10cmlnZ2VyIiwzLCJvbi1jb2xsYXBzZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm5hdi1jb250ZW50Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtYnRu'@;
put 'IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbInR5cGUiLCJidXR0b24i'@;
put 'LCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKCksYnQoMCxKa2UsMiw1LCJidXR0b24iLDApLGdlKDEsImRpdiIsMSksT3IoMiksYnQoMyxRa2UsMSwxLCJidXR0b24iLDIp'@;
put 'LGJlKCkpLDImYSYmKFBlKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSx3ZSgzKSxQZSgibmdJZiIsZC5jb2xsYXBzaWJsZSYmZC5jb2xsYXBzZWQpKX0sZGVwZW5kZW5jaWVzOltxaSxLc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksb1Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMu'@;
put 'X2V4cGFuZENoYW5nZT1uZXcgbm59Z2V0IGV4cGFuZENoYW5nZSgpe3JldHVybiB0aGlzLl9leHBhbmRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9ZXhwYW5kKCl7dGhpcy5fZXhwYW5kQ2hhbmdlLm5leHQoITApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxj'@;
put 'KX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxTcmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5kZXN0cm95JD1uZXcgbm4saCYmUWgoYS5uYXRpdmVFbGVtZW50LCJjbGljayIpLnBpcGUoWGgodGhpcy5kZXN0cm95'@;
put 'JCkpLnN1YnNjcmliZSgoKT0+e2guZXhwYW5kKCksZC5tYXJrRm9yQ2hlY2soKX0pfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KCRpKSxzdChGYSksc3Qob1YsOCkpfSxjLlx1MDI3'@;
put 'NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiXV0saG9zdEF0dHJzOlsxLCJuYXYtbGluayJdLGF0dHJzOm5FZSxuZ0NvbnRlbnRTZWxlY3RvcnM6aUVlLGRlY2xzOjMsdmFyczowLGNvbnN0czpbWzEsIm5hdi10ZXh0Il1dLHRlbXBsYXRlOmZ1'@;
put 'bmN0aW9uKGEsZCl7MSZhJiYoamkockVlKSxPcigwKSxnZSgxLCJzcGFuIiwwKSxPcigyLDEpLGJlKCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxZRGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3FzLmFkZEljb25zKGc3LFRlZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhLEpkLE9FLEpkLGJhLE9FXX0pLGN9KSgpLHpEZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh'@;
put 'fHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOltrRGUsTERlLE5EZSxZRGVdfSksY30pKCkseHJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YX1zdG9wU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9k'@;
put 'eS5jbGFzc0xpc3QuYWRkKCJuby1zY3JvbGxpbmciKX1yZXN1bWVTY3JvbGxpbmcoKXt0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucygibm8tc2Nyb2xsaW5nIikmJnRoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibm8tc2Nyb2xsaW5nIil9fXJldHVy'@;
put 'biBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKCRzKSl9LGMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQnU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fc2Nyb2xsaW5nU2VydmljZT1h'@;
put 'LHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMubW9kYWxTdGFja1NlcnZpY2U9aCx0aGlzLm1vZGFsSWQ9aHUoKSx0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2VkPW5ldyBJcighMSksdGhpcy5jbG9zYWJsZT0hMCx0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3Ry'@;
put 'aW5ncy5rZXlzLmNsb3NlLHRoaXMuc3RhdGljQmFja2Ryb3A9ITAsdGhpcy5za2lwQW5pbWF0aW9uPSJmYWxzZSIsdGhpcy5zdG9wQ2xvc2U9ITEsdGhpcy5hbHRDbG9zZT1uZXcgSXIoITEpLHRoaXMubGFiZWxsZWRCeT10aGlzLm1vZGFsSWR9bmdPbkNoYW5nZXMoYSl7YSYmT2JqZWN0LnBy'@;
put 'b3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9vcGVuIikmJihhLl9vcGVuLmN1cnJlbnRWYWx1ZT8odGhpcy5fc2Nyb2xsaW5nU2VydmljZS5zdG9wU2Nyb2xsaW5nKCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSk6dGhpcy5fc2Nyb2xsaW5nU2Vy'@;
put 'dmljZS5yZXN1bWVTY3JvbGxpbmcoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpfW9wZW4oKXt0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMCx0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCEwKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRy'@;
put 'YWNrTW9kYWxPcGVuKHRoaXMpKX1jbG9zZSgpe3RoaXMuc3RvcENsb3NlP3RoaXMuYWx0Q2xvc2UuZW1pdCghMSk6IXRoaXMuY2xvc2FibGV8fCF0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMSl9ZmFkZURvbmUoYSl7InZvaWQiPT09YS50b1N0YXRlJiYodGhpcy5fb3BlbkNoYW5nZWQuZW1p'@;
put 'dCghMSksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsQ2xvc2UodGhpcykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdCh4cmUpLHN0KFJzKSxzdChHbmUpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy'@;
put 'LW1vZGFsIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZicigib3BlbiIsZC5fb3Blbil9LGlucHV0czp7X29wZW46W1FuLk5vbmUsImNsck1vZGFsT3BlbiIsIl9vcGVuIl0sY2xvc2FibGU6W1FuLk5vbmUsImNsck1vZGFsQ2xvc2FibGUiLCJjbG9zYWJs'@;
put 'ZSJdLGNsb3NlQnV0dG9uQXJpYUxhYmVsOltRbi5Ob25lLCJjbHJNb2RhbENsb3NlQnV0dG9uQXJpYUxhYmVsIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiXSxzaXplOltRbi5Ob25lLCJjbHJNb2RhbFNpemUiLCJzaXplIl0sc3RhdGljQmFja2Ryb3A6W1FuLk5vbmUsImNsck1vZGFsU3RhdGlj'@;
put 'QmFja2Ryb3AiLCJzdGF0aWNCYWNrZHJvcCJdLHNraXBBbmltYXRpb246W1FuLk5vbmUsImNsck1vZGFsU2tpcEFuaW1hdGlvbiIsInNraXBBbmltYXRpb24iXSxzdG9wQ2xvc2U6W1FuLk5vbmUsImNsck1vZGFsUHJldmVudENsb3NlIiwic3RvcENsb3NlIl0sbGFiZWxsZWRCeTpbUW4uTm9u'@;
put 'ZSwiY2xyTW9kYWxMYWJlbGxlZEJ5SWQiLCJsYWJlbGxlZEJ5Il19LG91dHB1dHM6e19vcGVuQ2hhbmdlZDoiY2xyTW9kYWxPcGVuQ2hhbmdlIixhbHRDbG9zZToiY2xyTW9kYWxBbHRlcm5hdGVDbG9zZSJ9LGZlYXR1cmVzOltHaShbXSxbeHJlXSksQmFdLG5nQ29udGVudFNlbGVjdG9yczpz'@;
put 'RWUsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMSwibW9kYWwiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFsb2ciLCJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwzLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSJd'@;
put 'LFsxLCJjbHItc3Itb25seSJdLFsxLCJtb2RhbC1jb250ZW50LXdyYXBwZXIiXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXItLWFjY2Vzc2libGUiXSxbImNka0ZvY3VzSW5pdGlhbCIsIiIsInRhYmluZGV4IiwiLTEiLDEsIm1vZGFsLXRpdGxlLXdyYXBwZXIiLDMsImlk'@;
put 'Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibW9kYWwtYm9keS13cmFwcGVyIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWJhY2tkcm9wIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY2xvc2UiLDMsImNs'@;
put 'aWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGppKG9FZSksYnQoMCxsRWUsMTcsMTUsImRpdiIsMCkpLDImYSYmUGUoIm5nSWYiLGQuX29wZW4pfSxkZXBlbmRlbmNpZXM6W3FpLEg3LEtzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09N'@;
put 'UCVde2Rpc3BsYXk6bm9uZX0ub3Blbltfbmdob3N0LSVDT01QJV17ZGlzcGxheTppbmxpbmV9Il0sZGF0YTp7YW5pbWF0aW9uOltpZCgiZmFkZURvd24iLFtHYygiKiA9PiBmYWxzZSIsW0lzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSksbjAoIjAuMnMgZWFz'@;
put 'ZS1pbi1vdXQiKV0pLEdjKCJmYWxzZSA9PiAqIixbbjAoIjAuMnMgZWFzZS1pbi1vdXQiLElzKHtvcGFjaXR5OjAsdHJhbnNmb3JtOiJ0cmFuc2xhdGUoMCwgLTI1JSkifSkpXSldKSxpZCgiZmFkZSIsW0djKCJ2b2lkID0+ICoiLFtJcyh7b3BhY2l0eTowfSksbjAoIjAuMnMgZWFzZS1pbi1v'@;
put 'dXQiLElzKHtvcGFjaXR5Oi44NX0pKV0pLEdjKCIqID0+IHZvaWQiLFtuMCgiMC4ycyBlYXNlLWluLW91dCIsSXMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLFl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhvc3Q9ZCx0aGlzLnRh'@;
put 'YmluZGV4PSIwIix0aGlzLnVubGlzdGVuZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVu'@;
put 'dCksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJtb3VzZXVwIiwoKT0+e3RoaXMuYWRkT3JSZW1vdmVUYWJJbmRleCgpfSksdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsIm1vdXNl'@;
put 'ZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVycy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgo'@;
put 'KXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFiaW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRk'@;
put 'T3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNsaWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rp'@;
put 'b24oYSl7cmV0dXJuIG5ldyhhfHxjKShzdChjcyksc3QoJGkpLHN0KFBvKSl9LGMuXHUwMjc1ZGlyPXZyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLGtyZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7cXMuYWRkSWNvbnMoaGIpfX1yZXR1cm4g'@;
put 'Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxDTixiYSxiYV19KSxjfSkoKTtjb25zdCBVRGU9eyJ0b3AtbGVmdCI6e2FuY2hvclBvaW50Om9pLlRPUF9DRU5URVIscG9w'@;
put 'b3ZlclBvaW50Om9pLkJPVFRPTV9SSUdIVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtbWlkZGxlIjp7YW5jaG9yUG9pbnQ6b2kuVE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6b2kuQk9UVE9NX0NFTlRFUixvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJ0b3AtcmlnaHQiOnthbmNob3JQb2lu'@;
put 'dDpvaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpvaS5CT1RUT01fTEVGVCxvZmZzZXRZOi0xNixvZmZzZXRYOjB9LCJyaWdodC10b3AiOnthbmNob3JQb2ludDpvaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50Om9pLkxFRlRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQt'@;
put 'bWlkZGxlIjp7YW5jaG9yUG9pbnQ6b2kuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpvaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sInJpZ2h0LWJvdHRvbSI6e2FuY2hvclBvaW50Om9pLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6b2kuTEVGVF9UT1Asb2Zmc2V0WTow'@;
put 'LG9mZnNldFg6MTZ9LCJib3R0b20tcmlnaHQiOnthbmNob3JQb2ludDpvaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpvaS5UT1BfTEVGVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImJvdHRvbS1taWRkbGUiOnthbmNob3JQb2ludDpvaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpv'@;
put 'aS5UT1BfQ0VOVEVSLG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLWxlZnQiOnthbmNob3JQb2ludDpvaS5CT1RUT01fQ0VOVEVSLHBvcG92ZXJQb2ludDpvaS5UT1BfUklHSFQsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJsZWZ0LWJvdHRvbSI6e2FuY2hvclBvaW50Om9pLkxFRlRfQ0VO'@;
put 'VEVSLHBvcG92ZXJQb2ludDpvaS5SSUdIVF9UT1Asb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVmdC1taWRkbGUiOnthbmNob3JQb2ludDpvaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6b2kuUklHSFRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sImxlZnQtdG9wIjp7YW5jaG9y'@;
put 'UG9pbnQ6b2kuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50Om9pLlJJR0hUX0JPVFRPTSxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LGRlZmF1bHQ6e2FuY2hvclBvaW50Om9pLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6b2kuTEVGVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6MTZ9fSxaRGU9'@;
put 'WyJ0b3AtbGVmdCIsInRvcC1taWRkbGUiLCJ0b3AtcmlnaHQiLCJyaWdodC10b3AiLCJyaWdodC1taWRkbGUiLCJyaWdodC1ib3R0b20iLCJib3R0b20tcmlnaHQiLCJib3R0b20tbWlkZGxlIiwiYm90dG9tLWxlZnQiLCJsZWZ0LWJvdHRvbSIsImxlZnQtbWlkZGxlIiwibGVmdC10b3AiXTts'@;
put 'ZXQgRXJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBYTntjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZKXtpZihzdXBlcihhLGQpLHRoaXMuY29tbW9uU3RyaW5ncz1oLHRoaXMuc2lnbnBvc3RJZFNlcnZpY2U9Zix0aGlzLnNpZ25wb3N0Rm9jdXNNYW5hZ2VyPXYsdGhpcy5wbGF0Zm9ybUlkPVQs'@;
put 'dGhpcy5zaWducG9zdENvbnRlbnRJZD1odSgpLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXNpZ25wb3N0LWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItc2lnbnBvc3QiKTt0aGlzLnBvc2l0aW9uPSJyaWdodC1taWRkbGUiLHRoaXMuY2xvc2VPbk91dHNpZGVD'@;
put 'bGljaz0hMCx0aGlzLnNpZ25wb3N0SWRTZXJ2aWNlLnNldElkKHRoaXMuc2lnbnBvc3RDb250ZW50SWQpLHRoaXMuZG9jdW1lbnQ9WX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe3RoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5u'@;
put 'YXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pLHRoaXMuX3Bvc2l0aW9uPWEmJlpEZS5pbmRleE9mKGEpPi0xP2E6InJpZ2h0LW1pZGRsZSIsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5wb3NpdGlvbik7Y29uc3QgZD1VRGVbdGhpcy5wb3NpdGlv'@;
put 'bl07dGhpcy5hbmNob3JQb2ludD1kLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50PWQucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WT1kLm9mZnNldFksdGhpcy5wb3BvdmVyT3B0aW9ucy5vZmZzZXRYPWQub2Zmc2V0WH1jbG9zZSgpe3RoaXMudG9nZ2xlU2Vy'@;
put 'dmljZS5vcGVuPSExfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSxsYSh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGhpcy5kb2N1bWVudC5hY3RpdmVFbGVtZW50KSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci5mb2N1c1RyaWdn'@;
put 'ZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QocGEpLHN0KElFLDgpLHN0KFJzKSxzdChqTiksc3QoVk4pLHN0KEFvKSxzdCgkcykpfSxjLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc2lnbnBvc3QtY29udGVudCJd'@;
put 'XSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKHNmKCJpZCIsZC5zaWducG9zdENvbnRlbnRJZCksYnIoInNpZ25wb3N0LWNvbnRlbnQiLCEwKSl9LGlucHV0czp7cG9zaXRpb246W1FuLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6'@;
put 'W3NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Wm8sZGVjbHM6Nyx2YXJzOjMsY29uc3RzOltbMSwic2lnbnBvc3Qtd3JhcCJdLFsxLCJwb3BvdmVyLXBvaW50ZXIiXSxbMSwic2lnbnBvc3QtY29udGVudC1oZWFkZXIiXSxbInR5cGUiLCJidXR0b24iLDEsInNpZ25wb3N0LWFjdGlvbiIsImNsb3Nl'@;
put 'IiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXSxbInRhYmluZGV4IiwiMCIsMSwic2lnbnBvc3QtY29udGVudC1ib2R5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxnZSgwLCJkaXYiLDApLEp0KDEsImRpdiIsMSksZ2UoMiwiZGl2IiwyKSgzLCJidXR0'@;
put 'b24iLDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jbG9zZSgpfSksSnQoNCwiY2RzLWljb24iLDQpLGJlKCkoKSxnZSg1LCJkaXYiLDUpLE9yKDYpLGJlKCkoKSksMiZhJiYod2UoMyksaHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnNpZ25wb3N0Q2xvc2Up'@;
put 'KCJhcmlhLWNvbnRyb2xzIixkLnNpZ25wb3N0Q29udGVudElkKSx3ZSgpLGhyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuY2xvc2UpKX0sZGVwZW5kZW5jaWVzOltLc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksV0RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJ'@;
put 'Y29ucyhoYixCeWUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxiYSxPRSxKZF19KSxjfSkoKSxzVj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7'@;
put 'dGhpcy5faWQ9bmV3IG5ufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX11cGRhdGVJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rv'@;
put 'cnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxhVj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudG9nZ2xlU2VydmljZT1hfW9uTW91c2VFbnRlclRyaWdnZXIoKXt0aGlzLm1vdXNlT3ZlclRyaWdnZXI9ITAsdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITB9b25Nb3VzZUxlYXZlVHJp'@;
put 'Z2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMSx0aGlzLmhpZGVJZk1vdXNlT3V0KCl9b25Nb3VzZUVudGVyQ29udGVudCgpe3RoaXMubW91c2VPdmVyQ29udGVudD0hMH1vbk1vdXNlTGVhdmVDb250ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSExLHRoaXMuaGlkZUlmTW91c2VP'@;
put 'dXQoKX1oaWRlSWZNb3VzZU91dCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5tb3VzZU92ZXJUcmlnZ2VyJiYhdGhpcy5tb3VzZU92ZXJDb250ZW50JiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'YykoZnIoRGwpKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx0OT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6'@;
put 'W1siY2xyLXRvb2x0aXAiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmJyKCJ0b29sdGlwIiwhMCl9LGZlYXR1cmVzOltHaShbc1YsYVZdKSxYdShbcTNdKV0sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u'@;
put 'KGEsZCl7MSZhJiYoamkoKSxPcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0ICREZT1bImJvdHRvbS1sZWZ0IiwiYm90dG9tLXJpZ2h0IiwidG9wLWxlZnQiLCJ0b3AtcmlnaHQiLCJyaWdodCIsImxlZnQiXSxxRGU9WyJ4cyIsInNtIiwibWQiLCJsZyJdO2xldCBuOT0oKCk9'@;
put 'PntjbGFzcyBjIGV4dGVuZHMgWE57Y29uc3RydWN0b3IoYSxkLGgsZil7aWYoc3VwZXIoYSxkKSx0aGlzLnRvb2x0aXBJZFNlcnZpY2U9aCx0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2U9ZiwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci10b29sdGlwLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNl'@;
put 'ZCBpbnNpZGUgb2YgYSBjbHItdG9vbHRpcCIpO3RoaXMuaWQ9aHUoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe2NvbnN0IGQ9YXx8IiI7dGhpcy5faWQ9ZCx0aGlzLnRvb2x0aXBJZFNlcnZpY2UudXBkYXRlSWQoZCl9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bv'@;
put 'c2l0aW9ufXNldCBwb3NpdGlvbihhKXtjb25zdCBkPXRoaXMuX3Bvc2l0aW9uLGg9JERlLmluY2x1ZGVzKGEpP2E6InJpZ2h0Ijtzd2l0Y2godGhpcy5fcG9zaXRpb249aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9'@;
put 'YH0pLGgpe2Nhc2UidG9wLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PW9pLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9b2kuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJ0b3AtbGVmdCI6dGhpcy5hbmNob3JQb2ludD1vaS5UT1BfQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PW9pLlJJR0hU'@;
put 'X0JPVFRPTTticmVhaztjYXNlImJvdHRvbS1yaWdodCI6dGhpcy5hbmNob3JQb2ludD1vaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PW9pLkxFRlRfVE9QO2JyZWFrO2Nhc2UiYm90dG9tLWxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9b2kuQk9UVE9NX0NFTlRFUix0aGlzLnBvcG92'@;
put 'ZXJQb2ludD1vaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5hbmNob3JQb2ludD1vaS5SSUdIVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9b2kuTEVGVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0Ijp0aGlzLmFuY2hvclBvaW50PW9pLkxFRlRfQ0VOVEVSLHRoaXMucG9wb3ZlclBv'@;
put 'aW50PW9pLlJJR0hUX1RPUDticmVhaztkZWZhdWx0OiFmdW5jdGlvbiBHRGUoYyl7dGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgdmFsdWU6ICR7Y31gKX0oaCl9fWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX3NpemV9c2V0IHNpemUoYSl7Y29uc3QgZD10aGlzLl9zaXplLGg9cURlLmluY2x1'@;
put 'ZGVzKGEpP2E6InNtIjt0aGlzLl9zaXplPWgsdGhpcy51cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YHRvb2x0aXAtJHtkfWAsbmV3Q2xhc3M6YHRvb2x0aXAtJHtofWB9KX1uZ09uSW5pdCgpe3RoaXMuc2l6ZT10aGlzLnNpemV8fCJzbSIsdGhpcy5wb3NpdGlvbj10aGlzLnBvc2l0aW9ufHwi'@;
put 'cmlnaHQifW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJDb250ZW50KCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZUNvbnRlbnQoKX11cGRhdGVDc3NDbGFzcyh7b2xkQ2xhc3M6YSxuZXdDbGFz'@;
put 'czpkfSl7dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsZCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KHBhKSxzdChJ'@;
put 'RSw4KSxzdChzViksc3QoYVYpKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRvb2x0aXAtY29udGVudCJdXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3Vz'@;
put 'ZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKHNmKCJpZCIsZC5pZCksaHIoInJvbGUiLCJ0b29sdGlwIiksQmQoIm9wYWNpdHkiLDEpLGJyKCJ0b29sdGlwLWNvbnRlbnQiLCEwKSl9LGlucHV0czp7aWQ6ImlkIixwb3Np'@;
put 'dGlvbjpbUW4uTm9uZSwiY2xyUG9zaXRpb24iLCJwb3NpdGlvbiJdLHNpemU6W1FuLk5vbmUsImNsclNpemUiLCJzaXplIl19LGZlYXR1cmVzOltzb10sbmdDb250ZW50U2VsZWN0b3JzOlpvLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoamkoKSxPcigwKSl9'@;
put 'LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHI5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMudG9nZ2xlU2VydmljZT1hLHRoaXMudG9vbHRpcElkU2VydmljZT1kLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1oLHRoaXMuc3Vicz1bXSx0aGlzLnN1YnMucHVzaCh0aGlz'@;
put 'LnRvb2x0aXBJZFNlcnZpY2UuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hvd1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgp'@;
put 'e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QoRGwpLHN0KHNWKSxzdChhVikpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dlciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RC'@;
put 'aW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmSHQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9'@;
put 'KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKGhyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24iKSxicigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLEtEZT0oKCk9PntjbGFz'@;
put 'cyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxKZCxiYV19KSxjfSkoKSxYRGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0'@;
put 'aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbSk4sV0RlLEtEZV19KSxjfSkoKSxKRGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMu'@;
put 'XHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW9dfSksY30pKCksZUFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtxcy5hZGRJY29ucyhZeWUsenllLFRILERlZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8'@;
put 'fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLGJhLFA3LGJhLFA3XX0pLGN9KSgpLG9BZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7cXMuYWRkSWNvbnMoVEgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxrcmUseXJlXX0pLGN9KSgpLHMwPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7'@;
put 'dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W3hEZSxnRGUsYmEsa3JlLHBOLEpkLE9FLGVUZSxVbmUsekRlLFhEZSxvQWUsQkVlLFA3LEpEZSxGYixlQWVdfSksY30pKCksc0FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmxv'@;
put 'Z2dlclNlcnZpY2U9ZCx0aGlzLl9zdWJzY3JpcHRpb249bmV3IFh0LHRoaXMubG9hZGluZz0hMSx0aGlzLmFsZXJ0Q2xvc2VkPSEwLHRoaXMuZGF0YT17dXNlcjpudWxsLHBhc3M6bnVsbH19bmdPbkluaXQoKXsiUmVkaXJlY3RlZCIhPT10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWco'@;
put 'KS5sb2dpbk1lY2hhbmlzbSYmKHRoaXMuX3N1YnNjcmlwdGlvbj10aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4uc3Vic2NyaWJlKGQ9Pnt0aGlzLmlzQWN0aXZlPWQ7bGV0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYm9keSIpO2gmJihkP2guY2xhc3NMaXN0LmFkZCgic2hvdWxkLWxv'@;
put 'Z2luIik6aC5jbGFzc0xpc3QucmVtb3ZlKCJzaG91bGQtbG9naW4iKSl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1zdWJtaXQoKXt0aGlzLmxvYWRpbmd8fCh0aGlzLmxvYWRpbmc9ITAsdGhpcy5kYXRhLnVzZXImJnRoaXMuZGF0YS5wYXNzJiZ0'@;
put 'aGlzLnNhc1NlcnZpY2UubG9naW4odGhpcy5kYXRhLnVzZXIsdGhpcy5kYXRhLnBhc3MpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSxhfHwodGhpcy5lcnJvck1zZz0iVXNlcm5hbWUgb3IgcGFzc3dvcmQgaW52YWxpZCIsdGhpcy5hbGVydENsb3NlZD0hMSl9LGE9Pnt0aGlzLmxvZ2dlclNl'@;
put 'cnZpY2UubG9nKGEpLHRoaXMubG9hZGluZz0hMSx0aGlzLmVycm9yTXNnPWEsdGhpcy5hbGVydENsb3NlZD0hMX0pKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHlhKSxzdChkMSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7'@;
put 'dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9naW4iXV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWzEsImxvZ2luLXNpZGViYXItd3JhcHBlciJdLFsxLCJsb2dpbi1zaWRlYmFyIiwic2lkZUJhclByb3BzIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2Rj'@;
put 'L3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwiYWx0IiwiIiwxLCJsb2dpbi1sb2dvIl0sWzEsImxvZ2luIiwzLCJuZ1N1Ym1pdCJdLFsxLCJ0aXRsZSJdLFsxLCJ3ZWxjb21lIl0sWzEsImhpbnQiXSxbMSwibG9naW4tZ3JvdXAiXSxbImNscklucHV0IiwiIiwibmFt'@;
put 'ZSIsInVzZXIiLCJ0eXBlIiwidGV4dCIsInBsYWNlaG9sZGVyIiwiVXNlcm5hbWUiLDEsInVzZXJuYW1lIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwicGFzcyIsInR5cGUiLCJwYXNzd29yZCIsInBsYWNlaG9sZGVyIiwiUGFzc3dvcmQiLDEs'@;
put 'InBhc3N3b3JkIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0Q2xvc2VkIl0sWyJjbHItYWxlcnQtaXRlbSIsIiIsMSwiYWxlcnQtaXRlbSJdLFsxLCJhbGVydC10ZXh0Il0sWyJ0eXBlIiwic3Vi'@;
put 'bWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImRpc2FibGVkIl0sWzEsIm92ZXJsYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJkaXYiLDApKDEsImRpdiIsMSksSnQoMiwiaW1nIiwyKSxnZSgzLCJmb3JtIiwzKSxIdCgi'@;
put 'bmdTdWJtaXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguc3VibWl0KCl9KSxnZSg0LCJsYWJlbCIsNCkoNSwiaDMiLDUpLHplKDYsIldlbGNvbWUgdG8iKSxiZSgpLHplKDcsIiBEYXRhIENvbnRyb2xsZXIgIiksZ2UoOCwiaDUiLDYpLHplKDksIkNhcHR1cmUsIFJldmlldywgYW5kIEFwcHJvdmUi'@;
put 'KSxiZSgpKCksZ2UoMTAsImRpdiIsNykoMTEsImlucHV0Iiw4KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHFyKGguZGF0YS51c2VyLHYpfHwoaC5kYXRhLnVzZXI9diksdn0pLGJlKCksZ2UoMTIsImlucHV0Iiw5KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24o'@;
put 'dil7cmV0dXJuIHFyKGguZGF0YS5wYXNzLHYpfHwoaC5kYXRhLnBhc3M9diksdn0pLGJlKCksZ2UoMTMsImNsci1hbGVydCIsMTApLEdyKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHFyKGguYWxlcnRDbG9zZWQsdil8fChoLmFsZXJ0Q2xvc2VkPXYpLHZ9KSxn'@;
put 'ZSgxNCwiZGl2IiwxMSkoMTUsInNwYW4iLDEyKSx6ZSgxNiksYmUoKSgpKCksZ2UoMTcsImJ1dHRvbiIsMTMpLHplKDE4LCIgTG9nIGluICIpLGJlKCkoKSgpKCksSnQoMTksImRpdiIsMTQpLGJlKCkpLDImZCYmKGJyKCJhY3RpdmUiLGguaXNBY3RpdmUpLHdlKDExKSxXcigibmdNb2RlbCIs'@;
put 'aC5kYXRhLnVzZXIpLHdlKCksV3IoIm5nTW9kZWwiLGguZGF0YS5wYXNzKSx3ZSgpLFBlKCJjbHJBbGVydFR5cGUiLCJhbGVydC1kYW5nZXIiKSxXcigiY2xyQWxlcnRDbG9zZWQiLGguYWxlcnRDbG9zZWQpLHdlKDMpLHByKGguZXJyb3JNc2cpLHdlKCksUGUoImNsckxvYWRpbmciLGgubG9h'@;
put 'ZGluZykoImRpc2FibGVkIixoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOlt0ZyxUbCxjYSxRNSxvYSx2ZixaYixXYixyMCxvMixYcyxhZF0sc3R5bGVzOlsiLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudDtjb2xvcjojZTBlMGUw'@;
put 'fS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDJbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoNFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5zaWRlQmFyUHJvcHNbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItY29sb3I6d2hlYXQhaW1wb3J0YW50fS5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgYVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2UwZTBlMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3otaW5kZXg6MTAwMDB9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gPiAqW19uZ2NvbnRlbnQtJUNPTVAlXXtw'@;
put 'b2ludGVyLWV2ZW50czphdXRvfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwMHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtiYWNrZ3JvdW5kOiNmZmY7'@;
put 'Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjZGRkO3BhZGRpbmc6NDBweDt0cmFuc2Zvcm06dHJhbnNsYXRlKC00MDBweCk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4t'@;
put 'c2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOjMycHg7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZVtfbmdjb250ZW50LSVDT01QJV0gICAud2VsY29tZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDozNnB4fS5sb2dp'@;
put 'bi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv'@;
put 'bjpjb2x1bW47cGFkZGluZzo0OHB4IDAgMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLWdyb3VwW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo2cHggMCAxOHB4fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3otaW5kZXg6MTAx'@;
put 'fS5sb2dpbi1zaWRlYmFyLXdyYXBwZXIuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMyMTIxMjE4MDt6LWluZGV4OjEwMH0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItY29udHJvbC1jb250YWluZXIsICAgLmxv'@;
put 'Z2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5wYXNzd29yZHt3aWR0aDoxMDAlfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1pbnB1dC13cmFwcGVye21heC13'@;
put 'aWR0aDpub25lfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgYnV0dG9ue21heC13aWR0aDpub25lfS5sb2dpbi1sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6MjAwcHh9Il19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYUFlKGMsbCl7MSZjJiYoZ2UoMCwi'@;
put 'c3BhbiIsMTApLHplKDEsImxvYWRpbmciKSxiZSgpKX1mdW5jdGlvbiBsQWUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiwxMSksemUoMSwibG9hZGVkIiksYmUoKSl9ZnVuY3Rpb24gY0FlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIsMTIpLHplKDEsImZhaWxlZCIpLGJlKCkpfWZ1bmN0aW9uIHVB'@;
put 'ZShjLGwpe2lmKDEmYyYmKGdlKDAsInAiKSgxLCJjb2RlIiksemUoMiksYmUoKSx6ZSgzLCIgXHhhMCAiKSxidCg0LGFBZSwyLDAsInNwYW4iLDcpKDUsbEFlLDIsMCwic3BhbiIsOCkoNixjQWUsMiwwLCJzcGFuIiw5KSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoMikscHIo'@;
put 'YS5wcm9ncmFtKSx3ZSgyKSxQZSgibmdJZiIsYS5ydW5uaW5nKSx3ZSgpLFBlKCJuZ0lmIiwhYS5ydW5uaW5nJiZhLnN1Y2Nlc3NmdWwpLHdlKCksUGUoIm5nSWYiLCFhLnJ1bm5pbmcmJiFhLnN1Y2Nlc3NmdWwpfX1mdW5jdGlvbiBkQWUoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItc2lnbnBv'@;
put 'c3QtY29udGVudCIsNSksYnQoMSx1QWUsNyw0LCJwIiw2KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTtQZSgiY2xyUG9zaXRpb24iLCJib3R0b20tbWlkZGxlIiksd2UoKSxQZSgibmdGb3JPZiIsYS5yZXF1ZXN0cyl9fWxldCBoQWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMu'@;
put 'bG9hZGluZz0hMSx0aGlzLnJlcXVlc3RzPVtdLHRoaXMuX2xvYWRpbmdTdWI9bmV3IFh0fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7dGhpcy5fbG9hZGluZ1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0'@;
put 'YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1sb2FkaW5nLWluZGljYXRvciJdXSxkZWNsczo2LHZhcnM6Nixjb25zdHM6W1sxLCJsb2FkaW5nLWluZGljYXRvciJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwxLCJzcGlubmVyIiwic3Bpbm5lci1z'@;
put 'bSIsInNwaW5uZXItaW52ZXJzZSJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJjaGVjayIsInNpemUiLCIyMCIsMSwiaXMtaW5mbyJdLFsiY2xyU2lnbnBvc3RUcmlnZ2VyIiwiIiwic2hhcGUiLCJlcnJvciIsInNpemUiLCIyNCIsMSwiaXMtZXJyb3IiXSxbMywiY2xyUG9z'@;
put 'aXRpb24iLDQsImNscklmT3BlbiJdLFszLCJjbHJQb3NpdGlvbiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwicnVubmluZyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWNjZXNzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZhaWwiLDQsIm5nSWYiXSxbMSwicnVubmluZyJdLFsxLCJz'@;
put 'dWNjZXNzIl0sWzEsImZhaWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJkaXYiLDApKDEsImNsci1zaWducG9zdCIpLEp0KDIsInNwYW4iLDEpKDMsImNsci1pY29uIiwyKSg0LCJjbHItaWNvbiIsMyksYnQoNSxkQWUsMiwyLCJjbHItc2lnbnBvc3QtY29udGVudCIs'@;
put 'NCksYmUoKSgpKSwyJmQmJih3ZSgyKSxCZCgiZGlzcGxheSIsaC5sb2FkaW5nPyJpbmxpbmUtYmxvY2siOiJub25lIiksd2UoKSxCZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmaC5yZXF1ZXN0c1swXS5zdWNjZXNzZnVsPyJpbmxpbmUtYmxvY2siOiJub25l'@;
put 'Iiksd2UoKSxCZCgiZGlzcGxheSIsIWgubG9hZGluZyYmaC5yZXF1ZXN0cy5sZW5ndGg+MCYmIWgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoibm9uZSIpKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxaYSxYZCxCTixFcmUsR0VdLHN0eWxlczpbIi5sb2FkaW5nLWluZGlj'@;
put 'YXRvcltfbmdjb250ZW50LSVDT01QJV17bGluZS1oZWlnaHQ6Mi41cmVtO2hlaWdodDoyLjVyZW07ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6MTAwJTttYXJnaW4tcmlnaHQ6MTBweH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgLnNwaW5u'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVde3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjI0cHg7Y29sb3I6IzU2NTY1NjtjdXJzb3I6YXV0'@;
put 'b30ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0u'@;
put 'bG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0l'@;
put 'Q09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDoxMHB4fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIHNwYW4ucnVubmluZ1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U5YmYwNH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV0gICBz'@;
put 'cGFuLnN1Y2Nlc3NbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM2MGI1MTV9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5mYWlsW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtjb2xvcjojYzkyMTAwfSJdfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGZBZShjLGwpe2lmKDEmYyYmKGdlKDAsInNwYW4iKSxKdCgxLCJpbWciLDkpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksazQoInNyYyIsYS5nZXRQaWN0dXJlVXJsKCksJF8pfX1mdW5j'@;
put 'dGlvbiBwQWUoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiwxMCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCk7YnIoImhpZGRlbiIsMD09PWEuZmFpbGVkUmVxcy5sZW5ndGgpLHdlKCkscHIoYS5mYWlsZWRSZXFzLmxlbmd0aCl9fWZ1bmN0aW9uIG1BZShjLGwpe2lmKDEmYyYmKGdl'@;
put 'KDAsInNwYW4iLDExKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTticigiaGlkZGVuIiwwPT09YS5kZWJ1Z0xvZ3MubGVuZ3RoKSx3ZSgpLHByKGEuZGVidWdMb2dzLmxlbmd0aCl9fWZ1bmN0aW9uIGdBZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBfQWUo'@;
put 'YyxsKXsxJmMmJihyaSgwKSxnZSgxLCJhIiwyMykoMiwic3BhbiIsMjQpLHplKDMsIkRvY3VtZW50YXRpb24iKSxiZSgpKCksaWkoKSl9ZnVuY3Rpb24gdkFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDEzKSgxLCJkaXYiLDE0LDApKDMsImNs'@;
put 'ci10b2dnbGUtY29udGFpbmVyIiwxNSksSHQoImNsaWNrIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVhpKDIpO3JldHVybiB4dChaZSgpLm9uRGVidWdSb3dDbGljayhoLGYpKX0pLGdlKDQsImNsci10b2dnbGUtd3JhcHBlciIpKDUsImlucHV0IiwxNiksR3IoIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gcXIoZi5zYXNqc0NvbmZpZy5kZWJ1ZyxoKXx8KGYuc2FzanNDb25maWcuZGVidWc9aCkseHQoaCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbkRlYnVnTW9kZUNoYW5n'@;
put 'ZSgpKX0pLGJlKCksZ2UoNiwibGFiZWwiKSx6ZSg3LCJEZWJ1ZyBNb2RlIiksYmUoKSgpKCkoKSxnZSg4LCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksZ2UoOSwic3BhbiIpLHplKDEwLCJTQVMgUmVxdWVz'@;
put 'dHMiKSxiZSgpKCksYnQoMTEsX0FlLDQsMCwibmctY29udGFpbmVyIiw0KSxKdCgxMiwiZGl2IiwxOCksZ2UoMTMsImEiLDE5KSgxNCwic3BhbiIpLHplKDE1LCJTeXN0ZW0iKSxiZSgpKCksZ2UoMTYsImEiLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgp'@;
put 'LmxvZ291dChoKSl9KSxnZSgxNywic3BhbiIpLHplKDE4LCJMb2cgT3V0IiksYmUoKSxKdCgxOSwiY2xyLWljb24iLDIxKSxiZSgpLGdlKDIwLCJkaXYiLDIyKSgyMSwic3BhbiIpLHplKDIyKSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSg1KSxXcigibmdNb2RlbCIsYS5zYXNq'@;
put 'c0NvbmZpZy5kZWJ1Zyksd2UoNiksUGUoIm5nSWYiLCFhLmlzRGVwbG95UGFnZSksd2UoMTEpLHhyKCJ2IixhLmNvbW1pdFZlciwiIil9fWxldCB5QWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnVzZXJTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5l'@;
put 'dmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMudXNlck5hbWU9Ik5vdCBsb2dnZWQgaW4iLHRoaXMucmVxU3ViPW5ldyBYdCx0aGlzLnVzZXJTdWI9bmV3IFh0LHRoaXMuYXBwTG9ncz1bXSx0aGlzLmRlYnVnTG9ncz1bXSx0aGlzLmZhaWxlZFJlcXM9W10sdGhpcy5zYXNFcnJvcnM9'@;
put 'W10sdGhpcy5pc1ZpeWE9ITEsdGhpcy5zYXNqc0NvbmZpZz1uZXcgZWQuU0FTanNDb25maWcsdGhpcy5yZXF1ZXN0c0NvdW50PTAsdGhpcy5jb21taXRWZXI9IiJ9bmdPbkluaXQoKXt0aGlzLnVzZXJTdWI9dGhpcy51c2VyU2VydmljZS51c2VyQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy51'@;
put 'c2VyTmFtZT1hLnVzZXJuYW1lfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCksdGhpcy5jb21taXRWZXI9InY2LjguMSIucmVwbGFjZSgidiIs'@;
put 'IiIpKyIuZ2MwZGM5MTkifW5nT25EZXN0cm95KCl7dGhpcy5yZXFTdWIudW5zdWJzY3JpYmUoKSx0aGlzLnVzZXJTdWIudW5zdWJzY3JpYmUoKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9b25EZWJ1Z01vZGVDaGFuZ2UoYSl7dGhp'@;
put 'cy5zYXNqc0NvbmZpZyYmdGhpcy5zYXNTZXJ2aWNlLnNldERlYnVnU3RhdGUodGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zyl9b25EZWJ1Z1Jvd0NsaWNrKGEsZCl7YS5zdG9wUHJvcGFnYXRpb24oKSxzZXRUaW1lb3V0KCgpPT57ZC5jbGljaygpfSwzMDApfWxvZ291dChhKXthLnByZXZlbnREZWZh'@;
put 'dWx0KCk7dHJ5e3RoaXMuc2FzU2VydmljZS5sb2dvdXQoKX1jYXRjaChkKXtjb25zb2xlLmVycm9yKGQpfX1nZXRQaWN0dXJlVXJsKCl7cmV0dXJuYCR7dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx9L2lkZW50aXRpZXMvdXNlcnMvJHt0aGlzLnVzZXJOYW1lfS9hdmF0YXIvY29udGVudGB9'@;
put 'Z2V0IGlzRGVwbG95UGFnZSgpe3JldHVybiB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoUkYpLHN0KHlhKSxzdChHbCksc3QoenMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVj'@;
put 'bXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhlYWRlci1hY3Rpb25zIl1dLGRlY2xzOjExLHZhcnM6NSxjb25zdHM6W1siZHJvcGRvd25JdGVtRGVidWciLCIiXSxbMSwiaGVhZGVyLWFjdGlvbnMiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIi'@;
put 'LDEsIm5hdi10ZXh0IiwiY29sb3Itd2hpdGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIsNCwi'@;
put 'bmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsiYWx0IiwiIiwxLCJhdmF0YXItaW1nIiwzLCJzcmMiXSxbMSwiYmFkZ2UiLCJiYWRnZS1kYW5nZXIiXSxbMSwiYmFkZ2UiLCJiYWRnZS1pbmZvIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbImNs'@;
put 'clBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDEsImRlYnVnLXN3aXRjaC1pdGVtIl0sWzEsInRvZ2dsZS1zd2l0Y2giLDMsImNsaWNrIl0sWyJpZCIsImRlYnVnLXRvZ2dsZTEiLCJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLDMsIm5nTW9k'@;
put 'ZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWzEsInNlcGFyYXRvciJdLFsiaHJlZiIsIi4uLiIsInJvdXRlckxpbmsiLCIvc3lzdGVtIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWyJocmVmIiwiLi4uIiwiY2xyRHJvcGRvd25JdGVtIiwiIiwz'@;
put 'LCJjbGljayJdLFsic2hhcGUiLCJsb2dvdXQiLDEsImNsci1sb2dvdXQiXSxbMSwiY29weVJpZ2h0Il0sWyJ0YXJnZXQiLCJfYmxhbmsiLCJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvIiwiY2xyRHJvcGRvd25JdGVtIiwiIl0sWzEsImRyb3Bkb3duLXRleHQiXV0sdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJkaXYiLDEpLEp0KDEsImFwcC1sb2FkaW5nLWluZGljYXRvciIpLGdlKDIsImNsci1kcm9wZG93biIsMikoMywiYnV0dG9uIiwzKSg0LCJzcGFuIiksemUoNSksYmUoKSxidCg2LGZBZSwyLDEsInNwYW4iLDQpKDcscEFlLDIsMywic3Bh'@;
put 'biIsNSkoOCxtQWUsMiwzLCJzcGFuIiw2KSg5LGdBZSwxLDAsImNsci1pY29uIiw3KSxiZSgpLGJ0KDEwLHZBZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsOCksYmUoKSgpKSwyJmQmJih3ZSg1KSxwcihoLnVzZXJOYW1lKSx3ZSgpLFBlKCJuZ0lmIiwiTm90IGxvZ2dlZCBpbiIhPT1oLnVz'@;
put 'ZXJOYW1lJiZoLmlzVml5YSksd2UoKSxQZSgibmdJZiIsIWguc2FzanNDb25maWcuZGVidWcpLHdlKCksUGUoIm5nSWYiLGguc2FzanNDb25maWcuZGVidWcpLHdlKCksUGUoIm5nSWYiLCFoLmlzVml5YSkpfSxkZXBlbmRlbmNpZXM6W3FpLGYxLGNhLG9hLGswLFphLFhkLFhzLHYxLE83LF8x'@;
put 'LHRwLFRnLERnLGU5LGhBZV0sc3R5bGVzOlsnW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmNvbnRlbnRzfS5jb3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0uY29weVJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dv'@;
put 'cmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3aWR0aDoxMDAlO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OjEuNX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1yaWdodDoxNXB4O2xpbmUtaGVpZ2h0OjNyZW07aGVpZ2h0'@;
put 'OjNyZW19LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZhZmFmYTtwb3NpdGlvbjpyZWxhdGl2ZX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24u'@;
put 'ZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtvcGFjaXR5Oi4xNTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MXB4O2hlaWdodDo0MHB4O3RvcDoxMHB4fS5hcHAtbmF2LWRyb3Bkb3duW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9wZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdICAgLmJhZGdlLmhpZGRlbltfbmdjb250ZW50LSVDT01QJV17dmlzaWJpbGl0eTpoaWRkZW59LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3du'@;
put 'LW1lbnVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiM1NjU2NTY7cGFkZGluZy1ib3R0b206MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuc2VwYXJhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtt'@;
put 'YXJnaW46MTBweCAwO2JvcmRlci1ib3R0b206MXB4IHNvbGlkIGdyYXl9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6Zmxl'@;
put 'eDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlO2hlaWdodDo0NXB4O2xpbmUtaGVpZ2h0OjQwcHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5kcm9wZG93bi10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNTY1NjU2fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5iYWRnZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjE1cHg7cmlnaHQ6MjZweDttYXJnaW4tcmlnaHQ6MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRv'@;
put 'd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbS5kZWJ1Zy1zd2l0Y2gtaXRlbVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1sb2dvdXRbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjIwcHg7dG9wOjE1cHh9LmFwcC1uYXYtZHJvcGRvd25b'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LmFwcC1uYXYtZHJvcGRvd25bX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItdG9nZ2xlLXdyYXBwZXJ7d2lkdGg6MTAwJTttYXJnaW46MDtoZWlnaHQ6MTAwJTtwYWRkaW5nOjEwcHggMjBweH0u'@;
put 'YXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIGlucHV0e2luc2V0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtjdXJzb3I6cG9pbnRl'@;
put 'cn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6'@;
put 'YWZ0ZXJ7dHJhbnNpdGlvbjpub25lIWltcG9ydGFudH0uZGVidWctdG9nZ2xlLWxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6NDJweH1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey5zaWRlbmF2LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgYS5uYXYtbGluay5h'@;
put 'Y3RpdmVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOmluaGVyaXQ7cGFkZGluZzoxNXB4O2JhY2tncm91bmQ6IzU2NTY1Nn19Lm5hdi1saW5rLmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5iYWRnZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LmF2YXRh'@;
put 'ci1pbWdbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7bWFyZ2luLWxlZnQ6MTBweDtib3JkZXItcmFkaXVzOjUwcHh9J119KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYkFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWFsZXJ0IiwyKSxHcigi'@;
put 'Y2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSkuJGltcGxpY2l0O3JldHVybiBxcihmLmNsb3NlZCxoKXx8KGYuY2xvc2VkPWgpLHh0KGgpfSksSHQoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5vbkFs'@;
put 'ZXJ0Q2xvc2UoKSl9KSxnZSgxLCJkaXYiLDMpKDIsInNwYW4iLDQpLHplKDMpLGJlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtQZSgiY2xyQWxlcnRUeXBlIixhLnR5cGUpKCJjbHJBbGVydEFwcExldmVsIiwhMCksV3IoImNsckFsZXJ0Q2xvc2VkIixhLmNsb3NlZCksd2Uo'@;
put 'MykseHIoIiAiLGEubWVzc2FnZSwiICIpfX1mdW5jdGlvbiB3QWUoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItYWxlcnRzIiksYnQoMSxiQWUsNCw0LCJjbHItYWxlcnQiLDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nRm9yT2YiLGEuYWxlcnRzKX19bGV0IE1BZT0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2FsZXJ0c1NlcnZpY2U9YSx0aGlzLmFsZXJ0cz1bXSx0aGlzLmhhc09wZW5BbGVydD0hMSx0aGlzLmFsZXJ0c1N1Yj1uZXcgWHR9bmdPbkluaXQoKXt0aGlzLmFsZXJ0c1N1Yj10aGlzLl9hbGVydHNTZXJ2aWNlLmFsZXJ0cy5zdWJzY3Jp'@;
put 'YmUoYT0+e3RoaXMuYWxlcnRzLnB1c2goYSksdGhpcy5oYXNPcGVuQWxlcnQ9ITAsYS5lcnImJmNvbnNvbGUuZXJyb3IoYS5lcnIpfSl9b25BbGVydENsb3NlKCl7dGhpcy5oYXNPcGVuQWxlcnQ9dGhpcy5hbGVydHMuc29tZShhPT4hYS5jbG9zZWQpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoT0YpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWFsZXJ0cyJdXSxkZWNsczoxLHZhcnM6MSxjb25zdHM6W1s0LCJuZ0lmIl0sWzMsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBw'@;
put 'TGV2ZWwiLCJjbHJBbGVydENsb3NlZCIsImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLCJjbHJBbGVydFR5cGUiLCJjbHJBbGVydEFwcExldmVsIiwiY2xyQWxlcnRDbG9zZWQiXSxbMSwiYWxlcnQtaXRlbSJdLFsx'@;
put 'LCJhbGVydC10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZidCgwLHdBZSwyLDEsImNsci1hbGVydHMiLDApLDImZCYmUGUoIm5nSWYiLGguaGFzT3BlbkFsZXJ0KX0sZGVwZW5kZW5jaWVzOltMcyxxaSxaYix2cmUsV2JdLHN0eWxlczpbImNsci1hbGVydHNbX25nY29udGVu'@;
put 'dC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9Il19KX1yZXR1cm4gY30pKCksblQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe31zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10'@;
put 'aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjb250YWN0LWxpbmsiXV0saW5wdXRzOntjbGFzc2VzOiJjbGFzc2VzIn0sZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhyZWYiLCJtYWlsdG86c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbz9zdWJqZWN0PUxpY2VuY2UiLDMs'@;
put 'Im5nQ2xhc3MiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJhIiwwKSx6ZSgxLCJzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksYmUoKSksMiZkJiYoYnIoInVuc2V0IiwiIiE9PWguY2xhc3NlcyksUGUoIm5nQ2xhc3MiLGguY2xhc3NlcykpfSxkZXBlbmRlbmNpZXM6'@;
put 'W1VjXSxzdHlsZXM6WyIudW5zZXRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnVuc2V0fSJdfSl9cmV0dXJuIGN9KSgpLEtiPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IElyLHRoaXMuZmlsZURyYWdnZWRPdmVyPW5l'@;
put 'dyBJcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29udGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25EcmFnTGVhdmUoYSl7YS5wcmV2'@;
put 'ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2QubGVuZ3RoPjAmJnRoaXMuZmls'@;
put 'ZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFuc2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNmZXIudHlwZXNbZF0pcmV0dXJu'@;
put 'ITB9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRHJhZ05kcm9wIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7'@;
put 'MSZkJiZIdCgiZHJhZ292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pKCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbmRyb3Aodil9KSwyJmQmJmJyKCJmaWxlb3ZlciIs'@;
put 'aC5maWxlT3Zlcil9LG91dHB1dHM6e2ZpbGVEcm9wcGVkOiJmaWxlRHJvcHBlZCIsZmlsZURyYWdnZWRPdmVyOiJmaWxlRHJhZ2dlZE92ZXIifX0pfXJldHVybiBjfSkoKTtjb25zdCB6cmU9KCk9PltdO2Z1bmN0aW9uIENBZShjLGwpezEmYyYmKGdlKDAsInAiLDYpLHplKDEsIk5vIHJlcXVl'@;
put 'c3RzIG1hZGUiKSxiZSgpKX1mdW5jdGlvbiBTQWUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiksSnQoMSwiY2xyLWljb24iLDEzKSxiZSgpKX1mdW5jdGlvbiB4QWUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiksSnQoMSwiY2xyLWljb24iLDE0KSxiZSgpKX1mdW5jdGlvbiBrQWUoYyxsKXtpZigx'@;
put 'JmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiwyMSksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0LGY9WmUoMykuaW5kZXg7cmV0dXJuIHh0KFplKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJlcnJvciIpKX0pLGdlKDEsImJ1'@;
put 'dHRvbiIsMjIpLHplKDIpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoMikseHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gRUFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLEp0KDEsImNsci1pY29uIiwxOSksemUoMiksYnQoMyxrQWUsMywxLCJj'@;
put 'bHItdHJlZS1ub2RlIiwyMCksYmUoKSksMiZjKXtjb25zdCBhPVplKDIpLiRpbXBsaWNpdDt3ZSgyKSx4cigiIEVycm9ycyAoIixhLmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksd2UoKSxQZSgibmdGb3JPZiIsYS5sb2dFcnJvcnN8fERhKDIsenJlKSl9fWZ1bmN0aW9uIFRBZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDIxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQsZj1aZSgzKS5pbmRleDtyZXR1cm4geHQoWmUoMikuZ29Ub0xvZ0xpbmUoaCwicmVxdWVzdF8iK2YsIndhcm5pbmciKSl9KSxnZSgxLCJi'@;
put 'dXR0b24iLDIyKSx6ZSgyKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKDIpLHhyKCIgIixhLCIgIil9fWZ1bmN0aW9uIERBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10cmVlLW5vZGUiLDE4KSxKdCgxLCJjbHItaWNvbiIsMjMpLHplKDIpLGJ0KDMsVEFlLDMsMSwi'@;
put 'Y2xyLXRyZWUtbm9kZSIsMjApLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKS4kaW1wbGljaXQ7d2UoMikseHIoIiBXYXJuaW5ncyAoIixhLmxvZ1dhcm5pbmdzLmxlbmd0aCwiKSAiKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHxEYSgyLHpyZSkpfX1mdW5jdGlvbiBBQWUoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDI0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKDIpLmRvd25sb2FkTG9nKGgubG9nRmlsZSkpfSksemUoMSwiIERvd25sb2FkICIpLGJlKCl9fWZ1bmN0'@;
put 'aW9uIExBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksYnQoMixFQWUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSkoMyxEQWUsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksYmUoKSxKdCg0LCJkaXYiLDE2KSxidCg1LEFBZSwyLDAsImJ1dHRvbiIs'@;
put 'MTcpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDt3ZSgyKSxQZSgibmdJZiIsYS5sb2dFcnJvcnMpLHdlKCksUGUoIm5nSWYiLGEubG9nV2FybmluZ3MpLHdlKCksUGUoImlubmVySFRNTCIsYS5sb2dGaWxlLEUzKSx3ZSgpLFBlKCJuZ0lmIiwobnVsbD09YS5sb2dGaWxlP251'@;
put 'bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIElBZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsMjQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMikuZG93bmxvYWRTb3VyY2VD'@;
put 'b2RlKGguc291cmNlQ29kZSkpfSksemUoMSwiIERvd25sb2FkICIpLGJlKCl9fWZ1bmN0aW9uIFJBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLHplKDIpLGJlKCksYnQoMyxJQWUsMiwwLCJidXR0b24iLDE3KSxiZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'WmUoKS4kaW1wbGljaXQ7d2UoMikscHIoYS5zb3VyY2VDb2RlKSx3ZSgpLFBlKCJuZ0lmIiwobnVsbD09YS5zb3VyY2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIE9BZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsMjQpLEh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMikuZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksemUoMSwiIERvd25sb2FkICIpLGJlKCl9fWZ1bmN0aW9uIFBBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNs'@;
put 'ci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLHplKDIpLGJlKCksYnQoMyxPQWUsMiwwLCJidXR0b24iLDE3KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoMikseHIoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLHdlKCksUGUoIm5nSWYiLChudWxsPT1hLmdlbmVyYXRl'@;
put 'ZENvZGU/bnVsbDphLmdlbmVyYXRlZENvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24gRkFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwzMSksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0O3JldHVybiB4dChaZSgzKS4kaW1wbGljaXQu'@;
put 'c2VsZWN0ZWRUYWJsZT1oLmtleSl9KSx6ZSgxKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDticigic2VsZWN0ZWQiLFplKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPT09YS5rZXkpLHdlKCkseHIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIEhBZShjLGwpe2lmKDEmYyYm'@;
put 'KGdlKDAsImNsci1kcm9wZG93bi1tZW51IiksYnQoMSxGQWUsMiwzLCJkaXYiLDMwKSxQYSgyLCJrZXl2YWx1ZSIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKS4kaW1wbGljaXQ7d2UoKSxQZSgibmdGb3JPZiIsd2MoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBOQWUoYyxsKXtpZigxJmMm'@;
put 'JihnZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksemUoMiksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMykuJGltcGxpY2l0O3dlKDIpLHhyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gVkFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGgiKSx6ZSgxKSxi'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoKSx4cigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24gakFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGQiKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1aZSgpLiRpbXBsaWNpdDt3ZSgpLHhyKCIgIixkW2Eua2V5'@;
put 'XSwiICIpfX1mdW5jdGlvbiBCQWUoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpLGJ0KDEsakFlLDIsMSwidGQiLDM3KSxQYSgyLCJrZXl2YWx1ZSIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSg0KS4kaW1wbGljaXQ7d2UoKSxQZSgibmdGb3JPZiIsd2MoMiwxLGEuU0FTV09SS1thLnNlbGVjdGVk'@;
put 'VGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIFlBZShjLGwpe2lmKDEmYyYmKGdlKDAsInRhYmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLGJ0KDMsVkFlLDIsMSwidGgiLDM3KSxQYSg0LCJrZXl2YWx1ZSIpLGJlKCkoKSxnZSg1LCJ0Ym9keSIpLGJ0KDYsQkFlLDMsMywidHIi'@;
put 'LDM3KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgzKS4kaW1wbGljaXQ7d2UoMyksUGUoIm5nRm9yT2YiLHdjKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLHdlKDMpLFBlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEw'@;
put 'cm93cyl9fWZ1bmN0aW9uIHpBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10YWItY29udGVudCIpLGJ0KDEsTkFlLDMsMSwicCIsMzIpLGdlKDIsImRpdiIsMzMpLGJ0KDMsWUFlLDcsNCwidGFibGUiLDM0KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgyKS4kaW1wbGljaXQ7d2UoKSxQZSgi'@;
put 'bmdJZiIsYS5zZWxlY3RlZFRhYmxlKSx3ZSgyKSxQZSgibmdJZiIsYS5zZWxlY3RlZFRhYmxlKX19ZnVuY3Rpb24gVUFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRhYiIpKDEsImNsci1kcm9wZG93biIsMjYpKDIsImJ1dHRvbiIsMjcpLHplKDMsIiBTQVMgV29yayBU'@;
put 'YWJsZXMgIiksSnQoNCwiY2xyLWljb24iLDI4KSxiZSgpLGJ0KDUsSEFlLDMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDI5KSxiZSgpLGJ0KDYsekFlLDQsMiwibmctdGVtcGxhdGUiLDEyKSxHcigiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoMyk7cmV0'@;
put 'dXJuIHFyKGYudGFibGVzQWN0aXZlLGgpfHwoZi50YWJsZXNBY3RpdmU9aCkseHQoaCl9KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgpLFBlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLHdlKDUpLFdyKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNBY3RpdmUpfX1mdW5jdGlv'@;
put 'biBaQWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLHplKDIpLGdlKDMsInNwYW4iLDkpLGJ0KDQsU0FlLDIsMCwic3BhbiIsNSkoNSx4QWUsMiwwLCJzcGFuIiw1KSxiZSgpKCksZ2UoNiwiY2xyLXN0YWNr'@;
put 'LWNvbnRlbnQiKSx6ZSg3KSxiZSgpLGdlKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJzIikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiwxMSksemUoMTMsIlNBUyBMb2ciKSxiZSgpLGJ0KDE0LExBZSw2LDQsIm5nLXRlbXBsYXRl'@;
put 'IiwxMiksR3IoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpO3JldHVybiBxcihmLnNhc0xvZ0FjdGl2ZSxoKXx8KGYuc2FzTG9nQWN0aXZlPWgpLHh0KGgpfSksYmUoKSxnZSgxNSwiY2xyLXRhYiIpKDE2LCJidXR0b24iLDExKSx6ZSgxNywiU0FT'@;
put 'IFNvdXJjZSBDb2RlIiksYmUoKSxidCgxOCxSQWUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLEdyKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgyKTtyZXR1cm4gcXIoZi5zYXNTb3VyY2VDb2RlQWN0aXZlLGgpfHwoZi5zYXNTb3VyY2VDb2RlQWN0aXZl'@;
put 'PWgpLHh0KGgpfSksYmUoKSxnZSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDExKSx6ZSgyMSwiU0FTIEdlbmVyYXRlZCBDb2RlIiksYmUoKSxidCgyMixQQWUsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLEdyKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1a'@;
put 'ZSgyKTtyZXR1cm4gcXIoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlLGgpfHwoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpLHh0KGgpfSksYmUoKSxidCgyMyxVQWUsNywyLCJjbHItdGFiIiw1KSxiZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1a'@;
put 'ZSgyKTtQZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSx3ZSgyKSx4cigiICIsYS5zZXJ2aWNlTGluaywiICIpLHdlKDIpLFBlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSx3ZSgpLFBlKCJuZ0lmIiwo'@;
put 'bnVsbD09YS5sb2dFcnJvcnM/bnVsbDphLmxvZ0Vycm9ycy5sZW5ndGgpPjApLHdlKDIpLHByKGEucGFyc2VkVGltZXN0YW1wKSx3ZSg3KSxXcigiY2xySWZBY3RpdmUiLGguc2FzTG9nQWN0aXZlKSx3ZSg0KSxXcigiY2xySWZBY3RpdmUiLGguc2FzU291cmNlQ29kZUFjdGl2ZSksd2UoNCks'@;
put 'V3IoImNscklmQWN0aXZlIixoLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUpLHdlKCksUGUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIFdBZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci1zdGFjay12aWV3IiksYnQoMSxaQWUsMjQsMTAsImNsci1zdGFjay1ibG9jayIsNyksYmUoKSksMiZj'@;
put 'KXtjb25zdCBhPVplKCk7d2UoKSxQZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IEdBZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9wZW5lZCgpLHRoaXMubG9n'@;
put 'Z2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5ldyBJcix0aGlzLnNhc0xv'@;
put 'Z0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNqc1JlcXVlc3RzPVtdfW5n'@;
put 'T25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIvIiwiIil9Zm9ybWF0VGlt'@;
put 'ZXN0YW1wKGEpe3JldHVybiBYMShhKS5mb3JtYXQoKT9YMShhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBYMShhKS5mb3JtYXQoKT9gICgke1gxKGEpLmZyb21Ob3coKX0pYDoiIn1tb2RhbE9wZW5DaGFuZ2Uo'@;
put 'YSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3RzKXRoaXMucGFyc2VFcnJv'@;
put 'cnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtsZXQgZj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxs'@;
put 'KGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKSx2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtmb3IobGV0IFQgb2YgZilULnRleHRDb250ZW50LmluY2x1ZGVzKGEpJiYodi5zY3JvbGxUb3A9VC5vZmZzZXRUb3Atdi5vZmZzZXRU'@;
put 'b3AsVC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiM2MWEyMjAyYiIsc2V0VGltZW91dCgoKT0+e1Quc3R5bGU9IiJ9LDNlMykpfXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtpZighYXx8IWEubG9nRmlsZXx8InN0cmluZyIhPXR5cGVv'@;
put 'ZiBhLmxvZ0ZpbGV8fHZvaWQgMCE9PWEubG9nRXJyb3JzfHx2b2lkIDAhPT1hLmxvZ1dhcm5pbmdzKXJldHVybjtsZXQgaD1bXSxmPVtdLHY9YS5sb2dGaWxlLnNwbGl0KCJcbiIpO2ZvcihsZXQgVD0wO1Q8di5sZW5ndGg7VCsrKXtpZigvPC4qPkVSUk9SL2dtLnRlc3QodltUXSkpe2xldCBZ'@;
put 'PXZbVF0uc3Vic3RyaW5nKHZbVF0uaW5kZXhPZigiRSIpLHZbVF0ubGVuZ3RoLTEpO2gucHVzaChZKX1lbHNlL15FUlJPUi9nbS50ZXN0KHZbVF0pJiYoaC5wdXNoKHZbVF0pLHZbVF09Ijxmb250PiIrdltUXSsiPC9mb250PiIpO2lmKC88Lio+V0FSTklORy9nbS50ZXN0KHZbVF0pKXtsZXQg'@;
put 'WT12W1RdLnN1YnN0cmluZyh2W1RdLmluZGV4T2YoIlciKSx2W1RdLmxlbmd0aC0xKTtmLnB1c2goWSl9ZWxzZS9eV0FSTklORy9nbS50ZXN0KHZbVF0pJiYoZi5wdXNoKHZbVF0pLHZbVF09Ijxmb250PiIrdltUXSsiPC9mb250PiIpfWQubG9nZ2VyU2VydmljZS5sb2coZiksYS5sb2dGaWxl'@;
put 'PXYuam9pbigiXG4iKSxhLmxvZ0Vycm9ycz1oLGEubG9nV2FybmluZ3M9Zn0pKCl9ZG93bmxvYWRMb2coYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgbG9nRmlsZS0ke2R9YCxhKX1kb3dubG9hZFNvdXJjZUNvZGUo'@;
put 'YSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93bmxvYWRUZXh0RmlsZShgc291cmNlQ29kZS0ke2R9YCxhKX1kb3dubG9hZEdlbmVyYXRlZENvZGUoYSl7Y29uc3QgZD0obmV3IERhdGUpLnZhbHVlT2YoKTt0aGlzLmhlbHBlclNlcnZpY2UuZG93'@;
put 'bmxvYWRUZXh0RmlsZShgZ2VuZXJhdGVkQ29kZS0ke2R9YCxhKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHlhKSxzdChkMSksc3QoY3UpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBw'@;
put 'LXJlcXVlc3RzLW1vZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5n'@;
put 'ZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIsImNsclN0YWNrVmll'@;
put 'd0xldmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJjbHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlQ2hhbmdlIiwiY2xySWZBY3RpdmUiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tY2ly'@;
put 'Y2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNsYXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwiXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGljayJdLFsxLCJjbHIt'@;
put 'dHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmstdGFibGVzLWRyb3Bk'@;
put 'b3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVjdGVkIiwiY2xpY2si'@;
put 'LDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEsIm10LTEwIl0sWzEs'@;
put 'InRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiY2xyLW1vZGFsIiwwKSxIdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5tb2RhbE9wZW5DaGFuZ2Uodil9KSxnZSgxLCJoMyIs'@;
put 'MSksemUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxnZSgzLCJwIiwyKSx6ZSg0KSxiZSgpKCksZ2UoNSwiZGl2IiwzKSxidCg2LENBZSwyLDAsInAiLDQpKDcsV0FlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLGJlKCkoKSksMiZkJiYoUGUoImNsck1vZGFsT3BlbiIsaC5vcGVuZWQpLHdlKDQp'@;
put 'LHhyKCJBcHAgTG9jYXRpb246ICIsaC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLHdlKDIpLFBlKCJuZ0lmIiwobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksd2UoKSxQZSgibmdJZiIsaC5vcGVuZWQmJihudWxsPT1oLnNhc2pzUmVxdWVzdHM/'@;
put 'bnVsbDpoLnNhc2pzUmVxdWVzdHMubGVuZ3RoKT4wKSl9LGRlcGVuZGVuY2llczpbTHMscWkscU4sb3JlLCROLGlyZSxyaCx1ZCxXNCxaYSxCdSxZdSxBNyxYZCwkNCxLNCxJZyxxNCxHNCxBZyx0cCxUZyxEZyxlOSxwa10sc3R5bGVzOlsiLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1oZWFkZXIg'@;
put 'LmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fSAgLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRpbmc6MjBweCAxMHB4IDVweH0gIC53b3JrLXRhYmxlcy1kcm9wZG93biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yLCAjOGM4Yzhj'@;
put 'KSFpbXBvcnRhbnR9ICAuc3RhY2stdmlld3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFzay1pbWFnZTpub25lIWltcG9ydGFudDstd2Via2l0LW1hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnR9ICAuY29udGVudCBjbHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0gIC5jb250ZW50IHByZXt3b3Jk'@;
put 'LWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbHt3aWR0aDoxMDAlO3BhZGRpbmctbGVmdDouNnJlbSFpbXBvcnRhbnR9ICAuY29udGVudCAu'@;
put 'c3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9ICAuZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99LmRyb3Bkb3duLWl0ZW0uc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVd'@;
put 'e2JhY2tncm91bmQ6I2Q4ZTNlOX0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6NTBweDtwYWRkaW5nOjEwcHg7bWFyZ2luLXRvcDoxMHB4O3doaXRlLXNwYWNlOnByZS13cmFwO2JvcmRlci1yYWRpdXM6M3B4O2JvcmRlcjoxcHggc29saWQgI2UyZTJlMjtiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNmYmZiZmI7aGVpZ2h0OjQ4dmg7b3ZlcmZsb3c6YXV0b30ubm8tcmVxc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfSJdfSl9cmV0dXJu'@;
put 'IGN9KSgpO2NsYXNzICRBZXtjb25zdHJ1Y3Rvcigpe3RoaXMuc2FzU2VydmljZT1udWxsLHRoaXMubWVzc2FnZT0iIix0aGlzLmRldGFpbHM9bmV3IFVyZX19Y2xhc3MgVXJle31mdW5jdGlvbiBxQWUoYyxsKXtpZigxJmMmJihnZSgwLCJwIiw4KSx6ZSgxLCIgU0FTIFNlcnZpY2U6ICIpLGdl'@;
put 'KDIsInN0cm9uZyIpLHplKDMpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoMykscHIoYS5kYXRhLnNhc1NlcnZpY2UpfX1mdW5jdGlvbiBLQWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDkpKDEsInAiKSgyLCJzdHJvbmciKSx6ZSgzLCJTWVNXQVJOSU5HVEVYVDoiKSxiZSgpLHpl'@;
put 'KDQpLGJlKCksZ2UoNSwicCIpKDYsInN0cm9uZyIpLHplKDcsIlNZU0VSUk9SVEVYVDoiKSxiZSgpLHplKDgpLGJlKCksZ2UoOSwicCIpKDEwLCJzdHJvbmciKSx6ZSgxMSwiTUFDOiIpLGJlKCksemUoMTIpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoNCkseHIoIiAiLGEuZGF0YS5k'@;
put 'ZXRhaWxzLlNZU1dBUk5JTkdURVhULCIiKSx3ZSg0KSx4cigiICIsYS5kYXRhLmRldGFpbHMuU1lTRVJST1JURVhULCIiKSx3ZSg0KSx4cigiICIsYS5kYXRhLmRldGFpbHMuTUFDLCIiKX19ZnVuY3Rpb24gWEFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiwxMCks'@;
put 'SHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm9wZW5Db25maWd1cmF0b3IoKSl9KSx6ZSgxLCIgT3BlbiBjb25maWd1cmF0b3IgIiksYmUoKX19ZnVuY3Rpb24gSkFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiwxMCksSHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm9wZW5SZXF1ZXN0c01vZGFsKCkpfSksemUoMSwiIE9wZW4gcmVxdWVzdHMgbW9kYWwgIiksYmUoKX19ZnVuY3Rpb24gUUFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiwxMCksSHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmRvd25sb2FkTG9nKCkpfSksemUoMSwiIERvd25sb2FkIGxvZyAiKSxiZSgpfX1mdW5jdGlvbiBlTGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEp'@;
put 'LHh0KFplKCkuY2xvc2VBYm9ydE1vZGFsKCkpfSksemUoMSwiIENsb3NlICIpLGJlKCl9fWZ1bmN0aW9uIHRMZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsMTApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5yZWxvYWQoKSl9KSx6'@;
put 'ZSgxLCIgUmVsb2FkICIpLGJlKCl9fWxldCBuTGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrPW5l'@;
put 'dyBJcix0aGlzLmRhdGE9bmV3ICRBZSx0aGlzLmZvcmNlUmVsb2FkPSExLHRoaXMubW9kYWxFbmFibGVkPSEwLHRoaXMuZGVmYXVsdERhdGE9e21vZGFsVGl0bGU6IkFib3J0IE1lc3NhZ2UiLHNhc1NlcnZpY2U6bnVsbCxtZXNzYWdlOiIiLGRldGFpbHM6bmV3IFVyZX19bmdPbkluaXQoKXts'@;
put 'ZXQgYT17Li4udGhpcy5kZWZhdWx0RGF0YSwuLi50aGlzLmRhdGF9O3RoaXMuZGF0YT1hfXNob3dDb25maWd1cmF0b3JCdXR0b24oYSl7Y29uc3QgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKTtyZXR1cm4gYT8uaW5jbHVkZXMoInN0YXJ0dXBzZXJ2aWNlIikmJmQuc2VydmVy'@;
put 'VHlwZT09PUN1LlkuU2FzOX1jbG9zZUFib3J0TW9kYWwoKXt0aGlzLm9uQ29uZmlybU1vZGFsQ2xpY2suZW1pdCgpfW9wZW5Db25maWd1cmF0b3IoKXt0aGlzLmV2ZW50U2VydmljZS5zdGFydHVwRGF0YUxvYWRlZCgpLHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9kZXBsb3kiKSx0aGlz'@;
put 'LmNsb3NlQWJvcnRNb2RhbCgpfWRvd25sb2FkTG9nKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYCR7dGhpcy5kYXRhLnNhc1NlcnZpY2V9LUxPR2AsdGhpcy5kYXRhLmRldGFpbHM/LkxPR3x8IkVycm9yIHBhcnNpbmcgdGhlIGxvZyIpfW9wZW5SZXF1ZXN0c01vZGFs'@;
put 'KCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1yZWxvYWQoKXtsb2NhdGlvbi5yZWxvYWQoKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGN1KSxzdChHbCksc3QoeWEpLHN0KHpzKSl9O3N0YXRpYyN0PXRoaXMu'@;
put 'XHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6'@;
put 'MTIsY29uc3RzOltbImFwcERyYWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQs'@;
put 'Im5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0s'@;
put 'WzEsInNhc1NlcnZpY2UiXSxbMSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiY2xyLW1vZGFsIiwwKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2'@;
put 'KXtyZXR1cm4gcXIoaC5tb2RhbEVuYWJsZWQsdil8fChoLm1vZGFsRW5hYmxlZD12KSx2fSksZ2UoMSwiaDMiLDEpLHplKDIpLGJ0KDMscUFlLDQsMSwicCIsMiksYmUoKSxnZSg0LCJkaXYiLDMpLEp0KDUsImRpdiIsNCksYnQoNixLQWUsMTMsMywiZGl2Iiw1KSxiZSgpLGdlKDcsImRpdiIs'@;
put 'NiksYnQoOCxYQWUsMiwwLCJidXR0b24iLDcpKDksSkFlLDIsMCwiYnV0dG9uIiw3KSgxMCxRQWUsMiwwLCJidXR0b24iLDcpKDExLGVMZSwyLDAsImJ1dHRvbiIsNykoMTIsdExlLDIsMCwiYnV0dG9uIiw3KSxiZSgpKCkpLDImZCYmKFdyKCJjbHJNb2RhbE9wZW4iLGgubW9kYWxFbmFibGVk'@;
put 'KSxQZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsIWguZm9yY2VSZWxvYWQpLHdlKDIpLHhyKCIgIixoLmRhdGEubW9kYWxUaXRsZSwiICIpLHdlKCksUGUoIm5nSWYiLGguZGF0YS5zYXNTZXJ2aWNlJiZoLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCksd2UoMiks'@;
put 'UGUoImlubmVySFRNTCIsaC5kYXRhLm1lc3NhZ2UsRTMpLHdlKCksUGUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksd2UoMiksUGUoIm5nSWYiLGguc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihoLmRhdGEuc2FzU2VydmljZSkpLHdlKCksUGUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0'@;
put 'YWlscyksd2UoKSxQZSgibmdJZiIsKG51bGw9PWguZGF0YS5kZXRhaWxzP251bGw6aC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWguZGF0YS5kZXRhaWxzfHxudWxsPT1oLmRhdGEuZGV0YWlscy5MT0c/bnVsbDpoLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCksd2UoKSxQ'@;
put 'ZSgibmdJZiIsIWguZm9yY2VSZWxvYWQpLHdlKCksUGUoIm5nSWYiLGguZm9yY2VSZWxvYWQpKX0sZGVwZW5kZW5jaWVzOltxaSxCdSxZdSxLYl0sc3R5bGVzOlsiLmNsci1hYm9ydC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9'@;
put 'LmNsci1hYm9ydC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbHt6LWluZGV4OjIwNTB9Lm1vZGFsLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uc2FzU2VydmljZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7'@;
put 'cmlnaHQ6MTBweDttYXJnaW46MH0ubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfS5zeXN0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5n'@;
put 'OjEwcHggMDtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfS5zeXN0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDt3b3JkLXdyYXA6YnJlYWstd29yZH0iXX0pfXJldHVybiBjfSkoKTtjb25zdCByTGU9KCk9PlsiLyJdLFpyZT0o'@;
put 'KT0+WyIvdmlldyJdLFdyZT0oKT0+WyIvaG9tZSJdLGNWPSgpPT5bIi9yZXZpZXcvc3VibWl0dGVkIl0saUxlPSgpPT5bIi9yZXZpZXcvYXBwcm92ZSJdLG9MZT0oKT0+WyIvcmV2aWV3L2hpc3RvcnkiXTtmdW5jdGlvbiBzTGUoYyxsKXsxJmMmJihyaSgwKSxnZSgxLCJkaXYiLDE3KSgyLCJk'@;
put 'aXYiLDE4KSgzLCJkaXYiLDE5KSxKdCg0LCJjZHMtaWNvbiIsMjApLGJlKCksZ2UoNSwiZGl2IiwyMSksemUoNiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIHRvIHVwZ3JhZGUgY29udGFjdCAiKSxKdCg3LCJjb250YWN0LWxpbmsiLDIyKSxiZSgpKCkoKSxnZSg4LCJhIiwyMyks'@;
put 'emUoOSwiVXBkYXRlIExpY2VuY2UgS2V5IiksYmUoKSxpaSgpKX1mdW5jdGlvbiBhTGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxKdCg0LCJjZHMtaWNvbiIsMjApLGJlKCksZ2UoNSwiZGl2IiwyMSksemUo'@;
put 'NiwiIERhdGEgQ29udHJvbGxlciAoRlJFRSBUaWVyKSAtIFByb2JsZW0gd2l0aCBsaWNlbmNlICIpLGJlKCkoKSgpLGdlKDcsImEiLDI0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgzKTtyZXR1cm4geHQoaC5saWNlbmNlUHJvYmxlbURldGFpbHMoaC5saWNlbmNl'@;
put 'UHJvYmxlbS52YWx1ZSkpfSksemUoOCwiTW9yZSBkZXRhaWxzIiksYmUoKSxpaSgpfX1mdW5jdGlvbiBsTGUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDE2KSxidCgxLHNMZSwxMCwwLCJuZy1jb250YWluZXIiLDEpKDIsYUxlLDksMCwibmctY29udGFpbmVyIiwxKSxiZSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIsbnVsbD09PWEubGljZW5jZVByb2JsZW0udmFsdWUpLHdlKCksUGUoIm5nSWYiLG51bGwhPT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKX19ZnVuY3Rpb24gY0xlKGMsbCl7MSZjJiYoZ2UoMCwiYSIsMjMpLHplKDEsIlVwZGF0ZSBMaWNlbmNlIEtl'@;
put 'eSIpLGJlKCkpfWZ1bmN0aW9uIHVMZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMjUpKDEsImRpdiIsMTcpKDIsImRpdiIsMTgpKDMsImRpdiIsMTkpLEp0KDQsImNkcy1pY29uIiwyMCksYmUoKSxnZSg1LCJkaXYiLDIxKSx6ZSg2KSxKdCg3LCJjb250YWN0LWxpbmsiLDIyKSx6ZSg4KSxi'@;
put 'ZSgpKCkoKSxidCg5LGNMZSwyLDAsImEiLDI2KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoNiksdDAoIiBUaGlzIGxpY2Vuc2Uga2V5IHdpbGwgZXhwaXJlIGluICIsYS5saWNlbnNlRXhwaXJpbmdEYXlzLCIgIiwxPT09YS5saWNlbnNlRXhwaXJpbmdEYXlzPyJkYXkiOiJkYXlzIiwi'@;
put 'LiBQbGVhc2UgY29udGFjdCAiKSx3ZSgyKSx4cigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSx3ZSgpLFBlKCJuZ0lmIiwhYS5mcmVlVGllckJhbm5lcil9fWZ1bmN0aW9uIGRM'@;
put 'ZShjLGwpezEmYyYmKGdlKDAsImEiLDIzKSx6ZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxiZSgpKX1mdW5jdGlvbiBoTGUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxKdCg0LCJjZHMtaWNvbiIsMjApLGJlKCksZ2Uo'@;
put 'NSwiZGl2IiwyMSksemUoNiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyBleGNlZWRzIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlvdXIgbGljZW5zZS4gUGxlYXNlIGNvbnRhY3QgIiksSnQoNywiY29udGFjdC1saW5rIiwyMiksemUoOCksYmUoKSgpKCksYnQoOSxkTGUsMiww'@;
put 'LCJhIiwyNiksYmUoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDgpLHhyKCIgb3IgeW91ciByZXNlbGxlciB0byBhcnJhbmdlIGFkZGl0aW9uYWwgbGljZW5jZSBmb3Igc2l0ZSBpZCAiLGEuc3lzc2l0ZS5nZXRWYWx1ZSgpLCIuICIpLHdlKCksUGUoIm5nSWYiLCFhLmxpY2Vuc2VFeHBpcmlu'@;
put 'Z0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKX19ZnVuY3Rpb24gZkxlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxsTGUsMywyLCJkaXYiLDE0KSgyLHVMZSwxMCw0LCJkaXYiLDE1KSgzLGhMZSwxMCwyLCJkaXYiLDE1KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLFBlKCJuZ0lmIixh'@;
put 'LmZyZWVUaWVyQmFubmVyJiYoIWEubGljZW5zZUV4cGlyaW5nRGF5c3x8YS5saWNlbnNlRXhwaXJpbmdEYXlzPDApKSx3ZSgpLFBlKCJuZ0lmIixhLmxpY2Vuc2VFeHBpcmluZ0RheXMmJiFhLmZyZWVUaWVyQmFubmVyKSx3ZSgpLFBlKCJuZ0lmIixhLmFwcE92ZXJDYXBhY2l0eSl9fWZ1bmN0'@;
put 'aW9uIHBMZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS50b2dnbGVTaWRlYmFyKCkpfSksSnQoMSwiY2xyLWljb24iLDI4KSxiZSgpfX1mdW5jdGlvbiBtTGUoYyxsKXsxJmMmJihnZSgw'@;
put 'LCJhIiwyOSksSnQoMSwiaW1nIiwzMCkoMiwiaW1nIiwzMSksYmUoKSksMiZjJiZQZSgicm91dGVyTGluayIsRGEoMSxyTGUpKX1mdW5jdGlvbiBnTGUoYyxsKXsxJmMmJihnZSgwLCJhIiksSnQoMSwic3BhbiIsMzIpLGJlKCkpfWZ1bmN0aW9uIF9MZShjLGwpezEmYyYmKGdlKDAsImNsci1k'@;
put 'cm9wZG93bi1tZW51Iiw0MCkoMSwiYSIsNDEpLHplKDIsIlZJRVciKSxiZSgpLGdlKDMsImEiLDQxKSx6ZSg0LCJMT0FEIiksYmUoKSxnZSg1LCJhIiw0MSksemUoNiwiUkVWSUVXIiksYmUoKSgpKSwyJmMmJih3ZSgpLFBlKCJyb3V0ZXJMaW5rIixEYSgzLFpyZSkpLHdlKDIpLFBlKCJyb3V0'@;
put 'ZXJMaW5rIixEYSg0LFdyZSkpLHdlKDIpLFBlKCJyb3V0ZXJMaW5rIixEYSg1LGNWKSkpfWZ1bmN0aW9uIHZMZShjLGwpe2lmKDEmYyYmKHJpKDApLGdlKDEsImRpdiIsMzMpKDIsImNsci1kcm9wZG93biIpKDMsImJ1dHRvbiIsMzQpLHplKDQsIiBNZW51ICIpLGJlKCksYnQoNSxfTGUsNyw2'@;
put 'LCJjbHItZHJvcGRvd24tbWVudSIsMzUpLGJlKCkoKSxnZSg2LCJkaXYiLDM2KSg3LCJhIiwzNyksemUoOCwiVklFVyIpLGJlKCksZ2UoOSwiYSIsMzgpLHplKDEwLCJMT0FEIiksYmUoKSxnZSgxMSwiYSIsMzkpLHplKDEyLCJSRVZJRVciKSxiZSgpKCksaWkoKSksMiZjKXtjb25zdCBhPVpl'@;
put 'KCk7d2UoNyksUGUoInJvdXRlckxpbmsiLERhKDcsWnJlKSksd2UoMiksYnIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0b3IiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJlZGl0LXJlY29yZCIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhvbWUiKSksUGUoInJvdXRl'@;
put 'ckxpbmsiLERhKDgsV3JlKSksd2UoMiksYnIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxQZSgicm91dGVyTGluayIsRGEoOSxjVikp'@;
put 'fX1mdW5jdGlvbiB5TGUoYyxsKXtpZigxJmMmJihnZSgwLCJuYXYiLDQyKSgxLCJ1bCIsNDMpKDIsImxpIiw0NCkoMywiYSIsMzcpLHplKDQsIlNVQk1JVCIpLGJlKCkoKSxnZSg1LCJsaSIsNDQpKDYsImEiLDM3KSx6ZSg3LCJBUFBST1ZFIiksYmUoKSgpLGdlKDgsImxpIiw0NCkoOSwiYSIs'@;
put 'MzcpLHplKDEwLCJISVNUT1JZIiksYmUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoMyksUGUoInJvdXRlckxpbmsiLERhKDUsY1YpKSx3ZSgzKSxicigiYWN0aXZlIixhLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKSksUGUoInJvdXRlckxpbmsiLERhKDYsaUxlKSksd2Uo'@;
put 'MyksUGUoInJvdXRlckxpbmsiLERhKDcsb0xlKSl9fWZ1bmN0aW9uIGJMZShjLGwpezEmYyYmSnQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0aW9uIHdMZShjLGwpezEmYyYmSnQoMCwicm91dGVyLW91dGxldCIpfWZ1bmN0aW9uIE1MZShjLGwpezEmYyYmSnQoMCwiYXBwLWFsZXJ0cyIpfWZ1bmN0'@;
put 'aW9uIENMZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImFwcC1pbmZvLW1vZGFsIiw0NSksSHQoIm9uQ29uZmlybU1vZGFsQ2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuY2xvc2VBYm9ydE1vZGFsKGguaWQpKX0pLGJlKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoKTtQZSgiZGF0YSIsYSkoImZvcmNlUmVsb2FkIiwhZC5zdGFydHVwRGF0YUxvYWRlZCYmMT09PWQuc2FzanNBYm9ydHMubGVuZ3RoKX19ZnVuY3Rpb24gU0xlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2Iiw0OSksSnQoMSwiZGl2Iiw1MCko'@;
put 'MiwiZGl2Iiw1MSkoMywiZGl2Iiw1MiksYmUoKSl9ZnVuY3Rpb24geExlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw0NiksSnQoMSwiaW1nIiw0NyksYnQoMixTTGUsNCwwLCJkaXYiLDQ4KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgyKSxQZSgibmdJZiIsbnVsbD09PWEuYXBwQWN0'@;
put 'aXZlKX19bGV0IGtMZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixULFkscmUsZmUpe3RoaXMuYXBwU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLmxvY2F0aW9uPXYsdGhpcy5ldmVudFNlcnZpY2U9VCx0'@;
put 'aGlzLmFwcFN0b3JlU2VydmljZT1ZLHRoaXMuY2RyPXJlLHRoaXMuZWxlbWVudFJlZj1mZSx0aGlzLmxpY2Vuc2VFeHBpcmluZ0RheXM9bnVsbCx0aGlzLnNhc2pzQWJvcnRzPVtdLHRoaXMuZWRpdG9yQWN0aXZlPSExLHRoaXMuYXBwcm92ZUFjdGl2ZT0hMSx0aGlzLmZyZWVUaWVyQmFubmVy'@;
put 'PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllci52YWx1ZSx0aGlzLmxpY2VuY2VQcm9ibGVtPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVByb2JsZW0sdGhpcy5hcHBPdmVyQ2FwYWNpdHk9ITEsdGhpcy5hcHBBY3RpdmU9bnVsbCx0aGlzLnJlcXVlc3RzTW9kYWw9ITEsdGhp'@;
put 'cy5zaG93UmVnaXN0cmF0aW9uPSEwLHRoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITEsdGhpcy5kZW1vTGltaXROb3RpY2U9e29wZW46ITEsZmVhdHVyZU5hbWU6IiJ9LHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0ZSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2'@;
put 'aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKSx3aW5kb3cuYXBwaW5mbz0oKT0+e2NvbnNvbGUudGFibGUoeyJBZGFwdGVyIHZlcnNpb24iOiI0LjEwLjIiLCJBcHAgdmVyc2lvbiI6InY2LjguMSIucmVwbGFjZSgidiIsIiIpLCJCdWlsZCB0aW1lc3RhbXAi'@;
put 'OlgxKHBhcnNlSW50KCIxNzE0NjY4Njc1OTQ5IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKSwiLi4uIjoiLi4uIn0pfSx0aGlzLnN1YnNjcmliZVRvTGljZW5zZUV2ZW50cygpLHRoaXMuY29tbWl0VmVyPSJ2Ni44LjEiLnJlcGxhY2UoInYiLCIiKSsiLmdjMGRjOTE5IixoLmV2ZW50'@;
put 'cy5zdWJzY3JpYmUoX2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBrZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1rZT8odGhpcy5lcnJUb3A9ITAs'@;
put 'dGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1rZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITEpLEduLnJvb3RQYXJh'@;
put 'bT1rZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3ZlIikpfSksdGhpcy5zdWJz'@;
put 'Y3JpYmVUb1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2luZG93LmZyYW1lRWxlbWVu'@;
put 'dCYmKHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93LmZyYW1lRWxlbWVudC5z'@;
put 'ZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmli'@;
put 'dXRlKCJzY3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFwcCgpLHZvaWQgc2V0VGlt'@;
put 'ZW91dCgoKT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZvdW5kIil9KTtjb25zdCBk'@;
put 'PWY9PmEuZ2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIiLGFkbWluR3JvdXA6ZCgi'@;
put 'YWRtaW5Hcm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFtZSIpfHwiIixob3RMaWNl'@;
put 'bmNlS2V5OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURldGFpbHMoYSl7dGhpcy5y'@;
put 'b3V0ZXIubmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vbkRlbW9MaW1p'@;
put 'dE1vZGFsU2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhpcy5mcmVlVGllckJhbm5l'@;
put 'cj1hfSksdGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUoYT0+e3RoaXMuYXBwT3Zl'@;
put 'ckNhcGFjaXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9uU2hvd0Fib3J0TW9k'@;
put 'YWwuc3Vic2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1'@;
put 'YnNjcmliZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VBYm9ydE1vZGFsKGEpe2xl'@;
put 'dCBkPXRoaXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNs'@;
put 'dWRlcyhhKX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChXayksc3QoaDEpLHN0KHpzKSxzdChNYyksc3QocTEpLHN0'@;
put 'KEdsKSxzdChpNyksc3QoRmEpLHN0KCRpKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbIm15LWFwcCJdXSxkZWNsczoyNSx2YXJzOjE3LGNvbnN0czpbWzEsIm1haW4tY29udGFpbmVyIl0sWzQsIm5nSWYiXSxbMSwiYXBwLWhlYWRlciJdLFsidHlw'@;
put 'ZSIsImJ1dHRvbiIsImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIgc2VsZWN0LW5vbmUgbWwtMTAgZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImxvZ28iLCJkLWZsZXgiLCJjbHItYWxpZ24taXRl'@;
put 'bXMtY2VudGVyIl0sWyJocmVmIiwiIyIsImNsYXNzIiwibmF2LWxpbmsiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwic3VibmF2Iiw0LCJuZ0lmIl0sWzMsIm9wZW5lZENoYW5nZSIsIm9wZW5lZCJdLFszLCJkYXRhIiwiZm9yY2VSZWxvYWQiLCJvbkNvbmZpcm1Nb2RhbENs'@;
put 'aWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcERyYWdOZHJvcCIsIiIsMSwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbInNpemUi'@;
put 'LCIyMCIsInNoYXBlIiwibG9jayJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsImFwcC1sb2FkaW5nIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC13YXJuaW5nIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsi'@;
put 'Y2xhc3MiLCJhbGVydCBhbGVydC1hcHAtbGV2ZWwgYWxlcnQtZGFuZ2VyIiwiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsNCwibmdJZiJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC13YXJuaW5n'@;
put 'Il0sWzEsImFsZXJ0LWl0ZW1zIl0sWzEsImFsZXJ0LWl0ZW0iLCJzdGF0aWMiXSxbMSwiYWxlcnQtaWNvbi13cmFwcGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLDEsImFsZXJ0LWljb24iXSxbMSwiYWxlcnQtdGV4dCJdLFsiY2xhc3NlcyIsImNvbG9yLXdoaXRlIl0sWyJyb3V0'@;
put 'ZXJMaW5rIiwiL2xpY2Vuc2luZy91cGRhdGUiLDEsInVwZGF0ZS1rZXkiXSxbMSwidXBkYXRlLWtleSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiaWQiLCJkZW1vLWJhbm5lciIsInJvbGUiLCJhbGVydCIsMSwiYWxlcnQiLCJhbGVydC1hcHAtbGV2ZWwiLCJhbGVydC1kYW5nZXIi'@;
put 'XSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsImNsYXNzIiwidXBkYXRlLWtleSIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiY3Vyc29yLXBvaW50ZXIiLCJzZWxlY3Qtbm9uZSIsIm1sLTEwIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJj'@;
put 'bHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsic2l6ZSIsIjI0Iiwic2hhcGUiLCJ0cmVlLXZpZXciXSxbImhyZWYiLCIjIiwxLCJuYXYtbGluayIsMywicm91dGVyTGluayJdLFsic3JjIiwiL1NBU0pvYkV4ZWN1dGlvbj9fRklMRT0vUHVibGljL2FwcC9kYy9zZXJ2aWNlcy93'@;
put 'ZWIvaW1hZ2VzL2RjLWxvZ28uc3ZnIiwxLCJ3aXRob3V0LXRleHQiLCJkLWJsb2NrIiwiZC1tZC1ub25lIl0sWyJzcmMiLCIvU0FTSm9iRXhlY3V0aW9uP19GSUxFPS9QdWJsaWMvYXBwL2RjL3NlcnZpY2VzL3dlYi9pbWFnZXMvZGF0YWNvbnRyb2xsZXIuc3ZnIiwxLCJ3aXRoLXRleHQiLCJk'@;
put 'LW5vbmUiLCJkLW1kLWJsb2NrIl0sWzEsImNsci1pY29uIiwiaGVhZGVyLWxvZ28iLCJtbC0xMCJdLFsxLCJoZWFkZXItbmF2IiwiZC1mbGV4IiwiZC1zbS1ub25lIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLCJhcmlhLWxhYmVsIiwidG9nZ2xlIHNldHRpbmdzIG1lbnUiLDEsIm5hdi1p'@;
put 'Y29uIiwiY29sb3Itd2hpdGUtaSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsNCwiY2xySWZPcGVuIl0sWzEsImhlYWRlci1uYXYiLCJkLW5vbmUiLCJkLXNtLWZsZXgiXSxbInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRl'@;
put 'ckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4dCIsMywicm91dGVyTGluayJdLFsxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwiY3Vyc29yLXBvaW50ZXIiLDMsInJvdXRlckxpbmsiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywicm91'@;
put 'dGVyTGluayJdLFsxLCJzdWJuYXYiXSxbMSwibmF2Il0sWzEsIm5hdi1pdGVtIl0sWzMsIm9uQ29uZmlybU1vZGFsQ2xpY2siLCJkYXRhIiwiZm9yY2VSZWxvYWQiXSxbMSwiYXBwLWxvYWRpbmciXSxbInNyYyIsIi9TQVNKb2JFeGVjdXRpb24/X0ZJTEU9L1B1YmxpYy9hcHAvZGMvc2Vydmlj'@;
put 'ZXMvd2ViL2ltYWdlcy9kYXRhY29udHJvbGxlci5zdmciLDEsImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJzbGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVyIl0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQs'@;
put 'aCl7MSZkJiYoZ2UoMCwiZGl2IiwwKSxidCgxLGZMZSw0LDMsIm5nLWNvbnRhaW5lciIsMSksZ2UoMiwiaGVhZGVyIiwyKSxidCgzLHBMZSwyLDAsImRpdiIsMyksZ2UoNCwiZGl2Iiw0KSxidCg1LG1MZSwzLDIsImEiLDUpKDYsZ0xlLDIsMCwiYSIsMSksYmUoKSxidCg3LHZMZSwxMywxMCwi'@;
put 'bmctY29udGFpbmVyIiwxKSxKdCg4LCJhcHAtaGVhZGVyLWFjdGlvbnMiKSxiZSgpLGJ0KDkseUxlLDExLDgsIm5hdiIsNikoMTAsYkxlLDEsMCwiYXBwLWFsZXJ0cyIsMSksZ2UoMTEsImFwcC1yZXF1ZXN0cy1tb2RhbCIsNyksR3IoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJu'@;
put 'IHFyKGgucmVxdWVzdHNNb2RhbCx2KXx8KGgucmVxdWVzdHNNb2RhbD12KSx2fSksYmUoKSxidCgxMix3TGUsMSwwLCJyb3V0ZXItb3V0bGV0IiwxKSxKdCgxMywiYXBwLWxvZ2luIiksYnQoMTQsTUxlLDEsMCwiYXBwLWFsZXJ0cyIsMSkoMTUsQ0xlLDEsMiwiYXBwLWluZm8tbW9kYWwiLDgp'@;
put 'LGdlKDE2LCJjbHItbW9kYWwiLDkpLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBxcihoLmRlbW9MaW1pdE5vdGljZS5vcGVuLHYpfHwoaC5kZW1vTGltaXROb3RpY2Uub3Blbj12KSx2fSksZ2UoMTcsImgzIiwxMCksemUoMTgpLEp0KDE5LCJjbHItaWNvbiIs'@;
put 'MTEpLGJlKCksZ2UoMjAsImRpdiIsMTIpLHplKDIxLCIgQ29udGFjdCAiKSxKdCgyMiwiY29udGFjdC1saW5rIiksemUoMjMpLGJlKCkoKSgpLGJ0KDI0LHhMZSwzLDEsImRpdiIsMTMpKSwyJmQmJih3ZSgpLFBlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSks'@;
put 'd2UoMiksUGUoIm5nSWYiLGguaXNNYWluUm91dGUoInZpZXciKXx8aC5pc01haW5Sb3V0ZSgiaG9tZSIpJiYhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJsaWNlbnNpbmciKSksd2UoMiksUGUoIm5nSWYiLCFoLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSx3ZSgpLFBlKCJuZ0lmIixo'@;
put 'LnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpKSx3ZSgpLFBlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSYmIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLHdlKDIpLFBlKCJuZ0lmIixoLnJvdXRlci51cmwuaW5jbHVkZXMoInN1Ym1pdHRl'@;
put 'ZCIpfHxoLnJvdXRlci51cmwuaW5jbHVkZXMoImFwcHJvdmUiKXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJoaXN0b3J5IikpLHdlKCksUGUoIm5nSWYiLCFoLmVyclRvcCksd2UoKSxXcigib3BlbmVkIixoLnJlcXVlc3RzTW9kYWwpLHdlKCksUGUoIm5nSWYiLGguc3RhcnR1cERhdGFMb2Fk'@;
put 'ZWQpLHdlKDIpLFBlKCJuZ0lmIixoLmVyclRvcCksd2UoKSxQZSgibmdGb3JPZiIsaC5zYXNqc0Fib3J0cyksd2UoKSxXcigiY2xyTW9kYWxPcGVuIixoLmRlbW9MaW1pdE5vdGljZS5vcGVuKSxQZSgiY2xyTW9kYWxDbG9zYWJsZSIsITApKCJjbHJNb2RhbFNpemUiLCJsZyIpLHdlKDIpLHhy'@;
put 'KCIgTG9ja2VkIEZlYXR1cmUgKCIsaC5kZW1vTGltaXROb3RpY2UuZmVhdHVyZU5hbWUsIikgIiksd2UoNSkseHIoIiB3aXRoIHlvdXIgc2l0ZSBpZCAoIixoLnN5c3NpdGUudmFsdWUsIikgdG8gYWN0aXZhdGUhICIpLHdlKCksUGUoIm5nSWYiLCFoLnN0YXJ0dXBEYXRhTG9hZGVkKSl9LGRl'@;
put 'cGVuZGVuY2llczpbTHMscWksSTQsazAsS3ksc0FlLHlBZSxNQWUsblQsV2IsWmEsS3MsQnUsWXUsWGQsdHAsVGcsRGcsZTksS2IsR0FlLG5MZV0sc3R5bGVzOlsiYXBwLXJlcXVlc3RzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMDAwfWhlYWRlci5hcHAtaGVhZGVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmxvZ29bX25nY29udGVudC0lQ09NUCVdICAgaW1nLndpdGhvdXQtdGV4dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweH0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcud2l0'@;
put 'aC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMTBweH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH0uZGVtby1leHBpcmVkLW5vdGlj'@;
put 'ZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTtiYWNr'@;
put 'Z3JvdW5kOiMyMTIxMjE4MH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MzBweDt6LWluZGV4OjExMDtiYWNr'@;
put 'Z3JvdW5kOiMzMTQzNTF9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTA7Zm9udC1zaXplOjE2cHh9LmRlbW8t'@;
put 'ZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLm1haWx0b1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzhkYzUzZX0ubWFpbi1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnVwZGF0ZS1rZXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgMTBweDtiYWNrZ3JvdW5kOiMwMDAwMDAyNn0uYWxlcnQtaWNvbi13cmFwcGVyW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5uYXYtdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjIwcHh9LnNpZGViYXItdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmct'@;
put 'bGVmdDoxMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlci1hY3Rpb25zW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246dW5zZXR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y29sb3I6I2ZhZmFmYX1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLm5h'@;
put 'di1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojNjE3MTdkfS5ub3RmW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH0uYnRuLmJ0bi1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtib3Jk'@;
put 'ZXItY29sb3I6IzYyYTQyMDtiYWNrZ3JvdW5kLWNvbG9yOiMxNmE1N2EhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmJ0bi5idG4tc3VjY2Vzc1tfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMmFkZDM5O2NvbG9yOiNmZmZ9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojNjE3MTdkO2JhY2tncm91bmQtY29sb3I6IzYxNzE3ZDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0'@;
put 'cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNrZ3JvdW5kLWNvbG9yfS5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDoxMDB2aCFpbXBvcnRhbnR9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5l'@;
put 'cltfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW0gMXJlbSAxcmVtfS5jb250ZW50LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDowIWltcG9ydGFudH0ubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50'@;
put 'OmZsZXgtc3RhcnQ7YmFja2dyb3VuZDojNDk1YTY3O2NvbG9yOiNmZmZ9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMVtfbmdjb250ZW50LSVDT01QJV0gICAubmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdj'@;
put 'b250ZW50LSVDT01QJV0sIC5tYWluLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250'@;
put 'YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnN1Ym5hdi5jbHItbmF2LWxldmVsLTJbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuNXJlbSAwIDFyZW07d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47'@;
put 'dGV4dC1vdmVyZmxvdzplbGxpcHNpcztib3JkZXItcmFkaXVzOi4xMjVyZW0gMCAwIC4xMjVyZW07Y29sb3I6Izk1Yzg0Yn0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV0sIC5jYXJkLWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDAgMH0ubWFpbi1jb250YWlu'@;
put 'ZXJbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC1jMF1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbX19ICAuaHRJbnZh'@;
put 'bGlke2JhY2tncm91bmQ6IzAwMCFpbXBvcnRhbnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpeyAgaDJ7Zm9udC1zaXplOi43cmVtIWltcG9ydGFudH0gIGgze2ZvbnQtc2l6ZTouN3JlbX19ICAubmF2LWxpbmt7cGFkZGluZzowcmVtIDFyZW19ICAuYnRuLXByaW1hcnkg'@;
put 'LmJ0biwgICAuYnRuLmJ0bi1wcmltYXJ5e2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtjb2xvcjojZmZmfSAgLmJ0bntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9jazstd2Via2l0LWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVy'@;
put 'LXJhZGl1czouMTI1cmVtO2JvcmRlcjoxcHggc29saWQ7bWluLXdpZHRoOjNyZW07bWF4LXdpZHRoOjE1cmVtO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7'@;
put 'dmVydGljYWwtYWxpZ246bWlkZGxlO2xpbmUtaGVpZ2h0OjEuNXJlbTtsZXR0ZXItc3BhY2luZzouMTJlbTtmb250LXNpemU6LjVyZW07Zm9udC13ZWlnaHQ6NTAwO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVtO2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6dHJh'@;
put 'bnNwYXJlbnQ7Y29sb3I6IzMxNDM1MX0gIC5idG4uYnRuLW91dGxpbmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMzE0MzUxfSAgLmJ0bi5idG4tb3V0bGluZTpob3Zlcntib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNv'@;
put 'bG9yOiM0OTVhNjc7Y29sb3I6I2ZmZn0gIC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM1ZWE3MWY7Y29sb3I6I2ZmZjdmNztib3JkZXItY29sb3I6IzlhOTY5Nn0gIC5odE1vYmlsZUVkaXRvckNvbnRhaW5lciAuaW5wdXRzIHRleHRhcmVhe2ZvbnQt'@;
put 'c2l6ZToxM3B0O2JvcmRlcjoycHggc29saWQgIzQ4NTk2Nztib3JkZXItcmFkaXVzOjRweDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTtib3gtc2hhZG93Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MCAwIDAgMTRweDtwYWRkaW5nOjdwdDt3aWR0aDoyOTBweH0gIC5odE1vYmlsZUVk'@;
put 'aXRvckNvbnRhaW5lciAucG9zaXRpb25Db250cm9sc3t3aWR0aDozMzNweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDo1cHQ7dG9wOjUwcHg7Ym90dG9tOjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIuYWN0aXZle2Rpc3Bs'@;
put 'YXk6YmxvY2s7aGVpZ2h0OjEyMHB4O3dpZHRoOjM1MHB4fSAgLmhhbmRzb250YWJsZXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7Ym9yZGVyLXJhZGl1czozcHh9ICAuaGFuZHNvbnRhYmxlIHRoe2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX0gIC5odF9jbG9uZV9sZWZ0IHRoe2JvcmRlci1yaWdo'@;
put 'dDoxcHggc29saWQgI2NjYztib3JkZXItbGVmdDoxcHggc29saWQgI2NjY30gIC5odF9jbG9uZV90b3AgdGh7Ym9yZGVyLXRvcDoxcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NjY30gIC5odF9jbG9uZV90b3BfbGVm'@;
put 'dF9jb3JuZXIgdGh7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjfSAgLmh0X21hc3RlciB0cjpudGgtb2YtdHlwZShvZGQpPnRke2JhY2tncm91bmQtY29sb3I6I2YzZjNmMztib3JkZXI6MXB4IHNvbGlkIHJnYigxOTcsMTk3LDE5Nyk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiKDIz'@;
put 'NiwyMzUsMjM1KX0gIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUoMm4pPnRke2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHJnYigxOTcsMTk3LDE5Nyk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiKDIzNiwyMzUsMjM1KX0gIC53dEJvcmRlcntiYWNrZ3JvdW5k'@;
put 'LWNvbG9yOiM0OTVhNjchaW1wb3J0YW50fSAgLmhhbmRzb250YWJsZSAuaGFuZHNvbnRhYmxlLmh0X2Nsb25lX3RvcCAud3RIaWRlcntwYWRkaW5nOjAhaW1wb3J0YW50O21hcmdpbjowO2JvcmRlci1ib3R0b206M3B4IHNvbGlkICNkNmQzZDN9ICAuY29udGVudC1jb250YWluZXJ7YmFja2dy'@;
put 'b3VuZDojZjVmNmZmfSAgLmNhcmR7Ym94LXNoYWRvdzowIC4xMjVyZW0gI2Q3ZDdkNztib3JkZXItcmFkaXVzOjByZW07Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZCwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWR7Ym9yZGVy'@;
put 'LWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlcjoxcHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtjb2xvcjojNTY1NjU2O21hcmdpbjowO21hcmdpbi10b3A6MXJlbTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlO3BhZGRpbmc6'@;
put 'MTVweCAxNXB4IDUwcHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdCwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQ7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW07bGluZS1oZWlnaHQ6Y2FsYygxLjVyZW0g'@;
put 'LSAzcHgpO2ZvbnQtc2l6ZTouNDU4MzNyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2M7Ym9yZGVyLXJhZGl1czowfSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQtZm9vdGVy'@;
put 'e3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE1cHg7dG9wOjJweH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZCAuZGF0YWdyaWQtaGVhZCwgICAuZGF0YWdyaWQtaGlzdG9yeSAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWR7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlci1ib3R0b206'@;
put 'MXB4IHNvbGlkICNjY2N9ICAuZHJvcGRvd24tbWVudXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTtsZWZ0OjA7bWFyZ2luLXRvcDouMDgzMzMzcmVtO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YmFja2dyb3VuZDojZjVmNmZmO3BhZGRpbmc6LjVyZW0gMDtib3JkZXI6'@;
put 'MXB4IHNvbGlkICNjY2M7Ym94LXNoYWRvdzowIDFweCAuMTI1cmVtICM3MzczNzM0MDttaW4td2lkdGg6NXJlbTttYXgtd2lkdGg6MTVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0gIC50YWJsZXtib3JkZXItY29sbGFwc2U6c2VwYXJh'@;
put 'dGU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2NvbG9yOiM1NjU2NTY7bWFyZ2luOjA7bWFyZ2luLXRvcDoxcmVtO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCV9ICAudGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3Jl'@;
put 'bTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNpbmc6LjAzZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO3ZlcnRpY2FsLWFsaWduOmJvdHRvbTtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZX0gIC5tb2RhbC1oZWFkZXJ7Ym9yZGVyLWJvdHRv'@;
put 'bToycHggc29saWQgI2U0ZTRlNDtwYWRkaW5nOjAgMCAuNXJlbTttYXJnaW4tYm90dG9tOjFyZW19ICAubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVye21pbi1oZWlnaHQ6MHB4O3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbG9hZGluZ1tfbmdjb250ZW50LSVDT01QJV0gICAubG9h'@;
put 'ZGluZy1sb2dvW19uZ2NvbnRlbnQtJUNPTVAlXXttYXgtd2lkdGg6NDAwcHg7d2lkdGg6MTAwJX0iXX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBHcmUoYyl7cmV0dXJuIG5ldyB6bigzZTMsITEpfWZ1bmN0aW9uIEo0KGMpe3N3aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgcGI7'@;
put 'Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyBJZWUoYyl9fWZ1bmN0aW9uICRyZShjLGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCB2PS0xLFQ9bnVsbDtpZihsLmZvckVhY2goWT0+e2NvbnN0IHJlPVkuZ2V0KCJvZmZzZXQiKSxmZT1yZT09'@;
put 'dixfZT1mZSYmVHx8bmV3IE1hcDtZLmZvckVhY2goKGtlLFdlKT0+e2xldCBKZT1XZSx0dD1rZTtpZigib2Zmc2V0IiE9PVdlKXN3aXRjaChKZT1jLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShKZSxoKSx0dCl7Y2FzZSIhIjp0dD1hLmdldChXZSk7YnJlYWs7Y2FzZSBXMzp0dD1kLmdldChXZSk7'@;
put 'YnJlYWs7ZGVmYXVsdDp0dD1jLm5vcm1hbGl6ZVN0eWxlVmFsdWUoV2UsSmUsdHQsaCl9X2Uuc2V0KEplLHR0KX0pLGZlfHxmLnB1c2goX2UpLFQ9X2Usdj1yZX0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIHFMZShjKXtyZXR1cm4gbmV3IHpuKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0'@;
put 'aW9uIHVWKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmZFYoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZkVihhLCJkb25lIixjKSkpO2JyZWFrO2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQo'@;
put 'YSYmZFYoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gZFYoYyxsLGEpe2NvbnN0IGY9aFYoYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRvdGFsVGltZSwhIWEuZGlzYWJsZWQpLHY9Yy5fZGF0YTty'@;
put 'ZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9diksZn1mdW5jdGlvbiBoVihjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxUaW1lOmYsZGlzYWJsZWQ6ISF2fX1mdW5jdGlvbiBkZChj'@;
put 'LGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIHFyZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgYUllPXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVu'@;
put 'dC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24gZlYoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PWFJZT9udWxsOmx9bGV0IFJnPW51bGwsS3JlPSExO2Z1bmN0aW9uIFhyZShjLGwpe2Zvcig7bDspe2lmKGw9PT1jKXJldHVybiEwO2w9ZlYobCl9cmV0'@;
put 'dXJuITF9ZnVuY3Rpb24gSnJlKGMsbCxhKXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltdfWxldCBwVj0oKCk9PntjbGFzcyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24gY0llKGMpe1JnfHwoUmc9ZnVuY3Rpb24gdUllKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxLcmU9ISFSZy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4gUmcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBSZy5zdHls'@;
put 'ZSYmIWZ1bmN0aW9uIGxJZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBSZy5zdHlsZSwhbCYmS3JlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlpbiBSZy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50'@;
put 'KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIFhyZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIGZWKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gSnJlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxkLGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYs'@;
put 'dixUPVtdLFkpe3JldHVybiBuZXcgcGIoaCxmKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJldHVybiBjfSkoKTtjbGFzcyBtVntz'@;
put 'dGF0aWMjZT10aGlzLk5PT1A9bmV3IHBWfWNsYXNzIGdWe31jb25zdCBoSWU9MWUzLF9WPSJuZy1lbnRlciIsclQ9Im5nLWxlYXZlIixpVD0ibmctdHJpZ2dlciIsb1Q9Ii5uZy10cmlnZ2VyIixlaWU9Im5nLWFuaW1hdGluZyIsdlY9Ii5uZy1hbmltYXRpbmciO2Z1bmN0aW9uIHJwKGMpe2lm'@;
put 'KCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gYztjb25zdCBsPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpLyk7cmV0dXJuIWx8fGwubGVuZ3RoPDI/MDp5VihwYXJzZUZsb2F0KGxbMV0pLGxbMl0pfWZ1bmN0aW9uIHlWKGMsbCl7cmV0dXJuInMiPT09bD9jKmhJZTpjfWZ1bmN0aW9uIHNU'@;
put 'KGMsbCxhKXtyZXR1cm4gYy5oYXNPd25Qcm9wZXJ0eSgiZHVyYXRpb24iKT9jOmZ1bmN0aW9uIHBJZShjLGwsYSl7bGV0IGgsZj0wLHY9IiI7aWYoInN0cmluZyI9PXR5cGVvZiBjKXtjb25zdCBUPWMubWF0Y2goL14oLT9bXC5cZF0rKShtP3MpKD86XHMrKC0/W1wuXGRdKykobT9zKSk/KD86'@;
put 'XHMrKFstYS16XSsoPzpcKC4rP1wpKT8pKT8kL2kpO2lmKG51bGw9PT1UKXJldHVybiBsLnB1c2goR3JlKCkpLHtkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiIifTtoPXlWKHBhcnNlRmxvYXQoVFsxXSksVFsyXSk7Y29uc3QgWT1UWzNdO251bGwhPVkmJihmPXlWKHBhcnNlRmxvYXQoWSks'@;
put 'VFs0XSkpO2NvbnN0IHJlPVRbNV07cmUmJih2PXJlKX1lbHNlIGg9YztpZighYSl7bGV0IFQ9ITEsWT1sLmxlbmd0aDtoPDAmJihsLnB1c2goZnVuY3Rpb24gRUxlKCl7cmV0dXJuIG5ldyB6bigzMTAwLCExKX0oKSksVD0hMCksZjwwJiYobC5wdXNoKGZ1bmN0aW9uIFRMZSgpe3JldHVybiBu'@;
put 'ZXcgem4oMzEwMSwhMSl9KCkpLFQ9ITApLFQmJmwuc3BsaWNlKFksMCxHcmUoKSl9cmV0dXJue2R1cmF0aW9uOmgsZGVsYXk6ZixlYXNpbmc6dn19KGMsbCxhKX1mdW5jdGlvbiBNZihjLGwsYSl7bC5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj13VihoKTthJiYhYS5oYXMoaCkmJmEuc2V0KGgs'@;
put 'Yy5zdHlsZVtmXSksYy5zdHlsZVtmXT1kfSl9ZnVuY3Rpb24gT2coYyxsKXtsLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXdWKGQpO2Muc3R5bGVbaF09IiJ9KX1mdW5jdGlvbiBYYihjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT8xPT1jLmxlbmd0aD9jWzBdOmZ1bmN0aW9uIGViZShjLGw9'@;
put 'bnVsbCl7cmV0dXJue3R5cGU6Sm8uU2VxdWVuY2Usc3RlcHM6YyxvcHRpb25zOmx9fShjKTpjfWNvbnN0IGJWPW5ldyBSZWdFeHAoInt7XFxzKiguKz8pXFxzKn19IiwiZyIpO2Z1bmN0aW9uIG5pZShjKXtsZXQgbD1bXTtpZigic3RyaW5nIj09dHlwZW9mIGMpe2xldCBhO2Zvcig7YT1iVi5l'@;
put 'eGVjKGMpOylsLnB1c2goYVsxXSk7YlYubGFzdEluZGV4PTB9cmV0dXJuIGx9ZnVuY3Rpb24gSmIoYyxsLGEpe2NvbnN0IGQ9YCR7Y31gLGg9ZC5yZXBsYWNlKGJWLChmLHYpPT57bGV0IFQ9bFt2XTtyZXR1cm4gbnVsbD09VCYmKGEucHVzaChmdW5jdGlvbiBBTGUoYyl7cmV0dXJuIG5ldyB6'@;
put 'bigzMDAzLCExKX0oKSksVD0iIiksVC50b1N0cmluZygpfSk7cmV0dXJuIGg9PWQ/YzpofWNvbnN0IF9JZT0vLSsoW2EtejAtOV0pL2c7ZnVuY3Rpb24gd1YoYyl7cmV0dXJuIGMucmVwbGFjZShfSWUsKC4uLmwpPT5sWzFdLnRvVXBwZXJDYXNlKCkpfWZ1bmN0aW9uIGhkKGMsbCxhKXtzd2l0'@;
put 'Y2gobC50eXBlKXtjYXNlIEpvLlRyaWdnZXI6cmV0dXJuIGMudmlzaXRUcmlnZ2VyKGwsYSk7Y2FzZSBKby5TdGF0ZTpyZXR1cm4gYy52aXNpdFN0YXRlKGwsYSk7Y2FzZSBKby5UcmFuc2l0aW9uOnJldHVybiBjLnZpc2l0VHJhbnNpdGlvbihsLGEpO2Nhc2UgSm8uU2VxdWVuY2U6cmV0dXJu'@;
put 'IGMudmlzaXRTZXF1ZW5jZShsLGEpO2Nhc2UgSm8uR3JvdXA6cmV0dXJuIGMudmlzaXRHcm91cChsLGEpO2Nhc2UgSm8uQW5pbWF0ZTpyZXR1cm4gYy52aXNpdEFuaW1hdGUobCxhKTtjYXNlIEpvLktleWZyYW1lczpyZXR1cm4gYy52aXNpdEtleWZyYW1lcyhsLGEpO2Nhc2UgSm8uU3R5bGU6'@;
put 'cmV0dXJuIGMudmlzaXRTdHlsZShsLGEpO2Nhc2UgSm8uUmVmZXJlbmNlOnJldHVybiBjLnZpc2l0UmVmZXJlbmNlKGwsYSk7Y2FzZSBKby5BbmltYXRlQ2hpbGQ6cmV0dXJuIGMudmlzaXRBbmltYXRlQ2hpbGQobCxhKTtjYXNlIEpvLkFuaW1hdGVSZWY6cmV0dXJuIGMudmlzaXRBbmltYXRl'@;
put 'UmVmKGwsYSk7Y2FzZSBKby5RdWVyeTpyZXR1cm4gYy52aXNpdFF1ZXJ5KGwsYSk7Y2FzZSBKby5TdGFnZ2VyOnJldHVybiBjLnZpc2l0U3RhZ2dlcihsLGEpO2RlZmF1bHQ6dGhyb3cgZnVuY3Rpb24gTExlKGMpe3JldHVybiBuZXcgem4oMzAwNCwhMSl9KCl9fWZ1bmN0aW9uIE1WKGMsbCl7'@;
put 'cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGMpW2xdfWNvbnN0IGJJZT1uZXcgU2V0KFsid2lkdGgiLCJoZWlnaHQiLCJtaW5XaWR0aCIsIm1pbkhlaWdodCIsIm1heFdpZHRoIiwibWF4SGVpZ2h0IiwibGVmdCIsInRvcCIsImJvdHRvbSIsInJpZ2h0IiwiZm9udFNpemUiLCJvdXRs'@;
put 'aW5lV2lkdGgiLCJvdXRsaW5lT2Zmc2V0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ0JvdHRvbSIsInBhZGRpbmdSaWdodCIsIm1hcmdpblRvcCIsIm1hcmdpbkxlZnQiLCJtYXJnaW5Cb3R0b20iLCJtYXJnaW5SaWdodCIsImJvcmRlclJhZGl1cyIsImJvcmRlcldpZHRo'@;
put 'IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJ0ZXh0SW5kZW50IiwicGVyc3BlY3RpdmUiXSk7Y2xhc3MgcmllIGV4dGVuZHMgZ1Z7bm9ybWFsaXplUHJvcGVydHlOYW1lKGwsYSl7cmV0dXJuIHdWKGwp'@;
put 'fW5vcm1hbGl6ZVN0eWxlVmFsdWUobCxhLGQsaCl7bGV0IGY9IiI7Y29uc3Qgdj1kLnRvU3RyaW5nKCkudHJpbSgpO2lmKGJJZS5oYXMoYSkmJjAhPT1kJiYiMCIhPT1kKWlmKCJudW1iZXIiPT10eXBlb2YgZClmPSJweCI7ZWxzZXtjb25zdCBUPWQubWF0Y2goL15bKy1dP1tcZFwuXSsoW2Et'@;
put 'el0qKSQvKTtUJiYwPT1UWzFdLmxlbmd0aCYmaC5wdXNoKGZ1bmN0aW9uIElMZShjLGwpe3JldHVybiBuZXcgem4oMzAwNSwhMSl9KCkpfXJldHVybiB2K2Z9fWNvbnN0IGFUPSIqIjtjb25zdCBsVD1uZXcgU2V0KFsidHJ1ZSIsIjEiXSksY1Q9bmV3IFNldChbImZhbHNlIiwiMCJdKTtmdW5j'@;
put 'dGlvbiBpaWUoYyxsKXtjb25zdCBhPWxULmhhcyhjKXx8Y1QuaGFzKGMpLGQ9bFQuaGFzKGwpfHxjVC5oYXMobCk7cmV0dXJuKGgsZik9PntsZXQgdj1jPT1hVHx8Yz09aCxUPWw9PWFUfHxsPT1mO3JldHVybiF2JiZhJiYiYm9vbGVhbiI9PXR5cGVvZiBoJiYodj1oP2xULmhhcyhjKTpjVC5o'@;
put 'YXMoYykpLCFUJiZkJiYiYm9vbGVhbiI9PXR5cGVvZiBmJiYoVD1mP2xULmhhcyhsKTpjVC5oYXMobCkpLHYmJlR9fWNvbnN0IFNJZT1uZXcgUmVnRXhwKCJzKjpzZWxmcyosPyIsImciKTtmdW5jdGlvbiBDVihjLGwsYSxkKXtyZXR1cm4gbmV3IHhJZShjKS5idWlsZChsLGEsZCl9Y2xhc3Mg'@;
put 'eElle2NvbnN0cnVjdG9yKGwpe3RoaXMuX2RyaXZlcj1sfWJ1aWxkKGwsYSxkKXtjb25zdCBoPW5ldyBUSWUoYSk7cmV0dXJuIHRoaXMuX3Jlc2V0Q29udGV4dFN0eWxlVGltaW5nU3RhdGUoaCksaGQodGhpcyxYYihsKSxoKX1fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShsKXtsLmN1'@;
put 'cnJlbnRRdWVyeVNlbGVjdG9yPSIiLGwuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsbC5jb2xsZWN0ZWRTdHlsZXMuc2V0KCIiLG5ldyBNYXApLGwuY3VycmVudFRpbWU9MH12aXNpdFRyaWdnZXIobCxhKXtsZXQgZD1hLnF1ZXJ5Q291bnQ9MCxoPWEuZGVwQ291bnQ9MDtjb25zdCBmPVtdLHY9'@;
put 'W107cmV0dXJuIkAiPT1sLm5hbWUuY2hhckF0KDApJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFJMZSgpe3JldHVybiBuZXcgem4oMzAwNiwhMSl9KCkpLGwuZGVmaW5pdGlvbnMuZm9yRWFjaChUPT57aWYodGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShhKSxULnR5cGU9PUpv'@;
put 'LlN0YXRlKXtjb25zdCBZPVQscmU9WS5uYW1lO3JlLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGZlPT57WS5uYW1lPWZlLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoWSxhKSl9KSxZLm5hbWU9cmV9ZWxzZSBpZihULnR5cGU9PUpvLlRyYW5zaXRpb24pe2NvbnN0IFk9dGhp'@;
put 'cy52aXNpdFRyYW5zaXRpb24oVCxhKTtkKz1ZLnF1ZXJ5Q291bnQsaCs9WS5kZXBDb3VudCx2LnB1c2goWSl9ZWxzZSBhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIE9MZSgpe3JldHVybiBuZXcgem4oMzAwNywhMSl9KCkpfSkse3R5cGU6Sm8uVHJpZ2dlcixuYW1lOmwubmFtZSxzdGF0ZXM6Zix0'@;
put 'cmFuc2l0aW9uczp2LHF1ZXJ5Q291bnQ6ZCxkZXBDb3VudDpoLG9wdGlvbnM6bnVsbH19dmlzaXRTdGF0ZShsLGEpe2NvbnN0IGQ9dGhpcy52aXNpdFN0eWxlKGwuc3R5bGVzLGEpLGg9bC5vcHRpb25zJiZsLm9wdGlvbnMucGFyYW1zfHxudWxsO2lmKGQuY29udGFpbnNEeW5hbWljU3R5bGVz'@;
put 'KXtjb25zdCBmPW5ldyBTZXQsdj1ofHx7fTtkLnN0eWxlcy5mb3JFYWNoKFQ9PntUIGluc3RhbmNlb2YgTWFwJiZULmZvckVhY2goWT0+e25pZShZKS5mb3JFYWNoKHJlPT57di5oYXNPd25Qcm9wZXJ0eShyZSl8fGYuYWRkKHJlKX0pfSl9KSxmLnNpemUmJmEuZXJyb3JzLnB1c2goZnVuY3Rp'@;
put 'b24gUExlKGMsbCl7cmV0dXJuIG5ldyB6bigzMDA4LCExKX0oMCxmLnZhbHVlcygpKSl9cmV0dXJue3R5cGU6Sm8uU3RhdGUsbmFtZTpsLm5hbWUsc3R5bGU6ZCxvcHRpb25zOmg/e3BhcmFtczpofTpudWxsfX12aXNpdFRyYW5zaXRpb24obCxhKXthLnF1ZXJ5Q291bnQ9MCxhLmRlcENvdW50'@;
put 'PTA7Y29uc3QgZD1oZCh0aGlzLFhiKGwuYW5pbWF0aW9uKSxhKSxoPWZ1bmN0aW9uIHdJZShjLGwpe2NvbnN0IGE9W107cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2Muc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKGQ9PmZ1bmN0aW9uIE1JZShjLGwsYSl7aWYoIjoiPT1jWzBdKXtjb25zdCBZ'@;
put 'PWZ1bmN0aW9uIENJZShjLGwpe3N3aXRjaChjKXtjYXNlIjplbnRlciI6cmV0dXJuInZvaWQgPT4gKiI7Y2FzZSI6bGVhdmUiOnJldHVybiIqID0+IHZvaWQiO2Nhc2UiOmluY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk+cGFyc2VGbG9hdChhKTtjYXNlIjpkZWNyZW1lbnQi'@;
put 'OnJldHVybihhLGQpPT5wYXJzZUZsb2F0KGQpPHBhcnNlRmxvYXQoYSk7ZGVmYXVsdDpyZXR1cm4gbC5wdXNoKGZ1bmN0aW9uIFpMZShjKXtyZXR1cm4gbmV3IHpuKDMwMTYsITEpfSgpKSwiKiA9PiAqIn19KGMsYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpcmV0dXJuIHZvaWQgbC5wdXNo'@;
put 'KFkpO2M9WX1jb25zdCBkPWMubWF0Y2goL14oXCp8Wy1cd10rKVxzKig8P1s9LV0+KVxzKihcKnxbLVx3XSspJC8pO2lmKG51bGw9PWR8fGQubGVuZ3RoPDQpcmV0dXJuIGEucHVzaChmdW5jdGlvbiBVTGUoYyl7cmV0dXJuIG5ldyB6bigzMDE1LCExKX0oKSksbDtjb25zdCBoPWRbMV0sZj1k'@;
put 'WzJdLHY9ZFszXTtsLnB1c2goaWllKGgsdikpLCI8Ij09ZlswXSYmKGghPWFUfHx2IT1hVCkmJmwucHVzaChpaWUodixoKSl9KGQsYSxsKSk6YS5wdXNoKGMpLGF9KGwuZXhwcixhLmVycm9ycyk7cmV0dXJue3R5cGU6Sm8uVHJhbnNpdGlvbixtYXRjaGVyczpoLGFuaW1hdGlvbjpkLHF1ZXJ5'@;
put 'Q291bnQ6YS5xdWVyeUNvdW50LGRlcENvdW50OmEuZGVwQ291bnQsb3B0aW9uczpQZyhsLm9wdGlvbnMpfX12aXNpdFNlcXVlbmNlKGwsYSl7cmV0dXJue3R5cGU6Sm8uU2VxdWVuY2Usc3RlcHM6bC5zdGVwcy5tYXAoZD0+aGQodGhpcyxkLGEpKSxvcHRpb25zOlBnKGwub3B0aW9ucyl9fXZp'@;
put 'c2l0R3JvdXAobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWU7bGV0IGg9MDtjb25zdCBmPWwuc3RlcHMubWFwKHY9PnthLmN1cnJlbnRUaW1lPWQ7Y29uc3QgVD1oZCh0aGlzLHYsYSk7cmV0dXJuIGg9TWF0aC5tYXgoaCxhLmN1cnJlbnRUaW1lKSxUfSk7cmV0dXJuIGEuY3VycmVudFRpbWU9'@;
put 'aCx7dHlwZTpKby5Hcm91cCxzdGVwczpmLG9wdGlvbnM6UGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlKGwsYSl7Y29uc3QgZD1mdW5jdGlvbiBBSWUoYyxsKXtpZihjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpKXJldHVybiBjO2lmKCJudW1iZXIiPT10eXBlb2YgYylyZXR1cm4gU1Yo'@;
put 'c1QoYyxsKS5kdXJhdGlvbiwwLCIiKTtjb25zdCBhPWM7aWYoYS5zcGxpdCgvXHMrLykuc29tZShmPT4ieyI9PWYuY2hhckF0KDApJiYieyI9PWYuY2hhckF0KDEpKSl7Y29uc3QgZj1TVigwLDAsIiIpO3JldHVybiBmLmR5bmFtaWM9ITAsZi5zdHJWYWx1ZT1hLGZ9Y29uc3QgaD1zVChhLGwp'@;
put 'O3JldHVybiBTVihoLmR1cmF0aW9uLGguZGVsYXksaC5lYXNpbmcpfShsLnRpbWluZ3MsYS5lcnJvcnMpO2EuY3VycmVudEFuaW1hdGVUaW1pbmdzPWQ7bGV0IGgsZj1sLnN0eWxlcz9sLnN0eWxlczpJcyh7fSk7aWYoZi50eXBlPT1Kby5LZXlmcmFtZXMpaD10aGlzLnZpc2l0S2V5ZnJhbWVz'@;
put 'KGYsYSk7ZWxzZXtsZXQgdj1sLnN0eWxlcyxUPSExO2lmKCF2KXtUPSEwO2NvbnN0IHJlPXt9O2QuZWFzaW5nJiYocmUuZWFzaW5nPWQuZWFzaW5nKSx2PUlzKHJlKX1hLmN1cnJlbnRUaW1lKz1kLmR1cmF0aW9uK2QuZGVsYXk7Y29uc3QgWT10aGlzLnZpc2l0U3R5bGUodixhKTtZLmlzRW1w'@;
put 'dHlTdGVwPVQsaD1ZfXJldHVybiBhLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHt0eXBlOkpvLkFuaW1hdGUsdGltaW5nczpkLHN0eWxlOmgsb3B0aW9uczpudWxsfX12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD10aGlzLl9tYWtlU3R5bGVBc3QobCxhKTtyZXR1cm4gdGhpcy5fdmFsaWRh'@;
put 'dGVTdHlsZUFzdChkLGEpLGR9X21ha2VTdHlsZUFzdChsLGEpe2NvbnN0IGQ9W10saD1BcnJheS5pc0FycmF5KGwuc3R5bGVzKT9sLnN0eWxlczpbbC5zdHlsZXNdO2ZvcihsZXQgVCBvZiBoKSJzdHJpbmciPT10eXBlb2YgVD9UPT09VzM/ZC5wdXNoKFQpOmEuZXJyb3JzLnB1c2gobmV3IHpu'@;
put 'KDMwMDIsITEpKTpkLnB1c2gobmV3IE1hcChPYmplY3QuZW50cmllcyhUKSkpO2xldCBmPSExLHY9bnVsbDtyZXR1cm4gZC5mb3JFYWNoKFQ9PntpZihUIGluc3RhbmNlb2YgTWFwJiYoVC5oYXMoImVhc2luZyIpJiYodj1ULmdldCgiZWFzaW5nIiksVC5kZWxldGUoImVhc2luZyIpKSwhZikp'@;
put 'Zm9yKGxldCBZIG9mIFQudmFsdWVzKCkpaWYoWS50b1N0cmluZygpLmluZGV4T2YoInt7Iik+PTApe2Y9ITA7YnJlYWt9fSkse3R5cGU6Sm8uU3R5bGUsc3R5bGVzOmQsZWFzaW5nOnYsb2Zmc2V0Omwub2Zmc2V0LGNvbnRhaW5zRHluYW1pY1N0eWxlczpmLG9wdGlvbnM6bnVsbH19X3ZhbGlk'@;
put 'YXRlU3R5bGVBc3QobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzO2xldCBoPWEuY3VycmVudFRpbWUsZj1hLmN1cnJlbnRUaW1lO2QmJmY+MCYmKGYtPWQuZHVyYXRpb24rZC5kZWxheSksbC5zdHlsZXMuZm9yRWFjaCh2PT57InN0cmluZyIhPXR5cGVvZiB2JiZ2LmZvckVh'@;
put 'Y2goKFQsWSk9Pntjb25zdCByZT1hLmNvbGxlY3RlZFN0eWxlcy5nZXQoYS5jdXJyZW50UXVlcnlTZWxlY3RvciksZmU9cmUuZ2V0KFkpO2xldCBfZT0hMDtmZSYmKGYhPWgmJmY+PWZlLnN0YXJ0VGltZSYmaDw9ZmUuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gSExlKGMsbCxh'@;
put 'LGQsaCl7cmV0dXJuIG5ldyB6bigzMDEwLCExKX0oKSksX2U9ITEpLGY9ZmUuc3RhcnRUaW1lKSxfZSYmcmUuc2V0KFkse3N0YXJ0VGltZTpmLGVuZFRpbWU6aH0pLGEub3B0aW9ucyYmZnVuY3Rpb24gZ0llKGMsbCxhKXtjb25zdCBkPWwucGFyYW1zfHx7fSxoPW5pZShjKTtoLmxlbmd0aCYm'@;
put 'aC5mb3JFYWNoKGY9PntkLmhhc093blByb3BlcnR5KGYpfHxhLnB1c2goZnVuY3Rpb24gRExlKGMpe3JldHVybiBuZXcgem4oMzAwMSwhMSl9KCkpfSl9KFQsYS5vcHRpb25zLGEuZXJyb3JzKX0pfSl9dmlzaXRLZXlmcmFtZXMobCxhKXtjb25zdCBkPXt0eXBlOkpvLktleWZyYW1lcyxzdHls'@;
put 'ZXM6W10sb3B0aW9uczpudWxsfTtpZighYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MpcmV0dXJuIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gTkxlKCl7cmV0dXJuIG5ldyB6bigzMDExLCExKX0oKSksZDtsZXQgZj0wO2NvbnN0IHY9W107bGV0IFQ9ITEsWT0hMSxyZT0wO2NvbnN0IGZlPWwuc3Rl'@;
put 'cHMubWFwKHd0PT57Y29uc3QgTHQ9dGhpcy5fbWFrZVN0eWxlQXN0KHd0LGEpO2xldCBvbj1udWxsIT1MdC5vZmZzZXQ/THQub2Zmc2V0OmZ1bmN0aW9uIERJZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGMpcmV0dXJuIG51bGw7bGV0IGw9bnVsbDtpZihBcnJheS5pc0FycmF5KGMpKWMuZm9y'@;
put 'RWFjaChhPT57aWYoYSBpbnN0YW5jZW9mIE1hcCYmYS5oYXMoIm9mZnNldCIpKXtjb25zdCBkPWE7bD1wYXJzZUZsb2F0KGQuZ2V0KCJvZmZzZXQiKSksZC5kZWxldGUoIm9mZnNldCIpfX0pO2Vsc2UgaWYoYyBpbnN0YW5jZW9mIE1hcCYmYy5oYXMoIm9mZnNldCIpKXtjb25zdCBhPWM7bD1w'@;
put 'YXJzZUZsb2F0KGEuZ2V0KCJvZmZzZXQiKSksYS5kZWxldGUoIm9mZnNldCIpfXJldHVybiBsfShMdC5zdHlsZXMpLHNuPTA7cmV0dXJuIG51bGwhPW9uJiYoZisrLHNuPUx0Lm9mZnNldD1vbiksWT1ZfHxzbjwwfHxzbj4xLFQ9VHx8c248cmUscmU9c24sdi5wdXNoKHNuKSxMdH0pO1kmJmEu'@;
put 'ZXJyb3JzLnB1c2goZnVuY3Rpb24gVkxlKCl7cmV0dXJuIG5ldyB6bigzMDEyLCExKX0oKSksVCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBqTGUoKXtyZXR1cm4gbmV3IHpuKDMyMDAsITEpfSgpKTtjb25zdCBfZT1sLnN0ZXBzLmxlbmd0aDtsZXQga2U9MDtmPjAmJmY8X2U/YS5lcnJvcnMu'@;
put 'cHVzaChmdW5jdGlvbiBCTGUoKXtyZXR1cm4gbmV3IHpuKDMyMDIsITEpfSgpKTowPT1mJiYoa2U9MS8oX2UtMSkpO2NvbnN0IFdlPV9lLTEsSmU9YS5jdXJyZW50VGltZSx0dD1hLmN1cnJlbnRBbmltYXRlVGltaW5ncyx5dD10dC5kdXJhdGlvbjtyZXR1cm4gZmUuZm9yRWFjaCgod3QsTHQp'@;
put 'PT57Y29uc3Qgb249a2U+MD9MdD09V2U/MTprZSpMdDp2W0x0XSxzbj1vbip5dDthLmN1cnJlbnRUaW1lPUplK3R0LmRlbGF5K3NuLHR0LmR1cmF0aW9uPXNuLHRoaXMuX3ZhbGlkYXRlU3R5bGVBc3Qod3QsYSksd3Qub2Zmc2V0PW9uLGQuc3R5bGVzLnB1c2god3QpfSksZH12aXNpdFJlZmVy'@;
put 'ZW5jZShsLGEpe3JldHVybnt0eXBlOkpvLlJlZmVyZW5jZSxhbmltYXRpb246aGQodGhpcyxYYihsLmFuaW1hdGlvbiksYSksb3B0aW9uczpQZyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVDaGlsZChsLGEpe3JldHVybiBhLmRlcENvdW50Kysse3R5cGU6Sm8uQW5pbWF0ZUNoaWxkLG9wdGlv'@;
put 'bnM6UGcobC5vcHRpb25zKX19dmlzaXRBbmltYXRlUmVmKGwsYSl7cmV0dXJue3R5cGU6Sm8uQW5pbWF0ZVJlZixhbmltYXRpb246dGhpcy52aXNpdFJlZmVyZW5jZShsLmFuaW1hdGlvbixhKSxvcHRpb25zOlBnKGwub3B0aW9ucyl9fXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVu'@;
put 'dFF1ZXJ5U2VsZWN0b3IsaD1sLm9wdGlvbnN8fHt9O2EucXVlcnlDb3VudCsrLGEuY3VycmVudFF1ZXJ5PWw7Y29uc3RbZix2XT1mdW5jdGlvbiBrSWUoYyl7Y29uc3QgbD0hIWMuc3BsaXQoL1xzKixccyovKS5maW5kKGE9PiI6c2VsZiI9PWEpO3JldHVybiBsJiYoYz1jLnJlcGxhY2UoU0ll'@;
put 'LCIiKSksYz1jLnJlcGxhY2UoL0BcKi9nLG9UKS5yZXBsYWNlKC9AXHcrL2csYT0+b1QrIi0iK2Euc2xpY2UoMSkpLnJlcGxhY2UoLzphbmltYXRpbmcvZyx2ViksW2MsbF19KGwuc2VsZWN0b3IpO2EuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZC5sZW5ndGg/ZCsiICIrZjpmLGRkKGEuY29sbGVj'@;
put 'dGVkU3R5bGVzLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IsbmV3IE1hcCk7Y29uc3QgVD1oZCh0aGlzLFhiKGwuYW5pbWF0aW9uKSxhKTtyZXR1cm4gYS5jdXJyZW50UXVlcnk9bnVsbCxhLmN1cnJlbnRRdWVyeVNlbGVjdG9yPWQse3R5cGU6Sm8uUXVlcnksc2VsZWN0b3I6ZixsaW1pdDpoLmxp'@;
put 'bWl0fHwwLG9wdGlvbmFsOiEhaC5vcHRpb25hbCxpbmNsdWRlU2VsZjp2LGFuaW1hdGlvbjpULG9yaWdpbmFsU2VsZWN0b3I6bC5zZWxlY3RvcixvcHRpb25zOlBnKGwub3B0aW9ucyl9fXZpc2l0U3RhZ2dlcihsLGEpe2EuY3VycmVudFF1ZXJ5fHxhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIFlM'@;
put 'ZSgpe3JldHVybiBuZXcgem4oMzAxMywhMSl9KCkpO2NvbnN0IGQ9ImZ1bGwiPT09bC50aW1pbmdzP3tkdXJhdGlvbjowLGRlbGF5OjAsZWFzaW5nOiJmdWxsIn06c1QobC50aW1pbmdzLGEuZXJyb3JzLCEwKTtyZXR1cm57dHlwZTpKby5TdGFnZ2VyLGFuaW1hdGlvbjpoZCh0aGlzLFhiKGwu'@;
put 'YW5pbWF0aW9uKSxhKSx0aW1pbmdzOmQsb3B0aW9uczpudWxsfX19Y2xhc3MgVElle2NvbnN0cnVjdG9yKGwpe3RoaXMuZXJyb3JzPWwsdGhpcy5xdWVyeUNvdW50PTAsdGhpcy5kZXBDb3VudD0wLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCx0aGlzLmN1cnJlbnRRdWVyeT1udWxsLHRo'@;
put 'aXMuY3VycmVudFF1ZXJ5U2VsZWN0b3I9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMuY3VycmVudFRpbWU9MCx0aGlzLmNvbGxlY3RlZFN0eWxlcz1uZXcgTWFwLHRoaXMub3B0aW9ucz1udWxsLHRoaXMudW5zdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzRm91bmQ9bmV3'@;
put 'IFNldH19ZnVuY3Rpb24gUGcoYyl7cmV0dXJuIGM/KGM9ey4uLmN9KS5wYXJhbXMmJihjLnBhcmFtcz1mdW5jdGlvbiBFSWUoYyl7cmV0dXJuIGM/ey4uLmN9Om51bGx9KGMucGFyYW1zKSk6Yz17fSxjfWZ1bmN0aW9uIFNWKGMsbCxhKXtyZXR1cm57ZHVyYXRpb246YyxkZWxheTpsLGVhc2lu'@;
put 'ZzphfX1mdW5jdGlvbiB4VihjLGwsYSxkLGgsZix2PW51bGwsVD0hMSl7cmV0dXJue3R5cGU6MSxlbGVtZW50OmMsa2V5ZnJhbWVzOmwscHJlU3R5bGVQcm9wczphLHBvc3RTdHlsZVByb3BzOmQsZHVyYXRpb246aCxkZWxheTpmLHRvdGFsVGltZTpoK2YsZWFzaW5nOnYsc3ViVGltZWxpbmU6'@;
put 'VH19Y2xhc3MgdVR7Y29uc3RydWN0b3IoKXt0aGlzLl9tYXA9bmV3IE1hcH1nZXQobCl7cmV0dXJuIHRoaXMuX21hcC5nZXQobCl8fFtdfWFwcGVuZChsLGEpe2xldCBkPXRoaXMuX21hcC5nZXQobCk7ZHx8dGhpcy5fbWFwLnNldChsLGQ9W10pLGQucHVzaCguLi5hKX1oYXMobCl7cmV0dXJu'@;
put 'IHRoaXMuX21hcC5oYXMobCl9Y2xlYXIoKXt0aGlzLl9tYXAuY2xlYXIoKX19Y29uc3QgUkllPW5ldyBSZWdFeHAoIjplbnRlciIsImciKSxQSWU9bmV3IFJlZ0V4cCgiOmxlYXZlIiwiZyIpO2Z1bmN0aW9uIGtWKGMsbCxhLGQsaCxmPW5ldyBNYXAsdj1uZXcgTWFwLFQsWSxyZT1bXSl7cmV0'@;
put 'dXJuKG5ldyBGSWUpLmJ1aWxkS2V5ZnJhbWVzKGMsbCxhLGQsaCxmLHYsVCxZLHJlKX1jbGFzcyBGSWV7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsVCxZLHJlLGZlPVtdKXtyZT1yZXx8bmV3IHVUO2NvbnN0IF9lPW5ldyBFVihsLGEscmUsaCxmLGZlLFtdKTtfZS5vcHRpb25zPVk7Y29u'@;
put 'c3Qga2U9WS5kZWxheT9ycChZLmRlbGF5KTowO19lLmN1cnJlbnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGtlKSxfZS5jdXJyZW50VGltZWxpbmUuc2V0U3R5bGVzKFt2XSxudWxsLF9lLmVycm9ycyxZKSxoZCh0aGlzLGQsX2UpO2NvbnN0IFdlPV9lLnRpbWVsaW5lcy5maWx0ZXIoSmU9Pkpl'@;
put 'LmNvbnRhaW5zQW5pbWF0aW9uKCkpO2lmKFdlLmxlbmd0aCYmVC5zaXplKXtsZXQgSmU7Zm9yKGxldCB0dD1XZS5sZW5ndGgtMTt0dD49MDt0dC0tKXtjb25zdCB5dD1XZVt0dF07aWYoeXQuZWxlbWVudD09PWEpe0plPXl0O2JyZWFrfX1KZSYmIUplLmFsbG93T25seVRpbWVsaW5lU3R5bGVz'@;
put 'KCkmJkplLnNldFN0eWxlcyhbVF0sbnVsbCxfZS5lcnJvcnMsWSl9cmV0dXJuIFdlLmxlbmd0aD9XZS5tYXAoSmU9PkplLmJ1aWxkS2V5ZnJhbWVzKCkpOlt4VihhLFtdLFtdLFtdLDAsa2UsIiIsITEpXX12aXNpdFRyaWdnZXIobCxhKXt9dmlzaXRTdGF0ZShsLGEpe312aXNpdFRyYW5zaXRp'@;
put 'b24obCxhKXt9dmlzaXRBbmltYXRlQ2hpbGQobCxhKXtjb25zdCBkPWEuc3ViSW5zdHJ1Y3Rpb25zLmdldChhLmVsZW1lbnQpO2lmKGQpe2NvbnN0IGg9YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9ucyksZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSx2PXRoaXMuX3Zpc2l0U3Vi'@;
put 'SW5zdHJ1Y3Rpb25zKGQsaCxoLm9wdGlvbnMpO2YhPXYmJmEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpfWEucHJldmlvdXNOb2RlPWx9dmlzaXRBbmltYXRlUmVmKGwsYSl7Y29uc3QgZD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKTtkLnRyYW5zZm9ybUludG9OZXdUaW1lbGlu'@;
put 'ZSgpLHRoaXMuX2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKFtsLm9wdGlvbnMsbC5hbmltYXRpb24ub3B0aW9uc10sYSxkKSx0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGQpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxh'@;
put 'LnByZXZpb3VzTm9kZT1sfV9hcHBseUFuaW1hdGlvblJlZkRlbGF5cyhsLGEsZCl7Zm9yKGNvbnN0IGggb2YgbCl7Y29uc3QgZj1oPy5kZWxheTtpZihmKXtjb25zdCB2PSJudW1iZXIiPT10eXBlb2YgZj9mOnJwKEpiKGYsaD8ucGFyYW1zPz97fSxhLmVycm9ycykpO2QuZGVsYXlOZXh0U3Rl'@;
put 'cCh2KX19fV92aXNpdFN1Ykluc3RydWN0aW9ucyhsLGEsZCl7bGV0IGY9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3Qgdj1udWxsIT1kLmR1cmF0aW9uP3JwKGQuZHVyYXRpb24pOm51bGwsVD1udWxsIT1kLmRlbGF5P3JwKGQuZGVsYXkpOm51bGw7cmV0dXJuIDAhPT12JiZs'@;
put 'LmZvckVhY2goWT0+e2NvbnN0IHJlPWEuYXBwZW5kSW5zdHJ1Y3Rpb25Ub1RpbWVsaW5lKFksdixUKTtmPU1hdGgubWF4KGYscmUuZHVyYXRpb24rcmUuZGVsYXkpfSksZn12aXNpdFJlZmVyZW5jZShsLGEpe2EudXBkYXRlT3B0aW9ucyhsLm9wdGlvbnMsITApLGhkKHRoaXMsbC5hbmltYXRp'@;
put 'b24sYSksYS5wcmV2aW91c05vZGU9bH12aXNpdFNlcXVlbmNlKGwsYSl7Y29uc3QgZD1hLnN1YkNvbnRleHRDb3VudDtsZXQgaD1hO2NvbnN0IGY9bC5vcHRpb25zO2lmKGYmJihmLnBhcmFtc3x8Zi5kZWxheSkmJihoPWEuY3JlYXRlU3ViQ29udGV4dChmKSxoLnRyYW5zZm9ybUludG9OZXdU'@;
put 'aW1lbGluZSgpLG51bGwhPWYuZGVsYXkpKXtoLnByZXZpb3VzTm9kZS50eXBlPT1Kby5TdHlsZSYmKGguY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGgucHJldmlvdXNOb2RlPWRUKTtjb25zdCB2PXJwKGYuZGVsYXkpO2guZGVsYXlOZXh0U3RlcCh2KX1sLnN0ZXBz'@;
put 'Lmxlbmd0aCYmKGwuc3RlcHMuZm9yRWFjaCh2PT5oZCh0aGlzLHYsaCkpLGguY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLGguc3ViQ29udGV4dENvdW50PmQmJmgudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKCkpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRHcm91cChs'@;
put 'LGEpe2NvbnN0IGQ9W107bGV0IGg9YS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWU7Y29uc3QgZj1sLm9wdGlvbnMmJmwub3B0aW9ucy5kZWxheT9ycChsLm9wdGlvbnMuZGVsYXkpOjA7bC5zdGVwcy5mb3JFYWNoKHY9Pntjb25zdCBUPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMp'@;
put 'O2YmJlQuZGVsYXlOZXh0U3RlcChmKSxoZCh0aGlzLHYsVCksaD1NYXRoLm1heChoLFQuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lKSxkLnB1c2goVC5jdXJyZW50VGltZWxpbmUpfSksZC5mb3JFYWNoKHY9PmEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHls'@;
put 'ZXModikpLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGgpLGEucHJldmlvdXNOb2RlPWx9X3Zpc2l0VGltaW5nKGwsYSl7aWYobC5keW5hbWljKXtjb25zdCBkPWwuc3RyVmFsdWU7cmV0dXJuIHNUKGEucGFyYW1zP0piKGQsYS5wYXJhbXMsYS5lcnJvcnMpOmQsYS5lcnJvcnMpfXJldHVy'@;
put 'bntkdXJhdGlvbjpsLmR1cmF0aW9uLGRlbGF5OmwuZGVsYXksZWFzaW5nOmwuZWFzaW5nfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuX3Zpc2l0VGltaW5nKGwudGltaW5ncyxhKSxoPWEuY3VycmVudFRpbWVsaW5lO2QuZGVsYXkmJihh'@;
put 'LmluY3JlbWVudFRpbWUoZC5kZWxheSksaC5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSk7Y29uc3QgZj1sLnN0eWxlO2YudHlwZT09Sm8uS2V5ZnJhbWVzP3RoaXMudmlzaXRLZXlmcmFtZXMoZixhKTooYS5pbmNyZW1lbnRUaW1lKGQuZHVyYXRpb24pLHRoaXMudmlzaXRTdHlsZShmLGEpLGgu'@;
put 'YXBwbHlTdHlsZXNUb0tleWZyYW1lKCkpLGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsYS5wcmV2aW91c05vZGU9bH12aXNpdFN0eWxlKGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZSxoPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzOyFoJiZkLmhhc0N1cnJlbnRTdHlsZVByb3Bl'@;
put 'cnRpZXMoKSYmZC5mb3J3YXJkRnJhbWUoKTtjb25zdCBmPWgmJmguZWFzaW5nfHxsLmVhc2luZztsLmlzRW1wdHlTdGVwP2QuYXBwbHlFbXB0eVN0ZXAoZik6ZC5zZXRTdHlsZXMobC5zdHlsZXMsZixhLmVycm9ycyxhLm9wdGlvbnMpLGEucHJldmlvdXNOb2RlPWx9dmlzaXRLZXlmcmFtZXMo'@;
put 'bCxhKXtjb25zdCBkPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLGg9YS5jdXJyZW50VGltZWxpbmUuZHVyYXRpb24sZj1kLmR1cmF0aW9uLFQ9YS5jcmVhdGVTdWJDb250ZXh0KCkuY3VycmVudFRpbWVsaW5lO1QuZWFzaW5nPWQuZWFzaW5nLGwuc3R5bGVzLmZvckVhY2goWT0+e1QuZm9yd2Fy'@;
put 'ZFRpbWUoKFkub2Zmc2V0fHwwKSpmKSxULnNldFN0eWxlcyhZLnN0eWxlcyxZLmVhc2luZyxhLmVycm9ycyxhLm9wdGlvbnMpLFQuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCl9KSxhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKFQpLGEudHJhbnNmb3JtSW50'@;
put 'b05ld1RpbWVsaW5lKGgrZiksYS5wcmV2aW91c05vZGU9bH12aXNpdFF1ZXJ5KGwsYSl7Y29uc3QgZD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSxoPWwub3B0aW9uc3x8e30sZj1oLmRlbGF5P3JwKGguZGVsYXkpOjA7ZiYmKGEucHJldmlvdXNOb2RlLnR5cGU9PT1Kby5TdHlsZXx8'@;
put 'MD09ZCYmYS5jdXJyZW50VGltZWxpbmUuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpKSYmKGEuY3VycmVudFRpbWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpLGEucHJldmlvdXNOb2RlPWRUKTtsZXQgdj1kO2NvbnN0IFQ9YS5pbnZva2VRdWVyeShsLnNlbGVjdG9yLGwub3JpZ2lu'@;
put 'YWxTZWxlY3RvcixsLmxpbWl0LGwuaW5jbHVkZVNlbGYsISFoLm9wdGlvbmFsLGEuZXJyb3JzKTthLmN1cnJlbnRRdWVyeVRvdGFsPVQubGVuZ3RoO2xldCBZPW51bGw7VC5mb3JFYWNoKChyZSxmZSk9PnthLmN1cnJlbnRRdWVyeUluZGV4PWZlO2NvbnN0IF9lPWEuY3JlYXRlU3ViQ29udGV4'@;
put 'dChsLm9wdGlvbnMscmUpO2YmJl9lLmRlbGF5TmV4dFN0ZXAoZikscmU9PT1hLmVsZW1lbnQmJihZPV9lLmN1cnJlbnRUaW1lbGluZSksaGQodGhpcyxsLmFuaW1hdGlvbixfZSksX2UuY3VycmVudFRpbWVsaW5lLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLHY9TWF0aC5tYXgodixfZS5jdXJy'@;
put 'ZW50VGltZWxpbmUuY3VycmVudFRpbWUpfSksYS5jdXJyZW50UXVlcnlJbmRleD0wLGEuY3VycmVudFF1ZXJ5VG90YWw9MCxhLnRyYW5zZm9ybUludG9OZXdUaW1lbGluZSh2KSxZJiYoYS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0eWxlcyhZKSxhLmN1cnJlbnRU'@;
put 'aW1lbGluZS5zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdFN0YWdnZXIobCxhKXtjb25zdCBkPWEucGFyZW50Q29udGV4dCxoPWEuY3VycmVudFRpbWVsaW5lLGY9bC50aW1pbmdzLHY9TWF0aC5hYnMoZi5kdXJhdGlvbiksVD12KihhLmN1cnJlbnRRdWVy'@;
put 'eVRvdGFsLTEpO2xldCBZPXYqYS5jdXJyZW50UXVlcnlJbmRleDtzd2l0Y2goZi5kdXJhdGlvbjwwPyJyZXZlcnNlIjpmLmVhc2luZyl7Y2FzZSJyZXZlcnNlIjpZPVQtWTticmVhaztjYXNlImZ1bGwiOlk9ZC5jdXJyZW50U3RhZ2dlclRpbWV9Y29uc3QgZmU9YS5jdXJyZW50VGltZWxpbmU7'@;
put 'WSYmZmUuZGVsYXlOZXh0U3RlcChZKTtjb25zdCBfZT1mZS5jdXJyZW50VGltZTtoZCh0aGlzLGwuYW5pbWF0aW9uLGEpLGEucHJldmlvdXNOb2RlPWwsZC5jdXJyZW50U3RhZ2dlclRpbWU9aC5jdXJyZW50VGltZS1fZSsoaC5zdGFydFRpbWUtZC5jdXJyZW50VGltZWxpbmUuc3RhcnRUaW1l'@;
put 'KX19Y29uc3QgZFQ9e307Y2xhc3MgRVZ7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsVCxZKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN1Ykluc3RydWN0aW9ucz1kLHRoaXMuX2VudGVyQ2xhc3NOYW1lPWgsdGhpcy5fbGVhdmVDbGFzc05hbWU9Zix0aGlzLmVycm9ycz12'@;
put 'LHRoaXMudGltZWxpbmVzPVQsdGhpcy5wYXJlbnRDb250ZXh0PW51bGwsdGhpcy5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCx0aGlzLnByZXZpb3VzTm9kZT1kVCx0aGlzLnN1YkNvbnRleHRDb3VudD0wLHRoaXMub3B0aW9ucz17fSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PTAsdGhpcy5j'@;
put 'dXJyZW50UXVlcnlUb3RhbD0wLHRoaXMuY3VycmVudFN0YWdnZXJUaW1lPTAsdGhpcy5jdXJyZW50VGltZWxpbmU9WXx8bmV3IGhUKHRoaXMuX2RyaXZlcixhLDApLFQucHVzaCh0aGlzLmN1cnJlbnRUaW1lbGluZSl9Z2V0IHBhcmFtcygpe3JldHVybiB0aGlzLm9wdGlvbnMucGFyYW1zfXVw'@;
put 'ZGF0ZU9wdGlvbnMobCxhKXtpZighbClyZXR1cm47Y29uc3QgZD1sO2xldCBoPXRoaXMub3B0aW9ucztudWxsIT1kLmR1cmF0aW9uJiYoaC5kdXJhdGlvbj1ycChkLmR1cmF0aW9uKSksbnVsbCE9ZC5kZWxheSYmKGguZGVsYXk9cnAoZC5kZWxheSkpO2NvbnN0IGY9ZC5wYXJhbXM7aWYoZil7'@;
put 'bGV0IHY9aC5wYXJhbXM7dnx8KHY9dGhpcy5vcHRpb25zLnBhcmFtcz17fSksT2JqZWN0LmtleXMoZikuZm9yRWFjaChUPT57KCFhfHwhdi5oYXNPd25Qcm9wZXJ0eShUKSkmJih2W1RdPUpiKGZbVF0sdix0aGlzLmVycm9ycykpfSl9fV9jb3B5T3B0aW9ucygpe2NvbnN0IGw9e307aWYodGhp'@;
put 'cy5vcHRpb25zKXtjb25zdCBhPXRoaXMub3B0aW9ucy5wYXJhbXM7aWYoYSl7Y29uc3QgZD1sLnBhcmFtcz17fTtPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGg9PntkW2hdPWFbaF19KX19cmV0dXJuIGx9Y3JlYXRlU3ViQ29udGV4dChsPW51bGwsYSxkKXtjb25zdCBoPWF8fHRoaXMuZWxlbWVu'@;
put 'dCxmPW5ldyBFVih0aGlzLl9kcml2ZXIsaCx0aGlzLnN1Ykluc3RydWN0aW9ucyx0aGlzLl9lbnRlckNsYXNzTmFtZSx0aGlzLl9sZWF2ZUNsYXNzTmFtZSx0aGlzLmVycm9ycyx0aGlzLnRpbWVsaW5lcyx0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKGgsZHx8MCkpO3JldHVybiBmLnByZXZp'@;
put 'b3VzTm9kZT10aGlzLnByZXZpb3VzTm9kZSxmLmN1cnJlbnRBbmltYXRlVGltaW5ncz10aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncyxmLm9wdGlvbnM9dGhpcy5fY29weU9wdGlvbnMoKSxmLnVwZGF0ZU9wdGlvbnMobCksZi5jdXJyZW50UXVlcnlJbmRleD10aGlzLmN1cnJlbnRRdWVyeUlu'@;
put 'ZGV4LGYuY3VycmVudFF1ZXJ5VG90YWw9dGhpcy5jdXJyZW50UXVlcnlUb3RhbCxmLnBhcmVudENvbnRleHQ9dGhpcyx0aGlzLnN1YkNvbnRleHRDb3VudCsrLGZ9dHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKGwpe3JldHVybiB0aGlzLnByZXZpb3VzTm9kZT1kVCx0aGlzLmN1cnJlbnRUaW1l'@;
put 'bGluZT10aGlzLmN1cnJlbnRUaW1lbGluZS5mb3JrKHRoaXMuZWxlbWVudCxsKSx0aGlzLnRpbWVsaW5lcy5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKSx0aGlzLmN1cnJlbnRUaW1lbGluZX1hcHBlbmRJbnN0cnVjdGlvblRvVGltZWxpbmUobCxhLGQpe2NvbnN0IGg9e2R1cmF0aW9uOmE/'@;
put 'P2wuZHVyYXRpb24sZGVsYXk6dGhpcy5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUrKGQ/PzApK2wuZGVsYXksZWFzaW5nOiIifSxmPW5ldyBISWUodGhpcy5fZHJpdmVyLGwuZWxlbWVudCxsLmtleWZyYW1lcyxsLnByZVN0eWxlUHJvcHMsbC5wb3N0U3R5bGVQcm9wcyxoLGwuc3RyZXRj'@;
put 'aFN0YXJ0aW5nS2V5ZnJhbWUpO3JldHVybiB0aGlzLnRpbWVsaW5lcy5wdXNoKGYpLGh9aW5jcmVtZW50VGltZShsKXt0aGlzLmN1cnJlbnRUaW1lbGluZS5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbitsKX1kZWxheU5leHRTdGVwKGwpe2w+MCYmdGhpcy5jdXJy'@;
put 'ZW50VGltZWxpbmUuZGVsYXlOZXh0U3RlcChsKX1pbnZva2VRdWVyeShsLGEsZCxoLGYsdil7bGV0IFQ9W107aWYoaCYmVC5wdXNoKHRoaXMuZWxlbWVudCksbC5sZW5ndGg+MCl7bD0obD1sLnJlcGxhY2UoUkllLCIuIit0aGlzLl9lbnRlckNsYXNzTmFtZSkpLnJlcGxhY2UoUEllLCIuIit0'@;
put 'aGlzLl9sZWF2ZUNsYXNzTmFtZSk7bGV0IHJlPXRoaXMuX2RyaXZlci5xdWVyeSh0aGlzLmVsZW1lbnQsbCwxIT1kKTswIT09ZCYmKHJlPWQ8MD9yZS5zbGljZShyZS5sZW5ndGgrZCxyZS5sZW5ndGgpOnJlLnNsaWNlKDAsZCkpLFQucHVzaCguLi5yZSl9cmV0dXJuIWYmJjA9PVQubGVuZ3Ro'@;
put 'JiZ2LnB1c2goZnVuY3Rpb24gekxlKGMpe3JldHVybiBuZXcgem4oMzAxNCwhMSl9KCkpLFR9fWNsYXNzIGhUe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3RhcnRUaW1lPWQsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3Vw'@;
put 'PWgsdGhpcy5kdXJhdGlvbj0wLHRoaXMuZWFzaW5nPW51bGwsdGhpcy5fcHJldmlvdXNLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2N1cnJlbnRLZXlmcmFtZT1uZXcgTWFwLHRoaXMuX2tleWZyYW1lcz1uZXcgTWFwLHRoaXMuX3N0eWxlU3VtbWFyeT1uZXcgTWFwLHRoaXMuX2xvY2FsVGltZWxp'@;
put 'bmVTdHlsZXM9bmV3IE1hcCx0aGlzLl9wZW5kaW5nU3R5bGVzPW5ldyBNYXAsdGhpcy5fYmFja0ZpbGw9bmV3IE1hcCx0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWU9bnVsbCx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXB8fCh0aGlzLl9lbGVtZW50VGltZWxpbmVTdHls'@;
put 'ZXNMb29rdXA9bmV3IE1hcCksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXM9dGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLmdldChhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlc3x8KHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2xvY2FsVGltZWxpbmVTdHls'@;
put 'ZXMsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwLnNldChhLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMpKSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1jb250YWluc0FuaW1hdGlvbigpe3N3aXRjaCh0aGlzLl9rZXlmcmFtZXMuc2l6ZSl7Y2FzZSAwOnJldHVybiExO2Nhc2UgMTpy'@;
put 'ZXR1cm4gdGhpcy5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCk7ZGVmYXVsdDpyZXR1cm4hMH19aGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpe3JldHVybiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2l6ZT4wfWdldCBjdXJyZW50VGltZSgpe3JldHVybiB0aGlzLnN0YXJ0VGltZSt0aGlz'@;
put 'LmR1cmF0aW9ufWRlbGF5TmV4dFN0ZXAobCl7Y29uc3QgYT0xPT09dGhpcy5fa2V5ZnJhbWVzLnNpemUmJnRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZTt0aGlzLmR1cmF0aW9ufHxhPyh0aGlzLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWUrbCksYSYmdGhpcy5zbmFwc2hvdEN1cnJlbnRT'@;
put 'dHlsZXMoKSk6dGhpcy5zdGFydFRpbWUrPWx9Zm9yayhsLGEpe3JldHVybiB0aGlzLmFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpLG5ldyBoVCh0aGlzLl9kcml2ZXIsbCxhfHx0aGlzLmN1cnJlbnRUaW1lLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cCl9X2xvYWRLZXlmcmFtZSgp'@;
put 'e3RoaXMuX2N1cnJlbnRLZXlmcmFtZSYmKHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9dGhpcy5fY3VycmVudEtleWZyYW1lKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9dGhpcy5fa2V5ZnJhbWVzLmdldCh0aGlzLmR1cmF0aW9uKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWV8fCh0aGlzLl9jdXJyZW50'@;
put 'S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXMuc2V0KHRoaXMuZHVyYXRpb24sdGhpcy5fY3VycmVudEtleWZyYW1lKSl9Zm9yd2FyZEZyYW1lKCl7dGhpcy5kdXJhdGlvbis9MSx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1mb3J3YXJkVGltZShsKXt0aGlzLmFwcGx5U3R5bGVzVG9LZXlm'@;
put 'cmFtZSgpLHRoaXMuZHVyYXRpb249bCx0aGlzLl9sb2FkS2V5ZnJhbWUoKX1fdXBkYXRlU3R5bGUobCxhKXt0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLnNldChsLGEpLHRoaXMuX3N0eWxlU3VtbWFyeS5zZXQobCx7dGltZTp0'@;
put 'aGlzLmN1cnJlbnRUaW1lLHZhbHVlOmF9KX1hbGxvd09ubHlUaW1lbGluZVN0eWxlcygpe3JldHVybiB0aGlzLl9jdXJyZW50RW1wdHlTdGVwS2V5ZnJhbWUhPT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9YXBwbHlFbXB0eVN0ZXAobCl7bCYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVh'@;
put 'c2luZyIsbCk7Zm9yKGxldFthLGRdb2YgdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpdGhpcy5fYmFja0ZpbGwuc2V0KGEsZHx8VzMpLHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxXMyk7dGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZX1z'@;
put 'ZXRTdHlsZXMobCxhLGQsaCl7YSYmdGhpcy5fcHJldmlvdXNLZXlmcmFtZS5zZXQoImVhc2luZyIsYSk7Y29uc3QgZj1oJiZoLnBhcmFtc3x8e30sdj1mdW5jdGlvbiBOSWUoYyxsKXtjb25zdCBhPW5ldyBNYXA7bGV0IGQ7cmV0dXJuIGMuZm9yRWFjaChoPT57aWYoIioiPT09aCl7ZD8/PWwu'@;
put 'a2V5cygpO2ZvcihsZXQgZiBvZiBkKWEuc2V0KGYsVzMpfWVsc2UgZm9yKGxldFtmLHZdb2YgaClhLnNldChmLHYpfSksYX0obCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcyk7Zm9yKGxldFtULFldb2Ygdil7Y29uc3QgcmU9SmIoWSxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KFQs'@;
put 'cmUpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuaGFzKFQpfHx0aGlzLl9iYWNrRmlsbC5zZXQoVCx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5nZXQoVCk/P1czKSx0aGlzLl91cGRhdGVTdHlsZShULHJlKX19YXBwbHlTdHlsZXNUb0tleWZyYW1lKCl7MCE9dGhpcy5fcGVuZGluZ1N0'@;
put 'eWxlcy5zaXplJiYodGhpcy5fcGVuZGluZ1N0eWxlcy5mb3JFYWNoKChsLGEpPT57dGhpcy5fY3VycmVudEtleWZyYW1lLnNldChhLGwpfSksdGhpcy5fcGVuZGluZ1N0eWxlcy5jbGVhcigpLHRoaXMuX2xvY2FsVGltZWxpbmVTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRL'@;
put 'ZXlmcmFtZS5oYXMoYSl8fHRoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pKX1zbmFwc2hvdEN1cnJlbnRTdHlsZXMoKXtmb3IobGV0W2wsYV1vZiB0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KGwsYSksdGhpcy5fdXBkYXRlU3R5bGUobCxh'@;
put 'KX1nZXRGaW5hbEtleWZyYW1lKCl7cmV0dXJuIHRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbil9Z2V0IHByb3BlcnRpZXMoKXtjb25zdCBsPVtdO2ZvcihsZXQgYSBpbiB0aGlzLl9jdXJyZW50S2V5ZnJhbWUpbC5wdXNoKGEpO3JldHVybiBsfW1lcmdlVGltZWxpbmVDb2xsZWN0'@;
put 'ZWRTdHlsZXMobCl7bC5fc3R5bGVTdW1tYXJ5LmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXRoaXMuX3N0eWxlU3VtbWFyeS5nZXQoZCk7KCFofHxhLnRpbWU+aC50aW1lKSYmdGhpcy5fdXBkYXRlU3R5bGUoZCxhLnZhbHVlKX0pfWJ1aWxkS2V5ZnJhbWVzKCl7dGhpcy5hcHBseVN0eWxlc1Rv'@;
put 'S2V5ZnJhbWUoKTtjb25zdCBsPW5ldyBTZXQsYT1uZXcgU2V0LGQ9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiYwPT09dGhpcy5kdXJhdGlvbjtsZXQgaD1bXTt0aGlzLl9rZXlmcmFtZXMuZm9yRWFjaCgoVCxZKT0+e2NvbnN0IHJlPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxsLC4uLlRd'@;
put 'KTtyZS5mb3JFYWNoKChmZSxfZSk9PnsiISI9PT1mZT9sLmFkZChfZSk6ZmU9PT1XMyYmYS5hZGQoX2UpfSksZHx8cmUuc2V0KCJvZmZzZXQiLFkvdGhpcy5kdXJhdGlvbiksaC5wdXNoKHJlKX0pO2NvbnN0IGY9Wy4uLmwudmFsdWVzKCldLHY9Wy4uLmEudmFsdWVzKCldO2lmKGQpe2NvbnN0'@;
put 'IFQ9aFswXSxZPW5ldyBNYXAoVCk7VC5zZXQoIm9mZnNldCIsMCksWS5zZXQoIm9mZnNldCIsMSksaD1bVCxZXX1yZXR1cm4geFYodGhpcy5lbGVtZW50LGgsZix2LHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX1jbGFzcyBISWUgZXh0ZW5kcyBoVHtjb25z'@;
put 'dHJ1Y3RvcihsLGEsZCxoLGYsdixUPSExKXtzdXBlcihsLGEsdi5kZWxheSksdGhpcy5rZXlmcmFtZXM9ZCx0aGlzLnByZVN0eWxlUHJvcHM9aCx0aGlzLnBvc3RTdHlsZVByb3BzPWYsdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9VCx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnYuZHVy'@;
put 'YXRpb24sZGVsYXk6di5kZWxheSxlYXNpbmc6di5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IGw9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmEsZHVyYXRpb246ZCxlYXNpbmc6aH09dGhpcy50aW1p'@;
put 'bmdzO2lmKHRoaXMuX3N0cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZhKXtjb25zdCBmPVtdLHY9ZCthLFQ9YS92LFk9bmV3IE1hcChsWzBdKTtZLnNldCgib2Zmc2V0IiwwKSxmLnB1c2goWSk7Y29uc3QgcmU9bmV3IE1hcChsWzBdKTtyZS5zZXQoIm9mZnNldCIsYWllKFQpKSxmLnB1c2gocmUp'@;
put 'O2NvbnN0IGZlPWwubGVuZ3RoLTE7Zm9yKGxldCBfZT0xO19lPD1mZTtfZSsrKXtsZXQga2U9bmV3IE1hcChsW19lXSk7Y29uc3QgV2U9a2UuZ2V0KCJvZmZzZXQiKTtrZS5zZXQoIm9mZnNldCIsYWllKChhK1dlKmQpL3YpKSxmLnB1c2goa2UpfWQ9dixhPTAsaD0iIixsPWZ9cmV0dXJuIHhW'@;
put 'KHRoaXMuZWxlbWVudCxsLHRoaXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGQsYSxoLCEwKX19ZnVuY3Rpb24gYWllKGMsbD0zKXtjb25zdCBhPU1hdGgucG93KDEwLGwtMSk7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfWZ1bmN0aW9uIGxpZShjLGwsYSxkLGgsZix2LFQs'@;
put 'WSxyZSxmZSxfZSxrZSl7cmV0dXJue3R5cGU6MCxlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxpc1JlbW92YWxUcmFuc2l0aW9uOmgsZnJvbVN0YXRlOmEsZnJvbVN0eWxlczpmLHRvU3RhdGU6ZCx0b1N0eWxlczp2LHRpbWVsaW5lczpULHF1ZXJpZWRFbGVtZW50czpZLHByZVN0eWxlUHJvcHM6'@;
put 'cmUscG9zdFN0eWxlUHJvcHM6ZmUsdG90YWxUaW1lOl9lLGVycm9yczprZX19Y29uc3QgVFY9e307Y2xhc3MgY2lle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl90cmlnZ2VyTmFtZT1sLHRoaXMuYXN0PWEsdGhpcy5fc3RhdGVTdHlsZXM9ZH1tYXRjaChsLGEsZCxoKXtyZXR1cm4gZnVuY3Rp'@;
put 'b24gVkllKGMsbCxhLGQsaCl7cmV0dXJuIGMuc29tZShmPT5mKGwsYSxkLGgpKX0odGhpcy5hc3QubWF0Y2hlcnMsbCxhLGQsaCl9YnVpbGRTdHlsZXMobCxhLGQpe2xldCBoPXRoaXMuX3N0YXRlU3R5bGVzLmdldCgiKiIpO3JldHVybiB2b2lkIDAhPT1sJiYoaD10aGlzLl9zdGF0ZVN0eWxl'@;
put 'cy5nZXQobD8udG9TdHJpbmcoKSl8fGgpLGg/aC5idWlsZFN0eWxlcyhhLGQpOm5ldyBNYXB9YnVpbGQobCxhLGQsaCxmLHYsVCxZLHJlLGZlKXtjb25zdCBfZT1bXSxrZT10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8VFYsSmU9dGhpcy5idWlsZFN0eWxlcyhk'@;
put 'LFQmJlQucGFyYW1zfHxUVixfZSksdHQ9WSYmWS5wYXJhbXN8fFRWLHl0PXRoaXMuYnVpbGRTdHlsZXMoaCx0dCxfZSksd3Q9bmV3IFNldCxMdD1uZXcgTWFwLG9uPW5ldyBNYXAsc249InZvaWQiPT09aCxNbj17cGFyYW1zOnVpZSh0dCxrZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVs'@;
put 'YXl9LFZuPWZlP1tdOmtWKGwsYSx0aGlzLmFzdC5hbmltYXRpb24sZix2LEplLHl0LE1uLHJlLF9lKTtsZXQgdXI9MDtyZXR1cm4gVm4uZm9yRWFjaChUcj0+e3VyPU1hdGgubWF4KFRyLmR1cmF0aW9uK1RyLmRlbGF5LHVyKX0pLF9lLmxlbmd0aD9saWUoYSx0aGlzLl90cmlnZ2VyTmFtZSxk'@;
put 'LGgsc24sSmUseXQsW10sW10sTHQsb24sdXIsX2UpOihWbi5mb3JFYWNoKFRyPT57Y29uc3QgUGk9VHIuZWxlbWVudCxIaT1kZChMdCxQaSxuZXcgU2V0KTtUci5wcmVTdHlsZVByb3BzLmZvckVhY2goYWk9PkhpLmFkZChhaSkpO2NvbnN0IHdyPWRkKG9uLFBpLG5ldyBTZXQpO1RyLnBvc3RT'@;
put 'dHlsZVByb3BzLmZvckVhY2goYWk9PndyLmFkZChhaSkpLFBpIT09YSYmd3QuYWRkKFBpKX0pLGxpZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCxzbixKZSx5dCxWbixbLi4ud3QudmFsdWVzKCldLEx0LG9uLHVyKSl9fWZ1bmN0aW9uIHVpZShjLGwpe2NvbnN0IGE9ey4uLmx9O3JldHVybiBP'@;
put 'YmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbZCxoXSk9PntudWxsIT1oJiYoYVtkXT1oKX0pLGF9Y2xhc3Mgaklle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnN0eWxlcz1sLHRoaXMuZGVmYXVsdFBhcmFtcz1hLHRoaXMubm9ybWFsaXplcj1kfWJ1aWxkU3R5bGVzKGwsYSl7Y29uc3QgZD1u'@;
put 'ZXcgTWFwLGg9dWllKGwsdGhpcy5kZWZhdWx0UGFyYW1zKTtyZXR1cm4gdGhpcy5zdHlsZXMuc3R5bGVzLmZvckVhY2goZj0+eyJzdHJpbmciIT10eXBlb2YgZiYmZi5mb3JFYWNoKCh2LFQpPT57diYmKHY9SmIodixoLGEpKTtjb25zdCBZPXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVQcm9w'@;
put 'ZXJ0eU5hbWUoVCxhKTt2PXRoaXMubm9ybWFsaXplci5ub3JtYWxpemVTdHlsZVZhbHVlKFQsWSx2LGEpLGQuc2V0KFQsdil9KX0pLGR9fWNsYXNzIFlJZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5uYW1lPWwsdGhpcy5hc3Q9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy50cmFuc2l0aW9u'@;
put 'RmFjdG9yaWVzPVtdLHRoaXMuc3RhdGVzPW5ldyBNYXAsYS5zdGF0ZXMuZm9yRWFjaChoPT57dGhpcy5zdGF0ZXMuc2V0KGgubmFtZSxuZXcgakllKGguc3R5bGUsaC5vcHRpb25zJiZoLm9wdGlvbnMucGFyYW1zfHx7fSxkKSl9KSxkaWUodGhpcy5zdGF0ZXMsInRydWUiLCIxIiksZGllKHRo'@;
put 'aXMuc3RhdGVzLCJmYWxzZSIsIjAiKSxhLnRyYW5zaXRpb25zLmZvckVhY2goaD0+e3RoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5wdXNoKG5ldyBjaWUobCxoLHRoaXMuc3RhdGVzKSl9KSx0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbj1mdW5jdGlvbiB6SWUoYyxsLGEpe3JldHVybiBuZXcgY2ll'@;
put 'KGMse3R5cGU6Sm8uVHJhbnNpdGlvbixhbmltYXRpb246e3R5cGU6Sm8uU2VxdWVuY2Usc3RlcHM6W10sb3B0aW9uczpudWxsfSxtYXRjaGVyczpbKHYsVCk9PiEwXSxvcHRpb25zOm51bGwscXVlcnlDb3VudDowLGRlcENvdW50OjB9LGwpfShsLHRoaXMuc3RhdGVzKX1nZXQgY29udGFpbnNR'@;
put 'dWVyaWVzKCl7cmV0dXJuIHRoaXMuYXN0LnF1ZXJ5Q291bnQ+MH1tYXRjaFRyYW5zaXRpb24obCxhLGQsaCl7cmV0dXJuIHRoaXMudHJhbnNpdGlvbkZhY3Rvcmllcy5maW5kKHY9PnYubWF0Y2gobCxhLGQsaCkpfHxudWxsfW1hdGNoU3R5bGVzKGwsYSxkKXtyZXR1cm4gdGhpcy5mYWxsYmFj'@;
put 'a1RyYW5zaXRpb24uYnVpbGRTdHlsZXMobCxhLGQpfX1mdW5jdGlvbiBkaWUoYyxsLGEpe2MuaGFzKGwpP2MuaGFzKGEpfHxjLnNldChhLGMuZ2V0KGwpKTpjLmhhcyhhKSYmYy5zZXQobCxjLmdldChhKSl9Y29uc3QgVUllPW5ldyB1VDtjbGFzcyBaSWV7Y29uc3RydWN0b3IobCxhLGQpe3Ro'@;
put 'aXMuYm9keU5vZGU9bCx0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fYW5pbWF0aW9ucz1uZXcgTWFwLHRoaXMuX3BsYXllcnNCeUlkPW5ldyBNYXAsdGhpcy5wbGF5ZXJzPVtdfXJlZ2lzdGVyKGwsYSl7Y29uc3QgZD1bXSxmPUNWKHRoaXMuX2RyaXZlcixhLGQsW10p'@;
put 'O2lmKGQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIEtMZShjKXtyZXR1cm4gbmV3IHpuKDM1MDMsITEpfSgpO3RoaXMuX2FuaW1hdGlvbnMuc2V0KGwsZil9X2J1aWxkUGxheWVyKGwsYSxkKXtjb25zdCBoPWwuZWxlbWVudCxmPSRyZSh0aGlzLl9ub3JtYWxpemVyLGwua2V5ZnJhbWVzLGEsZCk7'@;
put 'cmV0dXJuIHRoaXMuX2RyaXZlci5hbmltYXRlKGgsZixsLmR1cmF0aW9uLGwuZGVsYXksbC5lYXNpbmcsW10sITApfWNyZWF0ZShsLGEsZD17fSl7Y29uc3QgaD1bXSxmPXRoaXMuX2FuaW1hdGlvbnMuZ2V0KGwpO2xldCB2O2NvbnN0IFQ9bmV3IE1hcDtpZihmPyh2PWtWKHRoaXMuX2RyaXZl'@;
put 'cixhLGYsX1YsclQsbmV3IE1hcCxuZXcgTWFwLGQsVUllLGgpLHYuZm9yRWFjaChmZT0+e2NvbnN0IF9lPWRkKFQsZmUuZWxlbWVudCxuZXcgTWFwKTtmZS5wb3N0U3R5bGVQcm9wcy5mb3JFYWNoKGtlPT5fZS5zZXQoa2UsbnVsbCkpfSkpOihoLnB1c2goZnVuY3Rpb24gWExlKCl7cmV0dXJu'@;
put 'IG5ldyB6bigzMzAwLCExKX0oKSksdj1bXSksaC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gSkxlKGMpe3JldHVybiBuZXcgem4oMzUwNCwhMSl9KCk7VC5mb3JFYWNoKChmZSxfZSk9PntmZS5mb3JFYWNoKChrZSxXZSk9PntmZS5zZXQoV2UsdGhpcy5fZHJpdmVyLmNvbXB1dGVTdHlsZShfZSxX'@;
put 'ZSxXMykpfSl9KTtjb25zdCByZT1KNCh2Lm1hcChmZT0+e2NvbnN0IF9lPVQuZ2V0KGZlLmVsZW1lbnQpO3JldHVybiB0aGlzLl9idWlsZFBsYXllcihmZSxuZXcgTWFwLF9lKX0pKTtyZXR1cm4gdGhpcy5fcGxheWVyc0J5SWQuc2V0KGwscmUpLHJlLm9uRGVzdHJveSgoKT0+dGhpcy5kZXN0'@;
put 'cm95KGwpKSx0aGlzLnBsYXllcnMucHVzaChyZSkscmV9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3Bs'@;
put 'aWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25zdCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiBRTGUoYyl7cmV0dXJuIG5ldyB6bigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1oVihhLCIiLCIiLCIiKTtyZXR1cm4g'@;
put 'dVYodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixoKSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9'@;
put 'dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChkKXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2go'@;
put 'KTticmVhaztjYXNlImluaXQiOmYuaW5pdCgpO2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBoaWU9Im5nLWFuaW1hdGUtcXVldWVkIixEVj0ibmctYW5pbWF0'@;
put 'ZS1kaXNhYmxlZCIsS0llPVtdLGZpZT17bmFtZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sWEllPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFz'@;
put 'QW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiEwfSxkMj0iX19uZ19yZW1vdmVkIjtjbGFzcyBBVntnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blBy'@;
put 'b3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFsdWU9ZnVuY3Rpb24gdFJlKGMpe3JldHVybiBjPz9udWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3R7dmFsdWU6ZiwuLi52fT1sO3RoaXMub3B0aW9ucz12fWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9w'@;
put 'dGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRpb25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBRYj0idm9pZCIsTFY9bmV3IEFW'@;
put 'KFFiKTtjbGFzcyBKSWV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRo'@;
put 'aXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0iK2wsaWgoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBlSWUoYyxsKXtyZXR1cm4gbmV3IHpuKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQu'@;
put 'bGVuZ3RoKXRocm93IGZ1bmN0aW9uIHRJZShjKXtyZXR1cm4gbmV3IHpuKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBuUmUoYyl7cmV0dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiBuSWUoYyxsKXtyZXR1cm4gbmV3IHpuKDM0MDAsITEpfSgpO2NvbnN0IGY9'@;
put 'ZGQodGhpcy5fZWxlbWVudExpc3RlbmVycyxsLFtdKSx2PXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2godik7Y29uc3QgVD1kZCh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIFQuaGFzKGEpfHwoaWgobCxpVCksaWgobCxpVCsiLSIrYSks'@;
put 'VC5zZXQoYSxMVikpLCgpPT57dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBZPWYuaW5kZXhPZih2KTtZPj0wJiZmLnNwbGljZShZLDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8VC5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFz'@;
put 'KGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGwsYSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIHJJZShjKXtyZXR1cm4gbmV3IHpuKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29u'@;
put 'c3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLHY9bmV3IElWKHRoaXMuaWQsYSxsKTtsZXQgVD10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtUfHwoaWgobCxpVCksaWgobCxpVCsiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxUPW5ldyBNYXApKTts'@;
put 'ZXQgWT1ULmdldChhKTtjb25zdCByZT1uZXcgQVYoZCx0aGlzLmlkKTtpZighKGQmJmQuaGFzT3duUHJvcGVydHkoInZhbHVlIikpJiZZJiZyZS5hYnNvcmJPcHRpb25zKFkub3B0aW9ucyksVC5zZXQoYSxyZSksWXx8KFk9TFYpLHJlLnZhbHVlIT09UWImJlkudmFsdWU9PT1yZS52YWx1ZSl7'@;
put 'aWYoIWZ1bmN0aW9uIG9SZShjLGwpe2NvbnN0IGE9T2JqZWN0LmtleXMoYyksZD1PYmplY3Qua2V5cyhsKTtpZihhLmxlbmd0aCE9ZC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBoPTA7aDxhLmxlbmd0aDtoKyspe2NvbnN0IGY9YVtoXTtpZighbC5oYXNPd25Qcm9wZXJ0eShmKXx8Y1tmXSE9'@;
put 'PWxbZl0pcmV0dXJuITF9cmV0dXJuITB9KFkucGFyYW1zLHJlLnBhcmFtcykpe2NvbnN0IHR0PVtdLHl0PWYubWF0Y2hTdHlsZXMoWS52YWx1ZSxZLnBhcmFtcyx0dCksd3Q9Zi5tYXRjaFN0eWxlcyhyZS52YWx1ZSxyZS5wYXJhbXMsdHQpO3R0Lmxlbmd0aD90aGlzLl9lbmdpbmUucmVwb3J0'@;
put 'RXJyb3IodHQpOnRoaXMuX2VuZ2luZS5hZnRlckZsdXNoKCgpPT57T2cobCx5dCksTWYobCx3dCl9KX1yZXR1cm59Y29uc3Qga2U9ZGQodGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQsbCxbXSk7a2UuZm9yRWFjaCh0dD0+e3R0Lm5hbWVzcGFjZUlkPT10aGlzLmlkJiZ0dC50cmlnZ2Vy'@;
put 'TmFtZT09YSYmdHQucXVldWVkJiZ0dC5kZXN0cm95KCl9KTtsZXQgV2U9Zi5tYXRjaFRyYW5zaXRpb24oWS52YWx1ZSxyZS52YWx1ZSxsLHJlLnBhcmFtcyksSmU9ITE7aWYoIVdlKXtpZighaClyZXR1cm47V2U9Zi5mYWxsYmFja1RyYW5zaXRpb24sSmU9ITB9cmV0dXJuIHRoaXMuX2VuZ2lu'@;
put 'ZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6YSx0cmFuc2l0aW9uOldlLGZyb21TdGF0ZTpZLHRvU3RhdGU6cmUscGxheWVyOnYsaXNGYWxsYmFja1RyYW5zaXRpb246SmV9KSxKZXx8KGloKGwsaGllKSx2Lm9uU3RhcnQoKCk9'@;
put 'PntzOShsLGhpZSl9KSksdi5vbkRvbmUoKCk9PntsZXQgdHQ9dGhpcy5wbGF5ZXJzLmluZGV4T2Yodik7dHQ+PTAmJnRoaXMucGxheWVycy5zcGxpY2UodHQsMSk7Y29uc3QgeXQ9dGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZ2V0KGwpO2lmKHl0KXtsZXQgd3Q9eXQuaW5kZXhPZih2'@;
put 'KTt3dD49MCYmeXQuc3BsaWNlKHd0LDEpfX0pLHRoaXMucGxheWVycy5wdXNoKHYpLGtlLnB1c2godiksdn1kZXJlZ2lzdGVyKGwpe3RoaXMuX3RyaWdnZXJzLmRlbGV0ZShsKSx0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmZvckVhY2goYT0+YS5kZWxldGUobCkpLHRoaXMuX2VsZW1l'@;
put 'bnRMaXN0ZW5lcnMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuc2V0KGQsYS5maWx0ZXIoaD0+aC5uYW1lIT1sKSl9KX1jbGVhckVsZW1lbnRDYWNoZShsKXt0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmRlbGV0ZShsKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJz'@;
put 'LmRlbGV0ZShsKTtjb25zdCBhPXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiYoYS5mb3JFYWNoKGQ9PmQuZGVzdHJveSgpKSx0aGlzLl9lbmdpbmUucGxheWVyc0J5RWxlbWVudC5kZWxldGUobCkpfV9zaWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpe2Nv'@;
put 'bnN0IGQ9dGhpcy5fZW5naW5lLmRyaXZlci5xdWVyeShsLG9ULCEwKTtkLmZvckVhY2goaD0+e2lmKGhbZDJdKXJldHVybjtjb25zdCBmPXRoaXMuX2VuZ2luZS5mZXRjaE5hbWVzcGFjZXNCeUVsZW1lbnQoaCk7Zi5zaXplP2YuZm9yRWFjaCh2PT52LnRyaWdnZXJMZWF2ZUFuaW1hdGlvbiho'@;
put 'LGEsITEsITApKTp0aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpfSksdGhpcy5fZW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZSgoKT0+ZC5mb3JFYWNoKGg9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUoaCkpKX10cmlnZ2VyTGVhdmVBbmltYXRpb24obCxhLGQsaCl7Y29uc3QgZj10aGlz'@;
put 'Ll9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKSx2PW5ldyBNYXA7aWYoZil7Y29uc3QgVD1bXTtpZihmLmZvckVhY2goKFkscmUpPT57aWYodi5zZXQocmUsWS52YWx1ZSksdGhpcy5fdHJpZ2dlcnMuaGFzKHJlKSl7Y29uc3QgZmU9dGhpcy50cmlnZ2VyKGwscmUsUWIsaCk7ZmUmJlQu'@;
put 'cHVzaChmZSl9fSksVC5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZKNChUKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRp'@;
put 'b25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVuZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjto'@;
put 'LmFkZCh2KTtjb25zdCBZPXRoaXMuX3RyaWdnZXJzLmdldCh2KS5mYWxsYmFja1RyYW5zaXRpb24scmU9ZC5nZXQodil8fExWLGZlPW5ldyBBVihRYiksX2U9bmV3IElWKHRoaXMuaWQsdixsKTt0aGlzLl9lbmdpbmUudG90YWxRdWV1ZWRQbGF5ZXJzKyssdGhpcy5fcXVldWUucHVzaCh7ZWxl'@;
put 'bWVudDpsLHRyaWdnZXJOYW1lOnYsdHJhbnNpdGlvbjpZLGZyb21TdGF0ZTpyZSx0b1N0YXRlOmZlLHBsYXllcjpfZSxpc0ZhbGxiYWNrVHJhbnNpdGlvbjohMH0pfSl9fXJlbW92ZU5vZGUobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZTtpZihsLmNoaWxkRWxlbWVudENvdW50JiZ0aGlzLl9z'@;
put 'aWduYWxSZW1vdmFsRm9ySW5uZXJUcmlnZ2VycyhsLGEpLHRoaXMudHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSwhMCkpcmV0dXJuO2xldCBoPSExO2lmKGQudG90YWxBbmltYXRpb25zKXtjb25zdCBmPWQucGxheWVycy5sZW5ndGg/ZC5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk6'@;
put 'W107aWYoZiYmZi5sZW5ndGgpaD0hMDtlbHNle2xldCB2PWw7Zm9yKDt2PXYucGFyZW50Tm9kZTspaWYoZC5zdGF0ZXNCeUVsZW1lbnQuZ2V0KHYpKXtoPSEwO2JyZWFrfX19aWYodGhpcy5wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCksaClkLm1hcmtFbGVtZW50QXNSZW1vdmVk'@;
put 'KHRoaXMuaWQsbCwhMSxhKTtlbHNle2NvbnN0IGY9bFtkMl07KCFmfHxmPT09ZmllKSYmKGQuYWZ0ZXJGbHVzaCgoKT0+dGhpcy5jbGVhckVsZW1lbnRDYWNoZShsKSksZC5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpLGQuX29uUmVtb3ZhbENvbXBsZXRlKGwsYSkpfX1pbnNlcnROb2RlKGws'@;
put 'YSl7aWgobCx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGwpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMuX3F1ZXVlLmZvckVhY2goZD0+e2NvbnN0IGg9ZC5wbGF5ZXI7aWYoaC5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0IGY9ZC5lbGVtZW50LHY9dGhpcy5fZWxl'@;
put 'bWVudExpc3RlbmVycy5nZXQoZik7diYmdi5mb3JFYWNoKFQ9PntpZihULm5hbWU9PWQudHJpZ2dlck5hbWUpe2NvbnN0IFk9aFYoZixkLnRyaWdnZXJOYW1lLGQuZnJvbVN0YXRlLnZhbHVlLGQudG9TdGF0ZS52YWx1ZSk7WS5fZGF0YT1sLHVWKGQucGxheWVyLFQucGhhc2UsWSxULmNhbGxi'@;
put 'YWNrKX19KSxoLm1hcmtlZEZvckRlc3Ryb3k/dGhpcy5fZW5naW5lLmFmdGVyRmx1c2goKCk9PntoLmRlc3Ryb3koKX0pOmEucHVzaChkKX0pLHRoaXMuX3F1ZXVlPVtdLGEuc29ydCgoZCxoKT0+e2NvbnN0IGY9ZC50cmFuc2l0aW9uLmFzdC5kZXBDb3VudCx2PWgudHJhbnNpdGlvbi5hc3Qu'@;
put 'ZGVwQ291bnQ7cmV0dXJuIDA9PWZ8fDA9PXY/Zi12OnRoaXMuX2VuZ2luZS5kcml2ZXIuY29udGFpbnNFbGVtZW50KGQuZWxlbWVudCxoLmVsZW1lbnQpPzE6LTF9KX1kZXN0cm95KGwpe3RoaXMucGxheWVycy5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKSx0aGlzLl9zaWduYWxSZW1vdmFsRm9y'@;
put 'SW5uZXJUcmlnZ2Vycyh0aGlzLmhvc3RFbGVtZW50LGwpfX1jbGFzcyBRSWV7X29uUmVtb3ZhbENvbXBsZXRlKGwsYSl7dGhpcy5vblJlbW92YWxDb21wbGV0ZShsLGEpfWNvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuYm9keU5vZGU9bCx0aGlzLmRyaXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9'@;
put 'ZCx0aGlzLnNjaGVkdWxlcj1oLHRoaXMucGxheWVycz1bXSx0aGlzLm5ld0hvc3RFbGVtZW50cz1uZXcgTWFwLHRoaXMucGxheWVyc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQ9bmV3IE1hcCx0aGlzLnN0YXRlc0J5RWxlbWVudD1uZXcgTWFwLHRoaXMu'@;
put 'ZGlzYWJsZWROb2Rlcz1uZXcgU2V0LHRoaXMudG90YWxBbmltYXRpb25zPTAsdGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLl9uYW1lc3BhY2VMb29rdXA9e30sdGhpcy5fbmFtZXNwYWNlTGlzdD1bXSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnM9W10sdGhpcy5u'@;
put 'YW1lc3BhY2VzQnlIb3N0RWxlbWVudD1uZXcgTWFwLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cz1bXSx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHM9W10sdGhpcy5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+e319Z2V0IHF1ZXVlZFBsYXllcnMoKXtjb25zdCBsPVtdO3JldHVybiB0'@;
put 'aGlzLl9uYW1lc3BhY2VMaXN0LmZvckVhY2goYT0+e2EucGxheWVycy5mb3JFYWNoKGQ9PntkLnF1ZXVlZCYmbC5wdXNoKGQpfSl9KSxsfWNyZWF0ZU5hbWVzcGFjZShsLGEpe2NvbnN0IGQ9bmV3IEpJZShsLGEsdGhpcyk7cmV0dXJuIHRoaXMuYm9keU5vZGUmJnRoaXMuZHJpdmVyLmNvbnRh'@;
put 'aW5zRWxlbWVudCh0aGlzLmJvZHlOb2RlLGEpP3RoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsYSk6KHRoaXMubmV3SG9zdEVsZW1lbnRzLnNldChhLGQpLHRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKSksdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdPWR9X2JhbGFuY2VOYW1lc3BhY2VM'@;
put 'aXN0KGwsYSl7Y29uc3QgZD10aGlzLl9uYW1lc3BhY2VMaXN0LGg9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudDtpZihkLmxlbmd0aC0xPj0wKXtsZXQgdj0hMSxUPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoYSk7Zm9yKDtUOyl7Y29uc3QgWT1oLmdldChUKTtpZihZKXtjb25z'@;
put 'dCByZT1kLmluZGV4T2YoWSk7ZC5zcGxpY2UocmUrMSwwLGwpLHY9ITA7YnJlYWt9VD10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KFQpfXZ8fGQudW5zaGlmdChsKX1lbHNlIGQucHVzaChsKTtyZXR1cm4gaC5zZXQoYSxsKSxsfXJlZ2lzdGVyKGwsYSl7bGV0IGQ9dGhpcy5fbmFtZXNw'@;
put 'YWNlTG9va3VwW2xdO3JldHVybiBkfHwoZD10aGlzLmNyZWF0ZU5hbWVzcGFjZShsLGEpKSxkfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCl7bGV0IGg9dGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdO2gmJmgucmVnaXN0ZXIoYSxkKSYmdGhpcy50b3RhbEFuaW1hdGlvbnMrK31kZXN0cm95KGwsYSl7'@;
put 'bCYmKHRoaXMuYWZ0ZXJGbHVzaCgoKT0+e30pLHRoaXMuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKCgpPT57Y29uc3QgZD10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt0aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmRlbGV0ZShkLmhvc3RFbGVtZW50KTtjb25zdCBoPXRoaXMuX25hbWVz'@;
put 'cGFjZUxpc3QuaW5kZXhPZihkKTtoPj0wJiZ0aGlzLl9uYW1lc3BhY2VMaXN0LnNwbGljZShoLDEpLGQuZGVzdHJveShhKSxkZWxldGUgdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfSkpfV9mZXRjaE5hbWVzcGFjZShsKXtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTG9va3VwW2xdfWZldGNoTmFt'@;
put 'ZXNwYWNlc0J5RWxlbWVudChsKXtjb25zdCBhPW5ldyBTZXQsZD10aGlzLnN0YXRlc0J5RWxlbWVudC5nZXQobCk7aWYoZClmb3IobGV0IGggb2YgZC52YWx1ZXMoKSlpZihoLm5hbWVzcGFjZUlkKXtjb25zdCBmPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGgubmFtZXNwYWNlSWQpO2YmJmEuYWRk'@;
put 'KGYpfXJldHVybiBhfXRyaWdnZXIobCxhLGQsaCl7aWYoZlQoYSkpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk7aWYoZilyZXR1cm4gZi50cmlnZ2VyKGEsZCxoKSwhMH1yZXR1cm4hMX1pbnNlcnROb2RlKGwsYSxkLGgpe2lmKCFmVChhKSlyZXR1cm47Y29uc3QgZj1hW2QyXTtp'@;
put 'ZihmJiZmLnNldEZvclJlbW92YWwpe2Yuc2V0Rm9yUmVtb3ZhbD0hMSxmLnNldEZvck1vdmU9ITA7Y29uc3Qgdj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuaW5kZXhPZihhKTt2Pj0wJiZ0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMuc3BsaWNlKHYsMSl9aWYobCl7Y29uc3Qgdj10'@;
put 'aGlzLl9mZXRjaE5hbWVzcGFjZShsKTt2JiZ2Lmluc2VydE5vZGUoYSxkKX1oJiZ0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSl9Y29sbGVjdEVudGVyRWxlbWVudChsKXt0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMucHVzaChsKX1tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKXthP3Ro'@;
put 'aXMuZGlzYWJsZWROb2Rlcy5oYXMobCl8fCh0aGlzLmRpc2FibGVkTm9kZXMuYWRkKGwpLGloKGwsRFYpKTp0aGlzLmRpc2FibGVkTm9kZXMuaGFzKGwpJiYodGhpcy5kaXNhYmxlZE5vZGVzLmRlbGV0ZShsKSxzOShsLERWKSl9cmVtb3ZlTm9kZShsLGEsZCl7aWYoZlQoYSkpe3RoaXMuc2No'@;
put 'ZWR1bGVyPy5ub3RpZnkoKTtjb25zdCBoPWw/dGhpcy5fZmV0Y2hOYW1lc3BhY2UobCk6bnVsbDtoP2gucmVtb3ZlTm9kZShhLGQpOnRoaXMubWFya0VsZW1lbnRBc1JlbW92ZWQobCxhLCExLGQpO2NvbnN0IGY9dGhpcy5uYW1lc3BhY2VzQnlIb3N0RWxlbWVudC5nZXQoYSk7ZiYmZi5pZCE9'@;
put 'PWwmJmYucmVtb3ZlTm9kZShhLGQpfWVsc2UgdGhpcy5fb25SZW1vdmFsQ29tcGxldGUoYSxkKX1tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsZCxoLGYpe3RoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5wdXNoKGEpLGFbZDJdPXtuYW1lc3BhY2VJZDpsLHNldEZvclJlbW92YWw6aCxoYXNB'@;
put 'bmltYXRpb246ZCxyZW1vdmVkQmVmb3JlUXVlcmllZDohMSxwcmV2aW91c1RyaWdnZXJzVmFsdWVzOmZ9fWxpc3RlbihsLGEsZCxoLGYpe3JldHVybiBmVChhKT90aGlzLl9mZXRjaE5hbWVzcGFjZShsKS5saXN0ZW4oYSxkLGgsZik6KCk9Pnt9fV9idWlsZEluc3RydWN0aW9uKGwsYSxkLGgs'@;
put 'Zil7cmV0dXJuIGwudHJhbnNpdGlvbi5idWlsZCh0aGlzLmRyaXZlcixsLmVsZW1lbnQsbC5mcm9tU3RhdGUudmFsdWUsbC50b1N0YXRlLnZhbHVlLGQsaCxsLmZyb21TdGF0ZS5vcHRpb25zLGwudG9TdGF0ZS5vcHRpb25zLGEsZil9ZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKXtsZXQgYT10'@;
put 'aGlzLmRyaXZlci5xdWVyeShsLG9ULCEwKTthLmZvckVhY2goZD0+dGhpcy5kZXN0cm95QWN0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZCkpLDAhPXRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuc2l6ZSYmKGE9dGhpcy5kcml2ZXIucXVlcnkobCx2ViwhMCksYS5mb3JFYWNoKGQ9PnRo'@;
put 'aXMuZmluaXNoQWN0aXZlUXVlcmllZEFuaW1hdGlvbk9uRWxlbWVudChkKSkpfWRlc3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChsKXtjb25zdCBhPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PntkLnF1ZXVlZD9kLm1hcmtlZEZvckRlc3Ryb3k9'@;
put 'ITA6ZC5kZXN0cm95KCl9KX1maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5nZXQobCk7YSYmYS5mb3JFYWNoKGQ9PmQuZmluaXNoKCkpfXdoZW5SZW5kZXJpbmdEb25lKCl7cmV0dXJuIG5ldyBQcm9t'@;
put 'aXNlKGw9PntpZih0aGlzLnBsYXllcnMubGVuZ3RoKXJldHVybiBKNCh0aGlzLnBsYXllcnMpLm9uRG9uZSgoKT0+bCgpKTtsKCl9KX1wcm9jZXNzTGVhdmVOb2RlKGwpe2NvbnN0IGE9bFtkMl07aWYoYSYmYS5zZXRGb3JSZW1vdmFsKXtpZihsW2QyXT1maWUsYS5uYW1lc3BhY2VJZCl7dGhp'@;
put 'cy5kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpO2NvbnN0IGQ9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoYS5uYW1lc3BhY2VJZCk7ZCYmZC5jbGVhckVsZW1lbnRDYWNoZShsKX10aGlzLl9vblJlbW92YWxDb21wbGV0ZShsLGEuc2V0Rm9yUmVtb3ZhbCl9bC5jbGFzc0xpc3Q/LmNvbnRhaW5zKERW'@;
put 'KSYmdGhpcy5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCwhMSksdGhpcy5kcml2ZXIucXVlcnkobCwiLm5nLWFuaW1hdGUtZGlzYWJsZWQiLCEwKS5mb3JFYWNoKGQ9Pnt0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChkLCExKX0pfWZsdXNoKGw9LTEpe2xldCBhPVtdO2lmKHRoaXMubmV3SG9z'@;
put 'dEVsZW1lbnRzLnNpemUmJih0aGlzLm5ld0hvc3RFbGVtZW50cy5mb3JFYWNoKChkLGgpPT50aGlzLl9iYWxhbmNlTmFtZXNwYWNlTGlzdChkLGgpKSx0aGlzLm5ld0hvc3RFbGVtZW50cy5jbGVhcigpKSx0aGlzLnRvdGFsQW5pbWF0aW9ucyYmdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRz'@;
put 'Lmxlbmd0aClmb3IobGV0IGQ9MDtkPHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg7ZCsrKWloKHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50c1tkXSwibmctc3Rhci1pbnNlcnRlZCIpO2lmKHRoaXMuX25hbWVzcGFjZUxpc3QubGVuZ3RoJiYodGhpcy50b3RhbFF1ZXVlZFBs'@;
put 'YXllcnN8fHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5sZW5ndGgpKXtjb25zdCBkPVtdO3RyeXthPXRoaXMuX2ZsdXNoQW5pbWF0aW9ucyhkLGwpfWZpbmFsbHl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspZFtoXSgpfX1lbHNlIGZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRM'@;
put 'ZWF2ZUVsZW1lbnRzLmxlbmd0aDtkKyspdGhpcy5wcm9jZXNzTGVhdmVOb2RlKHRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50c1tkXSk7aWYodGhpcy50b3RhbFF1ZXVlZFBsYXllcnM9MCx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5jb2xsZWN0ZWRMZWF2ZUVs'@;
put 'ZW1lbnRzLmxlbmd0aD0wLHRoaXMuX2ZsdXNoRm5zLmZvckVhY2goZD0+ZCgpKSx0aGlzLl9mbHVzaEZucz1bXSx0aGlzLl93aGVuUXVpZXRGbnMubGVuZ3RoKXtjb25zdCBkPXRoaXMuX3doZW5RdWlldEZuczt0aGlzLl93aGVuUXVpZXRGbnM9W10sYS5sZW5ndGg/SjQoYSkub25Eb25lKCgp'@;
put 'PT57ZC5mb3JFYWNoKGg9PmgoKSl9KTpkLmZvckVhY2goaD0+aCgpKX19cmVwb3J0RXJyb3IobCl7dGhyb3cgZnVuY3Rpb24gaUllKGMpe3JldHVybiBuZXcgem4oMzQwMiwhMSl9KCl9X2ZsdXNoQW5pbWF0aW9ucyhsLGEpe2NvbnN0IGQ9bmV3IHVULGg9W10sZj1uZXcgTWFwLHY9W10sVD1u'@;
put 'ZXcgTWFwLFk9bmV3IE1hcCxyZT1uZXcgTWFwLGZlPW5ldyBTZXQ7dGhpcy5kaXNhYmxlZE5vZGVzLmZvckVhY2goZXI9PntmZS5hZGQoZXIpO2NvbnN0IERyPXRoaXMuZHJpdmVyLnF1ZXJ5KGVyLCIubmctYW5pbWF0ZS1xdWV1ZWQiLCEwKTtmb3IobGV0IEVyPTA7RXI8RHIubGVuZ3RoO0Vy'@;
put 'KyspZmUuYWRkKERyW0VyXSl9KTtjb25zdCBfZT10aGlzLmJvZHlOb2RlLGtlPUFycmF5LmZyb20odGhpcy5zdGF0ZXNCeUVsZW1lbnQua2V5cygpKSxXZT1naWUoa2UsdGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzKSxKZT1uZXcgTWFwO2xldCB0dD0wO1dlLmZvckVhY2goKGVyLERyKT0+'@;
put 'e2NvbnN0IEVyPV9WK3R0Kys7SmUuc2V0KERyLEVyKSxlci5mb3JFYWNoKGd0PT5paChndCxFcikpfSk7Y29uc3QgeXQ9W10sd3Q9bmV3IFNldCxMdD1uZXcgU2V0O2ZvcihsZXQgZXI9MDtlcjx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2VyKyspe2NvbnN0IERyPXRoaXMu'@;
put 'Y29sbGVjdGVkTGVhdmVFbGVtZW50c1tlcl0sRXI9RHJbZDJdO0VyJiZFci5zZXRGb3JSZW1vdmFsJiYoeXQucHVzaChEciksd3QuYWRkKERyKSxFci5oYXNBbmltYXRpb24/dGhpcy5kcml2ZXIucXVlcnkoRHIsIi5uZy1zdGFyLWluc2VydGVkIiwhMCkuZm9yRWFjaChndD0+d3QuYWRkKGd0'@;
put 'KSk6THQuYWRkKERyKSl9Y29uc3Qgb249bmV3IE1hcCxzbj1naWUoa2UsQXJyYXkuZnJvbSh3dCkpO3NuLmZvckVhY2goKGVyLERyKT0+e2NvbnN0IEVyPXJUK3R0Kys7b24uc2V0KERyLEVyKSxlci5mb3JFYWNoKGd0PT5paChndCxFcikpfSksbC5wdXNoKCgpPT57V2UuZm9yRWFjaCgoZXIs'@;
put 'RHIpPT57Y29uc3QgRXI9SmUuZ2V0KERyKTtlci5mb3JFYWNoKGd0PT5zOShndCxFcikpfSksc24uZm9yRWFjaCgoZXIsRHIpPT57Y29uc3QgRXI9b24uZ2V0KERyKTtlci5mb3JFYWNoKGd0PT5zOShndCxFcikpfSkseXQuZm9yRWFjaChlcj0+e3RoaXMucHJvY2Vzc0xlYXZlTm9kZShlcil9'@;
put 'KX0pO2NvbnN0IE1uPVtdLFZuPVtdO2ZvcihsZXQgZXI9dGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgtMTtlcj49MDtlci0tKXRoaXMuX25hbWVzcGFjZUxpc3RbZXJdLmRyYWluUXVldWVkVHJhbnNpdGlvbnMoYSkuZm9yRWFjaChFcj0+e2NvbnN0IGd0PUVyLnBsYXllcixPdD1Fci5lbGVt'@;
put 'ZW50O2lmKE1uLnB1c2goZ3QpLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGgpe2NvbnN0IFFyPU90W2QyXTtpZihRciYmUXIuc2V0Rm9yTW92ZSl7aWYoUXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcyYmUXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5oYXMoRXIudHJpZ2dlck5h'@;
put 'bWUpKXtjb25zdCBuaT1Rci5wcmV2aW91c1RyaWdnZXJzVmFsdWVzLmdldChFci50cmlnZ2VyTmFtZSksS3I9dGhpcy5zdGF0ZXNCeUVsZW1lbnQuZ2V0KEVyLmVsZW1lbnQpO2lmKEtyJiZLci5oYXMoRXIudHJpZ2dlck5hbWUpKXtjb25zdCBqbz1Lci5nZXQoRXIudHJpZ2dlck5hbWUpO2pv'@;
put 'LnZhbHVlPW5pLEtyLnNldChFci50cmlnZ2VyTmFtZSxqbyl9fXJldHVybiB2b2lkIGd0LmRlc3Ryb3koKX19Y29uc3QgY249IV9lfHwhdGhpcy5kcml2ZXIuY29udGFpbnNFbGVtZW50KF9lLE90KSxObj1vbi5nZXQoT3QpLHhuPUplLmdldChPdCksS249dGhpcy5fYnVpbGRJbnN0cnVjdGlv'@;
put 'bihFcixkLHhuLE5uLGNuKTtpZihLbi5lcnJvcnMmJktuLmVycm9ycy5sZW5ndGgpcmV0dXJuIHZvaWQgVm4ucHVzaChLbik7aWYoY24pcmV0dXJuIGd0Lm9uU3RhcnQoKCk9Pk9nKE90LEtuLmZyb21TdHlsZXMpKSxndC5vbkRlc3Ryb3koKCk9Pk1mKE90LEtuLnRvU3R5bGVzKSksdm9pZCBo'@;
put 'LnB1c2goZ3QpO2lmKEVyLmlzRmFsbGJhY2tUcmFuc2l0aW9uKXJldHVybiBndC5vblN0YXJ0KCgpPT5PZyhPdCxLbi5mcm9tU3R5bGVzKSksZ3Qub25EZXN0cm95KCgpPT5NZihPdCxLbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKGd0KTtjb25zdCBQcj1bXTtLbi50aW1lbGluZXMuZm9yRWFj'@;
put 'aChRcj0+e1FyLnN0cmV0Y2hTdGFydGluZ0tleWZyYW1lPSEwLHRoaXMuZGlzYWJsZWROb2Rlcy5oYXMoUXIuZWxlbWVudCl8fFByLnB1c2goUXIpfSksS24udGltZWxpbmVzPVByLGQuYXBwZW5kKE90LEtuLnRpbWVsaW5lcyksdi5wdXNoKHtpbnN0cnVjdGlvbjpLbixwbGF5ZXI6Z3QsZWxl'@;
put 'bWVudDpPdH0pLEtuLnF1ZXJpZWRFbGVtZW50cy5mb3JFYWNoKFFyPT5kZChULFFyLFtdKS5wdXNoKGd0KSksS24ucHJlU3R5bGVQcm9wcy5mb3JFYWNoKChRcixuaSk9PntpZihRci5zaXplKXtsZXQgS3I9WS5nZXQobmkpO0tyfHxZLnNldChuaSxLcj1uZXcgU2V0KSxRci5mb3JFYWNoKChq'@;
put 'byxUcyk9PktyLmFkZChUcykpfX0pLEtuLnBvc3RTdHlsZVByb3BzLmZvckVhY2goKFFyLG5pKT0+e2xldCBLcj1yZS5nZXQobmkpO0tyfHxyZS5zZXQobmksS3I9bmV3IFNldCksUXIuZm9yRWFjaCgoam8sVHMpPT5Lci5hZGQoVHMpKX0pfSk7aWYoVm4ubGVuZ3RoKXtjb25zdCBlcj1bXTtW'@;
put 'bi5mb3JFYWNoKERyPT57ZXIucHVzaChmdW5jdGlvbiBvSWUoYyxsKXtyZXR1cm4gbmV3IHpuKDM1MDUsITEpfSgpKX0pLE1uLmZvckVhY2goRHI9PkRyLmRlc3Ryb3koKSksdGhpcy5yZXBvcnRFcnJvcihlcil9Y29uc3QgdXI9bmV3IE1hcCxUcj1uZXcgTWFwO3YuZm9yRWFjaChlcj0+e2Nv'@;
put 'bnN0IERyPWVyLmVsZW1lbnQ7ZC5oYXMoRHIpJiYoVHIuc2V0KERyLERyKSx0aGlzLl9iZWZvcmVBbmltYXRpb25CdWlsZChlci5wbGF5ZXIubmFtZXNwYWNlSWQsZXIuaW5zdHJ1Y3Rpb24sdXIpKX0pLGguZm9yRWFjaChlcj0+e2NvbnN0IERyPWVyLmVsZW1lbnQ7dGhpcy5fZ2V0UHJldmlv'@;
put 'dXNQbGF5ZXJzKERyLCExLGVyLm5hbWVzcGFjZUlkLGVyLnRyaWdnZXJOYW1lLG51bGwpLmZvckVhY2goZ3Q9PntkZCh1cixEcixbXSkucHVzaChndCksZ3QuZGVzdHJveSgpfSl9KTtjb25zdCBQaT15dC5maWx0ZXIoZXI9PnZpZShlcixZLHJlKSksSGk9bmV3IE1hcDttaWUoSGksdGhpcy5k'@;
put 'cml2ZXIsTHQscmUsVzMpLmZvckVhY2goZXI9Pnt2aWUoZXIsWSxyZSkmJlBpLnB1c2goZXIpfSk7Y29uc3QgYWk9bmV3IE1hcDtXZS5mb3JFYWNoKChlcixEcik9PnttaWUoYWksdGhpcy5kcml2ZXIsbmV3IFNldChlciksWSwiISIpfSksUGkuZm9yRWFjaChlcj0+e2NvbnN0IERyPUhpLmdl'@;
put 'dChlciksRXI9YWkuZ2V0KGVyKTtIaS5zZXQoZXIsbmV3IE1hcChbLi4uRHI/LmVudHJpZXMoKT8/W10sLi4uRXI/LmVudHJpZXMoKT8/W11dKSl9KTtjb25zdCB0aT1bXSxqbj1bXSxVcj17fTt2LmZvckVhY2goZXI9Pntjb25zdHtlbGVtZW50OkRyLHBsYXllcjpFcixpbnN0cnVjdGlvbjpn'@;
put 'dH09ZXI7aWYoZC5oYXMoRHIpKXtpZihmZS5oYXMoRHIpKXJldHVybiBFci5vbkRlc3Ryb3koKCk9Pk1mKERyLGd0LnRvU3R5bGVzKSksRXIuZGlzYWJsZWQ9ITAsRXIub3ZlcnJpZGVUb3RhbFRpbWUoZ3QudG90YWxUaW1lKSx2b2lkIGgucHVzaChFcik7bGV0IE90PVVyO2lmKFRyLnNpemU+'@;
put 'MSl7bGV0IE5uPURyO2NvbnN0IHhuPVtdO2Zvcig7Tm49Tm4ucGFyZW50Tm9kZTspe2NvbnN0IEtuPVRyLmdldChObik7aWYoS24pe090PUtuO2JyZWFrfXhuLnB1c2goTm4pfXhuLmZvckVhY2goS249PlRyLnNldChLbixPdCkpfWNvbnN0IGNuPXRoaXMuX2J1aWxkQW5pbWF0aW9uKEVyLm5h'@;
put 'bWVzcGFjZUlkLGd0LHVyLGYsYWksSGkpO2lmKEVyLnNldFJlYWxQbGF5ZXIoY24pLE90PT09VXIpdGkucHVzaChFcik7ZWxzZXtjb25zdCBObj10aGlzLnBsYXllcnNCeUVsZW1lbnQuZ2V0KE90KTtObiYmTm4ubGVuZ3RoJiYoRXIucGFyZW50UGxheWVyPUo0KE5uKSksaC5wdXNoKEVyKX19'@;
put 'ZWxzZSBPZyhEcixndC5mcm9tU3R5bGVzKSxFci5vbkRlc3Ryb3koKCk9Pk1mKERyLGd0LnRvU3R5bGVzKSksam4ucHVzaChFciksZmUuaGFzKERyKSYmaC5wdXNoKEVyKX0pLGpuLmZvckVhY2goZXI9Pntjb25zdCBEcj1mLmdldChlci5lbGVtZW50KTtpZihEciYmRHIubGVuZ3RoKXtjb25z'@;
put 'dCBFcj1KNChEcik7ZXIuc2V0UmVhbFBsYXllcihFcil9fSksaC5mb3JFYWNoKGVyPT57ZXIucGFyZW50UGxheWVyP2VyLnN5bmNQbGF5ZXJFdmVudHMoZXIucGFyZW50UGxheWVyKTplci5kZXN0cm95KCl9KTtmb3IobGV0IGVyPTA7ZXI8eXQubGVuZ3RoO2VyKyspe2NvbnN0IERyPXl0W2Vy'@;
put 'XSxFcj1EcltkMl07aWYoczkoRHIsclQpLEVyJiZFci5oYXNBbmltYXRpb24pY29udGludWU7bGV0IGd0PVtdO2lmKFQuc2l6ZSl7bGV0IGNuPVQuZ2V0KERyKTtjbiYmY24ubGVuZ3RoJiZndC5wdXNoKC4uLmNuKTtsZXQgTm49dGhpcy5kcml2ZXIucXVlcnkoRHIsdlYsITApO2ZvcihsZXQg'@;
put 'eG49MDt4bjxObi5sZW5ndGg7eG4rKyl7bGV0IEtuPVQuZ2V0KE5uW3huXSk7S24mJktuLmxlbmd0aCYmZ3QucHVzaCguLi5Lbil9fWNvbnN0IE90PWd0LmZpbHRlcihjbj0+IWNuLmRlc3Ryb3llZCk7T3QubGVuZ3RoP3JSZSh0aGlzLERyLE90KTp0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoRHIp'@;
put 'fXJldHVybiB5dC5sZW5ndGg9MCx0aS5mb3JFYWNoKGVyPT57dGhpcy5wbGF5ZXJzLnB1c2goZXIpLGVyLm9uRG9uZSgoKT0+e2VyLmRlc3Ryb3koKTtjb25zdCBEcj10aGlzLnBsYXllcnMuaW5kZXhPZihlcik7dGhpcy5wbGF5ZXJzLnNwbGljZShEciwxKX0pLGVyLnBsYXkoKX0pLHRpfWFm'@;
put 'dGVyRmx1c2gobCl7dGhpcy5fZmx1c2hGbnMucHVzaChsKX1hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUobCl7dGhpcy5fd2hlblF1aWV0Rm5zLnB1c2gobCl9X2dldFByZXZpb3VzUGxheWVycyhsLGEsZCxoLGYpe2xldCB2PVtdO2lmKGEpe2NvbnN0IFQ9dGhpcy5wbGF5ZXJzQnlRdWVyaWVk'@;
put 'RWxlbWVudC5nZXQobCk7VCYmKHY9VCl9ZWxzZXtjb25zdCBUPXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQobCk7aWYoVCl7Y29uc3QgWT0hZnx8Zj09UWI7VC5mb3JFYWNoKHJlPT57cmUucXVldWVkfHwhWSYmcmUudHJpZ2dlck5hbWUhPWh8fHYucHVzaChyZSl9KX19cmV0dXJuKGR8fGgp'@;
put 'JiYodj12LmZpbHRlcihUPT4hKGQmJmQhPVQubmFtZXNwYWNlSWR8fGgmJmghPVQudHJpZ2dlck5hbWUpKSksdn1fYmVmb3JlQW5pbWF0aW9uQnVpbGQobCxhLGQpe2NvbnN0IGY9YS5lbGVtZW50LHY9YS5pc1JlbW92YWxUcmFuc2l0aW9uP3ZvaWQgMDpsLFQ9YS5pc1JlbW92YWxUcmFuc2l0'@;
put 'aW9uP3ZvaWQgMDphLnRyaWdnZXJOYW1lO2Zvcihjb25zdCBZIG9mIGEudGltZWxpbmVzKXtjb25zdCByZT1ZLmVsZW1lbnQsZmU9cmUhPT1mLF9lPWRkKGQscmUsW10pO3RoaXMuX2dldFByZXZpb3VzUGxheWVycyhyZSxmZSx2LFQsYS50b1N0YXRlKS5mb3JFYWNoKFdlPT57Y29uc3QgSmU9'@;
put 'V2UuZ2V0UmVhbFBsYXllcigpO0plLmJlZm9yZURlc3Ryb3kmJkplLmJlZm9yZURlc3Ryb3koKSxXZS5kZXN0cm95KCksX2UucHVzaChXZSl9KX1PZyhmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBUPWEudHJpZ2dlck5hbWUsWT1hLmVsZW1lbnQs'@;
put 'cmU9W10sZmU9bmV3IFNldCxfZT1uZXcgU2V0LGtlPWEudGltZWxpbmVzLm1hcChKZT0+e2NvbnN0IHR0PUplLmVsZW1lbnQ7ZmUuYWRkKHR0KTtjb25zdCB5dD10dFtkMl07aWYoeXQmJnl0LnJlbW92ZWRCZWZvcmVRdWVyaWVkKXJldHVybiBuZXcgcGIoSmUuZHVyYXRpb24sSmUuZGVsYXkp'@;
put 'O2NvbnN0IHd0PXR0IT09WSxMdD1mdW5jdGlvbiBpUmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gX2llKGMsbCksbH0oKGQuZ2V0KHR0KXx8S0llKS5tYXAodXI9PnVyLmdldFJlYWxQbGF5ZXIoKSkpLmZpbHRlcih1cj0+ISF1ci5lbGVtZW50JiZ1ci5lbGVtZW50PT09dHQpLG9uPWYuZ2V0KHR0'@;
put 'KSxzbj12LmdldCh0dCksTW49JHJlKHRoaXMuX25vcm1hbGl6ZXIsSmUua2V5ZnJhbWVzLG9uLHNuKSxWbj10aGlzLl9idWlsZFBsYXllcihKZSxNbixMdCk7aWYoSmUuc3ViVGltZWxpbmUmJmgmJl9lLmFkZCh0dCksd3Qpe2NvbnN0IHVyPW5ldyBJVihsLFQsdHQpO3VyLnNldFJlYWxQbGF5'@;
put 'ZXIoVm4pLHJlLnB1c2godXIpfXJldHVybiBWbn0pO3JlLmZvckVhY2goSmU9PntkZCh0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LEplLmVsZW1lbnQsW10pLnB1c2goSmUpLEplLm9uRG9uZSgoKT0+ZnVuY3Rpb24gZVJlKGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxl'@;
put 'bmd0aCl7Y29uc3QgaD1kLmluZGV4T2YoYSk7ZC5zcGxpY2UoaCwxKX0wPT1kLmxlbmd0aCYmYy5kZWxldGUobCl9cmV0dXJuIGR9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsSmUuZWxlbWVudCxKZSkpfSksZmUuZm9yRWFjaChKZT0+aWgoSmUsZWllKSk7Y29uc3QgV2U9SjQoa2Up'@;
put 'O3JldHVybiBXZS5vbkRlc3Ryb3koKCk9PntmZS5mb3JFYWNoKEplPT5zOShKZSxlaWUpKSxNZihZLGEudG9TdHlsZXMpfSksX2UuZm9yRWFjaChKZT0+e2RkKGgsSmUsW10pLnB1c2goV2UpfSksV2V9X2J1aWxkUGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5h'@;
put 'bmltYXRlKGwuZWxlbWVudCxhLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxkKTpuZXcgcGIobC5kdXJhdGlvbixsLmRlbGF5KX19Y2xhc3MgSVZ7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5f'@;
put 'cGxheWVyPW5ldyBwYix0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tzPW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVl'@;
put 'ZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVyfHwodGhpcy5fcGxheWVyPWwsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goaD0+dVYobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRD'@;
put 'YWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFsVGltZShsLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxU'@;
put 'aW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFjayYmbC5vblN0YXJ0KCgpPT5hLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksbC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3ko'@;
put 'KSl9X3F1ZXVlRXZlbnQobCxhKXtkZCh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsbCxbXSkucHVzaChhKX1vbkRvbmUobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGwpLHRoaXMuX3BsYXllci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVl'@;
put 'dWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9uRGVzdHJveShsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsbCksdGhpcy5fcGxheWVyLm9uRGVzdHJveShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7'@;
put 'cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXll'@;
put 'ci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8'@;
put 'dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFj'@;
put 'ayhsKX19ZnVuY3Rpb24gZlQoYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBlfWZ1bmN0aW9uIHBpZShjLGwpe2NvbnN0IGE9Yy5zdHlsZS5kaXNwbGF5O3JldHVybiBjLnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUiLGF9ZnVuY3Rpb24gbWllKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVh'@;
put 'Y2goWT0+Zi5wdXNoKHBpZShZKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChZLHJlKT0+e2NvbnN0IGZlPW5ldyBNYXA7WS5mb3JFYWNoKF9lPT57Y29uc3Qga2U9bC5jb21wdXRlU3R5bGUocmUsX2UsaCk7ZmUuc2V0KF9lLGtlKSwoIWtlfHwwPT1rZS5sZW5ndGgpJiYocmVbZDJdPVhJZSx2'@;
put 'LnB1c2gocmUpKX0pLGMuc2V0KHJlLGZlKX0pO2xldCBUPTA7cmV0dXJuIGEuZm9yRWFjaChZPT5waWUoWSxmW1QrK10pKSx2fWZ1bmN0aW9uIGdpZShjLGwpe2NvbnN0IGE9bmV3IE1hcDtpZihjLmZvckVhY2goVD0+YS5zZXQoVCxbXSkpLDA9PWwubGVuZ3RoKXJldHVybiBhO2NvbnN0IGg9'@;
put 'bmV3IFNldChsKSxmPW5ldyBNYXA7ZnVuY3Rpb24gdihUKXtpZighVClyZXR1cm4gMTtsZXQgWT1mLmdldChUKTtpZihZKXJldHVybiBZO2NvbnN0IHJlPVQucGFyZW50Tm9kZTtyZXR1cm4gWT1hLmhhcyhyZSk/cmU6aC5oYXMocmUpPzE6dihyZSksZi5zZXQoVCxZKSxZfXJldHVybiBsLmZv'@;
put 'ckVhY2goVD0+e2NvbnN0IFk9dihUKTsxIT09WSYmYS5nZXQoWSkucHVzaChUKX0pLGF9ZnVuY3Rpb24gaWgoYyxsKXtjLmNsYXNzTGlzdD8uYWRkKGwpfWZ1bmN0aW9uIHM5KGMsbCl7Yy5jbGFzc0xpc3Q/LnJlbW92ZShsKX1mdW5jdGlvbiByUmUoYyxsLGEpe0o0KGEpLm9uRG9uZSgoKT0+'@;
put 'Yy5wcm9jZXNzTGVhdmVOb2RlKGwpKX1mdW5jdGlvbiBfaWUoYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1jW2FdO2QgaW5zdGFuY2VvZiBJZWU/X2llKGQucGxheWVycyxsKTpsLnB1c2goZCl9fWZ1bmN0aW9uIHZpZShjLGwsYSl7Y29uc3QgZD1hLmdldChjKTtp'@;
put 'ZighZClyZXR1cm4hMTtsZXQgaD1sLmdldChjKTtyZXR1cm4gaD9kLmZvckVhY2goZj0+aC5hZGQoZikpOmwuc2V0KGMsZCksYS5kZWxldGUoYyksITB9Y2xhc3MgZXd7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5fZHJpdmVyPWEsdGhpcy5fbm9ybWFsaXplcj1kLHRoaXMuX3RyaWdnZXJD'@;
put 'YWNoZT17fSx0aGlzLm9uUmVtb3ZhbENvbXBsZXRlPShmLHYpPT57fSx0aGlzLl90cmFuc2l0aW9uRW5naW5lPW5ldyBRSWUobC5ib2R5LGEsZCxoKSx0aGlzLl90aW1lbGluZUVuZ2luZT1uZXcgWkllKGwuYm9keSxhLGQpLHRoaXMuX3RyYW5zaXRpb25FbmdpbmUub25SZW1vdmFsQ29tcGxl'@;
put 'dGU9KGYsdik9PnRoaXMub25SZW1vdmFsQ29tcGxldGUoZix2KX1yZWdpc3RlclRyaWdnZXIobCxhLGQsaCxmKXtjb25zdCB2PWwrIi0iK2g7bGV0IFQ9dGhpcy5fdHJpZ2dlckNhY2hlW3ZdO2lmKCFUKXtjb25zdCBZPVtdLGZlPUNWKHRoaXMuX2RyaXZlcixmLFksW10pO2lmKFkubGVuZ3Ro'@;
put 'KXRocm93IGZ1bmN0aW9uICRMZShjLGwpe3JldHVybiBuZXcgem4oMzQwNCwhMSl9KCk7VD1mdW5jdGlvbiBCSWUoYyxsLGEpe3JldHVybiBuZXcgWUllKGMsbCxhKX0oaCxmZSx0aGlzLl9ub3JtYWxpemVyKSx0aGlzLl90cmlnZ2VyQ2FjaGVbdl09VH10aGlzLl90cmFuc2l0aW9uRW5naW5l'@;
put 'LnJlZ2lzdGVyVHJpZ2dlcihhLGgsVCl9cmVnaXN0ZXIobCxhKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlZ2lzdGVyKGwsYSl9ZGVzdHJveShsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuZGVzdHJveShsLGEpfW9uSW5zZXJ0KGwsYSxkLGgpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUu'@;
put 'aW5zZXJ0Tm9kZShsLGEsZCxoKX1vblJlbW92ZShsLGEsZCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5yZW1vdmVOb2RlKGwsYSxkKX1kaXNhYmxlQW5pbWF0aW9ucyhsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUubWFya0VsZW1lbnRBc0Rpc2FibGVkKGwsYSl9cHJvY2VzcyhsLGEsZCxo'@;
put 'KXtpZigiQCI9PWQuY2hhckF0KDApKXtjb25zdFtmLHZdPXFyZShkKTt0aGlzLl90aW1lbGluZUVuZ2luZS5jb21tYW5kKGYsYSx2LGgpfWVsc2UgdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS50cmlnZ2VyKGwsYSxkLGgpfWxpc3RlbihsLGEsZCxoLGYpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2Nv'@;
put 'bnN0W3YsVF09cXJlKGQpO3JldHVybiB0aGlzLl90aW1lbGluZUVuZ2luZS5saXN0ZW4odixhLFQsZil9cmV0dXJuIHRoaXMuX3RyYW5zaXRpb25FbmdpbmUubGlzdGVuKGwsYSxkLGgsZil9Zmx1c2gobD0tMSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5mbHVzaChsKX1nZXQgcGxheWVycygp'@;
put 'e3JldHVyblsuLi50aGlzLl90cmFuc2l0aW9uRW5naW5lLnBsYXllcnMsLi4udGhpcy5fdGltZWxpbmVFbmdpbmUucGxheWVyc119d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfWFmdGVyRmx1c2hBbmltYXRpb25z'@;
put 'RG9uZShsKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmFmdGVyRmx1c2hBbmltYXRpb25zRG9uZShsKX19Y2xhc3MgdHd7c3RhdGljI2U9dGhpcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwO2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fc3RhcnRT'@;
put 'dHlsZXM9YSx0aGlzLl9lbmRTdHlsZXM9ZCx0aGlzLl9zdGF0ZT0wO2xldCBoPXR3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0KGwpO2h8fHR3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGwsaD1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0'@;
put 'ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJk1mKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJihNZih0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxT'@;
put 'dHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKE1mKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKHR3LmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVs'@;
put 'ZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoT2codGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyksdGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKE9nKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9'@;
put 'bnVsbCksTWYodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19ZnVuY3Rpb24gUlYoYyl7bGV0IGw9bnVsbDtyZXR1cm4gYy5mb3JFYWNoKChhLGQpPT57KGZ1bmN0aW9uIGFSZShjKXtyZXR1cm4iZGlzcGxheSI9PT1jfHwicG9zaXRpb24iPT09Y30p'@;
put 'KGQpJiYobD1sfHxuZXcgTWFwLGwuc2V0KGQsYSkpfSksbH1jbGFzcyB5aWV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5lbGVtZW50PWwsdGhpcy5rZXlmcmFtZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVzPWgsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3Rh'@;
put 'cnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlz'@;
put 'LnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249ZC5kdXJhdGlvbix0aGlzLl9kZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9m'@;
put 'aW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9p'@;
put 'bml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXllcj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wu'@;
put 'bGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3RlbmVyKCJmaW5pc2giLGEpLHRoaXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVw'@;
put 'YXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9t'@;
put 'RW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRLZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChs'@;
put 'KX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0'@;
put 'YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXll'@;
put 'ci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmluaXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9k'@;
put 'ZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXll'@;
put 'ciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0'@;
put 'YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21Q'@;
put 'bGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0dXJuKyh0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVy'@;
put 'YXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFtZS5mb3JFYWNoKChkLGgpPT57Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6TVYodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVu'@;
put 'dFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9vbkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgYmlle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0'@;
put 'ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGwsYSl7cmV0dXJuIFhyZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIGZWKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gSnJlKGwsYSxk'@;
put 'KX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiBNVihsLGEpfWFuaW1hdGUobCxhLGQsaCxmLHY9W10pe2NvbnN0IFk9e2R1cmF0aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihZLmVhc2luZz1mKTtjb25zdCByZT1uZXcgTWFwLGZlPXYuZmlsdGVyKFdl'@;
put 'PT5XZSBpbnN0YW5jZW9mIHlpZSk7KGZ1bmN0aW9uIHZJZShjLGwpe3JldHVybiAwPT09Y3x8MD09PWx9KShkLGgpJiZmZS5mb3JFYWNoKFdlPT57V2UuY3VycmVudFNuYXBzaG90LmZvckVhY2goKEplLHR0KT0+cmUuc2V0KHR0LEplKSl9KTtsZXQgX2U9ZnVuY3Rpb24gbUllKGMpe3JldHVy'@;
put 'biBjLmxlbmd0aD9jWzBdaW5zdGFuY2VvZiBNYXA/YzpjLm1hcChsPT5uZXcgTWFwKE9iamVjdC5lbnRyaWVzKGwpKSk6W119KGEpLm1hcChXZT0+bmV3IE1hcChXZSkpO19lPWZ1bmN0aW9uIHlJZShjLGwsYSl7aWYoYS5zaXplJiZsLmxlbmd0aCl7bGV0IGQ9bFswXSxoPVtdO2lmKGEuZm9y'@;
put 'RWFjaCgoZix2KT0+e2QuaGFzKHYpfHxoLnB1c2godiksZC5zZXQodixmKX0pLGgubGVuZ3RoKWZvcihsZXQgZj0xO2Y8bC5sZW5ndGg7ZisrKXtsZXQgdj1sW2ZdO2guZm9yRWFjaChUPT52LnNldChULE1WKGMsVCkpKX19cmV0dXJuIGx9KGwsX2UscmUpO2NvbnN0IGtlPWZ1bmN0aW9uIHNS'@;
put 'ZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1SVihsWzBdKSxsLmxlbmd0aD4xJiYoZD1SVihsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVJWKGwpKSxhfHxkP25ldyB0dyhjLGEsZCk6bnVsbH0obCxfZSk7'@;
put 'cmV0dXJuIG5ldyB5aWUobCxfZSxZLGtlKX19Y29uc3Qgd2llPSJALmRpc2FibGVkIjtjbGFzcyBNaWV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX29uRGVzdHJveT1oLHRoaXMuXHUwMjc1dHlwZT0w'@;
put 'fWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2RlPy4obCl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZs'@;
put 'dXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9vbkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChs'@;
put 'KXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3JlYXRlVGV4dChsKX1hcHBlbmRDaGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5h'@;
put 'bWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGwsYSxkKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChsLGEsZCl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhp'@;
put 'cy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2VsZWN0Um9vdEVsZW1lbnQobCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0'@;
put 'dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmlidXRlKGwsYSxkLGgpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7'@;
put 'dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhsLGEpfXNldFN0eWxlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVtb3ZlU3R5bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3Zl'@;
put 'U3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT13aWU/dGhpcy5kaXNhYmxlQW5pbWF0aW9ucyhsLCEhZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUobCxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlz'@;
put 'dGVuKGwsYSxkKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5lbmdpbmUuZGlzYWJsZUFuaW1hdGlvbnMobCxhKX19Y2xhc3MgbFJlIGV4dGVuZHMgTWlle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiks'@;
put 'dGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5jaGFyQXQoMSkmJmE9PXdpZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsZD12b2lkIDA9PT1kfHwhIWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5u'@;
put 'YW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9bGlzdGVuKGwsYSxkKXtpZigiQCI9PWEuY2hhckF0KDApKXtjb25zdCBoPWZ1bmN0aW9uIGNSZShjKXtzd2l0Y2goYyl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNl'@;
put 'ImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gY319KGwpO2xldCBmPWEuc2xpY2UoMSksdj0iIjtyZXR1cm4iQCIhPWYuY2hhckF0KDApJiYoW2Ysdl09ZnVuY3Rpb24gdVJlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCIu'@;
put 'Iik7cmV0dXJuW2Muc3Vic3RyaW5nKDAsbCksYy5zbGljZShsKzEpXX0oZikpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFjZUlkLGgsZix2LFQ9Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKFQuX2RhdGF8fC0xLGQsVCl9KX1yZXR1cm4gdGhpcy5kZWxl'@;
put 'Z2F0ZS5saXN0ZW4obCxhLGQpfX1jbGFzcyBkUmV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZGVsZWdhdGU9bCx0aGlzLmVuZ2luZT1hLHRoaXMuX3pvbmU9ZCx0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0'@;
put 'aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsYS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e2NvbnN0IHY9Zj8ucGFyZW50Tm9kZShoKTt2JiZmLnJlbW92ZUNoaWxkKHYsaCl9fWNyZWF0ZVJlbmRlcmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRl'@;
put 'LmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IHJlPXRoaXMuX3JlbmRlcmVyQ2FjaGU7bGV0IGZlPXJlLmdldChoKTtyZXR1cm4gZmV8fChmZT1uZXcgTWllKCIiLGgsdGhpcy5lbmdpbmUsKCk9PnJlLmRlbGV0ZShoKSkscmUuc2V0KGgsZmUp'@;
put 'KSxmZX1jb25zdCBmPWEuaWQsdj1hLmlkKyItIit0aGlzLl9jdXJyZW50SWQ7dGhpcy5fY3VycmVudElkKyssdGhpcy5lbmdpbmUucmVnaXN0ZXIodixsKTtjb25zdCBUPXJlPT57QXJyYXkuaXNBcnJheShyZSk/cmUuZm9yRWFjaChUKTp0aGlzLmVuZ2luZS5yZWdpc3RlclRyaWdnZXIoZix2'@;
put 'LGwscmUubmFtZSxyZSl9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goVCksbmV3IGxSZSh0aGlzLHYsaCx0aGlzLmVuZ2luZSl9YmVnaW4oKXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291'@;
put 'bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGwsYSxkKXtpZihsPj0wJiZsPHRoaXMuX21pY3JvdGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5hKGQpKTtjb25zdCBoPXRoaXMuX2Fu'@;
put 'aW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e2guZm9yRWFjaChmPT57Y29uc3RbdixUXT1mO3YoVCl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLGgucHVzaChbYSxkXSl9ZW5k'@;
put 'KCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fc2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYm'@;
put 'dGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1sZXQgaFJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBld3tjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgsVnIobTgse29wdGlvbmFsOiEwfSkp'@;
put 'fW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoZnIoJHMpLGZyKG1WKSxmcihnVikpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfXJl'@;
put 'dHVybiBjfSkoKTtjb25zdCBDaWU9W3twcm92aWRlOmdWLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gZlJlKCl7cmV0dXJuIG5ldyByaWV9fSx7cHJvdmlkZTpldyx1c2VDbGFzczpoUmV9LHtwcm92aWRlOlQ1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gcFJlKGMsbCxhKXtyZXR1cm4gbmV3IGRSZShjLGws'@;
put 'YSl9LGRlcHM6W1pQLGV3LFBvXX1dLE9WPVt7cHJvdmlkZTptVix1c2VGYWN0b3J5OigpPT5uZXcgYmllfSx7cHJvdmlkZTpnQyx1c2VWYWx1ZToiQnJvd3NlckFuaW1hdGlvbnMifSwuLi5DaWVdLFNpZT1be3Byb3ZpZGU6bVYsdXNlQ2xhc3M6cFZ9LHtwcm92aWRlOmdDLHVzZVZhbHVlOiJO'@;
put 'b29wQW5pbWF0aW9ucyJ9LC4uLkNpZV07bGV0IG1SZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczphLmRpc2FibGVBbmltYXRpb25zP1NpZTpPVn19c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu'@;
put 'IG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtwcm92aWRlcnM6T1YsaW1wb3J0czpbc0tdfSl9cmV0dXJuIGN9KSgpLGdSZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0'@;
put 'YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ub3QtZm91bmQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMsdmFyczow'@;
put 'LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGdlKDAsImRpdiIsMCkoMSwicCIpLHplKDIsIjQwNCAtIE5vdCBGb3VuZCIpLGJlKCkoKSl9fSl9cmV0dXJuIGN9KSgpLHhpZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fWRvd25s'@;
put 'b2FkRmlsZShhLGQsaD0idHh0Iil7bGV0IGY9bmV3IEJsb2IoW2FdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmlnYXRvci5tc1NhdmVCbG9iKGYsYCR7ZH0uJHtofWApO2Vsc2V7bGV0'@;
put 'IHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO3YuaHJlZj0iZGF0YTp0ZXh0L3BsYWluLCIrZW5jb2RlVVJJQ29tcG9uZW50KGEpLHYuZG93bmxvYWQ9YCR7ZH0uJHtofWAsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSx2LmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGls'@;
put 'ZCh2KX19cmVhZEZpbGUoYSl7cmV0dXJuIG5ldyBQcm9taXNlKChkLGgpPT57bGV0IGY9bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9KCk9PntmLnJlc3VsdCYmZChKU09OLnBhcnNlKGYucmVzdWx0LnRvU3RyaW5nKCkpKX0sZi5yZWFkQXNUZXh0KGEpfSl9Y2xlYXJVcGxvYWRJbnB1dChhKXth'@;
put 'LnRhcmdldC52YWx1ZT0iIn1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXByb3Y9bHIoe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfXJldHVybiBjfSkoKTtmdW5j'@;
put 'dGlvbiBfUmUoYyxsKXsxJmMmJihyaSgwKSxnZSgxLCJzcGFuIiwxOSksemUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSxnZSgzLCJwIiksemUoNCwiRGVwbG95aW5nLi4uIiksYmUoKSxpaSgpKX1mdW5jdGlvbiB2UmUoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24geVJl'@;
put 'KGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIGJSZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiB3UmUoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gTVJlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwyMiksYnQoMSxi'@;
put 'UmUsMSwwLCJjbHItaWNvbiIsMjMpKDIsd1JlLDEsMCwiY2xyLWljb24iLDI0KSxnZSgzLCJwIiksemUoNCwiQ3JlYXRlIGRhdGFiYXNlIiksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxQZSgibmdJZiIsYS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSx3ZSgpLFBlKCJu'@;
put 'Z0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YSl9fWZ1bmN0aW9uIENSZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBTUmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJwIiwyMCksemUoMiwiRG9uZSIpLGJlKCksSnQo'@;
put 'MywiaHIiLDIxKSxnZSg0LCJkaXYiLDIyKSxidCg1LHZSZSwxLDAsImNsci1pY29uIiwyMykoNix5UmUsMSwwLCJjbHItaWNvbiIsMjQpLGdlKDcsInAiKSx6ZSg4LCJEZXBsb3kgU0FTIEpvYnMiKSxiZSgpKCksYnQoOSxNUmUsNSwyLCJkaXYiLDI1KSxKdCgxMCwiaHIiLDIxKSxnZSgxMSwi'@;
put 'ZGl2IiwyNikoMTIsImJ1dHRvbiIsMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxidCgxMyxDUmUsMSwwLCJjbHItaWNvbiIsMjQpLHplKDE0LCIgTEFVTkNIIC8gQ09ORklHVVJFICIpLGJlKCksZ2UoMTUsImJ1dHRv'@;
put 'biIsMjgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiB4dChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSx6ZSgxNiwiIERvd25sb2FkIGxvZyAiKSxiZSgpKCksSnQoMTcsImhy'@;
put 'IiwyMSksZ2UoMTgsImRpdiIsMjYpKDE5LCJidXR0b24iLDI5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKTtyZXR1cm4gaC5hdXRvZGVwbG95aW5nPSExLHh0KGguYXV0b2RlcGxveURvbmU9ITEpfSksemUoMjAsIiBDbG9zZSAiKSxiZSgpLGdlKDIxLCJidXR0'@;
put 'b24iLDI5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLm9wZW5TYXNSZXF1ZXN0c01vZGFsKCkpfSksemUoMjIsIiBTQVMgUmVxdWVzdHMgIiksYmUoKSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO3dlKDUpLFBlKCJuZ0lmIixhLmF1dG9EZXBsb3lT'@;
put 'dGF0dXMuZGVwbG95U2VydmljZVBhY2spLHdlKCksUGUoIm5nSWYiLCFhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2spLHdlKDMpLFBlKCJuZ0lmIixudWxsIT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKSx3ZSg0KSxQZSgibmdJZiIsITE9PT1hLmF1dG9EZXBs'@;
put 'b3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2t8fCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24geFJlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwxNikoMSwiZGl2IiwxNyksYnQoMixfUmUsNSwwLCJuZy1jb250YWluZXIiLDE4KSgzLFNSZSwyMyw0LCJu'@;
put 'Zy1jb250YWluZXIiLDE4KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJuZ0lmIiwhYS5hdXRvZGVwbG95RG9uZSksd2UoKSxQZSgibmdJZiIsYS5hdXRvZGVwbG95RG9uZSl9fWxldCBrUmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmV2ZW50'@;
put 'U2VydmljZT1hLHRoaXMuZGVwbG95U2VydmljZT1kLHRoaXMuc2FzU2VydmljZT1oLHRoaXMubG9nZ2VyU2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IGVkLlNBU2pzQ29uZmlnLHRoaXMuYXBwTG9jPSIiLHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRo'@;
put 'aXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgSXIsdGhpcy5tYWtlRGF0YVJlc3BvbnNlPSIiLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmF1dG9kZXBsb3lpbmc9ITEsdGhpcy5hdXRvZGVwbG95RG9uZT0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx0aGlzLmlzU3VibWl0dGluZ0pz'@;
put 'b249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy5yZWNyZWF0ZURhdGFiYXNlPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuYXV0b0RlcGxveVN0YXR1cz17ZGVwbG95U2VydmljZVBhY2s6bnVsbCxydW5NYWtlRGF0YTpudWxsfX1uZ09uSW5pdCgpe31leGVj'@;
put 'dXRlSnNvbigpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7YS5hdXRvZGVwbG95aW5nPSEwLGEuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAs'@;
put 'dm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQu'@;
put 'bWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0h'@;
put 'MSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExLGEucmVjcmVhdGVEYXRhYmFzZT9hLmNyZWF0ZURhdGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pKCl9Y3JlYXRlRGF0YWJhc2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46'@;
put 'dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbiho'@;
put 'PT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1ofXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShoLnJlc3VsdCYmaC5yZXN1bHQubGVuZ3RoPjAp'@;
put 'fSkuY2F0Y2goaD0+e3RoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9ZG93bmxvYWRGaWxlKGEs'@;
put 'ZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZp'@;
put 'bGUoaCl9KSgpfXJlY3JlYXRlRGF0YWJhc2VDbGlja2VkKGEpeyEwPT09YS50YXJnZXQuY2hlY2tlZCYmKHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSEwKX1jbGVhclVwbG9hZElucHV0KGEpe3RoaXMuZGVwbG95U2VydmljZS5jbGVhclVwbG9hZElucHV0KGEpfW9wZW5TYXNSZXF1ZXN0'@;
put 'c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3RzTW9kYWwoKX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChHbCksc3QoeGllKSxzdCh5'@;
put 'YSksc3QoZDEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9tYXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2FzSnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRp'@;
put 'bmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1pbkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9tZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ2LHZhcnM6MTAsY29uc3RzOltbInVwbG9hZEpzb25BdXRv'@;
put 'IiwiIl0sWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFw'@;
put 'cGVyIl0sWzEsIm10LTAiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNsaWNrIiwibmdNb2RlbCJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0x'@;
put 'MCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjbGljayIsImNoYW5nZSJdLFszLCJjbHJNb2RhbE9wZW5D'@;
put 'aGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1k'@;
put 'ZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJtLTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAwIl0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJz'@;
put 'dWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2lyY2xlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1zdGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0x'@;
put 'NSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbInNoYXBlIiwic3Vj'@;
put 'Y2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3ktZXJyb3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9SG4oKTtidCgwLHhSZSw0LDIsImRpdiIsMSksZ2UoMSwiaDQiLDIpLHplKDIsIlZp'@;
put 'eWEgRGVwbG95IiksYmUoKSxKdCgzLCJociIpLGdlKDQsImxhYmVsIiwzKSx6ZSg1LCJBcHAgTG9jIiksYmUoKSxnZSg2LCJkaXYiLDQpKDcsImRpdiIsNSkoOCwicCIsNiksemUoOSksYmUoKSgpKCksZ2UoMTAsImxhYmVsIiwzKSx6ZSgxMSwiREMgTG9jIiksYmUoKSxnZSgxMiwiZGl2Iiw0'@;
put 'KSgxMywiZGl2Iiw1KSgxNCwicCIsNiksemUoMTUpLGJlKCkoKSgpLGdlKDE2LCJsYWJlbCIsMyksemUoMTcsIlNBUyBBZG1pbiBncm91cCIpLGJlKCksZ2UoMTgsImRpdiIsNCkoMTksImRpdiIsNSkoMjAsInAiLDYpLHplKDIxKSxiZSgpKCkoKSxnZSgyMiwiY2xyLWNoZWNrYm94LXdyYXBw'@;
put 'ZXIiKSgyMywiaW5wdXQiLDcpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5yZWNyZWF0ZURhdGFiYXNlLFQpfHwoaC5yZWNyZWF0ZURhdGFiYXNlPVQpLHh0KFQpfSksSHQoImNsaWNrIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5yZWNy'@;
put 'ZWF0ZURhdGFiYXNlQ2xpY2tlZChUKSl9KSxiZSgpLGdlKDI0LCJsYWJlbCIpLHplKDI1LCJSZWNyZWF0ZSBkYXRhYmFzZSIpLGJlKCkoKSxKdCgyNiwiaHIiKSxnZSgyNywiYnV0dG9uIiw4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGguZXhlY3V0ZUpzb24oKSl9'@;
put 'KSx6ZSgyOCksYmUoKSxnZSgyOSwiYnV0dG9uIiw5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KFhpKDMyKS5jbGljaygpKX0pLHplKDMwLCIgVXBsb2FkIGRpZmZlcmVudCBmaWxlIHRvIGRlcGxveVxuIiksYmUoKSxnZSgzMSwiaW5wdXQiLDEwLDApLEh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGguY2xlYXJVcGxvYWRJbnB1dChUKSl9KSgiY2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbkpzb25GaWxlQ2hhbmdlKFQpKX0pLGJlKCksZ2UoMzMsImNsci1tb2RhbCIsMTEpLEdyKCJjbHJNb2RhbE9wZW5DaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCxUKXx8KGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPVQpLHh0KFQpfSksZ2UoMzQsImgzIiwxMiksemUoMzUsIldhcm5pbmciKSxiZSgpLGdlKDM2LCJkaXYiLDEzKSx6ZSgzNywiIFRoaXMgYWN0'@;
put 'aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlzdHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlzIGlzIGEgcmUtZGVwbG95bWVudCwgeW91IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLGdlKDM4'@;
put 'LCJzdHJvbmciKSx6ZSgzOSksYmUoKSx6ZSg0MCwiLiAiKSxiZSgpLGdlKDQxLCJkaXYiLDE0KSg0MiwiYnV0dG9uIiwxNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSxoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx4dChoLnJlY3JlYXRlRGF0YWJhc2U9ITEpfSksemUo'@;
put 'NDMsIiBDYW5jZWwgIiksYmUoKSxnZSg0NCwiYnV0dG9uIiwxNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSxoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSx4dChoLnJlY3JlYXRlRGF0YWJhc2U9ITApfSksemUoNDUsIiBPayAiKSxiZSgpKCkoKX0yJmQmJihQZSgibmdJ'@;
put 'ZiIsaC5hdXRvZGVwbG95aW5nKSx3ZSg5KSxwcihoLmFwcExvYyksd2UoNikscHIoaC5kY1BhdGgpLHdlKDYpLHByKGguc2VsZWN0ZWRBZG1pbkdyb3VwKSx3ZSgyKSxXcigibmdNb2RlbCIsaC5yZWNyZWF0ZURhdGFiYXNlKSx3ZSg0KSxQZSgiZGlzYWJsZWQiLCFoLmpzb25GaWxlKSx3ZSgp'@;
put 'LHhyKCIgRGVwbG95ICIsaC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZhaWxhYmxlKSIsIlxuIiksd2UoNSksV3IoImNsck1vZGFsT3BlbiIsaC5yZWNyZWF0ZURhdGFiYXNlTW9kYWwpLFBlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksd2UoNikscHIoaC5kY1BhdGgpKX0sZGVw'@;
put 'ZW5kZW5jaWVzOltxaSxmMSxjYSxvYSxaYSxCdSxZdSxYcyx2MSxfMV0sc3R5bGVzOlsiLmF1dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNr'@;
put 'Z3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpj'@;
put 'ZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFweCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVu'@;
put 'O3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFydH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17'@;
put 'bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Nh'@;
put 'Y2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KX1yZXR1cm4gY30pKCk7Y29uc3QgUFY9KCk9Pih7c3RhbmRhbG9uZTohMH0pO2Z1bmN0aW9uIEVSZShjLGwpezEmYyYmKGdlKDAsImRp'@;
put 'diIsNikoMSwicCIsNyksemUoMiwiUGxlYXNlIGxvZyBpbiBmaXJzdCIpLGJlKCksZ2UoMywibGFiZWwiLDgpLHplKDQsIlVzZXJuYW1lIiksYmUoKSxnZSg1LCJkaXYiLDkpKDYsImRpdiIsMTApLEp0KDcsImlucHV0IiwxMSksYmUoKSgpLGdlKDgsImxhYmVsIiwxMiksemUoOSwiUGFzc3dv'@;
put 'cmQiKSxiZSgpLGdlKDEwLCJkaXYiLDkpKDExLCJkaXYiLDEwKSxKdCgxMiwiaW5wdXQiLDEzKSxiZSgpKCksZ2UoMTMsImJ1dHRvbiIsMTQpLHplKDE0LCJMb2cgaW4iKSxiZSgpKCkpfWZ1bmN0aW9uIFRSZShjLGwpe2lmKDEmYyYmKGdlKDAsIm9wdGlvbiIsMzYpLHplKDEpLGJlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtQZSgidmFsdWUiLGEuaWQpLHdlKCkseHIoIiAiLGEubmFtZSwiICIpfX1mdW5jdGlvbiBEUmUoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O3dlKCkseHIoIiggIixhLmF0dHJp'@;
put 'YnV0ZXMuc3lzVXNlcklkLCIgKSIpfX1mdW5jdGlvbiBBUmUoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDM2KSx6ZSgxKSxidCgyLERSZSwyLDEsInNwYW4iLDUpLFBhKDMsImpzb24iKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UGUoInZhbHVlIixhLm5hbWUpLHdlKCks'@;
put 'eHIoIiAiLGEubmFtZSwiICIpLHdlKCksUGUoIm5nSWYiLCJ7fSIhPXdjKDMsMyxhLmF0dHJpYnV0ZXMpKX19ZnVuY3Rpb24gTFJlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIpLHplKDEsIkpTT04gU3VibWl0dGVkIFN1Y2Nlc3NmdWxseSIpLGJlKCkpfWZ1bmN0aW9uIElSZShjLGwpe2lmKDEm'@;
put 'Yyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsMzcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikuZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpKX0pLEp0KDEsImNsci1pY29uIiwzOCksYmUoKX19ZnVuY3Rpb24gUlJlKGMsbCl7aWYoMSZjKXtjb25zdCBh'@;
put 'PUhuKCk7cmkoMCksZ2UoMSwicCIsMzkpLHplKDIsIkZpbGUgZXhlY3V0ZSBjb21wbGV0ZWQiKSxiZSgpLEp0KDMsImhyIiksZ2UoNCwiZGl2IikoNSwiYnV0dG9uIiw0MCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIHh0KGguZG93bmxvYWRGaWxl'@;
put 'KGguam9iTG9nLCJleGVjdXRlLXNjcmlwdC1sb2ciLCJ0eHQiKSl9KSx6ZSg2LCIgRG93bmxvYWQgbG9nICIpLGJlKCkoKSxpaSgpfX1mdW5jdGlvbiBPUmUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDQ0KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSx4cigiICIsYS5t'@;
put 'YWtlRGF0YVJlc3BvbnNlLCIgIil9fWZ1bmN0aW9uIFBSZShjLGwpezEmYyYmKHJpKDApLGdlKDEsInNwYW4iLDI1KSx6ZSgyLCIgVmFsaWRhdGluZyBkZXBsb3kuLi4gIiksYmUoKSxnZSgzLCJzcGFuIiksemUoNCwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGJlKCksaWkoKSl9ZnVuY3Rp'@;
put 'b24gRlJlKGMsbCl7MSZjJiYocmkoMCksSnQoMSwiY2xyLWljb24iLDQ2KSxnZSgyLCJzcGFuIiksemUoMywiIFZhbGlkYXRpb24gZmFpbGVkICIpLGJlKCksaWkoKSl9ZnVuY3Rpb24gSFJlKGMsbCl7MSZjJiYocmkoMCksSnQoMSwiY2xyLWljb24iLDQ3KSxnZSgyLCJzcGFuIiksemUoMywi'@;
put 'IFZhbGlkYXRpb24gc3VjY2VlZGVkICIpLGJlKCksaWkoKSl9ZnVuY3Rpb24gTlJlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw0NSksYnQoMSxQUmUsNSwwLCJuZy1jb250YWluZXIiLDUpKDIsRlJlLDQsMCwibmctY29udGFpbmVyIiw1KSgzLEhSZSw0LDAsIm5nLWNvbnRhaW5lciIsNSks'@;
put 'YmUoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKCksUGUoIm5nSWYiLGEuaXNWYWxpZGF0aW5nKSx3ZSgpLFBlKCJuZ0lmIiwhYS5pc1ZhbGlkYXRpbmcmJiJlcnJvciI9PT1hLnZhbGlkYXRpb25TdGF0ZSksd2UoKSxQZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYic3VjY2VzcyI9PT1hLnZh'@;
put 'bGlkYXRpb25TdGF0ZSl9fWZ1bmN0aW9uIFZSZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO3JpKDApLGdlKDEsInAiLDM5KSx6ZSgyLCJDcmVhdGUgRGF0YWJhc2UgQ29tcGxldGVkIiksYmUoKSxKdCgzLCJociIpLGJ0KDQsT1JlLDIsMSwiZGl2Iiw0MSksZ2UoNSwiYnV0dG9uIiw0Miks'@;
put 'SHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLHplKDYsIiBMZXQncyBnZXQgc3RhcnRlZCAiKSxiZSgpLGdlKDcsImJ1dHRvbiIsNDIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiB4'@;
put 'dChoLmRvd25sb2FkRmlsZShoLm1ha2VEYXRhUmVzcG9uc2UsImNyZWF0ZS1kYXRhYmFzZS1sb2ciLCJ0eHQiKSl9KSx6ZSg4LCIgRG93bmxvYWQgbG9nICIpLGJlKCksZ2UoOSwiYnV0dG9uIiw0MiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS52YWxpZGF0'@;
put 'ZURlcGxveSgpKX0pLHplKDEwLCIgVmFsaWRhdGUgIiksYmUoKSxidCgxMSxOUmUsNCwzLCJkaXYiLDQzKSxpaSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKTt3ZSg0KSxQZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKSx3ZSg3KSxQZSgibmdJZiIsIm5vbmUiIT09YS52YWxp'@;
put 'ZGF0aW9uU3RhdGV8fGEuaXNWYWxpZGF0aW5nKX19ZnVuY3Rpb24galJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiZm9ybSIpKDIsImRpdiIsMTUpKDMsImxhYmVsIiwxNiksemUoNCwiQWRtaW4gZ3JvdXAiKSxiZSgpLGdlKDUsImRpdiIsMTcpKDYsImRpdiIsMTgp'@;
put 'KDcsInNlbGVjdCIsMTkpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYuc2VsZWN0ZWRBZG1pbkdyb3VwLGgpfHwoZi5zZWxlY3RlZEFkbWluR3JvdXA9aCkseHQoaCl9KSxidCg4LFRSZSwyLDIsIm9wdGlvbiIsMjApLGJlKCko'@;
put 'KSgpKCksZ2UoOSwiZGl2IiwxNSkoMTAsImRpdiIpKDExLCJsYWJlbCIsMTYpLHplKDEyLCJDb250ZXh0IiksYmUoKSxnZSgxMywiZGl2IiwxNykoMTQsImRpdiIsMTgpKDE1LCJzZWxlY3QiLDIxKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3Jl'@;
put 'dHVybiBxcihmLnNlbGVjdGVkQ29udGV4dCxoKXx8KGYuc2VsZWN0ZWRDb250ZXh0PWgpLHh0KGgpfSksYnQoMTYsQVJlLDQsNSwib3B0aW9uIiwyMCksYmUoKSgpKCksZ2UoMTcsImJ1dHRvbiIsMjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5leGVjdXRh'@;
put 'YmxlQ29udGV4dCgpKX0pLEp0KDE4LCJjbHItaWNvbiIsMjMpLGJlKCkoKSxnZSgxOSwiZGl2IiwyNCkoMjAsInNwYW4iLDI1KSx6ZSgyMSwiIExvYWRpbmcgY29udGV4dHMuLi4gIiksYmUoKSxnZSgyMiwic3BhbiIpLHplKDIzLCIgTG9hZGluZyBjb250ZXh0cy4uLiAiKSxiZSgpKCksZ2Uo'@;
put 'MjQsImxhYmVsIiwyNiksemUoMjUsIkRDIExvYyIpLGJlKCksZ2UoMjYsImRpdiIsOSkoMjcsImRpdiIsMTApKDI4LCJpbnB1dCIsMjcpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYuZGNQYXRoLGgpfHwoZi5kY1BhdGg9aCks'@;
put 'eHQoaCl9KSxIdCgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuc2F2ZURjUGF0aCgpKX0pLGJlKCkoKSgpLGdlKDI5LCJwIiwyOCksemUoMzAsIiBTZWxlY3QgSlNPTiBmaWxlIHRvIHVwbG9hZCAoanNvbiBidWlsZCBmaWxlIHByZWxvYWRlZCk6ICIpLGJlKCks'@;
put 'Z2UoMzEsImRpdiIsMjkpKDMyLCJpbnB1dCIsMzApLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbkpzb25GaWxlQ2hhbmdlKGgpKX0pLGJl'@;
put 'KCkoKSxnZSgzMywiZGl2IiwzMSkoMzQsImJ1dHRvbiIsMzIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5leGVjdXRlSnNvbigpKX0pLHplKDM1LCIgU1VCTUlUIEpTT04gIiksYmUoKSxidCgzNixMUmUsMiwwLCJzcGFuIiw1KSxiZSgpLGdlKDM3LCJwIiwy'@;
put 'OCksemUoMzgsIlNlbGVjdCBTQVMgZmlsZSB0byB1cGxvYWQ6IiksYmUoKSxnZSgzOSwiZGl2IiwyOSkoNDAsImlucHV0IiwzMCksSHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5jbGVhclVwbG9hZElucHV0KGgpKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0'@;
put 'KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gZi5vblNhc0ZpbGVDaGFuZ2UoaCkseHQoZi5kb3dubG9hZEZpbGVCdG49ITApfSksYmUoKSxidCg0MSxJUmUsMiwwLCJidXR0b24iLDMzKSxiZSgpLGdlKDQyLCJkaXYiLDMxKSg0MywiYnV0dG9uIiwzNCksSHQoImNsaWNrIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBTdChhKSx4dChaZSgpLmV4ZWN1dGVTQVMoKSl9KSx6ZSg0NCwiIFNVQk1JVCAiKSxiZSgpKCkoKSxidCg0NSxSUmUsNywwLCJuZy1jb250YWluZXIiLDUpLGdlKDQ2LCJidXR0b24iLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuY3JlYXRlRGF0'@;
put 'YWJhc2UoKSl9KSx6ZSg0NywiIENyZWF0ZSBEYXRhYmFzZSAiKSxiZSgpLGJ0KDQ4LFZSZSwxMiwyLCJuZy1jb250YWluZXIiLDUpLGJlKCksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSg3KSxXcigibmdNb2RlbCIsYS5zZWxlY3RlZEFkbWluR3JvdXApLFBlKCJuZ01vZGVsT3B0aW9u'@;
put 'cyIsRGEoMTksUFYpKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLmFkbWluR3JvdXBzKSx3ZSgyKSxicigiaGlkZGVuIixhLmNvbnRleHRzTG9hZGluZyksd2UoNSksV3IoIm5nTW9kZWwiLGEuc2VsZWN0ZWRDb250ZXh0KSxQZSgibmdNb2RlbE9wdGlvbnMiLERhKDIwLFBWKSksd2UoKSxQZSgibmdG'@;
put 'b3JPZiIsYS5hbGxDb250ZXh0cyksd2UoMyksYnIoImhpZGRlbiIsIWEuY29udGV4dHNMb2FkaW5nKSx3ZSg5KSxXcigibmdNb2RlbCIsYS5kY1BhdGgpLFBlKCJuZ01vZGVsT3B0aW9ucyIsRGEoMjEsUFYpKSx3ZSg2KSxQZSgiY2xyTG9hZGluZyIsYS5pc1N1Ym1pdHRpbmdKc29uKSx3ZSgy'@;
put 'KSxQZSgibmdJZiIsYS5pc0pzb25TdWJtaXR0ZWQpLHdlKDUpLFBlKCJuZ0lmIixhLmRvd25sb2FkRmlsZUJ0biksd2UoMiksUGUoImNsckxvYWRpbmciLGEuZXhlY3V0aW5nU2NyaXB0KSx3ZSgyKSxQZSgibmdJZiIsYS5qb2JMb2cubGVuZ3RoPjApLHdlKCksUGUoImNsckxvYWRpbmciLGEu'@;
put 'Y3JlYXRlRGF0YWJhc2VMb2FkaW5nKSx3ZSgyKSxQZSgibmdJZiIsYS5tYWtlRGF0YVJlc3BvbnNlLmxlbmd0aD4wKX19bGV0IEJSZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2'@;
put 'aWNlPWgsdGhpcy5kZXBsb3lTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgZWQuU0FTanNDb25maWcsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBJcix0aGlzLm5lZWRzTG9naW49ITEsdGhpcy5hZG1pbkdyb3Vwcz1bXSx0aGlzLmFsbENvbnRleHRzPVtdLHRoaXMuYXBwTG9jPSIi'@;
put 'LHRoaXMuZGNQYXRoPSIiLHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSIiLHRoaXMuc2VsZWN0ZWRDb250ZXh0PSIiLHRoaXMuam9iTG9nPSIiLHRoaXMubWFrZURhdGFSZXNwb25zZT0iIix0aGlzLmxpbmVzT2ZDb2RlPVtdLHRoaXMuZmlsZU5hbWU9IiIsdGhpcy5wcmVsb2FkZWRGaWxlPSEw'@;
put 'LHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITEsdGhpcy5jb250ZXh0c0xvYWRpbmc9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5leGVjdXRpbmdTY3JpcHQ9ITEsdGhpcy5kb3dubG9hZEZpbGVCdG49ITEsdGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy5qc29uRmlsZT1u'@;
put 'dWxsLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnZhbGlkYXRpb25TdGF0ZT0ibm9uZSJ9bmdPbkluaXQoKXt9ZXhlY3V0YWJsZUNvbnRleHQoKXtyZXR1cm4gVyhmdW5jdGlvbiooKXt9KSgpfWNsZWFyVXBsb2FkSW5wdXQoYSl7dGhpcy5k'@;
put 'ZXBsb3lTZXJ2aWNlLmNsZWFyVXBsb2FkSW5wdXQoYSl9b25TYXNGaWxlQ2hhbmdlKGEpe3RoaXMucHJlbG9hZGVkRmlsZT0hMTtsZXQgZD1hLnRhcmdldC5maWxlc1swXTt0aGlzLmZpbGVOYW1lPWQubmFtZTtsZXQgaD1uZXcgRmlsZVJlYWRlcjtoLm9ubG9hZD0oKT0+e2gucmVzdWx0JiYo'@;
put 'dGhpcy5saW5lc09mQ29kZT1oLnJlc3VsdC5zcGxpdCgiXG4iKSx0aGlzLmxpbmVzT2ZDb2RlPXRoaXMubGluZXNPZkNvZGUuZmlsdGVyKGY9PiIiIT09ZiYmbnVsbCE9PWYpLHRoaXMuZXhlY3V0ZVNBU0VuYWJsZWQ9ITAsdGhpcy5hZGRQcmVjb2RlTGluZXMoKSl9LGgucmVhZEFzVGV4dChk'@;
put 'KX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRlcGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygpe3RoaXMubGluZXNPZkNvZGUudW5z'@;
put 'aGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07YCl9ZG93bmxvYWRTYXNQcmVjb2Rl'@;
put 'RmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIpfWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9'@;
put 'c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2EuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNKcy5kZXBsb3lTZXJ2aWNlUGFj'@;
put 'ayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8IiIsdm9pZCAwLHZvaWQgMCwhMCksYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgv'@;
put 'XFwvZ20sIiIpOmQubWVzc2FnZSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkRlcGxveSBlcnJvciIsYEV4Y2VwdGlvbjogXG4gJHsiIiE9PWg/aDpkfWApfWEuaXNTdWJtaXR0aW5nSnNvbj0hMX0pKCl9ZXhlY3V0ZVNBUygpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rp'@;
put 'b24qKCl7YS5leGVjdXRpbmdTY3JpcHQ9ITAsYS5qb2JMb2c9IiIsYS5tYWtlRGF0YVJlc3BvbnNlPSIiO3RyeXtsZXQgZD15aWVsZCBhLnNhc0pzLmV4ZWN1dGVTY3JpcHQoe2ZpbGVOYW1lOmEuZmlsZU5hbWUsbGluZXNPZkNvZGU6YS5saW5lc09mQ29kZSxjb250ZXh0TmFtZTphLnNlbGVj'@;
put 'dGVkQ29udGV4dH0pO2EubG9nZ2VyU2VydmljZS5sb2coZCksInN0cmluZyI9PXR5cGVvZiBkLmxvZyYmKGQubG9nPUpTT04ucGFyc2UoZC5sb2cpKSwiZXJyb3IiPT09ZC5qb2JTdGF0dXM/YWxlcnQoIkVycm9yISIpOmEuam9iTG9nPWQubG9nLml0ZW1zP2QubG9nLml0ZW1zLm1hcChoPT5o'@;
put 'LmxpbmUpLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoZC5sb2cpLGEuZXhlY3V0aW5nU2NyaXB0PSExfWNhdGNoe2EuZXhlY3V0aW5nU2NyaXB0PSExfX0pKCl9Y3JlYXRlRGF0YWJhc2UoYT0hMCl7aWYoYSl7bGV0IGY9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuc2VydmVy'@;
put 'VXJsKyIvU0FTSm9iRXhlY3V0aW9uLz9fcHJvZ3JhbT0iK3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvY3x8Ii9hZG1pbi9tYWtlZGF0YSZBRE1JTj0iK3RoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwKyImRENQQVRIPSIrdGhpcy5kY1BhdGgrIiZfZGVidWc9MTMxIjt3aW5kb3cub3Blbihm'@;
put 'LCJfYmxhbmsiKX1lbHNlIHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSEwLHRoaXMuc2FzSnMucmVxdWVzdCgic2VydmljZXMvYWRtaW4vbWFrZWRhdGEiLHtmcm9tanM6W3tBRE1JTjp0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cCxEQ1BBVEg6dGhpcy5kY1BhdGh9XX0se3VzZUNvbXB1dGVB'@;
put 'cGk6ITEsY29udGV4dE5hbWU6dGhpcy5zYXNKc0NvbmZpZy5jb250ZXh0TmFtZSxkZWJ1ZzohMH0sKCk9Pnt0aGlzLnNhc1NlcnZpY2Uuc2hvdWxkTG9naW4ubmV4dCghMCl9KS50aGVuKGY9Pnt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGYpfWNhdGNoe3RoaXMu'@;
put 'bWFrZURhdGFSZXNwb25zZT1mfXRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExfSkuY2F0Y2goZj0+e3RoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9'@;
put 'fSl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXZhbGlkYXRlRGVwbG95KCl7dGhpcy5pc1ZhbGlkYXRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9zdGFydHVwc2VydmljZSIsbnVsbCkudGhlbihhPT57dGhpcy5sb2dnZXJTZXJ2'@;
put 'aWNlLmxvZyhhKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLnNhc2xpYnM/InN1Y2Nlc3MiOiJlcnJvciIsdGhpcy5pc1ZhbGlkYXRpbmc9ITF9KS5jYXRjaChhPT57dGhpcy5pc1ZhbGlkYXRpbmc9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9ImVycm9yIn0pfWRlbGV0ZUtleXMoKXtsb2NhbFN0'@;
put 'b3JhZ2UucmVtb3ZlSXRlbSgiZGVwbG95X2RjX2xvYyIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoeWEpLHN0KEdsKSxzdChkMSksc3QoeGllKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImFwcC1tYW51YWwtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo5LHZh'@;
put 'cnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2NrIiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVhci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNs'@;
put 'aWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0iLDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsiZm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEs'@;
put 'Im1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1pbnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dvcmQiLCJp'@;
put 'ZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRyb2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250'@;
put 'YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJhZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIsNCwibmdG'@;
put 'b3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJjbGlj'@;
put 'ayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0xMCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2MiLDEs'@;
put 'ImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgiLCJh'@;
put 'bGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4tdy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJM'@;
put 'b2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJtYi0wIiwi'@;
put 'bXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxvZy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0LCJuZ0lm'@;
put 'Il0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiZGl2'@;
put 'IiwwKSx6ZSgxLCIgQ29uZmlndXJhdG9yICIpLGdlKDIsInAiLDEpLHplKDMpLGJlKCksZ2UoNCwiYnV0dG9uIiwyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGVsZXRlS2V5cygpfSksemUoNSwiIENsZWFyIG1lbW9yeSAiKSxiZSgpKCksZ2UoNiwiZGl2IiwzKSxidCg3LEVS'@;
put 'ZSwxNSwwLCJkaXYiLDQpKDgsalJlLDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGJlKCkpLDImZCYmKHdlKDMpLHhyKCJBcHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIpLHdlKDQpLFBlKCJuZ0lmIixoLm5lZWRzTG9naW4pLHdlKCksUGUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0sZGVwZW5k'@;
put 'ZW5jaWVzOltMcyxxaSx0ZyxuZCxyZCxUbCx0ZCxjYSxRNSxvYSx2ZixaYSxyMCxvMixYcyxQcV0sc3R5bGVzOlsiLmNsZWFyLW1lbW9yeS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjEwcHg7dG9wOjJweH0iXX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBZUmUoYyxsKXsxJmMm'@;
put 'JihnZSgwLCJkaXYiLDE1KSxKdCgxLCJwcm9ncmVzcyIpLGJlKCkpfWZ1bmN0aW9uIHpSZShjLGwpe2lmKDEmYyYmKGdlKDAsIm9wdGlvbiIsMTYpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtQZSgidmFsdWUiLGEuR1JPVVBOQU1FKSx3ZSgpLHQwKCIgIixhLkdST1VQ'@;
put 'TkFNRSwiIC0gIixhLkdST1VQREVTQywiICIpfX1sZXQgVVJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuc2FzanNTZXJ2aWNlPWQsdGhpcy5sb2NhdGlvbj1oLHRoaXMuc2FzSnNDb25maWc9bmV3IGVkLlNBU2pzQ29uZmlnLHRoaXMu'@;
put 'b25OYXZpZ2F0ZVRvSG9tZT1uZXcgSXIsdGhpcy5kY0RpcmVjdG9yeT0iIix0aGlzLmRjQWRtaW5Hcm91cD0iRENERUZBVUxUIix0aGlzLk1FVEFQRVJTT049Im4vYSIsdGhpcy5NRVRBVVNFUj0ibi9hIix0aGlzLlNZU1VTRVJJRD0ibi9hIix0aGlzLlNZU0hPU1ROQU1FPSJuL2EiLHRoaXMu'@;
put 'U1lTVkxPTkc9Im4vYSIsdGhpcy5kY0FkbWluR3JvdXBMaXN0PVtdLHRoaXMubG9hZGluZz0hMSx0aGlzLnNob3dMb2dvdXQ9ITEsdGhpcy50bXBEaXJlY3Rvcmllcz17bGludXg6Ii90bXAvRGF0YUNvbnRyb2xsZXIiLHdpbmRvd3M6IkM6XFxEYXRhQ29udHJvbGxlciJ9fW5nT25Jbml0KCl7'@;
put 'dGhpcy5nZXRVc2VyR3JvdXBzKCksdGhpcy5nZXRTZXJ2ZXJJbmZvKCl9Z2V0U2VydmVySW5mbygpe3RoaXMuc2FzanNTZXJ2aWNlLmdldFNlcnZlckluZm8oKS5zdWJzY3JpYmUoYT0+eyJkZXNrdG9wIiE9PWEubW9kZSYmKHRoaXMuc2hvd0xvZ291dD0hMCl9KX1nZXRVc2VyR3JvdXBzKCl7'@;
put 'dGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIsbnVsbCkudGhlbihhPT57dGhpcy5NRVRBUEVSU09OPWEuTUZfR0VUVVNFUix0aGlzLlNZU1VTRVJJRD1hLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuU1lTSE9T'@;
put 'VE5BTUUsdGhpcy5TWVNWTE9ORz1hLlNZU1ZMT05HLHRoaXMuZGNEaXJlY3Rvcnk9dGhpcy50bXBEaXJlY3Rvcmllc1tbIkwiLCJIIiwiQSIsIlMiXS5pbmNsdWRlcyhhLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5Hcm91cExpc3Q9YS5n'@;
put 'cm91cHMsdGhpcy5kY0FkbWluR3JvdXA9dGhpcy5kY0FkbWluR3JvdXBMaXN0WzBdLkdST1VQTkFNRSx0aGlzLmxvYWRpbmc9ITF9LGE9Pnt0aGlzLmxvYWRpbmc9ITF9KX1tYWtlRGF0YSgpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7Y29uc3QgaD10aGlzLnNh'@;
put 'c0pzQ29uZmlnLmFwcExvYztsZXQgZj10aGlzLnNhc0pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuZGNEaXJlY3Rvcnk7dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Q3UuWS5TYXNqcz90aGlzLnNhc1NlcnZpY2Uuc2FzanNNYWtlZGF0YUNoZWNraW5nKCkudGhlbihZPT57WSYmKHRo'@;
put 'aXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKCIvIiksbG9jYXRpb24ucmVsb2FkKCkpfSk6dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Q3UuWS5TYXM5JiYoZj0iIixkPXdpbmRvdy5sb2NhdGlvbi5vcmlnaW4rZCsiLyIsdj1lbmNvZGVVUklDb21wb25lbnQodGhpcy5kY0RpcmVjdG9y'@;
put 'eSkpLHdpbmRvdy5vcGVuKGAke2Z8fCIifSR7ZH0/X3Byb2dyYW09JHtofS9zZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSZhZG1pbj0ke3RoaXMuZGNBZG1pbkdyb3VwfSZwYXRoPSR7dn0gYCwiX2JsYW5rIil9bG9nb3V0KCl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfXN0YXRpYyNlPXRoaXMu'@;
put 'XHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoeWEpLHN0KGlKKSxzdChxMSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2FzanMtY29uZmlndXJhdG9yIl1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0Nv'@;
put 'bmZpZzoic2FzSnNDb25maWciLGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo0MSx2YXJzOjksY29uc3RzOltbImNsYXNzIiwidGhpblByb2dyZXNzIHByb2dyZXNTdGF0aWMg'@;
put 'cHJvZ3Jlc3MgbG9vcCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsIm15LTE1Il0sWzEsImxpZ2h0Il0sWzEsIm0tMCJdLFsxLCJtLTAiLCJtdC0xMCJdLFsxLCJtdC0yMCIsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNs'@;
put 'ci1pbnB1dC13cmFwcGVyIl0sWyJwbGFjZWhvbGRlciIsIlR5cGUgaW4gZGlyZWN0b3J5IiwxLCJjbHItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsIm1iLTEwIiwibXQtMCIsInctNTB2dyJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2Rl'@;
put 'bCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1mbGV4Il0sWzEsImJ0biIsImJ0bi1zdWNjZXNzIiwibXQtMTUiLCJ0ZXh0LWNlbnRlciIsMywiY2xpY2siXSxbMSwiY2FyZC10ZXh0IiwicGItMTAiXSxbMSwidGhpblByb2dyZXNzIiwicHJvZ3Jlc1N0YXRpYyIs'@;
put 'InByb2dyZXNzIiwibG9vcCJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGJ0KDAsWVJlLDIsMCwiZGl2IiwwKSxnZSgxLCJoNCIsMSksemUoMiwiU2FzanMgRGVwbG95IiksYmUoKSxKdCgzLCJociIsMiksZ2UoNCwicCIsMyksemUoNSwiIFRvIGNvbmZpZ3Vy'@;
put 'ZSBEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTksIHBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgZGV0YWlsczpcbiIpLGJlKCksZ2UoNiwicCIsNCksemUoNywiIFBsZWFzZSBzcGVjaWZ5IGEgcGh5c2ljYWwgZGlyZWN0b3J5IGJlbG93LCB0byB3aGljaCB1c2VyICIpLGdlKDgsInN0'@;
put 'cm9uZyIpLHplKDkpLGJlKCksemUoMTAsIiBjYW4gd3JpdGUsIG9uIGJlaGFsZiBvZiBEYXRhIENvbnRyb2xsZXI6XG4iKSxiZSgpLGdlKDExLCJsYWJlbCIsNSksemUoMTIsIkRDIERpcmVjdG9yeSIpLGJlKCksZ2UoMTMsImRpdiIsNikoMTQsImRpdiIsNykoMTUsImlucHV0Iiw4KSxHcigi'@;
put 'bmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHFyKGguZGNEaXJlY3Rvcnksdil8fChoLmRjRGlyZWN0b3J5PXYpLHZ9KSxiZSgpKCkoKSxnZSgxNiwicCIsNCksemUoMTcsIiBCZWxvdyBhcmUgdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvIHdoaWNoIHlvdSBiZWxvbmcuIFRoZSBncm91'@;
put 'cCB5b3Ugc2VsZWN0IHdpbGwgYmVjb21lIHRoZSBEYXRhIENvbnRyb2xsZXIgQWRtaW4gR3JvdXAsIGFuZCBldmVyeW9uZSBpbiBpdCB3aWxsIGhhdmUgdW5yZXN0cmljdGVkIGFjY2VzcyB0byBEYXRhIENvbnRyb2xsZXIuXG4iKSxiZSgpLGdlKDE4LCJsYWJlbCIsNSksemUoMTksIkRhdGEg'@;
put 'Q29udHJvbGxlciBBZG1pbiBncm91cCIpLGJlKCksZ2UoMjAsImNsci1zZWxlY3QtY29udGFpbmVyIiw5KSgyMSwic2VsZWN0IiwxMCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBxcihoLmRjQWRtaW5Hcm91cCx2KXx8KGguZGNBZG1pbkdyb3VwPXYpLHZ9KSxidCgy'@;
put 'Mix6UmUsMiwzLCJvcHRpb24iLDExKSxiZSgpKCksZ2UoMjMsInAiLDQpLHplKDI0LCIgTm93LCBjcmVhdGUgdGhlIHRhcmdldCBkaXJlY3RvcnkgYW5kIGRlcGxveSB0aGUgY29udHJvbCBsaWJyYXJ5IHVzaW5nIHRoZSBhZG1pbiBncm91cCBzZWxlY3RlZCBhYm92ZTpcbiIpLGJlKCksZ2Uo'@;
put 'MjUsImRpdiIsMTIpKDI2LCJidXR0b24iLDEzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgubWFrZURhdGEoKX0pLHplKDI3LCIgU1VCTUlUICIpLGJlKCkoKSxKdCgyOCwiaHIiLDIpLGdlKDI5LCJkaXYiLDE0KSgzMCwicCIpLHplKDMxLCJZb3UgYXJlIGNvbm5lY3RlZCB3aXRo'@;
put 'IHRoZSBmb2xsb3dpbmcgY3JlZGVudGlhbHM6IiksYmUoKSxnZSgzMiwidWwiKSgzMywibGkiKSx6ZSgzNCksYmUoKSxnZSgzNSwibGkiKSx6ZSgzNiksYmUoKSxnZSgzNywibGkiKSx6ZSgzOCksYmUoKSxnZSgzOSwibGkiKSx6ZSg0MCksYmUoKSgpKCkpLDImZCYmKFBlKCJuZ0lmIixoLmxv'@;
put 'YWRpbmcpLHdlKDkpLHByKGguU1lTVVNFUklEKSx3ZSg2KSxXcigibmdNb2RlbCIsaC5kY0RpcmVjdG9yeSksd2UoNiksV3IoIm5nTW9kZWwiLGguZGNBZG1pbkdyb3VwKSx3ZSgpLFBlKCJuZ0Zvck9mIixoLmRjQWRtaW5Hcm91cExpc3QpLHdlKDEyKSx4cigiTUVUQVBFUlNPTjogIixoLk1F'@;
put 'VEFQRVJTT04sIiIpLHdlKDIpLHhyKCJTWVNVU0VSSUQ6ICIsaC5TWVNVU0VSSUQsIiIpLHdlKDIpLHhyKCJTWVNIT1NUTkFNRTogIixoLlNZU0hPU1ROQU1FLCIiKSx3ZSgyKSx4cigiU1lTVkxPTkc6ICIsaC5TWVNWTE9ORywiIikpfSxkZXBlbmRlbmNpZXM6W0xzLHFpLG5kLHJkLFRsLHRk'@;
put 'LGNhLG9hLFhzLHo3LFk3XSxzdHlsZXM6WyIuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MHZ3fS5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jbHItaW5wdXQtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtf'@;
put 'bmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDp1bnNldDtoZWlnaHQ6MXB4O21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnRoaW5Qcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dG9w'@;
put 'OjB9Il19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWlJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLHplKDIsIlRlcm1zIGFuZCBDb25kaXRpb25zIiksYmUoKSxnZSgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwicCIpLHplKDYsIiBUaGUgRGVt'@;
put 'byB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVlIGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRv'@;
put 'IHRoZSAiKSxnZSg3LCJhIiw4KSx6ZSg4LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxiZSgpLHplKDksIi4gIiksYmUoKSgpLEp0KDEwLCJociIsOSksZ2UoMTEsImNsci1jaGVja2JveC13cmFwcGVyIikoMTIsImlucHV0IiwxMCksSHQoImNo'@;
put 'YW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS50ZXJtc0FncmVlQ2hhbmdlKCkpfSksYmUoKSxnZSgxMywibGFiZWwiKSx6ZSgxNCwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgIiksZ2UoMTUsImEiLDgpLHplKDE2LCJEYXRhIENvbnRyb2xs'@;
put 'ZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxiZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFdSZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTUpKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxNiksSHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO3dlKCksUGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0'@;
put 'aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEuZGNQYXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIEdSZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTcpKDEsImFwcC1tYW51YWwtZGVwbG95Iiwx'@;
put 'OCksSHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO3dlKCksUGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJk'@;
put 'Y0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uICRSZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsV1JlLDIsNiwiZGl2IiwxMykoMixHUmUsMiwzLCJkaXYiLDE0KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIsYS5hdXRvZGVw'@;
put 'bG95KSx3ZSgpLFBlKCJuZ0lmIiwhYS5hdXRvZGVwbG95KX19ZnVuY3Rpb24gcVJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiZGl2IiwxNSkoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTgpLEh0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVy'@;
put 'biBTdChhKSx4dChaZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkpfSksYmUoKSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO3dlKDIpLFBlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGlu'@;
put 'Z3MpfX1mdW5jdGlvbiBLUmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCksSHQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLm9uTmF2aWdhdGVUb0hv'@;
put 'bWUoKSl9KSxiZSgpKCksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoMiksUGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIFhSZShjLGwpe2lmKDEmYyYm'@;
put 'KHJpKDAsMTEpLGJ0KDEsJFJlLDMsMiwibmctY29udGFpbmVyIiwxMikoMixxUmUsMywzLCJuZy1jb250YWluZXIiLDEyKSgzLEtSZSwzLDMsIm5nLWNvbnRhaW5lciIsMTIpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgpO1BlKCJuZ1N3aXRjaCIsITApLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIs'@;
put 'YS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlw'@;
put 'ZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IGtpZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0ZXA9MCx0aGlzLmFkbWlu'@;
put 'R3JvdXBzPVtdLHRoaXMuY2xpZW50X2lkPSIiLHRoaXMuY2xpZW50X3NlY3JldD0iIix0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3'@;
put 'IGVkLlNBU2pzQ29uZmlnLHRoaXMuU2VydmVyVHlwZT1DdS5ZLHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSEx'@;
put 'KSx0aGlzLnNhc0pzPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0luc3RhbmNlKCksdGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMuY2xpZW50X2lkPWxvY2Fs'@;
put 'U3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfY2xpZW50X2lkIil8fCIiLHRoaXMuY2xpZW50X3NlY3JldD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19sb2MiKXx8IiJ9bmdPbklu'@;
put 'aXQoKXt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1DdS5ZLlNhc1ZpeWEmJmZldGNoKCJzYXNidWlsZC92aXlhLmpzb24iKS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1udWxsO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYo'@;
put 'dGhpcy5qc29uRmlsZT1kLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5qc29uRmlsZSkpfSksdGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRt'@;
put 'aW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hZG1pbkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRt'@;
put 'aW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRBZG1pbkdyb3Vwcygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5h'@;
put 'LnRleHQoKSkudGhlbihhPT57bGV0IGQ7dHJ5e2Q9SlNPTi5wYXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21l'@;
put 'KCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdLCJfYmxhbmsiKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGk3KSxzdCh5YSksc3QoZDEpLHN0KHpzKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0'@;
put 'eXBlOmMsc2VsZWN0b3JzOltbImFwcC1kZXBsb3kiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQsdmFyczoyLGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImNsci1yb3ciXSxbImlkIiwiVENTIiwiY2xhc3MiLCJj'@;
put 'YXJkIiw0LCJuZ0lmIl0sWzMsIm5nU3dpdGNoIiw0LCJuZ0lmIl0sWyJpZCIsIlRDUyIsMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImNhcmQtdGV4dCJdLFsiaHJlZiIsImh0dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pby9ldmFsdWF0aW9uLWxp'@;
put 'Y2VuY2UtYWdyZWVtZW50IiwidGFyZ2V0IiwiX2JsYW5rIl0sWzEsImxpZ2h0Il0sWyJjbHJDaGVja2JveCIsIiIsInR5cGUiLCJjaGVja2JveCIsMywiY2hhbmdlIl0sWzMsIm5nU3dpdGNoIl0sWzQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJhdXRvZGVwbG95LXNlY3Rpb24gY2FyZCIs'@;
put 'NCwibmdJZiJdLFsiaWQiLCJtYWluYm9keSIsImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsxLCJhdXRvZGVwbG95LXNlY3Rpb24iLCJjYXJkIl0sWzMsIm9uTmF2aWdhdGVUb0hvbWUiLCJzYXNKcyIsInNhc0pzQ29uZmlnIiwiZGNBZGFwdGVyU2V0dGluZ3MiLCJhcHBMb2MiLCJkY1BhdGgi'@;
put 'LCJzZWxlY3RlZEFkbWluR3JvdXAiXSxbImlkIiwibWFpbmJvZHkiLDEsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGdlKDAsImRpdiIsMCkoMSwiZGl2'@;
put 'IiwxKSxidCgyLFpSZSwxNywwLCJkaXYiLDIpLGJlKCksYnQoMyxYUmUsNCw0LCJuZy1jb250YWluZXIiLDMpLGJlKCkpLDImZCYmKHdlKDIpLFBlKCJuZ0lmIiwwPT09aC5zdGVwKSx3ZSgpLFBlKCJuZ0lmIixoLnN0ZXA+MCkpfSxkZXBlbmRlbmNpZXM6W3FpLFVkLGNmLFhzLHYxLF8xLGtS'@;
put 'ZSxCUmUsVVJlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5idG5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweH0ubG9nLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7YmFja2dyb3VuZDojZjBmMGYwO2JvcmRl'@;
put 'cjoxcHggc29saWQgI2M5YzljOTtwYWRkaW5nOjEwcHg7b3ZlcmZsb3c6YXV0bzt3aGl0ZS1zcGFjZTpwcmUtd3JhcH0jY29udGV4dHMtYnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjNweCAwIDA7bWluLXdpZHRoOjMwcHg7bWFyZ2luLWxlZnQ6MTBweDtoZWlnaHQ6MzBweDtkaXNw'@;
put 'bGF5OmlubGluZS1mbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS52YWxpZGF0aW9uLWJhcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6MjBweDthbGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRpb24tYmFyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6NXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAxNXB4fS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jaGVja2Jv'@;
put 'eC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweCAwfS5hdXRvZGVwbG95LXNlY3Rpb25bX25nY29udGVudC0lQ09NUCVdICAgLmJ0bi1hdXRvZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO21hcmdpbjoxNXB4IDB9Il19KX1yZXR1cm4gY30pKCk7'@;
put 'Y29uc3QgSlJlPVt7cGF0aDoiIixjb21wb25lbnQ6a2llfSx7cGF0aDoibWFudWFsZGVwbG95Iixjb21wb25lbnQ6a2llfV07bGV0IFFSZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUw'@;
put 'Mjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbV2MuZm9yQ2hpbGQoSlJlKSxXY119KX1yZXR1cm4gY30pKCksZU9lPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07'@;
put 'c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxDYyxzMCxRUmVdfSl9cmV0dXJuIGN9KSgpO1IoNzc1MjUpLFIoNDk1MzcpLFIoMTAzNjMpO3ZhciB0T2U9Uig5MTk3MyksZGE9Uig5MzEzNyk7ZnVuY3Rp'@;
put 'b24gRWllKGMpe2NvbnN0IGw9Yy5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8bDspY1thXT1bY1thXV0sYSs9MX1mdW5jdGlvbiBGVihjLGwpe2NvbnN0IGE9bC5sZW5ndGg7bGV0IGQ9MDtmb3IoO2Q8YTspYy5wdXNoKGxbZF0pLGQrPTF9ZnVuY3Rpb24gbncoYyl7Y29uc3QgbD1bXTtpZighY3x8'@;
put 'MD09PWMubGVuZ3RofHwhY1swXXx8MD09PWNbMF0ubGVuZ3RoKXJldHVybiBsO2NvbnN0IGE9Yy5sZW5ndGgsZD1jWzBdLmxlbmd0aDtmb3IobGV0IGg9MDtoPGE7aCsrKWZvcihsZXQgZj0wO2Y8ZDtmKyspbFtmXXx8KGxbZl09W10pLGxbZl1baF09Y1toXVtmXTtyZXR1cm4gbH1mdW5jdGlv'@;
put 'biBzYyhjLGwsYSxkKXtsZXQgaD0tMSxmPWMsdj1hO0FycmF5LmlzQXJyYXkoYyl8fChmPUFycmF5LmZyb20oYykpO2NvbnN0IFQ9Zi5sZW5ndGg7Zm9yKGQmJlQmJihoKz0xLHY9ZltoXSksaCs9MTtoPFQ7KXY9bCh2LGZbaF0saCxmKSxoKz0xO3JldHVybiB2fWZ1bmN0aW9uIGZkKGMsbCl7'@;
put 'bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aCxmPVtdO2xldCB2PS0xO2Zvcig7YTxoOyl7Y29uc3QgVD1kW2FdO2woVCxhLGQpJiYodis9MSxmW3ZdPVQpLGErPTF9cmV0dXJuIGZ9ZnVuY3Rpb24gX3MoYyxsKXtsZXQgYT0w'@;
put 'LGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXYrPTEsZlt2XT1sKGRbYV0sYSxkKSxhKz0xO3JldHVybiBmfWZ1bmN0aW9uIFJuKGMsbCl7bGV0IGE9MCxkPWM7QXJyYXkuaXNBcnJheShjKXx8'@;
put 'KGQ9QXJyYXkuZnJvbShjKSk7Y29uc3QgaD1kLmxlbmd0aDtmb3IoO2E8aCYmITEhPT1sKGRbYV0sYSxkKTspYSs9MTtyZXR1cm4gY31mdW5jdGlvbiBUaWUoYyl7cmV0dXJuIHNjKGMsKGwsYSk9PmwrYSwwKX1mdW5jdGlvbiBuT2UoYyl7cmV0dXJuIHNjKGMsKGwsYSk9Pmw+YT9sOmEsQXJy'@;
put 'YXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gck9lKGMpe3JldHVybiBzYyhjLChsLGEpPT5sPGE/bDphLEFycmF5LmlzQXJyYXkoYyk/Y1swXTp2b2lkIDApfWZ1bmN0aW9uIGlPZShjKXtyZXR1cm4gYy5sZW5ndGg/VGllKGMpL2MubGVuZ3RoOjB9ZnVuY3Rpb24gRGllKGMp'@;
put 'e3JldHVybiBzYyhjLChsLGEpPT5sLmNvbmNhdChBcnJheS5pc0FycmF5KGEpP0RpZShhKTphKSxbXSl9ZnVuY3Rpb24gSFYoYyl7Y29uc3QgbD1bXTtyZXR1cm4gUm4oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChhKX0pLGx9ZnVuY3Rpb24gTlYoKXtmb3IodmFyIGM9YXJndW1l'@;
put 'bnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBSbihoLHY9PntmPWYuZmlsdGVyKFQ9PiF2LmluY2x1ZGVzKFQpKX0pLGZ9ZnVuY3Rpb24gb09lKCl7Zm9yKHZhciBjPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gUm4oaCx2PT57Zj1mLmZpbHRlcihUPT52LmluY2x1ZGVzKFQpKX0pLGZ9ZnVuY3Rpb24gc09lKCl7Zm9yKHZhciBjPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0KGQpO3JldHVybiBSbihoLHY9PntSbih2LFQ9PntmLmhhcyhUKXx8Zi5hZGQoVCl9KX0pLEFycmF5LmZyb20oZil9ZnVuY3Rpb24gVlYo'@;
put 'Yyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24gV2EoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJn'@;
put 'dW1lbnRzW2RdO3JldHVybiBzYyhjLChmLHYsVCk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9nLCIiKSsoYVtUXT9hW1RdOiIiKSwiIikudHJpbSgpfWZ1bmN0aW9uICRsKGMpe2xldCBsO3N3aXRjaCh0eXBlb2YgYyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpsPWAke2N9YDticmVhaztj'@;
put 'YXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRlZmluZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5jdGlvbiBlbyhjKXtyZXR1cm4gdHlwZW9mIGM8InUifWZ1bmN0aW9uIGlsKGMpe3JldHVybiB0eXBl'@;
put 'b2YgYz4idSJ9ZnVuY3Rpb24gcWMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fGlsKGMpfWZ1bmN0aW9uIEFpZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1jb25zdCBydz0ibGVuZ3RoIixpdz1jPT5wYXJzZUludChj'@;
put 'LDE2KSxMaWU9Yz0+cGFyc2VJbnQoYywxMCksbVQ9KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxvdz1jPT5jLmNvZGVQb2ludEF0KDApLTY1LGpWPWM9PmAke2N9YC5yZXBsYWNlKC9cLS9nLCIiKSxhT2U9Yz0+aXcobVQoalYoYyksaXcoIjEyIiksb3coIkYiKSkpLyhpdyhtVChqVihjKSxvdygi'@;
put 'QiIpLH5+IVtdW3J3XSkpfHw5KSxsT2U9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXowLTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KTtsZXQgSWllPSEx'@;
put 'O2NvbnN0IFJpZT17aW52YWxpZDooKT0+V2FgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLGV4cGlyZWQ6Yz0+e2xldHtr'@;
put 'ZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIFdhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiBSZW5ldyB5b3Vy'@;
put 'IGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYH0sbWlzc2luZzooKT0+'@;
put 'V2FgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2UgeW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Ig'@;
put 'bm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsbm9uX2NvbW1l'@;
put 'cmNpYWw6KCk9PiIifSxPaWU9e2ludmFsaWQ6KCk9PldhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9'@;
put 'Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHByb3Blcmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLGV4cGlyZWQ6Yz0+e2xl'@;
put 'dHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIFdhYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiA8YSBocmVm'@;
put 'PSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJlbmV3PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnlceDIwCiAgICBoZWxw'@;
put 'LCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29tIj5zYWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5XYWAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNo'@;
put 'YXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFs'@;
put 'LWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNv'@;
put 'bnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVuY3Rpb24gUGllKGMsbCl7Y29uc3QgYT0hcWMoYyksZD0ic3RyaW5nIj09dHlwZW9mIGMmJiJu'@;
put 'b24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTMuMS4wIjtsZXQgZix2PSJpbnZhbGlkIixUPSJpbnZhbGlkIjtjb25zdCBZPWZ1bmN0aW9uIGNPZShjKXtsZXQgbD1bXVtyd10sYT1sO2lmKGNbcnddIT09b3coIloiKSlyZXR1cm4hMTtmb3IobGV0'@;
put 'IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1vdyhoLnNoaWZ0KCkpO2Y7Zj1vdyhoLnNoaWZ0KCl8fCJBIikpLS1mPCIiW3J3XT9hfD0oTGllKGAke0xpZShpdyhkKSsoaXcobVQoYyxNYXRoLmFicyhmKSwyKSkrW10pLnBhZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIpPj4xOmQ9bVQoYyxm'@;
put 'LGY/MT09PWhbcnddPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9alYoY3x8IiIpKTtpZihhfHxkfHxZKWlmKFkpe2NvbnN0IHJlPWRhKCIzMS8wOC8yMDIzIiwiREQvTU0vWVlZWSIpLGZlPU1hdGguZmxvb3IocmUudG9EYXRlKCkuZ2V0VGltZSgpLzg2NGU1KSxfZT1hT2UoYyk7Zj1kYSg4NjRl'@;
put 'NSooX2UrMSksIngiKS5mb3JtYXQoIk1NTU0gREQsIFlZWVkiKSxmZT5fZT8odj0iZXhwaXJlZCIsVD0iZXhwaXJlZCIpOih2PSJ2YWxpZCIsVD0idmFsaWQiKX1lbHNlIGQ/KHY9Im5vbl9jb21tZXJjaWFsIixUPSJ2YWxpZCIpOih2PSJpbnZhbGlkIixUPSJpbnZhbGlkIik7ZWxzZSB2PSJt'@;
put 'aXNzaW5nIixUPSJtaXNzaW5nIjtpZihsT2UoKSYmKHY9InZhbGlkIixUPSJ2YWxpZCIpLCFJaWUmJiJ2YWxpZCIhPT12JiYoUmllW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSYmY29uc29sZVsibm9uX2NvbW1lcmNpYWwiPT09dj8iaW5mbyI6Indhcm4iXShSaWVbdl0o'@;
put 'e2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKSxJaWU9ITApLCJ2YWxpZCIhPT1UJiZsLnBhcmVudE5vZGUmJk9pZVtUXSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkpe2NvbnN0IGZlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2ZlLmNsYXNzTmFtZT0i'@;
put 'aG90LWRpc3BsYXktbGljZW5zZS1pbmZvIixmZS5pbm5lckhUTUw9T2llW1RdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSxsLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGZlLGwubmV4dFNpYmxpbmcpfX1mdW5jdGlvbiBhMChjKXtyZXR1cm4gY1swXS50b1VwcGVyQ2FzZSgp'@;
put 'K2Muc3Vic3RyKDEpfWZ1bmN0aW9uIHVPZSgpe2NvbnN0IGM9W107Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07bGV0IGg9YS5sZW5ndGg7Zm9yKDtoOyl7aC09MTtjb25zdCBmPSRsKGFbaF0pLnRvTG93ZXJD'@;
put 'YXNlKCk7LTE9PT1jLmluZGV4T2YoZikmJmMucHVzaChmKX1yZXR1cm4gMT09PWMubGVuZ3RofWZ1bmN0aW9uIEJWKCl7ZnVuY3Rpb24gYygpe3JldHVybiBNYXRoLmZsb29yKDY1NTM2KigxK01hdGgucmFuZG9tKCkpKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpfXJldHVybiBjKCkrYygp'@;
put 'K2MoKStjKCl9ZnVuY3Rpb24gWVYoYyl7cmV0dXJuL14oWzAtOV1bMC05XT8lJCl8KF4xMDAlJCkvLnRlc3QoYyl9ZnVuY3Rpb24gelYoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybmAke2N9YC5yZXBsYWNl'@;
put 'KC8oPzpcXCk/XFsoW15bXF1dKyldL2csKGEsZCk9PiJcXCI9PT1hLmNoYXJBdCgwKT9hLnN1YnN0cigxLGEubGVuZ3RoLTEpOnZvaWQgMD09PWxbZF0/IiI6bFtkXSl9ZnVuY3Rpb24gVVYoYyl7cmV0dXJuIGdUKGAke2N9YCx7QUxMT1dFRF9UQUdTOltdfSl9ZnVuY3Rpb24gZ1QoYyxsKXty'@;
put 'ZXR1cm4gdE9lLnNhbml0aXplKGMsbCl9ZnVuY3Rpb24gRmllKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLGE9LTEsZD1udWxsLGg9Yztmb3IoO251bGwhPT1oOyl7aWYoYT09PWwpe2Q9aDticmVha31oLmhvc3QmJmgu'@;
put 'bm9kZVR5cGU9PT1Ob2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU/aD1oLmhvc3Q6KGErPTEsaD1oLnBhcmVudE5vZGUpfXJldHVybiBkfWZ1bmN0aW9uIEhpZShjKXtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KSYmYy5mcmFtZUVsZW1lbnR9ZnVuY3Rpb24gc3coYyl7'@;
put 'cmV0dXJuIEhpZShjKSYmYy5wYXJlbnR9ZnVuY3Rpb24gZE9lKGMpe3JldHVybiEhT2JqZWN0LmdldFByb3RvdHlwZU9mKGMucGFyZW50KX1mdW5jdGlvbiBRNChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMDtjb25zdHtFTEVNRU5UX05PREU6ZCxET0NVTUVOVF9GUkFHTUVOVF9OT0RFOmh9PU5vZGU7bGV0IGY9Yztmb3IoO251bGwhPWYmJmYhPT1hOyl7Y29uc3R7bm9kZVR5cGU6dixub2RlTmFtZTpUfT1mO2lmKHY9PT1kJiYobC5pbmNs'@;
put 'dWRlcyhUKXx8bC5pbmNsdWRlcyhmKSkpcmV0dXJuIGY7Y29uc3R7aG9zdDpZfT1mO2Y9WSYmdj09PWg/WTpmLnBhcmVudE5vZGV9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYXcoYyxsLGEpe2NvbnN0IGQ9W107bGV0IGg9Yztmb3IoO2gmJihoPVE0KGgsbCxhKSxoJiYoIWF8fGEuY29udGFpbnMo'@;
put 'aCkpKTspZC5wdXNoKGgpLGg9aC5ob3N0JiZoLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFP2guaG9zdDpoLnBhcmVudE5vZGU7Y29uc3QgZj1kLmxlbmd0aDtyZXR1cm4gZj9kW2YtMV06bnVsbH1mdW5jdGlvbiBlbShjLGwpe2xldCBhPWMucGFyZW50Tm9kZSxkPVtd'@;
put 'O2Zvcigic3RyaW5nIj09dHlwZW9mIGw/ZD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChjLmRlZmF1bHRWaWV3P2MucXVlcnlTZWxlY3RvckFsbChsKTpjLm93bmVyRG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChsKSwwKTpkLnB1c2gobCk7bnVsbCE9PWE7KXtpZihkLmluZGV4T2YoYSk+'@;
put 'LTEpcmV0dXJuITA7YT1hLnBhcmVudE5vZGV9cmV0dXJuITF9ZnVuY3Rpb24gTmllKGMpe2xldCBsPTAsYT1jO2lmKGEucHJldmlvdXNTaWJsaW5nKWZvcig7YT1hLnByZXZpb3VzU2libGluZzspbCs9MTtyZXR1cm4gbH1mdW5jdGlvbiB0bShjLGwsYSl7Y29uc3QgZD1hLnBhcmVudEVsZW1l'@;
put 'bnQucXVlcnlTZWxlY3RvcihgLmh0X2Nsb25lXyR7Y31gKTtyZXR1cm4gZD9kLmNvbnRhaW5zKGwpOm51bGx9ZnVuY3Rpb24gVmllKGMpe3JldHVybiBjJiZjLmxlbmd0aD9jLmZpbHRlcihsPT4hIWwpOltdfWZ1bmN0aW9uIFFvKGMsbCl7cmV0dXJuIHZvaWQgMCE9PWMuY2xhc3NMaXN0JiYi'@;
put 'c3RyaW5nIj09dHlwZW9mIGwmJiIiIT09bCYmYy5jbGFzc0xpc3QuY29udGFpbnMobCl9ZnVuY3Rpb24gd2koYyxsKXsic3RyaW5nIj09dHlwZW9mIGwmJihsPWwuc3BsaXQoIiAiKSksKGw9VmllKGwpKS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QuYWRkKC4uLmwpfWZ1bmN0aW9uIHNzKGMsbCl7'@;
put 'InN0cmluZyI9PXR5cGVvZiBsJiYobD1sLnNwbGl0KCIgIikpLChsPVZpZShsKSkubGVuZ3RoPjAmJmMuY2xhc3NMaXN0LnJlbW92ZSguLi5sKX1mdW5jdGlvbiBaVihjKXtpZigzPT09Yy5ub2RlVHlwZSljLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7ZWxzZSBpZihbIlRBQkxFIiwiVEhF'@;
put 'QUQiLCJUQk9EWSIsIlRGT09UIiwiVFIiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xKXtjb25zdCBsPWMuY2hpbGROb2Rlcztmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSlaVihsW2FdKX19ZnVuY3Rpb24gaDIoYyl7bGV0IGw7Zm9yKDtsPWMubGFzdENoaWxkOyljLnJlbW92ZUNoaWxk'@;
put 'KGwpfWNvbnN0IGppZT0vKDwoLiopPnwmKC4qKTspLztmdW5jdGlvbiBGZyhjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07amllLnRlc3QobCk/Yy5pbm5lckhUTUw9YT9nVChsKTpsOm5tKGMsbCl9ZnVuY3Rpb24g'@;
put 'bm0oYyxsKXtjb25zdCBhPWMuZmlyc3RDaGlsZDthJiYzPT09YS5ub2RlVHlwZSYmbnVsbD09PWEubmV4dFNpYmxpbmc/YS50ZXh0Q29udGVudD1sOihoMihjKSxjLmFwcGVuZENoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsKSkpfWZ1bmN0aW9uIGE5KGMpe2NvbnN0IGw9'@;
put 'Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtsZXQgYT1jO2Zvcig7YSE9PWw7KXtpZihudWxsPT09YSlyZXR1cm4hMTtpZihhLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtpZihhLmhvc3Qpe2lmKGEuaG9zdC5pbXBsKXJldHVybiBhOShhLmhvc3QuaW1w'@;
put 'bCk7aWYoYS5ob3N0KXJldHVybiBhOShhLmhvc3QpO3Rocm93IG5ldyBFcnJvcigiTG9zdCBpbiBXZWIgQ29tcG9uZW50cyB3b3JsZCIpfXJldHVybiExfWlmKGEuc3R5bGUmJiJub25lIj09PWEuc3R5bGUuZGlzcGxheSlyZXR1cm4hMTthPWEucGFyZW50Tm9kZX1yZXR1cm4hMH1mdW5jdGlv'@;
put 'biBTYyhjKXtjb25zdCBsPWMub3duZXJEb2N1bWVudCxhPWwuZGVmYXVsdFZpZXcsZD1sLmRvY3VtZW50RWxlbWVudDtsZXQgZix2LFQsaD1jO2ZvcihmPWgub2Zmc2V0TGVmdCx2PWgub2Zmc2V0VG9wLFQ9aDsoaD1oLm9mZnNldFBhcmVudCkmJmghPT1sLmJvZHk7KWYrPWgub2Zmc2V0TGVm'@;
put 'dCx2Kz1oLm9mZnNldFRvcCxUPWg7cmV0dXJuIFQmJiJmaXhlZCI9PT1ULnN0eWxlLnBvc2l0aW9uJiYoZis9YS5wYWdlWE9mZnNldHx8ZC5zY3JvbGxMZWZ0LHYrPWEucGFnZVlPZmZzZXR8fGQuc2Nyb2xsVG9wKSx7bGVmdDpmLHRvcDp2fX1mdW5jdGlvbiBsOSgpe3JldHVybihhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93KS5zY3JvbGxZfWZ1bmN0aW9uIEhnKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFh9ZnVuY3Rpb24g'@;
put 'bHcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/bDkobCk6Yy5zY3JvbGxUb3B9ZnVuY3Rpb24gX1QoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYz09PWw/SGcobCk6Yy5zY3JvbGxMZWZ0fWZ1bmN0aW9uIGN3KGMpe2xldCBsPWMub3duZXJEb2N1bWVudCxhPWw/bC5kZWZhdWx0Vmlldzp2b2lkIDA7bHx8KGw9Yy5kb2N1bWVudD9jLmRvY3VtZW50OmMsYT1sLmRlZmF1bHRWaWV3KTtj'@;
put 'b25zdCBkPVsiYXV0byIsInNjcm9sbCJdO2xldCBoPWMucGFyZW50Tm9kZTtmb3IoO2gmJmguc3R5bGUmJmwuYm9keSE9PWg7KXtsZXR7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6VH09aC5zdHlsZTtpZihbZix2LFRdLmluY2x1ZGVzKCJzY3JvbGwiKSlyZXR1cm4gaDtpZigo'@;
put 'e292ZXJmbG93OmYsb3ZlcmZsb3dYOnYsb3ZlcmZsb3dZOlR9PWEuZ2V0Q29tcHV0ZWRTdHlsZShoKSksZC5pbmNsdWRlcyhmKXx8ZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhUKXx8aC5jbGllbnRIZWlnaHQ8PWguc2Nyb2xsSGVpZ2h0KzEmJihkLmluY2x1ZGVzKFQpfHxkLmluY2x1ZGVz'@;
put 'KGYpKXx8aC5jbGllbnRXaWR0aDw9aC5zY3JvbGxXaWR0aCsxJiYoZC5pbmNsdWRlcyh2KXx8ZC5pbmNsdWRlcyhmKSkpcmV0dXJuIGg7aD1oLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24gTmcoYyl7Y29uc3QgbD1jLm93bmVyRG9jdW1lbnQsYT1sLmRlZmF1bHRWaWV3O2xldCBkPWMu'@;
put 'cGFyZW50Tm9kZTtmb3IoO2QmJmQuc3R5bGUmJmwuYm9keSE9PWQ7KXtpZigidmlzaWJsZSIhPT1kLnN0eWxlLm92ZXJmbG93JiYiIiE9PWQuc3R5bGUub3ZlcmZsb3cpcmV0dXJuIGQ7Y29uc3QgaD1ybShkLGEpLGY9WyJzY3JvbGwiLCJoaWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5'@;
put 'VmFsdWUoIm92ZXJmbG93IiksVD1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxZPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKGYuaW5jbHVkZXModil8fGYuaW5jbHVkZXMoVCl8fGYuaW5jbHVkZXMoWSkpcmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJu'@;
put 'IGF9ZnVuY3Rpb24gYzkoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93O2lmKCFjKXJldHVybjtpZihjPT09YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlubmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHth'@;
put 'LmlubmVySGVpZ2h0fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPXJtKGMsYSk7cmV0dXJuIiIhPT1oW2xdJiZ2b2lkIDAhPT1oW2xdP2hbbF06dm9pZCAwfWZ1bmN0aW9uIGhPZShjLGwpe2NvbnN0e3NlbGVjdG9y'@;
put 'VGV4dDphfT1sO2xldCBkPSExO3JldHVybiBsLnR5cGU9PT1DU1NSdWxlLlNUWUxFX1JVTEUmJmEmJihjLm1zTWF0Y2hlc1NlbGVjdG9yP2Q9Yy5tc01hdGNoZXNTZWxlY3RvcihhKTpjLm1hdGNoZXMmJihkPWMubWF0Y2hlcyhhKSkpLGR9ZnVuY3Rpb24gcm0oYyl7bGV0IGw9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztyZXR1cm4gYy5jdXJyZW50U3R5bGV8fGwuZ2V0Q29tcHV0ZWRTdHlsZShjKX1mdW5jdGlvbiBOYShjKXtyZXR1cm4gYy5vZmZzZXRXaWR0aH1mdW5jdGlvbiBWbChjKXtyZXR1cm4gYy5vZmZzZXRI'@;
put 'ZWlnaHR9ZnVuY3Rpb24gaXAoYyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0fWZ1bmN0aW9uIHV3KGMpe3JldHVybiBjLmNsaWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24gZk9lKGMsbCxhKXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBw'@;
put 'T2UoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIFdWKGMpe3JldHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2VsZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiBCaWUoYyl7cmV0dXJuIGMuc2VsZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gWWll'@;
put 'KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9jdW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9uP2E9Yy5nZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYi'@;
put 'Q29udHJvbCIhPT1sLnNlbGVjdGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQpLGF9ZnVuY3Rpb24gR1YoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYo'@;
put 'Yy5nZXRTZWxlY3Rpb24oKS5lbXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1bmN0aW9uIGR3KGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNl'@;
put 'bGVjdGlvblJhbmdlKXtjLmZvY3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRjaHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWguc3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixjLnNldFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9'@;
put 'fX1sZXQgJFY7ZnVuY3Rpb24gZnUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PSRWJiYoJFY9ZnVuY3Rpb24gbU9lKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAwcHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLnN0eWxlLmJveFNpemluZz0iY29u'@;
put 'dGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgiLGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9'@;
put 'ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9mZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGg9bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lk'@;
put 'dGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxkLWh9KGMpKSwkVn1mdW5jdGlvbiB6aWUoYyl7cmV0dXJuIGMub2Zmc2V0V2lkdGghPT1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIFVpZShjKXtyZXR1cm4gYy5vZmZzZXRIZWlnaHQhPT1jLmNsaWVudEhlaWdo'@;
put 'dH1mdW5jdGlvbiB2VChjLGwsYSl7Yy5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZTNkKCR7bH0sJHthfSwwKWB9ZnVuY3Rpb24gZ09lKGMpe2xldCBsO3JldHVybiBjLnN0eWxlLnRyYW5zZm9ybSYmIiIhPT0obD1jLnN0eWxlLnRyYW5zZm9ybSk/WyJ0cmFuc2Zvcm0iLGxdOi0xfWZ1bmN0'@;
put 'aW9uIGh3KGMpe2Muc3R5bGUudHJhbnNmb3JtJiYiIiE9PWMuc3R5bGUudHJhbnNmb3JtJiYoYy5zdHlsZS50cmFuc2Zvcm09IiIpfWZ1bmN0aW9uIGZ3KGMpe3JldHVybiBjJiYoWyJJTlBVVCIsIlNFTEVDVCIsIlRFWFRBUkVBIl0uaW5kZXhPZihjLm5vZGVOYW1lKT4tMXx8InRydWUiPT09'@;
put 'Yy5jb250ZW50RWRpdGFibGUpfWZ1bmN0aW9uIHlUKGMpe3JldHVybiBmdyhjKSYmITE9PT1jLmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKX1mdW5jdGlvbiBaaWUoYyl7eVQoYy5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHxjLnNlbGVjdCgpfWZ1bmN0aW9uIHFWKGMpe3Jl'@;
put 'dHVybiFjLnBhcmVudE5vZGV9ZnVuY3Rpb24gV2llKGMsbCl7bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChkLGgpPT57ZC5mb3JFYWNoKGY9PntmLmlzSW50ZXJzZWN0aW5nJiZudWxsIT09Yy5vZmZzZXRQYXJlbnQmJihsKCksaC51bm9ic2VydmUoYykpfSl9LHtyb290OmMub3duZXJEb2N1'@;
put 'bWVudC5ib2R5fSkub2JzZXJ2ZShjKX1mdW5jdGlvbiBvbChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31mdW5jdGlvbiBHaWUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPTA7Y29uc3QgZD17bGFzdENh'@;
put 'bGxUaHJvdHRsZWQ6ITB9O2xldCBoPW51bGw7cmV0dXJuIGZ1bmN0aW9uIGYoKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheSh2KSxZPTA7WTx2O1krKylUW1ldPWFyZ3VtZW50c1tZXTtjb25zdCByZT1EYXRlLm5vdygpO2xldCBmZT0hMTtkLmxhc3RDYWxsVGhyb3R0'@;
put 'bGVkPSEwLGF8fChhPXJlLGZlPSEwKTtjb25zdCBfZT1sLShyZS1hKTtyZXR1cm4gZmU/KGQubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlzLFQpKTooaCYmY2xlYXJUaW1lb3V0KGgpLGg9c2V0VGltZW91dCgoKT0+e2QubGFzdENhbGxUaHJvdHRsZWQ9ITEsYy5hcHBseSh0aGlz'@;
put 'LFQpLGE9MCxoPXZvaWQgMH0sX2UpKSxkfX1mdW5jdGlvbiBfT2UoYyl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjEwO2NvbnN0IGQ9R2llKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOjIwMCk7bGV0IGg9YTtmdW5jdGlvbiB2KCl7Zm9yKHZhciBUPWFyZ3VtZW50cy5sZW5ndGgsWT1uZXcgQXJyYXkoVCkscmU9MDtyZTxUO3JlKyspWVtyZV09YXJndW1lbnRzW3JlXTtyZXR1cm4gaD8oaC09MSxjLmFwcGx5KHRoaXMsWSkpOmQuYXBwbHkodGhpcyxZKX1yZXR1'@;
put 'cm4gdi5jbGVhckhpdHM9ZnVuY3Rpb24gZigpe2g9YX0sdn1mdW5jdGlvbiBLVihjKXtsZXQgZCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT1udWxsO3JldHVybiBmdW5jdGlvbiBoKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsdj1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspdltUXT1hcmd1bWVudHNbVF07cmV0dXJuIGEmJmNsZWFyVGltZW91dChhKSxhPXNldFRpbWVvdXQoKCk9PntkPWMuYXBwbHkodGhpcyx2KX0sbCksZH19ZnVuY3Rpb24gdk9lKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1u'@;
put 'ZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07Y29uc3RbZCwuLi5oXT1sO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KHYpLFk9MDtZPHY7WSsrKVRbWV09YXJndW1lbnRzW1ldO3JldHVybiBzYyhoLChyZSxm'@;
put 'ZSk9PmZlKHJlKSxkLmFwcGx5KHRoaXMsVCkpfX1mdW5jdGlvbiBYVihjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGgsdj1uZXcgQXJyYXkoZiksVD0wO1Q8ZjtUKyspdltUXT1hcmd1bWVudHNbVF07cmV0dXJuIGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9fWZ1bmN0aW9uICRpZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBmdW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIg'@;
put 'Zj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLFQ9MDtUPGY7VCsrKXZbVF09YXJndW1lbnRzW1RdO2NvbnN0IFk9ZC5jb25jYXQodik7bGV0IHJlO3JldHVybiByZT1ZLmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsWSk6YShZKSxyZX19KFtdKX1mdW5jdGlvbiB5T2UoYyl7Y29uc3Qg'@;
put 'bD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxUPTA7VDxmO1QrKyl2W1RdPWFyZ3VtZW50c1tUXTtjb25zdCBZPWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgcmU7cmV0dXJu'@;
put 'IHJlPVkubGVuZ3RoPj1sP2MuYXBwbHkodGhpcyxZKTphKFkpLHJlfX0oW10pfWZ1bmN0aW9uIGJUKGMsbCxhLGQsaCxmLHYsVCl7cmV0dXJuIGVvKFQpP2MuY2FsbChsLGEsZCxoLGYsdixUKTplbyh2KT9jLmNhbGwobCxhLGQsaCxmLHYpOmVvKGYpP2MuY2FsbChsLGEsZCxoLGYpOmVvKGgp'@;
put 'P2MuY2FsbChsLGEsZCxoKTplbyhkKT9jLmNhbGwobCxhLGQpOmVvKGEpP2MuY2FsbChsLGEpOmMuY2FsbChsKX1mdW5jdGlvbiB1OShjKXtsZXQgbDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBBcnJheShjLmxlbmd0aCkuZmlsbChudWxsKTpbXToobD17fSx5cyhj'@;
put 'LChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXkuaXNBcnJheShhKT91OShhKTpBcnJheS5pc0FycmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFbMF0mJiFBcnJheS5pc0FycmF5KGFbMF0pP1t1OShhWzBdKV06W106'@;
put 'bnVsbCl9KSksbH1mdW5jdGlvbiBvcChjLGwpe3JldHVybiBsLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1sLGMucHJvdG90eXBlPW5ldyBsLGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMsY31mdW5jdGlvbiB4YyhjLGwsYSl7Y29uc3QgZD1BcnJheS5pc0FycmF5KGEpO3JldHVybiB5cyhsLCho'@;
put 'LGYpPT57KCExPT09ZHx8YS5pbmNsdWRlcyhmKSkmJihjW2ZdPWgpfSksY31mdW5jdGlvbiBwdyhjLGwpe3lzKGwsKGEsZCk9PntsW2RdJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0/KGNbZF18fChjW2RdPUFycmF5LmlzQXJyYXkobFtkXSk/W106IltvYmplY3QgRGF0ZV0iPT09T2JqZWN0LnBy'@;
put 'b3RvdHlwZS50b1N0cmluZy5jYWxsKGxbZF0pP2xbZF06e30pLHB3KGNbZF0sbFtkXSkpOmNbZF09bFtkXX0pfWZ1bmN0aW9uIGwwKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYz9KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGMpKTpjfWZ1bmN0aW9uIEkwKGMpe2NvbnN0IGw9e307cmV0'@;
put 'dXJuIHlzKGMsKGEsZCk9PntsW2RdPWF9KSxsfWZ1bmN0aW9uIEdhKGMpe2MuTUlYSU5TfHwoYy5NSVhJTlM9W10pO2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGw+MT9sLTE6MCksZD0xO2Q8bDtkKyspYVtkLTFdPWFyZ3VtZW50c1tkXTtyZXR1cm4gUm4oYSxoPT57'@;
put 'Yy5NSVhJTlMucHVzaChoLk1JWElOX05BTUUpLHlzKGgsKGYsdik9PntpZih2b2lkIDAhPT1jLnByb3RvdHlwZVt2XSl0aHJvdyBuZXcgRXJyb3IoYE1peGluIGNvbmZsaWN0LiBQcm9wZXJ0eSAnJHt2fScgYWxyZWFkeSBleGlzdCBhbmQgY2Fubm90IGJlIG92ZXJ3cml0dGVuLmApO2lmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBmKWMucHJvdG90eXBlW3ZdPWY7ZWxzZXtjb25zdCBZPWZ1bmN0aW9uKGZlKXtjb25zdCBfZT1gXyR7ZmV9YDtyZXR1cm4gZnVuY3Rpb24oa2Upe3RoaXNbX2VdPWtlfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KGMucHJvdG90eXBlLHYse2dldDpmdW5jdGlvbihm'@;
put 'ZSxfZSl7Y29uc3Qga2U9YF8ke2ZlfWA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PXRoaXNba2VdJiYodGhpc1trZV09KEplPT57bGV0IHR0PUplO3JldHVybihBcnJheS5pc0FycmF5KHR0KXx8dnModHQpKSYmKHR0PWwwKHR0KSksdHR9KShfZSkpLHRoaXNba2VdfX0odixm'@;
put 'KSxzZXQ6WSh2KSxjb25maWd1cmFibGU6ITB9KX19KX0pLGN9ZnVuY3Rpb24gd1QoYyxsKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYyk9PT1KU09OLnN0cmluZ2lmeShsKX1mdW5jdGlvbiB2cyhjKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu'@;
put 'Y2FsbChjKX1mdW5jdGlvbiBDZihjLGwsYSxkKXtkLnZhbHVlPWEsZC53cml0YWJsZT0hMSE9PWQud3JpdGFibGUsZC5lbnVtZXJhYmxlPSExIT09ZC5lbnVtZXJhYmxlLGQuY29uZmlndXJhYmxlPSExIT09ZC5jb25maWd1cmFibGUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCxkKX1mdW5j'@;
put 'dGlvbiB5cyhjLGwpe2Zvcihjb25zdCBhIGluIGMpaWYoKCFjLmhhc093blByb3BlcnR5fHxjLmhhc093blByb3BlcnR5JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxhKSkmJiExPT09bChjW2FdLGEsYykpYnJlYWs7cmV0dXJuIGN9ZnVuY3Rpb24gcWllKGMsbCl7'@;
put 'Y29uc3QgYT1sLnNwbGl0KCIuIik7bGV0IGQ9YztyZXR1cm4geXMoYSxoPT57aWYoZD1kW2hdLHZvaWQgMD09PWQpcmV0dXJuIGQ9dm9pZCAwLCExfSksZH1mdW5jdGlvbiBNVChjLGwsYSl7Y29uc3QgZD1sLnNwbGl0KCIuIik7bGV0IGg9YztkLmZvckVhY2goKGYsdik9Pnt2IT09ZC5sZW5n'@;
put 'dGgtMT8ocWwoaCxmKXx8KGhbZl09e30pLGg9aFtmXSk6aFtmXT1hfSl9ZnVuY3Rpb24gQ1QoYyl7aWYoIXZzKGMpKXJldHVybiAwO2NvbnN0IGw9ZnVuY3Rpb24oYSl7bGV0IGQ9MDtyZXR1cm4gdnMoYSk/eXMoYSwoaCxmKT0+eyJfX2NoaWxkcmVuIiE9PWYmJihkKz1sKGgpKX0pOmQrPTEs'@;
put 'ZH07cmV0dXJuIGwoYyl9ZnVuY3Rpb24gVmcoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJ2YWx1ZSI7Y29uc3QgYT1gXyR7bH1gLGQ9e190b3VjaGVkOiExLFthXTpjLGlzVG91Y2hlZCgpe3JldHVybiB0aGlzLl90b3Vj'@;
put 'aGVkfX07cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShkLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoaCl7dGhpcy5fdG91Y2hlZD0hMCx0aGlzW2FdPWh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksZH1mdW5jdGlvbiBxbChjLGwpe3JldHVybiBPYmplY3QucHJv'@;
put 'dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYyxsKX1SKDk1NDkzKTtjb25zdCBvaD1jPT57Y29uc3QgbD17dmFsdWU6ITEsdGVzdDooYSxkKT0+e2wudmFsdWU9YyhhLGQpfX07cmV0dXJuIGx9LHNwPXtjaHJvbWU6b2goKGMsbCk9Pi9DaHJvbWUvLnRlc3QoYykmJi9Hb29nbGUvLnRlc3Qo'@;
put 'bCkpLGNocm9tZVdlYktpdDpvaChjPT4vQ3JpT1MvLnRlc3QoYykpLGVkZ2U6b2goYz0+L0VkZ2UvLnRlc3QoYykpLGVkZ2VXZWJLaXQ6b2goYz0+L0VkZ2lPUy8udGVzdChjKSksZmlyZWZveDpvaChjPT4vRmlyZWZveC8udGVzdChjKSksZmlyZWZveFdlYktpdDpvaChjPT4vRnhpT1MvLnRl'@;
put 'c3QoYykpLG1vYmlsZTpvaChjPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoYykpLHNhZmFyaTpvaCgoYyxsKT0+L1NhZmFyaS8udGVzdChjKSYmL0FwcGxlIENvbXB1dGVyLy50ZXN0KGwpKX0sZDk9e21hYzpv'@;
put 'aChjPT4vXk1hYy8udGVzdChjKSksd2luOm9oKGM9Pi9eV2luLy50ZXN0KGMpKSxsaW51eDpvaChjPT4vXkxpbnV4Ly50ZXN0KGMpKSxpb3M6b2goYz0+L2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KGMpKX07ZnVuY3Rpb24gS2llKCl7bGV0e3VzZXJBZ2VudDpjPW5hdmlnYXRvci51c2VyQWdl'@;
put 'bnQsdmVuZG9yOmw9bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3lzKHNwLGE9PntsZXR7dGVzdDpkfT1hO2QoYyxsKX0pfWZ1bmN0aW9uIFhpZSgpe2xldHtwbGF0Zm9ybTpjPW5hdmlnYXRvci5wbGF0'@;
put 'Zm9ybX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3lzKGQ5LGw9PntsZXR7dGVzdDphfT1sO2EoYyl9KX1mdW5jdGlvbiBKVigpe3JldHVybiBzcC5jaHJvbWUudmFsdWV9ZnVuY3Rpb24gSmllKCl7cmV0dXJuIHNwLmNocm9tZVdl'@;
put 'YktpdC52YWx1ZX1mdW5jdGlvbiBTVCgpe3JldHVybiBzcC5maXJlZm94LnZhbHVlfWZ1bmN0aW9uIFFpZSgpe3JldHVybiBzcC5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIGJPZSgpe3JldHVybiBzcC5zYWZhcmkudmFsdWV9ZnVuY3Rpb24gZW9lKCl7cmV0dXJuIHNwLmVkZ2UudmFs'@;
put 'dWV9ZnVuY3Rpb24gd09lKCl7cmV0dXJuIHNwLmVkZ2VXZWJLaXQudmFsdWV9ZnVuY3Rpb24gZjIoKXtyZXR1cm4gc3AubW9iaWxlLnZhbHVlfWZ1bmN0aW9uIFFWKCl7cmV0dXJuIGQ5Lmlvcy52YWx1ZX1mdW5jdGlvbiBlaigpe2xldHttYXhUb3VjaFBvaW50czpjfT1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bmF2aWdhdG9yO3JldHVybiBjPjImJmQ5Lm1hYy52YWx1ZX1mdW5jdGlvbiB0aigpe3JldHVybiBkOS53aW4udmFsdWV9ZnVuY3Rpb24geFQoKXtyZXR1cm4gZDkubWFjLnZhbHVlfWZ1bmN0aW9uIE1PZSgpe3JldHVy'@;
put 'biBkOS5saW51eC52YWx1ZX1LaWUoKSxYaWUoKTtjb25zdCB1bz17QUxUOjE4LEFSUk9XX0RPV046NDAsQVJST1dfTEVGVDozNyxBUlJPV19SSUdIVDozOSxBUlJPV19VUDozOCxBVURJT19ET1dOOlNUKCk/MTgyOjE3NCxBVURJT19NVVRFOlNUKCk/MTgxOjE3MyxBVURJT19VUDpTVCgpPzE4'@;
put 'MzoxNzUsQkFDS1NQQUNFOjgsQ0FQU19MT0NLOjIwLENPTU1BOjE4OCxDT01NQU5EX0xFRlQ6OTEsQ09NTUFORF9SSUdIVDo5MyxDT01NQU5EX0ZJUkVGT1g6MjI0LENPTlRST0w6MTcsREVMRVRFOjQ2LEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsRjE6MTEyLEYyOjExMyxGMzoxMTQsRjQ6'@;
put 'MTE1LEY1OjExNixGNjoxMTcsRjc6MTE4LEY4OjExOSxGOToxMjAsRjEwOjEyMSxGMTE6MTIyLEYxMjoxMjMsRjEzOjEyNCxGMTQ6MTI1LEYxNToxMjYsRjE2OjEyNyxGMTc6MTI4LEYxODoxMjksRjE5OjEzMCxIT01FOjM2LElOU0VSVDo0NSxNRURJQV9ORVhUOjE3NixNRURJQV9QTEFZX1BB'@;
put 'VVNFOjE3OSxNRURJQV9QUkVWOjE3NyxNRURJQV9TVE9QOjE3OCxOVUxMOjAsTlVNX0xPQ0s6MTQ0LFBBR0VfRE9XTjozNCxQQUdFX1VQOjMzLFBBVVNFOjE5LFBFUklPRDoxOTAsU0NST0xMX0xPQ0s6MTQ1LFNISUZUOjE2LFNQQUNFOjMyLFRBQjo5LEE6NjUsQzo2NyxEOjY4LEY6NzAsTDo3'@;
put 'NixPOjc5LFA6ODAsUzo4MyxWOjg2LFg6ODgsWTo4OSxaOjkwfSxDT2U9W3VvLkFMVCx1by5BUlJPV19ET1dOLHVvLkFSUk9XX0xFRlQsdW8uQVJST1dfUklHSFQsdW8uQVJST1dfVVAsdW8uQVVESU9fRE9XTix1by5BVURJT19NVVRFLHVvLkFVRElPX1VQLHVvLkJBQ0tTUEFDRSx1by5DQVBT'@;
put 'X0xPQ0ssdW8uREVMRVRFLHVvLkVORCx1by5FTlRFUix1by5FU0NBUEUsdW8uRjEsdW8uRjIsdW8uRjMsdW8uRjQsdW8uRjUsdW8uRjYsdW8uRjcsdW8uRjgsdW8uRjksdW8uRjEwLHVvLkYxMSx1by5GMTIsdW8uRjEzLHVvLkYxNCx1by5GMTUsdW8uRjE2LHVvLkYxNyx1by5GMTgsdW8uRjE5'@;
put 'LHVvLkhPTUUsdW8uSU5TRVJULHVvLk1FRElBX05FWFQsdW8uTUVESUFfUExBWV9QQVVTRSx1by5NRURJQV9QUkVWLHVvLk1FRElBX1NUT1AsdW8uTlVMTCx1by5OVU1fTE9DSyx1by5QQUdFX0RPV04sdW8uUEFHRV9VUCx1by5QQVVTRSx1by5TQ1JPTExfTE9DSyx1by5TSElGVCx1by5UQUJd'@;
put 'O2Z1bmN0aW9uIHRvZShjKXtyZXR1cm4gMzI9PT1jfHxjPj00OCYmYzw9NTd8fGM+PTk2JiZjPD0xMTF8fGM+PTE4NiYmYzw9MTkyfHxjPj0yMTkmJmM8PTIyMnx8Yz49MjI2fHxjPj02NSYmYzw9OTB9ZnVuY3Rpb24gbmooYyl7cmV0dXJuIENPZS5pbmNsdWRlcyhjKX1mdW5jdGlvbiBTT2Uo'@;
put 'Yyl7Y29uc3QgbD1bXTtyZXR1cm4geFQoKT9sLnB1c2godW8uQ09NTUFORF9MRUZULHVvLkNPTU1BTkRfUklHSFQsdW8uQ09NTUFORF9GSVJFRk9YKTpsLnB1c2godW8uQ09OVFJPTCksbC5pbmNsdWRlcyhjKX1mdW5jdGlvbiBub2UoYyl7cmV0dXJuW3VvLkNPTlRST0wsdW8uQ09NTUFORF9M'@;
put 'RUZULHVvLkNPTU1BTkRfUklHSFQsdW8uQ09NTUFORF9GSVJFRk9YXS5pbmNsdWRlcyhjKX1mdW5jdGlvbiBoOShjLGwpe2NvbnN0IGE9bC5zcGxpdCgifCIpO2xldCBkPSExO3JldHVybiBSbihhLGg9PntpZihjPT09dW9baF0pcmV0dXJuIGQ9ITAsITF9KSxkfWZ1bmN0aW9uIHAyKGMpe2Mu'@;
put 'aXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWQ9ITEsYy5jYW5jZWxCdWJibGU9ITB9ZnVuY3Rpb24gamcoYyl7cmV0dXJuITE9PT1jLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25FbmFibGVkfWZ1bmN0aW9uIGltKGMpe3JldHVybiAyPT09Yy5idXR0b259ZnVuY3Rpb24ga1QoYyl7cmV0dXJu'@;
put 'IDA9PT1jLmJ1dHRvbn1mdW5jdGlvbiBibCgpe2VvKGNvbnNvbGUpJiZjb25zb2xlLndhcm4oLi4uYXJndW1lbnRzKX1mdW5jdGlvbiByaigpe2VvKGNvbnNvbGUpJiZjb25zb2xlLmVycm9yKC4uLmFyZ3VtZW50cyl9Y29uc3QgZjk9WyJhZnRlckNlbGxNZXRhUmVzZXQiLCJhZnRlckNoYW5n'@;
put 'ZSIsImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLCJhZnRlckNvbnRleHRNZW51SGlkZSIsImJlZm9yZUNvbnRleHRN'@;
put 'ZW51U2hvdyIsImFmdGVyQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb3B5TGltaXQiLCJiZWZvcmVDcmVhdGVDb2wiLCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIiwiYWZ0ZXJDcmVhdGVDb2wiLCJiZWZvcmVDcmVhdGVSb3ciLCJhZnRlckNyZWF0ZVJvdyIsImFmdGVyRGVzZWxlY3QiLCJh'@;
put 'ZnRlckRlc3Ryb3kiLCJhZnRlckRvY3VtZW50S2V5RG93biIsImFmdGVyRHJhd1NlbGVjdGlvbiIsImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiwiYWZ0ZXJHZXRDZWxsTWV0YSIsImFmdGVyR2V0Q29sSGVhZGVyIiwiYWZ0ZXJHZXRSb3dIZWFkZXIiLCJhZnRlckluaXQiLCJhZnRlckxv'@;
put 'YWREYXRhIiwiYWZ0ZXJVcGRhdGVEYXRhIiwiYWZ0ZXJNb21lbnR1bVNjcm9sbCIsImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsImFmdGVyT25DZWxsTW91c2VEb3duIiwiYWZ0ZXJPbkNlbGxNb3VzZVVwIiwiYWZ0ZXJPbkNlbGxDb250'@;
put 'ZXh0TWVudSIsImFmdGVyT25DZWxsTW91c2VPdmVyIiwiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsImFmdGVyUmVtb3ZlQ29sIiwiYWZ0ZXJSZW1vdmVSb3ciLCJiZWZvcmVSZW5kZXJlciIsImFmdGVyUmVuZGVyZXIiLCJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIiwiYWZ0ZXJTY3JvbGxIb3Jpem9u'@;
put 'dGFsbHkiLCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCJhZnRlclNlbGVjdGlvbiIsImFmdGVyU2VsZWN0aW9uQnlQcm9wIiwiYWZ0ZXJTZWxlY3Rpb25FbmQiLCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsImFmdGVyU2V0Q2VsbE1ldGEiLCJhZnRlclJlbW92ZUNlbGxNZXRhIiwiYWZ0ZXJT'@;
put 'ZXREYXRhQXRDZWxsIiwiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIiwiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiwiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIs'@;
put 'ImFmdGVyQXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxr'@;
put 'b250YWJsZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVP'@;
put 'bkNlbGxNb3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZpZXdSZW5kZXIiLCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVNldENlbGxNZXRhIiwiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLCJi'@;
put 'ZWZvcmVTZXRSYW5nZVN0YXJ0IiwiYmVmb3JlU2V0UmFuZ2VFbmQiLCJiZWZvcmVUb3VjaFNjcm9sbCIsImJlZm9yZVZhbGlkYXRlIiwiYmVmb3JlVmFsdWVSZW5kZXIiLCJjb25zdHJ1Y3QiLCJpbml0IiwibW9kaWZ5Q29sSGVhZGVyIiwibW9kaWZ5Q29sV2lkdGgiLCJtb2RpZnlSb3dIZWFk'@;
put 'ZXIiLCJtb2RpZnlSb3dIZWlnaHQiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNlRGF0YSIsIm1vZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVyc2lzdGVu'@;
put 'dFN0YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRvZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVm'@;
put 'b3JlQ29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZy'@;
put 'ZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJl'@;
put 'bmRlcmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLCJhZnRlclNoZWV0'@;
put 'QWRkZWQiLCJhZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVkIiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZvcmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRvIiwiYWZ0ZXJVbmRvU3RhY2tD'@;
put 'aGFuZ2UiLCJiZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IiwibW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zv'@;
put 'cm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0ZXJIaWRl'@;
put 'Um93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJhZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRlQ29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVDb2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5zIiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJlZm9yZVVu'@;
put 'dHJpbVJvdyIsImFmdGVyVW50cmltUm93IiwiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlkZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJBZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJEZXRhY2hD'@;
put 'aGlsZCIsImFmdGVyQmVnaW5FZGl0aW5nIiwiYmVmb3JlTWVyZ2VDZWxscyIsImFmdGVyTWVyZ2VDZWxscyIsImJlZm9yZVVubWVyZ2VDZWxscyIsImFmdGVyVW5tZXJnZUNlbGxzIiwiYWZ0ZXJMaXN0ZW4iLCJhZnRlclVubGlzdGVuIiwiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9y'@;
put 'ZVJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlQ29sdW1uQ29sbGFwc2UiLCJhZnRlckNvbHVtbkNvbGxhcHNlIiwiYmVmb3JlQ29sdW1uRXhwYW5kIiwiYWZ0ZXJDb2x1bW5FeHBhbmQiLCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiXSx4T2U9V2FgVGhlIHBsdWdpbiBob29rICJbaG9va05h'@;
put 'bWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQbGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0g'@;
put 'dG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmAsaWo9bmV3IE1hcChbWyJtb2RpZnlSb3ciLCI4LjAuMCJdLFsibW9kaWZ5Q29sIiwiOC4wLjAiXSxbInVubW9kaWZ5Um93IiwiOC4wLjAiXSxbInVubW9kaWZ5Q29sIiwiOC4wLjAiXSxbInNraXBMZW5ndGhDYWNoZSIs'@;
put 'IjguMC4wIl0sWyJoaWRkZW5Db2x1bW4iLCI4LjAuMCJdLFsiaGlkZGVuUm93IiwiOC4wLjAiXV0pLG9qPW5ldyBNYXAoW10pO2NsYXNzIHJvZXtzdGF0aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIEVPZSgpe3JldHVybiBrT2V9KCl9Y29uc3RydWN0b3IoKXt0aGlzLmdsb2Jh'@;
put 'bEJ1Y2tldD10aGlzLmNyZWF0ZUVtcHR5QnVja2V0KCl9Y3JlYXRlRW1wdHlCdWNrZXQoKXtjb25zdCBsPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIFJuKGY5LGE9PmxbYV09W10pLGx9Z2V0QnVja2V0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNb'@;
put 'MF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwucGx1Z2luSG9va0J1Y2tldD10aGlzLmNyZWF0ZUVtcHR5QnVja2V0KCkpLGwucGx1Z2luSG9va0J1Y2tldCk6dGhpcy5nbG9iYWxCdWNrZXR9YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7aWYoQXJyYXkuaXNBcnJheShhKSlSbihhLGg9PnRoaXMuYWRkKGwsaCxkKSk7ZWxzZXtpai5oYXMobCkmJmJsKHpWKHhPZSx7aG9va05hbWU6bCxyZW1vdmVkSW5WZXJzaW9uOmlqLmdldChsKX0pKSxvai5oYXMo'@;
put 'bCkmJmJsKG9qLmdldChsKSk7Y29uc3QgaD10aGlzLmdldEJ1Y2tldChkKTtpZih0eXBlb2YgaFtsXT4idSImJih0aGlzLnJlZ2lzdGVyKGwpLGhbbF09W10pLGEuc2tpcD0hMSwtMT09PWhbbF0uaW5kZXhPZihhKSl7bGV0IGY9ITE7YS5pbml0aWFsSG9vayYmUm4oaFtsXSwodixUKT0+e2lm'@;
put 'KHYuaW5pdGlhbEhvb2spcmV0dXJuIGhbbF1bVF09YSxmPSEwLCExfSksZnx8aFtsXS5wdXNoKGEpfX1yZXR1cm4gdGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7QXJyYXkuaXNBcnJheShhKT9S'@;
put 'bihhLGg9PnRoaXMub25jZShsLGgsZCkpOihhLnJ1bk9uY2U9ITAsdGhpcy5hZGQobCxhLGQpKX1yZW1vdmUobCxhKXtjb25zdCBoPXRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKTtyZXR1cm4gdHlwZW9m'@;
put 'IGhbbF08InUiJiZoW2xdLmluZGV4T2YoYSk+PTAmJihhLnNraXA9ITAsITApfWhhcyhsKXtjb25zdCBkPXRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKTtyZXR1cm4hKHZvaWQgMD09PWRbbF18fCFkW2xd'@;
put 'Lmxlbmd0aCl9cnVuKGwsYSxkLGgsZix2LFQsWSl7e2NvbnN0IHJlPXRoaXMuZ2xvYmFsQnVja2V0W2FdLGZlPXJlP3JlLmxlbmd0aDowO2xldCBfZT0wO2lmKGZlKWZvcig7X2U8ZmU7KXtpZighcmVbX2VdfHxyZVtfZV0uc2tpcCl7X2UrPTE7Y29udGludWV9Y29uc3Qga2U9YlQocmVbX2Vd'@;
put 'LGwsZCxoLGYsdixULFkpO3ZvaWQgMCE9PWtlJiYoZD1rZSkscmVbX2VdJiZyZVtfZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxyZVtfZV0pLF9lKz0xfX17Y29uc3QgcmU9dGhpcy5nZXRCdWNrZXQobClbYV0sZmU9cmU/cmUubGVuZ3RoOjA7bGV0IF9lPTA7aWYoZmUpZm9yKDtfZTxmZTsp'@;
put 'e2lmKCFyZVtfZV18fHJlW19lXS5za2lwKXtfZSs9MTtjb250aW51ZX1jb25zdCBrZT1iVChyZVtfZV0sbCxkLGgsZix2LFQsWSk7dm9pZCAwIT09a2UmJihkPWtlKSxyZVtfZV0mJnJlW19lXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLHJlW19lXSxsKSxfZSs9MX19cmV0dXJuIGR9ZGVzdHJv'@;
put 'eSgpe3lzKHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKSwoYSxkLGgpPT5oW2RdLmxlbmd0aD0wKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8ZjkucHVzaChsKX1kZXJlZ2lzdGVyKGwp'@;
put 'e3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZmOS5zcGxpY2UoZjkuaW5kZXhPZihsKSwxKX1pc0RlcHJlY2F0ZWQobCl7cmV0dXJuIG9qLmhhcyhsKXx8aWouaGFzKGwpfWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gZjkuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0dXJuIGY5fX1jb25z'@;
put 'dCBrT2U9bmV3IHJvZSxhbz1yb2Usc2o9bmV3IE1hcDtmdW5jdGlvbiBzaCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY29tbW9uIjtzai5oYXMoYyl8fHNqLnNldChjLG5ldyBNYXApO2NvbnN0IGw9c2ouZ2V0KGMpO3Jl'@;
put 'dHVybntyZWdpc3RlcjpmdW5jdGlvbiBhKFQsWSl7bC5zZXQoVCxZKX0sZ2V0SXRlbTpmdW5jdGlvbiBkKFQpe3JldHVybiBsLmdldChUKX0saGFzSXRlbTpmdW5jdGlvbiBoKFQpe3JldHVybiBsLmhhcyhUKX0sZ2V0TmFtZXM6ZnVuY3Rpb24gZigpe3JldHVyblsuLi5sLmtleXMoKV19LGdl'@;
put 'dFZhbHVlczpmdW5jdGlvbiB2KCl7cmV0dXJuWy4uLmwudmFsdWVzKCldfX19Y29uc3QgYWo9bmV3IFdlYWtNYXAse3JlZ2lzdGVyOlRPZSxnZXRJdGVtOmlvZSxoYXNJdGVtOm9vZSxnZXROYW1lczpET2V9PXNoKCJlZGl0b3JzIik7ZnVuY3Rpb24gQU9lKGMpe2NvbnN0IGw9e30sYT1jO3Ro'@;
put 'aXMuZ2V0Q29uc3RydWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gY30sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbihkKXtyZXR1cm4gZC5ndWlkIGluIGx8fChsW2QuZ3VpZF09bmV3IGEoZCkpLGxbZC5ndWlkXX0sYW8uZ2V0U2luZ2xldG9uKCkuYWRkKCJhZnRlckRlc3Ryb3kiLGZ1bmN0aW9u'@;
put 'KCl7bFt0aGlzLmd1aWRdPW51bGx9KX1mdW5jdGlvbiBzb2UoYyxsKXtsZXQgYTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYylhai5nZXQoYyl8fGIxKG51bGwsYyksYT1hai5nZXQoYyk7ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGMpdGhyb3cgRXJyb3IoJ09ubHkgc3RyaW5ncyBhbmQgZnVu'@;
put 'Y3Rpb25zIGNhbiBiZSBwYXNzZWQgYXMgImVkaXRvciIgcGFyYW1ldGVyJyk7YT1pb2UoYyl9aWYoIWEpdGhyb3cgRXJyb3IoYE5vIGVkaXRvciByZWdpc3RlcmVkIHVuZGVyIG5hbWUgIiR7Y30iYCk7cmV0dXJuIGEuZ2V0SW5zdGFuY2UobCl9ZnVuY3Rpb24gRVQoYyl7aWYoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIW9vZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCBlZGl0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gaW9lKGMpLmdldENvbnN0cnVjdG9yKCl9ZnVuY3Rpb24gYjEoYyxsKXtjJiYic3RyaW5nIiE9dHlwZW9mIGMmJihj'@;
put 'PShsPWMpLkVESVRPUl9UWVBFKTtjb25zdCBhPW5ldyBBT2UobCk7InN0cmluZyI9PXR5cGVvZiBjJiZUT2UoYyxhKSxhai5zZXQobCxhKX1sZXQgVFQ9MDtjb25zdCBqbD1jbGFzcyBMT2V7Y29uc3RydWN0b3IoKXt0aGlzLmNvbnRleHQ9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsKXx8dGhpcyx0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnM9W10pfWFkZEV2ZW50TGlzdGVuZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzNdJiZhcmd1bWVudHNbM107ZnVuY3Rpb24gZih2KXtkLmNhbGwodGhpcyxmdW5jdGlvbiBJT2UoYyl7Y29uc3QgbD1jLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjtyZXR1cm4gYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtsLmFwcGx5KHRoaXMpLHAyKHRoaXMp'@;
put 'fSxjfSh2KSl9cmV0dXJuIHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5wdXNoKHtlbGVtZW50OmwsZXZlbnQ6YSxjYWxsYmFjazpkLGNhbGxiYWNrUHJveHk6ZixvcHRpb25zOmgsZXZlbnRNYW5hZ2VyOnRoaXN9KSxsLmFkZEV2ZW50TGlzdGVuZXIoYSxmLGgpLFRUKz0xLCgpPT57dGhp'@;
put 'cy5yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKX19cmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IHYsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdLGY9dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLmxlbmd0aDtmb3IoO2Y7'@;
put 'KWlmKGYtPTEsdj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbZl0sdi5ldmVudD09PWEmJnYuZWxlbWVudD09PWwpe2lmKGQmJmQhPT12LmNhbGxiYWNrfHxoJiZ2LmV2ZW50TWFuYWdlciE9PXRoaXMpY29udGludWU7dGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShmLDEp'@;
put 'LHYuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHYuZXZlbnQsdi5jYWxsYmFja1Byb3h5LHYub3B0aW9ucyksVFQtPTF9fWNsZWFyRXZlbnRzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZighdGhpcy5jb250ZXh0'@;
put 'KXJldHVybjtsZXQgYT10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7YTspe2EtPTE7Y29uc3QgZD10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnNbYV07bCYmZC5ldmVudE1hbmFnZXIhPT10aGlzfHwodGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnNwbGljZShh'@;
put 'LDEpLGQuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGQuZXZlbnQsZC5jYWxsYmFja1Byb3h5LGQub3B0aW9ucyksVFQtPTEpfX1jbGVhcigpe3RoaXMuY2xlYXJFdmVudHMoKX1kZXN0cm95KCl7dGhpcy5jbGVhckV2ZW50cygpLHRoaXMuY29udGV4dD1udWxsfWRlc3Ryb3lXaXRoT3du'@;
put 'RXZlbnRzT25seSgpe3RoaXMuY2xlYXJFdmVudHMoITApLHRoaXMuY29udGV4dD1udWxsfWZpcmVFdmVudChsLGEpe2xldCBkPWwuZG9jdW1lbnQsaD1sO2R8fChkPWwub3duZXJEb2N1bWVudD9sLm93bmVyRG9jdW1lbnQ6bCxoPWQuZGVmYXVsdFZpZXcpO2NvbnN0IGY9e2J1YmJsZXM6ITAs'@;
put 'Y2FuY2VsYWJsZToibW91c2Vtb3ZlIiE9PWEsdmlldzpoLGRldGFpbDowLHNjcmVlblg6MCxzY3JlZW5ZOjAsY2xpZW50WDoxLGNsaWVudFk6MSxjdHJsS2V5OiExLGFsdEtleTohMSxzaGlmdEtleTohMSxtZXRhS2V5OiExLGJ1dHRvbjowLHJlbGF0ZWRUYXJnZXQ6dm9pZCAwfTtsZXQgdjtk'@;
put 'LmNyZWF0ZUV2ZW50Pyh2PWQuY3JlYXRlRXZlbnQoIk1vdXNlRXZlbnRzIiksdi5pbml0TW91c2VFdmVudChhLGYuYnViYmxlcyxmLmNhbmNlbGFibGUsZi52aWV3LGYuZGV0YWlsLGYuc2NyZWVuWCxmLnNjcmVlblksZi5jbGllbnRYLGYuY2xpZW50WSxmLmN0cmxLZXksZi5hbHRLZXksZi5z'@;
put 'aGlmdEtleSxmLm1ldGFLZXksZi5idXR0b24sZi5yZWxhdGVkVGFyZ2V0fHxkLmJvZHkucGFyZW50Tm9kZSkpOnY9ZC5jcmVhdGVFdmVudE9iamVjdCgpLGwuZGlzcGF0Y2hFdmVudD9sLmRpc3BhdGNoRXZlbnQodik6bC5maXJlRXZlbnQoYG9uJHthfWAsdil9fSxEVD0iZWRpdG9yTWFuYWdl'@;
put 'ci5uYXZpZ2F0aW9uIixtdz0iZWRpdG9yTWFuYWdlci5oYW5kbGluZ0VkaXRvciI7Y2xhc3MgbGp7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuaW5zdGFuY2U9bCx0aGlzLnRhYmxlTWV0YT1hLHRoaXMuc2VsZWN0aW9uPWQsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGpsKGwpLHRoaXMuZGVzdHJv'@;
put 'eWVkPSExLHRoaXMubG9jaz0hMSx0aGlzLmFjdGl2ZUVkaXRvcj12b2lkIDAsdGhpcy5jZWxsUHJvcGVydGllcz12b2lkIDAsdGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5pbnN0YW5j'@;
put 'ZS5hZGRIb29rKCJhZnRlckRvY3VtZW50S2V5RG93biIsZj0+dGhpcy5vbkFmdGVyRG9jdW1lbnRLZXlEb3duKGYpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaW5zdGFuY2Uucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCwiY29tcG9zaXRpb25zdGFydCIs'@;
put 'Zj0+eyF0aGlzLmRlc3Ryb3llZCYmdGhpcy5pbnN0YW5jZS5pc0xpc3RlbmluZygpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsZil9KSx0aGlzLmluc3RhbmNlLnZpZXcuX3d0LnVwZGF0ZSgib25DZWxsRGJsQ2xpY2siLChmLHYsVCk9PnRoaXMub25DZWxsRGJsQ2xpY2soZix2LFQpKX1yZWdpc3Rl'@;
put 'clNob3J0Y3V0cygpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5nZXRTaG9ydGN1dE1hbmFnZXIoKSxhPWwuZ2V0Q29udGV4dCgiZ3JpZCIpLGQ9bC5nZXRDb250ZXh0KCJlZGl0b3IiKSxoPXtncm91cDptd307ZC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0'@;
put 'Il0sWyJFbnRlciIsIkNvbnRyb2wvTWV0YSJdLFsiRW50ZXIiLCJDb250cm9sL01ldGEiLCJTaGlmdCJdXSxjYWxsYmFjazooZix2KT0+e3RoaXMuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsLmlzQ3RybFByZXNzZWQoKSksdGhpcy5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcih2LmluY2x1'@;
put 'ZGVzKCJzaGlmdCIpKX19LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT57dGhpcy5jbG9zZUVkaXRvckFuZFJlc3RvcmVPcmlnaW5hbFZhbHVlKGwuaXNDdHJsUHJlc3NlZCgpKSx0aGlzLmFjdGl2ZUVkaXRvci5mb2N1cygpfX1dLGgp'@;
put 'LGEuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJGMiJdXSxjYWxsYmFjazpmPT57dGhpcy5vcGVuRWRpdG9yKG51bGwsZiwhMCl9fSx7a2V5czpbWyJCYWNrc3BhY2UiXSxbIkRlbGV0ZSJdXSxjYWxsYmFjazooKT0+e3RoaXMuaW5zdGFuY2UuZW1wdHlTZWxlY3RlZENlbGxzKCksdGhpcy5wcmVw'@;
put 'YXJlRWRpdG9yKCl9fSx7a2V5czpbWyJFbnRlciJdLFsiRW50ZXIiLCJTaGlmdCJdXSxjYWxsYmFjazooZix2KT0+e3RoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmc/dGhpcy5jZWxsUHJvcGVydGllcy5yZWFkT25seT90aGlzLm1vdmVTZWxlY3Rpb25BZnRl'@;
put 'ckVudGVyKCk6dGhpcy5vcGVuRWRpdG9yKG51bGwsZiwhMCk6dGhpcy5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcih2LmluY2x1ZGVzKCJzaGlmdCIpKSxwMihmKX19XSx7Li4uaCxydW5Pbmx5SWY6KCk9PmVvKHRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSl9KX1sb2NrRWRpdG9yKCl7dGhp'@;
put 'cy5sb2NrPSEwfXVubG9ja0VkaXRvcigpe3RoaXMubG9jaz0hMX1kZXN0cm95RWRpdG9yKGwpe3RoaXMubG9ja3x8dGhpcy5jbG9zZUVkaXRvcihsKX1nZXRBY3RpdmVFZGl0b3IoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3J9cHJlcGFyZUVkaXRvcigpe2lmKHRoaXMubG9jaylyZXR1cm47'@;
put 'aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsWT0+e1kmJnRoaXMucHJlcGFyZUVkaXRvcigpfSk7Y29uc3R7cm93OmwsY29sOmF9PXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZUxhc3QoKS5oaWdobGlnaHQsZD10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixsLGEpO2xldCBoPWwsZj1hO0FycmF5LmlzQXJyYXkoZCkmJihbaCxmXT1kKSx0aGlzLmNlbGxQcm9wZXJ0aWVzPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbE1ldGEoaCxmKTtjb25z'@;
put 'dHthY3RpdmVFbGVtZW50OnZ9PXRoaXMuaW5zdGFuY2Uucm9vdERvY3VtZW50O2lmKHYmJnlUKHYpJiZ2LmJsdXIoKSwhdGhpcy5pc0NlbGxFZGl0YWJsZSgpKXJldHVybiB2b2lkIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKTtjb25zdCBUPXRoaXMuaW5zdGFuY2UuZ2V0Q2VsbChsLGEsITAp'@;
put 'O2lmKFQpe2NvbnN0IFk9dGhpcy5pbnN0YW5jZS5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHJlPXRoaXMuaW5zdGFuY2UuY29sVG9Qcm9wKGYpLGZlPXRoaXMuaW5zdGFuY2UuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coaCksZik7'@;
put 'dGhpcy5hY3RpdmVFZGl0b3I9c29lKFksdGhpcy5pbnN0YW5jZSksdGhpcy5hY3RpdmVFZGl0b3IucHJlcGFyZShsLGEscmUsVCxmZSx0aGlzLmNlbGxQcm9wZXJ0aWVzKX19aXNFZGl0b3JPcGVuZWQoKXtyZXR1cm4gdGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMuYWN0aXZlRWRpdG9yLmlzT3Bl'@;
put 'bmVkKCl9b3BlbkVkaXRvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aWYodGhpcy5pc0NlbGxFZGl0YWJsZSgpKXtpZighdGhpcy5hY3RpdmVFZGl0b3Ipe2NvbnN0e3JvdzpoLGNvbDpmfT10aGlzLmluc3RhbmNl'@;
put 'LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LHY9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLFQ9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO3Ro'@;
put 'aXMuaW5zdGFuY2Uudmlldy5zY3JvbGxWaWV3cG9ydCh0aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKHYsVCkpLHRoaXMuaW5zdGFuY2Uudmlldy5yZW5kZXIoKSx0aGlzLnByZXBhcmVFZGl0b3IoKX10aGlzLmFjdGl2ZUVkaXRvciYmKGQmJnRoaXMuYWN0aXZlRWRpdG9yLmVuYWJs'@;
put 'ZUZ1bGxFZGl0TW9kZSgpLHRoaXMuYWN0aXZlRWRpdG9yLmJlZ2luRWRpdGluZyhsLGEpKX1lbHNlIHRoaXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRpdGluZyhsLGEsZCk6ZCYmZCgh'@;
put 'MSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsKXt0aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3NlRWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMH1pc0Nl'@;
put 'bGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5pbnN0YW5jZS5nZXRDZWxsRWRpdG9yKHRoaXMuY2VsbFByb3BlcnRpZXMpLHtyb3c6YSxjb2w6ZH09dGhpcy5pbnN0YW5jZS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodCx7cm93SW5kZXhNYXBwZXI6aCxjb2x1bW5JbmRleE1hcHBl'@;
put 'cjpmfT10aGlzLmluc3RhbmNlLHY9aC5pc0hpZGRlbih0aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coYSkpfHxmLmlzSGlkZGVuKHRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihkKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5fHwhbHx8dil9bW92ZVNlbGVj'@;
put 'dGlvbkFmdGVyRW50ZXIobCl7Y29uc3QgYT0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy50YWJsZU1ldGEuZW50ZXJNb3Zlcz90aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzKGV2ZW50KTp0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzO2w/dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLWEu'@;
put 'cm93LC1hLmNvbCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5yb3csYS5jb2wsITApfW9uQWZ0ZXJEb2N1bWVudEtleURvd24obCl7aWYoIXRoaXMuaW5zdGFuY2UuaXNMaXN0ZW5pbmcoKSlyZXR1cm47Y29uc3R7a2V5Q29kZTphfT1sO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1Nl'@;
put 'bGVjdGVkKCkpcmV0dXJuO2NvbnN0IGQ9KGwuY3RybEtleXx8bC5tZXRhS2V5KSYmIWwuYWx0S2V5O3RoaXMuYWN0aXZlRWRpdG9yJiYoIXRoaXMuYWN0aXZlRWRpdG9yfHx0aGlzLmFjdGl2ZUVkaXRvci5pc1dhaXRpbmcoKSl8fG5qKGEpfHxub2UoYSl8fGR8fHRoaXMuaXNFZGl0b3JPcGVu'@;
put 'ZWQoKXx8KHRoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJBcnJvd1VwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLTEsMCl9fSx7a2V5czpb'@;
put 'WyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoMCwtMSp0aGlzLmluc3Rh'@;
put 'bmNlLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93UmlnaHQiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLHRoaXMuaW5zdGFuY2UuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX1dLHtydW5Pbmx5SWY6KCk9PmVvKHRo'@;
put 'aXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6RFR9KSx0aGlzLm9wZW5FZGl0b3IoIiIsbCkpfW9uQ2VsbERibENsaWNrKGwsYSxkKXsiVEQiPT09ZC5ub2RlTmFtZSYmdGhpcy5vcGVuRWRpdG9yKG51bGwsbCwhMCl9ZGVzdHJveSgpe3RoaXMuZGVzdHJveWVkPSEwLHRoaXMuZXZl'@;
put 'bnRNYW5hZ2VyLmRlc3Ryb3koKX19Y29uc3QgYW9lPW5ldyBXZWFrTWFwO2xqLmdldEluc3RhbmNlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1hb2UuZ2V0KGMpO3JldHVybiBkfHwoZD1uZXcgbGooYyxsLGEpLGFvZS5zZXQoYyxkKSksZH07Y29uc3QgT09lPWxqLGxvZT17IiZuYnNwOyI6IiAi'@;
put 'LCImYW1wOyI6IiYiLCImbHQ7IjoiPCIsIiZndDsiOiI+In0sUE9lPW5ldyBSZWdFeHAoT2JqZWN0LmtleXMobG9lKS5tYXAoYz0+YCgke2N9KWApLmpvaW4oInwiKSwiZ2kiKTtmdW5jdGlvbiBjaihjKXtjb25zdCBsPWMuaGFzQ29sSGVhZGVycygpLGE9Yy5oYXNSb3dIZWFkZXJzKCksZD1b'@;
put 'bD8tMTowLGE/LTE6MCxjLmNvdW50Um93cygpLTEsYy5jb3VudENvbHMoKS0xXSxoPWMuZ2V0RGF0YSguLi5kKSxmPWgubGVuZ3RoLHY9Zj4wP2hbMF0ubGVuZ3RoOjAsVD1bIjx0YWJsZT4iLCI8L3RhYmxlPiJdLFk9bD9bIjx0aGVhZD4iLCI8L3RoZWFkPiJdOltdLHJlPVsiPHRib2R5PiIs'@;
put 'IjwvdGJvZHk+Il0sZmU9YT8xOjAsX2U9bD8xOjA7Zm9yKGxldCBrZT0wO2tlPGY7a2UrPTEpe2NvbnN0IFdlPWwmJjA9PT1rZSxKZT1bXTtmb3IobGV0IHl0PTA7eXQ8djt5dCs9MSl7Y29uc3Qgd3Q9IVdlJiZhJiYwPT09eXQ7bGV0IEx0PSIiO2lmKFdlKUx0PWA8dGg+JHtjLmdldENvbEhl'@;
put 'YWRlcih5dC1mZSl9PC90aD5gO2Vsc2UgaWYod3QpTHQ9YDx0aD4ke2MuZ2V0Um93SGVhZGVyKGtlLV9lKX08L3RoPmA7ZWxzZXtjb25zdCBvbj1oW2tlXVt5dF0se2hpZGRlbjpzbixyb3dzcGFuOk1uLGNvbHNwYW46Vm59PWMuZ2V0Q2VsbE1ldGEoa2UtX2UseXQtZmUpO2lmKCFzbil7Y29u'@;
put 'c3QgdXI9W107aWYoTW4mJnVyLnB1c2goYHJvd3NwYW49IiR7TW59ImApLFZuJiZ1ci5wdXNoKGBjb2xzcGFuPSIke1ZufSJgKSxxYyhvbikpTHQ9YDx0ZCAke3VyLmpvaW4oIiAiKX0+PC90ZD5gO2Vsc2V7Y29uc3QgVHI9b24udG9TdHJpbmcoKS5yZXBsYWNlKCI8IiwiJmx0OyIpLnJlcGxh'@;
put 'Y2UoIj4iLCImZ3Q7IikucmVwbGFjZSgvKDxicihccyp8XC8pPihcclxufFxuKT98XHJcbnxcbikvZywiPGJyPlxyXG4iKS5yZXBsYWNlKC9ceDIwL2dpLCImbmJzcDsiKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO0x0PWA8dGQgJHt1ci5qb2luKCIgIil9PiR7VHJ9PC90ZD5gfX19SmUucHVz'@;
put 'aChMdCl9Y29uc3QgdHQ9WyI8dHI+IiwuLi5KZSwiPC90cj4iXS5qb2luKCIiKTtXZT9ZLnNwbGljZSgxLDAsdHQpOnJlLnNwbGljZSgtMSwwLHR0KX1yZXR1cm4gVC5zcGxpY2UoMSwwLFkuam9pbigiIikscmUuam9pbigiIikpLFQuam9pbigiIil9ZnVuY3Rpb24gdWooYyl7Y29uc3QgbD1j'@;
put 'Lmxlbmd0aCxhPVsiPHRhYmxlPiJdO2ZvcihsZXQgZD0wO2Q8bDtkKz0xKXtjb25zdCBoPWNbZF0sZj1oLmxlbmd0aCx2PVtdOzA9PT1kJiZhLnB1c2goIjx0Ym9keT4iKTtmb3IobGV0IFQ9MDtUPGY7VCs9MSl7Y29uc3QgWT1oW1RdLHJlPXFjKFkpPyIiOlkudG9TdHJpbmcoKS5yZXBsYWNl'@;
put 'KC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLGZlPT5gPHNwYW4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4keyImbmJzcDsiLnJlcGVh'@;
put 'dChmZS5sZW5ndGgtMSl9IDwvc3Bhbj5gKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO3YucHVzaChgPHRkPiR7cmV9PC90ZD5gKX1hLnB1c2goIjx0cj4iLC4uLnYsIjwvdHI+IiksZCsxPT09bCYmYS5wdXNoKCI8L3Rib2R5PiIpfXJldHVybiBhLnB1c2goIjwvdGFibGU+IiksYS5qb2luKCIi'@;
put 'KX1mdW5jdGlvbiBjb2UoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRvY3VtZW50O2NvbnN0IGE9e30sZD1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZC5hcHBlbmRDaGls'@;
put 'ZChoKTtsZXQgZj1jO2lmKCJzdHJpbmciPT10eXBlb2YgZil7Y29uc3Qgb249Zi5yZXBsYWNlKC88dGRcYltePl0qPz4oW1xzXFNdKj8pPFwvXHMqdGQ+L2csc249Pntjb25zdCBNbj1zbi5tYXRjaCgvPHRkXGJbXj5dKj8+L2cpWzBdO3JldHVybmAke01ufSR7c24uc3Vic3RyaW5nKE1uLmxl'@;
put 'bmd0aCxzbi5sYXN0SW5kZXhPZigiPCIpKS5yZXBsYWNlKC8oPCg/IWJyKShbXj5dKyk+KS9naSwiIil9PC90ZD5gfSk7aC5pbnNlcnRBZGphY2VudEhUTUwoImFmdGVyYmVnaW4iLGAke29ufWApLGY9aC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpfWlmKCFmfHwhZnVuY3Rpb24gRk9lKGMpe3Jl'@;
put 'dHVybiJUQUJMRSI9PT0oYyYmYy5ub2RlTmFtZXx8IiIpfShmKSlyZXR1cm47Y29uc3Qgdj1oLnF1ZXJ5U2VsZWN0b3IoJ21ldGFbbmFtZSQ9ImVuZXJhdG9yIl0nKSxUPW51bGwhPT1mLnF1ZXJ5U2VsZWN0b3IoInRib2R5IHRoIiksWT1mLnF1ZXJ5U2VsZWN0b3IoInRyIikscmU9WT9BcnJh'@;
put 'eS5mcm9tKFkuY2VsbHMpLnJlZHVjZSgob24sc24pPT5vbitzbi5jb2xTcGFuLDApLShUPzE6MCk6MCxmZT1mLnRGb290JiZBcnJheS5mcm9tKGYudEZvb3Qucm93cyl8fFtdLF9lPVtdO2xldCBrZT0hMSxXZT0wLEplPTA7aWYoZi50SGVhZCl7Y29uc3Qgb249QXJyYXkuZnJvbShmLnRIZWFk'@;
put 'LnJvd3MpLmZpbHRlcihzbj0+e2NvbnN0IE1uPW51bGwhPT1zbi5xdWVyeVNlbGVjdG9yKCJ0ZCIpO3JldHVybiBNbiYmX2UucHVzaChzbiksIU1ufSk7V2U9b24ubGVuZ3RoLGtlPVdlPjAsV2U+MT9hLm5lc3RlZEhlYWRlcnM9QXJyYXkuZnJvbShvbikucmVkdWNlKChzbixNbik9Pntjb25z'@;
put 'dCBWbj1BcnJheS5mcm9tKE1uLmNlbGxzKS5yZWR1Y2UoKHVyLFRyLFBpKT0+e2lmKFQmJjA9PT1QaSlyZXR1cm4gdXI7Y29uc3R7Y29sU3BhbjpIaSxpbm5lckhUTUw6d3J9PVRyO3JldHVybiB1ci5wdXNoKEhpPjE/e2xhYmVsOndyLGNvbHNwYW46SGl9OndyKSx1cn0sW10pO3JldHVybiBz'@;
put 'bi5wdXNoKFZuKSxzbn0sW10pOmtlJiYoYS5jb2xIZWFkZXJzPUFycmF5LmZyb20ob25bMF0uY2hpbGRyZW4pLnJlZHVjZSgoc24sTW4sVm4pPT4oVCYmMD09PVZufHxzbi5wdXNoKE1uLmlubmVySFRNTCksc24pLFtdKSl9X2UubGVuZ3RoJiYoYS5maXhlZFJvd3NUb3A9X2UubGVuZ3RoKSxm'@;
put 'ZS5sZW5ndGgmJihhLmZpeGVkUm93c0JvdHRvbT1mZS5sZW5ndGgpO2NvbnN0IHR0PVsuLi5fZSwuLi5BcnJheS5mcm9tKGYudEJvZGllcykucmVkdWNlKChvbixzbik9Pihvbi5wdXNoKC4uLkFycmF5LmZyb20oc24ucm93cykpLG9uKSxbXSksLi4uZmVdO0plPXR0Lmxlbmd0aDtjb25zdCB5'@;
put 'dD1uZXcgQXJyYXkoSmUpO2ZvcihsZXQgb249MDtvbjxKZTtvbisrKXl0W29uXT1uZXcgQXJyYXkocmUpO2NvbnN0IHd0PVtdLEx0PVtdO2ZvcihsZXQgb249MDtvbjxKZTtvbisrKXtjb25zdCBNbj1BcnJheS5mcm9tKHR0W29uXS5jZWxscyksVm49TW4ubGVuZ3RoO2ZvcihsZXQgdXI9MDt1'@;
put 'cjxWbjt1cisrKXtjb25zdCBUcj1Nblt1cl0se25vZGVOYW1lOlBpLGlubmVySFRNTDpIaSxyb3dTcGFuOndyLGNvbFNwYW46YWl9PVRyLHRpPXl0W29uXS5maW5kSW5kZXgoam49PnZvaWQgMD09PWpuKTtpZigiVEQiPT09UGkpe2lmKHdyPjF8fGFpPjEpe2ZvcihsZXQgRHI9b247RHI8b24r'@;
put 'd3I7RHIrKylpZihEcjxKZSlmb3IobGV0IEVyPXRpO0VyPHRpK2FpO0VyKyspeXRbRHJdW0VyXT1udWxsO2NvbnN0IFVyPVRyLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtVciYmVXIuaW5jbHVkZXMoIm1zby1pZ25vcmU6Y29sc3BhbiIpfHx3dC5wdXNoKHtjb2w6dGkscm93Om9uLHJvd3NwYW46'@;
put 'd3IsY29sc3BhbjphaX0pfWxldCBqbj0iIjtqbj12JiYvZXhjZWwvZ2kudGVzdCh2LmNvbnRlbnQpP0hpLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMqfFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6SGkucmVwbGFjZSgvPGJyKFxz'@;
put 'KnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSx5dFtvbl1bdGldPWpuLnJlcGxhY2UoUE9lLFVyPT5sb2VbVXJdKX1lbHNlIEx0LnB1c2goSGkpfX1yZXR1cm4gd3QubGVuZ3RoJiYoYS5tZXJnZUNlbGxzPXd0KSxMdC5sZW5ndGgmJihhLnJvd0hlYWRlcnM9THQpLHl0Lmxlbmd0aCYmKGEuZGF0'@;
put 'YT15dCksYX1mdW5jdGlvbiBSMChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT10eXBlb2YgYztpZigibnVtYmVyIj09PWEpcmV0dXJuIWlzTmFOKGMpJiZpc0Zpbml0ZShjKTtpZigic3RyaW5nIj09PWEp'@;
put 'e2lmKDA9PT1jLmxlbmd0aClyZXR1cm4hMTtpZigxPT09Yy5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KGMpO2NvbnN0IGQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4ubF0pKS5tYXAoaD0+YFxcJHtofWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/XFxzKigoKCR7ZH0p'@;
put 'P1xcZCsoKCR7ZH0pXFxkKyk/KGVbKy1dP1xcZCspPyl8KDB4W2EtZlxcZF0rKSkkYCwiaSIpLnRlc3QoYy50cmltKCkpfXJldHVybiJvYmplY3QiPT09YSYmISghY3x8Im51bWJlciIhPXR5cGVvZiBjLnZhbHVlT2YoKXx8YyBpbnN0YW5jZW9mIERhdGUpfWZ1bmN0aW9uIHVvZShjKXtyZXR1'@;
put 'cm4gUjAoYyxbIiwiXSl9ZnVuY3Rpb24gTW8oYyxsLGEpe2xldCBkPS0xO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbD8oYT1sLGw9Yyk6ZD1jLTE7KytkPD1sJiYhMSE9PWEoZCk7KTt9ZnVuY3Rpb24gQVQoYyxsLGEpe2xldCBkPWMrMTtmb3IoImZ1bmN0aW9uIj09dHlwZW9mIGwmJihhPWws'@;
put 'bD0wKTstLWQ+PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBkaihjLGwpe3JldHVybiBsPXBhcnNlSW50KGwudG9TdHJpbmcoKS5yZXBsYWNlKCIlIiwiIiksMTApLGw9aXNOYU4obCk/MDpsLHBhcnNlSW50KGMqbC8xMDAsMTApfWNvbnN0IGRvZT1uZXcgTWFwKFtbImFzYyIsWy0xLDFdXSxb'@;
put 'ImRlc2MiLFsxLC0xXV1dKSxOT2U9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIG1hcC5gLFZPZT1jPT5gVGhlIHByaW9yaXR5ICcke2N9JyBpcyBub3QgYSBudW1iZXIuYCxCT2U9Yz0+YFRoZSBpZCAnJHtjfScgaXMgYWxyZWFkeSBkZWNsYXJlZCBp'@;
put 'biBhIG1hcC5gO2Z1bmN0aW9uIExUKCl7bGV0e2Vycm9ySWRFeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2NvbnN0IGw9bmV3IE1hcDtmdW5jdGlvbiBUKCl7cmV0dXJuWy4uLmxdfWZ1bmN0aW9uIFkocmUpe3JldHVy'@;
put 'biBsLmhhcyhyZSl9cmV0dXJuIGM9b2woYyk/YzpCT2Use2FkZEl0ZW06ZnVuY3Rpb24gYShyZSxmZSl7aWYoWShyZSkpdGhyb3cgbmV3IEVycm9yKGMocmUpKTtsLnNldChyZSxmZSl9LGNsZWFyOmZ1bmN0aW9uIGgoKXtsLmNsZWFyKCl9LGdldElkOmZ1bmN0aW9uIGYocmUpe2NvbnN0W2Zl'@;
put 'XT1UKCkuZmluZChfZT0+e2xldFtrZSxXZV09X2U7cmV0dXJuIHJlPT09V2UmJmtlfSl8fFtudWxsXTtyZXR1cm4gZmV9LGdldEl0ZW06ZnVuY3Rpb24gdihyZSl7cmV0dXJuIGwuZ2V0KHJlKX0sZ2V0SXRlbXM6VCxoYXNJdGVtOlkscmVtb3ZlSXRlbTpmdW5jdGlvbiBkKHJlKXtyZXR1cm4g'@;
put 'bC5kZWxldGUocmUpfX19Y29uc3QgWU9lPWM9PmAnJHtjfScgdmFsdWUgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiBhIHVuaXF1ZSBzZXQuYCxmaj1jPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkICIke2N9IiBwbHVnaW4uYCxob2U9ZnVuY3Rpb24gak9lKCl7bGV0e2Vycm9yUHJpb3Jp'@;
put 'dHlFeGlzdHM6YyxlcnJvclByaW9yaXR5TmFOOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBhPW5ldyBNYXA7cmV0dXJuIGM9b2woYyk/YzpOT2UsbD1vbChsKT9sOlZPZSx7YWRkSXRlbTpmdW5jdGlvbiBkKGYsdil7'@;
put 'aWYoIVIwKGYpKXRocm93IG5ldyBFcnJvcihsKGYpKTtpZihhLmhhcyhmKSl0aHJvdyBuZXcgRXJyb3IoYyhmKSk7YS5zZXQoZix2KX0sZ2V0SXRlbXM6ZnVuY3Rpb24gaCgpe2xldCBmPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiYXNj'@;
put 'Ijtjb25zdFt2LFRdPWRvZS5nZXQoZil8fGRvZS5nZXQoImFzYyIpO3JldHVyblsuLi5hXS5zb3J0KChZLHJlKT0+WVswXTxyZVswXT92OlQpLm1hcChZPT5ZWzFdKX19fSh7ZXJyb3JQcmlvcml0eUV4aXN0czpjPT5gVGhlcmUgaXMgYWxyZWFkeSByZWdpc3RlcmVkIHBsdWdpbiBvbiBwcmlv'@;
put 'cml0eSAiJHtjfSIuYCxlcnJvclByaW9yaXR5TmFOOmM9PmBUaGUgcHJpb3JpdHkgIiR7Y30iIGlzIG5vdCBhIG51bWJlci5gfSksZm9lPWZ1bmN0aW9uIHpPZSgpe2xldHtlcnJvckl0ZW1FeGlzdHM6Y309YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1l'@;
put 'bnRzWzBdOnt9O2NvbnN0IGw9bmV3IFNldDtyZXR1cm4gYz1vbChjKT9jOllPZSx7YWRkSXRlbTpmdW5jdGlvbiBhKGYpe2lmKGwuaGFzKGYpKXRocm93IG5ldyBFcnJvcihjKGYpKTtsLmFkZChmKX0sY2xlYXI6ZnVuY3Rpb24gaCgpe2wuY2xlYXIoKX0sZ2V0SXRlbXM6ZnVuY3Rpb24gZCgp'@;
put 'e3JldHVyblsuLi5sXX19fSh7ZXJyb3JJdGVtRXhpc3RzOmZqfSkscGo9TFQoe2Vycm9ySWRFeGlzdHM6Zmp9KTtmdW5jdGlvbiBtaigpe3JldHVyblsuLi5ob2UuZ2V0SXRlbXMoKSwuLi5mb2UuZ2V0SXRlbXMoKV19ZnVuY3Rpb24gZ3coYyl7Y29uc3QgbD1hMChjKTtyZXR1cm4gcGouZ2V0'@;
put 'SXRlbShsKX1mdW5jdGlvbiBKcyhjLGwsYSl7W2MsbCxhXT1mdW5jdGlvbiBXT2UoYyxsLGEpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjJiYoYz0obD1jKS5QTFVHSU5fS0VZLGE9bC5QTFVHSU5fUFJJT1JJVFkpLFtjLGwsYV19KGMsbCxhKSx2b2lkIDA9PT1ndyhjKSYmZnVuY3Rpb24g'@;
put 'Wk9lKGMsbCxhKXtjb25zdCBkPWEwKGMpO2lmKHBqLmhhc0l0ZW0oZCkpdGhyb3cgbmV3IEVycm9yKGZqKGQpKTt2b2lkIDA9PT1hP2ZvZS5hZGRJdGVtKGQpOmhvZS5hZGRJdGVtKGEsZCkscGouYWRkSXRlbShkLGwpfShjLGwsYSl9Y29uc3R7cmVnaXN0ZXI6R09lLGdldEl0ZW06JE9lLGhh'@;
put 'c0l0ZW06cG9lLGdldE5hbWVzOnFPZX09c2goInJlbmRlcmVycyIpO2Z1bmN0aW9uIElUKGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFwb2UoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgcmVuZGVyZXIgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1'@;
put 'cm4gJE9lKGMpfWZ1bmN0aW9uIFNmKGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5SRU5ERVJFUl9UWVBFKSxHT2UoYyxsKX1jb25zdHtyZWdpc3RlcjpLT2UsZ2V0SXRlbTpYT2UsaGFzSXRlbTptb2UsZ2V0TmFtZXM6Sk9lfT1zaCgidmFsaWRhdG9ycyIpO2Z1bmN0aW9uIGdq'@;
put 'KGMpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFtb2UoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgdmFsaWRhdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIFhPZShjKX1mdW5jdGlvbiBwOShjLGwpeyJzdHJpbmciIT10eXBlb2YgYyYmKGM9'@;
put 'KGw9YykuVkFMSURBVE9SX1RZUEUpLEtPZShjLGwpfWZ1bmN0aW9uIFJUKGMpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGMpfWZ1bmN0aW9uIF93KGMpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiBfaigpe3JldHVybiJvbnRvdWNoc3RhcnQi'@;
put 'aW4gd2luZG93fWxldCBtOTtmdW5jdGlvbiBnb2UoYyl7cmV0dXJuIG05fHwobTk9Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNvbGxhdG9yKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/KGEsZCk9PmAke2F9YC5sb2NhbGVDb21wYXJlKGQpOihhLGQpPT5hPT09ZD8wOmE+ZD8tMToxLG05KX1jb25zdCBnOT1uZXcgV2Vha01hcCxfb2U9Y2xhc3MgUU9le2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtsZXQg'@;
put 'VD1hcmd1bWVudHMubGVuZ3RoPjYmJnZvaWQgMCE9PWFyZ3VtZW50c1s2XT9hcmd1bWVudHNbNl06bnVsbDt0aGlzLnd0U2V0dGluZ3M9ZCx0aGlzLmRvbUJpbmRpbmdzPWEsdGhpcy53dFRhYmxlPWYsdGhpcy5zZWxlY3Rpb25zPXYsdGhpcy5wYXJlbnQ9VCx0aGlzLmV2ZW50TWFuYWdlcj1o'@;
put 'LHRoaXMuZmFjYWRlR2V0dGVyPWwsZzkuc2V0KHRoaXMse3NlbGVjdGVkQ2VsbEJlZm9yZVRvdWNoRW5kOnZvaWQgMCxkYmxDbGlja1RpbWVvdXQ6W251bGwsbnVsbF0sZGJsQ2xpY2tPcmlnaW46W251bGwsbnVsbF19KSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCl9cmVnaXN0ZXJFdmVudHMoKXt0'@;
put 'aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS5ob2xkZXIsImNvbnRleHRtZW51IixkPT50aGlzLm9uQ29udGV4dE1lbnUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLlRBQkxFLCJtb3VzZW92ZXIiLGQ9PnRo'@;
put 'aXMub25Nb3VzZU92ZXIoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLlRBQkxFLCJtb3VzZW91dCIsZD0+dGhpcy5vbk1vdXNlT3V0KGQpKTtjb25zdCBsPSgpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFi'@;
put 'bGUuaG9sZGVyLCJ0b3VjaHN0YXJ0IixkPT50aGlzLm9uVG91Y2hTdGFydChkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJ0b3VjaGVuZCIsZD0+dGhpcy5vblRvdWNoRW5kKGQpKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nfHwodGhp'@;
put 'cy5tb21lbnR1bVNjcm9sbGluZz17fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUuaG9sZGVyLCJzY3JvbGwiLCgpPT57Y2xlYXJUaW1lb3V0KHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQpLHRoaXMubW9tZW50dW1TY3JvbGxpbmcub25n'@;
put 'b2luZ3x8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQmVmb3JlVG91Y2hTY3JvbGwiKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITAsdGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy50b3VjaEFwcGxpZWR8fCh0aGlzLm1v'@;
put 'bWVudHVtU2Nyb2xsaW5nLm9uZ29pbmc9ITEsdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uQWZ0ZXJNb21lbnR1bVNjcm9sbCIpKX0sMjAwKX0pfTtmMigpP2woKTooX2ooKSYmbCgpLCgoKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhv'@;
put 'bGRlciwibW91c2V1cCIsZD0+dGhpcy5vbk1vdXNlVXAoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy53dFRhYmxlLmhvbGRlciwibW91c2Vkb3duIixkPT50aGlzLm9uTW91c2VEb3duKGQpKX0pKCkpfXNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQobCl7Y29uc3Qg'@;
put 'YT1nOS5nZXQodGhpcyksaD10aGlzLnBhcmVudENlbGwobCkuY29vcmRzO2lmKGEuc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQmJmgpe2NvbnN0W2Ysdl09W2gucm93LGEuc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQuZnJvbS5yb3ddLFtULFldPVtoLmNvbCxhLnNlbGVjdGVkQ2VsbEJl'@;
put 'Zm9yZVRvdWNoRW5kLmZyb20uY29sXTtyZXR1cm4gZj09PXYmJlQ9PT1ZfXJldHVybiExfXBhcmVudENlbGwobCl7Y29uc3QgYT17fSxoPWF3KGwsWyJURCIsIlRIIl0sdGhpcy53dFRhYmxlLlRBQkxFKTtyZXR1cm4gaD8oYS5jb29yZHM9dGhpcy53dFRhYmxlLmdldENvb3JkcyhoKSxhLlRE'@;
put 'PWgpOlFvKGwsInd0Qm9yZGVyIikmJlFvKGwsImN1cnJlbnQiKT8oYS5jb29yZHM9dGhpcy5zZWxlY3Rpb25zLmdldENlbGwoKS5jZWxsUmFuZ2UuaGlnaGxpZ2h0LGEuVEQ9dGhpcy53dFRhYmxlLmdldENlbGwoYS5jb29yZHMpKTpRbyhsLCJ3dEJvcmRlciIpJiZRbyhsLCJhcmVhIikmJnRo'@;
put 'aXMuc2VsZWN0aW9ucy5jcmVhdGVPckdldEFyZWEoKS5jZWxsUmFuZ2UmJihhLmNvb3Jkcz10aGlzLnNlbGVjdGlvbnMuY3JlYXRlT3JHZXRBcmVhKCkuY2VsbFJhbmdlLnRvLGEuVEQ9dGhpcy53dFRhYmxlLmdldENlbGwoYS5jb29yZHMpKSxhfW9uTW91c2VEb3duKGwpe2NvbnN0IGE9Zzku'@;
put 'Z2V0KHRoaXMpLGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudCxoPVhWKEZpZSxsLnRhcmdldCksZj1sLnRhcmdldDtpZihmPT09ZHx8aCgwKT09PWR8fGgoMSk9PT1kKXJldHVybjtjb25zdCB2PXRoaXMucGFyZW50Q2VsbChmKTtRbyhmLCJjb3JuZXIiKT90'@;
put 'aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25DZWxsQ29ybmVyTW91c2VEb3duIixsLGYpOnYuVEQmJnRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlRG93biIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VEb3duIixsLHYuY29vcmRzLHYuVEQpLCgwPT09bC5idXR0'@;
put 'b258fHRoaXMudG91Y2hBcHBsaWVkKSYmdi5URCYmKGEuZGJsQ2xpY2tPcmlnaW5bMF09di5URCxjbGVhclRpbWVvdXQoYS5kYmxDbGlja1RpbWVvdXRbMF0pLGEuZGJsQ2xpY2tUaW1lb3V0WzBdPXNldFRpbWVvdXQoKCk9PnthLmRibENsaWNrT3JpZ2luWzBdPW51bGx9LDFlMykpfW9uQ29u'@;
put 'dGV4dE1lbnUobCl7aWYodGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsQ29udGV4dE1lbnUiKSl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJnRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb250ZXh0TWVudSIsbCxhLmNvb3JkcyxhLlREKX19b25Nb3VzZU92ZXIo'@;
put 'bCl7aWYoIXRoaXMud3RTZXR0aW5ncy5oYXMoIm9uQ2VsbE1vdXNlT3ZlciIpKXJldHVybjtjb25zdCBhPXRoaXMud3RUYWJsZS5UQUJMRSxkPWF3KGwudGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9dGhpcy5wYXJlbnR8fHRoaXM7ZCYmZCE9PWgubGFzdE1vdXNlT3ZlciYmZW0oZCxhKSYmKGgu'@;
put 'bGFzdE1vdXNlT3Zlcj1kLHRoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxNb3VzZU92ZXIiLGwsdGhpcy53dFRhYmxlLmdldENvb3JkcyhkKSxkKSl9b25Nb3VzZU91dChsKXtpZighdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VPdXQiKSlyZXR1cm47Y29uc3QgYT10aGlzLnd0VGFi'@;
put 'bGUuVEFCTEUsZD1hdyhsLnRhcmdldCxbIlREIiwiVEgiXSxhKSxoPWF3KGwucmVsYXRlZFRhcmdldCxbIlREIiwiVEgiXSxhKSxmPXRoaXMucGFyZW50fHx0aGlzO2QmJmQhPT1oJiZlbShkLGEpJiYodGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3V0IixsLHRoaXMud3RUYWJsZS5n'@;
put 'ZXRDb29yZHMoZCksZCksbnVsbD09PWgmJihmLmxhc3RNb3VzZU92ZXI9bnVsbCkpfW9uTW91c2VVcChsKXtjb25zdCBhPWc5LmdldCh0aGlzKSxkPXRoaXMucGFyZW50Q2VsbChsLnRhcmdldCk7ZC5URCYmdGhpcy53dFNldHRpbmdzLmhhcygib25DZWxsTW91c2VVcCIpJiZ0aGlzLmNhbGxM'@;
put 'aXN0ZW5lcigib25DZWxsTW91c2VVcCIsbCxkLmNvb3JkcyxkLlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJihkLlREPT09YS5kYmxDbGlja09yaWdpblswXSYmZC5URD09PWEuZGJsQ2xpY2tPcmlnaW5bMV0/KFFvKGwudGFyZ2V0LCJjb3JuZXIiKT90aGlzLmNhbGxM'@;
put 'aXN0ZW5lcigib25DZWxsQ29ybmVyRGJsQ2xpY2siLGwsZC5jb29yZHMsZC5URCk6dGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbERibENsaWNrIixsLGQuY29vcmRzLGQuVEQpLGEuZGJsQ2xpY2tPcmlnaW5bMF09bnVsbCxhLmRibENsaWNrT3JpZ2luWzFdPW51bGwpOmQuVEQ9PT1hLmRibENs'@;
put 'aWNrT3JpZ2luWzBdJiYoYS5kYmxDbGlja09yaWdpblsxXT1kLlRELGNsZWFyVGltZW91dChhLmRibENsaWNrVGltZW91dFsxXSksYS5kYmxDbGlja1RpbWVvdXRbMV09c2V0VGltZW91dCgoKT0+e2EuZGJsQ2xpY2tPcmlnaW5bMV09bnVsbH0sNTAwKSkpfW9uVG91Y2hTdGFydChsKXtnOS5n'@;
put 'ZXQodGhpcykuc2VsZWN0ZWRDZWxsQmVmb3JlVG91Y2hFbmQ9dGhpcy5zZWxlY3Rpb25zLmdldENlbGwoKS5jZWxsUmFuZ2UsdGhpcy50b3VjaEFwcGxpZWQ9ITAsdGhpcy5vbk1vdXNlRG93bihsKX1vblRvdWNoRW5kKGwpe3ZhciBhO2NvbnN0IGQ9bC50YXJnZXQsaD1udWxsPT09KGE9dGhp'@;
put 'cy5wYXJlbnRDZWxsKGQpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb29yZHMsZj1lbyhoKSYmaC5yb3c+PTAmJmguY29sPj0wO2lmKGwuY2FuY2VsYWJsZSYmZiYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImlzRGF0YVZpZXdJbnN0YW5jZSIpKXtjb25zdCBUPVsiQSIsIkJVVFRPTiIs'@;
put 'IklOUFVUIl07UVYoKSYmKEppZSgpfHxRaWUoKSkmJnRoaXMuc2VsZWN0ZWRDZWxsV2FzVG91Y2hlZChkKSYmIVQuaW5jbHVkZXMoZC50YWdOYW1lKT9sLnByZXZlbnREZWZhdWx0KCk6dGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpfHxsLnByZXZlbnREZWZhdWx0KCl9dGhpcy5vbk1v'@;
put 'dXNlVXAobCksdGhpcy50b3VjaEFwcGxpZWQ9ITF9Y2FsbExpc3RlbmVyKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmdQdXJlKGwpO2YmJmYoYSxkLGgsdGhpcy5mYWNhZGVHZXR0ZXIoKSl9ZGVzdHJveSgpe2NvbnN0IGw9ZzkuZ2V0KHRoaXMpO2NsZWFyVGlt'@;
put 'ZW91dChsLmRibENsaWNrVGltZW91dFswXSksY2xlYXJUaW1lb3V0KGwuZGJsQ2xpY2tUaW1lb3V0WzFdKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fSx0UGU9Y2xhc3MgZVBle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm9mZnNldD1sLHRoaXMudG90YWw9YSx0aGlzLmNvdW50VEg9'@;
put 'ZH1vZmZzZXR0ZWQobCl7cmV0dXJuIGwrdGhpcy5vZmZzZXR9dW5PZmZzZXR0ZWQobCl7cmV0dXJuIGwtdGhpcy5vZmZzZXR9cmVuZGVyZWRUb1NvdXJjZShsKXtyZXR1cm4gdGhpcy5vZmZzZXR0ZWQobCl9c291cmNlVG9SZW5kZXJlZChsKXtyZXR1cm4gdGhpcy51bk9mZnNldHRlZChsKX1v'@;
put 'ZmZzZXR0ZWRUSChsKXtyZXR1cm4gbC10aGlzLmNvdW50VEh9dW5PZmZzZXR0ZWRUSChsKXtyZXR1cm4gbCt0aGlzLmNvdW50VEh9dmlzaWJsZVJvd0hlYWRlZENvbHVtblRvU291cmNlQ29sdW1uKGwpe3JldHVybiB0aGlzLnJlbmRlcmVkVG9Tb3VyY2UodGhpcy5vZmZzZXR0ZWRUSChsKSl9'@;
put 'c291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkVEgodGhpcy5zb3VyY2VUb1JlbmRlcmVkKGwpKX19LHJQZT1jbGFzcyBuUGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRU'@;
put 'SD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwp'@;
put 'fW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3Vy'@;
put 'Y2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX07Y2xhc3Mgdm9le2NvbnN0cnVjdG9yKCl7dGhpcy5jdXJyZW50U2l6ZT0wLHRoaXMubmV4dFNpemU9MCx0aGlzLmN1cnJlbnRPZmZzZXQ9MCx0'@;
put 'aGlzLm5leHRPZmZzZXQ9MH1zZXRTaXplKGwpe3RoaXMuY3VycmVudFNpemU9dGhpcy5uZXh0U2l6ZSx0aGlzLm5leHRTaXplPWx9c2V0T2Zmc2V0KGwpe3RoaXMuY3VycmVudE9mZnNldD10aGlzLm5leHRPZmZzZXQsdGhpcy5uZXh0T2Zmc2V0PWx9fWNsYXNzIG9QZXtjb25zdHJ1Y3Rvcigp'@;
put 'e3RoaXMuc2l6ZT1uZXcgdm9lLHRoaXMud29ya2luZ1NwYWNlPTAsdGhpcy5zaGFyZWRTaXplPW51bGx9c2V0U2l6ZShsKXt0aGlzLnNpemUuc2V0U2l6ZShsKX1zZXRPZmZzZXQobCl7dGhpcy5zaXplLnNldE9mZnNldChsKX1nZXRWaWV3U2l6ZSgpe3JldHVybiB0aGlzLnNpemV9aXNTaGFy'@;
put 'ZWQoKXtyZXR1cm4gdGhpcy5zaGFyZWRTaXplIGluc3RhbmNlb2Ygdm9lfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwud29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX1w'@;
put 'cmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX1jbGFzcyB5b2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMucm9vdE5vZGU9bCx0aGlzLm5vZGVzUG9vbD1hLHRoaXMuc2l6ZVNldD1uZXcgb1BlLHRo'@;
put 'aXMuY2hpbGROb2RlVHlwZT1kLnRvVXBwZXJDYXNlKCksdGhpcy52aXN1YWxJbmRleD0wLHRoaXMuY29sbGVjdGVkTm9kZXM9W119c2V0U2l6ZShsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldFNpemUobCksdGhpc31zZXRPZmZzZXQobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5zZXRPZmZzZXQo'@;
put 'bCksdGhpc31pc1NoYXJlZFZpZXdTZXQoKXtyZXR1cm4gdGhpcy5zaXplU2V0LmlzU2hhcmVkKCl9Z2V0Tm9kZShsKXtyZXR1cm4gbDx0aGlzLmNvbGxlY3RlZE5vZGVzLmxlbmd0aD90aGlzLmNvbGxlY3RlZE5vZGVzW2xdOm51bGx9Z2V0Q3VycmVudE5vZGUoKXtjb25zdCBsPXRoaXMuY29s'@;
put 'bGVjdGVkTm9kZXMubGVuZ3RoO3JldHVybiBsPjA/dGhpcy5jb2xsZWN0ZWROb2Rlc1tsLTFdOm51bGx9Z2V0UmVuZGVyZWRDaGlsZENvdW50KCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9MDtpZih0aGlzLmlzU2hhcmVkVmlld1NldCgpKXtsZXQgaD1sLmZpcnN0'@;
put 'RWxlbWVudENoaWxkO2Zvcig7aDspe2lmKGgudGFnTmFtZT09PXRoaXMuY2hpbGROb2RlVHlwZSlkKz0xO2Vsc2UgaWYoYS5pc1BsYWNlT24oMSkpYnJlYWs7aD1oLm5leHRFbGVtZW50U2libGluZ319ZWxzZSBkPWwuY2hpbGRFbGVtZW50Q291bnQ7cmV0dXJuIGR9c3RhcnQoKXt0aGlzLmNv'@;
put 'bGxlY3RlZE5vZGVzLmxlbmd0aD0wLHRoaXMudmlzdWFsSW5kZXg9MDtjb25zdHtyb290Tm9kZTpsLHNpemVTZXQ6YX09dGhpcyxkPXRoaXMuaXNTaGFyZWRWaWV3U2V0KCkse25leHRTaXplOmh9PWEuZ2V0Vmlld1NpemUoKTtsZXQgZj10aGlzLmdldFJlbmRlcmVkQ2hpbGRDb3VudCgpO2Zv'@;
put 'cig7ZjxoOyl7Y29uc3QgVD10aGlzLm5vZGVzUG9vbCgpOyFkfHxkJiZhLmlzUGxhY2VPbigyKT9sLmFwcGVuZENoaWxkKFQpOmwuaW5zZXJ0QmVmb3JlKFQsbC5maXJzdENoaWxkKSxmKz0xfWNvbnN0IHY9ZCYmYS5pc1BsYWNlT24oMSk7Zm9yKDtmPmg7KWwucmVtb3ZlQ2hpbGQodj9sLmZp'@;
put 'cnN0Q2hpbGQ6bC5sYXN0Q2hpbGQpLGYtPTF9cmVuZGVyKCl7Y29uc3R7cm9vdE5vZGU6bCxzaXplU2V0OmF9PXRoaXM7bGV0IGQ9dGhpcy52aXN1YWxJbmRleDt0aGlzLmlzU2hhcmVkVmlld1NldCgpJiZhLmlzUGxhY2VPbigyKSYmKGQrPWEuc2hhcmVkU2l6ZS5uZXh0U2l6ZSk7bGV0IGg9'@;
put 'bC5jaGlsZE5vZGVzW2RdO2lmKGgudGFnTmFtZSE9PXRoaXMuY2hpbGROb2RlVHlwZSl7Y29uc3QgZj10aGlzLm5vZGVzUG9vbCgpO2wucmVwbGFjZUNoaWxkKGYsaCksaD1mfXRoaXMuY29sbGVjdGVkTm9kZXMucHVzaChoKSx0aGlzLnZpc3VhbEluZGV4Kz0xfWVuZCgpe319Y2xhc3MgYm9l'@;
put 'IGV4dGVuZHMgeW9le3ByZXBlbmRWaWV3KGwpe3JldHVybiB0aGlzLnNpemVTZXQucHJlcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5hcHBlbmQodGhpcy5zaXplU2V0KSx0aGlzfWFwcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5hcHBlbmQobC5zaXplU2V0KSxsLnNpemVTZXQu'@;
put 'cHJlcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9fWNsYXNzIHNQZXtjb25zdHJ1Y3RvcihsKXt0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4oKXtyZXR1cm4gdGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxl'@;
put 'bWVudCh0aGlzLm5vZGVUeXBlKX19Y2xhc3Mgdnd7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IHNQZShsKTpudWxsLHRoaXMubm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWEsdGhpcy50YWJsZT1udWxsLHRoaXMucmVuZGVyZWROb2Rlcz0w'@;
put 'fXNldFRhYmxlKGwpe3RoaXMubm9kZXNQb29sJiZ0aGlzLm5vZGVzUG9vbC5zZXRSb290RG9jdW1lbnQobC5yb290RG9jdW1lbnQpLHRoaXMudGFibGU9bH1hZGp1c3QoKXt9cmVuZGVyKCl7fX1jbGFzcyBhUGUgZXh0ZW5kcyB2d3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUSCIpLHRoaXMub3Jk'@;
put 'ZXJWaWV3cz1uZXcgV2Vha01hcCx0aGlzLnNvdXJjZVJvd0luZGV4PTB9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgYm9lKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMu'@;
put 'c291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd0hlYWRlckZ1bmN0aW9uczphLHJvd0hlYWRlcnNDb3VudDpkLHJvd3M6aCxjZWxsczpmfT10aGlzLnRhYmxlO2ZvcihsZXQg'@;
put 'dj0wO3Y8bDt2Kyspe2NvbnN0IFQ9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKHYpLFk9aC5nZXRSZW5kZXJlZE5vZGUodik7dGhpcy5zb3VyY2VSb3dJbmRleD1UO2NvbnN0IHJlPXRoaXMub2J0YWluT3JkZXJWaWV3KFkpLGZlPWYub2J0YWluT3JkZXJWaWV3KFkpO3JlLmFwcGVu'@;
put 'ZFZpZXcoZmUpLnNldFNpemUoZCkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IF9lPTA7X2U8ZDtfZSsrKXtyZS5yZW5kZXIoKTtjb25zdCBrZT1yZS5nZXRDdXJyZW50Tm9kZSgpO2tlLmNsYXNzTmFtZT0iIixrZS5yZW1v'@;
put 'dmVBdHRyaWJ1dGUoInN0eWxlIiksYVtfZV0oVCxrZSxfZSl9cmUuZW5kKCl9fX1jbGFzcyBsUGUgZXh0ZW5kcyB2d3tjb25zdHJ1Y3RvcihsKXtzdXBlcihudWxsLGwpfWFkanVzdCgpe2NvbnN0e2NvbHVtbkhlYWRlcnNDb3VudDpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2xl'@;
put 'dCBkPXRoaXMucm9vdE5vZGUuZmlyc3RDaGlsZDtpZihsKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6aH09dGhpcy50YWJsZSxmPWgrYTtmb3IobGV0IFQ9MCxZPWw7VDxZO1QrKyl7Zm9yKGQ9dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW1RdLGR8fChkPXRoaXMudGFibGUucm9vdERvY3VtZW50'@;
put 'LmNyZWF0ZUVsZW1lbnQoInRyIiksdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZChkKSksdGhpcy5yZW5kZXJlZE5vZGVzPWQuY2hpbGROb2Rlcy5sZW5ndGg7dGhpcy5yZW5kZXJlZE5vZGVzPGY7KWQuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi'@;
put 'dGgiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5vZGVzPmY7KWQucmVtb3ZlQ2hpbGQoZC5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1jb25zdCB2PXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7aWYodj5sKWZvcihsZXQgVD1sO1Q8'@;
put 'djtUKyspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCl9ZWxzZSBkJiZoMihkKX1yZW5kZXIoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bH09dGhpcy50YWJsZTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29sdW1uSGVhZGVyRnVuY3Rp'@;
put 'b25zOmQsY29sdW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07Zm9yKGxldCBUPS0xKmY7VDxoO1QrPTEpe2NvbnN0IFk9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKFQpLHJlPXYuY2hpbGRO'@;
put 'b2Rlc1tUK2ZdO3JlLmNsYXNzTmFtZT0iIixyZS5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksZFthXShZLHJlLGEpfX19fWNsYXNzIGNQZSBleHRlbmRzIHZ3e2NvbnN0cnVjdG9yKGwpe3N1cGVyKG51bGwsbCl9YWRqdXN0KCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0Nv'@;
put 'dW50OmF9PXRoaXMudGFibGUsZD1sK2E7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM8ZDspdGhpcy5yb290Tm9kZS5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKSksdGhpcy5yZW5kZXJlZE5vZGVzKz0xO2Zvcig7dGhpcy5yZW5kZXJlZE5v'@;
put 'ZGVzPmQ7KXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpLHRoaXMucmVuZGVyZWROb2Rlcy09MX1yZW5kZXIoKXt0aGlzLmFkanVzdCgpO2NvbnN0e2NvbHVtbnNUb1JlbmRlcjpsLHJvd0hlYWRlcnNDb3VudDphfT10aGlzLnRhYmxlO2ZvcihsZXQg'@;
put 'aD0wO2g8YTtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRIZWFkZXJXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaF0uc3R5bGUud2lkdGg9YCR7dn1weGB9Zm9yKGxldCBoPTA7aDxs'@;
put 'O2grKyl7Y29uc3QgZj10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoaCksdj10aGlzLnRhYmxlLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGYpO3RoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1toK2FdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWNvbnN0IGQ9dGhp'@;
put 'cy5yb290Tm9kZS5maXJzdENoaWxkO2QmJndpKGQsInJvd0hlYWRlciIpfX1sZXQgd29lPSExO2NsYXNzIHVQZSBleHRlbmRzIHZ3e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCJUUiIsbCksdGhpcy5vcmRlclZpZXc9bmV3IHlvZShsLGE9PnRoaXMubm9kZXNQb29sLm9idGFpbihhKSx0aGlzLm5v'@;
put 'ZGVUeXBlKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IXdvZSYmbD4xZTMmJih3b2U9ITAsYmwoV2FgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVy'@;
put 'ZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLiBDb25zaWRlciBsaW1pdGluZ1x4MjAKICAgICAgICB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vciB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlv'@;
put 'bi5gKSksdGhpcy5vcmRlclZpZXcuc2V0U2l6ZShsKS5zZXRPZmZzZXQodGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKDApKS5zdGFydCgpO2ZvcihsZXQgYT0wO2E8bDthKyspdGhpcy5vcmRlclZpZXcucmVuZGVyKCk7dGhpcy5vcmRlclZpZXcuZW5kKCl9fWNsYXNzIGRQZSBleHRl'@;
put 'bmRzIHZ3e2NvbnN0cnVjdG9yKCl7c3VwZXIoIlREIiksdGhpcy5vcmRlclZpZXdzPW5ldyBXZWFrTWFwLHRoaXMuc291cmNlUm93SW5kZXg9MH1vYnRhaW5PcmRlclZpZXcobCl7bGV0IGE7cmV0dXJuIHRoaXMub3JkZXJWaWV3cy5oYXMobCk/YT10aGlzLm9yZGVyVmlld3MuZ2V0KGwpOihh'@;
put 'PW5ldyBib2UobCxkPT50aGlzLm5vZGVzUG9vbC5vYnRhaW4odGhpcy5zb3VyY2VSb3dJbmRleCxkKSx0aGlzLm5vZGVUeXBlKSx0aGlzLm9yZGVyVmlld3Muc2V0KGwsYSkpLGF9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmwsY29sdW1uc1RvUmVuZGVyOmEscm93czpkLHJvd0hlYWRl'@;
put 'cnM6aH09dGhpcy50YWJsZTtmb3IobGV0IGY9MDtmPGw7ZisrKXtjb25zdCB2PXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZShmKSxUPWQuZ2V0UmVuZGVyZWROb2RlKGYpO3RoaXMuc291cmNlUm93SW5kZXg9djtjb25zdCBZPXRoaXMub2J0YWluT3JkZXJWaWV3KFQpLHJlPWgub2J0'@;
put 'YWluT3JkZXJWaWV3KFQpO1kucHJlcGVuZFZpZXcocmUpLnNldFNpemUoYSkuc2V0T2Zmc2V0KHRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZSgwKSkuc3RhcnQoKTtmb3IobGV0IGZlPTA7ZmU8YTtmZSsrKXtZLnJlbmRlcigpO2NvbnN0IF9lPVkuZ2V0Q3VycmVudE5vZGUoKSxr'@;
put 'ZT10aGlzLnRhYmxlLnJlbmRlcmVkQ29sdW1uVG9Tb3VyY2UoZmUpO1FvKF9lLCJoaWRlIil8fChfZS5jbGFzc05hbWU9IiIpLF9lLnJlbW92ZUF0dHJpYnV0ZSgic3R5bGUiKSxfZS5yZW1vdmVBdHRyaWJ1dGUoImRpciIpLHRoaXMudGFibGUuY2VsbFJlbmRlcmVyKHYsa2UsX2UpfVkuZW5k'@;
put 'KCl9fX1jbGFzcyBoUGV7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphfT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307dGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRoaXMucm9vdE5vZGUub3duZXJEb2N1'@;
put 'bWVudCx0aGlzLnJvd0hlYWRlcnM9bnVsbCx0aGlzLmNvbHVtbkhlYWRlcnM9bnVsbCx0aGlzLmNvbEdyb3VwPW51bGwsdGhpcy5yb3dzPW51bGwsdGhpcy5jZWxscz1udWxsLHRoaXMucm93RmlsdGVyPW51bGwsdGhpcy5jb2x1bW5GaWx0ZXI9bnVsbCx0aGlzLnJvd1V0aWxzPW51bGwsdGhp'@;
put 'cy5jb2x1bW5VdGlscz1udWxsLHRoaXMucm93c1RvUmVuZGVyPTAsdGhpcy5jb2x1bW5zVG9SZW5kZXI9MCx0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1bXSx0aGlzLnJvd0hlYWRlcnNDb3VudD0wLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPVtdLHRoaXMuY29sdW1uSGVhZGVyc0NvdW50'@;
put 'PTAsdGhpcy5jZWxsUmVuZGVyZXI9YX1zZXRBeGlzVXRpbHMobCxhKXt0aGlzLnJvd1V0aWxzPWwsdGhpcy5jb2x1bW5VdGlscz1hfXNldFZpZXdwb3J0U2l6ZShsLGEpe3RoaXMucm93c1RvUmVuZGVyPWwsdGhpcy5jb2x1bW5zVG9SZW5kZXI9YX1zZXRGaWx0ZXJzKGwsYSl7dGhpcy5yb3dG'@;
put 'aWx0ZXI9bCx0aGlzLmNvbHVtbkZpbHRlcj1hfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXt0aGlzLnJvd0hlYWRlckZ1bmN0aW9ucz1sLHRoaXMucm93SGVhZGVyc0NvdW50PWwubGVuZ3RoLHRoaXMuY29sdW1uSGVhZGVyRnVuY3Rpb25zPWEsdGhpcy5jb2x1bW5IZWFkZXJzQ291'@;
put 'bnQ9YS5sZW5ndGh9c2V0UmVuZGVyZXJzKCl7bGV0e3Jvd0hlYWRlcnM6bCxjb2x1bW5IZWFkZXJzOmEsY29sR3JvdXA6ZCxyb3dzOmgsY2VsbHM6Zn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2wuc2V0VGFibGUodGhpcyksYS5z'@;
put 'ZXRUYWJsZSh0aGlzKSxkLnNldFRhYmxlKHRoaXMpLGguc2V0VGFibGUodGhpcyksZi5zZXRUYWJsZSh0aGlzKSx0aGlzLnJvd0hlYWRlcnM9bCx0aGlzLmNvbHVtbkhlYWRlcnM9YSx0aGlzLmNvbEdyb3VwPWQsdGhpcy5yb3dzPWgsdGhpcy5jZWxscz1mfXJlbmRlcmVkUm93VG9Tb3VyY2Uo'@;
put 'bCl7cmV0dXJuIHRoaXMucm93RmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCl9cmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShsKX1yZW5kZXIoKXt0aGlzLmNvbEdyb3VwLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVy'@;
put 'cy5hZGp1c3QoKSx0aGlzLnJvd3MuYWRqdXN0KCksdGhpcy5yb3dIZWFkZXJzLmFkanVzdCgpLHRoaXMuY29sdW1uSGVhZGVycy5yZW5kZXIoKSx0aGlzLnJvd3MucmVuZGVyKCksdGhpcy5yb3dIZWFkZXJzLnJlbmRlcigpLHRoaXMuY2VsbHMucmVuZGVyKCksdGhpcy5jb2x1bW5VdGlscy5j'@;
put 'YWxjdWxhdGVXaWR0aHMoKSx0aGlzLmNvbEdyb3VwLnJlbmRlcigpO2NvbnN0e3Jvd3NUb1JlbmRlcjpsLHJvd3M6YX09dGhpcztmb3IobGV0IGQ9MDtkPGw7ZCsrKXtjb25zdCBoPWEuZ2V0UmVuZGVyZWROb2RlKGQpO2lmKGguZmlyc3RDaGlsZCl7Y29uc3QgZj10aGlzLnJlbmRlcmVkUm93'@;
put 'VG9Tb3VyY2UoZCksdj10aGlzLnJvd1V0aWxzLmdldEhlaWdodChmKTtoLmZpcnN0Q2hpbGQuc3R5bGUuaGVpZ2h0PXY/di0xKyJweCI6IiJ9fX19Y2xhc3MgZlBle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93VXRpbHM6Zixjb2x1bW5V'@;
put 'dGlsczp2LGNlbGxSZW5kZXJlcjpUfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307dGhpcy5yZW5kZXJlcj1uZXcgaFBlKGwse2NlbGxSZW5kZXJlcjpUfSksdGhpcy5yZW5kZXJlci5zZXRSZW5kZXJlcnMoe3Jvd0hlYWRlcnM6bmV3'@;
put 'IGFQZSxjb2x1bW5IZWFkZXJzOm5ldyBsUGUoYSksY29sR3JvdXA6bmV3IGNQZShkKSxyb3dzOm5ldyB1UGUoaCksY2VsbHM6bmV3IGRQZX0pLHRoaXMucmVuZGVyZXIuc2V0QXhpc1V0aWxzKGYsdil9c2V0RmlsdGVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEZpbHRlcnMobCxh'@;
put 'KSx0aGlzfXNldFZpZXdwb3J0U2l6ZShsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZShsLGEpLHRoaXN9c2V0SGVhZGVyQ29udGVudFJlbmRlcmVycyhsLGEpe3JldHVybiB0aGlzLnJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKSx0aGlzfWFk'@;
put 'anVzdCgpe3RoaXMucmVuZGVyZXIuYWRqdXN0KCl9cmVuZGVyKCl7dGhpcy5yZW5kZXJlci5yZW5kZXIoKX19Y2xhc3MgcFBle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWEsdGhpcy5oZWFkZXJXaWR0aHM9bmV3IE1hcH1nZXRXaWR0'@;
put 'aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0'@;
put 'Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3I7bGV0IGQ9dGhpcy5nZXRXaWR0aChsKTtpZihhKXtjb25zdCBoPWEuZ2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxkKTtoJiYoZD1oKX1yZXR1cm4gZH1nZXRIZWFkZXJIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNl'@;
put 'dHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTtjb25zdCBkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbbF07cmV0dXJuIHZvaWQgMCE9PWQmJihhPWE/TWF0aC5tYXgoYSxkKTpkKSxhfWdldEhlYWRlcldpZHRoKGwpe3JldHVybiB0aGlz'@;
put 'LmhlYWRlcldpZHRocy5nZXQodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCkpfWNhbGN1bGF0ZVdpZHRocygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RUYWJsZTphLHd0Vmlld3BvcnQ6ZCxjbG9uZVNvdXJjZTpofT10'@;
put 'aGlzLmRhdGFBY2Nlc3NPYmplY3QsZj1oP2gud3RUYWJsZS5ob2xkZXI6YS5ob2xkZXIsdj1mLm9mZnNldEhlaWdodDxmLnNjcm9sbEhlaWdodD9mdSgpOjA7bGV0IFQ9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IucmVmcmVzaFN0'@;
put 'cmV0Y2hpbmcoZC5nZXRWaWV3cG9ydFdpZHRoKCktdiksVD1sLmdldFNldHRpbmcoIm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgiLFQpLG51bGwhPVQpe2NvbnN0IFk9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLHJlPWwuZ2V0U2V0dGluZygiZGVmYXVsdENvbHVtbldpZHRoIik7'@;
put 'Zm9yKGxldCBmZT0wO2ZlPFk7ZmUrKyl7bGV0IF9lPUFycmF5LmlzQXJyYXkoVCk/VFtmZV06VDtfZT1fZT8/cmUsdGhpcy5oZWFkZXJXaWR0aHMuc2V0KGZlLF9lKX19fX1jbGFzcyBtUGV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9'@;
put 'YX1nZXRIZWlnaHQobCl7bGV0IGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlaWdodCIsbCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYoYT12b2lkIDA9PT1hP2Q6TWF0aC5tYXgo'@;
put 'YSxkKSksYX19Y29uc3QgQmc9InRvcCIseGY9ImJvdHRvbSIsWWc9ImlubGluZV9zdGFydCIsemc9InRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIixvbT0iYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiLGdQZT1bQmcseGYsWWcsemcsb21dLF9QZT1uZXcgTWFwKFtbQmcsYGh0X2Nsb25lXyR7'@;
put 'Qmd9YF0sW3hmLGBodF9jbG9uZV8ke3hmfWBdLFtZZyxgaHRfY2xvbmVfJHtZZ30gaHRfY2xvbmVfbGVmdGBdLFt6ZyxgaHRfY2xvbmVfJHt6Z30gaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyYF0sW29tLGBodF9jbG9uZV8ke29tfSBodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXJgXV0pO2Z1'@;
put 'bmN0aW9uIGtmKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB2UGUoYyl7dmFyIGw9ZnVuY3Rpb24geVBlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMs'@;
put 'bHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTty'@;
put 'ZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgXzk9Y2xhc3MgYlBle2NvbnN0cnVjdG9y'@;
put 'KGwsYSxkLGgsZil7a2YodGhpcywid3RTZXR0aW5ncyIsbnVsbCksa2YodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksa2YodGhpcywiVEJPRFkiLG51bGwpLGtmKHRoaXMsIlRIRUFEIixudWxsKSxrZih0aGlzLCJDT0xHUk9VUCIsbnVsbCksa2YodGhpcywiaGFzVGFibGVIZWlnaHQiLCEw'@;
put 'KSxrZih0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksa2YodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxrZih0aGlzLCJ0YWJsZU9mZnNldCIsMCksa2YodGhpcywiaG9sZGVyT2Zmc2V0IiwwKSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWYsdGhpcy5uYW1l'@;
put 'PWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhpcy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPWQucm9vdFRhYmxlLFpW'@;
put 'KHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5ob2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRo'@;
put 'aXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJvd0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lk'@;
put 'dGg9ITE7Y29uc3Qgdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aCh2KSksdGhpcy5yb3dVdGlscz1uZXcgbVBlKHRoaXMu'@;
put 'ZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IHBQZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxlUmVuZGVyZXI9bmV3IGZQZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdS'@;
put 'T1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIil9KX1pcyhsKXtyZXR1cm4gdGhp'@;
put 'cy5uYW1lPT09bH1maXhUYWJsZURvbVRyZWUoKXtjb25zdCBsPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50O3RoaXMuVEJPRFk9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yKCJ0Ym9keSIpLHRoaXMuVEJPRFl8fCh0aGlzLlRCT0RZPWwuY3JlYXRlRWxlbWVudCgidGJvZHkiKSx0aGlz'@;
put 'LlRBQkxFLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpKSx0aGlzLlRIRUFEPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigidGhlYWQiKSx0aGlzLlRIRUFEfHwodGhpcy5USEVBRD1sLmNyZWF0ZUVsZW1lbnQoInRoZWFkIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5USEVBRCx0aGlz'@;
put 'LlRCT0RZKSksdGhpcy5DT0xHUk9VUD10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoImNvbGdyb3VwIiksdGhpcy5DT0xHUk9VUHx8KHRoaXMuQ09MR1JPVVA9bC5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLHRoaXMuVEFCTEUuaW5zZXJ0QmVmb3JlKHRoaXMuQ09MR1JPVVAsdGhpcy5USEVB'@;
put 'RCkpfWNyZWF0ZVNwcmVhZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhUW8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp'@;
put 'LGQuY2xhc3NOYW1lPSJ3dFNwcmVhZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkfWNyZWF0ZUhpZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5v'@;
put 'ZGUuRUxFTUVOVF9OT0RFfHwhUW8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuY2xhc3NOYW1lPSJ3dEhpZGVyIixhJiZhLmluc2VydEJlZm9yZShkLGwpLGQuYXBwZW5kQ2hpbGQobCkpLGR9Y3JlYXRlSG9s'@;
put 'ZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhUW8oYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUucG9zaXRp'@;
put 'b249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJodF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSksZC5hcHBlbmRDaGlsZChsKSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRpbmdzOmF9PXRoaXMse3d0'@;
put 'T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLFQ9YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksWT1ULmxlbmd0aCxyZT1hLmdldFNldHRpbmcoImNv'@;
put 'bHVtbkhlYWRlcnMiKSxmZT1yZS5sZW5ndGg7bGV0IF9lPSExLGtlPWw7aWYodGhpcy5pc01hc3RlciYmKHRoaXMuaG9sZGVyT2Zmc2V0PVNjKHRoaXMuaG9sZGVyKSxrZT1oLmNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKGtlKSxZJiYhYS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIp'@;
put 'KSl7Y29uc3QgSmU9ZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0dD10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aDt0aGlzLmNvcnJlY3RIZWFkZXJXaWR0aD0wIT09SmUsdHQhPT10aGlzLmNvcnJlY3RIZWFkZXJXaWR0aCYmKGtlPSExKX1pZih0aGlzLmlzTWFzdGVy'@;
put 'JiYoX2U9ZC51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCkpLGtlKXRoaXMuaXNNYXN0ZXImJmguY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksZCYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj9TYyh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NP'@;
put 'YmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgSmU9Zj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOjAsdHQ9dj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IHJQZShKZSxmLGZlKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgdFBlKHR0'@;
put 'LHYsWSk7bGV0IHl0PSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpO2NvbnN0IHd0PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCx3dCkseXQ9ITAhPT13dC5za2lwUmVuZGVyfWlmKHl0KXts'@;
put 'ZXQgd3Q7aWYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoVCxyZSksKHRoaXMuaXMoeGYpfHx0aGlzLmlzKG9tKSkmJnRoaXMudGFibGVSZW5kZXJlci5zZXRIZWFkZXJDb250ZW50UmVuZGVyZXJzKFQsW10pLHRoaXMucmVzZXRPdmVyc2l6ZWRSb3dzKCks'@;
put 'dGhpcy50YWJsZVJlbmRlcmVyLnNldFZpZXdwb3J0U2l6ZSh0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCksdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpKS5zZXRGaWx0ZXJzKHRoaXMucm93RmlsdGVyLHRoaXMuY29sdW1uRmlsdGVyKS5yZW5kZXIoKSx0aGlzLmlzTWFzdGVyJiYo'@;
put 'd3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvcmtzcGFjZVdpZHRoLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmNvbnRhaW5lcldpZHRoPW51bGwsdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpKSx0aGlzLmFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKSwodGhp'@;
put 'cy5pc01hc3Rlcnx8dGhpcy5pcyh4ZikpJiZ0aGlzLm1hcmtPdmVyc2l6ZWRSb3dzKCksdGhpcy5pc01hc3Rlcil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQuY3JlYXRlVmlzaWJsZUNhbGN1bGF0b3JzKCksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMucmVmcmVz'@;
put 'aCghMSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0T3ZlcmxheXMuYXBwbHlUb0RPTSgpO2NvbnN0IEx0PU5hKHRoaXMuaGlkZXIpLG9uPU5hKHRoaXMuVEFCTEUpOzAhPT1MdCYmb24hPT1MdCYmKHRoaXMuY29sdW1uVXRpbHMuY2FsY3VsYXRlV2lkdGhzKCksdGhpcy50YWJsZVJlbmRlcmVy'@;
put 'LnJlbmRlcmVyLmNvbEdyb3VwLnJlbmRlcigpKSx3dCE9PXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5jb250YWluZXJXaWR0aD1udWxsLHRoaXMuY29sdW1uVXRpbHMuY2FsY3Vs'@;
put 'YXRlV2lkdGhzKCksdGhpcy50YWJsZVJlbmRlcmVyLnJlbmRlcmVyLmNvbEdyb3VwLnJlbmRlcigpKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCl9ZWxzZSB0aGlzLmlzKHhmKSYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNsb25lU291cmNlLnd0T3ZlcmxheXMuYWRq'@;
put 'dXN0RWxlbWVudHNTaXplKCl9fWxldCBXZT0hMTtyZXR1cm4gdGhpcy5pc01hc3RlciYmKFdlPWQudG9wT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSxkLmJvdHRvbU92ZXJsYXkuY2xvbmUmJihXZT1kLmJvdHRvbU92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCl8fFdlKSxXZT1kLmlu'@;
put 'bGluZVN0YXJ0T3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8V2UsZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZkLmJvdHRv'@;
put 'bUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCkpLFdlPyhkLnJlZnJlc2hBbGwoKSxkLmFkanVzdEVsZW1lbnRzU2l6ZSgpKTp0aGlzLnJlZnJlc2hTZWxlY3Rpb25zKGtlKSxfZSYmZC5z'@;
put 'eW5jU2Nyb2xsV2l0aE1hc3RlcigpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRp'@;
put 'bmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBmLHYsVDtjb25zdCBZPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJIZWlnaHQiKXx8W107Zm9yKDtkOylkLT0x'@;
put 'LGY9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoZCksdj10aGlzLmdldENvbHVtbkhlYWRlcihhLGQpLHYmJihUPWlwKHYpLCghZiYmaDxUfHxmPFQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1UKSxBcnJheS5pc0FycmF5'@;
put 'KFkpP251bGwhPVlbZF0mJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPVlbZF0pOmlzTmFOKFkpfHwodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tkXT1ZKSx0aGlzLmRhdGFB'@;
put 'Y2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPChZW2RdfHxZKSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09WVtkXXx8WSkpfWFkanVzdENvbHVtbkhlYWRlckhlaWdodHMoKXtjb25zdHt3'@;
put 'dFNldHRpbmdzOmx9PXRoaXMsYT10aGlzLlRIRUFELmNoaWxkTm9kZXMsZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzO2ZvcihsZXQgZj0wLHY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2Y8djtmKyspaWYoZFtm'@;
put 'XSl7aWYoIWFbZl18fDA9PT1hW2ZdLmNoaWxkTm9kZXMubGVuZ3RoKXJldHVybjthW2ZdLmNoaWxkTm9kZXNbMF0uc3R5bGUuaGVpZ2h0PWAke2RbZl19cHhgfX1yZXNldE92ZXJzaXplZFJvd3MoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3d0Vmlld3BvcnQ6YX09dGhpcy5kYXRhQWNj'@;
put 'ZXNzT2JqZWN0O2lmKCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKHhmKSkmJiFsLmdldFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXtjb25zdCBkPXRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKTtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMucm93RmlsdGVyLnJl'@;
put 'bmRlcmVkVG9Tb3VyY2UoaCk7YS5vdmVyc2l6ZWRSb3dzJiZhLm92ZXJzaXplZFJvd3NbZl0mJihhLm92ZXJzaXplZFJvd3NbZl09dm9pZCAwKX19fXJlbW92ZUNsYXNzRnJvbUNlbGxzKGwpe2NvbnN0IGE9dGhpcy5UQUJMRS5xdWVyeVNlbGVjdG9yQWxsKGAuJHtsfWApO2ZvcihsZXQgZD0w'@;
put 'LGg9YS5sZW5ndGg7ZDxoO2QrKylzcyhhW2RdLGwpfXJlZnJlc2hTZWxlY3Rpb25zKGwpe2NvbnN0e3d0U2V0dGluZ3M6YX09dGhpcyx7c2VsZWN0aW9uczpkfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWQpcmV0dXJuO2NvbnN0IGg9QXJyYXkuZnJvbShkKSxmPWgubGVuZ3RoO2lmKGwp'@;
put 'e2NvbnN0IHY9W107Zm9yKGxldCByZT0wO3JlPGY7cmUrKyl7Y29uc3R7aGlnaGxpZ2h0SGVhZGVyQ2xhc3NOYW1lOmZlLGhpZ2hsaWdodFJvd0NsYXNzTmFtZTpfZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6a2V9PWhbcmVdLnNldHRpbmdzLFdlPWhbcmVdLmNsYXNzTmFtZXMsSmU9V2Uu'@;
put 'bGVuZ3RoO2ZvcihsZXQgdHQ9MDt0dDxKZTt0dCsrKXYuaW5jbHVkZXMoV2VbdHRdKXx8di5wdXNoKFdlW3R0XSk7ZmUmJiF2LmluY2x1ZGVzKGZlKSYmdi5wdXNoKGZlKSxfZSYmIXYuaW5jbHVkZXMoX2UpJiZ2LnB1c2goX2UpLGtlJiYhdi5pbmNsdWRlcyhrZSkmJnYucHVzaChrZSl9Y29u'@;
put 'c3QgVD1hLmdldFNldHRpbmcoIm9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXMiKTtpZihBcnJheS5pc0FycmF5KFQpKWZvcihsZXQgcmU9MDtyZTxULmxlbmd0aDtyZSsrKXYucHVzaChUW3JlXSk7Y29uc3QgWT12Lmxlbmd0aDtmb3IobGV0IHJlPTA7cmU8WTtyZSsrKXRoaXMucmVtb3Zl'@;
put 'Q2xhc3NGcm9tQ2VsbHModltyZV0pfWZvcihsZXQgdj0wO3Y8Zjt2KyspaFt2XS5kcmF3KHRoaXMuZmFjYWRlR2V0dGVyKCksbCl9Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIs'@;
put 'YSxkKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSly'@;
put 'ZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZighZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNo'@;
put 'aWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJvdyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwp'@;
put 'e2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8'@;
put 'fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5jaGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGls'@;
put 'ZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rlc1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7'@;
put 'Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5USEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVy'@;
put 'KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKDA9PT10aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuO2lmKGE+PXRoaXMud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMuVEJPRFkuY2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXTtyZXR1cm4gaD8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2lmKDA9PT10aGlzLmNvbHVtbkZpbHRl'@;
put 'ci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4oMCkpcmV0dXJuW107Y29uc3QgYT1bXSxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoO2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5UQk9EWS5jaGlsZE5vZGVzW3Ro'@;
put 'aXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCldLHY9Zj8uY2hpbGROb2Rlc1toXTt2JiZhLnB1c2godil9cmV0dXJuIGF9Z2V0Q29vcmRzKGwpe2xldCBhPWw7aWYoIlREIiE9PWEubm9kZU5hbWUmJiJUSCIhPT1hLm5vZGVOYW1lJiYoYT1RNChhLFsiVEQiLCJUSCJdKSksbnVsbD09'@;
put 'PWEpcmV0dXJuIG51bGw7Y29uc3QgZD1hLnBhcmVudE5vZGUsaD1kLnBhcmVudE5vZGU7bGV0IGY9TmllKGQpLHY9YS5jZWxsSW5kZXg7cmV0dXJuIHRtKHpnLGEsdGhpcy53dFJvb3RFbGVtZW50KXx8dG0oQmcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVOYW1lJiYo'@;
put 'Zi09aC5jaGlsZE5vZGVzLmxlbmd0aCk6Zj10bShvbSxhLHRoaXMud3RSb290RWxlbWVudCl8fHRtKHhmLGEsdGhpcy53dFJvb3RFbGVtZW50KT90aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFEP3RoaXMu'@;
put 'cm93RmlsdGVyLnZpc2libGVDb2xIZWFkZWRSb3dUb1NvdXJjZVJvdyhmKTp0aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpLHY9dG0oemcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHx0bShZZyxhLHRoaXMud3RSb290RWxlbWVudCl8fHRtKG9tLGEsdGhpcy53dFJvb3RFbGVtZW50'@;
put 'KT90aGlzLmNvbHVtbkZpbHRlci5vZmZzZXR0ZWRUSCh2KTp0aGlzLmNvbHVtbkZpbHRlci52aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1bW4odiksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgaCxmLHYsVCxZLGw9dGhpcy5UQk9EWS5jaGlsZE5vZGVzLmxlbmd0aDtpZihsKnRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0IikhPWlwKHRoaXMuVEJPRFkpLTF8fHRoaXMud3RT'@;
put 'ZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSlmb3IoO2w7KWwtPTEsdj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGwpLGg9dGhpcy5nZXRSb3dIZWlnaHQodiksVD10aGlzLmdldFRyRm9yUm93KHYpLFk9VC5xdWVyeVNlbGVjdG9yKCJ0aCIpLGY9WT9pcChZ'@;
put 'KTppcChUKS0xLCghaCYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRSb3dIZWlnaHQiKTxmfHxoPGYpJiYoZis9MSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRSb3dzW3ZdPWYpfWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNo'@;
put 'aWxkTm9kZXNbdGhpcy5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1k'@;
put 'fWlzUm93SGVhZGVyUmVuZGVyZWQobCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0'@;
put 'Rmlyc3RSZW5kZXJlZFJvdygpO3JldHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2Nv'@;
put 'bnN0IGE9dGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5k'@;
put 'ZXJlZENvbHVtbigpfWlzQ29sdW1uQWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygp'@;
put 'fWlzQ29sdW1uQmVmb3JlVmlld3BvcnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0'@;
put 'TGFzdFJlbmRlcmVkUm93KCl9aXNMYXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco'@;
put 'InRvdGFsUm93cyIpPT09dGhpcy5nZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3Jl'@;
put 'dHVybiB0aGlzLnJvd1V0aWxzLmdldEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWdldFN0cmV0Y2hl'@;
put 'ZENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFzVGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiBOYSh0aGlzLlRBQkxFKX1n'@;
put 'ZXRIZWlnaHQoKXtyZXR1cm4gVmwodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9TmEodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD1WbCh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdl'@;
put 'dEhlaWdodCgpfWlzVmlzaWJsZSgpe3JldHVybiBhOSh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9b2wobCk/bCgpOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRo'@;
put 'KGFbYS5sZW5ndGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSks'@;
put 'dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sTW9lPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5k'@;
put 'ZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0'@;
put 'dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9fTtDZihNb2UsIk1JWElO'@;
put 'X05BTUUiLCJzdGlja3lSb3dzVG9wIix7d3JpdGFibGU6ITEsZW51bWVyYWJsZTohMX0pO2NvbnN0IENvZT1Nb2UsU29lPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5SZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6'@;
put 'Y30sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5SZW5k'@;
put 'ZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5WaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nl'@;
put 'c3NPYmplY3QuY291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9fTtDZihTb2UsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1l'@;
put 'cmFibGU6ITF9KTtjb25zdCB2aj1Tb2U7Y2xhc3MgeWogZXh0ZW5kcyBfOXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLEJnKX19R2EoeWosQ29lKSxHYSh5aix2aik7Y29uc3QgQ1BlPXlqO2Z1bmN0aW9uIGJqKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBTUGUoYyl7dmFy'@;
put 'IGw9ZnVuY3Rpb24geFBlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4g'@;
put 'Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgRVBlPWNsYXNzIGtQZXtjb25zdHJ1Y3RvcihsKXtiaih0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLGJqKHRo'@;
put 'aXMsImxhc3RTY3JvbGxlZENvbHVtblBvcyIsLTEpLGJqKHRoaXMsImxhc3RTY3JvbGxlZFJvd1BvcyIsLTEpLHRoaXMuZGF0YUFjY2Vzc09iamVjdD1sfXNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil7Y29uc3Qgdj10aGlzLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwuY29sLGQsZiks'@;
put 'VD10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxhLGgpO3JldHVybiB2fHxUfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRvdGFsQ29sdW1uczpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2Vy'@;
put 'KGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25zdCB2PXRoaXMuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksVD10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCksWT12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtmaXhlZENvbHVtbnNTdGFydDpyZSxpbmxpbmVTdGFydE92ZXJsYXk6ZmV9PXRoaXMu'@;
put 'ZGF0YUFjY2Vzc09iamVjdDtpZihZJiZsPHJlKXJldHVybiExO2xldCBfZT0hMTtyZXR1cm4tMT09PXY/X2U9ZmUuc2Nyb2xsVG8obCxZP2w+dGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Qb3M6YSk6KFkmJihsPHZ8fGw+VCl8fCFZKSYmKF9lPWZlLnNjcm9sbFRvKGwsWT9sPlQ6YSkpLF9lJiYo'@;
put 'dGhpcy5sYXN0U2Nyb2xsZWRDb2x1bW5Qb3M9bCksX2V9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKXtjb25zdHtkcmF3bjpoLHRvdGFsUm93czpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoIWh8fCFOdW1iZXIuaXNJbnRlZ2VyKGwpfHxsPDB8fGw+ZilyZXR1cm4hMTtjb25z'@;
put 'dCB2PXRoaXMuZ2V0Rmlyc3RWaXNpYmxlUm93KCksVD10aGlzLmdldExhc3RWaXNpYmxlUm93KCksWT12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtmaXhlZFJvd3NCb3R0b206cmUsZml4ZWRSb3dzVG9wOmZlLHRvcE92ZXJsYXk6X2V9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZihZJiYobDxm'@;
put 'ZXx8bD5mLXJlLTEpKXJldHVybiExO2xldCBrZT0hMTtyZXR1cm4tMT09PXY/a2U9X2Uuc2Nyb2xsVG8obCxZP2w+dGhpcy5sYXN0U2Nyb2xsZWRSb3dQb3M6ZCk6KFkmJihsPHZ8fGw+VCl8fCFZKSYmKGtlPV9lLnNjcm9sbFRvKGwsWT9sPlQ6ZCkpLGtlJiYodGhpcy5sYXN0U2Nyb2xsZWRS'@;
put 'b3dQb3M9bCksa2V9Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgsZml4ZWRSb3dzVG9wOmYscm9vdFdpbmRvdzp2fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9YS5nZXRGaXJzdFZpc2libGVSb3co'@;
put 'KTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dil7Y29uc3QgWT1TYyhhLnd0Um9vdEVsZW1lbnQpLHJlPWlwKGEuaGlkZXIpLGZlPWlwKHYpLF9lPWx3KHYsdik7aWYoWS50b3ArcmUtZmU8PV9lKXtsZXQga2U9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtrZSs9bC5zdW1D'@;
put 'ZWxsU2l6ZXMoMCxmKTtmb3IobGV0IFdlPWg7V2U+MDtXZS0tKWlmKGtlKz1sLnN1bUNlbGxTaXplcyhXZS0xLFdlKSxZLnRvcCtyZS1rZTw9X2Upe1Q9V2U7YnJlYWt9fX1yZXR1cm4gVH1nZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0e3RvcE92ZXJsYXk6bCx3dFRhYmxlOmEsd3RWaWV3cG9y'@;
put 'dDpkLHRvdGFsUm93czpoLHJvb3RXaW5kb3c6Zn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2xldCB2PWEuZ2V0TGFzdFZpc2libGVSb3coKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09Zil7Y29uc3QgVD1TYyhhLnd0Um9vdEVsZW1lbnQpLFk9bHcoZixmKTtpZihULnRvcD5Z'@;
put 'KXtjb25zdCByZT1pcChmKTtsZXQgZmU9ZC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtmb3IobGV0IF9lPTE7X2U8PWg7X2UrKylpZihmZSs9bC5zdW1DZWxsU2l6ZXMoX2UtMSxfZSksVC50b3ArZmUtWT49cmUpe3Y9X2UtMjticmVha319fXJldHVybiB2fWdldEZpcnN0VmlzaWJsZUNvbHVt'@;
put 'bigpe2NvbnN0e2lubGluZVN0YXJ0T3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxDb2x1bW5zOmgscm9vdFdpbmRvdzpmfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IHY9YS5nZXRGaXJzdFZpc2libGVDb2x1bW4oKTtpZihsLm1haW5UYWJsZVNjcm9sbGFibGVFbGVt'@;
put 'ZW50PT09Zil7Y29uc3QgVD1TYyhhLnd0Um9vdEVsZW1lbnQpLFk9dXcoYS5oaWRlcikscmU9dXcoZiksZmU9TWF0aC5hYnMoX1QoZixmKSk7aWYoVC5sZWZ0K1ktcmU8PWZlKXtsZXQgX2U9ZC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQga2U9aDtrZT4wO2tlLS0paWYoX2UrPWwuc3Vt'@;
put 'Q2VsbFNpemVzKGtlLTEsa2UpLFQubGVmdCtZLV9lPD1mZSl7dj1rZTticmVha319fXJldHVybiB2fWdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3R7d3RTZXR0aW5nczpsLGlubGluZVN0YXJ0T3ZlcmxheTphLHd0VGFibGU6ZCx3dFZpZXdwb3J0OmgsdG90YWxDb2x1bW5zOmYscm9vdFdp'@;
put 'bmRvdzp2fT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7bGV0IFQ9ZC5nZXRMYXN0VmlzaWJsZUNvbHVtbigpO2lmKGEubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT12KXtsZXQgcmU9bnVsbDtpZihsLmdldFNldHRpbmcoInJ0bE1vZGUiKSl7Y29uc3QgX2U9ZC5UQUJMRS5nZXRCb3VuZGlu'@;
put 'Z0NsaWVudFJlY3QoKTtyZT1NYXRoLmFicyhfZS5yaWdodC10aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm9vdFdpbmRvdy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0V2lkdGgpfWVsc2UgcmU9U2MoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IGZlPU1hdGguYWJzKF9UKHYsdikp'@;
put 'O2lmKHJlPmZlKXtjb25zdCBfZT11dyh2KTtsZXQga2U9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgV2U9MTtXZTw9ZjtXZSsrKWlmKGtlKz1hLnN1bUNlbGxTaXplcyhXZS0xLFdlKSxyZStrZS1mZT49X2Upe1Q9V2UtMjticmVha319fXJldHVybiBUfX07ZnVuY3Rpb24geG9lKGMs'@;
put 'bCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBBUGUoYyl7dmFyIGw9ZnVuY3Rpb24gTFBlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi'@;
put 'KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s'@;
put 'Ij09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geXcoYyxsKXtyZXR1cm4gZnVuY3Rpb24gSVBlKGMsbCl7'@;
put 'cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxrb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24ga29lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJu'@;
put 'IGwuZ2V0KGMpfXZhciBVZz1uZXcgV2Vha01hcDtjbGFzcyB3antjb25zdHJ1Y3RvcihsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07eG9lKHRoaXMsInJvdyIsbnVsbCkseG9lKHRoaXMsImNvbCIsbnVsbCksZnVuY3Rp'@;
put 'b24gVFBlKGMsbCxhKXsoZnVuY3Rpb24gRFBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxVZyx7d3JpdGFi'@;
put 'bGU6ITAsdmFsdWU6ITF9KSxmdW5jdGlvbiBSUGUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBPUGUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUg'@;
put 'ZmllbGQiKTtsLnZhbHVlPWF9fShjLGtvZShjLGwsInNldCIpLGEpLGF9KHRoaXMsVWcsZCksdHlwZW9mIGw8InUiJiZ0eXBlb2YgYTwidSImJih0aGlzLnJvdz1sLHRoaXMuY29sPWEpfWlzVmFsaWQobCl7cmV0dXJuISh0aGlzLnJvdzwwfHx0aGlzLmNvbDwwfHx0aGlzLnJvdz49bC5nZXRT'@;
put 'ZXR0aW5nKCJ0b3RhbFJvd3MiKXx8dGhpcy5jb2w+PWwuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIikpfWlzRXF1YWwobCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzU291dGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93Pj1sLnJvdyYm'@;
put 'KHl3KHRoaXMsVWcpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHl3KHRoaXMsVWcpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzU291dGhXZXN0T2YobCl7cmV0dXJuIHRoaXMucm93'@;
put 'Pj1sLnJvdyYmKHl3KHRoaXMsVWcpP3RoaXMuY29sPj1sLmNvbDp0aGlzLmNvbDw9bC5jb2wpfWlzTm9ydGhFYXN0T2YobCl7cmV0dXJuIHRoaXMucm93PD1sLnJvdyYmKHl3KHRoaXMsVWcpP3RoaXMuY29sPD1sLmNvbDp0aGlzLmNvbD49bC5jb2wpfW5vcm1hbGl6ZSgpe3JldHVybiB0aGlz'@;
put 'LnJvdz1udWxsPT09dGhpcy5yb3c/dGhpcy5yb3c6TWF0aC5tYXgodGhpcy5yb3csMCksdGhpcy5jb2w9bnVsbD09PXRoaXMuY29sP3RoaXMuY29sOk1hdGgubWF4KHRoaXMuY29sLDApLHRoaXN9Y2xvbmUoKXtyZXR1cm4gbmV3IHdqKHRoaXMucm93LHRoaXMuY29sLHl3KHRoaXMsVWcpKX10'@;
put 'b09iamVjdCgpe3JldHVybntyb3c6dGhpcy5yb3csY29sOnRoaXMuY29sfX19Y29uc3QgRlQ9d2o7ZnVuY3Rpb24gTWooYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIEhQZShjKXt2YXIgbD1mdW5jdGlvbiBOUGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBj'@;
put 'O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh'@;
put 'bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFi'@;
put 'bGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBFZihjLGwpe3JldHVybiBmdW5jdGlvbiBWUGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLEVvZShjLGwsImdldCIpKX1mdW5jdGlvbiBFb2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIGFoPW5ldyBXZWFrTWFwO2NsYXNzIENqe2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1l'@;
put 'bnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO01qKHRoaXMsImhpZ2hsaWdodCIsbnVsbCks'@;
put 'TWoodGhpcywiZnJvbSIsbnVsbCksTWoodGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIFBQZShjLGwsYSl7KGZ1bmN0aW9uIEZQZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24g'@;
put 'YW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsYWgse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRoaXMuZnJvbT1hLmNsb25lKCksdGhpcy50bz1kLmNsb25lKCksZnVuY3Rpb24galBlKGMsbCxhKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24gQlBlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxFb2UoYyxsLCJzZXQiKSxhKSxhfSh0'@;
put 'aGlzLGFoLGgpfXNldEhpZ2hsaWdodChsKXtyZXR1cm4gdGhpcy5oaWdobGlnaHQ9bC5jbG9uZSgpLm5vcm1hbGl6ZSgpLHRoaXN9c2V0RnJvbShsKXtyZXR1cm4gdGhpcy5mcm9tPWwuY2xvbmUoKSx0aGlzfXNldFRvKGwpe3JldHVybiB0aGlzLnRvPWwuY2xvbmUoKSx0aGlzfWlzVmFsaWQo'@;
put 'bCl7cmV0dXJuIHRoaXMuZnJvbS5pc1ZhbGlkKGwpJiZ0aGlzLnRvLmlzVmFsaWQobCl9aXNTaW5nbGUoKXtyZXR1cm4gdGhpcy5mcm9tLnJvdz49MCYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPj0wJiZ0aGlzLmZyb20uY29sPT09dGhpcy50by5jb2x9Z2V0'@;
put 'T3V0ZXJIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyktTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdykrMX1nZXRPdXRlcldpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLU1hdGgubWluKHRo'@;
put 'aXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKzF9Z2V0SGVpZ2h0KCl7aWYodGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwKXJldHVybiAwO2NvbnN0IGw9TWF0aC5tYXgodGhpcy5mcm9tLnJvdywwKSxhPU1hdGgubWF4KHRoaXMudG8ucm93LDApO3JldHVybiBNYXRoLm1heChsLGEpLU1h'@;
put 'dGgubWluKGwsYSkrMX1nZXRXaWR0aCgpe2lmKHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsMCksYT1NYXRoLm1heCh0aGlzLnRvLmNvbCwwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9'@;
put 'Z2V0Q2VsbHNDb3VudCgpe3JldHVybiB0aGlzLmdldFdpZHRoKCkqdGhpcy5nZXRIZWlnaHQoKX1pbmNsdWRlcyhsKXtjb25zdHtyb3c6YSxjb2w6ZH09bCxoPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGY9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybiBoLnJv'@;
put 'dzw9YSYmZi5yb3c+PWEmJmguY29sPD1kJiZmLmNvbD49ZH1pbmNsdWRlc1JhbmdlKGwpe3JldHVybiB0aGlzLmluY2x1ZGVzKGwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpKSYmdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCkpfWlzRXF1YWwobCl7cmV0dXJuIE1h'@;
put 'dGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5taW4obC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpPT09TWF0aC5tYXgobC5mcm9tLnJvdyxsLnRvLnJvdykmJk1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50'@;
put 'by5jb2wpPT09TWF0aC5taW4obC5mcm9tLmNvbCxsLnRvLmNvbCkmJk1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpPT09TWF0aC5tYXgobC5mcm9tLmNvbCxsLnRvLmNvbCl9b3ZlcmxhcHMobCl7cmV0dXJuIGwuaXNTb3V0aEVhc3RPZih0aGlzLmdldE91dGVyVG9wTGVmdENv'@;
put 'cm5lcigpKSYmbC5pc05vcnRoV2VzdE9mKHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmlzU291dGhFYXN0T2YobCl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlz'@;
put 'U291dGhFYXN0T2YobCl9aXNOb3J0aFdlc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc05vcnRoV2VzdE9mKGwpfWlzT3ZlcmxhcHBpbmdIb3Jpem9udGFsbHkobCl7'@;
put 'cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sfHx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5l'@;
put 'cigpLmNvbDw9bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkuY29sJiZ0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLmNvbD49bC5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENv'@;
put 'cm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93PD1sLmdldE91dGVyQm90'@;
put 'dG9tUmlnaHRDb3JuZXIoKS5yb3cmJnRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93fWV4cGFuZChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5l'@;
put 'cigpO3JldHVybihsLnJvdzxhLnJvd3x8bC5jb2w8YS5jb2x8fGwucm93PmQucm93fHxsLmNvbD5kLmNvbCkmJih0aGlzLmZyb209dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbihhLnJvdyxsLnJvdyksTWF0aC5taW4oYS5jb2wsbC5jb2wpKSx0aGlzLnRvPXRoaXMuX2NyZWF0ZUNl'@;
put 'bGxDb29yZHMoTWF0aC5tYXgoZC5yb3csbC5yb3cpLE1hdGgubWF4KGQuY29sLGwuY29sKSksITApfWV4cGFuZEJ5UmFuZ2UobCl7aWYodGhpcy5pbmNsdWRlc1JhbmdlKGwpfHwhdGhpcy5vdmVybGFwcyhsKSlyZXR1cm4hMTtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigp'@;
put 'LGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGg9dGhpcy5nZXREaXJlY3Rpb24oKSxmPWwuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9bC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLFQ9TWF0aC5taW4oYS5yb3csZi5yb3cpLFk9TWF0aC5taW4oYS5jb2wsZi5jb2wpLHJl'@;
put 'PU1hdGgubWF4KGQucm93LHYucm93KSxmZT1NYXRoLm1heChkLmNvbCx2LmNvbCksX2U9dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhULFkpLGtlPXRoaXMuX2NyZWF0ZUNlbGxDb29yZHMocmUsZmUpO3JldHVybiB0aGlzLmZyb209X2UsdGhpcy50bz1rZSx0aGlzLnNldERpcmVjdGlvbihoKSx0'@;
put 'aGlzLmhpZ2hsaWdodC5yb3c9PT10aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5yb3cmJiJOLVMiPT09dGhpcy5nZXRWZXJ0aWNhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCksdGhpcy5oaWdobGlnaHQuY29sPT09dGhpcy5nZXRPdXRlclRvcFJp'@;
put 'Z2h0Q29ybmVyKCkuY29sJiYiVy1FIj09PXRoaXMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpJiZ0aGlzLmZsaXBEaXJlY3Rpb25Ib3Jpem9udGFsbHkoKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20u'@;
put 'aXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJTRS1OVyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5m'@;
put 'cm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9t'@;
put 'TGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91'@;
put 'dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rp'@;
put 'b24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUiOiJFLVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIp'@;
put 'O2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7'@;
put 'c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nh'@;
put 'c2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3Jt'@;
put 'YWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIEVmKHRoaXMsYWgpP3RoaXMuZ2V0VG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5y'@;
put 'b3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBFZih0aGlzLGFoKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRU'@;
put 'b3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gRWYodGhpcyxh'@;
put 'aCk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRo'@;
put 'aXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiBFZih0aGlzLGFoKT90aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNl'@;
put 'bGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBFZih0aGlzLGFoKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRl'@;
put 'clRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdo'@;
put 'dENvcm5lcigpe3JldHVybiBFZih0aGlzLGFoKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20u'@;
put 'cm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BSaWdodENvcm5lcigpe3JldHVybiBFZih0aGlzLGFoKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJC'@;
put 'b3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gRWYodGhpcyxh'@;
put 'aCk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpfWlzQ29ybmVyKGwsYSl7cmV0dXJuISEoYSYmYS5pbmNsdWRlcyhsKSYmKHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNFcXVhbCh0aGlzLl9jcmVhdGVDZWxsQ29v'@;
put 'cmRzKGEuZnJvbS5yb3csYS5mcm9tLmNvbCkpfHx0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoYS5mcm9tLnJvdyxhLnRvLmNvbCkpfHx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRl'@;
put 'Q2VsbENvb3JkcyhhLnRvLnJvdyxhLmZyb20uY29sKSl8fHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhhLnRvLnJvdyxhLnRvLmNvbCkpKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpKXx8bC5p'@;
put 'c0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21MZWZ0Q29ybmVyKCkpfHxsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkpfWdldE9wcG9zaXRlQ29ybmVyKGwsYSl7aWYoIShsIGluc3RhbmNl'@;
put 'b2YgRlQpKXJldHVybiExO2lmKGEpe2NvbnN0e2Zyb206ZCx0bzpofT1hO2lmKGEuaW5jbHVkZXMobCkpe2lmKHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxkLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9t'@;
put 'RW5kQ29ybmVyKCk7aWYodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpLmlzRXF1YWwodGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxoLmNvbCkpKXJldHVybiB0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTtpZih0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5p'@;
put 'c0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csZC5jb2wpKSlyZXR1cm4gdGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpO2lmKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5pc0VxdWFsKHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3csaC5jb2wpKSlyZXR1cm4g'@;
put 'dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9fXJldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJC'@;
put 'b3R0b21FbmRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcEVuZENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTpsLmlzRXF1YWwodGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkpP3RoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKTp2b2lk'@;
put 'IDB9Z2V0Qm9yZGVyc1NoYXJlZFdpdGgobCl7aWYoIXRoaXMuaW5jbHVkZXNSYW5nZShsKSlyZXR1cm5bXTtjb25zdCBhX3RvcD1NYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2JvdHRvbT1NYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxhX2xlZnQ9TWF0'@;
put 'aC5taW4odGhpcy5mcm9tLmNvbCx0aGlzLnRvLmNvbCksYV9yaWdodD1NYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxkX3RvcD1NYXRoLm1pbihsLmZyb20ucm93LGwudG8ucm93KSxkX2JvdHRvbT1NYXRoLm1heChsLmZyb20ucm93LGwudG8ucm93KSxkX2xlZnQ9TWF0aC5t'@;
put 'aW4obC5mcm9tLmNvbCxsLnRvLmNvbCksZF9yaWdodD1NYXRoLm1heChsLmZyb20uY29sLGwudG8uY29sKSxoPVtdO3JldHVybiBhX3RvcD09PWRfdG9wJiZoLnB1c2goInRvcCIpLGFfcmlnaHQ9PT1kX3JpZ2h0JiZoLnB1c2goInJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNo'@;
put 'KCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaCgibGVmdCIpLGh9Z2V0SW5uZXIoKXtjb25zdCBsPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3Io'@;
put 'bGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKSh0aGlzLmZyb20ucm93IT09aHx8dGhpcy5mcm9tLmNvbCE9PWYpJiYodGhpcy50by5yb3chPT1ofHx0aGlzLnRvLmNvbCE9PWYpJiZkLnB1c2godGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1nZXRBbGwoKXtjb25zdCBsPXRo'@;
put 'aXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLGQ9W107Zm9yKGxldCBoPWwucm93O2g8PWEucm93O2grKylmb3IobGV0IGY9bC5jb2w7Zjw9YS5jb2w7ZisrKWQucHVzaChsLnJvdz09PWgmJmwuY29sPT09Zj9sOmEucm93PT09aCYm'@;
put 'YS5jb2w9PT1mP2E6dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTtyZXR1cm4gZH1mb3JBbGwobCl7Y29uc3QgYT10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxkPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0IGg9YS5yb3c7aDw9ZC5yb3c7aCsrKWZvcihs'@;
put 'ZXQgZj1hLmNvbDtmPD1kLmNvbDtmKyspaWYoITE9PT1sKGgsZikpcmV0dXJufWNsb25lKCl7cmV0dXJuIG5ldyBDaih0aGlzLmhpZ2hsaWdodCx0aGlzLmZyb20sdGhpcy50byxFZih0aGlzLGFoKSl9dG9PYmplY3QoKXtyZXR1cm57ZnJvbTp0aGlzLmZyb20udG9PYmplY3QoKSx0bzp0aGlz'@;
put 'LnRvLnRvT2JqZWN0KCl9fV9jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIG5ldyBGVChsLGEsRWYodGhpcyxhaCkpfX1jb25zdCBTaj1DajtmdW5jdGlvbiBtMihjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gWVBlKGMpe3ZhciBsPWZ1bmN0aW9uIHpQZShjLGwpe2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6'@;
put 'YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIHhqe2dldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gbmV3IGpsKHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7bTIodGhpcywid3RUYWJsZSIsdm9pZCAwKSxtMih0aGlzLCJ3dFNjcm9sbCIs'@;
put 'dm9pZCAwKSxtMih0aGlzLCJ3dFZpZXdwb3J0Iix2b2lkIDApLG0yKHRoaXMsInd0T3ZlcmxheXMiLHZvaWQgMCksbTIodGhpcywic2VsZWN0aW9ucyIsdm9pZCAwKSxtMih0aGlzLCJ3dEV2ZW50Iix2b2lkIDApLG0yKHRoaXMsImd1aWQiLGB3dF8ke0JWKCl9YCksbTIodGhpcywiZHJhd0lu'@;
put 'dGVycnVwdGVkIiwhMSksbTIodGhpcywiZHJhd24iLCExKSxtMih0aGlzLCJkb21CaW5kaW5ncyIsdm9pZCAwKSxtMih0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzps'@;
put 'Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9bmV3IEVQZSh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlcy5sZW5ndGgm'@;
put 'JnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXtmb3IobGV0IGE9MCxkPXRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspbC5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBd'@;
put 'LmNoaWxkTm9kZXNbYV0uaW5uZXJIVE1MKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgiY29sdW1uSGVhZGVycyIsW2Z1bmN0aW9uKGEsZCl7bm0oZCxsW2FdKX1dKX19Y3JlYXRlQ2VsbENvb3Jkcyhs'@;
put 'LGEpe3JldHVybiBuZXcgRlQobCxhLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikpfWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIG5ldyBTaihsLGEsZCx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1kcmF3KCl7bGV0IGw9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5kcmF3SW50ZXJydXB0ZWQ9ITEsbHx8dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpP3RoaXMud3RUYWJsZS5kcmF3KGwpOnRoaXMuZHJhd0ludGVycnVwdGVkPSEwLHRoaXN9Z2V0Q2VsbChs'@;
put 'KXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pKXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxoPXRoaXMud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKGwucm93PGgmJmwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50'@;
put 'b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGgpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLmNvbDx2JiZsLnJvdz49ZC1mKXtpZih0aGlzLnd0T3ZlcmxheXMu'@;
put 'Ym90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1l'@;
put 'bHNle2lmKGwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGQmJmwucm93Pj1kLWYmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3Zlcmxh'@;
put 'eS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpfXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKX1zY3JvbGxWaWV3cG9ydChsLGEsZCxoLGYpe3JldHVybiEobC5jb2w8MHx8bC5yb3c8MCkmJnRoaXMud3RTY3Jv'@;
put 'bGwuc2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKX1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl7cmV0dXJuIShsPDApJiZ0aGlzLnd0U2Nyb2xsLnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSxkKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpe3JldHVybiEo'@;
put 'bDwwKSYmdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpfWdldFZpZXdwb3J0KCl7cmV0dXJuW3RoaXMud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSx0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCksdGhpcy53dFRhYmxlLmdldExhc3RW'@;
put 'aXNpYmxlUm93KCksdGhpcy53dFRhYmxlLmdldExhc3RWaXNpYmxlQ29sdW1uKCldfWRlc3Ryb3koKXt0aGlzLnd0T3ZlcmxheXMuZGVzdHJveSgpLHRoaXMud3RFdmVudC5kZXN0cm95KCl9Y3JlYXRlU2Nyb2xsRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgZHJhd24oKXtyZXR1cm4g'@;
put 'bC5kcmF3bn0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IHd0VGFibGUoKXtyZXR1cm4gbC53dFRhYmxlfSxnZXQgd3RWaWV3'@;
put 'cG9ydCgpe3JldHVybiBsLnd0Vmlld3BvcnR9LGdldCB3dFNldHRpbmdzKCl7cmV0dXJuIGwud3RTZXR0aW5nc30sZ2V0IHJvb3RXaW5kb3coKXtyZXR1cm4gbC5kb21CaW5kaW5ncy5yb290V2luZG93fSxnZXQgdG90YWxSb3dzKCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0'@;
put 'b3RhbFJvd3MiKX0sZ2V0IHRvdGFsQ29sdW1ucygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIil9LGdldCBmaXhlZFJvd3NUb3AoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfSxnZXQgZml4ZWRSb3dzQm90dG9t'@;
put 'KCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX0sZ2V0IGZpeGVkQ29sdW1uc1N0YXJ0KCl7cmV0dXJuIGwud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpfX19Z2V0VGFibGVEYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJu'@;
put 'e2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHBhcmVudFRhYmxlT2Zmc2V0KCl7cmV0dXJuIGwuY2xvbmVTb3VyY2Uud3RUYWJsZS50YWJsZU9mZnNldH0sZ2V0IGNsb25lU291cmNlKCl7cmV0dXJuIGwuY2xvbmVTb3VyY2V9LGdldCB3b3Jrc3BhY2VXaWR0aCgpe3JldHVybiBsLnd0Vmlld3Bv'@;
put 'cnQuZ2V0V29ya3NwYWNlV2lkdGgoKX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RPdmVybGF5cygpe3JldHVybiBsLnd0T3ZlcmxheXN9LGdldCBzZWxlY3Rpb25zKCl7cmV0dXJuIGwuc2VsZWN0aW9uc30sZ2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259'@;
put 'LHNldCBkcmF3bihhKXtsLmRyYXduPWF9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHN0YXJ0Q29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5WaXNpYmxlKCl7'@;
put 'cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59LGdldCBlbmRDb2x1bW5SZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uVmlzaWJsZSgpe3JldHVy'@;
put 'biBsLnd0Vmlld3BvcnQuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGNvdW50Q29sdW1uc1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Q29sdW1uc1Zpc2libGUoKXtyZXR1cm4gbC53'@;
put 'dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlz'@;
put 'aWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9LGdldCBlbmRSb3dSZW5kZXJlZCgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1Zpc2libGVDYWxjdWxhdG9yLmVuZFJvd30s'@;
put 'Z2V0IGNvdW50Um93c1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Um93c1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH19fX1mdW5jdGlvbiBUb2UoYyxsLGEp'@;
put 'e3JldHVybiBsPWZ1bmN0aW9uIFVQZShjKXt2YXIgbD1mdW5jdGlvbiBaUGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm'@;
put 'KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10'@;
put 'eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBXUGUgZXh0ZW5kcyB4antjb25zdHJ1Y3RvcihsLGEsZCl7c3VwZXIo'@;
put 'bCxhKSxUb2UodGhpcywiY2xvbmVTb3VyY2UiLHZvaWQgMCksVG9lKHRoaXMsImNsb25lT3ZlcmxheSIsdm9pZCAwKTtjb25zdCBoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmYWNhZGUiLHRoaXMpO3RoaXMuY2xvbmVTb3VyY2U9ZC5zb3VyY2UsdGhpcy5jbG9uZU92ZXJsYXk9ZC5v'@;
put 'dmVybGF5LHRoaXMud3RUYWJsZT10aGlzLmNsb25lT3ZlcmxheS5jcmVhdGVUYWJsZSh0aGlzLmdldFRhYmxlRGFvKCksaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdwb3J0PWQudmlld3BvcnQsdGhpcy5zZWxlY3Rpb25zPWQuc2VsZWN0aW9ucyx0aGlz'@;
put 'Lnd0RXZlbnQ9bmV3IF9vZShoLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSx0aGlzLnNlbGVjdGlvbnMsZC5ldmVudCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9fWNsYXNzIGJ3e2NvbnN0cnVjdG9yKGwsYSxkLGgs'@;
put 'Zil7KGZ1bmN0aW9uIEdQZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gJFBlKGMpe3ZhciBsPWZ1bmN0aW9uIHFQZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu'@;
put 'Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry'@;
put 'aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVs'@;
put 'bCksQ2YodGhpcywid290IixsLHt3cml0YWJsZTohMX0pLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6VCxzcHJlYWRlcjpZLGhvbGRlcjpyZSx3dFJvb3RFbGVtZW50OmZlfT10aGlzLndvdC53dFRh'@;
put 'YmxlO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy50eXBlPWQsdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD1udWxsLHRoaXMuVEFCTEU9dix0aGlzLmhpZGVyPVQsdGhpcy5zcHJlYWRlcj1ZLHRoaXMuaG9sZGVyPXJlLHRoaXMud3RSb290RWxlbWVudD1mZSx0aGlzLnRyaW1t'@;
put 'aW5nQ29udGFpbmVyPU5nKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKSx0aGlzLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9dXBkYXRlU3RhdGVPZlJlbmRlcmluZygpe2NvbnN0IGw9dGhpcy5uZWVkRnVsbFJlbmRlcjt0aGlz'@;
put 'Lm5lZWRGdWxsUmVuZGVyPXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpO2NvbnN0IGE9bCE9PXRoaXMubmVlZEZ1bGxSZW5kZXI7cmV0dXJuIGEmJiF0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnJlc2V0KCksYX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuITB9dXBkYXRlVHJpbW1pbmdDb250'@;
put 'YWluZXIoKXt0aGlzLnRyaW1taW5nQ29udGFpbmVyPU5nKHRoaXMuaGlkZXIucGFyZW50Tm9kZS5wYXJlbnROb2RlKX11cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKXtjb25zdHt3dFRhYmxlOmx9PXRoaXMud290LHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT90aGlzLndvdC53dFRhYmxlLmhvbGRlcjpjdyhsLlRBQkxFKX1nZXRSZWxhdGl2ZUNlbGxQb3Np'@;
put 'dGlvbihsLGEsZCl7aWYoITE9PT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLmNvbnRhaW5zKGwpKXJldHVybiB2b2lkIGJsKGBUaGUgcHJvdmlkZWQgZWxlbWVudCBpcyBub3QgYSBjaGlsZCBvZiB0aGUgJHt0aGlzLnR5cGV9IG92ZXJsYXlgKTtjb25zdCBoPXRoaXMubWFpblRhYmxlU2Ny'@;
put 'b2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZj1kPHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YTx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksVD1hPj10aGlzLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygidG90YWxSb3dzIiktdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLFk9dGhpcy5jbG9uZS53dFRhYmxlLnNwcmVhZGVyLHJlPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihZKSx0b3A6WS5vZmZzZXRUb3B9LGZlPXtz'@;
put 'dGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRUb3B9O2xldCBfZT1udWxsO3JldHVybiBfZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5XaW5kb3codixmLGZlLHJlKTp0aGlzLmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGlu'@;
put 'SG9sZGVyKHYsVCxmLGZlLHJlKSxfZX1nZXRSZWxhdGl2ZVN0YXJ0UG9zaXRpb24obCl7cmV0dXJuIHRoaXMuaXNSdGwoKT9sLm9mZnNldFBhcmVudC5vZmZzZXRXaWR0aC1sLm9mZnNldExlZnQtbC5vZmZzZXRXaWR0aDpsLm9mZnNldExlZnR9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRo'@;
put 'aW5XaW5kb3cobCxhLGQsaCl7Y29uc3QgZj10aGlzLndvdC53dFRhYmxlLnd0Um9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IHY9MCxUPTA7aWYoYSl7bGV0IFk9Zi5sZWZ0O3RoaXMuaXNSdGwoKSYmKFk9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LmlubmVyV2lk'@;
put 'dGgtKGYubGVmdCtmLndpZHRoK2Z1KCkpKSx2PVk8PTA/LTEqWTowfWVsc2Ugdj1oLnN0YXJ0O3JldHVybiBUPWw/dGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1mLnRvcDpoLnRvcCx7c3RhcnQ6ZC5zdGFydCt2LHRvcDpkLnRvcCtUfX1nZXRS'@;
put 'ZWxhdGl2ZUNlbGxQb3NpdGlvbldpdGhpbkhvbGRlcihsLGEsZCxoLGYpe2NvbnN0IHZfaG9yaXpvbnRhbD10aGlzLndvdC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpLHZfdmVydGljYWw9dGhpcy53b3Qud3RPdmVybGF5cy50b3BPdmVybGF5Lmdl'@;
put 'dFNjcm9sbFBvc2l0aW9uKCk7bGV0IFQ9MCxZPTA7aWYoZHx8KFQ9dl9ob3Jpem9udGFsLWYuc3RhcnQpLGEpe2NvbnN0IHJlPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtZPS0xKnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3Vu'@;
put 'ZGluZ0NsaWVudFJlY3QoKS50b3ArcmUudG9wfWVsc2UgbHx8KFk9dl92ZXJ0aWNhbC1mLnRvcCk7cmV0dXJue3N0YXJ0Omguc3RhcnQtVCx0b3A6aC50b3AtWX19bWFrZUNsb25lKCl7aWYoLTE9PT1nUGUuaW5kZXhPZih0aGlzLnR5cGUpKXRocm93IG5ldyBFcnJvcihgQ2xvbmUgdHlwZSAi'@;
put 'JHt0aGlzLnR5cGV9IiBpcyBub3Qgc3VwcG9ydGVkLmApO2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Qse3Jvb3REb2N1bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPWEuY3JlYXRlRWxlbWVudCgiRElWIiksZj1hLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIiksdj1sLnd0'@;
put 'Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtoLmNsYXNzTmFtZT1gJHtfUGUuZ2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsaC5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgpPyJydGwiOiJsdHIiKSxoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5zdHlsZS50b3A9MCxoLnN0'@;
put 'eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/aC5zdHlsZS5yaWdodD0wOmguc3R5bGUubGVmdD0wLGYuY2xhc3NOYW1lPWwuVEFCTEUuY2xhc3NOYW1lLGguYXBwZW5kQ2hpbGQoZiksdi5hcHBlbmRDaGlsZChoKTtjb25zdCBUPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5n'@;
put 'KCJwcmV2ZW50T3ZlcmZsb3ciKTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD0hMD09PVR8fCJob3Jpem9udGFsIj09PVQmJnRoaXMudHlwZT09PUJnfHwidmVydGljYWwiPT09VCYmdGhpcy50eXBlPT09WWc/ZDoiaGlkZGVuIj09PWQuZ2V0Q29tcHV0ZWRTdHlsZSh2'@;
put 'KS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpP2wuaG9sZGVyOmN3KGwuVEFCTEUpLG5ldyBXUGUoZix0aGlzLnd0U2V0dGluZ3Mse3NvdXJjZTp0aGlzLndvdCxvdmVybGF5OnRoaXMsdmlld3BvcnQ6dGhpcy53b3Qud3RWaWV3cG9ydCxldmVudDp0aGlzLndvdC53dEV2ZW50LHNlbGVj'@;
put 'dGlvbnM6dGhpcy53b3Quc2VsZWN0aW9uc30pfXJlZnJlc2goKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2NvbnN0IGE9dGhpcy5zaG91bGRCZVJlbmRlcmVkKCk7dGhpcy5jbG9uZSYmKHRoaXMubmVlZEZ1bGxSZW5kZXJ8'@;
put 'fGEpJiZ0aGlzLmNsb25lLmRyYXcobCksdGhpcy5uZWVkRnVsbFJlbmRlcj1hfXJlc2V0KCl7aWYoIXRoaXMuY2xvbmUpcmV0dXJuO2NvbnN0IGw9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlcjtSbihbbC5zdHlsZSx0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUsbC5wYXJlbnROb2Rl'@;
put 'LnN0eWxlXSx2PT57di53aWR0aD0iIix2LmhlaWdodD0iIn0pfWlzUnRsKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIil9ZGVzdHJveSgpe3RoaXMuY2xvbmUuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKX19Y2xhc3MgUVBlIGV4dGVuZHMgYnd7Y29uc3RydWN0'@;
put 'b3IobCxhLGQsaCl7c3VwZXIobCxhLEJnLGQsaCksZnVuY3Rpb24gS1BlKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBYUGUoYyl7dmFyIGw9ZnVuY3Rpb24gSlBlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2'@;
put 'ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1s'@;
put 'P1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h'@;
put 'LGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c1RvcCIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzVG9wPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7'@;
put 'ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgQ1BlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRl'@;
put 'cnx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3Zl'@;
put 'cmZsb3ciKTtsZXQgaD0wLGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLGh3KGwpO2Vsc2V7Y29uc3R7d3RUYWJsZTpUfT10aGlzLndvdCxZPVQuaGlkZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0'@;
put 'KCk7Zj1NYXRoLmNlaWwoWS5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQsaD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSx2VChsLCIwcHgiLGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVudHNTaXpl'@;
put 'KCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdztsZXQgZD0hMTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEmJmEuc2Nyb2xsWSE9PWw/KGEuc2Nyb2xsVG8oSGcoYSksbCksZD0hMCk6dGhpcy5tYWlu'@;
put 'VGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2VsbFNpemVz'@;
put 'KGwsYSl7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpO2xldCBoPWwsZj0wO2Zvcig7aDxhOyl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChoKTtmKz12b2lkIDA9PT12P2Q6dixoKz0xfXJldHVybiBmfWFkanVzdEVs'@;
put 'ZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCh0aGlzLm5lZWRGdWxsUmVuZGVyfHxsKSYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhp'@;
put 'cy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Qse3Jvb3REb2N1bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPWZ1KGEpLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJl'@;
put 'bnROb2RlLnN0eWxlLFQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1kfHwiaG9yaXpvbnRhbCI9PT1UKXtsZXQgcmU9dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpO3RoaXMud290'@;
put 'Lnd0T3ZlcmxheXMuaGFzU2Nyb2xsYmFyUmlnaHQmJihyZS09aCkscmU9TWF0aC5taW4ocmUsbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSx2LndpZHRoPWAke3JlfXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xl'@;
put 'dCBZPVZsKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7dGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoWT0wKSx2LmhlaWdodD1gJHtZfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7dmFyIGw7Y29uc3R7aG9sZGVyOmF9PXRoaXMuY2xvbmUud3RUYWJsZSx7c2VsZWN0'@;
put 'aW9uczpkfT10aGlzLndvdCxoPXRoaXMuZmFjYWRlR2V0dGVyKCksZj1NYXRoLmFicyhudWxsIT09KGw9ZD8uZ2V0Q2VsbCgpLmdldEJvcmRlcihoKS5jb3JuZXJDZW50ZXJQb2ludE9mZnNldCkmJnZvaWQgMCE9PWw/bDowKTt0aGlzLmNsb25lLnd0VGFibGUuaGlkZXIuc3R5bGUud2lkdGg9'@;
put 'dGhpcy5oaWRlci5zdHlsZS53aWR0aCxhLnN0eWxlLndpZHRoPWEucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxhLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChhLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LDEwKStmfXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0'@;
put 'U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5z'@;
put 'dGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxs'@;
put 'UmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdw'@;
put 'b3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2NvbnN0e3dvdDpkLHd0U2V0dGluZ3M6aH09dGhpcyx2PShkLmNsb25l'@;
put 'U291cmNlP2QuY2xvbmVTb3VyY2U6ZCkud3RUYWJsZS5ob2xkZXI7bGV0IFQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLFk9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxh'@;
put 'JiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYoWT1mdSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGEpe2NvbnN0IHJlPWguZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksZmU9aC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtUKz10aGlzLnN1bUNlbGxTaXpl'@;
put 'cygwLGwrMSksVC09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCktdGhpcy5zdW1DZWxsU2l6ZXMoZmUtcmUsZmUpLFQrPTF9ZWxzZSBUKz10aGlzLnN1bUNlbGxTaXplcyhoLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGwpO3JldHVybiBUKz1ZLHRoaXMuc2V0U2Nyb2xsUG9z'@;
put 'aXRpb24oVCl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBs'@;
put 'dyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ci'@;
put 'KTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNjcm9s'@;
put 'bFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD10'@;
put 'aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT9zcyhkLCJlbXB0eUNvbHVtbnMiKTp3aShkLCJlbXB0eUNvbHVtbnMiKTtsZXQgZj0hMTtpZighYSl7Y29uc3Qgdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0'@;
put 'dGluZygiZml4ZWRSb3dzVG9wIiksVD10aGlzLmNhY2hlZEZpeGVkUm93c1RvcCE9PXYsWT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2lmKChUfHwwPT09dikmJlkubGVuZ3RoPjApe2NvbnN0IHJlPVFvKGQsImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNo'@;
put 'ZWRGaXhlZFJvd3NUb3A9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KHdpKGQsImlubmVyQm9yZGVyVG9wIiksZj0hcmUpOihzcyhkLCJpbm5lckJvcmRlclRvcCIpLGY9cmUp'@;
put 'fX1yZXR1cm4gZn19Y29uc3QgRG9lPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiksbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksYT1jLWw7cmV0dXJuIDA9PT1jfHwwPT09'@;
put 'bD8tMTphPDA/MDphfSxnZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRSb3dzQ291bnQoKXtjb25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGMp'@;
put 'fSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKX19O0NmKERvZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NCb3R0b20iLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgQW9lPURvZTtjbGFzcyBraiBleHRlbmRzIF85e2Nv'@;
put 'bnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgseGYpfX1HYShraixBb2UpLEdhKGtqLHZqKTtjb25zdCB0RmU9a2o7Y2xhc3Mgb0ZlIGV4dGVuZHMgYnd7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLHhmLGQsaCksZnVuY3Rpb24gbkZlKGMsbCxhKXtyZXR1cm4gbD1mdW5j'@;
put 'dGlvbiByRmUoYyl7dmFyIGw9ZnVuY3Rpb24gaUZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJp'@;
put 'bmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNhY2hlZEZpeGVkUm93c0JvdHRvbSIsLTEpLHRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9t'@;
put 'PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgdEZlKC4uLmEpfXNob3VsZEJlUmVu'@;
put 'ZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXkiKX1yZXNldEZpeGVkUG9zaXRpb24oKXtpZighdGhpcy5uZWVkRnVsbFJlbmRlcnx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29u'@;
put 'c3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2Euc3R5bGUudG9wPSIiO2xldCBkPTA7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy50cmltbWluZ0Nv'@;
put 'bnRhaW5lciE9PWx8fGgmJiJ2ZXJ0aWNhbCI9PT1oPyhkPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5KCkpOihkPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLGEuc3R5bGUuYm90dG9tPWAke2R9cHhgKTtjb25zdCBmPXRoaXMuYWRqdXN0SGVhZGVyQm9y'@;
put 'ZGVyc1Bvc2l0aW9uKGQpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGZ9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUu'@;
put 'aG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWZ1KGQpKSxoLnN0eWxlLmJv'@;
put 'dHRvbT1gJHtmfXB4YH1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hPyhhLnNjcm9sbFRvKEhnKGEpLGwpLGQ9ITApOnRoaXMubWFpblRhYmxl'@;
put 'U2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wIT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEp'@;
put 'e2NvbnN0e3d0VGFibGU6ZCx3dFNldHRpbmdzOmh9PXRoaXMud290LGY9aC5nZXRTZXR0aW5nKCJkZWZhdWx0Um93SGVpZ2h0Iik7bGV0IHY9bCxUPTA7Zm9yKDt2PGE7KXtjb25zdCBZPWQuZ2V0Um93SGVpZ2h0KHYpO1QrPXZvaWQgMD09PVk/ZjpZLHYrPTF9cmV0dXJuIFR9YWRqdXN0RWxl'@;
put 'bWVudHNTaXplKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksKHRoaXMubmVlZEZ1bGxSZW5kZXJ8fGwpJiYodGhpcy5hZGp1c3RSb290RWxlbWVudFNpemUoKSx0aGlz'@;
put 'LmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyxmPWZ1KGQpLFQ9dGhpcy5jbG9uZS53dFRhYmxl'@;
put 'LmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLFk9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1ZKXtsZXQgZmU9YS5nZXRXb3Jrc3BhY2VXaWR0aCgpO3RoaXMud290Lnd0T3Zl'@;
put 'cmxheXMuaGFzU2Nyb2xsYmFyUmlnaHQmJihmZS09ZiksZmU9TWF0aC5taW4oZmUsbC53dFJvb3RFbGVtZW50LnNjcm9sbFdpZHRoKSxULndpZHRoPWAke2ZlfXB4YH1lbHNlIFQud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD1ULndpZHRoO2xldCByZT1W'@;
put 'bCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3RoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KHJlPTApLFQuaGVpZ2h0PWAke3JlfXB4YH1hZGp1c3RSb290Q2hpbGRyZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZTt0aGlzLmNsb25lLnd0VGFi'@;
put 'bGUuaGlkZXIuc3R5bGUud2lkdGg9dGhpcy5oaWRlci5zdHlsZS53aWR0aCxsLnN0eWxlLndpZHRoPWwucGFyZW50Tm9kZS5zdHlsZS53aWR0aCxsLnN0eWxlLmhlaWdodD1sLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0fWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0'@;
put 'YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVlZEZ1bGxS'@;
put 'ZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3Bv'@;
put 'cnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7bGV0IGQ9dGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpO2NvbnN0IGY9'@;
put 'KHRoaXMud290LmNsb25lU291cmNlP3RoaXMud290LmNsb25lU291cmNlOnRoaXMud290KS53dFRhYmxlLmhvbGRlcjtsZXQgdj0wO2EmJmYub2Zmc2V0SGVpZ2h0IT09Zi5jbGllbnRIZWlnaHQmJih2PWZ1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksYT8oZCs9dGhpcy5zdW1D'@;
put 'ZWxsU2l6ZXMoMCxsKzEpLGQtPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0Vmlld3BvcnRIZWlnaHQoKSxkKz0xKTpkKz10aGlzLnN1bUNlbGxTaXplcyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbCksZCs9dix0aGlzLnNldFNjcm9sbFBvc2l0aW9uKGQp'@;
put 'fWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy53b3Qud3RUYWJsZS5ob2xkZXJPZmZzZXQudG9wOjB9Z2V0U2Nyb2xsUG9zaXRpb24oKXtyZXR1cm4gbHcodGhpcy5t'@;
put 'YWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3cpfWdldE92ZXJsYXlPZmZzZXQoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7bGV0IGQ9'@;
put 'MDtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09bCYmKCFhfHwidmVydGljYWwiIT09YSkpe2NvbnN0IGg9dGhpcy53b3Qud3RUYWJsZS5nZXRUb3RhbEhlaWdodCgpLHY9aC10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSxUPXRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3Vt'@;
put 'ZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7ZD1NYXRoLm1heCh0aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCktdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLVQraCwwKSxkPnYmJihkPTApfXJldHVybiBkfWFkanVzdEhlYWRlckJvcmRlcnNQb3NpdGlvbihsKXtjb25zdCBhPXRo'@;
put 'aXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxkPXRoaXMuY2FjaGVkRml4ZWRSb3dzQm90dG9tIT09YSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7bGV0IGY9ITE7aWYoKGR8fDA9PT1hKSYmaC5sZW5ndGg+MCl7Y29uc3Qg'@;
put 'dj10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLFQ9UW8odiwiaW5uZXJCb3JkZXJCb3R0b20iKTt0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbHx8MD09PXRoaXMud3RTZXR0aW5ncy5nZXRT'@;
put 'ZXR0aW5nKCJ0b3RhbFJvd3MiKT8od2kodiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPSFUKTooc3ModiwiaW5uZXJCb3JkZXJCb3R0b20iKSxmPVQpfXJldHVybiBmfX1jb25zdCBMb2U9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJv'@;
put 'd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNz'@;
put 'T2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7cmV0dXJuIHRoaXMu'@;
put 'ZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NSZW5kZXJlZH0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY291bnRSb3dzVmlzaWJsZX19O0NmKExvZSwiTUlYSU5fTkFNRSIsImNhbGN1bGF0ZWRSb3dzIix7d3JpdGFibGU6ITEsZW51bWVyYWJs'@;
put 'ZTohMX0pO2NvbnN0IElvZT1Mb2UsUm9lPXtnZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZENv'@;
put 'bHVtbigpfSxnZXRMYXN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLTF9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9LGdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl7Y29uc3Qg'@;
put 'Yz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7cmV0dXJuIE1hdGgubWluKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLGMpfSxnZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1'@;
put 'bW5zQ291bnQoKX19O0NmKFJvZSwiTUlYSU5fTkFNRSIsInN0aWNreUNvbHVtbnNTdGFydCIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBFaj1Sb2U7Y2xhc3MgVGogZXh0ZW5kcyBfOXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLFlnKX19R2EoVGosSW9l'@;
put 'KSxHYShUaixFaik7Y29uc3QgbEZlPVRqO2NsYXNzIGNGZSBleHRlbmRzIGJ3e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxZZyxkLGgpfWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVu'@;
put 'dHNbZF07cmV0dXJuIG5ldyBsRmUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d3RUYWJsZTpsfT10aGlzLndvdDtpZigh'@;
put 'dGhpcy5uZWVkRnVsbFJlbmRlcnx8IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRP'@;
put 'dmVyZmxvdyIpO2xldCBmPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLGh3KGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLHZUKGQsYCR7Zn1weGAsIjBw'@;
put 'eCIpKTtjb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3JldHVybiB0aGlzLmlz'@;
put 'UnRsKCkmJihsPS1sKSx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YSYmYS5zY3JvbGxYIT09bD8oYS5zY3JvbGxUbyhsLGw5KGEpKSxkPSEwKTp0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxl'@;
put 'RWxlbWVudC5zY3JvbGxMZWZ0PWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbFZlcnRpY2FsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTts'@;
put 'ZXQgaD1sLGY9MDtmb3IoO2g8YTspZis9dGhpcy53b3Qud3RUYWJsZS5nZXRTdHJldGNoZWRDb2x1bW5XaWR0aChoKXx8ZCxoKz0xO3JldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNb'@;
put 'MF07dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCh0aGlzLm5lZWRGdWxsUmVuZGVyfHxsKSYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFibGU6bH09dGhp'@;
put 'cy53b3Qse3Jvb3REb2N1bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPWZ1KGEpLHY9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLFQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJp'@;
put 'bW1pbmdDb250YWluZXIhPT1kfHwidmVydGljYWwiPT09VCl7bGV0IHJlPXRoaXMud290Lnd0Vmlld3BvcnQuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7dGhpcy53b3Qud3RPdmVybGF5cy5oYXNTY3JvbGxiYXJCb3R0b20mJihyZS09aCkscmU9TWF0aC5taW4ocmUsbC53dFJvb3RFbGVtZW50LnNj'@;
put 'cm9sbEhlaWdodCksdi5oZWlnaHQ9YCR7cmV9cHhgfWVsc2Ugdi5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQ9di5oZWlnaHQ7Y29uc3QgWT1OYSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO3Yud2lkdGg9YCR7WX1weGB9YWRqdXN0Um9vdENoaWxk'@;
put 'cmVuU2l6ZSgpe3ZhciBsO2NvbnN0e2hvbGRlcjphfT10aGlzLmNsb25lLnd0VGFibGUse3NlbGVjdGlvbnM6ZH09dGhpcy53b3QsaD10aGlzLmZhY2FkZUdldHRlcigpLGY9TWF0aC5hYnMobnVsbCE9PShsPWQ/LmdldENlbGwoKS5nZXRCb3JkZXIoaCkuY29ybmVyQ2VudGVyUG9pbnRPZmZz'@;
put 'ZXQpJiZ2b2lkIDAhPT1sP2w6MCk7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLmhlaWdodD10aGlzLmhpZGVyLnN0eWxlLmhlaWdodCxhLnN0eWxlLmhlaWdodD1hLnBhcmVudE5vZGUuc3R5bGUuaGVpZ2h0LGEuc3R5bGUud2lkdGg9YCR7cGFyc2VJbnQoYS5wYXJlbnROb2RlLnN0'@;
put 'eWxlLndpZHRoLDEwKStmfXB4YH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksYT10aGlzLmlzUnRsKCk/InJpZ2h0IjoibGVmdCI7aWYoIm51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5k'@;
put 'ZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZVthXT1gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2Yg'@;
put 'dGhlIGNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZVthXT0iMCJ9dGhpcy5pc1J0bCgpP3RoaXMuc3ByZWFkZXIuc3R5bGUubGVmdD0iIjp0aGlzLnNwcmVhZGVyLnN0eWxlLnJpZ2h0PSIiLHRoaXMubmVlZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlP'@;
put 'ZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe3RoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlci5zdHlsZS50b3A9Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dz'@;
put 'UmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0'@;
put 'IHY9MDtyZXR1cm4gYSYmdGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGE9ITEpLGEmJmYub2Zmc2V0V2lkdGghPT1mLmNsaWVudFdpZHRoJiYodj1mdSh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVu'@;
put 'dCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksbCksZCs9dix0aGlzLnNldFNj'@;
put 'cm9sbFBvc2l0aW9uKGQpfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7bGV0IGE9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoYT10aGlzLndv'@;
put 'dC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0KSxhfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE1hdGguYWJzKF9UKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KSl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5k'@;
put 'b3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO3JldHVybiB0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8YSYmImhvcml6b250YWwiPT09YXx8KGQ9dGhpcy5pc1J0bCgpP01hdGguYWJzKE1hdGgu'@;
put 'bWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksMCkpOk1hdGgubWF4KHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD50aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKS10aGlz'@;
put 'LmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpJiYoZD0wKSksZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLndvdC53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxoPXRoaXMu'@;
put 'd3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKT9zcyhhLCJlbXB0eVJvd3MiKTp3aShhLCJlbXB0eVJvd3MiKTtsZXQgdj0hMTtpZihoJiYhZC5sZW5ndGgpd2koYSwiaW5uZXJCb3JkZXJMZWZ0'@;
put 'IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKTtlbHNlIGlmKCFoJiZkLmxlbmd0aCl7Y29uc3QgVD1RbyhhLCJpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7bD8od2koYSwiaW5uZXJCb3JkZXJMZWZ0IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSx2PSFUKTooc3MoYSwiaW5uZXJCb3JkZXJMZWZ0'@;
put 'IGlubmVyQm9yZGVySW5saW5lU3RhcnQiKSx2PVQpfXJldHVybiB2fX1jbGFzcyBEaiBleHRlbmRzIF85e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsemcpfX1HYShEaixDb2UpLEdhKERqLEVqKTtjb25zdCB1RmU9RGo7ZnVuY3Rpb24gT29lKGMsbCxhKXtyZXR1cm4gbD1m'@;
put 'dW5jdGlvbiBkRmUoYyl7dmFyIGw9ZnVuY3Rpb24gaEZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9'@;
put 'dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpT'@;
put 'dHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZkZlIGV4dGVuZHMgYnd7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSx6'@;
put 'ZyxkLGgpLE9vZSh0aGlzLCJ0b3BPdmVybGF5Iix2b2lkIDApLE9vZSh0aGlzLCJpbmxpbmVTdGFydE92ZXJsYXkiLHZvaWQgMCksdGhpcy50b3BPdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3'@;
put 'IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgdUZlKC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRp'@;
put 'bmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5o'@;
put 'b2xkZXIucGFyZW50Tm9kZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3ZUKGwsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRvcE92ZXJsYXkuZ2V0'@;
put 'T3ZlcmxheU9mZnNldCgpfXB4YCk6aHcobCk7bGV0IGE9VmwodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtjb25zdCBkPU5hKHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGE9MCksbC5zdHlsZS5oZWlnaHQ9YCR7'@;
put 'YX1weGAsbC5zdHlsZS53aWR0aD1gJHtkfXB4YCwhMX19Y2xhc3MgQWogZXh0ZW5kcyBfOXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLG9tKX19R2EoQWosQW9lKSxHYShBaixFaik7Y29uc3QgcEZlPUFqO2NsYXNzIG1GZSBleHRlbmRzIGJ3e2NvbnN0cnVjdG9yKGwsYSxk'@;
put 'LGgsZix2KXtzdXBlcihsLGEsb20sZCxoKSx0aGlzLmJvdHRvbU92ZXJsYXk9Zix0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJu'@;
put 'IG5ldyBwRmUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRG'@;
put 'aXhlZFBvc2l0aW9uKCl7Y29uc3R7d290Omx9PXRoaXM7aWYodGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLCFsLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoYS5zdHlsZS50b3A9'@;
put 'IiIsdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl7Y29uc3QgZj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksdj10aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO2Euc3R5bGVbdGhpcy5pc1J0'@;
put 'bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtmfXB4YCxhLnN0eWxlLmJvdHRvbT1gJHt2fXB4YH1lbHNlIGh3KGEpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtsZXQgZD1WbCh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGg9TmEodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1'@;
put 'cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoZD0wKSxhLnN0eWxlLmhlaWdodD1gJHtkfXB4YCxhLnN0eWxlLndpZHRoPWAke2h9cHhgLCExfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVu'@;
put 'dDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5o'@;
put 'YXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1mdShkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1weGB9fWZ1bmN0aW9uIGFwKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBnRmUoYyl7dmFyIGw9ZnVuY3Rpb24gX0ZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4g'@;
put 'Yzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2'@;
put 'YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJh'@;
put 'YmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgeUZlPWNsYXNzIHZGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7YXAodGhpcywid290IixudWxsKSxhcCh0aGlzLCJ0b3BPdmVybGF5IixudWxsKSxhcCh0aGlzLCJib3R0b21PdmVybGF5IixudWxsKSxhcCh0aGlzLCJpbmxp'@;
put 'bmVTdGFydE92ZXJsYXkiLG51bGwpLGFwKHRoaXMsInRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSIsbnVsbCksYXAodGhpcywiYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSxhcCh0aGlzLCJicm93c2VyTGluZUhlaWdodCIsdm9pZCAwKSxhcCh0aGlzLCJ3dFNldHRp'@;
put 'bmdzIixudWxsKSxhcCh0aGlzLCJyZXNpemVPYnNlcnZlciIsbmV3IFJlc2l6ZU9ic2VydmVyKGZlPT57UlQoKCk9PnshQXJyYXkuaXNBcnJheShmZSl8fCFmZS5sZW5ndGh8fHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkNvbnRhaW5lckVsZW1lbnRSZXNpemUiKX0pfSkpLHRoaXMu'@;
put 'd290PWwsdGhpcy53dFNldHRpbmdzPWgsdGhpcy5kb21CaW5kaW5ncz1kLHRoaXMuZmFjYWRlR2V0dGVyPWEsdGhpcy53dFRhYmxlPXY7Y29uc3R7cm9vdERvY3VtZW50OlQscm9vdFdpbmRvdzpZfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5ldmVudE1h'@;
put 'bmFnZXI9Zix0aGlzLnNjcm9sbGJhclNpemU9ZnUoVCk7Y29uc3QgcmU9ImhpZGRlbiI9PT1ZLmdldENvbXB1dGVkU3R5bGUodi53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD1yZT92LmhvbGRlcjpj'@;
put 'dyh2LlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLHRoaXMuaGFzU2Nyb2xsYmFyQm90dG9tPSExLHRoaXMuaGFzU2Nyb2xsYmFyUmlnaHQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5rZXlQcmVzc2VkPSExLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZT17d2lkdGg6bnVsbCxoZWlnaHQ6bnVs'@;
put 'bH0sdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9ITEsdGhpcy5pbml0QnJvd3NlckxpbmVIZWlnaHQoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksdGhpcy5sYXN0U2Nyb2xsWD1ZLnNjcm9sbFgsdGhpcy5sYXN0U2Nyb2xsWT1ZLnNjcm9sbFl9'@;
put 'Z2V0T3ZlcmxheXMoKXtjb25zdCBhPVt0aGlzLnRvcE92ZXJsYXksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XTtyZXR1cm4gYXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSYmYS5wdXNoKHRoaXMud3RUYWJsZSksYX1pbml0QnJvd3NlckxpbmVIZWlnaHQoKXtjb25zdHtyb290V2luZG93Omwscm9vdERvY3VtZW50OmF9PXRoaXMuZG9tQmluZGluZ3MsZD1sLmdldENvbXB1dGVk'@;
put 'U3R5bGUoYS5ib2R5KSxoPXBhcnNlSW50KGQubGluZUhlaWdodCwxMCksZj0xLjIqcGFyc2VJbnQoZC5mb250U2l6ZSwxMCk7dGhpcy5icm93c2VyTGluZUhlaWdodD1ofHxmfWluaXRPdmVybGF5cygpe2NvbnN0IGw9W3RoaXMud290LHRoaXMuZmFjYWRlR2V0dGVyLHRoaXMud3RTZXR0aW5n'@;
put 'cyx0aGlzLmRvbUJpbmRpbmdzXTt0aGlzLnRvcE92ZXJsYXk9bmV3IFFQZSguLi5sKSx0aGlzLmJvdHRvbU92ZXJsYXk9bmV3IG9GZSguLi5sKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheT1uZXcgY0ZlKC4uLmwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBmRmUoLi4u'@;
put 'bCx0aGlzLnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5PW5ldyBtRmUoLi4ubCx0aGlzLmJvdHRvbU92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkpfXVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXtsZXQg'@;
put 'bD10aGlzLnRvcE92ZXJsYXkudXBkYXRlU3RhdGVPZlJlbmRlcmluZygpO3JldHVybiBsPXRoaXMuYm90dG9tT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwsbD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwsdGhpcy5pbmxpbmVT'@;
put 'dGFydE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJih0aGlzLnRvcE92ZXJsYXkubmVlZEZ1bGxSZW5kZXImJihsPXRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmcoKXx8bCksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYobD10'@;
put 'aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS51cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKCl8fGwpKSxsfXJlZnJlc2hBbGwoKXtpZih0aGlzLndvdC5kcmF3bil7aWYoIXRoaXMud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4gdm9pZCB0aGlzLmRlc3Ryb3koKTt0aGlz'@;
put 'LndvdC5kcmF3KCEwKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiZ0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5vblNjcm9sbCgpLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyYmdGhpcy50b3BPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy52ZXJ0aWNhbFNjcm9sbGluZz0hMSx0aGlzLmhvcml6b250'@;
put 'YWxTY3JvbGxpbmc9ITF9fXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwscm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLHttYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudDpkfT10aGlzLnRvcE92ZXJsYXkse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50Omh9'@;
put 'PXRoaXMuaW5saW5lU3RhcnRPdmVybGF5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQsImtleWRvd24iLF9lPT50aGlzLm9uS2V5RG93bihfZSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudEVsZW1lbnQs'@;
put 'ImtleXVwIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwidmlzaWJpbGl0eWNoYW5nZSIsKCk9PnRoaXMub25LZXlVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsInNjcm9sbCIsX2U9PnRoaXMub25UYWJs'@;
put 'ZVNjcm9sbChfZSkse3Bhc3NpdmU6ITB9KSxkIT09aCYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihoLCJzY3JvbGwiLF9lPT50aGlzLm9uVGFibGVTY3JvbGwoX2UpLHtwYXNzaXZlOiEwfSk7Y29uc3QgZj1hLmRldmljZVBpeGVsUmF0aW8mJmEuZGV2aWNlUGl4ZWxSYXRp'@;
put 'bz4xLHY9dGhpcy5zY3JvbGxhYmxlRWxlbWVudD09PWEsVD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudFdoZWVsIiksWT17cGFzc2l2ZTp2fTtsZXQgZmU7KFR8fGZ8fCFKVigpKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLnd0VGFibGUud3RS'@;
put 'b290RWxlbWVudCwid2hlZWwiLF9lPT50aGlzLm9uQ2xvbmVXaGVlbChfZSxUKSxZKSxbdGhpcy50b3BPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0'@;
put 'Q29ybmVyT3ZlcmxheV0uZm9yRWFjaChfZT0+e2lmKF9lJiZfZS5uZWVkRnVsbFJlbmRlcil7Y29uc3R7aG9sZGVyOmtlfT1fZS5jbG9uZS53dFRhYmxlO3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoa2UsIndoZWVsIixXZT0+dGhpcy5vbkNsb25lV2hlZWwoV2UsVCksWSl9'@;
put 'fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJyZXNpemUiLCgpPT57Y2xlYXJUaW1lb3V0KGZlKSxmZT1zZXRUaW1lb3V0KCgpPT57dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uV2luZG93UmVzaXplIil9LDIwMCl9KSx2fHx0aGlzLnJlc2l6ZU9ic2VydmVy'@;
put 'Lm9ic2VydmUodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50RWxlbWVudCl9ZGVyZWdpc3Rlckxpc3RlbmVycygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyRXZlbnRzKCEwKX1vblRhYmxlU2Nyb2xsKGwpe2NvbnN0IGE9dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGQ9dGhp'@;
put 'cy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsaD10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsZj1sLnRhcmdldDt0aGlzLmtleVByZXNzZWQmJihoIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhoKXx8ZCE9PWEm'@;
put 'JmYhPT1hJiYhbC50YXJnZXQuY29udGFpbnMoZCkpfHx0aGlzLnN5bmNTY3JvbGxQb3NpdGlvbnMobCl9b25DbG9uZVdoZWVsKGwsYSl7Y29uc3R7cm9vdFdpbmRvdzpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5pbmxpbmVTdGFydE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1l'@;
put 'bnQsZj10aGlzLnRvcE92ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdj1sLnRhcmdldCxUPWYhPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoZiksWT1oIT09ZCYmdiE9PWQmJiF2LmNvbnRhaW5zKGgpO2lmKHRoaXMua2V5UHJlc3NlZCYmKFR8fFkpKXJldHVybjtjb25zdCByZT10'@;
put 'aGlzLnRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKTsoYXx8dGhpcy5zY3JvbGxhYmxlRWxlbWVudCE9PWQmJnJlKSYmbC5wcmV2ZW50RGVmYXVsdCgpfW9uS2V5RG93bihsKXt0aGlzLmtleVByZXNzZWQ9aDkobC5rZXlDb2RlLCJBUlJPV19VUHxBUlJPV19SSUdIVHxBUlJPV19ET1dO'@;
put 'fEFSUk9XX0xFRlQiKX1vbktleVVwKCl7dGhpcy5rZXlQcmVzc2VkPSExfXRyYW5zbGF0ZU1vdXNlV2hlZWxUb1Njcm9sbChsKXtsZXQgYT1pc05hTihsLmRlbHRhWSk/LTEqbC53aGVlbERlbHRhWTpsLmRlbHRhWSxkPWlzTmFOKGwuZGVsdGFYKT8tMSpsLndoZWVsRGVsdGFYOmwuZGVsdGFY'@;
put 'OzE9PT1sLmRlbHRhTW9kZSYmKGQrPWQqdGhpcy5icm93c2VyTGluZUhlaWdodCxhKz1hKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQpO2NvbnN0IGg9dGhpcy5zY3JvbGxWZXJ0aWNhbGx5KGEpLGY9dGhpcy5zY3JvbGxIb3Jpem9udGFsbHkoZCk7cmV0dXJuIGh8fGZ9c2Nyb2xsVmVydGljYWxs'@;
put 'eShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wO3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcCs9bCxhIT09dGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3B9c2Nyb2xsSG9yaXpvbnRhbGx5KGwpe2NvbnN0IGE9dGhpcy5zY3Jv'@;
put 'bGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0O3JldHVybiB0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQrPWwsYSE9PXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdH1zeW5jU2Nyb2xsUG9zaXRpb25zKCl7aWYodGhpcy5kZXN0cm95ZWQpcmV0dXJuO2NvbnN0e3Jvb3RX'@;
put 'aW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcixkPXRoaXMuaW5saW5lU3RhcnRPdmVybGF5LmNsb25lLnd0VGFibGUuaG9sZGVyLFtoLGZdPVt0aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQsdGhpcy5zY3JvbGxh'@;
put 'YmxlRWxlbWVudC5zY3JvbGxUb3BdO2lmKHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz1hLnNjcm9sbExlZnQhPT1ofHx0aGlzLmxhc3RTY3JvbGxYIT09bC5zY3JvbGxYLHRoaXMudmVydGljYWxTY3JvbGxpbmc9ZC5zY3JvbGxUb3AhPT1mfHx0aGlzLmxhc3RTY3JvbGxZIT09bC5zY3JvbGxZ'@;
put 'LHRoaXMubGFzdFNjcm9sbFg9bC5zY3JvbGxYLHRoaXMubGFzdFNjcm9sbFk9bC5zY3JvbGxZLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZyl7YS5zY3JvbGxMZWZ0PWg7Y29uc3Qgdj10aGlzLmJvdHRvbU92ZXJsYXkubmVlZEZ1bGxSZW5kZXI/dGhpcy5ib3R0b21PdmVybGF5LmNsb25lLnd0'@;
put 'VGFibGUuaG9sZGVyOm51bGw7diYmKHYuc2Nyb2xsTGVmdD1oKX10aGlzLnZlcnRpY2FsU2Nyb2xsaW5nJiYoZC5zY3JvbGxUb3A9ZiksdGhpcy5yZWZyZXNoQWxsKCl9c3luY1Njcm9sbFdpdGhNYXN0ZXIoKXtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxl'@;
put 'bWVudCx7c2Nyb2xsTGVmdDphLHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9t'@;
put 'T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxl'@;
put 'bWVudHMoKXt0aGlzLmRlcmVnaXN0ZXJMaXN0ZW5lcnMoKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnQoKSx0aGlzLnRvcE92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVu'@;
put 'ZGVyJiZ0aGlzLmJvdHRvbU92ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCk7Y29uc3R7d3RUYWJsZTpsfT10aGlzLHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5zY3JvbGxhYmxlRWxlbWVudD0iaGlkZGVuIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShsLnd0'@;
put 'Um9vdEVsZW1lbnQucGFyZW50Tm9kZSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjpjdyhsLlRBQkxFKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCl9ZGVzdHJveSgpe3RoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpLHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ry'@;
put 'b3koKSx0aGlzLnRvcE92ZXJsYXkuZGVzdHJveSgpLHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21PdmVybGF5LmRlc3Ryb3koKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5kZXN0cm95KCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5s'@;
put 'aW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmRl'@;
put 'c3Ryb3llZD0hMH1yZWZyZXNoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLnVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKSYmdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUm'@;
put 'JnRoaXMuYm90dG9tT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BPdmVybGF5LnJlZnJlc2gobCksdGhpcy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LnJlZnJl'@;
put 'c2gobCksdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpfXVwZGF0ZUxhc3RTcHJlYWRlclNpemUoKXtjb25zdCBs'@;
put 'PXRoaXMud3RUYWJsZS5zcHJlYWRlcixhPWwuY2xpZW50V2lkdGgsZD1sLmNsaWVudEhlaWdodCxoPWEhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUud2lkdGh8fGQhPT10aGlzLnNwcmVhZGVyTGFzdFNpemUuaGVpZ2h0O3JldHVybiBoJiYodGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRoPWEs'@;
put 'dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodD1kKSxofWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RWaWV3cG9ydDphfT10aGlzLndvdCx7d3RUYWJsZTpkfT10aGlzLGg9'@;
put 'dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLHY9YS5nZXRSb3dIZWFkZXJXaWR0aCgpLFQ9YS5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSxZPWQuaGlkZXIuc3R5bGU7aWYoWS53aWR0aD1g'@;
put 'JHt2K3RoaXMuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGgpfXB4YCxZLmhlaWdodD1gJHtUK3RoaXMudG9wT3ZlcmxheS5zdW1DZWxsU2l6ZXMoMCxmKSsxfXB4YCx0aGlzLnNjcm9sbGJhclNpemU+MCl7Y29uc3R7c2Nyb2xsSGVpZ2h0OnJlLHNjcm9sbFdpZHRoOmZlfT1k'@;
put 'Lnd0Um9vdEVsZW1lbnQse3Njcm9sbEhlaWdodDpfZSxzY3JvbGxXaWR0aDprZX09ZC5ob2xkZXI7dGhpcy5oYXNTY3JvbGxiYXJSaWdodD1yZTxfZSx0aGlzLmhhc1Njcm9sbGJhckJvdHRvbT1mZTxrZSx0aGlzLmhhc1Njcm9sbGJhclJpZ2h0JiZkLmhpZGVyLnNjcm9sbFdpZHRoK3RoaXMu'@;
put 'c2Nyb2xsYmFyU2l6ZT5mZT90aGlzLmhhc1Njcm9sbGJhckJvdHRvbT0hMDp0aGlzLmhhc1Njcm9sbGJhckJvdHRvbSYmZC5oaWRlci5zY3JvbGxIZWlnaHQrdGhpcy5zY3JvbGxiYXJTaXplPnJlJiYodGhpcy5oYXNTY3JvbGxiYXJSaWdodD0hMCl9dGhpcy50b3BPdmVybGF5LmFkanVzdEVs'@;
put 'ZW1lbnRzU2l6ZShsKSx0aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5hZGp1c3RFbGVtZW50c1NpemUobCksdGhpcy5ib3R0b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZShsKX1hcHBseVRvRE9NKCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy50b3BPdmVybGF5LmFwcGx5VG9E'@;
put 'T00oKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJlbnRPdmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBkPW51bGw7cmV0dXJuIFJuKFt0aGlz'@;
put 'LnRvcE92ZXJsYXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNv'@;
put 'bnRhaW5zKGwpJiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJMRTtSbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0'@;
put 'Q29ybmVyT3ZlcmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07ZnVuY3Rpb24gUG9lKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBiRmUoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gd0ZlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgTUZle2NvbnN0cnVjdG9yKGwpe1BvZSh0aGlzLCJzZXR0aW5ncyIse30pLFBvZSh0aGlzLCJkZWZhdWx0cyIsT2JqZWN0LmZyZWV6ZSh0'@;
put 'aGlzLmdldERlZmF1bHRzKCkpKSx5cyh0aGlzLmRlZmF1bHRzLChhLGQpPT57aWYodm9pZCAwIT09bFtkXSl0aGlzLnNldHRpbmdzW2RdPWxbZF07ZWxzZXtpZih2b2lkIDA9PT1hKXRocm93IG5ldyBFcnJvcihgQSByZXF1aXJlZCBzZXR0aW5nICIke2R9IiB3YXMgbm90IHByb3ZpZGVkYCk7'@;
put 'dGhpcy5zZXR0aW5nc1tkXT1hfX0pfWdldERlZmF1bHRzKCl7cmV0dXJue2ZhY2FkZTp2b2lkIDAsdGFibGU6dm9pZCAwLGlzRGF0YVZpZXdJbnN0YW5jZTohMCxleHRlcm5hbFJvd0NhbGN1bGF0b3I6ITEsc3RyZXRjaEg6Im5vbmUiLGN1cnJlbnRSb3dDbGFzc05hbWU6bnVsbCxjdXJyZW50'@;
put 'Q29sdW1uQ2xhc3NOYW1lOm51bGwscHJldmVudE92ZXJmbG93OigpPT4hMSxwcmV2ZW50V2hlZWw6ITEsZGF0YTp2b2lkIDAsZnJlZXplT3ZlcmxheXM6ITEsZml4ZWRDb2x1bW5zU3RhcnQ6MCxmaXhlZFJvd3NUb3A6MCxmaXhlZFJvd3NCb3R0b206MCxzaG91bGRSZW5kZXJJbmxpbmVTdGFy'@;
put 'dE92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKT4wfHx0aGlzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJUb3BPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpPjB8fHRoaXMuZ2V0U2V0'@;
put 'dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik+MCxtaW5TcGFyZVJvd3M6MCxyb3dIZWFkZXJzOigpPT5bXSxjb2x1bW5IZWFkZXJzOigpPT5bXSx0b3RhbFJvd3M6dm9p'@;
put 'ZCAwLHRvdGFsQ29sdW1uczp2b2lkIDAsY2VsbFJlbmRlcmVyOihsLGEsZCk9PntubShkLHRoaXMuZ2V0U2V0dGluZygiZGF0YSIsbCxhKT8/IiIpfSxjb2x1bW5XaWR0aCgpe30scm93SGVpZ2h0KCl7fSxkZWZhdWx0Um93SGVpZ2h0OjIzLGRlZmF1bHRDb2x1bW5XaWR0aDo1MCxzZWxlY3Rp'@;
put 'b25zOm51bGwsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjohMSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTpudWxsLHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOm51bGwsb25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29udGV4dE1lbnU6bnVsbCxvbkNlbGxNb3Vz'@;
put 'ZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9uRHJhdzpudWxsLG9uQmVmb3JlUmVtb3Zl'@;
put 'Q2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvblNjcm9sbFZlcnRpY2FsbHk6bnVsbCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3Jv'@;
put 'bGw6bnVsbCxvbkJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDpsPT5sLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6bnVsbCxvbk1vZGlmeUdldENlbGxDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVy'@;
put 'Omw9Pmwsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6bnVsbCxyZW5kZXJBbGxSb3dzOiExLGdyb3VwczohMSxyb3dIZWFkZXJXaWR0aDpudWxsLGNvbHVtbkhlYWRlckhlaWdodDpudWxsLGhlYWRlckNsYXNzTmFtZTpudWxsLHJ0bE1vZGU6ITF9fXVwZGF0'@;
put 'ZShsLGEpe3JldHVybiB2b2lkIDA9PT1hP3lzKGwsKGQsaCk9Pnt0aGlzLnNldHRpbmdzW2hdPWR9KTp0aGlzLnNldHRpbmdzW2xdPWEsdGhpc31nZXRTZXR0aW5nKGwsYSxkLGgsZil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc2V0dGluZ3NbbF0/dGhpcy5zZXR0aW5nc1tsXShh'@;
put 'LGQsaCxmKTp2b2lkIDAhPT1hJiZBcnJheS5pc0FycmF5KHRoaXMuc2V0dGluZ3NbbF0pP3RoaXMuc2V0dGluZ3NbbF1bYV06dGhpcy5zZXR0aW5nc1tsXX1nZXRTZXR0aW5nUHVyZShsKXtyZXR1cm4gdGhpcy5zZXR0aW5nc1tsXX1oYXMobCl7cmV0dXJuISF0aGlzLnNldHRpbmdzW2xdfX1j'@;
put 'bGFzcyBMaiBleHRlbmRzIF85e2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSxkLGgsIm1hc3RlciIpfWFsaWduT3ZlcmxheXNXaXRoVHJpbW1pbmdDb250YWluZXIoKXtjb25zdCBsPU5nKHRoaXMud3RSb290RWxlbWVudCkse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncztp'@;
put 'ZihsPT09YSl0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iil8fCh0aGlzLmhvbGRlci5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIsdGhpcy53dFJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIik7ZWxzZXtjb25zdCBkPWwucGFyZW50RWxlbWVu'@;
put 'dCxoPWM5KGwsImhlaWdodCIsYSksZj1jOShsLCJvdmVyZmxvdyIsYSksdj10aGlzLmhvbGRlci5zdHlsZSx7c2Nyb2xsV2lkdGg6VCxzY3JvbGxIZWlnaHQ6WX09bDtsZXR7d2lkdGg6cmUsaGVpZ2h0OmZlfT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGQmJlsiYXV0byIsImhpZGRl'@;
put 'biIsInNjcm9sbCJdLmluY2x1ZGVzKGYpKXtjb25zdCBrZT1sLmNsb25lTm9kZSghMSk7a2Uuc3R5bGUub3ZlcmZsb3c9ImF1dG8iLGtlLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsbC5uZXh0RWxlbWVudFNpYmxpbmc/ZC5pbnNlcnRCZWZvcmUoa2UsbC5uZXh0RWxlbWVudFNpYmxpbmcp'@;
put 'OmQuYXBwZW5kQ2hpbGQoa2UpO2NvbnN0IFdlPXBhcnNlSW50KHJtKGtlLGEpLmhlaWdodCwxMCk7ZC5yZW1vdmVDaGlsZChrZSksMD09PVdlJiYoZmU9MCl9ZmU9TWF0aC5taW4oZmUsWSksdi5oZWlnaHQ9ImF1dG8iPT09aD8iYXV0byI6YCR7ZmV9cHhgLHJlPU1hdGgubWluKHJlLFQpLHYu'@;
put 'd2lkdGg9YCR7cmV9cHhgLHYub3ZlcmZsb3c9IiIsdGhpcy5oYXNUYWJsZUhlaWdodD0iYXV0byI9PT12LmhlaWdodHx8ZmU+MCx0aGlzLmhhc1RhYmxlV2lkdGg9cmU+MH10aGlzLmlzVGFibGVWaXNpYmxlPWE5KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29u'@;
put 'c3R7d3RTZXR0aW5nczpsfT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IFQ9bC5n'@;
put 'ZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoLFk9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgcmU9MDtyZTxmO3JlKyspZm9yKGxldCBmZT0tMSpUO2ZlPFk7ZmUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihmZSk7YS5oYXNPdmVyc2l6ZWRD'@;
put 'b2x1bW5IZWFkZXJzTWFya2VkW2RdPSEwfX19R2EoTGosSW9lKSxHYShMaix2aik7Y29uc3QgQ0ZlPUxqO1IoMzkwOTIpO2NvbnN0IEZvZT1uZXcgV2Vha01hcDtjbGFzcyBJantzdGF0aWMgZ2V0IERFRkFVTFRfSEVJR0hUKCl7cmV0dXJuIDIzfWNvbnN0cnVjdG9yKCl7bGV0e3ZpZXdwb3J0'@;
put 'U2l6ZTpsLHNjcm9sbE9mZnNldDphLHRvdGFsSXRlbXM6ZCxpdGVtU2l6ZUZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTp2LHNjcm9sbGJhckhlaWdodDpUfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Rm9lLnNldCh0'@;
put 'aGlzLHt2aWV3cG9ydEhlaWdodDpsLHNjcm9sbE9mZnNldDphLHRvdGFsUm93czpkLHJvd0hlaWdodEZuOmgsb3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTp2LGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6VH0pLHRoaXMuY291bnQ9MCx0aGlzLnN0YXJ0Um93PW51bGwsdGhpcy5lbmRS'@;
put 'b3c9bnVsbCx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9ITEsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXtjb25zdCBsPUZvZS5nZXQodGhpcyksYT1sLmNhbGN1bGF0aW9uVHlwZSxkPWwub3ZlcnJpZGVGbixoPWwucm93SGVp'@;
put 'Z2h0Rm4sZj1sLnNjcm9sbE9mZnNldCx2PU1hdGgubWF4KGwuc2Nyb2xsT2Zmc2V0LDApLFQ9bC50b3RhbFJvd3MsWT1sLnZpZXdwb3J0SGVpZ2h0LHJlPWwuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodHx8MDtsZXQgZmU9MCxfZT0hMDtjb25zdCBrZT1bXTtsZXQgV2UsSmU9MCx0dD0wO2Zv'@;
put 'cihsZXQgb249MDtvbjxUO29uKyspaWYoV2U9aChvbiksaXNOYU4oV2UpJiYoV2U9SWouREVGQVVMVF9IRUlHSFQpLGZlPD12JiYyIT09YSYmKHRoaXMuc3RhcnRSb3c9b24sSmU9V2UpLGZlPj12JiZmZSsoMj09PWE/V2U6MCk8PXYrWS1yZSYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhp'@;
put 'cy5zdGFydFJvdz1vbixKZT1XZSksdGhpcy5lbmRSb3c9b24pLGtlLnB1c2goZmUpLGZlKz1XZSx0dD1XZSwyIT09YSYmKHRoaXMuZW5kUm93PW9uKSxmZT49ditZLXJlKXtfZT0hMTticmVha31jb25zdCBMdD0yPT09YT8wOnR0O2lmKHRoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5l'@;
put 'cj0hKGYrWS1yZTwoMj09PWE/SmU6MCl8fGY+a2UuYXQoLTEpK0x0KSx0aGlzLmVuZFJvdz09PVQtMSYmX2UpZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7Y29uc3Qgb249a2VbdGhpcy5lbmRSb3ddK1dlLWtlW3RoaXMuc3RhcnRSb3ctMV07aWYoKG9u'@;
put 'PD1ZLXJlfHwyIT09YSkmJih0aGlzLnN0YXJ0Um93LT0xKSxvbj49WS1yZSlicmVha30xPT09YSYmbnVsbCE9PXRoaXMuc3RhcnRSb3cmJmQmJmQodGhpcyksdGhpcy5zdGFydFBvc2l0aW9uPWtlW3RoaXMuc3RhcnRSb3ddLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3Rh'@;
put 'cnRQb3NpdGlvbj1udWxsKSxUPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9VC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19Y29uc3QgSG9lPUlqLHY5PW5ldyBXZWFrTWFwO2NsYXNzIFJqe3N0YXRpYyBnZXQgREVG'@;
put 'QVVMVF9XSURUSCgpe3JldHVybiA1MH1jb25zdHJ1Y3Rvcigpe2xldHt2aWV3cG9ydFNpemU6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbEl0ZW1zOmQsaXRlbVNpemVGbjpoLG92ZXJyaWRlRm46ZixjYWxjdWxhdGlvblR5cGU6dixzdHJldGNoTW9kZTpULHN0cmV0Y2hpbmdJdGVtV2lkdGhGbjpZ'@;
put 'PShmZT0+ZmUpLGlubGluZVN0YXJ0T2Zmc2V0OnJlfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307djkuc2V0KHRoaXMse3ZpZXdwb3J0V2lkdGg6bCxzY3JvbGxPZmZzZXQ6YSx0b3RhbENvbHVtbnM6ZCxjb2x1bW5XaWR0aEZuOmgs'@;
put 'b3ZlcnJpZGVGbjpmLGNhbGN1bGF0aW9uVHlwZTp2LHN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuOlksaW5saW5lU3RhcnRPZmZzZXQ6cmV9KSx0aGlzLmNvdW50PTAsdGhpcy5zdGFydENvbHVtbj1udWxsLHRoaXMuZW5kQ29sdW1uPW51bGwsdGhpcy5zdGFydFBvc2l0aW9uPW51bGwsdGhpcy5p'@;
put 'c1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSExLHRoaXMuc3RyZXRjaEFsbFJhdGlvPTAsdGhpcy5zdHJldGNoTGFzdFdpZHRoPTAsdGhpcy5zdHJldGNoPVQsdGhpcy50b3RhbFRhcmdldFdpZHRoPTAsdGhpcy5uZWVkVmVyaWZ5TGFzdENvbHVtbldpZHRoPSEwLHRoaXMuc3RyZXRjaEFs'@;
put 'bENvbHVtbnNXaWR0aD1bXSx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe2xldCBsPTAsYT0hMDtjb25zdCBkPVtdO2xldCBoLGY9MCx2PTA7Y29uc3QgVD12OS5nZXQodGhpcyksWT1ULmNhbGN1bGF0aW9uVHlwZSxyZT1ULm92ZXJyaWRlRm4sZmU9VC5zY3JvbGxPZmZzZXQsX2U9TWF0'@;
put 'aC5tYXgoVC5zY3JvbGxPZmZzZXQsMCksa2U9VC50b3RhbENvbHVtbnMsV2U9VC52aWV3cG9ydFdpZHRoLEplPV9lPjA/V2UrMTpXZTtmb3IobGV0IEx0PTA7THQ8a2U7THQrKylpZihoPXRoaXMuX2dldENvbHVtbldpZHRoKEx0KSxsPD1fZSYmMiE9PVkmJih0aGlzLnN0YXJ0Q29sdW1uPUx0'@;
put 'LGY9aCksbD49X2UmJmwrKDI9PT1ZP2g6MCk8PV9lK0plJiYobnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49THQsZj1oKSx0aGlzLmVuZENvbHVtbj1MdCksZC5wdXNoKGwpLGwrPWgsdj1oLDIhPT1ZJiYodGhpcy5lbmRDb2x1bW49THQpLGw+PV9lK1dlKXthPSEx'@;
put 'O2JyZWFrfWNvbnN0IHl0PTI9PT1ZPzA6dix3dD0yPT09WT9mOjA7aWYodGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZmUrV2UtSmU8LTEqVC5pbmxpbmVTdGFydE9mZnNldHx8ZmU+ZC5hdCgtMSkreXR8fC0xKlQuc2Nyb2xsT2Zmc2V0LVQudmlld3BvcnRXaWR0aD4tMSp3'@;
put 'dCksdGhpcy5lbmRDb2x1bW49PT1rZS0xJiZhKWZvcih0aGlzLnN0YXJ0Q29sdW1uPXRoaXMuZW5kQ29sdW1uO3RoaXMuc3RhcnRDb2x1bW4+MDspe2NvbnN0IEx0PWRbdGhpcy5lbmRDb2x1bW5dK2gtZFt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKChMdDw9V2V8fDIhPT1ZKSYmKHRoaXMuc3Rh'@;
put 'cnRDb2x1bW4tPTEpLEx0PldlKWJyZWFrfTE9PT1ZJiZudWxsIT09dGhpcy5zdGFydENvbHVtbiYmcmUmJnJlKHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbj1kW3RoaXMuc3RhcnRDb2x1bW5dLHZvaWQgMD09PXRoaXMuc3RhcnRQb3NpdGlvbiYmKHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsKSxr'@;
put 'ZTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPWtlLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfXJlZnJlc2hTdHJldGNoaW5nKGwpe2lmKCJub25lIj09PXRoaXMuc3RyZXRjaClyZXR1cm47'@;
put 'bGV0IGE9bDt0aGlzLnRvdGFsVGFyZ2V0V2lkdGg9YTtjb25zdCBkPXY5LmdldCh0aGlzKSxoPWQudG90YWxDb2x1bW5zO2xldCBmPTA7Zm9yKGxldCBUPTA7VDxoO1QrKyl7Y29uc3QgWT10aGlzLl9nZXRDb2x1bW5XaWR0aChUKSxyZT1kLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHZvaWQg'@;
put 'MCxUKTsibnVtYmVyIj09dHlwZW9mIHJlP2EtPXJlOmYrPVl9Y29uc3Qgdj1hLWY7aWYoImFsbCI9PT10aGlzLnN0cmV0Y2gmJnY+MCl0aGlzLnN0cmV0Y2hBbGxSYXRpbz1hL2YsdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoPVtdLHRoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0h'@;
put 'MDtlbHNlIGlmKCJsYXN0Ij09PXRoaXMuc3RyZXRjaCYmYSE9PTEvMCl7Y29uc3QgVD10aGlzLl9nZXRDb2x1bW5XaWR0aChoLTEpLFk9ditUO3RoaXMuc3RyZXRjaExhc3RXaWR0aD1ZPj0wP1k6VH19Z2V0U3RyZXRjaGVkQ29sdW1uV2lkdGgobCxhKXtsZXQgZD1udWxsO3JldHVybiJhbGwi'@;
put 'PT09dGhpcy5zdHJldGNoJiYwIT09dGhpcy5zdHJldGNoQWxsUmF0aW8/ZD10aGlzLl9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpOiJsYXN0Ij09PXRoaXMuc3RyZXRjaCYmMCE9PXRoaXMuc3RyZXRjaExhc3RXaWR0aCYmKGQ9dGhpcy5fZ2V0U3RyZXRjaGVkTGFzdENvbHVtbldp'@;
put 'ZHRoKGwpKSxkfV9nZXRTdHJldGNoZWRBbGxDb2x1bW5XaWR0aChsLGEpe2xldCBkPTA7Y29uc3QgaD12OS5nZXQodGhpcyksZj1oLnRvdGFsQ29sdW1ucztpZighdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdKXtjb25zdCB2PU1hdGgucm91bmQoYSp0aGlzLnN0cmV0Y2hBbGxSYXRp'@;
put 'byksVD1oLnN0cmV0Y2hpbmdDb2x1bW5XaWR0aEZuKHYsbCk7dGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdPXZvaWQgMD09PVQ/djppc05hTihUKT90aGlzLl9nZXRDb2x1bW5XaWR0aChsKTpUfWlmKHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGg9PT1mJiZ0aGlzLm5l'@;
put 'ZWRWZXJpZnlMYXN0Q29sdW1uV2lkdGgpe3RoaXMubmVlZFZlcmlmeUxhc3RDb2x1bW5XaWR0aD0hMTtmb3IobGV0IHY9MDt2PHRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGg7disrKWQrPXRoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aFt2XTtkIT09dGhpcy50b3RhbFRhcmdl'@;
put 'dFdpZHRoJiYodGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW3RoaXMuc3RyZXRjaEFsbENvbHVtbnNXaWR0aC5sZW5ndGgtMV0rPXRoaXMudG90YWxUYXJnZXRXaWR0aC1kKX1yZXR1cm4gdGhpcy5zdHJldGNoQWxsQ29sdW1uc1dpZHRoW2xdfV9nZXRTdHJldGNoZWRMYXN0Q29sdW1uV2lk'@;
put 'dGgobCl7cmV0dXJuIGw9PT12OS5nZXQodGhpcykudG90YWxDb2x1bW5zLTE/dGhpcy5zdHJldGNoTGFzdFdpZHRoOm51bGx9X2dldENvbHVtbldpZHRoKGwpe2xldCBhPXY5LmdldCh0aGlzKS5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKSYmKGE9UmouREVGQVVMVF9XSURUSCks'@;
put 'YX19Y29uc3QgT2o9UmoseEZlPWNsYXNzIFNGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3RoaXMuZGF0YUFjY2Vzc09iamVjdD1sLHRoaXMud290PWwud290LHRoaXMuaW5zdGFuY2U9dGhpcy53b3QsdGhpcy5kb21CaW5kaW5ncz1hLHRoaXMud3RTZXR0aW5ncz1kLHRoaXMud3RUYWJsZT1m'@;
put 'LHRoaXMub3ZlcnNpemVkUm93cz1bXSx0aGlzLm92ZXJzaXplZENvbHVtbkhlYWRlcnM9W10sdGhpcy5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2VkPXt9LHRoaXMuY2xpZW50SGVpZ2h0PTAsdGhpcy5jb250YWluZXJXaWR0aD1OYU4sdGhpcy5yb3dIZWFkZXJXaWR0aD1OYU4sdGhp'@;
put 'cy5yb3dzVmlzaWJsZUNhbGN1bGF0b3I9bnVsbCx0aGlzLmNvbHVtbnNWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPWgsdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csInJlc2l6ZSIsKCk9Pnt0aGlz'@;
put 'LmNsaWVudEhlaWdodD10aGlzLmdldFdvcmtzcGFjZUhlaWdodCgpfSl9Z2V0V29ya3NwYWNlSGVpZ2h0KCl7Y29uc3QgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wT3ZlcmxheVRyaW1taW5nQ29udGFpbmVyO2xldCBkPTA7cmV0dXJuIGQ9YT09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdp'@;
put 'bmRvdz90aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0OlZsKGEpPjAmJmEuY2xpZW50SGVpZ2h0PjA/YS5jbGllbnRIZWlnaHQ6MS8wLGR9Z2V0V29ya3NwYWNlV2lkdGgoKXtjb25zdHt3dFNldHRpbmdzOmx9PXRoaXMse3Jvb3REb2N1'@;
put 'bWVudDphLHJvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcixmPWEuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLHY9bC5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKSxUPWwu'@;
put 'Z2V0U2V0dGluZygicHJldmVudE92ZXJmbG93IiksWT1sLmdldFNldHRpbmcoInJ0bE1vZGUiKSxyZT10aGlzLnd0VGFibGUuVEFCTEUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksX2U9Zi0oWT9yZS5yaWdodC1mOnJlLmxlZnQpO2xldCBrZSxXZTtpZihUKXJldHVybiBOYSh0aGlzLnd0VGFi'@;
put 'bGUud3RSb290RWxlbWVudCk7aWYoa2U9bC5nZXRTZXR0aW5nKCJmcmVlemVPdmVybGF5cyIpP01hdGgubWluKF9lLGYpOk1hdGgubWluKHRoaXMuZ2V0Q29udGFpbmVyRmlsbFdpZHRoKCksX2UsZiksaD09PWQmJnY+MCYmdGhpcy5zdW1Db2x1bW5XaWR0aHMoMCx2LTEpPmtlKXJldHVybiBh'@;
put 'LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtpZihoIT09ZCYmKFdlPWM5KHRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lciwib3ZlcmZsb3ciLGQpLCJzY3JvbGwiPT09V2V8fCJoaWRkZW4iPT09V2V8fCJhdXRvIj09PVdlKSlyZXR1'@;
put 'cm4gTWF0aC5tYXgoa2UsaC5jbGllbnRXaWR0aCk7Y29uc3QgSmU9bC5nZXRTZXR0aW5nKCJzdHJldGNoSCIpO3JldHVybiJub25lIiE9PUplJiZKZT9rZTpNYXRoLm1heChrZSxOYSh0aGlzLnd0VGFibGUuVEFCTEUpKX1oYXNWZXJ0aWNhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUu'@;
put 'aGlkZXIub2Zmc2V0SGVpZ2h0PnRoaXMuZ2V0V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe3JldHVybiB0aGlzLnd0VGFibGUuaGlkZXIub2Zmc2V0V2lkdGg+dGhpcy5nZXRXb3Jrc3BhY2VXaWR0aCgpfXN1bUNvbHVtbldpZHRocyhsLGEpe2xldCBkPTAsaD1sO2Zv'@;
put 'cig7aDxhOylkKz10aGlzLnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgoaCksaCs9MTtyZXR1cm4gZH1nZXRDb250YWluZXJGaWxsV2lkdGgoKXtpZih0aGlzLmNvbnRhaW5lcldpZHRoKXJldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoO2NvbnN0IGw9dGhpcy53dFRhYmxlLmhvbGRlcixhPXRoaXMu'@;
put 'ZG9tQmluZGluZ3Mucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2Euc3R5bGUud2lkdGg9IjEwMCUiLGEuc3R5bGUuaGVpZ2h0PSIxcHgiLGwuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1hLm9mZnNldFdpZHRoO3JldHVybiB0aGlzLmNvbnRhaW5lcldpZHRoPWQsbC5yZW1vdmVD'@;
put 'aGlsZChhKSxkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiBTYyh0aGlzLnd0VGFibGUuVEFCTEUpfWdldENvbHVtbkhlYWRlckhlaWdodCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aD9pc05hTih0aGlzLmNvbHVtbkhlYWRl'@;
put 'ckhlaWdodCkmJih0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1WbCh0aGlzLnd0VGFibGUuVEhFQUQpKTp0aGlzLmNvbHVtbkhlYWRlckhlaWdodD0wLHRoaXMuY29sdW1uSGVhZGVySGVpZ2h0fWdldFZpZXdwb3J0SGVpZ2h0KCl7bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihs'@;
put 'PT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3Mu'@;
put 'Z2V0U2V0dGluZygicm93SGVhZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhp'@;
put 'cy53dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz1OYShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2Ug'@;
put 'dGhpcy5yb3dIZWFkZXJXaWR0aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWdl'@;
put 'dFZpZXdwb3J0V2lkdGgoKXtjb25zdCBsPXRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRSb3dIZWFkZXJXaWR0aCgpO3JldHVybiBhPjA/bC1hOmx9Y3JlYXRlUm93c0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoLGYsdjt0aGlzLnJvd0hlYWRlcldpZHRoPU5hTixoPWEuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIpJiYxPT09bD8xLzA6dGhpcy5nZXRWaWV3'@;
put 'cG9ydEhlaWdodCgpO2xldCBUPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IFk9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxyZT1hLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRv'@;
put 'bSIpLGZlPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIFkmJlQ+PTAmJih2PXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BPdmVybGF5LnN1bUNlbGxTaXplcygwLFkpLFQrPXYsaC09dikscmUmJnRoaXMuZGF0YUFjY2Vzc09iamVjdC5ib3R0b21PdmVybGF5LmNsb25lJiYodj10'@;
put 'aGlzLmRhdGFBY2Nlc3NPYmplY3QuYm90dG9tT3ZlcmxheS5zdW1DZWxsU2l6ZXMoZmUtcmUsZmUpLGgtPXYpLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6ZnUodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpLG5ldyBIb2Uoe3ZpZXdwb3J0'@;
put 'U2l6ZTpoLHNjcm9sbE9mZnNldDpULHRvdGFsSXRlbXM6YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxpdGVtU2l6ZUZuOl9lPT5kLmdldFJvd0hlaWdodChfZSksb3ZlcnJpZGVGbjphLmdldFNldHRpbmdQdXJlKCJ2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIpLGNhbGN1bGF0aW9u'@;
put 'VHlwZTpsLHNjcm9sbGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTtjb25zdHt3dFNldHRpbmdzOmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0'@;
put 'Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVtbkhlYWRlckhlaWdodD1OYU47Y29uc3Qgdj1hLmdldFNl'@;
put 'dHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7Y29uc3QgVD10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpO2YrPVQsaC09VH1yZXR1cm4gZC5ob2xkZXIuY2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0'@;
put 'aCYmKGgtPWZ1KHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksbmV3IE9qKHt2aWV3cG9ydFNpemU6aCxzY3JvbGxPZmZzZXQ6Zix0b3RhbEl0ZW1zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksaXRlbVNpemVGbjpUPT5kLmdldENvbHVtbldpZHRoKFQpLG92ZXJyaWRlRm46'@;
put 'YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxjYWxjdWxhdGlvblR5cGU6bCxzdHJldGNoTW9kZTphLmdldFNldHRpbmcoInN0cmV0Y2hIIiksc3RyZXRjaGluZ0l0ZW1XaWR0aEZuOihULFkpPT5hLmdldFNldHRpbmcoIm9uQmVmb3JlU3RyZXRj'@;
put 'aGluZ0NvbHVtbldpZHRoIixULFkpLGlubGluZVN0YXJ0T2Zmc2V0OnRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldH0pfWNyZWF0ZVJlbmRlckNhbGN1bGF0b3JzKCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFy'@;
put 'Z3VtZW50c1swXTtpZihhKXtjb25zdCBkPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMiksaD10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDIpO3RoaXMuYXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChkKSYmdGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVD'@;
put 'b2x1bW5zQWxyZWFkeVJlbmRlcmVkKGgpfHwoYT0hMSl9cmV0dXJuIGF8fCh0aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yPXRoaXMuY3JlYXRlUm93c0NhbGN1bGF0b3IoMSksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKDEpKSx0aGlz'@;
put 'LnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsYX1jcmVhdGVWaXNpYmxlQ2FsY3VsYXRvcnMoKXt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj10aGlzLmNyZWF0ZVJvd3NDYWxjdWxhdG9yKDIpLHRoaXMuY29sdW1uc1Zpc2li'@;
put 'bGVDYWxjdWxhdG9yPXRoaXMuY3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoMil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZCxpc1Zpc2libGVJ'@;
put 'blRyaW1taW5nQ29udGFpbmVyOmh9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXJldHVybiFoO2NvbnN0e3N0YXJ0Um93OmYsZW5kUm93OnZ9PXRoaXMucm93c1JlbmRlckNhbGN1bGF0b3I7cmV0dXJuIShhPGZ8fGE9PT1mJiZhPjB8fGQ+dnx8ZD09PXYmJmQ8dGhpcy53dFNldHRpbmdzLmdl'@;
put 'dFNldHRpbmcoInRvdGFsUm93cyIpLTEpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2NvbnN0e3N0YXJ0Q29sdW1uOmEsZW5kQ29sdW1uOmQsaXNWaXNpYmxlSW5UcmltbWlu'@;
put 'Z0NvbnRhaW5lcjpofT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZClyZXR1cm4haDtjb25zdHtzdGFydENvbHVtbjpmLGVuZENvbHVtbjp2fT10aGlzLmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yO3JldHVybiEoYTxmfHxhPT09ZiYmYT4wfHxkPnZ8fGQ9PT12JiZkPHRoaXMud3RTZXR0aW5ncy5n'@;
put 'ZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xKX1yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXt5cyh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9fTtjbGFzcyBrRmUgZXh0ZW5kcyB4antjb25zdHJ1Y3Rv'@;
put 'cihsLGEpe3N1cGVyKGwsbmV3IE1GZShhKSk7Y29uc3QgZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZmFjYWRlIix0aGlzKTt0aGlzLnd0VGFibGU9bmV3IENGZSh0aGlzLmdldFRhYmxlRGFvKCksZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyksdGhpcy53dFZpZXdw'@;
put 'b3J0PW5ldyB4RmUodGhpcy5nZXRWaWV3cG9ydERhbygpLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSksdGhpcy5zZWxlY3Rpb25zPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzZWxlY3Rpb25zIiksdGhpcy53dEV2'@;
put 'ZW50PW5ldyBfb2UoZCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25zKSx0aGlzLnd0T3ZlcmxheXM9bmV3IHlGZSh0aGlzLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MsdGhpcy5l'@;
put 'dmVudE1hbmFnZXIsdGhpcy53dFRhYmxlKSx0aGlzLmV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCksdGhpcy5maW5kT3JpZ2luYWxIZWFkZXJzKCl9ZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKXtjb25zdCBhPVtdLGQ9W107eXMoe3Jvd0hlYWRlcnM6Imh0Um93SGVhZGVycyIsY29s'@;
put 'dW1uSGVhZGVyczoiaHRDb2x1bW5IZWFkZXJzIn0sKGgsZik9Pnt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhmKS5sZW5ndGgmJmQucHVzaChoKSxhLnB1c2goaCl9KSxzcyh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGEpLHdpKHRoaXMud3RUYWJsZS53dFJvb3RF'@;
put 'bGVtZW50LnBhcmVudE5vZGUsZCl9Z2V0Vmlld3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0'@;
put 'IGlubGluZVN0YXJ0T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3Np'@;
put 'dGlvbigpfSxnZXQgdG9wUGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xs'@;
put 'UG9zaXRpb24oKX0sZ2V0IGlubGluZVN0YXJ0UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVT'@;
put 'dGFydE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3MgUGp7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIHhqP3RoaXMuX3dvdD1sOnRo'@;
put 'aXMuX2luaXRGcm9tU2V0dGluZ3MobCl9X2luaXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IFBqKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3IGtGZShsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1l'@;
put 'bnQoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2Uo'@;
put 'KXtyZXR1cm4gdGhpcy5fd290LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9ucygpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uc31nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3'@;
put 'cG9ydH1nZXQgd3RPdmVybGF5cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Ny'@;
put 'b2xsfWdldCBkcmF3bigpe3JldHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBkcmF3SW50ZXJydXB0ZWQoKXtyZXR1cm4gdGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZH1zZXQgZHJhd0ludGVycnVwdGVkKGwpe3RoaXMuX3dvdC5kcmF3SW50'@;
put 'ZXJydXB0ZWQ9bH1nZXQgbGFzdE1vdXNlT3Zlcigpe3JldHVybiB0aGlzLl93b3QubGFzdE1vdXNlT3Zlcn1zZXQgbGFzdE1vdXNlT3ZlcihsKXt0aGlzLl93b3QubGFzdE1vdXNlT3Zlcj1sfWdldCBtb21lbnR1bVNjcm9sbGluZygpe3JldHVybiB0aGlzLl93b3QubW9tZW50dW1TY3JvbGxp'@;
put 'bmd9c2V0IG1vbWVudHVtU2Nyb2xsaW5nKGwpe3RoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZz1sfWdldCB0b3VjaEFwcGxpZWQoKXtyZXR1cm4gdGhpcy5fd290LnRvdWNoQXBwbGllZH1zZXQgdG91Y2hBcHBsaWVkKGwpe3RoaXMuX3dvdC50b3VjaEFwcGxpZWQ9bH1nZXQgZG9tQmluZGlu'@;
put 'Z3MoKXtyZXR1cm4gdGhpcy5fd290LmRvbUJpbmRpbmdzfWdldCBldmVudExpc3RlbmVycygpe3JldHVybiB0aGlzLl93b3QuZXZlbnRMaXN0ZW5lcnN9c2V0IGV2ZW50TGlzdGVuZXJzKGwpe3RoaXMuX3dvdC5ldmVudExpc3RlbmVycz1sfWdldCBldmVudE1hbmFnZXIoKXtyZXR1cm4gdGhp'@;
put 'cy5fd290LmV2ZW50TWFuYWdlcn1jcmVhdGVDZWxsQ29vcmRzKGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5jcmVhdGVDZWxsQ29vcmRzKGwsYSl9Y3JlYXRlQ2VsbFJhbmdlKGwsYSxkKXtyZXR1cm4gdGhpcy5fd290LmNyZWF0ZUNlbGxSYW5nZShsLGEsZCl9ZHJhdygpe3JldHVybiB0aGlzLl93'@;
put 'b3QuZHJhdyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSx0aGlzfWdldENlbGwobCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRDZWxsKGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSl9'@;
put 'c2Nyb2xsVmlld3BvcnQobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93b3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpfXNjcm9sbFZpZXdw'@;
put 'b3J0VmVydGljYWxseShsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhLGQpfWdldFZpZXdwb3J0KCl7cmV0dXJuIHRoaXMuX3dvdC5nZXRWaWV3cG9ydCgpfWdldE92ZXJsYXlOYW1lKCl7cmV0dXJuIHRoaXMuX3dvdC5jbG9uZU92ZXJsYXk/dGhp'@;
put 'cy5fd290LmNsb25lT3ZlcmxheS50eXBlOiJtYXN0ZXIifWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuX3dvdC5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpfXVwZGF0ZShsLGEpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy51cGRhdGUobCxhKSx0aGlz'@;
put 'fWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZyhsLGEsZCxoLGYpfWhhc1NldHRpbmcobCl7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmhhc1NldHRpbmcobCl9ZGVzdHJveSgpe3RoaXMuX3dvdC5kZXN0cm95KCl9fWZ1bmN0'@;
put 'aW9uIE5vZShjKXtsZXR7aXNTaGlmdEtleTpsLGlzTGVmdENsaWNrOmEsaXNSaWdodENsaWNrOmQsY29vcmRzOmgsc2VsZWN0aW9uOmYsY29udHJvbGxlcjp2LGNlbGxDb29yZHNGYWN0b3J5OlR9PWM7Y29uc3QgWT1mLmlzU2VsZWN0ZWQoKT9mLmdldFNlbGVjdGVkUmFuZ2UoKS5jdXJyZW50'@;
put 'KCk6bnVsbCxyZT1mLmlzU2VsZWN0ZWRCeUNvcm5lcigpLGZlPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYobCYmWSloLnJvdz49MCYmaC5jb2w+PTAmJiF2LmNlbGw/Zi5zZXRSYW5nZUVuZChoKToocmV8fGZlKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VF'@;
put 'bmQoVChoLnJvdyxoLmNvbCkpOnJlJiZoLnJvdzwwJiYhdi5jb2x1bW4/Zi5zZXRSYW5nZUVuZChUKFkudG8ucm93LGguY29sKSk6ZmUmJmguY29sPDAmJiF2LnJvdz9mLnNldFJhbmdlRW5kKFQoaC5yb3csWS50by5jb2wpKTooIXJlJiYhZmUmJmguY29sPDB8fHJlJiZoLmNvbDwwKSYmIXYu'@;
put 'cm93P2Yuc2VsZWN0Um93cyhNYXRoLm1heChZLmZyb20ucm93LDApLGgucm93LGguY29sKTooIXJlJiYhZmUmJmgucm93PDB8fGZlJiZoLnJvdzwwKSYmIXYuY29sdW1uJiZmLnNlbGVjdENvbHVtbnMoTWF0aC5tYXgoWS5mcm9tLmNvbCwwKSxoLmNvbCxoLnJvdyk7ZWxzZXtjb25zdCBfZT0h'@;
put 'Zi5pbkluU2VsZWN0aW9uKGgpLGtlPWF8fGQmJl9lO2gucm93PDAmJmguY29sPj0wJiYhdi5jb2x1bW4/a2UmJmYuc2VsZWN0Q29sdW1ucyhoLmNvbCxoLmNvbCxoLnJvdyk6aC5jb2w8MCYmaC5yb3c+PTAmJiF2LnJvdz9rZSYmZi5zZWxlY3RSb3dzKGgucm93LGgucm93LGguY29sKTpoLmNv'@;
put 'bD49MCYmaC5yb3c+PTAmJiF2LmNlbGw/a2UmJmYuc2V0UmFuZ2VTdGFydChoKTpoLmNvbDwwJiZoLnJvdzwwJiZmLnNlbGVjdEFsbCghMCwhMCl9fWNvbnN0IFRGZT1uZXcgTWFwKFtbIm1vdXNlZG93biIsTm9lXSxbIm1vdXNlb3ZlciIsZnVuY3Rpb24gRUZlKGMpe2xldHtpc0xlZnRDbGlj'@;
put 'azpsLGNvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmfT1jO2lmKCFsKXJldHVybjtjb25zdCB2PWQuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksVD1kLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLFk9ZC50YWJsZVByb3BzLmNvdW50Q29scygp'@;
put 'LHJlPWQudGFibGVQcm9wcy5jb3VudFJvd3MoKTtUJiYhaC5jb2x1bW4/ZC5zZXRSYW5nZUVuZChmKHJlLTEsYS5jb2wpKTp2JiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LFktMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKX1dLFsidG91Y2hzdGFydCIsTm9lXV0pO2Z1bmN0aW9u'@;
put 'IFZvZShjLGwpe2xldHtjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09bDtURmUuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxp'@;
put 'c0xlZnRDbGljazprVChjKXx8InRvdWNoc3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGljazppbShjKX0pfWNvbnN0IGpvZT1uZXcgV2Vha01hcCxGaj1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIEhqKGMpe3JldHVybiBqb2UuaGFzKGMpfWZ1bmN0aW9uIEJvZShjLGwsYSl7KGZ1'@;
put 'bmN0aW9uIExGZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gc20oYyxsLGEpe3JldHVybiBsPWZ1bmN0'@;
put 'aW9uIElGZShjKXt2YXIgbD1mdW5jdGlvbiBSRmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBl'@;
put 'b2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmlu'@;
put 'ZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBZb2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24gT0ZlKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0'@;
put 'LmNhbGwoYyk6bC52YWx1ZX0oYyxVb2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gem9lKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gUEZlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0'@;
put 'IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxVb2UoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFVvZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIp'@;
put 'O3JldHVybiBsLmdldChjKX1jb25zdCBXZz1uZXcgV2Vha01hcDt2YXIgTmo9bmV3IFdlYWtNYXAsVmo9bmV3IFdlYWtNYXA7Y29uc3QgSEZlPWNsYXNzIEZGZXtjb25zdHJ1Y3RvcihsKXtzbSh0aGlzLCJpbnN0YW5jZSIsdm9pZCAwKSxzbSh0aGlzLCJldmVudE1hbmFnZXIiLHZvaWQgMCks'@;
put 'c20odGhpcywic2V0dGluZ3MiLHZvaWQgMCksc20odGhpcywiVEhFQUQiLHZvaWQgMCksc20odGhpcywiVEJPRFkiLHZvaWQgMCksc20odGhpcywiX3d0Iix2b2lkIDApLHNtKHRoaXMsImFjdGl2ZVd0Iix2b2lkIDApLEJvZSh0aGlzLE5qLHt3cml0YWJsZTohMCx2YWx1ZTowfSksQm9lKHRo'@;
put 'aXMsVmose3dyaXRhYmxlOiEwLHZhbHVlOjB9KSxzbSh0aGlzLCJwb3N0cG9uZWRBZGp1c3RFbGVtZW50c1NpemUiLCExKSx0aGlzLmluc3RhbmNlPWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGpsKHRoaXMuaW5zdGFuY2UpLHRoaXMuc2V0dGluZ3M9dGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5n'@;
put 'cygpLFdnLnNldCh0aGlzLHtzZWxlY3Rpb25Nb3VzZURvd246ITEsbW91c2VEb3duOnZvaWQgMCx0YWJsZTp2b2lkIDAsbGFzdFdpZHRoOjAsbGFzdEhlaWdodDowfSksdGhpcy5jcmVhdGVFbGVtZW50cygpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmluaXRpYWxpemVXYWxrb250YWJs'@;
put 'ZSgpfXJlbmRlcigpe3RoaXMuaW5zdGFuY2UuaXNSZW5kZXJTdXNwZW5kZWQoKXx8KHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplJiYodGhpcy5wb3N0cG9u'@;
put 'ZWRBZGp1c3RFbGVtZW50c1NpemU9ITEsdGhpcy5hZGp1c3RFbGVtZW50c1NpemUoITApKSx0aGlzLl93dC5kcmF3KCF0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlciksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZW5kZXIiLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVy'@;
put 'KSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMSx0aGlzLmluc3RhbmNlLnJlbmRlckNhbGw9ITEpfWFkanVzdEVsZW1lbnRzU2l6ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5pbnN0YW5jZS5pc1Jl'@;
put 'bmRlclN1c3BlbmRlZCgpP3RoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMuX3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKGwpfWdldENlbGxBdENvb3JkcyhsLGEpe2NvbnN0IGQ9dGhpcy5fd3QuZ2V0Q2VsbChsLGEpO3JldHVybiBkPDA/bnVsbDpkfXNj'@;
put 'cm9sbFZpZXdwb3J0KGwsYSxkLGgsZil7cmV0dXJuIHRoaXMuX3d0LnNjcm9sbFZpZXdwb3J0KGwsYSxkLGgsZil9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsLGEsZCl9c2Nyb2xsVmlld3BvcnRW'@;
put 'ZXJ0aWNhbGx5KGwsYSxkKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSxkKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0IGw9V2cuZ2V0KHRoaXMpLHtyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkfT10aGlzLmluc3RhbmNlLGg9YS5nZXRBdHRyaWJ1dGUo'@;
put 'InN0eWxlIik7aCYmYS5zZXRBdHRyaWJ1dGUoImRhdGEtb3JpZ2luYWxzdHlsZSIsaCksd2koYSwiaGFuZHNvbnRhYmxlIiksbC50YWJsZT1kLmNyZWF0ZUVsZW1lbnQoIlRBQkxFIiksd2kobC50YWJsZSwiaHRDb3JlIiksdGhpcy5pbnN0YW5jZS5nZXRTZXR0aW5ncygpLnRhYmxlQ2xhc3NO'@;
put 'YW1lJiZ3aShsLnRhYmxlLHRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5USEVBRD1kLmNyZWF0ZUVsZW1lbnQoIlRIRUFEIiksbC50YWJsZS5hcHBlbmRDaGlsZCh0aGlzLlRIRUFEKSx0aGlzLlRCT0RZPWQuY3JlYXRlRWxlbWVudCgiVEJPRFkiKSxs'@;
put 'LnRhYmxlLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaW5zdGFuY2UudGFibGU9bC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUobC50YWJsZSx0aGlzLmluc3RhbmNlLmNvbnRhaW5lci5maXJzdENoaWxkKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0IGw9'@;
put 'V2cuZ2V0KHRoaXMpLHtyb290RWxlbWVudDphLHJvb3REb2N1bWVudDpkLHNlbGVjdGlvbjpofT10aGlzLmluc3RhbmNlLGY9ZC5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLHY9PntpZihsLnNlbGVjdGlvbk1vdXNlRG93'@;
put 'bj0hMCwhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKHYudGFyZ2V0KSl7Y29uc3R7cm9vdFdpbmRvdzpUfT10aGlzLmluc3RhbmNlO0dWKFQpLHYucHJldmVudERlZmF1bHQoKSxULmZvY3VzKCl9fSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZXVwIiwo'@;
put 'KT0+e2wuc2VsZWN0aW9uTW91c2VEb3duPSExfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLHY9PntsLnNlbGVjdGlvbk1vdXNlRG93biYmIXRoaXMuaXNUZXh0U2VsZWN0aW9uQWxsb3dlZCh2LnRhcmdldCkmJih0aGlzLnNldHRpbmdzLmZyYWdt'@;
put 'ZW50U2VsZWN0aW9uJiZHVih0aGlzLmluc3RhbmNlLnJvb3RXaW5kb3cpLHYucHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIix2PT57aC5pc0luUHJvZ3Jlc3MoKSYmIXYuc2hpZnRLZXkmJmguZmluaXNoKCl9KSx0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLHY9PntoLmlzSW5Qcm9ncmVzcygpJiZrVCh2KSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMSwoeVQoZC5hY3RpdmVFbGVtZW50KXx8IWguaXNTZWxlY3RlZCgpJiYhaC5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSYmIWEu'@;
put 'Y29udGFpbnModi50YXJnZXQpJiYhaW0odikpJiZ0aGlzLmluc3RhbmNlLnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51Iix2PT57aC5pc0luUHJvZ3Jlc3MoKSYmaW0odikmJihoLmZpbmlzaCgpLGwubW91c2VEb3duPSExKX0p'@;
put 'LHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57aC5pc0luUHJvZ3Jlc3MoKSYmaC5maW5pc2goKSxsLm1vdXNlRG93bj0hMX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIix2PT57Y29uc3QgVD12LnRh'@;
put 'cmdldCxZPXYueHx8di5jbGllbnRYLHJlPXYueXx8di5jbGllbnRZO2xldCBmZT12LnRhcmdldDtpZihsLm1vdXNlRG93bnx8IWF8fCF0aGlzLmluc3RhbmNlLnZpZXcpcmV0dXJuO2NvbnN0e2hvbGRlcjpfZX09dGhpcy5pbnN0YW5jZS52aWV3Ll93dC53dFRhYmxlO2lmKGZlPT09X2Upe2Nv'@;
put 'bnN0IFdlPWZ1KGQpO2lmKGQuZWxlbWVudEZyb21Qb2ludChZK1dlLHJlKSE9PV9lfHxkLmVsZW1lbnRGcm9tUG9pbnQoWSxyZStXZSkhPT1fZSlyZXR1cm59ZWxzZSBmb3IoO2ZlIT09Zjspe2lmKG51bGw9PT1mZSl7aWYodi5pc1RhcmdldFdlYkNvbXBvbmVudClicmVhaztyZXR1cm59aWYo'@;
put 'ZmU9PT1hKXJldHVybjtmZT1mZS5wYXJlbnROb2RlfSgiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM/dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMoVCk6dGhpcy5zZXR0aW5ncy5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMpP3Ro'@;
put 'aXMuaW5zdGFuY2UuZGVzZWxlY3RDZWxsKCk6dGhpcy5pbnN0YW5jZS5kZXN0cm95RWRpdG9yKCExLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC50YWJsZSwic2VsZWN0c3RhcnQiLHY9Pnt0aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9ufHxmdyh2LnRh'@;
put 'cmdldCl8fHYucHJldmVudERlZmF1bHQoKX0pfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiB0aGlzLmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3Vh'@;
put 'bEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwpOmwsaD1hPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBw'@;
put 'ZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKTphO3JldHVybiBudWxsPT09ZCYmKGQ9bCksbnVsbD09PWgmJihoPWEpLFtkLGhdfWNvdW50UmVuZGVyYWJsZUluZGV4ZXMobCxhKXtjb25zdCBkPU1hdGgubWluKGwuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxhKSxoPWwu'@;
put 'Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQtMSwtMSk7cmV0dXJuIG51bGw9PT1oPzA6bC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpKzF9Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvdW50UmVuZGVyYWJsZUluZGV4ZXModGhpcy5pbnN0YW5jZS5jb2x1'@;
put 'bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVzKHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5zZXR0aW5ncy5tYXhSb3dzKX1jb3VudE5vdEhpZGRlblJvd0lu'@;
put 'ZGV4ZXMobCxhKXtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkluZGV4ZXMobCxhLHRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsdGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCkpfWNvdW50Tm90SGlkZGVuQ29sdW1uSW5kZXhlcyhsLGEpe3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVu'@;
put 'SW5kZXhlcyhsLGEsdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lmKGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRl'@;
put 'eChsLGEpLHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHYpKXJldHVybiAwO2xldCBUPTA7cmV0dXJuIGE8MD9UPXYrMTphPjAmJihUPWgtdiksVH1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmlu'@;
put 'c3RhbmNlLmNvdW50Q29scygpLGE9TWF0aC5taW4ocGFyc2VJbnQodGhpcy5zZXR0aW5ncy5maXhlZENvbHVtbnNTdGFydCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlbkNvbHVtbkluZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKXtjb25zdCBsPXRo'@;
put 'aXMuaW5zdGFuY2UuY291bnRSb3dzKCksYT1NYXRoLm1pbihwYXJzZUludCh0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCwxMCksbCktMTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwtMSl9Y291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKXtjb25zdCBsPXRo'@;
put 'aXMuaW5zdGFuY2UuY291bnRSb3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwxKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtj'@;
put 'b25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFJlbmRlcmVkUm93cygpPmwmJnRo'@;
put 'aXMuaW5zdGFuY2UuY291bnRSZW5kZXJlZENvbHMoKT5hfWluaXRpYWxpemVXYWxrb250YWJsZSgpe2NvbnN0IGw9V2cuZ2V0KHRoaXMpLGE9e3J0bE1vZGU6dGhpcy5pbnN0YW5jZS5pc1J0bCgpLGV4dGVybmFsUm93Q2FsY3VsYXRvcjp0aGlzLmluc3RhbmNlLmdldFBsdWdpbigiYXV0b1Jv'@;
put 'd1NpemUiKSYmdGhpcy5pbnN0YW5jZS5nZXRQbHVnaW4oImF1dG9Sb3dTaXplIikuaXNFbmFibGVkKCksdGFibGU6bC50YWJsZSxpc0RhdGFWaWV3SW5zdGFuY2U6KCk9PkhqKHRoaXMuaW5zdGFuY2UpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cs'@;
put 'cHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCxzdHJldGNoSDooKT0+dGhpcy5zZXR0aW5ncy5zdHJldGNoSCxkYXRhOih2LFQpPT50aGlzLmluc3RhbmNlLmdldERhdGFBdENlbGwoLi4udGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgo'@;
put 'dixUKSksdG90YWxSb3dzOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSx0b3RhbENvbHVtbnM6KCk9PnRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLGZpeGVkQ29sdW1uc1N0YXJ0OigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKSxmaXhlZFJvd3NU'@;
put 'b3A6KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3AoKSxmaXhlZFJvd3NCb3R0b206KCk9PnRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NCb3R0b20oKSxzaG91bGRSZW5kZXJJbmxpbmVTdGFydE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQ+'@;
put 'MHx8YS5yb3dIZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3A+MHx8YS5jb2x1bW5IZWFkZXJzKCkubGVuZ3RoPjAsc2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheTooKT0+dGhpcy5zZXR0aW5ncy5maXhlZFJvd3NC'@;
put 'b3R0b20+MCxtaW5TcGFyZVJvd3M6KCk9PnRoaXMuc2V0dGluZ3MubWluU3BhcmVSb3dzLHJlbmRlckFsbFJvd3M6dGhpcy5zZXR0aW5ncy5yZW5kZXJBbGxSb3dzLHJvd0hlYWRlcnM6KCk9Pntjb25zdCB2PVtdO3JldHVybiB0aGlzLmluc3RhbmNlLmhhc1Jvd0hlYWRlcnMoKSYmdi5wdXNo'@;
put 'KChULFkpPT57Y29uc3QgcmU9VD49MD90aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VDt0aGlzLmFwcGVuZFJvd0hlYWRlcihyZSxZKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJz'@;
put 'Iix2KSx6b2UodGhpcyxWaix2Lmxlbmd0aCksdn0sY29sdW1uSGVhZGVyczooKT0+e2NvbnN0IHY9W107cmV0dXJuIHRoaXMuaW5zdGFuY2UuaGFzQ29sSGVhZGVycygpJiZ2LnB1c2goKFQsWSk9Pntjb25zdCByZT1UPj0wP3RoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Vmlz'@;
put 'dWFsRnJvbVJlbmRlcmFibGVJbmRleChUKTpUO3RoaXMuYXBwZW5kQ29sSGVhZGVyKHJlLFkpfSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLHYpLHpvZSh0aGlzLE5qLHYubGVuZ3RoKSx2fSxjb2x1bW5XaWR0aDp2PT57Y29uc3QgVD10'@;
put 'aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik7cmV0dXJuIHRoaXMuaW5zdGFuY2UuZ2V0Q29sV2lkdGgobnVsbD09PVQ/djpUKX0scm93SGVpZ2h0OnY9Pntjb25zdCBUPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIuZ2V0'@;
put 'VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRSb3dIZWlnaHQobnVsbD09PVQ/djpUKX0sY2VsbFJlbmRlcmVyOih2LFQsWSk9Pntjb25zdFtyZSxmZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsSW5kZXgodixUKSxfZT10'@;
put 'aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixyZSxmZSk7bGV0IGtlPXJlLFdlPWZlO0FycmF5LmlzQXJyYXkoX2UpJiYoW2tlLFdlXT1fZSk7Y29uc3QgSmU9dGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShrZSxXZSksdHQ9dGhpcy5pbnN0YW5jZS5jb2xUb1By'@;
put 'b3AoV2UpO2xldCB5dD10aGlzLmluc3RhbmNlLmdldERhdGFBdFJvd1Byb3Aoa2UsdHQpO3RoaXMuaW5zdGFuY2UuaGFzSG9vaygiYmVmb3JlVmFsdWVSZW5kZXIiKSYmKHl0PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVZhbHVlUmVuZGVyIix5dCxKZSkpLHRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixZLHJlLGZlLHR0LHl0LEplKSx0aGlzLmluc3RhbmNlLmdldENlbGxSZW5kZXJlcihKZSkodGhpcy5pbnN0YW5jZSxZLHJlLGZlLHR0LHl0LEplKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbmRlcmVyIixZLHJlLGZlLHR0LHl0LEpl'@;
put 'KX0sc2VsZWN0aW9uczp0aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5oaWdobGlnaHQsaGlkZUJvcmRlck9uTW91c2VEb3duT3ZlcjooKT0+dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbixvbldpbmRvd1Jlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVz'@;
put 'dHJveWVkJiZ0aGlzLmluc3RhbmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ29udGFpbmVyRWxlbWVudFJlc2l6ZTooKT0+e3RoaXMuaW5zdGFuY2UmJiF0aGlzLmluc3RhbmNlLmlzRGVzdHJveWVkJiZ0aGlzLmluc3RhbmNlLnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93'@;
put 'bjoodixULFkscmUpPT57Y29uc3QgZmU9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpLF9lPXtyb3c6ITEsY29sdW1uOiExLGNlbGw6ITF9O3RoaXMuaW5zdGFuY2UubGlzdGVuKCksdGhpcy5hY3RpdmVXdD1yZSxsLm1vdXNlRG93bj0hMCx0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLHYsZmUsWSxfZSksIWpnKHYpJiYoVm9lKHYse2Nvb3JkczpmZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjpfZSxjZWxsQ29vcmRzRmFjdG9yeTooa2UsV2UpPT50aGlzLmluc3RhbmNlLl9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKGtlLFdlKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VEb3duIix2LGZlLFkpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxDb250ZXh0TWVudToodixULFkscmUpPT57Y29uc3QgZmU9dGhpcy50cmFuc2xhdGVGcm9tUmVu'@;
put 'ZGVyYWJsZVRvVmlzdWFsQ29vcmRzKFQpO3RoaXMuYWN0aXZlV3Q9cmUsbC5tb3VzZURvd249ITEsdGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24uaXNJblByb2dyZXNzKCkmJnRoaXMuaW5zdGFuY2Uuc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZU9uQ2Vs'@;
put 'bENvbnRleHRNZW51Iix2LGZlLFkpLCFqZyh2KSYmKHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLHYsZmUsWSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0Oih2LFQsWSxyZSk9Pntjb25zdCBmZT10aGlzLnRyYW5zbGF0ZUZy'@;
put 'b21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1yZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU91dCIsdixmZSxZKSwhamcodikmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbE1vdXNlT3V0Iix2LGZlLFkpLHRo'@;
put 'aXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6KHYsVCxZLHJlKT0+e2NvbnN0IGZlPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhUKSxfZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmFjdGl2ZVd0PXJlLHRoaXMuaW5zdGFu'@;
put 'Y2UucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsdixmZSxZLF9lKSwhamcodikmJihsLm1vdXNlRG93biYmVm9lKHYse2Nvb3JkczpmZSxzZWxlY3Rpb246dGhpcy5pbnN0YW5jZS5zZWxlY3Rpb24sY29udHJvbGxlcjpfZSxjZWxsQ29vcmRzRmFjdG9yeTooa2UsV2UpPT50aGlz'@;
put 'Lmluc3RhbmNlLl9jcmVhdGVDZWxsQ29vcmRzKGtlLFdlKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIix2LGZlLFkpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZVVwOih2LFQsWSxyZSk9Pntjb25zdCBmZT10aGlzLnRyYW5zbGF0'@;
put 'ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoVCk7dGhpcy5hY3RpdmVXdD1yZSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZVVwIix2LGZlLFkpLCFqZyh2KSYmIXRoaXMuaW5zdGFuY2UuaXNEZXN0cm95ZWQmJih0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJh'@;
put 'ZnRlck9uQ2VsbE1vdXNlVXAiLHYsZmUsWSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbENvcm5lck1vdXNlRG93bjp2PT57di5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIix2KX0sb25DZWxsQ29ybmVy'@;
put 'RGJsQ2xpY2s6dj0+e3YucHJldmVudERlZmF1bHQoKSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIix2KX0sYmVmb3JlRHJhdzoodixUKT0+dGhpcy5iZWZvcmVSZW5kZXIodixUKSxvbkRyYXc6dj0+dGhpcy5hZnRlclJlbmRlcih2KSxvblNjcm9s'@;
put 'bFZlcnRpY2FsbHk6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyU2Nyb2xsVmVydGljYWxseSIpLG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIpLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFt'@;
put 'ZXM6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIiksb25CZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI6KHYsVCxZKT0+e2NvbnN0IHJlPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZmU9cmUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFi'@;
put 'bGVJbmRleCh2KSxfZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLGZlLFQsWSk7cmV0dXJuIHJlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF9lLDEpKX0sb25CZWZvcmVIaWdobGln'@;
put 'aHRpbmdDb2x1bW5IZWFkZXI6KHYsVCxZKT0+e2NvbnN0IHJlPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIsZmU9cmUuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KSxfZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIi'@;
put 'LGZlLFQsWSk7cmV0dXJuIHJlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KF9lLDEpKX0sb25BZnRlckRyYXdTZWxlY3Rpb246KHYsVCxZKT0+e2xldCByZTtjb25zdFtmZSxfZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRv'@;
put 'VmlzdWFsSW5kZXgodixUKSxrZT10aGlzLmluc3RhbmNlLnNlbGVjdGlvbi5nZXRTZWxlY3RlZFJhbmdlKCksV2U9a2Uuc2l6ZSgpO2lmKFdlPjApe2NvbnN0IHR0PWtlLnBlZWtCeUluZGV4KChZPz8wKSsxLVdlKTtyZT1bdHQuZnJvbS5yb3csdHQuZnJvbS5jb2wsdHQudG8ucm93LHR0LnRv'@;
put 'LmNvbF19cmV0dXJuIHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsZmUsX2UscmUsWSl9LG9uQmVmb3JlRHJhd0JvcmRlcnM6KHYsVCk9Pntjb25zdFtZLHJlLGZlLF9lXT12LGtlPVt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21S'@;
put 'ZW5kZXJhYmxlSW5kZXgoWSksdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHJlKSx0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZmUpLHRoaXMuaW5zdGFuY2UuY29sdW1u'@;
put 'SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChfZSldO3JldHVybiB0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEcmF3Qm9yZGVycyIsa2UsVCl9LG9uQmVmb3JlVG91Y2hTY3JvbGw6KCk9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVRvdWNoU2Ny'@;
put 'b2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlck1vbWVudHVtU2Nyb2xsIiksb25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg6KHYsVCk9Pntjb25zdCBZPXRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFs'@;
put 'RnJvbVJlbmRlcmFibGVJbmRleChUKTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIix2LFkpfSxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOnY9PnRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIix2KSxv'@;
put 'bk1vZGlmeUdldENlbGxDb29yZHM6KHYsVCxZKT0+e2NvbnN0IHJlPXRoaXMuaW5zdGFuY2Uucm93SW5kZXhNYXBwZXIsZmU9dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlcixfZT1UPj0wP2ZlLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoVCk6VCxrZT12Pj0wP3JlLmdldFZp'@;
put 'c3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixXZT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixrZSxfZSxZKTtpZihBcnJheS5pc0FycmF5KFdlKSl7Y29uc3RbSmUsdHQseXQsd3RdPVdlO3JldHVybltKZT49MD9yZS5nZXRSZW5kZXJhYmxlRnJvbVZp'@;
put 'c3VhbEluZGV4KHJlLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChKZSwxKSk6SmUsdHQ+PTA/ZmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodHQsMSkpOnR0LHl0Pj0wP3JlLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgocmUu'@;
put 'Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHl0LC0xKSk6eXQsd3Q+PTA/ZmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmZS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgod3QsLTEpKTp3dF19fSx2aWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTp2PT57bGV0IFQ9dGhpcy5zZXR0'@;
put 'aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDtpZigiYXV0byI9PT1UJiZ0aGlzLnNldHRpbmdzLmZpeGVkUm93c1RvcCYmKFQ9MTApLFQ+MHx8ImF1dG8iPT09VCl7Y29uc3QgWT10aGlzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxyZT12LnN0YXJ0Um93LGZlPXYuZW5kUm93O2lmKCJu'@;
put 'dW1iZXIiPT10eXBlb2YgVCl2LnN0YXJ0Um93PU1hdGgubWF4KHJlLVQsMCksdi5lbmRSb3c9TWF0aC5taW4oZmUrVCxZLTEpO2Vsc2UgaWYoImF1dG8iPT09VCl7Y29uc3QgX2U9TWF0aC5jZWlsKGZlL1kqMTIpO3Yuc3RhcnRSb3c9TWF0aC5tYXgocmUtX2UsMCksdi5lbmRSb3c9TWF0aC5t'@;
put 'aW4oZmUrX2UsWS0xKX19dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIsdil9LHZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOnY9PntsZXQgVD10aGlzLnNldHRpbmdzLnZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0'@;
put 'O2lmKCJhdXRvIj09PVQmJnRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQmJihUPTEwKSxUPjB8fCJhdXRvIj09PVQpe2NvbnN0IFk9dGhpcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCkscmU9di5zdGFydENvbHVtbixmZT12LmVuZENvbHVtbjtpZigibnVtYmVyIj09dHlwZW9mIFQm'@;
put 'Jih2LnN0YXJ0Q29sdW1uPU1hdGgubWF4KHJlLVQsMCksdi5lbmRDb2x1bW49TWF0aC5taW4oZmUrVCxZLTEpKSwiYXV0byI9PT1UKXtjb25zdCBfZT1NYXRoLmNlaWwoZmUvWSo2KTt2LnN0YXJ0Q29sdW1uPU1hdGgubWF4KHJlLV9lLDApLHYuZW5kQ29sdW1uPU1hdGgubWluKGZlK19lLFkt'@;
put 'MSl9fXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLHYpfSxyb3dIZWFkZXJXaWR0aDooKT0+dGhpcy5zZXR0aW5ncy5yb3dIZWFkZXJXaWR0aCxjb2x1bW5IZWFkZXJIZWlnaHQ6KCk9Pntjb25zdCB2PXRoaXMuaW5zdGFuY2Uu'@;
put 'cnVuSG9va3MoIm1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIpO3JldHVybiB0aGlzLnNldHRpbmdzLmNvbHVtbkhlYWRlckhlaWdodHx8dn19O3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsYSksdGhpcy5fd3Q9bmV3IFBqKGEpLHRoaXMuYWN0aXZlV3Q9'@;
put 'dGhpcy5fd3Q7Y29uc3QgZD10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpoLGhlaWdodDpmfT10aGlzLmluc3RhbmNlLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuc2V0TGFzdFNpemUoaCxmKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3Rl'@;
put 'bmVyKGQsIm1vdXNlZG93biIsdj0+e3YudGFyZ2V0PT09ZCYmMz09PXYud2hpY2gmJnYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGQsImNvbnRleHRtZW51Iix2PT57di50YXJnZXQ9PT1kJiYzPT09di53aGljaCYmdi5zdG9wUHJvcGFn'@;
put 'YXRpb24oKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5pbnN0YW5jZS5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLnNldHRpbmdzLm9ic2VydmVET01WaXNpYmlsaXR5JiZ0aGlzLl93dC5kcmF3SW50ZXJydXB0ZWQmJih0'@;
put 'aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlbmRlcigpKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7aWYoZncobCkpcmV0dXJuITA7Y29uc3QgYT1lbShsLHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RUYWJsZS5zcHJlYWRlcik7cmV0dXJuISEoITA9PT10aGlz'@;
put 'LnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZhfHwiY2VsbCI9PT10aGlzLnNldHRpbmdzLmZyYWdtZW50U2VsZWN0aW9uJiZ0aGlzLmlzU2VsZWN0ZWRPbmx5Q2VsbCgpJiZhfHwhdGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc0NlbGxFZGl0ZWQoKSYmdGhpcy5p'@;
put 'c1NlbGVjdGVkT25seUNlbGwoKSl9aXNNb3VzZURvd24oKXtyZXR1cm4gV2cuZ2V0KHRoaXMpLm1vdXNlRG93bn1pc1NlbGVjdGVkT25seUNlbGwoKXt2YXIgbCxhO3JldHVybiBudWxsIT09KGw9bnVsbD09PShhPXRoaXMuaW5zdGFuY2UuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQg'@;
put 'MD09PWE/dm9pZCAwOmEuaXNTaW5nbGUoKSkmJnZvaWQgMCE9PWwmJmx9aXNDZWxsRWRpdGVkKCl7Y29uc3QgbD10aGlzLmluc3RhbmNlLmdldEFjdGl2ZUVkaXRvcigpO3JldHVybiBsJiZsLmlzT3BlbmVkKCl9YmVmb3JlUmVuZGVyKGwsYSl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygi'@;
put 'YmVmb3JlVmlld1JlbmRlciIsdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXIsYSl9YWZ0ZXJSZW5kZXIobCl7bCYmdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJWaWV3UmVuZGVyIix0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYo'@;
put 'YS5maXJzdENoaWxkKXtjb25zdCBkPWEuZmlyc3RDaGlsZDtpZighUW8oZCwicmVsYXRpdmUiKSlyZXR1cm4gaDIoYSksdm9pZCB0aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaW5zdGFu'@;
put 'Y2UuZ2V0Um93SGVhZGVyKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpkLGdldFJvd0hlYWRlcjpofT10aGlzLmluc3RhbmNlLGY9ZC5jcmVhdGVFbGVtZW50KCJkaXYiKSx2PWQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsdi5jbGFzc05hbWU9InJvd0hl'@;
put 'YWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKHYsbCxoKSxmLmFwcGVuZENoaWxkKHYpLGEuYXBwZW5kQ2hpbGQoZil9dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaW5zdGFuY2UuZ2V0Q29sSGVhZGVyLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjA7aWYoYS5maXJzdENoaWxkKXtjb25zdCBmPWEuZmlyc3RDaGlsZDtRbyhmLCJy'@;
put 'ZWxhdGl2ZSIpP3RoaXMudXBkYXRlQ2VsbEhlYWRlcihmLnF1ZXJ5U2VsZWN0b3IoIi5jb2xIZWFkZXIiKSxsLGQsaCk6KGgyKGEpLHRoaXMuYXBwZW5kQ29sSGVhZGVyKGwsYSxkLGgpKX1lbHNle2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmluc3RhbmNlLHY9Zi5jcmVhdGVFbGVtZW50'@;
put 'KCJkaXYiKSxUPWYuY3JlYXRlRWxlbWVudCgic3BhbiIpO3YuY2xhc3NOYW1lPSJyZWxhdGl2ZSIsVC5jbGFzc05hbWU9ImNvbEhlYWRlciIsdGhpcy51cGRhdGVDZWxsSGVhZGVyKFQsbCxkLGgpLHYuYXBwZW5kQ2hpbGQoVCksYS5hcHBlbmRDaGlsZCh2KX10aGlzLmluc3RhbmNlLnJ1bkhv'@;
put 'b2tzKCJhZnRlckdldENvbEhlYWRlciIsbCxhLGgpfXVwZGF0ZUNlbGxIZWFkZXIobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTowLGY9YTtjb25zdCB2PXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3Zlcmxh'@;
put 'eShsKXx8dGhpcy5fd3Q7bC5wYXJlbnROb2RlJiYoUW8obCwiY29sSGVhZGVyIik/Zj12Lnd0VGFibGUuY29sdW1uRmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQoYSk6UW8obCwicm93SGVhZGVyIikmJihmPXYud3RUYWJsZS5yb3dGaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKSkpLGY+LTE/Rmco'@;
put 'bCxkKGEsaCkpOihubShsLCJceGEwIiksd2kobCwiY29ybmVySGVhZGVyIikpfW1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VXaWR0aCgpLWw7cmV0dXJuIGQ+MD9kOjB9bWF4aW11bVZpc2libGVFbGVtZW50SGVp'@;
put 'Z2h0KGwpe2NvbnN0IGQ9dGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sO3JldHVybiBkPjA/ZDowfXNldExhc3RTaXplKGwsYSl7Y29uc3QgZD1XZy5nZXQodGhpcyk7W2QubGFzdFdpZHRoLGQubGFzdEhlaWdodF09W2wsYV19Z2V0TGFzdFNpemUoKXtjb25zdCBs'@;
put 'PVdnLmdldCh0aGlzKTtyZXR1cm57d2lkdGg6bC5sYXN0V2lkdGgsaGVpZ2h0OmwubGFzdEhlaWdodH19Z2V0Rmlyc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uu'@;
put 'dmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlUm93KCkpfWdldExhc3RGdWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0'@;
put 'TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0Rmlyc3RWaXNpYmxlQ29s'@;
put 'dW1uKCkpfWdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuaW5zdGFuY2Uudmlldy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVDb2x1bW4oKSl9Z2V0Q29s'@;
put 'dW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIFlvZSh0aGlzLE5qKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gWW9lKHRoaXMsVmopfWRlc3Ryb3koKXt0aGlzLl93dC5kZXN0cm95KCksdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpfX0sWm9lPSJBQkNERUZHSElKS0xNTk9QUVJTVFVW'@;
put 'V1hZWiIsamo9Wm9lLmxlbmd0aDtmdW5jdGlvbiBIVChjKXtsZXQgZCxsPWMrMSxhPSIiO2Zvcig7bD4wOylkPShsLTEpJWpqLGE9U3RyaW5nLmZyb21DaGFyQ29kZSg2NStkKSthLGw9cGFyc2VJbnQoKGwtZCkvamosMTApO3JldHVybiBhfWZ1bmN0aW9uIE5GZShjKXtsZXQgbD0wO2lmKGMp'@;
put 'Zm9yKGxldCBhPTAsZD1jLmxlbmd0aC0xO2E8Yy5sZW5ndGg7YSs9MSxkLT0xKWwrPWpqKipkKihab2UuaW5kZXhPZihjW2FdKSsxKTtyZXR1cm4gbC09MSxsfWZ1bmN0aW9uIFZGZSgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1sw'@;
put 'XToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPVtdO2ZvcihoPTA7aDxsO2grKylmLnB1c2goSFQoaCkrKGQrMSkpO2EucHVzaChmKX1yZXR1cm4g'@;
put 'YX1mdW5jdGlvbiBqRmUoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MTAwLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjQ7Y29uc3QgYT1bXTtsZXQgZCxoO2Zvcihk'@;
put 'PTA7ZDxjO2QrKyl7Y29uc3QgZj17fTtmb3IoaD0wO2g8bDtoKyspZltgcHJvcCR7aH1gXT1IVChoKSsoZCsxKTthLnB1c2goZil9cmV0dXJuIGF9ZnVuY3Rpb24gQkZlKGMsbCl7Y29uc3QgYT1bXTtsZXQgZDtmb3IobGV0IGg9MDtoPGM7aCsrKXtkPVtdO2ZvcihsZXQgZj0wO2Y8bDtmKysp'@;
put 'ZC5wdXNoKCIiKTthLnB1c2goZCl9cmV0dXJuIGF9ZnVuY3Rpb24gQmooYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT1jO2NvbnN0IGQ9W107cmV0dXJuKCFBcnJheS5pc0FycmF5KGMpfHwhQXJyYXkuaXNBcnJheShj'@;
put 'WzBdKSkmJihhPVtjXSksYS5mb3JFYWNoKChoLGYpPT57QXJyYXkuaXNBcnJheShoKT9oLmZvckVhY2goKHYsVCk9PntkLnB1c2goW2YrbCxULHZdKX0pOk9iamVjdC5rZXlzKGgpLmZvckVhY2godj0+e2QucHVzaChbZitsLHYsaFt2XV0pfSl9KSxkfWZ1bmN0aW9uIFlqKGMpe2xldCBsPTA7'@;
put 'cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJihjWzBdJiZBcnJheS5pc0FycmF5KGNbMF0pP2w9Y1swXS5sZW5ndGg6Y1swXSYmdnMoY1swXSkmJihsPUNUKGNbMF0pKSksbH1mdW5jdGlvbiBXb2UoYyl7cmV0dXJuISEoQXJyYXkuaXNBcnJheShjKSYmYy5sZW5ndGgmJmMuZXZlcnkobD0+QXJy'@;
put 'YXkuaXNBcnJheShsKSkpfWZ1bmN0aW9uIEdvZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT4ib2JqZWN0Ij09dHlwZW9mIGwmJiFBcnJheS5pc0FycmF5KGwpJiZudWxsIT09bCkpfWNvbnN0IHpGZT1jbGFzcyBZRmV7Y29uc3RydWN0b3IobCl7'@;
put 'bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO3RoaXMuaG90PWwsdGhpcy5kYXRhPWEsdGhpcy5kYXRhVHlwZT0iYXJyYXkiLHRoaXMuY29sVG9Qcm9wPSgpPT57fSx0aGlzLnByb3BUb0NvbD0oKT0+e319bW9kaWZ5Um93RGF0'@;
put 'YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRh'@;
put 'dGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3RoaXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1b'@;
put 'XTtyZXR1cm4gUm4odGhpcy5kYXRhLChkLGgpPT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9'@;
put 'PT1hJiZ2b2lkIDA9PT1kO2xldCB2PW51bGwsVD1udWxsO2lmKHY9dGhpcy5tb2RpZnlSb3dEYXRhKGwpLEFycmF5LmlzQXJyYXkodikpVD1bXSxmP3YuZm9yRWFjaCgoWSxyZSk9PntUW3JlXT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwscmUsdil9KTpNbyhhLGQsWT0+e1RbWS1hXT10aGlz'@;
put 'LmdldEF0UGh5c2ljYWxDZWxsKGwsWSx2KX0pO2Vsc2UgaWYodnModil8fG9sKHYpKWlmKFQ9aD9bXTp7fSwhZnx8aCl7Y29uc3QgcmU9dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLTE7TW8oMCxyZSxmZT0+e2NvbnN0IF9lPXRoaXMuY29sVG9Qcm9wKGZlKTtpZihmZT49KGF8fDApJiZmZTw9'@;
put 'KGR8fHJlKSYmIU51bWJlci5pc0ludGVnZXIoX2UpKXtjb25zdCBrZT10aGlzLmdldEF0UGh5c2ljYWxDZWxsKGwsX2Usdik7aD9ULnB1c2goa2UpOk1UKFQsX2Usa2UpfX0pfWVsc2UgeXModiwoWSxyZSk9PntNVChULHJlLHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCxyZSx2KSl9KTtyZXR1'@;
put 'cm4gVH1zZXRBdENlbGwobCxhLGQpe2lmKCEobD49dGhpcy5jb3VudFJvd3MoKXx8YT49dGhpcy5jb3VudEZpcnN0Um93S2V5cygpKSl7aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBoPVZnKGQpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VE'@;
put 'YXRhIixsLGEsaCwic2V0IiksaC5pc1RvdWNoZWQoKSYmKGQ9aC52YWx1ZSl9TnVtYmVyLmlzSW50ZWdlcihhKT90aGlzLmRhdGFbbF1bYV09ZDpNVCh0aGlzLmRhdGFbbF0sYSxkKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZCYmKGg9InN0cmluZyI9PXR5cGVv'@;
put 'ZiBhP3FpZShkLGEpOiJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoZCk6ZFthXSksdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPVZnKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQoKSYmKGg9'@;
put 'Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51bGwsdj1u'@;
put 'dWxsLFQ9bnVsbCxZPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxUPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5jb2wsYS5jb2wpLFQ9TWF0aC5tYXgobC5yb3csYS5yb3cpLFk9TWF0aC5tYXgobC5jb2wsYS5jb2wp'@;
put 'KTtjb25zdCByZT1bXTtyZXR1cm4gTW8oZixULGZlPT57cmUucHVzaChoP3RoaXMuZ2V0QXRSb3coZmUsdm9pZCAwLHZvaWQgMCxkKTp0aGlzLmdldEF0Um93KGZlLHYsWSxkKSl9KSxyZX1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7Y29u'@;
put 'c3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBZaih0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9bnVs'@;
put 'bCx0aGlzLmhvdD1udWxsfX0sJG9lPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5wdXNoKGwpLHRoaXN9LHJ1bkxv'@;
put 'Y2FsSG9va3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgVD10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IFk9MDtZPFQ7WSsrKWJUKHRoaXMuX2xvY2FsSG9va3NbY11bWV0sdGhpcyxsLGEsZCxoLGYsdil9fSxjbGVhckxvY2FsSG9va3Mo'@;
put 'KXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07Q2YoJG9lLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCB3MT0kb2U7Y2xhc3MgR2d7Y29uc3RydWN0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQg'@;
put 'MCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDt0aGlzLmluZGV4ZWRWYWx1ZXM9W10sdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlzLmluZGV4ZWRWYWx1ZXM7aWYo'@;
put 'bDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRW'@;
put 'YWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2'@;
put 'b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLG9sKHRoaXMuaW5pdFZhbHVlT3JGbik/TW8obC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRoaXMuaW5pdFZhbHVlT3JGbihh'@;
put 'KSkpOk1vKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJpbml0IiksdGhpc31pbnNl'@;
put 'cnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZuPW51bGx9fWZ1bmN0aW9uIHpq'@;
put 'KGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gd3coYyxsKXtyZXR1cm4gZmQoYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIFVqKGMsbCl7cmV0dXJuIF9zKGMsYT0+YS1sLmZpbHRlcihkPT5kPGEpLmxlbmd0aCl9ZnVu'@;
put 'Y3Rpb24gWmooYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4gX3MoYyxoPT5oPj1hP2grZDpoKX1HYShHZyx3MSk7Y2xhc3MgcW9lIGV4dGVuZHMgR2d7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVpqKHRoaXMuaW5kZXhlZFZhbHVlcyxh'@;
put 'KTt0aGlzLmluZGV4ZWRWYWx1ZXM9emooZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPXd3KHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9VWooYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIFdqKGMsbCxhLGQpe2NvbnN0IGg9'@;
put 'YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+b2woZCk/ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24gR2ooYyxsKXtyZXR1cm4gZmQoYywoYSxkKT0+ITE9PT1sLmluY2x1ZGVzKGQpKX1jbGFz'@;
put 'cyBhbSBleHRlbmRzIEdne2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1Xaih0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1Haih0aGlzLmluZGV4ZWRWYWx1ZXMsbCks'@;
put 'c3VwZXIucmVtb3ZlKGwpfX1jbGFzcyBOVCBleHRlbmRzIGFte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBzYyh0aGlzLmdldFZhbHVlcygpLChsLGEs'@;
put 'ZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBWVCBleHRlbmRzIEdne2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBaRmUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIFdGZShjKXt2YXIgbD1mdW5jdGlvbiBHRmUoYyxsKXtpZigib2JqZWN0IiE9dHlw'@;
put 'ZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11'@;
put 'c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEs'@;
put 'ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywib3JkZXJPZkluZGV4ZXMiLFtdKX1nZXRWYWx1ZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+dGhpcy5pbmRleGVkVmFsdWVzW2xdKX1zZXRWYWx1ZXMobCl7dGhp'@;
put 'cy5vcmRlck9mSW5kZXhlcz1bLi4uQXJyYXkobC5sZW5ndGgpLmtleXMoKV0sc3VwZXIuc2V0VmFsdWVzKGwpfXNldFZhbHVlQXRJbmRleChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLm9yZGVyT2ZJbmRleGVz'@;
put 'Lmxlbmd0aDtyZXR1cm4gbDx0aGlzLmluZGV4ZWRWYWx1ZXMubGVuZ3RoJiYodGhpcy5pbmRleGVkVmFsdWVzW2xdPWEsITE9PT10aGlzLm9yZGVyT2ZJbmRleGVzLmluY2x1ZGVzKGwpJiZ0aGlzLm9yZGVyT2ZJbmRleGVzLnNwbGljZShkLDAsbCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFu'@;
put 'Z2UiKSwhMCl9Y2xlYXJWYWx1ZShsKXt0aGlzLm9yZGVyT2ZJbmRleGVzPXd3KHRoaXMub3JkZXJPZkluZGV4ZXMsW2xdKSxvbCh0aGlzLmluaXRWYWx1ZU9yRm4pP3N1cGVyLnNldFZhbHVlQXRJbmRleChsLHRoaXMuaW5pdFZhbHVlT3JGbihsKSk6c3VwZXIuc2V0VmFsdWVBdEluZGV4KGws'@;
put 'dGhpcy5pbml0VmFsdWVPckZuKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGh9c2V0RGVmYXVsdFZhbHVlcygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmluZGV4ZWRWYWx1ZXMu'@;
put 'bGVuZ3RoO3RoaXMub3JkZXJPZkluZGV4ZXMubGVuZ3RoPTAsc3VwZXIuc2V0RGVmYXVsdFZhbHVlcyhsKX1pbnNlcnQobCxhKXt0aGlzLmluZGV4ZWRWYWx1ZXM9V2oodGhpcy5pbmRleGVkVmFsdWVzLDAsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHRoaXMub3JkZXJPZkluZGV4ZXM9WmoodGhp'@;
put 'cy5vcmRlck9mSW5kZXhlcyxhKSxzdXBlci5pbnNlcnQobCxhKX1yZW1vdmUobCl7dGhpcy5pbmRleGVkVmFsdWVzPUdqKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPXd3KHRoaXMub3JkZXJPZkluZGV4ZXMsbCksdGhpcy5vcmRlck9mSW5kZXhlcz1Vaih0aGlz'@;
put 'Lm9yZGVyT2ZJbmRleGVzLGwpLHN1cGVyLnJlbW92ZShsKX1nZXRFbnRyaWVzKCl7cmV0dXJuIHRoaXMub3JkZXJPZkluZGV4ZXMubWFwKGw9PltsLHRoaXMuZ2V0VmFsdWVBdEluZGV4KGwpXSl9fWNsYXNzIE13IGV4dGVuZHMgYW17Y29uc3RydWN0b3IoKXtzdXBlcihhcmd1bWVudHMubGVu'@;
put 'Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKX1nZXRUcmltbWVkSW5kZXhlcygpe3JldHVybiBzYyh0aGlzLmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jb25zdCBLb2U9bmV3IE1hcChbWyJoaWRpbmciLE5UXSxbImluZGV4IixH'@;
put 'Z10sWyJsaW5rZWRQaHlzaWNhbEluZGV4VG9WYWx1ZSIsVlRdLFsicGh5c2ljYWxJbmRleFRvVmFsdWUiLGFtXSxbInRyaW1taW5nIixNd11dKTtsZXQgJGo9MDtjbGFzcyBxantjb25zdHJ1Y3Rvcigpe3RoaXMuY29sbGVjdGlvbj1uZXcgTWFwfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNv'@;
put 'bGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLCRqKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtlbyhhKSYmKGEu'@;
put 'ZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxldGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLCRqLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9'@;
put 'Z2V0KGwpe3JldHVybiBpbChsKT9BcnJheS5mcm9tKHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9'@;
put 'PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnkobCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fUdhKHFqLHcxKTtjbGFzcyBYb2UgZXh0ZW5kcyBxantj'@;
put 'b25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZT1bXSx0aGlzLmFnZ3JlZ2F0aW9uRnVuY3Rpb249bCx0aGlzLmZhbGxiYWNrVmFsdWU9YX1nZXRNZXJnZWRWYWx1ZXMoKXtpZighMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRz'@;
put 'WzBdKXx8YXJndW1lbnRzWzBdKSlyZXR1cm4gdGhpcy5tZXJnZWRWYWx1ZXNDYWNoZTtpZigwPT09dGhpcy5nZXRMZW5ndGgoKSlyZXR1cm5bXTtjb25zdCBhPV9zKHRoaXMuZ2V0KCksZj0+Zi5nZXRWYWx1ZXMoKSksZD1bXSxoPWVvKGFbMF0pJiZhWzBdLmxlbmd0aHx8MDtmb3IobGV0IGY9'@;
put 'MDtmPGg7Zis9MSl7Y29uc3Qgdj1bXTtmb3IobGV0IFQ9MDtUPHRoaXMuZ2V0TGVuZ3RoKCk7VCs9MSl2LnB1c2goYVtUXVtmXSk7ZC5wdXNoKHYpfXJldHVybiBfcyhkLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbil9Z2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwsYSl7Y29uc3QgZD10aGlzLmdl'@;
put 'dE1lcmdlZFZhbHVlcyhhKVtsXTtyZXR1cm4gZW8oZCk/ZDp0aGlzLmZhbGxiYWNrVmFsdWV9dXBkYXRlQ2FjaGUoKXt0aGlzLm1lcmdlZFZhbHVlc0NhY2hlPXRoaXMuZ2V0TWVyZ2VkVmFsdWVzKCExKX19ZnVuY3Rpb24gSm9lKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBLaj1uZXcgV2Vha01hcDtjbGFzcyBRb2V7Y29uc3RydWN0b3IoKXshZnVuY3Rpb24gS0ZlKGMsbCxhKXsoZnVuY3Rpb24gWEZlKGMsbCl7aWYobC5oYXMo'@;
put 'YykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxLaix7d3JpdGFibGU6ITAsdmFsdWU6W119KX1zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMu'@;
put 'YWRkTG9jYWxIb29rKCJjaGFuZ2UiLGwpLHRoaXMuX3dyaXRlKGZ1bmN0aW9uIGVIZShjLGwpe3JldHVybiBmdW5jdGlvbiB0SGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLEpvZShjLGwsImdldCIpKX0odGhpcyxLaikpLHRoaXN9dW5zdWJzY3JpYmUoKXty'@;
put 'ZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJ1bnN1YnNjcmliZSIpLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpc31fd3JpdGUobCl7cmV0dXJuIGwubGVuZ3RoPjAmJnRoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIixsKSx0aGlzfV93cml0ZUluaXRpYWxDaGFuZ2VzKGwpeyFmdW5jdGlv'@;
put 'biBKRmUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBRRmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLEpv'@;
put 'ZShjLGwsInNldCIpLGEpLGF9KHRoaXMsS2osbCl9fWZ1bmN0aW9uIGVzZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxu'@;
put 'ZXdWYWx1ZTpsW2hdfSk7Zm9yKDtkPGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVl'@;
put 'OnZvaWQgMH0pO3JldHVybiBhfWZ1bmN0aW9uIEN3KGMsbCxhKXsoZnVuY3Rpb24gbkhlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5z'@;
put 'ZXQoYyxhKX1mdW5jdGlvbiBsaChjLGwpe3JldHVybiBmdW5jdGlvbiBySGUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLHRzZShjLGwsImdldCIpKX1mdW5jdGlvbiBqVChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIGlIZShjLGwsYSl7aWYobC5zZXQpbC5zZXQu'@;
put 'Y2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsdHNlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiB0c2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9R2EoUW9lLHcxKTt2YXIgQlQ9bmV3IFdlYWtNYXAsU3c9bmV3IFdlYWtNYXAsWVQ9bmV3IFdlYWtNYXAselQ9bmV3IFdlYWtNYXAsVVQ9bmV3'@;
put 'IFdlYWtNYXA7Y2xhc3Mgb0hle2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtDdyh0aGlzLEJULHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgU2V0fSksQ3codGhpcyxT'@;
put 'dyx7d3JpdGFibGU6ITAsdmFsdWU6W119KSxDdyh0aGlzLFlULHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLEN3KHRoaXMselQse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksQ3codGhpcyxVVCx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxqVCh0aGlzLFVULGw/PyExKX1jcmVhdGVPYnNlcnZlcigp'@;
put 'e2NvbnN0IGw9bmV3IFFvZTtyZXR1cm4gbGgodGhpcyxCVCkuYWRkKGwpLGwuYWRkTG9jYWxIb29rKCJ1bnN1YnNjcmliZSIsKCk9PntsaCh0aGlzLEJUKS5kZWxldGUobCl9KSxsLl93cml0ZUluaXRpYWxDaGFuZ2VzKGVzZShsaCh0aGlzLFN3KSxsaCh0aGlzLFlUKSkpLGx9ZW1pdChsKXts'@;
put 'ZXQgYT1saCh0aGlzLFlUKTsoIWxoKHRoaXMselQpfHxsaCh0aGlzLFN3KS5sZW5ndGghPT1sLmxlbmd0aCkmJigwPT09bC5sZW5ndGg/bD1uZXcgQXJyYXkoYS5sZW5ndGgpLmZpbGwobGgodGhpcyxVVCkpOmpUKHRoaXMsU3csbmV3IEFycmF5KGwubGVuZ3RoKS5maWxsKGxoKHRoaXMsVVQp'@;
put 'KSksbGgodGhpcyx6VCl8fChqVCh0aGlzLHpULCEwKSxhPWxoKHRoaXMsU3cpKSk7Y29uc3QgZD1lc2UoYSxsKTtsaCh0aGlzLEJUKS5mb3JFYWNoKGg9PmguX3dyaXRlKGQpKSxqVCh0aGlzLFlULGwpfX1jbGFzcyBYantjb25zdHJ1Y3Rvcigpe3RoaXMuaW5kZXhlc1NlcXVlbmNlPW5ldyBx'@;
put 'b2UsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uPW5ldyBYb2UobD0+bC5zb21lKGE9PiEwPT09YSksITEpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb249bmV3IFhvZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb249bmV3IHFqLHRoaXMuaGlk'@;
put 'aW5nQ2hhbmdlc09ic2VydmFibGU9bmV3IG9IZSh7aW5pdGlhbEluZGV4VmFsdWU6ITF9KSx0aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU9W10sdGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU9W10sdGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRo'@;
put 'aXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQ9ITEsdGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZD0hMSx0aGlzLnJlbmRlcmFibGVQaHlzaWNhbEluZGV4ZXNDYWNoZT1bXSx0aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hl'@;
put 'PW5ldyBNYXAsdGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlPW5ldyBNYXAsdGhpcy5pbmRleGVzU2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxv'@;
put 'Y2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2Ui'@;
put 'LGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9'@;
put 'Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhp'@;
put 'cy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJhdGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNP'@;
put 'YnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlwZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxk'@;
put 'KXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uICRGZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighS29lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAo'@;
put 'IiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KEtvZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1hcChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBz'@;
put 'Q29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgTXc/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIE5UP3RoaXMuaGlk'@;
put 'aW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3RlcihsLGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBz'@;
put 'Q29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgp'@;
put 'LHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gZW8o'@;
put 'YSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBlbyhhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNh'@;
put 'bFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gZW8oYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJl'@;
put 'bmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuZ2V0KGwpO3JldHVybiBlbyhhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0'@;
put 'aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/Zi5maW5kSW5kZXgoVD0+VD5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoVD0+VDxsKSwtMT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCEx'@;
put 'KTpudWxsOmZbdl19aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygp'@;
put 'XSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9'@;
put 'dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmlu'@;
put 'aXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xlbmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwp'@;
put 'LmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEsbC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09'@;
put 'PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5pbmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQg'@;
put 'MCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9'@;
put 'PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RUcmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50'@;
put 'c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhl'@;
put 'cygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4'@;
put 'ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxl'@;
put 'bmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPV9zKGwscmU9PnRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgocmUpKSxoPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxmPWwubGVuZ3RoLHY9d3codGhpcy5nZXRJ'@;
put 'bmRleGVzU2VxdWVuY2UoKSxkKSxUPXYuZmlsdGVyKHJlPT4hMT09PXRoaXMuaXNUcmltbWVkKHJlKSk7bGV0IFk9di5pbmRleE9mKFRbVC5sZW5ndGgtMV0pKzE7YStmPGgmJihZPXYuaW5kZXhPZihUW2FdKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJtb3ZlIix0aGlzLnNldEluZGV4'@;
put 'ZXNTZXF1ZW5jZSh6aih2LFksZCkpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDB9aXNUcmltbWVkKGwpe3JldHVybiB0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWlzSGlkZGVuKGwpe3JldHVybiB0aGlzLmhpZGluZ01hcHNDb2xs'@;
put 'ZWN0aW9uLmdldE1lcmdlZFZhbHVlQXRJbmRleChsKX1pbnNlcnRJbmRleGVzKGwsYSl7Y29uc3QgZD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKClbbF0saD1lbyhkKT9kOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksZj10aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmluY2x1ZGVzKGQp'@;
put 'P3RoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5kZXhPZihkKTp0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLHY9X3MobmV3IEFycmF5KGEpLmZpbGwoaCksKFQsWSk9PlQrWSk7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5zZXJ0Iix0aGlz'@;
put 'LmluZGV4ZXNTZXF1ZW5jZS5pbnNlcnQoZix2KSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy52YXJpb3Vz'@;
put 'TWFwc0NvbGxlY3Rpb24uaW5zZXJ0VG9FdmVyeShmLHYpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXJlbW92ZUluZGV4ZXMobCl7dGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0icmVtb3ZlIix0aGlzLmluZGV4ZXNTZXF1ZW5jZS5yZW1vdmUobCks'@;
put 'dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLnJlbW92ZUZyb21FdmVy'@;
put 'eShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKX11cGRhdGVDYWNoZSgpeyghMD09PShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKXx8ITE9PT10aGlzLmlzQmF0Y2hlZCYmITA9PT0odGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkfHx0'@;
put 'aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZHx8dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZCkpJiYodGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi51cGRhdGVDYWNoZSgpLHRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNo'@;
put 'ZT10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzKCExKSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT10aGlzLmdldE5vdEhpZGRlbkluZGV4ZXMoITEpLHRoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXMoITEpLHRoaXMuY2FjaGVG'@;
put 'cm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXMoKSx0aGlzLmNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkJiZ0aGlzLmhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlLmVtaXQodGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJn'@;
put 'ZWRWYWx1ZXMoKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjYWNoZVVwZGF0ZWQiLHtpbmRleGVzU2VxdWVuY2VDaGFuZ2VkOnRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCx0cmltbWVkSW5kZXhlc0NoYW5nZWQ6dGhpcy50cmltbWVkSW5kZXhlc0NoYW5nZWQsaGlkZGVuSW5kZXhlc0NoYW5n'@;
put 'ZWQ6dGhpcy5oaWRkZW5JbmRleGVzQ2hhbmdlZH0pLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZD0hMSx0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMSx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSExKX1jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpe2NvbnN0IGw9'@;
put 'dGhpcy5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVZpc3VhbEluZGV4KGEpO3RoaXMuZnJvbVBoeXNpY2FsVG9W'@;
put 'aXN1YWxJbmRleGVzQ2FjaGUuc2V0KGQsYSl9fWNhY2hlRnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXMoKXtjb25zdCBsPXRoaXMuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuY2xlYXIoKTtmb3IobGV0IGE9'@;
put 'MDthPGw7YSs9MSl7Y29uc3QgZD10aGlzLmdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChhKSxoPXRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoZCk7dGhpcy5mcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlc0NhY2hlLnNldChoLGEpfX19ZnVuY3Rpb24gbnNlKGMpe2Nv'@;
put 'bnN0IGE9L14oW2EtekEtWl17Mn0pLShbYS16QS1aXXsyfSkkLy5leGVjKGMpO3JldHVybiBhP2Ake2FbMV0udG9Mb3dlckNhc2UoKX0tJHthWzJdLnRvVXBwZXJDYXNlKCl9YDpjfWZ1bmN0aW9uIHJzZShjKXtlbyhjKSYmcmooV2FgTGFuZ3VhZ2Ugd2l0aCBjb2RlICIke2N9IiB3YXMgbm90'@;
put 'IGZvdW5kLiBZb3Ugc2hvdWxkIHJlZ2lzdGVyIHBhcnRpY3VsYXIgbGFuZ3VhZ2VceDIwCiAgICBiZWZvcmUgdXNpbmcgaXQuIFJlYWQgbW9yZSBhYm91dCB0aGlzIGlzc3VlIGF0OiBodHRwczovL2RvY3MuaGFuZHNvbnRhYmxlLmNvbS9pMThuL21pc3NpbmctbGFuZ3VhZ2UtY29kZS5gKX1H'@;
put 'YShYaix3MSk7Y29uc3R7cmVnaXN0ZXI6bEhlLGdldFZhbHVlczpjSGV9PXNoKCJwaHJhc2VGb3JtYXR0ZXJzIik7IWZ1bmN0aW9uIHVIZShjLGwpe2xIZShjLGwpfSgicGx1cmFsaXplIixmdW5jdGlvbiBhSGUoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmTnVtYmVyLmlzSW50ZWdl'@;
put 'cihsKT9jW2xdOmN9KTtjb25zdCBpc2U9IkNvbnRleHRNZW51Oml0ZW1zIixKaj1gJHtpc2V9Lm5vSXRlbXNgLFFqPWAke2lzZX0uaW5zZXJ0Um93QWJvdmVgLGVCPWAke2lzZX0uaW5zZXJ0Um93QmVsb3dgLHRCPWAke2lzZX0uaW5zZXJ0Q29sdW1uT25UaGVMZWZ0YCxuQj1gJHtpc2V9Lmlu'@;
put 'c2VydENvbHVtbk9uVGhlUmlnaHRgLHJCPWAke2lzZX0ucmVtb3ZlUm93YCxpQj1gJHtpc2V9LnJlbW92ZUNvbHVtbmAsb0I9YCR7aXNlfS51bmRvYCxzQj1gJHtpc2V9LnJlZG9gLGFCPWAke2lzZX0ucmVhZE9ubHlgLGxCPWAke2lzZX0uY2xlYXJDb2x1bW5gLGNCPWAke2lzZX0uY29weWAs'@;
put 'dUI9YCR7aXNlfS5jb3B5V2l0aEhlYWRlcnNgLGRCPWAke2lzZX0uY29weVdpdGhHcm91cEhlYWRlcnNgLGhCPWAke2lzZX0uY29weUhlYWRlcnNPbmx5YCxmQj1gJHtpc2V9LmN1dGAscEI9YCR7aXNlfS5mcmVlemVDb2x1bW5gLG1CPWAke2lzZX0udW5mcmVlemVDb2x1bW5gLGdCPWAke2lz'@;
put 'ZX0ubWVyZ2VDZWxsc2AsX0I9YCR7aXNlfS51bm1lcmdlQ2VsbHNgLHZCPWAke2lzZX0uYWRkQ29tbWVudGAseUI9YCR7aXNlfS5lZGl0Q29tbWVudGAsYkI9YCR7aXNlfS5yZW1vdmVDb21tZW50YCx3Qj1gJHtpc2V9LnJlYWRPbmx5Q29tbWVudGAsTUI9YCR7aXNlfS5hbGlnbmAsQ0I9YCR7'@;
put 'aXNlfS5hbGlnbi5sZWZ0YCxTQj1gJHtpc2V9LmFsaWduLmNlbnRlcmAseEI9YCR7aXNlfS5hbGlnbi5yaWdodGAsa0I9YCR7aXNlfS5hbGlnbi5qdXN0aWZ5YCxFQj1gJHtpc2V9LmFsaWduLnRvcGAsVEI9YCR7aXNlfS5hbGlnbi5taWRkbGVgLERCPWAke2lzZX0uYWxpZ24uYm90dG9tYCxB'@;
put 'Qj1gJHtpc2V9LmJvcmRlcnNgLExCPWAke2lzZX0uYm9yZGVycy50b3BgLElCPWAke2lzZX0uYm9yZGVycy5yaWdodGAsUkI9YCR7aXNlfS5ib3JkZXJzLmJvdHRvbWAsT0I9YCR7aXNlfS5ib3JkZXJzLmxlZnRgLFBCPWAke2lzZX0uYm9yZGVycy5yZW1vdmVgLEZCPWAke2lzZX0ubmVzdGVk'@;
put 'SGVhZGVycy5pbnNlcnRDaGlsZFJvd2AsSEI9YCR7aXNlfS5uZXN0ZWRIZWFkZXJzLmRldGFjaEZyb21QYXJlbnRgLE5CPWAke2lzZX0uaGlkZUNvbHVtbmAsVkI9YCR7aXNlfS5zaG93Q29sdW1uYCxqQj1gJHtpc2V9LmhpZGVSb3dgLEJCPWAke2lzZX0uc2hvd1Jvd2AsTzA9IkZpbHRlcnM6'@;
put 'IixLbD1gJHtPMH1jb25kaXRpb25zYCxaVD1gJHtLbH0ubm9uZWAsWUI9YCR7S2x9LmlzRW1wdHlgLHpCPWAke0tsfS5pc05vdEVtcHR5YCxVQj1gJHtLbH0uaXNFcXVhbFRvYCxaQj1gJHtLbH0uaXNOb3RFcXVhbFRvYCxXQj1gJHtLbH0uYmVnaW5zV2l0aGAsR0I9YCR7S2x9LmVuZHNXaXRo'@;
put 'YCwkQj1gJHtLbH0uY29udGFpbnNgLHFCPWAke0tsfS5kb2VzTm90Q29udGFpbmAsaEhlPWAke0tsfS5ieVZhbHVlYCxLQj1gJHtLbH0uZ3JlYXRlclRoYW5gLFhCPWAke0tsfS5ncmVhdGVyVGhhbk9yRXF1YWxUb2AsSkI9YCR7S2x9Lmxlc3NUaGFuYCxRQj1gJHtLbH0ubGVzc1RoYW5PckVx'@;
put 'dWFsVG9gLGVZPWAke0tsfS5pc0JldHdlZW5gLHRZPWAke0tsfS5pc05vdEJldHdlZW5gLG5ZPWAke0tsfS5hZnRlcmAsclk9YCR7S2x9LmJlZm9yZWAsaVk9YCR7S2x9LnRvZGF5YCxvWT1gJHtLbH0udG9tb3Jyb3dgLHNZPWAke0tsfS55ZXN0ZXJkYXlgLGFZPWAke08wfWxhYmVscy5maWx0'@;
put 'ZXJCeUNvbmRpdGlvbmAsbFk9YCR7TzB9bGFiZWxzLmZpbHRlckJ5VmFsdWVgLGNZPWAke08wfWxhYmVscy5jb25qdW5jdGlvbmAsV1Q9YCR7TzB9bGFiZWxzLmRpc2p1bmN0aW9uYCxHVD1gJHtPMH12YWx1ZXMuYmxhbmtDZWxsc2AsdVk9YCR7TzB9YnV0dG9ucy5zZWxlY3RBbGxgLGRZPWAk'@;
put 'e08wfWJ1dHRvbnMuY2xlYXJgLGhZPWAke08wfWJ1dHRvbnMub2tgLGZZPWAke08wfWJ1dHRvbnMuY2FuY2VsYCxwWT1gJHtPMH1idXR0b25zLnBsYWNlaG9sZGVyLnNlYXJjaGAsbVk9YCR7TzB9YnV0dG9ucy5wbGFjZWhvbGRlci52YWx1ZWAsZ1k9YCR7TzB9YnV0dG9ucy5wbGFjZWhvbGRl'@;
put 'ci5zZWNvbmRWYWx1ZWAsb3NlPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbSmpdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW1FqXToiSW5zZXJ0IHJvdyBhYm92ZSIsW2VCXToiSW5zZXJ0IHJvdyBiZWxvdyIsW3RCXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbbkJdOiJJbnNlcnQgY29sdW1uIHJp'@;
put 'Z2h0IixbckJdOlsiUmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW2lCXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFtvQl06IlVuZG8iLFtzQl06IlJlZG8iLFthQl06IlJlYWQgb25seSIsW2xCXToiQ2xlYXIgY29sdW1uIixbTUJdOiJBbGlnbm1lbnQiLFtDQl06Ikxl'@;
put 'ZnQiLFtTQl06IkNlbnRlciIsW3hCXToiUmlnaHQiLFtrQl06Ikp1c3RpZnkiLFtFQl06IlRvcCIsW1RCXToiTWlkZGxlIixbREJdOiJCb3R0b20iLFtwQl06IkZyZWV6ZSBjb2x1bW4iLFttQl06IlVuZnJlZXplIGNvbHVtbiIsW0FCXToiQm9yZGVycyIsW0xCXToiVG9wIixbSUJdOiJSaWdo'@;
put 'dCIsW1JCXToiQm90dG9tIixbT0JdOiJMZWZ0IixbUEJdOiJSZW1vdmUgYm9yZGVyKHMpIixbdkJdOiJBZGQgY29tbWVudCIsW3lCXToiRWRpdCBjb21tZW50IixbYkJdOiJEZWxldGUgY29tbWVudCIsW3dCXToiUmVhZC1vbmx5IGNvbW1lbnQiLFtnQl06Ik1lcmdlIGNlbGxzIixbX0JdOiJV'@;
put 'bm1lcmdlIGNlbGxzIixbY0JdOiJDb3B5IixbdUJdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW2RCXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyJdLFtoQl06WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFk'@;
put 'ZXJzIG9ubHkiXSxbZkJdOiJDdXQiLFtGQl06Ikluc2VydCBjaGlsZCByb3ciLFtIQl06IkRldGFjaCBmcm9tIHBhcmVudCIsW05CXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW1ZCXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW2pCXTpbIkhpZGUgcm93IiwiSGlk'@;
put 'ZSByb3dzIl0sW0JCXTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW1pUXToiTm9uZSIsW1lCXToiSXMgZW1wdHkiLFt6Ql06IklzIG5vdCBlbXB0eSIsW1VCXToiSXMgZXF1YWwgdG8iLFtaQl06IklzIG5vdCBlcXVhbCB0byIsW1dCXToiQmVnaW5zIHdpdGgiLFtHQl06IkVuZHMgd2l0aCIs'@;
put 'WyRCXToiQ29udGFpbnMiLFtxQl06IkRvZXMgbm90IGNvbnRhaW4iLFtLQl06IkdyZWF0ZXIgdGhhbiIsW1hCXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbSkJdOiJMZXNzIHRoYW4iLFtRQl06Ikxlc3MgdGhhbiBvciBlcXVhbCB0byIsW2VZXToiSXMgYmV0d2VlbiIsW3RZXToiSXMg'@;
put 'bm90IGJldHdlZW4iLFtuWV06IkFmdGVyIixbclldOiJCZWZvcmUiLFtpWV06IlRvZGF5Iixbb1ldOiJUb21vcnJvdyIsW3NZXToiWWVzdGVyZGF5IixbR1RdOiJCbGFuayBjZWxscyIsW2FZXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW2xZXToiRmlsdGVyIGJ5IHZhbHVlIixbY1ldOiJBbmQi'@;
put 'LFtXVF06Ik9yIixbdVldOiJTZWxlY3QgYWxsIixbZFldOiJDbGVhciIsW2hZXToiT0siLFtmWV06IkNhbmNlbCIsW3BZXToiU2VhcmNoIixbbVldOiJWYWx1ZSIsW2dZXToiU2Vjb25kIHZhbHVlIn0sZkhlPU4sX1k9b3NlLmxhbmd1YWdlQ29kZSx7cmVnaXN0ZXI6cEhlLGdldEl0ZW06c3Nl'@;
put 'LGhhc0l0ZW06bUhlLGdldFZhbHVlczpnSGV9PXNoKCJsYW5ndWFnZXNEaWN0aW9uYXJpZXMiKTtmdW5jdGlvbiBhc2UoYyxsKXtsZXQgYT1jLGQ9bDtyZXR1cm4gdnMoYykmJihkPWMsYT1kLmxhbmd1YWdlQ29kZSksZnVuY3Rpb24gX0hlKGMsbCl7YyE9PV9ZJiZmdW5jdGlvbiBzSGUoYyxs'@;
put 'KXt5cyhsLChhLGQpPT57aWwoY1tkXSkmJihjW2RdPWEpfSl9KGwsc3NlKF9ZKSl9KGEsZCkscEhlKGEsbDAoZCkpLGwwKGQpfWZ1bmN0aW9uIGxzZShjKXtyZXR1cm4gdlkoYyk/bDAoc3NlKGMpKTpudWxsfWZ1bmN0aW9uIHZZKGMpe3JldHVybiBtSGUoYyl9ZnVuY3Rpb24gY3NlKGMsbCxh'@;
put 'KXtjb25zdCBkPWxzZShjKTtpZihudWxsPT09ZClyZXR1cm4gbnVsbDtjb25zdCBoPWRbbF07aWYoaWwoaCkpcmV0dXJuIG51bGw7Y29uc3QgZj1mdW5jdGlvbiB5SGUoYyxsKXtsZXQgYT1jO3JldHVybiBSbihmdW5jdGlvbiBkSGUoKXtyZXR1cm4gY0hlKCl9KCksZD0+e2E9ZChjLGwpfSks'@;
put 'YX0oaCxhKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmKT9mWzBdOmZ9YXNlKG9zZSk7Y29uc3QgJFQ9ImFjdGl2ZS1oZWFkZXIiLHFUPSJhcmVhIix4dz0iY2VsbCIseVk9ImZpbGwiLGt3PSJoZWFkZXIiLGJZPSJjdXN0b20tc2VsZWN0aW9uIixNSGU9Y2xhc3Mgd0hle2NvbnN0cnVjdG9yKGws'@;
put 'YSl7YSYmKHRoaXMuZXZlbnRNYW5hZ2VyPWwuZXZlbnRNYW5hZ2VyLHRoaXMuaW5zdGFuY2U9bCx0aGlzLndvdD1sLHRoaXMuc2V0dGluZ3M9YSx0aGlzLm1vdXNlRG93bj0hMSx0aGlzLm1haW49bnVsbCx0aGlzLnRvcD1udWxsLHRoaXMuYm90dG9tPW51bGwsdGhpcy5zdGFydD1udWxsLHRo'@;
put 'aXMuZW5kPW51bGwsdGhpcy50b3BTdHlsZT1udWxsLHRoaXMuYm90dG9tU3R5bGU9bnVsbCx0aGlzLnN0YXJ0U3R5bGU9bnVsbCx0aGlzLmVuZFN0eWxlPW51bGwsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGU9e3dpZHRoOiI2cHgiLGhlaWdodDoiNnB4Iixib3JkZXJXaWR0aDoiMXB4Iixib3Jk'@;
put 'ZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiIjRkZGIn0sdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldD0tcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIsdGhpcy5jb3JuZXI9bnVsbCx0aGlzLmNvcm5lclN0eWxlPW51bGwsdGhpcy5jcmVhdGVCb3Jk'@;
put 'ZXJzKGEpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSl9cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vkb3duIiwoKT0+dGhpcy5vbk1vdXNlRG93bigpKSx0aGlz'@;
put 'LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKTtmb3IobGV0IGE9MCxkPXRoaXMubWFpbi5jaGlsZE5vZGVzLmxlbmd0aDthPGQ7YSsrKXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5tYWluLmNoaWxk'@;
put 'Tm9kZXNbYV0sIm1vdXNlZW50ZXIiLGY9PnRoaXMub25Nb3VzZUVudGVyKGYsdGhpcy5tYWluLmNoaWxkTm9kZXNbYV0pKX1vbk1vdXNlRG93bigpe3RoaXMubW91c2VEb3duPSEwfW9uTW91c2VVcCgpe3RoaXMubW91c2VEb3duPSExfW9uTW91c2VFbnRlcihsLGEpe2lmKCF0aGlzLm1vdXNl'@;
put 'RG93bnx8IXRoaXMud290LmdldFNldHRpbmcoImhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXIiKSlyZXR1cm47bC5wcmV2ZW50RGVmYXVsdCgpLHAyKGwpO2NvbnN0IGQ9dGhpcyxoPXRoaXMud290LnJvb3REb2N1bWVudC5ib2R5LGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnN0eWxl'@;
put 'LmRpc3BsYXk9Im5vbmUiLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoaCwibW91c2Vtb3ZlIixmdW5jdGlvbiBUKFkpeyhmdW5jdGlvbiB2KFkpe2lmKFkuY2xpZW50WTxNYXRoLmZsb29yKGYudG9wKXx8WS5jbGllbnRZPk1hdGguY2VpbChmLnRvcCtmLmhlaWdodCl8fFku'@;
put 'Y2xpZW50WDxNYXRoLmZsb29yKGYubGVmdCl8fFkuY2xpZW50WD5NYXRoLmNlaWwoZi5sZWZ0K2Yud2lkdGgpKXJldHVybiEwfSkoWSkmJihkLmV2ZW50TWFuYWdlci5yZW1vdmVFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsVCksYS5zdHlsZS5kaXNwbGF5PSJibG9jayIpfSl9Y3JlYXRl'@;
put 'Qm9yZGVycyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy53b3Q7dGhpcy5tYWluPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7Y29uc3QgZD1bInRvcCIsInN0YXJ0IiwiYm90dG9tIiwiZW5kIiwiY29ybmVyIl07bGV0IGg9dGhpcy5tYWluLnN0eWxlO2gucG9zaXRpb249ImFic29sdXRl'@;
put 'IixoLnRvcD0wLGgubGVmdD0wO2ZvcihsZXQgVD0wO1Q8NTtUKyspe2NvbnN0IFk9ZFtUXSxyZT1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JlLmNsYXNzTmFtZT1gd3RCb3JkZXIgJHt0aGlzLnNldHRpbmdzLmNsYXNzTmFtZXx8IiJ9YCx0aGlzLnNldHRpbmdzW1ldJiZ0aGlzLnNldHRpbmdz'@;
put 'W1ldLmhpZGUmJihyZS5jbGFzc05hbWUrPSIgaGlkZGVuIiksaD1yZS5zdHlsZSxoLmJhY2tncm91bmRDb2xvcj10aGlzLnNldHRpbmdzW1ldJiZ0aGlzLnNldHRpbmdzW1ldLmNvbG9yP3RoaXMuc2V0dGluZ3NbWV0uY29sb3I6bC5ib3JkZXIuY29sb3IsaC5oZWlnaHQ9dGhpcy5zZXR0aW5n'@;
put 'c1tZXSYmdGhpcy5zZXR0aW5nc1tZXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW1ldLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsaC53aWR0aD10aGlzLnNldHRpbmdzW1ldJiZ0aGlzLnNldHRpbmdzW1ldLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbWV0ud2lkdGh9cHhgOmAke2wu'@;
put 'Ym9yZGVyLndpZHRofXB4YCx0aGlzLm1haW4uYXBwZW5kQ2hpbGQocmUpfXRoaXMudG9wPXRoaXMubWFpbi5jaGlsZE5vZGVzWzBdLHRoaXMuc3RhcnQ9dGhpcy5tYWluLmNoaWxkTm9kZXNbMV0sdGhpcy5ib3R0b209dGhpcy5tYWluLmNoaWxkTm9kZXNbMl0sdGhpcy5lbmQ9dGhpcy5tYWlu'@;
put 'LmNoaWxkTm9kZXNbM10sdGhpcy50b3BTdHlsZT10aGlzLnRvcC5zdHlsZSx0aGlzLnN0YXJ0U3R5bGU9dGhpcy5zdGFydC5zdHlsZSx0aGlzLmJvdHRvbVN0eWxlPXRoaXMuYm90dG9tLnN0eWxlLHRoaXMuZW5kU3R5bGU9dGhpcy5lbmQuc3R5bGUsdGhpcy5jb3JuZXI9dGhpcy5tYWluLmNo'@;
put 'aWxkTm9kZXNbNF0sdGhpcy5jb3JuZXIuY2xhc3NOYW1lKz0iIGNvcm5lciIsdGhpcy5jb3JuZXJTdHlsZT10aGlzLmNvcm5lci5zdHlsZSx0aGlzLmNvcm5lclN0eWxlLndpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLHRoaXMuY29ybmVyU3R5bGUuaGVpZ2h0PXRoaXMuY29y'@;
put 'bmVyRGVmYXVsdFN0eWxlLmhlaWdodCx0aGlzLmNvcm5lclN0eWxlLmJvcmRlcj1bdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyU3R5bGUsdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyQ29sb3JdLmpvaW4oIiAi'@;
put 'KSxmMigpJiZ0aGlzLmNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCksdGhpcy5kaXNhcHBlYXIoKTtjb25zdHt3dFRhYmxlOmZ9PXRoaXMud290O2xldCB2PWYuYm9yZGVyc0hvbGRlcjt2fHwodj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHYuY2xhc3NOYW1lPSJodEJvcmRlcnMiLGYu'@;
put 'Ym9yZGVyc0hvbGRlcj12LGYuc3ByZWFkZXIuYXBwZW5kQ2hpbGQodikpLHYuYXBwZW5kQ2hpbGQodGhpcy5tYWluKX1jcmVhdGVNdWx0aXBsZVNlbGVjdG9ySGFuZGxlcygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLndvdDt0aGlzLnNlbGVjdGlvbkhhbmRsZXM9e3RvcDpsLmNyZWF0'@;
put 'ZUVsZW1lbnQoIkRJViIpLHRvcEhpdEFyZWE6bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b206bC5jcmVhdGVFbGVtZW50KCJESVYiKSxib3R0b21IaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIil9LHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3AuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rp'@;
put 'b25IYW5kbGUgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuY2xhc3NOYW1lPSJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSB0b3BMZWZ0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20u'@;
put 'Y2xhc3NOYW1lPSJib3R0b21TZWxlY3Rpb25IYW5kbGUgYm90dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgYm90dG9tUmlnaHRTZWxlY3Rpb25IYW5kbGUt'@;
put 'SGl0QXJlYSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcz17dG9wOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3Auc3R5bGUsdG9wSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYS5zdHlsZSxib3R0b206dGhpcy5zZWxlY3Rpb25IYW5kbGVzLmJvdHRvbS5zdHls'@;
put 'ZSxib3R0b21IaXRBcmVhOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhLnN0eWxlfSx5cyh7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjQwcHgiLHdpZHRoOiI0MHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFyc2VJbnQoNDAvMS41LDEwKX1weGB9LCh2LFQpPT57dGhp'@;
put 'cy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhW1RdPXYsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy50b3BIaXRBcmVhW1RdPXZ9KSx5cyh7cG9zaXRpb246ImFic29sdXRlIixoZWlnaHQ6IjEwcHgiLHdpZHRoOiIxMHB4IiwiYm9yZGVyLXJhZGl1cyI6YCR7cGFy'@;
put 'c2VJbnQoMTAvMS41LDEwKX1weGAsYmFja2dyb3VuZDoiI0Y1RjVGRiIsYm9yZGVyOiIxcHggc29saWQgIzQyODVjOCJ9LCh2LFQpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21bVF09dix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcFtUXT12fSksdGhpcy5t'@;
put 'YWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3ApLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tKSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEpLHRoaXMubWFpbi5hcHBl'@;
put 'bmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYSl9aXNQYXJ0UmFuZ2UobCxhKXtjb25zdCBkPXRoaXMud290LnNlbGVjdGlvbnMuY3JlYXRlT3JHZXRBcmVhKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxSYW5nZS50by5yb3cmJmE9PT1kLmNlbGxS'@;
put 'YW5nZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBZPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6cmUsdG9wSGl0QXJlYTpmZSxib3R0b206X2UsYm90'@;
put 'dG9tSGl0QXJlYTprZX09dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcyxXZT1wYXJzZUludChyZS5ib3JkZXJXaWR0aCwxMCksSmU9cGFyc2VJbnQocmUud2lkdGgsMTApLHR0PXBhcnNlSW50KGZlLndpZHRoLDEwKSx5dD10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCksd3Q9dGhpcy53'@;
put 'b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtyZS50b3A9YCR7cGFyc2VJbnQoZC1KZS0xLDEwKX1weGAscmVbWV09YCR7cGFyc2VJbnQoaC1KZS0xLDEwKX1weGAsZmUudG9wPWAke3BhcnNlSW50KGQtdHQvNCozLDEwKX1weGAsZmVbWV09YCR7cGFyc2VJbnQoaC10dC80KjMsMTApfXB4YDtjb25z'@;
put 'dCBMdD1NYXRoLm1pbihwYXJzZUludChoK2YsMTApLHl0LUplLTIqV2UpLG9uPU1hdGgubWluKHBhcnNlSW50KGgrZi10dC80LDEwKSx5dC10dC0yKldlKTtfZVtZXT1gJHtMdH1weGAsa2VbWV09YCR7b259cHhgO2NvbnN0IHNuPU1hdGgubWluKHBhcnNlSW50KGQrdiwxMCksd3QtSmUtMipX'@;
put 'ZSksTW49TWF0aC5taW4ocGFyc2VJbnQoZCt2LXR0LzQsMTApLHd0LXR0LTIqV2UpO19lLnRvcD1gJHtzbn1weGAsa2UudG9wPWAke01ufXB4YCx0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlJiZ0aGlzLnNldHRpbmdzLmJvcmRlci5jb3JuZXJWaXNpYmxlKCk/KHJlLmRpc3Bs'@;
put 'YXk9ImJsb2NrIixmZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShsLGEpPyhfZS5kaXNwbGF5PSJub25lIixrZS5kaXNwbGF5PSJub25lIik6KF9lLmRpc3BsYXk9ImJsb2NrIixrZS5kaXNwbGF5PSJibG9jayIpKToocmUuZGlzcGxheT0ibm9uZSIsX2UuZGlzcGxheT0ibm9u'@;
put 'ZSIsZmUuZGlzcGxheT0ibm9uZSIsa2UuZGlzcGxheT0ibm9uZSIpLGw9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpfHxhPT09dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpPyhyZS56SW5kZXg9Ijk5OTki'@;
put 'LGZlLnpJbmRleD0iOTk5OSIpOihyZS56SW5kZXg9IiIsZmUuekluZGV4PSIiKX1hcHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1cm47Y29uc3R7d3RUYWJsZTphLHJvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy53b3Q7bGV0IGYsdixULFkscmUsZmU7Y29uc3QgX2U9YS5n'@;
put 'ZXRSZW5kZXJlZFJvd3NDb3VudCgpO2ZvcihsZXQgRXI9MDtFcjxfZTtFcis9MSl7Y29uc3QgZ3Q9YS5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShFcik7aWYoZ3Q+PWxbMF0mJmd0PD1sWzJdKXtmPWd0LHJlPWxbMF07YnJlYWt9fWZvcihsZXQgRXI9X2UtMTtFcj49MDtFci09MSl7Y29u'@;
put 'c3QgZ3Q9YS5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShFcik7aWYoZ3Q+PWxbMF0mJmd0PD1sWzJdKXt2PWd0O2JyZWFrfX1jb25zdCBrZT1hLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBFcj0wO0VyPGtlO0VyKz0xKXtjb25zdCBndD1hLmNvbHVtbkZpbHRlci5yZW5k'@;
put 'ZXJlZFRvU291cmNlKEVyKTtpZihndD49bFsxXSYmZ3Q8PWxbM10pe1Q9Z3QsZmU9bFsxXTticmVha319Zm9yKGxldCBFcj1rZS0xO0VyPj0wO0VyLT0xKXtjb25zdCBndD1hLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291cmNlKEVyKTtpZihndD49bFsxXSYmZ3Q8PWxbM10pe1k9Z3Q7YnJl'@;
put 'YWt9fWlmKHZvaWQgMD09PWZ8fHZvaWQgMD09PVQpcmV0dXJuIHZvaWQgdGhpcy5kaXNhcHBlYXIoKTtsZXQgV2U9YS5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoZixUKSk7Y29uc3QgSmU9ZiE9PXZ8fFQhPT1ZLHR0PUplP2EuZ2V0Q2VsbCh0aGlzLndvdC5jcmVhdGVDZWxs'@;
put 'Q29vcmRzKHYsWSkpOldlLHl0PVNjKFdlKSx3dD1KZT9TYyh0dCk6eXQsTHQ9U2MoYS5UQUJMRSksb249TmEoYS5UQUJMRSksc249eXQudG9wLE1uPXl0LmxlZnQsVm49dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIik7bGV0IHVyPTAsVHI9MDtpZihWbil7Y29uc3Qg'@;
put 'RXI9TmEoV2UpO1RyPU1uK0VyLXd0LmxlZnQsdXI9aC5pbm5lcldpZHRoLU1uLUVyLShoLmlubmVyV2lkdGgtTHQubGVmdC1vbiktMX1lbHNlIFRyPXd0LmxlZnQrTmEodHQpLU1uLHVyPU1uLUx0LmxlZnQtMTtpZih0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoZix2KSl7Y29uc3QgRXI9'@;
put 'dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcigiY29sdW1ucyIsVCxZLHJlLEx0KTtsZXQgZ3Q9bnVsbDtFciYmKFtndCx1cixUcl09RXIpLGd0JiYoV2U9Z3QpfWxldCBQaT1zbi1MdC50b3AtMSxIaT13dC50b3ArVmwodHQpLXNuO2lmKHRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChULFkp'@;
put 'KXtjb25zdCBFcj10aGlzLmdldERpbWVuc2lvbnNGcm9tSGVhZGVyKCJyb3dzIixmLHYsZmUsTHQpO2xldCBndD1udWxsO0VyJiYoW2d0LFBpLEhpXT1FciksZ3QmJihXZT1ndCl9Y29uc3Qgd3I9cm0oV2UsaCk7cGFyc2VJbnQod3IuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihQaSs9MSxIaT1I'@;
put 'aT4wP0hpLTE6MCkscGFyc2VJbnQod3JbVm4/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKHVyKz0xLFRyPVRyPjA/VHItMTowKTtjb25zdCBhaT1Wbj8icmlnaHQiOiJsZWZ0Ijt0aGlzLnRvcFN0eWxlLnRvcD1gJHtQaX1weGAsdGhpcy50b3BTdHlsZVth'@;
put 'aV09YCR7dXJ9cHhgLHRoaXMudG9wU3R5bGUud2lkdGg9YCR7VHJ9cHhgLHRoaXMudG9wU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuc3RhcnRTdHlsZS50b3A9YCR7UGl9cHhgLHRoaXMuc3RhcnRTdHlsZVthaV09YCR7dXJ9cHhgLHRoaXMuc3RhcnRTdHlsZS5oZWlnaHQ9YCR7SGl9cHhg'@;
put 'LHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgdGk9TWF0aC5mbG9vcih0aGlzLnNldHRpbmdzLmJvcmRlci53aWR0aC8yKTt0aGlzLmJvdHRvbVN0eWxlLnRvcD1QaStIaS10aSsicHgiLHRoaXMuYm90dG9tU3R5bGVbYWldPWAke3VyfXB4YCx0aGlzLmJvdHRvbVN0eWxl'@;
put 'LndpZHRoPWAke1RyfXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtQaX1weGAsdGhpcy5lbmRTdHlsZVthaV09dXIrVHItdGkrInB4Iix0aGlzLmVuZFN0eWxlLmhlaWdodD1gJHtIaSsxfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9'@;
put 'ImJsb2NrIjtsZXQgam49dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtqbj0iZnVuY3Rpb24iPT10eXBlb2Ygam4/am4odGhpcy5zZXR0aW5ncy5sYXllckxldmVsKTpqbjtjb25zdCBVcj10aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLHYsWSk7'@;
put 'bGV0W2VyLERyXT1bdixZXTtpZihVciYmQXJyYXkuaXNBcnJheShVcikmJihbLCxlcixEcl09VXIpLGYyKCl8fCFqbnx8dGhpcy5pc1BhcnRSYW5nZShlcixEcikpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPVBpK0hpK3RoaXMuY29y'@;
put 'bmVyQ2VudGVyUG9pbnRPZmZzZXQtMSsicHgiLHRoaXMuY29ybmVyU3R5bGVbYWldPXVyK1RyK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtMSsicHgiLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyUmlnaHRXaWR0aD10aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aCx0aGlz'@;
put 'LmNvcm5lclN0eWxlLndpZHRoPXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSI7bGV0IEVyPU5nKGEuVEFCTEUpO2NvbnN0IGd0PUVyPT09aDtndCYmKEVyPWQuZG9jdW1lbnRFbGVtZW50KTtjb25zdCBPdD1wYXJzZUludCh0aGlz'@;
put 'LmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixjbj1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI7aWYoWT09PXRoaXMud290LmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLTEpe2NvbnN0IE5uPWd0P3R0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp'@;
put 'LmxlZnQ6dHQub2Zmc2V0TGVmdDtsZXQgeG49ITEsS249MDtWbj8oS249Tm4tcGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTApLzIseG49S248MCk6KEtuPU5uK05hKHR0KStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMix4bj1Lbj49'@;
put 'dXcoRXIpKSx4biYmKHRoaXMuY29ybmVyU3R5bGVbYWldPWAke01hdGguZmxvb3IodXIrVHIrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1PdCl9cHhgLHRoaXMuY29ybmVyU3R5bGVbVm4/ImJvcmRlckxlZnRXaWR0aCI6ImJvcmRlclJpZ2h0V2lkdGgiXT0wKX12PT09dGhpcy53b3Qu'@;
put 'Z2V0U2V0dGluZygidG90YWxSb3dzIiktMSYmKGd0P3R0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDp0dC5vZmZzZXRUb3ApK1ZsKHR0KStwYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5oZWlnaHQsMTApLzI+PWlwKEVyKSYmKHRoaXMuY29ybmVyU3R5bGUudG9wPWAke01h'@;
put 'dGguZmxvb3IoUGkrSGkrdGhpcy5jb3JuZXJDZW50ZXJQb2ludE9mZnNldC1jbil9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9MCksdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJibG9jayJ9ZjIoKSYmdGhpcy51cGRhdGVNdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXNQ'@;
put 'b3NpdGlvbih2LFksUGksdXIsVHIsSGkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRSb3coKX1pc0VudGlyZVJvd1NlbGVjdGVk'@;
put 'KGwsYSl7cmV0dXJuIGw9PT10aGlzLndvdC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSYmYT09PXRoaXMud290Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9Z2V0RGltZW5zaW9uc0Zyb21IZWFkZXIobCxhLGQsaCxmKXtjb25zdHt3dFRhYmxlOnZ9PXRoaXMud290'@;
put 'LFQ9di53dFJvb3RFbGVtZW50LnBhcmVudE5vZGU7bGV0IFk9bnVsbCxyZT1udWxsLGZlPW51bGwsX2U9bnVsbCxrZT1udWxsLFdlPW51bGwsSmU9bnVsbCx0dD1udWxsO3N3aXRjaChsKXtjYXNlInJvd3MiOlk9ZnVuY3Rpb24oKXtyZXR1cm4gdi5nZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRz'@;
put 'KX0scmU9ZnVuY3Rpb24oKXtyZXR1cm4gVmwoLi4uYXJndW1lbnRzKX0sZmU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLFdlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6WT1mdW5jdGlvbigpe3JldHVybiB2LmdldENvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSxyZT1mdW5jdGlvbigpe3Jl'@;
put 'dHVybiBOYSguLi5hcmd1bWVudHMpfSxmZT0iaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIsV2U9ImxlZnQifWlmKFQuY2xhc3NMaXN0LmNvbnRhaW5zKGZlKSl7Y29uc3QgeXQ9dGhpcy53b3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aDtpZihKZT1ZKGEseXQtaCksdHQ9WShk'@;
put 'LHl0LWgpLCFKZXx8IXR0KXJldHVybiExO2NvbnN0IHd0PVNjKEplKSxMdD1TYyh0dCk7cmV0dXJuIEplJiZ0dCYmKF9lPXd0W1dlXS1mW1dlXS0xLGtlPUx0W1dlXStyZSh0dCktd3RbV2VdKSxbSmUsX2Usa2VdfXJldHVybiExfWNoYW5nZUJvcmRlclN0eWxlKGwsYSl7Y29uc3QgZD10aGlz'@;
put 'W2xdLnN0eWxlLGg9YVtsXTshaHx8aC5oaWRlP3dpKHRoaXNbbF0sImhpZGRlbiIpOihRbyh0aGlzW2xdLCJoaWRkZW4iKSYmc3ModGhpc1tsXSwiaGlkZGVuIiksZC5iYWNrZ3JvdW5kQ29sb3I9aC5jb2xvciwoInRvcCI9PT1sfHwiYm90dG9tIj09PWwpJiYoZC5oZWlnaHQ9YCR7aC53aWR0'@;
put 'aH1weGApLCgic3RhcnQiPT09bHx8ImVuZCI9PT1sKSYmKGQud2lkdGg9YCR7aC53aWR0aH1weGApKX1jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKXtjb25zdCBkPXRoaXNbbF0uc3R5bGU7ZC5iYWNrZ3JvdW5kQ29sb3I9IiMwMDAiLGQud2lkdGg9IjFweCIsZC5oZWlnaHQ9IjFweCJ9'@;
put 'dG9nZ2xlSGlkZGVuQ2xhc3MobCxhKXt0aGlzLmNoYW5nZUJvcmRlclRvRGVmYXVsdFN0eWxlKGwpLGE/d2kodGhpc1tsXSwiaGlkZGVuIik6c3ModGhpc1tsXSwiaGlkZGVuIil9ZGlzYXBwZWFyKCl7dGhpcy50b3BTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmJvdHRvbVN0eWxlLmRpc3Bs'@;
put 'YXk9Im5vbmUiLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmVuZFN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuY29ybmVyU3R5bGUuZGlzcGxheT0ibm9uZSIsZjIoKSYmKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wLmRpc3BsYXk9Im5vbmUiLHRoaXMuc2Vs'@;
put 'ZWN0aW9uSGFuZGxlcy5zdHlsZXMudG9wSGl0QXJlYS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbS5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLmJvdHRvbUhpdEFyZWEuZGlzcGxheT0ibm9uZSIpfWRlc3Ryb3ko'@;
put 'KXt0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95V2l0aE93bkV2ZW50c09ubHkoKSx0aGlzLm1haW4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLm1haW4pfX0sU0hlPWNsYXNzIENIZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGluZ3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxudWxsLHRo'@;
put 'aXMuaW5zdGFuY2VCb3JkZXJzPXt9LHRoaXMuY2xhc3NOYW1lcz1bdGhpcy5zZXR0aW5ncy5jbGFzc05hbWVdLHRoaXMuY2xhc3NOYW1lR2VuZXJhdG9yPXRoaXMubGluZWFyQ2xhc3NOYW1lR2VuZXJhdG9yKHRoaXMuc2V0dGluZ3MuY2xhc3NOYW1lLHRoaXMuc2V0dGluZ3MubGF5ZXJMZXZl'@;
put 'bCl9Z2V0Qm9yZGVyKGwpe3JldHVybiB0aGlzLmluc3RhbmNlQm9yZGVyc1tsLmd1aWRdfHwodGhpcy5pbnN0YW5jZUJvcmRlcnNbbC5ndWlkXT1uZXcgTUhlKGwsdGhpcy5zZXR0aW5ncykpLHRoaXMuaW5zdGFuY2VCb3JkZXJzW2wuZ3VpZF19aXNFbXB0eSgpe3JldHVybiBudWxsPT09dGhp'@;
put 'cy5jZWxsUmFuZ2V9YWRkKGwpe3JldHVybiB0aGlzLmlzRW1wdHkoKT90aGlzLmNlbGxSYW5nZT10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShsKTp0aGlzLmNlbGxSYW5nZS5leHBhbmQobCksdGhpc31yZXBsYWNlKGwsYSl7aWYoIXRoaXMuaXNFbXB0eSgpKXtpZih0aGlzLmNlbGxS'@;
put 'YW5nZS5mcm9tLmlzRXF1YWwobCkpcmV0dXJuIHRoaXMuY2VsbFJhbmdlLmZyb209YSwhMDtpZih0aGlzLmNlbGxSYW5nZS50by5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS50bz1hLCEwfXJldHVybiExfWNsZWFyKCl7cmV0dXJuIHRoaXMuY2VsbFJhbmdlPW51bGwsdGhpc31n'@;
put 'ZXRDb3JuZXJzKCl7Y29uc3QgbD10aGlzLmNlbGxSYW5nZS5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmNlbGxSYW5nZS5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO3JldHVybltsLnJvdyxsLmNvbCxhLnJvdyxhLmNvbF19YWRkQ2xhc3NBdENvb3JkcyhsLGEsZCxoKXtsZXQg'@;
put 'Zj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSYmYXJndW1lbnRzWzRdO2NvbnN0IHY9bC53dFRhYmxlLmdldENlbGwodGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGEsZCkpO2lmKCJvYmplY3QiPT10eXBlb2Ygdil7bGV0IFQ9aDtmJiYoVD10aGlzLmNs'@;
put 'YXNzTmFtZUdlbmVyYXRvcih2KSx0aGlzLmNsYXNzTmFtZXMuaW5jbHVkZXMoVCl8fHRoaXMuY2xhc3NOYW1lcy5wdXNoKFQpKSx3aSh2LFQpfXJldHVybiB0aGlzfWxpbmVhckNsYXNzTmFtZUdlbmVyYXRvcihsLGEpe3JldHVybiBmdW5jdGlvbiBkKGgpe2xldCBmPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtpZigwPT09YXx8MD09PWYpcmV0dXJuIGw7bGV0IHY9Zj49MD9mOmEsVD1sO3JldHVybiB2LT0xLFQ9UW8oaCwwPT09dj9sOmAke2x9LSR7dn1gKT9gJHtsfS0ke3YrMX1gOmQoaCx2KSxUfX1kcmF3KGwpe2lmKHRo'@;
put 'aXMuaXNFbXB0eSgpKXJldHVybiB2b2lkKHRoaXMuc2V0dGluZ3MuYm9yZGVyJiZ0aGlzLmdldEJvcmRlcihsKS5kaXNhcHBlYXIoKSk7Y29uc3QgYT1sLnd0VGFibGUuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxkPWwud3RUYWJsZS5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpLGg9dGhpcy5n'@;
put 'ZXRDb3JuZXJzKCksW2YsdixULFldPWgse2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpyZSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6ZmUsaGlnaGxpZ2h0Um93Q2xhc3NOYW1lOl9lLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOmtlLHNlbGVjdGlvblR5cGU6V2V9PXRoaXMuc2V0dGlu'@;
put 'Z3MsSmU9dm9pZCAwPT09V2V8fFsiYWN0aXZlLWhlYWRlciIsImhlYWRlciJdLmluY2x1ZGVzKFdlKTtpZihKZSYmbnVsbCE9PXYmJm51bGwhPT1ZKXtsZXQgdHQ9MDtmb3IobGV0IHl0PTA7eXQ8ZDt5dCs9MSl7Y29uc3Qgd3Q9bC53dFRhYmxlLmNvbHVtbkZpbHRlci5yZW5kZXJlZFRvU291'@;
put 'cmNlKHl0KTtpZih3dD49diYmd3Q8PVkpe2xldCBMdD1sLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVycyh3dCk7Y29uc3Qgb249THQubGVuZ3RoLTE7a2UmJkx0Lmxlbmd0aD4xJiYoTHQ9W0x0W29uXV0pO2ZvcihsZXQgc249MDtzbjxMdC5sZW5ndGg7c24rPTEpe2NvbnN0IE1uPVtdO2xldCBW'@;
put 'bj1MdFtzbl07cmUmJk1uLnB1c2gocmUpLGZlJiZNbi5wdXNoKGZlKSxzbj1rZT9vbjpzbjtjb25zdCB1cj1sLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIix3dCxzbix7c2VsZWN0aW9uVHlwZTpXZSxjb2x1bW5DdXJzb3I6dHQsc2VsZWN0aW9uV2lkdGg6'@;
put 'WS12KzEsY2xhc3NOYW1lczpNbn0pO3VyIT09d3QmJihWbj1sLnd0VGFibGUuZ2V0Q29sdW1uSGVhZGVyKHVyLHNuKSksd2koVm4sTW4pfXR0Kz0xfX19aWYobnVsbCE9PWYmJm51bGwhPT1UKXtsZXQgdHQ9MDtmb3IobGV0IHl0PTA7eXQ8YTt5dCs9MSl7Y29uc3Qgd3Q9bC53dFRhYmxlLnJv'@;
put 'd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKHl0KTtpZihKZSYmd3Q+PWYmJnd0PD1UKXtsZXQgTHQ9bC53dFRhYmxlLmdldFJvd0hlYWRlcnMod3QpO2NvbnN0IG9uPUx0Lmxlbmd0aC0xO2tlJiZMdC5sZW5ndGg+MSYmKEx0PVtMdFtvbl1dKTtmb3IobGV0IHNuPTA7c248THQubGVuZ3RoO3Nu'@;
put 'Kz0xKXtjb25zdCBNbj1bXTtsZXQgVm49THRbc25dO3JlJiZNbi5wdXNoKHJlKSxfZSYmTW4ucHVzaChfZSksc249a2U/b246c247Y29uc3QgdXI9bC5nZXRTZXR0aW5nKCJvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlciIsd3Qsc24se3NlbGVjdGlvblR5cGU6V2Uscm93Q3Vyc29yOnR0'@;
put 'LHNlbGVjdGlvbkhlaWdodDpULWYrMSxjbGFzc05hbWVzOk1ufSk7dXIhPT13dCYmKFZuPWwud3RUYWJsZS5nZXRSb3dIZWFkZXIodXIsc24pKSx3aShWbixNbil9dHQrPTF9aWYobnVsbCE9PXYmJm51bGwhPT1ZKWZvcihsZXQgTHQ9MDtMdDxkO0x0Kz0xKXtjb25zdCBvbj1sLnd0VGFibGUu'@;
put 'Y29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3VyY2UoTHQpO3d0Pj1mJiZ3dDw9VCYmb24+PXYmJm9uPD1ZP3RoaXMuc2V0dGluZ3MuY2xhc3NOYW1lJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCx3dCxvbix0aGlzLnNldHRpbmdzLmNsYXNzTmFtZSx0aGlzLnNldHRpbmdzLm1hcmtJbnRlcnNl'@;
put 'Y3Rpb25zKTp3dD49ZiYmd3Q8PVQ/X2UmJnRoaXMuYWRkQ2xhc3NBdENvb3JkcyhsLHd0LG9uLF9lKTpvbj49diYmb248PVkmJmZlJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCx3dCxvbixmZSk7Y29uc3Qgc249bC5nZXRTZXR0aW5nKCJvbkFmdGVyRHJhd1NlbGVjdGlvbiIsd3Qsb24sdGhp'@;
put 'cy5zZXR0aW5ncy5sYXllckxldmVsKTsic3RyaW5nIj09dHlwZW9mIHNuJiZ0aGlzLmFkZENsYXNzQXRDb29yZHMobCx3dCxvbixzbil9fX1sLmdldFNldHRpbmcoIm9uQmVmb3JlRHJhd0JvcmRlcnMiLGgsdGhpcy5zZXR0aW5ncy5jbGFzc05hbWUpLHRoaXMuc2V0dGluZ3MuYm9yZGVyJiZ0'@;
put 'aGlzLmdldEJvcmRlcihsKS5hcHBlYXIoaCl9ZGVzdHJveSgpe09iamVjdC52YWx1ZXModGhpcy5pbnN0YW5jZUJvcmRlcnMpLmZvckVhY2gobD0+bC5kZXN0cm95KCkpfX07Y29uc3QgeTk9Y2xhc3MgVEhlIGV4dGVuZHMgU0hle2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxudWxsKSxmdW5j'@;
put 'dGlvbiB4SGUoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIGtIZShjKXt2YXIgbD1mdW5jdGlvbiBFSGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs'@;
put 'fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl'@;
put 'dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0'@;
put 'aGlzLnZpc3VhbENlbGxSYW5nZT1hfHxudWxsLHRoaXMuY29tbWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5k'@;
put 'KGwpLHRoaXN9Y2xlYXIoKXtyZXR1cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkNvb3JkcyhkLC0xKTtpZihudWxsPT09aHx8bnVsbD09PWYpcmV0dXJuIG51bGw7aWYoaC5yb3c+Zi5yb3d8fGguY29sPmYuY29sKXtpZigiaGVhZGVyIiE9PXRoaXMuc2V0dGluZ3MudHlwZSYmImFjdGl2ZS1oZWFkZXIiIT09dGhpcy5zZXR0aW5ncy50eXBlKXJldHVy'@;
put 'biBudWxsO2g9YSxmPWR9cmV0dXJuIHRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGgsaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlz'@;
put 'LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyKCksbC5yb3csYSk7aWYobnVsbD09PWgpcmV0dXJuIG51bGw7Y29uc3QgZj10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLmNvbHVtbkluZGV4TWFwcGVyKCksbC5j'@;
put 'b2wsZCk7cmV0dXJuIG51bGw9PT1mP251bGw6dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsQ29vcmRzKGgsZil9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSxkKXtpZihhPDApcmV0dXJuIGE7Y29uc3QgaD1sLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLGQpO3JldHVybiJoZWFkZXIi'@;
put 'IT09dGhpcy5zZXR0aW5ncy50eXBlJiYiYWN0aXZlLWhlYWRlciIhPT10aGlzLnNldHRpbmdzLnR5cGV8fG51bGwhPT1oP2g6LTF9Y29tbWl0KCl7aWYobnVsbD09PXRoaXMudmlzdWFsQ2VsbFJhbmdlKXJldHVybiB0aGlzO2NvbnN0IGw9dGhpcy50cmltVG9WaXNpYmxlQ2VsbHNSYW5nZU9u'@;
put 'bHkodGhpcy52aXN1YWxDZWxsUmFuZ2UpO3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsPT09bD9udWxsOnRoaXMuY3JlYXRlUmVuZGVyYWJsZUNlbGxSYW5nZShsLmZyb20sbC50byksdGhpc31zeW5jV2l0aChsKXtjb25zdCBhPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6'@;
put 'LTEsZD0iVy1FIj09PWwuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpPzE6LTEsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMobC5mcm9tLmNsb25lKCkubm9ybWFsaXplKCksYSxkKTtpZihudWxsIT09aCYmbC5vdmVybGFwcyhoKSl7aWYobnVsbD09PXRoaXMuY2VsbFJhbmdlKXtj'@;
put 'b25zdCBmPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKGYpfXJldHVybiBsLnNldEhpZ2hsaWdodChoKSx0aGlzfXJldHVybiBsLnNldEhpZ2hsaWdodChsLmZyb20pLHRoaXN9Z2V0'@;
put 'Q29ybmVycygpe2NvbnN0e2Zyb206bCx0bzphfT10aGlzLmNlbGxSYW5nZSxkPW51bGw9PT1sLnJvd3x8bnVsbD09PWEucm93LGg9bnVsbD09PWwuY29sfHxudWxsPT09YS5jb2wsZj10aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoZD9udWxsOk1hdGgubWluKGwucm93LGEucm93KSxo'@;
put 'P251bGw6TWF0aC5taW4obC5jb2wsYS5jb2wpKSx2PXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbENvb3JkcyhkP251bGw6TWF0aC5tYXgobC5yb3csYS5yb3cpLGg/bnVsbDpNYXRoLm1heChsLmNvbCxhLmNvbCkpO3JldHVybltmLnJvdyxmLmNvbCx2LnJvdyx2LmNvbF19Z2V0VmlzdWFsQ29y'@;
put 'bmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIo'@;
put 'KSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxoPXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVy'@;
put 'biB0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fSx7cmVnaXN0ZXI6YjksZ2V0SXRlbTpCSGV9PXNoKCJoaWdobGlnaHQvdHlwZXMiKTtmdW5jdGlvbiB3OShjLGwpe3JldHVybiBCSGUoYykoe3R5cGU6YywuLi5sfSl9YjkoJFQsZnVuY3Rpb24gREhlKGMpe2xldHthY3Rp'@;
put 'dmVIZWFkZXJDbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgeTkoe2hpZ2hsaWdodEhlYWRlckNsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZTokVH0pfSksYjkocVQsZnVuY3Rpb24gTEhlKGMpe2xldHtsYXllckxldmVsOmwsYXJlYUNvcm5lclZpc2libGU6YSwuLi5kfT1jO3Jl'@;
put 'dHVybiBuZXcgeTkoe2NsYXNzTmFtZToiYXJlYSIsbWFya0ludGVyc2VjdGlvbnM6ITAsbGF5ZXJMZXZlbDpNYXRoLm1pbihsLDcpLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTphfSwuLi5kLHNlbGVjdGlvblR5cGU6cVR9KX0pLGI5KHh3LGZ1bmN0aW9u'@;
put 'IFJIZShjKXtsZXR7Y2VsbENvcm5lclZpc2libGU6bCwuLi5hfT1jO3JldHVybiBuZXcgeTkoe2NsYXNzTmFtZToiY3VycmVudCIsYm9yZGVyOnt3aWR0aDoyLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTp4d30pfSksYjkoYlksZnVuY3Rpb24g'@;
put 'UEhlKGMpe2xldHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6YSwuLi5kfT1jO3JldHVybiBuZXcgeTkoey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOmJZfSxhKX0pLGI5KHlZLGZ1bmN0aW9uIEhIZShjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IHk5KHtjbGFzc05hbWU6ImZpbGwiLGJvcmRl'@;
put 'cjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2VsZWN0aW9uVHlwZTp5WX0pfSksYjkoa3csZnVuY3Rpb24gVkhlKGMpe2xldHtoZWFkZXJDbGFzc05hbWU6bCxyb3dDbGFzc05hbWU6YSxjb2x1bW5DbGFzc05hbWU6ZCwuLi5ofT1jO3JldHVybiBuZXcgeTkoe2NsYXNzTmFtZToi'@;
put 'aGlnaGxpZ2h0IixoaWdobGlnaHRIZWFkZXJDbGFzc05hbWU6bCxoaWdobGlnaHRSb3dDbGFzc05hbWU6YSxoaWdobGlnaHRDb2x1bW5DbGFzc05hbWU6ZCwuLi5oLGhpZ2hsaWdodE9ubHlDbG9zZXN0SGVhZGVyOiEwLHNlbGVjdGlvblR5cGU6a3d9KX0pO2NsYXNzIFlIZXtjb25zdHJ1Y3Rv'@;
put 'cihsKXt0aGlzLm9wdGlvbnM9bCx0aGlzLmxheWVyTGV2ZWw9MCx0aGlzLmNlbGw9dzkoeHcsbCksdGhpcy5maWxsPXc5KHlZLGwpLHRoaXMuYXJlYXM9bmV3IE1hcCx0aGlzLmhlYWRlcnM9bmV3IE1hcCx0aGlzLmFjdGl2ZUhlYWRlcnM9bmV3IE1hcCx0aGlzLmN1c3RvbVNlbGVjdGlvbnM9'@;
put 'W119aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09eHcmJihkPSJjdXJyZW50Iik7bGV0IGg9dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYm'@;
put 'IWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLmxheWVyTGV2ZWw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRDZWxsKCl7cmV0dXJuIHRoaXMuY2VsbH1nZXRGaWxsKCl7cmV0dXJuIHRoaXMu'@;
put 'ZmlsbH1jcmVhdGVPckdldEFyZWEoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hcmVhcy5oYXMobCk/YT10aGlzLmFyZWFzLmdldChsKTooYT13OShxVCx7bGF5ZXJMZXZlbDpsLC4uLnRoaXMub3B0aW9uc30pLHRoaXMuYXJlYXMuc2V0KGwsYSkpLGF9Z2V0'@;
put 'QXJlYXMoKXtyZXR1cm5bLi4udGhpcy5hcmVhcy52YWx1ZXMoKV19Y3JlYXRlT3JHZXRIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5oZWFkZXJzLmhhcyhsKT9hPXRoaXMuaGVhZGVycy5nZXQobCk6KGE9dzkoa3csey4uLnRoaXMub3B0aW9uc30p'@;
put 'LHRoaXMuaGVhZGVycy5zZXQobCxhKSksYX1nZXRIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuaGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlT3JHZXRBY3RpdmVIZWFkZXIoKXtjb25zdCBsPXRoaXMubGF5ZXJMZXZlbDtsZXQgYTtyZXR1cm4gdGhpcy5hY3RpdmVIZWFkZXJzLmhhcyhsKT9hPXRo'@;
put 'aXMuYWN0aXZlSGVhZGVycy5nZXQobCk6KGE9dzkoJFQsey4uLnRoaXMub3B0aW9uc30pLHRoaXMuYWN0aXZlSGVhZGVycy5zZXQobCxhKSksYX1nZXRBY3RpdmVIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKV19Z2V0Q3VzdG9tU2VsZWN0aW9ucygpe3Jl'@;
put 'dHVyblsuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnMudmFsdWVzKCldfWFkZEN1c3RvbVNlbGVjdGlvbihsKXt0aGlzLmN1c3RvbVNlbGVjdGlvbnMucHVzaCh3OShiWSx7Li4udGhpcy5vcHRpb25zLC4uLmx9KSl9Y2xlYXIoKXt0aGlzLmNlbGwuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIoKSxS'@;
put 'bih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxSbih0aGlzLmhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIoKX0pLFJuKHRoaXMuYWN0aXZlSGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm5bdGhpcy5jZWxsLHRo'@;
put 'aXMuZmlsbCwuLi50aGlzLmFyZWFzLnZhbHVlcygpLC4uLnRoaXMuaGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmFjdGl2ZUhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zXVtTeW1ib2wuaXRlcmF0b3JdKCl9fWNvbnN0IHpIZT1ZSGU7Y2xhc3MgVUhle2NvbnN0cnVj'@;
put 'dG9yKGwpe3RoaXMucmFuZ2VzPVtdLHRoaXMuY3JlYXRlQ2VsbFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJu'@;
put 'IHRoaXMucmFuZ2VzLnB1c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KDApfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgoLTEpfWluY2x1'@;
put 'ZGVzKGwpe3JldHVybiB0aGlzLnJhbmdlcy5zb21lKGE9PmEuaW5jbHVkZXMobCkpfWNsZWFyKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aD0wLHRoaXN9c2l6ZSgpe3JldHVybiB0aGlzLnJhbmdlcy5sZW5ndGh9cGVla0J5SW5kZXgoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZv'@;
put 'aWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtjb25zdCBhPXRoaXMuc2l6ZSgpK2wtMTtsZXQgZDtyZXR1cm4gYT49MCYmKGQ9dGhpcy5yYW5nZXNbYV0pLGR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5yYW5nZXNbU3ltYm9sLml0ZXJhdG9yXSgpfX1jb25zdCBa'@;
put 'SGU9VUhlO2NsYXNzIHVzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMucmFuZ2U9bCx0aGlzLm9wdGlvbnM9YX10cmFuc2Zvcm1TdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD10aGlzLm9wdGlvbnMu'@;
put 'Y3JlYXRlQ2VsbENvb3JkcyhsLGEpLGY9dGhpcy5yYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0LHtyb3c6dixjb2w6VH09dGhpcy5vcHRpb25zLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhmKTtsZXQgWT1mLHJlPTAsZmU9MDtpZih0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9y'@;
put 'bVN0YXJ0IixoKSxudWxsIT09diYmbnVsbCE9PVQpe2xldCBfZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksa2U9dGhpcy5vcHRpb25zLmNvdW50Q29scygpO2NvbnN0IFdlPXRoaXMub3B0aW9ucy5maXhlZFJvd3NCb3R0b20oKSxKZT10aGlzLm9wdGlvbnMubWluU3BhcmVSb3dzKCksdHQ9'@;
put 'dGhpcy5vcHRpb25zLm1pblNwYXJlQ29scygpLHl0PXRoaXMub3B0aW9ucy5hdXRvV3JhcFJvdygpLHd0PXRoaXMub3B0aW9ucy5hdXRvV3JhcENvbCgpO3YrbD5fZS0xP2QmJkplPjAmJiEoV2UmJnY+PV9lLVdlLTEpPyh0aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLF9l'@;
put 'KSxfZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCkpOnd0JiYoaC5yb3c9MS1fZSxoLmNvbD1UK2guY29sPT09a2UtMT8xLWtlOjEpOnd0JiZ2K2gucm93PDAmJlQraC5jb2w+PTAmJihoLnJvdz1fZS0xLGguY29sPVQraC5jb2w9PT0wP2tlLTE6LTEpLFQraC5jb2w+a2UtMT9kJiZ0dD4wPyh0'@;
put 'aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLGtlKSxrZT10aGlzLm9wdGlvbnMuY291bnRDb2xzKCkpOnl0JiYoaC5yb3c9ditoLnJvdz09PV9lLTE/MS1fZToxLGguY29sPTEta2UpOnl0JiZUK2guY29sPDAmJnYraC5yb3c+PTAmJihoLnJvdz12K2gucm93PT09MD9fZS0x'@;
put 'Oi0xLGguY29sPWtlLTEpO2NvbnN0IEx0PXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKHYraC5yb3csVCtoLmNvbCk7cmU9MCxmZT0wLEx0LnJvdzwwPyhyZT0tMSxMdC5yb3c9MCk6THQucm93PjAmJkx0LnJvdz49X2UmJihyZT0xLEx0LnJvdz1fZS0xKSxMdC5jb2w8MD8oZmU9LTEs'@;
put 'THQuY29sPTApOkx0LmNvbD4wJiZMdC5jb2w+PWtlJiYoZmU9MSxMdC5jb2w9a2UtMSksWT10aGlzLm9wdGlvbnMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzKEx0KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixZLHJlLGZlKSxZfXRyYW5zZm9ybUVu'@;
put 'ZChsLGEpe2NvbnN0IGQ9dGhpcy5vcHRpb25zLmNyZWF0ZUNlbGxDb29yZHMobCxhKSxoPXRoaXMucmFuZ2UuY3VycmVudCgpO2xldCBmPWgudG8sdj0wLFQ9MDt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVRyYW5zZm9ybUVuZCIsZCk7Y29uc3R7cm93OlksY29sOnJlfT10aGlzLm9wdGlv'@;
put 'bnMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGguaGlnaGxpZ2h0KTtpZihudWxsIT09WSYmbnVsbCE9PXJlKXtjb25zdCBmZT10aGlzLm9wdGlvbnMuY291bnRSb3dzKCksX2U9dGhpcy5vcHRpb25zLmNvdW50Q29scygpLHtyb3c6a2UsY29sOldlfT10aGlzLm9wdGlvbnMudmlzdWFsVG9S'@;
put 'ZW5kZXJhYmxlQ29vcmRzKGgudG8pLEplPXRoaXMub3B0aW9ucy5jcmVhdGVDZWxsQ29vcmRzKGtlK2Qucm93LFdlK2QuY29sKTt2PTAsVD0wLEplLnJvdzwwPyh2PS0xLEplLnJvdz0wKTpKZS5yb3c+MCYmSmUucm93Pj1mZSYmKHY9MSxKZS5yb3c9ZmUtMSksSmUuY29sPDA/KFQ9LTEsSmUu'@;
put 'Y29sPTApOkplLmNvbD4wJiZKZS5jb2w+PV9lJiYoVD0xLEplLmNvbD1fZS0xKSxmPXRoaXMub3B0aW9ucy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMoSmUpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixmLHYsVCksZn19R2EodXNlLHcxKTtjb25zdCBX'@;
put 'SGU9dXNlLEdIZT1bMywyXSwkSGU9W1sibnVtYmVyIl0sWyJudW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLE1ZPVN5bWJvbCgicm9vdCIpLGhzZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gTTkoYyl7bGV0'@;
put 'IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOk1ZO2lmKGwhPT1NWSYmbCE9PWhzZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRl'@;
put 'bi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09TVk7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2YgU2o/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD1NOShmLGhzZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00JiYh'@;
put 'Yy5zb21lKChULFkpPT4hJEhlW1ldLmluY2x1ZGVzKHR5cGVvZiBUKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uIEV3KGMpe2xldHtrZWVwRGlyZWN0aW9uOmw9ITEscHJvcFRvQ29sOmF9PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7'@;
put 'fTtpZighR0hlLmluY2x1ZGVzKGMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc2VsZWN0aW9uIHJhbmdlcyBzY2hlbWEgdHlwZSB3YXMgcHJvdmlkZWQuIik7cmV0dXJuIGZ1bmN0aW9uKGQpe2NvbnN0IGg9Mz09PWM7bGV0IGY9aD9kLmZyb20ucm93OmRbMF0sdj1oP2QuZnJvbS5j'@;
put 'b2w6ZFsxXSxUPWg/ZC50by5yb3c6ZFsyXSxZPWg/ZC50by5jb2w6ZFszXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYSYmKCJzdHJpbmciPT10eXBlb2YgdiYmKHY9YSh2KSksInN0cmluZyI9PXR5cGVvZiBZJiYoWT1hKFkpKSksaWwoVCkmJihUPWYpLGlsKFkpJiYoWT12KSwhbCl7Y29uc3Qg'@;
put 'cmU9ZixmZT12LF9lPVQsa2U9WTtmPU1hdGgubWluKHJlLF9lKSx2PU1hdGgubWluKGZlLGtlKSxUPU1hdGgubWF4KHJlLF9lKSxZPU1hdGgubWF4KGZlLGtlKX1yZXR1cm5bZix2LFQsWV19fWZ1bmN0aW9uIGxtKGMpe3JldHVybiJudW1iZXIiPT10eXBlb2YgYyYmYz49MCYmYzwoYXJndW1l'@;
put 'bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEvMCl9Y2xhc3MgZnNle2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpczt0aGlzLnNldHRpbmdzPWwsdGhpcy50YWJsZVByb3BzPWEsdGhpcy5pblByb2dyZXNzPSExLHRoaXMuc2VsZWN0ZWRCeUNvcm5l'@;
put 'cj0hMSx0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXI9bmV3IFNldCx0aGlzLnNlbGVjdGVkUmFuZ2U9bmV3IFpIZSgoaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KSksdGhpcy5oaWdobGlnaHQ9'@;
put 'bmV3IHpIZSh7aGVhZGVyQ2xhc3NOYW1lOmwuY3VycmVudEhlYWRlckNsYXNzTmFtZSxhY3RpdmVIZWFkZXJDbGFzc05hbWU6bC5hY3RpdmVIZWFkZXJDbGFzc05hbWUscm93Q2xhc3NOYW1lOmwuY3VycmVudFJvd0NsYXNzTmFtZSxjb2x1bW5DbGFzc05hbWU6bC5jdXJyZW50Q29sQ2xhc3NO'@;
put 'YW1lLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiksY2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNp'@;
put 'YmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50'@;
put 'YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KSxy'@;
put 'b3dJbmRleE1hcHBlcjooKT0+dGhpcy50YWJsZVByb3BzLnJvd0luZGV4TWFwcGVyKCksY29sdW1uSW5kZXhNYXBwZXI6KCk9PnRoaXMudGFibGVQcm9wcy5jb2x1bW5JbmRleE1hcHBlcigpfSksdGhpcy50cmFuc2Zvcm1hdGlvbj1uZXcgV0hlKHRoaXMuc2VsZWN0ZWRSYW5nZSx7Y291bnRS'@;
put 'b3dzOigpPT50aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzVHJhbnNsYXRlZCgpLGNvdW50Q29sczooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50Q29sc1RyYW5zbGF0ZWQoKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jk'@;
put 'cyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhl'@;
put 'ZFJvd3NCb3R0b20sbWluU3BhcmVSb3dzOigpPT5sLm1pblNwYXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2Nh'@;
put 'bEhvb2soImJlZm9yZVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0Iiwu'@;
put 'Li5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJhZnRlclRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9v'@;
put 'a3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFy'@;
put 'Z3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtRW5kIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3'@;
put 'IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5mKX0pLHRoaXMudHJhbnNmb3JtYXRpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2'@;
put 'YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSksdGhpcy50cmFuc2Zvcm1hdGlvbi5hZGRMb2NhbEhvb2soImluc2VydENvbFJlcXVp'@;
put 'cmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRo'@;
put 'aXMuc2VsZWN0ZWRSYW5nZX1iZWdpbigpe3RoaXMuaW5Qcm9ncmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExfWlzSW5Qcm9ncmVzcygpe3Jl'@;
put 'dHVybiB0aGlzLmluUHJvZ3Jlc3N9c2V0UmFuZ2VTdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibXVsdGlwbGUiPT09dGhpcy5zZXR0aW5ncy5zZWxlY3Rpb25Nb2RlLGY9aWwoYSk/dGhpcy50'@;
put 'YWJsZVByb3BzLmdldFNob3J0Y3V0TWFuYWdlcigpLmlzQ3RybFByZXNzZWQoKTphLHY9bC5yb3c8MCxUPWwuY29sPDAsWT12JiZULHJlPWwuY2xvbmUoKTt0aGlzLnNlbGVjdGVkQnlDb3JuZXI9WSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQiKyhkPyJPbmx5Ijoi'@;
put 'IikscmUpLCghaHx8aCYmIWYmJmlsKGEpKSYmdGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChyZSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVh'@;
put 'ZGVyLmNsZWFyKCkpLCFZJiZUJiZ0aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuYWRkKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSwhWSYmdiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksZHx8dGhpcy5zZXRSYW5nZUVuZChsKX1zZXRSYW5nZVN0'@;
put 'YXJ0T25seShsLGEpe3RoaXMuc2V0UmFuZ2VTdGFydChsLGEsITApfXNldFJhbmdlRW5kKGwpe2lmKHRoaXMuc2VsZWN0ZWRSYW5nZS5pc0VtcHR5KCkpcmV0dXJuO2NvbnN0IGE9bC5jbG9uZSgpO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4o'@;
put 'KTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7InNpbmdsZSIhPT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUmJmQuc2V0VG8odGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYS5yb3csYS5jb2wpKSx0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuY2xlYXIo'@;
put 'KSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoeHcsZC5oaWdobGlnaHQpJiZ0aGlzLmhpZ2hsaWdodC5nZXRDZWxsKCkuYWRkKHRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCkuaGlnaGxpZ2h0KS5jb21taXQoKS5zeW5jV2l0aChkKTtjb25zdCBoPXRoaXMuZ2V0TGF5ZXJMZXZlbCgp'@;
put 'O2g8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKFJuKHRoaXMuaGlnaGxpZ2h0LmdldEFyZWFzKCksWT0+e1kuY2xlYXIoKX0pLFJuKHRoaXMuaGlnaGxpZ2h0LmdldEhlYWRlcnMoKSxZPT57WS5jbGVhcigpfSksUm4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlSGVhZGVycygpLFk9PntZ'@;
put 'LmNsZWFyKCl9KSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7'@;
put 'aWYoZi5jbGVhcigpLHYuY2xlYXIoKSxULmNsZWFyKCksdGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKHFULGQuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxoPj0xKSYmKGYuYWRkKGQuZnJvbSkuYWRkKGQudG8pLmNvbW1pdCgpLDE9PT1oKSl7Y29uc3QgWT10aGlzLnNlbGVj'@;
put 'dGVkUmFuZ2UucHJldmlvdXMoKTt0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGgtMSkuY3JlYXRlT3JHZXRBcmVhKCkuYWRkKFkuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoWSksdGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKX1pZih0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRG'@;
put 'b3Ioa3csZC5oaWdobGlnaHQpKXtjb25zdCBZPTA9PT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzVHJhbnNsYXRlZCgpLHJlPTA9PT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzVHJhbnNsYXRlZCgpO2xldCBmZT1kOyhZfHxyZSkmJihmZT1kLmNsb25lKCkpLFkmJihmZS5mcm9tLnJvdz0t'@;
put 'MSkscmUmJihmZS5mcm9tLmNvbD0tMSksInNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KHRoaXMuaXNTZWxlY3RlZEJ5QW55SGVhZGVyKCkmJmZlLmZyb20ubm9ybWFsaXplKCksdi5hZGQoZmUuZnJvbSkuY29tbWl0KCkpOnYuYWRkKGZlLmZyb20pLmFkZChmZS50byku'@;
put 'Y29tbWl0KCksdGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKT09PWQuZ2V0V2lkdGgoKSYmVC5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoZC5mcm9tLnJvdywtMSkpLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2Vs'@;
put 'bENvb3JkcyhkLnRvLnJvdywtMSkpLmNvbW1pdCgpLHRoaXMuaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpJiZ0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCk9PT1kLmdldEhlaWdodCgpJiZULmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxkLmZyb20uY29sKSkuYWRk'@;
put 'KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKC0xLGQudG8uY29sKSkuY29tbWl0KCl9dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldFJhbmdlRW5kIixsKX1pc011bHRpcGxlKCl7Y29uc3QgbD1WZyghdGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5pc1NpbmdsZSgpKTty'@;
put 'ZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGwpLGwudmFsdWV9dHJhbnNmb3JtU3RhcnQobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1TdGFydChsLGEsYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSkpfXRyYW5zZm9ybUVuZChsLGEpe3RoaXMuc2V0UmFuZ2VFbmQodGhpcy50cmFuc2Zvcm1hdGlvbi50cmFuc2Zvcm1FbmQobCxhKSl9Z2V0TGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLnNlbGVjdGVkUmFuZ2Uuc2l6ZSgpLTF9aXNTZWxl'@;
put 'Y3RlZCgpe3JldHVybiF0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpfWlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1Nl'@;
put 'bGVjdGVkQnlDb3JuZXIobCkmJnRoaXMuaXNFbnRpcmVSb3dTZWxlY3RlZChsKX1pc0VudGlyZVJvd1NlbGVjdGVkKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO3JldHVybi0xPT09bD90'@;
put 'aGlzLnNlbGVjdGVkQnlSb3dIZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5oYXMobCl9aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TGF5ZXJM'@;
put 'ZXZlbCgpO3JldHVybiF0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZ0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQobCl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdl'@;
put 'dExheWVyTGV2ZWwoKTtyZXR1cm4tMT09PWw/dGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLnNpemU+MDp0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKGwpfWlzU2VsZWN0ZWRCeUFueUhlYWRlcigpe3JldHVybiB0aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigtMSl8fHRoaXMu'@;
put 'aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKX1pc1NlbGVjdGVkQnlDb3JuZXIoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEJ5Q29ybmVyfWluSW5TZWxlY3Rpb24obCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRSYW5nZS5pbmNsdWRlcyhsKX1pc0Nl'@;
put 'bGxDb3JuZXJWaXNpYmxlKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiYhdGhpcy5pc011bHRpcGxlKCl9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlz'@;
put 'LmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRsZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3Qo'@;
put 'KXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0s'@;
put 'YT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2lmKCEobHx8YXx8MCE9PWQmJjAhPT1oKSlyZXR1cm47Y29uc3QgZj10'@;
put 'aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhhPy0xOjAsbD8tMTowKSx2PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQtMSxoLTEpO3RoaXMuY2xlYXIoKSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KGYpLHRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5n'@;
put 'ZXRMYXllckxldmVsKCkpLHRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQodiksdGhpcy5maW5pc2goKX1zZWxlY3RDZWxscyhsKXtjb25zdCBhPU05KGwpO2lmKDE9PT1hKXJldHVybiExO2lmKDA9PT1hKXRocm93'@;
put 'IG5ldyBFcnJvcihXYWBVbnN1cHBvcnRlZCBmb3JtYXQgb2YgdGhlIHNlbGVjdGlvbiByYW5nZXMgd2FzIHBhc3NlZC4gVG8gc2VsZWN0IGNlbGxzIHBhc3NceDIwCiAgICAgICAgdGhlIGNvb3JkaW5hdGVzIGFzIGFuIGFycmF5IG9mIGFycmF5cyAoW1tyb3dTdGFydCwgY29sdW1uU3RhcnQv'@;
put 'Y29sdW1uUHJvcFN0YXJ0LCByb3dFbmQsXHgyMAogICAgICAgIGNvbHVtbkVuZC9jb2x1bW5Qcm9wRW5kXV0pIG9yIGFzIGFuIGFycmF5IG9mIENlbGxSYW5nZSBvYmplY3RzLmApO2NvbnN0IGQ9RXcoYSx7cHJvcFRvQ29sOlQ9PnRoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woVCksa2VlcERp'@;
put 'cmVjdGlvbjohMH0pLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpLHY9IWwuc29tZShUPT57Y29uc3RbWSxyZSxmZSxfZV09ZChUKTtyZXR1cm4hKGxtKFksaCkmJmxtKHJlLGYpJiZsbShmZSxoKSYmbG0oX2UsZikpfSk7cmV0dXJu'@;
put 'IHYmJih0aGlzLmNsZWFyKCksUm4obCxUPT57Y29uc3RbWSxyZSxmZSxfZV09ZChUKTt0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKFkscmUpLCExKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRz'@;
put 'KGZlLF9lKSksdGhpcy5maW5pc2goKX0pKSx2fXNlbGVjdENvbHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06'@;
put 'LTE7Y29uc3QgaD0ic3RyaW5nIj09dHlwZW9mIGw/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChsKTpsLGY9InN0cmluZyI9PXR5cGVvZiBhP3RoaXMudGFibGVQcm9wcy5wcm9wVG9Db2woYSk6YSx2PXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxUPXRoaXMudGFibGVQcm9wcy5jb3Vu'@;
put 'dFJvd3MoKSxZPWxtKGgsdikmJmxtKGYsdik7cmV0dXJuIFkmJih0aGlzLnNldFJhbmdlU3RhcnRPbmx5KHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGQsaCkpLHRoaXMuc2V0UmFuZ2VFbmQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoVC0xLGYpKSx0aGlzLmZp'@;
put 'bmlzaCgpKSxZfXNlbGVjdFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06LTE7Y29uc3QgaD10aGlzLnRhYmxl'@;
put 'UHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksdj1sbShsLGgpJiZsbShhLGgpO3JldHVybiB2JiYodGhpcy5zZXRSYW5nZVN0YXJ0T25seSh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhsLGQpKSx0aGlzLnNldFJhbmdlRW5kKHRoaXMudGFi'@;
put 'bGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGEsZi0xKSksdGhpcy5maW5pc2goKSksdn1yZWZyZXNoKCl7aWYodGhpcy5oaWdobGlnaHQuZ2V0Q3VzdG9tU2VsZWN0aW9ucygpLmZvckVhY2goaD0+e2guY29tbWl0KCl9KSwhdGhpcy5pc1NlbGVjdGVkKCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5o'@;
put 'aWdobGlnaHQuZ2V0Q2VsbCgpLGQ9dGhpcy5nZXRMYXllckxldmVsKCk7YS5jb21taXQoKS5zeW5jV2l0aCh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpKTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZl'@;
put 'bChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlT3JHZXRIZWFkZXIoKSxUPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZU9yR2V0QWN0aXZlSGVhZGVyKCk7Zi5jb21taXQoKSx2LmNvbW1pdCgpLFQuY29tbWl0KCl9dGhpcy5o'@;
put 'aWdobGlnaHQudXNlTGF5ZXJMZXZlbChkKX19R2EoZnNlLHcxKTtjb25zdCBYSGU9ZnNlLHtyZWdpc3RlcjpKSGUsZ2V0SXRlbTpRSGUsaGFzSXRlbTpwc2UsZ2V0TmFtZXM6ZU5lfT1zaCgiY2VsbFR5cGVzIik7ZnVuY3Rpb24gQ1koYyl7aWYoIXBzZShjKSl0aHJvdyBFcnJvcihgWW91IGRl'@;
put 'Y2xhcmVkIGNlbGwgdHlwZSAiJHtjfSIgYXMgYSBzdHJpbmcgdGhhdCBpcyBub3QgbWFwcGVkIHRvIGEga25vd24gb2JqZWN0LlxuICAgICAgICAgICAgICAgICBDZWxsIHR5cGUgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBzdHJpbmcgbWFwcGVkIHRvIGFuIG9iamVjdCByZWdpc3RlcmVkIGJ5'@;
put 'XG4gICAgICAgICAgICAgICAgICJIYW5kc29udGFibGUuY2VsbFR5cGVzLnJlZ2lzdGVyQ2VsbFR5cGUiIG1ldGhvZGApO3JldHVybiBRSGUoYyl9ZnVuY3Rpb24gZzIoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLkNFTExfVFlQRSk7Y29uc3R7ZWRpdG9yOmEscmVuZGVyZXI6'@;
put 'ZCx2YWxpZGF0b3I6aH09bDthJiZiMShjLGEpLGQmJlNmKGMsZCksaCYmcDkoYyxoKSxKSGUoYyxsKX1mdW5jdGlvbiBKVChjLGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpjO2NvbnN0IGQ9InN0cmluZyI9PXR5cGVvZiBs'@;
put 'LnR5cGU/Q1kobC50eXBlKTpsLnR5cGU7aWYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiZ5cyhsLChmLHYpPT57Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzLmRlbGV0ZSh2KX0pLCF2cyhkKSlyZXR1cm47YT09PWMmJiFjLl9hdXRvbWF0aWNhbGx5QXNzaWdu'@;
put 'ZWRNZXRhUHJvcHMmJihjLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM9bmV3IFNldCk7Y29uc3QgaD17fTt5cyhkLChmLHYpPT57dmFyIFQ7KGZ1bmN0aW9uIHROZShjLGwpe3ZhciBhO3JldHVybiJDRUxMX1RZUEUiIT09YyYmKChudWxsPT09KGE9bC5fYXV0b21hdGljYWxseUFz'@;
put 'c2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oYXMoYykpfHwhcWwobCxjKSl9KSh2LGEpJiYoaFt2XT1mLG51bGw9PT0oVD1jLl9hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHMpfHx2b2lkIDA9PT1UfHxULmFkZCh2KSl9KSx4YyhjLGgpfWZ1bmN0aW9uIFFUKGMp'@;
put 'e3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGMpJiZjPj0wfWZ1bmN0aW9uIGVEKGMsbCl7aWYoIWMoKSl0aHJvdyBuZXcgRXJyb3IoYEFzc2VydGlvbiBmYWlsZWQ6ICR7bH1gKX1mdW5jdGlvbiB0RChjKXtyZXR1cm4gbnVsbD09Y31jb25zdCBtc2U9KCk9Pih7X2F1dG9tYXRpY2FsbHlBc3Np'@;
put 'Z25lZE1ldGFQcm9wczp2b2lkIDAsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJodF9fYWN0aXZlX2hpZ2hsaWdodCIsYWxsb3dFbXB0eTohMCxhbGxvd0h0bWw6ITEsYWxsb3dJbnNlcnRDb2x1bW46ITAsYWxsb3dJbnNlcnRSb3c6ITAsYWxsb3dJbnZhbGlkOiEwLGFsbG93UmVtb3ZlQ29sdW1u'@;
put 'OiEwLGFsbG93UmVtb3ZlUm93OiEwLGF1dG9Db2x1bW5TaXplOnZvaWQgMCxhdXRvUm93U2l6ZTp2b2lkIDAsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYmluZFJvd3NXaXRoSGVhZGVyczp2b2lkIDAsY2VsbDpbXSxjZWxsczp2b2lkIDAsY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCxj'@;
put 'bGFzc05hbWU6dm9pZCAwLGNvbEhlYWRlcnM6bnVsbCxjb2xsYXBzaWJsZUNvbHVtbnM6dm9pZCAwLGNvbHVtbkhlYWRlckhlaWdodDp2b2lkIDAsY29sdW1uczp2b2lkIDAsY29sdW1uU29ydGluZzp2b2lkIDAsY29sdW1uU3VtbWFyeTp2b2lkIDAsY29sV2lkdGhzOnZvaWQgMCxjb21tZW50'@;
put 'ZWRDZWxsQ2xhc3NOYW1lOiJodENvbW1lbnRDZWxsIixjb21tZW50czohMSxjb250ZXh0TWVudTp2b2lkIDAsY29weWFibGU6ITAsY29weVBhc3RlOiEwLGNvcnJlY3RGb3JtYXQ6ITEsY3VycmVudENvbENsYXNzTmFtZTp2b2lkIDAsY3VycmVudEhlYWRlckNsYXNzTmFtZToiaHRfX2hpZ2hs'@;
put 'aWdodCIsY3VycmVudFJvd0NsYXNzTmFtZTp2b2lkIDAsY3VzdG9tQm9yZGVyczohMSxkYXRhOnZvaWQgMCxkYXRhU2NoZW1hOnZvaWQgMCxkYXRlRm9ybWF0OiJERC9NTS9ZWVlZIixkYXRlUGlja2VyQ29uZmlnOnZvaWQgMCxkZWZhdWx0RGF0ZTp2b2lkIDAsZGlzYWJsZVZpc3VhbFNlbGVj'@;
put 'dGlvbjohMSxkcmFnVG9TY3JvbGw6ITAsZHJvcGRvd25NZW51OnZvaWQgMCxlZGl0b3I6dm9pZCAwLGVudGVyQmVnaW5zRWRpdGluZzohMCxlbnRlck1vdmVzOntjb2w6MCxyb3c6MX0sZmlsbEhhbmRsZTp7YXV0b0luc2VydFJvdzohMX0sZmlsdGVyOiEwLGZpbHRlcmluZ0Nhc2VTZW5zaXRp'@;
put 'dmU6ITEsZmlsdGVyczp2b2lkIDAsZml4ZWRDb2x1bW5zTGVmdDowLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzQm90dG9tOjAsZml4ZWRSb3dzVG9wOjAsZm9ybXVsYXM6dm9pZCAwLGZyYWdtZW50U2VsZWN0aW9uOiExLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAs'@;
put 'aGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05hbWU6Imh0SW52YWxpZCIsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09cWMoZCkpcmV0dXJuITE7cmV0dXJu'@;
put 'ITB9LGlzRW1wdHlSb3coYyl7bGV0IGwsYSxkLGg7Zm9yKGw9MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09cWMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksd1QodGhpcy5n'@;
put 'ZXRTY2hlbWEoKVtoLnByb3BdLGQpKTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6'@;
put 'dm9pZCAwLG1hbnVhbENvbHVtblJlc2l6ZTp2b2lkIDAsbWFudWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAs'@;
put 'bXVsdGlDb2x1bW5Tb3J0aW5nOnZvaWQgMCxuZXN0ZWRIZWFkZXJzOnZvaWQgMCxuZXN0ZWRSb3dzOnZvaWQgMCxub1dvcmRXcmFwQ2xhc3NOYW1lOiJodE5vV3JhcCIsbnVtZXJpY0Zvcm1hdDp2b2lkIDAsb2JzZXJ2ZURPTVZpc2liaWxpdHk6ITAsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiEw'@;
put 'LHBlcnNpc3RlbnRTdGF0ZTp2b2lkIDAscGxhY2Vob2xkZXI6dm9pZCAwLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToiaHRQbGFjZWhvbGRlciIscHJldmVudE92ZXJmbG93OiExLHByZXZlbnRXaGVlbDohMSxyZWFkT25seTohMSxyZWFkT25seUNlbGxDbGFzc05hbWU6Imh0RGltbWVkIixy'@;
put 'ZW5kZXJBbGxSb3dzOnZvaWQgMCxyZW5kZXJlcjp2b2lkIDAscm93SGVhZGVyczp2b2lkIDAscm93SGVhZGVyV2lkdGg6dm9pZCAwLHJvd0hlaWdodHM6dm9pZCAwLHNlYXJjaDohMSxzZWxlY3Rpb25Nb2RlOiJtdWx0aXBsZSIsc2VsZWN0T3B0aW9uczp2b2lkIDAsc2tpcENvbHVtbk9uUGFz'@;
put 'dGU6ITEsc2tpcFJvd09uUGFzdGU6ITEsc29ydEJ5UmVsZXZhbmNlOiEwLHNvdXJjZTp2b2lkIDAsc3RhcnRDb2xzOjUsc3RhcnRSb3dzOjUsc3RyZXRjaEg6Im5vbmUiLHN0cmljdDp2b2lkIDAsdGFibGVDbGFzc05hbWU6dm9pZCAwLHRhYk1vdmVzOntyb3c6MCxjb2w6MX0sdGl0bGU6dm9p'@;
put 'ZCAwLHRyaW1Ecm9wZG93bjohMCx0cmltUm93czp2b2lkIDAsdHJpbVdoaXRlc3BhY2U6ITAsdHlwZToidGV4dCIsdW5jaGVja2VkVGVtcGxhdGU6dm9pZCAwLHVuZG86dm9pZCAwLHZhbGlkYXRvcjp2b2lkIDAsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0'@;
put 'Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aXNpYmxlUm93czoxMCx3aWR0aDp2b2lkIDAsd29yZFdyYXA6ITB9KTtjbGFzcyBpTmV7Y29uc3RydWN0b3IobCl7dGhpcy5tZXRhQ3Rvcj1jbGFzc3t9LHRoaXMubWV0YT10aGlzLm1ldGFDdG9yLnByb3RvdHlwZSx4Yyh0aGlzLm1ldGEsbXNl'@;
put 'KCkpLHRoaXMubWV0YS5pbnN0YW5jZT1sfWdldE1ldGFDb25zdHJ1Y3Rvcigpe3JldHVybiB0aGlzLm1ldGFDdG9yfWdldE1ldGEoKXtyZXR1cm4gdGhpcy5tZXRhfXVwZGF0ZU1ldGEobCl7dmFyIGE7eGModGhpcy5tZXRhLGwpLEpUKHRoaXMubWV0YSx7Li4ubCx0eXBlOm51bGwhPT0oYT1s'@;
put 'LnR5cGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5tZXRhLnR5cGV9LGwpfX1jbGFzcyBvTmV7Y29uc3RydWN0b3IobCl7Y29uc3QgYT1sLmdldE1ldGFDb25zdHJ1Y3RvcigpO3RoaXMubWV0YT1uZXcgYX1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3hjKHRoaXMubWV0'@;
put 'YSxsKSxKVCh0aGlzLm1ldGEsbCxsKX19Y2xhc3MgU1l7Y29uc3RydWN0b3IobCl7dGhpcy52YWx1ZUZhY3Rvcnk9bCx0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzPW5ldyBTZXR9b2J0YWluKGwpe2VEKCgpPT5RVChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJl'@;
put 'ci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0sdm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVz'@;
put 'LnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4g'@;
put 'ZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7ZUQoKCk9PlFUKGwpfHx0RChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtd'@;
put 'LGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IHY9MDt2PGE7disrKWQucHVzaChoK3YpLHRoaXMuZGF0YS5wdXNoKHZvaWQgMCk7Y29uc3QgZj10RChsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXgu'@;
put 'c2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTtlRCgoKT0+UVQobCl8fHREKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2Nv'@;
put 'bnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UodEQobCk/dGhpcy5pbmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3Ro'@;
put 'LXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gZmQodGhpcy5kYXRhLChsLGEpPT4hdGhpcy5ob2xlcy5oYXMoYSkpW1N5bWJvbC5pdGVyYXRvcl0oKX1lbnRyaWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGQ9MDtkPHRoaXMuZGF0YS5sZW5ndGg7ZCsrKXtjb25zdCBoPXRoaXMuX2dl'@;
put 'dEtleUJ5U3RvcmFnZUluZGV4KGQpOy0xIT09aCYmbC5wdXNoKFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0'@;
put 'aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhvbGVzLmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2Yo'@;
put 'bCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9fWNvbnN0IHNOZT1bImRhdGEiLCJ3aWR0aCJdO2NsYXNzIGFOZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBTWSgoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11cGRhdGVN'@;
put 'ZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7eGMoZCxhKSxKVChkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFzLm9idGFp'@;
put 'bihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gbk5lKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtmdW5jdGlvbiBhKCl7fW9wKGEsYyk7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspYS5wcm90b3R5cGVbbFtkXV09dm9pZCAwO3JldHVybiBhfSh0aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKCksc05lKS5wcm90'@;
put 'b3R5cGV9fWNsYXNzIGxOZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmNvbHVtbk1ldGE9bCx0aGlzLm1ldGFzPW5ldyBTWSgoKT0+dGhpcy5fY3JlYXRlUm93KCkpfXVwZGF0ZU1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5nZXRNZXRhKGwsYSk7eGMoaCxkKSxKVChoLGQpfWNyZWF0ZVJvdyhsLGEp'@;
put 'e3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9Y3JlYXRlQ29sdW1uKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkuaW5zZXJ0KGwsYSl9cmVtb3ZlUm93KGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1yZW1vdmVDb2x1bW4obCxh'@;
put 'KXtmb3IobGV0IGQ9MDtkPHRoaXMubWV0YXMuc2l6ZSgpO2QrKyl0aGlzLm1ldGFzLm9idGFpbihkKS5yZW1vdmUobCxhKX1nZXRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtyZXR1cm4gdm9pZCAwPT09ZD9oOmhbZF19c2V0TWV0YShsLGEsZCxo'@;
put 'KXt2YXIgZjtjb25zdCB2PXRoaXMubWV0YXMub2J0YWluKGwpLm9idGFpbihhKTtudWxsPT09KGY9di5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzKXx8dm9pZCAwPT09Znx8Zi5kZWxldGUoZCksdltkXT1ofXJlbW92ZU1ldGEobCxhLGQpe2RlbGV0ZSB0aGlzLm1ldGFzLm9idGFp'@;
put 'bihsKS5vYnRhaW4oYSlbZF19Z2V0TWV0YXMoKXtjb25zdCBsPVtdLGE9QXJyYXkuZnJvbSh0aGlzLm1ldGFzLnZhbHVlcygpKTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKylsLnB1c2goLi4uYVtkXS52YWx1ZXMoKSk7cmV0dXJuIGx9Z2V0TWV0YXNBdFJvdyhsKXtlRCgoKT0+UVQobCks'@;
put 'IkV4cGVjdGluZyBhbiB1bnNpZ25lZCBudW1iZXIuIik7Y29uc3QgYT1uZXcgTWFwKHRoaXMubWV0YXMpO3JldHVybiBhLmhhcyhsKT9BcnJheS5mcm9tKGEuZ2V0KGwpLnZhbHVlcygpKTpbXX1jbGVhckNhY2hlKCl7dGhpcy5tZXRhcy5jbGVhcigpfV9jcmVhdGVSb3coKXtyZXR1cm4gbmV3'@;
put 'IFNZKGw9PnRoaXMuX2NyZWF0ZU1ldGEobCkpfV9jcmVhdGVNZXRhKGwpe3JldHVybiBuZXcodGhpcy5jb2x1bW5NZXRhLmdldE1ldGFDb25zdHJ1Y3RvcihsKSl9fWNsYXNzIGdzZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx'@;
put 'XT9hcmd1bWVudHNbMV06e30sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06W107dGhpcy5ob3Q9bCx0aGlzLmdsb2JhbE1ldGE9bmV3IGlOZShsKSx0aGlzLnRhYmxlTWV0YT1uZXcgb05lKHRoaXMuZ2xvYmFsTWV0YSksdGhpcy5jb2x1'@;
put 'bW5NZXRhPW5ldyBhTmUodGhpcy5nbG9iYWxNZXRhKSx0aGlzLmNlbGxNZXRhPW5ldyBsTmUodGhpcy5jb2x1bW5NZXRhKSxkLmZvckVhY2goaD0+bmV3IGgodGhpcykpLHRoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGEpfWdldEdsb2JhbE1ldGEoKXtyZXR1cm4gdGhpcy5nbG9iYWxNZXRh'@;
put 'LmdldE1ldGEoKX11cGRhdGVHbG9iYWxNZXRhKGwpe3RoaXMuZ2xvYmFsTWV0YS51cGRhdGVNZXRhKGwpfWdldFRhYmxlTWV0YSgpe3JldHVybiB0aGlzLnRhYmxlTWV0YS5nZXRNZXRhKCl9dXBkYXRlVGFibGVNZXRhKGwpe3RoaXMudGFibGVNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0Q29sdW1u'@;
put 'TWV0YShsKXtyZXR1cm4gdGhpcy5jb2x1bW5NZXRhLmdldE1ldGEobCl9dXBkYXRlQ29sdW1uTWV0YShsLGEpe3RoaXMuY29sdW1uTWV0YS51cGRhdGVNZXRhKGwsYSl9Z2V0Q2VsbE1ldGEobCxhLGQpe2xldHt2aXN1YWxSb3c6aCx2aXN1YWxDb2x1bW46Zn09ZDtjb25zdCB2PXRoaXMuY2Vs'@;
put 'bE1ldGEuZ2V0TWV0YShsLGEpO3JldHVybiB2LnZpc3VhbFJvdz1oLHYudmlzdWFsQ29sPWYsdi5yb3c9bCx2LmNvbD1hLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJHZXRDZWxsTWV0YSIsdiksdn1nZXRDZWxsTWV0YUtleVZhbHVlKGwsYSxkKXtpZigic3RyaW5nIiE9dHlwZW9mIGQpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGNlbGwgbWV0YSBvYmplY3Qga2V5IGlzIG5vdCBhIHN0cmluZyIpO3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGEobCxhLGQpfXNldENlbGxNZXRhKGwsYSxkLGgpe3RoaXMuY2VsbE1ldGEuc2V0TWV0YShsLGEsZCxoKX11cGRhdGVDZWxsTWV0'@;
put 'YShsLGEsZCl7dGhpcy5jZWxsTWV0YS51cGRhdGVNZXRhKGwsYSxkKX1yZW1vdmVDZWxsTWV0YShsLGEsZCl7dGhpcy5jZWxsTWV0YS5yZW1vdmVNZXRhKGwsYSxkKX1nZXRDZWxsc01ldGEoKXtyZXR1cm4gdGhpcy5jZWxsTWV0YS5nZXRNZXRhcygpfWdldENlbGxzTWV0YUF0Um93KGwpe3Jl'@;
put 'dHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzQXRSb3cobCl9Y3JlYXRlUm93KGwpe3RoaXMuY2VsbE1ldGEuY3JlYXRlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfXJlbW92ZVJvdyhsKXt0aGlzLmNlbGxNZXRhLnJlbW92'@;
put 'ZVJvdyhsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxKX1jcmVhdGVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5jcmVhdGVD'@;
put 'b2x1bW4obCxhKSx0aGlzLmNvbHVtbk1ldGEuY3JlYXRlQ29sdW1uKGwsYSl9cmVtb3ZlQ29sdW1uKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxO3RoaXMuY2VsbE1ldGEucmVtb3ZlQ29sdW1uKGwsYSksdGhpcy5jb2x1'@;
put 'bW5NZXRhLnJlbW92ZUNvbHVtbihsLGEpfWNsZWFyQ2VsbHNDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpfWNsZWFyQ2FjaGUoKXt0aGlzLmNlbGxNZXRhLmNsZWFyQ2FjaGUoKSx0aGlzLmNvbHVtbk1ldGEuY2xlYXJDYWNoZSgpfX1HYShnc2UsdzEpO2NsYXNzIGNOZXtjb25z'@;
put 'dHJ1Y3RvcihsKXt0aGlzLm1ldGFNYW5hZ2VyPWwsdGhpcy5tZXRhU3luY01lbW89bmV3IE1hcCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsYT0+dGhpcy5leHRlbmRDZWxsTWV0YShhKSksYW8uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIiLGE9PnthJiZ0aGlz'@;
put 'Lm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5hZ2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJldHVybjtjb25zdHt2'@;
put 'aXN1YWxSb3c6Zix2aXN1YWxDb2w6dn09bCxUPXRoaXMubWV0YU1hbmFnZXIuaG90LFk9VC5jb2xUb1Byb3Aodik7bC5wcm9wPVksVC5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsdixsKTtjb25zdCByZT1xbChsLCJ0eXBlIik/bC50eXBlOm51bGw7bGV0IGZlPW9sKGwuY2VsbHMp'@;
put 'P2wuY2VsbHMoZCxoLFkpOm51bGw7aWYocmUpaWYoZmUpe3ZhciBfZTtmZS50eXBlPW51bGwhPT0oX2U9ZmUudHlwZSkmJnZvaWQgMCE9PV9lP19lOnJlfWVsc2UgZmU9e3R5cGU6cmV9O2ZlJiZ0aGlzLm1ldGFNYW5hZ2VyLnVwZGF0ZUNlbGxNZXRhKGQsaCxmZSksVC5ydW5Ib29rcygiYWZ0'@;
put 'ZXJHZXRDZWxsTWV0YSIsZix2LGwpLHRoaXMubWV0YVN5bmNNZW1vLmhhcyhkKXx8dGhpcy5tZXRhU3luY01lbW8uc2V0KGQsbmV3IFNldCksdGhpcy5tZXRhU3luY01lbW8uZ2V0KGQpLmFkZChoKX19Y2xhc3MgdU5le2NvbnN0cnVjdG9yKGwpe3RoaXMubWV0YU1hbmFnZXI9bCx0aGlzLnVz'@;
put 'YWdlVHJhY2tlcj1uZXcgU2V0LHRoaXMucHJvcERlc2NyaXB0b3JzPW5ldyBNYXAoW1siZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIuaG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5oYXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRy'@;
put 'YWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFzZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNT'@;
put 'dGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtvbkNoYW5nZShhLGQsaCl7aWYoIWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfX1dXSksdGhpcy5leHRl'@;
put 'bmRNZXRhUHJvcHMoKX1leHRlbmRNZXRhUHJvcHMoKXt0aGlzLnByb3BEZXNjcmlwdG9ycy5mb3JFYWNoKChsLGEpPT57Y29uc3R7dGFyZ2V0OmQsb25DaGFuZ2U6aD0oKCk9Pnt9KX09bCxmPSJzdHJpbmciPT10eXBlb2YgZCx2PWY/ZDphLFQ9YF8ke3Z9YDt0aGlzLm1ldGFNYW5hZ2VyLmds'@;
put 'b2JhbE1ldGEubWV0YVtUXT10aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVt2XSx0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLFQsaCksZiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoZCxULGgpfSl9aW5zdGFsbFByb3BXYXRjaGVyKGwsYSxkKXtjb25zdCBoPXRoaXM7T2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLGwse2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoZil7Y29uc3Qgdj0haC51c2FnZVRyYWNrZXIuaGFzKGwpO2gudXNhZ2VUcmFja2VyLmFkZChsKSxkLmNhbGwoaCxsLGYsdiksdGhpc1thXT1mfSxlbnVt'@;
put 'ZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX1jb25zdCBfc2U9L14oXHJcbnxcblxyfFxyfFxuKS8sZE5lPS9eW15cdFxyXG5dKy8sdnNlPS9eXHQvO2Z1bmN0aW9uIFR3KGMpe2xldCBsLGEsZCxoLHYsZj0iIjtmb3IobD0wLGE9Yy5sZW5ndGg7bDxhO2wrPTEpe2ZvcihoPWNbbF0ubGVu'@;
put 'Z3RoLGQ9MDtkPGg7ZCs9MSlkPjAmJihmKz0iXHQiKSx2PWNbbF1bZF0sInN0cmluZyI9PXR5cGVvZiB2P3YuaW5kZXhPZigiXG4iKT4tMT9mKz1gIiR7di5yZXBsYWNlKC8iL2csJyIiJyl9ImA6Zis9djpmKz1udWxsPT12PyIiOnY7bCE9PWEtMSYmKGYrPSJcbiIpfXJldHVybiBmfWNsYXNz'@;
put 'IEM5e3N0YXRpYyBnZXQgREVTVElOQVRJT05fUkVOREVSRVIoKXtyZXR1cm4gMX1zdGF0aWMgZ2V0IERFU1RJTkFUSU9OX0NMSVBCT0FSRF9HRU5FUkFUT1IoKXtyZXR1cm4gMn1jb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5pbnN0YW5jZT1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxl'@;
put 'TWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuZHVja1NjaGVtYT10aGlzLmNyZWF0ZUR1Y2tTY2hlbWEoKSx0aGlzLmNvbFRvUHJvcENhY2hlPXZvaWQgMCx0aGlzLnByb3BUb0NvbENhY2hlPXZvaWQgMCx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2Nv'@;
put 'bnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0eXBlb2YgbD4idSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29s'@;
put 'dW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJvcENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCx2PSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBUPUNUKGwpO2g9VD4wP1Q6dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLHY9ITB9ZWxz'@;
put 'ZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRhLm1heENvbHMsYS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgVD12P2EoZCk6YVtkXTtpZih2cyhUKSl7aWYodHlwZW9mIFQuZGF0YTwidSIpe2NvbnN0IFk9dj9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtZXT1ULmRhdGEsdGhpcy5w'@;
put 'cm9wVG9Db2xDYWNoZS5zZXQoVC5kYXRhLFkpfWYrPTF9fX1lbHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gWWoodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IHYsaD1hLGY9ZDtyZXR1cm4g'@;
put 'dHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJnlzKGwsKFQsWSk9PntudWxsPT09VD8odj1mK1ksdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKHYpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHYsaCksaCs9MSk6aD10aGlzLnJl'@;
put 'Y3Vyc2l2ZUR1Y2tDb2x1bW5zKFQsaCxgJHtZfS5gKX0pLGh9Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gbnVsbD09PWE/bDp0aGlzLmNvbFRvUHJvcENhY2hl'@;
put 'JiZlbyh0aGlzLmNvbFRvUHJvcENhY2hlW2FdKT90aGlzLmNvbFRvUHJvcENhY2hlW2FdOmF9cHJvcFRvQ29sKGwpe2NvbnN0IGE9dGhpcy5wcm9wVG9Db2xDYWNoZS5nZXQobCk7aWYoZW8oYSkpcmV0dXJuIHRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4oYSk7Y29uc3QgZD10aGlzLmlu'@;
put 'c3RhbmNlLnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxsPT09ZD9sOmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0'@;
put 'dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNlWzBdP3U5KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYm'@;
put 'dm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQg'@;
put 'dj1mLFQ9MCxZPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgWXx8WT49ZikmJihZPWYpLFk8dGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKSYmKHY9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KFkpKSwhMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsWSxhLGQp'@;
put 'fHxudWxsPT09dilyZXR1cm57ZGVsdGE6MH07Y29uc3QgZmU9dGhpcy50YWJsZU1ldGEubWF4Um93cyxfZT10aGlzLmdldFNjaGVtYSgpLmxlbmd0aCxrZT1bXTtmb3IoO1Q8YSYmZitUPGZlOyl7bGV0IEplPW51bGw7ImFycmF5Ij09PXRoaXMuaW5zdGFuY2UuZGF0YVR5cGU/dGhpcy50YWJs'@;
put 'ZU1ldGEuZGF0YVNjaGVtYT9KZT1sMCh0aGlzLmdldFNjaGVtYSgpKTooSmU9W10sTW8oX2UtMSwoKT0+SmUucHVzaChudWxsKSkpOiJmdW5jdGlvbiI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlP0plPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoWStUKTooSmU9e30scHcoSmUsdGhpcy5n'@;
put 'ZXRTY2hlbWEoKSkpLGtlLnB1c2goSmUpLFQrPTF9dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5pbnNlcnRJbmRleGVzKFksVCksImJlbG93Ij09PWgmJih2PU1hdGgubWluKHYrMSxmKSksdGhpcy5zcGxpY2VEYXRhKHYsMCxrZSk7Y29uc3QgV2U9dGhpcy5pbnN0YW5jZS50b1Zpc3Vh'@;
put 'bFJvdyh2KTtyZXR1cm4gdGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKT09PWtlLmxlbmd0aCYmdGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5pbnN0YW5jZS5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksVD4wJiYobnVsbD09bD90aGlzLm1l'@;
put 'dGFNYW5hZ2VyLmNyZWF0ZVJvdyhudWxsLFQpOiJhdXRvIiE9PWQmJnRoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KHYsYSkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixXZSxULGQpLHRoaXMuaW5zdGFuY2UuZm9yY2VGdWxsUmVuZGVyPSEwLHtkZWx0YTpULHN0'@;
put 'YXJ0UGh5c2ljYWxJbmRleDp2fX1jcmVhdGVDb2wobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEse3NvdXJjZTpkLG1vZGU6aD0ic3RhcnQifT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9h'@;
put 'cmd1bWVudHNbMl06e307aWYoIXRoaXMuaW5zdGFuY2UuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY3JlYXRlIG5ldyBjb2x1bW4uIFdoZW4gZGF0YSBzb3VyY2UgaW4gYW4gb2JqZWN0LCB5b3UgY2FuIG9ubHkgaGF2ZSBhcyBtdWNoIGNv'@;
put 'bHVtbnMgYXMgZGVmaW5lZCBpbiBmaXJzdCBkYXRhIHJvdywgZGF0YSBzY2hlbWEgb3IgaW4gdGhlICdjb2x1bW5zJyBzZXR0aW5nLklmIHlvdSB3YW50IHRvIGJlIGFibGUgdG8gYWRkIG5ldyBjb2x1bW5zLCB5b3UgaGF2ZSB0byB1c2UgYXJyYXkgZGF0YXNvdXJjZS4iKTtjb25zdCBmPXRo'@;
put 'aXMuZGF0YVNvdXJjZSx2PXRoaXMudGFibGVNZXRhLm1heENvbHMsVD10aGlzLmluc3RhbmNlLmNvdW50U291cmNlQ29scygpO2xldCBZPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgWXx8WT49VCkmJihZPVQpLCExPT09dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlQ29sIixZ'@;
put 'LGEsZCkpcmV0dXJue2RlbHRhOjB9O2xldCBmZT1UO1k8dGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKGZlPXRoaXMuaW5zdGFuY2UudG9QaHlzaWNhbENvbHVtbihZKSk7Y29uc3QgX2U9dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKTtsZXQga2U9dGhpcy5pbnN0YW5jZS5jb3Vu'@;
put 'dENvbHMoKSxXZT0wLEplPWZlOyJlbmQiPT09aCYmKEplPU1hdGgubWluKEplKzEsVCkpO2NvbnN0IHR0PUplO2Zvcig7V2U8YSYma2U8djspe2lmKCJudW1iZXIiIT10eXBlb2YgWXx8WT49a2UpaWYoX2U+MClmb3IobGV0IHd0PTA7d3Q8X2U7d3QrPTEpdHlwZW9mIGZbd3RdPiJ1IiYmKGZb'@;
put 'd3RdPVtdKSxmW3d0XS5wdXNoKG51bGwpO2Vsc2UgZi5wdXNoKFtudWxsXSk7ZWxzZSBmb3IobGV0IHd0PTA7d3Q8X2U7d3QrKylmW3d0XS5zcGxpY2UoSmUsMCxudWxsKTtXZSs9MSxKZSs9MSxrZSs9MX10aGlzLmluc3RhbmNlLmNvbHVtbkluZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoWSxX'@;
put 'ZSksV2U+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCxXZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4odHQsYSkpO2NvbnN0IHl0PXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odHQpO3JldHVybiB0aGlzLmluc3Rh'@;
put 'bmNlLnJ1bkhvb2tzKCJhZnRlckNyZWF0ZUNvbCIseXQsV2UsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpXZSxzdGFydFBoeXNpY2FsSW5kZXg6dHR9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3Ro'@;
put 'PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhpcy5pbnN0YW5jZS5j'@;
put 'b3VudFNvdXJjZVJvd3MoKTtpZihoPSh2K2gpJXYsITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGgsZi5sZW5ndGgsZixkKSlyZXR1cm4hMTtjb25zdCBZPWYubGVuZ3RoO2lmKHRoaXMuZmlsdGVyRGF0YShoLFksZiksaDx0aGlzLmluc3RhbmNlLmNvdW50'@;
put 'Um93cygpKXt0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLnJlbW92ZUluZGV4ZXMoZik7Y29uc3QgZmU9ZW8odGhpcy50YWJsZU1ldGEuY29sdW1ucyl8fGVvKHRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEpOzA9PT10aGlzLmluc3RhbmNlLnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1t'@;
put 'ZWRJbmRleGVzTGVuZ3RoKCkmJiExPT09ZmUmJnRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKFtdKX1yZXR1cm4gZi5zbGljZSgwKS5zb3J0KChmZSxfZSk9Pl9lLWZlKS5mb3JFYWNoKGZlPT57dGhpcy5tZXRhTWFuYWdlci5yZW1vdmVSb3coZmUs'@;
put 'MSl9KSx0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsaCxZLGYsZCksdGhpcy5pbnN0YW5jZS5mb3JjZUZ1bGxSZW5kZXI9ITAsITB9cmVtb3ZlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTox'@;
put 'LGQ9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIm9iamVjdCI9PT10aGlzLmluc3RhbmNlLmRhdGFUeXBlfHx0aGlzLnRhYmxlTWV0YS5jb2x1bW5zKXRocm93IG5ldyBFcnJvcigiY2Fubm90IHJlbW92ZSBjb2x1bW4gd2l0aCBvYmplY3QgZGF0YSBzb3VyY2Ug'@;
put 'b3IgY29sdW1ucyBvcHRpb24gc3BlY2lmaWVkIik7bGV0IGg9Im51bWJlciIhPXR5cGVvZiBsPy1hOmw7aD0odGhpcy5pbnN0YW5jZS5jb3VudENvbHMoKStoKSV0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO2NvbnN0IGY9dGhpcy52aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChoLGEpLHY9Zi5z'@;
put 'bGljZSgwKS5zb3J0KChfZSxrZSk9PmtlLV9lKTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlbW92ZUNvbCIsaCxhLGYsZCkpcmV0dXJuITE7bGV0IFk9ITA7Y29uc3QgcmU9di5sZW5ndGgsZmU9dGhpcy5kYXRhU291cmNlO2ZvcihsZXQgX2U9MDtfZTxyZTtfZSsr'@;
put 'KVkmJmZbMF0hPT1mW19lXS1fZSYmKFk9ITEpO2lmKFkpZm9yKGxldCBfZT0wLGtlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7X2U8a2U7X2UrKylmZVtfZV0uc3BsaWNlKGZbMF0sYSksMD09PV9lJiZ0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZUNvbHVtbihmWzBdLGEpO2Vsc2Ug'@;
put 'Zm9yKGxldCBfZT0wLGtlPXRoaXMuaW5zdGFuY2UuY291bnRTb3VyY2VSb3dzKCk7X2U8a2U7X2UrKylmb3IobGV0IFdlPTA7V2U8cmU7V2UrKylmZVtfZV0uc3BsaWNlKHZbV2VdLDEpLDA9PT1fZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4odltXZV0sMSk7cmV0dXJuIGg8dGhp'@;
put 'cy5pbnN0YW5jZS5jb3VudENvbHMoKSYmKHRoaXMuaW5zdGFuY2UuY29sdW1uSW5kZXhNYXBwZXIucmVtb3ZlSW5kZXhlcyhmKSwwPT09dGhpcy5pbnN0YW5jZS5jb2x1bW5JbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpJiZ0aGlzLmluc3RhbmNlLnJvd0luZGV4TWFw'@;
put 'cGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVtb3ZlQ29sIixoLGEsZixkKSx0aGlzLmluc3RhbmNlLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnJlZnJlc2hEdWNrU2NoZW1hKCksITB9c3BsaWNlQ29sKGwsYSxkKXtjb25zdCBoPXRo'@;
put 'aXMuaW5zdGFuY2UuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNlKGErZCk7Zm9yKHZhciBUPWFyZ3VtZW50cy5sZW5ndGgsWT1uZXcgQXJyYXkoVD4zP1QtMzowKSxyZT0zO3JlPFQ7cmUrKylZW3JlLTNdPWFyZ3VtZW50c1tyZV07RlYoWSx2KTtsZXQgZmU9MDtm'@;
put 'b3IoO2ZlPGQ7KVkucHVzaChudWxsKSxmZSs9MTtyZXR1cm4gRWllKFkpLHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkoYSxsLFksbnVsbCxudWxsLCJzcGxpY2VDb2wiKSxmfXNwbGljZVJvdyhsLGEsZCl7Y29uc3QgaD10aGlzLmluc3RhbmNlLmdldFNvdXJjZURhdGFBdFJvdyhs'@;
put 'KSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgVD1hcmd1bWVudHMubGVuZ3RoLFk9bmV3IEFycmF5KFQ+Mz9ULTM6MCkscmU9MztyZTxUO3JlKyspWVtyZS0zXT1hcmd1bWVudHNbcmVdO0ZWKFksdik7bGV0IGZlPTA7Zm9yKDtmZTxkOylZLnB1c2gobnVsbCksZmUr'@;
put 'PTE7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9wdWxhdGVGcm9tQXJyYXkobCxhLFtZXSxudWxsLG51bGwsInNwbGljZVJvdyIpLGZ9c3BsaWNlRGF0YShsLGEsZCl7aWYoITEhPT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRo'@;
put 'aXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsZi5mb3JFYWNoKHY9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKHYpKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5pbnN0YW5jZS5ydW5I'@;
put 'b29rcygiZmlsdGVyRGF0YSIsbCxhLGQpOyExPT09QXJyYXkuaXNBcnJheShoKSYmKGg9dGhpcy5kYXRhU291cmNlLmZpbHRlcigoZix2KT0+LTE9PT1kLmluZGV4T2YodikpKSx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAsQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGhpcy5kYXRhU291'@;
put 'cmNlLGgpfWdldChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS50b1BoeXNpY2FsUm93KGwpO2xldCBoPXRoaXMuZGF0YVNvdXJjZVtkXTtjb25zdCBmPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2xldCB2PW51bGw7aWYoaCYmaC5o'@;
put 'YXNPd25Qcm9wZXJ0eSYmcWwoaCxhKSl2PWhbYV07ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBUPWEuc3BsaXQoIi4iKTtsZXQgWT1oO2lmKCFZKXJldHVybiBudWxsO2ZvcihsZXQgcmU9MCxmZT1ULmxlbmd0aDtyZTxmZTtyZSsrKWlmKFk9'@;
put 'WVtUW3JlXV0sdHlwZW9mIFk+InUiKXJldHVybiBudWxsO3Y9WX1lbHNlImZ1bmN0aW9uIj09dHlwZW9mIGEmJih2PWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBUPVZnKHYpO3RoaXMuaW5z'@;
put 'dGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGQsdGhpcy5wcm9wVG9Db2woYSksVCwiZ2V0IiksVC5pc1RvdWNoZWQoKSYmKHY9VC52YWx1ZSl9cmV0dXJuIHZ9Z2V0Q29weWFibGUobCxhKXtyZXR1cm4gdGhpcy5pbnN0YW5jZS5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5j'@;
put 'b3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7Y29uc3QgaD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3cobCk7bGV0IGY9ZCx2PXRoaXMuZGF0YVNvdXJjZVtoXTtjb25zdCBUPXRoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGgpO2lmKHY9aXNOYU4o'@;
put 'VCk/VDp2LHRoaXMuaW5zdGFuY2UuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBZPVZnKGYpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoIm1vZGlmeURhdGEiLGgsdGhpcy5wcm9wVG9Db2woYSksWSwic2V0IiksWS5pc1RvdWNoZWQoKSYmKGY9WS52YWx1ZSl9aWYodiYmdi5oYXNPd25Q'@;
put 'cm9wZXJ0eSYmcWwodixhKSl2W2FdPWY7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtjb25zdCBZPWEuc3BsaXQoIi4iKTtsZXQgX2UscmU9dixmZT0wO2ZvcihmZT0wLF9lPVkubGVuZ3RoLTE7ZmU8X2U7ZmUrKyl0eXBlb2YgcmVbWVtmZV1dPiJ1IiYm'@;
put 'KHJlW1lbZmVdXT17fSkscmU9cmVbWVtmZV1dO3JlW1lbZmVdXT1mfWVsc2UiZnVuY3Rpb24iPT10eXBlb2YgYT9hKHRoaXMuZGF0YVNvdXJjZS5zbGljZShoLGgrMSlbMF0sZik6dlthXT1mfXZpc3VhbFJvd3NUb1BoeXNpY2FsKGwsYSl7Y29uc3QgZD10aGlzLmluc3RhbmNlLmNvdW50U291'@;
put 'cmNlUm93cygpLGg9W107bGV0IFQsZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKFQpLHYtPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5pbnN0YW5jZS5jb3Vu'@;
put 'dENvbHMoKSxoPVtdO2xldCBmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2Oyl7Y29uc3QgVD10aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxDb2x1bW4oZik7aC5wdXNoKFQpLHYtPTEsZis9MX1yZXR1cm4gaH1jbGVhcigpe2ZvcihsZXQgbD0wO2w8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJv'@;
put 'd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmluc3RhbmNlLmNvdW50Q29scygpO2ErKyl0aGlzLnNldChsLHRoaXMuY29sVG9Qcm9wKGEpLCIiKX1nZXRMZW5ndGgoKXtjb25zdCBsPXRoaXMudGFibGVNZXRhLm1heFJvd3M7bGV0IGE7YT1sPDB8fDA9PT1sPzA6bHx8MS8wO2NvbnN0IGQ9'@;
put 'dGhpcy5pbnN0YW5jZS5yb3dJbmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpO3JldHVybiBNYXRoLm1pbihkLGEpfWdldEFsbCgpe2NvbnN0IGw9e3JvdzowLGNvbDowfSxhPXtyb3c6TWF0aC5tYXgodGhpcy5pbnN0YW5jZS5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRo'@;
put 'Lm1heCh0aGlzLmluc3RhbmNlLmNvdW50Q29scygpLTEsMCl9O3JldHVybiBsLnJvdy1hLnJvdyE9MHx8dGhpcy5pbnN0YW5jZS5jb3VudFNvdXJjZVJvd3MoKT90aGlzLmdldFJhbmdlKGwsYSxDOS5ERVNUSU5BVElPTl9SRU5ERVJFUik6W119Y291bnRDYWNoZWRDb2x1bW5zKCl7cmV0dXJu'@;
put 'IHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RofWdldFJhbmdlKGwsYSxkKXtjb25zdCBoPVtdO2xldCBmLHYsVDtjb25zdCBZPXRoaXMudGFibGVNZXRhLm1heFJvd3MscmU9dGhpcy50YWJsZU1ldGEubWF4Q29scztpZigwPT09WXx8MD09PXJlKXJldHVybltdO2NvbnN0IGZlPWQ9PT1DOS5E'@;
put 'RVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsX2U9TWF0aC5taW4oTWF0aC5tYXgoWS0xLDApLE1hdGgubWF4KGwucm93LGEucm93KSksa2U9TWF0aC5taW4oTWF0aC5tYXgocmUtMSwwKSxNYXRoLm1heChsLmNvbCxhLmNvbCkpO2Zvcihm'@;
put 'PU1hdGgubWluKGwucm93LGEucm93KTtmPD1fZTtmKyspe1Q9W107Y29uc3QgV2U9Zj49MD90aGlzLmluc3RhbmNlLnRvUGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNvbCxhLmNvbCk7djw9a2UmJm51bGwhPT1XZTt2KyspVC5wdXNoKGZlLmNhbGwodGhpcyxmLHRoaXMuY29s'@;
put 'VG9Qcm9wKHYpKSk7bnVsbCE9PVdlJiZoLnB1c2goVCl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBUdyh0aGlzLmdldFJhbmdlKGwsYSxDOS5ERVNUSU5BVElPTl9SRU5ERVJFUikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBUdyh0aGlzLmdldFJhbmdlKGwsYSxDOS5ERVNU'@;
put 'SU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaW5zdGFuY2U9bnVsbCx0aGlzLm1ldGFNYW5hZ2VyPW51bGwsdGhpcy5kYXRhU291cmNlPW51bGwsdGhpcy5kdWNrU2NoZW1hPW51bGwsdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGg9MCx0aGlzLnByb3BUb0Nv'@;
put 'bENhY2hlLmNsZWFyKCksdGhpcy5wcm9wVG9Db2xDYWNoZT12b2lkIDB9fWNvbnN0IGZOZT1DOTtmdW5jdGlvbiB5c2UoYyxsLGEsZCl7Y29uc3R7aG90SW5zdGFuY2U6aCxkYXRhTWFwOmYsZGF0YVNvdXJjZTp2LGludGVybmFsU291cmNlOlQsc291cmNlOlksbWV0YU1hbmFnZXI6cmUsZmly'@;
put 'c3RSdW46ZmV9PWQsX2U9YTAoVCksa2U9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShrZS5kYXRhU2NoZW1hKT8iYXJyYXkiOm9sKGtlLmRhdGFTY2hlbWEpPyJmdW5jdGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke19l'@;
put 'fWAsYyxmZSxZKTtjb25zdCBXZT1uZXcgZk5lKGgsYyxyZSk7aWYobChXZSksIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09YyljLnB1c2gmJmMuc3BsaWNlfHwoYz1bY10pO2Vsc2V7aWYobnVsbCE9PWMpdGhyb3cgbmV3IEVycm9yKGAke1R9IG9ubHkgYWNjZXB0cyBhcnJheSBvZiBvYmpl'@;
put 'Y3RzIG9yIGFycmF5IG9mIGFycmF5cyAoJHt0eXBlb2YgY30gZ2l2ZW4pYCk7e2NvbnN0IEplPVdlLmdldFNjaGVtYSgpO2M9W107bGV0IHR0LHl0PTAsd3Q9MDtmb3IoeXQ9MCx3dD1rZS5zdGFydFJvd3M7eXQ8d3Q7eXQrKylpZigib2JqZWN0IiE9PWguZGF0YVR5cGUmJiJmdW5jdGlvbiIh'@;
put 'PT1oLmRhdGFUeXBlfHwha2UuZGF0YVNjaGVtYSlpZigiYXJyYXkiPT09aC5kYXRhVHlwZSl0dD1sMChKZVswXSksYy5wdXNoKHR0KTtlbHNle3R0PVtdO2ZvcihsZXQgTHQ9MCxvbj1rZS5zdGFydENvbHM7THQ8b247THQrKyl0dC5wdXNoKG51bGwpO2MucHVzaCh0dCl9ZWxzZSB0dD1sMChK'@;
put 'ZSksYy5wdXNoKHR0KX19QXJyYXkuaXNBcnJheShjWzBdKSYmKGguZGF0YVR5cGU9ImFycmF5Iiksa2UuZGF0YT1jLFdlLmRhdGFTb3VyY2U9Yyx2LmRhdGE9Yyx2LmRhdGFUeXBlPWguZGF0YVR5cGUsdi5jb2xUb1Byb3A9V2UuY29sVG9Qcm9wLmJpbmQoV2UpLHYucHJvcFRvQ29sPVdlLnBy'@;
put 'b3BUb0NvbC5iaW5kKFdlKSx2LmNvdW50Q2FjaGVkQ29sdW1ucz1XZS5jb3VudENhY2hlZENvbHVtbnMuYmluZChXZSksYShXZSksaC5ydW5Ib29rcyhgYWZ0ZXIke19lfWAsYyxmZSxZKSxmZXx8KGgucnVuSG9va3MoImFmdGVyQ2hhbmdlIixudWxsLFQpLGgucmVuZGVyKCkpfWNvbnN0IGJz'@;
put 'ZT1uZXcgTWFwKFtbIiAiLCJzcGFjZSJdLFsic3BhY2ViYXIiLCJzcGFjZSJdLFsic2Nyb2xsIiwic2Nyb2xsbG9jayJdLFsiZGVsIiwiZGVsZXRlIl0sWyJlc2MiLCJlc2NhcGUiXSxbIm1lZGlhbmV4dHRyYWNrIiwibWVkaWF0cmFja25leHQiXSxbIm1lZGlhcHJldmlvdXN0cmFjayIsIm1l'@;
put 'ZGlhdHJhY2twcmV2aW91cyJdLFsidm9sdW1ldXAiLCJhdWRpb3ZvbHVtZXVwIl0sWyJ2b2x1bWVkb3duIiwiYXVkaW92b2x1bWVkb3duIl0sWyJ2b2x1bWVtdXRlIiwiYXVkaW92b2x1bWVtdXRlIl0sWyJtdWx0aXBseSIsIioiXSxbImFkZCIsIisiXSxbImRpdmlkZSIsIi8iXSxbInN1YnRy'@;
put 'YWN0IiwiLSJdLFsibGVmdCIsImFycm93bGVmdCJdLFsicmlnaHQiLCJhcnJvd3JpZ2h0Il0sWyJ1cCIsImFycm93dXAiXSxbImRvd24iLCJhcnJvd2Rvd24iXV0pLG5EPWM9PmMubWFwKGw9Pntjb25zdCBhPWwudG9Mb3dlckNhc2UoKTtyZXR1cm4gYnNlLmhhcyhhKT9ic2UuZ2V0KGEpOmF9'@;
put 'KS5zb3J0KCkuam9pbigiKyIpLHdzZT1jPT5jLnRvTG93ZXJDYXNlKCksX05lPVsibWV0YSIsImFsdCIsInNoaWZ0IiwiY29udHJvbCJdLER3PWZ1bmN0aW9uIGdOZSgpe2NvbnN0IGM9bmV3IFNldDtyZXR1cm57cHJlc3MobCl7Yy5hZGQobCl9LHJlbGVhc2UobCl7Yy5kZWxldGUobCl9LHJl'@;
put 'bGVhc2VBbGwoKXtjLmNsZWFyKCl9LGlzUHJlc3NlZDpsPT5jLmhhcyhsKX19KCkseU5lPWM9PntsZXR7b3duZXJXaW5kb3c6bCxoYW5kbGVFdmVudDphLGJlZm9yZUtleURvd246ZCxhZnRlcktleURvd246aH09Yztjb25zdCBmPUxUKHtlcnJvcklkRXhpc3RzOldlPT5gVGhlICIke1dlfSIg'@;
put 'Y29udGV4dCBuYW1lIGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gfSk7bGV0IHY9ImdyaWQiO2NvbnN0IFk9KCk9PnYscmU9V2U9PmYuZ2V0SXRlbShXZSk7bGV0IF9lPSExO2NvbnN0IGtlPWZ1bmN0aW9uIHZOZShjLGwsYSxkLGgpe2NvbnN0IGY9a2U9Pl9OZS5pbmNsdWRlcyhrZSksdj1mdW5j'@;
put 'dGlvbihrZSl7bGV0IFdlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgSmU9W107cmV0dXJuIGtlLmFsdEtleSYmSmUucHVzaCgiYWx0IiksV2UmJihrZS5jdHJsS2V5fHxrZS5tZXRhS2V5KT9KZS5wdXNoKCJjb250cm9sL21l'@;
put 'dGEiKTooa2UuY3RybEtleSYmSmUucHVzaCgiY29udHJvbCIpLGtlLm1ldGFLZXkmJkplLnB1c2goIm1ldGEiKSksa2Uuc2hpZnRLZXkmJkplLnB1c2goInNoaWZ0IiksSmV9LFQ9a2U9PntpZighMT09PWwoa2UpKXJldHVybjtjb25zdCBXZT1hKGtlKTtpZigyMjk9PT1rZS5rZXlDb2RlfHwh'@;
put 'MT09PVdlfHxqZyhrZSkpcmV0dXJuO2NvbnN0IEplPXdzZShrZS5rZXkpO2xldCB0dD1bXTtmKEplKT9Edy5wcmVzcyhKZSk6dHQ9dihrZSk7Y29uc3QgeXQ9W0plXS5jb25jYXQodHQpOyFoKGtlLHl0KSYmKHhUKCkmJnR0LmluY2x1ZGVzKCJtZXRhIil8fCF4VCgpJiZ0dC5pbmNsdWRlcygi'@;
put 'Y29udHJvbCIpKSYmaChrZSxbSmVdLmNvbmNhdCh2KGtlLCEwKSkpLGQoa2UpfSxZPWtlPT57aWYoITE9PT1sKGtlKSlyZXR1cm47Y29uc3QgV2U9d3NlKGtlLmtleSk7ITEhPT1mKFdlKSYmRHcucmVsZWFzZShXZSl9LHJlPSgpPT57RHcucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9'@;
put 'PntsZXQga2U9Yztmb3IoO2tlOylrZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsVCksa2UuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIixZKSxrZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRk'@;
put 'RXZlbnRMaXN0ZW5lcigiYmx1ciIscmUpLGtlPXN3KGtlKX0sdW5tb3VudDooKT0+e2xldCBrZT1jO2Zvcig7a2U7KWtlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJrZXlkb3duIixUKSxrZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZl'@;
put 'bnRMaXN0ZW5lcigia2V5dXAiLFkpLGtlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJibHVyIixyZSksa2U9c3coa2UpfSxpc1ByZXNzZWQ6a2U9PkR3LmlzUHJlc3NlZChrZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5Edy5yZWxlYXNlQWxsKCl9fShs'@;
put 'LGEsZCxoLChXZSxKZSk9Pntjb25zdCB0dD1yZShZKCkpO2xldCB5dD0hMTtpZighdHQuaGFzU2hvcnRjdXQoSmUpKXJldHVybiB5dDtjb25zdCB3dD10dC5nZXRTaG9ydGN1dHMoSmUpO2ZvcihsZXQgTHQ9MDtMdDx3dC5sZW5ndGg7THQrKyl7Y29uc3R7Y2FsbGJhY2s6b24scnVuT25seUlm'@;
put 'OnNuLHByZXZlbnREZWZhdWx0Ok1uLHN0b3BQcm9wYWdhdGlvbjpWbixjYXB0dXJlQ3RybDp1cn09d3RbTHRdO2lmKCExIT09c24oV2UpJiYoX2U9dXIseXQ9ITE9PT1vbihXZSxKZSksX2U9ITEsTW4mJldlLnByZXZlbnREZWZhdWx0KCksVm4mJldlLnN0b3BQcm9wYWdhdGlvbigpLHl0KSli'@;
put 'cmVha31yZXR1cm4geXR9KTtyZXR1cm4ga2UubW91bnQoKSx7YWRkQ29udGV4dDpXZT0+e2NvbnN0IEplPShjPT57Y29uc3QgbD1MVCh7ZXJyb3JJZEV4aXN0czpZPT5gVGhlICIke1l9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxh'@;
put 'PWZ1bmN0aW9uKCl7bGV0e2tleXM6WSxjYWxsYmFjazpyZSxncm91cDpmZSxydW5Pbmx5SWY6X2U9KCgpPT4hMCksY2FwdHVyZUN0cmw6a2U9ITEscHJldmVudERlZmF1bHQ6V2U9ITAsc3RvcFByb3BhZ2F0aW9uOkplPSExLHJlbGF0aXZlVG9Hcm91cDp0dCxwb3NpdGlvbjp5dH09YXJndW1l'@;
put 'bnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKGlsKGZlKSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVkIHRvIGRlZmluZSB0aGUgc2hvcnRjdXQncyBncm91cC4iKTtpZighMT09PW9sKHJlKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1'@;
put 'dCdzIGNhbGxiYWNrIG5lZWRzIHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0FycmF5KFkpKXRocm93IG5ldyBFcnJvcihXYWBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50'@;
put 'LmtleSBwcm9wZXJ0aWVzOlx4MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3Qgd3Q9e2NhbGxiYWNrOnJlLGdyb3VwOmZlLHJ1bk9ubHlJZjpfZSxjYXB0dXJlQ3RybDpr'@;
put 'ZSxwcmV2ZW50RGVmYXVsdDpXZSxzdG9wUHJvcGFnYXRpb246SmV9O2VvKHR0KSYmKFt3dC5yZWxhdGl2ZVRvR3JvdXAsd3QucG9zaXRpb25dPVt0dCx5dF0pLFkuZm9yRWFjaChMdD0+e2NvbnN0IG9uPW5EKEx0KTtpZihsLmhhc0l0ZW0ob24pKXtjb25zdCBNbj1sLmdldEl0ZW0ob24pO2xl'@;
put 'dCBWbj1Nbi5maW5kSW5kZXgodXI9PnVyLmdyb3VwPT09dHQpOy0xIT09Vm4/ImJlZm9yZSI9PT15dD9Wbi09MTpWbis9MTpWbj1Nbi5sZW5ndGgsTW4uc3BsaWNlKFZuLDAsd3QpfWVsc2UgbC5hZGRJdGVtKG9uLFt3dF0pfSl9LGg9WT0+e2NvbnN0IHJlPW5EKFkpO2wucmVtb3ZlSXRlbShy'@;
put 'ZSl9O3JldHVybnthZGRTaG9ydGN1dDphLGFkZFNob3J0Y3V0czpmdW5jdGlvbihZKXtsZXQgcmU9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1kuZm9yRWFjaChmZT0+e3lzKHJlLChfZSxrZSk9PnshMT09PU9iamVjdC5wcm90b3R5'@;
put 'cGUuaGFzT3duUHJvcGVydHkuY2FsbChmZSxrZSkmJihmZVtrZV09cmVba2VdKX0pLGEoZmUpfSl9LGdldFNob3J0Y3V0czpZPT57Y29uc3QgcmU9bkQoWSksZmU9bC5nZXRJdGVtKHJlKTtyZXR1cm4gZW8oZmUpP2ZlLnNsaWNlKCk6W119LGhhc1Nob3J0Y3V0Olk9Pntjb25zdCByZT1uRChZ'@;
put 'KTtyZXR1cm4gbC5oYXNJdGVtKHJlKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpZPT57bC5nZXRJdGVtcygpLmZvckVhY2goZmU9PntsZXRbX2Usa2VdPWZlO2NvbnN0IFdlPWtlLmZpbHRlcihKZT0+SmUuZ3JvdXAhPT1ZKTswPT09V2UubGVuZ3Ro'@;
put 'P2goKGM9PmMuc3BsaXQoIisiKSkoX2UpKTooa2UubGVuZ3RoPTAsa2UucHVzaCguLi5XZSkpfSl9fX0pKFdlKTtyZXR1cm4gZi5hZGRJdGVtKFdlLEplKSxKZX0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6WSxnZXRDb250ZXh0OnJlLHNldEFjdGl2ZUNvbnRleHROYW1lOldlPT57dj1XZX0saXND'@;
put 'dHJsUHJlc3NlZDooKT0+IV9lJiYoa2UuaXNQcmVzc2VkKCJjb250cm9sIil8fGtlLmlzUHJlc3NlZCgibWV0YSIpKSxyZWxlYXNlUHJlc3NlZEtleXM6KCk9PmtlLnJlbGVhc2VQcmVzc2VkS2V5cygpLGRlc3Ryb3k6KCk9PmtlLnVubW91bnQoKX19LGJOZT0iZ3JpZERlZmF1bHQiO2xldCB4'@;
put 'WT1udWxsO2Z1bmN0aW9uIGtZKGMsbCl7dmFyIGE7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxoPSExLGY9dGhpcztjb25zdCB2PW5ldyBqbChmKTtsZXQgVCxZLHJlLGZlLF9lPSEwOyhmdW5jdGlvbiBBRmUoYyl7cmV0dXJu'@;
put 'IGM9PT1Gan0pKGQpJiZmdW5jdGlvbiBERmUoYyl7am9lLnNldChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcsdGhpcy5pc0Rlc3Ryb3ll'@;
put 'ZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBrZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixXZT1bInJ0bCIsImx0ciJdLmluY2x1ZGVzKGtlKT9rZTp0'@;
put 'aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIsV2UpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PVdlfSx0aGlzLmlzTHRyPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gYkhlKGMpe2xldCBsPW5zZShjKTtyZXR1cm4gdlkobCl8fChsPV9ZLHJzZShjKSksbH0obC5sYW5ndWFnZSk7Y29uc3QgSmU9'@;
put 'bmV3IGdzZShmLGwsW2NOZSx1TmVdKSx0dD1KZS5nZXRUYWJsZU1ldGEoKSx5dD1KZS5nZXRHbG9iYWxNZXRhKCksd3Q9TFQoKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJlbmRlckNhbGw9ITEsYy5pbnNlcnRCZWZvcmUodGhp'@;
put 'cy5jb250YWluZXIsYy5maXJzdENoaWxkKSxIaih0aGlzKSYmUGllKGwubGljZW5zZUtleSxjKSx0aGlzLmd1aWQ9YGh0XyR7QlYoKX1gLHRoaXMuY29sdW1uSW5kZXhNYXBwZXI9bmV3IFhqLHRoaXMucm93SW5kZXhNYXBwZXI9bmV3IFhqLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9j'@;
put 'YWxIb29rKCJpbmRleGVzU2VxdWVuY2VDaGFuZ2UiLGd0PT57Zi5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsZ3QpfSksdGhpcy5yb3dJbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsZ3Q9PntmLnJ1bkhvb2tzKCJhZnRlclJvd1Nl'@;
put 'cXVlbmNlQ2hhbmdlIixndCl9KSxZPW5ldyB6RmUoZiksKCF0aGlzLnJvb3RFbGVtZW50LmlkfHwiaHRfIj09PXRoaXMucm9vdEVsZW1lbnQuaWQuc3Vic3RyaW5nKDAsMykpJiYodGhpcy5yb290RWxlbWVudC5pZD10aGlzLmd1aWQpO2NvbnN0IEx0PWd0PT57Y29uc3R7cm93Ok90LGNvbDpj'@;
put 'bn09Z3Q7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE90KTpPdCxjbj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoY24pOmNuKX07bGV0IHNuPW5l'@;
put 'dyBYSGUodHQse3Jvd0luZGV4TWFwcGVyOigpPT5mLnJvd0luZGV4TWFwcGVyLGNvbHVtbkluZGV4TWFwcGVyOigpPT5mLmNvbHVtbkluZGV4TWFwcGVyLGNvdW50Q29sczooKT0+Zi5jb3VudENvbHMoKSxjb3VudFJvd3M6KCk9PmYuY291bnRSb3dzKCkscHJvcFRvQ29sOmd0PT5ULnByb3BU'@;
put 'b0NvbChndCksaXNFZGl0b3JPcGVuZWQ6KCk9PiEhZi5nZXRBY3RpdmVFZGl0b3IoKSYmZi5nZXRBY3RpdmVFZGl0b3IoKS5pc09wZW5lZCgpLGNvdW50Q29sc1RyYW5zbGF0ZWQ6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zKCksY291bnRSb3dzVHJhbnNsYXRlZDooKT0+'@;
put 'dGhpcy52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3MoKSxnZXRTaG9ydGN1dE1hbmFnZXI6KCk9PmYuZ2V0U2hvcnRjdXRNYW5hZ2VyKCksY3JlYXRlQ2VsbENvb3JkczooZ3QsT3QpPT5mLl9jcmVhdGVDZWxsQ29vcmRzKGd0LE90KSxjcmVhdGVDZWxsUmFuZ2U6KGd0LE90LGNuKT0+Zi5fY3Jl'@;
put 'YXRlQ2VsbFJhbmdlKGd0LE90LGNuKSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6THQscmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRzOmd0PT57Y29uc3R7cm93Ok90LGNvbDpjbn09Z3Q7cmV0dXJuIGYuX2NyZWF0ZUNlbGxDb29yZHMoT3Q+PTA/Zi5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxG'@;
put 'cm9tUmVuZGVyYWJsZUluZGV4KE90KTpPdCxjbj49MD9mLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoY24pOmNuKX0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KGd0LE90KT0+Zi5nZXRDZWxsTWV0YShndCxPdCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlv'@;
put 'bn0pO3RoaXMuc2VsZWN0aW9uPXNuO2NvbnN0IE1uPWd0PT57bGV0e2hpZGRlbkluZGV4ZXNDaGFuZ2VkOk90fT1ndDtPdCYmdGhpcy5zZWxlY3Rpb24ucmVmcmVzaCgpfTtmdW5jdGlvbiBWbihndCl7Y29uc3QgT3Q9bnNlKGd0KTt2WShPdCk/KGYucnVuSG9va3MoImJlZm9yZUxhbmd1YWdl'@;
put 'Q2hhbmdlIixPdCkseXQubGFuZ3VhZ2U9T3QsZi5ydW5Ib29rcygiYWZ0ZXJMYW5ndWFnZUNoYW5nZSIsT3QpKTpyc2UoZ3QpfWZ1bmN0aW9uIHVyKGd0LE90KXtjb25zdCBjbj0iY2xhc3NOYW1lIj09PWd0P2Yucm9vdEVsZW1lbnQ6Zi50YWJsZTtpZihfZSl3aShjbixPdCk7ZWxzZXtsZXQg'@;
put 'Tm49W10seG49W107eXRbZ3RdJiYoTm49QXJyYXkuaXNBcnJheSh5dFtndF0pP3l0W2d0XTpWVih5dFtndF0pKSxPdCYmKHhuPUFycmF5LmlzQXJyYXkoT3QpP090OlZWKE90KSk7Y29uc3QgS249TlYoTm4seG4pLFByPU5WKHhuLE5uKTtLbi5sZW5ndGgmJnNzKGNuLEtuKSxQci5sZW5ndGgm'@;
put 'JndpKGNuLFByKX15dFtndF09T3R9ZnVuY3Rpb24gVHIoKXtsZXQgZ3Q9ITE7cmV0dXJue3ZhbGlkYXRvcnNJblF1ZXVlOjAsdmFsaWQ6ITAsYWRkVmFsaWRhdG9yVG9RdWV1ZSgpe3RoaXMudmFsaWRhdG9yc0luUXVldWUrPTEsZ3Q9ITF9LHJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpe3Ro'@;
put 'aXMudmFsaWRhdG9yc0luUXVldWU9dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xPDA/MDp0aGlzLnZhbGlkYXRvcnNJblF1ZXVlLTEsdGhpcy5jaGVja0lmUXVldWVJc0VtcHR5KCl9LG9uUXVldWVFbXB0eSgpe30sY2hlY2tJZlF1ZXVlSXNFbXB0eSgpezA9PT10aGlzLnZhbGlkYXRvcnNJblF1'@;
put 'ZXVlJiYhMT09PWd0JiYoZ3Q9ITAsdGhpcy5vblF1ZXVlRW1wdHkodGhpcy52YWxpZCkpfX19ZnVuY3Rpb24gUGkoZ3Qpe2NvbnN0IE90PWd0LnJlcGxhY2UoIiwiLCIuIik7cmV0dXJuITE9PT1pc05hTihwYXJzZUZsb2F0KE90KSk/cGFyc2VGbG9hdChPdCk6Z3R9ZnVuY3Rpb24gSGkoZ3Qs'@;
put 'T3QsY24pe2lmKCFndC5sZW5ndGgpcmV0dXJuO2NvbnN0IE5uPWYuZ2V0QWN0aXZlRWRpdG9yKCkseG49bmV3IFRyO2xldCBLbj0hMDt4bi5vblF1ZXVlRW1wdHk9UHI9PntObiYmS24mJk5uLmNhbmNlbENoYW5nZXMoKSxjbihQcil9O2ZvcihsZXQgUHI9Z3QubGVuZ3RoLTE7UHI+PTA7UHIt'@;
put 'LSl7Y29uc3RbanIsUXIsLG5pXT1ndFtQcl0sS3I9VC5wcm9wVG9Db2woUXIpLGpvPWYuZ2V0Q2VsbE1ldGEoanIsS3IpOyJudW1lcmljIj09PWpvLnR5cGUmJiJzdHJpbmciPT10eXBlb2YgbmkmJnVvZShuaSkmJihndFtQcl1bM109UGkobmkpKSxmLmdldENlbGxWYWxpZGF0b3Ioam8pJiYo'@;
put 'eG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKGd0W1ByXVszXSxqbyxmdW5jdGlvbihUcyxxbyl7cmV0dXJuIGZ1bmN0aW9uKHNsKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBzbCl0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9v'@;
put 'bGVhbiIpO2lmKCExPT09c2wmJiExPT09cW8uYWxsb3dJbnZhbGlkKXtLbj0hMSxndC5zcGxpY2UoVHMsMSkscW8udmFsaWQ9ITA7Y29uc3QgSWE9Zi5nZXRDZWxsKHFvLnZpc3VhbFJvdyxxby52aXN1YWxDb2wpO251bGwhPT1JYSYmc3MoSWEsdHQuaW52YWxpZENlbGxDbGFzc05hbWUpfXhu'@;
put 'LnJlbW92ZVZhbGlkYXRvckZvcm1RdWV1ZSgpfX0oUHIsam8pLE90KSl9eG4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfWZ1bmN0aW9uIHdyKGd0LE90KXtsZXQgY249Z3QubGVuZ3RoLTE7aWYoY248MClyZXR1cm47Zm9yKDtjbj49MDtjbi0tKXtsZXQgeG49ITE7aWYobnVsbCE9PWd0W2NuXSl7'@;
put 'aWYobnVsbCE9Z3RbY25dWzJdfHxudWxsIT1ndFtjbl1bM10pe2lmKHR0LmFsbG93SW5zZXJ0Um93KWZvcig7Z3RbY25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOktufT1ULmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6T3R9KTtpZigwPT09S24pe3huPSEwO2Jy'@;
put 'ZWFrfX1pZigiYXJyYXkiPT09Zi5kYXRhVHlwZSYmKCF0dC5jb2x1bW5zfHwwPT09dHQuY29sdW1ucy5sZW5ndGgpJiZ0dC5hbGxvd0luc2VydENvbHVtbilmb3IoO1QucHJvcFRvQ29sKGd0W2NuXVsxXSk+Zi5jb3VudENvbHMoKS0xOyl7Y29uc3R7ZGVsdGE6S259PVQuY3JlYXRlQ29sKHZv'@;
put 'aWQgMCx2b2lkIDAse3NvdXJjZTpPdH0pO2lmKDA9PT1Lbil7eG49ITA7YnJlYWt9fXhufHxULnNldChndFtjbl1bMF0sZ3RbY25dWzFdLGd0W2NuXVszXSl9fWVsc2UgZ3Quc3BsaWNlKGNuLDEpfWYuZm9yY2VGdWxsUmVuZGVyPSEwLHJlLmFkanVzdFJvd3NBbmRDb2xzKCksZi5ydW5Ib29r'@;
put 'cygiYmVmb3JlQ2hhbmdlUmVuZGVyIixndCxPdCksZmUubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGZlLnVubG9ja0VkaXRvcigpLGYudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSxmLnJ1bkhvb2tzKCJhZnRlckNoYW5nZSIsZ3QsT3R8fCJlZGl0Iik7Y29uc3QgTm49'@;
put 'Zi5nZXRBY3RpdmVFZGl0b3IoKTtObiYmZW8oTm4ucmVmcmVzaFZhbHVlKSYmTm4ucmVmcmVzaFZhbHVlKCl9ZnVuY3Rpb24gYWkoZ3QsT3QsY24pe3JldHVybiBBcnJheS5pc0FycmF5KGd0KT9ndDpbW2d0LE90LGNuXV19ZnVuY3Rpb24gdGkoZ3QsT3Qpe2NvbnN0IGNuPWYuZ2V0QWN0aXZl'@;
put 'RWRpdG9yKCksTm49Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlIixndCxPdHx8ImVkaXQiKSx4bj1ndC5maWx0ZXIoS249Pm51bGwhPT1Lbik7cmV0dXJuITE9PT1Obnx8MD09PXhuLmxlbmd0aD8oY24mJmNuLmNhbmNlbENoYW5nZXMoKSxbXSk6eG59dGhpcy5jb2x1bW5JbmRleE1hcHBlci5h'@;
put 'ZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsTW4pLHRoaXMucm93SW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLE1uKSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldFJhbmdlU3RhcnQiLGd0PT57dGhpcy5ydW5Ib29rcygiYmVmb3JlU2V0UmFu'@;
put 'Z2VTdGFydCIsZ3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZ3Q9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZ3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVu'@;
put 'ZCIsZ3Q9Pnt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVTZXRSYW5nZUVuZCIsZ3QpLGd0LnJvdzwwJiYoZ3Qucm93PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRGaXJzdFZpc2libGVSb3coKSksZ3QuY29sPDAmJihndC5jb2w9dGhpcy52aWV3Ll93dC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNv'@;
put 'bHVtbigpKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRSYW5nZUVuZCIsZ3Q9Pntjb25zdCBPdD1WZyghMSksY249dGhpcy5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpLHtmcm9tOk5uLHRvOnhufT1jbi5jdXJyZW50KCksS249Y24uc2l6ZSgpLTE7dGhpcy5y'@;
put 'dW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb24iLE5uLnJvdyxObi5jb2wseG4ucm93LHhuLmNvbCxPdCxLbiksdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLE5uLnJvdyxmLmNvbFRvUHJvcChObi5jb2wpLHhuLnJvdyxmLmNvbFRvUHJvcCh4bi5jb2wpLE90LEtuKTtjb25zdCBQ'@;
put 'cj10aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlBbnlIZWFkZXIoKSxqcj10aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtsZXQgUXI9ITA7aCYmKFFyPSExKSxPdC5pc1RvdWNoZWQoKSYmKFFyPSFPdC52YWx1ZSk7Y29uc3Qgbmk9dGhpcy5zZWxlY3Rpb24uaXNTZWxl'@;
put 'Y3RlZEJ5Um93SGVhZGVyKCksS3I9dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7ITEhPT1RciYmKFByP25pP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoZi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGd0LnJv'@;
put 'dykpOktyJiZ0aGlzLnZpZXcuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkoZi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGd0LmNvbCkpOmpyJiYhdGhpcy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpP3RoaXMudmlldy5zY3JvbGxWaWV3cG9ydChMdChq'@;
put 'ci5mcm9tKSk6dGhpcy52aWV3LnNjcm9sbFZpZXdwb3J0KEx0KGd0KSkpLG5pJiZLcj93aSh0aGlzLnJvb3RFbGVtZW50LFsiaHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSk6bmk/KHNzKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLWNvbHVt'@;
put 'bnMiKSx3aSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIikpOktyPyhzcyh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1yb3dzIiksd2kodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpKTpzcyh0aGlzLnJvb3RFbGVtZW50LFsi'@;
put 'aHRfX3NlbGVjdGlvbi0tcm93cyIsImh0X19zZWxlY3Rpb24tLWNvbHVtbnMiXSksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLGd0PT57Y29uc3QgT3Q9Z3QubGVuZ3RoLTEse2Zyb206Y24s'@;
put 'dG86Tm59PWd0W090XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZCIsY24ucm93LGNuLmNvbCxObi5yb3csTm4uY29sLE90KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJvcCIsY24ucm93LGYuY29sVG9Qcm9wKGNuLmNvbCksTm4ucm93LGYuY29sVG9Qcm9w'@;
put 'KE5uLmNvbCksT3QpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGd0PT57Y29uc3QgT3Q9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixndC52YWx1ZSk7Z3QudmFsdWUmJihndC52YWx1ZT1PdCl9KSx0aGlz'@;
put 'LnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybVN0YXJ0IixndD0+e3RoaXMucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixndCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLChndCxPdCxj'@;
put 'bik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixndCxPdCxjbil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZ3Q9Pnt0aGlzLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGd0KX0pLHRoaXMu'@;
put 'c2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLChndCxPdCxjbik9Pnt0aGlzLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZ3QsT3QsY24pfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckRlc2VsZWN0IiwoKT0+e2Zl'@;
put 'LmRlc3Ryb3lFZGl0b3IoKSx0aGlzLl9yZWZyZXNoQm9yZGVycygpLHNzKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKSx0aGlzLnJ1bkhvb2tzKCJhZnRlckRlc2VsZWN0Iil9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2Nh'@;
put 'bEhvb2soImluc2VydFJvd1JlcXVpcmUiLGd0PT57dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19hYm92ZSIsZ3QsMSwiYXV0byIpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixndD0+e3RoaXMuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLGd0LDEsImF1'@;
put 'dG8iKX0pLHJlPXthbHRlcihndCxPdCl7dmFyIGNuLE5uO2xldCB4bj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxLbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCxQcj1hcmd1bWVudHMubGVuZ3RoPjQ/YXJn'@;
put 'dW1lbnRzWzRdOnZvaWQgMDtjb25zdCBqcj1Rcj0+e2lmKDA9PT1Rci5sZW5ndGgpcmV0dXJuW107Y29uc3Qgbmk9Wy4uLlFyXTtyZXR1cm4gbmkuc29ydCgoam8sVHMpPT57bGV0W3FvXT1qbyxbc2xdPVRzO3JldHVybiBxbz09PXNsPzA6cW8+c2w/MTotMX0pLHNjKG5pLChqbyxUcyk9Pnts'@;
put 'ZXRbcW8sc2xdPVRzO2NvbnN0IElhPWpvW2pvLmxlbmd0aC0xXSxbZ28sJG9dPUlhLEhvPWdvKyRvO2lmKHFvPD1Ibyl7Y29uc3QgVnQ9TWF0aC5tYXgoc2wtKEhvLXFvKSwwKTtJYVsxXSs9VnR9ZWxzZSBqby5wdXNoKFtxbyxzbF0pO3JldHVybiBqb30sW25pWzBdXSl9O3N3aXRjaChndCl7'@;
put 'Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IFFyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYodHQubWF4Um93cz09PVFyKXJldHVybjtjb25zdCBuaT0iaW5zZXJ0X3Jvd19iZWxvdyI9PT1ndD8iYmVsb3ciOiJhYm92ZSI7T3Q9bnVsbCE9PShjbj1P'@;
put 'dCkmJnZvaWQgMCE9PWNuP2NuOiJiZWxvdyI9PT1uaT9RcjowO2NvbnN0e2RlbHRhOktyLHN0YXJ0UGh5c2ljYWxJbmRleDpqb309VC5jcmVhdGVSb3coT3QseG4se3NvdXJjZTpLbixtb2RlOm5pfSk7aWYoS3Ipe2NvbnN0ICRvPXNuLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLEhvPSRvPy5m'@;
put 'cm9tLFZ0PUhvPy5yb3csZHM9Zi50b1Zpc3VhbFJvdyhqbyk7aWYoc24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RBbGwoKTtlbHNlIGlmKGVvKFZ0KSYmVnQ+PWRzKXtjb25zdHtyb3c6eW8sY29sOmNjfT0kby50bztsZXQgUmE9SG8uY29sO3NuLmlzU2VsZWN0ZWRCeVJvd0hlYWRl'@;
put 'cigpJiYoUmE9LTEpLHNuLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxzbi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVhdGVDZWxsQ29vcmRzKFZ0K0tyLFJhKSwhMCksc24uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh5bytLcixjYykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMo'@;
put 'KX1icmVhaztjYXNlImluc2VydF9jb2xfc3RhcnQiOmNhc2UiaW5zZXJ0X2NvbF9lbmQiOmNvbnN0IFRzPSJpbnNlcnRfY29sX2VuZCI9PT1ndD8iZW5kIjoic3RhcnQiO090PW51bGwhPT0oTm49T3QpJiZ2b2lkIDAhPT1Obj9ObjoiZW5kIj09PVRzP2YuY291bnRTb3VyY2VDb2xzKCk6MDtj'@;
put 'b25zdHtkZWx0YTpxbyxzdGFydFBoeXNpY2FsSW5kZXg6c2x9PVQuY3JlYXRlQ29sKE90LHhuLHtzb3VyY2U6S24sbW9kZTpUc30pO2lmKHFvKXtpZihBcnJheS5pc0FycmF5KHR0LmNvbEhlYWRlcnMpKXtjb25zdCB5bz1bZi50b1Zpc3VhbENvbHVtbihzbCksMF07eW8ubGVuZ3RoKz1xbyxB'@;
put 'cnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHR0LmNvbEhlYWRlcnMseW8pfWNvbnN0ICRvPXNuLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLEhvPSRvPy5mcm9tLFZ0PUhvPy5jb2wsZHM9Zi50b1Zpc3VhbENvbHVtbihzbCk7aWYoc24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpZi5zZWxlY3RB'@;
put 'bGwoKTtlbHNlIGlmKGVvKFZ0KSYmVnQ+PWRzKXtjb25zdHtyb3c6eW8sY29sOmNjfT0kby50bztsZXQgUmE9SG8ucm93O3NuLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYoUmE9LTEpLHNuLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKSxzbi5zZXRSYW5nZVN0YXJ0T25seShmLl9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKFJhLFZ0K3FvKSwhMCksc24uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh5byxjYytxbykpfWVsc2UgZi5fcmVmcmVzaEJvcmRlcnMoKX1icmVhaztjYXNlInJlbW92ZV9yb3ciOmNvbnN0IElhPSRvPT57bGV0IEhvPTA7Um4oJG8sVnQ9PntsZXRbZHMseW9d'@;
put 'PVZ0O2NvbnN0IGNjPXFjKGRzKT9mLmNvdW50Um93cygpLTE6TWF0aC5tYXgoZHMtSG8sMCk7aWYoTnVtYmVyLmlzSW50ZWdlcihkcykmJihkcz1NYXRoLm1heChkcy1IbywwKSksIVQucmVtb3ZlUm93KGRzLHlvLEtuKSlyZXR1cm47Y29uc3QgcGg9Zi5jb3VudFJvd3MoKSxOMD10dC5maXhl'@;
put 'ZFJvd3NUb3A7TjA+PWNjKzEmJih0dC5maXhlZFJvd3NUb3AtPU1hdGgubWluKHlvLE4wLWNjKSk7Y29uc3QgcHU9dHQuZml4ZWRSb3dzQm90dG9tO3B1JiZjYz49cGgtcHUmJih0dC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKHlvLHB1KSksSG8rPXlvfSl9O0FycmF5LmlzQXJyYXkoT3Qp'@;
put 'P0lhKGpyKE90KSk6SWEoW1tPdCx4bl1dKSxyZS5hZGp1c3RSb3dzQW5kQ29scygpLGYuX3JlZnJlc2hCb3JkZXJzKCk7YnJlYWs7Y2FzZSJyZW1vdmVfY29sIjpjb25zdCBnbz0kbz0+e2xldCBIbz0wO1JuKCRvLFZ0PT57bGV0W2RzLHlvXT1WdDtjb25zdCBjYz1xYyhkcyk/Zi5jb3VudENv'@;
put 'bHMoKS0xOk1hdGgubWF4KGRzLUhvLDApO2xldCBSYT1mLnRvUGh5c2ljYWxDb2x1bW4oY2MpO2lmKE51bWJlci5pc0ludGVnZXIoZHMpJiYoZHM9TWF0aC5tYXgoZHMtSG8sMCkpLCFULnJlbW92ZUNvbChkcyx5byxLbikpcmV0dXJuO2NvbnN0IE4wPXR0LmZpeGVkQ29sdW1uc1N0YXJ0O04w'@;
put 'Pj1jYysxJiYodHQuZml4ZWRDb2x1bW5zU3RhcnQtPU1hdGgubWluKHlvLE4wLWNjKSksQXJyYXkuaXNBcnJheSh0dC5jb2xIZWFkZXJzKSYmKHR5cGVvZiBSYT4idSImJihSYT0tMSksdHQuY29sSGVhZGVycy5zcGxpY2UoUmEseW8pKSxIbys9eW99KX07QXJyYXkuaXNBcnJheShPdCk/Z28o'@;
put 'anIoT3QpKTpnbyhbW090LHhuXV0pLHJlLmFkanVzdFJvd3NBbmRDb2xzKCksZi5fcmVmcmVzaEJvcmRlcnMoKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgbm8gc3VjaCBhY3Rpb24gIiR7Z3R9ImApfVByfHxyZS5hZGp1c3RSb3dzQW5kQ29scygpfSxhZGp1c3RS'@;
put 'b3dzQW5kQ29scygpe2NvbnN0IGd0PXR0Lm1pblJvd3MsT3Q9dHQubWluU3BhcmVSb3dzLGNuPXR0Lm1pbkNvbHMsTm49dHQubWluU3BhcmVDb2xzO2lmKDA9PT1mLmNvdW50Um93cygpJiYwPT09Zi5jb3VudENvbHMoKSYmc24uZGVzZWxlY3QoKSxndCl7Y29uc3QgeG49Zi5jb3VudFJvd3Mo'@;
put 'KTt4bjxndCYmVC5jcmVhdGVSb3coeG4sZ3QteG4se3NvdXJjZToiYXV0byJ9KX1pZihPdCl7Y29uc3QgeG49Zi5jb3VudEVtcHR5Um93cyghMCk7aWYoeG48T3Qpe2NvbnN0IFByPU1hdGgubWluKE90LXhuLHR0Lm1heFJvd3MtZi5jb3VudFNvdXJjZVJvd3MoKSk7VC5jcmVhdGVSb3coZi5j'@;
put 'b3VudFJvd3MoKSxQcix7c291cmNlOiJhdXRvIn0pfX17bGV0IHhuOyhjbnx8Tm4pJiYoeG49Zi5jb3VudEVtcHR5Q29scyghMCkpO2xldCBLbj1mLmNvdW50Q29scygpO2lmKGNuJiYhdHQuY29sdW1ucyYmS248Y24pe2NvbnN0IFByPWNuLUtuO3huKz1QcixULmNyZWF0ZUNvbChLbixQcix7'@;
put 'c291cmNlOiJhdXRvIn0pfWlmKE5uJiYhdHQuY29sdW1ucyYmImFycmF5Ij09PWYuZGF0YVR5cGUmJnhuPE5uKXtLbj1mLmNvdW50Q29scygpO2NvbnN0IGpyPU1hdGgubWluKE5uLXhuLHR0Lm1heENvbHMtS24pO1QuY3JlYXRlQ29sKEtuLGpyLHtzb3VyY2U6ImF1dG8ifSl9fWlmKHNuLmlz'@;
put 'U2VsZWN0ZWQoKSl7Y29uc3QgeG49Zi5jb3VudFJvd3MoKSxLbj1mLmNvdW50Q29scygpO1JuKHNuLnNlbGVjdGVkUmFuZ2UsUHI9PntsZXQganI9ITEsUXI9UHIuZnJvbS5yb3csbmk9UHIuZnJvbS5jb2wsS3I9UHIudG8ucm93LGpvPVByLnRvLmNvbDtRcj54bi0xPyhRcj14bi0xLGpyPSEw'@;
put 'LEtyPlFyJiYoS3I9UXIpKTpLcj54bi0xJiYoS3I9eG4tMSxqcj0hMCxRcj5LciYmKFFyPUtyKSksbmk+S24tMT8obmk9S24tMSxqcj0hMCxqbz5uaSYmKGpvPW5pKSk6am8+S24tMSYmKGpvPUtuLTEsanI9ITAsbmk+am8mJihuaT1qbykpLGpyJiZmLnNlbGVjdENlbGwoUXIsbmksS3Isam8p'@;
put 'fSl9Zi52aWV3JiZmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LHBvcHVsYXRlRnJvbUFycmF5KGd0LE90LGNuLE5uLHhuKXtsZXQgS24sUHIsanIsUXI7Y29uc3Qgbmk9W10sS3I9e30sam89W10sVHM9Z3Qucm93LHFvPWd0LmNvbDtpZihQcj1PdC5sZW5ndGgsMD09PVByKXJldHVybiEx'@;
put 'O2xldCBzbD0wLElhPTA7c3dpdGNoKHZzKGNuKSYmKHNsPWNuLmNvbC1xbysxLElhPWNuLnJvdy1UcysxKSx4bil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBnbz1udyhPdCksJG89Z28ubGVuZ3RoLEhvPU1hdGgubWF4KCRvLHNsKSxWdD1mLmdldERhdGEoKS5zbGljZShUcyksZHM9bncoVnQp'@;
put 'LnNsaWNlKHFvLHFvK0hvKTtmb3IoanI9MDtqcjxIbztqcis9MSlpZihqcjwkbyl7Zm9yKEtuPTAsUHI9Z29banJdLmxlbmd0aDtLbjxJYS1QcjtLbis9MSlnb1tqcl0ucHVzaChnb1tqcl1bS24lUHJdKTtqby5wdXNoKGdvW2pyXS5jb25jYXQoanI8ZHMubGVuZ3RoP2RzW2pyXTpuZXcgQXJy'@;
put 'YXkoVnQubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBqby5wdXNoKGdvW2pyJSRvXS5jb25jYXQoZHNbanJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheShUcyxxbyxudyhqbykpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0IHlvPU90Lmxlbmd0aCxjYz1NYXRoLm1heCh5byxJYSksUmE9'@;
put 'Zi5nZXREYXRhKCkuc2xpY2UoVHMpLm1hcChtdT0+bXUuc2xpY2UocW8pKTtmb3IoS249MDtLbjxjYztLbis9MSlpZihLbjx5byl7Zm9yKGpyPTAsUXI9T3RbS25dLmxlbmd0aDtqcjxzbC1Rcjtqcis9MSlPdFtLbl0ucHVzaChPdFtLbl1banIlUXJdKTtpZihLbjxSYS5sZW5ndGgpZm9yKGxl'@;
put 'dCBtdT0wO211PFJhW0tuXS5sZW5ndGg7bXUrPTEpT3RbS25dLnB1c2goUmFbS25dW211XSk7ZWxzZSBPdFtLbl0ucHVzaCguLi5uZXcgQXJyYXkoUmFbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE90LnB1c2goT3RbS24lUHJdLnNsaWNlKDAsY2MpLmNvbmNhdChSYVtLbl0pKTtmLnBv'@;
put 'cHVsYXRlRnJvbUFycmF5KFRzLHFvLE90KTticmVhaztkZWZhdWx0OktyLnJvdz1ndC5yb3csS3IuY29sPWd0LmNvbDtsZXQgemYscGg9MCxOMD0wLHB1PSEwO2NvbnN0IE1wPWZ1bmN0aW9uKEMyKXtsZXQgaDA9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJn'@;
put 'dW1lbnRzWzFdOm51bGw7Y29uc3QgbWg9T3RbQzIlT3QubGVuZ3RoXTtyZXR1cm4gbnVsbCE9PWgwP21oW2gwJW1oLmxlbmd0aF06bWh9LEMxPU90Lmxlbmd0aCxNMj1jbj9jbi5yb3ctZ3Qucm93KzE6MDtmb3IoUHI9Y24/TTI6TWF0aC5tYXgoQzEsTTIpLEtuPTA7S248UHImJiEoY24mJkty'@;
put 'LnJvdz5jbi5yb3cmJk0yPkMxfHwhdHQuYWxsb3dJbnNlcnRSb3cmJktyLnJvdz5mLmNvdW50Um93cygpLTF8fEtyLnJvdz49dHQubWF4Um93cyk7S24rKyl7Y29uc3QgbXU9S24tcGgsQzI9TXAobXUpLmxlbmd0aCxoMD1jbj9jbi5jb2wtZ3QuY29sKzE6MDtpZihRcj1jbj9oMDpNYXRoLm1h'@;
put 'eChDMixoMCksS3IuY29sPWd0LmNvbCx6Zj1mLmdldENlbGxNZXRhKEtyLnJvdyxLci5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09Tm4mJiJBdXRvZmlsbC5maWxsIiE9PU5ufHwhemYuc2tpcFJvd09uUGFzdGUpe2ZvcihOMD0wLGpyPTA7anI8UXImJiEoY24mJktyLmNvbD5jbi5jb2wmJmgw'@;
put 'PkMyfHwhdHQuYWxsb3dJbnNlcnRDb2x1bW4mJktyLmNvbD5mLmNvdW50Q29scygpLTF8fEtyLmNvbD49dHQubWF4Q29scyk7anIrKyl7aWYoemY9Zi5nZXRDZWxsTWV0YShLci5yb3csS3IuY29sKSwoIkNvcHlQYXN0ZS5wYXN0ZSI9PT1Obnx8IkF1dG9maWxsLmZpbGwiPT09Tm4pJiZ6Zi5z'@;
put 'a2lwQ29sdW1uT25QYXN0ZSl7TjArPTEsS3IuY29sKz0xLFFyKz0xO2NvbnRpbnVlfWlmKHpmLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1Obil7S3IuY29sKz0xO2NvbnRpbnVlfWxldCBWMD1NcChtdSxqci1OMCksYXM9Zi5nZXREYXRhQXRDZWxsKEtyLnJvdyxLci5jb2wpO2lmKG51'@;
put 'bGwhPT1WMCYmIm9iamVjdCI9PXR5cGVvZiBWMClpZihBcnJheS5pc0FycmF5KFYwKSYmbnVsbD09PWFzJiYoYXM9W10pLG51bGw9PT1hc3x8Im9iamVjdCIhPXR5cGVvZiBhcylwdT0hMTtlbHNle2NvbnN0IGowPXU5KEFycmF5LmlzQXJyYXkoYXMpP2FzOmFzWzBdfHxhcyksUzI9dTkoQXJy'@;
put 'YXkuaXNBcnJheShWMCk/VjA6VjBbMF18fFYwKTt3VChqMCxTMil8fEFycmF5LmlzQXJyYXkoajApJiZBcnJheS5pc0FycmF5KFMyKT9WMD1sMChWMCk6cHU9ITF9ZWxzZSBudWxsIT09YXMmJiJvYmplY3QiPT10eXBlb2YgYXMmJihwdT0hMSk7cHUmJm5pLnB1c2goW0tyLnJvdyxLci5jb2ws'@;
put 'VjBdKSxwdT0hMCxLci5jb2wrPTF9S3Iucm93Kz0xfWVsc2UgcGgrPTEsS3Iucm93Kz0xLFByKz0xfWYuc2V0RGF0YUF0Q2VsbChuaSxudWxsLG51bGwsTm58fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5jdGlvbigpe1kuc2V0RGF0YSh0dC5kYXRhKSxmLnJ1bkhvb2tz'@;
put 'KCJiZWZvcmVJbml0IiksKGYyKCl8fGVqKCkpJiZ3aShmLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKHR0LCEwKSx0aGlzLnZpZXc9bmV3IEhGZSh0aGlzKSxmZT1PT2UuZ2V0SW5zdGFuY2UoZix0dCxzbiksZi5ydW5Ib29rcygiaW5pdCIpLHRoaXMuZm9yY2VG'@;
put 'dWxsUmVuZGVyPSEwLHRoaXMudmlldy5yZW5kZXIoKSxfZSYmbnVsbD09PWYucm9vdEVsZW1lbnQub2Zmc2V0UGFyZW50JiZXaWUoZi5yb290RWxlbWVudCwoKT0+e2Yudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCksZi5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0'@;
put 'RWxlbWVudHNTaXplKCl9KSwib2JqZWN0Ij09dHlwZW9mIF9lJiYoZi5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLF9lWzBdLF9lWzFdKSxfZT0hMSksZi5ydW5Ib29rcygiYWZ0ZXJJbml0Iil9LHRoaXMuX2NyZWF0ZUNlbGxDb29yZHM9ZnVuY3Rpb24oZ3QsT3Qpe3JldHVybiBmLnZpZXcuX3d0'@;
put 'LmNyZWF0ZUNlbGxDb29yZHMoZ3QsT3QpfSx0aGlzLl9jcmVhdGVDZWxsUmFuZ2U9ZnVuY3Rpb24oZ3QsT3QsY24pe3JldHVybiBmLnZpZXcuX3d0LmNyZWF0ZUNlbGxSYW5nZShndCxPdCxjbil9LHRoaXMudmFsaWRhdGVDZWxsPWZ1bmN0aW9uKGd0LE90LGNuLE5uKXtsZXQgeG49Zi5nZXRD'@;
put 'ZWxsVmFsaWRhdG9yKE90KTtmdW5jdGlvbiBLbihQcil7aWYoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJiFhcmd1bWVudHNbMV18fCEwPT09T3QuaGlkZGVuKXJldHVybiB2b2lkIGNuKFByKTtjb25zdCBRcj1PdC52aXN1YWxDb2wsbmk9T3QudmlzdWFsUm93'@;
put 'LEtyPWYuZ2V0Q2VsbChuaSxRciwhMCk7aWYoS3ImJiJUSCIhPT1Lci5ub2RlTmFtZSl7Y29uc3Qgam89Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KG5pKSxUcz1mLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoUXIp'@;
put 'O2Yudmlldy5fd3QuZ2V0U2V0dGluZygiY2VsbFJlbmRlcmVyIixqbyxUcyxLcil9Y24oUHIpfUFpZSh4bikmJih4bj1mdW5jdGlvbihQcil7cmV0dXJuIGZ1bmN0aW9uKGpyLFFyKXtRcihQci50ZXN0KGpyKSl9fSh4bikpLG9sKHhuKT8oZ3Q9Zi5ydW5Ib29rcygiYmVmb3JlVmFsaWRhdGUi'@;
put 'LGd0LE90LnZpc3VhbFJvdyxPdC5wcm9wLE5uKSxmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e3huLmNhbGwoT3QsZ3QsUHI9PntmJiYoUHI9Zi5ydW5Ib29rcygiYWZ0ZXJWYWxpZGF0ZSIsUHIsZ3QsT3QudmlzdWFsUm93LE90LnByb3AsTm4pLE90LnZhbGlkPVByLEtuKFByKSxmLnJ1bkhv'@;
put 'b2tzKCJwb3N0QWZ0ZXJWYWxpZGF0ZSIsUHIsZ3QsT3QudmlzdWFsUm93LE90LnByb3AsTm4pKX0pfSkpOmYuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57T3QudmFsaWQ9ITAsS24oT3QudmFsaWQsITEpfSl9LHRoaXMuc2V0RGF0YUF0Q2VsbD1mdW5jdGlvbihndCxPdCxjbixObil7Y29uc3Qg'@;
put 'eG49YWkoZ3QsT3QsY24pLEtuPVtdO2xldCBqcixRcixuaSxQcj1Objtmb3IoanI9MCxRcj14bi5sZW5ndGg7anI8UXI7anIrKyl7aWYoIm9iamVjdCIhPXR5cGVvZiB4bltqcl0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IG51bWJlciBvciBj'@;
put 'aGFuZ2VzIGFycmF5IG9mIGFycmF5cyBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyIik7aWYoIm51bWJlciIhPXR5cGVvZiB4bltqcl1bMV0pdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgYHNldERhdGFBdENlbGxgIGFjY2VwdHMgcm93IGFuZCBjb2x1bW4gbnVtYmVyIGFzIGl0cyBwYXJhbWV0ZXJz'@;
put 'LiBJZiB5b3Ugd2FudCB0byB1c2Ugb2JqZWN0IHByb3BlcnR5IG5hbWUsIHVzZSBtZXRob2QgYHNldERhdGFBdFJvd1Byb3BgIik7bmk9eG5banJdWzFdPj10aGlzLmNvdW50Q29scygpP3huW2pyXVsxXTpULmNvbFRvUHJvcCh4bltqcl1bMV0pLEtuLnB1c2goW3huW2pyXVswXSxuaSxZLmdl'@;
put 'dEF0Q2VsbCh0aGlzLnRvUGh5c2ljYWxSb3coeG5banJdWzBdKSx4bltqcl1bMV0pLHhuW2pyXVsyXV0pfSFQciYmIm9iamVjdCI9PXR5cGVvZiBndCYmKFByPU90KTtjb25zdCBLcj10aShLbixObik7Zi5ydW5Ib29rcygiYWZ0ZXJTZXREYXRhQXRDZWxsIixLcixQciksSGkoS3IsUHIsKCk9'@;
put 'Pnt3cihLcixQcil9KX0sdGhpcy5zZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKGd0LE90LGNuLE5uKXtjb25zdCB4bj1haShndCxPdCxjbiksS249W107bGV0IGpyLFFyLFByPU5uO2Zvcihqcj0wLFFyPXhuLmxlbmd0aDtqcjxRcjtqcisrKUtuLnB1c2goW3huW2pyXVswXSx4bltqcl1bMV0s'@;
put 'WS5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KHhuW2pyXVswXSkseG5banJdWzFdKSx4bltqcl1bMl1dKTshUHImJiJvYmplY3QiPT10eXBlb2YgZ3QmJihQcj1PdCk7Y29uc3Qgbmk9dGkoS24sTm4pO2YucnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsbmksUHIpLEhpKG5p'@;
put 'LFByLCgpPT57d3IobmksUHIpfSl9LHRoaXMubGlzdGVuPWZ1bmN0aW9uKCl7ZiYmIWYuaXNMaXN0ZW5pbmcoKSYmKHhZPWYuZ3VpZCxmLnJ1bkhvb2tzKCJhZnRlckxpc3RlbiIpKX0sdGhpcy51bmxpc3Rlbj1mdW5jdGlvbigpe3RoaXMuaXNMaXN0ZW5pbmcoKSYmKHhZPW51bGwsZi5ydW5I'@;
put 'b29rcygiYWZ0ZXJVbmxpc3RlbiIpKX0sdGhpcy5pc0xpc3RlbmluZz1mdW5jdGlvbigpe3JldHVybiB4WT09PWYuZ3VpZH0sdGhpcy5kZXN0cm95RWRpdG9yPWZ1bmN0aW9uKCl7Zi5fcmVmcmVzaEJvcmRlcnMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFy'@;
put 'Z3VtZW50c1swXSwhKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdKX0sdGhpcy5wb3B1bGF0ZUZyb21BcnJheT1mdW5jdGlvbihndCxPdCxjbixObix4bixLbixQcil7aWYoIm9iamVjdCIhPXR5cGVvZiBjbnx8Im9iamVjdCIhPXR5cGVv'@;
put 'ZiBjblswXSl0aHJvdyBuZXcgRXJyb3IoInBvcHVsYXRlRnJvbUFycmF5IHBhcmFtZXRlciBgaW5wdXRgIG11c3QgYmUgYW4gYXJyYXkgb2YgYXJyYXlzIik7Y29uc3QganI9Im51bWJlciI9PXR5cGVvZiBObj9mLl9jcmVhdGVDZWxsQ29vcmRzKE5uLHhuKTpudWxsO3JldHVybiByZS5wb3B1'@;
put 'bGF0ZUZyb21BcnJheShmLl9jcmVhdGVDZWxsQ29vcmRzKGd0LE90KSxjbixqcixLbixQcil9LHRoaXMuc3BsaWNlQ29sPWZ1bmN0aW9uKGd0LE90LGNuKXtmb3IodmFyIE5uPWFyZ3VtZW50cy5sZW5ndGgseG49bmV3IEFycmF5KE5uPjM/Tm4tMzowKSxLbj0zO0tuPE5uO0tuKyspeG5bS24t'@;
put 'M109YXJndW1lbnRzW0tuXTtyZXR1cm4gVC5zcGxpY2VDb2woZ3QsT3QsY24sLi4ueG4pfSx0aGlzLnNwbGljZVJvdz1mdW5jdGlvbihndCxPdCxjbil7Zm9yKHZhciBObj1hcmd1bWVudHMubGVuZ3RoLHhuPW5ldyBBcnJheShObj4zP05uLTM6MCksS249MztLbjxObjtLbisrKXhuW0tuLTNd'@;
put 'PWFyZ3VtZW50c1tLbl07cmV0dXJuIFQuc3BsaWNlUm93KGd0LE90LGNuLC4uLnhuKX0sdGhpcy5nZXRTZWxlY3RlZD1mdW5jdGlvbigpe2lmKHNuLmlzU2VsZWN0ZWQoKSlyZXR1cm4gX3Moc24uZ2V0U2VsZWN0ZWRSYW5nZSgpLGd0PT57bGV0e2Zyb206T3QsdG86Y259PWd0O3JldHVybltP'@;
put 'dC5yb3csT3QuY29sLGNuLnJvdyxjbi5jb2xdfSl9LHRoaXMuZ2V0U2VsZWN0ZWRMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgZ3Q9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBPdDtyZXR1cm4gZ3QmJmd0Lmxlbmd0aD4wJiYoT3Q9Z3RbZ3QubGVuZ3RoLTFdKSxPdH0sdGhpcy5nZXRTZWxlY3RlZFJh'@;
put 'bmdlPWZ1bmN0aW9uKCl7aWYoc24uaXNTZWxlY3RlZCgpKXJldHVybiBBcnJheS5mcm9tKHNuLmdldFNlbGVjdGVkUmFuZ2UoKSl9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Q9ZnVuY3Rpb24oKXtjb25zdCBndD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgT3Q7cmV0dXJuIGd0JiZn'@;
put 'dC5sZW5ndGg+MCYmKE90PWd0W2d0Lmxlbmd0aC0xXSksT3R9LHRoaXMuZW1wdHlTZWxlY3RlZENlbGxzPWZ1bmN0aW9uKGd0KXtpZighc24uaXNTZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IE90PVtdO1JuKHNuLmdl'@;
put 'dFNlbGVjdGVkUmFuZ2UoKSxjbj0+e2NvbnN0IE5uPWNuLmdldFRvcFN0YXJ0Q29ybmVyKCkseG49Y24uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7TW8oTm4ucm93LHhuLnJvdyxLbj0+e01vKE5uLmNvbCx4bi5jb2wsUHI9Pnt0aGlzLmdldENlbGxNZXRhKEtuLFByKS5yZWFkT25seXx8T3QucHVz'@;
put 'aChbS24sUHIsbnVsbF0pfSl9KX0pLE90Lmxlbmd0aD4wJiZ0aGlzLnNldERhdGFBdENlbGwoT3QsZ3QpfSx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj4wfSx0aGlzLnN1c3BlbmRSZW5kZXI9ZnVuY3Rpb24oKXt0'@;
put 'aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXIrPTF9LHRoaXMucmVzdW1lUmVuZGVyPWZ1bmN0aW9uKCl7Y29uc3QgZ3Q9dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KGd0LDApLCF0aGlzLmlzUmVuZGVyU3VzcGVuZGVk'@;
put 'KCkmJmd0PT09dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyJiYodGhpcy5yZW5kZXJDYWxsP3RoaXMucmVuZGVyKCk6dGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCkpfSx0aGlzLnJlbmRlcj1mdW5jdGlvbigpe3RoaXMudmlldyYmKHRoaXMucmVuZGVyQ2FsbD0hMCx0aGlzLmZvcmNlRnVs'@;
put 'bFJlbmRlcj0hMCx0aGlzLmlzUmVuZGVyU3VzcGVuZGVkKCl8fChmZS5sb2NrRWRpdG9yKCksdGhpcy5fcmVmcmVzaEJvcmRlcnMobnVsbCksZmUudW5sb2NrRWRpdG9yKCkpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbihndCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgT3Q9Z3Qo'@;
put 'KTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5k'@;
put 'ZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9wZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IGd0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgT3Q9dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE90LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZPdD09PXRoaXMuZXhlY3V0aW9u'@;
put 'U3VzcGVuZGVkQ291bnRlcnx8Z3QpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKGd0KXtsZXQgT3Q9YXJndW1lbnRzLmxlbmd0aD4x'@;
put 'JiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1c3BlbmRFeGVjdXRpb24oKTtjb25zdCBjbj1ndCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihPdCksY259LHRoaXMuYmF0Y2g9ZnVuY3Rpb24oZ3Qpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3Vz'@;
put 'cGVuZEV4ZWN1dGlvbigpO2NvbnN0IE90PWd0KCk7cmV0dXJuIHRoaXMucmVzdW1lRXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxPdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0e3dpZHRoOmd0LGhlaWdodDpPdH09Zi52'@;
put 'aWV3LmdldExhc3RTaXplKCkse3dpZHRoOmNuLGhlaWdodDpObn09Zi5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx4bj1jbiE9PWd0fHxObiE9PU90OyExIT09Zi5ydW5Ib29rcygiYmVmb3JlUmVmcmVzaERpbWVuc2lvbnMiLHt3aWR0aDpndCxoZWlnaHQ6T3R9LHt3aWR0'@;
put 'aDpjbixoZWlnaHQ6Tm59LHhuKSYmKCh4bnx8Zi52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKGYudmlldy5zZXRMYXN0U2l6ZShjbixObiksZi5yZW5kZXIoKSksZi5ydW5Ib29rcygiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIse3dpZHRo'@;
put 'Omd0LGhlaWdodDpPdH0se3dpZHRoOmNuLGhlaWdodDpObn0seG4pKX0sdGhpcy51cGRhdGVEYXRhPWZ1bmN0aW9uKGd0LE90KXt5c2UoZ3QsY249PntUPWNufSxjbj0+e1Q9Y24sZi5jb2x1bW5JbmRleE1hcHBlci5maXRUb0xlbmd0aCh0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxm'@;
put 'LnJvd0luZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuY291bnRTb3VyY2VSb3dzKCkpLHJlLmFkanVzdFJvd3NBbmRDb2xzKCl9LHtob3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlksaW50ZXJuYWxTb3VyY2U6InVwZGF0ZURhdGEiLHNvdXJjZTpPdCxtZXRhTWFuYWdlcjpK'@;
put 'ZSxmaXJzdFJ1bjpfZX0pfSx0aGlzLmxvYWREYXRhPWZ1bmN0aW9uKGd0LE90KXt5c2UoZ3QsY249PntUPWNufSwoKT0+e0plLmNsZWFyQ2VsbHNDYWNoZSgpLGYuaW5pdEluZGV4TWFwcGVycygpLHJlLmFkanVzdFJvd3NBbmRDb2xzKCksX2UmJihfZT1bbnVsbCwibG9hZERhdGEiXSl9LHto'@;
put 'b3RJbnN0YW5jZTpmLGRhdGFNYXA6VCxkYXRhU291cmNlOlksaW50ZXJuYWxTb3VyY2U6ImxvYWREYXRhIixzb3VyY2U6T3QsbWV0YU1hbmFnZXI6SmUsZmlyc3RSdW46X2V9KX0sdGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQ9ZnVuY3Rpb24oKXtjb25zdCBndD10dC5jb2x1bW5zO2xldCBP'@;
put 'dD0wO2lmKEFycmF5LmlzQXJyYXkoZ3QpKU90PWd0Lmxlbmd0aDtlbHNlIGlmKG9sKGd0KSlpZigiYXJyYXkiPT09Zi5kYXRhVHlwZSl7Y29uc3QgY249dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtmb3IobGV0IE5uPTA7Tm48Y247Tm4rPTEpZ3QoTm4pJiYoT3QrPTEpfWVsc2UoIm9iamVjdCI9'@;
put 'PT1mLmRhdGFUeXBlfHwiZnVuY3Rpb24iPT09Zi5kYXRhVHlwZSkmJihPdD1ULmNvbFRvUHJvcENhY2hlLmxlbmd0aCk7ZWxzZSBpZihlbyh0dC5kYXRhU2NoZW1hKSl7Y29uc3QgY249VC5nZXRTY2hlbWEoKTtPdD1BcnJheS5pc0FycmF5KGNuKT9jbi5sZW5ndGg6Q1QoY24pfWVsc2UgT3Q9'@;
put 'dGhpcy5jb3VudFNvdXJjZUNvbHMoKTtyZXR1cm4gT3R9LHRoaXMuaW5pdEluZGV4TWFwcGVycz1mdW5jdGlvbigpe3RoaXMuY29sdW1uSW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLHRoaXMucm93SW5kZXhNYXBwZXIuaW5pdFRvTGVuZ3Ro'@;
put 'KHRoaXMuY291bnRTb3VyY2VSb3dzKCkpfSx0aGlzLmdldERhdGE9ZnVuY3Rpb24oZ3QsT3QsY24sTm4pe3JldHVybiBpbChndCk/VC5nZXRBbGwoKTpULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoZ3QsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sTm4pLFQuREVTVElOQVRJT05f'@;
put 'UkVOREVSRVIpfSx0aGlzLmdldENvcHlhYmxlVGV4dD1mdW5jdGlvbihndCxPdCxjbixObil7cmV0dXJuIFQuZ2V0Q29weWFibGVUZXh0KGYuX2NyZWF0ZUNlbGxDb29yZHMoZ3QsT3QpLGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sTm4pKX0sdGhpcy5nZXRDb3B5YWJsZURhdGE9ZnVuY3Rpb24o'@;
put 'Z3QsT3Qpe3JldHVybiBULmdldENvcHlhYmxlKGd0LFQuY29sVG9Qcm9wKE90KSl9LHRoaXMuZ2V0U2NoZW1hPWZ1bmN0aW9uKCl7cmV0dXJuIFQuZ2V0U2NoZW1hKCl9LHRoaXMudXBkYXRlU2V0dGluZ3M9ZnVuY3Rpb24oZ3Qpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9'@;
put 'PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGNuPShfZT9mLmxvYWREYXRhOmYudXBkYXRlRGF0YSkuYmluZCh0aGlzKTtsZXQgeG4sS24sTm49ITE7aWYoZW8oZ3Qucm93cykpdGhyb3cgbmV3IEVycm9yKCdUaGUgInJvd3MiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRl'@;
put 'ZC4gRG8geW91IG1lYW4gc3RhcnRSb3dzLCBtaW5Sb3dzIG9yIG1heFJvd3M/Jyk7aWYoZW8oZ3QuY29scykpdGhyb3cgbmV3IEVycm9yKCdUaGUgImNvbHMiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRG8geW91IG1lYW4gc3RhcnRDb2xzLCBtaW5Db2xzIG9yIG1heENvbHM/'@;
put 'Jyk7aWYoZW8oZ3QuZ2FudHRDaGFydCkpdGhyb3cgbmV3IEVycm9yKCdTaW5jZSA4LjAuMCB0aGUgImdhbnR0Q2hhcnQiIHNldHRpbmcgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4nKTtmb3IoeG4gaW4gZ3QpImRhdGEiPT09eG58fCgibGFuZ3VhZ2UiPT09eG4/Vm4oZ3QubGFuZ3VhZ2UpOiJj'@;
put 'bGFzc05hbWUiPT09eG4/dXIoImNsYXNzTmFtZSIsZ3QuY2xhc3NOYW1lKToidGFibGVDbGFzc05hbWUiPT09eG4mJmYudGFibGU/KHVyKCJ0YWJsZUNsYXNzTmFtZSIsZ3QudGFibGVDbGFzc05hbWUpLGYudmlldy5fd3Qud3RPdmVybGF5cy5zeW5jT3ZlcmxheVRhYmxlQ2xhc3NOYW1lcygp'@;
put 'KTphby5nZXRTaW5nbGV0b24oKS5pc1JlZ2lzdGVyZWQoeG4pfHxhby5nZXRTaW5nbGV0b24oKS5pc0RlcHJlY2F0ZWQoeG4pPyhvbChndFt4bl0pfHxBcnJheS5pc0FycmF5KGd0W3huXSkpJiYoZ3RbeG5dLmluaXRpYWxIb29rPSEwLGYuYWRkSG9vayh4bixndFt4bl0pKTohT3QmJnFsKGd0'@;
put 'LHhuKSYmKHl0W3huXT1ndFt4bl0pKTt2b2lkIDA9PT1ndC5kYXRhJiZ2b2lkIDA9PT10dC5kYXRhP2NuKG51bGwsInVwZGF0ZVNldHRpbmdzIik6dm9pZCAwIT09Z3QuZGF0YT9jbihndC5kYXRhLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PWd0LmNvbHVtbnMmJihULmNyZWF0ZU1hcCgp'@;
put 'LGYuaW5pdEluZGV4TWFwcGVycygpKTtjb25zdCBQcj1mLmNvdW50Q29scygpLGpyPXR0LmNvbHVtbnM7aWYoanImJm9sKGpyKSYmKE5uPSEwKSwodm9pZCAwIT09Z3QuY2VsbHx8dm9pZCAwIT09Z3QuY2VsbHN8fHZvaWQgMCE9PWd0LmNvbHVtbnMpJiZKZS5jbGVhckNhY2hlKCksUHI+MClm'@;
put 'b3IoeG49MCxLbj0wO3huPFByO3huKyspe2lmKGpyKXtjb25zdCBLcj1Obj9qcih4bik6anJbS25dO0tyJiZKZS51cGRhdGVDb2x1bW5NZXRhKEtuLEtyKX1Lbis9MX1lbyhndC5jZWxsKSYmeXMoZ3QuY2VsbCxLcj0+e2Yuc2V0Q2VsbE1ldGFPYmplY3QoS3Iucm93LEtyLmNvbCxLcil9KSxm'@;
put 'LnJ1bkhvb2tzKCJhZnRlckNlbGxNZXRhUmVzZXQiKTtsZXQgUXI9Zi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ7IiIhPT1RciYmKFFyPXBhcnNlSW50KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKSk7bGV0IG5pPWd0LmhlaWdodDtpZihvbChuaSkmJihuaT1uaSgpKSxPdCYmZi5y'@;
put 'b290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikmJmYucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIsZi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0eWxlIikpLG51bGw9PT1uaSl7Y29uc3QgS3I9Zi5yb290RWxlbWVudC5nZXRBdHRyaWJ1dGUo'@;
put 'ImRhdGEtaW5pdGlhbHN0eWxlIik7S3ImJihLci5pbmRleE9mKCJoZWlnaHQiKT4tMXx8S3IuaW5kZXhPZigib3ZlcmZsb3ciKT4tMSk/Zi5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoInN0eWxlIixLcik6KGYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0PSIiLGYucm9vdEVsZW1lbnQuc3R5'@;
put 'bGUub3ZlcmZsb3c9IiIpfWVsc2Ugdm9pZCAwIT09bmkmJihmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodD1pc05hTihuaSk/YCR7bml9YDpgJHtuaX1weGAsZi5yb290RWxlbWVudC5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIik7aWYodHlwZW9mIGd0LndpZHRoPCJ1Iil7bGV0IEtyPWd0Lndp'@;
put 'ZHRoO29sKEtyKSYmKEtyPUtyKCkpLGYucm9vdEVsZW1lbnQuc3R5bGUud2lkdGg9aXNOYU4oS3IpP2Ake0tyfWA6YCR7S3J9cHhgfU90fHwoZi52aWV3JiYoZi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVkQ29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhw'@;
put 'b3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKSksZi5ydW5Ib29rcygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZ3QpKSxyZS5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldyYmIV9lJiYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAsZmUubG9ja0VkaXRvcigpLGYuX3JlZnJlc2hCb3JkZXJzKG51bGwpLGYu'@;
put 'dmlldy5fd3Qud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSxmZS51bmxvY2tFZGl0b3IoKSksIU90JiZmLnZpZXcmJigiIj09PVFyfHwiIj09PW5pfHx2b2lkIDA9PT1uaSkmJlFyIT09bmkmJmYudmlldy5fd3Qud3RPdmVybGF5cy51cGRhdGVNYWluU2Nyb2xsYWJsZUVsZW1lbnRz'@;
put 'KCl9LHRoaXMuZ2V0VmFsdWU9ZnVuY3Rpb24oKXtjb25zdCBndD1mLmdldFNlbGVjdGVkTGFzdCgpO2lmKHR0LmdldFZhbHVlKXtpZihvbCh0dC5nZXRWYWx1ZSkpcmV0dXJuIHR0LmdldFZhbHVlLmNhbGwoZik7aWYoZ3QpcmV0dXJuIGYuZ2V0RGF0YSgpW2d0WzBdWzBdXVt0dC5nZXRWYWx1'@;
put 'ZV19ZWxzZSBpZihndClyZXR1cm4gZi5nZXREYXRhQXRDZWxsKGd0WzBdLGd0WzFdKX0sdGhpcy5nZXRTZXR0aW5ncz1mdW5jdGlvbigpe3JldHVybiB0dH0sdGhpcy5jbGVhcj1mdW5jdGlvbigpe3RoaXMuc2VsZWN0QWxsKCksdGhpcy5lbXB0eVNlbGVjdGVkQ2VsbHMoKX0sdGhpcy5hbHRl'@;
put 'cj1mdW5jdGlvbihndCxPdCxjbixObix4bil7cmUuYWx0ZXIoZ3QsT3QsY24sTm4seG4pfSx0aGlzLmdldENlbGw9ZnVuY3Rpb24oZ3QsT3Qpe2xldCBjbj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLE5uPU90LHhuPWd0O2lmKE90Pj0w'@;
put 'KXtpZih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbENvbHVtbihPdCkpKXJldHVybiBudWxsO05uPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChPdCl9aWYoZ3Q+PTApe2lmKHRoaXMucm93SW5kZXhNYXBw'@;
put 'ZXIuaXNIaWRkZW4odGhpcy50b1BoeXNpY2FsUm93KGd0KSkpcmV0dXJuIG51bGw7eG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGd0KX1yZXR1cm4gbnVsbD09PXhufHxudWxsPT09Tm4/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2Ny'@;
put 'ZWF0ZUNlbGxDb29yZHMoeG4sTm4pLGNuKX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24oZ3Qpe2NvbnN0IE90PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHMoZ3QpO2lmKG51bGw9PT1PdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6Y24sY29sOk5ufT1PdDtsZXQgeG49Y24sS249Tm47'@;
put 'cmV0dXJuIGNuPj0wJiYoeG49dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGNuKSksTm4+PTAmJihLbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTm4pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHhuLEtu'@;
put 'KX0sdGhpcy5jb2xUb1Byb3A9ZnVuY3Rpb24oZ3Qpe3JldHVybiBULmNvbFRvUHJvcChndCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKGd0KXtyZXR1cm4gVC5wcm9wVG9Db2woZ3QpfSx0aGlzLnRvVmlzdWFsUm93PWd0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlz'@;
put 'aWNhbEluZGV4KGd0KSx0aGlzLnRvVmlzdWFsQ29sdW1uPWd0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KGd0KSx0aGlzLnRvUGh5c2ljYWxSb3c9Z3Q9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoZ3Qp'@;
put 'LHRoaXMudG9QaHlzaWNhbENvbHVtbj1ndD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChndCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKGd0LE90KXtyZXR1cm4gVC5nZXQoZ3QsVC5jb2xUb1Byb3AoT3QpKX0sdGhpcy5nZXREYXRhQXRS'@;
put 'b3dQcm9wPWZ1bmN0aW9uKGd0LE90KXtyZXR1cm4gVC5nZXQoZ3QsT3QpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbihndCl7Y29uc3QgT3Q9W10sY249VC5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsZ3QpLGYuX2NyZWF0ZUNlbGxDb29yZHModHQuZGF0YS5sZW5ndGgtMSxn'@;
put 'dCksVC5ERVNUSU5BVElPTl9SRU5ERVJFUik7Zm9yKGxldCBObj0wO05uPGNuLmxlbmd0aDtObis9MSlmb3IobGV0IHhuPTA7eG48Y25bTm5dLmxlbmd0aDt4bis9MSlPdC5wdXNoKGNuW05uXVt4bl0pO3JldHVybiBPdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKGd0KXtjb25zdCBP'@;
put 'dD1bXSxjbj1ULmdldFJhbmdlKGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxULnByb3BUb0NvbChndCkpLGYuX2NyZWF0ZUNlbGxDb29yZHModHQuZGF0YS5sZW5ndGgtMSxULnByb3BUb0NvbChndCkpLFQuREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgTm49MDtObjxjbi5sZW5ndGg7Tm4r'@;
put 'PTEpZm9yKGxldCB4bj0wO3huPGNuW05uXS5sZW5ndGg7eG4rPTEpT3QucHVzaChjbltObl1beG5dKTtyZXR1cm4gT3R9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbihndCxPdCxjbixObil7bGV0IHhuO3JldHVybiB4bj12b2lkIDA9PT1ndD9ZLmdldERhdGEoKTpZLmdldEJ5UmFuZ2Uo'@;
put 'Zi5fY3JlYXRlQ2VsbENvb3JkcyhndCxPdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhjbixObikpLHhufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbihndCxPdCxjbixObil7bGV0IHhuO3JldHVybiB4bj12b2lkIDA9PT1ndD9ZLmdldERhdGEoITApOlkuZ2V0QnlSYW5nZShmLl9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKGd0LE90KSxmLl9jcmVhdGVDZWxsQ29vcmRzKGNuLE5uKSwhMCkseG59LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKGd0KXtyZXR1cm4gWS5nZXRBdENvbHVtbihndCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbihndCxPdCxjbixO'@;
put 'bil7Y29uc3QgeG49YWkoZ3QsT3QsY24pLEtuPXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksUHI9W107S24mJlJuKHhuLFFyPT57bGV0W25pLEtyLGpvXT1RcjtQci5wdXNoKFtuaSxLcixZLmdldEF0Q2VsbChuaSxLciksam9dKX0pLFJuKHhuLFFyPT57bGV0W25p'@;
put 'LEtyLGpvXT1RcjtZLnNldEF0Q2VsbChuaSxLcixqbyl9KSxLbiYmdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixQcixObiksdGhpcy5yZW5kZXIoKTtjb25zdCBqcj1mLmdldEFjdGl2ZUVkaXRvcigpO2pyJiZlbyhqci5yZWZyZXNoVmFsdWUpJiZqci5yZWZyZXNo'@;
put 'VmFsdWUoKX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24oZ3Qpe3JldHVybiBZLmdldEF0Um93KGd0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKGd0LE90KXtyZXR1cm4gWS5nZXRBdENlbGwoZ3QsT3QpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbihn'@;
put 'dCl7cmV0dXJuIFQuZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3JkcyhndCwwKSxmLl9jcmVhdGVDZWxsQ29vcmRzKGd0LHRoaXMuY291bnRDb2xzKCktMSksVC5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKGd0LE90LGNuLE5uKXtjb25z'@;
put 'dCB4bj12b2lkIDA9PT1ndD9bMCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKV06W2d0LE90LGNuLE5uXSxbS24sUHJdPXhuO2xldFssLGpyLFFyXT14bixuaT1udWxsLEtyPW51bGw7dm9pZCAwPT09anImJihqcj1Lbiksdm9pZCAwPT09UXImJihRcj1Qcik7bGV0IGpvPSJt'@;
put 'aXhlZCI7cmV0dXJuIE1vKE1hdGgubWF4KE1hdGgubWluKEtuLGpyKSwwKSxNYXRoLm1heChLbixqciksVHM9PntsZXQgcW89ITA7cmV0dXJuIE1vKE1hdGgubWF4KE1hdGgubWluKFByLFFyKSwwKSxNYXRoLm1heChQcixRciksc2w9PihLcj10aGlzLmdldENlbGxNZXRhKFRzLHNsKS50eXBl'@;
put 'LG5pP3FvPW5pPT09S3I6bmk9S3IscW8pKSxqbz1xbz9LcjoibWl4ZWQiLHFvfSksam99LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24oZ3QsT3QsY24pe2NvbnN0W05uLHhuXT1bdGhpcy50b1BoeXNpY2FsUm93KGd0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpXTtsZXQgS249SmUu'@;
put 'Z2V0Q2VsbE1ldGFLZXlWYWx1ZShObix4bixjbik7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsZ3QsT3QsY24sS24pJiYoSmUucmVtb3ZlQ2VsbE1ldGEoTm4seG4sY24pLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLGd0LE90LGNuLEtuKSksS249bnVs'@;
put 'bH0sdGhpcy5zcGxpY2VDZWxsc01ldGE9ZnVuY3Rpb24oZ3Qpe2xldCBPdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIGNuPWFyZ3VtZW50cy5sZW5ndGgsTm49bmV3IEFycmF5KGNuPjI/Y24tMjowKSx4bj0yO3huPGNu'@;
put 'O3huKyspTm5beG4tMl09YXJndW1lbnRzW3huXTtpZihObi5sZW5ndGg+MCYmIUFycmF5LmlzQXJyYXkoTm5bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3Rz'@;
put 'IGFycmF5LiIpO090PjAmJkplLnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3coZ3QpLE90KSxObi5sZW5ndGg+MCYmUm4oTm4ucmV2ZXJzZSgpLEtuPT57SmUuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyhndCkpLFJuKEtuLChQcixqcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3Qo'@;
put 'Z3QsanIsUHIpKX0pLGYucmVuZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9ZnVuY3Rpb24oZ3QsT3QsY24peyJvYmplY3QiPT10eXBlb2YgY24mJnlzKGNuLChObix4bik9Pnt0aGlzLnNldENlbGxNZXRhKGd0LE90LHhuLE5uKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKGd0'@;
put 'LE90LGNuLE5uKXtpZighMT09PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRhIixndCxPdCxjbixObikpcmV0dXJuO2xldCBLbj1ndCxQcj1PdDtndDx0aGlzLmNvdW50Um93cygpJiYoS249dGhpcy50b1BoeXNpY2FsUm93KGd0KSksT3Q8dGhpcy5jb3VudENvbHMoKSYmKFByPXRoaXMu'@;
put 'dG9QaHlzaWNhbENvbHVtbihPdCkpLEplLnNldENlbGxNZXRhKEtuLFByLGNuLE5uKSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIixndCxPdCxjbixObil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIEplLmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRh'@;
put 'PWZ1bmN0aW9uKGd0LE90KXtsZXQgY249dGhpcy50b1BoeXNpY2FsUm93KGd0KSxObj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oT3QpO3JldHVybiBudWxsPT09Y24mJihjbj1ndCksbnVsbD09PU5uJiYoTm49T3QpLEplLmdldENlbGxNZXRhKGNuLE5uLHt2aXN1YWxSb3c6Z3QsdmlzdWFsQ29s'@;
put 'dW1uOk90fSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbihndCl7cmV0dXJuIEplLmdldENlbGxzTWV0YUF0Um93KGd0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8dHQuY29sdW1ucyl9'@;
put 'LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKGd0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09dHlwZW9mIGd0P2YuZ2V0Q2VsbE1ldGEoZ3QsT3QpLnJlbmRlcmVyOmd0LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgY24/SVQoY24pOmlsKGNuKT9JVCgidGV4dCIpOmNufSx0'@;
put 'aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24oZ3QsT3Qpe2NvbnN0IGNuPSJudW1iZXIiPT10eXBlb2YgZ3Q/Zi5nZXRDZWxsTWV0YShndCxPdCkuZWRpdG9yOmd0LmVkaXRvcjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGNuP0VUKGNuKTppbChjbik/RVQoInRleHQiKTpjbn0sdGhpcy5nZXRD'@;
put 'ZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKGd0LE90KXtjb25zdCBjbj0ibnVtYmVyIj09dHlwZW9mIGd0P2YuZ2V0Q2VsbE1ldGEoZ3QsT3QpLnZhbGlkYXRvcjpndC52YWxpZGF0b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjbj9naihjbik6Y259LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlv'@;
put 'bihndCl7dGhpcy5fdmFsaWRhdGVDZWxscyhndCl9LHRoaXMudmFsaWRhdGVSb3dzPWZ1bmN0aW9uKGd0LE90KXtpZighQXJyYXkuaXNBcnJheShndCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRh'@;
put 'dGVDZWxscyhPdCxndCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKGd0LE90KXtpZighQXJyYXkuaXNBcnJheShndCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxs'@;
put 'cyhPdCx2b2lkIDAsZ3QpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKGd0LE90LGNuKXtjb25zdCBObj1uZXcgVHI7Z3QmJihObi5vblF1ZXVlRW1wdHk9Z3QpO2xldCB4bj1mLmNvdW50Um93cygpLTE7Zm9yKDt4bj49MDspe2lmKHZvaWQgMCE9PU90JiYtMT09PU90LmluZGV4T2Yo'@;
put 'eG4pKXt4bi09MTtjb250aW51ZX1sZXQgS249Zi5jb3VudENvbHMoKS0xO2Zvcig7S24+PTA7KXZvaWQgMD09PWNufHwtMSE9PWNuLmluZGV4T2YoS24pPyhObi5hZGRWYWxpZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKHhuLEtuKSxmLmdldENlbGxNZXRh'@;
put 'KHhuLEtuKSxQcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFByKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9PT1QciYmKE5uLnZhbGlkPSExKSxObi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMi'@;
put 'KSxLbi09MSk6S24tPTE7eG4tPTF9Tm4uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbihndCl7bGV0IE90PXR0LnJvd0hlYWRlcnMsY249Z3Q7cmV0dXJuIHZvaWQgMCE9PWNuJiYoY249Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixjbikpLHZv'@;
put 'aWQgMD09PWNuPyhPdD1bXSxNbyhmLmNvdW50Um93cygpLTEsTm49PntPdC5wdXNoKGYuZ2V0Um93SGVhZGVyKE5uKSl9KSk6QXJyYXkuaXNBcnJheShPdCkmJnZvaWQgMCE9PU90W2NuXT9PdD1PdFtjbl06b2woT3QpP090PU90KGNuKTpPdCYmInN0cmluZyIhPXR5cGVvZiBPdCYmIm51bWJl'@;
put 'ciIhPXR5cGVvZiBPdCYmKE90PWNuKzEpLE90fSx0aGlzLmhhc1Jvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIXR0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVycz1mdW5jdGlvbigpe2lmKG51bGwhPXR0LmNvbEhlYWRlcnMpcmV0dXJuISF0dC5jb2xIZWFkZXJzO2ZvcihsZXQg'@;
put 'Z3Q9MCxPdD1mLmNvdW50Q29scygpO2d0PE90O2d0KyspaWYoZi5nZXRDb2xIZWFkZXIoZ3QpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlvbihndCl7bGV0IE90PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sx'@;
put 'XTotMTtjb25zdCBjbj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLGd0KTtpZih2b2lkIDA9PT1jbil7Y29uc3QganI9W10sUXI9Zi5jb3VudENvbHMoKTtmb3IobGV0IG5pPTA7bmk8UXI7bmkrKylqci5wdXNoKGYuZ2V0Q29sSGVhZGVyKG5pKSk7cmV0dXJuIGpyfWxldCBObj10dC5j'@;
put 'b2xIZWFkZXJzO2NvbnN0IEtuPWYudG9QaHlzaWNhbENvbHVtbihjbiksUHI9ZnVuY3Rpb24oanIpe2NvbnN0IFFyPVtdLG5pPWYuY291bnRDb2xzKCk7bGV0IEtyPTA7Zm9yKDtLcjxuaTtLcisrKW9sKHR0LmNvbHVtbnMpJiZ0dC5jb2x1bW5zKEtyKSYmUXIucHVzaChLcik7cmV0dXJuIFFy'@;
put 'W2pyXX0oS24pO3JldHVybiExPT09dHQuY29sSGVhZGVycz9Obj1udWxsOnR0LmNvbHVtbnMmJm9sKHR0LmNvbHVtbnMpJiZ0dC5jb2x1bW5zKFByKSYmdHQuY29sdW1ucyhQcikudGl0bGU/Tm49dHQuY29sdW1ucyhQcikudGl0bGU6dHQuY29sdW1ucyYmdHQuY29sdW1uc1tLbl0mJnR0LmNv'@;
put 'bHVtbnNbS25dLnRpdGxlP05uPXR0LmNvbHVtbnNbS25dLnRpdGxlOkFycmF5LmlzQXJyYXkodHQuY29sSGVhZGVycykmJnZvaWQgMCE9PXR0LmNvbEhlYWRlcnNbS25dP05uPXR0LmNvbEhlYWRlcnNbS25dOm9sKHR0LmNvbEhlYWRlcnMpP05uPXR0LmNvbEhlYWRlcnMoS24pOnR0LmNvbEhl'@;
put 'YWRlcnMmJiJzdHJpbmciIT10eXBlb2YgdHQuY29sSGVhZGVycyYmIm51bWJlciIhPXR5cGVvZiB0dC5jb2xIZWFkZXJzJiYoTm49SFQoY24pKSxObj1mLnJ1bkhvb2tzKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsTm4sZ3QsT3QpLE5ufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5n'@;
put 'cz1mdW5jdGlvbihndCl7bGV0IE90O2lmKGd0Pj0wJiYoT3Q9Zi5nZXRDZWxsTWV0YSgwLGd0KS53aWR0aCksKHZvaWQgMD09PU90fHxPdD09PXR0LndpZHRoKSYmKE90PXR0LmNvbFdpZHRocyksbnVsbCE9T3Qpe3N3aXRjaCh0eXBlb2YgT3Qpe2Nhc2Uib2JqZWN0IjpPdD1PdFtndF07YnJl'@;
put 'YWs7Y2FzZSJmdW5jdGlvbiI6T3Q9T3QoZ3QpfSJzdHJpbmciPT10eXBlb2YgT3QmJihPdD1wYXJzZUludChPdCwxMCkpfXJldHVybiBPdH0sdGhpcy5nZXRDb2xXaWR0aD1mdW5jdGlvbihndCl7bGV0IE90PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKGd0KTtyZXR1cm4gT3Q9Zi5ydW5I'@;
put 'b29rcygibW9kaWZ5Q29sV2lkdGgiLE90LGd0KSx2b2lkIDA9PT1PdCYmKE90PU9qLkRFRkFVTFRfV0lEVEgpLE90fSx0aGlzLl9nZXRSb3dIZWlnaHRGcm9tU2V0dGluZ3M9ZnVuY3Rpb24oZ3Qpe2xldCBPdD10dC5yb3dIZWlnaHRzO2lmKG51bGwhPU90KXtzd2l0Y2godHlwZW9mIE90KXtj'@;
put 'YXNlIm9iamVjdCI6T3Q9T3RbZ3RdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOk90PU90KGd0KX0ic3RyaW5nIj09dHlwZW9mIE90JiYoT3Q9cGFyc2VJbnQoT3QsMTApKX1yZXR1cm4gT3R9LHRoaXMuZ2V0Um93SGVpZ2h0PWZ1bmN0aW9uKGd0KXtsZXQgT3Q9Zi5fZ2V0Um93SGVpZ2h0RnJvbVNl'@;
put 'dHRpbmdzKGd0KTtyZXR1cm4gT3Q9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0IixPdCxndCksT3R9LHRoaXMuY291bnRTb3VyY2VSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIFkuY291bnRSb3dzKCl9LHRoaXMuY291bnRTb3VyY2VDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIFkuY291bnRGaXJz'@;
put 'dFJvd0tleXMoKX0sdGhpcy5jb3VudFJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gVC5nZXRMZW5ndGgoKX0sdGhpcy5jb3VudENvbHM9ZnVuY3Rpb24oKXtjb25zdCBndD10dC5tYXhDb2xzLE90PXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKTtyZXR1'@;
put 'cm4gTWF0aC5taW4oZ3QsT3QpfSx0aGlzLmNvdW50UmVuZGVyZWRSb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlUm93cz1mdW5jdGlvbigpe3JldHVybiBm'@;
put 'LnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlUm93c0NvdW50KCk6LTF9LHRoaXMuY291bnRSZW5kZXJlZENvbHM9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKTot'@;
put 'MX0sdGhpcy5jb3VudFZpc2libGVDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFZpc2libGVDb2x1bW5zQ291bnQoKTotMX0sdGhpcy5jb3VudEVtcHR5Um93cz1mdW5jdGlvbigpe2xldCBndD1hcmd1bWVudHMubGVuZ3RoPjAm'@;
put 'JnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE90PTA7cmV0dXJuIEFUKGYuY291bnRSb3dzKCktMSxjbj0+e2lmKGYuaXNFbXB0eVJvdyhjbikpT3QrPTE7ZWxzZSBpZighMD09PWd0KXJldHVybiExfSksT3R9LHRoaXMuY291bnRFbXB0eUNvbHM9ZnVuY3Rpb24oKXtsZXQg'@;
put 'Z3Q9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxPdD0wO3JldHVybiBBVChmLmNvdW50Q29scygpLTEsY249PntpZihmLmlzRW1wdHlDb2woY24pKU90Kz0xO2Vsc2UgaWYoITA9PT1ndClyZXR1cm4hMX0pLE90fSx0aGlzLmlzRW1wdHlS'@;
put 'b3c9ZnVuY3Rpb24oZ3Qpe3JldHVybiB0dC5pc0VtcHR5Um93LmNhbGwoZixndCl9LHRoaXMuaXNFbXB0eUNvbD1mdW5jdGlvbihndCl7cmV0dXJuIHR0LmlzRW1wdHlDb2wuY2FsbChmLGd0KX0sdGhpcy5zZWxlY3RDZWxsPWZ1bmN0aW9uKGd0LE90LGNuLE5uKXtsZXQgeG49IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XSl8fGFyZ3VtZW50c1s0XSxLbj0hKGFyZ3VtZW50cy5sZW5ndGg+NSYmdm9pZCAwIT09YXJndW1lbnRzWzVdKXx8YXJndW1lbnRzWzVdO3JldHVybiFpbChndCkmJiFpbChPdCkmJnRoaXMuc2VsZWN0Q2VsbHMoW1tndCxPdCxjbixO'@;
put 'bl1dLHhuLEtuKX0sdGhpcy5zZWxlY3RDZWxscz1mdW5jdGlvbigpe2xldCBjbj0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdOyExPT09KCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVu'@;
put 'dHNbMV0pJiYoaD0hMCk7Y29uc3QgTm49c24uc2VsZWN0Q2VsbHMoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltbXV0pO3JldHVybiBObiYmY24mJmYubGlzdGVuKCksaD0hMSxObn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKGd0'@;
put 'KXtyZXR1cm4gc24uc2VsZWN0Q29sdW1ucyhndCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06Z3QpfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24oZ3Qpe3JldHVybiBzbi5zZWxlY3RSb3dzKGd0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9p'@;
put 'ZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpndCl9LHRoaXMuZGVzZWxlY3RDZWxsPWZ1bmN0aW9uKCl7c24uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgZ3Q9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3Vt'@;
put 'ZW50c1swXTtjb25zdCBPdD1ndCYmdGhpcy5oYXNSb3dIZWFkZXJzKCksY249Z3QmJnRoaXMuaGFzQ29sSGVhZGVycygpO2g9ITAsc24uc2VsZWN0QWxsKE90LGNuKSxoPSExfTtjb25zdCBqbj0oZ3QsT3QpPT5ndC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoT3QsMSwhMCk7dGhpcy5zY3Jv'@;
put 'bGxWaWV3cG9ydFRvPWZ1bmN0aW9uKGd0LE90KXtsZXQgY249YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxObj1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO2NvbnN0IEtuPSFjbixQ'@;
put 'cj0hTm47bGV0IGpyPWd0LFFyPU90O2lmKCEoYXJndW1lbnRzLmxlbmd0aD40JiZ2b2lkIDAhPT1hcmd1bWVudHNbNF0pfHxhcmd1bWVudHNbNF0pe2NvbnN0IGpvPU51bWJlci5pc0ludGVnZXIoZ3QpLFRzPU51bWJlci5pc0ludGVnZXIoT3QpLHFvPWpvP2puKHRoaXMucm93SW5kZXhNYXBw'@;
put 'ZXIsZ3QpOnZvaWQgMCxzbD1Ucz9qbih0aGlzLmNvbHVtbkluZGV4TWFwcGVyLE90KTp2b2lkIDA7aWYobnVsbD09PXFvfHxudWxsPT09c2wpcmV0dXJuITE7anI9am8/Zi5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHFvKTp2b2lkIDAsUXI9VHM/Zi5jb2x1'@;
put 'bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHNsKTp2b2lkIDB9Y29uc3Qgbmk9TnVtYmVyLmlzSW50ZWdlcihqciksS3I9TnVtYmVyLmlzSW50ZWdlcihRcik7cmV0dXJuIG5pJiZLcj9mLnZpZXcuc2Nyb2xsVmlld3BvcnQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhq'@;
put 'cixRciksS24sTm4sY24sUHIpOm5pJiYhMT09PUtyP2Yudmlldy5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkoanIsS24sY24pOiEoIUtyfHwhMSE9PW5pKSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KFFyLE5uLFByKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5f'@;
put 'Y2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygpLGYudmlldyYmZi52aWV3LmRlc3Ryb3koKSxZJiZZLmRlc3Ryb3koKSxZPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksSmUuY2xlYXJDYWNoZSgpLEhqKGYpKXtjb25zdCBndD10aGlzLnJvb3REb2N1'@;
put 'bWVudC5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7Z3QmJmd0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZ3QpfWgyKGYucm9vdEVsZW1lbnQpLHYuZGVzdHJveSgpLGZlJiZmZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBw'@;
put 'ZXIudW5yZWdpc3RlckFsbCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLHd0LmdldEl0ZW1zKCkuZm9yRWFjaChndD0+e2xldFssT3RdPWd0O090LmRlc3Ryb3koKX0pLHd0LmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxhby5nZXRTaW5nbGV0'@;
put 'b24oKS5kZXN0cm95KGYpLHlzKGYsKGd0LE90LGNuKT0+e29sKGd0KT9jbltPdF09ZnVuY3Rpb24gVXIoZ3Qpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7Z3R9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhh'@;
put 'cyBiZWVuIGRlc3Ryb3llZGApfX0oT3QpOiJndWlkIiE9PU90JiYoY25bT3RdPW51bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxUJiZULmRlc3Ryb3koKSxUPW51bGwscmU9bnVsbCxzbj1udWxsLGZlPW51bGwsZj1udWxsfSx0aGlzLmdldEFjdGl2ZUVkaXRvcj1mdW5jdGlvbigpe3JldHVybiBm'@;
put 'ZS5nZXRBY3RpdmVFZGl0b3IoKX0sdGhpcy5nZXRQbHVnaW49ZnVuY3Rpb24oZ3Qpe2NvbnN0IE90PWEwKGd0KTtyZXR1cm4iVW5kb1JlZG8iPT09T3Q/dGhpcy51bmRvUmVkbzp3dC5nZXRJdGVtKE90KX0sdGhpcy5nZXRQbHVnaW5OYW1lPWZ1bmN0aW9uKGd0KXtyZXR1cm4gZ3Q9PT10aGlz'@;
put 'LnVuZG9SZWRvP3RoaXMudW5kb1JlZG8uY29uc3RydWN0b3IuUExVR0lOX0tFWTp3dC5nZXRJZChndCl9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oKXtyZXR1cm4gZn0sdGhpcy5hZGRIb29rPWZ1bmN0aW9uKGd0LE90KXthby5nZXRTaW5nbGV0b24oKS5hZGQoZ3QsT3QsZil9LHRoaXMu'@;
put 'aGFzSG9vaz1mdW5jdGlvbihndCl7cmV0dXJuIGFvLmdldFNpbmdsZXRvbigpLmhhcyhndCxmKXx8YW8uZ2V0U2luZ2xldG9uKCkuaGFzKGd0KX0sdGhpcy5hZGRIb29rT25jZT1mdW5jdGlvbihndCxPdCl7YW8uZ2V0U2luZ2xldG9uKCkub25jZShndCxPdCxmKX0sdGhpcy5yZW1vdmVIb29r'@;
put 'PWZ1bmN0aW9uKGd0LE90KXthby5nZXRTaW5nbGV0b24oKS5yZW1vdmUoZ3QsT3QsZil9LHRoaXMucnVuSG9va3M9ZnVuY3Rpb24oZ3QsT3QsY24sTm4seG4sS24sUHIpe3JldHVybiBhby5nZXRTaW5nbGV0b24oKS5ydW4oZixndCxPdCxjbixObix4bixLbixQcil9LHRoaXMuZ2V0VHJhbnNs'@;
put 'YXRlZFBocmFzZT1mdW5jdGlvbihndCxPdCl7cmV0dXJuIGNzZSh0dC5sYW5ndWFnZSxndCxPdCl9LHRoaXMudG9IVE1MPSgpPT5jaih0aGlzKSx0aGlzLnRvVGFibGVFbGVtZW50PSgpPT57Y29uc3QgZ3Q9dGhpcy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGd0'@;
put 'Lmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsY2oodGhpcykpLGd0LmZpcnN0RWxlbWVudENoaWxkfSx0aGlzLnRpbWVvdXRzPVtdLHRoaXMuX3JlZ2lzdGVyVGltZW91dD1mdW5jdGlvbihndCl7bGV0IGNuPWd0OyJmdW5jdGlvbiI9PXR5cGVvZiBjbiYmKGNuPXNldFRpbWVvdXQo'@;
put 'Y24sYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApKSx0aGlzLnRpbWVvdXRzLnB1c2goY24pfSx0aGlzLl9jbGVhclRpbWVvdXRzPWZ1bmN0aW9uKCl7Um4odGhpcy50aW1lb3V0cyxndD0+e2NsZWFyVGltZW91dChndCl9KX0sdGhpcy5p'@;
put 'bW1lZGlhdGVzPVtdLHRoaXMuX3JlZ2lzdGVySW1tZWRpYXRlPWZ1bmN0aW9uKGd0KXt0aGlzLmltbWVkaWF0ZXMucHVzaChzZXRJbW1lZGlhdGUoZ3QpKX0sdGhpcy5fY2xlYXJJbW1lZGlhdGVzPWZ1bmN0aW9uKCl7Um4odGhpcy5pbW1lZGlhdGVzLGd0PT57Y2xlYXJJbW1lZGlhdGUoZ3Qp'@;
put 'fSl9LHRoaXMuX3JlZnJlc2hCb3JkZXJzPWZ1bmN0aW9uKCl7bGV0IE90PSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV07ZmUuZGVzdHJveUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJn'@;
put 'dW1lbnRzWzBdKSxmLnZpZXcucmVuZGVyKCksT3QmJnNuLmlzU2VsZWN0ZWQoKSYmZmUucHJlcGFyZUVkaXRvcigpfSx0aGlzLmlzUnRsPWZ1bmN0aW9uKCl7cmV0dXJuInJ0bCI9PT1mLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShmLnJvb3RFbGVtZW50KS5kaXJlY3Rpb259LHRoaXMu'@;
put 'aXNMdHI9ZnVuY3Rpb24oKXtyZXR1cm4hZi5pc1J0bCgpfSx0aGlzLmdldERpcmVjdGlvbkZhY3Rvcj1mdW5jdGlvbigpe3JldHVybiBmLmlzTHRyKCk/MTotMX07Y29uc3QgZXI9eU5lKHtoYW5kbGVFdmVudDpndD0+Zi5pc0xpc3RlbmluZygpJiZ2b2lkIDAhPT1ndD8ua2V5LGJlZm9yZUtl'@;
put 'eURvd246Z3Q9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURvd24iLGd0KSxhZnRlcktleURvd246Z3Q9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsZ3QpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJl'@;
put 'Zm9yZU9uQ2VsbE1vdXNlRG93biIsZ3Q9PnshMT09PWd0LmN0cmxLZXkmJiExPT09Z3QubWV0YUtleSYmZXIucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBlcn07Y29uc3QgRHI9ZXIuYWRkQ29udGV4dCgiZ3JpZCIpLEVy'@;
put 'PXtydW5Pbmx5SWY6KCk9PmVvKGYuZ2V0U2VsZWN0ZWQoKSkmJmYuY291bnRSZW5kZXJlZFJvd3MoKT4wJiZmLmNvdW50UmVuZGVyZWRDb2xzKCk+MCxncm91cDpiTmV9O2VyLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksRHIuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJDb250cm9sL01l'@;
put 'dGEiLCJBIl1dLGNhbGxiYWNrOigpPT57Zi5zZWxlY3RBbGwoKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgZ3Q9Zi5nZXRTZWxlY3RlZFJhbmdlKCkse3JvdzpPdCxjb2w6Y259PWd0W2d0Lmxlbmd0aC0xXS5oaWdobGlnaHQsTm49Zi5n'@;
put 'ZXREYXRhQXRDZWxsKE90LGNuKSx4bj1uZXcgTWFwO2ZvcihsZXQgS249MDtLbjxndC5sZW5ndGg7S24rKylndFtLbl0uZm9yQWxsKChQcixqcik9PntpZihQcj49MCYmanI+PTAmJihQciE9PU90fHxqciE9PWNuKSl7Y29uc3R7cmVhZE9ubHk6UXJ9PWYuZ2V0Q2VsbE1ldGEoUHIsanIpO1Fy'@;
put 'fHx4bi5zZXQoYCR7UHJ9eCR7anJ9YCxbUHIsanIsTm5dKX19KTtmLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbSh4bi52YWx1ZXMoKSkpfSxydW5Pbmx5SWY6KCk9PmYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRDZWxsc0NvdW50KCk+MX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFj'@;
put 'azooKT0+e3NuLnRyYW5zZm9ybVN0YXJ0KC0xLDApfX0se2tleXM6W1siQXJyb3dVcCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e3NuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RI'@;
put 'aWRkZW5JbmRleCgwLDEpLGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQuY29sKSl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntzbi50cmFuc2Zvcm1FbmQoLTEsMCl9fSx7a2V5czpbWyJBcnJvd1VwIiwiU2hpZnQiLCJDb250cm9sL01ldGEi'@;
put 'XV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdHtmcm9tOmd0LHRvOk90fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksY249Zi5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoMCwxKTtzbi5zZXRSYW5nZVN0YXJ0KGd0LmNsb25lKCkpLHNuLnNldFJh'@;
put 'bmdlRW5kKGYuX2NyZWF0ZUNlbGxDb29yZHMoY24sT3QuY29sKSl9LHJ1bk9ubHlJZjooKT0+IShmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Zi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9'@;
put 'Pntzbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57c24uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRl'@;
put 'bkluZGV4KGYuY291bnRSb3dzKCktMSwtMSksZi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5jb2wpKX19LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57c24udHJhbnNmb3JtRW5kKDEsMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIs'@;
put 'IkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0e2Zyb206Z3QsdG86T3R9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxjbj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygpLTEsLTEpO3NuLnNldFJh'@;
put 'bmdlU3RhcnQoZ3QuY2xvbmUoKSksc24uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3JkcyhjbixPdC5jb2wpKX0scnVuT25seUlmOigpPT4hKGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxmLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlz'@;
put 'OltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3NuLnRyYW5zZm9ybVN0YXJ0KDAsLTEqZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd0xlZnQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBndD1mLmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0LnJvdyxPdD1mLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCguLi5mLmlzUnRsKCk/W2YuY291bnRDb2xzKCktMSwtMV06WzAsMV0pO3NuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhndCxPdCkpfX0s'@;
put 'e2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntzbi50cmFuc2Zvcm1FbmQoMCwtMSpmLmdldERpcmVjdGlvbkZhY3RvcigpKX19LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57'@;
put 'Y29uc3R7ZnJvbTpndCx0bzpPdH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bZi5jb3VudENvbHMoKS0xLC0xXTpbMCwxXSk7c24uc2V0UmFuZ2VTdGFydChndC5jbG9uZSgpKSxz'@;
put 'bi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKE90LnJvdyxjbikpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFj'@;
put 'azooKT0+e3NuLnRyYW5zZm9ybVN0YXJ0KDAsZi5nZXREaXJlY3Rpb25GYWN0b3IoKSl9fSx7a2V5czpbWyJBcnJvd1JpZ2h0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3QgZ3Q9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5y'@;
put 'b3csT3Q9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uZi5pc1J0bCgpP1swLDFdOltmLmNvdW50Q29scygpLTEsLTFdKTtzbi5zZXRSYW5nZVN0YXJ0KGYuX2NyZWF0ZUNlbGxDb29yZHMoZ3QsT3QpKX19LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlm'@;
put 'dCJdXSxjYWxsYmFjazooKT0+e3NuLnRyYW5zZm9ybUVuZCgwLGYuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT57Y29uc3R7ZnJvbTpndCx0bzpPdH09Zi5nZXRT'@;
put 'ZWxlY3RlZFJhbmdlTGFzdCgpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmYuaXNSdGwoKT9bMCwxXTpbZi5jb3VudENvbHMoKS0xLC0xXSk7c24uc2V0UmFuZ2VTdGFydChndC5jbG9uZSgpKSxzbi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxs'@;
put 'Q29vcmRzKE90LnJvdyxjbikpfSxydW5Pbmx5SWY6KCk9PiEoZi5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGYuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKX0se2tleXM6W1siSG9tZSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+e2NvbnN0IGd0PXBh'@;
put 'cnNlSW50KGYuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCwxMCksT3Q9Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csY249Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZ3QsMSk7c24uc2V0UmFuZ2VTdGFydChmLl9jcmVh'@;
put 'dGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntzbi5zZXRSYW5nZUVuZChmLl9jcmVhdGVDZWxsQ29vcmRzKHNuLnNlbGVj'@;
put 'dGVkUmFuZ2UuY3VycmVudCgpLmZyb20ucm93LGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSkpKX19LHtrZXlzOltbIkhvbWUiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBndD1wYXJzZUludChmLmdl'@;
put 'dFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wLDEwKSxPdD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGd0LDEpLE5uPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5v'@;
put 'dEhpZGRlbkluZGV4KE90LDEpO3NuLnNldFJhbmdlU3RhcnQoZi5fY3JlYXRlQ2VsbENvb3JkcyhjbixObikpfSxydW5Pbmx5SWY6KCk9PmYudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNr'@;
put 'OigpPT57c24uc2V0UmFuZ2VTdGFydChmLl9jcmVhdGVDZWxsQ29vcmRzKGYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSkpKX0scnVuT25seUlmOigpPT5m'@;
put 'LnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT57c24uc2V0UmFuZ2VFbmQoZi5fY3JlYXRlQ2VsbENvb3Jkcyhzbi5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKS5mcm9tLnJvdyxmLmNvbHVtbklu'@;
put 'ZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Q29scygpLTEsLTEpKSl9fSx7a2V5czpbWyJFbmQiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9Pntjb25zdCBndD1wYXJzZUludChmLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90'@;
put 'dG9tLDEwKSxPdD1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChmLmNvdW50Um93cygpLWd0LTEsLTEpLGNuPWYuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY291bnRDb2xzKCktMSwtMSk7c24uc2V0UmFuZ2VTdGFydChmLl9j'@;
put 'cmVhdGVDZWxsQ29vcmRzKE90LGNuKSl9LHJ1bk9ubHlJZjooKT0+Zi52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9Pntzbi50cmFuc2Zvcm1TdGFydCgtZi5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7'@;
put 'a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0e3RvOmd0fT1mLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksT3Q9TWF0aC5tYXgoZ3Qucm93LWYuY291bnRWaXNpYmxlUm93cygpLDApLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4'@;
put 'KE90LDEpO2lmKG51bGwhPT1jbil7Y29uc3QgTm49Zi5fY3JlYXRlQ2VsbENvb3JkcyhjbixndC5jb2wpLHhuPWd0LnJvdy1mLnZpZXcuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKSxLbj1NYXRoLm1heChObi5yb3cteG4sMCk7c24uc2V0UmFuZ2VFbmQoTm4pLGYuc2Nyb2xsVmlld3BvcnRU'@;
put 'byhLbil9fX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntzbi50cmFuc2Zvcm1TdGFydChmLmNvdW50VmlzaWJsZVJvd3MoKSwwKX19LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHt0bzpndH09Zi5nZXRTZWxlY3RlZFJhbmdlTGFz'@;
put 'dCgpLE90PU1hdGgubWluKGd0LnJvdytmLmNvdW50VmlzaWJsZVJvd3MoKSxmLmNvdW50Um93cygpLTEpLGNuPWYucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE90LC0xKTtpZihudWxsIT09Y24pe2NvbnN0IE5uPWYuX2NyZWF0ZUNlbGxDb29yZHMoY24sZ3QuY29s'@;
put 'KSx4bj1ndC5yb3ctZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksS249TWF0aC5taW4oTm4ucm93LXhuLGYuY291bnRSb3dzKCktMSk7c24uc2V0UmFuZ2VFbmQoTm4pLGYuc2Nyb2xsVmlld3BvcnRUbyhLbil9fX0se2tleXM6W1siVGFiIl1dLGNhbGxiYWNrOmd0PT57Y29uc3Qg'@;
put 'T3Q9ImZ1bmN0aW9uIj09dHlwZW9mIHR0LnRhYk1vdmVzP3R0LnRhYk1vdmVzKGd0KTp0dC50YWJNb3Zlcztzbi50cmFuc2Zvcm1TdGFydChPdC5yb3csT3QuY29sLCEwKX19LHtrZXlzOltbIlNoaWZ0IiwiVGFiIl1dLGNhbGxiYWNrOmd0PT57Y29uc3QgT3Q9ImZ1bmN0aW9uIj09dHlwZW9m'@;
put 'IHR0LnRhYk1vdmVzP3R0LnRhYk1vdmVzKGd0KTp0dC50YWJNb3Zlcztzbi50cmFuc2Zvcm1TdGFydCgtT3Qucm93LC1PdC5jb2wpfX1dLEVyKSxtaigpLmZvckVhY2goZ3Q9Pntjb25zdCBPdD1ndyhndCk7d3QuYWRkSXRlbShndCxuZXcgT3QodGhpcykpfSksYW8uZ2V0U2luZ2xldG9uKCku'@;
put 'cnVuKGYsImNvbnN0cnVjdCIpfWNvbnN0IE1zZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2soYyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9v'@;
put 'a3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtSbih0aGlzLl9ob29rc1N0b3JhZ2VbY118fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe3lzKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29r'@;
put 'c0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtDZihNc2UsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVyZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgTU5lPU1zZSx4dT1PYmplY3QuZnJlZXplKHtWSVJHSU46IlNUQVRFX1ZJUkdJTiIsRURJVElO'@;
put 'RzoiU1RBVEVfRURJVElORyIsV0FJVElORzoiU1RBVEVfV0FJVElORyIsRklOSVNIRUQ6IlNUQVRFX0ZJTklTSEVEIn0pLEVZPSJiYXNlRWRpdG9yIjtjbGFzcyBTOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5p'@;
put 'bnN0YW5jZT1sLHRoaXMuc3RhdGU9eHUuVklSR0lOLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5fY2xvc2VDYWxsYmFjaz1udWxsLHRoaXMuVEQ9bnVsbCx0aGlzLnJvdz1udWxsLHRoaXMuY29sPW51bGwsdGhpcy5wcm9wPW51bGwsdGhpcy5vcmlnaW5hbFZh'@;
put 'bHVlPW51bGwsdGhpcy5jZWxsUHJvcGVydGllcz1udWxsLHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJhY2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9y'@;
put 'KCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhyb3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9'@;
put 'Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQiKX1wcmVwYXJlKGwsYSxkLGgsZix2KXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9'@;
put 'dix0aGlzLnN0YXRlPXh1LlZJUkdJTn1leHRlbmQoKXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLHY7aWYoYSl7Y29uc3QgX2U9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7ZD1NYXRoLm1heChNYXRoLm1pbihfZVsw'@;
put 'XSxfZVsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbihfZVsxXSxfZVszXSksMCksZj1NYXRoLm1heChfZVswXSxfZVsyXSksdj1NYXRoLm1heChfZVsxXSxfZVszXSl9ZWxzZVtkLGgsZix2XT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBUPXRoaXMuaG90LnJ1bkhvb2tz'@;
put 'KCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgpO0FycmF5LmlzQXJyYXkoVCkmJihbZCxoXT1UKTtjb25zdCByZT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxmZT17cnVuT25seUlmOigpPT5lbyh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91'@;
put 'cDpFWX07dGhpcy5pc0luRnVsbEVkaXRNb2RlKCkmJnJlLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMu'@;
put 'aG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgxLDApfX0se2tleXM6W1siQXJyb3dMZWZ0Il1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqdGhpcy5ob3QuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0se2tleXM6W1siQXJyb3dSaWdodCJd'@;
put 'XSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLHRoaXMuaG90LmdldERpcmVjdGlvbkZhY3RvcigpKX19XSxmZSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZix2LCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0'@;
put 'ZSE9PXh1LlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpO2lmKGQudmll'@;
put 'dy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpLHRoaXMuc3RhdGU9eHUuRURJVElORyx0aGlzLmlzSW5GdWxsRWRpdE1vZGUoKSl7Y29uc3Qgdj0ic3RyaW5nIj09dHlwZW9mIGw/bDokbCh0aGlzLm9yaWdpbmFsVmFsdWUpO3RoaXMuc2V0VmFsdWUodil9dGhpcy5v'@;
put 'cGVuKGEpLHRoaXMuX29wZW5lZD0hMCx0aGlzLmZvY3VzKCksZC52aWV3LnJlbmRlcigpLGQucnVuSG9va3MoImFmdGVyQmVnaW5FZGl0aW5nIix0aGlzLnJvdyx0aGlzLmNvbCl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29uc3QgVD10aGlzLl9jbG9zZUNhbGxiYWNrO3Ro'@;
put 'aXMuX2Nsb3NlQ2FsbGJhY2s9WT0+e1QmJlQoWSksZChZKSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX1pZih0aGlzLmlzV2FpdGluZygpKXJldHVybjtjb25zdCB2PXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpO2lmKHYucmVtb3ZlU2hvcnRjdXRz'@;
put 'QnlHcm91cChFWSksdi5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKERUKSx0aGlzLnN0YXRlIT09eHUuVklSR0lOKXtpZih0aGlzLnN0YXRlPT09eHUuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IFQ9dGhp'@;
put 'cy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJvcGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgVD9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChUfHwiIik6VF1dOltbVF1dLHRoaXMuc3RhdGU9eHUuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90'@;
put 'LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxsUHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIixZPT57dGhpcy5zdGF0ZT14dS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoWSl9KToodGhpcy5zdGF0ZT14dS5GSU5JU0hFRCx0aGlzLmRpc2Nh'@;
put 'cmRFZGl0b3IoITApKX19ZWxzZSB0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KX1jYW5jZWxDaGFuZ2VzKCl7dGhpcy5zdGF0ZT14dS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoKX1kaXNjYXJkRWRpdG9yKGwpe3RoaXMuc3RhdGU9'@;
put 'PT14dS5GSU5JU0hFRCYmKCExPT09bCYmITAhPT10aGlzLmNlbGxQcm9wZXJ0aWVzLmFsbG93SW52YWxpZD8odGhpcy5ob3Quc2VsZWN0Q2VsbCh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5mb2N1cygpLHRoaXMuc3RhdGU9eHUuRURJVElORyx0aGlzLl9maXJlQ2FsbGJhY2tzKCExKSk6KHRo'@;
put 'aXMuY2xvc2UoKSx0aGlzLl9vcGVuZWQ9ITEsdGhpcy5fZnVsbEVkaXRNb2RlPSExLHRoaXMuc3RhdGU9eHUuVklSR0lOLHRoaXMuX2ZpcmVDYWxsYmFja3MoITApLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIikpKX1lbmFibGVGdWxs'@;
put 'RWRpdE1vZGUoKXt0aGlzLl9mdWxsRWRpdE1vZGU9ITB9aXNJbkZ1bGxFZGl0TW9kZSgpe3JldHVybiB0aGlzLl9mdWxsRWRpdE1vZGV9aXNPcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfWlzV2FpdGluZygpe3JldHVybiB0aGlzLnN0YXRlPT09eHUuV0FJVElOR31nZXRFZGl0ZWRDZWxs'@;
put 'UmVjdCgpe3ZhciBsO2NvbnN0IGE9dGhpcy5nZXRFZGl0ZWRDZWxsKCk7aWYoIWEpcmV0dXJuO2NvbnN0e3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuaG90LnZpZXcuX3d0LGY9dGhpcy5ob3Qucm9vdFdpbmRvdyx2PVNjKGEpLFQ9TmEoYSksWT1TYyh0aGlzLmhvdC5yb290RWxl'@;
put 'bWVudCkscmU9TmEodGhpcy5ob3Qucm9vdEVsZW1lbnQpLGZlPWQudG9wT3ZlcmxheS5ob2xkZXIsX2U9ZC5pbmxpbmVTdGFydE92ZXJsYXkuaG9sZGVyLGtlPWZlIT09Zj9mZS5zY3JvbGxUb3A6MCxXZT1fZSE9PWY/X2Uuc2Nyb2xsTGVmdDowLEplPWYuaW5uZXJXaWR0aC1ZLmxlZnQtcmUs'@;
put 'e3d0VGFibGU6dHR9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QseXQ9dHQubmFtZSx3dD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKHl0KT9rZTowLEx0PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0u'@;
put 'aW5jbHVkZXMoeXQpP1dlOjA7bGV0IHNuPXYudG9wLVkudG9wLSh2LnRvcD09PVkudG9wPzA6MSktd3QsTW49MDtNbj10aGlzLmhvdC5pc1J0bCgpP2YuaW5uZXJXaWR0aC12LmxlZnQtVC1KZS0xK0x0OnYubGVmdC1ZLmxlZnQtMS1MdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVy'@;
put 'Il0uaW5jbHVkZXMoeXQpJiYoc24rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyh5dCkmJihNbis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgp'@;
put 'KSk7Y29uc3QgVm49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLHVyPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5yb3cpLFRyPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhp'@;
put 'cy5jb2wpLEhpPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIik7KFZuJiZ1cjw9MHx8dXI9PT1IaSkmJihzbis9MSksVHI8PTAmJihNbis9MSk7Y29uc3Qgd3I9'@;
put 'aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGFpPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbix0aT1NYXRoLmFicyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxqbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRp'@;
put 'b24oKSxVcj1mdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpLGVyPWEub2Zmc2V0VG9wK3dyLWpuO2xldCBEcj0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IG5pPWEub2Zmc2V0TGVmdDtEcj1uaT49MD90dC5nZXRXaWR0aCgpLWEub2Zmc2V0TGVmdDpNYXRoLmFicyhuaSksRHIrPWFpLXRp'@;
put 'LVR9ZWxzZSBEcj1hLm9mZnNldExlZnQrYWktdGk7Y29uc3QgRXI9cm0odGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KSxndD10aGlzLmhvdC5pc1J0bCgpPyJib3JkZXJSaWdodFdpZHRoIjoiYm9yZGVyTGVmdFdpZHRoIixPdD1wYXJzZUludChFcltndF0sMTApPjA/MDoxLGNuPXBhcnNl'@;
put 'SW50KEVyLmJvcmRlclRvcFdpZHRoLDEwKT4wPzA6MSxObj1OYShhKStPdCx4bj1WbChhKStjbixLbj16aWUoZmUpP1VyOjAsUHI9VWllKF9lKT9VcjowLGpyPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoRHIpLUtuK090O3JldHVybnt0b3A6c24sc3RhcnQ6TW4s'@;
put 'aGVpZ2h0OnhuLG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChlciktUHIrY24sMjMpLHdpZHRoOk5uLG1heFdpZHRoOmpyfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24o'@;
put 'KSl7Y2FzZSJpbmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9j'@;
put 'b3JuZXIgaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29y'@;
put 'bmVyIjtkZWZhdWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJu'@;
put 'IHRoaXMucm93PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90'@;
put 'dG9tJiZ0aGlzLnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5n'@;
put 'ZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0IiksYX19ZnVuY3Rpb24gU05lKCl7dmFyIGwsYz17bWluSGVpZ2h0OjIwMCxtYXhIZWlnaHQ6MzAwLG1pbldpZHRoOjEwMCxtYXhXaWR0aDozMDB9LGE9ZG9jdW1lbnQuYm9keSxkPWRvY3VtZW50LmNyZWF0'@;
put 'ZVRleHROb2RlKCIiKSxoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNQQU4iKSxmPWZ1bmN0aW9uKGtlLFdlLEplKXtrZS5hZGRFdmVudExpc3RlbmVyKFdlLEplLCExKX0sdj1mdW5jdGlvbihrZSxXZSxKZSl7a2UucmVtb3ZlRXZlbnRMaXN0ZW5lcihXZSxKZSwhMSl9LFQ9ZnVuY3Rpb24o'@;
put 'a2Upe3ZhciBXZSxKZTtrZT8vXlthLXpBLVogXC4sXFxcL1x8MC05XSQvLnRlc3Qoa2UpfHwoa2U9Ii4iKTprZT0iIix2b2lkIDAhPT1kLnRleHRDb250ZW50P2QudGV4dENvbnRlbnQ9bC52YWx1ZStrZTpkLmRhdGE9bC52YWx1ZStrZSxoLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC5z'@;
put 'dHlsZS5mb250U2l6ZT1fZShsKS5mb250U2l6ZSxoLnN0eWxlLmZvbnRGYW1pbHk9X2UobCkuZm9udEZhbWlseSxoLnN0eWxlLndoaXRlU3BhY2U9InByZSIsYS5hcHBlbmRDaGlsZChoKSxXZT1oLmNsaWVudFdpZHRoKzIsYS5yZW1vdmVDaGlsZChoKSxsLnN0eWxlLmhlaWdodD1jLm1pbkhl'@;
put 'aWdodCsicHgiLGwuc3R5bGUud2lkdGg9Yy5taW5XaWR0aD5XZT9jLm1pbldpZHRoKyJweCI6V2U+Yy5tYXhXaWR0aD9jLm1heFdpZHRoKyJweCI6V2UrInB4IixjLm1pbkhlaWdodD4oSmU9bC5zY3JvbGxIZWlnaHQ/bC5zY3JvbGxIZWlnaHQtMTowKT9sLnN0eWxlLmhlaWdodD1jLm1pbkhl'@;
put 'aWdodCsicHgiOmMubWF4SGVpZ2h0PEplPyhsLnN0eWxlLmhlaWdodD1jLm1heEhlaWdodCsicHgiLGwuc3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bC5zdHlsZS5oZWlnaHQ9SmUrInB4In0sWT1mdW5jdGlvbigpe3dpbmRvdy5zZXRUaW1lb3V0KFQsMCl9O2Z1bmN0aW9uIF9lKGtlKXty'@;
put 'ZXR1cm4ga2UuY3VycmVudFN0eWxlfHxkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGtlKX1yZXR1cm57aW5pdDpmdW5jdGlvbihrZSxXZSxKZSl7IWZ1bmN0aW9uKGtlLFdlLEplKXtsPWtlLGZ1bmN0aW9uKGtlKXtpZihrZSYma2UubWluSGVpZ2h0KWlmKCJpbmhlcml0'@;
put 'Ij09a2UubWluSGVpZ2h0KWMubWluSGVpZ2h0PWwuY2xpZW50SGVpZ2h0O2Vsc2V7dmFyIFdlPXBhcnNlSW50KGtlLm1pbkhlaWdodCk7aXNOYU4oV2UpfHwoYy5taW5IZWlnaHQ9V2UpfWlmKGtlJiZrZS5tYXhIZWlnaHQpaWYoImluaGVyaXQiPT1rZS5tYXhIZWlnaHQpYy5tYXhIZWlnaHQ9'@;
put 'bC5jbGllbnRIZWlnaHQ7ZWxzZXt2YXIgSmU9cGFyc2VJbnQoa2UubWF4SGVpZ2h0KTtpc05hTihKZSl8fChjLm1heEhlaWdodD1KZSl9aWYoa2UmJmtlLm1pbldpZHRoKWlmKCJpbmhlcml0Ij09a2UubWluV2lkdGgpYy5taW5XaWR0aD1sLmNsaWVudFdpZHRoO2Vsc2V7dmFyIHR0PXBhcnNl'@;
put 'SW50KGtlLm1pbldpZHRoKTtpc05hTih0dCl8fChjLm1pbldpZHRoPXR0KX1pZihrZSYma2UubWF4V2lkdGgpaWYoImluaGVyaXQiPT1rZS5tYXhXaWR0aCljLm1heFdpZHRoPWwuY2xpZW50V2lkdGg7ZWxzZXt2YXIgeXQ9cGFyc2VJbnQoa2UubWF4V2lkdGgpO2lzTmFOKHl0KXx8KGMubWF4'@;
put 'V2lkdGg9eXQpfWguZmlyc3RDaGlsZHx8KGguY2xhc3NOYW1lPSJhdXRvUmVzaXplIixoLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIsaC5hcHBlbmRDaGlsZChkKSl9KFdlKSwiVEVYVEFSRUEiPT1sLm5vZGVOYW1lJiYobC5zdHlsZS5yZXNpemU9Im5vbmUiLGwuc3R5bGUub3ZlcmZs'@;
put 'b3dZPSIiLGwuc3R5bGUuaGVpZ2h0PWMubWluSGVpZ2h0KyJweCIsbC5zdHlsZS5taW5XaWR0aD1jLm1pbldpZHRoKyJweCIsbC5zdHlsZS5tYXhXaWR0aD1jLm1heFdpZHRoKyJweCIsbC5zdHlsZS5vdmVyZmxvd1k9ImhpZGRlbiIpLEplJiYoZihsLCJjaGFuZ2UiLFQpLGYobCwiY3V0IixZ'@;
put 'KSxmKGwsInBhc3RlIixZKSxmKGwsImRyb3AiLFkpLGYobCwia2V5ZG93biIsWSksZihsLCJmb2N1cyIsVCksZihsLCJjb21wb3NpdGlvbnN0YXJ0IixZKSxmKGwsImNvbXBvc2l0aW9udXBkYXRlIixZKSxmKGwsImNvbXBvc2l0aW9uZW5kIixZKSksVCgpfShrZSxXZSxKZSl9LHVuT2JzZXJ2'@;
put 'ZTpmdW5jdGlvbigpe3YobCwiY2hhbmdlIixUKSx2KGwsImN1dCIsWSksdihsLCJwYXN0ZSIsWSksdihsLCJkcm9wIixZKSx2KGwsImtleWRvd24iLFkpLHYobCwiZm9jdXMiLFQpLHYobCwiY29tcG9zaXRpb25zdGFydCIsWSksdihsLCJjb21wb3NpdGlvbnVwZGF0ZSIsWSksdihsLCJjb21w'@;
put 'b3NpdGlvbmVuZCIsWSl9LHJlc2l6ZTpUfX1mdW5jdGlvbiBDc2UoYyxsKXtjb25zdCBhPVdWKGwpLGQ9bC52YWx1ZS5zcGxpdCgiXG4iKTtsZXQgaD1hLGY9MDtmb3IobGV0IHY9MDt2PGQubGVuZ3RoO3YrKyl7MCE9PXYmJihmKz1kW3YtMV0ubGVuZ3RoKzEpO2NvbnN0IFk9ZitkW3ZdLmxl'@;
put 'bmd0aDtpZigiaG9tZSI9PT1jP2g9ZjoiZW5kIj09PWMmJihoPVkpLGE8PVkpYnJlYWt9ZHcobCxoKX1HYShTOSxNTmUpO2NvbnN0IHJEPSJodF9lZGl0b3JfaGlkZGVuIixTc2U9InRleHRFZGl0b3IiO2NsYXNzICRnIGV4dGVuZHMgUzl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVy'@;
put 'biJ0ZXh0In1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamwodGhpcyksdGhpcy5hdXRvUmVzaXplPVNOZSgpLHRoaXMuVEVYVEFSRUE9dm9pZCAwLHRoaXMudGV4dGFyZWFTdHlsZT12b2lkIDAsdGhpcy5URVhUQVJFQV9QQVJFTlQ9dm9pZCAwLHRoaXMu'@;
put 'dGV4dGFyZWFQYXJlbnRTdHlsZT12b2lkIDAsdGhpcy5sYXllckNsYXNzPXZvaWQgMCx0aGlzLmNyZWF0ZUVsZW1lbnRzKCksdGhpcy5iaW5kRXZlbnRzKCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PnRoaXMuZGVzdHJveSgpKX1nZXRWYWx1ZSgpe3JldHVybiB0'@;
put 'aGlzLlRFWFRBUkVBLnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuVEVYVEFSRUEudmFsdWU9bH1vcGVuKCl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJl'@;
put 'ZGl0b3IiKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT50aGlzLm9uQWZ0ZXJEb2N1bWVudEtleURvd24oYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0'@;
put 'aXZlRWxlbWVudD09PXRoaXMuVEVYVEFSRUEmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMucmVtb3ZlSG9va3NCeUtleSgiYWZ0ZXJEb2N1bWVudEtleURvd24iKX1wcmVwYXJlKGwsYSxkLGgsZix2'@;
put 'KXtjb25zdCBUPXRoaXMuc3RhdGU7aWYoc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdiksIXYucmVhZE9ubHkpe3RoaXMucmVmcmVzaERpbWVuc2lvbnMoITApO2NvbnN0e2FsbG93SW52YWxpZDpZLGZyYWdtZW50U2VsZWN0aW9uOnJlfT12O1kmJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiKSxU'@;
put 'IT09eHUuRklOSVNIRUQmJnRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLCFyZSYmIWYyKCkmJnRoaXMuZm9jdXMoKX19YmVnaW5FZGl0aW5nKGwsYSl7dGhpcy5zdGF0ZT09PXh1LlZJUkdJTiYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIsc3VwZXIuYmVnaW5FZGl0aW5nKGwsYSkpfWZvY3Vz'@;
put 'KCl7dGhpcy5URVhUQVJFQS5zZWxlY3QoKSxkdyh0aGlzLlRFWFRBUkVBLHRoaXMuVEVYVEFSRUEudmFsdWUubGVuZ3RoKX1jcmVhdGVFbGVtZW50cygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlzLlRFWFRBUkVBPWwuY3JlYXRlRWxlbWVudCgiVEVYVEFSRUEiKSx0aGlz'@;
put 'LlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVBLnRhYkluZGV4PS0xLHdpKHRoaXMuVEVYVEFSRUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxl'@;
put 'LndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVYVEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIiksd2kodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9s'@;
put 'ZGVyIiksUW8odGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYmc3ModGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSx3aSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxyRCksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0'@;
put 'eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7ZW9lKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVu'@;
put 'dD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4Iixzcyh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xh'@;
put 'c3MpLHdpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHJEKX1zaG93RWRpdGFibGVFbGVtZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRo'@;
put 'aXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0IjoicmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9Imhp'@;
put 'ZGRlbiI7Y29uc3QgbD10aGlzLlRFWFRBUkVBX1BBUkVOVC5jaGlsZE5vZGVzO2xldCBhPSExO01vKGwubGVuZ3RoLTEsZD0+e2lmKFFvKGxbZF0sImhhbmRzb250YWJsZUVkaXRvciIpKXJldHVybiBhPSEwLCExfSksUW8odGhpcy5URVhUQVJFQV9QQVJFTlQsckQpJiZzcyh0aGlzLlRFWFRB'@;
put 'UkVBX1BBUkVOVCxyRCksYT8odGhpcy5sYXllckNsYXNzPSJodF9lZGl0b3JfdmlzaWJsZSIsd2kodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSk6KHRoaXMubGF5ZXJDbGFzcz10aGlzLmdldEVkaXRlZENlbGxzTGF5ZXJDbGFzcygpLHdpKHRoaXMuVEVYVEFSRUFfUEFS'@;
put 'RU5ULHRoaXMubGF5ZXJDbGFzcykpfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh0aGlzLnJvdyksYT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKGwsdGhpcy5jb2wpO3RoaXMub3JpZ2luYWxWYWx1ZT1hLHRoaXMuc2V0VmFsdWUoYSksdGhpcy5y'@;
put 'ZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLnN0YXRlIT09eHUuRURJVElORyYmIWwpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRD'@;
put 'ZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQobHx8dGhpcy5jbG9zZSgpKTtjb25zdHt0b3A6YSxzdGFydDpkLHdpZHRoOmgsbWF4V2lkdGg6ZixoZWlnaHQ6dixtYXhIZWlnaHQ6VH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpO3RoaXMudGV4dGFyZWFQYXJlbnRTdHlsZS50b3A9YCR7YX1w'@;
put 'eGAsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2R9cHhgLHRoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpO2NvbnN0IFk9cm0odGhpcy5URCx0aGlzLmhvdC5yb290V2luZG93KTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXpl'@;
put 'PVkuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PVkuZm9udEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJhY2tncm91bmRDb2xvcjtjb25zdCByZT1ybSh0aGlzLlRFWFRBUkVBKSxmZT1wYXJzZUludChyZS5w'@;
put 'YWRkaW5nTGVmdCwxMCkrcGFyc2VJbnQocmUucGFkZGluZ1JpZ2h0LDEwKSxfZT1wYXJzZUludChyZS5wYWRkaW5nVG9wLDEwKStwYXJzZUludChyZS5wYWRkaW5nQm90dG9tLDEwKSxXZT12LV9lLEplPWYtZmUsdHQ9VC1fZTt0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHtt'@;
put 'aW5XaWR0aDpNYXRoLm1pbihoLWZlLEplKSxtaW5IZWlnaHQ6TWF0aC5taW4oV2UsdHQpLG1heFdpZHRoOkplLG1heEhlaWdodDp0dH0sITApfWJpbmRFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuVEVYVEFSRUEsImN1dCIsbD0+bC5zdG9wUHJvcGFn'@;
put 'YXRpb24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJwYXN0ZSIsbD0+bC5zdG9wUHJvcGFnYXRpb24oKSksUVYoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMu'@;
put 'ZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhv'@;
put 'b2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZvY3VzKCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUm93UmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLmZvY3VzKCl9KX1hbGxvd0tleUV2ZW50UHJvcGFnYXRp'@;
put 'b24oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNsZWFySG9va3MoKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksaD0oKT0+e3RoaXMuaG90LnJvb3REb2N1'@;
put 'bWVudC5leGVjQ29tbWFuZCgiaW5zZXJ0VGV4dCIsITEsIlxuIil9O2EuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiB2LnRhYk1vdmVzP3YudGFiTW92ZXMoZik6di50'@;
put 'YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoVC5yb3csVC5jb2wsITApfX0se2tleXM6W1siU2hpZnQiLCJUYWIiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxUPSJmdW5jdGlvbiI9PXR5cGVvZiB2LnRhYk1vdmVzP3YudGFi'@;
put 'TW92ZXMoZik6di50YWJNb3Zlczt0aGlzLmhvdC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLVQucm93LC1ULmNvbCl9fSx7a2V5czpbWyJDb250cm9sIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJ1bk9ubHlJZjpmPT4hdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUo'@;
put 'KSYmIWYuYWx0S2V5LHJlbGF0aXZlVG9Hcm91cDptdyxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siTWV0YSIsIkVudGVyIl1dLGNhbGxiYWNrOigpPT4oaCgpLCExKSxydW5Pbmx5SWY6KCk9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpLHJlbGF0aXZlVG9Hcm91cDptdyxw'@;
put 'b3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpLHJlbGF0aXZlVG9Hcm91cDptdyxwb3NpdGlvbjoiYmVmb3JlIn0se2tleXM6W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57dGhpcy5ob3Quc2VsZWN0aW9uLnRyYW5zZm9ybVN0'@;
put 'YXJ0KC10aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJQYWdlRG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuaG90LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCh0aGlzLmhvdC5jb3VudFZpc2libGVSb3dzKCksMCl9fSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNr'@;
put 'OihmLHYpPT57bGV0W1RdPXY7Q3NlKFQsdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJFbmQiXV0sY2FsbGJhY2s6KGYsdik9PntsZXRbVF09djtDc2UoVCx0aGlzLlRFWFRBUkVBKX19LHtrZXlzOltbIkNvbnRyb2wvTWV0YSIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9'@;
put 'Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57dGhpcy5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIloiXV0scHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6KCk9Pnt0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57'@;
put 'dGhpcy5hdXRvUmVzaXplLnJlc2l6ZSgpfSwxMCl9fV0se3J1bk9ubHlJZjooKT0+ZW8odGhpcy5ob3QuZ2V0U2VsZWN0ZWQoKSksZ3JvdXA6U3NlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9y'@;
put 'Iik7YS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKERUKSxhLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoU3NlKSxhLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRVkpfW9uQWZ0ZXJEb2N1bWVudEtleURvd24obCl7LTE9PT1bdW8uQVJST1dfVVAsdW8uQVJST1dfUklHSFQsdW8uQVJST1dfRE9XTix1'@;
put 'by5BUlJPV19MRUZUXS5pbmRleE9mKGwua2V5Q29kZSkmJnRoaXMuYXV0b1Jlc2l6ZS5yZXNpemUoU3RyaW5nLmZyb21DaGFyQ29kZShsLmtleUNvZGUpKX19ZnVuY3Rpb24gQXcoYyxsLGEsZCxoLGYsdil7Y29uc3QgVD1bXSxZPVtdO3YuY2xhc3NOYW1lJiZ3aShsLHYuY2xhc3NOYW1lKSx2'@;
put 'LnJlYWRPbmx5JiZULnB1c2godi5yZWFkT25seUNlbGxDbGFzc05hbWUpLCExPT09di52YWxpZCYmdi5pbnZhbGlkQ2VsbENsYXNzTmFtZT9ULnB1c2godi5pbnZhbGlkQ2VsbENsYXNzTmFtZSk6WS5wdXNoKHYuaW52YWxpZENlbGxDbGFzc05hbWUpLCExPT09di53b3JkV3JhcCYmdi5ub1dv'@;
put 'cmRXcmFwQ2xhc3NOYW1lJiZULnB1c2godi5ub1dvcmRXcmFwQ2xhc3NOYW1lKSwhZiYmdi5wbGFjZWhvbGRlciYmVC5wdXNoKHYucGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lKSxzcyhsLFkpLHdpKGwsVCl9ZnVuY3Rpb24gY20oYyxsLGEsZCxoLGYsdil7QXcuYXBwbHkodGhpcyxbYyxsLGEs'@;
put 'ZCxoLGYsdl0pO2xldCBUPWY7aWYoIVQmJnYucGxhY2Vob2xkZXImJihUPXYucGxhY2Vob2xkZXIpLFQ9JGwoVCksdi50cmltV2hpdGVzcGFjZSYmKFQ9VC50cmltKCkpLHYucmVuZGVyZXJUZW1wbGF0ZSl7aDIobCk7Y29uc3QgWT1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJURU1Q'@;
put 'TEFURSIpO1kuc2V0QXR0cmlidXRlKCJiaW5kIiwie3t9fSIpLFkuaW5uZXJIVE1MPXYucmVuZGVyZXJUZW1wbGF0ZSxIVE1MVGVtcGxhdGVFbGVtZW50LmRlY29yYXRlKFkpLFkubW9kZWw9Yy5nZXRTb3VyY2VEYXRhQXRSb3coYSksbC5hcHBlbmRDaGlsZChZKX1lbHNlIG5tKGwsVCl9QXcu'@;
put 'UkVOREVSRVJfVFlQRT0iYmFzZSIsY20uUkVOREVSRVJfVFlQRT0idGV4dCI7Y29uc3QgeHNlPXtDRUxMX1RZUEU6InRleHQiLGVkaXRvcjokZyxyZW5kZXJlcjpjbX07ZnVuY3Rpb24gXzIoYyxsKXtjb25zdCBhPW5ldyBrWShjLGx8fHt9LEZqKTtyZXR1cm4gYS5pbml0KCksYX1nMih4c2Up'@;
put 'LF8yLmVkaXRvcnM9e0Jhc2VFZGl0b3I6Uzl9LF8yLkNvcmU9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBrWShjLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxGail9LF8yLkRlZmF1bHRTZXR0aW5ncz1tc2UoKSxfMi5ob29rcz1hby5n'@;
put 'ZXRTaW5nbGV0b24oKSxfMi5DZWxsQ29vcmRzPUZULF8yLkNlbGxSYW5nZT1TaixfMi5wYWNrYWdlTmFtZT0iaGFuZHNvbnRhYmxlIixfMi5idWlsZERhdGU9IjMxLzA4LzIwMjMgMDg6MjM6MzMiLF8yLnZlcnNpb249IjEzLjEuMCIsXzIubGFuZ3VhZ2VzPXtkaWN0aW9uYXJ5S2V5czpmSGUs'@;
put 'Z2V0TGFuZ3VhZ2VEaWN0aW9uYXJ5OmxzZSxnZXRMYW5ndWFnZXNEaWN0aW9uYXJpZXM6ZnVuY3Rpb24gdkhlKCl7cmV0dXJuIGdIZSgpfSxyZWdpc3Rlckxhbmd1YWdlRGljdGlvbmFyeTphc2UsZ2V0VHJhbnNsYXRlZFBocmFzZTpjc2V9O2NvbnN0IENzPV8yLEROZT1bImNvbnRhaW5lciJd'@;
put 'LFRZPW5ldyBNYXAsa3NlPSJUaGUgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGJvdW5kIHRvIHRoaXMgY29tcG9uZW50IHdhcyBkZXN0cm95ZWQgYW5kIGNhbm5vdCBiZSB1c2VkIHByb3Blcmx5LiI7bGV0IHFnPSgoKT0+e2NsYXNzIGN7Z2V0SW5zdGFuY2UoYSl7Y29uc3QgZD1UWS5nZXQoYSk7'@;
put 'cmV0dXJuIGQuaXNEZXN0cm95ZWQ/KGNvbnNvbGUud2Fybihrc2UpLG51bGwpOmR9cmVnaXN0ZXJJbnN0YW5jZShhLGQpe3JldHVybiBUWS5zZXQoYSxkKX1yZW1vdmVJbnN0YW5jZShhKXtyZXR1cm4gVFkuZGVsZXRlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJu'@;
put 'IG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBBTmU9T2JqZWN0LmtleXMoQ3MuRGVmYXVsdFNldHRpbmdzKSxFc2U9Q3MuaG9va3MuZ2V0UmVnaXN0ZXJlZCgpO2xldCBUc2U9KCgpPT57Y2xhc3MgY3ttZXJnZVNl'@;
put 'dHRpbmdzKGEpe2NvbnN0IGQ9InNldHRpbmdzImluIGEmJiJvYmplY3QiPT10eXBlb2YgYS5zZXR0aW5ncyxoPWQ/YS5zZXR0aW5nczp7fTtyZXR1cm4gRXNlLmNvbmNhdChBTmUpLmZvckVhY2godj0+e2NvbnN0IFQ9RXNlLmluZGV4T2Yodik+LTE7bGV0IFk7ZCYmVCYmKFk9YS5zZXR0aW5n'@;
put 'c1t2XSksdm9pZCAwIT09YVt2XSYmKFk9YVt2XSksdm9pZCAwIT09WSYmKGhbdl09Im5nWm9uZSJpbiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgWSYmVD9mdW5jdGlvbiguLi5yZSl7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+WS5hcHBseSh0aGlzLHJlKSl9OlkpfSksaH1wcmVwYXJlQ2hhbmdl'@;
put 'cyhhKXtjb25zdCBkPXt9O3JldHVybiBPYmplY3Qua2V5cyhhKS5mb3JFYWNoKGY9PnthLmhhc093blByb3BlcnR5KGYpJiYoZFtmXT1hW2ZdLmN1cnJlbnRWYWx1ZSl9KSxkfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWxy'@;
put 'KHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxMdz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXI9YSx0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyPWQsdGhpcy5uZ1pvbmU9aCx0aGlzLl9faG90SW5zdGFuY2U9bnVs'@;
put 'bCx0aGlzLmNvbHVtbnNDb21wb25lbnRzPVtdLHRoaXMuaG90SWQ9IiJ9Z2V0IGhvdEluc3RhbmNlKCl7cmV0dXJuIXRoaXMuX19ob3RJbnN0YW5jZXx8dGhpcy5fX2hvdEluc3RhbmNlJiYhdGhpcy5fX2hvdEluc3RhbmNlLmlzRGVzdHJveWVkP3RoaXMuX19ob3RJbnN0YW5jZToodGhpcy5f'@;
put 'aG90VGFibGVSZWdpc3RlcmVyLnJlbW92ZUluc3RhbmNlKHRoaXMuaG90SWQpLGNvbnNvbGUud2Fybihrc2UpLG51bGwpfXNldCBob3RJbnN0YW5jZShhKXt0aGlzLl9faG90SW5zdGFuY2U9YX1uZ0FmdGVyVmlld0luaXQoKXtjb25zdCBhPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVy'@;
put 'Z2VTZXR0aW5ncyh0aGlzKTtpZih0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0aD4wKXtjb25zdCBkPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57ZC5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSxhLmNvbHVtbnM9ZH10'@;
put 'aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2U9bmV3IENzLkNvcmUodGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudCxhKSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVnaXN0ZXJJbnN0YW5jZSh0aGlzLmhvdElkLHRoaXMu'@;
put 'aG90SW5zdGFuY2UpLHRoaXMuaG90SW5zdGFuY2UuaW5pdCgpfSl9bmdPbkNoYW5nZXMoYSl7aWYobnVsbD09PXRoaXMuaG90SW5zdGFuY2UpcmV0dXJuO2NvbnN0IGQ9dGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5wcmVwYXJlQ2hhbmdlcyhhKTt0aGlzLnVwZGF0ZUhvdFRhYmxlKGQpfW5n'@;
put 'T25EZXN0cm95KCl7dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLmhvdEluc3RhbmNlLmRlc3Ryb3koKX0pLHRoaXMuaG90SWQmJnRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJbnN0YW5jZSh0aGlzLmhvdElkKX11cGRhdGVI'@;
put 'b3RUYWJsZShhKXt0aGlzLmhvdEluc3RhbmNlJiZ0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3MoYSwhMSl9KX1vbkFmdGVyQ29sdW1uc0NoYW5nZSgpe2lmKHZvaWQgMCE9PXRoaXMuY29sdW1uc0NvbXBvbmVudHMmJnRo'@;
put 'aXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjApe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGg9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGgpKX0pLHRoaXMudXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfX1v'@;
put 'bkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpe2NvbnN0IGE9W107dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCYmdGhpcy5jb2x1bW5zQ29tcG9uZW50cy5mb3JFYWNoKGQ9PnthLnB1c2godGhpcy5faG90U2V0dGluZ3NSZXNvbHZlci5tZXJnZVNldHRpbmdzKGQpKX0pLHRoaXMu'@;
put 'dXBkYXRlSG90VGFibGUoe2NvbHVtbnM6YX0pfWFkZENvbHVtbihhKXt0aGlzLmNvbHVtbnNDb21wb25lbnRzLnB1c2goYSksdGhpcy5vbkFmdGVyQ29sdW1uc051bWJlckNoYW5nZSgpfXJlbW92ZUNvbHVtbihhKXtjb25zdCBkPXRoaXMuY29sdW1uc0NvbXBvbmVudHMuaW5kZXhPZihhKTt0'@;
put 'aGlzLmNvbHVtbnNDb21wb25lbnRzLnNwbGljZShkLDEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yykoc3QocWcpLHN0KFRzZSksc3QoUG8pKX0sYy5cdTAyNzVjbXA9a3Ioe3R5cGU6Yyxz'@;
put 'ZWxlY3RvcnM6W1siaG90LXRhYmxlIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmVW8oRE5lLDUpLDImYSl7bGV0IGg7TWkoaD1DaSgpKSYmKGQuY29udGFpbmVyPWguZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVh'@;
put 'ZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFkZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlk'@;
put 'OiJhbGxvd0ludmFsaWQiLGFsbG93UmVtb3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNvbHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhdXRvQ29sdW1uU2l6ZToiYXV0b0NvbHVtblNpemUiLGF1dG9Sb3dTaXplOiJhdXRvUm93U2l6ZSIsYXV0b1dyYXBDb2w6ImF1dG9XcmFw'@;
put 'Q29sIixhdXRvV3JhcFJvdzoiYXV0b1dyYXBSb3ciLGJpbmRSb3dzV2l0aEhlYWRlcnM6ImJpbmRSb3dzV2l0aEhlYWRlcnMiLGNlbGw6ImNlbGwiLGNlbGxzOiJjZWxscyIsY2hlY2tlZFRlbXBsYXRlOiJjaGVja2VkVGVtcGxhdGUiLGNsYXNzTmFtZToiY2xhc3NOYW1lIixjb2xIZWFkZXJz'@;
put 'OiJjb2xIZWFkZXJzIixjb2xsYXBzaWJsZUNvbHVtbnM6ImNvbGxhcHNpYmxlQ29sdW1ucyIsY29sdW1uSGVhZGVySGVpZ2h0OiJjb2x1bW5IZWFkZXJIZWlnaHQiLGNvbHVtbnM6ImNvbHVtbnMiLGNvbHVtblNvcnRpbmc6ImNvbHVtblNvcnRpbmciLGNvbHVtblN1bW1hcnk6ImNvbHVtblN1'@;
put 'bW1hcnkiLGNvbFdpZHRoczoiY29sV2lkdGhzIixjb21tZW50ZWRDZWxsQ2xhc3NOYW1lOiJjb21tZW50ZWRDZWxsQ2xhc3NOYW1lIixjb21tZW50czoiY29tbWVudHMiLGNvbnRleHRNZW51OiJjb250ZXh0TWVudSIsY29weWFibGU6ImNvcHlhYmxlIixjb3B5UGFzdGU6ImNvcHlQYXN0ZSIs'@;
put 'Y29ycmVjdEZvcm1hdDoiY29ycmVjdEZvcm1hdCIsY3VycmVudENvbENsYXNzTmFtZToiY3VycmVudENvbENsYXNzTmFtZSIsY3VycmVudEhlYWRlckNsYXNzTmFtZToiY3VycmVudEhlYWRlckNsYXNzTmFtZSIsY3VycmVudFJvd0NsYXNzTmFtZToiY3VycmVudFJvd0NsYXNzTmFtZSIsY3Vz'@;
put 'dG9tQm9yZGVyczoiY3VzdG9tQm9yZGVycyIsZGF0YToiZGF0YSIsZGF0YVNjaGVtYToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6ImRlZmF1bHREYXRlIixkaXNhYmxlVmlzdWFsU2Vs'@;
put 'ZWN0aW9uOiJkaXNhYmxlVmlzdWFsU2VsZWN0aW9uIixkcmFnVG9TY3JvbGw6ImRyYWdUb1Njcm9sbCIsZHJvcGRvd25NZW51OiJkcm9wZG93bk1lbnUiLGVkaXRvcjoiZWRpdG9yIixlbnRlckJlZ2luc0VkaXRpbmc6ImVudGVyQmVnaW5zRWRpdGluZyIsZW50ZXJNb3ZlczoiZW50ZXJNb3Zl'@;
put 'cyIsZmlsbEhhbmRsZToiZmlsbEhhbmRsZSIsZmlsdGVyOiJmaWx0ZXIiLGZpbHRlcmluZ0Nhc2VTZW5zaXRpdmU6ImZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUiLGZpbHRlcnM6ImZpbHRlcnMiLGZpeGVkQ29sdW1uc0xlZnQ6ImZpeGVkQ29sdW1uc0xlZnQiLGZpeGVkQ29sdW1uc1N0YXJ0OiJm'@;
put 'aXhlZENvbHVtbnNTdGFydCIsZml4ZWRSb3dzQm90dG9tOiJmaXhlZFJvd3NCb3R0b20iLGZpeGVkUm93c1RvcDoiZml4ZWRSb3dzVG9wIixmb3JtdWxhczoiZm9ybXVsYXMiLGZyYWdtZW50U2VsZWN0aW9uOiJmcmFnbWVudFNlbGVjdGlvbiIsaGVpZ2h0OiJoZWlnaHQiLGhpZGRlbkNvbHVt'@;
put 'bnM6ImhpZGRlbkNvbHVtbnMiLGhpZGRlblJvd3M6ImhpZGRlblJvd3MiLGludmFsaWRDZWxsQ2xhc3NOYW1lOiJpbnZhbGlkQ2VsbENsYXNzTmFtZSIsbGFiZWw6ImxhYmVsIixsYW5ndWFnZToibGFuZ3VhZ2UiLGxheW91dERpcmVjdGlvbjoibGF5b3V0RGlyZWN0aW9uIixsaWNlbnNlS2V5'@;
put 'OiJsaWNlbnNlS2V5Iixsb2NhbGU6ImxvY2FsZSIsbWFudWFsQ29sdW1uRnJlZXplOiJtYW51YWxDb2x1bW5GcmVlemUiLG1hbnVhbENvbHVtbk1vdmU6Im1hbnVhbENvbHVtbk1vdmUiLG1hbnVhbENvbHVtblJlc2l6ZToibWFudWFsQ29sdW1uUmVzaXplIixtYW51YWxSb3dNb3ZlOiJtYW51'@;
put 'YWxSb3dNb3ZlIixtYW51YWxSb3dSZXNpemU6Im1hbnVhbFJvd1Jlc2l6ZSIsbWF4Q29sczoibWF4Q29scyIsbWF4Um93czoibWF4Um93cyIsbWVyZ2VDZWxsczoibWVyZ2VDZWxscyIsbWluQ29sczoibWluQ29scyIsbWluUm93czoibWluUm93cyIsbWluU3BhcmVDb2xzOiJtaW5TcGFyZUNv'@;
put 'bHMiLG1pblNwYXJlUm93czoibWluU3BhcmVSb3dzIixtdWx0aUNvbHVtblNvcnRpbmc6Im11bHRpQ29sdW1uU29ydGluZyIsbmVzdGVkSGVhZGVyczoibmVzdGVkSGVhZGVycyIsbmVzdGVkUm93czoibmVzdGVkUm93cyIsbm9Xb3JkV3JhcENsYXNzTmFtZToibm9Xb3JkV3JhcENsYXNzTmFt'@;
put 'ZSIsbnVtZXJpY0Zvcm1hdDoibnVtZXJpY0Zvcm1hdCIsb2JzZXJ2ZURPTVZpc2liaWxpdHk6Im9ic2VydmVET01WaXNpYmlsaXR5IixvdXRzaWRlQ2xpY2tEZXNlbGVjdHM6Im91dHNpZGVDbGlja0Rlc2VsZWN0cyIscGVyc2lzdGVudFN0YXRlOiJwZXJzaXN0ZW50U3RhdGUiLHBsYWNlaG9s'@;
put 'ZGVyOiJwbGFjZWhvbGRlciIscGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lOiJwbGFjZWhvbGRlckNlbGxDbGFzc05hbWUiLHByZXZlbnRPdmVyZmxvdzoicHJldmVudE92ZXJmbG93IixwcmV2ZW50V2hlZWw6InByZXZlbnRXaGVlbCIscmVhZE9ubHk6InJlYWRPbmx5IixyZWFkT25seUNlbGxD'@;
put 'bGFzc05hbWU6InJlYWRPbmx5Q2VsbENsYXNzTmFtZSIscmVuZGVyQWxsUm93czoicmVuZGVyQWxsUm93cyIscmVuZGVyZXI6InJlbmRlcmVyIixyb3dIZWFkZXJzOiJyb3dIZWFkZXJzIixyb3dIZWFkZXJXaWR0aDoicm93SGVhZGVyV2lkdGgiLHJvd0hlaWdodHM6InJvd0hlaWdodHMiLHNl'@;
put 'YXJjaDoic2VhcmNoIixzZWxlY3Rpb25Nb2RlOiJzZWxlY3Rpb25Nb2RlIixzZWxlY3RPcHRpb25zOiJzZWxlY3RPcHRpb25zIixza2lwQ29sdW1uT25QYXN0ZToic2tpcENvbHVtbk9uUGFzdGUiLHNraXBSb3dPblBhc3RlOiJza2lwUm93T25QYXN0ZSIsc29ydEJ5UmVsZXZhbmNlOiJzb3J0'@;
put 'QnlSZWxldmFuY2UiLHNvdXJjZToic291cmNlIixzdGFydENvbHM6InN0YXJ0Q29scyIsc3RhcnRSb3dzOiJzdGFydFJvd3MiLHN0cmV0Y2hIOiJzdHJldGNoSCIsc3RyaWN0OiJzdHJpY3QiLHRhYmxlQ2xhc3NOYW1lOiJ0YWJsZUNsYXNzTmFtZSIsdGFiTW92ZXM6InRhYk1vdmVzIix0aXRs'@;
put 'ZToidGl0bGUiLHRyaW1Ecm9wZG93bjoidHJpbURyb3Bkb3duIix0cmltUm93czoidHJpbVJvd3MiLHRyaW1XaGl0ZXNwYWNlOiJ0cmltV2hpdGVzcGFjZSIsdHlwZToidHlwZSIsdW5jaGVja2VkVGVtcGxhdGU6InVuY2hlY2tlZFRlbXBsYXRlIix1bmRvOiJ1bmRvIix2YWxpZGF0b3I6InZh'@;
put 'bGlkYXRvciIsdmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0Iix2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldDoidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLHZpc2libGVSb3dzOiJ2aXNpYmxlUm93cyIsd2lkdGg6IndpZHRo'@;
put 'Iix3b3JkV3JhcDoid29yZFdyYXAiLGFmdGVyQWRkQ2hpbGQ6ImFmdGVyQWRkQ2hpbGQiLGFmdGVyQXV0b2ZpbGw6ImFmdGVyQXV0b2ZpbGwiLGFmdGVyQmVnaW5FZGl0aW5nOiJhZnRlckJlZ2luRWRpdGluZyIsYWZ0ZXJDZWxsTWV0YVJlc2V0OiJhZnRlckNlbGxNZXRhUmVzZXQiLGFmdGVy'@;
put 'Q2hhbmdlOiJhZnRlckNoYW5nZSIsYWZ0ZXJDaGFuZ2VzT2JzZXJ2ZWQ6ImFmdGVyQ2hhbmdlc09ic2VydmVkIixhZnRlckNvbHVtbkNvbGxhcHNlOiJhZnRlckNvbHVtbkNvbGxhcHNlIixhZnRlckNvbHVtbkV4cGFuZDoiYWZ0ZXJDb2x1bW5FeHBhbmQiLGFmdGVyQ29sdW1uRnJlZXplOiJh'@;
put 'ZnRlckNvbHVtbkZyZWV6ZSIsYWZ0ZXJDb2x1bW5Nb3ZlOiJhZnRlckNvbHVtbk1vdmUiLGFmdGVyQ29sdW1uUmVzaXplOiJhZnRlckNvbHVtblJlc2l6ZSIsYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZToiYWZ0ZXJDb2x1bW5TZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJDb2x1bW5Tb3J0OiJhZnRl'@;
put 'ckNvbHVtblNvcnQiLGFmdGVyQ29sdW1uVW5mcmVlemU6ImFmdGVyQ29sdW1uVW5mcmVlemUiLGFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczoiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixhZnRlckNvbnRleHRNZW51SGlkZToiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLGFm'@;
put 'dGVyQ29udGV4dE1lbnVTaG93OiJhZnRlckNvbnRleHRNZW51U2hvdyIsYWZ0ZXJDb3B5OiJhZnRlckNvcHkiLGFmdGVyQ29weUxpbWl0OiJhZnRlckNvcHlMaW1pdCIsYWZ0ZXJDcmVhdGVDb2w6ImFmdGVyQ3JlYXRlQ29sIixhZnRlckNyZWF0ZVJvdzoiYWZ0ZXJDcmVhdGVSb3ciLGFmdGVy'@;
put 'Q3V0OiJhZnRlckN1dCIsYWZ0ZXJEZXNlbGVjdDoiYWZ0ZXJEZXNlbGVjdCIsYWZ0ZXJEZXN0cm95OiJhZnRlckRlc3Ryb3kiLGFmdGVyRGV0YWNoQ2hpbGQ6ImFmdGVyRGV0YWNoQ2hpbGQiLGFmdGVyRG9jdW1lbnRLZXlEb3duOiJhZnRlckRvY3VtZW50S2V5RG93biIsYWZ0ZXJEcmF3U2Vs'@;
put 'ZWN0aW9uOiJhZnRlckRyYXdTZWxlY3Rpb24iLGFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGFmdGVyRHJvcGRvd25NZW51SGlkZToiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIixhZnRlckRyb3Bkb3duTWVudVNob3c6ImFm'@;
put 'dGVyRHJvcGRvd25NZW51U2hvdyIsYWZ0ZXJGaWx0ZXI6ImFmdGVyRmlsdGVyIixhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlOiJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixhZnRlckdldENlbGxNZXRhOiJhZnRlckdldENlbGxNZXRhIixhZnRlckdldENvbEhlYWRlcjoiYWZ0ZXJHZXRD'@;
put 'b2xIZWFkZXIiLGFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzOiJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsYWZ0ZXJHZXRSb3dIZWFkZXI6ImFmdGVyR2V0Um93SGVhZGVyIixhZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMi'@;
put 'LGFmdGVySGlkZUNvbHVtbnM6ImFmdGVySGlkZUNvbHVtbnMiLGFmdGVySGlkZVJvd3M6ImFmdGVySGlkZVJvd3MiLGFmdGVySW5pdDoiYWZ0ZXJJbml0IixhZnRlckxhbmd1YWdlQ2hhbmdlOiJhZnRlckxhbmd1YWdlQ2hhbmdlIixhZnRlckxpc3RlbjoiYWZ0ZXJMaXN0ZW4iLGFmdGVyTG9h'@;
put 'ZERhdGE6ImFmdGVyTG9hZERhdGEiLGFmdGVyTWVyZ2VDZWxsczoiYWZ0ZXJNZXJnZUNlbGxzIixhZnRlck1vZGlmeVRyYW5zZm9ybUVuZDoiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLGFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGFmdGVy'@;
put 'TW9tZW50dW1TY3JvbGw6ImFmdGVyTW9tZW50dW1TY3JvbGwiLGFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZDoiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixhZnRlck9uQ2VsbENvbnRl'@;
put 'eHRNZW51OiJhZnRlck9uQ2VsbENvbnRleHRNZW51IixhZnRlck9uQ2VsbENvcm5lckRibENsaWNrOiJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VEb3duOiJh'@;
put 'ZnRlck9uQ2VsbE1vdXNlRG93biIsYWZ0ZXJPbkNlbGxNb3VzZU91dDoiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6ImFmdGVyT25DZWxsTW91c2VPdmVyIixhZnRlck9uQ2VsbE1vdXNlVXA6ImFmdGVyT25DZWxsTW91c2VVcCIsYWZ0ZXJQYXN0ZToiYWZ0ZXJQ'@;
put 'YXN0ZSIsYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ6ImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIixhZnRlclJlZG86ImFmdGVyUmVkbyIsYWZ0ZXJSZWRvU3RhY2tDaGFuZ2U6ImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixhZnRlclJlZnJlc2hEaW1lbnNpb25zOiJhZnRlclJlZnJlc2hEaW1lbnNp'@;
put 'b25zIixhZnRlclJlbW92ZUNlbGxNZXRhOiJhZnRlclJlbW92ZUNlbGxNZXRhIixhZnRlclJlbW92ZUNvbDoiYWZ0ZXJSZW1vdmVDb2wiLGFmdGVyUmVtb3ZlUm93OiJhZnRlclJlbW92ZVJvdyIsYWZ0ZXJSZW5kZXI6ImFmdGVyUmVuZGVyIixhZnRlclJlbmRlcmVyOiJhZnRlclJlbmRlcmVy'@;
put 'IixhZnRlclJvd01vdmU6ImFmdGVyUm93TW92ZSIsYWZ0ZXJSb3dSZXNpemU6ImFmdGVyUm93UmVzaXplIixhZnRlclJvd1NlcXVlbmNlQ2hhbmdlOiJhZnRlclJvd1NlcXVlbmNlQ2hhbmdlIixhZnRlclNjcm9sbEhvcml6b250YWxseToiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLGFmdGVy'@;
put 'U2Nyb2xsVmVydGljYWxseToiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IixhZnRlclNlbGVjdGlvbjoiYWZ0ZXJTZWxlY3Rpb24iLGFmdGVyU2VsZWN0aW9uQnlQcm9wOiJhZnRlclNlbGVjdGlvbkJ5UHJvcCIsYWZ0ZXJTZWxlY3Rpb25FbmQ6ImFmdGVyU2VsZWN0aW9uRW5kIixhZnRlclNlbGVj'@;
put 'dGlvbkVuZEJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3AiLGFmdGVyU2V0Q2VsbE1ldGE6ImFmdGVyU2V0Q2VsbE1ldGEiLGFmdGVyU2V0RGF0YUF0Q2VsbDoiYWZ0ZXJTZXREYXRhQXRDZWxsIixhZnRlclNldERhdGFBdFJvd1Byb3A6ImFmdGVyU2V0RGF0YUF0Um93UHJvcCIsYWZ0'@;
put 'ZXJTZXRTb3VyY2VEYXRhQXRDZWxsOiJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGFmdGVyU2hlZXRBZGRlZDoiYWZ0ZXJTaGVldEFkZGVkIixhZnRlclNoZWV0UmVuYW1lZDoiYWZ0ZXJTaGVldFJlbmFtZWQiLGFmdGVyU2hlZXRSZW1vdmVkOiJhZnRlclNoZWV0UmVtb3ZlZCIsYWZ0ZXJU'@;
put 'cmltUm93OiJhZnRlclRyaW1Sb3ciLGFmdGVyVW5kbzoiYWZ0ZXJVbmRvIixhZnRlclVuZG9TdGFja0NoYW5nZToiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLGFmdGVyVW5oaWRlQ29sdW1uczoiYWZ0ZXJVbmhpZGVDb2x1bW5zIixhZnRlclVuaGlkZVJvd3M6ImFmdGVyVW5oaWRlUm93cyIsYWZ0'@;
put 'ZXJVbmxpc3RlbjoiYWZ0ZXJVbmxpc3RlbiIsYWZ0ZXJVbm1lcmdlQ2VsbHM6ImFmdGVyVW5tZXJnZUNlbGxzIixhZnRlclVudHJpbVJvdzoiYWZ0ZXJVbnRyaW1Sb3ciLGFmdGVyVXBkYXRlRGF0YToiYWZ0ZXJVcGRhdGVEYXRhIixhZnRlclVwZGF0ZVNldHRpbmdzOiJhZnRlclVwZGF0ZVNl'@;
put 'dHRpbmdzIixhZnRlclZhbGlkYXRlOiJhZnRlclZhbGlkYXRlIixhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlOiJhZnRlclZpZXdwb3J0'@;
put 'Um93Q2FsY3VsYXRvck92ZXJyaWRlIixhZnRlclZpZXdSZW5kZXI6ImFmdGVyVmlld1JlbmRlciIsYmVmb3JlQWRkQ2hpbGQ6ImJlZm9yZUFkZENoaWxkIixiZWZvcmVBdXRvZmlsbDoiYmVmb3JlQXV0b2ZpbGwiLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJl'@;
put 'Zm9yZUNoYW5nZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJlZm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJl'@;
put 'ZXplOiJiZWZvcmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9yZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3Jl'@;
put 'Q29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNy'@;
put 'ZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9yZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVycyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRl'@;
put 'bXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1lbnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENlbGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoi'@;
put 'YmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93'@;
put 'SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29udGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxhbmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0'@;
put 'YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdlQ2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1v'@;
put 'dXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VPdmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQYXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVk'@;
put 'byIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1v'@;
put 'dmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNvbDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJlbmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVm'@;
put 'b3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZvcmVSb3dSZXNpemUiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVTZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVT'@;
put 'ZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9y'@;
put 'ZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8iLGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhp'@;
put 'ZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIsYmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9yZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5k'@;
put 'ZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3UmVuZGVyOiJiZWZvcmVWaWV3UmVuZGVyIixjb25zdHJ1Y3Q6ImNvbnN0cnVjdCIsaW5pdDoiaW5pdCIsbW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkOiJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLG1vZGlmeUF1dG9maWxsUmFuZ2U6'@;
put 'Im1vZGlmeUF1dG9maWxsUmFuZ2UiLG1vZGlmeUNvbEhlYWRlcjoibW9kaWZ5Q29sSGVhZGVyIixtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ6Im1vZGlmeUNvbHVtbkhlYWRlckhlaWdodCIsbW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWU6Im1vZGlmeUNvbHVtbkhlYWRlclZhbHVlIixtb2RpZnlD'@;
put 'b2xXaWR0aDoibW9kaWZ5Q29sV2lkdGgiLG1vZGlmeUNvcHlhYmxlUmFuZ2U6Im1vZGlmeUNvcHlhYmxlUmFuZ2UiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUdldENlbGxDb29yZHM6Im1vZGlmeUdldENlbGxDb29yZHMiLG1vZGlmeVJvd0RhdGE6Im1vZGlmeVJvd0RhdGEiLG1v'@;
put 'ZGlmeVJvd0hlYWRlcjoibW9kaWZ5Um93SGVhZGVyIixtb2RpZnlSb3dIZWFkZXJXaWR0aDoibW9kaWZ5Um93SGVhZGVyV2lkdGgiLG1vZGlmeVJvd0hlaWdodDoibW9kaWZ5Um93SGVpZ2h0Iixtb2RpZnlTb3VyY2VEYXRhOiJtb2RpZnlTb3VyY2VEYXRhIixtb2RpZnlUcmFuc2Zvcm1FbmQ6'@;
put 'Im1vZGlmeVRyYW5zZm9ybUVuZCIsbW9kaWZ5VHJhbnNmb3JtU3RhcnQ6Im1vZGlmeVRyYW5zZm9ybVN0YXJ0IixwZXJzaXN0ZW50U3RhdGVMb2FkOiJwZXJzaXN0ZW50U3RhdGVMb2FkIixwZXJzaXN0ZW50U3RhdGVSZXNldDoicGVyc2lzdGVudFN0YXRlUmVzZXQiLHBlcnNpc3RlbnRTdGF0'@;
put 'ZVNhdmU6InBlcnNpc3RlbnRTdGF0ZVNhdmUifSxmZWF0dXJlczpbR2koW3FnLFRzZV0pLEJhXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1siY29udGFpbmVyIiwiIl0sWzMsImlkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiZKdCgwLCJkaXYiLDEsMCksMiZhJiZQZSgiaWQiLGQu'@;
put 'aG90SWQpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx4OT0oKCk9PntjbGFzcyBje3N0YXRpYyBmb3JSb290KCl7cmV0dXJue25nTW9kdWxlOmMscHJvdmlkZXJzOltxZ119fX1yZXR1cm4gYy52ZXJzaW9uPSIxMy4xLjAiLGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8'@;
put 'Yyl9LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7fSksY30pKCk7Y29uc3QgRHNlPSJoYW5kc29udGFibGVFZGl0b3IiO2NsYXNzIERZIGV4dGVuZHMgJGd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5v'@;
put 'cGVuKCksdGhpcy5odEVkaXRvciYmdGhpcy5odEVkaXRvci5kZXN0cm95KCksIm5vbmUiPT09dGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5JiYodGhpcy5odENvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSIiKSx0aGlzLmh0RWRpdG9yPW5ldyB0aGlzLmhvdC5jb25zdHJ1Y3Rvcih0aGlz'@;
put 'Lmh0Q29udGFpbmVyLHRoaXMuaHRPcHRpb25zKSx0aGlzLmh0RWRpdG9yLmluaXQoKSx0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9IiIsdGhpcy5jZWxsUHJvcGVydGllcy5zdHJpY3Q/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxsKDAsMCk6dGhpcy5odEVkaXRvci5k'@;
put 'ZXNlbGVjdENlbGwoKSxkdyh0aGlzLlRFWFRBUkVBLDAsdGhpcy5URVhUQVJFQS52YWx1ZS5sZW5ndGgpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1jbG9zZSgpe3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9Im5vbmUiKSx0aGlzLnJl'@;
put 'bW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpO2NvbnN0IFQ9dGhpcyxZPXtzdGFydFJvd3M6MCxzdGFydENvbHM6MCxtaW5Sb3dzOjAsbWluQ29sczowLGNsYXNzTmFtZToi'@;
put 'bGlzdGJveCIsY29weVBhc3RlOiExLGF1dG9Db2x1bW5TaXplOiExLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGZpbGxIYW5kbGU6ITEsYXV0b1dyYXBDb2w6ITEsYXV0b1dyYXBSb3c6ITEsYWZ0ZXJPbkNlbGxNb3VzZURvd24ocmUsZmUpe2NvbnN0IF9lPXRoaXMuZ2V0U291cmNlRGF0'@;
put 'YShmZS5yb3csZmUuY29sKTt2b2lkIDAhPT1fZSYmVC5zZXRWYWx1ZShfZSksVC5pbnN0YW5jZS5kZXN0cm95RWRpdG9yKCl9LHByZXZlbnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFi'@;
put 'bGUmJnhjKFksdi5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPVl9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVy'@;
put 'LmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05hbWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNz'@;
put 'aWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRv'@;
put 'ci5nZXRJbnN0YW5jZSgpLmdldFZhbHVlKCk7dm9pZCAwIT09aCYmdGhpcy5zZXRWYWx1ZShoKX1zdXBlci5maW5pc2hFZGl0aW5nKGwsYSxkKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmRl'@;
put 'c3Ryb3koKX0pfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKTtzdXBlci5yZWdpc3RlclNob3J0Y3V0cygpO2NvbnN0IGg9KGYsdik9Pntjb25zdCBUPXRoaXMuaHRFZGl0b3IuZ2V0SW5zdGFuY2Uo'@;
put 'KTtpZih2b2lkIDAhPT1mJiYoZjwwfHxULmZsaXBwZWQmJmY+VC5jb3VudFJvd3MoKS0xP1QuZGVzZWxlY3RDZWxsKCk6VC5zZWxlY3RDZWxsKGYsMCksVC5nZXREYXRhKCkubGVuZ3RoKSlyZXR1cm4gdi5wcmV2ZW50RGVmYXVsdCgpLHAyKHYpLHRoaXMuaG90Lmxpc3RlbigpLHRoaXMuVEVY'@;
put 'VEFSRUEuZm9jdXMoKSwhMX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xldCBULFk7cmV0dXJuIXYuZ2V0U2VsZWN0ZWRMYXN0KCkmJnYuZmxpcHBlZD9UPXYuY291bnRSb3dzKCkt'@;
put 'MTp2LmdldFNlbGVjdGVkTGFzdCgpJiYodi5mbGlwcGVkPyhZPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1NYXRoLm1heCgwLFktMSkpOihZPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1ZLTEpKSxoKFQsZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2Fs'@;
put 'bGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvci5nZXRJbnN0YW5jZSgpO2xldCBULFk7aWYodi5nZXRTZWxlY3RlZExhc3QoKXx8di5mbGlwcGVkKXtpZih2LmdldFNlbGVjdGVkTGFzdCgpKWlmKHYuZmxpcHBlZClUPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0rMTtlbHNlIGlmKCF2LmZs'@;
put 'aXBwZWQpe2NvbnN0IHJlPXYuY291bnRSb3dzKCktMTtZPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sVD1NYXRoLm1pbihyZSxZKzEpfX1lbHNlIFQ9MDtyZXR1cm4gaChULGYpfSxwcmV2ZW50RGVmYXVsdDohMX1dLHtncm91cDpEc2UscmVsYXRpdmVUb0dyb3VwOkRULHBvc2l0aW9uOiJiZWZv'@;
put 'cmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3N1cGVyLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKERzZSl9fWNvbnN0IEFZPW5ldyBXZWFrTWFwO2NsYXNzIExZ'@;
put 'IGV4dGVuZHMgRFl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJhdXRvY29tcGxldGUifWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGZ1bmN0aW9uIElOZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gUk5lKGMpe3ZhciBsPWZ1bmN0aW9uIE9OZShjLGwpe2lmKCJvYmplY3QiIT10'@;
put 'eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg'@;
put 'bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6'@;
put 'YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzb3J0QnlSZWxldmFuY2UiLGZ1bmN0aW9uKGEsZCxoKXtjb25zdCBmPVtdLHY9W10sVD1hLmxlbmd0aDtsZXQgcmUsZmUsX2Usa2UsWT1kLmxlbmd0aDtpZigwPT09VCl7Zm9yKF9l'@;
put 'PTA7X2U8WTtfZSsrKXYucHVzaChfZSk7cmV0dXJuIHZ9Zm9yKF9lPTA7X2U8WTtfZSsrKXtpZihmZT1VVigkbChkW19lXSkpLGgpa2U9ZmUuaW5kZXhPZihhKTtlbHNle2NvbnN0IFdlPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO2tlPWZlLnRvTG9jYWxlTG93ZXJDYXNlKFdlKS5pbmRl'@;
put 'eE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoV2UpKX0tMSE9PWtlJiYocmU9ZmUubGVuZ3RoLWtlLVQsZi5wdXNoKHtiYXNlSW5kZXg6X2UsaW5kZXg6a2UsY2hhcnNMZWZ0OnJlLHZhbHVlOmZlfSkpfWZvcihmLnNvcnQoKFdlLEplKT0+e2lmKC0xPT09SmUuaW5kZXgpcmV0dXJuLTE7aWYoLTE9'@;
put 'PT1XZS5pbmRleClyZXR1cm4gMTtpZihXZS5pbmRleDxKZS5pbmRleClyZXR1cm4tMTtpZihKZS5pbmRleDxXZS5pbmRleClyZXR1cm4gMTtpZihXZS5pbmRleD09PUplLmluZGV4KXtpZihXZS5jaGFyc0xlZnQ8SmUuY2hhcnNMZWZ0KXJldHVybi0xO2lmKFdlLmNoYXJzTGVmdD5KZS5jaGFy'@;
put 'c0xlZnQpcmV0dXJuIDF9cmV0dXJuIDB9KSxfZT0wLFk9Zi5sZW5ndGg7X2U8WTtfZSsrKXYucHVzaChmW19lXS5iYXNlSW5kZXgpO3JldHVybiB2fSksdGhpcy5xdWVyeT1udWxsLHRoaXMuc3RyaXBwZWRDaG9pY2VzPVtdLHRoaXMucmF3Q2hvaWNlcz1bXSxBWS5zZXQodGhpcyx7c2tpcE9u'@;
put 'ZTohMSxpc01hY09TOnRoaXMuaG90LnJvb3RXaW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPi0xfSl9Z2V0VmFsdWUoKXtjb25zdCBsPXRoaXMucmF3Q2hvaWNlcy5maW5kKGE9PnRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKGEpPT09dGhpcy5URVhUQVJFQS52YWx1ZSk7'@;
put 'cmV0dXJuIGVvKGwpP2w6dGhpcy5URVhUQVJFQS52YWx1ZX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCksd2kodGhpcy5odENvbnRhaW5lciwiYXV0b2NvbXBsZXRlRWRpdG9yIiksd2kodGhpcy5odENvbnRhaW5lciwtMT09PXRoaXMuaG90LnJvb3RXaW5kb3cubmF2'@;
put 'aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIk1hYyIpPyIiOiJodE1hY1Njcm9sbCIpfW9wZW4oKXtjb25zdCBsPUFZLmdldCh0aGlzKTtzdXBlci5vcGVuKCk7Y29uc3QgYT10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCksZD12b2lkIDA9PT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1Ecm9w'@;
put 'ZG93bnx8dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd247dGhpcy5zaG93RWRpdGFibGVFbGVtZW50KCksdGhpcy5mb2N1cygpO2xldCBoPWZ1KCk7MD09PWgmJmwuaXNNYWNPUyYmKGgrPTE1KSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLGY9PnRoaXMub25CZWZvcmVLZXlE'@;
put 'b3duKGYpKSxhLnVwZGF0ZVNldHRpbmdzKHtjb2xXaWR0aHM6ZD9bTmEodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLHdpZHRoOmQ/TmEodGhpcy5URVhUQVJFQSkraDp2b2lkIDAscmVuZGVyZXI6KGYsdixULFkscmUsZmUsX2UpPT57Y20oZix2LFQsWSxyZSxmZSxfZSk7Y29uc3R7ZmlsdGVy'@;
put 'aW5nQ2FzZVNlbnNpdGl2ZTprZSxhbGxvd0h0bWw6V2UsbG9jYWxlOkplfT10aGlzLmNlbGxQcm9wZXJ0aWVzLHR0PXRoaXMucXVlcnk7bGV0IHd0LEx0LHl0PSRsKGZlKTt5dCYmIVdlJiYod3Q9ITA9PT1rZT95dC5pbmRleE9mKHR0KTp5dC50b0xvY2FsZUxvd2VyQ2FzZShKZSkuaW5kZXhP'@;
put 'Zih0dC50b0xvY2FsZUxvd2VyQ2FzZShKZSkpLC0xIT09d3QmJihMdD15dC5zdWJzdHIod3QsdHQubGVuZ3RoKSx5dD15dC5yZXBsYWNlKEx0LGA8c3Ryb25nPiR7THR9PC9zdHJvbmc+YCkpKSx2LmlubmVySFRNTD15dH0sYXV0b0NvbHVtblNpemU6ITB9KSxsLnNraXBPbmUmJihsLnNraXBP'@;
put 'bmU9ITEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0pfWNsb3NlKCl7dGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1kaXNjYXJkRWRpdG9yKGwpe3N1cGVyLmRp'@;
put 'c2NhcmRFZGl0b3IobCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1xdWVyeUNob2ljZXMobCl7Y29uc3QgYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNvdXJjZTt0aGlzLnF1ZXJ5PWwsImZ1bmN0aW9uIj09dHlwZW9mIGE/YS5jYWxsKHRoaXMuY2VsbFByb3BlcnRpZXMsbCxkPT57dGhpcy5yYXdD'@;
put 'aG9pY2VzPWQsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoZCkpfSk6QXJyYXkuaXNBcnJheShhKT8odGhpcy5yYXdDaG9pY2VzPWEsdGhpcy51cGRhdGVDaG9pY2VzTGlzdCh0aGlzLnN0cmlwVmFsdWVzSWZOZWVkZWQoYSkpKTp0aGlzLnVwZGF0ZUNo'@;
put 'b2ljZXNMaXN0KFtdKX11cGRhdGVDaG9pY2VzTGlzdChsKXtjb25zdCBhPVdWKHRoaXMuVEVYVEFSRUEpLGQ9QmllKHRoaXMuVEVYVEFSRUEpLGg9dGhpcy5jZWxsUHJvcGVydGllcy5zb3J0QnlSZWxldmFuY2UsZj10aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcjtsZXQgdj1udWxsLFQ9bnVs'@;
put 'bCxZPWw7aCYmKHY9dGhpcy5zb3J0QnlSZWxldmFuY2UodGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQodGhpcy5nZXRWYWx1ZSgpKSxZLHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZSkpO2NvbnN0IHJlPUFycmF5LmlzQXJyYXkodik/di5sZW5ndGg6MDtpZighMT09'@;
put 'PWYpcmUmJihUPXZbMF0pO2Vsc2V7Y29uc3QgZmU9W107Zm9yKGxldCBfZT0wLGtlPVkubGVuZ3RoO19lPGtlJiYhKGgmJnJlPD1fZSk7X2UrKylmZS5wdXNoKHJlP1lbdltfZV1dOllbX2VdKTtUPTAsWT1mZX10aGlzLnN0cmlwcGVkQ2hvaWNlcz1ZLHRoaXMuaHRFZGl0b3IubG9hZERhdGEo'@;
put 'bncoW1ldKSksdGhpcy51cGRhdGVEcm9wZG93bkhlaWdodCgpLHRoaXMuZmxpcERyb3Bkb3duSWZOZWVkZWQoKSwhMD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShUKSx0aGlzLmhvdC5saXN0ZW4oKSxkdyh0aGlzLlRFWFRB'@;
put 'UkVBLGEsYT09PWQ/dm9pZCAwOmQpfWZsaXBEcm9wZG93bklmTmVlZGVkKCl7Y29uc3QgbD1OZyh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSxhPWw9PT10aGlzLmhvdC5yb290V2luZG93LGQ9dGhpcy5jZWxsUHJvcGVydGllcy5wcmV2ZW50T3ZlcmZsb3c7aWYoYXx8IWEmJihk'@;
put 'fHwiaG9yaXpvbnRhbCI9PT1kKSlyZXR1cm4hMTtjb25zdCBoPVNjKHRoaXMuVEVYVEFSRUEpLGY9VmwodGhpcy5URVhUQVJFQSksdj10aGlzLmdldERyb3Bkb3duSGVpZ2h0KCksVD1sLnNjcm9sbFRvcCxZPVZsKHRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuVEhFQUQpLHJlPVNjKGwpLGZl'@;
put 'PWgudG9wLXJlLnRvcC1ZK1QsX2U9bC5zY3JvbGxIZWlnaHQtZmUtWS1mLGtlPXY+X2UmJmZlPl9lO3JldHVybiBrZT90aGlzLmZsaXBEcm9wZG93bih2KTp0aGlzLnVuZmxpcERyb3Bkb3duKCksdGhpcy5saW1pdERyb3Bkb3duSWZOZWVkZWQoa2U/ZmU6X2Usdiksa2V9bGltaXREcm9wZG93'@;
put 'bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsdj1udWxsO2Rve2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5fd3QuZ2V0U2V0dGluZygiZGVmYXVsdFJvd0hlaWdodCIpLGQrPWYsaCs9MX13aGlsZShkPGwpO3Y9ZC1mLHRo'@;
put 'aXMuaHRFZGl0b3IuZmxpcHBlZCYmKHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wPXBhcnNlSW50KHRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGUudG9wLDEwKSthLXYrInB4IiksdGhpcy5zZXREcm9wZG93bkhlaWdodChkLWYpfX1mbGlwRHJvcGRvd24obCl7Y29u'@;
put 'c3QgYT10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlO2EucG9zaXRpb249ImFic29sdXRlIixhLnRvcD0tbCsicHgiLHRoaXMuaHRFZGl0b3IuZmxpcHBlZD0hMH11bmZsaXBEcm9wZG93bigpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZTtsLnBvc2l0aW9u'@;
put 'PSJhYnNvbHV0ZSIsbC50b3A9IiIsdGhpcy5odEVkaXRvci5mbGlwcGVkPXZvaWQgMH11cGRhdGVEcm9wZG93bkhlaWdodCgpe2NvbnN0IGw9dGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKStmdSh0aGlzLmhvdC5yb290RG9jdW1lbnQpKzIsYT10aGlzLmNlbGxQcm9wZXJ0aWVzLnRyaW1E'@;
put 'cm9wZG93bjt0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHtoZWlnaHQ6dGhpcy5nZXREcm9wZG93bkhlaWdodCgpLHdpZHRoOmE/dm9pZCAwOmx9KSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfXNldERyb3Bk'@;
put 'b3duSGVpZ2h0KGwpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe2hlaWdodDpsfSl9aGlnaGxpZ2h0QmVzdE1hdGNoaW5nQ2hvaWNlKGwpeyJudW1iZXIiPT10eXBlb2YgbD90aGlzLmh0RWRpdG9yLnNlbGVjdENlbGwobCwwLHZvaWQgMCx2b2lkIDAsdm9pZCAwLCExKTp0aGlzLmh0'@;
put 'RWRpdG9yLmRlc2VsZWN0Q2VsbCgpfWdldERyb3Bkb3duSGVpZ2h0KCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLmdldEluc3RhbmNlKCkuZ2V0Um93SGVpZ2h0KDApfHwyMyxhPXRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3M7cmV0dXJuIHRoaXMuc3RyaXBwZWRDaG9pY2VzLmxlbmd0'@;
put 'aD49YT9hKmw6dGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKmwrOH1zdHJpcFZhbHVlSWZOZWVkZWQobCl7cmV0dXJuIHRoaXMuc3RyaXBWYWx1ZXNJZk5lZWRlZChbbF0pWzBdfXN0cmlwVmFsdWVzSWZOZWVkZWQobCl7Y29uc3R7YWxsb3dIdG1sOmF9PXRoaXMuY2VsbFByb3BlcnRpZXMs'@;
put 'ZD1fcyhsLGY9PiRsKGYpKTtyZXR1cm4gX3MoZCxmPT5hP2Y6VVYoZikpfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkX3Jvdz1hP2EuZnJvbS5yb3c6LTE7bGV0IGg9ITE7cmV0dXJuIGw9PT11by5BUlJP'@;
put 'V19ET1dOJiZkX3Jvdz4wJiZkX3Jvdzx0aGlzLmh0RWRpdG9yLmNvdW50Um93cygpLTEmJihoPSEwKSxsPT09dW8uQVJST1dfVVAmJmRfcm93Pi0xJiYoaD0hMCksaH1vbkJlZm9yZUtleURvd24obCl7Y29uc3QgYT1BWS5nZXQodGhpcyk7aWYoYS5za2lwT25lPSExLHRvZShsLmtleUNvZGUp'@;
put 'fHxsLmtleUNvZGU9PT11by5CQUNLU1BBQ0V8fGwua2V5Q29kZT09PXVvLkRFTEVURXx8bC5rZXlDb2RlPT09dW8uSU5TRVJUKXtsZXQgZD0xMDtpZihsLmtleUNvZGU9PT11by5DJiYobC5jdHJsS2V5fHxsLm1ldGFLZXkpKXJldHVybjt0aGlzLmlzT3BlbmVkKCl8fChkKz0xMCksdGhpcy5o'@;
put 'dEVkaXRvciYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMucXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpLGEuc2tpcE9uZT0hMH0sZCl9fX1jbGFzcyBBc2UgZXh0ZW5kcyBTOXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94In1iZWdp'@;
put 'bkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUpe2NvbnN0IGQ9dGhpcy5URC5xdWVyeVNlbGVjdG9yKCdpbnB1dFt0eXBlPSJjaGVja2JveCJdJyk7UW8oZCwiaHRCYWRWYWx1ZSIpfHxkLmNsaWNrKCl9fWZpbmlzaEVkaXRpbmcoKXt9aW5pdCgpe31vcGVuKCl7fWNsb3Nl'@;
put 'KCl7fWdldFZhbHVlKCl7fXNldFZhbHVlKCl7fWZvY3VzKCl7fX12YXIgTHNlPVIoNjQ3NDApO2NvbnN0IElzZT0iZGF0ZSIsUnNlPSJkYXRlRWRpdG9yIjtjbGFzcyBPc2UgZXh0ZW5kcyAkZ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuIElzZX1jb25zdHJ1Y3RvcihsKXtzdXBl'@;
put 'cihsKSx0aGlzLmRlZmF1bHREYXRlRm9ybWF0PSJERC9NTS9ZWVlZIix0aGlzLmlzQ2VsbEVkaXRlZD0hMSx0aGlzLnBhcmVudERlc3Ryb3llZD0hMSx0aGlzLiRkYXRlUGlja2VyPW51bGx9aW5pdCgpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBkYSl0aHJvdyBuZXcgRXJyb3IoIllvdSBuZWVk'@;
put 'IHRvIGluY2x1ZGUgbW9tZW50LmpzIHRvIHlvdXIgcHJvamVjdC4iKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgTHNlKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBQaWthZGF5IHRvIHlvdXIgcHJvamVjdC4iKTtzdXBlci5pbml0KCksdGhpcy5pbnN0YW5jZS5hZGRIb29r'@;
put 'KCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJ'@;
put 'ViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56'@;
put 'SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLHdpKHRoaXMuZGF0ZVBpY2tlciwiaHREYXRlcGlja2VySG9sZGVyIiksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5kYXRl'@;
put 'UGlja2VyKSxuZXcgamwodGhpcykuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmRhdGVQaWNrZXIsIm1vdXNlZG93biIsYT0+YS5zdG9wUHJvcGFnYXRpb24oKSl9ZGVzdHJveUVsZW1lbnRzKCl7Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlz'@;
put 'LiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Blbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt'@;
put 'ZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIub3BlbigpLHRoaXMuc2hvd0RhdGVwaWNrZXIobCksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazpoPT57aC5zdG9wUHJvcGFn'@;
put 'YXRpb24oKX0sZ3JvdXA6UnNlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaW5zdGFuY2UuX3JlZ2lzdGVyVGltZW91dCgoKT0+'@;
put 'e3RoaXMuaW5zdGFuY2UuX3JlZnJlc2hCb3JkZXJzKCl9KSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKFJzZSksc3VwZXIuY2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0'@;
put 'aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07aWYobCl7Y29uc3QgZD10aGlzLm9yaWdpbmFsVmFsdWU7dm9pZCAwIT09ZCYmdGhpcy5zZXRWYWx1ZShkKX1zdXBl'@;
put 'ci5maW5pc2hFZGl0aW5nKGwsYSl9c2hvd0RhdGVwaWNrZXIobCl7Y29uc3QgYT10aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9dGhpcy5jZWxsUHJvcGVydGllcy5kYXRlRm9ybWF0fHx0aGlzLmRlZmF1bHREYXRlRm9ybWF0LGg9dGhpcy5pbnN0YW5jZS52aWV3LmlzTW91c2VE'@;
put 'b3duKCksZj0hIWwmJm5qKGwua2V5Q29kZSk7bGV0IHY7dGhpcy5kYXRlUGlja2VyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLiRkYXRlUGlja2VyPW5ldyBMc2UodGhpcy5nZXREYXRlUGlja2VyQ29uZmlnKCkpLHRoaXMuJGRhdGVQaWNrZXIuX29uSW5wdXRGb2N1cz1mdW5jdGlvbigp'@;
put 'e30sdGhpcy5kYXRlUGlja2VyU3R5bGUudG9wPWAke3RoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXQrYS50b3ArVmwodGhpcy5URCl9cHhgO2xldCBUPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7VD10aGlzLmhvdC5pc1J0bCgpP2EucmlnaHQtTmEodGhpcy5kYXRlUGlj'@;
put 'a2VyKTphLmxlZnQsdGhpcy5kYXRlUGlja2VyU3R5bGUubGVmdD1gJHtUfXB4YCx0aGlzLm9yaWdpbmFsVmFsdWU/KHY9dGhpcy5vcmlnaW5hbFZhbHVlLGRhKHYsZCwhMCkuaXNWYWxpZCgpJiZ0aGlzLiRkYXRlUGlja2VyLnNldE1vbWVudChkYSh2LGQpLCEwKSx0aGlzLmdldFZhbHVlKCkh'@;
put 'PT10aGlzLm9yaWdpbmFsVmFsdWUmJnRoaXMuc2V0VmFsdWUodGhpcy5vcmlnaW5hbFZhbHVlKSwhZiYmIWgmJnRoaXMuc2V0VmFsdWUoIiIpKTp0aGlzLmNlbGxQcm9wZXJ0aWVzLmRlZmF1bHREYXRlPyh2PXRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGUsZGEodixkLCEwKS5pc1Zh'@;
put 'bGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KGRhKHYsZCksITApLCFmJiYhaCYmdGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuJGRhdGVQaWNrZXIuZ290b1RvZGF5KCl9aGlkZURhdGVwaWNrZXIoKXt0aGlzLmRhdGVQaWNrZXJTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLiRkYXRl'@;
put 'UGlja2VyLmhpZGUoKX1nZXREYXRlUGlja2VyQ29uZmlnKCl7Y29uc3QgbD10aGlzLlRFWFRBUkVBLGE9e307dGhpcy5jZWxsUHJvcGVydGllcyYmdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnJiZwdyhhLHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZVBpY2tlckNvbmZpZyk7'@;
put 'Y29uc3QgZD1hLm9uU2VsZWN0LGg9YS5vbkNsb3NlO3JldHVybiBhLmZpZWxkPWwsYS50cmlnZ2VyPWwsYS5jb250YWluZXI9dGhpcy5kYXRlUGlja2VyLGEuYm91bmQ9ITEsYS5mb3JtYXQ9YS5mb3JtYXR8fHRoaXMuZGVmYXVsdERhdGVGb3JtYXQsYS5yZXBvc2l0aW9uPWEucmVwb3NpdGlv'@;
put 'bnx8ITEsYS5pc1JUTD0hMSxhLm9uU2VsZWN0PWY9PntsZXQgdj1mO2lzTmFOKHYuZ2V0VGltZSgpKXx8KHY9ZGEodikuZm9ybWF0KHRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdHx8dGhpcy5kZWZhdWx0RGF0ZUZvcm1hdCkpLHRoaXMuc2V0VmFsdWUodiksdGhpcy5oaWRlRGF0ZXBp'@;
put 'Y2tlcigpLGQmJmQoKX0sYS5vbkNsb3NlPSgpPT57dGhpcy5wYXJlbnREZXN0cm95ZWR8fHRoaXMuZmluaXNoRWRpdGluZyghMSksaCYmaCgpfSxhfX1jbGFzcyBJWSBleHRlbmRzIExZe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4iZHJvcGRvd24ifXByZXBhcmUobCxhLGQsaCxm'@;
put 'LHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuY2VsbFByb3BlcnRpZXMuZmlsdGVyPSExLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0PSEwfX1hby5nZXRTaW5nbGV0b24oKS5hZGQoImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbihjLGwsYSl7Y29uc3QgZD10aGlzLmdldENl'@;
put 'bGxNZXRhKGwsdGhpcy5wcm9wVG9Db2woYSkpO2QuZWRpdG9yPT09SVkmJnZvaWQgMD09PWQuc3RyaWN0JiYoZC5maWx0ZXI9ITEsZC5zdHJpY3Q9ITApfSk7Y2xhc3MgUHNlIGV4dGVuZHMgJGd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJudW1lcmljIn19Y2xhc3MgRnNlIGV4'@;
put 'dGVuZHMgJGd7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJwYXNzd29yZCJ9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpLHRoaXMuVEVYVEFSRUE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0IiksdGhpcy5URVhUQVJFQS5z'@;
put 'ZXRBdHRyaWJ1dGUoInR5cGUiLCJwYXNzd29yZCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLHRoaXMuVEVYVEFSRUEuY2xhc3NOYW1lPSJoYW5kc29udGFibGVJbnB1dCIsdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhp'@;
put 'cy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLGgyKHRoaXMuVEVYVEFSRUFfUEFSRU5UKSx0aGlzLlRFWFRBUkVBX1BBUkVOVC5hcHBlbmRDaGlsZCh0aGlzLlRFWFRBUkVBKX19Y29uc3QgUlk9Imh0X2VkaXRvcl92aXNpYmxlIixIc2U9InNlbGVj'@;
put 'dEVkaXRvciI7Y2xhc3MgQk5lIGV4dGVuZHMgUzl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJzZWxlY3QifWluaXQoKXt0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiU0VMRUNUIiksd2kodGhpcy5zZWxlY3QsImh0U2VsZWN0RWRpdG9y'@;
put 'IiksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMucmVnaXN0ZXJIb29rcygpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuc2VsZWN0LnZhbHVlfXNldFZhbHVlKGwpe3RoaXMuc2VsZWN0LnZh'@;
put 'bHVlPWx9b3Blbigpe3RoaXMuX29wZW5lZD0hMCx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zZWxlY3Quc3R5bGUuZGlzcGxheT0iIix0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5zZXRBY3RpdmVDb250ZXh0TmFtZSgiZWRpdG9yIiksdGhpcy5yZWdpc3RlclNob3J0Y3V0'@;
put 'cygpfWNsb3NlKCl7dGhpcy5fb3BlbmVkPSExLHRoaXMuc2VsZWN0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLFFvKHRoaXMuc2VsZWN0LFJZKSYmc3ModGhpcy5zZWxlY3QsUlkpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuY2xlYXJIb29rcygpfWZvY3VzKCl7dGhpcy5zZWxlY3Qu'@;
put 'Zm9jdXMoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMu'@;
put 'YWRkSG9vaygiYWZ0ZXJDb2x1bW5SZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dSZXNpemUiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpfXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYp'@;
put 'O2NvbnN0IFQ9dGhpcy5jZWxsUHJvcGVydGllcy5zZWxlY3RPcHRpb25zO2xldCBZO1k9dGhpcy5wcmVwYXJlT3B0aW9ucygiZnVuY3Rpb24iPT10eXBlb2YgVD9UKHRoaXMucm93LHRoaXMuY29sLHRoaXMucHJvcCk6VCksaDIodGhpcy5zZWxlY3QpLHlzKFksKHJlLGZlKT0+e2NvbnN0IF9l'@;
put 'PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJPUFRJT04iKTtfZS52YWx1ZT1mZSxGZyhfZSxyZSksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoX2UpfSl9cHJlcGFyZU9wdGlvbnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVu'@;
put 'Z3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwmJihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0'@;
put 'VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7aWYodGhpcy5zdGF0ZSE9PXh1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDps'@;
put 'LHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGY9dGhpcy5zZWxlY3Quc3R5bGU7Zi5oZWlnaHQ9YCR7aH1weGAsZi53aWR0aD1gJHtkfXB4YCxmLnRvcD1gJHtsfXB4YCxmW3RoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJdPWAke2F9cHhg'@;
put 'LGYubWFyZ2luPSIwcHgiLHdpKHRoaXMuc2VsZWN0LFJZKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIiksZD17Z3JvdXA6SHNlfTshMSE9PXRoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNo'@;
put 'b3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5zZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMu'@;
put 'c2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hv'@;
put 'cnRjdXRzQnlHcm91cChIc2UpfX1jbGFzcyBOc2UgZXh0ZW5kcyAkZ3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLHYpe3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBPWShj'@;
put 'LGwsYSxkLGgsZix2KXtBdy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksRmcobCxmPz8iIiwhMSl9ZnVuY3Rpb24gazkoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50OlR9PWMsWT12LmFsbG93SHRtbD9PWTpjbSxyZT1ULmNyZWF0ZUVsZW1lbnQoIkRJViIpO2lmKHJlLmNs'@;
put 'YXNzTmFtZT0iaHRBdXRvY29tcGxldGVBcnJvdyIscmUuYXBwZW5kQ2hpbGQoVC5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLFkuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGwuZmlyc3RDaGlsZHx8bC5hcHBlbmRDaGlsZChULmNyZWF0ZVRleHROb2RlKCJceGEwIikpLGwuaW5zZXJ0'@;
put 'QmVmb3JlKHJlLGwuZmlyc3RDaGlsZCksd2kobCwiaHRBdXRvY29tcGxldGUiKSwhYy5hY0Fycm93TGlzdGVuZXIpe2NvbnN0IGZlPW5ldyBqbChjKTtjLmFjQXJyb3dMaXN0ZW5lcj1mdW5jdGlvbihfZSl7UW8oX2UudGFyZ2V0LCJodEF1dG9jb21wbGV0ZUFycm93IikmJmMudmlldy5fd3Qu'@;
put 'Z2V0U2V0dGluZygib25DZWxsRGJsQ2xpY2siLG51bGwsYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGQpLGwpfSxmZS5hZGRFdmVudExpc3RlbmVyKGMucm9vdEVsZW1lbnQsIm1vdXNlZG93biIsYy5hY0Fycm93TGlzdGVuZXIpLGMuYWRkSG9va09uY2UoImFmdGVyRGVzdHJveSIsKCk9PntmZS5k'@;
put 'ZXN0cm95KCl9KX19T1kuUkVOREVSRVJfVFlQRT0iaHRtbCIsazkuUkVOREVSRVJfVFlQRT0iYXV0b2NvbXBsZXRlIjtjb25zdCBWc2U9bmV3IFdlYWtNYXAsanNlPW5ldyBXZWFrTWFwLFdOZT0iaHRCYWRWYWx1ZSIsRTk9ImRhdGEtcm93IixUOT0iZGF0YS1jb2wiLEdOZT0iY2hlY2tib3hS'@;
put 'ZW5kZXJlciI7ZnVuY3Rpb24gUFkoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50OlR9PWM7QXcuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGZ1bmN0aW9uICROZShjKXtsZXQgbD1qc2UuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDphfT1jO2w9bmV3IGpsKGMp'@;
put 'LGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24gSk5lKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUZZKGEpfHwhYS5oYXNBdHRyaWJ1dGUoRTkpfHwhYS5oYXNBdHRyaWJ1dGUoVDkpKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKEU5KSwx'@;
put 'MCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShUOSksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gWE5lKGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7Rlko'@;
put 'YSkmJighYS5oYXNBdHRyaWJ1dGUoRTkpfHwhYS5oYXNBdHRyaWJ1dGUoVDkpfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjaGFuZ2UiLGQ9PmZ1bmN0aW9uIFFOZShjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFGWShhKXx8IWEuaGFz'@;
put 'QXR0cmlidXRlKEU5KXx8IWEuaGFzQXR0cmlidXRlKFQ5KSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShFOSksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRyaWJ1dGUoVDkpLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25seSl7bGV0IHY9bnVsbDt2'@;
put 'PWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNoZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLHYpfX0oZCxjKSksanNlLnNldChjLGwpfX0oYyk7'@;
put 'bGV0IFk9ZnVuY3Rpb24gcU5lKGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwudHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJhdXRvY29tcGxldGUiLCJvZmYiKSxsLnNldEF0dHJp'@;
put 'YnV0ZSgidGFiaW5kZXgiLCItMSIpLGwuY2xvbmVOb2RlKCExKX0oVCk7Y29uc3QgcmU9di5sYWJlbDtsZXQgZmU9ITE7aWYodHlwZW9mIHYuY2hlY2tlZFRlbXBsYXRlPiJ1IiYmKHYuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2Ygdi51bmNoZWNrZWRUZW1wbGF0ZT4idSImJih2LnVuY2hl'@;
put 'Y2tlZFRlbXBsYXRlPSExKSxoMihsKSxmPT09di5jaGVja2VkVGVtcGxhdGV8fCRsKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PSRsKHYuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/WS5jaGVja2VkPSEwOmY9PT12LnVuY2hlY2tlZFRlbXBs'@;
put 'YXRlfHwkbChmKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk9PT0kbCh2LnVuY2hlY2tlZFRlbXBsYXRlKS50b0xvY2FsZUxvd2VyQ2FzZSh2LmxvY2FsZSk/WS5jaGVja2VkPSExOnFjKGYpP3dpKFksIm5vVmFsdWUiKTooWS5zdHlsZS5kaXNwbGF5PSJub25lIix3aShZLFdOZSksZmU9'@;
put 'ITApLFkuc2V0QXR0cmlidXRlKEU5LGEpLFkuc2V0QXR0cmlidXRlKFQ5LGQpLCFmZSYmcmUpe2xldCBKZT0iIjtpZihyZS52YWx1ZSlKZT0iZnVuY3Rpb24iPT10eXBlb2YgcmUudmFsdWU/cmUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOnJlLnZhbHVlO2Vsc2UgaWYocmUucHJvcGVydHkp'@;
put 'e2NvbnN0IHl0PWMuZ2V0RGF0YUF0Um93UHJvcChhLHJlLnByb3BlcnR5KTtKZT1udWxsIT09eXQ/eXQ6IiJ9Y29uc3QgdHQ9ZnVuY3Rpb24gS05lKGMsbCxhKXtjb25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtyZXR1cm4gZC5jbGFzc05hbWU9Imh0Q2hlY2tib3hSZW5kZXJlckxh'@;
put 'YmVsICIrKGE/ImZ1bGxXaWR0aCI6IiIpLGQuYXBwZW5kQ2hpbGQoYy5jcmVhdGVUZXh0Tm9kZShsKSksZC5jbG9uZU5vZGUoITApfShULEplLCEwIT09cmUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PXJlLnBvc2l0aW9uP3JlLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZCh0dCksbC5hcHBlbmRD'@;
put 'aGlsZChZKSk6KHR0LmFwcGVuZENoaWxkKFkpLFk9dHQpOighcmUucG9zaXRpb258fCJhZnRlciI9PT1yZS5wb3NpdGlvbikmJihyZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoWSksbC5hcHBlbmRDaGlsZCh0dCkpOih0dC5pbnNlcnRCZWZvcmUoWSx0dC5maXJzdENoaWxkKSxZPXR0KSl9'@;
put 'ZnVuY3Rpb24ga2UoKXtsZXQgSmU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCB0dD1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZih0dClmb3IobGV0IHl0PTA7eXQ8dHQubGVuZ3RoO3l0Kyspe2NvbnN0e3Jvdzp3dCxjb2w6THR9'@;
put 'PXR0W3l0XS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6b24sY29sOnNufT10dFt5dF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCksTW49W107Zm9yKGxldCBWbj13dDtWbjw9b247Vm4rPTEpZm9yKGxldCB1cj1MdDt1cjw9c247dXIrPTEpe2NvbnN0IFRyPWMuZ2V0Q2VsbE1ldGEoVm4sdXIpO2lm'@;
put 'KCJjaGVja2JveCIhPT1Uci50eXBlKXJldHVybjtpZighMD09PVRyLnJlYWRPbmx5KWNvbnRpbnVlO3R5cGVvZiBUci5jaGVja2VkVGVtcGxhdGU+InUiJiYoVHIuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgVHIudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoVHIudW5jaGVja2VkVGVtcGxh'@;
put 'dGU9ITEpO2NvbnN0IFBpPWMuZ2V0RGF0YUF0Q2VsbChWbix1cik7ITE9PT1KZT9bVHIuY2hlY2tlZFRlbXBsYXRlLFRyLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhQaSk/TW4ucHVzaChbVm4sdXIsVHIudW5jaGVja2VkVGVtcGxhdGVdKTpbVHIudW5jaGVja2VkVGVt'@;
put 'cGxhdGUsVHIudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVkZXMoUGkpJiZNbi5wdXNoKFtWbix1cixUci5jaGVja2VkVGVtcGxhdGVdKTpNbi5wdXNoKFtWbix1cixUci51bmNoZWNrZWRUZW1wbGF0ZV0pfU1uLmxlbmd0aD4wJiZjLnNldERhdGFBdENl'@;
put 'bGwoTW4pfX1mdW5jdGlvbiBXZSgpe2NvbnN0IEplPWMuZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKEplKXtmb3IobGV0IHR0PTA7dHQ8SmUubGVuZ3RoO3R0Kyspe2NvbnN0IHl0PUplW3R0XS5nZXRUb3BTdGFydENvcm5lcigpLHd0PUplW3R0XS5nZXRCb3R0b21FbmRDb3JuZXIoKTtmb3IobGV0'@;
put 'IEx0PXl0LnJvdztMdDw9d3Qucm93O0x0KyspZm9yKGxldCBvbj15dC5jb2w7b248PXd0LmNvbDtvbisrKXtjb25zdCBzbj1jLmdldENlbGxNZXRhKEx0LG9uKTtpZigiY2hlY2tib3giIT09c24udHlwZSlyZXR1cm4hMTtjb25zdCBNbj1jLmdldENlbGwoTHQsb24pO2lmKG51bGw9PU1uKXJl'@;
put 'dHVybiEwO2lmKE1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hdIikubGVuZ3RoPjAmJiFzbi5yZWFkT25seSlyZXR1cm4hMH19cmV0dXJuITF9fSghcmV8fHJlJiYhcmUuc2VwYXJhdGVkKSYmbC5hcHBlbmRDaGlsZChZKSxmZSYmbC5hcHBlbmRDaGlsZChULmNyZWF0'@;
put 'ZVRleHROb2RlKCIjYmFkLXZhbHVlIyIpKSxWc2UuaGFzKGMpfHwoVnNlLnNldChjLCEwKSxmdW5jdGlvbiBfZSgpe2MuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1sic3BhY2UiXV0sY2FsbGJhY2s6KCk9PihrZSgpLCFXZSgp'@;
put 'KX0se2tleXM6W1siZW50ZXIiXV0sY2FsbGJhY2s6KCk9PihrZSgpLCFXZSgpKSxydW5Pbmx5SWY6KCk9PmMuZ2V0U2V0dGluZ3MoKS5lbnRlckJlZ2luc0VkaXRpbmd9LHtrZXlzOltbImRlbGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oa2UoITApLCFXZSgpKSxyZWxhdGl2'@;
put 'ZVRvR3JvdXA6bXcscG9zaXRpb246ImJlZm9yZSJ9XSx7Z3JvdXA6R05lfSl9KCkpfWZ1bmN0aW9uIEZZKGMpe3JldHVybiJJTlBVVCI9PT1jLnRhZ05hbWUmJiJjaGVja2JveCI9PT1jLmdldEF0dHJpYnV0ZSgidHlwZSIpfWFvLmdldFNpbmdsZXRvbigpLmFkZCgibW9kaWZ5QXV0b0NvbHVt'@;
put 'blNpemVTZWVkIixmdW5jdGlvbihjLGwsYSl7Y29uc3R7bGFiZWw6ZCx0eXBlOmgscm93OmYsY29sdW1uOnYscHJvcDpUfT1sO2lmKCJjaGVja2JveCI9PT1oKXtpZihkKXtjb25zdHt2YWx1ZTpZLHByb3BlcnR5OnJlfT1kO2xldCBmZT1hO2lmKFkpZmU9ImZ1bmN0aW9uIj09dHlwZW9mIFk/'@;
put 'WShmLHYsVCxhKTpZO2Vsc2UgaWYocmUpe2NvbnN0IF9lPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLHJlKTtmZT1udWxsIT09X2U/X2U6YX1jPWZlfXJldHVybiBjfX0pLFBZLlJFTkRFUkVSX1RZUEU9ImNoZWNrYm94Ijt2YXIgdW09UigyNTM2NyksZVZlPVIubih1bSk7ZnVuY3Rpb24gSFko'@;
put 'YyxsLGEsZCxoLGYsdil7bGV0IFQ9ZjtpZihSMChUKSl7Y29uc3QgWT12Lm51bWVyaWNGb3JtYXQscmU9WSYmWS5jdWx0dXJlfHwiLSIsZmU9WSYmWS5wYXR0ZXJuLF9lPXYuY2xhc3NOYW1lfHwiIixrZT1fZS5sZW5ndGg/X2Uuc3BsaXQoIiAiKTpbXTtpZih0eXBlb2YgcmU8InUiJiYhdW0u'@;
put 'bGFuZ3VhZ2VzKClbcmVdKXtjb25zdCBXZT1yZS5yZXBsYWNlKCItIiwiIiksSmU9dW0uYWxsTGFuZ3VhZ2VzP3VtLmFsbExhbmd1YWdlc1tyZV06dW1bV2VdO0plJiZ1bS5yZWdpc3Rlckxhbmd1YWdlKEplKX11bS5zZXRMYW5ndWFnZShyZSksVD11bShUKS5mb3JtYXQoZmV8fCIwIiksa2Uu'@;
put 'aW5kZXhPZigiaHRMZWZ0Iik8MCYma2UuaW5kZXhPZigiaHRDZW50ZXIiKTwwJiZrZS5pbmRleE9mKCJodFJpZ2h0Iik8MCYma2UuaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYma2UucHVzaCgiaHRSaWdodCIpLGtlLmluZGV4T2YoImh0TnVtZXJpYyIpPDAmJmtlLnB1c2goImh0TnVtZXJpYyIp'@;
put 'LHYuY2xhc3NOYW1lPWtlLmpvaW4oIiAiKSxsLmRpcj0ibHRyIn1jbShjLGwsYSxkLGgsVCx2KX1mdW5jdGlvbiBOWShjLGwsYSxkLGgsZix2KXtjbS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7Y29uc3QgWT12Lmhhc2hTeW1ib2x8fCIqIjtsZXQgcmU9IiI7TW8oKHYuaGFzaExlbmd0'@;
put 'aHx8bC5pbm5lckhUTUwubGVuZ3RoKS0xLCgpPT57cmUrPVl9KSxGZyhsLHJlKX1mdW5jdGlvbiBWWShjLGwsYSxkLGgsZix2KXtjbS5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24gSXcoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSx0aGlzLmFs'@;
put 'bG93RW1wdHkmJiIiPT09YT9sKCEwKTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsWXNlKGEsbCkpOllzZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiBZc2UoYyxsKXtjb25zdCBhPWM7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKGQpe2xldCBoPSExO2ZvcihsZXQgZj0wLHY9ZC5sZW5ndGg7Zjx2O2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiB6c2UoYyl7Y29uc3QgbD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6MDBgKS5nZXREYXRlKCkp'@;
put 'P2w6bmV3IERhdGUobC5nZXRUaW1lKCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gaUQoYyxsKXtjb25zdCBhPXNvZShJc2UsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1kYShkLHRoaXMuZGF0ZUZvcm1hdHx8YS5kZWZhdWx0'@;
put 'RGF0ZUZvcm1hdCwhMCkuaXNWYWxpZCgpLHY9ZGEobmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKHY9ITAsZj0hMCksdnx8KGg9ITEpLCF2JiZmJiYoaD0hMCksdiYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IFQ9ZnVu'@;
put 'Y3Rpb24gYVZlKGMsbCl7Y29uc3QgYT1kYSh6c2UoYykpLGQ9ZGEoYyxsKSxoPWMuc2VhcmNoKC9bQS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3JtYXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5mb3JtYXQobCl9KGQsdGhp'@;
put 'cy5kYXRlRm9ybWF0KSxZPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLHJlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChZLHJlLFQsImRhdGVWYWxpZGF0b3IiKSxoPSEwfWVsc2UgaD0hMTtsKGgp'@;
put 'fWZ1bmN0aW9uIGpZKGMsbCl7bGV0IGE9YztudWxsPT1hJiYoYT0iIiksbCghKCF0aGlzLmFsbG93RW1wdHl8fCIiIT09YSl8fCIiIT09YSYmUjAoYykpfUhZLlJFTkRFUkVSX1RZUEU9Im51bWVyaWMiLE5ZLlJFTkRFUkVSX1RZUEU9InBhc3N3b3JkIixWWS5SRU5ERVJFUl9UWVBFPSJ0aW1l'@;
put 'IixJdy5WQUxJREFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixpRC5WQUxJREFUT1JfVFlQRT0iZGF0ZSIsalkuVkFMSURBVE9SX1RZUEU9Im51bWVyaWMiO2NvbnN0IGNWZT1bIllZWVktTU0tRERUSEg6bW06c3MuU1NTWiIsIlgiLCJ4Il07ZnVuY3Rpb24gb0QoYyxsKXtjb25zdCBhPXRoaXMu'@;
put 'dGltZUZvcm1hdHx8Img6bW06c3MgYSI7bGV0IGQ9ITAsaD1jO251bGw9PT1oJiYoaD0iIiksaD0vXlxkezMsfSQvLnRlc3QoaCk/cGFyc2VJbnQoaCwxMCk6aDtjb25zdCBmPS9eXGR7MSwyfSQvLnRlc3QoaCk7ZiYmKGgrPSI6MDAiKTtjb25zdCB2PWRhKGgsY1ZlLCEwKS5pc1ZhbGlkKCk/'@;
put 'ZGEoaCk6ZGEoaCxhKTtsZXQgVD12LmlzVmFsaWQoKSxZPWRhKGgsYSwhMCkuaXNWYWxpZCgpJiYhZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09aCYmKFQ9ITAsWT0hMCksVHx8KGQ9ITEpLCFUJiZZJiYoZD0hMCksVCYmIVkpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IHJl'@;
put 'PXYuZm9ybWF0KGEpLGZlPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxSb3codGhpcy5yb3cpLF9lPXRoaXMuaW5zdGFuY2UudG9WaXN1YWxDb2x1bW4odGhpcy5jb2wpO3RoaXMuaW5zdGFuY2Uuc2V0RGF0YUF0Q2VsbChmZSxfZSxyZSwidGltZVZhbGlkYXRvciIpLGQ9ITB9ZWxzZSBkPSExO2wo'@;
put 'ZCl9b0QuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IGhWZT17Q0VMTF9UWVBFOiJhdXRvY29tcGxldGUiLGVkaXRvcjpMWSxyZW5kZXJlcjprOSx2YWxpZGF0b3I6SXd9LGZWZT17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOkFzZSxyZW5kZXJlcjpQWX0scFZlPXtDRUxMX1RZUEU6'@;
put 'ImRhdGUiLGVkaXRvcjpPc2UscmVuZGVyZXI6azksdmFsaWRhdG9yOmlEfSxtVmU9e0NFTExfVFlQRToiZHJvcGRvd24iLGVkaXRvcjpJWSxyZW5kZXJlcjprOSx2YWxpZGF0b3I6SXd9LGdWZT17Q0VMTF9UWVBFOiJoYW5kc29udGFibGUiLGVkaXRvcjpEWSxyZW5kZXJlcjprOX0sX1ZlPXtD'@;
put 'RUxMX1RZUEU6Im51bWVyaWMiLGVkaXRvcjpQc2UscmVuZGVyZXI6SFksdmFsaWRhdG9yOmpZLGRhdGFUeXBlOiJudW1iZXIifSx2VmU9e0NFTExfVFlQRToicGFzc3dvcmQiLGVkaXRvcjpGc2UscmVuZGVyZXI6TlksY29weWFibGU6ITF9LHlWZT17Q0VMTF9UWVBFOiJ0aW1lIixlZGl0b3I6'@;
put 'TnNlLHJlbmRlcmVyOlZZLHZhbGlkYXRvcjpvRH07Y29uc3QgVXNlPW5ldyBNYXAoW1sicGx1Z2luIixmdW5jdGlvbiBVT2UoYyl7cmV0dXJuISFndyhjKX1dLFsiY2VsbC10eXBlIixwc2VdLFsiZWRpdG9yIixvb2VdLFsicmVuZGVyZXIiLHBvZV0sWyJ2YWxpZGF0b3IiLG1vZV1dKSxLZz1u'@;
put 'ZXcgV2Vha01hcCxCWT1bXTtsZXQgVGY9bnVsbDt2YXIgWnNlPW5ldyBXZWFrU2V0O2NsYXNzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfWNvbnN0cnVjdG9yKGwpeyhmdW5j'@;
put 'dGlvbiB3VmUoYyxsKXsoZnVuY3Rpb24gTVZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLFpzZSksQ2YodGhp'@;
put 'cywiaG90IixsLHt3cml0YWJsZTohMX0pLEtnLnNldCh0aGlzLHtob29rczp7fX0pLFRmPW51bGwsdGhpcy5wbHVnaW5OYW1lPW51bGwsdGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3M9W10sdGhpcy5pc1BsdWdpbnNSZWFkeT0hMSx0aGlzLmVuYWJsZWQ9ITEsdGhpcy5pbml0aWFs'@;
put 'aXplZD0hMSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9PnRoaXMub25BZnRlclBsdWdpbnNJbml0aWFsaXplZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixhPT50aGlzLm9uVXBkYXRlU2V0dGluZ3MoYSkpLHRoaXMuaG90'@;
put 'LmFkZEhvb2soImJlZm9yZUluaXQiLCgpPT50aGlzLmluaXQoKSl9aW5pdCgpe3RoaXMucGx1Z2luTmFtZT10aGlzLmhvdC5nZXRQbHVnaW5OYW1lKHRoaXMpO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5QTFVHSU5fREVQUyxhPUFycmF5LmlzQXJyYXkobCk/bDpbXTtpZihhLmxlbmd0aD4w'@;
put 'KXtjb25zdCBoPVtdO2lmKGEuZm9yRWFjaChmPT57Y29uc3RbdixUXT1mLnNwbGl0KCI6Iik7aWYoIVVzZS5oYXModikpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHBsdWdpbiBkZXBlbmRlbmN5IHR5cGUgIiR7dn0iIHdhcyBmb3VuZC5gKTtVc2UuZ2V0KHYpKFQpfHxoLnB1c2goYCAtICR7'@;
put 'VH0gKCR7dn0pYCl9KSxoLmxlbmd0aD4wKXtjb25zdCBmPVtgVGhlICR7dGhpcy5wbHVnaW5OYW1lfSBwbHVnaW4gcmVxdWlyZXMgdGhlIGZvbGxvd2luZyBtb2R1bGVzOlxuYCxgJHtoLmpvaW4oIlxuIil9XG5gXS5qb2luKCIiKTtCWS5wdXNoKGYpfX1pZihUZnx8KFRmPW1qKCkpLFRmLmlu'@;
put 'ZGV4T2YoIlVuZG9SZWRvIik+PTAmJlRmLnNwbGljZShUZi5pbmRleE9mKCJVbmRvUmVkbyIpLDEpLFRmLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKT49MCYmVGYuc3BsaWNlKFRmLmluZGV4T2YodGhpcy5wbHVnaW5OYW1lKSwxKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJQbHVnaW5z'@;
put 'SW5pdGlhbGl6ZWQiLCgpPT57dGhpcy5pc0VuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJnRoaXMuZW5hYmxlUGx1Z2luKCl9KSwwPT09VGYubGVuZ3RoKXtpZihCWS5sZW5ndGg+MCl7Y29uc3QgaD1bYCR7Qlkuam9pbigiXG4iKX1cbmAsIllvdSBoYXZlIHRvIGltcG9ydCBhbmQgcmVnaXN0'@;
put 'ZXIgdGhlbSBtYW51YWxseS4iXS5qb2luKCIiKTt0aHJvdyBuZXcgRXJyb3IoaCl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIil9dGhpcy5pbml0aWFsaXplZD0hMH1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWQ9ITB9ZGlzYWJsZVBsdWdpbigpe3RoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1hZGRIb29rKGwsYSl7S2cuZ2V0KHRoaXMpLmhvb2tzW2xdPUtnLmdldCh0aGlzKS5ob29rc1tsXXx8W107Y29uc3QgZD1LZy5nZXQodGhpcykuaG9va3NbbF07'@;
put 'dGhpcy5ob3QuYWRkSG9vayhsLGEpLGQucHVzaChhKSxLZy5nZXQodGhpcykuaG9va3NbbF09ZH1yZW1vdmVIb29rcyhsKXtSbihLZy5nZXQodGhpcykuaG9va3NbbF18fFtdLGE9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGwsYSl9KX1jbGVhckhvb2tzKCl7Y29uc3QgbD1LZy5nZXQodGhpcyku'@;
put 'aG9va3M7eXMobCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCl7'@;
put 'Um4odGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT1mdW5jdGlvbiBDVmUoYyxsLGEpe2lmKCFsLmhh'@;
put 'cyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGF9KHRoaXMsWnNlLHhWZSkuY2FsbCh0aGlzLGwpO3RoaXMuaXNFbmFibGVkJiYodGhpcy5lbmFibGVkJiYhdGhpcy5pc0VuYWJsZWQoKSYmdGhp'@;
put 'cy5kaXNhYmxlUGx1Z2luKCksIXRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmVuYWJsZWQmJnRoaXMuaXNFbmFibGVkKCkmJmEmJnRoaXMudXBkYXRlUGx1Z2luKGwpKX11cGRhdGVQbHVnaW4oKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRN'@;
put 'YW5hZ2VyJiZ0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCkseXModGhpcywobCxhKT0+eyJob3QiIT09YSYmKHRoaXNbYV09bnVsbCl9KSxkZWxldGUgdGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24geFZlKGMpe2lmKCFjKXJldHVybiExO2NvbnN0'@;
put 'IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1jW2xbYV1dKXJldHVybiEwO3JldHVybiExfWNvbnN0IFlZPWNsYXNzIGtWZXtjb25zdHJ1Y3RvcihsKXt0'@;
put 'aGlzLmhvdD1sLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSx0aGlzLnJvd3M9W10sdGhpcy5jb2x1bW5zPVtdLHRoaXMuc2FtcGxlcz1udWxsLHRoaXMuc2V0dGluZ3M9e3VzZUhlYWRlcnM6ITB9fWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1ucy5sZW5ndGgpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17cm93Omx9O3RoaXMucm93'@;
put 'cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy50YWJsZS50ci5hcHBlbmRDaGlsZCh0'@;
put 'aGlzLmNyZWF0ZVJvdyhsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1hZGRDb2x1bW5IZWFkZXJzUm93KGwpe2lmKG51bGwhPXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qg'@;
put 'ZD17cm93Oi0xfTt0aGlzLnJvd3MucHVzaChkKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpLHRoaXMuc2FtcGxlcz1sLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUp'@;
put 'LHRoaXMudGFibGUuY29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2woKSksdGhpcy5hcHBlbmRDb2x1bW5IZWFkZXJzUm93KCksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJs'@;
put 'ZS50YWJsZX19YWRkQ29sdW1uKGwsYSl7aWYodGhpcy5yb3dzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkRvZXNuJ3Qgc3VwcG9ydCBtdWx0aS1kaW1lbnNpb25hbCB0YWJsZSIpO3RoaXMuY29sdW1ucy5sZW5ndGh8fCh0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlz'@;
put 'LmhvdC5yb290RWxlbWVudC5jbGFzc05hbWUpKTtjb25zdCBkPXtjb2w6bH07dGhpcy5jb2x1bW5zLnB1c2goZCksdGhpcy5zYW1wbGVzPWEsdGhpcy50YWJsZT10aGlzLmNyZWF0ZVRhYmxlKHRoaXMuaG90LnRhYmxlLmNsYXNzTmFtZSksdGhpcy5nZXRTZXR0aW5nKCJ1c2VIZWFkZXJzIikm'@;
put 'Jm51bGwhPT10aGlzLmhvdC5nZXRDb2xIZWFkZXIobCkmJnRoaXMuaG90LnZpZXcuYXBwZW5kQ29sSGVhZGVyKGwsdGhpcy50YWJsZS50aCksdGhpcy50YWJsZS50Qm9keS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbChsKSksdGhpcy5jb250YWluZXIuY29udGFpbmVyLmFwcGVuZENoaWxk'@;
put 'KHRoaXMudGFibGUuZnJhZ21lbnQpLGQudGFibGU9dGhpcy50YWJsZS50YWJsZX1nZXRIZWlnaHRzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxSbih0aGlzLnJvd3MsYT0+e2woYS5yb3csVmwoYS50YWJsZSktMSl9KX1nZXRXaWR0aHMobCl7dGhpcy5pbmplY3RlZHx8'@;
put 'dGhpcy5pbmplY3RUYWJsZSgpLFJuKHRoaXMuY29sdW1ucyxhPT57Y29uc3R7d2lkdGg6ZH09YS50YWJsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsKGEuY29sLE1hdGguY2VpbChkKSl9KX1zZXRTZXR0aW5ncyhsKXt0aGlzLnNldHRpbmdzPWx9c2V0U2V0dGluZyhsLGEpe3RoaXMuc2V0'@;
put 'dGluZ3N8fCh0aGlzLnNldHRpbmdzPXt9KSx0aGlzLnNldHRpbmdzW2xdPWF9Z2V0U2V0dGluZ3MoKXtyZXR1cm4gdGhpcy5zZXR0aW5nc31nZXRTZXR0aW5nKGwpe3JldHVybiB0aGlzLnNldHRpbmdzP3RoaXMuc2V0dGluZ3NbbF06bnVsbH1jcmVhdGVDb2xHcm91cHNDb2woKXtjb25zdCBs'@;
put 'PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmbC5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZUNvbEVsZW1lbnQoLTEpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChhPT57Um4oYS5zdHJpbmdzLGQ9Pnts'@;
put 'LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudChkLmNvbCkpfSl9KSxsfWNyZWF0ZVJvdyhsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxoPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5ob3QuaGFz'@;
put 'Um93SGVhZGVycygpJiYodGhpcy5ob3Qudmlldy5hcHBlbmRSb3dIZWFkZXIobCxoKSxkLmFwcGVuZENoaWxkKGgpKSx0aGlzLnNhbXBsZXMuZm9yRWFjaChmPT57Um4oZi5zdHJpbmdzLHY9Pntjb25zdCBUPXYuY29sLFk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxUKTtZLmNvbD1ULFkucm93'@;
put 'PWw7Y29uc3QgcmU9dGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKFkpLGZlPWEuY3JlYXRlRWxlbWVudCgidGQiKTtmZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxyZSh0aGlzLmhvdCxmZSxsLFQsdGhpcy5ob3QuY29sVG9Qcm9wKFQpLHYudmFsdWUsWSksZC5hcHBlbmRDaGlsZChm'@;
put 'ZSl9KX0pLGR9YXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9W107aWYodGhpcy5ob3QuaGFzUm93SGVhZGVycygpKXtjb25zdCBoPWwuY3JlYXRlRWxlbWVudCgidGgiKTtkLnB1c2go'@;
put 'Wy0xLGhdKSxhLmFwcGVuZENoaWxkKGgpfXRoaXMuc2FtcGxlcy5mb3JFYWNoKGg9PntSbihoLnN0cmluZ3MsZj0+e2NvbnN0IHY9Zi5jb2wsVD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFt2LFRdKSxhLmFwcGVuZENoaWxkKFQpfSl9KSx0aGlzLnRhYmxlLnRIZWFkLmFwcGVuZENo'@;
put 'aWxkKGEpLFJuKGQsaD0+e2NvbnN0W2Ysdl09aDt0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihmLHYpfSl9Y3JlYXRlQ29sKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO3JldHVybiB0aGlzLnNhbXBsZXMuZm9yRWFj'@;
put 'aChoPT57Um4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYucm93LFQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEodixsKTtULmNvbD1sLFQucm93PXY7Y29uc3QgWT10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoVCkscmU9YS5jcmVhdGVFbGVtZW50KCJ0ZCIpLGZlPWEuY3JlYXRlRWxlbWVudCgidHIi'@;
put 'KTtyZS5zZXRBdHRyaWJ1dGUoImdob3N0LXRhYmxlIiwxKSxZKHRoaXMuaG90LHJlLHYsbCx0aGlzLmhvdC5jb2xUb1Byb3AobCksZi52YWx1ZSxUKSxmZS5hcHBlbmRDaGlsZChyZSksZC5hcHBlbmRDaGlsZChmZSl9KX0pLGR9Y2xlYW4oKXt0aGlzLnJvd3MubGVuZ3RoPTAsdGhpcy5yb3dz'@;
put 'Wy0xXT12b2lkIDAsdGhpcy5jb2x1bW5zLmxlbmd0aD0wLHRoaXMuc2FtcGxlcyYmdGhpcy5zYW1wbGVzLmNsZWFyKCksdGhpcy5zYW1wbGVzPW51bGwsdGhpcy5yZW1vdmVUYWJsZSgpfWluamVjdFRhYmxlKCl7dGhpcy5pbmplY3RlZHx8KCgoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh'@;
put 'PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpfHx0aGlzLmhvdC5yb290RWxlbWVudCkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIuZnJhZ21lbnQpLHRoaXMuaW5qZWN0ZWQ9ITApfXJlbW92ZVRhYmxlKCl7dGhpcy5pbmplY3RlZCYmdGhpcy5jb250YWluZXIuY29udGFpbmVy'@;
put 'LnBhcmVudE5vZGUmJih0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lci5jb250YWluZXIpLHRoaXMuY29udGFpbmVyPW51bGwsdGhpcy5pbmplY3RlZD0hMSl9Y3JlYXRlQ29sRWxlbWVudChsKXtjb25zdCBhPXRoaXMuaG90LnJv'@;
put 'b3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjb2wiKTtyZXR1cm4gYS5zdHlsZS53aWR0aD1gJHt0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKGwpfXB4YCxhfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h'@;
put 'cmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHY9YS5jcmVhdGVFbGVtZW50KCJ0Ym9k'@;
put 'eSIpLFQ9YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLFk9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLHJlPWEuY3JlYXRlRWxlbWVudCgidGgiKTtyZXR1cm4gdGhpcy5pc1ZlcnRpY2FsKCkmJmguYXBwZW5kQ2hpbGQoVCksdGhpcy5pc0hvcml6b250YWwoKSYmKFkuYXBwZW5kQ2hpbGQocmUp'@;
put 'LGYuYXBwZW5kQ2hpbGQoWSksaC5zdHlsZS50YWJsZUxheW91dD0iYXV0byIsaC5zdHlsZS53aWR0aD0iYXV0byIpLGguYXBwZW5kQ2hpbGQoZiksdGhpcy5pc1ZlcnRpY2FsKCkmJnYuYXBwZW5kQ2hpbGQoWSksaC5hcHBlbmRDaGlsZCh2KSx3aShoLGwpLGQuYXBwZW5kQ2hpbGQoaCkse2Zy'@;
put 'YWdtZW50OmQsdGFibGU6aCx0SGVhZDpmLHRCb2R5OnYsY29sR3JvdXA6VCx0cjpZLHRoOnJlfX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMu'@;
put 'aG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB3aShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVyOmh9fWlzVmVydGljYWwoKXty'@;
put 'ZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2NsYXNzIHpZe3N0YXRpYyBnZXQgU0FNUExFX0NPVU5UKCl7cmV0dXJuIDN9Y29uc3RydWN0'@;
put 'b3IobCl7dGhpcy5zYW1wbGVzPW51bGwsdGhpcy5kYXRhRmFjdG9yeT1sLHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bnVsbCx0aGlzLmFsbG93RHVwbGljYXRlcz0hMX1nZXRTYW1wbGVDb3VudCgpe3JldHVybiB0aGlzLmN1c3RvbVNhbXBsZUNvdW50P3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ6'@;
put 'elkuU0FNUExFX0NPVU5UfXNldFNhbXBsZUNvdW50KGwpe3RoaXMuY3VzdG9tU2FtcGxlQ291bnQ9bH1zZXRBbGxvd0R1cGxpY2F0ZXMobCl7dGhpcy5hbGxvd0R1cGxpY2F0ZXM9bH1nZW5lcmF0ZVJvd1NhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoInJvdyIsYSxs'@;
put 'KX1nZW5lcmF0ZUNvbHVtblNhbXBsZXMobCxhKXtyZXR1cm4gdGhpcy5nZW5lcmF0ZVNhbXBsZXMoImNvbCIsYSxsKX1nZW5lcmF0ZVNhbXBsZXMobCxhLGQpe2NvbnN0IGg9bmV3IE1hcCx7ZnJvbTpmLHRvOnZ9PSJudW1iZXIiPT10eXBlb2YgZD97ZnJvbTpkLHRvOmR9OmQ7cmV0dXJuIE1v'@;
put 'KGYsdixUPT57Y29uc3QgWT10aGlzLmdlbmVyYXRlU2FtcGxlKGwsYSxUKTtoLnNldChULFkpfSksaH1nZW5lcmF0ZVNhbXBsZShsLGEsZCl7aWYoInJvdyIhPT1sJiYiY29sIiE9PWwpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzYW1wbGUgdHlwZSIpO2NvbnN0IGg9bmV3IE1hcCxm'@;
put 'PSJyb3ciPT09bD8iY29sIjoicm93Iix2PVtdO3JldHVybiBNbyhhLmZyb20sYS50byxUPT57Y29uc3R7dmFsdWU6WSxidW5kbGVTZWVkOnJlfT0icm93Ij09PWw/dGhpcy5kYXRhRmFjdG9yeShkLFQpOnRoaXMuZGF0YUZhY3RvcnkoVCxkKSxmZT0ic3RyaW5nIj09dHlwZW9mIHJlJiZyZS5s'@;
put 'ZW5ndGg+MDtsZXQgX2U7X2U9ZmU/cmU6dnMoWSk/YCR7T2JqZWN0LmtleXMoWSkubGVuZ3RofWA6QXJyYXkuaXNBcnJheShZKT9gJHtZLmxlbmd0aH1gOmAkeyRsKFkpLmxlbmd0aH1gLGguaGFzKF9lKXx8aC5zZXQoX2Use25lZWRlZDp0aGlzLmdldFNhbXBsZUNvdW50KCksc3RyaW5nczpb'@;
put 'XX0pO2NvbnN0IGtlPWguZ2V0KF9lKTtrZS5uZWVkZWQmJighKHYuaW5kZXhPZihZKT4tMSl8fHRoaXMuYWxsb3dEdXBsaWNhdGVzfHxmZSkmJihrZS5zdHJpbmdzLnB1c2goe3ZhbHVlOlksW2ZdOlR9KSx2LnB1c2goWSksa2UubmVlZGVkLT0xKX0pLGh9fWNvbnN0IFdzZT16WTthby5nZXRT'@;
put 'aW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIik7Y29uc3QgUnc9ImF1dG9Db2x1bW5TaXplIixVWT1uZXcgV2Vha01hcDtjbGFzcyBPdyBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBSd31zdGF0aWMgZ2V0IFBMVUdJTl9QUklP'@;
put 'UklUWSgpe3JldHVybiAxMH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1zdGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksVVku'@;
put 'c2V0KHRoaXMse2NhY2hlZENvbHVtbkhlYWRlcnM6W119KSx0aGlzLmdob3N0VGFibGU9bmV3IFlZKHRoaXMuaG90KSx0aGlzLnNhbXBsZXNHZW5lcmF0b3I9bmV3IFdzZSgoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgZj0iIjtoLnNwYW5uZWR8fChmPXRo'@;
put 'aXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IHY9IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYodj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b0NvbHVtblNpemVTZWVkIix2LGgsZikpLHt2YWx1ZTpmLGJ1bmRsZVNlZWQ6'@;
put 'dn19KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhpcy5pblByb2dyZXNzPSExLHRoaXMubWVhc3VyZWRDb2x1bW5zPTAsdGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IGFtLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvQ29sdW1uU2l6ZSIsdGhpcy5jb2x1'@;
put 'bW5XaWR0aHNNYXApLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoYSxkLGgpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGEsZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuITEhPT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1J3XSYmIXRoaXMuaG90LmdldFNldHRpbmdzKCku'@;
put 'Y29sV2lkdGhzfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbUnddO2EmJm51bGwhPWEudXNlSGVhZGVycyYmdGhpcy5naG9zdFRhYmxlLnNldFNldHRpbmcoInVzZUhlYWRlcnMiLGEudXNlSGVh'@;
put 'ZGVycyksdGhpcy5zZXRTYW1wbGluZ09wdGlvbnMoKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZD0+dGhpcy5vbkJlZm9yZUNo'@;
put 'YW5nZShkKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixkPT50aGlzLm9uQWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZShkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3UmVuZGVyIixkPT50aGlzLm9uQmVmb3JlVmlld1JlbmRlcihkKSksdGhpcy5hZGRIb29r'@;
put 'KCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMuZ2V0Q29sdW1uV2lkdGgoaCxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLm9uQWZ0ZXJJbml0KCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5maW5kQ29sdW1uc1doZXJl'@;
put 'SGVhZGVyV2FzQ2hhbmdlZCgpO2wubGVuZ3RoJiYodGhpcy5jbGVhckNhY2hlKGwpLHRoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRkSG9vaygiYmVmb3Jl'@;
put 'Q29sdW1uUmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpe2lmKCF0aGlzLmhvdC5jb3VudFJvd3MoKSlyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5yZW5kZXJDYWxsLGQ9dGhpcy5nZXRGaXJzdFZp'@;
put 'c2libGVDb2x1bW4oKSxoPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMT09PWR8fC0xPT09aHx8dGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206ZCx0bzpofSx2b2lkIDAsYSl9Y2FsY3VsYXRlQ29sdW1uc1dpZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk'@;
put 'IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06YTtNbyhoLmZyb20saC50byx2PT57bGV0IFQ9dGhpcy5ob3Qu'@;
put 'dG9QaHlzaWNhbENvbHVtbih2KTtudWxsPT09VCYmKFQ9diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoVCkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoVCkpJiZSbih0aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1'@;
put 'bW5TYW1wbGVzKHYsZikscmU9PntsZXRbZmUsX2VdPXJlO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkQ29sdW1uKGZlLF9lKX0pfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0V2lkdGhz'@;
put 'KCh2LFQpPT57Y29uc3QgWT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChZLFQpfSl9LCEwKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1bGF0ZUFsbENvbHVt'@;
put 'bnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9MDtjb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpLTE7bGV0IGg9bnVsbDt0aGlzLmluUHJvZ3Jl'@;
put 'c3M9ITA7Y29uc3QgZj0oKT0+e2lmKCF0aGlzLmhvdClyZXR1cm4gX3coaCksdm9pZCh0aGlzLmluUHJvZ3Jlc3M9ITEpO3RoaXMuY2FsY3VsYXRlQ29sdW1uc1dpZHRoKHtmcm9tOmEsdG86TWF0aC5taW4oYStPdy5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWErT3cuQ0FMQ1VMQVRJT05f'@;
put 'U1RFUCsxLGE8ZD9oPVJUKGYpOihfdyhoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LHY9dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO3RoaXMuZmlyc3RDYWxjdWxhdGlvbiYmdj49MCYmKHRoaXMuY2FsY3VsYXRlQ29sdW1u'@;
put 'c1dpZHRoKHtmcm9tOjAsdG86dn0sbCksdGhpcy5maXJzdENhbGN1bGF0aW9uPSExLGE9disxKSxhPGQ/ZigpOnRoaXMuaW5Qcm9ncmVzcz0hMX1zZXRTYW1wbGluZ09wdGlvbnMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbUnddLGE9bCYmcWwobCwic2FtcGxpbmdSYXRpbyIp'@;
put 'P2wuc2FtcGxpbmdSYXRpbzp2b2lkIDAsZD1sJiZxbChsLCJhbGxvd1NhbXBsZUR1cGxpY2F0ZXMiKT9sLmFsbG93U2FtcGxlRHVwbGljYXRlczp2b2lkIDA7YSYmIWlzTmFOKGEpJiZ0aGlzLnNhbXBsZXNHZW5lcmF0b3Iuc2V0U2FtcGxlQ291bnQocGFyc2VJbnQoYSwxMCkpLGQmJnRoaXMu'@;
put 'c2FtcGxlc0dlbmVyYXRvci5zZXRBbGxvd0R1cGxpY2F0ZXMoZCl9cmVjYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoKXt0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy5jbGVhckNhY2hlKCksdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5z'@;
put 'V2lkdGgoKSl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbUnddO2xldCBhPU93LlNZTkNfQ0FMQ1VMQVRJT05fTElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiB2cyhsKSYmKGE9bC5zeW5jTGltaXQsWVYo'@;
put 'YSk/YT1kaihkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1'@;
put 'bWVudHNbMV06dm9pZCAwO3JldHVybiB2b2lkIDA9PT1oJiYoaD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSksZCYmIm51bWJlciI9PXR5cGVvZiBoJiYoaD1NYXRoLm1heChoLE9qLkRFRkFVTFRfV0lEVEgpKSksaH1n'@;
put 'ZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpO2lmKC0xIT09YSlyZXR1cm4gdGhpcy5ob3QuY29sdW1u'@;
put 'SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChhKX1pZihsLnd0Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKTtpZigtMSE9PWEpcmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4'@;
put 'TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYSl9cmV0dXJuLTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0O2lmKGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Ipe2NvbnN0IGE9bC53dFRhYmxlLmdldExhc3RW'@;
put 'aXNpYmxlQ29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfWlmKGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcil7Y29uc3QgYT1sLnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVk'@;
put 'Q29sdW1uKCk7aWYoLTEhPT1hKXJldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpfXJldHVybi0xfWZpbmRDb2x1bW5zV2hlcmVIZWFkZXJXYXNDaGFuZ2VkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSx7Y2Fj'@;
put 'aGVkQ29sdW1uSGVhZGVyczphfT1VWS5nZXQodGhpcyk7cmV0dXJuIHNjKGwsKGgsZix2KT0+e2NvbnN0IFQ9YS5sZW5ndGg7cmV0dXJuKFQtMTx2fHxhW3ZdIT09ZikmJmgucHVzaCh2KSxULTE8dj9hLnB1c2goZik6YVt2XT1mLGh9LFtdKX1jbGVhckNhY2hlKCl7bGV0IGw9YXJndW1lbnRz'@;
put 'Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO2wubGVuZ3RoP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57Um4obCxhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMuY29sdW1uV2lkdGhz'@;
put 'TWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIWZkKHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAsdGhpcy5tZWFzdXJlZENvbHVtbnMpLGw9Pm51bGw9PT1sKS5sZW5ndGh9b25CZWZvcmVWaWV3UmVuZGVyKCl7dGhpcy5jYWxjdWxhdGVWaXNp'@;
put 'YmxlQ29sdW1uc1dpZHRoKCksdGhpcy5pc05lZWRSZWNhbGN1bGF0ZSgpJiYhdGhpcy5pblByb2dyZXNzJiZ0aGlzLmNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpOnNldFRp'@;
put 'bWVvdXQoKCk9Pnt0aGlzLmhvdCYmdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfSwwKX1vbkJlZm9yZUNoYW5nZShsKXtjb25zdCBhPV9zKGwsZD0+e2xldFssaF09ZDtyZXR1cm4gdGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih0aGlzLmhvdC5wcm9wVG9Db2woaCkpfSk7dGhp'@;
put 'cy5jbGVhckNhY2hlKEFycmF5LmZyb20obmV3IFNldChhKSkpfW9uQmVmb3JlQ29sdW1uUmVzaXplKGwsYSxkKXtsZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoYSx2b2lkIDAsITApLGg9dGhpcy5nZXRDb2x1bW5XaWR0aChhLHZvaWQgMCwhMSkpLGh9b25B'@;
put 'ZnRlckluaXQoKXtVWS5nZXQodGhpcykuY2FjaGVkQ29sdW1uSGVhZGVycz10aGlzLmhvdC5nZXRDb2xIZWFkZXIoKX1vbkFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUobCl7Y29uc3QgZD1fcyhmZChsLGg9Pnt2YXIgZjtyZXR1cm4gZW8obnVsbD09PShmPWguYWRkcmVzcyl8fHZvaWQgMD09'@;
put 'PWY/dm9pZCAwOmYuY29sKX0pLGg9PmguYWRkcmVzcy5jb2wpO3RoaXMuY2xlYXJDYWNoZShBcnJheS5mcm9tKG5ldyBTZXQoZCkpKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBYZz17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVy'@;
put 'dGljYWw6InZlcnRpY2FsIn07YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9maWxsUmFuZ2UiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQXV0b2ZpbGwiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJBdXRvZmlsbCIpO2NvbnN0IElW'@;
put 'ZT1bImZpbGxIYW5kbGUiXTtjbGFzcyBQVmUgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4u'@;
put 'SVZlXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamwodGhpcyksdGhpcy5hZGRpbmdTdGFydGVkPSExLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExLHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRo'@;
put 'aXMuZGlyZWN0aW9ucz1bXSx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLm1hcFNldHRpbmdzKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd24iLGw9PnRoaXMub25BZnRlckNlbGxDb3JuZXJNb3VzZURvd24obCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsbD0+dGhpcy5vbkNlbGxDb3JuZXJEYmxDbGljayhsKSksdGhpcy5hZGRIb29r'@;
put 'KCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLChsLGEpPT50aGlzLm9uQmVmb3JlQ2VsbE1vdXNlT3ZlcihhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlz'@;
put 'YWJsZVBsdWdpbigpe3RoaXMuY2xlYXJNYXBwZWRTZXR0aW5ncygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTZWxlY3Rpb25EYXRhKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6aCxj'@;
put 'b2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixbe3N0YXJ0Um93OmEsc3RhcnRDb2w6ZCxlbmRSb3c6aCxlbmRDb2w6Zn1dKSxUPVtdLFk9W10scmU9W107cmV0dXJuIFJuKHYsZmU9Pntmb3IobGV0IF9lPWZlLnN0'@;
put 'YXJ0Um93O19lPD1mZS5lbmRSb3c7X2UrPTEpLTE9PT1ULmluZGV4T2YoX2UpJiZULnB1c2goX2UpO2ZvcihsZXQgX2U9ZmUuc3RhcnRDb2w7X2U8PWZlLmVuZENvbDtfZSs9MSktMT09PVkuaW5kZXhPZihfZSkmJlkucHVzaChfZSl9KSxSbihULGZlPT57Y29uc3QgX2U9W107Um4oWSxrZT0+'@;
put 'e19lLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGZlLGtlKSl9KSxyZS5wdXNoKF9lKX0pLHJlfWZpbGxJbigpe2lmKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmlzRW1wdHkoKSlyZXR1cm4hMTtjb25zdFtsLGEsZCxoXT10aGlzLmhvdC5zZWxlY3Rpb24u'@;
put 'aGlnaGxpZ2h0LmdldEZpbGwoKS5nZXRWaXN1YWxDb3JuZXJzKCksZj10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9Zi5nZXRUb3BTdGFydENvcm5lcigpLFQ9Zi5nZXRCb3R0b21FbmRDb3JuZXIoKTt0aGlzLnJlc2V0U2VsZWN0aW9uT2ZEcmFnZ2VkQXJlYSgpO2NvbnN0IFk9'@;
put 'W3Yucm93LHYuY29sLFQucm93LFQuY29sXSxyZT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKHYucm93LGwpLE1hdGgubWluKHYuY29sLGEpLE1hdGgubWF4KFQucm93LGQpLE1hdGgubWF4KFQuY29sLGgpXSxZKSx7ZGlyZWN0aW9uT2ZEcmFnOmZl'@;
put 'LHN0YXJ0T2ZEcmFnQ29vcmRzOl9lLGVuZE9mRHJhZ0Nvb3JkczprZX09ZnVuY3Rpb24gRFZlKGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNbMV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09'@;
put 'Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsxXT09PWNbMV0mJihmPSJkb3duIixkPWEoY1sy'@;
put 'XSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShZLHJlLChXZSxKZSk9PnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFdlLEpl'@;
put 'KSk7aWYoX2UmJl9lLnJvdz4tMSYmX2UuY29sPi0xKXtjb25zdCBXZT10aGlzLmdldFNlbGVjdGlvbkRhdGEoKSxKZT1mLmNsb25lKCksdHQ9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZShfZSxfZSxrZSkseXQ9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUF1dG9maWxsIixXZSxKZSx0dCxm'@;
put 'ZSk7aWYoITE9PT15dClyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKSx0aGlzLmhvdC5yZW5kZXIoKSwhMTtsZXQgd3Q9eXQ7Y29uc3QgTHQ9eXQ7aWYoWyJ1cCIsImxlZnQiXS5pbmRleE9mKGZlKT4tMSYmKDEhPT1MdC5sZW5ndGh8fDAhPT1M'@;
put 'dFswXS5sZW5ndGgpKWlmKHd0PVtdLCJ1cCI9PT1mZSl7Y29uc3Qgb249a2Uucm93LV9lLnJvdysxLHNuPW9uJUx0Lmxlbmd0aDtmb3IobGV0IE1uPTA7TW48b247TW4rKyl3dC5wdXNoKEx0WyhNbisoTHQubGVuZ3RoLXNuKSklTHQubGVuZ3RoXSl9ZWxzZXtjb25zdCBvbj1rZS5jb2wtX2Uu'@;
put 'Y29sKzEsc249b24lTHRbMF0ubGVuZ3RoO2ZvcihsZXQgTW49MDtNbjxMdC5sZW5ndGg7TW4rKyl7d3QucHVzaChbXSk7Zm9yKGxldCBWbj0wO1ZuPG9uO1ZuKyspd3RbTW5dLnB1c2goTHRbTW5dWyhWbisoTHRbTW5dLmxlbmd0aC1zbikpJUx0W01uXS5sZW5ndGhdKX19dGhpcy5ob3QucG9w'@;
put 'dWxhdGVGcm9tQXJyYXkoX2Uucm93LF9lLmNvbCx3dCxrZS5yb3csa2UuY29sLGAke3RoaXMucGx1Z2luTmFtZX0uZmlsbGAsbnVsbCksdGhpcy5zZXRTZWxlY3Rpb24ocmUpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckF1dG9maWxsIix3dCxKZSx0dCxmZSksdGhpcy5ob3QucmVuZGVyKCl9'@;
put 'ZWxzZSB0aGlzLmhvdC5fcmVmcmVzaEJvcmRlcnMoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKXtjb25zdCBhPXRoaXMu'@;
put 'aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKFhnLnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKFhnLmhvcml6b250YWwpKXtjb25zdCBmPWEuZ2V0VG9wU3RhcnRD'@;
put 'b3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdyxkLmNvbCkpfWVsc2UgaWYodGhp'@;
put 'cy5kaXJlY3Rpb25zLmluY2x1ZGVzKFhnLnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoWGcuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZC5y'@;
put 'b3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93KCl7dGhpcy5ob3QuX3JlZ2lzdGVy'@;
put 'VGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5n'@;
put 'ZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGQ9dGhp'@;
put 'cy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxkPXRoaXMuaG90LmNvdW50Um93cygp'@;
put 'O2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBZPWxbMV07WTw9bFszXTtZKyspaWYoYVtmXVtZXSlyZXR1cm4tMTsoYVtmXVtsWzFdLTFdfHxhW2ZdW2xbM10rMV0pJiYoaD1mKX1yZXR1cm4gaH1hZGRTZWxlY3Rpb25Gcm9tU3RhcnRBcmVhVG9TcGVjaWZpY1Jvd0lu'@;
put 'ZGV4KGwsYSl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFswXSxsWzFdKSkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEsbFszXSkpLmNvbW1pdCgpfXNldFNlbGVjdGlvbihsKXt0'@;
put 'aGlzLmhvdC5zZWxlY3RDZWxsKC4uLl9zKGwsYT0+TWF0aC5tYXgoYSwwKSksITEsITEpfXNlbGVjdEFkamFjZW50KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxhPXRoaXMuZ2V0SW5kZXhPZkxhc3RBZGphY2VudEZpbGxlZEluUm93KGwpO3JldHVybi0xIT09YSYmdm9p'@;
put 'ZCAwIT09YSYmKHRoaXMuYWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpLCEwKX1yZXNldFNlbGVjdGlvbk9mRHJhZ2dlZEFyZWEoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNs'@;
put 'ZWFyKCl9cmVkcmF3Qm9yZGVycyhsKXt0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmZyb20pLmFkZCh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLnRvKS5hZGQobCkuY29tbWl0'@;
put 'KCksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUobCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50OmF9PXRoaXMuaG90LnJvb3REb2N1bWVudCxkPVNjKHRoaXMuaG90LnRhYmxlKS50b3AtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVlPZmZzZXR8fGEu'@;
put 'c2Nyb2xsVG9wKStWbCh0aGlzLmhvdC50YWJsZSksaD1TYyh0aGlzLmhvdC50YWJsZSkubGVmdC0odGhpcy5ob3Qucm9vdFdpbmRvdy5wYWdlWE9mZnNldHx8YS5zY3JvbGxMZWZ0KStOYSh0aGlzLmhvdC50YWJsZSk7cmV0dXJuIGwuY2xpZW50WT5kJiZsLmNsaWVudFg8PWh9cmVnaXN0ZXJF'@;
put 'dmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91'@;
put 'c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKX1vbkNlbGxDb3JuZXJEYmxDbGljaygpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1vbkFmdGVyQ2VsbENvcm5lck1vdXNlRG93bigpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPTEsdGhpcy5tb3VzZURvd25PbkNl'@;
put 'bGxDb3JuZXI9ITB9b25CZWZvcmVDZWxsTW91c2VPdmVyKGwpe3RoaXMubW91c2VEb3duT25DZWxsQ29ybmVyJiYhdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzKz0xLHRoaXMuc2hvd0JvcmRlcihs'@;
put 'KSx0aGlzLmFkZE5ld1Jvd0lmTmVlZGVkKCkpfW9uTW91c2VVcCgpe3RoaXMuaGFuZGxlRHJhZ2dlZENlbGxzJiYodGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM+MSYmdGhpcy5maWxsSW4oKSx0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0wLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSExKX1v'@;
put 'bk1vdXNlTW92ZShsKXtjb25zdCBhPXRoaXMuZ2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpOyExPT09dGhpcy5hZGRpbmdTdGFydGVkJiZ0aGlzLmhhbmRsZURyYWdnZWRDZWxscz4wJiZhPyh0aGlzLm1vdXNlRHJhZ091dHNpZGU9ITAsdGhpcy5hZGRpbmdTdGFydGVkPSEwKTp0aGlz'@;
put 'Lm1vdXNlRHJhZ091dHNpZGU9ITEsdGhpcy5tb3VzZURyYWdPdXRzaWRlJiZ0aGlzLmF1dG9JbnNlcnRSb3cmJnRoaXMuYWRkUm93KCl9Y2xlYXJNYXBwZWRTZXR0aW5ncygpe3RoaXMuZGlyZWN0aW9ucy5sZW5ndGg9MCx0aGlzLmF1dG9JbnNlcnRSb3c9ITF9bWFwU2V0dGluZ3MoKXtjb25z'@;
put 'dCBsPWZ1bmN0aW9uIEFWZShjKXtjb25zdCBsPXt9O3JldHVybiEwPT09Yz8obC5kaXJlY3Rpb25zPU9iamVjdC5rZXlzKFhnKSxsLmF1dG9JbnNlcnRSb3c9ITApOnZzKGMpPyhsLmF1dG9JbnNlcnRSb3c9ISFlbyhjLmF1dG9JbnNlcnRSb3cpJiZjLmRpcmVjdGlvbiE9PVhnLmhvcml6b250'@;
put 'YWwmJmMuYXV0b0luc2VydFJvdyxsLmRpcmVjdGlvbnM9ZW8oYy5kaXJlY3Rpb24pP1tjLmRpcmVjdGlvbl06T2JqZWN0LmtleXMoWGcpKToic3RyaW5nIj09dHlwZW9mIGM/KGwuZGlyZWN0aW9ucz1bY10sbC5hdXRvSW5zZXJ0Um93PSEwKToobC5kaXJlY3Rpb25zPVtdLGwuYXV0b0luc2Vy'@;
put 'dFJvdz0hMSksbH0odGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlKTt0aGlzLmRpcmVjdGlvbnM9bC5kaXJlY3Rpb25zLHRoaXMuYXV0b0luc2VydFJvdz1sLmF1dG9JbnNlcnRSb3d9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3Qgc0Q9ImF1dG9Sb3dTaXplIjtjbGFz'@;
put 'cyBQdyBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBzRH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA0MH1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfXN0YXRpYyBnZXQgQ0FMQ1VMQVRJT05fU1RFUCgpe3JldHVybiA1MH1z'@;
put 'dGF0aWMgZ2V0IFNZTkNfQ0FMQ1VMQVRJT05fTElNSVQoKXtyZXR1cm4gNTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMucm93SGVpZ2h0c01hcD12b2lkIDAsdGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCx0aGlzLmdob3N0VGFibGU9bmV3IFlZKHRoaXMuaG90KSx0aGlzLnNhbXBsZXNH'@;
put 'ZW5lcmF0b3I9bmV3IFdzZSgoYSxkKT0+e2xldCBoO3JldHVybiBhPj0wP2g9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKGg9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6aH19KSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITAsdGhpcy5pblByb2dyZXNzPSEx'@;
put 'LHRoaXMubWVhc3VyZWRSb3dzPTAsdGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBhbSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgiYXV0b1Jvd1NpemUiLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChhLGQsaCk9PnRoaXMub25C'@;
put 'ZWZvcmVSb3dSZXNpemUoYSxkLGgpKX1pc0VuYWJsZWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbc0RdO3JldHVybiEwPT09bHx8dnMobCl9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldFNhbXBsaW5nT3B0aW9ucygpLHRoaXMuYWRk'@;
put 'SG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ2hhbmdlUmVuZGVyIixhPT50aGlzLm9uQmVmb3JlQ2hhbmdlKGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6'@;
put 'ZSIsKCk9PnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsYT0+dGhpcy5vbkJlZm9yZVZpZXdSZW5kZXIoYSkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoYSxkKT0+dGhpcy5nZXRSb3dIZWlnaHQoZCxhKSks'@;
put 'dGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVtbkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaGVhZGVySGVpZ2h0PW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMuYWRk'@;
put 'SG9vaygiYmVmb3JlUm93UmVzaXplIiwobCxhLGQpPT50aGlzLm9uQmVmb3JlUm93UmVzaXplKGwsYSxkKSl9Y2FsY3VsYXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90'@;
put 'LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJd'@;
put 'O2NvbnN0IGg9Im51bWJlciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgdj10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVz'@;
put 'KC0xLGYpO3RoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KHYuZ2V0KC0xKSl9TW8oaC5mcm9tLGgudG8sdj0+eyhkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh2KSkmJlJuKHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBs'@;
put 'ZXModixmKSxZPT57bGV0W3JlLGZlXT1ZO3JldHVybiB0aGlzLmdob3N0VGFibGUuYWRkUm93KHJlLGZlKX0pfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygodixUKT0+e3Y8MD90'@;
put 'aGlzLmhlYWRlckhlaWdodD1UOnRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxUKX0pfSwhMCksdGhpcy5tZWFzdXJlZFJvd3M9aC50bysxLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1jYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl7'@;
put 'bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT0wO2NvbnN0IGQ9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgaD1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25z'@;
put 'dCBmPSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBfdyhoKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmEsdG86TWF0aC5taW4oYStQdy5DQUxDVUxBVElPTl9TVEVQLGQpfSxsKSxhPWErUHcuQ0FMQ1VMQVRJT05fU1RFUCsxLGE8ZD9o'@;
put 'PVJUKGYpOihfdyhoKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlu'@;
put 'bGluZVN0YXJ0T3ZlcmxheS5jbG9uZS5kcmF3KCkpfSx2PXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTt0aGlzLmZpcnN0Q2FsY3VsYXRpb24mJnY+PTAmJih0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206MCx0bzp2fSxsKSx0aGlzLmZpcnN0Q2FsY3VsYXRpb249ITEsYT12'@;
put 'KzEpLGE8ZD9mKCk6KHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMSkpfXNldFNhbXBsaW5nT3B0aW9ucygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtzRF0sYT1sJiZxbChsLCJzYW1wbGluZ1JhdGlvIik/bC5zYW1wbGluZ1Jh'@;
put 'dGlvOnZvaWQgMCxkPWwmJnFsKGwsImFsbG93U2FtcGxlRHVwbGljYXRlcyIpP2wuYWxsb3dTYW1wbGVEdXBsaWNhdGVzOnZvaWQgMDthJiYhaXNOYU4oYSkmJnRoaXMuc2FtcGxlc0dlbmVyYXRvci5zZXRTYW1wbGVDb3VudChwYXJzZUludChhLDEwKSksZCYmdGhpcy5zYW1wbGVzR2VuZXJh'@;
put 'dG9yLnNldEFsbG93RHVwbGljYXRlcyhkKX1yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKXthOSh0aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLlRBQkxFKSYmKHRoaXMuY2xlYXJDYWNoZSgpLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgp'@;
put 'e2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtzRF07bGV0IGE9UHcuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90LmNvdW50Um93cygpLTE7cmV0dXJuIHZzKGwpJiYoYT1sLnN5bmNMaW1pdCxZVihhKT9hPWRqKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9'@;
put 'Z2V0Um93SGVpZ2h0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2b2lkIDA7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNp'@;
put 'Y2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3Q7cmV0dXJuIGwud3RWaWV3'@;
put 'cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3I/bC53dFRhYmxlLmdldEZpcnN0VmlzaWJsZVJvdygpOmwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpOi0xfWdldExhc3RWaXNpYmxlUm93KCl7Y29uc3QgbD10aGlzLmhvdC52'@;
put 'aWV3Ll93dDtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj9sLnd0VGFibGUuZ2V0TGFzdFZpc2libGVSb3coKTpsLnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3I/bC53dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpOi0xfWNsZWFyQ2FjaGUoKXt0aGlz'@;
put 'LmhlYWRlckhlaWdodD1udWxsLHRoaXMucm93SGVpZ2h0c01hcC5pbml0KCl9Y2xlYXJDYWNoZUJ5UmFuZ2UobCl7Y29uc3R7ZnJvbTphLHRvOmR9PSJudW1iZXIiPT10eXBlb2YgbD97ZnJvbTpsLHRvOmx9Omw7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntNbyhNYXRoLm1pbihhLGQp'@;
put 'LE1hdGgubWF4KGEsZCksaD0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxudWxsKX0pfSwhMCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIWZkKHRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgwLHRoaXMubWVhc3VyZWRSb3dzKSxsPT5udWxs'@;
put 'PT09bCkubGVuZ3RofW9uQmVmb3JlVmlld1JlbmRlcigpe2NvbnN0IGw9dGhpcy5ob3QucmVuZGVyQ2FsbCxhPXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGQ9dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxoPXRoaXMuZ2V0TGFzdFZpc2libGVSb3coKTtpZigtMSE9'@;
put 'PWQmJi0xIT09aCl7aWYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtmcm9tOmQsdG86aH0sdm9pZCAwLGwpLGEpe2NvbnN0IGY9dGhpcy5ob3QuY291bnRSb3dzKCktMTt0aGlzLmNhbGN1bGF0ZVJvd3NIZWlnaHQoe2Zyb206Zi1hLHRvOmZ9KX10aGlzLmlzTmVlZFJlY2FsY3VsYXRlKCkm'@;
put 'JiF0aGlzLmluUHJvZ3Jlc3MmJnRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfX1vbkJlZm9yZVJvd01vdmUobCxhKXt0aGlzLmNsZWFyQ2FjaGVCeVJhbmdlKHtmcm9tOmwsdG86YX0pLHRoaXMuY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpfW9uQmVmb3JlUm93UmVzaXplKGwsYSxkKXts'@;
put 'ZXQgaD1sO3JldHVybiBkJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGEsdm9pZCAwLCEwKSxoPXRoaXMuZ2V0Um93SGVpZ2h0KGEpKSxofW9uQWZ0ZXJMb2FkRGF0YSgpe3RoaXMuaG90LnZpZXc/dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKTpzZXRUaW1lb3V0KCgpPT57dGhp'@;
put 'cy5ob3QmJnRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9LDApfW9uQmVmb3JlQ2hhbmdlKGwpe2xldCBhPW51bGw7MT09PWwubGVuZ3RoP2E9bFswXVswXTpsLmxlbmd0aD4xJiYoYT17ZnJvbTpsWzBdWzBdLHRvOmxbbC5sZW5ndGgtMV1bMF19KSxudWxsIT09YSYmdGhpcy5jbGVh'@;
put 'ckNhY2hlQnlSYW5nZShhKX1kZXN0cm95KCl7dGhpcy5naG9zdFRhYmxlLmNsZWFuKCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCAkc2U9bmV3IE1hcChbWyJpbmRleGVzU2VxdWVuY2UiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6emosZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6d3d9XSxb'@;
put 'InBoeXNpY2FsbHlJbmRleGVkIix7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOldqLGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOkdqfV1dKSxxc2U9Yz0+e2lmKCExPT09JHNlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYEFsdGVyIHN0cmF0ZWd5IHdpdGggSUQgJyR7Y30nIGRvZXMgbm90IGV4'@;
put 'aXN0LmApO3JldHVybiAkc2UuZ2V0KGMpfSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOk5WZSxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczpWVmV9PXFzZSgicGh5c2ljYWxseUluZGV4ZWQiKSx7Z2V0TGlzdFdpdGhJbnNlcnRlZEl0ZW1zOllWZSxnZXRMaXN0V2l0aFJlbW92ZWRJdGVtczp6'@;
put 'VmV9PXFzZSgicGh5c2ljYWxseUluZGV4ZWQiKSxaWT0iYmluZFJvd3NXaXRoSGVhZGVycyIsJFZlPW5ldyBNYXAoW1sibG9vc2UiLGNsYXNzIGpWZSBleHRlbmRzIEdne2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7Y29uc3QgZD1aaih0aGlzLmluZGV4ZWRWYWx1ZXMs'@;
put 'YSk7dGhpcy5pbmRleGVkVmFsdWVzPU5WZShkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPVZWZSh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPVVqKGEsbCksc3VwZXIucmVtb3ZlKGwpfX1dLFsic3Ry'@;
put 'aWN0IixjbGFzcyBVVmUgZXh0ZW5kcyBHZ3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1ZVmUodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUoaCkpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShs'@;
put 'KXt0aGlzLmluZGV4ZWRWYWx1ZXM9elZlKHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTtjbGFzcyBxVmUgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9L'@;
put 'RVkoKXtyZXR1cm4gWll9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjEwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuaGVhZGVySW5kZXhlcz1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtaWV19ZW5hYmxlUGx1Z2luKCl7'@;
put 'aWYodGhpcy5lbmFibGVkKXJldHVybjtsZXQgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1pZXTsic3RyaW5nIiE9dHlwZW9mIGwmJihsPSJsb29zZSIpO2NvbnN0IGE9JFZlLmdldChsKTt0aGlzLmhlYWRlckluZGV4ZXM9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImJp'@;
put 'bmRSb3dzV2l0aEhlYWRlcnMiLG5ldyBhKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRlciIsZD0+dGhpcy5vbk1vZGlmeVJvd0hlYWRlcihkKSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoImJp'@;
put 'bmRSb3dzV2l0aEhlYWRlcnMiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9b25Nb2RpZnlSb3dIZWFkZXIobCl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rp'@;
put 'b24gV1koYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIEpWZShjKXt2YXIgbD1mdW5jdGlvbiBRVmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwi'@;
put 'ZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVy'@;
put 'biJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCksbCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBLc2UoYyxsKXtyZXR1cm4gZnVuY3Rpb24g'@;
put 'ZWplKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxYc2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gR1koYyxsLGEpe3JldHVybiBmdW5jdGlvbiB0amUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLFhzZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gWHNlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZh'@;
put 'dGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0ICRZPSJjb2xsYXBzaWJsZUNvbHVtbnMiLHJqZT1bIm5lc3RlZEhlYWRlcnMiXSxEOT0iY29sbGFwc2libGVJbmRpY2F0b3IiLEpzZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZv'@;
put 'cmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJhZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKTt2YXIgQTk9bmV3'@;
put 'IFdlYWtNYXA7Y2xhc3MgaWplIGV4dGVuZHMgc2F7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFdZKHRoaXMsIm5lc3RlZEhlYWRlcnNQbHVnaW4iLG51bGwpLFdZKHRoaXMsImV2ZW50TWFuYWdlciIsbmV3IGpsKHRoaXMpKSxXWSh0aGlzLCJoZWFkZXJTdGF0ZU1hbmFnZXIi'@;
put 'LG51bGwpLGZ1bmN0aW9uIEtWZShjLGwsYSl7KGZ1bmN0aW9uIFhWZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRo'@;
put 'aXMsQTkse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gJFl9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjkwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpOZXN0ZWRIZWFkZXJzIl19c3Rh'@;
put 'dGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bJFksLi4ucmplXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbJFldfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtuZXN0ZWRIZWFkZXJzOmF9PXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKCk7YXx8YmwoIllvdSBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUgTmVzdGVkIEhlYWRlcnMgcGx1Z2luIGluIG9yZGVyIHRvIHVzZSBjb2xsYXBzaWJsZSBoZWFkZXJzLiIpLEdZKHRoaXMsQTksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuY3JlYXRlQW5kUmVnaXN0'@;
put 'ZXJJbmRleE1hcCh0aGlzLnBsdWdpbk5hbWUsImhpZGluZyIpKSx0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW49dGhpcy5ob3QuZ2V0UGx1Z2luKCJuZXN0ZWRIZWFkZXJzIiksdGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXI9dGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luLmdldFN0YXRlTWFuYWdlcigp'@;
put 'LHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGwub25BZnRlckdldENvbEhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLChkLGgsZik9PnRoaXMub25CZWZvcmVPbkNlbGxNb3VzZURvd24oZCxoLGYpKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLnVwZGF0ZVBsdWdp'@;
put 'bigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4iPT10eXBlb2YgbD90'@;
put 'aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5oZWFkZXJTdGF0ZU1hbmFn'@;
put 'ZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLEdZKHRoaXMsQTksbnVsbCksdGhpcy5uZXN0ZWRIZWFkZXJzUGx1Z2luPW51bGws'@;
put 'dGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Y2xlYXJCdXR0b25zKCl7aWYoIXRoaXMuaG90LnZpZXcpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLmxlbmd0aCxhPXRoaXMuaG90LnZpZXcuX3d0Lnd0'@;
put 'VGFibGUuVEhFQUQsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRCxoPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5P3RoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9w'@;
put 'SW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbCxmPWZ1bmN0aW9uKHYpe3YmJnYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KX07TW8oMCxsLTEsdj0+e2NvbnN0IFQ9YS5jaGlsZE5vZGVzW3ZdLFk9ZC5jaGlsZE5vZGVzW3ZdLHJlPWg/aC5jaGlsZE5v'@;
put 'ZGVzW3ZdOm51bGw7TW8oMCxULmNoaWxkTm9kZXMubGVuZ3RoLTEsZmU9PntsZXQgX2U9VC5jaGlsZE5vZGVzW2ZlXS5xdWVyeVNlbGVjdG9yKGAuJHtEOX1gKTtmKF9lKSxZJiZZLmNoaWxkTm9kZXNbZmVdJiYoX2U9WS5jaGlsZE5vZGVzW2ZlXS5xdWVyeVNlbGVjdG9yKGAuJHtEOX1gKSxm'@;
put 'KF9lKSksaCYmcmUmJnJlLmNoaWxkTm9kZXNbZmVdJiYoX2U9cmUuY2hpbGROb2Rlc1tmZV0ucXVlcnlTZWxlY3RvcihgLiR7RDl9YCksZihfZSkpfSl9KX1leHBhbmRTZWN0aW9uKGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiZXhwYW5kIil9Y29sbGFwc2VTZWN0aW9u'@;
put 'KGwpe3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKFtsXSwiY29sbGFwc2UiKX10b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKGwpe2NvbnN0IGE9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwTm9kZXMoZD0+e2NvbnN0e2NvbGxhcHNpYmxlOmgsb3JpZ0NvbHNwYW46ZixoZWFk'@;
put 'ZXJMZXZlbDp2LGNvbHVtbkluZGV4OlQsaXNDb2xsYXBzZWQ6WX09ZDtpZighMD09PWgmJmY+MSYmKFkmJiJleHBhbmQiPT09bHx8IVkmJiJjb2xsYXBzZSI9PT1sKSlyZXR1cm57cm93OnRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLmxldmVsVG9Sb3dDb29yZHModiksY29sOlR9fSk7dGhpcy50'@;
put 'b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oYSxsKX1jb2xsYXBzZUFsbCgpe3RoaXMudG9nZ2xlQWxsQ29sbGFwc2libGVTZWN0aW9ucygiY29sbGFwc2UiKX1leHBhbmRBbGwoKXt0aGlzLnRvZ2dsZUFsbENvbGxhcHNpYmxlU2VjdGlvbnMoImV4cGFuZCIpfXRvZ2dsZUNvbGxhcHNpYmxlU2Vj'@;
put 'dGlvbihsLGEpe2lmKCFKc2UuaGFzKGEpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYWN0aW9uIGlzIHBhc3NlZCAoJHthfSkuYCk7aWYoIUFycmF5LmlzQXJyYXkobCkpcmV0dXJuO2NvbnN0IGQ9ZmQobCxrZT0+e2xldHtyb3c6V2V9PWtlO3JldHVybiBXZTwwfSk7bGV0IGg9ZC5s'@;
put 'ZW5ndGg+MDtSbihkLGtlPT57dmFyIFdlO2xldHtyb3c6SmUsY29sOnR0fT1rZTtjb25zdHtjb2xsYXBzaWJsZTp5dCxpc0NvbGxhcHNlZDp3dH09bnVsbCE9PShXZT10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFkZXJTZXR0aW5ncyhKZSx0dCkpJiZ2b2lkIDAhPT1XZT9XZTp7fTtp'@;
put 'ZigheXR8fHd0JiYiY29sbGFwc2UiPT09YXx8IXd0JiYiZXhwYW5kIj09PWEpcmV0dXJuIGg9ITEsITF9KTtjb25zdCBmPVtdLHY9W107aCYmUm4oZCxrZT0+e2xldHtyb3c6V2UsY29sOkplfT1rZTtjb25zdHtjb2xzcGFuQ29tcGVuc2F0aW9uOnR0LGFmZmVjdGVkQ29sdW1uczp5dCxyb2xs'@;
put 'YmFja01vZGlmaWNhdGlvbjp3dH09dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIudHJpZ2dlck5vZGVNb2RpZmljYXRpb24oYSxXZSxKZSk7dHQ+MCYmKHYucHVzaCguLi55dCksZi5wdXNoKHd0KSl9KTtjb25zdCBUPXRoaXMuZ2V0Q29sbGFwc2VkQ29sdW1ucygpO2xldCBZPVtdOyJjb2xsYXBz'@;
put 'ZSI9PT1hP1k9SFYoWy4uLlQsLi4udl0pOiJleHBhbmQiPT09YSYmKFk9ZmQoVCxrZT0+IXYuaW5jbHVkZXMoa2UpKSk7Y29uc3QgcmU9SnNlLmdldChhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKHJlLmJlZm9yZUhvb2ssVCxZLGgpKXJldHVybiB2b2lkIFJuKGYsa2U9PntrZSgpfSk7'@;
put 'dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntSbih2LGtlPT57S3NlKHRoaXMsQTkpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGtlKSxyZS5oaWRlQ29sdW1uKX0pfSwhMCk7Y29uc3QgX2U9dGhpcy5nZXRDb2xsYXBzZWRDb2x1bW5zKCkubGVuZ3RoIT09'@;
put 'VC5sZW5ndGg7dGhpcy5ob3QucnVuSG9va3MocmUuYWZ0ZXJIb29rLFQsWSxoLF9lKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9Z2V0Q29sbGFwc2VkQ29sdW1ucygpe3JldHVybiBLc2UodGhpcyxBOSkuZ2V0SGlkZGVuSW5kZXhlcygp'@;
put 'fW9uQWZ0ZXJHZXRDb2xIZWFkZXIobCxhLGQpe3ZhciBoO2NvbnN0e2NvbGxhcHNpYmxlOmYsb3JpZ0NvbHNwYW46dixpc0NvbGxhcHNlZDpUfT1udWxsIT09KGg9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MoZCxsKSkmJnZvaWQgMCE9PWg/aDp7fSxZPWYmJnY+'@;
put 'MSYmbD49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtsZXQgcmU9YS5xdWVyeVNlbGVjdG9yKGAuJHtEOX1gKTt2YXIgZmU7WT8ocmV8fChyZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksd2kocmUsRDkpLGEucXVlcnlTZWxlY3Rv'@;
put 'cigiZGl2OmZpcnN0LWNoaWxkIikuYXBwZW5kQ2hpbGQocmUpKSxzcyhyZSxbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLFQ/KHdpKHJlLCJjb2xsYXBzZWQiKSxubShyZSwiKyIpKTood2kocmUsImV4cGFuZGVkIiksbm0ocmUsIi0iKSkpOm51bGw9PT0oZmU9cmUpfHx2b2lkIDA9PT1mZXx8'@;
put 'ZmUucmVtb3ZlKCl9b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhKXtRbyhsLnRhcmdldCxEOSkmJihRbyhsLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGwudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2Fd'@;
put 'LCJjb2xsYXBzZSIpKTpRbyhsLnRhcmdldCwiY29sbGFwc2VkIikmJih0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQobC50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbYV0sImV4cGFuZCIpKSxwMihsKSl9b25Jbml0KCl7dGhpcy51cGRhdGVQbHVn'@;
put 'aW4oKX1vbkFmdGVyTG9hZERhdGEobCxhKXthfHx0aGlzLnVwZGF0ZVBsdWdpbigpfWRlc3Ryb3koKXtHWSh0aGlzLEE5LG51bGwpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3Qgb2plPVsic29ydEVtcHR5Q2VsbHMiLCJpbmRpY2F0b3IiLCJoZWFkZXJBY3Rpb24iLCJjb21wYXJlRnVuY3Rpb25G'@;
put 'YWN0b3J5Il07Y2xhc3MgY2ple2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5ob3Q9bCx0aGlzLnNvcnRpbmdTdGF0ZXM9bmV3IFZULHRoaXMuc29ydEVtcHR5Q2VsbHM9ITEsdGhpcy5pbmRpY2F0b3I9ITAsdGhpcy5oZWFkZXJBY3Rpb249ITAsdGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5PXZv'@;
put 'aWQgMCx0aGlzLm1hcE5hbWU9YSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChhLHRoaXMuc29ydGluZ1N0YXRlcyl9dXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCl7dnMobCkmJnlzKGwsKGEsZCk9PntvamUuaW5jbHVkZXMoZCkmJih0aGlzW2RdPWEpfSl9Z2V0'@;
put 'QWxsQ29sdW1uc1Byb3BlcnRpZXMoKXtjb25zdCBsPXtzb3J0RW1wdHlDZWxsczp0aGlzLnNvcnRFbXB0eUNlbGxzLGluZGljYXRvcjp0aGlzLmluZGljYXRvcixoZWFkZXJBY3Rpb246dGhpcy5oZWFkZXJBY3Rpb259O3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbXBhcmVGdW5j'@;
put 'dGlvbkZhY3RvcnkmJihsLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk9dGhpcy5jb21wYXJlRnVuY3Rpb25GYWN0b3J5KSxsfWdldFNvcnRPcmRlck9mQ29sdW1uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5zb3J0aW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1Bo'@;
put 'eXNpY2FsQ29sdW1uKGwpKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuc29ydE9yZGVyfWdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1ZShsKXtyZXR1cm4gbD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpLHRoaXMuc29ydGluZ1N0YXRlcy5nZXRFbnRyaWVzKCkuZmluZEluZGV4KGE9Pnts'@;
put 'ZXRbZF09YTtyZXR1cm4gZD09PWx9KX1nZXROdW1iZXJPZlNvcnRlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5zb3J0aW5nU3RhdGVzLmdldExlbmd0aCgpfWlzTGlzdE9mU29ydGVkQ29sdW1uc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpfWlzQ29s'@;
put 'dW1uU29ydGVkKGwpe3JldHVybiB2cyh0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKX1nZXRTb3J0U3RhdGVzKCl7cmV0dXJuIG51bGw9PT10aGlzLnNvcnRpbmdTdGF0ZXM/W106dGhpcy5zb3J0aW5nU3RhdGVzLmdldEVu'@;
put 'dHJpZXMoKS5tYXAoYT0+e2xldFtkLGhdPWE7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKSwuLi5ofX0pfWdldENvbHVtblNvcnRTdGF0ZShsKXtjb25zdCBhPXRoaXMuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoZW8oYSkpcmV0dXJue2NvbHVtbjpsLHNvcnRP'@;
put 'cmRlcjphfX1zZXRTb3J0U3RhdGVzKGwpe3RoaXMuc29ydGluZ1N0YXRlcy5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSs9MSl0aGlzLnNvcnRpbmdTdGF0ZXMuc2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obFthXS5jb2x1bW4pLHtzb3J0T3JkZXI6'@;
put 'bFthXS5zb3J0T3JkZXJ9KX1kZXN0cm95KCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLm1hcE5hbWUpLHRoaXMuc29ydGluZ1N0YXRlcz1udWxsfX1jb25zdCBhRD0iYXNjIixsRD0iZGVzYyI7ZnVuY3Rpb24gUXNlKGMpe2lmKGMhPT1sRClyZXR1cm4g'@;
put 'Yz09PWFEP2xEOmFEfWZ1bmN0aW9uIGVhZShjKXtyZXR1cm4gYy5xdWVyeVNlbGVjdG9yKCIuY29sSGVhZGVyIil9ZnVuY3Rpb24gdGFlKGMsbCl7aWYoYzwwfHwhbC5wYXJlbnROb2RlKXJldHVybiExO2NvbnN0IGE9bC5wYXJlbnROb2RlLnBhcmVudE5vZGUuY2hpbGROb2RlcztyZXR1cm4g'@;
put 'QXJyYXkuZnJvbShhKS5pbmRleE9mKGwucGFyZW50Tm9kZSktYS5sZW5ndGg9PS0xfWZ1bmN0aW9uIHFZKGMsbCxhKXtyZXR1cm4tMT09PWMmJmw+PTAmJiExPT09aW0oYSl9Y29uc3QgbmFlPSJpbmRpY2F0b3JEaXNhYmxlZCIscmFlPSJjb2x1bW5Tb3J0aW5nIixpYWU9InNvcnRBY3Rpb24i'@;
put 'LG9hZT1uZXcgTWFwKFtbYUQsImFzY2VuZGluZyJdLFtsRCwiZGVzY2VuZGluZyJdXSk7ZnVuY3Rpb24gc2FlKGMsbCxhKXtjb25zdCBkPWwubG9jYWxlO3JldHVybiBmdW5jdGlvbihoLGYpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOnZ9PWE7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1o'@;
put 'LnRvTG9jYWxlTG93ZXJDYXNlKGQpKSwic3RyaW5nIj09dHlwZW9mIGYmJihmPWYudG9Mb2NhbGVMb3dlckNhc2UoZCkpLGg9PT1mPzA6cWMoaCk/cWMoZik/MDp2JiYiYXNjIj09PWM/LTE6MTpxYyhmKT92JiYiYXNjIj09PWM/MTotMTppc05hTihoKSYmIWlzTmFOKGYpPyJhc2MiPT09Yz8x'@;
put 'Oi0xOiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYpKSxoPGYpPyJhc2MiPT09Yz8tMToxOmg+Zj8iYXNjIj09PWM/MTotMTowfX1jb25zdHtyZWdpc3RlcjpjRCxnZXRJdGVtOmxhZSxoYXNJdGVtOlNqZX09'@;
put 'c2goInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3RlcjpjYWUsZ2V0SXRlbTp4amV9PXNoKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uIHVhZShjKXtyZXR1cm4gU2plKGMpP2xhZShjKTpsYWUoImRlZmF1bHQiKX1jRCgibnVtZXJpYyIsZnVu'@;
put 'Y3Rpb24gdmplKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCxoKXtjb25zdCBmPXBhcnNlRmxvYXQoZCksdj1wYXJzZUZsb2F0KGgpLHtzb3J0RW1wdHlDZWxsczpUfT1hO2lmKGY9PT12fHxpc05hTihmKSYmaXNOYU4odikpcmV0dXJuIDA7aWYoVCl7aWYocWMoZCkpcmV0dXJuImFzYyI9PT1j'@;
put 'Py0xOjE7aWYocWMoaCkpcmV0dXJuImFzYyI9PT1jPzE6LTF9cmV0dXJuIGlzTmFOKGYpPzE6aXNOYU4odik/LTE6Zjx2PyJhc2MiPT09Yz8tMToxOmY+dj8iYXNjIj09PWM/MTotMTowfX0pLGNEKCJjaGVja2JveCIsZnVuY3Rpb24gYmplKGMsbCxhKXtjb25zdCBkPWwuY2hlY2tlZFRlbXBs'@;
put 'YXRlLGg9bC51bmNoZWNrZWRUZW1wbGF0ZSx7c29ydEVtcHR5Q2VsbHM6Zn09YTtyZXR1cm4gZnVuY3Rpb24odixUKXtjb25zdCBZPXFjKHYpLHJlPXFjKFQpLGZlPVk/aDp2LF9lPXJlP2g6VCxrZT1mZT09PWh8fGZlPT09ZCxXZT1fZT09PWh8fF9lPT09ZDtpZighMT09PWYpe2lmKFkmJiEx'@;
put 'PT09cmUpcmV0dXJuIDE7aWYoITE9PT1ZJiZyZSlyZXR1cm4tMX1yZXR1cm4hMT09PWtlJiZXZT8iYXNjIj09PWM/LTE6MTprZSYmITE9PT1XZT8iYXNjIj09PWM/MTotMTohMT09PWtlJiYhMT09PVdlP3NhZShjLGwsYSkodixUKTpmZT09PWgmJl9lPT09ZD8iYXNjIj09PWM/LTE6MTpmZT09'@;
put 'PWQmJl9lPT09aD8iYXNjIj09PWM/MTotMTowfX0pLGNEKCJkYXRlIixmdW5jdGlvbiBNamUoYyxsLGEpe3JldHVybiBmdW5jdGlvbihkLGgpe2NvbnN0e3NvcnRFbXB0eUNlbGxzOmZ9PWE7aWYoZD09PWgpcmV0dXJuIDA7aWYocWMoZCkpcmV0dXJuIHFjKGgpPzA6ZiYmImFzYyI9PT1jPy0x'@;
put 'OjE7aWYocWMoaCkpcmV0dXJuIGYmJiJhc2MiPT09Yz8xOi0xO2NvbnN0IHY9bC5kYXRlRm9ybWF0LFQ9ZGEoZCx2KSxZPWRhKGgsdik7cmV0dXJuIFQuaXNWYWxpZCgpP1kuaXNWYWxpZCgpP1kuaXNBZnRlcihUKT8iYXNjIj09PWM/LTE6MTpZLmlzQmVmb3JlKFQpPyJhc2MiPT09Yz8xOi0x'@;
put 'OjA6LTE6MX19KSxjRCgiZGVmYXVsdCIsc2FlKTtjb25zdCBLWT0iY29sdW1uU29ydGluZyI7Y2FlKEtZLGZ1bmN0aW9uIGtqZShjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24oVCl7Y29uc3QgWT1jWzBdLHJlPWxbMF0s'@;
put 'ZmU9aFswXSxfZT1mWzBdLGtlPXJlLmNvbHVtblNvcnRpbmc7cmV0dXJuKGtlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/a2UuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeTp1YWUocmUudHlwZSkpKFkscmUsa2UpKGZlLF9lKX0oKX19KSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3Jl'@;
put 'Q29sdW1uU29ydCIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbHVtblNvcnQiKTtjbGFzcyBoYWUgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gS1l9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNTB9Y29uc3RydWN0b3Io'@;
put 'bCl7c3VwZXIobCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bnVsbCx0aGlzLnBsdWdpbktleT1LWSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPW51bGx9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMu'@;
put 'cGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1uZXcgY2plKHRoaXMuaG90LGAke3RoaXMucGx1Z2luS2V5fS5zb3J0aW5nU3RhdGVzYCksdGhpcy5jb2x1bW5NZXRhQ2FjaGU9bmV3IGFtKGE9PntsZXQg'@;
put 'ZD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtyZXR1cm4gbnVsbD09PWQmJihkPWEpLHRoaXMuZ2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MoZCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChgJHt0aGlzLnBsdWdpbktleX0uY29sdW1uTWV0YWAsdGhpcy5jb2x1'@;
put 'bW5NZXRhQ2FjaGUpLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24o'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLChhLGQpPT50aGlzLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oYSxkKSksdGhpcy5hZGRIb29rKCJhZnRlckluaXQiLCgpPT50aGlzLmxvYWRPclNvcnRCeVNldHRpbmdzKCkpLHRoaXMuYWRkSG9vaygi'@;
put 'YWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuaG90LnZpZXcmJnRoaXMubG9hZE9yU29ydEJ5U2V0dGluZ3MoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe2NvbnN0IGw9KGEsZCk9Pntj'@;
put 'b25zdCBoPWVhZShkKTshMT09PXRhZShhLGQpfHxudWxsPT09aHx8dGhpcy51cGRhdGVIZWFkZXJDbGFzc2VzKGgpfTt0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsKCk9Pnt0aGlzLmhvdC5yZW1v'@;
put 'dmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUu'@;
put 'Z2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpKX0sITApLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoYCR7dGhpcy5wbHVnaW5LZXl9LmNvbHVtbk1ldGFgKSx0aGlzLmNvbHVtblN0YXRlc01h'@;
put 'bmFnZXIuZGVzdHJveSgpLHRoaXMuY29sdW1uTWV0YUNhY2hlPW51bGwsdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNvcnQobCl7Y29uc3QgYT10aGlzLmdldFNvcnRDb25maWcoKSxkPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwp'@;
put 'LGg9dGhpcy5hcmVWYWxpZFNvcnRDb25maWdzKGQpOyExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblNvcnQiLGEsZCxoKSYmKDA9PT1hLmxlbmd0aCYmbnVsbD09PXRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUmJih0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlPXRoaXMuaG90'@;
put 'LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luS2V5LG5ldyBxb2UpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGUuc2V0VmFsdWVzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKSksaCYmKHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5z'@;
put 'ZXRTb3J0U3RhdGVzKGQpLHRoaXMuc29ydEJ5UHJlc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNhdmVBbGxTb3J0U2V0dGluZ3MoZCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblNvcnQiLGEsaD9kOmEsaCksaCYmKHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LmZvcmNlRnVsbFJl'@;
put 'bmRlcj0hMSx0aGlzLmhvdC52aWV3LnJlbmRlcigpKSl9Y2xlYXJTb3J0KCl7dGhpcy5zb3J0KFtdKX1pc1NvcnRlZCgpe3JldHVybiB0aGlzLmVuYWJsZWQmJiF0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuaXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKX1nZXRTb3J0Q29uZmlnKGwpe3Jl'@;
put 'dHVybiBlbyhsKT90aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0Q29sdW1uU29ydFN0YXRlKGwpOnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRTb3J0U3RhdGVzKCl9c2V0U29ydENvbmZpZyhsKXtjb25zdCBhPXRoaXMuZ2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKGwpO3RoaXMuYXJl'@;
put 'VmFsaWRTb3J0Q29uZmlncyhhKSYmdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLnNldFNvcnRTdGF0ZXMoYSl9Z2V0Tm9ybWFsaXplZFNvcnRDb25maWdzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3JldHVybiBBcnJh'@;
put 'eS5pc0FycmF5KGwpP2wuc2xpY2UoMCwxKTpbbF19YXJlVmFsaWRTb3J0Q29uZmlncyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50Q29scygpO3JldHVybiBmdW5jdGlvbiBoamUoYyl7aWYoYy5zb21lKGE9PiExPT09ZnVuY3Rpb24gZGplKGMpe2lmKCExPT09dnMoYykpcmV0dXJuITE7Y29u'@;
put 'c3R7Y29sdW1uOmwsc29ydE9yZGVyOmF9PWM7cmV0dXJuIE51bWJlci5pc0ludGVnZXIobCkmJlthRCxsRF0uaW5jbHVkZXMoYSl9KGEpKSlyZXR1cm4hMTtjb25zdCBsPWMubWFwKGE9PntsZXR7Y29sdW1uOmR9PWE7cmV0dXJuIGR9KTtyZXR1cm4gbmV3IFNldChsKS5zaXplPT09bC5sZW5n'@;
put 'dGh9KGwpJiZsLmV2ZXJ5KGQ9PntsZXR7Y29sdW1uOmh9PWQ7cmV0dXJuIGg8PWEmJmg+PTB9KX1zYXZlQWxsU29ydFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCk7YS5pbml0aWFsQ29uZmlnPV9zKGwsaD0+e2xl'@;
put 'dHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmKSwuLi52fX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwiY29sdW1uU29ydGluZyIsYSl9Z2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKXtjb25zdCBsPXt9'@;
put 'O3RoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwiY29sdW1uU29ydGluZyIsbCk7Y29uc3QgYT1sLnZhbHVlO3JldHVybiBlbyhhKSYmQXJyYXkuaXNBcnJheShhLmluaXRpYWxDb25maWcpJiYoYS5pbml0aWFsQ29uZmlnPV9zKGEuaW5pdGlhbENvbmZpZyxoPT57bGV0'@;
put 'e2NvbHVtbjpmLC4uLnZ9PWg7cmV0dXJue2NvbHVtbjp0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKSwuLi52fX0pKSxhfWdldENvbHVtbk5leHRDb25maWcobCl7Y29uc3QgYT10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4obCk7aWYoZW8oYSkpe2NvbnN0'@;
put 'IGg9UXNlKGEpO3JldHVybiBlbyhoKT97Y29sdW1uOmwsc29ydE9yZGVyOmh9OnZvaWQgMH1jb25zdCBkPXRoaXMuaG90LmNvdW50Q29scygpO2lmKE51bWJlci5pc0ludGVnZXIobCkmJmw+PTAmJmw8ZClyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOlFzZSgpfX1nZXROZXh0U29ydENvbmZp'@;
put 'ZyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImFwcGVuZCI7Y29uc3QgZD10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpLGg9LTEhPT1kLGY9dGhpcy5nZXRTb3J0Q29u'@;
put 'ZmlnKCksdj10aGlzLmdldENvbHVtbk5leHRDb25maWcobCk7aWYoaCl7aWYoaWwodikpcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNlKGQrMSldO2lmKCJhcHBlbmQiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLC4uLmYuc2xpY2UoZCsxKSx2XTtpZigicmVwbGFjZSI9PT1h'@;
put 'KXJldHVyblsuLi5mLnNsaWNlKDAsZCksdiwuLi5mLnNsaWNlKGQrMSldfXJldHVybiBlbyh2KT9mLmNvbmNhdCh2KTpmfWdldFBsdWdpbkNvbHVtbkNvbmZpZyhsKXtpZih2cyhsKSl7Y29uc3QgYT1sW3RoaXMucGx1Z2luS2V5XTtpZih2cyhhKSlyZXR1cm4gYX1yZXR1cm57fX1nZXRNZXJn'@;
put 'ZWRQbHVnaW5TZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldLGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEFsbENvbHVtbnNQcm9wZXJ0aWVzKCksaD10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGY9T2JqZWN0LmdldFByb3Rv'@;
put 'dHlwZU9mKGgpO3JldHVybiBBcnJheS5pc0FycmF5KGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5nZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zW2xdKSk6b2woZi5jb2x1bW5zKT9PYmplY3QuYXNzaWduKGQsYSx0aGlzLmdldFBsdWdpbkNvbHVtbkNvbmZpZyhmLmNv'@;
put 'bHVtbnMobCkpKTpPYmplY3QuYXNzaWduKGQsYSl9Z2V0Rmlyc3RDZWxsU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsTWV0YSgwLGwpLGQ9T2JqZWN0LmNyZWF0ZShhKTtyZXR1cm4gZFt0aGlzLnBsdWdpbktleV09dGhpcy5jb2x1bW5NZXRhQ2FjaGUuZ2V0VmFsdWVBdElu'@;
put 'ZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpLGR9Z2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtyZXR1cm4gYS5tYXhSb3dzPD1sP2EubWF4Um93czpsLWEubWluU3BhcmVSb3dzfXNvcnRCeVByZXNldFNvcnRTdGF0ZXMobCl7'@;
put 'aWYoMD09PWwubGVuZ3RoKXJldHVybiB2b2lkIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKTtjb25zdCBhPVtdLGQ9dGhpcy5ob3QuY291bnRSb3dzKCksaD1yZT0+X3MobCxmZT0+dGhpcy5o'@;
put 'b3QuZ2V0RGF0YUF0Q2VsbChyZSxmZS5jb2x1bW4pKTtmb3IobGV0IHJlPTA7cmU8dGhpcy5nZXROdW1iZXJPZlJvd3NUb1NvcnQoZCk7cmUrPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KHJlKV0uY29uY2F0KGgocmUpKSk7Y29uc3QgZj1fcyhhLHJlPT5yZVswXSk7IWZ1bmN0'@;
put 'aW9uIF9qZShjLGwpe2NvbnN0IGE9eGplKGwpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+Mj9kLTI6MCksZj0yO2Y8ZDtmKyspaFtmLTJdPWFyZ3VtZW50c1tmXTtjLnNvcnQoYSguLi5oKSl9KGEsdGhpcy5wbHVnaW5LZXksX3MobCxyZT0+cmUuc29ydE9yZGVy'@;
put 'KSxfcyhsLHJlPT50aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKHJlLmNvbHVtbikpKTtmb3IobGV0IHJlPWEubGVuZ3RoO3JlPGQ7cmUrPTEpYS5wdXNoKFtyZV0uY29uY2F0KGgocmUpKSk7Y29uc3Qgdj1fcyhhLHJlPT5yZVswXSksVD1uZXcgTWFwKF9zKGYsKHJlLGZlKT0+W3JlLHZbZmVd'@;
put 'XSkpLFk9X3ModGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscmU9PlQuaGFzKHJlKT9ULmdldChyZSk6cmUpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShZKX1sb2FkT3JTb3J0QnlTZXR0aW5ncygpe2NvbnN0IGw9dGhpcy5n'@;
put 'ZXRBbGxTYXZlZFNvcnRTZXR0aW5ncygpO2lmKHZzKGwpKXRoaXMuc29ydEJ5U2V0dGluZ3MobCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldO3RoaXMuc29ydEJ5U2V0dGluZ3MoYSl9fXNvcnRCeVNldHRpbmdzKGwpe2lmKHZzKGwpKXt0aGlz'@;
put 'LmNvbHVtblN0YXRlc01hbmFnZXIudXBkYXRlQWxsQ29sdW1uc1Byb3BlcnRpZXMobCk7Y29uc3QgYT1sLmluaXRpYWxDb25maWc7KEFycmF5LmlzQXJyYXkoYSl8fHZzKGEpKSYmdGhpcy5zb3J0KGEpfWVsc2UgdGhpcy5ob3QucmVuZGVyKCl9b25BZnRlckdldENvbEhlYWRlcihsLGEpe2Nv'@;
put 'bnN0IGQ9ZWFlKGEpO2lmKCExPT09dGFlKGwsYSl8fG51bGw9PT1kKXJldHVybjtjb25zdCBoPXRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MobClbdGhpcy5wbHVnaW5LZXldO3RoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhkLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcixsLGguaW5kaWNhdG9y'@;
put 'LGguaGVhZGVyQWN0aW9uKX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2lmKHNzKGwsZnVuY3Rpb24gZ2plKCl7cmV0dXJuIEFycmF5LmZyb20ob2FlLnZhbHVlcygpKS5jb25jYXQoaWFlLG5hZSxyYWUpfSgpKSwhMSE9PXRoaXMuZW5hYmxlZCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs'@;
put 'ZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO3dpKGwsZnVuY3Rpb24gbWplKGMsbCxhLGQpe2NvbnN0IGg9W3JhZV07aWYoZCYmaC5wdXNoKGlhZSksITE9PT1hKXJldHVybiBoLnB1c2gobmFlKSxoO2NvbnN0IGY9Yy5nZXRTb3J0T3JkZXJP'@;
put 'ZkNvbHVtbihsKTtyZXR1cm4gZW8oZikmJmgucHVzaChvYWUuZ2V0KGYpKSxofSguLi5kKSl9fW9uVXBkYXRlU2V0dGluZ3MobCl7c3VwZXIub25VcGRhdGVTZXR0aW5ncygpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5j'@;
put 'b2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksZW8obFt0aGlzLnBsdWdpbktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX1vbkFmdGVyTG9hZERhdGEobCl7ITA9PT1sJiZ0aGlzLmhvdC52aWV3JiZ0aGlzLmxvYWRPclNvcnRCeVNldHRp'@;
put 'bmdzKCl9d2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEpe3JldHVybiB0aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGEpW3RoaXMucGx1Z2luS2V5XS5oZWFkZXJBY3Rpb24mJiJTUEFOIj09PWwudGFyZ2V0Lm5vZGVOYW1lfW9uQmVmb3JlT25DZWxsTW91c2VEb3duKGwsYSxkLGgpeyEx'@;
put 'IT09cVkoYS5yb3csYS5jb2wsbCkmJnRoaXMud2FzQ2xpY2thYmxlSGVhZGVyQ2xpY2tlZChsLGEuY29sKSYmdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpJiYoaC5jb2x1bW49ITApfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXshMSE9PXFZKGEucm93'@;
put 'LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSksdGhpcy5zb3J0'@;
put 'KHRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCkpKX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgQWplPWNsYXNzIERqZXtjb25zdHJ1Y3RvcihsLGEp'@;
put 'e3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9dGhpcy5wbHVnaW4uaG90LHRoaXMuZW5kcG9pbnRzPVtdLHRoaXMuc2V0dGluZ3M9YSx0aGlzLnNldHRpbmdzVHlwZT0iYXJyYXkiLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119Z2V0RW5kcG9pbnQobCl7'@;
put 'cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmlsbE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncylbbF06dGhpcy5lbmRwb2ludHNbbF19Z2V0QWxsRW5kcG9pbnRzKCl7cmV0dXJuImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlP3RoaXMuZmls'@;
put 'bE1pc3NpbmdFbmRwb2ludERhdGEodGhpcy5zZXR0aW5ncyk6dGhpcy5lbmRwb2ludHN9ZmlsbE1pc3NpbmdFbmRwb2ludERhdGEobCl7cmV0dXJuIHRoaXMucGFyc2VTZXR0aW5ncyhsLmNhbGwodGhpcykpfXBhcnNlU2V0dGluZ3MobCl7Y29uc3QgYT1bXTtsZXQgZD1sO2lmKGR8fCJmdW5j'@;
put 'dGlvbiIhPXR5cGVvZiB0aGlzLnNldHRpbmdzKXJldHVybiBkfHwoZD10aGlzLnNldHRpbmdzKSxSbihkLGg9Pntjb25zdCBmPXt9O3RoaXMuYXNzaWduU2V0dGluZyhoLGYsInJhbmdlcyIsW1swLHRoaXMuaG90LmNvdW50Um93cygpLTFdXSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmV2'@;
put 'ZXJzZWRSb3dDb29yZHMiLCExKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvblJvdyIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJvdmlkZSBhIGRlc3RpbmF0aW9uIHJvdyBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHBy'@;
put 'b3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImRlc3RpbmF0aW9uQ29sdW1uIixuZXcgRXJyb3IoIlxuICAgICAgICBZb3UgbXVzdCBwcm92aWRlIGEgZGVzdGluYXRpb24gY29sdW1uIGZvciB0aGUgQ29sdW1uIFN1bW1hcnkgcGx1Z2luIGluIG9yZGVyIHRvIHdv'@;
put 'cmsgcHJvcGVybHkhXG4gICAgICAiKSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwic291cmNlQ29sdW1uIixoLmRlc3RpbmF0aW9uQ29sdW1uKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJ0eXBlIiwic3VtIiksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZm9yY2VOdW1lcmljIiwhMSksdGhp'@;
put 'cy5hc3NpZ25TZXR0aW5nKGgsZiwic3VwcHJlc3NEYXRhVHlwZUVycm9ycyIsITApLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCksdGhpcy5hc3NpZ25TZXR0aW5n'@;
put 'KGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lkIDAhPT1sW2RdKXtpZigicmFu'@;
put 'Z2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50Um93cygpLWxbZF0tMTpsW2Rd'@;
put 'fWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0QWxsRW5kcG9pbnRzKCk7Um4o'@;
put 'Zix2PT57InJvdyI9PT1oJiZ2LmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVtbj49YSYmKCJpbnNlcnRfY29s'@;
put 'Ij09PWw/di5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxoLGYpe2xldCB2PSEoYXJndW1l'@;
put 'bnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBrZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGtlKSx0aGlzLnJlZnJlc2hBbGxFbmRwb2lu'@;
put 'dHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLGtlKX1jb25zdCBUPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsWT1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEscmU9dGhpcy5nZXRBbGxFbmRwb2ludHMoKSxmZT0wPT09'@;
put 'bC5pbmRleE9mKCJtb3ZlX3JvdyIpLF9lPWE7Um4ocmUsa2U9Pnsicm93Ij09PVQmJmtlLmRlc3RpbmF0aW9uUm93Pj1fZSYmKGtlLmFsdGVyUm93T2Zmc2V0PVkqZCksImNvbCI9PT1UJiZrZS5kZXN0aW5hdGlvbkNvbHVtbj49X2UmJihrZS5hbHRlckNvbHVtbk9mZnNldD1ZKmQpfSksdGhp'@;
put 'cy5yZXNldEFsbEVuZHBvaW50cyhyZSwhZmUpLFJuKHJlLGZlP2tlPT57dGhpcy5leHRlbmRFbmRwb2ludFJhbmdlcyhrZSxfZSxoWzBdLGgubGVuZ3RoKSx0aGlzLnJlY3JlYXRlUGh5c2ljYWxSYW5nZXMoa2UpLHRoaXMuY2xlYXJPZmZzZXRJbmZvcm1hdGlvbihrZSl9OmtlPT57dGhpcy5z'@;
put 'aGlmdEVuZHBvaW50Q29vcmRpbmF0ZXMoa2UsX2UpfSksdiYmdGhpcy5yZWZyZXNoQWxsRW5kcG9pbnRzKCl9Y2xlYXJPZmZzZXRJbmZvcm1hdGlvbihsKXtsLmFsdGVyUm93T2Zmc2V0PXZvaWQgMCxsLmFsdGVyQ29sdW1uT2Zmc2V0PXZvaWQgMH1leHRlbmRFbmRwb2ludFJhbmdlcyhsLGEs'@;
put 'ZCxoKXtSbihsLnJhbmdlcyxmPT57ZlsxXSYmKGE+PWZbMF0mJmE8PWZbMV0/ZD5mWzFdP2ZbMV0rPWg6ZDxmWzBdJiYoZlswXS09aCk6ZD49ZlswXSYmZDw9ZlsxXSYmKGZbMV0tPWgsYTw9ZlswXSYmKGZbMF0rPTEsZlsxXSs9MSkpKX0pfXJlY3JlYXRlUGh5c2ljYWxSYW5nZXMobCl7Y29u'@;
put 'c3QgZD1bXSxoPVtdO1JuKGwucmFuZ2VzLGY9Pntjb25zdCB2PVtdO2lmKGZbMV0pZm9yKGxldCBUPWZbMF07VDw9ZlsxXTtUKyspdi5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coVCkpO2Vsc2Ugdi5wdXNoKHRoaXMuaG90LnRvUGh5c2ljYWxSb3coZlswXSkpO2gucHVzaCh2KX0pLFJu'@;
put 'KGgsZj0+e2xldCB2PVtdO1JuKGYsKFQsWSk9PnswPT09WT92LnB1c2goVCk6ZltZXSE9PWZbWS0xXSsxJiYodi5wdXNoKGZbWS0xXSksZC5wdXNoKHYpLHY9W10sdi5wdXNoKFQpKSxZPT09Zi5sZW5ndGgtMSYmKHYucHVzaChUKSxkLnB1c2godikpfSl9KSxsLnJhbmdlcz1kfXNoaWZ0RW5k'@;
put 'cG9pbnRDb29yZGluYXRlcyhsLGEpe2wuYWx0ZXJSb3dPZmZzZXQmJjAhPT1sLmFsdGVyUm93T2Zmc2V0PyhsLmRlc3RpbmF0aW9uUm93Kz1sLmFsdGVyUm93T2Zmc2V0fHwwLFJuKGwucmFuZ2VzLGQ9PntSbihkLChoLGYpPT57aD49YSYmKGRbZl0rPWwuYWx0ZXJSb3dPZmZzZXR8fDApfSl9'@;
put 'KSk6bC5hbHRlckNvbHVtbk9mZnNldCYmMCE9PWwuYWx0ZXJDb2x1bW5PZmZzZXQmJihsLmRlc3RpbmF0aW9uQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwLGwuc291cmNlQ29sdW1uKz1sLmFsdGVyQ29sdW1uT2Zmc2V0fHwwKX1yZXNldEFsbEVuZHBvaW50cygpe2xldCBsPWFyZ3Vt'@;
put 'ZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldEFsbEVuZHBvaW50cygpLGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtsLnNvbWUoaD0+e2NvbnN0IHY9aC5hbHRlckNvbHVt'@;
put 'bk9mZnNldHx8MDtyZXR1cm4gaC5kZXN0aW5hdGlvblJvdysoaC5hbHRlclJvd09mZnNldHx8MCk+PXRoaXMuaG90LmNvdW50Um93cygpfHxoLmRlc3RpbmF0aW9uQ29sdW1uK3Y+PXRoaXMuaG90LmNvdW50Q29scygpfSl8fCh0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxSbihsLGg9Pnt0aGlz'@;
put 'LnJlc2V0RW5kcG9pbnRWYWx1ZShoLGEpfSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdKX1yZWZyZXNoQWxsRW5kcG9pbnRzKCl7dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10s'@;
put 'Um4odGhpcy5nZXRBbGxFbmRwb2ludHMoKSxsPT57dGhpcy5jdXJyZW50RW5kcG9pbnQ9bCx0aGlzLnBsdWdpbi5jYWxjdWxhdGUobCksdGhpcy5zZXRFbmRwb2ludFZhbHVlKGwsImluaXQiKX0pLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlz'@;
put 'LmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGwpe2NvbnN0IGE9W107dGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10sUm4obCwoZCxoLGYpPT57YCR7ZFsyXXx8IiJ9YCE9YCR7ZFszXX1g'@;
put 'JiZSbih0aGlzLmdldEFsbEVuZHBvaW50cygpLCh2LFQpPT57dGhpcy5ob3QucHJvcFRvQ29sKGZbaF1bMV0pPT09di5zb3VyY2VDb2x1bW4mJi0xPT09YS5pbmRleE9mKFQpJiZhLnB1c2goVCl9KX0pLFJuKGEsZD0+e3RoaXMucmVmcmVzaEVuZHBvaW50KHRoaXMuZ2V0RW5kcG9pbnQoZCkp'@;
put 'fSksdGhpcy5ob3Quc2V0RGF0YUF0Q2VsbCh0aGlzLmNlbGxzVG9TZXRDYWNoZSwiQ29sdW1uU3VtbWFyeS5yZXNldCIpLHRoaXMuY2VsbHNUb1NldENhY2hlPVtdfXJlZnJlc2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlz'@;
put 'LnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7'@;
put 'dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVl'@;
put 'KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwuZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHxsLmRlc3Rp'@;
put 'bmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0'@;
put 'YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1sLnJvdW5kRmxvYXQmJiFpc05hTihsLnJlc3VsdCkmJihsLnJlc3VsdD1s'@;
put 'LnJlc3VsdC50b0ZpeGVkKGwucm91bmRGbG9hdCkpLGQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29sdW1uLGwucmVzdWx0'@;
put 'XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXtibCgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlzIGJleW9uZCB0aGUg'@;
put 'dGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0aW9uIFhZKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1jb25zdCBKWT0iY29sdW1uU3VtbWFyeSI7Y2xhc3MgSWplIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEpZfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9S'@;
put 'SVRZKCl7cmV0dXJuIDIyMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmVuZHBvaW50cz1udWxsfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtKWV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fCh0aGlzLnNldHRpbmdzPXRo'@;
put 'aXMuaG90LmdldFNldHRpbmdzKClbSlldLHRoaXMuZW5kcG9pbnRzPW5ldyBBamUodGhpcyx0aGlzLnNldHRpbmdzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5n'@;
put 'ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ2hhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxs'@;
put 'LGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZUNvbCIsKGEsZCxoKT0+dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9yb3ciLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZv'@;
put 'cmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwu'@;
put 'Li5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oImluc2VydF9yb3ciLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIiwoYSxkLGgpPT50aGlz'@;
put 'LmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJpbnNlcnRfY29sIixhLGQsbnVsbCxoKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2gr'@;
put 'KylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9'@;
put 'bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfY29sIiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBs'@;
put 'Lm9uQWZ0ZXJSb3dNb3ZlKC4uLmFyZ3VtZW50cyl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGx9Y2FsY3VsYXRlKGwpe3N3aXRjaChsLnR5cGUudG9M'@;
put 'b3dlckNhc2UoKSl7Y2FzZSJzdW0iOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlU3VtKGwpO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVNaW5NYXgobCxsLnR5cGUpO2JyZWFrO2Nhc2UiY291bnQiOmwucmVzdWx0PXRoaXMuY291bnRFbnRyaWVzKGwp'@;
put 'O2JyZWFrO2Nhc2UiYXZlcmFnZSI6bC5yZXN1bHQ9dGhpcy5jYWxjdWxhdGVBdmVyYWdlKGwpO2JyZWFrO2Nhc2UiY3VzdG9tIjpsLnJlc3VsdD1sLmN1c3RvbUZ1bmN0aW9uLmNhbGwodGhpcyxsKX19Y2FsY3VsYXRlU3VtKGwpe2xldCBhPTA7cmV0dXJuIHlzKGwucmFuZ2VzLGQ9PnthKz10'@;
put 'aGlzLmdldFBhcnRpYWxTdW0oZCxsLnNvdXJjZUNvbHVtbil9KSxhfWdldFBhcnRpYWxTdW0obCxhKXtsZXQgZD0wLGg9bFsxXXx8bFswXSxmPW51bGwsdj0wO2Rve2lmKGY9dGhpcy5nZXRDZWxsVmFsdWUoaCxhKSxmPVhZKGYpP251bGw6ZixudWxsIT09Zil7Y29uc3QgVD0oYCR7Zn1gLnNw'@;
put 'bGl0KCIuIilbMV18fFtdKS5sZW5ndGh8fDE7VD52JiYodj1UKX1kKz1mfHwwLGgtPTF9d2hpbGUoaD49bFswXSk7cmV0dXJuIE1hdGgucm91bmQoZCoxMCoqdikvMTAqKnZ9Y2FsY3VsYXRlTWluTWF4KGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4geXMobC5yYW5nZXMsaD0+e2NvbnN0IGY9dGhp'@;
put 'cy5nZXRQYXJ0aWFsTWluTWF4KGgsbC5zb3VyY2VDb2x1bW4sYSk7aWYobnVsbD09PWQmJm51bGwhPT1mJiYoZD1mKSxudWxsIT09Zilzd2l0Y2goYSl7Y2FzZSJtaW4iOmQ9TWF0aC5taW4oZCxmKTticmVhaztjYXNlIm1heCI6ZD1NYXRoLm1heChkLGYpfX0pLG51bGw9PT1kPyJOb3QgZW5v'@;
put 'dWdoIGRhdGEiOmR9Z2V0UGFydGlhbE1pbk1heChsLGEsZCl7bGV0IHYsaD1udWxsLGY9bFsxXXx8bFswXTtkb3tpZih2PXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksdj1YWSh2KT9udWxsOnYsbnVsbD09PWgpaD12O2Vsc2UgaWYobnVsbCE9PXYpc3dpdGNoKGQpe2Nhc2UibWluIjpoPU1hdGgu'@;
put 'bWluKGgsdik7YnJlYWs7Y2FzZSJtYXgiOmg9TWF0aC5tYXgoaCx2KX1mLT0xfXdoaWxlKGY+PWxbMF0pO3JldHVybiBofWNvdW50RW1wdHkobCxhKXtsZXQgZCxoPTAsZj1sWzFdfHxsWzBdO2Rve2Q9dGhpcy5nZXRDZWxsVmFsdWUoZixhKSxkPVhZKGQpP251bGw6ZCxudWxsPT09ZCYmKGgr'@;
put 'PTEpLGYtPTF9d2hpbGUoZj49bFswXSk7cmV0dXJuIGh9Y291bnRFbnRyaWVzKGwpe2xldCBhPTA7cmV0dXJuIHlzKGwucmFuZ2VzLGg9Pntjb25zdCBmPXZvaWQgMD09PWhbMV0/MTpoWzFdLWhbMF0rMSx2PXRoaXMuY291bnRFbXB0eShoLGwuc291cmNlQ29sdW1uKTthKz1mLGEtPXZ9KSxh'@;
put 'fWNhbGN1bGF0ZUF2ZXJhZ2UobCl7cmV0dXJuIHRoaXMuY2FsY3VsYXRlU3VtKGwpL3RoaXMuY291bnRFbnRyaWVzKGwpfWdldENlbGxWYWx1ZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksaD10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtsZXQgZj10aGlzLmhvdC5n'@;
put 'ZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSksdj0iIjtpZihudWxsIT09ZCYmbnVsbCE9PWgmJih2PXRoaXMuaG90LmdldENlbGxNZXRhKGQsaCkuY2xhc3NOYW1lfHwiIiksdi5pbmRleE9mKCJjb2x1bW5TdW1tYXJ5UmVzdWx0Iik+LTEpcmV0dXJuIG51bGw7aWYodGhpcy5lbmRwb2ludHMuY3Vy'@;
put 'cmVudEVuZHBvaW50LmZvcmNlTnVtZXJpYyYmKCJzdHJpbmciPT10eXBlb2YgZiYmKGY9Zi5yZXBsYWNlKC8sLywiLiIpKSxmPXBhcnNlRmxvYXQoZikpLGlzTmFOKGYpJiYhdGhpcy5lbmRwb2ludHMuY3VycmVudEVuZHBvaW50LnN1cHByZXNzRGF0YVR5cGVFcnJvcnMpdGhyb3cgbmV3IEVy'@;
put 'cm9yKFdhYENvbHVtblN1bW1hcnkgcGx1Z2luOiBjZWxsIGF0ICgke2x9LCAke2F9KSBpcyBub3QgaW4gYVx4MjAKICAgICAgICAgIG51bWVyaWMgZm9ybWF0LiBDYW5ub3QgZG8gdGhlIGNhbGN1bGF0aW9uLmApO3JldHVybiBmfW9uQWZ0ZXJJbml0KCl7dGhpcy5lbmRwb2ludHMuZW5kcG9p'@;
put 'bnRzPXRoaXMuZW5kcG9pbnRzLnBhcnNlU2V0dGluZ3MoKSx0aGlzLmVuZHBvaW50cy5yZWZyZXNoQWxsRW5kcG9pbnRzKCEwKX1vbkFmdGVyQ2hhbmdlKGwsYSl7bCYmIkNvbHVtblN1bW1hcnkucmVzZXQiIT09YSYmIkNvbHVtblN1bW1hcnkuc2V0IiE9PWEmJiJsb2FkRGF0YSIhPT1hJiZ0'@;
put 'aGlzLmVuZHBvaW50cy5yZWZyZXNoQ2hhbmdlZEVuZHBvaW50cyhsKX1vbkFmdGVyUm93TW92ZShsLGEpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsbFswXSxsLmxlbmd0aCxsLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRw'@;
put 'b2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGEsbC5sZW5ndGgsbCx0aGlzLnBsdWdpbk5hbWUpfX1jbGFzcyBMOXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5lciJ9c3RhdGljIGdl'@;
put 'dCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dGhpcy5yb290RG9jdW1l'@;
put 'bnQ9bCx0aGlzLmlzUnRsPWEsdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmVkaXRvcj10aGlzLmNyZWF0ZUVkaXRvcigpLHRoaXMuZWRpdG9yU3R5bGU9dGhpcy5lZGl0b3Iuc3R5bGUsdGhpcy5oaWRkZW49ITAsdGhpcy5oaWRlKCl9c2V0UG9zaXRpb24obCxhKXt0aGlzLmVkaXRvclN0eWxl'@;
put 'LmxlZnQ9YCR7bH1weGAsdGhpcy5lZGl0b3JTdHlsZS50b3A9YCR7YX1weGB9c2V0U2l6ZShsLGEpe2lmKGwmJmEpe2NvbnN0IGQ9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtkLnN0eWxlLndpZHRoPWAke2x9cHhgLGQuc3R5bGUuaGVpZ2h0PWAke2F9cHhgfX1nZXRTaXplKCl7cmV0dXJue3dp'@;
put 'ZHRoOk5hKHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLGhlaWdodDpWbCh0aGlzLmdldElucHV0RWxlbWVudCgpKX19cmVzZXRTaXplKCl7Y29uc3QgbD10aGlzLmdldElucHV0RWxlbWVudCgpO2wuc3R5bGUud2lkdGg9IiIsbC5zdHlsZS5oZWlnaHQ9IiJ9c2V0UmVhZE9ubHlTdGF0ZShsKXt0'@;
put 'aGlzLmdldElucHV0RWxlbWVudCgpLnJlYWRPbmx5PWx9c2hvdygpe3RoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuaGlkZGVuPSExfWhpZGUoKXt0aGlzLmhpZGRlbnx8KHRoaXMuZWRpdG9yU3R5bGUuZGlzcGxheT0ibm9uZSIpLHRoaXMuaGlkZGVuPSEwfWlzVmlzaWJs'@;
put 'ZSgpe3JldHVybiJibG9jayI9PT10aGlzLmVkaXRvclN0eWxlLmRpc3BsYXl9c2V0VmFsdWUoKXtjb25zdCBhPShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiIpfHwiIjt0aGlzLmdldElucHV0RWxlbWVudCgpLnZhbHVlPWF9Z2V0VmFs'@;
put 'dWUoKXtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnQoKS52YWx1ZX1pc0ZvY3VzZWQoKXtyZXR1cm4gdGhpcy5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZ2V0SW5wdXRFbGVtZW50KCl9Zm9jdXMoKXt0aGlzLmdldElucHV0RWxlbWVudCgpLmZvY3VzKCl9Y3JlYXRlRWRp'@;
put 'dG9yKCl7Y29uc3QgbD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxhPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIGwuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5jb250YWluZXI9dGhpcy5yb290RG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaXNSdGw/InJ0bCI6Imx0ciIpLHdpKHRoaXMuY29udGFpbmVyLEw5LkNMQVNTX0VESVRPUl9DT05UQUlORVIpLHRoaXMucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250'@;
put 'YWluZXIpLHdpKGwsTDkuQ0xBU1NfRURJVE9SKSx3aShhLEw5LkNMQVNTX0lOUFVUKSxsLmFwcGVuZENoaWxkKGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGwpLGx9Z2V0SW5wdXRFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoYC4ke0w5LkNMQVNTX0lO'@;
put 'UFVUfWApfWRlc3Ryb3koKXtjb25zdCBsPXRoaXMuY29udGFpbmVyP3RoaXMuY29udGFpbmVyLnBhcmVudE5vZGU6bnVsbDt0aGlzLmVkaXRvci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWRpdG9yKSx0aGlzLmVkaXRvcj1udWxsLHRoaXMuZWRpdG9yU3R5bGU9bnVsbCxsJiZsLnJl'@;
put 'bW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKX19Y29uc3QgUmplPUw5LE1zPSItLS0tLS0tLS0iO2Z1bmN0aW9uIHVEKGMpe3JldHVybiBRbyhjLCJodFNlcGFyYXRvciIpfWZ1bmN0aW9uIGREKGMpe3JldHVybiBRbyhjLCJodERpc2FibGVkIil9ZnVuY3Rpb24gaEQoYyl7cmV0dXJuIFFvKGMs'@;
put 'Imh0U2VsZWN0aW9uRGlzYWJsZWQiKX1mdW5jdGlvbiBKZyhjKXtjb25zdCBsPWMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bFswXTwwP251bGw6bH1mdW5jdGlvbiBRZyhjLGwpe2NvbnN0IGE9e307cmV0dXJuIFJuKGMsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmKGFbaF18'@;
put 'fChhW2hdPVtdKSxhW2hdW2ZdPWwoaCxmKSl9KX0pLGF9ZnVuY3Rpb24gZG0oYyxsLGEsZCxoKXtSbihjLGY9PntmLmZvckFsbCgodixUKT0+e3Y+PTAmJlQ+PTAmJmZ1bmN0aW9uIFZqZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1oKGMsbCk7bGV0IFQ9ZDt2LmNsYXNzTmFtZSYmKFQ9InZlcnRp'@;
put 'Y2FsIj09PWE/ZnVuY3Rpb24gSGplKGMsbCl7cmV0dXJuLTEhPT1jLmluZGV4T2YobCk/YzpgJHtjLnJlcGxhY2UoImh0VG9wIiwiIikucmVwbGFjZSgiaHRNaWRkbGUiLCIiKS5yZXBsYWNlKCJodEJvdHRvbSIsIiIpLnJlcGxhY2UoIiAgIiwiIil9ICR7bH1gfSh2LmNsYXNzTmFtZSxkKTpm'@;
put 'dW5jdGlvbiBOamUoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRMZWZ0IiwiIikucmVwbGFjZSgiaHRDZW50ZXIiLCIiKS5yZXBsYWNlKCJodFJpZ2h0IiwiIikucmVwbGFjZSgiaHRKdXN0aWZ5IiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYu'@;
put 'Y2xhc3NOYW1lLGQpKSxmKGMsbCwiY2xhc3NOYW1lIixUKX0odixULGwsYSxkLGgpfSl9KX1mdW5jdGlvbiBBZihjLGwpe2xldCBhPSExO3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZSbihjLGQ9PihkLmZvckFsbCgoaCxmKT0+e2lmKGg+PTAmJmY+PTAmJmwoaCxmKSlyZXR1cm4gYT0hMCwh'@;
put 'MX0pLGEpKSxhfWZ1bmN0aW9uIGxwKGMpe3JldHVybmA8c3BhbiBjbGFzcz0ic2VsZWN0ZWQiPlx1MjcxMzwvc3Bhbj4ke2N9YH1mdW5jdGlvbiBmYWUoYyxsKXtjb25zdCBhPWMuc2xpY2UoMCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aCYmYVtkXS5uYW1lPT09bDspYS5zaGlmdCgpO3JldHVy'@;
put 'biBhfWNsYXNzIHBhZXtjb25zdHJ1Y3RvcihsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZD1udWxsLHRoaXMuaGlkaW5nVGltZXI9bnVsbCx0aGlzLnVwZGF0ZURlbGF5KGwpfWhpZGUoKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSExLHRoaXMuaGlkaW5n'@;
put 'VGltZXI9c2V0VGltZW91dCgoKT0+eyExPT09dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJoaWRlIil9LDI1MCl9c2hvdyhsKXt0aGlzLndhc0xhc3RBY3Rpb25TaG93PSEwLHRoaXMuc2hvd0RlYm91bmNlZChsKX1jYW5jZWxIaWRpbmcoKXt0aGlzLndhc0xh'@;
put 'c3RBY3Rpb25TaG93PSEwLGNsZWFyVGltZW91dCh0aGlzLmhpZGluZ1RpbWVyKSx0aGlzLmhpZGluZ1RpbWVyPW51bGx9dXBkYXRlRGVsYXkoKXt0aGlzLnNob3dEZWJvdW5jZWQ9S1YoYT0+e3RoaXMud2FzTGFzdEFjdGlvblNob3cmJnRoaXMucnVuTG9jYWxIb29rcygic2hvdyIsYS5mcm9t'@;
put 'LnJvdyxhLmZyb20uY29sKX0sYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjI1MCl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fUdhKHBhZSx3MSk7Y29uc3QgV2plPXBhZSxRWT0iY29tbWVudHMiLGZEPW5ldyBXZWFrTWFw'@;
put 'LExmPSJjb21tZW50IixJOT0idmFsdWUiLHBEPSJyZWFkT25seSI7Y2xhc3MgJGplIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIFFZfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDYwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZWRp'@;
put 'dG9yPW51bGwsdGhpcy5kaXNwbGF5U3dpdGNoPW51bGwsdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLnJhbmdlPXt9LHRoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITEsZkQuc2V0KHRoaXMse3RlbXBFZGl0b3JEaW1lbnNpb25zOnt9LGNlbGxCZWxvd0N1cnNvcjpudWxsfSl9aXNF'@;
put 'bmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1FZXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmVkaXRvcnx8KHRoaXMuZWRpdG9yPW5ldyBSamUodGhpcy5ob3Qucm9vdERvY3VtZW50LHRoaXMuaG90LmlzUnRsKCkpKSx0aGlzLmV2ZW50TWFuYWdl'@;
put 'cnx8KHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSksdGhpcy5kaXNwbGF5U3dpdGNofHwodGhpcy5kaXNwbGF5U3dpdGNoPW5ldyBXamUodGhpcy5nZXREaXNwbGF5RGVsYXlTZXR0aW5nKCkpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+'@;
put 'dGhpcy5hZGRUb0NvbnRleHRNZW51KGwpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVuZGVyZXIiLChsLGEsZCxoLGYsdik9PnRoaXMub25BZnRlclJlbmRlcmVyKGwsdikpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29r'@;
put 'KCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlzLmhpZGUoKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmRpc3BsYXlTd2l0Y2guYWRkTG9jYWxIb29rKCJoaWRlIiwoKT0+dGhpcy5oaWRlKCkpLHRoaXMuZGlzcGxheVN3aXRj'@;
put 'aC5hZGRMb2NhbEhvb2soInNob3ciLChsLGEpPT50aGlzLnNob3dBdENlbGwobCxhKSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0'@;
put 'ZVBsdWdpbigpLHRoaXMuZGlzcGxheVN3aXRjaC51cGRhdGVEZWxheSh0aGlzLmdldERpc3BsYXlEZWxheVNldHRpbmcoKSl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdDt0aGlz'@;
put 'LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIsYT0+dGhpcy5vbk1vdXNlT3ZlcihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGE9PnRoaXMub25Nb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2'@;
put 'ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksImJsdXIiLCgpPT50aGlzLm9uRWRpdG9yQmx1cigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpLCJtb3VzZWRvd24iLGE9PnRoaXMub25FZGl0b3JNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5lZGl0b3IuZ2V0SW5wdXRFbGVtZW50KCksIm1vdXNldXAiLGE9PnRo'@;
put 'aXMub25FZGl0b3JNb3VzZVVwKGEpKX1zZXRSYW5nZShsKXt0aGlzLnJhbmdlPWx9Y2xlYXJSYW5nZSgpe3RoaXMucmFuZ2U9e319dGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQobCl7Y29uc3QgYT1RNChsLnRhcmdldCwiVEQiLCJUQk9EWSIpO3JldHVybiEhKGEmJlFvKGEsImh0Q29tbWVudENl'@;
put 'bGwiKSYmUTQoYSxbdGhpcy5ob3Qucm9vdEVsZW1lbnRdKSl9dGFyZ2V0SXNDb21tZW50VGV4dEFyZWEobCl7cmV0dXJuIHRoaXMuZWRpdG9yLmdldElucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVm'@;
put 'b3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT10aGlzLmVkaXRvci5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwhPWEmJihkPWEpLHRoaXMudXBkYXRlQ29t'@;
put 'bWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbSTldOmR9KSx0aGlzLmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNldENv'@;
put 'bW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNl'@;
put 'bGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxMZiksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5oaWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2Vs'@;
put 'bChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21tZW50KGQpfWdldENvbW1lbnQoKXtyZXR1'@;
put 'cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2wsSTkpfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEsSTkpfXNob3coKXtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJv'@;
put 'cignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmwsY29sOmF9fT10aGlzLnJhbmdlO2lmKGw8MHx8bD50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0x'@;
put 'fHxhPDB8fGE+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBkPXRoaXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIHRoaXMuZWRpdG9yLnNldFZhbHVlKGRbTGZdP2RbTGZdW0k5XToiIiks'@;
put 'dGhpcy5lZGl0b3Iuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7dGhpcy5lZGl0b3IuaGlkZSgpfXJlZnJl'@;
put 'c2hFZGl0b3IoKXt2YXIgbCxhO2lmKCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXXx8dGhpcy5yYW5nZS5mcm9tJiZ0aGlzLmVkaXRvci5pc1Zpc2libGUoKSkpcmV0dXJuO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmgsY29sdW1uSW5kZXhN'@;
put 'YXBwZXI6Zn09dGhpcy5ob3Qse3Jvdzp2LGNvbDpUfT10aGlzLnJhbmdlLmZyb207bGV0IFk9aC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYpLHJlPWYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChUKTtjb25zdCBmZT1udWxsPT09WTt0aGlzLmVkaXRvci5zZXRQb3NpdGlv'@;
put 'bigwLDApLG51bGw9PT1ZJiYoWT1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodiwtMSkpKSxudWxsPT09cmUmJihyZT1mLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoVCwtMSkp'@;
put 'KTtjb25zdCBfZT1udWxsPT09WSxrZT1udWxsPT09cmU7WT1udWxsIT09KGw9WSkmJnZvaWQgMCE9PWw/bDowLHJlPW51bGwhPT0oYT1yZSkmJnZvaWQgMCE9PWE/YTowO2NvbnN0e3Jvb3RXaW5kb3c6V2Usdmlldzp7X3d0OkplfX09dGhpcy5ob3Qse3d0VGFibGU6dHR9PUplLHl0PUplLmdl'@;
put 'dENlbGwoe3JvdzpZLGNvbDpyZX0sITApLHd0PXRoaXMuZ2V0Q29tbWVudE1ldGEodixULCJzdHlsZSIpO3d0P3RoaXMuZWRpdG9yLnNldFNpemUod3Qud2lkdGgsd3QuaGVpZ2h0KTp0aGlzLmVkaXRvci5yZXNldFNpemUoKTtjb25zdCBMdD1rZT8wOnR0LmdldFN0cmV0Y2hlZENvbHVtbldp'@;
put 'ZHRoKHJlKSxvbj1mZSYmIV9lP1ZsKHl0KTowLHtsZWZ0OnNuLHRvcDpNbix3aWR0aDpWbixoZWlnaHQ6dXJ9PXl0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHt3aWR0aDpUcixoZWlnaHQ6UGl9PXRoaXMuZWRpdG9yLmdldFNpemUoKSx7aW5uZXJXaWR0aDpIaSxpbm5lckhlaWdodDp3cn09'@;
put 'dGhpcy5ob3Qucm9vdFdpbmRvdyxhaT10aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O2xldCB0aT1zbitXZS5zY3JvbGxYK0x0LGpuPU1uK1dlLnNjcm9sbFkrb247dGhpcy5ob3QuaXNSdGwoKSYmKHRpLT1UcitMdCksdGhpcy5ob3QuaXNMdHIoKSYmc24rVm4rVHI+SGk/'@;
put 'dGk9c24rV2Uuc2Nyb2xsWC1Uci0xOnRoaXMuaG90LmlzUnRsKCkmJnRpPC0oYWkuc2Nyb2xsV2lkdGgtYWkuY2xpZW50V2lkdGgpJiYodGk9c24rV2Uuc2Nyb2xsWCtMdCsxKSxNbitQaT53ciYmKGpuLT1QaS11cisxKSx0aGlzLmVkaXRvci5zZXRQb3NpdGlvbih0aSxqbiksdGhpcy5lZGl0'@;
put 'b3Iuc2V0UmVhZE9ubHlTdGF0ZSh0aGlzLmdldENvbW1lbnRNZXRhKHYsVCxwRCkpfWNoZWNrU2VsZWN0aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm4hMTtsZXQgYT0hMTtjb25zdCBkPWwuZ2V0VG9w'@;
put 'U3RhcnRDb3JuZXIoKTtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShkLnJvdyxkLmNvbCxJOSkmJihhPSEwKSxhfXVwZGF0ZUNvbW1lbnRNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSlbTGZdO2xldCBmO2g/KGY9bDAoaCkscHcoZixkKSk6Zj1kLHRoaXMu'@;
put 'aG90LnNldENlbGxNZXRhKGwsYSxMZixmKX1nZXRDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO2lmKGhbTGZdKXJldHVybiBoW0xmXVtkXX1vbk1vdXNlRG93bihsKXtpZih0aGlzLmhvdC52aWV3JiZ0aGlzLmhvdC52aWV3Ll93dCYmIXRoaXMu'@;
put 'cHJldmVudEVkaXRvckF1dG9Td2l0Y2gmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGwpKXtjb25zdCBhPVE0KGwudGFyZ2V0LCJURCIsIlRCT0RZIik7bGV0IGQ9bnVsbDthJiYoZD10aGlzLmhvdC5nZXRDb29yZHMoYSkpLCghYXx8dGhpcy5yYW5nZS5mcm9tJiZkJiYodGhpcy5y'@;
put 'YW5nZS5mcm9tLnJvdyE9PWQucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09ZC5jb2wpKSYmdGhpcy5oaWRlKCl9fW9uTW91c2VPdmVyKGwpe2NvbnN0IGE9ZkQuZ2V0KHRoaXMpLHtyb290RG9jdW1lbnQ6ZH09dGhpcy5ob3Q7aWYoISh0aGlzLnByZXZlbnRFZGl0b3JBdXRvU3dpdGNofHx0'@;
put 'aGlzLmVkaXRvci5pc0ZvY3VzZWQoKXx8UW8obC50YXJnZXQsInd0Qm9yZGVyIil8fGEuY2VsbEJlbG93Q3Vyc29yPT09bC50YXJnZXQpJiZ0aGlzLmVkaXRvcilpZihhLmNlbGxCZWxvd0N1cnNvcj1kLmVsZW1lbnRGcm9tUG9pbnQobC5jbGllbnRYLGwuY2xpZW50WSksdGhpcy50YXJnZXRJ'@;
put 'c0NlbGxXaXRoQ29tbWVudChsKSl7Y29uc3QgaD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90LmdldENvb3JkcyhsLnRhcmdldCkpO3RoaXMuZGlzcGxheVN3aXRjaC5zaG93KGgpfWVsc2UgZW0obC50YXJnZXQsZCkmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGwp'@;
put 'JiZ0aGlzLmRpc3BsYXlTd2l0Y2guaGlkZSgpfW9uTW91c2VVcCgpe3RoaXMucHJldmVudEVkaXRvckF1dG9Td2l0Y2g9ITF9b25BZnRlclJlbmRlcmVyKGwsYSl7YVtMZl0mJmFbTGZdW0k5XSYmd2kobCxhLmNvbW1lbnRlZENlbGxDbGFzc05hbWUpfW9uRWRpdG9yQmx1cigpe3RoaXMuc2V0'@;
put 'Q29tbWVudCgpfW9uRWRpdG9yTW91c2VEb3duKGwpe2ZELmdldCh0aGlzKS50ZW1wRWRpdG9yRGltZW5zaW9ucz17d2lkdGg6TmEobC50YXJnZXQpLGhlaWdodDpWbChsLnRhcmdldCl9fW9uRWRpdG9yTW91c2VVcChsKXtjb25zdCBhPWZELmdldCh0aGlzKSxkPU5hKGwudGFyZ2V0KSxoPVZs'@;
put 'KGwudGFyZ2V0KTsoZCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMud2lkdGgrMXx8aCE9PWEudGVtcEVkaXRvckRpbWVuc2lvbnMuaGVpZ2h0KzIpJiZ0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCx7c3R5bGU6e3dpZHRoOmQs'@;
put 'aGVpZ2h0Omh9fSl9b25Db250ZXh0TWVudUFkZENvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRjaD0hMCx0aGlzLmRpc3BsYXlTd2l0Y2guY2FuY2VsSGlkaW5nKCksdGhpcy5zZXRSYW5nZSh7ZnJvbTps'@;
put 'LmhpZ2hsaWdodH0pLHRoaXMuc2hvdygpLHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuZWRpdG9yLmZvY3VzKCl9b25Db250ZXh0TWVudVJlbW92ZUNvbW1lbnQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7dGhpcy5wcmV2ZW50RWRpdG9yQXV0b1N3aXRj'@;
put 'aD0hMCxsLmZvckFsbCgoYSxkKT0+e2E+PTAmJmQ+PTAmJnRoaXMucmVtb3ZlQ29tbWVudEF0Q2VsbChhLGQsITEpfSksdGhpcy5ob3QucmVuZGVyKCl9b25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnByZXZl'@;
put 'bnRFZGl0b3JBdXRvU3dpdGNoPSEwLGwuZm9yQWxsKChhLGQpPT57aWYoYT49MCYmZD49MCl7Y29uc3QgaD0hIXRoaXMuZ2V0Q29tbWVudE1ldGEoYSxkLHBEKTt0aGlzLnVwZGF0ZUNvbW1lbnRNZXRhKGEsZCx7W3BEXTohaH0pfX0pfWFkZFRvQ29udGV4dE1lbnUobCl7Y29uc3QgYT0oKT0+'@;
put 'dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUluZGV4ZXNMZW5ndGgoKT4wJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpPjA7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJjb21tZW50c0FkZEVk'@;
put 'aXQiLG5hbWU6KCk9PnRoaXMuY2hlY2tTZWxlY3Rpb25Db21tZW50c0NvbnNpc3RlbmN5KCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh5Qik6dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh2QiksY2FsbGJhY2s6KCk9PnRoaXMub25Db250ZXh0TWVudUFkZENvbW1lbnQoKSxk'@;
put 'aXNhYmxlZDooKT0+IWEoKXx8ISh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9LHtrZXk6ImNvbW1lbnRzUmVtb3ZlIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShiQil9LGNhbGxiYWNr'@;
put 'OigpPT50aGlzLm9uQ29udGV4dE1lbnVSZW1vdmVDb21tZW50KCksZGlzYWJsZWQ6KCk9PiFhKCl8fCEodGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCkmJiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSx7a2V5OiJjb21tZW50c1JlYWRPbmx5IixuYW1lKCl7bGV0'@;
put 'IGQ9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHdCKTtyZXR1cm4gQWYodGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLChmLHYpPT57bGV0IFQ9dGhpcy5nZXRDZWxsTWV0YShmLHYpW0xmXTtpZihUJiYoVD1UW3BEXSksVClyZXR1cm4hMH0pJiYoZD1scChkKSksZH0sY2FsbGJhY2s6KCk9'@;
put 'PnRoaXMub25Db250ZXh0TWVudU1ha2VSZWFkT25seSgpLGRpc2FibGVkOigpPT4hYSgpfHwhKHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpJiYhdGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZ0aGlzLmNoZWNrU2VsZWN0aW9uQ29tbWVudHNDb25zaXN0ZW5jeSgp'@;
put 'KX0pfWdldERpc3BsYXlEZWxheVNldHRpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbUVldO2lmKHZzKGwpKXJldHVybiBsLmRpc3BsYXlEZWxheX1kZXN0cm95KCl7dGhpcy5lZGl0b3ImJnRoaXMuZWRpdG9yLmRlc3Ryb3koKSx0aGlzLmRpc3BsYXlTd2l0Y2gmJnRoaXMu'@;
put 'ZGlzcGxheVN3aXRjaC5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1SKDI5NzYwKTtjb25zdCBnYWU9Y2xhc3MgcWple2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5jb21tYW5kcz17fSx0aGlzLmNvbW1vbkNhbGxiYWNrPW51bGx9cmVnaXN0ZXJDb21tYW5kKGwsYSl7dGhpcy5j'@;
put 'b21tYW5kc1tsXT1hfXNldENvbW1vbkNhbGxiYWNrKGwpe3RoaXMuY29tbW9uQ2FsbGJhY2s9bH1leGVjdXRlKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtjb25zdCBmPWwuc3BsaXQo'@;
put 'IjoiKSx2PWZbMF0sVD0yPT09Zi5sZW5ndGg/ZlsxXTpudWxsO2xldCBZPXRoaXMuY29tbWFuZHNbdl07aWYoIVkpdGhyb3cgbmV3IEVycm9yKGBNZW51IGNvbW1hbmQgJyR7dn0nIG5vdCBleGlzdHMuYCk7aWYoVCYmWS5zdWJtZW51JiYoWT1mdW5jdGlvbiBLamUoYyxsKXtsZXQgYTtyZXR1'@;
put 'cm4gUm4obCxkPT57Y29uc3QgaD1kLmtleT9kLmtleS5zcGxpdCgiOiIpOm51bGw7aWYoQXJyYXkuaXNBcnJheShoKSYmaFsxXT09PWMpcmV0dXJuIGE9ZCwhMX0pLGF9KFQsWS5zdWJtZW51Lml0ZW1zKSksITA9PT1ZLmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgWS5kaXNhYmxlZCYm'@;
put 'ITA9PT1ZLmRpc2FibGVkLmNhbGwodGhpcy5ob3QpfHxxbChZLCJzdWJtZW51IikpcmV0dXJuO2NvbnN0IHJlPVtdOyJmdW5jdGlvbiI9PXR5cGVvZiBZLmNhbGxiYWNrJiZyZS5wdXNoKFkuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbW1vbkNhbGxiYWNrJiZyZS5wdXNo'@;
put 'KHRoaXMuY29tbW9uQ2FsbGJhY2spLGQudW5zaGlmdChmLmpvaW4oIjoiKSksUm4ocmUsZmU9PmZlLmFwcGx5KHRoaXMuaG90LGQpKX19LGNoPSJhbGlnbm1lbnQiLG1EPSJjbGVhcl9jb2x1bW4iLEZ3PSJjb2xfbGVmdCIsSHc9ImNvbF9yaWdodCIsTnc9Im1ha2VfcmVhZF9vbmx5IixnRD0i'@;
put 'cmVkbyIsVnc9InJlbW92ZV9jb2wiLF9EPSJyZW1vdmVfcm93Iix2RD0icm93X2Fib3ZlIix5RD0icm93X2JlbG93Iixqdz0ibm9faXRlbXMiLGJEPSJ1bmRvIixfYWU9W3ZELHlELEZ3LEh3LG1ELF9ELFZ3LGJELGdELE53LGNoLE1zLGp3XSx2YWU9e1tNc106ZnVuY3Rpb24gT2plKCl7cmV0'@;
put 'dXJue25hbWU6TXN9fSxbanddOmZ1bmN0aW9uIGFCZSgpe3JldHVybntrZXk6ancsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSmopfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbdkRdOmZ1bmN0aW9uIG9CZSgpe3JldHVybntrZXk6dkQsbmFtZSgpe3JldHVy'@;
put 'biB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUWopfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNh'@;
put 'YmxlZCgpe3JldHVybiFKZyh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT10aGlzLmNvdW50Um93cygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmNvdW50Um93cygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4'@;
put 'Um93cyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRSb3d9fX0sW3lEXTpmdW5jdGlvbiBzQmUoKXtyZXR1cm57a2V5OnlELG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGVCKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0'@;
put 'U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRCb3R0b21SaWdodENvcm5lcigpO3RoaXMuYWx0ZXIoImluc2VydF9yb3dfYmVsb3ciLGMucm93LDEsIkNvbnRleHRNZW51LnJvd0JlbG93Iil9LGRpc2FibGVkKCl7cmV0dXJuIUpnKHRoaXMpfHwhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29y'@;
put 'bmVyKCkmJih0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5jb3VudFJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heFJvd3MpfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93SW5zZXJ0Um93fX19LFtGd106ZnVuY3Rpb24g'@;
put 'UWplKCl7cmV0dXJue2tleTpGdyxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh0Qil9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZ2V0VG9wTGVmdENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNlcnRfY29sX2VuZCI6Imlu'@;
put 'c2VydF9jb2xfc3RhcnQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5MZWZ0Iil9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCl8fCFKZyh0aGlzKXx8KHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigp'@;
put 'PzA9PT10aGlzLmNvdW50Q29scygpOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0s'@;
put 'W0h3XTpmdW5jdGlvbiBlQmUoKXtyZXR1cm57a2V5Okh3LG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG5CKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5nZXRUb3BSaWdodENvcm5lcigpLGw9dGhpcy5pc1J0bCgpPyJpbnNl'@;
put 'cnRfY29sX3N0YXJ0IjoiaW5zZXJ0X2NvbF9lbmQiO3RoaXMuYWx0ZXIobCxjLmNvbCwxLCJDb250ZXh0TWVudS5jb2x1bW5SaWdodCIpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpfHwhSmcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1Nl'@;
put 'bGVjdGVkQnlDb3JuZXIoKSYmKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLmNvdW50Q29scygpPj10aGlzLmdldFNldHRpbmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW21E'@;
put 'XTpmdW5jdGlvbiBKamUoKXtyZXR1cm57a2V5Om1ELG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGxCKX0sY2FsbGJhY2soYyxsKXtjb25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJy'@;
put 'YXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJsZWQoKXtyZXR1cm4hSmcodGhpcyl8fCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKX19fSxbX0RdOmZ1'@;
put 'bmN0aW9uIGlCZSgpe3JldHVybntrZXk6X0QsbmFtZSgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZCgpO2xldCBsPTA7aWYoYylpZihjLmxlbmd0aD4xKWw9MTtlbHNle2NvbnN0W2EsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHJCLGwp'@;
put 'fSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9yb3ciLGZ1bmN0aW9uIEtIZShjKXtjb25zdCBsPU05KGMpO2lmKDA9PT1sfHwxPT09bClyZXR1cm5bXTtjb25zdCBhPUV3KGwpLGQ9bmV3IFNldDtyZXR1cm4gUm4oYyx2PT57Y29uc3RbVCwsWV09YSh2KSxyZT1NYXRoLm1heChULDAp'@;
put 'O1JuKEFycmF5LmZyb20obmV3IEFycmF5KFktcmUrMSksKF9lLGtlKT0+cmUra2UpLF9lPT57ZC5oYXMoX2UpfHxkLmFkZChfZSl9KX0pLHNjKEFycmF5LmZyb20oZCkuc29ydCgodixUKT0+di1UKSwodixULFkscmUpPT4oMCE9PVkmJlQ9PT1yZVtZLTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9'@;
put 'MTp2LnB1c2goW1QsMV0pLHYpLFtdKX0odGhpcy5nZXRTZWxlY3RlZCgpKSwxLCJDb250ZXh0TWVudS5yZW1vdmVSb3ciKX0sZGlzYWJsZWQoKXtpZighSmcodGhpcykpcmV0dXJuITA7Y29uc3QgbD10aGlzLmNvdW50Um93cygpO3JldHVybiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD'@;
put 'b3JuZXIoKT8wPT09bDp0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8MD09PWx9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dSZW1vdmVSb3d9fX0sW1Z3XTpmdW5jdGlvbiByQmUoKXtyZXR1cm57a2V5OlZ3LG5hbWUoKXtjb25zdCBj'@;
put 'PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgbD0wO2lmKGMpaWYoYy5sZW5ndGg+MSlsPTE7ZWxzZXtjb25zdFssYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaUIsbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX2NvbCIsZnVu'@;
put 'Y3Rpb24gcUhlKGMpe2NvbnN0IGw9TTkoYyk7aWYoMD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9RXcobCksZD1uZXcgU2V0O3JldHVybiBSbihjLHY9Pntjb25zdFssVCwsWV09YSh2KSxyZT1NYXRoLm1heChULDApO1JuKEFycmF5LmZyb20obmV3IEFycmF5KFktcmUrMSksKF9lLGtl'@;
put 'KT0+cmUra2UpLF9lPT57ZC5oYXMoX2UpfHxkLmFkZChfZSl9KX0pLHNjKEFycmF5LmZyb20oZCkuc29ydCgodixUKT0+di1UKSwodixULFkscmUpPT4oMCE9PVkmJlQ9PT1yZVtZLTFdKzE/dlt2Lmxlbmd0aC0xXVsxXSs9MTp2LnB1c2goW1QsMV0pLHYpLFtdKX0odGhpcy5nZXRTZWxlY3Rl'@;
put 'ZCgpKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKXx8IUpnKHRoaXMpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudENvbHMoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3Rl'@;
put 'ZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlQ29sdW1ufX19LFtiRF06ZnVuY3Rpb24gbEJlKCl7cmV0dXJue2tleTpiRCxuYW1lKCl7cmV0'@;
put 'dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShvQil9LGNhbGxiYWNrKCl7dGhpcy51bmRvKCl9LGhpZGRlbigpe2NvbnN0IGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIik7cmV0dXJuIWN8fCFjLmlzRW5hYmxlZCgpfSxkaXNhYmxlZCgpe3JldHVybiF0aGlzLmdldFBsdWdpbigidW5k'@;
put 'b1JlZG8iKS5pc1VuZG9BdmFpbGFibGUoKX19fSxbZ0RdOmZ1bmN0aW9uIG5CZSgpe3JldHVybntrZXk6Z0QsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uoc0IpfSxjYWxsYmFjaygpe3RoaXMucmVkbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1'@;
put 'bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNSZWRvQXZhaWxhYmxlKCl9fX0sW053XTpmdW5jdGlvbiB0QmUoKXtyZXR1cm57a2V5Ok53LG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0'@;
put 'ZWRQaHJhc2UoYUIpO3JldHVybiBBZih0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSwoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KSYmKGM9bHAoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPUFmKGMsKGEsZCk9PnRoaXMuZ2V0'@;
put 'Q2VsbE1ldGEoYSxkKS5yZWFkT25seSk7Um4oYyxhPT57YS5mb3JBbGwoKGQsaCk9PntkPj0wJiZoPj0wJiZ0aGlzLnNldENlbGxNZXRhKGQsaCwicmVhZE9ubHkiLCFsKX0pfSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQoKXtyZXR1cm4hKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlD'@;
put 'b3JuZXIoKSYmMCE9PXRoaXMuY291bnRSb3dzKCkmJjAhPT10aGlzLmNvdW50Q29scygpJiZ0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSYmMCE9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLmxlbmd0aCl9fX0sW2NoXTpmdW5jdGlvbiBYamUoKXtyZXR1cm57a2V5OmNoLG5hbWUoKXtyZXR1cm4g'@;
put 'dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKE1CKX0sZGlzYWJsZWQoKXtyZXR1cm4gMD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpfHwhKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51'@;
put 'OntpdGVtczpbe2tleTpgJHtjaH06bGVmdGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDQik7cmV0dXJuIEFmKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5p'@;
put 'bmRleE9mKCJodExlZnQiKSlyZXR1cm4hMH0pJiYoYz1scChjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9UWcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRMZWZ0Ijt0aGlzLnJ1'@;
put 'bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxkbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7Y2h9OmNlbnRlcmAsbmFt'@;
put 'ZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShTQik7cmV0dXJuIEFmKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodENlbnRlciIpKXJldHVybiEwfSkm'@;
put 'JihjPWxwKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1RZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodENlbnRlciI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVu'@;
put 'dCIsbCxjLGEsZCksZG0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke2NofTpyaWdodGAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRl'@;
put 'ZFBocmFzZSh4Qik7cmV0dXJuIEFmKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodFJpZ2h0IikpcmV0dXJuITB9KSYmKGM9bHAoYykpLGN9LGNhbGxiYWNrKCl7Y29u'@;
put 'c3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPVFnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLGRtKGMsYSxkLChoLGYpPT50'@;
put 'aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LFQpPT50aGlzLnNldENlbGxNZXRhKGgsZix2LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHtjaH06anVzdGlmeWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShrQik7cmV0dXJuIEFmKHRoaXMu'@;
put 'Z2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRhKGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodEp1c3RpZnkiKSlyZXR1cm4hMH0pJiYoYz1scChjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZSgpLGw9UWcoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0iaG9yaXpvbnRhbCIsZD0iaHRKdXN0aWZ5Ijt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxkbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLCho'@;
put 'LGYsdixUKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtuYW1lOk1zfSx7a2V5OmAke2NofTp0b3BgLG5hbWUoKXtsZXQgYz10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRUIpO3JldHVybiBBZih0aGlzLmdldFNlbGVjdGVkUmFuZ2Uo'@;
put 'KSwoYSxkKT0+e2NvbnN0IGg9dGhpcy5nZXRDZWxsTWV0YShhLGQpLmNsYXNzTmFtZTtpZihoJiYtMSE9PWguaW5kZXhPZigiaHRUb3AiKSlyZXR1cm4hMH0pJiYoYz1scChjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9UWcoYywoaCxmKT0+dGhp'@;
put 'cy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0VG9wIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxkKSxkbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixUKT0+dGhpcy5zZXRDZWxsTWV0YSho'@;
put 'LGYsdixUKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7Y2h9Om1pZGRsZWAsbmFtZSgpe2xldCBjPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShUQik7cmV0dXJuIEFmKHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChhLGQpPT57Y29uc3QgaD10aGlzLmdldENlbGxNZXRh'@;
put 'KGEsZCkuY2xhc3NOYW1lO2lmKGgmJi0xIT09aC5pbmRleE9mKCJodE1pZGRsZSIpKXJldHVybiEwfSkmJihjPWxwKGMpKSxjfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1RZyhjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxh'@;
put 'PSJ2ZXJ0aWNhbCIsZD0iaHRNaWRkbGUiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQpLGRtKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LFQpPT50aGlzLnNldENlbGxNZXRhKGgsZix2LFQpKSx0aGlzLnJlbmRlcigpfSxkaXNh'@;
put 'YmxlZDohMX0se2tleTpgJHtjaH06Ym90dG9tYCxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKERCKTtyZXR1cm4gQWYodGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksKGEsZCk9Pntjb25zdCBoPXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5jbGFzc05hbWU7aWYoaCYmLTEhPT1o'@;
put 'LmluZGV4T2YoImh0Qm90dG9tIikpcmV0dXJuITB9KSYmKGM9bHAoYykpLGN9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPVFnKGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodEJvdHRvbSI7dGhp'@;
put 'cy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxjLGEsZCksZG0oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsVCk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsVCkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfV19fX19O2Z1bmN0aW9uIHlhZSgp'@;
put 'e2NvbnN0IGM9e307cmV0dXJuIHlzKHZhZSwobCxhKT0+e2NbYV09bCgpfSksY31jb25zdCBiYWU9Y2xhc3MgY0Jle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMuaG90PWwsdGhpcy5w'@;
put 'cmVkZWZpbmVkSXRlbXM9eWFlKCksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuPWF9c2V0UHJlZGVmaW5lZEl0ZW1zKGwpe2NvbnN0IGE9e307dGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLmxlbmd0aD0wLHlzKGwsKGQsaCk9PntsZXQgZj0iIjtkLm5hbWU9PT1Ncz8oYVtNc109ZCxmPU1zKTpp'@;
put 'c05hTihwYXJzZUludChoLDEwKSk/KGQua2V5PXZvaWQgMD09PWQua2V5P2g6ZC5rZXksYVtoXT1kLGY9ZC5rZXkpOihhW2Qua2V5XT1kLGY9ZC5rZXkpLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybi5wdXNoKGYpfSksdGhpcy5wcmVkZWZpbmVkSXRlbXM9YX1nZXRJdGVtcygpe3JldHVybiBm'@;
put 'dW5jdGlvbiB1QmUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W10sYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06e307Y29uc3QgZD1bXTtsZXQgaD1hcmd1bWVudHMu'@;
put 'bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gaCYmaC5pdGVtcz9oPWguaXRlbXM6QXJyYXkuaXNBcnJheShoKXx8KGg9bCksdnMoaCk/eXMoaCwoZix2KT0+e2xldCBUPWFbInN0cmluZyI9PXR5cGVvZiBmP2Y6dl07VHx8KFQ9ZiksdnMo'@;
put 'Zik/eGMoVCxmKToic3RyaW5nIj09dHlwZW9mIFQmJihUPXtuYW1lOlR9KSx2b2lkIDA9PT1ULmtleSYmKFQua2V5PXYpLGQucHVzaChUKX0pOlJuKGgsKGYsdik9PntsZXQgVD1hW2ZdOyFUJiZfYWUuaW5kZXhPZihmKT49MHx8KFR8fChUPXtuYW1lOmYsa2V5OmAke3Z9YH0pLHZzKGYpJiZ4'@;
put 'YyhULGYpLHZvaWQgMD09PVQua2V5JiYoVC5rZXk9diksZC5wdXNoKFQpKX0pLGR9KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsLHRoaXMuZGVmYXVsdE9yZGVyUGF0dGVybix0aGlzLnByZWRlZmluZWRJdGVtcyl9fSxoQmU9Y2xh'@;
put 'c3MgZEJle2NvbnN0cnVjdG9yKGwsYSl7Y29uc3QgZD1sOShhKSxoPUhnKGEpO2xldCBmLHYsVCxZLHJlLGZlO3RoaXMucm9vdFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxUPXBhcnNl'@;
put 'SW50KGwubGVmdCwxMCkscmU9bC5oZWlnaHR8fDAsZmU9bC53aWR0aHx8MCx2PWYsWT1ULGYrPWQsVCs9aCk6ImV2ZW50Ij09PXRoaXMudHlwZSYmKGY9cGFyc2VJbnQobC5wYWdlWSwxMCksVD1wYXJzZUludChsLnBhZ2VYLDEwKSxyZT1sLnRhcmdldC5jbGllbnRIZWlnaHQsZmU9bC50YXJn'@;
put 'ZXQuY2xpZW50V2lkdGgsdj1mLWQsWT1ULWgpLHRoaXMudG9wPWYsdGhpcy50b3BSZWxhdGl2ZT12LHRoaXMubGVmdD1ULHRoaXMubGVmdFJlbGF0aXZlPVksdGhpcy5zY3JvbGxUb3A9ZCx0aGlzLnNjcm9sbExlZnQ9aCx0aGlzLmNlbGxIZWlnaHQ9cmUsdGhpcy5jZWxsV2lkdGg9ZmV9Z2V0'@;
put 'U291cmNlVHlwZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9m'@;
put 'ZnNldEhlaWdodDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRo'@;
put 'PD0oYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19O2NsYXNzIHdEe2NvbnN0cnVjdG9yKGws'@;
put 'YSl7dGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LHRoaXMu'@;
put 'ZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLmNvbnRhaW5lcj10aGlzLmNyZWF0ZUNvbnRhaW5lcih0aGlzLm9wdGlvbnMubmFtZSksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3RTdWJNZW51cz17fSx0aGlzLnBhcmVudE1lbnU9dGhpcy5vcHRpb25zLnBhcmVudHx8bnVsbCx0aGlz'@;
put 'Lm1lbnVJdGVtcz1udWxsLHRoaXMub3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cz1udWxsLHRoaXMua2V5RXZlbnQ9ITEsdGhpcy5vZmZzZXQ9e2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0sdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1udWxsLHRoaXMucmVnaXN0ZXJFdmVudHMo'@;
put 'KX1yZWdpc3RlckV2ZW50cygpe2xldCBsPXRoaXMuaG90LnJvb3RXaW5kb3c7Zm9yKDtsOyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwuZG9jdW1lbnQsIm1vdXNlZG93biIsYT0+dGhpcy5vbkRvY3VtZW50TW91c2VEb3duKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGwuZG9jdW1lbnQsImNvbnRleHRtZW51IixhPT50aGlzLm9uRG9jdW1lbnRDb250ZXh0TWVudShhKSksbD1zdyhsKX1zZXRNZW51SXRlbXMobCl7dGhpcy5tZW51SXRlbXM9bH1nZXRTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKT90aGlz'@;
put 'LmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KHRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKVswXSk6bnVsbH1oYXNTZWxlY3RlZEl0ZW0oKXtyZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KCkpfXNldE9mZnNldChsKXt0aGlzLm9mZnNldFts'@;
put 'XT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MH1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dmFyIGw9dGhpczt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZU9wZW4iKSx0aGlzLmNvbnRhaW5l'@;
put 'ci5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siO2NvbnN0IGE9S1Yoa2U9PnRoaXMub3BlblN1Yk1lbnUoa2UpLDMwMCksZD10aGlzLm9wdGlvbnMubWluV2lkdGh8fDIxNTtsZXQgaD0hMSxmPWZkKHRoaXMubWVudUl0ZW1zLGtl'@;
put 'PT4oa2Uua2V5PT09ancmJihoPSEwKSxmdW5jdGlvbiBqamUoYyxsKXtyZXR1cm4hYy5oaWRkZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oa2UsdGhpcy5ob3QpKSk7aWYoZi5sZW5ndGg8MSYmIWgpZi5wdXNoKHlhZSgpW2p3XSk7ZWxzZSBp'@;
put 'ZigwPT09Zi5sZW5ndGgpcmV0dXJuO2Y9ZnVuY3Rpb24gemplKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpNcyxhPWMuc2xpY2UoMCk7cmV0dXJuIGE9ZmFlKGEsbCksYT1mdW5jdGlvbiBCamUoYyxsKXtsZXQgYT1jLnNs'@;
put 'aWNlKDApO3JldHVybiBhLnJldmVyc2UoKSxhPWZhZShhLGwpLGEucmV2ZXJzZSgpLGF9KGEsbCksYT1mdW5jdGlvbiBZamUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gUm4oYywoYSxkKT0+e2Q+MD9sW2wubGVuZ3RoLTFdLm5hbWUhPT1hLm5hbWUmJmwucHVzaChhKTpsLnB1c2goYSl9KSxsfShh'@;
put 'KSxhfShmLE1zKTtsZXQgdj0hMTtjb25zdCBUPXtkYXRhOmYsY29sSGVhZGVyczohMSxhdXRvQ29sdW1uU2l6ZTohMCxhdXRvV3JhcFJvdzohMSxtb2RpZnlDb2xXaWR0aDprZT0+ZW8oa2UpJiZrZTxkP2Q6a2UsYXV0b1Jvd1NpemU6ITEscmVhZE9ubHk6ITAsZWRpdG9yOiExLGNvcHlQYXN0'@;
put 'ZTohMSxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVyOihrZSxXZSxKZSx0dCx5dCx3dCk9PnRoaXMubWVudUl0ZW1SZW5kZXJlcihrZSxXZSxKZSx0dCx5dCx3dCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNpZGVDbGlja0Rlc2Vs'@;
put 'ZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhZnRlck9uQ2VsbE1vdXNlT3Zlcjooa2UsV2UpPT57dGhpcy5pc0FsbFN1Yk1lbnVzQ2xvc2VkKCk/YShXZS5yb3cpOnRoaXMub3BlblN1Yk1l'@;
put 'bnUoV2Uucm93KX0scm93SGVpZ2h0czprZT0+ZltrZV0ubmFtZT09PU1zPzE6MjMsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTprZT0+e2tlLnByZXZlbnREZWZhdWx0KCksdGooKSYmdiYmdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5jbG9zZSghMCl9LGJlZm9yZU9uQ2VsbE1vdXNlVXA6'@;
put 'a2U9Pnt0aGlzLmhhc1NlbGVjdGVkSXRlbSgpJiYodj0hdGhpcy5pc0NvbW1hbmRQYXNzaXZlKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtKCkpLHRoaXMuZXhlY3V0ZUNvbW1hbmQoa2UpKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOmtlPT57KCF0aigpfHwhaW0oa2UpKSYmdiYmdGhpcy5oYXNTZWxlY3Rl'@;
put 'ZEl0ZW0oKSYmKGYyKCl8fGVqKCk/c2V0VGltZW91dCgoKT0+dGhpcy5jbG9zZSghMCksMzI1KTp0aGlzLmNsb3NlKCEwKSl9LGFmdGVyVW5saXN0ZW46KCk9PnshdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmdGhpcy5pc09wZW5lZCgpJiZ0aGlzLmhvdE1lbnUubGlzdGVuKCl9fTt0aGlzLm9y'@;
put 'aWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9ITEsdGhpcy5ob3RNZW51PW5ldyBrWSh0aGlzLmNvbnRhaW5lcixUKSx0aGlzLmhvdE1l'@;
put 'bnUuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSx0aGlzLmhvdE1lbnUuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclNlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5ob3RNZW51LmluaXQoKSx0aGlzLmhv'@;
put 'dE1lbnUubGlzdGVuKCk7Y29uc3QgWT10aGlzLmhvdE1lbnUuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkscmU9WS5hZGRDb250ZXh0KCJtZW51IiksX2U9e2dyb3VwOiJtZW51IixydW5Pbmx5SWY6a2U9PiExPT09Zncoa2UudGFyZ2V0KXx8ITE9PT10aGlzLmNvbnRhaW5lci5jb250YWlucyhrZS50'@;
put 'YXJnZXQpfTtZLnNldEFjdGl2ZUNvbnRleHROYW1lKCJtZW51IikscmUuYWRkU2hvcnRjdXRzKFt7a2V5czpbWyJFc2NhcGUiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLmtleUV2ZW50PSEwLHRoaXMuY2xvc2UoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dEb3duIl1dLGNhbGxi'@;
put 'YWNrOigpPT57Y29uc3Qga2U9dGhpcy5ob3RNZW51LmdldFNlbGVjdGVkTGFzdCgpO3RoaXMua2V5RXZlbnQ9ITAsa2U/dGhpcy5zZWxlY3ROZXh0Q2VsbChrZVswXSxrZVsxXSk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dVcCJdXSxj'@;
put 'YWxsYmFjazooKT0+e2NvbnN0IGtlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLGtlP3RoaXMuc2VsZWN0UHJldkNlbGwoa2VbMF0sa2VbMV0pOnRoaXMuc2VsZWN0TGFzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siQXJyb3dSaWdo'@;
put 'dCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGtlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTtpZih0aGlzLmtleUV2ZW50PSEwLGtlKXtjb25zdCBXZT10aGlzLm9wZW5TdWJNZW51KGtlWzBdKTtXZSYmV2Uuc2VsZWN0Rmlyc3RDZWxsKCl9dGhpcy5rZXlFdmVudD0hMX19LHtrZXlz'@;
put 'OltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGtlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLGtlJiZ0aGlzLmlzU3ViTWVudSgpJiYodGhpcy5jbG9zZSgpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUu'@;
put 'bGlzdGVuKCkpLHRoaXMua2V5RXZlbnQ9ITF9fSx7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazprZT0+e2NvbnN0IFdlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLHRoaXMuaG90TWVudS5nZXRTb3VyY2VEYXRhQXRSb3coV2VbMF0pLnN1Ym1lbnV8'@;
put 'fCh0aGlzLmV4ZWN1dGVDb21tYW5kKGtlKSx0aGlzLmNsb3NlKCEwKSksdGhpcy5rZXlFdmVudD0hMX19LHtrZXlzOltbIlBhZ2VVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGtlPXRoaXMuaG90TWVudS5nZXRTZWxlY3RlZExhc3QoKTt0aGlzLmtleUV2ZW50PSEwLGtlP3RoaXMuaG90TWVu'@;
put 'dS5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RGaXJzdENlbGwoKSx0aGlzLmtleUV2ZW50PSExfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBrZT10aGlzLmhvdE1lbnUuZ2V0'@;
put 'U2VsZWN0ZWRMYXN0KCk7dGhpcy5rZXlFdmVudD0hMCxrZT90aGlzLmhvdE1lbnUuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KHRoaXMuaG90TWVudS5jb3VudFZpc2libGVSb3dzKCksMCk6dGhpcy5zZWxlY3RMYXN0Q2VsbCgpLHRoaXMua2V5RXZlbnQ9ITF9fV0sX2UpLHRoaXMuYmxvY2tN'@;
put 'YWluVGFibGVDYWxsYmFja3MoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyT3BlbiIpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTt0aGlzLmlzT3BlbmVkKCkmJihsJiZ0aGlzLnBhcmVudE1lbnU/dGhpcy5w'@;
put 'YXJlbnRNZW51LmNsb3NlKCk6KHRoaXMuY2xvc2VBbGxTdWJNZW51cygpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMucmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpLHRoaXMuaG90TWVudS5kZXN0cm95KCksdGhpcy5ob3RNZW51PW51bGwsdGhpcy5ob3QuZ2V0'@;
put 'U2V0dGluZ3MoKS5vdXRzaWRlQ2xpY2tEZXNlbGVjdHM9dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpLHRoaXMucGFyZW50TWVudSYmdGhpcy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpKX1vcGVuU3ViTWVudShsKXtp'@;
put 'ZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIEZqZShjKXtyZXR1cm4gUW8oYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3RNZW51'@;
put 'LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyB3RCh0aGlzLmhvdCx7cGFyZW50OnRoaXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaC5zZXRN'@;
put 'ZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9'@;
put 'dGhpcy5ob3RTdWJNZW51c1thLmtleV07ZCYmKGQuZGVzdHJveSgpLGRlbGV0ZSB0aGlzLmhvdFN1Yk1lbnVzW2Eua2V5XSl9Y2xvc2VBbGxTdWJNZW51cygpe1JuKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2Vk'@;
put 'KCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFu'@;
put 'YWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZighdGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10'@;
put 'aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIFBqZShjKXtyZXR1cm4gX3MoYyxsPT4oe3N0'@;
put 'YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxsKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0'@;
put 'ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtjb25zdHtpc0NvbW1hbmQ6YSxuYW1lOmQsZGlzYWJsZWQ6aCxzdWJtZW51OmZ9PWwsdj0hMD09PWh8fCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYhMD09PWguY2FsbCh0aGlzLmhvdCk7cmV0dXJuITE9PT1hfHxkPT09TXN8'@;
put 'fCEwPT09dnx8Zn1zZXRQb3NpdGlvbihsKXtjb25zdCBhPW5ldyBoQmUobCx0aGlzLmNvbnRhaW5lci5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KTt0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQ/KGEuZml0c0JlbG93KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0aW9uQmVsb3dD'@;
put 'dXJzb3IoYSk6YS5maXRzQWJvdmUodGhpcy5jb250YWluZXIpP3RoaXMuc2V0UG9zaXRpb25BYm92ZUN1cnNvcihhKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoYSksdGhpcy5ob3QuaXNMdHIoKT90aGlzLnNldEhvcml6b250YWxQb3NpdGlvbkZvckx0cihhKTp0aGlzLnNldEhvcml6'@;
put 'b250YWxQb3NpdGlvbkZvclJ0bChhKSk6KHRoaXMuc2V0UG9zaXRpb25CZWxvd0N1cnNvcihhKSx0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKGEpKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JSdGwobCl7bC5maXRzT25MZWZ0KHRoaXMuY29udGFpbmVyKT90aGlzLnNldFBvc2l0'@;
put 'aW9uT25MZWZ0T2ZDdXJzb3IobCk6dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKX1zZXRIb3Jpem9udGFsUG9zaXRpb25Gb3JMdHIobCl7bC5maXRzT25SaWdodCh0aGlzLmNvbnRhaW5lcik/dGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKTp0aGlzLnNldFBvc2l0'@;
put 'aW9uT25MZWZ0T2ZDdXJzb3IobCl9c2V0UG9zaXRpb25BYm92ZUN1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5hYm92ZStsLnRvcC10aGlzLmNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7dGhpcy5pc1N1Yk1lbnUoKSYmKGE9bC50b3ArbC5jZWxsSGVpZ2h0LXRoaXMuY29udGFpbmVyLm9mZnNl'@;
put 'dEhlaWdodCszKSx0aGlzLmNvbnRhaW5lci5zdHlsZS50b3A9YCR7YX1weGB9c2V0UG9zaXRpb25CZWxvd0N1cnNvcihsKXtsZXQgYT10aGlzLm9mZnNldC5iZWxvdytsLnRvcCsxO3RoaXMuaXNTdWJNZW51KCkmJihhPWwudG9wLTEpLHRoaXMuY29udGFpbmVyLnN0eWxlLnRvcD1gJHthfXB4'@;
put 'YH1zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcihsKXtsZXQgYT1sLmxlZnQ7aWYodGhpcy5pc1N1Yk1lbnUoKSl7Y29uc3R7cmlnaHQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthKz1sLmNlbGxXaWR0aCtkLShsLmxlZnQrbC5jZWxsV2lk'@;
put 'dGgpfWVsc2UgYSs9dGhpcy5vZmZzZXQucmlnaHQ7dGhpcy5jb250YWluZXIuc3R5bGUubGVmdD1gJHthfXB4YH1zZXRQb3NpdGlvbk9uTGVmdE9mQ3Vyc29yKGwpe2xldCBhPXRoaXMub2Zmc2V0LmxlZnQrbC5sZWZ0LXRoaXMuY29udGFpbmVyLm9mZnNldFdpZHRoO2lmKHRoaXMuaXNTdWJN'@;
put 'ZW51KCkpe2NvbnN0e2xlZnQ6ZH09dGhpcy5wYXJlbnRNZW51LmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLT1sLmxlZnQtZH10aGlzLmNvbnRhaW5lci5zdHlsZS5sZWZ0PWAke2F9cHhgfXNlbGVjdEZpcnN0Q2VsbCgpe2NvbnN0IGw9dGhpcy5ob3RNZW51LmdldENlbGwo'@;
put 'MCwwKTt1RChsKXx8ZEQobCl8fGhEKGwpP3RoaXMuc2VsZWN0TmV4dENlbGwoMCwwKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbCgwLDApfXNlbGVjdExhc3RDZWxsKCl7Y29uc3QgbD10aGlzLmhvdE1lbnUuY291bnRSb3dzKCktMSxhPXRoaXMuaG90TWVudS5nZXRDZWxsKGwsMCk7dUQoYSl8'@;
put 'fGREKGEpfHxoRChhKT90aGlzLnNlbGVjdFByZXZDZWxsKGwsMCk6KHRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGwsMCx2b2lkIDAsdm9pZCAwLCExKSx0aGlzLmhvdE1lbnUuc2Nyb2xsVmlld3BvcnRUbyhsLDAsITAsITEpKX1zZWxlY3ROZXh0Q2VsbChsLGEpe2NvbnN0IGQ9bCsxLGg9ZDx0'@;
put 'aGlzLmhvdE1lbnUuY291bnRSb3dzKCk/dGhpcy5ob3RNZW51LmdldENlbGwoZCxhKTpudWxsO2gmJih1RChoKXx8ZEQoaCl8fGhEKGgpP3RoaXMuc2VsZWN0TmV4dENlbGwoZCxhKTp0aGlzLmhvdE1lbnUuc2VsZWN0Q2VsbChkLGEpKX1zZWxlY3RQcmV2Q2VsbChsLGEpe2NvbnN0IGQ9bC0x'@;
put 'LGg9ZD49MD90aGlzLmhvdE1lbnUuZ2V0Q2VsbChkLGEpOm51bGw7aCYmKHVEKGgpfHxkRChoKXx8aEQoaCk/dGhpcy5zZWxlY3RQcmV2Q2VsbChkLGEpOnRoaXMuaG90TWVudS5zZWxlY3RDZWxsKGQsYSkpfW1lbnVJdGVtUmVuZGVyZXIobCxhLGQsaCxmLHYpe2NvbnN0IFQ9bC5nZXRTb3Vy'@;
put 'Y2VEYXRhQXRSb3coZCksWT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iiksa2U9SmU9PkplLmRpc2FibGVTZWxlY3Rpb247bGV0IFdlPXY7dmFyIEplOyJmdW5jdGlvbiI9PXR5cGVvZiBXZSYmKFdlPVdlLmNhbGwodGhpcy5ob3QpKSxoMihhKSx3aShZLCJodEl0'@;
put 'ZW1XcmFwcGVyIiksYS5hcHBlbmRDaGlsZChZKSxKZT1ULG5ldyBSZWdFeHAoTXMsImkiKS50ZXN0KEplLm5hbWUpP3dpKGEsImh0U2VwYXJhdG9yIik6ImZ1bmN0aW9uIj09dHlwZW9mIFQucmVuZGVyZXI/KHdpKGEsImh0Q3VzdG9tTWVudVJlbmRlcmVyIiksYS5hcHBlbmRDaGlsZChULnJl'@;
put 'bmRlcmVyKGwsWSxkLGgsZixXZSkpKTpGZyhZLFdlKSwoSmU9PiEwPT09SmUuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBKZS5kaXNhYmxlZCYmITA9PT1KZS5kaXNhYmxlZC5jYWxsKHRoaXMuaG90KSkoVCk/KHdpKGEsImh0RGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRF'@;
put 'dmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6a2UoVCk/KHdpKGEsImh0U2VsZWN0aW9uRGlzYWJsZWQiKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKSk6KEplPT5x'@;
put 'bChKZSwic3VibWVudSIpKShUKT8od2koYSwiaHRTdWJtZW51Iiksa2UoVCk/dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVyIiwoKT0+bC5kZXNlbGVjdENlbGwoKSk6dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWVudGVy'@;
put 'IiwoKT0+bC5zZWxlY3RDZWxsKGQsaCx2b2lkIDAsdm9pZCAwLCExLCExKSkpOihzcyhhLFsiaHRTdWJtZW51IiwiaHREaXNhYmxlZCJdKSxrZShUKT90aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLmRlc2VsZWN0Q2VsbCgpKTp0aGlzLmV2'@;
put 'ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlZW50ZXIiLCgpPT5sLnNlbGVjdENlbGwoZCxoLHZvaWQgMCx2b2lkIDAsITEsITEpKSl9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgYT10aGlzLm9wdGlvbnMuY29udGFpbmVyLm93bmVyRG9jdW1lbnQ7bGV0IGgsZD1hcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbDtyZXR1cm4gZCYmKG9sKGQpJiYoZD1kLmNhbGwodGhpcy5ob3QpLGQ9bnVsbD09PWR8fGlsKGQpPyIiOmQudG9TdHJpbmcoKSksZD1kLnJlcGxhY2UoL1teQS16MC05XS9nLCJfIiksZD1gJHt0aGlz'@;
put 'Lm9wdGlvbnMuY2xhc3NOYW1lfVN1Yl8ke2R9YCxoPWEucXVlcnlTZWxlY3RvcihgLiR7dGhpcy5vcHRpb25zLmNsYXNzTmFtZX0uJHtkfWApKSxofHwoaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpLHdpKGgsYGh0TWVudSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmd2koaCxkKSx0'@;
put 'aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofWJsb2NrTWFpblRhYmxlQ2FsbGJhY2tzKCl7dGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjaz1mdW5jdGlvbigpe30sdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENh'@;
put 'bGxiYWNrKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsdGhpcy5fYWZ0ZXJTY3JvbGxDYWxsYmFjayl9cmVsZWFzZU1haW5UYWJsZUNhbGxiYWNrcygpe3RoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2smJih0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlclNjcm9s'@;
put 'bFZlcnRpY2FsbHkiLHRoaXMuX2FmdGVyU2Nyb2xsQ2FsbGJhY2spLHRoaXMuaG90LnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5Iix0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrKSx0aGlzLl9hZnRlclNjcm9sbENhbGxiYWNrPW51bGwpfW9uQWZ0ZXJJbml0KCl7Y29uc3R7'@;
put 'd3RUYWJsZTpsfT10aGlzLmhvdE1lbnUudmlldy5fd3QsYT10aGlzLmhvdE1lbnUuZ2V0U2V0dGluZ3MoKS5kYXRhLGQ9bC5oaWRlci5zdHlsZSxoPWwuaG9sZGVyLnN0eWxlLGY9cGFyc2VJbnQoZC53aWR0aCwxMCksdj1zYyhhLChULFkpPT5UKyhZLm5hbWU9PT1Ncz8xOjI2KSwwKTtoLndp'@;
put 'ZHRoPWAke2YrM31weGAsaC5oZWlnaHQ9YCR7diszfXB4YCxkLmhlaWdodD1oLmhlaWdodH1vbkFmdGVyU2VsZWN0aW9uKGwsYSxkLGgsZil7ITE9PT10aGlzLmtleUV2ZW50JiYoZi52YWx1ZT0hMCl9b25Eb2N1bWVudE1vdXNlRG93bihsKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLm9wdGlv'@;
put 'bnMuc3RhbmRhbG9uZSYmdGhpcy5ob3RNZW51JiYhZW0obC50YXJnZXQsdGhpcy5ob3RNZW51LnJvb3RFbGVtZW50KXx8KHRoaXMuaXNBbGxTdWJNZW51c0Nsb3NlZCgpfHx0aGlzLmlzU3ViTWVudSgpKSYmIWVtKGwudGFyZ2V0LCIuaHRNZW51IikpJiZ0aGlzLmNsb3NlKCEwKX1vbkRvY3Vt'@;
put 'ZW50Q29udGV4dE1lbnUobCl7dGhpcy5pc09wZW5lZCgpJiZRbyhsLnRhcmdldCwiaHRDb3JlIikmJmVtKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCkmJmwucHJldmVudERlZmF1bHQoKX19R2Eod0QsdzEpO2NvbnN0IGV6PXdELE1EPSJjb250ZXh0TWVudSI7YW8uZ2V0U2lu'@;
put 'Z2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb250ZXh0TWVudVNob3ciKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudVNob3ciKSxhby5nZXRTaW5n'@;
put 'bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUhpZGUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb250ZXh0TWVudUV4ZWN1dGUiKTtsZXQgbUJlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTUR9c3Rh'@;
put 'dGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW3ZELHlELE1zLEZ3LEh3LE1zLF9ELFZ3LE1zLGJELGdELE1zLE53'@;
put 'LE1zLGNoXX1jb25zdHJ1Y3RvcihhKXtzdXBlcihhKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamwodGhpcyksdGhpcy5jb21tYW5kRXhlY3V0b3I9bmV3IGdhZSh0aGlzLmhvdCksdGhpcy5pdGVtc0ZhY3Rvcnk9bnVsbCx0aGlzLm1lbnU9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMu'@;
put 'aG90LmdldFNldHRpbmdzKClbTURdfWVuYWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbTURdOyJmdW5jdGlvbiI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21t'@;
put 'b25DYWxsYmFjayhkLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IGV6KHRoaXMuaG90LHtjbGFzc05hbWU6Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjpkLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2Nh'@;
put 'bEhvb2soImJlZm9yZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25NZW51QWZ0'@;
put 'ZXJDbG9zZSgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gYS5leGVjdXRlQ29tbWFuZC5jYWxsKGEs'@;
put 'Li4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsQ29udGV4dE1lbnUiLGg9PnRoaXMub25BZnRlck9uQ2VsbENvbnRleHRNZW51KGgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVy'@;
put 'LnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiYodGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bnVsbCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW9wZW4oYSl7aWYoIXRoaXMubWVudXx8KHRoaXMucHJlcGFyZU1lbnVJdGVtcygpLHRo'@;
put 'aXMubWVudS5vcGVuKCksIXRoaXMubWVudS5pc09wZW5lZCgpKSlyZXR1cm47bGV0IGQ9MCxoPTA7aWYodGhpcy5ob3Qucm9vdERvY3VtZW50IT09dGhpcy5tZW51LmNvbnRhaW5lci5vd25lckRvY3VtZW50KXtjb25zdHtmcmFtZUVsZW1lbnQ6Zn09dGhpcy5ob3Qucm9vdFdpbmRvdyx7dG9w'@;
put 'OnYsbGVmdDpUfT1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Q9di1sOShhLnZpZXcpLGg9VC1IZyhhLnZpZXcpfWVsc2UgZD0tMSpsOSh0aGlzLm1lbnUuaG90TWVudS5yb290V2luZG93KSxoPS0xKkhnKHRoaXMubWVudS5ob3RNZW51LnJvb3RXaW5kb3cpO3RoaXMubWVudS5zZXRQb3Np'@;
put 'dGlvbih7dG9wOnBhcnNlSW50KGEucGFnZVksMTApK2QsbGVmdDpwYXJzZUludChhLnBhZ2VYLDEwKStofSl9Y2xvc2UoKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUuY2xvc2UoKSx0aGlzLml0ZW1zRmFjdG9yeT1udWxsKX1leGVjdXRlQ29tbWFuZChhKXtudWxsPT09dGhpcy5pdGVtc0ZhY3Rv'@;
put 'cnkmJnRoaXMucHJlcGFyZU1lbnVJdGVtcygpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGEsLi4uaCl9cHJlcGFyZU1lbnVJdGVtcygp'@;
put 'e3RoaXMuaXRlbXNGYWN0b3J5PW5ldyBiYWUodGhpcy5ob3QsYy5ERUZBVUxUX0lURU1TKTtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbTURdLGQ9e2l0ZW1zOnRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGEpfTt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudURl'@;
put 'ZmF1bHRPcHRpb25zIixkKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoZC5pdGVtcyk7Y29uc3QgaD10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhhKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsaCksdGhpcy5tZW51LnNldE1l'@;
put 'bnVJdGVtcyhoKSxSbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9b25BZnRlck9uQ2VsbENvbnRleHRNZW51KGEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQucm93SGVhZGVycyxmPWQuY29sSGVhZGVycyxUPWEudGFyZ2V0'@;
put 'O3RoaXMuY2xvc2UoKSwhUW8oVCwiaGFuZHNvbnRhYmxlSW5wdXQiKSYmKGEucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLChofHxmfHxmdW5jdGlvbiB2KFkpe3JldHVybiJURCI9PT1ZLm5vZGVOYW1lfHwiVEQiPT09WS5wYXJlbnROb2RlLm5vZGVOYW1lfShUKXx8UW8o'@;
put 'VCwiY3VycmVudCIpJiZRbyhULCJ3dEJvcmRlciIpKSYmdGhpcy5vcGVuKGEpKX1vbk1lbnVCZWZvcmVPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1l'@;
put 'bnVTaG93Iix0aGlzKX1vbk1lbnVBZnRlckNsb3NlKCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVIaWRlIix0aGlzKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5kZXN0cm95'@;
put 'KCl9fXJldHVybiBjLlNFUEFSQVRPUj17bmFtZTpNc30sY30pKCk7Y2xhc3Mgd0Jle2NvbnN0cnVjdG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgTUJle2NvbnN0cnVjdG9y'@;
put 'KCl7dGhpcy5jbGlwYm9hcmREYXRhPW5ldyB3QmV9fWNsYXNzIHR6e2NvbnN0cnVjdG9yKGwpe3RoaXMucm9vdERvY3VtZW50PWwuZGVmYXVsdFZpZXc/bDpsLm93bmVyRG9jdW1lbnQsdGhpcy5tYWluRWxlbWVudD1udWxsLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLmxp'@;
put 'c3RlbmVyc0NvdW50PW5ldyBXZWFrU2V0LHRoaXMuY29udGFpbmVyPWx9dXNlU2Vjb25kYXJ5RWxlbWVudCgpe2NvbnN0IGw9ZnVuY3Rpb24geEJlKGMpe2NvbnN0IGw9U0QuZ2V0KGMpO2lmKGwpcmV0dXJuIGwucGFyZW50RWxlbWVudHx8Yy5hcHBlbmRDaGlsZChsKSxsO2NvbnN0IGQ9KGMu'@;
put 'ZGVmYXVsdFZpZXc/YzpjLm93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7cmV0dXJuIFNELnNldChjLGQpLGQuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsIiIpLGQuY2xhc3NOYW1lPSJIYW5kc29udGFibGVDb3B5UGFzdGUiLGQudGFiSW5kZXg9LTEsZC5h'@;
put 'dXRvY29tcGxldGU9Im9mZiIsZC53cmFwPSJoYXJkIixkLnZhbHVlPSIgIixjLmFwcGVuZENoaWxkKGQpLGR9KHRoaXMuY29udGFpbmVyKTt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLENhZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMp'@;
put 'KSx0aGlzLm1haW5FbGVtZW50PWx9c2V0Rm9jdXNhYmxlRWxlbWVudChsKXt0aGlzLmxpc3RlbmVyc0NvdW50LmhhcyhsKXx8KHRoaXMubGlzdGVuZXJzQ291bnQuYWRkKGwpLENhZSh0aGlzLmV2ZW50TWFuYWdlcixsLHRoaXMpKSx0aGlzLm1haW5FbGVtZW50PWx9Z2V0Rm9jdXNhYmxlRWxl'@;
put 'bWVudCgpe3JldHVybiB0aGlzLm1haW5FbGVtZW50fWZvY3VzKCl7dGhpcy5tYWluRWxlbWVudC52YWx1ZT0iICIsZjIoKXx8WmllKHRoaXMubWFpbkVsZW1lbnQpfX1HYSh0eix3MSk7Y29uc3QgQ0Q9bmV3IFdlYWtNYXAsbno9KGMsbCk9PmE9PmwucnVuTG9jYWxIb29rcyhjLGEpO2Z1bmN0'@;
put 'aW9uIENhZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsImNvcHkiLG56KCJjb3B5IixhKSksYy5hZGRFdmVudExpc3RlbmVyKGwsImN1dCIsbnooImN1dCIsYSkpLGMuYWRkRXZlbnRMaXN0ZW5lcihsLCJwYXN0ZSIsbnooInBhc3RlIixhKSl9Y29uc3QgU0Q9bmV3IFdlYWtNYXA7ZnVu'@;
put 'Y3Rpb24gU2FlKGMpe2lmKCEoYyBpbnN0YW5jZW9mIHR6KSlyZXR1cm47bGV0IGw9Q0QuZ2V0KGMuY29udGFpbmVyKTtpZihsPWlzTmFOKGwpPzA6bCxsPjAmJihsLT0xKSxmdW5jdGlvbiBTQmUoYyl7Yy5ldmVudE1hbmFnZXIuY2xlYXIoKX0oYyksbDw9MCl7bD0wO2NvbnN0IGE9U0QuZ2V0'@;
put 'KGMuY29udGFpbmVyKTthJiZhLnBhcmVudE5vZGUmJihhLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSksU0QuZGVsZXRlKGMuY29udGFpbmVyKSksYy5tYWluRWxlbWVudD1udWxsfUNELnNldChjLmNvbnRhaW5lcixsKX1mdW5jdGlvbiB4YWUoYyxsKXtrYWUoYyxsKSxsLmFkZChjKX1mdW5j'@;
put 'dGlvbiBSOShjLGwsYSl7a2FlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBrYWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHhEKGMs'@;
put 'bCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfWZ1bmN0aW9uIFAwKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIGtCZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMp'@;
put 'OmwudmFsdWV9KGMsRWFlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIE85KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gRUJlKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25s'@;
put 'eSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxFYWUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIEVhZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBs'@;
put 'LmdldChjKX12YXIgaG09bmV3IFdlYWtNYXAscno9bmV3IFdlYWtNYXAsQnc9bmV3IFdlYWtNYXAsaXo9bmV3IFdlYWtNYXAsb3o9bmV3IFdlYWtNYXAsWXc9bmV3IFdlYWtNYXAsa0Q9bmV3IFdlYWtTZXQsVGFlPW5ldyBXZWFrU2V0O2NsYXNzIFRCZXtjb25zdHJ1Y3RvcihsKXtsZXR7Y291'@;
put 'bnRSb3dzOmEsY291bnRDb2x1bW5zOmQscm93c0xpbWl0OmgsY29sdW1uc0xpbWl0OmYsY291bnRDb2x1bW5IZWFkZXJzOnZ9PWw7eGFlKHRoaXMsVGFlKSx4YWUodGhpcyxrRCksUjkodGhpcyxobSx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUjkodGhpcyxyeix7d3JpdGFibGU6ITAs'@;
put 'dmFsdWU6dm9pZCAwfSksUjkodGhpcyxCdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUjkodGhpcyxpeix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUjkodGhpcyxveix7d3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksUjkodGhpcyxZdyx7d3JpdGFibGU6ITAsdmFsdWU6dm9p'@;
put 'ZCAwfSksTzkodGhpcyxyeixhKSxPOSh0aGlzLEJ3LGQpLE85KHRoaXMsaXosaCksTzkodGhpcyxveixmKSxPOSh0aGlzLFl3LHYpfXNldFNlbGVjdGVkUmFuZ2UobCl7TzkodGhpcyxobSxsKX1nZXRDZWxsc1JhbmdlKCl7aWYoMD09PVAwKHRoaXMscnopLmNhbGwodGhpcyl8fDA9PT1QMCh0'@;
put 'aGlzLEJ3KS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e3JvdzpsLGNvbDphfT1QMCh0aGlzLGhtKS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZCxjb2w6aH09UDAodGhpcyxobSkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZj14RCh0aGlzLFRhZSxEQmUpLmNhbGwodGhpcyxsLGQpLHY9'@;
put 'eEQodGhpcyxrRCxzeikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixzdGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09UDAodGhpcyxCdykuY2FsbCh0'@;
put 'aGlzKXx8MD09PVAwKHRoaXMsWXcpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PVAwKHRoaXMsaG0pLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1QMCh0aGlzLGhtKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPXhEKHRoaXMsa0Qsc3opLmNhbGwodGhpcyxsLGEpO3Jl'@;
put 'dHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PVAwKHRoaXMsQncpLmNhbGwodGhpcyl8fDA9PT1QMCh0aGlzLFl3KS5jYWxsKHRoaXMpKXJldHVybiBudWxs'@;
put 'O2NvbnN0e2NvbDpsfT1QMCh0aGlzLGhtKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09UDAodGhpcyxobSkuZ2V0Qm90dG9tRW5kQ29ybmVyKCksZD14RCh0aGlzLGtELHN6KS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LVAwKHRoaXMs'@;
put 'WXcpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBzeihjLGwpe3JldHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrUDAodGhpcyxveikuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBEQmUoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1h'@;
put 'eChjK1AwKHRoaXMsaXopLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gRGFlKGMpe2NvbnN0IGw9W10sYT1bXTtyZXR1cm4gUm4oYyxkPT57TW8oTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksWT0+ey0xPT09bC5pbmRleE9mKFkp'@;
put 'JiZsLnB1c2goWSl9KSxNbyhNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29sLGQuZW5kQ29sKSxZPT57LTE9PT1hLmluZGV4T2YoWSkmJmEucHVzaChZKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIGU2KGMsbCxhKXtBYWUoYyxsKSxsLnNl'@;
put 'dChjLGEpfWZ1bmN0aW9uIEFhZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUDkoYyxsLGEpe3JldHVybiBsPWZ1bmN0aW9uIExCZShj'@;
put 'KXt2YXIgbD1mdW5jdGlvbiBJQmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fG51bGw9PT1jKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1'@;
put 'cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOlN0cmluZyhsKX0obCks'@;
put 'bCBpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBwZChjLGwpe3JldHVybiBmdW5jdGlvbiBPQmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTps'@;
put 'LnZhbHVlfShjLExhZShjLGwsImdldCIpKX1mdW5jdGlvbiBjcChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFBCZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkg'@;
put 'cHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsTGFlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBMYWUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5n'@;
put 'ZXQoYyl9YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weUxpbWl0IiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUNvcHlhYmxlUmFuZ2UiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ3V0IiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0'@;
put 'ZXIoImFmdGVyQ3V0IiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVBhc3RlIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyUGFzdGUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29weSIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVy'@;
put 'KCJhZnRlckNvcHkiKTtjb25zdCBFRD0iY29weVBhc3RlIixIQmU9WyJmcmFnbWVudFNlbGVjdGlvbiJdLElhZT1bJzxtZXRhIG5hbWU9ImdlbmVyYXRvciIgY29udGVudD0iSGFuZHNvbnRhYmxlIi8+JywnPHN0eWxlIHR5cGU9InRleHQvY3NzIj50ZHt3aGl0ZS1zcGFjZTpub3JtYWx9YnJ7'@;
put 'bXNvLWRhdGEtcGxhY2VtZW50OnNhbWUtY2VsbH08L3N0eWxlPiddLmpvaW4oIiIpO3ZhciBhej1uZXcgV2Vha01hcCxsej1uZXcgV2Vha01hcCxjej1uZXcgV2Vha01hcCxGOT1uZXcgV2Vha01hcCxURD1uZXcgV2Vha01hcCxERD1uZXcgV2Vha01hcCxIOT1uZXcgV2Vha01hcCxSYWU9bmV3'@;
put 'IFdlYWtTZXQ7Y2xhc3MgTkJlIGV4dGVuZHMgc2F7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEFCZShjLGwpe0FhZShjLGwpLGwuYWRkKGMpfSh0aGlzLFJhZSksUDkodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLFA5KHRoaXMsInJvd3NMaW1pdCIsMS8wKSxQ'@;
put 'OSh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxQOSh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkpLGU2KHRoaXMsYXose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksZTYodGhpcyxseix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxlNih0aGlzLGN6LHt3'@;
put 'cml0YWJsZTohMCx2YWx1ZTohMX0pLGU2KHRoaXMsRjkse3dyaXRhYmxlOiEwLHZhbHVlOiJjZWxscy1vbmx5In0pLGU2KHRoaXMsVEQse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksZTYodGhpcyxERCx7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxlNih0aGlzLEg5LHt3cml0YWJsZTohMCx2YWx1'@;
put 'ZTpuZXcgVEJlKHtjb3VudFJvd3M6KCk9PnRoaXMuaG90LmNvdW50Um93cygpLGNvdW50Q29sdW1uczooKT0+dGhpcy5ob3QuY291bnRDb2xzKCkscm93c0xpbWl0OigpPT50aGlzLnJvd3NMaW1pdCxjb2x1bW5zTGltaXQ6KCk9PnRoaXMuY29sdW1uc0xpbWl0LGNvdW50Q29sdW1uSGVhZGVy'@;
put 'czooKT0+dGhpcy5ob3Qudmlldy5nZXRDb2x1bW5IZWFkZXJzQ291bnQoKX0pfSksUDkodGhpcywiY29weWFibGVSYW5nZXMiLFtdKSxQOSh0aGlzLCJmb2N1c2FibGVFbGVtZW50Iix2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBFRH1zdGF0aWMgZ2V0IFNFVFRJTkdf'@;
put 'S0VZUygpe3JldHVybltFRCwuLi5IQmVdfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDgwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtFRF19ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjtjb25zdHtbRURdOmx9PXRo'@;
put 'aXMuaG90LmdldFNldHRpbmdzKCk7dmFyIGEsZDsib2JqZWN0Ij09dHlwZW9mIGwmJih0aGlzLnBhc3RlTW9kZT1udWxsIT09KGE9bC5wYXN0ZU1vZGUpJiZ2b2lkIDAhPT1hP2E6dGhpcy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4obC5yb3dzTGltaXQpP3RoaXMucm93c0xpbWl0'@;
put 'Omwucm93c0xpbWl0LHRoaXMuY29sdW1uc0xpbWl0PWlzTmFOKGwuY29sdW1uc0xpbWl0KT90aGlzLmNvbHVtbnNMaW1pdDpsLmNvbHVtbnNMaW1pdCxjcCh0aGlzLGF6LCEhbC5jb3B5Q29sdW1uSGVhZGVycyksY3AodGhpcyxseiwhIWwuY29weUNvbHVtbkdyb3VwSGVhZGVycyksY3AodGhp'@;
put 'cyxjeiwhIWwuY29weUNvbHVtbkhlYWRlcnNPbmx5KSx0aGlzLnVpQ29udGFpbmVyPW51bGwhPT0oZD1sLnVpQ29udGFpbmVyKSYmdm9pZCAwIT09ZD9kOnRoaXMudWlDb250YWluZXIpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixoPT50aGlzLm9uQWZ0'@;
put 'ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKGgpKSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VVcCIsKCk9PnRoaXMub25BZnRlck9uQ2VsbE1vdXNlVXAoKSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PnRoaXMub25BZnRlclNlbGVjdGlvbkVuZCgpKSx0'@;
put 'aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLCgpPT50aGlzLm9uQmVmb3JlS2V5RG93bigpKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9ZnVuY3Rpb24gQ0JlKGMpe2NvbnN0IGw9bmV3IHR6KGMpO2xldCBhPUNELmdldChjKTtyZXR1cm4gYT1pc05hTihhKT8wOmEsQ0Quc2V0KGMsYSsxKSxs'@;
put 'fSh0aGlzLnVpQ29udGFpbmVyKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuYWRkTG9jYWxIb29rKCJjb3B5IixoPT50aGlzLm9uQ29weShoKSkuYWRkTG9jYWxIb29rKCJjdXQiLGg9PnRoaXMub25DdXQoaCkpLmFkZExvY2FsSG9vaygicGFzdGUiLGg9PnRoaXMub25QYXN0ZShoKSksc3VwZXIu'@;
put 'ZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmZvY3VzYWJsZUVsZW1lbnQm'@;
put 'JlNhZSh0aGlzLmZvY3VzYWJsZUVsZW1lbnQpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1jb3B5KCl7Y3AodGhpcyxGOSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNlbGxzLW9ubHkiKSxjcCh0aGlzLFRELCEwKSx0aGlzLmdldE9yQ3Jl'@;
put 'YXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpfWNvcHlDZWxsc09ubHkoKXt0aGlzLmNvcHkoImNlbGxzLW9ubHkiKX1jb3B5Q29sdW1uSGVhZGVyc09ubHkoKXt0aGlzLmNv'@;
put 'cHkoImNvbHVtbi1oZWFkZXJzLW9ubHkiKX1jb3B5V2l0aEFsbENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiKX1jb3B5V2l0aENvbHVtbkhlYWRlcnMoKXt0aGlzLmNvcHkoIndpdGgtY29sdW1uLWhlYWRlcnMiKX1jdXQoKXtjcCh0aGlzLERE'@;
put 'LCEwKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXNhYmxlRWxlbWVudC5mb2N1cygpLHRoaXMuaG90LnJvb3REb2N1bWVudC5leGVjQ29tbWFuZCgiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBUdyh0aGlzLmdldFJhbmdlZERhdGEo'@;
put 'bCkpfWdldFJhbmdlZERhdGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09RGFlKGwpO3JldHVybiBSbihkLGY9Pntjb25zdCB2PVtdO1JuKGgsVD0+e3YucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKFQsZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsVCkpfSks'@;
put 'YS5wdXNoKHYpfSksYX1wYXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29u'@;
put 'c3QgZD1uZXcgTUJlO2wmJmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLmdldE9yQ3JlYXRlRm9jdXNhYmxlRWxlbWVudCgpLHRoaXMub25QYXN0ZShkKX1zZXRDb3B5YWJsZVRleHQo'@;
put 'KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO3BkKHRoaXMsSDkpLnNldFNlbGVjdGVkUmFuZ2UobCk7Y29uc3QgYT1uZXcgTWFwKFtbImhlYWRlcnMiLG51bGxdLFsiY2VsbHMiLG51bGxdXSk7ImNvbHVtbi1oZWFkZXJzLW9ubHkiPT09cGQo'@;
put 'dGhpcyxGOSk/YS5zZXQoImhlYWRlcnMiLHBkKHRoaXMsSDkpLmdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKSk6KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIj09PXBkKHRoaXMsRjkpP2Euc2V0KCJoZWFkZXJzIixwZCh0aGlzLEg5KS5nZXRNb3N0Qm90dG9tQ29sdW1uSGVhZGVyc1Jh'@;
put 'bmdlKCkpOiJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIj09PXBkKHRoaXMsRjkpJiZhLnNldCgiaGVhZGVycyIscGQodGhpcyxIOSkuZ2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCkpLGEuc2V0KCJjZWxscyIscGQodGhpcyxIOSkuZ2V0Q2VsbHNSYW5nZSgpKSksdGhpcy5jb3B5YWJsZVJh'@;
put 'bmdlcz1BcnJheS5mcm9tKGEudmFsdWVzKCkpLmZpbHRlcihoPT5udWxsIT09aCkubWFwKGg9PntsZXR7c3RhcnRSb3c6ZixzdGFydENvbDp2LGVuZFJvdzpULGVuZENvbDpZfT1oO3JldHVybntzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93OlQsZW5kQ29sOll9fSksdGhpcy5jb3B5YWJs'@;
put 'ZVJhbmdlcz10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsdGhpcy5jb3B5YWJsZVJhbmdlcyk7Y29uc3QgZD1hLmdldCgiY2VsbHMiKTtpZihudWxsIT09ZCYmZC5pc1JhbmdlVHJpbW1lZCl7Y29uc3R7c3RhcnRSb3c6aCxzdGFydENvbDpmLGVuZFJvdzp2LGVuZENv'@;
put 'bDpUfT1kO3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvcHlMaW1pdCIsdi1oKzEsVC1mKzEsdGhpcy5yb3dzTGltaXQsdGhpcy5jb2x1bW5zTGltaXQpfX1nZXRPckNyZWF0ZUZvY3VzYWJsZUVsZW1lbnQoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0'@;
put 'b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuVEVYVEFSRUE7YT90aGlzLmZvY3VzYWJsZUVsZW1lbnQuc2V0Rm9jdXNhYmxlRWxlbWVudChhKTp0aGlzLmZvY3VzYWJsZUVsZW1lbnQudXNlU2Vjb25kYXJ5RWxlbWVudCgpfWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0o'@;
put 'bD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5n'@;
put 'ZUxhc3QoKTtpZighbC5sZW5ndGgpcmV0dXJuO2NvbnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6dixjb2w6VH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6WSxjb2w6cmV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7bGV0IGZlPXYsX2U9VCxrZT12LFdlPVQ7Zm9y'@;
put 'KDtmLmxlbmd0aDxkfHxmZTw9WTspe2NvbnN0e3NraXBSb3dPblBhc3RlOkplLHZpc3VhbFJvdzp0dH09dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoZmUsVCk7aWYoZmU9dHQrMSwhMD09PUplKWNvbnRpbnVlO2tlPXR0LF9lPVQ7Y29uc3QgeXQ9W10sd3Q9Zi5sZW5ndGglZDtmb3IoO3l0Lmxlbmd0'@;
put 'aDxofHxfZTw9cmU7KXtjb25zdHtza2lwQ29sdW1uT25QYXN0ZTpMdCx2aXN1YWxDb2w6b259PXRoaXMuaG90LmdldENlbGxNZXRhKHYsX2UpOyhfZT1vbisxLCEwIT09THQpJiYoV2U9b24seXQucHVzaChsW3d0XVt5dC5sZW5ndGglaF0pKX1mLnB1c2goeXQpfXJldHVybiB0aGlzLmhvdC5w'@;
put 'b3B1bGF0ZUZyb21BcnJheSh2LFQsZix2b2lkIDAsdm9pZCAwLCJDb3B5UGFzdGUucGFzdGUiLHRoaXMucGFzdGVNb2RlKSxbdixULGtlLFdlXX1vbkNvcHkobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCkmJiFwZCh0aGlzLFREKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0'@;
put 'aGlzLnNldENvcHlhYmxlVGV4dCgpLGNwKHRoaXMsVEQsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpLGQ9ZnVuY3Rpb24gUkJlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRl'@;
put 'IGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBhfSh0aGlzLFJhZSxWQmUpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpKXtjb25zdCBmPVR3KGEpO2lmKGwmJmwuY2xp'@;
put 'cGJvYXJkRGF0YSl7Y29uc3Qgdj11aihhKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsZiksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW0lhZSx2XS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290'@;
put 'V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsZik7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsYSx0aGlzLmNvcHlhYmxlUmFuZ2VzLGQpfWNwKHRoaXMsRjksImNlbGxzLW9ubHkiKSxsLnByZXZlbnREZWZhdWx0KCl9b25DdXQobCl7aWYoIXRoaXMuaG90LmlzTGlz'@;
put 'dGVuaW5nKCkmJiFwZCh0aGlzLEREKXx8dGhpcy5pc0VkaXRvck9wZW5lZCgpKXJldHVybjt0aGlzLnNldENvcHlhYmxlVGV4dCgpLGNwKHRoaXMsREQsITEpO2NvbnN0IGE9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5nZXMpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZv'@;
put 'cmVDdXQiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcykpe2NvbnN0IGg9VHcoYSk7aWYobCYmbC5jbGlwYm9hcmREYXRhKXtjb25zdCBmPXVqKGEpO2wuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixoKSxsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixbSWFlLGZd'@;
put 'LmpvaW4oIiIpKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnRoaXMuaG90LnJvb3RXaW5kb3cuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJUZXh0IixoKTt0aGlzLmhvdC5lbXB0eVNlbGVjdGVkQ2VsbHMoIkNvcHlQYXN0ZS5jdXQiKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJD'@;
put 'dXQiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9bC5wcmV2ZW50RGVmYXVsdCgpfW9uUGFzdGUobCl7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKSlyZXR1cm47bGV0IGE7aWYobCYmbC5wcmV2ZW50RGVmYXVsdCYmbC5wcmV2ZW50RGVmYXVsdCgpLGwm'@;
put 'JnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCBUPWdUKGwuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L2h0bWwiKSx7QUREX1RBR1M6WyJtZXRhIl0sQUREX0FUVFI6WyJjb250ZW50Il0sRk9SQ0VfQk9EWTohMH0pO2E9VCYmLyg8dGFibGUpfCg8VEFCTEUpL2cudGVzdChU'@;
put 'KT9jb2UoVCx0aGlzLmhvdC5yb290RG9jdW1lbnQpLmRhdGE6bC5jbGlwYm9hcmREYXRhLmdldERhdGEoInRleHQvcGxhaW4iKX1lbHNlIHR5cGVvZiBDbGlwYm9hcmRFdmVudD4idSImJnR5cGVvZiB0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGE8InUiJiYoYT10aGlzLmhvdC5y'@;
put 'b290V2luZG93LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgiVGV4dCIpKTtpZigic3RyaW5nIj09dHlwZW9mIGEmJihhPWZ1bmN0aW9uIGhOZShjKXtjb25zdCBsPVtbIiJdXTtpZigwPT09Yy5sZW5ndGgpcmV0dXJuIGw7bGV0IGgsYT0wLGQ9MDtmb3IoO2MubGVuZ3RoPjAmJmghPT1jLmxlbmd0'@;
put 'aDspaWYoaD1jLmxlbmd0aCxjLm1hdGNoKHZzZSkpYz1jLnJlcGxhY2UodnNlLCIiKSxhKz0xLGxbZF1bYV09IiI7ZWxzZSBpZihjLm1hdGNoKF9zZSkpYz1jLnJlcGxhY2UoX3NlLCIiKSxhPTAsZCs9MSxsW2RdPVsiIl07ZWxzZXtsZXQgZj0iIjtpZihjLnN0YXJ0c1dpdGgoJyInKSl7bGV0'@;
put 'IHY9MCxUPSEwO2Zvcig7VDspe2NvbnN0IFk9Yy5zbGljZSgwLDEpOyciJz09PVkmJih2Kz0xKSxmKz1ZLCgwPT09KGM9Yy5zbGljZSgxKSkubGVuZ3RofHxjLm1hdGNoKC9eW1x0XHJcbl0vKSYmdiUyPT0wKSYmKFQ9ITEpfWY9Zi5yZXBsYWNlKC9eIi8sIiIpLnJlcGxhY2UoLyIkLywiIiku'@;
put 'cmVwbGFjZSgvWyJdKi9nLFk9Pm5ldyBBcnJheShNYXRoLmZsb29yKFkubGVuZ3RoLzIpKS5maWxsKCciJykuam9pbigiIikpfWVsc2V7Y29uc3Qgdj1jLm1hdGNoKGROZSk7Zj12P3ZbMF06IiIsYz1jLnNsaWNlKGYubGVuZ3RoKX1sW2RdW2FdPWZ9cmV0dXJuIGx9KGEpKSxhJiYwPT09YS5s'@;
put 'ZW5ndGh8fCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVBhc3RlIixhLHRoaXMuY29weWFibGVSYW5nZXMpKXJldHVybjtjb25zdFtkLGgsZix2XT10aGlzLnBvcHVsYXRlVmFsdWVzKGEpO3RoaXMuaG90LnNlbGVjdENlbGwoZCxoLE1hdGgubWluKHRoaXMuaG90LmNvdW50Um93cygp'@;
put 'LTEsZiksTWF0aC5taW4odGhpcy5ob3QuY291bnRDb2xzKCktMSx2KSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUGFzdGUiLGEsdGhpcy5jb3B5YWJsZVJhbmdlcyl9b25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMobCl7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxm'@;
put 'dW5jdGlvbiBnQmUoYyl7cmV0dXJue2tleToiY29weSIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoY0IpfSxjYWxsYmFjaygpe2MuY29weUNlbGxzT25seSgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSly'@;
put 'ZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLHBkKHRoaXMsYXopJiZsLml0ZW1zLnB1c2goZnVuY3Rpb24geUJlKGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2Nv'@;
put 'bnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9NYXRoLm1pbihsLmdldFdpZHRoKCktMSwxKTowO3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodUIsYSl9LGNhbGxiYWNrKCl7Yy5jb3B5V2l0aENvbHVtbkhlYWRlcnMoKX0sZGlzYWJsZWQoKXtpZighdGhpcy5o'@;
put 'YXNDb2xIZWFkZXJzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxwZCh0aGlzLGx6KSYmbC5pdGVtcy5wdXNoKGZ1bmN0aW9uIHZCZShjKXtyZXR1cm57a2V5OiJjb3B5X3dpdGhfY29sdW1uX2dy'@;
put 'b3VwX2hlYWRlcnMiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGRCLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJz'@;
put 'KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkKCk7cmV0dXJuIWx8fGwubGVuZ3RoPjF9LGhpZGRlbjohMX19KHRoaXMpKSxwZCh0aGlzLGN6KSYm'@;
put 'bC5pdGVtcy5wdXNoKGZ1bmN0aW9uIF9CZShjKXtyZXR1cm57a2V5OiJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWw/TWF0aC5taW4obC5nZXRXaWR0aCgpLTEsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xh'@;
put 'dGVkUGhyYXNlKGhCLGEpfSxjYWxsYmFjaygpe2MuY29weUNvbHVtbkhlYWRlcnNPbmx5KCl9LGRpc2FibGVkKCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpKXJldHVybiEwO2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFsfHxsLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlz'@;
put 'KSksbC5pdGVtcy5wdXNoKGZ1bmN0aW9uIGJCZShjKXtyZXR1cm57a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGZCKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENv'@;
put 'bHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hbHx8bC5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpfW9uQWZ0ZXJPbkNlbGxNb3VzZVVwKCl7IXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8dGhpcy5ob3QuZ2V0'@;
put 'U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfW9uQWZ0ZXJTZWxlY3Rpb25FbmQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCh0aGlzLmdldE9yQ3JlYXRlRm9jdXNh'@;
put 'YmxlRWxlbWVudCgpLCghdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5mcmFnbWVudFNlbGVjdGlvbnx8dGhpcy5mb2N1c2FibGVFbGVtZW50LmdldEZvY3VzYWJsZUVsZW1lbnQoKT09PXRoaXMuaG90LnJvb3REb2N1bWVudC5hY3RpdmVFbGVtZW50fHwhWWllKCkpJiYodGhpcy5zZXRDb3B5YWJs'@;
put 'ZVRleHQoKSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQuZm9jdXMoKSkpfW9uQmVmb3JlS2V5RG93bigpe2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsYT10aGlz'@;
put 'LmhvdC5nZXRBY3RpdmVFZGl0b3IoKTshYXx8bCE9PXRoaXMuZm9jdXNhYmxlRWxlbWVudC5nZXRGb2N1c2FibGVFbGVtZW50KCkmJmwhPT1hLnNlbGVjdHx8KHRoaXMuZ2V0T3JDcmVhdGVGb2N1c2FibGVFbGVtZW50KCksdGhpcy5mb2N1c2FibGVFbGVtZW50LmZvY3VzKCkpfWRlc3Ryb3ko'@;
put 'KXt0aGlzLmZvY3VzYWJsZUVsZW1lbnQmJihTYWUodGhpcy5mb2N1c2FibGVFbGVtZW50KSx0aGlzLmZvY3VzYWJsZUVsZW1lbnQ9bnVsbCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBWQmUoYyl7Y29uc3R7cm93czpsfT1EYWUoYyk7bGV0IGE9MDtmb3IobGV0IGQ9MDtkPGwubGVuZ3Ro'@;
put 'JiYhKGxbZF0+PTApO2QrKylhKz0xO3JldHVybntjb2x1bW5IZWFkZXJzQ291bnQ6YX19ZnVuY3Rpb24gT2FlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gdXooYyl7dmFyIGwsYTtyZXR1cm4oZW8oYy5zdGFydCl8fGVvKGMubGVmdCkpJiYoYy5zdGFydD1u'@;
put 'dWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChlbyhjLmVuZCl8fGVvKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJpZ2h0LGN9ZnVuY3Rpb24gVXcoYyl7cmV0dXJu'@;
put 'IGVvKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLGVvKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gZHooYyxsKXtyZXR1cm57aWQ6T2FlKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxlOiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6'@;
put 'ITB9LGJvdHRvbTp7aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uIGRwKGMsbCl7bGV0IGE9ITE7cmV0dXJuIFJuKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8ZjwwKXJldHVybjtjb25zdCB2PWMuZ2V0Q2Vs'@;
put 'bE1ldGEoaCxmKS5ib3JkZXJzO2lmKHYpe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFxbCh2W2xdLCJoaWRlIil8fCExPT09dltsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiBBRChjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtj'@;
put 'fWB9Y29uc3QgVUJlPW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gWkJlKGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9VUJlLmdldChjKSkmJnZvaWQgMCE9PWw/bDpjfWZ1bmN0aW9uIFdCZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOnRvcCIs'@;
put 'bmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShMQik7cmV0dXJuIGRwKHRoaXMsInRvcCIpJiYobD1BRChsKSksbH0sY2FsbGJhY2sobCxhKXtjb25zdCBkPWRwKHRoaXMsInRvcCIpO2MucHJlcGFyZUJvcmRlcihhLCJ0b3AiLGQpfX19ZnVuY3Rpb24gR0JlKGMpe2NvbnN0'@;
put 'IGw9Yy5ob3QuaXNSdGwoKT8ic3RhcnQiOiJlbmQiO3JldHVybntrZXk6ImJvcmRlcnM6cmlnaHQiLG5hbWUoKXtsZXQgYT10aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSUIpO3JldHVybiBkcCh0aGlzLGwpJiYoYT1BRChhKSksYX0sY2FsbGJhY2soYSxkKXtjb25zdCBoPWRwKHRoaXMsbCk7'@;
put 'Yy5wcmVwYXJlQm9yZGVyKGQsbCxoKX19fWZ1bmN0aW9uICRCZShjKXtyZXR1cm57a2V5OiJib3JkZXJzOmJvdHRvbSIsbmFtZSgpe2xldCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShSQik7cmV0dXJuIGRwKHRoaXMsImJvdHRvbSIpJiYobD1BRChsKSksbH0sY2FsbGJhY2sobCxhKXtj'@;
put 'b25zdCBkPWRwKHRoaXMsImJvdHRvbSIpO2MucHJlcGFyZUJvcmRlcihhLCJib3R0b20iLGQpfX19ZnVuY3Rpb24gcUJlKGMpe2NvbnN0IGw9Yy5ob3QuaXNSdGwoKT8iZW5kIjoic3RhcnQiO3JldHVybntrZXk6ImJvcmRlcnM6bGVmdCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRl'@;
put 'ZFBocmFzZShPQik7cmV0dXJuIGRwKHRoaXMsbCkmJihhPUFEKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9ZHAodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gS0JlKGMpe3JldHVybntrZXk6ImJvcmRlcnM6bm9fYm9yZGVycyIsbmFtZSgpe3JldHVybiB0'@;
put 'aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUEIpfSxjYWxsYmFjayhsLGEpe2MucHJlcGFyZUJvcmRlcihhLCJub0JvcmRlcnMiKX0sZGlzYWJsZWQoKXtyZXR1cm4hZHAodGhpcyl9fX1jb25zdCBMRD0iY3VzdG9tQm9yZGVycyI7Y2xhc3MgdFllIGV4dGVuZHMgc2F7Y29uc3RydWN0b3IoKXtz'@;
put 'dXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFhCZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gSkJlKGMpe3ZhciBsPWZ1bmN0aW9uIFFCZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg'@;
put 'MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt'@;
put 'YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJz'@;
put 'YXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gTER9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0xEXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8'@;
put 'fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsbD0+dGhpcy5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKSksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+dGhpcy5vbkFmdGVySW5pdCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJs'@;
put 'ZVBsdWdpbigpe3RoaXMuaGlkZUJvcmRlcnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmNoYW5nZUJvcmRlclNldHRpbmdzKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9c2V0Qm9yZGVy'@;
put 'cyhsLGEpe2xldCBkPVsidG9wIiwiYm90dG9tIiwic3RhcnQiLCJlbmQiXSxoPW51bGw7YSYmKHRoaXMuY2hlY2tTZXR0aW5nc0NvaGVzaW9uKFthXSksZD1PYmplY3Qua2V5cyhhKSxoPXV6KGEpKTtjb25zdCB2PUV3KE05KGwpKTtSbihsLFQ9Pntjb25zdFtZLHJlLGZlLF9lXT12KFQpO2Zv'@;
put 'cihsZXQga2U9WTtrZTw9ZmU7a2UrPTEpZm9yKGxldCBXZT1yZTtXZTw9X2U7V2UrPTEpUm4oZCxKZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChrZSxXZSxoLFpCZShKZSkpfSl9KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfWdldEJvcmRlcnMobCl7aWYoIUFycmF5Lmlz'@;
put 'QXJyYXkobCkpcmV0dXJuIHRoaXMuc2F2ZWRCb3JkZXJzO2NvbnN0IGQ9RXcoTTkobCkpLGg9W107cmV0dXJuIFJuKGwsZj0+e2NvbnN0W3YsVCxZLHJlXT1kKGYpO2ZvcihsZXQgZmU9djtmZTw9WTtmZSs9MSlmb3IobGV0IF9lPVQ7X2U8PXJlO19lKz0xKVJuKHRoaXMuc2F2ZWRCb3JkZXJz'@;
put 'LGtlPT57a2Uucm93PT09ZmUmJmtlLmNvbD09PV9lJiZoLnB1c2goVXcoa2UpKX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KFJuKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlz'@;
put 'LmNsZWFyTnVsbENlbGxSYW5nZSgpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZl'@;
put 'ZEJvcmRlcnMucHVzaChsKTtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9t'@;
put 'U2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+PXYpcmV0dXJuO2xldCBUPWR6KGwsYSk7'@;
put 'ZCYmKFQ9ZnVuY3Rpb24gQkJlKGMsbCl7cmV0dXJuIHFsKGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxxbChsLCJ0b3AiKSYmZW8obC50b3ApJiYobC50b3A/KHZzKGwudG9wKXx8KGwudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToo'@;
put 'bC50b3A9e2hpZGU6ITB9LGMudG9wPWwudG9wKSkscWwobCwiYm90dG9tIikmJmVvKGwuYm90dG9tKSYmKGwuYm90dG9tPyh2cyhsLmJvdHRvbSl8fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRvbT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRv'@;
put 'bT1sLmJvdHRvbSkpLHFsKGwsInN0YXJ0IikmJmVvKGwuc3RhcnQpJiYobC5zdGFydD8odnMobC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hpZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLHFsKGwsImVuZCIpJiZl'@;
put 'byhsLmVuZCkmJihsLmVuZD8odnMobC5lbmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlkZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShULGQpLFJuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxZPT57'@;
put 'aWYoVC5pZD09PVkuc2V0dGluZ3MuaWQpcmV0dXJuIE9iamVjdC5hc3NpZ24oWS5zZXR0aW5ncyxkKSxULmlkPVkuc2V0dGluZ3MuaWQsVC50b3A9WS5zZXR0aW5ncy50b3AsVC5ib3R0b209WS5zZXR0aW5ncy5ib3R0b20sVC5zdGFydD1ZLnNldHRpbmdzLnN0YXJ0LFQuZW5kPVkuc2V0dGlu'@;
put 'Z3MuZW5kLCExfSkpLHRoaXMuaG90LnNldENlbGxNZXRhKGwsYSwiYm9yZGVycyIsVXcoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQsaCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5j'@;
put 'b3VudFJvd3MoKS0xKSxoPU1hdGgubWluKGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpO01vKGwuZnJvbS5yb3csZCxmPT57TW8obC5mcm9tLmNvbCxoLHY9Pntjb25zdCBUPWR6KGYsdik7bGV0IFk9MDtmPT09bC5mcm9tLnJvdyYmcWwoYSwidG9wIikmJihZKz0xLFQudG9wPWEu'@;
put 'dG9wKSxmPT09bC50by5yb3cmJnFsKGEsImJvdHRvbSIpJiYoWSs9MSxULmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJnFsKGEsInN0YXJ0IikmJihZKz0xLFQuc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZxbChhLCJlbmQiKSYmKFkrPTEsVC5lbmQ9YS5lbmQpLFk+MCYm'@;
put 'KHRoaXMuaG90LnNldENlbGxNZXRhKGYsdiwiYm9yZGVycyIsVXcoVCkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKFQpKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9T2FlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2Vs'@;
put 'ZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5jbGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/'@;
put 'dXooZik6ZHoobCxhKSxoPyhmW2RdPXtoaWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiks'@;
put 'dGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixVdyhmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Qu'@;
put 'c2V0Q2VsbE1ldGEobCxhLCJib3JkZXJzIixVdyhmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe1JuKGwsaD0+e2xldHtzdGFydDpmLGVuZDp2fT1oO2lmKGYucm93PT09di5yb3cmJmYuY29sPT09di5jb2wpIm5vQm9yZGVycyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNv'@;
put 'bCk6dGhpcy5zZXRCb3JkZXIoZi5yb3csZi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6TW8oZi5jb2wsdi5jb2wsVD0+e01vKGYucm93LHYucm93LFk9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoWSxUKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOk1vKGYuY29sLHYuY29s'@;
put 'LFQ9Pnt0aGlzLnNldEJvcmRlcihmLnJvdyxULGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6TW8oZi5jb2wsdi5jb2wsVD0+e3RoaXMuc2V0Qm9yZGVyKHYucm93LFQsYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOk1vKGYucm93LHYucm93LFQ9Pnt0aGlzLnNldEJvcmRlcihULGYuY29sLGEs'@;
put 'ZCl9KTticmVhaztjYXNlImVuZCI6TW8oZi5yb3csdi5yb3csVD0+e3RoaXMuc2V0Qm9yZGVyKFQsdi5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMobCl7Um4obCxhPT57Y29uc3QgZD11eihhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdl'@;
put 'KGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJlQm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIHNjKFthLGQsaCxmXSwoVCxZKT0+e2xldCByZT1UO3JldHVybiBZJiZZLmhp'@;
put 'ZGUmJihyZSs9MSkscmV9LDApfWNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPV9zKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlv'@;
put 'bi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9uc1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe1JuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9u'@;
put 'LmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25zW2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe1JuKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21T'@;
put 'ZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9X3ModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9y'@;
put 'ZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpSbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNo'@;
put 'ZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIFJuKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIHlzKGYuaW5zdGFuY2VCb3JkZXJzLHY9'@;
put 'Pnt2LnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wpLGY9ITApOlJuKHRo'@;
put 'aXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZ5cyh2Lmluc3RhbmNlQm9yZGVycyxUPT57VC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSks'@;
put 'Zj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbTERdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9bDAobCk7dGhpcy5jaGVja1NldHRpbmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1h'@;
put 'KSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihsKXtjb25zdCBhPWZ1bmN0aW9uIFlCZShjKXtyZXR1cm4gYy5zb21lKGw9PmVvKGwubGVm'@;
put 'dCl8fGVvKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiB6QmUoYyl7cmV0dXJuIGMuc29tZShsPT5lbyhsLnN0YXJ0KXx8ZW8obC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAibGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3Qg'@;
put 'YmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8icmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNl'@;
put 'IHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0xEXSYmbC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSx7a2V5OiJib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJh'@;
put 'bnNsYXRlZFBocmFzZShBQil9LGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbV0JlKHRoaXMpLEdCZSh0aGlzKSwkQmUodGhpcykscUJlKHRoaXMpLEtCZSh0aGlzKV19fSl9b25BZnRlckluaXQoKXt0aGlzLmNo'@;
put 'YW5nZUJvcmRlclNldHRpbmdzKCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgUGFlPSJkcmFnVG9TY3JvbGwiO2NsYXNzIHJZZSBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBQYWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g'@;
put 'MTAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLmJvdW5kYXJpZXM9bnVsbCx0aGlzLmNhbGxiYWNrPW51bGwsdGhpcy5saXN0ZW5pbmc9ITF9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1BhZV19'@;
put 'ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbE1vdXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+dGhpcy5zZXR1cExpc3RlbmluZyhsKSksdGhp'@;
put 'cy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5k'@;
put 'aXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcyhsKXt0aGlzLmJvdW5kYXJpZXM9bH1zZXRDYWxsYmFjayhsKXt0aGlzLmNhbGxiYWNrPWx9Y2hlY2sobCxhKXtsZXQgZD0wLGg9MDthPHRoaXMuYm91bmRhcmllcy50b3A/aD1hLXRoaXMuYm91bmRhcmllcy50b3A6YT50aGlzLmJvdW5kYXJp'@;
put 'ZXMuYm90dG9tJiYoaD1hLXRoaXMuYm91bmRhcmllcy5ib3R0b20pLGw8dGhpcy5ib3VuZGFyaWVzLmxlZnQ/ZD1sLXRoaXMuYm91bmRhcmllcy5sZWZ0Omw+dGhpcy5ib3VuZGFyaWVzLnJpZ2h0JiYoZD1sLXRoaXMuYm91bmRhcmllcy5yaWdodCksdGhpcy5jYWxsYmFjayhkLGgpfWxpc3Rl'@;
put 'bigpe3RoaXMubGlzdGVuaW5nPSEwfXVubGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITF9aXNMaXN0ZW5pbmcoKXtyZXR1cm4gdGhpcy5saXN0ZW5pbmd9cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtyb290V2luZG93Omx9PXRoaXMuaG90O2xldCBhPWw7Zm9yKDthOyl0aGlzLmV2ZW50TWFuYWdl'@;
put 'ci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsImNvbnRleHRtZW51IiwoKT0+dGhpcy51bmxpc3RlbigpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEuZG9jdW1lbnQsIm1vdXNldXAiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2'@;
put 'ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQpKSxhPXN3KGEpfXVucmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfXNldHVwTGlzdGVuaW5nKGwpe2lmKGltKGwpKXJldHVybjtjb25zdCBhPXRoaXMuaG90LnZp'@;
put 'ZXcuX3d0Lnd0VGFibGUuaG9sZGVyO2EhPT10aGlzLmhvdC5yb290V2luZG93JiYodGhpcy5zZXRCb3VuZGFyaWVzKGEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuc2V0Q2FsbGJhY2soKGQsaCk9PntkPDA/YS5zY3JvbGxMZWZ0LT01MDpkPjAmJihhLnNjcm9sbExlZnQrPTUwKSxo'@;
put 'PDA/YS5zY3JvbGxUb3AtPTIwOmg+MCYmKGEuc2Nyb2xsVG9wKz0yMCl9KSx0aGlzLmxpc3RlbigpKX1vbk1vdXNlTW92ZShsKXt0aGlzLmlzTGlzdGVuaW5nKCkmJnRoaXMuY2hlY2sobC5jbGllbnRYLGwuY2xpZW50WSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19YW8uZ2V0U2luZ2xl'@;
put 'dG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxhby5nZXRTaW5n'@;
put 'bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IGh6PSJkcm9wZG93bk1lbnUiLGZ6PSJjaGFuZ2VUeXBlIjtsZXQgb1llPSgoKT0+e2NsYXNzIGMgZXh0ZW5k'@;
put 'cyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gaHp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3Jl'@;
put 'dHVybltGdyxIdyxNcyxWdyxNcyxtRCxNcyxOdyxNcyxjaF19Y29uc3RydWN0b3IoYSl7c3VwZXIoYSksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGpsKHRoaXMpLHRoaXMuY29tbWFuZEV4ZWN1dG9yPW5ldyBnYWUodGhpcy5ob3QpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGwsdGhpcy5tZW51PW51'@;
put 'bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChkLGgpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoZCxoKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbaHpdfWVuYWJsZVBsdWdpbigpe3ZhciBhPXRoaXM7aWYodGhpcy5lbmFibGVk'@;
put 'KXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgYmFlKHRoaXMuaG90LGMuREVGQVVMVF9JVEVNUyk7Y29uc3QgZD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW2h6XSxoPXtpdGVtczp0aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhkKX07dGhpcy5yZWdpc3RlckV2ZW50cygpLCJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBkLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhkLmNhbGxiYWNrKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlzLmNhbGxPblBsdWdpbnNSZWFkeSgoKT0+e3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRyb3Bkb3duTWVudURlZmF1'@;
put 'bHRPcHRpb25zIixoKSx0aGlzLml0ZW1zRmFjdG9yeS5zZXRQcmVkZWZpbmVkSXRlbXMoaC5pdGVtcyk7Y29uc3QgZj10aGlzLml0ZW1zRmFjdG9yeS5nZXRJdGVtcyhkKTt0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW5ldyBleih0aGlzLmhvdCx7Y2xhc3NOYW1l'@;
put 'OiJodERyb3Bkb3duTWVudSIsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOmQudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5fSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixmKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGYp'@;
put 'LHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT50aGlzLm9uTWVudUJlZm9yZU9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+dGhpcy5vbk1lbnVBZnRlck9wZW4oKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIs'@;
put 'KCk9PnRoaXMub25NZW51QWZ0ZXJDbG9zZSgpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHY9YXJndW1lbnRzLmxlbmd0aCxUPW5ldyBBcnJheSh2KSxZPTA7WTx2O1krKylUW1ldPWFyZ3VtZW50c1tZXTtyZXR1cm4gYS5leGVj'@;
put 'dXRlQ29tbWFuZC5jYWxsKGEsLi4uVCl9KSxSbihmLHY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZCh2LmtleSx2KSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2Fi'@;
put 'bGVQbHVnaW4oKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQsImNsaWNrIixhPT50aGlz'@;
put 'Lm9uVGFibGVDbGljayhhKSl9b3BlbihhKXt0aGlzLm1lbnUmJih0aGlzLm1lbnUub3BlbigpLGEud2lkdGgmJnRoaXMubWVudS5zZXRPZmZzZXQoImxlZnQiLGEud2lkdGgpLHRoaXMubWVudS5zZXRQb3NpdGlvbihhKSl9Y2xvc2UoKXt0aGlzLm1lbnUmJnRoaXMubWVudS5jbG9zZSgpfWV4'@;
put 'ZWN1dGVDb21tYW5kKGEpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQ+MT9kLTE6MCksZj0xO2Y8ZDtmKyspaFtmLTFdPWFyZ3VtZW50c1tmXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5leGVjdXRlKGEsLi4uaCl9c2V0TGlzdGVuaW5nKCl7bGV0IGE9IShhcmd1bWVu'@;
put 'dHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGE/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUudW5saXN0ZW4oKSl9b25UYWJsZUNsaWNrKGEpe2lmKGEuc3RvcFByb3BhZ2F0'@;
put 'aW9uKCksUW8oYS50YXJnZXQsZnopJiYhdGhpcy5tZW51LmlzT3BlbmVkKCkpe2xldCBkPTAsaD0wO2lmKHRoaXMuaG90LnJvb3REb2N1bWVudCE9PXRoaXMubWVudS5jb250YWluZXIub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OnZ9PXRoaXMuaG90LnJvb3RXaW5kb3cse3Rv'@;
put 'cDpULGxlZnQ6WX09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkPVQsaD1ZfWNvbnN0IGY9YS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5vcGVuKHtsZWZ0OmYubGVmdCtoLHRvcDpmLnRvcCthLnRhcmdldC5vZmZzZXRIZWlnaHQrMytkLHdpZHRoOmYud2lkdGgsaGVp'@;
put 'Z2h0OmYuaGVpZ2h0fSl9fW9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKXtjb25zdCBoPWQucGFyZW50Tm9kZTtpZighaClyZXR1cm47Y29uc3QgZj1oLnBhcmVudE5vZGUuY2hpbGROb2Rlcyx2PUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZixoKTtpZihhPDB8fHYhPT1mLmxlbmd0aC0x'@;
put 'KXJldHVybjtjb25zdCBUPWQucXVlcnlTZWxlY3RvcihgLiR7Znp9YCk7aWYodGhpcy5lbmFibGVkJiZUKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKFQmJlQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChUKSk7Y29uc3QgWT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRl'@;
put 'RWxlbWVudCgiYnV0dG9uIik7WS5jbGFzc05hbWU9ZnosWS50eXBlPSJidXR0b24iLFkub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxkLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKFksZC5maXJzdENoaWxkLmZpcnN0Q2hpbGQpfW9uTWVudUJlZm9yZU9wZW4oKXt0aGlzLmhvdC5ydW5I'@;
put 'b29rcygiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJPcGVuKCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51U2hvdyIsdGhpcyl9b25NZW51QWZ0ZXJDbG9zZSgpe3RoaXMuaG90Lmxpc3RlbigpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckRy'@;
put 'b3Bkb3duTWVudUhpZGUiLHRoaXMpfWRlc3Ryb3koKXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19cmV0dXJuIGMuU0VQQVJBVE9SPXtuYW1lOk1zfSxjfSkoKTtjb25zdCBhWWU9Y2xhc3Mgc1lle2NvbnN0cnVjdG9yKGwpe3Ro'@;
put 'aXMuaG90PWwsdGhpcy5vcHRpb25zPXt9fXNldE9wdGlvbnMobCl7dGhpcy5vcHRpb25zPWx9Z2V0RGF0YSgpe2NvbnN0e3N0YXJ0Um93Omwsc3RhcnRDb2w6YSxlbmRSb3c6ZCxlbmRDb2w6aH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksZj10aGlzLm9wdGlvbnMsdj1bXTtyZXR1cm4gTW8obCxk'@;
put 'LFQ9Pntjb25zdCBZPVtdOyFmLmV4cG9ydEhpZGRlblJvd3MmJnRoaXMuX2lzSGlkZGVuUm93KFQpfHwoTW8oYSxoLHJlPT57IWYuZXhwb3J0SGlkZGVuQ29sdW1ucyYmdGhpcy5faXNIaWRkZW5Db2x1bW4ocmUpfHxZLnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChULHJlKSl9KSx2LnB1'@;
put 'c2goWSkpfSksdn1nZXRSb3dIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLm9wdGlvbnMucm93SGVhZGVycyl7Y29uc3R7c3RhcnRSb3c6YSxlbmRSb3c6ZH09dGhpcy5fZ2V0RGF0YVJhbmdlKCksaD10aGlzLmhvdC5nZXRSb3dIZWFkZXIoKTtNbyhhLGQsZj0+eyF0aGlzLm9wdGlvbnMu'@;
put 'ZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coZil8fGwucHVzaChoW2ZdKX0pfXJldHVybiBsfWdldENvbHVtbkhlYWRlcnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5jb2x1bW5IZWFkZXJzKXtjb25zdHtzdGFydENvbDphLGVuZENvbDpkfT10aGlzLl9nZXREYXRh'@;
put 'UmFuZ2UoKSxoPXRoaXMuaG90LmdldENvbEhlYWRlcigpO01vKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Db2x1bW5zJiZ0aGlzLl9pc0hpZGRlbkNvbHVtbihmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9X2dldERhdGFSYW5nZSgpe2NvbnN0IGw9dGhpcy5ob3QuY291'@;
put 'bnRDb2xzKCktMSxhPXRoaXMuaG90LmNvdW50Um93cygpLTE7bGV0W2Q9MCxoPTAsZj1hLHY9bF09dGhpcy5vcHRpb25zLnJhbmdlO3JldHVybiBkPU1hdGgubWF4KGQsMCksaD1NYXRoLm1heChoLDApLGY9TWF0aC5taW4oZixhKSx2PU1hdGgubWluKHYsbCkse3N0YXJ0Um93OmQsc3RhcnRD'@;
put 'b2w6aCxlbmRSb3c6ZixlbmRDb2w6dn19X2lzSGlkZGVuUm93KGwpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKX1faXNIaWRkZW5Db2x1bW4obCl7cmV0dXJuIHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlk'@;
put 'ZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfX07Y2xhc3MgcHp7c3RhdGljIGdldCBERUZBVUxUX09QVElPTlMoKXtyZXR1cm57bWltZVR5cGU6InRleHQvcGxhaW4iLGZpbGVFeHRlbnNpb246InR4dCIsZmlsZW5hbWU6IkhhbmRzb250YWJsZSBbWVlZWV0tW01NXS1bRERdIixl'@;
put 'bmNvZGluZzoidXRmLTgiLGJvbTohMSxjb2x1bW5IZWFkZXJzOiExLHJvd0hlYWRlcnM6ITEsZXhwb3J0SGlkZGVuQ29sdW1uczohMSxleHBvcnRIaWRkZW5Sb3dzOiExLHJhbmdlOltdfX1jb25zdHJ1Y3RvcihsLGEpe3RoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRpb25zPXRoaXMuX21l'@;
put 'cmdlT3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdlT3B0aW9ucyhsKXtsZXQgYT1JMCh0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT14YyhJMChwei5ERUZBVUxUX09QVElP'@;
put 'TlMpLGEpLGE9eGMoYSxsKSxhLmZpbGVuYW1lPXpWKGEuZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigpLE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgbFllPXB6LG16PXtjc3Y6'@;
put 'Y2xhc3MgaFllIGV4dGVuZHMgbFlle3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4ifX1leHBvcnQoKXtjb25zdCBsPXRo'@;
put 'aXMub3B0aW9ucyxhPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5ndGg+MDtsZXQgVD1sLmJvbT8i'@;
put 'XHVmZWZmIjoiIjtyZXR1cm4gaCYmKGQ9X3MoZCxZPT50aGlzLl9lc2NhcGVDZWxsKFksITApKSx2JiYoVCs9bC5jb2x1bW5EZWxpbWl0ZXIpLFQrPWQuam9pbihsLmNvbHVtbkRlbGltaXRlciksVCs9bC5yb3dEZWxpbWl0ZXIpLFJuKGEsKFkscmUpPT57cmU+MCYmKFQrPWwucm93RGVsaW1p'@;
put 'dGVyKSx2JiYoVCs9dGhpcy5fZXNjYXBlQ2VsbChmW3JlXSkrbC5jb2x1bW5EZWxpbWl0ZXIpLFQrPVkubWFwKGZlPT50aGlzLl9lc2NhcGVDZWxsKGZlKSkuam9pbihsLmNvbHVtbkRlbGltaXRlcil9KSxUfV9lc2NhcGVDZWxsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw'@;
put 'IT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD0kbChsKTtyZXR1cm4iIiE9PWQmJihhfHxkLmluZGV4T2YoIlxyIik+PTB8fGQuaW5kZXhPZignIicpPj0wfHxkLmluZGV4T2YoIlxuIik+PTB8fGQuaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihkPWQu'@;
put 'cmVwbGFjZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGQ9YCIke2R9ImApLGR9fX07Y2xhc3MgdlllIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQo'@;
put 'KXtyZXR1cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVh'@;
put 'dGVCbG9iKHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1l'@;
put 'bnRzWzFdOnt9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksdj10aGlzLl9jcmVhdGVCbG9iKGYpLFQ9aC5VUkx8fGgud2Via2l0VVJMLFk9ZC5jcmVhdGVFbGVtZW50KCJhIikscmU9YCR7Zi5vcHRp'@;
put 'b25zLmZpbGVuYW1lfS4ke2Yub3B0aW9ucy5maWxlRXh0ZW5zaW9ufWA7aWYodm9pZCAwIT09WS5kb3dubG9hZCl7Y29uc3QgZmU9VC5jcmVhdGVPYmplY3RVUkwodik7WS5zdHlsZS5kaXNwbGF5PSJub25lIixZLnNldEF0dHJpYnV0ZSgiaHJlZiIsZmUpLFkuc2V0QXR0cmlidXRlKCJkb3du'@;
put 'bG9hZCIscmUpLGQuYm9keS5hcHBlbmRDaGlsZChZKSxZLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoImNsaWNrIikpLGQuYm9keS5yZW1vdmVDaGlsZChZKSxzZXRUaW1lb3V0KCgpPT57VC5yZXZva2VPYmplY3RVUkwoZmUpfSwxMDApfWVsc2UgbmF2aWdhdG9yLm1zU2F2ZU9yT3Bl'@;
put 'bkJsb2ImJm5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKHYscmUpfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighbXpbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9y'@;
put 'bWF0IHR5cGUgIiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIG1ZZShjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG16W2NdP25ldyBteltjXShsLGEpOm51bGx9KGwsbmV3IGFZZSh0aGlzLmhvdCksYSl9X2NyZWF0ZUJsb2IobCl7bGV0IGE9bnVsbDty'@;
put 'ZXR1cm4gdHlwZW9mIEJsb2I8InUiJiYoYT1uZXcgQmxvYihbbC5leHBvcnQoKV0se3R5cGU6YCR7bC5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7bC5vcHRpb25zLmVuY29kaW5nfWB9KSksYX19Y2xhc3MgRmFle2NvbnN0cnVjdG9yKGwsYSl7bGV0e2lkOmQsc3RhdGVsZXNzOmg9ITB9'@;
put 'PWE7dGhpcy5ob3Q9bCx0aGlzLmlkPWQsdGhpcy5lbGVtZW50cz1bXSx0aGlzLmhpZGRlbj0hMSx0aGlzLnN0YXRlSWQ9YEZpbHRlcnMuY29tcG9uZW50LiR7dGhpcy5pZH1gLHRoaXMuc3RhdGU9aD9udWxsOnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMuc3Rh'@;
put 'dGVJZCxuZXcgVlQpfXJlc2V0KCl7Um4odGhpcy5lbGVtZW50cyxsPT5sLnJlc2V0KCkpfWhpZGUoKXt0aGlzLmhpZGRlbj0hMH1zaG93KCl7dGhpcy5oaWRkZW49ITF9aXNIaWRkZW4oKXtyZXR1cm4gbnVsbD09PXRoaXMuaG90fHx0aGlzLmhpZGRlbn1yZXN0b3JlU3RhdGUobCl7dGhpcy5z'@;
put 'dGF0ZSYmdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlLmdldFZhbHVlQXRJbmRleChsKSl9c2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBzZXR0aW5nIGxvZ2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXNhdmVTdGF0ZShsKXt0aGlzLnN0YXRlJiZ0aGlzLnN0YXRlLnNldFZh'@;
put 'bHVlQXRJbmRleChsLHRoaXMuZ2V0U3RhdGUoKSl9Z2V0U3RhdGUoKXt0aHJvdyBuZXcgRXJyb3IoIlRoZSBzdGF0ZSBnYXRoZXJpbmcgbG9naWMgaXMgbm90IGltcGxlbWVudGVkIil9ZGVzdHJveSgpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5zdGF0'@;
put 'ZUlkKSx0aGlzLmNsZWFyTG9jYWxIb29rcygpLFJuKHRoaXMuZWxlbWVudHMsbD0+bC5kZXN0cm95KCkpLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmVsZW1lbnRzPW51bGwsdGhpcy5ob3Q9bnVsbH19R2EoRmFlLHcxKTtjb25zdCBJRD1GYWUsWnc9e307ZnVuY3Rpb24gZm0oYyxsKXtpZighWndb'@;
put 'Y10pdGhyb3cgRXJyb3IoYEZpbHRlciBjb25kaXRpb24gIiR7Y30iIGRvZXMgbm90IGV4aXN0LmApO2NvbnN0e2NvbmRpdGlvbjphLGRlc2NyaXB0b3I6ZH09WndbY107bGV0IGg9bDtyZXR1cm4gZC5pbnB1dFZhbHVlc0RlY29yYXRvciYmKGg9ZC5pbnB1dFZhbHVlc0RlY29yYXRvcihoKSks'@;
put 'ZnVuY3Rpb24oZil7cmV0dXJuIGEuYXBwbHkoZi5tZXRhLmluc3RhbmNlLFtdLmNvbmNhdChbZl0sW2hdKSl9fWZ1bmN0aW9uIHQ2KGMpe2lmKCFad1tjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIFp3W2NdLmRlc2NyaXB0'@;
put 'b3J9ZnVuY3Rpb24ga2MoYyxsLGEpe2Eua2V5PWMsWndbY109e2NvbmRpdGlvbjpsLGRlc2NyaXB0b3I6YX19Y29uc3Qga3U9Im5vbmUiO2tjKGt1LGZ1bmN0aW9uIHlZZSgpe3JldHVybiEwfSx7bmFtZTpaVCxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITF9KTtjb25zdCBXdz0iZW1w'@;
put 'dHkiO2tjKFd3LGZ1bmN0aW9uIGJZZShjKXtyZXR1cm4gcWMoYy52YWx1ZSl9LHtuYW1lOllCLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFJEPSJub3RfZW1wdHkiO2tjKFJELGZ1bmN0aW9uIHdZZShjLGwpe3JldHVybiFmbShXdyxsKShjKX0se25hbWU6ekIsaW5w'@;
put 'dXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgR3c9ImVxIjtrYyhHdyxmdW5jdGlvbiBNWWUoYyxsKXtsZXRbYV09bDtyZXR1cm4gJGwoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSk9PT0kbChhKX0se25hbWU6VUIsaW5wdXRzQ291bnQ6MSxzaG93'@;
put 'T3BlcmF0b3JzOiEwfSk7Y29uc3QgT0Q9Im5lcSI7a2MoT0QsZnVuY3Rpb24gQ1llKGMsbCl7cmV0dXJuIWZtKEd3LGwpKGMpfSx7bmFtZTpaQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrYygiZ3QiLGZ1bmN0aW9uIFNZZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVt'@;
put 'ZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT5kfSx7bmFtZTpLQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxrYygiZ3RlIixmdW5jdGlvbiB4WWUoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUm'@;
put 'JihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU+PWR9LHtuYW1lOlhCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGtjKCJsdCIsZnVuY3Rpb24ga1llKGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTAp'@;
put 'KSxjLnZhbHVlPGR9LHtuYW1lOkpCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLGtjKCJsdGUiLGZ1bmN0aW9uIEVZZShjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZTw9ZH0se25hbWU6'@;
put 'UUIsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgZ3o9ImRhdGVfYWZ0ZXIiO2tjKGd6LGZ1bmN0aW9uIFRZZShjLGwpe2xldFthXT1sO2NvbnN0IGQ9ZGEoYy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCksaD1kYShhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFk'@;
put 'LmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPj0wfSx7bmFtZTpuWSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBfej0iZGF0ZV9iZWZvcmUiO2tjKF96LGZ1bmN0aW9uIERZZShjLGwpe2xldFthXT1sO2NvbnN0IGQ9ZGEoYy52YWx1ZSxjLm1ldGEu'@;
put 'ZGF0ZUZvcm1hdCksaD1kYShhLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hKCFkLmlzVmFsaWQoKXx8IWguaXNWYWxpZCgpKSYmZC5kaWZmKGgpPD0wfSx7bmFtZTpyWSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBQRD0iYmV0d2VlbiI7a2MoUEQsZnVuY3Rpb24g'@;
put 'QVllKGMsbCl7bGV0W2EsZF09bCxoPWEsZj1kO2lmKCJudW1lcmljIj09PWMubWV0YS50eXBlKXtjb25zdCB2PXBhcnNlRmxvYXQoaCwxMCksVD1wYXJzZUZsb2F0KGYsMTApO2g9TWF0aC5taW4odixUKSxmPU1hdGgubWF4KHYsVCl9ZWxzZSBpZigiZGF0ZSI9PT1jLm1ldGEudHlwZSl7Y29u'@;
put 'c3Qgdj1mbShfeixbZl0pLFQ9Zm0oZ3osW2hdKTtyZXR1cm4gdihjKSYmVChjKX1yZXR1cm4gYy52YWx1ZT49aCYmYy52YWx1ZTw9Zn0se25hbWU6ZVksaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgQmFlPSJub3RfYmV0d2VlbiI7a2MoQmFlLGZ1bmN0aW9uIExZZShj'@;
put 'LGwpe3JldHVybiFmbShQRCxsKShjKX0se25hbWU6dFksaW5wdXRzQ291bnQ6MixzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3QgWWFlPSJiZWdpbnNfd2l0aCI7a2MoWWFlLGZ1bmN0aW9uIElZZShjLGwpe2xldFthXT1sO3JldHVybiAkbChjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1l'@;
put 'dGEubG9jYWxlKS5zdGFydHNXaXRoKCRsKGEpKX0se25hbWU6V0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksa2MoImVuZHNfd2l0aCIsZnVuY3Rpb24gUlllKGMsbCl7bGV0W2FdPWw7cmV0dXJuICRsKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUp'@;
put 'LmVuZHNXaXRoKCRsKGEpKX0se25hbWU6R0IsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3Qgdno9ImNvbnRhaW5zIjtrYyh2eixmdW5jdGlvbiBPWWUoYyxsKXtsZXRbYV09bDtyZXR1cm4gJGwoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSku'@;
put 'aW5kZXhPZigkbChhKSk+PTB9LHtuYW1lOiRCLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IFVhZT0ibm90X2NvbnRhaW5zIjtrYyhVYWUsZnVuY3Rpb24gUFllKGMsbCl7cmV0dXJuIWZtKHZ6LGwpKGMpfSx7bmFtZTpxQixpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRv'@;
put 'cnM6ITB9KTtjb25zdCBaYWU9ImRhdGVfdG9tb3Jyb3ciO2tjKFphZSxmdW5jdGlvbiBGWWUoYyl7Y29uc3QgbD1kYShjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShkYSgpLnN1YnRyYWN0KC0xLCJkYXlzIikuc3RhcnRPZigiZGF5Iiks'@;
put 'ImQiKX0se25hbWU6b1ksaW5wdXRzQ291bnQ6MH0pO2NvbnN0IFdhZT0iZGF0ZV90b2RheSI7a2MoV2FlLGZ1bmN0aW9uIEhZZShjKXtjb25zdCBsPWRhKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKGRhKCkuc3RhcnRPZigiZGF5Iiks'@;
put 'ImQiKX0se25hbWU6aVksaW5wdXRzQ291bnQ6MH0pO2NvbnN0IEdhZT0iZGF0ZV95ZXN0ZXJkYXkiO2tjKEdhZSxmdW5jdGlvbiBOWWUoYyl7Y29uc3QgbD1kYShjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KTtyZXR1cm4hIWwuaXNWYWxpZCgpJiZsLmlzU2FtZShkYSgpLnN1YnRyYWN0KDEs'@;
put 'ImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpzWSxpbnB1dHNDb3VudDowfSk7Y29uc3QgcWFlPXtudW1lcmljOltrdSxNcyxXdyxSRCxNcyxHdyxPRCxNcywiZ3QiLCJndGUiLCJsdCIsImx0ZSIsUEQsQmFlXSx0ZXh0OltrdSxNcyxXdyxSRCxNcyxHdyxPRCxNcyxZYWUsImVu'@;
put 'ZHNfd2l0aCIsTXMsdnosVWFlXSxkYXRlOltrdSxNcyxXdyxSRCxNcyxHdyxPRCxNcyxfeixneixQRCxNcyxaYWUsV2FlLEdhZV19LHl6PSJidWlsdCIsYno9ImJ1aWxkaW5nIixLYWU9WyJjbGljayIsImlucHV0Iiwia2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIi'@;
put 'LCJjaGFuZ2UiXTtjbGFzcyBGRHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEkwKHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3RvcihsLGEpe3RoaXMuaG90PWwsdGhpcy5ldmVudE1hbmFnZXI9bmV3IGps'@;
put 'KHRoaXMpLHRoaXMub3B0aW9ucz14YyhGRC5ERUZBVUxUUyxhKSx0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KHRoaXMub3B0aW9ucy53cmFwSXQ/ImRpdiI6dGhpcy5vcHRpb25zLnRhZ05hbWUpLHRoaXMuYnVpbGRTdGF0ZT1udWxsfXNldFZhbHVl'@;
put 'KGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLHRoaXMudXBkYXRlKCl9Z2V0VmFsdWUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnZhbHVlfWdldCBlbGVtZW50KCl7cmV0dXJuIHRoaXMuYnVpbGRTdGF0ZT09PWJ6P3RoaXMuX2VsZW1lbnQ6dGhpcy5idWlsZFN0YXRlPT09eXo/KHRoaXMudXBkYXRl'@;
put 'KCksdGhpcy5fZWxlbWVudCk6KHRoaXMuYnVpbGRTdGF0ZT1ieix0aGlzLmJ1aWxkKCksdGhpcy5idWlsZFN0YXRlPXl6LHRoaXMuX2VsZW1lbnQpfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09eXp9dHJhbnNsYXRlSWZQb3NzaWJsZShsKXtyZXR1cm4ic3RyaW5nIj09dHlw'@;
put 'ZW9mIGwmJmwuc3RhcnRzV2l0aChPMCk/dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShsKTpsfWJ1aWxkKCl7Y29uc3QgbD0oYSxkKT0+e3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSxkLGg9PnRoaXMucnVuTG9jYWxIb29rcyhkLGgsdGhpcykpfTtpZih0aGlzLmJ1'@;
put 'aWxkU3RhdGV8fCh0aGlzLmJ1aWxkU3RhdGU9YnopLHRoaXMub3B0aW9ucy5jbGFzc05hbWUmJndpKHRoaXMuX2VsZW1lbnQsdGhpcy5vcHRpb25zLmNsYXNzTmFtZSksdGhpcy5vcHRpb25zLmNoaWxkcmVuLmxlbmd0aClSbih0aGlzLm9wdGlvbnMuY2hpbGRyZW4sYT0+dGhpcy5fZWxlbWVu'@;
put 'dC5hcHBlbmRDaGlsZChhLmVsZW1lbnQpKTtlbHNlIGlmKHRoaXMub3B0aW9ucy53cmFwSXQpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLnRhZ05hbWUpO3lzKHRoaXMub3B0aW9ucywoZCxoKT0+e3ZvaWQgMCE9PWFbaF0mJiJjbGFz'@;
put 'c05hbWUiIT09aCYmInRhZ05hbWUiIT09aCYmImNoaWxkcmVuIiE9PWgmJihhW2hdPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZShkKSl9KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEpLFJuKEthZSxkPT5sKGEsZCkpfWVsc2UgUm4oS2FlLGE9PmwodGhpcy5fZWxlbWVudCxhKSl9dXBk'@;
put 'YXRlKCl7fXJlc2V0KCl7dGhpcy5vcHRpb25zLnZhbHVlPSIiLHRoaXMudXBkYXRlKCl9c2hvdygpe3RoaXMuZWxlbWVudC5zdHlsZS5kaXNwbGF5PSIifWhpZGUoKXt0aGlzLmVsZW1lbnQuc3R5bGUuZGlzcGxheT0ibm9uZSJ9Zm9jdXMoKXt9ZGVzdHJveSgpe3RoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlcj1udWxsLHRoaXMuaG90PW51bGwsdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlJiZ0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsfX1HYShGRCx3MSk7Y29uc3QgcG09'@;
put 'RkQsSEQ9bmV3IFdlYWtNYXA7Y2xhc3Mgd3ogZXh0ZW5kcyBwbXtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEkwKHtwbGFjZWhvbGRlcjoiIix0eXBlOiJ0ZXh0Iix0YWdOYW1lOiJpbnB1dCJ9KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwseGMod3ouREVGQVVMVFMsYSkpLEhELnNl'@;
put 'dCh0aGlzLHt9KSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNsaWNrIiwoKT0+dGhpcy5vbkNsaWNrKCkpLHRoaXMuYWRkTG9jYWxIb29rKCJrZXl1cCIsbD0+dGhpcy5vbktleXVwKGwpKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29u'@;
put 'c3QgbD1IRC5nZXQodGhpcyksYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7bC5pbnB1dD10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQsd2kodGhpcy5fZWxlbWVudCwiaHRVSUlucHV0Iiksd2koYSwiaHRVSUlucHV0SWNvbiIpLHRoaXMuX2VsZW1lbnQuYXBw'@;
put 'ZW5kQ2hpbGQoYSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2NvbnN0IGw9SEQuZ2V0KHRoaXMpLmlucHV0O2wudHlwZT10aGlzLm9wdGlvbnMudHlwZSxsLnBsYWNlaG9sZGVyPXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMu'@;
put 'cGxhY2Vob2xkZXIpLGwudmFsdWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy52YWx1ZSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmSEQuZ2V0KHRoaXMpLmlucHV0LmZvY3VzKCl9b25DbGljaygpe31vbktleXVwKGwpe3RoaXMub3B0aW9ucy52YWx1ZT1sLnRhcmdl'@;
put 'dC52YWx1ZX19Y29uc3QgTjk9d3osTkQ9bmV3IFdlYWtNYXA7Y2xhc3MgTXogZXh0ZW5kcyBwbXtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEkwKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdyYXBJdDohMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4YyhNei5ERUZBVUxUUyxh'@;
put 'KSksTkQuc2V0KHRoaXMse30pLHRoaXMubWVudT1udWxsLHRoaXMuaXRlbXM9W10sdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuYWRkTG9jYWxIb29rKCJjbGljayIsKCk9PnRoaXMub25DbGljaygpKX1zZXRJdGVtcyhsKXt0aGlzLml0ZW1zPXRoaXMudHJhbnNs'@;
put 'YXRlTmFtZXMobCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKHRoaXMuaXRlbXMpfXRyYW5zbGF0ZU5hbWVzKGwpe3JldHVybiBSbihsLGE9PnthLm5hbWU9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGEubmFtZSl9KSxsfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSx0aGlzLm1l'@;
put 'bnU9bmV3IGV6KHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSksdGhpcy5tZW51LnNldE1lbnVJdGVtcyh0aGlz'@;
put 'Lml0ZW1zKTtjb25zdCBsPW5ldyBwbSh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0Q2FwdGlvbiJ9KSxhPW5ldyBwbSh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0RHJvcGRvd24ifSksZD1ORC5nZXQodGhpcyk7ZC5jYXB0aW9uPWwsZC5jYXB0aW9uRWxlbWVudD1sLmVs'@;
put 'ZW1lbnQsZC5kcm9wZG93bj1hLFJuKFtsLGFdLGg9PnRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoaC5lbGVtZW50KSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygic2VsZWN0IixoPT50aGlzLm9uTWVudVNlbGVjdChoKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9'@;
put 'PnRoaXMub25NZW51Q2xvc2VkKCkpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtsZXQgbDtsPXRoaXMub3B0aW9ucy52YWx1ZT90aGlzLm9wdGlvbnMudmFsdWUubmFtZTp0aGlzLm1lbnUuaG90LmdldFRyYW5zbGF0ZWRQaHJhc2UoWlQpLE5ELmdl'@;
put 'dCh0aGlzKS5jYXB0aW9uRWxlbWVudC50ZXh0Q29udGVudD1sLHN1cGVyLnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29uc3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5tZW51JiYodGhpcy5tZW51Lm9wZW4oKSx0aGlzLm1lbnUuc2V0UG9zaXRpb24oe2xl'@;
put 'ZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQtMzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KSl9Y2xvc2VPcHRpb25zKCl7dGhpcy5tZW51JiZ0aGlzLm1lbnUuY2xvc2UoKX1vbk1lbnVTZWxlY3QobCl7bC5uYW1lIT09TXMmJih0aGlzLm9w'@;
put 'dGlvbnMudmFsdWU9bCx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1vbk1lbnVDbG9zZWQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1vbkNsaWNrKCl7dGhpcy5vcGVuT3B0aW9ucygpfWRlc3Ryb3koKXt0'@;
put 'aGlzLm1lbnUmJih0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMubWVudT1udWxsKTtjb25zdHtjYXB0aW9uOmwsZHJvcGRvd246YX09TkQuZ2V0KHRoaXMpO2wmJmwuZGVzdHJveSgpLGEmJmEuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19Y29uc3QgWGFlPU16LEN6PWNsYXNzIFlZZSBleHRl'@;
put 'bmRzIElEe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYWRkU2VwYXJhdG9yPWEuYWRkU2VwYXJhdG9yLHRoaXMuZWxlbWVudHMucHVzaChuZXcgWGFlKHRoaXMuaG90LHttZW51Q29udGFpbmVyOmEubWVudUNv'@;
put 'bnRhaW5lcn0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IE45KHRoaXMuaG90LHtwbGFjZWhvbGRlcjptWX0pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IE45KHRoaXMuaG90LHtwbGFjZWhvbGRlcjpnWX0pKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRT'@;
put 'ZWxlY3RFbGVtZW50KCkuYWRkTG9jYWxIb29rKCJzZWxlY3QiLGw9PnRoaXMub25Db25kaXRpb25TZWxlY3QobCkpLHRoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25TZWxlY3RVSUNsb3NlZCgpKSxSbih0aGlzLmdldElucHV0RWxl'@;
put 'bWVudHMoKSxsPT57bC5hZGRMb2NhbEhvb2soImtleWRvd24iLGE9PnRoaXMub25JbnB1dEtleURvd24oYSkpfSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLCFsKXJldHVybjtjb25zdCBhPUkwKGwuY29tbWFuZCk7YS5uYW1lLnN0YXJ0c1dpdGgoS2wpJiYoYS5uYW1lPXRoaXMuaG90'@;
put 'LmdldFRyYW5zbGF0ZWRQaHJhc2UoYS5uYW1lKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYSksUm4obC5hcmdzLChkLGgpPT57aWYoaD5hLmlucHV0c0NvdW50LTEpcmV0dXJuITE7Y29uc3QgZj10aGlzLmdldElucHV0RWxlbWVudChoKTtmLnNldFZhbHVlKGQpLGZbYS5p'@;
put 'bnB1dHNDb3VudD5oPyJzaG93IjoiaGlkZSJdKCksaHx8c2V0VGltZW91dCgoKT0+Zi5mb2N1cygpLDEwKX0pfWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5nZXRWYWx1ZSgpfHx0NihrdSksYT1bXTtyZXR1cm4gUm4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCks'@;
put 'KGQsaCk9PntsLmlucHV0c0NvdW50PmgmJmEucHVzaChkLmdldFZhbHVlKCkpfSkse2NvbW1hbmQ6bCxhcmdzOmF9fXVwZGF0ZVN0YXRlKGwsYSl7Y29uc3QgZD10NihsP2wubmFtZTprdSk7dGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgoYSx7Y29tbWFuZDpkLGFyZ3M6bD9sLmFyZ3M6W119'@;
put 'KSxsfHxSbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxoPT5oLnNldFZhbHVlKG51bGwpKX1nZXRTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBYYWUpWzBdfWdldElucHV0RWxlbWVudCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTowO3JldHVybiB0aGlzLmdldElucHV0RWxlbWVudHMoKVtsXX1nZXRJbnB1dEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBOOSl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7'@;
put 'cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9Pnt3aShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVDb25kaXRpb24iKSx0aGlz'@;
put 'LmFkZFNlcGFyYXRvciYmd2koYS5wYXJlbnROb2RlLCJib3JkZXIiKTtjb25zdCBUPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gd2koVCwiaHRGaWx0ZXJzTWVudUxhYmVsIiksVC50ZXh0Q29udGVudD12LGEuYXBwZW5kQ2hpbGQoVCksYS5wYXJl'@;
put 'bnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiKXx8Um4odGhpcy5lbGVtZW50cyxZPT5hLmFwcGVuZENoaWxkKFkuZWxlbWVudCkpLGF9fX1yZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0UGx1Z2luKCJmaWx0ZXJzIikuZ2V0U2VsZWN0ZWRDb2x1bW4oKTtsZXQgYT1bdDYoa3Up'@;
put 'XTtpZihudWxsIT09bCl7Y29uc3R7dmlzdWFsSW5kZXg6ZH09bDthPWZ1bmN0aW9uIEJZZShjKXtjb25zdCBsPVtdO2xldCBhPWM7cmV0dXJuIHFhZVthXXx8KGE9InRleHQiKSxSbihxYWVbYV0sZD0+e2xldCBoO2g9ZD09PU1zP3tuYW1lOk1zfTpJMCh0NihkKSksbC5wdXNoKGgpfSksbH0o'@;
put 'dGhpcy5ob3QuZ2V0RGF0YVR5cGUoMCxkLHRoaXMuaG90LmNvdW50Um93cygpLGQpKX1Sbih0aGlzLmdldElucHV0RWxlbWVudHMoKSxkPT5kLmhpZGUoKSksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0SXRlbXMoYSksc3VwZXIucmVzZXQoKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5z'@;
put 'ZXRWYWx1ZShhWzBdKX1vbkNvbmRpdGlvblNlbGVjdChsKXtSbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoYSxkKT0+e2FbbC5pbnB1dHNDb3VudD5kPyJzaG93IjoiaGlkZSJdKCksMD09PWQmJnNldFRpbWVvdXQoKCk9PmEuZm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNo'@;
put 'YW5nZSIsbCl9b25TZWxlY3RVSUNsb3NlZCgpe3RoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJDbG9zZSIpfW9uSW5wdXRLZXlEb3duKGwpe2g5KGwua2V5Q29kZSwiRU5URVIiKT8odGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2NlcHQiKSxwMihsKSk6aDkobC5rZXlDb2RlLCJFU0NBUEUiKSYmKHRo'@;
put 'aXMucnVuTG9jYWxIb29rcygiY2FuY2VsIikscDIobCkpfX0sJHc9e307ZnVuY3Rpb24gVVllKGMpe3JldHVybiAkd1tjXS5uYW1lfWZ1bmN0aW9uIFN6KGMsbCxhKXskd1tjXT17bmFtZTpsLGZ1bmM6YX19Y29uc3QgbW09ImNvbmp1bmN0aW9uIjtTeihtbSxjWSxmdW5jdGlvbiBXWWUoYyxs'@;
put 'KXtyZXR1cm4gYy5ldmVyeShhPT5hLmZ1bmMobCkpfSk7Y29uc3QgVkQ9ImRpc2p1bmN0aW9uIjtTeihWRCxXVCxmdW5jdGlvbiAkWWUoYyxsKXtyZXR1cm4gYy5zb21lKGE9PmEuZnVuYyhsKSl9KTtjb25zdCB4ej0iZGlzanVuY3Rpb25XaXRoRXh0cmFDb25kaXRpb24iO1N6KHh6LFdULGZ1'@;
put 'bmN0aW9uIEtZZShjLGwpe2lmKGMubGVuZ3RoPDMpdGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIGMuc2xpY2UoMCxjLmxlbmd0aC0xKS5zb21lKGE9PmEuZnVuYyhsKSkmJmNbYy5sZW5ndGgtMV0uZnVu'@;
put 'YyhsKX0pO2NvbnN0IGpEPW5ldyBXZWFrTWFwO2NsYXNzIGt6IGV4dGVuZHMgcG17c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBJMCh7dHlwZToicmFkaW8iLHRhZ05hbWU6ImlucHV0IixjbGFzc05hbWU6Imh0VUlSYWRpbyIsbGFiZWw6e319KX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVy'@;
put 'KGwseGMoa3ouREVGQVVMVFMsYSkpLGpELnNldCh0aGlzLHt9KX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD1qRC5nZXQodGhpcyk7bC5pbnB1dD10aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQ7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGFiZWwi'@;
put 'KTthLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMubGFiZWwudGV4dENvbnRlbnQpLGEuaHRtbEZvcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLmh0bWxGb3IpLGwubGFiZWw9YSx0aGlzLl9lbGVtZW50LmFwcGVu'@;
put 'ZENoaWxkKGEpLHRoaXMudXBkYXRlKCl9dXBkYXRlKCl7aWYoIXRoaXMuaXNCdWlsdCgpKXJldHVybjtjb25zdCBsPWpELmdldCh0aGlzKTtsLmlucHV0LmNoZWNrZWQ9dGhpcy5vcHRpb25zLmNoZWNrZWQsbC5sYWJlbC50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhp'@;
put 'cy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KX1pc0NoZWNrZWQoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe3RoaXMub3B0aW9ucy5jaGVja2VkPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0sdGhp'@;
put 'cy51cGRhdGUoKX1mb2N1cygpe3RoaXMuaXNCdWlsdCgpJiZqRC5nZXQodGhpcykuaW5wdXQuZm9jdXMoKX19Y29uc3QgSmFlPWt6LEpZZT1jbGFzcyBYWWUgZXh0ZW5kcyBJRHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiExfSksdGhpcy5uYW1lPWEubmFt'@;
put 'ZSx0aGlzLmJ1aWxkT3BlcmF0b3JzRWxlbWVudCgpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+'@;
put 'KHdpKGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudU9wZXJhdG9ycyIpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFJuKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YnVpbGRPcGVyYXRvcnNFbGVtZW50KCl7Y29uc3Qg'@;
put 'bD1bbW0sVkRdO1JuKGwsYT0+e2NvbnN0IGQ9bmV3IEphZSh0aGlzLmhvdCx7bmFtZToib3BlcmF0b3IiLGxhYmVsOntodG1sRm9yOmEsdGV4dENvbnRlbnQ6VVllKGEpfSx2YWx1ZTphLGNoZWNrZWQ6YT09PWxbMF0saWQ6YX0pO2QuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGg9PnRoaXMub25S'@;
put 'YWRpb0lucHV0Q2hhbmdlKGgpKSx0aGlzLmVsZW1lbnRzLnB1c2goZCl9KX1zZXRDaGVja2VkKGwpe2lmKHRoaXMuZWxlbWVudHMubGVuZ3RoPGwpdGhyb3cgRXJyb3IoV2FgUmFkaW8gYnV0dG9uIHdpdGggaW5kZXggJHtsfSBkb2Vzbid0IGV4aXN0LmApO1JuKHRoaXMuZWxlbWVudHMsKGEs'@;
put 'ZCk9PnthLnNldENoZWNrZWQoZD09PWwpfSl9Z2V0QWN0aXZlT3BlcmF0aW9uSWQoKXtjb25zdCBsPXRoaXMuZWxlbWVudHMuZmluZChhPT5hIGluc3RhbmNlb2YgSmFlJiZhLmlzQ2hlY2tlZCgpKTtyZXR1cm4gbD9sLmdldFZhbHVlKCk6bW19Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRB'@;
put 'Y3RpdmVPcGVyYXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1sJiZSbih0aGlzLmVsZW1lbnRzLGE9PnthLnNldENoZWNrZWQoYS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5s'@;
put 'ZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTptbTtkPT09eHomJihkPVZEKSx0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX1vblJhZGlv'@;
put 'SW5wdXRDaGFuZ2UobCl7dGhpcy5zZXRTdGF0ZShsLnRhcmdldC52YWx1ZSl9fTtmdW5jdGlvbiBlemUoYyxsKXtsZXQgYT1jO3JldHVybiIiPT09YSYmKGE9YCgke2x9KWApLGF9Z29lKCk7Y29uc3QgRXo9bmV3IFNldChbMV0pLmhhcygxKSx0emU9RXomJiJmdW5jdGlvbiI9PXR5cGVvZiBB'@;
put 'cnJheS5mcm9tO2Z1bmN0aW9uIHF3KGMpe2xldCBsPWM7cmV0dXJuIEV6JiYobD1uZXcgU2V0KGwpKSxmdW5jdGlvbihhKXtsZXQgZDtyZXR1cm4gZD1Fej9sLmhhcyhhKTohIX5sLmluZGV4T2YoYSksZH19ZnVuY3Rpb24gZWxlKGMpe3JldHVybiBjPz8iIn1mdW5jdGlvbiBUeihjKXtsZXQg'@;
put 'bD1jO3JldHVybiBsPXR6ZT9BcnJheS5mcm9tKG5ldyBTZXQobCkpOkhWKGwpLGw9bC5zb3J0KChhLGQpPT4ibnVtYmVyIj09dHlwZW9mIGEmJiJudW1iZXIiPT10eXBlb2YgZD9hLWQ6YT09PWQ/MDphPmQ/MTotMSksbH1mdW5jdGlvbiB0bGUoYyxsLGEsZCl7Y29uc3QgaD1bXSxmPWM9PT1s'@;
put 'O2xldCB2O3JldHVybiBmfHwodj1xdyhsKSksUm4oYyxUPT57bGV0IFk9ITE7KGZ8fHYoVCkpJiYoWT0hMCk7Y29uc3QgcmU9e2NoZWNrZWQ6WSx2YWx1ZTpULHZpc3VhbFZhbHVlOmV6ZShULGEpfTtkJiZkKHJlKSxoLnB1c2gocmUpfSksaH1jb25zdCBEej1uZXcgV2Vha01hcDtjbGFzcyBB'@;
put 'eiBleHRlbmRzIHBte3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gSTAoe2hyZWY6IiMiLHRhZ05hbWU6ImEifSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHhjKEF6LkRFRkFVTFRTLGEpKSxEei5zZXQodGhpcyx7fSl9YnVpbGQoKXtzdXBlci5idWlsZCgpLER6LmdldCh0aGlzKS5s'@;
put 'aW5rPXRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZH11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKER6LmdldCh0aGlzKS5saW5rLnRleHRDb250ZW50PXRoaXMudHJhbnNsYXRlSWZQb3NzaWJsZSh0aGlzLm9wdGlvbnMudGV4dENvbnRlbnQpKX19Y29uc3QgbmxlPUF6LG56ZT1uZXcgV2Vha01h'@;
put 'cDtjbGFzcyBMeiBleHRlbmRzIHBte3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gSTAoe2NsYXNzTmFtZToiaHRVSU11bHRpcGxlU2VsZWN0Iix2YWx1ZTpbXX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4YyhMei5ERUZBVUxUUyxhKSksbnplLnNldCh0aGlzLHt9KSx0aGlzLnNl'@;
put 'YXJjaElucHV0PW5ldyBOOSh0aGlzLmhvdCx7cGxhY2Vob2xkZXI6cFksY2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3RTZWFyY2gifSksdGhpcy5zZWxlY3RBbGxVST1uZXcgbmxlKHRoaXMuaG90LHt0ZXh0Q29udGVudDp1WSxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSksdGhpcy5j'@;
put 'bGVhckFsbFVJPW5ldyBubGUodGhpcy5ob3Qse3RleHRDb250ZW50OmRZLGNsYXNzTmFtZToiaHRVSUNsZWFyQWxsIn0pLHRoaXMuaXRlbXM9W10sdGhpcy5pdGVtc0JveD1udWxsLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLnNlYXJjaElucHV0LmFkZExvY2Fs'@;
put 'SG9vaygia2V5ZG93biIsbD0+dGhpcy5vbklucHV0S2V5RG93bihsKSksdGhpcy5zZWFyY2hJbnB1dC5hZGRMb2NhbEhvb2soImlucHV0IixsPT50aGlzLm9uSW5wdXQobCkpLHRoaXMuc2VsZWN0QWxsVUkuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+dGhpcy5vblNlbGVjdEFsbENsaWNrKGwp'@;
put 'KSx0aGlzLmNsZWFyQWxsVUkuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+dGhpcy5vbkNsZWFyQWxsQ2xpY2sobCkpfXNldEl0ZW1zKGwpe3RoaXMuaXRlbXM9bCx0aGlzLml0ZW1zQm94JiZ0aGlzLml0ZW1zQm94LmxvYWREYXRhKHRoaXMuaXRlbXMpfXNldExvY2FsZShsKXt0aGlzLmxvY2Fs'@;
put 'ZT1sfWdldExvY2FsZSgpe3JldHVybiB0aGlzLmxvY2FsZX1nZXRJdGVtcygpe3JldHVyblsuLi50aGlzLml0ZW1zXX1nZXRWYWx1ZSgpe3JldHVybiBmdW5jdGlvbiBvemUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gUm4oYyxhPT57YS5jaGVja2VkJiZsLnB1c2goYS52YWx1ZSl9KSxsfSh0aGlz'@;
put 'Lml0ZW1zKX1pc1NlbGVjdGVkQWxsVmFsdWVzKCl7cmV0dXJuIHRoaXMuaXRlbXMubGVuZ3RoPT09dGhpcy5nZXRWYWx1ZSgpLmxlbmd0aH1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9bC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPW5ldyBw'@;
put 'bSh0aGlzLmhvdCx7Y2xhc3NOYW1lOiJodFVJU2VsZWN0aW9uQ29udHJvbHMiLGNoaWxkcmVuOlt0aGlzLnNlbGVjdEFsbFVJLHRoaXMuY2xlYXJBbGxVSV19KTt0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuc2VhcmNoSW5wdXQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5hcHBlbmRD'@;
put 'aGlsZChkLmVsZW1lbnQpLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgaD1mPT57dGhpcy5fZWxlbWVudCYmKHRoaXMuaXRlbXNCb3gmJnRoaXMuaXRlbXNCb3guZGVzdHJveSgpLHdpKGYsImh0VUlNdWx0aXBsZVNlbGVjdEhvdCIpLHRoaXMuaXRlbXNCb3g9bmV3IHRoaXMu'@;
put 'aG90LmNvbnN0cnVjdG9yKGYse2RhdGE6dGhpcy5pdGVtcyxjb2x1bW5zOlt7ZGF0YToiY2hlY2tlZCIsdHlwZToiY2hlY2tib3giLGxhYmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9uOiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KFkscmUsZmUsX2Usa2UsV2UpPT57WS50'@;
put 'aXRsZT1XZS5pbnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKHJlLFdlLmxhYmVsLnByb3BlcnR5KX0sbWF4Q29sczoxLGF1dG9XcmFwQ29sOiEwLGhlaWdodDoxMTAsY29sV2lkdGhzOigpPT50aGlzLml0ZW1zQm94LmNvbnRhaW5lci5zY3JvbGxXaWR0aC1mdShsKSxjb3B5UGFzdGU6ITEsZGlz'@;
put 'YWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsZmlsbEhhbmRsZTohMSxmcmFnbWVudFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3JvdzoxLGNvbDowfSxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn0pLHRoaXMuaXRlbXNCb3guaW5pdCgpLHRoaXMuaXRl'@;
put 'bXNCb3guZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazpZPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixZLHRoaXMpfSxncm91cDoibXVsdGlwbGVTZWxlY3QuaXRlbUJveCJ9KSl9O2go'@;
put 'YSksc2V0VGltZW91dCgoKT0+aChhKSwxMDApfXJlc2V0KCl7dGhpcy5zZWFyY2hJbnB1dC5yZXNldCgpLHRoaXMuc2VsZWN0QWxsVUkucmVzZXQoKSx0aGlzLmNsZWFyQWxsVUkucmVzZXQoKX11cGRhdGUoKXt0aGlzLmlzQnVpbHQoKSYmKHRoaXMuaXRlbXNCb3gubG9hZERhdGEoZnVuY3Rp'@;
put 'b24gaXplKGMsbCl7Y29uc3QgYT1xdyhsKTtyZXR1cm4gX3MoYyxkPT4oZC5jaGVja2VkPWEoZC52YWx1ZSksZCkpfSh0aGlzLml0ZW1zLHRoaXMub3B0aW9ucy52YWx1ZSkpLHN1cGVyLnVwZGF0ZSgpKX1kZXN0cm95KCl7dGhpcy5pdGVtc0JveCYmdGhpcy5pdGVtc0JveC5kZXN0cm95KCks'@;
put 'dGhpcy5zZWFyY2hJbnB1dC5kZXN0cm95KCksdGhpcy5jbGVhckFsbFVJLmRlc3Ryb3koKSx0aGlzLnNlbGVjdEFsbFVJLmRlc3Ryb3koKSx0aGlzLnNlYXJjaElucHV0PW51bGwsdGhpcy5jbGVhckFsbFVJPW51bGwsdGhpcy5zZWxlY3RBbGxVST1udWxsLHRoaXMuaXRlbXNCb3g9bnVsbCx0'@;
put 'aGlzLml0ZW1zPW51bGwsc3VwZXIuZGVzdHJveSgpfW9uSW5wdXQobCl7Y29uc3QgYT1sLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtsZXQgZDtkPSIiPT09YT9bLi4udGhpcy5pdGVtc106ZmQodGhpcy5pdGVtcyxoPT5gJHtoLnZhbHVlfWAudG9M'@;
put 'b2NhbGVMb3dlckNhc2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihhKT49MCksdGhpcy5pdGVtc0JveC5sb2FkRGF0YShkKX1vbklucHV0S2V5RG93bihsKXt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLGwsdGhpcyksWFYoaDksbC5rZXlDb2RlKSgiQVJST1dfRE9XTnxUQUIiKSYm'@;
put 'IXRoaXMuaXRlbXNCb3guaXNMaXN0ZW5pbmcoKSYmKHAyKGwpLHRoaXMuaXRlbXNCb3gubGlzdGVuKCksdGhpcy5pdGVtc0JveC5zZWxlY3RDZWxsKDAsMCkpfW9uU2VsZWN0QWxsQ2xpY2sobCl7Y29uc3QgYT1bXTtsLnByZXZlbnREZWZhdWx0KCksUm4odGhpcy5pdGVtc0JveC5nZXRTb3Vy'@;
put 'Y2VEYXRhKCksKGQsaCk9PntkLmNoZWNrZWQ9ITAsYS5wdXNoKEJqKGQsaClbMF0pfSksdGhpcy5pdGVtc0JveC5zZXRTb3VyY2VEYXRhQXRDZWxsKGEpfW9uQ2xlYXJBbGxDbGljayhsKXtjb25zdCBhPVtdO2wucHJldmVudERlZmF1bHQoKSxSbih0aGlzLml0ZW1zQm94LmdldFNvdXJjZURh'@;
put 'dGEoKSwoZCxoKT0+e2QuY2hlY2tlZD0hMSxhLnB1c2goQmooZCxoKVswXSl9KSx0aGlzLml0ZW1zQm94LnNldFNvdXJjZURhdGFBdENlbGwoYSl9fWNvbnN0IHJsZT1MeixuNj0iYnlfdmFsdWUiO2tjKG42LGZ1bmN0aW9uIHN6ZShjLGwpe2xldFthXT1sO3JldHVybiBhKGMudmFsdWUpfSx7'@;
put 'bmFtZToiQnkgdmFsdWUiLGlucHV0c0NvdW50OjAsaW5wdXRWYWx1ZXNEZWNvcmF0b3IoYyl7bGV0W2xdPWM7cmV0dXJuW3F3KGwpXX0sc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IGx6ZT1jbGFzcyBhemUgZXh0ZW5kcyBJRHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3Rh'@;
put 'dGVsZXNzOiExfSksdGhpcy5uYW1lPWEubmFtZSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHJsZSh0aGlzLmhvdCkpLHRoaXMucmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLmFkZExvY2FsSG9vaygia2V5ZG93biIsbD0+dGhp'@;
put 'cy5vbklucHV0S2V5RG93bihsKSl9c2V0U3RhdGUobCl7aWYodGhpcy5yZXNldCgpLGwmJmwuY29tbWFuZC5rZXk9PT1uNil7Y29uc3QgYT10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpO2Euc2V0SXRlbXMobC5pdGVtc1NuYXBzaG90KSxhLnNldFZhbHVlKGwuYXJnc1swXSksYS5z'@;
put 'ZXRMb2NhbGUobC5sb2NhbGUpfX1nZXRTdGF0ZSgpe2NvbnN0IGw9dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKSxhPWwuZ2V0SXRlbXMoKTtyZXR1cm57Y29tbWFuZDp7a2V5OmwuaXNTZWxlY3RlZEFsbFZhbHVlcygpfHwhYS5sZW5ndGg/a3U6bjZ9LGFyZ3M6W2wuZ2V0VmFsdWUo'@;
put 'KV0saXRlbXNTbmFwc2hvdDphfX11cGRhdGVTdGF0ZShsKXtjb25zdCBhPShkLGgsZix2LFQpPT57Y29uc3RbWV09ZmQoaCxfZT0+X2UubmFtZT09PW42KSxyZT17fSxmZT10aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKEdUKTtpZihZKXtjb25zdCBfZT1Ueihfcyh2KGQsVCksdHQ9PnR0'@;
put 'LnZhbHVlKSk7ZiYmKFkuYXJnc1swXT1mKTtjb25zdCBrZT1bXSxXZT10bGUoX2UsWS5hcmdzWzBdLGZlLHR0PT57dHQuY2hlY2tlZCYma2UucHVzaCh0dC52YWx1ZSl9KTtyZS5sb2NhbGU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbikubG9j'@;
put 'YWxlLHJlLmFyZ3M9W2tlXSxyZS5jb21tYW5kPXQ2KG42KSxyZS5pdGVtc1NuYXBzaG90PVdlfWVsc2UgcmUuYXJncz1bXSxyZS5jb21tYW5kPXQ2KGt1KTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChkLHJlKX07YShsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbixsLmVkaXRlZENv'@;
put 'bmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3RoJiZhKGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbHVtbixsLmRlcGVuZGVudENvbmRpdGlvblN0'@;
put 'YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRDb25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBybGUpWzBd'@;
put 'fWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhLGQsaCxmLHYpPT57d2koYS5wYXJlbnROb2RlLCJodEZp'@;
put 'bHRlcnNNZW51VmFsdWUiKTtjb25zdCBUPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gd2koVCwiaHRGaWx0ZXJzTWVudUxhYmVsIiksVC50ZXh0Q29udGVudD12LGEuYXBwZW5kQ2hpbGQoVCksYS5wYXJlbnROb2RlLmhhc0F0dHJpYnV0ZSgiZ2hv'@;
put 'c3QtdGFibGUiKXx8Um4odGhpcy5lbGVtZW50cyxZPT5hLmFwcGVuZENoaWxkKFkuZWxlbWVudCkpLGF9fX1yZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShHVCksYT1Ueih0aGlzLl9nZXRDb2x1bW5WaXNpYmxlVmFsdWVzKCkpLGQ9dGxlKGEsYSxsKTt0aGlz'@;
put 'LmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGQpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKTtjb25zdCBoPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bnVsbCE9PWgm'@;
put 'JnRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0TG9jYWxlKHRoaXMuaG90LmdldENlbGxNZXRhKDAsaC52aXN1YWxJbmRleCkubG9jYWxlKX1vbklucHV0S2V5RG93bihsKXtoOShsLmtleUNvZGUsIkVTQ0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxwMihs'@;
put 'KSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOl9zKHRoaXMuaG90LmdldERhdGFBdENvbChsLnZpc3VhbEluZGV4KSxhPT5lbGUoYSkpfX07Y2xhc3Mg'@;
put 'S3cgZXh0ZW5kcyBJRHtzdGF0aWMgZ2V0IEJVVFRPTl9PSygpe3JldHVybiJvayJ9c3RhdGljIGdldCBCVVRUT05fQ0FOQ0VMKCl7cmV0dXJuImNhbmNlbCJ9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMH0pLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVt'@;
put 'ZW50cy5wdXNoKG5ldyBOOSh0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTpoWSxjbGFzc05hbWU6Imh0VUlCdXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOkt3LkJVVFRPTl9PS30pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IE45KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZh'@;
put 'bHVlOmZZLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOkt3LkJVVFRPTl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe1JuKHRoaXMuZWxlbWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9'@;
put 'PnRoaXMub25CdXR0b25DbGljayhhLGQpKX0pfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJlcjoobCxhKT0+KHdp'@;
put 'KGEucGFyZW50Tm9kZSwiaHRGaWx0ZXJzTWVudUFjdGlvbkJhciIpLGEucGFyZW50Tm9kZS5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFJuKHRoaXMuZWxlbWVudHMsZD0+YS5hcHBlbmRDaGlsZChkLmVsZW1lbnQpKSxhKX19YWNjZXB0KCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJhY2Nl'@;
put 'cHQiKX1jYW5jZWwoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpfW9uQnV0dG9uQ2xpY2sobCxhKXthLm9wdGlvbnMuaWRlbnRpZmllcj09PUt3LkJVVFRPTl9PSz90aGlzLmFjY2VwdCgpOnRoaXMuY2FuY2VsKCl9fWNvbnN0IGN6ZT1LdyxpbGU9IkNvbmRpdGlvbkNvbGxlY3Rpb24u'@;
put 'ZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyBvbGV7Y29uc3RydWN0b3IobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTt0aGlzLmhvdD1sLHRoaXMuaXNNYXBSZWdpc3RyYWJsZT1hLHRoaXMuZmlsdGVyaW5nU3RhdGVzPW5l'@;
put 'dyBWVCwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChpbGUsdGhpcy5maWx0ZXJpbmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRl'@;
put 'eGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RofWlzTWF0Y2gobCxhKXt2YXIgZDtjb25zdCBoPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSxmPW51bGwhPT0oZD1oPy5jb25kaXRpb25zKSYmdm9pZCAwIT09'@;
put 'ZD9kOltdLHY9aD8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoZixsLHYpfWlzTWF0Y2hJbkNvbmRpdGlvbnMobCxhKXtyZXR1cm4hbC5sZW5ndGh8fGZ1bmN0aW9uIHpZZShjKXtpZighJHdbY10pdGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkICIke2N9'@;
put 'IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBsPSR3W2NdLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGwoYSxkKX19KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTptbSkobCxhKX1hZGRDb25kaXRpb24obCxhKXtsZXQgZD1h'@;
put 'cmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bW0saD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCkubG9jYWxlLHY9X3MoYS5hcmdzLGZlPT4ic3RyaW5nIj09'@;
put 'dHlwZW9mIGZlP2ZlLnRvTG9jYWxlTG93ZXJDYXNlKGYpOmZlKSxUPWEubmFtZXx8YS5jb21tYW5kLmtleTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUFkZCIsbCk7Y29uc3QgWT10aGlzLmdldE9wZXJhdGlvbihsKTtpZihZKXtpZihZIT09ZCl0aHJvdyBFcnJvcihXYWBUaGUgY29sdW1u'@;
put 'IG9mIGluZGV4ICR7bH0gaGFzIGJlZW4gYWxyZWFkeSBhcHBsaWVkIHdpdGggYSBcYCR7WX1cYFx4MjAKICAgICAgICBmaWx0ZXIgb3BlcmF0aW9uLiBVc2UgXGByZW1vdmVDb25kaXRpb25zXGAgdG8gY2xlYXIgdGhlIGN1cnJlbnQgY29uZGl0aW9ucyBhbmQgdGhlbiBhZGQgbmV3IG9uZXMu'@;
put 'XHgyMAogICAgICAgIE1pbmQgdGhhdCB5b3UgY2Fubm90IG1peCBkaWZmZXJlbnQgdHlwZXMgb2Ygb3BlcmF0aW9ucyAoZm9yIGluc3RhbmNlLCBpZiB5b3UgdXNlIFxgY29uanVuY3Rpb25cYCxceDIwCiAgICAgICAgdXNlIGl0IGNvbnNlcXVlbnRseSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVt'@;
put 'bikuYCl9ZWxzZSBpZihpbCgkd1tkXSkpdGhyb3cgbmV3IEVycm9yKFdhYFVuZXhwZWN0ZWQgb3BlcmF0aW9uIG5hbWVkIFxgJHtkfVxgLiBQb3NzaWJsZSBvbmVzIGFyZVx4MjAKICAgICAgICBcYGRpc2p1bmN0aW9uXGAgYW5kIFxgY29uanVuY3Rpb25cYC5gKTtjb25zdCByZT10aGlzLmdl'@;
put 'dENvbmRpdGlvbnMobCk7MD09PXJlLmxlbmd0aD90aGlzLmZpbHRlcmluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgobCx7b3BlcmF0aW9uOmQsY29uZGl0aW9uczpbe25hbWU6VCxhcmdzOnYsZnVuYzpmbShULHYpfV19LGgpOnJlLnB1c2goe25hbWU6VCxhcmdzOnYsZnVuYzpmbShULHYpfSks'@;
put 'dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckFkZCIsbCl9Z2V0Q29uZGl0aW9ucyhsKXt2YXIgYSxkO3JldHVybiBudWxsIT09KGE9bnVsbD09PShkPXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChsKSl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY29uZGl0aW9ucykmJnZvaWQg'@;
put 'MCE9PWE/YTpbXX1nZXRPcGVyYXRpb24obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm9wZXJhdGlvbn1nZXRGaWx0ZXJlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdT'@;
put 'dGF0ZXMuZ2V0RW50cmllcygpLm1hcChsPT57bGV0W2FdPWw7cmV0dXJuIGF9KX1nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLmdldEZpbHRlcmVkQ29sdW1ucygpLmluZGV4T2YobCl9ZXhwb3J0QWxsQ29uZGl0aW9ucygpe3JldHVybiBzYyh0aGlzLmZpbHRlcmluZ1N0'@;
put 'YXRlcy5nZXRFbnRyaWVzKCksKGwsYSk9PntsZXRbZCx7b3BlcmF0aW9uOmgsY29uZGl0aW9uczpmfV09YTtyZXR1cm4gbC5wdXNoKHtjb2x1bW46ZCxvcGVyYXRpb246aCxjb25kaXRpb25zOl9zKGYsdj0+e2xldHtuYW1lOlQsYXJnczpZfT12O3JldHVybntuYW1lOlQsYXJnczpZfX0pfSks'@;
put 'bH0sW10pfWltcG9ydEFsbENvbmRpdGlvbnMobCl7dGhpcy5jbGVhbigpLFJuKGwsYT0+e1JuKGEuY29uZGl0aW9ucyxkPT50aGlzLmFkZENvbmRpdGlvbihhLmNvbHVtbixkKSl9KX1yZW1vdmVDb25kaXRpb25zKGwpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUmVtb3ZlIixsKSx0aGlz'@;
put 'LmZpbHRlcmluZ1N0YXRlcy5jbGVhclZhbHVlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJSZW1vdmUiLGwpfWNsZWFuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDbGVhbiIpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNs'@;
put 'ZWFuIil9aGFzQ29uZGl0aW9ucyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDb25kaXRpb25zKGwpO3JldHVybiBhP2Quc29tZShoPT5oLm5hbWU9PT1hKTpkLmxlbmd0aD4wfWRlc3Ryb3koKXt0aGlzLmlzTWFwUmVnaXN0cmFibGUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0'@;
put 'ZXJNYXAoaWxlKSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1udWxsLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fUdhKG9sZSx3MSk7Y29uc3Qgc2xlPW9sZSxhbGU9Y2xhc3MgdXple2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy'@;
put 'Z3VtZW50c1sxXTooKT0+W107dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWwsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1hfWZpbHRlcigpe2xldCBsPVtdO3JldHVybiBSbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksKGEsZCk9PntsZXQgaD10aGlzLmNv'@;
put 'bHVtbkRhdGFGYWN0b3J5KGEpO2QmJihoPXRoaXMuX2dldEludGVyc2VjdERhdGEoaCxsKSksbD10aGlzLmZpbHRlckJ5Q29sdW1uKGEsaCl9KSxsfWZpbHRlckJ5Q29sdW1uKGwpe2NvbnN0IGQ9W107cmV0dXJuIFJuKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd'@;
put 'P2FyZ3VtZW50c1sxXTpbXSxoPT57dm9pZCAwIT09aCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzTWF0Y2goaCxsKSYmZC5wdXNoKGgpfSksZH1fZ2V0SW50ZXJzZWN0RGF0YShsLGEpe2NvbnN0IGQ9W107cmV0dXJuIFJuKGEsaD0+e2NvbnN0IGY9aC5tZXRhLnZpc3VhbFJvdzt2b2lk'@;
put 'IDAhPT1sW2ZdJiYoZFtmXT1sW2ZdKX0pLGR9fTtjbGFzcyBsbGV7Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06KCk9PltdO3RoaXMuaG90PWwsdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPWEsdGhp'@;
put 'cy5jb2x1bW5EYXRhRmFjdG9yeT1kLHRoaXMuY2hhbmdlcz1bXSx0aGlzLmdyb3VwaW5nPSExLHRoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249LTEsdGhpcy5sYXRlc3RPcmRlclN0YWNrPVtdLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVJlbW92'@;
put 'ZSIsaD0+dGhpcy5fb25Db25kaXRpb25CZWZvcmVNb2RpZnkoaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJh'@;
put 'ZnRlckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLCgpPT50aGlzLl9vbkNvbmRpdGlvbkJlZm9yZUNsZWFuKCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhv'@;
put 'b2soImFmdGVyQ2xlYW4iLCgpPT50aGlzLl9vbkNvbmRpdGlvbkFmdGVyQ2xlYW4oKSl9Z3JvdXBDaGFuZ2VzKCl7dGhpcy5ncm91cGluZz0hMH1mbHVzaCgpe3RoaXMuZ3JvdXBpbmc9ITEsUm4odGhpcy5jaGFuZ2VzLGw9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwpfSksdGhpcy5j'@;
put 'aGFuZ2VzLmxlbmd0aD0wfV9vbkNvbmRpdGlvbkJlZm9yZU1vZGlmeShsKXt0aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGwpfXVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsYSl7dmFyIGQ9dGhpcztp'@;
put 'Zih0aGlzLmdyb3VwaW5nKXJldHVybiB2b2lkKC0xPT09dGhpcy5jaGFuZ2VzLmluZGV4T2YobCkmJnRoaXMuY2hhbmdlcy5wdXNoKGwpKTtjb25zdCBoPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5leHBvcnRBbGxDb25kaXRpb25zKCk7bGV0IGY9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9u'@;
put 'LmdldENvbHVtblN0YWNrUG9zaXRpb24obCk7LTE9PT1mJiYoZj10aGlzLmxhdGVzdEVkaXRlZENvbHVtblBvc2l0aW9uKTtjb25zdCB2PWguc2xpY2UoMCxmKSxUPWguc2xpY2UoZik7VC5sZW5ndGgmJlRbMF0uY29sdW1uPT09bCYmVC5zaGlmdCgpO2NvbnN0IFk9JGllKGZ1bmN0aW9uKGZl'@;
put 'LF9lKXtsZXQga2U9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOltdO2NvbnN0IFdlPW5ldyBzbGUoZC5ob3QsITEpLEplPVtdLmNvbmNhdChmZSxrZSk7V2UuaW1wb3J0QWxsQ29uZGl0aW9ucyhKZSk7Y29uc3QgdHQ9ZC5jb2x1bW5EYXRh'@;
put 'RmFjdG9yeShfZSk7bGV0IHl0O3l0PVdlLmlzRW1wdHkoKT90dDpuZXcgYWxlKFdlLEx0PT5kLmNvbHVtbkRhdGFGYWN0b3J5KEx0KSkuZmlsdGVyKCkseXQ9X3MoeXQsTHQ9Pkx0Lm1ldGEudmlzdWFsUm93KTtjb25zdCB3dD1xdyh5dCk7cmV0dXJuIFdlLmRlc3Ryb3koKSxmZCh0dCxMdD0+'@;
put 'd3QoTHQubWV0YS52aXN1YWxSb3cpKX0pKHYpLHJlPVtdLmNvbmNhdCh0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29uZGl0aW9ucyhsKSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJ1cGRhdGUiLHtlZGl0ZWRDb25kaXRpb25TdGFjazp7Y29sdW1uOmwsY29uZGl0aW9uczpyZX0sZGVwZW5k'@;
put 'ZW50Q29uZGl0aW9uU3RhY2tzOlQsZmlsdGVyZWRSb3dzRmFjdG9yeTpZLGNvbmRpdGlvbkFyZ3NDaGFuZ2U6YX0pfV9vbkNvbmRpdGlvbkJlZm9yZUNsZWFuKCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1fb25D'@;
put 'b25kaXRpb25BZnRlckNsZWFuKCl7Um4odGhpcy5sYXRlc3RPcmRlclN0YWNrLGw9Pnt0aGlzLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwpfSl9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCkseXModGhpcywobCxhKT0+e3RoaXNbYV09bnVsbH0pfX1HYShsbGUsdzEpO2NvbnN0IGR6'@;
put 'ZT1sbGU7Y2xhc3MgZnplIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImZpbHRlcnMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI1MH1zdGF0aWMgZ2V0IFBMVUdJTl9ERVBTKCl7cmV0dXJuWyJwbHVnaW46RHJvcGRvd25NZW51IiwicGx1'@;
put 'Z2luOkhpZGRlblJvd3MiLCJjZWxsLXR5cGU6Y2hlY2tib3giXX1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamwodGhpcyksdGhpcy5kcm9wZG93bk1lbnVQbHVnaW49bnVsbCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb249bnVsbCx0aGlzLmNvbmRpdGlv'@;
put 'blVwZGF0ZU9ic2VydmVyPW51bGwsdGhpcy5jb21wb25lbnRzPW5ldyBNYXAoW1siZmlsdGVyX2J5X2NvbmRpdGlvbiIsbnVsbF0sWyJmaWx0ZXJfb3BlcmF0b3JzIixudWxsXSxbImZpbHRlcl9ieV9jb25kaXRpb24yIixudWxsXSxbImZpbHRlcl9ieV92YWx1ZSIsbnVsbF0sWyJmaWx0ZXJf'@;
put 'YWN0aW9uX2JhciIsbnVsbF1dKSx0aGlzLmZpbHRlcnNSb3dzTWFwPW51bGwsdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLChhLGQpPT50aGlzLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZp'@;
put 'bHRlcnN9ZW5hYmxlUGx1Z2luKCl7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLmZpbHRlcnNSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSxuZXcgTXcpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luPXRoaXMuaG90LmdldFBsdWdp'@;
put 'bigiZHJvcGRvd25NZW51Iik7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRyb3Bkb3duTWVudSxhPWwmJmwudWlDb250YWluZXJ8fHRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5LGQ9dj0+KHYuYWRkTG9jYWxIb29rKCJhY2NlcHQiLCgpPT50aGlzLm9uQWN0aW9uQmFyU3VibWl0'@;
put 'KCJhY2NlcHQiKSksdi5hZGRMb2NhbEhvb2soImNhbmNlbCIsKCk9PnRoaXMub25BY3Rpb25CYXJTdWJtaXQoImNhbmNlbCIpKSx2LmFkZExvY2FsSG9vaygiY2hhbmdlIixUPT50aGlzLm9uQ29tcG9uZW50Q2hhbmdlKHYsVCkpLHYpLGg9KCk9PmAke3RoaXMuaG90LmdldFRyYW5zbGF0ZWRQ'@;
put 'aHJhc2UoYVkpfTpgO2lmKCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikpe2NvbnN0IHY9bmV3IEN6KHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X2NvbmRpdGlvbiIsbmFtZTpoLGFkZFNlcGFyYXRvcjohMSxtZW51Q29udGFpbmVyOmF9KTt2LmFkZExvY2FsSG9v'@;
put 'aygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25TZWxlY3RVSUNsb3NlZCgpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIixkKHYpKX1pZih0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9v'@;
put 'cGVyYXRvcnMiLG5ldyBKWWUodGhpcy5ob3Qse2lkOiJmaWx0ZXJfb3BlcmF0b3JzIixuYW1lOiJPcGVyYXRvcnMifSkpLCF0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpKXtjb25zdCB2PW5ldyBDeih0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24y'@;
put 'IixuYW1lOiIiLGFkZFNlcGFyYXRvcjohMCxtZW51Q29udGFpbmVyOmF9KTt2LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PnRoaXMub25TZWxlY3RVSUNsb3NlZCgpKSx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsZCh2KSl9dGhpcy5jb21wb25lbnRz'@;
put 'LmdldCgiZmlsdGVyX2J5X3ZhbHVlIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9ieV92YWx1ZSIsZChuZXcgbHplKHRoaXMuaG90LHtpZDoiZmlsdGVyX2J5X3ZhbHVlIixuYW1lOigpPT5gJHt0aGlzLmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKGxZKX06YH0pKSksdGhpcy5jb21w'@;
put 'b25lbnRzLmdldCgiZmlsdGVyX2FjdGlvbl9iYXIiKXx8dGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2FjdGlvbl9iYXIiLGQobmV3IGN6ZSh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rpb25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwo'@;
put 'dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW5ldyBzbGUodGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcgZHplKHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbix2PT50aGlzLmdldERhdGFNYXBB'@;
put 'dENvbHVtbih2KSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5hZGRMb2NhbEhvb2soInVwZGF0ZSIsdj0+dGhpcy51cGRhdGVDb21wb25lbnRzKHYpKSksdGhpcy5jb21wb25lbnRzLmZvckVhY2godj0+di5zaG93KCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlRHJvcGRvd25NZW51U2V0'@;
put 'SXRlbXMiLHY9PnRoaXMub25CZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyh2KSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIix2PT50aGlzLm9uQWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9ucyh2KSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bk'@;
put 'b3duTWVudVNob3ciLCgpPT50aGlzLm9uQWZ0ZXJEcm9wZG93bk1lbnVTaG93KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiwoKT0+dGhpcy5vbkFmdGVyRHJvcGRvd25NZW51SGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyQ2hhbmdlIix2PT50aGlzLm9uQWZ0ZXJD'@;
put 'aGFuZ2UodikpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51JiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbiYmKHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmRpc2FibGVQbHVnaW4oKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5lbmFibGVQbHVnaW4oKSksc3VwZXIuZW5hYmxl'@;
put 'UGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsO3RoaXMuZW5hYmxlZCYmKG51bGwhPT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbikmJnZvaWQgMCE9PWwmJmwuZW5hYmxlZCYmdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5jbGVhckxvY2FsSG9va3MoKSx0aGlzLmNvbXBvbmVu'@;
put 'dHMuZm9yRWFjaCgoYSxkKT0+e2EuZGVzdHJveSgpLHRoaXMuY29tcG9uZW50cy5zZXQoZCxudWxsKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW51bGwsdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0'@;
put 'aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9YWRkQ29uZGl0aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bW07Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMu'@;
put 'Y29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix7Y29tbWFuZDp7a2V5OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9'@;
put 'Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09PWwpdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9fWZpbHRlcigpe2Nv'@;
put 'bnN0IGw9dGhpcy5fY3JlYXRlRGF0YUZpbHRlcigpLGE9IXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5pc0VtcHR5KCk7bGV0IGQ9W107Y29uc3QgaD10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpO2lmKCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9y'@;
put 'ZUZpbHRlciIsaCkpaWYoYSl7Y29uc3Qgdj1bXTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSxkPV9zKGwuZmlsdGVyKCksWT0+WS5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgVD1xdyhkKTtNbyh0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3Mo'@;
put 'KS0xLFk9PntUKFkpfHx2LnB1c2goWSl9KSxSbih2LFk9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLnNldFZhbHVlQXRJbmRleChZLCEwKX0pfSwhMCksZC5sZW5ndGh8fHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpfWVsc2UgdGhpcy5maWx0ZXJzUm93c01hcC5jbGVhcigpO3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJhZnRlckZpbHRlciIsaCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuY2xlYXJDb2x1bW5TZWxlY3Rpb24oKX1nZXRTZWxlY3RlZENvbHVtbigpe3ZhciBsO2NvbnN0IGE9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVj'@;
put 'dGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gYT97dmlzdWFsSW5kZXg6YS5jb2wscGh5c2ljYWxJbmRleDp0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEuY29sKX06bnVsbH1jbGVhckNvbHVtblNlbGVjdGlvbigpe2NvbnN0IGw9dGhpcy5n'@;
put 'ZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1sJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKDAsbC52aXN1YWxJbmRleCl9Z2V0RGF0YU1hcEF0Q29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCksZD1bXTtyZXR1cm4gUm4odGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q29s'@;
put 'KGEpLChoLGYpPT57dmFyIHY7Y29uc3R7cm93OlQsY29sOlksdmlzdWFsQ29sOnJlLHZpc3VhbFJvdzpmZSx0eXBlOl9lLGluc3RhbmNlOmtlLGRhdGVGb3JtYXQ6V2UsbG9jYWxlOkplfT10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGEpLHR0PW51bGwhPT0odj10aGlzLmhvdC5nZXREYXRhQXRD'@;
put 'ZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KGYpLGEpKSYmdm9pZCAwIT09dj92Omg7ZC5wdXNoKHttZXRhOntyb3c6VCxjb2w6WSx2aXN1YWxDb2w6cmUsdmlzdWFsUm93OmZlLHR5cGU6X2UsaW5zdGFuY2U6a2UsZGF0ZUZvcm1hdDpXZSxsb2NhbGU6SmV9LHZhbHVlOmVsZSh0dCl9KX0pLGR9'@;
put 'b25BZnRlckNoYW5nZShsKXtsJiZSbihsLGE9Pntjb25zdFssZF09YSxoPXRoaXMuaG90LnByb3BUb0NvbChkKTt0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhoKSYmdGhpcy51cGRhdGVWYWx1ZUNvbXBvbmVudENvbmRpdGlvbihoKX0pfXVwZGF0ZVZhbHVlQ29tcG9u'@;
put 'ZW50Q29uZGl0aW9uKGwpe2NvbnN0IGQ9VHoodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsZCl9cmVzdG9yZUNvbXBvbmVudHMobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5nZXRTZWxl'@;
put 'Y3RlZENvbHVtbigpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5waHlzaWNhbEluZGV4O2wuZm9yRWFjaChoPT57aC5pc0hpZGRlbigpfHxoLnJlc3RvcmVTdGF0ZShkKX0pLHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKX1vbkFmdGVyRHJvcGRvd25NZW51U2hvdygp'@;
put 'e3RoaXMucmVzdG9yZUNvbXBvbmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKX1vbkFmdGVyRHJvcGRvd25NZW51SGlkZSgpe3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCks'@;
put 'dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTZWxlY3RFbGVtZW50KCkuY2xvc2VPcHRpb25zKCl9b25CZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcygpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmFk'@;
put 'ZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+e3RoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuaG90TWVudS51cGRhdGVTZXR0aW5ncyh7aGlkZGVuUm93czohMH0pfSl9b25BZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zKGwpe2wuaXRlbXMucHVzaCh7bmFtZTpNc30pLHRoaXMu'@;
put 'Y29tcG9uZW50cy5mb3JFYWNoKGE9PntsLml0ZW1zLnB1c2goYS5nZXRNZW51SXRlbURlc2NyaXB0b3IoKSl9KX1nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGwsYSxkLGgpe2xldCBmPWw7cmV0dXJuIGY9PT1WRCYmYS5jb21tYW5kLmtleSE9PWt1JiZkLmNvbW1hbmQua2V5IT09a3Um'@;
put 'JmguY29tbWFuZC5rZXkhPT1rdT9mPXh6OmguY29tbWFuZC5rZXkhPT1rdSYmKGEuY29tbWFuZC5rZXk9PT1rdXx8ZC5jb21tYW5kLmtleT09PWt1KSYmKGY9bW0pLGZ9b25BY3Rpb25CYXJTdWJtaXQobCl7dmFyIGE7aWYoImFjY2VwdCI9PT1sKXtjb25zdCBoPXRoaXMuZ2V0U2VsZWN0ZWRD'@;
put 'b2x1bW4oKTt2YXIgZDtpZihudWxsPT09aClyZXR1cm4gdm9pZChudWxsPT09KGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pfHx2b2lkIDA9PT1kfHxkLmNsb3NlKCkpO2NvbnN0e3BoeXNpY2FsSW5kZXg6Zn09aCx2PXRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24i'@;
put 'KS5nZXRTdGF0ZSgpLFQ9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKS5nZXRTdGF0ZSgpLFk9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuZ2V0U3RhdGUoKSxyZT10aGlzLmdldE9wZXJhdGlvbkJhc2VkT25Bcmd1bWVudHModGhpcy5j'@;
put 'b21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLmdldEFjdGl2ZU9wZXJhdGlvbklkKCksdixULFkpO3RoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZ3JvdXBDaGFuZ2VzKCk7bGV0IGZlPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGYp'@;
put 'Oy0xPT09ZmUmJihmZT12b2lkIDApLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5yZW1vdmVDb25kaXRpb25zKGYpLHYuY29tbWFuZC5rZXkhPT1rdSYmKHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix2LHJlLGZlKSxULmNvbW1hbmQua2V5IT09a3UmJnRoaXMuY29u'@;
put 'ZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZixULHJlLGZlKSksWS5jb21tYW5kLmtleSE9PWt1JiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGYsWSxyZSxmZSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5mbHVzaCgpLHRoaXMuY29tcG9uZW50cy5m'@;
put 'b3JFYWNoKF9lPT5fZS5zYXZlU3RhdGUoZikpLHRoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSx0aGlzLmZpbHRlcigpfW51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWF8fGEuY2xvc2UoKX1vbkNvbXBvbmVudENoYW5nZShsLGEpe3RoaXMudXBkYXRlRGVw'@;
put 'ZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKSxsLmNvbnN0cnVjdG9yPT09Q3omJiFhLmlucHV0c0NvdW50JiZ0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfW9uU2VsZWN0VUlDbG9zZWQoKXt0aGlzLnNldExpc3RlbmluZ0Ryb3Bkb3duTWVudSgpfXNldExpc3RlbmluZ0Ryb3Bk'@;
put 'b3duTWVudSgpe3RoaXMuZHJvcGRvd25NZW51UGx1Z2luJiZ0aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5zZXRMaXN0ZW5pbmcoKX11cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpe2NvbnN0IGw9dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLHtj'@;
put 'b21tYW5kOmF9PWwuZ2V0U3RhdGUoKSxkPVt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKV07YS5zaG93T3BlcmF0b3JzP3RoaXMuc2hvd0NvbXBvbmVudHMoLi4uZCk6dGhpcy5oaWRlQ29t'@;
put 'cG9uZW50cyguLi5kKX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuZW5hYmxlZCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmhhc0NvbmRpdGlvbnMoZCk/d2koYSwiaHRGaWx0ZXJzQWN0aXZlIik6c3MoYSwiaHRG'@;
put 'aWx0ZXJzQWN0aXZlIil9X2NyZWF0ZURhdGFGaWx0ZXIoKXtyZXR1cm4gbmV3IGFsZShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLGE9PnRoaXMuZ2V0RGF0YU1hcEF0Q29sdW1uKGEpKX11cGRh'@;
put 'dGVDb21wb25lbnRzKGwpe3ZhciBhO2lmKG51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWF8fCFhLmVuYWJsZWQpcmV0dXJuO2NvbnN0e2VkaXRlZENvbmRpdGlvblN0YWNrOntjb25kaXRpb25zOmQsY29sdW1uOmh9fT1sLGY9ZC5maWx0ZXIoVD0+VC5uYW1l'@;
put 'PT09bjYpLHY9ZC5maWx0ZXIoVD0+VC5uYW1lIT09bjYpO2lmKGYubGVuZ3RoPj0yfHx2Lmxlbmd0aD49MylibChXYWBUaGUgZmlsdGVyIGNvbmRpdGlvbnMgaGF2ZSBiZWVuIGFwcGxpZWQgcHJvcGVybHksIGJ1dCBjb3VsZG7igJl0IGJlIGRpc3BsYXllZCB2aXN1YWxseS5ceDIwCiAgICAg'@;
put 'ICAgVGhlIG92ZXJhbGwgYW1vdW50IG9mIGNvbmRpdGlvbnMgZXhjZWVkIHRoZSBjYXBhYmlsaXR5IG9mIHRoZSBkcm9wZG93biBtZW51Llx4MjAKICAgICAgICBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgZG9jdW1lbnRhdGlvbi5gKTtlbHNle2NvbnN0IFQ9dGhpcy5jb25kaXRpb25Db2xs'@;
put 'ZWN0aW9uLmdldE9wZXJhdGlvbihoKTt0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikudXBkYXRlU3RhdGUodlswXSxoKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLnVwZGF0ZVN0YXRlKHZbMV0saCksdGhpcy5jb21wb25lbnRz'@;
put 'LmdldCgiZmlsdGVyX29wZXJhdG9ycyIpLnVwZGF0ZVN0YXRlKFQsaCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikudXBkYXRlU3RhdGUobCl9fWdldEluZGV4ZXNPZkNvbXBvbmVudHMoKXtjb25zdCBsPVtdO2lmKCF0aGlzLmRyb3Bkb3duTWVudVBsdWdpbilyZXR1'@;
put 'cm4gbDtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFJuKGgsdj0+e1JuKGEubWVudUl0ZW1zLChULFkpPT57VC5rZXk9PT12Lmdl'@;
put 'dE1lbnVJdGVtRGVzY3JpcHRvcigpLmtleSYmbC5wdXNoKFkpfSl9KSxsfWNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5KCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTtpZighdGhpcy5kcm9wZG93bk1lbnVQbHVnaW4p'@;
put 'cmV0dXJuO2NvbnN0IGQ9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudS5ob3RNZW51LGg9ZC5nZXRQbHVnaW4oImhpZGRlblJvd3MiKTtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmPjE/Zi0xOjApLFQ9MTtUPGY7VCsrKXZbVC0xXT1hcmd1bWVudHNbVF07Y29u'@;
put 'c3QgWT10aGlzLmdldEluZGV4ZXNPZkNvbXBvbmVudHMoLi4udik7bD9oLnNob3dSb3dzKFkpOmguaGlkZVJvd3MoWSksZC5yZW5kZXIoKX1oaWRlQ29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRz'@;
put 'W2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoITEsLi4uYSl9c2hvd0NvbXBvbmVudHMoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmNoYW5nZUNvbXBvbmVudHNWaXNpYmlsaXR5'@;
put 'KCEwLC4uLmEpfWRlc3Ryb3koKXt0aGlzLmVuYWJsZWQmJih0aGlzLmNvbXBvbmVudHMuZm9yRWFjaCgobCxhKT0+e251bGwhPT1sJiYobC5kZXN0cm95KCksdGhpcy5jb21wb25lbnRzLnNldChhLG51bGwpKX0pLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5kZXN0cm95KCksdGhpcy5jb25k'@;
put 'aXRpb25VcGRhdGVPYnNlcnZlci5kZXN0cm95KCksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpKSxzdXBlci5kZXN0cm95KCl9fWNvbnN0IHVsZT0iaW50ZXJuYWwtdXNlLWluLWhhbmRzb250YWJsZSIsSXo9e2xpY2Vuc2VLZXk6dWxlLHVz'@;
put 'ZUFycmF5QXJpdGhtZXRpYzohMCx1c2VDb2x1bW5JbmRleDohMSx1c2VTdGF0czohMSxldmFsdWF0ZU51bGxUb1plcm86ITAscHJlY2lzaW9uRXBzaWxvbjoxZS0xMyxwcmVjaXNpb25Sb3VuZGluZzoxNCxzbWFydFJvdW5kaW5nOiEwLGxlYXBZZWFyMTkwMDohMSxudWxsRGF0ZTp7eWVhcjox'@;
put 'ODk5LG1vbnRoOjEyLGRheTozMH0sbnVsbFllYXI6MzAsZGF0ZUZvcm1hdHM6WyJERC9NTS9ZWVlZIiwiREQvTU0vWVkiXSx0aW1lRm9ybWF0czpbImhoOm1tIiwiaGg6bW06c3Muc3NzIl0sbWF0Y2hXaG9sZUNlbGw6ITAsdXNlUmVndWxhckV4cHJlc3Npb25zOiExLHVzZVdpbGRjYXJkczoh'@;
put 'MCxmdW5jdGlvbkFyZ1NlcGFyYXRvcjoiLCIsdGhvdXNhbmRTZXBhcmF0b3I6IiIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsbGFuZ3VhZ2U6ImVuR0IifTtmdW5jdGlvbiBkbGUoYyl7dmFyIGw7cmV0dXJue21heENvbHVtbnM6Yy5tYXhDb2x1bW5zLG1heFJvd3M6Yy5tYXhSb3dzLGxhbmd1YWdl'@;
put 'Om51bGw9PT0obD1jW3UwXSl8fHZvaWQgMD09PWx8fG51bGw9PT0obD1sLmxhbmd1YWdlKXx8dm9pZCAwPT09bD92b2lkIDA6bC5sYW5nQ29kZX19ZnVuY3Rpb24gaGxlKGMpe3JldHVybiBPYmplY3Qua2V5cyhjKS5yZWR1Y2UoKGwsYSk9PigiaHlwZXJmb3JtdWxhIiE9PWEmJihsW2FdPWNb'@;
put 'YV0pLGwpLHt9KX1mdW5jdGlvbiBCRCgpe2NvbnN0IGM9ImVuZ2luZV9yZWxhdGlvbnNoaXAiLGw9c2godTApO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gUnooKXtjb25zdCBjPSJzaGFyZWRfZW5naW5lX3VzYWdlIixs'@;
put 'PXNoKHUwKTtyZXR1cm4gbC5oYXNJdGVtKGMpfHxsLnJlZ2lzdGVyKGMsbmV3IE1hcCksbC5nZXRJdGVtKGMpfWZ1bmN0aW9uIGZsZShjKXt2YXIgbDtjb25zdCBhPUJEKCksZD0wPT09YS5zaXplP1tdOkFycmF5LmZyb20obnVsbCE9PShsPWEuZ2V0KGMpKSYmdm9pZCAwIT09bD9sOltdKTty'@;
put 'ZXR1cm4gbmV3IE1hcChkLm1hcChoPT5baC5nZXRQbHVnaW4oImZvcm11bGFzIikuc2hlZXRJZCxoXSkpfWZ1bmN0aW9uIHBsZShjLGwpe2lmKGMpe2NvbnN0IGE9QkQoKSxkPWEuZ2V0KGMpLGg9UnooKSxmPWguZ2V0KGMpO2QmJmQuaW5jbHVkZXMobCkmJihkLnNwbGljZShkLmluZGV4T2Yo'@;
put 'bCksMSksMD09PWQubGVuZ3RoJiZhLmRlbGV0ZShjKSksZiYmZi5pbmNsdWRlcyhsLmd1aWQpJiYoZi5zcGxpY2UoZi5pbmRleE9mKGwuZ3VpZCksMSksMD09PWYubGVuZ3RoJiYoaC5kZWxldGUoYyksYy5kZXN0cm95KCkpKX19Y29uc3QgbWxlPSJERC9NTS9ZWVlZIjtmdW5jdGlvbiBnbGUo'@;
put 'Yyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjJiYiJyI9PT1jLmNoYXJBdCgwKSYmIj0iPT09Yy5jaGFyQXQoMSl9ZnVuY3Rpb24gT3ooYyxsKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiJkYXRlIj09PWx9ZnVuY3Rpb24gX2xlKGMsbCl7cmV0dXJuIGRhKGMsbCwhMCkuaXNWYWxpZCgp'@;
put 'fWZ1bmN0aW9uIHZsZShjLGwpe3JldHVybiBkYShjLGwsITApLmZvcm1hdChtbGUpfWZ1bmN0aW9uIHh6ZShjLGwpe3JldHVybiBkYShjLG1sZSwhMCkuZm9ybWF0KGwpfWZ1bmN0aW9uIHlsZShjLGwpe2NvbnN0IGQ9bmV3IERhdGUoRGF0ZS5VVEMoMCwwLGMrLTEpKTtyZXR1cm4gZGEoZCku'@;
put 'Zm9ybWF0KGwpfWZ1bmN0aW9uIHI2KGMsbCxhKXsoZnVuY3Rpb24ga3plKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1m'@;
put 'dW5jdGlvbiBBbChjLGwpe3JldHVybiBmdW5jdGlvbiBFemUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGJsZShjLGwsImdldCIpKX1mdW5jdGlvbiBnbShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIFR6ZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEp'@;
put 'O2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsYmxlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBibGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIFh3PW5ldyBXZWFrTWFwLF9tPW5ldyBXZWFrTWFwLG1kPW5ldyBXZWFrTWFwLFlEPW5ldyBXZWFrTWFwLFB6PW5ldyBXZWFrTWFwLEZ6PW5ldyBXZWFr'@;
put 'TWFwLHpEPW5ldyBXZWFrTWFwO2NvbnN0IHdsZT1jbGFzcyBEemV7Y29uc3RydWN0b3IobCxhLGQpe3I2KHRoaXMsWHcse3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHI2KHRoaXMsX20se3dyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHI2KHRoaXMsbWQse3dyaXRhYmxlOiEwLHZhbHVl'@;
put 'OnZvaWQgMH0pLHI2KHRoaXMsWUQse3dyaXRhYmxlOiEwLHZhbHVlOltdfSkscjYodGhpcyxQeix7d3JpdGFibGU6ITAsdmFsdWU6W119KSxyNih0aGlzLEZ6LHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxyNih0aGlzLHpELHt3cml0YWJsZTohMCx2YWx1ZTpbXX0pLGdtKHRoaXMsWHcs'@;
put 'bCksZ20odGhpcyxfbSxhKSxnbSh0aGlzLG1kLGQpfXNldFJlbW92ZWRIZkluZGV4ZXMobCl7cmV0dXJuIGdtKHRoaXMsekQsbC5tYXAoYT0+e2NvbnN0IGQ9QWwodGhpcyxfbSkuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgoYSk7cmV0dXJuIHRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJ'@;
put 'bmRleChkKX0pKSxBbCh0aGlzLHpEKX1nZXRSZW1vdmVkSGZJbmRleGVzKCl7cmV0dXJuIEFsKHRoaXMsekQpfWdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT1BbCh0aGlzLF9tKS5nZXRJbmRleGVzU2VxdWVuY2UoKSxkPUFsKHRoaXMsX20pLmdldE5vdFRyaW1tZWRJbmRl'@;
put 'eGVzKCk7cmV0dXJuIGEuaW5kZXhPZihkW2xdKX1zeW5jTW92ZXMobCl7Y29uc3QgZD1gbW92ZSR7YTAoQWwodGhpcyxYdykpfXNgO0FsKHRoaXMsbWQpLmdldEVuZ2luZSgpLmJhdGNoKCgpPT57bC5mb3JFYWNoKGg9PntoLmZyb20hPT1oLnRvJiZoLmZyb20rMSE9PWgudG8mJkFsKHRoaXMs'@;
put 'bWQpLmdldEVuZ2luZSgpW2RdKEFsKHRoaXMsbWQpLmdldFNoZWV0SWQoKSxoLmZyb20sMSxoLnRvKX0pfSl9c3RvcmVNb3Zlc0luZm9ybWF0aW9uKGwsYSxkKXshMSE9PWQmJihnbSh0aGlzLFB6LGwubWFwKGg9PnRoaXMuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSkpLGdtKHRoaXMs'@;
put 'RnosdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpKSl9Z2V0TW92ZUxpbmUobCxhKXtjb25zdCBkPUFsKHRoaXMsX20pLmdldE51bWJlck9mSW5kZXhlcygpLGg9QXJyYXkuZnJvbShBcnJheShkKS5rZXlzKCkpLmZpbHRlcih2PT4hMT09PWwuaW5jbHVkZXModikpO3ZhciBmO3Jl'@;
put 'dHVybiAwPT09YT9udWxsIT09KGY9aFthXSkmJnZvaWQgMCE9PWY/ZjowOmhbYS0xXSsxfWdldEluaXRpYWxseUNhbGN1bGF0ZWRNb3ZlcyhsLGEpe2xldCBkPXRoaXMuZ2V0TW92ZUxpbmUobCxhKTtjb25zdCBoPVtdO3JldHVybiBsLmZvckVhY2goZj0+e2NvbnN0IHY9e2Zyb206Zix0bzpk'@;
put 'fTtoLmZvckVhY2goVD0+e1QuZnJvbT52LmZyb20mJlQudG88PXYuZnJvbSYmVC5mcm9tPlQudG8mJih2LmZyb20rPTEpfSksdi5mcm9tPj1kJiYoZCs9MSksaC5wdXNoKHYpfSksaH1hZGp1c3RlZENhbGN1bGF0ZWRNb3ZlcyhsKXtyZXR1cm4gbC5mb3JFYWNoKChhLGQpPT57bC5zbGljZShk'@;
put 'KzEpLmZvckVhY2goZj0+e2YuZnJvbT5hLmZyb20mJmYuZnJvbTxmLnRvJiYoZi5mcm9tLT0xKX0pfSksbH1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZihBbCh0aGlzLG1kKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29uc3QgZD10aGlzLmFk'@;
put 'anVzdGVkQ2FsY3VsYXRlZE1vdmVzKHRoaXMuZ2V0SW5pdGlhbGx5Q2FsY3VsYXRlZE1vdmVzKEFsKHRoaXMsUHopLEFsKHRoaXMsRnopKSk7bnVsbD09PUFsKHRoaXMsbWQpLmdldFNoZWV0SWQoKT9BbCh0aGlzLG1kKS5nZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkp'@;
put 'OnRoaXMuc3luY01vdmVzKGQpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgbD1gc2V0JHthMChBbCh0aGlzLFh3KSl9T3JkZXJgO3JldHVybiBhPT57aWYoQWwodGhpcyxtZCkuaXNQZXJmb3JtaW5nVW5kb1JlZG8oKSlyZXR1cm47Y29uc3QgZD1BbCh0aGlzLF9tKS5nZXRJ'@;
put 'bmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PWEpe2NvbnN0IGg9QWwodGhpcyxZRCkubWFwKFk9PmQuaW5kZXhPZihZKSksZj1BbCh0aGlzLG1kKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVuc2lvbnMoQWwodGhpcyxtZCkuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09QWwo'@;
put 'dGhpcyxYdyk/Zi5oZWlnaHQ6Zi53aWR0aDtmb3IobGV0IFk9aC5sZW5ndGg7WTx2O1krPTEpaC5wdXNoKFkpO0FsKHRoaXMsbWQpLmdldEVuZ2luZSgpW2xdKEFsKHRoaXMsbWQpLmdldFNoZWV0SWQoKSxoKX1nbSh0aGlzLFlELGQpfX1pbml0KCl7Z20odGhpcyxZRCxBbCh0aGlzLF9tKS5n'@;
put 'ZXRJbmRleGVzU2VxdWVuY2UoKSl9fTtmdW5jdGlvbiBpNihjLGwsYSl7KGZ1bmN0aW9uIEF6ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwp'@;
put 'LGwuc2V0KGMsYSl9ZnVuY3Rpb24gaHAoYyxsKXtyZXR1cm4gZnVuY3Rpb24gTHplKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxNbGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gbzYoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBJemUoYyxsLGEpe2lmKGwuc2V0KWwu'@;
put 'c2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLE1sZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gTWxlKGMsbCxhKXtpZighbC5oYXMoYykp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfXZhciBVRD1uZXcgV2Vha01hcCxaRD1uZXcgV2Vha01hcCxIej1uZXcgV2Vha01hcCxOej1uZXcgV2Vha01hcCxWej1uZXcgV2Vha01h'@;
put 'cCxqej1uZXcgV2Vha01hcCxCej1uZXcgV2Vha01hcDtjb25zdCBPemU9Y2xhc3MgUnple2NvbnN0cnVjdG9yKGwsYSxkKXtpNih0aGlzLFVELHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxpNih0aGlzLFpELHt3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxpNih0aGlzLEh6LHt3cml0'@;
put 'YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxpNih0aGlzLE56LHt3cml0YWJsZTohMCx2YWx1ZTohMX0pLGk2KHRoaXMsVnose3dyaXRhYmxlOiEwLHZhbHVlOiExfSksaTYodGhpcyxqeix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLGk2KHRoaXMsQnose3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9'@;
put 'KSxvNih0aGlzLFVELG5ldyB3bGUoInJvdyIsbCx0aGlzKSksbzYodGhpcyxaRCxuZXcgd2xlKCJjb2x1bW4iLGEsdGhpcykpLG82KHRoaXMsSHosZCl9Z2V0Rm9yQXhpcyhsKXtyZXR1cm4gaHAodGhpcywicm93Ij09PWw/VUQ6WkQpfXNldFBlcmZvcm1VbmRvKGwpe282KHRoaXMsTnosbCl9'@;
put 'c2V0UGVyZm9ybVJlZG8obCl7bzYodGhpcyxWeixsKX1pc1BlcmZvcm1pbmdVbmRvUmVkbygpe3JldHVybiBocCh0aGlzLE56KXx8aHAodGhpcyxWeil9Z2V0U2hlZXRJZCgpe3JldHVybiBocCh0aGlzLEJ6KX1nZXRFbmdpbmUoKXtyZXR1cm4gaHAodGhpcyxqeil9Z2V0UG9zdHBvbmVBY3Rp'@;
put 'b24oKXtyZXR1cm4gaHAodGhpcyxIeil9c2V0dXBTeW5jRW5kcG9pbnQobCxhKXtvNih0aGlzLGp6LGwpLG82KHRoaXMsQnosYSksaHAodGhpcyxVRCkuaW5pdCgpLGhwKHRoaXMsWkQpLmluaXQoKX19O2Z1bmN0aW9uIFY5KGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBQemUoYyl7dmFyIGw9'@;
put 'ZnVuY3Rpb24gRnplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9P'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gWXooYyxsLGEpeyhmdW5jdGlvbiBIemUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qg'@;
put 'aW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHZtKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gTnplKGMsbCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJs'@;
put 'ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxDbGUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIGo5KGMsbCl7cmV0dXJuIGZ1bmN0aW9uIFZ6ZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxs'@;
put 'KGMpOmwudmFsdWV9KGMsQ2xlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIENsZShjLGwsYSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCB1MD0iZm9y'@;
put 'bXVsYXMiLGp6ZT1bIm1heFJvd3MiLCJtYXhDb2x1bW5zIiwibGFuZ3VhZ2UiXTthby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZCIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiKSxhby5n'@;
put 'ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJTaGVldEFkZGVkIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW1vdmVkIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRSZW5hbWVkIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIo'@;
put 'ImFmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGUiKTtjb25zdCBCOT1jPT4iVW5kb1JlZG8udW5kbyI9PT1jfHwiVW5kb1JlZG8ucmVkbyI9PT1jfHwiYXV0byI9PT1jO3ZhciBmcD1uZXcgV2Vha01hcCx6ej1uZXcgV2Vha01hcCxKdz1uZXcgV2Vha01hcDtjbGFzcyBZemUgZXh0ZW5kcyBzYXtj'@;
put 'b25zdHJ1Y3Rvcigpe3ZhciBsO3N1cGVyKC4uLmFyZ3VtZW50cyksbD10aGlzLFl6KHRoaXMsZnAse3dyaXRhYmxlOiEwLHZhbHVlOiExfSksWXoodGhpcyx6eix7d3JpdGFibGU6ITAsdmFsdWU6ITF9KSxZeih0aGlzLEp3LHt3cml0YWJsZTohMCx2YWx1ZTpbWyJ2YWx1ZXNVcGRhdGVkIixm'@;
put 'dW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lVmFsdWVzVXBkYXRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNBZGRlZCguLi5hcmd1bWVudHMpfV0sWyJuYW1lZEV4cHJlc3Npb25S'@;
put 'ZW1vdmVkIixmdW5jdGlvbigpe3JldHVybiBsLm9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1JlbW92ZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0QWRkZWQoLi4uYXJndW1lbnRzKX1dLFsic2hlZXRSZW5hbWVkIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBsLm9uRW5naW5lU2hlZXRSZW5hbWVkKC4uLmFyZ3VtZW50cyl9XSxbInNoZWV0UmVtb3ZlZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkVuZ2luZVNoZWV0UmVtb3ZlZCguLi5hcmd1bWVudHMpfV1dfSksVjkodGhpcywic3RhdGljUmVnaXN0ZXIiLHNoKCJmb3JtdWxh'@;
put 'cyIpKSxWOSh0aGlzLCJlbmdpbmUiLG51bGwpLFY5KHRoaXMsInNoZWV0TmFtZSIsbnVsbCksVjkodGhpcywiaW5kZXhTeW5jZXIiLG51bGwpLFY5KHRoaXMsInJvd0F4aXNTeW5jZXIiLG51bGwpLFY5KHRoaXMsImNvbHVtbkF4aXNTeW5jZXIiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tF'@;
put 'WSgpe3JldHVybiB1MH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyNjB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm5bdTAsLi4uanplXX1nZXQgc2hlZXRJZCgpe3JldHVybiBudWxsPT09dGhpcy5zaGVldE5hbWU/bnVsbDp0aGlzLmVuZ2luZS5nZXRTaGVl'@;
put 'dElkKHRoaXMuc2hlZXROYW1lKX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdTBdfWVuYWJsZVBsdWdpbigpe3ZhciBsLGE9dGhpcztpZighdGhpcy5lbmFibGVkKXtpZih0aGlzLmVuZ2luZT1udWxsIT09KGw9ZnVuY3Rpb24gX3plKGMpe2NvbnN0IGw9Yy5n'@;
put 'ZXRTZXR0aW5ncygpLGE9bFt1MF0sZD1hPy5lbmdpbmU7aWYoITA9PT1hfHxpbChkKSlyZXR1cm4gbnVsbDt2YXIgaDtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC5oeXBlcmZvcm11bGF8fCJmdW5jdGlvbiI9PXR5cGVvZiBkKXJldHVybiBmdW5jdGlvbiB2emUoYyxsLGEpe2NvbnN0IGQ9bFt1'@;
put 'MF0saD1mdW5jdGlvbiBwemUoYyl7dmFyIGw7Y29uc3QgYT1jW3UwXSxkPWhsZShudWxsIT1hJiZudWxsIT09KGw9YS5lbmdpbmUpJiZ2b2lkIDAhPT1sJiZsLmh5cGVyZm9ybXVsYT9hLmVuZ2luZTp7fSksaD1kbGUoYyk7cmV0dXJuey4uLkl6LC4uLmQsLi4uaH19KGwpLGY9QkQoKSx2PVJ6'@;
put 'KCk7KGZ1bmN0aW9uIHl6ZShjLGwpe2wmJmwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLHBsdWdpbjpoLHRyYW5zbGF0aW9uczpmfT1hO3RyeXtjLnJlZ2lzdGVyRnVuY3Rpb24oZCxoLGYpfWNhdGNoKHYpe2JsKHYubWVzc2FnZSl9fSl9KShjLGQuZnVuY3Rpb25zKSxmdW5jdGlvbiBiemUo'@;
put 'YyxsKXtpZihsKXtjb25zdHtsYW5nQ29kZTphfT1sO3RyeXtjLnJlZ2lzdGVyTGFuZ3VhZ2UoYSxsKX1jYXRjaChkKXtibChkLm1lc3NhZ2UpfX19KGMsZC5sYW5ndWFnZSk7Y29uc3QgVD1jLmJ1aWxkRW1wdHkoaCk7cmV0dXJuIGYuc2V0KFQsW2FdKSx2LnNldChULFthLmd1aWRdKSxmdW5j'@;
put 'dGlvbiB3emUoYyxsKXtsJiYoYy5zdXNwZW5kRXZhbHVhdGlvbigpLGwuZm9yRWFjaChhPT57Y29uc3R7bmFtZTpkLGV4cHJlc3Npb246aCxzY29wZTpmLG9wdGlvbnM6dn09YTt0cnl7Yy5hZGROYW1lZEV4cHJlc3Npb24oZCxoLGYsdil9Y2F0Y2goVCl7YmwoVC5tZXNzYWdlKX19KSxjLnJl'@;
put 'c3VtZUV2YWx1YXRpb24oKSl9KFQsZC5uYW1lZEV4cHJlc3Npb25zKSxULm9uKCJzaGVldEFkZGVkIiwoKT0+e1QucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxULm9uKCJzaGVldFJlbW92ZWQiLCgpPT57VC5yZWJ1aWxkQW5kUmVjYWxjdWxhdGUoKX0pLFR9KG51bGwhPT0oaD1kLmh5cGVy'@;
put 'Zm9ybXVsYSkmJnZvaWQgMCE9PWg/aDpkLGwsYyk7aWYoIm9iamVjdCI9PXR5cGVvZiBkJiZpbChkLmh5cGVyZm9ybXVsYSkpe2NvbnN0IGY9QkQoKSx2PVJ6KCkuZ2V0KGQpO3JldHVybiBmLmhhcyhkKXx8Zi5zZXQoZCxbXSksZi5nZXQoZCkucHVzaChjKSx2JiZ2LnB1c2goYy5ndWlkKSxk'@;
put 'LmdldENvbmZpZygpLmxpY2Vuc2VLZXl8fGQudXBkYXRlQ29uZmlnKHtsaWNlbnNlS2V5OnVsZX0pLChkLmdldENvbmZpZygpLmxlYXBZZWFyMTkwMCE9PUl6LmxlYXBZZWFyMTkwMHx8ITE9PT13VChkLmdldENvbmZpZygpLm51bGxEYXRlLEl6Lm51bGxEYXRlKSkmJmJsKFdhYElmIHlvdSB1'@;
put 'c2UgSHlwZXJGb3JtdWxhIHdpdGggSGFuZHNvbnRhYmxlLCBrZWVwIHRoZSBkZWZhdWx0IFxgbGVhcFllYXIxOTAwXGAgYW5kIFxgbnVsbERhdGVcYCAKICAgICAgc2V0dGluZ3MuIE90aGVyd2lzZSwgSHlwZXJGb3JtdWxhJ3MgZGF0ZXMgbWF5IG5vdCBzeW5jIGNvcnJlY3RseSB3aXRoIEhh'@;
put 'bmRzb250YWJsZSdzIGRhdGVzLmApLGR9cmV0dXJuIG51bGx9KHRoaXMuaG90KSkmJnZvaWQgMCE9PWw/bDp0aGlzLmVuZ2luZSwhdGhpcy5lbmdpbmUpcmV0dXJuIHZvaWQgYmwoIk1pc3NpbmcgdGhlIHJlcXVpcmVkIGBlbmdpbmVgIGtleSBpbiB0aGUgRm9ybXVsYXMgc2V0dGluZ3MuIFBs'@;
put 'ZWFzZSBmaWxsIGl0IHdpdGggZWl0aGVyIGFuIGVuZ2luZSBjbGFzcyBvciBhbiBlbmdpbmUgaW5zdGFuY2UuIik7aWYobnVsbCE9PXRoaXMuc2hlZXROYW1lJiYhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpKXtjb25zdCBkPXRoaXMuYWRkU2hlZXQodGhpcy5z'@;
put 'aGVldE5hbWUsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkpOyExIT09ZCYmKHRoaXMuc2hlZXROYW1lPWQpfXRoaXMuYWRkSG9vaygiYmVmb3JlTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJh'@;
put 'ZnRlckxvYWREYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQmVmb3JlTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi'@;
put 'YWZ0ZXJVcGRhdGVEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJMb2FkRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5RGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlT'@;
put 'b3VyY2VEYXRhIixmdW5jdGlvbigpe3JldHVybiBhLm9uTW9kaWZ5U291cmNlRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWYWxpZGF0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9yZVZhbGlkYXRlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFm'@;
put 'dGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldERhdGFBdENlbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlclNldERhdGFBdENlbGwoLi4u'@;
put 'YXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe3JldHVybiBhLm9uQWZ0ZXJTZXREYXRhQXRDZWxsKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNyZWF0ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkJlZm9y'@;
put 'ZUNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVDcmVhdGVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25B'@;
put 'ZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyQ3JlYXRlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gYS5v'@;
put 'bkJlZm9yZVJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVSZW1vdmVDb2woLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IGEub25BZnRlclJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyUmVtb3ZlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmluZGV4U3luY2VyPW5ldyBPemUodGhpcy5ob3Qucm93SW5kZXhNYXBw'@;
put 'ZXIsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsZD0+e3RoaXMuaG90LmFkZEhvb2tPbmNlKCJpbml0IiwoKT0+e2QoKX0pfSksdGhpcy5yb3dBeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5jZXIuZ2V0Rm9yQXhpcygicm93IiksdGhpcy5jb2x1bW5BeGlzU3luY2VyPXRoaXMuaW5kZXhTeW5j'@;
put 'ZXIuZ2V0Rm9yQXhpcygiY29sdW1uIiksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsdGhpcy5yb3dBeGlzU3luY2VyLmdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLHRoaXMu'@;
put 'Y29sdW1uQXhpc1N5bmNlci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVSb3dNb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9y'@;
put 'ZUNvbHVtbk1vdmUiLChkLGgsZix2KT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oZCxoLHYpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJSb3dNb3ZlIiwoZCxoLGYsdixUKT0+e3RoaXMucm93QXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMo'@;
put 'dixUKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uTW92ZSIsKGQsaCxmLHYsVCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsVCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5GcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5B'@;
put 'eGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihbZF0sdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5j'@;
put 'TW92ZXMoaCxoKX0pLHRoaXMuaG90LmFkZEhvb2soImJlZm9yZUNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSxoKX0pLHRoaXMuaG90'@;
put 'LmFkZEhvb2soImFmdGVyQ29sdW1uVW5mcmVlemUiLChkLGgpPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1bGF0ZUFuZFN5bmNNb3ZlcyhoLGgpfSksdGhpcy5hZGRIb29rKCJhZnRlckNlbGxNZXRhUmVzZXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25BZnRlckNlbGxNZXRhUmVzZXQo'@;
put 'Li4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCEwKSx0aGlzLmVuZ2luZS51bmRvKCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtUmVk'@;
put 'byghMCksdGhpcy5lbmdpbmUucmVkbygpfSksdGhpcy5hZGRIb29rKCJhZnRlclVuZG8iLCgpPT57dGhpcy5pbmRleFN5bmNlci5zZXRQZXJmb3JtVW5kbyghMSl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCExKX0pLHRo'@;
put 'aXMuYWRkSG9vaygiYWZ0ZXJEZXRhY2hDaGlsZCIsZnVuY3Rpb24oKXtyZXR1cm4gYS5vbkFmdGVyRGV0YWNoQ2hpbGQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQXV0b2ZpbGwiLGZ1bmN0aW9uKCl7cmV0dXJuIGEub25CZWZvcmVBdXRvZmlsbCguLi5hcmd1bWVudHMp'@;
put 'fSksajkodGhpcyxKdykuZm9yRWFjaChkPT57bGV0W2gsZl09ZDtyZXR1cm4gdGhpcy5lbmdpbmUub24oaCxmKX0pLHN1cGVyLmVuYWJsZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7ajkodGhpcyxKdykuZm9yRWFjaChsPT57bGV0W2EsZF09bDtyZXR1cm4gdGhpcy5lbmdpbmUub2ZmKGEs'@;
put 'ZCl9KSxwbGUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbihsKXtjb25zdCBhPWZ1bmN0aW9uIG16ZShjKXt2YXIgbDtjb25zdCBhPWNbdTBdO3JldHVybnsuLi5obGUobnVsbCE9YSYmbnVsbCE9PShsPWEu'@;
put 'ZW5naW5lKSYmdm9pZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLC4uLmRsZShjKX19KHRoaXMuaG90LmdldFNldHRpbmdzKCkpOyhmdW5jdGlvbiBnemUoYyxsKXtyZXR1cm4gT2JqZWN0LmtleXMobCkuc29tZShhPT52b2lkIDAhPT1sW2FdJiZsW2FdIT09Y1thXSl9KSh0'@;
put 'aGlzLmVuZ2luZS5nZXRDb25maWcoKSxhKSYmdGhpcy5lbmdpbmUudXBkYXRlQ29uZmlnKGEpO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1MF07aWYoZW8oZCkmJmVvKGQuc2hlZXROYW1lKSYmZC5zaGVldE5hbWUhPT10aGlzLnNoZWV0TmFtZSYmdGhpcy5zd2l0Y2hTaGVldChk'@;
put 'LnNoZWV0TmFtZSksIWwuZGF0YSYmbnVsbD09PXRoaXMuc2hlZXROYW1lKXtjb25zdCBoPXRoaXMuaG90LmdldFNldHRpbmdzKClbdTBdLnNoZWV0TmFtZTtoJiZ0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdChoKT90aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTp0aGlzLnNoZWV0'@;
put 'TmFtZT10aGlzLmFkZFNoZWV0KGg/P3ZvaWQgMCx0aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXJyYXkoKSl9c3VwZXIudXBkYXRlUGx1Z2luKGwpfWRlc3Ryb3koKXtqOSh0aGlzLEp3KS5mb3JFYWNoKGw9Pnt2YXIgYTtsZXRbZCxoXT1sO3JldHVybiBudWxsPT09KGE9dGhpcy5lbmdpbmUpfHx2'@;
put 'b2lkIDA9PT1hP3ZvaWQgMDphLm9mZihkLGgpfSksdm0odGhpcyxKdyxudWxsKSxwbGUodGhpcy5lbmdpbmUsdGhpcy5ob3QpLHRoaXMuZW5naW5lPW51bGwsc3VwZXIuZGVzdHJveSgpfWFkZFNoZWV0KGwsYSl7aWYoZW8oYSkmJiFXb2UoYSkpcmV0dXJuIGJsKCJUaGUgcHJvdmlkZWQgZGF0'@;
put 'YSBzaG91bGQgYmUgYW4gYXJyYXkgb2YgYXJyYXlzLiIpLCExO2lmKG51bGwhPWwmJnRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiBibCgiU2hlZXQgd2l0aCB0aGUgcHJvdmlkZWQgbmFtZSBhbHJlYWR5IGV4aXN0cy4iKSwhMTt0cnl7Y29uc3QgZD10aGlzLmVuZ2luZS5h'@;
put 'ZGRTaGVldChsPz92b2lkIDApO3JldHVybiBhJiZ0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5lbmdpbmUuZ2V0U2hlZXRJZChkKSxhKSxkfWNhdGNoKGQpe3JldHVybiBibChkLm1lc3NhZ2UpLCExfX1zd2l0Y2hTaGVldChsKXtpZighdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhp'@;
put 'c3QobCkpcmV0dXJuIHZvaWQgcmooYFRoZSBzaGVldCBuYW1lZCBcYCR7bH1cYCBkb2VzIG5vdCBleGlzdCwgc3dpdGNoIGFib3J0ZWQuYCk7dGhpcy5zaGVldE5hbWU9bDtjb25zdCBhPXRoaXMuZW5naW5lLmdldFNoZWV0U2VyaWFsaXplZCh0aGlzLnNoZWV0SWQpO2EubGVuZ3RoPjAmJnRo'@;
put 'aXMuaG90LmxvYWREYXRhKGEsYCR7YTAodTApfS5zd2l0Y2hTaGVldGApfWdldENlbGxUeXBlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuc2hlZXRJZDtjb25zdCBoPXRoaXMuaG90LnRvUGh5c2ljYWxSb3co'@;
put 'bCksZj10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpO3JldHVybiBudWxsIT09aCYmbnVsbCE9PWY/dGhpcy5lbmdpbmUuZ2V0Q2VsbFR5cGUoe3NoZWV0OmQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNT'@;
put 'eW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pOiJFTVBUWSJ9aXNGb3JtdWxhQ2VsbFR5cGUobCxhKXtyZXR1cm4gdGhpcy5lbmdpbmUuZG9lc0NlbGxIYXZlRm9ybXVsYSh7c2hlZXQ6YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRz'@;
put 'WzJdOnRoaXMuc2hlZXRJZCxyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpfSl9cmVuZGVyRGVwZW5kZW50U2hlZXRzKGwpe2xldCBhPWFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgZD1uZXcgU2V0O2wuZm9yRWFjaChoPT57dmFyIGY7Y29uc3Qgdj1udWxsPT1ofHxudWxsPT09KGY9aC5hZGRyZXNzKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5zaGVldDt2b2lkIDAhPT12JiYoZC5o'@;
put 'YXModil8fGQuYWRkKHYpKX0pLGZsZSh0aGlzLmVuZ2luZSkuZm9yRWFjaCgoaCxmKT0+e3ZhciB2OyhhfHxmIT09dGhpcy5zaGVldElkKSYmZC5oYXMoZikmJihoLnJlbmRlcigpLG51bGw9PT0odj1oLnZpZXcpfHx2b2lkIDA9PT12fHx2LmFkanVzdEVsZW1lbnRzU2l6ZSgpKX0pfXZhbGlk'@;
put 'YXRlRGVwZW5kZW50Q2VsbHMobCl7Y29uc3QgZD1mPT57dmFyIHY7Y29uc3R7cm93OlQsY29sOlksc2hlZXQ6cmV9PW51bGwhPT0odj1mPy5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O3JldHVybiBlbyhyZSk/YCR7cmV9OiR7VH14JHtZfWA6IiJ9LGg9bmV3IFNldCgoYXJndW1lbnRzLmxl'@;
put 'bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdKS5tYXAoZj0+ZChmKSkpO2wuZm9yRWFjaChmPT57dmFyIHYsVDtjb25zdHtyb3c6WSxjb2w6cmV9PW51bGwhPT0odj1mLmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307aWYoITE9PT1lbyhZKXx8ITE9PT1lbyhy'@;
put 'ZSl8fFk+PXRoaXMuaG90LmNvdW50Um93cygpfHxyZT49dGhpcy5ob3QuY291bnRDb2xzKCkpcmV0dXJuO2NvbnN0IGZlPW51bGw9PWZ8fG51bGw9PT0oVD1mLmFkZHJlc3MpfHx2b2lkIDA9PT1UP3ZvaWQgMDpULnNoZWV0LF9lPWQoZik7aWYodm9pZCAwIT09ZmUmJiFoLmhhcyhfZSkpe2Nv'@;
put 'bnN0IGtlPWZsZSh0aGlzLmVuZ2luZSkuZ2V0KGZlKTtpZigha2UpcmV0dXJuO2tlLnZhbGlkYXRlQ2VsbChrZS5nZXREYXRhQXRDZWxsKFkscmUpLGtlLmdldENlbGxNZXRhKFkscmUpLCgpPT57fSl9fSl9c3luY0NoYW5nZVdpdGhFbmdpbmUobCxhLGQpe2NvbnN0IGg9e3Jvdzp0aGlzLnJv'@;
put 'd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSksc2hlZXQ6dGhpcy5zaGVldElkfTtpZighdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9TZXRDZWxsQ29udGVudHMoaCkp'@;
put 'cmV0dXJuIHZvaWQgYmwoYE5vdCBwb3NzaWJsZSB0byBzZXQgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoaCl9YCk7Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpO3JldHVybiBPeihkLGYudHlwZSkmJihfbGUoZCxmLmRhdGVGb3JtYXQpP2Q9dmxlKGQsZi5kYXRlRm9y'@;
put 'bWF0KTohMT09PWZ1bmN0aW9uIFN6ZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJmMuc3RhcnRzV2l0aCgiPSIpfShkKSYmKGQ9YCcke2R9YCkpLHRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhoLGQpfW9uQmVmb3JlVmFsaWRhdGUobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QucHJv'@;
put 'cFRvQ29sKGQpO2lmKHRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoYSxoKSl7Y29uc3QgZj17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChoKSxzaGVldDp0'@;
put 'aGlzLnNoZWV0SWR9LHY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxoKTtsZXQgVD10aGlzLmVuZ2luZS5nZXRDZWxsVmFsdWUoZik7cmV0dXJuImRhdGUiPT09di50eXBlJiZSMChUKSYmKFQ9eWxlKFQsdi5kYXRlRm9ybWF0KSksIm9iamVjdCI9PXR5cGVvZiBUJiZudWxsIT09VD9ULnZhbHVl'@;
put 'OlR9cmV0dXJuIGx9b25CZWZvcmVBdXRvZmlsbChsLGEsZCl7Y29uc3R7cm93OmgsY29sOmZ9PWEuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OnYsY29sOlR9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCkse3JvdzpZLGNvbDpyZX09ZC5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6ZmUsY29sOl9l'@;
put 'fT1kLmdldEJvdHRvbUVuZENvcm5lcigpLGtlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVu'@;
put 'ZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxzaGVldDp0aGlzLnNoZWV0SWR9fSxXZT17c3RhcnQ6e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIu'@;
put 'Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChZKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgocmUpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZmUpLGNv'@;
put 'bDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChfZSksc2hlZXQ6dGhpcy5zaGVldElkfX07aWYoITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhXZSkpcmV0dXJuITE7Y29uc3QgSmU9dGhpcy5lbmdpbmUuZ2V0Rmls'@;
put 'bFJhbmdlRGF0YShrZSxXZSkse3Jvdzp0dCxjb2w6eXR9PWtlLnN0YXJ0LHtyb3c6d3QsY29sOkx0fT1rZS5lbmQsb249d3QtdHQrMSxzbj1MdC15dCsxO2ZvcihsZXQgTW49MDtNbjxKZS5sZW5ndGg7TW4rPTEpZm9yKGxldCBWbj0wO1ZuPEplW01uXS5sZW5ndGg7Vm4rPTEpe2NvbnN0IHVy'@;
put 'PUplW01uXVtWbl0sVHI9TW4lb24sUGk9Vm4lc24sSGk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoVHIsUGkpO096KHVyLEhpLnR5cGUpJiYodXIuc3RhcnRzV2l0aCgiJyIpP0plW01uXVtWbl09dXIuc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKFRyLFBpLHRoaXMuc2hlZXRJ'@;
put 'ZCkmJihKZVtNbl1bVm5dPXh6ZSh1cixIaS5kYXRlRm9ybWF0KSkpfXJldHVybiBKZX1vbkJlZm9yZUxvYWREYXRhKGwsYSl7KGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYTAodTApKXx8dm0odGhpcyx6eixpbCh0'@;
put 'aGlzLmhvdC5nZXRTZXR0aW5ncygpLmRhdGEpKX1vbkFmdGVyQ2VsbE1ldGFSZXNldCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7bGV0IGE9ITE7bC5mb3JFYWNoKChkLGgpPT57ZC5mb3JFYWNoKChmLHYpPT57Y29uc3QgVD10aGlzLmhvdC5nZXRDZWxsTWV0YSho'@;
put 'LHYpLFk9VC5kYXRlRm9ybWF0O096KGYsVC50eXBlKSYmKGE9ITAsX2xlKGYsWSk/bFtoXVt2XT12bGUoZixZKTohMT09PXRoaXMuaXNGb3JtdWxhQ2VsbFR5cGUoaCx2KSYmKGxbaF1bdl09YCcke2Z9YCkpfSl9KSwhMD09PWEmJih2bSh0aGlzLGZwLCEwKSx0aGlzLmVuZ2luZS5zZXRTaGVl'@;
put 'dENvbnRlbnQodGhpcy5zaGVldElkLGwpLHZtKHRoaXMsZnAsITEpKX1vbkFmdGVyTG9hZERhdGEobCxhKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoYTAodTApKSlpZih0aGlzLnNoZWV0TmFtZT1mdW5j'@;
put 'dGlvbiBNemUoYyxsKXtyZXR1cm4oaWwobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt1MF0uc2hlZXROYW1lKSxqOSh0aGlzLHp6KSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1l'@;
put 'KTtlbHNle2NvbnN0IGg9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRDb250ZW50KHRoaXMuc2hlZXRJZCxoKSl7dm0odGhpcyxmcCwhMCk7Y29uc3QgZj10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhp'@;
put 'cy5zaGVldElkLGgpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKSx2bSh0aGlzLGZwLCExKX19fW9uTW9kaWZ5RGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fGo5KHRoaXMs'@;
put 'ZnApfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCk7aWYobnVsbD09PWZ8fG51bGw9PT1hKXJldHVybjtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlw'@;
put 'ZShmLGEpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLGEpKXJldHVybiB2b2lkKGdsZShkLnZhbHVlKSYmKGQudmFsdWU9ZnVuY3Rpb24gQ3plKGMpe3JldHVybiBnbGUoYyk/Yy5zdWJzdHIoMSk6Y30oZC52YWx1ZSkpKTtjb25zdCBUPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdl'@;
put 'dEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGEpLHNoZWV0OnRoaXMuc2hlZXRJZH07bGV0IFk9dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKFQpO2NvbnN0IHJlPXRoaXMuaG90LmdldENlbGxNZXRh'@;
put 'KGYsYSk7ImRhdGUiPT09cmUudHlwZSYmUjAoWSkmJihZPXlsZShZLHJlLmRhdGVGb3JtYXQpKSxkLnZhbHVlPSJvYmplY3QiPT10eXBlb2YgWSYmbnVsbCE9PVk/WS52YWx1ZTpZfW9uTW9kaWZ5U291cmNlRGF0YShsLGEsZCxoKXtpZigiZ2V0IiE9PWh8fGo5KHRoaXMsZnApfHxudWxsPT09'@;
put 'dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5ob3QudG9WaXN1YWxSb3cobCksdj10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYobnVsbD09PWZ8fG51bGw9PT12fHwhdGhpcy5pc0Zvcm11bGFDZWxs'@;
put 'VHlwZShmLHYpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShmLHYpKXJldHVybjtjb25zdCBZPXRoaXMuZW5naW5lLmdldFNoZWV0RGltZW5zaW9ucyh0aGlzLmVuZ2luZS5nZXRTaGVldElkKHRoaXMuc2hlZXROYW1lKSk7aWYoMD09PVkud2lkdGgmJjA9PT1ZLmhlaWdodClyZXR1cm47'@;
put 'Y29uc3QgcmU9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksc2hlZXQ6dGhpcy5zaGVldElkfTtkLnZhbHVlPXRoaXMuZW5naW5lLmdldENlbGxT'@;
put 'ZXJpYWxpemVkKHJlKX1vbkFmdGVyU2V0RGF0YUF0Q2VsbChsLGEpe2lmKEI5KGEpKXJldHVybjtjb25zdCBkPVtdLGg9W10sZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2wuZm9yRWFjaCh2PT57bGV0W1QsWSwscmVdPXY7Y29uc3QgZmU9dGhpcy5ob3QucHJvcFRvQ29sKFkpLF9lPXRoaXMu'@;
put 'aG90LnRvUGh5c2ljYWxSb3coVCksa2U9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihmZSksV2U9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChUKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZmUp'@;
put 'LHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PV9lJiZudWxsIT09a2U/dGhpcy5zeW5jQ2hhbmdlV2l0aEVuZ2luZShULGZlLHJlKTpkLnB1c2goW1QsZmUscmVdKSxoLnB1c2goe2FkZHJlc3M6V2V9KX0pfSk7ZC5sZW5ndGgmJnRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIs'@;
put 'KCk9Pntjb25zdCB2PXRoaXMuZW5naW5lLmJhdGNoKCgpPT57ZC5mb3JFYWNoKFQ9PntsZXRbWSxyZSxmZV09VDt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKFkscmUsZmUpfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyh2LCEwKX0pLHRoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRz'@;
put 'KGYpLHRoaXMudmFsaWRhdGVEZXBlbmRlbnRDZWxscyhmLGgpfW9uQWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsKGwsYSl7aWYoQjkoYSkpcmV0dXJuO2NvbnN0IGQ9W10saD1bXTtsLmZvckVhY2goZj0+e2xldFt2LFQsLFldPWY7Y29uc3QgcmU9dGhpcy5ob3QucHJvcFRvQ29sKFQpO2lmKCFS'@;
put 'MChyZSkpcmV0dXJuO2NvbnN0IGZlPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHJlKSxzaGVldDp0aGlzLnNoZWV0SWR9O3RoaXMuZW5naW5lLmlz'@;
put 'SXRQb3NzaWJsZVRvU2V0Q2VsbENvbnRlbnRzKGZlKT8oaC5wdXNoKHthZGRyZXNzOmZlfSksZC5wdXNoKC4uLnRoaXMuZW5naW5lLnNldENlbGxDb250ZW50cyhmZSxZKSkpOmJsKGBOb3QgcG9zc2libGUgdG8gc2V0IHNvdXJjZSBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeShmZSl9'@;
put 'YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhkKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoZCxoKX1vbkJlZm9yZUNyZWF0ZVJvdyhsLGEpe2xldCBkPXRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpO2lmKGw+PXRoaXMuaG90LmNvdW50'@;
put 'Um93cygpJiYoZD1sKSxudWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRSb3dzKHRoaXMuc2hlZXRJZCxbZCxhXSkpcmV0dXJuITF9b25CZWZvcmVDcmVhdGVDb2wobCxh'@;
put 'KXtsZXQgZD10aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKTtpZihsPj10aGlzLmhvdC5jb3VudENvbHMoKSYmKGQ9bCksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMu'@;
put 'ZW5naW5lLmlzSXRQb3NzaWJsZVRvQWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW2QsYV0pKXJldHVybiExfW9uQmVmb3JlUmVtb3ZlUm93KGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KHY9PnRoaXMuZW5naW5lLmlzSXRQ'@;
put 'b3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pKSYmdm9pZCAwfW9uQmVmb3JlUmVtb3ZlQ29sKGwsYSxkKXtyZXR1cm4hMSE9PXRoaXMuY29sdW1uQXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGQpLmV2ZXJ5KHY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRv'@;
put 'UmVtb3ZlQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3YsMV0pKSYmdm9pZCAwfW9uQWZ0ZXJDcmVhdGVSb3cobCxhLGQpe2lmKEI5KGQpKXJldHVybjtjb25zdCBoPXRoaXMuZW5naW5lLmFkZFJvd3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ'@;
put 'bmRleChsKSxhXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoaCl9b25BZnRlckNyZWF0ZUNvbChsLGEsZCl7aWYoQjkoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5lbmdpbmUuYWRkQ29sdW1ucyh0aGlzLnNoZWV0SWQsW3RoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZp'@;
put 'c3VhbEluZGV4KGwpLGFdKTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKX1vbkFmdGVyUmVtb3ZlUm93KGwsYSxkLGgpe2lmKEI5KGgpKXJldHVybjtjb25zdCBmPXRoaXMucm93QXhpc1N5bmNlci5nZXRSZW1vdmVkSGZJbmRleGVzKCkuc29ydCgpLnJldmVyc2UoKSx2PXRoaXMuZW5n'@;
put 'aW5lLmJhdGNoKCgpPT57Zi5mb3JFYWNoKFQ9Pnt0aGlzLmVuZ2luZS5yZW1vdmVSb3dzKHRoaXMuc2hlZXRJZCxbVCwxXSl9KX0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKHYpfW9uQWZ0ZXJSZW1vdmVDb2wobCxhLGQsaCl7aWYoQjkoaCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5jb2x1'@;
put 'bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCkucmV2ZXJzZSgpLHY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntmLmZvckVhY2goVD0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtULDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVl'@;
put 'dHModil9b25BZnRlckRldGFjaENoaWxkKGwsYSxkKXt2YXIgaDt2bSh0aGlzLGZwLCEwKTtjb25zdCBmPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShkLDAsZCsoKG51bGw9PT0oaD1hLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmxlbmd0aCl8fDApLHRoaXMuaG90LmNv'@;
put 'dW50U291cmNlQ29scygpKTt2bSh0aGlzLGZwLCExKSxmLmZvckVhY2goKHYsVCk9Pnt2LmZvckVhY2goKFkscmUpPT57dGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKHtjb2w6cmUscm93OmQrVCxzaGVldDp0aGlzLnNoZWV0SWR9LFtbWV1dKX0pfSl9b25FbmdpbmVWYWx1ZXNVcGRhdGVk'@;
put 'KGwpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixsKX1vbkVuZ2luZU5hbWVkRXhwcmVzc2lvbnNBZGRlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixsLGEpfW9uRW5naW5lTmFtZWRFeHByZXNzaW9uc1Jl'@;
put 'bW92ZWQobCxhKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIixsLGEpfW9uRW5naW5lU2hlZXRBZGRlZChsKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTaGVldEFkZGVkIixsKX1vbkVuZ2luZVNoZWV0UmVuYW1lZChsLGEpe3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJhZnRlclNoZWV0UmVuYW1lZCIsbCxhKX1vbkVuZ2luZVNoZWV0UmVtb3ZlZChsLGEpe3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclNoZWV0UmVtb3ZlZCIsbCxhKX19ZnVuY3Rpb24gU2xlKGMsbCxhKXsoZnVuY3Rpb24gWnplKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBnZChjLGwpe3JldHVybiBmdW5jdGlvbiBXemUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVl'@;
put 'fShjLHhsZShjLGwsImdldCIpKX1mdW5jdGlvbiBRdyhjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIEd6ZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0'@;
put 'ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMseGxlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiB4bGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9'@;
put 'YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUhpZGVDb2x1bW5zIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVySGlkZUNvbHVtbnMiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5oaWRlQ29sdW1ucyIpLGFvLmdldFNpbmdsZXRvbigpLnJl'@;
put 'Z2lzdGVyKCJhZnRlclVuaGlkZUNvbHVtbnMiKTtjb25zdCBVej0iaGlkZGVuQ29sdW1ucyI7dmFyIElmPW5ldyBXZWFrTWFwLFJmPW5ldyBXZWFrTWFwO2NsYXNzIHF6ZSBleHRlbmRzIHNhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxTbGUodGhpcyxJZix7d3JpdGFibGU6'@;
put 'ITAsdmFsdWU6e319KSxTbGUodGhpcyxSZix7d3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBVen1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5n'@;
put 'cygpW1V6XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW1V6XTt2cyhhKSYmKFF3KHRoaXMsSWYsYSksaWwoYS5jb3B5UGFzdGVFbmFibGVkKSYmKGEuY29weVBhc3RlRW5hYmxlZD0hMCkpLFF3'@;
put 'KHRoaXMsUmYsbmV3IE5UKSxnZCh0aGlzLFJmKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT50aGlzLm9uTWFwSW5pdCgpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsZ2QodGhpcyxSZikpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0'@;
put 'TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q2VsbE1ldGEiLChkLGgsZik9PnRoaXMub25BZnRlckdldENlbGxNZXRhKGQsaCxmKSksdGhp'@;
put 'cy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGQsaCk9PnRoaXMub25Nb2RpZnlDb2xXaWR0aChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRDb2xIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygi'@;
put 'bW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdp'@;
put 'bigpe3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxRdyh0aGlzLElmLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5yZXNldENlbGxzTWV0YSgpfXNob3dDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Db2x1bW5z'@;
put 'KCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPWdkKHRoaXMsUmYpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihSbihsLm1hcChyZT0+dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihyZSkpLHJlPT57ZltyZV09ITF9KSxoPXNjKGYsKHJl'@;
put 'LGZlLF9lKT0+KGZlJiZyZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKF9lKSkscmUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYpJiYoZCYmdiYmZ2QodGhpcyxSZikuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnZpZXcuYWRq'@;
put 'dXN0RWxlbWVudHNTaXplKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5oaWRlQ29sdW1ucyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX1zaG93Q29sdW1uKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1'@;
put 'bWVudHNbZF07dGhpcy5zaG93Q29sdW1ucyhhKX1oaWRlQ29sdW1ucyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuQ29sdW1ucygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVu'@;
put 'SG9va3MoImJlZm9yZUhpZGVDb2x1bW5zIixhLGgsZCkmJihkJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1JuKGwsdj0+e2dkKHRoaXMsUmYpLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpLCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3MoImFm'@;
put 'dGVySGlkZUNvbHVtbnMiLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9aGlkZUNvbHVtbigpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuaGlkZUNvbHVtbnMoYSl9Z2V0SGlkZGVuQ29sdW1u'@;
put 'cygpe3JldHVybiBfcyhnZCh0aGlzLFJmKS5nZXRIaWRkZW5JbmRleGVzKCksbD0+dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4obCkpfWlzSGlkZGVuKGwpe3JldHVybiBnZCh0aGlzLFJmKS5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl8fCExfWlzVmFsaWRD'@;
put 'b25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4hIShBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD4wKSYmbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEpfXJlc2V0Q2VsbHNNZXRhKCl7Um4odGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCks'@;
put 'bD0+e2wmJihsLnNraXBDb2x1bW5PblBhc3RlPSExKX0pfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtyZXR1cm4gdGhpcy5pc0hpZGRlbihhKT8wOmdkKHRoaXMsSWYpLmluZGljYXRvcnMmJih0aGlzLmlzSGlkZGVuKGErMSl8fHRoaXMuaXNIaWRkZW4oYS0xKSkmJiJudW1iZXIiPT10eXBlb2Yg'@;
put 'bCYmdGhpcy5ob3QuaGFzQ29sSGVhZGVycygpP2wrMTU6dm9pZCAwfW9uQWZ0ZXJHZXRDZWxsTWV0YShsLGEsZCl7aWYoITE9PT1nZCh0aGlzLElmKS5jb3B5UGFzdGVFbmFibGVkJiZ0aGlzLmlzSGlkZGVuKGEpJiYoZC5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihhLTEp'@;
put 'KWQuY2xhc3NOYW1lPWQuY2xhc3NOYW1lfHwiIiwtMT09PWQuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVuQ29sdW1uIikmJihkLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoZC5jbGFzc05hbWUpe2NvbnN0IGg9ZC5jbGFzc05hbWUuc3BsaXQoIiAiKTtp'@;
put 'ZihoLmxlbmd0aD4wKXtjb25zdCBmPWguaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtmPi0xJiZoLnNwbGljZShmLDEpLGQuY2xhc3NOYW1lPWguam9pbigiICIpfX19b25Nb2RpZnlDb3B5YWJsZVJhbmdlKGwpe2lmKGdkKHRoaXMsSWYpLmNvcHlQYXN0ZUVuYWJsZWQpcmV0dXJuIGw7'@;
put 'Y29uc3QgYT1bXSxkPShoLGYsdixUKT0+e2EucHVzaCh7c3RhcnRSb3c6aCxlbmRSb3c6ZixzdGFydENvbDp2LGVuZENvbDpUfSl9O3JldHVybiBSbihsLGg9PntsZXQgZj0hMCx2PTA7TW8oaC5zdGFydENvbCxoLmVuZENvbCxUPT57dGhpcy5pc0hpZGRlbihUKT8oZnx8ZChoLnN0YXJ0Um93'@;
put 'LGguZW5kUm93LHYsVC0xKSxmPSEwKTooZiYmKHY9VCksVD09PWguZW5kQ29sJiZkKGguc3RhcnRSb3csaC5lbmRSb3csdixUKSxmPSExKX0pfSksYX1vbkFmdGVyR2V0Q29sSGVhZGVyKGwsYSl7aWYoIWdkKHRoaXMsSWYpLmluZGljYXRvcnN8fGw8MClyZXR1cm47Y29uc3QgZD1bXTtsPj0x'@;
put 'JiZ0aGlzLmlzSGlkZGVuKGwtMSkmJmQucHVzaCgiYWZ0ZXJIaWRkZW5Db2x1bW4iKSxsPHRoaXMuaG90LmNvdW50Q29scygpLTEmJnRoaXMuaXNIaWRkZW4obCsxKSYmZC5wdXNoKCJiZWZvcmVIaWRkZW5Db2x1bW4iKSx3aShhLGQpfW9uQWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25z'@;
put 'KGwpe2wuaXRlbXMucHVzaCh7bmFtZTpNc30sZnVuY3Rpb24genplKGMpe3JldHVybntrZXk6ImhpZGRlbl9jb2x1bW5zX2hpZGUiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFssZCwsaF09bDtkLWghPTAm'@;
put 'JihhPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTkIsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwuY29sLGEuY29sKSwwKSxoPU1hdGgubWF4KGwuY29sLGEuY29sKSxm'@;
put 'PVtdO2ZvcihsZXQgWT1kO1k8PWg7WSs9MSlmLnB1c2goWSk7Yy5oaWRlQ29sdW1ucyhmKTtjb25zdCBUPXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVj'@;
put 'dENvbHVtbnMoVCk6dGhpcy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlv'@;
put 'bi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gVXplKGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVkIsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3Zh'@;
put 'ciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5J'@;
put 'bmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5zKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Q29scygp'@;
put 'fHx0aGlzLnNlbGVjdENvbHVtbnMoaCxmKX0sZGlzYWJsZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT1fcyhjLmdldEhpZGRlbkNvbHVtbnMoKSxfZT0+dGhpcy50b1BoeXNpY2FsQ29sdW1uKF9lKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhdGhpcy5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEpcmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLmNvbCx2PXRoaXMuY29s'@;
put 'dW1uSW5kZXhNYXBwZXIsVD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCksWT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZikscmU9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLGZlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ZLVQrMSl7Y29uc3QgV2U9cmUuc2xpY2Uo'@;
put 'aCxmKzEpO2ZlLnB1c2goLi4uV2UuZmlsdGVyKEplPT5hLmluY2x1ZGVzKEplKSkpfX1lbHNlIGlmKDA9PT1UJiZUPGgpZmUucHVzaCguLi5yZS5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1UKWZlLnB1c2goLi4ucmUuc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCBf'@;
put 'ZT10aGlzLmNvdW50Q29scygpLTE7WT09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfZSwtMSkpJiZfZT5mJiZmZS5wdXNoKC4uLnJlLnNsaWNlKGYrMSkpfXJldHVybiBSbihmZSxfZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsQ29s'@;
put 'dW1uKF9lKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0FycmF5LmlzQXJyYXkoZ2QodGhpcyxJZikuY29sdW1ucykmJnRoaXMuaGlkZUNvbHVtbnMoZ2QodGhpcyxJZikuY29sdW1ucyl9ZGVzdHJveSgpe1F3KHRoaXMsSWYsbnVsbCksUXcodGhpcyxSZixudWxsKSxz'@;
put 'dXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIGtsZShjLGwsYSl7KGZ1bmN0aW9uIEp6ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0'@;
put 'KGMsYSl9ZnVuY3Rpb24gdWgoYyxsKXtyZXR1cm4gZnVuY3Rpb24gUXplKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0LmNhbGwoYyk6bC52YWx1ZX0oYyxFbGUoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gZU0oYyxsLGEpe3JldHVybiBmdW5jdGlvbiBlVWUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNh'@;
put 'bGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLEVsZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gRWxlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVIaWRlUm93cyIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckhpZGVS'@;
put 'b3dzIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVuaGlkZVJvd3MiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbmhpZGVSb3dzIik7Y29uc3QgWno9ImhpZGRlblJvd3MiO3ZhciBwcD1uZXcgV2Vha01hcCxPZj1uZXcgV2Vha01hcDtjbGFzcyBuVWUg'@;
put 'ZXh0ZW5kcyBzYXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksa2xlKHRoaXMscHAse3dyaXRhYmxlOiEwLHZhbHVlOnt9fSksa2xlKHRoaXMsT2Yse3dyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gWnp9c3RhdGljIGdldCBQ'@;
put 'TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtael19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtael07dnMoYSkm'@;
put 'JihlTSh0aGlzLHBwLGEpLGlsKGEuY29weVBhc3RlRW5hYmxlZCkmJihhLmNvcHlQYXN0ZUVuYWJsZWQ9ITApKSxlTSh0aGlzLE9mLG5ldyBOVCksdWgodGhpcyxPZikuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVn'@;
put 'aXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHVoKHRoaXMsT2YpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29r'@;
put 'KCJhZnRlckdldENlbGxNZXRhIiwoZCxoLGYpPT50aGlzLm9uQWZ0ZXJHZXRDZWxsTWV0YShkLGgsZikpLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93SGVpZ2h0IiwoZCxoKT0+dGhpcy5vbk1vZGlmeVJvd0hlaWdodChkLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Um93SGVhZGVyIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBsLm9uQWZ0ZXJHZXRSb3dIZWFkZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29weWFibGVSYW5nZSIsZD0+dGhpcy5vbk1vZGlmeUNvcHlhYmxlUmFuZ2UoZCkpLHN1cGVyLmVuYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlz'@;
put 'YWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxlTSh0aGlzLHBwLHt9KSxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhp'@;
put 'cy5yZXNldENlbGxzTWV0YSgpfXNob3dSb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRIaWRkZW5Sb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtjb25zdCBmPXVoKHRoaXMsT2YpLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihSbihsLm1hcChyZT0+'@;
put 'dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhyZSkpLHJlPT57ZltyZV09ITF9KSxoPXNjKGYsKHJlLGZlLF9lKT0+KGZlJiZyZS5wdXNoKHRoaXMuaG90LnRvVmlzdWFsUm93KF9lKSkscmUpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJnYpJiYo'@;
put 'ZCYmdiYmdWgodGhpcyxPZikuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFb'@;
put 'ZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntSbihsLHY9Pnt1aCh0aGlzLE9mKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVS'@;
put 'b3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4gX3ModWgodGhp'@;
put 'cyxPZikuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gdWgodGhpcyxPZikuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3Qu'@;
put 'Y291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1JuKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsJiYobC5za2lwUm93T25QYXN0ZT0h'@;
put 'MSl9KX1vbk1vZGlmeVJvd0hlaWdodChsLGEpe3JldHVybiB0aGlzLmlzSGlkZGVuKGEpPzA6bH1vbkFmdGVyR2V0Q2VsbE1ldGEobCxhLGQpe2lmKCExPT09dWgodGhpcyxwcCkuY29weVBhc3RlRW5hYmxlZCYmdGhpcy5pc0hpZGRlbihsKSYmKGQuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMu'@;
put 'aXNIaWRkZW4obC0xKSlkLmNsYXNzTmFtZT1kLmNsYXNzTmFtZXx8IiIsLTE9PT1kLmNsYXNzTmFtZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoZC5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGQuY2xhc3NOYW1lKXtjb25zdCBoPWQuY2xhc3NOYW1lLnNwbGl0'@;
put 'KCIgIik7aWYoaC5sZW5ndGg+MCl7Y29uc3QgZj1oLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7Zj4tMSYmaC5zcGxpY2UoZiwxKSxkLmNsYXNzTmFtZT1oLmpvaW4oIiAiKX19fW9uTW9kaWZ5Q29weWFibGVSYW5nZShsKXtpZih1aCh0aGlzLHBwKS5jb3B5UGFzdGVFbmFibGVkKXJldHVy'@;
put 'biBsO2NvbnN0IGE9W10sZD0oaCxmLHYsVCk9PnthLnB1c2goe3N0YXJ0Um93OmgsZW5kUm93OmYsc3RhcnRDb2w6dixlbmRDb2w6VH0pfTtyZXR1cm4gUm4obCxoPT57bGV0IGY9ITAsdj0wO01vKGguc3RhcnRSb3csaC5lbmRSb3csVD0+e3RoaXMuaXNIaWRkZW4oVCk/KGZ8fGQodixULTEs'@;
put 'aC5zdGFydENvbCxoLmVuZENvbCksZj0hMCk6KGYmJih2PVQpLFQ9PT1oLmVuZFJvdyYmZCh2LFQsaC5zdGFydENvbCxoLmVuZENvbCksZj0hMSl9KX0pLGF9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe2lmKCF1aCh0aGlzLHBwKS5pbmRpY2F0b3JzfHxsPDApcmV0dXJuO2NvbnN0IGQ9W107'@;
put 'bD49MSYmdGhpcy5pc0hpZGRlbihsLTEpJiZkLnB1c2goImFmdGVySGlkZGVuUm93IiksbDx0aGlzLmhvdC5jb3VudFJvd3MoKS0xJiZ0aGlzLmlzSGlkZGVuKGwrMSkmJmQucHVzaCgiYmVmb3JlSGlkZGVuUm93Iiksd2koYSxkKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhs'@;
put 'KXtsLml0ZW1zLnB1c2goe25hbWU6TXN9LGZ1bmN0aW9uIEt6ZShjKXtyZXR1cm57a2V5OiJoaWRkZW5fcm93c19oaWRlIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO2xldCBhPTA7aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3RbZCwsaF09bDtkLWghPTAmJihhPTEp'@;
put 'fXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoakIsYSl9LGNhbGxiYWNrKCl7Y29uc3R7ZnJvbTpsLHRvOmF9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxkPU1hdGgubWF4KE1hdGgubWluKGwucm93LGEucm93KSwwKSxoPU1hdGgubWF4KGwucm93LGEucm93KSxmPVtdO2Zv'@;
put 'cihsZXQgWT1kO1k8PWg7WSs9MSlmLnB1c2goWSk7Yy5oaWRlUm93cyhmKTtjb25zdCBUPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGZbZi5sZW5ndGgtMV0sMSwhMCk7TnVtYmVyLmlzSW50ZWdlcihUKSYmVD49MD90aGlzLnNlbGVjdFJvd3MoVCk6dGhp'@;
put 'cy5kZXNlbGVjdENlbGwoKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApfSxkaXNhYmxlZDohMSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3Ju'@;
put 'ZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gWHplKGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQkIsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3Ro'@;
put 'KXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlk'@;
put 'ZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCksZi1oKzE9PT10aGlzLmNvdW50Um93cygpfHx0aGlzLnNlbGVjdFJvd3MoaCxmKX0sZGlzYWJs'@;
put 'ZWQ6ITEsaGlkZGVuKCl7Y29uc3QgYT1fcyhjLmdldEhpZGRlblJvd3MoKSxfZT0+dGhpcy50b1BoeXNpY2FsUm93KF9lKSk7aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fGEubGVuZ3RoPDEp'@;
put 'cmV0dXJuITA7bC5sZW5ndGg9MDtjb25zdCBkPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxoPWQuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csZj1kLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdyx2PXRoaXMucm93SW5kZXhNYXBwZXIsVD12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k'@;
put 'ZXgoaCksWT12LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZikscmU9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLGZlPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ZLVQrMSl7Y29uc3QgV2U9cmUuc2xpY2UoaCxmKzEpO2ZlLnB1c2goLi4uV2UuZmlsdGVyKEplPT5hLmluY2x1ZGVzKEpl'@;
put 'KSkpfX1lbHNlIGlmKDA9PT1UJiZUPGgpZmUucHVzaCguLi5yZS5zbGljZSgwLGgpKTtlbHNlIGlmKG51bGw9PT1UKWZlLnB1c2goLi4ucmUuc2xpY2UoMCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBfZT10aGlzLmNvdW50Um93cygpLTE7WT09PXYuZ2V0UmVuZGVyYWJsZUZyb21W'@;
put 'aXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChfZSwtMSkpJiZfZT5mJiZmZS5wdXNoKC4uLnJlLnNsaWNlKGYrMSkpfXJldHVybiBSbihmZSxfZT0+e2wucHVzaCh0aGlzLnRvVmlzdWFsUm93KF9lKSl9KSwwPT09bC5sZW5ndGh9fX0odGhpcykpfW9uTWFwSW5pdCgpe0Fy'@;
put 'cmF5LmlzQXJyYXkodWgodGhpcyxwcCkucm93cykmJnRoaXMuaGlkZVJvd3ModWgodGhpcyxwcCkucm93cyl9ZGVzdHJveSgpe2VNKHRoaXMscHAsbnVsbCksZU0odGhpcyxPZixudWxsKSxzdXBlci5kZXN0cm95KCl9fWFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5G'@;
put 'cmVlemUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IFRs'@;
put 'ZT0ibWFudWFsQ29sdW1uRnJlZXplIix0TT1uZXcgV2Vha01hcDtjbGFzcyBzVWUgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gVGxlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDExMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0TS5zZXQo'@;
put 'dGhpcyx7YWZ0ZXJGaXJzdFVzZTohMX0pfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtUbGVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT50aGlzLmFkZENvbnRl'@;
put 'eHRNZW51RW50cnkobCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uTW92ZSIsKGwsYSk9PnRoaXMub25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dE0uZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2U9ITEsc3VwZXIuZGlzYWJs'@;
put 'ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dE0uZ2V0KHRoaXMpLGQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxoPWQuZml4ZWRDb2x1bW5z'@;
put 'U3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+ZC5maXhlZENvbHVtbnNTdGFydC0xO2EuYWZ0ZXJGaXJzdFVzZXx8KGEuYWZ0ZXJGaXJzdFVzZT0hMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uRnJlZXplIixsLGgpJiYoaCYmKHRoaXMuaG90LmNvbHVtbkluZGV4'@;
put 'TWFwcGVyLm1vdmVJbmRleGVzKGwsZC5maXhlZENvbHVtbnNTdGFydCksZC5fZml4ZWRDb2x1bW5zU3RhcnQrPTEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtbkZyZWV6ZSIsbCxoKSl9dW5mcmVlemVDb2x1bW4obCl7Y29uc3QgYT10TS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRT'@;
put 'ZXR0aW5ncygpLGg9ZC5maXhlZENvbHVtbnNTdGFydD4wJiZsPD1kLmZpeGVkQ29sdW1uc1N0YXJ0LTE7YS5hZnRlckZpcnN0VXNlfHwoYS5hZnRlckZpcnN0VXNlPSEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsbCxoKSYmKGgmJihkLl9maXhlZENv'@;
put 'bHVtbnNTdGFydC09MSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGQuZml4ZWRDb2x1bW5zU3RhcnQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsbCxoKSl9YWRkQ29udGV4dE1lbnVFbnRyeShsKXtsLml0ZW1zLnB1c2goe25hbWU6'@;
put 'Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIHJVZShjKXtyZXR1cm57a2V5OiJmcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwQil9LGNhbGxiYWNrKGwsYSl7Y29uc3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MuZnJlZXplQ29sdW1uKGQpLHRoaXMucmVu'@;
put 'ZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGhpZGRlbigpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IGE9ITE7cmV0dXJuKHZvaWQgMD09PWx8fGwubGVuZ3RoPjF8fGxbMF0uZnJvbS5jb2whPT1sWzBdLnRvLmNvbHx8bFswXS5mcm9tLmNvbDw9'@;
put 'dGhpcy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEpJiYoYT0hMCksYX19fSh0aGlzKSxmdW5jdGlvbiBpVWUoYyl7cmV0dXJue2tleToidW5mcmVlemVfY29sdW1uIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShtQil9LGNhbGxiYWNrKGwsYSl7Y29u'@;
put 'c3Rbe3N0YXJ0Ontjb2w6ZH19XT1hO2MudW5mcmVlemVDb2x1bW4oZCksdGhpcy5yZW5kZXIoKSx0aGlzLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5n'@;
put 'dGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0hMCksYX19fSh0aGlzKSl9b25CZWZvcmVDb2x1bW5Nb3ZlKGwsYSl7aWYodE0uZ2V0KHRoaXMpLmFmdGVyRmlyc3RVc2Upe2Nv'@;
put 'bnN0IGg9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihhPGh8fGwuc29tZShmPT5mPGgpKXJldHVybiExfX19Y29uc3QgWTk9InB4IixMbGU9Y2xhc3MgYVVle2NvbnN0cnVjdG9yKGwpe3RoaXMuaG90PWwsdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9'@;
put 'MCx0aGlzLmlubGluZVByb3BlcnR5PWwuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1hcHBlbmRUbyhsKXtsLmFwcGVuZENoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuc3RhdGU9Mn1idWlsZCgpezA9PT10aGlzLnN0YXRlJiYodGhpcy5fZWxlbWVudD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3Jl'@;
put 'YXRlRWxlbWVudCgiZGl2IiksdGhpcy5zdGF0ZT0xKX1kZXN0cm95KCl7dGhpcy5pc0FwcGVuZGVkKCkmJnRoaXMuX2VsZW1lbnQucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWlzQXBwZW5kZWQoKXtyZXR1'@;
put 'cm4gMj09PXRoaXMuc3RhdGV9aXNCdWlsdCgpe3JldHVybiB0aGlzLnN0YXRlPj0xfXNldFBvc2l0aW9uKGwsYSl7UjAobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK1k5KSxSMChhKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGVbdGhpcy5pbmxpbmVQcm9wZXJ0eV09YStZOSl9Z2V0UG9z'@;
put 'aXRpb24oKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGU7cmV0dXJue3RvcDpsLnRvcD9wYXJzZUludChsLnRvcCwxMCk6MCxzdGFydDpsW3RoaXMuaW5saW5lUHJvcGVydHldP3BhcnNlSW50KGxbdGhpcy5pbmxpbmVQcm9wZXJ0eV0sMTApOjB9fXNldFNpemUobCxhKXtSMChsKSYmKHRo'@;
put 'aXMuX2VsZW1lbnQuc3R5bGUud2lkdGg9bCtZOSksUjAoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodD1hK1k5KX1nZXRTaXplKCl7cmV0dXJue3dpZHRoOnRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGg/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aCwxMCk6MCxoZWln'@;
put 'aHQ6dGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQsMTApOjB9fXNldE9mZnNldChsLGEpe1IwKGwpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCtZOSksUjAoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW2BtYXJn'@;
put 'aW4ke2EwKHRoaXMuaW5saW5lUHJvcGVydHkpfWBdPWErWTkpfWdldE9mZnNldCgpe2NvbnN0IGw9dGhpcy5fZWxlbWVudC5zdHlsZSxhPWBtYXJnaW4ke2EwKHRoaXMuaW5saW5lUHJvcGVydHkpfWA7cmV0dXJue3RvcDpsLm1hcmdpblRvcD9wYXJzZUludChsLm1hcmdpblRvcCwxMCk6MCxz'@;
put 'dGFydDpsW2FdP3BhcnNlSW50KGxbYV0sMTApOjB9fX0sdVVlPWNsYXNzIGNVZSBleHRlbmRzIExsZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksd2kodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodCIpfX0sZlVlPWNsYXNzIGhVZSBleHRlbmRzIExsZXtidWls'@;
put 'ZCgpe3N1cGVyLmJ1aWxkKCksd2kodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSIpfX07YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtbk1vdmUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Nb3ZlIik7'@;
put 'Y29uc3QgR3o9Im1hbnVhbENvbHVtbk1vdmUiLHltPW5ldyBXZWFrTWFwLElsZT0iaHRfX21hbnVhbENvbHVtbk1vdmUiLFdEPSJzaG93LXVpIiwkej0ib24tbW92aW5nLS1jb2x1bW5zIixxej0iYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIjtjbGFzcyBtVWUgZXh0ZW5kcyBzYXtzdGF0aWMg'@;
put 'Z2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gR3p9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTIwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHltLnNldCh0aGlzLHtjb2x1bW5zVG9Nb3ZlOltdLGNvdW50Q29sczowLGZpeGVkQ29sdW1uczowLHByZXNzZWQ6dm9pZCAwLHRh'@;
put 'cmdldDp7ZXZlbnRQYWdlWDp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAsY29sOnZvaWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcgdVVlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyBmVWUo'@;
put 'bCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0d6XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91'@;
put 'c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCgpPT50aGlz'@;
put 'Lm9uQWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYnVpbGRQbHVnaW5VSSgpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx3aSh0aGlzLmhvdC5y'@;
put 'b290RWxlbWVudCxJbGUpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3ModGhp'@;
put 'cy5ob3Qucm9vdEVsZW1lbnQsSWxlKSx0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmJhY2tsaWdodC5kZXN0cm95KCksdGhpcy5ndWlkZWxpbmUuZGVzdHJveSgpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1tb3ZlQ29sdW1uKGwsYSl7cmV0dXJuIHRoaXMubW92ZUNvbHVtbnMoW2xdLGEp'@;
put 'fW1vdmVDb2x1bW5zKGwsYSl7Y29uc3QgZD15bS5nZXQodGhpcyksaD1kLmNhY2hlZERyb3BJbmRleCxmPXRoaXMuaXNNb3ZlUG9zc2libGUobCxhKSx2PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Nb3ZlIixsLGEsaCxmKTtpZihkLmNhY2hlZERyb3BJbmRleD12b2lkIDAsITE9'@;
put 'PT12KXJldHVybjtmJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5tb3ZlSW5kZXhlcyhsLGEpO2NvbnN0IFQ9ZiYmdGhpcy5pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Nb3ZlIixsLGEsaCxmLFQpLFR9ZHJhZ0NvbHVt'@;
put 'bihsLGEpe3JldHVybiB0aGlzLmRyYWdDb2x1bW5zKFtsXSxhKX1kcmFnQ29sdW1ucyhsLGEpe2NvbnN0IGQ9dGhpcy5jb3VudEZpbmFsSW5kZXgobCxhKTtyZXR1cm4geW0uZ2V0KHRoaXMpLmNhY2hlZERyb3BJbmRleD1hLHRoaXMubW92ZUNvbHVtbnMobCxkKX1pc01vdmVQb3NzaWJsZShs'@;
put 'LGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShZPT5ZPDApLFQ9bC5zb21lKFk9Plk+PWQpO3JldHVybiEoaHx8Znx8dnx8VCl9aXNDb2x1bW5PcmRlckNoYW5nZWQo'@;
put 'bCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXNjKGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldENvbHVtbnNXaWR0aChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXI7bGV0'@;
put 'IGg9MDtmb3IobGV0IGY9bDtmPD1hO2YrPTEpe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2Y8MD9oKz10aGlzLmhvdC52aWV3Ll93dC53dFZpZXdwb3J0LmdldFJvd0hlYWRlcldpZHRoKCl8fDA6bnVsbCE9PXYmJihoKz10aGlzLmhvdC52aWV3Ll93dC53dFRh'@;
put 'YmxlLmdldFN0cmV0Y2hlZENvbHVtbldpZHRoKHYpfHwwKX1yZXR1cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHel07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVDb2x1bW5zKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtj'@;
put 'b25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3RoJiZ0aGlzLm1vdmVDb2x1bW5zKGEsMCl9fWlzRml4ZWRDb2x1bW5zU3RhcnQobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydH1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhp'@;
put 'cy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxDb2x1bW5Nb3ZlIix0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9hZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJw'@;
put 'ZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsQ29sdW1uTW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcobCxhKXtjb25zdCBkPVtdO3JldHVybiBNbyhsLGEsaD0+e2QucHVzaChoKX0pLGR9cmVmcmVzaFBvc2l0aW9ucygpe2NvbnN0IGw9eW0uZ2V0'@;
put 'KHRoaXMpLGE9dGhpcy5ob3Qudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpO3RoaXMuaXNGaXhlZENvbHVtbnNTdGFydChsLmhvdmVyZWRDb2x1bW4pJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odm9pZCAwLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5l'@;
put 'YXJlc3ROb3RIaWRkZW5JbmRleChhLTEsLTEpKTtjb25zdCBkPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsaD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGY9Im51bWJlciI9PXR5cGVvZiBoLnNjcm9sbFg/aC5zY3JvbGxYOmguc2Nyb2xsTGVmdDts'@;
put 'ZXQgdj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgoMCxsLmhvdmVyZWRDb2x1bW4tMSk7Y29uc3QgVD1kLmhpZGVyLm9mZnNldFdpZHRoLFk9ZC5UQk9EWS5vZmZzZXRMZWZ0LHJlPXRoaXMuYmFja2xpZ2h0LmdldE9mZnNldCgpLnN0YXJ0LGZl'@;
put 'PXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS53aWR0aDtsZXQgX2U9MCxrZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2NvbnN0IHR0PXRoaXMuaG90LnJvb3RXaW5kb3cseXQ9TmEodGhpcy5ob3Qucm9vdEVsZW1lbnQpO2tlPXR0LmlubmVyV2lkdGgtbC50YXJnZXQuZXZlbnRQYWdlWC0odHQu'@;
put 'aW5uZXJXaWR0aC1sLnJvb3RFbGVtZW50T2Zmc2V0LXl0KS0odm9pZCAwPT09aC5zY3JvbGxYP2Y6MCl9ZWxzZSBrZT1sLnRhcmdldC5ldmVudFBhZ2VYLShsLnJvb3RFbGVtZW50T2Zmc2V0LSh2b2lkIDA9PT1oLnNjcm9sbFg/ZjowKSk7bC5oYXNSb3dIZWFkZXJzJiYoX2U9dGhpcy5ob3Qu'@;
put 'dmlldy5fd3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDb2x1bW5IZWFkZXIoLTEpLm9mZnNldFdpZHRoKSx0aGlzLmlzRml4ZWRDb2x1bW5zU3RhcnQobC5ob3ZlcmVkQ29sdW1uKSYmKHYrPWYpLHYrPV9lLGwuaG92ZXJlZENvbHVtbjwwP2wudGFy'@;
put 'Z2V0LmNvbD1sLmZpeGVkQ29sdW1uc1N0YXJ0PjA/MDphPjA/YS0xOmE6bC50YXJnZXQuVEQub2Zmc2V0V2lkdGgvMit2PD1rZT8obC50YXJnZXQuY29sPShsLmhvdmVyZWRDb2x1bW4+PWwuY291bnRDb2xzP2wuY291bnRDb2xzLTE6bC5ob3ZlcmVkQ29sdW1uKSsxLHYrPWwudGFyZ2V0LlRE'@;
put 'Lm9mZnNldFdpZHRoKTpsLnRhcmdldC5jb2w9bC5ob3ZlcmVkQ29sdW1uO2xldCBXZT1rZSxKZT12O2tlK2ZlK3JlPj1UP1dlPVQtZmUtcmU6a2UrcmU8WStfZSYmKFdlPVkrX2UrTWF0aC5hYnMocmUpKSx2Pj1ULTE/SmU9VC0xOjA9PT1KZT9KZT0xOnZvaWQgMCE9PWguc2Nyb2xsWCYmbC5o'@;
put 'b3ZlcmVkQ29sdW1uPGwuZml4ZWRDb2x1bW5zU3RhcnQmJihKZS09bC5yb290RWxlbWVudE9mZnNldDw9aC5zY3JvbGxYP2wucm9vdEVsZW1lbnRPZmZzZXQ6MCksdGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVsbCxXZSksdGhpcy5ndWlkZWxpbmUuc2V0UG9zaXRpb24obnVsbCxKZSl9'@;
put 'cmVnaXN0ZXJFdmVudHMoKXtjb25zdHtkb2N1bWVudEVsZW1lbnQ6bH09dGhpcy5ob3Qucm9vdERvY3VtZW50O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixhPT50aGlzLm9uTW91c2VNb3ZlKGEpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExp'@;
put 'c3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1hbmFnZXIuY2xlYXIoKX1vbkJlZm9yZU9uQ2VsbE1vdXNlRG93bihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsdj10aGlzLmhvdC5z'@;
put 'ZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCksVD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLFk9eW0uZ2V0KHRoaXMpLHJlPVFvKGwudGFyZ2V0LCJzb3J0QWN0aW9uIik7aWYoIVR8fCF2fHxZLnByZXNzZWR8fDAhPT1sLmJ1dHRvbnx8cmUpcmV0dXJuIFkucHJl'@;
put 'c3NlZD0hMSxZLmNvbHVtbnNUb01vdmUubGVuZ3RoPTAsdm9pZCBzcyh0aGlzLmhvdC5yb290RWxlbWVudCxbJHosV0RdKTtjb25zdCBmZT10aGlzLmd1aWRlbGluZS5pc0J1aWx0KCkmJiF0aGlzLmd1aWRlbGluZS5pc0FwcGVuZGVkKCksX2U9dGhpcy5iYWNrbGlnaHQuaXNCdWlsdCgpJiYh'@;
put 'dGhpcy5iYWNrbGlnaHQuaXNBcHBlbmRlZCgpO2ZlJiZfZSYmKHRoaXMuZ3VpZGVsaW5lLmFwcGVuZFRvKGYuaGlkZXIpLHRoaXMuYmFja2xpZ2h0LmFwcGVuZFRvKGYuaGlkZXIpKTtjb25zdHtmcm9tOmtlLHRvOldlfT1ULEplPU1hdGgubWluKGtlLmNvbCxXZS5jb2wpLHR0PU1hdGgubWF4'@;
put 'KGtlLmNvbCxXZS5jb2wpO2lmKGEucm93PDAmJmEuY29sPj1KZSYmYS5jb2w8PXR0KXtoLmNvbHVtbj0hMCxZLnByZXNzZWQ9ITAsWS50YXJnZXQuZXZlbnRQYWdlWD1sLnBhZ2VYLFkudGFyZ2V0LmV2ZW50T2Zmc2V0WD1sLm9mZnNldFgsWS5ob3ZlcmVkQ29sdW1uPWEuY29sLFkudGFyZ2V0'@;
put 'LlREPWQsWS50YXJnZXQuY29sPWEuY29sLFkuY29sdW1uc1RvTW92ZT10aGlzLnByZXBhcmVDb2x1bW5zVG9Nb3ZpbmcoSmUsdHQpLFkuaGFzUm93SGVhZGVycz0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVycyxZLmNvdW50Q29scz10aGlzLmhvdC5jb3VudENvbHMoKSxZLmZp'@;
put 'eGVkQ29sdW1uc1N0YXJ0PXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsWS5yb290RWxlbWVudE9mZnNldD1TYyh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdDtjb25zdCB5dD1ZLmhhc1Jvd0hlYWRlcnM/LTE6MCx3dD1mLmhvbGRlci5zY3JvbGxUb3ArZi5nZXRD'@;
put 'b2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxMdD1hLmNvbDxZLmZpeGVkQ29sdW1uc1N0YXJ0LG9uPU1hdGguYWJzKHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCkpLHNuPU1hdGguYWJzKGwub2Zmc2V0WC0odGhpcy5ob3Qu'@;
put 'aXNSdGwoKT9sLnRhcmdldC5vZmZzZXRXaWR0aDowKSksTW49dGhpcy5nZXRDb2x1bW5zV2lkdGgoSmUsYS5jb2wtMSkrc24sVm49dGhpcy5nZXRDb2x1bW5zV2lkdGgoeXQsSmUtMSkrKEx0P29uOjApK01uO3RoaXMuYmFja2xpZ2h0LnNldFBvc2l0aW9uKHd0LFZuKSx0aGlzLmJhY2tsaWdo'@;
put 'dC5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKEplLHR0KSxmLmhpZGVyLm9mZnNldEhlaWdodC13dCksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KG51bGwsLU1uKSx3aSh0aGlzLmhvdC5yb290RWxlbWVudCwkeil9ZWxzZSBzcyh0aGlzLmhvdC5yb290RWxlbWVudCxxeiksWS5wcmVz'@;
put 'c2VkPSExLFkuY29sdW1uc1RvTW92ZS5sZW5ndGg9MH1vbk1vdXNlTW92ZShsKXtjb25zdCBhPXltLmdldCh0aGlzKTtpZihhLnByZXNzZWQpe2lmKGwudGFyZ2V0PT09dGhpcy5iYWNrbGlnaHQuZWxlbWVudCl7Y29uc3QgZD10aGlzLmJhY2tsaWdodC5nZXRTaXplKCkud2lkdGg7dGhpcy5i'@;
put 'YWNrbGlnaHQuc2V0U2l6ZSgwKSxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24oZCl9KX1hLnRhcmdldC5ldmVudFBhZ2VYPWwucGFnZVgsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9fW9uQmVmb3JlT25DZWxsTW91c2VPdmVyKGwsYSxkLGgpe2NvbnN0'@;
put 'IGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PXltLmdldCh0aGlzKTshZnx8IXYucHJlc3NlZHx8KHYuY29sdW1uc1RvTW92ZS5pbmRleE9mKGEuY29sKT4tMT9zcyh0aGlzLmhvdC5yb290RWxlbWVudCxXRCk6d2kodGhpcy5ob3Qucm9vdEVsZW1lbnQsV0QpLGgucm93PSEw'@;
put 'LGguY29sdW1uPSEwLGguY2VsbD0hMCx2LmhvdmVyZWRDb2x1bW49YS5jb2wsdi50YXJnZXQuVEQ9ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD15bS5nZXQodGhpcyksYT1sLnRhcmdldC5jb2wsZD1sLmNvbHVtbnNUb01vdmUubGVuZ3RoO2lmKGwuaG92ZXJlZENvbHVtbj12b2lkIDAsbC5wcmVz'@;
put 'c2VkPSExLGwuYmFja2xpZ2h0V2lkdGg9MCxzcyh0aGlzLmhvdC5yb290RWxlbWVudCxbJHosV0QscXpdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJndpKHRoaXMuaG90LnJvb3RFbGVtZW50LHF6KSxkPDF8fHZvaWQgMD09PWEpcmV0dXJuO2NvbnN0'@;
put 'IGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsLmNvbHVtbnNUb01vdmVbMF0pLHY9dGhpcy5kcmFnQ29sdW1ucyhsLmNvbHVtbnNUb01vdmUsYSk7aWYobC5jb2x1bW5zVG9Nb3ZlLmxlbmd0aD0wLCEwPT09dil7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVy'@;
put 'KCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoITApO2NvbnN0IFQ9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZik7dGhpcy5ob3Quc2VsZWN0Q29sdW1ucyhULFQrZC0xKX19b25BZnRlclNjcm9sbFZlcnRpY2FsbHkoKXtjb25zdCBsPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFi'@;
put 'bGUsaD1sLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2wuaG9sZGVyLnNjcm9sbFRvcDt0aGlzLmJhY2tsaWdodC5zZXRQb3NpdGlvbihoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKG51bGwsbC5oaWRlci5vZmZzZXRIZWlnaHQtaCl9YnVpbGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0'@;
put 'LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJveSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBHRD0i'@;
put 'bWFudWFsQ29sdW1uUmVzaXplIixSbGU9Im1hbnVhbENvbHVtbldpZHRocyIsS3o9bmV3IFdlYWtNYXA7Y2xhc3MgX1VlIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEdEfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEzMH1jb25zdHJ1Y3Rv'@;
put 'cihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJyZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRDb2w9bnVsbCx0aGlzLnNlbGVjdGVkQ29scz1bXSx0aGlzLmN1cnJlbnRXaWR0aD1udWxsLHRoaXMubmV3U2l6ZT1udWxsLHRoaXMuc3RhcnRZPW51bGws'@;
put 'dGhpcy5zdGFydFdpZHRoPW51bGwsdGhpcy5zdGFydE9mZnNldD1udWxsLHRoaXMuaGFuZGxlPWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ndWlkZT1hLmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLnByZXNzZWQ9bnVsbCx0aGlz'@;
put 'LmlzVHJpZ2dlcmVkQnlSTUI9ITEsdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbCx0aGlzLmNvbHVtbldpZHRoc01hcD12b2lkIDAsS3ouc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSx3aSh0aGlzLmhhbmRsZSwibWFudWFsQ29sdW1uUmVzaXplciIpLHdpKHRo'@;
put 'aXMuZ3VpZGUsIm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHRF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVk'@;
put 'fHwodGhpcy5jb2x1bW5XaWR0aHNNYXA9bmV3IGFtLHRoaXMuY29sdW1uV2lkdGhzTWFwLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PnRoaXMub25NYXBJbml0KCkpLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSx0aGlzLmNvbHVtbldpZHRo'@;
put 'c01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGwsYSk9PnRoaXMub25Nb2RpZnlDb2xXaWR0aChsLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsKGwsYSk9PnRoaXMub25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKSksdGhp'@;
put 'cy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChsLGEsZCk9PnRoaXMub25CZWZvcmVDb2x1bW5SZXNpemUobCxhLGQpKSx0aGlzLmJpbmRFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVn'@;
put 'aW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7S3ouZ2V0KHRoaXMpLmNvbmZpZz10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJs'@;
put 'ZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsUmxlLHRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3Qu'@;
put 'cnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLFJsZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gdGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGgs'@;
put 'ZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChhLG51bGwpfW9uTWFwSW5pdCgpe2NvbnN0IGw9S3ouZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtH'@;
put 'RF0sZD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgZDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntkLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCk6QXJyYXkuaXNBcnJheShhKT8odGhp'@;
put 'cy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PnthLmZvckVhY2goKGgsZik9Pnt0aGlzLmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCksbC5jb25maWc9YSk6ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9'@;
put 'PntsLmNvbmZpZy5mb3JFYWNoKChoLGYpPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGYsaCl9KX0sITApfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47dGhpcy5jdXJyZW50VEg9bDtjb25zdHtfd3Q6YX09dGhpcy5ob3Qudmll'@;
put 'dyxkPWEud3RUYWJsZS5nZXRDb29yZHModGhpcy5jdXJyZW50VEgpLGg9ZC5jb2w7aWYoaDwwKXJldHVybjtjb25zdCBmPVZsKHRoaXMuY3VycmVudFRIKSx2PXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBZO2g8YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNT'@;
put 'dGFydCIpJiYoWT1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGQucm93LGQuY29sKSksWXx8KFk9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5j'@;
put 'dXJyZW50VEgsZC5yb3csZC5jb2wpKSx0aGlzLmN1cnJlbnRDb2w9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChoKSx0aGlzLnNlbGVjdGVkQ29scz1bXTtjb25zdCByZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVy'@;
put 'KCl8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZyZSYmUm4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLF9lPT57TW8oX2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsX2UuZ2V0Qm90dG9t'@;
put 'RW5kQ29ybmVyKCkuY29sLEplPT57dGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXMoSmUpfHx0aGlzLnNlbGVjdGVkQ29scy5wdXNoKEplKX0pfSksdGhpcy5zZWxlY3RlZENvbHMuaW5jbHVkZXModGhpcy5jdXJyZW50Q29sKXx8KHRoaXMuc2VsZWN0ZWRDb2xzPVt0aGlzLmN1cnJlbnRDb2xd'@;
put 'KSx0aGlzLnN0YXJ0T2Zmc2V0PVkuc3RhcnQtNix0aGlzLnN0YXJ0V2lkdGg9cGFyc2VJbnQodi53aWR0aCwxMCksdGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke1kudG9wfXB4YCx0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7dGhpcy5zdGFydE9mZnNldCt0aGlzLnN0YXJ0'@;
put 'V2lkdGh9cHhgLHRoaXMuaGFuZGxlLnN0eWxlLmhlaWdodD1gJHtmfXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke3RoaXMuc3RhcnRPZmZz'@;
put 'ZXQrdGhpcy5jdXJyZW50V2lkdGh9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoVmwodGhpcy5oYW5kbGUpLDEwKSxhPXBhcnNlSW50KHRoaXMuaGFuZGxlLnN0eWxlLnRvcCwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVt'@;
put 'ZW50SGVpZ2h0KDApLDEwKTt3aSh0aGlzLmhhbmRsZSwiYWN0aXZlIiksd2kodGhpcy5ndWlkZSwiYWN0aXZlIiksdGhpcy5ndWlkZS5zdHlsZS50b3A9YCR7YX1weGAsdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpLHRoaXMuZ3VpZGUuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90'@;
put 'LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZ3VpZGUpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7dGhpcy5ndWlkZS5zdHlsZVt0aGlzLmlubGluZURpcl09dGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdfWhpZGVIYW5kbGVBbmRHdWlkZSgpe3NzKHRoaXMuaGFuZGxlLCJh'@;
put 'Y3RpdmUiKSxzcyh0aGlzLmd1aWRlLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwpe3JldHVybiEhUTQobCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/'@;
put 'bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9b25Nb3VzZU92ZXIobCl7aWYoIXFWKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJZkNvbHVtbkhlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0'@;
put 'VEhQYXJlbnQobC50YXJnZXQpO2lmKCFhKXJldHVybjtjb25zdCBkPWEuZ2V0QXR0cmlidXRlKCJjb2xzcGFuIik7YSYmKG51bGw9PT1kfHwiMSI9PT1kKSYmKHRoaXMucHJlc3NlZHx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGEpKX19YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3Qg'@;
put 'bD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e2NvbnN0IGY9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbHVtblJlc2l6ZSIsdGhpcy5uZXdTaXpl'@;
put 'LGQsITApO3ZvaWQgMCE9PWYmJih0aGlzLm5ld1NpemU9ZiksImFsbCI9PT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLnN0cmV0Y2hIP3RoaXMuY2xlYXJNYW51YWxTaXplKGQpOnRoaXMuc2V0TWFudWFsU2l6ZShkLHRoaXMubmV3U2l6ZSksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMCksaCYmbCgpfTt0aGlzLmRibGNsaWNrPj0yJiYodGhpcy5zZWxlY3RlZENvbHMubGVuZ3RoPjE/KFJuKHRoaXMuc2VsZWN0ZWRDb2xzLGg9PnthKGgpfSksbCgpKTpSbih0aGlzLnNlbGVjdGVk'@;
put 'Q29scyxoPT57YShoLCEwKX0pKSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsfW9uTW91c2VEb3duKGwpe1FvKGwudGFyZ2V0LCJtYW51YWxDb2x1bW5SZXNpemVyIikmJih0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpLHRoaXMuc2V0'@;
put 'dXBHdWlkZVBvc2l0aW9uKCksdGhpcy5wcmVzc2VkPSEwLG51bGw9PT10aGlzLmF1dG9yZXNpemVUaW1lb3V0JiYodGhpcy5hdXRvcmVzaXplVGltZW91dD1zZXRUaW1lb3V0KCgpPT50aGlzLmFmdGVyTW91c2VEb3duVGltZW91dCgpLDUwMCksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCh0'@;
put 'aGlzLmF1dG9yZXNpemVUaW1lb3V0KSksdGhpcy5kYmxjbGljays9MSx0aGlzLnN0YXJ0WD1sLnBhZ2VYLHRoaXMubmV3U2l6ZT10aGlzLnN0YXJ0V2lkdGgpfW9uTW91c2VNb3ZlKGwpe2lmKHRoaXMucHJlc3NlZCl7Y29uc3QgYT0obC5wYWdlWC10aGlzLnN0YXJ0WCkqdGhpcy5ob3QuZ2V0'@;
put 'RGlyZWN0aW9uRmFjdG9yKCk7dGhpcy5jdXJyZW50V2lkdGg9dGhpcy5zdGFydFdpZHRoK2EsUm4odGhpcy5zZWxlY3RlZENvbHMsZD0+e3RoaXMubmV3U2l6ZT10aGlzLnNldE1hbnVhbFNpemUoZCx0aGlzLmN1cnJlbnRXaWR0aCl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRo'@;
put 'aXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19b25Nb3VzZVVwKCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCEwKX0sYT0oZCxoKT0+e3RoaXMuaG90LnJ1bkhv'@;
put 'b2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLHRoaXMubmV3U2l6ZSxkLCExKSxoJiZsKCksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uUmVzaXplIix0aGlzLm5ld1NpemUsZCwhMSl9O3RoaXMucHJlc3NlZCYmKHRoaXMuaGlkZUhh'@;
put 'bmRsZUFuZEd1aWRlKCksdGhpcy5wcmVzc2VkPSExLHRoaXMubmV3U2l6ZSE9PXRoaXMuc3RhcnRXaWR0aCYmKHRoaXMuc2VsZWN0ZWRDb2xzLmxlbmd0aD4xPyhSbih0aGlzLnNlbGVjdGVkQ29scyxoPT57YShoKX0pLGwoKSk6Um4odGhpcy5zZWxlY3RlZENvbHMsaD0+e2EoaCwhMCl9KSks'@;
put 'dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVudFRIKSl9b25Db250ZXh0TWVudSgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5oYW5kbGUpLHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKHRo'@;
put 'aXMuZ3VpZGUpLHRoaXMucHJlc3NlZD0hMSx0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITAsdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57dGhpcy5pc1RyaWdnZXJlZEJ5Uk1CPSExfSl9YmluZEV2ZW50cygpe2NvbnN0e3Jvb3RXaW5kb3c6bCxyb290RWxlbWVudDphfT10aGlzLmhv'@;
put 'dDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsIm1vdXNlb3ZlciIsZD0+dGhpcy5vbk1vdXNlT3ZlcihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRvd24iLGQ9PnRoaXMub25Nb3VzZURvd24oZCkpLHRoaXMuZXZlbnRNYW5hZ2Vy'@;
put 'LmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2Vtb3ZlIixkPT50aGlzLm9uTW91c2VNb3ZlKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT50aGlzLm9uTW91c2VVcCgpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMu'@;
put 'aGFuZGxlLCJjb250ZXh0bWVudSIsKCk9PnRoaXMub25Db250ZXh0TWVudSgpKX1vbk1vZGlmeUNvbFdpZHRoKGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKSxmPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJ'@;
put 'bmRleChoKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0dEXSYmZiYmKGQ9Zil9cmV0dXJuIGR9b25CZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGgobCxhKXtsZXQgZD10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoYSk7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxkfW9uQmVm'@;
put 'b3JlQ29sdW1uUmVzaXplKCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1jb25zdCB6OT0icHgiLEZsZT1jbGFzcyB2VWV7Y29uc3RydWN0b3IobCl7dGhpcy5ob3Q9'@;
put 'bCx0aGlzLl9lbGVtZW50PW51bGwsdGhpcy5zdGF0ZT0wfWFwcGVuZFRvKGwpe2wuYXBwZW5kQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5zdGF0ZT0yfWJ1aWxkKCl7MD09PXRoaXMuc3RhdGUmJih0aGlzLl9lbGVtZW50PXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJk'@;
put 'aXYiKSx0aGlzLnN0YXRlPTEpfWRlc3Ryb3koKXt0aGlzLmlzQXBwZW5kZWQoKSYmdGhpcy5fZWxlbWVudC5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQ9bnVsbCx0aGlzLnN0YXRlPTB9aXNBcHBlbmRlZCgpe3JldHVybiAyPT09dGhpcy5z'@;
put 'dGF0ZX1pc0J1aWx0KCl7cmV0dXJuIHRoaXMuc3RhdGU+PTF9c2V0UG9zaXRpb24obCxhKXt2b2lkIDAhPT1sJiYodGhpcy5fZWxlbWVudC5zdHlsZS50b3A9bCt6OSksdm9pZCAwIT09YSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD1hK3o5KX1nZXRQb3NpdGlvbigpe3JldHVybnt0b3A6'@;
put 'dGhpcy5fZWxlbWVudC5zdHlsZS50b3A/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS50b3AsMTApOjAsbGVmdDp0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQ/cGFyc2VJbnQodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0LDEwKTowfX1zZXRTaXplKGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQu'@;
put 'c3R5bGUud2lkdGg9bCt6OSksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0PWErejkpfWdldFNpemUoKXtyZXR1cm57d2lkdGg6dGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoLDEwKTowLGhlaWdodDp0aGlzLl9lbGVtZW50'@;
put 'LnN0eWxlLmhlaWdodD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmhlaWdodCwxMCk6MH19c2V0T2Zmc2V0KGwsYSl7bCYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrejkpLGEmJih0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQ9YSt6OSl9Z2V0T2Zmc2V0KCl7'@;
put 'cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpblRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luTGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLm1hcmdpbkxlZnQsMTAp'@;
put 'OjB9fX0sd1VlPWNsYXNzIGJVZSBleHRlbmRzIEZsZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksd2kodGhpcy5fZWxlbWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWJhY2tsaWdodCIpfX0sU1VlPWNsYXNzIENVZSBleHRlbmRzIEZsZXtidWlsZCgpe3N1cGVyLmJ1aWxkKCksd2kodGhpcy5fZWxl'@;
put 'bWVudCwiaHRfX21hbnVhbFJvd01vdmUtLWd1aWRlbGluZSIpfX07YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVJvd01vdmUiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJSb3dNb3ZlIik7Y29uc3QgSno9Im1hbnVhbFJvd01vdmUiLGJtPW5ldyBXZWFrTWFw'@;
put 'LEhsZT0iaHRfX21hbnVhbFJvd01vdmUiLCREPSJzaG93LXVpIixRej0ib24tbW92aW5nLS1yb3dzIixlVT0iYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIjtjbGFzcyBrVWUgZXh0ZW5kcyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gSnp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJ'@;
put 'VFkoKXtyZXR1cm4gMTQwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLGJtLnNldCh0aGlzLHtyb3dzVG9Nb3ZlOltdLHByZXNzZWQ6dm9pZCAwLHRhcmdldDp7ZXZlbnRQYWdlWTp2b2lkIDAsY29vcmRzOnZvaWQgMCxURDp2b2lkIDAscm93OnZvaWQgMH0sY2FjaGVkRHJvcEluZGV4OnZvaWQg'@;
put 'MH0pLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBqbCh0aGlzKSx0aGlzLmJhY2tsaWdodD1uZXcgd1VlKGwpLHRoaXMuZ3VpZGVsaW5lPW5ldyBTVWUobCl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0p6XX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMu'@;
put 'ZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5v'@;
put 'bkJlZm9yZU9uQ2VsbE1vdXNlT3ZlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclNjcm9sbEhvcml6b250YWxseSIsKCk9PnRoaXMub25BZnRlclNjcm9sbEhvcml6b250YWxseSgpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwu'@;
put 'b25BZnRlckxvYWREYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksd2kodGhpcy5ob3Qucm9vdEVsZW1lbnQsSGxlKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhp'@;
put 'cy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3NzKHRoaXMuaG90LnJvb3RFbGVtZW50LEhsZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5iYWNrbGlnaHQuZGVzdHJveSgpLHRoaXMu'@;
put 'Z3VpZGVsaW5lLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZVJvdyhsLGEpe3JldHVybiB0aGlzLm1vdmVSb3dzKFtsXSxhKX1tb3ZlUm93cyhsLGEpe2NvbnN0IGQ9Ym0uZ2V0KHRoaXMpLGg9ZC5jYWNoZWREcm9wSW5kZXgsZj10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSks'@;
put 'dj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93TW92ZSIsbCxhLGgsZik7aWYoZC5jYWNoZWREcm9wSW5kZXg9dm9pZCAwLCExPT09dilyZXR1cm47ZiYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCBUPWYmJnRoaXMuaXNSb3dPcmRlckNoYW5nZWQo'@;
put 'bCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGgsZixUKSxUfWRyYWdSb3cobCxhKXtyZXR1cm4gdGhpcy5kcmFnUm93cyhbbF0sYSl9ZHJhZ1Jvd3MobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIGJtLmdldCh0aGlz'@;
put 'KS5jYWNoZWREcm9wSW5kZXg9YSx0aGlzLm1vdmVSb3dzKGwsZCl9aXNNb3ZlUG9zc2libGUobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksaD1sLmxlbmd0aCthPmQsZj1hPDAsdj1sLnNvbWUoWT0+WTwwKSxUPWwuc29t'@;
put 'ZShZPT5ZPj1kKTtyZXR1cm4hKGh8fGZ8fHZ8fFQpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJuIGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9Y291bnRGaW5hbEluZGV4KGwsYSl7Y29uc3QgZD1zYyhsLChoLGYpPT4oZjxhJiYoaCs9MSksaCksMCk7cmV0dXJuIGEtZH1nZXRSb3dzSGVp'@;
put 'Z2h0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7ZisrKXtjb25zdCB2PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Um93SGVpZ2h0'@;
put 'KHYpfHwyMyl9cmV0dXJuIGh9bW92ZUJ5U2V0dGluZ3NPckxvYWQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbSnpdO2lmKEFycmF5LmlzQXJyYXkobCkpdGhpcy5tb3ZlUm93cyhsLDApO2Vsc2UgaWYodm9pZCAwIT09bCl7Y29uc3QgYT10aGlzLnBlcnNpc3RlbnRTdGF0ZUxv'@;
put 'YWQoKTthLmxlbmd0aCYmdGhpcy5tb3ZlUm93cyhhLDApfX1pc0ZpeGVkUm93VG9wKGwpe3JldHVybiBsPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wfWlzRml4ZWRSb3dCb3R0b20obCl7cmV0dXJuIGw+dGhpcy5ob3QuY291bnRSb3dzKCktMS10aGlzLmhvdC5nZXRTZXR0'@;
put 'aW5ncygpLmZpeGVkUm93c0JvdHRvbX1wZXJzaXN0ZW50U3RhdGVTYXZlKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLCJtYW51YWxSb3dNb3ZlIix0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9cGVyc2lzdGVudFN0YXRlTG9h'@;
put 'ZCgpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiwibWFudWFsUm93TW92ZSIsbCksbC52YWx1ZT9sLnZhbHVlOltdfXByZXBhcmVSb3dzVG9Nb3ZpbmcoKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1b'@;
put 'XTtpZighbClyZXR1cm4gYTtjb25zdHtmcm9tOmQsdG86aH09bDtyZXR1cm4gTW8oTWF0aC5taW4oZC5yb3csaC5yb3cpLE1hdGgubWF4KGQucm93LGgucm93KSxUPT57YS5wdXNoKFQpfSksYX1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD1ibS5nZXQodGhpcyksYT1sLnRhcmdldC5jb29y'@;
put 'ZHMsZD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhvdC52aWV3LmdldExhc3RGdWxseVZpc2libGVSb3coKSxmPXRoaXMuaG90LmNvdW50Um93cygpO3RoaXMuaXNGaXhlZFJvd1RvcChhLnJvdykmJmQ+MCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRU'@;
put 'byh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKSksdGhpcy5pc0ZpeGVkUm93Qm90dG9tKGEucm93KSYmaDxmJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5J'@;
put 'bmRleChoKzEsMSksdm9pZCAwLCEwKTtjb25zdCB2PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsVD1sLnRhcmdldC5URCxZPXRoaXMuaG90LnJvb3RFbGVtZW50LHJlPVNjKFkpLGZlPU5nKFkpO2xldCBrZTtrZT10aGlzLmhvdC5yb290V2luZG93PT09ZmU/ZmUuc2Nyb2xsWTpmZS5zY3Jv'@;
put 'bGxUb3A7Y29uc3QgSmU9bC50YXJnZXQuZXZlbnRQYWdlWS0ocmUudG9wLWtlKSt2LmhvbGRlci5zY3JvbGxUb3AsdHQ9di5oaWRlci5vZmZzZXRIZWlnaHQseXQ9di5UQk9EWS5vZmZzZXRUb3Asd3Q9dGhpcy5iYWNrbGlnaHQuZ2V0T2Zmc2V0KCkudG9wLEx0PXRoaXMuYmFja2xpZ2h0Lmdl'@;
put 'dFNpemUoKS5oZWlnaHQsb249VC5vZmZzZXRIZWlnaHQvMixzbj1ULm9mZnNldEhlaWdodDtsZXQgTW49dGhpcy5ob3Qudmlldy5USEVBRC5vZmZzZXRIZWlnaHQrdGhpcy5nZXRSb3dzSGVpZ2h0KDAsYS5yb3ctMSk7Y29uc3QgVm49SmU+PU1uK29uO3RoaXMuaXNGaXhlZFJvd1RvcChhLnJv'@;
put 'dykmJihNbis9di5ob2xkZXIuc2Nyb2xsVG9wKSxhLnJvdzwwP2wudGFyZ2V0LnJvdz1kPjA/ZC0xOmQ6Vm4/KGwudGFyZ2V0LnJvdz1hLnJvdysxLE1uKz0wPT09YS5yb3c/c24tMTpzbik6bC50YXJnZXQucm93PWEucm93O2xldCB1cj1KZSxUcj1NbjtKZStMdCt3dD49dHQ/dXI9dHQtTHQt'@;
put 'd3Q6SmUrd3Q8eXQmJih1cj15dCtNYXRoLmFicyh3dCkpLE1uPj10dC0xJiYoVHI9dHQtMSksdGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24odXIpLHRoaXMuZ3VpZGVsaW5lLnNldFBvc2l0aW9uKFRyKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhv'@;
put 'dC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnRoaXMub25Nb3VzZU1vdmUoYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnRoaXMub25Nb3VzZVVwKCkpfXVucmVnaXN0'@;
put 'ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfW9uQmVmb3JlT25DZWxsTW91c2VEb3duKGwsYSxkLGgpe2NvbnN0e3d0VGFibGU6Zix3dFZpZXdwb3J0OnZ9PXRoaXMuaG90LnZpZXcuX3d0LFQ9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFk9'@;
put 'dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxyZT1ibS5nZXQodGhpcyk7aWYoIVl8fCFUfHxyZS5wcmVzc2VkfHwwIT09bC5idXR0b24pcmV0dXJuIHJlLnByZXNzZWQ9ITEscmUucm93c1RvTW92ZS5sZW5ndGg9MCx2b2lkIHNzKHRoaXMuaG90LnJvb3RFbGVtZW50LFtReiwkRF0p'@;
put 'O2NvbnN0IGZlPXRoaXMuZ3VpZGVsaW5lLmlzQnVpbHQoKSYmIXRoaXMuZ3VpZGVsaW5lLmlzQXBwZW5kZWQoKSxfZT10aGlzLmJhY2tsaWdodC5pc0J1aWx0KCkmJiF0aGlzLmJhY2tsaWdodC5pc0FwcGVuZGVkKCk7ZmUmJl9lJiYodGhpcy5ndWlkZWxpbmUuYXBwZW5kVG8oZi5oaWRlciks'@;
put 'dGhpcy5iYWNrbGlnaHQuYXBwZW5kVG8oZi5oaWRlcikpO2NvbnN0e2Zyb206a2UsdG86V2V9PVksSmU9TWF0aC5taW4oa2Uucm93LFdlLnJvdyksdHQ9TWF0aC5tYXgoa2Uucm93LFdlLnJvdyk7aWYoYS5jb2w8MCYmYS5yb3c+PUplJiZhLnJvdzw9dHQpe2gucm93PSEwLHJlLnByZXNzZWQ9'@;
put 'ITAscmUudGFyZ2V0LmV2ZW50UGFnZVk9bC5wYWdlWSxyZS50YXJnZXQuY29vcmRzPWEscmUudGFyZ2V0LlREPWQscmUucm93c1RvTW92ZT10aGlzLnByZXBhcmVSb3dzVG9Nb3ZpbmcoKTtjb25zdCB5dD1mLmhvbGRlci5zY3JvbGxMZWZ0K3YuZ2V0Um93SGVhZGVyV2lkdGgoKTt0aGlzLmJh'@;
put 'Y2tsaWdodC5zZXRQb3NpdGlvbihudWxsLHl0KSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGYuaGlkZXIub2Zmc2V0V2lkdGgteXQsdGhpcy5nZXRSb3dzSGVpZ2h0KEplLHR0KSksdGhpcy5iYWNrbGlnaHQuc2V0T2Zmc2V0KC0xKih0aGlzLmdldFJvd3NIZWlnaHQoSmUsYS5yb3ctMSkrbC5v'@;
put 'ZmZzZXRZKSxudWxsKSx3aSh0aGlzLmhvdC5yb290RWxlbWVudCxReiksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCl9ZWxzZSBzcyh0aGlzLmhvdC5yb290RWxlbWVudCxlVSkscmUucHJlc3NlZD0hMSxyZS5yb3dzVG9Nb3ZlLmxlbmd0aD0wfW9uTW91c2VNb3ZlKGwpe2NvbnN0IGE9Ym0uZ2V0'@;
put 'KHRoaXMpO2lmKGEucHJlc3NlZCl7aWYobC50YXJnZXQ9PT10aGlzLmJhY2tsaWdodC5lbGVtZW50KXtjb25zdCBkPXRoaXMuYmFja2xpZ2h0LmdldFNpemUoKS5oZWlnaHQ7dGhpcy5iYWNrbGlnaHQuc2V0U2l6ZShudWxsLDApLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLmJhY2tsaWdo'@;
put 'dC5zZXRQb3NpdGlvbihudWxsLGQpfSl9YS50YXJnZXQuZXZlbnRQYWdlWT1sLnBhZ2VZLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpfX1vbkJlZm9yZU9uQ2VsbE1vdXNlT3ZlcihsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksdj1ibS5nZXQodGhpcyk7'@;
put 'IWZ8fCF2LnByZXNzZWR8fCh2LnJvd3NUb01vdmUuaW5kZXhPZihhLnJvdyk+LTE/c3ModGhpcy5ob3Qucm9vdEVsZW1lbnQsJEQpOndpKHRoaXMuaG90LnJvb3RFbGVtZW50LCREKSxoLnJvdz0hMCxoLmNvbHVtbj0hMCxoLmNlbGw9ITAsdi50YXJnZXQuY29vcmRzPWEsdi50YXJnZXQuVEQ9'@;
put 'ZCl9b25Nb3VzZVVwKCl7Y29uc3QgbD1ibS5nZXQodGhpcyksYT1sLnRhcmdldC5yb3csZD1sLnJvd3NUb01vdmUubGVuZ3RoO2lmKGwucHJlc3NlZD0hMSxsLmJhY2tsaWdodEhlaWdodD0wLHNzKHRoaXMuaG90LnJvb3RFbGVtZW50LFtReiwkRCxlVV0pLHRoaXMuaG90LnNlbGVjdGlvbi5p'@;
put 'c1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmd2kodGhpcy5ob3Qucm9vdEVsZW1lbnQsZVUpLGQ8MXx8dm9pZCAwPT09YSlyZXR1cm47Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwucm93c1RvTW92ZVswXSksdj10aGlzLmRyYWdSb3dzKGwucm93c1RvTW92ZSxhKTtpZihsLnJvd3NU'@;
put 'b01vdmUubGVuZ3RoPTAsITA9PT12KXt0aGlzLnBlcnNpc3RlbnRTdGF0ZVNhdmUoKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCk7Y29uc3QgVD10aGlzLmhvdC50b1Zpc3VhbFJvdyhmKTt0aGlzLmhvdC5zZWxlY3RSb3dzKFQsVCtkLTEp'@;
put 'fX1vbkFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5KCl7Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLGg9dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5nZXRSb3dIZWFkZXJXaWR0aCgpK2wuaG9sZGVyLnNjcm9sbExlZnQ7dGhpcy5iYWNrbGlnaHQuc2V0UG9zaXRpb24obnVs'@;
put 'bCxoKSx0aGlzLmJhY2tsaWdodC5zZXRTaXplKGwuaGlkZXIub2Zmc2V0V2lkdGgtaCl9YnVpbGRQbHVnaW5VSSgpe3RoaXMuYmFja2xpZ2h0LmJ1aWxkKCksdGhpcy5ndWlkZWxpbmUuYnVpbGQoKX1vbkFmdGVyTG9hZERhdGEoKXt0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCl9ZGVzdHJv'@;
put 'eSgpe3RoaXMuYmFja2xpZ2h0LmRlc3Ryb3koKSx0aGlzLmd1aWRlbGluZS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1jb25zdCBxRD0ibWFudWFsUm93UmVzaXplIixObGU9Im1hbnVhbFJvd0hlaWdodHMiLHRVPW5ldyBXZWFrTWFwO2NsYXNzIFRVZSBleHRlbmRzIHNhe3N0YXRpYyBn'@;
put 'ZXQgUExVR0lOX0tFWSgpe3JldHVybiBxRH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKTtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3Q7dGhpcy5jdXJyZW50VEg9bnVsbCx0aGlzLmN1cnJlbnRSb3c9bnVsbCx0aGlz'@;
put 'LnNlbGVjdGVkUm93cz1bXSx0aGlzLmN1cnJlbnRIZWlnaHQ9bnVsbCx0aGlzLm5ld1NpemU9bnVsbCx0aGlzLnN0YXJ0WT1udWxsLHRoaXMuc3RhcnRIZWlnaHQ9bnVsbCx0aGlzLnN0YXJ0T2Zmc2V0PW51bGwsdGhpcy5oYW5kbGU9YS5jcmVhdGVFbGVtZW50KCJESVYiKSx0aGlzLmd1aWRl'@;
put 'PWEuY3JlYXRlRWxlbWVudCgiRElWIiksdGhpcy5ldmVudE1hbmFnZXI9bmV3IGpsKHRoaXMpLHRoaXMucHJlc3NlZD1udWxsLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMSx0aGlzLmRibGNsaWNrPTAsdGhpcy5hdXRvcmVzaXplVGltZW91dD1udWxsLHRoaXMucm93SGVpZ2h0c01hcD12b2lk'@;
put 'IDAsdFUuc2V0KHRoaXMse2NvbmZpZzp2b2lkIDB9KSx3aSh0aGlzLmhhbmRsZSwibWFudWFsUm93UmVzaXplciIpLHdpKHRoaXMuZ3VpZGUsIm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZSIpfWdldCBpbmxpbmVEaXIoKXtyZXR1cm4gdGhpcy5ob3QuaXNSdGwoKT8icmlnaHQiOiJsZWZ0In1pc0Vu'@;
put 'YWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtxRF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5yb3dIZWlnaHRzTWFwPW5ldyBhbSx0aGlzLnJvd0hlaWdodHNNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5vbk1hcEluaXQoKSksdGhpcy5o'@;
put 'b3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lLHRoaXMucm93SGVpZ2h0c01hcCksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChsLGEpPT50aGlzLm9uTW9kaWZ5Um93SGVpZ2h0KGwsYSkpLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBs'@;
put 'dWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0VS5nZXQodGhpcykuY29uZmlnPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZXMoKSx0aGlzLmhvdC5yb3dJ'@;
put 'bmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxSb3dIZWlnaHRzKCl7dGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZVNhdmUiLE5sZSx0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkpfWxv'@;
put 'YWRNYW51YWxSb3dIZWlnaHRzKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLE5sZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD1NYXRoLm1heChhLEhvZS5E'@;
put 'RUZBVUxUX0hFSUdIVCk7cmV0dXJuIHRoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoZCxoKSxofXNldHVwSGFuZGxlUG9zaXRpb24obCl7dGhpcy5jdXJyZW50VEg9bDtjb25zdHt2aWV3OmF9PXRoaXMuaG90LHtfd3Q6ZH09YSxoPWQud3RUYWJsZS5nZXRDb29yZHModGhpcy5j'@;
put 'dXJyZW50VEgpLGY9aC5yb3c7aWYoZjwwKXJldHVybjtjb25zdCB2PU5hKHRoaXMuY3VycmVudFRIKSxUPXRoaXMuY3VycmVudFRILmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLFk9ZjxkLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLHJlPWY+PWEuY291bnROb3RIaWRkZW5Sb3dJbmRleGVz'@;
put 'KDAsMSktZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKTtsZXQgZmU7WT9mZT1kLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKHRoaXMuY3VycmVudFRILGgucm93LGguY29sKTpyZSYmKGZlPWQud3RPdmVybGF5cy5i'@;
put 'b3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5yb3csaC5jb2wpKSxmZXx8KGZlPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24odGhpcy5jdXJyZW50VEgsaC5y'@;
put 'b3csaC5jb2wpKSx0aGlzLmN1cnJlbnRSb3c9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSx0aGlzLnNlbGVjdGVkUm93cz1bXTtjb25zdCBfZT10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCl8fHRoaXMuaG90LnNl'@;
put 'bGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZfZSYmUm4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLFdlPT57TW8oV2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5yb3csV2UuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cs'@;
put 'eXQ9Pnt0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh5dCl8fHRoaXMuc2VsZWN0ZWRSb3dzLnB1c2goeXQpfSl9KSx0aGlzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyh0aGlzLmN1cnJlbnRSb3cpfHwodGhpcy5zZWxlY3RlZFJvd3M9W3RoaXMuY3VycmVudFJvd10pLHRoaXMuc3RhcnRPZmZz'@;
put 'ZXQ9ZmUudG9wLTYsdGhpcy5zdGFydEhlaWdodD1wYXJzZUludChULmhlaWdodCwxMCksdGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5zdGFydEhlaWdodH1weGAsdGhpcy5oYW5kbGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2ZlLnN0YXJ0fXB4YCx0'@;
put 'aGlzLmhhbmRsZS5zdHlsZS53aWR0aD1gJHt2fXB4YCx0aGlzLmhvdC5yb290RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmhhbmRsZSl9cmVmcmVzaEhhbmRsZVBvc2l0aW9uKCl7dGhpcy5oYW5kbGUuc3R5bGUudG9wPWAke3RoaXMuc3RhcnRPZmZzZXQrdGhpcy5jdXJyZW50SGVpZ2h0fXB4'@;
put 'YH1zZXR1cEd1aWRlUG9zaXRpb24oKXtjb25zdCBsPXBhcnNlSW50KE5hKHRoaXMuaGFuZGxlKSwxMCksYT1wYXJzZUludCh0aGlzLmhhbmRsZS5zdHlsZVt0aGlzLmlubGluZURpcl0sMTApK2wsZD1wYXJzZUludCh0aGlzLmhvdC52aWV3Lm1heGltdW1WaXNpYmxlRWxlbWVudFdpZHRoKDAp'@;
put 'LDEwKTt3aSh0aGlzLmhhbmRsZSwiYWN0aXZlIiksd2kodGhpcy5ndWlkZSwiYWN0aXZlIiksdGhpcy5ndWlkZS5zdHlsZS50b3A9dGhpcy5oYW5kbGUuc3R5bGUudG9wLHRoaXMuZ3VpZGUuc3R5bGVbdGhpcy5pbmxpbmVEaXJdPWAke2F9cHhgLHRoaXMuZ3VpZGUuc3R5bGUud2lkdGg9ZC1s'@;
put 'KyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5ndWlkZSl9cmVmcmVzaEd1aWRlUG9zaXRpb24oKXt0aGlzLmd1aWRlLnN0eWxlLnRvcD10aGlzLmhhbmRsZS5zdHlsZS50b3B9aGlkZUhhbmRsZUFuZEd1aWRlKCl7c3ModGhpcy5oYW5kbGUsImFjdGl2ZSIpLHNz'@;
put 'KHRoaXMuZ3VpZGUsImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7dmFyIGE7cmV0dXJuIFE0KGwsWyJUSCJdLHRoaXMuaG90LnJvb3RFbGVtZW50KSYmIlRCT0RZIj09PShudWxsPT09KGE9bC5wYXJlbnROb2RlKXx8dm9pZCAwPT09YXx8bnVsbD09PShhPWEucGFyZW50Tm9kZSl8fHZv'@;
put 'aWQgMD09PWE/dm9pZCAwOmEudGFnTmFtZSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3Qg'@;
put 'YT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmdGhpcy5uZXdTaXplPGE/YTp0aGlzLm5ld1NpemV9b25Nb3VzZU92ZXIobCl7aWYoIXFWKGwudGFyZ2V0KSYmITAhPT10aGlzLmlzVHJpZ2dlcmVkQnlSTUImJnRoaXMuY2hlY2tJ'@;
put 'ZlJvd0hlYWRlcihsLnRhcmdldCkpe2NvbnN0IGE9dGhpcy5nZXRDbG9zZXN0VEhQYXJlbnQobC50YXJnZXQpO2EmJih0aGlzLnByZXNzZWR8fHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihhKSl9fWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5mb3JjZUZ1'@;
put 'bGxSZW5kZXI9ITAsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSghMCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApO3ZvaWQg'@;
put 'MCE9PWYmJih0aGlzLm5ld1NpemU9ZiksdGhpcy5zZXRNYW51YWxTaXplKGQsdGhpcy5uZXdTaXplKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07dGhpcy5kYmxjbGljaz49MiYmKHRoaXMuc2VsZWN0'@;
put 'ZWRSb3dzLmxlbmd0aD4xPyhSbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoKX0pLGwoKSk6Um4odGhpcy5zZWxlY3RlZFJvd3MsaD0+e2EoaCwhMCl9KSksdGhpcy5kYmxjbGljaz0wLHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9bnVsbH1vbk1vdXNlRG93bihsKXtRbyhsLnRhcmdldCwibWFu'@;
put 'dWFsUm93UmVzaXplciIpJiYodGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKHRoaXMuY3VycmVudFRIKSx0aGlzLnNldHVwR3VpZGVQb3NpdGlvbigpLHRoaXMucHJlc3NlZD0hMCxudWxsPT09dGhpcy5hdXRvcmVzaXplVGltZW91dCYmKHRoaXMuYXV0b3Jlc2l6ZVRpbWVvdXQ9c2V0VGltZW91'@;
put 'dCgoKT0+dGhpcy5hZnRlck1vdXNlRG93blRpbWVvdXQoKSw1MDApLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQodGhpcy5hdXRvcmVzaXplVGltZW91dCkpLHRoaXMuZGJsY2xpY2srPTEsdGhpcy5zdGFydFk9bC5wYWdlWSx0aGlzLm5ld1NpemU9dGhpcy5zdGFydEhlaWdodCl9b25Nb3Vz'@;
put 'ZU1vdmUobCl7dGhpcy5wcmVzc2VkJiYodGhpcy5jdXJyZW50SGVpZ2h0PXRoaXMuc3RhcnRIZWlnaHQrKGwucGFnZVktdGhpcy5zdGFydFkpLFJuKHRoaXMuc2VsZWN0ZWRSb3dzLGE9Pnt0aGlzLm5ld1NpemU9dGhpcy5zZXRNYW51YWxTaXplKGEsdGhpcy5jdXJyZW50SGVpZ2h0KX0pLHRo'@;
put 'aXMucmVmcmVzaEhhbmRsZVBvc2l0aW9uKCksdGhpcy5yZWZyZXNoR3VpZGVQb3NpdGlvbigpKX1vbk1vdXNlVXAoKXtjb25zdCBsPSgpPT57dGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMuaG90LnZpZXcucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUo'@;
put 'ITApfSxhPShkLGgpPT57dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoZCksZCwhMSksaCYmbCgpLHRoaXMuc2F2ZU1hbnVhbFJvd0hlaWdodHMoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0'@;
put 'dWFsUm93SGVpZ2h0KGQpLGQsITEpfTt0aGlzLnByZXNzZWQmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHRoaXMucHJlc3NlZD0hMSx0aGlzLm5ld1NpemUhPT10aGlzLnN0YXJ0SGVpZ2h0JiYodGhpcy5zZWxlY3RlZFJvd3MubGVuZ3RoPjE/KFJuKHRoaXMuc2VsZWN0ZWRSb3dzLGg9'@;
put 'PnthKGgpfSksbCgpKTpSbih0aGlzLnNlbGVjdGVkUm93cyxoPT57YShoLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24odGhpcy5jdXJyZW50VEgpKX1vbkNvbnRleHRNZW51KCl7dGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGls'@;
put 'ZCh0aGlzLmhhbmRsZSksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5ndWlkZSksdGhpcy5wcmVzc2VkPSExLHRoaXMuaXNUcmlnZ2VyZWRCeVJNQj0hMCx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt0aGlzLmlzVHJpZ2dlcmVkQnlSTUI9ITF9KX1iaW5k'@;
put 'RXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2VvdmVyIixkPT50aGlzLm9uTW91c2VPdmVyKGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1v'@;
put 'dXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PnRoaXMub25N'@;
put 'b3VzZVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5oYW5kbGUsImNvbnRleHRtZW51IiwoKT0+dGhpcy5vbkNvbnRleHRNZW51KCkpfW9uTW9kaWZ5Um93SGVpZ2h0KGwsYSl7bGV0IGQ9bDtpZih0aGlzLmVuYWJsZWQpe2NvbnN0IGg9dGhpcy5ob3QudG9Q'@;
put 'aHlzaWNhbFJvdyhhKSxmPXRoaXMucm93SGVpZ2h0c01hcC5nZXRWYWx1ZUF0SW5kZXgoaCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtxRF0mJmYmJihkPWYpfXJldHVybiBkfW9uTWFwSW5pdCgpe2NvbnN0IGw9dFUuZ2V0KHRoaXMpLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtxRF0sZD10'@;
put 'aGlzLmxvYWRNYW51YWxSb3dIZWlnaHRzKCk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0eXBlb2YgZDwidSI/ZC5mb3JFYWNoKChoLGYpPT57dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSk6QXJyYXkuaXNBcnJheShhKT8oYS5mb3JFYWNoKChoLGYpPT57'@;
put 'dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleChmLGgpfSksbC5jb25maWc9YSk6ITA9PT1hJiZBcnJheS5pc0FycmF5KGwuY29uZmlnKSYmbC5jb25maWcuZm9yRWFjaCgoaCxmKT0+e3RoaXMucm93SGVpZ2h0c01hcC5zZXRWYWx1ZUF0SW5kZXgoZixoKX0pfSwhMCl9ZGVzdHJv'@;
put 'eSgpe3N1cGVyLmRlc3Ryb3koKX19Y29uc3QgUGY9Y2xhc3MgRFVle2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5yZW1vdmVkPSExLHRoaXMuY2VsbENvb3Jkc0ZhY3Rvcnk9Zix0aGlzLmNl'@;
put 'bGxSYW5nZUZhY3Rvcnk9dn1zdGF0aWMgTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCl7cmV0dXJuIFdhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCB3aXRoIHtyb3c6ICR7bC5yb3d9LCBjb2w6ICR7bC5jb2x9LFx4MjAKICAgICAgcm93c3BhbjogJHtsLnJvd3NwYW59LCBjb2xzcGFuOiAk'@;
put 'e2wuY29sc3Bhbn19IGNvbnRhaW5zIG5lZ2F0aXZlIHZhbHVlcywgd2hpY2ggaXNceDIwCiAgICAgIG5vdCBzdXBwb3J0ZWQuIEl0IHdpbGwgbm90IGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uLmB9c3RhdGljIElTX09VVF9PRl9CT1VORFNfV0FSTklORyhsKXtyZXR1cm4gV2FgVGhlIG1l'@;
put 'cmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2wucm93fSwgJHtsLmNvbH1dIGlzIHBvc2l0aW9uZWRceDIwCiAgICAgIChvciBwb3NpdGlvbmVkIHBhcnRpYWxseSkgb3V0c2lkZSBvZiB0aGUgdGFibGUgcmFuZ2UuIEl0IHdhcyBub3QgYWRkZWQgdG8gdGhlIHRhYmxlLCBwbGVhc2UgZml4IHlv'@;
put 'dXIgc2V0dXAuYH1zdGF0aWMgSVNfU0lOR0xFX0NFTEwobCl7cmV0dXJuIFdhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtl'@;
put 'cyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7cmV0dXJuIFdhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSBoYXMgInJvd3NwYW4iXHgyMAog'@;
put 'ICAgICBvciAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjAiLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLiBJdCBjYW5ub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKXtyZXR1cm4gbC5yb3c8MHx8bC5jb2w8MHx8bC5yb3dzcGFu'@;
put 'PDB8fGwuY29sc3BhbjwwfXN0YXRpYyBpc1NpbmdsZUNlbGwobCl7cmV0dXJuIDE9PT1sLmNvbHNwYW4mJjE9PT1sLnJvd3NwYW59c3RhdGljIGNvbnRhaW5zWmVyb1NwYW4obCl7cmV0dXJuIDA9PT1sLmNvbHNwYW58fDA9PT1sLnJvd3NwYW59c3RhdGljIGlzT3V0T2ZCb3VuZHMobCxhLGQp'@;
put 'e3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlzLnJvdzwwP3RoaXMucm93PTA6dGhp'@;
put 'cy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5jb2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMuY29sc3Bhbj5kLTEmJih0aGlzLmNv'@;
put 'bHNwYW49ZC10aGlzLmNvbCl9aW5jbHVkZXMobCxhKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMuY29sPD1hJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bCYmdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE+PWF9aW5jbHVkZXNIb3Jpem9udGFsbHkobCl7cmV0dXJuIHRoaXMuY29sPD1sJiZ0'@;
put 'aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49bH1pbmNsdWRlc1ZlcnRpY2FsbHkobCl7cmV0dXJuIHRoaXMucm93PD1sJiZ0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMT49bH1zaGlmdChsLGEpe2NvbnN0IGQ9bFswXXx8bFsxXSxoPWErTWF0aC5hYnMobFswXXx8bFsxXSktMSxmPWxbMF0/ImNvbHNw'@;
put 'YW4iOiJyb3dzcGFuIix2PWxbMF0/ImNvbCI6InJvdyIsVD1NYXRoLm1pbihhLGgpLFk9TWF0aC5tYXgoYSxoKSxyZT10aGlzW3ZdLGZlPXRoaXNbdl0rdGhpc1tmXS0xO2lmKHJlPj1hJiYodGhpc1t2XSs9ZCksZD4wKWE8PWZlJiZhPnJlJiYodGhpc1tmXSs9ZCk7ZWxzZSBpZihkPDApe2lm'@;
put 'KFQ8PXJlJiZZPj1mZSlyZXR1cm4gdGhpcy5yZW1vdmVkPSEwLCExO2lmKHJlPj1UJiZyZTw9WSl7Y29uc3QgX2U9WS1yZSsxLGtlPU1hdGguYWJzKGQpLV9lO3RoaXNbdl0tPWtlK2QsdGhpc1tmXS09X2V9ZWxzZSByZTw9VCYmZmU+PVk/dGhpc1tmXSs9ZDpyZTw9VCYmZmU+PVQmJmZlPFkm'@;
put 'Jih0aGlzW2ZdLT1mZS1UKzEpfXJldHVybiEwfWlzRmFydGhlcihsLGEpe3JldHVybiFsfHwoImRvd24iPT09YT9sLnJvdytsLnJvd3NwYW4tMTx0aGlzLnJvdyt0aGlzLnJvd3NwYW4tMToidXAiPT09YT9sLnJvdz50aGlzLnJvdzoicmlnaHQiPT09YT9sLmNvbCtsLmNvbHNwYW4tMTx0aGlz'@;
put 'LmNvbCt0aGlzLmNvbHNwYW4tMToibGVmdCI9PT1hP2wuY29sPnRoaXMuY29sOm51bGwpfWdldExhc3RSb3coKXtyZXR1cm4gdGhpcy5yb3crdGhpcy5yb3dzcGFuLTF9Z2V0TGFzdENvbHVtbigpe3JldHVybiB0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMX1nZXRSYW5nZSgpe3JldHVybiB0aGlz'@;
put 'LmNlbGxSYW5nZUZhY3RvcnkodGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLnJvdyx0aGlzLmNvbCksdGhpcy5jZWxsQ29vcmRzRmFjdG9yeSh0aGlzLmdldExhc3RSb3coKSx0aGlzLmdldExhc3RDb2x1bW4oKSkp'@;
put 'fX07ZnVuY3Rpb24gblUoYyxsLGEsZCl7bD9sLnJvdz09PWEmJmwuY29sPT09ZD8oYy5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLGwucm93c3Bhbi50b1N0cmluZygpKSxjLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsbC5jb2xzcGFuLnRvU3RyaW5nKCkpKTooYy5yZW1vdmVBdHRyaWJ1dGUoInJv'@;
put 'd3NwYW4iKSxjLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGMuc3R5bGUuZGlzcGxheT0ibm9uZSIpOihjLnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksYy5zdHlsZS5kaXNwbGF5PSIiKX1jbGFzcyByVXtjb25zdHJ1Y3RvcihsKXt0'@;
put 'aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHM9W10sdGhpcy5ob3Q9bC5ob3R9c3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7cmV0dXJuIFdhYFRoZSBtZXJnZWQgY2VsbCBkZWNsYXJlZCBhdCBbJHtsLnJvd30sICR7bC5jb2x9XSwgb3ZlcmxhcHNceDIwCiAgICAgIHdpdGgg'@;
put 'dGhlIG90aGVyIGRlY2xhcmVkIG1lcmdlZCBjZWxsLiBUaGUgb3ZlcmxhcHBpbmcgbWVyZ2VkIGNlbGwgd2FzIG5vdCBhZGRlZCB0byB0aGUgdGFibGUsIHBsZWFzZVx4MjAKICAgICAgZml4IHlvdXIgc2V0dXAuYH1nZXQobCxhKXtsZXQgaD0hMTtyZXR1cm4gUm4odGhpcy5tZXJnZWRDZWxs'@;
put 'cyxmPT4hKGYucm93PD1sJiZmLnJvdytmLnJvd3NwYW4tMT49bCYmZi5jb2w8PWEmJmYuY29sK2YuY29sc3Bhbi0xPj1hJiYoaD1mLDEpKSksaH1nZXRCeVJhbmdlKGwpe2xldCBkPSExO3JldHVybiBSbih0aGlzLm1lcmdlZENlbGxzLGg9PiEoaC5yb3c8PWwuZnJvbS5yb3cmJmgucm93K2gu'@;
put 'cm93c3Bhbi0xPj1sLnRvLnJvdyYmaC5jb2w8PWwuZnJvbS5jb2wmJmguY29sK2guY29sc3Bhbi0xPj1sLnRvLmNvbCl8fChkPWgsZCkpLGR9Z2V0V2l0aGluUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25z'@;
put 'dCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD1bXTtsZXQgZj1sO2lmKCFmLmluY2x1ZGVzUmFuZ2Upe2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5mcm9tLnJvdyxmLmZyb20uY29sKSxUPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYudG8ucm93LGYudG8uY29sKTtmPXRo'@;
put 'aXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LFQpfXJldHVybiBSbihkLHY9Pntjb25zdCBUPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93LHYuY29sKSxZPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKHYucm93K3Yucm93c3Bhbi0xLHYuY29sK3YuY29sc3Bhbi0xKSxyZT10'@;
put 'aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKFQsVCxZKTthP2Yub3ZlcmxhcHMocmUpJiZoLnB1c2godik6Zi5pbmNsdWRlc1JhbmdlKHJlKSYmaC5wdXNoKHYpfSksISFoLmxlbmd0aCYmaH1hZGQobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzLGQ9bC5yb3csaD1sLmNvbCxUPW5ldyBQZihk'@;
put 'LGgsbC5yb3dzcGFuLGwuY29sc3Bhbix0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyx0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKSxZPXRoaXMuZ2V0KGQsaCkscmU9dGhpcy5pc092ZXJsYXBwaW5nKFQpO3JldHVybiBZfHxyZT8oYmwoclUuSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhUKSks'@;
put 'ITEpOih0aGlzLmhvdCYmVC5ub3JtYWxpemUodGhpcy5ob3QpLGEucHVzaChUKSxUKX1yZW1vdmUobCxhKXtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHMsaD10aGlzLmdldChsLGEpLGY9aD90aGlzLm1lcmdlZENlbGxzLmluZGV4T2YoaCk6LTE7cmV0dXJuISghaHx8LTE9PT1mKSYmKGQuc3Bs'@;
put 'aWNlKGYsMSksaCl9Y2xlYXIoKXtjb25zdCBhPVtdLGQ9W107Um4odGhpcy5tZXJnZWRDZWxscyxoPT57Y29uc3QgZj10aGlzLmhvdC5nZXRDZWxsKGgucm93LGguY29sKTtmJiZhLnB1c2goW2YsdGhpcy5nZXQoaC5yb3csaC5jb2wpLGgucm93LGguY29sXSl9KSx0aGlzLm1lcmdlZENlbGxz'@;
put 'Lmxlbmd0aD0wLFJuKGEsKGgsZik9PntNbygwLGgucm93c3Bhbi0xLHY9PntNbygwLGguY29sc3Bhbi0xLFQ9PntpZigwIT09VHx8MCE9PXYpe2NvbnN0IFk9dGhpcy5ob3QuZ2V0Q2VsbChoLnJvdyt2LGguY29sK1QpO1kmJmQucHVzaChbWSxudWxsLG51bGwsbnVsbF0pfX0pfSksYVtmXVsx'@;
put 'XT1udWxsfSksUm4oYSxoPT57blUoLi4uaCl9KSxSbihkLGg9PntuVSguLi5oKX0pfWlzT3ZlcmxhcHBpbmcobCl7Y29uc3QgYT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKDAsMCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3cs'@;
put 'bC5jb2wpLHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93K2wucm93c3Bhbi0xLGwuY29sK2wuY29sc3Bhbi0xKSk7bGV0IGQ9ITE7cmV0dXJuIFJuKHRoaXMubWVyZ2VkQ2VsbHMsaD0+IXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'MCwwKSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxoLmNvbCksdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaC5yb3craC5yb3dzcGFuLTEsaC5jb2wraC5jb2xzcGFuLTEpKS5vdmVybGFwcyhhKXx8KGQ9ITAsITEpKSxkfWlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChs'@;
put 'LGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKTtyZXR1cm4gZCYmdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpPT09bCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpPT09YX1n'@;
put 'ZXRGaXJzdFJlbmRlcmFibGVDb29yZHMobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWR8fHRoaXMuaXNGaXJzdFJlbmRlcmFibGVNZXJnZWRDZWxsKGwsYSkpcmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSk7Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBl'@;
put 'ci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5yb3csMSksZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC5jb2wsMSk7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGgsZil9c2hpZnRDb2xsZWN0aW9ucyhsLGEsZCl7Y29u'@;
put 'c3QgaD1bMCwwXTtzd2l0Y2gobCl7Y2FzZSJyaWdodCI6aFswXSs9ZDticmVhaztjYXNlImxlZnQiOmhbMF0tPWQ7YnJlYWs7Y2FzZSJkb3duIjpoWzFdKz1kO2JyZWFrO2Nhc2UidXAiOmhbMV0tPWR9Um4odGhpcy5tZXJnZWRDZWxscyxmPT57Zi5zaGlmdChoLGEpfSksQVQodGhpcy5tZXJn'@;
put 'ZWRDZWxscy5sZW5ndGgtMSwwLGY9Pntjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNbZl07diYmdi5yZW1vdmVkJiZ0aGlzLm1lcmdlZENlbGxzLnNwbGljZSh0aGlzLm1lcmdlZENlbGxzLmluZGV4T2YodiksMSl9KX19Y29uc3QgQVVlPXJVLElVZT1jbGFzcyBMVWV7Y29uc3RydWN0b3IobCl7'@;
put 'dGhpcy5wbHVnaW49bCx0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbj10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24sdGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbH1jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUobCl7aWYobFswXT09PWxbMl0mJmxbMV09PT1sWzNdKXtjb25zdCBh'@;
put 'PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2EmJihsWzJdPWxbMF0rYS5yb3dzcGFuLTEsbFszXT1sWzFdK2EuY29sc3Bhbi0xKX19Z2V0RGlyZWN0aW9uKGwsYSl7bGV0IGQ9bnVsbDtyZXR1cm4gZD1hWzBdPT09bFswXSYmYVsxXT09PWxbMV0mJmFbM109PT1s'@;
put 'WzNdPyJkb3duIjphWzJdPT09bFsyXSYmYVsxXT09PWxbMV0mJmFbM109PT1sWzNdPyJ1cCI6YVsxXT09PWxbMV0mJmFbMl09PT1sWzJdPyJyaWdodCI6ImxlZnQiLGR9c25hcERyYWdBcmVhKGwsYSxkLGgpe2NvbnN0IGY9YS5zbGljZSgwKSx2PXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxk'@;
put 'KSxbVCxZLHJlLGZlXT1sLGtlPVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMT9yZS1UKzE6ZmUtWSsxLEplPXYtTWF0aC5mbG9vcih2L2tlKSprZSx0dD10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZih0dClpZigiZG93biI9PT1kKXtjb25zdCB5dD10dC5yb3crdHQu'@;
put 'cm93c3Bhbi1ULUplO2ZbMl0reXQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1KZTpmWzJdKz1KZT95dDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0IHl0PXR0LmNvbCt0dC5jb2xzcGFuLVktSmU7ZlszXSt5dD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2Zb'@;
put 'M10tPUplOmZbM10rPUplP3l0OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgeXQ9cmUtSmUtdHQucm93KzE7ZlswXSt5dDwwP2ZbMF0rPUplOmZbMF0tPUplP3l0OjB9ZWxzZSBpZigibGVmdCI9PT1kKXtjb25zdCB5dD1mZS1KZS10dC5jb2wrMTtmWzFdK3l0PDA/ZlsxXSs9SmU6ZlsxXS09'@;
put 'SmU/eXQ6MH1yZXR1cm4gdGhpcy51cGRhdGVDdXJyZW50RmlsbENhY2hlKHtiYXNlQXJlYTpsLGRyYWdEaXJlY3Rpb246ZCxmb3VuZE1lcmdlZENlbGxzOmgsZmlsbFNpemU6dixkcmFnQXJlYTpmLGN5Y2xlTGVuZ3RoOmtlfSksZn11cGRhdGVDdXJyZW50RmlsbENhY2hlKGwpe3RoaXMuY3Vy'@;
put 'cmVudEZpbGxEYXRhfHwodGhpcy5jdXJyZW50RmlsbERhdGE9e30pLHhjKHRoaXMuY3VycmVudEZpbGxEYXRhLGwpfWdldEF1dG9maWxsU2l6ZShsLGEsZCl7Y29uc3RbaCxmLHYsVF09bCxbWSxyZSxmZSxfZV09YTtzd2l0Y2goZCl7Y2FzZSJ1cCI6cmV0dXJuIGgtWTtjYXNlImRvd24iOnJl'@;
put 'dHVybiBmZS12O2Nhc2UibGVmdCI6cmV0dXJuIGYtcmU7Y2FzZSJyaWdodCI6cmV0dXJuIF9lLVQ7ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0W2gsZix2LFRdPWwsW1kscmUsZmUsX2VdPWE7c3dpdGNoKGQpe2Nhc2UidXAiOnJldHVybltZLHJlLGgtMSxU'@;
put 'XTtjYXNlImRvd24iOnJldHVyblt2KzEsZixmZSxUXTtjYXNlImxlZnQiOnJldHVybltZLHJlLHYsZi0xXTtjYXNlInJpZ2h0IjpyZXR1cm5baCxUKzEsZmUsX2VdO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLHYsVCxZXT1sLHJl'@;
put 'PVsidXAiLCJkb3duIl0uaW5kZXhPZihkKT4tMSxmZT1yZT9UOlksX2U9cmU/Zjp2LGtlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxXZT1yZT9ULWYrMTpZLXYrMSx0dD1rZS1NYXRoLmZsb29yKGtlL1dlKSpXZTtsZXQgeXQ9bnVsbCx3dD1udWxsLEx0PW51bGw7c3dpdGNoKGQpe2Nh'@;
put 'c2UidXAiOnl0PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLEx0PWZlLXR0KzE7YnJlYWs7Y2FzZSJsZWZ0Ijp5dD0iaW5jbHVkZXNIb3Jpem9udGFsbHkiLEx0PWZlLXR0KzE7YnJlYWs7Y2FzZSJkb3duIjp5dD0iaW5jbHVkZXNWZXJ0aWNhbGx5IixMdD1fZSt0dC0xO2JyZWFrO2Nhc2UicmlnaHQi'@;
put 'Onl0PSJpbmNsdWRlc0hvcml6b250YWxseSIsTHQ9X2UrdHQtMX1yZXR1cm4gUm4oaCxvbj0+e29uW3l0XShMdCkmJm9uLmlzRmFydGhlcih3dCxkKSYmKHd0PW9uKX0pLHd0fXJlY3JlYXRlQWZ0ZXJEYXRhUG9wdWxhdGlvbihsKXtpZighdGhpcy5jdXJyZW50RmlsbERhdGEpcmV0dXJuO2Nv'@;
put 'bnN0IGE9dGhpcy5nZXRSYW5nZUZyb21DaGFuZ2VzKGwpLGQ9dGhpcy5jdXJyZW50RmlsbERhdGEuZm91bmRNZXJnZWRDZWxscyxoPXRoaXMuY3VycmVudEZpbGxEYXRhLmRyYWdEaXJlY3Rpb24sZj0ocmUsZmUpPT57c3dpdGNoKGgpe2Nhc2UidXAiOnJldHVybiByZS5yb3ctZmU+PWEuZnJv'@;
put 'bS5yb3c7Y2FzZSJkb3duIjpyZXR1cm4gcmUucm93K3JlLnJvd3NwYW4tMStmZTw9YS50by5yb3c7Y2FzZSJsZWZ0IjpyZXR1cm4gcmUuY29sLWZlPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVybiByZS5jb2wrcmUuY29sc3Bhbi0xK2ZlPD1hLnRvLmNvbHVtbjtkZWZhdWx0OnJl'@;
put 'dHVybiBudWxsfX07bGV0IHY9MCxUPW51bGwsWT0xO2Rve2ZvcihsZXQgcmU9MDtyZTxkLmxlbmd0aDtyZSs9MSl7aWYoVD1kW3JlXSx2PVkqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihULHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0Nv'@;
put 'bGxlY3Rpb24uYWRkKHtyb3c6VC5yb3ctdixyb3dzcGFuOlQucm93c3Bhbixjb2w6VC5jb2wsY29sc3BhbjpULmNvbHNwYW59KTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpULnJvdyt2LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpU'@;
put 'LmNvbCxjb2xzcGFuOlQuY29sc3Bhbn0pO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbC12LGNvbHNwYW46VC5jb2xzcGFufSk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5w'@;
put 'bHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93OlQucm93LHJvd3NwYW46VC5yb3dzcGFuLGNvbDpULmNvbCt2LGNvbHNwYW46VC5jb2xzcGFufSl9cmU9PT1kLmxlbmd0aC0xJiYoWSs9MSl9fXdoaWxlKGYoVCx2KSk7dGhpcy5jdXJyZW50RmlsbERhdGE9bnVsbCx0aGlzLnBs'@;
put 'dWdpbi5ob3QucmVuZGVyKCksZC5sZW5ndGg+MCYmdGhpcy5wbHVnaW4uaWZDaHJvbWVGb3JjZVJlcGFpbnQoKX1nZXRSYW5nZUZyb21DaGFuZ2VzKGwpe2NvbnN0IGE9e21pbjpudWxsLG1heDpudWxsfSxkPXttaW46bnVsbCxtYXg6bnVsbH07cmV0dXJuIFJuKGwsaD0+e2NvbnN0IGY9aFsw'@;
put 'XSx2PXRoaXMucGx1Z2luLmhvdC5wcm9wVG9Db2woaFsxXSk7KG51bGw9PT1hLm1pbnx8ZjxhLm1pbikmJihhLm1pbj1mKSwobnVsbD09PWEubWF4fHxmPmEubWF4KSYmKGEubWF4PWYpLChudWxsPT09ZC5taW58fHY8ZC5taW4pJiYoZC5taW49diksKG51bGw9PT1kLm1heHx8dj5kLm1heCkm'@;
put 'JihkLm1heD12KX0pLHtmcm9tOntyb3c6YS5taW4sY29sdW1uOmQubWlufSx0bzp7cm93OmEubWF4LGNvbHVtbjpkLm1heH19fWRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhsLGEsZCl7Y29uc3QgaD10aGlzLmdldERyYWdBcmVhKGwsYSxkKSxbZix2LFQsWV09aCxyZT10aGlzLnBsdWdp'@;
put 'bi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZix2KSxmZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVCxZKSxfZT10aGlzLnBsdWdpbi5ob3QuX2NyZWF0ZUNlbGxSYW5nZShyZSxyZSxmZSk7cmV0dXJuISF0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5n'@;
put 'ZShfZSwhMCl9fSxPVWU9Y2xhc3MgUlVle2NvbnN0cnVjdG9yKGwpe3RoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3QsdGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZT0iZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwifXNuYXBEZWx0YShsLGEsZCl7Y29uc3QgaD1hLnRvLHY9'@;
put 'aC5jb2wrbC5jb2w7bC5yb3c/dGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLGgucm93K2wucm93KTpsLmNvbCYmdGhpcy5qdW1wT3Zlck1lcmdlZENlbGwobCxkLHYpfWp1bXBPdmVyTWVyZ2VkQ2VsbChsLGEsZCl7bGV0IGg9bC5yb3d8fGwuY29sLGY9bnVsbCx2PW51bGwsVD1udWxsO2wu'@;
put 'cm93PyhmPWEuaW5jbHVkZXNWZXJ0aWNhbGx5KGQpLHY9YS5yb3csVD1hLmdldExhc3RSb3coKSk6bC5jb2wmJihmPWEuaW5jbHVkZXNIb3Jpem9udGFsbHkoZCksdj1hLmNvbCxUPWEuZ2V0TGFzdENvbHVtbigpKSwwIT09aCYmKGg+MD9mJiZkIT09diYmKGgrPVQtZCsxKTpmJiZkIT09VCYm'@;
put 'KGgtPWQtdisxKSxsLnJvdz9sLnJvdz1oOmwuY29sJiYobC5jb2w9aCkpfWdldFVwZGF0ZWRTZWxlY3Rpb25SYW5nZShsLGEpe3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGwuaGlnaGxpZ2h0LGwuZnJvbSx0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnRvLnJvdythLnJv'@;
put 'dyxsLnRvLmNvbCthLmNvbCkpfWdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKXtjb25zdCBmPU1hdGgubWluKGRbMF0sZFsyXSksdj1NYXRoLm1pbihkWzFdLGRbM10pLFQ9TWF0aC5tYXgoZFswXSxkWzJdKSxZPU1hdGgubWF4KGRbMV0sZFszXSk7aWYodm9pZCAwPT09'@;
put 'aHx8IXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKSlyZXR1cm47Y29uc3QgZmU9dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFmZSlyZXR1cm47Y29uc3QgX2U9ZmUuZ2V0TGFzdFJv'@;
put 'dygpLGtlPWZlLmdldExhc3RDb2x1bW4oKTtyZXR1cm4gZjw9ZmUucm93JiZ2PD1mZS5jb2wmJlQ+PV9lJiZZPj1rZT9gJHt0aGlzLmZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lfS0ke2h9YDp0aGlzLnBsdWdpbi5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuaXNNZXJnZUNlbGxGdWxs'@;
put 'eVNlbGVjdGVkKGZlLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0dXJu'@;
put 'ITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2PTA7'@;
put 'djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7dGhp'@;
put 'cy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX07YW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZU1lcmdlQ2VsbHMiKSxhby5n'@;
put 'ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJNZXJnZUNlbGxzIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZVVubWVyZ2VDZWxscyIpLGFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclVubWVyZ2VDZWxscyIpO2NvbnN0IG5NPSJtZXJnZUNlbGxzIixWbGU9'@;
put 'bmV3IFdlYWtNYXAsamxlPW5NO2NsYXNzIEhVZSBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBuTX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksVmxlLnNldCh0aGlzLHtsYXN0RGVzaXJlZENv'@;
put 'b3JkczpudWxsfSksdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bnVsbCx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW51bGwsdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbbk1dfWVuYWJsZVBsdWdp'@;
put 'bigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3IEFVZSh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyBJVWUodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IE9VZSh0aGlzKSx0aGlzLmFkZEhvb2so'@;
put 'ImFmdGVySW5pdCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVySW5pdCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVRyYW5zZm9ybVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhv'@;
put 'b2soImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVRyYW5zZm9y'@;
put 'bUVuZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IixmdW5jdGlvbigpe3JldHVy'@;
put 'biBsLm9uQmVmb3JlU2V0UmFuZ2VTdGFydCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVTZXRSYW5nZVN0YXJ0T25seSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVNldFJhbmdlU3RhcnQoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFu'@;
put 'Z2VFbmQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVTZXRSYW5nZUVuZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24oLi4uYXJndW1lbnRzKX0p'@;
put 'LHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW5kZXJlciIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyUmVuZGVyZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe3JldHVybiBsLmFkZE1lcmdlQWN0aW9uc1Rv'@;
put 'Q29udGV4dE1lbnUoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyR2V0Q2VsbE1ldGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZSIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyVmlld3BvcnRDb2x1'@;
put 'bW5DYWxjdWxhdG9yT3ZlcnJpZGUoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUF1dG9maWxsUmFuZ2UoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGwub25BZnRlckNyZWF0ZUNvbCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZUNvbCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyUmVtb3ZlQ29sKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IixmdW5j'@;
put 'dGlvbigpe3JldHVybiBsLm9uQWZ0ZXJDcmVhdGVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlclJlbW92ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbC5vbkFmdGVyQ2hhbmdlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRHJhd0FyZWFCb3JkZXJzKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyRHJhd1NlbGVj'@;
put 'dGlvbiIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkFmdGVyRHJhd1NlbGVjdGlvbiguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzKC4uLmFyZ3VtZW50'@;
put 'cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbGxlY3Rpb25z'@;
put 'KCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtuTV07dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlz'@;
put 'LmdlbmVyYXRlRnJvbVNldHRpbmdzKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIUpWKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93'@;
put 'Omgscm93c3BhbjpmfT1kO2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0'@;
put 'Lnd0T3ZlcmxheXMuZ2V0T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD1jOSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwi'@;
put 'LCAwLjk5KSIpLGwucHVzaCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e2Quc3R5bGUuYmFja2dyb3VuZD1jOShkLCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfXZhbGlkYXRlU2V0dGluZyhsKXtsZXQg'@;
put 'YT0hMDtyZXR1cm4hIWwmJihQZi5jb250YWluc05lZ2F0aXZlVmFsdWVzKGwpPyhibChQZi5ORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKSksYT0hMSk6UGYuaXNPdXRPZkJvdW5kcyhsLHRoaXMuaG90LmNvdW50Um93cygpLHRoaXMuaG90LmNvdW50Q29scygpKT8oYmwoUGYuSVNfT1VUX09G'@;
put 'X0JPVU5EU19XQVJOSU5HKGwpKSxhPSExKTpQZi5pc1NpbmdsZUNlbGwobCk/KGJsKFBmLklTX1NJTkdMRV9DRUxMKGwpKSxhPSExKTpQZi5jb250YWluc1plcm9TcGFuKGwpJiYoYmwoUGYuWkVST19TUEFOX1dBUk5JTkcobCkpLGE9ITEpLGEpfWdlbmVyYXRlRnJvbVNldHRpbmdzKGwpe2lm'@;
put 'KEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9W107aWYoUm4obCxkPT57aWYoIXRoaXMudmFsaWRhdGVTZXR0aW5nKGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93LGQuY29sKSxmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQucm93K2Qucm93'@;
put 'c3Bhbi0xLGQuY29sK2QuY29sc3Bhbi0xKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoaCxoLGYpO3RoaXMubWVyZ2VSYW5nZSh2LCEwLCEwKSxNbyhkLnJvdyxkLnJvdytkLnJvd3NwYW4tMSxUPT57TW8oZC5jb2wsZC5jb2wrZC5jb2xzcGFuLTEsWT0+e1Q9PT1kLnJvdyYmWT09PWQu'@;
put 'Y29sfHxhLnB1c2goW1QsWSxudWxsXSl9KX0pfSksMD09PWEubGVuZ3RoKXJldHVybjt0aGlzLmhvdC5zZXREYXRhQXRDZWxsKGEpfX1jbGVhckNvbGxlY3Rpb25zKCl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uY2xlYXIoKX1jYW5NZXJnZVJhbmdlKGwpe3JldHVybiEhKGFyZ3VtZW50'@;
put 'cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfHx0aGlzLnZhbGlkYXRlU2V0dGluZyhsKX10b2dnbGVNZXJnZU9uU2VsZWN0aW9uKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlv'@;
put 'bih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy50b2dnbGVNZXJnZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX1tZXJnZVNlbGVjdGlvbigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+'@;
put 'MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmhvdC5pc1J0bCgpPyJORS1TVyI6Ik5XLVNFIik7Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdl'@;
put 'UmFuZ2UobCwhMCksdGhpcy5tZXJnZVJhbmdlKGwpLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfXVubWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5o'@;
put 'b3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47Y29uc3R7ZnJvbTphLHRvOmR9PWw7dGhpcy51bm1lcmdlUmFuZ2UobCwhMCksdGhpcy5ob3Quc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9bWVyZ2VSYW5nZShsKXtsZXQgYT1hcmd1bWVudHMubGVu'@;
put 'Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxmPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj17cm93Omgu'@;
put 'cm93LGNvbDpoLmNvbCxyb3dzcGFuOmYucm93LWgucm93KzEsY29sc3BhbjpmLmNvbC1oLmNvbCsxfSxUPVtdO2xldCBZPW51bGw7cmV0dXJuISF0aGlzLmNhbk1lcmdlUmFuZ2UodixhKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVNZXJnZUNlbGxzIixsLGEpLE1vKDAsdi5yb3dzcGFu'@;
put 'LTEsZmU9PntNbygwLHYuY29sc3Bhbi0xLF9lPT57bGV0IGtlPW51bGw7VFtmZV18fChUW2ZlXT1bXSksMD09PWZlJiYwPT09X2U/a2U9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYucm93KSx0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYu'@;
put 'Y29sKSk6dGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3crZmUsdi5jb2wrX2UsImhpZGRlbiIsITApLFRbZmVdW19lXT1rZX0pfSksdGhpcy5ob3Quc2V0Q2VsbE1ldGEodi5yb3csdi5jb2wsInNwYW5uZWQiLCEwKSwhdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHYpfHwoZD9ZPVt2'@;
put 'LnJvdyx2LmNvbCxUXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LnJvdyx2LmNvbCxULHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKSxhfHx0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTWVyZ2VDZWxscyIsbCx2LGEpLFkpKX11'@;
put 'bm1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGwpO2QmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5tZXJn'@;
put 'ZUNlbGxzIixsLGEpLFJuKGQsaD0+e3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnJlbW92ZShoLnJvdyxoLmNvbCksTW8oMCxoLnJvd3NwYW4tMSxmPT57TW8oMCxoLmNvbHNwYW4tMSx2PT57dGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3crZixoLmNvbCt2LCJoaWRkZW4iKSx0aGlz'@;
put 'LmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGguY29sK3YsImNvcHlhYmxlIil9KX0pLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93LGguY29sLCJzcGFubmVkIil9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbm1lcmdlQ2VsbHMiLGwsYSksdGhpcy5ob3QucmVuZGVyKCkpfXRv'@;
put 'Z2dsZU1lcmdlKGwpe2NvbnN0IGE9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwuZnJvbS5yb3csbC5mcm9tLmNvbCk7YS5yb3c9PT1sLmZyb20ucm93JiZhLmNvbD09PWwuZnJvbS5jb2wmJmEucm93K2Eucm93c3Bhbi0xPT09bC50by5yb3cmJmEuY29sK2EuY29sc3Bhbi0xPT09'@;
put 'bC50by5jb2w/dGhpcy51bm1lcmdlUmFuZ2UobCk6dGhpcy5tZXJnZVNlbGVjdGlvbihsKX1tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMubWVyZ2VSYW5nZSh0aGlzLmhv'@;
put 'dC5fY3JlYXRlQ2VsbFJhbmdlKGYsZix2KSl9dW5tZXJnZShsLGEsZCxoKXtjb25zdCBmPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSksdj10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpO3RoaXMudW5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixm'@;
put 'LHYpKX1vbkFmdGVySW5pdCgpe3RoaXMuZ2VuZXJhdGVGcm9tU2V0dGluZ3ModGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtuTV0pLHRoaXMuaG90LnJlbmRlcigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNo'@;
put 'b3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJtIl1dLGNhbGxiYWNrOigpPT57dGhpcy50b2dnbGVNZXJnZSh0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKSx0aGlzLmhvdC5yZW5kZXIoKX0scnVuT25seUlmOmQ9PiFkLmFsdEtleSxncm91cDpqbGV9KX11bnJlZ2lzdGVyU2hvcnRj'@;
put 'dXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoamxlKX1vbkFmdGVySXNNdWx0aXBsZVNlbGVjdGlvbihsKXtpZihsKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxz'@;
put 'LGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grPTEpaWYoZC5mcm9tLnJvdz09PWFbaF0ucm93JiZkLmZyb20uY29sPT09YVtoXS5jb2wmJmQudG8ucm93PT09YVtoXS5yb3crYVtoXS5yb3dzcGFuLTEmJmQudG8uY29sPT09YVtoXS5j'@;
put 'b2wrYVtoXS5jb2xzcGFuLTEpcmV0dXJuITF9cmV0dXJuIGx9b25Nb2RpZnlUcmFuc2Zvcm1TdGFydChsKXtjb25zdCBhPVZsZS5nZXQodGhpcyksZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2xldCBoPXtyb3c6bC5yb3csY29sOmwuY29sfSxmPW51bGw7Y29uc3Qgdj10aGlz'@;
put 'LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLmhpZ2hsaWdodC5yb3csZC5oaWdobGlnaHQuY29sKSxUPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldCh2LnJvdyx2LmNvbCk7aWYoYS5sYXN0RGVzaXJlZENvb3Jkc3x8KGEubGFzdERlc2lyZWRDb29yZHM9dGhpcy5ob3QuX2NyZWF0ZUNl'@;
put 'bGxDb29yZHMobnVsbCxudWxsKSksVCl7Y29uc3QgcmU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoVC5yb3csVC5jb2wpLGZlPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQucm93K1Qucm93c3Bhbi0xLFQuY29sK1QuY29sc3Bhbi0xKTt0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdl'@;
put 'KHJlLHJlLGZlKS5pbmNsdWRlcyhhLmxhc3REZXNpcmVkQ29vcmRzKXx8KGEubGFzdERlc2lyZWRDb29yZHM9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobnVsbCxudWxsKSksaC5yb3c9YS5sYXN0RGVzaXJlZENvb3Jkcy5yb3c/YS5sYXN0RGVzaXJlZENvb3Jkcy5yb3ctdi5yb3c6aC5y'@;
put 'b3csaC5jb2w9YS5sYXN0RGVzaXJlZENvb3Jkcy5jb2w/YS5sYXN0RGVzaXJlZENvb3Jkcy5jb2wtdi5jb2w6aC5jb2wsbC5yb3c+MD9oLnJvdz1ULnJvdytULnJvd3NwYW4tMS12LnJvdytsLnJvdzpsLnJvdzwwJiYoaC5yb3c9di5yb3ctVC5yb3crbC5yb3cpLGwuY29sPjA/aC5jb2w9VC5j'@;
put 'b2wrVC5jb2xzcGFuLTEtdi5jb2wrbC5jb2w6bC5jb2w8MCYmKGguY29sPXYuY29sLVQuY29sK2wuY29sKX1mPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQuaGlnaGxpZ2h0LnJvdytoLnJvdyxkLmhpZ2hsaWdodC5jb2wraC5jb2wpO2NvbnN0IFk9dGhpcy5tZXJnZWRDZWxsc0NvbGxl'@;
put 'Y3Rpb24uZ2V0KGYucm93LGYuY29sKTtpZihZKXtjb25zdCByZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRGaXJzdFJlbmRlcmFibGVDb29yZHMoWS5yb3csWS5jb2wpO2EubGFzdERlc2lyZWRDb29yZHM9ZixoPXtyb3c6cmUucm93LXYucm93LGNvbDpyZS5jb2wtdi5jb2x9fTAh'@;
put 'PT1oLnJvdyYmKGwucm93PWgucm93KSwwIT09aC5jb2wmJihsLmNvbD1oLmNvbCl9b25Nb2RpZnlUcmFuc2Zvcm1FbmQobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9STAobCksaD10aGlzLnNlbGVjdGlvbkNhbGN1bGF0aW9ucy5nZXRVcGRhdGVkU2VsZWN0'@;
put 'aW9uUmFuZ2UoYSxsKTtsZXQgZj1JMChkKTtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGgsITApO2Rve2Y9STAoZCksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0VXBkYXRlZFNlbGVjdGlvblJhbmdlKGEsZCksUm4odixUPT57dGhpcy5z'@;
put 'ZWxlY3Rpb25DYWxjdWxhdGlvbnMuc25hcERlbHRhKGQsYSxUKX0pfXdoaWxlKGQucm93IT09Zi5yb3d8fGQuY29sIT09Zi5jb2wpO2wucm93PWQucm93LGwuY29sPWQuY29sfW9uTW9kaWZ5R2V0Q2VsbENvb3JkcyhsLGEpe2lmKGw8MHx8YTwwKXJldHVybjtjb25zdCBkPXRoaXMubWVyZ2Vk'@;
put 'Q2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2lmKCFkKXJldHVybjtjb25zdHtyb3c6aCxjb2w6Zixjb2xzcGFuOnYscm93c3BhbjpUfT1kO3JldHVybltoLGYsaCtULTEsZit2LTFdfWFkZE1lcmdlQWN0aW9uc1RvQ29udGV4dE1lbnUobCl7bC5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0i'@;
put 'fSxmdW5jdGlvbiBQVWUoYyl7cmV0dXJue2tleToibWVyZ2VDZWxscyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtpZihsKXtjb25zdCBhPWMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsWzBdLGxbMV0pO2lmKGEucm93PT09bFswXSYmYS5jb2w9PT1sWzFdJiZh'@;
put 'LnJvdythLnJvd3NwYW4tMT09PWxbMl0mJmEuY29sK2EuY29sc3Bhbi0xPT09bFszXSlyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKF9CKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGdCKX0sY2FsbGJhY2soKXtjLnRvZ2dsZU1lcmdlT25TZWxlY3Rpb24oKX0sZGlz'@;
put 'YWJsZWQoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWx8fFBmLmlzU2luZ2xlQ2VsbCh7cm93OmxbMF0sY29sOmxbMV0scm93c3BhbjpsWzJdLWxbMF0rMSxjb2xzcGFuOmxbM10tbFsxXSsxfSl8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxo'@;
put 'aWRkZW46ITF9fSh0aGlzKSl9b25BZnRlclJlbmRlcmVyKGwsYSxkKXtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLGQpLGY9dnMoaCk/STAoaCk6dm9pZCAwO2lmKHZzKGYpKXtjb25zdHtyb3dJbmRleE1hcHBlcjp2LGNvbHVtbkluZGV4TWFwcGVyOlR9PXRoaXMu'@;
put 'aG90LHtyb3c6WSxjb2w6cmUsY29sc3BhbjpmZSxyb3dzcGFuOl9lfT1mLFtrZSxXZV09dGhpcy50cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKFksX2UscmUsZmUpLHl0PWtlLXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhKSsxLHd0PVdlLVQuZ2V0UmVuZGVyYWJsZUZy'@;
put 'b21WaXN1YWxJbmRleChkKSsxO2Yucm93PXYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYucm93LDEpLGYuY29sPVQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGYuY29sLDEpLGYucm93c3Bhbj1NYXRoLm1pbihmLnJvd3NwYW4seXQpLGYuY29sc3Bhbj1NYXRoLm1pbihmLmNvbHNwYW4s'@;
put 'd3QpfW5VKGwsZixhLGQpfW9uQmVmb3JlU2V0UmFuZ2VTdGFydChsKXtpZih0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobC5yb3csbC5jb2wpKXtjb25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7'@;
put 'W2wucm93LGwuY29sXT1bYS5yb3csYS5jb2xdfX1vbkJlZm9yZVNldFJhbmdlRW5kKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTthLmhpZ2hsaWdodD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLmhpZ2hsaWdodC5yb3csYS5oaWdobGlnaHQuY29sKSxh'@;
put 'LnRvPWw7bGV0IGQ9ITE7aWYoIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSlkb3tkPSExO2ZvcihsZXQgaD0wO2g8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2Vk'@;
put 'Q2VsbHMubGVuZ3RoO2grPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHNbaF0uZ2V0UmFuZ2UoKTthLmV4cGFuZEJ5UmFuZ2UodikmJihsLnJvdz1hLnRvLnJvdyxsLmNvbD1hLnRvLmNvbCxkPSEwKX19d2hpbGUoZCl9b25BZnRlckdldENlbGxNZXRh'@;
put 'KGwsYSxkKXtjb25zdCBoPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGEpO2gmJihoLnJvdyE9PWx8fGguY29sIT09YT9kLmNvcHlhYmxlPSExOihkLnJvd3NwYW49aC5yb3dzcGFuLGQuY29sc3Bhbj1oLmNvbHNwYW4pKX1vbkFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3Zl'@;
put 'cnJpZGUobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTt0aGlzLm1vZGlmeVZpZXdwb3J0Um93U3RhcnQobCxhKSx0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9bW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1k'@;
put 'LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5zdGFydFJvdyk7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGgsZik7aWYodnModikpe2NvbnN0IFQ9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQuZ2V0TmVh'@;
put 'cmVzdE5vdEhpZGRlbkluZGV4KHYucm93LDEpKTtpZihUPGwuc3RhcnRSb3cpcmV0dXJuIGwuc3RhcnRSb3c9VCx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRSb3dTdGFydChsLGEpfX19bW9kaWZ5Vmlld3BvcnRSb3dFbmQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGg9'@;
put 'ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuZW5kUm93KTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZih2cyh2KSl7Y29uc3QgWT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFy'@;
put 'ZXN0Tm90SGlkZGVuSW5kZXgodi5yb3crdi5yb3dzcGFuLTEsLTEpKTtpZihZPmwuZW5kUm93KXJldHVybiBsLmVuZFJvdz1ZLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpfX19b25BZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5ob3QuY291bnRSb3dzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSksdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpfW1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKXtjb25zdCBkPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGg9ZC5nZXRWaXN1'@;
put 'YWxGcm9tUmVuZGVyYWJsZUluZGV4KGwuc3RhcnRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKHZzKHYpKXtjb25zdCBUPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3RO'@;
put 'b3RIaWRkZW5JbmRleCh2LmNvbCwxKSk7aWYoVDxsLnN0YXJ0Q29sdW1uKXJldHVybiBsLnN0YXJ0Q29sdW1uPVQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uU3RhcnQobCxhKX19fW1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRl'@;
put 'eE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLmVuZENvbHVtbik7Zm9yKGxldCBmPTA7ZjxhO2YrPTEpe2NvbnN0IHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGYsaCk7aWYodnModikpe2NvbnN0IFk9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbElu'@;
put 'ZGV4KGQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYuY29sK3YuY29sc3Bhbi0xLC0xKSk7aWYoWT5sLmVuZENvbHVtbilyZXR1cm4gbC5lbmRDb2x1bW49WSx2b2lkIHRoaXMubW9kaWZ5Vmlld3BvcnRDb2x1bW5FbmQobCxhKX19fXRyYW5zbGF0ZU1lcmdlZENlbGxUb1JlbmRlcmFibGUo'@;
put 'bCxhLGQsaCl7Y29uc3R7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdDtsZXQgVCxZO3JldHVybiBUPTA9PT1hP2YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsMSk6Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCthLTEsLTEpLFk9MD09PWg/di5n'@;
put 'ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCwxKTp2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChkK2gtMSwtMSksW2w+PTA/Zi5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFQpOmwsZD49MD92LmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoWSk6ZF19b25Nb2RpZnlBdXRvZmls'@;
put 'bFJhbmdlKGwsYSl7dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5jb3JyZWN0U2VsZWN0aW9uQXJlYVNpemUoYSk7Y29uc3QgZD10aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmdldERpcmVjdGlvbihhLGwpO2xldCBoPWw7aWYodGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5kcmFnQXJlYU92'@;
put 'ZXJsYXBzQ29sbGVjdGlvbnMoYSxoLGQpKXJldHVybiBoPWEsaDtjb25zdCBmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKHtmcm9tOntyb3c6YVswXSxjb2w6YVsxXX0sdG86e3JvdzphWzJdLGNvbDphWzNdfX0pO3JldHVybiBmJiYoaD10aGlzLmF1dG9maWxs'@;
put 'Q2FsY3VsYXRpb25zLnNuYXBEcmFnQXJlYShhLGgsZCxmKSksaH1vbkFmdGVyQ3JlYXRlQ29sKGwsYSl7dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygicmlnaHQiLGwsYSl9b25BZnRlclJlbW92ZUNvbChsLGEpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9u'@;
put 'LnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLGwsYSl9b25BZnRlckNyZWF0ZVJvdyhsLGEsZCl7ImF1dG8iIT09ZCYmdGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uc2hpZnRDb2xsZWN0aW9ucygiZG93biIsbCxhKX1vbkFmdGVyUmVtb3ZlUm93KGwsYSl7dGhpcy5tZXJnZWRDZWxsc0NvbGxl'@;
put 'Y3Rpb24uc2hpZnRDb2xsZWN0aW9ucygidXAiLGwsYSl9b25BZnRlckNoYW5nZShsLGEpeyJBdXRvZmlsbC5maWxsIj09PWEmJnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpfW9uQmVmb3JlRHJhd0FyZWFCb3JkZXJzKGwsYSl7aWYoYSYm'@;
put 'ImFyZWEiPT09YSl7Y29uc3QgZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO1JuKHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGQpLGY9PntkLmdldEJvdHRvbUVuZENvcm5lcigpLnJvdz09PWYuZ2V0TGFzdFJvdygpJiZkLmdldEJvdHRvbUVuZENv'@;
put 'cm5lcigpLmNvbD09PWYuZ2V0TGFzdENvbHVtbigpJiYobFsyXT1mLnJvdyxsWzNdPWYuY29sKX0pfX1vbkFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQobCxhLGQpe2lmKCF0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGg9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwucm93LGwu'@;
put 'Y29sKTtpZighaClyZXR1cm47Y29uc3QgZj1hPjAsdj1hPDAsVD1kPDAsWT1kPjAscmU9aC5yb3craC5yb3dzcGFuLTE9PXRoaXMuaG90LmNvdW50Um93cygpLTEsZmU9MD09PWgucm93LF9lPWguY29sK2guY29sc3Bhbi0xPT10aGlzLmhvdC5jb3VudENvbHMoKS0xOyhmJiZyZXx8diYmZmV8'@;
put 'fFkmJl9lfHxUJiYwPT09aC5jb2wpJiYobC5yb3c9aC5yb3csbC5jb2w9aC5jb2wpfW9uQWZ0ZXJEcmF3U2VsZWN0aW9uKGwsYSxkLGgpe2lmKGQpcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShsLGEsZCxoKX1vbkJlZm9y'@;
put 'ZVJlbW92ZUNlbGxDbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZVRvUmVtb3ZlKCl9fWZ1bmN0aW9uIEJsZSgpe2JsKFdhYFBsdWdpbnMgXGBjb2x1bW5Tb3J0aW5nXGAgYW5kIFxgbXVsdGlDb2x1bW5T'@;
put 'b3J0aW5nXGAgc2hvdWxkIG5vdCBiZSBlbmFibGVkIHNpbXVsdGFuZW91c2x5LiAKICAgIE9ubHkgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCB3aWxsIHdvcmsuYCl9Y29uc3QgaVU9Im11bHRpQ29sdW1uU29ydGluZyIsemxlPSJjb2x1bW5Tb3J0aW5nIjtjYWUoaVUsZnVuY3Rpb24gTlVlKGMs'@;
put 'bCl7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbiB2KFQpe2NvbnN0IFk9Y1tUXSxyZT1sW1RdLGZlPWhbVF0sX2U9ZltUXSxrZT1yZS5tdWx0aUNvbHVtblNvcnRpbmcsSmU9KGtlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/a2Uu'@;
put 'Y29tcGFyZUZ1bmN0aW9uRmFjdG9yeTp1YWUocmUudHlwZSkpKFkscmUsa2UpKGZlLF9lKTtpZigwPT09SmUpe2NvbnN0IHR0PVQrMTtpZih0eXBlb2YgbFt0dF08InUiKXJldHVybiB2KHR0KX1yZXR1cm4gSmV9KDApfX0pO2NsYXNzIHpVZSBleHRlbmRzIGhhZXtzdGF0aWMgZ2V0IFBMVUdJ'@;
put 'Tl9LRVkoKXtyZXR1cm4gaVV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTcwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMucGx1Z2luS2V5PWlVfWlzRW5hYmxlZCgpe3JldHVybiBzdXBlci5pc0VuYWJsZWQoKX1lbmFibGVQbHVnaW4oKXshdGhpcy5lbmFibGVk'@;
put 'JiZ0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6bGVdJiZCbGUoKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXNvcnQobCl7c3VwZXIuc29ydChsKX1jbGVhclNv'@;
put 'cnQoKXtzdXBlci5jbGVhclNvcnQoKX1pc1NvcnRlZCgpe3JldHVybiBzdXBlci5pc1NvcnRlZCgpfWdldFNvcnRDb25maWcobCl7cmV0dXJuIHN1cGVyLmdldFNvcnRDb25maWcobCl9c2V0U29ydENvbmZpZyhsKXtzdXBlci5zZXRTb3J0Q29uZmlnKGwpfWdldE5vcm1hbGl6ZWRTb3J0Q29u'@;
put 'Zmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sOltsXX11cGRhdGVIZWFkZXJDbGFzc2VzKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+'@;
put 'MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTtzdXBlci51cGRhdGVIZWFkZXJDbGFzc2VzKGwsLi4uZCksc3MobCxmdW5jdGlvbiBqVWUoYyl7Y29uc3QgbD1jLmNsYXNzTmFtZS5zcGxpdCgiICIpLGE9bmV3IFJlZ0V4cCgiXnNvcnQtWzAtOV17MSwyfSQiKTtyZXR1'@;
put 'cm4gbC5maWx0ZXIoZD0+YS50ZXN0KGQpKX0obCkpLCExIT09dGhpcy5lbmFibGVkJiZ3aShsLGZ1bmN0aW9uIFZVZShjLGwsYSl7Y29uc3QgZD1bXTtyZXR1cm4hMT09PWF8fGMuaXNDb2x1bW5Tb3J0ZWQobCkmJmMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCk+MSYmZC5wdXNoKGBzb3J0'@;
put 'LSR7Yy5nZXRJbmRleE9mQ29sdW1uSW5Tb3J0UXVldWUobCkrMX1gKSxkfSguLi5kKSl9b25VcGRhdGVTZXR0aW5ncyhsKXt0aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSYmdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6bGVdJiZCbGUoKSxzdXBlci5vblVwZGF0ZVNldHRp'@;
put 'bmdzKGwpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXshMSE9PXFZKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90LmRlc2VsZWN0'@;
put 'Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGEuY29sLCJhcHBlbmQiKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpKSl9fWNsYXNzIFdVZSBleHRlbmRzIHNhe3N0YXRpYyBnZXQg'@;
put 'UExVR0lOX0tFWSgpe3JldHVybiJtdWx0aXBsZVNlbGVjdGlvbkhhbmRsZXMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE2MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRyYWdnZWQ9W10sdGhpcy5ldmVudE1hbmFnZXI9bnVsbCx0aGlzLmxhc3RTZXRDZWxs'@;
put 'PW51bGx9aXNFbmFibGVkKCl7cmV0dXJuIGYyKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5ldmVudE1hbmFnZXJ8fCh0aGlzLmV2ZW50TWFuYWdlcj1uZXcgamwodGhpcykpLHRoaXMucmVnaXN0ZXJMaXN0ZW5lcnMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9cmVnaXN0'@;
put 'ZXJMaXN0ZW5lcnMoKXtjb25zdCBsPXRoaXMse3Jvb3RFbGVtZW50OmF9PXRoaXMuaG90O2Z1bmN0aW9uIGQoaCl7aWYoMT09PWwuZHJhZ2dlZC5sZW5ndGgpcmV0dXJuIGwuZHJhZ2dlZC5zcGxpY2UoMCxsLmRyYWdnZWQubGVuZ3RoKSwhMDtjb25zdCBmPWwuZHJhZ2dlZC5pbmRleE9mKGgp'@;
put 'O2lmKC0xPT09ZilyZXR1cm4hMTswPT09Zj9sLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKDAsMSk6MT09PWYmJihsLmRyYWdnZWQ9bC5kcmFnZ2VkLnNsaWNlKC0xKSl9dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJ0b3VjaHN0YXJ0IixoPT57bGV0IGY7cmV0dXJuIFFv'@;
put 'KGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhmPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksbC5kcmFnZ2VkLnB1c2goInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXt3aWR0aDpmLmdldFdpZHRoKCksaGVpZ2h0OmYuZ2V0SGVpZ2h0KCksZGlyZWN0aW9uOmYu'@;
put 'Z2V0RGlyZWN0aW9uKCl9LGgucHJldmVudERlZmF1bHQoKSwhMSk6UW8oaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgiYm90dG9tIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRo'@;
put 'OmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDB9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoZW5kIixoPT5RbyhoLnRhcmdldCwidG9wU2Vs'@;
put 'ZWN0aW9uSGFuZGxlLUhpdEFyZWEiKT8oZC5jYWxsKGwsInRvcCIpLGwudG91Y2hTdGFydFJhbmdlPXZvaWQgMCxoLnByZXZlbnREZWZhdWx0KCksITEpOlFvKGgudGFyZ2V0LCJib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwiYm90dG9tIiksbC50b3VjaFN0YXJ0'@;
put 'UmFuZ2U9dm9pZCAwLGgucHJldmVudERlZmF1bHQoKSwhMSk6dm9pZCAwKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNobW92ZSIsaD0+e2NvbnN0e3Jvb3REb2N1bWVudDpmfT10aGlzLmhvdDtsZXQgdixULFkscmUsZmUsX2U7aWYoMD09PWwuZHJhZ2dlZC5s'@;
put 'ZW5ndGgpcmV0dXJuO2NvbnN0IGtlPWYuZWxlbWVudEZyb21Qb2ludChoLnRvdWNoZXNbMF0uY2xpZW50WCxoLnRvdWNoZXNbMF0uY2xpZW50WSk7IWtlfHxrZT09PWwubGFzdFNldENlbGx8fCgoIlREIj09PWtlLm5vZGVOYW1lfHwiVEgiPT09a2Uubm9kZU5hbWUpJiYodj1sLmhvdC5nZXRD'@;
put 'b29yZHMoa2UpLC0xPT09di5jb2wmJih2LmNvbD0wKSxUPWwuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksWT1ULmdldFdpZHRoKCkscmU9VC5nZXRIZWlnaHQoKSxmZT1ULmdldERpcmVjdGlvbigpLDE9PT1ZJiYxPT09cmUmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZUVuZCh2KSxfZT1s'@;
put 'LmdldEN1cnJlbnRSYW5nZUNvb3JkcyhULHYsbC50b3VjaFN0YXJ0UmFuZ2UuZGlyZWN0aW9uLGZlLGwuZHJhZ2dlZFswXSksbnVsbCE9PV9lLnN0YXJ0JiZsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VTdGFydChfZS5zdGFydCksbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKF9lLmVuZCks'@;
put 'bC5sYXN0U2V0Q2VsbD1rZSksaC5wcmV2ZW50RGVmYXVsdCgpKX0pfWdldEN1cnJlbnRSYW5nZUNvb3JkcyhsLGEsZCxoLGYpe2NvbnN0IHY9bC5nZXRUb3BTdGFydENvcm5lcigpLFQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKSxZPWwuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKSxyZT1sLmdldFRv'@;
put 'cEVuZENvcm5lcigpO2xldCBmZT17c3RhcnQ6bnVsbCxlbmQ6bnVsbH07c3dpdGNoKGQpe2Nhc2UiTkUtU1ciOnN3aXRjaChoKXtjYXNlIk5FLVNXIjpjYXNlIk5XLVNFIjpmZT0idG9wIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LGwuaGlnaGxpZ2h0LmNv'@;
put 'bCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFkucm93LGEuY29sKX06e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwuaGlnaGxpZ2h0LnJvdyxhLmNvbCksZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX07YnJlYWs7Y2FzZSJTRS1O'@;
put 'VyI6ImJvdHRvbSI9PT1mJiYoZmU9e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKFQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpfSl9YnJlYWs7Y2FzZSJOVy1TRSI6c3dpdGNoKGgpe2Nhc2UiTkUtU1ciOiJ0b3AiPT09Zj9m'@;
put 'ZT17c3RhcnQ6YSxlbmQ6WX06ZmUuZW5kPWE7YnJlYWs7Y2FzZSJOVy1TRSI6InRvcCI9PT1mP2ZlPXtzdGFydDphLGVuZDpUfTpmZS5lbmQ9YTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/ZmU9e3N0YXJ0OmEsZW5kOnZ9OmZlLmVuZD1hO2JyZWFrO2Nhc2UiU1ctTkUiOiJ0b3AiPT09'@;
put 'Zj9mZT17c3RhcnQ6YSxlbmQ6cmV9OmZlLmVuZD1hfWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpmZT0iYm90dG9tIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo'@;
put 'WS5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxULmNvbCl9O2JyZWFrO2Nhc2UiU1ctTkUiOmZlPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxD'@;
put 'b29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csVC5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9'@;
put 'O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Zj9mZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3cscmUuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpfToidG9wIj09PWYmJihmZT17c3RhcnQ6WSxlbmQ6YX0pfWJyZWFr'@;
put 'O2Nhc2UiU0UtTlciOnN3aXRjaChoKXtjYXNlIk5XLVNFIjpjYXNlIk5FLVNXIjpjYXNlIlNXLU5FIjoidG9wIj09PWYmJihmZS5lbmQ9YSk7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP2ZlLmVuZD1hOmZlPXtzdGFydDphLGVuZDp2fX19cmV0dXJuIGZlfWlzRHJhZ2dlZCgpe3JldHVy'@;
put 'biB0aGlzLmRyYWdnZWQubGVuZ3RoPjB9fWZ1bmN0aW9uIG9VKCl7bGV0e2xhYmVsOmM9IiIsY29sc3BhbjpsPTEsb3JpZ0NvbHNwYW46YT0xLGNvbGxhcHNpYmxlOmQ9ITEsY3Jvc3NIaWRkZW5Db2x1bW5zOmg9W10saXNDb2xsYXBzZWQ6Zj0hMSxpc0hpZGRlbjp2PSExLGlzUm9vdDpUPSEx'@;
put 'LGlzUGxhY2Vob2xkZXI6WT0hMX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybntsYWJlbDpjLGNvbHNwYW46bCxvcmlnQ29sc3BhbjphLGNvbGxhcHNpYmxlOmQsaXNDb2xsYXBzZWQ6Zixjcm9zc0hpZGRlbkNvbHVtbnM6'@;
put 'aCxpc0hpZGRlbjp2LGlzUm9vdDpULGlzUGxhY2Vob2xkZXI6WX19ZnVuY3Rpb24gc1UoYyxsLGEpeyhmdW5jdGlvbiAkVWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFu'@;
put 'IG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIHYyKGMsbCl7cmV0dXJuIGZ1bmN0aW9uIHFVZShjLGwpe3JldHVybiBsLmdldD9sLmdldC5jYWxsKGMpOmwudmFsdWV9KGMsWmxlKGMsbCwiZ2V0IikpfWZ1bmN0aW9uIHJNKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gS1VlKGMs'@;
put 'bCxhKXtpZihsLnNldClsLnNldC5jYWxsKGMsYSk7ZWxzZXtpZighbC53cml0YWJsZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gc2V0IHJlYWQgb25seSBwcml2YXRlIGZpZWxkIik7bC52YWx1ZT1hfX0oYyxabGUoYyxsLCJzZXQiKSxhKSxhfWZ1bmN0aW9uIFpsZShjLGws'@;
put 'YSl7aWYoIWwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byAiK2ErIiBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZSIpO3JldHVybiBsLmdldChjKX1jb25zdCBXbGU9WyJsYWJlbCIsImNvbGxhcHNpYmxlIl07dmFyIG1wPW5ldyBXZWFrTWFwLHM2PW5ldyBX'@;
put 'ZWFrTWFwLGFVPW5ldyBXZWFrTWFwO2NsYXNzIFhVZXtjb25zdHJ1Y3Rvcigpe3NVKHRoaXMsbXAse3dyaXRhYmxlOiEwLHZhbHVlOltdfSksc1UodGhpcyxzNix7d3JpdGFibGU6ITAsdmFsdWU6MH0pLHNVKHRoaXMsYVUse3dyaXRhYmxlOiEwLHZhbHVlOjEvMH0pfXNldENvbHVtbnNMaW1p'@;
put 'dChsKXtyTSh0aGlzLGFVLGwpfXNldERhdGEoKXtyTSh0aGlzLG1wLGZ1bmN0aW9uIEdVZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MS8wO2NvbnN0IGE9W107aWYoMD09PWwpcmV0dXJuIGE7Um4oYyxoPT57Y29uc3Qg'@;
put 'Zj1bXTtsZXQgdj0wO2EucHVzaChmKSxSbihoLFQ9Pntjb25zdCBZPW9VKCk7aWYodnMoVCkpe2NvbnN0e2xhYmVsOmZlLGNvbHNwYW46X2V9PVQ7WS5sYWJlbD0kbChmZSksIm51bWJlciI9PXR5cGVvZiBfZSYmX2U+MSYmKFkuY29sc3Bhbj1fZSxZLm9yaWdDb2xzcGFuPV9lKX1lbHNlIFku'@;
put 'bGFiZWw9JGwoVCk7dis9WS5vcmlnQ29sc3BhbjtsZXQgcmU9ITE7aWYodj49bCYmKFkuY29sc3Bhbj1ZLm9yaWdDb2xzcGFuLSh2LWwpLFkub3JpZ0NvbHNwYW49WS5jb2xzcGFuLHJlPSEwKSxmLnB1c2goWSksWS5jb2xzcGFuPjEpZm9yKGxldCBmZT0wO2ZlPFkuY29sc3Bhbi0xO2ZlKysp'@;
put 'Zi5wdXNoKHtsYWJlbDoiIixpc1BsYWNlaG9sZGVyOiEwfSk7cmV0dXJuIXJlfSl9KTtjb25zdCBkPU1hdGgubWF4KC4uLl9zKGEsaD0+aC5sZW5ndGgpKTtyZXR1cm4gUm4oYSxoPT57aWYoaC5sZW5ndGg8ZCl7Y29uc3QgZj1fcyhuZXcgQXJyYXkoZC1oLmxlbmd0aCksKCk9Pm9VKCkpO2gu'@;
put 'c3BsaWNlKGgubGVuZ3RoLDAsLi4uZil9fSksYX0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHYyKHRoaXMsYVUpKSksck0odGhpcyxzNix2Mih0aGlzLG1wKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdjIodGhpcyxtcCl9bWVy'@;
put 'Z2VXaXRoKGwpe1JuKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12JiZ4Yyh2LGYsV2xlKX0pfW1hcChsKXtSbih2Mih0aGlzLG1wKSxhPT57Um4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7dnMoaCkmJnhj'@;
put 'KGQsaCxXbGUpfSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PXYyKHRoaXMsczYpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD12Mih0aGlzLG1wKVtsXTtyZXR1cm4gYT49aC5sZW5ndGg/bnVsbDpudWxsIT09KGQ9aFthXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhl'@;
put 'YWRlcnNTZXR0aW5ncyhsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO2NvbnN0IGg9W107aWYobD49djIodGhpcyxzNil8fGw8MClyZXR1cm4gaDtjb25zdCBmPXYyKHRoaXMsbXApW2xdO2xldCB2PTA7Zm9yKGxldCBU'@;
put 'PWE7VDxmLmxlbmd0aDtUKyspe2NvbnN0IFk9ZltUXTtpZihZLmlzUGxhY2Vob2xkZXIpdGhyb3cgbmV3IEVycm9yKCJUaGUgZmlyc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIik7aWYodis9WS5jb2xzcGFuLGgucHVzaChZKSxZLmNv'@;
put 'bHNwYW4+MSYmKFQrPVkuY29sc3Bhbi0xKSx2PT09ZClicmVhaztpZih2PmQpdGhyb3cgbmV3IEVycm9yKCJUaGUgbGFzdCBjb2x1bW4gc2V0dGluZ3MgY2Fubm90IG92ZXJsYXAgdGhlIG90aGVyIGhlYWRlciBsYXllcnMiKX1yZXR1cm4gaH1nZXRMYXllcnNDb3VudCgpe3JldHVybiB2Mih0'@;
put 'aGlzLHM2KX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gdjIodGhpcyxzNik+MD92Mih0aGlzLG1wKVswXS5sZW5ndGg6MH1jbGVhcigpe3JNKHRoaXMsbXAsW10pLHJNKHRoaXMsczYsMCl9fWZ1bmN0aW9uIGxVKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiBKVWUoYyl7dmFyIGw9ZnVuY3Rp'@;
put 'b24gUVVlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3'@;
put 'IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgS2xlPW5ldyBNYXAoW1siREYtcHJlLW9yZGVyIixmdW5jdGlvbiBHbGUoYyxsKXtsZXQgYT1jLmNhbGwobCx0aGlzKTtmb3IobGV0IGQ9'@;
put 'MDtkPHRoaXMuY2hpbGRzLmxlbmd0aDtkKyspe2lmKCExPT09YSlyZXR1cm4hMTthPUdsZS5jYWxsKHRoaXMuY2hpbGRzW2RdLGMsbCl9cmV0dXJuIGF9XSxbIkRGLXBvc3Qtb3JkZXIiLGZ1bmN0aW9uICRsZShjLGwpe2ZvcihsZXQgYT0wO2E8dGhpcy5jaGlsZHMubGVuZ3RoO2ErKylpZigh'@;
put 'MT09PSRsZS5jYWxsKHRoaXMuY2hpbGRzW2FdLGMsbCkpcmV0dXJuITE7cmV0dXJuIGMuY2FsbChsLHRoaXMpfV0sWyJCRiIsZnVuY3Rpb24gblplKGMsbCl7Y29uc3QgYT1bdGhpc107IWZ1bmN0aW9uIGQoKXtpZigwPT09YS5sZW5ndGgpcmV0dXJuO2NvbnN0IGg9YS5zaGlmdCgpO2EucHVz'@;
put 'aCguLi5oLmNoaWxkcyksITEhPT1jLmNhbGwobCxoKSYmZCgpfSgpfV1dKTtjbGFzcyBLRHtjb25zdHJ1Y3RvcihsKXtsVSh0aGlzLCJkYXRhIix7fSksbFUodGhpcywicGFyZW50IixudWxsKSxsVSh0aGlzLCJjaGlsZHMiLFtdKSx0aGlzLmRhdGE9bH1hZGRDaGlsZChsKXtsLnBhcmVudD10'@;
put 'aGlzLHRoaXMuY2hpbGRzLnB1c2gobCl9Y2xvbmVUcmVlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXM7Y29uc3QgYT1uZXcgS0Qoey4uLmwuZGF0YX0pO2ZvcihsZXQgZD0wO2Q8bC5jaGlsZHMubGVuZ3RoO2QrKylh'@;
put 'LmFkZENoaWxkKHRoaXMuY2xvbmVUcmVlKGwuY2hpbGRzW2RdKSk7cmV0dXJuIGF9cmVwbGFjZVRyZWVXaXRoKGwpe3RoaXMuZGF0YT17Li4ubC5kYXRhfSx0aGlzLmNoaWxkcz1bXTtmb3IobGV0IGE9MDthPGwuY2hpbGRzLmxlbmd0aDthKyspdGhpcy5hZGRDaGlsZChsLmNoaWxkc1thXSl9'@;
put 'd2Fsa0Rvd24obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOiJCRiI7aWYoIUtsZS5oYXMoYSkpdGhyb3cgbmV3IEVycm9yKGBUcmF2ZXJzYWwgc3RyYXRlZ3kgIiR7YX0iIGRvZXMgbm90IGV4aXN0YCk7S2xlLmdldChhKS5j'@;
put 'YWxsKHRoaXMsbCx0aGlzKX13YWxrVXAobCl7Y29uc3QgYT10aGlzLGQ9aD0+eyExIT09bC5jYWxsKGEsaCkmJm51bGwhPT1oLnBhcmVudCYmZChoLnBhcmVudCl9O2QodGhpcyl9fWZ1bmN0aW9uIGNVKGMsbCxhKXsoZnVuY3Rpb24gaVplKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBGMChjLGwpe3JldHVybiBmdW5jdGlvbiBvWmUoYyxsKXtyZXR1cm4gbC5nZXQ/bC5nZXQuY2FsbChjKTpsLnZh'@;
put 'bHVlfShjLFhsZShjLGwsImdldCIpKX1mdW5jdGlvbiBYbGUoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9dmFyIFU5PW5ldyBXZWFrTWFwLGE2'@;
put 'PW5ldyBXZWFrTWFwLFo5PW5ldyBXZWFrTWFwO2NsYXNzIGxaZXtjb25zdHJ1Y3RvcihsKXtjVSh0aGlzLFU5LHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksY1UodGhpcyxhNix7d3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pLGNVKHRoaXMsWjkse3dyaXRhYmxlOiEwLHZhbHVlOm51'@;
put 'bGx9KSxmdW5jdGlvbiBzWmUoYyxsLGEpe3JldHVybiBmdW5jdGlvbiBhWmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndyaXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZh'@;
put 'bHVlPWF9fShjLFhsZShjLGwsInNldCIpLGEpLGF9KHRoaXMsWjksbCl9Z2V0Um9vdHMoKXtyZXR1cm4gQXJyYXkuZnJvbShGMCh0aGlzLFU5KS52YWx1ZXMoKSl9Z2V0Um9vdEJ5Q29sdW1uKGwpe2xldCBhO3JldHVybiBGMCh0aGlzLGE2KS5oYXMobCkmJihhPUYwKHRoaXMsVTkpLmdldChG'@;
put 'MCh0aGlzLGE2KS5nZXQobCkpKSxhfWdldE5vZGUobCxhKXtjb25zdCBkPXRoaXMuZ2V0Um9vdEJ5Q29sdW1uKGEpO2lmKCFkKXJldHVybjtjb25zdCBoPWEtRjAodGhpcyxhNikuZ2V0KGEpO2xldCB2LGY9MDtyZXR1cm4gZC53YWxrRG93bihUPT57Y29uc3R7ZGF0YTp7b3JpZ0NvbHNwYW46'@;
put 'WSxoZWFkZXJMZXZlbDpyZX19PVQ7aWYobD09PXJlKXtpZihoPj1mJiZoPD1mK1ktMSlyZXR1cm4gdj1ULHYuZGF0YS5pc1Jvb3Q9YT09PXYuZGF0YS5jb2x1bW5JbmRleCwhMTtmKz1ZfX0pLHZ9cmVidWlsZFRyZWVJbmRleCgpe2xldCBsPTA7RjAodGhpcyxhNikuY2xlYXIoKSxSbihGMCh0'@;
put 'aGlzLFU5KSxhPT57bGV0Wyx7ZGF0YTp7Y29sc3BhbjpkfX1dPWE7Zm9yKGxldCBoPWw7aDxsK2Q7aCsrKUYwKHRoaXMsYTYpLnNldChoLGwpO2wrPWR9KX1idWlsZFRyZWUoKXt0aGlzLmNsZWFyKCk7Y29uc3QgbD1GMCh0aGlzLFo5KS5nZXRDb2x1bW5zQ291bnQoKTtsZXQgYT0wO2Zvcig7'@;
put 'YTxsOyl7Y29uc3QgZD1GMCh0aGlzLFo5KS5nZXRIZWFkZXJTZXR0aW5ncygwLGEpLGg9bmV3IEtEO0YwKHRoaXMsVTkpLnNldChhLGgpLHRoaXMuYnVpbGRMZWF2ZXMoaCxhLDAsZC5vcmlnQ29sc3BhbiksYSs9ZC5vcmlnQ29sc3Bhbn10aGlzLnJlYnVpbGRUcmVlSW5kZXgoKX1idWlsZExl'@;
put 'YXZlcyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjE7Y29uc3QgZj1GMCh0aGlzLFo5KS5nZXRIZWFkZXJzU2V0dGluZ3MoZCxhLGgpO2QrPTEsUm4oZix2PT57Y29uc3QgVD17Li4udixoZWFkZXJMZXZlbDpkLTEs'@;
put 'Y29sdW1uSW5kZXg6YX07bGV0IFk7MT09PWQ/KGwuZGF0YT1ULFk9bCk6KFk9bmV3IEtEKFQpLGwuYWRkQ2hpbGQoWSkpLGQ8RjAodGhpcyxaOSkuZ2V0TGF5ZXJzQ291bnQoKSYmdGhpcy5idWlsZExlYXZlcyhZLGEsZCx2Lm9yaWdDb2xzcGFuKSxhKz12Lm9yaWdDb2xzcGFufSl9Y2xlYXIo'@;
put 'KXtGMCh0aGlzLFU5KS5jbGVhcigpLEYwKHRoaXMsYTYpLmNsZWFyKCl9fWZ1bmN0aW9uIEpsZShjLGwpe2Mud2Fsa0Rvd24oYT0+e2xldHtkYXRhOmQsY2hpbGRzOmh9PWE7aWYoIWQuaXNIaWRkZW4mJihsKGQuY29sdW1uSW5kZXgpLDA9PT1oLmxlbmd0aCkpZm9yKGxldCBmPTE7ZjxkLmNv'@;
put 'bHNwYW47ZisrKWwoZC5jb2x1bW5JbmRleCtmKX0pfWZ1bmN0aW9uIFhEKGMsbCl7bGV0e2NoaWxkczphfT1jO2lmKDAhPT1hLmxlbmd0aClyZXR1cm4gYVswXS5kYXRhW2xdfWZ1bmN0aW9uIEpEKGMpe3JldHVybiBYRChjLCJvcmlnQ29sc3BhbiIpPT09Yy5kYXRhLm9yaWdDb2xzcGFufWZ1'@;
put 'bmN0aW9uIHVVKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5pc0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lm'@;
put 'KEpEKGMpKXJldHVybiB1VShhWzBdKTtsLmlzQ29sbGFwc2VkPSExO2NvbnN0IGg9YS5zbGljZSgxKSxmPW5ldyBTZXQ7bGV0IHY9MDtpZihoLmxlbmd0aD4wKVJuKGgsVD0+e1QucmVwbGFjZVRyZWVXaXRoKFQuZGF0YS5jbG9uZWRUcmVlKSxULmRhdGEuY2xvbmVkVHJlZT1udWxsLHYrPVQu'@;
put 'ZGF0YS5jb2xzcGFuLEpsZShULHJlPT57Zi5hZGQocmUpfSl9KTtlbHNle2NvbnN0e2NvbHNwYW46VCxvcmlnQ29sc3BhbjpZLGNvbHVtbkluZGV4OnJlfT1sO3Y9WS1UO2ZvcihsZXQgZmU9MTtmZTxZO2ZlKyspZi5hZGQocmUrZmUpfXJldHVybiBjLndhbGtVcChUPT57Y29uc3R7ZGF0YTpZ'@;
put 'fT1UO1kuY29sc3Bhbis9dixZLmNvbHNwYW4+PVkub3JpZ0NvbHNwYW4/KFkuY29sc3Bhbj1ZLm9yaWdDb2xzcGFuLFkuaXNDb2xsYXBzZWQ9ITEpOkpEKFQpJiYoWS5pc0NvbGxhcHNlZD1YRChULCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+ZFUoYyksYWZm'@;
put 'ZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20oZiksY29sc3BhbkNvbXBlbnNhdGlvbjp2fX1mdW5jdGlvbiBkVShjKXt2YXIgbDtjb25zdHtkYXRhOmEsY2hpbGRzOmR9PWM7aWYoYS5pc0NvbGxhcHNlZHx8YS5pc0hpZGRlbnx8YS5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmlj'@;
put 'YXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKEpEKGMpKXJldHVybiBkVShkWzBdKTthLmlzQ29sbGFwc2VkPSEwO2NvbnN0IGY9ZC5zbGljZSgxKSx2PW5ldyBTZXQ7aWYoZi5sZW5ndGg+MClSbihmLFk9PntKbGUoWSxyZT0+e3YuYWRk'@;
put 'KHJlKX0pLFkuZGF0YS5jbG9uZWRUcmVlPVkuY2xvbmVUcmVlKCksWS53YWxrRG93bihyZT0+e2xldHtkYXRhOmZlfT1yZTtmZS5pc0hpZGRlbj0hMH0pfSk7ZWxzZXtjb25zdHtvcmlnQ29sc3BhbjpZLGNvbHVtbkluZGV4OnJlfT1hO2ZvcihsZXQgZmU9MTtmZTxZO2ZlKyspdi5hZGQocmUr'@;
put 'ZmUpfWNvbnN0IFQ9YS5jb2xzcGFuLShudWxsIT09KGw9WEQoYywiY29sc3BhbiIpKSYmdm9pZCAwIT09bD9sOjEpO3JldHVybiBjLndhbGtVcChZPT57Y29uc3R7ZGF0YTpyZX09WTtyZS5jb2xzcGFuLT1ULHJlLmNvbHNwYW48PTE/KHJlLmNvbHNwYW49MSxyZS5pc0NvbGxhcHNlZD0hMCk6'@;
put 'SkQoWSkmJihyZS5pc0NvbGxhcHNlZD1YRChZLCJpc0NvbGxhcHNlZCIpKX0pLHtyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+dVUoYyksYWZmZWN0ZWRDb2x1bW5zOkFycmF5LmZyb20odiksY29sc3BhbkNvbXBlbnNhdGlvbjpUfX1jb25zdCBRbGU9bmV3IE1hcChbWyJjb2xsYXBzZSIsZFVd'@;
put 'LFsiZXhwYW5kIix1VV0sWyJoaWRlLWNvbHVtbiIsZnVuY3Rpb24gY1plKGMsbCl7aWYoIU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IEVycm9yKCJUaGUgcGFzc2VkIGdyaWRDb2x1bW5JbmRleCBhcmd1bWVudCBoYXMgaW52YWxpZCB0eXBlLiIpO2lmKGMuY2hpbGRzLmxlbmd0aD4w'@;
put 'KXRocm93IG5ldyBFcnJvcihXYWBUaGUgcGFzc2VkIG5vZGUgaXMgbm90IHRoZSBsYXN0IG5vZGUgb24gdGhlIHRyZWUuIE9ubHkgZm9yXHgyMAp0aGUgbGFzdCBub2RlLCB0aGUgaGlkZSBjb2x1bW4gbW9kaWZpY2F0aW9uIGNhbiBiZSBhcHBsaWVkLmApO2NvbnN0e2Nyb3NzSGlkZGVuQ29s'@;
put 'dW1uczphfT1jLmRhdGE7aWYoYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1u'@;
put 'cy5wdXNoKGwpLGYuY29sc3Bhbj4xP2YuY29sc3Bhbi09MTpmLmlzSGlkZGVuPSEwfSl9XSxbInNob3ctY29sdW1uIixmdW5jdGlvbiB1WmUoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhh'@;
put 'cyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKFdhYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBmb3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBzaG93IGNvbHVtbiBtb2RpZmljYXRpb24g'@;
put 'Y2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZighYS5pbmNsdWRlcyhsKSlyZXR1cm47bGV0IGQ9ITE7Yy53YWxrVXAoaD0+e2NvbnN0e2RhdGE6e2NvbGxhcHNpYmxlOmZ9fT1oO2lmKGYpcmV0dXJuIGQ9ITAsITF9KSwhZCYmYy53YWxrVXAo'@;
put 'aD0+e2NvbnN0e2RhdGE6Zn09aDtmLmNyb3NzSGlkZGVuQ29sdW1ucy5zcGxpY2UoZi5jcm9zc0hpZGRlbkNvbHVtbnMuaW5kZXhPZihsKSwxKSwhZi5pc0hpZGRlbiYmZi5jb2xzcGFuPGYub3JpZ0NvbHNwYW4mJihmLmNvbHNwYW4rPTEpLGYuaXNIaWRkZW49ITF9KX1dXSk7ZnVuY3Rpb24g'@;
put 'UUQoYyl7Y29uc3QgbD1bXTtyZXR1cm4gUm4oYyxhPT57YS53YWxrRG93bihkPT57Y29uc3QgaD1kLmRhdGEse29yaWdDb2xzcGFuOmYsY29sdW1uSW5kZXg6dixoZWFkZXJMZXZlbDpULGNyb3NzSGlkZGVuQ29sdW1uczpZfT1oLHJlPWZ1bmN0aW9uIGZaZShjLGwpe2xldCBhO3JldHVybiBB'@;
put 'cnJheS5pc0FycmF5KGNbbF0pP2E9Y1tsXTooYT1bXSxjW2xdPWEpLGF9KGwsVCk7bGV0IGZlPSExO2ZvcihsZXQgX2U9djtfZTx2K2Y7X2UrKylpZihZLmluY2x1ZGVzKF9lKXx8ZmUpcmUucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3QgV2U9aFplKGgpO1dl'@;
put 'LmlzUm9vdD0hMCxyZS5wdXNoKFdlKSxmZT0hMH19KX0pLGx9ZnVuY3Rpb24gaFplKGMpe2NvbnN0e2Nyb3NzSGlkZGVuQ29sdW1uczpsLC4uLmF9PW9VKGMpO3JldHVybiBhfWZ1bmN0aW9uIGhVKGMsbCxhKXsoZnVuY3Rpb24gcFplKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF'@;
put 'cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBpTShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uIG1aZShjLGwsYSl7aWYobC5zZXQpbC5zZXQuY2FsbChjLGEpO2Vsc2V7'@;
put 'aWYoIWwud3JpdGFibGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvIHNldCByZWFkIG9ubHkgcHJpdmF0ZSBmaWVsZCIpO2wudmFsdWU9YX19KGMsZWNlKGMsbCwic2V0IiksYSksYX1mdW5jdGlvbiBhYyhjLGwpe3JldHVybiBmdW5jdGlvbiBnWmUoYyxsKXtyZXR1cm4gbC5n'@;
put 'ZXQ/bC5nZXQuY2FsbChjKTpsLnZhbHVlfShjLGVjZShjLGwsImdldCIpKX1mdW5jdGlvbiBlY2UoYyxsLGEpe2lmKCFsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhdHRlbXB0ZWQgdG8gIithKyIgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2UiKTtyZXR1cm4gbC5nZXQoYyl9'@;
put 'dmFyIEZmPW5ldyBXZWFrTWFwLF9kPW5ldyBXZWFrTWFwLGw2PW5ldyBXZWFrTWFwO2NsYXNzIF9aZXtjb25zdHJ1Y3Rvcigpe2hVKHRoaXMsRmYse3dyaXRhYmxlOiEwLHZhbHVlOm5ldyBYVWV9KSxoVSh0aGlzLF9kLHt3cml0YWJsZTohMCx2YWx1ZTpuZXcgbFplKGFjKHRoaXMsRmYpKX0p'@;
put 'LGhVKHRoaXMsbDYse3dyaXRhYmxlOiEwLHZhbHVlOltbXV19KX1zZXRTdGF0ZShsKXthYyh0aGlzLEZmKS5zZXREYXRhKGwpO2xldCBhPSExO3RyeXthYyh0aGlzLF9kKS5idWlsZFRyZWUoKX1jYXRjaHthYyh0aGlzLF9kKS5jbGVhcigpLGFjKHRoaXMsRmYpLmNsZWFyKCksYT0hMH1yZXR1'@;
put 'cm4gaU0odGhpcyxsNixRRChhYyh0aGlzLF9kKS5nZXRSb290cygpKSksYX1zZXRDb2x1bW5zTGltaXQobCl7YWModGhpcyxGZikuc2V0Q29sdW1uc0xpbWl0KGwpfW1lcmdlU3RhdGVXaXRoKGwpe2NvbnN0IGE9X3MobCxkPT57bGV0e3JvdzpoLC4uLmZ9PWQ7cmV0dXJue3JvdzpoPDA/dGhp'@;
put 'cy5yb3dDb29yZHNUb0xldmVsKGgpOmgsLi4uZn19KTthYyh0aGlzLEZmKS5tZXJnZVdpdGgoYSksYWModGhpcyxfZCkuYnVpbGRUcmVlKCksaU0odGhpcyxsNixRRChhYyh0aGlzLF9kKS5nZXRSb290cygpKSl9bWFwU3RhdGUobCl7YWModGhpcyxGZikubWFwKGwpLGFjKHRoaXMsX2QpLmJ1'@;
put 'aWxkVHJlZSgpLGlNKHRoaXMsbDYsUUQoYWModGhpcyxfZCkuZ2V0Um9vdHMoKSkpfW1hcE5vZGVzKGwpe3JldHVybiBzYyhhYyh0aGlzLF9kKS5nZXRSb290cygpLChhLGQpPT4oZC53YWxrRG93bihoPT57Y29uc3QgZj1sKGguZGF0YSk7dm9pZCAwIT09ZiYmYS5wdXNoKGYpfSksYSksW10p'@;
put 'fXRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsYSxkKXthPDAmJihhPXRoaXMucm93Q29vcmRzVG9MZXZlbChhKSk7Y29uc3QgaD1hYyh0aGlzLF9kKS5nZXROb2RlKGEsZCk7bGV0IGY7cmV0dXJuIGgmJihmPWZ1bmN0aW9uIGRaZShjLGwsYSl7aWYoIVFsZS5oYXMoYykpdGhyb3cgbmV3IEVy'@;
put 'cm9yKGBUaGUgbm9kZSBtb2RpZmllciBhY3Rpb24gKCIke2N9IikgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIFFsZS5nZXQoYykobCxhKX0obCxoLGQpLGlNKHRoaXMsbDYsUUQoYWModGhpcyxfZCkuZ2V0Um9vdHMoKSkpKSxmfXRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24obCxhKXtyZXR1'@;
put 'cm4gdGhpcy50cmlnZ2VyTm9kZU1vZGlmaWNhdGlvbihsLC0xLGEpfXJvd0Nvb3Jkc1RvTGV2ZWwobCl7aWYobD49MClyZXR1cm4gbnVsbDtjb25zdCBhPWwrTWF0aC5tYXgodGhpcy5nZXRMYXllcnNDb3VudCgpLDEpO3JldHVybiBhPDA/bnVsbDphfWxldmVsVG9Sb3dDb29yZHMobCl7aWYo'@;
put 'bDwwKXJldHVybiBudWxsO2NvbnN0IGE9bC1NYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE+PTA/bnVsbDphfWdldEhlYWRlclNldHRpbmdzKGwsYSl7dmFyIGQsaDtyZXR1cm4gbDwwJiYobD10aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwobCkpLG51bGw9PT1sfHxsPj10'@;
put 'aGlzLmdldExheWVyc0NvdW50KCk/bnVsbDpudWxsIT09KGQ9bnVsbD09PShoPWFjKHRoaXMsbDYpW2xdKXx8dm9pZCAwPT09aD92b2lkIDA6aFthXSkmJnZvaWQgMCE9PWQ/ZDpudWxsfWdldEhlYWRlclRyZWVOb2RlRGF0YShsLGEpe2lmKGw8MCYmKGw9dGhpcy5yb3dDb29yZHNUb0xldmVs'@;
put 'KGwpKSxudWxsPT09bHx8bD49dGhpcy5nZXRMYXllcnNDb3VudCgpKXJldHVybiBudWxsO2NvbnN0IGQ9YWModGhpcyxfZCkuZ2V0Tm9kZShsLGEpO3JldHVybiBkP3suLi5kLmRhdGF9Om51bGx9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVs'@;
put 'bCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwfTtpZihoKXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6VH09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQg'@;
put 'MCE9PXY/djp7aXNSb290OiEwfTtpZihUKWJyZWFrO2YtPTF9cmV0dXJuIGZ9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gYWModGhpcyxGZikuZ2V0TGF5ZXJzQ291bnQoKX1nZXRDb2x1bW5zQ291bnQoKXtyZXR1cm4gYWModGhpcyxGZikuZ2V0Q29sdW1uc0NvdW50KCl9Y2xlYXIoKXtpTSh0'@;
put 'aGlzLGw2LFtdKSxhYyh0aGlzLEZmKS5jbGVhcigpLGFjKHRoaXMsX2QpLmNsZWFyKCl9fWZ1bmN0aW9uIG9NKGMsbCxhKXtyZXR1cm4gbD1mdW5jdGlvbiB2WmUoYyl7dmFyIGw9ZnVuY3Rpb24geVplKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHxudWxsPT09YylyZXR1cm4gYzt2YXIg'@;
put 'YT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4i'@;
put 'KX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpTdHJpbmcobCl9KGwpLGwgaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEw'@;
put 'LHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgd1plPWNsYXNzIGJaZXtjb25zdHJ1Y3RvcihsLGEpe29NKHRoaXMsImhvdCIsdm9pZCAwKSxvTSh0aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSxvTSh0aGlzLCJsYXllcnNDb3VudCIsMCksb00odGhpcywiY29u'@;
put 'dGFpbmVyIix2b2lkIDApLG9NKHRoaXMsIndpZHRoc01hcCIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRI'@;
put 'ZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVlIil9c2V0TGF5ZXJzQ291bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9bCx0aGlzfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVt'@;
put 'bihsKSl9YnVpbGRXaWR0aHNNYXAoKXt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLHRoaXMuX2J1aWxk'@;
put 'R2hvc3RUYWJsZSh0aGlzLmNvbnRhaW5lciksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXIpO2NvbnN0IGw9dGhpcy5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbCgidHI6bGFzdC1vZi10eXBlIHRoIiksYT1sLmxlbmd0aDt0aGlzLndpZHRo'@;
put 'c01hcC5jbGVhcigpO2ZvcihsZXQgZD0wO2Q8YTtkKyspe2NvbnN0IGg9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChkKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oaCk7dGhpcy53aWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGYs'@;
put 'bFtkXS5vZmZzZXRXaWR0aCl9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbH1fYnVpbGRHaG9zdFRhYmxlKGwpe2NvbnN0e3Jvb3REb2N1bWVudDphLGNvbHVtbkluZGV4TWFwcGVyOmR9PXRoaXMuaG90LGg9'@;
put 'YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZj1hLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksdj0hIXRoaXMuaG90LmdldFNldHRpbmdzKCkuZHJvcGRvd25NZW51LFQ9ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO2ZvcihsZXQgWT0wO1k8dGhpcy5sYXllcnNDb3VudDtZKyspe2Nv'@;
put 'bnN0IHJlPWEuY3JlYXRlRWxlbWVudCgidHIiKTtmb3IobGV0IGZlPTA7ZmU8VDtmZSsrKXtsZXQgX2U9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGZlKTtudWxsPT09X2UmJihfZT1mZSk7Y29uc3Qga2U9YS5jcmVhdGVFbGVtZW50KCJ0aCIpLFdlPXRoaXMubmVzdGVkSGVhZGVy'@;
put 'U2V0dGluZ3NHZXR0ZXIoWSxfZSk7aWYoV2UmJighV2UuaXNQbGFjZWhvbGRlcnx8V2UuaXNIaWRkZW4pKXtsZXQgSmU9V2UubGFiZWw7diYmKEplKz0nPGJ1dHRvbiBjbGFzcz0iY2hhbmdlVHlwZSI+PC9idXR0b24+JyksRmcoa2UsSmUpLGtlLmNvbFNwYW49V2UuY29sc3BhbixyZS5hcHBl'@;
put 'bmRDaGlsZChrZSl9fWYuYXBwZW5kQ2hpbGQocmUpfWguYXBwZW5kQ2hpbGQoZiksbC5hcHBlbmRDaGlsZChoKX1jbGVhcigpe3RoaXMud2lkdGhzTWFwLmNsZWFyKCksdGhpcy5jb250YWluZXI9bnVsbH19O2Z1bmN0aW9uIHRjZShjLGwsYSl7cmV0dXJuIGw9ZnVuY3Rpb24gTVplKGMpe3Zh'@;
put 'ciBsPWZ1bmN0aW9uIENaZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8bnVsbD09PWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBk'@;
put 'O3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6U3RyaW5nKGwpfShsKSxsIGlu'@;
put 'IGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIG5jZShjLGwsYSl7KGZ1bmN0aW9uIFNaZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh'@;
put 'bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZUEoYyxsLGEpe3JldHVybiBmdW5jdGlvbiB4WmUoYyxsLGEpe2lmKGwuc2V0KWwuc2V0LmNhbGwoYyxhKTtlbHNle2lmKCFsLndy'@;
put 'aXRhYmxlKXRocm93IG5ldyBUeXBlRXJyb3IoImF0dGVtcHRlZCB0byBzZXQgcmVhZCBvbmx5IHByaXZhdGUgZmllbGQiKTtsLnZhbHVlPWF9fShjLHJjZShjLGwsInNldCIpLGEpLGF9ZnVuY3Rpb24gUWwoYyxsKXtyZXR1cm4gZnVuY3Rpb24ga1plKGMsbCl7cmV0dXJuIGwuZ2V0P2wuZ2V0'@;
put 'LmNhbGwoYyk6bC52YWx1ZX0oYyxyY2UoYyxsLCJnZXQiKSl9ZnVuY3Rpb24gcmNlKGMsbCxhKXtpZighbC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXR0ZW1wdGVkIHRvICIrYSsiIHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlIik7cmV0dXJuIGwuZ2V0KGMpfWNvbnN0IGlj'@;
put 'ZT0ibmVzdGVkSGVhZGVycyI7dmFyIEVjPW5ldyBXZWFrTWFwLHdtPW5ldyBXZWFrTWFwO2NsYXNzIFRaZSBleHRlbmRzIHNhe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxuY2UodGhpcyxFYyx7d3JpdGFibGU6ITAsdmFsdWU6bmV3IF9aZX0pLG5jZSh0aGlzLHdtLHt3cml0'@;
put 'YWJsZTohMCx2YWx1ZTpudWxsfSksdGNlKHRoaXMsImdob3N0VGFibGUiLG5ldyB3WmUodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkpLHRjZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0'@;
put 'dXJuIGljZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2ljZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6'@;
put 'YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmYmwoV2FgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAg'@;
put 'ICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1dXWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PnRoaXMub25Jbml0KCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gbC5vbkFmdGVyTG9hZERhdGEoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VEb3duKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxs'@;
put 'TW91c2VEb3duIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VPdmVyIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlT25DZWxsTW91c2VPdmVyKC4uLmFyZ3VtZW50cyl9'@;
put 'KSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzIixkPT50aGlzLm9uQWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMoZCkpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlDb2xXaWR0aCguLi5hcmd1'@;
put 'bWVudHMpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gbC5vbkJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVDb3B5IixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlQ29weSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29s'@;
put 'dW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSguLi5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5o'@;
put 'b3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO1FsKHRoaXMsRWMpLnNldENvbHVtbnNMaW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1RbCh0'@;
put 'aGlzLEVjKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZibChXYWBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdpbiBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAg'@;
put 'ICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5oaWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1u'@;
put 'Ijoic2hvdy1jb2x1bW4iO1FsKHRoaXMsRWMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFRbCh0aGlzLHdtKSYmdGhpcy5lbmFibGVkJiZlQSh0aGlzLHdtLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2Ny'@;
put 'aWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBUPSEwPT09dj8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7UWwodGhpcyxFYykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihULGYpfX0pLHRoaXMu'@;
put 'Z2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkpLmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLFFsKHRo'@;
put 'aXMsRWMpLmNsZWFyKCksUWwodGhpcyx3bSkudW5zdWJzY3JpYmUoKSxlQSh0aGlzLHdtLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gUWwodGhpcyxFYyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4g'@;
put 'UWwodGhpcyxFYykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBRbCh0aGlzLEVjKS5nZXRIZWFkZXJTZXR0aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1s'@;
put 'LmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9uZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5l'@;
put 'U3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBUPWQuY2hpbGROb2Rlc1t2XTtpZighVClicmVhaztjb25zdCBZPWguY2hpbGROb2Rlc1t2XSxyZT1mP2YuY2hpbGROb2Rlc1t2XTpudWxsO2ZvcihsZXQgZmU9MCxf'@;
put 'ZT1ULmNoaWxkTm9kZXMubGVuZ3RoO2ZlPF9lO2ZlKyspVC5jaGlsZE5vZGVzW2ZlXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxzcyhULmNoaWxkTm9kZXNbZmVdLCJoaWRkZW5IZWFkZXIiKSxZJiZZLmNoaWxkTm9kZXNbZmVdJiYoWS5jaGlsZE5vZGVzW2ZlXS5yZW1vdmVBdHRyaWJ1'@;
put 'dGUoImNvbHNwYW4iKSxzcyhZLmNoaWxkTm9kZXNbZmVdLCJoaWRkZW5IZWFkZXIiKSksZiYmcmUmJnJlLmNoaWxkTm9kZXNbZmVdJiYocmUuY2hpbGROb2Rlc1tmZV0ucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksc3MocmUuY2hpbGROb2Rlc1tmZV0sImhpZGRlbkhlYWRlciIpKX19aGVh'@;
put 'ZGVyUmVuZGVyZXJGYWN0b3J5KGwpe3ZhciBhPXRoaXM7Y29uc3QgZD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO3JldHVybihoLGYpPT57dmFyIHY7Y29uc3R7Y29sdW1uSW5kZXhNYXBwZXI6VCx2aWV3Oll9PXRoaXMuaG90O2xldCByZT1ULmdl'@;
put 'dFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PXJlJiYocmU9aCksZi5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxzcyhmLCJoaWRkZW5IZWFkZXIiKTtjb25zdHtjb2xzcGFuOmZlLGlzSGlkZGVuOl9lLGlzUGxhY2Vob2xkZXI6a2V9PW51bGwhPT0odj1RbCh0aGlzLEVj'@;
put 'KS5nZXRIZWFkZXJTZXR0aW5ncyhsLHJlKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6IiJ9O2lmKGtlfHxfZSl3aShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKGZlPjEpe3ZhciBXZSxKZTtjb25zdHt3dE92ZXJsYXlzOnR0fT1ZLl93dCx5dD1udWxsPT09KFdlPXR0LnRvcElubGluZVN0YXJ0'@;
put 'Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PVdlP3ZvaWQgMDpXZS5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLHd0PW51bGw9PT0oSmU9dHQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09SmU/dm9pZCAwOkplLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZiksTHQ9'@;
put 'eXR8fHd0P01hdGgubWluKGZlLGQtaCk6ZmU7THQ+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLEx0KX10aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihyZSxmLGZ1bmN0aW9uKCl7cmV0dXJuIGEuZ2V0Q29sdW1uSGVhZGVyVmFsdWUoLi4uYXJndW1lbnRzKX0sbCl9fWdldENvbHVt'@;
put 'bkhlYWRlclZhbHVlKGwsYSl7dmFyIGQ7Y29uc3R7aXNIaWRkZW46aCxpc1BsYWNlaG9sZGVyOmZ9PW51bGwhPT0oZD1RbCh0aGlzLEVjKS5nZXRIZWFkZXJTZXR0aW5ncyhhLGwpKSYmdm9pZCAwIT09ZD9kOnt9O3JldHVybiBmfHxoPyIiOnRoaXMuaG90LmdldENvbEhlYWRlcihsLGEpfW9u'@;
put 'QmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyKGwsYSxkKXtjb25zdCBoPVFsKHRoaXMsRWMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShhLGwpO2lmKCFoKXJldHVybiBsO2NvbnN0e2NsYXNzTmFtZXM6Zixjb2x1bW5DdXJzb3I6dixzZWxlY3Rpb25UeXBlOlQsc2VsZWN0aW9uV2lkdGg6'@;
put 'WX09ZCx7aXNSb290OnJlLGNvbHNwYW46ZmV9PVFsKHRoaXMsRWMpLmdldEhlYWRlclNldHRpbmdzKGEsbCk7aWYoVD09PWt3KXtpZighcmUpcmV0dXJuIGguY29sdW1uSW5kZXh9ZWxzZSBUPT09JFQmJihmZT5ZLXZ8fCFyZSkmJihmLmxlbmd0aD0wKTtyZXR1cm4gbH1vbkJlZm9yZUNvcHko'@;
put 'bCxhLGQpe2xldHtjb2x1bW5IZWFkZXJzQ291bnQ6aH09ZDtpZigwIT09aClmb3IobGV0IHY9MDt2PGEubGVuZ3RoO3YrKyl7Y29uc3R7c3RhcnRSb3c6VCxzdGFydENvbDpZLGVuZFJvdzpyZSxlbmRDb2w6ZmV9PWFbdl0sX2U9cmUtVCsxO2lmKFQ+PTB8fDE9PVktZmUrMSlicmVhaztmb3Io'@;
put 'bGV0IFdlPVk7V2U8PWZlO1dlKyspZm9yKGxldCBKZT1UO0plPD1yZTtKZSsrKXt2YXIgZjtjb25zdCB0dD1fZStKZSx5dD1XZS1ZOzAhPT15dCYmITE9PT0obnVsbD09PShmPVFsKHRoaXMsRWMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShKZSxXZSkpfHx2b2lkIDA9PT1mP3ZvaWQgMDpmLmlz'@;
put 'Um9vdCkmJihsW3R0XVt5dF09IiIpfX19b25CZWZvcmVPbkNlbGxNb3VzZURvd24obCxhLGQsaCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMoYSkmJihoLmNvbHVtbj0hMCl9b25BZnRlck9uQ2VsbE1vdXNlRG93bihsLGEpe2NvbnN0IGQ9dGhpcy5fZ2V0SGVhZGVyVHJl'@;
put 'ZU5vZGVEYXRhQnlDb29yZHMoYSk7aWYoIWQpcmV0dXJuO2NvbnN0e3NlbGVjdGlvbjpofT10aGlzLmhvdCxmPWguaXNTZWxlY3RlZCgpP2guZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLHY9W10se2NvbHVtbkluZGV4OlQsb3JpZ0NvbHNwYW46WX09ZCxyZT0haC5pbkluU2Vs'@;
put 'ZWN0aW9uKGEpO2wuc2hpZnRLZXkmJmY/YS5jb2w8Zi5mcm9tLmNvbD92LnB1c2goZi5nZXRUb3BFbmRDb3JuZXIoKS5jb2wsVCxhLnJvdyk6di5wdXNoKGEuY29sPmYuZnJvbS5jb2w/Zi5nZXRUb3BTdGFydENvcm5lcigpLmNvbDpULFQrWS0xLGEucm93KTooa1QobCl8fGltKGwpJiZyZSkm'@;
put 'JnYucHVzaChULFQrWS0xLGEucm93KSxoLnNlbGVjdENvbHVtbnMoLi4udil9b25CZWZvcmVPbkNlbGxNb3VzZU92ZXIobCxhLGQsaCl7aWYoIXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSlyZXR1cm47Y29uc3QgZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhhKTtp'@;
put 'ZighZilyZXR1cm47Y29uc3R7Y29sdW1uSW5kZXg6dixvcmlnQ29sc3BhbjpUfT1mLFk9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxyZT1ZLmdldFRvcFN0YXJ0Q29ybmVyKCksZmU9WS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTpfZX09WTtoLmNvbHVtbj0hMCxoLmNlbGw9'@;
put 'ITA7Y29uc3Qga2U9W107YS5jb2w8X2UuY29sP2tlLnB1c2goZmUuY29sLHYpOmtlLnB1c2goYS5jb2w+X2UuY29sP3JlLmNvbDp2LHYrVC0xKSx0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKC4uLmtlKX1vbkFmdGVyR2V0Q29sdW1uSGVhZGVyUmVuZGVyZXJzKGwpe2wubGVuZ3RoPTA7Zm9yKGxl'@;
put 'dCBhPTA7YTxRbCh0aGlzLEVjKS5nZXRMYXllcnNDb3VudCgpO2ErKylsLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkoYSkpfW9uQWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZShsKXtjb25zdCBhPVFsKHRoaXMsRWMpLmdldExheWVyc0NvdW50KCk7bGV0IGQ9'@;
put 'bC5zdGFydENvbHVtbixoPSEhYTtmb3IobGV0IGY9MDtmPGE7ZisrKXtjb25zdCB2PVFsKHRoaXMsRWMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGYsbC5zdGFydENvbHVtbiksVD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHYpO2lm'@;
put 'KHY+PTAmJihoPSExKSxSMChUKSYmVDxsLnN0YXJ0Q29sdW1uKXtkPVQ7YnJlYWt9fWwuc3RhcnRDb2x1bW49aD9RbCh0aGlzLEVjKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoMCxkKS5jb2x1bW5JbmRleDpkfW9uTW9kaWZ5Q29sV2lkdGgobCxhKXtjb25zdCBkPXRoaXMuZ2hvc3RUYWJsZS5n'@;
put 'ZXRXaWR0aChhKTtyZXR1cm4gbD5kP2w6ZH1vbk1vZGlmeUNvbHVtbkhlYWRlclZhbHVlKGwsYSxkKXt2YXIgaDtjb25zdHtsYWJlbDpmfT1udWxsIT09KGg9UWwodGhpcyxFYykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGQsYSkpJiZ2b2lkIDAhPT1oP2g6e2xhYmVsOiIifTtyZXR1cm4gZn1v'@;
put 'bkluaXQoKXt0aGlzLnVwZGF0ZVBsdWdpbigpfW9uQWZ0ZXJMb2FkRGF0YShsLGEpe2F8fHRoaXMudXBkYXRlUGx1Z2luKCl9ZGVzdHJveSgpe2VBKHRoaXMsRWMsbnVsbCksbnVsbCE9PVFsKHRoaXMsd20pJiYoUWwodGhpcyx3bSkudW5zdWJzY3JpYmUoKSxlQSh0aGlzLHdtLG51bGwpKSxz'@;
put 'dXBlci5kZXN0cm95KCl9X2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpe2lmKCEobC5yb3c+PTB8fGwuY29sPDApKXJldHVybiBRbCh0aGlzLEVjKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEobC5yb3csbC5jb2wpfX1jb25zdCBBWmU9Y2xhc3MgRFple2NvbnN0cnVjdG9yKGwsYSl7'@;
put 'dGhpcy5ob3Q9YSx0aGlzLmRhdGE9bnVsbCx0aGlzLnBsdWdpbj1sLHRoaXMucGFyZW50UmVmZXJlbmNlPW5ldyBXZWFrTWFwLHRoaXMuY2FjaGU9e2xldmVsczpbXSxsZXZlbENvdW50OjAscm93czpbXSxub2RlSW5mbzpuZXcgV2Vha01hcH19c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXRE'@;
put 'YXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEoKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11'@;
put 'cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9LE1vKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlz'@;
put 'LmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEpLHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5y'@;
put 'b3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmUm4obC5fX2NoaWxkcmVuLGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmpl'@;
put 'Y3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xldCBUPWw7cmV0dXJuIFR8fChUPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxu'@;
put 'dWxsIT1kJiZ2PT09ZD97cmVzdWx0OlQsZW5kOiEwfTpudWxsIT1oJiZUPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxULl9fY2hpbGRyZW4mJlJuKFQuX19jaGlsZHJlbixZPT57aWYodGhpcy5wYXJlbnRSZWZlcmVuY2Uuc2V0KFksZj9udWxsOlQpLHY9dGhpcy5yZWFkVHJlZU5vZGVz'@;
put 'KFksdixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29uc3QgbD17fTtyZXR1cm4geXModGhpcy5kYXRhWzBdLChhLGQpPT57bFtk'@;
put 'XT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4obCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdl'@;
put 'dFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxkcmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxk'@;
put 'PWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oUm4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJlbihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4g'@;
put 'YT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hlLm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChs'@;
put 'KXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1sP251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFz'@;
put 'Q2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVsbCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFy'@;
put 'IGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3ZhciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERh'@;
put 'dGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wm'@;
put 'JihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSksZi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlz'@;
put 'Lm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModiwxKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSks'@;
put 'dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBUPXRoaXMuZ2V0Um93SW5k'@;
put 'ZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLFQsMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENl'@;
put 'bGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXMoVCwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZp'@;
put 'ZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixULDEpLGY9VH1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlz'@;
put 'LnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5n'@;
put 'dGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0'@;
put 'aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sx'@;
put 'XSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPyhNbyhsWzBdLGxbMl0sa2U9Pntjb25zdCBXZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coa2UpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoV2UpKX0pLE1vKDAsaC5sZW5ndGgtMixrZT0+e3RoaXMuZGV0YWNoRnJvbVBh'@;
put 'cmVudChoW2tlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksVD10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQpLFk9dGhpcy5nZXRSb3dQYXJlbnQoZCkscmU9dGhpcy5nZXRSb3dQYXJl'@;
put 'bnQoWSksZmU9dGhpcy5nZXRSb3dJbmRleChyZSk7bGV0IF9lPW51bGw7aWYodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURldGFjaENoaWxkIixZLGQpLG51bGwhPVQpe2NvbnN0IGtlPUFycmF5LmZyb20obmV3IEFycmF5KGYrdisxKS5rZXlzKCkpLnNwbGljZSgtMSoodisxKSk7aWYodGhp'@;
put 'cy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsZix2KzEsa2UsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksWS5fX2NoaWxkcmVuLnNwbGljZShULDEpLHRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVtb3ZlUm93IixmLHYrMSxrZSx0aGlzLnBsdWdp'@;
put 'bi5wbHVnaW5OYW1lKSxyZSl7X2U9ZmUrdGhpcy5jb3VudENoaWxkcmVuKHJlKTtjb25zdCBXZT10aGlzLmdldENoaWxkKHJlLHRoaXMuY291bnRDaGlsZHJlbihyZSktMSksSmU9dGhpcy5nZXRSb3dJbmRleChXZSk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsSmUrMSx2'@;
put 'KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSkscmUuX19jaGlsZHJlbi5wdXNoKGQpfWVsc2UgX2U9dGhpcy5ob3QuY291bnRSb3dzKCkrMSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3JlYXRlUm93IixfZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmRhdGEucHVzaChk'@;
put 'KX10aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNyZWF0ZVJvdyIsX2UtMix2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRGV0YWNoQ2hpbGQiLFksZCx0aGlzLmdldFJvd0luZGV4KGQpKSxhJiZ0aGlzLmhvdC5y'@;
put 'ZW5kZXIoKX1maWx0ZXJEYXRhKGwsYSxkKXtjb25zdCBoPVtdO1JuKGQsZj0+e2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoZikpfSksUm4oaCxmPT57Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGYpLFQ9dGhpcy5nZXRSb3dQYXJlbnQoZik7bnVsbD09PVQ/dGhpcy5k'@;
put 'YXRhLnNwbGljZSh2LDEpOlQuX19jaGlsZHJlbi5zcGxpY2UodiwxKX0pLHRoaXMucmV3cml0ZUNhY2hlKCl9c3BsaWNlRGF0YShsLGEsZCl7Y29uc3QgaD10aGlzLmdldERhdGFPYmplY3QobC0xKTtsZXQgZj1udWxsLHY9bDtoJiZoLl9fY2hpbGRyZW4mJjA9PT1oLl9fY2hpbGRyZW4ubGVu'@;
put 'Z3RoPyhmPWgsdj0wKTpsPHRoaXMuY291bnRBbGxSb3dzKCkmJihmPXRoaXMuZ2V0Um93UGFyZW50KGwpLHY9dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSksZj9kP2YuX19jaGlsZHJlbi5zcGxpY2UodixhLC4uLmQpOmYuX19jaGlsZHJlbi5zcGxpY2UodixhKTpkP3RoaXMuZGF0'@;
put 'YS5zcGxpY2UodixhLC4uLmQpOnRoaXMuZGF0YS5zcGxpY2UodixhKSx0aGlzLnJld3JpdGVDYWNoZSgpfXN5bmNSb3dXaXRoUmF3U291cmNlKGwpe2xldCBhPWwsZD1udWxsO2Rve2Q9dGhpcy5nZXRSb3dQYXJlbnQoZCksbnVsbCE9PWQmJihhPWQpfXdoaWxlKG51bGwhPT1kKTt0aGlzLnBs'@;
put 'dWdpbi5kaXNhYmxlQ29yZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleChhKSwiX19jaGlsZHJlbiIsYS5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLnN5bmNSb3dXaXRoUmF3U291cmNlIiksdGhpcy5wbHVnaW4uZW5hYmxlQ29yZUFQ'@;
put 'SU1vZGlmaWVycygpfW1vdmVSb3cobCxhLGQsaCl7Y29uc3QgZj1hPT09dGhpcy5ob3QuY291bnRSb3dzKCksdj10aGlzLmdldFJvd1BhcmVudChsKSxUPXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQobCksWT12Ll9fY2hpbGRyZW4uc2xpY2UoVCxUKzEpLHJlPWw+YTtsZXQgZmU9dGhp'@;
put 'cy5nZXRSb3dQYXJlbnQoZj9hLTE6YSk7bnVsbD09ZmUmJihmZT10aGlzLmdldFJvd1BhcmVudChhLTEpKSxudWxsPT1mZSYmKGZlPXRoaXMuZ2V0RGF0YU9iamVjdChhLTEpKSxmZT9mZS5fX2NoaWxkcmVufHwoZmUuX19jaGlsZHJlbj1bXSk6KGZlPXRoaXMuZ2V0RGF0YU9iamVjdChhKSxm'@;
put 'ZS5fX2NoaWxkcmVuPVtdKTtjb25zdCBfZT1mfHxkfHxoP2ZlLl9fY2hpbGRyZW4ubGVuZ3RoOnRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoYSksa2U9dj09PWZlO2ZlLl9fY2hpbGRyZW4uc3BsaWNlKF9lLDAsWVswXSksdi5fX2NoaWxkcmVuLnNwbGljZShUKyhyZSYma2U/MTowKSwx'@;
put 'KSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLGtlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKGZlKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4uY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3co'@;
put 'bCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fSxmVT1jbGFzcyBMWmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLmhvdD1hLHRoaXMucGx1'@;
put 'Z2luPWx9fTtjbGFzcyBncCBleHRlbmRzIGZVe3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNhdG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQYXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRv'@;
put 'cjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoiaHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBzZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2Vy'@;
put 'PXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRvcnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlz'@;
put 'LmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLHY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sVD12LnF1ZXJ5U2VsZWN0b3IoInNwYW4ucm93SGVhZGVyIik7aWYoUm4odi5xdWVyeVNlbGVjdG9yQWxsKCdbY2xh'@;
put 'c3NePSJodF9uZXN0aW5nIl0nKSxyZT0+e3JlJiZ2LnJlbW92ZUNoaWxkKHJlKX0pLHdpKGEsZ3AuQ1NTX0NMQVNTRVMuaW5kaWNhdG9yQ29udGFpbmVyKSxoKXtjb25zdHtyb290RG9jdW1lbnQ6cmV9PXRoaXMuaG90LGZlPVQuY2xvbmVOb2RlKCEwKTt2LmlubmVySFRNTD0iIixNbygwLGgt'@;
put 'MSwoKT0+e2NvbnN0IF9lPXJlLmNyZWF0ZUVsZW1lbnQoIlNQQU4iKTt3aShfZSxncC5DU1NfQ0xBU1NFUy5lbXB0eUluZGljYXRvciksdi5hcHBlbmRDaGlsZChfZSl9KSx2LmFwcGVuZENoaWxkKGZlKX1pZih0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGYpKXtjb25zdCByZT10aGlz'@;
put 'LmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7d2koYSxncC5DU1NfQ0xBU1NFUy5wYXJlbnQpLHRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3dpKHJlLGAke2dwLkNTU19DTEFTU0VTLmJ1dHRvbn0gJHtncC5DU1NfQ0xBU1NFUy5leHBhbmRC'@;
put 'dXR0b259YCk6d2kocmUsYCR7Z3AuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke2dwLkNTU19DTEFTU0VTLmNvbGxhcHNlQnV0dG9ufWApLHYuYXBwZW5kQ2hpbGQocmUpfX11cGRhdGVSb3dIZWFkZXJXaWR0aChsKXtsZXQgYT1sO2F8fChhPXRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxDb3Vu'@;
put 'dCksdGhpcy5yb3dIZWFkZXJXaWR0aENhY2hlPU1hdGgubWF4KDUwLDExKzEwKmErMjUpLHRoaXMuaG90LnJlbmRlcigpfX1jb25zdCBvY2U9Z3AsUlplPWNsYXNzIElaZSBleHRlbmRzIGZVe2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdl'@;
put 'cj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRSb3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBz'@;
put 'ZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1sy'@;
put 'XToxO251bGw9PWYmJihmPTEvMCksUm4oZC5sYXN0Q29sbGFwc2VkUm93cywoVCxZKT0+e1Q+PWgmJlQ8ZiYmKGQubGFzdENvbGxhcHNlZFJvd3NbWV09VCt2KX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywh'@;
put 'KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxhc3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57TW8oaCxoK2YtMSx2PT57Y29uc3QgVD10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7VD4t'@;
put 'MSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoVCwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt'@;
put 'ZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLFQ9bnVsbDtyZXR1cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0'@;
put 'YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlJuKGYuX19jaGlsZHJlbixZPT57aC5wdXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoWSkpfSksVD10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9'@;
put 'PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2godiksVH1jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1l'@;
put 'bnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtSbihsLGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xs'@;
put 'YXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1'@;
put 'bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9W107cmV0dXJuIFJuKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFw'@;
put 'c2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVu'@;
put 'KGwpJiZSbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57Y29uc3QgVD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChUKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKFQsYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJv'@;
put 'dyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxk'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtyZXR1cm4gUm4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3Mo'@;
put 'bCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZSbih0aGlz'@;
put 'LmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57aWYoIXRoaXMuaXNBbnlQYXJlbnRDb2xsYXBzZWQodikpe2NvbnN0IFQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goVCksdGhpcy5leHBhbmRDaGlsZFJvd3MoVCxhKX19KSxoJiZ0aGlz'@;
put 'LnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3Qg'@;
put 'aD1bXTtsZXQgZj1udWxsLHY9bnVsbCxUPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFw'@;
put 'c2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlJuKGYuX19jaGlsZHJlbixZPT57Y29uc3QgcmU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChZKTtoLnB1c2gocmUpfSksVD10aGlzLmV4cGFuZFJvd3MoaCwhMCwhMSksZCYmdGhpcy51'@;
put 'bnRyaW1Sb3dzKFQpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksVH1leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09'@;
put 'YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2NvbnN0IGg9W107Um4obCxmPT57aC5wdXNoKC4uLnRoaXMuZXhwYW5kQ2hpbGRyZW4oZiwhMSwhMSkpfSksZCYmdGhpcy51bnRyaW1Sb3dzKGgpLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCl9Y29sbGFwc2VBbGwoKXtjb25zdCBsPXRoaXMu'@;
put 'ZGF0YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107Um4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oYSksdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1leHBhbmRBbGwoKXtjb25zdCBsPXRoaXMuZGF0'@;
put 'YU1hbmFnZXIuZ2V0RGF0YSgpLGE9W107Um4obCxkPT57dGhpcy5kYXRhTWFuYWdlci5oYXNDaGlsZHJlbihkKSYmYS5wdXNoKGQpfSksdGhpcy5leHBhbmRNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9dHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRp'@;
put 'b24oKCk9PntSbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCl9dW50cmltUm93cyhsKXt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e1JuKGwsYT0+e3RoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuc2V0VmFsdWVB'@;
put 'dEluZGV4KGEsITEpfSl9LCEwKX1hcmVDaGlsZHJlbkNvbGxhcHNlZChsKXtsZXQgYT1pc05hTihsKT9sOnRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSxkPSEwO3JldHVybiBudWxsPT09YSYmKGE9e19fY2hpbGRyZW46dGhpcy5kYXRhTWFuYWdlci5kYXRhfSksdGhpcy5kYXRh'@;
put 'TWFuYWdlci5oYXNDaGlsZHJlbihhKSYmUm4oYS5fX2NoaWxkcmVuLGg9Pntjb25zdCBmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoaCk7aWYoIXRoaXMucGx1Z2luLmNvbGxhcHNlZFJvd3NNYXAuZ2V0VmFsdWVBdEluZGV4KGYpKXJldHVybiBkPSExLCExfSksZH1pc0FueVBhcmVu'@;
put 'dENvbGxhcHNlZChsKXtsZXQgYT1sO2Zvcig7bnVsbCE9PWE7KXthPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEpO2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChhKTtpZih0aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZihkKT4tMSlyZXR1cm4hMH1yZXR1cm4h'@;
put 'MX10b2dnbGVTdGF0ZShsLGEpe2lmKGEuY29sPj0wKXJldHVybjtjb25zdCBkPXRoaXMudHJhbnNsYXRlVHJpbW1lZFJvdyhhLnJvdyk7UW8obC50YXJnZXQsb2NlLkNTU19DTEFTU0VTLmJ1dHRvbikmJih0aGlzLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGQpP3RoaXMuZXhwYW5kQ2hpbGRyZW4o'@;
put 'ZCk6dGhpcy5jb2xsYXBzZUNoaWxkcmVuKGQpLHAyKGwpKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpfXVudHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4gdGhpcy5ob3QudG9WaXN1YWxSb3cobCl9cmVuZGVyQW5kQWRqdXN0KCl7'@;
put 'dGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX19LHNjZT1uZXcgV2Vha01hcCxQWmU9Y2xhc3MgT1plIGV4dGVuZHMgZlV7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLGEpLHNjZS5zZXQodGhpcyx7cm93X2Fib3ZlOihkLGgpPT57dGhpcy5kYXRh'@;
put 'TWFuYWdlci5hZGRTaWJsaW5nKGhbaC5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3dfYmVsb3c6KGQsaCk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoaFtoLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSksdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5k'@;
put 'YXRhTWFuYWdlcn1hcHBlbmRPcHRpb25zKGwpe2NvbnN0IGE9W3trZXk6ImFkZF9jaGlsZCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoRkIpfSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KHRoaXMuaG90'@;
put 'LmdldFNlbGVjdGVkTGFzdCgpWzBdKSxoPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChkKTt0aGlzLmRhdGFNYW5hZ2VyLmFkZENoaWxkKGgpfSxkaXNhYmxlZDooKT0+e2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCk7cmV0dXJuIWR8fGRbMF08MHx8dGhpcy5ob3Qu'@;
put 'c2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se2tleToiZGV0YWNoX2Zyb21fcGFyZW50IixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShIQil9LGNh'@;
put 'bGxiYWNrOigpPT57dGhpcy5kYXRhTWFuYWdlci5kZXRhY2hGcm9tUGFyZW50KHRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpKX0sZGlzYWJsZWQ6KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGg9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KGRb'@;
put 'MF0pO3JldHVybiF0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChoKXx8IWR8fGRbMF08MHx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLmhvdC5jb3VudFJvd3MoKT49dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzfX0se25hbWU6'@;
put 'Ii0tLS0tLS0tLSJ9XTtyZXR1cm4gTW8oMCxsLml0ZW1zLmxlbmd0aC0xLGQ9PntpZigwPT09ZClyZXR1cm4gUm4oYSwoaCxmKT0+e2wuaXRlbXMuc3BsaWNlKGQrZiwwLGgpfSksITF9KSx0aGlzLm1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl9bW9kaWZ5Um93SW5zZXJ0aW5nT3B0aW9u'@;
put 'cyhsKXtjb25zdCBhPXNjZS5nZXQodGhpcyk7cmV0dXJuIE1vKDAsbC5pdGVtcy5sZW5ndGgtMSxkPT57Y29uc3QgaD1hW2wuaXRlbXNbZF0ua2V5XTtudWxsIT1oJiYobC5pdGVtc1tkXS5jYWxsYmFjaz1oKX0pLGx9fTtjbGFzcyBGWmV7Y29uc3RydWN0b3IobCl7dGhpcy5wbHVnaW49bCx0'@;
put 'aGlzLmhvdD1sLmhvdCx0aGlzLmRhdGFNYW5hZ2VyPWwuZGF0YU1hbmFnZXIsdGhpcy5jb2xsYXBzaW5nVUk9bC5jb2xsYXBzaW5nVUl9b25CZWZvcmVSb3dNb3ZlKGwsYSxkLGgpe2lmKHRoaXMuZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKHtyb3dzOmwsZmluYWxJbmRleDphLGRy'@;
put 'b3BJbmRleDpkLG1vdmVQb3NzaWJsZTpofSkpcmV0dXJuITE7dGhpcy5tb3ZlZFRvQ29sbGFwc2VkPSExO2NvbnN0IHY9ZD09PXRoaXMuaG90LmNvdW50Um93cygpLFQ9dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTp0aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coZCk7'@;
put 'bGV0IFk9ITA7Y29uc3QgcmU9bC5tYXAoSmU9PntpZighWSlyZXR1cm4hMTtjb25zdCB0dD10aGlzLmRhdGFNYW5hZ2VyLnRyYW5zbGF0ZVRyaW1tZWRSb3coSmUpO3JldHVybiBZPXRoaXMuc2hvdWxkQWxsb3dNb3ZpbmcodHQsVCksdHR9KSxmZT0tMT09PXJlLmluZGV4T2YoVCk7aWYoIVl8'@;
put 'fCFmZSlyZXR1cm4hMTtjb25zdCBfZT10aGlzLmdldEJhc2VQYXJlbnQocmUpLGtlPXRoaXMuZ2V0VGFyZ2V0UGFyZW50KHYsVCksV2U9X2U9PT1rZTtyZXR1cm4gdGhpcy5tb3ZlZFRvQ29sbGFwc2VkPXRoaXMuY29sbGFwc2luZ1VJLmFyZUNoaWxkcmVuQ29sbGFwc2VkKGtlKSx0aGlzLmNv'@;
put 'bGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLnNoaWZ0Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKHJlLFQsV2UpLHRoaXMubW92ZVJvd3MocmUsVCxrZSksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEocmUsVCks'@;
put 'dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goITEpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGwsYSxkLGgsaCYmdGhpcy5pc1Jvd09yZGVyQ2hhbmdlZChsLGEpKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLnNlbGVjdENlbGxzKGwsZCks'@;
put 'ITF9ZGlzcGxheUFQSUNvbXBhdGliaWxpdHlXYXJuaW5nKGwpe2NvbnN0e3Jvd3M6YSxmaW5hbEluZGV4OmQsZHJvcEluZGV4OmgsbW92ZVBvc3NpYmxlOmZ9PWw7bGV0IHY9ITE7cmV0dXJuIGlsKGgpJiYoYmwoV2FgU2luY2UgdmVyc2lvbiA4LjAuMCBvZiB0aGUgSGFuZHNvbnRhYmxlIHRo'@;
put 'ZSAnbW92ZVJvd3MnIG1ldGhvZCBpc24ndCB1c2VkIGZvciBtb3Zpbmcgcm93c1x4MjAKICAgICAgd2hlbiB0aGUgTmVzdGVkUm93cyBwbHVnaW4gaXMgZW5hYmxlZC4gUGxlYXNlIHVzZSB0aGUgJ2RyYWdSb3dzJyBtZXRob2QgaW5zdGVhZC5gKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJS'@;
put 'b3dNb3ZlIixhLGQsaCxmLCExKSx2PSEwKSx2fXNob3VsZEFsbG93TW92aW5nKGwsYSl7cmV0dXJuISh0aGlzLmRhdGFNYW5hZ2VyLmlzUGFyZW50KGwpfHx0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVzdExldmVsKGwpfHxsPT09YXx8MD09PWEpfWdldEJhc2VQYXJlbnQobCl7cmV0dXJu'@;
put 'IHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGxbMF0pfWdldFRhcmdldFBhcmVudChsLGEpe2xldCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGw/YS0xOmEpO3JldHVybiBudWxsPT1kJiYoZD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChhLTEpKSxkfXNoaWZ0'@;
put 'Q29sbGFwc2libGVQYXJlbnRzTG9jYXRpb25zKGwsYSxkKXtkfHwoTWF0aC5tYXgoLi4ubCk8PWE/dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2gobFswXSxhLC0xKmwubGVuZ3RoKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hp'@;
put 'ZnRTdGFzaChhLGxbMF0sbC5sZW5ndGgpKX1tb3ZlUm93cyhsLGEsZCl7Y29uc3QgaD1hPT09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleChkKSt0aGlzLmRhdGFNYW5hZ2VyLmNvdW50Q2hpbGRyZW4oZCkrMTt0aGlzLmhvdC5iYXRjaFJlbmRlcigoKT0+e2wuZm9yRWFjaChmPT57dGhp'@;
put 'cy5kYXRhTWFuYWdlci5tb3ZlUm93KGYsYSx0aGlzLm1vdmVkVG9Db2xsYXBzZWQsaCl9KX0pfW1vdmVDZWxsc01ldGEobCxhKXtjb25zdCBkPVtdLGg9TWF0aC5tYXgoLi4ubCk8YTtsLmZvckVhY2goZj0+e2QucHVzaCh0aGlzLmhvdC5nZXRDZWxsTWV0YUF0Um93KGYpKX0pLHRoaXMuaG90'@;
put 'LnNwbGljZUNlbGxzTWV0YShsWzBdLGwubGVuZ3RoKSx0aGlzLmhvdC5zcGxpY2VDZWxsc01ldGEoYS0oaD9kLmxlbmd0aDowKSwwLC4uLmQpfXNlbGVjdENlbGxzKGwsYSl7Y29uc3QgZD1sLmxlbmd0aDtsZXQgaD0wLGY9MCx2PW51bGwsVD1udWxsO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNl'@;
put 'ZCl7bGV0IFk9bnVsbDtZPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6YSk7Y29uc3QgcmU9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobnVsbD09PVk/dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCktMTpZLTEpLGZlPXRoaXMuZGF0YU1h'@;
put 'bmFnZXIuZ2V0Um93SW5kZXgocmUpO2g9dGhpcy5kYXRhTWFuYWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coZmUpLGY9aH1lbHNlIGxbZC0xXTxhPyhmPWEtMSxoPWYtZCsxKTooaD1hLGY9aCtkLTEpO3Y9dGhpcy5ob3Quc2VsZWN0aW9uLFQ9dGhpcy5ob3QuY291bnRDb2xzKCktMSx2LnNl'@;
put 'dFJhbmdlU3RhcnQodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoaCwwKSksdi5zZXRSYW5nZUVuZCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhmLFQpLCEwKX1pc1Jvd09yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQtaCE9PWEpfX1jb25zdCBwVT0ibmVzdGVk'@;
put 'Um93cyIsX3A9bmV3IFdlYWtNYXA7Y2xhc3MgVlplIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHBVfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDMwMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSx0aGlzLmRhdGFNYW5hZ2VyPW51bGwsdGhp'@;
put 'cy5oZWFkZXJzVUk9bnVsbCx0aGlzLmNvbGxhcHNlZFJvd3NNYXA9bnVsbCxfcC5zZXQodGhpcyx7bW92ZWRUb0NvbGxhcHNlZDohMSxza2lwUmVuZGVyOm51bGwsc2tpcENvcmVBUElNb2RpZmllcnM6ITF9KX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbcFVd'@;
put 'fWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5jb2xsYXBzZWRSb3dzTWFwPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIixuZXcgTXcpLHRoaXMuZGF0YU1hbmFnZXI9bmV3IEFaZSh0aGlzLHRoaXMuaG90KSx0aGlz'@;
put 'LmNvbGxhcHNpbmdVST1uZXcgUlplKHRoaXMsdGhpcy5ob3QpLHRoaXMuaGVhZGVyc1VJPW5ldyBvY2UodGhpcyx0aGlzLmhvdCksdGhpcy5jb250ZXh0TWVudVVJPW5ldyBQWmUodGhpcyx0aGlzLmhvdCksdGhpcy5yb3dNb3ZlQ29udHJvbGxlcj1uZXcgRlplKHRoaXMpLHRoaXMuYWRkSG9v'@;
put 'aygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJJbml0KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVWaWV3UmVuZGVyKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1v'@;
put 'ZGlmeVJvd0RhdGEiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25Nb2RpZnlSb3dEYXRhKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZUxlbmd0aCIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVNvdXJjZUxlbmd0aCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRI'@;
put 'b29rKCJiZWZvcmVEYXRhU3BsaWNlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlRGF0YVNwbGljZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJmaWx0ZXJEYXRhIixmdW5jdGlvbigpe3JldHVybiBsLm9uRmlsdGVyRGF0YSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29r'@;
put 'KCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckdl'@;
put 'dFJvd0hlYWRlciguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVPbkNlbGxNb3VzZURvd24oLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigp'@;
put 'e3JldHVybiBsLm9uQmVmb3JlUmVtb3ZlUm93KC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJSZW1vdmVSb3coLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIGwub25CZWZvcmVBZGRDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJhZnRlckFkZENoaWxkIixmdW5jdGlvbigpe3JldHVybiBsLm9uQWZ0ZXJBZGRDaGlsZCguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVEZXRhY2hDaGlsZCIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gbC5vbkJlZm9yZURldGFjaENoaWxkKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImFmdGVyRGV0YWNoQ2hpbGQiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckRldGFjaENoaWxkKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlYWRl'@;
put 'cldpZHRoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5Um93SGVhZGVyV2lkdGgoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25BZnRlckNyZWF0ZVJvdyguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJi'@;
put 'ZWZvcmVSb3dNb3ZlIixmdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUm93TW92ZSguLi5hcmd1bWVudHMpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVMb2FkRGF0YSIsYT0+dGhpcy5vbkJlZm9yZUxvYWREYXRhKGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9PnRoaXMu'@;
put 'b25CZWZvcmVMb2FkRGF0YShhKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJuZXN0ZWRSb3dzIiksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdp'@;
put 'bigpO2NvbnN0IGw9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCk7dGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLmRhdGFNYW5hZ2VyLnVwZGF0ZVdpdGhEYXRhKGwpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfW9uQmVmb3JlUm93TW92ZShsLGEsZCxoKXtyZXR1cm4gdGhpcy5yb3dNb3ZlQ29udHJv'@;
put 'bGxlci5vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtfcC5nZXQodGhpcykuc2tpcENvcmVBUElNb2RpZmllcnM9ITB9ZW5hYmxlQ29yZUFQSU1vZGlmaWVycygpe19wLmdldCh0aGlzKS5za2lwQ29yZUFQSU1vZGlmaWVycz0hMX1vbkJlZm9yZU9u'@;
put 'Q2VsbE1vdXNlRG93bihsLGEsZCl7dGhpcy5jb2xsYXBzaW5nVUkudG9nZ2xlU3RhdGUobCxhLGQpfW9uTW9kaWZ5Um93RGF0YShsKXtpZighX3AuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCl9b25Nb2RpZnlT'@;
put 'b3VyY2VMZW5ndGgoKXtpZighX3AuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0dXJuISghX3AuZ2V0KHRoaXMpLnNraXBDb3JlQVBJTW9kaWZpZXJzJiYhdGhp'@;
put 'cy5kYXRhTWFuYWdlci5pc1Jvd0hpZ2hlc3RMZXZlbChsKSYmKHRoaXMuZGF0YU1hbmFnZXIuc3BsaWNlRGF0YShsLGEsZCksMSkpfW9uRmlsdGVyRGF0YShsLGEsZCl7Y29uc3QgaD1fcC5nZXQodGhpcyk7cmV0dXJuIHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFz'@;
put 'aCgpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC50cmltU3Rhc2goZFswXSxhKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChkWzBdLG51bGwsLTEqYSksdGhpcy5kYXRhTWFuYWdlci5maWx0ZXJEYXRhKGwsYSxkKSxoLnNraXBS'@;
put 'ZW5kZXI9ITAsdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1vbkFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5jb250ZXh0TWVudVVJLmFwcGVuZE9wdGlvbnMobCl9b25BZnRlckdldFJvd0hlYWRlcihsLGEpe3RoaXMuaGVhZGVyc1VJLmFw'@;
put 'cGVuZExldmVsSW5kaWNhdG9ycyhsLGEpfW9uTW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7cmV0dXJuIHRoaXMuaGVhZGVyc1VJLnJvd0hlYWRlcldpZHRoQ2FjaGV8fGx9b25BZnRlclJlbW92ZVJvdyhsLGEsZCxoKXtpZihoPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBmPV9wLmdl'@;
put 'dCh0aGlzKTtzZXRUaW1lb3V0KCgpPT57Zi5za2lwUmVuZGVyPW51bGwsdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpfSwwKX1vbkJlZm9yZVJlbW92ZVJvdyhsLGEsZCl7Y29uc3Qg'@;
put 'aD1BcnJheS5mcm9tKGQucmVkdWNlKChmLHYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudCh2KSl7Y29uc3QgVD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QodikuX19jaGlsZHJlbjtyZXR1cm4gZi5hZGQodiksQXJyYXkuaXNBcnJheShUKSYmVC5mb3JFYWNoKFk9PmYu'@;
put 'YWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoWSkpKSxmfXJldHVybiBmLmFkZCh2KX0sbmV3IFNldCkpO2QubGVuZ3RoPTAsZC5wdXNoKC4uLmgpfW9uQmVmb3JlQWRkQ2hpbGQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1vbkFmdGVyQWRk'@;
put 'Q2hpbGQobCxhKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaCh0aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGEpKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJv'@;
put 'd0hlYWRlcldpZHRoKCl9b25CZWZvcmVEZXRhY2hDaGlsZCgpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfW9uQWZ0ZXJEZXRhY2hDaGlsZChsLGEsZCl7dGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goZCxudWxsLC0x'@;
put 'KSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCgpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCl9b25BZnRlckNyZWF0ZVJvdygpe3RoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9b25BZnRlckluaXQoKXtjb25zdCBsPU1h'@;
put 'dGgubWF4KC4uLnRoaXMuZGF0YU1hbmFnZXIuY2FjaGUubGV2ZWxzKTtsPjAmJnRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpfW9uQmVmb3JlVmlld1JlbmRlcihsLGEpe19wLmdldCh0aGlzKS5za2lwUmVuZGVyJiYoYS5za2lwUmVuZGVyPSEwKX1kZXN0cm95KCl7c3Vw'@;
put 'ZXIuZGVzdHJveSgpfW9uQmVmb3JlTG9hZERhdGEobCl7aWYoIUdvZShsKSlyZXR1cm4gcmooIlRoZSBOZXN0ZWQgUm93cyBwbHVnaW4gcmVxdWlyZXMgYW4gQXJyYXkgb2YgT2JqZWN0cyBhcyBhIGRhdGFzZXQgdG8gYmUgcHJvdmlkZWQuIFRoZSBwbHVnaW4gaGFzIGJlZW4gZGlzYWJsZWQu'@;
put 'IiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtwVV09ITEsdm9pZCB0aGlzLmRpc2FibGVQbHVnaW4oKTt0aGlzLmRhdGFNYW5hZ2VyLnNldERhdGEobCksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKX19Y29uc3QgQlplPWNsYXNzIGpaZXtjb25zdHJ1Y3RvcihsKXtsZXQgYT1hcmd1'@;
put 'bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3RoaXMucm9vdFdpbmRvdz1hLHRoaXMucHJlZml4PWwsdGhpcy5zYXZlZEtleXM9W10sdGhpcy5sb2FkU2F2ZWRLZXlzKCl9c2F2ZVZhbHVlKGwsYSl7dGhpcy5yb290V2luZG93LmxvY2Fs'@;
put 'U3RvcmFnZS5zZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke2x9YCxKU09OLnN0cmluZ2lmeShhKSksLTE9PT10aGlzLnNhdmVkS2V5cy5pbmRleE9mKGwpJiYodGhpcy5zYXZlZEtleXMucHVzaChsKSx0aGlzLnNhdmVTYXZlZEtleXMoKSl9bG9hZFZhbHVlKGwsYSl7Y29uc3QgaD10aGlzLnJv'@;
put 'b3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dHlwZW9mIGw+InUiP2E6bH1gKTtyZXR1cm4gbnVsbD09PWg/dm9pZCAwOkpTT04ucGFyc2UoaCl9cmVzZXQobCl7dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGAke3RoaXMucHJl'@;
put 'Zml4fV8ke2x9YCl9cmVzZXRBbGwoKXtSbih0aGlzLnNhdmVkS2V5cywobCxhKT0+e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHt0aGlzLnNhdmVkS2V5c1thXX1gKX0pLHRoaXMuY2xlYXJTYXZlZEtleXMoKX1sb2FkU2F2ZWRLZXlz'@;
put 'KCl7Y29uc3QgbD10aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oYCR7dGhpcy5wcmVmaXh9X19wZXJzaXN0ZW50U3RhdGVLZXlzYCksYT0ic3RyaW5nIj09dHlwZW9mIGw/SlNPTi5wYXJzZShsKTp2b2lkIDA7dGhpcy5zYXZlZEtleXM9YXx8W119c2F2ZVNhdmVkS2V5cygp'@;
put 'e3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fX3BlcnNpc3RlbnRTdGF0ZUtleXNgLEpTT04uc3RyaW5naWZ5KHRoaXMuc2F2ZWRLZXlzKSl9Y2xlYXJTYXZlZEtleXMoKXt0aGlzLnNhdmVkS2V5cy5sZW5ndGg9MCx0aGlzLnNhdmVTYXZlZEtl'@;
put 'eXMoKX19O2FvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiksYW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZUxvYWQiKSxhby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlUmVzZXQiKTtjb25zdCBh'@;
put 'Y2U9InBlcnNpc3RlbnRTdGF0ZSI7Y2xhc3MgelplIGV4dGVuZHMgc2F7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIGFjZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMuc3RvcmFnZT12b2lkIDB9aXNFbmFi'@;
put 'bGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2FjZV19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5zdG9yYWdlfHwodGhpcy5zdG9yYWdlPW5ldyBCWmUodGhpcy5ob3Qucm9vdEVsZW1lbnQuaWQsdGhpcy5ob3Qucm9vdFdpbmRvdykpLHRoaXMuYWRkSG9v'@;
put 'aygicGVyc2lzdGVudFN0YXRlU2F2ZSIsKGwsYSk9PnRoaXMuc2F2ZVZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlTG9hZCIsKGwsYSk9PnRoaXMubG9hZFZhbHVlKGwsYSkpLHRoaXMuYWRkSG9vaygicGVyc2lzdGVudFN0YXRlUmVzZXQiLCgpPT50aGlzLnJlc2V0'@;
put 'VmFsdWUoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnN0b3JhZ2U9dm9pZCAwLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigp'@;
put 'fWxvYWRWYWx1ZShsLGEpe2EudmFsdWU9dGhpcy5zdG9yYWdlLmxvYWRWYWx1ZShsKX1zYXZlVmFsdWUobCxhKXt0aGlzLnN0b3JhZ2Uuc2F2ZVZhbHVlKGwsYSl9cmVzZXRWYWx1ZShsKXt0eXBlb2YgbD4idSI/dGhpcy5zdG9yYWdlLnJlc2V0QWxsKCk6dGhpcy5zdG9yYWdlLnJlc2V0KGwp'@;
put 'fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWNvbnN0IG1VPSJzZWFyY2giLFdaZT1mdW5jdGlvbihjLGwsYSxkLGgpe2MuZ2V0Q2VsbE1ldGEobCxhKS5pc1NlYXJjaFJlc3VsdD1ofSxHWmU9ZnVuY3Rpb24oYyxsLGEpe3JldHVybiEoaWwoYyl8fG51bGw9PT1jfHwhYy50b0xvY2FsZUxv'@;
put 'd2VyQ2FzZXx8MD09PWMubGVuZ3RofHxpbChsKXx8bnVsbD09PWwpJiYtMSE9PWwudG9TdHJpbmcoKS50b0xvY2FsZUxvd2VyQ2FzZShhLmxvY2FsZSkuaW5kZXhPZihjLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKSl9O2NsYXNzICRaZSBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lO'@;
put 'X0tFWSgpe3JldHVybiBtVX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksdGhpcy5jYWxsYmFjaz1XWmUsdGhpcy5xdWVyeU1ldGhvZD1HWmUsdGhpcy5zZWFyY2hSZXN1bHRDbGFzcz0iaHRTZWFyY2hSZXN1bHQifWlzRW5h'@;
put 'YmxlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRTZXR0aW5ncygpW21VXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW21VXTt0aGlzLnVwZGF0ZVBsdWdpblNldHRpbmdzKGEpLHRoaXMuYWRkSG9v'@;
put 'aygiYmVmb3JlUmVuZGVyZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVSZW5kZXJlciguLi5hcmd1bWVudHMpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe3JldHVybiBsLm9uQmVmb3JlUmVuZGVyZXIo'@;
put 'Li4uYXJndW1lbnRzKX07dGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLCgpPT57dGhpcy5ob3QucmVtb3ZlSG9vaygiYmVmb3JlUmVuZGVyZXIiLGEpfSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0'@;
put 'ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cXVlcnkobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0Q2FsbGJhY2soKSxkPWFy'@;
put 'Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLmdldFF1ZXJ5TWV0aG9kKCk7Y29uc3QgaD10aGlzLmhvdC5jb3VudFJvd3MoKSxmPXRoaXMuaG90LmNvdW50Q29scygpLHY9W10sVD10aGlzLmhvdDtyZXR1cm4gTW8oMCxoLTEsWT0+e01v'@;
put 'KDAsZi0xLHJlPT57Y29uc3QgZmU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChZLHJlKSxfZT10aGlzLmhvdC5nZXRDZWxsTWV0YShZLHJlKSxrZT1fZS5zZWFyY2guY2FsbGJhY2t8fGEsSmU9KF9lLnNlYXJjaC5xdWVyeU1ldGhvZHx8ZCkobCxmZSxfZSk7SmUmJnYucHVzaCh7cm93OlksY29s'@;
put 'OnJlLGRhdGE6ZmV9KSxrZSYma2UoVCxZLHJlLGZlLEplKX0pfSksdn1nZXRDYWxsYmFjaygpe3JldHVybiB0aGlzLmNhbGxiYWNrfXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1nZXRRdWVyeU1ldGhvZCgpe3JldHVybiB0aGlzLnF1ZXJ5TWV0aG9kfXNldFF1ZXJ5TWV0aG9kKGwp'@;
put 'e3RoaXMucXVlcnlNZXRob2Q9bH1nZXRTZWFyY2hSZXN1bHRDbGFzcygpe3JldHVybiB0aGlzLnNlYXJjaFJlc3VsdENsYXNzfXNldFNlYXJjaFJlc3VsdENsYXNzKGwpe3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3M9bH11cGRhdGVQbHVnaW5TZXR0aW5ncyhsKXt2cyhsKSYmKGwuc2VhcmNoUmVz'@;
put 'dWx0Q2xhc3MmJnRoaXMuc2V0U2VhcmNoUmVzdWx0Q2xhc3MobC5zZWFyY2hSZXN1bHRDbGFzcyksbC5xdWVyeU1ldGhvZCYmdGhpcy5zZXRRdWVyeU1ldGhvZChsLnF1ZXJ5TWV0aG9kKSxsLmNhbGxiYWNrJiZ0aGlzLnNldENhbGxiYWNrKGwuY2FsbGJhY2spKX1vbkJlZm9yZVJlbmRlcmVy'@;
put 'KGwsYSxkLGgsZix2KXtjb25zdCBUPXYuY2xhc3NOYW1lfHxbXTtsZXQgWT1bXTsic3RyaW5nIj09dHlwZW9mIFQ/WT1ULnNwbGl0KCIgIik6WS5wdXNoKC4uLlQpLHRoaXMuaXNFbmFibGVkKCkmJnYuaXNTZWFyY2hSZXN1bHQ/WS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKXx8'@;
put 'WS5wdXNoKGAke3RoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9YCk6WS5pbmNsdWRlcyh0aGlzLnNlYXJjaFJlc3VsdENsYXNzKSYmWS5zcGxpY2UoWS5pbmRleE9mKHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3MpLDEpLHYuY2xhc3NOYW1lPVkuam9pbigiICIpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95'@;
put 'KCl9fWNsYXNzIFhaZSBleHRlbmRzIHNhe3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9Y29uc3RydWN0b3IobCl7c3VwZXIo'@;
put 'bCksdGhpcy5zY3JvbGxiYXJzPVtdLHRoaXMuY2xvbmVzPVtdLHRoaXMubG9ja2VkQ29sbGVjdGlvbj0hMSx0aGlzLmZyZWV6ZU92ZXJsYXlzPSExfWlzRW5hYmxlZCgpe3JldHVybiBfaigpfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3UmVu'@;
put 'ZGVyIiwoKT0+dGhpcy5vbkFmdGVyVmlld1JlbmRlcigpKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMubG9ja2VkQ29sbGVjdGlvbj0hMSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlz'@;
put 'YWJsZVBsdWdpbigpfXJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5hZGRIb29rKCJiZWZvcmVUb3VjaFNjcm9sbCIsKCk9PnRoaXMub25CZWZvcmVUb3VjaFNjcm9sbCgpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT50aGlzLm9uQWZ0ZXJNb21lbnR1bVNjcm9sbCgpKX1v'@;
put 'bkFmdGVyVmlld1JlbmRlcigpe2lmKHRoaXMubG9ja2VkQ29sbGVjdGlvbilyZXR1cm47Y29uc3R7dG9wT3ZlcmxheTpsLGJvdHRvbU92ZXJsYXk6YSxpbmxpbmVTdGFydE92ZXJsYXk6ZCx0b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk6aCxib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJs'@;
put 'YXk6Zn09dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5czt0aGlzLmxvY2tlZENvbGxlY3Rpb249ITAsdGhpcy5zY3JvbGxiYXJzLmxlbmd0aD0wLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGwpLGEuY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGEpLHRoaXMuc2Nyb2xsYmFycy5wdXNoKGQp'@;
put 'LGgmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGgpLGYmJmYuY2xvbmUmJnRoaXMuc2Nyb2xsYmFycy5wdXNoKGYpLHRoaXMuY2xvbmVzPVtdLGwubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2gobC5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxhLm5lZWRGdWxsUmVuZGVy'@;
put 'JiZ0aGlzLmNsb25lcy5wdXNoKGEuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksZC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChkLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGgmJnRoaXMuY2xvbmVzLnB1c2goaC5jbG9uZS53dFRhYmxlLmhvbGRl'@;
put 'ci5wYXJlbnROb2RlKSxmJiZmLmNsb25lJiZ0aGlzLmNsb25lcy5wdXNoKGYuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSl9b25CZWZvcmVUb3VjaFNjcm9sbCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITAsUm4odGhpcy5jbG9uZXMsbD0+e3dpKGwsImhpZGUtdHdlZW4iKX0pfW9u'@;
put 'QWZ0ZXJNb21lbnR1bVNjcm9sbCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITEsUm4odGhpcy5jbG9uZXMsbD0+e3NzKGwsImhpZGUtdHdlZW4iKSx3aShsLCJzaG93LXR3ZWVuIil9KSx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57Um4odGhpcy5jbG9uZXMsbD0+e3NzKGwsInNob3ct'@;
put 'dHdlZW4iKX0pfSw0MDApLFJuKHRoaXMuc2Nyb2xsYmFycyxsPT57bC5yZWZyZXNoKCksbC5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Njcm9sbFdpdGhNYXN0ZXIoKX19Y29uc3QgdEE9InRyaW1Sb3dzIjtjbGFzcyBRWmUgZXh0ZW5k'@;
put 'cyBzYXtzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gdEF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzMwfWNvbnN0cnVjdG9yKGwpe3N1cGVyKGwpLHRoaXMudHJpbW1lZFJvd3NNYXA9bnVsbH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRp'@;
put 'bmdzKClbdEFdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMudHJpbW1lZFJvd3NNYXA9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoInRyaW1Sb3dzIixuZXcgTXcpLHRoaXMudHJpbW1lZFJvd3NNYXAuYWRkTG9jYWxIb29rKCJpbml0IiwoKT0+dGhpcy5v'@;
put 'bk1hcEluaXQoKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0QV07QXJyYXkuaXNBcnJheShsKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLmNsZWFyKCksUm4obCxh'@;
put 'PT57dGhpcy50cmltbWVkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwhMCl9KX0sITApLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKCJ0cmltUm93cyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRU'@;
put 'cmltbWVkUm93cygpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFRyaW1tZWRJbmRleGVzKCl9dHJpbVJvd3MobCl7Y29uc3QgYT10aGlzLmdldFRyaW1tZWRSb3dzKCksZD10aGlzLmlzVmFsaWRDb25maWcobCk7bGV0IGg9YTtkJiYoaD1BcnJheS5mcm9tKG5ldyBTZXQoYS5jb25j'@;
put 'YXQobCkpKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVHJpbVJvdyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntSbihsLHY9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleCh2LCEwKX0pfSwhMCksdGhpcy5ob3QucnVuSG9va3Mo'@;
put 'ImFmdGVyVHJpbVJvdyIsYSxoLGQsZCYmaC5sZW5ndGg+YS5sZW5ndGgpKX10cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy50cmltUm93cyhhKX11bnRyaW1Sb3dzKGwpe2NvbnN0IGE9'@;
put 'dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xldCBoPWE7Y29uc3QgZj10aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlcygpLnNsaWNlKCksdj1sLmxlbmd0aD4wO2QmJnYmJihSbihsLFk9PntmW1ldPSExfSksaD1zYyhmLChZLHJlLGZlKT0+KHJlJiZZ'@;
put 'LnB1c2goZmUpLFkpLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW50cmltUm93IixhLGgsZCYmdikmJihkJiZ2JiZ0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlcyhmKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJVbnRyaW1Sb3ciLGEsaCxkJiZ2LGQmJmgubGVuZ3Ro'@;
put 'PGEubGVuZ3RoKSl9dW50cmltUm93KCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07dGhpcy51bnRyaW1Sb3dzKGEpfWlzVHJpbW1lZChsKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZUF0'@;
put 'SW5kZXgobCl8fCExfXVudHJpbUFsbCgpe3RoaXMudW50cmltUm93cyh0aGlzLmdldFRyaW1tZWRSb3dzKCkpfWlzVmFsaWRDb25maWcobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtyZXR1cm4gbC5ldmVyeShkPT5OdW1iZXIuaXNJbnRlZ2VyKGQpJiZkPj0wJiZkPGEp'@;
put 'fW9uTWFwSW5pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0QV07QXJyYXkuaXNBcnJheShsKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntSbihsLGE9Pnt0aGlzLnRyaW1tZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCEwKX0pfSwhMCl9ZGVzdHJveSgpe3N1'@;
put 'cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gaW8oYyl7Y29uc3QgbD10aGlzO3RoaXMuaW5zdGFuY2U9Yyx0aGlzLmRvbmVBY3Rpb25zPVtdLHRoaXMudW5kb25lQWN0aW9ucz1bXSx0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITEsdGhpcy5lbmFibGVkPSExLGMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKGEsZCl7Y29uc3QgaD1hJiZhLmxlbmd0aDtoJiZhLmZpbmQoVD0+e2NvbnN0WywsWSxyZV09VDtyZXR1cm4gWSE9PXJlfSkmJmwuZG9uZSgoKT0+e2NvbnN0IFQ9YS5yZWR1Y2UoKHJlLGZlKT0+KHJlLnB1c2goWy4uLmZlXSkscmUpLFtdKTtSbihULHJlPT57cmVbMV09Yy5w'@;
put 'cm9wVG9Db2wocmVbMV0pfSk7Y29uc3QgWT1oPjE/dGhpcy5nZXRTZWxlY3RlZCgpOltbVFswXVswXSxUWzBdWzFdXV07cmV0dXJuIG5ldyBpby5DaGFuZ2VBY3Rpb24oVCxZKX0sZCl9KSxjLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoYSxkLGgpPT57bC5kb25lKCgpPT5uZXcgaW8uQ3Jl'@;
put 'YXRlUm93QWN0aW9uKGEsZCksaCl9KSxjLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGEsZCxoLGYpPT57bC5kb25lKCgpPT57Y29uc3QgVD1jLnRvUGh5c2ljYWxSb3coYSksWT1sMChsLmluc3RhbmNlLmdldFNvdXJjZURhdGEoVCwwLFQrZC0xLGwuaW5zdGFuY2UuY291bnRTb3VyY2VD'@;
put 'b2xzKCktMSkpO3JldHVybiBuZXcgaW8uUmVtb3ZlUm93QWN0aW9uKFQsWSxjLmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tLGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsYy5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKSl9LGYpfSksYy5hZGRIb29rKCJhZnRl'@;
put 'ckNyZWF0ZUNvbCIsKGEsZCxoKT0+e2wuZG9uZSgoKT0+bmV3IGlvLkNyZWF0ZUNvbHVtbkFjdGlvbihhLGQpLGgpfSksYy5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLChhLGQsaCxmKT0+e2wuZG9uZSgoKT0+e2NvbnN0IFQ9bC5pbnN0YW5jZS5nZXRTb3VyY2VEYXRhQXJyYXkoKSxZPShs'@;
put 'Lmluc3RhbmNlLmNvdW50Q29scygpK2EpJWwuaW5zdGFuY2UuY291bnRDb2xzKCkscmU9W10sZmU9W10sX2U9W107TW8oVC5sZW5ndGgtMSxKZT0+e2NvbnN0IHR0PVtdLHl0PVRbSmVdO01vKFksWSsoZC0xKSx3dD0+e3R0LnB1c2goeXRbYy50b1BoeXNpY2FsQ29sdW1uKHd0KV0pfSkscmUu'@;
put 'cHVzaCh0dCl9KSxNbyhkLTEsSmU9PntfZS5wdXNoKGMudG9QaHlzaWNhbENvbHVtbihZK0plKSl9KSxBcnJheS5pc0FycmF5KGMuZ2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzKSYmTW8oZC0xLEplPT57ZmUucHVzaChjLmdldFNldHRpbmdzKCkuY29sSGVhZGVyc1tjLnRvUGh5c2ljYWxDb2x1'@;
put 'bW4oWStKZSldfHxudWxsKX0pO2NvbnN0IGtlPWMuY29sdW1uSW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCksV2U9Yy5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVuY2UoKTtyZXR1cm4gbmV3IGlvLlJlbW92ZUNvbHVtbkFjdGlvbihZLF9lLHJlLGZlLGtlLFdlLGMuZ2V0'@;
put 'U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCl9LGYpfSksYy5hZGRIb29rKCJiZWZvcmVDZWxsQWxpZ25tZW50IiwoYSxkLGgsZik9PntsLmRvbmUoKCk9Pm5ldyBpby5DZWxsQWxpZ25tZW50QWN0aW9uKGEsZCxoLGYpKX0pLGMuYWRkSG9vaygiYmVmb3JlRmlsdGVyIixhPT57bC5kb25l'@;
put 'KCgpPT5uZXcgaW8uRmlsdGVyc0FjdGlvbihhKSl9KSxjLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChhLGQpPT57ITEhPT1hJiZsLmRvbmUoKCk9Pm5ldyBpby5Sb3dNb3ZlQWN0aW9uKGEsZCkpfSksYy5hZGRIb29rKCJiZWZvcmVNZXJnZUNlbGxzIiwoYSxkKT0+e2R8fGwuZG9uZSgoKT0+'@;
put 'bmV3IGlvLk1lcmdlQ2VsbHNBY3Rpb24oYyxhKSl9KSxjLmFkZEhvb2soImFmdGVyVW5tZXJnZUNlbGxzIiwoYSxkKT0+e2R8fGwuZG9uZSgoKT0+bmV3IGlvLlVubWVyZ2VDZWxsc0FjdGlvbihjLGEpKX0pLGMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+e2wuaW5pdCgpfSl9ZnVuY3Rpb24g'@;
put 'Y2NlKGMsbCl7aWYoImxvYWREYXRhIj09PWwpcmV0dXJuIHRoaXMudW5kb1JlZG8uY2xlYXIoKX1pby5wcm90b3R5cGUuZG9uZT1mdW5jdGlvbihjLGwpe2lmKHRoaXMuaWdub3JlTmV3QWN0aW9uc3x8IlVuZG9SZWRvLnVuZG8iPT09bHx8IlVuZG9SZWRvLnJlZG8iPT09bHx8ImF1dG8iPT09'@;
put 'bClyZXR1cm47Y29uc3QgZD10aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGQsbCkpcmV0dXJuO2NvbnN0IGY9YygpLHY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5kb25lQWN0aW9u'@;
put 'cy5wdXNoKGYpLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixkLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIix2KSx0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhp'@;
put 'cy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLHYsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpfSxpby5wcm90b3R5cGUudW5kbz1mdW5jdGlvbigpe2lmKHRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpe2NvbnN0IGM9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO3Ro'@;
put 'aXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsYyk7Y29uc3QgbD10aGlzLmRvbmVBY3Rpb25zLnBvcCgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixjLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgYT1sMChs'@;
put 'KTtpZighMT09PXRoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVVuZG8iLGEpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgaD10aGlzLGY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYmVmb3JlUmVkb1N0YWNrQ2hh'@;
put 'bmdlIixmKSxsLnVuZG8odGhpcy5pbnN0YW5jZSwoKT0+e2guaWdub3JlTmV3QWN0aW9ucz0hMSxoLnVuZG9uZUFjdGlvbnMucHVzaChsKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixmLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmlu'@;
put 'c3RhbmNlLnJ1bkhvb2tzKCJhZnRlclVuZG8iLGEpfX0saW8ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oKXtpZih0aGlzLmlzUmVkb0F2YWlsYWJsZSgpKXtjb25zdCBjPXRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpO3RoaXMuaW5zdGFuY2UucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0No'@;
put 'YW5nZSIsYyk7Y29uc3QgbD10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLGMsdGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCkpO2NvbnN0IGE9bDAobCk7aWYoITE9PT10aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJi'@;
put 'ZWZvcmVSZWRvIixhKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGg9dGhpcyxmPXRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmluc3RhbmNlLnJ1bkhvb2tzKCJiZWZvcmVVbmRvU3RhY2tDaGFuZ2UiLGYpLGwucmVkbyh0aGlzLmluc3RhbmNlLCgpPT57aC5p'@;
put 'Z25vcmVOZXdBY3Rpb25zPSExLGguZG9uZUFjdGlvbnMucHVzaChsKX0pLHRoaXMuaW5zdGFuY2UucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixmLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5pbnN0YW5jZS5ydW5Ib29rcygiYWZ0ZXJSZWRvIixhKX19LGlvLnByb3Rv'@;
put 'dHlwZS5pc1VuZG9BdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb25lQWN0aW9ucy5sZW5ndGg+MH0saW8ucHJvdG90eXBlLmlzUmVkb0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnVuZG9uZUFjdGlvbnMubGVuZ3RoPjB9LGlvLnByb3RvdHlwZS5jbGVhcj1mdW5j'@;
put 'dGlvbigpe3RoaXMuZG9uZUFjdGlvbnMubGVuZ3RoPTAsdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wfSxpby5wcm90b3R5cGUuaXNFbmFibGVkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5hYmxlZH0saW8ucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbigpe2lmKHRoaXMuaXNFbmFibGVk'@;
put 'KCkpcmV0dXJuO2NvbnN0IGM9dGhpcy5pbnN0YW5jZTt0aGlzLmVuYWJsZWQ9ITAsZnVuY3Rpb24gcldlKGMpe2MudW5kbz1mdW5jdGlvbigpe3JldHVybiBjLnVuZG9SZWRvLnVuZG8oKX0sYy5yZWRvPWZ1bmN0aW9uKCl7cmV0dXJuIGMudW5kb1JlZG8ucmVkbygpfSxjLmlzVW5kb0F2YWls'@;
put 'YWJsZT1mdW5jdGlvbigpe3JldHVybiBjLnVuZG9SZWRvLmlzVW5kb0F2YWlsYWJsZSgpfSxjLmlzUmVkb0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiBjLnVuZG9SZWRvLmlzUmVkb0F2YWlsYWJsZSgpfSxjLmNsZWFyVW5kbz1mdW5jdGlvbigpe3JldHVybiBjLnVuZG9SZWRvLmNsZWFy'@;
put 'KCl9fShjKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksYy5hZGRIb29rKCJhZnRlckNoYW5nZSIsY2NlKX0saW8ucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXtpZighdGhpcy5pc0VuYWJsZWQoKSlyZXR1cm47Y29uc3QgYz10aGlzLmluc3RhbmNlO3RoaXMuZW5hYmxlZD0hMSxmdW5j'@;
put 'dGlvbiBpV2UoYyl7ZGVsZXRlIGMudW5kbyxkZWxldGUgYy5yZWRvLGRlbGV0ZSBjLmlzVW5kb0F2YWlsYWJsZSxkZWxldGUgYy5pc1JlZG9BdmFpbGFibGUsZGVsZXRlIGMuY2xlYXJVbmRvfShjKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxjLnJlbW92ZUhvb2soImFmdGVyQ2hhbmdl'@;
put 'IixjY2UpfSxpby5wcm90b3R5cGUuZGVzdHJveT1mdW5jdGlvbigpe3RoaXMuY2xlYXIoKSx0aGlzLmluc3RhbmNlPW51bGwsdGhpcy5kb25lQWN0aW9ucz1udWxsLHRoaXMudW5kb25lQWN0aW9ucz1udWxsfSwoaW8uQWN0aW9uPWZ1bmN0aW9uKCl7fSkucHJvdG90eXBlLnVuZG89ZnVuY3Rp'@;
put 'b24oKXt9LGlvLkFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbigpe30saW8uQ2hhbmdlQWN0aW9uPWZ1bmN0aW9uKGMsbCl7dGhpcy5jaGFuZ2VzPWMsdGhpcy5zZWxlY3RlZD1sLHRoaXMuYWN0aW9uVHlwZT0iY2hhbmdlIn0sb3AoaW8uQ2hhbmdlQWN0aW9uLGlvLkFjdGlvbiksaW8u'@;
put 'Q2hhbmdlQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1sMCh0aGlzLmNoYW5nZXMpLGQ9Yy5jb3VudEVtcHR5Um93cyghMCksaD1jLmNvdW50RW1wdHlDb2xzKCEwKTtmb3IobGV0IGY9MCx2PWEubGVuZ3RoO2Y8djtmKyspYVtmXS5zcGxpY2UoMywxKTtjLmFk'@;
put 'ZEhvb2tPbmNlKCJhZnRlckNoYW5nZSIsbCksYy5zZXREYXRhQXRDZWxsKGEsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIik7Zm9yKGxldCBmPTAsdj1hLmxlbmd0aDtmPHY7ZisrKXtjb25zdFtULFldPWFbZl07Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cyYmVCsxK2MuZ2V0U2V0dGlu'@;
put 'Z3MoKS5taW5TcGFyZVJvd3M9PT1jLmNvdW50Um93cygpJiZkPT09Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cyYmKGMuYWx0ZXIoInJlbW92ZV9yb3ciLHBhcnNlSW50KFQrMSwxMCksYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93cyksYy51bmRvUmVkby5kb25lQWN0aW9ucy5wb3Ao'@;
put 'KSksYy5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scyYmWSsxK2MuZ2V0U2V0dGluZ3MoKS5taW5TcGFyZUNvbHM9PT1jLmNvdW50Q29scygpJiZoPT09Yy5nZXRTZXR0aW5ncygpLm1pblNwYXJlQ29scyYmKGMuYWx0ZXIoInJlbW92ZV9jb2wiLHBhcnNlSW50KFkrMSwxMCksYy5nZXRTZXR0'@;
put 'aW5ncygpLm1pblNwYXJlQ29scyksYy51bmRvUmVkby5kb25lQWN0aW9ucy5wb3AoKSl9Yy5zZWxlY3RDZWxscyh0aGlzLnNlbGVjdGVkLCExLCExKX0saW8uQ2hhbmdlQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1sMCh0aGlzLmNoYW5nZXMpO2ZvcihsZXQg'@;
put 'ZD0wLGg9YS5sZW5ndGg7ZDxoO2QrKylhW2RdLnNwbGljZSgyLDEpO2MuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixsKSxjLnNldERhdGFBdENlbGwoYSxudWxsLG51bGwsIlVuZG9SZWRvLnJlZG8iKSx0aGlzLnNlbGVjdGVkJiZjLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEp'@;
put 'fSxpby5DcmVhdGVSb3dBY3Rpb249ZnVuY3Rpb24oYyxsKXt0aGlzLmluZGV4PWMsdGhpcy5hbW91bnQ9bCx0aGlzLmFjdGlvblR5cGU9Imluc2VydF9yb3cifSxvcChpby5DcmVhdGVSb3dBY3Rpb24saW8uQWN0aW9uKSxpby5DcmVhdGVSb3dBY3Rpb24ucHJvdG90eXBlLnVuZG89ZnVuY3Rp'@;
put 'b24oYyxsKXtjb25zdCBhPWMuY291bnRSb3dzKCksZD1jLmdldFNldHRpbmdzKCkubWluU3BhcmVSb3dzO3RoaXMuaW5kZXg+PWEmJnRoaXMuaW5kZXgtZDxhJiYodGhpcy5pbmRleC09ZCksYy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGwpLGMuYWx0ZXIoInJlbW92ZV9yb3ciLHRo'@;
put 'aXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnVuZG8iKX0saW8uQ3JlYXRlUm93QWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJDcmVhdGVSb3ciLGwpLGMuYWx0ZXIoImluc2VydF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5h'@;
put 'bW91bnQsIlVuZG9SZWRvLnJlZG8iKX0saW8uUmVtb3ZlUm93QWN0aW9uPWZ1bmN0aW9uKGMsbCxhLGQsaCl7dGhpcy5pbmRleD1jLHRoaXMuZGF0YT1sLHRoaXMuYWN0aW9uVHlwZT0icmVtb3ZlX3JvdyIsdGhpcy5maXhlZFJvd3NCb3R0b209YSx0aGlzLmZpeGVkUm93c1RvcD1kLHRoaXMu'@;
put 'cm93SW5kZXhlc1NlcXVlbmNlPWh9LG9wKGlvLlJlbW92ZVJvd0FjdGlvbixpby5BY3Rpb24pLGlvLlJlbW92ZVJvd0FjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2NvbnN0IGE9Yy5nZXRTZXR0aW5ncygpLGQ9W107YS5maXhlZFJvd3NCb3R0b209dGhpcy5maXhlZFJvd3NC'@;
put 'b3R0b20sYS5maXhlZFJvd3NUb3A9dGhpcy5maXhlZFJvd3NUb3AsdGhpcy5kYXRhLmZvckVhY2goKGgsZik9PntPYmplY3Qua2V5cyhoKS5mb3JFYWNoKHY9Pntjb25zdCBUPXBhcnNlSW50KHYsMTApO2QucHVzaChbdGhpcy5pbmRleCtmLGlzTmFOKFQpP3Y6VCxoW3ZdXSl9KX0pLGMuYWx0'@;
put 'ZXIoImluc2VydF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLGMuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYy5zZXRTb3VyY2VEYXRhQXRDZWxsKGQsbnVsbCxudWxsLCJVbmRvUmVkby51bmRvIiksYy5yb3dJbmRleE1h'@;
put 'cHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dJbmRleGVzU2VxdWVuY2UpfSxpby5SZW1vdmVSb3dBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjLmFkZEhvb2tPbmNlKCJhZnRlclJlbW92ZVJvdyIsbCksYy5hbHRlcigicmVtb3ZlX3JvdyIsdGhpcy5pbmRleCx0'@;
put 'aGlzLmRhdGEubGVuZ3RoLCJVbmRvUmVkby5yZWRvIil9LGlvLkNyZWF0ZUNvbHVtbkFjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMuaW5kZXg9Yyx0aGlzLmFtb3VudD1sLHRoaXMuYWN0aW9uVHlwZT0iaW5zZXJ0X2NvbCJ9LG9wKGlvLkNyZWF0ZUNvbHVtbkFjdGlvbixpby5BY3Rpb24pLGlv'@;
put 'LkNyZWF0ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlQ29sIixsKSxjLmFsdGVyKCJyZW1vdmVfY29sIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9LGlvLkNyZWF0ZUNvbHVtbkFjdGlv'@;
put 'bi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2MuYWRkSG9va09uY2UoImFmdGVyQ3JlYXRlQ29sIixsKSxjLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9LGlvLlJlbW92ZUNvbHVtbkFjdGlvbj1mdW5jdGlvbihj'@;
put 'LGwsYSxkLGgsZix2KXt0aGlzLmluZGV4PWMsdGhpcy5pbmRleGVzPWwsdGhpcy5kYXRhPWEsdGhpcy5hbW91bnQ9dGhpcy5kYXRhWzBdLmxlbmd0aCx0aGlzLmhlYWRlcnM9ZCx0aGlzLmNvbHVtblBvc2l0aW9ucz1oLnNsaWNlKDApLHRoaXMucm93UG9zaXRpb25zPWYuc2xpY2UoMCksdGhp'@;
put 'cy5hY3Rpb25UeXBlPSJyZW1vdmVfY29sIix0aGlzLmZpeGVkQ29sdW1uc1N0YXJ0PXZ9LG9wKGlvLlJlbW92ZUNvbHVtbkFjdGlvbixpby5BY3Rpb24pLGlvLlJlbW92ZUNvbHVtbkFjdGlvbi5wcm90b3R5cGUudW5kbz1mdW5jdGlvbihjLGwpe2MuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVt'@;
put 'bnNTdGFydD10aGlzLmZpeGVkQ29sdW1uc1N0YXJ0O2NvbnN0IGQ9dGhpcy5pbmRleGVzLnNsaWNlKDApLnNvcnQoKSxoPShyZSxmZSxfZSk9Pl9lW3RoaXMuaW5kZXhlcy5pbmRleE9mKGRbZmVdKV0sZj10aGlzLmRhdGEubGVuZ3RoLHY9W107Zm9yKGxldCByZT0wO3JlPGY7cmUrKyl2LnB1'@;
put 'c2goX3ModGhpcy5kYXRhW3JlXSxoKSk7Y29uc3QgVD1fcyh0aGlzLmhlYWRlcnMsaCksWT1bXTtjLmFsdGVyKCJpbnNlcnRfY29sX3N0YXJ0Iix0aGlzLmluZGV4ZXNbMF0sdGhpcy5pbmRleGVzLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLFJuKGMuZ2V0U291cmNlRGF0YUFycmF5KCksKHJl'@;
put 'LGZlKT0+e1JuKGQsKF9lLGtlKT0+e3JlW19lXT12W2ZlXVtrZV0sWS5wdXNoKFtmZSxfZSxyZVtfZV1dKX0pfSksYy5zZXRTb3VyY2VEYXRhQXRDZWxsKFksdm9pZCAwLHZvaWQgMCwiVW5kb1JlZG8udW5kbyIpLHR5cGVvZiB0aGlzLmhlYWRlcnM8InUiJiZSbihULChyZSxmZSk9PntjLmdl'@;
put 'dFNldHRpbmdzKCkuY29sSGVhZGVyc1tkW2ZlXV09cmV9KSxjLmJhdGNoRXhlY3V0aW9uKCgpPT57Yy5yb3dJbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5yb3dQb3NpdGlvbnMpLGMuY29sdW1uSW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMuY29sdW1uUG9z'@;
put 'aXRpb25zKX0sITApLGMuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYy5yZW5kZXIoKX0saW8uUmVtb3ZlQ29sdW1uQWN0aW9uLnByb3RvdHlwZS5yZWRvPWZ1bmN0aW9uKGMsbCl7Yy5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVDb2wiLGwpLGMuYWx0ZXIoInJlbW92ZV9jb2wi'@;
put 'LHRoaXMuaW5kZXgsdGhpcy5hbW91bnQsIlVuZG9SZWRvLnJlZG8iKX0saW8uQ2VsbEFsaWdubWVudEFjdGlvbj1mdW5jdGlvbihjLGwsYSxkKXt0aGlzLnN0YXRlQmVmb3JlPWMsdGhpcy5yYW5nZT1sLHRoaXMudHlwZT1hLHRoaXMuYWxpZ25tZW50PWR9LGlvLkNlbGxBbGlnbm1lbnRBY3Rp'@;
put 'b24ucHJvdG90eXBlLnVuZG89ZnVuY3Rpb24oYyxsKXtSbih0aGlzLnJhbmdlLGE9PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJmMuc2V0Q2VsbE1ldGEoZCxoLCJjbGFzc05hbWUiLHRoaXMuc3RhdGVCZWZvcmVbZF1baF18fCIgaHRMZWZ0Iil9KX0pLGMuYWRkSG9va09uY2UoImFm'@;
put 'dGVyVmlld1JlbmRlciIsbCksYy5yZW5kZXIoKX0saW8uQ2VsbEFsaWdubWVudEFjdGlvbi5wcm90b3R5cGUucmVkbz1mdW5jdGlvbihjLGwpe2RtKHRoaXMucmFuZ2UsdGhpcy50eXBlLHRoaXMuYWxpZ25tZW50LChhLGQpPT5jLmdldENlbGxNZXRhKGEsZCksKGEsZCxoLGYpPT5jLnNldENl'@;
put 'bGxNZXRhKGEsZCxoLGYpKSxjLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGwpLGMucmVuZGVyKCl9LGlvLkZpbHRlcnNBY3Rpb249ZnVuY3Rpb24oYyl7dGhpcy5jb25kaXRpb25zU3RhY2s9Yyx0aGlzLmFjdGlvblR5cGU9ImZpbHRlciJ9LG9wKGlvLkZpbHRlcnNBY3Rpb24saW8u'@;
put 'QWN0aW9uKSxpby5GaWx0ZXJzQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMsbCl7Y29uc3QgYT1jLmdldFBsdWdpbigiZmlsdGVycyIpO2MuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCksYS5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnModGhp'@;
put 'cy5jb25kaXRpb25zU3RhY2suc2xpY2UoMCx0aGlzLmNvbmRpdGlvbnNTdGFjay5sZW5ndGgtMSkpLGEuZmlsdGVyKCl9LGlvLkZpbHRlcnNBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7Yy5hZGRIb29rT25jZSgiYWZ0'@;
put 'ZXJWaWV3UmVuZGVyIixsKSxhLmNvbmRpdGlvbkNvbGxlY3Rpb24uaW1wb3J0QWxsQ29uZGl0aW9ucyh0aGlzLmNvbmRpdGlvbnNTdGFjayksYS5maWx0ZXIoKX0saW8uTWVyZ2VDZWxsc0FjdGlvbj1jbGFzcyB0V2UgZXh0ZW5kcyBpby5BY3Rpb257Y29uc3RydWN0b3IobCxhKXtzdXBlcigp'@;
put 'LHRoaXMuY2VsbFJhbmdlPWE7Y29uc3QgZD10aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpLGg9dGhpcy5jZWxsUmFuZ2UuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yYW5nZURhdGE9bC5nZXREYXRhKGQucm93LGQuY29sLGgucm93LGguY29sKX11bmRvKGwsYSl7Y29uc3Qg'@;
put 'ZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApO2NvbnN0IGg9dGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKTtsLnBvcHVsYXRlRnJvbUFycmF5KGgucm93'@;
put 'LGguY29sLHRoaXMucmFuZ2VEYXRhLHZvaWQgMCx2b2lkIDAsIk1lcmdlQ2VsbHMiKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlKX19LGlvLlVu'@;
put 'bWVyZ2VDZWxsc0FjdGlvbj1jbGFzcyBuV2UgZXh0ZW5kcyBpby5BY3Rpb257Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuY2VsbFJhbmdlPWF9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEp'@;
put 'LGQubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1lcmdlQ2VsbHMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQudW5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlLCEwKSxsLnJlbmRlcigpfX0saW8uUm93'@;
put 'TW92ZUFjdGlvbj1mdW5jdGlvbihjLGwpe3RoaXMucm93cz1jLnNsaWNlKCksdGhpcy5maW5hbEluZGV4PWwsdGhpcy5hY3Rpb25UeXBlPSJyb3dfbW92ZSJ9LG9wKGlvLlJvd01vdmVBY3Rpb24saW8uQWN0aW9uKSxpby5Sb3dNb3ZlQWN0aW9uLnByb3RvdHlwZS51bmRvPWZ1bmN0aW9uKGMs'@;
put 'bCl7Y29uc3QgYT1jLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpLGQ9W10uY29uY2F0KHRoaXMucm93cyksaD1kLmZpbHRlcihUPT5UPnRoaXMuZmluYWxJbmRleCksZj1kLmZpbHRlcihUPT5UPD10aGlzLmZpbmFsSW5kZXgpLHY9aC5zb3J0KChULFkpPT5ZLVQpLmNvbmNhdChmLnNvcnQo'@;
put 'KFQsWSk9PlQtWSkpO2MuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsbCk7Zm9yKGxldCBUPTA7VDx2Lmxlbmd0aDtUKz0xKXtjb25zdCBZPWMudG9WaXN1YWxSb3codltUXSk7YS5tb3ZlUm93KFksdltUXSl9Yy5yZW5kZXIoKSxjLmRlc2VsZWN0Q2VsbCgpLGMuc2VsZWN0Um93cyh0'@;
put 'aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5ndGgtMSl9LGlvLlJvd01vdmVBY3Rpb24ucHJvdG90eXBlLnJlZG89ZnVuY3Rpb24oYyxsKXtjb25zdCBhPWMuZ2V0UGx1Z2luKCJtYW51YWxSb3dNb3ZlIik7Yy5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixsKSxh'@;
put 'Lm1vdmVSb3dzKHRoaXMucm93cy5zbGljZSgpLHRoaXMuZmluYWxJbmRleCksYy5yZW5kZXIoKSxjLmRlc2VsZWN0Q2VsbCgpLGMuc2VsZWN0Um93cyh0aGlzLmZpbmFsSW5kZXgsdGhpcy5maW5hbEluZGV4K3RoaXMucm93cy5sZW5ndGgtMSl9LGlvLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9u'@;
put 'KCl7Y29uc3QgYz10aGlzLmluc3RhbmNlLmdldFNldHRpbmdzKCkudW5kbyxsPXR5cGVvZiBjPiJ1Inx8Yzt0aGlzLmluc3RhbmNlLnVuZG9SZWRvfHwodGhpcy5pbnN0YW5jZS51bmRvUmVkbz10aGlzKSxsP3RoaXMuaW5zdGFuY2UudW5kb1JlZG8uZW5hYmxlKCk6dGhpcy5pbnN0YW5jZS51'@;
put 'bmRvUmVkby5kaXNhYmxlKCl9LGlvLnByb3RvdHlwZS5yZWdpc3RlclNob3J0Y3V0cz1mdW5jdGlvbigpe3RoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwieiJdXSxjYWxsYmFj'@;
put 'azooKT0+e3RoaXMudW5kbygpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwieSJdLFsiQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy5yZWRvKCl9fV0se3J1bk9ubHlJZjpoPT4haC5hbHRLZXksZ3JvdXA6InVuZG9SZWRvIn0pfSxpby5wcm90b3R5cGUu'@;
put 'dW5yZWdpc3RlclNob3J0Y3V0cz1mdW5jdGlvbigpe3RoaXMuaW5zdGFuY2UuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoInVuZG9SZWRvIil9O2NvbnN0IHNNPWFvLmdldFNpbmdsZXRvbigpO3NNLmFkZCgiYWZ0ZXJVcGRh'@;
put 'dGVTZXR0aW5ncyIsZnVuY3Rpb24oKXt2YXIgYztudWxsPT09KGM9dGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikpfHx2b2lkIDA9PT1jfHxjLmluaXQoKX0pLHNNLnJlZ2lzdGVyKCJiZWZvcmVVbmRvIiksc00ucmVnaXN0ZXIoImFmdGVyVW5kbyIpLHNNLnJlZ2lzdGVyKCJiZWZvcmVSZWRv'@;
put 'Iiksc00ucmVnaXN0ZXIoImFmdGVyUmVkbyIpLGlvLlBMVUdJTl9LRVk9InVuZG9SZWRvIixpby5TRVRUSU5HX0tFWVM9ITA7Y29uc3Qgb1dlPWlvO2Z1bmN0aW9uIGdVKCl7KGZ1bmN0aW9uIHpOZSgpe2IxKFM5KSxiMShMWSksYjEoQXNlKSxiMShPc2UpLGIxKElZKSxiMShEWSksYjEoUHNl'@;
put 'KSxiMShGc2UpLGIxKEJOZSksYjEoJGcpLGIxKE5zZSl9KSgpLGZ1bmN0aW9uIGlWZSgpe1NmKGs5KSxTZihBdyksU2YoUFkpLFNmKE9ZKSxTZihIWSksU2YoTlkpLFNmKGNtKSxTZihWWSl9KCksZnVuY3Rpb24gZFZlKCl7cDkoSXcpLHA5KGlEKSxwOShqWSkscDkob0QpfSgpLGZ1bmN0aW9u'@;
put 'IGJWZSgpe2cyKGhWZSksZzIoZlZlKSxnMihwVmUpLGcyKG1WZSksZzIoZ1ZlKSxnMihfVmUpLGcyKHZWZSksZzIoeHNlKSxnMih5VmUpfSgpLGZ1bmN0aW9uIHNXZSgpe0pzKE93KSxKcyhQVmUpLEpzKFB3KSxKcyhxVmUpLEpzKGlqZSksSnMoaGFlKSxKcyhJamUpLEpzKCRqZSksSnMobUJl'@;
put 'KSxKcyhOQmUpLEpzKHRZZSksSnMoclllKSxKcyhvWWUpLEpzKHZZZSksSnMoZnplKSxKcyhZemUpLEpzKHF6ZSksSnMoblVlKSxKcyhzVWUpLEpzKG1VZSksSnMoX1VlKSxKcyhrVWUpLEpzKFRVZSksSnMoSFVlKSxKcyh6VWUpLEpzKFdVZSksSnMoVFplKSxKcyhWWmUpLEpzKHpaZSksSnMo'@;
put 'JFplKSxKcyhYWmUpLEpzKFFaZSksSnMob1dlKX0oKX1sZXQgeTI9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVp'@;
put 'bmo9X2koe2ltcG9ydHM6W21vXX0pfXJldHVybiBjfSkoKSxXOT0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10'@;
put 'aGlzLlx1MDI3NWluaj1faSh7cHJvdmlkZXJzOltSRixPRl0saW1wb3J0czpbbW8sQ2MsV2MsczAseTJdfSl9cmV0dXJuIGN9KSgpLGFNPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAy'@;
put 'NzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttb119KX1yZXR1cm4gY30pKCksdWNlPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAy'@;
put 'NzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxzMCxtbyxDY119KX1yZXR1cm4gY30pKCksRzk9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10'@;
put 'aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLENjLHMwLFdjLFc5LGFNLHkyLHVjZV19KX1yZXR1cm4gY30pKCk7dmFyIF9VLHZVLHlVLGJVLHdVLGxjPVIoNjM1NzgpLHZwPVIoNTk0OCk7Y2xhc3MgZGNle2NvbnN0cnVj'@;
put 'dG9yKCl7dGhpcy5xdWV1ZT1bXX1hZGRUb1F1ZXVlKGwpe3RoaXMucXVldWUucHVzaCguLi5sKX19Z1UoKSxmdW5jdGlvbiBhV2UoYyl7Y29uc3QgbD0hKHR5cGVvZiB3aW5kb3c+InUiKSYmd2luZG93LmpRdWVyeTtsJiYobC5mbi5oYW5kc29udGFibGU9ZnVuY3Rpb24oYSl7Y29uc3QgZD10'@;
put 'aGlzLmZpcnN0KCk7bGV0IGYsaD1kLmRhdGEoImhhbmRzb250YWJsZSIpO2lmKCJzdHJpbmciIT10eXBlb2YgYSl7Y29uc3QgcmU9YXx8e307cmV0dXJuIGg/aC51cGRhdGVTZXR0aW5ncyhyZSk6KGg9bmV3IGMuQ29yZShkWzBdLHJlKSxkLmRhdGEoImhhbmRzb250YWJsZSIsaCksaC5pbml0'@;
put 'KCkpLGR9aWYoaCl7aWYoISh0eXBlb2YgaFthXTwidSIpKXRocm93IG5ldyBFcnJvcihgSGFuZHNvbnRhYmxlIGRvIG5vdCBwcm92aWRlIGFjdGlvbjogJHthfWApO2Zvcih2YXIgdj1hcmd1bWVudHMubGVuZ3RoLFQ9bmV3IEFycmF5KHY+MT92LTE6MCksWT0xO1k8djtZKyspVFtZLTFdPWFy'@;
put 'Z3VtZW50c1tZXTtmPWhbYV0uY2FsbChoLC4uLlQpLCJkZXN0cm95Ij09PWEmJmQucmVtb3ZlRGF0YSgpfXJldHVybiBmfSl9KENzKSxDcy5fX0dob3N0VGFibGU9WVksQ3MuX2dldExpc3RlbmVyc0NvdW50ZXI9ZnVuY3Rpb24gUk9lKCl7cmV0dXJuIFRUfSxDcy5fZ2V0UmVnaXN0ZXJlZE1h'@;
put 'cHNDb3VudGVyPWZ1bmN0aW9uIHFGZSgpe3JldHVybiAkan0sQ3MuRXZlbnRNYW5hZ2VyPWpsO2NvbnN0IGxXZT1bZWUsRCxCLFYsayx3LGIsRSxBLG0sUCxJXSxjV2U9W1gsVV07Q3MuaGVscGVyPXt9LENzLmRvbT17fSxSbihsV2UsYz0+e1JuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVz'@;
put 'KGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKENzLmhlbHBlcltsXT1jW2xdKX0pfSksUm4oY1dlLGM9PntSbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57Il8iIT09bC5jaGFyQXQoMCkmJihDcy5kb21bbF09Y1tsXSl9KX0pLENzLmNlbGxUeXBlcz1udWxsIT09KF9VPUNz'@;
put 'LmNlbGxUeXBlcykmJnZvaWQgMCE9PV9VP19VOnt9LFJuKGVOZSgpLGM9PntDcy5jZWxsVHlwZXNbY109Q1koYyl9KSxDcy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlwZT1nMixDcy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9Q1ksQ3MuZWRpdG9ycz1udWxsIT09KHZVPUNzLmVkaXRvcnMpJiZ2'@;
put 'b2lkIDAhPT12VT92VTp7fSxSbihET2UoKSxjPT57Q3MuZWRpdG9yc1tgJHthMChjKX1FZGl0b3JgXT1FVChjKX0pLENzLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9YjEsQ3MuZWRpdG9ycy5nZXRFZGl0b3I9RVQsQ3MucmVuZGVyZXJzPW51bGwhPT0oeVU9Q3MucmVuZGVyZXJzKSYmdm9pZCAw'@;
put 'IT09eVU/eVU6e30sUm4ocU9lKCksYz0+e2NvbnN0IGw9SVQoYyk7ImJhc2UiPT09YyYmKENzLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLENzLnJlbmRlcmVyc1tgJHthMChjKX1SZW5kZXJlcmBdPWx9KSxDcy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1TZixDcy5yZW5kZXJlcnMu'@;
put 'Z2V0UmVuZGVyZXI9SVQsQ3MudmFsaWRhdG9ycz1udWxsIT09KGJVPUNzLnZhbGlkYXRvcnMpJiZ2b2lkIDAhPT1iVT9iVTp7fSxSbihKT2UoKSxjPT57Q3MudmFsaWRhdG9yc1tgJHthMChjKX1WYWxpZGF0b3JgXT1naihjKX0pLENzLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9cDks'@;
put 'Q3MudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9Z2osQ3MucGx1Z2lucz1udWxsIT09KHdVPUNzLnBsdWdpbnMpJiZ2b2lkIDAhPT13VT93VTp7fSxSbihtaigpLGM9PntDcy5wbHVnaW5zW2NdPWd3KGMpfSksQ3MucGx1Z2luc1tgJHthMChzYS5QTFVHSU5fS0VZKX1QbHVnaW5gXT1zYSxDcy5w'@;
put 'bHVnaW5zLnJlZ2lzdGVyUGx1Z2luPUpzLENzLnBsdWdpbnMuZ2V0UGx1Z2luPWd3O2NvbnN0IE1VPUNzLENVPShjLGwsYSk9Pntmb3IobGV0IGQgb2YgYyl7Y29uc3QgaD1sLmZpbmQodj0+di5kYXRhPT09ZC5OQU1FKSxmPWEudmFyc1tkLk5BTUVdO2YmJihkLlRZUEU9WyJEQVRFIiwiREFU'@;
put 'RVRJTUUiLCJUSU1FIl0uaW5jbHVkZXMoZC5ERFRZUEUpPyJudW0iOmYudHlwZSksaCYmZC5ERVNDJiYoaC5kZXNjPWQuREVTQyksaCYmZi5sZW5ndGgmJihoLmxlbmd0aD1wYXJzZUludChmLmxlbmd0aCkpLGgmJmQuQ0xTX1JVTEUmJihoLmNsc1J1bGU9ZC5DTFNfUlVMRSl9cmV0dXJuIGx9'@;
put 'O2Z1bmN0aW9uIFNVKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0oMCx2cC5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IGhjZT17Q0FTRTooYyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQ'@;
put 'Q0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlw'@;
put 'ZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBhPVNVKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4oIWF8fCFpc05hTihkKSkmJmQ+PU51bWJlcihsLnRvU3RyaW5nKCkpfSxNQVhWQUw6KGMsbCk9'@;
put 'Pntjb25zdCBhPVNVKGMpLGQ9cGFyc2VGbG9hdChjKTtyZXR1cm4hKCFhfHwhaXNOYU4oZCkpfHxkPD1OdW1iZXIobC50b1N0cmluZygpKX0sTk9UTlVMTDooYyxsKT0+bnVsbCE9YyYmYy50b1N0cmluZygpLmxlbmd0aD4wfTt2YXIgeFU9Uig3ODM3NSk7Y2xhc3MgcFdlIGV4dGVuZHMgTVUu'@;
put 'ZWRpdG9ycy5BdXRvY29tcGxldGVFZGl0b3J7Y29uc3RydWN0b3IobCl7c3VwZXIobCl9Y3JlYXRlRWxlbWVudHMoKXtzdXBlci5jcmVhdGVFbGVtZW50cygpfW9wZW4obCl7c3VwZXIub3BlbihsKSx0aGlzLmlzQ2VsbE51bWVyaWMoKT90aGlzLmh0Q29udGFpbmVyLmNsYXNzTGlzdC5hZGQo'@;
put 'Im51bWVyaWNMaXN0Ym94Iik6dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJudW1lcmljTGlzdGJveCIpfWlzQ2VsbE51bWVyaWMoKXtyZXR1cm4gdGhpcy5jZWxsUHJvcGVydGllcz8uY2xhc3NOYW1lPy5pbmNsdWRlcygiaHROdW1lcmljIil9fWNsYXNzIG1XZXtjb25zdHJ1'@;
put 'Y3RvcihsLGEsZCxoLGYsdil7dGhpcy5ydWxlcz1bXSx0aGlzLmRxcnVsZXM9W10sdGhpcy5kcWRhdGE9W10sdGhpcy5oaWRkZW5Db2x1bW5zPVtdLHRoaXMucHJpbWFyeUtleXM9W10sdGhpcy5leGVjdXRlSG90VmFsaWRhdG9yPShULFkscmUpPT57Y29uc3QgZmU9ey4uLlQsdmFsaWRhdG9y'@;
put 'OnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBNVShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx7fSksdmlzdWFsUm93OjAsdmlzdWFsQ29sOjAscHJvcDowfTtudWxsPT1ZJiYoWT0iIiksVCYmVC52YWxpZGF0b3ImJiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBULnZhbGlkYXRvcj9ULnZhbGlkYXRvci5jYWxsKGZlLFksX2U9PntyZSYmcmUoX2UpfSk6cmUmJnJlKCExKX0sdGhpcy5yZWdpc3RlckN1c3RvbUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09O'@;
put 'LnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9Q1UoZCx0aGlzLnJ1bGVzLGEpLHRoaXMucnVsZXM9KGM9PntpZigheFVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pcmV0dXJuIGM7Zm9yKGxldCBhIG9mIGMpIm51bWVyaWMiPT09YS50'@;
put 'eXBlJiYoYS5udW1lcmljRm9ybWF0PXtwYXR0ZXJuOiIwLDAiLGN1bHR1cmU6d2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZX0pO3JldHVybiBjfSkodGhpcy5ydWxlcyksdGhpcy5kcXJ1bGVzPWgsdGhpcy5kcWRhdGE9Zix0aGlzLnByaW1hcnlLZXlzPWwuUEsuc3BsaXQoIiAiKSx0aGlzLnVw'@;
put 'ZGF0ZURxRGF0YSgpLHRoaXMuc2V0dXBWYWxpZGF0aW9ucygpfXJlZ2lzdGVyQ3VzdG9tRWRpdG9ycygpe01VLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3IoImF1dG9jb21wbGV0ZS5jdXN0b20iLHBXZSl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhp'@;
put 'cy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNvbHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19'@;
put 'cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxzKGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhp'@;
put 'cy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5maWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5k'@;
put 'KGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTtyZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFS'@;
put 'RFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQRS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBl'@;
put 'JiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhpcy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09M'@;
put 'KXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlzLmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxF'@;
put 'X1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVfVkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1'@;
put 'bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXtsZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5y'@;
put 'dWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1bGVzW2xdLmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFz'@;
put 'RHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMu'@;
put 'cnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9ITEpfSJ0cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZh'@;
put 'dWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihk'@;
put 'LGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgVD1udWxsO3JldHVybiJhdXRvY29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVW'@;
put 'YWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLFk9PntUPVl9KSxUKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IodikuY2FsbCh0aGlzLGQsWT0+e1Q9WX0pLFQ/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMs'@;
put 'bCk9Pntmb3IobGV0IGEgb2YgYylpZihoY2VbYS5SVUxFX1RZUEVdJiYhaGNlW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxF'@;
put 'X1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQg'@;
put 'aCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6'@;
put 'KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCksdm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCx2cC5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4h'@;
put 'MDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJuIGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgi'@;
put 'KSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5ndGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNl'@;
put 'IDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpyZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdl'@;
put 'dEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiBJdztjYXNlIm51bWVyaWMiOnJldHVybiBTVTtjYXNlImRhdGUiOnJldHVybiBpRDtjYXNlInRpbWUiOnJldHVybiBvRDtkZWZhdWx0OnJldHVybihhLGQpPT5kP2QoITApOm51bGx9'@;
put 'fWdldFJ1bGVJbmRleChsKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGw/bDp0aGlzLnJ1bGVzLmZpbmRJbmRleChhPT5hLmRhdGE9PT1sKX1zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpe2lmKCF0aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcpcmV0dXJuO2NvbnN0IGE9dGhpcy5ydWxlc1tsXTtp'@;
put 'Zih0aGlzLnByaW1hcnlLZXlzLmluY2x1ZGVzKGEuZGF0YSkmJihhLmNsc1J1bGU9IlJFQUQiKSwiSElERSI9PT1hLmNsc1J1bGUmJnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKGwpLCJSRUFEIj09PWEuY2xzUnVsZSYmKGEucmVhZE9ubHk9ITApLCJFRElUIj09PWEuY2xzUnVsZSl7YS5yZWFk'@;
put 'T25seT0hMTtjb25zdCBkPXRoaXMuaGlkZGVuQ29sdW1ucy5pbmRleE9mKGwpO3RoaXMuaGlkZGVuQ29sdW1ucy5zcGxpY2UoZCwxKX19fWNvbnN0IG5BPXtudW1lcmljOjAsZGVmYXVsdDoiIn0sZ1dlPShjLGwpPT5jPyJhdXRvY29tcGxldGUiPT09Yz9sJiZsLnNvdXJjZT9sLnNvdXJjZVsw'@;
put 'XTpbXTpuQS5oYXNPd25Qcm9wZXJ0eShjKT9uQVtjXTpuQS5kZWZhdWx0Om5BLmRlZmF1bHQsZmNlPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVzKCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdl'@;
put 'dFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LGtVPWM9PmMuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoYy5nZXRNb250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrYy5nZXREYXRlKCkpLnNsaWNlKC0yKSxFVT1jPT5uZXcgRGF0ZShNYXRoLnJvdW5kKDg2NDAwKihjLTI1NTY5KSoxZTMp'@;
put 'KSx5V2U9KGMsbCk9Pntjb25zdCBhPVtdLGQ9W107cmV0dXJuIGwuZm9yRWFjaChoPT57LTE9PT1jLmluZGV4T2YoaCk/YS5wdXNoKGgpOmQucHVzaChoKX0pLFthLGRdfSxiV2U9KGMsbCxhLGQsaCxmLHYpPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxjbHItaWNvbiBz'@;
put 'aGFwZT0iZXhjbGFtYXRpb24tY2lyY2xlIiBzdGF0dXM9Indhcm5pbmciPjwvY2xyLWljb24+YCxsKSxUVT0oYyxsLGEsZCxoLGYsdik9PihsLmlubmVySFRNTD1mfHwiIixsKSx3V2U9KGMsbCxhLGQsaCxmLHYpPT4obC5pbm5lckhUTUw9YCR7Zj9mLnRvU3RyaW5nKCk6IiJ9IDxzcGFuIGNs'@;
put 'YXNzPSJzcGlubmVyIHNwaW5uZXItc20gdmVydGljYWwtYWxpZ24tbWlkZGxlIj48L3NwYW4+YCxsKSxEVT1jPT4hIS9eLXswLDF9XGQrJC8udGVzdChjKSxwY2U9Yz0+ISEvXlxkK1wuXGQrJC8udGVzdChjKSxBVT1mdW5jdGlvbiBDV2UoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHxk'@;
put 'NyhjKSYmIltvYmplY3QgU3ltYm9sXSI9PWE3KGMpfTt2YXIgU1dlPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLHhXZT0vXlx3KiQvO2Z1bmN0aW9uIExVKGMsbCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGN8fG51bGwhPWwmJiJmdW5jdGlvbiIh'@;
put 'PXR5cGVvZiBsKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZnVuY3Rpb24iKTt2YXIgYT1mdW5jdGlvbigpe3ZhciBkPWFyZ3VtZW50cyxoPWw/bC5hcHBseSh0aGlzLGQpOmRbMF0sZj1hLmNhY2hlO2lmKGYuaGFzKGgpKXJldHVybiBmLmdldChoKTt2YXIgdj1jLmFwcGx5KHRo'@;
put 'aXMsZCk7cmV0dXJuIGEuY2FjaGU9Zi5zZXQoaCx2KXx8Zix2fTtyZXR1cm4gYS5jYWNoZT1uZXcoTFUuQ2FjaGV8fFlGKSxhfUxVLkNhY2hlPVlGO2NvbnN0IERXZT1MVTt2YXIgUldlPS9bXi5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4p'@;
put 'Kj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCQpKS9nLE9XZT0vXFwoXFwpPy9nLFBXZT1mdW5jdGlvbiBMV2UoYyl7dmFyIGw9RFdlKGMsZnVuY3Rpb24oZCl7cmV0dXJuIDUwMD09PWEuc2l6ZSYmYS5jbGVhcigpLGR9KSxhPWwuY2FjaGU7cmV0dXJuIGx9KGZ1bmN0aW9uKGMp'@;
put 'e3ZhciBsPVtdO3JldHVybiA0Nj09PWMuY2hhckNvZGVBdCgwKSYmbC5wdXNoKCIiKSxjLnJlcGxhY2UoUldlLGZ1bmN0aW9uKGEsZCxoLGYpe2wucHVzaChoP2YucmVwbGFjZShPV2UsIiQxIik6ZHx8YSl9KSxsfSk7Y29uc3QgRldlPVBXZTt2YXIgbWNlPUY0P0Y0LnByb3RvdHlwZTp2b2lk'@;
put 'IDAsZ2NlPW1jZT9tY2UudG9TdHJpbmc6dm9pZCAwO2NvbnN0IGpXZT1mdW5jdGlvbiBfY2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBjO2lmKGg3KGMpKXJldHVybiBmdW5jdGlvbiBIV2UoYyxsKXtmb3IodmFyIGE9LTEsZD1udWxsPT1jPzA6Yy5sZW5ndGgsaD1BcnJheShk'@;
put 'KTsrK2E8ZDspaFthXT1sKGNbYV0sYSxjKTtyZXR1cm4gaH0oYyxfY2UpKyIiO2lmKEFVKGMpKXJldHVybiBnY2U/Z2NlLmNhbGwoYyk6IiI7dmFyIGw9YysiIjtyZXR1cm4iMCI9PWwmJjEvYz09LTEvMD8iLTAiOmx9LFVXZT1mdW5jdGlvbiB6V2UoYyxsKXtyZXR1cm4gaDcoYyk/YzpmdW5j'@;
put 'dGlvbiBrV2UoYyxsKXtpZihoNyhjKSlyZXR1cm4hMTt2YXIgYT10eXBlb2YgYztyZXR1cm4hKCJudW1iZXIiIT1hJiYic3ltYm9sIiE9YSYmImJvb2xlYW4iIT1hJiZudWxsIT1jJiYhQVUoYykpfHx4V2UudGVzdChjKXx8IVNXZS50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0o'@;
put 'YyxsKT9bY106RldlKGZ1bmN0aW9uIEJXZShjKXtyZXR1cm4gbnVsbD09Yz8iIjpqV2UoYyl9KGMpKX0sR1dlPWZ1bmN0aW9uIFdXZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fEFVKGMpKXJldHVybiBjO3ZhciBsPWMrIiI7cmV0dXJuIjAiPT1sJiYxL2M9PS0xLzA/Ii0wIjpsfSxMbD1m'@;
put 'dW5jdGlvbiBLV2UoYyxsLGEpe3ZhciBkPW51bGw9PWM/dm9pZCAwOmZ1bmN0aW9uICRXZShjLGwpe2Zvcih2YXIgYT0wLGQ9KGw9VVdlKGwsYykpLmxlbmd0aDtudWxsIT1jJiZhPGQ7KWM9Y1tHV2UobFthKytdKV07cmV0dXJuIGEmJmE9PWQ/Yzp2b2lkIDB9KGMsbCk7cmV0dXJuIHZvaWQg'@;
put 'MD09PWQ/YTpkfTtsZXQgZGg9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yZXNwb25zZT1uZXcgbm4sdGhpcy5jaGFuZ2VkVGFibGU9bmV3IG5uLHRoaXMuZGV0'@;
put 'YWlscz1uZXcgbm4sdGhpcy5kaWZmcz1uZXcgbm4sdGhpcy5jb2x1bW5zPW5ldyBubix0aGlzLnZhbHVlcz1uZXcgbm4sdGhpcy5maWx0ZXI9bmV3IG5uLHRoaXMucXVlcnk9bmV3IG5uLHRoaXMuc3VibWl0dERldGFpbD1uZXcgbm4sdGhpcy5yZW1vdmVRdWVyeT1uZXcgbm4sdGhpcy5zZXRT'@;
put 'dWJtaXQ9bmV3IG5uLHRoaXMuc2V0U3VibWl0TGlzdD1uZXcgbm59Y2FsbFNlcnZpY2UoYSxkLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXt2LmxpYmRzPWY7Y29uc3QgVD17fTtyZXR1cm4gVFtkXT1bYV0se2RhdGE6eWllbGQgdi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCxU'@;
put 'KSxsaWJkczp2LmxpYmRzfX0pKCl9dXBkYXRlVGFibGUoYSxkLGgsZix2KXt2YXIgVD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBZPXtqc2RhdGE6ZH07aWYodil7bGV0IGZlPVQucGFyc2VGb3JtYXRzKHYpO1kuJGpzZGF0YT17Zm9ybWF0czpmZX19cmV0dXJuIFlbaF09W2FdLHlp'@;
put 'ZWxkIFQuc2FzU2VydmljZS5yZXF1ZXN0KGYsWSl9KSgpfWdldEFwcHJvdmFscyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KX0pKCl9c2VuZERldGFpbHMoYSxkLGgp'@;
put 'e3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IHY9T2JqZWN0LmFzc2lnbih7c3ViOiEwfSxhKTtmLnN1Ym1pdHREZXRhaWwubmV4dCh7ZGF0YTpoW2RdLHZpZXdEYXRhOnZ9KX0pKCl9Z2V0U3VibWl0dHMoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe3JldHVy'@;
put 'biB5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXRzdWJtaXRzIixudWxsKX0pKCl9dmlld0xpYnMoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe3JldHVybiBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdsaWJzIixudWxsKX0pKCl9cmVmcmVz'@;
put 'aExpYkluZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtyZXR1cm4gZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9yZWZyZXNobGliaW5mbyIse2xpYjJyZWZyZXNoOlt7bGlicmVmOmF9XX0pfSkoKX12ZXJzaW9uSGlzdG9yeShhKXt2YXIgZD10aGlzO3JldHVybiBX'@;
put 'KGZ1bmN0aW9uKigpe2NvbnN0IGg9e2l3YW50Olt7TElCRFM6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXR2ZXJzaW9uaGlzdG9yeSIsaCl9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgaD17U0FT'@;
put 'Q29udHJvbFRhYmxlOlt7TVBMSUI6YX1dfTtyZXR1cm4geWllbGQgZC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3dGFibGVzIixoKX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tMSUJEUzph'@;
put 'LEZJTFRFUl9SSzpkfV19O3JldHVybiB5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixmKX0pKCl9dmlld0RhdGFTZWFyY2goYSxkPSExLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgWT17U0FTQ29udHJvbFRhYmxlOlt7U0VBUkNI'@;
put 'VFlQRTphLmxlbmd0aD4wP2Q/Ik5VTSI6IkNIQVIiOiJOT05FIixTRUFSQ0hWQUw6YSxMSUJEUzpoLEZJTFRFUl9SSzpmfV19O3JldHVybiB5aWVsZCB2LnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZpZXdkYXRhIixZKX0pKCl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVy'@;
put 'biBXKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2dldHhsbWFwc19pbjpbe1hMTUFQX0lEOmF9XX07cmV0dXJuIHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHhsbWFwcyIsaCl9KSgpfWdldERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7'@;
put 'bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdil9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2'@;
put 'LHt1c2VDb21wdXRlQXBpOiExfSl9KSgpfXJlamVjdGluZyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOiExfSl9KSgpfWFwcHJvdmVUYWJs'@;
put 'ZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1'@;
put 'cm4gdltkXT1bYV0seWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2KX0pKCl9c2V0UXVlcnlWYXJpYWJsZXMoYSxkKXt0aGlzLmNvbHVtbnMubmV4dCh7ZGF0YTp7Y29sczpkfSxsaWJkczphfSl9Z2V0Q2hhbmdlSW5mbyhhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xl'@;
put 'dCBmPXtTQVNDb250cm9sVGFibGU6W3tUQUJMRTphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGNoYW5nZWluZm8iLGYpfSkoKX1nZXRRdWVyeVZhbHVlcyhhLGQsaCxmLHYpe3ZhciBUPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IFk9e2l3'@;
put 'YW50Olt7bGliZHM6ZCxjb2w6YSwuLi5mJiZ7U1RBUlRST1c6Zn0sLi4udiYme1JPV1M6dn19XX07cmV0dXJuIGgubGVuZ3RoPjAmJihZLkZJTFRFUlFVRVJZPWgpLHlpZWxkIFQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y29sdmFscyIsWSkuY2F0Y2goZmU9Pnt0aHJvdyBmZX0p'@;
put 'fSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBmPXtpd2FudDpbe2ZpbHRlcl90YWJsZTphfV0sZmlsdGVycXVlcnk6ZH0sdj15aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3ZhbGlkYXRlZmlsdGVyIixmKTtyZXR1cm4gaC5m'@;
put 'aWx0ZXIubmV4dCh2KSx2fSkoKX1vcGVuVGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0YWJsZV9pZDphfV19O3JldHVybiB5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCl9KSgpfWNoZWNr'@;
put 'T3BlcmF0b3IoYSxkLGgpe2xldCBmO3N3aXRjaChhKXtjYXNlIkJFVFdFRU4iOmQgaW5zdGFuY2VvZiBBcnJheSYmKCIiIT09ZFswXSYmIiIhPT1kWzFdP2Y9ZFswXSsiIEFORCAiK2RbMV06IiIhPT1kWzBdJiYiIj09PWRbMV0/KGRbMV09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pOiIiPT09'@;
put 'ZFswXSYmIiIhPT1kWzFdPyhkWzBdPSIuIixmPWRbMF0rIiBBTkQgIitkWzFdKTooZFswXT0iLiIsZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSkpO2JyZWFrO2Nhc2UiSU4iOmNhc2UiTk9UIElOIjpsZXQgVD1bXTtpZih0eXBlb2YgZDwidSIpZm9yKGxldCBZPTA7WTxkLmxlbmd0aDtZ'@;
put 'KyspITA9PT1kW1ldLmNoZWNrZWQmJigiY2hhciI9PT1oPygic3RyaW5nIj09dHlwZW9mIGRbWV0udmFsJiYoZFtZXS52YWw9ZFtZXS52YWwucmVwbGFjZSgiJyIsIicnIikpLFQucHVzaCgiJyIrZFtZXS52YWwrIiciKSk6KG51bGw9PT1kW1ldLnZhbCYmKGRbWV0udmFsPSIuIiksVC5wdXNo'@;
put 'KGRbWV0udmFsKSkpO2Q9IigiK1QrIikiO2JyZWFrO2Nhc2UiQ09OVEFJTlMiOmE9Ij8iO2JyZWFrO2Nhc2UiTk9UIEVRVUFMIjphPSJuZSJ9cmV0dXJuIm51bSI9PT1oJiZudWxsPT09ZCYmKGQ9Ii4iKSwiUGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1kJiYoZD0iIiksLTEhPT1bIj0iLCI+Iiwi'@;
put 'PCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YoYSkmJiJudW0iPT09aCYmIiI9PT1kJiYoZD0iLiIpLCJCRVRXRUVOIj09PWE/e3ZhbHVlOmYsb3BlcmF0b3I6YX06e3ZhbHVlOmQsb3BlcmF0b3I6YX19d2hlcmVDbGF1c2VDcmVhdG9yKGEsZCxoKXtsZXQgWSxfZSxmPSIiLHJlPSIiLGZlPVtd'@;
put 'O2ZvcihsZXQgV2U9MDtXZTxhLnF1ZXJ5T2JqLmxlbmd0aDtXZSsrKXtsZXQgSmU9IiIsdHQ9YS5xdWVyeU9ialtXZV07Zm9yKGxldCB5dD0wO3l0PHR0LmVsZW1lbnRzLmxlbmd0aDt5dCsrKXtsZXQgTHQsd3Q9dHQuZWxlbWVudHNbeXRdO1k9eXQ8dHQuZWxlbWVudHMubGVuZ3RoLTE/dHQu'@;
put 'Y2xhdXNlTG9naWM6IiI7Zm9yKGxldCBUcj0wO1RyPHd0LnZhbHVlcy5sZW5ndGg7VHIrKyl7aWYoInN0cmluZyI9PXR5cGVvZiB3dC52YWx1ZSYmIm51bWJlciI9PXR5cGVvZiB3dC52YWx1ZXNbVHJdLmZvcm1hdHRlZCl3dC52YWx1ZT09PUpTT04uc3RyaW5naWZ5KHd0LnZhbHVlc1tUcl0u'@;
put 'Zm9ybWF0dGVkKSYmKEx0PXd0LnZhbHVlc1tUcl0udW5mb3JtYXR0ZWQpO2Vsc2V7bGV0IEhpPSJudW1iZXIiIT10eXBlb2Ygd3QudmFsdWVzW1RyXS5mb3JtYXR0ZWQmJm51bGwhPT13dC52YWx1ZXNbVHJdLmZvcm1hdHRlZD93dC52YWx1ZXNbVHJdLmZvcm1hdHRlZC50cmltKCk6d3QudmFs'@;
put 'dWVzW1RyXS5mb3JtYXR0ZWQ7d3QudmFsdWU9PT1IaSYmKEx0PXd0LnZhbHVlc1tUcl0udW5mb3JtYXR0ZWQpfSJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PXd0LnZhbHVlJiYtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZih3dC5vcGVyYXRvcikmJihMdD0iIiksKCJD'@;
put 'T05UQUlOUyI9PT13dC5vcGVyYXRvcnx8IkxJS0UiPT09d3Qub3BlcmF0b3J8fCJCRUdJTlNfV0lUSCI9PT13dC5vcGVyYXRvcikmJihMdD13dC52YWx1ZSl9aWYoTHR8fChMdD13dC52YWx1ZSksd3QudmFsdWUgaW5zdGFuY2VvZiBBcnJheSYmIkJFVFdFRU4iPT09d3Qub3BlcmF0b3Ipe0x0'@;
put 'PVtdLEx0LnB1c2god3QudmFsdWVbMF0pLEx0LnB1c2god3QudmFsdWVbMV0pO2ZvcihsZXQgVHI9MDtUcjx3dC52YWx1ZXMubGVuZ3RoO1RyKyspTHRbMF09PT13dC52YWx1ZXNbVHJdLmZvcm1hdHRlZCYmKEx0WzBdPXd0LnZhbHVlc1tUcl0udW5mb3JtYXR0ZWQpLEx0WzFdPT09d3QudmFs'@;
put 'dWVzW1RyXS5mb3JtYXR0ZWQmJihMdFsxXT13dC52YWx1ZXNbVHJdLnVuZm9ybWF0dGVkKX1pZih3dC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5JiYoIklOIj09PXd0Lm9wZXJhdG9yfHwiTk9UIElOIj09PXd0Lm9wZXJhdG9yKSl7THQ9W10sTHQ9d3QudmFsdWU7Zm9yKGxldCBUcj0wO1RyPHd0'@;
put 'LnZhbHVlcy5sZW5ndGg7VHIrKylMdFtUcl0mJkx0W1RyXS52YWw9PT13dC52YWx1ZXNbVHJdLmZvcm1hdHRlZCYmKEx0W1RyXS52YWw9d3QudmFsdWVzW1RyXS51bmZvcm1hdHRlZCl9bGV0IG9uPXd0LnR5cGU7Y29uc3Qgc249d3QudmFsdWVWYXJpYWJsZTtsZXQgdXIsTW49bnVsbD09PXd0'@;
put 'LnZhcmlhYmxlPyIiOnd0LnZhcmlhYmxlLFZuPW51bGw9PT13dC5vcGVyYXRvcj8iIjp3dC5vcGVyYXRvcjt1cj10aGlzLmNoZWNrT3BlcmF0b3IoVm4sTHQsb24pLnZhbHVlLCJzdHJpbmciPT10eXBlb2YgdXImJiIoIiE9PXVyWzBdJiYodXI9dXIucmVwbGFjZSgiJyIsIicnIikpLFZuPXRo'@;
put 'aXMuY2hlY2tPcGVyYXRvcihWbix1cixvbikub3BlcmF0b3IsImNoYXIiPT09b24mJiJJTiIhPT1WbiYmIk5PVCBJTiIhPT1Wbj8odHlwZW9mIHVyPiJ1IiYmKHVyPSIiKSx1cj1zbj8iICIrdXIrIiAiOiIgJyIrdXIrIicgIixKZT1KZSsiICIrTW4rIiAiK1ZuK3VyK1kpOigibnVtIj09PW9u'@;
put 'JiZ0eXBlb2YgdXI+InUiJiYodXI9Ii4iKSx1cj10eXBlb2YgdXI+InUiPyIiOiIgIit1cisiICIsSmU9SmUrIiAiK01uKyIgIitWbit1citZKX1mZS5wdXNoKEplKX1yZT0iIjtmb3IobGV0IFdlPTA7V2U8ZmUubGVuZ3RoO1dlKyspX2U9V2U8ZmUubGVuZ3RoLTE/ZDoiIixyZT0xPT09ZmUu'@;
put 'bGVuZ3RoP2ZlWzBdOnJlKyIgKCIrZmVbV2VdKyIpICIrX2U7cmV0dXJuIGY9cmUuc3Vic3RyKDEpLnNsaWNlKDAsLTEpLHJlPSJXSEVSRSIrcmUrIjsiLHRoaXMucXVlcnkubmV4dCh7d2hlcmVDbGF1c2U6cmUsc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpyZSxzdHJp'@;
put 'bmc6Zn19Y3JlYXRlRmlsdGVyUXVlcnlUYWJsZShhKXtjb25zdCBkPVtdO3JldHVybiBhLmZpbHRlckdyb3Vwcy5mb3JFYWNoKChoLGYpPT57aC5maWx0ZXJDbGF1c2VzLmZvckVhY2godj0+e2xldCBUPSIiOyJCRVRXRUVOIj09PXYub3BlcmF0b3I/VD1gJHt2LnZhbHVlWzBdfSBBTkQgJHt2'@;
put 'LnZhbHVlWzFdfWA6IklOIj09PXYub3BlcmF0b3J8fCJOT1QgSU4iPT09di5vcGVyYXRvcj8odi52YWx1ZS5mb3JFYWNoKFk9PntpZihZLmNoZWNrZWQpe2NvbnN0IHJlPVkudmFsOyJzdHJpbmciIT10eXBlb2YgcmV8fCgwLHZwLmlzU3BlY2lhbE1pc3NpbmcpKHJlKSYmImNoYXIiIT09di50'@;
put 'eXBlP1QubGVuZ3RoPjA/VCs9YCwke3JlfWA6VD1gKCR7cmV9YDpULmxlbmd0aD4wP1QrPWAsJyR7cmUucmVwbGFjZSgvJy9nLCInJyIpfSdgOlQ9YCgnJHtyZS5yZXBsYWNlKC8nL2csIicnIil9J2B9fSksVC5sZW5ndGg+MCYmKFQrPSIpIikpOiIiPT09di52YWx1ZT9UPSJjaGFyIj09PXYu'@;
put 'dHlwZT8iJyAnIjoiLiI6ImNoYXIiPT09di50eXBlJiYhdi52YWx1ZVZhcmlhYmxlJiYoVD1gJyR7di52YWx1ZS5yZXBsYWNlKC8nL2csIicnIil9J2ApLGQucHVzaCh7R1JPVVBfTE9HSUM6YS5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOmguY2xhdXNlTG9naWN8fCJBTkQiLFNVQkdST1VQ'@;
put 'X0lEOmYsVkFSSUFCTEVfTk06di52YXJpYWJsZSxPUEVSQVRPUl9OTTp2Lm9wZXJhdG9yLFJBV19WQUxVRTpUfHx2LnZhbHVlfSl9KX0pLGR9aW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShhLGQpe2NvbnN0IGg9e3F1ZXJ5T2JqOltdLGNsYXVzZUxvZ2ljOltdLGdyb3VwTG9naWM6TGwo'@;
put 'R24sYSkuZmlsdGVyLnF1ZXJ5WzBdLkdST1VQX0xPR0lDfTtMbChHbixhKS5maWx0ZXIuY2xhdXNlcz10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGgpLExsKEduLGEpLmZpbHRlci5ncm91cExvZ2ljPUxsKEduLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQztsZXQgZj0iIix2'@;
put 'PXtlbGVtZW50czpbXX0sVD0wO0xsKEduLGEpLmZpbHRlci5xdWVyeS5mb3JFYWNoKFk9Pntjb25zdCByZT17fTtmb3IobGV0IGZlPTA7ZmU8ZC5sZW5ndGg7ZmUrKylpZihkW2ZlXS5OQU1FPT09WS5WQVJJQUJMRV9OTSl7aWYoZj1ZLlNVQkdST1VQX0xPR0lDLHJlLmRkdHlwZT1kW2ZlXS5E'@;
put 'RFRZUEUscmUudHlwZT1kW2ZlXS5UWVBFLHJlLm9wZXJhdG9ycz0ibnVtIj09PWRbZmVdLlRZUEU/R24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpHbi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxyZS5sb2dpYz1udWxsLHJlLm9wZXJhdG9yPVkuT1BFUkFUT1JfTk0scmUudmFyaWFibGU9WS5W'@;
put 'QVJJQUJMRV9OTSwiY2hhciI9PT1kW2ZlXS5UWVBFKWlmKCJJTiI9PT1ZLk9QRVJBVE9SX05NfHwiTk9UIElOIj09PVkuT1BFUkFUT1JfTk0pe2NvbnN0IF9lPVtdLFdlPVkuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09V2UubGVuZ3RoP19lLnB1c2goe2NoZWNrZWQ6'@;
put 'ITAsdmFsOldlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOldlLmZvckVhY2goKEplLHR0KT0+e19lLnB1c2goMD09PXR0P3tjaGVja2VkOiEwLHZhbDpKZS5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OnR0PT09V2UubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOkpl'@;
put 'LnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOkplLnJlcGxhY2UoLycnL2csIiciKX0pfSkscmUudmFsdWU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShfZSl9ZWxzZSByZS52YWx1ZT1ZLlJBV19WQUxVRS5zbGljZSgxLC0xKS5yZXBsYWNlKC8n'@;
put 'Jy9nLCInIik7ZWxzZSBpZigiSU4iPT09WS5PUEVSQVRPUl9OTXx8Ik5PVCBJTiI9PT1ZLk9QRVJBVE9SX05NKXtjb25zdCBfZT1bXTtZLlJBV19WQUxVRS5zbGljZSgxLC0xKS5zcGxpdCgiLCIpLmZvckVhY2goKEplLHR0KT0+e19lLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkplfSl9KSxyZS52'@;
put 'YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKF9lKX1lbHNlIGlmKCJCRVRXRUVOIj09PVkuT1BFUkFUT1JfTk0pe2NvbnN0IF9lPVkuUkFXX1ZBTFVFLnNwbGl0KCIgQU5EICIpO3JlLnZhbHVlPV9lfWVsc2UgcmUudmFsdWU9WS5SQVdfVkFMVUU7cmUudmFsdWVzPVtdLFQ9PT1Z'@;
put 'LlNVQkdST1VQX0lEfHwoTGwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSxMbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5jbGF1c2VMb2dpYz1mLExsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5'@;
put 'T2JqW1RdLmludmFsaWRDbGF1c2U9ITEsVCsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHJlKSk7YnJlYWt9fSksdi5lbGVtZW50cy5sZW5ndGg+MCYmKExsKEduLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2godGhp'@;
put 'cy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh2KSksTGwoR24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmpbVF0uY2xhdXNlTG9naWM9ZixMbChHbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtUXS5pbnZhbGlkQ2xhdXNlPSExKSxMbChHbixhKS5maWx0ZXIucXVlcnk9W119cmVtb3Zl'@;
put 'Q2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0pKCl9c3BlY0NvbnZlcnNpb24oYSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEg'@;
put 'aW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFbZl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJl'@;
put 'YWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgpKXtjb25zdCB2PWhbZl0udHlwZSxUPWhbZl0ubGVuZ3RoOyJudW0iPT09dj9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09diYmKGRb'@;
put 'Zl09YCRjaGFyJHtUfS5gKX1yZXR1cm4gZH1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKGZyKHlhKSxmcihjdSksZnIoZDEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1'@;
put 'cm4gY30pKCk7Y29uc3QgYzY9dm9pZCAwLEpXZT1bImVuLUdCIixbWyJhIiwicCJdLFsiYW0iLCJwbSJdLGM2XSxbWyJhbSIsInBtIl0sYzYsYzZdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsiU3Vu'@;
put 'ZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLGM2LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsiSmFu'@;
put 'IiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwdCIsIk9jdCIsIk5vdiIsIkRlYyJdLFsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVt'@;
put 'YmVyIiwiRGVjZW1iZXIiXV0sYzYsW1siQiIsIkEiXSxbIkJDIiwiQUQiXSxbIkJlZm9yZSBDaHJpc3QiLCJBbm5vIERvbWluaSJdXSwxLFs2LDBdLFsiZGQvTU0veSIsImQgTU1NIHkiLCJkIE1NTU0geSIsIkVFRUUsIGQgTU1NTSB5Il0sWyJISDptbSIsIkhIOm1tOnNzIiwiSEg6bW06c3Mg'@;
put 'eiIsIkhIOm1tOnNzIHp6enoiXSxbInsxfSwgezB9IixjNiwiezF9ICdhdCcgezB9IixjNl0sWyIuIiwiLCIsIjsiLCIlIiwiKyIsIi0iLCJFIiwiXHhkNyIsIlx1MjAzMCIsIlx1MjIxZSIsIk5hTiIsIjoiXSxbIiMsIyMwLiMjIyIsIiMsIyMwJSIsIlx4YTQjLCMjMC4wMCIsIiNFMCJdLCJH'@;
put 'QlAiLCJceGEzIiwiQnJpdGlzaCBQb3VuZCIse0pQWTpbIkpQXHhhNSIsIlx4YTUiXSxVU0Q6WyJVUyQiLCIkIl19LCJsdHIiLGZ1bmN0aW9uIFhXZShjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0'@;
put 'aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dLFFXZT1bImlucHV0Il0sZUdlPVsiKiJdLHRHZT0oYyxsKT0+KHsid2lkdGgucHgiOmMsIm1heC1oZWlnaHQucHgiOmx9KTtmdW5jdGlvbiBuR2UoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDcpLHplKDEpLGJlKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1aZSgpO3dlKCkseHIoIiAiLGEubG9hZGluZ01vcmU/IkxvYWRpbmcuLi4iOiJMT0FEIE1PUkUiLCIgIil9fWxldCB2Y2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNkcj1hLHRoaXMuaW5wdXRJZD0iIix0aGlzLnBsYWNlaG9sZGVyPSIiLHRoaXMudmFsdWU9IiIsdGhp'@;
put 'cy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuYXV0b2NvbXBsZXRlPSJvZmYiLHRoaXMudGFiaW5kZXg9IiIsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy5vbklucHV0S2V5ZG93bj1uZXcgSXIsdGhpcy5vbklucHV0Q2hhbmdl'@;
put 'PW5ldyBJcix0aGlzLnZhbHVlQ2hhbmdlPW5ldyBJcix0aGlzLm9uTG9hZGluZ01vcmU9bmV3IElyLHRoaXMuZGF0YWxpc3RPcGVuPSExLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5PTE1MCx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5pbnB1dENsaWVu'@;
put 'dFJlY3Q9e30sdGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmxvYWRpbmdNb3JlPSExfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX0sNTAwKX1vbklucHV0RmlyZWQoYSxkLGgpe3RoaXMu'@;
put 'b3BlbkRhdGFsaXN0KCJjbGljayIhPT1oKSx0aGlzLnVuc2VsZWN0QWxsT3B0aW9ucygpLHRoaXMuZmlsdGVyT3B0aW9uc0xpc3QoKSwoIXRoaXMuZW1pdE9ubHlTZWxlY3RlZHx8ZCkmJih0aGlzLm9uSW5wdXRDaGFuZ2UuZW1pdCh7dGFyZ2V0Ont2YWx1ZTp0aGlzLnZhbHVlfX0pLHRoaXMu'@;
put 'dmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKSl9b25JbnB1dENsaWNrKGEpe3RoaXMub3BlbkRhdGFsaXN0KCl9b3BlbkRhdGFsaXN0KGE9ITApe3RoaXMuZGF0YWxpc3RPcGVuPSEwLGEmJih0aGlzLmFmdGVyT3BlbkxvY2s9ITAsdGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlUaW1lb3V0PXNl'@;
put 'dFRpbWVvdXQoKCk9Pnt0aGlzLmFmdGVyT3BlbkxvY2s9ITF9LHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5KSl9Y2xvc2VEYXRhbGlzdCgpe2NsZWFyVGltZW91dCh0aGlzLmFmdGVyT3BlbkxvY2tEZWxheVRpbWVvdXQpLHRoaXMuYWZ0ZXJPcGVuTG9jaz0hMSx0aGlzLmRhdGFsaXN0T3Blbj0h'@;
put 'MX1yZXNldERhdGFsaXN0RmlsdGVyKCl7dGhpcy5maWx0ZXJPcHRpb25zTGlzdCghMCl9b25JbnB1dEZvY3VzaW4oYSl7dGhpcy5pbnB1dEZvY3VzZWQ9ITB9b25JbnB1dEZvY3Vzb3V0KGEpe3RoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9b25JbnB1dE1v'@;
put 'dXNlZW50ZXIoYSl7dGhpcy5pbnB1dENsaWVudFJlY3Qud2lkdGh8fHRoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfWZpbHRlck9wdGlvbnNMaXN0KGEpe2NvbnN0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb25gKTtmb3Io'@;
put 'bGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7Y29uc3QgZj1kW2hdO2lmKDA9PT10aGlzLnZhbHVlLmxlbmd0aCl7Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1pZihhKXtmLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpO2NvbnRpbnVlfWNvbnN0IHY9Zi5pbm5lclRleHR8'@;
put 'fCIiLFQ9Zi52YWx1ZXx8IiI7KHYrVCk/LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy52YWx1ZS50b0xvd2VyQ2FzZSgpKT9mLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOmYuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIil9fXNldFRvQ2xvc2VEYXRhbGlzdCgpe3RoaXMuZGF0YWxpc3RD'@;
put 'bG9zZVRpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2V8fHRoaXMuYWZ0ZXJPcGVuTG9ja3x8KHRoaXMuY2xvc2VEYXRhbGlzdCgpLHRoaXMudW5zZWxlY3RBbGxPcHRpb25zKCksdGhpcy5yZXNldERhdGFsaXN0RmlsdGVyKCkpfSwxMDApfWNhbGN1bGF0'@;
put 'ZUlucHV0UG9zaXRpb24oKXtjb25zdCBkPXRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2Qud2lkdGg+MCYmZC5oZWlnaHQ+MCYmKHRoaXMuaW5wdXRDbGllbnRSZWN0PXt3aWR0aDpkLndpZHRoLGJvdHRvbTpkLmJvdHRvbX0pLHRoaXMu'@;
put 'aW5uZXJIZWlnaHQ9d2luZG93LmlubmVySGVpZ2h0fW9uRGF0YUxpc3RNb3VzZUVudGVyKGEpe3RoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITB9b25EYXRhTGlzdE1vdXNlTGVhdmUoYSl7dGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVt'@;
put 'ZW50LmZvY3VzKCl9b25EYXRhTGlzdFNjcm9sbChhKXt0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uRGF0YUxpc3RDbGljayhhKXtjb25zdCBkPWEudGFyZ2V0OyJsb2FkLW1vcmUiIT09ZC5kYXRhc2V0Py50eXBlPyJPUFRJT04iIT09ZC50YWdOYW1lfHx0aGlzLnNldE9wdGlvblZhbHVl'@;
put 'KGQuaW5uZXJUZXh0LGQudmFsdWUpOnRoaXMubG9hZE1vcmUoKX1sb2FkTW9yZSgpe3RoaXMub25Mb2FkaW5nTW9yZS5lbWl0KHtsb2FkTW9yZUZpbmlzaGVkOmE9Pnt0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9YX19KSx0aGlzLmxvYWRpbmdNb3JlPSEwfXNldE9w'@;
put 'dGlvblZhbHVlKGEsZCl7KGF8fGQpJiYoZHx8KGQ9YSkpLGQmJih0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSExLHRoaXMudmFsdWU9ZCx0aGlzLm9uSW5wdXRGaXJlZChudWxsLCEwLCJjbGljayIpLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCkpfW9uTWFpbktleWRvd24oYSl7c3dpdGNo'@;
put 'KGEua2V5KXtjYXNlIkFycm93VXAiOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygidXAiKTticmVhaztjYXNlIkFycm93RG93biI6dGhpcy5nZXRPcHRpb25zTW92ZUZvY3VzKCJkb3duIik7YnJlYWs7Y2FzZSJFbnRlciI6dGhpcy5zZWxlY3RGb2N1c2VkT3B0aW9uKCl9fW9uSW5wdXRLZXl1'@;
put 'cChhKXtyZXR1cm4hdGhpcy5kYXRhbGlzdE9wZW58fCgiRXNjYXBlIj09PWEua2V5PyhhLnN0b3BQcm9wYWdhdGlvbigpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksdGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKSwhMSk6dm9pZCAwKX11bnNlbGVjdEFsbE9wdGlvbnMoKXtjb25zdCBh'@;
put 'PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspYVtkXS5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIil9c2VsZWN0Rm9jdXNlZE9wdGlvbigpe2NvbnN0IGE9ZG9jdW1lbnQucXVl'@;
put 'cnlTZWxlY3RvcihgI2RhdGFsaXN0XyR7dGhpcy5pbnB1dElkfSBvcHRpb24uZm9jdXNlZGApO2EmJnRoaXMub25EYXRhTGlzdENsaWNrKHt0YXJnZXQ6YX0pLHRoaXMuc2V0VG9DbG9zZURhdGFsaXN0KCl9Z2V0T3B0aW9uc01vdmVGb2N1cyhhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2Vs'@;
put 'ZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uOm5vdCguaGlkZGVuKWApO2xldCBoPTA7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspe2NvbnN0IHY9ZFtmXTtpZih2LmNsYXNzTGlzdC5jb250YWlucygiZm9jdXNlZCIpKXtoPSJkb3duIj09PWE/ZisxOmYtMSxo'@;
put 'PDAmJihoPWQubGVuZ3RoLTEpLGg+ZC5sZW5ndGgtMSYmKGg9MCksdi5jbGFzc0xpc3QucmVtb3ZlKCJmb2N1c2VkIik7YnJlYWt9fWRbaF0uY2xhc3NMaXN0LmFkZCgiZm9jdXNlZCIpfW9uUmVzaXplKGEpe3RoaXMuY2FsY3VsYXRlSW5wdXRQb3NpdGlvbigpfXN0YXRpYyNlPXRoaXMuXHUw'@;
put 'Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoRmEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJlVvKFFXZSw1KSwyJmQpe2xldCBm'@;
put 'O01pKGY9Q2koKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAsZXYpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJw'@;
put 'bGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVM'@;
put 'b2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3JlOiJvbkxvYWRpbmdNb3JlIn0sbmdDb250ZW50U2VsZWN0b3JzOmVHZSxkZWNs'@;
put 'czo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFs'@;
put 'IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5Il0sWzEsImRhdGFsaXN0IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3Vz'@;
put 'ZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2FkLW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0'@;
put 'IGY9SG4oKTtqaSgpLGdlKDAsImRpdiIsMiksSHQoImtleWRvd24iLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLm9uTWFpbktleWRvd24oVCkpfSksZ2UoMSwiaW5wdXQiLDMsMCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLnZhbHVlLFQp'@;
put 'fHwoaC52YWx1ZT1UKSx4dChUKX0pLEh0KCJjbGljayIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGgub25JbnB1dENsaWNrKFQpKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbklucHV0RmlyZWQoVCkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0'@;
put 'aW9uKFQpe3JldHVybiBTdChmKSx4dChoLm9uSW5wdXRNb3VzZWVudGVyKFQpKX0pKCJmb2N1cyIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGgub25JbnB1dEZvY3VzaW4oVCkpfSkoImZvY3Vzb3V0IixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbklucHV0Rm9jdXNvdXQo'@;
put 'VCkpfSkoImtleXVwIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbklucHV0S2V5dXAoVCkpfSksYmUoKSxKdCgzLCJkaXYiLDQpLGdlKDQsImRpdiIsNSksSHQoImNsaWNrIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbkRhdGFMaXN0Q2xpY2soVCkpfSkoIm1vdXNl'@;
put 'ZW50ZXIiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLm9uRGF0YUxpc3RNb3VzZUVudGVyKFQpKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikseHQoaC5vbkRhdGFMaXN0TW91c2VMZWF2ZShUKSl9KSgic2Nyb2xsIixmdW5jdGlvbihUKXtyZXR1cm4gU3Qo'@;
put 'ZikseHQoaC5vbkRhdGFMaXN0U2Nyb2xsKFQpKX0pLGdlKDUsImRpdiIsbnVsbCwxKSxPcig3KSxiZSgpLGJ0KDgsbkdlLDIsMSwib3B0aW9uIiw2KSxiZSgpKCl9aWYoMiZkKXtjb25zdCBmPVhpKDYpO3dlKCksUGUoImlkIixoLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsaC5wbGFjZWhvbGRl'@;
put 'ciksV3IoIm5nTW9kZWwiLGgudmFsdWUpLFBlKCJkaXNhYmxlZCIsaC5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksd2UoMiksYnIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSx3ZSgpLGJyKCJoaWRkZW4iLCFoLmRhdGFsaXN0T3BlbiksUGUoIm5nU3R5bGUi'@;
put 'LGxmKDEyLHRHZSxoLmlucHV0Q2xpZW50UmVjdC53aWR0aCxoLmlubmVySGVpZ2h0JiZoLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aC5pbm5lckhlaWdodC1oLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAwKSkoImlkIiwiZGF0YWxpc3RfIitoLmlucHV0SWQpLHdlKDQpLFBlKCJuZ0lm'@;
put 'IixmLmNoaWxkcmVuLmxlbmd0aD4wJiZoLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbcWksT3EsbmQscmQsVGwsY2Esb2FdLHN0eWxlczpbIi5pbnB1dC12YWxbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHg7YmFja2dyb3VuZDojZmJmOGY4O2JvcmRlci1ib3R0b206MXB4'@;
put 'IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxNTAwfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZp'@;
put 'eGVkO2JhY2tncm91bmQ6I2ZmZjtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4OjIwMDB9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlv'@;
put 'bntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDojMDAwMDAwMGZ9LmF1dG9jb21wbGV0ZS13cmFwcGVy'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91bmQ6IzAwMDAwMDBmfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXt0'@;
put 'ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSJdfSl9cmV0dXJuIGN9KSgpLHJHZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgYSYmYS5sZW5ndGg8MSlyZXR1cm4gYTtzd2l0Y2goZCl7Y2FzZSJkYXRlIjpyZXR1'@;
put 'cm4gWDEoYSwiRERNTU1ZWVlZOmhoOm1tOnNzIikuZm9ybWF0KCJERC9NTS9ZWVlZIik7Y2FzZSJ0aW1lIjp7aWYoInN0cmluZyIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcigiRXJyb3IgcGFyc2luZyB0aW1lLiBWYWx1ZSBpcyBub3Qgc3RyaW5nLiIpO2NvbnN0IGg9cGFyc2VJbnQoYS5z'@;
put 'cGxpdCgiOiIpWzBdKSxmPXBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSksdj1wYXJzZUludChhLnNwbGl0KCI6IilbMl0pO3JldHVybmAke2g8MTA/IjAiK2g6aH06JHtmPDEwPyIwIitmOmZ9OiR7djwxMD8iMCIrdjp2fWB9fXJldHVybiJzdHJpbmciPT10eXBlb2YgYT9hOmEudG9TdHJpbmco'@;
put 'KX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXBpcGU9RHMoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMH0pfXJldHVybiBjfSkoKTtjb25zdCBpR2U9WyJpbnB1dCJdLG9HZT1b'@;
put 'IioiXTtmdW5jdGlvbiBzR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSx6ZSgxLCIgLyAiKSxnZSgyLCJzcGFuIiw1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLm9uQ2hhbmdlTGFiZWwoInNlY29uZCIpKX0pLHplKDMpLGJlKCksaWkoKX1p'@;
put 'ZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoMiksYnIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJzZWNvbmQiPT09YS5sYWJlbFNlbGVjdGVkKSx3ZSgpLHByKGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBhR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJsYWJlbCIsNCkoMSwic3Bh'@;
put 'biIsNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm9uQ2hhbmdlTGFiZWwoImZpcnN0IikpfSksemUoMiksYmUoKSxidCgzLHNHZSw0LDMsIm5nLWNvbnRhaW5lciIsNiksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTticigic2Vjb25kTGFiZWxBY3RpdmUi'@;
put 'LGEuc2Vjb25kTGFiZWwmJmEuc2Vjb25kTGFiZWwubGVuZ3RoPjApLHdlKCksYnIoInZhbHVlLXR5cGUtc2VsZWN0ZWQiLCJmaXJzdCI9PT1hLmxhYmVsU2VsZWN0ZWQpLHdlKCkscHIoYS5sYWJlbCksd2UoKSxQZSgibmdJZiIsYS5zZWNvbmRMYWJlbCl9fWZ1bmN0aW9uIGxHZShjLGwpe2lm'@;
put 'KDEmYyl7Y29uc3QgYT1IbigpO3JpKDApLGdlKDEsImNsci1kYXRlLWNvbnRhaW5lciIpKDIsImlucHV0Iiw3KSxQYSgzLCJkYXRlVGltZUZvcm1hdHRlciIpLEh0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbkRhdGVJbnB1dEZpcmVkKGgpKX0p'@;
put 'KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5pbnB1dEZvY3VzZWQ9ITApfSkoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmlucHV0Rm9jdXNlZD0hMSl9KSgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKCku'@;
put 'b25Gb2N1c2luSW5wdXQoaCkpfSkoIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbklucHV0TW91c2VPdmVyKCkpfSkoIm1vdXNlb3V0IixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm9uSW5wdXRNb3VzZU91dCgpKX0pLGJlKCkoKSxpaSgpfWlm'@;
put 'KDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJpZCIsYS5pbnB1dElkKSgicGxhY2Vob2xkZXIiLFk1KDMsNSxhLnRlbXAsImRhdGUiKSkoImNsckRhdGUiLGEudmFsdWUpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksaHIoImxpc3QiLCJkYXRhbGlzdF8iK2EuaW5wdXRJZCl9fWZ1bmN0aW9u'@;
put 'IGNHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO3JpKDApLGdlKDEsImlucHV0Iiw4KSxIdCgiaW5wdXQiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLm9uSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuaW5wdXRGb2N1'@;
put 'c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IFN0KGEpLHh0KFplKCkub25JbnB1dE1vdXNlT3ZlcigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbklucHV0TW91c2VPdXQoKSl9KSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQZSgidmFsdWUiLGEudmFsdWUpKCJpZCIsYS5p'@;
put 'bnB1dElkKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGhyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiB1R2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJhcHAtYXV0b2NvbXBsZXRlIiw5LDApLEh0KCJvbklucHV0Q2hhbmdlIixmdW5jdGlv'@;
put 'bihoKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbklucHV0RmlyZWQoaCkpfSkoIm9uTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLmF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgpKX0pLE9yKDMpLGJlKCksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSgp'@;
put 'LFBlKCJpbnB1dElkIixhLmlucHV0SWQpKCJ2YWx1ZSIsKG51bGw9PWEudmFsdWU/bnVsbDphLnZhbHVlLnRvU3RyaW5nKCkpfHwiIikoImVuYWJsZUxvYWRNb3JlIixhLmVuYWJsZUxvYWRNb3JlKSgiZW1pdE9ubHlTZWxlY3RlZCIsYS5lbWl0T25seVNlbGVjdGVkKSgiZGlzYWJsZWQiLGEu'@;
put 'ZGlzYWJsZWQpfX1sZXQgeWNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmlucHV0SWQ9IiIsdGhpcy52YWx1ZT0iIix0aGlzLmRpc2FibGVkPSExLHRoaXMudHlwZT0idGV4dCIsdGhpcy5kaXNhYmxlU29mdHNlbGVjdD0hMSx0aGlzLmVtaXRPbmx5U2VsZWN0ZWQ9ITEsdGhp'@;
put 'cy5lbmFibGVMb2FkTW9yZT0hMSx0aGlzLnZhbHVlQ2hhbmdlPW5ldyBJcix0aGlzLm9uSW5wdXRFdmVudD1uZXcgSXIsdGhpcy5mb2N1c2luSW5wdXQ9bmV3IElyLHRoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZT1uZXcgSXIsdGhpcy5zZWxlY3RlZExhYmVsQ2hhbmdlPW5ldyBJcix0'@;
put 'aGlzLnRlbXA9IiIsdGhpcy5pbnB1dEZvY3VzZWQ9ITEsdGhpcy5sYWJlbFNlbGVjdGVkPSJmaXJzdCJ9bmdPbkNoYW5nZXMoYSl7YS52YWx1ZSYmYS52YWx1ZS5jdXJyZW50VmFsdWUhPT1hLnZhbHVlLnByZXZpb3VzVmFsdWUmJnRoaXMudmFsdWVDaGFuZ2UuZW1pdChhLnZhbHVlLmN1cnJl'@;
put 'bnRWYWx1ZSl9bmdPbkluaXQoKXt9YXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoYSl7dGhpcy5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlLmVtaXQoYSl9b25JbnB1dEZpcmVkKGEpe2NvbnN0IGQ9YS50YXJnZXQudmFsdWU7dGhpcy50ZW1wPWQsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGQpLHRo'@;
put 'aXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25EYXRlSW5wdXRGaXJlZChhKXt0aGlzLnRlbXA9YSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYSksdGhpcy5vbklucHV0RXZlbnQuZW1pdChhKX1vbklucHV0TW91c2VPdXQoKXt0aGlzLmRpc2FibGVTb2Z0c2VsZWN0fHwodGhpcy52YWx1ZT10aGlz'@;
put 'LnRlbXAsdGhpcy50ZW1wPSIiKX1vbklucHV0TW91c2VPdmVyKCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudGVtcD10aGlzLnZhbHVlP3RoaXMudmFsdWU6IiIsdGhpcy52YWx1ZT0iIil9b25Gb2N1c2luSW5wdXQoYSl7dGhpcy5mb2N1c2luSW5wdXQuZW1pdChhKX1vbkNoYW5n'@;
put 'ZUxhYmVsKGEpe3RoaXMubGFiZWxTZWxlY3RlZD1hLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZS5lbWl0KCJmaXJzdCI9PT1hP3RoaXMubGFiZWw6dGhpcy5zZWNvbmRMYWJlbCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9'@;
put 'dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmVW8oaUdlLDUpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saW5wdXRzOntpbnB1dElk'@;
put 'OiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxl'@;
put 'Y3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZlbnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9uQXV0b2Nv'@;
put 'bXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxmZWF0dXJlczpbQmFdLG5nQ29udGVudFNlbGVjdG9yczpvR2UsZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbImlucHV0IiwiIl0sWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiwz'@;
put 'LCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMywiY2xpY2siXSxbNCwibmdJZiJdLFsidHlwZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMi'@;
put 'LCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIs'@;
put 'Im1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIs'@;
put 'ImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoamkoKSxidCgwLGFHZSw0LDYsImxhYmVsIiwxKSxyaSgxLDIpLGJ0KDIsbEdlLDQsOCwibmctY29udGFpbmVyIiwzKSgzLGNHZSwyLDQsIm5nLWNvbnRh'@;
put 'aW5lciIsMykoNCx1R2UsNCw1LCJuZy1jb250YWluZXIiLDMpLGlpKCkpLDImZCYmKFBlKCJuZ0lmIixoLmxhYmVsKSx3ZSgpLFBlKCJuZ1N3aXRjaCIsaC50eXBlKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLHdlKCksUGUo'@;
put 'Im5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbcWksVWQsY2YsWHMsamIsRE4sQU4sdmNlLHJHZV0sc3R5bGVzOlsiLmlucHV0LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5'@;
put 'OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1pbmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01Q'@;
put 'JV17cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb257cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTVweH1jbHItZGF0ZS1jb250YWluZXJb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgICBpbnB1dDo6LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi1yaWdodDoyMHB4O21hcmdpbi10b3A6LTVweH1sYWJlbC5zZWNvbmRMYWJlbEFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XTpub3QoLnZhbHVlLXR5cGUtc2VsZWN0ZWQpe3RleHQtZGVjb3JhdGlvbjpsaW5lLXRocm91Z2g7Y3Vyc29yOnBvaW50ZXI7b3BhY2l0eTouNn0iXX0pfXJldHVybiBjfSkoKSwkOT0oKCk9PntjbGFzcyBje3NldCBuZ1ZhcihhKXt0aGlzLmNvbnRleHQuJGltcGxpY2l0PXRoaXMuY29udGV4'@;
put 'dC5uZ1Zhcj1hLHRoaXMuaGFzVmlld3x8KHRoaXMudmNSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGVSZWYsdGhpcy5jb250ZXh0KSx0aGlzLmhhc1ZpZXc9ITApfWNvbnN0cnVjdG9yKGEsZCl7dGhpcy50ZW1wbGF0ZVJlZj1hLHRoaXMudmNSZWY9ZCx0aGlzLmNvbnRleHQ9'@;
put 'eyRpbXBsaWNpdDpudWxsLG5nVmFyOm51bGx9LHRoaXMuaGFzVmlldz0hMX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KHRsKSxzdChwcykpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJu'@;
put 'Z1ZhciIsIiJdXSxpbnB1dHM6e25nVmFyOiJuZ1ZhciJ9fSl9cmV0dXJuIGN9KSgpLGRHZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhLGQ9ImRheXMiLGg9ITEpe2lmKHZvaWQgMD09PWEmJihhPSIiKSwic3RyaW5nIiE9dHlw'@;
put 'ZW9mIGEmJihhPWEudG9TdHJpbmcoKSksMD09PWEubGVuZ3RoKXtpZigiZGF5cyI9PT1kKXJldHVybiBudWxsO2lmKCJzZWNvbmRzIj09PWQpcmV0dXJuIGg/IjExOjAwOjAwIjpudWxsfWxldCBmPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0U2FzRGF5c1RvSnNEYXRlKGEsZCk7aWYoND09'@;
put 'PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IFQ9YS5zcGxpdCgiOiIpO2Y9bmV3IERhdGUoVFswXSksZi5zZXRIb3VycyhwYXJzZUludChUWzFdKSksZi5zZXRNaW51dGVzKHBhcnNlSW50KFRbMl0pKSxmLnNldFNlY29uZHMocGFyc2VJbnQoVFszXSkpfWVsc2UgaXNOYU4oTnVtYmVyKGEp'@;
put 'KSYmKGY9bmV3IERhdGUoYSkpO2xldCB2PWAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldEhvdXJzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpfToke3RoaXMuaGVscGVy'@;
put 'U2VydmljZS5hZGRMZWFkaW5nWmVybyhmLmdldFNlY29uZHMoKS50b1N0cmluZygpKX1gO3JldHVybiBoP3Y6Zn1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGN1LDE2KSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cGlwZT1Ecyh7bmFtZToi'@;
put 'c2FzVG9Kc0RhdGUiLHR5cGU6YyxwdXJlOiEwfSl9cmV0dXJuIGN9KSgpLGhHZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaGVscGVyU2VydmljZT1hfXRyYW5zZm9ybShhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIiI7bGV0IGQsaCxmO2lmKCJzdHJpbmciPT10eXBl'@;
put 'b2YgYSYmMz09PWEuc3BsaXQoIjoiKS5sZW5ndGgpe2NvbnN0IHY9YS5zcGxpdCgiOiIpO2Q9dlswXSxoPXZbMV0sZj12WzJdfWVsc2UibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlSW50KGEpKSxkPU1hdGguZmxvb3IoYS8zNjAwKSxoPU1hdGguZmxvb3IoYSUzNjAwLzYwKSxmPU1hdGgu'@;
put 'Zmxvb3IoYSUzNjAwJTYwKTtyZXR1cm5gJHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGgpfToke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhmKX1gfXN0YXRpYyNlPXRoaXMuXHUwMjc1'@;
put 'ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoY3UsMTYpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwaXBlPURzKHtuYW1lOiJzZWNvbmRzUGFyc2VyIix0eXBlOmMscHVyZTohMH0pfXJldHVybiBjfSkoKTtjb25zdCBmR2U9KGMsbCxhKT0+KHtxdWVyeTpjLHF1ZXJ5SW5kZXg6'@;
put 'bCxjbGF1c2VJbmRleDphfSkscEdlPShjLGwsYSxkKT0+KHtxdWVyeTpjLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pLG1HZT0oYyxsLGEsZCk9Pih7cmFuZ2U6InN0YXJ0IixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDowLHF1ZXJ5SW5kZXg6bCxjbGF1c2VJbmRl'@;
put 'eDphLGlzRGF0ZVRpbWU6ZH0pLGdHZT0oYyxsLGEsZCk9Pih7cmFuZ2U6ImVuZCIscXVlcnk6YyxxdWVyeVZhbHVlSW5kZXg6MSxxdWVyeUluZGV4OmwsY2xhdXNlSW5kZXg6YSxpc0RhdGVUaW1lOmR9KTtmdW5jdGlvbiBfR2UoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDIyKSx6ZSgx'@;
put 'KSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UGUoInNlbGVjdGVkIixaZSgpLmxvZ2ljT3BlcmF0b3JzWzBdKSx3ZSgpLHhyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHZHZShjLGwpezEmYyYmKGdlKDAsImRpdiIsMjMpLHplKDEsIlxuICAgICAgICAiKSxKdCgyLCJwcm9ncmVzcyIp'@;
put 'LHplKDMsIlxuICAgICAgIiksYmUoKSl9ZnVuY3Rpb24geUdlKGMsbCl7MSZjJiZKdCgwLCJkaXYiKX1mdW5jdGlvbiBiR2UoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDIyKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UGUoInNlbGVjdGVkIixaZSgyKS5sb2dp'@;
put 'Y09wZXJhdG9yc1swXSksd2UoKSx4cigiICIsYSwiICIpfX1mdW5jdGlvbiB3R2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDMyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmFkZEdyb3VwQ2xhdXNlKCkpfSksSnQoMSwiY2xy'@;
put 'LWljb24iLDMzKSxnZSgyLCJzcGFuIiksemUoMywiR3JvdXAiKSxiZSgpKCl9fWZ1bmN0aW9uIE1HZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiwzNCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS5pbmRleDtyZXR1cm4geHQoWmUo'@;
put 'KS5yZW1vdmVHcm91cENsYXVzZShoKSl9KSxiZSgpfX1mdW5jdGlvbiBDR2UoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoKSx4cigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIFNHZShjLGwpe2lmKDEmYyYmKGdl'@;
put 'KDAsIm9wdGlvbiIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLHByKGEpfX1mdW5jdGlvbiB4R2UoYyxsKXsxJmMmJk5sKDApfWZ1bmN0aW9uIGtHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTIpLEh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpLmluZGV4LGY9WmUoKS5pbmRleCx2PVplKCk7cmV0dXJuIHYuY3VycmVudFF1ZXJ5SW5kZXg9aCx4dCh2LmN1cnJlbnRDbGF1c2VJbmRleD1mKX0pLHplKDIsIiBDaG9vc2UgdmFsdWVzICIpLGJlKCksYnQoMyx4R2UsMSwwLCJu'@;
put 'Zy1jb250YWluZXIiLDUzKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleCxmPVplKCkuaW5kZXg7WmUoKTtjb25zdCB2PVhpKDM3KTt3ZSgzKSxQZSgibmdUZW1wbGF0ZU91dGxldCIsdikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Iix2eSgyLGZH'@;
put 'ZSxkLGgsZikpfX1mdW5jdGlvbiBFR2UoYyxsKXsxJmMmJk5sKDApfWZ1bmN0aW9uIFRHZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNTQpLGJ0KDEsRUdlLDEsMCwibmctY29udGFpbmVyIiw1MyksYmUoKSksMiZjKXtjb25zdCBhPVplKCkubmdWYXIsZD1aZSgpLGg9ZC4kaW1wbGljaXQs'@;
put 'Zj1kLmluZGV4LHY9WmUoKS5pbmRleCxUPVplKCksWT1YaSgzMSkscmU9WGkoMzMpO3dlKCksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9ZOnJlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFV4KDIscEdlLGgsZix2LGEpKX19ZnVuY3Rpb24gREdlKGMsbCl7MSZj'@;
put 'JiZObCgwKX1mdW5jdGlvbiBBR2UoYyxsKXsxJmMmJk5sKDApfWZ1bmN0aW9uIExHZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYpLGJ0KDIsREdlLDEsMCwibmctY29udGFpbmVyIiw1MyksYmUoKSxnZSgzLCJkaXYiLDU3KSxidCg0LEFHZSwxLDAsIm5nLWNvbnRh'@;
put 'aW5lciIsNTMpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCkubmdWYXIsZD1aZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LHY9WmUoKS5pbmRleCxUPVplKCksWT1YaSgzMSkscmU9WGkoMzUpO3dlKDIpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZULnVzZVBpY2tlcnM/WTpyZSkoIm5n'@;
put 'VGVtcGxhdGVPdXRsZXRDb250ZXh0IixVeCg0LG1HZSxoLGYsdixhKSksd2UoMiksUGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJlQudXNlUGlja2Vycz9ZOnJlKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFV4KDksZ0dlLGgsZix2LGEpKX19ZnVuY3Rpb24gSUdlKGMsbCl7aWYoMSZjKXtj'@;
put 'b25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLHplKDIsIlZhbHVlIiksYmUoKSxnZSgzLCJpbnB1dCIsNTkpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi52YWx1ZSxoKXx8KGYudmFs'@;
put 'dWU9aCkseHQoaCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgyKS5pbmRleCx2PVplKCkuaW5kZXg7cmV0dXJuIHh0KFplKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxmLHYpKX0pLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMikuJGltcGxpY2l0'@;
put 'O3dlKDMpLFdyKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gUkdlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw0NiksYnQoMSxrR2UsNCw2LCJkaXYiLDQ3KSgyLFRHZSwyLDcsImRpdiIsNDgpKDMsTEdlLDUsMTQsImRpdiIsNDkpKDQsSUdlLDQsMSwiZGl2Iiw1MCksYmUoKSksMiZj'@;
put 'KXtjb25zdCBhPVplKCkuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLHdlKCksUGUoIm5nSWYiLCJCRVRXRUVOIiE9PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJM'@;
put 'SUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksd2UoKSxQZSgibmdJZiIsIkJFVFdFRU4iPT09YS5vcGVyYXRvciksd2UoKSxQZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEu'@;
put 'b3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gT0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwxMCkoMSwiZGl2IiwzNSkoMiwiZGl2IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNyksR3IoInZhbHVlQ2hhbmdlIixmdW5jdGlvbiho'@;
put 'KXtjb25zdCBmPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi52YXJpYWJsZSxoKXx8KGYudmFyaWFibGU9aCkseHQoaCl9KSxIdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLHY9Zi4kaW1wbGljaXQsVD1mLmluZGV4LFk9WmUoKS5pbmRleDtyZXR1cm4geHQo'@;
put 'WmUoKS52YXJpYWJsZUlucHV0Q2hhbmdlKHYudmFyaWFibGUsVCxZLGgpKX0pLGJ0KDQsQ0dlLDIsMSwib3B0aW9uIiwzOCksYmUoKSgpKCksZ2UoNSwiZGl2IiwzOSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLHplKDgsIk9wZXJhdG9yIiksYmUoKSxnZSg5LCJzZWxl'@;
put 'Y3QiLDQwKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYub3BlcmF0b3IsaCl8fChmLm9wZXJhdG9yPWgpLHh0KGgpfSksSHQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKSxmPWguJGltcGxp'@;
put 'Y2l0LHY9aC5pbmRleCxUPVplKCkuaW5kZXg7cmV0dXJuIHh0KFplKCkuc2V0VmFyaWFibGVPcGVyYXRvcih2LGYub3BlcmF0b3IsVCkpfSksYnQoMTAsU0dlLDIsMSwib3B0aW9uIiwzOCksYmUoKSgpKCksYnQoMTEsUkdlLDUsNCwiZGl2Iiw0MSksZ2UoMTIsImRpdiIsNDIpKDEzLCJidXR0'@;
put 'b24iLDQzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS5pbmRleCxmPVplKCkuaW5kZXg7cmV0dXJuIHh0KFplKCkucmVtb3ZlQ2xhdXNlKGgsZikpfSksSnQoMTQsImNsci1pY29uIiw0NCkoMTUsInNwYW4iKSxiZSgpLGdlKDE2LCJidXR0b24iLDQ1KSxIdCgiY2xpY2si'@;
put 'LGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLmluZGV4O3JldHVybiB4dChaZSgpLmFkZENsYXVzZShoKSl9KSxKdCgxNywiY2xyLWljb24iLDMzKSgxOCwic3BhbiIpLGJlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1aZSgpLmluZGV4LGY9WmUo'@;
put 'KTticigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksd2UoMyksUGUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIsInZhbHNfdmFyX2lkIitkKyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLFdyKCJ2YWx1ZSIsYS52YXJpYWJsZSksd2Uo'@;
put 'KSxQZSgibmdGb3JPZiIsZi5jb2xzKSx3ZSg1KSxXcigibmdNb2RlbCIsYS5vcGVyYXRvciksd2UoKSxQZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLHdlKCksUGUoIm5nVmFyIiwiREFURSI9PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksd2Uo'@;
put 'MiksUGUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIFBHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMjQpKDEsImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3Qt'@;
put 'Y29udGFpbmVyIikoNSwibGFiZWwiKSx6ZSg2LCJMb2dpYyIpLGJlKCksZ2UoNywic2VsZWN0IiwyNyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSkuJGltcGxpY2l0O3JldHVybiBxcihmLmNsYXVzZUxvZ2ljLGgpfHwoZi5jbGF1c2VMb2dpYz1oKSx4dCho'@;
put 'KX0pLEh0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLnNldExvZ2ljKCkpfSksYnQoOCxiR2UsMiwyLCJvcHRpb24iLDEzKSxiZSgpKCkoKSxKdCg5LCJiciIpLGJ0KDEwLHdHZSw0LDAsImJ1dHRvbiIsMjgpLGJlKCksZ2UoMTEsImRpdiIsMjkpLGJ0'@;
put 'KDEyLE1HZSwxLDAsImNsci1pY29uIiwzMCkoMTMsT0dlLDE5LDExLCJkaXYiLDMxKSxiZSgpKCksSnQoMTQsImJyIiksYmUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1aZSgpO3dlKCksYnIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLHdlKDYpLFdyKCJuZ01v'@;
put 'ZGVsIixhLmNsYXVzZUxvZ2ljKSxQZSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLHdlKCksUGUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLHdlKDIpLFBlKCJuZ0lmIixkLmlubmVyV2lkdGg+NzY4KSx3ZSgyKSxQZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0'@;
put 'aD4xKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24gRkdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MiksUGEoMiwic2FzVG9Kc0RhdGUiKSxQYSgzLCJzYXNUb0pzRGF0ZSIpLEh0KCJ2YWx1ZUNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLHY9Zi5xdWVyeSxUPWYucXVlcnlWYWx1ZUluZGV4LFk9Zi5xdWVyeUluZGV4LHJlPWYuY2xhdXNlSW5kZXg7cmV0dXJuIHh0KFplKCkuZGF0ZUNoYW5nZShoLHYsWSxyZSxUKSl9KSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCks'@;
put 'ZD1hLnF1ZXJ5LGg9YS5xdWVyeVZhbHVlSW5kZXgsZj1hLnF1ZXJ5SW5kZXgsdj1hLmNsYXVzZUluZGV4O3dlKCksUGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX2RhdGUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD93YygyLDMsZC52YWx1ZVtoXSk6d2Mo'@;
put 'Myw1LGQudmFsdWUpKX19ZnVuY3Rpb24gSEdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2MyksUGEoMiwic2FzVG9Kc0RhdGUiKSxQYSgzLCJzYXNUb0pzRGF0ZSIpLEh0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29u'@;
put 'c3QgZj1aZSgpLHY9Zi5xdWVyeUluZGV4LFQ9Zi5jbGF1c2VJbmRleDtyZXR1cm4geHQoWmUoKS5nZXRRdWVyeURhdGVUaW1lKFQsdikuZGF0ZT1oKX0pKCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLGY9aC5xdWVyeSx2PWgucXVlcnlWYWx1ZUluZGV4LFQ9'@;
put 'aC5xdWVyeUluZGV4LFk9aC5jbGF1c2VJbmRleDtyZXR1cm4geHQoWmUoKS5kYXRlVGltZUNoYW5nZShmLFQsWSx2KSl9KSxiZSgpLGdlKDQsImFwcC1zb2Z0LXNlbGVjdCIsNjQpLFBhKDUsInNhc1RvSnNEYXRlIiksUGEoNiwic2FzVG9Kc0RhdGUiKSxIdCgidmFsdWVDaGFuZ2UiLGZ1bmN0'@;
put 'aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKSx2PWYucXVlcnlJbmRleCxUPWYuY2xhdXNlSW5kZXg7cmV0dXJuIHh0KFplKCkuZ2V0UXVlcnlEYXRlVGltZShULHYpLnRpbWU9aCl9KSgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKSxmPWgucXVlcnksdj1oLnF1'@;
put 'ZXJ5VmFsdWVJbmRleCxUPWgucXVlcnlJbmRleCxZPWguY2xhdXNlSW5kZXg7cmV0dXJuIHh0KFplKCkuZGF0ZVRpbWVDaGFuZ2UoZixULFksdikpfSksYmUoKSxpaSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9'@;
put 'YS5jbGF1c2VJbmRleDt3ZSgpLFBlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/WTUoMiw2LGQudmFsdWVbaF0sInNlY29uZHMiKTpZNSgzLDksZC52YWx1ZSwic2Vjb25kcyIpKSx3ZSgzKSxQZSgiZGlz'@;
put 'YWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfdGltZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1oP3RQKDUsMTIsZC52YWx1ZVtoXSwic2Vjb25kcyIsITApOnRQKDYsMTYsZC52YWx1ZSwic2Vjb25kcyIsITApKX19ZnVuY3Rpb24gTkdlKGMsbCl7aWYoMSZjKXtjb25z'@;
put 'dCBhPUhuKCk7cmkoMCksZ2UoMSwiYXBwLXNvZnQtc2VsZWN0Iiw2NSksUGEoMiwic2Vjb25kc1BhcnNlciIpLFBhKDMsInNlY29uZHNQYXJzZXIiKSxIdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCksdj1mLnF1ZXJ5LFQ9Zi5xdWVyeVZhbHVlSW5kZXgs'@;
put 'WT1mLnF1ZXJ5SW5kZXgscmU9Zi5jbGF1c2VJbmRleDtyZXR1cm4geHQoWmUoKS50aW1lQ2hhbmdlKGgsdixZLHJlLFQpKX0pLGJlKCksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7'@;
put 'd2UoKSxQZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/d2MoMiwzLGQudmFsdWVbaF0pOndjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIFZHZShjLGwpezEmYyYmKHJpKDAsNjApLGJ0KDEsRkdlLDQsNywibmct'@;
put 'Y29udGFpbmVyIiw2MSkoMixIR2UsNywyMCwibmctY29udGFpbmVyIiw2MSkoMyxOR2UsNCw3LCJuZy1jb250YWluZXIiLDYxKSxpaSgpKSwyJmMmJihQZSgibmdTd2l0Y2giLGwucXVlcnkuZGR0eXBlKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCJEQVRFIiksd2UoKSxQZSgibmdTd2l0Y2hD'@;
put 'YXNlIiwiREFURVRJTUUiKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCJUSU1FIikpfWZ1bmN0aW9uIGpHZShjLGwpe2lmKDEmYyYmKGdlKDAsIm9wdGlvbiIsNjgpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtQZSgidmFsdWUiLGEudW5mb3JtYXR0ZWQpLHdlKCkseHIo'@;
put 'IiAiLGEuZm9ybWF0dGVkLnRyaW0oKSwiICIpfX1mdW5jdGlvbiBCR2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLGpHZSwyLDIsIm9wdGlvbiIsNjcpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpLnF1ZXJ5O3dlKCksUGUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gWUdl'@;
put 'KGMsbCl7aWYoMSZjJiYoZ2UoMCwib3B0aW9uIiw2OCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O1BlKCJ2YWx1ZSIsYS5OQU1FKSx3ZSgpLHhyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gekdlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxZR2UsMiwyLCJv'@;
put 'cHRpb24iLDY5KSxpaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1aZSgyKS5xdWVyeTt3ZSgpLFBlKCJuZ0lmIixhLlRZUEU9PT1kLnR5cGUpfX1mdW5jdGlvbiBVR2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLHpHZSwyLDEsIm5nLWNvbnRhaW5lciIsMzgpLGJlKCkp'@;
put 'LDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0Zvck9mIixhLmNvbHMpfX1mdW5jdGlvbiBaR2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJhcHAtc29mdC1zZWxlY3QiLDY2KSxIdCgic2VsZWN0ZWRMYWJlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS5x'@;
put 'dWVyeTtyZXR1cm4geHQoWmUoKS5zZWxlY3RlZExhYmVsQ2hhbmdlKGgsZikpfSksR3IoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLnF1ZXJ5O3JldHVybiBxcihmLnZhbHVlLGgpfHwoZi52YWx1ZT1oKSx4dChoKX0pLEh0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9u'@;
put 'KGgpe2NvbnN0IGY9U3QoYSksdj1mLnF1ZXJ5SW5kZXgsVD1mLmNsYXVzZUluZGV4O3JldHVybiB4dChaZSgpLnNldFZhcmlhYmxlVmFsdWVzKGgudGFyZ2V0LnZhbHVlLHYsVCkpfSkoIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSksdj1mLnF1'@;
put 'ZXJ5LFQ9Zi5xdWVyeUluZGV4LFk9Zi5jbGF1c2VJbmRleDtyZXR1cm4geHQoWmUoKS5vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGgsdi52YXJpYWJsZSxULFkpKX0pLGJ0KDEsQkdlLDIsMSwiZGl2IiwyMCkoMixVR2UsMiwxLCJkaXYiLDIwKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1'@;
put 'ZXJ5LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleDtQZSgic2Vjb25kTGFiZWwiLCJWYXJpYWJsZSIpKCJlbWl0T25seVNlbGVjdGVkIixhLnZhbHVlVmFyaWFibGUpKCJpbnB1dElkIiwidmFsc18iK2QrIl8iK2gpLFdyKCJ2YWx1ZSIsYS52YWx1ZSksUGUoImVuYWJsZUxvYWRNb3Jl'@;
put 'IixhLm5vYnM+YS52YWx1ZXMubGVuZ3RoKSx3ZSgpLFBlKCJuZ0lmIiwhYS52YWx1ZVZhcmlhYmxlKSx3ZSgpLFBlKCJuZ0lmIixhLnZhbHVlVmFyaWFibGUpfX1mdW5jdGlvbiBXR2UoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDY4KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4k'@;
put 'aW1wbGljaXQ7UGUoInZhbHVlIixhLmZvcm1hdHRlZCksd2UoKSx4cigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gR0dlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYXBwLXNvZnQtc2VsZWN0Iiw3MCksR3IoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBm'@;
put 'PVN0KGEpLHY9Zi5xdWVyeSxUPWYucXVlcnlWYWx1ZUluZGV4O3JldHVybiBxcih2LnZhbHVlW1RdLGgpfHwodi52YWx1ZVtUXT1oKSx4dChoKX0pLEh0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKSxmPWgucXVlcnksdj1oLnF1ZXJ5SW5kZXgsVD1oLmNsYXVzZUlu'@;
put 'ZGV4O3JldHVybiB4dChaZSgpLnNldFZhcmlhYmxlVmFsdWVzKGYudmFsdWUsdixUKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKSx2PWYucXVlcnksVD1mLnF1ZXJ5SW5kZXgsWT1mLmNsYXVzZUluZGV4O3JldHVybiB4dChaZSgpLm9u'@;
put 'QXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLFQsWSkpfSksYnQoMSxXR2UsMiwyLCJvcHRpb24iLDY3KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLnJhbmdlLGQ9bC5xdWVyeSxoPWwucXVlcnlWYWx1ZUluZGV4O1BlKCJpbnB1dElkIiwidmFscy0iK2ErIl8iK2wucXVlcnlJ'@;
put 'bmRleCsiXyIrbC5jbGF1c2VJbmRleCksV3IoInZhbHVlIixkLnZhbHVlW2hdKSxQZSgiZW5hYmxlTG9hZE1vcmUiLGQubm9icz5kLnZhbHVlcy5sZW5ndGgpKCJkaXNhYmxlZCIsdm9pZCAwIT09aCYmInN0YXJ0IiE9PWEmJiFkLnZhbHVlWzBdKSx3ZSgpLFBlKCJuZ0Zvck9mIixkLnZhbHVl'@;
put 'cyl9fWZ1bmN0aW9uICRHZShjLGwpezEmYyYmKGdlKDAsImg1Iiw3OCksemUoMSwiIE5vIHZhbHVlcyBhdmFpbGFibGUuICIpLGJlKCkpfWZ1bmN0aW9uIHFHZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1jaGVja2JveC13cmFwcGVyIikoMSwiaW5wdXQiLDgwKSxHcigi'@;
put 'bmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS5pbmRleCx2PVplKDIpLnF1ZXJ5O3JldHVybiBxcih2LnZhbHVlW2ZdLmNoZWNrZWQsaCl8fCh2LnZhbHVlW2ZdLmNoZWNrZWQ9aCkseHQoaCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29u'@;
put 'c3QgZj1aZSgyKSx2PWYucXVlcnlJbmRleCxUPWYuY2xhdXNlSW5kZXg7cmV0dXJuIHh0KFplKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCx2LFQpKX0pLGJlKCksZ2UoMiwibGFiZWwiKSx6ZSgzKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVplKDIpLnF1'@;
put 'ZXJ5O3dlKCksV3IoIm5nTW9kZWwiLGgudmFsdWVbZF0uY2hlY2tlZCksd2UoMikseHIoIiAiLGEuZm9ybWF0dGVkLCIgIil9fWZ1bmN0aW9uIEtHZShjLGwpe2lmKDEmYyYmKGdlKDAsInNlY3Rpb24iLDc5KSgxLCJjbHItY2hlY2tib3gtY29udGFpbmVyIiksYnQoMixxR2UsNCwyLCJjbHIt'@;
put 'Y2hlY2tib3gtd3JhcHBlciIsMzgpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCkucXVlcnk7d2UoMiksUGUoIm5nRm9yT2YiLGEudmFsdWVzKX19ZnVuY3Rpb24gWEdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLW1vZGFsIiw3MSkoMSwiaDMiLDcyKSx6ZSgyLCJTZWxl'@;
put 'Y3QgdmFsdWVzIiksYmUoKSxnZSgzLCJkaXYiLDczKSxidCg0LCRHZSwyLDAsImg1Iiw3NCkoNSxLR2UsMywxLCJzZWN0aW9uIiw3NSksYmUoKSxnZSg2LCJkaXYiLDc2KSg3LCJidXR0b24iLDc3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpO3JldHVybiBoLmN1'@;
put 'cnJlbnRRdWVyeUluZGV4PS0xLHh0KGguY3VycmVudENsYXVzZUluZGV4PS0xKX0pLHplKDgsIiBBcHBseSAiKSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5xdWVyeSxkPWwucXVlcnlJbmRleCxoPWwuY2xhdXNlSW5kZXgsZj1aZSgpO1BlKCJjbHJNb2RhbE9wZW4iLGYuY3VycmVudFF1'@;
put 'ZXJ5SW5kZXg9PT1kJiZmLmN1cnJlbnRDbGF1c2VJbmRleD09PWgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksd2UoNCksUGUoIm5nSWYiLCFmLmlzQXJyKGEudmFsdWUpKSx3ZSgpLFBlKCJuZ0lmIixmLmlzQXJyKGEudmFsdWUpKX19IWZ1bmN0aW9uIGpmZShjLGwsYSl7KGZ1bmN0aW9uIG0x'@;
put 'ZShjLGwsYSl7InN0cmluZyIhPXR5cGVvZiBsJiYoYT1sLGw9Y1tybC5Mb2NhbGVJZF0pLGw9bC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpLEY4W2xdPWMsYSYmKEY4W2xdW3JsLkV4dHJhRGF0YV09YSl9KShjLGwsYSl9KEpXZSk7bGV0IElVPSgoKT0+e2NsYXNzIGN7Y29uc3Ry'@;
put 'dWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuY2RmPWYsdGhpcy5jYWNoaW5nPSEwLHRoaXMucm93c19pbmNyZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFt'@;
put 'dD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEs'@;
put 'dGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRoaXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNlUGlja2Vycz0hMSx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxs'@;
put 'LHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XSxjbGF1c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxm'@;
put 'b3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRo'@;
put 'aXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVyeUluZGV4PS0xLHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4u'@;
put 'd2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZCl7bGV0IGg9dGhpcy5xdWVyeURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQp'@;
put 'O2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9dGhpcy5xdWVyeURhdGVUaW1lW2ZdfXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhp'@;
put 'cy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChhPT57YS5lbGVtZW50cy5mb3JFYWNoKGQ9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhkLmRkdHlwZSkmJmQudmFsdWVWYXJpYWJsZSYmKGQudmFsdWU9IiIsZC52YWx1ZVZhcmlhYmxlPSEx'@;
put 'KX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxs'@;
put 'LHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZyly'@;
put 'ZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlzLnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLExsKEduLGEpLmZp'@;
put 'bHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJihMbChHbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9dGhpcy53aGVyZUNsYXVzZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYoTGwoR24sYSkuZmlsdGVyLmxpYmRz'@;
put 'PXRoaXMubGliZHMpLExsKEduLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBhPSIiOyJob21lIj09PUduLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Hbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9g'@;
put 'dmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Hbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSxMbChHbixhKS5maWx0ZXIuY29scy5sZW5ndGg+MCYmKHRoaXMuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KExsKEduLGEpLmZpbHRlci5jb2xzKSkp'@;
put 'LExsKEduLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoTGwoR24sYSkuZmlsdGVyLnZhbHMpKSksIiIhPT1MbChHbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz1MbChHbixhKS5maWx0ZXIuZ3JvdXBM'@;
put 'b2dpYyx0aGlzLndoZXJlQ2xhdXNlPUxsKEduLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPUxsKEduLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9TGwoR24sYSkuZmlsdGVyLmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5n'@;
put 'cm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgsZix2KXtsZXQgVD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1k'@;
put 'Lm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPVQpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoVCxoLGYpfWRhdGVUaW1lQ2hhbmdlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYo'@;
put 'IiI9PT12LmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47di5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBUPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzBdKSxZPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzFdKSxyZT1wYXJzZUludCh2LnRpbWUuc3BsaXQoIjoi'@;
put 'KVsyXSl8fDA7bGV0IGZlPW5ldyBEYXRlKHYuZGF0ZSksX2U9bmV3IERhdGUoZmUuZ2V0RnVsbFllYXIoKSxmZS5nZXRNb250aCgpLGZlLmdldERhdGUoKSxULFkscmUpLGtlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0SnNEYXRlVG9TYXNEYXRlKF9lLCJzZWNvbmRzIik7IkJFVFdFRU4i'@;
put 'PT09YS5vcGVyYXRvciYmdm9pZCAwIT09ZiYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZVtmXT1rZSksdGhpcy5zZXRWYXJpYWJsZVZhbHVlcyhrZSxkLGgpfXRpbWVDaGFuZ2UoYSxkLGgsZix2KXthPWEudGFyZ2V0LnZhbHVlO2xldCBrZT02MCpwYXJzZUlu'@;
put 'dChhLnNwbGl0KCI6IilbMF0pKjYwKzYwKnBhcnNlSW50KGEuc3BsaXQoIjoiKVsxXSkrKHBhcnNlSW50KGEuc3BsaXQoIjoiKVsyXSl8fDApOyJCRVRXRUVOIj09PWQub3BlcmF0b3ImJnZvaWQgMCE9PXYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVbdl09'@;
put 'a2UpLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMoa2UsaCxmKX1keW5hbWljV2hlcmVDbGF1c2VDcmVhdG9yKGEsZCl7bGV0IGg9W107aWYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMubGVuZ3RoPjEpZm9yKGxldCBmPTA7'@;
put 'Zjx0aGlzLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoO2YrKylmb3IobGV0IHY9MDt2PHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50cy5sZW5ndGg7disrKXtpZihmPT09YSYmdj09PWR8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1l'@;
put 'bnRzW3ZdLnZhcmlhYmxlKXx8W251bGwsdm9pZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IpfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZSkpY29udGludWU7'@;
put 'bGV0IFQ9IiI7Y29uc3QgWT10aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0ub3BlcmF0b3IscmU9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhcmlhYmxlOyJCRVRXRUVOIj09PVk/VD1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNb'@;
put 'dl0udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZVsxXX1gOiJJTiI9PT1ZfHwiTk9UIElOIj09PVk/KHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZS5mb3JFYWNoKGZlPT57aWYoZmUuY2hlY2tlZCl7bGV0IF9lPWZlLnZhbDsic3RyaW5n'@;
put 'IiE9dHlwZW9mIF9lfHwoMCx2cC5pc1NwZWNpYWxNaXNzaW5nKShfZSk/VC5sZW5ndGg+MD9UKz1gLCR7X2V9YDpUPWAoJHtfZX1gOlQubGVuZ3RoPjA/VCs9YCwnJHtfZX0nYDpUPWAoJyR7X2V9J2B9fSksVC5sZW5ndGg+MCYmKFQrPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2ZdLmVsZW1lbnRzW3ZdLnZhbHVlP1Q9ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS50eXBlJiYoVD1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2Jq'@;
put 'W2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpyZSxPUEVSQVRP'@;
put 'Ul9OTTpZLFJBV19WQUxVRTpUfHx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWV9KX1yZXR1cm4gaH1nZXRWYWx1ZXNMb2FkTW9yZShhLGQsaCxmKXt2YXIgdj10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2NvbnN0IFQ9di5saWJkc3x8IiI7dHJ5e2lmKHZvaWQg'@;
put 'MCE9PXYuY29scyl7Zm9yKGxldCB0dD0wO3R0PHYuY29scy5sZW5ndGg7dHQrKyl2LmNvbHNbdHRdLk5BTUU9PT1kJiYodi5zZWxWYXIuaW5kZXg9dHQpO2NvbnN0IFk9di5jb2xzW3Yuc2VsVmFyLmluZGV4XS5ERFRZUEUse3N0YXJ0cm93OnJlLHJvd3M6ZmV9PXYuY2xhdXNlcy5xdWVyeU9i'@;
put 'altmXS5lbGVtZW50c1toXSxfZT12LnJvd3NfaW5jcmVtZW50LGtlPXJlK2ZlO2xldCBXZT1bXTt2LmR5bmFtaWNXaGVyZUNsYXVzZSYmKFdlPXYuZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihmLGgpKTtjb25zdCBKZT1bIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUiXS5pbmNsdWRlcyhZKTt2'@;
put 'LnNhc1N0b3JlU2VydmljZS5nZXRRdWVyeVZhbHVlcyhkLFQsV2Usa2UsX2UpLnRoZW4odHQ9Pntjb25zdCB5dD10dC52YWxzLHtTVEFSVFJPVzp3dCxST1dTOkx0LE5PQlM6b259PXR0Lm1ldGFbMF07aWYodi5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnN0YXJ0cm93PXd0LHYu'@;
put 'Y2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5yb3dzPUx0LHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5ub2JzPW9uLDE9PT15dC5sZW5ndGgmJiIiPT09eXRbMF0uRk9STUFUVEVEJiYiIj09PXl0WzBdLlVORk9STUFUVEVEP2EubG9hZE1vcmVGaW5pc2hlZCghMSk6'@;
put 'KHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMucHVzaCguLi55dC5tYXAoVm49Pntjb25zdCB1cj0ibnVtIj09PXR0LiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgUGk9dXImJigwLHZwLmlzU3BlY2lhbE1pc3NpbmcpKFZuLlVORk9STUFUVEVEKT8iLiIr'@;
put 'Vm4uVU5GT1JNQVRURUQ6Vm4uVU5GT1JNQVRURUQ7cmV0dXJuIHVyJiZudWxsPT09UGkmJihQaT0iLiIpLHtmb3JtYXR0ZWQ6SmU/Vm4uRk9STUFUVEVELnNwbGl0KCIuIilbMF06Vm4uRk9STUFUVEVELHVuZm9ybWF0dGVkOlBpfX0pKSxhLmxvYWRNb3JlRmluaXNoZWQob24tdi5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlcy5sZW5ndGg+MCkpLHYud2hlcmVDbGF1c2VGbigpLHYuc2V0VG9HbG9iYWxzKCksdi53aGVyZUNsYXVzZUxvYWRpbmc9ITEsbnVsbCE9PXYucGVuZGluZ0lOVmFsdWVzU2V0KXtjb25zdHtjbGF1c2VJbmRleDpzbixxdWVyeUluZGV4Ok1u'@;
put 'fT12LnBlbmRpbmdJTlZhbHVlc1NldDt2LnNldElOVmFsdWVzKHNuLE1uKSx2LnBlbmRpbmdJTlZhbHVlc1NldD1udWxsfXYuY2RmLmRldGVjdENoYW5nZXMoKX0pLmNhdGNoKHR0PT57di53aGVyZUNsYXVzZUxvYWRpbmc9ITF9KX19Y2F0Y2goWSl7di5ldmVudFNlcnZpY2UuY2F0Y2hSZXNw'@;
put 'b25zZUVycm9yKCJwdWJsaWMvZ2V0Y29sdmFscyIsWSl9fSkoKX1nZXRWYWx1ZXMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7Zi53aGVyZUNsYXVzZUxvYWRpbmc9ITA7bGV0IHY9IiI7dm9pZCAwIT09Zi5saWJkcyYmKHY9Zi5saWJkcyksZi5jbGVhclZhbHVlcyhk'@;
put 'LGgpLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9W10sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPSIiLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcj0iPSIsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1l'@;
put 'bnRzW2RdLnZhcmlhYmxlPWE7dHJ5e2lmKHZvaWQgMCE9PWYuY29scyl7Zm9yKGxldCBmZT0wO2ZlPGYuY29scy5sZW5ndGg7ZmUrKylmLmNvbHNbZmVdLk5BTUU9PT1hJiYoZi5zZWxWYXIuaW5kZXg9ZmUpO2NvbnN0IFQ9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5ERFRZUEU7Zi5jbGF1c2Vz'@;
put 'LnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLmRkdHlwZT1ULGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS50eXBlPWYuY29sc1tmLnNlbFZhci5pbmRleF0uVFlQRSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0ub3BlcmF0b3JzPSJudW0iPT09Zi5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU/Zi5udW1PcGVyYXRvcnM6Zi5jaGFyT3BlcmF0b3JzO2xldCBZPVtdO2YuZHluYW1pY1doZXJlQ2xhdXNlJiYoWT1mLmR5bmFtaWNXaGVyZUNsYXVzZUNyZWF0b3IoaCxkKSk7Y29uc3QgcmU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5j'@;
put 'bHVkZXMoVCk7Zi5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoYSx2LFksMSxmLmluaXRpYWxfcm93cykudGhlbihmZT0+e2NvbnN0IF9lPWZlLnZhbHMse1NUQVJUUk9XOmtlLFJPV1M6V2UsTk9CUzpKZX09ZmUubWV0YVswXTtpZihmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVu'@;
put 'dHNbZF0uc3RhcnRyb3c9a2UsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnJvd3M9V2UsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm5vYnM9SmUsZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1fZS5tYXAodHQ9Pntjb25zdCB5dD0i'@;
put 'bnVtIj09PWZlLiR2YWxzLnZhcnMuVU5GT1JNQVRURUQudHlwZTtsZXQgTHQ9eXQmJigwLHZwLmlzU3BlY2lhbE1pc3NpbmcpKHR0LlVORk9STUFUVEVEKT8iLiIrdHQuVU5GT1JNQVRURUQ6dHQuVU5GT1JNQVRURUQ7cmV0dXJuIHl0JiZudWxsPT09THQmJihMdD0iLiIpLHtmb3JtYXR0ZWQ6'@;
put 'cmU/dHQuRk9STUFUVEVELnNwbGl0KCIuIilbMF06dHQuRk9STUFUVEVELHVuZm9ybWF0dGVkOkx0fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xvYmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29u'@;
put 'c3R7Y2xhdXNlSW5kZXg6dHQscXVlcnlJbmRleDp5dH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyh0dCx5dCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1mLmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChmZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNh'@;
put 'dGNoKFQpe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLFQpfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hlcmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMo'@;
put 'KX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFy'@;
put 'aWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYo'@;
put 'dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRWYXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNb'@;
put 'YV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5x'@;
put 'dWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1'@;
put 'c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQp'@;
put 'JiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJ'@;
put 'TlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbdl0uZm9ybWF0dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMo'@;
put 'YSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09'@;
put 'aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9PT1kLnZhbHVlJiYiTkUiIT09ZC5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1k'@;
put 'LnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUpcmV0dXJuIGQuaW52YWxpZENsYXVzZT0hMCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCExfWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxl'@;
put 'bmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1y'@;
put 'ZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25l'@;
put 'IG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVzaCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGws'@;
put 'dmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9naWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCks'@;
put 'dGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxp'@;
put 'ZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJ'@;
put 'bkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2UoYSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92'@;
put 'ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdoZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xh'@;
put 'dXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3JlYXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJl'@;
put 'Q2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2EuX3JlbW92ZVFyeT1hLnNhc1N0b3JlU2VydmljZS5yZW1vdmVRdWVyeS5zdWJzY3JpYmUoZD0+e2EuY2xhdXNlcy5xdWVyeU9iai5sZW5n'@;
put 'dGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzLmxlbmd0aD49MSYmKGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg9MSxhLmNsYXVzZXMucXVlcnlPYmpbMF0uZWxlbWVudHM9W10sYS5jbGF1c2VzLnF1'@;
put 'ZXJ5T2JqWzBdLmVsZW1lbnRzLnB1c2goe2xvZ2ljOm51bGwsdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119KSxhLndoZXJlQ2xhdXNlRm4oKSkpfSksYS5jb2x1bW5zU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLmNv'@;
put 'bHVtbnMuc3Vic2NyaWJlKGQ9PntsZXQgaD1kLmRhdGEuY29sczsiaG9tZSIhPT1Hbi5yb290UGFyYW0mJiJlZGl0b3IiIT09R24ucm9vdFBhcmFtfHwoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEduLmVkaXRvci5maWx0ZXIuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSks'@;
put 'InZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLmNvbHMubGVuZ3RoPDEmJihhLmNvbHM9aCxhLmxpYmRzPWQubGliZHMsR24udmlld2VyLmZpbHRlci5jb2xzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaCkpKSxhLmxpYmRzfHwoYS5saWJkcz1kLmxpYmRzKX0pLGEu'@;
put 'dmFsdWVzU3ViPWEuc2FzU3RvcmVTZXJ2aWNlLnZhbHVlcy5zdWJzY3JpYmUoZD0+eygiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9vdFBhcmFtKSYmR24uZWRpdG9yLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxzPWQudmFscyxHbi5lZGl0b3IuZmlsdGVyLnZh'@;
put 'bHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSksInZpZXciPT09R24ucm9vdFBhcmFtJiZHbi52aWV3ZXIuZmlsdGVyLnZhbHMubGVuZ3RoPDEmJihhLnZhbHM9ZC52YWxzLEduLnZpZXdlci5maWx0ZXIudmFscz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGQudmFscykp'@;
put 'KX0pfSkoKX1vbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEsZCxoLGYpe3RoaXMuZ2V0VmFsdWVzTG9hZE1vcmUoYSxkLGgsZil9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5nZXRGcm9tR2xvYmFscygpLHNldFRpbWVvdXQoKCk9PntsZXQgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIj'@;
put 'dmFsc192YXJfaWQwXzAiKTthJiZhLmZvY3VzKCl9LDUwMCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtbnNTdWImJnRoaXMuY29sdW1uc1N1Yi51bnN1YnNjcmliZSgpLHRoaXMudmFsdWVzU3ViJiZ0aGlzLnZhbHVlc1N1Yi51bnN1YnNjcmliZSgpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFj'@;
put 'PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoZGgpLHN0KEdsKSxzdChjdSksc3QoRmEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3Ym94'@;
put 'SWQifSxmZWF0dXJlczpbR2koW3twcm92aWRlOldoLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwiIl0sWyJub3RQaWNrZXJSYW5nZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIiXSxbMSwiY2xyLWZsZXgt'@;
put 'cm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1j'@;
put 'b250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNs'@;
put 'clNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAiLCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJv'@;
put 'Z3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsz'@;
put 'LCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEsInNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2Fi'@;
put 'bGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0'@;
put 'dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBlIiwi'@;
put 'dGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsInZhbHVlQ2hhbmdl'@;
put 'Iiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJu'@;
put 'Z01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4tZ3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJs'@;
put 'ZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29sLW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUt'@;
put 'ZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFscyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVt'@;
put 'cGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwiY29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5n'@;
put 'ZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIs'@;
put 'MywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsidHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwi'@;
put 'VmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVkTGFiZWxDaGFuZ2UiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9h'@;
put 'ZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJ2'@;
put 'YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEsImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJt'@;
put 'b2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEs'@;
put 'Im5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9SG4oKTtnZSgwLCJkaXYiLDQpKDEsImRpdiIsNSko'@;
put 'MiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNiksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLmR5bmFtaWNXaGVyZUNsYXVzZSxUKXx8KGguZHluYW1pY1doZXJlQ2xhdXNlPVQpLHh0KFQpfSksYmUoKSxnZSg0LCJsYWJlbCIsNyks'@;
put 'emUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxiZSgpKCkoKSxnZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC51c2VQaWNrZXJzLFQpfHwoaC51c2VQaWNr'@;
put 'ZXJzPVQpLHh0KFQpfSksSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC51c2VQaWNrZXJzQ2hhbmdlKCkpfSksYmUoKSxnZSg5LCJsYWJlbCIsNyksemUoMTAsIiBVc2UgcGlja2VycyAiKSxiZSgpKCkoKSgpLGdlKDExLCJkaXYiLDEwKSgxMiwiZGl2IiwxMSkoMTMs'@;
put 'ImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksemUoMTUsIkdyb3VwIGxvZ2ljIiksYmUoKSxnZSgxNiwic2VsZWN0IiwxMiksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLmdyb3VwTG9naWMsVCl8fChoLmdyb3VwTG9naWM9VCkseHQo'@;
put 'VCl9KSxIdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5zZXRHcm91cExvZ2ljKGguZ3JvdXBMb2dpYykpfSksYnQoMTcsX0dlLDIsMiwib3B0aW9uIiwxMyksYmUoKSgpKCksZ2UoMTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSx6ZSgyMCwiICAgICAgIiks'@;
put 'YnQoMjEsdkdlLDQsMCwiZGl2IiwxNiksemUoMjIsIlxuXG4gICAgICAiKSxnZSgyMywiY29kZSIsMTcpLHplKDI0KSxiZSgpLHplKDI1LCJcbiAgICAiKSxiZSgpKCkoKSxnZSgyNiwiZGl2IiwxOCkoMjcsImRpdiIsMTkpLGJ0KDI4LHlHZSwxLDAsImRpdiIsMjApKDI5LFBHZSwxNSw4LCJk'@;
put 'aXYiLDIxKSxiZSgpKCksYnQoMzAsVkdlLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxvdSkoMzIsWkdlLDMsNywibmctdGVtcGxhdGUiLG51bGwsMSxvdSkoMzQsR0dlLDIsNSwibmctdGVtcGxhdGUiLG51bGwsMixvdSkoMzYsWEdlLDksNCwibmctdGVtcGxhdGUiLG51bGwsMyxvdSl9MiZk'@;
put 'JiYod2UoMyksV3IoIm5nTW9kZWwiLGguZHluYW1pY1doZXJlQ2xhdXNlKSx3ZSg1KSxXcigibmdNb2RlbCIsaC51c2VQaWNrZXJzKSx3ZSg4KSxQZSgiZGlzYWJsZWQiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5s'@;
put 'ZW5ndGgpPDEpLFdyKCJuZ01vZGVsIixoLmdyb3VwTG9naWMpLHdlKCksUGUoIm5nRm9yT2YiLGgubG9naWNPcGVyYXRvcnMpLHdlKDQpLFBlKCJuZ0lmIixoLndoZXJlQ2xhdXNlTG9hZGluZyksd2UoMykscHIoaC53aGVyZUNsYXVzZSksd2UoMyksYnIoImNsci1jb2wtbWQtMTAiLChudWxs'@;
put 'PT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLHdlKCksUGUoIm5nSWYiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEp'@;
put 'LHdlKCksUGUoIm5nRm9yT2YiLGguY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W0xzLHFpLEsxLFVkLGNmLFphLEJ1LFl1LFhzLHYxLE83LF8xLHo3LFk3LG5kLHJkLFRsLGYxLHRkLGNhLG9hLHljZSwkOSxkR2UsaEdlXSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOy5jb250'@;
put 'ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWxvZ2ljW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YmFja2dyb3VuZDojZTllOWU5O3BhZGRpbmc6MTVw'@;
put 'eH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozMHB4IDAgMjBweCAyMHB4O2JhY2tncm91bmQ6I2ZiZjhmODtkaXNwbGF5OmZsZXg7anVz'@;
put 'dGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246cmVsYXRpdmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4g'@;
put 'LmNsci1yb3dbX25nY29udGVudC0lQ09NUCVde2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5j'@;
put 'bHItcm93W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QoOmxhc3QtY2hpbGQpe3BhZGRpbmctYm90dG9tOjE1cHg7bWFyZ2luLWJvdHRvbToxNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjE2KX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250'@;
put 'YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAucmVtb3ZlLWdyb3VwLWNsYXVzZS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3JpZ2h0OjEwcHg7Y29sb3I6Z3JheX0uY29udGVudFtf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtw'@;
put 'YWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxp'@;
put 'c3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0sIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmRhdGFsaXN0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1'@;
put 'c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLm9wZXJhdG9yLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2VsZWN0LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjQ1cHg7bWFyZ2luLXRvcDowO3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7cGFkZGluZy1ib3R0b206MXB4'@;
put 'fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0l'@;
put 'Q09NUCVde3dpZHRoOjEwMCU7cGFkZGluZzowIDVweDtib3JkZXItYm90dG9tOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zKX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1jaGVja2JveC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'Y2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGVja2JveC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNlY3Rpb25bX25nY29udGVudC0lQ09N'@;
put 'UCVde21heC1oZWlnaHQ6MTIwcHg7b3ZlcmZsb3cteTpzY3JvbGx9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuc2luZ2xlLWZpZWxkLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcntt'@;
put 'YXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQt'@;
put 'dmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVd'@;
put 'ICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0'@;
put 'eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAu'@;
put 'dmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21h'@;
put 'eC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1'@;
put 'c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWJvdHRvbToxMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09N'@;
put 'UCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01Q'@;
put 'JV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNP'@;
put 'TVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDBweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29s'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dp'@;
put 'ZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25n'@;
put 'Y29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAudG9bX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nLXJp'@;
put 'Z2h0OjE3cHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdj'@;
put 'b250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j'@;
put 'b250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnttYXgtd2lkdGg6bm9uZX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRh'@;
put 'aW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1j'@;
put 'b2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdID4gaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'IC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6'@;
put 'MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5'@;
put 'LWNvbnRlbnQ6c3BhY2UtYXJvdW5kO2ZsZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXJ9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LmNsYXVzZS1idXR0b25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOmF1dG99LmludmFsaWQtY2xhdXNlW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItbGVmdDoycHggc29saWQgI2Q5NGIzMX0uY2xhdXNlLXJvd1tfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmNsYXVzZS1yb3dbX25nY29udGVudC0lQ09NUCVdOmFmdGVye3Bvc2l0aW9uOnJlbGF0aXZlO2NvbnRlbnQ6IiI7aGVpZ2h0Oi40MTY2N3JlbTt3aWR0aDouNDE2NjdyZW07dG9wOi4yOTE2N3JlbTtyaWdo'@;
put 'dDouMjVyZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnXFwyMDI2JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzElMkMxJTJDMVolMjIlMkYl'@;
put 'M0UlMEElM0MlMkZzdmclM0UlMEEpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bWFyZ2luOjB9W19uZ2NvbnRlbnQtJUNPTVAlXTpub3QocHJlKSA+IGNvZGVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29u'@;
put 'dGVudC0lQ09NUCVdLCBwcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2ZiZjhmOH1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6OHB4O21hcmdpbjowO2JvcmRlci1yYWRpdXM6MXB4O2Rpc3Bs'@;
put 'YXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OjY2cHg7cG9zaXRpb246cmVsYXRpdmV9cHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRp'@;
put 'b246YWJzb2x1dGU7bGVmdDoxMHB4O3RvcDoxMHB4fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV0gICBjb2RlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpwcmUtd3JhcDt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmlucHV0LXZhbFtfbmdjb250ZW50LSVD'@;
put 'T01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOiNmYmY4Zjg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtib3JkZXI6MDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNiM2IzYjN9aW5wdXRbdHlwZT10aW1lXVtfbmdjb250ZW50LSVDT01QJV06Zm9jdXN7b3V0bGluZTpub25lfS5pbi12YWx1ZXMtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFs'@;
put 'LWZvb3Rlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgI2Q4ZDhkODttYXJnaW4tdG9wOjEwcHh9LnByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnByb2dyZXNzLXN0YXRpY1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVu'@;
put 'dDt3aWR0aDoxMDAlO2hlaWdodDo0cHg7dG9wOjNweH0nXX0pfXJldHVybiBjfSkoKTtjb25zdCBKR2U9WyJzZWFyY2hMaWJUcmVlSW5wdXQiXTtmdW5jdGlvbiBRR2UoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gZSRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7'@;
put 'Z2UoMCwiY2xyLWljb24iLDEyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIseHQoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxiZSgpfX1mdW5jdGlvbiB0JGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgw'@;
put 'LCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0Iiw4LDApLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCkseHQoaCl9KSxIdCgia2V5'@;
put 'dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkubGlicmFyeU9uRmlsdGVyKCkpfSksYmUoKSxidCg0LFFHZSwxLDAsImNsci1pY29uIiw5KSg1LGUkZSwxLDAsImNsci1pY29uIiwxMCksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1YaSgzKSxkPVplKCk7d2UoMiksV3IoIm5nTW9k'@;
put 'ZWwiLGQubGlicmFyaWVzU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG4kZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiByJGUoYyxsKXtpZigxJmMpe2NvbnN0'@;
put 'IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKSxaZSgpO2NvbnN0IGg9WGkoMyksZj1aZSgyKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLHh0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcy5U'@;
put 'QUJMRU5BTUUiKSl9KSxiZSgpfX1mdW5jdGlvbiBpJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiw2KSgxLCJkaXYiLDcpKDIsImlucHV0IiwxOCwyKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgyKS4kaW1w'@;
put 'bGljaXQ7cmV0dXJuIHFyKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGJlKCksYnQo'@;
put 'NCxuJGUsMSwwLCJjbHItaWNvbiIsOSkoNSxyJGUsMSwwLCJjbHItaWNvbiIsMTApLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgyKS4kaW1wbGljaXQ7d2UoMiksV3IoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSks'@;
put 'd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIG8kZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDI2KX1mdW5jdGlvbiBzJGUoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwyNyl9ZnVuY3Rpb24gYSRlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIpLHplKDEsIiBU'@;
put 'byB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGJlKCkpfWZ1bmN0aW9uIGwkZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxidCgxLGEkZSwyLDAsInNwYW4iLDI1KSxiZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'WmUoKS5uZ1Zhcjt3ZSgpLFBlKCJuZ0lmIixhKX19ZnVuY3Rpb24gYyRlKGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIHUkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiwxMiksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpLFplKCk7'@;
put 'Y29uc3QgaD1YaSgzKSxmPVplKDMpLiRpbXBsaWNpdCx2PVplKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLHh0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGJlKCl9fWZ1bmN0aW9uIGQkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dl'@;
put 'KDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDI5LDIpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDMpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJjaFN0cmluZz1oKSx4dChoKX0p'@;
put 'LEh0KCJrZXl1cCIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDMpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMykudHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGJlKCksYnQoNCxjJGUsMSwwLCJjbHItaWNvbiIsOSkoNSx1JGUsMSwwLCJjbHItaWNvbiIsMTApLGJl'@;
put 'KCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgzKS4kaW1wbGljaXQ7d2UoMiksV3IoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGgkZShjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQsZj1aZSgzKS4kaW1wbGljaXQsdj1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuY29sdW1uT25D'@;
put 'bGljayhoLHYsZikpfSksSnQoMiwiY2xyLWljb24iLDMxKSx6ZSgzKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoNik7d2UoKSxicigiY29sdW1uLWFjdGl2ZSIsZC5saWJDb2x1bW5BY3RpdmUoYS5DT0xVUkkpKSx3ZSgyKSx4cigiICIsYS5DT0xOQU1FLCIgIil9'@;
put 'fWZ1bmN0aW9uIGYkZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsZCRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMykoMixoJGUsNCwzLCJjbHItdHJlZS1ub2RlIiw0KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoMikuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLGEuY29sdW1ucyksd2UoKSxQZSgi'@;
put 'bmdGb3JPZiIsYS5jb2x1bW5zKX19ZnVuY3Rpb24gcCRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRvb2x0aXAiKSgxLCJidXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS5uZ1ZhcixmPVplKCkuJGltcGxpY2l0LHY9WmUoMikuJGlt'@;
put 'cGxpY2l0LFQ9WmUoKTtyZXR1cm4geHQoaD8iIjpULnRhYmxlT25DbGljayhmLlRBQkxFVVJJLGYsdikpfSkscmkoMiwyMSksYnQoMyxvJGUsMSwwLCJjbHItaWNvbiIsMjIpKDQscyRlLDEsMCwiY2xyLWljb24iLDIzKSxpaSgpLHplKDUpLGJlKCksYnQoNixsJGUsMiwxLCJjbHItdG9vbHRp'@;
put 'cC1jb250ZW50IiwyNCkoNyxmJGUsMywyLCJuZy1jb250YWluZXIiLDI1KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9WmUoKS4kaW1wbGljaXQsaD1aZSgyKS4kaW1wbGljaXQsZj1aZSgpO3dlKCksYnIoImRjLWxvY2tlZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxp'@;
put 'YlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLHdlKCksUGUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwhMCksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwhMSksd2UoKSx4cigiICIsZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLHdlKDIpLFBl'@;
put 'KCJuZ0lmIixmLmhhc0NvbHVtbnMpfX1mdW5jdGlvbiBtJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiwxNCksSHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLiRpbXBsaWNpdCx2PVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUo'@;
put 'KS50cmVlTm9kZUNsaWNrZWQoaCxmLHYudGFibGVzKSl9KSxHcigiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSkuJGltcGxpY2l0O3JldHVybiBxcihmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSx4dChoKX0pLGJ0KDEscCRlLDgsOSwiY2xyLXRvb2x0'@;
put 'aXAiLDE5KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1aZSgzKTticigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxXcigiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLFBlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSx3'@;
put 'ZSgpLFBlKCJuZ1ZhciIsZCsxPmgubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gZyRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsMTQsMSksSHQoImNsaWNrIixmdW5jdGlvbihoKXtTdChhKTtjb25z'@;
put 'dCBmPVplKCkuJGltcGxpY2l0LHY9WmUoKTtyZXR1cm4geHQodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLEdyKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi5leHBhbmRlZCxoKXx8'@;
put 'KGYuZXhwYW5kZWQ9aCkseHQoaCl9KSxnZSgyLCJwIiwxNSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WGkoMSksZj1aZSgpLiRpbXBsaWNpdCx2PVplKCk7cmV0dXJuIHYubGliPWYuTElCUkFSWUlELHh0KHYubGlicmFyeU9uQ2xpY2sodi5saWJ8fCIiLGYsaCkpfSks'@;
put 'SnQoMywiY2xyLWljb24iLDE2KSx6ZSg0KSxiZSgpLGJ0KDUsaSRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMykoNixtJGUsMiw1LCJjbHItdHJlZS1ub2RlIiwxNyksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7YnIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksV3IoImNs'@;
put 'ckV4cGFuZGVkIixhLmV4cGFuZGVkKSxQZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLHdlKDQpLHhyKCIgIixhLkxJQlJBUllOQU1FLCIgIiksd2UoKSxQZSgibmdJZiIsYS50YWJsZXMpLHdlKCksUGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gXyRl'@;
put 'KGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxnJGUsNyw3LCJjbHItdHJlZS1ub2RlIiwxMyksaWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLCFhLmhpZGRlbiYmYS5pbkZvcmVncm91bmQpfX1mdW5jdGlvbiB2JGUoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDMy'@;
put 'KSgxLCJzcGFuIiwzMyksemUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSgpKX1sZXQgeSRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zZWFyY2hMaWJJbnB1dExpc3Q9bmV3IG4xLHRoaXMudGFi'@;
put 'bGVPbkNsaWNrRW1pdHRlcj1uZXcgSXIsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXI9bmV3IElyLHRoaXMuaGFzQ29sdW1ucz0hMSx0aGlzLnBhZ2luZz0hMCx0aGlzLmxpYnJhcmllc1NlYXJjaD0iIix0aGlzLmxpYj0iIix0aGlzLnRhYmxlPSIiLHRoaXMubGlicmFyaWVzUGFnaW5nPSEx'@;
put 'LHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfW5nT25Jbml0KCl7fW5nQWZ0ZXJWaWV3SW5pdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNlYXJjaExpYklucHV0TGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9KX1uZ09uQ2hhbmdlcyhh'@;
put 'KXthLmxpYnJhcnlMaXN0Py5jdXJyZW50VmFsdWUmJnRoaXMubGlicmFyeUxpc3QmJnRoaXMuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyeUxpc3QpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5'@;
put 'T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFyeUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9dHJlZU5vZGVDbGlja2VkKGEs'@;
put 'ZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7ZC5pbkZvcmVncm91bmQ9ITA7Y29uc3QgZj0oKT0+c2V0VGltZW91dCgoKT0+aC5jb250ZW50Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucGFy'@;
put 'ZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpLmZvY3VzKCkpO2lmKGQudGFibGVzKWQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiEwfSk7ZWxzZXtkLmxvYWRpbmdUYWJs'@;
put 'ZXM9ITAsdGhpcy5saWJyYXJ5T25DbGlja0VtaXR0ZXIuZW1pdCh7bGliaWQ6YSxsaWJyYXJ5OmQsdGFibGVzTG9hZGVkOiExfSk7Y29uc3Qgdj1zZXRJbnRlcnZhbCgoKT0+e2QubG9hZGluZ1RhYmxlc3x8KGYoKSxjbGVhckludGVydmFsKHYpKX0sNTAwKX1kLmV4cGFuZGVkJiZmKCksdGhp'@;
put 'cy5jb2xsYXBzZVRyZWVJdGVtcyh0aGlzLmxpYnJhcnlMaXN0LGQpfXRhYmxlT25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9'@;
put 'IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAs'@;
put 'Zi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGli'@;
put 'VGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8'@;
put 'IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNvbHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3Ro'@;
put 'LTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAs'@;
put 'dGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRo'@;
put 'aXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGN1KSxzdChoMSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJkYy10cmVlIl1dLHZpZXdRdWVyeTpmdW5j'@;
put 'dGlvbihkLGgpe2lmKDEmZCYmVW8oSkdlLDUpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGguc2VhcmNoTGliSW5wdXRMaXN0PWYpfX0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgic2Nyb2xsIixmdW5jdGlvbih2KXtyZXR1cm4gaC5oYW5kbGVTY3JvbGwodil9KX0saW5w'@;
put 'dXRzOntoYXNDb2x1bW5zOiJoYXNDb2x1bW5zIixwYWdpbmc6InBhZ2luZyIsbGlicmFyeUxpc3Q6ImxpYnJhcnlMaXN0In0sb3V0cHV0czp7dGFibGVPbkNsaWNrRW1pdHRlcjoidGFibGVPbkNsaWNrRW1pdHRlciIsbGlicmFyeU9uQ2xpY2tFbWl0dGVyOiJsaWJyYXJ5T25DbGlja0VtaXR0'@;
put 'ZXIifSxmZWF0dXJlczpbQmFdLGRlY2xzOjQsdmFyczozLGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbImxpYlRyZWVOb2RlIiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0s'@;
put 'WyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5n'@;
put 'TW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xy'@;
put 'TG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBl'@;
put 'IiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0Iiwi'@;
put 'YXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzQsIm5nVmFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWzMsIm5nU3dpdGNoIl0sWyJzaGFwZSIsImJvbHQiLDQsIm5nU3dp'@;
put 'dGNoQ2FzZSJdLFsic2hhcGUiLCJ0YWJsZSIsNCwibmdTd2l0Y2hDYXNlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWzQsIm5nSWYiXSxbInNoYXBlIiwiYm9sdCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xyUG9zaXRpb24i'@;
put 'LCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJDb2x1bW5zIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsImNsci10cmVlbm9kZS1saW5r'@;
put 'IiwzLCJjbGljayJdLFsic2hhcGUiLCJvYmplY3RzIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJjbHItdHJlZSIpLGJ0KDEsdCRlLDYsMywiY2xyLXRyZWUtbm9kZSIsMyko'@;
put 'MixfJGUsMiwxLCJuZy1jb250YWluZXIiLDQpLGJlKCksYnQoMyx2JGUsMywwLCJkaXYiLDUpKSwyJmQmJih3ZSgpLFBlKCJuZ0lmIixoLmxpYnJhcnlMaXN0KSx3ZSgpLFBlKCJuZ0Zvck9mIixoLmxpYnJhcnlMaXN0KSx3ZSgpLFBlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZykpfSxkZXBl'@;
put 'bmRlbmNpZXM6W0xzLHFpLFVkLGNmLHJoLHVkLFc0LFphLHIwLFhkLGFkLHQ5LHI5LG45LFRsLGNhLG9hLCQ5XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfWNsci10cmVlW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI6Zm9jdXMgLmNsci10cmVlbm9kZS1saW5re2JhY2tncm91bmQ6I2U4ZThlODtiYWNrZ3JvdW5kOnZhcigtLWNsci10cmVlLWxpbmstaG92ZXItY29sb3IsICNlOGU4ZTgpO3RleHQtZGVjb3JhdGlv'@;
put 'bjpub25lfSJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IGIkZT1bInJlc2l6ZUJveCJdLHckZT1bImRyYWdIYW5kbGVDb3JuZXIiXSxNJGU9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLEMkZT0oYyxsKT0+KHt4OmMseTpsfSk7'@;
put 'ZnVuY3Rpb24gUyRlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIsMzcpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksdDAoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFs'@;
put 'dWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHgkZShjLGwpezEmYyYmKGdlKDAsImRpdiIsMzgpLEp0KDEsImNsci1zcGlubmVyIiwzOSksYmUoKSl9ZnVuY3Rpb24gayRlKGMsbCl7'@;
put 'MSZjJiYoZ2UoMCwicCIsNDApLHplKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxiZSgpKX1mdW5jdGlvbiBFJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkYy10cmVlIiw0MSksSHQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24oaCl7cmV0dXJu'@;
put 'IFN0KGEpLHh0KFplKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLnRhYmxlT25DbGljayhoKSl9KSxiZSgpfTImYyYmUGUoImxpYnJhcnlMaXN0IixaZSgpLmxpYnJhcmllcyl9ZnVuY3Rpb24gVCRl'@;
put 'KGMsbCl7MSZjJiYoZ2UoMCwicCIsNDIpLHplKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksYmUoKSl9ZnVuY3Rpb24gRCRlKGMsbCl7MSZjJiZKdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIEEkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dl'@;
put 'KDAsImEiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLHh0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEp0KDEsImNsci1pY29uIiwyMCksZ2UoMiwic3BhbiIsMTkpLHplKDMsIk1pbmlt'@;
put 'aXplIHZpZXdib3giKSxiZSgpKCl9fWZ1bmN0aW9uIEwkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImEiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiB2LnJlc3RvcmUoZikseHQodi5zdG9wUHJv'@;
put 'cGFnYXRpb24oaCkpfSksSnQoMSwiY2xyLWljb24iLDIxKSxnZSgyLCJzcGFuIiwxOSksemUoMywiUmVzdG9yZSB2aWV3Ym94IiksYmUoKSgpfX1mdW5jdGlvbiBJJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDQzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3Qg'@;
put 'aD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuc2VsZWN0Vmlld2JveChoKSl9KSxnZSgxLCJkaXYiLDQ0KSx6ZSgyKSxidCgzLEQkZSwxLDAsImNsci1zcGlubmVyIiw0NSksYmUoKSxnZSg0LCJkaXYiKSg1LCJhIiw0NiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPVN0'@;
put 'KGEpLiRpbXBsaWNpdCx2PVplKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLHh0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEp0KDYsImNsci1pY29uIiw0NyksZ2UoNywic3BhbiIsMTkpLHplKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksYmUoKSgpLGJ0KDksQSRlLDQsMCwiYSIs'@;
put 'NDgpKDEwLEwkZSw0LDAsImEiLDQ4KSxnZSgxMSwiYSIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiB2LmNsb3NlKGYpLHh0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEp0KDEyLCJjbHItaWNvbiIsNDkpLGdlKDEzLCJz'@;
put 'cGFuIiwxOSksemUoMTQsIkNsb3NlIHZpZXdib3giKSxiZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKCk7YnIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSx3ZSgyKSxaaCgiICMi'@;
put 'LGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLHdlKCksUGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLHdlKDIpLGJyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksd2UoNCksUGUoIm5nSWYiLCFhLm1pbmltaXplZCksd2UoKSxQZSgibmdJZiIsYS5taW5pbWl6ZWQpfX1m'@;
put 'dW5jdGlvbiBSJGUoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoKSx4cigiICIsYSwiICIpfX1mdW5jdGlvbiBPJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJkaXYiLDUzKSgyLCJhcHAt'@;
put 'YXV0b2NvbXBsZXRlIiw1NCwwKSxIdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WGkoMyksdj1aZSgpLm5nVmFyO3JldHVybiB4dChaZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLGJ0KDQsUiRlLDIsMSwib3B0aW9uIiw1'@;
put 'NSksYmUoKSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCkubmdWYXI7d2UoMiksUGUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLHdlKDIpLFBlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlvbiBQJGUoYyxs'@;
put 'KXsxJmMmJkp0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gRiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWljb24iLDYyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMykub25Db2xSZW1vdmUo'@;
put 'aCkpfSksYmUoKX19ZnVuY3Rpb24gSCRlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLHplKDIpLGJ0KDMsUCRlLDEsMCwiY2xyLWljb24iLDU5KSxiZSgpLGJ0KDQsRiRlLDEsMCwiY2xyLWljb24iLDYwKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1a'@;
put 'ZSgyKS5uZ1ZhcixoPVplKCk7VVcoImNvbC1ib3ggY29sdW1uLSIsYSwiIiksYnIoImN1cnNvci1kZWZhdWx0LWkiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSgicHJpbWFyeUtleUhlYWRlclN0eWxlIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksUGUoImNka0RyYWdEYXRhIixhKSgiY2Rr'@;
put 'RHJhZ0Rpc2FibGVkIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSksd2UoMiksdDAoIiAiLGEsIiAiLCJudW0iPT09KG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhv'@;
put 'dFRhYmxlLiRkYXRhZm9ybWF0cy52YXJzW2FdLnR5cGUpPyIobnVtZXJpYykiOiIiLCIgIiksd2UoKSxQZSgibmdJZiIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLHdlKCksUGUoIm5nSWYiLCFkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSl9fWZ1bmN0aW9uIE4kZShjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1IbigpO3JpKDApLGdlKDEsInAiLDEwKSx6ZSgyLCJDb2x1bW5zIFRvIERpc3BsYXkgKGRyYWcgYW5kIHJlLW9yZGVyKSIpLGJlKCksZ2UoMywiZGl2Iiw1NiksSHQoImNka0Ryb3BMaXN0RHJvcHBlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmNvbHVtbnNEcm9w'@;
put 'KGgpKX0pLGJ0KDQsSCRlLDUsMTMsImRpdiIsNTcpLGJlKCksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKS5uZ1Zhcjt3ZSgzKSxQZSgiY2RrRHJvcExpc3REYXRhIixhLmNvbEhlYWRlcnNWaXNpYmxlKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNWaXNpYmxlKX19ZnVuY3Rpb24g'@;
put 'ViRlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw1MSksYnQoMSxPJGUsNSwzLCJuZy1jb250YWluZXIiLDUyKSgyLE4kZSw1LDIsIm5nLWNvbnRhaW5lciIsNTIpLGJlKCkpLDImYyl7Y29uc3QgYT1sLm5nVmFyO3dlKCksUGUoIm5nSWYiLGEuY29sSGVhZGVyc0hpZGRlbiksd2UoKSxQZSgi'@;
put 'bmdJZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9fWZ1bmN0aW9uIGokZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiw4NiksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkuY29sbGFwc2UoaCkp'@;
put 'fSksYmUoKX19ZnVuY3Rpb24gQiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWljb24iLDg3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5leHBhbmQoaCkpfSksYmUoKX19ZnVuY3Rpb24gWSRl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWljb24iLDg4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdCxmPVhpKDE2KTtyZXR1cm4geHQoWmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGJlKCl9fWZ1bmN0aW9uIHokZShjLGwp'@;
put 'ezEmYyYmKGdlKDAsInNwYW4iLDg5KSx6ZSgxLCIgTG9hZGluZy4uLiAiKSxiZSgpKX1mdW5jdGlvbiBVJGUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiw5MCksemUoMSwiTG9hZGluZy4uLiIpLGJlKCkpfWZ1bmN0aW9uIFokZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1p'@;
put 'Y29uIiw5MSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1wbGljaXQsZj1YaSgxNik7cmV0dXJuIFplKCkucmVsb2FkVGFibGVEYXRhKGgpLHh0KGYudmFsdWU9IiIpfSksYmUoKX19ZnVuY3Rpb24gVyRlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2Iiw5NSksSnQo'@;
put 'MSwiY2xyLXNwaW5uZXIiLDM5KSxiZSgpKX1mdW5jdGlvbiBHJGUoYyxsKXtpZigxJmMmJkp0KDAsImhvdC10YWJsZSIsOTYpLDImYyl7Y29uc3QgYT1aZSgpLm5nVmFyLGQ9WmUoKS4kaW1wbGljaXQsaD1aZSgpO1BlKCJob3RJZCIsImhvdEluc3RhbmNlX3ZpZXdib3hfIitkLmlkKSgicmVh'@;
put 'ZE9ubHkiLCEwKSgibW9kaWZ5Q29sV2lkdGgiLGgubWF4V2lkdGhDaGVrZXIpKCJjb3B5UGFzdGUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb3B5UGFzdGUpKCJjb250ZXh0TWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbnRleHRNZW51KSgibXVsdGlDb2x1bW5T'@;
put 'b3J0aW5nIiwhMCkoInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixoLnZpZXdib3hUYWJsZXNb'@;
put 'YV0uaG90VGFibGUuY29sdW1ucykoImZpbHRlcnMiLCEwKSgiZHJvcGRvd25NZW51IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuaGVpZ2h0KSgiY2VsbHMiLGgudmlld2JveFRhYmxlc1thXS5o'@;
put 'b3RUYWJsZS5jZWxscykoIm1heFJvd3MiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5tYXhSb3dzKSgibWFudWFsQ29sdW1uUmVzaXplIiwhMCkoImxpY2Vuc2VLZXkiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5saWNlbnNlS2V5KX19ZnVuY3Rpb24gJCRlKGMsbCl7aWYoMSZj'@;
put 'JiYoZ2UoMCwiZGl2Iiw5MiksYnQoMSxXJGUsMiwwLCJkaXYiLDkzKSgyLEckZSwxLDE3LCJob3QtdGFibGUiLDk0KSxiZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVplKCkuJGltcGxpY2l0O0JkKCJkaXNwbGF5IixkLmNvbGxhcHNlZD8ibm9uZSI6IiIpLHdlKCksUGUoIm5nSWYiLGQu'@;
put 'bG9hZGluZ0RhdGEmJmE8MCksd2UoKSxQZSgibmdJZiIsYT4tMSl9fWZ1bmN0aW9uIHEkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNjMsMSksSHQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5mb2N1'@;
put 'c1ZpZXdib3goaCkpfSkoImNka0RyYWdFbmRlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkudmlld2JveERyYWdFbmRlZChoLGYpKX0pLGdlKDIsImRpdiIsNjQpKDMsInNwYW4iLDY1KSx6ZSg0KSxiZSgpLGdlKDUsImRpdiIsNjYpLGJ0KDYs'@;
put 'aiRlLDEsMCwiY2xyLWljb24iLDY3KSg3LEIkZSwxLDAsImNsci1pY29uIiw2OCksZ2UoOCwiY2xyLWljb24iLDY5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkubWluaW1pemUoaCkpfSksYmUoKSxnZSg5LCJjbHItaWNvbiIs'@;
put 'NzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5jbG9zZShoKSl9KSxiZSgpKCkoKSxnZSgxMCwic3BhbiIsNzEsMiksSHQoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQsdj1YaSgx'@;
put 'KSxUPVhpKDExKTtyZXR1cm4geHQoWmUoKS5kcmFnTW92ZShULHYsZixoKSl9KSxiZSgpLGdlKDEyLCJmb3JtIiw3MikoMTMsImRpdiIsNzMpKDE0LCJkaXYiLDc0KSgxNSwiaW5wdXQiLDc1LDMpLEh0KCJrZXl1cC5lbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdCxm'@;
put 'PVhpKDE2KTtyZXR1cm4geHQoWmUoKS5zZWFyY2hUYWJsZShmLGgpKX0pLGJlKCksYnQoMTcsWSRlLDEsMCwiY2xyLWljb24iLDc2KSgxOCx6JGUsMiwwLCJzcGFuIiw3NyksYmUoKSxnZSgxOSwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDIwLCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDIx'@;
put 'LCJpbnB1dCIsNzgpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5zZWFyY2hOdW1lcmljPWgpLHh0KGgpfSksYmUoKSxnZSgyMiwibGFiZWwiKSx6ZSgyMywiTnVtZXJpYyIpLGJl'@;
put 'KCkoKSgpKCksZ2UoMjQsImRpdiIsNDQpLGJ0KDI1LFUkZSwyLDAsInNwYW4iLDc5KSgyNixaJGUsMSwwLCJjbHItaWNvbiIsODApLGdlKDI3LCJhIiw4MSksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0LGY9WGkoMTYpO3JldHVybiBaZSgpLm9wZW5GaWx0'@;
put 'ZXIoaCkseHQoZi52YWx1ZT0iIil9KSxKdCgyOCwiY2xyLWljb24iLDgyKSxnZSgyOSwic3BhbiIsODMpLHplKDMwKSxiZSgpKCksZ2UoMzEsImNsci1pY29uIiw4NCksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0O3JldHVybiB4dChaZSgpLm9wZW5UYWJs'@;
put 'ZUVkaXQoaCkpfSksYmUoKSgpKCksYnQoMzIsJCRlLDMsNCwiZGl2Iiw4NSksYmUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1aZSgpO0JkKCJkaXNwbGF5IixhLm1pbmltaXplZD8ibm9uZSI6IiIpKCJ3aWR0aCIsYS53aWR0aCwicHgiKSgiaGVpZ2h0IixhLmhlaWdodCwicHgi'@;
put 'KSgicG9pbnRlci1ldmVudHMiLGEuY29sbGFwc2VkPyJub25lIjoiIikoImJveC1zaGFkb3ciLGEuY29sbGFwc2VkPyJub25lIjoiIiksYnIoImZvY3VzZWQiLGEuZm9jdXNlZCksUGUoImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIixsZigzNCxDJGUsYS54LGEueSkpKCJpZCIsInZpZXdib3hf'@;
put 'IithLmlkKSx3ZSg0KSxaaCgiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLHdlKDIpLFBlKCJuZ0lmIiwhYS5jb2xsYXBzZWQpLHdlKCksUGUoIm5nSWYiLGEuY29sbGFwc2VkKSx3ZSgzKSxQZSgiaWQiLCJoYW5kbGVfdmlld2JveF8iK2EuaWQpLHdlKDIpLEJkKCJk'@;
put 'aXNwbGF5IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLHdlKDMpLFBlKCJ0eXBlIixhLnNlYXJjaE51bWVyaWM/Im51bWJlciI6InRleHQiKSx3ZSgyKSxQZSgibmdJZiIsIWEuc2VhcmNoTG9hZGluZyksd2UoKSxQZSgibmdJZiIsYS5zZWFyY2hMb2FkaW5nKSx3ZSgzKSxXcigibmdNb2RlbCIs'@;
put 'YS5zZWFyY2hOdW1lcmljKSx3ZSg0KSxQZSgibmdJZiIsYS5sb2FkaW5nRGF0YSksd2UoKSxQZSgibmdJZiIsIWEubG9hZGluZ0RhdGEpLHdlKDIpLGJyKCJmaWx0ZXItYWN0aXZlIiwiMCIhPT1hLmZpbHRlcl9wayksd2UoMikscHIoYS5maWx0ZXJUZXh0KSx3ZSgpLGJyKCJkaXNhYmxlZCIs'@;
put 'IWQudGFibGVFZGl0RXhpc3RzKGEpKSx3ZSgpLFBlKCJuZ1ZhciIsZC5nZXRWaWV3Ym94VGFibGVJbmRleChhKSl9fWZ1bmN0aW9uIEskZShjLGwpe2lmKDEmYyYmSnQoMCwiYXBwLXF1ZXJ5Iiw5Nyw0KSwyJmMpe2NvbnN0IGE9WmUoKTtQZSgidmlld2JveElkIixudWxsPT1hLmZpbHRlcmlu'@;
put 'Z1ZpZXdib3g/bnVsbDphLmZpbHRlcmluZ1ZpZXdib3guaWQpfX1sZXQgYmNlPSgoKT0+e2NsYXNzIGN7Z2V0IHZpZXdib3hNb2RhbCgpe3JldHVybiB0aGlzLl92aWV3Ym94TW9kYWx9c2V0IHZpZXdib3hNb2RhbChhKXtpZighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3gm'@;
put 'JmEpcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiVmlld2JveGVzIiksdm9pZCB0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KCExKTt0aGlzLl92aWV3Ym94TW9kYWw9YSxhJiZ0aGlzLnVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl9Y29uc3RydWN0b3IoYSxk'@;
put 'LGgsZix2LFQsWSxyZSxmZSxfZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1ULHRoaXMuaGVscGVyU2VydmljZT1ZLHRoaXMu'@;
put 'cm91dGVyPXJlLHRoaXMuYWN0aXZhdGVkUm91dGU9ZmUsdGhpcy5jZGY9X2UsdGhpcy5fdmlld2JveE1vZGFsPSExLHRoaXMudmlld2JveE1vZGFsQ2hhbmdlPW5ldyBJcix0aGlzLmxpYmluZm89bnVsbCx0aGlzLmxpYnJhcmllc0xvYWRpbmc9ITAsdGhpcy52aWV3Ym94ZXM9W10sdGhpcy5k'@;
put 'ZWZhdWx0Q29uZmlnPXtpZDotMSxsaWJyYXJ5OiIiLHRhYmxlOiIiLHdpZHRoOjUwMCxoZWlnaHQ6MzAwLHg6MCx5OjE1MCxjb2x1bW5zOltdfSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBlZC5TQVNqc0NvbmZpZyx0aGlzLmhvdFRhYmxlRGVmYXVsdD17ZGF0YTpbXSxoZWFkZXJQa3M6W10sJGRh'@;
put 'dGFmb3JtYXRzOnt9LGFsbENvbEhlYWRlcnM6W10sY29sSGVhZGVyc0hpZGRlbjpbXSxjb2xIZWFkZXJzVmlzaWJsZTpbXSxjb2xIZWFkZXJzOltdLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntj'@;
put 'b3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGNvbHVtbnM6W10sY29sczpbXSxoZWlnaHQ6IjEwMCUiLHNldHRpbmdzOnt9LGhpZGRlbkNvbHVtbnM6ITAsbWFudWFsQ29sdW1uTW92ZTohMSxhZnRlckdldENvbEhlYWRlcjp2b2lkIDAsbGljZW5zZUtleTp2'@;
put 'b2lkIDAsZHJvcGRvd25NZW51OnZvaWQgMH0sdGhpcy52aWV3Ym94VGFibGVzPVtdLHRoaXMuZmlsdGVyPSExLHRoaXMuZmlsdGVyTG9hZGluZz0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5J'@;
put 'bmZpbml0eT0xLzAsdGhpcy5tYXhWaWV3Ym94ZXM9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdD09PTEvMD82OnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3hfbGltaXR8fDYsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IHFnfW5nT25Jbml0KCl7dGhpcy5z'@;
put 'YXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKGQ9Pnt0aGlzLmxpYnJhcmllcz1kLnNhc2xpYnN9KS5jYXRjaChkPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSkuZmluYWxseSgoKT0+e3RoaXMubGlicmFyaWVzTG9hZGluZz0hMX0pLHRoaXMuX3F1ZXJ5PXRoaXMuc2FzU3Rv'@;
put 'cmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57dGhpcy5jbGF1c2VzPWQub2JqLHRoaXMuZmlsdGVyTGliZHM9ZC5saWJkc30pLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vi'@;
put 'c2NyaWJlKGQ9Pnt0aGlzLmhvdFRhYmxlRGVmYXVsdC5saWNlbnNlS2V5PWR9KTtjb25zdCBhPXRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMudmlld2JveGVzO2EmJighMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/KHNldFRpbWVvdXQoKCk9PnRo'@;
put 'aXMuZXZlbnRTZXJ2aWNlLnNob3dEZW1vTGltaXRNb2RhbCgiTGlua2luZyBWaWV3Ym94ZXMiKSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5hY3RpdmF0ZWRSb3V0ZSxxdWVyeVBhcmFtczp7fX0pKToodGhpcy52aWV3Ym94ZXM9dGhpcy5kZWNvZGVVcmxEYXRh'@;
put 'KGEpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSkpKSx0aGlzLnJlTG9hZFZpZXdib3h0YWJsZXModGhpcy52aWV3Ym94ZXMpfW5nQWZ0ZXJWaWV3SW5pdCgpe31nZXQgdmlld2JveExpbWl0UmVhY2hlZCgpe3JldHVybiB0aGlzLnZpZXdib3hlcy5sZW5n'@;
put 'dGg+PXRoaXMubWF4Vmlld2JveGVzfWNsck1vZGFsT3BlbkNoYW5nZShhKXt0aGlzLnZpZXdib3hNb2RhbENoYW5nZS5lbWl0KGEpfWxpYnJhcnlPbkNsaWNrKGEpe2EudGFibGVzTG9hZGVkfHx0aGlzLmxvYWRUYWJsZXMoYS5saWJyYXJ5LkxJQlJBUllSRUYsYS5saWJyYXJ5KX10YWJsZU9u'@;
put 'Q2xpY2soYSl7dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdEYXRhOiEwLGZp'@;
put 'bHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBmPWAke2EubGli'@;
put 'cmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3RvcmVTZXJ2aWNl'@;
put 'LnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFibGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxkLmxvYWRpbmdU'@;
put 'YWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntsZXQgVD1oLnZp'@;
put 'ZXdib3hUYWJsZXMuZmluZChZPT5ZLnZpZXdib3hJZD09PWQuaWQpO2guc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oWT0+e1QmJihULmhvdFRhYmxlLmRhdGE9WS52aWV3ZGF0YSksZihudWxsKX0pLmNhdGNoKCgpPT57digpfSl9'@;
put 'KX0pKCl9bG9hZERhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2xldCBUPSExLFk9aC52aWV3Ym94VGFibGVzLmZpbmQocmU9PnJlLnZpZXdib3hJZD09PWQuaWQpO1kmJigiMCI9PT1kLmZpbHRlcl9wa3x8IWQuZmls'@;
put 'dGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4ocmU9PntZP1Q9ITA6WT17dmlld2JveElkOmQuaWQsdmlld2JveExpYkRhdGFzZXQ6YSxob3RUYWJsZTpaayhoLmhvdFRhYmxlRGVmYXVsdCl9LFkuaG90VGFi'@;
put 'bGUuZGF0YT1yZS52aWV3ZGF0YSxZLmhvdFRhYmxlLiRkYXRhZm9ybWF0cz1yZS4kdmlld2RhdGEsWS5ob3RUYWJsZS5jb2xzPXJlLmNvbHMsQ1UoWS5ob3RUYWJsZS5jb2xzLFtdLHJlLiR2aWV3ZGF0YSk7bGV0IGZlPVtdLF9lPVtdO2ZvcihsZXQga2UgaW4gcmUudmlld2RhdGFbMF0pa2Um'@;
put 'Jl9lLnB1c2goa2UpO2ZvcihsZXQga2U9MDtrZTxfZS5sZW5ndGg7a2UrKylmZS5wdXNoKHtkYXRhOl9lW2tlXX0pO1kuaG90VGFibGUuaGVhZGVyUGtzPVprKHJlLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksWS5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPV9lLmZpbHRlcihr'@;
put 'ZT0+IVkuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGtlKSksWS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPVprKFkuaG90VGFibGUuYWxsQ29sSGVhZGVycyksWS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1fZS5maWx0ZXIoa2U9PlkuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1'@;
put 'ZGVzKGtlKSksWS5ob3RUYWJsZS5jb2xIZWFkZXJzPV9lLFkuaG90VGFibGUuY29sdW1ucz1mZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oWS5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoa2UsV2UpPT57Y29uc3QgSmU9X2Vba2Vd'@;
put 'LHR0PVkuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEplKTt0dD4tMSYmKFkuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UodHQsMSksWS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtXZV09SmUpfSkpOlkuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUucHVz'@;
put 'aCguLi5ZLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxZLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPVkuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGtlPT5rZSksVHx8aC52aWV3Ym94VGFibGVzLnB1c2goWSksZC5xdWVyeT1oLmhlbHBlclNl'@;
put 'cnZpY2UuZGVlcENsb25lKHJlLnF1ZXJ5KSxkLmZpbHRlclRleHQ9cmUuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULHNldFRpbWVvdXQoKCk9PntoLnVwZGF0ZUhvdENvbHVtbnMoWS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVufHxbXSxkLmlkKTtjb25zdCBrZT1oLmdldFZpZXdib3hIb3RJ'@;
put 'bnN0YW5jZShkLmlkKTtrZT8udXBkYXRlU2V0dGluZ3Moe21hbnVhbENvbHVtbk1vdmU6WS5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlLGFmdGVyR2V0Q29sSGVhZGVyOihXZSxKZSk9Pntjb25zdCB0dD1rZT8uY29sVG9Qcm9wKFdlKTt0dCYmWS5ob3RUYWJsZS5oZWFkZXJQa3MuaW5kZXhP'@;
put 'Zih0dCk+LTEmJkplLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpfX0pLGtlPy5yZW5kZXIoKSxoLnNlbGVjdGVkVmlld2JveCYmaC5yZXNldFNlbGVjdGVkVmlld2JveChkKX0pLGYoKX0pLmNhdGNoKHJlPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKHJlKSx2KCl9KX0p'@;
put 'fSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhlbigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJu'@;
put 'IGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29uc3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJl'@;
put 'Y3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxUPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1UKyJweCIsdGhpcy5zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFl'@;
put 'MywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDp2LGhlaWdodDpUfX1kcmFnTW92ZShhLGQsaCxmKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUo'@;
put 'YSxkKTtoLndpZHRoPXYud2lkdGgsaC5oZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZl'@;
put 'RWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixUKT0+di5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZlRWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9'@;
put 'YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj1kLndpZHRoLWYud2lkdGgsVD1kLmhlaWdodC1mLmhlaWdodDt2Kz01LFQrPTUsIngiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGUoJHt2fXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNs'@;
put 'YXRlKDAsICR7VH1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsICR7VH1weClgKX1mb2N1c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFwKGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQp'@;
put 'e2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQoKXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LFQ9TWF0'@;
put 'aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxZPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLF9lPShhLTUqKFQrMSkpL1Qsa2U9KGEtNSooWSsxKSkvWTtsZXQgSmU9MCx5dD0oZC0yNTAtNjApLzIsd3Q9MCxMdD0wO2ZvcihsZXQgb249MDtvbjx0aGlzLnZpZXdi'@;
put 'b3hlcy5sZW5ndGg7b24rKyl7bGV0IHNuPXRoaXMudmlld2JveGVzW29uXSxNbj0hKG9uPlQtMSk7Y29uc3QgVm49TW4/X2U6a2U7IU1uJiYwPT09THQmJih3dD0wLEx0KyssSmU9MCksc24ueD01K0plK3d0KihWbis1KSxzbi55PTI1MCtMdCooeXQrNSksc24ud2lkdGg9Vm4sc24uaGVpZ2h0'@;
put 'PXl0LHd0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JFYWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3Jl'@;
put 'QWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lk'@;
put 'dGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEwLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMu'@;
put 'dmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09'@;
put 'YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRo'@;
put 'aXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxHbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSgkUCksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdib3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhp'@;
put 'cy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlzLnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRW'@;
put 'aWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/bHRlKGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBDd2UoYyxsLGEsZCl7Y29uc3QgaD1iYihhLGMu'@;
put 'bGVuZ3RoLTEpLGY9YmIoZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRh'@;
put 'YmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVtLmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94'@;
put 'SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUmJih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxl'@;
put 'LnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmll'@;
put 'd2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdi'@;
put 'b3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSksdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1'@;
put 'c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2Jv'@;
put 'eFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hU'@;
put 'YWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0'@;
put 'ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0h'@;
put 'MCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVkaXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJl'@;
put 'Zi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmluZ1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJl'@;
put 'bG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxHbi52aWV3Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94LmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKCRQKSl9c2VuZENsYXVzZSgpe3RoaXMu'@;
put 'ZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0'@;
put 'aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVtZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKFQpe3JldHVybiBudWxsPT09VC52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3RoKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9'@;
put 'ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltdfTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgVD17ZmlsdGVyQ2xh'@;
put 'dXNlczpbXX07di5lbGVtZW50cy5mb3JFYWNoKFk9PntULmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFkpKX0pLFQuY2xhdXNlTG9naWM9di5jbGF1c2VMb2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUo'@;
put 'VCkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYpLnRoZW4odj0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0u'@;
put 'RklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5n'@;
put 'PSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2Quc2VhcmNoTG9hZGluZz0hMDtsZXQgZj1hLnZhbHVlLHY9ZC5saWJyYXJ5KyIuIitkLnRhYmxlLFQ9cGFyc2VJbnQoZC5maWx0ZXJfcGt8'@;
put 'fCIwIik7Y29uc3QgWT1oLnZpZXdib3hUYWJsZXMuZmluZChyZT0+cmUudmlld2JveElkPT09ZC5pZCk7WSYmKHlpZWxkIGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGYsZC5zZWFyY2hOdW1lcmljLHYsVCkudGhlbihyZT0+e3JlLnNhc3BhcmFtc3x8cmUudmlld0RhdGE/WS5o'@;
put 'b3RUYWJsZS5kYXRhPXJlLnZpZXdkYXRhOmQuc2VhcmNoTG9hZGluZz0hMH0pLmNhdGNoKHJlPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKHJlKX0pLGQuc2VhcmNoTG9hZGluZz0hMSl9KSgpfXJlbG9hZFRhYmxlRGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2NvbnN0'@;
put 'IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhp'@;
put 'ZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2NvbnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1v'@;
put 'dmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Hbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFyeTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1u'@;
put 'T3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNvbHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEp'@;
put 'e2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUuY29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRW'@;
put 'aWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsVD1bXTtyZXR1cm4gaC5tYXAoKFkscmUpPT57aWYocmU8dil7Y29uc3QgZmU9Zi5pbmRleE9mKFkpO2ZlPi0xJiZULnB1c2goZmUpfX0pLFR9dXBkYXRlSGlkZGVuQ29sdW1uc0hvdChhLGQpe2NvbnN0'@;
put 'IGg9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoZCk7aWYoaCl7Y29uc3QgZj1hLm1hcCh2PT5oLnByb3BUb0NvbCh2KSk7aC51cGRhdGVTZXR0aW5ncyh7aGlkZGVuQ29sdW1uczp7Y29sdW1uczpmfX0pLGgucmVuZGVyKCl9fWdldFZpZXdib3hIb3RJbnN0YW5jZShhKXtyZXR1cm4gYT90'@;
put 'aGlzLmhvdFRhYmxlUmVnaXN0ZXJlci5nZXRJbnN0YW5jZShgaG90SW5zdGFuY2Vfdmlld2JveF8ke2F9YCk6dm9pZCAwfXZpZXdib3hDaGFuZ2VkKCl7bGV0IGE7Y29uc3QgZD10aGlzLmVuY29kZVVybERhdGEodGhpcy52aWV3Ym94ZXMpO2QubGVuZ3RoPjAmJihhPXt2aWV3Ym94ZXM6ZH0p'@;
put 'LHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMuYWN0aXZhdGVkUm91dGUscXVlcnlQYXJhbXM6YX0pLHRoaXMucHJlcGFyZUZpbHRlckNhY2hlKCl9cHJlcGFyZUZpbHRlckNhY2hlKCl7Zm9yKGxldCBhIG9mIHRoaXMudmlld2JveGVzKWlmKEduLnZpZXdib3hlc1th'@;
put 'LmlkXXx8KEduLnZpZXdib3hlc1thLmlkXT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKCRQKSksYS5xdWVyeSYmYS5xdWVyeS5sZW5ndGg+MCl7Y29uc3QgZD10aGlzLnZpZXdib3hUYWJsZXMuZmluZChmPT5mLnZpZXdib3hJZD09PWEuaWQpLGg9YHZpZXdib3hlcy4ke2EuaWR9YDtH'@;
put 'bi52aWV3Ym94ZXNbYS5pZF0uZmlsdGVyLnF1ZXJ5PWEucXVlcnksR24udmlld2JveGVzW2EuaWRdLmZpbHRlci5saWJkcz1hLmxpYnJhcnkrIi4iK2EudGFibGUsdGhpcy5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVzZShoLGQ/LmhvdFRhYmxlLmNvbHMpfX1l'@;
put 'bmNvZGVVcmxEYXRhKGEpe2xldCBkPSIiO3JldHVybiBhLm1hcCgoaCxmKT0+e2QrPWAke2guaWR9LSR7aC5saWJyYXJ5fS0ke2gudGFibGV9LSR7aC53aWR0aH0tJHtoLmhlaWdodH0tJHtoLnh9LSR7aC55fS0ke2guY29sbGFwc2VkPzE6MH0tJHtoLm1pbmltaXplZD8xOjB9LSR7aC5maWx0'@;
put 'ZXJfcGt8fDB9JHtoLmNvbHVtbnMmJmguY29sdW1ucy5sZW5ndGg+MD8iLSIraC5jb2x1bW5zPy5qb2luKCIsIik6IiJ9YCxmIT09YS5sZW5ndGgtMSYmKGQrPSI7Iil9KSxkfWRlY29kZVVybERhdGEoYSl7bGV0IGg9W107cmV0dXJuIGEuc3BsaXQoIjsiKS5tYXAodj0+e2NvbnN0IFQ9di5z'@;
put 'cGxpdCgiLSIpO2gucHVzaCh7aWQ6cGFyc2VJbnQoVFswXSksbGlicmFyeTpUWzFdLHRhYmxlOlRbMl0sd2lkdGg6cGFyc2VJbnQoVFszXSksaGVpZ2h0OnBhcnNlSW50KFRbNF0pLHg6cGFyc2VJbnQoVFs1XSkseTpwYXJzZUludChUWzZdKSxjb2xsYXBzZWQ6ISFwYXJzZUludChUWzddKSxt'@;
put 'aW5pbWl6ZWQ6ISFwYXJzZUludChUWzhdKSxjb2x1bW5zOlRbMTBdPy5zcGxpdCgiLCIpLm1hcChZPT5wYXJzZUludChZKSl8fFtdLGZpbHRlcl9wazpUWzldfSl9KSxofW5nT25EZXN0cm95KCl7dGhpcy5fcXVlcnk/LnVuc3Vic2NyaWJlKCl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVu'@;
put 'Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChQbyksc3QoaDEpLHN0KHlhKSxzdChHbCksc3QoZGgpLHN0KGQxKSxzdChjdSksc3QoenMpLHN0KE1jKSxzdChGYSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZp'@;
put 'ZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKFVvKGIkZSw1KSxVbyh3JGUsNSkpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGgucmVzaXplQm94UXVlcnk9ZiksTWkoZj1DaSgpKSYmKGguZHJhZ0hhbmRsZUNvcm5lclF1ZXJ5PWYpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdi'@;
put 'b3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hhbmRsZUNvcm5lciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5Rmls'@;
put 'dGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJs'@;
put 'aWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxb'@;
put 'ImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJjdXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1j'@;
put 'b250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0sWyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29s'@;
put 'dGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3Rp'@;
put 'ZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwi'@;
put 'bS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1j'@;
put 'b250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRv'@;
put 'dyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xv'@;
put 'c2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2si'@;
put 'XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWNlbmNlLW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2'@;
put 'aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiwibGlicmFyeUxpc3QiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJvcGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50'@;
put 'LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIs'@;
put 'MSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRv'@;
put 'b2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJtbC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwxLCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJj'@;
put 'b2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5zIiwidGFiaW5kZXgiLCIwIiwzLCJ2YWx1ZUNoYW5nZSIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIl0sWzQsIm5nRm9y'@;
put 'IiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REcm9wcGVkIiwiY2RrRHJvcExpc3REYXRhIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZhdWx0LWkiLCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0'@;
put 'YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBlIiwidHJhc2giLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGlj'@;
put 'ayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtEcmFnIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJtb3Vz'@;
put 'ZWRvd24iLCJjZGtEcmFnRW5kZWQiLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUt'@;
put 'dGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNk'@;
put 'a0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImNka0RyYWdNb3ZlZCIsImlkIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdy'@;
put 'YXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJz'@;
put 'aGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwi'@;
put 'XSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1s'@;
put 'ZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIsInBlbmNpbCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0s'@;
put 'WyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNoIiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUi'@;
put 'XSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRvIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwi'@;
put 'c3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0'@;
put 'ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bpbm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsInN0cmV0Y2hI'@;
put 'IiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRy'@;
put 'b3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmlld2JveElkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiY2xyLW1vZGFsIiw1KSxIdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixm'@;
put 'dW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxnZSgxLCJoMyIsNiksemUoMiwiIFZpZXdib3hlcyAiKSxidCgzLFMkZSwyLDIsInNwYW4iLDcpLGJlKCksZ2UoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSx6ZSg3LCJBZGQgbmV3IiksYmUoKSxKdCg4'@;
put 'LCJociIsMTEpLGJ0KDkseCRlLDIsMCwiZGl2IiwxMikoMTAsayRlLDIsMCwicCIsMTMpKDExLEUkZSwxLDEsImRjLXRyZWUiLDE0KSxiZSgpLGdlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSx6ZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxiZSgpLGdlKDE2LCJkaXYiKSgx'@;
put 'NywiYSIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9HcmlkKCl9KSxKdCgxOCwiY2xyLWljb24iLDE4KSxnZSgxOSwic3BhbiIsMTkpLHplKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksYmUoKSgpLGdlKDIxLCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxKdCgyMiwiY2xyLWljb24iLDIwKSxnZSgyMywic3BhbiIsMTkpLHplKDI0LCJNaW5pbWl6ZSBhbGwgdmlld2JveGVzIiksYmUoKSgpLGdlKDI1LCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwoKX0p'@;
put 'LEp0KDI2LCJjbHItaWNvbiIsMjEpLGdlKDI3LCJzcGFuIiwxOSksemUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLGJlKCkoKSgpKCksSnQoMjksImhyIiksYnQoMzAsVCRlLDIsMCwicCIsMjIpKDMxLEkkZSwxNSwxMCwiZGl2IiwyMyksZ2UoMzIsImRpdiIsMjQpKDMzLCJwIiwyNSks'@;
put 'emUoMzQpLGJlKCkoKSxKdCgzNSwiaHIiKSxidCgzNixWJGUsMywyLCJkaXYiLDI2KSxiZSgpKCksZ2UoMzcsImRpdiIsMjcpKDM4LCJidXR0b24iLDI4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksemUoMzksIiBPayAiKSxiZSgpKCkoKSxnZSg0'@;
put 'MCwiZGl2IiwyOSksYnQoNDEscSRlLDMzLDM3LCJkaXYiLDMwKSxiZSgpLGdlKDQyLCJjbHItbW9kYWwiLDMxKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZ2UoNDMsImgzIiwzMiksemUoNDQsIiBG'@;
put 'aWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGdlKDQ1LCJzcGFuIiksemUoNDYpLGJlKCkoKSxnZSg0NywiZGl2IiwzMyksYnQoNDgsSyRlLDIsMSwiYXBwLXF1ZXJ5IiwzNCksYmUoKSxnZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gaC5yZXNldEZpbHRlcigpfSksemUoNTEsIiByZXNldCBmaWx0ZXIgIiksYmUoKSxnZSg1MiwiYnV0dG9uIiwyOCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmZpbHRlcj0hMX0pLHplKDUzLCIgQ2FuY2VsICIpLGJlKCksZ2UoNTQsImJ1dHRvbiIsMzYpLEh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSx6ZSg1NSwiIE9rICIpLGJlKCkoKSgpKSwyJmQmJihQZSgiY2xyTW9kYWxPcGVuIixoLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSx3ZSgzKSxQZSgibmdJZiIsaC5saWNl'@;
put 'bmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLHdlKDYpLFBlKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLHdlKCksUGUoIm5nSWYiLGgudmlld2JveExpbWl0UmVhY2hlZCksd2UoKSxQZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLHdlKDE5KSxQZSgibmdJZiIs'@;
put 'aC52aWV3Ym94ZXMubGVuZ3RoPDEpLHdlKCksUGUoIm5nRm9yT2YiLGgudmlld2JveGVzKSx3ZSgzKSx4cigiIENvbmZpZ3VyYXRpb24gKCIsbnVsbCE9aC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWgu'@;
put 'c2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJv'@;
put 'dmUiLCIpICIpLHdlKDIpLFBlKCJuZ1ZhciIsdnkoMTksTSRlLG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09'@;
put 'aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZp'@;
put 'ZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksd2UoNSksUGUoIm5nRm9yT2YiLGgudmlld2JveGVzKSx3ZSgpLFdyKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSxQZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9k'@;
put 'YWxDbG9zYWJsZSIsITEpLHdlKDQpLHQwKCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94LmlkLCIgIixoLmZpbHRlckxpYmRzLCIgIiksd2UoMiksUGUoIm5nSWYiLGguZmlsdGVyKSx3ZSg2KSxQZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJMb2Fk'@;
put 'aW5nKSl9LGRlcGVuZGVuY2llczpbTHMscWksWmEsQnUsWXUscjAsbzIsWHMsQW5lLHYxLE83LF8xLGFkLG5oLHRnLG5kLHJkLGYxLGNhLFE1LG9hLHZmLElVLEx3LHZ0ZSxfdGUsQkgscHRlLHZjZSx5JGUsJDksS2JdLHN0eWxlczpbIi5saWNlbmNlLW5vdGljZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17Zm9udC1zaXplOjE0cHg7ZGlzcGxheTpibG9jaztvcGFjaXR5Oi42fWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEzMDB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtYm9keS13cmFwcGVye2hlaWdo'@;
put 'dDpjYWxjKDEwMCUgLSA2MHB4KX1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1jb250ZW50e2hlaWdodDo4MHZofWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVd'@;
put 'e3BhZGRpbmc6MH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMDAlO2hlaWdodDoxMDAlfWRjLXRyZWVbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG87ZmxleDoxfS50b29s'@;
put 'dGlwLWxvbmdbX25nY29udGVudC0lQ09NUCVde3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYWRkLW5ld1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlO3BhZGRpbmctcmlnaHQ6NXB4fS52aWV3Ym94LWxpbWl0LW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNztjb2xvcjoj'@;
put 'ZTc0YzNjfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9LmN1cnJlbnRseS1v'@;
put 'cGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3guc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzNjODUwMDJlfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnti'@;
put 'YWNrZ3JvdW5kOiNlOGU4ZTh9LnZpZXdib3hlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7cG9pbnRlci1ldmVudHM6bm9uZTt6LWluZGV4Ojk5OX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjIwMHB4O21pbi1oZWln'@;
put 'aHQ6MjAwcHg7cG9zaXRpb246Zml4ZWQ7bGVmdDowO3RvcDowO3BvaW50ZXItZXZlbnRzOmFsbDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMCAxMHB4'@;
put 'IC0zcHggIzAwMH0udmlld2JveC5mb2N1c2VkW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjExMDA7b3V0bGluZTpub25lfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMwMTk2'@;
put 'MDc4NDMpO2JhY2tncm91bmQ6I2ZmZjtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO2ZsZXg6MTtvdmVyZmxvdy14OmF1dG99LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MjBweDtiYWNrZ3Jv'@;
put 'dW5kLWNvbG9yOiMzYzg1MDA7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czozcHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6M3B4O2NvbG9yOiNmZmY7cGFkZGluZzowIDVweDtwb2ludGVyLWV2ZW50czphbGx9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC50YWJsZS10aXRsZVtfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC1icmVhazpicmVhay1hbGx9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hY3Rpb25zW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWluLXdpZHRoOjM1cHh9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtjdXJzb3I6cG9pbnRlcjttYXJnaW4tbGVmdDo1cHh9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWctaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFu'@;
put 'c2Zvcm06c2NhbGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xpY2staWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVdOmhvdmVye3RyYW5z'@;
put 'Zm9ybTpzY2FsZSgxLjMpfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5jb3JuZXJbX25nY29udGVudC0lQ09NUCVde3dp'@;
put 'ZHRoOjE1cHg7aGVpZ2h0OjE1cHg7Y3Vyc29yOm53c2UtcmVzaXplfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnSGFuZGxlLnJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoycHg7aGVpZ2h0OjEwMCU7Y3Vyc29yOmV3LXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5ib3R0b21bX25nY29udGVudC0lQ09NUCVde2hlaWdodDoycHg7d2lkdGg6MTAwJTtjdXJzb3I6bnMtcmVzaXplfS5jb2xzLXNlYXJjaFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttYXJnaW4tdG9wOjVweDtib3JkZXI6MXB4IHNvbGlkIHJn'@;
put 'YmEoMCwwLDAsLjI3ODQzMTM3MjUpO2JvcmRlci1yYWRpdXM6M3B4fS5jb2xzLWxpc3RbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAxcHggI2NjYzttaW4taGVpZ2h0OjYwcHg7YmFja2dyb3VuZDojZmZmO2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5'@;
put 'OmJsb2NrO3dpZHRoOjQwMHB4O21heC13aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1ib3R0b206c29saWQgMXB4ICNjY2M7Y29sb3I6IzAwMDAwMGRlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv'@;
put 'bjpyb3c7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6bW92ZTtiYWNrZ3JvdW5kOiNmZmY7Zm9udC1zaXplOjE0cHh9LmNvbC1ib3guc2VhcmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tiYWNr'@;
put 'Z3JvdW5kOiMwMDAwMDAxYX0uY29sLWJveC5wcmltYXJ5S2V5SGVhZGVyU3R5bGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMwNmIwMDI0fS5jZGstZHJhZy1wcmV2aWV3W19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym9yZGVyLXJhZGl1czo0cHg7'@;
put 'Ym94LXNoYWRvdzowIDVweCA1cHggLTNweCAjMDAwMywwIDhweCAxMHB4IDFweCAjMDAwMDAwMjQsMCAzcHggMTRweCAycHggIzAwMDAwMDFmO3otaW5kZXg6MTMwMCFpbXBvcnRhbnR9LmNkay1kcmFnLXBsYWNlaG9sZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5OjB9LmNkay1kcmFn'@;
put 'LWFuaW1hdGluZ1tfbmdjb250ZW50LSVDT01QJV17dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXTpsYXN0LWNoaWxke2JvcmRlcjpub25lfS5jb2xzLWxpc3QuY2RrLWRyb3AtbGlzdC1kcmFnZ2luZ1tf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICAuY29sLWJveFtfbmdjb250ZW50LSVDT01QJV06bm90KC5jZGstZHJhZy1wbGFjZWhvbGRlcil7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoMCwwLC4yLDEpfS5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNTt0'@;
put 'cmFuc2Zvcm06bm9uZSFpbXBvcnRhbnQ7cG9pbnRlci1ldmVudHM6bm9uZX0uZmlsdGVyLWFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzAwNzJhM31ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlw'@;
put 'ZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5o'@;
put 'dF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kOiMzMDZiMDBiMH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAg'@;
put 'IHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX0iXX0pfXJldHVybiBjfSkoKSx3Y2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBJcix0'@;
put 'aGlzLmZpbGVEcm9wPW5ldyBJcix0aGlzLmVsZW1lbnQ9YX1vbkRyb3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5h'@;
put 'ZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhpcy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47'@;
put 'ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQoITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0'@;
put 'YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoJGkpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiYXBwRmlsZURyb3AiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZIdCgi'@;
put 'ZHJvcCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Ecm9wKHYpfSkoImRyYWdvdmVyIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdPdmVyKHYpfSkoImRyYWdsZWF2ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnTGVhdmUodil9KX0saW5wdXRzOnt1cGxvYWRlcjoidXBsb2FkZXIi'@;
put 'fSxvdXRwdXRzOntmaWxlT3ZlcjoiZmlsZU92ZXIiLGZpbGVEcm9wOiJmaWxlRHJvcCJ9fSl9cmV0dXJuIGN9KSgpLE1jZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVkPW5ldyBJcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXty'@;
put 'ZXR1cm4hIXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMubXVsdGlwbGV9b25DaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlz'@;
put 'LmlzRW1wdHlBZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoJGkpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVkaXI9dnIoe3R5cGU6YyxzZWxl'@;
put 'Y3RvcnM6W1siIiwiYXBwRmlsZVNlbGVjdCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgub25DaGFuZ2UoKX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVTZWxlY3RlZDoiZmls'@;
put 'ZVNlbGVjdGVkIn19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWCRlKGMsbCl7MSZjJiYoZ2UoMCwicCIsOCksemUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSxiZSgpKX1mdW5jdGlvbiBKJGUoYyxsKXtpZigxJmMmJihyaSgwKSxnZSgxLCJjbHItZGctY29sdW1uIiksemUoMiks'@;
put 'YmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoMikscHIoYS5jb2xOYW1lfHxhLmNvbEtleSl9fWZ1bmN0aW9uIFEkZShjLGwpe2lmKDEmYyYmKHJpKDApLGdlKDEsImNsci1kZy1jZWxsIiksemUoMiksYmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1a'@;
put 'ZSgpLiRpbXBsaWNpdDt3ZSgyKSxwcihkW2EuY29sS2V5XSl9fWZ1bmN0aW9uIGVxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1kZy1yb3ciLDEzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQsZj1aZSgyKS4kaW1wbGljaXQ7cmV0'@;
put 'dXJuIHh0KGYub25Sb3dDbGljaz9mLm9uUm93Q2xpY2soaCk6IiIpfSksYnQoMSxRJGUsMywxLCJuZy1jb250YWluZXIiLDUpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpLiRpbXBsaWNpdDt3ZSgpLFBlKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpfX1mdW5jdGlvbiB0cWUoYyxsKXtp'@;
put 'ZigxJmMmJihnZSgwLCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0YWdyaWQiKSxidCgyLEokZSwzLDEsIm5nLWNvbnRhaW5lciIsNSkoMyxlcWUsMiwxLCJjbHItZGctcm93IiwxMiksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoMiksUGUoIm5nRm9yT2Yi'@;
put 'LGEuY29sc1RvRGlzcGxheSksd2UoKSxQZSgibmdGb3JPZiIsYS5tZXRhKX19ZnVuY3Rpb24gbnFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksemUoMiksYmUoKSxidCgzLHRxZSw0LDIsImNsci10YWItY29udGVudCIsMTApLGJlKCkpLDImYyl7Y29uc3Qg'@;
put 'YT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7d2UoMikscHIoYS5uYW1lKSx3ZSgpLFBlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgQ2NlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLm9wZW5DaGFu'@;
put 'Z2U9bmV3IElyLHRoaXMucm93Q2xpY2tlZD1uZXcgSXIsdGhpcy5kc21ldGFUYWJzPVtdLHRoaXMudmVyc2lvbnNUYWJzPVtdLHRoaXMudGFicz1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmKHRoaXMucGFyc2VEU01ldGEo'@;
put 'KSx0aGlzLnBhcnNlVmVyc2lvbnMoKSx0aGlzLnRhYnM9Wy4uLnRoaXMuZHNtZXRhVGFicywuLi50aGlzLnZlcnNpb25zVGFic10pfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFUYWJzPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFUYWJzLmZpbmRJbmRl'@;
put 'eChoPT5oLm5hbWU9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0YVRhYnMucHVzaCh7bmFtZTphLk9EU19UQUJMRSx0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJOQU1FIn0se2NvbEtleToiVkFMVUUifV0sbWV0YTpbXSxvblJvd0NsaWNrOmg9'@;
put 'Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChoKX19KS0xKSx0aGlzLmRzbWV0YVRhYnNbZF0ubWV0YS5wdXNoKGEpfX1wYXJzZVZlcnNpb25zKCl7dGhpcy52ZXJzaW9uc1RhYnM9W3tuYW1lOiJWRVJTSU9OUyIsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTE9B'@;
put 'RF9SRUYifSx7Y29sS2V5OiJVU0VSX05NIn0se2NvbEtleToiVkVSU0lPTl9EVFRNIn0se2NvbEtleToiTkVXX1JFQ09SRFMiLGNvbE5hbWU6IkFERCJ9LHtjb2xLZXk6IkNIQU5HRURfUkVDT1JEUyIsY29sTmFtZToiTU9EIn0se2NvbEtleToiREVMRVRFRF9SRUNPUkRTIixjb2xOYW1lOiJE'@;
put 'RUwifSx7Y29sS2V5OiJWRVJTSU9OX0RFU0MifV0sbWV0YTp0aGlzLnZlcnNpb25zLG9uUm93Q2xpY2s6YT0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGEpfX1dfW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9u'@;
put 'T3BlbkNoYW5nZSghMSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRhdGFzZXQtaW5mbyJdXSxpbnB1dHM6e29wZW46Im9wZW4iLGRzbWV0YToi'@;
put 'ZHNtZXRhIix2ZXJzaW9uczoidmVyc2lvbnMifSxvdXRwdXRzOntvcGVuQ2hhbmdlOiJvcGVuQ2hhbmdlIixyb3dDbGlja2VkOiJyb3dDbGlja2VkIn0sZmVhdHVyZXM6W0JhXSxkZWNsczoxMCx2YXJzOjUsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwi'@;
put 'Y2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xyTGF5b3V0IiwidmVydGlj'@;
put 'YWwiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWluZm8tb3V0bGluZSIsMywiY2xpY2siXSxbMSwidGV4dC1jZW50ZXIiXSxbImNsclRhYkxpbmsiLCIiLCJpZCIsImxpbmsxIl0sWyJpZCIs'@;
put 'ImNvbnRlbnQxIiwiY2xhc3MiLCJkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgdy0xMDAiLDQsImNscklmQWN0aXZlIl0sWyJpZCIsImNvbnRlbnQxIiwxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsInctMTAwIl0sWyJjbGFzcyIsImNsaWNrYWJsZS1y'@;
put 'b3ciLDMsImNsaWNrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJjbHItbW9kYWwiLDApLEh0KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uT3Bl'@;
put 'bkNoYW5nZSh2KX0pLGdlKDEsImgzIiwxKSx6ZSgyLCJEYXRhc2V0IE1ldGEiKSxiZSgpLGdlKDMsImRpdiIsMiksYnQoNCxYJGUsMiwwLCJwIiwzKSxnZSg1LCJjbHItdGFicyIsNCksYnQoNixucWUsNCwyLCJjbHItdGFiIiw1KSxiZSgpKCksZ2UoNywiZGl2Iiw2KSg4LCJidXR0b24iLDcp'@;
put 'LEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNsb3NlQ2xpY2soKX0pLHplKDksIiBDbG9zZSAiKSxiZSgpKCkoKSksMiZkJiYoUGUoImNsck1vZGFsT3BlbiIsaC5vcGVuKSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITApLHdlKDQpLFBlKCJuZ0lm'@;
put 'IixoLmRzbWV0YVRhYnMubGVuZ3RoPDEpLHdlKDIpLFBlKCJuZ0Zvck9mIixoLnRhYnMpKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxYNyxaNCx3ZyxDZyxTZyx4ZyxRNyxrZyxaNyxVNCxHNyxCdSxZdSxBNywkNCxLNCxJZyxxNCxHNCxBZ10sc3R5bGVzOlsiLm1vZGFsLWJvZHlbX25nY29udGVu'@;
put 'dC0lQ09NUCVdICAgY2xyLXRhYnNbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6NzB2aH0ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudHt3aWR0aDoxMDAlO292ZXJmbG93OmF1dG99Lm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09NUCVdICAgICAu'@;
put 'dGFiLWNvbnRlbnQgLmRhdGFncmlkLW91dGVyLXdyYXBwZXJ7d2lkdGg6MTAwJX1jbHItbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZGlhbG9ne2hlaWdodDoxMDAlfS5jbGlja2FibGUtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcn0gIC5kYXRhZ3Jp'@;
put 'ZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRsaW5lOm5vbmU7b3V0bGluZS1vZmZzZXQ6MH0iXX0pfXJldHVybiBjfSkoKTtjb25zdCBycWU9KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxTY2U9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLFJVPShjLGwp'@;
put 'PT4oe2NvbDpjLGNvbEluZGV4Omx9KSxpcWU9KCk9Plt2b2lkIDBdLG9xZT0oKT0+WyJTT0ZUU0VMRUNUIiwiU09GVFNFTEVDVF9IT09LIl07ZnVuY3Rpb24gc3FlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIsMTUpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLHByKGEu'@;
put 'Z2VuZXJhdGVkUmVjb3JkVXJsKX19ZnVuY3Rpb24gYXFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKSl9KSx6ZSgxKSxiZSgpfWlmKDIm'@;
put 'Yyl7Y29uc3QgYT1aZSgyKTtQZSgiZGlzYWJsZWQiLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZyksd2UoKSx4cigiICIsYS5nZW5lcmF0ZWRSZWNvcmRVcmw/ImNvcHkgdG8gY2xpcGJvYXJkIjphLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc/IkdlbmVyYXRpbmcgdXJsLi4u'@;
put 'IjoiTGluayB0byB0aGlzIHJlY29yZCIsIiAiKX19ZnVuY3Rpb24gbHFlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxzcWUsMiwxLCJzcGFuIiwxMykoMixhcWUsMiwyLCJidXR0b24iLDE0KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLFBlKCJuZ0lmIiwhKG51bGwhPWEuY3VycmVu'@;
put 'dFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpLHdlKCksUGUoIm5nSWYiLCEobnVsbCE9YS5jdXJyZW50UmVjb3JkJiZhLmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uKSl9fWZ1bmN0aW9uIGNxZShjLGwpezEmYyYmKGdlKDAsImRpdiIsMTcpKDEsInNwYW4iLDE4KSx6'@;
put 'ZSgyLCIgTG9hZGluZy4uLiAiKSxiZSgpKCkpfWZ1bmN0aW9uIHVxZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBkcWUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiwzMiksemUoMSwiIExvYWRpbmcuLi4gIiksYmUoKSl9ZnVuY3Rpb24gaHFlKGMsbCl7MSZjJiZKdCgw'@;
put 'LCJjbHItaWNvbiIsMzMpfWZ1bmN0aW9uIGZxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pbnB1dC1jb250YWluZXIiLDM1KSgxLCJpbnB1dCIsMzYpLEh0KCJmb2N1c2luIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDMpLmluZGV4O3JldHVybiB4dChaZSgy'@;
put 'KS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgzKS4kaW1wbGljaXQsdj1aZSgyKTtyZXR1cm4gdi5yZWNv'@;
put 'cmRJbnB1dENoYW5nZShoLGYua2V5KSx4dCh2LmN1cnJlbnRSZWNvcmQubm9MaW5rT3B0aW9uPSEwKX0pLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDMpLiRpbXBsaWNpdCx2PVplKDIpO3JldHVybiBxcih2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgp'@;
put 'fHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSx4dChoKX0pLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMykuJGltcGxpY2l0LGQ9WmUoMik7YnIoImludmFsaWQtZGF0YSIsZC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoYS5rZXkpKSx3ZSgpLFdyKCJuZ01vZGVsIixk'@;
put 'LmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gcHFlKGMsbCl7MSZjJiZObCgwKX1mdW5jdGlvbiBtcWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLHBxZSwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgzKSxkPWEuJGltcGxpY2l0LGg9'@;
put 'YS5pbmRleDtaZSgyKTtjb25zdCBmPVhpKDE2KTt3ZSgpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxmKDIsUlUsZCxoKSl9fWZ1bmN0aW9uIGdxZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsZnFlLDIsMywiY2xyLWlucHV0LWNvbnRhaW5l'@;
put 'ciIsMzQpKDIsbXFlLDIsNSwiZGl2Iiw1KSxpaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1aZSgyKS4kaW1wbGljaXQsZj1aZSgyKTt3ZSgpLFBlKCJuZ0lmIixEYSgyLHJxZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1mLmN1cnJlbnRSZWNv'@;
put 'cmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6YS5lZGl0b3IpKSx3ZSgpLFBlKCJuZ0lmIixEYSgzLFNjZSkuaW5jbHVkZXMobnVsbD09Zi5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShoLmtleSkpP251bGw6'@;
put 'ZC5lZGl0b3IpKX19ZnVuY3Rpb24gX3FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIpKDEsInRleHRhcmVhIiwzOCwxKSxIdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgzKS5pbmRleDtyZXR1cm4geHQoWmUo'@;
put 'Mikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQoWmUoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoMykuJGltcGxpY2l0O3JldHVybiB4dChaZSgyKS5yZWNv'@;
put 'cmRJbnB1dENoYW5nZShoLGYua2V5KSl9KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgzKS4kaW1wbGljaXQsdj1aZSgyKTtyZXR1cm4gcXIodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCkseHQoaCl9'@;
put 'KSx6ZSgzLCIgICAgICAgICAgICAgICAgICAiKSxiZSgpLGdlKDQsImNsci1jb250cm9sLWhlbHBlciIpLHplKDUpLGJlKCkoKX1pZigyJmMpe2xldCBhLGQsaDtjb25zdCBmPVhpKDIpLHY9WmUoMykuJGltcGxpY2l0LFQ9WmUoMik7d2UoKSxicigiaW52YWxpZC1kYXRhIixULmN1cnJlbnRS'@;
put 'ZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyh2LmtleSkpKCJub3QtY2hhciIsbnVsbD09VC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1ULmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6YS50eXBlKSxQZSgicm93cyIsdi52YWx1ZS5sZW5ndGg+'@;
put 'ODA/NjoxKSxXcigibmdNb2RlbCIsVC5jdXJyZW50UmVjb3JkW3Yua2V5XSksUGUoIm1heExlbmd0aCIsbnVsbD09VC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1ULmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6ZC5sZW5ndGgpLHdlKDQpLHQw'@;
put 'KCIiLGYudmFsdWUubGVuZ3RoLCIgLyAiLG51bGw9PVQuY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGg9VC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUodi5rZXkpKT9udWxsOmgubGVuZ3RoLCIiKX19ZnVuY3Rpb24gdnFlKGMsbCl7MSZjJiZObCgwKX1mdW5jdGlvbiB5'@;
put 'cWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLHZxZSwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgzKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtaZSgyKTtjb25zdCBmPVhpKDE2KTt3ZSgpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdU'@;
put 'ZW1wbGF0ZU91dGxldENvbnRleHQiLGxmKDIsUlUsZCxoKSl9fWZ1bmN0aW9uIGJxZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsX3FlLDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsNSkoMix5cWUsMiw1LCJkaXYiLDUpLGlpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPVplKDIpLiRp'@;
put 'bXBsaWNpdCxmPVplKDIpO3dlKCksUGUoIm5nSWYiLERhKDIsaXFlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLHdlKCksUGUoIm5nSWYiLERh'@;
put 'KDMsU2NlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiB3cWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHIt'@;
put 'dGV4dGFyZWEtY29udGFpbmVyIiwzOSkoMSwidGV4dGFyZWEiLDQwKSxIdCgicGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgyKS4kaW1wbGljaXQ7cmV0dXJu'@;
put 'IHh0KFplKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpLiRpbXBsaWNpdCx2PVplKDIpO3JldHVybiBxcih2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yu'@;
put 'a2V5XT1oKSx4dChoKX0pLGJlKCksZ2UoMiwiY2xyLWNvbnRyb2wtaGVscGVyIiksemUoMywiSEg6bW06c3MiKSxiZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVplKDIpLiRpbXBsaWNpdCxoPVplKDIpO3dlKCksYnIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENv'@;
put 'bHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEudHlwZSksUGUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSksV3IoIm5n'@;
put 'TW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pfX1mdW5jdGlvbiBNcWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDM5KSgxLCJ0ZXh0YXJlYSIsNDEpLEh0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDQpLnJlY29yZElucHV0UGFzdGUo'@;
put 'aCkpfSkoImlucHV0IixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoMikuJGltcGxpY2l0LHY9'@;
put 'WmUoMik7cmV0dXJuIHFyKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLHh0KGgpfSksYmUoKSxnZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQyKSgzLCJpbnB1dCIsNDMpLEh0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtj'@;
put 'b25zdCBmPVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMikucmVjb3JkRGF0ZUNoYW5nZShoLGYua2V5KSl9KSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMikuJGltcGxpY2l0LGQ9WmUoMik7d2UoKSxicigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29s'@;
put 'cy5pbmNsdWRlcyhhLmtleSkpLFdyKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNvcmRbYS5rZXldKX19ZnVuY3Rpb24gQ3FlKGMsbCl7MSZjJiZObCgwKX1mdW5jdGlvbiBTcWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLENxZSwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGJlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1aZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtaZSgyKTtjb25zdCBmPVhpKDE2KTt3ZSgpLFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGxmKDIsUlUsZCxoKSl9fWZ1bmN0aW9uIHhxZShjLGwpe2lmKDEmYyYmKHJpKDAp'@;
put 'LGdlKDEsImRpdiIsMjApKDIsImRpdiIsMjEpKDMsInAiLDIyKSx6ZSg0KSxidCg1LHVxZSwxLDAsImNsci1pY29uIiwyMyksYmUoKSxnZSg2LCJwIiwyNCksemUoNyksYmUoKSgpLGdlKDgsImRpdiIsMjUpLGJ0KDksZHFlLDIsMCwic3BhbiIsMjYpKDEwLGhxZSwxLDAsImNsci1pY29uIiwy'@;
put 'NykoMTEsZ3FlLDMsNCwibmctY29udGFpbmVyIiwyOCkoMTIsYnFlLDMsNCwibmctY29udGFpbmVyIiwyOCkoMTMsd3FlLDQsNiwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsMjkpKDE0LE1xZSw0LDMsImRpdiIsMjkpKDE1LFNxZSwyLDUsImRpdiIsMjgpLGJlKCkoKSxKdCgxNiwiaHIiLDMw'@;
put 'KSxpaSgpKSwyJmMpe2xldCBhLGQ7Y29uc3QgaD1aZSgpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LFQ9WmUoMik7d2UoNCkseHIoIiAiLGYua2V5LCIgIiksd2UoKSxQZSgibmdJZiIsVC5pc0NvbFBrKGYua2V5KSksd2UoMikseHIoIiAiLG51bGw9PVQuY3VycmVudFJlY29yZFZhbGlkYXRv'@;
put 'cnx8bnVsbD09KGE9VC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZi5rZXkpKT9udWxsOmEuZGVzYywiICIpLHdlKCksUGUoIm5nU3dpdGNoIixudWxsPT1ULmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPVQuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGYu'@;
put 'a2V5KSk/bnVsbDpkLnR5cGUpLHdlKCksUGUoIm5nSWYiLFQuY3VycmVudFJlY29yZExvYWRpbmdzLmluY2x1ZGVzKHYpKSx3ZSgpLFBlKCJuZ0lmIixULmN1cnJlbnRSZWNvcmRFcnJvcnMuaW5jbHVkZXModikpLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIsIm51bWVyaWMiKSx3ZSgpLFBlKCJu'@;
put 'Z1N3aXRjaENhc2UiLHZvaWQgMCksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIsImRhdGUiKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCJhdXRvY29tcGxldGUiKX19ZnVuY3Rpb24ga3FlKGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSx4cWUs'@;
put 'MTcsMTEsIm5nLWNvbnRhaW5lciIsNSksaWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLCJBY3Rpb24iIT09YS5rZXkmJiJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5rZXkmJiJub0xpbmtPcHRpb24iIT09YS5rZXkpfX1mdW5jdGlvbiBF'@;
put 'cWUoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLGtxZSwyLDEsIm5nLWNvbnRhaW5lciIsMTkpLFBhKDIsImtleXZhbHVlIiksaWkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQZSgibmdGb3JPZiIsWTUoMiwyLGEuY3VycmVudFJlY29yZCxhLm9yaWdpbmFsT3JkZXIpKSgibmdGb3JUcmFj'@;
put 'a0J5IixhLnRyYWNrQnlGbil9fWZ1bmN0aW9uIFRxZShjLGwpezEmYyYmKGdlKDAsImNsci1hbGVydCIsNDQpKDEsImNsci1hbGVydC1pdGVtIikoMiwic3BhbiIsNDUpLHplKDMsIiBEYXRhIFZhbGlkYXRpb24gRXJyb3JzIC0gUGxlYXNlIFJldmlldyAiKSxiZSgpKCkoKSksMiZjJiYoQmQo'@;
put 'InZpc2liaWxpdHkiLFplKCkuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wPyJ2aXNpYmxlIjoiaGlkZGVuIiksUGUoImNsckFsZXJ0Q2xvc2FibGUiLCExKSgiY2xyQWxlcnRUeXBlIiwiZGFuZ2VyIikpfWZ1bmN0aW9uIERxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dl'@;
put 'KDAsImRpdiIsNDYpKDEsImJ1dHRvbiIsNDcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vblByZXZpb3VzUmVjb3JkQ2xpY2soKSl9KSxKdCgyLCJjbHItaWNvbiIsNDgpLGJlKCksZ2UoMywicCIpLHplKDQsIiBDdXJyZW50IHJvdzogIiksZ2UoNSwic3Ry'@;
put 'b25nIiksemUoNiksYmUoKSgpLGdlKDcsImJ1dHRvbiIsNDcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vbk5leHRSZWNvcmRDbGljaygpKX0pLEp0KDgsImNsci1pY29uIiw0OSksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoImRpc2Fi'@;
put 'bGVkIixhLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksd2UoNSkseHIoIiAiLGEuY3VycmVudFJlY29yZEluZGV4KzEsIiAiKSx3ZSgpLFBlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApfX1mdW5jdGlvbiBBcWUoYyxsKXtpZigxJmMm'@;
put 'JihnZSgwLCJvcHRpb24iLDUzKSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7UGUoIm5nVmFsdWUiLGEpLHdlKCkseHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gTHFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IikoMSwiYXBwLXNvZnQtc2VsZWN0Iiw1'@;
put 'MSksSHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS5jb2xJbmRleDtyZXR1cm4geHQoWmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxHcigidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS5jb2wsdj1aZSgpO3JldHVybiBx'@;
put 'cih2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSx4dChoKX0pLEh0KCJvbklucHV0RXZlbnQiLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLGY9aC5jb2wsdj1oLmNvbEluZGV4O3JldHVybiB4dChaZSgpLm9uUmVjb3JkRHJvcGRvd25D'@;
put 'aGFuZ2UoZi5rZXksdikpfSksYnQoMixBcWUsMiwyLCJvcHRpb24iLDUyKSxiZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPVplKCkuY29sLGg9WmUoKTt3ZSgpLFdyKCJ2YWx1ZSIsaC5jdXJyZW50UmVjb3JkW2Qua2V5XSksUGUoImlucHV0SWQiLGQua2V5KSx3ZSgpLFBlKCJuZ0Zvck9m'@;
put 'IixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIElxZShjLGwpe2lmKDEmYyYmKGdlKDAsIm9wdGlvbiIsNTYpLHplKDEpLGJlKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLiRpbXBsaWNpdDtQZSgidmFsdWUiLGEpLHdlKCkseHIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gUnFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwic2VsZWN0Iiw1NCksSHQoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS5jb2xJbmRleDtyZXR1'@;
put 'cm4geHQoWmUoKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLmNvbCx2PVplKCk7cmV0dXJuIHFyKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLHh0'@;
put 'KGgpfSksYnQoMSxJcWUsMiwyLCJvcHRpb24iLDU1KSxiZSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1aZSgpLmNvbCxoPVplKCk7V3IoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pLHdlKCksUGUoIm5nRm9yT2YiLG51bGw9PWguY3VycmVudFJlY29yZFZhbGlkYXRvcnx8bnVs'@;
put 'bD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEuc291cmNlKX19ZnVuY3Rpb24gT3FlKGMsbCl7aWYoMSZjJiZidCgwLExxZSwzLDMsImRpdiIsNTApKDEsUnFlLDIsMiwibmctdGVtcGxhdGUiLG51bGwsMixvdSksMiZjKXtjb25zdCBhPWwuY29s'@;
put 'LGQ9WGkoMiksaD1aZSgpO1BlKCJuZ0lmIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/bnVsbDpoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuaGFzRHFSdWxlcyhhLmtleSxEYSgyLG9xZSkpKSgibmdJZkVsc2UiLGQpfX1sZXQgUHFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'YSxkKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5jdXJyZW50UmVj'@;
put 'b3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50UmVjb3JkRXJyb3JzPVtdLHRoaXMub25SZWNvcmRDaGFuZ2U9bmV3IElyLHRoaXMub25SZWNvcmRJbnB1dEZvY3VzZWQ9bmV3IElyLHRoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQ9bmV3IEly'@;
put 'LHRoaXMub25SZWNvcmRFZGl0Q2xvc2U9bmV3IElyLHRoaXMub25SZWNvcmRFZGl0Q29uZmlybT1uZXcgSXIsdGhpcy5vbk5leHRSZWNvcmQ9bmV3IElyLHRoaXMub25QcmV2aW91c1JlY29yZD1uZXcgSXIsdGhpcy5jdXJyZW50UmVjb3JkSW52YWxpZENvbHM9W10sdGhpcy5nZW5lcmF0ZUVk'@;
put 'aXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlzLmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5vcmlnaW5hbE9yZGVyPShoLGYpPT4wfW5nT25Jbml0'@;
put 'KCl7fXZhbGlkYXRlUmVjb3JkQ29sKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9PntoLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3I/LmV4ZWN1dGVIb3RWYWxpZGF0b3IoYSxkLFQ9PntmKFQpfSl9KX0pKCl9cmVjb3JkRGF0ZUNo'@;
put 'YW5nZShhLGQpe2xldCBoPXRoaXMuY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSxmPWg/aC5kYXRlRm9ybWF0OiIiO3RoaXMuY3VycmVudFJlY29yZCYmKHRoaXMuY3VycmVudFJlY29yZFtkXT11SygpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1'@;
put 'cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJlY29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3RoaXMub25SZWNv'@;
put 'cmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTphLGNvbDpkfSl9b25SZWNvcmRJbnB1dEZvY3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2EudGFyZ2V0LnZh'@;
put 'bHVlPWEudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9cmVjb3JkSW5wdXRDaGFuZ2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yPy5nZXRSdWxlKGQpLHY9YS50YXJnZXQudmFsdWU7aC5oZWxw'@;
put 'ZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgzMDAsKCk9PntoLnZhbGlkYXRlUmVjb3JkQ29sKGYsdikudGhlbihUPT57Y29uc3QgWT1oLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmRleE9mKGQpO1Q/WT4tMSYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuc3BsaWNlKFksMSk6WTwwJiZo'@;
put 'LmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5wdXNoKGQpfSl9KX0pKCl9b25OZXh0UmVjb3JkQ2xpY2soKXt0aGlzLm9uTmV4dFJlY29yZC5lbWl0KCl9b25QcmV2aW91c1JlY29yZENsaWNrKCl7dGhpcy5vblByZXZpb3VzUmVjb3JkLmVtaXQoKX1jb3B5VG9DbGlwKGEpe2NvbnN0IGQ9ZG9j'@;
put 'dW1lbnQucXVlcnlTZWxlY3RvcigiI3JlY29yZE1vZGFsUmVmIC5tb2RhbC10aXRsZSIpO2lmKGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTtoLnN0eWxlLnBvc2l0aW9uPSJmaXhlZCIsaC5zdHlsZS5sZWZ0PSIwIixoLnN0eWxlLnRvcD0iMCIsaC5zdHls'@;
put 'ZS5vcGFjaXR5PSIwIixoLnN0eWxlLnpJbmRleD0iNTAwMCIsaC52YWx1ZT1hLGQuYXBwZW5kQ2hpbGQoaCksaC5mb2N1cygpLGguc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxkLnJlbW92ZUNoaWxkKGgpLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPWF9fWdlbmVyYXRl'@;
put 'RWRpdFJlY29yZFVybCgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aWYoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpYS5jb3B5VG9DbGlwKGEuZ2VuZXJhdGVkUmVjb3JkVXJsKTtlbHNle2EuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMDtjb25zdCBkPVtdO2EuaGVhZGVy'@;
put 'UGtzLmZvckVhY2goaD0+e2xldCBmPSJDIix2PSIiO2ZvcihsZXQgVD0wO1Q8YS5jZWxsVmFsaWRhdGlvbi5sZW5ndGg7VCsrKXtjb25zdCBZPWEuY2VsbFZhbGlkYXRpb25bVF07aWYoWS5kYXRhPT09aCl7KCJudW1lcmljIj09PVkudHlwZXx8ImRhdGUiPT09WS50eXBlfHwidGltZSI9PT1Z'@;
put 'LnR5cGUpJiYoZj0iTiIpO2JyZWFrfX12PSJDIj09PWY/YCcke2EuY3VycmVudFJlY29yZFtoXX0nYDphLmN1cnJlbnRSZWNvcmRbaF0udG9TdHJpbmcoKSxkLnB1c2goe0dST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0xPR0lDOiJBTkQiLFNVQkdST1VQX0lEOjAsVkFSSUFCTEVfTk06aCxP'@;
put 'UEVSQVRPUl9OTToiPSIsUkFXX1ZBTFVFOnZ9KX0pLGQubGVuZ3RoPjAmJmEubGliZHMmJih5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyxkKS50aGVuKGg9PnthLnF1ZXJ5RmlsdGVyPXtpZDpoLnJlc3VsdFswXS5GSUxURVJfUkssdGFibGU6aC5yZXN1bHRbMF0u'@;
put 'RklMVEVSX1RBQkxFfTtjb25zdCBUPWxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSsiIy9lZGl0b3IvZWRpdC1yZWNvcmQvIithLnF1ZXJ5RmlsdGVyLnRhYmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkO2EuY29weVRvQ2xpcChUKSxhLmdlbmVyYXRlRWRpdFJlY29yZFVybExvYWRpbmc9ITEs'@;
put 'YS5maWx0ZXI9ITF9KS5jYXRjaChoPT57YS5zdWJtaXRMb2FkaW5nPSExfSkpfX0pKCl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX10cmFja0J5Rm4oYSxkKXtyZXR1cm4gYX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g'@;
put 'bmV3KGR8fGMpKHN0KGRoKSxzdChjdSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdC1yZWNvcmQiXV0saW5wdXRzOntjdXJyZW50UmVjb3JkOiJjdXJyZW50UmVjb3JkIixyZWNvcmRBY3Rpb246InJlY29yZEFjdGlvbiIsbGliZHM6'@;
put 'ImxpYmRzIixxdWVyeUZpbHRlcjoicXVlcnlGaWx0ZXIiLGZpbHRlcjoiZmlsdGVyIixzdWJtaXRMb2FkaW5nOiJzdWJtaXRMb2FkaW5nIixoZWFkZXJQa3M6ImhlYWRlclBrcyIsY2VsbFZhbGlkYXRpb246ImNlbGxWYWxpZGF0aW9uIixjdXJyZW50UmVjb3JkSW5kZXg6ImN1cnJlbnRSZWNv'@;
put 'cmRJbmRleCIsY3VycmVudFJlY29yZExvYWRpbmdzOiJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLGN1cnJlbnRSZWNvcmRFcnJvcnM6ImN1cnJlbnRSZWNvcmRFcnJvcnMiLGN1cnJlbnRSZWNvcmRWYWxpZGF0b3I6ImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IifSxvdXRwdXRzOntvblJlY29yZENo'@;
put 'YW5nZToib25SZWNvcmRDaGFuZ2UiLG9uUmVjb3JkSW5wdXRGb2N1c2VkOiJvblJlY29yZElucHV0Rm9jdXNlZCIsb25SZWNvcmREcm9wZG93bkNoYW5nZWQ6Im9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkIixvblJlY29yZEVkaXRDbG9zZToib25SZWNvcmRFZGl0Q2xvc2UiLG9uUmVjb3JkRWRp'@;
put 'dENvbmZpcm06Im9uUmVjb3JkRWRpdENvbmZpcm0iLG9uTmV4dFJlY29yZDoib25OZXh0UmVjb3JkIixvblByZXZpb3VzUmVjb3JkOiJvblByZXZpb3VzUmVjb3JkIn0sZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1siYXV0b2NvbXBsZXRlIiwiIl0sWyJjaGFyVGV4dGFyZWEiLCIiXSxbIm90'@;
put 'aGVyX3RoYW5fc29mdF9zZWxlY3QiLCIiXSxbImlkIiwicmVjb3JkTW9kYWxSZWYiLDEsInJlY29yZC1lZGl0LW1vZGFsIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbNCwibmdJZiJdLFsxLCJtb2Rh'@;
put 'bC1ib2R5Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciB3LTEwMCBweS0xMCIsNCwibmdJZiJdLFsxLCJtb2RhbC1mb290ZXIiLCJwLTAiLCJjbHItZ2FwLTUiLCJjbHItZ2FwLW1kLTAiLCJjbHItZmxleC1jb2x1bW4iLCJjbHIt'@;
put 'ZmxleC1tZC1yb3ciXSxbImNsYXNzIiwidmFsaWRhdGlvbi1pbmZvLWFsZXJ0IiwzLCJ2aXNpYmlsaXR5IiwiY2xyQWxlcnRDbG9zYWJsZSIsImNsckFsZXJ0VHlwZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJwcmV2LW5leHQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0'@;
put 'bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwicG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJd'@;
put 'LFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJzb2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5r'@;
put 'IiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3NpdGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQs'@;
put 'Im5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsxLCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9udC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2Vs'@;
put 'bC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRpb24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xh'@;
put 'c3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVudHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNo'@;
put 'Q2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJu'@;
put 'aW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYiXSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4'@;
put 'dCIsMSwibm90LWNoYXIiLDMsImZvY3VzaW4iLCJwYXN0ZSIsImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQi'@;
put 'LCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiLCJtYXhMZW5ndGgiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJj'@;
put 'b2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2'@;
put 'YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGlj'@;
put 'ayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQiLCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzMsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsInZhbHVlIiwiaW5wdXRJ'@;
put 'ZCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5j'@;
put 'dGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1IbigpO2dlKDAsImNsci1tb2RhbCIsMykoMSwiaDMiLDQpLHplKDIpLGJ0KDMsbHFlLDMsMiwibmctY29udGFpbmVyIiw1KSxiZSgpLGdlKDQsImRpdiIsNiksYnQoNSxjcWUsMywwLCJkaXYiLDcpKDYsRXFlLDMsNSwibmctY29udGFpbmVyIiw1'@;
put 'KSxiZSgpLGdlKDcsImRpdiIsOCksYnQoOCxUcWUsNCw0LCJjbHItYWxlcnQiLDkpKDksRHFlLDksMywiZGl2IiwxMCksZ2UoMTAsImRpdiIpKDExLCJidXR0b24iLDExKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLGguY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEs'@;
put 'eHQoaC5jbG9zZVJlY29yZEVkaXQoKSl9KSx6ZSgxMiwiIENhbmNlbCAiKSxiZSgpLGdlKDEzLCJidXR0b24iLDEyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGguY29uZmlybVJlY29yZEVkaXQoKSl9KSx6ZSgxNCwiIENvbmZpcm0gIiksYmUoKSgpKCksYnQoMTUs'@;
put 'T3FlLDMsMywibmctdGVtcGxhdGUiLG51bGwsMCxvdSksYmUoKX0yJmQmJihQZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSx3ZSgyKSxaaCgiICIsIkFERCI9PT1oLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1oLmxpYmRz'@;
put 'P251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksd2UoKSxQZSgibmdJZiIsIkVESVQiPT09aC5yZWNvcmRBY3Rpb24pLHdlKDIpLFBlKCJuZ0lmIixoLmFkZFJlY29yZExvYWRpbmcpLHdlKCksUGUoIm5n'@;
put 'SWYiLCFoLmFkZFJlY29yZExvYWRpbmcpLHdlKDIpLFBlKCJuZ0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLHdlKDQpLFBlKCJkaXNhYmxlZCIsaC5jdXJyZW50UmVjb3Jk'@;
put 'SW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxLMSxVZCxjZixuZCxyZCxUbCx0ZCxjYSxvYSxaYixncmUsV2IsWmEsQnUsWXUsZ04samIsRE4sQU4sYWQsd04sejcsalRlLHpuZSx5Y2UscGtdLHN0eWxlczpbIi5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLm5h'@;
put 'bWUtaW5wdXQtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO21heC13aWR0aDoyNjBweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09N'@;
put 'UCVdICAgLmNlbGwtZGVzY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjMwcHg7bWFyZ2luLXRvcDoxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5pbnB1dHMtd3JhcHBlcltfbmdj'@;
put 'b250ZW50LSVDT01QJV17ZmxleDoxO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg'@;
put 'ICA+Kjpub3QoLmRhdGUtZmllbGQpOm5vdChjbHItc2VsZWN0LWNvbnRhaW5lcil7ZmxleDoxfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0u'@;
put 'cmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29s'@;
put 'dW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVj'@;
put 'dHtkaXNwbGF5OmJsb2NrO3dpZHRoOjIyNHB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0'@;
put 'OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucmVjb3JkLWVkaXQtbW9kYWxb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29s'@;
put 'dW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1z'@;
put 'b2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBw'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVk'@;
put 'aXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2Rh'@;
put 'bFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjojMDAwO2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1z'@;
put 'ZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1t'@;
put 'b2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5nOjEwcHggMjBweCAxMHB4IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxl'@;
put 'Y3QtY29udGFpbmVyIHNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1v'@;
put 'ZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2Zv'@;
put 'bnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dHt3aWR0aDoxMDAlO2JvcmRlcjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAg'@;
put 'IGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXN7YmFja2dyb3VuZDpub25lO2JvcmRlcjowIWltcG9ydGFudH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uLCAu'@;
put 'cmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAgIGNsci1pbnB1dC1jb250YWluZXIuaW52YWxpZC1kYXRhe2JvcmRlci1jb2xvcjpyZWR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWRpYWxvZ3t3aWR0aDo4MHZ3fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5j'@;
put 'bHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhe3dpZHRoOjEwMCU7cmVzaXplOm5vbmU7Ym9yZGVyLWNvbG9yOiM5OTl9LnJlY29yZC1lZGl0LW1vZGFs'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYS5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZDtvdXRsaW5lOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0'@;
put 'YXJlYS5ub3QtY2hhcntmb250LWZhbWlseTpMdWNpZGEgQ29uc29sZSxNb25hY28sbW9ub3NwYWNlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5nZW5lcmF0ZS1yZWNvcmQtdXJse3JpZ2h0OjQwcHg7dG9wOjQwcHg7Zm9udC1zaXplOjEycHh9LnJlY29yZC1l'@;
put 'ZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmwtYnV0dG9ue3JpZ2h0OjI1cHg7dG9wOjVweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtaGVhZGVye3BhZGRpbmc6MCAwIDFyZW19LnJlY29yZC1lZGl0'@;
put 'LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZvb3RlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1mb290ZXIgLmFs'@;
put 'ZXJ0e21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMTBweH0uZm9jdXNhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tib3gtc2hhZG93OjAgMCAzcHggIzVhYTIyMH0uZW50cnktaW5wdXQtbGVmdC1vZmZzZXRbX25nY29udGVudC0lQ09NUCVde2xlZnQ6LTMwcHh9LnZh'@;
put 'bGlkYXRpb24taW5mby1hbGVydFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzEwcHh9Il19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRnFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIsMyksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCkseHIoIiAiLGEsIiAiKX19'@;
put 'bGV0IEhxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2ZpbmlzaH0iPT09'@;
put 'YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRlc0xpc3QubGVu'@;
put 'Z3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRlcigpe3RoaXMu'@;
put 'c3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRo'@;
put 'aXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siYXBwLXVwbG9hZC1zdGF0ZXIiXV0sZGVjbHM6NSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwibS0wIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidGV4dC1jZW50ZXIiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iLCJ2ZXJ0aWNhbC1hbGlnbi1taWRkbGUiXSxbMSwibS0wIl1d'@;
put 'LHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiZGl2IiksYnQoMSxGcWUsMiwxLCJwIiwwKSxiZSgpLGdlKDIsImRpdiIsMSkoMywic3BhbiIsMiksemUoNCwiTG9hZGluZy4uLiIpLGJlKCkoKSksMiZkJiYod2UoKSxQZSgibmdGb3JPZiIsaC5wcm9jZXNzZWRTdGF0ZXMpKX0s'@;
put 'ZGVwZW5kZW5jaWVzOltMc10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfXBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3RleHQtYWxpZ246Y2VudGVyfSJdfSl9cmV0dXJuIGN9KSgpLE5xZT0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gYS5y'@;
put 'ZXBsYWNlKC9cfC9nLCIgfCAiKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NXBpcGU9RHMoe25hbWU6InBrU3BhY2VTZXBhcmF0ZSIsdHlwZTpjLHB1cmU6ITB9KX1yZXR1cm4gY30pKCkseGNlPSgoKT0+'@;
put 'e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixUPS8oXGQr'@;
put 'KShcZHszfSkvO2Zvcig7VC50ZXN0KGYpOylmPWYucmVwbGFjZShULCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cGlwZT1Ecyh7bmFtZToidGhvdXNhbmRTZXBh'@;
put 'cmF0b3IiLHR5cGU6YyxwdXJlOiEwfSl9cmV0dXJuIGN9KSgpO2NvbnN0IFZxZT1bImh0Il0sanFlPVsidXBsb2FkU3RhdGVyIl0sQnFlPVsicXVlcnlGaWx0ZXIiXSxZcWU9WyJob3RJbnN0YW5jZSJdLHpxZT1bImZpbGVVcGxvYWRJbnB1dCJdLFVxZT0oYyxsKT0+KHtsaWJOYW1lOmMsdGFi'@;
put 'bGVOYW1lOmx9KSxrY2U9KCk9PlsiIiwiICJdLFpxZT1jPT4oe2hlYWRlckJhckZpbHRlcjpjfSksV3FlPSgpPT5bIi9ob21lIl07ZnVuY3Rpb24gR3FlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw2NCkoMSwic3BhbiIsNjUpKDIsImxhYmVsIiw2NiksemUoMywiIEJy'@;
put 'b3dzZSAiKSxiZSgpKCksZ2UoNCwiaW5wdXQiLDY3LDMpLEh0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgpLmdldEZpbGVEZXNjKGgpKX0pLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSg0KSxQZSgidXBsb2FkZXIiLGEudXBsb2FkZXIpfX1mdW5jdGlv'@;
put 'biAkcWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDY4KSgxLCJidXR0b24iLDY5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuZ2V0RmlsZSgpKX0pLHplKDIsIiBVcGxvYWQgIiksYmUoKSgpfTImYyYmKHdlKCksUGUoImRpc2FibGVk'@;
put 'IiwhMCkpfWZ1bmN0aW9uIHFxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsNzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksemUoMSwiIENsb3NlICIpLGJlKCl9aWYoMiZjKXtjb25zdCBh'@;
put 'PVplKCk7UGUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIEtxZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsNzEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5zaG93VXBs'@;
put 'b2FkTW9kYWw9ITEpfSksemUoMSwiIFNraXAgIiksYmUoKX19ZnVuY3Rpb24gWHFlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2Iiw3MiksSnQoMSwiYXBwLXVwbG9hZC1zdGF0ZXIiLG51bGwsNCksYmUoKSl9ZnVuY3Rpb24gSnFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYXBwLWVk'@;
put 'aXQtcmVjb3JkIiw3MyksSHQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5vblJlY29yZElucHV0Rm9jdXMo'@;
put 'aCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNSZWNvcmQiLGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkub25QcmV2aW91c1JlY29yZCgpKX0pLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7UGUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMiLGEubGliZHMp'@;
put 'KCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3JkSW5kZXgiLGEu'@;
put 'Y3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3VycmVudEVkaXRS'@;
put 'ZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBRcWUoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDc0KSxKdCgxLCJwcm9ncmVzcyIpLGJlKCkpfWZ1bmN0aW9uIGVLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNzUpKDEsInNwYW4iLDc2KSxKdCgyLCJjbHItaWNvbiIsNzcp'@;
put 'LHplKDMsIkJhY2sgdG8gdGFibGUgc2VsZWN0aW9uICIpLGJlKCksZ2UoNCwic3BhbiIsNzgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS52aWV3Ym94TWFuYWdlcigpKX0pLEp0KDUsImNsci1pY29uIiw3OSksemUoNiwiIFZpZXdib3hlcyAiKSxiZSgpKCl9'@;
put 'MiZjJiYod2UoKSxQZSgicm91dGVyTGluayIsRGEoMSxXcWUpKSl9ZnVuY3Rpb24gdEtlKGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsODUpfWZ1bmN0aW9uIG5LZShjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDg3KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'WmUoMyk7d2UoKSx4cigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gcktlKGMsbCl7MSZjJiYocmkoMCksYnQoMSxuS2UsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NiksaWkoKSl9ZnVuY3Rpb24gaUtlKGMsbCl7aWYoMSZjJiYocmkoMCksemUoMSksUGEoMiwidGhvdXNhbmRTZXBh'@;
put 'cmF0b3IiKSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxZeCgiICgiLFk1KDIsNCxhLmRhdGFTb3VyY2UubGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAiLGEuY29scy5sZW5ndGgsIiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wi'@;
put 'OiIgY29scyIsIikgIil9fWZ1bmN0aW9uIG9LZShjLGwpezEmYyYmKHJpKDApLHplKDEsIiAoMCByb3dzKSAiKSxpaSgpKX1mdW5jdGlvbiBzS2UoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLGlLZSwzLDcsIm5nLWNvbnRhaW5lciIsMzkpKDIsb0tlLDIsMCwibmctY29udGFpbmVyIiwzOSks'@;
put 'aWkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKCksUGUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSx3ZSgpLFBlKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gYUtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiaDQiLDgwKSgxLCJjbHItdG9vbHRpcCIpKDIs'@;
put 'ImNsci1pY29uIiw4MSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmRhdGFzZXRJbmZvPSEwKX0pLGJlKCksYnQoMyx0S2UsMSwwLCJjbHItaWNvbiIsODIpLGdlKDQsInNwYW4iLDgzKSx6ZSg1KSxnZSg2LCJhIiw4NCksemUoNyksYmUoKSgpLGJ0KDgscktl'@;
put 'LDIsMCwibmctY29udGFpbmVyIiwzOSksYmUoKSxidCg5LHNLZSwzLDIsIm5nLWNvbnRhaW5lciIsMzkpLGJlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1aZSgpO3dlKDMpLFBlKCJuZ0lmIixhLnRhYmxlTmFtZS5pbmNsdWRlcygiLUZDIikpLHdlKDIpLHhyKCIgIixhLmxpYk5hbWUs'@;
put 'Ii4iKSx3ZSgpLFBlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLHdlKCkscHIoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLHdlKCksUGUoIm5nSWYiLGQuZHNOb3RlJiZkLmRzTm90ZS5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVu'@;
put 'Y3Rpb24gbEtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiYnV0dG9uIiw5NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEp0KDEsImNsci1pY29uIiw5NSksZ2UoMiwic3BhbiIpLHplKDMsIlVwbG9h'@;
put 'ZCIpLGJlKCkoKX19ZnVuY3Rpb24gY0tlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiYnV0dG9uIiw4OSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5vcGVuUWIoKSl9KSxKdCgyLCJjbHItaWNvbiIsOTApLGdlKDMsInNwYW4iKSx6'@;
put 'ZSg0LCJGaWx0ZXIiKSxiZSgpKCksZ2UoNSwiYnV0dG9uIiw5MSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5lZGl0VGFibGUoKSl9KSxKdCg2LCJjbHItaWNvbiIsOTIpLGdlKDcsInNwYW4iKSx6ZSg4LCJFZGl0IiksYmUoKSgpLGJ0KDksbEtlLDQsMCwi'@;
put 'YnV0dG9uIiw5MyksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoOSksUGUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gdUtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSg0KTt3ZSgpLHQwKCJU'@;
put 'byB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1m'@;
put 'dW5jdGlvbiBkS2UoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksYnQoMSx1S2UsMiwyLCJzcGFuIiwzOSksYmUoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKCksUGUoIm5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gaEtl'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiYnV0dG9uIiw5NiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5jYW5jZWxFZGl0KCkpfSksSnQoMiwiY2xyLWljb24iLDk3KSxnZSgzLCJzcGFuIiksemUoNCwiQ2FuY2VsIiksYmUoKSgp'@;
put 'LGdlKDUsImNsci10b29sdGlwIikoNiwiYnV0dG9uIiw5OCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIHh0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUm93KCkpfSksSnQoNywiY2xyLWljb24iLDk5KSx6ZSg4LCJBZGQg'@;
put 'Um93ICIpLGJlKCksYnQoOSxkS2UsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NiksYmUoKSxnZSgxMCwiYnV0dG9uIiw0NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5jaGVja1NhdmUoKSl9KSxKdCgxMSwiY2xyLWljb24iLDEwMCksemUoMTIsIlN1'@;
put 'Ym1pdCAiKSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO3dlKDYpLGJyKCJkYy1sb2NrZWQtY29udHJvbCIsYS5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSb3cpLFBlKCJjbHJMb2FkaW5nIixhLmFkZGluZ05ld1Jvdyl9fWZ1bmN0aW9uIGZLZShjLGwpe2lmKDEmYyl7Y29uc3Qg'@;
put 'YT1IbigpO2dlKDAsImJ1dHRvbiIsMTA0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITApfSksSnQoMSwiY2xyLWljb24iLDkyKSxnZSgyLCJzcGFuIiksemUoMywiRWRpdCIpLGJlKCkoKX19ZnVuY3Rpb24gcEtlKGMs'@;
put 'bCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiYnV0dG9uIiwxMDEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikuZGlzY2FyZFNvdXJjZUZpbGU9ITApfSksSnQoMiwiY2xyLWljb24iLDk3KSxnZSgzLCJzcGFuIiksemUoNCwiRGlzY2FyZCBm'@;
put 'aWxlIiksYmUoKSgpLGJ0KDUsZktlLDQsMCwiYnV0dG9uIiwxMDIpLGdlKDYsImJ1dHRvbiIsMTAzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLnN1Ym1pdEV4Y2VsKCkpfSksSnQoNywiY2xyLWljb24iLDEwMCksemUoOCwiIFN1Ym1pdCAiKSxiZSgpLGlp'@;
put 'KCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO3dlKDUpLFBlKCJuZ0lmIixhLmhvdFRhYmxlLnJlYWRPbmx5KSx3ZSgpLFBlKCJjbHJMb2FkaW5nIixhLnVwbG9hZExvYWRpbmcpfX1mdW5jdGlvbiBtS2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDg4KSxidCgxLGNLZSwxMCwxLCJuZy1jb250'@;
put 'YWluZXIiLDM5KSgyLGhLZSwxMywzLCJuZy1jb250YWluZXIiLDM5KSgzLHBLZSw5LDIsIm5nLWNvbnRhaW5lciIsMzkpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuaG90VGFibGUucmVhZE9ubHkmJiFhLnVwbG9hZFByZXZpZXcpLHdlKCksUGUoIm5nSWYiLCFh'@;
put 'LmhvdFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSx3ZSgpLFBlKCJuZ0lmIixhLnVwbG9hZFByZXZpZXcpfX1mdW5jdGlvbiBnS2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDEwNSkoMSwic3BhbiIpLHplKDIsIkZJTFRFUiA6ICIpLGdlKDMsImIiKSx6ZSg0KSxiZSgpKCko'@;
put 'KSksMiZjKXtjb25zdCBhPVplKCk7d2UoNCkscHIoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiBfS2UoYyxsKXsxJmMmJihyaSgwKSxnZSgxLCJzcGFuIiwxMDgpLHplKDIsIiBMb2FkaW5nLi4uICIpLGJlKCksZ2UoMywiZGl2IikoNCwiaDMiKSx6ZSg1LCJMb2FkaW5nIHRhYmxlIiksYmUoKSgp'@;
put 'LGlpKCkpfWZ1bmN0aW9uIHZLZShjLGwpezEmYyYmKHJpKDApLGdlKDEsInNwYW4iKSxKdCgyLCJjbHItaWNvbiIsMTA5KSxiZSgpLGdlKDMsImRpdiIpKDQsImgzIiksemUoNSwiTG9hZGluZyB0YWJsZSBlcnJvciIpLGJlKCkoKSxpaSgpKX1mdW5jdGlvbiB5S2UoYyxsKXtpZigxJmMmJihn'@;
put 'ZSgwLCJkaXYiLDEwNikoMSwiZGl2IiwxMDcpLGJ0KDIsX0tlLDYsMCwibmctY29udGFpbmVyIiwzOSkoMyx2S2UsNiwwLCJuZy1jb250YWluZXIiLDM5KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLHdlKCksUGUoIm5nSWYiLGEu'@;
put 'Z2V0ZGF0YUVycm9yKX19ZnVuY3Rpb24gYktlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgpLHQwKCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09'@;
put 'PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiB3S2UoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTIpLGJ0KDEsYktlLDIs'@;
put 'Miwic3BhbiIsMzkpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIE1LZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMTApLEh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCk7cmV0dXJuIHh0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xpY2soKSl9KSxKdCgyLCJjbHItaWNvbiIsOTkpLHplKDMsIiBBZGQgUmVjb3JkICIpLGJlKCksYnQoNCx3S2UsMiwx'@;
put 'LCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTEpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoKSxicigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gQ0tlKGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIsMTEzKSx6ZSgxKSxKdCgy'@;
put 'LCJjb250YWN0LWxpbmsiKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgpLHhyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gU0tlKGMsbCl7aWYoMSZjJiYoZ2Uo'@;
put 'MCwic3BhbiIsMTI1KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSx0MCgiT25seSAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgIiwxPT09YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ/InJvdyI6InJvd3MiLCIgd2ls'@;
put 'bCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiB4S2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDEyNikoMSwiZGl2IiwxMjcpKDIsImxhYmVsIiwxMjgpLHpl'@;
put 'KDMsIk1lc3NhZ2UiKSxiZSgpLGdlKDQsInRleHRhcmVhIiwxMjkpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpO3JldHVybiBxcihmLm1lc3NhZ2UsaCl8fChmLm1lc3NhZ2U9aCkseHQoaCl9KSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUo'@;
put 'Mik7d2UoNCksV3IoIm5nTW9kZWwiLGEubWVzc2FnZSksUGUoImRpc2FibGVkIiwhYS52YWxpZGF0aW9uRG9uZSkoInZhbHVlIixhLnZhbGlkYXRpb25Eb25lPyIiOiJQbGVhc2Ugd2FpdCB3aGlsZSB3ZSB2YWxpZGF0ZSAiK2EuY29scy5sZW5ndGgqYS5tb2RpZmVkUm93c0luZGV4ZXMubGVu'@;
put 'Z3RoKyIgY2VsbHMuIil9fWZ1bmN0aW9uIGtLZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTE0KSgxLCJkaXYiLDExNSkoMiwiZGl2IiwxMTYpKDMsImRpdiIsMTE3KSg0LCJidXR0b24iLDExOCksSnQoNSwiY2xyLWljb24iLDExOSksYmUoKSxnZSg2LCJoMyIsOCks'@;
put 'emUoNyksYmUoKSgpLGdlKDgsImRpdiIsOSksYnQoOSxTS2UsMiwyLCJzcGFuIiwxMjApKDEwLHhLZSw1LDMsImRpdiIsMTIxKSxiZSgpLGdlKDExLCJkaXYiLDEyMikoMTIsImJ1dHRvbiIsMTIzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpO3JldHVybiB4dCho'@;
put 'LnNhdmVUYWJsZShoLmhvdFRhYmxlLmRhdGEpKX0pLHplKDEzLCIgU3VibWl0ICIpLGJlKCksZ2UoMTQsImJ1dHRvbiIsMTI0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpO3JldHVybiBoLmNhbmNlbFN1Ym1pdCgpLGguc3VibWl0PSExLHh0KGgudmFsaWRhdGlv'@;
put 'bkRvbmU9MCl9KSx6ZSgxNSwiIENhbmNlbCAiKSxiZSgpKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoNyksWmgoIiBTdWJtaXQgZm9yIEFwcHJvdmFsICgiLGEucm93c0NoYW5nZWQucm93c0FkZGVkLCIgYWRkZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzVXBkYXRlZCwiIHVwZGF0'@;
put 'ZWQsICIsYS5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCwiIGRlbGV0ZWQpICIpLHdlKDIpLFBlKCJuZ0lmIixhLnRvdGFsUm93c0NoYW5nZWQ+YS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQmJmEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09YS5J'@;
put 'bmZpbml0eSksd2UoKSxQZSgibmdJZiIsYS50YWJsZVRydWUpLHdlKDIpLFBlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpfX1mdW5jdGlvbiBFS2UoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiwxMzApLHplKDEpLFBhKDIsInBrU3BhY2VTZXBhcmF0ZSIpLGJlKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLiRpbXBsaWNpdCxkPVplKCk7d2UoKSx0MCgiIE9uIHJvdyAiLGErMSwiOiAiLHdjKDIsMixkLnBrRmllbGRzW2FdLnJlcGxhY2UoInwiLCIiKSksIiAiKX19ZnVuY3Rpb24gVEtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBs'@;
put 'aWNpdDt3ZSgpLFpoKCIgIixhLmNvbCwiKCIsYS5sZW4sIiksICIsYS52YWwsIiAiKX19ZnVuY3Rpb24gREtlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwxMzEpKDEsImRpdiIsMTMyKSgyLCJkaXYiLDExNikoMywiZGl2IiwxMTcpKDQsImJ1dHRvbiIsMTE4KSxKdCg1'@;
put 'LCJjbHItaWNvbiIsMTE5KSxiZSgpLGdlKDYsImgzIiw4KSx6ZSg3LCJFcnJvciIpLGJlKCkoKSxnZSg4LCJkaXYiLDkpKDksInAiKSx6ZSgxMCwiWW91IGNhbm5vdCBzdWJtaXQgZW1wdHkgY2xhdXNlcyIpLGJlKCkoKSxnZSgxMSwiZGl2IiwyMykoMTIsImJ1dHRvbiIsNDQpLEh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5udWxsVmFyaWFibGVzPSExKX0pLHplKDEzLCIgT2sgIiksYmUoKSgpKCkoKSgpfX1mdW5jdGlvbiBBS2UoYyxsKXsxJmMmJkp0KDAsImFwcC1xdWVyeSIsbnVsbCw1KX1mdW5jdGlvbiBMS2UoYyxsKXsxJmMmJihnZSgwLCJwIiwx'@;
put 'MzMpLHplKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGJlKCkpfWNvbnN0IEVjZT1SKDk0MjQ4KSxUY2U9Uig4MzgzOCkuQnVmZmVyO2xldCByQT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuY250PTA7c3RhdGljI3Q9dGhpcy5ub25Qa0NudD0wO3N0YXRp'@;
put 'YyNuPXRoaXMubGFzdENlbGw9MDtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1mLHRoaXMuaGVscGVyU2VydmljZT12LHRo'@;
put 'aXMucm91dGVyPVQsdGhpcy5yb3V0ZT1ZLHRoaXMuc2FzU2VydmljZT1yZSx0aGlzLmNkZj1mZSx0aGlzLmhvdFJlZ2lzdGVyZXI9X2UsdGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdD1uZXcgbjEsdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0PW5ldyBuMSx0aGlzLmhvdEluc3RhbmNlQ29tcExp'@;
put 'c3Q9bmV3IG4xLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3Q9bmV3IG4xLHRoaXMubWVzc2FnZT0iIix0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuY29scz1bXSx0aGlzLnJlc3RyaWN0aW9ucz17fSx0aGlzLmRhdGFzZXRJbmZvPSExLHRoaXMuZHNtZXRhPVtdLHRoaXMudmVyc2lv'@;
put 'bnM9W10sdGhpcy5kc05vdGU9IiIsdGhpcy52aWV3Ym94ZXM9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGhpZGRlbjohMCxjb2x1bW5zOltdLGhlaWdodDoiMTAwJSIsbWluU3BhcmVSb3dzOjEsbGljZW5zZUtleTp2b2lkIDAscmVh'@;
put 'ZE9ubHk6ITAsY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LHNldHRpbmdzOntjb250ZXh0TWVudTp7aXRlbXM6e2VkaXRfcm93OntuYW1lOiJFZGl0IHJvdyIsaGlkZGVuKCl7Y29uc3QgSmU9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7'@;
put 'aWYoIUplKXJldHVybiExO2NvbnN0IHR0PUplWzBdO3JldHVybiB0dC5mcm9tLnJvdyE9PXR0LnRvLnJvd30sY2FsbGJhY2s6KFdlLEplLHR0KT0+e2xldCB5dD1KZVswXTt5dC5zdGFydC5yb3c9PT15dC5lbmQucm93JiZ0aGlzLmVkaXRSZWNvcmQobnVsbCx5dC5zdGFydC5yb3cpfX0scm93'@;
put 'X2Fib3ZlOntuYW1lOiJJbnNlcnQgUm93IGFib3ZlIn0scm93X2JlbG93OntuYW1lOiJJbnNlcnQgUm93IGJlbG93In0scmVtb3ZlX3Jvdzp7bmFtZToiSWdub3JlIHJvdyJ9LGNvcHk6e25hbWU6IkNvcHkgd2l0aG91dCBoZWFkZXJzIn0sY29weV93aXRoX2NvbHVtbl9oZWFkZXJzOntuYW1l'@;
put 'OiJDb3B5IHdpdGggaGVhZGVycyJ9LGNvcHlfY29sdW1uX2hlYWRlcnNfb25seTp7bmFtZToiQ29weSBoZWFkZXJzIG9ubHkifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LHVuZG86e25hbWU6IlVuZG8ifSxyZWRvOntuYW1lOiJSZWRvIn19fX19LHRoaXMuaG90Q2VsbHNQcm9wUm93PW51bGws'@;
put 'dGhpcy5maWx0ZXI9ITEsdGhpcy5zdWJtaXRMb2FkaW5nPSExLHRoaXMudXBsb2FkTG9hZGluZz0hMSx0aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDowLHJvd3NEZWxldGVkOjAscm93c0FkZGVkOjB9LHRoaXMubW9kaWZlZFJvd3NJbmRleGVzPVtdLHRoaXMucXVlcnlFcnI9ITEsdGhp'@;
put 'cy5zdWNjZXNzRW5hYmxlPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLnBrRmllbGRzPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMSx0aGlzLmJhZEVkaXQ9ITEsdGhpcy5zYXZlTG9hZGluZz0hMSx0aGlzLmFwcHJvdmVycz1bXSx0aGlzLmVyclZh'@;
put 'bGlkYXRpb249ITEsdGhpcy5wa051bGw9ITEsdGhpcy5ub1BrTnVsbD0hMSx0aGlzLnRhYmxlRGF0YT1bXSx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiLHRoaXMuc2hvd0FwcHJvdmVycz0hMSx0aGlzLnBrRHVwcz0hMSx0aGlzLnZhbGlkYXRpb25Eb25lPTAsdGhp'@;
put 'cy5kdXBsaWNhdGVQa0luZGV4ZXM9W10sdGhpcy5jb2x1bW5IZWFkZXI9W10sdGhpcy5zcGVjSW5mbz1bXSx0aGlzLnRvb0xvbmc9ITEsdGhpcy5leGNlZWRDZWxscz1bXSx0aGlzLnVwbG9hZGVyPW5ldyBkY2UsdGhpcy51cGxvYWRVcmw9IiIsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlz'@;
put 'LnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsLHRoaXMuZGF0YT1bXSx0aGlzLmhlYWRlckFycmF5PVtdLHRoaXMuaG90RGF0YVNjaGVtYT17fSx0aGlzLmhlYWRlclNob3c9W10sdGhpcy5oZWFkZXJWaXNpYmxlPSEx'@;
put 'LHRoaXMuaGFzQmFzZURyb3Bab25lT3Zlcj0hMSx0aGlzLmhhc0Fub3RoZXJEcm9wWm9uZU92ZXI9ITEsdGhpcy5oZWFkZXJQa3M9W10sdGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZz0hMSx0aGlzLmRhdGVUaW1lSGVhZGVycz1bXSx0aGlzLnRpbWVIZWFkZXJzPVtdLHRoaXMuZGF0ZUhl'@;
put 'YWRlcnM9W10sdGhpcy54bFJ1bGVzPVtdLHRoaXMuZW5jb2Rpbmc9IlVURi04Iix0aGlzLmhlYWRlckNvbHVtbnM9W10sdGhpcy5jZWxsVmFsaWRhdGlvbj1bXSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Q9bmV3IG5uLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMuZmlsZVBhc3N3b3Jk'@;
put 'TW9kYWw9ITEsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5kaXNjYXJkU291cmNlRmlsZT0hMSx0aGlzLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEsdGhpcy5yZWNvcmRBY3Rpb249bnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3M9W10sdGhpcy5jdXJyZW50RWRpdFJlY29y'@;
put 'ZEVycm9ycz1bXSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSExLHRoaXMuZ2VuZXJhdGVkUmVjb3JkVXJsPW51bGwsdGhpcy5hZGRSZWNvcmRVcmw9bnVsbCx0aGlzLnJlY29yZE5ld09yUGtNb2RpZmllZD0hMSx0aGlz'@;
put 'LmFkZFJlY29yZExvYWRpbmc9ITEsdGhpcy5zaW5nbGVSb3dTZWxlY3RlZD0hMSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLmdldGRhdGFFcnJvcj0hMSx0aGlzLnplcm9GaWx0ZXJSb3dzPSExLHRoaXMudGFibGVGaWxlRHJhZ092ZXI9ITEsdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1b'@;
put 'XSx0aGlzLnZhbGlkYXRpb25UYWJsZUxpbWl0PTIwLHRoaXMuZXh0ZW5kZWRDZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLEVYVFJBX0NPTF9OQU1FOjEsRElTUExBWV9WQUxVRToyLERJU1BMQVlfVFlQRTozLFJBV19WQUxVRV9OVU06NCxSQVdfVkFMVUVfQ0hBUjo1LEZP'@;
put 'UkNFX0ZMQUc6Nn0sdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcz17RElTUExBWV9JTkRFWDowLERJU1BMQVlfVkFMVUU6MSxSQVdfVkFMVUU6Mn0sdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwPVtdLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZp'@;
put 'Y2UubGljZW5jZVN0YXRlLHRoaXMudGltZXNDbGlja2VkPTAseFVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0mJmVWZSgpLnJlZ2lzdGVyTGFuZ3VhZ2UoeFVbd2luZG93Lm5hdmlnYXRvci5sYW5ndWFnZV0pLHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgcWcsdGhpcy5wYXJzZVJlc3RyaWN0'@;
put 'aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9'@;
put 'PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5y'@;
put 'ZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVkaXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRo'@;
put 'aXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxkZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5y'@;
put 'ZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3Ro'@;
put 'Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJl'@;
put 'c3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQg'@;
put 'ZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1maWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9dXBkYXRlX3No'@;
put 'ZWV0X3JhbmdlKGEpe3ZhciBkPXtzOntyOjEvMCxjOjEvMH0sZTp7cjowLGM6MH19O09iamVjdC5rZXlzKGEpLmZpbHRlcihmdW5jdGlvbihoKXtyZXR1cm4iISIhPWguY2hhckF0KDApfSkubWFwKGxjLnV0aWxzLmRlY29kZV9jZWxsKS5mb3JFYWNoKGZ1bmN0aW9uKGgpe2Qucy5jPU1hdGgu'@;
put 'bWluKGQucy5jLGguYyksZC5zLnI9TWF0aC5taW4oZC5zLnIsaC5yKSxkLmUuYz1NYXRoLm1heChkLmUuYyxoLmMpLGQuZS5yPU1hdGgubWF4KGQuZS5yLGgucil9KSxhWyIhcmVmIl09bGMudXRpbHMuZW5jb2RlX3JhbmdlKGQpfWdldFJhbmdlQW5kU2hlZXQoYSl7bGV0IGQ9MCxoPTAsZj0t'@;
put 'MSx2PS0xLFQ9IiIsWT0hMSxyZT1bXSxfZT1bIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIsLi4udGhpcy5oZWFkZXJBcnJheV0ubWFwKEplPT5KZS50b0xvd2VyQ2FzZSgpKSxrZT1fZS5yZWR1Y2UoKEplLHR0KT0+KEplW3R0XT0tMSxKZSkse30pO3JldHVybiBhLlNoZWV0TmFt'@;
put 'ZXMuZm9yRWFjaChKZT0+e2lmKFkpcmV0dXJuO3JlPVtdLFQ9SmU7Y29uc3QgdHQ9YS5TaGVldHNbVF07aWYodGhpcy5kYXRhPWxjLnV0aWxzLnNoZWV0X3RvX2pzb24odHQse2hlYWRlcjoxLGJsYW5rcm93czohMSxkZWZ2YWw6IiJ9KSx0aGlzLmRhdGEubGVuZ3RoPD0xKXJldHVybjtsZXQg'@;
put 'eXQ9W107dGhpcy5oZWFkZXJBcnJheS5mb3JFYWNoKCgpPT55dC5wdXNoKCIiKSksdGhpcy5kYXRhLnB1c2goeXQpO2xldCB3dD0hMTtpZih0aGlzLmRhdGEuZm9yRWFjaCgoTHQsb24pPT57aWYoIVkpaWYod3Qpe2xldCBzbj0hMCxNbj0hMTtfZS5mb3JFYWNoKFZuPT57Y29uc3QgdXI9a2Vb'@;
put 'Vm5dOyIiIT09THRbdXJdJiZ2b2lkIDAhPT1MdFt1cl0/c249ITE6LTEhPT10aGlzLmhlYWRlclBrcy5pbmRleE9mKFZuLnRvVXBwZXJDYXNlKCkpJiYoTW49ITApfSksc258fE1uPyh2PW9uLFk9ITApOi0xPT09ZiYmKGY9b24pfWVsc2V7Y29uc3Qgc249THQubWFwKFZuPT5Wbi50b1N0cmlu'@;
put 'ZygpLnRvTG93ZXJDYXNlKCkpO2lmKCFzbi5pbmNsdWRlcygiX19fX19kZWxldGVfX3RoaXNfX3JlY29yZF9fX19fIikpe2NvbnN0IFZuPV9lLmluZGV4T2YoIl9fX19fZGVsZXRlX190aGlzX19yZWNvcmRfX19fXyIpO1ZuPi0xJiZfZS5zcGxpY2UoVm4sMSl9d3Q9ITAsX2UuZm9yRWFjaChW'@;
put 'bj0+ey0xPT09c24uaW5kZXhPZihWbikmJih3dD0hMSl9KTtsZXQgTW49W107TW49dGhpcy5maW5kVmFsaWRIZWFkZXJzKHNuLF9lLG9uLFQpLCExPT09TW5bMF0/KHd0PSExLE1uWzFdLmxlbmd0aD4wJiZNblsxXS5mb3JFYWNoKFZuPT57cmUucHVzaChWbil9KSk6a2U9TW5bMV19fSksWSYm'@;
put 'KHRoaXMudXBkYXRlX3NoZWV0X3JhbmdlKHR0KSx0dFsiIXJlZiJdKSl7Y29uc3Qgb249bGMudXRpbHMuZGVjb2RlX3JhbmdlKHR0WyIhcmVmIl18fCIiKTtkPW9uLnMucixoPW9uLnMuY319KSwtMT09PWYmJihZPSExKSx7Zm91bmREYXRhOlksc2hlZXROYW1lOlQsc3RhcnRSb3c6ZixlbmRS'@;
put 'b3c6dixjc3ZBcnJheUhlYWRlcnNNYXA6a2UsbWlzc2luZ0hlYWRlcnM6cmUscmFuZ2VTdGFydFJvdzpkLHJhbmdlU3RhcnRDb2w6aH19cHJvbXB0RXhjZWxQYXNzd29yZCgpe3JldHVybiBuZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMuZmlsZVBhc3N3b3JkTW9kYWw9ITAsc2V0VGltZW91dCgo'@;
put 'KT0+e2NvbnN0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ZpbGVQYXNzd29yZElucHV0Iik7aCYmKGguZm9jdXMoKSxoLnZhbHVlPSIiKX0sMTAwKSx0aGlzLmZpbGVQYXNzd29yZFN1YmplY3Quc3Vic2NyaWJlKGg9Pnt0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSxhKGh8fHZvaWQgMCl9'@;
put 'KX0pfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztsZXQgZjt0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IkxvYWRpbmciLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMCxmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSExLHRoaXMuZmlsZW5hbWU9IiI7'@;
put 'bGV0IHY9Zi5uYW1lO3RoaXMuZmlsZW5hbWU9dix0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKGBMb2FkaW5nICR7dn0gaW50byB0aGUgYnJvd3NlcmApO2xldCBZPXYuc2xpY2Uodi5sYXN0SW5kZXhPZigiLiIpKzEsdi5sYXN0SW5kZXhPZigiLiIpKzQpO2lmKCJ4bHMiPT09WS50b0xvd2VyQ2Fz'@;
put 'ZSgpKXtsZXQgcmU9bmV3IEZpbGVSZWFkZXI7cmUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIF9lPVcoZnVuY3Rpb24qKGtlKXtjb25zdCBXZT1oLnRvQnN0cihrZS50YXJnZXQucmVzdWx0KTtsZXQgSmUsdHQ9ITE7Y29uc3QgeXQ9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3Jt'@;
put 'dWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7SmU9bGMucmVhZChXZSx7Li4ueXR9KX1jYXRjaChUcil7aWYoVHIubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKWZvcih0dD0hMDt0dDspe2NvbnN0IFBpPXlpZWxkIGgucHJv'@;
put 'bXB0RXhjZWxQYXNzd29yZCgpO2lmKFBpKXRyeXtKZT1sYy5yZWFkKFdlLHsuLi55dCxwYXNzd29yZDpQaX0pLHR0PSExLGguZmlsZVVubG9ja0Vycm9yPSExfWNhdGNoKEhpKXtoLmZpbGVVbmxvY2tFcnJvcj0hMCxIaS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3Jk'@;
put 'Iil8fCh0dD0hMSl9ZWxzZSB0dD0hMX1lbHNlIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsVHIsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUiKX1pZighSmUpcmV0dXJuIGguZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkKGguc2hvd1VwbG9hZE1vZGFsPSExKTtsZXQgd3Q9'@;
put 'ITEsTHQ9W107Y29uc3Qgb249WyJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iLC4uLmguaGVhZGVyQXJyYXldO2xldCBzbj1vbi5tYXAoVHI9PlRyLnRvTG93ZXJDYXNlKCkpLE1uPXNuLnJlZHVjZSgoVHIsUGkpPT4oVHJbUGldPS0xLFRyKSx7fSksVm49W107Y29uc3QgdXI9aC5n'@;
put 'ZXRSYW5nZUFuZFNoZWV0KEplKTtpZihMdD11ci5taXNzaW5nSGVhZGVycyx1ci5mb3VuZERhdGEpe3d0PSEwLE1uPXVyLmNzdkFycmF5SGVhZGVyc01hcDtjb25zdCBUcj1KZS5TaGVldHNbdXIuc2hlZXROYW1lXTtoLmFwcGVuZFVwbG9hZFN0YXRlKGBUYWJsZSBmb3VuZCBvbiBzaGVldCAk'@;
put 'e3VyLnNoZWV0TmFtZX0gb24gcm93ICR7dXIuc3RhcnRSb3d9YCk7bGV0IFBpPSIiLEhpPSIiO2ZvcihsZXQgd3I9dXIuc3RhcnRSb3c7d3I8dXIuZW5kUm93Oysrd3Ipe2NvbnN0IGFpPVtdO3NuLmZvckVhY2goam49Pntjb25zdCBlcj1sYy51dGlscy5lbmNvZGVfY2VsbCh7cjp1ci5yYW5n'@;
put 'ZVN0YXJ0Um93K3dyLGM6dXIucmFuZ2VTdGFydENvbCtNbltqbl19KTtsZXQgRHI7IiI9PT1QaSYmKFBpPWVyKSxIaT1lcixEcj1Ucltlcl0/VHJbZXJdOnt2OiIifSxhaS5wdXNoKERyKX0pLGFpLmZpbmQoam49PiIiIT09am4udikmJlZuLnB1c2goYWkpfWguZXZlbnRTZXJ2aWNlLnNob3dJ'@;
put 'bmZvTW9kYWwoIlRhYmxlIEZvdW5kIixgU2hlZXQ6ICR7dXIuc2hlZXROYW1lfVxuUmFuZ2U6ICR7UGl9OiR7SGl9YCl9ZWxzZSBMdD11ci5taXNzaW5nSGVhZGVycztpZihMdC5sZW5ndGg+MCl7THQuc29ydChmdW5jdGlvbihIaSx3cil7cmV0dXJuIEhpWzFdPT09d3JbMV0/MDpIaVsxXT53'@;
put 'clsxXT8tMToxfSk7bGV0IFRyPUx0Lm1hcChQaT0+UGlbMF0pLnNsaWNlKDAsNSkuam9pbigiXG4iKTtyZXR1cm4gaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxUciksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBo'@;
put 'LnVwbG9hZGVyLnF1ZXVlLnBvcCgpfWlmKDA9PT1Wbi5sZW5ndGh8fDA9PT1WblswXS5sZW5ndGgpcmV0dXJuIGguZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIk5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIiksc2V0VGltZW91dCgoKT0+e2guZmlsZW5hbWU9IiJ9'@;
put 'KSxoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpO2lmKChoLmRhdGVUaW1lSGVhZGVycy5sZW5ndGg+MHx8aC5kYXRlSGVhZGVycy5sZW5ndGg+MHx8aC50aW1lSGVhZGVycy5sZW5ndGg+MCkmJihWbj1oLnVwZGF0ZURhdGVUaW1lQ29scyhvbixWbikp'@;
put 'LGgueGxSdWxlcy5sZW5ndGg+MCYmKFZuPWgudXBkYXRlWExSdWxlQ29scyhvbixWbikpLCF3dCl7aWYoMD09PUx0Lmxlbmd0aCloLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISIpLHNldFRpbWVvdXQoKCk9PntoLmZp'@;
put 'bGVuYW1lPSIifSk7ZWxzZXtMdC5zb3J0KGZ1bmN0aW9uKEhpLHdyKXtyZXR1cm4gSGlbMV09PT13clsxXT8wOkhpWzFdPndyWzFdPy0xOjF9KTtsZXQgVHI9THQubWFwKFBpPT5QaVswXSkuc2xpY2UoMCw1KS5qb2luKCJcbiIpO2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGws'@;
put 'VHIpfXJldHVybiBoLmV4Y2VsRmlsZVBhcnNpbmc9ITEsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXtoLmhlYWRlclNob3c9b24sVm49Vm4ubWFwKHdyPT53ci5tYXAoYWk9PiJuIj09PWFpLnQ/YWkudjphaS53KSksVm49Vm4ubWFwKHdyPT53ci5tYXAoKGFpLHRpKT0+eyFhaSYmMCE9'@;
put 'PWFpJiYoYWk9IiIpO2NvbnN0IGpuPWguaGVhZGVyU2hvd1t0aV07cmV0dXJuIm51bWVyaWMiPT09aC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShqbik/LnR5cGUmJigwLHZwLmlzU3BlY2lhbE1pc3NpbmcpKGFpKSYmIWFpLmluY2x1ZGVzKCIuIikmJihhaT0iLiIrYWkpLGFpfSkpLGguZGF0YT1W'@;
put 'bjtjb25zdCBUcj1Wbi5zbGljZSgwLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtsZXQgUGk9bGMudXRpbHMuanNvbl90b19zaGVldChUcix7c2tpcEhlYWRlcjohMH0pLEhpPWxjLnV0aWxzLnNoZWV0X3RvX2NzdihQaSk7aWYoSGk9b24uam9pbigiLCIpKyJcbiIr'@;
put 'SGksIldMQVRJTjEiPT09aC5lbmNvZGluZyl7bGV0IHdyPUVjZS5kZWNvZGUoVGNlLmZyb20oSGkpLCJDUC0xMjUyIiksYWk9bmV3IEJsb2IoW3dyXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pLHRpPWguYmxvYlRvRmlsZShhaSxoLmZpbGVuYW1lKyIuY3N2Iik7aC51cGxvYWRlci5hZGRU'@;
put 'b1F1ZXVlKFt0aV0pfWVsc2V7bGV0IHdyPW5ldyBCbG9iKFtIaV0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxhaT1oLmJsb2JUb0ZpbGUod3IsaC5maWxlbmFtZSsiLmNzdiIpO2gudXBsb2FkZXIuYWRkVG9RdWV1ZShbYWldKX1oLmV4Y2VsRmlsZVJlYWR5PSEwfWlmKDA9PT1oLmRhdGEu'@;
put 'bGVuZ3RoKXJldHVybiBoLnNob3dVcGxvYWRNb2RhbD0hMSxoLnVwbG9hZFByZXZpZXc9ITEsaC5leGNlbEZpbGVQYXJzaW5nPSExLHZvaWQgaC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiVGFibGUgaW4gdGhlIGZpbGUgaXMgZW1wdHkuIERhdGEgZm91bmQgb24gc2hlZXQ6'@;
put 'ICIpO2guZXhjZWxGaWxlUmVhZHk9ITAsaC5nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl9KTtyZXR1cm4gZnVuY3Rpb24oa2Upe3JldHVybiBfZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHJlLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgaWYoImNzdiI9PT1ZLnRvTG93ZXJDYXNlKCkp'@;
put 'e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJFeGNlbCBmaWxlcyBvbmx5LiBUbyB1bmxvY2sgQ1NWIHVwbG9hZHMsIHBsZWFzZSBjb250YWN0IHN1cHBvcnRA'@;
put 'ZGF0YWNvbnRyb2xsZXIuaW8iKSx0aGlzLmV4Y2VsRmlsZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx2b2lkIHRoaXMudXBsb2FkZXIucXVldWUucG9wKCk7aWYoIldMQVRJTjEiPT09dGhpcy5lbmNvZGluZyl7bGV0IHJlPW5ldyBGaWxlUmVhZGVyO3JlLm9ubG9hZD1fZT0+'@;
put 'e2xldCBrZT1FY2UuZGVjb2RlKFRjZS5mcm9tKF9lLnRhcmdldC5yZXN1bHQpLCJDUC0xMjUyIiksV2U9bmV3IEJsb2IoW2tlXSx7dHlwZTpZfSksSmU9dGhpcy5ibG9iVG9GaWxlKFdlLHRoaXMuZmlsZW5hbWUpO3RoaXMudXBsb2FkZXIucXVldWUucG9wKCksdGhpcy51cGxvYWRlci5hZGRU'@;
put 'b1F1ZXVlKFtKZV0pLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITB9LHRoaXMuZXhjZWxGaWxlUmVhZHk9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5nPSExLHJlLnJlYWRBc0FycmF5QnVmZmVyKGYpLHRoaXMuZ2V0RmlsZSgpfWVsc2UgdGhpcy5leGNlbEZpbGVSZWFkeT0hMCx0aGlzLmV4Y2VsRmls'@;
put 'ZVBhcnNpbmc9ITEsdGhpcy5nZXRGaWxlKCl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBjc3Ygb3IgZXhjZWwgZmlsZS4nKSx0aGlzLmV4Y2VsRmls'@;
put 'ZVJlYWR5PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlLnBvcCgpfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy5nZXRGaWxlKCk6dGhpcy5zdWJtaXRMaW1pdE5vdGljZT0hMH1n'@;
put 'ZXRGaWxlKCl7aWYodGhpcy5jaGVja0ludmFsaWQoKSlyZXR1cm4gdm9pZCB0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCJJbnZhbGlkIHZhbHVlcyBhcmUgcHJlc2VudC4iKTtpZih0aGlzLnZhbGlkYXRlUHJpbWFyeUtleXMoKSwwIT09dGhpcy5kdXBsaWNhdGVQa0lu'@;
put 'ZGV4ZXMubGVuZ3RoKXJldHVybiB0aGlzLnBrRHVwcz0hMCx2b2lkKHRoaXMuc3VibWl0PSExKTt0aGlzLnBrRHVwcz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITA7bGV0IGE9W107Zm9yKGNvbnN0IGQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6ZCxmaWxlTmFtZTpkLm5h'@;
put 'bWV9KTt0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSh0aGlzLnVwbG9hZFVybCxhLHt0YWJsZTp0aGlzLmxpYmRzfSkudGhlbihkPT57aWYodHlwZW9mIGQuc2FzanNBYm9ydD4idSIpe2lmKHR5cGVvZiBkLnNhc3BhcmFtcz4idSIpcmV0dXJuO3t0aGlzLnVwbG9hZExvYWRpbmc9ITE7bGV0'@;
put 'IGg9ZC5zYXNwYXJhbXNbMF07dGhpcy5zdWNjZXNzRW5hYmxlPSEwLHRoaXMudGFibGVJZD1oLkRTSUQsdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZUlkKX19ZWxzZXtjb25zdCBoPWQsZj1oLnNhc2pzQWJvcnRbMF0uTVNHLHY9aC5zYXNqc0Fib3J0WzBd'@;
put 'Lk1BQzt0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRo'@;
put 'aXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLGYse1NZU1dBUk5JTkdURVhUOmguU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOmguU1lTRVJST1JURVhULE1BQzp2fSl9fSxkPT57dGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmly'@;
put 'c3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsZCl9KX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3'@;
put 'KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2xldCBhPVtdO3RoaXMuZGF0YS5tYXAoaD0+e2xldCBmPXt9O3Ro'@;
put 'aXMuaGVhZGVyU2hvdy5tYXAoKHYsVCk9PntmW3ZdPWhbVF19KSxmLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPSJObyIpLGEucHVzaChmKX0pLHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZp'@;
put 'Y2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5kYXRhU291cmNlPWEsdGhpcy5ob3RUYWJsZS5kYXRhPWE7Y29uc3QgZD10aGlzLmhvdEluc3RhbmNlO3RoaXMuZXhjZWxVcGxvYWRTdGF0ZT0iVmFsaWRhdGluZy1IT1QiLGQudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRh'@;
put 'U291cmNlLG1heFJvd3M6MS8wfSwhMSksZC5yZW5kZXIoKSx0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKCJWYWxpZGF0aW5nIHJvd3MiKSxkLnZhbGlkYXRlQ2VsbHMoKCk9Pnt0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLnVwbG9hZFByZXZpZXc9ITAsdGhpcy5leGNlbEZpbGVQYXJzaW5n'@;
put 'PSExLHRoaXMuZXhjZWxVcGxvYWRTdGF0ZT1udWxsfSl9ZGlzY2FyZFBlbmRpbmdFeGNlbChhKXt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHttYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR9KSxhJiZ0aGlzLmNhbmNlbEVkaXQoKSx0'@;
put 'aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnVwbG9hZFByZXZpZXc9ITEsdGhpcy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLGlz'@;
put 'TmFOKHBhcnNlSW50KHRoaXMucm91dGVyLnVybC5zcGxpdCgiLyIpLnBvcCgpfHwiIikpfHx0aGlzLnF1ZXJ5VGV4dFNhdmVkLmxlbmd0aD4wJiYodGhpcy5xdWVyeVRleHQ9dGhpcy5xdWVyeVRleHRTYXZlZCx0aGlzLnF1ZXJ5VGV4dFNhdmVkPSIiKX1wcmV2aWV3VGFibGVFZGl0Q29uZmly'@;
put 'bSgpe3RoaXMuZGlzY2FyZFBlbmRpbmdFeGNlbCgpLHRoaXMuY29udmVydFRvQ29ycmVjdFR5cGVzKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5lZGl0VGFibGUoITApfWFwcGVuZFVwbG9hZFN0YXRlKGEsZD0hMSl7dGhpcy5jZGYuZGV0ZWN0Q2hhbmdlcygpLHRoaXMudXBsb2FkU3RhdGVyQ29t'@;
put 'cExpc3QuZmlyc3QmJihkP3RoaXMudXBsb2FkU3RhdGVyQ29tcExpc3QuZmlyc3QucmVwbGFjZUxhc3RTdGF0ZShhKTp0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LmFwcGVuZFN0YXRlKGEpKX1maW5kVmFsaWRIZWFkZXJzKGEsZCxoLGYpe2xldCB2PSExLFQ9W10sWT0wO2Zvcig7'@;
put 'WTxhLmxlbmd0aDspe2lmKCF2JiYtMSE9PWQuaW5kZXhPZihhW1ldKSl7bGV0IHJlLGZlPTAsX2U9MCxrZT0wLFdlPVtdLEplPSExO2ZvcihsZXQgd3Q9WTt3dDxhLmxlbmd0aDt3dCsrKXtpZigiIj09PWFbd3RdfHwtMSE9PVdlLmluZGV4T2YoYVt3dF0pJiZ0aGlzLmlzQ29sSGVhZGVyKGFb'@;
put 'd3RdKSl7IiI9PT1hW3d0XSYmKEplPSEwKSxyZT13dDticmVha31XZS5wdXNoKGFbd3RdKX1sZXQgdHQ9W107dm9pZCAwIT09cmU/KHR0PWEuc2xpY2UoWSxyZSksa2U9WSxfZT1yZSxKZT8oZmU9WSxZPXJlKTooZmU9WSxZPXJlLTEpKToodHQ9YS5zbGljZShZKSxmZT1ZLGtlPVksX2U9YS5s'@;
put 'ZW5ndGgsWT1hLmxlbmd0aCk7bGV0IHl0PSEwO2lmKGQuZm9yRWFjaCh3dD0+ey0xPT09dHQuaW5kZXhPZih3dCkmJih5dD0hMSl9KSx5dCl7dj0hMDtsZXQgTHQ9ZC5yZWR1Y2UoZnVuY3Rpb24oc24sTW4pe3JldHVybiBzbltNbl09LTEsc259LHt9KSxvbj1hLnNsaWNlKGZlLF9lKTtyZXR1'@;
put 'cm4gZC5mb3JFYWNoKHNuPT57THRbc25dPW9uLmluZGV4T2Yoc24pK2ZlfSksWyEwLEx0XX17bGV0IHd0PXlXZSh0dCxkKTtULnB1c2goWyI8Yj5UQUIoIitmKyIpPC9iPiAtICIrd3RbMV0uam9pbigiLCIpKyIgKCBtaXNzaW5nICIrd3RbMF0uam9pbigiLCIpKyIgKSIsd3RbMV0ubGVuZ3Ro'@;
put 'XSl9fVkrK31yZXR1cm5bITEsVF19aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJB'@;
put 'cnJheS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX11cGRhdGVEYXRlVGltZUNvbHMoYSxkKXtpZih0aGlzLmRhdGVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVIZWFkZXJzLmZv'@;
put 'ckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBUPWZbdl07aWYoRFUoVC52KSl7Y29uc3QgWT1FVShOdW1iZXIoVC52KSk7VC52PVkuZ2V0RnVsbFllYXIoKSsiLSIrKCIwIisoWS5nZXRN'@;
put 'b250aCgpKzEpKS5zbGljZSgtMikrIi0iKygiMCIrWS5nZXREYXRlKCkpLnNsaWNlKC0yKX1lbHNlIGlmKFQmJlQudiYmLTE9PT1ULnYudG9TdHJpbmcoKS5pbmRleE9mKCI6Iikpe2NvbnN0IFk9bmV3IERhdGUoVC52KTsiSW52YWxpZCBEYXRlIiE9PVkudG9VVENTdHJpbmcoKSYmKFQudj1r'@;
put 'VShZKSl9Zlt2XT1UfSl9KX1pZih0aGlzLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYpJiZoLnB1c2goYS5pbmRleE9mKGYpKX0pLGQuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBUPWZb'@;
put 'dl07aWYoRFUoVC52KXx8cGNlKFQudil8fFQudi5pbmNsdWRlcygiRS0iKSl7Y29uc3QgWT1FVShOdW1iZXIoVC52KSk7VC52PWZjZShZKX1mW3ZdPVR9KX0pfWlmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTt0aGlzLmRhdGVUaW1lSGVhZGVycy5mb3JFYWNoKGY9'@;
put 'PnstMSE9PWEuaW5kZXhPZihmKSYmaC5wdXNoKGEuaW5kZXhPZihmKSl9KSxkLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgVD1mW3ZdO2lmKERVKFQudil8fHBjZShULnYpKXtsZXQgWT1FVShOdW1iZXIoVC52KSk7VC52PWtVKFkpKyIgIitmY2UoWSl9ZWxzZXtpZigtMT09PVQu'@;
put 'di5pbmRleE9mKCIgIikmJi0xIT09VC52LmluZGV4T2YoIjoiKSl7bGV0IHJlPVQudi5zdWJzdHJpbmcoMCxULnYuaW5kZXhPZigiOiIpKTtyZT1yZSsiICIrVC52LnN1YnN0cmluZyhULnYuaW5kZXhPZigiOiIpKzEpLFQudj1yZX1sZXQgWT1uZXcgRGF0ZShULnYpOyJJbnZhbGlkIERhdGUi'@;
put 'IT09WS50b1VUQ1N0cmluZygpJiYoVC52PWtVKFkpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAiK2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKFkp'@;
put 'KX1mW3ZdPVR9KX0pfXJldHVybiBkfXVwZGF0ZVhMUnVsZUNvbHMoYSxkKXtpZih0aGlzLnhsUnVsZXMubGVuZ3RoPjApe2NvbnN0IGg9W107dGhpcy54bFJ1bGVzLmZvckVhY2goZj0+ey0xIT09YS5pbmRleE9mKGYuWExfQ09MVU1OKSYmKGYuaW5kZXg9YS5pbmRleE9mKGYuWExfQ09MVU1O'@;
put 'KSxoLnB1c2goZikpfSksZC5mb3JFYWNoKGY9PntoLmZvckVhY2godj0+e2NvbnN0IFQ9Zlt2LmluZGV4XTsiRk9STVVMQSI9PT12LlhMX1JVTEUmJiJmImluIFQmJigibiI9PT1ULnQ/VC52PSI9IitULmY6VC53PSI9IitULmYpLGZbdl09VH0pfSl9cmV0dXJuIGR9YmxvYlRvRmlsZShhLGQp'@;
put 'e2NvbnN0IGg9YTtyZXR1cm4gaC5sYXN0TW9kaWZpZWREYXRlPW5ldyBEYXRlLGgubmFtZT1kLGh9dG9Cc3RyKGEpe2xldCBkPW5ldyBVaW50OEFycmF5KGEpLGg9IiIsZj1kLmJ5dGVMZW5ndGg7Zm9yKGxldCB2PTA7djxmO3YrKyloKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGRbdl0pO3JldHVy'@;
put 'biBofXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBhLmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1h'@;
put 'LmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4oImhvbWUiPT09R24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUduLnJvb3RQYXJhbSkmJihHbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sR24uZWRpdG9yLmZpbHRlci5xdWVyeT1bXSxHbi5lZGl0b3Iu'@;
put 'ZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBUPWZbdl0uZWxlbWVudHM7ZD1ULmZpbHRlcihmdW5j'@;
put 'dGlvbihZKXtyZXR1cm4gbnVsbD09PVkudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKFQpfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSExKTt0cnl7aWYodm9pZCAwIT09YS5jbGF1c2VzJiZhLmxpYmRzKXtjb25zdCBmPXtn'@;
put 'cm91cExvZ2ljOmEuY2xhdXNlcy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goVD0+e2NvbnN0IFk9e2ZpbHRlckNsYXVzZXM6W119O1QuZWxlbWVudHMuZm9yRWFjaChyZT0+e1kuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2Vydmlj'@;
put 'ZS5kZWVwQ2xvbmUocmUpKX0pLFkuY2xhdXNlTG9naWM9VC5jbGF1c2VMb2dpYyxmLmZpbHRlckdyb3Vwcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWSkpfSk7Y29uc3Qgdj1hLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGYpO3lpZWxkIGEuc2FzU3Rv'@;
put 'cmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLHYpLnRoZW4oVD0+e2EucXVlcnlGaWx0ZXI9e2lkOlQucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpULnJlc3VsdFswXS5GSUxURVJfVEFCTEV9LGEucm91dGVyLm5hdmlnYXRlKFsiLyJdLHtza2lwTG9jYXRpb25DaGFuZ2U6ITAscXVlcnlQ'@;
put 'YXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkudGhlbigoKT0+YS5yb3V0ZXIubmF2aWdhdGUoWyIvZWRpdG9yLyIrYS5xdWVyeUZpbHRlci50YWJsZSsiLyIrYS5xdWVyeUZpbHRlci5pZF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pKSxhLmZpbHRlcj0hMX0pLmNhdGNoKFQ9'@;
put 'PnthLnN1Ym1pdExvYWRpbmc9ITF9KX19Y2F0Y2goZil7YS5xdWVyeUVycj0hMCxhLnN1Ym1pdExvYWRpbmc9ITEsYS5xdWVyeUVyck1lc3NhZ2U9Zn19KSgpfW9wZW5RYigpe3RoaXMubGliZHMmJih0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zdWJtaXRM'@;
put 'b2FkaW5nPSExLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFF1ZXJ5VmFyaWFibGVzKHRoaXMubGliZHMsdGhpcy5jb2xzKSl9ZWRpdFRhYmxlKGEsZCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMCk7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2xldCBmPWguZ2V0UGx1'@;
put 'Z2luKCJtdWx0aUNvbHVtblNvcnRpbmciKSx2PWYuZ2V0U29ydENvbmZpZygpLFQ9QXJyYXkuaXNBcnJheSh2KT92Olt2XTtzZXRUaW1lb3V0KCgpPT57YXx8KHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksZCYm'@;
put 'dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkLnBvcCgpKSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSExLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsaC51cGRhdGVTZXR0aW5ncyh7cmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seX0sITEpLGgucmVuZGVyKCk7Zm9yKGxl'@;
put 'dCBZIG9mIFQpZi5zb3J0KFkpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9yKGxldCBkIG9mIGEpZm9yKGxldCBoIGluIGQpe2xldCBmPXRoaXMuY29scy5maW5kKHY9PnYuTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51'@;
put 'bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFyc2VJbnQoZFtoXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNv'@;
put 'dXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGQ9YS5nZXRQbHVnaW4oIm11bHRpQ29sdW1uU29ydGluZyIpLGg9ZC5nZXRTb3J0Q29uZmlnKCksZj1BcnJheS5pc0FycmF5KGgpP2g6W2hdO3RoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCYmKHRoaXMuZGF0YVNvdXJjZT10aGlz'@;
put 'LmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZCkpLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2UsdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMCxhLnVwZGF0ZVNldHRpbmdzKHtyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGRh'@;
put 'dGE6dGhpcy5kYXRhU291cmNlfSwhMSksYS52YWxpZGF0ZVJvd3ModGhpcy5tb2RpZmVkUm93c0luZGV4ZXMpO2ZvcihsZXQgdiBvZiBmKWQuc29ydCh2KTt0aGlzLmNoZWNrUm93TGltaXQoKX1ob3RDbGlja2VkKCl7MT09PXRoaXMudGltZXNDbGlja2VkJiZ0aGlzLmhvdFRhYmxlLnJlYWRP'@;
put 'bmx5JiZ0aGlzLmVkaXRUYWJsZSgpLDA9PT10aGlzLnRpbWVzQ2xpY2tlZCYmKHRoaXMudGltZXNDbGlja2VkKyssc2V0VGltZW91dCgoKT0+e3RoaXMudGltZXNDbGlja2VkPTB9LDIwMCkpfWNsZWFuRXhjZWVkKCl7dGhpcy5leGNlZWRDZWxscz1bXX1hcHByb3ZlcnNUb2dnbGUoKXt0aGlz'@;
put 'LnNob3dBcHByb3ZlcnM9IXRoaXMuc2hvd0FwcHJvdmVyc31hZGRSb3coKXt0aGlzLmFkZGluZ05ld1Jvdz0hMCxzZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2xldCBkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwx'@;
put 'KSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsMCksYS5yZW5kZXIoKSx0aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGlu'@;
put 'Z05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtd'@;
put 'LHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlD'@;
put 'b2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigpLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dz'@;
put 'U3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7'@;
put 'dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2YrKyl7bGV0IHY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZl0pO2lmKCJZZXMiPT09di5fX19fX0RF'@;
put 'TEVURV9fVEhJU19fUkVDT1JEX19fX18pdGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSxkKys7ZWxzZXtsZXQgVD10aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQuZmluZChZPT57Zm9yKGxldCByZSBvZiB0aGlzLmhlYWRlclBrcylpZihZW3JlXSE9PXZbcmVdKXJldHVybiExO3JldHVybiEwfSk7'@;
put 'VD9KU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KFQpJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcy5wdXNoKGYpLGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxo'@;
put 'KyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtleXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2U7bGV0IGQ9YS5nZXREYXRhKCk7dGhpcy5wa0ZpZWxkcz1bXTtmb3IobGV0IFQ9MDtUPGQubGVu'@;
put 'Z3RoO1QrKyl7bGV0IFk9IiI7Zm9yKGxldCByZT0xO3JlPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtyZSsrKVk9WSsifCIrZFtUXVtyZV07dGhpcy5wa0ZpZWxkcy5wdXNoKFkpfWxldCB2LGg9W10sZj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2ZvcihsZXQgVD0wO1Q8dGhpcy5wa0ZpZWxkcy5s'@;
put 'ZW5ndGg7VCsrKWZvcihsZXQgWT0wO1k8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7WSsrKXRoaXMucGtGaWVsZHNbVF09PT10aGlzLnBrRmllbGRzW1ldJiZZIT09VCYmaC5wdXNoKFkpO2lmKHRoaXMucGtGaWVsZHMubGVuZ3RoPmYpZm9yKGxldCBUPWY7VDx0aGlzLnBrRmllbGRzLmxlbmd0aDtU'@;
put 'KyspZm9yKGxldCBZPWY7WTx0aGlzLnBrRmllbGRzLmxlbmd0aDtZKyspVDxZJiZ0aGlzLnBrRmllbGRzW1RdPT09dGhpcy5wa0ZpZWxkc1tZXSYmaC5wdXNoKFkpO2ZvcihsZXQgVD0wO1Q8aC5sZW5ndGg7VCsrKWZvcihsZXQgWT0xO1k8dGhpcy5yZWFkT25seUZpZWxkcysxO1krKyl2PWEu'@;
put 'Z2V0Q2VsbE1ldGEoaFtUXSxZKSx2LnZhbGlkPSExLHYuZHVwS2V5PSEwLGEucmVuZGVyKCk7dGhpcy5kdXBsaWNhdGVQa0luZGV4ZXM9Wy4uLm5ldyBTZXQoaC5zb3J0KCkpXX1yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKGE9ITEsZCl7Y29uc3QgaD10aGlzLmhvdEluc3RhbmNlO2Zvcihs'@;
put 'ZXQgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCB2PWYudmFsdWVzLm1hcChUPT5UW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7aC5iYXRjaCgoKT0+e2NvbnN0IFQ9aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksWT10aGlzLmRjVmFsaWRhdG9y'@;
put 'Py5nZXRSdWxlKFQuZGF0YXx8IiIpO2xldCByZTtZJiYocmU9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZShZKSkscmV8fChyZT1bXSk7Y29uc3QgZmU9Wy4uLm5ldyBTZXQoWy4uLnJlLC4uLnZdKV07dGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRl'@;
put 'UnVsZShmLmNvbCx7c291cmNlOmZlfSksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic291cmNlIixmZSksZi52YWx1ZXMubGVuZ3RoPjAmJihoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsImVk'@;
put 'aXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJzdHJpY3QiLGYuc3RyaWN0KSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGYuY29sLHty'@;
put 'ZW5kZXJlcjoiYXV0b2NvbXBsZXRlIixlZGl0b3I6ImF1dG9jb21wbGV0ZS5jdXN0b20iLHN0cmljdDpmLnN0cmljdCxmaWx0ZXI6ITF9KSksdGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoZix2b2lkIDAsYSxkKSxoLnJlbmRlcigpfSl9fXJlU2V0RXh0ZW5kZWRDZWxs'@;
put 'VmFsaWRhdGlvblZhbHVlcyhhLGQsaD0hMSxmKXtpZihhKXtkfHwoZD1hLnJvdyk7Y29uc3QgVD10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSk7dGhpcy5zZXRFeHRlbmRlZFZhbHVlc1RvQ2VsbHMoYSxkLFQsaCxmKX1lbHNlIGZvcihsZXQgVCBvZiB0aGlzLmNlbGxWYWxp'@;
put 'ZGF0aW9uU291cmNlKXtjb25zdCBZPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShUKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9DZWxscyhULFQucm93LFksaCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsdil7Y29uc3QgVD10aGlzLmhvdEluc3Rh'@;
put 'bmNlO2xldCBZPVtdO2ZvcihsZXQgcmUgb2YgaClZLmluZGV4T2YocmUuRVhUUkFfQ09MX05BTUUpPDAmJlkucHVzaChyZS5FWFRSQV9DT0xfTkFNRSk7Zm9yKGxldCByZSBvZiBZKXtjb25zdCBmZT1oLmZpbHRlcihMdD0+THQuRVhUUkFfQ09MX05BTUU9PT1yZSk7bGV0IF9lPWZlLm1hcChM'@;
put 'dD0+IkMiPT09THQuRElTUExBWV9UWVBFP0x0LlJBV19WQUxVRV9DSEFSOkx0LlJBV19WQUxVRV9OVU0pO2NvbnN0IGtlPVQucHJvcFRvQ29sKHJlKTt0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChMdD0+THQucm93PT09ZCYmTHQuY29sPT09a2UpfHx0'@;
put 'aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmQsY29sOmtlLGFjdGl2ZTohMX0pLFQuc2V0Q2VsbE1ldGEoZCxrZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxULnNldENlbGxNZXRhKGQsa2UsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0'@;
put 'b20iKSxULnNldENlbGxNZXRhKGQsa2UsInN0cmljdCIsYS5zdHJpY3QpLFQuc2V0Q2VsbE1ldGEoZCxrZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShrZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxl'@;
put 'dGUuY3VzdG9tIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVyOiExfSk7Y29uc3QgSmU9VC5nZXRDZWxsTWV0YShkLGtlKSx0dD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEplLmRhdGF8fCIiKTtsZXQgeXQ7dHQmJih5dD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHR0'@;
put 'KSkseXR8fCh5dD1bXSksIm51bWVyaWMiPT09dHQ/LnR5cGU/KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoeXQsIm51bWJlciIpLF9lPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoX2UsIm51bWJlciIpKTooeXQ9dGhpcy5oZWxwZXJTZXJ2'@;
put 'aWNlLmNvbnZlcnRBcnJheVZhbHVlcyh5dCwic3RyaW5nIiksX2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhfZSwic3RyaW5nIikpO2NvbnN0IHd0PVsuLi5uZXcgU2V0KFsuLi55dCwuLi5fZV0pXTtpZihULnNldENlbGxNZXRhKGQsa2UsInNvdXJjZSIsd3QpLHRo'@;
put 'aXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoa2Use3NvdXJjZTp3dH0pLGYpe2lmKHYmJnYhPT1kKXJldHVybjtjb25zdCBMdD1mZS5maW5kKG9uPT4xPT09b24uRk9SQ0VfRkxBRyk7THQmJnNldFRpbWVvdXQoKCk9PntULnNldERhdGFBdENlbGwoZCxrZSwiQyI9'@;
put 'PT1MdC5ESVNQTEFZX1RZUEU/THQuUkFXX1ZBTFVFX0NIQVI6THQuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW3Jl'@;
put 'XT0iQyI9PT1MdC5ESVNQTEFZX1RZUEU/THQuUkFXX1ZBTFVFX0NIQVI6THQuUkFXX1ZBTFVFX05VTSl9KX19fWdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUoYSxkKXtjb25zdCBmPXRoaXMuaG90SW5zdGFuY2UuZ2V0RGF0YUF0Q2VsbChkfHxhLnJvdyxhLmNvbCksdj0oYS52YWx1ZXMu'@;
put 'ZmluZChmZT0+ZmVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdPT09Zil8fFtdKVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLkRJU1BMQVlfSU5ERVhdLFQ9YS5leHRlbmRlZF92YWx1ZXM/LmZpbHRlcihmZT0+ZmVbMF09PT12KSxZPXRoaXMuaGVscGVyU2VydmljZS5k'@;
put 'ZWVwQ2xvbmUodGhpcy5leHRlbmRlZENlbGxWYWxpZGF0aW9uRmllbGRzKSxyZT1bXTtmb3IobGV0IGZlIG9mIFR8fFtdKXtsZXQgX2U9e307Zm9yKGxldCBrZSBvZiBPYmplY3Qua2V5cyhZKSlfZVtrZV09ZmVbWVtrZV1dO3JlLnB1c2goX2UpfXJldHVybiByZX1jaGVja1NhdmUoKXtpZih0'@;
put 'aGlzLmdldFJvd3NTdWJtaXR0aW5nQ291bnQoKSwwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkJiYwPT09dGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZClyZXR1cm4gdGhpcy5iYWRFZGl0VGl0bGU9Ik5vIGNoYW5nZXMg'@;
put 'dG8gc3VibWl0Iix0aGlzLmJhZEVkaXRDYXVzZT0iUGxlYXNlIG1vZGlmeSBzb21lIHZhbHVlcyBhbmQgdHJ5IGFnYWluLiIsdm9pZCh0aGlzLmJhZEVkaXQ9ITApO2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZTt0aGlzLmRhdGFTb3VyY2VCZWZvcmVTdWJtaXQ9dGhpcy5oZWxwZXJTZXJ2aWNl'@;
put 'LmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpO2ZvcihsZXQgaD0wO2g8dGhpcy5kYXRhU291cmNlLmxlbmd0aDtoKyspZGVsZXRlIHRoaXMuZGF0YVNvdXJjZVtoXS5ub0xpbmtPcHRpb247YS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2UsY29sSGVhZGVyczp0aGlzLmhl'@;
put 'YWRlckNvbHVtbnMsY29sdW1uczp0aGlzLmNlbGxWYWxpZGF0aW9uLG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKGgsZil7cmV0dXJuIGg+NTAwPzUwMDpofX0sITEpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpLGMuY250PTAsYy5ub25Qa0NudD0wO2xldCBkPWEuZ2V0RGF0YSgp'@;
put 'O2lmKGQubGVuZ3RoPjEmJmEuaXNFbXB0eVJvdyhkLmxlbmd0aC0xKSYmYS5hbHRlcigicmVtb3ZlX3JvdyIsZC5sZW5ndGgtMSksdGhpcy52YWxpZGF0ZVByaW1hcnlLZXlzKCksMCE9PXRoaXMuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aClyZXR1cm4gdGhpcy5wa0R1cHM9ITAsdGhpcy5z'@;
put 'dWJtaXQ9ITEsdm9pZCB0aGlzLmNhbmNlbFN1Ym1pdCgpO3RoaXMucGtEdXBzPSExLGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzLCgpPT57dGhpcy5jaGVja0ludmFsaWQoKT90aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJWYWxpZGF0aW9uIGVycm9yIiwi'@;
put 'SW52YWxpZCBWYWx1ZXMgYXJlIFByZXNlbnQiKToodGhpcy5zdWJtaXQ9ITAsdGhpcy52YWxpZGF0aW9uRG9uZT0xLHNldFRpbWVvdXQoKCk9PntsZXQgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aCYmaC5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShhKXt2'@;
put 'YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2lmKGQuaG90SW5zdGFuY2UuZ2V0RGF0YSgpLGE9KGE9YS5maWx0ZXIodj0+ISFkLmRhdGFNb2RpZmllZC5maW5kKFk9Pntmb3IobGV0IHJlIG9mIGQuaGVhZGVyUGtzKWlmKFlbcmVdIT09dltyZV0pcmV0dXJuITE7cmV0dXJuITB9KSkp'@;
put 'Lm1hcCh2PT57bGV0IFQ9di5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSB2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyx2Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz1ULE9iamVjdC5rZXlzKHYpLm1hcChZPT57Im51bWVyaWMiPT09'@;
put 'ZC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShZKT8udHlwZSYmIi4iPT09dltZXSYmKHZbWV09bnVsbCl9KSx2fSksZC5sb2dnZXJTZXJ2aWNlLmxvZygiRGF0YSBzdWJtaXR0ZWQiLGEpLGQuY2hlY2tJbnZhbGlkKCkpcmV0dXJuIGQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIlZhbGlkYXRp'@;
put 'b24gZXJyb3IiLCJJbnZhbGlkIFZhbHVlcyBhcmUgUHJlc2VudCIpLGQuY2FuY2VsU3VibWl0KCksdm9pZChkLnN1Ym1pdD0hMSk7aWYoZC52YWxpZGF0aW9uRG9uZT0wLGQuc2F2ZUxvYWRpbmc9ITAsYy5jbnQ8MSYmMD09PWQuZHVwbGljYXRlUGtJbmRleGVzLmxlbmd0aCYmYy5ub25Qa0Nu'@;
put 'dDwxKXtkLnNhdmVMb2FkaW5nPSEwLGQuZGlzYWJsZVN1Ym1pdD0hMSxkLnN1Ym1pdD0hMDtsZXQgdj17QUNUSU9OOiJMT0FEIn07aWYoZC5tZXNzYWdlPWQubWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLHYuTUVTU0FHRT1kLm1lc3NhZ2Usdi5MSUJEUz1kLmxpYmRzLGQuY29scyl7Y29u'@;
put 'c3QgVD1hLnNsaWNlKDAsZC5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2lmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnVwZGF0ZVRhYmxlKHYsVCwiU0FTQ29udHJvbFRhYmxlIiwiZWRpdG9ycy9zdGFnZWRhdGEiLGQuJGRhdGFGb3JtYXRzKS50aGVuKHJlPT57aWYo'@;
put 'dHlwZW9mIHJlLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK3JlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgZmU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7cmUmJihmZSs9YFxuJHsic3RyaW5nIj09dHlwZW9mIHJlP3JlOkpTT04uc3Ry'@;
put 'aW5naWZ5KHJlKX1gKSxkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGZlLG51bGwsIlN1Ym1pdCBlcnJvciIpfSkuY2F0Y2gocmU9Pntjb25zb2xlLmxvZygiZXJyIixyZSksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQu'@;
put 'c3VibWl0PSExO2xldCBmZT0ic3RyaW5nIj09dHlwZW9mIHJlP3JlOkpTT04uc3RyaW5naWZ5KHJlKTtyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImVkaXRvcnMvc3RhZ2VkYXRhIixgU3VibWl0IHJlcXVlc3QgZmFpbGVkXG4ke2ZlfWAsbnVsbCwiU3VibWl0IGVycm9y'@;
put 'IiksITF9KSlyZXR1cm59fWMuY250Pj0xPyhkLnBrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsYy5ub25Qa0NudD49MT8oZC5ub1BrTnVsbD0hMCxkLnN1Ym1pdD0hMCk6ZC5zdWJtaXQ9ITEsZC5jYW5jZWxTdWJtaXQoKSxjLmNudD0wLGMubm9uUGtDbnQ9MCxkLmRpc2FibGVT'@;
put 'dWJtaXQ9ITB9KSgpfXZhbGlkYXRvclJ1bGVTb3VyY2UoYSl7cmV0dXJuIHRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoYSl9Y2hlY2tJbnZhbGlkKCl7cmV0dXJuIHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdC5maXJzdC5jb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxs'@;
put 'KCIuaHRJbnZhbGlkIikubGVuZ3RoPjB9Z29Ub0VkaXRvcigpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi8iKX1jbG9zZVJlY29yZEVkaXQoYSl7dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwLHRoaXMuY3VycmVudEVkaXRS'@;
put 'ZWNvcmRWYWxpZGF0b3I9dm9pZCAwLCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24mJiFhJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5wcmV2RGF0YVNvdXJjZSksdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRh'@;
put 'dGFTb3VyY2V9LCExKSl9Y29uZmlybVJlY29yZEVkaXQoYT0hMCl7Y29uc3QgZD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg7YSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD0tMSksdGhpcy5jb2x1bW5IZWFkZXIubWFwKGY9Pntjb25zdCB2PXRoaXMuY3VycmVudEVkaXRSZWNv'@;
put 'cmRbZl0sVD0ibnVtIj09PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW2ZdPy50eXBlLFk9KDAsdnAuaXNTcGVjaWFsTWlzc2luZykodik7VCYmIWlzTmFOKHYpJiYhWSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmRbZl09MSp2KX0pLHRoaXMuZGF0YVNvdXJjZVtkXT10aGlzLmN1cnJlbnRFZGl0'@;
put 'UmVjb3JkLHRoaXMuaG90VGFibGUuZGF0YVtkXT10aGlzLmN1cnJlbnRFZGl0UmVjb3JkLHRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlfSwhMSksYSYmKHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dm9pZCAwKX1vbk5leHRSZWNvcmQoKXt0aGlz'@;
put 'LmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4Pj10aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgrMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1'@;
put 'cnJlbnRFZGl0UmVjb3JkSW5kZXgpfW9uUHJldmlvdXNSZWNvcmQoKXt0aGlzLmNvbmZpcm1SZWNvcmRFZGl0KCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9dGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PD0wP3RoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMTp0aGlzLmN1cnJlbnRF'@;
put 'ZGl0UmVjb3JkSW5kZXgtMSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXgpfWFkZFJlY29yZEJ1dHRvbkNsaWNrKCl7dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RBZGRSZWNvcmQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJB'@;
put 'ZGQgUmVjb3JkIik6dGhpcy5hZGRFZGl0TmV3UmVjb3JkKCl9YWRkRWRpdE5ld1JlY29yZCgpe3RoaXMuYWRkUmVjb3JkKCksc2V0VGltZW91dCgoKT0+e3RoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMSwhMCl9LDFlMyl9YWRkUmVjb3JkKCl7dGhpcy5hZGRS'@;
put 'b3coKX1lZGl0UmVjb3JkKGEsZCxoKXtpZih0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQpdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJFZGl0IFJlY29yZCIpO2Vsc2UgaWYoISh2b2lkIDA9PT1kfHxkPDB8fHRoaXMucmVzdHJpY3Rpb25zLnJlc3Ry'@;
put 'aWN0RWRpdFJlY29yZCkpe2lmKHRoaXMucmVjb3JkQWN0aW9uPWg/IkFERCI6IkVESVQiLHRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZWRpdFRhYmxlKCExLGgpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRj'@;
put 'VmFsaWRhdG9yKSxoKXRoaXMucHJldkRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMucHJldkRhdGFTb3VyY2UucG9wKCk7ZWxzZXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5ob3RJbnN0YW5jZS5n'@;
put 'ZXRDZWxsTWV0YUF0Um93KGQpKTtmb3IobGV0IHYgb2YgZilpZih2KXtjb25zdCBUPXYucHJvcD8udG9TdHJpbmcoKTtkZWxldGUgdi5wcm9wLGRlbGV0ZSB2LmRhdGEsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZSh2LmNvbCx7Li4udixkYXRhOlR9KX19dGhp'@;
put 'cy5jdXJyZW50RWRpdFJlY29yZEluZGV4PWQsdGhpcy5jdXJyZW50RWRpdFJlY29yZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtkXSl9fXRvZ2dsZUhvdFBsdWdpbihhLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtoLmJhdGNoKCgpPT57bGV0IGY9'@;
put 'aC5nZXRQbHVnaW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUg'@;
put 'Zm91bmQuIil9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7'@;
put 'aWYodGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCB2PWguZ2V0RGF0YUF0Q2VsbChhLGQpLFQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl'@;
put 'ZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbYV0pLFk9T2JqZWN0LmtleXMoVClbZF0scmU9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKFQsW1ksIm5vTGlua09wdGlvbiJdLCExKSxmZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleChfZT0+X2UuaGFzaD09'@;
put 'PXJlKTtpZihmZT4tMSl7bGV0IF9lPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbZmVdLnZhbHVlcy5tYXAoSmU9PkplW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuUkFXX1ZBTFVFXSk7Y29uc3Qga2U9KGguZ2V0Q2VsbE1ldGEoYSxkKS5zb3VyY2V8fFtdKS5sZW5ndGg8MSxXZT0iICIh'@;
put 'PT12O2guYmF0Y2goKCk9Pntjb25zdCBKZT1oLmdldENlbGxNZXRhKGEsZCksdHQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShKZS5kYXRhfHwiIik7bGV0IHl0O3R0JiYoeXQ9dGhpcy5kY1ZhbGlkYXRvcj8uZ2V0RHFEcm9wZG93blNvdXJjZSh0dCkpLHl0fHwoeXQ9W10pLCJudW1lcmlj'@;
put 'Ij09PXR0Py50eXBlPyh5dD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKHl0LCJudW1iZXIiKSxfZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKF9lLCJudW1iZXIiKSk6KHl0PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMo'@;
put 'eXQsInN0cmluZyIpLF9lPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoX2UsInN0cmluZyIpKTtjb25zdCB3dD1bLi4ubmV3IFNldChbLi4ueXQsLi4uX2VdKV07aWYoaC5zZXRDZWxsTWV0YShhLGQsInNvdXJjZSIsd3QpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxp'@;
put 'ZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7c291cmNlOnd0fSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtmZV0udmFsdWVzLmxlbmd0aD4wKXtjb25zdCBMdD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW2ZlXS5zdHJpY3Q7aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIiwiYXV0b2NvbXBs'@;
put 'ZXRlIiksaC5zZXRDZWxsTWV0YShhLGQsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxoLnNldENlbGxNZXRhKGEsZCwic3RyaWN0IixMdCksaC5zZXRDZWxsTWV0YShhLGQsImZpbHRlciIsITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZCx7'@;
put 'cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6THQsZmlsdGVyOiExfSl9dGhpcy5yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXModGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtmZV0sYSxrZSYmV2UpLGgucmVuZGVyKCl9'@;
put 'KX1pZihmZTwwKXtjb25zdCBfZT17U0FTQ29udHJvbFRhYmxlOlt7bGliZHM6dGhpcy5saWJkcyx2YXJpYWJsZV9ubTpZfV0sc291cmNlX3JvdzpbVF19LGtlPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRGV0YWlscyhZKS5maW5kKFdlPT4iU09GVFNFTEVDVF9IT09LIj09PVdlLlJVTEVfVFlQ'@;
put 'RXx8IkhBUkRTRUxFQ1RfSE9PSyI9PT1XZS5SVUxFX1RZUEUpO2tlJiYodGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5wdXNoKHtyb3c6YSxjb2w6ZCxzdHJpY3Q6IkhBUkRTRUxFQ1RfSE9PSyI9PT1rZS5SVUxFX1RZUEUsdmFsdWVzOltdLGhhc2g6cmUsY291bnQ6dGhpcy5jZWxsVmFsaWRh'@;
put 'dGlvblNvdXJjZS5sZW5ndGgrMX0pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsd1dlKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixfZSx2b2lk'@;
put 'IDAse3N1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKFdlPT57aWYoV2UuZHluYW1pY192YWx1ZXMubWFwKHR0PT50dFt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pLmxlbmd0aD4wKXtjb25zdCB0dD10aGlz'@;
put 'LmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleCh5dD0+eXQuaGFzaD09PXJlKTt0dD4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbdHRdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3R0XSxyb3c6YSxjb2w6ZCx2YWx1ZXM6V2UuZHluYW1pY192YWx1ZXMsZXh0ZW5k'@;
put 'ZWRfdmFsdWVzOldlLmR5bmFtaWNfZXh0ZW5kZWRfdmFsdWVzfSksaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixUVSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0'@;
put 'Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixUVSksdGhpcy5j'@;
put 'dXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5sZW5ndGg+dGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdCl7'@;
put 'Y29uc3QgdHQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5yZWR1Y2UoKHd0LEx0KT0+d3QuY291bnQ8THQuY291bnQ/d3Q6THQpLHl0PXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuaW5kZXhPZih0dCk7dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5zcGxpY2UoeXQsMSl9fSkuY2F0Y2go'@;
put 'V2U9Pntjb25zdCBKZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmZpbmRJbmRleCh0dD0+dHQuaGFzaD09PXJlKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShKZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixiV2UpLGgucmVuZGVyKCl9'@;
put 'KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1lb3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVy'@;
put 'IixUVSksaC5yZW5kZXIoKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVjb3JkRXJyb3JzLmluZGV4T2YoZCksMSl9LDNlMyksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiZ2V0ZHlu'@;
put 'YW1pY2NvbHZhbHMgZXJyb3I6IixXZSl9KSl9fWNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCl7dGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0eXBlb2YgdGhpcy5maWx0ZXJfcGs8InUiJiYxPT09dGhpcy5ob3RUYWJsZS5kYXRhLmxlbmd0aCYmW251bGwsIiJdLmluY2x1ZGVzKHRoaXMuaG90VGFi'@;
put 'bGUuZGF0YVswXVt0aGlzLmhlYWRlclBrc1swXV0pJiYodGhpcy56ZXJvRmlsdGVyUm93cz0hMCl9b25SZWNvcmRJbnB1dEZvY3VzKGEpe3RoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCxhLmNvbE5hbWUpfWV4ZWN1dGVEeW5hbWljQ2VsbFZh'@;
put 'bGlkYXRpb25JZkFwcGxpY2FibGUoYSxkLGgpe2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlbGV0ZUtleXNBbmRIYXNoKHRoaXMuZGF0YVNvdXJjZVtoXSxbYSwibm9MaW5rT3B0aW9uIl0pLHY9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kKFQ9PlQuaGFzaD09PWYmJmQ9PT1U'@;
put 'LmNvbCk7aWYodiYmdi5leHRlbmRlZF92YWx1ZXMmJnYuZXh0ZW5kZWRfdmFsdWVzLmxlbmd0aD4wKXtjb25zdCBUPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZSh2LGgpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKHYsaCxULCEwKX19ZGF0YXNldEluZm9Nb2RhbFJv'@;
put 'd0NsaWNrZWQoYSl7dm9pZCAwIT09YS5MT0FEX1JFRiYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Avc3RhZ2UvJHthLkxPQURfUkVGfWBdKX12aWV3Ym94TWFuYWdlcigpe3RoaXMudmlld2JveGVzPSEwfWdldCB0b3RhbFJvd3NDaGFuZ2VkKCl7cmV0dXJuIHRoaXMucm93c0NoYW5nZWQucm93'@;
put 'c1VwZGF0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzRGVsZXRlZCt0aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZH1zZXRDZWxsRmlsdGVyKGEpe2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpLGg9ZCYmZFswXTtpZihoKXtjb25zdCBmPWhbMF0sVD1oWzFdO2lmKGY9PT1o'@;
put 'WzJdJiZUPT09aFszXSl7Y29uc3QgcmU9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShmLFQpO3JlJiZyZS5maWx0ZXI9PT0hYSYmdGhpcy5ob3RJbnN0YW5jZS5zZXRDZWxsTWV0YShmLFQsImZpbHRlciIsYSl9fX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24q'@;
put 'KCl7YS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGg9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9aH0pLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShoPT57aC5saWJkcz09PWEubGliZHMmJihhLndoZXJlU3RyaW5nPWguc3RyaW5n'@;
put 'LGEuY2xhdXNlcz1oLm9iail9KTtsZXQgZD17fTt0eXBlb2YgYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtPCJ1IiYmKGEubGliZHM9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLGEuZmlsdGVyX3BrPWEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkLCJlZGl0LXJl'@;
put 'Y29yZCI9PT1hLnJvdXRlLnNuYXBzaG90LnVybFswXS5wYXRoJiYoYS5yZWNvcmRBY3Rpb249dHlwZW9mIGEuZmlsdGVyX3BrPCJ1Ij8iRURJVCI6IkFERCIpLGQuTElCRFM9YS5saWJkcyx0eXBlb2YgYS5maWx0ZXJfcGs8InUiJiYoZC5GSUxURVJfUks9cGFyc2VJbnQoYS5maWx0ZXJfcGsp'@;
put 'KSxkLk9VVERFU1Q9IldFQiIsYS5saWJkcyYmKEduLmVkaXRvci5saWJyYXJ5PWEubGliZHMuc3BsaXQoIi4iKVswXSxHbi5lZGl0b3IudGFibGU9YS5saWJkcy5zcGxpdCgiLiIpWzFdKSksYS5saWJkcyYmKGEuZ2V0ZGF0YUVycm9yPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmNhbGxT'@;
put 'ZXJ2aWNlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYS5saWJkcykudGhlbihoPT57YS5pbml0U2V0dXAoaCl9KS5jYXRjaChoPT57YS5nZXRkYXRhRXJyb3I9ITAsYS50YWJsZVRydWU9ITB9KSl9KSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe31pbml0U2V0dXAoYSl7aWYo'@;
put 'dGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIiksdGhpcy5nZXRkYXRhRXJyb3J8fCFhfHwhYS5kYXRhKXJldHVybjt0aGlzLmNvbHM9YS5kYXRhLmNvbHMsdGhpcy5kc21ldGE9YS5kYXRhLmRzbWV0YSx0aGlzLnZlcnNpb25zPWEu'@;
put 'ZGF0YS52ZXJzaW9uc3x8W107Y29uc3QgZD10aGlzLmRzbWV0YS5maW5kKHJlPT4iTk9URVMiPT09cmUuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKHJlPT4iRERfTE9OR0RFU0MiPT09cmUuTkFNRSksZj10aGlzLmRzbWV0YS5maW5kKHJlPT4iRERfU0hPUlRERVNDIj09PXJlLk5BTUUpO3Ro'@;
put 'aXMuZHNOb3RlPWQmJmQuVkFMVUU/ZC5WQUxVRTpoJiZoLlZBTFVFP2guVkFMVUU6ZiYmZi5WQUxVRT9mLlZBTFVFOiIiO2NvbnN0IHY9dGhpcy5ob3RJbnN0YW5jZSxUPWEuZGF0YS5hcHByb3ZlcnM7dGhpcy5jb2xzJiYodGhpcy5oZWFkZXJBcnJheT0oYz0+e2NvbnN0IGw9W107Zm9yKGxl'@;
put 'dCBhIG9mIGMpIl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyIhPT1hLk5BTUUmJmwucHVzaChhLk5BTUUpO3JldHVybiBsfSkodGhpcy5jb2xzKSksVC5mb3JFYWNoKHJlPT57dGhpcy5hcHByb3ZlcnMucHVzaChyZS5QRVJTT05OQU1FKX0pLHRoaXMudGFibGVUcnVlPSEwLHRoaXMu'@;
put 'bGliZHM9YS5saWJkcyx0aGlzLmhvdFRhYmxlLmRhdGE9YS5kYXRhLnNhc2RhdGEsdGhpcy5oZWFkZXJDb2x1bW5zPWEuZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLHRoaXMuaGVhZGVyUGtzPWEuZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQoIiAiKSx0aGlzLmNv'@;
put 'bHVtbkxldmVsU2VjdXJpdHlGbGFnPSEhYS5kYXRhLnNhc3BhcmFtc1swXS5DTFNfRkxBRyx0aGlzLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnJiZ0aGlzLnNldFJlc3RyaWN0aW9ucyh7cmVzdHJpY3RBZGRSb3c6ITAscmVtb3ZlRWRpdFJlY29yZEJ1dHRvbjohMCxyZW1vdmVBZGRSZWNvcmRC'@;
put 'dXR0b246ITB9KSx0aGlzLmNoZWNrRW1wdHlSb3dXaGVuRmlsdGVyKCksLTEhPT10aGlzLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIikmJih0aGlzLmhlYWRlckNvbHVtbnNbdGhpcy5oZWFkZXJDb2x1bW5zLmluZGV4T2YoIl9fX19fREVM'@;
put 'RVRFX19USElTX19SRUNPUkRfX19fXyIpXT0iRGVsZXRlPyIpLHRoaXMuaGVhZGVyQXJyYXk9dGhpcy5oZWFkZXJDb2x1bW5zLnNsaWNlKDEpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMmJih0aGlzLmRhdGVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uRFRWQVJTLnNwbGl0'@;
put 'KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMmJih0aGlzLnRpbWVIZWFkZXJzPWEuZGF0YS5zYXNwYXJhbXNbMF0uVE1WQVJTLnNwbGl0KCIgIikpLCIiIT09YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUyYmKHRoaXMuZGF0ZVRpbWVIZWFkZXJzPWEuZGF0YS5zYXNw'@;
put 'YXJhbXNbMF0uRFRUTVZBUlMuc3BsaXQoIiAiKSksYS5kYXRhLnhsX3J1bGVzLmxlbmd0aD4wJiYodGhpcy54bFJ1bGVzPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnhsX3J1bGVzKSksdGhpcy5kY1ZhbGlkYXRvcj1uZXcgbVdlKGEuZGF0YS5zYXNwYXJhbXNbMF0sYS5k'@;
put 'YXRhLiRzYXNkYXRhLHRoaXMuY29scyxhLmRhdGEuZHFydWxlcyxhLmRhdGEuZHFkYXRhKSx0aGlzLmNlbGxWYWxpZGF0aW9uPXRoaXMuZGNWYWxpZGF0b3IuZ2V0UnVsZXMoKSx0aGlzLmRhdGFTb3VyY2U9YS5kYXRhLnNhc2RhdGEsdGhpcy4kZGF0YUZvcm1hdHM9YS5kYXRhLiRzYXNkYXRh'@;
put 'O2ZvcihsZXQgcmU9MDtyZTx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO3JlKyspdGhpcy5ob3REYXRhU2NoZW1hW3RoaXMuY2VsbFZhbGlkYXRpb25bcmVdLmRhdGFdPWdXZSh0aGlzLmNlbGxWYWxpZGF0aW9uW3JlXS50eXBlLHRoaXMuY2VsbFZhbGlkYXRpb25bcmVdKTt0aGlzLmNoZWNr'@;
put 'Um93TGltaXQoKSx2LnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24saGVpZ2h0OnRoaXMuaG90VGFibGUuaGVpZ2h0LGZvcm11bGFzOnRoaXMuaG90VGFibGUuZm9ybXVs'@;
put 'YXMsc3RyZXRjaEg6ImFsbCIscmVhZE9ubHk6dGhpcy5ob3RUYWJsZS5yZWFkT25seSxoaWRkZW5Db2x1bW5zOntpbmRpY2F0b3JzOiEwLGNvbHVtbnM6dGhpcy5kY1ZhbGlkYXRvci5nZXRIaWRkZW5Db2x1bW5zKCl9LG1vZGlmeUNvbFdpZHRoOmZ1bmN0aW9uKHJlLGZlKXtyZXR1cm4gMD09'@;
put 'PWZlPzYwOnJlPjUwMD81MDA6cmV9LGNvcHlQYXN0ZTp0aGlzLmhvdFRhYmxlLmNvcHlQYXN0ZSxtYW51YWxDb2x1bW5GcmVlemU6ITEsbXVsdGlDb2x1bW5Tb3J0aW5nOiEwLG1hbnVhbENvbHVtblJlc2l6ZTohMCxmaWx0ZXJzOiExLG1hbnVhbFJvd1Jlc2l6ZTohMCx2aWV3cG9ydFJvd1Jl'@;
put 'bmRlcmluZ09mZnNldDo1MCxyb3dIZWFkZXJzOnJlPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyNCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWR8fDEvMCxpbnZhbGlkQ2VsbENsYXNzTmFtZToiaHRJbnZhbGlkIixkcm9wZG93'@;
put 'bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjoocmUsZmUsX2Usa2UsV2UsSmUpPT57Y29uc3Qg'@;
put 'dHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCB5dCx3dD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgTHQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxvbj1MdD9MdFswXVsxXTotMSxzbj10aGlzLmhvdEluc3RhbmNlPy5j'@;
put 'b2xUb1Byb3Aob24pO3l0PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3NuXSx5dCYmKHd0PWBMQUJFTDogJHt5dD8ubGFiZWx9PGJyPlRZUEU6ICR7eXQ/LnR5cGV9PGJyPkxFTkdUSDogJHt5dD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7eXQ/LmZvcm1hdH1gKX1yZXR1cm4gdHQuaW5uZXJIVE1M'@;
put 'PXd0LHR0fX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihyZSxmZSk9Pntjb25zdCBfZT10aGlzLmNv'@;
put 'bHVtbkhlYWRlcltyZV0sa2U9X2UmJnRoaXMuaXNDb2xQayhfZSksV2U9X2UmJnRoaXMuaXNSZWFkb25seUNvbChfZSk7a2UmJmZlLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLFdlJiYha2UmJmZlLmNsYXNzTGlzdC5hZGQoInJlYWRvbmx5Q2VsbCIpLDA9PT1yZSYm'@;
put 'ZmUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpfSxhZnRlckdldENlbGxNZXRhOihyZSxmZSxfZSk9PntmZSYmdGhpcy5pc1JlYWRvbmx5Q29sKGZlKSYmKF9lLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhp'@;
put 'cy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhlYWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0i'@;
put 'RGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2xldCBZPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJob3RJbnN0YW5jZSIpO1kmJlkuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixyZT0+e3RoaXMudXBsb2FkUHJldmlld3x8dGhpcy5o'@;
put 'b3RDbGlja2VkKCksc2V0VGltZW91dCgoKT0+e2xldCBmZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO2ZlJiZmZS5jbGljaygpfSwxMDApfSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKHJlLGZlLF9lLGtlLFdlLEplKT0+e3JlPT09'@;
put 'X2UmJmZlPT09a2UmJiExPT09dGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5keW5hbWljQ2VsbFZhbGlkYXRpb24ocmUsZmUpfSksdi5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwo'@;
put 'KT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwocmUsZmUpPT57aWYoImVkaXQiPT09ZmUpe2NvbnN0IF9lPXRoaXMuaG90SW5zdGFuY2Usa2U9cmVbMF1bMF0sV2U9cmVbMF1bMV0sSmU9X2UucHJvcFRvQ29sKFdlKSx0dD1fZS5nZXRDZWxsTWV0'@;
put 'YShrZSxKZSk7dHQmJiExPT09dHQuZmlsdGVyJiZfZS5zZXRDZWxsTWV0YShrZSxKZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKFdlLEplLGtlKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixyZT0+e3RoaXMuZXZlbnRTZXJ2'@;
put 'aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSksdi5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKHJlLGZlKT0+e2lmKHJlPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2xldCBfZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIud3RIb2xkZXIiKTtzZXRUaW1lb3V0KCgpPT57X2UmJihfZS5z'@;
put 'Y3JvbGxUb3A9X2Uuc2Nyb2xsSGVpZ2h0KX0pfX0pLHYuYWRkSG9vaygiYmVmb3JlUGFzdGUiLChyZSxmZSk9Pntjb25zdCBfZT1mZVswXS5zdGFydENvbDtyZVswXT1yZVswXS5tYXAoKGtlLFdlKT0+e2NvbnN0IEplPXRoaXMuY29sdW1uSGVhZGVyW19lK1dlXSx0dD0ibnVtIj09PXRoaXMu'@;
put 'JGRhdGFGb3JtYXRzPy52YXJzW0plXT8udHlwZSx5dD0oMCx2cC5pc1NwZWNpYWxNaXNzaW5nKShrZSk7cmV0dXJuIHR0JiYhaXNOYU4oa2UpJiYheXQmJihrZSo9MSksa2V9KX0pLHYuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx2LmFkZEhv'@;
put 'b2soImFmdGVyQ3JlYXRlUm93IiwoKT0+e3RoaXMuY2hlY2tSb3dMaW1pdCgpfSksdGhpcy51cGxvYWRVcmw9InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZpbGUiLG51bGwhPT10aGlzLnJlY29yZEFjdGlvbiYmKCJBREQiPT09dGhpcy5yZWNvcmRBY3Rpb24/KHRoaXMuYWRkUmVjb3JkKCksdGhp'@;
put 'cy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKSk6MT09PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgmJnRoaXMuZWRpdFJlY29yZChudWxsLDApKSxhLmRhdGEucXVlcnkubGVuZ3RoPjAmJigiaG9tZSI9PT1Hbi5yb290UGFyYW18fCJlZGl0b3IiPT09R24ucm9v'@;
put 'dFBhcmFtKSYmMD09PUduLmVkaXRvci5maWx0ZXIuY2xhdXNlcy5sZW5ndGgmJihHbi5lZGl0b3IuZmlsdGVyLnF1ZXJ5PXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoYS5kYXRhLnF1ZXJ5KSxHbi5lZGl0b3IuZmlsdGVyLmxpYmRzPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmxp'@;
put 'Yk1lbSx0aGlzLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJlZGl0b3IiLHRoaXMuY29scykpLHYucmVuZGVyKCl9c3RhdGljI3I9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChoMSksc3QoR2wpLHN0KGQxKSxzdChk'@;
put 'aCksc3QoY3UpLHN0KHpzKSxzdChNYyksc3QoeWEpLHN0KEZhKSxzdChxZykpfTtzdGF0aWMjaT10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKFVvKFZxZSw3KSxVbyhqcWUsNSksVW8o'@;
put 'QnFlLDUpLFVvKFlxZSw1KSxVbyh6cWUsNSkpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGguaHQ9Zi5maXJzdCksTWkoZj1DaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExpc3Q9ZiksTWkoZj1DaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSxNaShmPUNpKCkpJiYoaC5ob3RJbnN0'@;
put 'YW5jZUNvbXBMaXN0PWYpLE1pKGY9Q2koKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjE3Nyx2YXJzOjc0LGNvbnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElu'@;
put 'cHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmls'@;
put 'ZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0s'@;
put 'WzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wLWkiXSxbInR5'@;
put 'cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2Rpbmci'@;
put 'LDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmlt'@;
put 'YXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJzaW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9k'@;
put 'YWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdz'@;
put 'IiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4'@;
put 'LTEiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1zaGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVt'@;
put 'biIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIiLCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRl'@;
put 'bnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJhY2tCdG4iLDQsIm5nSWYiXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImVkaXRvci10aXRsZSB0'@;
put 'ZXh0LWNlbnRlciBtdC0wLWkiLDQsIm5nVmFyIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1sZy00IGJ0bkN0cmwiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJjbHItZmxleC0xIiwiYmFj'@;
put 'a2dyb3VuZC10cmFuc3BhcmVudCIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjYXJkLXRleHQiLDQsIm5nSWYiXSxbMSwiY2FyZC10ZXh0IiwiaG90RWRpdG9yIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50Il0sWzEsImhvdC13cmFw'@;
put 'cGVyIiwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLDEsImVkaXQtaG90IiwzLCJsaWNlbnNlS2V5Il0sWzQsIm5nSWYiXSxbImNsYXNzIiwibXQtMi1pIHctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm1vZGFsIiw0LCJu'@;
put 'Z0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtLTAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0s'@;
put 'WzEsImR1cGxpY2F0ZS1rZXlzLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbImNsYXNzIiwiZC1ibG9jayIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5n'@;
put 'SWYiXSxbMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsidHlwZSIs'@;
put 'ImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMs'@;
put 'ImNsaWNrIiwiY2xyTG9hZGluZyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbInR5cGUiLCJidXR0b24iLDEs'@;
put 'ImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm1vZGFsLWJvZHkiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJpZCIsImZpbGVQYXNzd29y'@;
put 'ZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciJdLFsiY2xhc3MiLCJtLTAgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIs'@;
put 'ImRpc2FibGVkIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJjbHItY29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxb'@;
put 'ImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJd'@;
put 'LFsxLCJjbHItY29sLW1kLTMiLCJlZGl0QnRuIl0sWzEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsIm1yLTAi'@;
put 'LDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siXSxbMSwiZXhjZWwtcGFyc2luZyIsImNsci1jb2wtbWQtMTIiXSxbMywib25SZWNvcmRDaGFuZ2UiLCJvblJlY29yZElucHV0Rm9jdXNlZCIsIm9uUmVj'@;
put 'b3JkRWRpdENsb3NlIiwib25OZXh0UmVjb3JkIiwib25QcmV2aW91c1JlY29yZCIsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRlclBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJl'@;
put 'Y29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiXSxbMSwicHJvZ3Jlc1N0YXRpYyIsInByb2dyZXNzIiwibG9vcCJdLFsxLCJjbHItY29sLTEyIiwiY2xyLWNvbC1sZy00IiwiYmFja0J0biJdLFsx'@;
put 'LCJidG4iLCJidG4tc20iLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImJ0biIsImJ0bi1zbSIsInZpZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3It'@;
put 'dGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAtaSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwic2l6ZSIsIjI0IiwxLCJpcy1oaWdobGlnaHQiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYm9sdCIsImNsYXNzIiwiY29sb3It'@;
put 'eWVsbG93Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiJdLFsxLCJtci0xMCIsInZpZXctdGFibGUiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiYm9sdCIsMSwiY29sb3IteWVsbG93Il0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJj'@;
put 'bHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbMSwiY2xyLWNvbC0xMiIsImNsci1jb2wtbGctNCIsImJ0bkN0cmwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0blZpZXciLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIs'@;
put 'MywiY2xpY2siXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi1ibG9jayIsMywiY2xpY2siXSxbInNoYXBlIiwibm90ZSJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vz'@;
put 'cyBidG4tYmxvY2sgbXItMCIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4t'@;
put 'c20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsMywiY2xpY2siXSxbInNoYXBlIiwidGltZXMiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsic2hh'@;
put 'cGUiLCJwbHVzIiwic2l6ZSIsIjE2Il0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjIwIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1vdXRsaW5lLWRhbmdlciIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0'@;
put 'b24iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLXByaW1hcnkgYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJwcmV2aWV3LXN1Ym1pdCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0s'@;
put 'WyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsImJ0bi11cGxvYWQtcHJldmlldyIsMywiY2xpY2siXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwiY2FyZC10ZXh0Il0sWzEsImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1j'@;
put 'ZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWyJzaGFwZSIsImVycm9yLXN0YW5kYXJkIiwxLCJlcnJvci1pY29uIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNj'@;
put 'ZXNzIiwibXQtNS1pIiwzLCJjbGljayJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiLCJjbHJTaXplIiwibGciXSxbMSwibXQtMi1pIiwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJt'@;
put 'b2RhbCJdLFsicm9sZSIsImRpYWxvZyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtZGlhbG9nIiwibW9kYWwtbGciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJh'@;
put 'cmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJjbGFzcyIsImQtYmxvY2sgdy0xMDAgdGV4dC1jZW50ZXIgY29sb3ItcmVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1vZmZzZXQtbWQtMiBjbHItY29sLW1kLTgiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwianVz'@;
put 'dGlmeS1jb250ZW50LWNlbnRlci1pIl0sWyJpZCIsInN1Ym1pdEJ0biIsInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImlkIiwiY2FuY2VsU3VibWl0QnRuIiwidHlwZSIsImJ1dHRvbiIs'@;
put 'MSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImQtYmxvY2siLCJ3LTEwMCIsInRleHQtY2VudGVyIiwiY29sb3ItcmVkIl0sWzEsImNsci1vZmZzZXQtbWQtMiIsImNsci1jb2wtbWQtOCJdLFsxLCJmb3JtLWdyb3VwIl0sWyJmb3IiLCJmb3JtRmllbGRzXzgi'@;
put 'XSxbInR5cGUiLCJ0ZXh0IiwiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiLCJ2YWx1ZSJdLFsxLCJkLWJsb2NrIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9n'@;
put 'IiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibS0wIiwiY29sb3ItcmVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPUhuKCk7Z2UoMCwiZGl2Iiw2KSgxLCJjbHItbW9kYWwiLDcpLEh0KCJmaWxlT3ZlciIsZnVuY3Rpb24oVCl7'@;
put 'cmV0dXJuIFN0KGYpLHh0KGguZmlsZU92ZXJCYXNlKFQpKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGguZ2V0RmlsZURlc2MoVCwhMCkpfSksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguc2hvd1VwbG9hZE1v'@;
put 'ZGFsLFQpfHwoaC5zaG93VXBsb2FkTW9kYWw9VCkseHQoVCl9KSxnZSgyLCJoMyIsOCksemUoMywiVXBsb2FkIEZpbGUiKSxiZSgpLGdlKDQsImRpdiIsOSkoNSwiZGl2IiwxMCkoNiwic3BhbiIpLHplKDcsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksYmUoKSgpLGdlKDgsImRp'@;
put 'diIsMTEpKDksImRpdiIsMTIpKDEwLCJkaXYiLDEzKSgxMSwiZGl2IiwxNCkoMTIsImNsci1yYWRpby1jb250YWluZXIiLDE1KSgxMywiY2xyLXJhZGlvLXdyYXBwZXIiKSgxNCwiaW5wdXQiLDE2KSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguZW5j'@;
put 'b2RpbmcsVCl8fChoLmVuY29kaW5nPVQpLHh0KFQpfSksYmUoKSxnZSgxNSwibGFiZWwiKSx6ZSgxNiwiVVRGLTgiKSxiZSgpKCksZ2UoMTcsImNsci1yYWRpby13cmFwcGVyIikoMTgsImlucHV0IiwxNyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxciho'@;
put 'LmVuY29kaW5nLFQpfHwoaC5lbmNvZGluZz1UKSx4dChUKX0pLGJlKCksZ2UoMTksImxhYmVsIiksemUoMjAsIldMQVRJTjEiKSxiZSgpKCkoKSgpKCksYnQoMjEsR3FlLDYsMSwiZGl2IiwxOCkoMjIsJHFlLDMsMSwiZGl2IiwxOSksZ2UoMjMsImRpdiIsMTMpLGJ0KDI0LHFxZSwyLDEsImJ1'@;
put 'dHRvbiIsMjApKDI1LEtxZSwyLDAsImJ1dHRvbiIsMjEpLGJlKCksYnQoMjYsWHFlLDMsMCwiZGl2IiwyMiksYmUoKSgpKCksSnQoMjcsImRpdiIsMjMpLGJlKCksYnQoMjgsSnFlLDEsMTIsImFwcC1lZGl0LXJlY29yZCIsMjQpLGdlKDI5LCJkaXYiLDI1LDApLGJ0KDMxLFFxZSwyLDAsImRp'@;
put 'diIsMjYpLGdlKDMyLCJkaXYiLDI3KSxIdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZ2UoMzMsImRpdiIsMjgpLGJ0KDM0LGVLZSw3LDIsImRpdiIsMjkpLGdlKDM1LCJkaXYiLDMwKSxidCgzNixhS2UsMTAs'@;
put 'NiwiaDQiLDMxKSxiZSgpLGJ0KDM3LG1LZSw0LDMsImRpdiIsMzIpKDM4LGdLZSw1LDEsImRpdiIsMzMpLGJlKCksZ2UoMzksImRpdiIsMzQpLGJ0KDQwLHlLZSw0LDIsImRpdiIsMzUpLGdlKDQxLCJkaXYiLDM2KSg0MiwiZGl2IiwzNyksSnQoNDMsImhvdC10YWJsZSIsMzgsMSksYmUoKSxn'@;
put 'ZSg0NSwiZGl2IiksYnQoNDYsTUtlLDUsMiwiY2xyLXRvb2x0aXAiLDM5KSg0NyxDS2UsMywxLCJwIiw0MCksYmUoKSxidCg0OCxrS2UsMTYsNiwiZGl2Iiw0MSksZ2UoNDksImNsci1tb2RhbCIsNDIpLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxx'@;
put 'cihoLnN1Ym1pdExpbWl0Tm90aWNlLFQpfHwoaC5zdWJtaXRMaW1pdE5vdGljZT1UKSx4dChUKX0pLGdlKDUwLCJoMyIsOCksemUoNTEsIk5vdGljZSIpLGJlKCksZ2UoNTIsImRpdiIsOSkoNTMsInAiLDQzKSx6ZSg1NCksYmUoKSgpLGdlKDU1LCJkaXYiLDIzKSg1NiwiYnV0dG9uIiw0NCks'@;
put 'SHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLnN1Ym1pdExpbWl0Tm90aWNlPSExKX0pLHplKDU3LCIgQ2FuY2VsICIpLGJlKCksZ2UoNTgsImJ1dHRvbiIsNDQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZiksaC5nZXRGaWxlKCkseHQoaC5zdWJtaXRM'@;
put 'aW1pdE5vdGljZT0hMSl9KSx6ZSg1OSwiIFN1Ym1pdCAiKSxiZSgpKCkoKSxnZSg2MCwiY2xyLW1vZGFsIiw0MiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguYmFkRWRpdCxUKXx8KGguYmFkRWRpdD1UKSx4dChUKX0pLGdlKDYxLCJoMyIs'@;
put 'OCksemUoNjIpLGJlKCksZ2UoNjMsImRpdiIsOSkoNjQsInAiKSx6ZSg2NSksYmUoKSgpLGdlKDY2LCJkaXYiLDIzKSg2NywiYnV0dG9uIiw0NCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmJhZEVkaXQ9ITEpfSksemUoNjgsIiBPayAiKSxiZSgpKCkoKSxnZSg2'@;
put 'OSwiY2xyLW1vZGFsIiw0MiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGgucGtOdWxsLFQpfHwoaC5wa051bGw9VCkseHQoVCl9KSxnZSg3MCwiaDMiLDgpLHplKDcxLCJFcnJvciIpLGJlKCksZ2UoNzIsImRpdiIsOSkoNzMsInAiKSx6ZSg3'@;
put 'NCwiIE51bGwgdmFsdWVzIG9yIGluY29ycmVjdCBkYXRhIHR5cGVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksYmUoKSgpLGdlKDc1LCJkaXYiLDIzKSg3NiwiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSxoLnBr'@;
put 'TnVsbD0hMSx4dChoLmJhZEVkaXQ9ITEpfSksemUoNzcsIiBPayAiKSxiZSgpKCkoKSxnZSg3OCwiY2xyLW1vZGFsIiw0MiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGgubm9Qa051bGwsVCl8fChoLm5vUGtOdWxsPVQpLHh0KFQpfSksZ2Uo'@;
put 'NzksImgzIiw4KSx6ZSg4MCwiRXJyb3IiKSxiZSgpLGdlKDgxLCJkaXYiLDkpKDgyLCJwIiksemUoODMsIkluY29ycmVjdCBkYXRhIHR5cGVzIGluIG5vbi1QcmltYXJ5IEtleSBjb2x1bW5zIiksYmUoKSgpLGdlKDg0LCJkaXYiLDIzKSg4NSwiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBTdChmKSxoLm5vUGtOdWxsPSExLHh0KGguYmFkRWRpdD0hMSl9KSx6ZSg4NiwiIE9rICIpLGJlKCkoKSgpLGdlKDg3LCJjbHItbW9kYWwiLDQ2KSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5wa0R1cHMsVCl8fCho'@;
put 'LnBrRHVwcz1UKSx4dChUKX0pLGdlKDg4LCJoMyIsOCksemUoODksIkVycm9yIiksYmUoKSxnZSg5MCwiZGl2Iiw5KSg5MSwicCIpLHplKDkyLCIgRHVwbGljYXRlIHZhbHVlcyBjYW5ub3QgYmUgc3VibWl0dGVkIGZvciBQcmltYXJ5IEtleSBjb2x1bW5zICIpLGJlKCksZ2UoOTMsInAiKSx6'@;
put 'ZSg5NCwiRHVwbGljYXRlcyBmb3VuZDoiKSxiZSgpLGJ0KDk1LEVLZSwzLDQsInNwYW4iLDQ3KSxiZSgpLGdlKDk2LCJkaXYiLDIzKSg5NywiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLnBrRHVwcz0hMSl9KSx6ZSg5OCwiIE9rICIpLGJlKCko'@;
put 'KSgpLGdlKDk5LCJjbHItbW9kYWwiLDQyKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC50b29Mb25nLFQpfHwoaC50b29Mb25nPVQpLHh0KFQpfSksZ2UoMTAwLCJoMyIsOCksemUoMTAxLCJFcnJvciIpLGJlKCksZ2UoMTAyLCJkaXYiLDkp'@;
put 'KDEwMywicCIpLHplKDEwNCwiIFRoZSBmb2xsb3dpbmcgY29sdW1ucyBoYXZlIHZhbHVlcyB0aGF0IGV4Y2VlZCBsZW5ndGggbGltaXRzOiAiKSxiZSgpLGJ0KDEwNSxUS2UsMiwzLCJwIiw0OCksYmUoKSxnZSgxMDYsImRpdiIsMjMpKDEwNywiYnV0dG9uIiw0NSksSHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBTdChmKSxoLnRvb0xvbmc9ITEseHQoaC5jbGVhbkV4Y2VlZCgpKX0pLHplKDEwOCwiIE9rICIpLGJlKCkoKSgpKCkoKSgpKCkoKSxidCgxMDksREtlLDE0LDAsImRpdiIsNDkpLGdlKDExMCwiY2xyLW1vZGFsIiw1MCksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVu'@;
put 'Y3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguZmlsdGVyLFQpfHwoaC5maWx0ZXI9VCkseHQoVCl9KSxnZSgxMTEsImgzIiw1MSksemUoMTEyLCIgRmlsdGVyIGZvciB0YWJsZTogIiksZ2UoMTEzLCJzcGFuIiksemUoMTE0KSxiZSgpKCksZ2UoMTE1LCJkaXYiLDkpLGJ0KDExNixBS2UsMiww'@;
put 'LCJhcHAtcXVlcnkiLDM5KSxiZSgpLGdlKDExNywiZGl2IiwyMykoMTE4LCJidXR0b24iLDUyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgucmVzZXRGaWx0ZXIoKSl9KSx6ZSgxMTksIiByZXNldCBmaWx0ZXIgIiksYmUoKSxnZSgxMjAsImJ1dHRvbiIsNTMpLEh0'@;
put 'KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5maWx0ZXI9ITEpfSksemUoMTIxLCIgQ2FuY2VsICIpLGJlKCksZ2UoMTIyLCJidXR0b24iLDU0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGguc2VuZENsYXVzZSgpKX0pLHplKDEyMywiIE9rICIp'@;
put 'LGJlKCkoKSgpLGdlKDEyNCwiY2xyLW1vZGFsIiw0MiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGgucXVlcnlFcnIsVCl8fChoLnF1ZXJ5RXJyPVQpLHh0KFQpfSksZ2UoMTI1LCJoMyIsOCksemUoMTI2LCJFcnJvciIpLGJlKCksZ2UoMTI3'@;
put 'LCJkaXYiLDkpKDEyOCwicCIpLHplKDEyOSksYmUoKSgpLGdlKDEzMCwiZGl2IiwyMykoMTMxLCJidXR0b24iLDU1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgucXVlcnlFcnI9ITEpfSksemUoMTMyLCIgQ2FuY2VsICIpLGJlKCksZ2UoMTMzLCJidXR0b24iLDQ1'@;
put 'KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgucXVlcnlFcnI9ITEpfSksemUoMTM0LCIgT2sgIiksYmUoKSgpKCksZ2UoMTM1LCJjbHItbW9kYWwiLDU2KSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5kaXNjYXJk'@;
put 'U291cmNlRmlsZSxUKXx8KGguZGlzY2FyZFNvdXJjZUZpbGU9VCkseHQoVCl9KSxnZSgxMzYsImgzIiw1MSksemUoMTM3LCJXYXJuaW5nIiksYmUoKSxnZSgxMzgsImRpdiIsOSksemUoMTM5LCIgVGhpcyBhY3Rpb24gd2lsbCBkaXNjYXJkIHRoZSBzb3VyY2UgZmlsZSBhbmQgaXQncyBsb2Fk'@;
put 'ZWQgZGF0YSAiKSxnZSgxNDAsImIiKSx6ZSgxNDEpLGJlKCksemUoMTQyLCIgRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksYmUoKSxnZSgxNDMsImRpdiIsMjMpKDE0NCwiYnV0dG9uIiw1MyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmRpc2NhcmRTb3VyY2VG'@;
put 'aWxlPSExKX0pLHplKDE0NSwiIENhbmNlbCAiKSxiZSgpLGdlKDE0NiwiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSxoLmRpc2NhcmRTb3VyY2VGaWxlPSExLHh0KGguZGlzY2FyZFBlbmRpbmdFeGNlbCghMCkpfSksemUoMTQ3LCIgT2sgIiksYmUoKSgp'@;
put 'KCksZ2UoMTQ4LCJjbHItbW9kYWwiLDU2KSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5maWxlUGFzc3dvcmRNb2RhbCxUKXx8KGguZmlsZVBhc3N3b3JkTW9kYWw9VCkseHQoVCl9KSxnZSgxNDksImgzIiw1MSksemUoMTUwLCIgUGFzc3dv'@;
put 'cmQgUHJvdGVjdGVkIEZpbGUgIiksYmUoKSxnZSgxNTEsImRpdiIsNTgpKDE1MiwicCIsNDMpLHplKDE1MywiUGxlYXNlIGVudGVyIHBhc3N3b3JkOiIpLGJlKCksSnQoMTU0LCJpbnB1dCIsNTksMiksYmUoKSxnZSgxNTYsImRpdiIsMjMpLGJ0KDE1NyxMS2UsMiwwLCJwIiw2MCksZ2UoMTU4'@;
put 'LCJidXR0b24iLDUzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLGguZmlsZVBhc3N3b3JkTW9kYWw9ITEseHQoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQodm9pZCAwKSl9KSx6ZSgxNTksIiBDYW5jZWwgdXBsb2FkICIpLGJlKCksZ2UoMTYwLCJidXR0b24iLDYxKSxI'@;
put 'dCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoZik7Y29uc3QgVD1YaSgxNTUpO3JldHVybiBoLmZpbGVQYXNzd29yZE1vZGFsPSExLHh0KGguZmlsZVBhc3N3b3JkU3ViamVjdC5uZXh0KFQudmFsdWUpKX0pLHplKDE2MSwiIFVubG9jayAiKSxiZSgpKCkoKSxnZSgxNjIsImNsci1tb2RhbCIsNTYp'@;
put 'LEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLm1hbnVhbEZpbGVFZGl0TW9kYWwsVCl8fChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9VCkseHQoVCl9KSxnZSgxNjMsImgzIiw1MSksemUoMTY0LCJXYXJuaW5nIiksYmUoKSxnZSgxNjUsImRpdiIs'@;
put 'OSksemUoMTY2LCIgTWFudWFsbHkgZWRpdGluZyB0aGlzIGRhdGEgd2lsbCBtZWFuIHRoZSBzb3VyY2UgZmlsZSAiKSxnZSgxNjcsImIiKSx6ZSgxNjgpLGJlKCksemUoMTY5LCIgd2lsbCBiZSBkaXNjYXJkZWQuIERvIHlvdSB3aXNoIHRvIHByb2NlZWQ/ICIpLGJlKCksZ2UoMTcwLCJkaXYi'@;
put 'LDIzKSgxNzEsImJ1dHRvbiIsNTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5tYW51YWxGaWxlRWRpdE1vZGFsPSExKX0pLHplKDE3MiwiIENhbmNlbCAiKSxiZSgpLGdlKDE3MywiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChm'@;
put 'KSxoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEseHQoaC5wcmV2aWV3VGFibGVFZGl0Q29uZmlybSgpKX0pLHplKDE3NCwiIE9rICIpLGJlKCkoKSgpLGdlKDE3NSwiYXBwLWRhdGFzZXQtaW5mbyIsNjIpLEdyKCJvcGVuQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5kYXRh'@;
put 'c2V0SW5mbyxUKXx8KGguZGF0YXNldEluZm89VCkseHQoVCl9KSxIdCgicm93Q2xpY2tlZCIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGguZGF0YXNldEluZm9Nb2RhbFJvd0NsaWNrZWQoVCkpfSksYmUoKSxnZSgxNzYsImFwcC12aWV3Ym94ZXMiLDYzKSxHcigidmlld2JveE1vZGFs'@;
put 'Q2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC52aWV3Ym94ZXMsVCl8fChoLnZpZXdib3hlcz1UKSx4dChUKX0pLGJlKCl9aWYoMiZkKXtjb25zdCBmPVhpKDE1NSk7d2UoKSxQZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2Rh'@;
put 'bFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksV3IoImNsck1vZGFsT3BlbiIsaC5zaG93VXBsb2FkTW9kYWwpLHdlKDEzKSxXcigibmdNb2RlbCIsaC5lbmNvZGluZyksUGUoImRpc2FibGVkIiwiIiE9'@;
put 'aC5maWxlbmFtZSksd2UoNCksV3IoIm5nTW9kZWwiLGguZW5jb2RpbmcpLFBlKCJkaXNhYmxlZCIsIiIhPWguZmlsZW5hbWUpLHdlKDMpLFBlKCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYhaC51cGxvYWRMb2FkaW5nKSx3ZSgpLFBlKCJuZ0lmIiwhaC5leGNlbEZpbGVQYXJzaW5nJiYh'@;
put 'aC51cGxvYWRMb2FkaW5nKSx3ZSgyKSxQZSgibmdJZiIsIlZhbGlkYXRpbmciIT09aC5leGNlbFVwbG9hZFN0YXRlKSx3ZSgpLFBlKCJuZ0lmIiwiVmFsaWRhdGluZy1EUSI9PT1oLmV4Y2VsVXBsb2FkU3RhdGUpLHdlKCksUGUoIm5nSWYiLGguZXhjZWxGaWxlUGFyc2luZyksd2UoMiksUGUo'@;
put 'Im5nSWYiLGguY3VycmVudEVkaXRSZWNvcmRJbmRleD4tMSksd2UoMyksUGUoIm5nSWYiLCFoLnZhbGlkYXRpb25Eb25lJiZoLnN1Ym1pdCksd2UoMyksUGUoIm5nSWYiLGgudGFibGVUcnVlKSx3ZSgpLGJyKCJjbHItY29sLWxnLTEyIiwhaC50YWJsZVRydWUpLHdlKCksUGUoIm5nVmFyIixs'@;
put 'Zig2NyxVcWUsbnVsbD09aC5saWJkcz9udWxsOmgubGliZHMuc3BsaXQoIi4iKVswXSxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzFdKSksd2UoKSxQZSgibmdJZiIsaC50YWJsZVRydWUpLHdlKCksUGUoIm5nSWYiLCFEYSg3MCxrY2UpLmluY2x1ZGVzKGgucXVlcnlU'@;
put 'ZXh0KSksd2UoKSxQZSgibmdDbGFzcyIsYWYoNzIsWnFlLCFEYSg3MSxrY2UpLmluY2x1ZGVzKGgucXVlcnlUZXh0KSkpLHdlKCksUGUoIm5nSWYiLCFoLnRhYmxlVHJ1ZSksd2UoMyksYnIoImhpZGRlbiIsaC5ob3RUYWJsZS5oaWRkZW4pLFBlKCJsaWNlbnNlS2V5IixoLmhvdFRhYmxlLmxp'@;
put 'Y2Vuc2VLZXkpLHdlKDMpLFBlKCJuZ0lmIixoLnRhYmxlVHJ1ZSYmIWgucmVzdHJpY3Rpb25zLnJlbW92ZUFkZFJlY29yZEJ1dHRvbiksd2UoKSxQZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkmJmguZGF0YVNvdXJjZSYmaC5k'@;
put 'YXRhU291cmNlLmxlbmd0aD5oLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKSx3ZSgpLFBlKCJuZ0lmIixoLnN1Ym1pdCksd2UoKSxXcigiY2xyTW9kYWxPcGVuIixoLnN1Ym1pdExpbWl0Tm90aWNlKSx3ZSg1KSx4cigiIER1ZSB0byBjdXJyZW50IGxpY2VuY2UsIG9u'@;
put 'bHkgIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCwiIHJvd3MgaW4gYSBmaWxlIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksd2UoNiksV3IoImNsck1vZGFsT3Bl'@;
put 'biIsaC5iYWRFZGl0KSx3ZSgyKSxwcihoLmJhZEVkaXRUaXRsZXx8IkVycm9yIiksd2UoMykscHIoaC5iYWRFZGl0Q2F1c2UpLHdlKDQpLFdyKCJjbHJNb2RhbE9wZW4iLGgucGtOdWxsKSx3ZSg5KSxXcigiY2xyTW9kYWxPcGVuIixoLm5vUGtOdWxsKSx3ZSg5KSxXcigiY2xyTW9kYWxPcGVu'@;
put 'IixoLnBrRHVwcyksd2UoOCksUGUoIm5nRm9yT2YiLGguZHVwbGljYXRlUGtJbmRleGVzKSx3ZSg0KSxXcigiY2xyTW9kYWxPcGVuIixoLnRvb0xvbmcpLHdlKDYpLFBlKCJuZ0Zvck9mIixoLmV4Y2VlZENlbGxzKSx3ZSg0KSxQZSgibmdJZiIsaC5udWxsVmFyaWFibGVzKSx3ZSgpLFdyKCJj'@;
put 'bHJNb2RhbE9wZW4iLGguZmlsdGVyKSxQZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLHdlKDQpLHhyKCIgIixoLmxpYmRzLCIgIiksd2UoMiksUGUoIm5nSWYiLGguZmlsdGVyKSx3ZSg2KSxQZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5nKSx3ZSgy'@;
put 'KSxXcigiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSx3ZSg1KSxwcihoLnF1ZXJ5RXJyTWVzc2FnZSksd2UoNiksV3IoImNsck1vZGFsT3BlbiIsaC5kaXNjYXJkU291cmNlRmlsZSksUGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSx3ZSg2KSxwcihoLmZp'@;
put 'bGVuYW1lKSx3ZSg3KSxXcigiY2xyTW9kYWxPcGVuIixoLmZpbGVQYXNzd29yZE1vZGFsKSxQZSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLHdlKDkpLFBlKCJuZ0lmIixoLmZpbGVVbmxvY2tFcnJvciksd2UoMyksUGUoImRpc2FibGVkIixmLnZhbHVlLmxl'@;
put 'bmd0aDwxKSx3ZSgyKSxXcigiY2xyTW9kYWxPcGVuIixoLm1hbnVhbEZpbGVFZGl0TW9kYWwpLFBlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksd2UoNikscHIoaC5maWxlbmFtZSksd2UoNyksV3IoIm9wZW4iLGguZGF0YXNldEluZm8pLFBlKCJkc21ldGEi'@;
put 'LGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLHdlKCksV3IoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94ZXMpfX0sZGVwZW5kZW5jaWVzOltiY2UsVWMsTHMscWksVGwsaUUsY2Esb2EsazAsWmEsQnUsWXUscjAsWGQsbzIsWHMsSU4sRlRlLExOLHQ5LHI5LG45LEx3LCQ5LEtiLHdj'@;
put 'ZSxNY2UsQ2NlLG5ULElVLFBxZSxIcWUsTnFlLHhjZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtib3JkZXI6MH0uYnV0dG9uQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udGVzdFJlZFtf'@;
put 'bmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmMDBjIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZXti'@;
put 'YWNrZ3JvdW5kOiMzMDZiMDBiMH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRoLnJlYWRvbmx5Q2VsbCBkaXZ7b3BhY2l0eTouNH1ob3Qt'@;
put 'dGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICB0ZC5yZWFkb25seUNlbGx7b3BhY2l0eTouNX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxNHB4O2JhY2tncm91bmQ6IzQ5NTk2Nztjb2xvcjojZmZmO3RleHQtYWxpZ246Y2VudGVyO3BhZGRpbmc6M3B4O2ZvbnQt'@;
put 'c2l6ZToxNnB4O2hlaWdodDozMHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo4MCV9LmluZm9CYXJbX25nY29udGVudC0l'@;
put 'Q09NUCVdOmhvdmVye2hlaWdodDp1bnNldDt3aGl0ZS1zcGFjZTpub3JtYWx9LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVyICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6dW5zZXR9LnBrSGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiM2ODc2ODI7'@;
put 'Y29sb3I6I2ZmZjttYXJnaW46LTFweH0uaGVhZGVyQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZDojZmZmO2JhY2tncm91bmQ6I2Y1ZjZmZX0uZXJyb3ItaWNvbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweDtoZWlnaHQ6MzBweDtjb2xv'@;
put 'cjpyZWR9LmJ0bkN0cmxbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNhcmQtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItYm90dG9tOjFweCBzb2xpZCB0cmFuc3BhcmVudH0uaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXt2aXNpYmlsaXR5OmhpZGRlbn0ubXktZHJvcC16b25lW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4IGxpZ2h0Z3JheTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDojZjVmNWY1O2JveC1zaGFkb3c6aW5zZXQgMCAwIDRweCAycHggI2E3YTVhNTJiO2hlaWdodDo1'@;
put 'MHZofS5udi1maWxlLW92ZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAycHggZ3JlZW59LmZpbGUtZHJvcC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnByb2dyZXNTdGF0aWNb'@;
put 'X25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6OXB4IWltcG9ydGFudH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDpjYWxjKDEwMCUgLSAxNHB4KX19LmhvdEVkaXRvcltfbmdjb250ZW50LSVDT01QJV17'@;
put 'cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJlbGF0aXZlfS5leGNlbC1wYXJzaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kZXRh'@;
put 'aWxzW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6LTQ1cHh9LmVkaXQtcmVjb3JkLXNwaW5uZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5k'@;
put 'OiNmZmY5O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3dpZHRoOjEwMCU7ei1pbmRleDo1MDB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDgwcHgpey5wcm9ncmVzU3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjMycHghaW1wb3J0YW50fS5jYXJk'@;
put 'LWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNhcmQtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMCAwfX0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjhyZW0gLjhyZW0haW1wb3J0YW50O3BhZGRpbmctdG9wOjB9LmRyb3AtYXJl'@;
put 'YVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW46MXB4O2JvcmRlcjoycHggZGFzaGVkICNmZmY7ei1pbmRleDotMX0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25n'@;
put 'Y29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToyMHB4O21hcmdpbi10b3A6MjBweDtjb2xvcjojZmZmfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNTBweH0udmlldy10YWJsZVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50fSJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IElLZT1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDpyQX0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6ckF9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25l'@;
put 'bnQ6ckF9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OnJBfV07bGV0IFJLZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0'@;
put 'eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sV2MuZm9yQ2hpbGQoSUtlKSxXY119KX1yZXR1cm4gY30pKCksaUE9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10'@;
put 'aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLHMwLG1vLENjLHkyXX0pfXJldHVybiBjfSkoKSxPVT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9'@;
put 'O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sczAsbW8sQ2MsRzksYU0seTJdfSl9cmV0dXJuIGN9KSgpLERjZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW8sczAsbW8sQ2MsT1UseDkseXRlLHVjZSxpQSx5Ml19KX1yZXR1cm4gY30pKCk7Z1UoKTtsZXQgT0tlPSgoKT0+e2NsYXNz'@;
put 'IGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOltEY2UsbW8sQ2MsUktlLHMwLHg5LmZvclJvb3QoKSxHOSx5'@;
put 'MixXOSxhTSxpQSx5dGUsT1VdfSl9cmV0dXJuIGN9KSgpLFBLZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUw'@;
put 'Mjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1ob21lLXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmSnQoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W0k0'@;
put 'XX0pfXJldHVybiBjfSkoKTtjb25zdCBGS2U9WyJzaWRlYmFyTmF2Il0sSEtlPVsiKiJdLE5LZT0oKT0+WyIvdmlldy91c2VybmF2L3VzZXJzIl0sVktlPSgpPT5bIi92aWV3L3VzZXJuYXYvZ3JvdXBzIl0saktlPSgpPT5bIi92aWV3L3VzZXJuYXYvcm9sZXMiXTtmdW5jdGlvbiBCS2UoYyxs'@;
put 'KXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJhIiwxOCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgzKS5uYXZpZ2F0ZVRvVmlld2VyKCkpfSksemUoMSwiRGF0YSIpLGJlKCl9fWZ1bmN0aW9uIFlLZShjLGwpezEmYyYmKGdlKDAsImEiLDE5KSx6ZSgxLCJB'@;
put 'UEkgRXhwbG9yZXIiKSxiZSgpKX1mdW5jdGlvbiB6S2UoYyxsKXsxJmMmJihnZSgwLCJhIiwyMCksemUoMSwiTGluZWFnZSIpLGJlKCkpfWZ1bmN0aW9uIFVLZShjLGwpezEmYyYmKGdlKDAsImEiLDIxKSx6ZSgxLCJNZXRhZGF0YSIpLGJlKCkpfWZ1bmN0aW9uIFpLZShjLGwpezEmYyYmKGdl'@;
put 'KDAsImEiLDIyKSx6ZSgxLCIgVXNlcnMiKSxiZSgpKX1mdW5jdGlvbiBXS2UoYyxsKXsxJmMmJihnZSgwLCJhIiwyMyksemUoMSwiU3VibWl0dGVkIiksYmUoKSl9ZnVuY3Rpb24gR0tlKGMsbCl7MSZjJiYoZ2UoMCwiYSIsMjQpLHplKDEsIlRvIEFwcHJvdmUiKSxiZSgpKX1mdW5jdGlvbiAk'@;
put 'S2UoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItZHJvcGRvd24tbWVudSIpLGJ0KDEsQktlLDIsMCwiYSIsMTEpKDIsWUtlLDIsMCwiYSIsMTIpKDMsektlLDIsMCwiYSIsMTMpKDQsVUtlLDIsMCwiYSIsMTQpKDUsWktlLDIsMCwiYSIsMTUpKDYsV0tlLDIsMCwiYSIsMTYpKDcsR0tlLDIsMCwi'@;
put 'YSIsMTcpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikpLHdlKCksUGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBU1ZJWUEiPT09YS5zZXJ2ZXJUeXBlKSx3ZSgpLFBlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2'@;
put 'aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksd2UoKSxQZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTOSI9PT1hLnNlcnZlclR5cGUpLHdlKCksUGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksd2UoKSxQZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgiYXBwcm92'@;
put 'ZSIpKSx3ZSgpLFBlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpfX1mdW5jdGlvbiBxS2UoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksemUoMyksSnQoNCwiY2xyLWljb24iLDkpLGJlKCksYnQoNSwkS2UsOCw3LCJj'@;
put 'bHItZHJvcGRvd24tbWVudSIsMTApLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoMykseHIoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWZ1bmN0aW9uIEtLZShjLGwpezEmYyYmSnQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gWEtlKGMsbCl7MSZjJiZKdCgwLCJjbHItdGFi'@;
put 'LWNvbnRlbnQiKX1mdW5jdGlvbiBKS2UoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItdGFiIikoMSwiYnV0dG9uIiwyNikoMiwicCIsMjcpLEp0KDMsImNsci1pY29uIiwzMiksemUoNCwiIFJvbGVzICIpLGJlKCkoKSxidCg1LFhLZSwxLDAsImNsci10YWItY29udGVudCIsMzApLGJlKCkpLDIm'@;
put 'Yyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJyb3V0ZXJMaW5rIixEYSgyLGpLZSkpLHdlKDQpLFBlKCJjbHJJZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9yb2xlcyIpKX19ZnVuY3Rpb24gUUtlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRhYnMiLDI1KSgxLCJjbHIt'@;
put 'dGFiIikoMiwiYnV0dG9uIiwyNikoMywicCIsMjcpLEp0KDQsImNsci1pY29uIiwyOCksemUoNSwiIFVzZXJzIiksYmUoKSgpLEp0KDYsImNsci10YWItY29udGVudCIpLGJlKCksZ2UoNywiY2xyLXRhYiIpKDgsImJ1dHRvbiIsMjYpKDksInAiLDI3KSxKdCgxMCwiY2xyLWljb24iLDI5KSx6'@;
put 'ZSgxMSwiIEdyb3VwcyIpLGJlKCkoKSxidCgxMixLS2UsMSwwLCJjbHItdGFiLWNvbnRlbnQiLDMwKSxiZSgpLGJ0KDEzLEpLZSw2LDMsImNsci10YWIiLDMxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgyKSxQZSgicm91dGVyTGluayIsRGEoNCxOS2UpKSx3ZSg2KSxQZSgicm91dGVy'@;
put 'TGluayIsRGEoNSxWS2UpKSx3ZSg0KSxQZSgiY2xySWZBY3RpdmUiLGEuaXNNYWluUm91dGUoIi92aWV3L3VzZXJuYXYvZ3JvdXBzIikpLHdlKCksUGUoIm5nSWYiLCJTQVM5Ij09PWEuc2VydmVyVHlwZSl9fWZ1bmN0aW9uIGVYZShjLGwpezEmYyYmKGdlKDAsImNsci1kcm9wZG93bi1tZW51'@;
put 'IikoMSwiYSIsMzMpLHplKDIsIlRhYmxlcyIpLGJlKCksZ2UoMywiYSIsMzQpLHplKDQsIkZpbGVzIiksYmUoKSgpKX1mdW5jdGlvbiB0WGUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDcpKDEsImNsci1kcm9wZG93biIpKDIsImJ1dHRvbiIsOCksemUoMyksSnQoNCwiY2xyLWljb24iLDkp'@;
put 'LGJlKCksYnQoNSxlWGUsNSwwLCJjbHItZHJvcGRvd24tbWVudSIsMTApLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoMykseHIoIiAiLGEuZ2V0U3ViUGFnZSgpLCIgIil9fWxldCB5cD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9yb3V0ZXI9YSx0aGlzLmV2'@;
put 'ZW50U2VydmljZT1kLHRoaXMuX3Nhc1NlcnZpY2U9aCx0aGlzLnNjcm9sbGVkVG9Cb3R0b209bmV3IElyLHRoaXMuc2lkZWJhck9wZW49ITAsdGhpcy5zaWRlYmFyV2lkdGg9bnVsbCx0aGlzLnNpZGViYXJNYXhXaWR0aD1udWxsLHRoaXMucmVzaXppbmc9ITEsdGhpcy5zYXNqc0NvbmZpZz1u'@;
put 'ZXcgZWQuU0FTanNDb25maWcsdGhpcy5zYXNqc0NvbmZpZz10aGlzLl9zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpfW5nT25Jbml0KCl7dGhpcy5ldmVudFNlcnZpY2Uub25TaWRlYmFyVG9nZ2xlLnN1'@;
put 'YnNjcmliZShhPT57dGhpcy5zaWRlYmFyT3Blbj1hP2Eub3BlbjohdGhpcy5zaWRlYmFyT3Blbix0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pfW9uVHJlZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZz'@;
put 'ZXRIZWlnaHQtMTAmJnRoaXMuc2Nyb2xsZWRUb0JvdHRvbS5lbWl0KCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuaW5jbHVkZXMoYSl9Z2V0U3ViUGFnZSgpe3JldHVybiB0aGlzLl9yb3V0ZXIudXJsLnNwbGl0KCIvIilbMl19bmF2aWdhdGVUb1ZpZXdlcigpe0du'@;
put 'LnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSIiLHRoaXMuX3JvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9cmVzaXplU3RhcnQoKXt0aGlzLnJlc2l6aW5nPSEwLGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF0uc3R5bGUuY3NzVGV4dD0idXNlci1zZWxl'@;
put 'Y3Q6IG5vbmUifXJlc2l6ZUVuZCgpe3RoaXMucmVzaXppbmc9ITEsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0PSIifW9uTW91c2VNb3ZlKGEpe2lmKHRoaXMucmVzaXppbmcpe3RoaXMuc2lkZWJhcldpZHRoPWEuY2xpZW50WDtsZXQgZD1k'@;
put 'b2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJuYXYtdHJlZSIpWzBdO3RoaXMuc2lkZWJhcldpZHRoJiZ0aGlzLmlzT3ZlcmZsb3duKGQpJiYodGhpcy5zaWRlYmFyTWF4V2lkdGg9dGhpcy5zaWRlYmFyV2lkdGg+PTM3NT90aGlzLnNpZGViYXJXaWR0aCsxMDp0aGlzLnNpZGViYXJN'@;
put 'YXhXaWR0aCl9fW9uTW91c2VVcChhKXt0aGlzLnJlc2l6aW5nJiZ0aGlzLnJlc2l6ZUVuZCgpfWlzT3ZlcmZsb3duKGEpe3JldHVybiBhLnNjcm9sbFdpZHRoPmEuY2xpZW50V2lkdGh9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdCh6cyks'@;
put 'c3QoR2wpLHN0KHlhKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zaWRlYmFyIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmVW8oRktlLDUpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGguc2lkZWJhck5hdj1mLmZpcnN0'@;
put 'KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmSHQoIm1vdXNlbW92ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZU1vdmUodil9LDAsVDMpKCJtb3VzZXVwIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbk1vdXNlVXAodil9LCExLFQzKX0sb3V0cHV0czp7c2Nyb2xsZWRU'@;
put 'b0JvdHRvbToic2Nyb2xsZWRUb0JvdHRvbSJ9LG5nQ29udGVudFNlbGVjdG9yczpIS2UsZGVjbHM6OSx2YXJzOjEzLGNvbnN0czpbWyJzaWRlYmFyTmF2IiwiIl0sWyJpZCIsInNpZGViYXJOYXYiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgc3ViLWRyb3Bkb3du'@;
put 'Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsInAtMTAiLDQsIm5nSWYiXSxbMSwibmF2LWRpdmlkZXIiXSxbMSwibmF2LXRyZWUiLDMsInNjcm9sbCJdLFsxLCJyZXNpemUtaGFuZGxlIiwzLCJtb3VzZWRvd24iXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsInN1Yi1kcm9wZG93'@;
put 'biJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJkcm9wZG93bi10b2dnbGUiLCJidG4iLCJidG4tbGluayJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWzQsImNscklmT3BlbiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xp'@;
put 'Y2siLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5l'@;
put 'YWdlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91'@;
put 'dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYi'@;
put 'XSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJvdmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsMywiY2xp'@;
put 'Y2siXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy92aXlhLWFwaS1leHBsb3JlciIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9saW5lYWdlIiwicm91dGVyTGlua0Fj'@;
put 'dGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L21ldGFkYXRhIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYiLCJyb3V0ZXJMaW5r'@;
put 'QWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3N1Ym1pdHRlZCIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvcmV2aWV3L2FwcHJv'@;
put 'dmUvdG9hcHByb3ZlIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsxLCJwLTEwIl0sWyJjbHJUYWJMaW5rIiwiIiwxLCJ1c2VyLW5hdi1idG4iLDMsInJvdXRlckxpbmsiXSxbMSwiemVyby1tYXJnaW4iXSxbInNoYXBlIiwidXNlciJdLFsic2hhcGUiLCJ1c2VycyJdLFs0LCJjbHJJ'@;
put 'ZkFjdGl2ZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2Nrcy1ncm91cCJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9ob21lL3RhYmxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsi'@;
put 'LCIvaG9tZS9maWxlcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9SG4oKTtqaSgpLGdlKDAsImNsci12ZXJ0aWNhbC1uYXYiLDEsMCksYnQoMixxS2UsNiwxLCJkaXYiLDIpKDMsUUtlLDE0LDYsImNsci10YWJz'@;
put 'IiwzKSg0LHRYZSw2LDEsImRpdiIsMiksSnQoNSwiZGl2Iiw0KSxnZSg2LCJkaXYiLDUpLEh0KCJzY3JvbGwiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLm9uVHJlZVNjcm9sbChUKSl9KSxPcig3KSxiZSgpLGdlKDgsInNwYW4iLDYpLEh0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIFN0KGYpLHh0KGgucmVzaXplU3RhcnQoKSl9KSxiZSgpKCl9MiZkJiYoQmQoIndpZHRoIixoLnNpZGViYXJXaWR0aCwicHgiKSgibWF4LXdpZHRoIixoLnNpZGViYXJNYXhXaWR0aCwicHgiKSxicigiY2xvc2VkIiwhaC5zaWRlYmFyT3BlbikoInJlc2l6aW5nIixoLnJlc2l6aW5n'@;
put 'KSx3ZSgyKSxQZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgidmlldyIpKSx3ZSgpLFBlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3L3VzZXJuYXYiKSksd2UoKSxQZSgibmdJZiIsaC5pc01haW5Sb3V0ZSgiaG9tZSIpKSx3ZSg0KSxicigicmVzaXppbmciLGgucmVzaXppbmcpKX0sZGVwZW5k'@;
put 'ZW5jaWVzOltxaSxaYSxBNyxYZCwkNCxLNCxJZyxxNCxHNCxBZyxDcmUsU3JlLHRwLFRnLERnLGswLEt5XSxzdHlsZXM6WyJjbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyNzJweDttaW4td2lkdGg6MjcycHg7aGVpZ2h0OjEwMCU7bWF4LXdpZHRoOjM3NXB4O3Bv'@;
put 'c2l0aW9uOnJlbGF0aXZlO2JveC1zaGFkb3c6MCAwIDVweCAjMDAwMDAwMWY7YmFja2dyb3VuZC1jb2xvcjojZmZmIWltcG9ydGFudH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdW4tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MzZweH1j'@;
put 'bHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtdHJlZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfWNsci12ZXJ0aWNhbC1uYXYuY2xvc2VkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDotMjcycHh9Y2xyLXZlcnRp'@;
put 'Y2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6LTNweDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkICM4MGI0NDE7Y3Vyc29yOmNvbC1yZXNpemU7b3BhY2l0eTow'@;
put 'O3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLWluLW91dH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntvcGFjaXR5Oi41fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAgLnJlc2l6'@;
put 'ZS1oYW5kbGUucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX1jbHItdmVydGljYWwtbmF2LnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5uYXYtZGl2aWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVy'@;
put 'LXRvcDoxcHggc29saWQgI2QzZDNkMzttYXJnaW4tYm90dG9tOjB9LnBhZ2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfS56ZXJvLW1hcmdpbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnVzZXItbmF2LWJ0'@;
put 'bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDJweH0jc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoyMDB9QG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KXsjc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7dG9w'@;
put 'OjB9fSJdfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG5YZShjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDEzKX1mdW5jdGlvbiByWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIp'@;
put 'O3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIix4dChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGJlKCl9fWZ1bmN0aW9uIGlYZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDgpKDEsImRpdiIsOSkoMiwiaW5wdXQiLDEwLDApLEdyKCJuZ01vZGVsQ2hh'@;
put 'bmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYubGlicmFyaWVzU2VhcmNoLGgpfHwoZi5saWJyYXJpZXNTZWFyY2g9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkubGlicmFyeU9uRmlsdGVyKCkpfSksYmUo'@;
put 'KSxidCg0LG5YZSwxLDAsImNsci1pY29uIiwxMSkoNSxyWGUsMSwwLCJjbHItaWNvbiIsMTIpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgpO3dlKDIpLFdyKCJuZ01vZGVsIixkLmxpYnJhcmllc1NlYXJjaCksd2UoMiksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLHdl'@;
put 'KCksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBvWGUoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gc1hlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWljb24iLDE0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSksWmUo'@;
put 'KTtjb25zdCBoPVhpKDMpLGY9WmUoMikuJGltcGxpY2l0LHY9WmUoKTtyZXR1cm4gaC52YWx1ZT0iIixmLnNlYXJjaFN0cmluZz0iIix4dCh2LnRyZWVPbkZpbHRlcihmLCJ0YWJsZXMiKSl9KSxiZSgpfX1mdW5jdGlvbiBhWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHIt'@;
put 'dHJlZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0IiwxOSwxKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCkseHQoaCl9KSxIdCgia2V5'@;
put 'dXAiLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkudHJlZU9uRmlsdGVyKGgsInRhYmxlcyIpKX0pLGJlKCksYnQoNCxvWGUsMSwwLCJjbHItaWNvbiIsMTEpKDUsc1hlLDEsMCwiY2xyLWljb24iLDEyKSxiZSgpKCl9aWYoMiZjKXtjb25z'@;
put 'dCBhPVhpKDMpLGQ9WmUoMikuJGltcGxpY2l0O3dlKDIpLFdyKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksd2UoMiksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLHdlKCksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBsWGUoYyxsKXsxJmMmJkp0KDAsImNsci1p'@;
put 'Y29uIiwyNil9ZnVuY3Rpb24gY1hlKGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMjcpfWZ1bmN0aW9uIHVYZShjLGwpezEmYyYmKGdlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI5KSgxLCJzcGFuIiksemUoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0'@;
put 'YWNvbnRyb2xsZXIuaW8gIiksYmUoKSgpKX1mdW5jdGlvbiBkWGUoYyxsKXsxJmMmJihyaSgwKSxidCgxLHVYZSwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDI4KSxpaSgpKX1mdW5jdGlvbiBoWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1'@;
put 'dHRvbiIsMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLm5nVmFyLGY9WmUoKS4kaW1wbGljaXQsdj1aZSgyKS4kaW1wbGljaXQsVD1aZSgpO3JldHVybiB4dChoPyIiOlQub25UYWJsZUNsaWNrKGYsdikpfSkscmkoMiwyMiksYnQoMyxsWGUsMSwwLCJjbHItaWNvbiIs'@;
put 'MjMpKDQsY1hlLDEsMCwiY2xyLWljb24iLDI0KSxpaSgpLHplKDUpLGJlKCksYnQoNixkWGUsMiwwLCJuZy1jb250YWluZXIiLDI1KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLm5nVmFyLGQ9WmUoKS4kaW1wbGljaXQsaD1aZSgyKS4kaW1wbGljaXQsZj1aZSgpO3dlKCksYnIoImRjLWxvY2tl'@;
put 'ZC1jb250cm9sIixhKSgidGFibGUtYWN0aXZlIixmLmxpYlRhYkFjdGl2ZShoLkxJQlJBUllSRUYsZCkpLHdlKCksUGUoIm5nU3dpdGNoIixkLmluY2x1ZGVzKCItRkMiKSksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwhMCksd2UoKSxQZSgibmdTd2l0Y2hDYXNlIiwhMSksd2UoKSx4cigiICIs'@;
put 'ZC5yZXBsYWNlKCItRkMiLCIiKSwiICIpLHdlKCksUGUoIm5nSWYiLGEpfX1mdW5jdGlvbiBmWGUoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItdHJlZS1ub2RlIiksYnQoMSxoWGUsNyw5LCJjbHItdG9vbHRpcCIsMjApLGJlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9WmUoMyk7d2UoKSxQ'@;
put 'ZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIHBYZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDE2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUo'@;
put 'KS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiB2LnRyZWVOb2RlQ2xpY2tlZChoLGYpLHh0KHYubGliPWYuTElCUkFSWVJFRil9KSxHcigiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYuZXhwYW5kZWQsaCl8fChm'@;
put 'LmV4cGFuZGVkPWgpLHh0KGgpfSksZ2UoMSwicCIsMTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCkuJGltcGxpY2l0LGY9WmUoKTtyZXR1cm4gZi5saWI9aC5MSUJSQVJZUkVGLHh0KGYubGlicmFyeU9uQ2xpY2soaC5MSUJSQVJZUkVGLGgpKX0pLEp0KDIsImNs'@;
put 'ci1pY29uIiwxOCksemUoMyksYmUoKSxidCg0LGFYZSw2LDMsImNsci10cmVlLW5vZGUiLDIpKDUsZlhlLDIsMSwiY2xyLXRyZWUtbm9kZSIsMyksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7YnIoImNsci1leHBhbmRlZCIsYS5leHBhbmRlZCksV3IoImNsckV4cGFuZGVk'@;
put 'IixhLmV4cGFuZGVkKSxQZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLHdlKDMpLHhyKCIgIixhLkxJQlJBUllSRUYsIiAiKSx3ZSgpLFBlKCJuZ0lmIixhLnRhYmxlcyksd2UoKSxQZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBtWGUoYyxsKXtpZigx'@;
put 'JmMmJihyaSgwKSxidCgxLHBYZSw2LDcsImNsci10cmVlLW5vZGUiLDE1KSxpaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoKSxQZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gZ1hlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiwzMCkoMSwiZGl2IiwzMSkoMiwic3BhbiIsMzIp'@;
put 'LHplKDMsIiBMb2FkaW5nLi4uICIpLGJlKCkoKSgpKX1mdW5jdGlvbiBfWGUoYyxsKXsxJmMmJihnZSgwLCJoMyIsMzYpLHplKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksYmUoKSl9ZnVuY3Rpb24gdlhlKGMsbCl7MSZjJiYoZ2UoMCwiaDMiLDM2KSx6ZSgxLCIgTm8gRWRpdGFibGUg'@;
put 'VGFibGVzIENvbmZpZ3VyZWQgIiksYmUoKSl9ZnVuY3Rpb24geVhlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwzMyksSnQoMSwiY2xyLWljb24iLDM0KSxidCgyLF9YZSwyLDAsImgzIiwzNSkoMyx2WGUsMiwwLCJoMyIsMzUpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJu'@;
put 'Z0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKT4wKSx3ZSgpLFBlKCJuZ0lmIiwobnVsbD09YS50cmVlTm9kZUxpYnJhcmllcz9udWxsOmEudHJlZU5vZGVMaWJyYXJpZXMubGVuZ3RoKTwxKX19bGV0IGJYZT0oKCk9PntjbGFz'@;
put 'cyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixUKXt0aGlzLnJvdXRlPWEsdGhpcy5yb3V0ZXI9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5oZWxwZXJTZXJ2aWNlPWYsdGhpcy5ldmVudFNlcnZpY2U9dix0aGlzLnNhc1NlcnZpY2U9VCx0aGlzLnRyZWVOb2RlTGlicmFyaWVzPW51bGws'@;
put 'dGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWI9IiIsdGhpcy50YWJsZT0iIix0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlfWNvbGxhcHNlTGlicmFyeUl0ZW1zKGEsZCl7'@;
put 'YS5mb3JFYWNoKGg9PntoLkxJQlJBUllJRCE9PWQuTElCUkFSWUlEJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xp'@;
put 'Y2soYSxkKXtkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQuZXhwYW5kZWQmJiF0aGlzLnRhYmxlJiZ0aGlzLnNlbGVjdExpYnJhcnkoYSwhMSxkKSx0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfXNlbGVjdExpYnJhcnkoYSxkLGgpe2gubG9hZGluZ1RhYmxlcz0h'@;
put 'MDtsZXQgZix2PVtdO2lmKHRoaXMubGlic0FuZFRhYmxlcyYmKGY9dGhpcy5saWJzQW5kVGFibGVzW2FdLHRoaXMudGFibGU9dm9pZCAwLCJQbGVhc2Ugc2VsZWN0IGxpYnJhcnkiIT09YSkpe2xldCBUPWYuZmlsdGVyKGZ1bmN0aW9uKFkpe3JldHVybi0xPT09di5pbmRleE9mKFkpJiYodi5w'@;
put 'dXNoKFkpLCEwKX0pO3RoaXMudGFibGVzPVQsR24uZWRpdG9yLmxpYnJhcmllcz10aGlzLmxpYnJhcmllc31Hbi5lZGl0b3IubGlicmFyeT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9ITB9c2VsZWN0VGFibGUoYSxkKXt2YXIg'@;
put 'aD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2gubGliVGFiPWgubGliKyIuIitoLnRhYmxlLGguc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLEduLmVkaXRvci50YWJsZT1hLGR8fGguY2xlYXJHbG9iYWxzRmlsdGVyKCl9KSgpfWNsZWFyR2xvYmFsc0ZpbHRlcigpe0duLmVkaXRvci5m'@;
put 'aWx0ZXIubGliZHM9IiIsR24uZWRpdG9yLmZpbHRlci53aGVyZUNsYXVzZT0iIixHbi5lZGl0b3IuZmlsdGVyLmdyb3VwTG9naWM9IiIsR24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEduLmVkaXRvci5maWx0ZXIudmFscz1bXSxHbi5lZGl0b3IuZmlsdGVyLmNvbHM9W119bGliVGFiQWN0'@;
put 'aXZlKGEsZCl7cmV0dXJuISghdGhpcy5saWJ8fCF0aGlzLnRhYmxlKSYmYT09PXRoaXMubGliJiZkPT09dGhpcy50YWJsZX10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxp'@;
put 'YnJhcnlPbkZpbHRlcih0aGlzLnRyZWVOb2RlTGlicmFyaWVzLHRoaXMubGlicmFyaWVzU2VhcmNoLCJMSUJSQVJZUkVGIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9b25UYWJsZUNsaWNrKGEsZCl7dGhpcy50YWJsZT1hLHRoaXMubGliPWQuTElC'@;
put 'UkFSWVJFRix0aGlzLnNlbGVjdFRhYmxlKGEpLHRoaXMuZWRpdFRhYmxlKCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWIrIi4iK3RoaXMudGFibGUpfWdldExpYnJhcnlUYWJsZVN0YXRlKCl7aWYobnVsbCE9PUduLmVkaXRvci50cmVl'@;
put 'Tm9kZUxpYnJhcmllcyYmKHRoaXMudHJlZU5vZGVMaWJyYXJpZXM9R24uZWRpdG9yLnRyZWVOb2RlTGlicmFyaWVzKSwiIiE9PUduLmVkaXRvci5saWJyYXJ5KXt0aGlzLmxpYj1Hbi5lZGl0b3IubGlicmFyeTtsZXQgYT1udWxsO3RoaXMudHJlZU5vZGVMaWJyYXJpZXMmJihhPXRoaXMudHJl'@;
put 'ZU5vZGVMaWJyYXJpZXMuZmluZChkPT5kLkxJQlJBUllSRUY9PT10aGlzLmxpYikpLHRoaXMuc2VsZWN0TGlicmFyeShHbi5lZGl0b3IubGlicmFyeSwhMCxhKX19Z2V0RnJvbUdsb2JhbHMoKXt0aGlzLmxpYnNBbmRUYWJsZXM9R24uZWRpdG9yLmxpYnNBbmRUYWJsZXMsdGhpcy5saWJyYXJp'@;
put 'ZXM9R24uZWRpdG9yLmxpYnJhcmllcyx0aGlzLmdldExpYnJhcnlUYWJsZVN0YXRlKCksdGhpcy5sb2FkaW5nPSExfW5nQWZ0ZXJDb250ZW50SW5pdCgpe0duLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9h'@;
put 'ZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoenMpLHN0KE1jKSxzdChoMSksc3QoY3UpLHN0KEdsKSxzdCh5YSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1r'@;
put 'cih7dHlwZTpjLHNlbGVjdG9yczpbWyJob21lLWNvbXBvbmVudCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OCx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoVHJlZUlucHV0IiwiIl0sWyJjbGFzcyIsInNlYXJjaC1u'@;
put 'b2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZC1ibG9jayJdLFsiY2xhc3MiLCJzcGlubmVyLXdyYXBwZXItZnVsbHBhZ2UiLDQsIm5nSWYiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbMSwic2Vh'@;
put 'cmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFy'@;
put 'Y2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENo'@;
put 'YW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIs'@;
put 'IlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJd'@;
put 'LFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJj'@;
put 'bHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFwZSIsIndhcm5pbmct'@;
put 'c3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgY29sb3ItZ3JheSIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJhcHAt'@;
put 'c2lkZWJhciIpKDEsImNsci10cmVlIiksYnQoMixpWGUsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLG1YZSwyLDEsIm5nLWNvbnRhaW5lciIsMyksYmUoKSgpLGdlKDQsImRpdiIsNCkoNSwiZGl2Iiw1KSxidCg2LGdYZSw0LDAsImRpdiIsNikoNyx5WGUsNCwyLCJkaXYiLDcpLGJlKCkoKSks'@;
put 'MiZkJiYod2UoMiksUGUoIm5nSWYiLChudWxsPT1oLnRyZWVOb2RlTGlicmFyaWVzP251bGw6aC50cmVlTm9kZUxpYnJhcmllcy5sZW5ndGgpPjApLHdlKCksUGUoIm5nRm9yT2YiLGgudHJlZU5vZGVMaWJyYXJpZXMpLHdlKDMpLFBlKCJuZ0lmIixoLmxvYWRpbmcpLHdlKCksUGUoIm5nSWYi'@;
put 'LCFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltUbCxjYSxvYSxyaCx1ZCxXNCxaYSxyMCxYZCxhZCx0OSxyOSxuOSx5cCxMcyxxaSxVZCxjZiwkOV0sc3R5bGVzOlsiY2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNw'@;
put 'YWNlOm5vd3JhcH0uY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7cGFkZGluZzowfS5uby10YWJsZS1zZWxlY3RlZFtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjEwMCV9ICBjbHItaWNvbi5pcy1ibHVlLCAgIGNsci1pY29uLmlz'@;
put 'LWluZm97ZmlsbDojNmE5MjM1fS5zcGlubmVyLXdyYXBwZXItZnVsbHBhZ2VbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfSJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0'@;
put 'IHdYZT1jPT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxQVT1jPT57Y29uc3QgYT1jLm1hdGNoKC9SXFsoXGQrKVxdQ1xbKFxkKylcXS8pO3JldHVybiBhP3tyb3c6cGFyc2VJbnQoYVsxXSwxMCksY29sdW1uOnBhcnNlSW50KGFbMl0s'@;
put 'MTApfTpudWxsfSxBY2U9KGMsbCk9PntpZihjLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYoYz1jLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxjLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBhPVBVKGMpO2lmKGEpe2NvbnN0e3JvdzpkLGNvbHVtbjpofT1hO2M9bGMudXRpbHMu'@;
put 'ZW5jb2RlX2NlbGwoe3I6ZC0xLGM6aC0xfSl9fWlmKGMuc3RhcnRzV2l0aCgiTUFUQ0ggIikpe2xldCBhPSIiO2NvbnN0IGQ9Yy5tYXRjaCgvQ1xbXGQrXF06KC4rKS8pO2QmJihhPWRbMV0pO2NvbnN0IGY9Yy5zcGxpdCgiICIpWzFdO2xldCB2PSIiLFQ9LTEsWT0iIjtpZihpc05hTihOdW1i'@;
put 'ZXIoZikpP3Y9ZjpUPXBhcnNlSW50KGYpLC0xIT09VCl7Y29uc3QgX2U9bFtULTFdO2Zvcihjb25zdCBrZSBpbiBfZSlpZigiX19yb3dOdW1fXyIhPT1rZSYmX2Vba2VdPT09YSl7WT1rZStUO2JyZWFrfX1lbHNlIGZvcihsZXQgX2U9MDtfZTxsLmxlbmd0aDtfZSsrKWlmKGxbX2VdW3ZdPT09'@;
put 'YSl7WT12KyhfZSsxKTticmVha31jb25zdCByZT1sYy51dGlscy5kZWNvZGVfY2VsbChZKSxmZT1QVShjKTtpZihmZSl7Y29uc3R7cm93Ol9lLGNvbHVtbjprZX09ZmU7Yz1sYy51dGlscy5lbmNvZGVfY2VsbCh7cjpyZS5yK19lLGM6cmUuYytrZX0pfX1yZXR1cm4gY30seFhlPVsiZmlsZVVw'@;
put 'bG9hZElucHV0Il07ZnVuY3Rpb24ga1hlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiwyOCksSnQoMSwiY2xyLXNwaW5uZXIiLDI5KSxiZSgpKX1mdW5jdGlvbiBFWGUoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gVFhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2Uo'@;
put 'MCwiY2xyLWljb24iLDMxKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIix4dChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksYmUoKX19ZnVuY3Rpb24gRFhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2Uo'@;
put 'MSwiY2xyLXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS54bG1hcE9uQ2xpY2soaCkpfSksSnQoMywiY2xyLWljb24iLDMzKSx6ZSg0KSxiZSgpKCksaWkoKX1pZigyJmMpe2NvbnN0'@;
put 'IGE9bC4kaW1wbGljaXQsZD1aZSgpO3dlKDIpLGJyKCJ0YWJsZS1hY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksd2UoMikseHIoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gQVhlKGMsbCl7MSZjJiYoZ2UoMCwiaDMiLDM3KSx6ZSgxLCIgUGxlYXNlIHNlbGVjdCBhIG1hcCAiKSxiZSgp'@;
put 'KX1mdW5jdGlvbiBMWGUoYyxsKXsxJmMmJihnZSgwLCJoMyIsMzcpLHplKDEsIiBObyBleGNlbCBtYXAgaXMgZm91bmQgIiksYmUoKSl9ZnVuY3Rpb24gSVhlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwzNCksSnQoMSwiY2xyLWljb24iLDM1KSxidCgyLEFYZSwyLDAsImgzIiwzNikoMyxM'@;
put 'WGUsMiwwLCJoMyIsMzYpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBSWGUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSks'@;
put 'emUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSxnZSgzLCJkaXYiKSg0LCJoNCIpLHplKDUpLGJlKCkoKSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSg1KSxwcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBPWGUoYyxsKXsxJmMmJkp0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIFBY'@;
put 'ZShjLGwpezEmYyYmSnQoMCwiY2xyLXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gRlhlKGMsbCl7MSZjJiZObCgwKX1mdW5jdGlvbiBIWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDQwKSxIdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4'@;
put 'dChaZSgpLm9uU2hvd1VwbG9hZE1vZGFsKCkpfSksZ2UoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4geHQoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVzKX0pLHplKDQs'@;
put 'IlJ1bGVzIiksYmUoKSxidCg1LE9YZSwxLDAsImNsci10YWItY29udGVudCIsNDIpLGJlKCksZ2UoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCk7cmV0dXJuIHh0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5EYXRh'@;
put 'KX0pLHplKDgsIkRhdGEiKSxiZSgpLGJ0KDksUFhlLDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksYmUoKSgpLGJ0KDEwLEZYZSwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLGdlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSx6ZSgxMyksYmUoKSxnZSgxNCwiaSIsNDUpLHplKDE1KSxiZSgpLGdl'@;
put 'KDE2LCJoNSIsNDUpLHplKDE3LCIgUnVsZXMgU291cmNlOiAiKSxnZSgxOCwiYSIsNDYpLHplKDE5KSxiZSgpKCksZ2UoMjAsImg1Iiw0NSksemUoMjEsIiBUYXJnZXQgZGF0YXNldDogIiksZ2UoMjIsImEiLDQ2KSx6ZSgyMyksYmUoKSgpKCksZ2UoMjQsImRpdiIsNDcpLEp0KDI1LCJob3Qt'@;
put 'dGFibGUiLDQ4KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKCksZD1YaSg0MSk7d2UoNSksUGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcyksd2UoNCksUGUoImNscklmQWN0aXZlIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5EYXRhKSx3ZSgp'@;
put 'LFBlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKSx3ZSgzKSx4cigiICIsYS5zZWxlY3RlZFhMTWFwLmlkLCIgIiksd2UoMikscHIoYS5zZWxlY3RlZFhMTWFwLmRlc2NyaXB0aW9uKSx3ZSgzKSxQZSgicm91dGVyTGluayIsIi92aWV3L2RhdGEvIithLnJ1bGVzU291cmNlKSx3ZSgpLHhyKCIgIixh'@;
put 'LnJ1bGVzU291cmNlLCIgIiksd2UoMyksUGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTKSx3ZSgpLHhyKCIgIixhLnNlbGVjdGVkWExNYXAudGFyZ2V0RFMsIiAiKSx3ZSgyKSxQZSgibXVsdGlDb2x1bW5Tb3J0aW5nIiwhMCkoInZpZXdwb3J0'@;
put 'Um93UmVuZGVyaW5nT2Zmc2V0Iiw1MCkoImRhdGEiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlczphLnhsRGF0YSkoImNvbEhlYWRlcnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0hlYWRlcnM6YS54bFVwbG9hZEhl'@;
put 'YWRlcikoImNvbHVtbnMiLGEuc2VsZWN0ZWRUYWI9PT1hLlRhYnNFbnVtLlJ1bGVzP2EueGxtYXBSdWxlc0NvbHVtbnM6YS54bFVwbG9hZENvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImhlaWdodCIsIjEwMCUiKSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhDaGVja2VyKSgiY2VsbHMiLGEu'@;
put 'Z2V0Q2VsbENvbmZpZ3VyYXRpb24pKCJtYXhSb3dzIixhLmhvdFRhYmxlTWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsMTUpKCJyb3dIZWlnaHRzIiwyMCkoImxpY2Vuc2VLZXkiLGEuaG90VGFibGVM'@;
put 'aWNlbnNlS2V5KX19ZnVuY3Rpb24gTlhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEp0KDIsImNsci1pY29uIiw1'@;
put 'MyksZ2UoMywic3BhbiIpLHplKDQsIlVwbG9hZCIpLGJlKCkoKSgpfX1mdW5jdGlvbiBWWGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLnN1Ym1pdEV4Y2Vs'@;
put 'KCkpfSksSnQoMiwiY2xyLWljb24iLDUzKSxnZSgzLCJzcGFuIiksemUoNCwiU3VibWl0IiksYmUoKSgpKCl9fWZ1bmN0aW9uIGpYZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3Qo'@;
put 'YSkseHQoWmUoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxKdCgyLCJjbHItaWNvbiIsNTUpLGdlKDMsInNwYW4iKSx6ZSg0LCJEaXNjYXJkIiksYmUoKSgpKCl9fWZ1bmN0aW9uIEJYZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNDkpLGJ0KDEsTlhlLDUsMCwiZGl2Iiw1MCkoMixW'@;
put 'WGUsNSwwLCJkaXYiLDUwKSgzLGpYZSw1LDAsImRpdiIsNTApLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLHdlKCksUGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJt'@;
put 'aXQpLHdlKCksUGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpfX12YXIgaGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0Y2hpbmdSdWxlcyIsY1tjLlJl'@;
put 'YWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRpbmdFeHRyYWN0ZWREYXRhIixj'@;
put 'W2MuU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsY30oaGh8fHt9KSxxOT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRhdGE9MV09IkRhdGEiLGN9KHE5fHx7fSk7bGV0IExjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixULFkpe3Ro'@;
put 'aXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU3RvcmVTZXJ2aWNlPVQsdGhpcy5zYXNTZXJ2aWNlPVksdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5m'@;
put 'aWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgbjEsdGhpcy5TdGF0dXNFbnVtPWhoLHRoaXMuVGFic0VudW09cTksdGhpcy5zZWxlY3RlZFRhYj1xOS5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPUduLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFwcz1bXSx0aGlzLnNlbGVjdGVk'@;
put 'WExNYXA9dm9pZCAwLHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9aGguTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJzPVsiWExNQVBfU0hFRVQiLCJY'@;
put 'TE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQX0ZJTklTSCJ9XSx0aGlzLnhs'@;
put 'bWFwUnVsZXM9W10sdGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0YToiQ09MX05PIn0se2RhdGE6'@;
put 'IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IGRjZSx0aGlzLmxpY2VuY2VTdGF0ZT10'@;
put 'aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfXhsbWFwT25DbGljayhhKXthLmlkIT09dGhpcy5zZWxl'@;
put 'Y3RlZFhMTWFwPy5pZCYmKHRoaXMuc2VsZWN0ZWRYTE1hcD1hLHRoaXMueGxEYXRhPVtdLHRoaXMuZmlsZW5hbWU9IiIsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSx0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYodGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5u'@;
put 'YXRpdmVFbGVtZW50LnZhbHVlPSIiKSx0aGlzLnNlbGVjdGVkVGFiPXE5LlJ1bGVzLHRoaXMudmlld1hMTWFwUnVsZXMoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZS9maWxlcy8iK2EuaWQpKX14bG1hcExpc3RPbkZpbHRlcigpe3RoaXMueGxtYXBzPXRoaXMuc2VhcmNoU3Ry'@;
put 'aW5nLmxlbmd0aD4wP0duLnhsbWFwcy5maWx0ZXIoZD0+ZC5pZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpKTpHbi54bG1hcHN9aXNBY3RpdmVYTE1hcChhKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFhMTWFwPy5pZD09PWF9bWF4V2lkdGhD'@;
put 'aGVja2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldENlbGxDb25maWd1cmF0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX1yb3dIZWFkZXJzKCl7cmV0dXJuIiAifW9uU2hvd1VwbG9hZE1vZGFsKCl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITB9ZmlsZU92ZXJCYXNlKGEpe3RoaXMuaGFz'@;
put 'QmFzZURyb3Bab25lT3Zlcj1hfWdldEZpbGVEZXNjKGEsZD0hMSl7dmFyIGg9dGhpcztjb25zdCBmPWQ/YVswXTphLnRhcmdldC5maWxlc1swXTtpZighZilyZXR1cm47Y29uc3Qgdj1mLm5hbWU7aWYodGhpcy5maWxlbmFtZT12LCJ4bHMiPT09di5zbGljZSh2Lmxhc3RJbmRleE9mKCIuIikr'@;
put 'MSx2Lmxhc3RJbmRleE9mKCIuIikrNCkudG9Mb3dlckNhc2UoKSl7dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy5pc0xvYWRpbmc9ITAsdGhpcy5pc0xvYWRpbmdEZXNjPSJFeHRyYWN0aW5nIERhdGEiLHRoaXMuc3RhdHVzPWhoLkV4dHJhY3RpbmdEYXRhO2NvbnN0IFk9bmV3IEZpbGVS'@;
put 'ZWFkZXI7WS5vbmxvYWQ9ZnVuY3Rpb24oKXt2YXIgcmU9VyhmdW5jdGlvbiooZmUpe2NvbnN0IF9lPShjPT57Y29uc3QgbD1uZXcgVWludDhBcnJheShjKTtsZXQgYT0iIjtjb25zdCBkPWwuYnl0ZUxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKWErPVN0cmluZy5mcm9tQ2hhckNvZGUobFto'@;
put 'XSk7cmV0dXJuIGF9KShmZS50YXJnZXQucmVzdWx0KTtsZXQga2U7Y29uc3QgV2U9e3R5cGU6ImJpbmFyeSIsY2VsbERhdGVzOiExLGNlbGxGb3JtdWxhOiEwLGNlbGxTdHlsZXM6ITAsY2VsbE5GOiExLGNlbGxUZXh0OiExfTt0cnl7a2U9bGMucmVhZChfZSx7Li4uV2V9KX1jYXRjaChKZSl7'@;
put 'aC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxKZSx2b2lkIDAsIkVycm9yIHJlYWRpbmcgZmlsZSIpfWlmKCFrZSlyZXR1cm4gaC5pc0xvYWRpbmc9ITEsaC5pc0xvYWRpbmdEZXNjPSIiLGguc3RhdHVzPWhoLlJlYWR5VG9VcGxvYWQsdm9pZCBoLnVwbG9hZGVyLnF1ZXVlLnBv'@;
put 'cCgpO2guZXh0cmFjdERhdGEoa2UpfSk7cmV0dXJuIGZ1bmN0aW9uKGZlKXtyZXR1cm4gcmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxZLnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPWhoLlJl'@;
put 'YWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNl'@;
put 'bCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPWhoLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1xOS5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMu'@;
put 'dXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19s'@;
put 'aW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRoaXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9aGguU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9h'@;
put 'ZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IFQgb2YgdGhpcy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6VCxmaWxlTmFtZTpULm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxu'@;
put 'Iit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5tYXAoVD0+T2JqZWN0LnZhbHVlcyhUKS5qb2luKCIsIikpLmpvaW4oIlxuIiksZj0oKGMsbCk9Pm5ldyBGaWxlKFtjXSx0aGlzLmZpbGVuYW1lKyIuY3N2Iix7bGFzdE1vZGlm'@;
put 'aWVkOihuZXcgRGF0ZSkuZ2V0VGltZSgpfSkpKG5ldyBCbG9iKFtkXSx7dHlwZToiYXBwbGljYXRpb24vY3N2In0pKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsYSx7dGFibGU6'@;
put 'dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihUPT57VC5zYXNqc0Fib3J0P3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCIiLFQuc2FzanNBYm9ydFswXS5NU0cse1NZU1dBUk5JTkdURVhUOlQuU1lTV0FSTklOR1RFWFQsU1lTRVJST1JURVhUOlQuU1lTRVJST1JU'@;
put 'RVhULE1BQzpULnNhc2pzQWJvcnRbMF0uTUFDfSk6VC5zYXNwYXJhbXMmJnRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1Quc2FzcGFyYW1zWzBdLkRTSUQpfSkuY2F0Y2goVD0+e3RoaXMuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZmlsZSB1cGxvYWQiLFQp'@;
put 'fSkuZmluYWxseSgoKT0+e3RoaXMuc3RhdHVzPWhoLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIifSl9ZXh0cmFjdERhdGEoYSl7Y29uc3QgZD1bXTt0aGlzLnhsbWFwUnVsZXMuZm9yRWFjaChoPT57bGV0IGY9aC5YTE1BUF9TSEVFVDtpZihm'@;
put 'LnN0YXJ0c1dpdGgoIi8iKSl7Y29uc3QgV2U9Zi5zcGxpdCgiLyIpWzFdLEplPXBhcnNlSW50KFdlKS0xO2Y9YS5TaGVldE5hbWVzW0plXX1jb25zdCB2PWEuU2hlZXRzW2ZdLFQ9bGMudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KSxZPUFj'@;
put 'ZShoLlhMTUFQX1NUQVJULFQpLHJlPSgoYyxsLGEpPT57aWYoIiI9PT1sKXJldHVybiBjO2lmKGwuc3RhcnRzV2l0aCgiQUJTT0xVVEUgIikmJihsPWwucmVwbGFjZSgiQUJTT0xVVEUgIiwiIikpLGwuc3RhcnRzV2l0aCgiUkVMQVRJVkUgIikpe2NvbnN0IGQ9UFUobCk7aWYoZCl7Y29uc3R7'@;
put 'cm93OmgsY29sdW1uOmZ9PWQse3I6dixjOlR9PWxjLnV0aWxzLmRlY29kZV9jZWxsKGMpO2w9bGMudXRpbHMuZW5jb2RlX2NlbGwoe3I6ditoLGM6VCtmfSl9fWlmKGwuc3RhcnRzV2l0aCgiTUFUQ0ggIikmJihsPUFjZShsLGEpKSwiTEFTVERPV04iPT09bCl7Y29uc3R7cjpkLGM6aH09bGMu'@;
put 'dXRpbHMuZGVjb2RlX2NlbGwoYyksZj1sYy51dGlscy5lbmNvZGVfY29sKGgpO2xldCB2PWQ7Zm9yKGxldCBUPWQrMTtUPGEubGVuZ3RoJiZhW1RdW2ZdO1QrKyl2PVQ7bD1mKyh2KzEpfWlmKCJCTEFOS1JPVyI9PT1sKXtjb25zdHtyOmR9PWxjLnV0aWxzLmRlY29kZV9jZWxsKGMpO2xldCBo'@;
put 'PWQ7Zm9yKGxldCBZPWQrMTtZPGEubGVuZ3RoJiYhd1hlKGFbWV0pO1krKyloPVk7bD1PYmplY3Qua2V5cyhhW2hdKS5maWx0ZXIoWT0+Il9fcm93TnVtX18iIT09WSkucmVkdWNlKChZLHJlKT0+cmU+WT9yZTpZLCIiKSsoaCsxKX1yZXR1cm4gbH0pKFksaC5YTE1BUF9GSU5JU0gsVCksZmU9'@;
put 'YCR7WX06JHtyZX1gLF9lPWxjLnV0aWxzLmRlY29kZV9yYW5nZShmZSksa2U9bGMudXRpbHMuc2hlZXRfdG9fanNvbih2LHtyYXc6ITAscmFuZ2U6ZmUsaGVhZGVyOiJBIixibGFua3Jvd3M6ITB9KTtmb3IobGV0IFdlPTA7V2U8a2UubGVuZ3RoO1dlKyspe2NvbnN0IEplPWtlW1dlXTtmb3Io'@;
put 'bGV0IHR0PV9lLnMuYyx5dD0wO3R0PD1fZS5lLmM7dHQrKyx5dCsrKXtjb25zdCB3dD1sYy51dGlscy5lbmNvZGVfY29sKHR0KTt3dCBpbiBKZSYmZC5wdXNoKHtMT0FEX1JFRjoiMCIsWExNQVBfSUQ6aC5YTE1BUF9JRCxYTE1BUF9SQU5HRV9JRDpoLlhMTUFQX1JBTkdFX0lELFJPV19OTzpX'@;
put 'ZSsxLENPTF9OTzp5dCsxLFZBTFVFX1RYVDpKZVt3dF19KX19fSksdGhpcy5zdGF0dXM9aGguUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy54bERhdGE9ZCx0aGlzLnNlbGVjdGVkVGFiPXE5LkRhdGF9dmlld1hMTWFwUnVsZXMoKXt2'@;
put 'YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2Euc2VsZWN0ZWRYTE1hcCYmKGEuaXNMb2FkaW5nPSEwLGEuaXNMb2FkaW5nRGVzYz0iTG9hZGluZyBleGNlbCBydWxlcyIsYS5zdGF0dXM9aGguRmV0Y2hpbmdSdWxlcyx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRYTE1hcFJ1bGVz'@;
put 'KGEuc2VsZWN0ZWRYTE1hcC5pZCkudGhlbihkPT57YS54bG1hcFJ1bGVzPWQueGxtYXBydWxlcyxhLnN0YXR1cz1oaC5SZWFkeVRvVXBsb2FkfSkuY2F0Y2goZD0+e2EubG9nZ2VyU2VydmljZS5lcnJvcihkKX0pLGEuaXNMb2FkaW5nPSExLGEuaXNMb2FkaW5nRGVzYz0iIil9KSgpfWxvYWQo'@;
put 'KXt0aGlzLnhsbWFwcz1Hbi54bG1hcHMsdGhpcy54bG1hcHNMb2FkaW5nPSExO2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuaWQ7aWYoYSl7Y29uc3QgZD10aGlzLnhsbWFwcy5maW5kKGg9PmguaWQ9PT1hKTtkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWQsdGhpcy52aWV3WExN'@;
put 'YXBSdWxlcygpKX19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoYT0+e3RoaXMuaG90VGFibGVMaWNlbnNlS2V5PWF9KX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7R24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhp'@;
put 'cy5sb2FkKCk6dGhpcy5ldmVudFNlcnZpY2Uub25TdGFydHVwRGF0YUxvYWRlZC5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxvYWQoKX0pfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoR2wpLHN0KGgxKSxzdChkMSksc3QoTWMpLHN0KHpzKSxz'@;
put 'dChkaCksc3QoeWEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXhsbWFwIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmVW8oeFhlLDUpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGguZmlsZVVwbG9hZElucHV0Q29tcExp'@;
put 'c3Q9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmYnIoImNvbnRlbnQtY29udGFpbmVyIixoLmNvbnRlbnRDb250YWluZXJDbGFzcyl9LGRlY2xzOjQyLHZhcnM6MTYsY29uc3RzOltbInNlYXJjaFhMTWFwVHJlZUlucHV0IiwiIl0sWyJmaWxlVXBsb2Fk'@;
put 'SW5wdXQiLCIiXSxbImFjdGlvbkJ1dHRvbnMiLCIiXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IElk'@;
put 'IiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEs'@;
put 'ImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwiY2xhc3MiLCJjYXJkIGgtMTAwIGQtZmxleCBjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFn'@;
put 'Z2VkT3ZlciIsNCwibmdJZiJdLFsiYXBwRmlsZURyb3AiLCIiLDEsInJlbGF0aXZlIiwzLCJmaWxlT3ZlciIsImZpbGVEcm9wIiwiY2xyTW9kYWxPcGVuQ2hhbmdlIiwidXBsb2FkZXIiLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwiY2xyTW9kYWxDbG9zYWJsZSIs'@;
put 'ImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImRyb3AtYXJlYSJdLFsxLCJjbHItY29sLW1kLTEyIl0sWzEsImNsci1yb3ciLCJjYXJkLWJsb2NrIiwibXQtMTUiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJjbHIt'@;
put 'Y29sLW1kLTMiLCJmaWx0ZXJCdG4iXSxbMSwiZmlsdGVyQnRuIiwidy0xMDAiXSxbImZvciIsImZpbGUtdXBsb2FkIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZSIsInByb2ZpbGUtYnV0dG9ucyIsInctMTAwIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIs'@;
put 'ImZpbGUiLCJhcHBGaWxlU2VsZWN0IiwiIiwzLCJjaGFuZ2UiLCJ1cGxvYWRlciJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iXSxbMSwibS0wIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnki'@;
put 'LDMsImNsaWNrIl0sWzEsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsImZpbGUiXSxbMSwi'@;
put 'bm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsx'@;
put 'LCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIl0sWyJjbHJUYWJMaW5rIiwiIiwzLCJjbGljayJdLFs0LCJjbHJJZkFjdGl2ZSJdLFs0'@;
put 'LCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci1yb3ciLCJtLTAiLCJtYi0xMC1pIiwidmlld2VyVGl0bGUiXSxbMSwiZC1mbGV4IiwiY2xyLWNvbC0xMiIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwibXQtNS1pIl0sWyJjZHMtdGV4dCIsImxhYmVsTGluayIsMSwibWwtMTAiLDMs'@;
put 'InJvdXRlckxpbmsiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90LXRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDMsIm11bHRpQ29sdW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1'@;
put 'bW5zIiwiZmlsdGVycyIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0'@;
put 'aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxn'@;
put 'LTQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxv'@;
put 'Y2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1IbigpO2dlKDAsImFwcC1zaWRlYmFyIiksYnQoMSxrWGUsMiwwLCJkaXYiLDMpLGdlKDIsImNsci10cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsNCko'@;
put 'NCwiZGl2Iiw1KSg1LCJpbnB1dCIsNiwwKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguc2VhcmNoU3RyaW5nLFQpfHwoaC5zZWFyY2hTdHJpbmc9VCkseHQoVCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgueGxtYXBM'@;
put 'aXN0T25GaWx0ZXIoKSl9KSxiZSgpLGJ0KDcsRVhlLDEsMCwiY2xyLWljb24iLDcpKDgsVFhlLDEsMCwiY2xyLWljb24iLDgpLGJlKCkoKSxidCg5LERYZSw1LDMsIm5nLWNvbnRhaW5lciIsOSksYmUoKSgpLGdlKDEwLCJkaXYiLDEwKSxidCgxMSxJWGUsNCwyLCJkaXYiLDExKSgxMixSWGUs'@;
put 'NiwxLCJkaXYiLDEyKSgxMyxIWGUsMjYsMjQsImRpdiIsMTMpLGdlKDE0LCJjbHItbW9kYWwiLDE0KSxIdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLmZpbGVPdmVyQmFzZShUKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLmdl'@;
put 'dEZpbGVEZXNjKFQsITApKX0pLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLnNob3dVcGxvYWRNb2RhbCxUKXx8KGguc2hvd1VwbG9hZE1vZGFsPVQpLHh0KFQpfSksZ2UoMTUsImgzIiwxNSksemUoMTYsIlVwbG9hZCBGaWxlIiksYmUoKSxn'@;
put 'ZSgxNywiZGl2IiwxNikoMTgsImRpdiIsMTcpKDE5LCJzcGFuIiksemUoMjAsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksYmUoKSgpLGdlKDIxLCJkaXYiLDE4KSgyMiwiZGl2IiwxOSkoMjMsImRpdiIsMjApKDI0LCJzcGFuIiwyMSkoMjUsImxhYmVsIiwyMiksemUoMjYsIiBC'@;
put 'cm93c2UgIiksYmUoKSgpLGdlKDI3LCJpbnB1dCIsMjMsMSksSHQoImNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGguZ2V0RmlsZURlc2MoVCkpfSksYmUoKSgpKCkoKSgpKCksZ2UoMjksImNsci1tb2RhbCIsMjQpLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KFQpe3JldHVybiBTdChmKSxxcihoLnN1Ym1pdExpbWl0Tm90aWNlLFQpfHwoaC5zdWJtaXRMaW1pdE5vdGljZT1UKSx4dChUKX0pLGdlKDMwLCJoMyIsMTUpLHplKDMxLCJOb3RpY2UiKSxiZSgpLGdlKDMyLCJkaXYiLDE2KSgzMywicCIsMjUpLHplKDM0KSxiZSgpKCksZ2UoMzUsImRpdiIs'@;
put 'MjYpKDM2LCJidXR0b24iLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksemUoMzcsIiBDYW5jZWwgIiksYmUoKSxnZSgzOCwiYnV0dG9uIiwyNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSxoLnN1'@;
put 'Ym1pdCgpLHh0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksemUoMzksIiBTdWJtaXQgIiksYmUoKSgpKCkoKSxidCg0MCxCWGUsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLG91KX1pZigyJmQpe2NvbnN0IGY9WGkoNik7d2UoKSxQZSgibmdJZiIsaC54bG1hcHNMb2FkaW5nKSx3ZSg0KSxX'@;
put 'cigibmdNb2RlbCIsaC5zZWFyY2hTdHJpbmcpLHdlKDIpLFBlKCJuZ0lmIixmLnZhbHVlLmxlbmd0aDwxKSx3ZSgpLFBlKCJuZ0lmIixmLnZhbHVlLmxlbmd0aD4wKSx3ZSgpLFBlKCJuZ0Zvck9mIixoLnhsbWFwcyksd2UoMiksUGUoIm5nSWYiLCFoLnNlbGVjdGVkWExNYXApLHdlKCksUGUo'@;
put 'Im5nSWYiLGguaXNMb2FkaW5nKSx3ZSgpLFBlKCJuZ0lmIiwhaC5pc0xvYWRpbmcmJmguc2VsZWN0ZWRYTE1hcCksd2UoKSxQZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUi'@;
put 'LCEwKSxXcigiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksd2UoMTMpLFBlKCJ1cGxvYWRlciIsaC51cGxvYWRlciksd2UoMiksV3IoImNsck1vZGFsT3BlbiIsaC5zdWJtaXRMaW1pdE5vdGljZSksd2UoNSkseHIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsaC5s'@;
put 'aWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5kZW5jaWVzOltMdyxrMCxUbCxjYSxv'@;
put 'YSxyaCx1ZCxXNCxaYSxCdSxZdSxBNyxYcyxhZCwkNCxLNCxJZyxxNCxHNCxBZyxuaCx5cCxMcyxxaSxLMSxLYix3Y2UsTWNlXSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNs'@;
put 'ci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAudGl0bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVu'@;
put 'ZH0uc3dbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50'@;
put 'ZXJ9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMw'@;
put 'NmIwMDZlfS5kcm9wLWFyZWFbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0iXX0pfXJldHVybiBjfSkoKTtjb25zdCBZWGU9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5n'@;
put 'T25EZXN0cm95KCl7fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVy'@;
put 'Il0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkp0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltJNF19KX1yZXR1cm4gY30pKCksY2hpbGRyZW46W3twYXRoOiIiLGNvbXBvbmVudDpMY2V9LHtwYXRoOiI6aWQiLGNvbXBvbmVudDpMY2V9XX1d'@;
put 'O2xldCB6WGU9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W1djLmZvckNoaWxkKFlY'@;
put 'ZSksV2NdfSl9cmV0dXJuIGN9KSgpO2dVKCk7bGV0IFVYZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1f'@;
put 'aSh7aW1wb3J0czpbeDkselhlLENjLHMwLEc5LG1vLGlBLHkyXX0pfXJldHVybiBjfSkoKTtjb25zdCBaWGU9W3twYXRoOiIiLGNvbXBvbmVudDpQS2UsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidGFibGVzIn0se3BhdGg6InRhYmxlcyIsY29tcG9u'@;
put 'ZW50OmJYZX0se3BhdGg6ImZpbGVzIixsb2FkQ2hpbGRyZW46KCk9PlVYZX1dfV07bGV0IFdYZT0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0'@;
put 'aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbV2MuZm9yQ2hpbGQoWlhlKSxXY119KX1yZXR1cm4gY30pKCksR1hlPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9'@;
put 'c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOltXWGUsQ2MsczAsRzksbW8saUEseTJdfSl9cmV0dXJuIGN9KSgpLEZVPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5yb3V0ZXI9ZH1jYW5BY3Rp'@;
put 'dmF0ZShhLGQpe3JldHVybiEhKHZvaWQgMCE9PWQ/LnJvb3QucXVlcnlQYXJhbXMuZm9yY2V8fGQ/LnVybC5pbmNsdWRlcygibGljZW5zaW5nL3VwZGF0ZSIpJiZ0aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkfHxudWxsIT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2'@;
put 'YXRlZC52YWx1ZSYmITE9PT10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKXx8KHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lIiksITEpfWNhbkRlYWN0aXZhdGUoYSxkLGgsZil7cmV0dXJuIShoPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy9yZWdpc3Rl'@;
put 'ciIpfHx0aGlzLmxpY2VuY2VTZXJ2aWNlLmFwcExvY2tlZC52YWx1ZSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShmcihoMSksZnIoenMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm'@;
put 'YWN9KX1yZXR1cm4gY30pKCk7bGV0IE1tPXthc3luYzohMSxiYXNlVXJsOm51bGwsYnJlYWtzOiExLGV4dGVuc2lvbnM6bnVsbCxnZm06ITAsaGVhZGVySWRzOiEwLGhlYWRlclByZWZpeDoiIixoaWdobGlnaHQ6bnVsbCxob29rczpudWxsLGxhbmdQcmVmaXg6Imxhbmd1YWdlLSIsbWFuZ2xl'@;
put 'OiEwLHBlZGFudGljOiExLHJlbmRlcmVyOm51bGwsc2FuaXRpemU6ITEsc2FuaXRpemVyOm51bGwsc2lsZW50OiExLHNtYXJ0eXBhbnRzOiExLHRva2VuaXplcjpudWxsLHdhbGtUb2tlbnM6bnVsbCx4aHRtbDohMX07ZnVuY3Rpb24gSWNlKGMpe01tPWN9Y29uc3QgUmNlPS9bJjw+IiddLywk'@;
put 'WGU9bmV3IFJlZ0V4cChSY2Uuc291cmNlLCJnIiksT2NlPS9bPD4iJ118Jig/ISgjXGR7MSw3fXwjW1h4XVthLWZBLUYwLTldezEsNn18XHcrKTspLyxxWGU9bmV3IFJlZ0V4cChPY2Uuc291cmNlLCJnIiksS1hlPXsiJiI6IiZhbXA7IiwiPCI6IiZsdDsiLCI+IjoiJmd0OyIsJyInOiImcXVv'@;
put 'dDsiLCInIjoiJiMzOTsifSxQY2U9Yz0+S1hlW2NdO2Z1bmN0aW9uIGQwKGMsbCl7aWYobCl7aWYoUmNlLnRlc3QoYykpcmV0dXJuIGMucmVwbGFjZSgkWGUsUGNlKX1lbHNlIGlmKE9jZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UocVhlLFBjZSk7cmV0dXJuIGN9Y29uc3QgWFhlPS8mKCMo'@;
put 'PzpcZCspfCg/OiN4WzAtOUEtRmEtZl0rKXwoPzpcdyspKTs/L2dpO2Z1bmN0aW9uIEZjZShjKXtyZXR1cm4gYy5yZXBsYWNlKFhYZSwobCxhKT0+ImNvbG9uIj09PShhPWEudG9Mb3dlckNhc2UoKSk/IjoiOiIjIj09PWEuY2hhckF0KDApPyJ4Ij09PWEuY2hhckF0KDEpP1N0cmluZy5mcm9t'@;
put 'Q2hhckNvZGUocGFyc2VJbnQoYS5zdWJzdHJpbmcoMiksMTYpKTpTdHJpbmcuZnJvbUNoYXJDb2RlKCthLnN1YnN0cmluZygxKSk6IiIpfWNvbnN0IEpYZT0vKF58W15cW10pXF4vZztmdW5jdGlvbiBBYShjLGwpe2M9InN0cmluZyI9PXR5cGVvZiBjP2M6Yy5zb3VyY2UsbD1sfHwiIjtjb25z'@;
put 'dCBhPXtyZXBsYWNlOihkLGgpPT4oaD0oaD1oLnNvdXJjZXx8aCkucmVwbGFjZShKWGUsIiQxIiksYz1jLnJlcGxhY2UoZCxoKSxhKSxnZXRSZWdleDooKT0+bmV3IFJlZ0V4cChjLGwpfTtyZXR1cm4gYX1jb25zdCBRWGU9L1teXHc6XS9nLGVKZT0vXiR8XlthLXpdW2EtejAtOSsuLV0qOnxe'@;
put 'Wz8jXS9pO2Z1bmN0aW9uIEhjZShjLGwsYSl7aWYoYyl7bGV0IGQ7dHJ5e2Q9ZGVjb2RlVVJJQ29tcG9uZW50KEZjZShhKSkucmVwbGFjZShRWGUsIiIpLnRvTG93ZXJDYXNlKCl9Y2F0Y2h7cmV0dXJuIG51bGx9aWYoMD09PWQuaW5kZXhPZigiamF2YXNjcmlwdDoiKXx8MD09PWQuaW5kZXhP'@;
put 'ZigidmJzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoImRhdGE6IikpcmV0dXJuIG51bGx9bCYmIWVKZS50ZXN0KGEpJiYoYT1mdW5jdGlvbiBpSmUoYyxsKXtvQVsiICIrY118fChvQVsiICIrY109dEplLnRlc3QoYyk/YysiLyI6YUEoYywiLyIsITApKTtjb25zdCBhPS0xPT09KGM9b0FbIiAi'@;
put 'K2NdKS5pbmRleE9mKCI6Iik7cmV0dXJuIi8vIj09PWwuc3Vic3RyaW5nKDAsMik/YT9sOmMucmVwbGFjZShuSmUsIiQxIikrbDoiLyI9PT1sLmNoYXJBdCgwKT9hP2w6Yy5yZXBsYWNlKHJKZSwiJDEiKStsOmMrbH0obCxhKSk7dHJ5e2E9ZW5jb2RlVVJJKGEpLnJlcGxhY2UoLyUyNS9nLCIl'@;
put 'Iil9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIGF9Y29uc3Qgb0E9e30sdEplPS9eW146XSs6XC8qW14vXSokLyxuSmU9L14oW146XSs6KVtcc1xTXSokLyxySmU9L14oW146XSs6XC8qW14vXSopW1xzXFNdKiQvLHNBPXtleGVjOmZ1bmN0aW9uKCl7fX07ZnVuY3Rpb24gTmNlKGMsbCl7Y29u'@;
put 'c3QgZD1jLnJlcGxhY2UoL1x8L2csKGYsdixUKT0+e2xldCBZPSExLHJlPXY7Zm9yKDstLXJlPj0wJiYiXFwiPT09VFtyZV07KVk9IVk7cmV0dXJuIFk/InwiOiIgfCJ9KS5zcGxpdCgvIFx8Lyk7bGV0IGg9MDtpZihkWzBdLnRyaW0oKXx8ZC5zaGlmdCgpLGQubGVuZ3RoPjAmJiFkW2QubGVu'@;
put 'Z3RoLTFdLnRyaW0oKSYmZC5wb3AoKSxkLmxlbmd0aD5sKWQuc3BsaWNlKGwpO2Vsc2UgZm9yKDtkLmxlbmd0aDxsOylkLnB1c2goIiIpO2Zvcig7aDxkLmxlbmd0aDtoKyspZFtoXT1kW2hdLnRyaW0oKS5yZXBsYWNlKC9cXFx8L2csInwiKTtyZXR1cm4gZH1mdW5jdGlvbiBhQShjLGwsYSl7'@;
put 'Y29uc3QgZD1jLmxlbmd0aDtpZigwPT09ZClyZXR1cm4iIjtsZXQgaD0wO2Zvcig7aDxkOyl7Y29uc3QgZj1jLmNoYXJBdChkLWgtMSk7aWYoZiE9PWx8fGEpe2lmKGY9PT1sfHwhYSlicmVhaztoKyt9ZWxzZSBoKyt9cmV0dXJuIGMuc2xpY2UoMCxkLWgpfWZ1bmN0aW9uIFZjZShjLGwsYSxk'@;
put 'KXtjb25zdCBoPWwuaHJlZixmPWwudGl0bGU/ZDAobC50aXRsZSk6bnVsbCx2PWNbMV0ucmVwbGFjZSgvXFwoW1xbXF1dKS9nLCIkMSIpO2lmKCIhIiE9PWNbMF0uY2hhckF0KDApKXtkLnN0YXRlLmluTGluaz0hMDtjb25zdCBUPXt0eXBlOiJsaW5rIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0'@;
put 'ZXh0OnYsdG9rZW5zOmQuaW5saW5lVG9rZW5zKHYpfTtyZXR1cm4gZC5zdGF0ZS5pbkxpbms9ITEsVH1yZXR1cm57dHlwZToiaW1hZ2UiLHJhdzphLGhyZWY6aCx0aXRsZTpmLHRleHQ6ZDAodil9fWNsYXNzIGxBe2NvbnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxNbX1zcGFjZShsKXtj'@;
put 'b25zdCBhPXRoaXMucnVsZXMuYmxvY2submV3bGluZS5leGVjKGwpO2lmKGEmJmFbMF0ubGVuZ3RoPjApcmV0dXJue3R5cGU6InNwYWNlIixyYXc6YVswXX19Y29kZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suY29kZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9e'@;
put 'IHsxLDR9L2dtLCIiKTtyZXR1cm57dHlwZToiY29kZSIscmF3OmFbMF0sY29kZUJsb2NrU3R5bGU6ImluZGVudGVkIix0ZXh0OnRoaXMub3B0aW9ucy5wZWRhbnRpYz9kOmFBKGQsIlxuIil9fX1mZW5jZXMobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmZlbmNlcy5leGVjKGwpO2lmKGEp'@;
put 'e2NvbnN0IGQ9YVswXSxoPWZ1bmN0aW9uIGFKZShjLGwpe2NvbnN0IGE9Yy5tYXRjaCgvXihccyspKD86YGBgKS8pO2lmKG51bGw9PT1hKXJldHVybiBsO2NvbnN0IGQ9YVsxXTtyZXR1cm4gbC5zcGxpdCgiXG4iKS5tYXAoaD0+e2NvbnN0IGY9aC5tYXRjaCgvXlxzKy8pO2lmKG51bGw9PT1m'@;
put 'KXJldHVybiBoO2NvbnN0W3ZdPWY7cmV0dXJuIHYubGVuZ3RoPj1kLmxlbmd0aD9oLnNsaWNlKGQubGVuZ3RoKTpofSkuam9pbigiXG4iKX0oZCxhWzNdfHwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzpkLGxhbmc6YVsyXT9hWzJdLnRyaW0oKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5l'@;
put 'Ll9lc2NhcGVzLCIkMSIpOmFbMl0sdGV4dDpofX19aGVhZGluZyhsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaGVhZGluZy5leGVjKGwpO2lmKGEpe2xldCBkPWFbMl0udHJpbSgpO2lmKC8jJC8udGVzdChkKSl7Y29uc3QgaD1hQShkLCIjIik7KHRoaXMub3B0aW9ucy5wZWRhbnRpY3x8'@;
put 'IWh8fC8gJC8udGVzdChoKSkmJihkPWgudHJpbSgpKX1yZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6YVsxXS5sZW5ndGgsdGV4dDpkLHRva2Vuczp0aGlzLmxleGVyLmlubGluZShkKX19fWhyKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5oci5leGVjKGwpO2lmKGEp'@;
put 'cmV0dXJue3R5cGU6ImhyIixyYXc6YVswXX19YmxvY2txdW90ZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suYmxvY2txdW90ZS5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVswXS5yZXBsYWNlKC9eICo+WyBcdF0/L2dtLCIiKSxoPXRoaXMubGV4ZXIuc3RhdGUudG9wO3RoaXMubGV4ZXIu'@;
put 'c3RhdGUudG9wPSEwO2NvbnN0IGY9dGhpcy5sZXhlci5ibG9ja1Rva2VucyhkKTtyZXR1cm4gdGhpcy5sZXhlci5zdGF0ZS50b3A9aCx7dHlwZToiYmxvY2txdW90ZSIscmF3OmFbMF0sdG9rZW5zOmYsdGV4dDpkfX19bGlzdChsKXtsZXQgYT10aGlzLnJ1bGVzLmJsb2NrLmxpc3QuZXhlYyhs'@;
put 'KTtpZihhKXtsZXQgZCxoLGYsdixULFkscmUsZmUsX2Usa2UsV2UsSmUsdHQ9YVsxXS50cmltKCk7Y29uc3QgeXQ9dHQubGVuZ3RoPjEsd3Q9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOnl0LHN0YXJ0Onl0Pyt0dC5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07dHQ9eXQ/'@;
put 'YFxcZHsxLDl9XFwke3R0LnNsaWNlKC0xKX1gOmBcXCR7dHR9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJih0dD15dD90dDoiWyorLV0iKTtjb25zdCBMdD1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7dHR9KSgoPzpbXHQgXVteXFxuXSopPyg/OlxcbnwkKSlgKTtmb3IoO2wmJihKZT0hMSwoYT1M'@;
put 'dC5leGVjKGwpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdChsKSk7KXtpZihkPWFbMF0sbD1sLnN1YnN0cmluZyhkLmxlbmd0aCksZmU9YVsyXS5zcGxpdCgiXG4iLDEpWzBdLnJlcGxhY2UoL15cdCsvLHNuPT4iICIucmVwZWF0KDMqc24ubGVuZ3RoKSksX2U9bC5zcGxpdCgiXG4iLDEp'@;
put 'WzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8odj0yLFdlPWZlLnRyaW1MZWZ0KCkpOih2PWFbMl0uc2VhcmNoKC9bXiBdLyksdj12PjQ/MTp2LFdlPWZlLnNsaWNlKHYpLHYrPWFbMV0ubGVuZ3RoKSxZPSExLCFmZSYmL14gKiQvLnRlc3QoX2UpJiYoZCs9X2UrIlxuIixsPWwuc3Vic3RyaW5n'@;
put 'KF9lLmxlbmd0aCsxKSxKZT0hMCksIUplKXtjb25zdCBzbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86XFxufCQpKWApLE1uPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSgo'@;
put 'PzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSxWbj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oPzpcYFxgXGB8fn5+KWApLHVyPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSNgKTtmb3IoO2wmJihrZT1sLnNw'@;
put 'bGl0KCJcbiIsMSlbMF0sX2U9a2UsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoX2U9X2UucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhKFZuLnRlc3QoX2UpfHx1ci50ZXN0KF9lKXx8c24udGVzdChfZSl8fE1uLnRlc3QobCkpKTspe2lmKF9lLnNlYXJjaCgvW14g'@;
put 'XS8pPj12fHwhX2UudHJpbSgpKVdlKz0iXG4iK19lLnNsaWNlKHYpO2Vsc2V7aWYoWXx8ZmUuc2VhcmNoKC9bXiBdLyk+PTR8fFZuLnRlc3QoZmUpfHx1ci50ZXN0KGZlKXx8TW4udGVzdChmZSkpYnJlYWs7V2UrPSJcbiIrX2V9IVkmJiFfZS50cmltKCkmJihZPSEwKSxkKz1rZSsiXG4iLGw9'@;
put 'bC5zdWJzdHJpbmcoa2UubGVuZ3RoKzEpLGZlPV9lLnNsaWNlKHYpfX13dC5sb29zZXx8KHJlP3d0Lmxvb3NlPSEwOi9cbiAqXG4gKiQvLnRlc3QoZCkmJihyZT0hMCkpLHRoaXMub3B0aW9ucy5nZm0mJihoPS9eXFtbIHhYXVxdIC8uZXhlYyhXZSksaCYmKGY9IlsgXSAiIT09aFswXSxXZT1X'@;
put 'ZS5yZXBsYWNlKC9eXFtbIHhYXVxdICsvLCIiKSkpLHd0Lml0ZW1zLnB1c2goe3R5cGU6Imxpc3RfaXRlbSIscmF3OmQsdGFzazohIWgsY2hlY2tlZDpmLGxvb3NlOiExLHRleHQ6V2V9KSx3dC5yYXcrPWR9d3QuaXRlbXNbd3QuaXRlbXMubGVuZ3RoLTFdLnJhdz1kLnRyaW1SaWdodCgpLHd0'@;
put 'Lml0ZW1zW3d0Lml0ZW1zLmxlbmd0aC0xXS50ZXh0PVdlLnRyaW1SaWdodCgpLHd0LnJhdz13dC5yYXcudHJpbVJpZ2h0KCk7Y29uc3Qgb249d3QuaXRlbXMubGVuZ3RoO2ZvcihUPTA7VDxvbjtUKyspaWYodGhpcy5sZXhlci5zdGF0ZS50b3A9ITEsd3QuaXRlbXNbVF0udG9rZW5zPXRoaXMu'@;
put 'bGV4ZXIuYmxvY2tUb2tlbnMod3QuaXRlbXNbVF0udGV4dCxbXSksIXd0Lmxvb3NlKXtjb25zdCBzbj13dC5pdGVtc1tUXS50b2tlbnMuZmlsdGVyKFZuPT4ic3BhY2UiPT09Vm4udHlwZSksTW49c24ubGVuZ3RoPjAmJnNuLnNvbWUoVm49Pi9cbi4qXG4vLnRlc3QoVm4ucmF3KSk7d3QubG9v'@;
put 'c2U9TW59aWYod3QubG9vc2UpZm9yKFQ9MDtUPG9uO1QrKyl3dC5pdGVtc1tUXS5sb29zZT0hMDtyZXR1cm4gd3R9fWh0bWwobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmh0bWwuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJodG1sIixibG9jazohMCxyYXc6YVswXSxwcmU6IXRo'@;
put 'aXMub3B0aW9ucy5zYW5pdGl6ZXImJigicHJlIj09PWFbMV18fCJzY3JpcHQiPT09YVsxXXx8InN0eWxlIj09PWFbMV0pLHRleHQ6YVswXX07aWYodGhpcy5vcHRpb25zLnNhbml0aXplKXtjb25zdCBoPXRoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBd'@;
put 'KTpkMChhWzBdKTtkLnR5cGU9InBhcmFncmFwaCIsZC50ZXh0PWgsZC50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoaCl9cmV0dXJuIGR9fWRlZihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suZGVmLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD1hWzFdLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgv'@;
put 'XHMrL2csIiAiKSxoPWFbMl0/YVsyXS5yZXBsYWNlKC9ePCguKik+JC8sIiQxIikucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKToiIixmPWFbM10/YVszXS5zdWJzdHJpbmcoMSxhWzNdLmxlbmd0aC0xKS5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVz'@;
put 'LCIkMSIpOmFbM107cmV0dXJue3R5cGU6ImRlZiIsdGFnOmQscmF3OmFbMF0saHJlZjpoLHRpdGxlOmZ9fX10YWJsZShsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGFibGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPXt0eXBlOiJ0YWJsZSIsaGVhZGVyOk5jZShhWzFdKS5tYXAoaD0+KHt0'@;
put 'ZXh0Omh9KSksYWxpZ246YVsyXS5yZXBsYWNlKC9eICp8XHwgKiQvZywiIikuc3BsaXQoLyAqXHwgKi8pLHJvd3M6YVszXSYmYVszXS50cmltKCk/YVszXS5yZXBsYWNlKC9cblsgXHRdKiQvLCIiKS5zcGxpdCgiXG4iKTpbXX07aWYoZC5oZWFkZXIubGVuZ3RoPT09ZC5hbGlnbi5sZW5ndGgp'@;
put 'e2QucmF3PWFbMF07bGV0IGYsdixULFksaD1kLmFsaWduLmxlbmd0aDtmb3IoZj0wO2Y8aDtmKyspZC5hbGlnbltmXT0vXiAqLSs6ICokLy50ZXN0KGQuYWxpZ25bZl0pPyJyaWdodCI6L14gKjotKzogKiQvLnRlc3QoZC5hbGlnbltmXSk/ImNlbnRlciI6L14gKjotKyAqJC8udGVzdChkLmFs'@;
put 'aWduW2ZdKT8ibGVmdCI6bnVsbDtmb3IoaD1kLnJvd3MubGVuZ3RoLGY9MDtmPGg7ZisrKWQucm93c1tmXT1OY2UoZC5yb3dzW2ZdLGQuaGVhZGVyLmxlbmd0aCkubWFwKHJlPT4oe3RleHQ6cmV9KSk7Zm9yKGg9ZC5oZWFkZXIubGVuZ3RoLHY9MDt2PGg7disrKWQuaGVhZGVyW3ZdLnRva2Vu'@;
put 'cz10aGlzLmxleGVyLmlubGluZShkLmhlYWRlclt2XS50ZXh0KTtmb3IoaD1kLnJvd3MubGVuZ3RoLHY9MDt2PGg7disrKWZvcihZPWQucm93c1t2XSxUPTA7VDxZLmxlbmd0aDtUKyspWVtUXS50b2tlbnM9dGhpcy5sZXhlci5pbmxpbmUoWVtUXS50ZXh0KTtyZXR1cm4gZH19fWxoZWFkaW5n'@;
put 'KGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5saGVhZGluZy5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOiI9Ij09PWFbMl0uY2hhckF0KDApPzE6Mix0ZXh0OmFbMV0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lKGFbMV0pfX1wYXJhZ3JhcGgo'@;
put 'bCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnBhcmFncmFwaC5leGVjKGwpO2lmKGEpe2NvbnN0IGQ9IlxuIj09PWFbMV0uY2hhckF0KGFbMV0ubGVuZ3RoLTEpP2FbMV0uc2xpY2UoMCwtMSk6YVsxXTtyZXR1cm57dHlwZToicGFyYWdyYXBoIixyYXc6YVswXSx0ZXh0OmQsdG9rZW5zOnRo'@;
put 'aXMubGV4ZXIuaW5saW5lKGQpfX19dGV4dChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sudGV4dC5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6InRleHQiLHJhdzphWzBdLHRleHQ6YVswXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVswXSl9fWVzY2FwZShsKXtjb25zdCBhPXRoaXMu'@;
put 'cnVsZXMuaW5saW5lLmVzY2FwZS5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImVzY2FwZSIscmF3OmFbMF0sdGV4dDpkMChhWzFdKX19dGFnKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUudGFnLmV4ZWMobCk7aWYoYSlyZXR1cm4hdGhpcy5sZXhlci5zdGF0ZS5pbkxpbmsmJi9ePGEg'@;
put 'L2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148XC9hPi9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluTGluaz0hMSksIXRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayYmL148KHByZXxjb2RlfGtiZHxz'@;
put 'Y3JpcHQpKFxzfD4pL2kudGVzdChhWzBdKT90aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITA6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjxcLyhwcmV8Y29kZXxrYmR8c2NyaXB0KShcc3w+KS9pLnRlc3QoYVswXSkmJih0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s9ITEp'@;
put 'LHt0eXBlOnRoaXMub3B0aW9ucy5zYW5pdGl6ZT8idGV4dCI6Imh0bWwiLHJhdzphWzBdLGluTGluazp0aGlzLmxleGVyLnN0YXRlLmluTGluayxpblJhd0Jsb2NrOnRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jayxibG9jazohMSx0ZXh0OnRoaXMub3B0aW9ucy5zYW5pdGl6ZT90aGlzLm9w'@;
put 'dGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6ZDAoYVswXSk6YVswXX19bGluayhsKXtjb25zdCBhPXRoaXMucnVsZXMuaW5saW5lLmxpbmsuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMl0udHJpbSgpO2lmKCF0aGlzLm9wdGlvbnMucGVkYW50aWMmJi9ePC8u'@;
put 'dGVzdChkKSl7aWYoIS8+JC8udGVzdChkKSlyZXR1cm47Y29uc3Qgdj1hQShkLnNsaWNlKDAsLTEpLCJcXCIpO2lmKChkLmxlbmd0aC12Lmxlbmd0aCklMj09MClyZXR1cm59ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIG9KZShjLGwpe2lmKC0xPT09Yy5pbmRleE9mKGxbMV0pKXJldHVybi0xO2Nv'@;
put 'bnN0IGE9Yy5sZW5ndGg7bGV0IGQ9MCxoPTA7Zm9yKDtoPGE7aCsrKWlmKCJcXCI9PT1jW2hdKWgrKztlbHNlIGlmKGNbaF09PT1sWzBdKWQrKztlbHNlIGlmKGNbaF09PT1sWzFdJiYoZC0tLGQ8MCkpcmV0dXJuIGg7cmV0dXJuLTF9KGFbMl0sIigpIik7aWYodj4tMSl7Y29uc3QgWT0oMD09'@;
put 'PWFbMF0uaW5kZXhPZigiISIpPzU6NCkrYVsxXS5sZW5ndGgrdjthWzJdPWFbMl0uc3Vic3RyaW5nKDAsdiksYVswXT1hWzBdLnN1YnN0cmluZygwLFkpLnRyaW0oKSxhWzNdPSIifX1sZXQgaD1hWzJdLGY9IiI7aWYodGhpcy5vcHRpb25zLnBlZGFudGljKXtjb25zdCB2PS9eKFteJyJdKlte'@;
put 'XHNdKVxzKyhbJyJdKSguKilcMi8uZXhlYyhoKTt2JiYoaD12WzFdLGY9dlszXSl9ZWxzZSBmPWFbM10/YVszXS5zbGljZSgxLC0xKToiIjtyZXR1cm4gaD1oLnRyaW0oKSwvXjwvLnRlc3QoaCkmJihoPXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmIS8+JC8udGVzdChkKT9oLnNsaWNlKDEpOmgu'@;
put 'c2xpY2UoMSwtMSkpLFZjZShhLHtocmVmOmgmJmgucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKSx0aXRsZTpmJiZmLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIil9LGFbMF0sdGhpcy5sZXhlcil9fXJlZmxpbmsobCxhKXtsZXQgZDtpZigo'@;
put 'ZD10aGlzLnJ1bGVzLmlubGluZS5yZWZsaW5rLmV4ZWMobCkpfHwoZD10aGlzLnJ1bGVzLmlubGluZS5ub2xpbmsuZXhlYyhsKSkpe2xldCBoPShkWzJdfHxkWzFdKS5yZXBsYWNlKC9ccysvZywiICIpO2lmKGg9YVtoLnRvTG93ZXJDYXNlKCldLCFoKXtjb25zdCBmPWRbMF0uY2hhckF0KDAp'@;
put 'O3JldHVybnt0eXBlOiJ0ZXh0IixyYXc6Zix0ZXh0OmZ9fXJldHVybiBWY2UoZCxoLGRbMF0sdGhpcy5sZXhlcil9fWVtU3Ryb25nKGwsYSxkPSIiKXtsZXQgaD10aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5sRGVsaW0uZXhlYyhsKTtpZighKCFofHxoWzNdJiZkLm1hdGNoKC9bXHB7TH1c'@;
put 'cHtOfV0vdSkpJiYoIWhbMV0mJiFoWzJdfHwhZHx8dGhpcy5ydWxlcy5pbmxpbmUucHVuY3R1YXRpb24uZXhlYyhkKSkpe2NvbnN0IHY9aFswXS5sZW5ndGgtMTtsZXQgVCxZLHJlPXYsZmU9MDtjb25zdCBfZT0iKiI9PT1oWzBdWzBdP3RoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25nLnJEZWxp'@;
put 'bUFzdDp0aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1VbmQ7Zm9yKF9lLmxhc3RJbmRleD0wLGE9YS5zbGljZSgtMSpsLmxlbmd0aCt2KTtudWxsIT0oaD1fZS5leGVjKGEpKTspe2lmKFQ9aFsxXXx8aFsyXXx8aFszXXx8aFs0XXx8aFs1XXx8aFs2XSwhVCljb250aW51ZTtpZihZ'@;
put 'PVQubGVuZ3RoLGhbM118fGhbNF0pe3JlKz1ZO2NvbnRpbnVlfWlmKChoWzVdfHxoWzZdKSYmdiUzJiYhKCh2K1kpJTMpKXtmZSs9WTtjb250aW51ZX1pZihyZS09WSxyZT4wKWNvbnRpbnVlO1k9TWF0aC5taW4oWSxZK3JlK2ZlKTtjb25zdCBrZT1sLnNsaWNlKDAsditoLmluZGV4K1krMSk7'@;
put 'aWYoTWF0aC5taW4odixZKSUyKXtjb25zdCBKZT1rZS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzprZSx0ZXh0OkplLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhKZSl9fWNvbnN0IFdlPWtlLnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJzdHJvbmciLHJhdzprZSx0'@;
put 'ZXh0OldlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhXZSl9fX19Y29kZXNwYW4obCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS5yZXBsYWNlKC9cbi9nLCIgIik7Y29uc3QgaD0vW14gXS8udGVzdChkKSxmPS9eIC8udGVz'@;
put 'dChkKSYmLyAkLy50ZXN0KGQpO3JldHVybiBoJiZmJiYoZD1kLnN1YnN0cmluZygxLGQubGVuZ3RoLTEpKSxkPWQwKGQsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OmFbMF0sdGV4dDpkfX19YnIobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGwpO2lmKGEpcmV0dXJue3R5'@;
put 'cGU6ImJyIixyYXc6YVswXX19ZGVsKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiZGVsIixyYXc6YVswXSx0ZXh0OmFbMl0sdG9rZW5zOnRoaXMubGV4ZXIuaW5saW5lVG9rZW5zKGFbMl0pfX1hdXRvbGluayhsLGEpe2NvbnN0IGQ9'@;
put 'dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhsKTtpZihkKXtsZXQgaCxmO3JldHVybiJAIj09PWRbMl0/KGg9ZDAodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMV0pOmRbMV0pLGY9Im1haWx0bzoiK2gpOihoPWQwKGRbMV0pLGY9aCkse3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6'@;
put 'aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX11cmwobCxhKXtsZXQgZDtpZihkPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGwpKXtsZXQgaCxmO2lmKCJAIj09PWRbMl0paD1kMCh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFswXSk6ZFswXSksZj0ibWFp'@;
put 'bHRvOiIraDtlbHNle2xldCB2O2Rve3Y9ZFswXSxkWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhkWzBdKVswXX13aGlsZSh2IT09ZFswXSk7aD1kMChkWzBdKSxmPSJ3d3cuIj09PWRbMV0/Imh0dHA6Ly8iK2RbMF06ZFswXX1yZXR1cm57dHlwZToibGluayIscmF3OmRb'@;
put 'MF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fWlubGluZVRleHQobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhsKTtpZihkKXtsZXQgaDtyZXR1cm4gaD10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/dGhpcy5v'@;
put 'cHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihkWzBdKTpkMChkWzBdKTpkWzBdOmQwKHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9hKGRbMF0pOmRbMF0pLHt0eXBlOiJ0ZXh0IixyYXc6ZFswXSx0ZXh0Omh9fX19Y29uc3QgVm89'@;
put 'e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15cbl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAs'@;
put 'M31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEsNn0pKD89XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4g'@;
put 'PyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxzPl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVu'@;
put 'dFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFnKSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58'@;
put 'JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+'@;
put 'KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuICopP3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOnNBLGxo'@;
put 'ZWFkaW5nOi9eKCg/Oig/IV5idWxsICkufFxuKD8hXG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9ja3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSsp'@;
put 'KikvLHRleHQ6L15bXlxuXSsvLF9sYWJlbDovKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxfdGl0bGU6Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwpKS99O1ZvLmRlZj1BYShWby5kZWYpLnJlcGxhY2UoImxhYmVsIixWby5f'@;
put 'bGFiZWwpLnJlcGxhY2UoInRpdGxlIixWby5fdGl0bGUpLmdldFJlZ2V4KCksVm8uYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLFZvLmxpc3RJdGVtU3RhcnQ9QWEoL14oICopKGJ1bGwpICovKS5yZXBsYWNlKCJidWxsIixWby5idWxsZXQpLmdldFJlZ2V4KCksVm8ubGlzdD1BYShW'@;
put 'by5saXN0KS5yZXBsYWNlKC9idWxsL2csVm8uYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2UoImRlZiIsIlxcbisoPz0iK1ZvLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdl'@;
put 'eCgpLFZvLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxkdHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxm'@;
put 'cmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBhcmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8'@;
put 'dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLFZvLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxWby5odG1sPUFhKFZvLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixWby5fY29tbWVudCkucmVwbGFjZSgidGFnIixWby5fdGFnKS5yZXBsYWNlKCJh'@;
put 'dHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLFZvLmxoZWFkaW5nPUFhKFZvLmxoZWFkaW5nKS5yZXBsYWNlKC9idWxsL2csVm8uYnVsbGV0KS5nZXRSZWdleCgpLFZv'@;
put 'LnBhcmFncmFwaD1BYShWby5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsVm8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxlIiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBs'@;
put 'YWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxl'@;
put 'fHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLFZvLl90YWcpLmdldFJlZ2V4KCksVm8uYmxvY2txdW90ZT1BYShWby5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLFZvLnBhcmFncmFwaCkuZ2V0UmVnZXgoKSxWby5ub3JtYWw9ey4uLlZvfSxWby5nZm09ey4uLlZvLm5vcm1h'@;
put 'bCx0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVvdGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxu'@;
put 'KnwkKSJ9LFZvLmdmbS50YWJsZT1BYShWby5nZm0udGFibGUpLnJlcGxhY2UoImhyIixWby5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIpLnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVu'@;
put 'Y2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJl'@;
put 'YXwhLS0pIikucmVwbGFjZSgidGFnIixWby5fdGFnKS5nZXRSZWdleCgpLFZvLmdmbS5wYXJhZ3JhcGg9QWEoVm8uX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLFZvLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2Uo'@;
put 'InRhYmxlIixWby5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVw'@;
put 'bGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixWby5fdGFnKS5nZXRSZWdleCgpLFZvLnBlZGFudGljPXsuLi5Wby5ub3JtYWwsaHRtbDpBYSgiXiAqKD86Y29tbWVudCAqKD86XFxu'@;
put 'fFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVwbGFjZSgiY29tbWVudCIsVm8uX2NvbW1lbnQpLnJlcGxhY2UoL3RhZy9n'@;
put 'LCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxpbnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpAKVxcYiIp'@;
put 'LmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2VzOnNBLGxoZWFkaW5nOi9eKC4rPylcbiB7MCwzfSg9K3wtKykgKig/Olxu'@;
put 'K3wkKS8scGFyYWdyYXBoOkFhKFZvLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsVm8uaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgKiN7MSw2fSAqW15cbl0iKS5yZXBsYWNlKCJsaGVhZGluZyIsVm8ubGhlYWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVw'@;
put 'bGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCB0bz17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxcXl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2NoZW1lOlteXHNceDAwLVx4'@;
put 'MWY8Pl0qfGVtYWlsKT4vLHVybDpzQSx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/PnxePCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tc'@;
put 'XHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilcXSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmso'@;
put 'PyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wqW15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0o'@;
put 'XCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKisp'@;
put 'KD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8pKD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVu'@;
put 'Y3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxcXClcbig/IVxzKiQpLyxkZWw6c0EsdGV4dDovXihgK3xbXmBdKSg/Oig/'@;
put 'PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtmdW5jdGlvbiBsSmUoYyl7cmV0dXJuIGMucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0t'@;
put 'L2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIkMVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgv'@;
put 'XC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gamNlKGMpe2xldCBhLGQsbD0iIjtjb25zdCBoPWMubGVuZ3RoO2ZvcihhPTA7YTxoO2ErKylkPWMuY2hhckNvZGVBdChhKSxNYXRoLnJhbmRvbSgpPi41JiYoZD0ieCIrZC50b1N0cmluZygxNikpLGwrPSImIyIrZCsiOyI7cmV0dXJuIGx9dG8u'@;
put 'X3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iLHRvLnB1bmN0dWF0aW9uPUFhKHRvLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyx0by5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksdG8uYmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBd'@;
put 'Kj9gfDxbXjw+XSo/Pi9nLHRvLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyx0by5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyx0by5fY29tbWVudD1BYShWby5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQpIiwiLS1ceDNlIikuZ2V0UmVnZXgoKSx0by5lbVN0cm9uZy5sRGVsaW09'@;
put 'QWEodG8uZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyx0by5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksdG8uZW1TdHJvbmcuckRlbGltQXN0PUFhKHRvLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3UiKS5yZXBsYWNlKC9wdW5jdC9nLHRvLl9wdW5jdHVhdGlvbikuZ2V0UmVn'@;
put 'ZXgoKSx0by5lbVN0cm9uZy5yRGVsaW1VbmQ9QWEodG8uZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csdG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLHRvLmFueVB1bmN0dWF0aW9uPUFhKHRvLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2cs'@;
put 'dG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLHRvLl9lc2NhcGVzPUFhKHRvLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csdG8uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLHRvLl9zY2hlbWU9L1thLXpBLVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLHRvLl9lbWFpbD0vW2EtekEt'@;
put 'WjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0pPykrKD8hWy1fXSkvLHRvLmF1dG9saW5rPUFhKHRvLmF1dG9saW5rKS5y'@;
put 'ZXBsYWNlKCJzY2hlbWUiLHRvLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIix0by5fZW1haWwpLmdldFJlZ2V4KCksdG8uX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMqPVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/Lyx0by50YWc9'@;
put 'QWEodG8udGFnKS5yZXBsYWNlKCJjb21tZW50Iix0by5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIix0by5fYXR0cmlidXRlKS5nZXRSZWdleCgpLHRvLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpcXXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/Lyx0by5faHJlZj0vPCg/'@;
put 'OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyx0by5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyx0by5saW5rPUFhKHRvLmxpbmspLnJlcGxhY2UoImxhYmVsIix0by5fbGFiZWwpLnJlcGxhY2UoImhy'@;
put 'ZWYiLHRvLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsdG8uX3RpdGxlKS5nZXRSZWdleCgpLHRvLnJlZmxpbms9QWEodG8ucmVmbGluaykucmVwbGFjZSgibGFiZWwiLHRvLl9sYWJlbCkucmVwbGFjZSgicmVmIixWby5fbGFiZWwpLmdldFJlZ2V4KCksdG8ubm9saW5rPUFhKHRvLm5vbGluayku'@;
put 'cmVwbGFjZSgicmVmIixWby5fbGFiZWwpLmdldFJlZ2V4KCksdG8ucmVmbGlua1NlYXJjaD1BYSh0by5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsdG8ucmVmbGluaykucmVwbGFjZSgibm9saW5rIix0by5ub2xpbmspLmdldFJlZ2V4KCksdG8ubm9ybWFsPXsuLi50b30s'@;
put 'dG8ucGVkYW50aWM9ey4uLnRvLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8sZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVt'@;
put 'OntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxpbms6QWEoL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgi'@;
put 'bGFiZWwiLHRvLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOkFhKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIix0by5fbGFiZWwpLmdldFJlZ2V4KCl9LHRvLmdmbT17Li4udG8ubm9ybWFsLGVzY2FwZTpBYSh0by5lc2NhcGUpLnJlcGxhY2UoIl0p'@;
put 'IiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wu'@;
put 'PykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVteXHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9e'@;
put 'KFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dcLnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitc'@;
put 'Lz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LHRvLmdmbS51cmw9QWEodG8uZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIix0by5nZm0uX2V4dGVuZGVkX2VtYWlsKS5nZXRSZWdleCgpLHRvLmJyZWFrcz17Li4udG8uZ2ZtLGJyOkFhKHRv'@;
put 'LmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDpBYSh0by5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9O2NsYXNzIEhme2NvbnN0cnVjdG9yKGwpe3RoaXMudG9rZW5zPVtdLHRo'@;
put 'aXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWx8fE1tLHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IGxBLHRoaXMudG9rZW5pemVyPXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0'@;
put 'aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3QgYT17YmxvY2s6Vm8ubm9ybWFsLGlubGluZTp0by5ub3JtYWx9O3RoaXMub3B0aW9ucy5w'@;
put 'ZWRhbnRpYz8oYS5ibG9jaz1Wby5wZWRhbnRpYyxhLmlubGluZT10by5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKGEuYmxvY2s9Vm8uZ2ZtLGEuaW5saW5lPXRoaXMub3B0aW9ucy5icmVha3M/dG8uYnJlYWtzOnRvLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9YX1zdGF0aWMgZ2V0'@;
put 'IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOlZvLGlubGluZTp0b319c3RhdGljIGxleChsLGEpe3JldHVybiBuZXcgSGYoYSkubGV4KGwpfXN0YXRpYyBsZXhJbmxpbmUobCxhKXtyZXR1cm4gbmV3IEhmKGEpLmlubGluZVRva2VucyhsKX1sZXgobCl7bGV0IGE7Zm9yKGw9bC5yZXBsYWNlKC9cclxu'@;
put 'fFxyL2csIlxuIiksdGhpcy5ibG9ja1Rva2VucyhsLHRoaXMudG9rZW5zKTthPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMoYS5zcmMsYS50b2tlbnMpO3JldHVybiB0aGlzLnRva2Vuc31ibG9ja1Rva2VucyhsLGE9W10pe2xldCBkLGgsZix2O2ZvcihsPXRo'@;
put 'aXMub3B0aW9ucy5wZWRhbnRpYz9sLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTpsLnJlcGxhY2UoL14oICopKFx0KykvZ20sKFQsWSxyZSk9PlkrIiAgICAiLnJlcGVhdChyZS5sZW5ndGgpKTtsOylpZighKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlz'@;
put 'Lm9wdGlvbnMuZXh0ZW5zaW9ucy5ibG9jayYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2suc29tZShUPT4hIShkPVQuY2FsbCh7bGV4ZXI6dGhpc30sbCxhKSkmJihsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpLCEwKSkpKXtpZihkPXRoaXMudG9rZW5pemVyLnNw'@;
put 'YWNlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksMT09PWQucmF3Lmxlbmd0aCYmYS5sZW5ndGg+MD9hW2EubGVuZ3RoLTFdLnJhdys9IlxuIjphLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5jb2RlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCks'@;
put 'aD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP2EucHVzaChkKTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QudGV4dCx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpO2Nv'@;
put 'bnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZmVuY2VzKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaGVhZGluZyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1p'@;
put 'ZihkPXRoaXMudG9rZW5pemVyLmhyKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuYmxvY2txdW90ZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMu'@;
put 'dG9rZW5pemVyLmxpc3QobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5odG1sKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZGVm'@;
put 'KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksaD1hW2EubGVuZ3RoLTFdLCFofHwicGFyYWdyYXBoIiE9PWgudHlwZSYmInRleHQiIT09aC50eXBlP3RoaXMudG9rZW5zLmxpbmtzW2QudGFnXXx8KHRoaXMudG9rZW5zLmxpbmtzW2QudGFnXT17aHJlZjpkLmhyZWYsdGl0bGU6ZC50'@;
put 'aXRsZX0pOihoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC5yYXcsdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnRhYmxlKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0'@;
put 'aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGhlYWRpbmcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZj1sLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJs'@;
put 'b2NrKXtsZXQgVD0xLzA7Y29uc3QgWT1sLnNsaWNlKDEpO2xldCByZTt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24oZmUpe3JlPWZlLmNhbGwoe2xleGVyOnRoaXN9LFkpLCJudW1iZXIiPT10eXBlb2YgcmUmJnJlPj0wJiYoVD1NYXRoLm1pbihU'@;
put 'LHJlKSl9KSxUPDEvMCYmVD49MCYmKGY9bC5zdWJzdHJpbmcoMCxUKzEpKX1pZih0aGlzLnN0YXRlLnRvcCYmKGQ9dGhpcy50b2tlbml6ZXIucGFyYWdyYXBoKGYpKSl7aD1hW2EubGVuZ3RoLTFdLHYmJiJwYXJhZ3JhcGgiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJc'@;
put 'biIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCksdj1mLmxlbmd0aCE9PWwubGVuZ3RoLGw9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKTtjb250aW51ZX1pZihkPXRo'@;
put 'aXMudG9rZW5pemVyLnRleHQobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9IlxuIitkLnJhdyxoLnRleHQrPSJcbiIrZC50ZXh0LHRoaXMuaW5saW5lUXVldWUucG9wKCksdGhpcy5pbmxpbmVRdWV1ZVt0'@;
put 'aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTphLnB1c2goZCk7Y29udGludWV9aWYobCl7Y29uc3QgVD0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKFQpO2JyZWFrfXRocm93'@;
put 'IG5ldyBFcnJvcihUKX19cmV0dXJuIHRoaXMuc3RhdGUudG9wPSEwLGF9aW5saW5lKGwsYT1bXSl7cmV0dXJuIHRoaXMuaW5saW5lUXVldWUucHVzaCh7c3JjOmwsdG9rZW5zOmF9KSxhfWlubGluZVRva2VucyhsLGE9W10pe2xldCBkLGgsZixULFkscmUsdj1sO2lmKHRoaXMudG9rZW5zLmxp'@;
put 'bmtzKXtjb25zdCBmZT1PYmplY3Qua2V5cyh0aGlzLnRva2Vucy5saW5rcyk7aWYoZmUubGVuZ3RoPjApZm9yKDtudWxsIT0oVD10aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUucmVmbGlua1NlYXJjaC5leGVjKHYpKTspZmUuaW5jbHVkZXMoVFswXS5zbGljZShUWzBdLmxhc3RJbmRleE9m'@;
put 'KCJbIikrMSwtMSkpJiYodj12LnNsaWNlKDAsVC5pbmRleCkrIlsiKyJhIi5yZXBlYXQoVFswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2gubGFzdEluZGV4KSl9Zm9yKDtudWxsIT0oVD10aGlzLnRva2VuaXplci5ydWxl'@;
put 'cy5pbmxpbmUuYmxvY2tTa2lwLmV4ZWModikpOyl2PXYuc2xpY2UoMCxULmluZGV4KSsiWyIrImEiLnJlcGVhdChUWzBdLmxlbmd0aC0yKSsiXSIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYmxvY2tTa2lwLmxhc3RJbmRleCk7Zm9yKDtudWxsIT0oVD10aGlzLnRva2Vu'@;
put 'aXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24uZXhlYyh2KSk7KXY9di5zbGljZSgwLFQuaW5kZXgpKyIrKyIrdi5zbGljZSh0aGlzLnRva2VuaXplci5ydWxlcy5pbmxpbmUuYW55UHVuY3R1YXRpb24ubGFzdEluZGV4KTtmb3IoO2w7KWlmKFl8fChyZT0iIiksWT0hMSwhKHRoaXMu'@;
put 'b3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKGZlPT4hIShkPWZlLmNhbGwoe2xleGVyOnRoaXN9LGwsYSkpJiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwh'@;
put 'MCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5lc2NhcGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQi'@;
put 'PT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGluayhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9r'@;
put 'ZW5pemVyLnJlZmxpbmsobCx0aGlzLnRva2Vucy5saW5rcykpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVl'@;
put 'fWlmKGQ9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcobCx2LHJlKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmNvZGVzcGFuKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVl'@;
put 'fWlmKGQ9dGhpcy50b2tlbml6ZXIuYnIobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5kZWwobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2Vu'@;
put 'aXplci5hdXRvbGluayhsLGpjZSkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoIXRoaXMuc3RhdGUuaW5MaW5rJiYoZD10aGlzLnRva2VuaXplci51cmwobCxqY2UpKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250'@;
put 'aW51ZX1pZihmPWwsdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lKXtsZXQgZmU9MS8wO2NvbnN0IF9lPWwuc2xpY2UoMSk7bGV0IGtlO3RoaXMub3B0aW9ucy5leHRlbnNpb25zLnN0YXJ0SW5saW5lLmZvckVhY2goZnVuY3Rpb24o'@;
put 'V2Upe2tlPVdlLmNhbGwoe2xleGVyOnRoaXN9LF9lKSwibnVtYmVyIj09dHlwZW9mIGtlJiZrZT49MCYmKGZlPU1hdGgubWluKGZlLGtlKSl9KSxmZTwxLzAmJmZlPj0wJiYoZj1sLnN1YnN0cmluZygwLGZlKzEpKX1pZihkPXRoaXMudG9rZW5pemVyLmlubGluZVRleHQoZixsSmUpKXtsPWwu'@;
put 'c3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksIl8iIT09ZC5yYXcuc2xpY2UoLTEpJiYocmU9ZC5yYXcuc2xpY2UoLTEpKSxZPSEwLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGwpe2Nv'@;
put 'bnN0IGZlPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpe2NvbnNvbGUuZXJyb3IoZmUpO2JyZWFrfXRocm93IG5ldyBFcnJvcihmZSl9fXJldHVybiBhfX1jbGFzcyBjQXtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9'@;
put 'bHx8TW19Y29kZShsLGEsZCl7Y29uc3QgaD0oYXx8IiIpLm1hdGNoKC9cUyovKVswXTtpZih0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KXtjb25zdCBmPXRoaXMub3B0aW9ucy5oaWdobGlnaHQobCxoKTtudWxsIT1mJiZmIT09bCYmKGQ9ITAsbD1mKX1yZXR1cm4gbD1sLnJlcGxhY2UoL1xuJC8s'@;
put 'IiIpKyJcbiIsaD8nPHByZT48Y29kZSBjbGFzcz0iJyt0aGlzLm9wdGlvbnMubGFuZ1ByZWZpeCtkMChoKSsnIj4nKyhkP2w6ZDAobCwhMCkpKyI8L2NvZGU+PC9wcmU+XG4iOiI8cHJlPjxjb2RlPiIrKGQ/bDpkMChsLCEwKSkrIjwvY29kZT48L3ByZT5cbiJ9YmxvY2txdW90ZShsKXtyZXR1'@;
put 'cm5gPGJsb2NrcXVvdGU+XG4ke2x9PC9ibG9ja3F1b3RlPlxuYH1odG1sKGwsYSl7cmV0dXJuIGx9aGVhZGluZyhsLGEsZCxoKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhlYWRlcklkcz9gPGgke2F9IGlkPSIke3RoaXMub3B0aW9ucy5oZWFkZXJQcmVmaXgraC5zbHVnKGQpfSI+JHtsfTwvaCR7'@;
put 'YX0+XG5gOmA8aCR7YX0+JHtsfTwvaCR7YX0+XG5gfWhyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGhyLz5cbiI6Ijxocj5cbiJ9bGlzdChsLGEsZCl7Y29uc3QgaD1hPyJvbCI6InVsIjtyZXR1cm4iPCIraCsoYSYmMSE9PWQ/JyBzdGFydD0iJytkKyciJzoiIikrIj5cbiIrbCsi'@;
put 'PC8iK2grIj5cbiJ9bGlzdGl0ZW0obCl7cmV0dXJuYDxsaT4ke2x9PC9saT5cbmB9Y2hlY2tib3gobCl7cmV0dXJuIjxpbnB1dCAiKyhsPydjaGVja2VkPSIiICc6IiIpKydkaXNhYmxlZD0iIiB0eXBlPSJjaGVja2JveCInKyh0aGlzLm9wdGlvbnMueGh0bWw/IiAvIjoiIikrIj4gIn1wYXJh'@;
put 'Z3JhcGgobCl7cmV0dXJuYDxwPiR7bH08L3A+XG5gfXRhYmxlKGwsYSl7cmV0dXJuIGEmJihhPWA8dGJvZHk+JHthfTwvdGJvZHk+YCksIjx0YWJsZT5cbjx0aGVhZD5cbiIrbCsiPC90aGVhZD5cbiIrYSsiPC90YWJsZT5cbiJ9dGFibGVyb3cobCl7cmV0dXJuYDx0cj5cbiR7bH08L3RyPlxu'@;
put 'YH10YWJsZWNlbGwobCxhKXtjb25zdCBkPWEuaGVhZGVyPyJ0aCI6InRkIjtyZXR1cm4oYS5hbGlnbj9gPCR7ZH0gYWxpZ249IiR7YS5hbGlnbn0iPmA6YDwke2R9PmApK2wrYDwvJHtkfT5cbmB9c3Ryb25nKGwpe3JldHVybmA8c3Ryb25nPiR7bH08L3N0cm9uZz5gfWVtKGwpe3JldHVybmA8'@;
put 'ZW0+JHtsfTwvZW0+YH1jb2Rlc3BhbihsKXtyZXR1cm5gPGNvZGU+JHtsfTwvY29kZT5gfWJyKCl7cmV0dXJuIHRoaXMub3B0aW9ucy54aHRtbD8iPGJyLz4iOiI8YnI+In1kZWwobCl7cmV0dXJuYDxkZWw+JHtsfTwvZGVsPmB9bGluayhsLGEsZCl7aWYobnVsbD09PShsPUhjZSh0aGlzLm9w'@;
put 'dGlvbnMuc2FuaXRpemUsdGhpcy5vcHRpb25zLmJhc2VVcmwsbCkpKXJldHVybiBkO2xldCBoPSc8YSBocmVmPSInK2wrJyInO3JldHVybiBhJiYoaCs9JyB0aXRsZT0iJythKyciJyksaCs9Ij4iK2QrIjwvYT4iLGh9aW1hZ2UobCxhLGQpe2lmKG51bGw9PT0obD1IY2UodGhpcy5vcHRpb25z'@;
put 'LnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD1gPGltZyBzcmM9IiR7bH0iIGFsdD0iJHtkfSJgO3JldHVybiBhJiYoaCs9YCB0aXRsZT0iJHthfSJgKSxoKz10aGlzLm9wdGlvbnMueGh0bWw/Ii8+IjoiPiIsaH10ZXh0KGwpe3JldHVybiBsfX1jbGFz'@;
put 'cyBOVXtzdHJvbmcobCl7cmV0dXJuIGx9ZW0obCl7cmV0dXJuIGx9Y29kZXNwYW4obCl7cmV0dXJuIGx9ZGVsKGwpe3JldHVybiBsfWh0bWwobCl7cmV0dXJuIGx9dGV4dChsKXtyZXR1cm4gbH1saW5rKGwsYSxkKXtyZXR1cm4iIitkfWltYWdlKGwsYSxkKXtyZXR1cm4iIitkfWJyKCl7cmV0'@;
put 'dXJuIiJ9fWNsYXNzIFZVe2NvbnN0cnVjdG9yKCl7dGhpcy5zZWVuPXt9fXNlcmlhbGl6ZShsKXtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAwLVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSor'@;
put 'LC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVwbGFjZSgvXHMvZywiLSIpfWdldE5leHRTYWZlU2x1ZyhsLGEpe2xldCBkPWwsaD0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl7aD10aGlzLnNlZW5bbF07ZG97aCsrLGQ9bCsiLSIraH13aGlsZSh0aGlzLnNlZW4uaGFzT3du'@;
put 'UHJvcGVydHkoZCkpfXJldHVybiBhfHwodGhpcy5zZWVuW2xdPWgsdGhpcy5zZWVuW2RdPTApLGR9c2x1ZyhsLGE9e30pe2NvbnN0IGQ9dGhpcy5zZXJpYWxpemUobCk7cmV0dXJuIHRoaXMuZ2V0TmV4dFNhZmVTbHVnKGQsYS5kcnlydW4pfX1jbGFzcyBOZntjb25zdHJ1Y3RvcihsKXt0aGlz'@;
put 'Lm9wdGlvbnM9bHx8TW0sdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IGNBLHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IE5VLHRo'@;
put 'aXMuc2x1Z2dlcj1uZXcgVlV9c3RhdGljIHBhcnNlKGwsYSl7cmV0dXJuIG5ldyBOZihhKS5wYXJzZShsKX1zdGF0aWMgcGFyc2VJbmxpbmUobCxhKXtyZXR1cm4gbmV3IE5mKGEpLnBhcnNlSW5saW5lKGwpfXBhcnNlKGwsYT0hMCl7bGV0IGgsZix2LFQsWSxyZSxmZSxfZSxrZSxXZSxKZSx0'@;
put 'dCx5dCx3dCxMdCxvbixzbixNbixWbixkPSIiO2NvbnN0IHVyPWwubGVuZ3RoO2ZvcihoPTA7aDx1cjtoKyspaWYoV2U9bFtoXSx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJl'@;
put 'cnNbV2UudHlwZV0mJihWbj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbV2UudHlwZV0uY2FsbCh7cGFyc2VyOnRoaXN9LFdlKSwhMSE9PVZufHwhWyJzcGFjZSIsImhyIiwiaGVhZGluZyIsImNvZGUiLCJ0YWJsZSIsImJsb2NrcXVvdGUiLCJsaXN0IiwiaHRtbCIsInBhcmFn'@;
put 'cmFwaCIsInRleHQiXS5pbmNsdWRlcyhXZS50eXBlKSkpZCs9Vm58fCIiO2Vsc2Ugc3dpdGNoKFdlLnR5cGUpe2Nhc2Uic3BhY2UiOmNvbnRpbnVlO2Nhc2UiaHIiOmQrPXRoaXMucmVuZGVyZXIuaHIoKTtjb250aW51ZTtjYXNlImhlYWRpbmciOmQrPXRoaXMucmVuZGVyZXIuaGVhZGluZyh0'@;
put 'aGlzLnBhcnNlSW5saW5lKFdlLnRva2VucyksV2UuZGVwdGgsRmNlKHRoaXMucGFyc2VJbmxpbmUoV2UudG9rZW5zLHRoaXMudGV4dFJlbmRlcmVyKSksdGhpcy5zbHVnZ2VyKTtjb250aW51ZTtjYXNlImNvZGUiOmQrPXRoaXMucmVuZGVyZXIuY29kZShXZS50ZXh0LFdlLmxhbmcsV2UuZXNj'@;
put 'YXBlZCk7Y29udGludWU7Y2FzZSJ0YWJsZSI6Zm9yKF9lPSIiLGZlPSIiLFQ9V2UuaGVhZGVyLmxlbmd0aCxmPTA7ZjxUO2YrKylmZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlubGluZShXZS5oZWFkZXJbZl0udG9rZW5zKSx7aGVhZGVyOiEwLGFsaWduOldlLmFsaWdu'@;
put 'W2ZdfSk7Zm9yKF9lKz10aGlzLnJlbmRlcmVyLnRhYmxlcm93KGZlKSxrZT0iIixUPVdlLnJvd3MubGVuZ3RoLGY9MDtmPFQ7ZisrKXtmb3IocmU9V2Uucm93c1tmXSxmZT0iIixZPXJlLmxlbmd0aCx2PTA7djxZO3YrKylmZSs9dGhpcy5yZW5kZXJlci50YWJsZWNlbGwodGhpcy5wYXJzZUlu'@;
put 'bGluZShyZVt2XS50b2tlbnMpLHtoZWFkZXI6ITEsYWxpZ246V2UuYWxpZ25bdl19KTtrZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhmZSl9ZCs9dGhpcy5yZW5kZXJlci50YWJsZShfZSxrZSk7Y29udGludWU7Y2FzZSJibG9ja3F1b3RlIjprZT10aGlzLnBhcnNlKFdlLnRva2VucyksZCs9'@;
put 'dGhpcy5yZW5kZXJlci5ibG9ja3F1b3RlKGtlKTtjb250aW51ZTtjYXNlImxpc3QiOmZvcihKZT1XZS5vcmRlcmVkLHR0PVdlLnN0YXJ0LHl0PVdlLmxvb3NlLFQ9V2UuaXRlbXMubGVuZ3RoLGtlPSIiLGY9MDtmPFQ7ZisrKUx0PVdlLml0ZW1zW2ZdLG9uPUx0LmNoZWNrZWQsc249THQudGFz'@;
put 'ayx3dD0iIixMdC50YXNrJiYoTW49dGhpcy5yZW5kZXJlci5jaGVja2JveChvbikseXQ/THQudG9rZW5zLmxlbmd0aD4wJiYicGFyYWdyYXBoIj09PUx0LnRva2Vuc1swXS50eXBlPyhMdC50b2tlbnNbMF0udGV4dD1NbisiICIrTHQudG9rZW5zWzBdLnRleHQsTHQudG9rZW5zWzBdLnRva2Vu'@;
put 'cyYmTHQudG9rZW5zWzBdLnRva2Vucy5sZW5ndGg+MCYmInRleHQiPT09THQudG9rZW5zWzBdLnRva2Vuc1swXS50eXBlJiYoTHQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0PU1uKyIgIitMdC50b2tlbnNbMF0udG9rZW5zWzBdLnRleHQpKTpMdC50b2tlbnMudW5zaGlmdCh7dHlwZToidGV4'@;
put 'dCIsdGV4dDpNbn0pOnd0Kz1Nbiksd3QrPXRoaXMucGFyc2UoTHQudG9rZW5zLHl0KSxrZSs9dGhpcy5yZW5kZXJlci5saXN0aXRlbSh3dCxzbixvbik7ZCs9dGhpcy5yZW5kZXJlci5saXN0KGtlLEplLHR0KTtjb250aW51ZTtjYXNlImh0bWwiOmQrPXRoaXMucmVuZGVyZXIuaHRtbChXZS50'@;
put 'ZXh0LFdlLmJsb2NrKTtjb250aW51ZTtjYXNlInBhcmFncmFwaCI6ZCs9dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgodGhpcy5wYXJzZUlubGluZShXZS50b2tlbnMpKTtjb250aW51ZTtjYXNlInRleHQiOmZvcihrZT1XZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShXZS50b2tlbnMpOldlLnRl'@;
put 'eHQ7aCsxPHVyJiYidGV4dCI9PT1sW2grMV0udHlwZTspV2U9bFsrK2hdLGtlKz0iXG4iKyhXZS50b2tlbnM/dGhpcy5wYXJzZUlubGluZShXZS50b2tlbnMpOldlLnRleHQpO2QrPWE/dGhpcy5yZW5kZXJlci5wYXJhZ3JhcGgoa2UpOmtlO2NvbnRpbnVlO2RlZmF1bHQ6e2NvbnN0IFRyPSdU'@;
put 'b2tlbiB3aXRoICInK1dlLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKFRyKTt0aHJvdyBuZXcgRXJyb3IoVHIpfX1yZXR1cm4gZH1wYXJzZUlubGluZShsLGEpe2E9YXx8dGhpcy5yZW5kZXJlcjts'@;
put 'ZXQgaCxmLHYsZD0iIjtjb25zdCBUPWwubGVuZ3RoO2ZvcihoPTA7aDxUO2grKylpZihmPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVycyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW2YudHlwZV0mJih2PXRo'@;
put 'aXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxmKSwhMSE9PXZ8fCFbImVzY2FwZSIsImh0bWwiLCJsaW5rIiwiaW1hZ2UiLCJzdHJvbmciLCJlbSIsImNvZGVzcGFuIiwiYnIiLCJkZWwiLCJ0ZXh0Il0uaW5jbHVkZXMoZi50eXBlKSkp'@;
put 'ZCs9dnx8IiI7ZWxzZSBzd2l0Y2goZi50eXBlKXtjYXNlImVzY2FwZSI6Y2FzZSJ0ZXh0IjpkKz1hLnRleHQoZi50ZXh0KTticmVhaztjYXNlImh0bWwiOmQrPWEuaHRtbChmLnRleHQpO2JyZWFrO2Nhc2UibGluayI6ZCs9YS5saW5rKGYuaHJlZixmLnRpdGxlLHRoaXMucGFyc2VJbmxpbmUo'@;
put 'Zi50b2tlbnMsYSkpO2JyZWFrO2Nhc2UiaW1hZ2UiOmQrPWEuaW1hZ2UoZi5ocmVmLGYudGl0bGUsZi50ZXh0KTticmVhaztjYXNlInN0cm9uZyI6ZCs9YS5zdHJvbmcodGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJlbSI6ZCs9YS5lbSh0aGlzLnBhcnNlSW5saW5l'@;
put 'KGYudG9rZW5zLGEpKTticmVhaztjYXNlImNvZGVzcGFuIjpkKz1hLmNvZGVzcGFuKGYudGV4dCk7YnJlYWs7Y2FzZSJiciI6ZCs9YS5icigpO2JyZWFrO2Nhc2UiZGVsIjpkKz1hLmRlbCh0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztkZWZhdWx0Ontjb25zdCBZPSdUb2tl'@;
put 'biB3aXRoICInK2YudHlwZSsnIiB0eXBlIHdhcyBub3QgZm91bmQuJztpZih0aGlzLm9wdGlvbnMuc2lsZW50KXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoWSk7dGhyb3cgbmV3IEVycm9yKFkpfX1yZXR1cm4gZH19Y2xhc3MgdUF7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fE1t'@;
put 'fXN0YXRpYyBwYXNzVGhyb3VnaEhvb2tzPW5ldyBTZXQoWyJwcmVwcm9jZXNzIiwicG9zdHByb2Nlc3MiXSk7cHJlcHJvY2VzcyhsKXtyZXR1cm4gbH1wb3N0cHJvY2VzcyhsKXtyZXR1cm4gbH19Y29uc3QgdTY9bmV3IGNsYXNzIGNKZXtkZWZhdWx0cz17YXN5bmM6ITEsYmFzZVVybDpudWxs'@;
put 'LGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0'@;
put 'aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9O29wdGlvbnM9dGhpcy5zZXRPcHRpb25zO3BhcnNlPXRoaXMuI2UoSGYubGV4LE5mLnBhcnNlKTtwYXJzZUlubGluZT10aGlzLiNlKEhmLmxleElubGluZSxO'@;
put 'Zi5wYXJzZUlubGluZSk7UGFyc2VyPU5mO3BhcnNlcj1OZi5wYXJzZTtSZW5kZXJlcj1jQTtUZXh0UmVuZGVyZXI9TlU7TGV4ZXI9SGY7bGV4ZXI9SGYubGV4O1Rva2VuaXplcj1sQTtTbHVnZ2VyPVZVO0hvb2tzPXVBO2NvbnN0cnVjdG9yKC4uLmwpe3RoaXMudXNlKC4uLmwpfXdhbGtUb2tl'@;
put 'bnMobCxhKXtsZXQgZD1bXTtmb3IoY29uc3QgaCBvZiBsKXN3aXRjaChkPWQuY29uY2F0KGEuY2FsbCh0aGlzLGgpKSxoLnR5cGUpe2Nhc2UidGFibGUiOmZvcihjb25zdCBmIG9mIGguaGVhZGVyKWQ9ZC5jb25jYXQodGhpcy53YWxrVG9rZW5zKGYudG9rZW5zLGEpKTtmb3IoY29uc3QgZiBv'@;
put 'ZiBoLnJvd3MpZm9yKGNvbnN0IHYgb2YgZilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh2LnRva2VucyxhKSk7YnJlYWs7Y2FzZSJsaXN0IjpkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLml0ZW1zLGEpKTticmVhaztkZWZhdWx0OnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmdGhp'@;
put 'cy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXS5mb3JFYWNoKGY9PntkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyho'@;
put 'W2ZdLGEpKX0pOmgudG9rZW5zJiYoZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC50b2tlbnMsYSkpKX1yZXR1cm4gZH11c2UoLi4ubCl7Y29uc3QgYT10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hpbGRUb2tlbnM6e319O3JldHVybiBsLmZvckVhY2goZD0+'@;
put 'e2NvbnN0IGg9ey4uLmR9O2lmKGguYXN5bmM9dGhpcy5kZWZhdWx0cy5hc3luY3x8aC5hc3luY3x8ITEsZC5leHRlbnNpb25zJiYoZC5leHRlbnNpb25zLmZvckVhY2goZj0+e2lmKCFmLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRlbnNpb24gbmFtZSByZXF1aXJlZCIpO2lmKGYucmVuZGVy'@;
put 'ZXIpe2NvbnN0IHY9YS5yZW5kZXJlcnNbZi5uYW1lXTthLnJlbmRlcmVyc1tmLm5hbWVdPXY/ZnVuY3Rpb24oLi4uVCl7bGV0IFk9Zi5yZW5kZXJlci5hcHBseSh0aGlzLFQpO3JldHVybiExPT09WSYmKFk9di5hcHBseSh0aGlzLFQpKSxZfTpmLnJlbmRlcmVyfWlmKGYudG9rZW5pemVyKXtp'@;
put 'ZighZi5sZXZlbHx8ImJsb2NrIiE9PWYubGV2ZWwmJiJpbmxpbmUiIT09Zi5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTthW2YubGV2ZWxdP2FbZi5sZXZlbF0udW5zaGlmdChmLnRva2VuaXplcik6YVtmLmxldmVs'@;
put 'XT1bZi50b2tlbml6ZXJdLGYuc3RhcnQmJigiYmxvY2siPT09Zi5sZXZlbD9hLnN0YXJ0QmxvY2s/YS5zdGFydEJsb2NrLnB1c2goZi5zdGFydCk6YS5zdGFydEJsb2NrPVtmLnN0YXJ0XToiaW5saW5lIj09PWYubGV2ZWwmJihhLnN0YXJ0SW5saW5lP2Euc3RhcnRJbmxpbmUucHVzaChmLnN0'@;
put 'YXJ0KTphLnN0YXJ0SW5saW5lPVtmLnN0YXJ0XSkpfWYuY2hpbGRUb2tlbnMmJihhLmNoaWxkVG9rZW5zW2YubmFtZV09Zi5jaGlsZFRva2Vucyl9KSxoLmV4dGVuc2lvbnM9YSksZC5yZW5kZXJlcil7Y29uc3QgZj10aGlzLmRlZmF1bHRzLnJlbmRlcmVyfHxuZXcgY0EodGhpcy5kZWZhdWx0'@;
put 'cyk7Zm9yKGNvbnN0IHYgaW4gZC5yZW5kZXJlcil7Y29uc3QgVD1mW3ZdO2Zbdl09KC4uLlkpPT57bGV0IHJlPWQucmVuZGVyZXJbdl0uYXBwbHkoZixZKTtyZXR1cm4hMT09PXJlJiYocmU9VC5hcHBseShmLFkpKSxyZX19aC5yZW5kZXJlcj1mfWlmKGQudG9rZW5pemVyKXtjb25zdCBmPXRo'@;
put 'aXMuZGVmYXVsdHMudG9rZW5pemVyfHxuZXcgbEEodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IHYgaW4gZC50b2tlbml6ZXIpe2NvbnN0IFQ9Zlt2XTtmW3ZdPSguLi5ZKT0+e2xldCByZT1kLnRva2VuaXplclt2XS5hcHBseShmLFkpO3JldHVybiExPT09cmUmJihyZT1ULmFwcGx5KGYsWSkp'@;
put 'LHJlfX1oLnRva2VuaXplcj1mfWlmKGQuaG9va3Mpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy5ob29rc3x8bmV3IHVBO2Zvcihjb25zdCB2IGluIGQuaG9va3Mpe2NvbnN0IFQ9Zlt2XTtmW3ZdPXVBLnBhc3NUaHJvdWdoSG9va3MuaGFzKHYpP1k9PntpZih0aGlzLmRlZmF1bHRzLmFzeW5jKXJl'@;
put 'dHVybiBQcm9taXNlLnJlc29sdmUoZC5ob29rc1t2XS5jYWxsKGYsWSkpLnRoZW4oZmU9PlQuY2FsbChmLGZlKSk7Y29uc3QgcmU9ZC5ob29rc1t2XS5jYWxsKGYsWSk7cmV0dXJuIFQuY2FsbChmLHJlKX06KC4uLlkpPT57bGV0IHJlPWQuaG9va3Nbdl0uYXBwbHkoZixZKTtyZXR1cm4hMT09'@;
put 'PXJlJiYocmU9VC5hcHBseShmLFkpKSxyZX19aC5ob29rcz1mfWlmKGQud2Fsa1Rva2Vucyl7Y29uc3QgZj10aGlzLmRlZmF1bHRzLndhbGtUb2tlbnM7aC53YWxrVG9rZW5zPWZ1bmN0aW9uKHYpe2xldCBUPVtdO3JldHVybiBULnB1c2goZC53YWxrVG9rZW5zLmNhbGwodGhpcyx2KSksZiYm'@;
put 'KFQ9VC5jb25jYXQoZi5jYWxsKHRoaXMsdikpKSxUfX10aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmh9fSksdGhpc31zZXRPcHRpb25zKGwpe3JldHVybiB0aGlzLmRlZmF1bHRzPXsuLi50aGlzLmRlZmF1bHRzLC4uLmx9LHRoaXN9I2UobCxhKXtyZXR1cm4oZCxoLGYpPT57'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIGgmJihmPWgsaD1udWxsKTtjb25zdCB2PXsuLi5ofTtoPXsuLi50aGlzLmRlZmF1bHRzLC4uLnZ9O2NvbnN0IFQ9dGhpcy4jdChoLnNpbGVudCxoLmFzeW5jLGYpO2lmKHR5cGVvZiBkPiJ1Inx8bnVsbD09PWQpcmV0dXJuIFQobmV3IEVycm9yKCJtYXJrZWQo'@;
put 'KTogaW5wdXQgcGFyYW1ldGVyIGlzIHVuZGVmaW5lZCBvciBudWxsIikpO2lmKCJzdHJpbmciIT10eXBlb2YgZClyZXR1cm4gVChuZXcgRXJyb3IoIm1hcmtlZCgpOiBpbnB1dCBwYXJhbWV0ZXIgaXMgb2YgdHlwZSAiK09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkKSsiLCBzdHJp'@;
put 'bmcgZXhwZWN0ZWQiKSk7aWYoZnVuY3Rpb24gc0plKGMsbCl7IWN8fGMuc2lsZW50fHwobCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogY2FsbGJhY2sgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0'@;
put 'aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnL3VzaW5nX3BybyNhc3luYyIpLChjLnNhbml0aXplfHxjLnNhbml0aXplcikmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNhbml0aXplIGFuZCBzYW5pdGl6ZXIgcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRl'@;
put 'ZCBzaW5jZSB2ZXJzaW9uIDAuNy4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBSZWFkIG1vcmUgaGVyZTogaHR0cHM6Ly9tYXJrZWQuanMub3JnLyMvVVNJTkdfQURWQU5DRUQubWQjb3B0aW9ucyIpLChjLmhpZ2hsaWdodHx8Imxhbmd1'@;
put 'YWdlLSIhPT1jLmxhbmdQcmVmaXgpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBoaWdobGlnaHQgYW5kIGxhbmdQcmVmaXggcGFyYW1ldGVycyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUg'@;
put 'ZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtaGlnaGxpZ2h0LiIpLGMubWFuZ2xlJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBtYW5nbGUgcGFyYW1ldGVyIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYnV0IGlzIGRlcHJlY2F0ZWQgc2lu'@;
put 'Y2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLW1hbmdsZSwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7bWFuZ2xlOiBmYWxz'@;
put 'ZX1gLiIpLGMuYmFzZVVybCYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogYmFzZVVybCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRw'@;
put 'czovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQtYmFzZS11cmwuIiksYy5zbWFydHlwYW50cyYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogc21hcnR5cGFudHMgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3'@;
put 'aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLXNtYXJ0eXBhbnRzLiIpLGMueGh0bWwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHhodG1sIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZl'@;
put 'cnNpb24gNS4wLjAsIHNob3VsZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC14aHRtbC4iKSwoYy5oZWFkZXJJZHN8fGMuaGVhZGVyUHJlZml4KSYmY29uc29sZS53'@;
put 'YXJuKCJtYXJrZWQoKTogaGVhZGVySWRzIGFuZCBoZWFkZXJQcmVmaXggcGFyYW1ldGVycyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIFRvIGNsZWFyIHRoaXMgd2Fy'@;
put 'bmluZywgaW5zdGFsbCAgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWdmbS1oZWFkaW5nLWlkLCBvciBkaXNhYmxlIGJ5IHNldHRpbmcgYHtoZWFkZXJJZHM6IGZhbHNlfWAuIikpfShoLGYpLGguaG9va3MmJihoLmhvb2tzLm9wdGlvbnM9aCksZil7Y29uc3QgWT1oLmhp'@;
put 'Z2hsaWdodDtsZXQgcmU7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSkscmU9bChkLGgpfWNhdGNoKGtlKXtyZXR1cm4gVChrZSl9Y29uc3QgZmU9a2U9PntsZXQgV2U7aWYoIWtlKXRyeXtoLndhbGtUb2tlbnMmJnRoaXMud2Fsa1Rva2VucyhyZSxoLndhbGtUb2tlbnMp'@;
put 'LFdlPWEocmUsaCksaC5ob29rcyYmKFdlPWguaG9va3MucG9zdHByb2Nlc3MoV2UpKX1jYXRjaChKZSl7a2U9SmV9cmV0dXJuIGguaGlnaGxpZ2h0PVksa2U/VChrZSk6ZihudWxsLFdlKX07aWYoIVl8fFkubGVuZ3RoPDN8fChkZWxldGUgaC5oaWdobGlnaHQsIXJlLmxlbmd0aCkpcmV0dXJu'@;
put 'IGZlKCk7bGV0IF9lPTA7cmV0dXJuIHRoaXMud2Fsa1Rva2VucyhyZSxrZT0+eyJjb2RlIj09PWtlLnR5cGUmJihfZSsrLHNldFRpbWVvdXQoKCk9PntZKGtlLnRleHQsa2UubGFuZywoV2UsSmUpPT57aWYoV2UpcmV0dXJuIGZlKFdlKTtudWxsIT1KZSYmSmUhPT1rZS50ZXh0JiYoa2UudGV4'@;
put 'dD1KZSxrZS5lc2NhcGVkPSEwKSxfZS0tLDA9PT1fZSYmZmUoKX0pfSwwKSl9KSx2b2lkKDA9PT1fZSYmZmUoKSl9aWYoaC5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGguaG9va3M/aC5ob29rcy5wcmVwcm9jZXNzKGQpOmQpLnRoZW4oWT0+bChZLGgpKS50aGVuKFk9Pmgud2Fsa1Rv'@;
put 'a2Vucz9Qcm9taXNlLmFsbCh0aGlzLndhbGtUb2tlbnMoWSxoLndhbGtUb2tlbnMpKS50aGVuKCgpPT5ZKTpZKS50aGVuKFk9PmEoWSxoKSkudGhlbihZPT5oLmhvb2tzP2guaG9va3MucG9zdHByb2Nlc3MoWSk6WSkuY2F0Y2goVCk7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2Vz'@;
put 'cyhkKSk7Y29uc3QgWT1sKGQsaCk7aC53YWxrVG9rZW5zJiZ0aGlzLndhbGtUb2tlbnMoWSxoLndhbGtUb2tlbnMpO2xldCByZT1hKFksaCk7cmV0dXJuIGguaG9va3MmJihyZT1oLmhvb2tzLnBvc3Rwcm9jZXNzKHJlKSkscmV9Y2F0Y2goWSl7cmV0dXJuIFQoWSl9fX0jdChsLGEsZCl7cmV0'@;
put 'dXJuIGg9PntpZihoLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsbCl7Y29uc3QgZj0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitkMChoLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4iO3JldHVybiBh'@;
put 'P1Byb21pc2UucmVzb2x2ZShmKTpkP3ZvaWQgZChudWxsLGYpOmZ9aWYoYSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoaCk7aWYoIWQpdGhyb3cgaDtkKGgpfX19KE1tKTtmdW5jdGlvbiBMYShjLGwsYSl7cmV0dXJuIHU2LnBhcnNlKGMsbCxhKX1MYS5vcHRpb25zPUxhLnNldE9wdGlvbnM9ZnVu'@;
put 'Y3Rpb24oYyl7cmV0dXJuIHU2LnNldE9wdGlvbnMoYyksSWNlKExhLmRlZmF1bHRzPXU2LmRlZmF1bHRzKSxMYX0sTGEuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24gSFUoKXtyZXR1cm57YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklk'@;
put 'czohMCxoZWFkZXJQcmVmaXg6IiIsaGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6'@;
put 'ZXI6bnVsbCx3YWxrVG9rZW5zOm51bGwseGh0bWw6ITF9fSxMYS5kZWZhdWx0cz1NbSxMYS51c2U9ZnVuY3Rpb24oLi4uYyl7cmV0dXJuIHU2LnVzZSguLi5jKSxJY2UoTGEuZGVmYXVsdHM9dTYuZGVmYXVsdHMpLExhfSxMYS53YWxrVG9rZW5zPWZ1bmN0aW9uKGMsbCl7cmV0dXJuIHU2Lndh'@;
put 'bGtUb2tlbnMoYyxsKX0sTGEucGFyc2VJbmxpbmU9dTYucGFyc2VJbmxpbmUsTGEuUGFyc2VyPU5mLExhLnBhcnNlcj1OZi5wYXJzZSxMYS5SZW5kZXJlcj1jQSxMYS5UZXh0UmVuZGVyZXI9TlUsTGEuTGV4ZXI9SGYsTGEubGV4ZXI9SGYubGV4LExhLlRva2VuaXplcj1sQSxMYS5TbHVnZ2Vy'@;
put 'PVZVLExhLkhvb2tzPXVBLExhLnBhcnNlPUxhO2NvbnN0IGRKZT1bIm1hcmtkb3duQ2FyZCJdO2Z1bmN0aW9uIGhKZShjLGwpezEmYyYmSnQoMCwiY2xyLXNwaW5uZXIiLDgpfWxldCBmSmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmFncmVl'@;
put 'Q2hlY2tlZD0hMSx0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuZXVsYV9tYXJrZG93bj0nXG5MaWNlbmNlIEFncmVlbWVudCBmb3IgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGFlXG49PT09PT09PT09PT09PT09PT09PVxuXG5Db3B5cmlnaHQgKGMp'@;
put 'IEJvd2UgSU8gTHRkXG5cbkRhdGEgQ29udHJvbGxlciBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBieSA0R0wgQXBwcywgYSBicmFuZCBvd25lZCBieSBCb3dlIElPIEx0ZCwgYSBVSyBMaW1pdGVkIENvbXBhbnkgaGVhZHF1YXJ0ZWQgaW4gMjkgT2xkZmllbGQgUmQsIEN1bWJyaWEsIHJlZ2lz'@;
put 'dGVyZWQgYXQgQ29tcGFuaWVzIEhvdXNlIHdpdGggY29tcGFueSBudW1iZXIgMDg3NzcxNzEsIFZBVCBudW1iZXI6IDIwMzkxNDI0MFxuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVh'@;
put 'dGllcywgYW5kIGR1YWwtbGljZW5zZWQgXHUyMDEzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFuaW5nIGludGVuZGVkIGZvciBvciByZXN1bHRpbmcgaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgbW9uZXRhcnkgY29tcGVuc2F0'@;
put 'aW9uLCBvciBub3QuXG5cbklmIHlvdXIgdXNlIGlzIHN0cmljdGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmluZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgdGhlIHN1aXRhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5kIHVzZWZ1bG5lc3Mg'@;
put 'b2YgdGhpcyBzb2Z0d2FyZSBvdXRzaWRlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGluY2x1ZGVkIGluIHRoZSAibGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZCIgZmlsZSBhdmFpbGFibGUgaGVy'@;
put 'ZTogIGh0dHBzOi8vZ2l0LmRhdGFjb250cm9sbGVyLmlvL2RjL2RjL3NyYy9icmFuY2gvbWFpbi9saWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kXG5cbllvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0'@;
put 'aGUgdGVybXMgaW5jbHVkZWQgaW4gYW4gYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudC5cblxuSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlIGNvbnNpZGVyZWQg'@;
put 'Y29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuXG5VTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIDRHTCBBUFBTIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ'@;
put 'TkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBTSEFMTCA0R0wgQVBQUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFN'@;
put 'QUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuXG5cbid9bmdPbkluaXQoKXtjb25zdCBhPUxhLnNldE9wdGlvbnMoe30pO3RoaXMuZXVsYV9tYXJrZG93bj1hLnBhcnNlKHRoaXMuZXVsYV9tYXJrZG93bil9'@;
put 'bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMubWFya2Rvd25DYXJkJiZ0aGlzLm1hcmtkb3duQ2FyZC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzY3JvbGwiKSl9KX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5hZ3JlZUNoZWNrZWQm'@;
put 'Jih0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVnaXN0ZXJ1c2VyIix7U0FTQ29udHJvbFRhYmxlOlt7QUNDRVBURUQ6InllcyJ9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblswXSYmIlNV'@;
put 'Q0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZWxvYWQoKX0pLmNhdGNoKGQ9PmQpLmZpbmFsbHkoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5hZ3JlZUJveExvY2tlZD0hMSx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmFncmVlQ2hlY2tlZD0hMX0sMWUzKX0pKX1vbkNh'@;
put 'cmRCbG9ja1Njcm9sbChhKXtpZighdGhpcy5hZ3JlZUNsaWNrZWQpe2xldCBkPWEudGFyZ2V0O2QmJih0aGlzLmFncmVlQm94TG9ja2VkPSEoZC5zY3JvbGxUb3ArZC5vZmZzZXRIZWlnaHQ+PWQuc2Nyb2xsSGVpZ2h0LTIwKSl9fXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp'@;
put 'e3JldHVybiBuZXcoZHx8Yykoc3QoeWEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXRlcm1zIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmVW8oZEplLDUpLDImZCl7bGV0IGY7TWkoZj1DaSgpKSYmKGgubWFya2Rvd25D'@;
put 'YXJkPWYuZmlyc3QpfX0sZGVjbHM6MTMsdmFyczo2LGNvbnN0czpbWyJtYXJrZG93bkNhcmQiLCIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJjYXJkLWJsb2NrIiwzLCJzY3JvbGwiLCJpbm5lckhUTUwiXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJd'@;
put 'LFsxLCJhY2NlcHQtY2hlY2tib3giXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCIsNCwibmdJZiJdLFsiY2xySW5saW5lIiwic21hbGwiXV0sdGVt'@;
put 'cGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9SG4oKTtnZSgwLCJkaXYiLDEpKDEsImRpdiIsMiksemUoMiwiIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50ICIpLGdlKDMsInAiKSx6ZSg0LCIgV2VsY29tZSB0byBEYXRhIENvbnRyb2xsZXIgZm9yIFNBUyEgUGxlYXNlIHJl'@;
put 'dmlldyBhbmQgYWNjZXB0IGFncmVlbWVudCBiZWxvdyBpbiBvcmRlciB0byBwcm9jZWVkLiAiKSxiZSgpKCksZ2UoNSwiZGl2IiwzLDApLEh0KCJzY3JvbGwiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLm9uQ2FyZEJsb2NrU2Nyb2xsKFQpKX0pLGJlKCksZ2UoNywiZGl2Iiw0KSg4'@;
put 'LCJjbHItY2hlY2tib3gtd3JhcHBlciIsNSkoOSwiaW5wdXQiLDYpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC5hZ3JlZUNoZWNrZWQsVCl8fChoLmFncmVlQ2hlY2tlZD1UKSx4dChUKX0pLEh0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0'@;
put 'KGYpLHh0KGgudGVybXNBZ3JlZUNoYW5nZSgpKX0pLGJlKCksZ2UoMTAsImxhYmVsIiksemUoMTEsIkkgaGF2ZSByZWFkIGFuZCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgYWJvdmUuIiksYmUoKSgpLGJ0KDEyLGhKZSwxLDAsImNsci1zcGlubmVyIiw3KSxiZSgpKCl9MiZkJiYod2UoNSksUGUo'@;
put 'ImlubmVySFRNTCIsaC5ldWxhX21hcmtkb3duLEUzKSx3ZSgzKSxicigiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLHdlKCksV3IoIm5nTW9kZWwiLGguYWdyZWVDaGVja2VkKSxQZSgiZGlzYWJsZWQiLGguYWdyZWVCb3hMb2NrZWQpLHdlKDMpLFBlKCJuZ0lmIixoLmFncmVlQm94TG9j'@;
put 'a2VkJiZoLmFncmVlQ2xpY2tlZCkpfSxkZXBlbmRlbmNpZXM6W3FpLGYxLGNhLG9hLFhzLHYxLF8xLG5oXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDoxMDAlO2JhY2tncm91bmQ6I2Y1ZjZmZn0uY2xyLWNoZWNrYm94LXdyYXBwZXIuZGlzYWJsZWRbX25nY29udGVudC0lQ09N'@;
put 'UCVde29wYWNpdHk6LjV9LmNhcmRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWFyZ2luLXRvcDowfS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7'@;
put 'b3ZlcmZsb3c6YXV0bztiYWNrZ3JvdW5kLWNvbG9yOiNmNGY0ZjR9LmFjY2VwdC1jaGVja2JveFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDE1cHh9Il19KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gcEplKGMsbCl7MSZjJiYoZ2UoMCwicCIsMjkpLHplKDEsIiBMaWNlbmNlIGtl'@;
put 'eSBpcyBpbnZhbGlkLiBXZSBjYW4ndCBwcm92aWRlIHlvdSBtb3JlIGRldGFpbHMgYXQgdGhlIG1vbWVudCAiKSxiZSgpKX1mdW5jdGlvbiBtSmUoYyxsKXtpZigxJmMmJkp0KDAsInAiLDMwKSwyJmMpe2NvbnN0IGE9WmUoMyk7UGUoImlubmVySFRNTCIsYS5saWNlbnNlRXJyb3JzW2Eua2V5'@;
put 'RXJyb3JdLEUzKX19ZnVuY3Rpb24gZ0plKGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIpKDEsInN0cm9uZyIpLHplKDIsIkRldGFpbHM6IiksYmUoKSx6ZSgzKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoMykseHIoIiAiLGEuZXJyb3JEZXRhaWxzLCIiKX19ZnVuY3Rpb24gX0plKGMsbCl7'@;
put 'aWYoMSZjJiYocmkoMCksYnQoMSxwSmUsMiwwLCJwIiwyNykoMixtSmUsMSwxLCJwIiwyOCkoMyxnSmUsNCwxLCJwIiw0KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIsIWEua2V5RXJyb3IpLHdlKCksUGUoIm5nSWYiLGEua2V5RXJyb3IpLHdlKCksUGUoIm5nSWYi'@;
put 'LGEuZXJyb3JEZXRhaWxzKX19ZnVuY3Rpb24gdkplKGMsbCl7MSZjJiYocmkoMCksZ2UoMSwicCIsMjkpLHplKDIsIiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgcmVhY2hlZCB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2VuY2UuIFBsZWFzZSBjb250YWN0ICIpLEp0'@;
put 'KDMsImNvbnRhY3QtbGluayIsMzEpLHplKDQsIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlcyBmb3IgdGhpcyBwcm9kdWN0LiAiKSxiZSgpLGlpKCkpfWZ1bmN0aW9uIHlKZShjLGwpezEmYyYmKHJpKDApLGdlKDEsInAiLDI5KSx6ZSgyLCIgVXBkYXRl'@;
put 'IHRoZSBsaWNlbnNlIGtleSBieSB1cGxvYWRpbmcgdGhlIGxpY2VuY2UgZmlsZSBvciBieSBwYXN0aW5nIGEgbGljZW5zZSBrZXkgYW5kIGFjdGl2YXRpb24ga2V5IGluIHRoZSBpbnB1dHMgYmVsb3cuICIpLGJlKCksaWkoKSl9ZnVuY3Rpb24gYkplKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3Bh'@;
put 'biIpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1aZSgyKTticigibWlzc2tleSIsaC5taXNzbWF0Y2hlZEtleSYmaC5taXNzbWF0Y2hlZEtleT09PWEpLHdlKCksdDAoIiAiLGEsIiIsZD09PShudWxsPT1oLnN5c3NpdGUudmFsdWU/bnVsbDpoLnN5'@;
put 'c3NpdGUudmFsdWUubGVuZ3RoKS0xPyIiOiIsIiwiICIpfX1mdW5jdGlvbiB3SmUoYyxsKXtpZigxJmMmJihnZSgwLCJwIiwzMikoMSwic3Ryb25nIiksemUoMiwiQWxsb3dlZCB1c2VyczoiKSxiZSgpLHplKDMpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgzKSx4cigiICIsYS5saWNl'@;
put 'bnNlS2V5RGF0YS51c2Vyc19hbGxvd2VkLCIgIil9fWZ1bmN0aW9uIE1KZShjLGwpezEmYyYmSnQoMCwiY2xyLXNwaW5uZXIiLDMzKX1mdW5jdGlvbiBDSmUoYyxsKXsxJmMmJihnZSgwLCJkaXYiKSx6ZSgxLCIgRHJvcCAvIEJyb3dzZSBsaWNlbmNlIGZpbGUgIiksYmUoKSl9ZnVuY3Rpb24g'@;
put 'U0plKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiksemUoMSwiIFNlbGVjdGVkIGZpbGU6ICIpLGdlKDIsInN0cm9uZyIpLHplKDMpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKDMpLHByKGEubGljZW5jZWZpbGUuZmlsZW5hbWUpfX1mdW5jdGlvbiB4SmUoYyxsKXtpZigxJmMmJihn'@;
put 'ZSgwLCJkaXYiKSgxLCJzdHJvbmciKSx6ZSgyKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgyKSxwcihhLmxpY2VuY2VGaWxlRXJyb3IpfX1mdW5jdGlvbiBrSmUoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLENKZSwyLDAsImRpdiIsNCkoMixTSmUsNCwxLCJkaXYiLDQpKDMseEpl'@;
put 'LDMsMSwiZGl2Iiw0KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIsIiI9PT1hLmxpY2VuY2VmaWxlLmZpbGVuYW1lKSx3ZSgpLFBlKCJuZ0lmIiwiIiE9PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLHdlKCksUGUoIm5nSWYiLGEubGljZW5jZUZpbGVFcnJvcil9fWZ1'@;
put 'bmN0aW9uIEVKZShjLGwpezEmYyYmKGdlKDAsImJ1dHRvbiIsMzQpLHplKDEsIiBDb250aW51ZSB3aXRoIGZyZWUgdGllciAiKSxiZSgpKX1mdW5jdGlvbiBUSmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDUpKDEsImRpdiIsNiksemUoMiwiTGljZW5jaW5nIiksYmUo'@;
put 'KSxnZSgzLCJkaXYiLDcpKDQsImRpdiIsOCksYnQoNSxfSmUsNCwzLCJuZy1jb250YWluZXIiLDkpKDYsdkplLDUsMCwibmctY29udGFpbmVyIiw5KSg3LHlKZSwzLDAsIm5nLWNvbnRhaW5lciIsOSksZ2UoOCwicCIpKDksInN0cm9uZyIpLHplKDEwLCJTWVNTSVRFOiIpLGJlKCksYnQoMTEs'@;
put 'YkplLDIsNCwic3BhbiIsMTApLGdlKDEyLCJhIiwxMSksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WGkoMTQpLGY9WGkoMTYpLHY9WmUoKTtyZXR1cm4geHQodi5jb3B5U3lzc2l0ZShoLGYsdi5zeXNzaXRlLnZhbHVlfHxbXSkpfSksSnQoMTMsImNsci1pY29uIiwxMiww'@;
put 'KSxnZSgxNSwic3BhbiIsMTMsMSksemUoMTcsIkNvcHkgdG8gY2xpcGJvYXJkIiksYmUoKSgpKCksYnQoMTgsd0plLDQsMSwicCIsMTQpLGdlKDE5LCJjbHItdGFicyIpKDIwLCJjbHItdGFiIikoMjEsImJ1dHRvbiIsMTUpLHplKDIyLCJVcGxvYWQgbGljZW5jZSIpLGJlKCksZ2UoMjMsImNs'@;
put 'ci10YWItY29udGVudCIpKDI0LCJpbnB1dCIsMTYsMiksSHQoImNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKCkub25GaWxlQ2FwdHVyZShoKSl9KSxiZSgpLGdlKDI2LCJkaXYiLDE3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFhpKDI1KS5j'@;
put 'bGljaygpKX0pKCJmaWxlRHJvcCIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKCkub25GaWxlQ2FwdHVyZShoLCEwKSl9KSxidCgyNyxNSmUsMSwwLCJjbHItc3Bpbm5lciIsMTgpKDI4LGtKZSw0LDMsIm5nLWNvbnRhaW5lciIsNCksYmUoKSgpKCksZ2UoMjksImNsci10YWIiKSgz'@;
put 'MCwiYnV0dG9uIiwxNSksemUoMzEsIlBhc3RlIGxpY2VuY2UiKSxiZSgpLGdlKDMyLCJjbHItdGFiLWNvbnRlbnQiKSgzMywiZm9ybSIsMTkpKDM0LCJwIiksemUoMzUsIkxpY2VuY2Uga2V5OiIpLGJlKCksZ2UoMzYsImRpdiIsMjApKDM3LCJ0ZXh0YXJlYSIsMjEpLEdyKCJuZ01vZGVsQ2hh'@;
put 'bmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYubGljZW5jZUtleVZhbHVlLGgpfHwoZi5saWNlbmNlS2V5VmFsdWU9aCkseHQoaCl9KSxIdCgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS50cmltS2V5cygpKX0pLGJlKCko'@;
put 'KSgpLGdlKDM4LCJmb3JtIiwyMikoMzksInAiKSx6ZSg0MCwiQWN0aXZhdGlvbiBrZXk6IiksYmUoKSxnZSg0MSwiZGl2IiwyMCkoNDIsInRleHRhcmVhIiwyMyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gcXIoZi5hY3RpdmF0aW9u'@;
put 'S2V5VmFsdWUsaCl8fChmLmFjdGl2YXRpb25LZXlWYWx1ZT1oKSx4dChoKX0pLEh0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLnRyaW1LZXlzKCkpfSksYmUoKSgpKCkoKSgpKCkoKSxnZSg0MywiZGl2IiwyNCkoNDQsImJ1dHRvbiIsMjUpLEh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5hcHBseUtleXMoKSl9KSx6ZSg0NSwiIEFwcGx5IGxpY2VuY2Uga2V5cyAiKSxiZSgpLGJ0KDQ2LEVKZSwyLDAsImJ1dHRvbiIsMjYpLGJlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpO3dlKDMpLFBlKCJuZ1N3aXRjaCIsYS5h'@;
put 'Y3Rpb24pLHdlKDIpLFBlKCJuZ1N3aXRjaENhc2UiLCJrZXkiKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCJsaW1pdCIpLHdlKCksUGUoIm5nU3dpdGNoQ2FzZSIsInVwZGF0ZSIpLHdlKDQpLFBlKCJuZ0Zvck9mIixhLnN5c3NpdGUudmFsdWUpLHdlKDcpLFBlKCJuZ0lmIixhLmxpY2Vuc2VL'@;
put 'ZXlEYXRhJiZhLnVzZXJDb3VudExpbWl0YXRpb24pLHdlKDkpLFBlKCJuZ0lmIixhLmxpY2VuY2VGaWxlTG9hZGluZyksd2UoKSxQZSgibmdJZiIsIWEubGljZW5jZUZpbGVMb2FkaW5nKSx3ZSg5KSxXcigibmdNb2RlbCIsYS5saWNlbmNlS2V5VmFsdWUpLHdlKDUpLFdyKCJuZ01vZGVsIixh'@;
put 'LmFjdGl2YXRpb25LZXlWYWx1ZSksd2UoMiksUGUoImNsckxvYWRpbmciLGEuYXBwbHlpbmdLZXlzKSgiZGlzYWJsZWQiLGEuZGlzYWJsZUFwcGx5QnV0dG9uKSx3ZSgyKSxQZSgibmdJZiIsYS5pc0FwcEZyZWVUaWVyLnZhbHVlKX19ZnVuY3Rpb24gREplKGMsbCl7MSZjJiZKdCgwLCJhcHAt'@;
put 'dGVybXMiKX12YXIgQmNlPWZ1bmN0aW9uKGMpe3JldHVybiBjLmtleT0ia2V5IixjLnJlZ2lzdGVyPSJyZWdpc3RlciIsYy5saW1pdD0ibGltaXQiLGMudXBkYXRlPSJ1cGRhdGUiLGN9KEJjZXx8e30pO2NvbnN0IEFKZT1be3BhdGg6IjphY3Rpb24iLGNvbXBvbmVudDooKCk9PntjbGFzcyBj'@;
put 'e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMucm91dGU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5hcHBTZXJ2aWNlPWYsdGhpcy5hY3Rpb249bnVsbCx0aGlzLmxpY2Vuc2VFcnJvcnM9e21pc3Npbmc6J0xpY2VuY2Uga2V5IGlzIG1pc3NpbmcgLSBw'@;
put 'bGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtleXMgYmVsb3cuJyxleHBpcmVkOidMaWNlbmNlIGtleSBpcyBleHBp'@;
put 'cmVkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93LicsaW52YWxpZDonTGljZW5jZSBrZXkg'@;
put 'aXMgaW52YWxpZCAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nLG1pc3NtYXRjaDonWW91'@;
put 'ciBTWVNTSVRFIChiZWxvdykgaXMgbm90IGZvdW5kIGluIHRoZSBsaWNlbmNlIGtleSAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQg'@;
put 'ZW50ZXIgdmFsaWQga2V5cyBiZWxvdy4nfSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT0iIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT0iIix0aGlzLmFwcGx5aW5nS2V5cz0hMSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5jdXJyZW50TGljZW5jZUtleT10aGlzLmxp'@;
put 'Y2VuY2VTZXJ2aWNlLmxpY2VuY2VLZXksdGhpcy5jdXJyZW50QWN0aXZhdGlvbktleT10aGlzLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb25LZXksdGhpcy5pc0FwcEZyZWVUaWVyPXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBGcmVlVGllcix0aGlzLnVzZXJDb3VudExpbWl0YXRpb249dGhp'@;
put 'cy5saWNlbmNlU2VydmljZS51c2VyQ291bnRMaW1pdGF0aW9uLHRoaXMubGljZW5zZUtleURhdGE9bnVsbCx0aGlzLmlucHV0VHlwZT0iZmlsZSIsdGhpcy5saWNlbmNlRmlsZUxvYWRpbmc9ITEsdGhpcy5saWNlbmNlZmlsZT17ZmlsZW5hbWU6IiJ9fW5nT25Jbml0KCl7dGhpcy5saWNlbmNl'@;
put 'S2V5VmFsdWU9dGhpcy5jdXJyZW50TGljZW5jZUtleXx8IiIsdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleXx8IiIsdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoYT0+e3RoaXMua2V5RXJyb3I9YS5lcnJvcix0aGlzLm1pc3NtYXRjaGVk'@;
put 'S2V5PWEubWlzc21hdGNoSWQsYS5kZXRhaWxzJiYodGhpcy5lcnJvckRldGFpbHM9YXRvYihhLmRldGFpbHMpKX0pLHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShhPT57bGV0IGQ9YS5hY3Rpb247ZCYmT2JqZWN0LnZhbHVlcyhCY2UpLmluY2x1ZGVzKGQpJiYodGhpcy5hY3Rpb249ZCl9'@;
put 'KSx0aGlzLmxpY2Vuc2VLZXlEYXRhPXRoaXMubGljZW5jZVNlcnZpY2UuZ2V0TGljZW5zZUtleURhdGEoKX10cmltS2V5cygpe3RoaXMubGljZW5jZUtleVZhbHVlPXRoaXMubGljZW5jZUtleVZhbHVlLnRyaW0oKSx0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmFjdGl2YXRpb25LZXlW'@;
put 'YWx1ZS50cmltKCl9Y29weVN5c3NpdGUoYSxkLGgpe2NvbnN0IGY9aC5qb2luKCJcbiIpO25hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGYpLnRoZW4oKCk9PnthLnNldEF0dHJpYnV0ZSgic2hhcGUiLCJjaGVjayIpLGEuc2V0QXR0cmlidXRlKCJjbGFzcyIsImlzLXN1Y2Nlc3MiKSxk'@;
put 'LmlubmVyVGV4dD0iQ29waWVkISIsc2V0VGltZW91dCgoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNvcHkiKSxhLnJlbW92ZUF0dHJpYnV0ZSgiY2xhc3MiKSxkLmlubmVyVGV4dD0iQ29weSB0byBjbGlwYm9hcmQifSwxZTMpfSl9YXBwbHlLZXlzKCl7dGhpcy5hcHBseWluZ0tleXM9'@;
put 'ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZ2lzdGVya2V5Iix7a2V5dXBsb2FkOlt7QUNUSVZBVElPTl9LRVk6dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUsTElDRU5DRV9LRVk6dGhpcy5saWNlbmNlS2V5VmFsdWV9XX0pLnRoZW4oZD0+e2QucmV0dXJuJiZkLnJldHVyblsw'@;
put 'XSYmIlNVQ0NFU1MiPT09ZC5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZXBsYWNlKGxvY2F0aW9uLmhyZWYuc3BsaXQoIiMiKVswXSl9KS5maW5hbGx5KCgpPT57dGhpcy5hcHBseWluZ0tleXM9ITF9KX1vbkZpbGVDYXB0dXJlKGEsZD0hMSl7bGV0IGg9ZD9hWzBdOmEudGFyZ2V0LmZpbGVz'@;
put 'WzBdO2lmKHRoaXMubGljZW5jZWZpbGUuZmlsZW5hbWU9aC5uYW1lLCFoKXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMDtjb25zdCBmPW5ldyBGaWxlUmVhZGVyO2Yub25sb2FkPXY9PntpZih0aGlzLmxpY2VuY2VGaWxlRXJyb3I9IkVycm9yIHJlYWRpbmcgZmlsZS4iLCF2fHwh'@;
put 'di50YXJnZXR8fDIhPXYudGFyZ2V0LnJlYWR5U3RhdGV8fHYudGFyZ2V0LmVycm9yfHwhdi50YXJnZXQucmVzdWx0KXJldHVybjt0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VGaWxlRXJyb3I9dm9pZCAwO2NvbnN0IFQ9di50YXJnZXQucmVzdWx0LnRvU3RyaW5nKCku'@;
put 'c3BsaXQoIlxuIik7dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9VFsxXSx0aGlzLmxpY2VuY2VLZXlWYWx1ZT1UWzBdfSxmLnJlYWRBc1RleHQoaCl9c3dpdGNoVHlwZShhKXt0aGlzLmlucHV0VHlwZT1hfWdldCBkaXNhYmxlQXBwbHlCdXR0b24oKXtyZXR1cm4gdGhpcy5saWNlbmNlS2V5VmFs'@;
put 'dWUubGVuZ3RoPDF8fHRoaXMuYWN0aXZhdGlvbktleVZhbHVlLmxlbmd0aDwxfHx0aGlzLmxpY2VuY2VLZXlWYWx1ZT09PXRoaXMuY3VycmVudExpY2VuY2VLZXkmJnRoaXMuYWN0aXZhdGlvbktleVZhbHVlPT09dGhpcy5jdXJyZW50QWN0aXZhdGlvbktleX1zdGF0aWMjZT10aGlzLlx1MDI3'@;
put 'NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KE1jKSxzdChoMSksc3QoeWEpLHN0KFdrKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1saWNlbnNpbmciXV0sZGVjbHM6Mix2YXJzOjIsY29uc3RzOltbImNvcHlJY29uIiwi'@;
put 'Il0sWyJjb3B5VG9vbHRpcCIsIiJdLFsibGljZW5jZUZpbGUiLCIiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC1ibG9jayIsMywibmdTd2l0Y2giXSxbMSwiY2FyZC10ZXh0Il0sWzQsIm5nU3dpdGNo'@;
put 'Q2FzZSJdLFszLCJtaXNza2V5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLXRvcC1yaWdodCIsMywiY2xpY2siXSxbInNoYXBlIiwiY29weSIsInNpemUiLCIxNSIsMSwiY3Vyc29yLXBvaW50ZXIiXSxbMSwidG9vbHRpcC1jb250ZW50'@;
put 'Il0sWyJjbGFzcyIsIm0tMCIsNCwibmdJZiJdLFsiY2xyVGFiTGluayIsIiJdLFsidHlwZSIsImZpbGUiLCJoaWRkZW4iLCIiLDMsImNoYW5nZSJdLFsiYXBwRmlsZURyb3AiLCIiLDEsImRyb3AtYXJlYSIsMywiY2xpY2siLCJmaWxlRHJvcCJdLFsiY2xhc3MiLCJzcGlubmVyLXNtIiw0LCJu'@;
put 'Z0lmIl0sWzEsImNsci1mb3JtIiwibGljZW5zZS1rZXktZm9ybSJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbIm5hbWUiLCJsaWNlbnNlLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBsaWNlbmNlIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxDaGFu'@;
put 'Z2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjbHItZm9ybSIsImFjdGl2YXRpb24ta2V5LWZvcm0iXSxbIm5hbWUiLCJhY3RpdmF0aW9uLWtleS1hcmVhIiwicGxhY2Vob2xkZXIiLCJQYXN0ZSBhY3RpdmF0aW9uIGtleSBoZXJlIiwxLCJjbHItdGV4dGFyZWEiLDMsIm5nTW9kZWxD'@;
put 'aGFuZ2UiLCJtb3VzZWxlYXZlIiwibmdNb2RlbCJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJhcHBseS1rZXlzIiwzLCJjbGljayIsImNsckxvYWRpbmciLCJkaXNhYmxlZCJdLFsicm91dGVyTGlu'@;
put 'ayIsIi8iLCJjbGFzcyIsImJ0biBidG4tc20gYnRuLWxpbmsiLDQsIm5nSWYiXSxbImNsYXNzIiwia2V5LWVycm9yIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsMywiaW5uZXJIVE1MIiw0LCJuZ0lmIl0sWzEsImtleS1lcnJvciJdLFsxLCJrZXktZXJyb3IiLDMsImlubmVySFRN'@;
put 'TCJdLFsiY2xhc3NlcyIsImNvbG9yLWdyZWVuIl0sWzEsIm0tMCJdLFsxLCJzcGlubmVyLXNtIl0sWyJyb3V0ZXJMaW5rIiwiLyIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmJ0KDAsVEplLDQ3LDEzLCJkaXYiLDMpKDEsREplLDEs'@;
put 'MCwiYXBwLXRlcm1zIiw0KSwyJmQmJihQZSgibmdJZiIsInJlZ2lzdGVyIiE9PWguYWN0aW9uKSx3ZSgpLFBlKCJuZ0lmIiwicmVnaXN0ZXIiPT09aC5hY3Rpb24pKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxVZCxjZix0ZyxUbCxjYSxRNSxvYSx2ZixaYSxyMCxvMiwkNCxLNCxJZyxxNCxHNCxB'@;
put 'ZyxuaCxrMCxmSmUsblRdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OmNhbGMoMTAwJSAtIDk2cHgpO3BhZGRpbmc6MjBweH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5rZXktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNnB4fS5t'@;
put 'aXNza2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTc0YzNjfS5saWNlbnNlLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MH0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0g'@;
put 'ICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0ubGljZW5zZS1rZXktZm9ybVtfbmdjb250'@;
put 'ZW50LSVDT01QJV0gICAuY2xyLWNvbnRyb2wtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRleHRhcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmFjdGl2YXRpb24ta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICB0ZXh0YXJlYVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtoZWlnaHQ6MTcwcHg7bWF4LWhlaWdodDoxNzBweDttaW4taGVpZ2h0OjE3MHB4O3Jlc2l6ZTpub25lfS5hcHBseS1rZXlzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDBweH0uZHJvcC1hcmVhW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzoxNXB4O2JvcmRlcjoycHggZGFzaGVkICNiMmIyYjI7Ym9yZGVyLXJhZGl1czo0cHg7Y3Vyc29yOnBvaW50ZXI7bWFyZ2luOjEwcHggMH1jbHItdGFic1tf'@;
put 'bmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Il19KX1yZXR1cm4gY30pKCksY2FuQWN0aXZhdGU6W0ZVXSxjYW5EZWFjdGl2YXRlOltGVV19XTtsZXQgTEplPSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5c'@;
put 'dTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOltXYy5mb3JDaGlsZChBSmUpLFdjXX0pfXJldHVybiBjfSkoKSxJSmU9KCgpPT57Y2xhc3Mg'@;
put 'Y3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLENjLHMwLExKZSxXOV19KX1yZXR1cm4gY30pKCk7Y29u'@;
put 'c3QgUkplPSgpPT4oe3N0YW5kYWxvbmU6ITB9KSxZY2U9KGMsbCxhKT0+KHthZGRlZFJvdzpjLGRlbGV0ZWRSb3c6bCx1cGRhdGVkUm93OmF9KSx6Y2U9Yz0+KHsiY2ggdG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfSk7ZnVuY3Rpb24gT0plKGMsbCl7aWYoMSZjJiYo'@;
put 'Z2UoMCwidGQiLDE5KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQsZD1aZSgpO1BlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFtc1thXSksd2UoKSx4cigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBQSmUoYyxsKXtpZigxJmMmJihnZSgw'@;
put 'LCJ0ZCIsNCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0LGQ9WmUoKTt3ZSgpLHhyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9uIEZKZShjLGwpe2lmKDEmYyYmKGdlKDAsInRyIikoMSwidGQiLDQpLHplKDIpLGJlKCksYnQoMyxPSmUsMiwyLCJ0ZCIs'@;
put 'MTcpKDQsUEplLDIsMSwidGQiLDE4KSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoMikscHIoYSksd2UoKSxQZSgibmdJZiIsYS5pbmNsdWRlcygiVEFCTEVfSUQiKSksd2UoKSxQZSgibmdJZiIsIWEuaW5jbHVkZXMoIlRBQkxFX0lEIikpfX1mdW5jdGlvbiBISmUoYyxsKXtp'@;
put 'ZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiw0KSx6ZSgyKSxiZSgpLGdlKDMsInRkIiw0KSx6ZSg0KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKDMpO3dlKDIpLHByKGEpLHdlKDIpLHByKGQuc3VibWl0RGV0YWlsc1thXSl9fWZ1bmN0aW9uIE5KZShjLGwpe2lmKDEm'@;
put 'YyYmKGdlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLHplKDYsIk5hbWUiKSxiZSgpLGdlKDcsInRoIiw0KSx6ZSg4LCJWYWx1ZSIpLGJlKCkoKSgpLGdlKDksInRib2R5IiksYnQoMTAsSEplLDUsMiwi'@;
put 'dHIiLDUpLGJlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgxMCksUGUoIm5nRm9yT2YiLGEuc3VibWl0QXJyKX19ZnVuY3Rpb24gVkplKGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiKSgxLCJ0ZCIsNCksemUoMiksYmUoKSxnZSgzLCJ0ZCIsNCksemUoNCksYmUoKSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9bC4kaW1wbGljaXQsZD1aZSgyKTt3ZSgyKSxwcihhKSx3ZSgyKSxwcihkLmpzUGFyYW1zW2FdKX19ZnVuY3Rpb24gakplKGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksemUoMywiU3VibWl0dGVkIFRhYmxlIERldGFpbHMi'@;
put 'KSxiZSgpLGJ0KDQsTkplLDExLDEsImNsci10YWItY29udGVudCIsMjEpLGJlKCksZ2UoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLHplKDcsIkJhc2UgVGFibGUgRGV0YWlscyIpLGJlKCksZ2UoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2IiwyMikoMTAsInRhYmxlIiwzKSgxMSwi'@;
put 'dGhlYWQiKSgxMiwidHIiKSgxMywidGgiLDQpLHplKDE0LCJOYW1lIiksYmUoKSxnZSgxNSwidGgiLDQpLHplKDE2LCJWYWx1ZSIpLGJlKCkoKSgpLGdlKDE3LCJ0Ym9keSIpLGJ0KDE4LFZKZSw1LDIsInRyIiw1KSxiZSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoNCksUGUo'@;
put 'ImNscklmQWN0aXZlIiwhMCksd2UoMTQpLFBlKCJuZ0Zvck9mIixhLmtleXNBcnJheSl9fWZ1bmN0aW9uIEJKZShjLGwpezEmYyYmKGdlKDAsInAiLDc0KSx6ZSgxLCIgVGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSxiZSgpKX1mdW5jdGlvbiBZSmUoYyxsKXtpZigxJmMmJihyaSgw'@;
put 'KSxnZSgxLCJkaXYiLDc1KSgyLCJzcGFuIiksemUoMywiVGFibGUgSWQ6IiksYmUoKSxnZSg0LCJzdHJvbmciLDc2KSx6ZSg1KSxiZSgpKCksZ2UoNiwiZGl2IikoNywic3BhbiIpLHplKDgsIlN1Ym1pdHRlcjoiKSxiZSgpLGdlKDksInNwYW4iLDc3KSx6ZSgxMCksYmUoKSgpLGdlKDExLCJk'@;
put 'aXYiKSgxMiwic3BhbiIpLHplKDEzLCJTdWJtaXR0ZWQgb246IiksYmUoKSxnZSgxNCwic3BhbiIsNzcpLHplKDE1KSxiZSgpKCksZ2UoMTYsImRpdiIpKDE3LCJzcGFuIiksemUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IiksYmUoKSxnZSgxOSwic3BhbiIsNzcpLHplKDIwKSxiZSgpKCksaWko'@;
put 'KSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLFBlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQpKSx3ZSgpLHhyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxF'@;
put 'X0lELCIgIiksd2UoNSkseHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksd2UoNSkseHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSx3ZSg1'@;
put 'KSx4cigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiB6SmUoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiw3OCksSnQoMSwiY2xyLWljb24iLDc5KSx6ZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGlu'@;
put 'c2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGJlKCkpfWZ1bmN0aW9uIFVKZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLGJ0KDMsQkplLDIsMCwicCIsNDUpKDQsWUplLDIxLDUsIm5nLWNv'@;
put 'bnRhaW5lciIsOCksYmUoKSxnZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSg0KTtyZXR1cm4geHQoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251'@;
put 'bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksemUoMTAsIiBWaWV3IGJhc2UgdGFibGUgIiksYmUoKSxnZSgxMSwiYnV0dG9uIiw1NyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoNCk7cmV0dXJuIHh0KGguZ2V0VGFibGUoaC50YWJsZUlkKSl9KSx6ZSgxMiwiIFZp'@;
put 'ZXcgc3RhZ2VkIGRhdGEgIiksYmUoKSxnZSgxMywiYnV0dG9uIiw1OCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoNCk7cmV0dXJuIHh0KGguZ29CYWNrKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSx6ZSgxNCwiIEVkaXQgYmFz'@;
put 'ZSB0YWJsZSAiKSxiZSgpKCkoKSgpLGdlKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSg0KS5hcHByb3ZlVGFibGUoKSl9KSx6ZSgxNywiIEFDQ0VQVCAiKSxiZSgpLGdlKDE4LCJidXR0b24iLDYxKSxIdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDQpLnJlamVjdE9wZW49ITApfSksemUoMTksIiBSRUpFQ1QgIiksYmUoKSxnZSgyMCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MyksR3IoIm5nTW9kZWxDaGFu'@;
put 'Z2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoNCk7cmV0dXJuIHFyKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCkseHQoaCl9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0p'@;
put 'LGJlKCksZ2UoMjMsImxhYmVsIiw2NCksemUoMjQpLGJlKCkoKSgpKCksZ2UoMjUsImRpdiIsNjUpLGJ0KDI2LHpKZSwzLDAsInNwYW4iLDY2KSxnZSgyNywiZGl2IiwzMSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksemUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksZ2UoMzEsInNwYW4iLDY5'@;
put 'KSx6ZSgzMiksYmUoKSgpLGdlKDMzLCJzcGFuIiw3MCksemUoMzQsIiBBZGRlZCBSb3dzICIpLGdlKDM1LCJzcGFuIiw3MSksemUoMzYpLGJlKCkoKSxnZSgzNywic3BhbiIsNzIpLHplKDM4LCIgRGVsZXRlZCBSb3dzICIpLGdlKDM5LCJzcGFuIiw3MyksemUoNDApLGJlKCkoKSgpKCkoKSgp'@;
put 'KCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoNCk7d2UoMyksUGUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksd2UoKSxQZSgibmdJZiIsYS50YWJsZURldGFpbHMpLHdlKDEyKSxQZSgiY2xyTG9hZGluZyIsYS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09'@;
put 'PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksd2UoMiksUGUoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJOTyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLHdlKDQpLFdy'@;
put 'KCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksd2UoMikscHIoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksd2UoMiksUGUoIm5nSWYiLGEuZGlmZnNMaW1pdCksd2UoNikscHIoYS5sZW5zLnVwZGF0ZWQpLHdlKDQpLHByKGEubGVucy5uZXcpLHdlKDQp'@;
put 'LHByKGEubGVucy5kZWxldGVkKX19ZnVuY3Rpb24gWkplKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IikoMSwiaDMiKSx6ZSgyLCJMb2FkaW5nIHRhYmxlIiksYmUoKSgpKX1mdW5jdGlvbiBXSmUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDgwKSgxLCJzcGFuIiw4MSksemUoMiwiIExvYWRpbmcu'@;
put 'Li4gIiksYmUoKSxidCgzLFpKZSwzLDAsImRpdiIsOCksYmUoKSksMiZjKXtjb25zdCBhPVplKDQpO3dlKDMpLFBlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpfX1mdW5jdGlvbiBHSmUoYyxsKXsxJmMmJihnZSgwLCJwIiw3NCksemUoMSwiIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHNob3cg'@;
put 'IiksYmUoKSl9ZnVuY3Rpb24gJEplKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGgiLDQpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLHByKGEpfX1mdW5jdGlvbiBxSmUoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiw4NiksemUoMSksYmUoKSksMiZjKXtjb25zdCBh'@;
put 'PVplKCkuaW5kZXgsZD1aZSgyKS5pbmRleCxoPVplKDQpO3dlKCkseHIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19ZnVuY3Rpb24gS0plKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGQiLDg0KSx6ZSgxKSxidCgyLHFKZSwyLDEsInNwYW4iLDg1KSxiZSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9WmUoMikuaW5kZXgsZj1aZSg0KTtQZSgibmdDbGFzcyIsYWYoMyx6Y2UsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSx3ZSgpLHhyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIg'@;
put 'Iiksd2UoKSxQZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBYSmUoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLEtKZSwzLDUsInRkIiw4MyksaWkoKSksMiZjKXtjb25zdCBhPVplKCkuaW5kZXgsZD1aZSg0KTt3ZSgpLFBl'@;
put 'KCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBKSmUoYyxsKXtpZigxJmMmJihnZSgwLCJ0ZCIsNCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoMikuaW5kZXgsaD1aZSg0KTt3ZSgpLHhyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9'@;
put 'fWZ1bmN0aW9uIFFKZShjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsSkplLDIsMSwidGQiLDQ3KSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKS5pbmRleCxkPVplKDQpO3dlKCksUGUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIGVRZShjLGwpe2lmKDEmYyYmKGdlKDAsInRyIiw4'@;
put 'MiksYnQoMSxYSmUsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsUUplLDIsMSwibmctY29udGFpbmVyIiw4KSxiZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPVplKDQpO1BlKCJuZ0NsYXNzIix2eSgzLFljZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBk'@;
put 'YXRlZCI9PWQuY2hBcnJbYV0pKSx3ZSgpLFBlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSx3ZSgpLFBlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNoQXJyW2FdKX19ZnVuY3Rpb24gdFFlKGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwyOSkoMSwiZGl2IiwzMCko'@;
put 'MiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMykuZ29Ub0FwcHJvdmFsc0xpc3QoKSl9KSxKdCg1LCJjbHItaWNvbiIsMzQpLHplKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIiksYmUoKSgpLGdl'@;
put 'KDcsImRpdiIsMzUpKDgsImgzIiwzNiksemUoOSksYmUoKSgpLGdlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMykuZ2V0RGV0YWlscygpKX0pLEp0KDEyLCJjbHItaWNvbiIsMzkpLGJlKCkoKSgpLGdlKDEzLCJwIiw0'@;
put 'MCksemUoMTQpLGJlKCkoKSxnZSgxNSwiZGl2Iiw0MSksYnQoMTYsVUplLDQxLDExLCJkaXYiLDQyKSxiZSgpLGJ0KDE3LFdKZSw0LDEsImRpdiIsNDMpLGdlKDE4LCJkaXYiLDQ0KSxidCgxOSxHSmUsMiwwLCJwIiw0NSksZ2UoMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDQ2'@;
put 'KSxidCgyMywkSmUsMiwxLCJ0aCIsNDcpLGJlKCkoKSxnZSgyNCwidGJvZHkiKSxidCgyNSxlUWUsMyw3LCJ0ciIsNDgpLGJlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO3dlKDkpLHhyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9OTSwiICIpLHdl'@;
put 'KDUpLHhyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksd2UoMiksUGUoIm5nSWYiLGEubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLHdlKDIpLFBlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLHdl'@;
put 'KDQpLFBlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksd2UoMiksUGUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIG5RZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMjcpLGJ0KDEsdFFlLDI2LDcsImRpdiIsMjgpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0lm'@;
put 'IixhLmxvYWRlZCl9fWZ1bmN0aW9uIHJRZShjLGwpezEmYyYmKGdlKDAsInNwYW4iLDgxKSx6ZSgxLCIgTG9hZGluZy4uLiAiKSxiZSgpKX1mdW5jdGlvbiBpUWUoYyxsKXsxJmMmJihnZSgwLCJkaXYiKSgxLCJoMyIpLHplKDIsIkxvYWRpbmcgcHJldmlldyIpLGJlKCkoKSl9ZnVuY3Rpb24g'@;
put 'b1FlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw4NyksYnQoMSxyUWUsMiwwLCJzcGFuIiw4OCkoMixpUWUsMywwLCJkaXYiLDgpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0lmIiwhYS5sb2FkZWQpLHdlKCksUGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIHNR'@;
put 'ZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMjMpLGJ0KDEsblFlLDIsMSwiZGl2IiwyNCksZ2UoMiwiZGl2IiwyNSksYnQoMyxvUWUsMywyLCJkaXYiLDI2KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEubG9hZGVkKSx3ZSgyKSxQZSgibmdJZiIsIWEubG9h'@;
put 'ZGVkKX19ZnVuY3Rpb24gYVFlKGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIsNzgpLEp0KDEsImNsci1pY29uIiw3OSksemUoMiwiIE9ubHkgdGhlIGZpcnN0IDEwMCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxiZSgpKX1mdW5jdGlvbiBsUWUoYyxsKXsxJmMm'@;
put 'Jkp0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIGNRZShjLGwpezEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiksemUoMiwiTG9hZGluZyB0YWJsZSIpLGJlKCkoKSl9ZnVuY3Rpb24gdVFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwxMDQpKDEsInNwYW4iLDgxKSx6ZSgyLCIgTG9hZGluZy4uLiAi'@;
put 'KSxiZSgpLGJ0KDMsY1FlLDMsMCwiZGl2Iiw4KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoNCk7d2UoMyksUGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSl9fWZ1bmN0aW9uIGRRZShjLGwpe2lmKDEmYyYmKGdlKDAsInRoIiw0KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7'@;
put 'd2UoKSxwcihhKX19ZnVuY3Rpb24gaFFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIsODYpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpLmluZGV4LGQ9WmUoMikuaW5kZXgsaD1aZSg0KTt3ZSgpLHhyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwi'@;
put 'Iil9fWZ1bmN0aW9uIGZRZShjLGwpe2lmKDEmYyYmKGdlKDAsInRkIiw4NCksemUoMSksYnQoMixoUWUsMiwxLCJzcGFuIiw4NSksYmUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPVplKDIpLmluZGV4LGY9WmUoNCk7UGUoIm5nQ2xhc3MiLGFmKDMsemNlLDE9PWYu'@;
put 'YXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksd2UoKSx4cigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLHdlKCksUGUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gcFFlKGMsbCl7aWYo'@;
put 'MSZjJiYocmkoMCksYnQoMSxmUWUsMyw1LCJ0ZCIsODMpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgpLmluZGV4LGQ9WmUoNCk7d2UoKSxQZSgibmdGb3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gbVFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwidGQiLDQpLHplKDEpLGJlKCkpLDImYyl7Y29u'@;
put 'c3QgYT1sLiRpbXBsaWNpdCxkPVplKDIpLmluZGV4LGg9WmUoNCk7d2UoKSx4cigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5jdGlvbiBnUWUoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLG1RZSwyLDEsInRkIiw0NyksaWkoKSksMiZjKXtjb25zdCBhPVplKCkuaW5kZXgs'@;
put 'ZD1aZSg0KTt3ZSgpLFBlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBfUWUoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIsODIpLGJ0KDEscFFlLDIsMSwibmctY29udGFpbmVyIiw4KSgyLGdRZSwyLDEsIm5nLWNvbnRhaW5lciIsOCksYmUoKSksMiZjKXtjb25zdCBhPWwuaW5k'@;
put 'ZXgsZD1aZSg0KTtQZSgibmdDbGFzcyIsdnkoMyxZY2UsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQiPT1kLmNoQXJyW2FdKSksd2UoKSxQZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksd2UoKSxQZSgibmdJZiIsInVwZGF0ZWQiIT09'@;
put 'ZC5jaEFyclthXSl9fWZ1bmN0aW9uIHZRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRpdiIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLmdvVG9T'@;
put 'dWJtaXRMaXN0KCkpfSksSnQoNSwiY2RzLWljb24iLDk2KSx6ZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLGJlKCkoKSxnZSg3LCJkaXYiLDk3KSg4LCJoMyIsOTgpLHplKDkpLGJlKCkoKSxnZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIFN0KGEpLHh0KFplKDMpLnRhYmxlRmxhZz0hMCl9KSxKdCgxMiwiY2xyLWljb24iLDM5KSxiZSgpKCkoKSxnZSgxMywicCIsOTkpLHplKDE0KSxiZSgpKCksZ2UoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3NSkoMTgsInNwYW4iKSx6ZSgxOSwiVGFibGUgSWQ6Iiks'@;
put 'YmUoKSxnZSgyMCwic3Ryb25nIiw3NikoMjEsInNwYW4iKSx6ZSgyMiksYmUoKSgpKCksZ2UoMjMsImRpdiIpKDI0LCJzcGFuIiksemUoMjUsIlN1Ym1pdHRlZCBvbjoiKSxiZSgpLGdlKDI2LCJzcGFuIiw3NyksemUoMjcpLGJlKCkoKSxnZSgyOCwiZGl2IikoMjksInNwYW4iKSx6ZSgzMCwi'@;
put 'U3VibWl0IE1lc3NhZ2U6IiksYmUoKSxnZSgzMSwic3BhbiIpLHplKDMyKSxiZSgpKCkoKSxnZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDMp'@;
put 'O3JldHVybiB4dChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLHplKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGJlKCksZ2UoMzksImJ1dHRvbiIsNTcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDMpO3JldHVybiB4dChoLmdldFRhYmxlKGguc3ViT2JqLnRh'@;
put 'YmxlSWQpKX0pLHplKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxiZSgpLGdlKDQxLCJidXR0b24iLDU4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgzKTtyZXR1cm4geHQoaC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksemUoNDIsIiBFZGl0IGJhc2UgdGFibGUg'@;
put 'IiksYmUoKSgpKCkoKSxnZSg0MywiZGl2Iiw2NSksYnQoNDQsYVFlLDMsMCwic3BhbiIsNjYpLGdlKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2NykoNDcsInNwYW4iLDY4KSx6ZSg0OCwiIENoYW5nZWQgUm93cyAiKSxnZSg0OSwic3BhbiIsNjkpLHplKDUwKSxiZSgpKCksZ2UoNTEsInNwYW4i'@;
put 'LDcwKSx6ZSg1MiwiIEFkZGVkIFJvd3MgIiksZ2UoNTMsInNwYW4iLDcxKSx6ZSg1NCksYmUoKSgpLGdlKDU1LCJzcGFuIiw3MiksemUoNTYsIiBEZWxldGVkIFJvd3MgIiksZ2UoNTcsInNwYW4iLDczKSx6ZSg1OCksYmUoKSgpKCkoKSgpLGdlKDU5LCJkaXYiLDUzKSg2MCwiY2xyLXRvZ2ds'@;
put 'ZS1jb250YWluZXIiLDEwMCkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDMpO3JldHVybiBxcihmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLHh0'@;
put 'KGgpfSksSHQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxiZSgpLGdlKDYzLCJsYWJlbCIpLHplKDY0KSxiZSgpKCkoKSgpKCkoKSxnZSg2NSwiZGl2IiwxMDEpLGJ0KDY2LGxRZSwxLDAsImRpdiIsNDIpLGJlKCksYnQo'@;
put 'NjcsdVFlLDQsMSwiZGl2IiwxMDIpLGdlKDY4LCJkaXYiLDEwMykoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxidCg3MixkUWUsMiwxLCJ0aCIsNDcpLGJlKCkoKSxnZSg3MywidGJvZHkiKSxidCg3NCxfUWUsMyw3LCJ0ciIsNDgpLGJlKCkoKSgpKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPVplKDMpO3dlKDkpLHhyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksd2UoNSkseHIoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLHdlKDYpLFBlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksd2UoMikseHIoIiAiLGEuc3ViT2JqLnRhYmxlSWQsIiIp'@;
put 'LHdlKDUpLHhyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSx3ZSg1KSx4cigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksd2UoMTIpLFBlKCJuZ0lmIixhLmRpZmZzTGltaXQpLHdlKDYpLHByKGEubGVucy51cGRhdGVkKSx3ZSg0KSxwcihhLmxlbnMubmV3KSx3ZSg0KSxwcihh'@;
put 'LmxlbnMuZGVsZXRlZCksd2UoNCksV3IoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSx3ZSgyKSxwcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9ybWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSx3ZSgyKSxQZSgibmdJZiIsYS5sb2FkZWQpLHdlKCksUGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSks'@;
put 'd2UoNSksUGUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSx3ZSgyKSxQZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24geVFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw5MSksYnQoMSx2UWUsNzUsMTYsImRpdiIsOTIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJu'@;
put 'Z0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIGJRZShjLGwpezEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiksemUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxiZSgpKCkpfWZ1bmN0aW9uIHdRZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMTA1KSgxLCJkaXYiLDEwNikoMiwic3BhbiIs'@;
put 'ODEpLHplKDMsIiBMb2FkaW5nLi4uICIpLGJlKCksYnQoNCxiUWUsMywwLCJkaXYiLDgpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDQpLFBlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiBNUWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLHlRZSwyLDEsImRpdiIs'@;
put 'ODkpKDIsd1FlLDUsMSwiZGl2Iiw5MCksYmUoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQZSgibmdJZiIsYS5sb2FkZWQpLHdlKCksUGUoIm5nSWYiLCFhLmxvYWRlZCl9fWxldCBVY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1h'@;
put 'LHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlz'@;
put 'LnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIsdGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGluZz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29u'@;
put 'ZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2VzQXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRpZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRzTGltaXQ9MTAwfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10'@;
put 'aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJs'@;
put 'ZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7'@;
put 'YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1vbkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0'@;
put 'aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7YS5yZWplY3RMb2FkaW5nPSEwLGEuc3VibWl0UmVhc29uPWEuc3VibWl0UmVhc29uLnJlcGxhY2UoL1xuL2csIi4gIik7bGV0IGQ9e1NUUF9BQ1RJT046IlJFSkVD'@;
put 'VF9UQUJMRSIsVEFCTEU6YS50YWJsZUlkLFNUUF9SRUFTT046YS5zdWJtaXRSZWFzb259O3lpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnJlamVjdGluZyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL3JlamVjdGlvbiIpLnRoZW4oaD0+e2Eucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmll'@;
put 'dy9oaXN0b3J5Iil9KS5jYXRjaChoPT57YS5hY2NlcHRMb2FkaW5nPSExLGEucmVqZWN0TG9hZGluZz0hMX0pfSkoKX1hcHByb3ZlVGFibGUoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2EuYWNjZXB0TG9hZGluZz0hMDtsZXQgZD17QUNUSU9OOiJBUFBST1ZFX1RBQkxFIixU'@;
put 'QUJMRTphLnRhYmxlSWQsRElGRlRJTUU6YS5wYXJhbXM/LkRJRkZUSU1FLExJQkRTOmEucGFyYW1zPy5MSUJEU307eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuYXBwcm92ZVRhYmxlKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRhIikudGhlbihoPT57YS5yb3V0ZS5uYXZp'@;
put 'Z2F0ZUJ5VXJsKCIvcmV2aWV3L2hpc3RvcnkiKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KX0pKCl9Z29Ub1N1Ym1pdExpc3QoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvc3VibWl0dGVkIil9Y2FsbENoYW5nZXNJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJu'@;
put 'IFcoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1oLmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgdiBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMu'@;
put 'aGFzT3duUHJvcGVydHkodikmJmYucHVzaCh2KTtkLmtleXNBcnJheT1mfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFsbHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJl'@;
put 'c3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVsZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlz'@;
put 'LnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyksdGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBMdD0wO0x0PGQubGVuZ3RoO0x0Kyspe2xldCBvbj1PYmplY3Qua2V5cyhk'@;
put 'W0x0XSk7Zm9yKGxldCBzbj0wO3NuPG9uLmxlbmd0aDtzbisrKWRbTHRdW29uW3NuXV0hPT1mW0x0XVtvbltzbl1dJiZ0aGlzLmNoYW5nZXNBcnIucHVzaCh7aW5kOkx0LGZpZWxkOm9uW3NuXSxwcm9wOmRbTHRdW29uW3NuXV0sb3JpZ2luYWw6ZltMdF1bb25bc25dXX0pfXRoaXMubGVucz17'@;
put 'bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBhcmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCByZT1bXSxmZT1kLmNvbmNhdChhLGgpO2ZvcihsZXQgTHQ9MDtMdDx0aGlzLnJlc3BvbnNlLmNvbHMu'@;
put 'bGVuZ3RoO0x0KyspcmUucHVzaCh0aGlzLnJlc3BvbnNlLmNvbHNbTHRdLk5BTUUpO2xldCBfZT10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy5uZXcsa2U9dGhpcy5sZW5zLnVwZGF0ZWQ+dGhpcy5yZWNvcmRzTGltaXQ/dGhpcy5y'@;
put 'ZWNvcmRzTGltaXQ6dGhpcy5sZW5zLnVwZGF0ZWQ7dGhpcy5kaWZmc0xpbWl0PXRoaXMubGVucy5uZXc+dGhpcy5yZWNvcmRzTGltaXR8fHRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlzLmxlbnMuZGVsZXRlZD50aGlzLnJlY29yZHNMaW1pdCx0aGlzLmFkZENvdW50'@;
put 'PV9lO2xldCBKZT1bXSx0dD1bXTtmb3IobGV0IEx0PTA7THQ8cmUubGVuZ3RoO0x0KyspdHQucHVzaCh7ZGF0YTpyZVtMdF0scmVhZE9ubHk6ITB9KTt0aGlzLmRpZmZUYWJsZS5kYXRhPWZlO2ZvcihsZXQgTHQ9MDtMdDxmZS5sZW5ndGg7THQrKyl7bGV0IHNuPU9iamVjdC5rZXlzKGZlW0x0'@;
put 'XSk7dGhpcy5yb3dLZXlzLnB1c2goc24pfWxldCB5dD1bXSx3dD1bXTtmb3IobGV0IEx0PTA7THQ8dGhpcy5kaWZmVGFibGUuZGF0YS5sZW5ndGg7THQrKyl7aWYoTHQ8a2UmJjAhPT1rZSl7eXQucHVzaChbXSksd3QucHVzaChbXSksSmUucHVzaCgidXBkYXRlZCIpO2xldCBvbj1PYmplY3Qu'@;
put 'a2V5cyh0aGlzLmRpZmZUYWJsZS5kYXRhW0x0XSk7Zm9yKGxldCBzbj0wO3NuPG9uLmxlbmd0aDtzbisrKXtsZXQgTW49b25bc25dO2ZbTHRdW01uXSE9PWRbTHRdW01uXT8oeXRbTHRdLnB1c2goITApLHd0W0x0XS5wdXNoKGZbTHRdW01uXSkpOih5dFtMdF0ucHVzaCghMSksd3RbTHRdLnB1'@;
put 'c2gobnVsbCkpfXRoaXMuYXJyQ2hhbmdlZD15dCx0aGlzLmFyck9mQ2hhbmdlcz13dH1MdD49a2UmJkx0PGtlK19lJiZKZS5wdXNoKCJhZGRlZCIpLEx0Pl9lK2tlLTEmJkplLnB1c2goImRlbGV0ZWQiKX10aGlzLmNoQXJyPUplLHRoaXMucm93SGVhZGVyPXRoaXMucm93S2V5c1swXSx0aGlz'@;
put 'LmRpZmZUYWJsZS5kYXRhPWZlfW5nQWZ0ZXJWaWV3SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aWYoYS5fZGV0YWlsc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBoPVcoZnVuY3Rpb24qKGYpe2Euc3Vi'@;
put 'T2JqPWYudmlld0RhdGEsYS50YWJsZUlkPWYudmlld0RhdGEudGFibGVJZCxhLnN1Ym1pdHRlZD1mLnZpZXdEYXRhLnN1YixhLnN1Ym1pdERldGFpbHM9Zi5kYXRhLGEuc3VibWl0QXJyPVtdO2ZvcihsZXQgVCBpbiBhLnN1Ym1pdERldGFpbHMpInN1YiIhPT1UJiZhLnN1Ym1pdEFyci5wdXNo'@;
put 'KFQpO2xldCB2PXtBQ1RJT046IlNIT1dfRElGRlMiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRToobmV3IERhdGUpLnRvVVRDU3RyaW5nKCl9O2Euc2FzU3RvcmVTZXJ2aWNlLnNob3dEaWZmcyh2LCJTQVNDb250cm9sVGFibGUiLCJhdWRpdG9ycy9wb3N0ZGF0YSIpLnRoZW4oVD0+e2EucGFy'@;
put 'YW1zPVQucGFyYW1zWzBdLGEucmVzcG9uc2U9VCxhLmNhbGNEaWZmKCl9KS5jYXRjaChUPT5UKS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITB9KSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1l'@;
put 'bnRzKX19KCkpLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZD4idSIpcmV0dXJuO2EudGFibGVJZD1hLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDtsZXQgZD17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRl'@;
put 'KS50b1VUQ1N0cmluZygpfTthLnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnMoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnBhcmFtcz1oLnBhcmFtc1swXSxhLnJlc3BvbnNlPWgsYS5jYWxjRGlmZigpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9h'@;
put 'ZGluZz0hMX0pLmZpbmFsbHkoKCk9PnthLmxvYWRpbmdUYWJsZT0hMCxhLnNldEZvY3VzKCl9KSxhLmNhbGxDaGFuZ2VzSW5mbyhhLnRhYmxlSWQpfSkoKX1uZ09uRGVzdHJveSgpe3RoaXMuX2RldGFpbHNTdWImJnRoaXMuX2RldGFpbHNTdWIudW5zdWJzY3JpYmUoKX1zZXRGb2N1cygpe3Nl'@;
put 'dFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFjY2VwdEJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGRoKSxzdChHbCksc3QoTWMpLHN0KHpzKSl9'@;
put 'O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRldGFpbHMiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQyLHZhcnM6MTIsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxP'@;
put 'cGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxb'@;
put 'NCwibmdJZiJdLFsxLCJmb3JtLWJsb2NrIl0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsiaWQiLCJmb3JtRmllbGRzXzgiLCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwi'@;
put 'XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lm'@;
put 'Il0sWyJjbGFzcyIsImxlZnQgbGluay1pdCIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0lmIl0sWzEsImxlZnQiLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJUYWJMaW5rIiwiIl0sWzQsImNscklmQWN0aXZlIl0sWzEsIm92ZXJmbG93LWF1'@;
put 'dG8iXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVy'@;
put 'IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJtdC0wIiw0LCJuZ0lmIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJw'@;
put 'LTAiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEJhY2siXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJq'@;
put 'dXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9vbHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFy'@;
put 'ZCIsInNpemUiLCIyOCJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtMjR2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVt'@;
put 'cy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250IiwibXQtMCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXNpemUtMTgiLDQsIm5nSWYiXSxbMSwiZC1mbGV4Il0sWyJjbGFzcyIsImxlZnQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJkLWZsZXgiLDMsIm5nQ2xh'@;
put 'c3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYXJkLXRleHQiXSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUiXSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQt'@;
put 'ZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0wIl0sWzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRu'@;
put 'LXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVz'@;
put 'dGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRu'@;
put 'LXN1Y2Nlc3MiLCJtci01aSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbImlkIiwicmVqZWN0QnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4iLCJidG4tZGFuZ2VyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwi'@;
put 'Y2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJmb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4'@;
put 'LWNvbHVtbiJdLFsiY2xhc3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJjbHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIiwiYmFkZ2Ut'@;
put 'd2FybmluZyJdLFsxLCJsYWJlbCIsImxhYmVsLXN1Y2Nlc3MiXSxbMSwiYmFkZ2UiLCJiYWRnZS1zdWNjZXNzIl0sWzEsImxhYmVsIiwibGFiZWwtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC1zaXplLTE4Il0sWzEsIm10LTE1Il0s'@;
put 'WzEsImxpbmstaXQiLDMsInJvdXRlckxpbmsiXSxbMSwibXQtMTAiXSxbMSwicm93cy1ub3RpY2UiXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1vcmFuZ2UiXSxbMSwiaC0yNHZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRl'@;
put 'bnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwiZC1mbGV4IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29u'@;
put 'dGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4'@;
put 'IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwi'@;
put 'Y2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsImNsci1jb2wtbWQtNCJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIiwidGV4'@;
put 'dC1jZW50ZXIiXSxbMSwibS0wIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtLTAiLCJtbC0yMC1pIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC0yNXZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5'@;
put 'LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiXSxbMSwiaC0yNXZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwi'@;
put 'bG9hZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiY2xyLW1vZGFsIiwwKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5kZXRhaWxzT3Blbix2KXx8KGguZGV0YWlsc09wZW49diksdn0pLGdlKDEsImgzIiwxKSx6ZSgyLCJB'@;
put 'cHByb3ZhbCBEZXRhaWxzIiksYmUoKSxnZSgzLCJkaXYiLDIpKDQsInRhYmxlIiwzKSg1LCJ0aGVhZCIpKDYsInRyIikoNywidGgiLDQpLHplKDgsIk5hbWUiKSxiZSgpLGdlKDksInRoIiw0KSx6ZSgxMCwiVmFsdWUiKSxiZSgpKCkoKSxnZSgxMSwidGJvZHkiKSxidCgxMixGSmUsNSwzLCJ0'@;
put 'ciIsNSksYmUoKSgpKCksZ2UoMTMsImRpdiIsNikoMTQsImJ1dHRvbiIsNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRldGFpbHNPcGVuPSExfSksemUoMTUsIiBPayAiKSxiZSgpKCkoKSxnZSgxNiwiY2xyLW1vZGFsIiwwKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5j'@;
put 'dGlvbih2KXtyZXR1cm4gcXIoaC50YWJsZUZsYWcsdil8fChoLnRhYmxlRmxhZz12KSx2fSksZ2UoMTcsImgzIiwxKSx6ZSgxOCwiQWxsIERldGFpbHMiKSxiZSgpLGdlKDE5LCJkaXYiLDIpLGJ0KDIwLGpKZSwxOSwyLCJjbHItdGFicyIsOCksYmUoKSxnZSgyMSwiZGl2Iiw2KSgyMiwiYnV0'@;
put 'dG9uIiw3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudGFibGVGbGFnPSExfSksemUoMjMsIiBPayAiKSxiZSgpKCkoKSxnZSgyNCwiY2xyLW1vZGFsIiwwKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5yZWplY3RPcGVuLHYpfHwoaC5y'@;
put 'ZWplY3RPcGVuPXYpLHZ9KSxnZSgyNSwiaDMiLDEpLHplKDI2LCJSZWFzb24gTWVzc2FnZSIpLGJlKCksZ2UoMjcsImRpdiIsMikoMjgsImZvcm0iKSgyOSwic2VjdGlvbiIsOSkoMzAsImRpdiIsMTApKDMxLCJsYWJlbCIsMTEpLHplKDMyLCJSZWFzb24gZm9yIHJlamVjdGluZz8iKSxiZSgp'@;
put 'LGdlKDMzLCJ0ZXh0YXJlYSIsMTIpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5zdWJtaXRSZWFzb24sdil8fChoLnN1Ym1pdFJlYXNvbj12KSx2fSksYmUoKSgpKCkoKSgpLGdlKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSxIdCgiY2xpY2siLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIGgucmVqZWN0T3Blbj0hMX0pLHplKDM2LCIgQ2FuY2VsICIpLGJlKCksZ2UoMzcsImJ1dHRvbiIsMTQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWplY3RpbmcoKX0pLHplKDM4LCIgT0sgIiksYmUoKSgpKCksZ2UoMzksImRpdiIsMTUpLGJ0KDQwLHNR'@;
put 'ZSw0LDIsImRpdiIsMTYpKDQxLE1RZSwzLDIsImRpdiIsOCksYmUoKSksMiZkJiYoV3IoImNsck1vZGFsT3BlbiIsaC5kZXRhaWxzT3Blbiksd2UoMTIpLFBlKCJuZ0Zvck9mIixoLmtleXNBcnJheSksd2UoNCksV3IoImNsck1vZGFsT3BlbiIsaC50YWJsZUZsYWcpLHdlKDQpLFBlKCJuZ0lm'@;
put 'IixoLnRhYmxlRmxhZyksd2UoNCksV3IoImNsck1vZGFsT3BlbiIsaC5yZWplY3RPcGVuKSx3ZSg5KSxXcigibmdNb2RlbCIsaC5zdWJtaXRSZWFzb24pLFBlKCJuZ01vZGVsT3B0aW9ucyIsRGEoMTEsUkplKSkoImlubmVySFRNTCIsaC5zdWJtaXRSZWFzb24sRTMpLHdlKDQpLFBlKCJjbHJM'@;
put 'b2FkaW5nIixoLnJlamVjdExvYWRpbmcpLHdlKDMpLFBlKCJuZ0lmIiwhaC5zdWJtaXR0ZWQpLHdlKCksUGUoIm5nSWYiLGguc3VibWl0dGVkKSl9LGRlcGVuZGVuY2llczpbVWMsTHMscWksdGcsVGwsZjEsY2EsUTUsb2EsdmYsazAsWmEsS3MsQnUsWXUscjAsQTcsbzIsWHMsdjEsTzcsXzEs'@;
put 'JDQsSzQsSWcscTQsRzQsQWddLHN0eWxlczpbJy5sb2FkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1vZGFsTGFyZ2VbX25nY29udGVu'@;
put 'dC0lQ09NUCVde3dpZHRoOjUwcmVtIWltcG9ydGFudH0uYWRkZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzkyZDA5YTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoOSw3NywxMTcsLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5kZWxldGVkUm93W19uZ2NvbnRlbnQtJUNPTVAlXXti'@;
put 'YWNrZ3JvdW5kOiNlNmIzYjM7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDcwLDcxLDcwLC4yKTtib3JkZXItcmFkaXVzOjVweH0udXBkYXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmFmZGE4O2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDExNyw5LC4yKTtib3JkZXItcmFk'@;
put 'aXVzOjVweH0uY2hbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzAwMDAwMDFhO2JvcmRlcjoxcHggc29saWQgcmdiYSgxMDQsMTAwLDAsLjQpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZDojZmM4Nzc4NjZ9LnRvb2x0aXBb'@;
put 'X25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9v'@;
put 'bHRpcFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6LjU0MTY3cmVtO2ZvbnQtd2VpZ2h0OjQwMDtsZXR0ZXItc3BhY2luZzpub3JtYWw7YmFja2dyb3VuZDojMzE0MzUxO2JvcmRlci1yYWRpdXM6LjEyNXJlbTtjb2xv'@;
put 'cjojZjBmMWVjO2xpbmUtaGVpZ2h0Oi43NXJlbTttYXJnaW46MDtwYWRkaW5nOi4zNzVyZW0gLjVyZW07d2lkdGg6MjM1cHg7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6YXV0byBhdXRvIDEwMCUgMTJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWJvdHRvbTouNjY2Njdy'@;
put 'ZW19LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtwb3NpdGlvbjphYnNvbHV0ZTtib3R0b206LS4zNzVyZW07bGVmdDowO3RvcDphdXRvO3JpZ2h0OmF1dG87Y29udGVudDoi'@;
put 'Ijtib3JkZXItbGVmdDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItdG9wOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1yaWdodDouMjVyZW0gc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgdHJhbnNwYXJlbnR9LnRhYmxlW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtib3JkZXI6MHB4IHNvbGlkfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItY29sb3I6IzMxNDM1'@;
put 'MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0bzttYXJnaW46MTVw'@;
put 'eCAxMHB4IDEwcHh9LnRhYmxlQ29udFtfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkfS5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmFwcHJv'@;
put 'dmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsuYXBwcm92YWxJbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50'@;
put 'OmNlbnRlcjttYXJnaW4tdG9wOjE1cHh9LmFwcHJvdmFsQmFja1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjByZW0haW1wb3J0YW50O21p'@;
put 'bi1oZWlnaHQ6Y2FsYygxMDB2aCArIC0wcHgpIWltcG9ydGFudH0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmxlZnQ7'@;
put 'd2lkdGg6MTUwcHghaW1wb3J0YW50O2ZsZXg6MH19LnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkLmxlZnRbX25nY29udGVudC0lQ09NUCVdLCAudGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGgubGVmdFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MTt3'@;
put 'aWR0aDozMDBweCFpbXBvcnRhbnR9LnRvb2xsW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiNlNmIzYjM7Y29sb3I6IzMxNDM1MTt0b3A6MDtoZWlnaHQ6MzZweDt3aWR0aDoxMDAlO2xlZnQ6MDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0'@;
put 'ZW1zOmNlbnRlcjtkaXNwbGF5OmZsZXh9I2FjY2VwdEJ0bltfbmdjb250ZW50LSVDT01QJV0sICNyZWplY3RCdG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjE3NXB4fS5mb3JtYXR0ZWQtdmFsdWVzLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjc1cHh9Y2xyLW1vZGFs'@;
put 'W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntvdmVyZmxvdzphdXRvfS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW4tcmlnaHQ6MTBweDtjb2xvcjojNmE2YTZhO2ZvbnQtc2l6ZTox'@;
put 'NXB4fS5yb3dzLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9J119KX1yZXR1cm4gY30pKCk7Y29uc3QgQ1FlPWM9Pih7bm9Cb3JkZXI6Y30pO2Z1bmN0aW9uIFNRZShjLGwpezEmYyYmKGdlKDAsImRpdiIsMTApKDEsImRp'@;
put 'diIsMTEpLEp0KDIsImNsci1pY29uIiwxMiksZ2UoMywiaDMiLDEzKSx6ZSg0LCJUaGVyZSBhcmUgbm8gYXBwcm92YWxzIHJlbWFpbmluZyIpLGJlKCkoKSgpKX1mdW5jdGlvbiB4UWUoYyxsKXsxJmMmJihnZSgwLCJoMyIsMTQpLHplKDEsIiBSRVZJRVcgIiksYmUoKSl9ZnVuY3Rpb24ga1Fl'@;
put 'KGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIsMTUpLHplKDEsIiBZb3UgaGF2ZSAiKSxnZSgyLCJzcGFuIiksemUoMyksYmUoKSx6ZSg0LCJhcHByb3ZhbHMgcmVtYWluaW5nICIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDMpLHhyKCIiLGEucmVtYWluZWQsIiAiKX19ZnVuY3Rpb24gRVFl'@;
put 'KGMsbCl7MSZjJiYoZ2UoMCwic3BhbiIsMTgpLHplKDEsIiBMb2FkaW5nLi4uICIpLGJlKCkpfWZ1bmN0aW9uIFRRZShjLGwpezEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiksemUoMiwiTG9hZGluZyBhcHByb3ZhbHMgbGlzdCIpLGJlKCkoKSl9ZnVuY3Rpb24gRFFlKGMsbCl7aWYoMSZjJiYo'@;
put 'Z2UoMCwiZGl2IiwxNiksYnQoMSxFUWUsMiwwLCJzcGFuIiwxNykoMixUUWUsMywwLCJkaXYiLDkpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLCFhLmxvYWRlZCksd2UoKSxQZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gQVFlKGMsbCl7MSZjJiZKdCgwLCJj'@;
put 'bHItaWNvbiIsMzgpfWZ1bmN0aW9uIExRZShjLGwpezEmYyYmSnQoMCwiY2xyLXNwaW5uZXIiLDM5KSwyJmMmJlBlKCJjbHJTbWFsbCIsITApfWZ1bmN0aW9uIElRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLHplKDIpLGJl'@;
put 'KCksZ2UoMywiY2xyLWRnLWNlbGwiKSx6ZSg0KSxiZSgpLGdlKDUsImNsci1kZy1jZWxsIiksemUoNiksYmUoKSxnZSg3LCJjbHItZGctY2VsbCIpLHplKDgpLGJlKCksZ2UoOSwiY2xyLWRnLWNlbGwiKSgxMCwiZGl2IiwyNikoMTEsImEiLDI3KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29u'@;
put 'c3QgaD1TdChhKS5pbmRleDtyZXR1cm4geHQoWmUoMikuZ2V0Q2xpY2tlZChoKSl9KSxKdCgxMiwiY2xyLWljb24iLDI4KSxnZSgxMywic3BhbiIsMjkpLHplKDE0LCJHbyB0byByZXZpZXcgcGFnZSBzY3JlZW4iKSxiZSgpKCksZ2UoMTUsImEiLDMwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'Y29uc3QgaD1TdChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxUPVplKDIpO3JldHVybiB4dChmLnJlamVjdExvYWRpbmc/IiI6VC5yZWplY3RpbmcodikpfSksYnQoMTYsQVFlLDEsMCwiY2xyLWljb24iLDMxKSgxNyxMUWUsMSwxLCJjbHItc3Bpbm5lciIsMzIpLGdlKDE4LCJzcGFuIiwy'@;
put 'OSksemUoMTksIlJlamVjdCIpLGJlKCkoKSxnZSgyMCwiYSIsMzMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMikuZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxKdCgyMSwiY2xyLWljb24iLDM0KSxnZSgyMiwic3BhbiIsMjkpLHpl'@;
put 'KDIzLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iKSxiZSgpKCkoKSgpLGdlKDI0LCJjbHItZGctY2VsbCIsMzUpKDI1LCJidXR0b24iLDM2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSkuJGltcGxpY2l0O3JldHVybiBaZSgyKS5kb3dubG9hZChmLnRhYmxlSWQpLHh0'@;
put 'KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksSnQoMjYsImNsci1pY29uIiwzNyksYmUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKDIpLHByKGEuc3VibWl0dGVyKSx3ZSgyKSxwcihhLmJhc2VUYWJsZSksd2UoMikscHIoYS5zdWJtaXR0ZWQpLHdlKDIpLHByKGEuc3VibWl0'@;
put 'UmVhc29uKSx3ZSg4KSxQZSgibmdJZiIsIWEucmVqZWN0TG9hZGluZyksd2UoKSxQZSgibmdJZiIsYS5yZWplY3RMb2FkaW5nKSx3ZSg4KSxQZSgiaWQiLGEudGFibGVJZCl9fWZ1bmN0aW9uIFJRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIpKDEsImNsci1kYXRhZ3Jp'@;
put 'ZCIsMTkpKDIsImNsci1kZy1jb2x1bW4iLDIwKSx6ZSgzLCJTVUJNSVRURVIiKSxiZSgpLGdlKDQsImNsci1kZy1jb2x1bW4iLDIwKSx6ZSg1LCJCQVNFIFRBQkxFIiksYmUoKSxnZSg2LCJjbHItZGctY29sdW1uIiwyMCksemUoNywiU1VCTUlUVEVEIiksYmUoKSxnZSg4LCJjbHItZGctY29s'@;
put 'dW1uIiwyMCksemUoOSwiU1VCTUlUIFJFQVNPTiIpLGJlKCksZ2UoMTAsImNsci1kZy1jb2x1bW4iKSx6ZSgxMSwiQUNUSU9OIiksYmUoKSxnZSgxMiwiY2xyLWRnLWNvbHVtbiIpLHplKDEzLCJET1dOTE9BRCIpLGJlKCksYnQoMTQsSVFlLDI3LDcsImNsci1kZy1yb3ciLDIxKSxnZSgxNSwi'@;
put 'Y2xyLWRnLWZvb3RlciIsMjIpKDE2LCJzcGFuIiksemUoMTcsIml0ZW1zIHBlciBwYWdlIiksYmUoKSxnZSgxOCwic2VsZWN0IiwyMyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gcXIoZi5pdGVtc051bSxoKXx8KGYuaXRlbXNOdW09'@;
put 'aCkseHQoaCl9KSxnZSgxOSwib3B0aW9uIiwyNCksemUoMjAsIjMiKSxiZSgpLGdlKDIxLCJvcHRpb24iLDI0KSx6ZSgyMiwiNSIpLGJlKCksZ2UoMjMsIm9wdGlvbiIsMjQpLHplKDI0LCIxMCIpLGJlKCksZ2UoMjUsIm9wdGlvbiIsMjQpLHplKDI2LCIxNSIpLGJlKCkoKSxnZSgyNywiY2xy'@;
put 'LWRnLXBhZ2luYXRpb24iLDI1LDApLHplKDI5KSxiZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1YaSgyOCksZD1aZSgpO3dlKDIpLFBlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksd2UoMiksUGUoImNsckRnRmllbGQiLCJiYXNlVGFibGUiKSx3ZSgyKSxQZSgiY2xyRGdGaWVsZCIsInN1'@;
put 'Ym1pdHRlZCIpLHdlKDIpLFBlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksd2UoNiksUGUoImNsckRnSXRlbXNPZiIsZC5hcHByb3ZlTGlzdCksd2UoNCksV3IoIm5nTW9kZWwiLGQuaXRlbXNOdW0pLHdlKCksUGUoIm5nVmFsdWUiLDMpLHdlKDIpLFBlKCJuZ1ZhbHVlIiw1KSx3ZSgy'@;
put 'KSxQZSgibmdWYWx1ZSIsMTApLHdlKDIpLFBlKCJuZ1ZhbHVlIiwxNSksd2UoMiksUGUoImNsckRnUGFnZVNpemUiLGQuaXRlbXNOdW0pLHdlKDIpLFpoKCIgIixhLmZpcnN0SXRlbSsxLCIgLSAiLGEubGFzdEl0ZW0rMSwiIG9mICIsYS50b3RhbEl0ZW1zLCIgYXBwcm92YWxzICIpfX1sZXQg'@;
put 'T1FlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMuc2FzU2VydmljZT1mLHRoaXMuY2RyPXYsdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMH1nZXRUYWJs'@;
put 'ZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldENsaWNrZWQoYSl7dm9pZCAwIT09dGhpcy5hcHByb3ZlTGlzdCYmKHRoaXMudGFibGVJZD10aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQsdGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCJyZXZpZXcvYXBwcm92'@;
put 'ZURldC8iK3RoaXMuYXBwcm92ZUxpc3RbYV0udGFibGVJZCkpfXJlamVjdGluZyhhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe3ZvaWQgMCE9PWQuYXBwcm92ZUxpc3QmJihkLnRhYmxlSWQ9ZC5hcHByb3ZlTGlzdFthXS50YWJsZUlkKTtsZXQgaD17U1RQX0FDVElPTjoiUkVK'@;
put 'RUNUX1RBQkxFIixUQUJMRTpkLnRhYmxlSWQsU1RQX1JFQVNPTjoicXVpY2sgcmVqZWN0aW9uIn07dHJ5eyhkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMCwoeWllbGQgZC5zYXNTdG9yZVNlcnZpY2UucmVqZWN0aW5nKGgsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMv'@;
put 'cmVqZWN0aW9uIikpLmZyb21zYXNbMF0uUkVTUE9OU0UuaW5jbHVkZXMoIlNVQ0NFU1MiKSYmKChkLmFwcHJvdmVMaXN0fHxbXSlbYV0ucmVqZWN0TG9hZGluZz0hMSxkLmFwcHJvdmVMaXN0Py5zcGxpY2UoYSwxKSxkLnJlbWFpbmVkLS0sZC5jZHIuZGV0ZWN0Q2hhbmdlcygpKX1jYXRjaChm'@;
put 'KXtkLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9yZWplY3Rpb24iLGYpfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVy'@;
put 'biBXKGZ1bmN0aW9uKigpe2EuaXRlbXNOdW09MTA7bGV0IGQ9e1NUUF9BQ1RJT046Ik9QRU5fQVBQUk9WQUxTIn07dHJ5e2xldCBoPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldEFwcHJvdmFscyhkLCJCcm93c2VyUGFyYW1zIiwiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIpO2EucmVtYWlu'@;
put 'ZWQ9aC5mcm9tc2FzLmxlbmd0aDtsZXQgZj1oLmZyb21zYXMubWFwKGZ1bmN0aW9uKHYpe3JldHVybnt0YWJsZUlkOnYuVEFCTEVfSUQsc3VibWl0dGVyOnYuU1VCTUlUVEVEX0JZX05NLHN1Ym1pdHRlZDp2LlNVQk1JVFRFRF9PTl9EVFRNLGJhc2VUYWJsZTp2LkJBU0VfVEFCTEUsc3VibWl0'@;
put 'UmVhc29uOnYuU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7YS5hcHByb3ZlTGlzdD1mLGEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGFwcHJvdmFscyIsaCl9fSkoKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1Nl'@;
put 'cnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9fcHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1zdGF0'@;
put 'aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGRoKSxzdChHbCksc3QoenMpLHN0KHlhKSxzdChGYSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNv'@;
put 'bnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OSx2YXJzOjgsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xh'@;
put 'c3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJhcHByb3ZhbHMtbGlzdC13cmFwcGVyIiw0LCJuZ0lm'@;
put 'Il0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayIsIm5vYXBwcm92YWxzLWluZm8td3JhcHBlciJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6'@;
put 'ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdodC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxb'@;
put 'MSwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09m'@;
put 'Il0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1zdGFydCJdLFszLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFszLCJuZ1ZhbHVlIl0sWzEsImNlbnRlciIsMywiY2xyRGdQYWdlU2l6ZSJdLFsicm9sZSIsInRvb2x0aXAiLDEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1hcm91'@;
put 'bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItZ3JlZW4iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNoZWNrIiwic2l6ZSIsIjI0Il0sWzEsInRvb2x0aXAtY29udGVudCJdLFsxLCJjb2x1bW4t'@;
put 'Y2VudGVyIiwibGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1yZWQiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiIsNCwibmdJZiJdLFszLCJjbHJTbWFsbCIsNCwibmdJZiJdLFsxLCJjb2x1bW4tY2VudGVyIiwi'@;
put 'bGlua3MiLCJ0b29sdGlwIiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ibHVlIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb2RlIiwic2l6ZSIsIjI4Il0sWzEsInAtMCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiYnRuIiwiYnRuLXN1'@;
put 'Y2Nlc3MiLDMsImNsaWNrIiwiaWQiXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIl0sWzMsImNsclNtYWxsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGJ0KDIsU1FlLDUsMCwiZGl2IiwzKSxn'@;
put 'ZSgzLCJkaXYiLDQpLGJ0KDQseFFlLDIsMCwiaDMiLDUpKDUsa1FlLDUsMSwicCIsNiksYmUoKSxidCg2LERRZSwzLDIsImRpdiIsNyksZ2UoNywiZGl2Iiw4KSxidCg4LFJRZSwzMCwxNCwiZGl2Iiw5KSxiZSgpKCkoKSksMiZkJiYod2UoMiksUGUoIm5nSWYiLDA9PT1oLnJlbWFpbmVkKSx3'@;
put 'ZSgpLFBlKCJuZ0NsYXNzIixhZig2LENRZSwhaC5sb2FkZWQpKSx3ZSgpLFBlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLHdlKCksUGUoIm5nSWYiLGgubG9hZGVkJiYwIT09aC5yZW1haW5lZCksd2UoKSxQZSgibmdJZiIsIWgubG9hZGVkKSx3ZSgyKSxQZSgibmdJZiIsaC5h'@;
put 'cHByb3ZlTGlzdCYmMCE9PWgucmVtYWluZWQpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxuZCxyZCx0ZCxjYSxvYSxYNyxaNCx3ZyxxRSwkNyxLRSxDZyxTZyx4ZyxRNyxrZyxaNyxVNCxHNyxaYSxuaF0sc3R5bGVzOlsiLmNvbHVtbi1jZW50ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6'@;
put 'ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhZ3JpZC1jb2x1bW5bX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFncmlkLWNvbHVtbi10aXRsZVtfbmdj'@;
put 'b250ZW50LSVDT01QJV17b3V0bGluZTpub25lIWltcG9ydGFudH0ubGlua3NbX25nY29udGVudC0lQ09NUCVde2ZvbnQtd2VpZ2h0OjcwMDtjdXJzb3I6cG9pbnRlcn0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25n'@;
put 'Y29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdj'@;
put 'b250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1yaWdo'@;
put 'dDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfS5ub0JvcmRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fS5hcHByb3ZhbHMtbGlzdC13cmFwcGVyW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXXtoZWlnaHQ6NzB2aDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5ub2FwcHJvdmFscy1pbmZvLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0'@;
put 'aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmNhbGMoMTAwdmggLSAyMDBweCl9Il19KX1yZXR1cm4gY30pKCk7Y29uc3QgUFFlPWM9Pih7bm9Cb3JkZXI6Y30pO2Z1bmN0aW9uIEZRZShjLGwpezEmYyYmKGdlKDAsImRp'@;
put 'diIsMTMpKDEsImRpdiIsMTQpLEp0KDIsImNsci1pY29uIiwxNSksZ2UoMywiaDMiLDE2KSx6ZSg0LCIgWW91IGhhdmUgbm90IHN1Ym1pdHRlZCBhbnkgdGFibGVzICIpLGJlKCkoKSgpKX1mdW5jdGlvbiBIUWUoYyxsKXsxJmMmJihnZSgwLCJoMyIsMTcpLHplKDEsIiBTVUJNSVQgUVVFVUUg'@;
put 'IiksYmUoKSl9ZnVuY3Rpb24gTlFlKGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIsMTgpLHplKDEsIiBZb3UgaGF2ZSAiKSxnZSgyLCJzcGFuIiksemUoMyksYmUoKSx6ZSg0LCJzdWJtaXNzaW9ucyB3YWl0aW5nIHRvIGJlIGFwcHJvdmVkICIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgz'@;
put 'KSx4cigiIixhLnJlbWFpbmVkLCIgIil9fWZ1bmN0aW9uIFZRZShjLGwpezEmYyYmKGdlKDAsInNwYW4iLDIxKSx6ZSgxLCIgTG9hZGluZy4uLiAiKSxiZSgpKX1mdW5jdGlvbiBqUWUoYyxsKXsxJmMmJihnZSgwLCJkaXYiKSgxLCJoMyIpLHplKDIsIkxvYWRpbmcgc3VibWl0dGVkIGxpc3Qi'@;
put 'KSxiZSgpKCkpfWZ1bmN0aW9uIEJRZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMTkpLGJ0KDEsVlFlLDIsMCwic3BhbiIsMjApKDIsalFlLDMsMCwiZGl2IiwzKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxQZSgibmdJZiIsIWEubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIiwhYS5s'@;
put 'b2FkZWQpfX1mdW5jdGlvbiBZUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItZGctcm93IiwzMCksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0O3JldHVybiB4dChaZSg1KS5nb1RvRGV0YWlscyhoLnRhYmxlSWQpKX0pLGdlKDEsImNs'@;
put 'ci1kZy1jZWxsIiksemUoMiksYmUoKSxnZSgzLCJjbHItZGctY2VsbCIpLHplKDQpLGJlKCksZ2UoNSwiY2xyLWRnLWNlbGwiKSx6ZSg2KSxiZSgpLGdlKDcsImNsci1kZy1jZWxsIikoOCwiZGl2IiwzMSkoOSwiYSIsMzIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRp'@;
put 'bXBsaWNpdDtyZXR1cm4geHQoWmUoNSkuZ29Ub1N0YWdlKGgudGFibGVJZCkpfSksSnQoMTAsImNsci1pY29uIiwzMyksZ2UoMTEsInNwYW4iLDM0KSx6ZSgxMiwiR28gdG8gc3RhZ2VkIGRhdGEgc2NyZWVuIiksYmUoKSgpKCkoKSxnZSgxMywiY2xyLWRnLWNlbGwiLDM1KSgxNCwiYnV0dG9u'@;
put 'IiwzNiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4gWmUoNSkuZG93bmxvYWQoZi50YWJsZUlkKSx4dChoLnN0b3BQcm9wYWdhdGlvbigpKX0pLEp0KDE1LCJjbHItaWNvbiIsMzcpLGJlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBs'@;
put 'aWNpdDt3ZSgyKSxwcihhLmJhc2UpLHdlKDIpLHByKGEuc3VibWl0dGVkKSx3ZSgyKSxwcihhLnN1Ym1pdFJlYXNvbil9fWZ1bmN0aW9uIHpRZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIpKDEsImNsci1kYXRhZ3JpZCIsMjMpKDIsImNsci1kZy1jb2x1bW4iKSx6ZSgz'@;
put 'LCJCQVNFIFRBQkxFIiksYmUoKSxnZSg0LCJjbHItZGctY29sdW1uIiwyNCksemUoNSwiU1VCTUlUVEVEIiksYmUoKSxnZSg2LCJjbHItZGctY29sdW1uIiwyNCksemUoNywiU1VCTUlUIFJFQVNPTiIpLGJlKCksZ2UoOCwiY2xyLWRnLWNvbHVtbiIsMTMpLHplKDksIkFDVElPTiIpLGJlKCks'@;
put 'Z2UoMTAsImNsci1kZy1jb2x1bW4iLDEzKSx6ZSgxMSwiRE9XTkxPQUQiKSxiZSgpLGJ0KDEyLFlRZSwxNiwzLCJjbHItZGctcm93IiwyNSksZ2UoMTMsImNsci1kZy1mb290ZXIiLDI2KSgxNCwic3BhbiIpLHplKDE1LCJpdGVtcyBwZXIgcGFnZSIpLGJlKCksZ2UoMTYsInNlbGVjdCIsMjcp'@;
put 'LEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDQpO3JldHVybiBxcihmLml0ZW1zTnVtLGgpfHwoZi5pdGVtc051bT1oKSx4dChoKX0pLGdlKDE3LCJvcHRpb24iLDI4KSx6ZSgxOCwiMyIpLGJlKCksZ2UoMTksIm9wdGlvbiIsMjgpLHplKDIwLCI1Iiks'@;
put 'YmUoKSxnZSgyMSwib3B0aW9uIiwyOCksemUoMjIsIjEwIiksYmUoKSxnZSgyMywib3B0aW9uIiwyOCksemUoMjQsIjE1IiksYmUoKSgpLGdlKDI1LCJjbHItZGctcGFnaW5hdGlvbiIsMjksMCksemUoMjcpLGJlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDI2KSxkPVplKDQpO3dlKDQp'@;
put 'LFBlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksd2UoMiksUGUoImNsckRnRmllbGQiLCJzdWJtaXRSZWFzb24iKSx3ZSg2KSxQZSgiY2xyRGdJdGVtc09mIixkLnN1Ym1pdHRlckxpc3QpLHdlKDQpLFdyKCJuZ01vZGVsIixkLml0ZW1zTnVtKSx3ZSgpLFBlKCJuZ1ZhbHVlIiwzKSx3ZSgy'@;
put 'KSxQZSgibmdWYWx1ZSIsNSksd2UoMiksUGUoIm5nVmFsdWUiLDEwKSx3ZSgyKSxQZSgibmdWYWx1ZSIsMTUpLHdlKDIpLFBlKCJjbHJEZ1BhZ2VTaXplIixkLml0ZW1zTnVtKSx3ZSgyKSxaaCgiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90YWxJdGVt'@;
put 'cywiIHN1Ym1pc3Npb25zICIpfX1mdW5jdGlvbiBVUWUoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDIyKSxidCgxLHpRZSwyOCwxMiwiZGl2IiwzKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxQZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWZ1bmN0'@;
put 'aW9uIFpRZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNiksYnQoMSxGUWUsNSwwLCJkaXYiLDcpLGdlKDIsImRpdiIsOCksYnQoMyxIUWUsMiwwLCJoMyIsOSkoNCxOUWUsNSwxLCJwIiwxMCksYmUoKSxidCg1LEJRZSwzLDIsImRpdiIsMTEpKDYsVVFlLDIsMSwiZGl2IiwxMiksYmUoKSks'@;
put 'MiZjKXtjb25zdCBhPVplKDIpO3dlKCksUGUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksd2UoKSxQZSgibmdDbGFzcyIsYWYoNixQUWUsIWEubG9hZGVkKSksd2UoKSxQZSgibmdJZiIsMCE9PWEucmVtYWluZWQpLHdlKCksUGUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1h'@;
put 'aW5lZCksd2UoKSxQZSgibmdJZiIsIWEubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIFdRZShjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNCksYnQoMSxaUWUsNyw4LCJkaXYiLDUpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLCFhLnN1'@;
put 'YlJlYWR5KX19ZnVuY3Rpb24gR1FlKGMsbCl7MSZjJiYoZ2UoMCwiZGl2IiksSnQoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLGJlKCkpfWxldCBaY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9'@;
put 'ZCx0aGlzLnJvdXRlcj1oLHRoaXMucm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIith'@;
put 'KX1nb1RvRGV0YWlscyhhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXRE'@;
put 'YXRhKX0sMCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2NvbnN0IGQ9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDthLml0ZW1zTnVtPTEwO3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRTdWJtaXR0cygpO2lmKGEucmVtYWlu'@;
put 'ZWQ9aC5mcm9tc2FzLmxlbmd0aCxhLnJlbWFpbmVkPjApe2Euc3VibWl0dGVyPWguZnJvbXNhc1swXS5TVUJNSVRURURfQllfTk07bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELGJhc2U6di5CQVNFX1RBQkxFLHN1Ym1pdHRlZDp2LlNV'@;
put 'Qk1JVFRFRF9PTl9EVFRNLHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXRSZWFzb246di5TVUJNSVRURURfUkVBU09OX1RYVH19KTtpZihhLnN1Ym1pdHRlckxpc3Q9ZixhLnN1Ym1pdERhdGE9aC5mcm9tc2FzLHR5cGVvZiBkPCJ1Iil7Y29uc3Qgdj1hLnN1Ym1pdHRlckxpc3Qu'@;
put 'ZmluZEluZGV4KFQ9PlQudGFibGVJZD09PWQpO3Y+LTEmJmEuZ2V0RGV0YWlscyhhLnN1Ym1pdHRlckxpc3Rbdl0sdil9fWEubG9hZGVkPSEwfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiZWRpdG9ycy9nZXRzdWJtaXRzIixoKX19KSgpfW5nQWZ0ZXJWaWV3'@;
put 'SW5pdCgpe3RoaXMuX3JlYWR5U3ViPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLnNldFN1Ym1pdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9YX0pLHRoaXMuX2JhY2tUb1N1Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXRMaXN0LnN1YnNjcmliZShhPT57dGhpcy5zdWJSZWFkeT0h'@;
put 'dGhpcy5zdWJSZWFkeSx0aGlzLmRldGFpbHNPcGVuPSExfSl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3Yr'@;
put 'Ii8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChkaCksc3QoR2wpLHN0KHpzKSxzdChNYyksc3QoeWEpKX07c3RhdGljI3Q9dGhpcy5c'@;
put 'dTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN1Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJu'@;
put 'Z0lmIl0sWzQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJj'@;
put 'ZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVt'@;
put 'biBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250'@;
put 'ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0'@;
put 'LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIs'@;
put 'NCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJE'@;
put 'Z0l0ZW1zT2YiXSxbMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LXN0YXJ0Il0sWzMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiXSxbMSwiY2VudGVyIiwzLCJjbHJEZ1BhZ2VTaXplIl0sWzEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsicm9sZSIsInRv'@;
put 'b2x0aXAiLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1uLWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJd'@;
put 'LFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJkaXYiLDEp'@;
put 'LGJ0KDEsV1FlLDIsMSwiZGl2IiwyKSgyLEdRZSwyLDAsImRpdiIsMyksYmUoKSksMiZkJiYod2UoKSxQZSgibmdJZiIsIWguc3ViUmVhZHkpLHdlKCksUGUoIm5nSWYiLGguc3ViUmVhZHkpKX0sZGVwZW5kZW5jaWVzOltVYyxxaSxuZCxyZCx0ZCxjYSxvYSxYNyxaNCx3ZyxxRSwkNyxLRSxD'@;
put 'ZyxTZyx4ZyxRNyxrZyxaNyxVNCxHNyxaYSxVY2VdLHN0eWxlczpbIi5ub0JvcmRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdHJhbnNwYXJlbnQhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4g'@;
put 'LnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzE0MzUxIWltcG9ydGFudH0udG9vbHRpcC50b29s'@;
put 'dGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XTpiZWZvcmV7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci1ib3R0b206LjIwODMzcmVtIHNvbGlkICMzMTQzNTF9Lm5vLXN1Ym1pdHRlZC10YWJsZXNbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSl9cmV0dXJuIGN9KSgp'@;
put 'O2NvbnN0ICRRZT0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVkOmx9KTtmdW5jdGlvbiBxUWUoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDEyKSxKdCgxLCJjbHItaWNvbiIsMTMpLGdlKDIsImgzIiwxNCksemUoMywiVGhlcmUgaXMgbm8gaGlzdG9yeSB0byBzaG93IiksYmUoKSgpKX1mdW5j'@;
put 'dGlvbiBLUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1wbGljaXQsZj1aZSgpO3JldHVybiB4dChmLmdldFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLHplKDEpLGJlKCl9aWYoMiZj'@;
put 'KXtjb25zdCBhPVplKCkuJGltcGxpY2l0LGQ9WmUoKTt3ZSgpLHByKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBYUWUoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiKSgxLCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1w'@;
put 'bGljaXQsZj1aZSgpO3JldHVybiB4dChmLmdldEJhc2VUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSx6ZSgyLCJWSUVXIiksYmUoKSxnZSgzLCJzcGFuIiksemUoNCwiIC8gIiksYmUoKSxnZSg1LCJhIiwxNyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4kaW1w'@;
put 'bGljaXQsZj1aZSgpO3JldHVybiB4dChmLmdldEVkaXRUYWJsZShmLmFwcHJvdmVEYXRhW2hdKSl9KSx6ZSg2LCJFRElUIiksYmUoKSgpfX1mdW5jdGlvbiBKUWUoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0LGQ9WmUo'@;
put 'KTt3ZSgpLHByKGQuYXBwcm92ZURhdGFbYV0pfX1mdW5jdGlvbiBRUWUoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiw2KSx6ZSgyKSxiZSgpLGdlKDMsInRkIiw2KSxidCg0LEtRZSwyLDEsImEiLDE1KSg1LFhRZSw3LDAsImRpdiIsMTYpKDYsSlFlLDIsMSwic3BhbiIsMTYpLGJl'@;
put 'KCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleDt3ZSgyKSxwcihhKSx3ZSgyKSxQZSgibmdJZiIsZDwxKSx3ZSgpLFBlKCJuZ0lmIixkPDImJmQ+PTEpLHdlKCksUGUoIm5nSWYiLGQ+PTIpfX1mdW5jdGlvbiBlZXQoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiwyMCksemUo'@;
put 'MSwiIExvYWRpbmcuLi4gIiksYmUoKSl9ZnVuY3Rpb24gdGV0KGMsbCl7MSZjJiYoZ2UoMCwiZGl2IikoMSwiaDMiKSx6ZSgyLCJMb2FkaW5nIGhpc3RvcnkiKSxiZSgpKCkpfWZ1bmN0aW9uIG5ldChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMTgpLGJ0KDEsZWV0LDIsMCwic3BhbiIsMTkp'@;
put 'KDIsdGV0LDMsMCwiZGl2IiwxNiksYmUoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQZSgibmdJZiIsIWEubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiByZXQoYyxsKXsxJmMmJihnZSgwLCJoMyIsMjgpLHplKDEsIkhJU1RPUlkiKSxiZSgpKX1mdW5jdGlv'@;
put 'biBpZXQoYyxsKXtpZigxJmMmJihnZSgwLCJwIiwyOSksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKCkseHIoIiBUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQsIiByZWNvcmRzLCBjb250YWN0IHN1cHBvcnRA'@;
put 'ZGF0YWNvbnRyb2xsZXIuaW8gIil9fWZ1bmN0aW9uIG9ldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1kZy1yb3ciLDMzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKDMpLmdldEFwcHJJbmRleChoKSl9KSxn'@;
put 'ZSgxLCJjbHItZGctY2VsbCIsMzQpKDIsImEiLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD1TdChhKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKDMpLmdldEJhc2VUYWJsZShoLmJhc2V0YWJsZSkpfSksemUoMyksYmUoKSgpLGdlKDQsImNsci1kZy1jZWxsIiwzNiksemUoNSks'@;
put 'YmUoKSxnZSg2LCJjbHItZGctY2VsbCIsMzQpLHplKDcpLGJlKCksZ2UoOCwiY2xyLWRnLWNlbGwiLDM0KSx6ZSg5KSxiZSgpLGdlKDEwLCJjbHItZGctY2VsbCIsMzQpLHplKDExKSxiZSgpLGdlKDEyLCJjbHItZGctY2VsbCIsMzQpLHplKDEzKSxiZSgpLGdlKDE0LCJjbHItZGctY2VsbCIs'@;
put 'MzcpKDE1LCJidXR0b24iLDM4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9U3QoYSkuJGltcGxpY2l0O3JldHVybiBaZSgzKS5kb3dubG9hZChmLnRhYmxlSWQpLHh0KGguc3RvcFByb3BhZ2F0aW9uKCkpfSksSnQoMTYsImNsci1pY29uIiwzOSksYmUoKSgpKCl9aWYoMiZjKXtj'@;
put 'b25zdCBhPWwuJGltcGxpY2l0O3dlKDMpLHByKGEuYmFzZXRhYmxlKSx3ZSgpLFBlKCJuZ0NsYXNzIixsZig3LCRRZSwiUkVKRUNURUQiPT09YS5zdGF0dXMsIkFQUFJPVkVEIj09PWEuc3RhdHVzKSksd2UoKSxwcihhLnN0YXR1cyksd2UoMikscHIoYS5zdWJtaXR0ZXIpLHdlKDIpLHByKGEu'@;
put 'c3VibWl0dGVkUmVhc29uKSx3ZSgyKSxwcihhLnN1Ym1pdHRlZCksd2UoMikscHIoYS5yZXZpZXdlZCl9fWZ1bmN0aW9uIHNldChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci1kYXRhZ3JpZCIsMzApKDEsImNsci1kZy1jb2x1bW4iLDMxKSx6ZSgyLCJCQVNFX1RBQkxFIiksYmUoKSxnZSgzLCJj'@;
put 'bHItZGctY29sdW1uIiwzMSksemUoNCwiU1RBVFVTIiksYmUoKSxnZSg1LCJjbHItZGctY29sdW1uIiwzMSksemUoNiwiU1VCTUlUVEVSIiksYmUoKSxnZSg3LCJjbHItZGctY29sdW1uIiwzMSksemUoOCwiU1VCTUlUIFJFQVNPTiIpLGJlKCksZ2UoOSwiY2xyLWRnLWNvbHVtbiIsMzEpLHpl'@;
put 'KDEwLCJTVUJNSVRURUQiKSxiZSgpLGdlKDExLCJjbHItZGctY29sdW1uIiwzMSksemUoMTIsIkFQUFJPVkVEIC8gUkVKRUNURUQiKSxiZSgpLGdlKDEzLCJjbHItZGctY29sdW1uIiksemUoMTQsIkRPV05MT0FEIiksYmUoKSxidCgxNSxvZXQsMTcsMTAsImNsci1kZy1yb3ciLDMyKSxiZSgp'@;
put 'KSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgiY2xyRGdGaWVsZCIsImJhc2V0YWJsZSIpLHdlKDIpLFBlKCJjbHJEZ0ZpZWxkIiwic3RhdHVzIiksd2UoMiksUGUoImNsckRnRmllbGQiLCJzdWJtaXR0ZXIiKSx3ZSgyKSxQZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZFJlYXNvbiIpLHdl'@;
put 'KDIpLFBlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkIiksd2UoMiksUGUoImNsckRnRmllbGQiLCJyZXZpZXdlZCIpLHdlKDQpLFBlKCJjbHJEZ0l0ZW1zT2YiLGEuaGlzdG9yeSl9fWZ1bmN0aW9uIGFldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsNDApLEh0KCJj'@;
put 'bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikubG9hZERhdGEoKSl9KSx6ZSgxKSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKTtQZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nTW9yZSksd2UoKSx4cigiIExvYWQgIixhLnJvd3NMZWZ0VG9Mb2FkLCIgbW9yZSAiKX19ZnVu'@;
put 'Y3Rpb24gY2V0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMiksYnQoMixyZXQsMiwwLCJoMyIsMjMpKDMsaWV0LDIsMSwicCIsMjQpLGJlKCksYnQoNCxzZXQsMTYsNywiY2xyLWRhdGFncmlkIiwyNSksZ2UoNSwiZGl2IiwyNiksYnQoNixhZXQsMiwyLCJidXR0b24i'@;
put 'LDI3KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJuZ0lmIixhLmxvYWRlZCksd2UoKSxQZSgibmdJZiIsYS5saWNlbmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5KSx3ZSgpLFBlKCJuZ0lmIixhLmxvYWRlZCksd2UoMiksUGUoIm5n'@;
put 'SWYiLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkPT09YS5JbmZpbml0eSYmYS5yb3dzTGVmdFRvTG9hZD4wKX19Y29uc3QgdWV0PVt7cGF0aDoiYXBwcm92ZSIsY29tcG9uZW50Ok9RZX0se3BhdGg6ImFwcHJvdmVEZXQvOnRhYmxlSWQiLGNvbXBvbmVudDpVY2V9'@;
put 'LHtwYXRoOiJzdWJtaXR0ZWQiLGNvbXBvbmVudDpaY2V9LHtwYXRoOiJzdWJtaXR0ZWQvOnRhYmxlSWQiLGNvbXBvbmVudDpaY2V9LHtwYXRoOiJoaXN0b3J5Iixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMubGljZW5jZVNlcnZpY2U9YSx0aGlz'@;
put 'LnNhc1N0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLmhpc3Rvcnk9W10sdGhpcy50YWJsZVRpdGxlcz1bXSx0aGlzLmhpc3RvcnlBcnI9W10sdGhpcy5sb2FkZWQ9ITEsdGhpcy5pdGVtc051bT0xMCx0aGlzLm9w'@;
put 'ZW5Nb2RhbD0hMSx0aGlzLm5vRGF0YT0hMSx0aGlzLmFwcHJvdmVEYXRhPXt9LHRoaXMuc2FzanNDb25maWc9bmV3IGVkLlNBU2pzQ29uZmlnLHRoaXMuaGlzdFBhcmFtcz17SElTVDowLFNUQVJUUk9XOjEsTk9CUzotMX0sdGhpcy5sb2FkaW5nTW9yZT0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10'@;
put 'aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpfWdldFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdldEJhc2VUYWJsZShh'@;
put 'KXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhLyIrYSl9Z2V0RWRpdFRhYmxlKGEpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIithKX1nZXRBcHBySW5kZXgoYSl7Y29uc3QgZD10aGlzLmhpc3RvcnlBcnIuZmluZEluZGV4KGg9PmguVEFCTEVfSUQ9'@;
put 'PT1hLnRhYmxlSWQpO2Q+LTEmJih0aGlzLmFwcHJvdmVEYXRhPXRoaXMuaGlzdG9yeUFycltkXSx0aGlzLm9wZW5Nb2RhbD0hMCl9Z2V0IHJvd3NMZWZ0VG9Mb2FkKCl7Y29uc3QgYT10aGlzLmhpc3RQYXJhbXMuTk9CUy10aGlzLmhpc3RvcnkubGVuZ3RoLGQ9dGhpcy5oaXN0UGFyYW1zLkhJ'@;
put 'U1Q7cmV0dXJuIGE8PTA/MDphPmQ/ZDphfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFt'@;
put 'PSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2ErIiZfY29udGV4dG5hbWU9Iit0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKX1sb2FkRGF0YSgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFt'@;
put 'cy5ISVNUK2EuaGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1z'@;
put 'PWguaGlzdHBhcmFtc1swXTtjb25zdCB2PWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZih2Lmxlbmd0aD4wKXtjb25zdCBUPXY7YS5oaXN0b3J5QXJyPXYsZj1PYmplY3Qua2V5cyhUWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0'@;
put 'IFk9di5tYXAoZnVuY3Rpb24ocmUpe3JldHVybnt0YWJsZUlkOnJlLlRBQkxFX0lELHN1Ym1pdHRlcjpyZS5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOnJlLlNVQk1JVFRFRF9SRUFTT05fVFhULHN1Ym1pdHRlZDpyZS5TVUJNSVRURUQsc3RhdHVzOnJlLlNUQVRVUyxyZXZpZXdSZWFzb246'@;
put 'cmUuUkVWSUVXX1JFQVNPTl9UWFQscmV2aWV3ZXI6cmUuUkVWSUVXRVIscmV2aWV3ZWQ6cmUuUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6cmUuTlVNX09GX0FQUFJPVkFMU19SRVFVSVJFRCxiYXNldGFibGU6cmUuQkFTRV9UQUJMRX19KTthLmhpc3RvcnkucHVzaCguLi5ZKSxhLmxvYWRlZD0h'@;
put 'MH1lbHNlIGEubG9hZGVkPSEwLDA9PT1hLmhpc3RvcnkubGVuZ3RoJiYoYS5ub0RhdGE9ITApfWNhdGNoKGgpe2EuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL2dldGhpc3RvcnkiLGgpLGEubG9hZGluZ01vcmU9ITF9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRo'@;
put 'aXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7YS5sb2FkRGF0YSgpfSkoKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGgxKSxzdChkaCksc3QoR2wpLHN0KHpzKSxzdCh5YSkpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpj'@;
put 'LHNlbGVjdG9yczpbWyJhcHAtaGlzdG9yeSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MjAsdmFyczo2LGNvbnN0czpbWzEsImNvbnRlbnQtYXJlYSJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLCJjbGFzcyIsImNhcmQtYmxvY2sgZC1mbGV4IGp1c3RpZnkt'@;
put 'Y29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsInRhYmxlIl0sWzEsImxl'@;
put 'ZnQiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVt'@;
put 'cy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZCIsNCwibmdJZiJdLFsiaWQiLCJub0RhdGFDb250YWluZXIiLDEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbInNoYXBlIiwi'@;
put 'd2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWzEs'@;
put 'ImgtNzB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiY2FyZCJdLFsxLCJjYXJkLWhlYWRlciJdLFsiY2xhc3MiLCJjZW50'@;
put 'ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWhpc3RvcnkgZGF0YWdyaWQtY3VzdG9tLWZvb3RlciIsNCwibmdJZiJd'@;
put 'LFsxLCJsb2FkLW1vcmUiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwiYnRuIGJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2VudGVyIiwiY2xyLWNvbC1tZC0x'@;
put 'MiIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwiZm9udC13ZWlnaHQtNzAwIiwiY29sb3ItZGFyay1ncmF5Il0sWzEsImRhdGFncmlkLWhpc3RvcnkiLCJkYXRhZ3JpZC1jdXN0b20tZm9vdGVyIl0sWzMsImNsckRnRmllbGQiXSxbMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJj'@;
put 'bHJEZ0l0ZW1zT2YiXSxbMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwibS0wIiwzLCJjbGljayJdLFsxLCJ2ZXJDZW50ZXIiLDMsIm5nQ2xhc3MiXSxbMSwidmVyQ2VudGVyIiwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNl'@;
put 'bnRlciJdLFsxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGdlKDAsImRpdiIsMCksYnQoMSxxUWUsNCww'@;
put 'LCJkaXYiLDEpLGdlKDIsImNsci1tb2RhbCIsMiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHFyKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9kYWw9diksdn0pLGdlKDMsImg0IiwzKSx6ZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksYmUoKSxnZSg1LCJkaXYi'@;
put 'LDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLHplKDEwLCJOYW1lIiksYmUoKSxnZSgxMSwidGgiLDYpLHplKDEyLCJWYWx1ZSIpLGJlKCkoKSgpLGdlKDEzLCJ0Ym9keSIpLGJ0KDE0LFFRZSw3LDQsInRyIiw3KSxiZSgpKCkoKSxnZSgxNSwiZGl2Iiw4KSgx'@;
put 'NiwiYnV0dG9uIiw5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksemUoMTcsIiBPSyAiKSxiZSgpKCkoKSxidCgxOCxuZXQsMywyLCJkaXYiLDEwKSgxOSxjZXQsNyw0LCJkaXYiLDExKSxiZSgpKSwyJmQmJih3ZSgpLFBlKCJuZ0lmIixoLm5vRGF0YSks'@;
put 'd2UoKSxXcigiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCksUGUoImNsck1vZGFsU2l6ZSIsInhsIiksd2UoMTIpLFBlKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSx3ZSg0KSxQZSgibmdJZiIsIWgubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVu'@;
put 'ZGVuY2llczpbVWMsTHMscWksWDcsWjQsd2csJDcsQ2csU2cseGcsUTcsa2csWjcsVTQsRzcsWmEsQnUsWXUscjAsbzJdLHN0eWxlczpbIi5yZWplY3RlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAl'@;
put 'XXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0OjcwMH0uaHNDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6Y2VudGVy'@;
put 'IWltcG9ydGFudDtwYWRkaW5nOjdweH0uYnRDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS52ZXJDZW50ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50'@;
put 'ZXI7d29yZC1icmVhazpicmVhay1hbGx9LmxvYWQtbW9yZVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6OTBweH0jbm9EYXRhQ29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pfXJldHVy'@;
put 'biBjfSkoKX1dO2xldCBkZXQ9KCgpPT57Y2xhc3MgY3tzdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSk7c3RhdGljI249dGhpcy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vLFdj'@;
put 'LmZvckNoaWxkKHVldCksV2NdfSl9cmV0dXJuIGN9KSgpLGhldD0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWlu'@;
put 'aj1faSh7aW1wb3J0czpbbW8sQ2MsZGV0LHMwLHg5LmZvclJvb3QoKSx5MixXOV19KX1yZXR1cm4gY30pKCksZmV0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3Rh'@;
put 'dGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXJldmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkp0KDAsInJvdXRlci1vdXRsZXQiKX0s'@;
put 'ZGVwZW5kZW5jaWVzOltJNF19KX1yZXR1cm4gY30pKCk7Y29uc3QgcGV0PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIG1ldChjLGwpezEmYyYmKGdlKDAsInNwYW4iLDYpLHplKDEsIiBMb2FkaW5nLi4uICIpLGJlKCkpfWZ1bmN0aW9uIGdldChjLGwpezEmYyYm'@;
put 'KGdlKDAsImRpdiIpKDEsImgzIiksemUoMiwiTG9hZGluZyBzdWJtaXR0ZWQgdGFibGUiKSxiZSgpKCkpfWZ1bmN0aW9uIF9ldChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNCksYnQoMSxtZXQsMiwwLCJzcGFuIiw1KSgyLGdldCwzLDAsImRpdiIsMyksYmUoKSksMiZjKXtjb25zdCBhPVpl'@;
put 'KCk7d2UoKSxQZSgibmdJZiIsIWEubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiB2ZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDI4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmFwcHJvdmVU'@;
put 'YWJsZVNjcmVlbigpKX0pLHplKDEsIiBBcHByb3ZlICIpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKDIpO1BlKCJkaXNhYmxlZCIsIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpfHwiUkVKRUNURUQiPT09KG51'@;
put 'bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCkpKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdDaGFuZ2VzKX19ZnVuY3Rpb24geWV0KGMsbCl7MSZjJiYoZ2UoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzEpKDEsInNwYW4iKSx6ZSgyLCIgUmV2'@;
put 'ZXJ0IHRoaXMgYW5kIGFsbCBzdWJzZXF1ZW50IGNoYW5nZXMgIiksYmUoKSgpKX1mdW5jdGlvbiBiZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJidXR0b24iLDI5KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLnJldmVydENoYW5nZXMoKSl9'@;
put 'KSx6ZSgxLCIgUkVWRVJUICIpLGJ0KDIseWV0LDMsMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMzApLGJlKCl9MiZjJiZQZSgiY2xyTG9hZGluZyIsWmUoMikucmV2ZXJ0aW5nQ2hhbmdlcyl9ZnVuY3Rpb24gd2V0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IikoMSwiZGl2'@;
put 'Iiw3KSgyLCJkaXYiLDgpKDMsImg0Iiw5KSx6ZSg0LCJTdGFnZWQgRGF0YSIpLGJlKCkoKSgpLGdlKDUsImRpdiIsMTApKDYsImRpdiIsMTEpKDcsImRpdiIsMTIpKDgsImRpdiIsOCksemUoOSwiQmFzaWMgU3VibWl0dGVkIERldGFpbHMiKSxiZSgpKCksZ2UoMTAsImRpdiIpKDExLCJzcGFu'@;
put 'IiksemUoMTIsIlRhYmxlIElkOiIpLGJlKCksZ2UoMTMsInN0cm9uZyIpKDE0LCJzcGFuIiksemUoMTUpLGJlKCkoKSgpLGdlKDE2LCJkaXYiKSgxNywic3BhbiIpLHplKDE4LCJCYXNlIFRhYmxlOiIpLGJlKCksZ2UoMTksImEiLDEzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0'@;
put 'KGEpLHh0KFplKCkudmlld2VyVGFibGVTY3JlZW4oKSl9KSx6ZSgyMCksYmUoKSgpLGdlKDIxLCJkaXYiKSgyMiwic3BhbiIpLHplKDIzLCJTdWJtaXQgRGF0ZToiKSxiZSgpLGdlKDI0LCJzcGFuIiwxNCksemUoMjUpLGJlKCkoKSxnZSgyNiwiZGl2IikoMjcsInNwYW4iKSx6ZSgyOCwiUmV2'@;
put 'aWV3IFN0YXR1czoiKSxiZSgpLGdlKDI5LCJzcGFuIiwxNSksemUoMzApLGJlKCkoKSgpLGdlKDMxLCJkaXYiLDE2KSgzMiwiZGl2IiwxMikoMzMsImRpdiIsOCksemUoMzQsIkFjdGlvbnMiKSxiZSgpKCksZ2UoMzUsImRpdiIsMTcpKDM2LCJkaXYiLDE4KSgzNywiYnV0dG9uIiwxOSksSHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksemUoMzgsIiBWaWV3IGJhc2UgdGFibGUgIiksYmUoKSxidCgzOSx2ZXQsMiwyLCJidXR0b24iLDIwKSxnZSg0MCwiYnV0dG9uIiwyMSksSHQoImNsaWNrIixmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBTdChhKSx4dChaZSgpLmdvQmFjaygpKX0pLHplKDQxLCIgRWRpdCBiYXNlIHRhYmxlICIpLGJlKCksZ2UoNDIsImJ1dHRvbiIsMjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCk7cmV0dXJuIHh0KGguZG93bmxvYWQobnVsbD09aC50YWJsZURldGFpbHM/'@;
put 'bnVsbDpoLnRhYmxlRGV0YWlscy5UQUJMRV9JRCkpfSksSnQoNDMsImNsci1pY29uIiwyMyksYmUoKSxnZSg0NCwiY2xyLXRvb2x0aXAiKSxidCg0NSxiZXQsMywxLCJidXR0b24iLDI0KSxiZSgpKCkoKSgpKCksZ2UoNDYsImRpdiIsMjUpLEp0KDQ3LCJob3QtdGFibGUiLDI2KSxiZSgpLEp0'@;
put 'KDQ4LCJkaXYiLDI3KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpO3dlKDE1KSx4cigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5UQUJMRV9JRCwiIiksd2UoNSkseHIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQkFT'@;
put 'RV9UQUJMRSwiICIpLHdlKDUpLHhyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlNVQk1JVFRFRF9PTl9EVFRNLCIgIiksd2UoNCksUGUoIm5nQ2xhc3MiLGxmKDE2LHBldCwiUkVKRUNURUQiPT09KG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJs'@;
put 'ZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCksIkFQUFJPVkVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpKSksd2UoKSx4cigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RB'@;
put 'VFVTX0lELCIgIiksd2UoNyksUGUoImRpc2FibGVkIixhLnJldmVydGluZ0NoYW5nZXMpLHdlKDIpLFBlKCJuZ0lmIiwiWUVTIiE9PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkFMTE9XX1JFU1RPUkUpKSx3ZSgpLFBlKCJkaXNhYmxlZCIsYS5yZXZlcnRpbmdD'@;
put 'aGFuZ2VzKSx3ZSg1KSxQZSgibmdJZiIsIllFUyI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksd2UoMiksUGUoImRhdGEiLGEuaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGEuaG90VGFibGUuY29sSGVhZGVycykoImNvbHVt'@;
put 'bnMiLGEuaG90VGFibGUuY29sdW1ucykoIm1heFJvd3MiLGEuaG90VGFibGUubWF4Um93cykoImhlaWdodCIsYS5ob3RUYWJsZS5oZWlnaHQpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IE1ldD1be3BhdGg6Ijp0'@;
put 'YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNhc1NlcnZpY2U9'@;
put 'VCx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0aW5nczp7fSxs'@;
put 'aWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wfX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVu'@;
put 'KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0du'@;
put 'LnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9ob21lL2ZpbGVzLyIrdGhpcy5ob3RUYWJsZS5kYXRhWzBdLlhMTUFQX0lEKTp0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3Iv'@;
put 'Iit0aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKX1kb3dubG9hZChhKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSxoPWQuc2VydmVyVXJsLGY9ZC5hcHBMb2Msdj10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO3dpbmRvdy5vcGVuKGgrdisiLz9f'@;
put 'cHJvZ3JhbT0iK2YrIi9zZXJ2aWNlcy9hdWRpdG9ycy9nZXRhdWRpdGZpbGUmdGFibGU9IithKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vu'@;
put 'c2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8'@;
put 'fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJlc3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5j'@;
put 'YXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNz'@;
put 'aW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IFkgaW4gaCloJiZmLnB1c2goWSk7Zm9yKGxldCBZPTA7WTxmLmxlbmd0aDtZKyspdi5wdXNoKHtkYXRhOmZbWV19KTtsZXQgVD1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19'@;
put 'O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5jb2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1ULGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5l'@;
put 'dmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRlZD0hMX19fSkoKX1yZXZlcnRDaGFuZ2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0'@;
put 'b3JlX2luOlt7bG9hZF9yZWY6dGhpcy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5yZXN0b3JlX291dCYmdGhpcy5yb3V0ZS5uYXZpZ2F0ZShbIi9zdGFnZSJdKS50aGVuKCgpPT57dGhpcy5yb3V0ZS5uYXZpZ2F0ZShbYC9zdGFnZS8ke2QucmVzdG9yZV9vdXRbMF0uTE9BRFJFRn1gXSl9KX0p'@;
put 'LmZpbmFsbHkoKCk9Pnt0aGlzLnJldmVydGluZ0NoYW5nZXM9ITF9KX1zZXRGb2N1cygpe3NldFRpbWVvdXQoKCk9PntsZXQgYT13aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImFwcHJvdmFsLWJ0biIpO2EmJmEuZm9jdXMoKX0sMjAwKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1m'@;
put 'dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGgxKSxzdChkaCksc3QoR2wpLHN0KHpzKSxzdChNYyksc3QoeWEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN0YWdlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIi'@;
put 'XSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbMSwiY2xyLWNvbC1tZC0xMiIsImNhcmQiXSxbImNsYXNzIiwiaC04MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFs0LCJu'@;
put 'Z0lmIl0sWzEsImgtODB2aCIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjYXJkLWhlYWRlciJd'@;
put 'LFsxLCJjYXJkLXRpdGxlIiwidGV4dC1jZW50ZXIiXSxbMSwibXQtMCJdLFsibmctaWYiLCJsb2FkZWQiLDEsImNsci1yb3ciXSxbMSwiY2FyZC1ibG9jayIsImNsci1jb2wtbWQtNiJdLFsxLCJjYXJkLWhlYWRlciIsInB5LTUiXSxbMSwiYmFzZVRhYmxlTGluayIsMywiY2xpY2siXSxbMSwi'@;
put 'bXQtMTAiXSxbMSwibXQtMTAiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNvbC1tZC02IiwiY2FyZC1ibG9jayJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJp'@;
put 'ZCIsImFwcHJvdmFsLWJ0biIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVp'@;
put 'IiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBi'@;
put 'dG4tZGFuZ2VyIHRleHQtY2VudGVyIG10LTIwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5z'@;
put 'IiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJjZWxscyJdLFsxLCJjYXJkLWZvb3RlciIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImlkIiwiYXBwcm92YWwtYnRuIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwidGV4dC1jZW50'@;
put 'ZXIiLCJtci01aSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1kYW5nZXIiLCJ0ZXh0LWNlbnRlciIsIm10LTIwIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJj'@;
put 'bHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGdlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxidCgyLF9ldCwzLDIsImRpdiIsMikoMyx3ZXQsNDksMTksImRp'@;
put 'diIsMyksYmUoKSgpKSwyJmQmJih3ZSgyKSxQZSgibmdJZiIsIWgubG9hZGVkKSx3ZSgpLFBlKCJuZ0lmIixoLmxvYWRlZCkpfSxkZXBlbmRlbmNpZXM6W1VjLHFpLFphLHIwLFhkLG8yLHQ5LHI5LG45LEx3XSxzdHlsZXM6WyIucmVqZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNm'@;
put 'ODMxMjY7Zm9udC13ZWlnaHQ6NzAwfS5hY2NlcHRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzNmYzQyNDtmb250LXdlaWdodDo3MDB9LmJhc2VUYWJsZUxpbmtbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi10b3A6MTBweDtjb2xvcjojMDA3Y2JifSJdfSl9'@;
put 'cmV0dXJuIGN9KSgpfV07bGV0IENldD0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpb'@;
put 'bW8sczAsV2MuZm9yQ2hpbGQoTWV0KSx4OS5mb3JSb290KCldfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHhldChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDE3KSx6ZSgxLCIgVmlld2VyIHJvd3MgbGltaXQ6ICIpLGdlKDIsInNwYW4iLDcpLHplKDMpLGJlKCkoKSksMiZjKXtjb25zdCBhPVpl'@;
put 'KCk7d2UoMykscHIoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIGtldChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDE3KSx6ZSgxLCIgRWRpdG9yIHJvd3MgbGltaXQ6ICIpLGdlKDIsInNwYW4iLDcpLHplKDMpLGJlKCkoKSksMiZjKXtjb25zdCBh'@;
put 'PVplKCk7d2UoMykscHIoYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIEVldChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDE3KSx6ZSgxLCIgU3RhZ2Ugcm93cyBsaW1pdDogIiksZ2UoMiwic3BhbiIsNyksemUoMyksYmUoKSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9WmUoKTt3ZSgzKSxwcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQpfX1mdW5jdGlvbiBUZXQoYyxsKXtpZigxJmMmJihnZSgwLCJwIiwxNyksemUoMSwiIEhpc3Rvcnkgcm93cyBsaW1pdDogIiksZ2UoMiwic3BhbiIsNyksemUoMyksYmUoKSgpKSwyJmMpe2Nv'@;
put 'bnN0IGE9WmUoKTt3ZSgzKSxwcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIERldChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDE3KSx6ZSgxLCIgU3VibWl0IHJvd3MgbGltaXQ6ICIpLGdlKDIsInNwYW4iLDcpLHplKDMpLGJlKCkoKSksMiZj'@;
put 'KXtjb25zdCBhPVplKCk7d2UoMykscHIoYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpfX1mdW5jdGlvbiBBZXQoYyxsKXtpZigxJmMmJihnZSgwLCJwIiwxNyksemUoMSwiIFRhYmxlcyBpbiBsaWJyYXJ5IGxpbWl0OiAiKSxnZSgyLCJzcGFuIiw3KSx6ZSgzKSxiZSgp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDMpLHByKGEubGljZW5jZVN0YXRlLnZhbHVlLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0KX19ZnVuY3Rpb24gTGV0KGMsbCl7aWYoMSZjJiYoZ2UoMCwicCIsMTcpLHplKDEsIiBWaWV3Ym94ZXMgbGltaXQ6ICIpLGdlKDIsInNwYW4iLDcpLHplKDMp'@;
put 'LGJlKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoMykscHIoYS5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCl9fWZ1bmN0aW9uIElldChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDE3KSx6ZSgxLCIgTGluZWFnZSBkYWlseSBsaW1pdDogIiksZ2UoMiwic3BhbiIsNyksemUoMyks'@;
put 'YmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoKTt3ZSgzKSxwcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0KX19ZnVuY3Rpb24gUmV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2IiwxOSksemUoMSwiIFJlZnJlc2ggRGF0YSBMaW5lYWdlICIpLGdl'@;
put 'KDIsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikucmVmcmVzaERhdGFMaW5lYWdlKCkpfSksemUoMywiIFJFRlJFU0ggIiksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgyKSxQZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5n'@;
put 'RGF0YUxpbmVhZ2UpfX1mdW5jdGlvbiBPZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxidCgxLFJldCw0LDEsImRpdiIsMTgpLGdlKDIsImRpdiIsMTkpLHplKDMsIiBSZWZyZXNoIERhdGEgQ2F0YWxvZyAiKSxnZSg0LCJidXR0b24iLDIwKSxIdCgiY2xpY2siLGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIFN0KGEpLHh0KFplKCkucmVmcmVzaERhdGFDYXRhbG9nKCkpfSksemUoNSwiIFJFRlJFU0ggIiksYmUoKSgpLGdlKDYsImRpdiIsMTkpLHplKDcsIiBEb3dubG9hZCBDb25maWd1cmF0aW9uICIpLGdlKDgsImJ1dHRvbiIsMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gU3QoYSkseHQoWmUoKS5kb3dubG9hZENvbmZpZ3VyYXRpb24oKSl9KSx6ZSg5LCIgRE9XTkxPQUQgIiksYmUoKSgpLGdlKDEwLCJkaXYiLDE5KSx6ZSgxMSwiIFVwZGF0ZSBMaWNlbmNlIEtleSAiKSxnZSgxMiwiYnV0dG9uIiwyMiksemUoMTMsIiBVUERBVEUgIiksYmUoKSgpLGlpKCl9'@;
put 'aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoKSxQZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSx3ZSgzKSxQZSgiY2xyTG9hZGluZyIsYS5yZWZyZXNoaW5nRGF0YUNhdGFsb2cpfX1jb25zdCBQZXQ9W3twYXRoOiIiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs'@;
put 'ZCxoKXt0aGlzLmFwcFNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xMC4yIixhcHBWZXJzaW9uOiJ2Ni44LjEiLnJlcGxhY2UoInYiLCIiKSxidWlsZFRpbWVzdGFtcDp1SygpKHBhcnNlSW50'@;
put 'KCIxNzE0NjY4Njc1OTQ5IikpLmZvcm1hdCgiREQtTU1NLVlZWVkgSEg6TU0iKX0sdGhpcy5odHRwPSJodHRwOiI9PT1sb2NhdGlvbi5wcm90b2NvbCx0aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMSx0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMSx0aGlzLnJlc3BvbnNlPSJObyBy'@;
put 'ZXNwb25zZSIsdGhpcy5yZXNwb25zZU1vZGFsPSExLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMubGljZW5jZUluZm89'@;
put 'dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXRoaXMuYXBwU2VydmljZS5nZXRFbnZpcm9ubWVudEluZm8oKSx0aGlzLmVudmlyb25tZW50SW5mbyYmKHRoaXMuZW52aXJvbm1lbnRJbmZvLkFVVE9FWEVDPWRlY29kZVVSSUNvbXBv'@;
put 'bmVudCh0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQykpfW5nT25Jbml0KCl7fWRvd25sb2FkQ29uZmlndXJhdGlvbigpe2xldCBhPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGQ9YS5zZXJ2ZXJVcmwsaD1hLmFwcExvYyxmPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRp'@;
put 'b25QYXRoKCk7d2luZG93Lm9wZW4oZCtmKyIvP19wcm9ncmFtPSIraCsiL3NlcnZpY2VzL2FkbWluL2V4cG9ydGNvbmZpZyIpfXJlZnJlc2hEYXRhQ2F0YWxvZygpe3RoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNoY2F0'@;
put 'YWxvZyIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmZpbmFsbHkoKCk9Pnt0'@;
put 'aGlzLnJlZnJlc2hpbmdEYXRhQ2F0YWxvZz0hMX0pfXJlZnJlc2hEYXRhTGluZWFnZSgpe3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJhZG1pbi9yZWZyZXNodGFibGVsaW5lYWdlIixudWxsKS50aGVuKGE9Pnt0aGlzLnJlc3BvbnNlPXRo'@;
put 'aXMucGFyc2VSZXNwb25zZShhKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5jYXRjaChhPT57dGhpcy5yZXNwb25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VS'@;
put 'ZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KFdrKSxzdCh5YSksc3QoaDEpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6'@;
put 'YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTMwLHZhcnM6MzQsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0'@;
put 'ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlm'@;
put 'eS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwxLCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1s'@;
put 'Zy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4i'@;
put 'LCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4t'@;
put 'aW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLHplKDMsIlN5c3Rl'@;
put 'bSBpbmZvcm1hdGlvbiIpLGJlKCksSnQoNCwiaHIiLDMpLGdlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksemUoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksSnQoMTAsInNwYW4iLDcpLGJlKCksZ2UoMTEsInAiLDgpLHplKDEyLCIgU1lTU0lURTogIiksZ2Uo'@;
put 'MTMsInNwYW4iLDcpLHplKDE0KSxiZSgpKCksZ2UoMTUsInAiLDgpLHplKDE2LCIgU1lTU0NQTDogIiksZ2UoMTcsInNwYW4iLDcpLHplKDE4KSxiZSgpKCksZ2UoMTksInAiLDgpLHplKDIwLCIgU1lTVENQSVBIT1NUTkFNRTogIiksZ2UoMjEsInNwYW4iLDcpLHplKDIyKSxiZSgpKCksZ2Uo'@;
put 'MjMsInAiLDgpLHplKDI0LCIgU1lTVkxPTkc6ICIpLGdlKDI1LCJzcGFuIiw3KSx6ZSgyNiksYmUoKSgpLGdlKDI3LCJwIiw4KSx6ZSgyOCwiIE1FTVNJWkU6ICIpLGdlKDI5LCJzcGFuIiw3KSx6ZSgzMCksYmUoKSgpLGdlKDMxLCJwIiw4KSx6ZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxn'@;
put 'ZSgzMywic3BhbiIsNyksemUoMzQpLGJlKCkoKSxnZSgzNSwicCIsOCksemUoMzYsIiBTWVNIT1NUTkFNRTogIiksZ2UoMzcsInNwYW4iLDcpLHplKDM4KSxiZSgpKCksZ2UoMzksInAiLDgpLHplKDQwLCIgU1lTSE9TVElORk9MT05HOiAiKSxnZSg0MSwic3BhbiIsNyksemUoNDIpLGJlKCko'@;
put 'KSxnZSg0MywicCIsOCksemUoNDQsIiBTWVNFTkNPRElORzogIiksZ2UoNDUsInNwYW4iLDcpLHplKDQ2KSxiZSgpKCksZ2UoNDcsInAiLDgpLHplKDQ4LCIgQVVUT0VYRUM6ICIpLGdlKDQ5LCJzcGFuIiw3KSx6ZSg1MCksYmUoKSgpLGdlKDUxLCJwIiw4KSx6ZSg1MiwiIERDIEFETUlOIEdS'@;
put 'T1VQOiAiKSxnZSg1Mywic3BhbiIsNyksemUoNTQpLGJlKCkoKSgpLGdlKDU1LCJkaXYiLDkpKDU2LCJkaXYiKSg1NywiaDYiLDYpLHplKDU4LCIgRGF0YSBDb250cm9sbGVyIERldGFpbHMgIiksSnQoNTksInNwYW4iLDcpLGJlKCksZ2UoNjAsInAiLDgpLHplKDYxLCIgQXBwbGljYXRpb24g'@;
put 'dmVyc2lvbjogIiksZ2UoNjIsInNwYW4iLDcpLHplKDYzKSxiZSgpKCksZ2UoNjQsInAiLDgpLHplKDY1LCIgQnVpbGQgdGltZXN0YW1wOiAiKSxnZSg2Niwic3BhbiIsNyksemUoNjcpLGJlKCkoKSxnZSg2OCwicCIsOCksemUoNjksIiBBZGFwdGVyIHZlcnNpb246ICIpLGdlKDcwLCJzcGFu'@;
put 'Iiw3KSx6ZSg3MSksYmUoKSgpLGdlKDcyLCJwIiw4KSx6ZSg3MywiIEhUVFA6ICIpLGdlKDc0LCJzcGFuIiw3KSx6ZSg3NSksYmUoKSgpKCkoKSxnZSg3NiwiZGl2IikoNzcsImg2Iiw2KSx6ZSg3OCwiIExpY2VuY2UgZGV0YWlscyAiKSxKdCg3OSwic3BhbiIsNyksYmUoKSxnZSg4MCwicCIs'@;
put 'OCksemUoODEsIiBWYWxpZCB1bnRpbDogIiksZ2UoODIsInNwYW4iLDcpLHplKDgzKSxiZSgpKCksZ2UoODQsInAiLDgpLHplKDg1LCIgVXNlcnMgYWxsb3dlZDogIiksZ2UoODYsInNwYW4iLDcpLHplKDg3KSxiZSgpKCksZ2UoODgsInAiLDgpLHplKDg5LCIgU2l0ZSBJRHM6ICIpLGdlKDkw'@;
put 'LCJzcGFuIiw3KSx6ZSg5MSksYmUoKSgpLGdlKDkyLCJwIiw4KSx6ZSg5MywiIEZyZWUgVGllcjogIiksZ2UoOTQsInNwYW4iLDcpLHplKDk1KSxiZSgpKCksYnQoOTYseGV0LDQsMSwicCIsMTApKDk3LGtldCw0LDEsInAiLDEwKSg5OCxFZXQsNCwxLCJwIiwxMCkoOTksVGV0LDQsMSwicCIs'@;
put 'MTApKDEwMCxEZXQsNCwxLCJwIiwxMCkoMTAxLEFldCw0LDEsInAiLDEwKSgxMDIsTGV0LDQsMSwicCIsMTApKDEwMyxJZXQsNCwxLCJwIiwxMCksZ2UoMTA0LCJwIiw4KSx6ZSgxMDUsIiBWaWV3Ym94ZXM6ICIpLGdlKDEwNiwic3BhbiIsNyksemUoMTA3KSxiZSgpKCksZ2UoMTA4LCJwIiw4'@;
put 'KSx6ZSgxMDksIiBGaWxlIFVwbG9hZDogIiksZ2UoMTEwLCJzcGFuIiw3KSx6ZSgxMTEpLGJlKCkoKSxnZSgxMTIsInAiLDgpLHplKDExMywiIEVkaXQgcmVjb3JkOiAiKSxnZSgxMTQsInNwYW4iLDcpLHplKDExNSksYmUoKSgpLGdlKDExNiwicCIsOCksemUoMTE3LCIgQWRkIHJlY29yZDog'@;
put 'IiksZ2UoMTE4LCJzcGFuIiw3KSx6ZSgxMTkpLGJlKCkoKSgpKCksSnQoMTIwLCJociIsMyksYnQoMTIxLE9ldCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxiZSgpKCkoKSxnZSgxMjIsImNsci1tb2RhbCIsMTIpLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBx'@;
put 'cihoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGdlKDEyMywiaDMiLDEzKSx6ZSgxMjQsIlJlc3BvbnNlIiksYmUoKSxnZSgxMjUsImRpdiIsMTQpLHplKDEyNiksYmUoKSxnZSgxMjcsImRpdiIsMTUpKDEyOCwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixmdW5j'@;
put 'dGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSx6ZSgxMjksIiBPayAiKSxiZSgpKCkoKSksMiZkJiYod2UoMTQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksd2UoNCkscHIobnVsbD09aC5lbnZpcm9ubWVudEluZm8/'@;
put 'bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSx3ZSg0KSxwcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLHdlKDQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lT'@;
put 'VkxPTkcpLHdlKDQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksd2UoNCkscHIobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksd2UoNCkscHIobnVsbD09aC5lbnZp'@;
put 'cm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksd2UoNCkscHIobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUSU5GT0xPTkcpLHdlKDQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZp'@;
put 'cm9ubWVudEluZm8uU1lTRU5DT0RJTkcpLHdlKDQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpLHdlKDQpLHByKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uRENfQURNSU5fR1JPVVApLHdl'@;
put 'KDkpLHByKGguYXBwSW5mby5hcHBWZXJzaW9uKSx3ZSg0KSxwcihoLmFwcEluZm8uYnVpbGRUaW1lc3RhbXApLHdlKDQpLHByKGguYXBwSW5mby5hZGFwdGVyVmVyc2lvbiksd2UoNCkscHIoaC5odHRwPyJZRVMiOiJOTyIpLHdlKDgpLHByKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxp'@;
put 'Y2VuY2VJbmZvLnZhbGlkX3VudGlsKSx3ZSg0KSxwcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSx3ZSg0KSxwcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSx3ZSg0KSxwcihudWxs'@;
put 'IT1oLmxpY2VuY2VJbmZvJiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksd2UoKSxQZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLHdlKCksUGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dz'@;
put 'X2FsbG93ZWQhPT1oLkluZmluaXR5KSx3ZSgpLFBlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSx3ZSgpLFBlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLHdl'@;
put 'KCksUGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksd2UoKSxQZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSx3ZSgpLFBlKCJuZ0lmIixoLmxpY2VuY2VT'@;
put 'dGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0IT09aC5JbmZpbml0eSksd2UoKSxQZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLHdlKDQpLHByKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksd2UoNCks'@;
put 'cHIoaC5saWNlbmNlU3RhdGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSx3ZSg0KSxwcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLHdlKDQpLHByKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSx3ZSgyKSxQZSgibmdJ'@;
put 'ZiIsMT09PShudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSx3ZSgpLFdyKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksd2UoNCkseHIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbcWksazAsQnUsWXUscjAs'@;
put 'bzJdLHN0eWxlczpbIi5jb250ZW50LWJveFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEyODlweH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250'@;
put 'ZW50LSVDT01QJV06bnRoLWNoaWxkKDIpe21hcmdpbjowIDMwcHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAxMHB4O2JvcmRlci1yYWRpdXM6'@;
put 'NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH0uYWRtaW4tYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMnB4fS5kYXJrW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDAwfUBtZWRp'@;
put 'YSAobWF4LXdpZHRoOiA5OTNweCl7LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250ZW50LSVDT01QJV06bnRoLWNoaWxkKDIpe21hcmdpbjowfS5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4IDB9'@;
put 'fSJdfSl9cmV0dXJuIGN9KSgpfV07bGV0IEZldD0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1w'@;
put 'b3J0czpbV2MuZm9yQ2hpbGQoUGV0KSxXY119KX1yZXR1cm4gY30pKCksSGV0PSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMu'@;
put 'XHUwMjc1aW5qPV9pKHtpbXBvcnRzOlttbyxGZXQsczBdfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIE5ldChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBWZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTMpLEh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiBoLmdyb3VwU2VhcmNoPSIiLHh0KGguZ3JvdXBMaXN0T25GaWx0ZXIoKSl9KSxiZSgpfX1mdW5jdGlvbiBqZXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiw3KSgxLCJkaXYiLDgpKDIsImlu'@;
put 'cHV0Iiw5LDApLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYuZ3JvdXBTZWFyY2gsaCl8fChmLmdyb3VwU2VhcmNoPWgpLHh0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmdyb3VwTGlz'@;
put 'dE9uRmlsdGVyKCkpfSksYmUoKSxidCg0LE5ldCwxLDAsImNsci1pY29uIiwxMCkoNSxWZXQsMSwwLCJjbHItaWNvbiIsMTEpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgpO3dlKDIpLFdyKCJuZ01vZGVsIixkLmdyb3VwU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1'@;
put 'ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEJldChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDE1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1'@;
put 'cm4geHQoWmUoKS5ncm91cE9uQ2xpY2soaCkpfSksZ2UoMSwicCIsMTYpLEp0KDIsImNsci1pY29uIiwxNyksemUoMyksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdCxkPVplKCk7YnIoInRhYmxlLWFjdGl2ZSIsYS5HUk9VUFVSST09PWQuZ3JvdXBVcmkpLHdlKDMpLHhy'@;
put 'KCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiBZZXQoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLEJldCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxpaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoKSxQZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gemV0KGMsbCl7'@;
put 'MSZjJiYoZ2UoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLHplKDIsIiBMb2FkaW5nLi4uICIpLGJlKCkoKSl9ZnVuY3Rpb24gVWV0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI0KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI1KSg2LCJw'@;
put 'IiwyNikoNywiYiIpLHplKDgpLGJlKCkoKSgpKCksZ2UoOSwidHIiKSgxMCwidGQiLDI1KSgxMSwiaSIpLHplKDEyKSxiZSgpKCkoKSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoOCkscHIoYS5ncm91cE5hbWUpLHdlKDQpLHByKGEuZ3JvdXBEZXNjfHwibm8gZGVzY3JpcHRpb24i'@;
put 'KX19ZnVuY3Rpb24gWmV0KGMsbCl7MSZjJiYoZ2UoMCwiaDUiKSx6ZSgxLCJObyBNZW1iZXJzIFByZXNlbnQiKSxiZSgpKX1mdW5jdGlvbiBXZXQoYyxsKXsxJmMmJihyaSgwKSxnZSgxLCJ0ZCIsMzEpKDIsImIiKSx6ZSgzLCJOQU1FIiksYmUoKSgpLGdlKDQsInRkIiwzMSkoNSwiYiIpLHpl'@;
put 'KDYsIkVNQUlMIiksYmUoKSgpLGdlKDcsInRkIiwzMSkoOCwiYiIpLHplKDksIkNSRUFURUQiKSxiZSgpKCksZ2UoMTAsInRkIiwzMikoMTEsImIiKSx6ZSgxMiwiVVBEQVRFRCIpLGJlKCkoKSxpaSgpKX1mdW5jdGlvbiBHZXQoYyxsKXsxJmMmJihyaSgwKSxnZSgxLCJ0ZCIsMzEpKDIsImIi'@;
put 'KSx6ZSgzLCJJRCIpLGJlKCkoKSxnZSg0LCJ0ZCIsMzEpKDUsImIiKSx6ZSg2LCJESVNQTEFZIE5BTUUiKSxiZSgpKCksZ2UoNywidGQiLDMxKSg4LCJiIiksemUoOSwiVVNFUiBOQU1FIiksYmUoKSgpLGlpKCkpfWZ1bmN0aW9uICRldChjLGwpe2lmKDEmYyYmKHJpKDApLGdlKDEsInRkIiwz'@;
put 'MiksemUoMiksYmUoKSxnZSgzLCJ0ZCIsMzIpLHplKDQpLGJlKCksZ2UoNSwidGQiLDMyKSx6ZSg2KSxiZSgpLGdlKDcsInRkIiwzMiksemUoOCksYmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoMikscHIoYS5NRU1CRVJOQU1FKSx3ZSgyKSxwcihhLkVNQUlMKSx3'@;
put 'ZSgyKSxwcihhLk1FTUJFUkNSRUFURUQpLHdlKDIpLHByKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIHFldChjLGwpe2lmKDEmYyYmKHJpKDApLGdlKDEsInRkIiwzMiksemUoMiksYmUoKSxnZSgzLCJ0ZCIsMzIpLHplKDQpLGJlKCksZ2UoNSwidGQiLDMyKSx6ZSg2KSxiZSgpLGlpKCkp'@;
put 'LDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDt3ZSgyKSxwcihhLklEKSx3ZSgyKSxwcihhLkRJU1BMQVlOQU1FKSx3ZSgyKSxwcihhLlVTRVJOQU1FKX19ZnVuY3Rpb24gS2V0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiLDMzKSxidCgxLCRldCw5LDQsIm5nLWNvbnRhaW5lciIsNikoMixx'@;
put 'ZXQsNywzLCJuZy1jb250YWluZXIiLDYpLGJlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKDQpO1BlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iKyhhLlVSSU1FTXx8YS5JRCkpLHdlKCksUGUoIm5nSWYiLGQuc2VydmVyVHlwZT09PWQuU2VydmVyVHlwZS5T'@;
put 'YXM5KSx3ZSgpLFBlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzanMpfX1mdW5jdGlvbiBYZXQoYyxsKXtpZigxJmMmJihnZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSxidCgzLFdldCwxMywwLCJuZy1jb250YWluZXIiLDYpKDQsR2V0LDEwLDAsIm5n'@;
put 'LWNvbnRhaW5lciIsNiksYmUoKSgpLGdlKDUsInRib2R5IiksYnQoNixLZXQsMywzLCJ0ciIsMzApLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKDMpLFBlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksd2UoKSxQZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09'@;
put 'YS5TZXJ2ZXJUeXBlLlNhc2pzKSx3ZSgyKSxQZSgibmdGb3JPZiIsYS5ncm91cE1lbWJlcnMpfX1mdW5jdGlvbiBKZXQoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSgxLCJoMyIpLHplKDIpLGJlKCksYnQoMyxaZXQsMiwwLCJoNSIsNiksZ2UoNCwiZGl2IiwyNyksYnQoNSxYZXQsNywzLCJ0'@;
put 'YWJsZSIsMjgpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDIpLHhyKCJNRU1CRVJTICgiLGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLHdlKCksUGUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksd2UoMiksUGUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0'@;
put 'aW9uIFFldChjLGwpezEmYyYmKGdlKDAsImg1IiksemUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksYmUoKSl9ZnVuY3Rpb24gZXR0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiLDMzKSgxLCJ0ZCIsMzIpLHplKDIpLGJlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1BlKCJyb3V0ZXJM'@;
put 'aW5rIiwiL3ZpZXcvdXNlcm5hdi91c2Vycy8iK2EuTUVNQkVSSUQpLHdlKDIpLHByKGEuTUVNQkVSTkFNRSl9fWZ1bmN0aW9uIHR0dChjLGwpe2lmKDEmYyYmKGdlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIikoNCwiYiIpLHplKDUpLGJlKCkoKSgpKCksZ2UoNiwi'@;
put 'dGJvZHkiKSxidCg3LGV0dCwzLDIsInRyIiwzMCksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoNSkseHIoIk1FTUJFUlMgKCIsYS5ncm91cE1lbWJlckNvdW50LCIpIiksd2UoMiksUGUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gbnR0KGMsbCl7aWYoMSZjJiYo'@;
put 'Z2UoMCwiZGl2IikoMSwiaDMiKSx6ZSgyKSxiZSgpLGJ0KDMsUWV0LDIsMCwiaDUiLDYpLGdlKDQsImRpdiIsMjcpLGJ0KDUsdHR0LDgsMiwidGFibGUiLDI4KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgyKSxwcihhLmdyb3VwTmFtZSksd2UoKSxQZSgibmdJZiIsMD09YS5ncm91'@;
put 'cE1lbWJlckNvdW50KSx3ZSgyKSxQZSgibmdJZiIsMCE9YS5ncm91cE1lbWJlckNvdW50KX19ZnVuY3Rpb24gcnR0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiksYnQoMSxVZXQsMTMsMiwiZGl2IiwyMCksZ2UoMiwiZGl2IiwyMSkoMywiZGl2IiwyMikoNCwiZGl2IiwyMyksYnQoNSxKZXQs'@;
put 'NiwzLCJkaXYiLDYpKDYsbnR0LDYsMywiZGl2Iiw2KSxKdCg3LCJiciIpLGJlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSx3ZSg0KSxQZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJU'@;
put 'eXBlLlNhc1ZpeWEpLHdlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKX19bGV0IFdjZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5oZWxwZXJTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0'@;
put 'aGlzLmxvY2F0aW9uPWYsdGhpcy5yb3V0ZT12LHRoaXMuZ3JvdXBTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbVVSST0iIix0aGlzLmdyb3VwVXJpPSIiLHRoaXMuZ3JvdXBOYW1lPSIiLHRoaXMuZ3JvdXBEZXNjPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IGVkLlNB'@;
put 'U2pzQ29uZmlnLHRoaXMuaXNWaXlhPSExLHRoaXMubG9hZGluZz0hMSx0aGlzLlNlcnZlclR5cGU9Q3UuWSx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLCJTQVNW'@;
put 'SVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSYmKHRoaXMuaXNWaXlhPSEwKX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvZ3JvdXBzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFt'@;
put 'UHJlc2VudD0hMCx0aGlzLnBhcmFtVVJJPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSksR24udXNlcm5hdi5ncm91cExpc3QmJiF0aGlzLnBhcmFtUHJlc2VudD8odGhpcy5ncm91cHM9R24udXNlcm5hdi5ncm91cExpc3QsdGhpcy5ncm91cFNlYXJjaD1Hbi51c2VybmF2Lmdyb3Vw'@;
put 'U2VhcmNoKToodm9pZCAwPT09R24udXNlcm5hdi5ncm91cExpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pz'@;
put 'b24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7R1JPVVBVUkk6Zi5pZCxHUk9VUE5BTUU6Zi5uYW1lLEdST1VQREVTQzpmLmRlc2NyaXB0aW9ufSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1oLEduLnVzZXJu'@;
put 'YXYuZ3JvdXBMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL2dldGdyb3VwcyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMuZ3JvdXBzPWEuZ3JvdXBzLEduLnVzZXJuYXYuZ3JvdXBMaXN0PWEuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Hbi51c2Vy'@;
put 'bmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUduLnVzZXJuYXYuZ3JvdXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBh'@;
put 'cmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6'@;
put 'Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5h'@;
put 'di91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5zYXNtZW1iZXJzLHRoaXMuZ3JvdXBNZW1iZXJDb3VudD1kLnNhc21lbWJlcnMubGVuZ3RoLHZvaWQgMCE9PWQuc2FzbWVtYmVyc1swXSYm'@;
put 'KHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuc2FzbWVtYmVyc1swXS5VUklNRU18fHRoaXMucGFyYW1VUkksdGhpcy5ncm91cE5hbWU9ZC5zYXNtZW1iZXJzWzBdLkdST1VQTkFNRSx0aGlzLmdyb3VwRGVzYz1kLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1l'@;
put 'fHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91cFNlYXJjaCwiR1JPVVBOQU1FIiksR24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdy'@;
put 'b3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6'@;
put 'ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9'@;
put 'fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKFQ9'@;
put 'Pih7TUVNQkVSTkFNRTpULm5hbWUsTUVNQkVSSUQ6VC5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdS'@;
put 'T1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDLHRoaXMuZ3JvdXBNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291'@;
put 'bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aH0pfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoeWEpLHN0KGN1KSxzdCh6cyksc3QocTEpLHN0KE1jKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFw'@;
put 'cC1ncm91cCJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Nyx2YXJzOjQsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsxLCJzaWRlYmFyLWhlaWdodCJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9y'@;
put 'T2YiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBHcm91cHMiLCJu'@;
put 'YW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwi'@;
put 'dGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXJzIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbImNs'@;
put 'YXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwiZ3JvdXAtZGF0YSJdLFsxLCJ0YWJsZSIsImdyb3VwLWluZm8iXSxbMSwibGVmdCJdLFsxLCJncm91cC1pbmZvLXRleHQiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFz'@;
put 'cyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFszLCJyb3V0ZXJMaW5rIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQm'@;
put 'JihnZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxidCgyLGpldCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsWWV0LDIsMSwibmctY29udGFpbmVyIiwzKSxiZSgpKCksZ2UoNCwiZGl2Iiw0KSxidCg1LHpldCwzLDAsImRpdiIsNSkoNixydHQsOCwzLCJkaXYiLDYpLGJlKCkp'@;
put 'LDImZCYmKHdlKDIpLFBlKCJuZ0lmIixoLmdyb3Vwcyksd2UoKSxQZSgibmdGb3JPZiIsaC5ncm91cHMpLHdlKDIpLFBlKCJuZ0lmIixoLmxvYWRpbmcpLHdlKCksUGUoIm5nSWYiLGguZ3JvdXBNZW1iZXJzJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbTHMscWksazAsVGwsY2Esb2Es'@;
put 'cmgsdWQsWmEsYWQseXBdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9Lmdyb3VwLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9Lmdyb3VwLWluZm9bX25nY29udGVudC0lQ09N'@;
put 'UCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGln'@;
put 'bjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDJweCA1cHggI2RhZDdkN30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01Q'@;
put 'JV17bWluLWhlaWdodDphdXRvfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5ncm91cC1kYXRhW19uZ2Nv'@;
put 'bnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29u'@;
put 'dGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNr'@;
put 'Z3JvdW5kLWNvbG9yOiNlNmU2ZTY7Y3Vyc29yOnBvaW50ZXJ9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3c6YXV0b31AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6'@;
put 'dW5zZXQhaW1wb3J0YW50fX0iXX0pfXJldHVybiBjfSkoKTtmdW5jdGlvbiBpdHQoKXt9ZnVuY3Rpb24galUoYyl7cmV0dXJuIG51bGw9PWM/aXR0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gR2NlKGMpe3JldHVybiBudWxsPT1jP1tdOkFycmF5'@;
put 'LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIHN0dCgpe3JldHVybltdfWZ1bmN0aW9uICRjZShjKXtyZXR1cm4gbnVsbD09Yz9zdHQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBxY2UoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gS2NlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgY3R0PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIGR0dCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkfXZhciBmdHQ9QXJy'@;
put 'YXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBwdHQoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBYY2UoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gZEEoYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25lckRvY3VtZW50LHRo'@;
put 'aXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gYnR0KGMsbCxhLGQsaCxmKXtmb3IodmFyIFQsdj0wLFk9bC5sZW5ndGgscmU9Zi5sZW5ndGg7djxyZTsrK3YpKFQ9bFt2XSk/KFQuX19k'@;
put 'YXRhX189Zlt2XSxkW3ZdPVQpOmFbdl09bmV3IGRBKGMsZlt2XSk7Zm9yKDt2PFk7Kyt2KShUPWxbdl0pJiYoaFt2XT1UKX1mdW5jdGlvbiB3dHQoYyxsLGEsZCxoLGYsdil7dmFyIFQsWSxXZSxyZT1uZXcgTWFwLGZlPWwubGVuZ3RoLF9lPWYubGVuZ3RoLGtlPW5ldyBBcnJheShmZSk7Zm9y'@;
put 'KFQ9MDtUPGZlOysrVCkoWT1sW1RdKSYmKGtlW1RdPVdlPXYuY2FsbChZLFkuX19kYXRhX18sVCxsKSsiIixyZS5oYXMoV2UpP2hbVF09WTpyZS5zZXQoV2UsWSkpO2ZvcihUPTA7VDxfZTsrK1QpV2U9di5jYWxsKGMsZltUXSxULGYpKyIiLChZPXJlLmdldChXZSkpPyhkW1RdPVksWS5fX2Rh'@;
put 'dGFfXz1mW1RdLHJlLmRlbGV0ZShXZSkpOmFbVF09bmV3IGRBKGMsZltUXSk7Zm9yKFQ9MDtUPGZlOysrVCkoWT1sW1RdKSYmcmUuZ2V0KGtlW1RdKT09PVkmJihoW1RdPVkpfWZ1bmN0aW9uIE10dChjKXtyZXR1cm4gYy5fX2RhdGFfX31mdW5jdGlvbiBTdHQoYyl7cmV0dXJuIm9iamVjdCI9'@;
put 'PXR5cGVvZiBjJiYibGVuZ3RoImluIGM/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIEF0dChjLGwpe3JldHVybiBjPGw/LTE6Yz5sPzE6Yz49bD8wOk5hTn1kQS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmRBLGFwcGVuZENoaWxkOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5z'@;
put 'ZXJ0QmVmb3JlKGMsdGhpcy5fbmV4dCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihjLGwpe3JldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGMsbCl9LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX3BhcmVudC5xdWVyeVNlbGVjdG9yKGMpfSxxdWVyeVNlbGVj'@;
put 'dG9yQWxsOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChjKX19O3ZhciBCVT0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7Y29uc3QgSmNlPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDpCVSx4bGluazoiaHR0cDov'@;
put 'L3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIGhBKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+PTAmJiJ4'@;
put 'bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLEpjZS5oYXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6SmNlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gSHR0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiBOdHQoYyl7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBWdHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiBqdHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0'@;
put 'dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gQnR0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlvbiBZdHQo'@;
put 'YyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gUWNlKGMpe3JldHVybiBj'@;
put 'Lm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31mdW5jdGlvbiBVdHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gWnR0KGMsbCxhKXtyZXR1cm4g'@;
put 'ZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24gV3R0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5zZXRQcm9w'@;
put 'ZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIEs5KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8UWNlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uICR0dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUgdGhpc1tj'@;
put 'XX19ZnVuY3Rpb24gcXR0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBLdHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24gZXVlKGMp'@;
put 'e3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBZVShjKXtyZXR1cm4gYy5jbGFzc0xpc3R8fG5ldyB0dWUoYyl9ZnVuY3Rpb24gdHVlKGMpe3RoaXMuX25vZGU9Yyx0aGlzLl9uYW1lcz1ldWUoYy5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX1mdW5jdGlvbiBudWUo'@;
put 'YyxsKXtmb3IodmFyIGE9WVUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLmFkZChsW2RdKX1mdW5jdGlvbiBydWUoYyxsKXtmb3IodmFyIGE9WVUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBKdHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7bnVl'@;
put 'KHRoaXMsYyl9fWZ1bmN0aW9uIFF0dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtydWUodGhpcyxjKX19ZnVuY3Rpb24gZW50KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP251ZTpydWUpKHRoaXMsYyl9fWZ1bmN0aW9uIG5udCgpe3RoaXMudGV4dENvbnRl'@;
put 'bnQ9IiJ9ZnVuY3Rpb24gcm50KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24gaW50KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9uIHNudCgpe3Ro'@;
put 'aXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIGFudChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlvbiBsbnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1bmN0aW9uIHVu'@;
put 'dCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBobnQoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1mdW5jdGlvbiBw'@;
put 'bnQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGE9PT1CVSYmbC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJPT09QlU/bC5jcmVhdGVFbGVtZW50KGMpOmwuY3JlYXRlRWxlbWVudE5TKGEsYyl9fWZ1'@;
put 'bmN0aW9uIG1udChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBpdWUoYyl7dmFyIGw9aEEoYyk7cmV0dXJuKGwubG9jYWw/bW50OnBudCkobCl9ZnVuY3Rpb24gX250KCl7cmV0'@;
put 'dXJuIG51bGx9ZnVuY3Rpb24geW50KCl7dmFyIGM9dGhpcy5wYXJlbnROb2RlO2MmJmMucmVtb3ZlQ2hpbGQodGhpcyl9ZnVuY3Rpb24gd250KCl7dmFyIGM9dGhpcy5jbG9uZU5vZGUoITEpLGw9dGhpcy5wYXJlbnROb2RlO3JldHVybiBsP2wuaW5zZXJ0QmVmb3JlKGMsdGhpcy5uZXh0U2li'@;
put 'bGluZyk6Y31mdW5jdGlvbiBNbnQoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMCksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIEVudChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLl9fb247aWYo'@;
put 'bCl7Zm9yKHZhciBmLGE9MCxkPS0xLGg9bC5sZW5ndGg7YTxoOysrYSlmPWxbYV0sYy50eXBlJiZmLnR5cGUhPT1jLnR5cGV8fGYubmFtZSE9PWMubmFtZT9sWysrZF09Zjp0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZi50eXBlLGYubGlzdGVuZXIsZi5vcHRpb25zKTsrK2Q/bC5sZW5ndGg9'@;
put 'ZDpkZWxldGUgdGhpcy5fX29ufX19ZnVuY3Rpb24gVG50KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaCxkPXRoaXMuX19vbixmPWZ1bmN0aW9uIHhudChjKXtyZXR1cm4gZnVuY3Rpb24obCl7Yy5jYWxsKHRoaXMsbCx0aGlzLl9fZGF0YV9fKX19KGwpO2lmKGQpZm9yKHZhciB2PTAs'@;
put 'VD1kLmxlbmd0aDt2PFQ7Kyt2KWlmKChoPWRbdl0pLnR5cGU9PT1jLnR5cGUmJmgubmFtZT09PWMubmFtZSlyZXR1cm4gdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyLGgub3B0aW9ucyksdGhpcy5hZGRFdmVudExpc3RlbmVyKGgudHlwZSxoLmxpc3RlbmVyPWYs'@;
put 'aC5vcHRpb25zPWEpLHZvaWQoaC52YWx1ZT1sKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoYy50eXBlLGYsYSksaD17dHlwZTpjLnR5cGUsbmFtZTpjLm5hbWUsdmFsdWU6bCxsaXN0ZW5lcjpmLG9wdGlvbnM6YX0sZD9kLnB1c2goaCk6dGhpcy5fX29uPVtoXX19ZnVuY3Rpb24gb3VlKGMsbCxh'@;
put 'KXt2YXIgZD1RY2UoYyksaD1kLkN1c3RvbUV2ZW50OyJmdW5jdGlvbiI9PXR5cGVvZiBoP2g9bmV3IGgobCxhKTooaD1kLmRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGE/KGguaW5pdEV2ZW50KGwsYS5idWJibGVzLGEuY2FuY2VsYWJsZSksaC5kZXRhaWw9YS5kZXRhaWwpOmguaW5p'@;
put 'dEV2ZW50KGwsITEsITEpKSxjLmRpc3BhdGNoRXZlbnQoaCl9ZnVuY3Rpb24gQW50KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG91ZSh0aGlzLGMsbCl9fWZ1bmN0aW9uIExudChjLGwpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBvdWUodGhpcyxjLGwuYXBwbHkodGhpcyxhcmd1'@;
put 'bWVudHMpKX19dHVlLnByb3RvdHlwZT17YWRkOmZ1bmN0aW9uKGMpe3RoaXMuX25hbWVzLmluZGV4T2YoYyk8MCYmKHRoaXMuX25hbWVzLnB1c2goYyksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0scmVtb3ZlOmZ1bmN0aW9uKGMpe3Zh'@;
put 'ciBsPXRoaXMuX25hbWVzLmluZGV4T2YoYyk7bD49MCYmKHRoaXMuX25hbWVzLnNwbGljZShsLDEpLHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKCJjbGFzcyIsdGhpcy5fbmFtZXMuam9pbigiICIpKSl9LGNvbnRhaW5zOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKGMp'@;
put 'Pj0wfX07dmFyIHpVPVtudWxsXTtmdW5jdGlvbiBIMChjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlvbiBzdWUoKXtyZXR1cm4gbmV3IEgwKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0selUpfUgwLnByb3RvdHlwZT1zdWUucHJvdG90eXBlPXtjb25zdHJ1'@;
put 'Y3RvcjpIMCxzZWxlY3Q6ZnVuY3Rpb24gb3R0KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1qVShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgWSxyZSxmPWxbaF0sdj1mLmxlbmd0aCxUPWRbaF09bmV3'@;
put 'IEFycmF5KHYpLGZlPTA7ZmU8djsrK2ZlKShZPWZbZmVdKSYmKHJlPWMuY2FsbChZLFkuX19kYXRhX18sZmUsZikpJiYoIl9fZGF0YV9fImluIFkmJihyZS5fX2RhdGFfXz1ZLl9fZGF0YV9fKSxUW2ZlXT1yZSk7cmV0dXJuIG5ldyBIMChkLHRoaXMuX3BhcmVudHMpfSxzZWxlY3RBbGw6ZnVu'@;
put 'Y3Rpb24gbHR0KGMpe2M9ImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gYXR0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBHY2UoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0oYyk6JGNlKGMpO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1sLmxlbmd0aCxkPVtdLGg9W10sZj0w'@;
put 'O2Y8YTsrK2YpZm9yKHZhciBZLHY9bFtmXSxUPXYubGVuZ3RoLHJlPTA7cmU8VDsrK3JlKShZPXZbcmVdKSYmKGQucHVzaChjLmNhbGwoWSxZLl9fZGF0YV9fLHJlLHYpKSxoLnB1c2goWSkpO3JldHVybiBuZXcgSDAoZCxoKX0sc2VsZWN0Q2hpbGQ6ZnVuY3Rpb24gaHR0KGMpe3JldHVybiB0'@;
put 'aGlzLnNlbGVjdChudWxsPT1jP2R0dDpmdW5jdGlvbiB1dHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN0dC5jYWxsKHRoaXMuY2hpbGRyZW4sYyl9fSgiZnVuY3Rpb24iPT10eXBlb2YgYz9jOktjZShjKSkpfSxzZWxlY3RDaGlsZHJlbjpmdW5jdGlvbiBndHQoYyl7cmV0dXJuIHRo'@;
put 'aXMuc2VsZWN0QWxsKG51bGw9PWM/cHR0OmZ1bmN0aW9uIG10dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZnR0LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6S2NlKGMpKSl9LGZpbHRlcjpmdW5jdGlvbiBfdHQoYyl7ImZ1bmN0aW9uIiE9dHlw'@;
put 'ZW9mIGMmJihjPXFjZShjKSk7Zm9yKHZhciBsPXRoaXMuX2dyb3VwcyxhPWwubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7KytoKWZvcih2YXIgWSxmPWxbaF0sdj1mLmxlbmd0aCxUPWRbaF09W10scmU9MDtyZTx2OysrcmUpKFk9ZltyZV0pJiZjLmNhbGwoWSxZLl9fZGF0YV9fLHJl'@;
put 'LGYpJiZULnB1c2goWSk7cmV0dXJuIG5ldyBIMChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIEN0dChjLGwpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsTXR0KTt2YXIgYT1sP3d0dDpidHQsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBz'@;
put 'OyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiB5dHQoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLFQ9bmV3IEFycmF5KGYpLFk9bmV3IEFycmF5KGYpLHJlPTA7cmU8ZjsrK3JlKXt2YXIgZmU9ZFty'@;
put 'ZV0sX2U9aFtyZV0sa2U9X2UubGVuZ3RoLFdlPVN0dChjLmNhbGwoZmUsZmUmJmZlLl9fZGF0YV9fLHJlLGQpKSxKZT1XZS5sZW5ndGgsdHQ9VFtyZV09bmV3IEFycmF5KEplKSx5dD12W3JlXT1uZXcgQXJyYXkoSmUpO2EoZmUsX2UsdHQseXQsWVtyZV09bmV3IEFycmF5KGtlKSxXZSxsKTtm'@;
put 'b3IodmFyIHNuLE1uLEx0PTAsb249MDtMdDxKZTsrK0x0KWlmKHNuPXR0W0x0XSl7Zm9yKEx0Pj1vbiYmKG9uPUx0KzEpOyEoTW49eXRbb25dKSYmKytvbjxKZTspO3NuLl9uZXh0PU1ufHxudWxsfX1yZXR1cm4odj1uZXcgSDAodixkKSkuX2VudGVyPVQsdi5fZXhpdD1ZLHZ9LGVudGVyOmZ1'@;
put 'bmN0aW9uIHZ0dCgpe3JldHVybiBuZXcgSDAodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoWGNlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiB4dHQoKXtyZXR1cm4gbmV3IEgwKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoWGNlKSx0aGlzLl9wYXJlbnRzKX0sam9p'@;
put 'bjpmdW5jdGlvbiBrdHQoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rp'@;
put 'b24oKSksbnVsbD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gRXR0KGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWlu'@;
put 'KGgsZC5sZW5ndGgpLFQ9bmV3IEFycmF5KGgpLFk9MDtZPHY7KytZKWZvcih2YXIgV2UscmU9YVtZXSxmZT1kW1ldLF9lPXJlLmxlbmd0aCxrZT1UW1ldPW5ldyBBcnJheShfZSksSmU9MDtKZTxfZTsrK0plKShXZT1yZVtKZV18fGZlW0plXSkmJihrZVtKZV09V2UpO2Zvcig7WTxoOysrWSlU'@;
put 'W1ldPWFbWV07cmV0dXJuIG5ldyBIMChULHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gT250KCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uIFR0dCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9'@;
put 'ZC5sZW5ndGgtMSxmPWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gRHR0KGMpe2Z1bmN0aW9uIGwoX2Usa2Upe3JldHVy'@;
put 'biBfZSYma2U/YyhfZS5fX2RhdGFfXyxrZS5fX2RhdGFfXyk6IV9lLSFrZX1jfHwoYz1BdHQpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciByZSx2PWFbZl0sVD12Lmxlbmd0aCxZPWhbZl09bmV3IEFycmF5KFQp'@;
put 'LGZlPTA7ZmU8VDsrK2ZlKShyZT12W2ZlXSkmJihZW2ZlXT1yZSk7WS5zb3J0KGwpfXJldHVybiBuZXcgSDAoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIEx0dCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxs'@;
put 'LGFyZ3VtZW50cyksdGhpc30sbm9kZXM6ZnVuY3Rpb24gSXR0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gUnR0KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8Zjsr'@;
put 'K2gpe3ZhciB2PWRbaF07aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBPdHQoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBQdHQoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gRnR0KGMp'@;
put 'e2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIFQsaD1sW2FdLGY9MCx2PWgubGVuZ3RoO2Y8djsrK2YpKFQ9aFtmXSkmJmMuY2FsbChULFQuX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiB6dHQoYyxsKXt2YXIgYT1o'@;
put 'QShjKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/TnR0Okh0dDoiZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgbD9hLmxvY2FsP1l0dDpCdHQ6YS5sb2NhbD9qdHQ6VnR0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gR3R0KGMsbCxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9VdHQ6ImZ1bmN0aW9uIj09dHlwZW9mIGw/V3R0Olp0dCkoYyxsLGE/PyIi'@;
put 'KSk6SzkodGhpcy5ub2RlKCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIFh0dChjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sPyR0dDoiZnVuY3Rpb24iPT10eXBlb2YgbD9LdHQ6cXR0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlv'@;
put 'biB0bnQoYyxsKXt2YXIgYT1ldWUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9WVUodGhpcy5ub2RlKCkpLGg9LTEsZj1hLmxlbmd0aDsrK2g8ZjspaWYoIWQuY29udGFpbnMoYVtoXSkpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIGw/ZW50Omw/SnR0OlF0dCkoYSxsKSl9LHRleHQ6ZnVuY3Rpb24gb250KGMpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaChudWxsPT1jP25udDooImZ1bmN0aW9uIj09dHlwZW9mIGM/aW50OnJudCkoYykpOnRoaXMubm9kZSgpLnRleHRDb250ZW50fSxodG1s'@;
put 'OmZ1bmN0aW9uIGNudChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9zbnQ6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2xudDphbnQpKGMpKTp0aGlzLm5vZGUoKS5pbm5lckhUTUx9LHJhaXNlOmZ1bmN0aW9uIGRudCgpe3JldHVybiB0aGlzLmVhY2godW50KX0s'@;
put 'bG93ZXI6ZnVuY3Rpb24gZm50KCl7cmV0dXJuIHRoaXMuZWFjaChobnQpfSxhcHBlbmQ6ZnVuY3Rpb24gZ250KGMpe3ZhciBsPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6aXVlKGMpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKGwuYXBwbHko'@;
put 'dGhpcyxhcmd1bWVudHMpKX0pfSxpbnNlcnQ6ZnVuY3Rpb24gdm50KGMsbCl7dmFyIGE9ImZ1bmN0aW9uIj09dHlwZW9mIGM/YzppdWUoYyksZD1udWxsPT1sP19udDoiZnVuY3Rpb24iPT10eXBlb2YgbD9sOmpVKGwpO3JldHVybiB0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlz'@;
put 'Lmluc2VydEJlZm9yZShhLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxkLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0scmVtb3ZlOmZ1bmN0aW9uIGJudCgpe3JldHVybiB0aGlzLmVhY2goeW50KX0sY2xvbmU6ZnVuY3Rpb24gQ250KGMpe3JldHVybiB0aGlzLnNlbGVjdChjP01udDp3'@;
put 'bnQpfSxkYXR1bTpmdW5jdGlvbiBTbnQoYyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5wcm9wZXJ0eSgiX19kYXRhX18iLGMpOnRoaXMubm9kZSgpLl9fZGF0YV9ffSxvbjpmdW5jdGlvbiBEbnQoYyxsLGEpe3ZhciBoLHYsZD1mdW5jdGlvbiBrbnQoYyl7cmV0dXJuIGMudHJpbSgp'@;
put 'LnNwbGl0KC9efFxzKy8pLm1hcChmdW5jdGlvbihsKXt2YXIgYT0iIixkPWwuaW5kZXhPZigiLiIpO3JldHVybiBkPj0wJiYoYT1sLnNsaWNlKGQrMSksbD1sLnNsaWNlKDAsZCkpLHt0eXBlOmwsbmFtZTphfX0pfShjKyIiKSxmPWQubGVuZ3RoO2lmKCEoYXJndW1lbnRzLmxlbmd0aDwyKSl7'@;
put 'Zm9yKFQ9bD9UbnQ6RW50LGg9MDtoPGY7KytoKXRoaXMuZWFjaChUKGRbaF0sbCxhKSk7cmV0dXJuIHRoaXN9dmFyIFQ9dGhpcy5ub2RlKCkuX19vbjtpZihUKWZvcih2YXIgZmUsWT0wLHJlPVQubGVuZ3RoO1k8cmU7KytZKWZvcihoPTAsZmU9VFtZXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5'@;
put 'cGU9PT1mZS50eXBlJiZ2Lm5hbWU9PT1mZS5uYW1lKXJldHVybiBmZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gSW50KGMsbCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/TG50OkFudCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKlJudCgpe2Zv'@;
put 'cih2YXIgYz10aGlzLl9ncm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKHY9ZFtoXSkmJih5aWVsZCB2KX19O2NvbnN0IGQ2PXN1ZTtmdW5jdGlvbiBVVShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IEgw'@;
put 'KFtkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGMpXSxbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSk6bmV3IEgwKFtHY2UoYyldLHpVKX1mdW5jdGlvbiBPcyhjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/bmV3IEgwKFtbZG9jdW1lbnQucXVlcnlTZWxlY3RvcihjKV1dLFtkb2N1bWVu'@;
put 'dC5kb2N1bWVudEVsZW1lbnRdKTpuZXcgSDAoW1tjXV0selUpfXZhciBQbnQ9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gYXVlKCl7Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRl'@;
put 'c3QoZCkpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IGZBKGEpfWZ1bmN0aW9uIGZBKGMpe3RoaXMuXz1jfWZ1bmN0aW9uIEhudChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJl'@;
put 'dHVybiBoLnZhbHVlfWZ1bmN0aW9uIGx1ZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2NbZF09UG50LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2'@;
put 'YWx1ZTphfSksY31mQS5wcm90b3R5cGU9YXVlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ZkEsb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMuXyxkPWZ1bmN0aW9uIEZudChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1h'@;
put 'LmluZGV4T2YoIi4iKTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtp'@;
put 'ZighKGFyZ3VtZW50cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1sdWUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxs'@;
put 'PT1sKWZvcihoIGluIGEpYVtoXT1sdWUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djspaWYoKGg9KGM9ZFtmXSkudHlwZSkmJihoPUhudChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGlu'@;
put 'IGwpY1thXT1sW2FdLnNsaWNlKCk7cmV0dXJuIG5ldyBmQShjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJv'@;
put 'cGVydHkoYykpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoInVua25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5hcHBseShsLGEpfX07Y29uc3QgWlU9YXVlO3ZhciBwQSx1TSxYOT0wLGxNPTAsY009MCxjdWU9MWUzLG1BPTAsaDY9MCxnQT0wLGRNPSJvYmpl'@;
put 'Y3QiPT10eXBlb2YgcGVyZm9ybWFuY2UmJnBlcmZvcm1hbmNlLm5vdz9wZXJmb3JtYW5jZTpEYXRlLHV1ZT0ib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KTpmdW5jdGlv'@;
put 'bihjKXtzZXRUaW1lb3V0KGMsMTcpfTtmdW5jdGlvbiBXVSgpe3JldHVybiBoNnx8KHV1ZShObnQpLGg2PWRNLm5vdygpK2dBKX1mdW5jdGlvbiBObnQoKXtoNj0wfWZ1bmN0aW9uIF9BKCl7dGhpcy5fY2FsbD10aGlzLl90aW1lPXRoaXMuX25leHQ9bnVsbH1mdW5jdGlvbiBkdWUoYyxsLGEp'@;
put 'e3ZhciBkPW5ldyBfQTtyZXR1cm4gZC5yZXN0YXJ0KGMsbCxhKSxkfWZ1bmN0aW9uIGh1ZSgpe2g2PShtQT1kTS5ub3coKSkrZ0EsWDk9bE09MDt0cnl7IWZ1bmN0aW9uIFZudCgpe1dVKCksKytYOTtmb3IodmFyIGwsYz1wQTtjOykobD1oNi1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZv'@;
put 'aWQgMCxsKSxjPWMuX25leHQ7LS1YOX0oKX1maW5hbGx5e1g5PTAsZnVuY3Rpb24gQm50KCl7Zm9yKHZhciBjLGEsbD1wQSxkPTEvMDtsOylsLl9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6'@;
put 'cEE9YSk7dU09YyxHVShkKX0oKSxoNj0wfX1mdW5jdGlvbiBqbnQoKXt2YXIgYz1kTS5ub3coKSxsPWMtbUE7bD5jdWUmJihnQS09bCxtQT1jKX1mdW5jdGlvbiBHVShjKXtYOXx8KGxNJiYobE09Y2xlYXJUaW1lb3V0KGxNKSksYy1oNj4yND8oYzwxLzAmJihsTT1zZXRUaW1lb3V0KGh1ZSxj'@;
put 'LWRNLm5vdygpLWdBKSksY00mJihjTT1jbGVhckludGVydmFsKGNNKSkpOihjTXx8KG1BPWRNLm5vdygpLGNNPXNldEludGVydmFsKGpudCxjdWUpKSxYOT0xLHV1ZShodWUpKSl9ZnVuY3Rpb24gdkEoYyxsLGEpe3ZhciBkPW5ldyBfQTtyZXR1cm4gZC5yZXN0YXJ0KGg9PntkLnN0b3AoKSxj'@;
put 'KGgrbCl9LGw9bnVsbD09bD8wOitsLGEpLGR9X0EucHJvdG90eXBlPWR1ZS5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOl9BLHJlc3RhcnQ6ZnVuY3Rpb24oYyxsLGEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9u'@;
put 'Iik7YT0obnVsbD09YT9XVSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmdU0hPT10aGlzJiYodU0/dU0uX25leHQ9dGhpczpwQT10aGlzLHVNPXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsR1UoKX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuX2NhbGwmJih0aGlzLl9j'@;
put 'YWxsPW51bGwsdGhpcy5fdGltZT0xLzAsR1UoKSl9fTt2YXIgWW50PVpVKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLHpudD1bXSxmdWU9MCxxVT0yLHlBPTMsS1U9NSxiQT02O2Z1bmN0aW9uIHdBKGMsbCxhLGQsaCxmKXt2YXIgdj1jLl9fdHJhbnNpdGlvbjtpZih2KXtp'@;
put 'ZihhIGluIHYpcmV0dXJufWVsc2UgYy5fX3RyYW5zaXRpb249e307IWZ1bmN0aW9uIFVudChjLGwsYSl7dmFyIGgsZD1jLl9fdHJhbnNpdGlvbjtmdW5jdGlvbiB2KHJlKXt2YXIgZmUsX2Usa2UsV2U7aWYoMSE9PWEuc3RhdGUpcmV0dXJuIFkoKTtmb3IoZmUgaW4gZClpZigoV2U9ZFtmZV0p'@;
put 'Lm5hbWU9PT1hLm5hbWUpe2lmKFdlLnN0YXRlPT09eUEpcmV0dXJuIHZBKHYpOzQ9PT1XZS5zdGF0ZT8oV2Uuc3RhdGU9YkEsV2UudGltZXIuc3RvcCgpLFdlLm9uLmNhbGwoImludGVycnVwdCIsYyxjLl9fZGF0YV9fLFdlLmluZGV4LFdlLmdyb3VwKSxkZWxldGUgZFtmZV0pOitmZTxsJiYo'@;
put 'V2Uuc3RhdGU9YkEsV2UudGltZXIuc3RvcCgpLFdlLm9uLmNhbGwoImNhbmNlbCIsYyxjLl9fZGF0YV9fLFdlLmluZGV4LFdlLmdyb3VwKSxkZWxldGUgZFtmZV0pfWlmKHZBKGZ1bmN0aW9uKCl7YS5zdGF0ZT09PXlBJiYoYS5zdGF0ZT00LGEudGltZXIucmVzdGFydChULGEuZGVsYXksYS50'@;
put 'aW1lKSxUKHJlKSl9KSxhLnN0YXRlPXFVLGEub24uY2FsbCgic3RhcnQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLGEuc3RhdGU9PT1xVSl7Zm9yKGEuc3RhdGU9eUEsaD1uZXcgQXJyYXkoa2U9YS50d2Vlbi5sZW5ndGgpLGZlPTAsX2U9LTE7ZmU8a2U7KytmZSkoV2U9YS50d2Vl'@;
put 'bltmZV0udmFsdWUuY2FsbChjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSkmJihoWysrX2VdPVdlKTtoLmxlbmd0aD1fZSsxfX1mdW5jdGlvbiBUKHJlKXtmb3IodmFyIGZlPXJlPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxyZS9hLmR1cmF0aW9uKTooYS50aW1lci5yZXN0YXJ0'@;
put 'KFkpLGEuc3RhdGU9S1UsMSksX2U9LTEsa2U9aC5sZW5ndGg7KytfZTxrZTspaFtfZV0uY2FsbChjLGZlKTthLnN0YXRlPT09S1UmJihhLm9uLmNhbGwoImVuZCIsYyxjLl9fZGF0YV9fLGEuaW5kZXgsYS5ncm91cCksWSgpKX1mdW5jdGlvbiBZKCl7Zm9yKHZhciByZSBpbiBhLnN0YXRlPWJB'@;
put 'LGEudGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1kdWUoZnVuY3Rpb24gZihyZSl7YS5zdGF0ZT0xLGEudGltZXIucmVzdGFydCh2LGEuZGVsYXksYS50aW1lKSxhLmRlbGF5PD1yZSYmdihyZS1hLmRlbGF5KX0s'@;
put 'MCxhLnRpbWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246WW50LHR3ZWVuOnpudCx0aW1lOmYudGltZSxkZWxheTpmLmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTpmdWV9KX1mdW5jdGlvbiBYVShjLGwpe3ZhciBhPWIyKGMs'@;
put 'bCk7aWYoYS5zdGF0ZT5mdWUpdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWQiKTtyZXR1cm4gYX1mdW5jdGlvbiBWZihjLGwpe3ZhciBhPWIyKGMsbCk7aWYoYS5zdGF0ZT55QSl0aHJvdyBuZXcgRXJyb3IoInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmciKTty'@;
put 'ZXR1cm4gYX1mdW5jdGlvbiBiMihjLGwpe3ZhciBhPWMuX190cmFuc2l0aW9uO2lmKCFhfHwhKGE9YVtsXSkpdGhyb3cgbmV3IEVycm9yKCJ0cmFuc2l0aW9uIG5vdCBmb3VuZCIpO3JldHVybiBhfWZ1bmN0aW9uIE1BKGMsbCl7dmFyIGQsaCx2LGE9Yy5fX3RyYW5zaXRpb24sZj0hMDtpZihh'@;
put 'KXtmb3IodiBpbiBsPW51bGw9PWw/bnVsbDpsKyIiLGEpKGQ9YVt2XSkubmFtZT09PWw/KGg9ZC5zdGF0ZT5xVSYmZC5zdGF0ZTxLVSxkLnN0YXRlPWJBLGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXAp'@;
put 'LGRlbGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gamYoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIENBLG11ZT0xODAvTWF0aC5QSSxKVT17dHJhbnNsYXRlWDowLHRyYW5zbGF0ZVk6MCxy'@;
put 'b3RhdGU6MCxza2V3WDowLHNjYWxlWDoxLHNjYWxlWToxfTtmdW5jdGlvbiBndWUoYyxsLGEsZCxoLGYpe3ZhciB2LFQsWTtyZXR1cm4odj1NYXRoLnNxcnQoYypjK2wqbCkpJiYoYy89dixsLz12KSwoWT1jKmErbCpkKSYmKGEtPWMqWSxkLT1sKlkpLChUPU1hdGguc3FydChhKmErZCpkKSkm'@;
put 'JihhLz1ULGQvPVQsWS89VCksYypkPGwqYSYmKGM9LWMsbD0tbCxZPS1ZLHY9LXYpLHt0cmFuc2xhdGVYOmgsdHJhbnNsYXRlWTpmLHJvdGF0ZTpNYXRoLmF0YW4yKGwsYykqbXVlLHNrZXdYOk1hdGguYXRhbihZKSptdWUsc2NhbGVYOnYsc2NhbGVZOlR9fWZ1bmN0aW9uIF91ZShjLGwsYSxk'@;
put 'KXtmdW5jdGlvbiBoKHJlKXtyZXR1cm4gcmUubGVuZ3RoP3JlLnBvcCgpKyIgIjoiIn1yZXR1cm4gZnVuY3Rpb24ocmUsZmUpe3ZhciBfZT1bXSxrZT1bXTtyZXR1cm4gcmU9YyhyZSksZmU9YyhmZSksZnVuY3Rpb24gZihyZSxmZSxfZSxrZSxXZSxKZSl7aWYocmUhPT1fZXx8ZmUhPT1rZSl7'@;
put 'dmFyIHR0PVdlLnB1c2goInRyYW5zbGF0ZSgiLG51bGwsbCxudWxsLGEpO0plLnB1c2goe2k6dHQtNCx4OmpmKHJlLF9lKX0se2k6dHQtMix4OmpmKGZlLGtlKX0pfWVsc2UoX2V8fGtlKSYmV2UucHVzaCgidHJhbnNsYXRlKCIrX2UrbCtrZSthKX0ocmUudHJhbnNsYXRlWCxyZS50cmFuc2xh'@;
put 'dGVZLGZlLnRyYW5zbGF0ZVgsZmUudHJhbnNsYXRlWSxfZSxrZSksZnVuY3Rpb24gdihyZSxmZSxfZSxrZSl7cmUhPT1mZT8ocmUtZmU+MTgwP2ZlKz0zNjA6ZmUtcmU+MTgwJiYocmUrPTM2MCksa2UucHVzaCh7aTpfZS5wdXNoKGgoX2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpqZihyZSxm'@;
put 'ZSl9KSk6ZmUmJl9lLnB1c2goaChfZSkrInJvdGF0ZSgiK2ZlK2QpfShyZS5yb3RhdGUsZmUucm90YXRlLF9lLGtlKSxmdW5jdGlvbiBUKHJlLGZlLF9lLGtlKXtyZSE9PWZlP2tlLnB1c2goe2k6X2UucHVzaChoKF9lKSsic2tld1goIixudWxsLGQpLTIseDpqZihyZSxmZSl9KTpmZSYmX2Uu'@;
put 'cHVzaChoKF9lKSsic2tld1goIitmZStkKX0ocmUuc2tld1gsZmUuc2tld1gsX2Usa2UpLGZ1bmN0aW9uIFkocmUsZmUsX2Usa2UsV2UsSmUpe2lmKHJlIT09X2V8fGZlIT09a2Upe3ZhciB0dD1XZS5wdXNoKGgoV2UpKyJzY2FsZSgiLG51bGwsIiwiLG51bGwsIikiKTtKZS5wdXNoKHtpOnR0'@;
put 'LTQseDpqZihyZSxfZSl9LHtpOnR0LTIseDpqZihmZSxrZSl9KX1lbHNlKDEhPT1fZXx8MSE9PWtlKSYmV2UucHVzaChoKFdlKSsic2NhbGUoIitfZSsiLCIra2UrIikiKX0ocmUuc2NhbGVYLHJlLnNjYWxlWSxmZS5zY2FsZVgsZmUuc2NhbGVZLF9lLGtlKSxyZT1mZT1udWxsLGZ1bmN0aW9u'@;
put 'KFdlKXtmb3IodmFyIHl0LEplPS0xLHR0PWtlLmxlbmd0aDsrK0plPHR0OylfZVsoeXQ9a2VbSmVdKS5pXT15dC54KFdlKTtyZXR1cm4gX2Uuam9pbigiIil9fX12YXIgJG50PV91ZShmdW5jdGlvbiBXbnQoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01N'@;
put 'YXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTtyZXR1cm4gbC5pc0lkZW50aXR5P0pVOmd1ZShsLmEsbC5iLGwuYyxsLmQsbC5lLGwuZil9LCJweCwgIiwicHgpIiwiZGVnKSIpLHZ1ZT1fdWUoZnVuY3Rpb24gR250KGMpe3JldHVybiBudWxsIT1jJiYoQ0F8fChDQT1kb2N1bWVudC5jcmVh'@;
put 'dGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwiZyIpKSxDQS5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsYyksYz1DQS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKT9ndWUoKGM9Yy5tYXRyaXgpLmEsYy5iLGMuYyxjLmQsYy5lLGMuZik6SlV9LCIsICIs'@;
put 'IikiLCIpIik7ZnVuY3Rpb24gcW50KGMsbCl7dmFyIGEsZDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgaD1WZih0aGlzLGMpLGY9aC50d2VlbjtpZihmIT09YSlmb3IodmFyIHY9MCxUPShkPWE9ZikubGVuZ3RoO3Y8VDsrK3YpaWYoZFt2XS5uYW1lPT09bCl7KGQ9ZC5zbGljZSgpKS5zcGxpY2Uo'@;
put 'diwxKTticmVha31oLnR3ZWVuPWR9fWZ1bmN0aW9uIEtudChjLGwsYSl7dmFyIGQsaDtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9VmYodGhpcyxjKSx2PWYudHdlZW47aWYodiE9PWQpe2g9KGQ9dikuc2xpY2UoKTtmb3Io'@;
put 'dmFyIFQ9e25hbWU6bCx2YWx1ZTphfSxZPTAscmU9aC5sZW5ndGg7WTxyZTsrK1kpaWYoaFtZXS5uYW1lPT09bCl7aFtZXT1UO2JyZWFrfVk9PT1yZSYmaC5wdXNoKFQpfWYudHdlZW49aH19ZnVuY3Rpb24gUVUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2'@;
put 'YXIgaD1WZih0aGlzLGQpOyhoLnZhbHVlfHwoaC52YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIGIyKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIGVaKGMsbCxhKXtjLnByb3RvdHlwZT1sLnByb3RvdHlwZT1hLGEuY29uc3RydWN0b3I9'@;
put 'Y31mdW5jdGlvbiB5dWUoYyxsKXt2YXIgYT1PYmplY3QuY3JlYXRlKGMucHJvdG90eXBlKTtmb3IodmFyIGQgaW4gbClhW2RdPWxbZF07cmV0dXJuIGF9ZnVuY3Rpb24gaE0oKXt9dmFyIFNBPTEvLjcsSjk9IlxccyooWystXT9cXGQrKVxccyoiLHBNPSJcXHMqKFsrLV0/KD86XFxkKlxcLik/'@;
put 'XFxkKyg/OltlRV1bKy1dP1xcZCspPylcXHMqIixCZj0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pJVxccyoiLEpudD0vXiMoWzAtOWEtZl17Myw4fSkkLyxRbnQ9bmV3IFJlZ0V4cChgXnJnYlxcKCR7Sjl9LCR7Sjl9LCR7Sjl9XFwpJGApLGVydD1uZXcg'@;
put 'UmVnRXhwKGBecmdiXFwoJHtCZn0sJHtCZn0sJHtCZn1cXCkkYCksdHJ0PW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtKOX0sJHtKOX0sJHtKOX0sJHtwTX1cXCkkYCksbnJ0PW5ldyBSZWdFeHAoYF5yZ2JhXFwoJHtCZn0sJHtCZn0sJHtCZn0sJHtwTX1cXCkkYCkscnJ0PW5ldyBSZWdFeHAoYF5o'@;
put 'c2xcXCgke3BNfSwke0JmfSwke0JmfVxcKSRgKSxpcnQ9bmV3IFJlZ0V4cChgXmhzbGFcXCgke3BNfSwke0JmfSwke0JmfSwke3BNfVxcKSRgKSxidWU9e2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6'@;
put 'MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgz'@;
put 'ODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtn'@;
put 'cmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQs'@;
put 'ZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0Nyxk'@;
put 'ZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxn'@;
put 'aG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQs'@;
put 'aW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYs'@;
put 'bGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4'@;
put 'OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50'@;
put 'YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3By'@;
put 'aW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2'@;
put 'eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1'@;
put 'Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlYmVjY2FwdXJwbGU6NjY5Nzg4'@;
put 'MSxyZWQ6MTY3MTE2ODAscm9zeWJyb3duOjEyMzU3NTE5LHJveWFsYmx1ZTo0Mjg2OTQ1LHNhZGRsZWJyb3duOjkxMjcxODcsc2FsbW9uOjE2NDE2ODgyLHNhbmR5YnJvd246MTYwMzI4NjQsc2VhZ3JlZW46MzA1MDMyNyxzZWFzaGVsbDoxNjc3NDYzOCxzaWVubmE6MTA1MDY3OTcsc2lsdmVy'@;
put 'OjEyNjMyMjU2LHNreWJsdWU6ODkwMDMzMSxzbGF0ZWJsdWU6Njk3MDA2MSxzbGF0ZWdyYXk6NzM3Mjk0NCxzbGF0ZWdyZXk6NzM3Mjk0NCxzbm93OjE2Nzc1OTMwLHNwcmluZ2dyZWVuOjY1NDA3LHN0ZWVsYmx1ZTo0NjIwOTgwLHRhbjoxMzgwODc4MCx0ZWFsOjMyODk2LHRoaXN0bGU6MTQy'@;
put 'MDQ4ODgsdG9tYXRvOjE2NzM3MDk1LHR1cnF1b2lzZTo0MjUxODU2LHZpb2xldDoxNTYzMTA4Nix3aGVhdDoxNjExMzMzMSx3aGl0ZToxNjc3NzIxNSx3aGl0ZXNtb2tlOjE2MTE5Mjg1LHllbGxvdzoxNjc3Njk2MCx5ZWxsb3dncmVlbjoxMDE0NTA3NH07ZnVuY3Rpb24gd3VlKCl7cmV0dXJu'@;
put 'IHRoaXMucmdiKCkuZm9ybWF0SGV4KCl9ZnVuY3Rpb24gTXVlKCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0UmdiKCl9ZnVuY3Rpb24gZjYoYyl7dmFyIGwsYTtyZXR1cm4gYz0oYysiIikudHJpbSgpLnRvTG93ZXJDYXNlKCksKGw9Sm50LmV4ZWMoYykpPyhhPWxbMV0ubGVuZ3RoLGw9cGFy'@;
put 'c2VJbnQobFsxXSwxNiksNj09PWE/Q3VlKGwpOjM9PT1hP25ldyBNMShsPj44JjE1fGw+PjQmMjQwLGw+PjQmMTV8MjQwJmwsKDE1JmwpPDw0fDE1JmwsMSk6OD09PWE/eEEobD4+MjQmMjU1LGw+PjE2JjI1NSxsPj44JjI1NSwoMjU1JmwpLzI1NSk6ND09PWE/eEEobD4+MTImMTV8bD4+OCYy'@;
put 'NDAsbD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgoMTUmbCk8PDR8MTUmbCkvMjU1KTpudWxsKToobD1RbnQuZXhlYyhjKSk/bmV3IE0xKGxbMV0sbFsyXSxsWzNdLDEpOihsPWVydC5leGVjKGMpKT9uZXcgTTEoMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAs'@;
put 'MSk6KGw9dHJ0LmV4ZWMoYykpP3hBKGxbMV0sbFsyXSxsWzNdLGxbNF0pOihsPW5ydC5leGVjKGMpKT94QSgyNTUqbFsxXS8xMDAsMjU1KmxbMl0vMTAwLDI1NSpsWzNdLzEwMCxsWzRdKToobD1ycnQuZXhlYyhjKSk/a3VlKGxbMV0sbFsyXS8xMDAsbFszXS8xMDAsMSk6KGw9aXJ0LmV4ZWMo'@;
put 'YykpP2t1ZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLGxbNF0pOmJ1ZS5oYXNPd25Qcm9wZXJ0eShjKT9DdWUoYnVlW2NdKToidHJhbnNwYXJlbnQiPT09Yz9uZXcgTTEoTmFOLE5hTixOYU4sMCk6bnVsbH1mdW5jdGlvbiBDdWUoYyl7cmV0dXJuIG5ldyBNMShjPj4xNiYyNTUsYz4+OCYyNTUs'@;
put 'MjU1JmMsMSl9ZnVuY3Rpb24geEEoYyxsLGEsZCl7cmV0dXJuIGQ8PTAmJihjPWw9YT1OYU4pLG5ldyBNMShjLGwsYSxkKX1mdW5jdGlvbiBrQShjLGwsYSxkKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/ZnVuY3Rpb24gYXJ0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgaE18fChjPWY2'@;
put 'KGMpKSxjP25ldyBNMSgoYz1jLnJnYigpKS5yLGMuZyxjLmIsYy5vcGFjaXR5KTpuZXcgTTF9KGMpOm5ldyBNMShjLGwsYSxkPz8xKX1mdW5jdGlvbiBNMShjLGwsYSxkKXt0aGlzLnI9K2MsdGhpcy5nPStsLHRoaXMuYj0rYSx0aGlzLm9wYWNpdHk9K2R9ZnVuY3Rpb24gU3VlKCl7cmV0dXJu'@;
put 'YCMke202KHRoaXMucil9JHttNih0aGlzLmcpfSR7bTYodGhpcy5iKX1gfWZ1bmN0aW9uIHh1ZSgpe2NvbnN0IGM9RUEodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8icmdiKCI6InJnYmEoIn0ke3A2KHRoaXMucil9LCAke3A2KHRoaXMuZyl9LCAke3A2KHRoaXMuYil9JHsxPT09Yz8i'@;
put 'KSI6YCwgJHtjfSlgfWB9ZnVuY3Rpb24gRUEoYyl7cmV0dXJuIGlzTmFOKGMpPzE6TWF0aC5tYXgoMCxNYXRoLm1pbigxLGMpKX1mdW5jdGlvbiBwNihjKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigyNTUsTWF0aC5yb3VuZChjKXx8MCkpfWZ1bmN0aW9uIG02KGMpe3JldHVybigoYz1w'@;
put 'NihjKSk8MTY/IjAiOiIiKStjLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBrdWUoYyxsLGEsZCl7cmV0dXJuIGQ8PTA/Yz1sPWE9TmFOOmE8PTB8fGE+PTE/Yz1sPU5hTjpsPD0wJiYoYz1OYU4pLG5ldyB3MihjLGwsYSxkKX1mdW5jdGlvbiBFdWUoYyl7aWYoYyBpbnN0YW5jZW9mIHcyKXJldHVy'@;
put 'biBuZXcgdzIoYy5oLGMucyxjLmwsYy5vcGFjaXR5KTtpZihjIGluc3RhbmNlb2YgaE18fChjPWY2KGMpKSwhYylyZXR1cm4gbmV3IHcyO2lmKGMgaW5zdGFuY2VvZiB3MilyZXR1cm4gYzt2YXIgbD0oYz1jLnJnYigpKS5yLzI1NSxhPWMuZy8yNTUsZD1jLmIvMjU1LGg9TWF0aC5taW4obCxh'@;
put 'LGQpLGY9TWF0aC5tYXgobCxhLGQpLHY9TmFOLFQ9Zi1oLFk9KGYraCkvMjtyZXR1cm4gVD8odj1sPT09Zj8oYS1kKS9UKzYqKGE8ZCk6YT09PWY/KGQtbCkvVCsyOihsLWEpL1QrNCxULz1ZPC41P2YraDoyLWYtaCx2Kj02MCk6VD1ZPjAmJlk8MT8wOnYsbmV3IHcyKHYsVCxZLGMub3BhY2l0'@;
put 'eSl9ZnVuY3Rpb24gdzIoYyxsLGEsZCl7dGhpcy5oPStjLHRoaXMucz0rbCx0aGlzLmw9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIFR1ZShjKXtyZXR1cm4oYz0oY3x8MCklMzYwKTwwP2MrMzYwOmN9ZnVuY3Rpb24gVEEoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMSxjfHww'@;
put 'KSl9ZnVuY3Rpb24gdFooYyxsLGEpe3JldHVybiAyNTUqKGM8NjA/bCsoYS1sKSpjLzYwOmM8MTgwP2E6YzwyNDA/bCsoYS1sKSooMjQwLWMpLzYwOmwpfWZ1bmN0aW9uIER1ZShjLGwsYSxkLGgpe3ZhciBmPWMqYyx2PWYqYztyZXR1cm4oKDEtMypjKzMqZi12KSpsKyg0LTYqZiszKnYpKmEr'@;
put 'KDErMypjKzMqZi0zKnYpKmQrdipoKS82fWVaKGhNLGY2LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4Ond1ZSxmb3JtYXRIZXg6d3VlLGZv'@;
put 'cm1hdEhleDg6ZnVuY3Rpb24gb3J0KCl7cmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gc3J0KCl7cmV0dXJuIEV1ZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOk11ZSx0b1N0cmluZzpNdWV9KSxlWihNMSxrQSx5dWUoaE0se2JyaWdodGVy'@;
put 'KGMpe3JldHVybiBjPW51bGw9PWM/U0E6TWF0aC5wb3coU0EsYyksbmV3IE0xKHRoaXMucipjLHRoaXMuZypjLHRoaXMuYipjLHRoaXMub3BhY2l0eSl9LGRhcmtlcihjKXtyZXR1cm4gYz1udWxsPT1jPy43Ok1hdGgucG93KC43LGMpLG5ldyBNMSh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIq'@;
put 'Yyx0aGlzLm9wYWNpdHkpfSxyZ2IoKXtyZXR1cm4gdGhpc30sY2xhbXAoKXtyZXR1cm4gbmV3IE0xKHA2KHRoaXMucikscDYodGhpcy5nKSxwNih0aGlzLmIpLEVBKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybi0uNTw9dGhpcy5yJiZ0aGlzLnI8MjU1LjUmJi0uNTw9dGhp'@;
put 'cy5nJiZ0aGlzLmc8MjU1LjUmJi0uNTw9dGhpcy5iJiZ0aGlzLmI8MjU1LjUmJjA8PXRoaXMub3BhY2l0eSYmdGhpcy5vcGFjaXR5PD0xfSxoZXg6U3VlLGZvcm1hdEhleDpTdWUsZm9ybWF0SGV4ODpmdW5jdGlvbiBscnQoKXtyZXR1cm5gIyR7bTYodGhpcy5yKX0ke202KHRoaXMuZyl9JHtt'@;
put 'Nih0aGlzLmIpfSR7bTYoMjU1Kihpc05hTih0aGlzLm9wYWNpdHkpPzE6dGhpcy5vcGFjaXR5KSl9YH0sZm9ybWF0UmdiOnh1ZSx0b1N0cmluZzp4dWV9KSksZVoodzIsZnVuY3Rpb24gY3J0KGMsbCxhLGQpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9FdWUoYyk6bmV3IHcyKGMsbCxh'@;
put 'LGQ/PzEpfSx5dWUoaE0se2JyaWdodGVyKGMpe3JldHVybiBjPW51bGw9PWM/U0E6TWF0aC5wb3coU0EsYyksbmV3IHcyKHRoaXMuaCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0sZGFya2VyKGMpe3JldHVybiBjPW51bGw9PWM/Ljc6TWF0aC5wb3coLjcsYyksbmV3IHcyKHRoaXMu'@;
put 'aCx0aGlzLnMsdGhpcy5sKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7dmFyIGM9dGhpcy5oJTM2MCszNjAqKHRoaXMuaDwwKSxsPWlzTmFOKGMpfHxpc05hTih0aGlzLnMpPzA6dGhpcy5zLGE9dGhpcy5sLGQ9YSsoYTwuNT9hOjEtYSkqbCxoPTIqYS1kO3JldHVybiBuZXcgTTEodFooYz49MjQw'@;
put 'P2MtMjQwOmMrMTIwLGgsZCksdFooYyxoLGQpLHRaKGM8MTIwP2MrMjQwOmMtMTIwLGgsZCksdGhpcy5vcGFjaXR5KX0sY2xhbXAoKXtyZXR1cm4gbmV3IHcyKFR1ZSh0aGlzLmgpLFRBKHRoaXMucyksVEEodGhpcy5sKSxFQSh0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4o'@;
put 'MDw9dGhpcy5zJiZ0aGlzLnM8PTF8fGlzTmFOKHRoaXMucykpJiYwPD10aGlzLmwmJnRoaXMubDw9MSYmMDw9dGhpcy5vcGFjaXR5JiZ0aGlzLm9wYWNpdHk8PTF9LGZvcm1hdEhzbCgpe2NvbnN0IGM9RUEodGhpcy5vcGFjaXR5KTtyZXR1cm5gJHsxPT09Yz8iaHNsKCI6ImhzbGEoIn0ke1R1'@;
put 'ZSh0aGlzLmgpfSwgJHsxMDAqVEEodGhpcy5zKX0lLCAkezEwMCpUQSh0aGlzLmwpfSUkezE9PT1jPyIpIjpgLCAke2N9KWB9YH19KSk7Y29uc3Qgblo9Yz0+KCk9PmM7ZnVuY3Rpb24gTHVlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIEF1ZShjLGwpe3JldHVybiBmdW5jdGlv'@;
put 'bihhKXtyZXR1cm4gYythKmx9fShjLGEpOm5aKGlzTmFOKGMpP2w6Yyl9Y29uc3QgREE9ZnVuY3Rpb24gYyhsKXt2YXIgYT1mdW5jdGlvbiBmcnQoYyl7cmV0dXJuIDE9PShjPStjKT9MdWU6ZnVuY3Rpb24obCxhKXtyZXR1cm4gYS1sP2Z1bmN0aW9uIGhydChjLGwsYSl7cmV0dXJuIGM9TWF0'@;
put 'aC5wb3coYyxhKSxsPU1hdGgucG93KGwsYSktYyxhPTEvYSxmdW5jdGlvbihkKXtyZXR1cm4gTWF0aC5wb3coYytkKmwsYSl9fShsLGEsYyk6blooaXNOYU4obCk/YTpsKX19KGwpO2Z1bmN0aW9uIGQoaCxmKXt2YXIgdj1hKChoPWtBKGgpKS5yLChmPWtBKGYpKS5yKSxUPWEoaC5nLGYuZyks'@;
put 'WT1hKGguYixmLmIpLHJlPUx1ZShoLm9wYWNpdHksZi5vcGFjaXR5KTtyZXR1cm4gZnVuY3Rpb24oZmUpe3JldHVybiBoLnI9dihmZSksaC5nPVQoZmUpLGguYj1ZKGZlKSxoLm9wYWNpdHk9cmUoZmUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24gSXVlKGMpe3JldHVy'@;
put 'biBmdW5jdGlvbihsKXt2YXIgdixULGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKHY9MDt2PGE7Kyt2KVQ9a0EobFt2XSksZFt2XT1ULnJ8fDAsaFt2XT1ULmd8fDAsZlt2XT1ULmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1j'@;
put 'KGYpLFQub3BhY2l0eT0xLGZ1bmN0aW9uKFkpe3JldHVybiBULnI9ZChZKSxULmc9aChZKSxULmI9ZihZKSxUKyIifX19SXVlKGZ1bmN0aW9uIHVydChjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29y'@;
put 'KGEqbCksaD1jW2RdLGY9Y1tkKzFdO3JldHVybiBEdWUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSksSXVlKGZ1bmN0aW9uIGRydChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEp'@;
put 'PDA/KythOmEpKmwpO3JldHVybiBEdWUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgclo9L1stK10/KD86XGQrXC4/XGQqfFwuP1xkKykoPzpbZUVdWy0rXT9cZCspPy9nLGlaPW5ldyBSZWdFeHAoclouc291cmNlLCJnIik7ZnVu'@;
put 'Y3Rpb24gUnVlKGMsbCl7dmFyIGQsaCxmLGE9cloubGFzdEluZGV4PWlaLmxhc3RJbmRleD0wLHY9LTEsVD1bXSxZPVtdO2ZvcihjKz0iIixsKz0iIjsoZD1yWi5leGVjKGMpKSYmKGg9aVouZXhlYyhsKSk7KShmPWguaW5kZXgpPmEmJihmPWwuc2xpY2UoYSxmKSxUW3ZdP1Rbdl0rPWY6VFsr'@;
put 'K3ZdPWYpLChkPWRbMF0pPT09KGg9aFswXSk/VFt2XT9UW3ZdKz1oOlRbKyt2XT1oOihUWysrdl09bnVsbCxZLnB1c2goe2k6dix4OmpmKGQsaCl9KSksYT1pWi5sYXN0SW5kZXg7cmV0dXJuIGE8bC5sZW5ndGgmJihmPWwuc2xpY2UoYSksVFt2XT9UW3ZdKz1mOlRbKyt2XT1mKSxULmxlbmd0'@;
put 'aDwyP1lbMF0/ZnVuY3Rpb24gbXJ0KGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gYyhsKSsiIn19KFlbMF0ueCk6ZnVuY3Rpb24gcHJ0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBjfX0obCk6KGw9WS5sZW5ndGgsZnVuY3Rpb24ocmUpe2Zvcih2YXIgX2UsZmU9MDtmZTxsOysr'@;
put 'ZmUpVFsoX2U9WVtmZV0pLmldPV9lLngocmUpO3JldHVybiBULmpvaW4oIiIpfSl9ZnVuY3Rpb24gT3VlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9qZjpsIGluc3RhbmNlb2YgZjY/REE6KGE9ZjYobCkpPyhsPWEsREEpOlJ1ZSkoYyxsKX1mdW5jdGlvbiBncnQoYyl7'@;
put 'cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIF9ydChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIHZydChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7dmFyIHY9dGhpcy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiB5cnQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2Fs'@;
put 'KTtyZXR1cm4gdj09PWg/bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIGJydChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2LFksVD1hKHRoaXMpO3JldHVybiBudWxsPT1UP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KHY9dGhpcy5nZXRBdHRy'@;
put 'aWJ1dGUoYykpPT09KFk9VCsiIik/bnVsbDp2PT09ZCYmWT09PWg/ZjooaD1ZLGY9bChkPXYsVCkpfX1mdW5jdGlvbiB3cnQoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixZLFQ9YSh0aGlzKTtyZXR1cm4gbnVsbD09VD92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRl'@;
put 'TlMoYy5zcGFjZSxjLmxvY2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KFk9VCsiIik/bnVsbDp2PT09ZCYmWT09PWg/ZjooaD1ZLGY9bChkPXYsVCkpfX1mdW5jdGlvbiB4cnQoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRo'@;
put 'aXMsYXJndW1lbnRzKTtyZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiBTcnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9u'@;
put 'IGtydChjLGwpe3ZhciBhLGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIENydChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikp'@;
put 'LGF9cmV0dXJuIGguX3ZhbHVlPWwsaH1mdW5jdGlvbiBUcnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtYVSh0aGlzLGMpLmRlbGF5PStsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gRHJ0KGMsbCl7cmV0dXJuIGw9K2wsZnVuY3Rpb24oKXtYVSh0aGlzLGMpLmRlbGF5PWx9fWZ1'@;
put 'bmN0aW9uIExydChjLGwpe3JldHVybiBmdW5jdGlvbigpe1ZmKHRoaXMsYykuZHVyYXRpb249K2wuYXBwbHkodGhpcyxhcmd1bWVudHMpfX1mdW5jdGlvbiBJcnQoYyxsKXtyZXR1cm4gbD0rbCxmdW5jdGlvbigpe1ZmKHRoaXMsYykuZHVyYXRpb249bH19dmFyIEdydD1kNi5wcm90b3R5cGUu'@;
put 'Y29uc3RydWN0b3I7ZnVuY3Rpb24gUHVlKGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyl9fXZhciBkaXQ9MDtmdW5jdGlvbiBZZihjLGwsYSxkKXt0aGlzLl9ncm91cHM9Yyx0aGlzLl9wYXJlbnRzPWwsdGhpcy5fbmFtZT1hLHRoaXMuX2lkPWR9ZnVu'@;
put 'Y3Rpb24gb1ooYyl7cmV0dXJuIGQ2KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBGdWUoKXtyZXR1cm4rK2RpdH12YXIgYnA9ZDYucHJvdG90eXBlO1lmLnByb3RvdHlwZT1vWi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOllmLHNlbGVjdDpmdW5jdGlvbiBacnQoYyl7dmFyIGw9dGhpcy5fbmFt'@;
put 'ZSxhPXRoaXMuX2lkOyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1qVShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7Kyt2KWZvcih2YXIgZmUsX2UsVD1kW3ZdLFk9VC5sZW5ndGgscmU9Zlt2XT1uZXcgQXJyYXkoWSksa2U9MDtr'@;
put 'ZTxZOysra2UpKGZlPVRba2VdKSYmKF9lPWMuY2FsbChmZSxmZS5fX2RhdGFfXyxrZSxUKSkmJigiX19kYXRhX18iaW4gZmUmJihfZS5fX2RhdGFfXz1mZS5fX2RhdGFfXykscmVba2VdPV9lLHdBKHJlW2tlXSxsLGEsa2UscmUsYjIoZmUsYSkpKTtyZXR1cm4gbmV3IFlmKGYsdGhpcy5fcGFy'@;
put 'ZW50cyxsLGEpfSxzZWxlY3RBbGw6ZnVuY3Rpb24gV3J0KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9pZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9JGNlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1bXSx2PVtdLFQ9MDtUPGg7KytUKWZvcih2YXIgZmUs'@;
put 'WT1kW1RdLHJlPVkubGVuZ3RoLF9lPTA7X2U8cmU7KytfZSlpZihmZT1ZW19lXSl7Zm9yKHZhciBXZSxrZT1jLmNhbGwoZmUsZmUuX19kYXRhX18sX2UsWSksSmU9YjIoZmUsYSksdHQ9MCx5dD1rZS5sZW5ndGg7dHQ8eXQ7Kyt0dCkoV2U9a2VbdHRdKSYmd0EoV2UsbCxhLHR0LGtlLEplKTtm'@;
put 'LnB1c2goa2UpLHYucHVzaChmZSl9cmV0dXJuIG5ldyBZZihmLHYsbCxhKX0sc2VsZWN0Q2hpbGQ6YnAuc2VsZWN0Q2hpbGQsc2VsZWN0Q2hpbGRyZW46YnAuc2VsZWN0Q2hpbGRyZW4sZmlsdGVyOmZ1bmN0aW9uIE5ydChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9cWNlKGMpKTtmb3Io'@;
put 'dmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBZLGY9bFtoXSx2PWYubGVuZ3RoLFQ9ZFtoXT1bXSxyZT0wO3JlPHY7KytyZSkoWT1mW3JlXSkmJmMuY2FsbChZLFkuX19kYXRhX18scmUsZikmJlQucHVzaChZKTtyZXR1cm4g'@;
put 'bmV3IFlmKGQsdGhpcy5fcGFyZW50cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gVnJ0KGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5s'@;
put 'ZW5ndGgpLHY9bmV3IEFycmF5KGQpLFQ9MDtUPGY7KytUKWZvcih2YXIga2UsWT1sW1RdLHJlPWFbVF0sZmU9WS5sZW5ndGgsX2U9dltUXT1uZXcgQXJyYXkoZmUpLFdlPTA7V2U8ZmU7KytXZSkoa2U9WVtXZV18fHJlW1dlXSkmJihfZVtXZV09a2UpO2Zvcig7VDxkOysrVCl2W1RdPWxbVF07'@;
put 'cmV0dXJuIG5ldyBZZih2LHRoaXMuX3BhcmVudHMsdGhpcy5fbmFtZSx0aGlzLl9pZCl9LHNlbGVjdGlvbjpmdW5jdGlvbiAkcnQoKXtyZXR1cm4gbmV3IEdydCh0aGlzLl9ncm91cHMsdGhpcy5fcGFyZW50cyl9LHRyYW5zaXRpb246ZnVuY3Rpb24gY2l0KCl7Zm9yKHZhciBjPXRoaXMuX25h'@;
put 'bWUsbD10aGlzLl9pZCxhPUZ1ZSgpLGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBZLHY9ZFtmXSxUPXYubGVuZ3RoLHJlPTA7cmU8VDsrK3JlKWlmKFk9dltyZV0pe3ZhciBmZT1iMihZLGwpO3dBKFksYyxhLHJlLHYse3RpbWU6ZmUudGltZStmZS5kZWxh'@;
put 'eStmZS5kdXJhdGlvbixkZWxheTowLGR1cmF0aW9uOmZlLmR1cmF0aW9uLGVhc2U6ZmUuZWFzZX0pfXJldHVybiBuZXcgWWYoZCx0aGlzLl9wYXJlbnRzLGMsYSl9LGNhbGw6YnAuY2FsbCxub2RlczpicC5ub2Rlcyxub2RlOmJwLm5vZGUsc2l6ZTpicC5zaXplLGVtcHR5OmJwLmVtcHR5LGVh'@;
put 'Y2g6YnAuZWFjaCxvbjpmdW5jdGlvbiBZcnQoYyxsKXt2YXIgYT10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP2IyKHRoaXMubm9kZSgpLGEpLm9uLm9uKGMpOnRoaXMuZWFjaChmdW5jdGlvbiBCcnQoYyxsLGEpe3ZhciBkLGgsZj1mdW5jdGlvbiBqcnQoYyl7cmV0dXJuKGMr'@;
put 'IiIpLnRyaW0oKS5zcGxpdCgvXnxccysvKS5ldmVyeShmdW5jdGlvbihsKXt2YXIgYT1sLmluZGV4T2YoIi4iKTtyZXR1cm4gYT49MCYmKGw9bC5zbGljZSgwLGEpKSwhbHx8InN0YXJ0Ij09PWx9KX0obCk/WFU6VmY7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMpLFQ9di5vbjtU'@;
put 'IT09ZCYmKGg9KGQ9VCkuY29weSgpKS5vbihsLGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gTXJ0KGMsbCl7dmFyIGE9aEEoYyksZD0idHJhbnNmb3JtIj09PWE/dnVlOk91ZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD93'@;
put 'cnQ6YnJ0KShhLGQsUVUodGhpcywiYXR0ci4iK2MsbCkpOm51bGw9PWw/KGEubG9jYWw/X3J0OmdydCkoYSk6KGEubG9jYWw/eXJ0OnZydCkoYSxkLGwpKX0sYXR0clR3ZWVuOmZ1bmN0aW9uIEVydChjLGwpe3ZhciBhPSJhdHRyLiIrYztpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGE9'@;
put 'dGhpcy50d2VlbihhKSkmJmEuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oYSxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7dmFyIGQ9aEEoYyk7cmV0dXJuIHRoaXMudHdlZW4oYSwoZC5sb2NhbD94cnQ6a3J0KShkLGwpKX0sc3R5bGU6'@;
put 'ZnVuY3Rpb24gUXJ0KGMsbCxhKXt2YXIgZD0idHJhbnNmb3JtIj09KGMrPSIiKT8kbnQ6T3VlO3JldHVybiBudWxsPT1sP3RoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIHFydChjLGwpe3ZhciBhLGQsaDtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1LOSh0aGlzLGMpLHY9KHRoaXMuc3R5bGUu'@;
put 'cmVtb3ZlUHJvcGVydHkoYyksSzkodGhpcyxjKSk7cmV0dXJuIGY9PT12P251bGw6Zj09PWEmJnY9PT1kP2g6aD1sKGE9ZixkPXYpfX0oYyxkKSkub24oImVuZC5zdHlsZS4iK2MsUHVlKGMpKToiZnVuY3Rpb24iPT10eXBlb2YgbD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBYcnQoYyxs'@;
put 'LGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdj1LOSh0aGlzLGMpLFQ9YSh0aGlzKSxZPVQrIiI7cmV0dXJuIG51bGw9PVQmJih0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLFk9VD1LOSh0aGlzLGMpKSx2PT09WT9udWxsOnY9PT1kJiZZPT09aD9mOihoPVksZj1sKGQ9'@;
put 'dixUKSl9fShjLGQsUVUodGhpcywic3R5bGUuIitjLGwpKSkuZWFjaChmdW5jdGlvbiBKcnQoYyxsKXt2YXIgYSxkLGgsVCxmPSJzdHlsZS4iK2wsdj0iZW5kLiIrZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgWT1WZih0aGlzLGMpLHJlPVkub24sZmU9bnVsbD09WS52YWx1ZVtmXT9UfHwoVD1Q'@;
put 'dWUobCkpOnZvaWQgMDsocmUhPT1hfHxoIT09ZmUpJiYoZD0oYT1yZSkuY29weSgpKS5vbih2LGg9ZmUpLFkub249ZH19KHRoaXMuX2lkLGMpKTp0aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBLcnQoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PUs5KHRo'@;
put 'aXMsYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX0oYyxkLGwpLGEpLm9uKCJlbmQuc3R5bGUuIitjLG51bGwpfSxzdHlsZVR3ZWVuOmZ1bmN0aW9uIG5pdChjLGwsYSl7dmFyIGQ9InN0eWxlLiIrKGMrPSIiKTtpZihhcmd1bWVudHMubGVuZ3RoPDIpcmV0dXJuKGQ9'@;
put 'dGhpcy50d2VlbihkKSkmJmQuX3ZhbHVlO2lmKG51bGw9PWwpcmV0dXJuIHRoaXMudHdlZW4oZCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4oZCxmdW5jdGlvbiB0aXQoYyxsLGEpe3ZhciBkLGg7ZnVuY3Rpb24gZigpe3Zh'@;
put 'ciB2PWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2IT09aCYmKGQ9KGg9dikmJmZ1bmN0aW9uIGVpdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkoYyxsLmNhbGwodGhpcyxkKSxhKX19KGMsdixhKSksZH1yZXR1cm4gZi5fdmFsdWU9bCxm'@;
put 'fShjLGwsYT8/IiIpKX0sdGV4dDpmdW5jdGlvbiBvaXQoYyl7cmV0dXJuIHRoaXMudHdlZW4oInRleHQiLCJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIGlpdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD1jKHRoaXMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fShRVSh0aGlzLCJ0'@;
put 'ZXh0IixjKSk6ZnVuY3Rpb24gcml0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24gbGl0KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2Vlbihs'@;
put 'KSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBhaXQoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYobD0oYT1oKSYmZnVuY3Rpb24gc2l0KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gVXJ0KCl7cmV0dXJu'@;
put 'IHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0aW9uIHpydChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3'@;
put 'ZWVuOmZ1bmN0aW9uIFhudChjLGwpe3ZhciBhPXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9YjIodGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52YWx1ZTtyZXR1'@;
put 'cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP3FudDpLbnQpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIEFydChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP1RydDpEcnQpKGwsYykpOmIyKHRo'@;
put 'aXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlvbjpmdW5jdGlvbiBScnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz9McnQ6SXJ0KShsLGMpKTpiMih0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpm'@;
put 'dW5jdGlvbiBQcnQoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIE9ydChjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtWZih0aGlzLGMpLmVhc2U9bH19KGwsYykp'@;
put 'OmIyKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVhc2VWYXJ5aW5nOmZ1bmN0aW9uIEhydChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBGcnQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMs'@;
put 'YXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7VmYodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiB1aXQoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9u'@;
put 'KGYsdil7dmFyIFQ9e3ZhbHVlOnZ9LFk9e3ZhbHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgcmU9VmYodGhpcyxkKSxmZT1yZS5vbjtmZSE9PWMmJigobD0oYz1mZSkuY29weSgpKS5fLmNhbmNlbC5wdXNoKFQpLGwuXy5pbnRlcnJ1cHQucHVzaChU'@;
put 'KSxsLl8uZW5kLnB1c2goWSkpLHJlLm9uPWx9KSwwPT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOmJwW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBmaXQ9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIGhpdChjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypj'@;
put 'OihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIHBpdChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfWQ2LnByb3RvdHlw'@;
put 'ZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gWm50KGMpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtNQSh0aGlzLGMpfSl9LGQ2LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uIG1pdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBZZj8obD1jLl9pZCxjPWMuX25hbWUpOihsPUZ1ZSgpLChh'@;
put 'PWZpdCkudGltZT1XVSgpLGM9bnVsbD09Yz9udWxsOmMrIiIpO2Zvcih2YXIgZD10aGlzLl9ncm91cHMsaD1kLmxlbmd0aCxmPTA7ZjxoOysrZilmb3IodmFyIFksdj1kW2ZdLFQ9di5sZW5ndGgscmU9MDtyZTxUOysrcmUpKFk9dltyZV0pJiZ3QShZLGMsbCxyZSx2LGF8fHBpdChZLGwpKTty'@;
put 'ZXR1cm4gbmV3IFlmKGQsdGhpcy5fcGFyZW50cyxjLGwpfTt2YXIgZ2l0PVtudWxsXTtjb25zdCBzWj17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBhWihjKXtjLnByZXZlbnREZWZhdWx0KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBIdWUoYyl7cmV0'@;
put 'dXJuKChjPU1hdGguZXhwKGMpKSsxL2MpLzJ9Y29uc3QgQ2l0PWZ1bmN0aW9uIGMobCxhLGQpe2Z1bmN0aW9uIGgoZix2KXt2YXIgeXQsd3QsVD1mWzBdLFk9ZlsxXSxyZT1mWzJdLGtlPXZbMl0sV2U9dlswXS1ULEplPXZbMV0tWSx0dD1XZSpXZStKZSpKZTtpZih0dDwxZS0xMil3dD1NYXRo'@;
put 'LmxvZyhrZS9yZSkvbCx5dD1mdW5jdGlvbih1cil7cmV0dXJuW1QrdXIqV2UsWSt1cipKZSxyZSpNYXRoLmV4cChsKnVyKnd0KV19O2Vsc2V7dmFyIEx0PU1hdGguc3FydCh0dCksb249KGtlKmtlLXJlKnJlK2QqdHQpLygyKnJlKmEqTHQpLHNuPShrZSprZS1yZSpyZS1kKnR0KS8oMiprZSph'@;
put 'Kkx0KSxNbj1NYXRoLmxvZyhNYXRoLnNxcnQob24qb24rMSktb24pLFZuPU1hdGgubG9nKE1hdGguc3FydChzbipzbisxKS1zbik7d3Q9KFZuLU1uKS9sLHl0PWZ1bmN0aW9uKHVyKXt2YXIgVHI9dXIqd3QsUGk9SHVlKE1uKSxIaT1yZS8oYSpMdCkqKFBpKmZ1bmN0aW9uIE1pdChjKXtyZXR1'@;
put 'cm4oKGM9TWF0aC5leHAoMipjKSktMSkvKGMrMSl9KGwqVHIrTW4pLWZ1bmN0aW9uIHdpdChjKXtyZXR1cm4oKGM9TWF0aC5leHAoYykpLTEvYykvMn0oTW4pKTtyZXR1cm5bVCtIaSpXZSxZK0hpKkplLHJlKlBpL0h1ZShsKlRyK01uKV19fXJldHVybiB5dC5kdXJhdGlvbj0xZTMqd3QqbC9N'@;
put 'YXRoLlNRUlQyLHl0fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIgdj1NYXRoLm1heCguMDAxLCtmKSxUPXYqdjtyZXR1cm4gYyh2LFQsVCpUKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIGc2KGMsbCl7aWYoYz1mdW5jdGlvbiBTaXQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNl'@;
put 'RXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5jdXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50'@;
put 'WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5pbnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50'@;
put 'WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFnZVldfWNvbnN0IEFBPWM9PigpPT5jO2Z1bmN0aW9uIHhpdChjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2'@;
put 'YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3VyY2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rpb24gd3AoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfXdwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6d3Asc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IHdwKHRoaXMuaypjLHRo'@;
put 'aXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gMD09PWMmMD09PWw/dGhpczpuZXcgd3AodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5r'@;
put 'K3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlzLmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119'@;
put 'LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlzLmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhp'@;
put 'cykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwi'@;
put 'K3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgTEE9bmV3IHdwKDEsMCwwKTtmdW5jdGlvbiBJQShjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIExBO3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiBsWihjKXtjLnN0b3BJbW1lZGlhdGVQcm9w'@;
put 'YWdhdGlvbigpfWZ1bmN0aW9uIG1NKGMpe2MucHJldmVudERlZmF1bHQoKSxjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpfWZ1bmN0aW9uIGtpdChjKXtyZXR1cm4hKGMuY3RybEtleSYmIndoZWVsIiE9PWMudHlwZXx8Yy5idXR0b24pfWZ1bmN0aW9uIEVpdCgpe3ZhciBjPXRoaXM7cmV0'@;
put 'dXJuIGMgaW5zdGFuY2VvZiBTVkdFbGVtZW50PyhjPWMub3duZXJTVkdFbGVtZW50fHxjKS5oYXNBdHRyaWJ1dGUoInZpZXdCb3giKT9bWyhjPWMudmlld0JveC5iYXNlVmFsKS54LGMueV0sW2MueCtjLndpZHRoLGMueStjLmhlaWdodF1dOltbMCwwXSxbYy53aWR0aC5iYXNlVmFsLnZhbHVl'@;
put 'LGMuaGVpZ2h0LmJhc2VWYWwudmFsdWVdXTpbWzAsMF0sW2MuY2xpZW50V2lkdGgsYy5jbGllbnRIZWlnaHRdXX1mdW5jdGlvbiBOdWUoKXtyZXR1cm4gdGhpcy5fX3pvb218fExBfWZ1bmN0aW9uIFRpdChjKXtyZXR1cm4tYy5kZWx0YVkqKDE9PT1jLmRlbHRhTW9kZT8uMDU6Yy5kZWx0YU1v'@;
put 'ZGU/MTouMDAyKSooYy5jdHJsS2V5PzEwOjEpfWZ1bmN0aW9uIERpdCgpe3JldHVybiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHN8fCJvbnRvdWNoc3RhcnQiaW4gdGhpc31mdW5jdGlvbiBBaXQoYyxsLGEpe3ZhciBkPWMuaW52ZXJ0WChsWzBdWzBdKS1hWzBdWzBdLGg9Yy5pbnZlcnRYKGxb'@;
put 'MV1bMF0pLWFbMV1bMF0sZj1jLmludmVydFkobFswXVsxXSktYVswXVsxXSx2PWMuaW52ZXJ0WShsWzFdWzFdKS1hWzFdWzFdO3JldHVybiBjLnRyYW5zbGF0ZShoPmQ/KGQraCkvMjpNYXRoLm1pbigwLGQpfHxNYXRoLm1heCgwLGgpLHY+Zj8oZit2KS8yOk1hdGgubWluKDAsZil8fE1hdGgu'@;
put 'bWF4KDAsdikpfWZ1bmN0aW9uIFZ1ZShjKXt2YXIgbD17fSxhPWMubm9kZSgpLm5vZGVOYW1lO2wudGFnPWEsIiN0ZXh0Ij09YT9sLnRleHQ9Yy50ZXh0KCk6IiNjb21tZW50Ij09YSYmKGwuY29tbWVudD1jLnRleHQoKSksbC5hdHRyaWJ1dGVzPXt9O3ZhciBkPWMubm9kZSgpLmF0dHJpYnV0'@;
put 'ZXM7aWYoZClmb3IodmFyIGg9MDtoPGQubGVuZ3RoO2grKyl7dmFyIGY9ZFtoXTtsLmF0dHJpYnV0ZXNbZi5uYW1lXT1mLnZhbHVlfXZhciBmZSxZPWMubm9kZSgpLnRyYW5zZm9ybTtpZihZJiYwIT1ZLmJhc2VWYWwubnVtYmVyT2ZJdGVtcyl7dmFyIHJlPVkuYmFzZVZhbC5jb25zb2xpZGF0'@;
put 'ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OnJlLmUseTpyZS5mfSxsLnNjYWxlPXJlLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgX2U9KGZlPWMuYXR0cigicG9pbnRzIikuc3Bs'@;
put 'aXQoIiAiKSkubWFwKGZ1bmN0aW9uKG9uKXtyZXR1cm4gb24uc3BsaXQoIiwiKVswXX0pLGtlPWZlLm1hcChmdW5jdGlvbihvbil7cmV0dXJuIG9uLnNwbGl0KCIsIilbMV19KSxXZT1NYXRoLm1pbi5hcHBseShudWxsLF9lKSxKZT1NYXRoLm1heC5hcHBseShudWxsLF9lKSx0dD1NYXRoLm1p'@;
put 'bi5hcHBseShudWxsLGtlKSx5dD1NYXRoLm1heC5hcHBseShudWxsLGtlKTtsLmJib3g9e3g6V2UseTp0dCx3aWR0aDpKZS1XZSxoZWlnaHQ6eXQtdHR9LGwuY2VudGVyPXt4OihXZStKZSkvMix5Oih0dCt5dCkvMn19InBhdGgiPT1hJiYoKGZlPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0v'@;
put 'KSkuc2hpZnQoKSxfZT1mZS5tYXAoZnVuY3Rpb24od3Ipe3JldHVybit3ci5zcGxpdCgiLCIpWzBdfSksa2U9ZmUubWFwKGZ1bmN0aW9uKHdyKXtyZXR1cm4rd3Iuc3BsaXQoIiwiKVsxXX0pLFdlPU1hdGgubWluLmFwcGx5KG51bGwsX2UpLEplPU1hdGgubWF4LmFwcGx5KG51bGwsX2UpLHR0'@;
put 'PU1hdGgubWluLmFwcGx5KG51bGwsa2UpLHl0PU1hdGgubWF4LmFwcGx5KG51bGwsa2UpLGwuYmJveD17eDpXZSx5OnR0LHdpZHRoOkplLVdlLGhlaWdodDp5dC10dH0sbC5jZW50ZXI9e3g6KFdlK0plKS8yLHk6KHR0K3l0KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVu'@;
put 'Z3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigieCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIF82KGMpe3ZhciBsPVZ1ZShjKTtyZXR1cm4g'@;
put 'bC5jaGlsZHJlbj1bXSxVVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGQ9XzYoT3ModGhpcykpO2QucGFyZW50PWwsbC5jaGlsZHJlbi5wdXNoKGQpfSksbH1mdW5jdGlvbiBjWihjKXtyZXR1cm4iI3RleHQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVUZXh0Tm9k'@;
put 'ZSgiIik6IiNjb21tZW50Ij09Yy50YWc/ZG9jdW1lbnQuY3JlYXRlQ29tbWVudChjLmNvbW1lbnQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLGMudGFnKX1mdW5jdGlvbiB1WihjKXt2YXIgbD1jWihjKSxhPU9zKGwpLGQ9Yy5hdHRyaWJ1'@;
put 'dGVzO2Zvcih2YXIgaCBvZiBPYmplY3Qua2V5cyhkKSlhLmF0dHIoaCxkW2hdKTtyZXR1cm4gbH1mdW5jdGlvbiBqdWUoYyxsKXt2YXIgYT1PcyhjLm5vZGUoKS5wYXJlbnROb2RlKSxkPXVaKGwpLGg9YS5pbnNlcnQoZnVuY3Rpb24oKXtyZXR1cm4gZH0sZnVuY3Rpb24oKXtyZXR1cm4gYy5u'@;
put 'b2RlKCl9KTtyZXR1cm4gYy5yZW1vdmUoKSxofWZ1bmN0aW9uIGRaKGMsbCl7IWZ1bmN0aW9uIElpdChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxVVShjLm5vZGUoKS5jaGlsZE5vZGVzKS5lYWNoKGZ1bmN0aW9uKGQsaCl7ZFoo'@;
put 'T3ModGhpcyksbC5jaGlsZHJlbltoXSl9KX1mdW5jdGlvbiBnTShjLGw9MCl7dmFyIGE9T3ModGhpcyksaD1jLmF0dHJpYnV0ZXMsZj1hLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGYpZm9yKHZhciB2PTA7djxmLmxlbmd0aDt2Kyspe3ZhciBUPWZbdl0sWT1ULm5hbWU7aWYoInhtbG5zIiE9WS5z'@;
put 'cGxpdCgiOiIpWzBdJiZULm5hbWVzcGFjZVVSSSl7dmFyIHJlPVQubmFtZXNwYWNlVVJJLnNwbGl0KCIvIik7WT1yZVtyZS5sZW5ndGgtMV0rIjoiK1l9WSBpbiBofHwoaFtZXT1udWxsKX1mb3IodmFyIF9lIG9mIE9iamVjdC5rZXlzKGgpKWEuYXR0cihfZSxoW19lXSk7Yy50ZXh0JiZhLnRl'@;
put 'eHQoYy50ZXh0KSxmdW5jdGlvbiBSaXQoYyxsKXt2YXIgYT1jLnNlbGVjdEFsbChmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKS5jaGlsZE5vZGVzfSksZD0oYT1hLmRhdGEoZnVuY3Rpb24odil7cmV0dXJuIHYuY2hpbGRyZW59LGZ1bmN0aW9uKHYpe3JldHVybiB2LnRhZysiLSIrbH0pKS5l'@;
put 'bnRlcigpLmFwcGVuZChmdW5jdGlvbih2KXtyZXR1cm4gY1oodil9KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBUPXYudGFnO251bGw9PWZbVF0mJihmW1RdPTApO3ZhciBZPWZbVF0rKztnTS5jYWxsKHRoaXMs'@;
put 'dixZKX0pfShhLGwpfWZ1bmN0aW9uIEJ1ZShjLGwpe3ZhciB2LGE9bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxkOysrdiloW3ZdPVJBKGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2'@;
put 'XTtyZXR1cm4gZnVuY3Rpb24oVCl7Zm9yKHY9MDt2PGQ7Kyt2KWZbdl09aFt2XShUKTtyZXR1cm4gZn19ZnVuY3Rpb24gT2l0KGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBQ'@;
put 'aXQoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPVJBKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihm'@;
put 'KXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVuY3Rpb24gRml0KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1m'@;
put 'KStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIFJBKGMsbCl7dmFyIGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT9uWihsKTooIm51bWJlciI9PT1hP2pmOiJzdHJpbmciPT09YT8oZD1mNihsKSk/KGw9ZCxEQSk6UnVlOmwgaW5zdGFuY2VvZiBmNj9EQTpsIGlu'@;
put 'c3RhbmNlb2YgRGF0ZT9PaXQ6ZnVuY3Rpb24gSGl0KGMpe3JldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoYykmJiEoYyBpbnN0YW5jZW9mIERhdGFWaWV3KX0obCk/Rml0OkFycmF5LmlzQXJyYXkobCk/QnVlOiJmdW5jdGlvbiIhPXR5cGVvZiBsLnZhbHVlT2YmJiJmdW5jdGlvbiIhPXR5cGVv'@;
put 'ZiBsLnRvU3RyaW5nfHxpc05hTihsKT9QaXQ6amYpKGMsbCl9ZnVuY3Rpb24gWXVlKCl7dmFyIGM9dGhpcyxkPU9zKHRoaXMuX3NlbGVjdGlvbi5ub2RlKCkucXVlcnlTZWxlY3Rvcigic3ZnIikpO2lmKDA9PWQuc2l6ZSgpKXJldHVybiB0aGlzO3RoaXMuX3pvb21TZWxlY3Rpb249ZDt2YXIg'@;
put 'aD1mdW5jdGlvbiBMaXQoKXt2YXIgZmUsX2Usa2UsYz1raXQsbD1FaXQsYT1BaXQsZD1UaXQsaD1EaXQsZj1bMCwxLzBdLHY9W1stMS8wLC0xLzBdLFsxLzAsMS8wXV0sVD0yNTAsWT1DaXQscmU9WlUoInN0YXJ0Iiwiem9vbSIsImVuZCIpLFdlPTUwMCxKZT0xNTAsdHQ9MCx5dD0xMDtmdW5j'@;
put 'dGlvbiB3dChqbil7am4ucHJvcGVydHkoIl9fem9vbSIsTnVlKS5vbigid2hlZWwuem9vbSIsVHIse3Bhc3NpdmU6ITF9KS5vbigibW91c2Vkb3duLnpvb20iLFBpKS5vbigiZGJsY2xpY2suem9vbSIsSGkpLmZpbHRlcihoKS5vbigidG91Y2hzdGFydC56b29tIix3cikub24oInRvdWNobW92'@;
put 'ZS56b29tIixhaSkub24oInRvdWNoZW5kLnpvb20gdG91Y2hjYW5jZWwuem9vbSIsdGkpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIil9ZnVuY3Rpb24gTHQoam4sVXIpe3JldHVybihVcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sVXIp'@;
put 'KSk9PT1qbi5rP2puOm5ldyB3cChVcixqbi54LGpuLnkpfWZ1bmN0aW9uIG9uKGpuLFVyLGVyKXt2YXIgRHI9VXJbMF0tZXJbMF0qam4uayxFcj1VclsxXS1lclsxXSpqbi5rO3JldHVybiBEcj09PWpuLngmJkVyPT09am4ueT9qbjpuZXcgd3Aoam4uayxEcixFcil9ZnVuY3Rpb24gc24oam4p'@;
put 'e3JldHVyblsoK2puWzBdWzBdKyAram5bMV1bMF0pLzIsKCtqblswXVsxXSsgK2puWzFdWzFdKS8yXX1mdW5jdGlvbiBNbihqbixVcixlcixEcil7am4ub24oInN0YXJ0Lnpvb20iLGZ1bmN0aW9uKCl7Vm4odGhpcyxhcmd1bWVudHMpLmV2ZW50KERyKS5zdGFydCgpfSkub24oImludGVycnVw'@;
put 'dC56b29tIGVuZC56b29tIixmdW5jdGlvbigpe1ZuKHRoaXMsYXJndW1lbnRzKS5ldmVudChEcikuZW5kKCl9KS50d2Vlbigiem9vbSIsZnVuY3Rpb24oKXt2YXIgRXI9dGhpcyxndD1hcmd1bWVudHMsT3Q9Vm4oRXIsZ3QpLmV2ZW50KERyKSxjbj1sLmFwcGx5KEVyLGd0KSxObj1udWxsPT1l'@;
put 'cj9zbihjbik6ImZ1bmN0aW9uIj09dHlwZW9mIGVyP2VyLmFwcGx5KEVyLGd0KTplcix4bj1NYXRoLm1heChjblsxXVswXS1jblswXVswXSxjblsxXVsxXS1jblswXVsxXSksS249RXIuX196b29tLFByPSJmdW5jdGlvbiI9PXR5cGVvZiBVcj9Vci5hcHBseShFcixndCk6VXIsanI9WShLbi5p'@;
put 'bnZlcnQoTm4pLmNvbmNhdCh4bi9Lbi5rKSxQci5pbnZlcnQoTm4pLmNvbmNhdCh4bi9Qci5rKSk7cmV0dXJuIGZ1bmN0aW9uKFFyKXtpZigxPT09UXIpUXI9UHI7ZWxzZXt2YXIgbmk9anIoUXIpLEtyPXhuL25pWzJdO1FyPW5ldyB3cChLcixOblswXS1uaVswXSpLcixOblsxXS1uaVsxXSpL'@;
put 'cil9T3Quem9vbShudWxsLFFyKX19KX1mdW5jdGlvbiBWbihqbixVcixlcil7cmV0dXJuIWVyJiZqbi5fX3pvb21pbmd8fG5ldyB1cihqbixVcil9ZnVuY3Rpb24gdXIoam4sVXIpe3RoaXMudGhhdD1qbix0aGlzLmFyZ3M9VXIsdGhpcy5hY3RpdmU9MCx0aGlzLnNvdXJjZUV2ZW50PW51bGws'@;
put 'dGhpcy5leHRlbnQ9bC5hcHBseShqbixVciksdGhpcy50YXBzPTB9ZnVuY3Rpb24gVHIoam4sLi4uVXIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZXI9Vm4odGhpcyxVcikuZXZlbnQoam4pLERyPXRoaXMuX196b29tLEVyPU1hdGgubWF4KGZbMF0sTWF0aC5taW4oZlsxXSxE'@;
put 'ci5rKk1hdGgucG93KDIsZC5hcHBseSh0aGlzLGFyZ3VtZW50cykpKSksZ3Q9ZzYoam4pO2lmKGVyLndoZWVsKShlci5tb3VzZVswXVswXSE9PWd0WzBdfHxlci5tb3VzZVswXVsxXSE9PWd0WzFdKSYmKGVyLm1vdXNlWzFdPURyLmludmVydChlci5tb3VzZVswXT1ndCkpLGNsZWFyVGltZW91'@;
put 'dChlci53aGVlbCk7ZWxzZXtpZihEci5rPT09RXIpcmV0dXJuO2VyLm1vdXNlPVtndCxEci5pbnZlcnQoZ3QpXSxNQSh0aGlzKSxlci5zdGFydCgpfW1NKGpuKSxlci53aGVlbD1zZXRUaW1lb3V0KGZ1bmN0aW9uIE90KCl7ZXIud2hlZWw9bnVsbCxlci5lbmQoKX0sSmUpLGVyLnpvb20oIm1v'@;
put 'dXNlIixhKG9uKEx0KERyLEVyKSxlci5tb3VzZVswXSxlci5tb3VzZVsxXSksZXIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gUGkoam4sLi4uVXIpe2lmKCFrZSYmYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciBlcj1qbi5jdXJyZW50VGFyZ2V0LERyPVZuKHRoaXMsVXIsITApLmV2ZW50KGpu'@;
put 'KSxFcj1Pcyhqbi52aWV3KS5vbigibW91c2Vtb3ZlLnpvb20iLGZ1bmN0aW9uIE5uKEtuKXtpZihtTShLbiksIURyLm1vdmVkKXt2YXIgUHI9S24uY2xpZW50WC1PdCxqcj1Lbi5jbGllbnRZLWNuO0RyLm1vdmVkPVByKlByK2pyKmpyPnR0fURyLmV2ZW50KEtuKS56b29tKCJtb3VzZSIsYShv'@;
put 'bihEci50aGF0Ll9fem9vbSxEci5tb3VzZVswXT1nNihLbixlciksRHIubW91c2VbMV0pLERyLmV4dGVudCx2KSl9LCEwKS5vbigibW91c2V1cC56b29tIixmdW5jdGlvbiB4bihLbil7RXIub24oIm1vdXNlbW92ZS56b29tIG1vdXNldXAuem9vbSIsbnVsbCksZnVuY3Rpb24geWl0KGMsbCl7'@;
put 'dmFyIGE9Yy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZD1PcyhjKS5vbigiZHJhZ3N0YXJ0LmRyYWciLG51bGwpO2wmJihkLm9uKCJjbGljay5kcmFnIixhWixzWiksc2V0VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4g'@;
put 'YT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5zdHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0oS24udmlldyxEci5tb3ZlZCksbU0oS24pLERyLmV2ZW50KEtuKS5lbmQoKX0sITApLGd0PWc2KGpuLGVyKSxPdD1qbi5jbGllbnRY'@;
put 'LGNuPWpuLmNsaWVudFk7KGZ1bmN0aW9uIHZpdChjKXt2YXIgbD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPU9zKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsYVosc1opOyJvbnNlbGVjdHN0YXJ0ImluIGw/YS5vbigic2VsZWN0c3RhcnQuZHJhZyIsYVosc1opOihsLl9fbm9zZWxlY3Q9'@;
put 'bC5zdHlsZS5Nb3pVc2VyU2VsZWN0LGwuc3R5bGUuTW96VXNlclNlbGVjdD0ibm9uZSIpfSkoam4udmlldyksbFooam4pLERyLm1vdXNlPVtndCx0aGlzLl9fem9vbS5pbnZlcnQoZ3QpXSxNQSh0aGlzKSxEci5zdGFydCgpfX1mdW5jdGlvbiBIaShqbiwuLi5Vcil7aWYoYy5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cykpe3ZhciBlcj10aGlzLl9fem9vbSxEcj1nNihqbi5jaGFuZ2VkVG91Y2hlcz9qbi5jaGFuZ2VkVG91Y2hlc1swXTpqbix0aGlzKSxFcj1lci5pbnZlcnQoRHIpLE90PWEob24oTHQoZXIsZXIuayooam4uc2hpZnRLZXk/LjU6MikpLERyLEVyKSxsLmFwcGx5KHRoaXMsVXIp'@;
put 'LHYpO21NKGpuKSxUPjA/T3ModGhpcykudHJhbnNpdGlvbigpLmR1cmF0aW9uKFQpLmNhbGwoTW4sT3QsRHIsam4pOk9zKHRoaXMpLmNhbGwod3QudHJhbnNmb3JtLE90LERyLGpuKX19ZnVuY3Rpb24gd3Ioam4sLi4uVXIpe2lmKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgZ3QsT3Qs'@;
put 'Y24sTm4sZXI9am4udG91Y2hlcyxEcj1lci5sZW5ndGgsRXI9Vm4odGhpcyxVcixqbi5jaGFuZ2VkVG91Y2hlcy5sZW5ndGg9PT1EcikuZXZlbnQoam4pO2ZvcihsWihqbiksT3Q9MDtPdDxEcjsrK090KU5uPVtObj1nNihjbj1lcltPdF0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KE5uKSxj'@;
put 'bi5pZGVudGlmaWVyXSxFci50b3VjaDA/IUVyLnRvdWNoMSYmRXIudG91Y2gwWzJdIT09Tm5bMl0mJihFci50b3VjaDE9Tm4sRXIudGFwcz0wKTooRXIudG91Y2gwPU5uLGd0PSEwLEVyLnRhcHM9MSshIWZlKTtmZSYmKGZlPWNsZWFyVGltZW91dChmZSkpLGd0JiYoRXIudGFwczwyJiYoX2U9'@;
put 'Tm5bMF0sZmU9c2V0VGltZW91dChmdW5jdGlvbigpe2ZlPW51bGx9LFdlKSksTUEodGhpcyksRXIuc3RhcnQoKSl9fWZ1bmN0aW9uIGFpKGpuLC4uLlVyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIGd0LE90LGNuLE5uLGVyPVZuKHRoaXMsVXIpLmV2ZW50KGpuKSxEcj1qbi5jaGFuZ2VkVG91'@;
put 'Y2hlcyxFcj1Eci5sZW5ndGg7Zm9yKG1NKGpuKSxndD0wO2d0PEVyOysrZ3QpY249ZzYoT3Q9RHJbZ3RdLHRoaXMpLGVyLnRvdWNoMCYmZXIudG91Y2gwWzJdPT09T3QuaWRlbnRpZmllcj9lci50b3VjaDBbMF09Y246ZXIudG91Y2gxJiZlci50b3VjaDFbMl09PT1PdC5pZGVudGlmaWVyJiYo'@;
put 'ZXIudG91Y2gxWzBdPWNuKTtpZihPdD1lci50aGF0Ll9fem9vbSxlci50b3VjaDEpe3ZhciB4bj1lci50b3VjaDBbMF0sS249ZXIudG91Y2gwWzFdLFByPWVyLnRvdWNoMVswXSxqcj1lci50b3VjaDFbMV0sUXI9KFFyPVByWzBdLXhuWzBdKSpRcisoUXI9UHJbMV0teG5bMV0pKlFyLG5pPShu'@;
put 'aT1qclswXS1LblswXSkqbmkrKG5pPWpyWzFdLUtuWzFdKSpuaTtPdD1MdChPdCxNYXRoLnNxcnQoUXIvbmkpKSxjbj1bKHhuWzBdK1ByWzBdKS8yLCh4blsxXStQclsxXSkvMl0sTm49WyhLblswXStqclswXSkvMiwoS25bMV0ranJbMV0pLzJdfWVsc2V7aWYoIWVyLnRvdWNoMClyZXR1cm47'@;
put 'Y249ZXIudG91Y2gwWzBdLE5uPWVyLnRvdWNoMFsxXX1lci56b29tKCJ0b3VjaCIsYShvbihPdCxjbixObiksZXIuZXh0ZW50LHYpKX19ZnVuY3Rpb24gdGkoam4sLi4uVXIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgZ3QsT3QsZXI9Vm4odGhpcyxVcikuZXZlbnQoam4pLERyPWpuLmNoYW5n'@;
put 'ZWRUb3VjaGVzLEVyPURyLmxlbmd0aDtmb3IobFooam4pLGtlJiZjbGVhclRpbWVvdXQoa2UpLGtlPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtrZT1udWxsfSxXZSksZ3Q9MDtndDxFcjsrK2d0KU90PURyW2d0XSxlci50b3VjaDAmJmVyLnRvdWNoMFsyXT09PU90LmlkZW50aWZpZXI/ZGVsZXRl'@;
put 'IGVyLnRvdWNoMDplci50b3VjaDEmJmVyLnRvdWNoMVsyXT09PU90LmlkZW50aWZpZXImJmRlbGV0ZSBlci50b3VjaDE7aWYoZXIudG91Y2gxJiYhZXIudG91Y2gwJiYoZXIudG91Y2gwPWVyLnRvdWNoMSxkZWxldGUgZXIudG91Y2gxKSxlci50b3VjaDApZXIudG91Y2gwWzFdPXRoaXMuX196'@;
put 'b29tLmludmVydChlci50b3VjaDBbMF0pO2Vsc2UgaWYoZXIuZW5kKCksMj09PWVyLnRhcHMmJihPdD1nNihPdCx0aGlzKSxNYXRoLmh5cG90KF9lWzBdLU90WzBdLF9lWzFdLU90WzFdKTx5dCkpe3ZhciBjbj1Pcyh0aGlzKS5vbigiZGJsY2xpY2suem9vbSIpO2NuJiZjbi5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9fX1yZXR1cm4gd3QudHJhbnNmb3JtPWZ1bmN0aW9uKGpuLFVyLGVyLERyKXt2YXIgRXI9am4uc2VsZWN0aW9uP2puLnNlbGVjdGlvbigpOmpuO0VyLnByb3BlcnR5KCJfX3pvb20iLE51ZSksam4hPT1Fcj9NbihqbixVcixlcixEcik6RXIuaW50ZXJydXB0KCkuZWFjaChm'@;
put 'dW5jdGlvbigpe1ZuKHRoaXMsYXJndW1lbnRzKS5ldmVudChEcikuc3RhcnQoKS56b29tKG51bGwsImZ1bmN0aW9uIj09dHlwZW9mIFVyP1VyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpVcikuZW5kKCl9KX0sd3Quc2NhbGVCeT1mdW5jdGlvbihqbixVcixlcixEcil7d3Quc2NhbGVUbyhqbixm'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLl9fem9vbS5rKigiZnVuY3Rpb24iPT10eXBlb2YgVXI/VXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlVyKX0sZXIsRHIpfSx3dC5zY2FsZVRvPWZ1bmN0aW9uKGpuLFVyLGVyLERyKXt3dC50cmFuc2Zvcm0oam4sZnVuY3Rpb24oKXt2YXIgRXI9bC5hcHBs'@;
put 'eSh0aGlzLGFyZ3VtZW50cyksZ3Q9dGhpcy5fX3pvb20sT3Q9bnVsbD09ZXI/c24oRXIpOiJmdW5jdGlvbiI9PXR5cGVvZiBlcj9lci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZXIsY249Z3QuaW52ZXJ0KE90KSxObj0iZnVuY3Rpb24iPT10eXBlb2YgVXI/VXIuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpOlVyO3JldHVybiBhKG9uKEx0KGd0LE5uKSxPdCxjbiksRXIsdil9LGVyLERyKX0sd3QudHJhbnNsYXRlQnk9ZnVuY3Rpb24oam4sVXIsZXIsRHIpe3d0LnRyYW5zZm9ybShqbixmdW5jdGlvbigpe3JldHVybiBhKHRoaXMuX196b29tLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'VXI/VXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOlVyLCJmdW5jdGlvbiI9PXR5cGVvZiBlcj9lci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6ZXIpLGwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHYpfSxudWxsLERyKX0sd3QudHJhbnNsYXRlVG89ZnVuY3Rpb24oam4sVXIsZXIsRHIsRXIpe3d0LnRy'@;
put 'YW5zZm9ybShqbixmdW5jdGlvbigpe3ZhciBndD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxPdD10aGlzLl9fem9vbSxjbj1udWxsPT1Ecj9zbihndCk6ImZ1bmN0aW9uIj09dHlwZW9mIERyP0RyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpEcjtyZXR1cm4gYShMQS50cmFuc2xhdGUoY25bMF0s'@;
put 'Y25bMV0pLnNjYWxlKE90LmspLnRyYW5zbGF0ZSgiZnVuY3Rpb24iPT10eXBlb2YgVXI/LVVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTotVXIsImZ1bmN0aW9uIj09dHlwZW9mIGVyPy1lci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWVyKSxndCx2KX0sRHIsRXIpfSx1ci5wcm90b3R5cGU9e2V2'@;
put 'ZW50OmZ1bmN0aW9uKGpuKXtyZXR1cm4gam4mJih0aGlzLnNvdXJjZUV2ZW50PWpuKSx0aGlzfSxzdGFydDpmdW5jdGlvbigpe3JldHVybiAxPT0rK3RoaXMuYWN0aXZlJiYodGhpcy50aGF0Ll9fem9vbWluZz10aGlzLHRoaXMuZW1pdCgic3RhcnQiKSksdGhpc30sem9vbTpmdW5jdGlvbihq'@;
put 'bixVcil7cmV0dXJuIHRoaXMubW91c2UmJiJtb3VzZSIhPT1qbiYmKHRoaXMubW91c2VbMV09VXIuaW52ZXJ0KHRoaXMubW91c2VbMF0pKSx0aGlzLnRvdWNoMCYmInRvdWNoIiE9PWpuJiYodGhpcy50b3VjaDBbMV09VXIuaW52ZXJ0KHRoaXMudG91Y2gwWzBdKSksdGhpcy50b3VjaDEmJiJ0'@;
put 'b3VjaCIhPT1qbiYmKHRoaXMudG91Y2gxWzFdPVVyLmludmVydCh0aGlzLnRvdWNoMVswXSkpLHRoaXMudGhhdC5fX3pvb209VXIsdGhpcy5lbWl0KCJ6b29tIiksdGhpc30sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PS0tdGhpcy5hY3RpdmUmJihkZWxldGUgdGhpcy50aGF0Ll9fem9vbWlu'@;
put 'Zyx0aGlzLmVtaXQoImVuZCIpKSx0aGlzfSxlbWl0OmZ1bmN0aW9uKGpuKXt2YXIgVXI9T3ModGhpcy50aGF0KS5kYXR1bSgpO3JlLmNhbGwoam4sdGhpcy50aGF0LG5ldyB4aXQoam4se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0Ond0LHR5cGU6am4sdHJhbnNmb3JtOnRo'@;
put 'aXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6cmV9KSxVcil9fSx3dC53aGVlbERlbHRhPWZ1bmN0aW9uKGpuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0iZnVuY3Rpb24iPT10eXBlb2Ygam4/am46QUEoK2puKSx3dCk6ZH0sd3QuZmlsdGVyPWZ1bmN0aW9uKGpuKXtyZXR1cm4gYXJndW1l'@;
put 'bnRzLmxlbmd0aD8oYz0iZnVuY3Rpb24iPT10eXBlb2Ygam4/am46QUEoISFqbiksd3QpOmN9LHd0LnRvdWNoYWJsZT1mdW5jdGlvbihqbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGg9ImZ1bmN0aW9uIj09dHlwZW9mIGpuP2puOkFBKCEham4pLHd0KTpofSx3dC5leHRlbnQ9ZnVuY3Rp'@;
put 'b24oam4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhsPSJmdW5jdGlvbiI9PXR5cGVvZiBqbj9qbjpBQShbWytqblswXVswXSwram5bMF1bMV1dLFsram5bMV1bMF0sK2puWzFdWzFdXV0pLHd0KTpsfSx3dC5zY2FsZUV4dGVudD1mdW5jdGlvbihqbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5n'@;
put 'dGg/KGZbMF09K2puWzBdLGZbMV09K2puWzFdLHd0KTpbZlswXSxmWzFdXX0sd3QudHJhbnNsYXRlRXh0ZW50PWZ1bmN0aW9uKGpuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odlswXVswXT0ram5bMF1bMF0sdlsxXVswXT0ram5bMV1bMF0sdlswXVsxXT0ram5bMF1bMV0sdlsxXVsxXT0r'@;
put 'am5bMV1bMV0sd3QpOltbdlswXVswXSx2WzBdWzFdXSxbdlsxXVswXSx2WzFdWzFdXV19LHd0LmNvbnN0cmFpbj1mdW5jdGlvbihqbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9am4sd3QpOmF9LHd0LmR1cmF0aW9uPWZ1bmN0aW9uKGpuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8o'@;
put 'VD0ram4sd3QpOlR9LHd0LmludGVycG9sYXRlPWZ1bmN0aW9uKGpuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oWT1qbix3dCk6WX0sd3Qub249ZnVuY3Rpb24oKXt2YXIgam49cmUub24uYXBwbHkocmUsYXJndW1lbnRzKTtyZXR1cm4gam49PT1yZT93dDpqbn0sd3QuY2xpY2tEaXN0YW5j'@;
put 'ZT1mdW5jdGlvbihqbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHR0PShqbj0ram4pKmpuLHd0KTpNYXRoLnNxcnQodHQpfSx3dC50YXBEaXN0YW5jZT1mdW5jdGlvbihqbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHl0PStqbix3dCk6eXR9LHd0fSgpLnNjYWxlRXh0ZW50KHRoaXMu'@;
put 'X29wdGlvbnMuem9vbVNjYWxlRXh0ZW50KS50cmFuc2xhdGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tVHJhbnNsYXRlRXh0ZW50KS5pbnRlcnBvbGF0ZShSQSkub24oInpvb20iLGZ1bmN0aW9uIGwodil7T3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKS5hdHRyKCJ0cmFuc2Zvcm0i'@;
put 'LHYudHJhbnNmb3JtKSxjLl9kaXNwYXRjaC5jYWxsKCJ6b29tIixjKX0pO3RoaXMuX3pvb21CZWhhdmlvcj1oO3ZhciBmPU9zKGQubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoImciKSk7cmV0dXJuIGQuY2FsbChoKSx0aGlzLl9hY3RpdmV8fGZaLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRy'@;
put 'YW5zZm9ybT1JQShkLm5vZGUoKSksdGhpc31mdW5jdGlvbiBoWihjKXt2YXIgbD10aGlzLl90cmFuc2xhdGlvbixhPXRoaXMuX3NjYWxlLGQ9Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLGg9Yy5kYXR1bSgpLnNjYWxlLGY9SUEodGhpcy5fem9vbVNlbGVjdGlvbi5ub2RlKCkpO3JldHVybiBsJiYo'@;
put 'Zj0oZj1mLnNjYWxlKDEvYSkpLnRyYW5zbGF0ZSgtbC54LC1sLnkpKSwoZj1mLnRyYW5zbGF0ZShkLngsZC55KSkuc2NhbGUoaCl9ZnVuY3Rpb24gZlooYyl7dGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSh0aGlzLl96b29tU2VsZWN0aW9uLGhaLmNhbGwodGhpcyxjKSksdGhpcy5fdHJh'@;
put 'bnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9uLHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1MQS50cmFuc2xhdGUoYy5kYXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2Fs'@;
put 'ZSl9ZnVuY3Rpb24gVWl0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gUkEoW2RbMF1bMF0sZFswXVsxXV0sW2RbMV1bMF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgp'@;
put 'e3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1mdW5jdGlvbiB6dWUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09Yy50YWcmJiJnIj09Yy5wYXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIFV1ZShj'@;
put 'KXtyZXR1cm4gYy5wYXJlbnQmJnp1ZShjLnBhcmVudCl9ZnVuY3Rpb24gWnVlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5f'@;
put 'b3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zLHY9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxUPXRoaXMuX2F0dHJpYnV0ZXIsWT10aGlzO3ZhciBfZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIGtlPXRoaXMuX2pvYnM7aWYoWS5fYWN0'@;
put 'aXZlKXJldHVybiBrZS5wdXNoKG51bGwpLHRoaXM7X2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtZLl9hY3RpdmU9ITEsMCE9a2UubGVuZ3RoJiYoa2Uuc2hpZnQoKSxZLnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxs'@;
put 'IT1sJiZfZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFydCIsZnVuY3Rpb24oKXtZLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLFkpfSkub24oImVuZCIsZnVuY3Rpb24oKXtZLl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixZKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigw'@;
put 'KS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7WS5fZGlzcGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsWSksWS5fZGlzcGF0Y2guY2FsbCgiZW5kIixZKSxjJiZjLmNhbGwoWSl9KTt2YXIgV2U9dGhpcy5fZGF0YSxKZT1fZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW1dlXSxmdW5jdGlvbih0dCl7cmV0'@;
put 'dXJuIHR0LmtleX0pO3JldHVybiBKZT1KZS5lbnRlcigpLmFwcGVuZCgic3ZnIikubWVyZ2UoSmUpLGZ1bmN0aW9uIGZlKHR0KXt2YXIgeXQ9T3ModGhpcyk7aWYoInN2ZyI9PXR0LnRhZyl7dmFyIHd0PVkuX29wdGlvbnM7aWYobnVsbCE9d3Qud2lkdGh8fG51bGwhPXd0LmhlaWdodCl7dmFy'@;
put 'IEx0PXd0LndpZHRoLG9uPXd0LmhlaWdodDtudWxsPT1MdD9MdD00KnR0LmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOih5dC5hdHRyKCJ3aWR0aCIsTHQpLHR0LmF0dHJpYnV0ZXMud2lkdGg9THQpLG51bGw9PW9uP29uPTQqdHQuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFj'@;
put 'ZSgicHQiLCIiKS8zOih5dC5hdHRyKCJoZWlnaHQiLG9uKSx0dC5hdHRyaWJ1dGVzLmhlaWdodD1vbiksd3QuZml0fHwoeXQuYXR0cigidmlld0JveCIsYDAgMCAkezMqTHQvNC93dC5zY2FsZX0gJHszKm9uLzQvd3Quc2NhbGV9YCksdHQuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKkx0'@;
put 'LzQvd3Quc2NhbGV9ICR7Mypvbi80L3d0LnNjYWxlfWApfTEhPXd0LnNjYWxlJiYod3QuZml0fHxudWxsPT13dC53aWR0aCYmbnVsbD09d3QuaGVpZ2h0KSYmKEx0PXR0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLG9uPXR0LmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIp'@;
put 'WzNdLHl0LmF0dHIoInZpZXdCb3giLGAwIDAgJHtMdC93dC5zY2FsZX0gJHtvbi93dC5zY2FsZX1gKSx0dC5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke0x0L3d0LnNjYWxlfSAke29uL3d0LnNjYWxlfWApfVQmJnl0LmVhY2goVCk7dmFyIHNuPXR0LnRhZyxNbj10dC5hdHRyaWJ1dGVzLFZu'@;
put 'PXl0Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKFZuKWZvcih2YXIgdXI9MDt1cjxWbi5sZW5ndGg7dXIrKyl7dmFyIFRyPVZuW3VyXSxQaT1Uci5uYW1lO2lmKCJ4bWxucyIhPVBpLnNwbGl0KCI6IilbMF0mJlRyLm5hbWVzcGFjZVVSSSl7dmFyIEhpPVRyLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIp'@;
put 'O1BpPUhpW0hpLmxlbmd0aC0xXSsiOiIrUGl9UGkgaW4gTW58fChNbltQaV09bnVsbCl9dmFyIGFpPSExLHRpPSExO2lmKGgmJmwpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJnR0LmFsdGVybmF0aXZlT2xkJiYodGk9ITApLCgicG9s'@;
put 'eWdvbiI9PXNufHwiZWxsaXBzZSI9PXNuKSYmdHQuYWx0ZXJuYXRpdmVOZXcmJihhaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PXNuJiZ0dC5hbHRlcm5hdGl2ZU9sZCl7dmFyIGpuPVZ1ZSh5dCk7aWYoIWYpe3ZhciBlcj1qbi5hdHRyaWJ1dGVzLnBvaW50cy5z'@;
put 'cGxpdCgiICIpLmxlbmd0aDsoRHI9dHQuYXR0cmlidXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1lciYmKGFpPSExLHRpPSExKX19aWYodGkpe3ZhciBPdD1qdWUoeXQsdHQuYWx0ZXJuYXRpdmVPbGQpO090LmRhdGEoW3R0XSxmdW5jdGlvbigpe3JldHVybiB0dC5rZXl9KSx5dD1P'@;
put 'dH1haSYmKHNuPSJwYXRoIixNbj10dC5hbHRlcm5hdGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgTm49eXQ7aWYobCYmKE5uPU5uLnRyYW5zaXRpb24obCksYSYmTm4uZmlsdGVyKGZ1bmN0aW9uKEhvKXtyZXR1cm4iIyI9PUhvLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSks'@;
put 'Tm4uZmlsdGVyKGZ1bmN0aW9uKEhvKXtyZXR1cm4iIyI9PUhvLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihIbyl7T3ModGhpcykuYXR0cigic3R5bGUiLEhvJiZIby5hdHRyaWJ1dGVzJiZIby5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSx2JiYicGF0aCI9PXNuJiZ0'@;
put 'dC5vZmZzZXQpe3ZhciBLbj10dC50b3RhbExlbmd0aDt5dC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixLbisiICIrS24pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixLbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrdHQub2Zmc2V0LngrIiwiK3R0Lm9mZnNldC55KyIpIiksTW5b'@;
put 'InN0cm9rZS1kYXNob2Zmc2V0Il09MCxNbi50cmFuc2Zvcm09InRyYW5zbGF0ZSgwLDApIixObi5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsTW5bInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsTW4udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7T3ModGhp'@;
put 'cykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24oImVuZCIsZnVuY3Rpb24oKXtPcyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKHYmJiJwb2x5Z29uIj09c24mJlV1'@;
put 'ZSh0dCkmJnR0Lm9mZnNldCYmInBhdGgiPT10dC5wYXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIganI9T3MoeXQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSxRcj1qci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxuaT1qci5ub2RlKCkuZ2V0UG9pbnRBdExl'@;
put 'bmd0aCh0dC50b3RhbExlbmd0aCksS3I9anIubm9kZSgpLmdldFBvaW50QXRMZW5ndGgodHQudG90YWxMZW5ndGgtMSksam89MTgwKk1hdGguYXRhbjIobmkueS1Lci55LG5pLngtS3IueCkvTWF0aC5QSSxUcz1Rci54LW5pLngrdHQub2Zmc2V0LngscW89UXIueS1uaS55K3R0Lm9mZnNldC55'@;
put 'O3l0LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0ZSgiK1RzKyIsIitxbysiKSIpLE5uLmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihIbyl7dmFyIFZ0PWpyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHR0LnRvdGFsTGVuZ3RoKkhvKSxkcz1qci5u'@;
put 'b2RlKCkuZ2V0UG9pbnRBdExlbmd0aCh0dC50b3RhbExlbmd0aCpIbysxKSx5bz0xODAqTWF0aC5hdGFuMihkcy55LVZ0LnksZHMueC1WdC54KS9NYXRoLlBJLWpvO3JldHVybiJ0cmFuc2xhdGUoIisoVHM9VnQueC1uaS54K3R0Lm9mZnNldC54KigxLUhvKSkrIiwiKyhxbz1WdC55LW5pLnkr'@;
put 'dHQub2Zmc2V0LnkqKDEtSG8pKSsiKSByb3RhdGUoIit5bysiICIrbmkueCsiICIrbmkueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe09zKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7T3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxs'@;
put 'KX0pfXZhciBzbD1kJiZsJiYicGF0aCI9PXNuJiZudWxsIT15dC5hdHRyKCJkIik7Zm9yKHZhciBJYSBvZiBPYmplY3Qua2V5cyhNbikpe3ZhciBnbz1NbltJYV07aWYoc2wmJiJkIj09SWEpe3ZhciBEcjsoRHI9KHR0LmFsdGVybmF0aXZlT2xkfHx0dCkucG9pbnRzKSYmTm4uYXR0clR3ZWVu'@;
put 'KCJkIixVaXQoRHIsZ28pKX1lbHNle2lmKCJ0cmFuc2Zvcm0iPT1JYSYmdHQudHJhbnNsYXRpb24paWYobCl7dmFyICRvPU5uLm9uKCJlbmQiKTtObi5vbigic3RhcnQiLGZ1bmN0aW9uKCl7WS5fem9vbUJlaGF2aW9yJiZObi50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFy'@;
put 'IEhvPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKFZ0KXtIby5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsdnVlKElBKFkuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLGhaLmNhbGwoWSx5dCkudG9TdHJpbmcoKSkoVnQpKX19KX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7JG8uY2FsbCh0'@;
put 'aGlzKSxZLl96b29tQmVoYXZpb3ImJmZaLmNhbGwoWSx5dCl9KX1lbHNlIFkuX3pvb21CZWhhdmlvciYmKGZaLmNhbGwoWSx5dCksZ289aFouY2FsbChZLHl0KS50b1N0cmluZygpKTtObi5hdHRyKElhLGdvKX19YWkmJk5uLm9uKCJlbmQiLGZ1bmN0aW9uKEhvLFZ0LGRzKXtqdWUoT3Q9T3Mo'@;
put 'dGhpcyksSG8pLmRhdGEoW0hvXSxmdW5jdGlvbigpe3JldHVybiBIby5rZXl9KX0pLHR0LnRleHQmJk5uLnRleHQodHQudGV4dCksZnVuY3Rpb24gcmUodHQpe3ZhciB5dD10dC5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gdHQubm9kZSgpLmNoaWxkTm9kZXN9KSx3dD0oeXQ9eXQuZGF0'@;
put 'YShmdW5jdGlvbihzbil7cmV0dXJuIHNuLmNoaWxkcmVufSxmdW5jdGlvbihzbil7cmV0dXJuIHNuLmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbihzbil7dmFyIE1uPWNaKHNuKTtyZXR1cm4iI3RleHQiPT1zbi50YWcmJmEmJihNbi5ub2RlVmFsdWU9c24udGV4dCksTW59KTsoYXx8'@;
put 'diYmenVlKHR0LmRhdHVtKCkpKSYmd3QuZmlsdGVyKGZ1bmN0aW9uKHNuKXtyZXR1cm4iIyI9PXNuLnRhZ1swXT9udWxsOnRoaXN9KS5lYWNoKGZ1bmN0aW9uKHNuKXt2YXIgTW49T3ModGhpcyk7Zm9yKHZhciBWbiBvZiBPYmplY3Qua2V5cyhzbi5hdHRyaWJ1dGVzKSlNbi5hdHRyKFZuLHNu'@;
put 'LmF0dHJpYnV0ZXNbVm5dKX0pLmZpbHRlcihmdW5jdGlvbihzbil7cmV0dXJuInN2ZyI9PXNuLnRhZ3x8ImciPT1zbi50YWc/bnVsbDp0aGlzfSkuc3R5bGUoIm9wYWNpdHkiLDApO3ZhciBvbj15dC5leGl0KCk7VCYmb24uZWFjaChUKSxsJiYob249b24udHJhbnNpdGlvbihsKSxhJiZvbi5m'@;
put 'aWx0ZXIoZnVuY3Rpb24oc24pe3JldHVybiIjIj09c24udGFnWzBdP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKSksb249b24ucmVtb3ZlKCksKHl0PXd0Lm1lcmdlKHl0KSkuZWFjaChmZSl9KHl0KX0uY2FsbChKZS5ub2RlKCksV2UpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMu'@;
put 'X3pvb21CZWhhdmlvciYmWXVlLmNhbGwodGhpcyksWS5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixZKSxudWxsPT1sJiYodGhpcy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9SUEucHJvdG90eXBlPXdwLnByb3RvdHlwZTt2YXIgWGl0PUFycmF5'@;
put 'QnVmZmVyLFRjPVVpbnQ4QXJyYXksT0E9VWludDE2QXJyYXksSml0PUludDE2QXJyYXksUEE9SW50MzJBcnJheSxwWj1mdW5jdGlvbihjLGwsYSl7aWYoVGMucHJvdG90eXBlLnNsaWNlKXJldHVybiBUYy5wcm90b3R5cGUuc2xpY2UuY2FsbChjLGwsYSk7KG51bGw9PWx8fGw8MCkmJihsPTAp'@;
put 'LChudWxsPT1hfHxhPmMubGVuZ3RoKSYmKGE9Yy5sZW5ndGgpO3ZhciBkPW5ldyBUYyhhLWwpO3JldHVybiBkLnNldChjLnN1YmFycmF5KGwsYSkpLGR9LF9NPWZ1bmN0aW9uKGMsbCxhLGQpe2lmKFRjLnByb3RvdHlwZS5maWxsKXJldHVybiBUYy5wcm90b3R5cGUuZmlsbC5jYWxsKGMsbCxh'@;
put 'LGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOysrYSljW2FdPWw7cmV0dXJuIGN9LFFpdD1mdW5jdGlvbihjLGwsYSxkKXtpZihUYy5wcm90b3R5cGUuY29weVdpdGhpbilyZXR1cm4gVGMucHJvdG90eXBlLmNvcHlX'@;
put 'aXRoaW4uY2FsbChjLGwsYSxkKTtmb3IoKG51bGw9PWF8fGE8MCkmJihhPTApLChudWxsPT1kfHxkPmMubGVuZ3RoKSYmKGQ9Yy5sZW5ndGgpO2E8ZDspY1tsKytdPWNbYSsrXX0sZW90PVsiaW52YWxpZCB6c3RkIGRhdGEiLCJ3aW5kb3cgc2l6ZSB0b28gbGFyZ2UgKD4yMDQ2TUIpIiwiaW52'@;
put 'YWxpZCBibG9jayB0eXBlIiwiRlNFIGFjY3VyYWN5IHRvbyBoaWdoIiwibWF0Y2ggZGlzdGFuY2UgdG9vIGZhciBiYWNrIiwidW5leHBlY3RlZCBFT0YiXSxLYz1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9bmV3IEVycm9yKGx8fGVvdFtjXSk7aWYoZC5jb2RlPWMsRXJyb3IuY2FwdHVyZVN0YWNr'@;
put 'VHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGQsS2MpLCFhKXRocm93IGQ7cmV0dXJuIGR9LFd1ZT1mdW5jdGlvbihjLGwsYSl7Zm9yKHZhciBkPTAsaD0wO2Q8YTsrK2QpaHw9Y1tsKytdPDwoZDw8Myk7cmV0dXJuIGh9LHRvdD1mdW5jdGlvbihjLGwpe3ZhciBhLGg9Y1swXXxjWzFd'@;
put 'PDw4fGNbMl08PDE2O2lmKDMxMjY1Njg9PWgmJjI1Mz09Y1szXSl7dmFyIGY9Y1s0XSx2PWY+PjUmMSxUPWY+PjImMSxZPTMmZixyZT1mPj42OzgmZiYmS2MoMCk7dmFyIGZlPTYtdixfZT0zPT1ZPzQ6WSxrZT1XdWUoYyxmZSxfZSksV2U9cmU/MTw8cmU6dixKZT1XdWUoYyxmZSs9X2UsV2Up'@;
put 'KygxPT1yZSYmMjU2KSx0dD1KZTtpZighdil7dmFyIHl0PTE8PDEwKyhjWzVdPj4zKTt0dD15dCsoeXQ+PjMpKig3JmNbNV0pfXR0PjIxNDUzODY0OTYmJktjKDEpO3ZhciB3dD1uZXcgVGMoKDE9PWw/SmV8fHR0Omw/MDp0dCkrMTIpO3JldHVybiB3dFswXT0xLHd0WzRdPTQsd3RbOF09OCx7'@;
put 'YjpmZStXZSx5OjAsbDowLGQ6a2UsdzpsJiYxIT1sP2w6d3Quc3ViYXJyYXkoMTIpLGU6dHQsbzpuZXcgUEEod3QuYnVmZmVyLDAsMyksdTpKZSxjOlQsbTpNYXRoLm1pbigxMzEwNzIsdHQpfX1pZigyNTQ4MTg5Mz09KGg+PjR8Y1szXTw8MjApKXJldHVybiA4KygoKGE9YylbNF18YVs1XTw8'@;
put 'OHxhWzZdPDwxNnxhWzddPDwyNCk+Pj4wKTtLYygwKX0sdjY9ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPTA7MTw8bDw9YzsrK2wpO3JldHVybiBsLTF9LHZNPWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD00KyhsPDwzKSxoPTUrKDE1JmNbbF0pO2g+YSYmS2MoMyk7Zm9yKHZhciBmPTE8PGgsdj1mLFQ9'@;
put 'LTEsWT0tMSxyZT0tMSxmZT1mLF9lPW5ldyBYaXQoNTEyKyhmPDwyKSksa2U9bmV3IEppdChfZSwwLDI1NiksV2U9bmV3IE9BKF9lLDAsMjU2KSxKZT1uZXcgT0EoX2UsNTEyLGYpLHR0PTUxMisoZjw8MSkseXQ9bmV3IFRjKF9lLHR0LGYpLHd0PW5ldyBUYyhfZSx0dCtmKTtUPDI1NSYmdj4w'@;
put 'Oyl7dmFyIEx0PXY2KHYrMSksb249ZD4+Myxzbj0oMTw8THQrMSktMSxNbj0oY1tvbl18Y1tvbisxXTw8OHxjW29uKzJdPDwxNik+Pig3JmQpJnNuLFZuPSgxPDxMdCktMSx1cj1zbi12LTEsVHI9TW4mVm47aWYoVHI8dXI/KGQrPUx0LE1uPVRyKTooZCs9THQrMSxNbj5WbiYmKE1uLT11cikp'@;
put 'LGtlWysrVF09LS1NbiwtMT09TW4/KHYrPU1uLHl0Wy0tZmVdPVQpOnYtPU1uLCFNbilkb3t2YXIgUGk9ZD4+MztZPShjW1BpXXxjW1BpKzFdPDw4KT4+KDcmZCkmMyxkKz0yLFQrPVl9d2hpbGUoMz09WSl9KFQ+MjU1fHx2KSYmS2MoMCk7Zm9yKHZhciBIaT0wLHdyPShmPj4xKSsoZj4+Mykr'@;
put 'MyxhaT1mLTEsdGk9MDt0aTw9VDsrK3RpKXt2YXIgam49a2VbdGldO2lmKGpuPDEpV2VbdGldPS1qbjtlbHNlIGZvcihyZT0wO3JlPGpuOysrcmUpe3l0W0hpXT10aTtkb3tIaT1IaSt3ciZhaX13aGlsZShIaT49ZmUpfX1mb3IoSGkmJktjKDApLHJlPTA7cmU8ZjsrK3JlKXt2YXIgVXI9V2Vb'@;
put 'eXRbcmVdXSsrLGVyPXd0W3JlXT1oLXY2KFVyKTtKZVtyZV09KFVyPDxlciktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczp5dCxuOnd0LHQ6SmV9XX0sbm90PXZNKG5ldyBUYyhbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSww'@;
put 'LDYpWzFdLHJvdD12TShuZXcgVGMoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0saW90PXZNKG5ldyBUYyhbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3'@;
put 'MywyXSksMCw1KVsxXSxHdWU9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgUEEoYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LG1aPW5ldyBUYyhuZXcgUEEoWzAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTM0Njc4MDIwLDIwMjA1MDA1'@;
put 'NywyNjk0MjIwOTNdKS5idWZmZXIsMCwzNiksb290PUd1ZShtWiwwKSxnWj1uZXcgVGMobmV3IFBBKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1Myksc290PUd1ZShnWiwzKSx5TT1mdW5jdGlv'@;
put 'bihjLGwsYSl7dmFyIGQ9Yy5sZW5ndGgsaD1sLmxlbmd0aCxmPWNbZC0xXSx2PSgxPDxhLmIpLTEsVD0tYS5iO2Z8fEtjKDApO2Zvcih2YXIgWT0wLHJlPWEuYixmZT0oZDw8MyktOCt2NihmKS1yZSxfZT0tMTtmZT5UJiZfZTxoOyl7dmFyIGtlPWZlPj4zO2xbKytfZV09YS5zW1k9KFk8PHJl'@;
put 'fChjW2tlXXxjW2tlKzFdPDw4fGNba2UrMl08PDE2KT4+KDcmZmUpKSZ2XSxmZS09cmU9YS5uW1ldfWZlPT1UJiZfZSsxPT1ofHxLYygwKX0sYW90PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD02LGg9bC5sZW5ndGgrMz4+MixmPWg8PDEsdj1oK2Y7eU0oYy5zdWJhcnJheShkLGQrPWNbMF18Y1sx'@;
put 'XTw8OCksbC5zdWJhcnJheSgwLGgpLGEpLHlNKGMuc3ViYXJyYXkoZCxkKz1jWzJdfGNbM108PDgpLGwuc3ViYXJyYXkoaCxmKSxhKSx5TShjLnN1YmFycmF5KGQsZCs9Y1s0XXxjWzVdPDw4KSxsLnN1YmFycmF5KGYsdiksYSkseU0oYy5zdWJhcnJheShkKSxsLnN1YmFycmF5KHYpLGEpfSxs'@;
put 'b3Q9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkLGg9bC5iLGY9Y1toXSx2PWY+PjEmMztsLmw9MSZmO3ZhciBUPWY+PjN8Y1toKzFdPDw1fGNbaCsyXTw8MTMsWT0oaCs9MykrVDtpZigxPT12KXJldHVybiBoPj1jLmxlbmd0aD92b2lkIDA6KGwuYj1oKzEsYT8oX00oYSxjW2hdLGwueSxsLnkrPVQp'@;
put 'LGEpOl9NKG5ldyBUYyhUKSxjW2hdKSk7aWYoIShZPmMubGVuZ3RoKSl7aWYoMD09dilyZXR1cm4gbC5iPVksYT8oYS5zZXQoYy5zdWJhcnJheShoLFkpLGwueSksbC55Kz1ULGEpOnBaKGMsaCxZKTtpZigyPT12KXt2YXIgcmU9Y1toXSxmZT0zJnJlLF9lPXJlPj4yJjMsa2U9cmU+PjQsV2U9'@;
put 'MCxKZT0wO2ZlPDI/MSZfZT9rZXw9Y1srK2hdPDw0fCgyJl9lJiZjWysraF08PDEyKTprZT1yZT4+MzooSmU9X2UsX2U8Mj8oa2V8PSg2MyZjWysraF0pPDw0LFdlPWNbaF0+PjZ8Y1srK2hdPDwyKToyPT1fZT8oa2V8PWNbKytoXTw8NHwoMyZjWysraF0pPDwxMixXZT1jW2hdPj4yfGNbKyto'@;
put 'XTw8Nik6KGtlfD1jWysraF08PDR8KDYzJmNbKytoXSk8PDEyLFdlPWNbaF0+PjZ8Y1srK2hdPDwyfGNbKytoXTw8MTApKSwrK2g7dmFyIHR0PWE/YS5zdWJhcnJheShsLnksbC55K2wubSk6bmV3IFRjKGwubSkseXQ9dHQubGVuZ3RoLWtlO2lmKDA9PWZlKXR0LnNldChjLnN1YmFycmF5KGgs'@;
put 'aCs9a2UpLHl0KTtlbHNlIGlmKDE9PWZlKV9NKHR0LGNbaCsrXSx5dCk7ZWxzZXt2YXIgd3Q9bC5oO2lmKDI9PWZlKXt2YXIgTHQ9ZnVuY3Rpb24oSWEsZ28pe3ZhciAkbz0wLEhvPS0xLFZ0PW5ldyBUYygyOTIpLGRzPUlhW2dvXSx5bz1WdC5zdWJhcnJheSgwLDI1NiksY2M9VnQuc3ViYXJy'@;
put 'YXkoMjU2LDI2OCksUmE9bmV3IE9BKFZ0LmJ1ZmZlciwyNjgpO2lmKGRzPDEyOCl7dmFyIHBoPXZNKElhLGdvKzEsNikscHU9cGhbMV0semY9cGhbMF08PDMsTXA9SWFbZ28rPWRzXTtNcHx8S2MoMCk7Zm9yKHZhciBDMT0wLE0yPTAsbXU9cHUuYixDMj1tdSxoMD0oKytnbzw8MyktOCt2NihN'@;
put 'cCk7ISgoaDAtPW11KTx6Zik7KXt2YXIgbWg9aDA+PjM7aWYoeW9bKytIb109cHUuc1tDMSs9KElhW21oXXxJYVttaCsxXTw8OCk+Pig3JmgwKSYoMTw8bXUpLTFdLChoMC09QzIpPHpmKWJyZWFrO00yKz0oSWFbbWg9aDA+PjNdfElhW21oKzFdPDw4KT4+KDcmaDApJigxPDxDMiktMSx5b1sr'@;
put 'K0hvXT1wdS5zW00yXSxtdT1wdS5uW0MxXSxDMT1wdS50W0MxXSxDMj1wdS5uW00yXSxNMj1wdS50W00yXX0rK0hvPjI1NSYmS2MoMCl9ZWxzZXtmb3IoSG89ZHMtMTI3OyRvPEhvOyRvKz0yKXt2YXIgVjA9SWFbKytnb107eW9bJG9dPVYwPj40LHlvWyRvKzFdPTE1JlYwfSsrZ299dmFyIGFz'@;
put 'PTA7Zm9yKCRvPTA7JG88SG87KyskbykoeG09eW9bJG9dKT4xMSYmS2MoMCksYXMrPXhtJiYxPDx4bS0xO3ZhciBqMD12NihhcykrMSxTMj0xPDxqMCxROT1TMi1hcztmb3IoUTkmUTktMSYmS2MoMCkseW9bSG8rK109djYoUTkpKzEsJG89MDskbzxIbzsrKyRvKXt2YXIgeG09eW9bJG9dOysr'@;
put 'Y2NbeW9bJG9dPXhtJiZqMCsxLXhtXX12YXIgd009bmV3IFRjKFMyPDwxKSxNTT13TS5zdWJhcnJheSgwLFMyKSxDTT13TS5zdWJhcnJheShTMik7Zm9yKFJhW2owXT0wLCRvPWowOyRvPjA7LS0kbyl7dmFyIFNNPVJhWyRvXTtfTShDTSwkbyxTTSxSYVskby0xXT1TTStjY1skb10qKDE8PGow'@;
put 'LSRvKSl9Zm9yKFJhWzBdIT1TMiYmS2MoMCksJG89MDskbzxIbzsrKyRvKXt2YXIgYjY9eW9bJG9dO2lmKGI2KXt2YXIgeE09UmFbYjZdO19NKE1NLCRvLHhNLFJhW2I2XT14TSsoMTw8ajAtYjYpKX19cmV0dXJuW2dvLHtuOkNNLGI6ajAsczpNTX1dfShjLGgpO1dlKz1oLShoPUx0WzBdKSxs'@;
put 'Lmg9d3Q9THRbMV19ZWxzZSB3dHx8S2MoMCk7KEplP2FvdDp5TSkoYy5zdWJhcnJheShoLGgrPVdlKSx0dC5zdWJhcnJheSh5dCksd3QpfXZhciBvbj1jW2grK107aWYob24pezI1NT09b24/b249MzI1MTIrKGNbaCsrXXxjW2grK108PDgpOm9uPjEyNyYmKG9uPW9uLTEyODw8OHxjW2grK10p'@;
put 'O3ZhciBzbj1jW2grK107MyZzbiYmS2MoMCk7Zm9yKHZhciBNbj1bcm90LGlvdCxub3RdLFZuPTI7Vm4+LTE7LS1Wbil7dmFyIHVyPXNuPj4yKyhWbjw8MSkmMztpZigxPT11cil7dmFyIFRyPW5ldyBUYyhbMCwwLGNbaCsrXV0pO01uW1ZuXT17czpUci5zdWJhcnJheSgyLDMpLG46VHIuc3Vi'@;
put 'YXJyYXkoMCwxKSx0Om5ldyBPQShUci5idWZmZXIsMCwxKSxiOjB9fWVsc2UgMj09dXI/KGg9KGQ9dk0oYyxoLDktKDEmVm4pKSlbMF0sTW5bVm5dPWRbMV0pOjM9PXVyJiYobC50fHxLYygwKSxNbltWbl09bC50W1ZuXSl9dmFyIFBpPWwudD1NbixIaT1QaVswXSx3cj1QaVsxXSxhaT1QaVsy'@;
put 'XSx0aT1jW1ktMV07dGl8fEtjKDApO3ZhciBqbj0oWTw8MyktOCt2Nih0aSktYWkuYixVcj1qbj4+Myxlcj0wLERyPShjW1VyXXxjW1VyKzFdPDw4KT4+KDcmam4pJigxPDxhaS5iKS0xLEVyPShjW1VyPShqbi09d3IuYik+PjNdfGNbVXIrMV08PDgpPj4oNyZqbikmKDE8PHdyLmIpLTEsZ3Q9'@;
put 'KGNbVXI9KGpuLT1IaS5iKT4+M118Y1tVcisxXTw8OCk+Pig3JmpuKSYoMTw8SGkuYiktMTtmb3IoKytvbjstLW9uOyl7dmFyIE90PWFpLnNbRHJdLGNuPWFpLm5bRHJdLE5uPUhpLnNbZ3RdLHhuPUhpLm5bZ3RdLEtuPXdyLnNbRXJdLFByPXdyLm5bRXJdLGpyPTE8PEtuLFFyPWpyKygoY1tV'@;
put 'cj0oam4tPUtuKT4+M118Y1tVcisxXTw8OHxjW1VyKzJdPDwxNnxjW1VyKzNdPDwyNCk+Pj4oNyZqbikmanItMSk7VXI9KGpuLT1nWltObl0pPj4zO3ZhciBuaT1zb3RbTm5dKygoY1tVcl18Y1tVcisxXTw8OHxjW1VyKzJdPDwxNik+Pig3JmpuKSYoMTw8Z1pbTm5dKS0xKTtVcj0oam4tPW1a'@;
put 'W090XSk+PjM7dmFyIEtyPW9vdFtPdF0rKChjW1VyXXxjW1VyKzFdPDw4fGNbVXIrMl08PDE2KT4+KDcmam4pJigxPDxtWltPdF0pLTEpO2lmKFVyPShqbi09Y24pPj4zLERyPWFpLnRbRHJdKygoY1tVcl18Y1tVcisxXTw8OCk+Pig3JmpuKSYoMTw8Y24pLTEpLFVyPShqbi09eG4pPj4zLGd0'@;
put 'PUhpLnRbZ3RdKygoY1tVcl18Y1tVcisxXTw8OCk+Pig3JmpuKSYoMTw8eG4pLTEpLFVyPShqbi09UHIpPj4zLEVyPXdyLnRbRXJdKygoY1tVcl18Y1tVcisxXTw8OCk+Pig3JmpuKSYoMTw8UHIpLTEpLFFyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT1Rci09MztlbHNl'@;
put 'e3ZhciBqbz1Rci0oMCE9S3IpO2pvPyhRcj0zPT1qbz9sLm9bMF0tMTpsLm9bam9dLGpvPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT1Rcik6UXI9bC5vWzBdfWZvcihWbj0wO1ZuPEtyOysrVm4pdHRbZXIrVm5dPXR0W3l0K1ZuXTt5dCs9S3I7dmFyIFRzPShlcis9'@;
put 'S3IpLVFyO2lmKFRzPDApe3ZhciBxbz0tVHMsc2w9bC5lK1RzO2Zvcihxbz5uaSYmKHFvPW5pKSxWbj0wO1ZuPHFvOysrVm4pdHRbZXIrVm5dPWwud1tzbCtWbl07ZXIrPXFvLG5pLT1xbyxUcz0wfWZvcihWbj0wO1ZuPG5pOysrVm4pdHRbZXIrVm5dPXR0W1RzK1ZuXTtlcis9bml9aWYoZXIh'@;
put 'PXl0KWZvcig7eXQ8dHQubGVuZ3RoOyl0dFtlcisrXT10dFt5dCsrXTtlbHNlIGVyPXR0Lmxlbmd0aDthP2wueSs9ZXI6dHQ9cFoodHQsMCxlcil9ZWxzZSBpZihhKXtpZihsLnkrPWtlLHl0KWZvcihWbj0wO1ZuPGtlOysrVm4pdHRbVm5dPXR0W3l0K1ZuXX1lbHNlIHl0JiYodHQ9cFoodHQs'@;
put 'eXQpKTtyZXR1cm4gbC5iPVksdHR9S2MoMil9fTt2YXIgaG90PSh0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudCxmdW5jdGlvbihjPXt9KXt2YXIgbCxhLGQsaCxmPU9iamVjdC5hc3NpZ24oe30sYyksdj1uZXcgUHJvbWlzZSgoUWUsZnQpPT57bD1RZSxhPWZ0fSksWT1PYmplY3QuYXNz'@;
put 'aWduKHt9LGYpLHJlPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZmU9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZixZKSxZPW51bGwsZi53YXNtQmluYXJ5JiYoZD1mLndhc21CaW5hcnkpO3ZhciBfZSxrZSxXZSxKZSx0dCx5dCx3dD0hMTtmdW5jdGlvbiBM'@;
put 'dChRZSxmdCl7UWV8fHdyKGZ0KX1mdW5jdGlvbiBvbigpe3ZhciBRZT1oLmJ1ZmZlcjtmLkhFQVA4PV9lPW5ldyBJbnQ4QXJyYXkoUWUpLGYuSEVBUDE2PVdlPW5ldyBJbnQxNkFycmF5KFFlKSxmLkhFQVBVOD1rZT1uZXcgVWludDhBcnJheShRZSksZi5IRUFQVTE2PW5ldyBVaW50MTZBcnJh'@;
put 'eShRZSksZi5IRUFQMzI9SmU9bmV3IEludDMyQXJyYXkoUWUpLGYuSEVBUFUzMj10dD1uZXcgVWludDMyQXJyYXkoUWUpLGYuSEVBUEYzMj1uZXcgRmxvYXQzMkFycmF5KFFlKSxmLkhFQVBGNjQ9eXQ9bmV3IEZsb2F0NjRBcnJheShRZSl9dmFyIHNuPVtdLE1uPVtdLFZuPVtdLHVyPTAsVHI9'@;
put 'bnVsbDtmdW5jdGlvbiBQaShRZSl7dXIrK31mdW5jdGlvbiBIaShRZSl7aWYoMD09LS11ciYmVHIpe3ZhciBmdD1UcjtUcj1udWxsLGZ0KCl9fWZ1bmN0aW9uIHdyKFFlKXtmZShRZT0iQWJvcnRlZCgiK1FlKyIpIiksd3Q9ITAsUWUrPSIuIEJ1aWxkIHdpdGggLXNBU1NFUlRJT05TIGZvciBt'@;
put 'b3JlIGluZm8uIjt2YXIgZnQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihRZSk7dGhyb3cgYShmdCksZnR9dmFyIGFpLHRpLGpuLFVyPVFlPT5RZS5zdGFydHNXaXRoKCJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsIik7ZnVuY3Rpb24gRXIoUWUsZnQsSXQpe3Jl'@;
put 'dHVybihXdD1RZSxQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5mdW5jdGlvbiBEcihRZSl7aWYoUWU9PWFpJiZkKXJldHVybiBuZXcgVWludDhBcnJheShkKTt0aHJvdyJib3RoIGFzeW5jIGFuZCBzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZCJ9KFd0KSkpLnRoZW4oV3Q9Pldl'@;
put 'YkFzc2VtYmx5Lmluc3RhbnRpYXRlKFd0LGZ0KSkudGhlbihJdCxXdD0+e2ZlKGBmYWlsZWQgdG8gYXN5bmNocm9ub3VzbHkgcHJlcGFyZSB3YXNtOiAke1d0fWApLHdyKFd0KX0pO3ZhciBXdH1VcihhaT0iZ3JhcGh2aXpsaWIud2FzbSIpfHwoYWk9IiIrYWkpO3ZhciBndD17MTcyOTI4OihR'@;
put 'ZSxmdCk9Pnt2YXIgSXQ9ZHMoUWUpLFd0PWRzKGZ0KTtWdC5jcmVhdGVQYXRoKCIvIix4bi5kaXJuYW1lKEl0KSksVnQud3JpdGVGaWxlKHhuLmpvaW4oIi8iLEl0KSxXdCl9fTtmdW5jdGlvbiBPdChRZSl7dGhpcy5uYW1lPSJFeGl0U3RhdHVzIix0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVy'@;
put 'bWluYXRlZCB3aXRoIGV4aXQoJHtRZX0pYCx0aGlzLnN0YXR1cz1RZX12YXIgY249UWU9Pntmb3IoO1FlLmxlbmd0aD4wOylRZS5zaGlmdCgpKGYpfTtjbGFzcyBObntjb25zdHJ1Y3RvcihmdCl7dGhpcy5leGNQdHI9ZnQsdGhpcy5wdHI9ZnQtMjR9c2V0X3R5cGUoZnQpe3R0W3RoaXMucHRy'@;
put 'KzQ+PjJdPWZ0fWdldF90eXBlKCl7cmV0dXJuIHR0W3RoaXMucHRyKzQ+PjJdfXNldF9kZXN0cnVjdG9yKGZ0KXt0dFt0aGlzLnB0cis4Pj4yXT1mdH1nZXRfZGVzdHJ1Y3Rvcigpe3JldHVybiB0dFt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KGZ0KXtfZVt0aGlzLnB0cisxMl09ZnQ9ZnQ/'@;
put 'MTowfWdldF9jYXVnaHQoKXtyZXR1cm4gMCE9X2VbdGhpcy5wdHIrMTJdfXNldF9yZXRocm93bihmdCl7X2VbdGhpcy5wdHIrMTNdPWZ0PWZ0PzE6MH1nZXRfcmV0aHJvd24oKXtyZXR1cm4gMCE9X2VbdGhpcy5wdHIrMTNdfWluaXQoZnQsSXQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0'@;
put 'aGlzLnNldF90eXBlKGZ0KSx0aGlzLnNldF9kZXN0cnVjdG9yKEl0KX1zZXRfYWRqdXN0ZWRfcHRyKGZ0KXt0dFt0aGlzLnB0cisxNj4+Ml09ZnR9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiB0dFt0aGlzLnB0cisxNj4+Ml19Z2V0X2V4Y2VwdGlvbl9wdHIoKXtpZihFMGUodGhpcy5nZXRf'@;
put 'dHlwZSgpKSlyZXR1cm4gdHRbdGhpcy5leGNQdHI+PjJdO3ZhciBmdD10aGlzLmdldF9hZGp1c3RlZF9wdHIoKTtyZXR1cm4gMCE9PWZ0P2Z0OnRoaXMuZXhjUHRyfX12YXIgeG49e2lzQWJzOlFlPT4iLyI9PT1RZS5jaGFyQXQoMCksc3BsaXRQYXRoOlFlPT4vXihcLz98KShbXHNcU10qPyko'@;
put 'KD86XC57MSwyfXxbXlwvXSs/fCkoXC5bXi5cL10qfCkpKD86W1wvXSopJC8uZXhlYyhRZSkuc2xpY2UoMSksbm9ybWFsaXplQXJyYXk6KFFlLGZ0KT0+e2Zvcih2YXIgSXQ9MCxXdD1RZS5sZW5ndGgtMTtXdD49MDtXdC0tKXt2YXIgRG49UWVbV3RdOyIuIj09PURuP1FlLnNwbGljZShXdCwx'@;
put 'KToiLi4iPT09RG4/KFFlLnNwbGljZShXdCwxKSxJdCsrKTpJdCYmKFFlLnNwbGljZShXdCwxKSxJdC0tKX1pZihmdClmb3IoO0l0O0l0LS0pUWUudW5zaGlmdCgiLi4iKTtyZXR1cm4gUWV9LG5vcm1hbGl6ZTpRZT0+e3ZhciBmdD14bi5pc0FicyhRZSksSXQ9Ii8iPT09UWUuc3Vic3RyKC0x'@;
put 'KTtyZXR1cm4oUWU9eG4ubm9ybWFsaXplQXJyYXkoUWUuc3BsaXQoIi8iKS5maWx0ZXIoV3Q9PiEhV3QpLCFmdCkuam9pbigiLyIpKXx8ZnR8fChRZT0iLiIpLFFlJiZJdCYmKFFlKz0iLyIpLChmdD8iLyI6IiIpK1FlfSxkaXJuYW1lOlFlPT57dmFyIGZ0PXhuLnNwbGl0UGF0aChRZSksSXQ9'@;
put 'ZnRbMF0sV3Q9ZnRbMV07cmV0dXJuIEl0fHxXdD8oV3QmJihXdD1XdC5zdWJzdHIoMCxXdC5sZW5ndGgtMSkpLEl0K1d0KToiLiJ9LGJhc2VuYW1lOlFlPT57aWYoIi8iPT09UWUpcmV0dXJuIi8iO3ZhciBmdD0oUWU9KFFlPXhuLm5vcm1hbGl6ZShRZSkpLnJlcGxhY2UoL1wvJC8sIiIpKS5s'@;
put 'YXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09ZnQ/UWU6UWUuc3Vic3RyKGZ0KzEpfSxqb2luOiguLi5RZSk9PnhuLm5vcm1hbGl6ZShRZS5qb2luKCIvIikpLGpvaW4yOihRZSxmdCk9PnhuLm5vcm1hbGl6ZShRZSsiLyIrZnQpfSxLbj1RZT0+KEtuPSgoKT0+e2lmKCJvYmplY3QiPT10eXBl'@;
put 'b2YgY3J5cHRvJiYiZnVuY3Rpb24iPT10eXBlb2YgY3J5cHRvLmdldFJhbmRvbVZhbHVlcylyZXR1cm4gZnQ9PmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZnQpO3dyKCJpbml0UmFuZG9tRGV2aWNlIil9KSgpKShRZSksUHI9e3Jlc29sdmU6KC4uLlFlKT0+e2Zvcih2YXIgZnQ9IiIsSXQ9ITEs'@;
put 'V3Q9UWUubGVuZ3RoLTE7V3Q+PS0xJiYhSXQ7V3QtLSl7dmFyIERuPVd0Pj0wP1FlW1d0XTpWdC5jd2QoKTtpZigic3RyaW5nIiE9dHlwZW9mIERuKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYoIURuKXJldHVybiIi'@;
put 'O2Z0PURuKyIvIitmdCxJdD14bi5pc0FicyhEbil9cmV0dXJuKEl0PyIvIjoiIikrKGZ0PXhuLm5vcm1hbGl6ZUFycmF5KGZ0LnNwbGl0KCIvIikuZmlsdGVyKGFyPT4hIWFyKSwhSXQpLmpvaW4oIi8iKSl8fCIuIn0scmVsYXRpdmU6KFFlLGZ0KT0+e2Z1bmN0aW9uIEl0KFdvKXtmb3IodmFy'@;
put 'IGxzPTA7bHM8V28ubGVuZ3RoJiYiIj09PVdvW2xzXTtscysrKTtmb3IodmFyIGpzPVdvLmxlbmd0aC0xO2pzPj0wJiYiIj09PVdvW2pzXTtqcy0tKTtyZXR1cm4gbHM+anM/W106V28uc2xpY2UobHMsanMtbHMrMSl9UWU9UHIucmVzb2x2ZShRZSkuc3Vic3RyKDEpLGZ0PVByLnJlc29sdmUo'@;
put 'ZnQpLnN1YnN0cigxKTtmb3IodmFyIFd0PUl0KFFlLnNwbGl0KCIvIikpLERuPUl0KGZ0LnNwbGl0KCIvIikpLGFyPU1hdGgubWluKFd0Lmxlbmd0aCxEbi5sZW5ndGgpLHNyPWFyLEhyPTA7SHI8YXI7SHIrKylpZihXdFtIcl0hPT1EbltIcl0pe3NyPUhyO2JyZWFrfXZhciBDbz1bXTtmb3Io'@;
put 'SHI9c3I7SHI8V3QubGVuZ3RoO0hyKyspQ28ucHVzaCgiLi4iKTtyZXR1cm4oQ289Q28uY29uY2F0KERuLnNsaWNlKHNyKSkpLmpvaW4oIi8iKX19LGpyPXR5cGVvZiBUZXh0RGVjb2RlcjwidSI/bmV3IFRleHREZWNvZGVyKCJ1dGY4Iik6dm9pZCAwLFFyPShRZSxmdCxJdCk9Pntmb3IodmFy'@;
put 'IFd0PWZ0K0l0LERuPWZ0O1FlW0RuXSYmIShEbj49V3QpOykrK0RuO2lmKERuLWZ0PjE2JiZRZS5idWZmZXImJmpyKXJldHVybiBqci5kZWNvZGUoUWUuc3ViYXJyYXkoZnQsRG4pKTtmb3IodmFyIGFyPSIiO2Z0PERuOyl7dmFyIHNyPVFlW2Z0KytdO2lmKDEyOCZzcil7dmFyIEhyPTYzJlFl'@;
put 'W2Z0KytdO2lmKDE5MiE9KDIyNCZzcikpe3ZhciBDbz02MyZRZVtmdCsrXTtpZigoc3I9MjI0PT0oMjQwJnNyKT8oMTUmc3IpPDwxMnxIcjw8NnxDbzooNyZzcik8PDE4fEhyPDwxMnxDbzw8Nnw2MyZRZVtmdCsrXSk8NjU1MzYpYXIrPVN0cmluZy5mcm9tQ2hhckNvZGUoc3IpO2Vsc2V7dmFy'@;
put 'IFdvPXNyLTY1NTM2O2FyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2fFdvPj4xMCw1NjMyMHwxMDIzJldvKX19ZWxzZSBhcis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmc3IpPDw2fEhyKX1lbHNlIGFyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHNyKX1yZXR1cm4gYXJ9LG5pPVtdLEtyPVFl'@;
put 'PT57Zm9yKHZhciBmdD0wLEl0PTA7SXQ8UWUubGVuZ3RoOysrSXQpe3ZhciBXdD1RZS5jaGFyQ29kZUF0KEl0KTtXdDw9MTI3P2Z0Kys6V3Q8PTIwNDc/ZnQrPTI6V3Q+PTU1Mjk2JiZXdDw9NTczNDM/KGZ0Kz00LCsrSXQpOmZ0Kz0zfXJldHVybiBmdH0sam89KFFlLGZ0LEl0LFd0KT0+e2lm'@;
put 'KCEoV3Q+MCkpcmV0dXJuIDA7Zm9yKHZhciBEbj1JdCxhcj1JdCtXdC0xLHNyPTA7c3I8UWUubGVuZ3RoOysrc3Ipe3ZhciBIcj1RZS5jaGFyQ29kZUF0KHNyKTtpZihIcj49NTUyOTYmJkhyPD01NzM0MyYmKEhyPTY1NTM2KygoMTAyMyZIcik8PDEwKXwxMDIzJlFlLmNoYXJDb2RlQXQoKytz'@;
put 'cikpLEhyPD0xMjcpe2lmKEl0Pj1hcilicmVhaztmdFtJdCsrXT1Icn1lbHNlIGlmKEhyPD0yMDQ3KXtpZihJdCsxPj1hcilicmVhaztmdFtJdCsrXT0xOTJ8SHI+PjYsZnRbSXQrK109MTI4fDYzJkhyfWVsc2UgaWYoSHI8PTY1NTM1KXtpZihJdCsyPj1hcilicmVhaztmdFtJdCsrXT0yMjR8'@;
put 'SHI+PjEyLGZ0W0l0KytdPTEyOHxIcj4+NiY2MyxmdFtJdCsrXT0xMjh8NjMmSHJ9ZWxzZXtpZihJdCszPj1hcilicmVhaztmdFtJdCsrXT0yNDB8SHI+PjE4LGZ0W0l0KytdPTEyOHxIcj4+MTImNjMsZnRbSXQrK109MTI4fEhyPj42JjYzLGZ0W0l0KytdPTEyOHw2MyZIcn19cmV0dXJuIGZ0'@;
put 'W0l0XT0wLEl0LURufTtmdW5jdGlvbiBUcyhRZSxmdCxJdCl7dmFyIFd0PUtyKFFlKSsxLERuPW5ldyBBcnJheShXdCksYXI9am8oUWUsRG4sMCxEbi5sZW5ndGgpO3JldHVybiBmdCYmKERuLmxlbmd0aD1hciksRG59dmFyIHFvPXt0dHlzOltdLGluaXQoKXt9LHNodXRkb3duKCl7fSxyZWdp'@;
put 'c3RlcihRZSxmdCl7cW8udHR5c1tRZV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6ZnR9LFZ0LnJlZ2lzdGVyRGV2aWNlKFFlLHFvLnN0cmVhbV9vcHMpfSxzdHJlYW1fb3BzOntvcGVuKFFlKXt2YXIgZnQ9cW8udHR5c1tRZS5ub2RlLnJkZXZdO2lmKCFmdCl0aHJvdyBuZXcgVnQuRXJybm9F'@;
put 'cnJvcig0Myk7UWUudHR5PWZ0LFFlLnNlZWthYmxlPSExfSxjbG9zZShRZSl7UWUudHR5Lm9wcy5mc3luYyhRZS50dHkpfSxmc3luYyhRZSl7UWUudHR5Lm9wcy5mc3luYyhRZS50dHkpfSxyZWFkKFFlLGZ0LEl0LFd0LERuKXtpZighUWUudHR5fHwhUWUudHR5Lm9wcy5nZXRfY2hhcil0aHJv'@;
put 'dyBuZXcgVnQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBhcj0wLHNyPTA7c3I8V3Q7c3IrKyl7dmFyIEhyO3RyeXtIcj1RZS50dHkub3BzLmdldF9jaGFyKFFlLnR0eSl9Y2F0Y2h7dGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUhyJiYwPT09YXIpdGhyb3cgbmV3IFZ0'@;
put 'LkVycm5vRXJyb3IoNik7aWYobnVsbD09SHIpYnJlYWs7YXIrKyxmdFtJdCtzcl09SHJ9cmV0dXJuIGFyJiYoUWUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksYXJ9LHdyaXRlKFFlLGZ0LEl0LFd0LERuKXtpZighUWUudHR5fHwhUWUudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgVnQu'@;
put 'RXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgYXI9MDthcjxXdDthcisrKVFlLnR0eS5vcHMucHV0X2NoYXIoUWUudHR5LGZ0W0l0K2FyXSl9Y2F0Y2h7dGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjkpfXJldHVybiBXdCYmKFFlLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGFyfX0sZGVm'@;
put 'YXVsdF90dHlfb3BzOntnZXRfY2hhcjpRZT0+KCgpPT57aWYoIW5pLmxlbmd0aCl7dmFyIGZ0PW51bGw7aWYodHlwZW9mIHdpbmRvdzwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiB3aW5kb3cucHJvbXB0P251bGwhPT0oZnQ9d2luZG93LnByb21wdCgiSW5wdXQ6ICIpKSYmKGZ0Kz0iXG4iKToi'@;
put 'ZnVuY3Rpb24iPT10eXBlb2YgcmVhZGxpbmUmJm51bGwhPT0oZnQ9cmVhZGxpbmUoKSkmJihmdCs9IlxuIiksIWZ0KXJldHVybiBudWxsO25pPVRzKGZ0LCEwKX1yZXR1cm4gbmkuc2hpZnQoKX0pKCkscHV0X2NoYXIoUWUsZnQpe251bGw9PT1mdHx8MTA9PT1mdD8ocmUoUXIoUWUub3V0cHV0'@;
put 'LDApKSxRZS5vdXRwdXQ9W10pOjAhPWZ0JiZRZS5vdXRwdXQucHVzaChmdCl9LGZzeW5jKFFlKXtRZS5vdXRwdXQmJlFlLm91dHB1dC5sZW5ndGg+MCYmKHJlKFFyKFFlLm91dHB1dCwwKSksUWUub3V0cHV0PVtdKX0saW9jdGxfdGNnZXRzOlFlPT4oe2NfaWZsYWc6MjU4NTYsY19vZmxhZzo1'@;
put 'LGNfY2ZsYWc6MTkxLGNfbGZsYWc6MzUzODcsY19jYzpbMywyOCwxMjcsMjEsNCwwLDEsMCwxNywxOSwyNiwwLDE4LDE1LDIzLDIyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdfSksaW9jdGxfdGNzZXRzOihRZSxmdCxJdCk9PjAsaW9jdGxfdGlvY2d3aW5zejpRZT0+WzI0LDgw'@;
put 'XX0sZGVmYXVsdF90dHkxX29wczp7cHV0X2NoYXIoUWUsZnQpe251bGw9PT1mdHx8MTA9PT1mdD8oZmUoUXIoUWUub3V0cHV0LDApKSxRZS5vdXRwdXQ9W10pOjAhPWZ0JiZRZS5vdXRwdXQucHVzaChmdCl9LGZzeW5jKFFlKXtRZS5vdXRwdXQmJlFlLm91dHB1dC5sZW5ndGg+MCYmKGZlKFFy'@;
put 'KFFlLm91dHB1dCwwKSksUWUub3V0cHV0PVtdKX19fSxzbD0oUWUsZnQpPT5NYXRoLmNlaWwoUWUvZnQpKmZ0LElhPVFlPT57UWU9c2woUWUsNjU1MzYpO3ZhciBJdCxmdD1rMGUoNjU1MzYsUWUpO3JldHVybiBmdD8oa2UuZmlsbCgwLEl0PWZ0LEl0K1FlKSxJdCk6MH0sZ289e29wc190YWJs'@;
put 'ZTpudWxsLG1vdW50OlFlPT5nby5jcmVhdGVOb2RlKG51bGwsIi8iLDE2ODk1LDApLGNyZWF0ZU5vZGUoUWUsZnQsSXQsV3Qpe2lmKFZ0LmlzQmxrZGV2KEl0KXx8VnQuaXNGSUZPKEl0KSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig2Myk7Z28ub3BzX3RhYmxlfHw9e2Rpcjp7bm9kZTp7Z2V0'@;
put 'YXR0cjpnby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Z28ubm9kZV9vcHMuc2V0YXR0cixsb29rdXA6Z28ubm9kZV9vcHMubG9va3VwLG1rbm9kOmdvLm5vZGVfb3BzLm1rbm9kLHJlbmFtZTpnby5ub2RlX29wcy5yZW5hbWUsdW5saW5rOmdvLm5vZGVfb3BzLnVubGluayxybWRpcjpnby5u'@;
put 'b2RlX29wcy5ybWRpcixyZWFkZGlyOmdvLm5vZGVfb3BzLnJlYWRkaXIsc3ltbGluazpnby5ub2RlX29wcy5zeW1saW5rfSxzdHJlYW06e2xsc2Vlazpnby5zdHJlYW1fb3BzLmxsc2Vla319LGZpbGU6e25vZGU6e2dldGF0dHI6Z28ubm9kZV9vcHMuZ2V0YXR0cixzZXRhdHRyOmdvLm5vZGVf'@;
put 'b3BzLnNldGF0dHJ9LHN0cmVhbTp7bGxzZWVrOmdvLnN0cmVhbV9vcHMubGxzZWVrLHJlYWQ6Z28uc3RyZWFtX29wcy5yZWFkLHdyaXRlOmdvLnN0cmVhbV9vcHMud3JpdGUsYWxsb2NhdGU6Z28uc3RyZWFtX29wcy5hbGxvY2F0ZSxtbWFwOmdvLnN0cmVhbV9vcHMubW1hcCxtc3luYzpnby5z'@;
put 'dHJlYW1fb3BzLm1zeW5jfX0sbGluazp7bm9kZTp7Z2V0YXR0cjpnby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6Z28ubm9kZV9vcHMuc2V0YXR0cixyZWFkbGluazpnby5ub2RlX29wcy5yZWFkbGlua30sc3RyZWFtOnt9fSxjaHJkZXY6e25vZGU6e2dldGF0dHI6Z28ubm9kZV9vcHMuZ2V0'@;
put 'YXR0cixzZXRhdHRyOmdvLm5vZGVfb3BzLnNldGF0dHJ9LHN0cmVhbTpWdC5jaHJkZXZfc3RyZWFtX29wc319O3ZhciBEbj1WdC5jcmVhdGVOb2RlKFFlLGZ0LEl0LFd0KTtyZXR1cm4gVnQuaXNEaXIoRG4ubW9kZSk/KERuLm5vZGVfb3BzPWdvLm9wc190YWJsZS5kaXIubm9kZSxEbi5zdHJl'@;
put 'YW1fb3BzPWdvLm9wc190YWJsZS5kaXIuc3RyZWFtLERuLmNvbnRlbnRzPXt9KTpWdC5pc0ZpbGUoRG4ubW9kZSk/KERuLm5vZGVfb3BzPWdvLm9wc190YWJsZS5maWxlLm5vZGUsRG4uc3RyZWFtX29wcz1nby5vcHNfdGFibGUuZmlsZS5zdHJlYW0sRG4udXNlZEJ5dGVzPTAsRG4uY29udGVu'@;
put 'dHM9bnVsbCk6VnQuaXNMaW5rKERuLm1vZGUpPyhEbi5ub2RlX29wcz1nby5vcHNfdGFibGUubGluay5ub2RlLERuLnN0cmVhbV9vcHM9Z28ub3BzX3RhYmxlLmxpbmsuc3RyZWFtKTpWdC5pc0NocmRldihEbi5tb2RlKSYmKERuLm5vZGVfb3BzPWdvLm9wc190YWJsZS5jaHJkZXYubm9kZSxE'@;
put 'bi5zdHJlYW1fb3BzPWdvLm9wc190YWJsZS5jaHJkZXYuc3RyZWFtKSxEbi50aW1lc3RhbXA9RGF0ZS5ub3coKSxRZSYmKFFlLmNvbnRlbnRzW2Z0XT1EbixRZS50aW1lc3RhbXA9RG4udGltZXN0YW1wKSxEbn0sZ2V0RmlsZURhdGFBc1R5cGVkQXJyYXk6UWU9PlFlLmNvbnRlbnRzP1FlLmNv'@;
put 'bnRlbnRzLnN1YmFycmF5P1FlLmNvbnRlbnRzLnN1YmFycmF5KDAsUWUudXNlZEJ5dGVzKTpuZXcgVWludDhBcnJheShRZS5jb250ZW50cyk6bmV3IFVpbnQ4QXJyYXkoMCksZXhwYW5kRmlsZVN0b3JhZ2UoUWUsZnQpe3ZhciBJdD1RZS5jb250ZW50cz9RZS5jb250ZW50cy5sZW5ndGg6MDtp'@;
put 'ZighKEl0Pj1mdCkpe2Z0PU1hdGgubWF4KGZ0LEl0KihJdDwxMDQ4NTc2PzI6MS4xMjUpPj4+MCksMCE9SXQmJihmdD1NYXRoLm1heChmdCwyNTYpKTt2YXIgV3Q9UWUuY29udGVudHM7UWUuY29udGVudHM9bmV3IFVpbnQ4QXJyYXkoZnQpLFFlLnVzZWRCeXRlcz4wJiZRZS5jb250ZW50cy5z'@;
put 'ZXQoV3Quc3ViYXJyYXkoMCxRZS51c2VkQnl0ZXMpLDApfX0scmVzaXplRmlsZVN0b3JhZ2UoUWUsZnQpe2lmKFFlLnVzZWRCeXRlcyE9ZnQpaWYoMD09ZnQpUWUuY29udGVudHM9bnVsbCxRZS51c2VkQnl0ZXM9MDtlbHNle3ZhciBJdD1RZS5jb250ZW50cztRZS5jb250ZW50cz1uZXcgVWlu'@;
put 'dDhBcnJheShmdCksSXQmJlFlLmNvbnRlbnRzLnNldChJdC5zdWJhcnJheSgwLE1hdGgubWluKGZ0LFFlLnVzZWRCeXRlcykpKSxRZS51c2VkQnl0ZXM9ZnR9fSxub2RlX29wczp7Z2V0YXR0cihRZSl7dmFyIGZ0PXt9O3JldHVybiBmdC5kZXY9VnQuaXNDaHJkZXYoUWUubW9kZSk/UWUuaWQ6'@;
put 'MSxmdC5pbm89UWUuaWQsZnQubW9kZT1RZS5tb2RlLGZ0Lm5saW5rPTEsZnQudWlkPTAsZnQuZ2lkPTAsZnQucmRldj1RZS5yZGV2LGZ0LnNpemU9VnQuaXNEaXIoUWUubW9kZSk/NDA5NjpWdC5pc0ZpbGUoUWUubW9kZSk/UWUudXNlZEJ5dGVzOlZ0LmlzTGluayhRZS5tb2RlKT9RZS5saW5r'@;
put 'Lmxlbmd0aDowLGZ0LmF0aW1lPW5ldyBEYXRlKFFlLnRpbWVzdGFtcCksZnQubXRpbWU9bmV3IERhdGUoUWUudGltZXN0YW1wKSxmdC5jdGltZT1uZXcgRGF0ZShRZS50aW1lc3RhbXApLGZ0LmJsa3NpemU9NDA5NixmdC5ibG9ja3M9TWF0aC5jZWlsKGZ0LnNpemUvZnQuYmxrc2l6ZSksZnR9'@;
put 'LHNldGF0dHIoUWUsZnQpe3ZvaWQgMCE9PWZ0Lm1vZGUmJihRZS5tb2RlPWZ0Lm1vZGUpLHZvaWQgMCE9PWZ0LnRpbWVzdGFtcCYmKFFlLnRpbWVzdGFtcD1mdC50aW1lc3RhbXApLHZvaWQgMCE9PWZ0LnNpemUmJmdvLnJlc2l6ZUZpbGVTdG9yYWdlKFFlLGZ0LnNpemUpfSxsb29rdXAoUWUs'@;
put 'ZnQpe3Rocm93IFZ0LmdlbmVyaWNFcnJvcnNbNDRdfSxta25vZDooUWUsZnQsSXQsV3QpPT5nby5jcmVhdGVOb2RlKFFlLGZ0LEl0LFd0KSxyZW5hbWUoUWUsZnQsSXQpe2lmKFZ0LmlzRGlyKFFlLm1vZGUpKXt2YXIgV3Q7dHJ5e1d0PVZ0Lmxvb2t1cE5vZGUoZnQsSXQpfWNhdGNoe31pZihX'@;
put 'dClmb3IodmFyIERuIGluIFd0LmNvbnRlbnRzKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDU1KX1kZWxldGUgUWUucGFyZW50LmNvbnRlbnRzW1FlLm5hbWVdLFFlLnBhcmVudC50aW1lc3RhbXA9RGF0ZS5ub3coKSxRZS5uYW1lPUl0LGZ0LmNvbnRlbnRzW0l0XT1RZSxmdC50aW1lc3RhbXA9'@;
put 'UWUucGFyZW50LnRpbWVzdGFtcCxRZS5wYXJlbnQ9ZnR9LHVubGluayhRZSxmdCl7ZGVsZXRlIFFlLmNvbnRlbnRzW2Z0XSxRZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scm1kaXIoUWUsZnQpe3ZhciBJdD1WdC5sb29rdXBOb2RlKFFlLGZ0KTtmb3IodmFyIFd0IGluIEl0LmNvbnRlbnRzKXRo'@;
put 'cm93IG5ldyBWdC5FcnJub0Vycm9yKDU1KTtkZWxldGUgUWUuY29udGVudHNbZnRdLFFlLnRpbWVzdGFtcD1EYXRlLm5vdygpfSxyZWFkZGlyKFFlKXt2YXIgZnQ9WyIuIiwiLi4iXTtmb3IodmFyIEl0IG9mIE9iamVjdC5rZXlzKFFlLmNvbnRlbnRzKSlmdC5wdXNoKEl0KTtyZXR1cm4gZnR9'@;
put 'LHN5bWxpbmsoUWUsZnQsSXQpe3ZhciBXdD1nby5jcmVhdGVOb2RlKFFlLGZ0LDQxNDcxLDApO3JldHVybiBXdC5saW5rPUl0LFd0fSxyZWFkbGluayhRZSl7aWYoIVZ0LmlzTGluayhRZS5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFFlLmxpbmt9fSxzdHJlYW1f'@;
put 'b3BzOntyZWFkKFFlLGZ0LEl0LFd0LERuKXt2YXIgYXI9UWUubm9kZS5jb250ZW50cztpZihEbj49UWUubm9kZS51c2VkQnl0ZXMpcmV0dXJuIDA7dmFyIHNyPU1hdGgubWluKFFlLm5vZGUudXNlZEJ5dGVzLURuLFd0KTtpZihzcj44JiZhci5zdWJhcnJheSlmdC5zZXQoYXIuc3ViYXJyYXko'@;
put 'RG4sRG4rc3IpLEl0KTtlbHNlIGZvcih2YXIgSHI9MDtIcjxzcjtIcisrKWZ0W0l0K0hyXT1hcltEbitIcl07cmV0dXJuIHNyfSx3cml0ZShRZSxmdCxJdCxXdCxEbixhcil7aWYoZnQuYnVmZmVyPT09X2UuYnVmZmVyJiYoYXI9ITEpLCFXdClyZXR1cm4gMDt2YXIgc3I9UWUubm9kZTtpZihz'@;
put 'ci50aW1lc3RhbXA9RGF0ZS5ub3coKSxmdC5zdWJhcnJheSYmKCFzci5jb250ZW50c3x8c3IuY29udGVudHMuc3ViYXJyYXkpKXtpZihhcilyZXR1cm4gc3IuY29udGVudHM9ZnQuc3ViYXJyYXkoSXQsSXQrV3QpLHNyLnVzZWRCeXRlcz1XdCxXdDtpZigwPT09c3IudXNlZEJ5dGVzJiYwPT09'@;
put 'RG4pcmV0dXJuIHNyLmNvbnRlbnRzPWZ0LnNsaWNlKEl0LEl0K1d0KSxzci51c2VkQnl0ZXM9V3QsV3Q7aWYoRG4rV3Q8PXNyLnVzZWRCeXRlcylyZXR1cm4gc3IuY29udGVudHMuc2V0KGZ0LnN1YmFycmF5KEl0LEl0K1d0KSxEbiksV3R9aWYoZ28uZXhwYW5kRmlsZVN0b3JhZ2Uoc3IsRG4r'@;
put 'V3QpLHNyLmNvbnRlbnRzLnN1YmFycmF5JiZmdC5zdWJhcnJheSlzci5jb250ZW50cy5zZXQoZnQuc3ViYXJyYXkoSXQsSXQrV3QpLERuKTtlbHNlIGZvcih2YXIgSHI9MDtIcjxXdDtIcisrKXNyLmNvbnRlbnRzW0RuK0hyXT1mdFtJdCtIcl07cmV0dXJuIHNyLnVzZWRCeXRlcz1NYXRoLm1h'@;
put 'eChzci51c2VkQnl0ZXMsRG4rV3QpLFd0fSxsbHNlZWsoUWUsZnQsSXQpe3ZhciBXdD1mdDtpZigxPT09SXQ/V3QrPVFlLnBvc2l0aW9uOjI9PT1JdCYmVnQuaXNGaWxlKFFlLm5vZGUubW9kZSkmJihXdCs9UWUubm9kZS51c2VkQnl0ZXMpLFd0PDApdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3Io'@;
put 'MjgpO3JldHVybiBXdH0sYWxsb2NhdGUoUWUsZnQsSXQpe2dvLmV4cGFuZEZpbGVTdG9yYWdlKFFlLm5vZGUsZnQrSXQpLFFlLm5vZGUudXNlZEJ5dGVzPU1hdGgubWF4KFFlLm5vZGUudXNlZEJ5dGVzLGZ0K0l0KX0sbW1hcChRZSxmdCxJdCxXdCxEbil7aWYoIVZ0LmlzRmlsZShRZS5ub2Rl'@;
put 'Lm1vZGUpKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDQzKTt2YXIgYXIsc3IsSHI9UWUubm9kZS5jb250ZW50cztpZigyJkRufHxIci5idWZmZXIhPT1fZS5idWZmZXIpe2lmKChJdD4wfHxJdCtmdDxIci5sZW5ndGgpJiYoSHI9SHIuc3ViYXJyYXk/SHIuc3ViYXJyYXkoSXQsSXQrZnQpOkFy'@;
put 'cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKEhyLEl0LEl0K2Z0KSksc3I9ITAsIShhcj1JYShmdCkpKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDQ4KTtfZS5zZXQoSHIsYXIpfWVsc2Ugc3I9ITEsYXI9SHIuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmFyLGFsbG9jYXRlZDpzcn19LG1zeW5jOihR'@;
put 'ZSxmdCxJdCxXdCxEbik9Pihnby5zdHJlYW1fb3BzLndyaXRlKFFlLGZ0LDAsV3QsSXQsITEpLDApfX0sJG89W10sSG89KFFlLGZ0KT0+e3ZhciBJdD0wO3JldHVybiBRZSYmKEl0fD0zNjUpLGZ0JiYoSXR8PTE0NiksSXR9LFZ0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6e30sc3Ry'@;
put 'ZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tjb25zdHJ1Y3RvcihRZSl7dGhpcy5uYW1lPSJFcnJub0Vycm9yIix0aGlzLmVycm5vPVFlfX0sZ2VuZXJp'@;
put 'Y0Vycm9yczp7fSxmaWxlc3lzdGVtczpudWxsLHN5bmNGU1JlcXVlc3RzOjAsRlNTdHJlYW06Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLnNoYXJlZD17fX1nZXQgb2JqZWN0KCl7cmV0dXJuIHRoaXMubm9kZX1zZXQgb2JqZWN0KFFlKXt0aGlzLm5vZGU9UWV9Z2V0IGlzUmVhZCgpe3JldHVy'@;
put 'biAxIT0oMjA5NzE1NSZ0aGlzLmZsYWdzKX1nZXQgaXNXcml0ZSgpe3JldHVybiEhKDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzQXBwZW5kKCl7cmV0dXJuIDEwMjQmdGhpcy5mbGFnc31nZXQgZmxhZ3MoKXtyZXR1cm4gdGhpcy5zaGFyZWQuZmxhZ3N9c2V0IGZsYWdzKFFlKXt0aGlzLnNo'@;
put 'YXJlZC5mbGFncz1RZX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5zaGFyZWQucG9zaXRpb259c2V0IHBvc2l0aW9uKFFlKXt0aGlzLnNoYXJlZC5wb3NpdGlvbj1RZX19LEZTTm9kZTpjbGFzc3tjb25zdHJ1Y3RvcihRZSxmdCxJdCxXdCl7UWV8fChRZT10aGlzKSx0aGlzLnBhcmVudD1R'@;
put 'ZSx0aGlzLm1vdW50PVFlLm1vdW50LHRoaXMubW91bnRlZD1udWxsLHRoaXMuaWQ9VnQubmV4dElub2RlKyssdGhpcy5uYW1lPWZ0LHRoaXMubW9kZT1JdCx0aGlzLm5vZGVfb3BzPXt9LHRoaXMuc3RyZWFtX29wcz17fSx0aGlzLnJkZXY9V3QsdGhpcy5yZWFkTW9kZT0zNjUsdGhpcy53cml0'@;
put 'ZU1vZGU9MTQ2fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMucmVhZE1vZGV9c2V0IHJlYWQoUWUpe1FlP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUm'@;
put 'dGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKFFlKXtRZT90aGlzLm1vZGV8PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBWdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVy'@;
put 'biBWdC5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChRZSxmdD17fSl7aWYoIShRZT1Qci5yZXNvbHZlKFFlKSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigoZnQ9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sZnQpKS5yZWN1cnNl'@;
put 'X2NvdW50PjgpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgSXQ9UWUuc3BsaXQoIi8iKS5maWx0ZXIoV289PiEhV28pLFd0PVZ0LnJvb3QsRG49Ii8iLGFyPTA7YXI8SXQubGVuZ3RoO2FyKyspe3ZhciBzcj1hcj09PUl0Lmxlbmd0aC0xO2lmKHNyJiZmdC5wYXJlbnQpYnJl'@;
put 'YWs7aWYoV3Q9VnQubG9va3VwTm9kZShXdCxJdFthcl0pLERuPXhuLmpvaW4yKERuLEl0W2FyXSksVnQuaXNNb3VudHBvaW50KFd0KSYmKCFzcnx8c3ImJmZ0LmZvbGxvd19tb3VudCkmJihXdD1XdC5tb3VudGVkLnJvb3QpLCFzcnx8ZnQuZm9sbG93KWZvcih2YXIgSHI9MDtWdC5pc0xpbmso'@;
put 'V3QubW9kZSk7KXt2YXIgQ289VnQucmVhZGxpbmsoRG4pO2lmKERuPVByLnJlc29sdmUoeG4uZGlybmFtZShEbiksQ28pLFd0PVZ0Lmxvb2t1cFBhdGgoRG4se3JlY3Vyc2VfY291bnQ6ZnQucmVjdXJzZV9jb3VudCsxfSkubm9kZSxIcisrPjQwKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDMy'@;
put 'KX19cmV0dXJue3BhdGg6RG4sbm9kZTpXdH19LGdldFBhdGgoUWUpe2Zvcih2YXIgZnQ7Oyl7aWYoVnQuaXNSb290KFFlKSl7dmFyIEl0PVFlLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGZ0PyIvIiE9PUl0W0l0Lmxlbmd0aC0xXT9gJHtJdH0vJHtmdH1gOkl0K2Z0Okl0fWZ0PWZ0P2Ake1Fl'@;
put 'Lm5hbWV9LyR7ZnR9YDpRZS5uYW1lLFFlPVFlLnBhcmVudH19LGhhc2hOYW1lKFFlLGZ0KXtmb3IodmFyIEl0PTAsV3Q9MDtXdDxmdC5sZW5ndGg7V3QrKylJdD0oSXQ8PDUpLUl0K2Z0LmNoYXJDb2RlQXQoV3QpfDA7cmV0dXJuKFFlK0l0Pj4+MCklVnQubmFtZVRhYmxlLmxlbmd0aH0saGFz'@;
put 'aEFkZE5vZGUoUWUpe3ZhciBmdD1WdC5oYXNoTmFtZShRZS5wYXJlbnQuaWQsUWUubmFtZSk7UWUubmFtZV9uZXh0PVZ0Lm5hbWVUYWJsZVtmdF0sVnQubmFtZVRhYmxlW2Z0XT1RZX0saGFzaFJlbW92ZU5vZGUoUWUpe3ZhciBmdD1WdC5oYXNoTmFtZShRZS5wYXJlbnQuaWQsUWUubmFtZSk7'@;
put 'aWYoVnQubmFtZVRhYmxlW2Z0XT09PVFlKVZ0Lm5hbWVUYWJsZVtmdF09UWUubmFtZV9uZXh0O2Vsc2UgZm9yKHZhciBJdD1WdC5uYW1lVGFibGVbZnRdO0l0Oyl7aWYoSXQubmFtZV9uZXh0PT09UWUpe0l0Lm5hbWVfbmV4dD1RZS5uYW1lX25leHQ7YnJlYWt9SXQ9SXQubmFtZV9uZXh0fX0s'@;
put 'bG9va3VwTm9kZShRZSxmdCl7dmFyIEl0PVZ0Lm1heUxvb2t1cChRZSk7aWYoSXQpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoSXQpO2Zvcih2YXIgV3Q9VnQuaGFzaE5hbWUoUWUuaWQsZnQpLERuPVZ0Lm5hbWVUYWJsZVtXdF07RG47RG49RG4ubmFtZV9uZXh0KWlmKERuLnBhcmVudC5pZD09'@;
put 'PVFlLmlkJiZEbi5uYW1lPT09ZnQpcmV0dXJuIERuO3JldHVybiBWdC5sb29rdXAoUWUsZnQpfSxjcmVhdGVOb2RlKFFlLGZ0LEl0LFd0KXt2YXIgRG49bmV3IFZ0LkZTTm9kZShRZSxmdCxJdCxXdCk7cmV0dXJuIFZ0Lmhhc2hBZGROb2RlKERuKSxEbn0sZGVzdHJveU5vZGUoUWUpe1Z0Lmhh'@;
put 'c2hSZW1vdmVOb2RlKFFlKX0saXNSb290OlFlPT5RZT09PVFlLnBhcmVudCxpc01vdW50cG9pbnQ6UWU9PiEhUWUubW91bnRlZCxpc0ZpbGU6UWU9PjMyNzY4PT0oNjE0NDAmUWUpLGlzRGlyOlFlPT4xNjM4ND09KDYxNDQwJlFlKSxpc0xpbms6UWU9PjQwOTYwPT0oNjE0NDAmUWUpLGlzQ2hy'@;
put 'ZGV2OlFlPT44MTkyPT0oNjE0NDAmUWUpLGlzQmxrZGV2OlFlPT4yNDU3Nj09KDYxNDQwJlFlKSxpc0ZJRk86UWU9PjQwOTY9PSg2MTQ0MCZRZSksaXNTb2NrZXQ6UWU9PiEoNDkxNTImflFlKSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhRZSl7dmFyIGZ0PVsiciIsInciLCJydyJdWzMmUWVd'@;
put 'O3JldHVybiA1MTImUWUmJihmdCs9InciKSxmdH0sbm9kZVBlcm1pc3Npb25zOihRZSxmdCk9PlZ0Lmlnbm9yZVBlcm1pc3Npb25zfHwoIWZ0LmluY2x1ZGVzKCJyIil8fDI5MiZRZS5tb2RlKSYmKCFmdC5pbmNsdWRlcygidyIpfHwxNDYmUWUubW9kZSkmJighZnQuaW5jbHVkZXMoIngiKXx8'@;
put 'NzMmUWUubW9kZSk/MDoyLG1heUxvb2t1cDpRZT0+VnQuaXNEaXIoUWUubW9kZSk/VnQubm9kZVBlcm1pc3Npb25zKFFlLCJ4Iil8fChRZS5ub2RlX29wcy5sb29rdXA/MDoyKTo1NCxtYXlDcmVhdGUoUWUsZnQpe3RyeXtyZXR1cm4gVnQubG9va3VwTm9kZShRZSxmdCksMjB9Y2F0Y2h7fXJl'@;
put 'dHVybiBWdC5ub2RlUGVybWlzc2lvbnMoUWUsInd4Iil9LG1heURlbGV0ZShRZSxmdCxJdCl7dmFyIFd0O3RyeXtXdD1WdC5sb29rdXBOb2RlKFFlLGZ0KX1jYXRjaChhcil7cmV0dXJuIGFyLmVycm5vfXZhciBEbj1WdC5ub2RlUGVybWlzc2lvbnMoUWUsInd4Iik7aWYoRG4pcmV0dXJuIERu'@;
put 'O2lmKEl0KXtpZighVnQuaXNEaXIoV3QubW9kZSkpcmV0dXJuIDU0O2lmKFZ0LmlzUm9vdChXdCl8fFZ0LmdldFBhdGgoV3QpPT09VnQuY3dkKCkpcmV0dXJuIDEwfWVsc2UgaWYoVnQuaXNEaXIoV3QubW9kZSkpcmV0dXJuIDMxO3JldHVybiAwfSxtYXlPcGVuOihRZSxmdCk9PlFlP1Z0Lmlz'@;
put 'TGluayhRZS5tb2RlKT8zMjpWdC5pc0RpcihRZS5tb2RlKSYmKCJyIiE9PVZ0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGZ0KXx8NTEyJmZ0KT8zMTpWdC5ub2RlUGVybWlzc2lvbnMoUWUsVnQuZmxhZ3NUb1Blcm1pc3Npb25TdHJpbmcoZnQpKTo0NCxNQVhfT1BFTl9GRFM6NDA5NixuZXh0'@;
put 'ZmQoKXtmb3IodmFyIFFlPTA7UWU8PVZ0Lk1BWF9PUEVOX0ZEUztRZSsrKWlmKCFWdC5zdHJlYW1zW1FlXSlyZXR1cm4gUWU7dGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMzMpfSxnZXRTdHJlYW1DaGVja2VkKFFlKXt2YXIgZnQ9VnQuZ2V0U3RyZWFtKFFlKTtpZighZnQpdGhyb3cgbmV3IFZ0'@;
put 'LkVycm5vRXJyb3IoOCk7cmV0dXJuIGZ0fSxnZXRTdHJlYW06UWU9PlZ0LnN0cmVhbXNbUWVdLGNyZWF0ZVN0cmVhbTooUWUsZnQ9LTEpPT4oUWU9T2JqZWN0LmFzc2lnbihuZXcgVnQuRlNTdHJlYW0sUWUpLC0xPT1mdCYmKGZ0PVZ0Lm5leHRmZCgpKSxRZS5mZD1mdCxWdC5zdHJlYW1zW2Z0'@;
put 'XT1RZSxRZSksY2xvc2VTdHJlYW0oUWUpe1Z0LnN0cmVhbXNbUWVdPW51bGx9LGR1cFN0cmVhbShRZSxmdD0tMSl7dmFyIEl0PVZ0LmNyZWF0ZVN0cmVhbShRZSxmdCk7cmV0dXJuIEl0LnN0cmVhbV9vcHM/LmR1cD8uKEl0KSxJdH0sY2hyZGV2X3N0cmVhbV9vcHM6e29wZW4oUWUpe3ZhciBm'@;
put 'dD1WdC5nZXREZXZpY2UoUWUubm9kZS5yZGV2KTtRZS5zdHJlYW1fb3BzPWZ0LnN0cmVhbV9vcHMsUWUuc3RyZWFtX29wcy5vcGVuPy4oUWUpfSxsbHNlZWsoKXt0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig3MCl9fSxtYWpvcjpRZT0+UWU+PjgsbWlub3I6UWU9PjI1NSZRZSxtYWtlZGV2OihR'@;
put 'ZSxmdCk9PlFlPDw4fGZ0LHJlZ2lzdGVyRGV2aWNlKFFlLGZ0KXtWdC5kZXZpY2VzW1FlXT17c3RyZWFtX29wczpmdH19LGdldERldmljZTpRZT0+VnQuZGV2aWNlc1tRZV0sZ2V0TW91bnRzKFFlKXtmb3IodmFyIGZ0PVtdLEl0PVtRZV07SXQubGVuZ3RoOyl7dmFyIFd0PUl0LnBvcCgpO2Z0'@;
put 'LnB1c2goV3QpLEl0LnB1c2goLi4uV3QubW91bnRzKX1yZXR1cm4gZnR9LHN5bmNmcyhRZSxmdCl7ImZ1bmN0aW9uIj09dHlwZW9mIFFlJiYoZnQ9UWUsUWU9ITEpLFZ0LnN5bmNGU1JlcXVlc3RzKyssVnQuc3luY0ZTUmVxdWVzdHM+MSYmZmUoYHdhcm5pbmc6ICR7VnQuc3luY0ZTUmVxdWVz'@;
put 'dHN9IEZTLnN5bmNmcyBvcGVyYXRpb25zIGluIGZsaWdodCBhdCBvbmNlLCBwcm9iYWJseSBqdXN0IGRvaW5nIGV4dHJhIHdvcmtgKTt2YXIgSXQ9VnQuZ2V0TW91bnRzKFZ0LnJvb3QubW91bnQpLFd0PTA7ZnVuY3Rpb24gRG4oc3Ipe3JldHVybiBWdC5zeW5jRlNSZXF1ZXN0cy0tLGZ0KHNy'@;
put 'KX1mdW5jdGlvbiBhcihzcil7aWYoc3IpcmV0dXJuIGFyLmVycm9yZWQ/dm9pZCAwOihhci5lcnJvcmVkPSEwLERuKHNyKSk7KytXdD49SXQubGVuZ3RoJiZEbihudWxsKX1JdC5mb3JFYWNoKHNyPT57aWYoIXNyLnR5cGUuc3luY2ZzKXJldHVybiBhcihudWxsKTtzci50eXBlLnN5bmNmcyhz'@;
put 'cixRZSxhcil9KX0sbW91bnQoUWUsZnQsSXQpe3ZhciBXdCxEbj0iLyI9PT1JdCxhcj0hSXQ7aWYoRG4mJlZ0LnJvb3QpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMTApO2lmKCFEbiYmIWFyKXt2YXIgc3I9VnQubG9va3VwUGF0aChJdCx7Zm9sbG93X21vdW50OiExfSk7aWYoSXQ9c3IucGF0'@;
put 'aCxWdC5pc01vdW50cG9pbnQoV3Q9c3Iubm9kZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMTApO2lmKCFWdC5pc0RpcihXdC5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig1NCl9dmFyIEhyPXt0eXBlOlFlLG9wdHM6ZnQsbW91bnRwb2ludDpJdCxtb3VudHM6W119LENvPVFlLm1v'@;
put 'dW50KEhyKTtyZXR1cm4gQ28ubW91bnQ9SHIsSHIucm9vdD1DbyxEbj9WdC5yb290PUNvOld0JiYoV3QubW91bnRlZD1IcixXdC5tb3VudCYmV3QubW91bnQubW91bnRzLnB1c2goSHIpKSxDb30sdW5tb3VudChRZSl7dmFyIGZ0PVZ0Lmxvb2t1cFBhdGgoUWUse2ZvbGxvd19tb3VudDohMX0p'@;
put 'O2lmKCFWdC5pc01vdW50cG9pbnQoZnQubm9kZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO3ZhciBJdD1mdC5ub2RlLFd0PUl0Lm1vdW50ZWQsRG49VnQuZ2V0TW91bnRzKFd0KTtPYmplY3Qua2V5cyhWdC5uYW1lVGFibGUpLmZvckVhY2goc3I9Pntmb3IodmFyIEhyPVZ0Lm5hbWVU'@;
put 'YWJsZVtzcl07SHI7KXt2YXIgQ289SHIubmFtZV9uZXh0O0RuLmluY2x1ZGVzKEhyLm1vdW50KSYmVnQuZGVzdHJveU5vZGUoSHIpLEhyPUNvfX0pLEl0Lm1vdW50ZWQ9bnVsbDt2YXIgYXI9SXQubW91bnQubW91bnRzLmluZGV4T2YoV3QpO0l0Lm1vdW50Lm1vdW50cy5zcGxpY2UoYXIsMSl9'@;
put 'LGxvb2t1cDooUWUsZnQpPT5RZS5ub2RlX29wcy5sb29rdXAoUWUsZnQpLG1rbm9kKFFlLGZ0LEl0KXt2YXIgV3Q9VnQubG9va3VwUGF0aChRZSx7cGFyZW50OiEwfSkubm9kZSxEbj14bi5iYXNlbmFtZShRZSk7aWYoIURufHwiLiI9PT1Ebnx8Ii4uIj09PURuKXRocm93IG5ldyBWdC5FcnJu'@;
put 'b0Vycm9yKDI4KTt2YXIgYXI9VnQubWF5Q3JlYXRlKFd0LERuKTtpZihhcil0aHJvdyBuZXcgVnQuRXJybm9FcnJvcihhcik7aWYoIVd0Lm5vZGVfb3BzLm1rbm9kKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gV3Qubm9kZV9vcHMubWtub2QoV3QsRG4sZnQsSXQpfSxjcmVh'@;
put 'dGU6KFFlLGZ0KT0+KGZ0PXZvaWQgMCE9PWZ0P2Z0OjQzOCxmdCY9NDA5NSxWdC5ta25vZChRZSxmdHw9MzI3NjgsMCkpLG1rZGlyOihRZSxmdCk9PihmdD12b2lkIDAhPT1mdD9mdDo1MTEsZnQmPTEwMjMsVnQubWtub2QoUWUsZnR8PTE2Mzg0LDApKSxta2RpclRyZWUoUWUsZnQpe2Zvcih2'@;
put 'YXIgSXQ9UWUuc3BsaXQoIi8iKSxXdD0iIixEbj0wO0RuPEl0Lmxlbmd0aDsrK0RuKWlmKEl0W0RuXSl7V3QrPSIvIitJdFtEbl07dHJ5e1Z0Lm1rZGlyKFd0LGZ0KX1jYXRjaChhcil7aWYoMjAhPWFyLmVycm5vKXRocm93IGFyfX19LG1rZGV2OihRZSxmdCxJdCk9Pih2b2lkIDA9PT1JdCYm'@;
put 'KEl0PWZ0LGZ0PTQzOCksVnQubWtub2QoUWUsZnR8PTgxOTIsSXQpKSxzeW1saW5rKFFlLGZ0KXtpZighUHIucmVzb2x2ZShRZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNDQpO3ZhciBJdD1WdC5sb29rdXBQYXRoKGZ0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCFJdCl0aHJvdyBuZXcgVnQu'@;
put 'RXJybm9FcnJvcig0NCk7dmFyIFd0PXhuLmJhc2VuYW1lKGZ0KSxEbj1WdC5tYXlDcmVhdGUoSXQsV3QpO2lmKERuKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKERuKTtpZighSXQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig2Myk7cmV0dXJuIEl0Lm5vZGVfb3Bz'@;
put 'LnN5bWxpbmsoSXQsV3QsUWUpfSxyZW5hbWUoUWUsZnQpe3ZhciBJdCxXdCxEbj14bi5kaXJuYW1lKFFlKSxhcj14bi5kaXJuYW1lKGZ0KSxzcj14bi5iYXNlbmFtZShRZSksSHI9eG4uYmFzZW5hbWUoZnQpO2lmKEl0PVZ0Lmxvb2t1cFBhdGgoUWUse3BhcmVudDohMH0pLm5vZGUsV3Q9VnQu'@;
put 'bG9va3VwUGF0aChmdCx7cGFyZW50OiEwfSkubm9kZSwhSXR8fCFXdCl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig0NCk7aWYoSXQubW91bnQhPT1XdC5tb3VudCl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig3NSk7dmFyIENvLFdvPVZ0Lmxvb2t1cE5vZGUoSXQsc3IpLGxzPVByLnJlbGF0aXZl'@;
put 'KFFlLGFyKTtpZigiLiIhPT1scy5jaGFyQXQoMCkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO2lmKCIuIiE9PShscz1Qci5yZWxhdGl2ZShmdCxEbikpLmNoYXJBdCgwKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig1NSk7dHJ5e0NvPVZ0Lmxvb2t1cE5vZGUoV3QsSHIpfWNhdGNoe31p'@;
put 'ZihXbyE9PUNvKXt2YXIganM9VnQuaXNEaXIoV28ubW9kZSksQm89VnQubWF5RGVsZXRlKEl0LHNyLGpzKTtpZihCbyl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcihCbyk7aWYoQm89Q28/VnQubWF5RGVsZXRlKFd0LEhyLGpzKTpWdC5tYXlDcmVhdGUoV3QsSHIpKXRocm93IG5ldyBWdC5FcnJu'@;
put 'b0Vycm9yKEJvKTtpZighSXQubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDYzKTtpZihWdC5pc01vdW50cG9pbnQoV28pfHxDbyYmVnQuaXNNb3VudHBvaW50KENvKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigxMCk7aWYoV3QhPT1JdCYmKEJvPVZ0Lm5vZGVQZXJt'@;
put 'aXNzaW9ucyhJdCwidyIpKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcihCbyk7VnQuaGFzaFJlbW92ZU5vZGUoV28pO3RyeXtJdC5ub2RlX29wcy5yZW5hbWUoV28sV3QsSHIpfWNhdGNoKGVhKXt0aHJvdyBlYX1maW5hbGx5e1Z0Lmhhc2hBZGROb2RlKFdvKX19fSxybWRpcihRZSl7dmFyIGZ0'@;
put 'PVZ0Lmxvb2t1cFBhdGgoUWUse3BhcmVudDohMH0pLm5vZGUsSXQ9eG4uYmFzZW5hbWUoUWUpLFd0PVZ0Lmxvb2t1cE5vZGUoZnQsSXQpLERuPVZ0Lm1heURlbGV0ZShmdCxJdCwhMCk7aWYoRG4pdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoRG4pO2lmKCFmdC5ub2RlX29wcy5ybWRpcil0aHJv'@;
put 'dyBuZXcgVnQuRXJybm9FcnJvcig2Myk7aWYoVnQuaXNNb3VudHBvaW50KFd0KSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigxMCk7ZnQubm9kZV9vcHMucm1kaXIoZnQsSXQpLFZ0LmRlc3Ryb3lOb2RlKFd0KX0scmVhZGRpcihRZSl7dmFyIGZ0PVZ0Lmxvb2t1cFBhdGgoUWUse2ZvbGxvdzoh'@;
put 'MH0pLm5vZGU7aWYoIWZ0Lm5vZGVfb3BzLnJlYWRkaXIpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNTQpO3JldHVybiBmdC5ub2RlX29wcy5yZWFkZGlyKGZ0KX0sdW5saW5rKFFlKXt2YXIgZnQ9VnQubG9va3VwUGF0aChRZSx7cGFyZW50OiEwfSkubm9kZTtpZighZnQpdGhyb3cgbmV3IFZ0'@;
put 'LkVycm5vRXJyb3IoNDQpO3ZhciBJdD14bi5iYXNlbmFtZShRZSksV3Q9VnQubG9va3VwTm9kZShmdCxJdCksRG49VnQubWF5RGVsZXRlKGZ0LEl0LCExKTtpZihEbil0aHJvdyBuZXcgVnQuRXJybm9FcnJvcihEbik7aWYoIWZ0Lm5vZGVfb3BzLnVubGluayl0aHJvdyBuZXcgVnQuRXJybm9F'@;
put 'cnJvcig2Myk7aWYoVnQuaXNNb3VudHBvaW50KFd0KSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigxMCk7ZnQubm9kZV9vcHMudW5saW5rKGZ0LEl0KSxWdC5kZXN0cm95Tm9kZShXdCl9LHJlYWRsaW5rKFFlKXt2YXIgZnQ9VnQubG9va3VwUGF0aChRZSkubm9kZTtpZighZnQpdGhyb3cgbmV3'@;
put 'IFZ0LkVycm5vRXJyb3IoNDQpO2lmKCFmdC5ub2RlX29wcy5yZWFkbGluayl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFByLnJlc29sdmUoVnQuZ2V0UGF0aChmdC5wYXJlbnQpLGZ0Lm5vZGVfb3BzLnJlYWRsaW5rKGZ0KSl9LHN0YXQoUWUsZnQpe3ZhciBJdD1WdC5sb29r'@;
put 'dXBQYXRoKFFlLHtmb2xsb3c6IWZ0fSkubm9kZTtpZighSXQpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNDQpO2lmKCFJdC5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gSXQubm9kZV9vcHMuZ2V0YXR0cihJdCl9LGxzdGF0OlFlPT5WdC5zdGF0'@;
put 'KFFlLCEwKSxjaG1vZChRZSxmdCxJdCl7dmFyIFd0O2lmKCEoV3Q9InN0cmluZyI9PXR5cGVvZiBRZT9WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6IUl0fSkubm9kZTpRZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig2Myk7V3Qubm9kZV9vcHMuc2V0YXR0cihX'@;
put 'dCx7bW9kZTo0MDk1JmZ0fC00MDk2Jld0Lm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKFFlLGZ0KXtWdC5jaG1vZChRZSxmdCwhMCl9LGZjaG1vZChRZSxmdCl7dmFyIEl0PVZ0LmdldFN0cmVhbUNoZWNrZWQoUWUpO1Z0LmNobW9kKEl0Lm5vZGUsZnQpfSxjaG93bihRZSxm'@;
put 'dCxJdCxXdCl7dmFyIERuO2lmKCEoRG49InN0cmluZyI9PXR5cGVvZiBRZT9WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6IVd0fSkubm9kZTpRZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig2Myk7RG4ubm9kZV9vcHMuc2V0YXR0cihEbix7dGltZXN0YW1wOkRh'@;
put 'dGUubm93KCl9KX0sbGNob3duKFFlLGZ0LEl0KXtWdC5jaG93bihRZSxmdCxJdCwhMCl9LGZjaG93bihRZSxmdCxJdCl7dmFyIFd0PVZ0LmdldFN0cmVhbUNoZWNrZWQoUWUpO1Z0LmNob3duKFd0Lm5vZGUsZnQsSXQpfSx0cnVuY2F0ZShRZSxmdCl7aWYoZnQ8MCl0aHJvdyBuZXcgVnQuRXJy'@;
put 'bm9FcnJvcigyOCk7dmFyIEl0O2lmKCEoSXQ9InN0cmluZyI9PXR5cGVvZiBRZT9WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6ITB9KS5ub2RlOlFlKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDYzKTtpZihWdC5pc0RpcihJdC5tb2RlKSl0aHJvdyBuZXcgVnQu'@;
put 'RXJybm9FcnJvcigzMSk7aWYoIVZ0LmlzRmlsZShJdC5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigyOCk7dmFyIFd0PVZ0Lm5vZGVQZXJtaXNzaW9ucyhJdCwidyIpO2lmKFd0KXRocm93IG5ldyBWdC5FcnJub0Vycm9yKFd0KTtJdC5ub2RlX29wcy5zZXRhdHRyKEl0LHtzaXplOmZ0'@;
put 'LHRpbWVzdGFtcDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZShRZSxmdCl7dmFyIEl0PVZ0LmdldFN0cmVhbUNoZWNrZWQoUWUpO2lmKCEoMjA5NzE1NSZJdC5mbGFncykpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO1Z0LnRydW5jYXRlKEl0Lm5vZGUsZnQpfSx1dGltZShRZSxmdCxJdCl7'@;
put 'dmFyIFd0PVZ0Lmxvb2t1cFBhdGgoUWUse2ZvbGxvdzohMH0pLm5vZGU7V3Qubm9kZV9vcHMuc2V0YXR0cihXdCx7dGltZXN0YW1wOk1hdGgubWF4KGZ0LEl0KX0pfSxvcGVuKFFlLGZ0LEl0KXtpZigiIj09PVFlKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDQ0KTt2YXIgV3Q7aWYoSXQ9dm9p'@;
put 'ZCAwPT09SXQ/NDM4Okl0LEl0PTY0JihmdD0ic3RyaW5nIj09dHlwZW9mIGZ0PyhIcj0+e3ZhciBDbz17cjowLCJyKyI6Mix3OjU3NywidysiOjU3OCxhOjEwODksImErIjoxMDkwfVtIcl07aWYodm9pZCAwPT09Q28pdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGZpbGUgb3BlbiBtb2RlOiAk'@;
put 'e0hyfWApO3JldHVybiBDb30pKGZ0KTpmdCk/NDA5NSZJdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgUWUpV3Q9UWU7ZWxzZXtRZT14bi5ub3JtYWxpemUoUWUpO3RyeXtXdD1WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6ISgxMzEwNzImZnQpfSkubm9kZX1jYXRjaHt9fXZhciBEbj0hMTtp'@;
put 'Zig2NCZmdClpZihXdCl7aWYoMTI4JmZ0KXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDIwKX1lbHNlIFd0PVZ0Lm1rbm9kKFFlLEl0LDApLERuPSEwO2lmKCFXdCl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig0NCk7aWYoVnQuaXNDaHJkZXYoV3QubW9kZSkmJihmdCY9LTUxMyksNjU1MzYmZnQm'@;
put 'JiFWdC5pc0RpcihXdC5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig1NCk7aWYoIURuKXt2YXIgYXI9VnQubWF5T3BlbihXdCxmdCk7aWYoYXIpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoYXIpfTUxMiZmdCYmIURuJiZWdC50cnVuY2F0ZShXdCwwKSxmdCY9LTEzMTcxMzt2YXIgc3I9'@;
put 'VnQuY3JlYXRlU3RyZWFtKHtub2RlOld0LHBhdGg6VnQuZ2V0UGF0aChXdCksZmxhZ3M6ZnQsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOld0LnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gc3Iuc3RyZWFtX29wcy5vcGVuJiZzci5zdHJlYW1fb3Bz'@;
put 'Lm9wZW4oc3IpLCFmLmxvZ1JlYWRGaWxlc3x8MSZmdHx8KFZ0LnJlYWRGaWxlc3x8KFZ0LnJlYWRGaWxlcz17fSksUWUgaW4gVnQucmVhZEZpbGVzfHwoVnQucmVhZEZpbGVzW1FlXT0xKSksc3J9LGNsb3NlKFFlKXtpZihWdC5pc0Nsb3NlZChRZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3Io'@;
put 'OCk7UWUuZ2V0ZGVudHMmJihRZS5nZXRkZW50cz1udWxsKTt0cnl7UWUuc3RyZWFtX29wcy5jbG9zZSYmUWUuc3RyZWFtX29wcy5jbG9zZShRZSl9Y2F0Y2goZnQpe3Rocm93IGZ0fWZpbmFsbHl7VnQuY2xvc2VTdHJlYW0oUWUuZmQpfVFlLmZkPW51bGx9LGlzQ2xvc2VkOlFlPT5udWxsPT09'@;
put 'UWUuZmQsbGxzZWVrKFFlLGZ0LEl0KXtpZihWdC5pc0Nsb3NlZChRZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoOCk7aWYoIVFlLnNlZWthYmxlfHwhUWUuc3RyZWFtX29wcy5sbHNlZWspdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNzApO2lmKDAhPUl0JiYxIT1JdCYmMiE9SXQpdGhyb3cg'@;
put 'bmV3IFZ0LkVycm5vRXJyb3IoMjgpO3JldHVybiBRZS5wb3NpdGlvbj1RZS5zdHJlYW1fb3BzLmxsc2VlayhRZSxmdCxJdCksUWUudW5nb3R0ZW49W10sUWUucG9zaXRpb259LHJlYWQoUWUsZnQsSXQsV3QsRG4pe2lmKFd0PDB8fERuPDApdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO2lm'@;
put 'KFZ0LmlzQ2xvc2VkKFFlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig4KTtpZigxPT0oMjA5NzE1NSZRZS5mbGFncykpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoOCk7aWYoVnQuaXNEaXIoUWUubm9kZS5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigzMSk7aWYoIVFlLnN0cmVhbV9v'@;
put 'cHMucmVhZCl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigyOCk7dmFyIGFyPXZvaWQgMCE9PURuO2lmKGFyKXtpZighUWUuc2Vla2FibGUpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49UWUucG9zaXRpb247dmFyIHNyPVFlLnN0cmVhbV9vcHMucmVhZChRZSxmdCxJdCxXdCxE'@;
put 'bik7cmV0dXJuIGFyfHwoUWUucG9zaXRpb24rPXNyKSxzcn0sd3JpdGUoUWUsZnQsSXQsV3QsRG4sYXIpe2lmKFd0PDB8fERuPDApdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO2lmKFZ0LmlzQ2xvc2VkKFFlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmUWUu'@;
put 'ZmxhZ3MpKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDgpO2lmKFZ0LmlzRGlyKFFlLm5vZGUubW9kZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMzEpO2lmKCFRZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDI4KTtRZS5zZWVrYWJsZSYmMTAyNCZRZS5mbGFn'@;
put 'cyYmVnQubGxzZWVrKFFlLDAsMik7dmFyIHNyPXZvaWQgMCE9PURuO2lmKHNyKXtpZighUWUuc2Vla2FibGUpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNzApfWVsc2UgRG49UWUucG9zaXRpb247dmFyIEhyPVFlLnN0cmVhbV9vcHMud3JpdGUoUWUsZnQsSXQsV3QsRG4sYXIpO3JldHVybiBz'@;
put 'cnx8KFFlLnBvc2l0aW9uKz1IciksSHJ9LGFsbG9jYXRlKFFlLGZ0LEl0KXtpZihWdC5pc0Nsb3NlZChRZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoOCk7aWYoZnQ8MHx8SXQ8PTApdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjgpO2lmKCEoMjA5NzE1NSZRZS5mbGFncykpdGhyb3cgbmV3'@;
put 'IFZ0LkVycm5vRXJyb3IoOCk7aWYoIVZ0LmlzRmlsZShRZS5ub2RlLm1vZGUpJiYhVnQuaXNEaXIoUWUubm9kZS5tb2RlKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig0Myk7aWYoIVFlLnN0cmVhbV9vcHMuYWxsb2NhdGUpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMTM4KTtRZS5zdHJlYW1f'@;
put 'b3BzLmFsbG9jYXRlKFFlLGZ0LEl0KX0sbW1hcChRZSxmdCxJdCxXdCxEbil7aWYoMiZXdCYmISgyJkRuKSYmMiE9KDIwOTcxNTUmUWUuZmxhZ3MpKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDIpO2lmKDE9PSgyMDk3MTU1JlFlLmZsYWdzKSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcigyKTtp'@;
put 'ZighUWUuc3RyZWFtX29wcy5tbWFwKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDQzKTtyZXR1cm4gUWUuc3RyZWFtX29wcy5tbWFwKFFlLGZ0LEl0LFd0LERuKX0sbXN5bmM6KFFlLGZ0LEl0LFd0LERuKT0+UWUuc3RyZWFtX29wcy5tc3luYz9RZS5zdHJlYW1fb3BzLm1zeW5jKFFlLGZ0LEl0'@;
put 'LFd0LERuKTowLGlvY3RsKFFlLGZ0LEl0KXtpZighUWUuc3RyZWFtX29wcy5pb2N0bCl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig1OSk7cmV0dXJuIFFlLnN0cmVhbV9vcHMuaW9jdGwoUWUsZnQsSXQpfSxyZWFkRmlsZShRZSxmdD17fSl7aWYoZnQuZmxhZ3M9ZnQuZmxhZ3N8fDAsZnQuZW5j'@;
put 'b2Rpbmc9ZnQuZW5jb2Rpbmd8fCJiaW5hcnkiLCJ1dGY4IiE9PWZ0LmVuY29kaW5nJiYiYmluYXJ5IiE9PWZ0LmVuY29kaW5nKXRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbmNvZGluZyB0eXBlICIke2Z0LmVuY29kaW5nfSJgKTt2YXIgSXQsV3Q9VnQub3BlbihRZSxmdC5mbGFncyksRG49'@;
put 'VnQuc3RhdChRZSkuc2l6ZSxhcj1uZXcgVWludDhBcnJheShEbik7cmV0dXJuIFZ0LnJlYWQoV3QsYXIsMCxEbiwwKSwidXRmOCI9PT1mdC5lbmNvZGluZz9JdD1RcihhciwwKToiYmluYXJ5Ij09PWZ0LmVuY29kaW5nJiYoSXQ9YXIpLFZ0LmNsb3NlKFd0KSxJdH0sd3JpdGVGaWxlKFFlLGZ0'@;
put 'LEl0PXt9KXtJdC5mbGFncz1JdC5mbGFnc3x8NTc3O3ZhciBXdD1WdC5vcGVuKFFlLEl0LmZsYWdzLEl0Lm1vZGUpO2lmKCJzdHJpbmciPT10eXBlb2YgZnQpe3ZhciBEbj1uZXcgVWludDhBcnJheShLcihmdCkrMSksYXI9am8oZnQsRG4sMCxEbi5sZW5ndGgpO1Z0LndyaXRlKFd0LERuLDAs'@;
put 'YXIsdm9pZCAwLEl0LmNhbk93bil9ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGZ0KSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGRhdGEgdHlwZSIpO1Z0LndyaXRlKFd0LGZ0LDAsZnQuYnl0ZUxlbmd0aCx2b2lkIDAsSXQuY2FuT3duKX1WdC5jbG9zZShXdCl9LGN3ZDooKT0+'@;
put 'VnQuY3VycmVudFBhdGgsY2hkaXIoUWUpe3ZhciBmdD1WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6ITB9KTtpZihudWxsPT09ZnQubm9kZSl0aHJvdyBuZXcgVnQuRXJybm9FcnJvcig0NCk7aWYoIVZ0LmlzRGlyKGZ0Lm5vZGUubW9kZSkpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNTQpO3Zh'@;
put 'ciBJdD1WdC5ub2RlUGVybWlzc2lvbnMoZnQubm9kZSwieCIpO2lmKEl0KXRocm93IG5ldyBWdC5FcnJub0Vycm9yKEl0KTtWdC5jdXJyZW50UGF0aD1mdC5wYXRofSxjcmVhdGVEZWZhdWx0RGlyZWN0b3JpZXMoKXtWdC5ta2RpcigiL3RtcCIpLFZ0Lm1rZGlyKCIvaG9tZSIpLFZ0Lm1rZGly'@;
put 'KCIvaG9tZS93ZWJfdXNlciIpfSxjcmVhdGVEZWZhdWx0RGV2aWNlcygpe1Z0Lm1rZGlyKCIvZGV2IiksVnQucmVnaXN0ZXJEZXZpY2UoVnQubWFrZWRldigxLDMpLHtyZWFkOigpPT4wLHdyaXRlOihXdCxEbixhcixzcixIcik9PnNyfSksVnQubWtkZXYoIi9kZXYvbnVsbCIsVnQubWFrZWRl'@;
put 'digxLDMpKSxxby5yZWdpc3RlcihWdC5tYWtlZGV2KDUsMCkscW8uZGVmYXVsdF90dHlfb3BzKSxxby5yZWdpc3RlcihWdC5tYWtlZGV2KDYsMCkscW8uZGVmYXVsdF90dHkxX29wcyksVnQubWtkZXYoIi9kZXYvdHR5IixWdC5tYWtlZGV2KDUsMCkpLFZ0Lm1rZGV2KCIvZGV2L3R0eTEiLFZ0'@;
put 'Lm1ha2VkZXYoNiwwKSk7dmFyIFFlPW5ldyBVaW50OEFycmF5KDEwMjQpLGZ0PTAsSXQ9KCk9PigwPT09ZnQmJihmdD1LbihRZSkuYnl0ZUxlbmd0aCksUWVbLS1mdF0pO1Z0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsSXQpLFZ0LmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20i'@;
put 'LEl0KSxWdC5ta2RpcigiL2Rldi9zaG0iKSxWdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rvcmllcygpe1Z0Lm1rZGlyKCIvcHJvYyIpO3ZhciBRZT1WdC5ta2RpcigiL3Byb2Mvc2VsZiIpO1Z0Lm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksVnQubW91bnQoe21v'@;
put 'dW50KCl7dmFyIGZ0PVZ0LmNyZWF0ZU5vZGUoUWUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIGZ0Lm5vZGVfb3BzPXtsb29rdXAoSXQsV3Qpe3ZhciBhcj1WdC5nZXRTdHJlYW1DaGVja2VkKCtXdCksc3I9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3Jl'@;
put 'YWRsaW5rOigpPT5hci5wYXRofX07cmV0dXJuIHNyLnBhcmVudD1zcixzcn19LGZ0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0sY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl7Zi5zdGRpbj9WdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsZi5zdGRpbik6VnQuc3ltbGluaygiL2Rldi90dHki'@;
put 'LCIvZGV2L3N0ZGluIiksZi5zdGRvdXQ/VnQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3Rkb3V0IixudWxsLGYuc3Rkb3V0KTpWdC5zeW1saW5rKCIvZGV2L3R0eSIsIi9kZXYvc3Rkb3V0IiksZi5zdGRlcnI/VnQuY3JlYXRlRGV2aWNlKCIvZGV2Iiwic3RkZXJyIixudWxsLGYuc3RkZXJyKTpW'@;
put 'dC5zeW1saW5rKCIvZGV2L3R0eTEiLCIvZGV2L3N0ZGVyciIpLFZ0Lm9wZW4oIi9kZXYvc3RkaW4iLDApLFZ0Lm9wZW4oIi9kZXYvc3Rkb3V0IiwxKSxWdC5vcGVuKCIvZGV2L3N0ZGVyciIsMSl9LHN0YXRpY0luaXQoKXtbNDRdLmZvckVhY2goUWU9PntWdC5nZW5lcmljRXJyb3JzW1FlXT1u'@;
put 'ZXcgVnQuRXJybm9FcnJvcihRZSksVnQuZ2VuZXJpY0Vycm9yc1tRZV0uc3RhY2s9IjxnZW5lcmljIGVycm9yLCBubyBzdGFjaz4ifSksVnQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxWdC5tb3VudChnbyx7fSwiLyIpLFZ0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLFZ0LmNyZWF0'@;
put 'ZURlZmF1bHREZXZpY2VzKCksVnQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksVnQuZmlsZXN5c3RlbXM9e01FTUZTOmdvfX0saW5pdChRZSxmdCxJdCl7VnQuaW5pdC5pbml0aWFsaXplZD0hMCxmLnN0ZGluPVFlfHxmLnN0ZGluLGYuc3Rkb3V0PWZ0fHxmLnN0ZG91dCxmLnN0ZGVycj1J'@;
put 'dHx8Zi5zdGRlcnIsVnQuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKCl9LHF1aXQoKXtWdC5pbml0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgUWU9MDtRZTxWdC5zdHJlYW1zLmxlbmd0aDtRZSsrKXt2YXIgZnQ9VnQuc3RyZWFtc1tRZV07ZnQmJlZ0LmNsb3NlKGZ0KX19LGZpbmRPYmplY3QoUWUs'@;
put 'ZnQpe3ZhciBJdD1WdC5hbmFseXplUGF0aChRZSxmdCk7cmV0dXJuIEl0LmV4aXN0cz9JdC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoUWUsZnQpe3RyeXtRZT0oV3Q9VnQubG9va3VwUGF0aChRZSx7Zm9sbG93OiFmdH0pKS5wYXRofWNhdGNoe312YXIgSXQ9e2lzUm9vdDohMSxleGlzdHM6'@;
put 'ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgV3Q9VnQubG9va3VwUGF0aChRZSx7cGFyZW50OiEwfSk7SXQucGFyZW50RXhpc3RzPSEwLEl0LnBhcmVudFBh'@;
put 'dGg9V3QucGF0aCxJdC5wYXJlbnRPYmplY3Q9V3Qubm9kZSxJdC5uYW1lPXhuLmJhc2VuYW1lKFFlKSxXdD1WdC5sb29rdXBQYXRoKFFlLHtmb2xsb3c6IWZ0fSksSXQuZXhpc3RzPSEwLEl0LnBhdGg9V3QucGF0aCxJdC5vYmplY3Q9V3Qubm9kZSxJdC5uYW1lPVd0Lm5vZGUubmFtZSxJdC5p'@;
put 'c1Jvb3Q9Ii8iPT09V3QucGF0aH1jYXRjaChEbil7SXQuZXJyb3I9RG4uZXJybm99cmV0dXJuIEl0fSxjcmVhdGVQYXRoKFFlLGZ0LEl0LFd0KXtRZT0ic3RyaW5nIj09dHlwZW9mIFFlP1FlOlZ0LmdldFBhdGgoUWUpO2Zvcih2YXIgRG49ZnQuc3BsaXQoIi8iKS5yZXZlcnNlKCk7RG4ubGVu'@;
put 'Z3RoOyl7dmFyIGFyPURuLnBvcCgpO2lmKGFyKXt2YXIgc3I9eG4uam9pbjIoUWUsYXIpO3RyeXtWdC5ta2Rpcihzcil9Y2F0Y2h7fVFlPXNyfX1yZXR1cm4gc3J9LGNyZWF0ZUZpbGUoUWUsZnQsSXQsV3QsRG4pe3ZhciBhcj14bi5qb2luMigic3RyaW5nIj09dHlwZW9mIFFlP1FlOlZ0Lmdl'@;
put 'dFBhdGgoUWUpLGZ0KSxzcj1IbyhXdCxEbik7cmV0dXJuIFZ0LmNyZWF0ZShhcixzcil9LGNyZWF0ZURhdGFGaWxlKFFlLGZ0LEl0LFd0LERuLGFyKXt2YXIgc3I9ZnQ7UWUmJihRZT0ic3RyaW5nIj09dHlwZW9mIFFlP1FlOlZ0LmdldFBhdGgoUWUpLHNyPWZ0P3huLmpvaW4yKFFlLGZ0KTpR'@;
put 'ZSk7dmFyIEhyPUhvKFd0LERuKSxDbz1WdC5jcmVhdGUoc3IsSHIpO2lmKEl0KXtpZigic3RyaW5nIj09dHlwZW9mIEl0KXtmb3IodmFyIFdvPW5ldyBBcnJheShJdC5sZW5ndGgpLGxzPTAsanM9SXQubGVuZ3RoO2xzPGpzOysrbHMpV29bbHNdPUl0LmNoYXJDb2RlQXQobHMpO0l0PVdvfVZ0'@;
put 'LmNobW9kKENvLDE0NnxIcik7dmFyIEJvPVZ0Lm9wZW4oQ28sNTc3KTtWdC53cml0ZShCbyxJdCwwLEl0Lmxlbmd0aCwwLGFyKSxWdC5jbG9zZShCbyksVnQuY2htb2QoQ28sSHIpfX0sY3JlYXRlRGV2aWNlKFFlLGZ0LEl0LFd0KXt2YXIgRG49eG4uam9pbjIoInN0cmluZyI9PXR5cGVvZiBR'@;
put 'ZT9RZTpWdC5nZXRQYXRoKFFlKSxmdCksYXI9SG8oISFJdCwhIVd0KTtWdC5jcmVhdGVEZXZpY2UubWFqb3J8fChWdC5jcmVhdGVEZXZpY2UubWFqb3I9NjQpO3ZhciBzcj1WdC5tYWtlZGV2KFZ0LmNyZWF0ZURldmljZS5tYWpvcisrLDApO3JldHVybiBWdC5yZWdpc3RlckRldmljZShzcix7'@;
put 'b3BlbihIcil7SHIuc2Vla2FibGU9ITF9LGNsb3NlKEhyKXtXdD8uYnVmZmVyPy5sZW5ndGgmJld0KDEwKX0scmVhZChIcixDbyxXbyxscyxqcyl7Zm9yKHZhciBCbz0wLGVhPTA7ZWE8bHM7ZWErKyl7dmFyIEJsO3RyeXtCbD1JdCgpfWNhdGNoe3Rocm93IG5ldyBWdC5FcnJub0Vycm9yKDI5'@;
put 'KX1pZih2b2lkIDA9PT1CbCYmMD09PUJvKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDYpO2lmKG51bGw9PUJsKWJyZWFrO0JvKyssQ29bV28rZWFdPUJsfXJldHVybiBCbyYmKEhyLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLEJvfSx3cml0ZShIcixDbyxXbyxscyxqcyl7Zm9yKHZhciBC'@;
put 'bz0wO0JvPGxzO0JvKyspdHJ5e1d0KENvW1dvK0JvXSl9Y2F0Y2h7dGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoMjkpfXJldHVybiBscyYmKEhyLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLEJvfX0pLFZ0Lm1rZGV2KERuLGFyLHNyKX0sZm9yY2VMb2FkRmlsZShRZSl7aWYoUWUuaXNEZXZp'@;
put 'Y2V8fFFlLmlzRm9sZGVyfHxRZS5saW5rfHxRZS5jb250ZW50cylyZXR1cm4hMDt0aHJvdyB0eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiP25ldyBFcnJvcigiTGF6eSBsb2FkaW5nIHNob3VsZCBoYXZlIGJlZW4gcGVyZm9ybWVkIChjb250ZW50cyBzZXQpIGluIGNyZWF0ZUxhenlGaWxlLCBi'@;
put 'dXQgaXQgd2FzIG5vdC4gTGF6eSBsb2FkaW5nIG9ubHkgd29ya3MgaW4gd2ViIHdvcmtlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyBvbiB0aGUgbWFpbiB0aHJlYWQuIik6bmV3IEVycm9yKCJDYW5ub3QgbG9hZCB3aXRob3V0IHJlYWQoKSBvciBYTUxI'@;
put 'dHRwUmVxdWVzdC4iKX0sY3JlYXRlTGF6eUZpbGUoUWUsZnQsSXQsV3QsRG4pe2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3VzIGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVk'@;
put 'LWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIGFyPXtpc0RldmljZTohMSx1cmw6SXR9LHNyPVZ0LmNyZWF0ZUZpbGUoUWUsZnQsYXIsV3QsRG4pO2FyLmNvbnRlbnRzP3NyLmNvbnRlbnRzPWFyLmNvbnRlbnRzOmFyLnVybCYmKHNyLmNvbnRlbnRzPW51bGwsc3IudXJsPWFy'@;
put 'LnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoc3Ise3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgSHI9e307ZnVuY3Rpb24gQ28oV28sbHMsanMsQm8sZWEpe3ZhciBCbD1Xby5ub2RlLmNvbnRlbnRzO2lmKGVhPj1CbC5s'@;
put 'ZW5ndGgpcmV0dXJuIDA7dmFyIHZkPU1hdGgubWluKEJsLmxlbmd0aC1lYSxCbyk7aWYoQmwuc2xpY2UpZm9yKHZhciBndT0wO2d1PHZkO2d1KyspbHNbanMrZ3VdPUJsW2VhK2d1XTtlbHNlIGZvcihndT0wO2d1PHZkO2d1KyspbHNbanMrZ3VdPUJsLmdldChlYStndSk7cmV0dXJuIHZkfXJl'@;
put 'dHVybiBPYmplY3Qua2V5cyhzci5zdHJlYW1fb3BzKS5mb3JFYWNoKFdvPT57dmFyIGxzPXNyLnN0cmVhbV9vcHNbV29dO0hyW1dvXT0oLi4uanMpPT4oVnQuZm9yY2VMb2FkRmlsZShzciksbHMoLi4uanMpKX0pLEhyLnJlYWQ9KFdvLGxzLGpzLEJvLGVhKT0+KFZ0LmZvcmNlTG9hZEZpbGUo'@;
put 'c3IpLENvKFdvLGxzLGpzLEJvLGVhKSksSHIubW1hcD0oV28sbHMsanMsQm8sZWEpPT57VnQuZm9yY2VMb2FkRmlsZShzcik7dmFyIEJsPUlhKGxzKTtpZighQmwpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNDgpO3JldHVybiBDbyhXbyxfZSxCbCxscyxqcykse3B0cjpCbCxhbGxvY2F0ZWQ6'@;
put 'ITB9fSxzci5zdHJlYW1fb3BzPUhyLHNyfX0sZHM9KFFlLGZ0KT0+UWU/UXIoa2UsUWUsZnQpOiIiLHlvPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoUWUsZnQsSXQpe2lmKHhuLmlzQWJzKGZ0KSlyZXR1cm4gZnQ7dmFyIFd0O2lmKFd0PS0xMDA9PT1RZT9WdC5jd2QoKTp5by5n'@;
put 'ZXRTdHJlYW1Gcm9tRkQoUWUpLnBhdGgsMD09ZnQubGVuZ3RoKXtpZighSXQpdGhyb3cgbmV3IFZ0LkVycm5vRXJyb3IoNDQpO3JldHVybiBXdH1yZXR1cm4geG4uam9pbjIoV3QsZnQpfSxkb1N0YXQoUWUsZnQsSXQpe3ZhciBXdD1RZShmdCk7SmVbSXQ+PjJdPVd0LmRldixKZVtJdCs0Pj4y'@;
put 'XT1XdC5tb2RlLHR0W0l0Kzg+PjJdPVd0Lm5saW5rLEplW0l0KzEyPj4yXT1XdC51aWQsSmVbSXQrMTY+PjJdPVd0LmdpZCxKZVtJdCsyMD4+Ml09V3QucmRldixqbj1bV3Quc2l6ZT4+PjAsKHRpPVd0LnNpemUsK01hdGguYWJzKHRpKT49MT90aT4wPytNYXRoLmZsb29yKHRpLzQyOTQ5Njcy'@;
put 'OTYpPj4+MDp+fitNYXRoLmNlaWwoKHRpLSsofn50aT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEplW0l0KzI0Pj4yXT1qblswXSxKZVtJdCsyOD4+Ml09am5bMV0sSmVbSXQrMzI+PjJdPTQwOTYsSmVbSXQrMzY+PjJdPVd0LmJsb2Nrczt2YXIgRG49V3QuYXRpbWUuZ2V0VGltZSgpLGFy'@;
put 'PVd0Lm10aW1lLmdldFRpbWUoKSxzcj1XdC5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGpuPVtNYXRoLmZsb29yKERuLzFlMyk+Pj4wLCh0aT1NYXRoLmZsb29yKERuLzFlMyksK01hdGguYWJzKHRpKT49MT90aT4wPytNYXRoLmZsb29yKHRpLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwo'@;
put 'KHRpLSsofn50aT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEplW0l0KzQwPj4yXT1qblswXSxKZVtJdCs0ND4+Ml09am5bMV0sdHRbSXQrNDg+PjJdPURuJTFlMyoxZTMsam49W01hdGguZmxvb3IoYXIvMWUzKT4+PjAsKHRpPU1hdGguZmxvb3IoYXIvMWUzKSwrTWF0aC5hYnModGkpPj0x'@;
put 'P3RpPjA/K01hdGguZmxvb3IodGkvNDI5NDk2NzI5Nik+Pj4wOn5+K01hdGguY2VpbCgodGktKyh+fnRpPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0sSmVbSXQrNTY+PjJdPWpuWzBdLEplW0l0KzYwPj4yXT1qblsxXSx0dFtJdCs2ND4+Ml09YXIlMWUzKjFlMyxqbj1bTWF0aC5mbG9vcihz'@;
put 'ci8xZTMpPj4+MCwodGk9TWF0aC5mbG9vcihzci8xZTMpLCtNYXRoLmFicyh0aSk+PTE/dGk+MD8rTWF0aC5mbG9vcih0aS80Mjk0OTY3Mjk2KT4+PjA6fn4rTWF0aC5jZWlsKCh0aS0rKH5+dGk+Pj4wKSkvNDI5NDk2NzI5Nik+Pj4wOjApXSxKZVtJdCs3Mj4+Ml09am5bMF0sSmVbSXQrNzY+'@;
put 'PjJdPWpuWzFdLHR0W0l0KzgwPj4yXT1zciUxZTMqMWUzLGpuPVtXdC5pbm8+Pj4wLCh0aT1XdC5pbm8sK01hdGguYWJzKHRpKT49MT90aT4wPytNYXRoLmZsb29yKHRpLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHRpLSsofn50aT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEpl'@;
put 'W0l0Kzg4Pj4yXT1qblswXSxKZVtJdCs5Mj4+Ml09am5bMV0sMH0sZG9Nc3luYyhRZSxmdCxJdCxXdCxEbil7aWYoIVZ0LmlzRmlsZShmdC5ub2RlLm1vZGUpKXRocm93IG5ldyBWdC5FcnJub0Vycm9yKDQzKTtpZigyJld0KXJldHVybiAwO3ZhciBhcj1rZS5zbGljZShRZSxRZStJdCk7VnQu'@;
put 'bXN5bmMoZnQsYXIsRG4sSXQsV3QpfSxnZXRTdHJlYW1Gcm9tRkQ6UWU9PlZ0LmdldFN0cmVhbUNoZWNrZWQoUWUpLHZhcmFyZ3M6dm9pZCAwLGdldFN0cjpRZT0+ZHMoUWUpfTtmdW5jdGlvbiBjYygpe3ZhciBRZT1KZVsreW8udmFyYXJncz4+Ml07cmV0dXJuIHlvLnZhcmFyZ3MrPTQsUWV9'@;
put 'dmFyIFJhPWNjLHBoPShRZSxmdCk9PmZ0KzIwOTcxNTI+Pj4wPDQxOTQzMDUtISFRZT8oUWU+Pj4wKSs0Mjk0OTY3Mjk2KmZ0Ok5hTixOMD1bXSx6Zj1RZT0+e3ZhciBmdD0oUWUtaC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzY7dHJ5e3JldHVybiBoLmdyb3coZnQpLG9uKCksMX1j'@;
put 'YXRjaHt9fSxNcD17fSxDMT0oKT0+e2lmKCFDMS5zdHJpbmdzKXt2YXIgUWU9e1VTRVI6IndlYl91c2VyIixMT0dOQU1FOiJ3ZWJfdXNlciIsUEFUSDoiLyIsUFdEOiIvIixIT01FOiIvaG9tZS93ZWJfdXNlciIsTEFORzooIm9iamVjdCI9PXR5cGVvZiBuYXZpZ2F0b3ImJm5hdmlnYXRvci5s'@;
put 'YW5ndWFnZXMmJm5hdmlnYXRvci5sYW5ndWFnZXNbMF18fCJDIikucmVwbGFjZSgiLSIsIl8iKSsiLlVURi04IixfOiIuL3RoaXMucHJvZ3JhbSJ9O2Zvcih2YXIgZnQgaW4gTXApdm9pZCAwPT09TXBbZnRdP2RlbGV0ZSBRZVtmdF06UWVbZnRdPU1wW2Z0XTt2YXIgSXQ9W107Zm9yKHZhciBm'@;
put 'dCBpbiBRZSlJdC5wdXNoKGAke2Z0fT0ke1FlW2Z0XX1gKTtDMS5zdHJpbmdzPUl0fXJldHVybiBDMS5zdHJpbmdzfSxtdT1RZT0+UWUlND09MCYmKFFlJTEwMCE9MHx8UWUlNDAwPT0wKSxDMj1bMzEsMjksMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdLGgwPVszMSwyOCwzMSwzMCwz'@;
put 'MSwzMCwzMSwzMSwzMCwzMSwzMCwzMV07VnQuY3JlYXRlUHJlbG9hZGVkRmlsZT0oUWUsZnQsSXQsV3QsRG4sYXIsc3IsSHIsQ28sV28pPT57dmFyIEJvLGVhLEJsLGd1LGxzPWZ0P1ByLnJlc29sdmUoeG4uam9pbjIoUWUsZnQpKTpRZTtmdW5jdGlvbiBqcyhCbyl7ZnVuY3Rpb24gZWEoQmwp'@;
put 'e1dvPy4oKSxIcnx8VnQuY3JlYXRlRGF0YUZpbGUoUWUsZnQsQmwsV3QsRG4sQ28pLGFyPy4oKSxIaSgpfSgoQmwsdmQsZ3UsU3ApPT57dHlwZW9mIEJyb3dzZXI8InUiJiZCcm93c2VyLmluaXQoKTt2YXIga209ITE7cmV0dXJuICRvLmZvckVhY2goRW09PntrbXx8RW0uY2FuSGFuZGxlKHZk'@;
put 'KSYmKEVtLmhhbmRsZShCbCx2ZCxndSxTcCksa209ITApfSksa219KShCbyxscyxlYSwoKT0+e3NyPy4oKSxIaSgpfSl8fGVhKEJvKX1QaSgpLCJzdHJpbmciPT10eXBlb2YgSXQ/KGVhPWpzLEJsPXNyLGd1PWBhbCAke0JvPUl0fWAsKHZvaWQgMCkoQm8sU3A9PntlYShuZXcgVWludDhBcnJh'@;
put 'eShTcCkpLGd1JiZIaSgpfSxTcD0+e2lmKCFCbCl0aHJvd2BMb2FkaW5nIGRhdGEgZmlsZSAiJHtCb30iIGZhaWxlZC5gO0JsKCl9KSxndSYmUGkoKSk6anMoSXQpfSxWdC5zdGF0aWNJbml0KCk7dmFyIFFlLGZ0LEl0LFd0LERuLFYwPXtiOihRZSxmdCxJdCk9Pnt0aHJvdyBuZXcgTm4oUWUp'@;
put 'LmluaXQoZnQsSXQpLFFlfSxsOmZ1bmN0aW9uKFFlLGZ0LEl0LFd0KXt0cnl7aWYoZnQ9eW8uZ2V0U3RyKGZ0KSxmdD15by5jYWxjdWxhdGVBdChRZSxmdCksLTgmSXQpcmV0dXJuLTI4O3ZhciBEbj1WdC5sb29rdXBQYXRoKGZ0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFEbilyZXR1cm4tNDQ7'@;
put 'dmFyIGFyPSIiO3JldHVybiA0Jkl0JiYoYXIrPSJyIiksMiZJdCYmKGFyKz0idyIpLDEmSXQmJihhcis9IngiKSxhciYmVnQubm9kZVBlcm1pc3Npb25zKERuLGFyKT8tMjowfWNhdGNoKHNyKXtpZih2b2lkIDA9PT1WdHx8IkVycm5vRXJyb3IiIT09c3IubmFtZSl0aHJvdyBzcjtyZXR1cm4t'@;
put 'c3IuZXJybm99fSxpOmZ1bmN0aW9uKFFlLGZ0LEl0KXt5by52YXJhcmdzPUl0O3RyeXt2YXIgV3Q9eW8uZ2V0U3RyZWFtRnJvbUZEKFFlKTtzd2l0Y2goZnQpe2Nhc2UgMDppZigoRG49Y2MoKSk8MClyZXR1cm4tMjg7Zm9yKDtWdC5zdHJlYW1zW0RuXTspRG4rKztyZXR1cm4gVnQuZHVwU3Ry'@;
put 'ZWFtKFd0LERuKS5mZDtjYXNlIDE6Y2FzZSAyOmNhc2UgMTM6Y2FzZSAxNDpyZXR1cm4gMDtjYXNlIDM6cmV0dXJuIFd0LmZsYWdzO2Nhc2UgNDp2YXIgRG49Y2MoKTtyZXR1cm4gV3QuZmxhZ3N8PURuLDA7Y2FzZSAxMjpyZXR1cm4gRG49UmEoKSxXZVtEbiswPj4xXT0yLDB9cmV0dXJuLTI4'@;
put 'fWNhdGNoKGFyKXtpZih2b2lkIDA9PT1WdHx8IkVycm5vRXJyb3IiIT09YXIubmFtZSl0aHJvdyBhcjtyZXR1cm4tYXIuZXJybm99fSx5OmZ1bmN0aW9uKFFlLGZ0KXt0cnl7dmFyIEl0PXlvLmdldFN0cmVhbUZyb21GRChRZSk7cmV0dXJuIHlvLmRvU3RhdChWdC5zdGF0LEl0LnBhdGgsZnQp'@;
put 'fWNhdGNoKFd0KXtpZih2b2lkIDA9PT1WdHx8IkVycm5vRXJyb3IiIT09V3QubmFtZSl0aHJvdyBXdDtyZXR1cm4tV3QuZXJybm99fSx6OmZ1bmN0aW9uKFFlLGZ0LEl0KXt5by52YXJhcmdzPUl0O3RyeXt2YXIgV3Q9eW8uZ2V0U3RyZWFtRnJvbUZEKFFlKTtzd2l0Y2goZnQpe2Nhc2UgMjE1'@;
put 'MDk6Y2FzZSAyMTUxMDpjYXNlIDIxNTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUyNDpjYXNlIDIxNTE1OnJldHVybiBXdC50dHk/MDotNTk7Y2FzZSAyMTUwNTppZighV3QudHR5KXJldHVybi01OTtpZihXdC50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIERuPVd0LnR0eS5vcHMuaW9jdGxfdGNn'@;
put 'ZXRzKFd0KSxhcj1SYSgpO0plW2FyPj4yXT1Ebi5jX2lmbGFnfHwwLEplW2FyKzQ+PjJdPURuLmNfb2ZsYWd8fDAsSmVbYXIrOD4+Ml09RG4uY19jZmxhZ3x8MCxKZVthcisxMj4+Ml09RG4uY19sZmxhZ3x8MDtmb3IodmFyIHNyPTA7c3I8MzI7c3IrKylfZVthcitzcisxN109RG4uY19jY1tz'@;
put 'cl18fDA7cmV0dXJuIDB9cmV0dXJuIDA7Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6aWYoIVd0LnR0eSlyZXR1cm4tNTk7aWYoV3QudHR5Lm9wcy5pb2N0bF90Y3NldHMpe2FyPVJhKCk7dmFyIEhyPUplW2FyPj4yXSxDbz1KZVthcis0Pj4yXSxXbz1KZVthcis4Pj4yXSxscz1K'@;
put 'ZVthcisxMj4+Ml0sanM9W107Zm9yKHNyPTA7c3I8MzI7c3IrKylqcy5wdXNoKF9lW2FyK3NyKzE3XSk7cmV0dXJuIFd0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKFd0LnR0eSxmdCx7Y19pZmxhZzpIcixjX29mbGFnOkNvLGNfY2ZsYWc6V28sY19sZmxhZzpscyxjX2NjOmpzfSl9cmV0dXJuIDA7'@;
put 'Y2FzZSAyMTUxOTpyZXR1cm4gV3QudHR5Pyhhcj1SYSgpLEplW2FyPj4yXT0wLDApOi01OTtjYXNlIDIxNTIwOnJldHVybiBXdC50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnJldHVybiBhcj1SYSgpLFZ0LmlvY3RsKFd0LGZ0LGFyKTtjYXNlIDIxNTIzOmlmKCFXdC50dHkpcmV0dXJuLTU5O2lm'@;
put 'KFd0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeil7dmFyIEJvPVd0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeihXdC50dHkpO2FyPVJhKCksV2VbYXI+PjFdPUJvWzBdLFdlW2FyKzI+PjFdPUJvWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaChlYSl7aWYodm9pZCAwPT09'@;
put 'VnR8fCJFcnJub0Vycm9yIiE9PWVhLm5hbWUpdGhyb3cgZWE7cmV0dXJuLWVhLmVycm5vfX0sdzpmdW5jdGlvbihRZSxmdCxJdCxXdCl7dHJ5e2Z0PXlvLmdldFN0cihmdCk7dmFyIERuPTI1NiZXdCxhcj00MDk2Jld0O3JldHVybiBXdCY9LTY0MDEsZnQ9eW8uY2FsY3VsYXRlQXQoUWUsZnQs'@;
put 'YXIpLHlvLmRvU3RhdChEbj9WdC5sc3RhdDpWdC5zdGF0LGZ0LEl0KX1jYXRjaChzcil7aWYodm9pZCAwPT09VnR8fCJFcnJub0Vycm9yIiE9PXNyLm5hbWUpdGhyb3cgc3I7cmV0dXJuLXNyLmVycm5vfX0sZTpmdW5jdGlvbihRZSxmdCxJdCxXdCl7eW8udmFyYXJncz1XdDt0cnl7ZnQ9eW8u'@;
put 'Z2V0U3RyKGZ0KSxmdD15by5jYWxjdWxhdGVBdChRZSxmdCk7dmFyIERuPVd0P2NjKCk6MDtyZXR1cm4gVnQub3BlbihmdCxJdCxEbikuZmR9Y2F0Y2goYXIpe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1hci5uYW1lKXRocm93IGFyO3JldHVybi1hci5lcnJub319LHI6ZnVuY3Rp'@;
put 'b24oUWUsZnQsSXQsV3Qpe3RyeXtpZihmdD15by5nZXRTdHIoZnQpLGZ0PXlvLmNhbGN1bGF0ZUF0KFFlLGZ0KSxXdDw9MClyZXR1cm4tMjg7dmFyIERuPVZ0LnJlYWRsaW5rKGZ0KSxhcj1NYXRoLm1pbihXdCxLcihEbikpLHNyPV9lW0l0K2FyXTtyZXR1cm4gam8oRG4sa2UsSXQsV3QrMSks'@;
put 'X2VbSXQrYXJdPXNyLGFyfWNhdGNoKEhyKXtpZih2b2lkIDA9PT1WdHx8IkVycm5vRXJyb3IiIT09SHIubmFtZSl0aHJvdyBIcjtyZXR1cm4tSHIuZXJybm99fSxzOmZ1bmN0aW9uKFFlKXt0cnl7cmV0dXJuIFFlPXlvLmdldFN0cihRZSksVnQucm1kaXIoUWUpLDB9Y2F0Y2goZnQpe2lmKHZv'@;
put 'aWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1mdC5uYW1lKXRocm93IGZ0O3JldHVybi1mdC5lcnJub319LHg6ZnVuY3Rpb24oUWUsZnQpe3RyeXtyZXR1cm4gUWU9eW8uZ2V0U3RyKFFlKSx5by5kb1N0YXQoVnQuc3RhdCxRZSxmdCl9Y2F0Y2goSXQpe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9F'@;
put 'cnJvciIhPT1JdC5uYW1lKXRocm93IEl0O3JldHVybi1JdC5lcnJub319LHQ6ZnVuY3Rpb24oUWUsZnQsSXQpe3RyeXtyZXR1cm4gZnQ9eW8uZ2V0U3RyKGZ0KSxmdD15by5jYWxjdWxhdGVBdChRZSxmdCksMD09PUl0P1Z0LnVubGluayhmdCk6NTEyPT09SXQ/VnQucm1kaXIoZnQpOndyKCJJ'@;
put 'bnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goV3Qpe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1XdC5uYW1lKXRocm93IFd0O3JldHVybi1XdC5lcnJub319LGo6KCk9PjEsazooUWUsZnQsSXQpPT5rZS5jb3B5V2l0aGluKFFlLGZ0LGZ0K0l0KSxtOmZ1'@;
put 'bmN0aW9uKFFlLGZ0LEl0LFd0LERuLGFyLHNyLEhyKXt2YXIgQ289cGgoRG4sYXIpO3RyeXtpZihpc05hTihDbykpcmV0dXJuIDYxO3ZhciBXbz15by5nZXRTdHJlYW1Gcm9tRkQoV3QpLGxzPVZ0Lm1tYXAoV28sUWUsQ28sZnQsSXQpLGpzPWxzLnB0cjtyZXR1cm4gSmVbc3I+PjJdPWxzLmFs'@;
put 'bG9jYXRlZCx0dFtIcj4+Ml09anMsMH1jYXRjaChCbyl7aWYodm9pZCAwPT09VnR8fCJFcnJub0Vycm9yIiE9PUJvLm5hbWUpdGhyb3cgQm87cmV0dXJuLUJvLmVycm5vfX0sbjpmdW5jdGlvbihRZSxmdCxJdCxXdCxEbixhcixzcil7dmFyIEhyPXBoKGFyLHNyKTt0cnl7dmFyIENvPXlvLmdl'@;
put 'dFN0cmVhbUZyb21GRChEbik7MiZJdCYmeW8uZG9Nc3luYyhRZSxDbyxmdCxXdCxIcil9Y2F0Y2goV28pe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1Xby5uYW1lKXRocm93IFdvO3JldHVybi1Xby5lcnJub319LGE6KCk9Pnt3cigiIil9LEE6KFFlLGZ0LEl0KT0+KChRZSxmdCxJ'@;
put 'dCk9Pnt2YXIgV3Q9KChEbixhcik9Pnt2YXIgc3I7Zm9yKE4wLmxlbmd0aD0wO3NyPWtlW0RuKytdOyl7dmFyIEhyPTEwNSE9c3I7YXIrPShIciY9MTEyIT1zcikmJmFyJTg/NDowLE4wLnB1c2goMTEyPT1zcj90dFthcj4+Ml06MTA1PT1zcj9KZVthcj4+Ml06eXRbYXI+PjNdKSxhcis9SHI/'@;
put 'ODo0fXJldHVybiBOMH0pKGZ0LEl0KTtyZXR1cm4gZ3RbUWVdKC4uLld0KX0pKFFlLGZ0LEl0KSxjOigpPT5EYXRlLm5vdygpLHE6UWU9Pnt2YXIgZnQ9a2UubGVuZ3RoLEl0PTIxNDc0ODM2NDg7aWYoKFFlPj4+PTApPkl0KXJldHVybiExO2Zvcih2YXIgV3QsYXI9MTthcjw9NDthcio9Mil7'@;
put 'dmFyIHNyPWZ0KigxKy4yL2FyKTtzcj1NYXRoLm1pbihzcixRZSsxMDA2NjMyOTYpO3ZhciBIcj1NYXRoLm1pbihJdCwoV3Q9TWF0aC5tYXgoUWUsc3IpKSsoNjU1MzYtV3QlNjU1MzYpJTY1NTM2KTtpZih6ZihIcikpcmV0dXJuITB9cmV0dXJuITF9LHU6KFFlLGZ0KT0+e3ZhciBJdD0wO3Jl'@;
put 'dHVybiBDMSgpLmZvckVhY2goKFd0LERuKT0+e3ZhciBhcj1mdCtJdDt0dFtRZSs0KkRuPj4yXT1hciwoKHNyLEhyKT0+e2Zvcih2YXIgQ289MDtDbzxzci5sZW5ndGg7KytDbylfZVtIcisrXT1zci5jaGFyQ29kZUF0KENvKTtfZVtIcl09MH0pKFd0LGFyKSxJdCs9V3QubGVuZ3RoKzF9KSww'@;
put 'fSx2OihRZSxmdCk9Pnt2YXIgSXQ9QzEoKTt0dFtRZT4+Ml09SXQubGVuZ3RoO3ZhciBXdD0wO3JldHVybiBJdC5mb3JFYWNoKERuPT5XdCs9RG4ubGVuZ3RoKzEpLHR0W2Z0Pj4yXT1XdCwwfSxmOihRZSxmdCk9Pnt3dD0hMCwoKEl0LFd0KT0+e3Rocm93IFd0fSkoMCxuZXcgT3QoUWUpKX0s'@;
put 'ZDpmdW5jdGlvbihRZSl7dHJ5e3ZhciBmdD15by5nZXRTdHJlYW1Gcm9tRkQoUWUpO3JldHVybiBWdC5jbG9zZShmdCksMH1jYXRjaChJdCl7aWYodm9pZCAwPT09VnR8fCJFcnJub0Vycm9yIiE9PUl0Lm5hbWUpdGhyb3cgSXQ7cmV0dXJuIEl0LmVycm5vfX0sZzpmdW5jdGlvbihRZSxmdCxJ'@;
put 'dCxXdCl7dHJ5e3ZhciBEbj0oKGFyLHNyLEhyLENvKT0+e2Zvcih2YXIgV289MCxscz0wO2xzPEhyO2xzKyspe3ZhciBqcz10dFtzcj4+Ml0sQm89dHRbc3IrND4+Ml07c3IrPTg7dmFyIGVhPVZ0LnJlYWQoYXIsX2UsanMsQm8sdm9pZCAwKTtpZihlYTwwKXJldHVybi0xO2lmKFdvKz1lYSxl'@;
put 'YTxCbylicmVha31yZXR1cm4gV299KSh5by5nZXRTdHJlYW1Gcm9tRkQoUWUpLGZ0LEl0KTtyZXR1cm4gdHRbV3Q+PjJdPURuLDB9Y2F0Y2goYXIpe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1hci5uYW1lKXRocm93IGFyO3JldHVybiBhci5lcnJub319LG86ZnVuY3Rpb24oUWUs'@;
put 'ZnQsSXQsV3QsRG4pe3ZhciBhcj1waChmdCxJdCk7dHJ5e2lmKGlzTmFOKGFyKSlyZXR1cm4gNjE7dmFyIHNyPXlvLmdldFN0cmVhbUZyb21GRChRZSk7cmV0dXJuIFZ0Lmxsc2VlayhzcixhcixXdCksam49W3NyLnBvc2l0aW9uPj4+MCwodGk9c3IucG9zaXRpb24sK01hdGguYWJzKHRpKT49'@;
put 'MT90aT4wPytNYXRoLmZsb29yKHRpLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKHRpLSsofn50aT4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLEplW0RuPj4yXT1qblswXSxKZVtEbis0Pj4yXT1qblsxXSxzci5nZXRkZW50cyYmMD09PWFyJiYwPT09V3QmJihzci5nZXRkZW50cz1u'@;
put 'dWxsKSwwfWNhdGNoKEhyKXtpZih2b2lkIDA9PT1WdHx8IkVycm5vRXJyb3IiIT09SHIubmFtZSl0aHJvdyBIcjtyZXR1cm4gSHIuZXJybm99fSxoOmZ1bmN0aW9uKFFlLGZ0LEl0LFd0KXt0cnl7dmFyIERuPSgoYXIsc3IsSHIsQ28pPT57Zm9yKHZhciBXbz0wLGxzPTA7bHM8SHI7bHMrKyl7'@;
put 'dmFyIGpzPXR0W3NyPj4yXSxCbz10dFtzcis0Pj4yXTtzcis9ODt2YXIgZWE9VnQud3JpdGUoYXIsX2UsanMsQm8sdm9pZCAwKTtpZihlYTwwKXJldHVybi0xO1dvKz1lYX1yZXR1cm4gV299KSh5by5nZXRTdHJlYW1Gcm9tRkQoUWUpLGZ0LEl0KTtyZXR1cm4gdHRbV3Q+PjJdPURuLDB9Y2F0'@;
put 'Y2goYXIpe2lmKHZvaWQgMD09PVZ0fHwiRXJybm9FcnJvciIhPT1hci5uYW1lKXRocm93IGFyO3JldHVybiBhci5lcnJub319LHA6KFFlLGZ0LEl0LFd0LERuKT0+KChRZSxmdCxJdCxXdCk9Pnt2YXIgRG49dHRbV3QrNDA+PjJdLGFyPXt0bV9zZWM6SmVbV3Q+PjJdLHRtX21pbjpKZVtXdCs0'@;
put 'Pj4yXSx0bV9ob3VyOkplW1d0Kzg+PjJdLHRtX21kYXk6SmVbV3QrMTI+PjJdLHRtX21vbjpKZVtXdCsxNj4+Ml0sdG1feWVhcjpKZVtXdCsyMD4+Ml0sdG1fd2RheTpKZVtXdCsyND4+Ml0sdG1feWRheTpKZVtXdCsyOD4+Ml0sdG1faXNkc3Q6SmVbV3QrMzI+PjJdLHRtX2dtdG9mZjpKZVtX'@;
put 'dCszNj4+Ml0sdG1fem9uZTpEbj9kcyhEbik6IiJ9LHNyPWRzKEl0KSxIcj17IiVjIjoiJWEgJWIgJWQgJUg6JU06JVMgJVkiLCIlRCI6IiVtLyVkLyV5IiwiJUYiOiIlWS0lbS0lZCIsIiVoIjoiJWIiLCIlciI6IiVJOiVNOiVTICVwIiwiJVIiOiIlSDolTSIsIiVUIjoiJUg6JU06JVMiLCIl'@;
put 'eCI6IiVtLyVkLyV5IiwiJVgiOiIlSDolTTolUyIsIiVFYyI6IiVjIiwiJUVDIjoiJUMiLCIlRXgiOiIlbS8lZC8leSIsIiVFWCI6IiVIOiVNOiVTIiwiJUV5IjoiJXkiLCIlRVkiOiIlWSIsIiVPZCI6IiVkIiwiJU9lIjoiJWUiLCIlT0giOiIlSCIsIiVPSSI6IiVJIiwiJU9tIjoiJW0iLCIl'@;
put 'T00iOiIlTSIsIiVPUyI6IiVTIiwiJU91IjoiJXUiLCIlT1UiOiIlVSIsIiVPViI6IiVWIiwiJU93IjoiJXciLCIlT1ciOiIlVyIsIiVPeSI6IiV5In07Zm9yKHZhciBDbyBpbiBIcilzcj1zci5yZXBsYWNlKG5ldyBSZWdFeHAoQ28sImciKSxIcltDb10pO3ZhciBXbz1bIlN1bmRheSIsIk1v'@;
put 'bmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sbHM9WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJE'@;
put 'ZWNlbWJlciJdO2Z1bmN0aW9uIGpzKFZpLGJzLFMxKXtmb3IodmFyIHp1PSJudW1iZXIiPT10eXBlb2YgVmk/VmkudG9TdHJpbmcoKTpWaXx8IiI7enUubGVuZ3RoPGJzOyl6dT1TMVswXSt6dTtyZXR1cm4genV9ZnVuY3Rpb24gQm8oVmksYnMpe3JldHVybiBqcyhWaSxicywiMCIpfWZ1bmN0'@;
put 'aW9uIGVhKFZpLGJzKXtmdW5jdGlvbiBTMSh3Nil7cmV0dXJuIHc2PDA/LTE6dzY+MD8xOjB9dmFyIHp1O3JldHVybiAwPT09KHp1PVMxKFZpLmdldEZ1bGxZZWFyKCktYnMuZ2V0RnVsbFllYXIoKSkpJiYwPT09KHp1PVMxKFZpLmdldE1vbnRoKCktYnMuZ2V0TW9udGgoKSkpJiYoenU9UzEo'@;
put 'VmkuZ2V0RGF0ZSgpLWJzLmdldERhdGUoKSkpLHp1fWZ1bmN0aW9uIEJsKFZpKXtzd2l0Y2goVmkuZ2V0RGF5KCkpe2Nhc2UgMDpyZXR1cm4gbmV3IERhdGUoVmkuZ2V0RnVsbFllYXIoKS0xLDExLDI5KTtjYXNlIDE6cmV0dXJuIFZpO2Nhc2UgMjpyZXR1cm4gbmV3IERhdGUoVmkuZ2V0RnVs'@;
put 'bFllYXIoKSwwLDMpO2Nhc2UgMzpyZXR1cm4gbmV3IERhdGUoVmkuZ2V0RnVsbFllYXIoKSwwLDIpO2Nhc2UgNDpyZXR1cm4gbmV3IERhdGUoVmkuZ2V0RnVsbFllYXIoKSwwLDEpO2Nhc2UgNTpyZXR1cm4gbmV3IERhdGUoVmkuZ2V0RnVsbFllYXIoKS0xLDExLDMxKTtjYXNlIDY6cmV0dXJu'@;
put 'IG5ldyBEYXRlKFZpLmdldEZ1bGxZZWFyKCktMSwxMSwzMCl9fWZ1bmN0aW9uIHZkKFZpKXt2YXIgYnM9KChjdXQsVUEpPT57Zm9yKHZhciB5ZD1uZXcgRGF0ZShjdXQuZ2V0VGltZSgpKTtVQT4wOyl7dmFyIHV1dD1tdSh5ZC5nZXRGdWxsWWVhcigpKSxFWj15ZC5nZXRNb250aCgpLEQwZT0o'@;
put 'dXV0P0MyOmgwKVtFWl07aWYoIShVQT5EMGUteWQuZ2V0RGF0ZSgpKSlyZXR1cm4geWQuc2V0RGF0ZSh5ZC5nZXREYXRlKCkrVUEpLHlkO1VBLT1EMGUteWQuZ2V0RGF0ZSgpKzEseWQuc2V0RGF0ZSgxKSxFWjwxMT95ZC5zZXRNb250aChFWisxKTooeWQuc2V0TW9udGgoMCkseWQuc2V0RnVs'@;
put 'bFllYXIoeWQuZ2V0RnVsbFllYXIoKSsxKSl9cmV0dXJuIHlkfSkobmV3IERhdGUoVmkudG1feWVhcisxOTAwLDAsMSksVmkudG1feWRheSksUzE9bmV3IERhdGUoYnMuZ2V0RnVsbFllYXIoKSwwLDQpLHp1PW5ldyBEYXRlKGJzLmdldEZ1bGxZZWFyKCkrMSwwLDQpLHc2PUJsKFMxKSxsdXQ9'@;
put 'QmwoenUpO3JldHVybiBlYSh3Nixicyk8PTA/ZWEobHV0LGJzKTw9MD9icy5nZXRGdWxsWWVhcigpKzE6YnMuZ2V0RnVsbFllYXIoKTpicy5nZXRGdWxsWWVhcigpLTF9dmFyIGd1PXsiJWEiOlZpPT5Xb1tWaS50bV93ZGF5XS5zdWJzdHJpbmcoMCwzKSwiJUEiOlZpPT5Xb1tWaS50bV93ZGF5'@;
put 'XSwiJWIiOlZpPT5sc1tWaS50bV9tb25dLnN1YnN0cmluZygwLDMpLCIlQiI6Vmk9PmxzW1ZpLnRtX21vbl0sIiVDIjpWaT0+Qm8oKFZpLnRtX3llYXIrMTkwMCkvMTAwfDAsMiksIiVkIjpWaT0+Qm8oVmkudG1fbWRheSwyKSwiJWUiOlZpPT5qcyhWaS50bV9tZGF5LDIsIiAiKSwiJWciOlZp'@;
put 'PT52ZChWaSkudG9TdHJpbmcoKS5zdWJzdHJpbmcoMiksIiVHIjp2ZCwiJUgiOlZpPT5CbyhWaS50bV9ob3VyLDIpLCIlSSI6Vmk9Pnt2YXIgYnM9VmkudG1faG91cjtyZXR1cm4gMD09YnM/YnM9MTI6YnM+MTImJihicy09MTIpLEJvKGJzLDIpfSwiJWoiOlZpPT5CbyhWaS50bV9tZGF5Kygo'@;
put 'YnMsUzEpPT57Zm9yKHZhciB6dT0wLHc2PTA7dzY8PVMxO3p1Kz1ic1t3NisrXSk7cmV0dXJuIHp1fSkobXUoVmkudG1feWVhcisxOTAwKT9DMjpoMCxWaS50bV9tb24tMSksMyksIiVtIjpWaT0+Qm8oVmkudG1fbW9uKzEsMiksIiVNIjpWaT0+Qm8oVmkudG1fbWluLDIpLCIlbiI6KCk9PiJc'@;
put 'biIsIiVwIjpWaT0+VmkudG1faG91cj49MCYmVmkudG1faG91cjwxMj8iQU0iOiJQTSIsIiVTIjpWaT0+Qm8oVmkudG1fc2VjLDIpLCIldCI6KCk9PiJcdCIsIiV1IjpWaT0+VmkudG1fd2RheXx8NywiJVUiOlZpPT5CbyhNYXRoLmZsb29yKChWaS50bV95ZGF5KzctVmkudG1fd2RheSkvNyks'@;
put 'MiksIiVWIjpWaT0+e3ZhciBicz1NYXRoLmZsb29yKChWaS50bV95ZGF5KzctKFZpLnRtX3dkYXkrNiklNykvNyk7aWYoKFZpLnRtX3dkYXkrMzcxLVZpLnRtX3lkYXktMiklNzw9MiYmYnMrKyxicyl7aWYoNTM9PWJzKXt2YXIgUzE9KFZpLnRtX3dkYXkrMzcxLVZpLnRtX3lkYXkpJTc7ND09'@;
put 'UzF8fDM9PVMxJiZtdShWaS50bV95ZWFyKXx8KGJzPTEpfX1lbHNle2JzPTUyO3ZhciB6dT0oVmkudG1fd2RheSs3LVZpLnRtX3lkYXktMSklNzsoND09enV8fDU9PXp1JiZtdShWaS50bV95ZWFyJTQwMC0xKSkmJmJzKyt9cmV0dXJuIEJvKGJzLDIpfSwiJXciOlZpPT5WaS50bV93ZGF5LCIl'@;
put 'VyI6Vmk9PkJvKE1hdGguZmxvb3IoKFZpLnRtX3lkYXkrNy0oVmkudG1fd2RheSs2KSU3KS83KSwyKSwiJXkiOlZpPT4oVmkudG1feWVhcisxOTAwKS50b1N0cmluZygpLnN1YnN0cmluZygyKSwiJVkiOlZpPT5WaS50bV95ZWFyKzE5MDAsIiV6IjpWaT0+e3ZhciBicz1WaS50bV9nbXRvZmY7'@;
put 'cmV0dXJuKGJzPj0wPyIrIjoiLSIpKygiMDAwMCIrKGJzPShicz1NYXRoLmFicyhicykvNjApLzYwKjEwMCticyU2MCkpLnNsaWNlKC00KX0sIiVaIjpWaT0+VmkudG1fem9uZSwiJSUiOigpPT4iJSJ9O2Zvcih2YXIgQ28gaW4gc3I9c3IucmVwbGFjZSgvJSUvZywiXDBcMCIpLGd1KXNyLmlu'@;
put 'Y2x1ZGVzKENvKSYmKHNyPXNyLnJlcGxhY2UobmV3IFJlZ0V4cChDbywiZyIpLGd1W0NvXShhcikpKTt2YXIgRW09VHMoc3I9c3IucmVwbGFjZSgvXDBcMC9nLCIlIiksITEpO3JldHVybiBFbS5sZW5ndGg+ZnQ/MDooX2Uuc2V0KEVtLFFlKSxFbS5sZW5ndGgtMSl9KShRZSxmdCxJdCxXdCl9'@;
put 'LGFzPShEbj17YTpWMH0sUGkoKSwoUWU9ZCxmdD1haSxJdD1EbixXdD1mdW5jdGlvbihzcil7IWZ1bmN0aW9uIGFyKHNyLEhyKXtoPShhcz1zci5leHBvcnRzKS5CLG9uKCksTW4udW5zaGlmdChhcy5DKSxIaSgpfShzci5pbnN0YW5jZSl9LFFlfHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNz'@;
put 'ZW1ibHkuaW5zdGFudGlhdGVTdHJlYW1pbmd8fFVyKGZ0KXx8KFFlPT5RZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKGZ0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZldGNoP0VyKGZ0LEl0LFd0KTpmZXRjaChmdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oc3I9PldlYkFzc2Vt'@;
put 'Ymx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKHNyLEl0KS50aGVuKFd0LGZ1bmN0aW9uKEhyKXtyZXR1cm4gZmUoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke0hyfWApLGZlKCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLEVyKGZ0LEl0LFd0KX0p'@;
put 'KSkuY2F0Y2goYSkse30pO2YuX3dlYmlkbF9mcmVlPVFlPT4oZi5fd2ViaWRsX2ZyZWU9YXMuRCkoUWUpLGYuX2ZyZWU9UWU9PihmLl9mcmVlPWFzLkUpKFFlKSxmLl93ZWJpZGxfbWFsbG9jPVFlPT4oZi5fd2ViaWRsX21hbGxvYz1hcy5GKShRZSksZi5fbWFsbG9jPVFlPT4oZi5fbWFsbG9j'@;
put 'PWFzLkcpKFFlKTt2YXIgajAsUzI9Zi5fZW1zY3JpcHRlbl9iaW5kX1ZvaWRQdHJfX19kZXN0cm95X19fMD1RZT0+KFMyPWYuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9YXMuSCkoUWUpLFE5PWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9HcmFwaHZpel8yPShR'@;
put 'ZSxmdCk9PihROT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2aXpfMj1hcy5JKShRZSxmdCkseG09Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD0oKT0+KHhtPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9YXMuSikoKSx3TT1mLl9l'@;
put 'bXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9KCk9Pih3TT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9YXMuSykoKSxNTT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPShRZSxmdCxJdCk9PihNTT1mLl9lbXNjcmlwdGVu'@;
put 'X2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPWFzLkwpKFFlLGZ0LEl0KSxDTT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGF5b3V0XzM9KFFlLGZ0LEl0LFd0KT0+KENNPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9sYXlvdXRfMz1hcy5NKShRZSxmdCxJdCxXdCksU009Zi5f'@;
put 'ZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz0oUWUsZnQsSXQsV3QpPT4oU009Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz1hcy5OKShRZSxmdCxJdCxXdCksYjY9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz0oUWUsZnQsSXQsV3QpPT4o'@;
put 'YjY9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3RyZWRfMz1hcy5PKShRZSxmdCxJdCxXdCkseE09Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3VuZmxhdHRlbl80PShRZSxmdCxJdCxXdCxEbik9Pih4TT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdW5mbGF0dGVuXzQ9YXMu'@;
put 'UCkoUWUsZnQsSXQsV3QsRG4pLG0wZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1RZT0+KG0wZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2xheW91dF9yZXN1bHRfMD1hcy5RKShRZSksZzBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFw'@;
put 'aHZpel9zZXRfbGF5b3V0X3Jlc3VsdF8xPShRZSxmdCk9PihnMGU9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9YXMuUikoUWUsZnQpLF8wZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfb3V0RmlsZV8wPVFlPT4oXzBlPWYu'@;
put 'X2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9YXMuUykoUWUpLHYwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPShRZSxmdCk9Pih2MGU9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGlj'@;
put 'X291dEZpbGVfMT1hcy5UKShRZSxmdCkseTBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19udW1fcmV2XzA9UWU9Pih5MGU9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1hcy5VKShRZSksYjBlPWYuX2Vtc2NyaXB0ZW5f'@;
put 'YmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9KFFlLGZ0KT0+KGIwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfbnVtX3Jldl8xPWFzLlYpKFFlLGZ0KSx3MGU9Zi5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF90cmVkX291dF8wPVFlPT4o'@;
put 'dzBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9vdXRfMD1hcy5XKShRZSksTTBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT0oUWUsZnQpPT4oTTBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9vdXRfMT1hcy5Y'@;
put 'KShRZSxmdCksQzBlPWYuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1RZT0+KEMwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfZXJyXzA9YXMuWSkoUWUpLFMwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9'@;
put 'KFFlLGZ0KT0+KFMwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X3RyZWRfZXJyXzE9YXMuWikoUWUsZnQpLHgwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19fMD1RZT0+KHgwZT1mLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfX19kZXN0cm95X19f'@;
put 'MD1hcy5fKShRZSksazBlPShRZSxmdCk9PihrMGU9YXMuYWEpKFFlLGZ0KSxFMGU9UWU9PihFMGU9YXMuYmEpKFFlKTtmdW5jdGlvbiBUMGUoKXt1cj4wfHwoY24oc24pLHVyPjB8fGowfHwoajA9ITAsZi5jYWxsZWRSdW49ITAsd3R8fChmLm5vRlNJbml0fHxWdC5pbml0LmluaXRpYWxpemVk'@;
put 'fHxWdC5pbml0KCksVnQuaWdub3JlUGVybWlzc2lvbnM9ITEsY24oTW4pLGwoZiksY24oVm4pKSkpfWZ1bmN0aW9uIGdoKCl7fWZ1bmN0aW9uIHpBKFFlKXtyZXR1cm4oUWV8fGdoKS5fX2NhY2hlX199ZnVuY3Rpb24ga1ooUWUsZnQpe3ZhciBJdD16QShmdCksV3Q9SXRbUWVdO3JldHVybiBX'@;
put 'dHx8KChXdD1PYmplY3QuY3JlYXRlKChmdHx8Z2gpLnByb3RvdHlwZSkpLnB0cj1RZSxJdFtRZV09V3QpfWYuVVRGOFRvU3RyaW5nPWRzLFRyPWZ1bmN0aW9uIFFlKCl7ajB8fFQwZSgpLGowfHwoVHI9UWUpfSxUMGUoKSwoZ2gucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZ2gucHJvdG90eXBl'@;
put 'KSkuY29uc3RydWN0b3I9Z2gsZ2gucHJvdG90eXBlLl9fY2xhc3NfXz1naCxnaC5fX2NhY2hlX189e30sZi5XcmFwcGVyT2JqZWN0PWdoLGYuZ2V0Q2FjaGU9ekEsZi53cmFwUG9pbnRlcj1rWixmLmNhc3RPYmplY3Q9ZnVuY3Rpb24oUWUsZnQpe3JldHVybiBrWihRZS5wdHIsZnQpfSxmLk5V'@;
put 'TEw9a1ooMCksZi5kZXN0cm95PWZ1bmN0aW9uKFFlKXtpZighUWUuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO1FlLl9fZGVzdHJveV9fKCksZGVsZXRlIHpBKFFlLl9fY2xhc3NfXylbUWUucHRy'@;
put 'XX0sZi5jb21wYXJlPWZ1bmN0aW9uKFFlLGZ0KXtyZXR1cm4gUWUucHRyPT09ZnQucHRyfSxmLmdldFBvaW50ZXI9ZnVuY3Rpb24oUWUpe3JldHVybiBRZS5wdHJ9LGYuZ2V0Q2xhc3M9ZnVuY3Rpb24oUWUpe3JldHVybiBRZS5fX2NsYXNzX199O3ZhciBRcz17YnVmZmVyOjAsc2l6ZTowLHBv'@;
put 'czowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmUoKXtpZihRcy5uZWVkZWQpe2Zvcih2YXIgUWU9MDtRZTxRcy50ZW1wcy5sZW5ndGg7UWUrKylmLl93ZWJpZGxfZnJlZShRcy50ZW1wc1tRZV0pO1FzLnRlbXBzLmxlbmd0aD0wLGYuX3dlYmlkbF9mcmVlKFFzLmJ1ZmZlciksUXMuYnVmZmVy'@;
put 'PTAsUXMuc2l6ZSs9UXMubmVlZGVkLFFzLm5lZWRlZD0wfVFzLmJ1ZmZlcnx8KFFzLnNpemUrPTEyOCxRcy5idWZmZXI9Zi5fd2ViaWRsX21hbGxvYyhRcy5zaXplKSxMdChRcy5idWZmZXIpKSxRcy5wb3M9MH0sYWxsb2MoUWUsZnQpe0x0KFFzLmJ1ZmZlcik7dmFyIEl0LERuPVFlLmxlbmd0'@;
put 'aCpmdC5CWVRFU19QRVJfRUxFTUVOVDtyZXR1cm4gRG49c2woRG4sOCksUXMucG9zK0RuPj1Rcy5zaXplPyhMdChEbj4wKSxRcy5uZWVkZWQrPURuLEl0PWYuX3dlYmlkbF9tYWxsb2MoRG4pLFFzLnRlbXBzLnB1c2goSXQpKTooSXQ9UXMuYnVmZmVyK1FzLnBvcyxRcy5wb3MrPURuKSxJdH0s'@;
put 'Y29weShRZSxmdCxJdCl7SXQvPWZ0LkJZVEVTX1BFUl9FTEVNRU5UO2Zvcih2YXIgV3Q9MDtXdDxRZS5sZW5ndGg7V3QrKylmdFtJdCtXdF09UWVbV3RdfX07ZnVuY3Rpb24gX2goUWUpe2lmKCJzdHJpbmciPT10eXBlb2YgUWUpe3ZhciBmdD1UcyhRZSksSXQ9UXMuYWxsb2MoZnQsX2UpO3Jl'@;
put 'dHVybiBRcy5jb3B5KGZ0LF9lLEl0KSxJdH1yZXR1cm4gUWV9ZnVuY3Rpb24gQ3AoKXt0aHJvdyJjYW5ub3QgY29uc3RydWN0IGEgVm9pZFB0ciwgbm8gY29uc3RydWN0b3IgaW4gSURMIn1mdW5jdGlvbiBEbyhRZSxmdCl7UWUmJiJvYmplY3QiPT10eXBlb2YgUWUmJihRZT1RZS5wdHIpLGZ0'@;
put 'JiYib2JqZWN0Ij09dHlwZW9mIGZ0JiYoZnQ9ZnQucHRyKSx0aGlzLnB0cj1ROShRZSxmdCksekEoRG8pW3RoaXMucHRyXT10aGlzfXJldHVybihDcC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnaC5wcm90b3R5cGUpKS5jb25zdHJ1Y3Rvcj1DcCxDcC5wcm90b3R5cGUuX19jbGFzc19fPUNw'@;
put 'LENwLl9fY2FjaGVfXz17fSxmLlZvaWRQdHI9Q3AsQ3AucHJvdG90eXBlLl9fZGVzdHJveV9fPUNwLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe1MyKHRoaXMucHRyKX0sKERvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGdoLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPURvLERv'@;
put 'LnByb3RvdHlwZS5fX2NsYXNzX189RG8sRG8uX19jYWNoZV9fPXt9LGYuR3JhcGh2aXo9RG8sRG8ucHJvdG90eXBlLnZlcnNpb249RG8ucHJvdG90eXBlLnZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gZHMoeG0oKSl9LERvLnByb3RvdHlwZS5sYXN0RXJyb3I9RG8ucHJvdG90eXBlLmxhc3RF'@;
put 'cnJvcj1mdW5jdGlvbigpe3JldHVybiBkcyh3TSgpKX0sRG8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9RG8ucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oUWUsZnQpe3ZhciBJdD10aGlzLnB0cjtRcy5wcmVwYXJlKCksUWU9UWUmJiJvYmplY3QiPT10eXBlb2YgUWU/UWUucHRyOl9oKFFl'@;
put 'KSxmdD1mdCYmIm9iamVjdCI9PXR5cGVvZiBmdD9mdC5wdHI6X2goZnQpLE1NKEl0LFFlLGZ0KX0sRG8ucHJvdG90eXBlLmxheW91dD1Eby5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKFFlLGZ0LEl0KXt2YXIgV3Q9dGhpcy5wdHI7cmV0dXJuIFFzLnByZXBhcmUoKSxRZT1RZSYmIm9iamVj'@;
put 'dCI9PXR5cGVvZiBRZT9RZS5wdHI6X2goUWUpLGZ0PWZ0JiYib2JqZWN0Ij09dHlwZW9mIGZ0P2Z0LnB0cjpfaChmdCksSXQ9SXQmJiJvYmplY3QiPT10eXBlb2YgSXQ/SXQucHRyOl9oKEl0KSxkcyhDTShXdCxRZSxmdCxJdCkpfSxEby5wcm90b3R5cGUuYWN5Y2xpYz1Eby5wcm90b3R5cGUu'@;
put 'YWN5Y2xpYz1mdW5jdGlvbihRZSxmdCxJdCl7dmFyIFd0PXRoaXMucHRyO3JldHVybiBRcy5wcmVwYXJlKCksUWU9UWUmJiJvYmplY3QiPT10eXBlb2YgUWU/UWUucHRyOl9oKFFlKSxmdCYmIm9iamVjdCI9PXR5cGVvZiBmdCYmKGZ0PWZ0LnB0ciksSXQmJiJvYmplY3QiPT10eXBlb2YgSXQm'@;
put 'JihJdD1JdC5wdHIpLCEhU00oV3QsUWUsZnQsSXQpfSxEby5wcm90b3R5cGUudHJlZD1Eby5wcm90b3R5cGUudHJlZD1mdW5jdGlvbihRZSxmdCxJdCl7dmFyIFd0PXRoaXMucHRyO1FzLnByZXBhcmUoKSxRZT1RZSYmIm9iamVjdCI9PXR5cGVvZiBRZT9RZS5wdHI6X2goUWUpLGZ0JiYib2Jq'@;
put 'ZWN0Ij09dHlwZW9mIGZ0JiYoZnQ9ZnQucHRyKSxJdCYmIm9iamVjdCI9PXR5cGVvZiBJdCYmKEl0PUl0LnB0ciksYjYoV3QsUWUsZnQsSXQpfSxEby5wcm90b3R5cGUudW5mbGF0dGVuPURvLnByb3RvdHlwZS51bmZsYXR0ZW49ZnVuY3Rpb24oUWUsZnQsSXQsV3Qpe3ZhciBEbj10aGlzLnB0'@;
put 'cjtyZXR1cm4gUXMucHJlcGFyZSgpLFFlPVFlJiYib2JqZWN0Ij09dHlwZW9mIFFlP1FlLnB0cjpfaChRZSksZnQmJiJvYmplY3QiPT10eXBlb2YgZnQmJihmdD1mdC5wdHIpLEl0JiYib2JqZWN0Ij09dHlwZW9mIEl0JiYoSXQ9SXQucHRyKSxXdCYmIm9iamVjdCI9PXR5cGVvZiBXdCYmKFd0'@;
put 'PVd0LnB0ciksZHMoeE0oRG4sUWUsZnQsSXQsV3QpKX0sRG8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0PURvLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbigpe3JldHVybiBkcyhtMGUodGhpcy5wdHIpKX0sRG8ucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0PURv'@;
put 'LnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3VsdD1mdW5jdGlvbihRZSl7dmFyIGZ0PXRoaXMucHRyO1FzLnByZXBhcmUoKSxRZT1RZSYmIm9iamVjdCI9PXR5cGVvZiBRZT9RZS5wdHI6X2goUWUpLGcwZShmdCxRZSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEby5wcm90b3R5cGUsImxheW91'@;
put 'dF9yZXN1bHQiLHtnZXQ6RG8ucHJvdG90eXBlLmdldF9sYXlvdXRfcmVzdWx0LHNldDpEby5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHR9KSxEby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1Eby5wcm90b3R5cGUuZ2V0X2FjeWNsaWNfb3V0RmlsZT1mdW5jdGlvbigpe3JldHVy'@;
put 'biBkcyhfMGUodGhpcy5wdHIpKX0sRG8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGU9RG8ucHJvdG90eXBlLnNldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oUWUpe3ZhciBmdD10aGlzLnB0cjtRcy5wcmVwYXJlKCksUWU9UWUmJiJvYmplY3QiPT10eXBlb2YgUWU/UWUucHRyOl9o'@;
put 'KFFlKSx2MGUoZnQsUWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJhY3ljbGljX291dEZpbGUiLHtnZXQ6RG8ucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGUsc2V0OkRvLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlfSksRG8ucHJvdG90eXBlLmdldF9h'@;
put 'Y3ljbGljX251bV9yZXY9RG8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oKXtyZXR1cm4geTBlKHRoaXMucHRyKX0sRG8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9RG8ucHJvdG90eXBlLnNldF9hY3ljbGljX251bV9yZXY9ZnVuY3Rpb24oUWUpe1FlJiYi'@;
put 'b2JqZWN0Ij09dHlwZW9mIFFlJiYoUWU9UWUucHRyKSxiMGUodGhpcy5wdHIsUWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJhY3ljbGljX251bV9yZXYiLHtnZXQ6RG8ucHJvdG90eXBlLmdldF9hY3ljbGljX251bV9yZXYsc2V0OkRvLnByb3RvdHlwZS5zZXRfYWN5'@;
put 'Y2xpY19udW1fcmV2fSksRG8ucHJvdG90eXBlLmdldF90cmVkX291dD1Eby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIGRzKHcwZSh0aGlzLnB0cikpfSxEby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PURvLnByb3RvdHlwZS5zZXRfdHJlZF9vdXQ9ZnVuY3Rpb24o'@;
put 'UWUpe3ZhciBmdD10aGlzLnB0cjtRcy5wcmVwYXJlKCksUWU9UWUmJiJvYmplY3QiPT10eXBlb2YgUWU/UWUucHRyOl9oKFFlKSxNMGUoZnQsUWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJ0cmVkX291dCIse2dldDpEby5wcm90b3R5cGUuZ2V0X3RyZWRfb3V0LHNl'@;
put 'dDpEby5wcm90b3R5cGUuc2V0X3RyZWRfb3V0fSksRG8ucHJvdG90eXBlLmdldF90cmVkX2Vycj1Eby5wcm90b3R5cGUuZ2V0X3RyZWRfZXJyPWZ1bmN0aW9uKCl7cmV0dXJuIGRzKEMwZSh0aGlzLnB0cikpfSxEby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyPURvLnByb3RvdHlwZS5zZXRfdHJl'@;
put 'ZF9lcnI9ZnVuY3Rpb24oUWUpe3ZhciBmdD10aGlzLnB0cjtRcy5wcmVwYXJlKCksUWU9UWUmJiJvYmplY3QiPT10eXBlb2YgUWU/UWUucHRyOl9oKFFlKSxTMGUoZnQsUWUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRG8ucHJvdG90eXBlLCJ0cmVkX2VyciIse2dldDpEby5wcm90b3R5cGUu'@;
put 'Z2V0X3RyZWRfZXJyLHNldDpEby5wcm90b3R5cGUuc2V0X3RyZWRfZXJyfSksRG8ucHJvdG90eXBlLl9fZGVzdHJveV9fPURvLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1mdW5jdGlvbigpe3gwZSh0aGlzLnB0cil9LHZ9KTtsZXQgYk0sX1o7ZnVuY3Rpb24gZm90KGMpe3JldHVybntwYXRoOmMu'@;
put 'cGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+'@;
put 'XG48c3ZnIHdpZHRoPSIke2Mud2lkdGh9IiBoZWlnaHQ9IiR7Yy5oZWlnaHR9Ij48L3N2Zz5gfX1jbGFzcyBDbXtjb25zdHJ1Y3RvcihsKXt0aGlzLl9tb2R1bGU9bH1zdGF0aWMgbG9hZCgpe3JldHVybihfWnx8KF9aPWZ1bmN0aW9uIGRvdChjKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtmb3Io'@;
put 'dmFyIGg9W10sZj0rIWQsdj0wLFQ9MDthLmxlbmd0aDspe3ZhciBZPXRvdChhLGZ8fGQpO2lmKCJvYmplY3QiPT10eXBlb2YgWSl7Zm9yKGY/KGQ9bnVsbCxZLncubGVuZ3RoPT1ZLnUmJihoLnB1c2goZD1ZLncpLFQrPVkudSkpOihoLnB1c2goZCksWS5lPTApOyFZLmw7KXt2YXIgcmU9bG90'@;
put 'KGEsWSxkKTtyZXx8S2MoNSksZD9ZLmU9WS55OihoLnB1c2gocmUpLFQrPXJlLmxlbmd0aCxRaXQoWS53LDAscmUubGVuZ3RoKSxZLncuc2V0KHJlLFkudy5sZW5ndGgtcmUubGVuZ3RoKSl9dj1ZLmIrNCpZLmN9ZWxzZSB2PVk7YT1hLnN1YmFycmF5KHYpfXJldHVybiBmdW5jdGlvbihjLGwp'@;
put 'e2lmKDE9PWMubGVuZ3RoKXJldHVybiBjWzBdO2Zvcih2YXIgYT1uZXcgVGMobCksZD0wLGg9MDtkPGMubGVuZ3RoOysrZCl7dmFyIGY9Y1tkXTthLnNldChmLGgpLGgrPWYubGVuZ3RofXJldHVybiBhfShoLFQpfShmdW5jdGlvbihhKXtjb25zdCBkPWEubGVuZ3RoLGg9W107bGV0IGY9MCx2'@;
put 'PTAsVD0tMTtmb3IobGV0IFk9MDtZPGQ7WSsrKXtjb25zdCByZT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihhW1ldKTtpZigtMSE9PXJlKWlmKFQ8MClU'@;
put 'PXJlO2Vsc2V7VCs9OTEqcmUsZnw9VDw8dix2Kz0oODE5MSZUKT44OD8xMzoxNDtkb3toLnB1c2goMjU1JmYpLGY+Pj04LHYtPTh9d2hpbGUodj43KTtUPS0xfX1yZXR1cm4gVD4tMSYmaC5wdXNoKDI1NSYoZnxUPDx2KSksbmV3IFVpbnQ4QXJyYXkoaCl9KGMpKX0oJ3Y3I2FTWE4uPkRqblk6'@;
put 'ZH50WV54XzJodFMjey8lQHw7XXV5YlBWanZEPDo5dj01PXlzPCx4V3hgMEhHNSpxJDpLejBoOk9bUXVPXW5VZU5CPH5XUCI0dTVsc0JYRV5laFZaSHxxLGJqcSg7eWdYXUNmPk1kVUNoNSIqPCRsNT9VWkckJVBmTT1iOUJxKTlQXU5CKzd6VT5iNjVOS15CSlF8KU1ienJCSStwX1FreWduWExB'@;
put 'cmZZQXJNcGgxIV9KU20uYlpzWm1XY2JfUnwmbylreV0qdUwobUVeMHBMaFpteU0rU3s6T21dMEY6eTdWTUVfeFN3XlcrelZVaT1kUi5gQ0I+QW5wbS93KUV5O2hdLERgYXg4bD40WHg8Vz03aUFPaD5ge1k0KSZLfDk9X1tRXX1vN31AbV1ePiRCPnc+eypYLDBdK3hKfSpMQ1Q7eDo0Q0VuTyYs'@;
put 'L1tedH5gSiRpYjlBRmRhPm5dZiw3d3NLbzNtOytiO205YiJwPHBiXyR8RXxjP0JqNDJuRnQ+LiZGe3dTdyZPfEgxSShYZ1FadGhvNWw3b2Q/TXMlTn1pV25+YjddZVY9Snw0JGF2bTZ+aSlWTzhUZ1NmKWJUcGBuO0tCX0lxX344IyF+clsvVGt5ayZCPmJXSDdVTCFWSGVCbiQ9LE1rXX5VPTJO'@;
put 'dz58IzJZRHkha1s8ZVYrfmY7N3RUOmRlZ0p4d25gOC5XayFSUT19IkgyZHpTRk5yQHh6SHRoYjRkVUREQj51QVY8N1FHNXZWPVY6K2xAWyZAOjZqKlZUO1FedW4sRDV1RCQlOnxqXldzN2Q+O2heSjJgNz0sZXhfVThabWlFZElsT0orOV0vcSRBYV43OjcpOmlIM2F7L3ZoUWtSYGM2QSUhUTYv'@;
put 'JURIfXMuIzpDeEhsV0pXPW0wQFlpN1Q8MUp5b1ZYIn0odlEjZjxtT3xneEpMZH5xJCFMZDdzK3glY05pJk1QbG46bE9Hfm5pLE5GNS8mRkt3NyV8STt8dnhFTGFTfnt7TCVhanRdSVlFJi8yP1YxVk8oU1tLYVJzN3BGPWA6T3B7MEEmXSZbJnpiNnVOfC5BI3dscm5nckU7YTJyOjJJcEspRGND'@;
put 'NDwvNmJ+eTJ3NHBHNjg2dFFTZ1ElKVljc1p7V2haN3t7SSVuJkBZaTdzVjklNTJKbXNFeTVwI1dVdkcydmxHXm0/bV1lbzV8YGM8QjFGUGhHNy40VWFPJX1KcyVKPCpgNitFZGlCIS89Y080V24hQHY7U1hwWVlvdmFoIiNPVlc9TGA8KTFLTXs2QyE7T1k6PUB5MW5zbThIVXoreHdxc2FLWjtF'@;
put 'YiNRTnhVOi9rNmJlbU04fWsrSlN+a1V5fXk5NSglJTZAQlNiXnlMJUsjOlcmSWZzaUZuVk8qOF5EJWY4ZF1oWEI2RSZtVTV9aWtNXyt2ZGo3LnYwclZpfUBeVktwM0cmSzlELkEocWI5VHBHOnNCODp2VV1+Ky9rQV9CL0dTWVJyV2VrbzpdI0Y5K1A1Ojc3NU9UMUR4RDVWTl5eUC5ybFZOUVBA'@;
put 'LCMxYzZ0ZDNfSFVGSiYlWmlAZl9AUGRqO3thKl0jWSMqcn15RWguNTFhd1Y6UDp6IzxPb0o4NTgrbGtDbnNTZUJtW1FVbVJmNXd5XmUyLkFQc3I2VT9jMDYiYj9tQyhDKDVzNFVtInZ9UTo6bnxhIyIlM18uYEdLfXw8QWNhXytjfWAzLytsa3h9JEI0UDtFOCt0RF9eS1ZzdjdlKFZOWi97OCVR'@;
put 'b2ZuMGg2RX1iciRuUUh7ZFpIW09sZ1ZZP2NOZj47O10zJWM7PGpqR3JUfXs+PEBGK3Y3WCRpTEdiMnpTd15JJStyd3I1SixeN1UjWilgJHtQbyMyTnd3NkxIc0w7PldwP3BFS2BZJERwZGYwZXpkeSw/TCR8YE4jLGZCanJMeVVNQHc4Iy5DLzIue05XLHRIXUUmfFd9fSN5czAlWjZudXo7c2lx'@;
put 'YV8uc1p+O01wYUZWNzF+Vlt3X2NCdVEobksqNjVJTjxtRSoxJCk8UlZMTl1uNU93ckkzSz40WjomK1pDej03IkdfSEJ3YGtjdnx2OmtwPXNZbURgSEB2fkhtNX53eGA7Wy8vK19dYSxNcTt0UiZ4YiFGREM7XmQiUF5sdT0rQXAkcl15eiUwfHAubl8lZmhBJSM9Nk05XVd+TV9RcC5rYyVdflVW'@;
put 'U35FS0lgVjk3OHQrOV8sck14dFA7c0JJIX5eXkF4QV8sViZ2Nzs2RVFEbTdXUzt7Vix4eTQrTWtKTldwfFVTM1FES3wyZjJJMCFfbm1HYEx3L0clJj9Gc1Q5aWs/eE1aKyMjVng1cWZhXkVObC5tfH15cStbYHVbUl1aMzFjMEZIKyh7YjcmN3EoWyZxbTN8JVFIOFV5YitgcnxvSHV4cEdqZHVu'@;
put 'US5fJndRdiFZT287OyE/MWMyNj1bRXM9OmFgJWwqSzhaO21Say5mO20yMDVUZDpBLmlSWUh6PmplOStqMiMyZjNnJDo6NVF8Uz9hNTI6Y001WV1RcGcwJmxKIUd3YWc6JHxwMjpde2YyQlQ6dHNwdzZvXzxbd11JMl86UTM7NmRLe2xlZDk6NWM7ZVRnKG88PXp9MHp9b203SjIlKDJmUyp1ZXAr'@;
put 'bW0jLjFCblBMOWRIJjF6SSo9SS82JVJdWnxtKDArdSVwRHBwUDskPkgydytIWjp0X0I7Y2QySDhXOyQuSipSbVYwb0dvOHNbWVpzWk19PGVQVzcuWzVxZFEoRjtYWjJsZWs3ZHVuKDVhISg5NU9xJGIsKDhTcCMsX21eb0tyW3doN3QmWlI2QFsmQFlnVzksSSh5K2FoTTxSOlslV3BDMyslPS95'@;
put 'UmE1fVNbREA6enh+dFVwWE1ZNCkmWnohQHguSHBpQkNzQyVtczM2c3lPdy9AVGJYOigxYGVvKD15REYyeyVYbVU0ZWZfW10qa1JfUSxsbHJtSns8XiVvZ2QqV0N7aSYiWHZoWW1MUTw7Tz95Wn44TndXJGt4OTUlTyorT3Bfe05sNkFKOzJWIyokSUFaeUh7Rms6SnNDK2hvYlJhJVUxWms5QHF5'@;
put 'NDE6eS4vcEd6MCMuTil8JFBVMUskMjImdzZyVlc9Zz5wL35PWE0lSExkNFZbUFlXN1NKI1l7U1J6LmQ6MiMkXUU1PDd9XXRxcWVfW053LGZZcENMTjRnOCpsYT5EP3FTRChLOWdtY1QyRjZ5cyg4UiEuXWt0K0BxYT4sL3liW21jcH5yajluQ1Q7fTpQcSk8WF1XbGVAXyE9ZGhvQT5IWFUhaEhh'@;
put 'OXVkWSpMfS5dcWYkS11SYTJPZ15ZTEMpN0I6NVVGO0w5MXtMQGlCc2IrOmAqdnlLfUN5Nz1UbGE4VzhPI1tbOTk3YmVqUG5Hd3pyTyl4Zl85WW5PeTJOclcsIWpmWk8vRzk9MXYxVWNZK1Z+NiI2eSZsPHhMX29OUmJfRnMqTXQ7eSZ7OGJaQllKMyZmXmouLlpfTytXTSxzVm16NkY+NmdLb3w4'@;
put 'WyYidzh1ejtPQFtLRFFEOXB5VlguXTBhKzpXaCRLbUZdMWI5TFtbI19iOUh4IUtrOi9nZTshREoiSzBmXXZrYTsyZDcqbCxLVDhBZT03NWUwLytsPVlUVSVxbDBWLnpGUTg9ZCMzTDlUMGojYnhXSUg9Zz4/MFFaOEwyU29iOnl+ajJ5dlJZQDclSmlWN2FeKTVKZnRNen55JkpDTHFwZH0lfjFf'@;
put 'ZVZHSXIlX0M1Zl1YfXVZLlswS3pSKUx9SlZaQklLKjshIyZVSl5BayRlc3s2ZWZdbFpPVUApMl9dNGlZSTBUTEd7OztJWzJeZlsyS1JGSiYleH1yP3lgRm9YTVEzTnB8PEFjLltqL1skY0taYThUM2EhMC9qX2AsVjtVTV0xPndVejAzeGl4OkxIeyJ8ezxZWmRXayQjJi9pZys0QFFVR0w+eGRu'@;
put 'TDVEOWJXOV0leWJne25XP1sjMm1UNjlqfXsreDx6QTtFJjJDU3dZcDJdeFZFXWN6WXZ6OyRYNzkubDRFYTZyWm0jc14kRy5ZcntOJFY9V004KFNweV5oXU4uSGF9bS9nc2M3Kk9YfClURztjZjA7O0BxbHIlcy5afVRpdChzQysybnl3ZEZocV1BYDdmKGQwfCMrWiU6WWpYcEs4U0x0KyVwYmp3'@;
put 'LDIrK0MsI0M7KGhJfEN4RFZdNTJUQld8TzdkVEhVX28kPjc1ZSo8Yjg7ZUJfVnA5b19eTVFETi8jMD9IWmx7OT5MRzJ9QW5ATEhsJCYoViZNRUoyX0RrPCs2VlspMCs3bFIkTVNQP317XTgwdXdkYXI7bE1fMjdxVm9XY0tLY0VMYTtnbVFFe1tNK1opMSVNelpMSTl4KThTOz13Sl1iViF+blpa'@;
put 'OixGbXJTO3t9Jnp9e05HN3xgWnQ4alRGUmAlbGpbLlYmKW8ybVBHJDVZN3A4fSZERnNfPCVWNnlsdGl9SDh9e1doa3FvXmMlQHoqbCRwTnB3aCtOKHU/bio7RF5GX0tDMDRlc2QhXkR9bkBYZ0tiaiMpZDM8KDA6Z0ksUUs1YV5bJnBaMHlDTWI6LntYTSQlJjlAI2duV00sPSQ+LFl8O0NfeHwu'@;
put 'NlFVKjtXTTJEZStCJkdMP1AzNSguIjdrTig3aD5eWUJ4RTZYWmg6Lns+Ly57fjgwXjcqNjVFWlhZTT1XJDI3Z2x3Ni9lWmc8QGBaR30wZi5XKm1QR1JvZFcpbXlNJEp7XiVvNWVpVXliY2BPa3VUXWxnfittWFVmR3MlNEoyfVNsImdhXmhdZzJhdER2eWcuZEtXWnY0ezdVYnBXVHRWM0o3Ni5M'@;
put 'LExEK29yaDZJMnY2ZXlRVjhiIT45TzduZ2NAdUtQSS9II2JeamNaTillKV8jYXlUJEwzIXN+YTw7Knd6IV09dmcydSoybWtYazFUMUwqUWY2UUIpMyVMRzB9X3sqN3IuSjklT1ZhO21COFhaKi5dXklKQm84VjRtUUghTnFUbiZNcTFydEQqeyU2L1s9PGprUWBuSkMoZkBUW0BTT18iTjRMenkz'@;
put 'fjF6L0Iqe11YTFdvIVl7fmN7YjpkPlFgSWR5QWEjZzAjK0szYW1sXiVQdiVjQjZqfUNRX3dAcF1rSn1veWklciJ8LzJucWhuZzpCO2E5ImI3fXtEIkgvcnN9e0B8OVNnNiJ3PXJHak16T3xAZltwUXFjZSZ4OStyfERJfCtPfHkjWnhCc29PMl0hZ15rUi5VPUBQS2RQU2ZdRkxvYHJ1L0ZraS9G'@;
put 'cS5weCwvaEddQ24kcXBlWSVzcn1jYWY2YmUpWVJ4ZzdESSxdQFBIZDJqeWk9N2IkcWFIUWc3eSNseDRteT0wQmdhXVtDWixnUUwwVEZ5Z3FVTlV8V21JSzAjRXM+QD9iW1BJezZNcSwqc1k1ISRLeX1nWyNqeXQwbjphciE6K2YhWVprZ245OjN9TV9wPUk5Oi9XMU8hZ11BcFdkXWs8XlJ7cCxI'@;
put 'ezszb0pgITYvJl8iUEBHPz1ZfnRZN3RWLCN9dVkkaClpJCM6TGQ4Q298YSJmNnJ7aURJWVBUKysqOiFqe1VbaGYlPj5hVjpTfTNvPWFlZCo3TXx5PXd4cWpzcnEsU2R3O1ZGdyo1JUZ7eVNdOCZWa2lAZmdzYWY5Olo6ezhWcyN2KF5KYy5SVi5HYE44WDVLfDwjRn5VWkdtWE18eTNydjd5O0hs'@;
put 'eEllMTh1MVVEVnZ+PzhvMj1xNURhLF9bUURLY1UoZCFMWzsvaEdhbkAldCohOklyYT4+eC5WWWR3bVcxYTByXSpaeCVWLkJfLFByVWcsVGtsP25+OEVuJHw6Y0h8YUk5ImB9e1MwQThkKGhvTkwzYV5UbkZbZGVaSUU/KXg4P2hzQSJERSl7ZU50XUJgNVhyXTlXPzs3ZCJUQ01rVngxKGBCWEUs'@;
put 'ZkI9cUkrKFRCPGcwKV05ZSJ6Q1ksOlNnI090N0MsKChIL2gmQUpHT0d9O2RjRUR3NH5sPz5BKX5BL0daVEBAL2hpWFJNIk9ySUFpXkFtSFM2dDg1KFtCbmZhaUZfP2hNQkFKJTFWeDYoRUNSaEdle1F6IkJFQVMpVV5RMiI1RV88aTZwbkI/dHQlRV88KCw4KG9Ddm4iUzxoWkJtUWU+V2U8aGRC'@;
put 'dlZCPV85Smk8WFpIVmQyUjMvNHpIYUJQdGZQbWQ0Z3V9Y28hYmYqeURDcSlwTlNqRVg4T05rbHhrK29ZakpwYH47Kyg9QiJiJVB1PHtlUXRkRXtpTThXRTMoW0JeSXR4fmxNdHopPUh9JFdlOjEwK3VZV1FmcGxFbCtZdXdVZjtveCNSdWphTVVGe18uSTIrNlkuSyZHVTkjUj4oWGFOTE9lVEMp'@;
put 'JC4rbCpYYXRMJkc0ITRMO0lKdzg4bSt5dTdqLlUzUjdMcEdBMjx2LzBTIiZpXkNMZmwzXmFuKzh1JmVuUmNmPXlvRG0vMntUampYeFB7NU9tbys+dUZsUTgzUiZMIUglaj0wVWp0WCRTd20vSVt5SkV3O31AVWp5WHtRXkQ0Ui5Md0paJHhKNFIvTF5JTThQXnErYnZGbGY7N1I8TG9KbjdseE90'@;
put 'blhWVDxjKUh7aEVEZj5rRXMrQ0MqRCk/XWFzK3h2Om1oNTUhNSJwWDZVN2ZjZipXIihBR3ZIbF9zKzN2fnBHZTdSX0w9S1B+Xyk5eUtBJERONXhkeld7QS9EaWkwa0oiIkE9NVFARHReQn1RR09JIjtCPEkvYER0TEJRaEg3SSJ8QkhUZFpNdENDblRIN010VkJZbzZ5T0EjQzpPenwvYF4yI19w'@;
put 'QmspSDdKIjkqPEZKYHZXMylkSFpUZSs0VyVBN0xhU2YjTkFsRUF3TFBPdHZCbHhNY2IiMUJ2ekxQT3RXQ2NrOTVGdDdCaDl5OkZ0JUJvNDZ5VUE4RG43Ty9XQSREQzY3eVZBMERLaTJbTSJ8QnZQRTBHdH5CMSVOL2MiSHZ9ai9gR3RLQ3IjeW01Rm0vMkEvUmhgd1dvTSFIZWgsNzIobnZFVHFt'@;
put 'O1NCZkt1OlI4VXVQSSlYSiwjamFEIWdDSm1IO0JmVXUwVCg/TlBFIXVDem8kQHhQTyksSnddTTgyUFApMEs4QCowSWltRnlzXV9yRDNldG4ldzNjRWUwLGwjUCI7KTRIeW16LCokbipkSUN1dldIQklnVy5UWGEyaU5QJVF1NmRPLjM7NW5MMV4+VVFZPyNmc2dHb0wxfCQ0QHtFVioqUUldMmU2'@;
put 'bktJeW52Q2BtRUU7VGNQX29EcGBUX0grLGlnUlhneGhTdylsNn0oU1ZmPzhLTmJvYk86VTlEVXYrODElVFk3YFhWP3VpTip+KGU0cUM9bzxbQykoaSZJKWN9WT5KKiR8KDBES006d2ZlVSFWOSN6ZVZSJTJ1TmE3SGtnWSkyTjx3U1ElTE1hXkRDZypbeylKR0Z1ImolJTtsLiR5dV1iWk5sZ29Y'@;
put 'Z0UpNkgsKG5bdkhYLEgwPSVOKWliO1ZSRFl5TCJ3SVFIJVMmfUxfPnVpLEZidTszPk8iVldoZ3NbJCZUdit7WE9HN1lsRmIqUVkvYSxYdEZBKyR9fUx7PkI1TyozTF9DKVgpTVY6VFJtRkpZelAiNDpGV3ZEd2FYaUcleiVOKWlTMmpxRDV9PiNmK3l9TF1PQDI+Kz4+QSl0KVEsL1JZS29iZCU0'@;
put 'O0Q/bUNtVGZiR3BvNmU/VVFoPzNKVCVUOjFuW0VDP2JQPiR2dnpvLkBXUWw/LEppKWsjfSRddW1mOWp0Y2B2bilsUXFHVDlXPypISGxLMSIkRHYpbFpKVDlhP3FJemZPOmRQPCRQdkptfTw/WjokVHY2aixqLmFmKVBTdlhVOX5uOUV1Oz1aLyQxdjRwIXVXUVElcXVhakhQVDlPP29HaDM6bC8k'@;
put 'IXUja0N1U1FSJTx1RWx4JTYuNi42LjYuXSROVi5MZ2EmRztuUCtDTT1GL3V6UFliQVl3L2JxNUc7WXZIPnUsZVNjVVgzSD1CKl9gdjNHe0JbSCxQfSFYN31Yfl9idklRfCNOPH4pVEdJdi5RZGxWa1IkIjRbRltZKUkkKylrQSpdTGJGKHE2OnU/fEZsdTdDJkQ4Y3NQIlFzdERDNjZNOF05dHR7'@;
put 'TjJFS2xHbXZjfXYhWHhKRD0qWyIpPkwwYX5KeUA/VCJYVkcwdm9RKnByUFtoIUEwRilFXjpPdFFEM3omYTQoXkJRSlY1JmE1KF5CbmZpNnw5MnRSRSwoJmFCIXkiKkV7aTRZO2hSQmBUI3peUV1MOmJ1SS8lMyFPeml4NGNUdlVqNXp0RTY9a0VSIk5CRyEwa010R0NSVkg3NFcsQWxOL2BFdGFD'@;
put 'P2JIN00iTUNeLE4vRGl0RTF4KUhHaVdGQzZYTFdBcUloJjVGNm4+Ql81K2lTOUI/ZUVWYnhZamcoPz1IT3J0XjJleW5leGBpSTg8XSwkKCorTjdEdFBjP0NJPzFjUD0kLkBUMVZjdXVTOW8/KURYdGosRSomNG1ZbkhvJkpWUGNBIWV1fk4qdDRMYkE9WkkiZHZFZmI7VDpdRm1wSDJfaC4/bCxE'@;
put 'VEt5dyloRHovdDYiKmFpMUEqbXZlPUpXdjpCKi9JPF8obGsjYj1Kc3Y2QkJgTG16KEpkR2VYeGpDYENsUm8hUiJLbDddQFE7UlYxbSFsaTRCVDh3bSNUOUt6WkRYVSlOREBDSWZdKG1qI2pUfDdGWWE/O1QhZCl4ZlA/b1FUWkA0R0Zyd0xHe0NHXngoXyo/e34qeGQhYSYxViwubjg3PSlOeVtq'@;
put 'dG5QSiE0VkV1MV9dMDQ8Xzs3K1V6NThnJWlFeU5VIW86cGFPb0cpNX54SV5deWIqIiszT09fSXJ8Q05VeUMxY0VlQjgkZUFQQWVoMlZwKz8lWENme3R1NiJnfTdUMz9DQmU0LnxweF1gYls8OVhFOCNCfWQiaEpxRS9WKXVgTmxTWVgrdEZSbDEjOCRIO10rPnQ+bSVTNT5VKj16MVNLNU5ic3dP'@;
put 'Ylh2cUwxYEBSbDI6OjRPNSM5MVV5KzFpLkJbOlUyUTU+a3cpJXgmfV1TVnQ8ZjJrPkMrc3dPOzB3Jm9KU3IkNFY2N3A9VCV8QUA8MyQ0VnJHbCVfXXxkMDdociYlK2dkT2t5RTZCbFVBUF1NQzpBMUdLXWZ4IzZEVmIyayZtcV1QPDdiaStLU1p0fUlyJDpGUzF3YmQlcDNjQjh0WT8hPGl6cnB5'@;
put 'YmQ0VU5PXlYmQ0s/Sk9PMDdvS3lSajxhIjFCLnJMRjJ5RjQhMEZIQVp6aD8rMk1XWUkhKCxDOCpGbzVrUGVjOWhiP3Y9JVNWZSRxSkJ0UT1OKTl5RzFIV2BeZFU+NzBGdnB9TmN1IzJxS1VFaXB3KFt7Nzs5UyQ/cWo4ZjclVns9XV1VIzsrNGJrcXAmcEkzPV10VHF1ViRGZVloVW1PYnwjamY0'@;
put 'aVlwdy40Nz1VS0t6LE0hNj16KCphYklsRDhvNC55b0MiLCZQJUA6aWhERldJKUdEdCZhPnRFJUBwaVZXPXkqRTtHIXIyMFNuXXNbJk01RnMmel9uS1VCVFg9T3ovLnEmRlZobzMianovKTMuUXlycHlXfnl5aj5adXlfeyV1OF4zS2pYKlNucHIkOXdWNzNFR0dwSk1FYXJJXzooJUlpJCZzPEJ5'@;
put 'bmVuIyZNdyEjVXYoR2h8LkJBSCRAS2JYI2YiRkF8bnt3czpwcHNlT2pGN1kxKXkmPjdLPy4mYXxJaThoWEFTdiM5Lzk8OTJrIT1MQitXYlszTDtiRyFmWz0lUm46dk5AdzFnYll2PHdQQXBwWklQOXYpKF9UUS9GWCk9SFBqKnBlKGpyW0taQmplJXBWIzVeJi5JZWBBelZhJVBLRCRiJGBAIiUi'@;
put 'KV5qWC8uTF5BPm9JeTNJdW5PP2JMMj9+SUhgeigjOCpAbmB3cUBuZVAxUEtWYVFzXypTLCZtRG4se2VWQyNiOFRvMzQzPURsW0YlWHhrMXRAXUtlUE1bKTJNOF5wNComSkZyMUJDQ3dWbStSTSEyQ2JIM0JtLyxqSy9wd1J+SSVlNC5iMndPaTliUlIvUXwmYV1uRz41R3ZJIWJjeWFeOkVvQEIl'@;
put 'fnlXdUk8akVJdU5SeklMfENffThIMHhAZ3s6amA8T2doa1tnX21KS0tzdlBJJk9LXT5zTiFALklzXUdAXjhwOmpZJlIqSGNBWiZOdGMmbiRdLDsubmlZVndxfUlqJW4kVy5wWFRCbUdqc2M5fSleQGRuWVRnRFtqa0FQK2hbY18+dF8vW3o7byY4MFVxSFklS0BUc3ZpQ3RHOzVlPlQ1c2xRRXF2'@;
put 'cTEmanNtOXpJSnx3Jmp4JDl5WEdgel9oc1pPRXljZGV+OXAmdFZ5IUhMSHEjRDdtbndGZVVgeyFnVis5eTptK1UuQHRyZ1t+LEorUHxdIXhDWFV8Z0FDXTJqWVBDSStLalRzbTt6KlMrV0s2PS4mS3xuOS57SnwsQ0lfPWo5czFoWl03LGszVXkvTVYyJS4sJn5hT3w3I3NbVX16PlJPfiwpJmJQ'@;
put 'MHNaPj4sS2osVCl8TilPIShvcHl+ISt9W1Brb00+TjdNIl5CfT0uRzVCX3QheSosdDF6TXx6VD9vVVt0IUI+ZlN0IUJlI2oiIUJEZ3s+KHkiYTRvclQpR0M+ISg0W3Axc25pM2BSMDNJS2BSZHM4TnROJVZkYn4xMCluQyJhTCMoR3ROP0xlSU5RdyNtM2NeeWElT3VSd0RkWERhVk8rKz8ralsk'@;
put 'XiFpa0tKSENdO1dpPC5QWDA7dE52RGRbKyxCTWIzPHdEamxwdFErLyVHSCs6PXRdUSZXTl8qZCYuUWEzPFp3Rkh1T08qaykkMXYjRjpsTmspXlc4LERSbnRTUT82ayRtM3pOaTwxNFZ4YTRmXm5qbmdURlsrRixRYXVWaTxLMXZqR3pMYXVLcHRFOiZ6NkkzcFRjKzxpUWk8Y15rQDlCOiRLT0pV'@;
put 'aTw8I0IrRk4rLm00dkQmV1lEQCtncTtVdU4vX0ArPiRuM2NeeFJDMVIjbEtYRjlpXWdzT3phe2QmIS5uTDY7YXV9O3R1Vmk8XSReakNRLDomIS5uQFpwZ3g3Qys7Ym1dVXE2LD5Xfmh2SmJvPGs4RFMmYmxGKkwsUWAlYjZNPT13WFpOVi5XMW9jMFBlcE8sJXRrQX5BWmNFYT8jXygyImU0U3B9'@;
put 'Um5Rd1RvYmg6Tz9QXU0mQ1VlNWVZeUlZTHEzIyRnNHUzPjBDXkciMlEzajRtclkoJTNNWUxXSjYlSGtVN2FURFlmdzw1OjpLfVBiQSNaZkEjSWU7S1hpO3RQWXBneVNBUSx4Q3xJRGZ6NV1naEZWZUNoaFVTIzV7Pnc5YzR8OX5uJWE3RzwhUlIrRko7cTdNSENaTzUwYzdEUDV5Jnw6MCIpPCM0'@;
put 'W2olZWtjY15AQ2pVOmZCTD0rMW5SZ1prOyxeO3VYamMhaD14dHw1fDZSOFc8T0ddL2NgKF58aEZ7cWMjVFpXYjQrfFRnan1wMmBzeWpoenYlbHNTPWYiRE53KyN4fC8/WVU8MXR8JDZ5L1c8Nz1mZHp5IzNlPDV4e2E1Mm0kZmlVYkE6UmB7M14rdDQiLClKP0RNO1pbMGtRLkwlXm90MDA9alE3'@;
put 'OXguUDJTYVdgeF8wOi56V0IhY3hTIVE6KyVUWW0sUEMvfTImdTkwQGNVNSw4YTt7V18jZDxXU3AwJk1HYn5xRTVIZXNeQjg0cnQlOyZjMy9sbzN4Z348RDNOOy9FYTlIODYkJGQjTVluI2EhTWB+SzkzIUNMMFpeZmt5L3A8XV0rMWd5ZkkxK1paX1FiOVRPX05dPDIyUyMwNmdKKF1aK3NgaVg1'@;
put 'MC9JM0ZSKSEqViluPHBSamc9O2dhUXxMN3d6O29pPSU4T2klWFF3KWxnS0tgK1pYNDh6NX09QyZUZSE7aT4ydXFefEBocE9La2ZHfVJhIT5KKz1ZaEFEemBbY3w/bVBxTHdlfjhsd341SVFMZEcyfDhsW21tKGZ2QGtwNkAjckBbOixtdjVpN2ZVbi8+SFlsUnJKcDVfIn5BSV1sJV1NcDp6Vjla'@;
put 'T2JVY3Y1fnJaJUd2NUhvd1dZNnB+VEJDelVUOGJ0K2FsUUVLcDp6ZVVxeiZ4UlIrbVl6RGcyOl5LSVIsXlQ0KFpKSktFUD9DVnpId2ZQOlJVMHdYYChUWHBTaXQkfm5eTkU4VGh4NzRaUHkoOiI8eytgYTVVO2MvZyNZYD9iJX1MUTs7KT5qQm97XndvXmw5XWs/I258UzZINVhdQH43Jl5LfU0y'@;
put 'NnBPJntkOixUe3U5Q2t1ZlJaPmVYcFlndz57I0QoTCVJU0FsQSQ9RHFbaWEuT3o3TXJZSVI9MVcpZ2ZYYygkK251SVc1bTh2KVQreXVLdUNTfmgxTURhNF1qQ1RCJTU9NG1BQXMjZylUbSllIlt9OlR1K11xUThiIjw1Mi5YLDc2VEM7LH1pPlIiM0RHT1Rsfj9IIzw6M2UwIWMzMytdXiJDaDZa'@;
put 'QF9IK1ZjW3I5dn1XfWRJQTJmdTlzQWVCOHBUMXchKV5DTldLPkp7fU5OXVhhcnJjQDNTKCFuZjQ2YWRUKDZ5UFg7bS5jeVZ7amN7aX1zJkt8S3xASzU+LiVmd1sqeTwiYEAjRFolSzBIJjJBcXMlVGVEY1Y9XiRiOCUyZSEwV1JYeUM/S1FabzVgTE4lfHAjOU1VY2hWLFp5fXlYbkdzK1skLlRl'@;
put 'Kl1gez8zYz10UW1GWDJiOWFeeDE1Z2N6SmplZHFaN087PS5rczszbH4/cl1eW3wxczZDSXF6UiVGJk16Mm5CMCtEV1F9cHAjWEBnYTdlfVRHJWBwfFRgblUpWjosX1ZCfV5CfFIsc0BPPkUvWFcvaiNkUlg4a2JlaFg0Yy5UbyxoWVcqZmJHOWN5W3Iod0cqYXMoYjFROWRhZjo9IWMqb1NwLipz'@;
put 'XSFQc3IoX0cvZGVXOFcsLkZmbCpRSE9qSF90ZGVmN19eMSMjWW9JIigjKG57aDhbWTdDSGQ0LzVxNVVdY012REQ/Mk9IYFFXVSpCM1Y3KXtEZmJRRWZIMUIwWyYjWno8c2E2MXZeKX5FMX4+JlI1VEBpeTNXYnlhYzA/Jm5gOHM6KzNxY2p5R3J9e1ldKHdPfFldU0ZeKjkoL1VRSXh8ezZeY0dz'@;
put 'STZ7LjNrekt7NnsucD9oVyN7PGNOeyV4QzRbXzFzY1pOQFIxK09aKlVmPTNtdFoyPmdVNztXOTpoMSVVNFl6KlhaeGF0NWVDN3QoOnFWOEV4KnJWYn1GIyNKcHJDXWtxTDBgXXQ/Pyp5I3FeJF1te00zYFh5PnYkbll0ci95LktxL1BeS3pCVVJFJlY9bXB6eVJYYG14THF7aV5wcDZ+W3JlSVNU'@;
put 'TFdockxKcT10Q2ViXyFNdDtOYkojWHBCeUorLlo1SGskdzF0VWx4QjZnWnc+O1tCNzgrInFTWkt9aEZJVGF7PXd+MVdIQGErMWs/ZnZ7YXR9RnldbFQ1bSReK3FiN0piVFNVM213LjQwZkQyI2grOmRzXl1gRm1FIyxtQjo3Yz01byRCXXg4ZEJjfGF8OG5geUQoVTtUaStteV1pLn44NXxteihp'@;
put 'WVFLNSRKU2d7Tkk4QGNWYGh6Ok4sTF1GPG1ZaE9fbnZKayVTZGFmakx6PXlIRCEwOzsoMSErWFlSb05XQFtJREssZXo0TSJWY1pwM0YlTjgwPkdlZTpxTCFoRWljP1Nvb2c5bjkkK3Z1Vi5fR31mSlg8TCQrbTs9Xk1rRzxkMyU7L1Bhb3tDaE1bd3hVNDg2azMjK183Sj5VO1V3O2c8L3tWQ0dQ'@;
put 'cFdUTktWdzBmVU8kZWd1cXJ3V0d9dUU8WDVzTndlVyNhWysrVSpMTkQpN3dSaWE2fj5aVX0kNkt6YnB8PFglcVo3SmFhXmZSSipEPGluekUleCRpdHpTPi8lTDNtKn1YPjtJeWd5Ri4uZmZgRHZydmBvaHZbWzNUcz1Eejl0MiY3RE51a3NLfihTXV5zdkt7ZHMuPmQzRyw9PD9Ac31ic1BofHBH'@;
put 'fWxKLFQrZSFoVCM3TV1vKXlpUDhkdDomITs7Qz5xMnd3Q29fTFNINXNVaHR4SyMoYSxfOW93L0w4VzhzdEMxOStCTGFpX2trO1dMNS97VXA9fDM+VXV5e3IwSHBDXTZLfFM0fUw0Zk98dCopSC4qNiJoVio6fHx0YllmeCY2YVB8VEg0ZDBlTW93X1taa1E3ZGgmPXNIaDRbKW9gMmNYUiYsaWJg'@;
put 'R2JlQVU4Q1RlTipBSzplMkJBQFZuL19DXy8maj5HVlFPfF5uZGpHOyxxYDJjbVUzMTtXdntRcWlZVXF9VXZ6PjlETnRgR146NGpYM35ENzgyJTNFYC9vZGVBVUxYY0JKX1gxYUpwMEdLK1RhY2FfK3VYeEosY0Z5bl1xP1F9VU5NRCs4LG0qaWRIYWx+ZnkmPUVIRGh4WmhBQW9BRlZQRXVDXi40'@;
put 'OHRFS0omYWMrKzgmS1A6QVFac0tDXXNGY2wieGJJc0tTaUBPeSlJRndPdWJkTkowPU9EK1Eodzc3LDl7TFBFdVN6OEZIakBaXyt7Y0JjRmVlTlA3JmdCXnxeVko7Ii5uJiIxaXNTXiFmcDlaOGFWWTYqYDciKzRVZU44ayZnOVA+fGFUPzBwPSZuIWdffX1JL19pT1Q0I2c1Zzhncn1MNGBJTlFN'@;
put 'SCxRTjB+KHZ9fnt5ZyNjfXltbmIhXXw5MEthentWVzZmZXNZaytBT1Z8V1Z3fnEvQU9WfVdWdy5gc2xRVDg3PSZwLk9YRWRCM24jfWwrdz9PY0AjYT1DeEd4aGtYano5QGchTWxWSkB1eTdRUUkiTCh6cSVGLEwoR3BhOyk1dF1nTmloRm9YMjFCZzpLP0IlXVFAZEhPNnMydThuWHtSP1RjW20u'@;
put 'MHVgQXNbKkUhODtPbENfXkg1JTxUZl5eZDsqMDJTTEdFeFh+KmtUYTNhS05SYTA7QEZ9PnkzcFl3QjhYZm5PS0QoPH49XlEoKG5lRXsvSVFJfGk5Qj5DI11MRFE7TEM7N0pKZFA0Lmo6eSFRWE0sTUpdOGhWVHU5YGZhbjFFV35BKztDdVpbI0dCSzltR3BZcF1ZPm5ENHIsSEtkSFFEKn1lbU1N'@;
put 'ISVEU1BlTEJNZDpPPy9xeUxBU0d8aylLJSM5NDRfV08qQm42LENNdWpASUt1ZzdvWHhKdXVxNiE1JjVQQks9TCxiLEZRWDVJXXddQ0k1YyEjeSZ2KmtdRHg6XUZRIiJUQD9Fe3VYfj9sbSN3LnNtc20qMHQzYlFOZDJmQjNMLENXYWkjOiRgaEJhO3xEW3B2NXFGLnlAKEY+e2Uzai4xZjJWS1ti'@;
put 'YVVYWk5lbktgIXNeOkkmWV1bKTtPSURpZmwsR3o8VHwkSWMmVy5CRzZIO2w2OT9JUXhBVDBqKjFbfShWZmlVOkc4TD0xI2Q3KGw2bTU4QCN2VilhSFlFLi5ncmtHTXs8Z2xwTmVlOFdmMS5LaUBmd3Qqeno6PVohd2dhOTxxUHkpUHx1fGYjdC5zRC5kViZiI2wjY0xnOGRVd1tGP2NZZFVAO1Jb'@;
put 'RSNJRlk/dl15Und0aXA9OU58amciK3k+WSgkPGZ4RWgrbDxuSiR5N1R6PmJDOSkvcXRwY2MqRy9yOz1NWWZEbHN7aE1HMXQjSVVGRkJ2THRuUUhaaCErVntnK15lIVlpUHZzYzwiSClXdFpYUikhOU0vXXRLR0QjSlosPXsqPT10JXg/Mz1IQXttK21KKCZdcl5pREYzfFFwRHlAdHt7fj0qblh3'@;
put 'YShSOilfdigxNTUqUXcsQl9VfkpXK2IwPDY+R2wzRVhSKDlBM24+Y3EuZHpzaHFTQWdrNzRKW3BEdH1VSnUyNjJSXUpQXl0zVU5TSC9UYzwlOkM6SyUjbFdSckYwPzRHVWhXTnh2P3BHRTcvYHQ6eyg8PDMma2ZqbTxANkclO2VDLlNwdzUoM1RLdns0ST1wbn5SQHk4MlVjfiliPWY9UHxjZ0BF'@;
put 'eDVAJE1DVyo2UytqWywvYGErRi87OylkJVRQZUx0ZHZnU11QOUFxeGxBPmpEZW9BMlAzZjhMP19kXzp8VjY6M2U9X28yUzx0bEYlUjpuclVRa0xrKD5MWlVlMXlpdCZOX3d0I2hoOE1VbVRWKXNuWlt9Syw6ZDhxVDl1c1Eucl1ePGZLfH55WVpge3k9MkgoNlNPRVosUTdpUUk+JiVTWjk5eSho'@;
put 'eUxwOi5uWiI9W00yQEtjfUlTbWt2N2Q8Vj03eDRtVEBBeElZK15WV118eiY6dXk3Xjt+bFdkfEBLR3p5WXM5UnZGaXp1VjtoaCE/Kn5sfF1NeHQlU19QbEdkRi5ZaSE+eTckJXc9dy41LEQ5bGspI2kraVIoTl9Xfj8ld3QuelRnQmBUYmhvRE1IMmNiRns3WTVxImlkbmU4V2VfTCRfbVNmfmU6'@;
put 'PWVSK3toLj1qdDYlNjo1bV04d2EmLyorOiEkNyZKI0RiP2ZPeX1tLGwkRU5OZDs6aW8pSWZiRzw1cF0iMD1bYnYwWW1nL2dBPitbc0BFbzx9Km8lOm1WJT4zJFlaPW0jOVUkekBnJVohUHk3bEt+bkpWK3RacHI4b2EhakB1SzdLOW8yN21Kb2dNd1o8UHV1bjRiaXpeLnxvU2hVLyUlIiRqazdl'@;
put 'W3tSXWFDfHtdV3lbY3FwZCtiZH1vSFtwSDJbVDZ0QVJGVUVzX1tRRFA0YT86PlB7cl1JfUcvcnMsKkhWdzNKIzxGKDZYUVp4LGYucGJHM0FpRTVYVmo3M3VaYThddXowPUVCV2w4RkJ4dlgkOk8hTHdHPm9jeHxVKG5ZPTA3JFV9eDlNcT9Jb0E+S0JFQk0/NEw1NVhEVyklQzM0ZTEzJCFKbD5N'@;
put 'PmkyKyk/byFNJj4+UGk7QmVCOHpKX2srVmt5Z3svPyk1KEA+JlsxPypOR1hgN0pXb1g5az4/OEFlbDkzVWZdbzlLcmFPR2QxZWwjKGx3czdpJng+OHpKenxBZSJPT18sJjJUaiQydDIua0ssfE5EYCF9ayZSNDEsZkhrSHVUZzJqO3NobyoxXTtQXTphNDZMek52THVbYURZemVCOFhwPzpFXnpz'@;
put 'JVVGXi9LSGFuUSZlbWQsRTg4MGNkT0c4TGUsWCVOfHl6IyRddGlvYlFWJXo7ZWpRKHVrc0FPXjE6eDxGP09ldGNzQDJofE5fUVUoOmRFfHtYSzhdUGo1VHouXnRdbE5nbHlYXmkuekJIN3sjIUIqZ0ltWGZ0P2p+O3k8OV1Ka3h9b2smM2x0YlZsaysreSJGa1ZvVU5oJWhgO1YpYCsrZ1hkbzhY'@;
put 'XkArfFsxU0JrN3hbQE55KWdJfiJSKGZnQmo2bWgueTBGZFcvYEpLMkJkUWo7ZkM6ZTFnN1clcXw0JTpGOj4qI2hfeytOSm0ucy5ScGp7X14+UnQoImVoRlgoX0R6eFsvPntCelMmbGs7WHxkdVVrciNZcSVSLlNsaillT1AlPnF1bzRgJkBiZTxdVHh7MXs+YzI0SisoeTxATnlrZzBWclUvIkE3'@;
put 'OFp0ZTl1L0Bnenc8YlQvaHp2WlZDZ25vW3RBRUt9XnB+WmJyPjdQRms3T3N3IT9le1ZbdGg1JUF9dlEwfTtQJVY4QlBxR14mKHlEelpjXjI9c29SUWxqZXROUEUpUGtpVX11b35aSiVFOiN+UUtTXiVNcWtke1suYyFfYnMuJFhbJWA4enYlbD5ZMExWLjVUSUI1SDs3P1M+LFJXZ3FHWnRWZ3F9'@;
put 'VDF8e1twfCxUImZVVnx9bGMiTjAwRF4yPjVePmg5WVc/fWdlNytfcTByWUtBfDNXZWNfM3hNOlJHUGBMNEBkVkpMVkZXM2VJQHsyLE1tIXtqZFtMXSR+Pyt8cVU0Q3U1S1Y8Nlg1eUFMX1t3dlhaP0tCS0FJUU0ybC4uO28ybGBbfE4oNTQ1cDEkZ0NLRHZaQSFad3VjL1M7UHI1ZHV3LzBJcnZZ'@;
put 'JUJJJm13PDUrPzUhTl52ayk5MF5Pa3ArXmR0Zk12R0t3YGVPJTExZSQ/ME1ZSGN7W0xBSHBjZElPVnRlaFhBXXZ0bXlgS0pRYWNpQHlHPVRIe3B4KWYud29yW0ZgOVNdfC4vMDB7SER9OUNtTDolbl4wUVE5TjghSjA0e0ZvX3FYdG8vaiErYlsmVlpXNzA+PFhtMGNjazdUaHZkTXZvRT8ydlZi'@;
put 'fTZJY3FHXjloQGNGOz5ERl9ecEFKQ05+PHwjQ05jUFBsKTojb1VnZjtfIzw9VVthN2BCRVIyOk89VDRBOHchNnF9P3ovfjxZX2V9aDpwJTpaWyl6b0F8eGc+S1MkOHtrXXh1Z3xzJVU7VitgLmQkSnw5PW5eQnxXaGRJcThGL090L0Zoej03cXlgbkxgcUR6Nm9EaC5BM2tFYjY8Rn1UaHRUa2pF'@;
put 'YGN9ZFRlVj0mYkohb35sJDkvZjopdk1YVnt4Z3pyfG9Se0hAdnImOW8kIjg5VGtwOzJOYkFvMnYhaGp4cjVZXWlpP21ZaGl1MkI6YFl0KlgqYyJoITYxYnFdO0ohTGVYW0dUTjhXP04lWlBGbFpgOm0odlUvSXNDcmJZQCh1JFlbRzQ+bkRRVHJiK21kdDtqNFVHOzovImspO3ptZzhHelJRQSEi'@;
put 'K3FeRDhXSXlwV3siSDxqLEc0dT5iLlttJG9GZW9hJWIvbTNOfDksakt3IUNqaS5HOU01JCV6JTg9UjsrVkd6R1lAKXxxZEZ3IVdyQ1o9VjRma0orc1UjYzVOI2U4fXp4XVRiO1dvXjJzY1QlJVA7bEZbcksyQHFiYGU6S25xZzd7PGtFeFNibExtRl0xKSQpNT09X0NscW4meSRfPE9hQXhBYz5T'@;
put 'SmE7NzwoITgoNTZJO0VmPFpUaXpzXWVIM3xkOU1IOTVjaiJDR2h0Py9dfUoqPSF6K10qazxeXWAvUSl8eWlnfXdoIiRpL0tAV1FsVGBxVXBLfCVbeU53OztOYX4uJG8yZ15Pa0Q0WVo2fUx4blldWDo8ZC5fK296YFt5aX5yOiNybSg9WCpHZFY9bjBpZ05xMXtFMzg9SW1nOiRiZzAmZ08oTTNg'@;
put 'WnE0UnxdV3d6RV9nS3hdMFFtWmk5fGJzSyVlZ3pwJC9nPUpJQyNnX3QrOnpvLzI4Ki5nZUF6ND9oVHsvJHN1V3E5Ojl1YFUidllaIUlIUm92TWAxJUMxXVlzdSkkZCghO2cyQlkkc0UjKm82NTxgcTZlOFkoXy8zNnNwUF0zVSRQOn1xME5vbWIlI29sIypudlBQZmZUU1J7YFlaTm5SIThFdz9x'@;
put 'QU9sVF9bVnclVjUlWzZWUzMiKEcsWkJxaWtiKEMxWHZWRlpdYV5OaHZkbE9deS9MaGQpM2o2RlVMTiwqTTRVfFtvdl97W3U0OFhGXzgwOGdWYUtXVGwzIU4yeEhxfSM9UWBpc3YrdTt1fTcxRXRsLytbPHN8P1h2Qi55IUpvbjxON31MTnJSYEluRGUqRnpdZ3FoRnxwSHxWdmNBWE17ZixdZUh2'@;
put 'NEZUVTI6a1ZXeGRoOl0jK2hlZC4jc2VQXVs5OTdjMnNlYX5EfkVybUsxQmIjI0Q9TT90en5BcU9uSXtzXTxVenxPQSJ1bGZxXjp7Rzg7OW9EKT9McklfUnU/cGhNOV1ad353MDRULF92L315YWc4emojaCFMfjIsR0AqPHsxNk5vOHR2XTVqVGU1Mn1OJE9LNlZUJDl7RShsbmtybTFMbSROb3Jt'@;
put 'OjhkLisjLnFyO0tfWCUrNnRuMjskeVF7VXkoQFs9LHJxWGJlK1hTN0NwYlB0fTtnKVk1cyxFSW9+UyEjNFU5LDJaRmo6eWhCR1ZtejZDLmYxdTpEIWA9IzRyJUU7L3RnTT9CJmJFOE1YdypzbTdNPys0e04oZik1cDJdUGd7Nng6W0xgUUBfKm1kSmFtI0tSaXpxMz1HY3pCc1NAKTJ2RV9IezEq'@;
put 'Nj1neHl9MWVMM11iZ2V8Y11wLHE5U2gzZ2JLWlVpelVaLkdERzVBdz5+cThSeTp+PEB3aj01Vl5ebXp7TEJpfkYlO0N4LFhhLld8bHBBTTBYPmtEVDRVRE02dExvTWgocV4xX0p+RWIkaEZofEJJcmdaKmpAX0UwNGB0aVRTUXp6TWBDSSJrJiRYTTFYeDNZWz48ak17aE5hRjR2cTo9JTpQK0dt'@;
put 'UFZrJFswYk5INSU8KjR4Yk53WGB1UnNgIjY4RkczUXorclcuOlQ/IlUrfklkXS9PezQ3MUtEMStBTEwzXW9FfSR3NWl2N0hEISxCK3p1NHBXQFp4RngsWSp8cU0meklSQnl5MUYrLCx+cTsoQXFPeWg6QytJdiZXdTVAbjYhRGdsdkJHeiNSUUdZV3VyZ3klV0c+NXFAL01NeCR4QWhocXZuPGtv'@;
put 'aFMrQEQpZmJrT3RmMH17YElHdSldP3o5cXYlP0Q3Lz1QXipxNUx4OmtHbikjX3s8PEYpODYvdSE7WlU9UTVfSWJCV1VyI2BgVFdSQHtHU3EuYTBnQ2FwUGYkM0xbRHh6NT8jUF9DaWJAZUVQKCElI11ZSUwrSS50XU5+JCM6QnNWZn5pKmp4PDZGNmElLzpLU3dNPWMhflp6MVN4eU08ZXF0JTY3'@;
put 'aEZedyg0OCJxXU5EPytfd2hKSEteYU8hejc9KmBDbVdCY1Z+RDc9Iz5TRzxzQ0VaTkNLMGFAcG9IUT5jZkhuP2FGb2w+aTFYNzU0TnEkQUVBcjFxPDE4bHJ2aWNmUlNRTWRyKVF5UyZYKHVNMXxnNkJHaSZ8SURNcD9hWioxS0o0RGByKEBqRDA0TEozIj5PQ2B6eHpqTTJOJGApUlIsLkdTITR1'@;
put 'diQ3fipWU0V5QVVgVmIuUVlBSy42OklCVUd5MTpLXiM3X0AofC9mSnJxMTVDcDA1KzUrNGc2M3V2NFR5YlNeWWk6Yyt2KVBWLlNSaDIxTmc1Pm91Q2RJVHdBZ0EmTFF4ajsjM2ZJSyE3OkImfV84NDpsSm81T2x+d3JqRk9jcGtmW085PSYudyZyOl8iR3B5dVhhaGIkSDBNOkZeRzUwWWlVanB4'@;
put 'a0pVQCVuPXZpLjFCNWR7KyVJaDlFTUFgK2Q7KUtDc3IlSEFYOGxpYW0jSTtQYj5QXipLZFdGOk9Za353ZUA/eS4mMXdDfCs6IUZMWz8qW0kkYTEue21bViZjNGx1NiIsaF1VbiltMT45bEZWU1dpVjg6MTx5aj5XV29sP2RtJFUkblBgb2wsZi94Jkw1eCZsd3NCeCovdGdPaiRYPzpYZ0lfRz9g'@;
put 'KzVEYSluVVJMNEpNNl5NNCFuMV4xPllfTGk7QilwNiVjMjdUa0thWGQpZiE0aCwlPiUmLFYiZ0NiI1BAP1RqKVgjYWNsWE1fPFI6QDxIZWg7RnRLd3ksZnxgQ0s5Qi5Fcy9GfD1oXWN7PTo+MVVdaXYycms/R3JUWiROfGYxPiN+UzVDb1lIM1NfW2c2SV59dUFTSC5aWnZHQjIhfEx+dS9CX2Zk'@;
put 'fjhCRSFaa2I+Rik2VisubGtUJSZkMz86KUxtdCZYNV50VU8wXUlvZSxFJjorJXUvLntHdGNnI3NYanldSjJRKzRLRE0lMnpMO2wvJTA4antXWmUhSCY+fEBqQ2AiVjNlPWImfmplKDcuPFo+MTF1O3JgJTNCbztMO2ghfGUsdmZfPkhjODBPXTdUUW12XUM3bFZ0M2g+XWNhZnpvRDl4JCojc2h1'@;
put 'LHpCJX0jeHVsUiR1O0ZwQmVXcjtfMkhmNUJ4WzckP3BYZzFMcGxSTHtZXk1DVzR+M2tvJnpmd0NiQn1aSkpxWSYiWjFWdCVMfX4yNit6LklGJU1TSzdaVHZ4Qnp2UVZvJGReVVhTfUAuPjhuSmYxY3pQRzFSS0ssWmA6SnExIzY6T35RWFg1SVo1VlpyeSFrfiU3OGc7czB0YWNKU1B2QXdkN2RL'@;
put 'aVViWDwhTXVVMF9bNlooOn48X2NLZ1ZrKkZ7MDg3X1JGYSZnUm97TiFkJFY6TldCKyozTGRpdHttKkBpOnlvOW0jLDNOa19jIyM/d1FDIVouRzhQPWZOblh0fHpLRHA7fixNJFldSGVCOHBUIkcvJTB2dnJfJG9nazxQU15MTHE3IkdBTjB0TSlLN2QrNjNwKjYzaklzP3VwZ3U9RHNYS15hJGMj'@;
put 'OFMuUmJBOGtNK2RlWGhzXVpuYVA7KHwld3pyWTxTek13ZDt5Znc2JWxXSWZ5azMmVTY0Xj8vTXFbdmIlU285S1U6NFd3Y3p6UkNRc1F9UEA6VGY3ZyVTdDpFb2ElSV15b1E7SSQmOClLMTl1MzgvaHI3UHApMFI+a0BueCY1UyhvTm8vJCIkWTV2Jm4mRmo6N29kQW55Lm1sT2t9RSoxTmw9Z0dC'@;
put 'RWQjWXhiNz1ZdkwoRyVAfmpkdFNjVio7SX51YGZYUjt+PTs5UWJvcDN5VXA6UV4xZzBbcmwjN05yJH5wc31gWjpsREpfaTpMOT5ORkp9KCVVO3c+KEJqSns7ODZhZCRCIi8+UzhkYF59UEAwfjozeHQwP3VSOlgse0c5biUyQGFjKFtlPyVgdSpZbSNSTUJTV001YXtJfXQieFI2fHFkcCo8Xkhj'@;
put 'RCtJMz99KXQlfnBZPTUhUjZQWi9jOEorLyxiMHdwYzg3UDBJPSZvPk54JXR3UEY9IXVndWBsZDYsQ0BWZHtEV3gmeHRYa2x0K3UwPD1acClOfSldeXpyTG97ZmRScWtbSzgvOFZAZFgjb2A5PktERnt7NntqVyt9RFE7WTsuJCYiRntULD9kTUAidUIvQkREaV8yWndeSTwpV0g1JW8/VlcrN1Ro'@;
put 'VCxlWCgoMm8mdWF1dX40US5US3wuRjZsRUlIYV96PzB6dyZnLyxdTDt7bD1WezhGYHM7K31SSUo8a0VqKi9LZFJrLzQycCVaa3tzXyVsWitMRDQrNmJ0W01YZUVJZDFxbls5WnZhY3R0aTtjamwhYW8xelpubUx6UHxeKmxFIThbY0haaDo0NS53Rz9yMzUoJUxKfTUsYzdlSytteVdkWT9jNCFG'@;
put 'Im5PdWJIQW5ffjJuMUxMW31LTFhmfUxpOioyMzxaP3t4JT5ZMGAyYlpvRjcseW5PS29IJnx7eG9FPko7M2B0IzVNQlBoMiwiQzBXUjpxU0hwaytEZVlQbDhlPGoha1VoZEdgJTg5RypIQVVvUXMkVTg/RFpCITtsWXNLXm95UEFvSn4+OHRQSipue3dJPWQjWWBHe3A/Pzk1VXgrdzkiTTRxbHt0'@;
put 'aitoZEZJKWI7T2V0PjZxLj9UYFtBZExsJDZAI3RnailjJTttPzRQYjVmcERzSEZTSEQ1ejghS0tKQkYpOChLTmBkPT0vRkh2ckEwZChIPHU3InRdWnVSQTgqUUlnWUtSUy8kVGNUc0UsNF4+XUBkSnNFSUJHfSkvVmpucEFMby53REg6JXAmWDQwOVkrNjBKNkNyIX1acjNnOFdzIVl2aHRvc1By'@;
put 'ZWVsNXJXLjUyeWs7WEQzfSZSakcoK1pKTDc5dUlgdHF3TFZNeCNjfmd3RSw6VmlDUVFleVY0OnV2YC9XQ246WC5eQ25kfUZETWNYK0ZHX30pOHRTXndzKU5nPDo9e2VRLn4zXlRjPHgyWVZTbn0ybGM5d14rIVM4a0xNWHI1MHRRXlg4a1MxKVV1PlNGcmpeKVVLOzd9YHJ0XVBkdDRVQG92SU5A'@;
put 'V0JzXT5bV0hlTEkzUF4uVVZEKXcxbiMvX253ejdYcEY2WlpfQjZDV0A6dE9NO1ViOC4ka3dIZ0g4fEUuRHlmUFQoPjd4PFR5ZlBNUWIsVj1Qay9naSI0ZTw6XWFgSj1AJm19WEQ5d2kqIlQoRztoMSZ4Mjc6Zy9nY15nYyJmPEYxXyNYSnJlTDljNFpzJV09XTducWFqRlFuajgoSjcjekRpOChK'@;
put 'NyFHeDNFfT9sIkdDUFE5USZ7L0h8UCFqTHdsPTVYMWt6eGooV2QoZ2BwVGRDTzQ4cWdhW2g/ITImUHJwWkd9fHRBVDxmLFQ9QHEmLDU+MyRIbkM1JixRTV9WJSF3b3VGUkk7ZUYyTWNUJV8zN25UNmFmTjRwKyF5VislOUN7PFcjY3U9eGJRQHVsL2xdJU9nNExHUEx5bD91K3JjejpoWDc/Wk1e'@;
put 'ejp1RVVYRiRgKVM2PW84I3hxN11Pa0Rnbl5eYzFsfld4XW5daDs3V1FnVW14dUVXLlc7fnhgXnRKTlE4MitAY2dJeTV6TWM1L3wrWHs8Q2tVW0YlSC5qcSJ9bUdxI01PdH1sYy90fDMyKmU3WjEyeE98b1NnTUZ+eFspNWA0ZGBbRkVkY2ZiUEwhOix7WG40MXc6KFAoPyRKXXwreigsSVN7bng9'@;
put 'Y0MoM1opRDNtSFNBOHdnVGl6KEJ9eU84QTg+JkUxfE0rWHFPcFk1Wns2STs9ZypYZUI7KTNmN2pbTzEvNHQzdXZANHQzIUh0SzkqZEs9QE1BUTt0aWM4fGBOKmlBMFRkLiRGPHw0JWtCc2lGWmwoeWU/PU53b3ImMEJzajkoWT5QIVVhfCtJPSRyNjgxRTJVdXAjSHVhS2pFLl5JQGIvaFZKJSxV'@;
put 'RCUoaW8kdSpUWERVdXl0SDw3QWV2e2hGRGZ7dDBfLCZlQ3ZdSWprJi58RnhyW187eHkzbzYkT2AhflAyRlZmXSpLVGksV1tDVkM8cWZIX2gyN3MqKTxXLG0wU2RHOjJOeWJ+fCl7c3lkbjQ6VzpZRnZwbzxlP3x6QEB8XllFYHhlcilzdjxsXXhONFFxUj5IbnlTTzp3MWMmfFFoa3k2c2M4dGw4'@;
put 'N3xgU1ltZGVqSTxUNzQoSG8zTmRwOzt7OjIvXjEzMXxefnFKNVspeWYma1ZULmxJZnlmdk5CTGZSVlg7IlUjO1U6bXF1YSJQWDhbXzZlTUkwSVVDQFpYY0VgeCxVR0BGQnwzIlpvbz9eJVpiSDwmPSpnKCVaI2RhaFF1VmRuZTY2ZzhxRik1JWVgS1BkKkNdSTgxcktKeTNteFVBS0plZDoqKXsm'@;
put 'NDZNMU9mZDpyeTtwbWVvWEkrPFJCOGReMVNVLHk+eTdGQEgoO282O3x5Jj1PZXM+I1Jkb1NZbTsyTn4zOVRUYWwyaFZzOVNid3lzMig7Mk5WUzVeOWt+VSxGeDEyaS4mZ0VkZzdAbDVIVW5kRWoiQTZRKDpYaztYUylqbmRwZltfSFJeN2I5Z0c2UGxhJSQ/YFB3Y2dxVy5tJCE1ezgoWlR7YTdF'@;
put 'T1chcHdafVR0bmUuUzE2Lzp4czttdl1IcSkya11GTGBIWU87IW1GOCEpcm0ha0xuUU09PFU2RzhvO1hVfTJ1L0Y8dG8pWyZFfT1pZSRYQGpZXk5AIyxePWNuezZrb2d+eVouJm1OMH13NF06Yk5rVF1BKFoqZCZ8SiNTJGY2YyRALyRYX0lVey5taD1hOTpNYCNpNGNYTmFvOldzSCZmOHI1ZyIx'@;
put 'SlAmbiVLJk86ZjM9aSssajxXQCZKWmdkMFQ5b2d2dDk1VHJtaiNhOlFMYEhkcy8yQTV9bl96N1pjcG04eEtlUTpwbEEiTmZhWHkyRWVGNV82Ykx5XTpGX1ROW3d6QmZhaVlBKkhzVTBqI3tARHdPfGQ/NVlHT31dKm5NKC5JOFpEQzViTTg+aTF7Tm5+N1NyU1cmTUs/U09KJD1qfCkzeVRgbiRh'@;
put 'KXIpTDNYfENOOU0zTyRyMnZHKDAxMiNAXVB8SGFSKCQ+SEtdTntbOVRYfS89ZiJKcHMlKlVEZDY1RTVjYiplOzQxcWQka0cjbDtHYkt2TDk+SlB3dkEqOkJpK0hTbnRiKDtRN3loWCZweWhRN3x9RDdrbGRDIys9K142Y0V8K1ElI3lTNTJLblY6bkRTdjghVj9ZNFJdOGUlQVhLJERaQkUoJkxJ'@;
put 'ayQjTkx9W3Q9W352RWcvKUZlfFJBd0d2KjBIMEp9KWcuQmA2ZChYRz86dWVNel1US0Y4TCIhRFJRKSQ3QVRTRCxeLzpeUkdZcmBpaHZNMXxlTioyazF7Kns8d0NSL0JwZmldSUIlOGVzMTVULmo/I3k1JVJ7PEUyIW5yVlFAWV9YWWlyYjBlQXtRSk1SaW9vdk8jdTN4WXo2Oz5KUUY4ZSUudUs/'@;
put 'fWVAOWhtSV5dWk5VN3ppJHFyS0J5NUNdNTdTPkomLHlYbzlkO0JAfjF7W2swPTgxbDxnL2E5N0pPMm84OX1OZmRiS1laNFBMRlFEIzhaQDBYNDV1diVvWHZTWVkmQmRUeT9AdFJjbDtWQVV8MUBlKGhdaTVYYF9RenA8S280VVV9OWwvZTpkb2lGWi5TMkNxbUJWdVJjbEVLOiwwWDRqQUZvW0hq'@;
put 'NVhnWDVLPV1DNmIxSitybyoxN1NxRkJ5KkM9MzE0elJDUTM/ISk5R0UpMCxsY1V0L0B+a1VoRXNianBnZ3xOWFhTZkJQJX5UKCo+OGJpZHoqaXVSPm5gYCF1ImEjL1QwO3cxcGJWSX17ZHMmT0cpPFM0KFZlVjNZc0QzPS5vdlFKXl8wKnwpZTtII31mI01xR0FfYSp1Wiwjb1lDQUlsTVU3ZTZq'@;
put 'eUZfUilQIT95bFshL1F7fnFLNXdhJXtVQHhwOEI3NH1nekQwfHsicWNNWkJ+QGw2Lzp6OWpSV118OTBGSSRUe0Y/dF5Vb2dEcHVYRG1qZ2tDb2xuLzQ6QnNAdElfS2A9WUhqWE15P1ZbeTg5XkZ8IlBwci5NO0RxPUZEKVJBe3Fee2k0SnpNUX05U0dRMDZiKXVWXSlZIUpqbHdwbzI7TSgrPW9U'@;
put 'Rn0xN2dxVkhbTEM9UVVxJlYjUGdUXlJDT1B0P0txcCsyVz1OPmBBVS8pcSxhMTZEXl1AQFhJezpYe0ssWU1lXnQmX0pIVSxNeT5PVTA/dHx+YTIvTGV9fDkvWHdbNHRHYGVIMjdJKEt+X3g/Z2xkKkNzd2hzR3BVbWBvO11HRjspLDpCcGcyOzlySD9AZFBVZS50Z2hLWGBsdiZvVmBQW2tpSUtd'@;
put 'I3hZVHNkJVFdQitORjVRMWVKRjVPO09kM2svVDFIYk9JSShyWnxmR3hvMGFacWRgc1hNfk9oYTolPk1BZCVtMkx9UDZLWUdRNkE7YGZCdWxFXjlaKVJzWFIvT0d0TDkqaWl9Uk0xOi89VGJEcyxHUC5pcT8ja3NXKVddRHc/SXFMZj9fSHIqNX0kYU55NDg2WDVtNSVxaW1QeD1iOSJxWl9MfkRl'@;
put 'UkteRn1eSytIUGV1QCwwTnZgUGU2Q3hSOFlKYFteOlZWWltLVipsKVBraSpLfVc4fURwWlYrT181dGFHeWJDUShOQVAqSzVJcX0rTjl4SFpUa3NfbDJmVCVMPUBMNyRENDlgKD9hX0xTZlAlVWFTV2ZOI1A5fD8pcWklRkxgYWxULGhvfCppN3ppeCZZJVhnYGE7bTJXbiNtYVpMeTZhOUUub3pA'@;
put 'QDozKU5vUC9AJVpWKlpAWDY+QGw/O05CYEt7fCF5TCRiU2hYTUVxa3hYYFFLPWUzVXteYjMmK3Epfis4UGk3VSUuW05CNV9TbzB6c0BgWUU4ZmRhOUhadSU/dSRKJWkqMitLdm9bPVQqaCxQPmdqPTZ2LkRiIWpMfVErLzowLFJoQ18pcVleQnRGNSIlXyszbGU4fTVDRWZlbF1zbUwoR3BteylT'@;
put 'NzBMOWE5LmtSRTkuJGY9d2pecSw5VEpzayZken14Zk83SG9VbUZZJXNeUEplNXRiQl0uWmlqPzwmI0siO1I5QD5JPFljRC5hSGFfbzlHRjh6bSx5VlFVTUtgNlp9QmNiJDF6UXE9Zk8lPyM3VjM9X1lmIUo9ZG83RVtDRlc4ZGhXQnR2MzpsXl58fjJEbHtjO2NPXXNfbUhUY2I9T2R1OlNAYF4r'@;
put 'TXo8ODAlJl55XSY5N0s8a10vR0VYKj1EdSRRXTZnZUEhfER1dVhDRXY3SmsrN2ZuRGVoLy5iRmhYTkwwYVhAT1crNmQvMFZ1Q2llejpjMDArJnBlQWNdVCVtemojPypbVDovV2BZLEdwUTg0SmN9N3Z0VmVrNV5nbitBW1ZfeVN0dXJIZSpdb0clPD0pZC56QkJuTCpWZ3taV01CXSlaKWxIdCF8'@;
put 'SzxDMkBwXTApZzI1aEMyYVBeQ3VbRlJeRlloKEhYLF50YWdQcUxNbX1vU3V5PmhFJGFUT2Q5ZXhqdz8pS35YOWlrOlczaFlYU19hdkBrUW1dJUt6alt2MHI4fj9LIyErd0YxOV8mO004cG1DSShdP0BDaDYoTXc9Z1hTVytZNnlWelI1ISsveX1RWTw4OD1uSUVeRS5lLigjU0R4Y2t3ZHJiUCMr'@;
put 'N3tdJnFgP2tDO3YialJAIXcqQ2Y8Zmg1O2lOUSZrd08sKXlEIiE6NEhpemplVXxrXXRTJkd5MiglJSV3W31eaUVxdVJIMXdvdT1eJlZyLCsvUnddRkFTdjxWSUF9fUhBfTgxV3BbWyooOUxRQ2JSQnltclNRPDs9R2p1OCREfnVZZHtAI3Z8YCZIKyU+RH40O0FqW1NoOio/Yi4yI0BdQGZbSkRv'@;
put 'dH5XTUY4KGwrcHNZJnE8ZU16KW9TZXdCV25ZYHs4P0AiUHFZImY9Q2t+bltwTm8xeEMlWyxNMDt+MGk3c2Y9eHxKPVtBcDZbJHRscip9WyxWMSY9VnJ5UlYmejl2VWxUbUo6UD53bzlAX1Umbio/XzlIUDJYVj9SKDp9VU1VZ1hYeV1jQ1ZZc3cmTXF9bVUrKkdvSGtaaSovYz1uYk9gJHojIUly'@;
put 'Ml1lX3chMiZkOWpIQzt5NXZmSVhYR31bRyM/V3x8e3B9TnE8Om15QktvSEM0djdONTxybU9oYyklNmc4NW5YaTlTYl47PipmcEU0Yyx+SHAkY1JvME9eSjpNW3xOKDV3eVIkT3BZNWwvaVJebyF4VzVrbH5RSjJJMl1GRlcmWTNTdFFBITxAI2FPZlg4YF0uaz08Mjg+UyFaVE4xaVhqfEtyWkhd'@;
put 'TnciMiVkYEdwN29EXyxBM3dnY2VfSlYsXnliKGhaNGMyMCNZRSpnNUlYV0lDdVJBSEVlQWx4am5EP0JBKnM6N0pPeDdlSkltMG4lc2sjSj1peihZODsyI1o5LFZRVnl7OXhFLmc0azBMOEZUW1NQVCFkZHc3YVVRTiQ+LkB5dFQ2fXRdKS51WCIpV2FwZGpPLl5iKVpzbiZXP0ZzNGBUSFBVYGs/'@;
put 'X2Y5aHpPfEBPMWUvLz1uSDR0OjdkWVRYcEtIMlF8Mmh9WVFIbyhAb3dKMk5ESVZ4PVBkdmt2RjN8NEpSYFlkJStINCwyeU8mOXxxLHRWOSxQfWkkJDVYXj1gWztod2RsV3cySz5VdV9nZEBsYjF1NX5zem9ZcDNURFUuIXg/MzE/dTxEM3gzZXRWPUglVTs1RWp6aUN6IVtpfTMyPU92UiowT0R7'@;
put 'dDoqS3J0YDR9dTlWYUouR2BTU1E7QSl5QHEwWCFAVGhJUlNRcCMoPVBHXV9DbFkjWjpuInFJVjBYPmVjJXdrNUszPmV8VXEpKlQmN1JeRig4V2Rid1hpN0goOFZYXUkoSDwmd3JdSHYyUFVTITZNfX13KzQkW1suXzZBJm1PY2JMNk1adDpfZ0dzN2hsMnBnSjE0K3c0dUxQczJSKyxZW3EpWkpO'@;
put 'PHJYUXJ5dVAwWHI3VHhHSSFsOkVVYkZCWTdEN0U3VnA/JnZxZzdXeHkmN158cjMiVjtlR1lhX017TX1aeFZQRFdpNVNfKzN5N1MpMyVHb0NXS3I9WE1idDpCJkYmQFY/cUNXQ1ckZF9gI3Z8Sm1GYC4uOnVPP3FDV2VYMFRgLn0+UVpWNmlzb2QrQiFpdV9Mcm07SmsyI2gjZUpCNFdlY15gT115'@;
put 'dkpYZkUvUjssZmw2NFUidyxCN1JHXnFpXkQ6NjlMN0doKjxVWWZLNVI5UVYxaHg9NlErbV1bUndqcUZjLkgzQi81OyReMyxZUkVUdEs0OXx4bDAyQHRSey4kZHI+Ojgsb2xdMlNAbkojNWRJKDU8W0tEamNAd153fDg/V1JyI2dpV2d1QSRRT1FPT35KST1oQWpQUzxoXilSYztmNipXcG4iS0k0'@;
put 'SH5KUF9GRlB6SV1sTStpbEUoXUNiKVp2RHQ0QXtLNHNxbCJLNCxaQDc2dWlJUTBkQ21+SkpiZ25rSExMVSx5c2M+TV8kRWJYMV9GWGsvP2NzZyxWOT15ZSFBK15LMn14YjFwMEBpaXQzNlpCb341QVVUSEc8R1Y4dEB7ezRQWHFgJUY6QmlKV1R0fUwxMSk/OFZJYlImTU0oVmRbcGBIUnM2KUZs'@;
put 'c1V+PF4pUXtmQy9GVyk6eXYzKk8zSlA+QXhHe3J7RyZ3eDtZP2dLQCxUbXA0JXNMKSYiQiZNQmFYNXR6TEckbnBjVGpYNXEwWEc2L048ejckVTkse1J+K25EQWI7eWwyO1BsMjtQdFkrbXk1SFU6MUs2OEZBVm1XdkwrM3FyKHR6X2xjUU1nVl96TTkoX0NrK21WbXA8bWpaXTFpLElTa3gxMGZd'@;
put 'JFY7NmFQcDk6VVtvYUtJO3tJLmlLLkdxRXByfXBWe3lNNzFLI3BgaztvaDBqTXdIdiYjOiQmVDMxdXZLMyVRQnlrZkEjaFhVd3FDaEB+Rl0xRV1ZQGFSMU4ocUIzYUBzYDgrfEB9MSZxVmRhViFLV2ZwfnU8ZjxubkMrcDpNU31FbH5PMXU/emArSWQsS1tCVUxuMWxYRm8lLlNmUXouY0d0S2hA'@;
put 'fkZDJT5sdUd+WHhYWlIxTkVAJnF5biRVX09Bb3d8dDY0TSVDNjNkeWhFJnN7NT9KSnl9YFNZdWc3NW9OWkJDVTVYY0FrfkNAOWhFcy81cVp8azV4VHo9N01NYXVeWyt1Si5ecSRae1R0N1MrUVZQYFRVQGE+X2J5V1pXYl9AJnxGcntqYWN2cXtpd1I+WE9gRGB6dkwrbkgmbmhWe2pmQEZAdCZ6'@;
put 'LyopNTVvTnJgM2dadiE+QkBVc3NFNDd4K0V8a3NYUS9naUwsLkFGNlE9N2F1WCo8UXh5ZE5vSDRnWyZWOiJCfjF2Um85cV8iMU1gdGZvM1lrUzN4eURWT2R+K0FXdDNWVFJ9aiglPCUuXSNqeVVsIXBKaVhGWkMzbTlDa3VudSlYMWxsaFE7ZH5YOXFfJWVySTBmZmNzOHZELlgidmZUR0NDNXIw'@;
put 'U2J0fTxALDQ6IS5TaUpkU0ZIYXhyRG12ejssTWEsRChjN0I7USVtY2JPMn16Z2RnSUVLN3FaIjhhS0BteEhjaSE+NF1mK25ERUg4V0NzPHF2bFtfayl2K0EqZ3ZaXWZ0QkcuMjVxNmJ3eipiaV41WGhqPTAhR1NrQTtfaWlycm0oQCMsMmR0Y1JXX2l0Y3RleWZgP1AyL1tkY1pod1hrUWpjY0Y2'@;
put 'WCU5cn5DSiM1TyJkNitmb3BFPiVsJWQ/eChwZldtOFZUQzN4d2NiZkh9UDE7K2FTajhPOjdKVGUzKzg1LGglflR+dEx8RzJ4KWFDV3A2Ln0/Sn1EJXc7P20/XSFqOGROYDNPQjJwdklCVk17PEJPXTJPLkRGWGo7cGdYZ0U0WFB+eStwRDhkYW4uOkFsWjN9eS5zWkBXc1tyZmRFbWRFVXYoc2Q8'@;
put 'W1dWYSMrKFU1NHB0S1ZCY1RyX3VCcldDNV9nQWEiNGd4ZE48SSp6e1oud1tJb3xvV3VFSUV1SDJBe3EzWjowNT9NTihtVi5TaD5OIVR7cGdlKkNeRypncWksKFkzTjI0MHcqeDh3QG82bUQzVUUrc0NXPyU6TnpYZnhydnJWYn02ZCxnO3U+VExYYGJMQ196aU9deUNATjVOdXl8KUtuMXVHcEF7'@;
put 'Z0l3ZVg4SVJJP19MI25vWkxqR2VyVWl8YmxvWkxEK0hXfGVzSzd8clYlY2wqdE1nXXJGK09dPmJdK0UrTzBJbjB5SXJkLHVLZFhYMDxlWkFWTD8yVS9jNipRKD5kMkJbW2A3SXcrRCVLX0xsOGQ1bE9ANjBPPVRrW2ZPOT9pOjZISkFMXyY5MmpkdHglVERvJi9zJjRJczcocSk5Z2xWPU8xP2FG'@;
put 'VSs5T2F4RnFkJSpZTUhUaUt7XnV8PnYzIlE2OEsjOTRsSDhwOi55SFBpa2IjbzA7JTZqWnd6SDttKDMkO0Ezd3pkd0R5eXtiKCg7OVMjVnd9TzoueUhgbWduW256THAqeH1Fcy5mc3Y9XXQ8Vi5lTzA/UGpYWjhXRH4iRXE2b1s/VC8xOFU8TTFVYDY0PkFsNFUiKlVjKTVofCUje0UrXkM6SlN3'@;
put 'eG9PSkEhO151fXghYFEwZE94eis+fj0vVFYqUT9QakE+NkcvemVdMjBRe3BMMHdkRENuW0xyY2w3X040bjs0MXY/TTcsXmxpdzl5cCR2VnFDOUZmTl1DaVEkal87azN2eDw0K3M8ayI6Q0ppWUxvUjkkJW5uMDtPKlZ9Mm9HNTklbUgkZHIzLC5mdHNiUGZCJl1NWzdFRVdbWXZgW0tZc0hwKSp3'@;
put 'SU5QKkpjWWpGVUJOJl86ImtxJWByUHY9eWcxRy9fNkNCPHx9O0QmNWYpbm8vZ2kifWVebG1mcD0xZyRJcTNrK3MoPHwwfGpobHBHcUJafmZHbi59blIhN2dvNWVQSyIkQihjUy5ZaGFFaCZsbDV1JTo9QTZeSStmcm95NFU0SHwoTV5bPGVCNkNMQjAhQDowdDt4JT9dekAyIlY9bl0sL3BNRkpQ'@;
put 'dkwoK3J8LnRnMD92d1lwM3VZLFs1PGRRcVNqYjxQayRGKFM1VXlPX2EpSmdNSjp9UilGPnIySTVjU21VXiVmRjlmNypsaHRdZ29OYjdeeHs/KT1VbTI1fV07eU9iZDA/N08wZ2VwKipmUlppO3wkYWlOQj5IXUxSPm41fHE8O3pRNGNbI05PNWpDM2dEayQ+Nl1Xe2NDT3pgdSVpcyh9V3F3PktR'@;
put 'bT9FSlR0QWNWZkozUEg2eS5rVl47a1pkMk4/OHJpQFlUVXB5OiFyaiI3RDtnbGAxPiRYNVtSczpzJk5HaWY6LEwqJmp5Uj0yJGl+MyljcSZ0WWxTMTRCJjloSjNGPGBLRl44djNVLnRIfGd5JF4/R0lPME18PG9VMTRLLEo6Lld9PGg1JTwoRjd1emckanYhRzZAJmw4ZHFXOE9JWD9+N2RxX2lK'@;
put 'Myg8NSFRZSwkQzlvJWE+SyRsYng+UVVkN0BbPWZYQE9wSjFzcWcrO2dyZDcpTG9EQHomdSR7QH4qe0gmLzNMWmhNeGBIWn1+VUNsejYpJSFIbilpNSVjW2kmbGI3YWpGRiwkJnlZN209byMvbFtXP34ySTNWcjVCTWpXfilAMW9HSnI2aEBgYFVQXXohb114SCVCRjJDPmxkPl1FU1Nifi9CX3Q/'@;
put 'dSspPihXSj56fSk+byZhb1l6aEp+LH10YUU1RzFpKWZ5bV92fkYxI0wrekhaWTRZX1FENGVCKzZpREY4YjF6OCQqcDs+ZW8yc1EseVckTmFKKC5KbyhRUUJOSWFwOzE1PypuRnYvVTI/KlVwMWppP00ye0kyX1I1JGRaOWh6PXZaNUdoQ1dWZk1EL3RyajFkK1QyXi46c1RALzN4QVN5JVJiM182'@;
put 'NjV3MFNEYWxjTWQ0THc4VGJ7QzxoVGtOayUlO0c5MnB3fEBoTjozWU0yTnh+eSZXdU8hc3xXaDJuemRKfkxGMm5INHBnNDBTYktXd3hEQnc6fT5ZMTxdLklCQ2QyakRfRzpXYGEmLHJDdyZ6YiNCaygvNlgyMTV5KWhfYjdZdCIvSV9UYn5wcFt4cHc3OFVWYUl8IU5RZj5dOVhvSDlAbjVrTip2'@;
put 'e2FKNWROV2c2QHskUHAlcCY3bi9HKjVFbTUpV2dXWGEzXTk1aitWNHZIekM4fTpVNUtuS0xiMWRZPGd4ZUFLe2Y1MVdSO3BGMmoxbGtjeD1zcE9EemdRI0o+JjJqeUNMcX1HcyxHMi9YJlp9TFFGeXtFPngxVH5vekUhTkRtdXd5enVVOElYNWdoaXBiVU5lJTlYKmVgdV5KI2xWQiYvWl9nNiVC'@;
put 'Y2JQPEtXX2oyX0xmJHw+WGNvLG14Qkc4cU1wV35Se0NWWl9lXUcsSzIpbj9ra3I2I3tAJmx8aSNSOmZfYEJ6KHFeS0k/aF8jdCk1aTUvSHxlXl5IRFV3MmUsQzdMN0l8U15LPCk8L3h8MFVFXk0ydERncC9IWVguOikzb3BXMWUpbiZXZ3U/NFNmP287ME1sYyN5Wit8JGNBYCJaQnA3aDJzOV8l'@;
put 'd1JMbEt+aU89Q3N5MCJDND1MeWx2ezxmWyM0eWJucXkyVW5VVEQ6TDgsKzV7IzVZfGdbS0ZyMXdROHtkRHh5PjV5TXooTV8rOVVEeTF5Xy5UKTdJIzNyKEBdLD1ge308Y3pgI2w+eXJUX3hVU0R+VTMlNE9UcCUySHNdLEBeUj1uSlp1K3Y7XT9idSUmTSklQEZ5PChtPl4uTGpde3N9ZW9ic1pA'@;
put 'N11vOj59K2ZhdyY5R0YkS3UzVDNYPyN2RkhqJFg7MnwrJCh0SzN7Lmw+RytGP2hPbXxGQHtqSWJ9eiF0TzxMX1tkYm4wdkNIV0RfUXpLbHZhbkptYkI+bVMoPSVHSX01UExkeHl0IzguK3kzV0xXSV0pVCs8RnszQkA1TnA/QH5ZL2NddXw+KXdufEp9WlBVdX5PM11Te2xXIlcsU1IudTMuYEx9'@;
put 'MjNUbGhzbmJ3Izs1cEZDb0lrYykyUXRjc25CKGNWcUZaX0kyTFY4PyElWjd2NzcsTmYkY2lZK15MRnA9PjVsP1FGcD1SVHJMLj1OfExid2A/ZjtMa3k4JjhddWc7Tl5GcSU3O2xXfFc2fk8rfVE5eyNEUzMrcTwpTH1rX3JzNG8jYWIqaUl7NGcxXUFvbHZPM0QjeG99Ry9QJHJwaVkqd1UmOitX'@;
put 'RTh8JFRFe1NhM34vQj95WHhQMHVfcnNzTWtUaj81K3Jzd1MjZEFoQVQsYlZWR0dKJHlpRn5YSyU7VDc5fHtbdyRsXSh4STI2cGJycDA2bl5QSXwjV0NXP2RWKztkTFV1TXZdYDokYl46aFViVlB5OVl1OlNAfE59ZkklZEdkUDxxXXVXYzhoIldvbzZnK1hwXUdrd2g/dWt4SDw5JVhzdmA7UV00'@;
put 'VntMOUdyUUliR2UkJDRSMGlWbl04UylNJj5De2hKTDZYbD5RRXM3KVssRkU+NCQ2SSxeI3ptTVsoM0x7Kz00XXBte2koRGA6MX0zKmpwQWx6Xk1LcmRgWWE4bTNaYWRnVFNMRkZ1KFtbLl5vZ0ksWEh9VUtsQl00VXBFcEAuTEZlNWgjWkIhVyFyMVVAYChEIUohQzRuLztBeX55V29DV0NWYG1q'@;
put 'R2R7d3pIWFUuSXk0PTQiKzJMXSM5Oz9HZmZqIVcrckxDS0BOXktxamRGJSFLey9ySH4lIigyOjxmOVY0UT1QX0NgTn53a01XQkFGPHF+akkjb2g7KFArbGI2W05UPEVObldNNCtLSzJLNF50NC4vYFJFc0RZZjx0Q0dgK05wYipLXVAuck57eGwhc0I3MiI8USRZckcobihuYihDekQlRG9ZTER2'@;
put 'Tkw/Tz0oPnl0TS5PMz9FU3BjIkdmQGxdKTIiVExpWkxZXWl6cmJxNjN6PTcwPURzL1QqbkNXOCFSYzIreyR7TWQ4VDphSk16Mm4zWlJAan5fM2tPIVBoeTpNPFgvPS9FdFpZTE83XzFvTnJtMUhPPHFkXSl2bWdqRlhnWjE3TnMzfF1pdSNJZyt0TXpnM1NrdSMpbSZRZih4TiIvIyV9cFN0I0tN'@;
put 'Nj9saUZzbkowbk8+Q3A+e2FpcjE+bmZLcjgkMz47LFVYPmM0K3kvOU4iLygxdEJCV2pBM3wxPllZOyNSWSVfIi84NiJYJXc1bE5dMjc8V2lydVMxLDJLYzg7dzdPOHhWVENaOzUxVTlDUW8+a2tYa1suKmZqejQ5QjNtI3FSMSIkYEw9ZyF4dm1iZVRyKGAxakA+bXFkT350KV4rZFE5RTg/VnEp'@;
put 'JU48L3ZwL1VWfD14IWokdjE0NTMvWUtVeWorZz9TOTBWOSg5UWl5TTl2a3g0SV0/OFIhSTt2N1M0eU9OYiV6fWZ6Iz4sYmRnby9YZUM0ZFpHMV9dVzBweHg2dFZHWmM5XmxkdGZ1O2J7K3ZDQjg9aXwhQVFOPEVna2coNF88PEBaImRhPyM8WzZTWmkoIXc/a2dxaiUpV0Rdak4kK2tgSURKMEc2'@;
put 'aTJgP1hKMzZNWCl0QjFZTUNQb0I9OmspZnJZa0I0NlNCX3loVEZkM1hvbFIhTXp3SndPRlhAT0BYLFJGKVBQQDtlMCVsdTphTiFYZFlLMGVKKFk9LmNraStJUTJpZmw6Mls9XmhAdDUme1J1MH13c2tmKmxsUzd+a18sckgqbilmaH50UDl4MUc2LDQkbFQvI3tpJGYlUDdRJlhyIzNqcmZwaTlM'@;
put 'XlteS0lgNEQ0a0J0dVc6Q2VsOSVHQUxDN0MlSWA5eTdeZkh8Snp0Pm5MMXkzV2dVVWQjRnFPbjUyQW1QSmQ4bHJmSVIveUVYWFRiLEVzWE1nLCJMRUZya1NaTGloMmdBSmI6Q0FBMEVvNHMhQHJNPEBZXUNJTDsvTVY0IXFGXUxxdSp4SCp1QzkoXSZFMFt3KDg4OktPcXUkb1ZYW2BgPk1EQGNj'@;
put 'aHRPJEpFZGkzWDhqaVs3X3pXaTM2QWtsWn1APTlkOWZsX1RdNl1FTmR6eTFrIm1PbXVtODBfXXY8KVlJKXkmaz5YPk1meHFxe2srRXNKQC46THwsMW5nSXJdeDA3K1lUSExgJXMyQSNrTlg+QH5KPHdBTy9NYFh5QiVEJGg+UyRhPFg6NXBCTTMwSThMK21VKCwzWiZicCE3NjdzfHNdJkBWJX52'@;
put 'MlVPYVRlbmdVLC9lXW17RlR7Y0tHNkZUTUBNbERnMS8uU1hGdXVJP1A3czkpLzNkQVNpR3owZ2N8fWUyTiEsTWJFWzUzTHpTN1JAXW8jVTNXZHZgSHEhYWAuek0walN6ZV1JWGNqLk0kZWFdSHElNDYsUVZuW1g5VTM2eXA/dUtSeF9dZ3x0SnFlSTM0ZGVrSjE4S0ZgYihpfTttZHtnR0wzdDFX'@;
put 'elBrVGBrOmhvRkJYX0ZEY1EqK0FMSiROTCZ+eUBtJX03cD9RcFpuSE5eVygrUy4qWix2bS5ARyxKJFhYPGU8bXssSi5YQW4yQk5wcHsmPDhFOE1jaHM1IzpXaF0kYTw0OjBgd25xOWU5KGM1OjJVW1ppR1RxL2d0fENhYlZaTF1JUkRvTEp9dCZWdF9dTilXLn48Wn5gbzlFSCVHOVRjOU0vJTIk'@;
put 'Z1F6enJkNnAmUDllVFpBNmRwQF1TPU5efEw6L2BJRjRaen1vIyZvbmwwJXJlT180MTwhYENHZEl1OVRPMDd+T14reSkjOm5PVnBwcGZeUFtjS150XmwsZGhddCFTcHlgdU12ejZaWFdXe20lKExLKTxMbF0ybjUwNyt6X1NiWGhjVGtkSzNnaGI0R252V1A1MSJ4OTJvNVV3NkR0O3p3UWhxUH0v'@;
put 'aE9GbWNfOXEpZFYwSEk2TVM7aF51dzQwQ2BtQ283LHYkMDhucytLe1o/eEwxdHxCLl1vWGsheFJ5JipOUFc9QFd6Jm9DZzdaMkthZnBoPCZ6c1lbbmY3Tm8oWFUoaiNDeWxdaDcmOWVsM3xfcCpmNHgyMVdtNU1lZl4xJEc0Z25KdnlKanNZRmUxd25pZ282U095OlFuIyI6YHNWNXxxVzVRVig3'@;
put 'JDkkbF53d11GI012U2VOZUwhOXhURml6YnV3N1J7ZHl7YWo6fHh6SWtuci5dPltuN2lHJCo1ZEZ+P28rWDs4U2NDdHwoPWc1VEM6Zj1WX1IzSD50UWtbYGlpWE82LzpbciIwSyN6YiElWnlNRUp1TytteyphNXIwN3NbUmpBT0A0YHxAMURtI3UrV0lFOjF8VCxDfCM3c1BwZldNblF1WWYsMDBn'@;
put 'UnxFdW5+d2dpdzxDUlpMT1ZbITZSIXwsbGxwPltAbSFmMktuUkAmfEQse3xEQSlWbExpS3tLZD5lTXdGRCI8bHhEKi5rcDQyR3FHUjJjPEglXywwK0YoPlU0P3NQfUQpP1kuLz0rY0R3OmtrKj88bVQyaUk2P1NMV0NpKDdyVEBQYmQ1Kz1iODt6WTpkOTBOMlNQVmdsXU9uJEUzSi9KZTVBYSJI'@;
put 'aGcoRDoxdFElWzMhczY3aWVkNlFqQTQmMENMcGJLbipvL1NRWW5zRTw7P2tRcC56eml6Jm9DYnRVXywmYXxrTy9MTiMiblR7S2B9UnFSMmElcz9lbiojOiRMPzhGfTBUVTZ3XXtfLywvPTYrREtSOnVDIlsyKj9KWXFfNnNZNy5SKVldcGlWRD1rSn1oSmRhQWlrQnVZJkBPXW56Z3RMR24qNiYo'@;
put 'QEddbnpTTE1MUUhEbzBJNGFETU0rd0tSR3tqZEZXL2g3VDN8NVQ/Uio+WnJDb0hhYnEwdnhkRUg5IjFbT0U5eVJ+NjkvfXlgUys8SF1jdlUpQEBXemddQXheWmEwejdveTEjPyoyPEBkMyt3S2FWMC9qSXE7SVFuLHo7NCZyU0haPW05KVRYPmkjKzFxV3tPMnJEIVc/Wns/d087UUolcm1+R2Er'@;
put 'RjoiJEYrPitee25WV013cSQvaFVzW21tYGI8YTxtXWNMIT5ZK1ZwVCh1QDcoKHJaTzUhdzF2NXJpOkxhKDd2UjJVeiEhfmZKIzVKRlhgYE9+SDcyXnhkS21AcWM3VS8pRkBKWnJqIk9uNnBEMTdLZlFSTH0iakpoJENhIT5YZ0h5Ok1UPzpfQFpwcTFNQV5HMDtMOWd7XiRHWVVTZT1EY1FTZEl9'@;
put 'MDlaeEVaXWtiVmQ9Jj41ZTc4TVNKc0NuKntzWVlLTjFOIy57OWFyZzkyOi8lQ3UkT3M2I01uVCVUaSpNaEc+ZkJJcmVadnVzWT91JE8rZDg1YDMhOkdmflM+WExXbGtCTGY8QmpgYWwraV13UEdNMFFAT3Vkbylke2dJVzF+bzA+T3RsPzR0K3NKeTMxQTR4amxIJXNxSDpqWCFpaElLODpmX14l'@;
put 'TXtQM24wVT1DZGJGXjA0dT1ZbHlMS2VaXUM1NCJyM11CW2ZkPW18cDA1UVlQXUdvRypYcCRPR01uSmRJbztgKElgT2JaT1N0S10vOmllVHE3dlNaem9MV0RWM1toWngzJVZbUClTYjIwJlFsQWVUZT56fTVoRzpMSU1WP1N0YjdNYCVnVU9FeVFqViErVShMMlVeQE53S0xPYnNHKj1DYmpaQyZr'@;
put 'NShIJV1tdXc4RStmQ2o1UiMpSXtSQkx8QzZkNDxvey8kQEMxczQzP1JUMVNjRTxJM0k2bGI/cUd4ZDdPOjNVL08pQlJYS0EqPV4wNDp9UEhac1pyZDIjbyMkQ212QyEvTWYrSUg6RXNeK1YjRl17ZHAuSX5XbnghIkJHNy8jcypHRE13KV12VytbVHxbc3ZYfHRsM30iSiJgfHJ1bW5EKT8/bmE2'@;
put 'OTo/TEdZTUBITDciLDE2Vk1dVl9wOnlSTWpFZ0ZMJC8jWStASC5ZOiQ7MHJndVkrLF5GI31VbC5bLG1FUnBJOHJvK3xbc2RaUXE+QiNjYSp1I2lTamRSa2U1N1J7d1FWOD8oYWNINS90VkB8L2I/I1cre1sicytpVmlWaWBuJiU+Z2MuQDhaKUZgcjk7RCIkNEtUMG85L0N1LnEuWWU2O3Z5eFha'@;
put 'JllnWWdNa2Z6eGhETTE2ZCtZViNKWGshIXlYXSx6ZXAyaDRPTmA6Um9dcUouezglVVthfThEdUs5YHJhfTAoTjVBOVZ9OnkwPnk3UXBgRjY0WkxASyhzcW9wbyslLkxobTZwbkpaPnYuJXQ+ZzEuYTMlZWBLemdhK0oyXmBdNnc/VT8uT2hheU07USZ7b0ArX3FgKXxIX3BaUFJtbSFjMXlLZl0s'@;
put 'RSVdLENVJV19YHpCfkNjYlkqU0VHYFVkb2F0VnxWXVQ6STlBW3wyP0FZZjhafWMwb0oxclAsKmxjMDJqem9bLFJoRE1GbzF8KEtTeiNrbzVSI11oc1Jhal8saDdiK0x6I1NyUlpRWiUiJEx7XlAoMHN4bVNETTovNm82NXl2I1NuUn1UfFt6b1svKktDVzghVFdxQE5Pb3xDNjZnRn0pZCRhRE1A'@;
put 'fFQ0OFYpPWR+OFZBfjNVfTxJKWB7TltwWl1AIytwbVR7PVF1MT48cFhDTVIrPSQhY15jZCU6bF9jQXliWDQ/cHlAZEdnW3syNGRgdFcvPVpVUkRrRHlbdzdIOXB9al4jT1BdRm9ffmA1bzJKeyludj9lI1ZXRkxbL2UjQFY4ITZSNXltcEEkLiRMNUhJbGkhMzlfRCVFb3t4LlZwYmpLSTZwWS41'@;
put 'RSh1YkAzfl5+dyl1azJIVX5UVkpfXi5QTXo/WyYvZ21wJEdbW14xM1ZQKkswTms7e1EjZEFFNG5ZQGxUVHszeSR5LzdCPnYjKGZte0R2VmtXOTtUJC9iKilKP0Q9Mip+ZzlbYVtJbDIydm9SfjddcyF1NVRNb30lS31RcWJlcV1hS3gjLHokOGEvfXdDQEJxSjpOPzFKR1k6X0J4QkdvUSMpQURN'@;
put 'SWwyP24qdHlkKG87SG41MXc9T1Qrekl3dklycFpmTkolfSJCR2R6R2drZzI7T0svfWl5WTVILld2a2cpWmA8Nm0vVmtPVmFlWlBqaDVsQWQ0M1FjbGJHdzwmRzFQKmdqdGRaKz5CRH5GfGAhVF16OTlWKnwyNFVqIz0wdUdtXjZGRX4sfFMseW9JVFtHL1JAYnVIIkZsYyFwfiRCYkBjal5MN3B+'@;
put 'cjB0TUVhMyZ2WzdqU2gjekRBRXxzRVFyK3Jsfn1SIV1Ib0clXSw3UDdOYnNLVyhoWUc2RjlWSzRTRV1GQUZSWk17WTByTiYlflRwIkwvMGZRO1VvN0ZJSCZ4S1FPRT5TfHBiRj5TXS5BNCRnSkxzP0pvKl9sJlR8QCRNX35JPSxYKX15P1hwVlReXWR0Kzd0e1NmLkl0ViJkImgiWitTT2gjY3x2'@;
put 'cmQ1Sk1kWjdOQkEkPGVTPWtWImdZJXVNV0ZMO0xtI35Aa0JqOjhBQkJ2ckBBS11mTXxBRz4qS3B5NTJ6UkNRSWB4fFVzSUFLRlFBc3VPL1IyRHRBQSMyWjRyMCR4TWRMaS9PR1hQQmsrfHAlYUMvKW49NDFMRFouU05GflJwZ1U3SyM5PT5TP2g4OG8kWzA0PW0wdE0qMzM0KUt2UTNHMz92VyhL'@;
put 'aFcxajFsQV8lR3AxajkqXlYuW3N9bjFGODg9VFJTPmImK0NoS2dmOVFSemxsdkozbyxJZUI4ezhVNUtsOVErckFUMUtuUikxPVtqP3lqWGxCJkVgeT5qSyNBd2VRTG0kQWVKSClsVyU0MUM5ezNLOEksODx9YjpbPGVRJV9HaDMwJjc9Y0ttUG1kSDNXUkpgSmYqWlUpWzNDTl92bF8vLkZMZF53'@;
put 'eGxfRjBmKz4rQDtRITEyQGZ3cHhOdDthaVY9RHdjM3wxL3pGU0IuRGVYeTVDUHlPI1tbckhOb3FUK1NtJFl5aTFiUjZvfldUZztfIXUvUnNeLkh0UV1PQVVAbzVlflY5LEpQRC50OlhTO1kpWUFeUEZrNUpWVEo9by51LykydmFjXSRJKyw2TFlUS1FWIlV9enkwQ0huKlZwT2UvVGQ6V1tFV1Yv'@;
put 'TFtecG80Llp1JDsveWJjUW4kbzY3ITM1OFthLyszRSVaJldqV01RNG9DWF1uVzs8W3thMUhKIUYldEtFJjRxIXxARnJ7MDI8TWpANnNnRn0wUjI1ZWxzczU8YCFyajlWcGh1UnFyQ11+WVNaMzRAVnM6P0dYc2E3UVh6WT55WXpwakd+P0o1Yyt9TzEmfDIpWjVqLHJPLDoxPCQ8TWBXMGI5YT84'@;
put 'LCQxZkUvM1E4Tyw8NFBUVzhrUl0wQHBmXU1fZyMoTSRkOWpGYi4hXS8+bVFvIUZTZzwlaXlGPFc5S18wUkM9Yzh4fS5ORCVrJlorVUA0ZTZMWlY4Vyl1Q2FXQl5Obm58SlpWaXR1KTlIJDJVMVs7c2I9aGN0JSl2KyhrJk4oenthP0dpd15jJnV0cEpAP0dnKyl6e2FFb05geEtMeEN6eHxdTHtU'@;
put 'K19ARFZYNHddLl8kUHskdl51IzpTUG9QR1hIJnBMVD0/ME1xP0lURCpRSTU3dUdSdz5sPj8wd1pZKlowK1JQTmxyPmMlZGJ8WT5AUytrVj86ekEpPXZzYk8+fCEvKiFObF1BVm40SVgoIWNibVIjKklKaT1zQ0lfOkojdSMpZiszMHlKcEpaX0o4fW1vfDlUYXNbSUhEPWl6anA7bU8+bCUyd11X'@;
put 'NGMhdU06SWtKRE1qOD5KW3NhKyt+W3t+SS5Hcj9HbyhuLjFweTMuVitYNGgjMVcyU0F0QVp5V19ZZEMkTip8YlpHWTdYS1BDRD5wbzJdLGUycSZDM01XVkw7NGJSV0x8fSx9OzRtQT5+JXQldjxXfXNdLGUyRltGb24vRy5JW0dgRXk4a1JBfWJAT3pSQ1ErcSZIdU5UIk97Pls8dnRlalV9W3Nt'@;
put 'fSFWSis5RlAsLE1+YGFxeWA8VUwjIkR5QiVmcmhsX1QrLjNCWyx9eUZQYi9Lfms7ZWJCJikueXl6TGg4L2dpMlYsKmsuZnd0Q2VRI1BsNGdrSjt4KUNkNit0IWhOQy5hOXQiazMmIytiNT9BWF9AcEZCUGNye3cuLllheHJIM2QkbDxsVTY2Q3k2SFJseFJRc2pzUCIlTm9yXS9sQlcmbHRmNXhU'@;
put 'bCFrJExMRXVDVW46b18lQ0YwS2BSMUlRby45UDAzNlozdzVXWDEzSFEsZDs6XVs3K0Q7Q2s+JnA8cmdeQiF9fV0hS2JmMDsmamRBTXw1MEd3UDZhJVcsTT81Xkk1fHFmWS5fJTdUMH54MldWey5uano/OjA5SV42YD0uMzlkU3szM2k3az5AaTpHYGZ5PyJfOztTdns3UUpNQihULH1TYilLV2gp'@;
put 'SDBLaF9bSURDJlhvQzM1NnNndjZkU0EqSmtWI1l6JHgxJnN2NVkiUyFARSlFdG44TFszanNTM2cuTD9QaCFlRVp8K0Q7ViVnZDM3byg3RDlEPmJDeyVPcFVFR1ttdX56Ois2ST9wWWhoRHFtSj9ldEM6Rn44VDtzUk1NPyUmUlhbTCs2QE5FXUBra0UzdUomL2I0QGA/aHx6bzNAWXB4Y2J2TGku'@;
put 'NWJTe0NCQitedU1MZ0J4aiFGJElJWilwPTVGQzRpTF9YayErQyIlQjhKMkg1QGV8RjwxN19iMktFVVtMQFYrNm1OalBkbnFpYkw4enM2L1BfISxafnYwVU48XXxDTVBOP2RlNSRhaF92YUIrfmUwLlNKW2MySyNYWjkkT3ZTUW0lblpAb0ROMDBRODpzMTk9UUo8e2pdbUI4PUYjU25SJExqbEJX'@;
put 'TFhxPDx2YikhYnM7QiN9aEojPUNDS104W3lIY1h1YGwmc0hOMnU1U2VuUmAxdSU1Wj5QRFY+Ll5iPiZYNlUmLEp1fWp0cH10Im1AJH5XNTdzRS9kZkRdRHwlVilSdVBufW86OyEreUx7UyxeQEMpZCV9RSRaKzBOaEMxLDJ0UThJb3hQZ1o8MnwialQ0JTIrNk42d3JZZTg7ZXxnKnVNdkJmWDhA'@;
put 'aSNFSjt3ZjYlWHAzcGpUNVVSeUU0VCxGOWsrek11V1o4Sm9GMmRMaGk1MDNfMXVCN2BtPHljZ2NWJk1ZRn1vWWREOzA2W3p0P1YvXTU/STFtLGQ1KzcyU3BKQ1tjKmVMVmhafU5lfl9QWSFNSzRYPk11WVhGczFWTUZac15ETzE4U2g/UV1aezw+WEVyOH1QTXs8WzJ6aUZyQUVCdkNsSjFKZyYl'@;
put 'cFZdQ0s5ZmR1R3g3JnhGdFVJXkJLOXZYM3E4NndaPmQ1MWkrWEgiSXZ4Lk1BQT1bRUFrKVFEU0pDUi5rbylSQGhIZ2dZUXAhdV1xaW5MenZseG1SKUFBQUFBQUFBQUFBQUFiS01eXjIkS1ZRcTx4KTtTd0dLWWIwJFRFQ2dYdSopKnUma1VkcFUqOmYwbEc/UFo4Lih3fSx1PjkuMTVpMS9qPXBF'@;
put 'ZUsjfGEyckkuR2s9Rmg0aWUodlJiVT85MCUzVnNEcVZhTi4sVDhiOl9VbW8pLnZoSDVAX1h3Rl9fbG9EQkI6WD5jTyFGKGAwX2krdkM9OWBORGxeZ1YsNC9GezN1UTZDWzM0X3E3U1cxVlVhYmU0cm8/ayZUcGxbTGo7MXFZMXMuQy5tfS80RnBOKyFyTGRhUkt+NUlteERxN05YamxKNXs3YC5P'@;
put 'dVhATzxCXk13fEVTcTlHdXQwJVQ9SExJKCw7ZCJVcEMueE1hOVgqTylVdEdXP3Jqa3wze05Ed205eVskMnw+bj4xU2QvRHE1eU06Wj9lW2p3cnRMUT9nL1NVXU48Mz5xMnp7TT16VEhFTXRiLnJkWnVkWH5zfHc+WyYrQ2YxMXJ3VVgkXyxTKER6QSxbPntnUFM0LF1DRn5aUzwwMEJRNS5NS2s2'@;
put 'RmJVIl9QTj8/WG5aWzshfktLeXslLyE3M0ZIM05ue3ptVn1ady5PcGR0KGR+Zi9rIXEvW3V+fTlwVm19blp4Lk8ofDAkKnZPcnAkSWckZmZZQ2dZemB4YH56VytxMGVgMn5LNng6ZV8uMSlqUnx6ITtAbSlEOj8mYVtgXzFfOCN2Rz1WTSFhcVQmJFU0VSxQOnpTVEM6dCJoZk1WaSxTRGBUYV5N'@;
put 'ZiRBeTZPaCgqcXdLTiNIciF3PVBqd2xkTyNYR1BbNE1zdkZaS0ZuNCtpNl5SYk80QWRmY2kpQlhCJS5OTSFDPWhadyh0PzVddk0uK1BYKz1CaTFeL3gzfnJ2LFsxXnJnNl1fMnc0VWkjbn5EX3QyTld2ZzlEOEpXTzZnIzFTd1R4d2IoUTd9OEZ6ej9qKDRFKCRmWF1mbkNfdmB1TTU2d25YdjUo'@;
put 'JStVSzUjZzozPVJtejVGbHM9XUteTz1od3N+USVGe2JzSHwjWip0PCU7V3U/b3lkcEg6Vm57ZW0jWHxtfHc+PCUhYmFDOjc9P1N2THldUy8jSFJtUV4wbXNwZSUxS19pcEZqRl5tJip6QlpAZH5YInEheFYwaERTbW5LWytGOGVAOVc3Mz9nRCZ8WmBlYF1XSltwST83a20kR0gqbHZoIVFYVUQ9'@;
put 'VzR5TW4pQyw+aXd6VWd5VlFuekc9Q2FCPCEiUXxpUWo+I3tfN051UCRmK25lZkZgI3FBVmlsa1JDUjhJQjlYbCwoIUVJRUF1ck9YR0xoeFpaZlhQKjBLR1kpP2pvPWM2bGBhdUBXbzJ6ITlCNmlAM1JzUEhPKGVmI1pyeEFMcnNxYX5Yd1VKMzxrKjJRRmptPStuMmtQXThTPiphcWg3fDE5Xndy'@;
put 'OTAvI0gsejk5W0NoPFI8UGtDPy86d0ZFT3hVZU1CUHdraGZ9UzhETDBbdVkrRU90UGlwMy9CVCo9STtQT3N5PUhxaT5+RDpdNHJQNFdUQn19aml5Xi9TQ2lXe3s1fHBYUGxkTWRzMnBmaEt4dH5GO3lLQnpKM1BMekZYN2w/MlRVN00wImdgXTxqWlNmYXRTP3AiLFM6I2ppLGUkME8vVUFSej01'@;
put 'KU5SUmBhYm1xRG5nd0Y4dHw8Om85dGI1Ym15ZEk1NGdgNS8/MSl0bFBxTWQhemEiYjE1K1lNTURGP2JXZSMzVWZSbEFLWGtmWmpONVYqSz1lY0N6Qz1xfSVQIzg3KUt1K0lTe0ZrbjdjYjppSE1yY1d6XXtMWjVZRHMiRixLKDVdNn5WPyJfU21aWG9iKkJeNkVEN1FgV2VncEY9MDMjMTA5U2Zv'@;
put 'R2VNRW9majhpNChWSEQhd0l0TUE8QEdFQXd+IU5yL1M8ZF9ULzN7R08oO05XYUB2NVVGSV9XXldARjtOZ1RQRF0mR2dzI0w0UWo5V31KQEBfR3o7bVlyMEQrW29CT0NWPmJiYS5FL1c0elBjZiUuZCpoW3c1fVFAek17QHZdQVAjeyFkQ2FoXmZvPnVVbE87aGV3UXg0QmpYb11DbFJ0Xj49PjVU'@;
put 'LzBJdFJrPEp9QX08TElzc1E1XnwiZn5KUF56ZiRSLmcmTVp2LlVeS1Ihei5UUEJYMUpkb294dnxne15iUWU3QmN4LC8wV2EsLyZLR0dgS00zKyZLK2tYKVQ4fCs7ZHBfR3pDfEplMGNrNUN5cFo7TXtjMFVGJHxybF4reCFKJE5udUFIfWNYTWVSfTsiTzFnQiw2Yix8R2N0MDReNkQkcUN6cX5K'@;
put 'OVN+ZEY6NDs6YCNxeDUyOkpuWigpOFROcShdZnZyZyR3WnVmbkZpcExNeV0yaT8kMHNhNDo4SFFkLEQraXEsQHlwI2lxakt1K2oucmI5X1prKmIwQ1MyIkIiZ1BZTnZfcTMwb2l2TEhWL0x0M2FLcFUjUVVqeHQzKSt5QHxnZU0yRUhzY05GbldyNGJEa3IueC5qJXBFamdZVVlnYlBDNiZyZXg5'@;
put 'YUlfTW9OIjRbTWlaU2soJG4rSXpQd0t5NGdBTVVSJX56PSpCMzlmcEdjPCpwKEpMTEJle15LWWZAJCopR1NrcSRqa0IpOUBGSTI9JE9pMG9qITRgOHlYWSNgMGJzZnlPSWVYQzlvRHN2IzwqTHtfPzx5WGhDZkhaVihGe3g5K2FyJUNZU1tnPTN4SD55TGErd2dzOHVGNm41KSViIV48bFdQLCom'@;
put 'XylgLnRJI0RiJDJTU3JJdCZaV1MkXmh7alB5OSsiQGk6N3BMSmYqNUpoUjp+aiRUX25dWDxLRGFzUjxickptMXpiWVl0OjVfeyhKS2xUQU0iXjkuaE1sXmdbLkA7M2NmT3FPUkhYLEpFVWZCPyEmWUd+T1YmcmYsPWA5eFMoRW04NV43PD46LlFOQ2oiJCNgNnwzOE48amBZM1cjYTx0UGUlIV1u'@;
put 'eXhwaDQrbDpEKHU/VnclIklDeWQiQ1YsZXkreCRwVn1yQnV1Wih8TWQzOChtcFQwTj05VUNEeEx3YWFEX0pZNTByb0I2d29kKEF4V1FeMWxBPGAwYkwpKDAjTGRldFpeUDJmPUE6S2sudG9edz40P0RoP2ZdIXRmL0NnL0xdTjJkeXxBIjloQ3khWFMibk4+Tihub3s0MHVwQDQrbDFhRWswfHtY'@;
put 'N3h1SDpneWxSN0AoRmZ2VWJSZ0NJYENjUzptVTVeR2t4V21CSio7als0Y1Y/TDUvO0lmVndxOTtyYE9iQSY1akUqXW55OGB+IzxfYz9SRHZnLFFnKUU8cHg0enNAOVtNbG8+bGFbeTtdXipPayRHcjBDfW09UyFzJV5kLDU+XTRfLitvZUgmKjxuS0k7Jik6PXVzMkxxRERifHsycGdsNmZAan5E'@;
put 'RVs8cnVqNE8xKUVGW0Zee3pNdGBGYihjU1VnUH0ybUxpclBadyYqNzhyaWhuVXxKIyVtWHdTdjdDQTBhbixnTTR6S0pKPUxZPDhaU2J1T31VOnFoRjZGbFJZckVYYF91KCUpXUFxK08jSCg2Pl9fd3xpfFk2Sn5sU1tsRDJGaHZJRmEmZ2ckYzNealhKbU9bbzhmX0J9b1ZGQFB0RywjPWVkZDpT'@;
put 'XW1LIyhvMj96Vl1LTiV7THgse1Rhd31oR2c6K2VSUGc/OjhAVz4oSD59cW50elF3YVZqZnUsYCE/e3tQLyIjZEFzXVgqPWxydk1tODxzW0FyfWF0V3w3aF1aMnFCJUNDa3ksNTlTOTFjPUciVSIyRlM2WXJJMHAsS0RwbHFDeGBvNjl7IW1+VjxPQ1FSaz5CQFUjVnMwOEo2UmR4QywvUjcpS3ln'@;
put 'RHw1YjUsU2leVGNCQTZTITBTRXIiLmV0d2YjIT5WWkZibS5+a0V+YSwlcS5DUkohRT9hdTVIaClBNyM7JiphJnNPeEcpV1suZXU+TiIsdnIpOGQ9eTBOOnAvZ0VrL2MwTjtqZSw/TjEzPHlnfjQ3PFJoI1lrWSp0Q1ptcj9QbURNbm1KIldAOC9HKi5nRiNRTlNlfSpBSWt7Sl1GXm16NHpJX1JZ'@;
put 'MixYSWhqdDd1WmE+YmFqZiR0I0wvPk1zOStWcHY/JCFYQmF0XSsmNlFrY3hSKkpiN1oyISxiR19gQDx5THxTcyFfMk5wRzdLXXtYfiJ1TGJFaXdwc2QlZCVYQzRHNF1qSmxWZyUjNEQzZnBVaFBdMjkrcHspPU4xRH1VRjBhNThjVj12REwzPllFemp1ZF46Q04sODI9OGYxOlFAZGx2UEFTOEsm'@;
put 'RDspU3RMXitIYz1ITTZ+Rztad2ZjKSIxTVBwZWJwb1RWLFEwW3olZGlRcklaeXo3W2tCYG1yTmldRCNTbltKdltWMHIyPl9SQFYvJDQjbWF2OTVTOHd5NihLIjpZRD0sLjBxRXFzT0hpQzcsVH4pN0FjbFRoPEZDS05QX1JPYWFLfik8KmxUPjVkVHxELEkhKF9DbWgmaiZabDBUW0s3b0A8XTBG'@;
put 'eFNId1BWYzU+RkIqdXwlaypoP1RgV3RFUWZ7fkBaZmllYzVGbXldW3Y1UiopJmI4Q3xFSSo9PVptWXZzSFFwLDVCfilueT5gLHgoZlBZc3Y4WDl+ZHJbPTEuP30sMWl2Kj8qJClYX1tdMXhIekRUejR6KksqXnRlRXpGXn0mV1pAK1tORjs8RX1QJUoyQnR7WVpGTlpePTp3Wi93fi50T2csNVlU'@;
put 'JjU1IXpPbS9SSDwleXtJb0t2LClCTFpFVGU+TWJwbDBuYnN6cCY2XWVDemEzV3NKKkRfOGAwIndCeXpLfSMjdTlfU2IuXl9FUHJZQlhSSyo4P2dNTVFPdihlQCRvMm0jSytIIzVkTmBlPWxkTHBIPlpXczhVNiZnRztSSTI0ay8meiUvZEByd0JHbkBjLz1wRkM/XypXKCNZPDFRdGN7dCkvdTMm'@;
put 'P2Y+Mk8ra0deYm9gYXgpTUxLUzJaK1VJfmtFeG5kbTE3UlQkUF5JMCVJVVZDbltDUnUwOixrPDt3VEJWUGtJclE1cUxyTnRmN2hVIi9KJVNPQ2gwcCg3alRJdGFUTio+aiEzOzV7RS9TQ1opNXZkYFZ6LFQ+fiNTQE5HdDxHdyJaTEV9WlNaaVtFXllUMXt1W0QxKFMhKzMxKXBDZFdwb1VJUF0j'@;
put 'RF9JT11DVTJWKGdsMGV4XkFnO1FtSWQye0dgcF1pOStpQUFiblgvZVdOSyQ0PTx8OileXSNAITtMVUFURC5GbXBua1VQWWZOYCw3PVhxcjRTVHJ9O3dNYHFVajE8Mn1wUmx+bTVIcmxkXTlYOCUiQCl6VH5GfSxsVE5XNCtbInF1a101d3pdTypxdHQ0LmRZbChjLiNfWUBbRyFmJnZaQStFTD4k'@;
put 'WmYvKShjb3gzUl1rYXgrWHNyaTUxMU4zbzw5OFAlLmpNV0dqT21jYlteJH4sKl9EMSFufX1FK31MaWszQyU1ZjdoSHg6Omt5MGJMLiNtOX5lSjU0Wzs6W0BILnBWeyRidVF+bXV7ZVROdiZaNVNIaH03WnY7UTYveH5ndW1uLGhZME8zaUYzV2RATTpQbFYoL3xtXTo8YW16WDhGTXNxSXs7KWxZ'@;
put 'Xzw+QjcyOjsiUCZ2fSNxNmpVaj5lfHF0NXtlUCxTOT1kaFF6bkk6TSpPT2BuSjdxfm5dVUx7TERtY3Y0Iy9Ec2RwSEhlR0l1VEBsMkJKdHFqc2I9WFhteCxnKmVwWncxNzBYO20kPltjfj5hLGEmaCFFNkhoNltya019aUlne3kmRG1eTCs2Q2B2JUJuXXJ+ZkNbNz1bWFdUaERkSHp+a1JEdTos'@;
put 'QC88WTVvYElbJWpBdykhejQzMjoqZDBZdXZOWGdKUyE+UjB1cmNQUmo1KWtqX1RgUHtQUTtma0NmUz5tLyYkIWZbT2dCWjNBNTJFITwuVXB6PFZCR2QyZjYxdmsrMkVeaUJlZWxFQzZ9JEFXaDRTQXZRXnhadiR1PSY4cjMiQlAiM25+ZntIbjZXJmlVdHRWOytfRzNqdkBEMSFsRHh8U0kzWjY1'@;
put 'ajp0U3IlXmlBTHk0TDVAentJVmFmVkFyOGl2a19lfW9UcTF6R2IzNXNjR11zelBFUkpEdkFAO3RePWVHNTtlTElbaS5jQHtRYCFUR1B9XlJGb0NOUkhlJUNPYmJKb3UmNSwwPyMiRSQ5S19OOWomYlpWRUJgZXg2dHNDfkVxOk01Kj89cGElRHpiVkJLJDJNQVZtT0s+ZFU8U3pXNWNeWFdvL1hr'@;
put 'JS5oTX43On1uQWpHOHEzcVluMGlPV1VjSWMiK2ReSVRPTWY0dHYleVJzJk0iQX5QWmFve0RgXVUqXVNhTzJUV2hCM3kvWkFDJHdeeVJ7bzVZP2B6RDJZSUhCR20lN0VkLyxDcCFOaVVabVl3RyQoQkkuKEt9KWYhfCUkbzcoWTNKRCEzTmA8KFJpNDslRWVzV1B4c290STpvKmNmTmVFNSUwQkhq'@;
put 'T0k0SUR2SW8oNTc0Xyw8QGVGfnt9I0Y4SmB+Y3lBJmdMQEdmcFhDeXkjUkJ7NXRYXUd1ITA8IWNXUW1sKVQ3T1I7eDN8UnthMT98ZGx7VFZmZjNzek4+e3ZraSUjTHVTNHN3WTheaV9IUlhqcW5mT0Fke0ZTMG1VNjd7T3RyKzxYMj4ybHZvSz9Nd3gqU3c7Yld7UClISTJqVz9GYllSIjQ4c25i'@;
put 'dEddT3J7NypvfktyWGpxW21OKnRteTJgQ1RleVpRP2csaS9dYl92PyliOGBQSC4kMjNbbkVnJnIucDBVdW8veyspX3dDelBlOClYP3lhe0J+MGpkN1p1X2pnWG1SIzZXRV5zN2E8VFFkLjRpK1lVaXx4UEhCKiFUPFJkQTJzeX41dlhLQX16IT9pQEVHeVNuR19pYEpCK35tNkpYcDx0LjN6cTt1'@;
put 'WD9UITZwMG4uVi9+YSZLdWRIal01MmZoJX1qM1h+ZDwqbWA/IVFMTTNbclBBSWBGREdSYCtYPjYiPl5FaFV3PTgmWmJWZUViPlczXT1IQD5fV3U4OnAySVNhNyNxQ317UDd4fFcvV3dLdnpuMFBPKWxDWkddU2N7Pj8jSnludUhtUn5GdEtBK1AvXXtmeDhaU3lsOV9ieU1GdUohTldjeElLOXxD'@;
put 'ejUpYnd2ajY9V3xpKiMkbj94Q3orfjBgXS53PiphJFFqSSYjODJiR3xuWiN0I1hzQS9GWlRwWEhLbnc8fGBFZGptUSxxY2xndGg0OGpEV2FTaVhac1M1Mn5jN2lCaFR2UDlRUnRRa3lzXyk+JktkUSkodEt1Xj8+NjhJPCEjM3NPXUZrVFNNVy5kfDk4OmI5ZTEvNVJ3Pnl3dExSSGdMdzdeQkle'@;
put 'KyJKMCFYMXNfJndmZis9WEV+UTVROn4rMjtQI2gxcmFJOzY/di9idV0uQkUqe1dPe2ZXdUR3Z0h3WncqKEw1RW06KWt7bWUqbDFYWGcpZlo2PnJ6fClaKnxYa14+QVVjM3VlTWRTNj85PGF1dzxnbXtqfGM7MWMvVTdZdE9qZ2pyfiVUbi9FSTt4JVpiaXIkQCkjL1VOKHomKn1lbix0Rz5LR2Vj'@;
put 'K1UuLCZ5X1omV2txTl5wcU1TTj5jPi9RbzlsaHMpLyFZKj93RHRiczlsU1omYj8oWk9Vdm9RPTwwKGM/ME9TIXp8dl1zX2R+cit5KTpAb3c5a353VWg7dlkkeVs9JnJvNChvPWZSV1JyRHYiKHU1JCNNP0dPTjdYW1hNLHo8I2Y1ZEU2bEt0dV5SZ2QkI3FLeGoyZ2JbUCJGeDhlXitbMy9CP0h0'@;
put 'NFkoPiN+UUlbUjB0YU1WU3VwbTQ4SFheOyEpZUZCNDtuVW9wJF1hTntjcldSe0wlKDMmM0ZsW25kamd3NXc+M0dlYSVjfEo3bi9+ZHBbOTw6Oz4sWGt6bjIuT2k4XzB2MzVyWkcyZU07ciIldU0+LzdLRC9PS2t4WUJMOFIoTT9GNn1BZTIjPldYIyheN3o3IyomNXxhXl89NUFMTCVCZHtSLng5'@;
put 'dm18OkhAJWQmakNLaktPdnRuaEsjIzJaYDFhfHtbL1ZMQ0VuVEMhZSh5LEh5a1VaRDM3fUM2VzpHblgzLjpTazVHVEQ3NFJPV2tQV083WHZqN1pRUDBGJTBSREdSeF5LW2wkeXNFZTEqOU0ldDo1WUcmdit5fWBlOl1qU3pUM2FuJFtQSGU5aigrLC8ubGZ4VkhPOTtSIWVQcFNNOHVbNVRmdXtK'@;
put 'X0JSUHBPdWF9eVclLkdRMmdZQ3Q+YUVuTGdIM2NLQTNYXVZDYzEhY3QrWDFmfSRKITV1VDE2SHFlTzxzYHw2dXxJbDsjPHxxbzNFRU9bZEZAQjpxYyh8OGwlcjklR3dOJDlGRzlsX2BjMkt2OTJoUEl2TUlLOFlaW3NnPFkhO09sRTRvend+P3JfdztRZVVKT0tOfV0pcX4reCsiOUdYOnkjWF5m'@;
put 'QjJjPEcucHJfY2dpW0A7K3xdJi9oeGZpWVNrbE5PX1Esb0xmNSI+YStYfSxOM2dqY0kmNlhWZHlCLFY+TVJ5d3ksdnY3bEdYTzc4e2E1RWx4SyIuSipWNCt7aCswdTAjKmVMdChzYD4pUGRvZkhsODQ2WVgoVTh+VFIoZXxVO1kocVdNeHYubW1IXU1zI1ksZCVucXQ0KjZlVzRuRzJMOz42blBx'@;
put 'ZGVfLHdnYEl1S2M1U0dPYjZKNC9zMnxMUXdAVXBxfXh9ZVVSYVE6d3hpKD0/QXhiSSFWYnp4W1JtPkNDbGs4UUZoUiU7ezAsMXY+QF9lWFVhPTR1UWR1Qm9FKkRiSFFfYGhdbl1ReWBLbTQ0PktmcDxUSW5lTXpeZzoyNDFETyF8OmptWmBpRU42Kn10Uy84JWl+NEZqMkAvZmp5UjIkPixGXnUx'@;
put 'TDxCNVt7Riw6a2M2WHUqWVMkIixPYkNsMkAuREMhPj53U0ltTTFmdHA4Uz98SktfKkdRKVZuWDNvJis1ZllPbCYpZXhJWCpSc15OJXZnMV9CV0t8ekxxRkJySGcrb2EwSDhJYWw3KlhCNi9NXXcldXt5RldtZTR0d0ZMS2t6WChtSHNEdXJzWiFOOD5lIyY8dHtXSF4ibm90VVJRemhVVlVnUVpg'@;
put 'VjtPPT5uQz9GYnpCWTVVLzk4dyxfNC9ZVEZCSCFabGNNRExLKXg5OFd4ekxOLCRjV3ZLelYwVTtZXTNqVGE0ZlhZfixufi9pd2QxNVMjOFZ4cixKRT5TXk4rMkg9fHlwImpfJSFyUjBDUHw1fGlAZUxdW2ExWS5gOjUycGJpRWpfZkAyQGFRTn52QyRKWG5xQio1JTVtKXJab2JxMGldQXBrVVNa'@;
put 'cyhBNHRwZ2V9NkxtVjg+eWpQTzozRjM0aTB9Lzc0SC4qcU5dVmxSZ3xWXmhOaCQvcWArKnRWNy5xV1FkWClXSC49c1o4dz9WPWtbSVVKI2MjOEwiYn5YYU9+KXJCRy5JUFJ0aSolRzAkL2FHU3kjP2piezgmLlZ4NjFtLk1JSUU0RSNeMTozZy9LMTZ6cURtPEFII048TDRBUTh3fXAyQSVUQ35f'@;
put 'KmZ0QyImbEhWbXtkRiM2Wll8NmJAb2EqeWIlZVplPW5GfHRxalp2ez5EYU1UcWgwMms2YTU5R3dnSitdenRWQzI3bzZdRXIhYDhhYmYwQ3hQSFhidFhDaWZWZk0rbj9ZJGZFN1BLZF1UWipLTiY1P3h6Ki5pUD4sbChiKiQqKyxOdUVMOzlvQlNdQURzbmpYanN7N0xua2Rre0JRb0R7TUdLKVNV'@;
put 'Mi5KKzYiNTZhOiYoNF9TJGI2QXM/TXtYSCxISWgmfEc0a2NdSTBEKk9UaW80bloxRmpRK2k9Wy5Hd2tSVmEpKmwiczVjWFpUdjFFRn4rWVJadWJiQmFkeF9JejtHPyVvVnJxXVp0UE0rTTgrST5ZIksqW2ooM1doNDtgZG5afV9tViNjM31SeUomZD5tZ1JteHg/SyFIKVg4Onlke3tjaTV3ak1l'@;
put 'ODt+UmNxPER8cSxpQE95aGtlZzI2Vm5BUG14aCxpfURUIi4pdHQ7dnIkakRkRSh4N0dNMVYqWVleXUlCYF8wMDcpNV80VC4/P1dAcmx6MGgyWk5kRzImXkhCanY/S0EufnJ4MyVvKykjPXUqRno2bjteZ2A1UiRDezp6aVFgQHEuKV02PGJaI2Z9U0o9cXFoRj08MjFHIVBxdFMsVkRZSVd2aiZ9'@;
put 'Ql50QUFhcT8jXWAzND9vREIudS9iKngpX2RPazNOSyJlVWs9NClhVGZpYnVHVD0/ZmVnXUddYkk0MDxPYSJ8OU1xIilQcGh8KShwcGVtSV5NeTlxTCVxcEpUWlV2e04xQFY6dy8vYGI7el86SzRIMT93OnRvP3BoLzk7ZiolSTh0MXBpMjNXeS9RTDVMU0ZPc3YlXTMuazQ6QXB8fVFNTFROZDxD'@;
put 'MT9sN3RDKnlEOWxiVl0qZX5ASzBsaVZFNyRKR0dsJiM1ZnRzMUJUYGxTYyVFd0Z4KDJeSzUsWjYzVCRwWTl7ZWE8N3o9O1U1QWcjQFAmNXcvUk5mb0JWaFFzWllGcTEzbjUpdj1MPkEjUzl+UCJjcEU9YTQxWS8iQ1VNOXRVaFlfd2NTN0VORzBuLGlmRHQxZXF3e2Vmcj0mZllmWFZga3c/OV45'@;
put 'KiV8Ql57UGY6dSRqLlhpUTMpYXNVR2tqSVR3UHxaKWQlKF41PGB1SV9rKHU1eE1haVomQCE6W1ovbXN0bkRvSHhweWFxREBNNlYzMzRpTU05PyhgLFtHPHMkLEw1a2Q5MF85fXIoT2Z9UEchMz1LZWRsPlpFbj4sVkt4JnZDLFdXTkxvRDJNZnYqVG45ekhFVSxhel0xZTkoRG0wQz05cGFdeCJS'@;
put 'KSlZaiN1P0dYcCkqVk1PSE1gMmdnSzJaTmR5fls1cWZuYkI3cENddlBIXixgZSgpRWRBNWZKMU1eWnBWfURZIndxRDVbWTtJTEdtUE9sQ313Png2cXAiVzZWJEZVK2siSkNgZC5gPmdrUltjMyRFJXN0KTNOTi5+O1h+SD9hRll4ZmZOaExfQl9ZNmUlKFdJKldHblFjUWt6L3FtYDNAM2hDe3h+'@;
put 'ekspZVJ+cUxZUjwzNy5WUFJoVlFjRSRDeU4wQlJqb3xCT205SGtAXjAqfkxtPkB8d1M6ITJ3JUE2RGVjTyMhR1MyVGBXeV51KjokJUZOWnlHYHNgREtsNlZjViZNTypAZ0FUMiRdMkIzK2FYIVBFKjMvYXJWPEhJWGovKl05fjokKiRSTlJhXjQ0fHpWZ2VfWSlsUEY4aTV6SlJ7NHpgNURhOHNs'@;
put 'WEwyaGc3bmwvPjtxSHJgRyMjJFd8fUNKc0Rsb3hOL0pyUSIrbWk5bnRwW2ohM2JYb1tpRn5UT2k5Y3tQc29hfUBHVls3Pk9MWz1vcit2NG44VUJqSiEvQyZIam44WCM7d0w0Ok0peUZIVEM5L0UkdTpMb05GTkFWP08lRillTklkY35ePFpNIW9fJWI8KEU/ZColelBrInZ9d35BY2F9Y28pSUs4'@;
put 'NC99I0NdSDNySyk7YGcmRWZtXV96L3xTJUJQRkB6akR0SVguflEwNzNeOTB9eUNtPHhlOGRTPlEvVlNnXks2UVt7eXxRKTwqPTtGVkJuQkQ6XlldfSEoSkpnJlEuTEtjSlRUNyUjSUNXKyUiZE06N1o3fjold2tOVlNzNUYqUTM+QXhpNSlYZUBOTyw8bGBrbmM0RHlHaD97V1d2S0dRV0NYeDdp'@;
put 'ZCx3IypaNk8wLyNiLnNVXzciOSVVeClFMW54b25DS21fK3smTmddYjw1aWwsNXIhOUlMMGVDT2A7d19USTZHYzghfV9HPGEib3VbX1R9VCNAXXh1W0lANUhzZG5ZVX1IX0VibCgzOjExNm5tUGpQJVklMGVBLjV4KFRVLm0xIXRjRkdhcms1fl9GNkNebFU8cmIhWHRfNGp1S3FVeEoxZlJWQX45'@;
put 'TlVCM0Z2P2l1PH5nVC9INSNOLmNUYnU6OEJyUSM3IWJxdmh5ZW0zc2NES0QuQzErKVAqcTRMLmJ5aGkpYGFaYV9DY052YUBgd00qZXwxUkkhWm9uJSVzNyFLcVMuSC4uTj8mK0Q2Pix1U21NMjQ5XUpWLCpbfEtwQmp0Zng4WXo5Y3FDaiVEInJPUUZ3fWdVQiQoR3JvaG9hcEwvWyozeS57RF9W'@;
put 'OVpYM3VXRUgjOH5id0wsSGF6Rk0lVzZqL2NSQk82IntgOjFAMis2M31LekVmTHNXTz85cj5uR1J4WCMyKDE6WFVnc09sRmxYUHlRbVo+TVUwM0lXaTFKMFdZM0F2cFt1InhIV0B6azFqTCRERipnaiVJSkZkckZEQVp3djBbelMqUlc9K0ZXe211L2dYWylqZk4iUUk4emBwaTB+IiIvVXtpQVYv'@;
put 'akdXO3lFeX1IcGlWcCtaUTIiQGhZcFJZJWErPWN4MEBOSFUoOXArUCZRS0hmRFNAPi5VLF9pdjNPZEQxMGRsNVM8SU4jZ3c5d0Ivc2JKKksvLks4VTE3JkB5WVl7Z01vUkZLW1RXRkw7YVJwMVpsXkVNfDJSOXp2YiZtRyZpOyphTkgman1XP1c0bV03ZD09O3NmRjF7NXxFOy96alRbJHE5dUVu'@;
put 'KiF3Q3Q2NzlNU1paYX18emtMRFIqN0daQzJ5WTZaLi9VQ1RvME90ajMrWntSbWpKeE01JCgjVUZdNjNiJDA2bCMvb2RZblpiXz4+TT5EZnZAVSNbbEE/dk1UdihBZCYjISt4fH5KPTwlTnJzInZtY1FAbzM2e1FLPUZUOE45en1rfUVrdUd+PmtZb1Uhfis5cGNNRE9NT302WXo6cD5UeW9ySTlW'@;
put 'UkdMKkxTfjFWQn1bRGs0eF44KTdwc04hSSpLRVAmLmkhUEZ3XWlxRVIjdy42JHR3cHB3OykjQ2l1S1M9eldVVkJMOmBhNj1UcXtVVnlGSWxpPHBkTF1UT184fVk+XWJiR3BGe29JX2dAKzBONDtLPjk9eEdhXmR+fixfMV9ZKjchL3huWV1vMFY3XjFtVU8iUjgzejZmY0opUVcpZUduYDdpMGY6'@;
put 'cXIkTVZnQW1MVDJ1RHVTdzpRUGxrUkNiMCNrVUJmODcmTzhoVmpuTWk3RUIjI3g8JU0xRDUzaXpQVW15cS5rdG1Bc05Fdnhmd2oqKzhhJEVbRyI0P2RPITR9ckwrUUhiKnRjMiUpVkp7WmtqSSMzeUU7d35GN1tobmxPTE1VZnhKaDBmJVRDYnZDImFSSik8bWpANTV5RCFSMFpYKjFWUkI/NzNf'@;
put 'T0gxSmx8aU1Ifk8wKS4+RzJCYVY2RG5JX0hrVjt1eH1rWXpOYzZdUmZoXjdJSl1eWVNVSlRfbFNhY0xpM3w4YWssUUhhdW48YmdKRkJPVChTRDJvLEAkK01Xdkg2WzFvYTR9YWI5NzVHSjA2TCZgRngzL15HW2JgYkwsIzJ8YUx8RXwwbTpzMShDLHdKYVZLVDlOQUg8My9MMWglI0hKNS5YP1NH'@;
put 'UWRHbHhuRy5hXmk8PGk/aSlZIiJSa0lqVmNMMCJMQ1JWT205c1I8aTNDUmAjXSw8Wy4jImNoPT1CR3E/V11xNytZcltCUSp8Unk/T3M0QjZjdCVnSmtbLiVBZzpIYGRWU1opcn5GXz46WFUuc2NVPSZdO3M2WTVOOXM6eVY7OlQ6STxkR1NjaUo+QkRdRS9lPj4iajVqfUk/c0ZOZGR6NmVjSF01'@;
put 'aFJMTnhyKFJKNDtfWlN8QXdTWEBeIiJON0grY1VlNVRpVzB5SVZLLmBjciNDJDosQjwvKHBqVzp1Wk1eYTVuQEF1K3FrQCNrS306aUZqe09iZG5eMik9TSJ5K2lFRl9HW3x9ZF9GPE9LQnVbL2t6M0xnKlV4VEtAOXNSPC8zTSoxNzVHUmhVP15gSWV1SHVFNHRQMXg4MzlxS11NZXh0WExDPnFa'@;
put 'dlpWcWJdZF1NYWpZV0N1RT1aWDt9IUkwLFB4IiM7LzJDdTkwKXE9PzEuMlEuZDVfJXVeTEdObSNvZXRWejE8bkg8T3thN2p7YnQreU5jIkJ4bnlSckFbK100SUheY3M4TSFsVStSMyx0bzk6OmdMZC8vaTh0Nm4wJWlLOlVWLjpnVllHc2V8dDwpQGsjQ355dj1efGg0Ujh1dDl0SVd5QypkS3h+'@;
put 'aG98UzA/PWVULiF7UEUwWCgrYSRgfDghK21WSXVmR280VmA8Z1dpcip6d0V1ck94TyspWj0pdXU4eCVxRWkzZW5KOXZLLGo5Wl10RU1MI01CI3x7dDtaUEQ4ZDo7Ny53KDZ+TilqXi9geiIoKjpCcDIxVWUwNDNWOXY6ekJ0TWg1QExpMG03bV4ybmpiQyooPVg1V0teRzo3cCNpekJBfWJbYTVW'@;
put 'X1YydSt4Z0xtJFJhPDU2Py89PF5sWFdIKGFJcSQ4cE95dWwsSlJ6JXZaIXVzcihxc3tPNShCTyRnOiNwcnomOzJgU1JxL1VIXVJjTW92VTFMdEY5R3NKTnRIYyM3UWhCYm98XU13TndJbzpuVVVeWk41VXlDOF9IZWFhaSs/WDM0KUBEY1R1QCx1dDxBOHt4TmVwKHpqKlI1ZF9SZ2t3K2B3NSp9'@;
put 'elJ1IU55ajJSQm5+MExgWmlVfWFsJU1RXUlbQEJ5fjhFcCFVcnRrcWtIXjtvcVg0KUZ7PXosWkpSLm57UnxCUkEwP1c7dyQ0M2NFSVJBYF58XjF9ayNAazZ7R0R7e2pVM1hhJGlxJCN0R3cwZDwsLkRJI2NqeUwrUXdzbCJ7QH06RVB2JTZkZEcyUj9NdXQ1IVl3Yl04WHQucThwNlJ6RFI5XzQ3'@;
put 'Kml0WW1wN241MyNgSDtaRCZKdjRaUTdiVS5mfmUqNyo+NSEmNWNWR0JVfCM7P3VXJS46d2NAYyFDPERVPEs6Z3t6KytbOGtkPUcuKSFCZHdTdyNSVztJKHZQT1lbLn0zJX01KDdjYjVBUkN+c0k/cCtWS2tMLHdEPzB+VC5kRWNhbStlVVE+JVV6eCpCVV1ORDVfQ0hwUWVvVCpPSClVZjkxIzVU'@;
put 'fGw7cCZSKSVtJUs9N0c6QFBYLmt+eHczPzRdeD9ecj1eZ1doYVc8KDlCVkA4XitoZWFXUVJkaytEI29FN1VofF5QWWd2QXk1P2lkNXBsTDl5T28+Z0VpKVV6MUBjSGwpcXRON2d5V2hWU0c9YWpvJiswUGN6KyQjSWVieGNIfCN9Y2plPDFlaDNYUGE1Kn5UXjlxKEMlLF9jNzhkc1tDRHNYa0FP'@;
put 'JkZtbXlASCVqSVhxcT8qdzQkXTtgL0gwYUF0dn5XNUU8KEhhW0dRQG1RMGMxJSVOb0lhTkdLJUBdSnZFOVVGOitwJXQ1VHxkcDlOQlJ8OkJMVl0hUzohfSVDbDJZfGIjN0JPOXZBIXwwI3MjeX1vZilrZjhQUEdwVzJEN15mfiZadlNkcndbZnBbOmNOa0JpJVlicHdwOGZhUzpVM35TM05weSw2'@;
put 'YX14TipjOShYXSUkUS4+cHE4XzM2bnt7Ojs3VGJncygrc1hQZiFodXhoZG0ocWZMbkMlcVpwXzk2M1o1QE1MYT4pd0F1STdmcCpQJkJMWjRJNDYhTEdMfFk+Lm97fGZEXWNqKmpqY2cocTRQajl2PCFgMSJRcyZLaVlHNmsoQUJnMiFvKDMoS1gmLk8yNUJCajtHRUNOdjBlUihOeDxUSmRJc2RG'@;
put 'ekI/T2xaLGVjQH4uRHNfKiNgO2pOfn1NW1FhRXRwL0Rbdn0lflFJeUlmVTNGQlRRbCozNG92PDFqZFF1KHReT2olWWVRQzhlIihTfnZLPkpzI290N3AqbUhJPGddPiwxOU9HSztfc0dlVkMwKjVtWXF9KG9afGVEcV0kMyU7dig6WD5sPmUraS4rZ35FTjx4RzxMY2xybFkzQ1k2TzQzcyZTZFNs'@;
put 'Zz5HeyxFPVJiTDZSXkZnYHNMKl1BTCZkZW59Ml1+OU1fYkhoUE51KXJEI3VSVXNsVk5DZihUa2hvKCNOMGVfV3xpLGdLJHtGIUtEYHJAXTZ9bGhyUHQ2JlRDaVk5Y045Uns6W11FJD0jOWxfPGt7S0IqMi53cSRvPmJaZWxsR14vW2Y+UmAyejpEJn5MRTtlRmtDPTxXaTopdFtFRFolNndScnQh'@;
put 'MFM4NUhacGJBb3JhIVAqX3pEOkt+Z086N1I4XjtNNXplO1JYOzRmLHUuW3N3emh6fXh3ITB1ZT1LWDgwTnwoUlBDb2ImbzpVe3NzKiUmMF8zPiJdOVk+bD16NmgjcSVVOGc1dXc5bGBoZF8kTl8uSUJxMkp9N1V1Rmgjan1wJG0/QWoxYFBZYjlGe3dVTV15bHQkZDYxTT9QYm9kWXloVW8zNyVP'@;
put 'JTJnLis2QmtTJVt+bnNYa3lxNywsWmpGQVFwM11DI2xsOmN0dk4yeUB3ZXpYeFBGJGFuKlNkfVp2fk9UKSIvfnV9QC4wP1g2a2tDS3QkVH09IilVMHZHUz8uZilSLygibz1dUFlJNWlvYUNwOE03RDFxPXBfdVFBS1VlZ11gMnBGYVl6dnpuPmFoZ1tiQmh4QjdERV14KiFUVmA0RFRmSCtCZyVk'@;
put 'VjB0M2pMWlhySDA1UnddXjNiLiFlVVdbcUduenkjPFh3WjJZVCgvUTxBRl9uOWIpfWNLJnhvdWd5fn50U0txcm9IJntyOT05MzRielA7JUVjL2tDPDMxPSp4dnwiKE5tKDRxdGlCdGAhWmlsdCtTImt7NnJfMWRxfThDTiMvLlZ7Q3hIZVRUV3ttbTU6dzNaLGlYS1UlPytre1JPWEt3NXN+RF9Y'@;
put 'dXFmSWwvMykwfnd1cUNaRCFKSjRnNlZPMDU6cWlwUml6NyQiVXVvXndCaz9rZj19XUBoJE1xPiRaeCR9fWpaVTlrPUU5T0V0VTgxP3xaW1Jvc3xULEo0YUQpZntyM19wKE08Ni9TZTV1LGIsOzQwb0UyQjJxbyohfkN+WHg3ZileMzE4PGl7ajhfNFI3KytwP1VLfnhOXlFpVjRLUDwwYTIrfn0l'@;
put 'd15FQ1U0ayQxe15qcVhKMCpnaVNVRnIqczJZX292WHVoJXBxMGkjZVEuaWFiPV8sN34+anthLCRLaGxmJjA9bzE9cTxbUSEmREIlcF1GZjkoP3FWIWYxI2UsQnQ0b05tYT9GNilPQSVqVExqIzxLfkhKL2pySGtRcSxNK3M3KWlyYVRMVGRgXm91ISFBKzBWbWRpQUtic0tFVyw0dStxXWp0NnBb'@;
put 'SSNwW14mXjZSQlBOMHFbKURTbV5VVktbUUBGc3w7InJCQD5JZmQ3RzBEfl5tfShDJHdVcXVoIXB5dTBSY219cTVRa3B9PkdMZlBPRD4uVGJ5YUsxVVNCSEs9TnlEUGkrMWgleGJHaD9CeWB9PW9UMDZZNntYb3tBZjFwYSN6LiViLG1tUm1iN1goIWcqRStoUEJuc1M0dy53UXxJOmBAJEZxOlhM'@;
put 'MigpPCgoIj1LL2JdT0hKNipHP1J0JmhYRiRUWWgzbSY5fUZUK3xsRHJufj5WUXNJT2AoWG49QXZMKlhSaCJKMEg9TTlSRm9pazV1N3VDYkttbyIpRDAsd3ZQbE19ZUZaRHlrQDEoSmcxKEZuOml4SFZ+X1AqWUh5YlZ7fVUrJU06V09oL3Vnc3tEfl1reWBVMDg9RkZOcDcmfiR9L3VsNCUjJXVi'@;
put 'fiUmby9XNHw0fTdRdS87fUB3Y1Y4X2BPITxHPkJHdSNDaEJFYTBzSlhgTX5xfGAreDZHNkRPQU8pQW5icThQc0sxblZBJHBFbnI5aDlPKUIkcil3LH5SWCNFSFQzPzA9N30vXldRNiZGQUI6NDQoPFs0dSEvZFZ1aFsqaHIydWw0em1nRHl5fTxEbiQ/JlApb016KF8+eiVJITx9NWVfTjtlJTRz'@;
put 'bU9YXXF0SHFhWjFtdTwlQ3BacHBZSzsrYipwe00yQVE2fWMrOl5bR01qdFoxXT9kUWxvMVpsYCt7JkZjZG4sKCJxdW5RZF41VlNIeyo3O2h0OTlOXiRtL1tlPCg1ck4sdn01fi5VYiZJUk1vfVpSVD1Ndm1MWCswRj4ib10vUzk/RiZSPl5TbWI2ekl7OH54IV5IR01TfnhtdzsqJEIvciokXy89'@;
put 'X2pvSGdhV3xrdFB3TjYzUzc0OzJnTEJSNy9kYVNvVip9aF5MY0EpVnBtO2guZnw/ZGgsJHRIcmgxZFckX0VPIWcrX0V8NlNUZ3VqbH5ua3Jod05+WkdlbzdWWlUqXVFZInF9Y25OeVl+TEMxJXQ8OEp6PXJVMmMmJktbdjVOLHdrYHV3QyJYeTJeP2A1SCojLFJKVERKUFRHUE96NCQ1L3JaWT1d'@;
put 'Sl4mVm9ZJj0/Zl9zcmdPfiFuMSVTJWJxez43c0pEc1Ekcj1jaVc8K3U0UnB3I0IvWXhrUHZPMXorKSNFVGZFMFNBIUcjLlBeMTpFPFJWM3YhZV1+N1kpRkQrV1hOVFtbYkEzTFImLHNfMFs6RG1UXnBwRENfd0xtO3AsNmRyTFMpKTB9Sk5eRHs4UCUySXtYIz5fLyR3Nm5fTXlHMS5eW0pEY2Bk'@;
put 'PjB8cXlKTlhXVDg/TSlwQUBtQ0N3KmtgfXNLdy9vVX4hYUdhJXtmQGlpY1VkSyhbK3J1YCR3UDYjPWdtbGJ0PUxKNyZ8NCVBIzxIdzsqfG8yRSNnUz9DUlt3R351UzR3JDNhQ1RjaWQvVTdFITJ0dlZ8Ojd4MltmdVo7clpiV0thTEAkKEQ6d0o1eWIzXmZtakNgVzoqL1FENDRPdGwvNClFd300'@;
put 'akxbKmoybm19Il9nOUo3bUt6NCZMPEZDZkwvYDVmNz8zRHZiMTpFbDFuMS82SDwrITxAZmU1QiIyYz9jeDR9bEo5IjpEOnojXzM6Zz9gcHIkMEclREUzcUtHMFNnJklzRDo9YW0qOSVxWSN+SFM3eFJ5b2ErKWBkLj1TYFBJOj1aTWRWUi5CQll8M1o4IygjM14mUktFW0MseFd5XktEb3g9KnZd'@;
put 'bT4oNXxMPEMpb2lgNXl0QVFLUnJnTCg+S0hpX2lnQDcuKz9CUDY3TG58TnsyKDBLVFdnPklebSw4MWxXJlkzJF1VYGlLS2dmP3AsdGM2TGAqI2EhXVd1eUFgPytsMiQjVUd1L2UoUGNIZmxmSHBnJEIvZXhCaHgla3lmLylufXhRbGRSdls1Pj1oYGVVSkRnclM2fDdyTUYvQmk2fk9beCloSCFi'@;
put 'RE4jK1tDUi84YG4icl94OGQ+NCVGdT1LPzJhcU4rQWFrbVFXS09DLGoxInZfTGBue3Z+OnIpKihfe1cmRz1HcXZ+JH5AOiRpXztyTUsoQm9tcDFacUJySTVWc3RkPitFZGgzTkRVSjdYfixiayJeXlJqPDJsU0A8dDEscERzQSNsaSo0THllPl1xS2ouK0FqaFpWWXRTe3hOUVVNfFImKn1TXjhw'@;
put 'dHVte1VWITZfUD5WOVo7I31oLlZXIjhRRn4rd3l9bC4sW1Y4UjxKRDorLnhxSUYlIV9sI1s1eEMkc2NIRkg1JGFiJVRrdHRGTSxYK29ANTEmNiY4elZdT2N+RzRIfWpgfCZvZDRuR3hMSEI0R2BFfGhzcVUueE0yOk41YVFCTz0wXXZRd3tpe2JOY3JfNkBlcExqRDFhVDVUYFgwcWZOVy5yTyVK'@;
put 'PW04Mn42byhFe2YkZ2R3NSZddVEjVkhzNSp0QGo4YihDfW1MVHoke01Na3lzUkwue0cxPmh1PXtWOVEpcTZuTHpxSF19NyVxaih5KXp3JmZldS43YWkjY04hIyw9fCxYPXpoX2Z+c0R7cD0ldzNXd2Esa2teVUtMdHciYTpybT5efCtecWBXbGEjLDkqYnZKQXxVRV1DKy5lLHg4bUR9UUJIPV1x'@;
put 'K1FPLHRnQk4kZzowVWBtVXgudzpuVktjI3QqSjhvPlVvLkkhT1pvNn1RakpuYW4+MERrbTYzNXZJPXs4PjNWOiR9TWk/SkVkakJxOlA1bWRVc0Y3QilVQkx+XS4kaTkxY3l0VCpqM0ozN20xWkZEd0QrOEFbOmFUUS9HfEVPa0tpZjopfW5CYnU5RWt4WyRJWSUyIVFrfVg2OXBRO3dvZypvOCRs'@;
put 'SnUza1RFLlF9UW9FI2pCNyl+dkpvYWAiaHslTjpwWilhRnAhSj9ANlljSVZtKz8vb25oSHZXXmlNeGJNO2ZIUCkzdC9lOzRyNVQkSGRUWGxkZ1t8JW1ZKFVrYTImaWt3TmlqMzVrXlEjJUNQXjwyOi5TTSEqUH1VUEFiaEEhYCZqbyx4c2gyQGI1IXlPekRDRXI7VGdPV21FMzh+eVp3ODVEWkF7'@;
put 'JGpiN249X1tdcWBodEg8KkNSQ1tSMHRMWntDfD5oOCxOQlNMdXtQKmRmUzpWLixvSFFpO0I0LD1bVjVkY1pOfVN5KzFeKUs/WE9HKipBWmxbRGd+PypGSWE5Jk5rQltIUE48ai9VN31nNXx7PmVPYjFYPTpobnhrZjM6PVY3Sj1NR3B5ZWFVVmhmdGtgRik9U0xHeXpiSyMlJFdBZWRhOmZrWUV6'@;
put 'Q0c7RjZGLkcvZFlVQVs7ZiwvTyFJZWMydk5WUWg1dnt+SyklMzhqNGUsfUVodXdOKkgiOWZLKW1JdyZmRmYvSkVFZTg7X3lHWH5kWTA+WWpUJHhYOjFHTjwwW1hEUWlseiZ8akh4YTZ1V103ZEcpWmBsRT48PHNdZjNKWX5jZ2lNXjlhIiooRV1YYiR+SEVxSlI1Ryt1XV4uKFlKQCp3cn4waHZH'@;
put 'PiguWGY2UTYwc2w9cWElOTNJbzZERHlxVG52RCQ2eXBJKX1QTl5aLDlfNjZ5KjRSWm1RT28+TnhTUFhSezVCJHpzRShvcXIxPUpYezZyY1MmM0FpLyZMWG9nYX59PVJbb3lraXBIZnBHT3YpfmJrZlc5Wnh5PFhPKnBONl09Vm9xZnJUNi4kcyVXeFNGe1toOH1bWnBbZFUucDJQPCgsWGJ9OyxS'@;
put 'SDh2e2hSKmp2dSNVPnZ6VnBHYnlVbkx2ZldkXlE8eSwldWt5bDZebndJfllfKXRANXU1WjcvNTI5JTJHPSxAXVhIfDkpTGJReTw6SztPJUUjVHclM3ovTkFCPXRyMVMqTWRCU0x2On10S1BZPkgyNVdoZyYxSnFzYi9fcEIzcGNfXz10c1dCPUNOZDF4JUZDPXJxbEtlWSROLHcsVllpVTY5IlR3'@;
put 'V15ue0p7Q1hAbD1uNyhDYTomI0MqMyxAPihVcTwrQyVBYElJIVdgYmZiISNGKmklLnYoUEA+T1o4YENLOiFLe1BqOGAiZCosInZ4I2VbUFt7a0N3dzA3I2FSZjV1O3BHODp0YWVeLlZETEtJKz42M017aj9MQmp2cE1TOEJyaVo+LjImSWEkdmUkNzE7UyhVaXorVHFuQHNLO1FqPVVvQTFbP1Qs'@;
put 'RSRUZltUb0IyVjhXS1UjM115dW1OZkgkdCZJfUtiYzk3dk87dVgpU3M4XThjMWAjYndbOkRxSnUje2dnQT9KYXpIJVNiZmV0JWNTUDdifGgyUi52JlUoenokcHJ1Ul9OcyZmVnJsQitlI0p4XXtfSXcpZUI3bmIzelRBNDpeb18mVllTXUNwNXQ4ZFRZXypGUF47MD9DUzwpQzpqa0xOLGNvSite'@;
put 'cilwbE96bi9hc29tImI+RzduLiwqeTorQDlhcjFJI28oKUIqey9yb0IvU1UkMiw4TDZkaj1+Vk53eW0odEA7VW5BXWp9KGRsYkQ3d0A0OlUpT2xAJklNIXdbenI4X0xMSjRCflF6U3khQitASW5HbCEwd1IqWVVjcm5hbk5mNH1HL1hnOlc6IXc9JGEpeyVdaWpCJUc1fmF0QmQ2SWJVR0VEKCpR'@;
put 'PilyUW16dF04TUNkKFp6JkhVZXlSOFBDbnNMVX11XSxHPzRXOGNMYVpeNntKWFlEPDx8KEIqfkhGeS85NWNQdyomYlpEeiZPSGRvdmlzcHFNP3ZwMDV2IWdXKzs7WDxaOkU+bU12I0tjaWs1clNDRzxpKEZHYDVmUClkallYK3V4Wz0lZi83ems0bkVeJllyQn5lJnVdNCVyVGMxMzdfJmYoVixY'@;
put 'SzpjRkB5RkR5dUV0ODpnNmVZKUBgcChNUEtxN1BBVWZWWSNaVU10UitVNUJ0c28+OUIre3lvc0BkdWdALFFOO1RtUFlyUGleO3t3Z2EpTlduIUhbNn1ieWJaWW5BIjFFJW84NVU7SFZjbU87OnleQU5xVXRgSkpBSmFsa3dqSHFHJCR5Xk1dZlEhalMrdihWZVAzUC9FLl1fbS5xajR2WCZJaEVw'@;
put 'bjJocG14Oi5neXpyfUQ0dmgma0p8I2FqJklpbSVfKFJoKVdyZ195YCNJZjcxS0Q9NnROc0tWWTdjPHM1In4uJjMoWDYqb1RRTUI/dnJfR3kvdm9LSTV4OHhpVUc6dHgxa2F+ZkgvRVhAaFMmcWtpcWF1VE1gMypVMU5DUG1HQTsmc2A7TF9xQzpGZy44ZX4zN25JcDI6UF1JPn0jdGFBckxgNjs+'@;
put 'Q1tDRU5DPDIsbVlNMHcid1ptR3NHT1o1MUVXNnVNXWRiS2dXOnhwd1QqaEdgMFdrWnJ2L2dzQFFaVzU/bU54Ky99PS9OdyFDZikqPURXPmxZLG1BVGNaIiZ0bDE8ZyplQkd1SVs8TUp0VSNvYk9iNipYWmhQem8xLiU1fjs0IW1LOlpoSTNAM1ZBbCZqd1pqb1lMVVBMPF9iM1smekk9TEUsR2Zw'@;
put 'REBnYjAoY01sWj1gZktrS0NrWDlYWjNfOHQxLkk6dXVjeDAhLEYlP0w8Y1UqbUtRfVRpfnpTQVRdQHpwNlo5czJjbHdJX14yWGtaNFdWU15GZCZUcm9YUzZVN1JlMl1EPSpoXyUyZDBCWkt+W09eejVTM08yYm9KLGJQRHVHJm8mKTVydGBMbiQ6alhEY0QhSjxUVGZGVSJeKm9UezhiKGpZTmM4'@;
put 'c2ZjbXVSXVk+bm1MbXkrZD8wfShNfWU/JmNXR2ppVUppMXk3dz43ZFtdTkgyYHI5QmJ1Q085LD8/em8vIzZ4PDhjJSFHamhdcEovc3Q1LCNJRClBdVV5Z2Z4WFYzTXdTVnw+MU41RG8wS3poMkp4Sn5EblAyUzhNZHZ4bTJ5SHhPRjRFN3hQZ3RqOnhFRDdpSV5ocmVbKlAiJTl+UT1oMVh9Jkln'@;
put 'aGprfXIuJjQ5JF4sOk5jaiteMS9QLzZpRSRHVkNIeHBzZDRYcHBzeHYhRT0lXl4/OSs9Ti5qaE8yYz9MYyZSM2pCLnBvSFB7bFssfTI4Lkd2ciptP2R2L3hpaTZRTD9oYitTeTZEYEl9Z0VZRCRoQT9Fclc+eSU/OGRMNFZJIlNLeCgweDwuK3NKZHV5dTR3Onx5ZDZPQEt3QDt+MHkiUClPdHlk'@;
put 'eVl1YltrSFtsJUkpXnxtPy9sJSN9Yi4sN3V6bUFLME54U186ejFLUGcsaTJbTTh1PERkK1k3SmBVRntwU3UxJENwe1JSXypBUVNCRF85aTAjQlRfIUohQi5QOFBLVyZ6Rl9iJHZPKGguME4+aUdXTGd6N047aX5UXm5QZ1NbbC5qMDAqLFZUckViYk9zU29Ydm56TVl8TnglfClMUnAuRlZJbjMv'@;
put 'fFlIfmN8LkNRfWBESkVuWiNDemAhRy9ZKlJWcHQjYCQlWjZhJVpZfk1AYj5bd2hXVmszTSExK3l4aTNTSCk1T2JCKzpqNnkmXiwoam9NV0dYa3pRYXQma30sO2BidWNyJklXbVRsdih5ZmV9NWpSc3JZKiFOViteaFY/WElNaCMuLl45Y0xBO0c8bHZmeGI9ZlhYT0hySTVLKT9PTUZuTWtWej0z'@;
put 'TVh4Mmt5M3dPZUV+RD0ocGxfOEMwTDdycEI3Rmh9ZVYsRGdeKlVgS1VbTTolUVRiKldvOX5sc2omZ1I0QFZhJVhAemg9cUd2MDN4dDdMZyZlUmIuckRxakcjSUtzTTlKTDgmbEEsbXM9MTpId3pSdjslPEcqeHVpbi8jY3ViaEk4Sn5qZi4hTjFUNUMyXlEqTV46I345aj5zYy93eXtdOzQ5JCRC'@;
put 'S2g2TEs/dyZoPVFQeyptR1g1YSViSzZLPEt1dDohWzg9TGhSKn0paWxgcDMuMVVLdVVUfl98czshajlWbFROW35DRHZZR3lUUXc1RzJePmt1W3dpQClgUTF8dEs3TSRPbCU4V21bJFhMd3V+KHBhV3o3KE16dGR1IWZ0bHYpIUBiW0NRTix0PElkSn1kVi5mbTpbOHFRLEpYU3c0VUNmZWF7PkI7'@;
put 'U35UcytUWlJTLiN6OmdGRWg2YDJiY1ErTFpLZGJSajxIczw/cVBmRkF8OWArXk88WGV9QGtfRi5nQ2U9Y1ApbD16Z35heXJPbTtSZFAuRXtyVmR2cngsOV01ezt4MSx5b004cEJybH1CRWtbQCl+eCRtRGwxSVgyV1VANC5jZ0taIzlXaSRLQHF5MU0leVdsWmtsdExGZ254TE9Ud1gjflBKMzE4'@;
put 'MWcmSWlSSmNtZFkmYCVyflU2PU1oTU9LczIsK0gzUWp4YyF+SzNGbmMzN0poIz9ZKENlc1kwX0EpKEYhVTxZSEU5WGdycWdeMDQ3KUk5Z2x2QXReSDVZZTloPmB9PFNmRCxBNE8ycWU4IXxxXjQid0FEN1k2U0MpKks5dFpWfEJIMUF9IW4rVV1bZnpbSEY5ciJjeD18MUxTL3lWWjBuLlhvdyE2'@;
put 'Yl1wTlZIVXhZdjRRbDxXI1t+QCNrelQpVn0iXXttL0s3UTNMPDQxTDozPDQ4PnBKcnFKMD4rPTd8ZjNDOkNAWzcyXzV8fGlgWFJtX3RvL0FjflppXk8mLHJHe3A+LFR+VFghQFtUN0orbWxVNEdbZlcjVWV1N189a3J+Oj1sJEV6ZE9UfXdFX1d1REVmbWRaO3NmQHJPJl9fYGpEQSgqX1N0PExJ'@;
put 'SVJmITZ+NTQwVkBtT1JFUnlgYjdeZX1OJUt5UDApND5PQj5zdCV+XWNUaWcucnJWXklgVlhqPlpBLy5MXyQjWUwxS10/RT5MaTElWEJ4NDhZa291ImVhVG9vdlQ0KTFFMXUoLzBAe1kkP2hVSjhvTXM9NCI1SnhFNnghVDBweTZtIVo+Im02U2A2aFkvM1gzJFk6MFR1bGdwOj1nVV48KWx3XSJ3'@;
put 'X3p0UFRTdl5SdVl0KlFjWkllJSEqOnphUDBjN1JkSzFdOUU4Q0goKmNBP0lkRnhJLnt5ajJHWHZyfCg8QCFAOFRNMSRUMHV9Ozd2bCRIfXAkMn55WXd3bEIsUSx0MXVzKXg5dzYqNEAya2RzZm09ZmohNDhuMHdqRURdVHtZbmAmTC9TNisqMVd4XigzQHk8QV8qakZiKFRgSm9KR3thRTY6fHky'@;
put 'fm9COX5ZWnpMNlVjQSlCWWRwLCNQa0E4N3ltXUd1Q3d3NXVYVShQc21jQzdMd0V7IVg9c04qImZeSjJ2ND5rcS49Wi5OXVp1b2pOWEt4OTk+VHZQbGFpWEZWT109OS9uMEI2KkldT3p8eyVuLi5BZGxAVm8vb3swIiU0PFtKYVgyVCssYXxKWCU/aFFXU3ApTFIyTGo2PmA2XSNpcGNyZ296M2tk'@;
put 'XlVqTyprRG51YDNiRlI+NElwRlREYH4mMndSOXRHZEdZYnNHfW41TSRPe2VaQmVqQ1l3T0pFNCV4dWdBPEN2e1hYdU4ibmVVTl9YUCovMy8xQyxtQ3hJbGd6eTJeUDciK1labV1lSj1MN0kpeF9SLjB3USxudmthYE81PnNOY3VAMkAhYmhGWjd2PXd4RD5pYTxvWmZ6OCU8YHBzcjlTNTJuTEMz'@;
put 'fSlwQXIhXWcuVWxrdU1wZ3Q9aUkzbkdaNW9aaSVyKUo/M0ZiL3V4VVkzPFoyck4qbiF8QXx4Zm1eYyp1QXo3KlBqeXtWWDlUOkhKT1hLRF5GbE4wWSYlQzprPkpnZUs4Y0hzL3tGbVtme249K3ttYnpqR3wrOlR2Z2BPVjoqfWVRRWc5R3lCeFNPKixgeD8qY2drI3cjPEVvVDNjY1RDW3NSKEZA'@;
put 'eHolZXV+YEojIiYuPVkpUnQla19DS0tHMzdmbmxhMjJ3ImE9b2R0NTJxPGlRQHVlMXhuNnl2dT44PUZZRWMwa2QyKmNEN2NSMT0heEx6OCU2YVJgOXtvO3pgIiRzIVZHXiRkWG5kTT9tTWdTSH56UHVAViY0M2Z6a3d4T2xvcy8kUUlTZ2YrUU1hQil4aT9zQHhiQGMkTyorTyQ0Tl8icypXQTc5'@;
put 'bGJSYjFuJlo0Nnw9JGB9diR7fmQvSVlVWFc8IS9LaG1EVWF6NTY9XiNOc0deYSZpPCQ/TmF1RlZOMExVKF5xMDkvW2JnS31wNmMyWjpJeVo1ZH1rU2lANkJiJkQhW1ZsMj05eS9EOzFZRUU3V3JhUV9eQCx7WzB4YVtKZ1cyYDgmTTVNd3I+elpkMzNKRzkwUl9+QjdnRn5tciFUOm5LKnAre30h'@;
put 'TGNtcTs/TjVqNTtmU0QhWlZIWTJNPnQ3VzhVJlBENnp9QVphY0s1VkZZJTBBMyFCZypKezBMYjEyc1d6WnxtVHZ4W2UvYnEwQip4W3RbMU5kKzxMSWdUZWo8YXBKfGY2fFZfL08oVCRgVUVVMFguK2Z0IUI+SzohaTNGJHJqPz1TRWl+TFZ1U0dMci5gMy94UH14aG1XeXIwcWBTa109IylzVTp5'@;
put 'cVA1TlR1L1teRHR8cnk1MFFLQGtGb31+MG50IzxMZy83a20wQkxONHRnUD1teihyaWcvezpXSjglK2cwTlhdMzpPMldaWWllKldqdSRYXlJNc0tVLEJEdGw1OFp6R1YraE4iOWNNYTxjSm5PVnosUkJmb0plekJuc2A+ZEM2JVk2S080TSFAIUteOy9YaFVeay5MTV9zal5EeFlNSFohJDJ3flRg'@;
put 'U2dgfj1rc3lQYUxeTHQ2LjVANEwpUENzOjUoQGJ4MT8sVTFyYX0pNEIpRHBgQEQ+V18sQnxtQk0sOWY0Oiw4QTQ7Ri5QYGpFfDN4eFs4T0dVI3xpTDxWT1dbb1VFRSNHZjhKQ3RxL0JrWFIqJnFzJWBzb2IvbDs+VGtjV2hUNz02QzFiKFdjSl07K20jV0J2d1N8X0x+fn5iakN0XXZiekZSV0Is'@;
put 'MEpfLCNgezRBWTpCYUpbRXB+LDp5NjBDcExOPnZOTlN6V2dhZnxrKCU/MFFIekxGbWMqME1hKGMvdTFsVGEldE8oODpYd09md1tueFgvWnRHS3h4fVpTOzpsUlI3WH1UJXB7YX5rNnV7dVJPOE9xe0FjKWQsU3hmNzcqRGdleig1aXp7ITIvZE5UUSwrNCQhO0c3Mk9lcHdiUkAkfV8jYXM/KFBt'@;
put 'U3RkMz0qWV4yYE8kJUYleVcie112I3wjWnlMIVBMQFghNFcrMDswaDRDSUJmVTZCSipNWnQ1Lzl7Q0MjQ29wc2ssV0hMO3s0SUFsZ2BTSzNVZl8qKHJ0KDpldzIxakA7MmFsMTJublh8P302Lnd6KFloJUB+alttIX4uLnc7K183fXp0JT9kTjZASjJOa28iZT1yI0B1SUgieXJWezMsPXorUjlR'@;
put 'WDspUiwwdUhHWSYkK3pLPmRlK2ZwaHd5WVVgOyl4Tl88ZjcwWyZxd2hafG16el9UO1orNENSR3h7WU97PzchUWA8KF4+bV1uRHVWYmM3L1ljSktnInp0flRYKWB3dDA6ZT1wb0d6fDpqOFYkNEZSYyMzKkB1IXlRT301V1BUOVpUP2ZkMEZPSywoUjlCeF5ZZl1Lcnx2RlpSZkw2KFZOSV1CYEAx'@;
put 'V0xMIyNiZFVJdEdBcTVEJHo9aVVpVWJKTiMkKkNzXWUkVmUsOE0/JntSJj9CcyFVP1FJQE1eZ2s4KSxCTVZPIi8udlFuVzpCYHNlaTp+MnFed3RhPixkc09wOWkxa3liPGY0TjBwUC93Qn1vd3hufDo6JHVjfUYzfTlOdmAiKF1mfnBTdG1aQGw3cSZgTl1SPzR5SmQzcDIsOl5ATjdBN3dAP3pC'@;
put 'ei57WkJqUTZmQ3c9fUZkfD12VEBDVjVDL1QveD9vZj9pL3A7QCwxYGwuI158MlV6eU9gTGRgJSNJQUwoO0lRc1tYeT5AK3FOZDA+VTwlOEN+P0czMkc5QjZYM09HVjlMfTByT3tOYSp7UTBJL1Y5OztNRXZ1eUhjQyRQNXNMK207WGFbcVk9ZWVyLjZNPjgmZU1vIWtwUClgPFQqeF0oYHdNel9Z'@;
put 'RlZSVHg3ei4sSno6U3xHT3ZrTTRTZHJXdS5FVVZxaT1hR2FkTiNzJFh7OzcsYDlDfC5CbVhEPkw3OT5vXTJEV3ZGbGVHKFRbY3UsOyg0Nk92SyNKJl1yZUI1LjlSMjpQZFtAKVE5QSN+RzcyeXY9R3w2SVtSOkpJPjJNWHM2eD9jN1kyYFg2WFQqYWMjPSNzRSohdzU6WXJ8RixtUTJib212VytX'@;
put 'dFJDIUA3R00rdFtqVlRuOnVldUQma1kkVE5ZXXxFbj1CYmo8QFNHM2dxdEN1IkpNN2tweGpCLChiY2NUWDk3Oz84RUQhajJKUyxed1pWJGYwOnRFS3VxQCp5UmR8cnVfbWJwNCNOJXVIWS5JPC9qSV5QSWA6Tkg8I3dkNXp0Oi4/aDI/RFUwTT5kQUc5WUEkdkNtI3ZdbFJpbCtlOyY+VGxSSDxa'@;
put 'JnUlJmZNWk5JQFt1UV9LQndkNkM/KHgmbG1WPjcuUUswTFdDfU00eTlVQ0ldRmgiYlszRDVNVSlaVUlKbjcoRDhAVGQ8NEoiIT1kMU1fOzVrInJYNXVlXmMyUTAuY1lSRkUua0NyIlV2eDxbeSZiKVFPNGBGTG9MZGMuW0YjfF5qWCUhYnE6cUM3MyZiIVFBd0xbSXFnW2FZQ3RBVUVFK3daUW9f'@;
put 'US5haUpJe1kyMTBZa3M/UnxkQVpqOS4lS2huXkdfWF8qS25CYkpdIWFCX0hxfCshUCNMP0FgZykyJTgyJHJXdG1aJHtbK2x5VjhqNG4lPkljamcwOX5fXi55aTUkMCNEdV5KKkdxW0ZdSWdtVWpuSiNXfipoN3lubndCVl81dV5QUTEjeTkiITR3PSo4ZnNqNk58Ii5UQzsjRHltW1lHdiZsWmk/'@;
put 'RC4zWTd4NlNdRiFfXWszRCI5OExQJXdxXl0iK2trdXE0VV5edSF7SE96N01QWiQ7ZGZjWnNpfUd+NzNnezgpa2NAM0JwbD9PRWxfIV5EQiF+YlhxIUxidWdvPShHQncoK3AscW0sKHR4UUEzT0tRQSpBb0wsRm0lZD83SG4+PkRBKURvamBdPjVocT0ycHxZPVNYcnZhPX5xTm9+Y047PCI3fCxs'@;
put 'YXg5VVcwLEpsL0l+aUx0YDVIcEgleChAdWopeU5afSx4XStTVEVvaGxWWF1DRGMqNWZSd0RSdWtWXSlTYDhpRTxPMVp2PzF7fEZiSCRROz5aZik9LHJ6dn47cy44JVtadXtHNlYveGwzUjVgNml5RmhAfFJleT1UeSZKPE50QGIyaVBAQXBsUjdWfCFkTj5lITF4I0xLVXFSUzIzZlZReXVdQ0Mv'@;
put 'NWxyRGxeZmhjdF5seVEqP1QrMS55TUNTUVJ1aHlfd2BkL3Y9L09OeVkmRiFDVUhGPWwzMFc7N0hSWDs1IWhuTDd3bFVQK3o4KSRecFciVmJNOi5FP0MlSV88b05nXlkxd0lYW1cxd198SzRWej0wO3V4RltZUm5DTT57eHw7WjxJZCh2fHV9YTxfRS83cUVdfWRWKVc4YnJENkx0VSJ0a2xTdn4u'@;
put 'eCYjXTNibUMsSz51SCRuSUB9Mn48Kjg5RVt9dj55P3xvbChSOkkwZkljMiRfLGp2cmJgJEQsNSYsUXVfJi5mNUtfZVghUmZFcFFHeGEwc3M0L0Z9YDB1NmZqJUxMUGdaRHNtO0g6T1FJLmJ3biM7aVRXaUpWRH5fNjpLcTNkaFhyaUM1elB2WVdfeTA6UGUpUlp9WVVqPGdDNHFPaWRZSDFkcitH'@;
put 'VTdaXSwqNl1KRnQxSnJNKFM9SUQ8OXdHL2khYGB3YyYxIXlaL0c/NmZzSS5CQUdqb18pWVFALFBiJl1TRVdCRGx9XXZtbCpdTihqRnBlVUZpTmczMkUxJEI5OmJdXWhYRiFjSH1wcm4mK21kP2csdmMwelFDQEBvcWp0SFVDKixtWmUvST01Mj8lN1pDRi8+Wy5eZ0RycHRdbzJ3UV4waGszTzxm'@;
put 'IzJhaUZTYXlnIzJaYWZUQTdybUlQIzFIOE9SSXEqbFUib3p6Y3sydn5TbmxBVkhSaSpEcl5lPVleRmFVMXwmWkxheER4eUE4fXhfV0hFN3g1PGxycFRNPyJAdkVweHhwIV1vTj16KUE3entuSGUqNnU3M1BkJTtIdHh5aX5DU05kNUJBeW9gfnthJmt6TnAxQypAUUtaMCFsTjhmMEB6YDQxbm5N'@;
put 'UTtVVisyKFUyWypdYWkjK2c2eH1nS0xwIzJ3RlVCeUpacDBuS3AvMDA2LGYwe3BRdShdTjo1MzR+dVN1TEo+cnVzJGw6VlhTfXZATzFTWHxoNn0+b08/aiNMKSo1IkB4UEZoYXskamhTZVlgT2I+VCY5Uyx0YEQkOGBRTFFXTnEuQEtWd3c3Z1ZVSWN6a2lYZ0c7IkVESF1DbVksRn5iSX1BXjZR'@;
put 'LiZFMzhYQm9QUHxOWUhBIWwicC52O3lPYnRNQD56XmQhNFhfQGwkcTs1Wz1eaEIrZ2QofSFMd3o5fClVZUMhSDRFSmtxXzdDJF44RT5ZUn0hJFdIRjJuSkp2QVV3d0IzbHNHR304TFlYVUlCIVlxWnBsJCN6KHR+fWg/VylxRDxXPWFNM3ZjZk9yU0kpdnZebVA6PEgmQHptYmNRdiQuJTB2ZWdR'@;
put 'SHJTcHlXem52R1QsdX1bRW1iSG09QkVqJlF3Xi5sM1oveEp9LyJ2cyZrUU4rM250RUpja1slOURYVVVHYFUxYl1xR3ZEfUY9YyI7O146cW5iYT1kZ0dkbHMkKk5RZ04+fXQ3SHFoaVcyP3RXTj41MWZhXT5fYjZVW3UhPmE2OGojcDUjXU49Kj5QLD1zODBjUntWJFQrUGtWJD1CQmQxTHNzQ149'@;
put 'LzE6NlZyVkI8cDhdSE84O24iT3B6cUpwWFQ1UVlJcSpoNHEseyZXcHpdVTZuNjhPZlNoKHJMVlAzXl13bXFYWmJWY15KUzNVamokeyM0KFZ5KDRwTU9CUkBYdHBJVyRZTGs6WDtmRWswQGBuNV9xUUEuT2s1QGwsQ0g7Nnpvb3UqKHYrZ1tgRjw0bldFcHNbRSF4NjpNVFtqQWFRdEV+OSMvWDM0'@;
put 'e3IrJGptZU9WIUVZQDJOdGFfTkhSfFhNaSpbQyIqfmtzJnJKL1AqXThKQVtIcj8+UTZsRWlqakpzNCQpNV5URDt4Q0Rie01jZTVZYD5Kay56Xnt6XV5fR1QqTT9+THt5dG11KWIvQkxkeE46OzplQTo/b3hhQlplKjldcnxQXiJuPTByIn5hQHtiaWF9d2NYRGc5UyNOQlBsayZAcUZoU0hZcXdf'@;
put 'flk0KEkmSTBUenR1OF9FOlZae2E0SCIyWSIuWlBoOmBWUnt3Wn5OUChlOXRQR0JhNkY4WTlIey42PVkmQG9sPDE6VXJ0RmlSazw/XkhkYyxgUDUxS2csa2xyNjM9XUFgYlAuKiR7VDB1KmBPR2pEPDlGSlNocEx1YHQ4MHlAKUVpSWhfPSxwO0JaTn4udHxxImhkMVt1VUV2UXU7R11tVFszUXpa'@;
put 'Qiw9MEtbKGZwOyxlUW9CaUwsflB9UkpOLy95MnZjUGlTKTdFWT0hX2R7Y1NZX0NyQCMqdzE2SE13NWR9LF59Pl0rI3s5IVdVRkJqJFAsV31vMCNwLDE+Rms0WFFSW2A0JiJDZE8uRllvXmJWSSFFP0x+bSMvfnZFPGs9Xy97THpbL0xzT1dXZVAxdX5Nay5gTkVXdT4qI1ZkcC47aFM8cj46Nno8'@;
put 'ckAuNltLbVc5eE1hcFA0KmUwa3lkUWwmOX5hYmsranhaeE57flBaRWc7KnY3S3d0Uyw4SyFtUWMyTjdbeF1zcUsiZDtwWiF5XWhwSmlxZWUyb3RMZXp6fDcuTktkXn43RDdhRyFUOEw7flc/YlA+Ly9OVGRjdFNUXV88dXgjLG00UDcofHZZVDtzR0ZJYDlvSSk/WUZEWllsS2pUNyZVRDdBYXh3'@;
put 'Sk9wVE9nejIxcVVoQUZ+JjFaPGIlV29sUlslcTZzb2dSOFRCIy9zOn47Wi8rLFVhfClXKyZVaCRxa3spKVk4biU0cjQyPVUzNyMrY1l2NitgcVhCKnpke152dFh8IjpgcCRFUmNNVjcqYyxePXRsJncuRDY8ZmtlRmx8NWwsTUAuMiF1T0pzSTtQL2BZclt5b35XVGppWFoxYEtEWllLKU5wNjY7'@;
put 'Sj9KOFZARyNnK1JCMipofENBcTFyfERdbkt7VSNAeXErTzc5MH1oZkc3VW59Pj18KTBbYlt2YTlYc1tgcTA6OHBqZy95WStDWXROTHQsTWtucU5GX21hKTo1enNoRVUvYHZtblN8NH1OJlFFWS54JGBKTStNe1I9MV1mTEp7Pk8kKmMiMyFIKURUfig4cjlTJDwyWE4oRVt9SiY2I2JAVC5mNjZE'@;
put 'WW5KRnAsey9UYUNzaVsjRDtSNlJzemllOnR9PHdyYyVQNnhOZ0B6WnRfMXVzS31vOTgkRHdIZ31XTmUxR2dBKzgsZ1E5eWZaSEkhemMjLHQ9Sj1TYCk9XmFEci95fWE6PihXUF9tK2I0KEd5N2h9Kys3KCJmVXx+XjtxO2dkbWApaTl9QmYxXSZyWjk4JGYraWdaWCZVUSUzUHNiMmtQcUIoVSUx'@;
put 'eFM8fXE0Vy51dXpiWFFecTFkOypeKzUwNj5kR009SDNaUi9SW3ZeRyt3LlhvY2VRb1AkNVQyc1FqLiVPOiU/NFBSJTNUXmJ3WEZ7ZmVNbTVXY2Y9bEg6RjwmOVFZKFAiekJHQ2lZPm1kT3N0Tk4ye0tldVc2dDs+P3QwQ3srRlVEN3AzclldcWJYK2xqUDNaKTVZTChoaz95dEhlcz9PPEFFa1tK'@;
put 'Iy54ZkdiYGpELGoyTEByO0ZGJSYjQFgiRkApbXZMVEdvNnVbbD9ZTnN0cGZNdytbeFZqIjY9VEJgTz1tdjJybFdRVmsmfEEiR180dSFtMF0qd3dRdmZpYWIlfndUQll+JmNCSSleaSwmK1tBWksmaVpMcGVWRTVuV0h+d2VpW2pqZHAuOnliU0wqeT1UME9SdXVVd2oiT3UsOCk/cnN3QGFSTERk'@;
put 'NDh0WVdedDx5QXRKKTxNfCE2XkluOT9lJCFlRE5KezVsTGMyYThjSz0/YWltY1MsTUMvWkhUWTxDST8he1BGbS5wbXZmVzJwcmpZTjdJZnR+LEluaiteRDZOUC9yaSJJRiNVKzM9YVdmYytYZGRYVmRLWj0manwsXy4kSiRNK1FlOmNLfD9WYnxoKS5DTyksRH1AeFBwX20lUH5CI0ZIX0ssYjRE'@;
put 'KWB5QHlXI1E+ZmN1MzwsKDhUZFQqVT1JQikjd1lzRFp4ViZHXyJhOj0lYCJNNEM4K09lRUtAUFE1Ty82fWFsQys8R3ZhQjkmYkouPVJSQ0Q0Q2p9M286e1F9Ql4uNDZHRER0Q2pXM2FJUWgzaXElISQjQ2xHdUcjPGg5MnMjYChaQlVrLCYvcWl8V3IvQUZkZkJJL1EubW1dVUVqY0BKeHZuUiJm'@;
put 'MSZ9dzI1JSpDJVpRSmVoXUJaQFdzTDdXbVBRI2F2S2A6RlgwUStwdXpDKUF7fDhYOTFXa3g3fmokTXtge0EvJjJUQ257KS9aQGBOQkVsMit5O3Q/JjokI3xSSWN1fiF8fX4vdHgpPTkqcFZCYW5CeGN9RGpuaixSczldSD5RSU05KFtZOUw4aGJLUmlXPT5yW1IiTmNfXTJucF02WCQlVXpnIitD'@;
put 'IjVMdSxiY3tsUHhzR0Rgey9PWXx2NXxwNypEel9pT3Q/PSFxYF1PYnEya055TklaKEB4d1tITyMqRk9gcS9lJEpvTktvSltnLEhfdXkqSHQhMi5HfUAmYWhwT1MiLjdBdF94Wk8vbHt0czkzdV4oeno5Ql0+WHRmQ1JnSXVRSW1ofWwwP3x1e0tnJDQ+b2cqaH1yMEs5UUkjY2VlMDNHeDZhQXZu'@;
put 'eCoyRzJgbSoxWnRiYUAmVjRSRD9ocUUyVSJFNURHNjpGJW5rQ14xemtBPmE6Y2N8MU1hRnd5W3l3UmtaXz8lez85bFFVSjhKczlIdWQoZ19JRV16MUVMcHJWT1g1ajdEN0IvO3NmQzcxNHcmfVhFVUc5SDtaTFlhYEViMVZ3THgsWDVRI15HdTJWMzxhKjJzMnZ8a0Nsa1dANVNIQTRsR19bQmk4'@;
put 'WVpHTDprJXMkeyU6X0ZCSE0hK1V2R09aIzU0Ll9UJEphS2tFQzYoIjYsZEhOUDxyN3pXRkpgY30pfTJkeVdoZFpYWXBjV1YrSlNjWF1kTj9OZCFZbipqZ3ojNmU1V3IzXWIidi5zJjBXc0pYYE42Tl1bSiFLMF98TUZ9Y0krTiE2VzR1UEhCNUZPTVEpIjRTNW1SYDQ9bVh7IS9XPG5mX19JYnV6'@;
put 'OSRPPXVKUDZlTX10NzQrTEQ8KzM/bV94bV96KmR3TDh1dD5fezUlWFFebj1OVVlBW1dZOkg8fjZSflZzM3RSW3ttQWcwQ1VJXWF1biwjJVpYZkhwZDMiaVBxJSt6U3xwJkx4Nm86IWtQbFJoTiRVQmhvNTopTT0+bzJ1UUpncCZgMDNob2IpR0hnWGleY1lyZ25TW1dXMjROcTE8O2tmVEs1JktR'@;
put 'IlUybyU3NV1fJmluZmU7STFsTzo2cUs0MDg5JnEyMnB0fGhPWG1jeytQKytNY3dXbiVUK3ZiLDliU31XdCQzXU1tO1NNL0gwK3cqRCU1Tio7PF5Edy9GOGJSbVllP09EeXtDLzQ4WyVNYG92JFpyMHk1cDdYfFJ2TGlgRmFzRF5ZUzs0KT1FYEV3Ol9VXz9ve0o1UXFYSiE+PjxKV0k3elE1Y3A6'@;
put 'VkJ7M2x+Vm1OUjA5e0szZXRKfWNrZiFmI3tRbVpndj06MF95PjtDW0FXazttfj1MPH5IRjN1OkBSNmVsdyRxT31ldGttZz5TQGJUU29YOFd1MW5UNXVCYzZ0aC87V352Vl0lNWcveWdxUUMjeXs3Omd9OEZ+fSVnY2UhJHkyak5LXSNuaTR3ckhWSjB5aT5wYiVINzshSEJUMWZ2c3JmRUNHQ3d7'@;
put 'cHZidUd9dj9dYEB4fVZUNkR9Rk5xcEVlOVJURzcje2ZmaTMqfU19UDVaW0MyJkMpX3NBNC5iKU13eF87bjlzK21dPmQ0Ji8mWHIleyYmZVBoSWlqRDZvancjY1h7NDtjU15XKlRQTkFjPjAidyRtTlYjayg3UEFRcnFzLzdtcTBILEhza2U1YDwjXXg6XW9gNmdwemFCJndaey9UWTlge1JBKTBd'@;
put 'cEVPUyl4YzZqODc4KD94ITtQKWppZGwrRV8udFYqUHxzZkZGTncjZFNmemBQfTJBZ05kVStTKGFOV3UoWSwqL1c/ZFsoez8mVGIkO0dlSUlBXmFESUVOW1FUcltEV3plLm0wcFcjRS5TTExYVG1CUX4/dW8yY3s3Mk1+cEhjbSZEIkBAajh8UnNHTk5Ydi5FSS9nbVQkeF95bG58bTN+ZygqXm9S'@;
put 'YiU6fHQsRTtsdmokWX47SFNRV0kmSHl4aUY5WDkvW0U2Jl0oUGROZFVBRigxbk1BUSZ6Qj5jLiJZPXNwPSs/cE96S1kqb1pGblhGdHcweURPeCMuWD1hUG1dYkxELDdSPj5OIlE7KEI0MCtTK2d2MCV6aiZVaylAc15UeTw1ekxfaCt2VC9bVCMiQVUqQWtQfmlaNUIiMFp1MXk5KHdlNkFJXSRo'@;
put 'X29qW29aJmNlJjFvNkYybXB6T2MuPU5sZ1dvbzhVKlhnO3o6S1spTW1Yfjg9RURbVFZiNWZlcVNxenxneVtvc2h4XlB6W05oUkNpeT1Yd2t4WEp+SGo2Yk53RHdQTiF1Wk1qYEd0KnwsbkFeSmtaakcsQiNaSXxOM3B8KDRsNF95Z2dpN3suNTFpSjZ0fTNOUzhbPlo7UTEreltWdFkzUUIhTGlI'@;
put 'cHo8bnIzYUBNLkY0aiQ9UnBTYU4oeTlwMjd9V2hvXThdaDovTH0pT2FJNngwVldYNT9JM3FbfHlVcl4jay9EOlR3KXFBS2oqMV4wJHMrKV5sRjFhcXtiPyp9KyFqZUU1NFMuKyMuSyU6UFc/KGBsbFhiY010MXRrfXRbPDNgaCVlLFNxWSkpQ0k6IUVXZSVXJGc8fjtwVV9vRiNoYXFaTnsmJiU5'@;
put 'fkFBdUJEVnNTdSp6PlExe0khUWBbXWRBIyh6Mj0+LylbXjVkVkIpSXI3MHQqQUNNdCMvXkp1MldBNHI8QXg/UmlDMDpzeTNPS0tzYEZhTz1ueXBIRUYsdngyfEVZaFN8Nk18KDVaQDNJN0dKelYrbytYL3hBSFVaNERNMDZALiI0WT4hZVlWU0QyNlU+LDBmNTszUVU3NHx9ZzZlSiJfMEhWNXpp'@;
put 'ZXh9dXg5b0U+KUZrVDNTN2ZrXzxXRGV2WFpyJXhuWmQvNXp7WHcvUiE4MGRkemRhX35NfGV9anN3XWMudlJha3dPc0l9T3B0SFFvX2FKcE0wfSlPaSR5aykqRGN4WHhYLzREUm54OGN1V1JAZy8vN0VkSDJSfShuXih7SDhEYjUpSUJFWGFGd3pwZ0ZQdiRFVWooLFRKeCJNa0VXI2guX1ZtI0Eh'@;
put 'NzxgVCF+Wk0zIUYzbSlSUlg1RiRISEhpPSk3bC59XTVIMWkpOD8uWUM6ZWF1OmN8PkZhdXxvUWxmJn1kc1o2WWRxOC9ZQXUhaDN1THgvS3poczZaI3BDYmZnZnZtIT10dzZiR09UIWAiInVFU0VYI1dvYmpdaTJudl5uPHMuU0U1PSo/M1o4TyU0SXZpb0ssfjU+ITJ5bWEuVmh7czIvUj1rVy8r'@;
put 'LDZNO3UhZEU1ekhwQENCKixpJSJORzNeY2tzWU17M0JpbW5GdHRTdlkuPFZCUjFbdThTL0YzZmQhOSFrImwjaUJxXWFATXslXnM9P01hbFJpfEVmbSlMIk5xeyhAMlB1O0I9Ink4OUYiNWRLJTFhTz45WlRda01tNio6PHdoJiIkdzJEKTduRS9jfjY/I2dgeGBlZytDfj0vbEl8Y00odnNpdEB8'@;
put 'LDVvWnt4NFZXZUI+VFg6KnBuWXMjIys6ViwyWEdFQlMkRHJvWlJmKE5rVTh9VHFVT315RWlofDw0Oy50dntITSlhInZoS0Z1UkFtSjc2LkZnNTQubzgyT3A7VGsxdEV5X11WZTZjbjwkdHRucTBiXk9+ZUM3RnhZSlhvSHBqKzcsPihqSUsoU35DRzhCcTFSKGNWKXxnQFEpbj1+P19RcDFMMFZU'@;
put 'LGZ8OHJedXtxVHJkSFNFMk1CPyp+XSZtVlBrd0dPQDBCLGV4fi4qUkBpbW1zbWkwRE5ve1NxQyxaZDRGXX0/K1tSSVhfVTp7aTlGW2lNenBjLlIwT0JeJFlSWlN0ZDBqLkspLC5BO1Q3ZVh4RHJoVkFaSEY8IlpMe3dpM2VUaER6NTNUIiNMJSs0STt6bWJLJGdHKGg/W2k+ciY4Pyg1cTBvJC89'@;
put 'bklhbkYsVnUkKE1CZE8hXSQwJGV+P1QoW117ZGtRWFBCZEdQOz8iSERqXmhNO3lheWo+XkErKTVqQjlheCtsVkovP3Z6LF5uSGRTfnIzYkEkOEFGR1s5amNUX0VFT1R0NEwjbDkkXzdQNGcwRUt1ez92cl1MKkdSOjVSdi9URi8kT18hVyhjQ181N11bYkNwTHtQNCFSdXs1aixBKH1vTzlMPk89'@;
put 'P0BeKThKWUxqWyJedlFjYl55MH17JHNbNzYmdmIuc3hMej9MXkNlTDBFLkRrK2tiNChMbHhLdz1uNSFvPFJPIX01MWREbXJpTiNKX2g+KEFhXmBXdURZfEx4WjtCWypQM2U+WCE1PywyZiU6QmBULy9MZVdhanUoPUwpZiZHJWBoX3tmIzxnOUUwejQsYEI6NmBaSzY6b0hzNitiI2paNGFuXWFY'@;
put 'Smh5cEJ8UD5udEpXMi4kJmFqOkJCYytxbFhBYGY7SUtgOz5UeXpDOm19fXVQY3c3Wig8JU0vXVhmdyN7ZUM6USxKUHFoc2p3OmpTWmU+TkB+bVVoLjpKVmFeRENsa3ZqPV0ja1BtX3I/UX0jc2RoOGtRYGhPOHFxPWVaSUpiYWcudmo+eXRMKnJgSWhvUGFeLzN+QkslSSUlOUJfMDpKJGtPUF15'@;
put 'a3ZDJSYuPnwoLyllISJwdzVIOl04cGc1bTp9TWo2XmZYImZMKWdwLEBKNCooOSFAQUwlR2g0QHNPMDFAZz9bJGR+Sk5LezcyVGddNTFZY2Rtfl8+R3VVQWZ+YSpYIyQ/UHFaPX5+Li5hMntfXk9da3lnZGw0SGxJQHd5Vll8PEB6JE5+Uy89UjA7N3YmITxZeDZvajFYOGwuPkNuWmQlc31PNiwj'@;
put 'I0JUe0Y+OCpfWH57ey4hYFkxKk1AbkZsRjlYPyUjXmBQOitONkNoMl1BI2p+PCJrdEx3Jkl+UGojIzVnZV19bWA7Z3VLIXZjenAiaCwiQ29FPE8sRDhvX1BiKCwhV1VpeWBqVWhfKDF9V19gMCghPTtdY2ZhPyJZS18vanFYO2d0eVA+K2JeZzYoYVlDL3tpcmliZVMqOWdtKD1EZDltZjM+Sy9C'@;
put 'YzxMU0hKMnpqdiNsKzgybjpuVy9oMz00a1Y/aThkMklRMXNDJHoxJFRdeEdORSZoOncoeU1UPDh7bl4sWChoWSMrd3NOZWwvY2tATTRySFhgJXBtNGg/NTdkK1p3L2B5UC9FbXUmJWtNMjQ6STw5LywkZGosTnc2Z1I5cjUjeyYlNCVTNSNALF12Y2QweCYrb2ZlX2N6Oz5nPHtvQj06KVFpSkZH'@;
put 'WitsJVd0IVEpKWJzMjtqaG4xMVg7Vn1ERCNLdTh2IXE6KmM8WENwQ2U2OSxWaUZqMVNlfF5kUlQ6OFZxKkF6V08hc0ImY2s4fWc5cXFhT2wqcHV5VE4kVSFAQk1lYU9acG1XOHkmOGM1X1IyZyo8OTBQQVNbbClbUEpnZCpYMG53fSo1c21bTTVuOzRFM3xlOX5daGJOSzReQDk4QSFrZkdfRi5z'@;
put 'Imh7eEUuXVlbJFtMWngkajFfaiFiSSNDaG1KS00uZCErN0BAeEgyQ11gY2d4OFIvbT07WjpgQipyclNzIUYqYW1KQ0BwWlZBSXZ+JktPImJBbHh3ODZ5X1JbSnlCcVk2Yjxvby9EZSZvZ1hkQiQsR2omX3dSJlImZ15ZcT0iWTZfe0w0IVcmfFZZJnk5a209Ykc9bnVtdj12a20yMT95L3wwZTZa'@;
put 'WSVHYXRKejppTmBWcmheTShlKk9JXVdxRTEkVHhgWzg8SEBZWnhQRjxpXXFwOEd4aGxtQCpLXjYlWHVJYW5dTzY4WjIkRyg6bip9WDZZMDY0bitDKlJuRyhxL1MqMzUqIlVbUWgmcDpIWVR4K2gzfjx7bTp9QltdVjA8ek0sUjA2KEwsNTtdaWBFdz5kMG5MLkheU3RLPzllfj9xIys/SUpGWzI5'@;
put 'aVR9alhNM11Ud19GfXplUGwpaVcpWih2TTpZQVlPPzM6XSE9KDV9bnVJWzdXNF99PDxxU1YhSkRaPmtgLDQ6Nz5pNTsyMVBpe01pWjE+anElY1QoeHBicFY6JDpGJi47RUFCSk9fdmVhdVFaIXhwN3RnQmxSI3NxLyMyb31GS05SZkhTSE88MFIkalRVXVFjKmNwcnNafiNvVCVKd15FbDFXW1FN'@;
put 'Rz8pNTY9Pn16Tzs3dD54bDtQQG9UK3pkIypGK31ZfkE/TmhMa2l4VHk2anBWU3VaQ2pCb09qcXF3LygvUG0vKDVVYE1dPT1wUFc8OyVVSlRAMnNTfjolXlJke3VSOzxePTtWaC5YTT4udElZJWdxcUddLGpkfHxOJiFOdGpnbERpVHRse3FXXyhTSyxUM31CMzdtRCU+fTJkeGt7L0w4WVM+M2pz'@;
put 'LzluTGxaeGJPUyN8WlV6WXY3ISFNNzl6UEZOcl5FaTppRkJrJm4kMChhNFhmN1YvZjx4K2YwUFYvX3pxSmg3S1F8U1REPT1QK1khMCowaHIhO21XWDk/cnFXZ1RUWSFQR2dmSnMhfk0rUUg2LDsjSTg5TUgvLGJ2UTJaT2ljWXdgM2JmNFZKLnRmXUZoSTZiI3VOZyw6WC57fHJyLGFCaXNGTlYz'@;
put 'RTpBJENCdkREUmBAKU09PGFiMkZIMyp9IVJMQk5ua0YzW0BoRXIlYmsmWDowNDReOVM4MyxAU1lgfChFV0xUbkxTRj9nJEE5clpnNltgfCkmdTdRQzB4Kk4pMCZHUE1zaTtTb3VVZm9gI2NFQmAjb0t0KnxfL0BJa2sydFlkI3crbHFaUjQpQ005fCE8VCkmdyhEYVRRciwldlkrc0VrQnRvPSZy'@;
put 'W0NnSmd6blBfcjliRTczKUxkRz1XXXhgMCtee0pxQy95dCE5VX5jI3d2JCZNcDtQdyhZb3NSZWcqOCFpUXEoX1l5fXorOzFkdVU/OUpfcTs8emx0VC8rQnh0cEFCTnR+MjNEfXxNTiUvTn4yeCtbWytOWGpNPFAyRGtVVk4udExHck1wMW9CTnpsaXQjKll8XmcweTNiP3JpR1RPQmRhQnlPXi5F'@;
put 'P1Yxe0NlRj1JOUJNVThkdFFhciwyeEgjRWlle0I6UzYrSXFSfUVeW1JCVHZWTkg3SncsfXFPeS5oOVZIN31Ga1clWGEpJUg7Kj9LYkFZZG90T31TaVAyYX1jYzNIIyIsNkhmVVEoLj0xS19oZEIsNVMrLj5dZHVGO1p1Syo+azRFWlR6aE4iMUw2NmlEZSRTfHVWKCFzdkArVn5IWChbdXNDey4h'@;
put 'fVFvOTZfUjUpP2FTVT0lPyZdZD5tJFQmd2VZYXl+KTorIixHVF5deTxjZTlQaXQ2S3BJQjBqSS5Ma001KG94eDBYfjUpcXh2YkpmWSY+NlRBLy4oR2NBMUVIM2ZkMSlXZXV1X3o9Oj5pYmEhNWJBfjdBJko0UWUidTdhUzBiVncxR3Y7Y0FHJGc8a15JREU8aWJfSlJudWlJI1c3dSpjQjU9MFkz'@;
put 'fGROQyhkK0hmfDAlNDYueT1pYS54bnBjSiwmMU5KcllRYSkvQ1c7YiguXUtPfT1APzF4Zyh2cGNqOTZ0P3JRZGhlOjd1WFM1e0VVSDUpeSl8JU5Ebn4lLFgmUWxgITFYV2A2bGRpYHx+a1UwWmZnJVRFOFFsP28vaS5ASXQkR1ZXeGRSIWdVdTt+PUxja29OL21iQVpmcDksbyluKkxgKVB8eiJl'@;
put 'ZVUhK0cmVEo0YUteRjheNVIqNElQekJRKVZwODtsaWFyfDRNL0E4YFJrUltzVk9zQkUsdV9SSGkqNDFmSVR3Tkk9NjZTJnNqYVJzbn5vTil2OV9dRyV8NkM/Z0Q/M01edkZdNEQ2JDlwUF5DX3kkOUwrdntSbyhFWVUweEtoSksuVWJ2TClAU1Z2VSJDNVhWVCRUbThrUStjMDo3ZDp0Ykk6Mmlq'@;
put 'O2VzRjp1QllLK05bdXM+V3gocmQvblVnQTtbPjQzbEcwLjdUdyQufGQ2SkA2NVY9R0puLjB2MWs7PWhKdEU4Q1VTfS9yTWEqSWB8VCk5REtuKylvQ1omJihnd1tEWkBfNXFLe11eTyl7VSp2QXhMRUkzb0RzTkB4bCxlVVppOV1CPTBqYXljNkhDVWVKXipTIVcwZUtnOURvZls9aUdMWEt9Om9j'@;
put 'YDEuZCw+SFkjXXBNdkJLWGt5fEdHYyxiTnROT11hLixibVFQcH00ajVJI28+Tj9HYEQqQi9zTSh2IUc4fkIwRnpUUXJsW1Q6VyU+YGNKPkl1XzRfS2IkaG8rJjFrPHBNVDZKKjlPfTcvKElOeE1jcS5+fWE9Pl9NUyRFVHVhMHROZHQ+RFd1ODUkeWN6WW1fK2AzTURzakhOJClUT2JdUWVxcHhH'@;
put 'PCN5KiM8a1U8e1g3cGwsZDxCY0trSTR1WWZmcD9ae1UiLDVHQXV8R2o6aVpdJEhIcllSSDx8YlUrKlhPMytUZXVwW3V0P3oqMWtHQDxTaHQ0WSNlJH4hZTRnJkNqR3IkSUpHXkx0L1dpLmEmKzBHIVklNFAuTS49aX5mSC9Hc0czRmxSdm14Wmk8NCxdK1hpWXp6IURycGNzKGF6NXBHTi55NGt4'@;
put 'bCJPLDVnQH5qVjBfTGRjPDBWT2UzNS91NWE7fFRaaFdiPWJfU2wxMEZPeiwqfThkTFolOThqPUpCfktkO20jX2hCfUVJYnZKP2BlR1JkT1hyO0hsKGNhMCZzdDBVPDJPKUE7XV07fnNWSGpFJlBnOWMvdXVtWVAvTU5NUmk/WkZwUHc0VHYvL3pXUWdnYFVuT1JNO209V15CU2QkeTpvblFiL1tW'@;
put 'UDs5PkN2UkA4cX59blcjZHtvTmBdP1o3KT1TTDZQYiYqR28iVWlaeyVZPS4jW3MreFRYQG9mb3Q/ZUdkK2FgZTglPnJVblZDeXJeWVYvJEVtS3kmd3dkWG1UMyhGPmNdNF51MSJtYj1he1NUbWx2e2UrJSIvJlo7Iz5qSzshfC9uQWouR2FTYVFGOFlqaFZPL3kvVlQ7VlQ4VXB4Oj0+WlJqZW9R'@;
put 'ZUNfRzdwQ1JnJExvajY7anJdPDtAS1VPe0JeXz17SEB1SmVOLl8wLCFZRDkmdEZxNG1TNnpdTXNXRFd9b2YsYWZMSUo4K2ZdY0omWlpOfXN3WHw5ZkVQQjRqVEVte1RxcmJGVSh+Qk8lejReKXU4MmhxL2tLNWp6eHMiMGFqPDp0e009M2p3bER+WkQuU3lfQUFjdltAKzRqZnt8c1UweSMiS2cl'@;
put 'QnQ1SzxMaF1ifDt0d0NfQXBHWSt5Njd9T1srI2BQWGZ3K3xYLHhzMV5dVjZodS4+WGgjLjllT0N+RjtwUis4R0FHTzN+SEc9bXp0aklPRU9EYHVKc3xyTzpEb2tqW11VM21UT1g/XkRiYXc0ZTFkeCIjMU5fdnVpRWlOd1BKNyReKzl4RnxrYFd5RzoocyVHVUpaTzwhQ3B1IWhKYntZO343KjZ+'@;
put 'LztwUCtMUXdFbjlAen5+SHhxdlIhNFEjOXhgd25dTyE+QFo4e052dWYjMmIpL3loYVU1MWYqP188O3NQeFs0bV9EMzFDYHxAaipnMDE/WV1xLzBjOVJmMmlCMkYkb3dgLlNPPDwyYk18eCRHMCw/eXc/Vjh5ZVtyXnZ3LnM5WDpTMFJ3LGwxImR1XUIsYjVwMHtMaSVjU3csITI/aEtVNSRlbW9M'@;
put 'cUtJd3I/RnwiYkd9bzI/en5rMFpwXkpwMSVCd3h2fCI8W2pVSlNKPCRTV0t3ekFSc2I7bkREZzJUJFM3TTI8aj4+XUxzbU13PFRXU0ZUbVc+flNpIjRqN3dSKU9AYHs1Ykx8JilLTHZHc0wvamYmcDsvRFZpYCYvK3RYdDhRcSQvbWAya2g1a3dNal9FMG8xMnpzRSh5X11UVClJbzNCbCFKVjc1'@;
put 'RnNIbDo3MllLZD5sPmk1L0tNZDxzRW9AfmBHWm1VcmhteW1KZ09CVTB6Umd9W1EyfCRSXnhHMyksPGh8XSRfWTB9UXIxLG1nU2d9dkUxfXVVMVtgUFpjNVF5OUtfU2skTUI7LjQpPn5eI00+c19MbjRpdTp7QTkrOiZBN1E9JHAodTcvJjBadiRQNGQ6R213S08zYSY6NG9hfkcqIz4hP1dfL2Ym'@;
put 'XS8iWk5zTUZaeSpQb3JaZXN6aVpxTXFVVEImX103JFF8cDtYfkole0wwOyFmeDgvOVh7V0k0dy92fDplU1hfKWAsIj1lMTUsa0JEdEYsST04OXBqQTRoUzRnak0wPixiPmZ7KWJKMz07ZiRueEZ6PDhAKFsmL1AvbTdKbyNLfnx8fWkwLltmRDkqaEtRKyY+OEZLYnhUPS93KmVlOip0YWNffnlG'@;
put 'TEomVUksPSlCdWgie1N4LF9nZlM0TTI9fl5Lal9zRkB+LHxZQHUoYSFMY2xfI3MpYWJXK3lDfl9EX0ZmbXRNemM4K0Y7PTgyTlI+JlBwQkcmL3YkVTgoZVBNYSNPfDdZSVc2SUd1d0l7OEBDVHBGWSlQJjB9elY4PX42dHxESVU+QD0lZjZ1bXV5fFFvJWdrdkNLXXl0IXclZTh0bnwmYjcuJGx+'@;
put 'V1gyaFUkKzU0LERMMjFZa3l3Iio0XWcyNUhUTnkzTnIyYW9dLzorJUk2VTdQeVBHdnBuIzphLDxRK3AxcGtaXnV0ZlNmflR4JSlDV35wQXwxTnB6O1s6RWZSa1ZWfUJ5W1svPG0kcDZvWmJIUUB2ZG4/TGdfdDRueiwiOCsxOGRpUz5IQSlnSm1nWWFsZFE+b14/SztUOyo+dEhAb25Ncktsd2Mh'@;
put 'RmplXVpmWTF2U1R6d1o1Yl5XQlY8dWNpajw7RUhmUE1dMUU3dGAlO11KYGIvPXlqVEwoWCEwaW40JiIsfD1CXWkvbT9JInM/XyksYDcyM3E/Lz88QD5yYX5hJCIwN1BTTnF1UG4oJi5oej9lR2h6bmI1OEVGWDVIMU4+bCRdcEwlbkNbTE57LlEvJG9vOi9RKzxaT3ssZF1tRGI1QCo5VCVPTD47'@;
put 'VFpueDtAXXBXfnclJnFWKiksTTtxa3QsVzUjIlB7TSEselJGK15oZ1lyLmppPl57Tnp7JTxATnp7JU1RLm5vMXdwfElDSHplYD5qc2UpVShCYCRCRXVLQks7VCVMU3kvVW5aRS8pLHZmYTM/TCJhZzc1a0RAQCNxTmFaWlQhVVJ4YVB8JUdBb3NOREhhRTt4Uz1wMj99QCFlXkhedTAzbFBPQXNz'@;
put 'UnFyMHVXa3I9NyFLLEksVzVnM1p+QURNM1ZuSyxOSHw0MH1kTmY2Vj5WIz9ifWkpe11sMWZVZ2psdEpQczRDSlhoLDt1flYpVDBJJikwP09RdURuRktLeTUlTi9JNixVYj80ZnFiOSFgNn5vdncpLyFrO31pOjgibFZsTWsweGh6LHIiR0MhZSozZU50W0hJUFdyQ0M1U3RdbjEvOSZmdl5eNyxj'@;
put 'ZSRLNU14IXpCRk9tbGhTeV5oc0NZdTUoISZHfCo7aVNXR19HSU0pU09aYnlickJWQ3UlK1ZNOCVWUndwIiU7OEhYOig9eXJeZWBXaUdaJHEkMjA8ZHIqQmYmdGZwcjdUaSxac2p9LzgkU1FsIW4iKypqRVFLNChSKVBYMERkTWF1eEIjUVNEMjpMKFI7QHRCbk1tOGw8OWNSVjdCMm51YyFZe0oz'@;
put 'cHtgfj1rUFRdOk8zQkA3azhobGRQQT9OUHk3eVFydHg4ckh+Ilc5JHdiOTp5KyhlYTF3bFpeQkZIfCU9ImxQaTl3WDI6PUN0MEQlMGh9JSF0KD13fjV6bnZBZyhNTiVFQ0lIQlIlfD8wLyVPTz9AdjVDdW0sKkU1bCpjYk1CQ3YuYjdrY3t3KEJ5ampud2pCLFc1KTlje1BbYVVbISJCMlo4Wmta'@;
put 'V3dZMGt8UVt5PGtgbzp4LD1qYCFyPGIwa2BaLE12WGp9czMsJCxqbzFVO15BUiZ8YlFZRl0sQD8lSDo7LElIIVZ+fjBSVypUSjNjaEYpcXkiZytJU09bJTFLdjhEK1RFd0MkSjA5YlF+IzVPNiR9PDpkN2hpJjYqZF9QRlZjdF49KCRDfD0iOz0oUHBycSxeell3I2E1YigiNU01fXFKfG5vfE8/'@;
put 'e2B+YUksfmJpe19QUWRPRTFDdjosX3MzZ3haVCUxaSt9JV9VUmU3MG53PV5AKHxoc3lwVXhHQmt4a3g3XVBXLE47X18yMSlMKE5KbX5KdWppYWlgNDlSUz5xfWJGI0BaUyZNXkBUJW8qbFp0KG1uZmpAfV57MzpObWtgQWlualJSXVRsLE9qWDY8JEhiIWMoQX5qazspMURvenRBMzV0UHs+STNw'@;
put 'L0BYZHN2UnhGMSNVUnZ6WH0jPS44PGZWUDIvOyRFSigwNDQsTjooJi9AciF5Jn52WW9YPUpPUUM4ZDhSXntWYyRyKjY0P1p0ZF0iQ3RNQl5eO2hUSkMiW3MmP3A3cShnWCVBIz1oRmF3akY0Vk8oTSlRcjc1LDdTX0h0TXtGOG5KfFRdOl1aJFQ6LmZxVXBXflJNakMzNzNWR1A3UUY3YVJgNElJ'@;
put 'eiRVM1gmTU5oRHUpKz9HM1EuUUB9MjkhaVJvVip3RE5DQEpYRWsoUlJoXStkT091YkIlUCg/PyRxb0hiTXViMyMwKUpCUkNFTi9aeThdcFpnZ2FRdjtsPjZ2UGZldU1UKFd5eWRMe2xCLG41RmNjYUpBMW9KRTFRcGBpWH07KTIlYlFnfTtWO15oKEN1LDlldFtfW0VialM6ND15dHQsM3k6Xmtj'@;
put 'TG9nJFI9aCVLaWg1cDU2eXxmeSUjVz1CYnZnMHk3JnlBejpJRmdydSl3SHosISwvWX1RTVpqU21ReGlgfXBjWlpOTTZUXlJVPDZ+Q20kODs4YCtASykmZVVGcHJxTn52e3VyUEFiLCtyYlJPTTY1PDM2VEAzRnw/RCRoaltPYW9+ZSRULF4kNHgjaix9WT8vXkxhTVFGNHpPYUlwQTp4bGlIIU1C'@;
put 'Wl0uQlN5VGQuTjBdcFNtIUk9aXQ9YEx5e2ZYV1kmSWZNdklqdj5abltTKGxOL2ZAcWJSWHV2W1ZZbyojS3R9dCxCdUpTaDJrWUtbcWxoLiJGPikpJCN2c25EeTNGa30uL2sqIUtUZT8udUQkTC91OUZYSlVQUXVMTyokdktOIW9DXnY1T1FUUyFANSwvQmV4fH1AdHhYczwjclNHa25Seyw8aWll'@;
put 'O0lNNDUveDJEZmJpaEFkOjBUSldwRnFZQHlTWCQqJUk+IzFMX2AvVnhGcVlqLz98V2UjbFJYQ3NNIXRma0ZNXStqQDw+STEyNStGUUcoXn1OdGwvYUNTdWhtWj0sVEkmYnBxMFZJfCR4KlZRWl1UZiEveVElcTdhMHV3Oigyfks4N20mcUBuMlFVYi5HSCwmZThmVVgkPWVHJSNvR3hyZ2tvLmsk'@;
put 'JjxAMVElcW9+SVtGQnJJQH0oalR2XT5UZjJXPmFVJUVfWWQjOml4V2QvbTNQZmNCI1Fwam9OMixbTiVkNUg1XnN1Mm8/a2Y7O1Q8ZEh+SVc/KyQzUlViZiptazEuVkpwTzt4IjEhIXQyYEBsL1cjV207eDxtcWp9azc7O15Idyo4QjApVDNbNlRGVC8sWzNdelJUMitgZmBgemBQWzhnX3FlVWNb'@;
put 'bSYhcC5HRnh8MjJnen1wTmFjKns0ViNXWnZORFNlLnU5YVhkLz1nJm1qKTYiUiZGQk5oN0Z1bmc8UEJGMy9qPSNSRjp3S1IhSDAhVmFFSVhgcmtaV0pBckwhXk1AJWxUakRlOX45SmMkT0lVNXZgV0gvUWJoWiR3Xj1ocC4zQnlGNlpjeGJ1RVhLLFJaPkBnQnw2NlRHVEUqJlVjW0hxQkNZaHhH'@;
put 'dEt0P0pWU3whPGxle1pdL1lVPGQ2c1lPU0NQeVlSRDFFTDBzZm9xY3k5bEJ9QTRKNGIvNWEsfU50SFJ5MXZrbjQyezsvcVpKXW55NntAZy5lYWthMVlnISNzciMqNjpmK355LEp2SEJNIiliUmxCYzQ+S0BXdVEscmNqT2JHaXZPflJaSzN6QzBzJWJydkBkUWpAbHAmLDplQE8vR2NSX20vbiwl'@;
put 'fHs6UzNteX03cTpQNzl2e01uO3IyLl8xMWNBfkg6YWBhYX5OOXgxaCs9MCEyX2VSOXEzTnlaQWNQbXJ4IzJ0MEMwPGRyZHYlTFNyT1pvPnhxWUZAZT12JiQ4ITZjV0tfRCwubX5pKExoPV43O1MoZTB2Szk0QH4jYEBaUXpgKj17Zn01T2lGKWQwVERAKj0zLlUiI0tANU9vRDhZR3d9b1tlXS5q'@;
put 'aFkhbmlCOlcoeXNURElNSzJYe0xZWnZZQDY+eihyTiZqazNkQF9pMW5zR0cyMjlXRnw/bXRyfC9BXTxpUzczTm1Rd1svLlo1Wm5ZUXJqaEEjKVB3eE5XZmR+ai8hTWFyPUBrLzk1ZjQzNzE/YCg6MHxEeX5qNn5mYm0mWCh+L2hTNlR8R3B9OmVkelFgNV1qTXlbRC9pWFZoRm5vUkQuJWpFYk9v'@;
put 'K251ZWp4WGZOaW50VERTMWJNKV52M3UsO2hDclBuOjREa0E0bDx+JF5wKilGbyJZPSpUcmFVPVQuSkdeQShTTWY6JC4/P2MvfF48XWV4eSx5P20lSFhjcCRjO3J9YUEreHhAXUxsaXAueCkzQnlwK2dITDBzUmpvQTZLbj5dY0NsLmNPNXtBSDQsK3FxWUFrbWpCW1khd3klSHV+WFdAZVVAallH'@;
put 'VyE9XzsmKV5fO31hczY+Tj1UYTA8bGRiQE88dnJ2OT9Ie2k7cEt+Sz88LEoleUM0SFFQbnt+aG01ITpwOTxfSmg4dS9yfXNaWl1URCttRFNVc1dAKV57ajt2V0NgaVVEKy50TCElaVs0L2EwIUUuJj9hckJFOExZQGR4fCpRV2Vec3tFeVRjeDdGPWVTQ3lkaCppUGAvMDZMXjlLbzhZQFF4UUdC'@;
put 'eSgxOlRLQ3lHLzF7UUdlIk5SSzBtTz5uV0BHbTVGNSE5SlB0fmhPVkRLdHlFVF18Ik5JNm5IKzlCaT8rZGhhKU0iYVllK2hMRVVDeWRoeihhSkl1NUx2X2RadU1TTUV3b2N1ST9XZzpOb29zQStlXzF7eS5rNEdPdkRAQUx0ZUBIXkZRWHRdKDRkMHV4V2grNUlZTGwrU2YpdURERHlvaSF2IlY2'@;
put 'WHUhVytia1pkYjk2U0dRKyJQIkJGJG1mTV9WfWtqK0dHU05oI1B2eSRRaX1RdE1pVnF1M19nZ3s6L0lSTXBYV2o4LGB1cytzbWZNdFN3aWRHeUFkdCVqKDpbKiFjM3FuVWJwdzlBeUpgKSwqSkJgWGg1JW8+PDFUWTEhcz8/OyI6aXw2Pk0xOU51b00vKHFDMEhtYCElc2RKV3RkNDR1XlhnQTtG'@;
put 'JGMyKDxAVXQ4LEx3ZEw8Q2BoSFZsQmojO1V+YDlTMmAzKFdeNVdyQisiI3JKSFVMQzF1WGQvLEArdGZMSG59b2ZASEQ9aWZgflBDIUIlSERXYTsoTCpmSkI3PiM6KGtGY2JDPHttZj0uWm1jTWVNRj1Aa011VUsjNT1TXlt+NExleWJGZkB2RztgazFzLExsPyE6R0AlQiZ2PCg/aWZyQi9YSkJx'@;
put 'OTUrTTRReip6WGhQIU1mckhOI0AlbVgjYG0xUF59RXQyNCFyJk1RL1A9cU5UeURNNiQoUndYKW8ubykhVSVxfSF0I0k9eVUyRT8lV2wlSnp3JGhOTFRlU2UpJiNZVEBDbjhRXyR6fUZaKik3R3YqLG5lSWkjY1tSPCFJfSNsJHhne2g3Ozs3ZD96SForKCFbeClKYFhOWVJxaSZeKX5zbHtRZnJ+'@;
put 'bFBHUWxYMkVRPjowbCwxMSsje1RZMnA8MCxkSyx5Qkh7OWExI1JSWThGJSs5Vk9ZKXd+Zj1oKXRIe2BfKW1DKzNHK2s1YHMhOG5LSyVFYDp3PWVzRDN+PF5VYjF+cSExW3ZeYTQ1eF1uPFNKZXlnYWwsQFk1Ik5WXlQkPncqLjFYJFtGP25ITjgqSiVIbXExXWFnZHowbEVjSCZPJk8yLF1UejVQ'@;
put 'M0klbDNtOS9AcTNpalRNXXlIQComQWJaX14hXlhNIjgrbUNkZnNgLFJCUjY5PTEqWixObDpXOmtHdmIuPG93W0liUiUpLjB6IzNHLlJvWzNPKnF3TDRSaDJiMFZYSCpjLjYxQTJ5PDAzMkpGYjMrVGtQWy42WzJyIWMxdDshISFLL2IrQVF7IWVHOmY4ZDBSLnMucmJWZVtgJkk0aj5GKk1bZUBz'@;
put 'QVc8MCZQNV5yIUpJOzxLbEtMYGtoMmFSMW81T1R3cl1fLDxLNURGc2BvZSZtczBAWDsyR11wLit2WiMrWmlXOk9vRlprbXkyNGs4Nil6Ljx7NmN3PlhDYlViImFGcC5HX0dnKTthSnBxSDd1c0ZIJHhyei9vUC98fWhsN05XdUs0SEpleXpLaDEzIXJwJV9gZGhaLjspUSlQejlqXiwua1p2fWlq'@;
put 'W3tDQ1MuJCsxUmw8ZmxkWTIqd3xsNDgzIW8kPGEpTGQ6eWM4OGx9cjQhbkRrd3l9YXIuYCVFT3JAPHUmST1paHh6T0B4UFlDXk0rPTdpI2VyeTgxKWo/OWlUYHg2T2RhTWtJclVeRT1TaDI/NF4kVUpZMFZIfTkkV1NCZmpPfTlrfDReTzM6JTEqUk4lelkpeFk2UFRpb1AuZFVFJHN3VSprZilG'@;
put 'ZHRsQkshMzlUcU9QMy4vMEkhY3VFWkthdk9jciNCV144YnRxSmRxNj10LjwhaUBMbFhrbTV4UCw7emxHdmFbWzdZeEBtRnV2RWElKyguVjpQYG1Oa21aKCNhLjw7SGQwLHshOSFiTCgvbmF9JXxCYiUpO2EwK2xscFcpSVhdWTQ5PT9jKHAkTFNUKVhrbXVZVk1TVCw/cmIvNUt2d0dISTx8dXd3'@;
put 'RyJyZ3hzR0Z6Zm9AIXFJWUNhSCw3OygqVU52e2wkaXZ2Mz8uVSt9QSRNKn1wfFNHR2Fjdj0uYmZYdX5VMzhTITU/ZUJ8NV5NPmp2YiV2a3ZMV2oxPUhwImd1d3E3QTxveXN6MVFqQGhROW11JjJ3SChweGdYRFo8M25SMGk4K2pzd0ssYzU/TCxETjVzQCFVSThMQCssTCYvW2lDZEgzcVs4RVBo'@;
put 'encmQHYlVzk7X0MwI0B9KyI9ZDYueCwmZV52I2grSGxQJCV7NmNzdyx5ZyVbe0FrZE83cD9tQDBlNXFYR1pFK3pnZj1EcUghUTFgekQwKD1ONStmdHNeVV8jP3IqLDEjc1Jqc3dUZ2tIU2FFSnJaKlFhZmI4TUJ7Xnc7RmhYa20zUnY2VUJnO31pLjlieixMeFk9WyNpZF5ITUsqdWNEMlEjQ09h'@;
put 'O3VFJmB8NDRQQ1QsWjt5Mmp7aWNWMHxganh9eyxnbTdpeSNfYG5eY2l0bGRPaXRjeTlSRipeb1cqc1RBcW15ciU6L1NCUDA2LDM+SHYxNWtKZT1pWyMobCt7PU5RWXFteFdfNTl9cTMkQyt5QFglMT0yWCEoMnF8UndeYkBYPjdzZ3dwTkpRaiZle1pQVmowOHpIR0s4aCxlaFBNVSVYRj9MZk1Q'@;
put 'M2w+R0M3QllzcHxxLHFWQDpbeHN3bXY4eEA6WzJOZyYyRWw7T3JIOmRpLz5fTkhrUHo1fndNTXlWempaIV5OZjplWWw1L21PUzgmajIkKXtYTlFCKU1oO2JPTGlxMyFzPkZZM3tKM05hUCg+cWh9Z29VZ2k/JEZZdTM6blspem04WUVpOTtVK3dVVDhNIXM5RG00L3shLjlPdTlfX29KMH50fHM/'@;
put 'SmxidnAyTnxVeVA9MW05VFRZLlRCfDg6ei9IK0YxdzxYdzlVdmxaTl5TWWFAYT1dY0dyXllGP304Ym9jdXwpWjlMNCw+OSRkckswTTxkXnw0OlIrSGE1UF9YeD9IK0YmbnkrT2ZiamsyLEtpWkRERUtuOG1BJVl+QUQreT9rSkgsJXZIWHZ4QiE7K0VDXzF9Ujk6a08jRS9VSHhzVHheNDw/XSwv'@;
put 'Ly9qWVc1Z2hYbSg1OG4xd0tIdWE3VFg0Ty4lajNoMlEzejleIW91TmN9eVJxKGZfYCNka3dbailAfXt6NypVUSI1Nl45X2BsSDlhOFokZXJMZ3ZGIzBCX0ZWNDNhM2Ykby90Nj18R31GKE56QmZBaiNNZU5TIT8xWG5NekwjRCl7QE01MW9QPW13OV5TWWVUcSU8KzUvQGJDMHE/aUNhfjc7Nl59'@;
put 'LDt3JH12ViZvUlliMCtNQ3c0ZFcjbn06MUN2biZafX1AOkdwZVQzLCZtc340LClZXnFwcWsrTVpeXWxrVn0xQGxNV1VddTt+ZDRwRUwhOS9ue1FNa3NmclMiYV1yVDZjVkdScktjQUklZz5wXio4VE9BdilMWUo8SGEvfCpKZDIxVU9ldkAsWFVESENAYTNQekNyb1R8LFVEbVpOLFVdbHNiPnpt'@;
put 'c01YT0g2dmZLbi5QRj9ablN4QGdbWnk0YUhuUyR4TXh9aSpCUDFhMTIjUk59WkVUQlgmbDlIUTshSWdnLGhnY2o1cVdvai8jQm4xVns3c2RXcG05WkxeP11rPzNwOlQsKnpRdTpbZT9Taj9rVmhyYkose1g8JX5SdG55ZUltWDdvfnp9WHl0M0JxYTVdLCgvdjA7alJTQntHRjw3Q30/Ujw3SGxz'@;
put 'YjtqeFNOe1V5YU9wPGQkfGsiPXJPQntaWS4xcTNNe1YhblNNX31Xb3YwTENgLD0qOixASzBmei5+S0lhenhiRX4+XVR1O3luSy9ERUUobHhdTW9aOXdhTmN+NGg8b3w+YHtxRlU7L0A8eVIlI0B4LlI9XmNNejVPRjRKLHhVIyRsYzpLTG9IKC8lOkEhKzNqSlV6QURBYjA5PHhtTV4/S0VBJUUl'@;
put 'elVvM2I5ViwlODMzOG1VZ3oqRllgZzQ5QHhXfjc5UCwzPjlePzs2bF90YFl+azgpTFNIaHdPdj10ZUZ3ZHlDU0dYQDJ9djRPQzl7cn5FcE04ZFtxQl9ASUp+MCZGTG5dV1MwU3xeR0t2RkJrPmxze0VkXkoqTTs6Ll5aW1ZieVpyYjoxbnZ+ZCUwfTdTViZYRXA9UkVZI2lTOyIvWXBXYDJJVTs+'@;
put 'fUgwMXZ4e18sQW5jeHVJSkNKKWImWDF4RG0/Xl1PckowLzlQbyFga0k2aE83JnQ3b00mLkVwclN1TTJgNDosSFtIeWsrZThGYEF4ZkNUMiEifnhlR24/W2AoTXVvSSl9VCE5anRudGlNdWtBe007OFVlVWNAZGYjdlZ6bVtfLCJXOSwzM1c1Z3peUmRAc0Z0JmJ8S0l0VD4wNkdrOiReS3dNT3Zb'@;
put 'YUpLPSsiJH1MejFxQCxEPkZjWD8rYFclKkVddzBQe3csXmlLbU0jRX1dOyNCKV1VL15IJm9kfF5WRjxlX1QleE4waDxsTyM1SVpbP0ImW250UlZaSFhMeTxaKGtlZl5eUHApSkAvSWYycjE9cVNUUyVpeHJEQ2labUAjSktGVks2a204OF9YNkd7cj1vW0dsKFMiPVRtWGgoMndzTyhAeTIrRC5z'@;
put 'Jk4sMXo1UXtscH0iPSgxUSVMd0ZIamp8KCRkJmBlNjp1MEZJLCpdOSFESlJvMTl4en49MT5peDhxOiM1XT9IYS8jPUVMMSwsLl86cSpRWmFzOXtqezBycH4oWHI1MT5zJWR0TiNZVil8ZlUxeXFtbXgsbEV4WHdSPWp9IVVlNXxYYFZ5Uk1wej5xI3FVNWlORHZrMCRiKCY7ZFtiakBzW25lejRd'@;
put 'fEUvQDFfMG5PeihLPl40aU5NeF9AWzB4OmVHJUg0bXpxP1ZNQ1IyfSxIVTtMejRdWVpPZl9vaHlIWG95TTY3LG56ImYzaHNiPngyZmUlSiZNeiglRUsrRmFbdDV+NG5Qc1I5YXFkfWkiT0dxPnwrJV9HYDZONWt5d1RIdDtedWY6ZXVmQUEwbFdxYERVUHhMdG5YRXVUKH42PnR3dUltdGBsNUxp'@;
put 'WX5qSXIpUFhaS1tJWmtPQ2lGWUdIe2BMZW10IzMmQF9KajJNTDVkQ3BkNyFDXmQvX091diZoL0pfV3koRlRSVitnMH1gZG5INjNzIy5CNEJucTpxeDhxXzVjM2Y3Lzt4QGc+RCViYFheOUBtd3ZOfDZeQGNHTW1TNkYmKlhre3J5WTMuM19UU3dLODs7Wmc1YnAkImYvL2lhV05APTZCclBPX0NY'@;
put 'OWAqa1M2LEBqUTRDclBgUCgvQztiJik4WCwiYHI5W3tYb3tONSYvbkZxKjkqdzJCT2hpZT9waVZfIz83WGVTOEFFT1JZKjw/aGpoUVlHd1QvbjNQeSorYEclTTpUJillfVpKSEA9Ti4yTkVkd01tTjFPPHBxPmFsX19CX2dWZjhjZC5hXSxTbz1VJShiVS5qYCpQNjFTMHM9W1lYL1dzJmhiWXhD'@;
put 'LHFaYWJ+K1k3dz4keU91c2Z5YFdVL3g1L3BNe1kmUGJGUWgkP2g4XU1xeEgsPyV3PWRicTt0U0JyQElFKExRfCFwcEUmMEh5UnN0KXJbRj9YSz5eS0ZMeEgpX1RRNV5jLj8kKXMvU1d2LExfYDJMR0wwTyImZDc9NVROakpzJFt1WmpINGB7dnJrcFVKL1s6OzhrRHN+RSZqPVRWUFFUQUlLWi9T'@;
put 'K3goLDFJfnU1L3hVVnM9RXx3Qys7QF8yVk01SyZKPE9aUU5RaGljSWI2N0A0Y0htTHowOSNKTHhCWj9falFjVDxrX19DTSFZPTF1LkFpVVE0Yn1CYHkxPW5pR2ZeZGZZTllVWlUmclNYLEkpRmp1TXtSOldNVTtAQWw6dipbZjNVZU4jTitwLHt2VjE1b01JJlB+KVNvei82OXRKaXMucipjd0x7'@;
put 'I11STEBkYSx7YGx2ZzpSXm9RVnk0aXk1JjVAYm5aS2s5NVkyaUlUdWMsWj9xZTxPRk1rWCREVE92dnB0NnRtJDtBVF9DU1NoW2BpcH5eOlVIMmtYKkRXRlg2MnA5UTQ3cE8xZEpIWyUxJEk/KD9gLEd3XmYpKTBHZihFeERaSDxsJktQPCpSdypCPXQre058aFRZR3ltUlFDe3lbZWZFP247ZnRv'@;
put 'SzA6PFVETm9vUX5yMF5XZXNXeHomNToyPUgreyVbWUI4SU10IzFeZHV5bVJZIkVdI3slWzh0ZCgjcH1ofFNWSkAmJXUiYURaSz9pK2pmdSNbKGgjaC4iZWhRQjdSXnZqQ1ohakB8cGx6IXxHNGY8SXB4Lzs8bVVjMURvU3tocj5EK3pjNTd4cUBKUHFyR0dLb3Z3QDMvXy5eSTUrflg0TFRlL1sv'@;
put 'ayE9ajVOYmtUIT05MyIueWg2PVBsU31nOCZPdiQkMlhGUiY4I3UlbTBbNSE2SyFOWEQsLnxZME1aajhWLnh+IVVQK3B9djIoJmJzP0xHXjpifis5Ylp4KEZYVTkyZGFQP2ozQn1ARUI+dHY2fkgzTHdaKy8wbHJ+UmN4QUdXVUAlfXJnWSJmPF5KR1kidzpuZ05kWGx1a3VkVy49bHJRej5HSkNm'@;
put 'YE8sUUkzLDYrPy5kXTBMZyl2R2VfI11ee2UxZ3k7d1peMEhNYVhdSHQ2OU8zTXw8byRfZV4lI013Niw/bls9Zy5xcGpOLHRxQWE2PFVYN2NyaWo8MUFQLHNRQ1lRb0M5Jk9iODhATStPYVl8OyxKWyEuMExUZTAuKSJxeFJFL3lUV3hvKnNMOzo7RmNNMzFqS1khdzVsWWRWLmFeMzR7cms2aXJk'@;
put 'Mkd+NC4oej5xRi4sTDY/ZjdzNjRFTEJZZWRDWGUqYnkrcmJpeHUpVzpDdi5UL0htX3ZzclY4OCpVJUA/KTtDMlcwZiVQZms/IW5mVl5JOWZvVkpvRWM9O28lKVEldVZFJHJZQnNqNkQzaTVZMHZ+RWsjKTErWnBqd1RmUXdzUnBDdlpDKGwuSiohaWtaXU9uVjQ3VmJeN0hJNzFJbVoqIz8vd0Ns'@;
put 'bnR3IyhjNUR7Wk5DaWxzcDx2R1U3WjlOTVpCSENARWxLPjssU01aaSNNTj44ITBNL2ZpZyo8dk9BRm9xNFJ4dUwqbyEsWkpvV113K1BCXVlDXlEwRGRdNGllKXBlal1TKm5GMERkSlRLV2xQOCxDKG5gVFtEWkNeb2YlUEwkQUQqOG4qcj9jaiIsMEBbK0ssXy9ncyI1YyRNLEdsNEkodXRmIT0r'@;
put 'M3MwPnE6ZWY+bikrKTZ0dCludzBmelVoQ1VYZStGT0QhRW5xfSNwNGlqUjxtRXEkXWp2ZWZtNVY1QDRzbTdZMEBuK3leR3BBd3o+YkMoQFdWQUo4Rn5pPGl4Lzs/fG9IWDZVUDV1Y1pvYmpdW1JNUXlqWihxalR4UW44eV9PV2JqcWlmL2U7RlVWXVh5T0hueSxGTWZYQFZWdXVCPDkvdl83UEYz'@;
put 'TUJGbnBCPk0+K3U5RS57T2lDLFs6Wy5YWnF6NUo6TVc4RiZYangwMWVLcUYmem4sMTFiXilGMEAkbyp7S0t1TSE8OWNBNXsjOyk7bnQ5c3ZGWCkpXjRYRU1jb3lZY2hIZHcxST9NT0x+a1p2dmpOcjlJIXxwP3JQcGpVT01oVj1DYClGbFhsSC9JR0tMU3gvNC8zMmZMTyl8ZUREb2MpZ3hZIlti'@;
put 'T09IIj5+eWlge1dFLGtWaXd3bTRpdF9Ndzc9QG9yLyQmeGU/VUdSeWsuZiFrJllrTihtIWpoLnFieTJeVVgyN1clOUlSSGo8eixrYTtUem5obUpodi8wRU4xI3ZqRHpPczIuZFVdP1UrYTJ5YFBddj9sLCZGSixsO3U2UWl4Z1EkfiZDTTo8UmZ2aXU4OmRUay5UfTttUU5xTytVOyFRQFQuPEwm'@;
put 'MnBjeUM8XkpGeTFuTlJMWlAjKWkqY0NRWnsrIUEzd0lyRTJeUCxtOF5dRFo3djRRR1JOPTlHP0s1UEphckozdSg/M3Q3PmY5WzMvP2wsJkZMfjBZc0c5UnE2NDhFJExSISwkWklENVFhSWVqZmo0Smg0Nz1gQm5OSiRweSQwUkhVSTlxKEJCRHM9IW82JmMufnRVU0dRamo4dXFiNzhbSXZadE9B'@;
put 'e0QueFozT1hoQjJ8W3UmN1IqWEsxZnlTUSZPYW5ZbFBzRCN0RjVHRyFxSitaUH4wXVhBa2xAdEcsQTBSPjtmbS5AYT06W056KmFRakNRKVVhcDBXb0hjSDN3ZkYsdUZSIVBzcixCMEMua0BmdV92Q1Fody9lMV5dbkAqSHU6KGQwRURmfWw8Lyx2NiZAS2M5XnBOJkZSdF8pbGFlOnNtPSZBYlJr'@;
put 'YFMsOzFiKTxPbFAuVF5aIW1WYX1HWjQrWSIpZ1ZDTlBTbDlrcXZtLCh5YF5TNSI/PnFOUmlbQW9vM3tXc1lBfXdNc0p2OkRLWkxpImN1aTB9TEk/SE08RztVeTFbL3htbFg2N2d5Q0RpZys2MnwjWk9ZbXdnUS57LEdSelhPUypJRGg2MSlSfk92aH05TEBMPFRKM3lxMWdlYm8rRGM4Un1AaFtN'@;
put 'Pj1eMiMoMEwyR1EvR0g0NT9xXWEzLlEpZ0RIVk99WnIxait4L2ouS011PVFFNWxgZXFrSVd6Xz88bSxlLzBZLjkwUGBXTlIuZlBWTnMre2FgPk4ha0t0bEImMnNnLCZoaXNRMDYxKWwsd3pSX0YmZTFETWtJZWJhd0E0NGl8aGhnL00xYjhzMjMmKFohZVNBXys5cjZdV0dpclZbe3xsK14qLmty'@;
put 'JD1CPGVOfHhDWj5obyp1TVReIXBlWUp1VXNmJSx7OzYwVyRBZ0QyTlZPRTEzUjVSKU1EMzJHMml9Omlod1dLOmN3O1F9JG9bdTFSI2dpQ2koLm4+JClLaSNqaXZlP0RjT0VzTStBZ04lQkVSaHcpTlhkZjFxaUtvQ3kyR2xYY3VCeX4qU15LXz1TdE15fXdSNmB0UHsjX2B9XUFmanduRUpDUCl7'@;
put 'Smh8T0ZEJG1WI197VnU1UShZKSNqbTt8PUdXPU5RXVVGbl43LlJhN0NDbXF2QHM4Njw+flpHdHVWUGhqRm45Zn1GW0RoOEBNeSIuNTIhPU8sOk98U11UdG0pcEIyOCZSMUJTY3JXSURifG1RWSg/bTJsPCMpRDJsPFpTZH1VYXAwTXNWNTBAVnk3ezB2X2x1NmxIaS9vTTtrdXc2OGVDT1IjKiRJ'@;
put 'Ik4rVFNCTiN7clZOImBleGIxQnJde3kuUSRYYkRdcEMuW0dKbDNXR11gQDtBfFVeSTt5I3xAOkptI1owfSVKKHpHW3dXdk1dPUtGeSgzW2Q1JEhNaWluaXlTPHdrLDhlb2ErZysxeTB1M1ZPbCRIZ1YiREgycWZOUTBCJld7enYrSCltfGRmJTpkTWF1VjRYKkJBZndLQGhJfkBtTSRwMHVhP0w3'@;
put 'e2p5QVRKbkNgQmpOLy5FNlAzTylOL24pVSlhMz8yQ2hxMz9kcGxOXmh6PGh3Z0pGYjsocj83VF1UajMxaDwzIjVMa0ErS1lVU3BmWkRSdEUwQHRyXUsxaHlNXXc8bD1FOS8kNS8uW31Hd0lBU1RmOSxwZCpQfEUwdiF7R1NHU3o3e1Y4I3I8ZT1hYSRfPzFfIUJAWjR2IzIjV3A5ai5VLnpZN3Mm'@;
put 'RiF1eTApXnlzKnwyZk9rbFRGZkovTW9aQm1bSV52e3l7Lk8sc2N+MCZ8Z1FgcUNLNUQsbXJLPHdKUF8meU1kdSpKeEAlZWosbkBsTCF6NyFqZzRMK1h4dmxCKVh9IjwsYl9LTzRpamlYUmFzd0xdVCl0SlokP15pe3Y7MDVkTVM9Wjt+OmFyak1KSHY/V3oqOi5zLm5MLHd7dD15QEImKyY5KzNG'@;
put 'IV5hPE1MMCNAP1ddRTdMNkM4TXk/VTxHMVtZKDlmTEVZbUg9NFtJcS9zU0ksdUkweH0maWJYazVuemEveVpSIyFdLEleWVIrNUZ5JEVyenoyfDc5Zykwdz9lQ3JRK2ZiQ15nclorLCZNZXIrMmJePzQze2VSZXU1VUxAPjdlYDsuTiVtYk4+dj42SDhMdSJhbmlVXTFacix9USJoMEokclcxPWZD'@;
put 'QFt2S2o4WiE5QzRdWGVUeFp8OSl8aEkpTFRpYTNmLGxAMGM1YSx5WTh7fWEsKEVPe2pQWkgjPkhLMSsjI3pGMUs/UCEpaSMhQWk6fV1ee1BzWTErKCNaWi5NcTBOUURvRlkjTUwxUnsyZypuKjBoZ0N1YHdtNjdWNDpsKSg5L2RVK1IqfHlPbyMjbCRlRUM9djVhOFZCTWdUblhkVW48N2N5P3gl'@;
put 'UVZNXVQkcTxlXl5HIS89ODtdOVNpO1tJNT5fVCVgXyFZfW0yVlg8V1k3PEIlbn12Pns9W1g0dmd+IytWOE5TNypSI2dVJD1kVzdbentKUTlZKyxWTFZpRyxPejhWc2dGM2FaLjxCRilqN1ZVbGhCbjJjayx6Yl4/Wi9uamBWMUdNbWpzQ3BreSxOSWt3MzA4X1IqYmJ8Rk9eRnh9LD45WEdmdm1S'@;
put 'IyphSz42V2BSdDBtfm1uYj1kbF84b2kybzppN2dyUTMydFFIaHZyXmV9IXlNKUBWWyFya1tHYyRsfTIkPzNDb2hoWSg5YnJKdUQ2MTFtKXAhWCs4VjRYLl1oUWcqPzYuJHAjc3hMdnMxYjZ3MmoieyQ0dTY6bnAzJWN2JTwxWShMNGU6S24kLmtncl0jbXBIdX1NQGB6VzRVN05EZCFwfn1qJEQq'@;
put 'RX4mc1d4VWFQKHhQLjUlYWpAMmQ8PGVuIXRKX306L2ozQkI9eUlqXiplfSxbMk5nQEpaL3d1JjBOMWJ1Wy5dfCVxfjQuWWAyJHMkOTo1fDs2Knc/KUluNFQ+SyNxRGI5fVZyY08/JDJnamMmLk9iI25BNyJtQStAUDxbVCVrb3A6c3dnQkRiX3pCXW5wVUN9JSx3VmwrLig9fTslTmREOmpPWkV+'@;
put 'NmVKbihuP0IrMjpkL2t0azpeLnp7QEMod3JeO2pGajNQNGlTOH53dUIvNntvVSxlandHSFcudW5vflErYDojSkQpfXllbkdHcTJnViRhPVApY0pfbUkreVUqIXhmXTtQMDVgYjB0SVErQ1BlMVNMbEY9LCE2fDJFdn5ZSSt0SSlpY0NzU3lERWsoOVtSMiMiSFh6Ri88eHBBcHgmbVtPeEBXWS5z'@;
put 'Ml8qcWJ2akgvPygzUjtHeXYsM3wqX05CRFBFY0N6JmZYLHk8VyJ5SWR7UnhAbkVRLFJ4dFNdRishVkRaTCMrZkd4ajlSV2xjeG5FSiluRUlYJUxdenN0WWBaRCQpbkVYOj9rPFJOITRfem51UDo7flR9LzdKcnc/LiRlWTw6KDpseUx3KExia3VQRCwwbEpCan1RMWt4Nk0jWzFXZixJLEpfYWxt'@;
put 'YHhyL0t6YnohTGpoYE5kNUUsYW03QmRYYHI9d0s4NComeUtqckhIe3JZYD1RNUh+cF4iTUVDKyNIMn5fK1FAb1p2fHd0Sil1QDdKfFdeT29Ocjp+QXFyYFpRZmpBJTlQYzl6bzNRelk8a3g9PSkoT2wpdG5ERXlWc2pSVUlTNDd8QH02bksyPFNeRFNqMkVbeiZ9MThoIVBVRiRWV1VMLn1jL2d0'@;
put 'N1A9bjl+e3p5MCQvWzYlW0dadyJvRmE6NEs4SUhbQyZSNjl0dHNDc2NbO1VoSHJtZENzMk5UMjdMc2lXcmtqOFlzR3M0MndZTz5aYlgxYzZGSVlKRzVMeCYuaVBHfGs8SEgzNltWXTNjcWM/Py89Nl5qeHRtaz19cXQyUTp4MGY+TCsoR1VhXWEhbmZ0ZW9bOzwzTjRpaXp7Si57MV03aWk5ZTM9'@;
put 'UHM/bEV+Uz9dNnp9W19ocSVuTV9BKXwhWVMzPVFLdW5NX1JpfUo+KXs0a3JGNDwrVHI3JTg2YGxiOjJRZSl1a0dXdTxeYEpAZlZ7bHZ1azVJbDlqXU52d0c6Wyl3akVPandUO2FuVkphRThWQHhwJksocHtbWHYqd2pJXSZ4VzRCMzV0fkBZJSFrQDpSTUBKX0Y7Ulgud2BJM1UqT3gqVHdDYixQ'@;
put 'KGwsZGN0Kz05ISswKXNvIiRDIUZGbF0rcSQzQGViSmdgYDlZLntTSmYkZVRlT0lqSkFvJFNLLixhd1BVO0R2fkBYLldTeF02WWkoSnI3OSE5M2Q0PW1dWCVaJVFrelZ0Mz54NjcpMzpAWGRSP0EoI0pUaGtUMTFQT3ZzMSY/ZiQuUVZrUEJXOjxmdjIjPng5S2xtPV5dSm9zT01TVGlXa1Avez9I'@;
put 'QS5NajdVc3xUPkE6dTs1LDw6b28yMzFaRH4vbXx6dmpFJm52emNfYWpfIkQ8O0N1JjhNVX5SY3IySnYsbWZ+I0tnIis0VnksQTEoemsrTHtNOzVyI1ooW0xJLFhuWGZWcnw/NTVZeV9PVnpoOSpodEFyKzlsdz8hYis2U3VPI3Vma3FSMDVbeXlUViZ9YipqWjp0VH08dHRoa2pMNWpHPz1WMVEo'@;
put 'YTdIPkV4L0FCLkx2WlBQJjw3UCROOSNORmlgSHVaT043OUZ7KkxIdDRibG5PXnkhcU96TGE4Lz5uV00qRmVmJGF3bTpGbWFzNzVoPzViZmZCZjExMERYMSsoOW8hXmFddWY0alpmNnNjO08jIkRHI1glS1J0OVtpWnZWTklUZW15ZmZnR0FyPVk5UHkmVnZ5amRKQyszRXd5KyI9cFMydVNpdztJ'@;
put 'Myt9QFAuLlA0OGgkc1V7UFRnMlp7MXROWytuZnlMa0J+R1ciM0RPV3B0JVY0MDEwZnRSdGtfd0BILEFVQUtCeUIrQkBBb0FVQUtCeUIrQkBzVVE7JWo/IVpKY3QjZiVQPzB5YEdVeXoqUHl6djEjSiJZKnIyUWVhWmk4UyY5KUkwZiQxQnEyUTAuaXJBLjAxS0pxXlpwVGsuPyMqdmw9YyRbcyZT'@;
put 'SUNSVEl8LypVOT5uayN7PTxbfDxnJClbTFprfS9fayMpV19zJlI3dzMrWiQ1aXZncGJDeiZpcTtJSzxFW2cjI3ZlMl8yTkV9N1F6ZnViV3U2M3xwIV1URlR5enVhcSRgYHUxTGApW3EjWyNkP0o5WzxdZltQZmtYeVJ1WW9udil0SHt1MUtvSWBUSUIkVzU5e28leFE9MCU/JmYwaSZzU3BrJkdO'@;
put 'ZDVMYUBPIjFjX0xTPUleV2koeW9zcU5hNFk5UzNUa2RGPC9kX1IrfHkqTX0yL0Q3Ykg8XjptJGVPSTI5OFd0RHVzZkJlVlYpb0lUZVhEMSg0WWssNykwYyhMS3VJKUY3WTBEZDE/PlFJSzEzeEBZb11YYW9vZ2FlL0k9S252ZE5zJD5LbnYpSSlgfUA2I01ZYWwvbWlgYnJEZGZAMitxWTlOLkAl'@;
put 'aSIrfks9aTlGZjxCTntaWyojTENgZXo1aVg9X3Y5eXdnQDdreDBJWnArTTI/MitLKV5WLGBiQy91Ozchc0c2NEVQJV95bmBld24hXTtbOV09ZFF4R2khQTNwLCVqWTBVYTVKYSQvPF8rMzpYK2BKaXokUig1YjNQTkEoWGhCcH1LQks8dmxiZj1kMFhfZCtiSklWVlVSKCFecnJOakRzJn0oUEp9'@;
put 'YTk4NG86MXNUTmhFVURZM1grbixkV1FTTDgyYF5wUXMqelgmaV5GfWhrelJMNHAjK2paSmZ2LH1KdHdCL2pGTWJaTWE7S2k+b0d0UTViRC9GcCMzcHNVXShVTDREW1dMKjFXSU85fEYjQyFyQyRAWnV1aVtdYEMjcEtvXiIoKEI7eExvMCMvXzpiUGtbVGEoeGMjMCt4PnRbeVopYmJYSEM+R3xv'@;
put 'R0skWz9Fb0BrVyY4YjpDMlddV1tINSxBJV8lXT1MYStackszUlE1YGBmMVpBdVNuT1VLZ0h6OCZPL3cpKXE6PH5LPTw5aTs+TmtJNCosb31qTWlqOUQ+OnAkWmxXMT1GMl91MXhRej5VNjNHUzd+XixVZ3I0RjlLTUpZbVdzb0YxeyVAXXo9ZHBxT3FbJmB0JUY1On5NbkA0N2Rra3NPaXJXXkkm'@;
put 'Y3pWTVpKb1UiRFspfCx9PykhYCokST1pNyhPSjk7SiVUV3RsZUwsb3pOK0JKfihwJS81OSo9JCpaeHB6YVg3NmlPUF8xOzRndm91YF0uR2ZPKC5rSlMiLHk3QDFJQnVMcllrdDVnbCM6SW9qc1J1O2dPfS55QDAsR3JbMFJvYUg2VmcveyN7MywwJiJYak0ybnNTdFJodG9RYkh6V35ffF5GOnU2'@;
put 'LEBNJEouJW9gNEMvUGtbW0A4aVZqS0NHXjx7P1JJaERTLz8qUXVZcmV2TytrIkQ7WFtPTFh2LGg8ajt6fTF5TFsxXUUzfHk7dmpIZ0MvV2NAW0ZITHJZa3E9b3pwOyxBaG0yVyFaOmpzO14+JFRyRH5+JCpiV3VBLlhLdzk/VylFaFhdOTh2PUtTPjg7VmducF4hbnZSNSMwL0dSNzdUPV11NUwy'@;
put 'KGgpdCgoJCo2VjwqfXJVUyRscX1sVE1wQDpObDY+VH5JLmVoYXJSP2cpZXFUaCtLaVZGTSJgJiV0YCFyW3olaktxI3lyVkdpNWF6SyxGMXt4JTFMN2k2WSQ7Wn1QIzRhaDBDXyJtLzlsck0hfFUhYWpLLDExe2plTTwkLzBPPCkyWEpeI3VRIXpVL11fLGJwPFslLl86QlFXSG4/QTxdUGI8K3xq'@;
put 'W2twQWBUe0VvVHI/MXsyJXA4emhpbF9hcmk8Kl40JHUxaT0rLDhsb1FwZlcjJnJ+InliaGZCS2AuY30oRlZTVHlFKiVQLHBlPyFIeXtNJDhsNT45amhQVyNbbzh6UD9TZntjVSYvWT99eHp7bDI1ImZYYTd0Yld9MVApTzdabXRMI2BiMSt4KCl7eUhfJnA8Rj5KVUM7LDZnQXEpIihXP2lqJD1K'@;
put 'QysobGtAZ0szKyQrNFFTb2FQLyRNUVA1Q0w1Lit8S1Zfe31pQzo6MXElRTxFNU8sO0g9KS9ufGZUIU4wJEdhbGZmKilYaGwpWFgsSXhiVnJmVnR2eTU9WzFjPSFHPEozSXVgVD51cktPQzQpYTRFSzAifXVdcGtQWnNuZXUwSDNpR1pzMVkmUjpwMjkiKFQpejJvTUtIPXJgeyZfRlZbXVtWXU1m'@;
put 'JV4wdl5wa1E9X040K0BWTDxWckRRQ1BDbCopcSZFWU5sUVk3VkM8QUwqKSRJei5OI2tNQVE+b1I4e3UvVXoubjZ6ITNnV1ExT118QiguUnpIR2A+K20vXU1mNXtEcUVoYDNnQXVtZnpoWD93Ol9KeGZ6aGwhKkp3Mz47Jn1qZ05Edmt1b3xbQWMkVlZ1PnNEPVJhbnlyK0k2JVA/MDUpM1ZmfUxU'@;
put 'Y1s+OiZAUl9uWU9DUTcydnpBazs0b2BYWi8lUHpZZT9McmAhSiZCbl9AWCoyeWBeQDQrKWBrblY5S1kjUEx8WlkoWj51VFUqRXRkLlJ9cXdZbDBSa1slYEp0IiFgcG1pcWdiPGZUTX1WeltAO3xoSHA1XXllP3coMSwrN01TTXR3VCIhSlpCb081SU1Ga3tGeGthM1hkdFJVOkVNKT0hdkZ1entY'@;
put 'UzB1KFUzU3l6JHFyYG5nSnk3I183cGVxXm1EVE0lNjJ6XmVdW3hzW3pRRUEpaEx7dCUldCZUMTF5YWZoW2B3YEJkVWFxOTNFWlloSjApdDlTJEhmNFU0RjFtV2x0U2cwPHVxVWx1UE5qWEI+MEwzQCwrfCRbWTIvQHdhYSwpeDshMkUvfXtHdk1nOikwTTpjWj1DV1dTTXViQ2JnQTVbaklZMy5R'@;
put 'V3VMbzc8bHVJTzcpQ102IUclPXNjRSRGWW9nNSJpeDJuLF9+aEdbMXIrNGpyOjVue2k1eGU2KnlTaik6aV0oW2E1JElMM29kWWRBOkElODFGaW5idE5KZT8ySUdJMTVzdFA2LDEpX0tqOkB0MW91SkNqemJWIkIqeEpqKlQiMlJMRywlKyQ6OzV2V098ZzsvPGJBRWc4QiRgbThwWiJvRTc1TCU3'@;
put 'W1k0eUNEVGs0OFc9Vm1vUkd4Zjx0T3tAMTJxaXR4Z0J9IXg6eD99dXVObVssVCZ6cnJJbldkd3k6OVUhaklCUnphUmNMRFVHS19YbEwlNlpsM1AzNjYqKlJ+Ji81eF17a3dnKFN3bnA/blA1S2okR1JOcDlEO1IkUyomTGtpbzgkTDRDTyFjdV57OC5raV5lbF1MZXZJNip7dE85WWZPVntdbyY7'@;
put 'O11+bjI2dFNLWUw1OEduU0A4diNQb2NAYVFqLkpvVitrQG1EOE96NCY7MHJDeEteb2RVQSNQJn4jOVRNKD5rcjdlKHMyREluWT9pK31QL0IjPkImOmUhfG0oeF1FWGorW0tZaCVAWUY8ZVIuenwyZmVvWm9zNTs9VzVQZnhabll7RSJSfFcoMythYkBxZ2JDNV1HZENTKjF9YEAmRl1zbiJmUCE9'@;
put 'TGRLNis2cUpxTX47am0mO1JiRHE+eG5oNTZHPF9yJVJ5O2p5ZnhIXl1aKF41JjomMy45fEt4X1laeFR8WyguTiVuOE1hbE9MIVt6JTpBISgvcSZiVlZNVGVnZXNHJmtyTjhUKDdOcTBoNFFAYEsxQDAwPkFyQGx8W1s1QCo/Z0F5ZSZtMCY/a1NNMDspcD9gLEJeSVh2WiIoU2RpX2dTLDYrNkt7'@;
put 'WEpQdU1VYCZIZH50amRETDFqViMvSipud19JN0lJY0hZSkRdRl02MHZLNGFwLCJXe2JKOzIkL2JxaGUzYCZpdDV9W3A+IVZKVGJTcG4yVGVRMUE5MzFHRXtnVzJHLFc/VFFIeyV8InV1Sjs4XVk8YCU/JTd9VWY4OmU1XjJdYkYrOT1JNlI2USFnbS5sYEQyR1BPI0tLMzBoNV1hSix0b0VkY2BX'@;
put 'N1BIS1J1QCUhSyRAJFoxJklyPChPI0B9eFhwaTN4UU05a1BCNj0+bHMwN2BsJHZJKWg5OFFrNyJ5SzEsMWhvaSZtWVZqSVl2XSgwQiZeMDVzXiF8SVIsQWgkPkQlaGBMMyYqO0c5ZyVeKXY4eilQPVI1KGlhLkkseFhSImZufE98KyokMTlfODZKIXx6d3dXemssbUx0PW94aTMyKyslRTFQSDFh'@;
put 'K2NJKWdfSjRDa3ZGbkA1LzZdMjlMfC84TFo7fT5wUGZHXyJmIWNgbF4mRm54TlQkMitqT141L2FhP3N5aVVzezQzYUcxaDk6N0U7SlZ8cWhaezFhbFBycVloOmVnWGRyV2g3aWd0eCZgJnUvbClsU0EuRSs2dmA+ckVpckNeP2x0PClKe3liJjN7fj9rKEx7NCxGPnVMYkNAPzolQ11aTkFWdVVt'@;
put 'b0pxME82LFBTMSpsQltxektrLkx8JHYxTC4rX2Apa34jdU91RjVnaHU8WzYlW2d7VTohSVp2T0taKTltOXZPKnc6WV5tJl9NO0k1SjdbO3BUNngmPXtSVTo9Jj1yOitbQkZnd1VsMHt4NHRmKyUlODEyZn1Acy9PeGhafHBySiJmJiU0d2Nkb2gqU35mYGp7U0F7MmMyQH4wVjVJNTYqQkxPOiRn'@;
put 'dU9wMEIyMnhJPVl9PTdkbiVae2w1QFR7V05lKn0mUTBLQTNaSVl7bGlQc3AxWjxZWj5GdWBaMzhvXVdQbWQvRWEhK1tZKS59RmhMUEciIlA1emtTSSlJaGVgJEtzbTd2ZnFHczhqZHs2OWZgYD9XUExAS052T056NHd1SUBObFAkPTdFRig+NUFUW1RkOEdGcDNhNTkxU0p+X0BpWXEkWW8oUVsk'@;
put 'U1F1UkpyTT0uMjB7aXl6O21TNHJaRzZRd1kxVUpVLn5mfGlZR0QhWCpzNzFLRCFjQ2xoLmFJdmhrXV4zcHFnPFZrOD9lSmolem8sL2pXTiRMPys2cTteKkwkOGlRNWBxTnZ9cVpjZj03ZjVEM1prdFFQJSpKKnwyZkVRNWJHbn5gX0koW0loPGVrclowKzNDVSJmX3JnMG0/L0pMYHw5JG1MUCs2'@;
put 'WX19QE0rIk5fQElmS3JQeSQ2Qzw7ZVhZfTdxIzcuViteYjQ3dXA0WCJPeFhmLjRFNTNWPWJNdEh5ZGx1e15pJEA7X2k5PTY2ZCZAXmVoXz1xQWQ/KVBsP1dJPHFKLDJmb0lzMzhyOjFYY3ZGIUFTcXE/dGFvK0ExIXlFRDlNcS87aTJFRGo7SEV5S0JbeVMoTUVgQk1+JjU1RnZNUm1mQV52Oy9D'@;
put 'dmxQPGFEQ3ZrWntqLEwyRUk2O045WktLIys5JnBEKz5MfTxxPGIxMHZ8RWopaz8jXS4+V3YwbCp4Szl+UV5kLjs7OT53fHxbO141dWFOLF1NQCxaSWNONkE9WGZCd1Q4JkhgVmE+fXtrd2Jrc3NjTXJkNz5DXmQyTmdMez4zNks4QSp+ck1pLyUpSzVkbTl0Y3orSGFzUjZ2PChlI0A1LkgpYlFC'@;
put 'VlpTcWFPc2pDfDt+Jj17cFpeX2woSnJNRiZveVAlRzRUV0twYXZ1aD9pSDMwNUg0PHE1YW1bclNXbU1oen5vdW1mOXJPTkElblNpeVFWLDt2cXE5anpjPG5qaUksREpRPGxTJllMbmRTcWNfSiM9PWxLcSxmcFJZeS9BWzBHTnp5V3Z2fEE7L2MlNTljYX0pdGVKcUF7OmcmUG04fl5NKzopPXxv'@;
put 'MmIpOmJwUExgKW5iciwuIkgqaGAuZ21zdjVLI3EuZSNyOV85TEdRPShuXy5FWExUMmc3fFI8VjxZcHNSRjAiWHI9eFs1bmp0dkgwN2Y2JCZ0JFVCMmUmQ1cxNDJ4UGhBRTJZUE58eFlrSyhzdnkkRywlK088eVpVQCI6T0xQKX1UYCZWd3U/T2UvdDchcFRhL1JlPHBwNWhjWilRVW5gbzZKUDJd'@;
put 'Wmh3cjlHamFEQFEhVmpXSiRjNSEkU1Mpc0ZNcCtDOiMhRmdab1k1diJlNmVGe3VVbG85ZF5TPTFwVUloOH5DKyJHdi9hQEtBcXs/eSE5JC9gcWhGX0w6VW0+VkNSaEN1fkR5YjNjVTNgSSJSXX1FWypWXUA9O0hHT2AlJjlEM2M0OWdAKGVkfHxqK0pDdmlPYGluOHZvaHh4ZyZUOWFRb0hFfEdS'@;
put 'Q2x6NU15djFad3lHeXNTJG1wWCMhZjNWWDxdPnk7MVNKIWxsPWYqKyF5ezZOUXZCalgsU3BDWW9MKjgjTzxNI3chKylYQmpGZWcqeishYENZeDg9OyFPOE0jd3dAVzI9Nk1jaEhFLGJeR34/U0d0JWpaLyF5NX5VQV57KiM6aGpObnthQCRPPTU5RER6XyMhRjwxJTw2SXYhNWtaN29tUDIiIWAj'@;
put 'Oz47MTw3Sk9nV1lmYmYpVF4vbD1dIipSUHl9YShVP3hATG5+YiJBVzFmfVV0JkQ8ZXhFOituRiFPPCYvYnNTK0pkTGpMNkFXcCgkKno0KT0+VDFOI1ArY11VTzp8YT5NdiF9dEglQUNZTW9KJDdpQjhkIz5iLGopd1E3M2ZAeiVWODw+XU85VG86JXJhVnJdQ3JmVDwwZnQueW9oXmRfblVKVyZl'@;
put 'cDEwPGI8dE16Py5kdnleblswfC88WmtSSnQ9MHxZVHBaWCouL1ZbKGtkdVVVQDFIWE9HS0gkRzBQUllbYFcwTWF2T2VDRmdscy9HdiZDRzxpUTB6d2I1USpkcVdoMDZ9L3EmT3VhNUFUMXoqTDAqeW00by9YNz04VnAwSSklLiNqO2tLUy9CL086PTNjdCUhWkRzL0V9RiZYOTsqOjFmJTJELjtk'@;
put 'UlV5NFdXe3AmLi9Yc3xCfTg4aHohWSg4aHorJHJZTFkhOlQ5NnYxQFFTfkVSPntKajA/VWdKQmdMW2NPW3dqKlRfT0g/JGk6VyNgeWFFTWopPShYQ3xka0BMV1lpOERVNCtHVHNHWyZlenZIc1MkRXNzLjBKTUA1SFpNJCovZnMreGI1W1Y7N1kpfXIpQGlRPjV+NGosSSFrSWxRVi9GOm9PQGI/'@;
put 'KDhLNjlMbnY6VSNBIz01OEpJXjpmVipJNn5JO15EYyNhcXQ4allKOThDPURuMEAibGNnPCFYJUgweVhSajA0YSlSRkhXdyZIcFQmNjFjUjhFI1kxcG9pWHZde3NgemdqcEFUPylONVNoMVp+P3coM05ebzJKcXsqP0Q9LylOUkhnSVtjQ34hLE1kLFR7WmM1ZE5PM0YqOExXMnM1NC4sUn5qPHYm'@;
put 'VkhRdT1LQjorSkttPiVbYDw0ZVpoOjZqKy5yMn1Kemh8RXhvcD5CPU91Zk9MeC9GXzNFaWpiYS9SdW1SJFNVPGI7W3o7NGdjPHt0PSlAXWdid0VnYEZwJE5nUl40QEZgaXk0XUpXOU1zK1doSXJLJVlNM2c0THlZa3Z2JiRwQC99OD4pYGtJcW5TSXNBY24kXmNURUNyMDVZVSU0Z2ExS3JQOVhg'@;
put 'Vm4sRig1cUksMDZoOjw9anZtc3dKTCkkejU4OU5gYWghPkp3VH4odCFkY2wkOW8sNnpDMDZ3JmNxdlsuWnUmRF9nU0U3NGIifClbbDVtSHJiT0R6WVhaRno/eC9scmhmOV59Jj1jLGJfJm5oMVg8KVdEPkZ8MSpZXWBGXntfLFo/T3VsY0ZXKnFjUn4mNHx8LGxIUEpBeWQmXWNCci4rfjBwZENu'@;
put 'YjJPSUt8Q1tvLk17WnRkQip4RSxVLj5AMDxUX3J9NjxVWkg0I3YmeD1sKCZiPUFddGVBVmN4YEswJTdQTVt0QGtoekBpYSZ8fHFtTndueyMsPC4wcnJpcGZCaD9rZj5YL2YrKzN8SHNxcHxxWW43PmBuXVR0bS9JQTFjMThoL3FNNFJ0SCVjTndaOS90bSopWXM6a042fl10VChbUm11bzZxfDRn'@;
put 'MShZb1MpOGx5NGc0Sz9NPX5DQD9AViVKTm9yQH1UUllsKE5afC5VTSNfOX5rVj10U1lXcU9rVFB8MVN4MVQ0WnkvSSs3SzRBdyI9XTs3ZDpmM31hfVNtLEtUeF5lS09SdDxVOihlYUQ2bTQ8QHJyJXFkR3YxTyhdX1Mie3hDWlgoVyYvc3NCSltkWVB0XnBNIjxAQD86MDc0U09vUTohZWpGREAq'@;
put 'cHJPIz9MSEtjYSxZXWg1dSNQLlNiMmxeNTZlNU5sSVcxPlZwTX1FXSt4QTpQXzxONzg8e0RfPE5re1tLTnF9SjBoUT9FOD1bQEtGcXZaX1tJfGR9e3NNUih9aj5heERePDcqfm9VRTpKLylWdjYlal9bQDI0alkkeHdIL15ubF5zWFt7d1VSbCEmMjh+bThlQnlULlpuZjdNemNGe2lxMEBXIk87'@;
put 'QDxbSVooWVpPKF4mZigpOWYkMkQyVm4jTzEyN2R8VmwlYTYwMz8vZzYkMCJ0fUhbPGBnWV5IeGt5ZSI5KnhJZ28oa1kleyNjejZeWFd4dGd8O142bDNoTWxLTD1eRiVyfT8kc1IxQGhoeSVNb04sOVUyKl82U2VlYEVZS01AR3FFeVV5Yi85VGZbSDBJeWJANE9dSnc+dTVkI2prMDNAQHQldnVf'@;
put 'aCFkVnUxdTE9YWh9LlRENXdATFo9bDxwfTdQJX5kPktQJSNlZ2J8VFdpJnE+NlJXUDE1eU9wfVQ5OWNoOXEzUCQqcSpiYD99SXo+Sj4sJjIqYl1wZkVrIyJJcSxwbz93RmMmLGdxOl5HRTJQZGVAQU1YT3RSNCRVMipKUEUuZ2hkLnZ8Q0M6bTFNIUtlYFRmIkJqQGkuJHBsdTcpfnZgSkhbSWZ0'@;
put 'S2xzVWdVQHBpMmB1LCYyYWl8bklSK1MmMGpzRk04Umc6Y2AjYmF8ZGhASytJWig3ODM5TXYmaGRzcns9LFc6Zm8/VDYwUkNHfHpIRjE6PyZpY3o5U2dFN3Q8JClqQkZDKHY6ZXgzXXk8bHNZRzolWjY/djhAPis5aHdWZUkjS1F4UVY/MSo7QT1iJClhXXtOfmwheSEuZE9eRDI7MGhiUWw4PSxY'@;
put 'cllPIXRleV9EKTdsZ2J+XSFGJCpzQyUybjFEezRvP245cSEocCpvKX0jV0VneGtURTdrTmR5OFQjR1d+eS5xcF9dbHRHMml3aEpZZFR7SUA9WHhNMXZZOkw5PyUvblViRVVjbFp3LiN+ZnFwd29BfDhhekMqOz8/MC9UdmAyO0BXRDkqWDFMRj40Ui9fMTtAL0d9OTpQLzZmJTlLUypqXWp3UVFG'@;
put 'XnUhY2VZaXp0Ky8vVjByKXdsVEpFUXhAUGlEfFpPST07b1Q9UStLXndjRi45JWk/bntCS3BkNzx9TCpMZ0ZwJm59aD5JVDNQc1Vzc3ZFXkNaU1JpJiVzc3Z3UCVzamlPVXB+ZnhTLDtpUGVnOlo4KippYDE9JWl3OnwhSj5oKHcpdXV+RW03PVNsbz8he25yb31SdFFZRnQhPH1bJlQ2UlJXYl5T'@;
put 'KHVsKWN4SW46VipAdS5MInVCayhPOG9PWl00Nz4iMVpMNytIVyxqeSF6emZnb1hrTWFbQiZESlJpIWRWZnlIe34sMz1jaD8rLGp5ITxySW5nYi45JWlhSygyaTBdO2dSMmc0S2RdMyxBJD5EXnAyPWNoYF9BQEgkUSs4Z143MmZlV0Y6LDFbaGRoNDd+Ki5pZXhaa0xxSGoiKDcmZGBUZitpUCUi'@;
put 'UTNQa3hXcFQ/SGtATyRsNkAsKml4WHtyb2R1SHlPJSxqZjpqKHEyLlRTPGxvRjRvdyh1XncjdT1pTFNXW3BaUGs2d1BocU0kM14jWHg2N2ZLSXFnQjchQGg9VClOI2QxaGlpe1J2MkpmdG5EYiUpfXJaZHkwQGBbUUAlOVIzQGQ7YFAwWUY7VlhfI1dsIUFgNi9GYUk+Uj9iQEBrNStKel5LKGgw'@;
put 'IyoxWjk8TFl3M1B4Tih7TD4jRHJRS0tsUkd2PnYrIzYmPEhUQXNXNERKa3YsLE9scXBHWzxXanE9cVRaPi5JPTMyKTNFNz9tZzBgMHohTkRZb31IZU0lXSE/QTlyelBje3dCRDFQN1JHXmVrLjElbzo7fG07ZkpnRX5WSl5pNXhYXTRWWnpZenRyKTJVUTUzNjtuUnFvXz0vP3IrfXkxKmB5cCZ+'@;
put 'ZDVDXmM2OVdsY3phPU46LnJjSSp3RWBDXTZUIyooMSpjI2RXSGpDdFYhZzZwdiM3KVZwNlYwXmhzJjdXPSh7LlFGPF8lbGNNKFRlYixWRkladDZzLFRuJClNTk0oNGNnbj43NlQhOnU+V30zMVJ1Im06bkB1Vzk7OEMkOFIjKUlgfjx5SjlTWjt8e2ZWXjxMe2F6PEoiezNdOG9mRmRDU3VvUmRo'@;
put 'UC5DV2gya1ckVV9GbU11TnJaP3V3I2JibG1IWGdMeUdrUDZYX0JUPmhGME95ZCJMeGlsIVdrT0M0L0UwOVp1TT07IUlkUz1XJkIrRUN5Z29pdXZjVXFOSiIoJEYofVBVZFh8JHBiPi5FRVpCWEdtUE9iV0dWdF10dnY4eVohWCQ3SGZBMUZPWWhMUUBIXkkzNDRAQ0tCN1YmeU13LDZJdGE/Vktx'@;
put 'Q1pvSCxyNEROO2d0WEBIYSZfYDluM1BbRTIuYWlzaGE1XUg2ITQlX2dLSERANjlrdW5WcTl9YHI+a0tucmB3ejlXZ0o4UnFDVnNKWl0yS3B7Uy53aFcxMmhrPDxwZjVVaUAqKC5rNzU0WjwxJGt3KEt+eVEvelVWL0d2L3JNX3BRUmdIZldiKmVmbj9sZXpgYTwvM2E3JT1iI2N+NCtJRWMzVjJG'@;
put 'P0VvfCo7JW5mNStfez5JNi5zKCUhJkduO3xTXXslR1Ele30sWyRBJjpwIiVEL0woaCRoOlFXJn5Ia1BhTTN7PXx9QysuWjFATG9ELC51WGxUeSwwPFsmdV93PEU8SG9yRCtxL2hXSV9UUTY/cnxzYHE/JW1BOlledDwuM0dXbGBbYXRrZm96NXtjcn4hclIsMCE+UkI7fE9nN2A/OStAKV57ZGln'@;
put 'N3I9PHModkZ5bVdWZj03XmRbVFR+MFtTXlJ2Yjk9IWNQMHQ9JD0uRXg+TD91MnRsNEMkOzpfa05CMTBhdmgrRlV8RUkwYiFqMyNBIl9TVFopWGhHd2YmLkVOTlV1V0JQciZgbVJdVFBTKm1tKUdrJDhgRiZMNEVaUntNZ0VXeEQpWFguaU4wSUVZdEgkYm9mWWtQSVtUSC5oTUVfUGZ3dUkmaiNJ'@;
put 'ZWN5LDovfHI3RD5KJWtgaXhMaCN9ODRman1yem88VDJSeH5rWmBeU1FaMTpdVSZ2YHY6XmRrbTs6WX47OUxxckhKO3JQPHBybHReTlRCOTgwfCk4V0B0ZjBnN31FI2NrMkQ9JCJYNDVvU25eX1QiZ0x4RSlHYXE6NlN9UHUmRzwkaXJaSDBJMklRU0pIMywvVltZMHRKW3grRmNydjVUYkIwMWlr'@;
put 'OWpPNEpzQmxOJnVuUDR3Tj1MZFlAfGNxNiFMKCV7LkV1X0BAbU14KEY5Z0UmWT5VWyJ4fnxya2o/Yl95RG1zTWtlJktZUkR8S35NYEZCPGlmaE0rM1Q6aUNaKXtSRExeKzZzKXEob1U+MC46dyM8QGtPR3lQPE89NzRtU3UlOCtoLHthe147cipvPCE5Y1J1bHdEUFtSMntadk9uWzlTbjJvOnBq'@;
put 'eExpR0F2ZE4zWCQma20sJSJxU3phYzRaOFpOT1NWbjdrbndxOVdTVE0pXzxna0NfLDlbPEJCJUVDQ25Ke21dcl5kbCZKckQ1UWwiaWQzQVM9UmJLSDdPVFJKenN7NkhsfDFJSis+STtSbHVLSlZxMHVGa3gwRmt4TT4/TFJJfkBOc1V7PGtYciVuX2NePnhsblA0bkNlV3tLUig6LjM+KlFCcDZR'@;
put 'ZU5SalZqV1AyYWV8VCpsMClDQXZGYSx8RTp+cldYVEJrPW56Zk1CQUFrZX1FQUh0XStxQlB1b0tSdit4OW0mZjVTbGFpcD8pcUdTekVGXlFWUSNQfl1LU1VJIShrbjFMOSk9dWp5TjQmVyVPYGhPdUZnQlF1b1tINUsoNUwzMnVAKkt7Pnk2YXY/R1laVm9qUy8jRTxnM2N9P1JiOnRedGFsNmJt'@;
put 'bTI8YCglVjBrIW0wcCpsS1NUKXVMRCZYLyVXI04ye2AhWXY6fWl1fSJZK2h0bzlMPzEhNyNZMiw9OStLX0ZRUyIsdzM5O105SClsIWVdSzFrUD4xVXBUX2JTU19xcH5scFRSeiRvWVNreD1iR1tYKSJAWzNQeHkvS25oOChAM3ErMj9vQiZ7I2dzfSt7PUI8LmRreHRiaShMciNYNjZjMjlhWFMi'@;
put 'Z01zOVlsOnNrX2VtU3hdTVdqJHljMF46PXZFTVBBL086bHBzOHdfWWRiJDhkIVBCTFNxJnhQfSw7QjspbD47RyhYcE51d2h9X0lTKnF9bC52fGhTTltvTiEpOH5GOS4ifUNOJmluRzUvT3cwSFdIPE9aTFZIfEZ3UyJpWE1TVnw2YWlkM1dRaShAR0EqJj0pcksuaX0rZStkeDckJmNDYS8+T1pF'@;
put 'REFHV086OEVgRl9eWCVjUUB+MCRAKmtUIjc1PkMwSjJbfS49KWIxUlZaMFNpM3MzdGtbSHpHLHxDITVufkBxPSljYkMiY3BDUGBdc1drcz54biJZcz5UfilHQlMvOVYqQz10bzVlI1J8UzRGcF1QUyxRS2t4fFlEIXF+Oz9bdUJqdC8oMzdyZj86IyY5L0BAWGQoLl0lcSNIZm1TNkhYWG9bVDdP'@;
put 'YDxGelNdZnd3X0loN1JubiN1QkBXeH4oVEUuNXFTbzgoMzJmTGp0MXhvfjR9I3g6dm9+YkxhIVZeNHtjMjFwMjM3XT5Qdn0+SSpaOHwjOUd4K0g+SWpWR0FnTURBYTxXODswV3NeLGU1NX1KXnw6XUQwa2FDcFBqSlBBXSxfe3k5UCs+dz4qMmBNa0ZMRkxGTGFpMnR2dXlKfG4zTnU9NWdsVEMv'@;
put 'XzFJI0tBWEFJOGh1NjdMOnZvTXJUMVhkVDIvMjs0Pld5ekZjI1JyeX5nZjJiTSN3RyVXKEN5dWpZXy8wa0V2KTt5VDRKdUk8fFRsWjpzZUVzMypNViN2alkxKUYmTEh7KWNUXkwuKTN+PHwsT2c7TEVaPj93WTlZViQuZk1eJWpLcDc5cztrWn4sQ190PHxpbT9wPHFrM11XNSU3PHBBfEY8KTNv'@;
put 'WT5NYylzJlkwQmx8Iih7V1I1WGJ3NW46Xm52Jit7bixxWD4/TGhqS1Ejbzo3OE1ULlVjI3YhPWhONkNMUSNvOXklfnVHPFApWihKQHV9Y09JNS8hPU8+PlVLKTokeFEzTG5zYntWaG5PQHckKyk9WkheQnRPNnVmRTdLZyw7KG0rNS9McEdUMHc1L3ZhT3AsXl1VSlhSYCFlQENnajprW0U/Zy9P'@;
put 'M2UxY01pZjI+aWtTXShBQUMiUWJBQXNJdFpBKUd1Iio4RmNLSWNEIlVxKF1gOU01b2FMKj55bVJRQ3VXQUFBQUFBZkRYTEBqbnUoMGxtSUpJYHV0PjN4M0oxemtGQDMxIzZaIVFzSiYwYllyemAmZj1SPGhbNDAuQXldcC4kbE5RXywzMCtAbEJzK3l0enYqd2pNfWxac0M3W3k7X0xzOio8Uz84'@;
put 'TyZzeEc5WTssZk9NMypfYF9AK3tQXWpbb31NPzdVOHA8NFNGcGYsYWdEJVkpS2V2OFIhUFA8SSZEN3EsWWhqc24hT117Z317bj97YHpzdnojW0RHYTVUIzgsV1R2NHdyZ259KlBUYEdLXXc5VVFFUHRLKFAwWGJtPilVVz4/YjhKWEVxPzw7RThTYzlvejo6MSo4PjI2KnFIeXpkc1h5YzIyRS9v'@;
put 'XjVHai83Pyl0O20vSDM3MzkwKFhxRSxdV01Wcz5pVHNbeGtzNkpPbyxXYDA9aCtJRW4xQlZTWzNDQlN5Uy55dy9ramJTSWA4UCtDUzpbcW5MSTRFQy4yMH1jY3R4JUluOWpiR0Q2WChic016WEZEezBLfD5QMXZTJk9uNXA/fnsjJD00OSQpI0JGR0U4XnwuREQ9cXouVHh7WE8kbVNEUn1FRCNE'@;
put 'WzsySWQsK25kdjQ5K2B7TmIldyl4USUvL3U3VFNLND9pPjUpK0hOTlB7azBFc2M1RykzfWVWdk9FVndUMCxOeG81eEtOVzBhQk13W1tGKyZQL1M1RDFDTWRhfCpdJFROfiIkOkFVX30qVzdxdFZHKkAuL1YzP0wiS0tWWix2NiREKzxudW9ybTZ8IUxWIUgsYjlwaHRbLEU+YTUxYyJmWzNTQHR1'@;
put 'PTg3OS9GcVJ+WEhnenxudFh5ZjdzW2tYOGVLNyNfekZbNWV5UUtYNE56cEhdYSF5YVhneDt8JT1GWUtdc29UQ2JvTThmS1taezBabS9bIzssI1M8bFk4QnVbdGhUQFtYVE4/Jl13KCwoM3RyYTUsX3Z7QWF3c2JIJnlOMz1mLEFUV3Y8T3ZKYU46KXR+dTBdcklDQCp8dUx3IThmI3I4RH5XL2Nq'@;
put 'VXQxeFIzRHgkfXcvcFRuanh8RTpYYzhjdUhyUXAzXzoiMk1CSXtGKXAhfUhuSzRuPmIpZkUuOjNyeGJPV3wqRlJuLEtvKXZTW1o7YFRKWUR0UDFaWW9ma2VsWyF5ODBeNnYjSjBNOVFMQW1BIk9wLzV2Mz08JkleKDVVIz5wYDxILz01LD05TVU+cTMwRlVLaWozXjFpLD57ei59bjdneEprPFNN'@;
put 'L3w/Mm1Zc3lGQ2FEUnBOfDQhOVpJdypbJDc+LyR1V1dDL2FXOFJ3bHZzXUtUeFsrS0M2NFtFZlJpOHozZTxHPm1XOCNHMi9Nd1llSm48b3hWJD5NRl1mIV1bQmtxfUlWcGZudFdkZn5FYV9nPyMpKjwkZyNQNjxISmdgRlNjPC56MGNfUXVIZnB1VDJ2VVo3KEh8N2JHX2tne0IoSGN2TGBRIW5f'@;
put 'eHIsL0pzMXxoRDRzezY+YFdzeXNJa2pMdExGOHVaP05LX3pPNldyK3xHdylFdUNEOHFoN2lCZDZWYm96Q1tdTWs8ej9POVR1YzRVZHk8Xz50ezlxXVdSK3o5XTVsOEg9SUpLRnNGVypPeH1IPSN6fH5pY0FVRUJ0KltlbiFoISNCU3w7Vzw6YHReSi9kPTtzci5FVHdeb11+SkVtbDZ4YCM7UHAx'@;
put 'Yl5mLDJ9NV5FOSx5REVRaVl2a1F3SWJBTTgqXWZOR0lOSHE5b0NNMVs5fDU/Pm5tVmUmTGl5aGJMb0pKc19dR2UwcSlkLiNndF0vOHwpN3k6KyN+Ynpkc0oybGZ4aG1GKThHckg8OztuMk4zMHpdQ14oL1Z7IWpzPXI4SDY6bjNOS31ZPnBiZEJEJWVvbCIpQ0NGSXBtV1IlOSUkMmFwUDZsQjEh'@;
put 'Sk5QPzZXYyNkWTdGfHB8YVBxVDtebiFXUl5UbnQkRzVwIyZrN1AuWzhLPCgqKUNoaGV4Okk9KiRiLFRMeH05ZXp9KCE7bDVbQmIiUDU3OD4heHxjLk82KiYjRF1CPkdRUUlkLk9MRktmUCtDZDtxP0hpUGVPLnNsYDJMekwhP2xCcjwoJFg8RUl6KFt+YUxLI0lsVFNzRCMsWHM7UkQ0RShUVD40'@;
put 'REdGend1JTlvNXQkIU1ZfHl7b1Z+YyFiZ1RiX15EVSJZIzolOyZsL3hmJjF7Wjx2JTpSZ2UkVUg3VldtTlAwOUlgPiI4RFhQaU1SPG9kKkpeVjB9JVZydD91Z1B7OU9ebVNrQkA2U2RVY0BUd2l1KihecGxPQjd6MC9OXSJiVjgsW2F8QCYxSmlnaW9PLjx1QyZVOnIlVEozY3d+Z0BVSW9AJFZX'@;
put 'N0E5QFg/TUxhS2I3c21WWGBkUXBSKVRMNzhJbU9zPCsyTnJWYy4kJjwkejIoZkYhMV9zW0w/Uj56TmJWWzQubCVOdWFOZGNsRyU8YjVDbHpWdCsjKVVjdmA+eFQvO29YYU5GIXMwX0tidlQ5VUV4JGVHOF9nYDBWak1dTXhwfk5ZSUtbJkUoPmAlVnM0QDZKT1FrTHR9aXIjMm1tNzJmfXRAJDN+'@;
put 'Vj4iWGFrZmg2azBCSE84X0FSMUcpPEMuL3JvKUhDeCw6KDNPRzlfWVZoUElJVjF7ZEs4PDt5QDx9bXhfMG06KjMzdzEqJkU1KDc7fCtYLG1SfmlWSiFeNmEyO1FXXU0mRmEhYl5LLDAuPyN4cGk+IVQ7JmkzQzdwJkdwMnFuSiQ5Z1B3T29SYmdHX1FNLls/dWJhJWZYZDg9YntLbkgwYVdFPitV'@;
put 'PXVRNmhzOlBPUDwsVSV9emAqfHw5Qk1kYDRQTWg/MD42I15wbjtmPXJUeyVZJVQ7XWYqLDI5JHFhUUxEeWZffmJ+WWYqaFlKMiR2NjVLIy9SX0ZmclAsYlMzPCF9Ijx4SHJgSnJVeEdZa3Ajfn17Z1lYY0g5dSo3SytvTmJYSCRIJXhON1dPRzFDOkgwWy9hKTBpVXNqaiNDcih4YWIkIi8pVC97'@;
put 'OUU+KSFlUl11MkQwOmVBInJ+TDJPcVBdZ086IiJjYD43fGZEXWA7JTk0O3Rze1VCZ18qPjA7ejVIMGxScXwlKmklPzcjQHRBKGpUUjdZYiF0Xk9aZ3slU0l+OiVVPygmbmZ2flpTNU9QUyE/WEB5ITsiQnRpO2pMaHBnVXRid2U5YUpEP2lLZ3k6fF8+Ny4wViNmOWouZUhfJjIvOT0hdGhqXiw8'@;
put 'cF1QTzc7YC5MbXhoWXxrSGkmakJXWVRPdUEvS0pgL3xkQzR3OGR9MEJxNy94RTRePjJTTkQ5QFtSOUVbM3A4d0I8ZS4uS25ZJjFgZEp4Pik4JlFbJVp6TkBqUkBSeCF4LE5zIjJWaH5QLzQ7dGg2NF0pZnVENW9pP3tockJVL1o5fVlZaGE3MmolJlFgU0FXeGFXN1BoelVQViN8YFBHO1c5T24m'@;
put 'OiNkTm5TPnpmPTxaU2BCMVNQLGVMJiRfJFFXUDFhaF4sajdCUzhqeDcpSjllbVhLbjlPWGUwTSw4ZTpCbis9QFNHd1kraFhFUkleaUBZTT5sR2ZpUHlnPkpuW0FgbVZYd3UjKCFsV1s2YUBgLjtiPF4xKTZYOWNKWUleQ2RpYEA1PlZmNjtJRjdzT0AqWjZyXWU0KDBGK3AsSXklYnYzN3ZeQ3BK'@;
put 'e3h7Q1Q7VlJZb01HTHdZZikmTUwsXzhXfS5oVjZdcz1+Py9aeVtNbmo/YS4lYH4rOWMqZTF7Vi4wajcvVldSVWIkdEd3KmxySjdWeH0iVXVUdmdwbTNNY0ZaLygjc1YuU0U7QnI7ZDY9cmY9NG48aCwmKzpQJE5kWng/M1tZKU9UTGN2fGdNXmxeXURLYWZ3QDtBTmE2RTFGfWl5bE9HUU44VWFl'@;
put 'QFRVQnZhTGpkeVMmaCl+b15VdnpdUDYlQ2FvdWpfIVlvcUF1WWtiNCldbkx2WzhzOCNCQjw2ZitdaD1sO0RRKmdQQjI0a3pjXVEmKFozLjFUWXlSMVdiNCJmZFJOLkFQe3QjOVN3alJVNlNTQjRDeXslaGVZI08sa1FhTEJoOzgmRkE9R0gzW0lnPDwuTm46Snx1VXdOeGtnXjJmMjtgKCx2QEd9'@;
put 'fmlKQ2kzenh4S20pL3k1eCpPWzE0MHt2WFtmWUJOaV1rYDdxdkpqdlNuW084WV5zSzMxTDlQYz5mLkIsTixEWUxYZXckNjZ5Wyp2UCYsbEM1SGwzJVp+Zl1EcFpzfUhCZFJfZ0NzaklUNGIhe1ExK2JObkIvbkM7Zkc2YklIM1B1TUV8SHQpajJ4Uz1uaFlUbVtTaDtAWkQrKCkqOChQJjJyMm94'@;
put 'fXZbOkxqWFQ/VDhqTE02OD9sbjlPdE55TChEY0VtbmIyNEk6L2J4fHIySzw7c0EoMUVaKW9VX0kqNzdKMCh2TlJNMFIifVd+cU5GWEZYL3s8T21+KD4mV0JmT1ZHT1s3bXZbQVA9LFsiVUE5SGZ3YzlVVEtLPVFUNTgsWXpaIXkydUBtW18pSjRpKTFJWX41RTJORWQsY2A9JSJoWGgrXSpnMH5G'@;
put 'OTZyMnB3fH5OJEwsWCouYW1UVjVpfmRjYT1RMVJYQXMydy4mWH4xa2I6KmZ2ZHxObVpXeSosLzZFNEM7b04jMEQueyRtdD5PXWckPXc/ZD9kdlhBXkJFXkdjKTJrQUJAalI4bzpJM0tiIURmW15SJjRRWnlsWCtWbXR6ZGVqSiUsKUBQUXhvN3oyd15AeDhURyFoMiZ0YFFXQVhjU0hbV3lALGMp'@;
put 'czd4cXZOWVkwN2w1WiVzIWVZVFFrckZ8ck0rcWI5Y3gmMndCOVI0Z0IyR0l8TUUhX10iWGVQUSloS2VRdCNMS1clfkN8L1A+LGgpcFZpfGBKI3RoYEFfRDh7cDksWkJ+fTFbWWs1Y1NfW0pTM0RQTWZCc1cuIzdBYX42QF5JeiIoKHEvQ2Y5TGlmMDc7KzZFTSxCIjpLTGAhbyNgayNmSyE3dkVF'@;
put 'VDxWNTl8QiVqVSwlL3huO1ksZjNZOU5OR3dyWjRFWnRgd2lnd3hRdjBpbT9QS2w2ZGI+JSwzcClLdGleREdzTSRFdyJLN2l3V2olXUBze05gRSxnNHwpTzEsJj51SmBYfjlDMnp2bkZwb010KDsmaGw2Yz1CTnRNRCwzSkdkYXN0WzRYSlRpT0FsWFh7biFBP1ozV1ApRzxYIUcqZEFwKilqfkNu'@;
put 'MFZsfDJzQjhGTUZXayNwa2F+eHF7fXc7Pj4zNnJfLlRdWFssZ0xvWks0eT4qOVEocm9LP2UjZyMmKjM+cz4iQFEhLmFUUllsdyw7VlZXZ15VOFlFNWY5XzE/SCp+eSQrSDZFXl06NWhKMFEyYEokMilEX1J3czA5Ki8+ZmE/VlsxYjdBc15MQEosK2YyOGVGUiFuLDtdZ3NLQyp4O0wrb3xsVUI+'@;
put 'eUpHNlhKeGhbZXROITo5JG8ue1ZZclR5VGAxZCZ3Syh0M35OQmlnNz8hXnlqTE9ZYl42RmE4Jio/R1pSTU5pVykzNGxSZ3tEOkN5PEtPWF54eHZdY2kyTylAYHZtan1TRTNyPkgrIXY0W2JAKyhieWFTL3UxclkjNzhKcHxDYWQlK2pyZEJEZFlMMDYjVUhPPHw0QT0+Z1Z8Kn53MzdtOkpmcj9s'@;
put 'WClDYENJX1lfMjxdOmRXSWopYDZvIXxZcmhWc31IcUVVbW5SN3MzbCpDSXs0ITYvQChwLmk7dTxbNi9aTGw7Zj0oOzVUO0JpbzUoTlA0KWtuJSxDd21saVVtZ114YUZ5VEYoSnQkJHgvcWdVbkVQZzRWXW5NM3QzMmYkKyJbLE5UbUlfOHhLWDBVWU48Zyl9dT88MzVWPV92YmtjQSFUKWB1Jkkj'@;
put 'bW1qMTJpdDRRaiR5al1uLkBUJCozWUNZXURKbFkxTXY8JCk/MDUmT0RZO0laYXFpUTBNdXdmVWchayVjLyk/JCZJcE9jRDFnWDh4NkNje3xXIyEuTjdjUHchKX5EcTtjYGg0OG42e2VZM0x3KDYmJkRBaU0ue0dmdVFVVDEzVWBJQEJNSWhZKXxyQnd9c3tANEl9c1JxJWd2N1V4I19MU0ZMTyNK'@;
put 'MkNwQDZlTyp8fFZqTTdhWGopOEBWL2QqZ0tncyhQfkAqPSMyLmZtTU1Pe0hqbyloNS5zVE4+azpAOEhuYSpzcVpQNSNHaF02JmJtN2E4P01sLylGRHRXKiNDcTNSYiJMU0tiZChMIzdiW04+PTViQVszK1FNQ2RZeW97MkBvUm4vKFAyMTp3TFhXVGgoam9va2JTczpMLk1haGcxW0ozT1N3WjZC'@;
put 'QkVRRzohbiZOVEowfV4uWz1xejpuRGleR3pnOnwhcVdHSyNdTU5SY0wpW3VXVG1ZNFQ8VEVhYT0zcUBZeHpNSS8sO2M8enI1XXlIKltZfVU2b1s8MjJqMmkpIVsjcmg6Z1pCY2pIbUMrVChkYntqM1Q9PzosQCJwO1Fdfl5DKTc3b0lUJCN+TG9oYD1uYSttLFQ+ZExoWE1dUlR0OWNNdTYpNHFJ'@;
put 'V2ppQ35EI0hHc3FaMG5vUEdGQFtePG94ZTFuTWFoSH55Mk8xPTdHNiYuLjRdOmdFY2xpJUUvc2IxLnIzOmosJl1ZaERXNC89dnZPKDt7WTBxbnpMRXwiU15wS11Wd2VLbGxmRnFLdXtHQEJ1Riw2bXBUZTtZfElXcT43OG98Sy57KU9GW15CVlBuNyJ2Q3wqaj0lfFhDcWFiSFUxSUt7cXZuRG1B'@;
put 'Q3diQFsvJXkpTGc/RWY7SUlRLGk/cVE0ZUY7fVtgPGN6ZV4/bnFqQzo1QFVSVXpke0twRm9Jb1IsNkJzX0I0QUs+UW85KmVeRE5hK2xwP1hhVFFOMl40MlplV2kyP2Y0T01gU2RBImtoImtxSk5yaUhEQjQ6WjJmcVEwQHIhLlUkYzslKHk1QT5oYUFaPXhSel0wanpKPElHXUEjYm1PYVgqKUFz'@;
put 'ViNWaElEK2o3MiRXdH5LRClSRDUkY3Rrcy9dPEtDPjVdY1poYjkjeHNeSChbVWNZI1klQ2l1fHtZOFBQMyFIRWlALlNCMFthWXFJOUFLZi5XX2cxMWh3Xnoqfm1jcn0zNCRjanVHMDtrTCZMPU8ieXJ5bS4sJkRZWlRTTFY5JVI3UkRMRyVoP3F8I2hoU2ouJix3P3NjZWNAd10jQlNUfmVLcHhm'@;
put 'TlZKVVRRNEd5Yzk3Z1EoM25+RFIqIV9dYCwiXS9vQm89IiZyUD47bDFBPyRiL2YmRjJEflh9cXhofT0lSEJ4KEYhMT9FflRzIXxRdUlvLzJ4T1RAVkpWL3BQNmRZfk4vWyRpQSNNK20hKkk8P0dKUnZueTo4W20wRCw5eiZ7LFRMT0xANnFfUSVweCVAUUFGTTNyY0FGOVh8XmpeITNFRV9HZFVy'@;
put 'V08uT1tYTSNET0E5Q0FZLDczUEI4NGEmS29uMnhVQ216YFZ+bk5HJF5kXz5XT1lYel8/YSNASnRgPENuNkg9R2NFI2p9aiZqJns9MCteXmVxN0l7K2dRXVB7aSs1X1haYGVoSDpyd0YqN0tnW05QTzcyNSxkSC8zTU1GPH0wTjIpb0goVjRmV2lkJSIrU2ZdUkteLmhqRFhEdWJXQGNkKzJ3SkdF'@;
put 'NH1iYmBFQEFKWTBTMnNSbTFgOmRZM3ZtUzNhaSZ1JCpdZ3tFUXFrfTw8cGJNO2hyWE1pT1BfanB7RkIhKjtnOXUwKFRHcylLeDlQdU0wKTo4Qk5eWmY/QCMyU3RTeSRTfF5HXUQ2OWh5K2lVbXQvT1AySlhVTmQwOHhfUGYjWm5hcTYkdHxdSSVxJCJleiZiJiEwRmZNTGB5dUBZI3Vufj8oImR3'@;
put 'bEJeKFI9fkZbQ2l3Rk9dfTI6MG5lWnxeVCNXYSs8MEskRV00S1lJI1MoP1FFb09uMHArcUxbciRnW3FfMGZSI3UuZ08lbUpaRlIjSHhwXyVVKDkjcl5hLnVdUVNUZUVTdFE+MTcpQjopW2dUJlkpU2xAIVpQI3MzQSxvTTlJWlJVJjViaG1wbD8+bjRmKWBzU2cvYkdBNUlyR2Y0OmVTJngsVH5i'@;
put 'a2hTZURMZ0tCZ11sNFppL2RUQF0zeihqWXhqMSZRaVBrQTB7Xzh0XjwzbUhgVkpHJi5kTzUlK2FbfigoKk9KZDxoYnlsQWJXUCNEJmMyTCgoTzZbJW5PbD5nT0hRLy46UjYqdTpTbmNkdDVTV3Y1TkYvYWZ+N3QoU0Yra0ZbTnFIR1pJfjJZL2d5fkFwNDVIdHhtMnRKMkNJbGpZPi5ibzcyX1M+'@;
put 'TnBdIVlqK3FXYVljLCsvMkA6cHMpOVBzTkBwLlpQNEZQayRpdTZnVXJUL3cyOSZpZFcuaC5MV2R5YD5QPWNSUixqemMzU284cD5IJWk6VS45VWV+OygiTlVlUmhqIU0uSlV9YXlzaCZgVVJobj1UPCtWOV1MTm1hVUBBUiteczgmW2xdYX5MNSFzMmVNZiFASlN1XS9hfjZ0KDgqQ3dCXmpsXih4'@;
put 'ZXQkTzt8ezNATUI1KHNRKEo/JWphZCg0PFV1eGNdL0JDZFZpbXguYFkhcj5sZz4kTTArYGtBLnxsT2BqVjxHKFIlUURlfFRXWH1dVnNjb1JxcGZrPmRgPUxQcDFucHo1MmtLKkxYcixaZEhnM092bE0wOltYeixRYHo8al1JXUthNDhvdDVSOS41eGtkdk1JbUB0Rkpzfil0dWN3ZFF+WVJhTE07'@;
put 'QzQkbm1KRj97RnddM3E/Q2BhdUhhMkVpNVBiWmlZfFQ9ei9+RV1JSXA5Rmd3S1YsbDwpaFc9ZHIvMVZ0QkkwTE1eImRDQ3VKOSE6SFJYZTdVLldyOTo+SnN6KVZ7V0khTWpYNHx2NTN8TGV0YWBET1VIbUkuTVgidlM/W29yIUF7dk1ZcmNvPUNiIlR2SGRFaDQ1RiMyXzZJVzoqZ0d+OTxgKn45'@;
put 'KkFUKj0yaj5LOE0/MGZ3S19fKEBlOGlGTTxGX0JCU2w8QnV+QD95R1dtTHVuP0xXeC8lWVd6YmUjaWhvYlYqOWtJV2pbT1YsbTVHXSV0Vk9MI2tFWSF4eTMrOltUQXsrTEo7ak5dWkR1fnpVTWB1WmUhakIrN0l0UCpGITFTQSl9UClabUxhVTEqSz1FZiRVO0JtJGREWnckQTdGeU5UOTF8Zjsu'@;
put 'UVJwTTNFcTBoZXA2TjZVUyFyLEpLNHQxQmxHZkBAQk4kJDhVQmEhfSk1OUNFRSxbRExaNG8/fChrV3F6bUJxdEB6JVhgIUw4NXovYkkoai9HJkxQaSg2fWp0VlphIiswb0hAblI1IUNUaXcpUERMRF8hOTM/Zm52ajhjdS5xOSsjJERNe2Vhc2lTWl4uQ0FORHV7LnMwdmd7aChXSTBnZ3JYJltd'@;
put 'LzhoK0o5djJDREMvZjcoQW9fcThDSGQ9UjhDP1syaTNVUSwoaTBZcUc+KmprTzFiO0wzOHEjfiwvVUJzM3hYW3h9TGs4QiR2c0VAMDdXN3x6JEZheEpHMlomSkdebipyaz1XMjZsSmBHcykoUGZIPmpqUkc2NjAmV1RQO2lWKCg5RVBMZjF3WVBTY3ROUilba257TSRDUm4oc2VuJUA7KExTPGgm'@;
put 'TiUlQS48cGRMUXxIPWh1LDR7TVp+TSY9cURoQ3BwbHxsV0pTfjghPlskN0goTEhyV3x1QVR7eldMRFA2NT19aWRmRnM4NzZvNHU1L345SGhTSix7dCVlJSwlU08vND0hWEVXJkdjUlAzMCJ0TWFDbjhLdkFfLzk3bUdsUC5gSiZPZ2pTY1pUYSszOnE7PGZacHMjeF1rXytBcyEuI0B3aXt+O15a'@;
put 'QTk3fkBvRVVrP2hwV2VYfiJ9U1A4bW5maTMmflJfeV9IMWpTO2spPXdJWCNFTU52SjY2RChSTGAvRnYzTGRUOjtIRHRlSEJ4IWRmZCpTSnBFOGRfN2VGe3plTT1DV2A3UDFETWpXLzdhdi9MUDBxfTJ8L1o6P2RsQkAlW3ljST11OXg4SHdkLzxXZSp5dS9FTjdiPUk3RXpQX3hXMHhkeGc2YURo'@;
put 'JjdvMGBHYiMqQ2x3LC4vejNMe1M4a00vRFdjXmIsZiVNQ3ZzRFd2bCEucF86Q2M8WFVCOXtXLERlYjkqXWMkTVNpZi50ajglXkpmIzROJGhrMFdXTEZOTEA7ITFGc0t1P3l+TC9lS3U4WnNUeik6QWo3RF9abDg2NissUj5ONUt8ZT5UfUBjTi5PVUl1QDlfTDdPZW1wVVFOLDB3QmlTVGduKS4x'@;
put 'SSo9X2JyJSJSYyZebnlCKVRGIWE7fjlrNUhsJG5TYjtnLiY4bW1CKjFZJGRELD02YC5JPjxDRCJbMHovJUd7e0UkdlhqOFpLMG5DdjNBSjMwW1ZZYlQqREZzNUphUzlsM30rMkwjPTJwNktYfSFlUU5RLD50WXJhejVyTV1MRCVxMCo/bDZFOlMobnEvcHM2bjtReD87Sl1ZMiFqTiE8d1ZMKUxZ'@;
put 'bjdDVjw/eTZuQFRgNC95dmsyKzZvNDIoOj1SYjc6I3QiNTVxJFBlLkc9QHtnMyJJamc7Zz1nN0s5MF9+MDt7aHR2U1pyKFVCYFRPNXorPUliKmc9fSs6SGUiNyg6cmBOTVlofEV5JHxob2FmVzFqMzEoImM4YSYsfmYlbW9Db1UkVTAke3k6al81SWJOKiN8SGE/Zk07bEghNGhKRSMqaz4xIkov'@;
put 'enwqaW9mYU4hSHZmZ1lKYk8ldmErUlYoTV07YV0jWStYIkhYZTopKSVhazsoXzU8RShZZSs7NEA1ZiRQNUxSbzIzQDk3KkhhdTlmSW5qUyJQVmUqKipqZkQvYmlrKDdnRSM9amBpXXEwN1kkIilROmo/ayslW1tGZTRQaz8oJnFqYyQrfXVkMGU9TH4jeHd4aSpTVC9XK3UhMyVwNndQQUZfe090'@;
put 'SS9DcWZlInVFMmptZE9Ab0hQZjQ3TllGaWFyYj8sbCVLQ2ZraSppakclPiEkayxpP2IoZnglXV1pUXl2IWsvRiokRDA8IWtOLGwqLmwzc3dsX052NWgrcU1mc1gkOEImSylZakFvaz9Bb1s/ZV9vTCsxc2Z+NjIuZCQ/OGpSRT0rOTs1Tmw0d29xLnREIVpjNyNbc244KTVtRTcpbStoZmRuY3V3'@;
put 'VzFhWEFPT3E/WCsibSNFczBOJjsyQFh6LD1ESnBjandaeVtlfWY3ZmtyL0N+azVEKGZBYywkYHFlOjl3ezx3JFZnXW1NN1BXeWZNK0pHaiZMOEAjRmFKJXZYRTpZQ3lkZzEpdkNNdjFgU2whd3JORWUwWSxxczg0MWBqTUNDL2EqLnA9emRUd286N09zSTl+eCgkQTdwNGYxP2JhJmIlfVBzM1Fy'@;
put 'LilOcTEsbS4iNilhIV57WWJvZywsbypORVAuWCt9LlR2OlE1OzRvPCw2TGpac1RVUEwvUlJMSGlIfmB9LHBLSi5RPlZ9IilufVJ9TmFZI1heWllJUmwhUVgkTlsvTV5ocnE9Pmx8ajR0djQzb2BnfFtUa3d2IUdzdlg3SVdOI1RiMDQyblN5QVVRLmRBamFOMlByb0V2d2BYJCpGIkdwNU03I3oh'@;
put 'LmBzVXt5ekpjJjQoVUFVQiZuQ3h8ZzN1OX5BYHA3X1o6IVdadGlucWZAOmRdLGN6PTZiV2wiZDs0OmNgfT9IM3kvVGkjSFVodEwhL3BdV3g2KzcyXlFMckNdbF5SLldidnozXztKWVZqaDxgYTp7LkVIM344SU9qN1VIMzlUTnheSHlHZC5MLkdiMD8hL0lTJW1XSW4jQyVQMERqM3dHO3M7R3Qp'@;
put 'TWYsOj48W3tEJndLPjNEVVQ1SzhHTEJdOGw3JkUkLDxLKn5PYUFSbEd2eUJqamFGMihebHQxKWN8cTV9djhEazZIIX5rcS4hciwpWDd1WHgqUipWRDdAOStoVyZWNDV5QzVxQU9wTlp6ezFQWiNocGR9OjY1X3tHOFAjYndhKFdWUjNsW0kscVNteStve3tvR1kpOj5IWDJBOmZuMWtfaCVgYW1m'@;
put 'QkovbUNxMFkkQ0hYWzZOJGpzIj8oQkpBWX5kT2RUWkRLMipxVGpxMFFaYHFhUCwsRmhqcCVPR0VWZXBkeC9JVHVYKn53THo0Sno4IWZDLl0jXzFMMWs5NiglZFQlIit1Zmo6ZUpwXXZtPk9TeWtCJSR3LiIsWHxJUGIlWl1SZTZbUmI2WXBxbmsyX25sfWsobVE/SkBmXTFhMXF7QVhsVSNvXlh4'@;
put 'QW4jYCk1diFDW1UuYD1FYm9FZWs9a28/LFRZaUclKE9dMG9KODkwP14mdCZHS09ZJjRtREQ7JDJ4Rm5xY30xSEh6Tjw2Iyw+ZE1CeCs2UmcuKip4XVZ4eFhlUXVuKkJ5ZkooQ01kJlVuOSwhaUglMSNhcSs5O2MwUDRidTFIRkkmYz86bjh3cypPJG4yPn5SSz51TEEuW1hIZklLZ3Z2ZCJ9SyRZ'@;
put 'eVI0SShlamJMP3d+UXdAP01aZkVSaTopOD1ZODd5cCJBM11ha0JUcUlCPzdtdFREZSFrfm9CaDFMfG80WnR7VCJ4UE87eCkuI2t2JjZuaXI4cCo7Z1dBLkVRZiM6eDFiVDY7dktaI05GKF4jYS5UT0o/d2YxKFpuayxyS1UraToqdy89anRkQjJwPjwvJVRlZHl3THpMMDAuPTokRSlnajk8MyFC'@;
put 'bnw1RkJMSF4vYm1AUDdiIX50M2NVVDg1Kjc9TFpCWCQyKU0sNFM0WDJuKlN2XjxLbk8iNCwpLFpgRlBqck1yVGFHSz55ZG03QGR3emI6bXA8Y0dBPSEqR2ZlOV03LzRnSSJZKSVvXURNO21TZ2NrK0YqSSRlZWJNOC4jcmtmTjdwe3dOezVTP1gmTnIiWEtQXXhEVU9sKlk3L0F+KzpuVFFMKFNn'@;
put 'YSM6c3VVIWFhMSRhP1Y4UmFoPkJEY30+YjFaIz0xX3A3ZnZdSy5BcUVofns9NVJ5OER0Um9+VWAqaG8uUVJ1P3Nme2c4PyloUW1LZy9nWHdZQ0xITWZWU2VmejpQOHpoQ1AqRzd7PztxV2E5LFNKc3txTDxMOSNQNVJOZjtLOXNKXk1ocy43MF4zPTFCPjVXNSh2TXJ6Xy9sTm4hMThFcC9sal83'@;
put 'QHxLdSQiUFVWaSJiNCZfWVtiTFosJjMqWyZ7KVksN3tPd3cvIzAqSWgsVHoiKDdaUiNsIkA7XVc5X2U4O3lhWi9ARTgrMzF3I2JfQlJ7Nzo3KWw3ZiNAKmhtdmlGIzZaSytNTE9MP3hWfixLTUxkWnA0PHNzJmFzaGRad21IZD5tSm5HXjdwTktWUyVWWll4LFt+ZmJJNjRAaEZKeCRgZGs7QGJQ'@;
put 'Km4qfS8mTHhuc1gjbWYpU2oyQ0haYS9uWy9fTElrRGMuakxeI0l3bk9MUl5XQGMxSWQlVFU4IixQe2BaP1JOc2w6YF89c3pzZn55S2hZO3BXdT8/Ol46NnprJDtDTEsyUHlaVkckfE1PcmJuciopRlMuUmtOJkRnS25pXVRKRWtGJUpIPGpEQiphTFUxVkhYfnooVnNOaWkjPzJyZCtyVzZoR2Zb'@;
put 'ZExvUzQ8aiIrcmxqYFZROVl+N0FFRFQrKyZ9elcmW3YiMyRue1QxIlpNU3NrNztKYE9JU2lKIzdbbispNm8vK1VyT2tETWkqPVNTZ2wpMTY6Q303QUhQfHVfWC47M0pMZURsJSs3Zz1yYVc8VmN1VE0rRzBUPEVZQSR0ZGRTNGVWKEAqVUJkP2JoXmdRVkVdcko7cm0oNk5vN3U5V3VrZyZpYTlF'@;
put 'cSwuVWI3VlRNZH1wPWVhai9gLjN2PGVON0k9cD13RUpDX3leezo1PytZO3hZaGNbK2pqTHZNcDQwOj9vbClmQVsqL2w5bHdmb2thMUZ9NGhJdTtzcXYuMn1jJChaJUAyTEY2TnlpZTdJWCtNaEBSVjlnNyhAQEh8U21YTiZ2dyghW3omLH1NSDF0S2giL3ozJSp8MlBOTHhdKGxkOkQ7Y2Fbc0kz'@;
put 'Pmp3XmA1Q19gbko1RnNsJntMOyJ6W3g/NC9wUF5JT0dJanFiMm82az58Wj8kJiR1aFMoNFsrO15iUk9ubGN4WmtmNlhFenJ1RkJ8W1FBPkRBLCZBe3pmSEVEJjhTOHQ/cSZkPCIkfCJ1QGtqZWEvZy89NCV3YEZwMSJ9T1k0TTBqWXcvNVlVcitDTnNwJUtWezFKLGAhMTYsQE5HZmRqZmdCMV87'@;
put 'L3xMb2RgLDsrSzNkdzdzbjdZWUt8YTB5KkZ9R3tGMEgueylDSFE6e046TnNzdjJ2VFBQcjA3KGRFSHZYbFNIWzJ3aj46dSR+TXVzNzZZZz8laGxwdHdpcUlPNGxOMik3VDcmW2dEfH40ZzUySHV2SFlxT1NubSF7Qn0veTx1Q3wxUkRJaGwvISFpeTc9Jk9TYT9AOWhpfjAyXmtZTyJDelNNXjYy'@;
put 'IzdsIjI3ZU1pPCJRO1ZHMFlEWWVJblE7a19gLkduPHQrWkM3Um9IdlFJNHt6dVloZzBabCRhPXtGQms3QjBLW18yWjIpa1FqInJDNk1RUD52XWhlLDJJZyY6NVghazNTTXMrJis7d10zJSZtJXphP3ZScDJ5dzF2L20rNWhmaE5lfU9ZXStuTUg2PEA7dF1HXj4pNEFCZHwwbjFsfHx9ZCNkeVlW'@;
put 'Qzc9W3M4Zl1qWysid09BNGRiZXdRN15JdXNZUjFHYENEcEl7bVVOLHJWO1dOVl0wMD8qTzVgZEVPfiRJWmhdOiZ2TDghI2NvbEVLdVpiMUNOZWhrenxoa3RBTSFPLzkxV3JFPWMsKCh3OUNGUCNHYltIfFgyaCMwc3ZqTXBpeHhARTdJfiRvVzpRfHVIOVMjcGZPb1YmW3klcHhBOV1EX0Y4YkQr'@;
put 'e3oyTi58dC5Ic2YpKkJ6Xl9OPG1zcmdwfiEoSGc0NC9wcFVJZXZkTXlXUSgsMyQzWk0uMGUhfHI7dS4lamY8P3NiI3M9RDtIQSt3YCt9LFBEejE2d29gISkwWWB7czA/OGsyT3ovYDlDV1V8UnZQSlprPkRaTCZKXnE6YUV1PTVEZFkvczUmaiQhVHVYZ3NpWjc1PituW1ojZktmTFAwUU4mV2pQ'@;
put 'RjdxW2ljY28/NlY1WUpoO3hHay9nUVc/Yi5pRWdVQDg/R0NvUGErYXViWzVlQ0h5SytVREtaTn1odiJHWS5TcW5bQT42Xi8rJkQreVVSPFdpLmk2RThtNTgpbXlDelo9fj1IcHwjVmJncHJwNnJ0RCJASjw6WEViYWN2NjtOJWV2ZzJScClSclRXWT5STl9yTDs8ZG5PPDhFRn5KZDB5YUVaMipX'@;
put 'cHhML1JvTmUkIVNmNmlfd3UmbmdpOkEqYThJSiZLajR4Yi9je2VMYE5BN1p0NmB7RkM7NT1EbXJPQ19PRX5DZy5hNkZgJi8pVjRfV0NxVDFhQU82eEZRTFVvUWlCVHlDPC8zdFIqVFAzZH5ERmMlRDpRO2Nreilzfj1fNjBvaVFgTVtgQjokJmxTRSx8Q3JRN0piWDdzcXhJTn0hTWhYZnRbWC5Y'@;
put 'O15Ncl13bCtkRnhPY2M2ZWwqfjMmRzlPSUovQEJRZjB4K3g5eCRNIi42WVJlQiRfYHZsSlB7YyltKl88VC9HbUhAJXpEfVF+IlIvcGdgSlRROENqI1h2dix4cDB0Sig2LCEzOkI0QSYsJkopTVhKZiFMaG0wRWMlZW5SSygkKmp2cEB0RjdYMWhLYkRJZC5wX2Y3O05NSChQUkU8Xlo+SHlldToq'@;
put 'Qj9uYGw3YFQsOkc+Q2c5fktnYDx3TXAzXjYqfkh1dGlUMmA6eWReZHE9c2NobWlGYWEmQiRedEx7dkNjR3RBe1NqPkJ0bjQkdi5JV3ohWVJDQ2ZOeChiPSo2XmJKdzFqQCZIJENaIXBVOmJpKV9DeEk9UigjR2JAb2JPMXUmKnVrTVdMLjB1LlZXOiYuTiF8MW9lJW08UnNtQDlkMXRYO3VuKFdL'@;
put 'eU5CNXcjdjBzeUMqa1FvZFpPMWBMLkljdjtqVTBXejFmS15KbW96eFlbT2owU1EvdEc3JWciYjZZdjtiSHZNVW4oQ0k3Tm8zNVdAJVN7YnI2dmJ9SnIyZihdJUxCOj58dislfHZWbmxmenEsaiEudCZCQmYiRV9vWHU/e3xgUThISFFyQnkqYVt7PF1TYmwmV0VCR0BKaHJxbkd3THdFLHVsZTV+'@;
put 'TlBBTztZXXpiPmlDKlpbY0BDPUVvSDp5bShZM2RYe2pjTi9mOzNmenhJTjxNJklkcXhmQkhmd1VrS2hLblgpTmVNelVxL1N1TCV+IzArKER5OXJ0TjJBMjYuUmxaPzhGW2dBY0x8KERbeXdnQHIlKWEjIz8lLzQ8O15ySDp2NzRgSGQ0bSRnPElDNncuOT8xLzxVYl14XmNsJldhJTJvVVV8W184'@;
put 'dWRCaUpDfC5XWS47LE9LTnMxQX5beXhIJlArPXMmLmYmWiFhMFtFP25PR3hjfjw1e2pkM3A/K2U5TEt0aCxEN3pfcjdFcWl9dnx4cHRZUCQ4ZUVLIz4+ZU83TEsufmdeImZrRTxuPmVRW3VXKSxuPiVQZ00/akA2b1lvQnQjaGUiTkBBeX4mNk59V09vTVVZREpbe2F+ITFUUWd9Plt3dnc/dnNZ'@;
put 'Jm9WdyZqOD9yZyY6Sm8iTDlefno6aGRBMTVLR0RPSW9INTFnNE5ZP2hicys2ekdRJUYyR0k+NHRPQ25vV3N+eFAseiMmWD5NLjBidV12TiMrJWdxd1F1QypfKztLdER6S1d7a1o8WUUqVWNgNHNSVSleXil0c2l7dj8qU2ZbVGQmRk5PPGI4bSl0eHV3e2NadWJqciE8OGppZl0xZi9dcztwM01x'@;
put 'JF4/fW1Vb2xkKm86IzIheGtvd3JibUdYJUIlYCEzL3tTPHc7bz57OykhZ0dLc2lqYFc3IkMoNmlmPXddOmxEUCY2ejZdXkNfeWQ7Tn1NUjNoS2QkTDdaOlVzJVlIS1FuVCtFbFcwc3MjOVFtQXoiLmZeLF58TFM9Wk5TXjs2I31vPlVqTzZEUVoyVmFsWHk4blp+bXlxQElKVjE2VF1hMnVVNDFZ'@;
put 'ISZEQjhhMjVlSUohanFgL2MuQVRgLnEyN0t0bVAvRDoyWUUmKVtgKlRYc21vaHByZzRScDJJJUNfWjhqMS82KzR9bChONWpKMGsjUl0+eCJDZTc3cXhrSjB1SkNlVy9gM1JoTi5IR0kmOGhLWz8qdlJYTUk9L2FGQVd8ITFrNXRCOT5fQ2hsTyU2Vm85dS9bJmldcytzR3tteT8vYU88PHUsMSpb'@;
put 'Pzk8Uz97Jkpxc0hBbTtneyxSfUV6c216RT08fCk7N35pRUFxbCIxd3l3anohKyhXXXssaCJyZiRwMXd0eU9iSkVzL2RUVTpKPH4vdlE8bV4kWjJYMntHN2Y+K217fV9GTWdFdCVucjU0a087dTBdWVBmPntMSzIsbXdyWFJdY1tyfGt5TE0xKz4ieHNhIUlZX0YiIWhTYGUmOiRrLGBNI1UoYWU1'@;
put 'a3BkZiQ/QGUuST1Xc31rUVckXlohR1A9NzMxYUc4cD4oR1ZyNWZuVCR3Z0Z9b1dqaGYlbkohPTBDZFRmNmc3L1I3VDNOPjN+XmtuciFXRj1RTCxGQXElQiR8MjE6TC5JP2BUdGZNZzZkM1BicXw6bzNATz85a2AkK0IoYzgzbFI6JVhSfUlHMCNwYlFqJWxrYkU5KzM2by5XJCJyQyNSKGIwYn1H'@;
put 'elJvRk1CJWFARW5hQDhqWjppJVBqfiZgK11OTFdQRipWekNYbFIvaj0vJXk7K0o4UG9bMEUkTV9vLE1VNTR5IzFoQnp5YHdvSUMmeG9SanI3QnwyKTByP2ZSJTAmPFsrcGx4dmFaR2EqNFVsZGdlXXlDbzZYLFdYZzJfNGtVd2RTRzZ1STh8UitUV1I7Y1JwbzZwQiIrVExHUExGfmdkZz1kfUA9'@;
put 'Nz5EZU0qOHddLGhLVUJDQ3RgST1zJEpFcVJhK35ZLzlUMkRDb1ZNZ21NKFEvdmB0dUtdRnczPXZQdlBGIWouQHJsaXNPNGNkPXg0PCZtdzZ6PSJ1TiR4UjV4Qzd9SnMqXUIzYF5HRTcobldqbHhTJFJCOzQhaj07bWt4NEp6djo+UiNoVXRXTGZdd25HYzl4UUVfdV5YIlIxKllFY1V6O3ZHMElD'@;
put 'ZlckRiZ3SUY/KGozXzRvJU0qdzM8eWttJkV0L3ArYmRFSCprZHdhTF1APXtVUzRRTVd+JVtbaWNUJWlYMUtefE1+IU90RVZKJkE9MEJgaC85P29gaWhlel88Kyl0aSF+XTY7M0Q+Um8hPiFwenZ+ezNaZ1JoJWUxeX1AZ1dlNzJQY3xoO0x0KCgsancjUGxiM0hiYFhXUUEha1YwUzFUNVtgXXZX'@;
put 'ZClobHVGdj59RCgpUGpnRGsxc0FVYmNLaCkzXW5LYlJQby96WVlfU1NqRmxGJSZoUmM6YlpRX3ZwdXE3MUNhIzUld2pOMzokJUkvVDNqPDAhMnhjQkMlXiI6IzI7Ny43JS5RWnI5PlZlITY/Xz9zNXg1ZzY+Zz5pVixBN0FbcFhxRzVQPGhJITBQS2JqQzhHVy4yKEdYXm0udVtxdU9OKi5MYnM/'@;
put 'S15LPHxhWDMuWDElTGJwQS9sVURVJTxwTzIkUjc9VCtfITJCWj9DSy5TOGVSIVomRS8obm9ISGdeI2RheXlHWHpxISF1UVl9WV8zbVkpRk5IS3hpKVt1fTRQWW0/Uzo+X2Q4TklYcmssYHBBSmhoUEtDPU4lQypdQmUmZiNjWDZsRmlCMUhhdXw+Q1l6bS5Nd3NwWHJSODBeMnklcGtTcjNxI1NF'@;
put 'XVF0bVJtQmhMaFpvPGVVUTtdSyJTSyx5WmMpbV8mRCN2OTR3QmRkbX1SX0J+T0BLaXwjdnZkY2cjQmNpNF4hU1khcDMpZXEqQmxUTXV1Mjk3eUt1IjF5R3t4SlMka19OQTI4c0Y1QEhUY2pgWEh5NTtAc0lhMDc5dnlRdUVTa25bKllmR0pnckksI3dBUWs5Q3M5UlJeOTxQKklnV00peVdQUjpE'@;
put 'UH1LLDM8bUsqcFldNzM1WzwmR2tuQXFudkd5KU1zQF5kS1JGZTolfTpPRlQ1cWJVNjswTF1Pal4rPnEva2xmelpEcEY4NjIpeUlRW2ZwLkgjOGJMUmdAcnU1UkxSU2FONH42TlUkdiV7dHRXTzpENjx6KVlLLkxzd1s0TzFyKzhUPEdXTjEuQDtEbHdsRFdqc09DQXBRdCJEUVsoJl9tSmZ9JSIp'@;
put 'SCJqWG80Sk0pdjg7VGYjKEU+Ky9iRz1Menp9YEB1YS5xO1M8d35NPT5QJUoqfHsrIX5TbThxTmVjVnwyL0B3SndnT3g4RVRhQ0dZW1hbaTNMazJTWnokKnhJfn5pNkxLVjg9Rj80NkorXVNQKiM4TjVRfjQoRjosWXxwMHFKdzQpKF80cDs6ZE1qaCEzJGxGKWVbflM6KW4hSkpNNEVAcnFIZlpr'@;
put 'Sz5OOixMIjU+PDY+cjRgRGpCL1poNnteUm5rQm1MJiopcmFSKVN6T11rTGlsXWF7Ylt5Oz86YmQ3eiYxQDgmeCZ+fXFmQCQkSWB5bTtoaSJTPi8scikqeDp6d1dvO0lMJklObCVmbVh9el14NFM6RnBoakRFXWJ0LjVWOTh2ZFhGWCxKakhoYComIWF7LCtmek5HcDFPRiRaKTk/MWNARGtVJkx4'@;
put 'Xyk9TlMvTCl7cm93ajxPOF1PR1U/RipLR0JqZj9zKEcxIjEsU05TI1N0dVhmVFtHfWU8dkhibX44QCZQQD5nWlNxcUY2Ozl3JVNAY1Q5dlhWQkIvOl0zOWE4LlNCV2ZzW3szc2Vfe1Y2JEdLXUZ2UT9WS3VAZyxnUj5zRmN3YDVUOV1FUSRjeSRtSTFVXWJUKnc3PTJEVWBGdlRPUUpHRnJAN2Rr'@;
put 'YCk8ajhkeSp8fHt0OjhHY3R7VUE0akdreHBHbnN+UUFQRE1UZTgoMnZDaEpVMEFrSDgxeGlMT3g7a0QiU01lJEYxcTw1OVpON3BTbG5OMip6IyxnL118Pi9aYG9qRWJiIWA7WE40P0klYnN4NlBCJEI7ZCt9eTUiSGxkLGVqYWVpNywweDRXfHphQCVqQX05S3MxLE96U0E/W3RuRERdbFFadUBl'@;
put 'MCFMI29DYk1POypEUzhAIU5QSEg0aXk0ZFVkJnt3MihSNmAoKUk3WTRWY1h0S2NrUl58X2t6WTJiO3FYUEI6R2koSilRWlQoam80eEJMcVBybzdGUTtiUkRecSQva0ZRVWFTK2NqfSREMnc8aWNvPSUwMWU3dDZAV3FrVShxLkV6OXQ0b1lJazo5ZnY2LiNTQSpUK3N7VHRFeGNBe1FlLmQ8KU9j'@;
put 'aWtaTDsxY2RBZjRGKXUmcXU8aXBZSmZPWi5CenIkPExudHk4Xn0sdn40bmZvNmEsTzNpTVBDVj9PYjJhKisjSGxrdUpXWyEmODdhd2U2NE91R2o/O05BIW9KMzJLdCo2Ky8lW2JuPyJRYXBEMmx9K0tLeUxZXjN1KllvQk1SMVlJb1ksP19rM0xxbmlsSG5oPTZKYDg5WSF5Z3A5YnJHIzhtbl58'@;
put 'SWJuVmh0Wm0xSDFzKk5eRmAjMGI8amZEbFkybWx3RVp4L2k/WCU8JSZPPGRRTX5Rb2tYLHY2byM/RlphelJCZ29IRW9QelpdYkFSUG0zSUlSIUgzJnZBdWMsen57e2lIJDMsSXAqWCtALDU2UXVfOyo2akMwdXw7bjAjeWN5M3gsMXNTLG91M0N5cWQybSE2PiJxX3UhakdaNCpHMz96T3hIQHhB'@;
put 'LEFETkEjWXQ7UXg/SkNzdiY5bit5blo6L0BmJT15Tm4jLDBEdFcwITchVFRCeG1ZdDVIQE1BZDl8OnJGP0ArVChzO0tzXnd3QylPYGQrRi5nMlFuUTB1JihGPnpYY2xAbWgwaWxRc1cqW3V1SEp9cnF2bi9AIytIMyIhJCNPZj5mRmFmKHdjS290cmlXRzNTWUl+azlaLGJVZmBQIWk3IWczNm4m'@;
put 'KHtOKyJmVFNdVUxrM3whSiNrZT1qbzc4R313SHdya3JffFQ/fn5CcG1PZn4uOTkzeGxVNm5ieWB4dCgqM3AjX1JUXltFZU1TWis/MVdwdjVgYG9+V2NNZ2ZZXUVmP2xFJWZId0AxKVB+UUxhVHdOPXRrRFp1fntUZGFsO3lZNFtGblRgcE1HSDBNWCkzM3R0UElAQkY+dyZNW0FnWWcxLD14a0h+'@;
put 'SiFFSD1xIUcjIXBVOFU/L29XZWYjcXR9OmFkd1dpMX1zaUxvSkNCTXgvcktXYWBqbUg7fW5PPjYxYyVjaDJTYGhBRDU/QDZIZFt2dGB5eUcvZTtsfDFkQElkYEokJil9L3w7THcsI2ErKHVhZyVNUnF6QkdnRys+MlBOX2tKKHlwZ1I4OyNhaiomMCJPP2xzWCJIImZBRWQkNHBQfCR5aHJRWSxe'@;
put 'T3xeS11JUXkiNTdPUEAiNWh6RCQmQzJ6cyoyekFlUkI3aX46eUkiTjdbJXkzdFcyPkAjXzJdQkclQHMlMiVIWTc7bWh1Wj5XNWgkd1VSbEx2L0xDS2xtPVlJTXsjbFhWZjt1JjdXPiNNYCl5QTclVTJfLkBWXVBmN251cFlwQHUsfDkjUmF5MmxEXk1XVzF4NCtHTXNKe1l0e05yLjloan15RyhM'@;
put 'LDR9IkxNTiQ2XyR2YX5HKGQ3UF1uRlRYbCRub1lwXzppdSEuQkUxT15Cdys+XU9Zc35bdS8uSUZsO3xidlZNVGw1dT1NSDd9WyZ6eilsTiMsKk0xIyEmTmFzW0htcHAsc2tNKi9QbzJfclFKdHVINGt9Pl9saFNNdlh0NWRGQ0dMIy9wezFwQy57O0J4cjx9VkRVU0BqdU9TTnI4VUlyWTJXWVg+'@;
put 'OWxfNnwqMmdhLyFTc34sZ3A9ImRNbGwvdGFrLjRPdEBOfS5vVjxjZVNNKmg2RFJnTmc8RmcyWzpXWGJ4fTtueHoxfShCL1E1N0p+Y0ZuTTk4OiEmWnR4fVVuSVpmaH5ubzR+QVRlQjIpclRCQGltQWlWKHhjYUFENyVTI1pdMnxnXWlra3c9O159b2pHW3VzWygzN3VobVhZUXFbSWkqT0crW2ND'@;
put 'R0R4cHd7Kit9RTpfRX0zQWw0VlpJJWI2YSFbXzRGJTw+ZndBd2pPZUZoZGIhNEdMVX4lOntSR1NzM0IoNilxNWBXWXI9SSgjflc6eXVwX1BQelJFYG5fRC9mWGFZakQkW21aPlsrZmxiYmkjWWplRmBXe1NMd0tJNFhsX1ZfLDxhVnw1Z25bSVNhPW4lRCZEZk12N3VpXW0uIlRGdUM0WzZjQnIk'@;
put 'cylZRDJVJlFFLFt8Lis8X3VxaXBUVEFFQEk6UzJDJFl9Nj97YTdfRjRFXXh6eThmSTs8QXU0blUoTEc3cUk+Pix8e1opa3c9QC9FdzN3T3Bzb0FgQ0lfJip4SjdKYldfImpWWDVLXmlPdG0vd3dBMX5hMyFhInIxX2oqeH0/aihPNCVbendnRj1Cbzp7e15dIkkveFQ8XUIhY0BLb2YvVUdvOSNg'@;
put 'WC9qfHZtPShlZTcmXjZfe1RlKEkjSU8vVGl9VzkmOVdpVDAkVUYjM0IjMzE9RiFGVjs6S1FrO35qcjE/JkFgVVc9XSY6QH00O3AuaCo5LDdOSDFgaDdYUDc2T29xNUVzbjNtPVNIRUFwQntZYSNrMkNle0h5PD84biU9aiYpTHFvQV93KXEuRVJCJj5yPGhoT0pMeXB0fEA2PkM8dHgzVl43TyF3'@;
put 'NGsrP2YpcEooQmt2ZlsxY21+USVOOyU5XnVuTk8oInk4OjNYQ3NqU2AkeFBQXipUZSZZTFVdPEpTLmhGJFQ5cEhYb2V+Pk9pQWZ0NDthUFFzMmtYLj40QjIhPSJbXm9qMyVZbnNManYqRUNfWyFXQCVXc30uJUF7Nz19aWFpJXJRYjxBcVh5eVpGPjksYnpZLylnTDlHVldzaDtgSSoqdWZUTTdE'@;
put 'PzhlZzQiSl5KZ0BPTUF1R0ZKRXlZL3VLSjdQVUYhZCVSJjg0N28rQ1FqRVc8MVg9JiZfVnZ9PHM4fTl+figqQ1sxKlhKZ0pjdVlFaDlwNi48PV1VdU1Xdj1TQWhwOWNPRH59d3AvRTs+Nl4/XSFCIkZdZCNRQn4zTHBoLDshRDllVFM9dVdhOl4uVVEsK0VWZVQsL2FOXVs/WE1CLENrZWFRLmBJ'@;
put 'YWFlLFVlLCtsZVovWXdUYFYjSWNiVnpPNGBbMSI2RkdjMHx6bCUjRGpGWF1VKnhSY3hSKDZMY1RBdytrc0lrP2FUN2k8T0hPbXgkYkt7YndhNTtxY3BKXkd8Xm1Yak1oa1FnQE5PLjwicl9LfGZMJUs3aDlsL0doVnVRYHJNVTh+Ll0sRyt8VjRMTyRMOUJYI2NAUSZQYHRDNzxoNlUwPV5DNGg5'@;
put 'REdfQ3VgVW1kMTN9Mjl0L1MqPSk/Rl9bKEhqNT5QSWcoUURae0A5OV07PEtLKHRCbF92bXVQOlV4JjMhTnN1dWxXai5DRz5yPzZ0S2BSNm1aUWVNKVZ9b0N0Tz8hInpqVHF8SUpiYCFsRTp2WTNuZzpmc2o2a1kqRVZockRaTE8wbmNheEl4TEk0d3QxcjV7JiwjIWd3JVRxeSh1c2oyZWklWT5L'@;
put 'WXwqc29keS9FMUxYY11XW3B5IX1USXhVS0khNlUvczV3dSRveDVGKFU1enAvPDgwZkt6Ui4kZlFaP1NqUE5VRlZSX1BQa19WcmwxcnhdYllje3o+Kk0kZHN7NVk0WWosLCxdZ1F3N1ZFOyY2SDxOVkBlYUx6OmxkWlptQiM4W2ZPbm9eSDU3bWRIazU7NjRuYXVzdEJVNy4/eFgmRk9wL2d5QylJ'@;
put 'QDVAeitwY25oK2pjTkBefFIzcE5fL0B0WnIpIz5EOHd2PHBxcExnSz1XRlVQeityJXVXSG5EdEU9T14zL009cTU9Sz1+LlVERU1XaHR3WXJCPzFFcSVmQVYzbWhbYSkoLG90TSUjTT5ePzwueSJMWDdsPlp4Wz4sT3ZNUitIYWpLRSNeJFQpVyJtKHomO3J7KlldJX1rZGUvNXgsJkh4VSZQKkk6'@;
put 'bD88YzQsJHR8PGEycD1XKy9ufTBWaz1adHc9RlB4Jlk/akR9WGYlTn02WWhQbCV8KHw7YCFrUjl3ejZ7VEt+bS4mOkhuNlA3OmVqbzlPMzVKci5KImRPKU5MQ0N8cVc3O2JFezp6R0ArL2AjaEgjbElJVWRsWkZdOlRpUnQweC9+bHNkT2VUWz5lNEhCMVUocTFAL0NlWUM9RVklKz1zPVF+ND0s'@;
put 'ekE5UHYkNlRgZkQvfCteW0QzUj92TTA6WFs5JFBCeUI4aWAubHxrKWRwaCgzL3Zmd2RNT3VqWzFXeHIjNTV4fX5oLmFTfWUhPjo9TWdsYWR+NmA+JUsvfkRFaVJAa0VoLEQ2Zno+V2ZiPjVPYVEkQnovKyZbUXkzbnc1fiRUUjFlbXZKSEt+MjxvUE4kWT14PWklZ1dYLjQ1KGUlZTNWOzU4MW9Z'@;
put 'di9vYjloSDs9cEY7THAyJmF9R0A0VU9zKjUuLkJ6WFpQW2JNejVAL2AoJEBaQVtDY35CJm5EKSl5UWMxWTs7bzM7OGlOaWRhailOZUpBISgsXkFyUnxoO0UxSVh+X1JfOndibCF+QzhJZWFNXkJoXltiIzkyIV0+VGd6Wn1dP3V0M18uazFgR0k7ZFZrMnchMjFAKUd9JUp8WDRxME52bnUjOzFL'@;
put 'LEpXQT5NSk1iPERjXTN8T3VCKC59eE1JXV5tQGMsZl9ERHBqSCEiMCkpcChKYHhiSn5DbWNGInNhVloyTHdzbVROWlFYRD07QilaX3t1dTBqMnRfQkhNSlVYTHA1OUlRJjBaXUY3ezZ7QjJwczEwUHNRaDk5NVE4TTB0MSVmKmVGN0taVj50WHVLamQifExVWUNnL1RKLjheJkZbR1t6LEBPMHAq'@;
put 'QSRPOlFeJGYoIzZ3SS9ERmBua207KUhCdkZQIWM7VSlIaClkKEhwYGViezlbOip1MF1vYnxTQz55bmlBYDQ4dVZqc1ZfYypLKDB+JUAqe3xsU0Nvc0dbKkU0MFlZY1lnYSxOSHRnXzF7OGolNkB6P1RqWGBKO1oxbVpOQiFXSjZ3cDpLP34hUUxRblQianR1K0t9Xk1uU2BzI2A/PHQ4QngvSTNa'@;
put 'aXFWcWBKYyRFJF9oPigzelghdDhYOTg7c3ZeLDpOO0lkJkk3a15MUSUvTl5YVlYsfn1gV3lya3JrM0o7MVgoaW4zLzF5akZgNlI3NVYjSnRiYjxWK3lWLm4xa0NRXnMwXWZ8cyU/PEc0WiUoMnMrP1BiWHllWE9eUj1yOUpWMSk2VHNHVWVSRTZTMzRhJkd7NDVBcmhpVnBFe245XTtRbS9RTlVv'@;
put 'dXdlb3BCWkRfRiVUcGcpXnBFU35veS5aLkJuSns4YjhfVUZLL0k9Qkl7bHVDcV1bImNjMT9rK1hhcS8xJnNBMiRIfTV5OUtKJH12UHkwQC5HKUl5JD9hUzssSW89XURRUVJ8VHB2KWkkblQxK0NSR3hHYCE0MTFHflptfFtOKjh0LD1BJFg/JltgTF4zZlNsYUxlVF8+L2N1dlptM2hjUnU7Q2hw'@;
put 'JDQ1NCpTWVgxcnRdYyZFTD0rWDBNPnBTNVYmNl92a0swZ2BkdChmQXZdbH0yYCNbNWEzNklNbVJtSC5yTElhVjM0M0o9dixrblZgMz1LbD52aGkrTXQ6WURfdFpdPyhbSj5OOENmcHZNMk9QdU1ZaV5GdyFsMzdLZ3okJSYjM0UmPmsoaHh+QnRhfT1fZygzMjVZdj9sSW0sfCJTR3xgWW1zRUVJ'@;
put 'ZiRkUEcxeyY/cHlpTTIzQW8vUW1iIVdXQGlNMGk4OW0yN1gqJVFTPXBaSGR3PFNYOztIeHghI2dTajddZ3tbWT0kbWVqSVVaM1NLXi4kUE8zP09RQG5Tal1ELD59JVBWM21yPE07N2wwV2tNdUA5dkBbfmQkOmNtZWdfTCwsNzdsPCJmb1FlWCl6KEkqLnFddjJ5d21+K1UjRXZ6eT1daXdHOiRB'@;
put 'KCtAKEM0T1VXUldCKGE/PEEpTUFfImtPPUIyZSFgb2gjPEV0WjcxbmZrUnZjRlYyIkUlLjpdQVF4VTF1dlVRRiFgLz8wTkFSMihqKEE3Q2ZvWUNaTlZpLDNhLHJYLmBFPk5mIT1PYEpka3R1bHZ5eVJMPGh5QkEpaT5dXnlSZzVFLyJEST9wKXdjWHA3YHt8b2leVy81ej5fIUl6ak4iPSNENypy'@;
put 'SlYzdXE6bl8ucylvcHt4WiRiZ3lSYSpQLlJZSGhPSHZFaUIyci9vfjk9X3hMV3IoKDc2Tj19ZlooOU49TU5jOV82amR0TX1kIU5+Ok8hZj0lNjRbKTUwNikpeC45IWkve3clTElfO1RkUm0kKUZ0SVshfGUqKlMyZnBHMyVjP2E/V2plOnJYciZZaF01ZCRgQD9IQl13eW8pai9eN3JDa2RoJStn'@;
put 'fmlobGhqYjZ3UnVCeTReNHtKKHokYXNMRy9sczIlNHlJRTVzVlkpUWRiSnhrKltEfE1uPy5nKyZ0N1pAIjMjOWZWYm5rKl50TX5jWUMzTCNOY0k3TDdrUiw2KSsqN3piMjd7T2ZyU1pqZltGOz9iMFh0Ty4zK1JTSmc0WntvanVnaikwKlViVExONyxOPWVAZjFQREFUP2MqRC83bUE4LzhFMVps'@;
put 'RGR3VjU2IUwyUGIlYzxUOSx3RW9OKSE3IzU5YlJmPnZ5V3NkQ2k6WU8uPmZMTD4mWDN9a1FKSi5OUDhWMFdWPV4vUls5U2RZRHlNWylFdHhgd35dM2QjO2lSNypLVFVCZSNVQkZdcXQ2QE9GajJMMG9WIUp6ZFR3SGU3RlVDMWA6eyZCOStkKVVYYT0zUXl6b086Kj1IVUxvUVNDJFYlKFVrOT1z'@;
put 'I3ErYF9YNi40VGxuQDl3UWt6UD5hVH5Nai9nP2wmeyF4KHBaajVQRzQlZ19pLFRZOGdIaGU2aHx8JEljW088aXRFWytGJWM6WHpCcihHWSI4dXojME03UjB4MDBlJCNMNkE1USRjI1dbdXEqSC9ZUiV1OU9gQTo3X05TZE82d0ZnayxgPzt2d3NyST9uOVN3QygmTWpmRDVZajRMRkB4NE9PODN8'@;
put 'SDdHSk02XSQlTkh6eXMxfGQjR2BuUHkzXnJrWkV+aVc5JmhXXm55bER4UEsuTnl0eExAI2ZNcEdwPDlEfkdTN2JEdlUlQVhlVDtpJnFlKXQqd3xjIT9UZ0F5JXpRUStXNGswQV9QTTkrd2QycXhncz14MXNVP0E+WVcjRjd7TE5jd2ovJS8vQldnJWtEalRpZUNCKnZQIyxbLCElR3cjUUcqJkEl'@;
put 'Pi54KWpbSSQwYltATT1XdEc3SSVjSWIzPDtReFJCIjgwU2s1ODQmSDJIY3dpezx3dXF5WH1KKjx8eGlFemg3YDg7NjR2LFB5NUg9NlYlYTAqIWxvd3JISm9mVElEOS40dnRxJHJoN1NUYCVtZ3chVCYhdW8qZFE2PEd5TjBWWDtJa3Y5IX5EaWgkT2VNRHlBNkMxSCYjdXNLWHooK2heZFgrfWtB'@;
put 'b18pYmhNZyssVH1WTCtsVzhrSWhxRG1OPC40UitibEUxLlRrZytbZVBkPEpkflh7UFJvMUA+aC5VVVd6SEYlbipjYyx5NnVAVmg+PUBAMGwiMzRxWW9mcV9iZHR1SWs6VH5KYF4yU0gxUTB9RGxUK04rYSRFRiVeSTpVKDZiLyNbXXIsKGRaWSVedTZVfHx9JDpTUT97dkROOio3ejBuRSovQltY'@;
put 'NX1uUjBqP3BAQnowQngkcCxRVXFteTFMZ0l+cT1oUVtGaFBCOmNgViN5UXpWeTNwdW08OmwiPGBacjsiViZrL19tPDchMDJ4NjQpKFgwUy5PSG4kK3oxM1V7Ui5QLl07ZkVXdmxaZm5EcFZLRFI3PXtCTUJxUU1fW35MY0c2Iksmak1GKlpaNjU3TFdHSiRlTX0kPn5mWnpyP0twdzlDa0l7fHhm'@;
put 'TGgvI0s4Rz5OUnp1Ymo9bXZkXm1xSUlkKjBHJDxpdypWYmNuLCJBRVVESG8wRCQ0MDttT1JiYl5XTypgQz5aPV9PVTYwRHpJXj1keUdGP04zTjd4RURXbSkpNG9mS3tHLHAic1pzKzVwWTZOMn1BL3g6bzReeV1EbGE5dW49PDFQeiVHLmZoMHNVLERJMiNxMERaMTYmTUw9VFpZc35BVzVuPF98'@;
put 'KWdWKGRSQyl7Y1lXOVpIbXQ+JDlyVk9PWkFjJUAkV0kvbl01Ly5haldrP3IsMkRUJTFWbnRoKnJvPnFQd09XKj92eDAhYG10L3cqdjFtX1ZNSVRKWVVYTH0wXUI3KzVJdiVaRCwvelJ4M3p2aXEjX0xMVVFOJF91V21zQmVoSzQlenl1PmwwQyFLL2VaTkl3RVVHSmA2RjtYI2IzYFdzOlBua3Uo'@;
put 'TXxxYiwlfTtXKkl+NFdCUyk6JDl4JVlLO2IrXlthNmhYZiRvND5QTGEoT31ZLHpuOVhkJmZIMlRLIWJGXileODVZVihHfkFteSxtaixTOTJ8UDR9bG56ZGQxLjo4YXAsS0lePnljYmpqX0RUKm06eFNULzhnKGAhXk95JDJraCVtZ3BXLlB2QkhTP3tTQmVMfjc6RTx2cj9sIkV4WkRCO0BpQzNg'@;
put 'anEybmckQzszPldHYSFbPGw1SmAiemkoaHVHOk59QDR8KnFdQjpxczRZTUIuWSNoPnl8LEpHKVtzPVZlPEgjc2ZLS2Z5PUZaTzxgKzlsP0V+NXxgJHNadyRAKHJdXlJpQz1HRWYjOTNGZi9kNW0yYmgxLCwzI1o8S35JJH5VZXpAOi80M20/RDRiQixpbGE7UylRL0dlQiF4WnBuSTlMeHFjUW0z'@;
put 'e3hRKVBYJnVNZS4jT0l+STQpajAkNlNsdCpoYlEwR2M3YnwjcDFSc2IhI1NbbEIqeH0hek5bQFlqdV02PUIvUylyXlRMQjZDMC9Yekl2OkRQQmJfR0luPFJsZkNEc3cqUVFCZX5lYSg1cSRmajE3ZkRdPEdQKX17VE5fMmBBIlE3Z1VVV3YwTTsqSkgpVDtXdFRbMGwxZW1TY3ZKYjBlZSlrIndR'@;
put 'JTN9PUJIXXZTZ2h8KDVnaX4xNFYhXjNpImN9aWc/STo4RHJzaVU1JFdZLDs0PC52ImFCQSQmUHppTFNZS2J5IWthO1hjTn1UdTQoXnZxW3BoLldbcndfNzJlNGtkWmNpVSZjOUApOTlMZyQ7LlkzMXYqJWxTPElYQDI3fEp5PFE/eXJIIXZjdDk1Rm1iVngpRCZobSJmWFRxNEJuS0tWK1FTditA'@;
put 'c2AxbGNLLmhZNloyIihINjVyNHhLR2RfTU9BalJNI3BMZD1rNzlaYnd5XSRrfU0yJElkLHFESkoiRSEzfjBnRFZJVk9BPjtjYTJbe0hLalhZXz1xcWVncExCSnlJdGdfTztrQFImVkN3ZTU0JXUiOV8sOGZLQk8jU0d7PGx0JkVUQyJdTHYmeFs9W0lUXTd7QTkmRnhWa187NVtZbi9pVHV9aTQ2'@;
put 'O1dYUTEuczswInc8ZX03QF5vaS9Ha3J3ZClXJk0wcn4+YkxOV05DeTMxdVk3NyRbKXd3MUd+P0pTJFgxL0B5aUEwcFU2aEtMe0xaXlgxYjRPa1pGPTR+bCxDZlE3SVhKNzsmek56RCxvRjFXOjREY3xhQjN8NVlzY2t2O3F7QnIiTkRGLGRNUGxae0l8PWZFYldEQWVJNktzX3VTIS9rZCtocGhL'@;
put 'VDhgN0x0O2l9S0JtW15zUmp9V19DcklhPXMqOXJ7RjhleUleKEc8WCZ2WFp1dnc2S3dHSV51QXZdVDszVlN7Tmd9RUlCVSY6VThARzRaPndNZVZuRUc6KkRkQFgpVTRlL3F4Mnp+I2ZqYSRZNHdKU35ZW2lzJkk9RUIpQ0EiIywvJTxzfCZ4XmlJK2wjO21xYEhONiNLZDYheypFZCxMe0dAZilY'@;
put 'cEI5OzQsRUkpKGY8dnFjSnQsYTdGISw2N0ZzMm1VKWNTLD90dj8wOyNhcClQY0w/Ylt3XTEpTkFERSxdcUhQWj9ZfEVjZjc2RlghXmlNPk5HRDgobyFsdy92M0k0VUUlZzpBUlVFaUxpZz04UV5zXVYwRCh0fnY6OTtAU3JIaG42QkVMdyN4d0Z4aHxNMlQ5fkRaMVoqckBrN3wwbjFaNSNBfTg0'@;
put 'OS57Wz97XzdQc0k7czooUj8qSWtrfGVpc1AvQFVQajgiJFNeOihAR2AjcXBLOHY8LyElQER7dmh7X1FAREhpIXtKUnpGPnQkenBqZnpMJjteaUxjSCtlMGU4S2RbMGIoUm9dREFNPWpUWksrSzIwZjg2blJEdH1MYmpEZUE3OUIqfXRaSEJ1T0oha0hfW3csTmU7MFVIJGw1U1tZZzcpLiRNL0Ak'@;
put 'bF9xQ2JmYE5vVD1PIlcyfncuSSMjO0xTTUZ0NyZMOHIuO30jZz4vdnxQbz0kRTQiaC8pJXVbWGJ1Kj9WJUJmYEVyYVJWKHVlUCJBd31kZElBZWNKcXVPXzlwMzgzeCFdZD0zITZyemE7U3BdUWFxS1AhZEtART5mMDRIQkI+bHxqYnorQjQmVWtVQl9DN3FfN1svYj1renhAa2p4cHBab0YzZU9r'@;
put 'VG9HdWl2QDBmVEhVNSp7KkxeMTJdQm9MKDZgKW0pMklSYGFkYXNmc0tpfGxrPThRKUgoYXVZN15zd1RXUUYzOXIxJShZezA+IypyZXBqYWcidUQxSjhySSJqVX5AIyF8eDk9bEQ4enNwe1JAMnUzXVY4KWF1SUIrKH4zaS5WSXY9bEshcCtjR3JlUX5bVENZZjNHcHB3TElZanpCRUcsNFoxWWQ4'@;
put 'K2J0JD0scTc2ZiZZajE+ez5jP2pVbn1ASSRyUS5FX0BpNT1wbzZjL3hlZ1MhW0c9aXp2TUdCZClEL1d8LjFOb25POmgkQXd5cFlQP3ZgUUZiYnZvckgsMjwva0F1Qz57bWhHPUBobSNGOTkucnMibzE9YH5VWFJ8I3dbR11GT2BGSClzaHVON3pLJi5bbFRabnYpSyFBITVkVF0uOS9MU2VQbmUh'@;
put 'LF95SUs0WDZ6d21TNGVZV0dNNVFsUzchNHx1czQkNGdeIWR8XktAQj9VJH5aOCNGNmwscWU/Nyo8In0rWjExUGJAL1FQSnByeikmY0B1RTcxNC4yISFTdyNmfUYsSm0yOWo8Rnc0TVo8VGBsZ3s6aUdQWVlhXzdZVDFXY252LFVWNnhzZ3tTSn1zczE7cEJ0ZURAVHBKZSE0Ojc7MHpSRm0jVXFD'@;
put 'cjBnYjVVcj9RSWJxPF5Fcj0lUFdDOnFKJihTKCRvTlZAfEM/R2V5djAxfERvNVRHdn1zMylDbV1ienlSS0xWU2k6XTRVVWs3eWlaMC83PzZYLlMqRUImJE19XnA1cHpZfWI/dlhLeDJIeTgpJGV4QSl5RDdub2ckKT5EZGl8JjtDKlEqOCJxT2UsZ0d+dCg6IlhWISZ7Nnh0Z0tMLE09ZEtsSXhI'@;
put 'ZW5YMk9BT093Qjk5RVlUWz9FIU0/UmJhaiRyYkN0KTdhcHp9VWMmN29bVHVIPSN1Q0kkRWg8YGVPLCJqTGdPdl1OV1YhYUI3RXR0Tjd4QmQhO3BbWCopMHM+N0wrJT86YHYmakI7XVVQejlXSW8jQ29haiVUcF52cFRMRSl1Mzx2dGQ0YkJvU0JgbSUkeiwmTVBWO1dCcl9kMSokOXM1alE9b1hN'@;
put 'UDlFKDhXUjZPR2ZAL2VzLDwzTTJLZWlrTDRMZDgvIyV1SSp5SythTURTd3o4L087WGM1Q1ZSUGB+LHhgPl55OWpbMCVdI1NFT3t9TXo1T3ZVUlUiaVtCOkRwQFV8RlhzbiFQakNCWCliYUpURDR+d0RCVXFJfnJzOGtvRkgoV116KGM5bzsmWWsiTlA3Kz53KjtTInE6cDJHfCpnaXF4bmNsQDIm'@;
put 'KzhmP3Z9S00/Qyg0LCNNZTYyKEpjXkl7IWNqIV1zfTQyZlJ0X2AjQlVhfEo6PVNKXjtENEpkNEApXzsvN09WUyp2c1UrM0pUbyxbd1ZvfmtZbU8oditfP0JhW1V8d1Y0Il8heDsyR0JLQmQmYW9YZj1FRkhvQjEuN1VgZkFPKThwLy9KTXUqTEk2Wn4/VHZ0LHxGMCJaUjNQIVB9I1RWW3QmbmBM'@;
put 'eXx+cFdJLmspMnV2VS96dmY2bFEkVmEqQCZKfDNJMVREP3FRamphUHVbJEJmUyg3ckRvSlRHPCNwPyozLzdNJkJeNGYxbyhdcSpELGdhMFFURHQ2MUV7Z0dBPC8pLmJWT30yOU0vTjZhb20rJjg/aERRcDkhRDF9SFhsYDdSRWM3JXVJIjJMOFFdV0FNSGNFdD1LIURUSSY+LCN8O3MrQF0lUiVE'@;
put 'Z14ybDMxNlBYWjYkaV9+NUV5KENpejlzUU5XYHVuVlMrL0AzVDBKe2dyUEN1QyI6PSVwNl5GPi8mKkdCWV44aHt5WE1jRnRqLEYpMFdjKnQ5KTJsdkM2ZVo0fik6Jld+SVt+XS9mezF3UnI4IyVCTkRZb3c1OF5JVkxaNDciblUlTzxCKj8yS3AmJF9Wfj0wV1dMVipKfXZsUlJtaEs3d3lZIy4u'@;
put 'fDQvOjx8Q3YlazZHTUwoUXJ+c2ZzU1pQQkpMJlVQb1VWVTl8Jjg/NmpDQmFQRXIiMz42THt0KEBPVHp8UyZhLEtlTCs9ZkQ2TWJldGVIRCQ1QkguOUdbQik/VDB+QEtUaU0/bCFnIVQ5ZWUzKkksNWJmalVNOjJ4V3hEPXEiLDUhdFlycFJDL1toLGcyMU5YcENybGdJPGdxOXtFW3IpKV9LOkN6'@;
put 'MzhDPzxsWTp4KkxUYzMwQyowSXsqVnhkIlcxRXZIRGE4T15zTzlLKWsoSFgjM1RafmAkV1BxVUwvejYjblkiIUZhPm5QLyQiNS5yKGI/N1osZDtAN3VnaE5WaXw3WjNxSDJ9TngwX3M6d253RVk9R2dge2VgQFVVLHFUYz8pPGRYKiJ2MkhkSEtuYCEmW0RbW09NUFY2JGQzZHEoOElTaXt3IXBH'@;
put 'WCsmXnxoYmpOS3VXUT5aRmhueTBRUkV0QjFbWlpbOTREKS8/Pzl2XUI+SX5taUBPRmVCYFArYWxDQ2liV1RAcyhlLkw5Jnk8NSV5STJzeVBmJWxeTFNbMUdwQFZyX0tud0RHeTsoak1bWXt3Ri4peUUmRn1KekpaMTRsMylZbz9EPz93TFVQSlJmPllDVF5RaSZNfl9+QWk3OygqOWxPYVBoL3lL'@;
put 'dTBCTmgjfCxjW3RHWFZ3W1k5cWBKfD5LIks0XWskPkI9cGQsNHc+fm49ZjtKZXxePWB0KWlTKjZQKE0zQV91T15NajNvamklQTFGdHpOPVA4dkVzcWtCXyFwSFNCRmcjSXBDcls1XTciV0MlbShHfGl9dWRVQ0E4RlhAb1AxUyppcVNGZFc5ZmxZX3MoTTtidjV6Q2BldWIzbmNMS19rZGtZUG0v'@;
put 'WHoyMXxqSzkpMXJAQm0vN0o8WXl+aGApcGR0PG1SRWRManc8XyZeS2IwLjtAd1l8UWd+a15dUnIyfF4wQ3UycW1iImZqd3M8NFk8THlbfEpHemtRa2JXJV5DIyYxblklMG0hJSJSPH0qcyJLSnozcjNBW3wkaVVseShKVE9PLnxgJWl7aUdPfjx8VkBaMm8ybkVLJiN7Ynx4QVRLSWZjNWZ+JDoi'@;
put 'PEcwSFshU0phdXE6ME0uX1UwQysqNjg2fF9+RURtMCl1eDBGNzMqKXxmTmNiYy5LYVMweHIpO1pfIUY8InVAN3ZWanQ8P1hydDlMUnJ6eThoRCheKTBlOm1pfTJ2ejVAZ25WUyVVIjVBaCxVW0xCXXJAeUVYVUh+e28/IW5NdTRXSTs7dUwqSnhNWHErYCREYnBfbjxMezl0dCpWXz52RiN8IVVa'@;
put 'Y3ptdXZnIUBjSzhqMEE1akB4ZWFrKnVxbGIxPTx5YjZ2fGlSbWdiMldnQyIwdEtbYDBkMFB5PEg4KFgmS1V9YT5nY15UYmxDTF9jXyE9byNANGJdSEZWc0V8UDEsXTE2QSxnIW42dUpvbExlRSVZL0U2SkVTWWJ6Nm07Wk4iLEsrdE4hOTJjcyVkV1VZfnxralR1Sy9BSmdIb1ZsRW40Jj1rbEs5'@;
put 'eWVlKyVIa1k0UiFIJF1JbiZZbE98M3h7Tkx2VC4mTFNzc0VLImU0ejd6bEh6WER9KiQ/WzVIVmFmVkNbfjY+PytxJXlkbSxpOGokWkVYd2tDa2NjRi9HJShUWFNhUjV2Kjc0O1FIPGNhOFdzYGooJTxMTSh2bisqc3o0cDlhIzt+VHxlUihacGZuL0pmbn4hT3w4XlVXYGEsRE8iMnBAY0xlR2Yz'@;
put 'OF0wR2t6OEBMQmJPISheX31RXyU7fUtVdndxSVVqS0R5a0leTkN8JlMseXM/QyppLGwmNWJ5U0BXL09WTkF5aFlsI3lNNUdTMH0wNyZNNmp2V1J7aiFqPE9fczBQfjQ7NW5UQ1olL1BsaShUYWR6K3d3YTJsNUB0YCxJNz9HLnFITWJ2b2theDZwRUkoRDxWNyx2QzIjdCZARUVoY3JMIisoajlN'@;
put 'YEhOJkl7eWsyLzprPXViZH1Ac0dkXl8lXWtDfUk+K2hLfitZJTtObHlzcjtPZVNnMHQ7UXNfMUlrRlgqc2ZraG1wUFFyaEcmPWNYPWV1UXFVOmJZdzNve0hiK2U9alhdK0lyMzI8XSh1az5maTBzfks5aGJTeGNuTGBbNDpTIXsiKW05M3lbZl4pdXY8PlR7XmxuRio+Yy9HcjA5XS86Jls3TEM7'@;
put 'UzpHWUA6dG9MYFU+TTo8JXhXQVpfOD5VUEopITdXVjp+aT4qM2E2Zmc6NVRfKXxyN0NnOyQiZlJeM21VUEczS31iT2JfMWx1Ql9zN3FTZFYuSWtxK0FIWEk4UVkwOl9mUkVWYUReYkcwbX0rZTAya1toMWRtRXNyL3g1OFhxayZjMndGT2cjPlt4VSEzTj0qS1R4OCkkb2I4XmB+Pi8hMVsldmxK'@;
put 'TytaPGk1Qj1TJHFMaF46cTUlNXFmfW54OV5DMnZYRGFhOEJYPjN9S141R3psOzJldikybEhPImpPIztbTG1YVno8fTgwTSNOSW4hY0M1KzBCU0EyfE1oKiomUl52bT48fVtBS1JLXVYxIX5fcTpiciIrKDNCKSR3RTxRJVZOSipDR2l8W3BFcEBGfTFsWE40Tk4oazh0cnFoTTMvbF1MeUpjLG5g'@;
put 'SyFjWHYrWyVpQWwpKCRicS5Rcld+UT0jOWk6fiQmMiZqQloiM3lAZGo/KjxIOTNeYX1QWGpnXVtTZ2MsOiR1JUQiSFVkU2dbZyM8RGxHZ0ksM31vaCM+YCQ9V2IyR3NNQiU+RWVOQl5qYWN6ZTY2Pk9FNi5ySkdseSIjMkQvWzJzYUg2cC5kPTEvfnM+QUBFQEpwcEhhdHVPTEtwUHBLX0Fpb3Nz'@;
put 'TmhHZygmeX5XcSxxPn1wNm4qJlU3LEBoN0g3YCNbeSwxb3I1SCNUYT80Kk1NNDBNND4/Q2g8US9LZndmcHl7TSZSeVpYX147dCZEKlkjUH5YczJ4YkR1Oy9gcWE/cD42W3F2SGFWRilzOCNwYHw4eDN6Oj4wdEIkUmQ9UnlXT0JefGE7UHJHeFskNXBZWiRlMTFhP1EjcSReQEBBT1NVYDhJLEYs'@;
put 'cSNCaG4oMz5IO1ZXdmRhTT9gdGtdUHxuTj92ISh1K1llVFd3bEZfIWdjPFZ8OiMwdHUxUnBUP1JpWy9kXlcvUmVZc046LEJTQDN1d1F3KVlTdmV7Sm09YDxIPFsqWmZTO3BENSJZWG8xeCszLFNiZltxQCU6O3VlPC5aMyx6R3JFUTBDU2VaP1JWZm1gV2U5eFIpcTNbPTM6PCh2PlN1dUw3YHhx'@;
put 'cE1Wem5RRExNNCJUQSthUCVwKG5pQDl5ZVdkLyFaPHRFaWZJMFchSkBSRTJrIlJJTXM7L2wjQnhacSx+bFAmR2VvfH1BOCY+MS5kWH1GUDpPIkpXWl1TYH1idz1CRD14fH4rKlZEelk/MVR9eTlGW3U3dWNWeCt0U3tsTGtVfjEubDRRMDl+P3IsWXdZfD5OUjVTcmRacUVQPmd7PlJ4My86dERk'@;
put 'TEQ4PmVzZWRPVDZRd0hPcHBiWj9RQ1k5YVgzeVgzX0cyO2QxV35LUyM9ekx4JihOXlMmXztFfG1SIz9MPS9MeyQ0OShRT0tEKVNuUm1MO0MyUD9paE1+fkQ2MW9YNG1uTztMbUMoNzg5ISkvSTJCTFtNcHdjTSs8JnEyZD5nLHNNcV47YHNQfHVEPGQ3OjA1UGtPIiVuLF4relprQ1oxJnhtPU9Z'@;
put 'PTAiaXcoSnJBMlBmTD9AJXgxcGpqKlJ4aSszPEkkbEA7NmlPQypTdnxySC8pZH1mcXxeQllpJkdNPzw5QEZlbiheSCVdR1BHdGlCbTJXLj9hVDBdK0l8RmBDVmRMXzB7T21HSE8kYDFWVkcvI31ufFVDdTRqWyQzQXlVO1NpYFQySSlRNUZANXtqd243RFFyNDJKfnNDPl1rSlNTUEBWNksiIjAi'@;
put 'UXx2ZHN1flZzSTtvMGt0alI5JmNdYj5kSCxoLC5eRmt1N206e1VtW0E2XltHcl1eXylwPD9Xfk1yZ1g7Lm0uM2VtP1lWVVcuMnEvWEFRYSJBJHs1eExtWyR4PjpweUVHeGZxe28ufTFRYTNjbk1AISVGVEVQfDxIW04+PV4/ZV1nTkZCUjpOKTUxOkp7QHxFcG86Ilg9NkpOTGc1KWUkaTk+OS5Z'@;
put 'cTA7dk1iITJIRGdAWzF1ZDtAcGU4U215c3pjYThJc3NsRnc4PWsyfGJKRF0uN142TUdudTRDXiRMYnx4LjgvYChvWjZ6amovYCpFNV8jdHlFZX4/QkRtTCM1SjYiZTEwMzZrdkU0LlJdVEopZUpNMnMxXS40L3xCVDIkJlNCSTx5R2EhXSE+QkphdjBwOUtJZm9uMlNZeDVPIiZScG4xSXt2YXpM'@;
put 'KF0wZ150M3h5NihuIUBzdHU1PTAhUnpUPUolW1JmSld5eW5nST9JLiFzRGo/Uj9KWT0vfTwxbGZGeVc6KVhBJWY2XmR4Mm5VL1hrWilnPXBVOHA7LiphRj9TTkxuSHxgT2Z0P3BONl9TOHNaO0NRX3wiOndTVVsqfno+Vm0wViZuJGVmL11JZDxXZGNKYEskRDdQWHEpMWl4WVhlciNMR00/MSZi'@;
put 'SDtmenQ3ZzNfR35zXkgrLixjQSlhOyVLQWB3YXl3OWFQKH51P0JjaSM6Rl0+KHk5SjEoP30heDVrcXt6eENwdDkoaCtOSmNNMkhTOXB7dD89QTd7NCwiMkw7QXZNfTRkJDkiKFYxZkB9RlA2cUxQWGBpQGdiQio5cEUiPE1CTl5vZShtIWRqMWdkQVlDU2t8TWdqcGd3OlooSjlpL15mbih2e29E'@;
put 'ajNuTXpHfTN4eSZ0T3wvOHN5bGNzLzFxenovbmdWelVZeV9WKzd6WT9sZCtPPGAhdCgxe0NsSnsuYUhYa1Mjb1Nab299Sm9HMUwmPGoiMn5rUHI+Knwvd3JFTmhtM0YxX1VrSTtbc10vcjlMPWNwY3pEfnBAIis1PkRYMWBiPGQxKC4pTl5hQjNQM2NKNTk2TiZLMXEuNkVVYio2M3k4dk5jSC4m'@;
put 'ZkIoPW9TL2BGNmQxP2hxb0VVQ0BbaWB9JTJtZDs8ajozdk4wJVIhT1d+JGhFK0pWNWA/Qlh8SE0lPV15VlRycG5KND9Iby57fCRbP18udzE5ZWBYLGRfazJJOlZbd3YwSCh0Z05ZOTlNN09VcWdHejF5Wlp6Si86MSN0WExIQm1YN2RFUyI0ZWtmeHkmJElyNCVxdEshNGBRVkwzJHdiciUhYnJv'@;
put 'MGciYTlReWwzLjpuazYvY2lvXztma1VvNWtQSEh7dkdMfERzJUMjVVp8czRTfm03XyxGaXBfZ2xCT0AweXd4ZVYiN3B+QEd0aXwzYEVZJkhaTnsmdV5xZnVKMnVEcSwzMUhzI2l5IyhBXn01V1oucF1vNXlRI2h6Vk12Vjd5L1hvIUMsb0BSRHE0QkEidzZwe1pGTCZQTnhzYXFlUVM6JH19TVRD'@;
put 'P0dzTzsjZEkkW3RLR3pfdyJdKSkpMjRDTXZZKEVsSDFZc3tAKTxDSFR4UWMuT0RWUClRVERNUDR9eCooIWphLzZYJjoyfU4wWUQ5bEVpYSZYZmxnKmo/R0EzeHxmME4sbz1BcSRedUcvfUt7ZjI4PDN2WzFVWlAwVnx7UUR+NFhyMV93TTN8IUs9NFFRMDwmLnxEbVg8SnRPYCVjW09Oe0FeVHxv'@;
put 'Q2R9NkgkbmpgWDskbl54IUBIXjJNT2MrIipSTlJGVkQ5a0c8JDdxMDgpJk5YKV5HUntzRCQvaUcwdmUrPS5JYlV1fnMwVGhhPlsqOnczfTJkX2pRRSluPSM+YDVjZlRjZ35ZRlhhJkdVdzNGeCZ8eUpNals2TWlwen5nVT0rdHp6ZVk6M0NxfUZtRGpqNUdtTjdaRHQ5bFYie3UlKVg7dmhJc3FM'@;
put 'dnhvJkpJIWovWzVxd1RheD0kZ11XbE0rVWF4VElVOFtZciJLQ1VqRD81KEBrJkM0UEgjQ0t9NClKJSQoK0hHM31EUHwjbThBYEwqQDdbVD5aJWhNSltsYzpDKHAwYVpEMSZSTEM1Pz5FXjtxYTJUeHx0L0h8dHhIcWtzUSM+RC5bezk1OHJkcU5vKXlJWmY/bjgpSmtgSHo+WHxKQjxfUyJgRDdk'@;
put 'QmpOWlFJRDhbVTheMWxpW2RXeXY9LltDUyxKXWtBOyZPWnlmLFIldSNMWUkxblVyW2p6M2FwUSYoZnJ+XShvNmJLfXR2MVlQNW5NaVZuV2tML1g9YVgwSGhUdG9qYEQkeUk0UkErUFI0dyRUQnkpLzRTa0JOIlhMYjNEbDpkdUhibkxFMm5CNk16UkouIiRdPnksSDtwPlFTWUVUfChDfkhWbmd9'@;
put 'c3g9VnRwZFhtNCpoIlYqSGhoVEkvLjU9ZXQqd2x3YytSR0lvXXpab1tCei5WQiRdKFppayI1QTQoXiV2IX1tdmJVc3BaQ3UrbCU+byZHVGUqSUl+cUVBeC9rd0wkdko9YjQmTnokQEF3UXwyZG1wfnNzWnVFY09yM2JMMktfSmQ7Xm98cTxVTVdWTzxNfHtfeCVMUGsrO1dKcC8/IlolZDxgWm5X'@;
put 'bVNsJiY6VDdxUVVONWRPUTwleDlAfVN+dHVhNFE4KDY1UFt6dnRiTHxeM2VSX0I9ZVd0OXE7RkJpSV94YHlpIkdOUE88ZWEmOlY2NkV0UCo3YUVXfWNEampebXgqQmtdbTFOZXZXdmo7O01pXmEqSXJOQzhbU1NQamMrandbZlgvbmxqKTxYRGwzVCFIY2IhPFBZOXU0eHpnLmRRIUhKR0NpP3B0'@;
put 'V1pGNz57UmZrX2ZPNXRUUXtLSDgySTVXPCVVMiFrIUhzLzJmRm1aKDghWF1JPnpCT0Y6MmZhUDc+Mzg+REQ/VnhfMTUicCplcUpRTnRnS1owSWA+LD5NfGpwZiY+b3MwTyRhKShHVkBuMG5EQGppPjosPSJPdHIpLDFTNXUqX2A3Jit7cXAzcG9QLEVqYG00dVQ2MGFDV1UucXNGRWpMPXFJJTIq'@;
put 'JklrbF9NSj9VSWtGXzByQGJkN29CeCpvdjxMWiVQe2I3SmdfeT40U0E2dGAwNGc0c1VHfnBKQU5rNEMrcTRlUl4ieGJSWHlyQjxkW3RmbmtbdD0lbmV5cUlmUWx6Mzh+YUtSdz0xZTBMaCQiXnBDITJdaHVFeDc8WUN9V0x7Zz5UNCtZXSN+QCt7NHRKbCskNXJpSlM/NCMzMFhpUHRZVi42Qzw9'@;
put 'OXAmfkhgMTdJdlBMdCVhUnIhcSJXJCJ0VShZNEguU0sqJDw9c35beSFJV3o9diV9aVJQIj5yN11rKGwmSSxqOkVRVT1LTlYhdylPPVpMJkZzRCsyU1k4LGtrVmd4Wkl2cDJHdD9IV2lwPE9TOnU+eis8W0o2VUI0XWFMSGJZUzM1UmV4T0s7aVJfblJyNEw+PHRXZFBUVyxPVilrJHFhMGNRJkBZ'@;
put 'eDArZlkiRjIjeE5Ldyg7Tkl3TkgsaEc+X3lHMj10WktTUD15azFNcUM/PVI9eTRQRDcjUEh5TytMVzQmaWRnJFI9Qi9wYHYhS2Voc2M5RjA9TVNeUFVqOF9iYlZVPGNRdF0zX15sOV01aSh5ZDJ4UEZbcWZRUERqSFl6Lm5WMm1CamszOkExNVY/cnpRRU9FKjYwfkZ4QDxTL3U/VDJmSCRNY1A9'@;
put 'WlcuZiYoSlMrPElOcGhbZ0N9an5JU0UoMFMqNFM1LGRGVVFXX1IpMGA7dC9aVTN+dlAmc0BRVmBze3UrKGkiYjp9ZEhyZHkhWEl9JSksLE9lUklCLHMmMUd0TSMjYV90NT1wSnlIZFo6bmlJQEomdE02U2pGRlpHNnNOcllfdywvSUdtYWMySGwhQGwha3tnczpKSGVydHUqS2xIKXFqYHFfOUpl'@;
put 'W1p8RHFqREJHNDcmL0M0bEs0S0wwPW1zTlZwVHBEJGxaLyEzcjp3TkYlWGN1NmJgS2lpNTZzV1RdOzN5QyFrMnFkTjM1dk5SO1BgQUJVekNpNGUxUl5oLy5ZKXVxUjQwXitCUV5pRFkpU2UlTXxIV35IZXl6eEljXUk4W3xadnxVPU4/XjdKXjUkO35BUmQ+bF5zN2hJQ1c4fXZ+PWZURWtNeDJz'@;
put 'K3ZVOChYUFd2Q3ZCPEI2OHJwbCRZWDhSeGYrcUZ7elpLdVgvWDxWU2hxXzg3Kz8mZkQyJHtBcWY5dSFvLzpyVVohfjlFcGtFe25UIlZUNEVYVnZ3I2lqaWJufDdFNWR9ND1bY1Q8WSNaaUlxNGFidUwyR0tWPmUwUlosKCtaKGU7VjpwUEBdTmspbGVUKzhicEsrTmBecGpvJUJwYUlFaD4wRGVx'@;
put 'PShYR2d4JilAW1RxaH5hP098UWtQYHQ4dTMuTGdMNTFKYUQ+KX5gbzM0Yk9zQHk1NysxPHdQOWVhP1Q1dGBJeVJaJmA1K2h5clN5UXw8O01wUXx6Kzx3LkBdZ3VyXVY8IShzVU84MCMhKiM+cywodGI7RF1uL0QyQnVaRWZuI2MzUiZGUiEmb0Q4NiprLi9+Z3IzSiVaUHdPNFs8LDRkSVF4ZjBS'@;
put 'cFBiaFIvcysxfUpOQj1AbWNScVczYUpmOGJqMl5VIzZPS3F+b1I5aipja0V1ak50LG59amNKUkEiUHdLaGheRjJsRD9pZTZldGNLU347JiRDQURJUTpXOyE2eXkoayovYmxZU2gmQzp8biN3Zz99KzdEUGRHNU5qLzkyXU1oQ3EpamN+Jm9wMGdgQjx4PUJaQGE9cF4iblkwJXhMZE91WihwLldX'@;
put 'UjNvZ1YuMmBJK2EwU1U5cFIqVGI7WkM6fUBeSyZbInVvTVtFYHZBUnhCS1tMVT8qTFk6QnAzO31RIWdTMltCTypOJDNDa3lwe15TMUMjNjB7YTBZdmBAU2wiRkl6Vk5dRSU6OUczUGI+KjFMJilNKXVaSyQpdDYjV2U2UVJ1ZUM9OHVASkdkP05sa0ZWJDtHPnMkMUVBbkl0c0BmYl1hOkVoTDhi'@;
put 'QV05YW0sTzs+dntOfSg7UXJQVUg3Y0NlK1hAOTUoez9BejpLRj1NdiZWW052K1t3UCFHMkNYbCpEUzEqcGsrSD15Pn1QOjwhLk4pRjtXSThJNGFZelZOdTx0UlJdZ3l9QClORjkodl9wNFZTdjc+clUval9KOS98UE4hdEFVXU9CQm1GeHUwY0AxLHhOUU9FISZXYG5edjdbd2VsWCtXUTQkK2ss'@;
put 'QDgvaUhLfkFoVHx9UiVGUU90c3FfMTNlZGc3dnIhPmlpXXoufGs8K1UrNWtLUy5dKUkuXlV5OEJNZVhiTm9ZIjtuU3VSIWRkKGVFN2p3UHEseUw4I3A3MFAqSEJLc3BiLFI8L09Ae2Z5MDMqKT8zO2ZdPXxPfFl3cz9rTXtzfD5tT2J2MH1nays0U3xIK1l8aXdFOFc4Zz5dUE42Z0Q7YT9KKSYr'@;
put 'UHk6cWRhQVZLfjFtM3hLOkYiM0VpPCooQjY7YG9XSW5FenBGbyVgSmVMakpNYCIvSX1EXVhEJE0kRz99Rj1PezEvb2BjOFdXTERDOj8sImAhX1UoVCRVNlU0VndzZT9xdyJMYD4vNXE4IS51XnQuK3JGPS5oeHw/fC8mVFQ1OXQvQ3hiOXNHMEIrIWFdNV17V1BFLihRPjFfTz1CSGpNOEAzLGoh'@;
put 'fUBeb3pjMz0vVD0laHJORSU/cDh8an1NaSsmP2JsXyV2IUg/TX1HaEFmRX05Zi5pS1kseFFqTSgjWXdbIzFLJWhSKmt9fkZCbVd+VnFHdyooQEk8R3R6cEY1OytCPChTaD9kNTI5WmxMOiglYFVMNHQ+W21+bUBOTDxOOyxaOjs2flRPJTRBPWlvQHNDXmE/bjV8Q0NJbnBMcFVtemNyXT1gQ0h7'@;
put 'dy4pdXE8VEhvQ11uZzpZfVd6QUxraU1aTUF4NXFaJX07aD9fJWVxKGF3ND8oL0JNeG0oSztwUURSNGA7citFbWIyciorNl9GUjVDKHQ0eVY0Wm0oKUNERlNeTmFkVSZOKCpWaHtUR2gkW3Z1fW5wbX0qQlI4dmBCSTFrRGk5LnJaeXovOEwhW3pdY3M7XjgiJmdTfik8Q2NQSSJwbDpqS0FLLCUw'@;
put 'SGk0SixTW15HPFQuMWkkalE8ZCw/OU5lOVlNY2kiQU5fUWpofFJgb2IjfXNJLlomJkVPOSlAYWR+JXEsQ2VVa2ZGYGlGfUFGcmY+ZGMvVCs+Y2AzQDBfQUg+RDJKayNUUytbdT81KTIvfUJnP1lWdSZKQEZsIXRSflNyejRCX2dFd15jNHdxO2EoKFtdOzxoRWF0PT1qSSN5c0JyUzFEOTl8Yzps'@;
put 'eE9PaUB9S1FCJHtzaHNge0pfSilAPy5oUTluUnY7ZCU9MylkKiM5M0ZyZkZeO3tzVjY2RnZXQV5BdFFZd31Oal8hOHBVMllgKWk0XVJMVF5mYEsmYnE8RzNydyhfRUwjOko7YW5zTEN7SiE/KDY8UlQ6TC94YiEvQ3BhJmtPRV5Zb09CZHJZXWBafn1yKyZRPXFHS0p1KHBjMkV+VGpyR1tlUjhH'@;
put 'P187ZXRUUjRgPlFEQUlqKFhaazFDSkJ8eWN7IjdTdypbQT9zUEh6Kz9sPzQuWl1BOFhpUUZpI2FCJkVMR0N8ZXc9Ni9VJEMrWEAoZFh9RURIVDJnb2tjeUFwJF1nTDRkZjldN2x6MFBQTFVfQ0BaZmBnOEo6R1B9YjVhTzIuTHMkIm95PXJNKmVIRjliMT5TZSZMa01NI3AlPkgrU2U3cTRfQyVQ'@;
put 'ekxiQ0RQcG9wY3REME52cHNLOElEQGBDUm86PWNpUXdBX3w1ODdRJCNdWTpgKVRpN0lURyRhaXQxbDgjdDtDM3V4Lz8qNjcwZ0J1PG4yP2ZLdSRJS211OlpSUmVLRl0rZ293OlB4SGUuanpSMyZ7WSZ0fnd4THRASCw5IWx7eGtRfms4ZXlvMHhWKWNVWXB7Rz1JZntWbmE9KTQoM09BK3U3TWh+'@;
put 'UnRhLExHfWUvRnk0PFArOG09MDBKVHpMKl5SS1tfeSMoWmAkJCRfRyZ4WHVRVkxSSlsqbz5YNSZ0L3AkPyVQXXF4N0svT1U7eSVKMS93JUg3dmo5WWR9ZkdrRG1bJDk3JVtmIUI1bGQ9e1QhcFpnRWQ/Uzk7Mns4aF91fFssaUdafGdHYCZDVzE/X2Q7K3Q9cTZ4THdNeixJcGxwPVg/dmRWVyJa'@;
put 'Zj1iKl9SP01XLlRaelolUF5xJCohRml3cl5zM3c5Ny9LVHtSInw3VH0lU21eOS9+JXA+QSM2MmtsUUlVZ0Z+I218W1VqZX1QeDgzRnkqREEvL3Z1eCgvSFl1OF5bTDVCRDpsbDpRbFhjNWRxM3QsKTRiMSxfeHZCUE5oVkp2N3g5QzRvbyxfSE19c3EhLGt5NVhMNUk6dj5QVnJybkdFX0Fpdigx'@;
put 'Jnh7Z25NZ2haXjl6UXE+YzVLbzxjcSorc0gpXl43Okx1Mk40YVVRYFlnPCowV3RtLz5sbkk+RnVkNXt4JC9gU0NoYkRNaiFqNiRtS0RATV9HSnxBMENATm4sfDgyUk1oSXB1SitaSnZeYlhgT0d5K0N4M3teeyE5K1VzPzlkdDxsI3JnSjpgN3pPdjJqXVtrKHZaK2BTQndqUllyaCYuNkhUVWdE'@;
put 'aDRPX0ZtZGZ9TiQzOCUvLyI5UkNaPUQ7LzcvbnY8Y1tnd21PWUkkQiZpN1FCN1AuN1lxdWFqQ3Rsdkh1Z2l1TDBAYVg4Om4yKUJlK2AwM3crKX1fMnNmemM8fmxFSWdVZj88cERsL3xdcytnRHsweVcsTmUjSDxQaVR+UyRyLyM3WHpdVjohZi8xbkt7OUdENH00VjVYZnA3JCI9LHxmbT1zWldN'@;
put 'PXhQMWtpPmordmMqW109fVghJHB0MEMyWjJFeVE6Xypme3xNR2JYcSEzUUFdIjBsbWRaQX1hcTR4JCtxKiRLU3NOKEdQfWssXUJbRUxYTEZLWGZRczg/Pl5KR1JRPC5wT2UwMXY/RS4jSHVMUUMhfS9TXSxDJkVXZHhlP2pFUFNudGw2Uj81QjwzOz9KN0lsTn1EfSFAKyNwY1U5b01Re2dxRiQp'@;
put 'PVlbUHVbfTxecyYmX2d+JChrSTleTDpwXUY/SVNEciomVWo+K2J6d1MkP0txOzh8OFZkaC4wczx6c0RQXjxiME1adnl4Nyp3YUovfFklO3xSVEVUZEpRMiFiSls3dC9JSDd1UEI7ckFHckxJWV9WZzRWKCttI181VCQjYDw+WWcxaEpMQXMyOjZTZWZ+SS8qcUV6VmAhekYobVNZT20ofGNtW35L'@;
put 'Vz5GKSNBeH1YPWpTc1tUT2F1PyZDIjd0dkVTZSwifCxDMGpQMixTOUleJUooXTNseWIjeUhgLHcxfXhVKXp0K001LFYqajtEaD9udTBGfmcqaVE/YTVvNVkxeDFFQVMxQlk1ViYyJT4kZWdhZHIjQV1AXS94I210UDxVdURiQjBLcHElUjB9VSs4dXJkb3c/XkMhY3lNTVhVJGViVUQuTEkrSVE0'@;
put 'dl1MR3FHOEIwPG0rM35KaWlteVBeWzNkTW5HIkx8K0x1JXJZXlk9TFZQVGh1SiEwMFQ6PmxdI1subFgwbiJ1NEV5eztNNENUWilubWJjRTpgY1s4e1BAXms9TFpTP1IhSyo7fkNFSDg2WXUmR2pRZWpGNVE2Jk54VzVXOjJaMGVjKSJhOHRYVHEqMiF6ZlRxWGo0QDNuQ2NvUVBmSn5vNlMqODQ6'@;
put 'U2A8X1NWL3h6cHNbV3lISDRFWVNbMi8ySFJ0RV1PKmY+dXFVODlWfjxzZSM3P21bNFtTZzh6IXwpPWwjRiM9OFRPK058JSh3XW9IO3EjZks8byM6IVlvYH5rd0BVTCpFdV5dcS4uLDpiSV9aMV0kRHlmSjRMJGgmIWR3SChkdDtDcSNHZVY6Q09nb10xUnVhRiRAJUpqc2JRY0dZRHRQeU1xOk51'@;
put 'WSEvdDJ3MWVjZX5aanZKZFRiMEIqKU9CanhCY2JzPFUrJnttc145JDZkPnZEbEtjW1ViMTpoMXh1a3cjJH0hTkxBYldjRiJeWzRmLn0uUEl8OlVhSyx8SXFEMlIqTWpUazsyLnpXak42NipFeks2WGRPI1Fpekh6cERyentmOz4ja105fkZmMUNjMDNYN2Fzd1YmcGZ0eyEifVt2KDgkcEVfWkVW'@;
put 'WUlnLmZXcSh9KEVxO1VMVWBIdVAsO3xVTmcwaX1ifnY7TDlhZVA0SHJ0RDFOUGUwTUVBPFk0TWVzXWxqbmJ5V3NNKnBFYnclVnt5SnxCdWVQZjE3MGJUKD9hfGEkNkM8Z1ZVOVRZLjNpZDlJMVUpaW9qLmNNOzV2UzphOmc8NHJ5L0N2LFc5akBFayVmOmBHej1mWFVuLiNxWCx9Y1B0MTZgQVpn'@;
put 'NHhmOHFGeHpWd01PQnZpZTlBXV9EUjQxPCFNVnNpbU8oTSEsbVo+KCpON3ZbKTgqeUVQR00lU25zaVIxODdRQzNrUX1fREZJK3lzWTgqYiQldGY8bGlOJiZwejFObFplRX1ncnhxdlE8dk0wcyJ1LyJZfmQ0a0QsKV5JJlVsJHhqa1FdUXImbX1tTnhKKGgoIW49SjNdK18wc2BHUE1+OkRSO3lU'@;
put 'OUx7dS5oK2BoJjoiKHB0a2NaNUhWeTQwJD1dNXphUnZyJnklW0hwdHsvWDQje3NwZURkNl0jfHk9dj5aOGdhRihIdz1GeFhTW1cqJDJ3cGgjSFhpIX5Gc3Z3bl0wLis/Mil+X0ksQiVMImJmQWRONFg3RzlvWXIhU1l2PWhyXipALHxFVjMvWTciOVY8N24sTHJuaH5Vc156eGZMbipnKVE8TVQw'@;
put 'dWFPfWA5TUxdPHsza0AlfnxeLENzNFdXWkJ2eyREYCtYXzlXXi9BOlZYP2FFWFhuRTw3c1UscSpdcCIvOXZPKC42NUEpanxVdDJXU0ZNV0huO1l6TiNIVlZFYUQxUmE0YDE1SklJdmJeQ3kwX3QwNjFgZFJ0aUx3Z0N9eW5icVhQJWlfai4wYm4pYkJCUVlhczYhUCF0NzxjMnEhPVZ4ZG9QIm4u'@;
put 'aDIkOENNcnBMX040cm0zbUx3a086RiMoI348U14iMTM+ZXooRitZRCtvKzRXVUl4LGFhMHMrKmRvaSpGT1c2entfQG1jV05iPDZZdXV7UyE2TnhdZn16WTskc1o9IUpnRn1xKFJjJDpyQDBLdEluWE8jLGlibmElXXFIeVdtSSMiQ00iZDQxKGMzMzwqdnkjcDMrRl5DYW0rVUkqbnhWb14qUDpV'@;
put 'cXRsI2k8L05ZP0U3QTlxPVU9LFl8VmdnXXRtZ1I2TGhTcG1vYGAlUUdbZFNlSy82R3ZzNSM9YissM0xvJGNJd1hjJFZ3dER6clJZLkI8Q09vb1laRXxRX2ZtRDtaW0QjYzVfMDFAOWtedDA9flIyTyY/Vj9OVXttWUI7aTcvS2s7cFB5RXFDa15XL2lxPXs2cGNEM1kxa0J9TF88WGRRNHhuXWFs'@;
put 'XjBOQj8hQFtea0xHQ00oZWRNN25eJF5eOyQieTYpSixyKC8qKHorS0orIz5LKWNBVn0hJVc7aykwKWc/UVZtcDJ7Y09PXUojSTdZel52WixxOUVqZkZ1Y1slZWk9NkZlIlpCRVJXMnM+Yl9mYCpvZD1WVyhyQjVNN204W1hkKzZzfj59aSR0LFk4fjF5ZGc5YXRAUkZ2bTxLQmJqT2QhVmYpSFBx'@;
put 'YUs0OS87LDxwMVVKT3tqXXJ1Xnc7QCRXfHAhVWU/XzFLJm5lazt5UCFvfGxMIVh9ZDFJQ0oiJWB+dlhxPXhpVDVCRG9oR0duIlFSUH1LXVFpTFJPNj8jIU9+eWJEUE9PVD9YfDtdeCVEYC9JJFYofjohbWo0VFhSOl1gZUA1JEhORDxUUWptS3lEclU2ZXMoJlo6LjkrcTx3UkppUzZiVSx1P3s3'@;
put 'Ij17PXhvbHNjYW5QNEU8QSFKMDwka2loUFAqNmltKWdzSjBFfUN7Y29jZTIrQWFucmlGSUFPdk59c1lRWiJaOmxKbFJkfTg+LmReRlRfflNKYzN3fn0yMzY2MD5lfVl5ZTE1OzRRJn4+MSZbIUA4UGQpSCYoY1pDT1N4WktNXkUzYCN0fWpFKWhVVGN7WU80LEd7MVhbdFo5ejw2aSpsflFoU0VV'@;
put 'XlU1XTlyWVN+ZElnPnBILD8xbnlxb0FFO0BrYXhaRzBxbTRnP100anQ5R3IsRjZddj5ZIXoyOXglUmBhMTlKPVNOVlRuYiR6eVEkTi5KcVhnTXlOfCFKTDVNPTRHdV9eT3ZgQFR1LmBHW1lbST9aMWt7Z102MHBzeDcuSzxGdEtCalt2cGd2XUdpR2tEJVRDPUIoPzx0YnQkIixSPHdEQG9Jej0m'@;
put 'PUIvWDYjVkFiZkcqSmVlbil3bDpFc3ptU0NldmMyPl9fZjRNfSlaNXF9PF8lajBraVJEVk8mSDJVRTApckIuJjlSVEc4WlBEMnJAOEcpT0giMDUyM0Bvbn55N2xwXmR4a2ZDQWMpazQ9d1BeYU1zSF4qWFpNcDN3Qyx9a2VFSzVtWyRWeVZZIjAmMVA8aGx+KCRfN0JNbD8ueyNbKDEyezl3cUJP'@;
put 'RXpKOTd+UHAwVUEjbGcjb1MiMnhyNGBPPEU8NGNvZUNmRW1pWWF+YVJRe0lRe3lwM3NXb1BuMz1NLy5TfFtVbVRUI3Nib2s5bEVSK0xZYV8qQlUjb3xuYik4SyZ+US9sUEUiTTNPem5qNVdLQC9yc1lBNFIxSTR6NHJyLmwhKmo7ei8wcjs0YCFHamlKQVl5YWh7a2IzPmtKLkVVXldYYTBXfGxf'@;
put 'TUc0WnxhVlo1cGFubX57YCxpWTo/PVc5bVtTNCFLRDRMYnIvbWF0NE0kTSlINCgqUE1zZFVKYFtOeksjKEdpO0B+fHRSSmAwXz1bbVpZODU/O0M4JChxZX4qPHh5RDFGKkpWSUwuSTVVYTF6VyJ1OW9jYlslIXlufH5APXZrSUkkZn1kUHYvQFB1MDNJemFNO3hEfjFELz8wJWVzdkF2fmRYKmU3'@;
put 'UjRTUklXMGhYKGwuPU5bfXtaK21qMTEkaT8/MSFpLCIvfnpmJkouNU5iaH47P1ZKSFR5TnY2W3pXezk1UUc4VXRVL34wayFfUy5jZSFCeGhtZV8kb2VCVENBZWl2XVlEZnF7L11iPEhqVnsvT21+aTtHQkslNXsobFNYOTgpRk9IYHhaKVBNbHMhJi5kIVtJMllKVXIrblM4JGoyWSgwOFpEJWh7'@;
put 'amN2SSlPcXIvUT1CLnBGLzslaj8hKi9uLCFMd29LfGRnbGJIdnpuXUZIbDx3aW1aWyI2M1clWClVc2k6Rlo7SGppaGBuMzE2LHROdTJQZWhzSnEmbjBbfnp1WFRkQGpjJlVoQXElU14hW0UvJiJqQE9VZU1pSyFbMSZ0L0pLNG82bjZleFpqSyFbMSE6aExXIyE6R0VeZ3JSXThHSVFpUGFrNUx4'@;
put 'bkMvZWUqV3UmVm0sWjQlMT8pcVF+e0lvW0s4KF5fa3VicnYrTilkKjFOdnVDRyhZUilVaWh1UyZbOXRuRWFZdyZMLjl5bXhRfFpVVT9NLnFHIzYwLlo1bT99Smcwcl1AJGgjQDp5dGhgJmVSQ3JOOXZ+bHFgSSlULGE6c1ElVH1abzQhY1R0eTlpPm5CR0FffDN5W28kMyQrW2VIdzVCeUE0flFB'@;
put 'YFReNFY8djMqcGppfTImNj0vND1TNDcmcERRWjd8cTJ3cHdRP2xWaElWdVFuVFYwRyQ2KzJGbnZCJUUqP2FAVTByJkAiezVhRj9gVkQkfFJ2XlI8UGE9JX09SWI9PWBpVGEhaXQhXz1fQS84RiImaEY5LDRFSHMiYV19PWI2Uzt3ejt4TjphKT5eNDBZMUBiJGhtdEZ4MTZeO11iMSFVNjRebHFq'@;
put 'TXdBLih4OyxqO1osYWV2KE9IVyNaS1JoTk5dJm1GVjE0bER7O0NdVGR3KyVHPFgrWXUiVktpVWE1LGpyQVNAcmpOIzFDUDdFOjtJO3xgYHdeXU11ejtKaGNQZ01MQU1DTUIoNC5iT1AzNGBrWTZ9X0NZS0claSFpbWlJdztmcD1HXVdOWyt3UGEqXlBiMHdEXmdyK2U+KlopJDV7Y3UpSjVwcFM1'@;
put 'PVRGRiZseSVJcXg3Y3BpamtEPmteRlBwcFFfOi4qZXR4PFtENz0/LnpTPTJPez19e1peLyw9T15dRE1YLEJieSs+NiNpNHpnZitZcEhSYFEuXms/VVZKNkN0UzZSTmU/cklWdzB9YmQ5SVlVTD5XWCpnfCllazZ1RmJyWFhbPzwlQWVke3JkVExYKSZZPVJPXiJ8QzhmcChNWHRWWypsP19PYlsk'@;
put 'OiwvTiw/ZjJPfUdzQWd5ci59RU5DZX1DTU1kfTRiSyUrXjJCOzFyVWc8fFpeNSFWZl0iO3hpIUpsSXJlKiYsSWZadU14TEFXMXZFZy5WcHpGWkl2byV7e2F5M2V+ekRAJlRKeHQ3dm9LWFczUU1RMEI4KCxaUGcjc0w1OVUxIkthYHx2cEt4JEV0akteRDkkPDs7OVlwMlRPNS8mSlspT1ZESDFk'@;
put 'fmJYcTVmKWpSInxVIUteMDVlRGFLbyYsVDBVfnJmUFZFXkNtW11vS3Mjdk1jOm4mMklzeDVOcHRbfWBndFp6X1taQTBDbjk/bj5GZzloTkk3VTkiKDVedD85MHxvOkltYCQzNmpLTl1tLl95NjJnWDUpSX1WOF0lUV1OflpdRyJNRDEkTzhqeC9MWV03IzZXL0k2K2ZCfkZHSX5QW0B2bE9JNWx6'@;
put 'NmdtWnsjUk9XI3xFV1JtQEg8ZCNzTUhEKCJJWFEycz9oZXdqSVhuUWoqYDwqVm9nRTlUPk5lcTtLX3kvNE4iVmt0JHQxOjw/UTtofk1mITtFZjQ9SypiZGlNeV0hPCEyU1pEO1J9YiM7UylMV1QrZzgrWXAjLHlib1I5LzxicSV4UnJYI1Mrcl1CM19RUlJodlEjM0tJeH1sKVhtTCZiPkhrPWgp'@;
put 'P1VzOzBKRVUiNF5XP290PHFMdSZCMXZ7QjF2c0IhYDlqLnhEciVoYXRgTFVkIT1ldDU3bF45KFdGTnhtSWU0bjQpVzJuY0xeOSNZTmk+VUg+IVNbWnpudWtMNlJzJHpgUyo6YnYkYnxbNi4rSDlXWyI8cT8ifm5KN3okZCMkcjdbRjZ+U25HNXYvRTU9fGxGbCg7a01MN15hKDtnUG9wZywxdiF3'@;
put 'Snl+IyNdZzc/VCl2fDw9RTw5LlRqPE9qeHZucjVFNlh3OSZxPVZobV5YU0JlMiV3LC51MUxXMzl+XiJ8a2lkYnZvN0UhWEZ4UXZ9XmohOis0MH5NczorOVtGcGIyPiZ1OXIzKD4vMzRYU0Y9NnQvKU46ZUpXZTReWFlkeF9vO1JEMUt4SzA+b0osb1ghSUtnMGdsZ18sJWpGODFpck1uLzxrPk9u'@;
put 'L0NwPE9JOV0qcC87RltqXUdzKVYsYUR8NUQpVyRdSjk8b21tNWRxVihJYiZJWTB3R1ZYIksxak5wK0BpKEN1bElaMHtyOktxdS9GVlhdQzRMcXUvRlZYa01WYEYpIihdRnhwPkIzX1JGPHBVQnhRXnY4ZlVNezombyp3ciZNXlIpfnZmNlZyayNiZ0VqSGJDNE5bT3ZBTzBgenFhaFhmUFpNJmAo'@;
put 'W3FrI1tRIyNiVzQ/OGNzcTFUZz55cjRWd0dwTlBuJjhDQEYjb0o8OmRecV5zfFV5YzQ/dEF9c1VgOjd1JG9pNT9VI1dGLmlyVHRJMklYJWI/W2M+dGI1TCgpYTtWSXR5YjkxekNHSWFgdn1oYXM2bEwqMUtae1tZc1JUVnVjd0UvLjV2WktQdGgqNVlVI1tvS312SWteWHdUIykvVkxQQkBgT30k'@;
put 'dVFUKUBHNE9mOkIlKXQ2PyNVYEVHb3YrUilANnJweT47PzdMZ1hEV0B1Rj4yRSUzKjVme11xd0REXz1wNUp+ITBmNWVLZDh1MXc7WUdReSZ5PldOdyliKGpOd114YXh3SSNdeGl+aVFYSn5od3VTKkRdMnNZWHV1Iz1GdEsrU0x4QWJ9UT1uQXE0Jlppayt6SDJ3Pj5wVXRlQStdSyhQY0IsbzRg'@;
put 'PlFjVWIkWmkqVGlmQVNTQy5OZDs4Ul11XXo2JHdJeitsZX4zdkxbUzlXOjtLYlBUR3FZPSg6T3xtPjJMcjcjdUpoVFJbWT1CYjw0RTRqaDVeNWwuJXYuKnE3S1A+W21xem9LaD1jKzRmOXNeWGBdbEdvViMpfE45YWVgMkdkYFp7Rmo1aSNaZ3VIeUVDXmh8bkdPM2w9MEl3NDVAWTZycWVpaFhn'@;
put 'aUxucUhhZk1dWjtzJXNgd0RDXThUZlJtam4qL0YsWF5gcltUeERsTCl8UUArKkszWC9rdHg+PmljY1MyeSJ4OnQpQG1ndCNWU0tWdFNxelIlcG87VX1xQCV6cyVjMjF7NDMmcWBhNXtuJGZPU3ddaVA9WFpsdCVFU2pMeG10PnpwXmM5YEY+PDNzSnRLL019T0REJCNVUSY6Qn03ZD83TjZqYHx0'@;
put 'ey93JU0uQVpBXjNGV1dyRFBTSmJWOGk2QkY0aFJIYkgwdFBvYXlHaXBuJlcrPEBvOXo8eFU4aSZVQEYuaDMwJVApczJqRE9tYi9yYm1pNkYqNGA5Xks7QVg3OEBMYj10bUFKQD5NS2M2W0N6RWpCY3VhPEVfKmdJeGkmWnphS2Vfb2csX3x1OCM1LFslRktZfnFOMGlXLEYpQzYwW05rRFBbPSMm'@;
put 'OCkmYGx1JSo5TWIwVWV3dz0kb0F2UG9WeHRTdUhSPUc2ST4rMENPWTR9dFVHOk44YiRPTEJ+NVBNVGNwJmxqTmk+QFM1LkhacSgmM1ZzeEA8LzQ3XWg+OUJhQkwubz0+NV9SW2o6XlNnZiEpXi4/JjtIcSYlQylpcltvJiVXa11jYyhGW056QmRWNkJ7NWJ8NXRLUUclW0Y8JGwhMW03K3c0YnJW'@;
put 'Wn1BNGZ3KXVRbmMhJGQ0Qi5FNlVmIT9LL3U8cXtbSSUoRG1bTWEzN0N6WmR+LjBNaFIpbnhme3t+Rm9MaFFSRGIzMzZrLioyY2BGUV9dImByVUU8PWc2PFRWZFBAMFtgVjJYKj93U1BdbElYPjx6YHBpLFtgO0gzLk1VRnRZbGR7KUVUQHdWRGFLaFFpfHJjfkxMTmVtRkphL3VsZCM2bGZQeUVC'@;
put 'WVRTbTpfLHYpKGokdDJbVVhyJTtiI2xtWCwlNzZPOiRhY0ZYUTJBPkQsWys4LFNNKjdqZG96aXUldlpwTzdZSH4kens0V2dnWlREMi5pOyE2PSRhXjxUV21ZelZ+R3p8a2tPRGJrRyFBTFEmKlpPN1A3R2AyQ0QoVHx3Sz5eJkpuKi9pPUlZRjEwOi93Nlh0OyVqPyFDVXB1I30hKDxUYWEjcWVM'@;
put 'IV81c2Y/fE0vXkV9PlA5Y3IvMzZeZmxrO0hXbCFeeXMpM01leWllKGN5elomL05ZKntuU0VNZWQ+b1lHYig2ODNsLD04I1NKVVEyQWs5I1ZtSGB+bUdkWEtiUC9kcnJoU29iUUBSfkRdWztrUSQlTCFnKFM5PHxQUjtHS1czP0oxRCU/bkhNak9oTkFgMk0xNXVGKjFpKClqInd6YlZJZHBRJVgv'@;
put 'OH0pZVB0dWVPVHRtd3Nma0drVF5XK2kuaER6STBTQ1AqeFFGe09Gd11UVj5bPyVQK0cwYzQ0PzYlZTBnXkZaOHVDNT4vUmJ4NTZ8Il9wWi5OXShDZT87NXRFMkFGLk5BT3tnZk5SeCs0bDR0ZzNKNiZ1eFlKKVtedzVyOHA7XyJ6PFVLez09Z3RaeisiPUwzUzYocHY9bHIpfXNLSzR2T19JSEI0'@;
put 'M1lAN0RRQn5HemkyOWNJOGN3aEd+ViJNQW9BbEdxISVWOSJjc11UYnJhblJKZ2ZqSCFnRSJXe1hnbz9pKUA4TipIZWkkajNQQHkiVmohMEVvUE1eaT4keCxrSCFoeDtkN0t9JXEoOnZ8bXJbQiFYQ1tQN0s6O0l8N3VFMW44aElXTV9JdCYlUXFrPUVRKElvMGBeQDJmfHZTUTB0KmYvJE96dlc1'@;
put 'LzpXT1ZlWVlCRHtxJTljImJ1MSMpUnVqRkhGM0hAZHM8N3s5YVpsPGZZVVNhUCRQbmE2KCYrJVBuemBoLHlxbEpkWlB2LCE3bj5gNyprWkEvZUokQ081d0ZbQH5HMjIzJD9wOCM9Z1A9ZSRFPihxQ1RUM1l6PGAsYDFRIm4uJVF+ITw8Q197RWIrZzUpdyNuOiJHem9deTtgaV9rYmd6fjNqSiFF'@;
put 'c3RZMHUsZiUsVnhHRzQrTTB7dSwiPUJfMilsUj0sQmhXc1RybU9UVjw/en5OdmssdT5sdW5pUk1sPnlybTtodVNud0ZWWFheRi5lI0ZSSW9bP2M9Ki9SZWBefGVNTD14UFZ+eERSaDpKI3Q7QXFCJm45I1khNU0uOjAwInRYe21hYV9UfmVZKDltZUpEI1tAWldaOEl6KyhzJjd6SXdfazd1eGBZ'@;
put 'ajdnZi42Xm1SRnZNV0w+In1XfC8/bU9hdWs+QkZOJFk+X2VZPWpnKnc4byN3QmVlKSIvcSVWbFN3fiRwU1lqRDoxI3UsZiorTnIsMm17cT9HW14hMEMwXyMlbV8wYiRpY1N5KjlNcjxedWN2YiRZbiRpLGViIno3S0h2RGwjT002Rz1vOjRzKU5CWiRHU3dYK3VTQ09nKVk9Uit5ZUJIcz4zMEku'@;
put 'JUdmYD9yVXojSnMjMz51UCRYcmBTUlMpcFZZOD5DYHR1I0IzcSZnNSw2JElwPGxsVmsyRW1jeks1NXE8RnBQaXYqO3pdKjI2MDI7UEMjVjhVOkVRRElQMzJEJW0hIWw8bVYhOXt3Nlk5KTtiNzlMVGNyaV5aJG1HSDsmUHROWzhsKTdxJXJUekN4TDV5Xl9kKnxRIXtJaUp+bmlUaG5vW1E6RVRi'@;
put 'N3I5YDV4QH56QzV9fXh8JndmVy9aLzZyNmxGI0JLam04SCFJU3pTfks+PWVPWCslMSwmS3w+Z1ZfLCZxfC8/KFk6JUI+MyRCPnJ7PGlUSmZPN3E7YV5WbUhIRj9sTjxpTSxmT2pjT1I1PyZnKjYoTFRjZE1Ncz5rVCMqJTFgd21SKW18TnVeVmJ8ZF5ieXd7bUorP25EZjZbcVo7Xj11XTVTS3xJ'@;
put 'ZFV0UlhrTFB7NiJZbE4wKFc+dHxDZWo3XSptaTldanZsTlB8UDM/O0tDajUpJUB9KD0sXVRpdiY1b3FZTjApYkYzWzN0WV9MaD40Sj84NHslTGE1Syk/amFhXkFfJDgrWjxgPVJkJnc8X3Y3e0dFXURlaTVIS1k3ZCRhfTIpblQsXzFadWlMK0JfIXBBX0g7ZksranB8OS9Ec2MyPndKbGY1REom'@;
put 'SHtSekk7KzlTT3U2azZDel9TXVMyJjE7WFBWMilNVl5aclNKP214fTlVVklAInBdY29yc2R4dEJ7bCg7W0c6fTdmYiQ8X3FxQSR8dyNoRlcyfXc9UUVVNkY1MVgsNFdlR3VoWTQpbkk3L3glRl5mV09sSX18eit7QG1rfiVbW2w0dmlZVVovO1BKOi57e3s/IX15VVhzPSQoYXN+fFNJR2tVRmlS'@;
put 'cXV9MXwzdWg8QntuNyE/KVV+Ulg3Wnorbit3aF1uWVtWcFo5YDJWOnBeI3RYJGFNNFpseyQ+aWZ9N1J4bXdPI0RMOVdGYklJUkYuWF5VKHpeMSkxKnNpb19bViVadTtrWG1be1ZbS1M4cTE1NmN4UXVAIlFzalUkSTE8ZjxLZzZtaTppbXt9STpZcHo7WjR4aHt5aDlkbi9aS1Q2YTRvSE5wXy81'@;
put 'OihkPHdhO1JfX00zVmErdj08ZDxBR1BibjgqaiEhITQvIyI/TzcqQHVIJFApdF5lUUAlT1BBcT9wUiZpPzEhcFpeZiEqfDUpZEFoJUMmPHY/V0BMZVlaK1lyclA6WTZHM1BeJTFUcjxnW3xlMk5WPihoeG0vV2tCQywyQVBVIz9kZTpSU3JebmB9QUBTNHsuZ0hGKHc0L2kqSWlJa30seFgyM0A7'@;
put 'MT5ueSg+SUMyUSZxZUgjWWJSZj4pZTBTVWRKOHM3LER1LDFjejh3U3Q6eUMqcTxaezk4KTpMZFdVOUxfL1lgTjZ3TTUreFJ1fClYMEYpQjt1ZXxpIl5gN0QzTihaXVVIVWp1NH1lbkhzNztIclglRDcvYGNzUDV6P2hYT0FISXhbSGdIPC9YPCs2YUs7dFI6VFJGMC5ZSXZgYCIwWD5ySjIubChi'@;
put 'RWlGZjZQfn5gVz46JEFRKTFJZVc+WkUpWXliY1BWSX4+eUorM3F1WFklNmdiRkJKTz9SYlJgV08sckRpViR6Vy9qZHR4bXdBSnY2OkcpQEFrYDV+azB3dFpXW3NzIz0pVD9vTC9WUWUyWWFUUVRufGRSeD59aiYwWTF7VWwhYXIsVWlAUGsqNm56YXVGeXNhdl4hNUxzNVBtd01le143NzlyME9v'@;
put 'MlNCZVhQMipLMTo8dSMwWUpSN0VdUnBUVy4uVFNQeDhWW2E6SlgocGNtMkVQV19WaUtJLF9paEpgOmY3IVliKmIyJShIbFR6RU1mOz1eWWE4cFNfYXtwSEhAJC8vS00jcUtSUTNLQHB1aShyIm1+TUQxLEkodGBaVHJHInVXfVgsNT9kQ0JZTHp2R3tsRmNTJFlobE0iI2o1JT9tdWRiIztBWnou'@;
put 'XS84eGJfZHlwQlopJGtgVlJeZHlwIVlgTW5wc00rVnF1cFdZTXxWbixMeihsKVk6PG9+QEs/U3JobGolRkt1VT9NNExCSTRha2VBdGg9JTBaYC5OJVVgK09SNWVmdiNQSEhGWWN2Ry9VSiU+PTo3V0wzOihjaGNrYkA8UmdATUM5Sy90XnBjKXA8bFg0aWdIRns4ZT01dj1sZkBPSz5sbW1ZX1N7'@;
put 'MFl4NXlmejRgdzAqJSpxWS9oNmpOUSkrPSpNfXRwSnFgPk9iQjt7SX4ybF8leFBgImxZSnkydjkpbU1dbiFHeHY5V1Era0htfUB+OlQjWSVAOmVlRkB2ZzVpfWclI2Y0byQubDdnUzcyODA5aSk8UXZVTjc4eEA6MWtgUnsjI1VnbGsjYTUuTSE4LjImX2A/Z3JVMlEhZyhMeHJXaV4vYlZUYC5n'@;
put 'OndgSzNgYUwkR00qbmtwS01zbGMmfiwxTmssMU5BXj42cWRdNmIke3hRVm1OP20/WVQ3QGFMMztoeE4/Jm87fXhNb2I7Ik9pPWNVRzNiSTFiSkt5Wi5paXc2a1l3ajJ5NGNVW2suXXgmfnFxQzFXO3ZLP0pwUmBnWnxYfTI2YmE5KV9gWE02KjUqQlJ4Q0dkTGxSTipISy9JLFcsV3NTY3duT35J'@;
put 'aEE/MCtdWEwxYklOJTE9WnRTTUhsKXwyM0Q9XztiW0xVIyJ9YzJOe2FbRltSSl1tfDdXJWRTPzhJUnw2cWRRPCxTdzpweG9zMFNFN0MxITNHZ3g7UjBiZERRS2I/OjleOjpza3UlenolKHE4RnNnJVdOdE1SIUk7NGl2ZkYoY1R+PyUuUiQmT2xKNVMsZVRsd21LbGFnUTp8Z0ZUKGw9JW85Ui5v'@;
put 'YFdfWypgZzV2QXl5aU0rRlZbWitVZyVvKiN5X0lPRj4uPV4zPCY9JCxkd3RgM3YpI3tZaW02N2loRVshKldRMCppRVlrclZPaHxAIWN+Oyl8ciwrK1o1TE5AZ2A2bGhvJHg8K3tsbDlYV1R0aDU2dHJyMlN2THhVI2xDQXxaVEArc3FYJkZUYD9GVG4vKTgpWEZ6dT9PKmUvaDcwLG5KZ2hlZkAq'@;
put 'Lm5mdlRiUjBySn1uWG05YVZJO1E7RXFRMG14UlVnXi9Qc0A8YEB0Vn1LWzwsajVCMiQ6emdtRyl5PTU9U3RyMm5qQTFSTSx7YC5te1NDdFN0WUgkZ098U2MrOmQ6UUxabFIzVlokPEJAbng/WjBFakgxfVBKXX5fbiU2Smg+NzU8PCpqKGlTR1Jbflk/bWprcUhjcTFMVkxrdSIqP0M5SFQ8RDl3'@;
put 'WXs+V1tOWEJkWUpWT3BxZ0ZBOHpzOixyNSRjKiY3eGV2Im8zK2J2UnI2a1pNTWV5YDt6bSRWKD4zI3R0U2hCMXlLX3dyJjg1M3xSXXlRPShaPGBRTWtvS3pDMlV5VlNien1RTXhGNTJxei4oYSk3WGpzJl9HS1tLXTs0M3NUZDM5SiYocld9TTRKNTAmWV00Sns9TT0xNX1iNWdnQ088RnIySiZi'@;
put 'MkxLWHQrYGQ0USFeTHs9NGhPPGpINmQxRD89eVkkaiYkU0hYKiF2ZE80fHxtNWRDUz58JSgzQ2VYUlI4WSl6ZUV6PjZxbDBuSzljTnF6QUYkU0Y8NSU5ZCJqeiVVJGpldUkyLCI6XVNtWVZyQk97bG5tfTUucHhBT357SUJMR1doVVZwLDNhQDZobV0hY3VGcSs7RXV3LmoiTyM6Xz5xSnojU3Vz'@;
put 'cTFQcn14Kn0zY1ZpLDBZdGZpQk87PCUpXj9mYGkpbWRDe1U9QH5NZnBoZWt6YW58NkNBYiNWZ3VXcTtqSCVeXi48VTVjKUB0WTpsWWFiMHs6ayF0VUVnU2BKMyM4QHg8QlNgOkY3R01jTXJQOnVmO1JxTzhUWzdaS0JBZV81Q08yZl9AfHlGQ1d1bW1WdjxXckNzc0xuYzlLbUU2NCZqKXRmJSg9'@;
put 'Smcuek9EOlVaOGZWYi9wTk5sd09ydmU0ZlYmR10iZExiMyhub3oqRmZQW1dHdD1jZFcjcm5XfjdBW2k5b2tQSEBsaDpdeHFIRFkuWylnJUp4NVNEKnNCeWJ7aE1VeXV5WXlkU3V3dzFwdkhPNUpMRi5YVitiVE5Gc1lMbyljVi5wYFIpfkVXOD0sNjNZVDBUKX1TS3YmKi90MSkkbUB6RjVGQjYi'@;
put 'UzczZHI1cE9xYz5SV2Z0Il1SO2l4N2xGb2R9PDlLK28pPyU2NjxzaVg2XXZnPms4Y0xgKGxTaGY3MmxsIVpAYURSP15HcDRQS10rOU0ob1BeXiF6cG8icDhBcT0+L0dmbF8hNCZIJDlCTWcrOTA/MEI5fWdDYkAlU3xqNzBVO25GZ3lXQlFpeHwzOmJhOVJSXWVwck1RaWhITUAiRjNYK0JQMUlq'@;
put 'P2J3aVNkZSpyZFtQcFYlQmh0WU9wTGM5OkgwK1EuV3Y5ankoW1JvcktbVCNlIS8mbUZJNmo5WXJRYiE4fS9MUnxvKTFQfFB6Xik+VW8iRTddWXFRZCQmPFlEb014fSxgaV50elRydXlCOD1WUX0wemA7Q0w+YSJTcDRqTyNoXXB4Z3RYanVvLFthOiNgeWx9Nl1na145PVV4ZStrSWN6STxGZ01i'@;
put 'S0cmP0NAbmZ5VWY/dT9RQzJWOGJIRUJXWChocUBNYklDWV5JTGkmbDdQOjxTd2Z3U1pXVXI6UihxMX1adlF6MiV3bU5WaX55aEd+ZVEyLnd6ZT51dnc1dzgoVEMjIT9pT1d4JGljOyMwaVBEOkcoP1RVZzpNVUFaK0Vxa31wa2JDcTE5VVZ3dyxdWVdBciVxaEAyJC8/Z2NYeUssJi9LUXF0Z240'@;
put 'Qj5AVGlvb11pU1t7JDc/eDhKX2Q6KjA3UzpPMWEjI1VYdjEpYWlPIUt8Lz9dczM5KDRhcj5eeHowfHloWXk6YmxqYks4YVtLb1N7PWQ6TzozeF92Uy8+bUZfPVslaT5tUjRlNyZAdEIocmNjMF1PIiQyRztfZE8we1MhS2pEO0dvNVdRTFUlUzVmSGQsUGk3Indbaj07LkBiOldReHEhY3R5Y1sj'@;
put 'UHA+PFJiW2RGMjQ0UlV5WjwqeFRKenVMeUFlQlB8TjFrX2R8UHBFMURzZFBHfE0lXig6S0BNRl51I109X15JUDNCV11iMkRwVWdNcS92bWIkWk0zVlFSWyhhTT03X1tOUkhmX0opcCprOnxKZFZISGVoaUdBam0lT0tjQnJ+N29vaiY7Nyoscm8wNHNqMzFKOmpSY3g1VT1JezJ2PG5ROU9qYVJu'@;
put 'OUk9aUYqYWl4KGl7Nj1OSEJXTX5fVlRKRC98Zkw2UyRPPV4pVnFTSyp8NitsVSs2TT9GTH4vfEV+RSNmMzM7UTNWX1lvRj9mTTBjWVU4X25jSXNmT2wzfitIR2ArbkIlOnZgZzpPTXJbRV0mX2w4Vzc1fTdoO1V+Oix9N25oS1FgYnZKPk5AfnlhX2dSaFIrQ1Vffi9sSTAmQWA6dE9lTzNWSzZA'@;
put 'QHhnNWludjtdQGorMVI8SGkoKGU1c1UzSC5LT21VTWpDXypaWzxVYXhhWT41TEhwMURJV1s/dXJXL0pqRSlEZTNaSnpFdHd0Ryp9ajV9VGs1a35HPWtNO3o0P0JSWUkqSWZNdjFIayg/fUljSl94PCVgbCE2LlZ2ey41azUlSWlaXipbNF1sJXBvRzFTWiV4QExgfCRvJm1DMj0kJFB1VEJBXzdS'@;
put 'clc3Xj9NRD9wJVprUz81WkpePmE+cn0xbyxxWXxQOTJbUCMlPWFTdyw/MjNDMTpmOElDLzFhJnghaHgjXWReeVIxZiZpM05iIToyd2ssVyZ+USJRJTtYQCQ+ViJAXmQ1dGg/QE5QZyx6L2U+dXt5MlFXMlZodWFTVWdUaCY5dzVhXVMraTM6QkkrVih3Nko3R0hiYjdoO0VtRi5HYmI4PjQuKGZ1'@;
put 'ZlhaZGBBTShnSng7L3htezZZIVtVfnFBR00rTl5zUWVUIlZFI3M1bVsoIzp2Yi4rRy9YcWo0RmFqeDIhMFpjUFR6XT8kTl0vM1IoUWk3Qks1MU8qaD1tTzU4RmRaVEA4PyovQXpWV3NWNlpVK19gSys/YlBvUnoydlVHYFkyY1BUdXw1d0lzdVg3WXhVLkU6R2k8NURtJFtFXU9UWlt1YnVXTiMx'@;
put 'PXViXnVtbTssRyMvQFppcmd7TCtXcEllT3RmQ29Ee1smaTVwdXRHMUJMNmFlbFhhfmZrXmZ0T31pPXRoPmopM28pImN1YC5+elRyZFFeOmY4aX1VImR8XitoTUw9eGpwQmVVXl9keDFBKHE4MSZjfmpyVDVVMGJeTTdQUnQsKylgZEZ8MH57SiNKLnZpKE45bnEyPTNwa0ZrIyhVdGdiT0osOFlm'@;
put 'NlpEZXZvfDpJalJvWjNWTEI3RixrT1ljPlI8e2csP2B6Jis3PTdYfVJyNUF6b3FAbmU9SSlOKVFHUV4wSEJZK3JYOUNmSHlYbVVsTzhRb0dgfSRIP2AjRCwhJn5uRkFCZTwmSmdFIXhpRThBe1E4dVJPUDozbHlkPjxILHtrWTVHPns7JWUsJF5LNSMmZnUvMnwkPGZ8ZmYyKkQyVHRxPm52fU1F'@;
put 'NGxmNUxSMzF2JFpwaCVyWnFdbmlgSVRPIiFxSDMmVUlBUHdoUmJhaHg7TXJ1aCUjayh1MEZzbit4TTQ3Lkw0N2BnKXdsTmciaktWeHpwLCs0cHhobSFFdGpLVnhkQVlxIiY0InI2QnY+Qm5SMzFsRTRMWng2K20pQn5tfEs4XSZjNVgpSVYqWVMhS1JndGQ1IXNbcmAyW0BLalNzbl4zaXtGKyNh'@;
put 'aipMPGJpKCkpXlBiOCxpQDA1b1pkVF96ZTFecFkjVV9AR1N+RSEjRDN3Z29OdTMzOT14bDpZRHVIKncjLnAyYWgrQVhHQ1FiNHZJI11iUklHUD1Xa0tsYH1YWVp7OWRddSpsOVJaRyJWZm1hWUxlanI2U2ZtPT9ZMnAjRzwuYW4oJWU0OG14L2pOODtjYClHSElebnNPNXgjXix3TTlHLCpzXVlq'@;
put 'IUp7MFk2NTdzXkklaj5UOylleTNRYkY0QVY9bEk5dytLOkJQaT5RKUx8SGxdJXgqfEN8VWQjayNNJGU1U30hcGRjZ3g5Yzk6TmxxXllicTdIbEAqSnc7VTAkJG02RDJUYTE8QE89R1EjKk8+VSpOOj0lQ1psPUY4aDteaFkzR2FsKjVMKzxKamU9bCYlXT8hQUltUzo1Ujs2IVJdPHtneXJBOHBY'@;
put 'KHcqcmYlUFM3JmRaaUVRTj8/c29XZD5jTHBOP0RzSUNwSHYlP1llWWYmWmZHMF1wY1RQZnRSUXV1JT92R0FZU2hkcGRmYFhUUCVuKTNxdFBPNm8+V2YjOi4hKENCbWZdRjFXIkNtKlZLeEJENS5hKFgpdF52dWJ0KkgqVCxKMGBYVTg3cVJqLklTQ0B0WXFvTDlmUGE3XyxHNENNd31iIkMsU15X'@;
put 'TEhMKVRjfU8zdH5GemxsI1lJVXVTcXVwckh9TDZPITxAVzM1aEd9RklfO3N0P3h7bFgxc3lJQiFbQjR6WEtUU1c2KyFqbGwyOjQ4VGsrOVBGQW9hPnlnZkpCalZMWmwlUFdNVH1vSEJ4ZmBCRDxuaztPJEE/XUghOUZJPmd6QnQxMz50bkBIQ0pgMFQjUmdyeXomMVpdPn1yYS9yN3RtbzQoZytk'@;
put 'dmkrLzckWWhraE5YRlFOMz85Z2wkbk9RSkclUF1wdjI8QD94TmNPbGwpNU8hYCYxdFUsX2V1SVVeOFVteWtrUipmUlRpTlBXM09kRXpdOVo8QzVjWEReNX0/IzY3PitVaUVGMXJRX2Z7IWR2UzRvVyFdNEp6RTM/TWZYSXw6fFRgZ3EzcXF9Pjd5fX58Ykd4ZyJLdFhMT0dhPFoiSTdibnFKJiVR'@;
put 'U3tZOzljeDskL2J2fUNLMjpQXWwzZzQ3V2NUJWNId147LCZHfHlQXyg9YlBnSFNlYE9+TCQ/eFFdWSY0K2hzbiRqNFVtdHRMM1gjRzw5NU9AKmo0cClmZHdaQnZVXWZGKWwyXlB6THhiR2NQJUNzaSJPNCVedmY5elZLRmNaaExjRS4sflcpYHx2X0Y7SlsyYEtwPzIrOVA7K1orSSU5PWM5QHtM'@;
put 'Rn14OWFCSlNmISlkYHwlU3FtWVosOVc2RVJDUntjI0ZgdzA8eWY5aCIoVHFVJWUkbVBMeExOejF9OWQ1ZF11aXE+dSx1VVJXXUI4fT1JdjR1NmJvWHkobHwhfl9VUT94T0lPImd+ZE1sPU59N2lLLj0vN3Zwcy8xLFNaWlhiRiwuXVlePG9aPlYvZzopXTU3ITheImBRTSV2XjFXPDk0Ok08W0Ay'@;
put 'NDAhMi5sdFVtdCxkSFc3Yyg4QF1yMXBSVEY3Wnp0OjhxSDoqcFRSZEBCUiF1MCV3KUdKXWdSQnJBakA8XzdtT3dGUSMraUB9b0g2UVJRQ2M+L1RpWmIiNColT1p7TV9mNXtwWEhKPzJySEJvQnpwQjJ4NiMiX0RNdihSdWQjL3kqfUlFP0NbMTREZkI2RzxXZC8ybWVDWjhidjAwQVhPL1l3RHcr'@;
put 'Ojl8VTBZM2RTNkZJb0ReOTBUJitdY05ocVgoKEUjJWUwP1dobERUUXVuNSFrVi9FY2dQPTg4dTJMY3M3dj5hI1Q6KGZjc2JpK3tZQjVQamJELCltRSVrL243WDs0YXU4eTdGVWYzWyImL3RzNE9SR0VYQitXNFc8UHYpOn1ydm9EdUJOSG11TlhqNG8ldGgkWEpSYHwuMjgwLlpfP1ElLk8ycyIp'@;
put 'ez59cnhFO046Njx+ekJuPEZISGI6aFNXaStuOWVZbTRhdTh5PkVWQTI6VVhGI1IvZ14yMzorTXlrVTwmS0tAZUJjYi91QyNKU1o6SztfQlN5NmsiYXhafUBpI1VSMio5ZlIhaGBaRj57UjZqbGlHKVFJeDsqdX16S3hSdnUjKkB8WDJbSFsufi53ImtTI3A4ejVnKXpgNXVzR3AmaWxJJjJ2JVVV'@;
put 'dytPbFVFVmhbMS8zeFhPSEpvSEMxb1h9TFEyV2VIdEFANkBRdGxCMCRJLCtBTWUqWiJCPV86RzYrZTdLJHtPZTU6ZHZFInI/bSorLzNHOnVUdHdFXTk+ZXs7N3NzazJZZ2Z+QURVMklvYCFmPzl6NVtgKURAe2Y3emBOPF1JSkZOMUl3MVdfW2ZzT3NzbFExISZnbnV0bEZPYGM5UTh9R1RCODBP'@;
put 'S2EvKEQ/fkBJUjRqRFJSSmtFWWFpZW5qVmk7bH4+VVJUPkVSKCZac2pONmZHJSlvJFBNSDJ1V0Q5fip0IiMhYCMmQSZlWEN7QXFvKio7YHc4Y3BZZjdWWj99bCtkTnJEUTBNZWh1cl1GOyxTNW9MKnRGP21hfldNRnZ4IT9LfV1fYVApXXt3fWcleHVoZVNmZiFbd0JaKWhGLHZqP08xKmZjY1Bs'@;
put 'NTpIXXdEU2dTXS9fMCE/Xm9nMUkmbkhiNSJuR1k7dD1rYDB7T1BxbHE7XiRmVyl9dzdCJTRbUyFqY2tDSVRrRiVZYUhlQWshOjNNSCV3JVpdU1B+NXE1UDgqUUpjVHcvQCJoLGw3MWdoP1dzbSlZU2RxYWhqakc+LEZ3OChCVHxYbE13O1R5NGZNUGtHP3tfRiNWVH5gd2wuUmYzND9yUTJmKDJt'@;
put 'dEVJeVR0MWZ7JX0+UCVpQ1Z+e3VUYVAvRUczV1EzZjNZWmVVNHpPWVBAOXRdeHtOSTdUUVUhJSVuKnNCUDNae2ssNHNkbHJWYy5COHNJa15wWW9ZbjMheG01Z1crbC8+WFlfKFBiSCleUCF+Xj8wTU5oJXY4fExIa0VJdjxxYjAqdTd0aCZWYztfZ1dPeVIxMkRIWjtAV0Jfek9kK0lhX2p3fV1C'@;
put 'T3JMfiNbQ0wvaiN7akkobXpxL3goJGE8OV0/SXhRTyZ0SiZbdHVRZ3U6LlM3dy83X3trbGpXMWFnXXdRKCtPaCpkRG10QGNSKzxIUmo5WiF1ekYkK2pCWDpgPilvKXhmKj5TajFGQyhKZyppezcpTmxnUE5FbVsmWSk9ZmZ+KWVQVks4TCFnPWtZX2VjIjRUd0RMWFN1SDoucXhUeEhadWJXY25n'@;
put 'NlpTMikzdnRuKCN3Omg+OXNDT2sqTy5jVXFmM2F2Q3tOeSlVMnl5S0l+QHorLjZYbGBTJDIzRjlfOmIxdjkpNXZrbFp8Nn16VzQ0YSk3VHtZQG1oelZVcXt+XnpqO3cvZ3FzXSQoWDh4NGRRTHRScXxjJHNwN2h2SGdzUFlSbHJdQXlNUCFPZXEqKDpvVWJPTUlxdVlJcHBeIV1fZSwvNUo7ZiFO'@;
put 'bihmQHtueEo4VGYvJTpLdiFkUHdtKHtpeEIxI2pJb0FNS29adGBJVENTdDt5aklYTUcxPmVVQGx3eCM+OHIsZCNibl9SVixfaTFnYnJ9XVkqTEVvKzI9P2ErblolSmY4ZkhgZGJGNThbcj1QO304KkBzN3BRcEVlY0chdileMSwydDRmWDMhfV1FLE0yTHVyUSMqMytuWmIscmRkTmZIdWpmZkZ9'@;
put 'PmR7Uzw3Vil7OCtNPC88eVpHUF8oOF9dbVFHJSUrLk07Z1FELnRtOUVlKlM/OHJhX2FQSDVhVXM7VHNdZlcyTTxadS5hWTQxMDt6MWJ2ZnpAQTg2LHxhdH0+OyhZNT5TbTMxbkZlWURVM1hba01RMjJMWSlObyVfLCI3OCFqIiYxdCE6Jj1KT05nMWxsfkJHfjJdXlM0QmlSNUJjMndyXSR6InZB'@;
put 'ZkQ7YSs8OjptIVkiVkQpUS4jRUQ0RGkiPmg5Jjs/XX1UPCV3OFMjKUFDOF9LTFFQaXYvOmxFZ3F5YThycSh5d0daWE9Lb0N9JU9mKnVtJDUkME8sLHlpT05HSSFMUXlmNU8pTVJmN21XNV4haTF9WHh1OF1+aiZhdSYhYVEmZUgmcEJOdjM7O09QSDJROSwsQz8pPUIsKyV0UC41R20keSpHWj89'@;
put 'OzkrTV0pJnViKFR7I2p7d1dGfU5+LG5RNSxxaXM0eyx4U0EwcS4rcHtUPn5LNkI2YE5RcCFzZzlKOkZlQTYjXm58TkU+MXAyfFcsbCRzKioiTFhlfHJ9d1AhQCp7S0k5SU81PC8sYW5zVGJNeWozK3lHazg/Pi9SYHVCckJPZTxze0JlTTA6KigqWlZbUXNLVTQqW1dtKGZQUj0/cGJpST13c1A/'@;
put 'S2xLeVUmXyhGUUpsR0JHeTpCS0hEeSh3SUNJOVkoVEdwTXZfeXolYzw2bjVFRSNDWF4uJUxiZV95a2VYT3lDUjUrLHVMWEo2LkM/Z2VxWl5nTTMhNWBaQC9HSnpEOHRXIi51MExeSWNsVzJxeDEmKSkwbkNackh5NCFrTTx7YmNFRGxBfSl1PGtwajpKc0c1RU1ub3dhaGo/RWY8THgpLmJhOmwq'@;
put 'a2N4S0xJQTo8aTdYelgubCFzayFRUDRaJTV+JSp+MWh0K20xcnBON0klWDVlMmspMHBrTUpKJHU8JmVbbS8yX01sMnYpWUlbaWs8eExyWH18JU04UmB2bWgmSVlqa1AsVWl3UH5sUm5mMWBdc3lTemcjOTAsNVZ4OWRLO1ovL0guay95KyFaXlcpUDlSLDdmLHkrISMlRTgoIyRTUEhzZ1JeOkgv'@;
put 'Jj1jNDZ3Q2s2IWBMQHpNYz4xeVF9VyMsaj8/U1grWXxbTTk/NCZQPlF7VTMlYlJrU0d7bnBdKU5+cmBKWXB0LkZ7QClvTUk4YFhHSlpwKldyPD9haEVfNitJREA5cEhScy5UVixQRF92aXw5a1Y2IkQ4VSs/ZUAkU3tgJGEhTyIwYWgqJSUvJFM2R0ttYEVuUkpHNHFCJkFoTHw9cEw4WjcxaCkx'@;
put 'OWNTODdjMjRtTG1pJSg7XiguOS4obiU2XXo7eTsvQDdgOl9+YyRBVzlHcSNBam9pekc0KWI3c25ZPlA5SHhMWkhVVjUodyl0QzVkeDF3fTw/cmVoOmxeaiNgZXQqOHkwNGY+Ri5rYjBvP0M5MGdaOm98ZlBNRTdDP117YioqTisleDM0UjpqRXQqS2F6bz4qSTFYUStIalF5LHNKK15GfCIiRSZC'@;
put 'QkFgZyY6SCp4dypmWUBvTHxVd1lMcnN1ejFwfDsqJn1LVCZHPlFqWTFCWikyQlpoUHM0NGdmRjEseG97W2pQbkwrQkNbeFZ9UUp5Uk99UUlYWiU5S3QxLEBQMjtxcGRrSXhMK0J+QChxO2YzMVJPXlA2LDA1KDQvKmsqVlArQkh7ND1OSVdjOm1UbCs0TEtTY14/fDhISD0xalFzNDQ9MCRGVlF1'@;
put 'c29dXjMlNTJSNEB1fDcyUkprNTJoUWgycm11VW5dc210JUVrUXVuYGkmU3BxWCtjR0hoMnJtcmhGIy9FbDxEbzM3eyNnN3koQF9MUFBLSUVwTUI2WTJfZDxqb1E6P1JEOj9hSWgmLkBWUXVMS0VPdi4zXXQjL1s3fVRkOEFpfVRwO3h4ITg+Y3dNcDpBUH41RyVTVF1vZyElXSo9dk1Dcz4xTk9+'@;
put 'Mz9lI3FrbHdnR0l9MHNGeWU4SXBrejpsOW9vajcxJjNmPWdmNlM4IihJazUyPjtKa2pgaTdRJVMrXjkyJV9hOWc6KGQ2KWUwNzQ3QWhVOixZOm1VL2Y/cnZPbD88bmFtUH03KCVnJm06RytsKCoyYipwOk4xInRPeDAuNF86NHg/LnxWVTVhaTYvZDpfd1Vka0c0JmFQU3o4eE1vNTxoVXtiTmU7'@;
put 'bU5sTW8uZSsuXSQoKXFZfWB3RyV0aS9kK3hgTSwsMl5FYkxHUlBpXncyNW1wQDsrcVFfIUNVKColSXF4X1p6SXx5Z2ZVNm0qYToqKjAhPlJnZiZAWi9jZlROTXRFOFRfOl5+eHclPzE/STNCVTRPIVhILDF7O2d9PypyYHM9SCxleVZRVjhQfjVGcngke2lFeUVvNlQrcW1MOjcjd0lzdmdNO0lQ'@;
put 'IV0+PzFdMShZNldadGxSfHVvRCxObzlRJSFAOklwOSVnNSE8ITwhX3VzT2Z4K1IpbVUlTVFSP341WTM7amFPKlhOKlhpTTFUMExWRCUrRW96WFYzcEQ3e35dK1RRZDJzIXFkUVRZbEErLEcocy5GLHgjaj0oYyk3fDVZIUlnWVIrLFcwVXU/bltSP1tbLkAkYmltIUcqPWZzU2poKyE9Y3lAVSF6'@;
put 'YC93akdCbEssLzR4Qk4vL0lxdGwjPkYpTSpHWnA2cDBvdiRnfXZua1dXU1U+a1YvcmV1P0FvTUVGRWlbJjc2aT1DJERUUyRjLls1YntzQTh0JXAkUH4pNS8mW0pQQEQqZipgKHxGQnBrViwuc0JyR08/WzR8diluRiIlVT8ldTt6YVEhRFJKQFF7U2dDQX1VfDgkfnQ8UCslTmpWVGhiXWhbMGF4'@;
put 'bHZxVSZ4eEsmaUY3S2FzVX5xRDs/IWBBQFJsRmBOSmxtYmFnRm9gInYkS1V1QVpBaCMyRFJKLnk/bDBeNDJSQXZYayJ3X1AjbnFDeV9uTDBleShePExxI2RXRklQI3JRMSZ0c2FdJFFHZCpgO3wpdGdPKDI6VHVucCMiM2Zoa2YlLCNJQn1yR2hYTGFIS2BpMCQ2ek9PZFMifjZ0MVtDbGxDcjZh'@;
put 'UHdDWX5nOHk3d3ZkeiguUmE1Rk92W0xlQ341M2FCJkFbN2c+UnprI0E6dG0uJmFfI0ReSz09Uys0LG5wKXZAJXZHdl0zYXdHPlZOaF9DQ0IvWU9MbiV8THF2Z1F1KzU0IVc/IlApcyl1P3FWP0chK3FIZE0jNX1lb24oTVJmKGVCZGQ1KTBUcSN5SDVWTjBJbWVOWHN0IiIpdEo6YEVYNmQydGhX'@;
put 'WHZlaWkjXi59RmpWP0cpcikxelcwKixSe0BXaFgjVjxvUkA7XStbaU9qbj9bKTgqPj4qSSVBN1pyfD9paGZSRk1iUEo0dWo9MDo4JUtaUWBbaFlLdHpUX0gpRGlGX1tPW3lqJVA3KkBNWi5QcWUlbShuS1B9Jl80YmJkamNrY2E3ZDIjO259eTVJZEBmaDV7Kkk1RilKSVN7XTBaNypxcWRETCZd'@;
put 'VS4lJjpicC4jRGgkZDIjO35DUkxsYyNpcGU/V2tKLDdvTFhxbXUiVDBfbUlDNEBtISNKSFk0UmtOK281VGNfVE83ZDJKPVJsVVlZI0J+PDJKP2codDdvajwwZkx3cSF5eUpoeUtUZXVCPiY7ZypuWzJSV19vP2Q8NCxSalIhJDNqPSlsMixzZ0hZPEtnMSI/SmpscTcvL25eTVYhUjUwJkRaRG9O'@;
put 'UyReKlsybiJYNlopfmxoVyVfVTs3RG9BVVlOcVs1M2F9PXgwZWtIMHx9b2Q3O2YlaXBFcUtvZU8hbCoxSEdmJEUhJTdsTVVXWEE5NFF1Il1MTkc8ejVXN1VAfUUmNVc2PzZlKSh8eTNZb25YQEFoallneVg+bG97MFpDTkBWSHFLR28wRFZGRy8xRjAxTG96cSskfVJ6KSsxb15FZWomIzAqLG83'@;
put 'cil5JltCNXZIdj9YQ19tMGZWcEMyLHhSfHBiYV9WTE88b251MU5bOzBYbURzLDBeJG9+ZDJzZjxydS4kSDpzdXZ0YnIxPm17Syt2PTBzJlYqJXMhXyxSV2VZaDsod1J0QCNeS2F7K3B8aXRHSmclUEc4QmByTF1WUFRDVU4/S3Nbb3BXaUNuQ31nS3orJk9INmRTQGduJDA9NkNtI11HP2UodDl9'@;
put 'YEhAQz5fbSlBSDhlPEN4WEo7XXAueWI/cHY/dW4lbCoqLmRVdz0yVHI2MDFedDJ3JnsiNyhdPFFlNlB8SjpIQFB7O05WXWlPNTtvMVNHOjFIM19iMFtZUUpUZ0ArMjhSeDVnOEhJeSRXWW0+c3taZHYleFNtPk9mVER6TjkwT3F0XylgZDhHTj5SOmIxVXpCbzgsY0FDRnI/UlJhRlRNbmc1WSpU'@;
put 'ZCExUUVqfmRKSGhZbTRCai5pfFEiKF11dk09KzUhUDF5I2ImbEY6bm9PeG14ZUZWaWJPLilQKywwPk1YLy57WEFQbF1xbjElLnoleXpEO2BzPykuUVhqcjdPPnxeYFpwQGAxd2NIdD0oaiJ0NCQrTT94ZDooUnlBc3VBRFZfRlZ8NlNEbz5mdUtxNWozTDVqLEw1andBNWpUSENHc3F+WFZ1N1I8'@;
put 'd2pyekooazA0XyomPVBGYldUPkVjY2BPXTZycGQiVkQ3KF1QLm4mRmM4VkQ3O0tweXh8YWQ2M3ZdQmw3a0ZNIXBWaDBqWmF0e3A8bksxT1Z5aSwjZiZfODtsSzhwayZJQE9iM2cmY25vLiI7WWxvNGRSVjlTfXVVR1RPWEpnZXQ/Rlg5cCpMcSRyY00pIVo9NlIwJDU+Tks9Y0d0b2F0ViVQOncl'@;
put 'YCZRMHR9QmRpcVExKzNMSUkwPS9Ld3w4b3VRSXoyNi9BYF1TLFM7YTVjYFkkPnAkamNUOHRjXXwsPkMyWkFIWHQ/eShqYzZYbDkiKTJkK0wmNF52S0RdQWYjLmNgMXMlW202LnRMZU00Q0hYRWZAdlg3M3QqRjcwUjgoWTpaL3hKRF92YEN0fC98IkpfPzBBYHBRYkJKW10uQGFUKCxucllWM0tj'@;
put 'U2A9Q2V+OykubjB7ST4xfl57ZC8kNW9IKiY9UixUY2plOGM0PkouY1NsdUIzOEpDV2hLc0pCTFEwZ0NDL25ONUsvS01SL0t3cVIlVGd8bTNUdTUpMyE9V3thWzt8QUE8aTNIfDhLQHdlMSNTWEYxdGh3K3czKjUqcXNMRX0hYzNSYEl6bUE4YDlQQW91TDZPdnVrMVtpUSZqKmlvOjwhPVB7Oypn'@;
put 'W0d2WlglNntUZEhkUzxyPCMvOC5BKDgvaEJfUlpEe1F2JkBQWlg/MCZtO2tkMW1qQmEzUiswMjU1ezZvSWxMXUckSll5LF4ua0BDVCNuZGpJXUQkOW4pIX4sM3FBU1RFTCtCQG1vcjUmLns2RiUuKGlRaCRkMEgxUyQ6fnZeTFM8dm8mZ30leyFNdiYzLGU6VVlXSFEwWCNLaW86Y1lgJmoofSoh'@;
put 'VnAuMUZNIltHYmtbfGMib0BtJnBbOkJndzBRTilLKjBteFU2MGkwWyF2eE11VF1Xem5EKSxXemJkLy8qc0MuY0d4KVB2bTZDJWp9W2BJKEh7d0g+LmNVR2kiPCMrS1RDLmk1UT1HLiw2eC9JcDk7YHFNb28kPnRhQlJ0OTVCa1s/a0hpIlVZZEE3RnIjQi5uO3Y9L3BoJD1ZMndAbTgqQzVnKihF'@;
put 'fSU5cHVeWT5MZDpqRzFHdjBTUHNgTXkjcEJvbTRKOzZ+anBSOjNGa0R4WkcqcT1uJSNGJmMmO1tmPmhleDo1eDVTK1hFKyMmb3djVjgsZjFdQigsNlVgNmhgWG53OXM+eCRALlE5fHIrZUtmXnw6aSUkc2BHWFJVfCZQVCx8PnF0LjhIT0t1fGwxWkcqcXliJm9xe0JjbGtNZUByQWhjUUgibnFY'@;
put 'UlpVQGlWZGNKe2BdMT9APjQ6TGNtYiRPPTBtczxKZGNVMzdBL3xyLkApdFgxWm8zbS5ZSixpNVY2OGNGcXhAQilRLiprQFVDTUNGJSNKbT9yZFVxIUpZKiw1fEspJk9Pd1ZLTz0/JUZrVEpHPWlvPTdUV3B9IjByeHVvcCNKbWJ0ImQzT00oazVgUHRGcEhxS3pnb258QE9sMF1sNUp5VmpTK2BB'@;
put 'dS9SbVNHQy8pbG9vUGVUWEZWUEBiaiVTZSN+ZypMRVMyMl1wNVs4VjgzazJodzU2YjB2KGJ2RHRCfTdhVlJ0K01vIUcyLl8uK2ZoT0pjJjM7dU1qUWpJOkN5Ym8hQCVyLnc9fS9kWjt1eD9xbm0/MGtySDk0MnJhTCtHMTlnI3JiJGI+WmsqX1EzaUcpIzIsOlhOOntxJnModDsqeG9HSU9LfCRX'@;
put 'Pn5yV1FdS0tVRTxEdHJQb2k1N0tTWiU8Ky9KSGhPMmxALnpIZXBAeUREZD9pVk5gbzJpTlcqU3A2KzlCcHpHTW1EUDpydWchRGd3RklNQGw1fiFfbHpJT31QQiEvRjJDJTJmZVZfe3FTKSYuV21TQ2VmQ2Y1OjkjRl9kKnB8ZUVAVCVGe3F9cTVjI0tpIlJCMmlSa2csKExeIi5URVcsRVUqbj4/'@;
put 'dFQoQnl8aHRQRkIpbmZzWWM+InQ8W0g4LHBHR25Db2ZMZlBDUj8majtDajpdTnhxUFc1OSsoOm9ObDRgUDkxMyh6Q1cqZWBhXX1XNk99biohSHdSR0J9fF1Scys0fk9oQj9EYmkhMERHNz8pcHBySEdDYX5pTk0vXmhuPFhUU3VmSEtVXitKMnZEZ0E9UC9iUmpJb1FXJEF4dzxCKyJLWXxOaW84'@;
put 'SFFealNbTVRlRGY7Ikk4WGppWD9aTU8idT5fOCgsVn43YnQjeStERVRMP21EXU1LcCJdV3doInxCeDdbdEtPZW5oY2VFNUY+THpqSCtiOWFYVXRmfGp6QHBCJjBfeVs6LGJuMTRkU3dkfD8/VDZPRHcsXXJmXnFJdjM0VVtPJkFQNzs6P3hxOjF1clYpUDBKW0tsKE8iPGlOWCg8QnF+MGAxKipE'@;
put 'MS9NQDRvMi5ddyVBSixNNm9iTFl3TTYkNko5UyEwSCFNI248XlkkNW1gaFlOelRLNXc2O3BeTH5HMT1fPFsjWHBEaUJxbk4+a0JjYlopPVRSbDBNNXA3UURgV1BgVE5EOGN+dk9IWDh4U3pTJmpnbSpeclYucEdbX1osISg7PnVWM2RgKFdkIjo4WFVDWVF0Q2JVbyI+UDNHZXVqJEErOUdULjlO'@;
put 'fG9fIllUQTRMZTlBaSZRdV5ZLFh5O11RcldyeDxLakxqdW8kMU8rN3xRWSR4TSt+Wjw+ZzV4TmhGTS53YXIoP3EhVDR3bUBHRFdSLjRsU0IyKHc/cV50X0IkQkVbfFJIeE18LGxjO1dOaFI4Wj4hTUdEVW9YVjN7OzdMU0NIbj5+NWU+Rm40ZUBGV3heTl5RKHw8KDZnMWMxYiQmNHo+M0R2cHdI'@;
put 'OnhuOWlyZyEmZj95P2xJWHhENHtyXW1DQz0kWyFFZ2VAbF89W0NULldnLDAkdCpsP2hEbFpXSW1YZTZ0aEZgaCQ4VltrfS9EeTp7Yk04XnwhRztuTD8hZi9vXmFXLy9UajxRaG5gYjFBW3VuRSF4I1c2d3ZVSCRHM1VSY2xYWmwiZGNVPCNAUHV0VkhtXyVELkJsdnhAbGdSY1RjUGQ/ZV0wL2cv'@;
put 'QFJVRmUjaE5kPFJBVHo6VkVIXSo0KXFTT09hYkVQXSw0KXEkWzFpLmdlUWw2ai9veF9AJnxIbFJ0a2JdLCxsUmNUUHAuXl19IXArWFE3a1hCQ0Z8Rm9GYjtgPnFVd0NuPz1fVElETDl0cl95SzwpY0ZJRU1JR0ZDQFBnTXNDK2kxTVhBciJ0WnVoVSJLdFpIMTtvZSlSVVIxTTBheDhQSkQpJG5l'@;
put 'eDBXPm55blFlTz5PdkcpOWtvKldEKSNPK2RHMD1GR09TLyF9QGYlSEZGOjtObyttMlh8JntTKXFvfl5CTGNSN2wwQmBpY0pbKVg7QzF8JCY3PyoqPFFyRXQudix0b3BaPCtCMUl4NywxRnVuNGliUT0mejlfQlBPYls1O29gaVBjVUNQTio8UWJoRk9KRDVpUXVlb35nUXFTL3w5ZlNUUEtLJnNL'@;
put 'Qmx2UnVWIVJPO0Rdd34+cG8zZz9gImUualJSWjNJRlBjOFIiM19CZlthWyF2TnBvbzUsaTErNC40fGJ1Mjg8M3p5Y2ZMMUpVMXdqdHRzIWMyY2ZiaTdbbVdWUi56fChUXWh0d2UkKlMkbDc3SERgS2ZdK1FmMEQvNnszOFByemMzI1IiITQ1UyRVPlNATlo9Ll5vWGJ4O2czM0wmeGw4IypzS29S'@;
put 'TjVZRilCMEN8ZH1RJixmS3BET3ldN3dnbjFMNG5qZHlLOXAhYV0kWWxUa0Q4LltPdk5fJE1RS0hpJlVncHlVaFR3bC4kKGROfCRzUS4ieVZ+QTJPWDZCRGMuKDpzNEpNYXY7YGIxV0lHPFIvWnFwKiNTWVF+YVdwSDpybyhoYXRUbC9nYjZvaTx8bGVOcFBkMGRHczo3S2ZlbWM8aDRePjJYZ2JA'@;
put 'SVYvcV9lYyQhTTB0dEgwMXVqbkU1NlA3Q0tPYFFpNFFhKFchWXJpMltdRGtnV3RPZU41VEEyWyo8RTxHK2B2ZDRaJnJ0fld4cW5YQ14jS3dTK0ouRzQ6dzdpMjk8aFo7W0ppOElqNFomeSJ3UjVbOy5APjkoRTllPj8/LjgwY35aVms6O0AxPWI2a21KSEYzSGRYIj9UK2l4NTs0b0xQVUZqUW5Y'@;
put 'MjMzLnQ4YmA7R1t3W3lvfV1qMjFVbyNkR1dzSX1zbmpYPzpULzZWJnJfZ0pkPEgrVEY9cTJpKFc4Y3Uzci8vRltEUCppSDlpUUw/MWx4RkRWJj5PeXdTNlUmIkNCISJdVlkoP1QyL2FOeHAqXm8zL1A3QTp4fEVddFNBKVEyfTBQSjBWSD40WFhTVSZpP1F1TDE6Ljt5LGw5am5YS3UkNWY/bU9j'@;
put 'RF10YnFdVEZHfVF1XyV0OD9qPDooZWh0VFFpbVlkKyJPWUh4Z2pYYS8vdFlCc0k+VjtSLHxsWEMyQHh4STM0YUY8Znt8KTdLPyNuOmsvWmwzTE0rLzhPLGJjVXlsYlZuRyVpO3gyJXhgM3YzbSlfUld5QGpTIkcpWTVRK1RCeCQ2RWM7SD5kKX1AMkN6P2hOLmpFWzIkLy97JXpPJnBCZVApQiJi'@;
put 'LmdHYWdgflF2WXdCRm1gME1RZkJQYmRuezIzay93eSh+eFFQL1QhO00+K19wUUpLJChFeTtWJiR0aiw7Jjh2NUsrKDcmWyNvM25fPmYuInRFbDdmN1FvVyJWWXRsQmJMU1lMemZLOnd7KDpTQCZPLiRKNHE/XUFTREp1bl8+NHx0blU+JUdYRmspbHI9VmByeTBycSFAOUk6eCJoZHhyNE8oZyoy'@;
put 'LCtHdyFNK3llVUhRfHVkIm5CbUJRcVkqKDZ9QUNjW11PYHRbdVp1VkVjNUd2cTQoW2FbfiovcG5LYj1YSXxDWjJtQlspMU5+VjdwM1tKT0U4dGlyRHl2JFs2NWYrNEFwSn5wVnJrQmtDc0NrQ0trflZqQnFuPGgrKjJ0RUROaS53UWZoSVthVipKXl0wQzxuJnJ0Q29FOlo2JjQ9RltOfnlXP0pw'@;
put 'M2J3ZSR1Nkh5dlQvPFN+eU1QRSFwKkg4QFFgK3xNLj9iMT5yV1Q1ak16b346SWw6LEBIKVMqUypbfSI/Kz13TWpXfFNUcH4wfEBocEQyfEBNenlsfGRSVlRNQjJ4NjhTZjJRLm85amxzSDBdSUVPYV9WJTJROl83MlJOWTxSbjYha3BIZ2VhR30hI1N9UUpdQTsqZCFFYCxUdUV7OGksMVttaGJ9'@;
put 'X2cmLDYpWG0vSzNFWTJRXVIyN11AdVYyUTVhWF15aXFvLlslWXglY1FMfX56NjEzMTdZeC9FciRbR1puYD59QzVaNkxwVVF5LFpNWjdHTjNKakVDeC5UXWFMdSslJFt8Y0RLIisoZlE6dVhpKDxRP0kwLHclUWh6VjZaWCZkMXJKKzdJbnlWbV0lWUd9b35rOlB1dGowUTYsT2R9Nz9JMnhGe343'@;
put 'dDA0OkxoSDBnXTc6Z10hPEk4bWZ4bUdQNTEzfmxgKUtOMSVMMUwkeltURW9saGQzUFQsO3ltMFJmS0hGO0F1d1I8e2hjdUI6eXNgMzVCTDIrfGI9SSk/YG4wLz8rR2ROJnxRRFErWnxSJDtaWUdgLnReRjg6PTtZSyV5NilEbVt8QyV0KVlXZjNZeHVJcl9tZXhzfEgmdlkoWDxrS3NoKUNdZyl3'@;
put 'anRCdHVYPlhrY0J4cX1IQXo/X1VKbHMqOStNPC9nKFN3OGMscUhoOUpEakxHOlc7V15WQmwwOz5zJnAqLkJ3SXc1KVRkZVd4ZzRMcXUjRH4qYTp5YippXiVtdkdbS045TDRZfUxgUk93eCh8KF9WZWdAW1RzL0s6eE9AdEJSLl96YHN0e1tiYSlxbyl9Py86LGk1Yzp3IzlkMWwjb1lHcWZlX0Ry'@;
put 'X3lpeG97Z3V8bXJveUx0b3N4YHchdyoiW01ZMWUpKUwmZCx8dmZoWFoqRWtwamNvKmldQzFYMyhuZiVQSDxvfF5kMllEe1NnU3hFXVUhPGloeFNNLEtUej5ZWUhhbX49LnIrbClWJjZ8RHZbOyhJayY+OlhRfExeXURjQkBKUzZbS3AmcixTW1RYbStCJUUrNXhrNUN9Tm8wKEJlJV4zUEhKSDpM'@;
put 'UjNWc1JiTVFTMFlEe1t4cnFwPyxMaWk4RV4vflZ7Km52KW5HKzw0KHdqWDU9VyVMQjZbPUA+JVt2dHNSdT1bTkl7cCtGNHhWSDk/eUkzUkNtVUspOz9iNCFzaiQ8TGU6aFg9c0UvSTBLOy89THVfcHg2Z3N8JGY1PUhwaUdOb0NeMWtLaE1jTDhEMkM4SlImfWtZbDNjSVVVZnVuT29iVipKJDRR'@;
put 'I3o8QyZYUm1CUXVZY3R8cXcoVyVKMDF4eXc4Pzd+VCs6ZXBZX1ZKbk4uIkQia35mKHxtY35wRCUuK2BsQVN6TS58KUlNdEsrJVouSnQ3MVFTNFVSMyZWanhgYl8hLmswO1tZY01uNFAiajlSS0wyRjFEd3BiV0tofTB1ZHZIOypBPjJTfWowVUUsNSM8OnB2YlpFUlspKk9GNz1OU1p1ZFlheW9M'@;
put 'R3g3bC5zV1Y3SzsjZEpLUl9ofExAQipkY2AvIW1od0xWPmRYfERxa0hoQmU0aH5jeENGTjVIe1E4KFpIIXFzcSNXbiZwWCRgSSptXXI+JEoubUsyX1dMa0dfT1c4YUddcCozfTdfZ21JQVBNOXM1Xk4hJGxxfDgjNXc1O195P3NxOlldWlIqLmdoJjZjWU9yVTl1RSM3el1DSz1waTJ+TDx7c2xK'@;
put 'Qnk/azUlVV1yMV56e28jZFdvYyRmUm1icGJGUE11Vn5eRCZtW1t1PlZ6IWUsZyolUE03X2h3NjJfejg/JV0/SUUqJjVja2NFPFt5dUEofSYzWGlrUnhRekBQSEoxWDd3K1k9WytmVHJ5eUUleCgkPjpiPEZ1c0ZrfUd8PnNwczs9W1loeXAiKSImK1k9W0FJI3ZeXVliY1lMa35mL0k0N2U9Yllb'@;
put 'eV5RTTtHZFhBKTxOZUQ2emAuaCNva00pZHVBWDd6dlA+IlFIMG1gZkd9akIyfCwvUHFiLmR+LHdzPjhqLzxPTX1KY1NAaSNpNXVdbXhEaCQ4XTNEViI3aTo+VGIkOGE5VSxzYToyY2FEQ2hpMjk8OUJJIywsaiJJckkxV2gjL1hQfj8pbW4jeTpESylKWGtdbmN3TjQyUDYqU141Rj5iNWo8aHdj'@;
put 'NlJXZy9ZMExmYHUwczZEUlBzR0o9SmF4TFZgVHJhYDBjUWFBMi9JOH17fEJFTmR2Rm96UlI5NGhiO2BzfXR2RzhiUkhJYWsqQTY1YzQvaSpHVDRSMToyfkBqYn5MYS9AIXM1PVdtfng2K1hmY0JHKTRJUyVBVWNXSWs1a0dkbElfP1toZyM7N3VSKUtPSlRpeypUXUgqTjxrVlcrR2pTOHNdJUMh'@;
put 'P0MpQHZiOFVSKiZnZnNzKEV9MmgrJUc5en1pMjY4d0lyeGlbeU93bC4pRjxPVWNqS3F1ZFdwSl1XZjd6TV8hRUA+ciVtdF5sM257UFA4aUh3cytUK0ddTD9YZkI4WiE4dEFQfGRxcHt5ci8xcyFFdU1dKUpadS44KUFlSH5CM1ohbT9vWS8mJV0uJVApQnU7WytEa1kwdHRTflpaX2g0Xj56fUp3'@;
put 'OTBWUlN5cXNKWlZXbkJJOEdsMisyT204dWNXV0o/eCR3W2FldEEja3xjTjNDeGY9akt9N1tDU2NZKFNPLDNkSmh2dzpUSzhpW0RgPjZGfmRlXyFXMFVob0MrKHk6aD01YmQpTih0Y1Z5RjA0ZW1aP2B4ZSFgfDlVNkQsOk1hWlloL3gqe0t9USU7NmBFOXJEczQsLnEpR0IwQyZKIm5qbUdgRjx9'@;
put 'fX0mU1FQY29OUiFHJTFsZUMiRyspNEU0K3lVJWtvZ3U2YSUqRkF+N1hKT1N1PDJCLmNYPFNdZSVbN0duLzZrRml6TUtnLHxqO1tSWER4a0ArOiRYKDZmbXhkOWlhY35mYWMiMk4/NCVpSWdod2Z7cE4oKUchZixlbUZCME5VNTB3Z2NsMDhxN2FyRHkieTo8LjgzZCY6bjAsY1hOdkpQSWJuJGss'@;
put 'bU9GOVF3bEM7YThvdkUiKWE6fG1rKmkvWi4yVmI0VT1GZWIsIVlYNis9JmtzbjFiXjR+ZmFkbyE+YGliTDw5JUVyM2IyMmEodzchXWRjMEVkVWRzI3VZeTk8M2FvRSZqWVhWKH09WEdyXmZqOGopIVFSJXluektHX0l8V194LHRMU2pIKFZdOGIpbmJ3ZV9qLyx8aVhAKiUxUlZ4SCk/YGAqQTAz'@;
put 'IXEhdnhEOnJeUSxfVTY+fSoofEM6L1JpZzowc3N+XzlGYHxtYHslbXhEOjFUeiN+aUpSSGZgKi5IVkcxNmBAK0BOZSElYlBfJG49bU9LfitUO1VnI0pFcC5iYV1kOnVUP3h1bVJjVVJPO0RFP0cpMTxvdCVLWFs0RTg8dUw6LnUzMnFWeWduOyksbUshKy93Y0suRSRYVkFfJitQYyt2WktPXmhP'@;
put 'YyUoUFMldEs/W25TcD9nSzZUcVFOcWBHXV5rS1hzOlNKIURgSThMKnNwfTJ8Q0AwXjRMS0NNPSM2UW1TWiw2ISE/eDpnKCEkcndWZTJIdTI6JXRLJD8rJT8wfFgvWlsmI30+TnVeakkvaGxqe3BUYDFmMHooX2E4WS5JZz9ZQWhqNWZLXlA3O2pAbkNEPkNHUEp8XWklZyE3SENoKzEyU0RqRFJ9'@;
put 'cVdMWD5RUGx+Zj9tN1l8SlAybCZbVUpNWEVYO2Nrcz0ibCNWbHgxdGtZSy83SWdCUFJfPSRzXjxiQTUhMHBwMmIqdDM5bzdpSiJDNlpQZW5ENXo+XVYjSnZ6O2B0ciZ3OTV7RUdCU2AySHxXSDpEc1lVYGlVZTVjeV1CTlhXdm9vL3xfJjpDNTRRLjApZS9YPHVlYlB4ckdkSUJpL0M3OXptKz8w'@;
put 'VyFud3RHOWR8I0ppWD0lTDNbUldJWVR0UlhubkU1bUxsRSEiW3Q3fjJbXisvR2NxW0hBdTZzc24ma0dJVWdTcW80JmtuKGVEdGRRekRDdzQmdnU1aVB0WDRoP0hLOWhnZSNnUXMye0I5Lzw5cFVVdnE0Q05PRjx3UGZzaUkrKUojRCwmTS41cSoqa35wd2FoV09NNGEvUCNjNE4oPkk8YTVwdEY1'@;
put 'SCIrP2FYUHhGRGA2YHJDVTVZRjt1MzYlW11UekZ2SU5uI1J2cmlMPWU8SCQ7cWhQJE4+Vit8WGVyKiFUZUooIkhPOCZaXShwMkhbW0UlaEwxQ2o/Ry87RlcwUSQ6ei5JOzkmZ1RSL3MrQigmQGh8OFglWHlRX247L1VQLmp3OCVIPUU1fVh4cCpaTDxVVkYjYTw9NiRXJV1rWEAiKVBJU2FtZXYv'@;
put 'QT07LGQ3WXtqdmtlRlVrIkI5KHtQbjZzbVo+O0lZR1luP0F7NzhxfE1vcTEhYSoxTFN6SENlR2lRMmlhemRpUSkzVSl2Vm4rLmtUL0VBNlluQVVFL1RIel0ieWlyQ0BjRC9odUNBMzpRZSFrc2NbSD92dk89aWdFQ3RBQUFBQUFBQURBaEtFKWY5cDs8RlFubT1OQzpGLitRZmAlLk1uJTBnYy8q'@;
put 'Lz07a0I/XSkrNndteWwhQj0pKGg8bUl3fktdN0xTZC9ibWcmUkhzSk11WSMuTj96MzxpKy81ViQxQzddNXB6NXxJWih8eFtWNStMeGhsb0l3P3dbZWRDQjB3cGp9eV4yVCN0dlZjRSsyJT9faWFFJERhZjZ5bnAxN3ZwNHVJPWhjNiU6dFtuQlNXN3N5UilCOy9DK0Y7OnZ6LzlRdEgrI14oXmFT'@;
put 'KnNQJD5gM2EkYkgvaGIpUXsqSVUhRik6LzJleUBxUmhyVkdvT1A8VjBvXlteNHI7bzQsQjltOmt6PlRXXkhjV155UEwpYFc8XjgqXyh5Q1M9dWlDQ18hIWZvc3lieTo9Xl9NXnp8LjNRUD1GJlIyJCoyQmwlWl52YXd3RDlJQkordnAmcXJsTitvITo8ZjJSPztjJnorRWR3TkRMfjQoeUhqPmpV'@;
put 'RWA0YU8iTkhteTJ1T113V09uQmhWfjQuMD40Sjx3fUFAbisiSm1fbGx6VVZgez57YFU8aEg2I0J2ZE9dU35qajE+Wkp6SE00JGAkZnd+OWd6cUpSSD5Wcks1MnsxJWBUI3lDZHhdJDFvKnpJSGs8fmlEcF1WPHZ6aD1ZVk18aTZsKHxTKkglTFddJE81In5JSy5zQUN7KFFxZTsyQyxmVk1pK3B5'@;
put 'ZWZQMCQpS3xGT0hHLkc7bE8jQTQjTX43V3xge3Ava25NYUZKTWQvcCRFTGA7cCJlQjlmMzRORDFtQ3VIJTVGWGx0VDwlVEt6P3ZddW9ocHVhTyNHcFA9Q2VGa0tgNCZZLi5DLDdjd19ZWUt3T3IlcGNeeiVhPUoxX149K2xRUlhufkoyJkhmJm5wZiguNlMlYyRLPHRnOiwsUkJre2NRdmtHL04v'@;
put 'K1JQL0thOTMqfE8vQU0zQz9RTiRzMXJ0bTpSeDtxSXwkVWlnUDpkLjliYyhLJEoyaSh1VWAyQFBZYTZHa0pMKEV4XUpINmUodTZzOjV0RVcjQTA/aFdZbyRAYj1WdHBFN20xYVtlV0I6MyN2dWMjaig7Wk0/OUosKTJrUiVyVit5PCMhOyYiW3h2Vz1WfjVrVz5EPVspYGVvO2BFWCNOLH46Kk9M'@;
put 'fjF6OldHeFVqVlg+QHRrLGg0UVgpaV1UNlh4K3cuM143UXpIKVk/YyRwODAjcl5BLlgjOmtNa1Nlc2V3elg9fGkmPFI+XnBDKTJEeiVlQnhVXzs/ZDk2WnF2Xjg4MHk6UXc1QmZ9TDsqd0FKZCQkOGJkUnRwfEkyUCNGZktWRzBSMmJdXisxNjhmdmpWb2V4bG5hLiM/TzFoZHQsZ3M/X0A5N0ZS'@;
put 'TDA2RXtBbF9zak9zWj9gckwlbk1+TFg4YUZyVFlxd3RbdERyIjRYNEU+cWB+eXF3TnVeWk4hLl9OfW1gdDM1ck9wKmlZXz81PCpjRGVGJlNTZzNTVy9IaV4qWSsxLyE0TGpfTlNFQUcweS9vXjtWbyN4ODB7QT06PHU0Kkw5JjEsdiYlIlZPMTB0bHdXP1hdXStoMTFgcXFOfFkvZ2hKSWUyMWFP'@;
put 'cnF6cmlbY115X1V6T3FQWEo2NF1EQUg3eDtCX1g6VGQoLE5HVmFOP2hARXBjJkR1bG5od1hmRjhNR2kqb2l+MTN3b3VJOlpdW1suMFpbbi8vSnpRV0lDeEQlNC9tI1pzaj5JM2QpITldcCNpTGdIS1oxaHZ6dSglTlF0bltWP19xSCt+RiomXlhBWE5oW21vPip6QyQiaC8wOGp5MVlrMVJCTTBu'@;
put 'KmxjRyMufmhkTFQuQDd5QDdJelhWOD5bSis8XnBVQXxVMDVRKzhkX1JXR1tse0RXRToydm9RTSh+QV0+NShbRnZYdX0zI3FJdUZOT1o9RjYwWmRKSSw1R3sqY3FYKF9QfSpHfm0kSVM/cXRWRGlFOmc3YHJwdi9zflM9Ozt7ZWh3PFZ3fDF0fEAzXk0hZX1jMyNKWCM7WWdWMHJNUE0+U2lAL1pD'@;
put 'MmN3blQxbVEsP2o6NEZHNXRSQ1JUSW40Viome3JDQz9qfm4jWWQwJGI2JDFKfkgkKHI8Z257N0wpcSFnM3NaZVAqeUVOal1GJVF0XSNpUWcoUj9LRlE8K0JPMX0ofmc0cVovdTsjOXFtQU16dnlRJStqIklZWUopaD5PLlJHbERlczUxM0tXMSguWyZEOCFCJDsvOy88JElebSZtVGI+Mzx9VzN2'@;
put 'Mz9Qel4vfkcodyhLcHJedjVVcH5pR3w7NGJfajNmOCxgJUJneDwleCV1PGpsNTtuXnI7NnhmSVJldjJeQzUqOH5fZTRBKF42TSZFTDVZQytOXy9aJkd6cnRHayZYIk9bQytETz5DXix1dkBgYXtjR2prUWRqRkZiZHE4dkAody96bn1bdzdPbXJudGlKalQ2TyUjZS5WKTFEKWlHcE0+UD9FaUNp'@;
put 'Tk8rcDtFN0F6ZiR5LjBAZyspcHJuOlQyRCI7ZXIzLGpgOCNmW0wyRyhCK2Q3I3dQPTZ0cnBjPGI8Ty4/R1FrWik5SmNoc3JoU2thb3NnazQyYXQ4W2VuOEZNai4mV1IzPCIhOy9YLEM5Y2IoWCVJLHgzXWN7ISRpVH1EYkRJdSMoX1I1YUR7QFcuUGQ9WCElfXtHVSNmWUcuKSpofmN7dXtaRyo8'@;
put 'Ul5UN0YlYnZ4b3IhdkZlSmpmYjhKLHtZVSo4OzdrbEUlQ2VhblQ6cF10dWU/aH5kIUh5MkE6RjNrKlk2PXVCeChCaHtXcHN5bnx4I18weThHYDpPLmV6PHpdNTZ3OXQ7dyM3VSkiSTY2d1k7b3B0KHxEW3JgODNvdTZ1OU9wVmpaTiNHU2JoOSx+JiEyUyRTd3w9YDEvX2gzeCtgXzBzV21jMmAr'@;
put 'e2pqbG9xRlMoI3VaaitDYDtwVFBBNmdnalhQSVRXVXYkQjJDRT9GI3k7bTllZWxRbjxpa2c3ais1ZXs1eXZfJXM6flpFO0pEVk5LMSY0OFpjSGZgKTArTEI8NGp2IltlOEsrZWNNciZtSj8yXSRQbVdINUs3eDhEVjwqWENyQUlkbEQ7PG8wdyFuMH0lWlNiNFdqS1YvZT1NMXYzd1VMcnJgTGsi'@;
put 'Mj9ifGg/cWs+OnxmamoiTEpNXW8qO2Bwa3djczhySkRhKjRhRDVnNVs/Yys4LG55bl1nZjQ7KTx5SnAxRHcrUz0mSlE5JGxIUXxbMlR4dzxxbmN4JG5UTkpebyZbXnFvWWlAQW9iUi4+LDR2RkI4Nl13NT00Ymgyd19ee2RSNGNqT3dlLzYsTURHZms7dlNAaTBYOVkpKiU0VmhFfGZQUmg4NVhj'@;
put 'QVErQj9pTHh3Rj5vcjN8QyQ7Sm02dWVWWzheQyo9Vll9fj43Vn4hL1k9PXZmejxySzN3KEtXby5DeiMhJFRFSVNvPDZ9KCM7VmVNfDM4XW9peDlALCUuSzFIUCRKKC5uXTleemFJZUBuJltEWDJEN3xCOFNhdURYa0o3fSl0JGd7RWQ6fDRFXixEQkdJTWFjVlQ1TFIvTn0lV3okd1kydG1jVlJB'@;
put 'RXMzO2lkbyIpKlRKZW94bUZxMVV7dHVWdTxIJm45NDh0ZDs+Z3pWS25eKl5yPEA+NiFjeW9mbWFtPmtbW2U1R0dZPzJraFI4Izg4ZjdFQi9da343Z2dVWSQkZyteaj1GWWI0Kj5LJX0mfVJURUx+VTdocDBjQDgmXix1JEtoMyFFYD44KXYoeFBEKkVfX31nPkR0Y3s1a2tOLiVGMiozOzltNEUr'@;
put 'LHomQC9rSlF2Z1I3XipQOmFqZmllR0FvY3lodGNiJmpmfCRDeE88YSV8cWR9QzdARHkuVXZaXVRDMUNmMi4hND9TVlBVTGpvRjVSdkN1QDc+T1BHPjVDV11pdCxHL1gwOkhtfVV1RFtnRjZfX190YCwoISghLEhqQ3dyS3UkOltEUi9pUX0lLG5AKUplKFF1ZD1PVTVaRjs7QylqVCN3ZEZDdzQz'@;
put 'NWJ0V0NVSyE9a156O1NZWVhVUFFhPS4/RjdbYXVddVkzTmt5OWp5ZXE4W102PCwvZmN1UWEhJSkoTXJXZU1dRnc8VSlsT3RlKnFlLHYmdXByblVPRzRjQyhqUH5SaHw0TERRXzEwVktfR1UsLkkhXX1SfEIxbUhLIXVtbGVRZXt9YWlCUV0zRH5abGxVXWByfDxPJDJJT2ZlRyI+QlRiX1okXVFA'@;
put 'Z3BFVUw8KTF9KzMoXkY6Pit9QnJsQnJySXZaWTptdUVYPWY+VmhTK2daVV9VYWJLYTcrTDt1VkhtMFpkKFtsOT9NeU5YSGFNbHpyP1FfcFl9ISl4ZWwmLGtxLyguPUs+eERkfWxaPlUzOmh1KFdKbHI1JWhGSmJ+SkJATHJeOUxkfS8zdTwkLC9NTUtiYEM1el18Xz5gZjl9JT09bFF4cG81Nkx9'@;
put 'N0J6VT1ZMGlZcXUsQShYW3F6KkkrMH50PWsvWnYkQDZWKF5iPUAuW2BNd1BPdS5zNWFUfU0maTZsbX1ZbWgqXWV4QD5wSEZMVnpvZHdsbCFXJnlWJX51LiVdWysoMyhQdyVDN2hzYENkIWAmbVEuWmwrUyxzYC4yRT9HO0NfK3gpfVZfI25wMGwkSDNTV3FXdl5gZU4zTG9JWXN+eVl7LmxpR3NY'@;
put 'YClIaVRgQVAqYUhsT1cwJUcmJG9tfX5DKytNYig0fXAweERHaEpGZmIqI0V6XmMkJTt5PmQxU1oiRD5VZUhePkIoQyY5aU14TXJsKDxdeU9UeTJ5UyNMNzxwaiI5N1syIjV7eDpmWlliPklHREk1XjkoYnhEKkwyZHo6RVFdbFsyZHcqLF1vUF5vV2oxdVY0P1twViE5UWpsL1lAS3R2KTc9YFtM'@;
put 'NyVHN1g2YnJzZC9ZbnI4OU05Z2ptPSxydSpLLjIue246Ol56UDt6cCR7KXZTTnhYMDBONjBCRXEsMExVbCtoV1ZFMHV0KTY/QzZ4VnU6Nm4/aEVdOVBvMDspSWB6T2s+ZUZdXnpaNDhbKzB0ZyFVZU1HJlY7MkdMWUlxRSF4T2hTZzd2UkBpajVhUClvLHU1RDs7Vl9gSDx4SjM1Tk8yTEgyekFe'@;
put 'VTNpdjx8c0pDfktFaHo1KWAuMlRkejsmamlVOyEsIS8qLFdiYj9+R3M9MXFnaiVCOVs7NUZvWD9COXsucEZ0TmFid0cjOS43RzsmZUYuQiJhL15PY20zYy9LaH1RPGM/Y0dAWyhDQVN6WGBRWzVub0ZSVnY1Un4yPjhONG89WiwjY3tDYlV4RkRQeEtsIUh+YDkjSTR9cigzPi5YNj46W0cpJF0v'@;
put 'cjdGUHMrYUhaV3kjc3UlNFV2MT4pI2wvSF9bVnNMNGh9SypAYS5XbFsuKzw/am1Ad0dnbVpZW3NmSj8ha0FSXT5beUAvazkwOURVa0o5SEo7aSliOT51SiQpKD5kRzlWYXsmSk56OXwkL0JIT1RndDZodWkkPUUwPHZdQSQ4Jk9icjQ7akNhbElAJS97RFhgSlsleDN5eWpsQ2xHQzVXWUlaUFEo'@;
put 'WnFNJS5UUXl7QDJCdylUX1tOaEtTayl0ZEVVI0V5djI8TFU8Knd9KiN3Z3YheGt2M2lgSmtaTVlWWW15NUgyKWtqY3FGdXZxVC9QamJwRTJxemAzYXtYKGo5WmpHc3NQZEB4YH4maE15MGQwdXcuaEV8O1F2KmBLciZocm9ISkBKPDxQaCNWfW5jKz0oQHRHUCNdZ3JdTFswQVpAY1k9TUYyJUgq'@;
put 'JSRyey9JT24xP3k1cUZyY05QbztjeikhbWQoUU8kX19jImgkQ113Zk9GaCVoWGBIKShdM2VTKGlvSj9oPVZteG40ZHA0UGZdaHdSfjBEWkw8TGw0bkdMQ3h0NWJEfV9SKXdrQ1lSVlMwVmVrQD5UeT1RL1ldJlY7RzJHSnR8Z198fURoR0Q8Kik9M0goJmVUKyZaXVY1LmgsMnUqdUw/NTY5eks0'@;
put 'cXgkaW48PiVfOW5JPVskR0NOKDA8WU1mL3IsYSt3UiUmXihHRnxyMVdZL0gpUVU+eFluMHNvLkdhTjZyTGZeeD9LV1ZYNWklT1hEI1JXM2RhYVlxT2ZIe3V9JkA3enNWInBne0ZLdl9FOn5HN0lAVVF9M1RENF5td0hXVjtbRUglfSk2LihuJUdeQCxlZz9qUUI4ZmltYik6RlJSLCZDZUN4PmdW'@;
put 'NkRTLnlxUyhQRnp6W3cpPG4jLGhIfkhWUzhlXWtHeDk6eEM2RFBAXVQuN11wVHdFZnd+Ki8wX3JVNEhTMGdiaChTNk0oaVJXfEJqRnAhU2gqTCVgMWxGeExYNntVcyRyXW90LyRqU3hOUTVNc3MjfXdadzNZfiZWcyFrOmhKOktLKjFVdE9ofldBTCxBQkF2I0d0RnhzYHVpNTVdSUc6bigxbig8'@;
put 'Zil2cyRdLlRfOEFXWGpqfTlEKS9YMGJARTNLcXlPTlRsRFJTSEh2fUJjc2IpdUhrN1QmZyM3ZVdpLzs3IWhyUExpVik2YFp+MldoVVJjZTlqS1Fga35VZ0FPUD1SWztQMWduPTx5NnlYUUpCU3YrQGVzLGJXazl1R1BvND8yX31lLHdDX2tLfjJvWHVhMFZiYCVIWlpCKj1fbF5LU1IoOFZFXT1X'@;
put 'XmpXMTFmPUQoSW50LDB9dCRDKDRZWVkiP0JZfDZmVlpZLEJFT09SYDokV2ZUeyVmMlE8Wz5CTFprdztlN3k6JCM+R2Q5e0ZQZTFvNE8hXzJDLGt+QUhbLmxeYHp7LDhjLFk6R1ZreyhvWWd6N0FqWTFyazNPcDFUcF15aV5BK3QscThePW9nPE5eUmRLSEcoNkBOYT9oTG1TJEZLQilGQTFdZFdp'@;
put 'OXpQIV94Z2VsZiMmeWB6RjpLOH52JmFIbTwjbUI2e2M8XUhOPTEqW113Zy4+RzcoXiV8Lzhbc1J4Xz55fXx6b14kQC93YHNKMTNNaUwwOmVKJVt1N3N7W0QiOm1DJS9QcEIkKC9ocFMjc1cyMitYM2J8XnwxbitiJnNrPWZ6UVprOjVVMVEpJl03M11CfDg0JSJYcU01VyNqIz0mQmt3STRAZ2Uy'@;
put 'QCJFKDY6QyloPCEwcGJjTDNYJVE4P2BGSm84WSRUPmBaU1QmcTsvMFkpPFtzRWBreVtHX2M1ZFs5RFJWdGRYRTNdbzFNfj8rL2VQSzlNNiFUKmgkRUlKRmRWQ0xpZ2UvMWhxYyhOZCRFKzMwPm4+Sy9rXSNHVWlxVj08aHxJIy5ld2E2TTh6JlhvNV9XcylBKDNQYUdzZzt2elg/JSRGWzckKG1Q'@;
put 'K2l1bHphTnF+TUdbWG9GQE1VVnAlPmhUWG9PMX1SO0ROfXRSZURCPDl+QyhZaUdVNWtFZShVJU48O0E7UkAxWGRMI2BXbGZNSjUiTFVvRWhgXTE7RTQofmdwenlAV0RzW35uST1FLG9vWnhrNCtGRH1eSndIRDFEZm5CKVVuMypBMEAjS0c2OCRNbUhPO0VfYG9EfGFPIVFwZDJHMn1dYHh4Yms/'@;
put 'V3J7d012ZnEpNHxOP0hdMitjWVZdQFl7Wz47RkdNRCtNTm1PaW8/c1VCNys6V0krZW9wSjdYQ2JjVltwKShiIkVmLkhlT0cmJHpQI0FvOX4rUzdbITNfK2ptNDIiLmpoSzl2bnVhJGk1PythbixjLDRNU04kV0NhQnhfe2xidnx9dEolJCJZZj9Ub2s+dDF2THJEMHRhRk40Xl1KOnJleE1WRHI4'@;
put 'ZUBhLEgsV1twfm5ZXzdTIWQ9dHd5MDgiYUlnemtOIyNZVmdzd1s6Sj1jTXJmLn53TGRQdmpWcUVsan5AYUxfUWlafmVFaUEpUUAyZm1MfmxNW3ReLjA/VTdtNl55fjNgKFVJfD9ZMilOdjUpJDl9OGtVd3pjdjY+Xkk/XUhaXSNtPHxUSUcoaXVgVzpGXW9DXVdNSFVjYiNGUHsuR3orQENXO2I3'@;
put 'QiEwI1pyZXN3R3NffG5bMVdVdU9PMUBbdyp1UC9kazoxKyF3NHYuYCpRLFtSR1BOM1I0Vit9OSE7a0x4fWF4Y0dbLlFSR0F9cCteUXMiMmBAPno6VUBdWjxWSGBEb3pdRzNKQlZ9WVRSc150Tnc6bm9UTT8kaSZYUnpMOFtud3tSW2ZCPj55QU1HN2NEWz9EZ1BHYGk7JixzTDdlXzJVXU1Vamls'@;
put 'Q3xnY0lFYl9sOlE/e1pfTTdGJShqcEI2ZEc3TnY5TTNmUlJBditXVl9scT5DWkh+ISZ6OyxdKFp1SntHekssd34/RHEmZiJ3QCg9UjNAaFA5NGsweWh7Y3pOd3t1WEVQQSR+JU5mOFozN09Le3lEc2o+ajJgZzhSdzpWeHBFakN5OE5IJS4+VUdYWnsxJks5Xkl8MlZseXZiV0NRVmoxTCkmaHgq'@;
put 'XUA5SD0sJFB1dSt8YzlIL3FAQkRpdHRuTHJiXmtJX3ooQEd4emlybCs8eDxTUWFDZ2t2TjJbaytaXT9EcXlubztKYXxRYnR4djMyNmpXPFY3ZHhDYEN3b1kqR3JLYGliLlJoUUkoOXw/ZXAlKUBIdDsmfmAqcHN2V3s6Qyp2Zn1KY24pUnoxXnd+NEJbVW1ZbypBT3lbPHxuLz88Lml7dUklQy9g'@;
put 'eGQ3KS87XmxiRmBfPTFEZndsPUhMLldQaEYveDVhSFdsQEAjVCp4aTVaSE5gXnBqYDBbVC9VSENRJGQwVyltdzxKVyY3PmF4KVA1KmA+YG9+c01kOzB3S3tpMEpaO21VWmg2XkNrL2xpN208a0s2ej8yZytGQHlFMUR3ezpGWXAyUElMenN8fU4lZGVdSDgjVCF+bkUkKSxeIUZ+VXVjLi87cVs4'@;
put 'QCIsc1B6UEBPMSpzUzBIKkVkMFJJbGFlfld8PXs1fT8hcjcrUl9fVUxgXkUzYVNdZU97JFF4PDc+K1Uqb2tFeztyKVVYIWd4KT0qZ0smX34pPVozPnZDYmBLX3FrVTElPFM5QUkwJlYzXVteTTBXTkhHVEQuMWo9PWhne2U9Y0EpKDksY0RYUXliX1Y9bUQmLDFvMkhfJEhUWTZCN1RsKXFZS2hp'@;
put 'W0YhLEZsN2g7cU8rZShVbyNhQ2xqamU6UUVRc2VUdkdjIW0lTEhzPzhZKXBkRHhFLyRlNGJtYExMSGE1M1pgODJZcihffF0lWjdpai86JEVldkNEIVIiZT96dExQUXhdZzBiRSR+LjB6JD4mMnRgdWlWJl5mXWhAYjdYNFUlOFMhNlcsNjkvLEtaSnI3JH4wbDUsbW9HQio0SWxDLz4ibHpVQURz'@;
put 'UEk8aWVoPCgpfXMrc2YvO0NuPG9EO30pLl0maGY8ancuT0xETF81QUJENzA2VCpYc2F6fGAmK3Q2YXhWTk5nPCRGN3FAVHFzM2xkczBiQT4jPU4seSJ6Y2VUPWopX1MkV105TWdKKD4+Wkpjbng/Y2IiYVdXKGNIQlBLbHB0VkhKaDBSKl5LakZOdEVmSjtCfksvdVo1JF1uMyMsPUpMJGxoTT1n'@;
put 'W1tkX09WW2Q2WzVwcWMuUzRHR2UxMF92RSZnK25aQlhuK1BOOXU/R2dnY05NJXtyL3lyKHgzJEhQYFJHOTJuRjsqYzl3dW55ZU87P3doZW4pWWBJRyFXW0g9RmFWd1VFfEA7PV13fnV0YVBWMjk2JHxKLEBjWTQ6OFcsd3tUKHNqQEtLWDMlbXZlP2NTbnFnOjBgIWpoX185XyoveyhAb3UqSG8r'@;
put 'KTQiL2pEc1MpfGVrVmYpQ01IN1ZwUV9RX3E6XjwrJiVWVGZ9W0J+WXFDPS9rL205VXFnQVMiViR3RDc8OX1KYXo7ZVVRRml5fUwlXVt4bG1uXzQ1eiowOFRlMTN1fj5fP05GSXJPbyJZbTBWem0yIThQSDpzSmtmT2FuKlVVRl5vflE6TCRMW3RkMSp7aSl+QVgrUXgvTUclZGoxaHY9YmckQD90'@;
put 'UiozazB5UGJOQkdQNjxuTkJbRWF9M25VfmA6TXdAP3QqWyxESWJoVUtyUHVEK1JyYDU3SyomcytTM0p1TDI8LzFFIjFSRHF4dEB6R3Z5KDVEWjspVE5UVmImaU15OihbS1ssKj97TVZtVlFmKUFpJmldeTxbRDB8IkJ0K000ImB6L0MrdCtEWD9bTnxycWR9a3szI1gvS3IyYDt2XjRnXllPYzdj'@;
put 'ZVArNz1TaUNuSy9Jc0VkYT5OMTRZVXNRJG1PJTp4e00yNkJjWlQjR3YlQmNdMHdQUX5kV2pdZik8ZSRyN21oJTd8fDRQMztpalNRMFtFNDVOOH55aSo6PitdZi5FNUphaVMxMWQqTFZafjZGWTQoYHorclZCNEZNdHpuNWcmTDpjQUA+MilVS31RfG58NT9iTzdIRDVkbG9jOV1FanA0aEo1ZzRb'@;
put 'PWl+eFRHazJMWHNAdWBCUi5QKzs0fXF7T1gxZFFHLkQlXnBNZmA6YG1TbGcpOFVbNE5NWC9XbngvJUUxaCQjW2plZXtmTGxLZ2A6VEd6Oys/Ol4/YFJtcnJlN319XyxyVSxFOGJyQHc8TURTVGFWfE9pUXMkX040MDA0cWp+anFvYytHaDhaN1VzbkU1Z1Yvcl4wXU5TQSRwPFc+aFJAQ2M0fUow'@;
put 'MHp8VHpxJkd4djI5alNHcm9LKCRrNW8kP3EjJjBVUyxbPl8yTFtzImJHMVNJR3R7ZGgrOSpEPVdwO2Y9JEtSZXBxdi50KFlMRCwkJHx6VUJgMnBTXkIlL3NRbkNCcDhheUl8aGVRUHUqdTw3MGJ+bUZUek41RyghY3ouejJsaXNfJWskbGFsY29nQyp4Wll6TztbPF8xMnw4Xi9AalZ8d3c+bjBz'@;
put 'QDc8YUUoM2w7fkhDVyl9cEloXUZhKldFM2wjYGR1I2NSUXtNIXVJSWhhaixlRVdYTEFAaDleK1FxUn4/ZiY8RVNeSV82NS9PdVIqKWtidEN5VFMvW0R2OUpWaEZoM2hUQXRJPjU+LkZIaUVCOTlvZilxaHhvKHdpYFd5aXVgKFt+eGAlcm8wckAxNFIzfkpgL1BfbXFTemJYWGl3Q196WTttJlki'@;
put 'bDoyTmMkR1k5MHxkXnxQXmsuLiF5Nz5+VTF5P1JoZE1pa2Y5LnVeXnxgflBsKFF1L3M1Ry9INytCJXJ9WUpgJHxCXiV5VncrRGxCPnZgWWU7bVFWc3M+PUJTLml5Y086ZUEpOT48fSFLYShWLy9SYn5yQjN9NU8zdnFwIiM+JUMpQiF+dWMvd1l2bT9dKVJfWU5VcDJlMyY9eGI4bTNrditEJEpZ'@;
put 'XThhXkgufDwzfkdpTDBSSGg7RDFSeCRHUVhzXnomcE1bbnY7QTpRVTk0VjJMenUxPi9gNjtEPEB8YT4oQm86d3spam95Y2VZbmExeVYmW0FdK3NrO1F1XSZWMTdISyFgU208ZjI1OHJ3XTtrI1svRi5eKXpAdClSdSQ6dXBZOkRkLCI/VXxFSzV8e20+KjRZQmosbV9mYiwvNDNAJW5GUn1qIWYi'@;
put 'PFlecTEraTcoPXVKcnpiXUUifktAYVBEYktnIndTLyNuTVZLTl9eP09YOTVdd2lMUnEqVWFZNmxwbzBzMyVCYldWXyJIMjl0Q1QuSHBES3VLO1NlWkshYVJySlhnLiMva3VCMVIvLCplXXFHfVt8U15MQHAwOFddcCVVJlBlX19bNXNoRm1GKzpIPk9+PDw4anlVIzgzKGllQWg/cTNUZ1QlOilV'@;
put 'dGhZaGBZKEciczwlXzAiMHNHZl1gPkVzRHFCbjRWPHdTT2t4OE5ENC57d2gvbj90Z0BxUEVCUFN7OCQhU0heLF5CKmw1UjpSTUNVJWpRYGNiMVRXMFVKRUk0RDA7YCRxVWx6dEpoKnUyJG9BdEVRdns+RD8uL1llQ24kY2xjY2wiUUAqJHticjglN2I1Y3JqJmFjZX0pd1g/LlBedEZQZ0VYdk9S'@;
put 'TExoSGdNR0suNXA3dUo6WThaLHV5Wlc6MlIqLlA5RV5rJl9YPiFDQlRDan5HakNdVDtUM1o8dTQ0YD4+bDxgeXcsXzE/PSldYzJJRjB4bUo6fS8wV2RxI319YDd5b0F2I09iYj4oR2wwS3YqVkVuUkcuREU4dk08bn0/T3ZINkpzUWdSNH1LbFliM3BFMH12NlBGLjVlKE43VkNCUEVTSE8hRiVu'@;
put 'L2w5bV5vRklDI1RQI0omS3t+SCI1YTtJWEtSciMzMmBUdX44bl9UdmN7Oih4VGJOQUdQSDojVUVHWDhrSmdZOywjejFxdUxsVEhmXUppVjl7V3NOeTNNWUQ0OkBUZHRbdERaJEV8XzdFWXpUZGkkdWYhQmR5bFY7YVZ7cTRyVko+XiNCXTk3bnZ8WkMsNnRARFhOLk1DPTUxUmJmRGtVZE08TF9o'@;
put 'TDQuOztaYH1QT14zYFF0UnBadXRiQktBcj5NWHoyS3lORFMzcGNYcHEmeDt1dSopbzpbblQwcElPP1NMJmRdPCxWN1Y9cl5QfXIlfTlYJE5vZkosdlpzUSRVXzZAZH5GMUtvLE99Xzs0Xko6Y1lXezUpRDc4SlJqTC85M1BBcEZDRzJ4O1cpK3Uvb1NZZH1ddjBdK0owJk8/U25jOSpMK2A2djpW'@;
put 'Pi8kc3R2e2ZJfmVNbU13Zj0vKDM3IWQmNEVUVVVfcFZdbHlTNlMzOy8pVD94ei54T1IoREpYSlpELyF1PUtyTCZOQDtFI1JiIlhePDFQaFJSaStCbWYjNWx+NTIkdjdxQlE4Nk9AR0tsZHldVUA0WjZmeEg8aUJVP1BIeFA6fTBSWyo8YGtOZXdzb0k+SmxZb0BHaipVT3AraHdiN1tOZXlLay9t'@;
put 'JFdwJSs/UCkpK0tCQ15ZRz5fK3NIaDtQKStSSyZIYzQ+NSVdMVY+aktOMnA4X1RVRXMyZWs7JFlaVUs0X1l+Nm8ldlovNTRmcnUyekhZLyZGfEw7enJZa0MkUHQ1eGU8S2BPbXR1RH5+Mn1YS1NrSmJhTnNSO3g8ZDorNiJ0Qy5GQEI/PH5TTSYqT0hSIl9NRjplYTxQMy9mNUNaJldQKnB1ZSNP'@;
put 'eHpfUHx8ZiZIS0JZJC43SFlqYXZ2a1B1bFJ+cnFoLDlCKCZmd24vRmIuMkk7RFcpeiMvamJ6VyYlRj1TfSE8YiJJe0IqNWxAPD5DZ09nRT9mTzQ6b0BfQVVOJmZwYHhDKWl5Q1UwR1gmRVRKPjB1R2JzL2IhYUN0MCYsSlIvbnthQSZpI10pcmxyQnskWHgpcER7NVpfXkVMLzVvRzg1VitdUWh2'@;
put 'enh5MlIxZyYraHpPZWZ8VENeTD07cD97bE15ZE57MHxDL19ZLlUkR05OPCxYTHN7UCFKeUZfMDJlQ25ScmRVR3xBIzZDOndlaUA/UmF3M35iP2JMPzgpelVnZ1Usay8rWzYoeHk3P09dTWFZV0pfT3xhKil0Kjc3XzZlV2IwZ2xiV1tMajd5NlJZWHNUPSlUKGNdRkRxVSxCNC9VKSQ4PkFwQmtl'@;
put 'SlJAOXIxVDxYOip7YUBANihqai5mb0RmcUBJbk9oUVJZbndEfmhyJGZYWihMdH5leDNaaCZ+PHJfajk9bVNPSDh7YFBZWDd0RCNOOWBzN0NoekBTOHNeVT1+O2Mxa0MvYmlEb2ErUVJSbHRSQylSKlkzUEtvYmB4Wnk1bjRTRXE6ZX50TTUxfCFePmAsUSJKQmtbR1JzNjBdMXxFLygscDlZT2x7'@;
put 'aEl5SF1sJlhMOjdNKSUlbzRxP0YjQ0htVmFFezwlZn4/YjM4e0hzYFhDazFIdDp4bkcqTzJHVnNxOk1QIy96ZW17OSVZY11ZJTB9PXFZP1ldQEZAZyVSb3RVMzVhU1A9SG9CKSYyaldYVX1QMm4xWX5aW3w8RWM4M2sxNlNFJlE3eigreyR0JG1tcCYkbDBeMHQmWTJWdzA2eEMrPWdyfTBeYWYr'@;
put 'OCg3Y1lGTCRxJitEWGQwI2c9SzxsVCwiN2lYJGZkRm4+RkNmT1lGQHN6JWA8Mm42Nmc4eXV9UCN5XmpuInY2ZVhIZ2ZxMkZfe3EzbDdaJkosdDVaa25vVz8sWk1lPz1OUm8zcUA7TnhvUVIpMyNjRiR+NWJVI08/SC8yMjVJKkI5KFkxeDVhLm05bSImY15MWC81XXFbWVAle05kQU47SkNBbmEp'@;
put 'IV5VY2tOTG9NNns2bDYpSnI3SjRXbjtYPS9TV3tjd2pKS3VfLypQalNSYyRNTUxAOzw+UlAhOFR3PUNGNUNsX1Zab3Y2QUdWSGZRMjlsOlhyeW5hcEYxV2JyP1VVWUVbXUlWQVh0a3E+VXEkL0hzdm4lfDs/SkpGUU8vRypyLGxNL0xXZ1VMeVBiY2pSQnhLJSJsO2hEeHxIKGIwczZLYkcoKUVU'@;
put 'Iz4uOTtIVz1JXio2Q2UyKn1dUEljSDlffS5TNDdeZ1R0Km1odSZeV2k1Vz1oMnxvSns4SktCZjteIUdzN3Z5SUN1c1M3XyFEd0UhXTBsbiRTMCM4cTg+ZnNrVjQmKDd1dn56dGM8OG5kZl5FY3dESzwwIzE8eShyMEU1fFkpIzh3PHU1eU1iUUt8IUNVSjsrRWRLKVhDITRLfF9yO1tkN3EjT35h'@;
put 'UX09JX1AbzxYaTUhRiYuTSZ6ZSJ1cWd1fFZlS2FjfVg1KD1vRWVWejk7NTg5TiNsbCYhWF5xd2U6UlNJai43KXVWSXxYPGltNit1akdXVk1SVTR6W2dmR0lLMEJSZHlyS2hlXT5MLDxTcVZPeHhmI0dufHZhWzhBdEBmOGBwV2k8MlE8SGwvZy8sMlE9YjhIWkYsKm55Ln5nSHcpL0VUQXd4NmVx'@;
put 'NUZ6QzNMNC94RzNMYmZ9LylNY1Iwe2xQeWRIP19lRzRXJHc0XyRjNmdQdz1teHBJOC8ubnB4OkBzZzouMGYpa1FDfS89e1BMUVp8TiNwcWpzWyQsYTErJippdX1lSH47TH0+NG9aMlYoP3BJbTp0PncsPW1CIXpqSUdleV4jQ0IkLC9TUEI2bT8wVVMzIW1QNCh3TDBfTjB+KDNqIjpqeTU5W3dd'@;
put 'ZFI3TnQkbUNPZCxbVHlVRmoxNE5BdXorViIqVTY9RkQwTlthNnIlemR6d31FVzo6SCU+IiU4aVB2LHZ2P0hYNSRUUmlbbCkiRmE/JXJtZz10RUpgNVNQNm9sJXlMTFpxPC59VEs+TmRRRXVXMm0pIm8rcyUmQ2ZnU3BaQUExOGldS2k8fHtnXjZRRzM6WEVzemtPeHVqUil2dmt5fjV6ckRMKEkq'@;
put 'KlRVbkd3M2E8KEpiTCxNYkowQDl9eDc8Ti4wZ20rUz9ZXklXe35eYiZLfGRyeGcjJlpSYClxSV9PdCFWPU5wY3h0Kzg4W2hPOEVwRCxkfFZCQEMqSnF5eWw/SUNxfjR7I35ObDBgRnI6YFMvNl5xNn0kPWNLUG8uR18iNk9yUV93PzFMP1lMX2AmdlNiT1c7dTBBR1Nxans2MyFOMjw8ZSp2UiIy'@;
put 'REtHSzdpa2xdQXhbQnoxfjYiX1tmdkBydEJlQDwsY25TUz1pcDE5PFtgWj95ZGRKK15zYXJUVFthdSxbdWEjP3FFeXwuTWhwWm8kfWZ7WnZLU3ZofjBTQlBoV2RsdkYrRzw4PCkzX2JMSHVMMGpbYEh4enp4PzkzbDN6MD5WSlMvO0U6M2ZCMyV8S0R1bWEsQVBjKC5UMytKT2ZZWEgyd2EwIUdt'@;
put 'MHk3ZDNdYHFuKSp5aXdYZUNXLjttY31lX0tYMkZMYFpIeXR9a05CXyFuWGNdMjpLQjUyWVYqbncvYEBYU0BScHpzK15YRkIxQXF0IVZTRTs1OD5FWk87W3oyU3Q7fEBUXTt2IUxlRCkiV1NKMiVFa2I8RSwqS01ISmt6ZzlIUX08Mno0P11RRVZEa293NXptKEowZkxML2wme3ouYlMhRSYqci4m'@;
put 'Vj0wPlIpSzdiNFdyOS9qelNuMjkwfHJsUTw5ezVKdC5TND9CMkxJSkJ2QE5zKmAibnN7cVZacj10XldfPkd4XnBrWj1yUDA6WyZ8S25PPyh1P1goV1k+T3YvNmxWQ2tyM2BPKzVoMD8mRGVhO3w2clEhNFksRig/eXd1dV5kM24lV0N2WjMsRmN+OzFDRUouSit+SiF+JlRHdGZfYV9rZG9PM3dK'@;
put 'dGN+fHwjb2ljKilOfFcuUkt9ZmJ8SmYqfSY1a1NkP2dIdSIxVUc4KlElVW51W3BAJVovXnNaOnB6PlBGM2oxbWU3R3s4Nyo9TmBDUFMkOG5hbCtqUyZRW3FpQkcqL0tISzdgMj5zRjRaNXkpO1VQMV5nUHZ8b3RVVjdnU19danNFaUR1OG9Fem9GeVtEbG1ZI2g3PyNScypPeHo0RFZUREhFUjlh'@;
put 'aVFyWzhdVSFtbSR1QFp0aVRgKz4pJDQzOyVFODQ8JWNGIWg+cFcuWihUZkdIXWRGR1Y4ei50QzxaI3ZTbzgoImMxPyN8IndKUUx5RStfMjluKCMhVkVWLipPR1tvMzVRVEc4MUd1IVBpYExyKiwuUHksVV9kbjZVeypKUFVyRy5CcSxlfiVsZXxWJWdVQ0d0cD46aHltKHhkXm1KKylGXVRJdjdT'@;
put 'U0NiTykqVHorfC5yV3tSZWFYUy92NENxfCVmQV17a0BHXUYraT1GVT5bcXsmIiRNNE51VUNDU14mOSZ0P0xlJjQqOTR4KCV3NTtnJm5LYkt2XnVaYno3bjU6MmciYmNzPEBdKiEzRFZVaH57O19MYDJuamBVYm1vbzYrOyN2dHI8NUheU0lTVUg2K2dBKTlFYl9odEZOen5pTGRlODxgfT44M1I4'@;
put 'M3UzUlhII2cxLGFGdlFHQGM3NFMrZFRkSXtwWE57b2VPeGg/Zl5Ia1NBZmVMW0xWNTFvJmFyWkJ+K19wJnpwO25oanwiPHFdI3tubyZPc34oa2dfKyFMMEQ3V14qUz5wWUt9VjA4ND9veXRqWT1CQHVMNC4qUFk0LFhtfGFmI0dgQHxza0I/X09WS3RITygjaT5TIjRGLFNdYmtIdzcvaVRVcDpl'@;
put 'Njo5NXZkeysqOyU+PSNOJUs7Z3VTVUZRKS9+MSFlMFZeTFdmTyJ5SE5TJUJYO0wpN14wMGgrLExBb3JwNihkRnA5IllANGJbU2A9aERAI0g7NG1SWSJxRUhuVTdXbyxeJms7KjdpKFgpNXlhbz0iUyYpU3VxeXV5aCtPUlIxIUBkY257PGQoKyMkZEQmUWM8L2FKRElyKTJ2dTxWXSEqcFRxI3dr'@;
put 'Tl5OMCFCKH5KSzopOzFuVTlHa0lYW3ZFNlF9Li86UXtrdkVGRCZ1UCY0PENSRFJNKmhDOlZkKG9jITJLUWFieUNsbW9GOUxuV2hMYkwyWG5XLmhuJCVjQEY8bCteM2dEUSQhe2QleFlsPCw6c116THFdSiJ4VmBLM1J1KSZQfjFdcDFMbl4yYDk0Y2ZmO2MqIjZJezdjMihOPS5gInxBazclWjZ7'@;
put 'ZWIqPElTdT9mcStPc01GO0BJdWduWXlxRU9oeG1AcD1jJUY9NE5VPzEzVn01Vj59RnpsOWclbz9mYUBqLEsufjNDYF5sV0lwQUlTRlNSWGYiTmRrJTJDJnQ3fSV6ZjZQaGxFKWczeks5PjVBUlZkNUA9LHNeYHp5cjRFUnFOcnJtayR8LjsqOyJab3olPlU7U107PCtpM19ARSU/ZUVNJlQ6aytM'@;
put 'eDMsVzBWe0FSfTw+aiI1R0tFMzsvTzQvRkR4UHk3aHJIL10/RyJ0OmRwMyJyaS4/KlF7ITcvKltjISNgdztCaGowfHVrMVc2YWZwW1Y4cm07aWROXi5ZeWNOaF9UKTBVKU1sO0E3LE8jUlI1fEx1JWU1LG5IRnZ8Xy4rfjt7eUR+VnFWPUZ6L1Q8KCVmbHp4Wn12L3hgQj1eVXxOck50QCtUe09E'@;
put 'IzwiNTo0Tz09P2Qia2soaFFaOFMpbDsoLHp5PGptfVVjViJQX1dLUz1KOCZfRVY8UlovaG9mJUp2JC87VSRzLDheKDc7TUQvZnlQQk53Tz1OcWRDR3pCWDFHdVk0QytFJkApVVVKaFZOKTlkOlJwRipCXTFFdHcoWGpzbn1XSUBnVVlDNCtCR2QjcF9SKCF+WSwzMUslUSVIJjxpJE9nMipOJSok'@;
put 'bn1gXzlNI0BZP3gyLEchcElJVS9DYWg/b0xPUypqKm9QWWdrWG91dSFSY096IUUhNjxkPiw4biFoRSUlciZGNn5hO1FeUjBGSEYlMl0+Q31GKTAmZnhTTiFZSz89ZHRmPGtCXjpwdGwrJEdeeCkiKkAmZl9gRyx0U09HPy4iQ2NpZXFNLF9waytNTyFVUHZuRD1OM0QsTlhAPVpQK2E6PD8uakRK'@;
put 'LE0zRlJ3SUgyMiowcnhCKnljem0qWU9RaC5gPHJCSzddbmRxMCpdM3VbSSloS0V2WGdqLzs/UmByNXNLZmE4Vm4uPT18OXIjMjQyTS5GLG5yS145I1IzeXc7R21iRGpFcUFfST8xVT5dc3xQTSZhWEh+PmVxbENJK0BsYiEjYklKQ0w5PVhhJjVpWXRsKVgpMjgjVHR+K0Y3cHJBMXFiTTd6YEIq'@;
put 'YU9HUVJEMjdOZ0k4XS5bbnN2MXRYalFDJWtPJDNicnlJOEBZRkdXPlEmK09MWD19aS9jMjQ3fHlYS3d7K2w4Smg/KGQ2Pn5COnZMfGFIPnFafHUqSjgxQFlLMExLZyspJXp2cVF1Vkd8JUhLZHZ9Z2FlUHopKVsleFBHM2o+O3B7MWVDa0kscXB5JnovNjlnanFvaVh7W3tTUWssVC9pPWt7dkZE'@;
put 'MXNJWThhN0ExV34wcTphL1Q/Jml8Q1RVbF54I2BmVHp5RHk5L3drSkRrcmZPNF46PFJKe1Qlbm97I1szTVtULypnSGppKih3NWlqQzNZNWZxLko2JWQwNnV8ZkpXQ2NWQVVfa0shRDg+YH56W3dBRCU/U1BrMElaaSxHVnRrSkQmTTt+Njk4Q2BENX4+OShyXSZUdSgyIU4rRTJ7SE9DUVc3Jk5v'@;
put 'cyFbbXRPWVAhOW9rT0BiQzkxSW1EWDgkfGAoLno2PF9edz5oWDh5dmRvSyJCTjtHcmdVZWVuUSlYdGB5RXAoMi42R2dMWkh1YTBxeCgySDhyNDcwKWRDU0B2V0pvZTVlfj9ILm5QJGVfXT04W3ZZMUI+bHl0W0QxNmpeQ305a0krVTFOI3kxT1YwYkBlQ3tvdFtpPWRQQ1J+YSIpMkFMW34zQTRv'@;
put 'PzU1KjNpcl4lLFVdbXQmPngjY1IrbVBzKDFHb3R0bj4hPlUhdkNiUFpYdF4odn59a0FvPjNVKFRAfERNMygpK0BUSmpCPEI3aGMvP2JTd1dfaj5oNTxZOXQ7dEVWeG5UUHpzSHR8IVNuMjBkLnB9U1lPJHUvdypiXXFtKm4lWXkyJFc9a0pLQ0tuPmJsUG1FV0h0azBkZTRiJEt7WFVnQkRkTldA'@;
put 'Pn1OVWYsR1pybWFBMSxMO0traFVoSHpkdyVAdCk3Mm5TMEtmWWQ7SFFtZWFCJGwiUmJDIU96MjZ3PH51OXBfSFJ6U2x3K2pTanlJVlJ1cTtheVJ0Jm5YelVSay41KSUpKXIjKSt4T2BnTmhoJTx1JDdFNHxJJHNrRCRpcE5QKkJ8Oy5hP01WMiZjMmt6a3ddQTl8IUdhLzZQb0Z0UCM2KH1+WCZD'@;
put 'UWR7T3N3e1NMKzIhbHxfZV9aVklYeTU3M0AwRzZ+Wi9wTn14VGRkSnpnUTdJNmkifCNSSnshQGN6bFp9fUtBJWJyZGJ9IVsxRnBGbFNPbXFbVjNmRFJAOT9gNzRZXUF5R3EvKWR4LEd1NUU0SVdWSTAjT21lKSVjc05FQ0pFV11CT3lpQV5CK0I4JWgxWWw8SDk/amZFcnAoUDs+X19+IS5rdCU8'@;
put 'RF9ZaGxtNFRLXmhTMW1NWiZ8ZDdPfEFbWENjUzxxfDBQPV4/NDZOPFFYdD5OemlDKk5PZFZtJVdhMS9jI24sWlF5PVU6KkQ6MGlsMzNZV1daJkhZJklHYnlvLlRKUHp0Il4wVlZMbXZeTkQmanBfOVFCa25aQn0jdVJjfUshO0F7YmUsfndDREAjP2JXX2tQXzp5Q05uOF5iSmppRCE5Y2NtJTJ0'@;
put 'OzZRcnNNVzZyNDlTNkxOOTM4Im9lL3gsQGN5OFF2TWNwYywlNU9vYV1ORmArOyFGdmJ6RXN4XX5LSC5gPFhha0taeXxdc3xHb2B0PUFTcl9tMjZCSi9OTTomPEZbNz5fem9sRmkyaCgmTS9WNVVzMVVxYV8jTUt5endZOUAyNHgsezdaS1VPRDNBOjI5PGklX153SU8oQ20wU3xiRlI8TnlRV1NB'@;
put 'MSVTPF5wQ3NpaXk6KnsoQFM0e25Gbjx7RF4xT211S10vOD8kUnlvZXlSQ05acFduQyEhaX0+cEk2TShHKSNmOlYoX3BBfUg1UiJTeWZHKXoxQHJEO0JFQ3dISGVQcFUib108Z2YiZW1WIVNWO0k6XykuU01rVmNleVhyLD9ZSElNRV4yXTdhIUNpeGBtY3FmOFhyRlAqVHQhK2ZRR1ZpTUdeY0V8'@;
put 'TVNnM2IhVGhTJVF6T3AiQz0jL2BeVmNpUUxXITFGSFkqfWg4ODQ5ZV9tR1NASklPMi89VnVBckJ5Tik4XnN2ZT9QTUpabTllNyomVnd0QT84Z3U3d1FeOkplbHtoUUFQJT0ifFpqKXo+cUZ6SC48elZYQmxYYDYrYjUqTEQ3UFF2WjR1YzhgQSxtKncraloqYD1fWi44QGYlMkJiTHAvSSw1ZUdS'@;
put 'KlUhcX44JFFablhTLEdyYHc0LHEvMG1qSHsrSiQrfTt7elEkVzp2Lkp1L0JqeElVVG8lPDBYKVJ5aj5IQ0oiZlchQj8iSl4leGo6ODIubyljTWtrRXwlVyUpQDRmbGw2QX5aV3YhZUt9P1gyJjd8XzVVPHcmMFJSfjZUQ05zRSs4PUEpeEp6Sj4vcFFxVFgsUGpXelg2Jm9jd0FXelRScm5ZKSgl'@;
put 'WVJPe1swNUhVLG9gc0x9TUEkUCNJNmNfXk1jemMkVjdRK2o4UjRhMDheZ0NTdWIxNiMyKDdMQX5Ra2g7RHEmL0hCMClsUHpWIVhKezRXODd5bz46NENsLjZ4QnJVeyJ+T29XKylMaVBSKzQpY1AlezMkPkN9M1hDalNeRGVxPENuRHN2djJxS1kjOl5ib2lYOysyNDlxMX5AflhRUTlyNEJ9Ijdn'@;
put 'Tz0qNTR2OSp1b21UfGRFR0JHSi9PLmg0Pm8qPnZPJldrfSlRTUB1OHJLaGxuaVpyVyxDTCpxfm1qSyZJaTA0QGE+MkpoOTQmWlNRazRFZjxFI3ZGQVlKP1VxekpZWEp9RXxRMjl+c0V7X3IpdXt5SCV7RGM5YWFqOGsjfUpiR09aIlJGRkRlIylLaFBbYkUsKVlgO15rc1FzKGx3P0k5InBrKlcw'@;
put 'fUMibz0mdkZJSE8zQH4wflQlWFR7I2lyYDdFJEErS092WEEjTDFhdiwrUEoiIyhEcHZSK2MvbWg4VyI9Y1Z2am5SMjFUTj50PD9sTGt4aFB7UiYiclYxe28rOVlpNWlBXldTOEVhZkhqYmlCWzElQ3VUV3BgRmxVXi5OJnllVS9VY0RnZUlXMHxmUGJEcS4qLChHISE5YHIkNXM8QXNlR1NNYUBA'@;
put 'aStqUCFCWm4rVlFvN01CX000MnY0ZkMkVSlhVmQqIWk8OCZmMllbRGEhR2pZT0siV3lqX1JlOSwzSHNRPS4yRTxvcnNMOldwMH16TCl8ZEFaQjdqeVB6RCxPPT40eEJeNWN1UHg5S35fLF95NUx8OltwIWw0eVkuTD53e01FcklkdVBwWCkxWWpHJX5+NVZqJUVhPGJvTHh5QXZZXXN5VCNTZ1Uw'@;
put 'czR6Q1pRT2EqLjdqWUskPCssd1g5KGdXPl9ZO1VXJlNZJW86ZixHTF1QJWYyXkorSndsTEkkTEZQcHdAWEMpQjpDRV9MbClTaWkyNGZUKlpfKEtwLlZyc0gvdVh7eUZtQmpXa0RsNzd+ZCs8cVtScF9PS2dNbUptZS9FdWdvZV9FKXUoSSx6eTg4QzBRPTVrMFNYLEpONFZKJigvOmsvXmFpWz1p'@;
put 'M3ZWTUhQWmYmLFJvVF1NRmVSKlFGUGtiSzREVCxtfSJEWWQyQ0owKTo4eF1eO10mfFd3eWEsUXJqQVc3SjQvInhBZ2tkbHZiR0JrVigkcWlBNVQzckolW01mSl85YUU0MmwrSDRJVFdASTlVW0tYTkRKWkFgO1RBTCtjTlR3Tjh8RyhFc2ZabFIiRnZTMmwhaT5xOCg2UEZvdCF1dUB9alZxd2FR'@;
put 'aGYqQjVhXzxBPzp3SyVqN2M4UDUqVkwqfktxNH1SKFM0enk2MTNTTlVzfihATH5ndDNLLzszbz9JZ2VIcDF4SFpbcCQ5QixHaHgjRkFLSUUhfm4uZE1JMChffGV8aWxvSiUyNlhEQSFgRV9VQFRnaEhvaUdRZjp1VVZsJW1XRkZVW1N5VDgqKWtbZmk0dEYkXWZZYU9SfD1YJkgwcGQsQV9Va2Zx'@;
put 'KToxY3t5OFpfUDYmSitSZSZRcHRQcXdEa3JhP2FdUlFMMStbMjN7cyVaaHBofkVDaXs/OXJ9az4zOFRsNCJpMEJ9amBlcWByZD82cXtBeyNPblEhY3JSO3A1e3V+QzNWVn5VL11XUGxTcyNpOm0pZSJ+d1E+PF9BRGBPRXxWSH0uOXgxUWdWVVRATCpEZm4iTVp7fEImZykzPXdIc1FYby57IV4x'@;
put 'OU8hT3oudSxDKnZQL2t7NU5UWUBIMy9WXVR8X3FMQXslKy52eDVBJEBHS0h+fW1gKnJXSCYsbiNUYXp2dVVrNENDPmh9THFSRSEpIypNRjM5WkQ/KnluOEVXWTleVGYpRDE4M0hpfn1oWkdxaXw+eEc9b0p2OU56eWMuMTs/OlghaCZNMWsrOlZdLnUzZFA3d1lZL0NkJW4yJTJ9Y0ZuczVBS3hx'@;
put 'KFcsPVtPVVIjO3hRaHpnZ1R2PzMxajlXQG0rSjdvSy8wKUpebj8sKjlhYl5GaH47R0lsKjh3NXlhUyo5I0k4cDZUVG9oKUtgL0dCPShtK1FGK3pkazFkR0oqYns4anFsM3ZlJX0sKmRbMjtuUVBaPDp9YlkpNjd4VEBGO2M0NDhpI2RGZ09yYUUwaGlgRGJxViVbTDNba3EyfEV3Zjhaa0VodVsr'@;
put 'NS83Vy5bPFosVD1Lb1A5XmEiJiFJdElKI15MdnUiYzJ8YTxeOmx5TDtsQUo2cFtKd0k9T3wqKjgpS3hbQFlRbl51cCs6eXkofkolcSNeI3BTRkpwPEtQRilQeUwhdXRAP3ZePUNuZ25aLmxeUlRudXtNUiNtcUZ6aH1sWSU6K0oyajtIYkZSXSZHQjJfPV9TU2QzMXBJWzl1ZENYQF5ELF86MFQu'@;
put 'SFszTTZ5IyxlcT0vLi9kKSVIaF90clF8T3JgXmtQOS5GMksudWRydUFSN2ckN08zQ1BHMEVUQ3tjfT9rXjZ+el58PD5sezdjKllvQ2NsdXhwciRqNWlldnM+R0BDXU0/ckkxJT0+VmlqYmFfKHl3QywhcW9ONlpPc2cqRFgjWnFPU0pvW2FYczNMMXc3Iz5aXjRmPEUma0ZKREMsb3Z5ZHBBSXFD'@;
put 'e3A2UFlKOVtsXV50QV95YVFDa2NIRWckUVVrUUQ3NClSUj83aWZbV1Y+YFQ6cV51TWpiLFIsKyRJcXdReWcoXW9uWE1FfFBZbzgqPit0aWoiITY3Q3BQfHF2Tk1HYlNKJjoxTy5yYCxbM0YjOmwyTlJRV21sWHQxZEV5R3FHNDlUdz9vN210NFlbNT45IjdNRCk8fF97YT5MPUYmOlRWREE9MTZ+'@;
put 'YUY6RGl+UCM0M0BZWHk/MHwzeyVCMmJUUDdadUo3NzwyJHcqVXkueFhOey8yY05OXk1yImglJkdWKS8pc1VZQTN+aGN2dTs7eGRTS08mRjYka1lQMztXeT9vU0pGK2lgRWtLImBgelBSVVUpbnUwVk9TaCN7XlQwcDVOT2NvLFJYJlgwNV9MQVQuUVovSVQzPjw1Mjhmbzd9TkhLUnZXXXJDdXdH'@;
put 'fVFbPHR8Xn1FSldebEV7eCorKTJlP1FEWTJsZkZEYj9qNmVaKGY3MGklal9FUjVaW1Z9VjlnWVR2XnxMZ2czL3x6cHtFSyZISCgqOXc9cSxIPlF3V0xWN01FQEUpSSQ7L0ZpeTM6TkdPL1VvdnNtXyR7QEd7VVtxW0NWMFRSOT5DVD9gKWZ1RUZ2Vko8SkxQQ0tGWF1tSCk0NjgxfSpsLjxabT0+'@;
put 'd0sjJnwqYVpiVEFpLkJ0T1FuKShoKVIxXUh2eyV+d3FVa100IXs3UFlKdHJGaHoleHcrVGJKWGdTKWFUM05eQ0ZRZjNISSpDITEvdHdhKVp4azRWW3o8WylqUSghWTUwfmBkKSgoKHtkU047R3p8NFVKbU9IKE0ibChOLmBDIXhZdS9aLDEuPVNETHdSazZBJTVZS01rUUhZVk1rWTdITlVAPXJk'@;
put 'Nmx1T1hLfXNwPHY5OTVDKi5QJUI+YHZdJVZuYmJpcCx+WUtePz9zYWwwdUp6ezk7TTVdLFtEZCw/emsrbGJpfHJuWFVeJj8lTlNhLldmOkhIVUMpVV1xcExCJE4/RkRaMigxayQxVzxHNjZPO186WURgME5ILDE8XV0ibVQhOjhiU2BdcTQqSm17TT4rLCQ6I3BxJSE8ViVTb1thTjZMOzZsdE9S'@;
put 'T3slbGNbbEVhWGJZVVg6X3NUMmEye0xETV0uVzBGQ3dlU29YLmUzVS8zUU1VOjpQO0sjbml9NGxJQ3JYQDlnKDNTfDd0fClWcVlrMj1iYSVnQklYdjBuM3M0N05KSHptfGwya0NtR0Fwc0grSDtNUl0+dSY1NUF8XlRISl5TRkpeRHd8S21PNj1qZDdSJHM2d0A7VG5KcitZKGdWP1N6ZTkpfiIk'@;
put 'aVBdZnVUTSVoZyw8WCFXaX58OGwwRndvTDU/eHxSMVRMQmppO0tyZ349Z3dLeCYwOn1bempMd1pMJmohVDY4MHNOS1EyYiJYSlE5bmRNSXJdeDRZV2NKLChQKV9oI3lgRihUM1hgaWQsZlBucDBNUXwqUjhiI1BIdDllaSFvfG15PWp6WG5LLFNPPDxCI3EwOVA4Ri5RVSFkUnRvIW87eD5PZXkj'@;
put 'OzxEbVZkNTJpRUpDb144eFciUGBWek8mQSZLPl1VVWlwPC48PlZfI3kzaSJER3N7ZHc+dGpZVytnQ307Sz55SD5PJFM0Umg3R3klVDV9cHtzW3dVKXJ0Yz0wW3FmaVRyTWdnZXNjMUlXPSpScSVkWTk5U0FMUn5WZ2lDNiM3MSsueHJecWw1cWdwfVk/Ok9XTkRyQldCTE8qcmNOLlRjflQyZz9d'@;
put 'bllIVVF4Uy8rc2w/M1NbKVc4Zl16XXtzcS9RRkNrYnVGeXM/WW9GMlRKLnlrJCFfa0xsYURnR3BoRTZiLy8zSCtjYVRMans+eFZxMn1nTH4zJHMpZ2BoXVBFNU9pTFZ4fkwxI0QycHM0OE9MYFNkSTJYVDorN3Z0Vn01SDZaXSxeVnhWZDVQaDpkS0tQLzh8JTFXPjRBbTZmKEgrNXwrYG1RcGNW'@;
put 'ODpVL1FsekZLWSRCeFR6NzJ5TD10UEBEcT11MElIcVRybHBBRSpvUGVrRS5MMENGen54UW4qVTdvLi5bKXh4XlIiRy5oVVkpdFZacj4kRFg/cltsZXNoZXlvMHcobHlLPz4pWihPNV4xVGgmcjJ3UWRjQmBhVkNucCE4JnVCbH4oWHRWN0VrMTdrQnZ+Y2Nqb0BxYVc3SlFzNilyVTtuXThOQlk1'@;
put 'W3V3dTchNFVseyQ/RiFDSytfQihFVnFAJWA2MncuUTBNa0VZRUozLyZVdl5CNGkkdFNkJStHcm0mPTJGd3JkRmhOVUlDQlN2VGZ1P0lsSiZidE9laD1AQz1DQWNhOSx+RXckWTc6VHQhY2JJeyg7K3JSMSZrclMkJTVVPS54UmdqRCUzY09tPTVCNmp6PmttVVY3Tn5bRyFWR0ByZis1JExKWTZf'@;
put 'RHtjZFYrRllQLjx0P194e1prNCZ6akJIeTNMdyYmP2M9JF0pKD9dUDg0ZyNqd1c3TmIvYTMpVGlNZzYuayRJIzJWdGtsOzVHZ0A4WitgcC5ea3VfTyI5YW9zWkIqLlF5eDxASE8uTkZgXSM0LEEhLE82SE8+K3pUfCZjOTNbJEhHVSgrUVtqKiE0PUlHTXRdLzwlJm4kNkhkQ0FpN0NJNCpxWFhM'@;
put 'PmNPL3dpKnA4KC4yaWErOXc6JEwxIUFtdnVpU09SPHliTF00YldpOz1jRypkaV1zc3BSS31tMW5mMVcpO1Q8WjRRfSJsKzo0SnRCKilnVSkxbz07dTdqQnlKS0YuPytuPjV+c01mR3NvXVpKTFg1OSEwJmxTLHJ6Z2VINGpZNVskISokaWoufGw+THB1bFFAUU1Dc3tVImFDeVBHIn0/Tzw2TUpq'@;
put 'Yj5ralBnX3ZwM3xhQVYvcWBxPXhqMUUxX1IuSXEoP1QyZW1RcjhuXUM6Pm5eVDYiZShJcCM0bSt+MyZLL1N3Q0FrOzxgKDAzb3s2SXdgRzRZV1k3Yj9tU21bezghVl09Om5zWXdRZTVwSzBgRTltU0ZXWSp9T2AoLCRbVF05QlA6aSpHTm1QYF9xIXlOUm48R0MvOWQ9eW4iOj8sfEtCXyZaZn5f'@;
put 'MyJmRXtzLlIodjd4d09QTExnSiN7UT9DYUc/JmtuPzNfa19JQ3BtezVyPncoWllKbGksOEZJLllKfUh1K3p5KitVblpJNXklNFBiTEw1PjcsVVNrIzJYTHlJa0V1Ozt1SChZelkmM0ddRXoqZShWY19PIXgxSWhGRCRZemRaTUQlIXJBdkh+VmhKU1ghOG82R2B1bTZ4ZTo5PGclZ0l0Ril6Xykz'@;
put 'JWFNIVlrdHxBO25IeTBqIXB2MEAuOUAsO0NzRDlZcSRddypZVFErYURkXiF5RTZ6N2Nlbz9oZ1dmUGtUWlFgOWZCeTJLWlJybUQvKTlyeihze0NWajdKK2dAVGROQTBEfT5VJmJjXy87XjNbaXVJRzsrK3JiVTtLdihnPU1IRFQ/MzFvNnRMWD8uZ1hyJklGSiRXSSxXPXNhMzx6cSorPH4rQ2pF'@;
put 'WWApKEpKUElfL31eS3RtdCkmUC4pQEBEalV9PVhack8zSk8mI3VEJEVPXUk9PH4sK0MiXVs5IkQoKGopNDhxfXZEeFckPT5MciYqVCliKTt0PlQ3dW4wMXF5SE42cGNpUT1bIiVfZkFKZClKR0BtKzQlPlBtdEZ0Zk9BMVNdVnZCWCt0JSxrXl0jJnpVLmZve2lLVV59QSkrbkMjKn1fXT46JHgk'@;
put 'JWl5eWE+Oj1bUGE9NiglKGA+PlhMfDs/R1I+QDhQNmNTXyQmK34lS1p1dytmQyEuUUE5KVhQRXFWRjw1eUxheHxTUDc9JDRJRjcmYm1EIzkwZj9sSjA5QGsuIjcrVVtDdDBbcEU1c1Zga3M/RkJmLG9DXmc7cCQqPCJ3e01yYm1IRltBQkM/PllLaVJPblVHUDduV2xWUjhTXU8/Wi4wVi9ELipz'@;
put 'aE1dNWtwXytmeDFuQE8oc2w0Y2Voejp8K3JQMygudz5aNWc1eXw6byk/InE5Rk9tNWF1IUFFd1pCKDh9aXxZWGpkYF8ueFJ6JkU1LFtzeGQ3Z0l6XU9oUj95Mn5FbGlZOUwzQlM+VWJHQ30uJVlEWnFNRGM0aFZDan0/WnxRTnNtRDswSHFBdkpnP0hWSzJQSyFQbW5YJEMjNGBedk9yfnQ/XnQ/'@;
put 'bWZEXlhCXnVEZH5bImFmeFhOdVJPaWYwYCxBdjU/QE1eSmBLIlZIaGhpJmRDTGFhZVdTPipuWSQzQHJ7SS5MbjNLYG9MZ0U+I2BfKCZIQnFfeVZCKD9vK3R0aD9SOlcqOCl8VTolRkpCZDwicHNyZlJed3ZOYmh3IS4/KFl5QkNZZWk1IT4lc1hlbW5zIkh2cG49MzVje3YxOmYwWSE1akxgXVMl'@;
put 'W0xGSHR4IjsjSWBNWSVQM1ZfR2pSdjAhSUZpJkU9RDhPNlF1YHRnWkNjN2FuX2M3d1gkMWtxKyFpUFpJWmpyV35fKXFvTCh4VFNIaFpBZ2NNYVJ7JSRISkpTUHROVSR5RWdWdXI5WkJKbVczTzBJTUFlNXBeLzJFI3RtTFp7P048RToxdH0reW8/VC5oX3VHXmA1dmclLz98QmR8ciZ3W10sckYi'@;
put 'aEZsRkIkc3YvTDhpJX5vW0pjL3xqNXBMJjpzUmZFS0ZCRCJfUm1YJVI4aHNYUiQuam8vaDxbMC5gUU9tdVQmQnM+RWZiUjohLiR2bih0WFhKP0haa0lBZ2B+Z28raUpBNkhiQjtlJlhHLCo5QUZzZTp9IkNQZGZyV3x9VS9qdXdefVlPZFBeJn5OYjUsfTgmVjUmel1JITZna2F4bzZfQi5ARFs2'@;
put 'a20sfUE2TXJDO3tZX0hDaF51Tl9pSkpWcT0zQzpGbmh6dG9LMi48W0B2dVhWWGJ1QDhMRWd0YWxvPjdefCZCSEtaemp6KX1QfHY0KX03aVJAZSk9bl9wWmlNSWwvVjBWJWAoLkRVcToiRD10bTN5b3cpRyhWbypCNDVbL3ZPOXxmQyprRjlmKDx9JV1mYlV6QnVmPllTLn1ubFBoW0dfVF5hVEA/'@;
put 'WGFYQUd2QGZ5eGVzSmUmUStHVWMyXlY6OmplSiY5aH0ufCszMjE4JGJkaTBlPGEoUCRhXm8zTS9NMTJPOVJ0ZUgrMXo7cTZ6YktiUD09UyUmYlo7cTxZVXZYYktmKypGP3czbEpIcF9ET0A5SiR0cHswPyx+QzBud3V9Y2NdR3hAT21+c1dUeTZ4bENKY0diVSxOcnYiayF3Y046dUFkOmAmdTk4'@;
put 'QnIzcDlmbjdEfEN5b3twdm8wfEpfPj9vIkYuUExteyY7NDMyKSskRzg9Q2F1KEVFMG04ek11MzY1UislK2NpZFM/Pn17Mi9Re3QraWFQNzNkZE40IU9wSG1jWjZPW1pHNkk9djAhd0FkN1o/OzBLc1ROeHBeWTx2QlYvN0R0PXQwIzx3PGhheyJPTTYzKnNHbElidDp1akViNUdpdkt9X2Q0Rjt3'@;
put 'QUQ2K0IrMkRtK2xeY0E8XUczbEtXaTsuY2pEbURyaldfJDsuL2o9MUUiPSYhNkZpZVNVU2hUODF7SUpUWjY7V3tBZlpDKXlSW1shIi96UEQsaUVNK1VybzEoTkxKP0NLTGo9SixhNEM7MlRBTDgqJVg/PmFmXWskUTNCaHk0Qk1mYzYkZCU2YDd9KyksYiNIQ3NsKXtmTD90OWxqa1poJWM0JlJV'@;
put 'YHQvIlB7MFt7cGA4Un4sa0t9RWdbJlE6WTs7SWlUdyZBNyE/TzoxQSRJUUl9UyhKMShYZTAhbEVyXUxvcz0lPSM7S0lGY250eyx5Z15FaHs+KWc7emlvcVskVEBpU3F4QShVP3ROeV9ISzMqKE8zWVY9QSp6UzJ2b2EmVDAlSDdDJjZ+IklXMHZQMSk8LG9hclptPzZZb2s+ZUEuWlR9MSpKSGVl'@;
put 'L1ZxTWtda1RTcU87QVF0UX1Qc3tbTiQ3LltQWC9EUn5JS0t2JkJ7cFA6ZHkzcXReeSZCQjBiTFlBcCpTMlVKNCluSW8lKV56QC5fYH0rIUZ0L1RteDV2NSxUKUZaaiw4XkFtaHdvcDtfKXRfZCE8R1UwPXo9RVlIaEw1WmB3dVslciN5eHEqe1kuWG5FXTRQSUk/WFpBdj1mbHA/WyFnTD5OSUR4'@;
put 'JDlFdXJlLi5leW01OmwzOU5bZV9uZSR4dXI/Uk9LSWt1Vm1+ISZPKTomTlImdGU7RkxgMWNWKVlMbzVWYixMYUVrZEU0QWRxencoNTttZlVZJnI9SGx+YXx1UCFxSVRBcDA+USRRJD88dmd1cFkxOlpIKFBgMzhuRnx2Ji5+M0A3T2RHeXZHJE5zVnBHSHNlfFZHOSF5fWpqWV9hTiViKiY4JHp1'@;
put 'UVRFfGJUIVR8d1Y1IV1EbVJON2BaZHJPRXUldkI4QHQ8Oys7M1t2L3BGbiN3Tm95XltzZDhFPmMuKCo4MV5+ZnddYVVPV2h1Qlo8fSx4Tno7PF9lZD5yM2VtKW5oaj5pSEVUezNvVlBWRT54V0FrTjhDbWJ7cXI2eURdQTJ2I0FJSDdWaWpFckh8Z3tsV25HaTRgdEhuRzJFVytefFUoeS9jPism'@;
put 'OlMzYnVOLFJiSWB8fFhqTFhTSWVdZFo6dyR+c192RkcwPyZjd094ejlHfUsuWyI9U01yYUhkezJbQitUWlJHUnJIe21lOWR4YyVoSE81KkwzO35ibXssPlNaZkVORXE3T3x8florI2p9dTF8Jm90PW5eSjVpNE47VkA8RkE8NVQ+aH1xISR8cnxKXURqSSJIQGpnRERIXzBNM09TKUsiISRjVnJY'@;
put 'Rm87VVppRW0vOFtZSyFMTiJxdGE/QWpgIytYbSQ/eC9xbjh7VCYrKH14MUVRbV4yOEhbbiFhOU9BUiF9eUM7R1shK1QxWzhmS1gvOkwyOGh2K3NubV1AJFkkQk5UUHJVLDcrflliP0NoWyJIP3ApNU1PMmVbdCxiMGp4WHNdeW9mQ2B+U1JPU2hFMHYyLzhpWXMqNkNHPXdnfmNpNjB6fj46OGJn'@;
put 'STI4akZ7dFtEQmZdSmJqeTVbc2JBRGQ2a240K0p6ZVdfeF1fWmZCd2gyL0N4anhQN30pLlAjUVJicEMjIyFSSkNLLCx2PHd0fipTOXBgZHddX0RhPXQuM05XdV5gU1szbFNjLnFeTXJTZX1CJSgjYT45T0ZgQ0RWdzBJLHBSc0c+KWEsX3h6Zio0JDI3YmlJN1hDcUNnW1liUWB0KVVlOWx8LHdw'@;
put 'eGclRy8/MXVUdD4qajomY0xObyFjRilTYi47TH1KJjM+QERlTGJKbk9mKSo7dVopQko6P0JiV2lXUlIoPiY/Q2t5UFtVKmVTfkt8VTkqUTcwbWdqODhyPExxciZ1InVhMkxXVCRrbnFwc0hSPmdRMzxsR2VRK3pmMmZEcU19IW5ZfFIvUGpEZGxnYHQ0O1A1cFojK04oSmxFNTJAZXBpdyk/c1Qs'@;
put 'LlokUkQvYWhkaW09dC9aenR3bG91MjFbTFo5RjBdV0ZeRSRFcXNiZUVpcDp6P0hpX0habD8/Y1l4NmxsOWUlNSI2JlFrc2R3Z1l1KDhAWnIhLko3citoVkV5JU5ZRHk7eGE4aWRnI0ZtI3xEck9ZaHx1SWZVTjtXUV8yZFMwJmR8cnwrV2s7VkNaK3tBNyNTdE8+ImRGVXI7dlZ6aVlMRDZJN1ph'@;
put 'd2JiPDhnZzQqKDpiKGBIaH5NYnBCLmpVWEY4QUR4MiJXWXtgJTFwU3xmWGllcSIzSzBKX1BHM1JjJF1ZL2trbkBsVGM7c25ufUZHPnpDRTpTXXRAZDc5Ind8PmMyXUcqZHtOdkolWV9MIUNlUHZ0YnoiT3d8TWwzRV0iZDZ8Ryhpcjc4U35rKk1zTXpxJCkwWHJPVjVOdE1ZRERCeThWTVI5cHln'@;
put 'Vkg/SHg4dlNVTWIxdFd4TWxIZiFfWUUmRSRfZiUiSGFUY2U4WVRnKkJlY0FNXnRbcjAhQjVMckYvR1JVfTRVfEYpNWk4VldOTkhqcXQ2Onhxa3FwJmpaWVBhaV00ZyVQRn5kJmdRMHBPRDgqKysiTCkoRGhOTDVjY2A9PHxJfChgNGgqKnw0aUUlSS4maUdLUD5iOD5aREg3MTpIRn4qPXJuQElq'@;
put 'JjR5MDdOd282Lm87NTtLdDhQZ30xV3JbI0tKUE1vYTJ0N3MoTSttc1lQanBQUyFYV2JaQktzeWdLPGpjSllPcWNGfVVKKXdZNlF9NH5zbXF8WSE8cnlTaD8zOm1QOnp7O2RZRCN5bjdOdDRecT09LEwoTkN1PCRsIXgrJGIoMT1gLGZ1L3U7ej00L3kqTT11OnJVSEk2NiI+OU4sSV91cSg4O0g7'@;
put 'Ujt8cWM1d3R3ZihDVmI9QjcpSFlvYUlIZUYuSG1wfGdjcXg9LGh9I30qQjc8TUUzP3doQX5BdG18VnljOD5rPHs9MCFZfnpEKlshLjBfaDNGTzp5NWBBVXE2TjVkJH5BOzBzc3g4KXAoSjlKVEFtW0xnbDNZaCYsMmlgWWBxWHJWZ1dQXSF3c3JiWFZrU21wJjhdelcuZ2NAZjVuUWA0fT4lR2Bx'@;
put 'RkxzIVUxLEJ4LFB3SnsyMFREQmtvL1dBW31lZV9efXRMcVVXOkVJakxGNz8mRGN5QSZlQjV0enhRY3xSMDVCIWVASUhFM0FtPE5DO1JrOnVfeURKei4+P1E7d0dYSWEjeXdXPVhkZHI2Z0JzL2peeSo5S35GSjhHRU8lakxfISVaMHFATkNfU1AhbGNEMHpfXSZXKTQ4TzY3bUN3ZFt+OjM4Oi97'@;
put 'KXJ9OUwsS2cuIzhGYDkkTkNKNzVVeXEuPUxUWDgzYmJ7Tm98bFBpVVN7XXtdYG1bKUBWajldeFh2VFRzOHt5T3J0JFBZbyw/KCllLDZOcz5hZkM2ejxuek18dCtFdztYKkFsTCk5UGhHflM8SDEpKWBZb0A0YClUellRRWsjKXYrVG0uKnY3Mjk5bVMxSVtOV251ZSM+d2pBdWQyOm4vR2RXImJP'@;
put 'UyFvNltfeUc8KHlOajlsW1g4S2UpNDtHMWszKkxiXS54Pj9BeCJDKDVTbkVsVHtjREcsZG5KZ01OfUJvZUhteyhyYWgvMXhbLDBxSVNRR1lNfW4ibGA3Q0RxI1FfKEYsW0JvTWN2RCFgW0lmeVZSMklUYkY0IWBZaik6ciVNMVJkR1M8OHp0emxmI3t6K2g1YCFhK1VbTlhEVCpRfDMyO2dKNWd8'@;
put 'V3QzN2BpUWlLaDRCUEdNTWI1ISRnIkAoQCFHSTI4JFohTDBJPFJHJVFPKk52bHJoVm9HQmc8NHZDSykzbVBGWFlpRXtrZU81Jm9mdyVgPzNmYGtfcC9XaWtzb1c3THtEMmw9OXkra2s+ITsybzBOe0U2LEs/YmsvUnd0Wz43WzFJUnNJWX5oM1krbyl4T0VAM0VnTSQ1LF5NdkpPPTxJND04YTFB'@;
put 'VGNnaHt+YSFMXlshfEtveGl5cjIrPHFXWV50KVlDb058ez9EPDQ4Z0cveVF2TWk3ZXg+ezIkImJtU3B5e2hLVm8leTpbKkwqY0A6OUwjNkVtUX1yRnw5bkJ8TmEvTVcwa2VpYyVWaEBNci96NipjOzdlOzZ1cmIhUT1GOF98dF5lVHhbTSVuWkw/KzZbKl16K20/cDpFXU9Mck9PVU9RRFdbI1cy'@;
put 'TGo/QFp4TGdNZyohSnNiNVBUaUlhbSgydlJeMn1HYFBwd1RmeXdpRi9+fkp1d3N+YHorIWluTzN2R0xFXj1XIzZuaVtlUzV+VTxbYTIpZSpfZFZuIjhWNXp5NylOPm0jZXdRekBuJiFOJmJ8VylaaVM8Z3dIPj9UQSNzPGh6fFF5KTNZWyJqMVl4ZkZ7QHFWeHdhdWQpO0BnUyQqVkAsJDQuVT5D'@;
put 'ZlcpOjZgUj82LnB0M2VFV3U5a1JFPyJiUCJLYmg/MjpKV2BfTCZ8WlRYYUxJKkFESnVYcFghQyMxPHxZSD1AKE5raSVaT2huWnY/cGAsdjRTI25MaUFCRV4xR1BmIXw2UkEkWDU+ZEF3ZW1hfHpkZU19QjE0RUpAP2NpODE6Vk9pI2laWjwqNTB3R0JCTlpXNm1oVj1GYi4mST02R1R6bU9rUHxL'@;
put 'N0lRIjhbXUcxQDIxX0N+RV9KYHFKMSxkKmk9ZFFbSzNUU2M/flQhYWhqO0lfYWk6eGhKK2goPkMoTmA/ZGR1T2NaYlNJcmA+LF9FZF4+dj0heFdyL0wyPUtPOG00byI6YyQ8bCo2TiROLkdgPzdfK0csUFhFL1hFViQ1aTwoZGxBaSVnQkdeJn5pN1hLPWIjekFZLHVMd205ZH1+In40PTd8e0la'@;
put 'L3gpQ3w+YTdhVDNBL35qOCVhPztEW0cwOyJ2MX1MInMmUUppUiRePTYvKSRyfXJ3V1RJdWJtYzZYIThSZVBVLk04QytfbVhKLi4pOjx1PmR3R14rWjlMeXAlN0BJQFhTcl5bOGRSRWtoSTFwJV04fnZxSGplWV8oVE9KUXs4amlaKmBYdTZGfCN8bmk2eiVAOy9xI3F6MiMiL1I4bXYvWTRPbyg9'@;
put 'dUk2MlE9Izk8Z3BlKDtDMHJlalJ0eCo6akQqaythbWFtXUQwIy5XUiRVNXN3Xjk8JWw5dCw5cjU6blZCQENaP2Q5SksrVWVIKStOK2x7fjVvP3hYN34jX1lEQVQzRSRZTDJHT11xMzZAWCosNVRLXSEsOnA1TVE0fGFZRnxpcykqXylHbFMqeVowMmtPN25HVVR6NENQSE80I1NhdG5WO0wsQVRs'@;
put 'cF1WdHd+YX1DaTBzZ1pYcF5nWXIzent3JG9MTjAsUV85LCtbLlpWa18kbGcrOmdUJUp+XikwQkZRQzt+V2ZbMik6LCZnJGxmWztqOzB6bilvIXU3eihpWGR3ZENHREdIbU0rVXIuPW9+YE4rO3JddDxsXWhlfEdFe2M7cjskIWFbbVMpdilNNkB9IyhgUlA+K2FoSFs8KDhxPX5mMVl6ezZBSkBI'@;
put 'S2E4M0pObWJkJWBkT29dPStie2xwNXBlLzpPeno/aVFAeWgsfEJVN1R3TG5IWE1kZmV0S1kmQHJ3SVhMeFNZNkVHTUBXPEQ1NitxU3ljYV5WZm0qOFcxfDtWQiFlLyt0dTFNT19XZV98KGt4dzJDV0RCc0hvLEdDalhFaD40I3xfOX15ZkV9Vks9eXlmVzc0dF5Hfm1qdSVzdU44Xis3ISx8Jnpn'@;
put 'ODx6ZF1weiklNjUvfEFdenhsMXdaRHYxOzJ6cj9EZmVjQTprQjBGd1NdcXU3IU9XbTN2UEszdzszdW4mUVZLLyFDR3VyNWFYKF4lVjwjSUNxT20pVFAjajVybyxPY0lZX3F2IXt+X2FrL15deTRgfklENTouYXhvYWU1XUtsM0M5SEhdMVdtYy8kIlJ2NWt0SjEmPjt4T21XN0BKWEkka258fHYv'@;
put 'bTh0LjpXQnAhUStmQU1ZT2hTWyVHX3ZDeUx1JDQjYSZWVmtvKX5GPzYhfDteXzIpU2p9e1BFQWVDPT4qU1U4UnspXldrQ3o2RC4jQi5PKj9WY20iT1IkVU9la3BvZCxwLCkiQDBsJlBLMyI9QT4pekVGPVZ2VWw9TXV8OkBOMT1XMmYkWFA4YGNqa3k3bH4wazkmdHcsRWlXNGFHY3BaOTM0WmBZ'@;
put 'YXxlfiUiUi42ams+W2xCfn14KHt5ZSh7L0MublFQLEFRfSVAd0VYTj1dTkE0LEdBXXcrUFJXZGtYTXFLLFc2KSEhWWhuc111NDN0TTt+O0YxMzR+dzlsNVRpMyRKO0lMIlVvOE9zISpgfXUoI0ZFSWpZRHxqQnpVUllbM0UsOShoNWUyYXh7KkFYcWY3YkpUM14vazNPJDliZlpeSUVsbDIpXlIq'@;
put 'TXxCQ0NMdSMiS2BhQVc6Om9TPE5LanRidkFRO3NEcC9IJE1UdjxwS3NlMkU1biEzMmk/OzN1RmtYPnVCejk6PiVxZ29vYkx8YzBHNmAsdVlIUyh9bFdHOjx6PXU7eVdWLzt6IWN2MmVdPW9Dal0rJnVZU2RjWD5KQWc8X3dfMz46fk4/JlRAeXZVL0tBa0pifXFNPGUuJno3cndPJW43azNJdH4k'@;
put 'IkheSSE5ZXR2IWI2cDxnIWZUYEMmUi85I3c1TEBEPiNxP0BgXytoLE03RigjVVokYndZPEptTk81JVc+Vm52XWlKTzxIPjxVY2VfL00uKSYjW2JgWilkRiZuY3xDJjRJVWVUTGY0cm4oNDllRFZiJF4rSjo1JE8zQi5BXnZPWiZoMHN8blJGRi57bVpgSEUzVmo8MDhTSl8rJVE3d29vYi5oUWwh'@;
put 'KXUidWdDbWZJMUAmZGRAWFN0Xy8iNVVhKjB7ZXlERm4sLypdKVlBQl8/d1pqc3plNE05Wi5DO2t5d1R2dzp9dmQxOUBoPE1iejhLMkpySldsI2ViVGpdUj4mNTB4bEZYfE1qYF48NWt4RiRqbGBdbUM+LmY5RyRjV15TQEVJMngjOGI7SlB7LmdTamFVKVFtdXNeeiwpJj5QSXRmXU5xbVVEfk9n'@;
put 'WD1TejV7NFs7JmZjfip1U05VUnhaNCtTSkpHfTcvVUNyKllSfExXOig9MGRvMytNVktVP18/MCFHLmQ1OU07WiVONT1mIkg+diZgXV9zMXsjYDd1KDskWy9SQ1NKS2d6dXx4PnxscGMrZnlAKlJRXyZMaWpfTSVvfXBoRk9OWV99ZyxJayNmVVh5YT9XcVZFRXZHSkV4M18+ej1qYjckcGdxbW94'@;
put 'LjZNZUFRPHglSkNAczE8L1Fbc3EiWT56VDN9PTBhTWh+YzsrUmVFenZaNlNkO2x1QyZAd1JUKEJyJiNYcHVYcnJqb3wjKjE8VywoMGdsZ2YzayJrd3h4VSR6aVE+aFE4KTJAVzZvOTQ/cEBefjhLKjZ3UTR5PDN0fURPSGlqakJPVzdgfGprOGs8U0c8OkprWXNuOjMsa0opQEQyVC5renZ7a2c7'@;
put 'bzVqUm1QQVhNP24mIVJgKEk5KDY/ajhDbnJIeH0lOm08MCRueVImSTFiQjJXcyRhcntHfFNJVU05KCE1LjQwNDpqaHBndyFfLyw9Omx8KmRDJkp4KXYjKC4menhIcGRIQD43MGBhITM+XXFQIU9ERzBOYSJ1aj1jaSYrYkRhfTFqX2dlaFM1KExKTDIqayF9JmhMVzhyfE5AOl1XTDpjVTo+R0tP'@;
put 'fj4jMVBFcy49IkkzZDE1fn5KLDJ+LEpVLGAjdyRafWVWIS59fFNKUkR+M3U5PVkhMENfaFdxRmVMWHRuMlBwdF1PUEZnRVNMfCR4U1JyKFNISileREh+VDk4NTx6IUFdfnBKWXcvWGp5cXZlKHZTeW1GRCY6cks/aDNWJT9iXSokTnlPSW9mMCJAJD89e2ZENjpKNm9rUCUpR0pgbzZ3Jl0pO2F+'@;
put 'My59MyFKUUoqa0UjaU0oPUlSVHxAYG5ldDlxN3JrUkpzSn16PVh1TFUmfjJyTT95djE4ZXFITW9jK0RJSGlIMVQxajc8dD9DRkddfE84Z3lQO3kmUHh3diN5O1hSPlNvT0F0KGUkPCp5S2JYQkQsMngwTGdCNV55dEtFVn5+OE8qOnxWZXVCeVpUS3liVUJ7TXooaVN7TkBYRFpNWl1uMkhhTW1U'@;
put 'QkgydFt7KVBubXQ8IkIrWFoyJigraV9Td0BeZjN0I1p0WGtmSlh8PFt4QjlZK0tZUEYxJFdSc34vZ1FlO20lVVo0I25aPm5lInNnJjowRl4xV3YhK109XzMvbmhXQi8kJXVZK2l+JU4jMkt9UWRjQyVFY0QlYDhMInZ7QFpvdzRNTSNob3NIKj0wMSUiTG0/LCN2L21PSllwKC89YFN8WUVRRz0p'@;
put 'JDRnYWN1bSk7Y2MoPS8reW9kPi5UOmwzaH0wVkMjVT9XIyw9R1BxVDlgV2cqTncubUxmWl4xKj8+Wk5WT25nZWVyWUpDaWJqa0BjWG9fWHtdUHdDU0hRUU1zL3x9LEl6Si5DTGNMND9bd3YsbjduezhKNzZdZVVfOU12XyEqQ3VseXViM3hhbV1YanMld0t7Z2ZlK3lLXVdxczUjZCEwN2ksTjdb'@;
put 'NDhuemJEe2lLJkFQcm44XUVbNSo4VTxOIT5RP1c9N0RleF5CKGJ2OWkhRSNIJFZwdm1ZMHFxPTx2c3YsVz8rfnw2OmlPa1R7d2ZyNkBxS1ttSilqbWlVeFl6RXIjSHtdZWlzW2J1SFN9RCg4Nk8va2d6SjwrYkMlS1VzVjIpK3JDUHQwJXo5Nk1gKTkvcWM7a3tEZmVhYzVAXzZoTzImYSx2SjBQ'@;
put 'ISg3c2BKOC41Sl5tSXhgcXdHKE1EZVVPfik/eXZwcjl0fCpyb2xvJHkvb2xWZjhzcDI9cEl1czNOO0oyUXZAW1B+M0RdejFIX3lGMip+SjhFVmhIYD4jITpWUGNRKGNPcDlWP2F+N1taRTJkdypEWzUuWl4zUHtiWVltRS44c2lJN0Ezb18rOGFlUmZHZn1ZcypRO3pzdSUyc0hAc1NMbSheWXY5'@;
put 'RSwuVl0vT18+OkwqTklyUDhIRE1oLHNWbDcmZilRRTQ2aTJ6NSZwTiQyOkBONFVISiY1KkFOKjAkWm4hNlMrK3xySSs4O1tZcU0yVG9Ld0IzQmVjeS9DYUFaNE88PE1+PzhGMWhpQCVVclZUX1gpPTpgb0BZYGpRVnpWRHhITGwiPllFUC4yPnZCPV92Ji9jbzw8ZTFVfXtMKVtBfmU6byxtSk99'@;
put 'Ykp0SFZWNF5ydXQ9blpOOmhWckJ0ZU9JdGc4N153d3h1Mkg6ayMwSTdycyt4RlA0ZHZ5KjRzWXVrQXd2Y2ZaM01NSjFDJGspN0V8a1s3dH4xIn45eVttPisiJEhaLkYxR2s3e2hPN0VnU3VkRENES0w4Wy9MUVNYKUNzfXooXWc1W2F2Zlo/MCNsPmRGUGhfP2RTfC5ecVc5ZlFuTE5kejk5M118'@;
put 'b3JScjlUWnJeXyxGeTckbDw1bX5LUTNeVFFUOlM5TjB6cz1xd2Rme0ZIOFo/VUxtd1kqIzYqMncuV3BDXjZteHJIcn5kd3ZASyZLUT1QUjRLMykjXXBZcn5iOU5hfk8qMW1GbF9dZ0B9RjR6QGcoKClJKG0sdCNEeGovaFZ4OXh5NmV0a2dJPTU6YzVzdlh0SUI3T2hJT1k0ZSFkeDsySHswb3Fk'@;
put 'WFUoQnFlfDYjaUpJN3dYXXYqK24paXIyZ1BFUWltXV0lMisqOj1LTXg4QThYd1V+bUlydGxlR1IzYEBKYCpmZE0+OXBKRWtBOmkpdWFnczsoQmdVYFVKRmM9VkVOenRpWEBscSFuTyVMPHZPWmM7IighRjhmOFI1WW9NTjVgR1hQN2gvZEs9NkJjQlhUfFg3N1FRaiR4ZUZWUnpJYE90SklgYyVt'@;
put 'c3g4Zn5Lbj4wd2RLcjhzdmtMdjF1PVg0XkIqcGdqUyRvU2w/PDJJTjY0dlZYRyUxQls/enVCQ1lMbVZUIil2NHhTPzRhPHgqe2JeNGVHVTU0OUpXVEdvYVEvNDVlNkBTR2g8cy8iMDFDeyUrdTI4cm0uaTNAQWlbfnUqUS8/Rl9YQX49R0R3TyNteSRgNjA3aFVqTktTfStYPHRXczI2V1duL305'@;
put 'ZU9jaGB4NltuO1p7byhucStpMVhrTFJUVT1UKkd5Vml+RHw1IUN3TkEuTERbN3JffUdiSk9HXXtaNkJScDlbUTRjfEJ7a3VROSZqNXlKYnNOMnIwXk1qYGJoZj5Ob3A7KTw+OS8/Qm0wUmJfdHVSOEMlTCMkLmg5TEUzN2VjJmh1KUZEKW9OVTcxW0IqaFlBbWl5fipba18mKShBOCFbI35SaWde'@;
put 'MEAsbSkyZWRbSCZMKFF2fDh1P29WODh+fGE1Kz5rUmc1MEM1MGp7ZmNJPnV3NzR3RSpfdTpsb3VrSF1DIXsscGBJbHhjSUN0VU0qcjUicjNAXy9kKlIuVWI4TiFidWpgYFBlQlg3TWNodEAjTVJbcEVEVzRVPWpFYmJNYXBeOUt1YmU7cFZiem9QaFNSRmZzfEVdOUk3aDxxX3llOEMiITYxK0l7'@;
put 'OXokSDRpMitYYGhBWUZRZV1nWjBhXj9Iayw2L2ovNXo0Lm5PVXxtX2dkXkgpQ1hLKDlDWT5dQ2lNSXA0ezBISlU5cShDLjRrPDtVeUx3VjxTKE83ayJJM2VyYjdzKWY7fmk+NlBqWkZPbGVfYmRGJCV2PD9mRiFVUEFWKmFPWiZIPX4qPCJkKTZzWT41I1I7KityLktqKT54TCp5QnVaKVN4dUta'@;
put 'fn19cGRTWiQ0fFp7aW9iQ2V5SVYvTVheNm5EYS5vKiRSUypFcTk0cFZkaD1GOEpuYV5MQyZNKERJaFYiPHQmd1NdbUp+RHhMNzN+c3k2fjNkZDloUHBoSVYiZiZ1THFre1lAPWV5cjFITWRTInFjOUhgdGRoR3xsQVVNI2xuOnNhW2Z8UD5faDt+YksjUiFRQjJVWVlRQms2Vl12fEJRZUkwQzk9'@;
put 'RnUwekRYIyRzMjU/WEZEfHxYLi4heU9gUTVMISZaTGZvT21TK3EkZUZ0SGhgXmkvMlFQKWt8OThFe0VBe2ksIXgxKnB4JjdIfSluNTZnRnMqdD0qaU9rISJ8TGJHM2orMFN1JD1eYGtZVT9MSVB3cnVOeTU1M1N5SGI1Ijo4Jk9jTkwzL1kwdXNWSEtqJC4oZGE1eGZ0SDtBTGdxN3JeelpYWGkp'@;
put 'W0NFdT9beUB3VHhGSE5rTzVpTldheTtdeEpAdClyfjxCWURRTiV3OEF6VExOY2liYitpUTVJP3ZXKl5DLkJoWHYxJkA6MyI/ayxVPH5Wazh3QHskMTEsa1A/eD1pMFRJT2B3aWMwd2NbOnEjMkp5aVZ9ZlVFIUhAWjRHUVEldSNtTlgwJX16c0g1R35LJmY+Y0NaaHAoe1Ala0V+YF95LFtZYH1T'@;
put 'WEF8ZUwid2hNaEljS0J9RHJaVyosLmF7O10yXnBKKSJfMnE6IXNdZHh+JUMkI1B5QiQrR2RZY2I8JGJPP3VrWnpsVEQya0leJmJNKThnTHpMVklrflJUTCgkei94KlNBTTtaMl53Pz1GZjQ/eXtJcmt3IXYmeShsJDxvOGtWLjw+XUd4JkhDQSNYe0VoT2hTekQ7dFpudFtKK2lZaywjM0Y0OEo+'@;
put 'bF5UYWtFLHZ3eDYmRER0ZndKWilSaH5Qal1PJTlqK3FXJjZmMDw2UFVdODtBVVt0ZnNzelpfKlh4MENNcWB+KT0jLDpEJE9TM3Y7dEYlcnRCenkyLmBIRitLOT1FfE5aeFZqVEVfd2csMUUmMktbNEc2Zm9DeEVRfS5hZ3dGJmk+Zkhqb3FmSU90dVpNeFRWPHFQV3BPW2MyRms9NVFgOW9renE3'@;
put 'SmMzMU0lOEB7YkxofStZJURNS1BPN081RCR+c1srdixhZF5pdjc7fDM5aF0yV2pgeD5fa0xnaSZAfEUuazIwSkdBM3s4R3BDdHBSKmo3cXRVJmY4TV0yRlFTZix9P3x2WlRuNjZGKmYhMk1ZaGFLL2JMSiJZYT1IPmo9PjZ3WkosKDAiO0g4MS96RX47cTMlPHY0X1VNQ1t8OWtBQjI7QyFxIlFu'@;
put 'bVdVbEZRWWhdUCZgeipsSUhTXlEkdGpNNGhVYG5LK31rVU5OfVFVUXZoTHdIMFBNcDBUT2tuXnBIbl88WmFyL3o7aCM+Rl4mQmUjMXJJIU1DVituYixsTkdxIXJvcikiSk9IX1J0YiYyR1JqKUVXcylrTU93Njt9Q0d8JWZITCgjZzZgT2o4eXBzK3YsVEN7Y3pOTX5fWEk1S0IkeCpsO0VqPVpe'@;
put 'I2tbeyYwSXF0OUxoezNaJiZ+ciRNZm89fTUqX012RHxoTkBxSWJ3blhfNnQ0JjIxd0FrRmJQNi83djIsW29+UlFCTVEoRGdNYU5TZDdxYyNeTlVjPnArYmY3dlZSTG0hej5qOFo/LE15LDg2clpZZV8xJTlqJjVbYVVVV0o/ISFQM34sTjIwRDBnL3IrYlZ4W2gsLHJnTT1sPGpMLE9JIS8sRSpg'@;
put 'In4yfE5GYnpbM1BCI252VGMhaUwpQ3Zjcyw+cSg4TTA3VjRDcGZdPDVXaGZdVmNANEp9aUh8P0lZbCplP1JMWHRAWyM5QlQhakp6c2I5YDhDVHB+MnZ9RihvW0c5Q2UxXi4xdyEhayZhQy9KSV1nT21GcHZ3ZX1dTFNXbiRSYXF2KlNsdE0kcl1HSnl9aztleHc2Wkowcy8lQlF5Ml1OVSMpVG17'@;
put 'enNYYXU4IlN6QHxjeGJxRy8uTSo0PDUvWmxuJkMzKy4mVz8iczlqRk1HLkYxWD0rdSlpeDVJZW5CL25bOUJNPnY/cix1YTZfdFlrc2JNX2I1QkQ0XzlORyxke19EfVpOeSombEZQRW9jNDg6MXMoUGhSayF4Jitte24qN2YsUWYpbF5vWDN7dyprZ01YUDNUSH18ZFU+czUlOXZScUVAVCtvWGpH'@;
put 'LkNGRFo0KmMuNlQwbEU7cXtoPnFobFtzMHljbyUvaVhKPFYxY1MkN3w+LCR3fkRnPjFUWUwoJkhEX00+WTVMZl1taE5qdEw1RGhGXS83Pn49dT5lX3QuWz9MK0F+WSZeMzJ8UyxSditEcSxkQ2B5THRPOF5OMkMrKEdDUFExWCFgMzkzOSJnR3dMJlJ1Z3k3QUB2XlBpM3hnZSJJfndMNj5dOnh6'@;
put 'TGpsQSpxa3RVT1lCJihxVV9ZeWskKGlkP1ksMShWcGNdLjpHW2whVHp3JTU3bHxLVVY6bk00RSl+YUR3IndBJUs1aXllQzUiVmJCOVluY1J4ckIreDp1Ukg6JVYzOFc0Uz1uVDpCUnJuUkEyLlhGfjhaJVJRTF50T2gxOWFHUSU+JlRyVCEsNDo9Q1p7Q0Jmb0E0Z3UzWCpzPWM9OVNaW1AxPjBD'@;
put 'Qi9wfXd7cDcqImMrQnNzRmh2YmAjVkteR0JtdkBqWE49ZjA3azVgMXhRd0Y+OSlUNDl6YXVhQnNWO29rRWZ9SlJLI04uTzReYltyWGJDMVNhOVU+ezdxdGFVO3FTYUpEJT99NUd+YXBOZ21mS1BARU9AVGklZzp1R11hNDNLV09kU2daOjJGLGRERk13ZmN3UXxKP1VhXzR+cCt1U2F7ITQoVDhj'@;
put 'O0ZAUCRFXi4oKHFCOip3OipPYiJLJXhPTDw9RylHTW80bUhEMks8SzVaKjpWVGlqbVQ5VTpCXmp0fEVkeWtnXyhhM2l1JUpfRlVBejNCaS5CWHpNMmh6I0A7NUM9bThQN0l+SS8jVToqQlAkeHF9d0wiUXF9MUlbcDtRRFU5MnI6R2U5d3RWLmxpRyxpOC9GWSRJSTQ1eD9vRDVpYHc4eEx4ZjAq'@;
put 'N3EkbypnLmtHciMwa3g8Uys9d3FETFhZPmFUc2hkLlJhJnp2Y25wTV91Uz1DOTI8WGpIejdbcnpYfmU5ZF5bXlpLbDJXdnVWci9zWnxnS0J0RFlLUiFEfCJAOUVwdFUyRHpWRH5Sd04/dDVHKSUra0BMIjRRT10pJVJYMF5eSyRCIypWeERwVDxeIWJlN3w9REFQMWdrMCZCTjJBKFhbWVUoL1JF'@;
put 'W1JkbXtTY3gsRyg/LyQ3WFFtfUMrU0QzPlFmSmciI3N6bys8KjozRWp9JU5JImQsKjExRzMkSG15cGtxTFN4I1tldF0zUEIjMn1RUlNfKzJCQ3hyfFFzV1tSXmF1dDc9QXtsL2NzP3pCdWxtR0U2QHt+UCFGYnJpZ3BpPmYqZldgbipGMFsoZzcwT2dlTUhIfHx3KVdOLkFPPnMkUTtMTDVDYjQ5'@;
put 'dEV2Y0p7KXR9IkRJfGxdYGVCcUBWd0VIeGdAb0c8NytOZSspeWEkT2NWOX1jKCM0eVQ7TE9RKDtDIVNnMWxLOHg2ZUljRGA8ZU9CJFB4dDore29Bcnt4QGlCcy9RV2AhLmo4e348N3xzMDQiXkMsK0huKU1HSHNdSiIqPjYlXixsIU44YGJbRCpyckhua1YlQkZlWncjRFhnNl1MS05QM2skKWo2'@;
put 'L3UqWT5sbCgzV0lxJiFvRnU5NEp6KkB5NFBvfnslUGZiQCt2clh7dXpdMiJvZHRNJkNmVUUlVkZxIzFMdldrQUNTVHQ7bStxQyg/d2NLSDN4Mk8oO1hoVnRNSWpCVUpQKkxKWnBHPkImN1I0JUZTJkgvbHs5ZXh7NyshK3l5OEhDITFfSihXYyw5KFN6WEMpWmg0O1EofSEmcW81S09HTGQ2eUop'@;
put 'ZSJDdF1HTGR2ai55TGcpI3E+c2pqfkZDd0c+bVhuNn0wLFRIQDdgeTl3SSpTaGpXSz1RdSIyYU1XalQmKEdTdjkrQzFkWkkwRmNuSkJDbW9DJk0oLDFrfis8djBhLkN0W1l4QzBiM0hpfCVMZH1jcnd8dntqXVFiI1NtNkVVVXF9MyhfXUxCXXxXVGQoaDhPUTRfa2BzVmo5WldtVmdoanZaeDMj'@;
put 'UDVVOWlwTip1cWJyfDcmNlNZRFVfQDlbKCZhKjFrW0JXXVIyKSN7cUoiTl1UOlQqYmBqWlFEa2t5JWtpIWlTIWc9M09lLmhUKnpJS14kQ3UrdU97eUBHc2VNP15OMkcwTHp6PG1Ka0djLm58WUBjM1F1cUB9UGNHXVteO1J0TVFZQUYvLH1OSTY0enJfMTRMYiQ7OGdFTU5hNz48RCMqIkNDNnI3'@;
put 'IjhGNzVKYWRISy5WdzZsUUt5X2g8XWl5diFXamx5PC5SeypYY2dYUnQrVjUleWskayU7WzhLNjVJV1o0NTVofWlXP19VZSlnRUZafCxEPWY+QHFHOG12UXVQXnNmLkF5dFFMaTFzQDsrQnZmZ2pWdiNmVkBER1BqdmEvJjxlfjJHJUhsVjoqQURkQmk7fTdvVV9sIXMmTGgmYzIhL05DPUtlSH1T'@;
put 'UHg8bk9+STVKdmFRVGtyKClVJjAsYmR0RU5oM3dyc2c1cm5SPntTdkQ7JihqUDshTkdEJCZ+WzM+QE1NU1FCK0AjQF03PjVZfl52SytsP3I1JU9lcHB9OmhsInZ8KW84fTF5QikhVzIhaWIlfVtWcFpMWFhYM2A8TXE7JXF+bSx2Mj1Jbks8PzsjdmBnW045cG54Si9aMWVEJTRjd3MjQDVWcmQs'@;
put 'RX5rNkAhOXIyJGdOPk0oJTI2RUBRTSxJSHtZJW1FWlY8W1tvJUBkeURdMj4+TVlQaD4wMDgjQTtGOCNYSj5AZUVSeWd3dWg1dmA4S1lMaFsmaVRWZHN5e28rPjRPKUVKUztjWys7R2h+OGBtamRvNlFzNWZFJnpfXnxFcV8iUSNmN2R4QVM5bjVCXl5yVX0pI2M3KDBjVFZhUl93bVdUSVhMay9b'@;
put 'Oi5YKjYiTXJ5YiZ6XkhZbncpJihdZkwvb3ZpUVE4dHFNeiMhVVEqbUhRTjUpNzE6Jm9kUnIzLGtxUGkuay5pQW5ERWBxU29eNDB1S2hsM2p9Ln41figzLHxsX1BWPVNwdEQ3JHc0dU1QNXg3WEReajdqZypMNyVuZV1bRDd+dDRHem8jWW9ialhic2ddaDxqaDBZViU1LnNwWHtgazc+emQ5bWBN'@;
put 'M11CYT1+TTNxM2FaSyhRU0ZSU1orKUBZMCQqJGhLXzQ+RltSWFl1a2wqX1FdeG5rZjBlSSRlJCVHNGV2OiZfLlE3VkV4NU9WL3Z5NnVJQVNaWCh8KXEwYjFJaDJ8WHBTVEheOTZBNlpVPkt9I3hqcGwjPWtwam5AZEwuQXJRZXtdVmI7JTVsdlcoNjFqSFpeLCoxMy5fTmVLOHlJVjVpa304KzN3'@;
put 'PG10Q040OEFpKHJOLkZkdytHRH1EQT8ldy95LHVkR195NEYlKWZRWSExeCRTXilMRihXdWRiY31RU3hJOzBpUEFWVHt5SWVvNHM3NCxQN11EUUIxKH16Omdta1hjJFdAKV82NGxtR0lUYW49N1MqZGptJnRVYDM2Ny5KMXdTMV1FRkk6e0VHY1kqZygmYjA7RyYkNnxrMjgiTn14LmhTTFJebVNf'@;
put 'ZHlIWyNeOSpfcVppMEAiKFQhbSxtLlt5OCpXKUprOUxRXTxuIi9ISUtKbilDakQmfUIsaT8zT0lQIUV6JiQuSl48VUF2YUBFTzlYXUE4JVdrZ2Ijb3Jve1c6SXVxJn1DMVFYOGQ7Nzl2K29acEZ7MShBSFpGT34sYzczYUI6KVZETH0vUWxFakVvYjIvJlckfjQiMHR+XkFZeDl6fjdDOCFXOiVD'@;
put 'VDBRPklRMnlNVTFOQ0laQDpZYExsISQ1SzVmWyhMSTo1UF92YWxMQG9MSHwuSylXRWp+dz5xWUYpOmcxJWQ8Qn0zcSNBUThoTT0uVjhdRnJNbzFwQ2NDQkJWY1Y3Ul9JekkrPEpuYWVMVTloPjZ9dyZfK0BIck1jfT4rbGAmZz1vI3QsVUlwcUM9d0s4WDB0azs1SWBQMGVfRFNMNz8lSSI2ajZz'@;
put 'UWVQJWFrWk5iV2BLc1clYTVSZGlab1llSShOK2VVMkQwalVZX05AMUk2cElDZ0QyYXpRI052OWliVF8pWHlOLz1vMm9yZldjZWZCS2FvNk9VdjhZKVt1KV8+bj8+LztLND8jNGFzXUhmNH1gVS4+a3J9WXpbaX48Mn4qbVFOdlc2KX5LTHtfcVFWT0AoUCRJLmYrb3AvZTpEZnp5LnUmUld8dX1r'@;
put 'MFhEZkgjVCxVd2Y0bzUkQyY6JiladCRHPVRiOyxoelVSaUVSclBxX2MrOExjVSo+TEJVT0J1NExGaDAjSzUqSiV3QkclNylmPHs4UHVIZX1WNyNfW1JadC8rOVRSemMlQDtSdCp5aUVyZUsmemMoYUl8JllhclgjKiM2VjV2VjoxbmR0SjttKSkiayRoX2J8UlcyQURBbXJwbkZZKEksRDdXZjRy'@;
put 'Xms2clR9d2A0QyhYaEsqTkk0bT8qIU4rfEc2RngoT0V2cUIqQFYoKkI4aGBdIX5gUS9pb19dIjcpNGNGRkw5NEk1KXN2bCFteGg2JTgyUERWcU03IzR1dUlQeVooVnsiRTRaVUN7SXspRnQ5NGAiQFFPWmNmJV1iUTkvUVlqNFpxRChIfiV9Vj55cWpwU1ddXl91PUVsRFJlMm51W2A9bHlzZ28x'@;
put 'eXYqbCY9JnlOYytuODpZS3BHKjw4QiF7L21uezcxUGclMVtJST0/JDpTbl9rIXdVNVlJUXFmaWwqeUJlOHdtKXtRIn4jS3lgJigyVV1ySUxucVh4Rk5IKmt0dDBtfW10cHNrMnlnOVJWVmVCZzFQRzglKXpeTWNdal5mcU5feDwmRXR0fFtuUHVqJnBLfXdZTHBaRFMwMi9hazQ9X1R0YHBJLGt6'@;
put 'Miw5TmNmKmFeZ354Omg6UC9Mal5yZFRsX2xkKmIlLHwzeH0qYDl2QEQqcENCPm48RUp5OFUrTSRHTV9YL2gsXVZ2e3R0RDt9bF05fnI0fEFKSUVQVXI0TSZKfCNQc3g/cU1ae15AVU5VSHxaJjhMSEVzIlc4WS95dmUxazdjKiExN2YiR01qd0xhREwsO2hAQE1BInhzSSp+MU0lRCxxSURoJnU1'@;
put 'UThmPSxob2p0TXxXa08lQkxra0t1dUFzPXJPNUUoW2ByMlVyZ0orQjdCcGBrO11tP2UuflYqTEUxRHBEcGprKCpxMy57QUIyfD1jUzw9M01xYHEsT0Y1Y0khN2M9QUk2UUN1Nlk7NyJLRWZkQFFvX1MrTV1ieX1lOjBHeSgzWzspfllqNTF5V2ozOmJre08xdldPYU0pTnBFNTgmMCIrcXBfbEB1'@;
put 'flBka2ZqIUNeQ217Izw2YSFnJCg0QD4yYylTfXdZNUZodUs6RzIsZXlYOlFwYz8pX2p5ezs3X0I6PnZIREkvOTY0c25tfCZzVGJmWSFvOjc6bFFDNW9wd1VpO1t8byJYVHN4bSRUaCF3Mnh3amtGSX5+OzB1IXJKdDB6ZnNgeEpDZ1UrYTt5RkNAMFF8d0FkYkVwTz0zKF9hd29xYWwhY3tLQElr'@;
put 'eWxdQm4pKXU8fVkkdUI2T25QcURCUTRbVWNvPksxP0x1aDh9TTtjTi97ZW4vfWxXP1gmK01uSyYkV3RudCY+LEYmLHF0dD9xQihLREJMKjRhZkp6UDskeTkxSlN2THM/R3VgazkyQUtoWi9Kdlt9KUQiLHZlIVN8KzJyJHM3WEJFQV08SW1bcDcoKl4zRDFpP2NzN3JmUGwqIX5HZX04KjloQlkl'@;
put 'SXYxXXUxIz1kV2RNWjdYWzhfVFkoaWNjMCtlKGpoRTA7bTBsOl1dKHkxezJRUVIsLk4jKDFuZXlOe0U0WTRfRDNBd2xjNj8/QlV7UmtkL0dZWWV4eXJNcl0rYmUyTXo2eCs7WV5bZ2h2dVY4RUA+ZiZeai9hfTp6dzBfRGlpNHAjJldjKVEkc2JbNkxYUGRbdGpZdTc3dUkrKF9adkZ0P2hpPmJJ'@;
put 'TWZrcn03UmYxZCk6KUpnIUo/JExCSmI1QjAoPipOR2skU2JFJHRIVWA5aTBsVXVBUHteVDtecTk9VklDbkZqdi9iPEk3VV5WeiJJS0BKd3ZFfi58XSEhLzp+KFZfV2VJXXRNQntVdmwweWFKRVYkWkloaTJBYWg9SjV6b20rckxbS1EveH1mSWRGdCs3QzVbQVN8XTkiS1d3bTJwZVgvNFd3LkhY'@;
put 'dTZIY2l6VHtWam1pdWk2cCIpSkY7RHBLZzBKL11fWWc1YCJRXXNfenZQTil9Tyk8Vi49PGhidiFPU1dMRDxKUSVLOHIyd34xVnd0X0B8PywuLz99eTpUM2lyYE1mbl5YcWhhXWEoY10wWFQxQChqQ0g7c1oxRkw+dEZ3YXRqVz1AZyJpWlE5fFhDQDNwVCtlK2JIe0VlK1YiKmRQRkNvcFJPaVBv'@;
put 'SDFDQHlJfXhNSz5BL3lFaGlDZUQueWNibW97NHdfRnFmbSR1VXxrNk8zK3VeWE5PKzh5dEJrNFlafXxuMV0jOTxbcW1OXWNVIUxyM2UoTkxoTWRZLHEwYjhoPzEoaUtHTTBfMnRkSEZ6MiRfNldke3h8Uy94Myg6NGZzI0krcXk4M01dW15EflM9NSJWX0lZZkFTITp3PSxwSiNmdHBIRV1eZDp0'@;
put 'O3crJWQ1W319OTViMCpvRWA3dXpgMFF+cVRMLkAwVDZZIlU9TXw0fFg0K30/O1IkTEhmSyhCYyZyJVUlcCM4RFtmW1BqPl5JQFMxdXRqWmNZZHwpdFc2LDBkcm9sOllTTkdENXZPfUssRUxFJUFbL2RYRTkxej5XOiRvaCREWyIlezZYMmUvTHYhT203aTBMMkBQVThtRi5AMDxzKHJLW35YeS88'@;
put 'JCVEdE1jbGNbXm88U0YpIztxc3NtSjJmaGt7fW9obD9NTTZuaC58S0tVcnphQWQ8UCM9ek5NWUpHc2FdaCZCbCo9TzFqdT10fi4yKn1vPHkxQX5zcUJRcSo2c2dQeHxsfSp7LD95XklfIy9FfmI0c1tadnNkY1JxazksWDNPWz80biw9VTJodHZWXmFyJENbQzphREJ8bXBtNVZvRV0+VG97QnRk'@;
put 'ZHRDK0tILz1aUikyNWEsKW8yUyxgVStrIlslbFowIXBnLElCbzQ+Z0YmZnpZUnEsYV19O1I/KnZyVEVDclk4KXp8VntIeXA1blB1ZUV0JTdHeloyWlFaOTImeEUvcndbfU85cWx4Ul0qdGpDZT1lJVoxSCo7PWBDalApWm9ESXNZfmt7ZU8/Uz8wTThSeU1lRU5HY24iO00+QyRhQildJGVLeDhN'@;
put 'XlBIMHhlOk9TcEBUTVtacWpGTF9lbkp6b0s6OyM4N35USmosLE5nbmguen53all6T0EiZztNZTEvbzZKOldVYzE3bkwrcSJMcE0mOnRdNmU5fms/LDVQTENTLEB4MUYmcEx0dHZ8WnUlTEkpM3A9JioxRytfSU5bc3FEbVZgQ0tqL34yN0wjITYvZ2BkKld1O01tV0dAZzE3cmpzIz5eYXxEI0Ji'@;
put 'bjV+TWNDI1R5ODBTPlghV0JgbmRaYWhVZWV+RGk7ZWIsZSElcTxKZH53OnxCeXFSPWc0XUpbQHxBS3tZUFUzfEcufXl+JVVTYTg1Pn1qYnRhU30kSEMmfnw+JV5lSCssKCZhT2ohXSlhZ1d5U0BVWj4lQWdGdUd0V19PW0c1KyNNPT8/Lm4rPjE6X2tCKXBUdEQ4Qy5hWE07JkchM1NvbXhoR2Vp'@;
put 'TVc5KT8jJnFDKC97T1NvTmxLdlBTQFU9eT08dl1EdDp2Q3tudHR+KyViWyQ7LGhiZ3tPZy9aSk9kZyVvOnxSWSpXWVRJJWVBcV1JcF5FU10lIWlGeFowRV1ueFE/OjpTKmYjRllDdDxfcyxqT11heH1afSheb11FXTNtS1VVKXV2NyFRRkxkfWM6fG4qW0MkWFoyRCYlIyNkUzkkZXBnakM7NDNj'@;
put 'Vy89Kk08XW93dXlbNzNEK3BMTy92d1tPY0Zfa3MpaGZsZDp8PlJhcFtGUE0rQyEuckNhXWY4QE0sKU5Wflp5TnRbckBQand3IV9TIWhITnorZGY5K0tIck1COjBHND5xfkNvMD8vJDNpTzlzImJWU31iR011Z1RsPF4xLylMdDZ9UHk+eDUmI20qbyI4bHBvWmM7d21YYzJmblJNYDZiNW5oezk5'@;
put 'PyhRSjp0IXlJPD4qaVlmUG4lcHlHK1AqfXQxWlZqJGNxcW8vX2EmX0VYT2c+Ojd9NHl4Im8idSVBfmJTWVQ9OkZ+O3xYOE5LL0c1Wz0rdTxrRWFHNkJrTy5qcH48PlU5YlRmckg4ZXRmMnswIWVoNV9fbUBFInJVcEZLM3siYG9DNyRzJnJ5QSJ8PUpENk55MlBeTlFKcVkuV2psaW9GPnowe0dL'@;
put 'M0leaVMsODxhVmEmMj9HcEdzclFIOypQQSRXM2pOP2lZMEJWWEJRUCYsTVVjI287S3dJLF0xd3tKM2w9aDBBcjJkdjhFaUdaJWMkfjs2JjFrS1hCSnJuL3smI08wantsQCtFNEIuI3ksc285VXAmJTwrV3I3RGk6amkzNmVVfmJPcFRAbz82fDQmTUtSemBzJE9iUkIyVjBAIS5kXTBLZF52MW0y'@;
put 'I1lKRzZCey9VKittbFV5XkZCMy8scyY3JXFscCVbJlNfSyM5OVI9OzZbW1MhXylxXzkzKW0hV25EbEtIVlNvbTJwdyhNQzdIM0F7e2JDW1UrWTpUaT5zOGBHMXhYVkg8TE80cCZGJCpoZioyJkJXOi5xaWwmUE1TLkdiPSZmaCxFKjJ4LlNFQU5HQiRKSG5EWjkodk9INlkwLkZ4YnZPM0BnMDZv'@;
put 'Mi4oQ3l0Nz8wSklwKzx5cnVTXTdGOmAlY29ZKEFRQmkzPFlrJCpCPE5UYXJ7em0mPnM9RVdVNV1LeCglNy9Ic1doZE9eW00pKH5dYFFbdU9lfn5FPHguVkdpNnJCUT9WXSpabUZkR291RGxuMldWWig8VHluX3w7W2w5bFhbdl19cCQ2O3EmJTtadk88WndxZEd0YENxZj1BflAzN29IaEZSPj42'@;
put 'OV1sOV46XUlDbXBFY2NxPStQXz9telVZaWVFSEhUWSRMbiZQMUwoT0lvJkcoRU4kMUxbZ0hGe3k6aU9mXiEiLDM9JkVObD99TikmPVRNYVBkSUYycmo/WHBkfDgiUyw/e2o/RD0qSnBkMmo9IyIkekVTTn1sJSNFaEZdVXBPJGJ9b0ZiTEoiNmRVPUtxTipMaFhfOEFOSzdBTktoYTpzenI8IyVl'@;
put 'dVEqVz5nKTl5emIlOW1dSz0iKSk6PXhMOCZ+MzJ+aVV7OzAuNTZHSSk2bDosQyNgdVJuKVkuZFVIKVleNnY2YWA7KmA4N2ZlRk1QUz9pX1ssKktVdU0sVSIwTFlhZ1YsZT5benNdOGdtKShbbGRfTUBhQ149X1lLYVo6LHZ5UHU6eGMlMWZ9Y1BkTWFRcmtmMWFtSkVJJUU3NT4hUiw3K0goTVZs'@;
put 'ZF46MVdhIjIhSTxueXA5NHV6I0I9cDZeZSVQLDBvLGNpKnApdzojcCx4P1J6Yyl0ZlVHUH1fOT07IUVncF5GMnNKOG5ePCZEaHZlWzcweVQyVVtkRiEsTnFVO2FzMikwQFkwM28uJl4qa084em9AZGI+MGA9QChmM28hKF9pRT0mKHAsWDdebj9LPHhbUDM2ZmxtbVdyZnxCKCJmNjkpLzsscTtt'@;
put 'PDMxKzJzdksoUlFuez59RUhuS3ZNKl0xPmg4eyRdb0U+P3p9TlRsQD9dLEJSLHJ5IXhmaF9qYzsmSVYhVTFefjh6OEZrKFhSWDFQS2RFMzguZz5UQDttQm89UFNLRXQxaz9qOSQsME9oZEdJfGtSeGBVXVspclRfckNAaiE5KXAycGY5a0ZPdjt7K1ZsOWp9YXhsSUFxckZbJDxOaWRyYik2Q08j'@;
put 'I3xSKSxacFtIY1s6MmpkdmRUaDIuZFU+P314e2IvXkt7NWFiPU05VnVLbyk4Y2B4IU18dHB4KXM8bjwibllmT19sOUdwJTsrfjNWUig3YTorZitfNFVJVjxNIUM8eWtteUxGWHN6IUNTd2tyeG8seHs/c3kjPWwwaHxZfiFQLDRvUixbXV9TbHZuMmNfe2F2RD1ZX0YsT3hbOVVDWmhJZkNKMm5s'@;
put 'XiopRjFKUXZHQixtaTNfaTBfWzlqZkkuJXJEbSJsKWt+PVVkWX1SLCZ9JkpSOix5LHMlIm1gYXorK3JVej4+bEY2IjVLPiVqW3lAMGs3ZDxnaUxBTyN2MCglXWdMPE1scVR2W3s/RypXaWxqZyZocT9mK0xfZiU6bHgkcXp5ZlJuPG81RjFFbjNIJEI6QkhNd35KTHV7L1F+NjRKIj9wcmAjd1RO'@;
put 'ZmZoM1VaRTtAWCZbRTpJcj55cmR0LFgyKlFoK0t9eSRJYzUzeyplQTZpTFhJc3taPlpFQDJdJGckTnA9UUk1Wj9AKHE4WTM1cGo2UyUrc1Z7IjtGL2xkYDZFSmtCZkFjZDQmXVUpUFd+e0MucywuI0NyTE5+bElZYUxacGdLXWtgfj9AUjwqPDw+SC9yQ2JAJENie0lMUlJ7eHRgJVIjbkI6TGZE'@;
put 'ZzBMOj1eMlclLCliPEs8WkFUITdubCJBQjJGd1g6aWFHbmM2dntMPjJdeU9pa2NWX3ouJTYrMVVOZjRuTm9UO1EreENmNiNxQiFYJkV2bGlMWH1oXmYxUmh7Mjw8Ljk2SkBiKylvOG9uYH5aVkk2YylsQjBtUiFZVyt5ST9nVFRDazhuJTA6Si47c21qYi4laWFtTDAwalh7blVDcmwwMHJsTXMk'@;
put 'UWUwYz5CdVFWfD4oX3VTZm1KYmd1UXswbFgrX0ZIQzZJd1F3d3FjcWVwcT9jIiJkZjFgcWN7SzUpNlc7VnBaVUFfcSJdTWkjdl0oYXw9dmJIPVgucjpDKT9zRDppK3lfcTNyJXcyQGF+UXtBJV5vXzZxaTZjd1dCWjlKWHZIekhjOUpYdkh6azNAVGlidyFUWSJCL3pwdXBUIik6I2pdTCRRMz1U'@;
put 'PzppREVaIlswX0EpPCRfKTIyPmVmYiNOVyFta2NjZF5vWmh6XTooelMxX1QuX2x8dVp+OllGenImWmRkPVdscEpacCpPd081KXBBaVgqMGNKL1dUIUxyZlBLOmp8fSRoenA0TFpjL1dzKEtEYU15M1IyWyE1KEpvMnZjYjNRZFA1UVdUZUx1V3poRVBxQ0VQczNWdGgrLjs+Y0l1LHJYTCxAZjpx'@;
put 'NllMdlc+fTpNNDo+Y0Q5T0d7VVVQQ2FzR3AyMVAoRF91YStxcD9SeSEoNCRQVks4UUtaKTBhRzBBMmlLWERBT3QzUTFCP2NTTilIJT5sPnEqblUzcX4+fWhuUXRMclg8WEIpYn5SKlVwMHVxfWgmRn46V118TiZZb0loM1VIS3NARGl2UTguQi40YkNoJipHL3YrblhfIWI7fmVTRlB4KDdtTX07'@;
put 'PHVZRWtIcSkzZi5adGZBMlZOQENEVVhrIiF2dkpIOkxsamk8PVheai80ZnxRdztSPH1gOipSNDB0TjxSVEx1Q2EhZkUmfjhrQElSWHYzN0MwOlo/NVJjPmI0V2BXfXxTYHpfV0hKRylsZWRXfU0hIUFgZUxsdTdsUEh3MzNmQ1ZDTF8hSkoydyRHJX07STpXNk0yWGRfNGRnV2tVd1Q8LnxfTWBx'@;
put 'd1ZWQFRZKDA/THVRTHZ7ISM5MjY+Oj59YEUlOltlMnV7SkYlazdYPyQoeVp2NygyTTJYfXojfXd9ZUw4NUZNQ3pbb2VUXktgYXhwc0l3PkEqVERWQklzWTA6NlUhW2VOdXQqUipbSDteJEBIK1g6eWBwM3p3PnAzQDVXSjJbK29RdktqVjlvUXNIYHArUnl+RUpFYjFaIXhOJThgLFNAS0JZYjMm'@;
put 'ZHttOGFFWmVNO2llLHpXKG5FT3ZpaDhwbWArVnZPMHhJd3ghYzxWTFNTJWpfZz1JQ21uWy8uL0ZxVCgpTWZgUipvWjlNUmNoYEEzcS5DckA8WGY/R1pXQD4uN1BNcFlNNFJjT09vakU5X0grSXxFQEBPKSVWJX5nMHArejB6PXFEaUhORChLc2FWNnN1ZTZ1cHB3T3RFb1RJbUY2aE9TR0JMcEgr'@;
put 'e0ticEV4e2klKSQxfHttQj06TkVoa0dKbWlmNlImV2lgM2JOa0U8SVNkX3dmPjFOSFRNajgwXytRYmlrMWAvTVgvN2gjWnJFeWprPjBoJjRHK1EqTWgwQng0Ym8zanpJZ0c6cHczb140VDhMWnl2eCEydj9vcloxe3A6JjVadXg3SiJkWzhvQWdIWDB7b09WM0BKb0wuJWs3bXF1JXQ5ImhxYEZW'@;
put 'Ni49QEY1XXpDcF5iRWEpQWs0WnVKRGh1fDVDak9eKFheZk5efGJlVUFvbnhOUXo1I1gvYlNOMWc1LlQmNCE5Lnc3RURxVXBFbXohJC5oZS5NU2gwbmRUeGhPZEBnPkwlW2t1XittJXlWcXchPzZYdW9dYUJ6VSQmXz9iWC5OaCxGWnxDM0s9USxAKHE1MCtwI1BeLEpKeGsoaj9SN3pnIXN9THBf'@;
put 'VX17ejg+fVg6QFJlWy5zL3BjKUMsSmxbaFJmUD0oQGtqSFltVUJTfXhiWFZ7OWpyNWsvMFE0USw8TW4wYV1QKUs2d1pLfUE8RWNpWEY2d0xeeDRtcTh0fSF1PiJWXndnKkRYRF1KcDJjTyRoMjRvVWVWaHVPaDBUWnQkdjg5I3I1cFJsJkQ9WGVteD1AI3g5eXs/UGpNMmxiNyJKPWNZTEluSFUq'@;
put 'aUlESmJpTlJsRiV6WlVhKTdKSHpub21TI1lSMklbKHxlSmRlQis2JjZrYFthQlBqVHZFOlRpWiYhfXkwKTRNWSxkVjxfP2srbUNVPURhJipuMV9sNV4+OEJaN0xCQzBOL0VeVWtFanpbQD9dKWEzRngrOjtWKkQ7eWJCJHBPbXJ7el1kSyRQITImPFZVIkxpM1FJdn4paVJoW1Q0Jml4YFkpZXM/'@;
put 'cFshJmQoXy9yN0cuJn1OSChxP1tIPXFLJT8uaVp5M3p7PUA/RHdDPSk6fU9gZ35iQzxdSUJAXzdTaElBQ2YlfSF3PmkveXJmPl5yYiM7MShtbVQhSUJ0bD53eCNYUTNIUSJlYT4hfi9scnpfZnBhfExYMDJfVCJ1L2d6WHBBIUdxIlF9cCZ6JHxsVElfK0BJXmFnSlQrOjEjaDIxU35eZWQ9dm9d'@;
put 'ZmEsaGJFb2NEKU1ROVZ5KXhpMUVXKT5PREd0OEhpVEJgMF8zOShOZTBILiRKSlh1MWJbQ19GeT9BZzJdYyVpdHppaCsvS0JhXlguK1l7Ql1+a2k8VSxBNm1FWFhkd3xYJTc2LFhHQDxUVEIkcHU2KXJ8V1J2XiF9SDBPY3UxYklVYGBfTjM9W3dFdFBIalU8TyZrS0EyUCY1ZWxUMWdtcER4UltG'@;
put 'Ljw7OE8ldV5dN3YkP1swYWlPUm88NnVfY0xzNENlTCNBTl08ZDM5XV47WFVtci82dHlIN0l0VTVFIndgZmNOJVNSYm44ZzdwT2FyeThPUCQja2xyOVNSO2NxZjFPTDhxW3ouQVRJX0x2dzlZPmRqcHdOOFN5YThEQDp9bT5XcDJCT013YWBneyF0SkJmXnZGJHk7XjQuJnFvKzBqWi5oPVUkdj4q'@;
put 'QSkjWyJ8cEZ2Y0NRWXZ1KVZyLj5HZ2Y6fCtATmdIWDMhRGh6SVR9YyhVOGJ8ODtxN0EyYH5UQ1Y7cCgsQ0I3XmRaZWxFYkZiVns8R1lXWEd+OTB+c0ErKk5adHs/bSQsZFB7dW0pIVJuUHhuOWAkTU40Rm5rPlRJY3U+Sy9edjlJXzN6fV1nKmE8PCN0ezF7U3kwNzBwREw0YH1dKz0jUEJZIitC'@;
put 'aDd8SGQ1RCgmPmouKCsrYDt5LyxNUTNhfD53ZFsjdnw/eGNMUFNXVD83IXxpW2hNc2dNVCk8bkM8ekh3RWpYIXkuYiJDd1hHNC5iSmosRHlSMypKZyxeYF9XcX1MLF5fblVqI0RwcmVxKEtXWGVHOUJjUmVTT0NOdWNWIy9bMjBYbXQlSV5RLkl5KUt0OXJjZkp2T1IiKXx6ST57T1QzOHdJWCQh'@;
put 'eD0zKX5qd3U+S35lSmo2Q3lSdVlqRTA0I1k7W3l0fHFWVmp5Jk40WDgyMlI1OTdQdHRJd0hSc3VoQSskclBiJDtIcVJaZVZKcXVrUk1WRGFlR1h2bWZeOVlJayEyUkJKMUJoIW5POEEmRU5NVUAjLjhIYnZbX3s5QHc7REBCJjElVCtPWm8hKjBFaio5XyhURUVjWW89c2N8Qm0rcmY5MzssX3lf'@;
put 'M2Ysez40a0xINikqUl41enwxRS9RUStCRzdCX2h3bi5PX3U5TFl8PFBWJkN5dSk8JkE2OH1bZDRJOV9GYDZNMzhUKHBLMjxSIWVqZkRKTj5qX0g8dU9xM1QpVDB8aF8kRDRYOXI/SChsaG9Ob0RHXlV2M25kYm1vcTlNJX4/ajB8WF0yR29ZOXJuWD9gZSsvRjQpYj4oW3k+KCkxalJqNyxkOS5i'@;
put 'JWs1KXgrVUY8bCNqdDB6Jl1LNCkiSF5pTnw/KHZeWjYmS00kdGM3bEM2c1U4UktEVFhGTFNkYnYoU2VhWywjNVNXbEpReiQ9cEZUKGF8Qm5wPnp8NSkka1EmZXQ7RmtrfDNiJnw7P31uKi59KVlLLFVGViVeIm5DLzA9bHc4V2VNMElpWGMySltYNHUqd21EUStvbi99QXM/RGl8O0guXj8mYXxt'@;
put 'PkoraD4sK3xJS1lwNz83TXIydU8qPndId1JAMTpNWERXPCxnY3Ihe09ESDQ+c2A6RDQ+MmZ8ZDJDenlbRy9MPzZ3MEgoTk99dy8oU2BrcW0/Y1R5RWFYPWpkSnxEPF9kP1d0NUY+LCxeRj43cDQhOUo2dW4hKFRrM1BEOStdZEtsN2pLKyRJPWldMnd0KGpuWEx+S3omYmYqO255TWUhVlBiWXVt'@;
put 'QmRwcjEqM0NTTChKdV5lcGpeRzFucj9sT0Q3KTt5ellZRCNvcGRMTldZPEtvRF5peHlhanRFTmlJdnIyblJRLz5sbCsrZGBaUTYvYjNoKypBKChIPlldVXhMMjY/e31CZms8VzlZa3hIMVd9PDA+azxia3MsOzB7aDhmVHN3UltidEhvO3RfdFkxRXl7YmY0N3VARzVtV1oqKFh3bj8sVWtxeVAl'@;
put 'aEBFKiM2YiIwQG0jWVc6Oj9EIWNkbW83Ll5kekN1N3VqU3JGOVtdNE5BSzsxbD4vbWYmWj5KaWRfeGx+LCtxSjJPUTUwPWpyZTRTJkBtSTQ1b3BDP0IzMmM7cDFpPV9kISMhXmp+VX1tbnNwSysqXjNNczZWXjNwKl9nYHRVKW84WDJ6UjIzWlRrR3I7cXpWfjc2fCV8SVl1M11+YkFYcWVSPjZ9'@;
put 'MyQmX2RMI01hc0s8dyxlfWYzI3F3WmZeJSV5e1RSO2ZPZ0hYaUkoKkZtQGEyfT5jNClJUV4vYn1jQDU0Ny9sfSNHc2pIKi8jTVFwZClzQ2g8VX1xVldjQzRre0RGeTldalhWemp4NkpdN3svVUR5LjFaYzY8eGBOJHpEeGVSPH11QlF7MGt6T3BlMCYmOE4xMnNIaEgxRnthMj5hOHh0U2BhN0Vi'@;
put 'Mj5hPyFXaGoqMDA+Z285SFJDP3tbPGZwRHlbbSZ8MzMzc3p+cUVtKSo5VkJYITpmJXxlLjcqe35QRHNYJihpTzpqPjMsZHUqME14L21nZWVebn4/akM/S3NnSDRhOmpQU2RlU0gwaDQ4UCFPLDVTRHlVZ3VAMzlNQGUpQC9MSyJbO0ZLb0h5elRddlsyRFpNP205Jjs9NG1db098OXtLQzphJDkw'@;
put 'NlJ8XV9GLGFTXUUuTksvZ1lVWGQvcF4zQGh2bzEucHcyRkI+dF5rYk5dTERpVnlVITFGX14sP1pAO3wrMG0+Umw4bmtEYzliQFVWZn44YnQoL05nJVBwZXdoUktbNl5uJTd8Xio7LD1eYWhhMmZsak9KZVVDMlVlMSZkUGlYRVo4aTYiMkgiKCx0TU1SYXQkbyFYMzo3ImVdZk1hdntBLCYwcmZW'@;
put 'SiV7LzxkYjk2Mmw8cGZpOW5YUkRMNClQYCRBYzUxKH47WkYzRHApcm59NUBTYUUxSjt7bkZnWl97bGkiL1BxZUAraElyMSU8Tm9FOSZTXjUlWyRnJlk2UV9ucGIxQy9BdS4va2UiVXRvYDVRNix9Wmxidj5NO3paVXxafWdiV1ZmbU8iNTV1JSFyMypbJW9eTU03VjZpZSNdPipWM35yWD1HOjIv'@;
put 'KSg/bC4rWV9WZlc6OW0uZFZmOG9tJHUvZyFGYVk7RGpMa1o7QTtlS043RShOU2tCVjUqTEBVJi5ye156b3gxaChwcTwyOWF+M09HKFspM05Ub0pWQ0NXcmFlWktFLmRVYmsxMkFMVypWJjMrfENkRTJIbUtPUlMjbjcvR2FSbzJQcEJqaHhbL2kqMFpyVDpGSEc+ZDkqYHFUSH1jOFFWYHM2fE9r'@;
put 'UFBoKy99KDAvNGoxa3YoQF84cV4raWshcn47VD1Ndj4lWk1bL1RdOyhMRExNdz9sSE5SMi9uUVRpRF97fHguW1Z0djRiWikleF8zOjYjflA9LCtkS1I2Vjt1bXdJNlJgRFlBSkh1bHA5eDBOYiRwVVhdQ0F6Vk5PJFNCJE9EaGNeQmtZa1NGRjZXLHRsXUM0TDBEWyUzUW8hQztUaW9GUEduK115'@;
put 'aWEzS0IsaiQ0WzMzSCo6RWsxSUY0KU9xVndyJE8jMmpPLHRUTUFAITZDNj1QNlJYX0pbWyZDfD08Rm8hY34sKy9aPEJxUEtQXyUiOUJKZ3k9XnM5Xzt+MFcwIyp5eUNvJWM+d00pXyxOYk1SXVVRRyhQIl0zQzxsQndGMl5rSXtaaWJOOzJ6RHlpRHg1MFtuUG1lfjwsb0tWK1k+dz9QWUJ9ayRu'@;
put 'VUA3WyFGWSx4SiV1Ly9weTxdXW54aTY3cjYudnU2KVhsJkhCQGM3PXd4U2pyQTshZmlhZzVmfnxwc1swNj9ANklKLDJGYFR3VD1zU2wvPVdUP1tCRCJ6Z0tsQ2htLF5ZW254TDx3YWxyWGVOMWxyQG14KzJMN3V8TS5DQjQreF5VWE1mV0AhMSxmKT8iO2NoYiVhPVV2P2o9dj9wUzV9X0hARX1v'@;
put 'MFFjJT9nTXckb09xbEIuVVV3UixsPU9FUixdQEwlOTVZIXVpcUJjK2M5ZWphbEVDfTZsdDl9PlA9Y2FWOjhyRDgvTm9NTSQ0IzVaWk5hT2F9P28jX0l8V1lhQkR+fU1zPHpgRV5ESCtdXUhUbVBMTCxaQFc7VixDPUhldlY5cDc1NllETHE9M1o8azN3UDRwN2FANld5IzIkSXhQXVlda1Z8Q1R7'@;
put 'WTRNdF4jT3tZVjlHVjpsTj1LdExgcVU6TiI1XnpWPW9fa1oqR1R9azk8eWhDKEAuLGRXNDNGbiVbMTNKeGMmL2NdTjpwTlRFdjp9O3lEeEFyU3h3K1YmJFQ+Q0JnY0BTYkxkZys8QDkqfjFiLGQrSXp5UFlWc3RxSX52KHlzRy9IXz1YeWpLd1IuJnxeU3lYeWJIczZAJHE6YmNkbWw/ekRtZnYy'@;
put 'Z1l8Njdjc2V9NyF9ajFZME4hQj8kTjl5Nn50SkdyS2phUlR5e1d6ezEyfW0kLnk9I0d0cTYoTGg3eDpwZkdYfXN4IzhZZnVOWkwsfGhOclJveE1zSkVCPUZta0siX3BGK0BZMC9lfCUpVlQ4OXhATnslWipDazVZc3xnTTxPKCpZVHZETVlYaWZ5M2RuTyJsRntReTxyPUY4dSMsQFBKXT5zbXlH'@;
put 'W0g5WDxsJG1kcCRbc1Y9QE8jTjNCdUo6bmt3RFc+dzdfNkAsPHBhP0RVPXV9dXgjfEJIdTl3IUAzbzRWQDxONi5OME9EfDwzelN1bkhWVShfZD9HSChMTWhbb01teT4lc3BGdHEpOEltVVIkPDl6ZSQ2RVlMdkg8VyZ2dU9sTyVAO1tqN3BCJENyL1IuVFI7IlgmVEQxOUg8KX5gbj5neXp7ZFlh'@;
put 'ejhYdlt5Mi5gJnZqbS9Vezs1UiVRd3B5OkgkTl0kYWxLcUR1VHl9anh3fnR7ITZ1ak1uVTlNYX1wR292WiM8JEhCPyI1PzR2T3JjVDs2fDV0XUlCNT80dnliYnoyW1VRQDQwSU9PPm8vYiJ8Ii96JkIkRiZ+TDcpZHp5PVJORXohIz1kQkgjNyg9bVIjKilNWUdtR1EzJWVxfUg1N29jRCZWb2hb'@;
put 'VXg/MEpmTVFDSzBleCRPZG9Mezpkfm0pKGQ+RV1UOGU4YjlKenI4KnxGeml9QV1eTyVJM18pMnJ7WT4lM31dejUyaHRBXyxkeys/S0lWZl1yak8uc3pTQHF1M3JYMSl0P28sc0dVY3Ame0lNJH5CN2trI0FnNlNBSCNsa09aSmRPKFB7YUEve2ZHdmUyUDF5fitrQUVmdj9dRyliJG88WzBXaE1h'@;
put 'Xz17JElweDFKe0hUWyooKV4jSzg+WT56PHspS2xhKixGLmViIXA1VC5yRz5ELkhdVyR5WTprLmxsIz0+bz8+WT56dyZAbi98TnZoJjJqW21HLFoybl1vXV11IV9WRH41R2VhVlhndWB9bTFnZ0gzTlJyZjB2eGhUa148JHNobi4+SD1GMElxVWh5fllFNDImYn02RGlTZ3VgdHxTW1FFM190ZiEu'@;
put 'bHJ3c1VtRGd3Zkg4d1c5MXxWVE1RaVNfXUtEYF0xVGlOZzw4ViI6V31fVylVfFpQLno2MHhoZnw7Yj04JVN7fEB8NiM4WF1IS1gmQFB2I2c4Q2ddKTVSI28oYnNSfm05LChaSkQvWixba0BpRz5kTD5bdzt7RGRadn4zNkltNWdoIz9BTDljOU5YeTA+aHRaMC5SdzZ2TVdicDB7b0ZudzJsZExs'@;
put 'UHtLa05eWVVhRWJZIXdXOC4rTTIlT0cpb1gpTkswKC9ROnNYeWEyV3w3fU97WUAxR21oMFhdbXEqSzVjSFA8c2piRHtfdE9YSXZiZVs+ZCM3UDlfNlVVWGpqbihRal5CP1dLczs4MTN1Q1dOSiJdUzYzU2RJZVMkbDpyIW9sZEo3bEsuTG5BOUNeLiJkTV8/JH1+e1E2ell0YCZZWkVeeWhHaEZ2'@;
put 'RFRdOjhDS3g+RTJJeU9DOn1VbHFzU3NFL1NvO3V4VXJPNjVZMFhoejZNZlBnNzMzLmJJWV0meSZQPC5aS1FTfSVMYCtIIytsamNdYWJKcUkoJjs/Z25RQlh2P2J8YEpfJCF2WHU4ciVdWWZpcWNfbFIoTkRxcj1zLH5MMjNsUlM3cVJkcjFZS3cxJlQ1PSRDO19nd3hVc0EkKEdedW4mWi8heXFA'@;
put 'TXwhU2pIOiomT3ZGRlN8bXJ5JHw8MHAjdnBnPiJrZm17MVUodSpYYlZiSCghcW9EbTZQPEl6ZCN4V3BnKEsuIVQlOl5tJi9tSlRuYVc6bm9rL1VFLHJqLEFSR1Z8SjkxKU5aUVBZXl9USlkwLiFicjx2VFpoO08xQVJJdlV6TVdrQi8ueSZraT1sN1UjYmNReXJvPXZPXzJzPStZeVN3U3ZNKzkh'@;
put 'YzRLazsqc2lVOHMhTnd+NCZsXTQpZnxmXSNFNW1eUm59WW5hPUdRbXIiW1R1K1o3V05SfmMsOTxrZiVKezg5ejhNLjMpZ30+VHBPOkAmd1lTZks7XyxUbW1AdSpXezZbU31RPFZVVmRWfSl4d316fSYpNClXYmRkM19dciVCa0ohYCRCbUlwcyFVdHsmL055NkZ+QEBfMW9IU1VAbDw2PDZPZlte'@;
put 'azpWV2NwTz8qZm5wanlDQkhPfVFmfUVqOmthY1ljW2laeWMmcGFzZlBbMldpYXpdb10zYSVYPFlGW2ghZTk5cURkdC9yXiE/eSRsaCh6Xko5MSFqUTk8XVQlSDpbQGxTVFplWGMpNnR0RVpgUEtWZktRS283YDU8bmxpN2IpSnJdUj1tZWMxenhmKUsxTmIhNyV7eF5SNHtucGpPTWRIXWl9Wlpk'@;
put 'aGNyITxibTVJRWE+eDk/X1A1e0ppKjttPkUsMTZvXVhafjZvXWRIfD98IWJvfU5FPHFTNW1JT0Y9Zj48PCNxSSxZQzolNzZZQkhITGovLEV7KWdTZylhTDkqTnQxU34lUHdSXy50ZjtUNXtuYHpOcClILypeZVghXTx8LE1qOTJiMElnJXopRFF4YVFobCQ4OVowNnoqSmo5MjhIM2ZqKmcsVkhf'@;
put 'RUk1R1cjZU9QOjA8NlZ3Mj87JlY4KkhsWEkkPCNzVz19XTgmQjI7NnFVJXYxKWEhTUhOOXNPWTVpbCtyW1soL0E0ZXQwcmN+QEB9JlFnQX1TUU14UWh7L352blNueG9RSncrJTNMR2pxWmYhVVpnUlVHfnBaeyY5UEdMRW54KGkhSWxNYFRTLm4qQHkjfSU3dTZYbykiVTxlMVVoRURWIUYubiNO'@;
put 'Z3NALD8qWHY9Onl0OTpOLlE4QE9sZ25UcyZWOmRmbXNtMHNab1MySW51TE5mbmQyPkk0QVJnWz10d2pWZl19LyUjSiVffTY4dkshcHVQZjYraTA5JiY8fmQidk5MVjhUbilEc3tdQ31QK31XPSNyNjVyZzFeOUhCenlpdFU+ZTRyYk9QbXwqYCFaJlFne2JtP0NIbXJ9WDp7bmdkOHkhWndeJkcl'@;
put 'PChOdWJgWDJjMmpYVHIpRlY/Vz9RM285WCtwPWJtMUR3cj5EfDJYSXNJTmBhWmdMYHI3LChFR1pgMVY/JEV3Pnw4Typ8UllheG1teVdRU0lnb2lWelMyRyQzXmBYOkI9Nkg4djBoaCEhPGUwcD0lci4wUHU0SDB3dHskKCZ3UDl2eiZ2R1AyY0dSOD9mWSU8Ij82X0N7T0hSZ1tjNGIrfkF2O2Q3'@;
put 'MzB7c2MzWWVvOmEycTQvcHlaZG8+T3pkTmkwJT9mWT9kVEg4LmBJMmhqYmpiVG9sMCYwXlJRYktja3FeXyl4NEdEVU1hRUNsTklHSCFBR1Z9cUc9MypJYUVvcCYlTDtKXmdoQjU/OW5RaVZffXZHbyhNWlpAa2BvUE9CJklXTkdvWTBJRTMxZ1lZKWVdLyZBWVFZOHZaPHlOSzZLLDh7NGpnMGVE'@;
put 'L18lW2t0LEhxKiRAU2pGWExXX3E0RGZ1diEyN11ocWBReEljJSMzOm5fRm4kb2chQGU0Z0gsSiF5ZCouSHwlbzo/I0s8T1NMRiFBP0V2ImdsMWFHRnc0OTpJPFohT2tnLiMwMFhPMD1tUDBtZTg6bFRAbmQwOShzaSVsKUxfIWhKK2F8YDkyUnpMIjF6cCxSQ1B3aUsseFh2ZVRibCoiPkUsSFtq'@;
put 'ZlVvcGsiKzghTzgvWT8hfFBoJSRmZmFlQGAiRU5kLkFYR0JoMC9fPW4hYEtXSCUiRjFxQjlEUGd4KzFlTzBqNGR7OkIkTU9KKDxrSWF9WyM7d0ldb2tnUH06R3tKQGFKVHBxIkpHUTdVdjsqYFlVMGFRTXh5UiVNKWhmaWVQLlUhUWZ4Ll9eeXI6K118bWFeaTxbcVtIX3F4MjhxT0ZRdWtCUjNi'@;
put 'WEdOT0A2KVR7P3g3eUsyK1R0KTsleE4lcS9TOks6eEVvO35CYzs0Y3cydGIlezxXSjtCckkpO1goJkxrKz9JK1Ijemw1MDJdUyk1ISxEO3dPRjJLRigmUEB9RDleWz1fYlIwaSNmKmtNOzw2RWRKXyIocHFTeiIrYnAjaXVJSGlHSGkzVD1FdmNyRld9PjEvK1hYTyxCRHlBPCskRzQjPX4+ZEx9'@;
put 'ZmxbJDk5bztgfGZhe3E8ZnlsW3c/XmNubiV3TnhSOXVNd1lRYF0oUk0mNyooXXVue308NlNLc2xwPXdoRUs3R2p1JXFPNCtuWXFnbGQ4UE16YVZuaERYeEF3ai8uPXVzaDh6biQkWSlPWE1DKlVKMDNgWF5fRFopTyQ/QVp6aFt4QE16IXlKcDBzU15AMWxOVGE8THBgI0dUVHlUT1Y1bEJoeCxQ'@;
put 'P054bVM8TF0zYypYXiZ4dmJOKW5rcUlWd0hPfEIuQEUyLHQsOSZxISxSPWVrPFo5dStNRUBhLlJMZks0LHkwb18sS147ZXhYfWZIbkEzTHo4cDByaSkwWTJJc1FkUl1ZNHN4azF9Y2hrJEowWU8lTlc4Tz5+QGQxT3pkPmo4eGohUT89fWEvNFVmLEJTZTpAdnROQjMrJHE3azghWjIickFeO0Bj'@;
put 'OSpSTHh4KXkib10/OTJJdGdAR2IxejJSTiFsUkcvXnU6dWwiJFRgWmIoPzQkMH49bDh4bytAanVTbW9Dek5eVFgqM0FsKF5baj87d2BTTEleSkJ2eDIuNHBSNHRnY213KXdean5qXkckeno1KHpHVlN2QnkidylZdGY2ZnMiMWtsRiRKbU8xd3FOb2VbdjVCIVNAd2hNRVchRnhRRWZFTlJlVXZ3'@;
put 'ZDVPI3leWEtbREAwOTpxazllV1B+OFliJTs7JjFiJShdaTRVM3h9JXlRUV8lZXx3TzpobTdQW3A7WyoxQHU3eklZPiRfN0xgV3YmVylFKiw+L2I2MWBTRmN2SXkxLiI8YCxuNkBfYnFmZSR6OipfVG1Oe1hPeEkyamVQJU9tTXdOK0osOypfYFUxTl5ySTlYKHBWKko/clY5e28raGthXkV2clZU'@;
put 'MDxfVnN0NWVtdXFIJEE8I0wiVDNWVSZBeWV8cml1cXUhbiQsdXw/fS44Wil4clZ0R1ZZXzNQd3dKcntqJV10KF5HfF9ZZkd+TkRIP3ElS3hjUFQ5KCVDRGdBbT5eR3xrdHNKfTl5ajdyRkxpT3g/b0o8aHluPnkiSktmVkQkUzRlT0hhcCZfUWsqdE5JWm98KSUreD1zL0pRL184IVhnd1RrSzBg'@;
put 'Zl46KEpsQz4pLzl7WlA4Q3o+IktnfjNHWFN9RGxxJDUka01VKjVgKkk1WDRNQTQ6MVJrYyxGMz02YSlVKjpMXnNWJCF2X0olWUN3empJPjBzUF5iO0xbeXVCN1JOIWdzMCJkT2BIfXVqO2A+fGhyMTpgWEVxQ3s1NXUzWV91UVIpUDB0a0BpOXAwKkdTUyksVV85RHhvKTMlK0FIKWlbN1pwVkld'@;
put 'MCRVZ1p4Lm1FTygsaXkzaWxTV0JORkVoZUdPRnZkTnVrZko6OSZ3T3oxOl1GRUN3ejB6KlhbO1JlW2s6Klo/UnZCLyFla3B4TU96MUNSNVNqXyxWS0J4WU0vKzEmXlBPelFOY3BvJlJWLnR7ZkpJQ3hPcTpJY2ZUKE14bDQ+aDBFRkpray99YU1VPEUhT2B8RVFtRz5KVGlnVlE+R0VgM0VGQnhC'@;
put 'UztFVkJaSz5nN1M9aVlvOHQiZTc0M2R7VUtwdyVgTCF5QzBYbCtVS2x4cVZJVGFJTTt+RCQha0BAZltZdl54ZDNoKSQkWTFobm42RFFRWUdJP2JAK19sVlFZPnFVVndZSzk3JXldenRNd3BGe19lTC53SCkrPklpayg3d0M8S1J7VGMjYkhaPyk5QEsiR1taWWhNUCFePD0sRDJCLmxbW3tQKG8r'@;
put 'UmZaRVl8aHB4V0d8LilgLF9KJUBUej1QSVtNeWlqektXd0Y8T0R5VXNHNE9ETjlCQCJaa2t+VEJubm5vU1kmU0RmRiJKPlReWmt1TVJ3W3JbLFp7WyM9JnhkU0s4U157aDJDRGRmUzVsaF5LIWczTnYqQHNeP100M1pjTWVAcEdwPHlTTHBgdSxCfSJiImpFQEEvSi9sPWhAWEVMPilgQCp+SSJH'@;
put 'U3NeU1UmfCwzQyZqbUlMe2dfe2YuTk0wbyZgey80ZzFlK1JScj93dlRFbW5ZdFRxYTMzZ0d6dkkmYUNuKVVtRnxsQVU6TlRlZCg0XVd+KyV9PG5vbG8wNWBnSnBeYFlVNiZWcnZ+QG1gOnY9ZmVveSVRJTpFQExWR2tvYGhReVA4fmM4SnxmP0ppQDtMQEFvI251TCQ/IWUiWyosfHkwSl1JOCMj'@;
put 'UmxaWXdvTyQ5JDErbVFMV0BQSXhGSUt3TnY1dkROKjUhbkI9XXUzWDFmbzAkSX5faClHd35McCYyamlRYXokeFJJKXtieGlgJXB0SU8xPE51YE0+Lk1RTFhSP0ppVFM2PVghXi9BdigmMD5PQSopSVAlN288YE05OyE/fX1qLGhjUjxoRG1fTWZGfmU4SjhFPF0iIklZM0d8UG5PJTNeNj4hLGY+'@;
put 'UzV3NVooS3xrPnlyQD02diU2PlBeM0s+X28zVVpFcDAqRjMxJGhFR1NfM3NDQ3Izc25tVyUxSmh5I2ZfXVJdI1Y2MTA5MD8xakx7VD1FNExyTilYM2B3UlpKbjw2dD1bQzx4emxLOTdLdX5tfGU+KW1yPHBmRykxMFA5JG5TbDVZQ3k9Y0R4QCJzZUouUFgxQmx8d21JVEczRiVFSnVWKTtJfEIx'@;
put 'WD9Wc3xETjFyeytafS9MW3h3QXErU35ZR1NjS2BhYi8sS2djIyQ7MnooJnh2XntPT3x0XjtfcFtNez5jS0ElZyN6cUhjYDQhd2M9LG1mW0JOXkE9eTdna2NecCNFZT5HZnBVKV4/Z2RKeSQxIWRleENDOU9ncnlNIyZfXmdGKzYzWUp9KTclfjhiNTErdV8wWSRpQTxdQGVWRGNzNj8qQnlsaEcp'@;
put 'Oyl8Zm8rZWs2V3BgSDBVcXBVcmU8Ql0zbzRIIyMuRk0jPUJGaFl6LmleQVFxSyJKSVM+cEtTQ1BSLElKX3ZYITo2S3M1bW9YVDFTbH5SczlYU0Y/dDYmfF1jQSxgUTh4Sm1HbjJoWj8jKE9GRjZfOEFHYXBgck9GYER+TiZlPWVJZXxPNF5IWCo2OCUzIyZZaUV7UG0sPCZrczNJL1EpRjwxJCFI'@;
put 'flRCMlBlfDpJWEJ2enVsaiY5RCwwS3ooNEYub2B4aF4hInJCTWc7Z1Z1NHBwKGVbQ1E4NCpJcD9UPF85dzRuZUxsezUpd2wwaGxJQnxIQlMya2B2NGFNM24iSENlO2pAZXBkLz9tbD1kMSpJcCt8dW51PUlTTX5pZS5kISx3JVJtJSw6I35CUlM+cCx8VShuYC4yVjtSRTdRKzsmR2lrX117Pzw9'@;
put 'cHFnSnIzeElGT1YoZ19IaCIuKCVtODBZJiVbcD5nLz1RcHRsZ18zaGE1NmNxSyoqIjpGaDEzY3BKPzFjVzs0MWtzP2UiVWxXKHx1MVhxITl9PU50PFVTZXJTNDd1PDJjLDg+VkJfYnZfb1M2NixFbFBsQmFASSpYYU48KiZ1Kj0uR0AxWGtyVTNRcmpBZ11McHBHQnNqTHMoJW5galokZkZJfTU/'@;
put 'VX5aVD1CfmFeRCNzZSV3MFk2KFlqNmVkfmxGNmx3LGImSUhLN05oJkdkejlpZFVmQDprUk1ncSomUTs9Lip3aCVgNCpKQ0VhNkxWT3olTyRmQmdkTXZZaCUsaE1JY3VMWGtSVD10LE5oTDs8WEdxTHEyPXU3aU1NU0lWNzJvRDtAQyRRX20ja0ZXRCk7TGxjKnlQNj1MdXo+bEA0PUBqXyxyNngo'@;
put 'TUNAMXdabEZoIU9jcF80WTtwaUpIZEJRLmVIKDpALy59dGVWSTlbZltfLmN0cTNFdn0qX21bMVd1cyNaViVjS3BvYCkpTi9oOltsOXM1ZlpaOXsiVGpdT3VZWiMoNkU9RzlOMStJYzRHaHl7djcwJENwNT92VUQ/Rm5qU2lhNlBBeEtuQV9KX0FHUSw2UTouZnV7I1FmPVFPTCxpNGIuM0VWJntf'@;
put 'Sk5GMF1efjZzIy5NTyZZVCQ0bUAjUHgkb28mJFlxTTdSakZJaVBwb3E0RUosdTNzOU9xNj18fTMzd1QqVkJGTWF9ZHxnZT5eLmRedChUYT5PPmRGJEk5XzslZXZZKFh3VCF8WX1KTE5UekVGYXpdUWFuZT5EWVpQfTBQW2UzaiVPMX5FYTdQOmU4LmoxaHJEJSlWKl1QZj9MIUx8dzorVn1Tb2p5'@;
put 'RmRPb2hhTW52PXdoJlplaEV1ejowXVlwcGpSfHQkWGNZMEV2JnhiI3xFJXsyXUpNYyNTXlU9QXlOQzBdWyNRZUZYUmp0fX5mNDVkX1F8LH52aCJCJmU+RCFEQTArMltuNzIiYXRgPTZnaWMhUkVUNG1sRllXNWkhTStYOS87V3AjSkQ8UjtePzRpblE4fGVkNWJXSmVUXmlCO3YjMjhMIWY3Ujw0'@;
put 'PS9RW11PeloycUZBeXc+QGtiQHViKGY7UEwkWjl5VFNWUHpzaDJoZllTKGw1dzJRZi84OUkrdz1VeDhPbzhyRyFDWlUuJFsobTY2Rk49JiwsVSZ1OFE3W3RQXiMvX2pjLjJIIVgrK0FNaDUvJkM7fShebHt2UilBSGNyeyUoZ2F3eHp1fms+bmRWSVhxa0A3c110NmFhIVZIOiVbcUYsaF5ZeyEu'@;
put 'MG1+PXxFYCxqZXpiTDpuRiZqOkwsRldDVnxfVXAoXV9rWD07MCtwM3wmKy4yKylPIytaRCRhdSFnR2g6eF1BK2ZbQStwSGg6c1FOXj1fQ3NtYE9iM2hTOCluLlZuKGF8P201X3ozNnBVZkYsOHp2ITg9UnRkMTI9cTMwez1bUiFBazQzcHpLKSMrRX1kUmZSQVdycCwsLGlIdCFIPUh3ano2Z3Jb'@;
put 'eFZeKmVacjZFVDhoJn1gMHZkLkEvPixaUkVqSDZGSlpyRipSbzcoeXJRdjV6QFRRMHQjOT1qbyM5SnAsWGpvMmooRn5vNyQ+R2g6Vm1kWmNfUU9jOSshWW9qM1UmImxtZmFJOXU8MGBjI08kQy9ZVHMzc0FNP05rYmVVU192KnRZI3RpNVo2dXlPZ09gc1BkPlgzNjU8ZGpien4pLDc2KCN0LGdI'@;
put 'cmUlZExweyZJRUdOU2tPUXEzZ1o4M3Y8W2pvSVY8YkkvUUtUNmskIztpZWw3R3BGVXFTI05gemF7S0V4NWQ+XSx3emxQYVJ4Z3cvP11oLmBITzR1ISh0Izg6fml2LysyRVk6Szc6UVkxd2RXcHZOY0Z8NFF5TmZOWjtUfDtIRGlkdD9qPVhSSDQqcWpHe1pUUTs7Uz4rKHpyNjJ6RmI6Iys5JSZj'@;
put 'RVZDXUREPSl7RikmcStxJCsyaWBgfHAoKld1cmBseEBnRHFOMHMsX29zZEM/RTEhSy5hN1JlN3wmUTpfYC5vXyZ5YWpRLFFiME0odn06aUR4d15sKHFHQiZhNS9aM29Ien5YKGt6UF5teFcqNk9KcVg6OSZ3d2omTylZKHhTJUUjMSNpcn0jL1kwNWE9W09xJGtqc0pqa2dqT3cjMEArTmQ6MV0x'@;
put 'e1srPURCMCwyYnAmdFFecClWLmN4MCgiV0JoNz0pRmBuajhjbHFWYyIsMiVgVlhFLEBdVDxfIk83PH40WEYyLFFwSXI2YVJ8a1NLaEBFNCZweThGSG1edz15PV47WW1yZl1UVU1RR2F1SXBUL1VVamkwZ0gqcTNwODpwZG5kRlsrKzJTRGcmemFrO0w1PDpqNT1RN3BHeCwqdyg4SWQvNHcwIyxW'@;
put 'aD11MysuK0NJKS52cCl5eGcsIWlkbHh3azNFb2RSWWlePVB2aEo8JjtuS2BtUDR0eF1WajFXbDhKP2w9a0FFbmQyczJeZj4iYEBlbDxJbGlyfWhvTWU6MUlHTllYY1UpajBfM3BhaiJDKXpKVWA7SkVCLER3fGJDQEQ2TTBzOW1xN0F2QHVrRSFkY1RWTnc6SHgvZFUrSEFhcXFRK2laWHY1Pyow'@;
put 'cnYxTCxIL0Zhd1FDfDU3b2ZhWFZvY35bcmU8aU5Sd19nTHkrUU8lY1U2bDpzM042NEleeVEvVHRDYEdkZHg7RDdjJHRzWCRdc0RkXzB2VmxpY191QW9iMzBDOmBZNDdQQktKLmQhJVVxdnVkIzwufTlqYWpvT3BMR0NyWEM4RXZjPE9vYSZSam1XQi4uSSMqcCtuLFFFJUxDLCQoYltYajA6bHgu'@;
put 'MFt+SHYpeV5LIjczUmQ9eF8xUjtqNjhJOzVZVHZyRTtEV3VUN18yeT19UkQhKzt8QiNSZEBAVGxkZXl+TmZAQURzNzZLQ2RGbkN1P0ZVdU88OVNweXNxflNNYW15T3x7M2x4dnx8Lz9sJjd9JFAmbE4ofjJgI1BFIUJvP25bbDxRTkc2Vkl1Kk1MNC9iYSFxblkuYEs8bEduJnNgI2IlYTNkUlpd'@;
put 'UV08VD8zODJ4ZW9zXmxLK0hEPWloNShedkhpIXxvMThvVW5xRi9MeS9vUHQsYCtZQV1kR21jUUNJWWJrbHkjbklAN15GUkB3dzBYJl0kbjV+NTJ4IzNsM18sQWpbaWR5eXlhS0dUOGMhNypKOFVfJWlqZzJfLGs1bkVzSnFyPSxqKWFLNl4/enhvQ2RaUXdEKUJPbmlURSs8Ulpde0AuZ00zbFR+'@;
put 'MzkwVF0uLGkqfXlsRVBWNGlJKkRuZ0g/NnlvLyEocTNwMzldbCw/WypBVVFTKXhsPlReQGJjLFB8NCo2VkJVO1JMY2Ehe2pnd3tPTDFKQEpZbXlEP2ljIjZmTFUrLyRDSnVxMSlJWWRGUk11K1dYTVlkRlsofExTSGpxbl9EfElhPnhMTTRsO0RLW3p4T09hVnZ0NXFbaX12d0dKQD12fWJidEY/'@;
put 'T08ydGlEQXpBR189di8yL0xVKChrSGVbQzopMFRxVF9gbz9MSCgxR3gkRCR4RkgocSxaT1YzbkIlXkVrOWBZeHp3QzpVVWVfS1hrK3JmYnZZOShjPWZdPD49TGt+OCJUXUM2ekZtPERzSDwuZzQiN0k0Vk1bPnJQOnlOKjFpYmVxdUl6b1U3T0dOIkdHdXN3b1VAdiNjSytwPDQiMWB7d0BuaWZM'@;
put 'KXFIS2o9YiY6KjYrVzs2IV9xc0FULGAhMEBYNClpWVheJmMkT1JVTzZWInVKNEp4TyZAR1pZSDR6MHokQVghQ2FycHpQYGh5aXlTfkhMPVtuZyUjYDZMc285dD9qREcoQEVeZFViayF2U3RRQGlgbHxwLnFTU0dwaH55Y1Z5VmNUUCpKe0A9LlM4S1U9YjVadVt+KkJsTDVdVmZxfXU5MVljVyxn'@;
put 'UjA/M15hemJEdShlWFlkKFt1ej0iI3guTlV+a0xfTzJNUEE8dk9xd0Zva3lAfXF3Oyx4MGtxdnNddik7UyV9fXV1SXp2MmxkIWBGdjg0bHFbTFkzZ21BXixFXzFdUWU1KC5wdjVNIWZtT31NZEdbUWtzYmNfJndPVnNkeC9PJWthZSZfenRAV01GbmFzUVVPfUZNMmNmTV1faDs4R0NAIUNhWWEx'@;
put 'dlJPUTtgdn1xV2pUWC9OcmZfd0khRns+a2ZbTltYaG5hUSMrS3kwUlBIOVZOUTNYKWtlQHtVYUc7QnJ9UER7L05pNSI1K1hbT0toWlFNO3QwMmN+SFFQWmtxPnlye2JOLH1pUmdWbDpXJTlsPj9nN3EvVTwwaCk7Kk5zZDtMaCJSS3d3W3JtdmUpKiRXPUtaVGF3OitdTSNQZDlIPDBtZ3g5SXRC'@;
put 'NCRyfFVleEtoJj5jKShobmw4MkNQbnE8fGV1cVB5UnNNSUBBaVtKQiYlIyhoJTEmJll5LnVOKl9NXT9oMUA7bV5SW3g/NlQlR3BKMERVIkY4WiZnc1BfPk9lcUpZanRXL1ZHWX1KQm9IUHJLZl46K2ImO2RxYDguQEZMYCp9NlZlQENjOW94JUl2ZUArQHlqbEo2dXBBKU5nOn14WiVPREtGUl0y'@;
put 'Zm0weUdgcl1+OkpAIXAkQnFJYnE+M15Qd1U6cTltZndVSkd2WiYrVkowKFI4eGUucjw7SCU3dDZsIXhfXnlyPnhTO3hSVTUmKzF1cnNgOXw/Q3l0YSQyTG9WW2g9YEBVeU1JbmdrKmlVfElYT2olJCh5JlF6T1M3Z0dgOUV1Zz8rbGBtOXhndihZcEg7aEVRcCwhSkBlUiJ7NG5iJG1OZVlERGNR'@;
put 'cmRHfGlKakxPZVNoaz02WzZZSjhXMmU8TihHYFIqUCNII3UzJSlVKTY7NjxEZTMuYTg1eDBFNENNbG00YG9vSWpuTEVeQCxKa046LGR0WSVxNTohJjd9L3w7MyFXQm5nYmc1Rm8uTG9KfHpiaTwhZCZVejMqQENgUncoQz9qPVU9VDxePkgjXkYhcTIhdlNMakw1NnM+P3svYTc7Z1U1fl9ATUtg'@;
put 'e09iO2xDQFdnVlhgPG9oMiwjcGwmck5NKzJYTEFTQX40SVlMRUZXfF40YkcpNlUuKzczUVJUPV1AclZweVZ5cz4ydj5IKipQQTdVV1Q1dCptOURvfWtOfmJIQUNvXikrYSxRY3BTPXdEZF1aMzB5VnE5RGsxTS9+NTJEN2VDaUB5KyxoOGokbnkkPW41cGcvI1Foe2B5ZXo0N1twJFBnMEhbZU1U'@;
put 'SDF7PGBtbVF0OWYsSVIqSEZsPjwjJTp7V04jVSU1bVNdVVF8Qj1KYC4rbWNXTk5ASUolI19wTE5bKU9DPDpWWDZRfl1uYSIkajsmKmNRMSNQPypYeSMsaiptIyhNd09oMFo3TkZePUtwSytfcyQve21TW0c8OyNeYD9FWGU1YCV5NFd+I0dXfjU9b1M6YXdWOm12NER3SjJmMnBmUEtYIVpjSHYv'@;
put 'cDgyP054aipALkQ0XlFZfFh2dE49WiM6TCIpIUZ2cyxpfkApTWxYfUBFNHEzbl1ROyszRDRNeyFDUyZOPSIwTV4ldHg/ZGdHKkprcXV1e05Fc0hVfmd3TDMsYGZwVXp6VFZ0OyxMNEhpTl59bklabnB8fSNaQzxne1piWmFgdiNoUl1eJXEiOyw8M3lSSG9yPzoqJStzRGl1cG8uL34vcm9TO1oq'@;
put 'OU40M3NVJk5Sd29CPV11JTN+VUJEZVorVjIqW0NjQWNBY0FjQU5CNW9xV0UockZMTDNvXX4+TSp6fHhicEs2OUJVSDY1QmRmYVVlcDMuWCpqXWlmJmV5PUZTKmEsOi4lSn5qLCs5WEhhXmZkQy5BI3BOW2hBPkUpcio2Xi92THJFIkZlYiRHOEM4czskfStGe1FpJUpOcUY2ST1Nb3pBPD1oLl97'@;
put 'eD4rJGM+RSw4QyRjSjYsZ1Jxa2xzfm4rJSo5Pk9SZ1QsKl5SQlIvel0vX2U2bzlKTiQ2OWAoYnFsJFBGbjZ3Kz9HWmVbLkQ6KVhiVl42eUZSPlVXakNGLERyS0ZeMFpvLF5odVVGe1hRXjlXVUFQK11PMlR2YzVZQjFhWmFSIylyLDA/VikwOks1KENyb2NGK0xoMzVBcHAjRnt+TlBLIVFHYFtv'@;
put 'VGhROjc0OG99cWp5RDoxPFE6RjY4b3RgKUtqWWNbZjZJKkwre1E1OCsqMi4lSFNre2J0dXVlfTxQfVYzOEVoLiMxa2dCb2F6WiRTPUpAKHg0NT55KHBRbDlPVGVPOVohOjZCcm8wYDdHcSZkMGEreldtQSZCPitYMWBrcT86XnI1JHssWCVkOTpwSVc0Xn5SQmtzPGpoQ1p0byJ8WHN9ciNRW255'@;
put 'UXVVXXt3R3EzK1JKIykxQGAzYnR9SW4waGVeTGc1XT49bzkjKis1Ni5ue015Uz1ROzdvMCFsPVhJQWhWaTQsTnI3ZSw/TDFRSTMreDpWUTUmdlh9JSpWb29KLm1gWW0hLGNjY087dzxTfG1hT098TzBxeDxeM2NyUlF6Jj9gXUMsJFIwVykieFdTb3wzVGRTfXJzKCwlcVdse0BScDR5MjBVVH04'@;
put 'd25MI2FMP1dRPmk9W0BCVWVAO3hVYTBQUFpzW3FxTU1FfG9Zcn1YVW9qKGNdKkFeWzQrMyxRdlU4cGd0cn1MNFA/QVQvQmNEby42UHVZYV5NOmphUjlCTFJnLHVrfDpFcFJwJilsRS99MyslMmJPXm9nU2kyS3BLUmdHdEM7JHRxY3BbcUohP0ZkIzdUOHdyaEhadjtzUVl2VmJXdntTJmB7NVk/'@;
put 'Q29WRHl6RkEuWkZpQHB0JjMpJF9DTHQrZF1RcWh3NT9YfGNTYFNpMzNXcTl5eCgqbzYlcls8XW57NipTdiNwTnxiQEU2TVBbQUtBTzs3byFKNWhVUSlBfCR8ZWolUik0bl4uQy9HJSpJOU18LjB6PXEvcD81TFUpcF5rfm42JVlRSH5fKHdIYzd9UUBGfjRmekl4eUxIb2w8SkZlOzpWN0poT2xe'@;
put 'NDtmP342PGhKPFdmYXxAQCV8NFoiWmozWHBsQCxGPUoiZX17P2lqJU1NVSZBeTFyRzQiI3R6XjNNYzB3SiUmM3I3MWFCVS5jaUBAcXJMd3JfVTo+R3Q5KEhpUEZlMk5tbjM7VlVaV3hGQ2ElVisrXmQyeUN6T0ciakAwaWNHM3hZKH0jTzM3eG41NXo6XS4yMSFjcTpDcCpjKyJLdCRkMjd9QUtt'@;
put 'KCIydzBXeXZ2TFc0TGsqKlUiRWxHNTRYRCFwXmxjVUt7bWQ6L01uX3IyO1p+fj5UJkF5ZUVhXjRUUERiTFcreDN4cV9KKy5GcEpGLzlsP0dwNSo7MGBLam5QUV94RyImNWxrQjs1OjAxZD5uXlhdfURhKm8iQEAhbmt6d1t3ZlNRKnQxL1l4ckZVeXZ2cUlKblJTXyVjXU1LLG1kZ2BuWWljR2lZ'@;
put 'NiU5OzdiT3AsblR1PCk1fmcuZiVFb15tSktAMGNRTWNxImBgWWFGKFBbPn41UVlodG95SypvIjx4JXkkMXZTfD9pNnQyOVlvYX5yU3N2LDwlNERCIm1nSHEkOmxYa0Ircy5bM01xWGlZck5AbEI8ZT9IMC5GX0V2NllVbyQibWBZe2hoJlA2PXpOTnUsRlJjbkdtdCxocDBQamNwXk5pYHRBOjF7'@;
put 'Y1lAYzhCWmNfZ2NfeF07JTRyYDM9M1UyZD4kTl1nY2wzY11aeSw+M3ApUzZAZjEoNHcwX29hfXJKfl0haXE4WFokZVBZISYmSl9jWlBnRys1ZW5GUTFxWDhjcDBdTWViQG9SbXdFQTVdNVUuVyJKW2NzYEx8JDszYVVsXy5JSFpvfnhVQGMqRVp9ZX5uYCVhR31Ud0UwNWdWej03Z1d9M3Y7YnF9'@;
put 'flpneU1JUj5MaFVEe3FpdWArIXt9PVssdWhxSl5db0ckJFssXklsY0hmQmZleSZiY3p3KmJJWEdjKDBPbUJodXpAfW58SHlGODFzcD0pYTt1UDR5VnlCdylTcDBvOXNTd1cyb295YDpJW0JjazR7YEVtUHw0dDM8S0MseEkvbEN0VHslbSk5KnF3TTF9RS58aDghJHR2dT1wbk9yM29HNFlLNy5y'@;
put 'al49IVVYXVsuLF97bFMhPkp0eWlvKE1iWygsQHs3ZzBGZyZ3fC5DaCtWeSZeX2g8ezc9VVJiJmdIWXEvNnxvKiZlRHdqMD5wZiJtTyhYVFR8c05SOWFAJEVpSzlSXnEqYktfTU4yQnpDVCNKbUxAI1EmInpTNV1vK1lRPFs+eFA7eEQ6cTNeRCMjS2g9KEkpVUFBdnF7eDI7WW1CX2Y9Ol9zU0JE'@;
put 'WWt0bSlkQXs3LEhrZVVOIXt2MFdgbjM6VXpWeSRra01SMntGZlRqfkpeKDEhYlomalVMe35UPzFGP04qKFMzNSE7VC9KUHwpP1VTIyYrZ3k0UEU8WSF6XVlYN0Yzbz5xWDhHREVSW3kiSiZ8LiRAW09ScHEiSiVxIWhgJXJdWXZye1IjNnRWfiksODFFXnd5Wk1lPiwjJltZW0tMO1o8M2BifjYi'@;
put 'elVXNX4/akVpaE9VXjYqcmZ+MT03RjswLF8zT0NsY3FvXmlxaDRhQj9ZTX0lb2NedmIkWSRVfk1xIkoueG94dm5bVGBAXW1SPG1qTjpTXUxwPSMrOltIMGZ6N2F1KjpHbkZuellPZ3xfMT9IJSg3JVNwc089flQxSj9vRTZoeWx8YC9TSjZnPWFKSTN0I2B5Nnh7PHwkb3AyU2dOTT8uQXhtQ2JD'@;
put 'InB8ODBxZFU+JFU4ZHtMVntFTzB8biNoRTM6XVoreVUkSD44emBGWzopQGdjb0l8YiUxKWFAbTwoM0B3eHAxK1EsIXcuM2wzTFZTLDlEMXEzcE5IPnhsW2c+X2Y3Ozkha30jb2AjcUQ4b2txdyowXlBaLjRUQHpwe1pKOkledmtYemJQTXoxfXBaU1N7OTdtJURPfDMrZj1jdTA5OF5ee1UoYDFF'@;
put 'UCwjPCo7PHomMGwwK3MmcmldVmdlN1IsWXUwN3ZXaSthUEIlL1spW2cmbmtCYEZvIT9AaEhTMjEzekFKP3c2dnNNO0N4QUZYenBDekokZCxSM3pLMi44bVhSR0JBQUFTOlRBbEJ0SXRaRHpHdTdDcDBVXiN0Q0EleUI7M3A9N2VPJUZFZCUqJElrIkFBQUFBQUFBQUFMdmpMaTpbbWF6QW8hPDFK'@;
put 'VXRtYUtYcHhMb1BPcHlWZitxWSJNO2VjOnc/RTUoc2FjUihOV0Z6cihKeyU+Q0d5SzozMXB3YWo+e3YpJkQ8QG9nO0xBLChNODUwflN5bypYd3hbVVVwd2lDajVVQEFkfFMzfj1TU1lGQ2EvP3oxcyVMfXIwPUtVTXJJYkN7PzBFM2QjRUdiI28mTysmbyV9PmZJOUkwPWddWzZXQ2pnK042S3pF'@;
put 'OiRESVlNTnYjNEJnNls4dTF7JmVXUngzLGIvY0Mpb0ReOCN+YjQuVWpFMTY/bE1KUzNBMXwuUnl8VVE/KmU+OHJ+PVBUbGJuTixGTkxjR1hkQVVgR3dLMEtDQnJ9P0NoRXxXTE9MSUh6ST1qcUhTTX4vWjkka0VKQDtzbTdDTDYoZj8iWThdP1skTkZZUlF7O2VYb3UxRmNDMGRmJEhaREh3Q3w2'@;
put 'flhVSjU6YlhnL31ObkQuX0VzLEVdJSJ7NndNK31CPEh7QTtmZWNxPzdzISZIcCxWPikiUmB7QzR9LFl3OTpxd34sX29nLzw0bDwzTUVGKik7P1h8cy8/Q3JMVWQsVyZ9b0x+SVkwO1hBe15gTGVFaHd3LiYjJlRdcXQvN35pSzRjMW9ob0A8aHpxVkxvZUBjVDNedn0mSkpYXjgiI1MwaEFAQFRY'@;
put 'V2Y/JmxncWNbaDR+UTcwNz07JilDRGZMalFmLFsmLHVSWSxyNGZWTTIoOGU4WFZqLEJUZntbWFAsRCpUbX0lPGlNZyUxdz1QOC92WSlCNU00L05WbFtPc1k0cW8jWjQyNDdlNVpHbEdUJCh5Vk07OjdOTzB0dExEQDM5OzJvZGIoLzlqX347eTA9UF99bUd3TW4wR0l7XjxucTI9Rjd9cmF1Yn0o'@;
put 'V1U3TH5WfDo5T1lfOSw/W0tZVWBFYm14JW0+QWdOWWc5RmRITiZaYk1gYD45aX5mWSVlSmhASCFPdiQhN18wb2h2K2N4WC4+fCszY0V1PXZqTFE7XzdaTzhVMDZZNnBXW3BuTj52VFpsMHZebntZP1RTZjVRYiM3TVJUOHA5NUVNKFl2VWtFKUxJMUcwOGQ7Wy5LVDducVgmfjs5WGEhR3pVbUB1'@;
put 'c3RyO1RfanE6dnd9dmk8V305ZStTXTVaNEEjPWMsSXZNXjU2UH4qMy9iSm1LY0d7Vn1AKVJBQlVyPVJjNiJ2Rk9+Lzp6KjBdJnNuW1EjQnBreE5IKGhXVTxfMCh4Wk0kZEh2dko0YF9nYy83dFl8R09xXTomTT9pYyVwT3dhZVJTRV5tXV9KflEyeFgvZFQld0ZKXV0oOjZDcz1BNW86U1ZNQk5g'@;
put 'K0dvVVtCaUZHKUE+QTthTlczSiRWO0x0azBXU3tXTHNFbWNAIk01cU1NeDRrMXplcW5hOTVNT1VnN2pdOE5LYExbe1JRem4jZSt0Q3N8bXA6VW9SZnplLHg6fiRLZXEuZCokU0U5JiFpTm1WZFFGZyZHL1p1R3kudUpEdkUqKm5BKUIsYXd1JjQ4W0ZxXTBXRTY/K316VHVgS3E4aUZNT0E0ZVto'@;
put 'U0taIXc4Qy9KNXk0XThlZmQzN31qPlElVTlgd3xCVCIicWhMOSpaUldqJFhCRy4yRXdIVlpSRnxgOl1CO0RybjkpaTUlPlssbiF6OE5Gc2d9KC82cVA4W0AvMnxFMixnZy5CbiJhRks8RzxpPTFjc1cjNEFFLER1aEpOQ0A7WHZgXip2YjZ2bWs7Ty5xISVxMXIwU2x9RiwrNG95VCpHJWldczh6'@;
put 'YGJdOmcxfUZ7K3tORz00c2R0MWUqJlRFTVZGKjxjOnR8eGpVMXxSfmFbXkt9Wy49UUpycz02VnBCWlheNWQoZEYpejV1czpIJEtNbUVLLGJbP3xzPGgoPXNWYjJ8QWxpKTMmMVhFMWQhSm9Yem1bYCM2OT40Rk9lWFgiVSE4fXAxbUNJcSEwbzd0fCRvVEpjdnlmMn0ieHR7SDRsIWteMCxBNG1A'@;
put 'ZEBaPzU6fl5oRnFAfjBUcG06N1Rwbz1BY3xuYnZCaXFTT2BGayE8RVBOUnAxOmsjU14lPk9bZFR0JGo1TntFJFl6K211RX51RmVaOmo7ckoqU005YCYiRmE5diouO3BzMm54XyYjPDEoLH11WTwmaFUyTU4pYj9ORXc4ZCYya3RzanxeaGFyX31MJX0ud3ZaeS5XWzo4VCNqJiU/WS9xVShtSCh0'@;
put 'IUUiMDwzWjJDZj5vOGxzV21rUmk8d3NNJWlvPjY6PHxub043XTVlTHRiMm1LLl9JLC97bndUJk9IWHImWzliNSt2Qkx3cGo9N3h3fnpaJHIsVDo3fW9WNjRwJSZCKktFakVvSXE7REY6a1lDdkswIlIybiVdOTEycnRyPXVHd3E/OFZSRy5qKmAxdFdhWiQoMHtpX09mOGtLTF4ufnBGcjZPeTpI'@;
put 'JnNxd0cxW2Q3JCNJTz5SbzA0Il5nSGJOSTRgb0ZkWHo4cVFNQio5RC5YcCZ3XyhYRipycFNfbTVIPHcwI1o2ei43NkwlfDUrKktILDlSQ3RWQHlyUEB5aGxVNn5nOE46WzlVSndoNDhHQ0BfJH1kUlFiNkFNbzU0YWZUWEs0MDNQLGJYeDpfVmAhQU0+OVRAKVl3VlJ+XnNtWzY+X0YycmtLWG53'@;
put 'PStVYXhAOk8heEJtbiVwZWhLMX5aUWZHXVRHeUZXeWlAMzRdRig8VWcjLk1mRjp7XmBPNnpnRmllcTMwazZqQC5qO20pTEpGeWQuVUNeMFlrWCQ6d3k8NCUjWU8qUDs6IngyOXpwO1I2UlpQIzBLRDBwWkBBPk9BVXc1eFZ1YzJKW2NSL00iNCtKZXNTVjsuXW1TOFQ8YC9aK3VUI2s2MWo3WFco'@;
put 'Qylndm83UXtqSVQ8JWp4MzhPL1BLYDcwdDE0Q3g5I2A7ey5jVVV0eHxLO1hMZGR0IWxJP1lkQEkvRWRQTG5+ZSIyTng9eDlZeTh1Ln0uelY1OlttKzxmVHpmJnx5aEJfPkhjRWA7TEReMHYmeDo6dWBjdixDKzp1TW5VW0kyRlBgbn59L1ZwWzg0ej1WYWJuOE5pQ2prKE5YYnA4RDNwe2tycW1b'@;
put 'YXM7TEtOayRYanBzImNoOmQwRV5AWVN+dCR7e0B6ITdhTmVlfCNUVCV0RUAucWo/dUI5ek5sbSRxUHtFUGM4XXkoeyFgbVtPYjgjcFZER1IjKGouLEZmTWBraT1YWWRRXV9mfT9pfHA1TF9ZLmFCP3F6MEMkTVN1cmZMSjZxdz51fi5yO29RbEolekgoTHciJkFvdTxQVDUpYi87W0lvJWB0Ln5r'@;
put 'fWAjbWwuTWFmMG46WW9neCVeJlhIanp4dHM9fD9XYSU9Qj5lTzsxNjFsIVRmY1YlOzNgdHBodzJNX1JFNVM4XVNtK3pqX2tNPE9tPnFANi5mVil3OmM8bntTc1svLy5xK0FabkRbNHQ1WUJIWHVNMkcrKGVdWjAxZW9Dd0NvZHMlazwyUyJGIXdvdCJwTUJxbSlLJUUxOylZen4wfVdNa0V2JXhP'@;
put 'cVIhKkhnNSoydzBoJHlQLD1HIl1AMmppLDk3WiNfIXdPaV8jYTRpZCVxMzJJTG1ObCJidjxEe0o+LlpxfWdpTXBwKG8xOTFlYkRBKTtEZGF3KVRCM3clTjNEYEtAKSFwOUpIK3luZlEjVz0uOnZEWV9xaGV9UzE1P0dgI015PF9kSCtOVDAkNV4seVFqOGllMH1hKlhZU29GS0xReFMiWUlJOHBi'@;
put 'P1lzYHg3T2FZL0BAXyMsMV1YMzlmXjpba3d5e14/bi5KJmY/WDUkVShWNjBAcHo/bkZtI0k/OkpFVkBXbElOTCpCRChYMD5wLGo4aVA8WmFkMDpwJSk/SFF4ZDEqP1hicyU1P1p+QXArVyN3XXNFUzt2WD1ubDJ0QmtjZGJDfFBUYGhrSlF9bD9eUHo3ci9wVXIhWTZSKlF9YTA7Y0ZyTC5BJURM'@;
put 'LjRRaiVoInRoOFV2cFNfSFhdNHBgdVhKWGE2V3BpSHdrUXA/Vm1ZVkc0WU1ScDdEIyJdYHZfaVBvRDRkUEgqWjlgSFFqVChMLHV6LmQjME9VcHtQI0JoVjdDTzxJbCR7c0YpPCpJNk86aiZ2XzBRVEFCfV5eMl1pISQ9RGJbWXJxUkN2KUxWd0ExdzcqQDE7Iis8WSpOL013ZlFXLHVSWV4kK1l3'@;
put 'Sjd9c2d3PmN1eUlOeG9afEBWNC9sbXNEXnB7WyYiIUtoOz1bMFZ0JmdBT1d3K3RoPXhTaHp7ckNxZzs3Yj9eZHs8WiNbN0xOXjhTKG44ZiZyMjsoRG8mTEI/UTdffmZ7SC40W3UrMH1oMW5WKyVyJW1BfiQ7T3l8O2Q/QHokU05xKF1UUnlCQkFRTV9Kd25eN0JOd142TklPQE9GTmNFbmBULjY1'@;
put 'aSJtOUduYmFBMTFPJXtzMFR+Z09bU29rdHhEUmR2M1pAJU4ycztmaGwkKFg4PEpyRlhyUWVFMipCXSx8e15hZmwhZmFfT1dbTmZPKCowfVd6TXpmX35jdngvS3UhJilWemYyaFVtfk90VDZoIkpzWTh+fihrPDUqblQ2ZXdWcjE0X2hob358dX18U0AoVUFSdWkienlWPFt4YG8kd3NYOWVZa2s1'@;
put 'MHprOVBUenQuaFEyRWg4fCl4cGReX1smTmUhUD1oXkR+dSN5PVFIPldhVV51bWxvZDxNeGwhQEh3KSZ+VkouOTgjODhVdiMpTTUhKHMsdE1ZZ34idmY3P11UT15FS2Bya2dgfW44TWVEWngyRDQ+TW5QRmlFLEx+VyVSZF9yY2lQJj8/VWcrUDgjXm8qcy8jfUYmQXQyKC9mOiQ2R3cySVZ1PUMm'@;
put 'TldAc3JeSDJ1X09pdU1SX3MlTEFvUX1CRk11bD4/blo+ai58JWBKQilnREZmQ056MmFmL2VUWHI3V2RCVjtuO2ZuZWxQfmI5TyReZCtyPDt+a21OYn1la0ZEcDRnKlM4eW5AUjU7Kz14JVgvY3QvMGNCNHRhK3p8Vzh0UkQ1OVJCW1tdLnssSkVhfjtLVzIwKlBSQi4xRndHS1p+VTI+UnBxOkNC'@;
put 'Om1GOV90N2ZkRHAqeXhyQzs0fUo0amJSS1UvSnRMO240TSRpRj1aY0IrbCtFbSZDMTVmRDxPQkYmJWtSPjlrQn0iRzleW3BXeUZyJW0pZm83Ki4zYzcjSlllIWhOY2lAdjlgYnZGOFQoUT89OWdYYDFESSFLUlYxcEVeZSI7XUNtOHh8Yl5BQHomR0RuXjh7OlRwMz1tciRuMmdgUi9LIlBLc1Qo'@;
put 'JHpCOXFJfkVudCE4Ok9+dVQuKy96I1M+Y31jSHU6cHBTNzcqeWBRLiF6dURFU31MXlBjVkd4Ij8hQik3T1tAOjdqLkV1MHZkSWc0UEA2c2U/NnU8YiglVTZxdjhgTntPTHYmM2wwdUFIMixKNWchfHU2Jl5sZDBAfkV6SilFSVdzPyMvR0haMHFPd2JmcC82SFR6LGBLSHdgLywqfj0/JXd0dzV2'@;
put 'eEwlQHhwK1c2fEJbTiRTVT8sNkxAQzFwJXVmfjNoSmJseDFvUV5BZHdvRVlie1UyQ1dbXjx5WHgpeyEsTGNJMVtCMF1oamxiempJZ1c8JWRXWkBCP3xRKW5ndDtaVyZSMUd9ZEYxWXZ3Uz9YYSF4dCpEdlJqRyVUQk0/d31eP24xc152dFlfWlBiMT92MWduemN9W0E7Sn1sVlhvbzpwIUdLfHdP'@;
put 'Y2E2cHUqNEU0fkgrMjhpJV03JHlXOCp1Z1lGcGtfX3NKK3c0WCl7OloobXRTdzRNKzVvMjR7a0prP10sWk81NllOcUsmNU9rJGdBI0wmcXVPWURdSUQ5ISZwWGY8Tjt1ZXZbP2xoXUd6aDd4QSYqTX1eWU83X3tjUHpRdFNQaWVCNkAmfTpTeVsiLEFHWkooU0g3UVl5Uk9UQT4ueH1ud1g/Xjwu'@;
put 'eTImWk4qL2llSW0jQj5vM3lZcmpLZCZLSHZqaFI9ejYvWnJLbE87JkIlYC94WCNCOlBTWTlbN2hodUFLJCh1fiNBXlB8ZGB6WmdHQE9PMnxnJXhhMm1IPn4qNjdELkB0TTg8UzZMZkklQ0tTSH04YkU6XXpIeitQeCMkekJaOSQwdE9zO2EoN2srSUkhazVKKyMwbDJzN0phdHlfSHw5ZDghfUcr'@;
put 'cWwoR3hNVT1mNXlyRHFCd11HRmpiaSZRbkBCLyUlOktPWykmakNBLz00P3ZhIXAoNVc1XllvcyY1Ql8qR1ZEJD08YGQhdHUjQ092Z2dNWk4hJFklX01FLnV5W21BQiEjQkxQQF1+bUIyXT1VLEZ5TmA5ZmQ9az5NP18/Plp0U2ZCWGhtOipYIWgjVEE3dXxRfjY8SHFvdF4kWU0kfEBnMih6STtr'@;
put 'fVhvSX1eYTh6QFYiJCp3YGB7UT15eTpMVj16Ty49KSYvVk1xT1BJXiVGSVtNfTNWWDAjSGh9KS5UbWhdPmdvXnZGXUN4Sk0kUX1sWDFzYSsuWl1gWE4mX3Y9ezgiRkVkOnk4a2soKFI0L0dGZnhOZyg7b1pER1FIPUwmXjUhZD5JcElOKSsidVAqYz12ckZedzx2cHZnVUJSXVFOVCxPb2xrT0da'@;
put 'dGUuIyRBXmNLXzV2MT9jVShDZjZAaz5ONXMwN3FoLzJXQDEhSWA1NCFjdXh5WmZ4OF1WQ1pedCN8KiklNT1MVFF3MUouJkhXSldmWDlFIVsxZFZlWV58T15SWDVdaG14ek46RjBlM2luTls4PFR5VFs8bEdtcmd0OFF3Qk5HdFsudzZOJTldUHA/bXIsO2licTdZe0VDSk9wcD5FMHpAO2YyRSMh'@;
put 'eUgpYHEjUlBaR2g1LElAb097MztnT2sva1pJSEA/bkhKYDFLYSxuQ14uezpgMmA8dCZaPmVqe28keGtja3QwXlFzJCRkPV8vKyV0RS5gTC9ET0RgZkVhe2BdTXJxdUJ7e2R0NCpvSClJU0lLIUtPR09aT3dae3lWVX1IOFNzK2FPImp2STRDSDZ9QktXYXd+Jl1qTW1iPDBeTHRoN3tLcVpHSUFS'@;
put 'aDJNLFRxTlVReDJDcUJyNFEvenc2ZSNyam09cjs1MGMyeHRgKVttVmA7R1pDK20jUGdybT9MYCxydHtHY1YwbUFJYX1Pa2VgODB7Km1yYE0mLkIqenNlbyYmdm4rbi5EIzdTKTBaRkYoejFUR240azsqdFhHUmZxM2EkZDo0OEd6VStQXzRmI2kpcjRCQ3I3I0hVfls4NT5nJHBtaFpAJG5lWlVI'@;
put 'VTpbdDI9Lz1zIjM9dTN0a3szKW06UkcxN0JpbWBdYjV8KE5nKiZFenlzaE1JOmBuMmVjPVJxIkNAbiErM3tPQWM2WiFET3wuWm1nOjdMIVIqUEVpRXFoaDo/cUxvTiMjK3h6QTpFTiVKJjRBNzhpc055cXRGLyVCPUJGNGI7NW11cH5iWVpZYzwyMGorV0xQZGVqI3o3I21PYjJxcG0vInxmJEVs'@;
put 'aUc5cE1mJEBsT31XeCNCNVZiYWhDNXVNRXF9Ul8sMjZ4N299SyN2OiF6cW8wI1IyYlJ1TGx2ekAqdWhWIi5UXXReLDRidnt6XltSfjM5YXB1b0VoYFtCWDYqfilzWTQybysoWCFDbTheVzI2UXJTZmdbdGV5fFB5ZCo/PFlLK3tyPFR6RWF3K092XyMqS31dWThPWjNJTE8+TEZERD1ITDdWU2pq'@;
put 'endYcT4xN1Q8TGdoZWNuPGg3aSM/a3k+alR9MDwldF4vPURCSVgrQTRvaGh9LjE1fGxiV0ZrTEJfWzY1aGRUWVReQkJPLDYsLDZ4c1lYfVg0MGhDZHY1dEA3aEBlZSxzTm8wVXZ9Km5uTWFDIzQvJWAjMFNMXk5xc0dgeTRtbHY3VGh6ZFd5MSl4SyF4YzYuRHhEQE1nZm8jZEA8TD1ge1RhUWZ8'@;
put 'Wjp3VHNZZ2Q9Q0k7MGk7JFdKUDNCOSMuWD1URkQ3V1A6fFtgM29JLjQjPFNzZkBWJXtWcTpxK1guRXV4XkhDLCN1PU1ETkZKMTRacVdTaWJWXTdxenBHTn5qIyh5LzhkZjEocygwRzNZfS90OCQwdF5tRSNMRiVNTEdqYSspaFllT3liM1ckLmNmd0QlYmklM1ZNMClGcGUxdi5yNlAudm8kRiYo'@;
put 'SVh0cGU2MigmeS4+Jm1LZyxleEAuSlJObn0kMzBDTjoiV1JUQz01NSleIilrfkJwInEsIkJtdm58fV97cXk8LC49JXo7Z3pFel1GNV87PjR5I0NrOkIqLC56IiJCZTIpP35SVFQjVzg9Oj82OUw9TmlwLGVmMCooZHdFODVyQnVNc3w9bnhZJk91Ql53UD40JFQ6UTxCZVNtZWopb0YjZjs9Lit7'@;
put 'L3Fgalh6MG57fkxuQlo+S017dyhacX5hJHlsfEshY25wVUd3UF4/e1EjaFdwUF1FUzRmd24hYnhDcV12WXZ8WEdGamcoPzVAMXIoKSFDWj91OCUwXTUlOSteKm5vUyJnQ0NGXiNLYjZQZVtDekQ0MVA3cV5DcXt2Iz1+ZDlgWmtJYFNaRyJ7aXIzPkgjQVE6PzVvNGBCMk48I2E1M0M4YjcjYUZ+'@;
put 'P0EoZltQSkg2bWB3X3cybnwmUDUwb0RXcjk/WFlKLjlDKyxNPGd3d0A+RCkhSTBeWjQqIWo0T29vfko/R24+SDNSQislI0NCRV5UNzxZLj9pXz42InlMfD5mZVthIWRjdWosfUtHWyhAKlMwLk5kQVhDOUd7PmMpTFZmSWQrdCtNMHNjTT9+aUojb2d+dmpYP3VdRX5sTyJZUzhoZnp6RVVYaTxQ'@;
put 'XmhkfCZQWDU4d312aklkMntnLEJgRVZzbWFXaiN7WHlqRHo6JkhWSV8hLFtIQH1+bVpdNiRCeGMqTl1OMlhPPlswK2NuPFlFOl92PUEjMWl4MUxda1ciQCpYfTRRXV5jJmdLYnBkI3UvVyR6Y092MTArRUVEN1JjRnhyXioodV5mfTQwUXw6XVFhXTpEIiV1R112Lj93byExPk99YXIhTUFSaihC'@;
put 'UUQjdzQ7P31NSzhpSCxmaTNFPV57a351YVhVWC98SS9GXURvNWlnNXljKCM8XjB7OlIjSE5hPTRoOjFBNmZ6eUhAbTBMdU4sVnRSXjlmfUsqWn1YOmdwQi8hYVI7fk15S2IzfCsiYU5EcFRCVlRgRUAqK3hAZDk6NExVckgwWVtKfjFQcDtfPiFbL30vY0I3SjJuMnAsKEdUVmtEXW47KUNGVjpT'@;
put 'MXFHcV1GTnM+WC9WSFpXdD06YjYvP0tCKnIifkNETj5XdHhHQ2hoazV8TDNiM0shNDJKOkg8KUR0ITFoLF8pc1NLOEg3bWJCajU9PyQ/KTsjQTMlWip6X1hFXjNjRCh2RmY1SlNaSixyYEBSdzRXemQlWDViJWxbWzdvVkooSmJRUmNpJmRiQnp5UyhwbjpjOWN7Sj10fUpJOzlgUUIvTGBISHkk'@;
put 'RGtgZk9POHxqMj8sS1diPUJ0TEl6T3R4NUtjT2JqfmIqVlpkLnlGXzpiKjI9aF5AdXU2VDQqUl9icGBoPnZwbmpwM3NrNSEoKSlaMXcxQGFgVUxqcyVLOnxPbi9xaiwlUSl0ZXR5ezx0Pll1fHlWOkUsbkdXPjhFM3cxO0c8bkZYL2I7TiYmUkN2R244JWdNNTtKcSNBSmt8czAhM0p+ITpJIzZi'@;
put 'SENpL3dWRl84az5OUmhDemNwUGo7VjsqTVhKMk9TVF9vXjo/VTB7cmhdLEMwcE1lajxEWms8aV88b0VYNkkqXVt+aW1KeSEsJDpsSFg2ZTs8RSM5UHt4ZEg+JE54bktfSms8Pj5GdjRLXzVgZ1pTN31ANWlSTk5lUiw2RXx4WSxFQUhVXndbcUY2TlV0XVtAS2B0S1gscVE5YiFuTUlpZGBDYkde'@;
put 'ano2e1hIVzUsYnFHYnw5TCF0L2VFUHhtR30hZiwxTzk/RUVsVjpYKGFOZChsR0RNPWVLVllSQWwjZkc0ezMlbHBgKmBbc31qWjJyPUdgem0zbzRQVClAdUJ8SmtSN11xUl5rdGEpU05YQzFvO3ZRUyN+fV9uInI8YXUpKWhyNEk9Mi88KHJ7W0l2RDBYRVJwcVJ2WF4qUEhYZWZBSE81QHwiUWdF'@;
put 'XkFIdmksVkxOXiNXcE4xdzV+WVpFPjV8S2Yxfm9eeXdNeGp2djddTGFbYzhmYDd8IUc2PkRPWU8+ZltHeTl+bGVUIV1ERHBgXlRpUjc0TEBWXmY0ZkYhVUVnJF9eU2EoPFZkUlZRbSlNUFdyLmQ6XjAjMXF2N30rfElzaSVIdSNMNHMwcHdhM3QyQDQ/YV4sOUNqZzYibDw5JWo1bz8iQHpWUk1s'@;
put 'ZjAyaXM/SkJNbmU8MSosVHJaKWNASTdnT2UpSV91X19rVT9pU20rOUBGNXJ8U107XV5PbnAjbWdYVSpbY2p9OWNTUFtNe1l8Q2AjQkAuInp2Q3BhfDY1JVZybV9iL0BWW0w1KDJhYFNJPnNRRSxjc1U4Wld0eHNVYTR+T1VVfEhXP0J6Km5YJFRPSlV6a1M/MWU5L0ZYdH0jOS9OVVNjU0hgWGE1'@;
put 'fDNVQSIkUXR9Y2g6ZChhI2pOb0IjVnJuSG0mP3V5P3VQOG99aSFkJnIoaFNMXURgXSs3X0RSRnxMUmp7TyY8W1BnPyg+VUdWKX5BT2pgQyU1SnMseik8JUw4bSY0SSowWUw5JVh1Pz45OSpASmxXSyNZYll0L0VKPyhaNXIhUjA4XWM/Tl9LZzxdeUVFOFdoPFtoMSJXTiV3dCJEXVVaLjVfQzkp'@;
put 'QDJKRXspLFgzRy5lM0dSMUl7aUJWXypfQkYxNlNmRy8zKk59NCspMUU8SHNVYHZ7ZVlvX1tEJXU+ZUZ9XkRmbGdaLmptNDRLT1EzNFtWI1d2cypQMnkueHBVZEdjUX05fFJGYUQ1Umc7eSkvR19FUWptPih8I0tUQDVHfUxDM18/bUNxc2JzMjB7cTFYUEhtSjs6YG46b0ZyN0huVXtFNSk3ZHdO'@;
put 'N1RdWyRaRmdWI0VVNkl7a3dbV2FnUTxyRGx5VXVeTVdKP0RqOmlVTFFNU21iU04jZDo9Y3dvbC5aRDxETUU7Rk5RPEQ/M04xOHQycmlUMGd1bjgpNC9EUipYQig3Mik8fTs1cn4xbXE4O2BzYFRgVFlfMU5hWDhNMERHfHRPVG5KM3gkZTVldj1bYVojWSNtXyJfOWZ2OXtGa0hQe2k1U0olWCp4'@;
put 'LzdKUFp+T0ZQZkxdUi8qdStsN1ZqQCFwRkhPRVZ9WlcuN2lSaHRVVT9RTlB6X1hvI1dCd10xc25ZfkFyekw/M0s1en1UW3hbYG8pTH1+OkB1OWYwP3xUTVA6UntvLi9VOUpLVVtPUHEyTCE/NFc3MWMhNEZvNGR+ejRXSTpmflFxfWk2Vz9dc2ttLGFVWjBESWM3WGlIYE86ODchRmQ/XS96ejM8'@;
put 'IV46OmNCOk0xPHA3UHZFRipHcCohLHNsSklbTCJacXVCZFl+P0wmLzZbK0EpK3B3RXVmOlhleFo4S1d7fkB4fUA7P2RxJVAwK0VnK2tmP11vPy58dkcwaGpwQndGTTRCTWN0Y3pVSj1VQnpKfmNSLlgzbmJ+NElsIUR3TkcuWmpROzBZJjN7X2ozcHc6UltzZjx4VzZNcnRrM1A2WEg+YTw5MyNE'@;
put 'NSwqLGtLVEg1O31XZm48TC5bQ2BfV2l9TzJyVGBQKl1vVGlqOUJkT3pkUGVdJUNYX2UjVFJrXUhkIXhTO3IqdD9VRUVkZDtXPUs3YzA+OCMiVHY8UWk8X1ZGLlhNJiJvWEg0Jjh6eUBISnNkUm0jPF49RkYuQVhEbiM5O0RTPV42UTNuT3JTd2QiU0E3PUVQdVtKJHNDfnRMejA7cD4uST51Rmlt'@;
put 'LnpmUys2VERuVT13IzcxeV5hNW1hLCNTYTleblpBe3RIenpIQSlrRHEqVUdiQi52VF4yeVtUKWRBTHtkIygwIyhMd0xvR21TYGFuQytfVzlddjg0YD5pK2dnMS5ZWzNpXVQiNihqNTFnPjlAWWNVe09pdTQ4YnpFWXNZNFBDLm87Y1llVkNhZG9jZWxNZjdjSjZbTi9EU0JWfkkzJClRRFJYfT16'@;
put 'OjlZMiYlMiRxMy94Kj9oRHZeMlRSWFMwMzc3dXdsXTd0UnRUSGhGLkskQFBUXks2MkQ2TnpxfkpdPSR8U1Vodz9zczcqYXlAcVNqVkE7UWtUKE1wUn0wQVo4VyhyKUhGYzFJNkxfamleLz1YbjVsTkdyVl4lJWJRaVVoXllxPiNgKCw6QC9TKEgmdiNJJGApaHFXdntMeiY2eyIwWVB6NHN4T2h1'@;
put 'MCZ6V0RMMFIoRGl1dnBbU0ghSTIye2U7aHBycF9NWGU5V0ZQREpXMSx9PWhSfllnRU8qPng8WDRBPShFTlklOSN6P3FtPnQ4TTgxYWIpNlhMbC53QmtIQHpSX0U2KDwzTCZVM3UxSThARldWejJ1bzVvWlAodkYpRj0veT4jaWdgS2AzfUk6YE1JPEB5dFBhJF58Q1ApK3UzJHQpYGRadGY8blc0'@;
put 'dHp4LFF1VzNrY1d5Vzx9YTAyMEhDVDkoM3xRVF5Pa15hMWkjMiZzPGtqVmRkIWVBQVo0VXM8a0EuUT9+XlN2ZCU+fHVSZ2MwOFRXUzsqUiN7MlMhTlkxei9iTFIidlJCcm1TKCQqemE7UC9WKnA+MUhYbVFLXmNgaXkyfnlMJDxmYSN5eXUpanZyaHpjME5iZyY6KGJzRjBrJCErMig7fS9yImNz'@;
put 'PW8rIlUya0wxdTtIcSJOLEZKJGheWy4kamJzMTAmaD0+ZypqKTpzMXR6Ql0xTjNxUElkMjs+JipYJTpBTDtxdFo4NkJVblVqfSR5Iyh1aWphVylQI3Yzcll1OEVIeSMqOjZYalcwbFlNPEdZOFNaK0UreHF7JjUzZFksOTdROHR5Xm5aRHoyeWUySitfbTIwODA7LyNxTWglYCI5TS46Tm1nW0dd'@;
put 'SERsfStZNW9mJlEpQHhhLFBCfDo/RGF1cls4bnpmWWI9d3cvWW9JYnQ0SC5wW15SInxUOmg9VTVzPmMxel16a1hKPEx4OSM9U0ZoVXw1IjlkcSxoM2RpcV9kP1VWWzpRN3dUTSZzNE4hTVgqZ05DQiQkWClHODNHVSR5e2IyLzlkQz5bKVA6ZVosR3hCVE8qLzREaTp2LCRwLl9WX3M0PCksJHgm'@;
put 'M3VBL3Bsdit+Wkw6dnFhKD09NW0wQjxZKV5KPGY9ImclciYqPV9jI1duaExOKVpncHgjXSh8My99Wik7UEA/ZlJOTl18JFI1MjokMFhBOCZvKnJURWNufUEsNS5NSE1vaG04NmxwTSQ7dzlNQXR4O2lEODhNYkFqQmxBY3UqbGlWOyhAWTJYQlpxQ0QmLElTLytNUmgzN2MoUmlAb0prZVplJk00'@;
put 'TVt4VHZ9RFhWRVhtS3RhPjN5JUxiejwramlDNlM+I1g6SFF+SFA5Xig8Pno4TnMhKlZsMEUoRU5ULHg0dUBFWnVmQjtFI2tUUVJnZnpzLHdUInkicVolVWREbXJyUjBBPDZxJjV+Jl9lPy9eJSlCLGUleW4/MHczVE9MNmhkfUZmXXopMlQ8OlcqQCFSZStyYWl5bE9Ec0p+Jk90Im9EeGNDIUBR'@;
put 'R2BRMGRrKDRHczA5Sn1iNkhhVDtxZGBxcmghNXFWWWpCMHNVNz1NWkQ/KyZ0OCJ2alZpUlVHIzZzYSxjIX46bjZYekBfS1R+ZEcycGJFPS9RVU4vX1Y0QHNRPm5DaHQkOzNjckx8RTVfOVlmM0FPb21rR2RGXV9UbkRWP0MhWyRgNmhyNnhHPHY6Xm8vNj10P1UyJFB9Vn11eChTKWJ7bl4sbWhk'@;
put 'W2lFT0x3KVs4dGI9d2NufkhkZVhbJjMiYFg0Mj9qcV5ASEA+UT8zNnBMO1B5OFk+Vmh2V1o1cCVRKjBHZjQxYHNxTFh8S0J8QjUvIVAxcDAobEsoKDxmZnRvV0teQ2BDaFNlJndXWW16QkNgfi5sfigmQmJOOlgseGN2KFduVTM9NVtSP2hjQ3xyMzVeZDhWdUxpe1FRJHpNNClSLmM2Syt8QTgv'@;
put 'Ly5LfC90fSUwOE9WeX0pdWwwUCF5e10uaWlNITFNUVUmeVFqODpoUXZ7LColQip5YjF+bDVMdnhvUmMxL2xrO2w8ak90eCNeTU5dKSwrM3RoVkRqbCZJJHhOL0UjWUwxI2NfLnllU0RxfitDaE8iVkdQLk0jNmJMbn45YyFjRyo/YFUmfU4hVSMray9FISxWU087YFRfQktBYzx+c2pHeV8yT2Nh'@;
put 'bmwuQlB2IjZLb2M5fCROX0h9MCRuIjUqckBTW214cih8XUdUbU50fH1HJkhzV0hyaWshRG4zOTs8PURrT0RdQCssQHosW3FBZjNKUmFme0FdYygqMnNATX1vSnh5LmhGLChQbi8lZnJTb3AwXWkmcXh7OmU4ZTkmSy9XSkZYPyEhbjVZUENJWD47alVTWyx2TTlXPVY6V110Uzl2ZHkxJipjKUh2'@;
put 'UzsyK1lXTnpUOXUseXk+XkdyUTl1NCY/XWdPdFg0cjpkekpPQz1aeldFKixycFdlI0tuIWZJOV5jOiloR29WZTxxaFBlL3cuQktkVjkpM3NjYkpeRHhDPVpgQDk1PnlGe3JKPVgvS15DSGBdOEdVam9NPzVUYlk3RX5aRlB3amdXNjo2YFBJITNjeC5deCRiJj1HVDBFNSZ2NmZsdWVGbUsyfEA8'@;
put 'WFpFWXZtRjJsek5SLmRVRUhwXV40dEp9WmA/TT16SmhrRXNNSGZuQGRzWEg6bF94KGpTXnRNNHlXcl5xaXdRSVBDI0JDSVJefUVlRE5rPSVGYG1dVGJwTXpdXmE9VDVpXkZzd3RKajFDSCNbeGF5bERldCJ0ZktgeVQjTXV3emdwJlVjZGBhLiQ9dEEjZ1ZuNSMpWENfKE5vW2tWKCJGdmA7NXdA'@;
put 'dFNmWnlCaF85dz15NGoldzJLZjE/XjlkO1M5JFJPekoyIiEhdEFxWHRAVU9GeWdDJVlGaExxVWpuREhgXV01UmxvZko0Y25PVGZ0SE1UeU09PD9lXXc0TGFdU0wuZ2tmTU8sSV57Nk07X3tTJFVfUFgrJXVLIWFjRVU6bykwWkZkLE5deDRUX1lLIjRDRU5DfmtaJnRrWltFSTV1aD14ZH5sall3'@;
put 'Xyo7aUA/KkB1JTgwIitUUiNITjFFN15jLEBnTHleW1JATml+Kj82RGYvNTxpM0NMQUJHcGtYMXRFQCxCN0NwUFJJJmtKZ2dNKCxfcVhfT3I6Y35JZ29zOFkpckxFT28ra1FGSWxNc3I+cG9HNy9iQjJ9Xzs6Y18+M3prfmJqP3tVRFEldX1iO05Lel9PIlZwbEkwM35FaTdXJWh7JSNVRlY/KFZm'@;
put 'Ym09NHZ2cikjeVc1T0tAJkJ+Yil1aG0pIWtXZClPXUlsPXZfd09OdyNvdT08U110PjNHeXpMblNPRXIoYXxDOUMlTF0ySzRofmo6QDJiIWZAWSkpYz93Qjs1JGlnNkNeXnNUU3tEYGlOMi5tRk9rUGJPLlsrTlhneyYzVV5QNDRJWDxQNjZFY0V3NWthJG90WGZ1LnZuSiFRI3k+dH4iNHkpbTRC'@;
put 'fk1sSTkzTm0wNXt0bFQqSjF+NipDVF0pZnEzOz1kQGEyJi8pYzopJX5DdT8rX19vXnlsLHs2Rk5IcSxDSlchajlwX29AZF4/aDgsR2ZYL31NbF9JSXlTd0NdZFI7UiNtNkp1WUpYUDF3U3M+bzh9JD1YeWt7by5hXVBGOHIkPHUha2dAJX0jeCwmPztPN2RFdVFfbHQoZTd5PU1oQGtJRU1Vbn1M'@;
put 'PUdqPGNrfEEvTCtSLGMsbkJbNC5TT0doaWVScUtQbTdGNjg7Xj4mWGRKeis/I3YvPSltfiN0eHguSFQkciZqcC98WiFqeDBRL0RLLG8kIilzMU93I2RRRC83cClDbGpsPXExNyIjLk1fXkxOSnFPPTZHYk4lOz07ak1bNi9RVSw7ZzU4PjMrU1ZqKGciPFl0RlVLVUBlazhXNzNXSCU5Z05PKSJh'@;
put 'I1E0TSsubmJiUTJnSmZkcmpvPENQY1IqMz5NRiNzZUh0LChCSjsmNUpuUzR0YiR5UUVEVnJzdXc1bE1vUFlQd1BJbCJ3aFQqfXIsS2FfYTlqOG1Ld2pGREcwTU1zJmoiUVdgc2pSPmM1fG1TY2hZWXZjUlUweVB1fUVkLmxFdFhYPXJAT2UvKFF+VH42RzovaH0vJVQobDZJVjBRS3loMENfYTFx'@;
put 'YSMqQkYlaUIpRz9ZIjF+bGo8bmFaSWR5PUZWcThPbHd3KjlvJmBjOy48SWFKQyZJfWVfTF0reEZWam5FTGBSMzdLOH1ic1Blay59NlVzclAiWFA+RjNuTklGMVlCSE9rUEJjSzgmNE93TT91JWxdUFMzLGtFNipOLnlSLzdSOntbPFBqJE5CdGdvdXAoQUxpWltaQERbbns2dDNNZDM/Om5XMClX'@;
put 'akZTVEJab3t2Iy9wWnlNJTNpUkdNV3dabV9zUzl9RWw6cClsX0ZdKHEoYV1uelc6Rjc7TGU2bXo0ZGh1L2V1LyxSJGQ4YHZsOGRqJDpCNUg9dDZmenhlUjtnNlNPSSw/KnZrV2MkRSFQMH0+djFGbXtzRE4uXTArUilhTVBkXy5mcipYeDRxXSNdPjZvMzdYWD5XLmwkby93MnxQN05XImxTYmtf'@;
put 'QGhoW0whKWFAOU1XM0toLHZ6U1hZVjNNVk4uU2g4NyY8Wm0vY1l8Ty5dcUx7RiZwTkUsVGIwdDdwWng7QmNBZ0plZlouM3Rwe1NtZHRaYGlBdjJYPUxKWktFL15tdT5SMiZaanBpUDNNSXpJYSw2fUFoc1EweyRVVllifTQ6KklsZGNKRSJGdjtOJGwiQExqdDVAUVUuZ1RpQGlDfUwkTTA5Z30w'@;
put 'bWQ1JU4sd3E2JE12cm94M2dZbnU1OWsuWVJ3XVN7TTpzJElVMTckO3xBTXxLUko+WyRdSlVUY0RYJmV+aF9LKyI7bzJJMFdCPGR7fkU8V0pvOyhXam8iSCV7cypoIkMzd1IpSXdfX1J7djUxbiNdbl09SnJnOy8+ZFIifkokdm5MVGhTVWYoL0R+aUY+OmEyWjZxcWZkPUtQJHkwV15rZ28/TFJi'@;
put 'ITkjXlcsTE5TLHVTZUA7VFNjMn1QP0BCZzNdO0cwPDheOCVCZElyVlQvP0Q9UkIkTitSREZtX2tTZ012ZXBkUmVSTHwjcmRtL183aT8vUilbdChDcS5HbElOZWN6b1BaZiolfWMvPU5PZVljbmp9PVIvKjV9WHxKIj80KTIvKDl1Oj9wNSh6S1dVZmBaaUUha0sjUjEhQElZZk0wTiZ4XV85Lk13'@;
put 'bWw8RlE5QmxMPUwpaU01Jl8mVUc9ZmM3TXEqb21hbzZ7K3NMMX42TDg1UyUwb29jNSZ5YylFdi8pazNlTCFeeW9KYmxselJ3alhvUXZXXjpvcWBKZXVbOVkpSGJOcWFGMTBDNDR3eD5oVDhscFNZNX1WaClOTlguY3ddTzZeSXZkbHpjSndVZnpIYSQyY1V2SzNLRVBTMiUjVnxFNUlSRUU9NTg9'@;
put 'e1IoYzV6aUBQOV1KZlYxNm0zUyJ3VChsaHheKnMyU1B2VUpTPVVRI0ome3RPckEud3JLKjhYKlB+Ri5OSkZZKVE4cFFzVn1kR1RTZ0FDLD1UUTokZitvPkY8WFdLOD9LWCFwJn5wMm5fIkZxLn5vLElTLF1VdEVyTl1kZyF6Tn1PUXomdDV2JS5jdzBLIWskcFMhV1pPfmIyLnI1ZWk4O2QqY2o+'@;
put 'aSNyMVhHem5jM2pBO25XbkA9S1R0P2NZcEhPZy5OeVA6aT1gN1hIM3d2Kzp9Uyh7PFJvUVNDOyhkcz5lcmtIYDVlK3FpcH1PQyxAZyU4cV8oSzk9U01yJnZNYyQoXX5yP1lPcCpjQnE8S0tnOjJvSiZTLEwhTmFUWjp2MysmZ3spVH1mUk9Bc0tzK2h3YVJzUU4vS1giYmBhdEhyb3MrNk44QFQr'@;
put 'PStDbUB+ZEUyL0M5QlhMcSFwM3gqdVl6JXdAOiI5O1JObnUxck5UWFBwdmBzRHlPJldUNHdWeSRofiZnYyFdRlJMdm1tNitIP2BqPGl6YiEvbjhBI0A6MlBtQHFfP2FHVlJ7XjNrSypiKnh+IyZoeUBCaE15UHY7ISReNHN2bkZdYWdybDl7VVRZK2lqNUZCNXojWV8vSll+blNCMGl4blBHSmcx'@;
put 'NCxBeFRDLGNeNCNhcT1uNUVbSkB3MFJlP0s8XzZnVGNxZGA1e3Q5JVpIXUc+K01NeldXWyVIdlZSRmVtTm0iWz0kenFiMixFKFkkbSlzU116I1ZmOGtWRlZnTS5rTFR9XT03Vnxuazg6KGNBeFQlVmcseEEhKUJafTYpWDY7Y2Raal0mem9DdkVlR3FOYlprQWk+MlkqVntFUCtRVH1dLD5aPVJD'@;
put 'OE5fQj1KQiY5aSpIbzFbO2U9b2NXdlkraDgzKTpuVVUkdFFrOlFGbG08YWh5akBJMDpVTSY3eypzI35RKys9eT02XX5XdjgqKFUyXXd8TmZRIXU1QXZ2TGtoKy4+Q0prayVIZkxAfFFjV298e0x8XXEvUFJHUD9JKkxQJGR4cHtafkMxN1IpV1pJNS8seWRBe3shREVvVkFON1tiQ2tvMnlhOyhU'@;
put 'VmV+OD9sQitCZC80QnkwRFJNZ0F0PWE8PFZpeiFGbVI1az1nVHNGNUdadHorLzQ9N0cwNEdzSSl1XnxnPCM1UHZJNVlYcio3bllkVG5mXV17TUo4PDZuUEQ1UEVeSU8wQUFqPmlJS1ZgVzsjTEEwMX55U2JVKWo3PlB+Q3Q4RC5JI2ZvZlZfZkMqWUAyKFNGRGI0K2hIcSIraiIoI2JVSztBbntY'@;
put 'Qns+aGYzVGFqTDFtajE2cnNhVmU/REM5KGdrdnpaJCEvMStHMlVrYDBZYmdOZT9vNmxnKDxyYGdhTHI8PEdJe2VASihYL0hyXW5tVnhPOS5oPTR6QHtSPTgqLyF5ZzlRUjMqIWZ0QlsmTiFSYSlkI3s1VlhEIlApL08wPk0sb1p0STxnWG0pUWBqfiE0SzxqSUxLeWhuLkldJTB+T3c+eztlT3Rd'@;
put 'VGUpN24van53MVhpRnU8cE5QSnVxSUt9fmBPW1FJW3Isekw1I0w6XTAsXmcjNWwzWzM7TDZLMkkiW0hoaERIemI5MyQ5R3JiazA+K2c0WDNMKW0qfkw8eXUyPyZLeV1PK1J7NWFfQ1swUzwkYlIhcG02Q3o7NyVkXi5RN3dQZ2QjNzg2UngqXTx1WXYuSGFHN0YwMWJoa1ZCWWVXLF9FcUFYXn0k'@;
put 'RnYkaU9wIjNfYFVlQntnWU1WaFl5UjI9ZXpIW1QsLjwyMTY3c2o6YGI1eTJ8SVYyRT9zI102N3sqKmVGMCMyTWVSVnwufWxSJHlmR1s0cS5OOn5KOWVXWTpMImNoVyNfd0Usc0UpODJRVF1CKC9wWVFePiFVdy9PV15uKFtLeUk7aiopZEtBS0A8Jnl7WU5NPEs5VWElbTheRl5afVA/YzVvdit6'@;
put 'dDBYUURTWyF6S302MVsyaEBuRjtkMEpdYTRiaFg4bGptbkpAOUp5cDFsTThffUtSfSlKd3J0RltCeGYvJG8zOEheeihhc3g6ZHs3QWY4JGMxciopQSgkd0pQPUg1d2ljcTVqJnRydmdJMjteJVIqViJHYT5RXzY6Km9sNmAlVkF9L0dqUCpDPVUqPm9oOS9NLDt8eShHVmtGWmpPJFt6enVyIURC'@;
put 'W1d4PWVJUFZ4XjVleXhPdkAlZ2NzIXt8W2dLWTUpbjFdYGNNLFYucG96Iyt3JC9lRjM+ZShCI0lfMzIyO09zV0ImZk5INnlqNUA6SzlsL2kxUDw9dkVoVzlXLGM7JCsxaiRfeEJrPHNSSTtKJVp7VktkUWBZJipLcWhRQH5LQz4odXk2ZW5hdG89fn0hTDlDM2dQU0JgL09VfUZ8QUFQOCs5QCwi'@;
put 'TShGSTouXitJJiZpaSYhfnhNIkNGclhnN0FrTE1YIy98KWx6YnEkIT5pZHAsPyNvWkJuIWViL3xWaCk4b1lKUFZralh5cTpzfDklSkwxQGI+RCZxMGtWMy8ze2VCUWl+bjskT1ZXbXQpTVNoMjNKV0VXWjQjY283eTBvNCo3MXV3NVI2QFlWazFUeC9rQkUweyl+Vllwd1tecyYsalJsdjNJbFVE'@;
put 'a2s3PVVzOzVuMk5ndG86KzJMajZLPT9KY11tblk2I1A0fXsuaztaaW1qfDQhW201KCpyJmd9a0NEMDdWfTB+Jkk6XXhtYSl7VWZJa2I7e2tGPm1tQFVmd1lIYl51c0FYISZxUyxLSEBQZXxzLzJmQChGd2BZJHlQJFFqVG5HSDs4O0NIYH0sZmNUU29aSzBNSX5bUFh1fEIxcyFhJHJadH5wVTd5'@;
put 'SDlGfVNlZzEiczJsQl9JPk1eW09JPl9zbClRMHdMa1FvfFZzNWNrOTAhanVfRHt9eXF6PzM5LkdWYl9dekVed2QqWmVIYnA6T0IwYThEKHAqKCh1YHZMYTNrQCpsa2lFSFRlI2BoY0kzZUkofDV8JHRibSJDQFpfQGdeKWolKm06ZW5sITVFeTxUV0AvajtTNj8pTGdtT0p6QUxiYF5be0llPmQo'@;
put 'eiptYUltZUxxQ1IhTzZ1O2g+OEtDczhCcmA7PT1oeUdPYT59cH4sTUgzUzlSJkRDJGlZbll0eCspfHw7Z0dbWk1MP1JIYH5FPEkuM2dMWltFJmM6ZlpYRFJQKzhsdUZzUzZrRTkmIml8eSJ6TS80QVNVP1lydj01T0w9ViZdTmI8aHZ+VVElWVtobSpiaUZgeGlHMytCbE1NKF9lQy8zZFVZRSVy'@;
put 'cTo/VnhdbzVVVTs7RVhRY2N+aC4pPXtBXSpyYVF5WkRrRVJvYmRNY24pZHtzOEozfV5uSXZfT0ZSMk5BY2NNRlR8Yj1UIU0rNkAiWloicD8vcEhMZzYpVzw5WlZ7eXssL286Z09DQXw6ajR0fWJKdEcmbFNvXjJTK1RhPyRldj1tRyElKkt+WmdZK1gpbnpXfkN8ZjZFM0ouW14hUEN6Kj1mI3Qq'@;
put 'cjt6ZlFdTSVQKG1zNlkubD9PX3I2bEYmKzhxMDhPSU9PPHEqbUtmUXErRlBDNzJZTENVPiN6QD49bzt0Un09Mk82WDtCd2VgejF6UVc+YT9DTzdTWT9ZKVVNWz9bN257eSJjInhLUSNoRjxbKFYsJG5KJmFMVzUvJFJUYV0sT1tBdkU3e1lxNHxNOHE1QSxqaHM/d3tYKnhpVWdTb0g3eD9KLylH'@;
put 'XyxRISgzdjYqfCVRaFFTPD5pdjIue0hEJU1kSCp+Oi8uc31dcT5RN0pJUTFpa1B5IXRSdz5RaDFoZH1hSDAzR011UDNyJiR0XjN7Iy5ucn4zdCtIVVRtdWd4dHhKXTZ1SDB7PCs8amtmaGkmOWZFWm1wWTxjMmtvKERdOFFzT25XNWtucC8jZ2xVbHw3LjE8ZjFzJkYmd2RMNUVrPDcvNnpTc0JB'@;
put 'YXhUZTwlclNmcVljNCNLLHdzTld2dEgxMENjeXNyYEsleHgyJnQ2UXh8K1NLVFFXVm9IVSxWMEU6JmtPeGd9MntMQHpJY3xuQ1puNTN1RHVUfl15bHhocTdIaD53JFpgXixldnxzY1EhRiJ7bWU9S2JxfDxIX0g+VjMqZkZdWDtOYkNAeDMmeX58KjtdTlAvWVhbTyRDZ29GRzE6SDhrMCh1WzhX'@;
put 'MFQ7YztidWRZM2csYTRKa2lhfEVCaE5RUzxNa0V+ZFYzQ04zRTlsZk5PclZTIiNUej1gUUpQMiNRIkdmRyhHKl9HXWxaSERXUnd7OmQwQm9COSskLHUoczBBKUp7NHQuN3RPZCR9Nno6TCU9Yyx7YlZ9XkN1RFpzND0kODVLSUNxKEwoIXIvVUo6d2wvTEtwUkZNVz0vQkI0OUVrNGU/ITF0NVNa'@;
put 'MmUoWiJgQkgvZUB2R1Bna185Iz92YTlQaWx+Vk4mI3pDblhEeDo2M3VlX1M4TWJnfiQ4JGhxOUZzKyZzQlJkR0EkW2o4cW1na3pRKj5oY010TkhoY0YuVU5CeHN1P3laclojISVYbV5bK0tnenNyZ08vQWFGd1BXX0t6OlllVGNIWF5aa2llUU53blovfmJZc1ZrLHNOTVRBPnorTUxSbnBlR1U1'@;
put 'eFYxY15BRCE0Wng9bDc2dEdwTG47enJfIytXQVV5SWVWQndQNV1xey8mXmI/Sl0lYmYybSQud0x+Z05ePCxPcjtzTGxMaksjITUqblB6aTgiXjBiPSQ8fEJtTkNXTkgse2YqY3s5OkUoL0N5bS9ScGVySm1pWXVGamorMldQSmxPe0RbdEVuPU9UNWB3Qj95W0xbfU1DWXNiVVVKJUNxNkU2YF4z'@;
put 'QThiRSRGTF0vNUk7O19QcyFvNFAkbjdScGJ3cSVfaGBibF02bD9PST0jViVGT1ZQPDBEMDIxOXRDYEhacCg5PiJgKD9yVCZjfWBhZ1J3UXt2LGl7SD93dTN8K1NkK3lXeml7N2dQcFJeZUB4KkRMbjNeI057Myw+QVsxMTxjI00mfihROyY/Jkt8QjgkRkpnQz5gKyosR1RLYHJWNk0iP3lnKiU2'@;
put 'KWohczhCeyJWIj04Oi8/LjZuPm5JJldWNEM4cywkcnsqTytFeShDM2pKRlshcHwib1I5YmZDMnshd1dGIkoqSl9FcT0meCRqOTo6UkdFbHdXO1ZQI3tqeEd7VGVwI3FUMWJPaEtARExYSFBaNnlpW1ZgN0kmczJXaHdeQjxjZDdMQEk2I00/LlBCOERVKDhMMmYhLFp2YHxjSD9AeCheRGtPJWkm'@;
put 'TmhjTjFQVmVdLD9EVzB6WG4qYWFpIX1+Nzo/VCY8dld3fjFDbGtAYks0flkpaEllZDI3dy9HZjBaRiYlQDczSS9WWmFZaUFLTWQzLlY3Q302dGBZbkVjI1MlamV4UH0sJl85NX0vUzkoJDF3bkZ+fSN8TkNKX2Fma3hMcnd7KmM0U35tYFlfTjFYUiRDbX5nZ0ZfbiI0TEAoWmxSR3IjL340diFv'@;
put 'LDRvPFUyOjNnRypHL2paTXBsezBiUCg2Ryl8LH5wX0A1IVR1WTtWQDBvJD88eDpRUU44cDc9I0Eydn4zYy42JmoibURNY3p4fkJ5JndDYSlsLFkoUTNnJGZHenNsRUJKOyMpKzouNnJVSCFQU2BKViEwYmpuPSpjK0hDWWUxQz4+OHg5YSl+LGpjKSE8O25ONCpNSEx8cyFkImA8Jk40OWZ6dkB4'@;
put 'I0JmKjFgK1t6dUo7XnlpTl8pWz0lUyY0V1k8I3AvdS8ub2N9aFIhLEZ3dmNWMGthT2EyMHdKKWx1PUYlblJwWmFGLnQ5KG9ZT081JF5uYFVbI0tZVU5kWlE4P0RpfjVQNnQlTil9byU4Y3NGKzAhKnZgV1ddJmBZMjNbTEohTHl7LnEvPHE7Pjw7Lmh1JTtLZXxCfWEwaXN2dj5hQEUyI3shemY7'@;
put 'Ym9JOGQ3bVtCWW82eXxYODNnRS9Na2dLL2VVQn1ZcEY/Pn5IcTNPfDB6JXZdaW1yMDZLOi4pI1slOTJ+JDN1UyVudD81fVdbRDtCeF53QlRwbzkmcz1sNyhYWjc9IX1AT01tPTI4V1hzeWo/NnxdPnV3ayNLaDVGRHk2ZkNQeFhWP1BLO15AZH1ATEB8R2RfRnxRO0BYeiFKcUg4WyJWSTdFI2l0'@;
put 'M0wiRzNLcih6YHkzcCNgc1pgRHlwPHgsM0hmRSRkdltbc0UqdT9yMHFqfWJUIzZZeGd1N3FvKys4NXZjTisvUHs5QmE0OCllZ1l4Z1NMQz16ZCtfKXhFVyU4LCwlT1szVkUvKEZyQUNkfiF7VWc0MVl9a09RJE1IU0ZzaXksN1IlNEEiNT9gd3F8YzZBJixeeSNqOj9hRTpiS35daXZqSkIxOnJ7'@;
put 'blQ4LyJzUERteEliI3kjdWVOW3Q0PjhzUFhpYGEjdSFUJUk1RFZKRXVbTTZtbUc0V20jPzB0YFZ1bT94eFN3YkV+IWFeK2MuSHBAc1R7NkFHU3ZnbiZbeWFATGt0ej1teFQ1aWVfUyYhfi9aQWcwdGk0VVUyWXxqbiteO0d9TlE1fEdCZnxdMXh9Ul49UTczcWVyeW4oYT9MUit4JGREWlUza1Uh'@;
put 'O3lKa2tvaUowJXY1LH5dRSYwVm0lR3ZydEp3d15TQ1FRcm8rL2J4ZzFTIWl9Rih1QytOMHx0PXQpKktjeVdIKmlJRElWfEZOIit7Un5CUnJMe257ay5QI2pMK1swJEVfYjVHeWQmeWdaS0xCc3xYOnpEcjJ8RHBuLlArP1FbMzBHfFBIcFJfWS9ga3RsY2dZP3siaSFOMWkjWnBlUC9OM3E4UHQ8'@;
put 'Kk87aGNWe29hYV0vQ1NHYGQ/IzhRWjhFYVE9RW0hfDprYCtVWnQ6JTNRT0VjVjc2N2MrdmExdjB8ZGoyVWt8ImlabldYdnEwPEx2cmQ0bk4wJXVEJHhwajZzQmkpZi9dVG9YJj0wP1UxZ2RtPSZ+Xz56fmQoWTt2cUhyL29QVHRvMlJXdzs4bWVGViY7SnE+I0gsMGg6KmpBLGZXM3JMVENtUHgi'@;
put 'OWJ0XW80TW9EW3N8LlgzIXViekM2Xk5HaUJUbnk1LlA3PkxkIlAza1VOfVlDTD1JISUsKDwvMzNxV0lAVzZjayJvL1pKTSg7IXFDSXghOUQwSDZ7NS85WUFCS0BWSmJUfldjKURuP09Ibjx0Xm07cWdXOVV5PUdreSNIMEcqe1tmeW91MzIxSERmZV5bayNsUEplQnFzWmk8NF5lN2wufDIxS104'@;
put 'Vjo5Y3EzVWJHbzFed0hBd0M1S284fl88VW1mU1JsMz5bMltlP0pdJCxELyFlc1E4bUc+cComMGxyamk4W2F3d25xSF8kVzRMa2tnaWM6OkFZaF8xckdtYTFlV04pZjdXOGtdOFlrQUhuMVd0aFpnNGB5PHxpY3FYU3VDeS89WyZ5c1kmP0p0OyQpWEhmb31aVzo2WW9MMDBaYWR6L2lvPFlmdURZ'@;
put 'S3NUbWw1JUVkT1lVSn1HUlhea0g2TzxUbEssQzZFSyw9Qzw6YT1tYihtVThKbSFYJVpAP3s7IipLeyF0VWIqMlElbDQ+YUN7UWV9b3tDYVFtSi9dR0lTTW9TMDhbJTNpQTM3N34kRXQ1Rz9AQTh0K0BmI0d8aC8keSRYYnJ8Xi92ZzgsZlR1e2VQKkcqRG9JKTooRFI7eWdKYi4xNyFweXhHQDZg'@;
put 'QzVkbXgoSlU4ZnpOOEI8OV9xYDxJTV0mJDorbXBjLllJdldRTzR7TFgkOG5bKSYwOitDfkgqTChqRTpvczZHX3RnMj4vfFQhZDJefCR7VjZlRyZlKU8hfEJgS2FCb1pHSSxWKnVpW3k6MDgkRm8id1VgOjsufjZyMXhXfHI4SnN+bH5rUjpgR0NIKVtXUG5uOWE5e15DMiYjanN9cTZjWmBfJjZJ'@;
put 'c2Fjcj5oWEN8MHRCN3Z0fGtNRVBLVF1qbDdZfD1PO1UsfkVgc1VkdjY1WjZeaCZJSSFkU0k0NntnNXoramF6dX5wR1FJOiFSVEZ7a0hOTjxdMWJ+TkoxKEgoVHk0ck9PdDp9bFlDLD5gMTB4eVheSG1WX1BDMDFYZHI9JXtVSDF8fGdbXmg9cX4zPGRneD9bUHxURUlqYWF1O01aJGp5L0Z2fnU6'@;
put 'XyM5PylEUUBAOTxwWHYpQFQyOnVJIVosNzYqcmZIO11TTCRKeiovJFdnO31DOEVuWVVBWWFqS0hnKndOaEVfKiV5by9FRTghZVF5aVAqQl96fUZsYUJnLE1IdC9KSFg2OUshO11sPEw3I0ZMdFE/dFgsRjgoOlZvRjg4bTUkOkhYeTtlPSx2bCMmK0orRmwodm9sZ0giMzttZnZPJEc+Nz92SnQ1'@;
put 'PGk/U2okKHVNb1k7ai9nR2ZpJWhMelQ1KDxvPSxrPiN2dkV6b0pyTTNgIjxZMEBZbzI3OHY/Vk5BVyZjanhaNk4wNChobXxEKyluS0VUai5BRyYmbGp3UEUke0ckVDA8b31fdGR2Z3c5TENJPDR8TiFKPlZ9V0MxUDc5WCNGcitHSSQsOXc7fiMjcUw4c1V4KGAkTXBwWFA9ZHB1Qjx5dFtdfkJp'@;
put 'M0BeNTRGN0hbe0BGWWdoK0hBOzhUMUlrI2xYPVk3TDN3QChPZTsoYCQ8O2QzM14wIVc8az41dD1mb3klMTp5anp1SjMzJSYxQlVFRFkpI35dXn4rOVYscU4xMFJpZX1ZNUdILylDRkgseWhjRWUiYXM1KTgwTnZgK0NFLiE/fWlNbjZZc0BwSW9IaHJ1cUwiVEQvfn5LIWZdRn09TVM8JEdrK3Rx'@;
put 'c1h9YFleQjpIRkw+O05YRHBSRnpKV2Y9UUI4OVM+V14ieTJdamJySiNIYWQleV44c3I4d19hPnRuPGZmXW5HYWo2Ui46eWd4V3omRXxYVmQpRV9CYWYiaVs9XzNDYHdWd05yc3xocGdLR0l+P0JqOlkyJGJyblkpTHJ3YEk0K1I2ITd2aFgpcU8lIW9BYWQ7b2R3ImxUUmRhWnFna1BEXTJpSGp2'@;
put 'cFVTOjQ5cXteQXdgW2wzU2pKWTt1fjw6SV4zblZAZUQ8KkljWmdFamc/W147bWxVfXZDI1EzeUhPMnlCSmFmUT9zQGIuYlN0OjJgbjs5fFJKUj9OXzhTQmMyQitLW0o1JjtnWjlIMlB3NzsyaSIuWmFKcXNIIkZoXyxNTD4xTCxicVt3XX1UQDBfJSR8Y2xNIW8jUlBQNlpueS9UVzlrb0ltXk49'@;
put 'enV9PUF5WWc4b3QvW31TWk84cVJRUXBBQChCS1NPci92YCo+QUVKR01mV19DbG5aR3s2ci9QSz9jcyNkL3p3NGQiUWRQeEc/OUQ3e2QxcHNZdzNEQyE3XjV4VHZ1QVRKVyh7dWNEemR9MX44KiE0L2FUMWApUzJmYiVaNiMvVFtpeExzRjhCNmJFeShdai9Ka09GKzs4bmZOL29qXXdvTW4jMllI'@;
put 'MX1HJUlpYUNsb3dSRzpdaCZoK15bb3hIPjlOZWkxIT4kYHZPeSs9cllIIypSdkZSdUp7U0YyOnpeVldrcj5eJCYsfWp9dSFfOzorS24pR1g4bDohbC8qe3FZT2wwbiZgO3Y5VVVeQG9TOXlhJFBMc1N6MVZSWDthb2FJVz8/W3l+KDFZVCpRaldjKGVQPVk4KCEmMy47RVRIdy87Zy5KPChNOFhE'@;
put 'YUc4PV03PDZ9YWArU3R4OjBvX3UuYl9LImVPQ29Ccn0rLm9uWDViUTN7aEhETmBwX2s7ZXxPanIqPy55P1Qqb1M/VkAhezQ2OylCLG51VyZuJXU1Q357QHd4fCNyJGhJaiVxXz10KiJaRVRkTmQmdURNd15Db1tmaVB8OEZ8dz5mK1E1JHQ+OU5zbWIuQ0FMcm10dVFqI1MqfDomTH1ydXJUdDlY'@;
put 'c1U/fD9YVWBSaVJUfHYxajA1LktVIV94cis0MTxtUD5AQlZMUFtzV15fNExMbHZkWypVXj9JcXFMcHNBVkl3NjtbKCo9ZiMqQDxOXjAvdWxbOn0mM05SWHU6WSlUI2g0RV13bER8dCUwV15vZzExVDZpKWRmRiZJXXB1SE9oPS9WQCNGMzc5OzFEckdNaHZBOComIzZNUWMjZ1pTR0tCel9lSyo8'@;
put 'ZzpTaHtyanJ+b1ExdnRtRW12OkBFeHZiIiRdODFAa2Vbb1deUixPKHcuKiRabzcuYWJgRGFrck96QD5EUWZWWlQkbSN3MGA/ZkVpa1lgdlhGOiVXLDR1M3cmaTpaX11mLEN2O1J9dX17VShgQlN6Yk0qVG8qXSFCTjUuU1t9KDtJRHBgJmUqIV5IJFRofFsjJElMKTAuTnhyUkkkcXsvVnJVYVB8'@;
put 'b1MkRGkuUjk0VCxVSU0vMTBda3o4enpMP3Uwdyptb3RGRCJzWko6MCtZR35KKUA1XzJLfSZzTmdGSz5KWjA4YGt5cjJ5OkcoaVh7QHJsfTBWTngiT1ZdMmI9eiU3eFlVdGApQ2c8TkJXfHMqPytmSktOM21jMl0mXit5XmI4XSghNzFmfG1CKkAzXkU3P3lHNikkPFFoZTl+cXdrU1I/SzpXYWFC'@;
put 'KX1UKWtyazRNVj0rUGFObyQrSEVMOTc7dmlKMjxdcCFtU01NPnVgX1M0aS5FPU1sSG4/JktydzlQSjApZFkzLGdiOT80PWFEez1mdyhtbjV4e3VRTi9fI2ducj9vXztuRU9ubTsvNVI6MU00bUFCO28uTzB5T0RFLEw5Pl9VfDh0fTQrajs4czZRK2Uhcj00SEJYYXVFdFYxdUZ2YHZDaD5HQiwz'@;
put 'Z351NiYkQF4uQmhrZlk1YGM2IX5ITWJsVnJkW11HRzZLQFJqNUR4PFJrdjUzbU1UKENJRTM3WmR9XSp7SSs3PzYpcX5PTHc/PlpnN3E3dkNmJE4wd3c3Zz1IUDslNWRlKHFvNlRIYV0qYDUhKFFDSUJ7RmtHfTAobTBgd2IoJFVEZVZZMihdbkhXfHBxKXM5YStYW2JvVGReNSkyNjhBc2xPOUdf'@;
put 'eUpfK2lVTXNYJChQNl8kcykpWX48Qik1flhUaXJXOW9zTk5LfjZsJGJMKUJYZ2U5Six9cmJTIiwvN2tLRXwsZkd2V2ZMQlRkY2EyfjkmLFNXJD5vY1t5RnRJO3JVX2hNXX12ZjFUXnZpVVY8fmEpaHV1QUdEWFM+W05KMFdOOmFxczRVcS4iKF1LUWBEX2E2PHtJNzppY1g9IndbPCVqeSJ+fW40'@;
put 'ZmwvPHA6d214OmBTNTBPI2F9YUIpW1NrWnJhUCxULHBOOVhfR0MkdmBDMFhxR0JUKEUkfSVdUDpLQipIc1tzMHZGL2RbKCorSlYuK0ZERyEweEphXVpwb0kpakE9WVB8Vjs8VWZORUF1ejpjOSJwWjxvT2tPQ1MoaUw6IT9wSDY5WnUoYDA/VVhDNUh4UFp6e1lPYEdJLF13ZDxHd0pQTTRSW0NF'@;
put 'KztfaCNlOFBacy5UVjFHNkc4XjBaaChVPGkqNlZJTiVtIns+I2FZZjxHNyVhWE8vVHBMaCpPemFEUXFYVls3dFRLPVtIR3l7eDAzcWo0a1tFbjFscFhAOjR0P0I0bGkhU2F8Oj1rdUlnX2EzfjUwc2dpZllPZi9XXiN+USh8fE5TKGwuRjx1VmB4UDxLfSF8KC9SJDRMUixZYC80Tm5VdzJDbkgm'@;
put 'JE9jISFiclo1WSgpYkBfPH01Z1Y7I0YzZDRpQWZ9TXFKM0tVdExCKyNqVlBmUiFQO1ZSIXNKbHBXW1tieyw/LzxkbTNoMjlbS0o6PDY9S0tRRS5aKEM7V09BdzNvM1A0RlYwO343P1ZEZ2xMVm9BXUtGTF5kOl8iUFRlVTB6KWU5cnl5QG44LHs+dV0qPWJ9aVRPbWFdbXUrMF8jaCJWRFBTYmJx'@;
put 'R1A9b2kyKHNuKSQ2IkFAX2lPZCU0aUguUU5AZ0VoUGpDdXo2Ul1JPj93Z11eJi9Cdl1xQ0xzQnViPURQMHAyd3gmV3k5KilgRzFhQExMLH5hMG1XN3pKbzQxTytYbX5HOjZMU3NsITY1RipHREYpayUxaWcxaDwyWz9+YUE4fkZ3XytMcmdbY1V7Q2Jacn5NMFNHeHNPJHY3MkhTcnlZfE9yanY6'@;
put 'Y3hjMmJHKTJtOCRsY3duanRWW2xJZlgyTGtYP1lJbVdRSlhScyxuMnUvdjI7MXEmSG8uaU1MN0AhN3FiJXxdMCJFSTNWUyFjRlF6MDhVdlN4TVAyejRvVHMvI0ouO25JLDdhMUVfcF5XJm0jampyXTthX2hMIl4mcjEvQXhwUmVSQ3tJIiZPVVF9M3wuNjhiUzN+LkZAaGs/XkhxSWdmPTVlLE0w'@;
put 'JXpwREpmKlp0I0JCR2xhalI0UHJqQ0A9SWI9OzBoVT0oIjMkJj1uKGN6XkU2K3ZgMGZyaSMsU0hEPzpLcSt9IURpfjU9Kz0pV2FBSylUdDRmdnRsIXdHYnFedSZfJlk9MWpgaFU4T1hibTlJSFshIyNyODE+SmVuXnBHTSlpREUvVVokbVBZenQrRXQ8bi90ZzJ7VShMKGhdRDBAQE16KFNEPCku'@;
put 'amt9bTUsSXUzV1RuYUtsWkRoYyw2V0FFXWJNaXl3I25yfFkyZ29MI3VWd0B0RSZZSFp6SX1VQyxLWHhTV3ZAL0k0MHRJLEFRVElHRWtjKWoyfVtdc31EQjsmOCM3cWx6bmAjMG86YyMobix5T0Y8L3dTWVBBIWlCN04qbiZ4MD53YEtNJnczSy5hO3RCVWZJKEZaMzZIeld7aFBQdkkvfkJfakxf'@;
put 'QHlET05pbCNeYSNTX2A3YEYud0MyW2R6ZEsuM08yKzZvPVtqOUlSPUtYUkx1ey5kLCt6XnBgblFrTWIqIT1eRXJiUGovPH0pNUNgKEAvPiYjUjtObTpMVjVAXyZXQnh6LzxKN3FlQix6TlBeWkBoOCZRK0VuLzd0Kk5nbmIpaVt5XmpDRz1oJTEwbnt8MCphJDQ4b2UsTHEmKStdVXx+bHpbUW1m'@;
put 'RS41d296cFA0ciM9L3Aidzo/eFgoZT1ybk0kZ2xUJEpFNXpBKTpwSUt2fC54Q3t3JkVuN1c/ZXlbelFMLGZHfjtINm9DeHMjOyloNFBDV1M+UEZbJUsweXFPKzg4VmtTRFF+Wz5vYWF8QUMrUGlkbFtyanNRcjdDRU8jOEgyOTp+SVYsPnxAUksvYFFYTnA+NW1BRiQsck58MyZ0U1JUQG8wY21U'@;
put 'RF07Rl5DI05CZVAmKVcrPkdOQ186T2x5YWZzZjosRGoyMyNzK2VbaEwwfTkqeDliRGEpNjl8Q0MsOkROfDx5c0FYQkl3UWRSezlZX0ZbVStIQDo9PUMxeFFvPillbFRlW2V+QC5RXVRyS2IpcihZWyhQRkJoI1BbY3w8U3tIZk1pdVMvYTJlT0dkcStFYnwqXzc8MFRBYmk4aVVQQUtueHxmWUdA'@;
put 'MFpTb2EpWmwjeDlWNWY1TkJhVGJyLix0e0o4ZiVMQyVPQ3Iza0VhZmhlIyUmLFNKISRWbXZaTFAuNVRPU2NsYW5+fF9CRyxWX2c2PlUycUJ0ZGtgOlk6eDUuNjw+c2M0Tm5kc1lpY2s2TEE8UElbRVkhTHw2KTp4Xj1GL0ZfRWJmS348MWkvI1tQWG05NER+anVCX1BxMHVTclpdUFZFQE1XTTx2'@;
put 'bHw0THhHb2FAZDhuMkJoflB8U0BHSjhdalAoWWUyZF9CbiQyZFcsLDs2Y3hwKyFpQlJOfDVpZHc3WkRMUyYhLjJway5hUWh+eipUVkAsIVZjY0FUUGhmN3VKPU5jN2tVWlorM3ImNDkjblI8cTtpP0dAdmM5UFE4R10oLFhITWR0MVYzfTAsTXxacHByRm9lVyo5THB8OEoxWm9EMVRhLEB5fmA6'@;
put 'd3ozTV5PRzxtOGhZSjIlIyVlNUFzY0d8TlhQYnlPRypBNDxXcX4kbnw7MlZxSVpHbjV4ZW5lSih4NmY3Sk8halhUeVk7VGkzQmY8dDJMJmRLdCRyWj1PaHQzUUhxeld2L35TW3FRZywka14lKXgvQlcjSSNaYikyTD4oKTJmQldhRSg3RnJmTXRuOlNvXkl9T0RSVm4vfDgqPWJKbHpydmJSR1VP'@;
put 'OTw6dlZvbDIob3leJGM8OXZwMToqZ1swa1MsNU5peHRARmxKNVNDZ0Fna2VXPEBLYSx4aTp1U1lbKnI/aG5wKF9Wbm1VOkpZSnk8VyUpMHZzMi5saSFzMFtAfXpmYiZ4N353TGNwYCtYKiQsOCo1QU5+flBpX2kpMWdNLC8qTmBVWiRabHVQaFRRJEM2JDhfVEs6YXNHNz5FRkp3KHlDaX5qeDtU'@;
put 'Sz1kOH0qOjlHPWI2Q24pXXpgZUA5QF5II0pNbUJtOC4ublkkcl0rVF4rJWNYN0ckOTxYdWN1W1J3bDAiXiM5WG5vQE11Q0UvMnYsW0Z+O2lsJCtjOzRbKGAoPUR6Wy9OLmpsM29OL0dGSShtLEd5ZH4uVW5NWnBSTCZ7fVIjaUBWenp1Z18yJlRLLF9GI15Md1BqKm4wOy59dlVYNmF6JVoyZGIw'@;
put 'IjIyJUIrOmkwJGVDXTQkSSVwbz9VJlNsTzBPSD9bYUNefDJycypyVDV+ZGBOSXIxRlk0THpDUS5yTXM4IzFzKj4sVjt4RihmSDUqaEsmKUN8W1g3XVFnO0R+QVI2MUQrJV5sSVp0bEFVPyVJaVMiSTx0X1kzQmwheSZrejZPSUs/YVFYN19ea0U2dnFHS0Ezbm19cTdjRHM7cEZVTHpXeTxfW0E+'@;
put 'QGp+XTp9PE1jO3t+RFc7YkRYeCEjJX1YMHZbI1B2OyF7LmwjaTJYQVQqcmg9cXR5RzUzVSJ5dDo1L0xNUnsrKVYlcSJzVkQuXXlpQTozdU5nKy5KekJwIkNuUU0yaERUaHpkcCM2eTtuRUxTYFg/fGVzekhQPzZ7XU43eFM+KTB4KDtyUzxdbk1RaEV2VWdgb0dHYWpUbnJZZV95VEIhOkM3dSs7'@;
put 'bC81OWU5bHM4R29oYiRBI1F8bisoLzBCejVOOmxrcEt0Liwqe2llKCNaeTZjI3M0SzJRb19TKH56cUs5V1FreU8pdXZ8QSxKY2J7WFJVIzdjeDYyZXFUYyNNfWJPZXF+LkBPZFQ3Kl5ZVWFXZXIycl45XTBpWjQhX1ZoPVApV3sueF1iPz1fbzZtbiFRVHRUXSxhYSwqJTd9OVk2IiZYWlchYjxA'@;
put 'RnV7TUhOS2FAP3lgdVFNZ1Y4N1VrciZOb1dKUjJaWjdIPy5LemUzI09bMEx+aGxlW0NmYSprKHZXJmwheUdqX1grOCphY1IuJFpFZ0xbLHZvWmVTJiY9X1ReQm9jQzZZcTk7Ykl6fSRNYG9pb2JmWCh2Iz1aInNGZn5FVmArL0doQEx+VWVKamBqdSN2bkgwX2slRUtCUlFbTlp7W2Z9TyZLTyhU'@;
put 'azZFRjBCQzJ2OXMqaSM2cWp5cDUrLlEkJWROcUV9UkohZ2ZgMSNPK1VTTXtJSmxNLCQhTCJuVHRCMFVvV3gkNWE+a3dAQUtJcUh7S1ZubDI0RWdJeVVZOzkjZjVXdjFqUlUoS2BUJjxYezkhSEtSTXJEXk1ReGg/I0lmRE1HNyl3QlUqaixXcUgqa3h8a1tvWnhzNUNHZXR9QiEsSEldL10yWEdB'@;
put 'c3g3dERDYW8rIn5SVj1VY2puTUIlbWNzS31dJlYuQUspNkB5PWZSfiwpKnpIcCwkTUNORmIvaS5jPnhsJTRTYmVkTTZpSCtuel9HODY1amNETCo9SF5nP0RuZ1NNMHkmKlg2fmMmNmVOazVGS0NGMHEodShXc21+ZlY0eT5COUooczBiIUxrWDljOnBafX5XYVZlRjF3bl5mfHgldDpLPz1neUlD'@;
put 'KTEreGFuQHwmKF9MZUt5b3ssb3UmLHJ1dGlTb3xnQzhAZHMuflFUXTU9ZSFlMmFXQGBNQURvY1svKmBRIjVVOV59dG1HRkJfRXMlQ3pbIj52VntVYV5pQkF+LjgsckA0eU06XU1SMXciOTckKl9xeyVhbHBsdFlTbyl9US5NSF8wMnxVWHl2JGYiSWI3QzhKS3huYjgkYTxwal9oYXk4fCVbQDZ9'@;
put 'ZHImOCRvQ2VSKU1KZlFyQnk/QV58aiEzbmRFQGNSW3tEQ0w6QEV0XVFKYHxSYnI1e2RkeGNyUFI9M0Y2eCowNEZ+NGxiVURsTE4mUGc1Ky4vbGN9YnJbNmlGZWF0TngzU2pmPHpXRy4zWSQxTi5wQ35kaEZYfnVQTkBYeVdmcipwaUdEYVJjfUIpIndlLHxdd01oYT9+bHZWS0xfR3dnUWhYSXM6'@;
put 'L2ciXjs7fjoscXtIP3tbTyhecShVdyt0bFFfb1pSJW1je1J1XTQzIVV+Viw1PjJ9bkxifGJkX0NsMl5WRGFjKXQxZ3RKM3g0KCVDdlFQSmkifWM6ODJlW2B6XSpYeVFZcjBKIXkwb1Z7OVgsIXRINmVGJGg3dFZLVlBQVFdtaSReVy9IcEszdV91WkpVLllrTkQyLENKLnhtUC5zRkIxLGlTXXVw'@;
put 'LlEwP3w7Pn40SG17eGJGSS86PlIrYUwiPDkiIlNyOn5vaCNtTntqMV9sYV46dCFTWCFjbWt7VXROS3QhZi9IJlldPk07WEkycHJ0bmx2aHB2WlprbiZDM3F0STNATGZqITs+ZU10I2VETlV3SUghanB9dzZpW28uJWlZQXMiQ1tWUi9vamlvJHtbOWJteis8S0BDTUcsV0YjKWtrMmpxP3AjTjMy'@;
put 'fDdNWiJfa2I5NzJRWDMvSVlFRTpOeyJoYyp+TDBZQlklLkNQQyI9NVh0PXRkcnJyO3YyMywoNTtnXiFwUzBhZ21YQi9MQGg/X35Rfjc5eGg8fE48ZU94ayRhW3BfKS46UiteKkNiN11tVCpZR2U1PlFgViFWciN2eF4yfUlaIUJNY0Y/ST1UaTt3cWIyXUNea0Ysc2ojRTNSISJzc0k4YX42L18w'@;
put 'JFA/NzQxT0xuY0lmaXQxeFlkOHc7SVFkWFlrQnxPPDx+JlVoWWMmN3dWRjI/MDkvLCl6YCEmW114c2dDcHR4MjBydDs/ZzhzS1QieTI9aCxKdV9eeW1JM21mIjsyT0BERVlCN0QhTUlia2cqZE1OUk5UWDBqTzhJVF08JXwueEY0dEQ7d2pJcylDPUwmez4pTF5ZVXR4PCwsbi54fn0qOlJjayY2'@;
put 'Ujt5KklUPVledTtAI3t7IVt3Vz0vWFJ+Z3llVyExamdJSS9UdD0wUl1uaWoyRV5ZP1lVJWZGQ0xSdVdidyVJMWF6fW0+KnNuVDxOLGIxbzRdNFh7dU5fJGhyaSl4T1UxSm9kbyVpeiF8dzo5ZWE/fTlDayk2Tm5XeyhjZ05kKFJIfFJWQlFefHs5enxUbjI3OEc1LnpbO157YUZpPmp3ZmQlZGgk'@;
put 'QVhHR21pVn1IcFBqPSNYb1hBZT9VczN4fn5kTyQ3RjU3NFdvQW9nVm9FUWZoJDpMdlVLL0NfUmJ9XTlSfDtgWj8mY25EeiZxY0VVMipIISxvXmQpdEQ9IXw/RGR1cT9Ab0tPNik3PiYqWFBwJm1qJGtwW1cpcX4xaj9bYTkjaWpOUWo4NjY5QSRhJDEwU1NQQTIufXBwPSo7PH5mZnMuTm1gfFVN'@;
put 'K2tRQls5UHU+cEVIN1R9JjFjWkU7e353R2F3UCFxIUdSdlF5Szk4YDJ1WlImdyZnXiosPV9pP2lRZXd9UV9eZX4kQDU0TGIrT34xQ0JPYjFga1VZPnJzYFR2dFhWeUFSUCFuNHcpY3FxK0hPUEU1KFB7TytfV09AWWNSRnFfJXgwOihzMVhdVHhURyx1bm5pKGZ5PUR3fUdbR2FtN30rMD5ySVBD'@;
put 'LFlqSGh0bzUsUCZOeD9OYnZKWUFpcmxNQ188V2JQUlgyL0h4aUczTXImUV5raFNdL1UuaCksOWxkb2FXTn5EIzVwKWRYfSw1bEFpL3l4d2Z2XlsvQD5JYVFbVnlqPmZbWmMhS2VBP2dRW0VmYDNSeHhxUWxvb3EjcXBocV8qPDJrZjBPI2QzUWdXWTI5KXV7KWB1TEIwfDs0ekoyLEduOTsvb3k9'@;
put 'LlU0JiU/UnkhMn5FVEVhQ3AycDt7KXE0SyZ2W0tDa01MJjV3XWpFbUp0c0ssO0NSeVBaWSxOTXBidVQ/JFJ3ejo9RiFlQnprP0VdUHdqRy96JX1fdCZfblQwZD4zUTJ4XnxPWzg1KUQpWzZTMXE0Q0ZPRVJibTF3X2RdNl13Ik45bShnclZ9NkBJdlVhREUjT3Zwdz5GTURSKVdMNzZ+TTwqO0Q1'@;
put 'dXU7czJIRzxWNiIrOE49MjlOaGRwNm1OR15jYDMzfVYjT2xAJTtmSHRfZFYkWHApbWkkaSpDQStjOmBzU3VWVVVleFp7USljKDtyX3s5b044PTNIQ2tLL0RqTnV4JGRuS3AmemM8SzljNU8qPntKQlJOKnAjUDN1JF56bElPb2VpO3JWZHxDSCNsTjkjK0xtMjNGZjskXTF+MV9AP2FKSiQ7O0s/'@;
put 'YnVSMTZXMVg6OmxwbDEob0BeZV0wKiY3UTtgXkI1cSwoLGF5fXdxKHdTNVVqVDgyZyxgdF82aj8mSnU0Uyw2PEUycUJ6aDZkJktCT1d1MXpxPE02fkp2M0lXaEtWdFBFI19qIzNhKEtdY2BBKFtae14vNnhvKzpxMTQ/PF4jU0dCQncmMXAqP01qfH1vKmBESEhpdmN9UT55K196Izk2cV4kSWwl'@;
put 'R3lfcD5AVGp4WCZGaVVSZWY5RnE3NGhAIUEqNDF7Rz9JQjNlY3QjZmx7Wl5ZY0U/Tj9FblRgUX0rNGZROHVDIzNmeDBKbGsvNmVYQFtBO3kqb3orYE0+d0woUzIraWtPQ1B2b3o3d2MqJCxObTsuUy9vKkJmfSR4eCZXXm1AUkRmZFNMelk/anooXmVYO19ReSpoJG1YcDd9Wk5WR2Z0JCw3a2E2'@;
put 'cDl5Yz12VGg1d2ouUFdzYElTQUQxUFszMGx2Ymo8fWlNOnRFIjU2OSVKKzt+VGRsZzNgQyN2e2ltLl04Q35DZD5taTw6OiNaZyVzMXw6YzdMM2c0OGhvYy4sWGhwaWpmLC8vRmdKVFE7XzozTHJZS0JPNHxSUndFR3BFQ1p0RTVSKElEK05DaHgwbl9mdyg7VD1mRjc1cndYdWFefVFTfiMrWVFm'@;
put 'VyNGTSklbiopPS9UL1JgZyNBJjtiVVA6ZzJxXV9LKnY1eitvRm90RDFEOTVrb0M1MiJEQXVHVUp6QlNtfW1zQWxiMSsjZVpqVX1MMklyKVUjdEA/aWNTcEBRNG1FN3JqMmM1YEIpd2FpK2cvMHE/dWNDcT87T0Ysbm5kVER3Ok83RDRDfVVPN29zI1AvbTxpMiIvc2hBdy9RIVN7YT5YdTcjSENm'@;
put 'NEh8PkwweWZaTG5nOXxYaGRPPjVEVSg7XikwRTwjVzM9V289TV46ZmcjYWI+Q3MrcGVEOVIwQFpzdENgMTYkckQvfmB+QmtmUGVoKkpzYCh0K2F3dVlaLGkrYXR5UGpCYUdzdlNATzo7bSpfTE0jU2ZibjtxJlN2V3tOX0FzfCNgN3osL3VLJix0MEV3PUFlcyxeLEAjT3N7Mj9VW14oeTYldzVQ'@;
put 'ZzdlVmo8JXA4XlYydWlvRXlEWmtWekZYb1s/W0A6ND5eXUVsaj9ufTNaWy8pNmY0M3o0MlFlUVUjSGRpYk12T0h9bnFJZlV0QlBmXnNFaDUpSEF5OnNPbFlAJHhIQzQlRXMlUysyQGpgYWMldE5DVmFWNEQoO09jREp3anAod35WfEg4cW12RTE/NjJVR0p8YzQ+QlIxcDZrenRHb286cXMiXkJE'@;
put 'PnZYfi9qOGEvK3wrez1kS0kmRGtfKGtjeiwsemVpcngpZ0JRXk9wMy9jZyZKM3BZbHIzLjNKTExANDJxRXpLRl92dXI4YV99Km5wOTtwZH0hYHhvc3QhZWFrdDF0OWVyJXpIO2FmI2dFeFs+Zy9Hb1t2SHJaKkpOcldbZHd3Kit5LnkqPU5JTVFvSko4cmh2RUtENTRvSykmaiFRPGJvITlIKCpe'@;
put 'Kjp6My5mQnhYaFZ3a300TGNvO2kqRnp6IzQ4IVp9OVI0Q29dY3lTMWNYT1d8RWBJYUVJPiRhNmY2YWU8Z0JuPXJAO1c/JGBubiRebDVDP2RUKnlvckdgSHVfV3FoQmVIaixbUlQiUm5na1pvMiZwZWVvU35dQi5PImk3ZTZwMjlYRGk4VlIkI11VS1B4NmxvVW1BM3x3e11eZikya2kkQG55PkIs'@;
put 'RG1XfUd3RitaNzxUJCtlXldyT3tZJF9YLiZBWi93cSpkbjEhIk1hYy9SflR+cElxSTo2bn5lbkNKLFI8VGJoKyVQTmw4W3hnM35lJlBWLyEvK15RVzUqLCFCJUt5akNbLjxXektEKSs8KCJDJCZxPSt8SiR4LmZGWnpaWi9PN3ZXSSVzPEVgWUlZMV5JXi59Q1FaRFBOS19NW152R0ZiVUJlK0ZP'@;
put 'bS9UM1hJWDpDRm1OKDltJmlvcXdwRGUqQmAyKSppMTgwcSReKW5obk5LWiNUVl4/aS4jO0ZQOSRJIyoiKlVXQTFtQ3N6dGBTT0orKzYxfGl8PUNWRlZnQCg6SW0qQ25TVFdRaUZiVDl3bnl6eyQ8QTVUcTRCV0V9cyo2dzVOZyU/P2RLVzEpQGoySGdRMkNUKioxZ3BjNXArP0B+T18mSGlqWVRA'@;
put 'O1RIeFZbSz1BdVd8bmhwW0p7M1tST3JJOCxeWjAwT3BIelRjWzMhdDU2XWQ9TlNUL2t5e1EsO2VjZiEhSHpYXXh0dk9ILm5iZj8sflB7I0FBbX5MaF86SUEifCUiXkh0WlNJeXpfQEA2cTBxNEBAUCtlZk85YSIoZjdiMCkhVFVyIWdga35aZX1tbHBGNEppSlQrOVhBLzEuNDU5ODZNTVZfU1Y5'@;
put 'WFUqa1s8IX05TzN2eyg1SCQvTnsmSDxfb0JJcDxXPjZSYmlKanUwe3c4ajJ4KTdCJFV7eV1aPU8qLFV8YVYmJnBSckc+KjJGK1doSDk3bDpSR1c3Ljs6Sng9Zi9yal18YStxW2t2Y3hJQnY6bzp1Z01YNlZrcTRTXyF8fSY+ZnNra0hYbyZoNW9QQ2U2SF8saSxqSkhYMzZ0YHl4LFF2SzBjQFRi'@;
put 'dGNkZUJuNTYsK1RmU2JOTH15a2l9LERURktGfDd5c1d9NXQidyk2N1dTdStzQHRZWCxXSkE9NXlJaTRMQWdGJHsqZXsmJGZPVndJcT1SdSllViZLeEplaVJacnw8I3VVUTtiI2phUzI1QF9VTkZ2e1pvb0Jge1EvLkhZNHRGKiYjTTRvcGRFdzhOXXNYI1tbdT1aZkcoVDpXOS5QdkBGcGxyV2NZ'@;
put 'Y11Vfj5kYFV8Yj18UVNbcD9wL242KHozQ0JJNSxVKih0bSl0OHNoKCRgNFd7WnVfK1pWRlkidHldbDF6YkpzLi8/ZFIrZjtxTUwoOGx3KiRAeDU3Kl1OVGtTMVozLFQqd1NlMjIjPkh0M0czKm5GJWA9ZWNhMy5TKmUuN3xOL2g3KklHfkV1cjZEM3xzJG1RcWw0d0dVOCZXempQTFZ+dTM7aCVp'@;
put 'KkNZSWs0bV4sVDNGNzJObXFwbT83d205Vj5jO19Gdkp0MTI1bix9U2IwQXk1NG11PDI3MDYvckBiNU4qcm5aPUw9YUwrVyFSIS9WUzRRelpLWW4zMUMqMXhfY3htJT4oUk4iLHZTeyl7VDd4JkNmQ0tHJUwqNipAUStHfGtPfkFyLGlVS0l5elEjLDczTGZPcGA1THMmaXY1cmM7Vi9yOFpsTmNT'@;
put 'JH5neE47JXM8VDRNISw5KXtgMUd3dmt4TWU5Knp2PH05K1tMXzw1Y1lNRlZBUlFQJmZdKGlNJV1xQkg8akNHQjV4Tj5zKUI0emlMYGB6djVTbixHfVFZVVtkfVtTcEwoaSpYL0Y8ZUQ8cmtXXS8jT2tPb3orLzgpdCxUQ185cld1QWRGdlFjck5mVC9wRWhCR2hfcV8hOjY1dTNZI2lCfjNuTDJj'@;
put 'b2NENDchWmxLKGNhaDMxMWJ1c1c+QmRjcVZnRXM5XSJYYDx9NGl+LGlwUiU2e2VRTWQsQCVJRCoiTlNDWCNqNUZkfXEhQGRsOl1NOnJ6PEBnU0BpcThnST8qbkdWXihleiV1KWt1NXFAd3VpYTcuTEBvbl1nNnVvOF0wLiltMTNXSTVwbmR9KE5TM0ZmZmF4Li8qIzxOT0Q8Szg9a2I9ek04UF9C'@;
put 'UlZhKissVzdRdiJtJW5+WzFnW1BjNiJLM0JxUSFydjBkTihVLkQ6T203WTk2IiRCbyVQc2ZkOypkTl4wdnspXSplUSw1XS8lSVJ5e0YzO31eZWZASFFOTkRKLElALCUjRCJRV2tsJFksVzFpb0NtNF8sITtCLEtkRzVpTyFAMWFFPXk6JnFmeXhpbE8pa1NMcGk8Wk41JXo1KWk0RXBFYyVHXlFx'@;
put 'T1ZYW0x2NTZWQyNBJVcvIXRLOH1zJkNuNSteeG1EOG81UzAqSyJAcXd2V2lrRnJDKmcvJEdqQmwjZzlWZnNfMERSLG5UP2lvNCMoTGtNUnxmZG1lSFVJRiRpcH4paEJZemA7dCxWOlskflpEXk1rQDlLZyljUExaOEc2bD1pM21sWi83Kjo/JltXQ0ZJSWtpT1JhdmElPC5NKjpKOis/W3J2P0Ro'@;
put 'XSIjJU5EfGNIK14mLk9WcGhibGV5amdJc009UTpkOGY6W0tERGJNQGJsWEYvNlpBe3oobnE0OG1jQmp4VFBDZHhRI2NaPGh6M01EeitzPjxXbF1EcmRPOHdSZGZpMTx1VihwRFljVUdsd2wqMGdSJlpFV209fUREIyhQRjZyOl4uekJ6e3diMmVRZGdyPTFhfH1DWmY2Yjd5Y3x0bmRiPkxnfktm'@;
put 'VFlrKjNlI2dUTS9fNjN2PHFIUF1YX2Q9UXpFeC5TODo9QE5nK30pY2hdRlJUSjRULlVhdVohVCwifCZlXW9uIVM/M1M0MWJsZVAkWipwfV14SUtCL3Q9UFk1a0w4Y1lEY0ByWiYqV19AZWQqXVV7dTlsMDUhPyFPM2peXzIuP25NJEBfU1lgO1dhcT5mXXooZ08+ZEApQmshK1lhWDE0cmN+Inps'@;
put 'OCE+PktvYmtyVTFTbHh9MDheOiU4WFUyZGUiW35uakx3diJwOShWZiQ0Qi4wfnR2PlZQVEg2QX5IaTkhSCNYVjNrWSxyeyw4TiFvZ0AwbHlnZVQxaHgxPXB5TWZIVF0zQiU8eDdRUXcsKGE+b3E+Rz5pb2FNJVYlIik1cD9kQjZgcT45VXhFVkEiJmo7WnImOjRsKV1PJkE+VHUyIU13bDArQmpi'@;
put 'M0V6N2VbKERhdihXV142UyU+eG5ZRzFtVlhiYDNMcH0qd3g4OkJlQSRvR3olOVZCK3JRfDByXiVvVENGNXpZWEhWZT4xRSRxUmt1YWhWRERHLjNWRXJ2MTN6YTR3U0F2K2tAfT9HaFFnXTlJWXx1M34xZkUhNXQkSDsmZyEkMVEmajkrZE02YEt1M25GL1IuTk9Xbz8rJXFlcHJZLnhWZlcwPylh'@;
put 'Z3UiXTlZZTNMJXg+TTB8Znh8SFd6dWw0YmVVc2c8LlpvXjI+XlFzdzpLcmgzXyY6fWk5XnxqbC8wa1lRJjNKfUYyUzp0UUlhOVgvQ2dxKjIwX1s7P0xwLkxuXzhnZiNpZ29PTFF7NVhFfTV9Wjp2Rz51N0ZdUXdiMXxkeXdYPGpCNTx8Z1ckZ3B1MTBZSWFWS2hbU3lDZzJFd287Kj14I2g2anNj'@;
put 'NlY4djlYcyxtQnI7SD50bUhiLDpbb31qNVJGdGdmKSg0JXk+W1tvJTgmbFB4VCt6Z30/OHprRSh8U3ppa2BLbj96dmQoMH1mVDpkTWhxODFESXhbWmZ2cGglc0MuVU19Q0VoTHBjK21sOXRwSjJ7QnRBZmZuSyVeeygkdz1Jc1ldcz5XKFUmWjV+M1pkMGBfR25ZcT1qdzh8WENhLytWamlqUjYy'@;
put 'Uj8hdXtjSUJrcVJSeVg2STMrUTxoellqb2NpNnNBSGlxbVc1a05bcFdxRDtHYXo/KSVTRFNsZFNmK149S1ZTMmhXUDJxLEs8fWJUdy5kZyNyWmxVO25fLCxHSk1xKGNeM1d3fStIS0c6ckx0KEQlTzB1eUUjZVpENUROUDtbKyomNHomJFhLaXppSCtOb3BLPCtHOX47dUc4WjA2PEZIcEtBYCpG'@;
put 'QWlXM0g7eHgxL0NyPmQzSFtMek5UNi5zZFNkMFF2djciTC9UdzA7NH58LmVDVDp3STR0K1pyJmNgdHN3WWBPcG1jLlBLUHdvVlNibEpEaFlQN2xzfk5jU0xdW20rfWR8TG1leC9MXTZBdE1WMXd9TSFWbX4wVS5jd35CO2FEcnV6Y0BGcWkoakc0fjdjWyNHZmExLyIsfEtHMFBEdUh9ODFqYEM7'@;
put 'IUtSQmE1I3ZKekBFNHJ4LiRQTWl5KlZrcytocShNaU85UnZpPlpaMTlTMUkiZ15IJFptaUdNKEBYe0VRZm5WL0xPOGFUfThTM3lKIikuP2xaSmhaQ1p3dG1kdlE1PUM3c05IQjRfamZ6OiRbdlc/R30zVCZWV2psKCMxMF0rRHsqU05iQmFQZ2t0UkopInd7ckMlWUBWcF00fGo4NVNrST81JHxk'@;
put 'KyxWY01MMT00YEZ3fDgoI0tULHFYO0FMbClyQHgsZywkUzAxQFJ7OD42L3JyTV9OM0suOkp4KnFDLElVU3AhVlUzI0xNRyRjRm9EdiwleHA0WVA4bWBNSkFCcVA3MHUwcnJfJjM2UXVtKShYNTNFMH1JZiQxOGllbTQ5QTdVM3J0XUF3flBvNjY0VTwwR25IdWwuVzpnMikkUjJ4YXtgTi99MD1v'@;
put 'RltxQlZrVGVVNmtyczVMcFRrQjxIa2V5cVhUQWNbW0paVD44JWhfYFYieiImS0kmcD9FMXc+MVtRan4xdW9STFB5TzdXa3FmMngzdmFSVHs3YCN3Wm9RYmRQYTMwJXRfWUA0QHxhIVkjMG1QUV0rXk0qTEVGPilKVFhKYXprSilSUEFwQF58bz9RP2JkK1EvT1YwNHw7amlDOUBQVlhNJjJefXBk'@;
put 'SEJNOlF7Z35eWj0yT08yaWdvIXYiPHx5MzVoQFZwZVYiXWQ9eDpNUTtgIlkzU2tuazMkU2B0bDBDTjEkIkBPbSRERDIxZ2Z6UHl4emNTJVY0bCxQezMkaUhve05vWyhEMltUOXg3NUJTOFNgTiFPRVs6RCVQdEV9OmhxZFc8dH1ZMURXX2xmZ2IoIyZBUTg0I2NwLjs9ekhXSHtmdmN1WHBkYSt6'@;
put 'QXtsWDhQYDhIWnE2K21TTiNUWigzXzpbeSs+a3coLkVsTnR2M2BDMDQyWlBvI2hgcmd4fWViYk1iIkFvaiZ6eVptRz5BV3dQb20xSGFpantFImRrKW18YnFvO2xLbFIlRERaNmtyeiMjKi5LWVp3aVFZYjQ2Qy4pM2YwNy90ZGQ3aUZSUnhpRDdAemkwIVo4RWlaU28xLF0uVnsmYU5peGQ1TiRT'@;
put 'V104SWk7ZmsjJVd6YHZmWnxDTFhOaURQN1dnIy5Na31YVyM9SCpDdjhufVI+TzNFU29PT1A4Tnh9T0QxQVdtW3YjPH1DfnZjMjpJdExpdjRoUWBKbGAxcH1oXWNeJmVbMl1mYDx9QFFgWjJhPno5dXl4XUd8SndjP21gOWQrJlQzNkFEVUVDaGhgMlRyOlNAZmxgI1QoQnNxX2Y6YUJqSzg8ciFa'@;
put 'KWIwcnJ7TTlPe2JOPm9HXjNyJkdNR0tVO1Y1MV9rLFoxYjN3YSxPQSsqXUVJY257JiIoVTo6JGB2dWwoe0NrISk6UiRhIThEbS5RZEt7TWEsUDo5XVYkY2dzOnVfJFg3ZCt9NFJ1Mz92ZEA0aWw2W1BFLnFVfTdjTVB0NzB8Y1NUOXpGeEMxailBIipzZkdaIyFjSzg6bkZaRU5hUlg4X3ssSWRQ'@;
put 'XTI3cVk7amA4U3gwW1NyRFUoY0pIbXIlU25UJCZtJVJZMmRoPTs+U3w1K2gzKS8se0VUL1RWcHEwL0FNRDNQREgsWz5tZzp5dDZgQkNiTi9idkc2YjB1MCo2JF5jSG50UHZRc3sxMzt7a0RkSDZhTUY2V2hodzMlMW5WXkxTN3o9KVcwczNmaEFIT1k4X05mKCVQL198TXpLNypZUCFvNVVqIyVb'@;
put 'VytWe3pZbFBlPyQ1UiN8ezZzcHUxYTYsPFtoZSRxeHM+dnpSeEh7S1dGVzUoWztmMzx4VTowK0Q7YnUvTUUzO19jZnBjWSkkdl4xOUQ4N1lKZnw1V3tJXUZZQyMsUXY7QiVrMCs6OFBvTjZzNV80KXZpaG0yNy9Ia1loYkhBVVNdPWcsMyVqJTc6UXc5KjNfPVdeT01+SXw0VXphd25yeT5UfWVq'@;
put 'RyVxemchQX5XKl1OR1dBKDc6VlcqLzxoQnVBanovfjg1N3FFbUpgajhrYWUlIWRiZiN+aE9DSFk0KF4zJkB4YjBDWnxVRWViR05MNnx+Y1N+TSZoKjAoJUJAYWwwWX1JdEZIPzMyaVgkcSs1Lygje2kjXTo9LkF2d19XSkg5PFN3JSt4elhgW2hpNUc1aVFfQzlHOmp1MUQ7aElHbkI8V3l0d2I/'@;
put 'L3N5Q2lGLEJeW0BEaltAKX0odWBAQWN+ZTwicnFweEQka0N+P2tSSmY/bGolISl9VGRdZz8uXlJTPWw3fkhTXjRrdVcjeHFibF1SZUg+aHVveDNSU2dnXTBPRl1Tc09ZIU9RYWF3cyMrLD4kRntBOn1QLztEYHFndyouJS5xKFIidEc6KFA8b18rfnsjPV42O1t7eWM3WnozVFp3YmcsRGIsMD4v'@;
put 'cDB0ZnAzSjVnaSpmWlBAXUd2M1QzKT02MlN3ZEpCJT4jITNkLEJkUFFeQUA2WkxqWDcmNUExZCZ7SGlabUNAeyltPFl1eVFseWZOSUlwbEk+KShFfV83SUFkPC94Z1JgamxYKC9hbjxKeDdLJXJFPEZyQiJGPHJwM2pFO119WDx5LiVSYyE3YW4/c0h6Kz1mM2I0NWU4VEgzWTdDUkpmKHRtUzY4'@;
put 'N2RLdjZwVjZfQSZKYlEpYmc3VWFoSyFjZEpXVkVWd2w6TGBkeyl1MHc6PT5McjtSK0NDMEZvWm45SUdtNT8yQCNEVWUxW1MyZVUlcWtlZTEiYDlkZHF2QDslZSEybT91RHpoL0IiLypzJmxiZilQYTJVWW89aT8+dSNDUThsOGA5OWpOd0lZcjdZUXYuNFpLSFJTSHxTT0FVKkNASjE7dmE+QWkl'@;
put 'eSE4fkVWZmciemk7QC51SHt1MF5+elR7NUssfG0oeXhnYTh+dzY0M3cwVyYsdXtmWHByT0NyQ11KJH5Cflk7OjhxKEZZIXdVflEkX2BWUD0yJCo6R0ludjQuQlZ8WkVaVTAjV3tpP0NITnFMTiQyXyRtTVZ6WmI/L20lNzt5d1YsZzFCcFZZeGldQT1rQVBKPHA8aVljZCtIWFkpLnE3RC9LdCgl'@;
put 'VmMmaW1jamtTUk8xYFplZnYscS8qI21yYzIkKz8oaH0mcSpvRyZNVDhpRTF6dHElTUJGdVg0IVlBLjtVQ35qfDc1YzNFLktNaX11OkBzTSllZClAbU9+Z3NKQz55Jlh7VjpESzooSmQ2UVJ9dGomOikhal8qYytdPSJyXzMjbjR6N2V5L1hWPUV3cHlyLFVxTG5xRiNXOjIzWGosTUhfc2Q2XyE+'@;
put 'ZFNzJENYTVV+bSJUd3owQG9MYzBsantqYiVhS0FaQiZ6UWdJYlhgYmQlc05naVBxdlUzI1taTGE6YSFzRThoNHN7RyR2fWolOCppdyFSfkNJbnYzTTN3cm9jdHNFTTM7V2VQVSVraWU6P2ZWPCg/ZjNZW1QpV2FtPk1VV3JHNVpLImwsS0tuNnI3QV0/PkRqUHlCV3c8VDBWbDhiMHg4diJlK2gi'@;
put 'XnNFIypIZm50XUNxd3Ama0c4Mix3TShzamM7aERVSm0+WGV3al1dJFNNTlEoVXJnKyxOIU0/TD85dlYhMTA1OEVAfi92Y1dZJDt8PGd9RGNwU11OJERJYFVLQzMzbzRmSmM4LD9ZRVpWNlFaVGFNMGE2Ti5bdExvYlEuJFFbV1dgQC99OHt2bn5yMCx3LG0qUXZ6SDpuYDlAfDplOzx1TXU/fj1w'@;
put 'ekZrXn0kNW56U21yY2Y0NTBDXiI/VyU2PU9kXjFxR3BbOUVRIzcoRHMrJm5QJlR2bnBbbjAjSU8/TlV7Unt7NEh3X2d+ZXxHPWpUKzt7VGw0PCV0cCxVcSh5YTFaYnY9WD9xbGFEdCRaVEhNVnQ+MUQ6dTgmPyVTPntIaFIpSzV3ZFIpRG04YnhzVy48YTRUfjghNWw0JTcrTFgjZCghIW9zNV4z'@;
put 'R1h7M3VkKHROUllFcnpuVjUocmAuY0BjQ3x7TyFPJG1dfX1gTX1Cb21tbkBULCVMNTJ3PmM+Pi81UVZzalF0TXB4bWZrcF9FPy8+LEovUF1pWks6bktQIXRsK1JGKX5jNjAyOWVHNj55cVZMXnEuc1dXV2E1fExKMTg7Qk8ke1osSFEyZHlMKDg3eTg7eFk4Qix5MTNWdXtIPz9jUF9aMShwQnxq'@;
put 'fDdlSkVMXiYic0M9LmdPNWIwIz0+YWBdeVdbdiQ+fHR8YF53RjFyLzBiNDh1MHpPak9kfEM5a2g7NXRIRXB4OlVbSC9tKnRwakpPLmlucXpBYjVtfEdoejZ0ZndtbX1ZTms5cG4rYi5QMiVSayJYO1N0QUpRdShWPUJ+TmZ7XzsiakwoI2EmNU5Ba1J5Y0cwd3dlRW1bREo0cj8qPDRId0tuK2Aj'@;
put 'cF5hbXxiUStEJGJMcXhrVUU/RmM5K00mMWVOQCt6U3FHKCw2LmYpKmNZTX5qNzB2aDx5cW0zWkxCU2RdXS5vVWNKYTA4JkBnKTpgaHRpNl4lODElMkNnQ0YiIWRzYHVdU21UQDcvdCFCcUd3UFBrQjxyNTokWE12I0FCbX5oVGVWSHBdM3hMTCgiPz4xYmFiQ0pgdjJrcXg9ZUd3N3xjUS5GeWM+'@;
put 'XSgzVSRoUkpta2FeJmwqO0krdzciJT1KSmpjWHtzSS90RVo7QXklTHw+ZyZzQnBWS11IaVMhNzJheF9xSEdmL0Q1Vn5JU2lZeVtdITlwSipre1kvcmlnPyJRQlg+VnplYW5QT1o/P0R2Zms7bnt7ZVZZckYwKiFhTW96ems3eXZVPHBtVG01SXYzT1ZEa1c6WDN9dEpseSQvRGczQ2V2cmEqaGtY'@;
put 'MWBqXTRjPWY2ZTB0Knp1RSRFT2xHOGY3W2wsW1ooJikjN0sibi5qNVhAWV8wXnI4cGNNcz0sQGBhOHR6PilQUlRqKkZCKldjZiw6aCMsYzN1YjIqTW9WeVcuU2k5LkMmbz9YMmYoWlBEY0x2S0loLmMqZndOVUc9bHYuVDdoZ3A7QWVKLFRwKTlPPVlMWDtYUHdeZUZnNCVCWWhnPGhMXW9MNHEh'@;
put 'LjxvSSpybWM2IyZjUlFxJVREWHMzWjp4QVJVW3l5UFc5Y09rMCZhYV1NNzs8SFU9ZEQ+Z1c5OylGQXxbXmAuMUxreGQlJSw7ekM+cXYlVW9QLmMxV2pUXUJfOEpAdDE5bTA0fStGd09WeEhWdkVyMT1aJUpvKklxbmBsUWReUjJLLyY/aV1tQjs7cFBTUkg6fmVNR2AlUlEpZzpNbUVGQH5ET0R5'@;
put 'aG41RC40XXlTUlRqLn5SeGEjfjc2QTIzZHBaPHY1eT9XKm1zc0xyVHdPZkxnU0NgXj48RF4jentzJCVBbWxefGBxY3pIYG9hSHA7bFZdJFFlaitFMUR0PjJVdSM5JSVzdUFXMWFYNzhffEBLRzlQMTlRLn11blJuUz9pJnMkZEdoJXwsNVBYTztjNHw7VjpJWHFlbHw8ND0uYX5KPHl6c199czFj'@;
put 'PEptfFRFYkZ0OV8veW1CbWg0bXNBaUFHb3g6QDxTPDRaYjlZeXdtLitvMEI+Q2BndjpgUyJhUTAoTmhSdCJCdGVpTjl3T01jez5BMngvSVJZRGc2JHxEPiFAY21vNURfeTxqQFped3U0diFXK0MzKUsxYCxJSiMyU3Ewe2xwaVk4X3tfTTZGPVcsaGR9SEhSIm1wP30pXnZkNDd1cksjIUB5anI2'@;
put 'dGVjN0cqWj5FQmllUjFEUU57Y0IzTSpDTmpTMFVyZEgydSpjTSI9Tz5YJTF+ISFkNEVULC4idTtWOj04OG0qOVRmKChlfU8uKmdRW3VwJSYiRzpfL297LD92a0VDRUJEVUdefGQwLG0hL0xEZXNSJT5wMTsqLnYuWWl6KHk4L1VmMyhxUDs8aSR7ZVI1UF9HUXUmOz02UCszaTQoaW5pUDZjI0lS'@;
put 'fEVMWyJTOzJdeF14ITgjT19VU2wwMmxIMTRCW3ldckxAKlBAMyllJiVCa2NwLFY0fkZ4ezJ9ZTcocTp+L2JeLlg5KFttZSZpayY0I15WRnZtcm58Y1pQczpXRUJ4TnpoXWZDYy49ITJfa1QsTXU5K2lleCFGSCJbb1I6O1gwLj5WfiVOTndlaHRnWXFTS2RCNm51cjA6dUZkLkVMYnJbR2AlYkJx'@;
put 'YDNiYVRrPyZaPiJDMnRyJHArLzpwU3FzRig3Rn1BSl48fFgwP0BoN0cvaXc3cjhuIlZ6QmleSV12OTpZaiskb10yUiwzVWBqRjxNX0hAKVpuPFFvO0ZbUVdUV0pIcGEkMEUqRFp5Q1txdls/TWVTKENLeD1oI31POk8sVWd3fWM9eVJPTCVbNnZOe08yUkVLTWAhbWk2ZmJ1ZU0yXmYhaHRncHdq'@;
put 'VzNuajx9JW1sU29qWENeS0I5VHx7WWBtdkEuQ315MnlBTmRbbjdDYzpgXStCVy8pZGZlbDxHfHZaYTZtPUBrLGlXendsdHNIT2YsZDApelZGPF1ja29rXWN7fVsoajY+NS88ODNjP3hVXlkjTWdELENjZUgva0RORmdUQ0dTcVN4Y2hkaTVfJGZqdzA8TVUxOFN7dUxGOjZvckRNfCwsKVRgfns7'@;
put 'Z0FvNX12LnNLNiZyfnpVcmlLcE5uclolMllhYzo6V05uK0o4W2NJVzMoNTlKQHo/I2xBNkxTYiVfXTlsPVQyKk0lPCRXOkxNOGI/OzN6NzJwZCYkVllkVGElP0xRM1BKJC81KyU2JjM1fV57e2xZI1ouIXJhRShIdGkwPTdCa09TQ0g1a0VnP1FBMGVKP3kjaWYud3ZuQllTb3BhPTlHXWdHKipN'@;
put 'UnlkNDVVMmtLZkwuZltEYiloOk5TQG1Ta00yVTNGS1lROFQhVWhGXW4pfWtTYTxpSTZVbVN8USJJVDFtdz9TeyJyJTg7RlRCQXl4eiM9WitEcyFMe1hObmhWaVM1TC9Cb1UzLEY7em87ZnkiQzB7MmVYTCUkZ0M/I0d6dE9DRilpOUQzX0hoUSZmKVhKOlI7LD87ZltyOy8jdVFKbW5oeH1LeGdV'@;
put 'cmNVMHkrcGNkQmkpOkp8Tyk6QjJlRHRIbC5iXixWLDl0LihgXjdscT5jfHRqN08wYSFXWjZAK0ZWW1NxbjhSb3wjMFtXNllAal52aGAjI3tVYUVkdGlaKWp5Wzk+bjQ5K1JZM2kwfjhNeEUzJj5MPi4+dnV3aEZ6OyYrOVU0fUJveWk4L2Zvcy58VGJ+JnshTU5OU0t7V107SUxJUnpHQUlVQ3A+'@;
put 'VjVXKzRhbj0uIWo7PDB+KV9hSWhiSSF+MllJWlNefl9gR2gjSWJLMjdRe3x5KHRMfihEPS5uP3UmWU5jc2Z4SitxR0pqbTUwZF10ZztsdklGbUlRJj94SHk5MDBfMDZCK0wrUDM9XS4xfHRNaW1vNFo8V2RHIztuLyJ9e2V+RyR7VmdUMnplY1ZMOUFMW1BwUjdTOEdIPDVzRzF3X3JLeXlbO3pV'@;
put 'enlJckVjajUoN0I6KHhIYE4wKER9PktjOlNEMWs9RztpUEcrR1V4RFJAMzhIOzk8WFZDcSNaXzhuVl5WPCR0OGBtZWhMPzlzfVd0WntySXRYOUAxSyx1WyR9QEcqN1oieUlxNTNVYWo3KjIpMFYudDgsVDJfNVgoUyxGS0R3UV1hUFJgcSwzUz9PaCRxXy9xeU5lPFl8Vyg2PC8wKkUweXxubGZ5'@;
put 'eVdTUiNEPGYzK0ksZWp1RGEzdF5mclpjcDtKQjU2byxReFgzRTAzUkNhNkZqQGJVXiZpVXwiailRXj0qYXNLbWgrS2lJNmdtOD8/K2poayt1L0VjWjciTF1NKkZOMGV9OmxmX0BaPH1RenBdaWI8cEVNZFZIWHBUdmZROSZlUFghUlp8N1dpIUBYPEUhc1gqajQ1YXBbLk0yYyhiMWduQXQkbWQ/'@;
put 'TXAoXmpJTW9PR0UzQm5oWVN+clNnd2FNVzM6ZEpaUiV2cyxbeGBMWV02aGY4RyV7KjFPR0lFUkZiMngmMipvKzRkcjFRNSlvZjNyfkp+N0l9VWI+YztDJE0xRztXRE9oTVpiK1l3dztvK1s3alByWyw7U0pdIVpoZCMxfC8ue28jIlp1ZV1mR2QiVzZPKlovUWl6W2QpUnRPc3Fua0J7bjNkITt0'@;
put 'cFdmdDovJEpdVjM6KzB9VUxHWil2WE41KGlWOj8mWDZBPF4qJUh1eUBUcFVnckkvcExrdjMrdlFDMTJwSFlbKWJtS1R8TVZMRDdpNjRUZ3RCa3BgamR7fFBUeyRpYlpkbk90K1NvY0c3JU18O2BhTl9TWkojczd2V3w8QmlqRGchbmI7MStvPFZxUiFqfmQ4cCRmMlttaiQ0SEtHVE47ZGQveUZz'@;
put 'fF1PMXZ8alpkZEdXOyxlaDQiLlclc0ZrRio/QExFRiRuVjV7K0tIO0guWHRyUU9nd1Zfeiw0Qkx+bCZbLnk4bmh3Jl1ENjx8ME9OdWhMKkQmOGx9c3Q2Wj5iQ1h3ey9ARVZ3Sj5LYCVlejFfR2Qzc3tAeChEfUMrKTRYInhgSnVQRCVfOjA9cHchRnA5OS5CdlE8O2prSV49dUhibiJueXl3U0td'@;
put 'MjlaOGckZ2NifkUqXUJofDJCNmhVNXJaZVN2OV08RmtTW29+ZHoyVCRrOihCUC4/cCslSGgiL2hAYjo6eyJ8MClLcnA7UmVBT054YSokXnAlVihAL1Q+MklvMXZMNGBPYTZAQiZYMmVVe2BYTnNISD1jZzYzdytVaEg0I2grWzhNb1B5Y0NGVVJbLGQ2NHlLNjN1MjsuMEcuQTtpRC50Li8jQ158'@;
put 'JEp1TGFEJG1KblosJjghWF5UfHpeckNrQiEvNXQ4YSYkbFArUmBPe19qe2h6aFh7YVEoPmhlc01tKXk1d1EhaH1xNTA1W25RUU04ZkU6ZVEweFFENDhKX31UNC43bF1fe1YqZz9HTVJIUnUjL25tUTNAUDdqXStiMHBKflBlPUxTUyprfUpweUl9amA1czQsZih5S3JzVkUlMG9tOl92cmp1PS84'@;
put 'PzNVbUcyTEVifGpDRDZOY2h2Lm5pUzEuUl43Wm9pTnFPdFc2YltoRGZDUixnUXVxQ3x3PlRZaHYmb3k5X3B7SjhbKGl1JWBgOjNGNWZpJlkjbnZdWjR1bnhkfDZAO0l7bk1MXnBeWmpXY3FCeU0rVHl1eG47XlUpfngmRGVYJllBZUhgUE42LC9mSj9bd187czNwVDMhVD1gb21wIXxxV2sqLzgi'@;
put 'KiIpTEQzVj5AbjNdQCs/S3RrNyYsL3ooL0E3YFsobn56d3RbYEAobnBOZX5AVUxONnF6cF58SWIxak54QDZSPiV0NT5HRUI1dUkuSkY2U2p+b0UlOHdTaHR6c31XO0IpcGlhbHAqcXY8IzIlKTBPWV9jYmtMRTd4WVEpeUN8VURudXdCZnBJSXxuKlEmQztHMTM2YmZzIzJ3b2h7KGV7WWI8ezF3'@;
put 'KXAlZEcjOnphJjs1Qz5JdDJQKVM0P3paJUVbRnpDNisqKDcwIkdgTW00YXg/KE03UXMufChlakhUcmpiblF2YWdoLiskRjBZJGVtSix9UFlkeik8Ki53TDFiaDV2ZkAuYDskOXtGYS9gZG9mYTd+K3ZwZSQ1PkZpZ29Ze1tyOkdEY3RUOiUodXN0ODA2fEFmdFtLWmUuXnkhdn14dnZxUjBgcl8q'@;
put 'W3poTEVNaUtOSkkuekZNb0xnNEA8JSRFXXY4VW5QYFtocT1fMCNqNzpCc2VbM0I8bFh5LnAiNyF3MmpKPn58QjdIQlFgNzg6Pzt3IXR7TiRvSDtsVEU0cSMvP3whI3I5UzFYNH5ndkolfkE+aSUvNGZeajEqWSkwU2ksMHAhezxfOHVZREd7bXwhRVRlSS99ZFBRWjhiOUc4b19BVnxmYHdtYm89'@;
put 'UyhhaSZyckxJNXxhbFVBLD96fSQwLmNWNyolUikzMk91UzkjJWtDd21aRVA+JUs3c0hNSUdkN3RqflRmb2lgREQmXiQ2cnVnXiNpSV4hZFc/K1dRcGRvWiJXclhDfClFanM9Yn5xTj8/SDRLVWxyKy58V1c1R3VKX3RbVkYmcixlKHN1MihsRTN1I1MmfmI/YzpYM2ZqMUgsU0NWb1gjbDQkRngz'@;
put 'PkI9OlFQblNJeUQrVDhFNTxsPX5WQTF5OzJnNSx0WT15KTtpeHdPUUU6b0NqLChnSVBDZCpOfkVxamJgfVFXSStycy9rbSNeV09KUCZuc0huO1AiW0tuRHsrbHRtdGJuJkkxXlY8cHh7N3VHXmMxMXhCZ10sOVtmVU9XdSRaI3NIbGApSD06ZDlrbXsobFViUkxmMGxpZTZeUF5BLnpENlIjIWky'@;
put 'JXQ1eTk8YTQuO2BibW8pdSprfnxffEdSe2VoPkk/WXJdcnIuWTZzM15eWUxad3AhVSR9MSsoVl5ZK01MIT1yTSEjPWIkRjYjMGMwM0o8TGVtfjI4KE8sMm46KnEzR1NbR0tlL05QTyoiSiZfZylKfjlKTG1fOSYmZXUxKi57UFg5MXJ8eFJabEUxOz46VXw/OE9aOzk+QWksaTo9Rl4yUTxOSVln'@;
put 'SF47djUwZ3olVCp7KUYyKyp4K11RPmtZIyFGZl1VZH4wb3d8Vm14QCt+dyk+aTdFZ3w/XmhkOkxDT1ZVPmBsRTEuYkoiZWNnLk1bT3s+aVooYXJtRiJMZzBzSzFuOGpzTzd0UEY5Tl17eFtPfExneHpGUkQmRHZeS1ZobWp3Il5GKTViNVcxaWFCPDZJdW9NSEpiMUhVZGZzVlcldWM3I3laaWF1'@;
put 'NSp5K0UhOEg2MkdIKS81aWEhbyJ3Tk4/Um51PSosL24wRT0hL2drJnA+V3EjYns/aXQ9RnAlKVpeV1t+T3t8bVpOdE5Ke2hobE98SUg7blNxa1A4L2dqcGRSK0xMSXw1bj9wMyQ1I3ZmPDlVTX5+YG1jOyErZn5QclBpcyVtUWYhOERtMzRbemVuZGo9NTFxZUh2W3V0KkQkZVgiOUEsMls+VjE1'@;
put 'TCR0aEwuOGBaVjI4Q3ouIXJNaFIzKVtGQFRXQzlwMyRqRGg0OGU0QWtvP20+NW9mQnpqMjVYKiZ3d11sQlpiYStkflJVRGMiLF1YcX4+eU9CSDQ5UVF7NTgjfmgjN204dV84OkY4Jkg2VkZGfClfYXxwP01zZjJ5RE1Ic2hwZFJXby5xSlpuPVNRUTQySHlUSTh6eG83eCEoc0JbSzwkQFtLLihf'@;
put 'bVZHakx8Lklmfl9ER2BjSjY1di4ybnBgdGAjTERtN2FzeXIuXm9rMlpwM10jO3dtVF9GIS4mJnc0YyFWSnoxZHs2UUNnNVglTHJKdTljbk9mQGlKSWt8NnZZTHBLWTttWF1nY1M8TnhXOGhiUT92PkBxTHZyV1t7c1tqP0ZsVGdqaVI4bFk7e2YmX0IxNl5FQkQuQDlPXT97aUN5bDsoIyM2R0Zs'@;
put 'bXAzWmUkdC56cyxwKm5mIjAvLHgxXnZbLndVMUtCVDIjSHQyXTlbdGNXaCskOCM4NXFLNjJaWWl9ZT8sRkdnRCZMRFNGIjFMSz0seUQpWG9qSykxbTV7S2l7a2pUYVgzZ2FMLm1IKiRScVp4XTNTdndBaCJXMitQLFo5fFJ7PUhqJn1qMnMwRTs7Yiw3R2c/X05OZF1kXXgyWWFVQUR0PEhbNjp5'@;
put 'Pih2R3YhSkNNY1BlV3diUD1VSjg4VnxRQXZkWGxNO0dHNWlZZDpkTVVhTklATXY7WVFad1siW2FVU15MJjk/QllbTVZ5O1hqPTRPUDxeTThVM3ZeUXh8Wz8vPTRvKnNOd1hGO1dPOnxHc0psXzwjUW1UZ2JFYWs8emFZVHJvMzx8eWdFX04qYUJNN25AVkhAYWgqXmEqPldOfEFzKiFTbD9DMnoq'@;
put 'Zz5gTi5gMk9pcGVbVVpPUlY9VEYxMGxhJGNXQGlBX2c3flB5RHV2MzZELj4seDNkOUpvXilebjklV0IqbUBATCskaXlPOHAxakViQWg3UHdQIlJFO2paYi8vZFlhP3dbL2p4cWJbbyZNTipPd2lsNGNnLzUvcVl2WGdlcjsybTdVOz1uTSpRRC5MMk0/Sl5wd2ZSVm10SitRVS4xZmFoLFhRU3Iy'@;
put 'TFRkPmcocUpZSyspMlpjPXV5ZGgxZEFoM0QoV2dEYCx4bTQ7ai9gKzM+cUMjUlF4cilYYkp8PnkwOipvSkpYVk55O1VHRFgjSit+eExLXmdAQjBGTD5PVl17MGxwXkozcGxfTjxFaiU6VjFINyg8TXNydHp0cVdQOF80b3VDQmNTPi9EUFZhbTFdQGJBZF1LbDN6dVpUXUB7T1srRDo1althaTg+'@;
put 'SSpmVV5zUiRiRzhiKGk8RSoqaGRgZSY4eylhaV5fZiVpbWpneCFTWm05dUBZZzpeWGRFUjpxdXlUKXclby44IT1uJDYyPjVCdER6cnx3WWVGPUZRKXkjNzA9eHxAZFglPEA3fDF4Q0hdQTJTLkwzU3FZM0dPb3I2e1BVNGxERUFxXTV5cGRhVjNyZUhgeFdWQnMxTEtKcERAQW9BVUFLQnlCK0B6'@;
put 'a1h4PSwvMkIsa3BiRk4hI2ZqVTthWn1WVX1zTHlpXmt7NV8hdUp1NiJuZSNXTn1+WXdMNWdARl94IWl9LCVNaU5dT21OYXJlL2hxSk4xTzdrWCxyeTU+Iyk3ZD5rOUdCeVoiRTxLcjZvUFh6N3g4MkNXYkE+bCNiL0RlRUFwPFQ7dF9TU099L2c/Ql1uamFgfThebTNmfldgTGsxS2RGI30lfVJq'@;
put 'TURAKXxALFdvVihkOGFrLG5JOCJqYHp5KHRvV1l7JUdGQkx2cVssUSQsWEBWb1tgeFBBRDF1V31aT3dpQUFLdzlAUTg1JD9CK2RsZlprKlJ5Kk1CalZ2T1Eqem1UfHRRNStVOEhiYHRWQmQhU3dwcklSLnglaXl6aW1DelN7JSMlbl1vcV88UlJGbUVbKDNKSHBNem0rYXlefm95aUBRKVN0ajRT'@;
put 'dWxaLi9LRmxYM3NSblgjJVF1PTxvUjBhfHF3Pkc5ZWkjTCJhdG5VfHUpYElEZyFqJU4wU1dgdE1JajhwWjxfbno8Y200NSkoQTpkeS5HOXt0Q0VbJHtLOllSWE87Z2kzNzd7JThPYjJKKEh5KlpRa1I8UTpNd2YwWzV7KE9rMlRua3okcmRXMWpyJD1HfCRWdyZBU2duQXtxWjtzYyNWYEdAUiYz'@;
put 'OypWWF1FSFJYYXMwL0VKYX5VenBLfHRvX31yLDgmY0hkb3VGU1Z8flZhJnZxY2AhNnd5TmIxPVgyQnM9OlNVayo0UWpld15EMUgsIzY0Xk1iLzxDUzg9fjMlKkl4Jno4WVghKUg2VlJYRE4hOkBNKmQhNEdOIUJNeHQ/QC8oTWh7QzZpc0tqbU9mNWhyP312bmAldXhRSU9nP11ta1BONXdXOGV3'@;
put 'LiZFMl1wZD5CWW1oPiQuQ0FxSUhgSHtYUi5lTTwqVXt1bEVYZjdzcWFUNlg8JnZMITpLVEkoKixIQnY3KDF9eGlNfWFKbDNWfkRfak9SZ2tWWElpOFMvSGQxQC8iLHg0JCF+U35JVlU3NGpYTFFgalZ1XkRpfkVHIntMVChibytSMElIIzMyaWxEIlhXU0o8WTU1MkRvfFJmej5ydS5KPkJpfVR6'@;
put 'fCg5XkZrU3dKZzFHSmAyfnJUJllvSmAiUlVlRSp7bjEpUzxMeDIvJkdTOkBvS3cwKVNHfHlUTkc2UXAwZz1eKytkJWMqJGNlJVpKXn5SPWJUZ2lRIVk8JSl2Zjo5ajkrVkpsdiV8I2F2bE1lXkIyVDpHe1tPS3YlX1ZwXk9De1tWbEE+MTRhdjYsQFZ5azdaVyUhcjU/bj17SVpkfTY3TVFhYUV4'@;
put 'TmI4b1ZuLHVxMCpOcnc/WFpZM0dMRi5hK0g1UFpKamN7WyRlZW9NIVRtVWp2eGReWmllNT8vQGpjTjBkdCVzOk1+M3NWWUIrbUkoMXE5X1BbTVJOX0glKDx5LlM1ZlJmfHF6am1aWmF8WzxnPDVPenIybzxNbD5CcmFNZXxfZ1Y4aTYsaVQ8YGZTY0Y7VSgvRlNoOzskJFtlN31vUk06QGh6MmQm'@;
put 'W2A6MFU5MUdne3xpVigjeUdIU1pKazgjKWBLemZfaFNZMkA5RUZ8T0BpXjFTbTxmUnNvMDx0XmNHaF9JYCx7WnNpR2duelkoUU8+Pjt7Z29oYllMZUxeby8pVl9VUTBhelRmbVFPdll2LEc3Jm0/X0U2RWBPen5yPSYldDUmemNxdUJnPkt3Vi8yOFore2xgKlklS3AlREE5T0JycWxqV1ZAXVMu'@;
put 'UjcoeHxvMz9wPlhCUUBYYzVNUTJUdGVKQk1aVmM+bXZtKXVHXztkWUgocjhOUj85OyklX3Mpd1gkXlpyd3UlRy41TT5dYCghOl9TU0EoVXZaeCw/cGJKdjpyeU5iNTY7Xm9aJkBseFkvKnYpYGdBPj1baCtbfDwzMEh5ezNJT0NiaTRJeFBydzVtMipeJDBMUiVkVWN9PE1ESEJMW3grbU9WcXVn'@;
put 'UlUkNlZmaihXckZBUUdeZ1FMTklbfFM8SGsmKi8uWT0xfXQwOlYmbVIqXns+JFU6PFFROFl6ezVrYio7V20uWG1ncGlIaDdGZEw2VWE4eHhEZ0hLJFJeK1B5fnFeaFFqU3BXUSk2a31MYzRnTF9Ia3VDd1BOc15GUkpIekAlUDRwISpNTWJUaGlERChLY0I7S3owJXN0OT9jS0VEbldqQVVeMVUz'@;
put 'I0YjVVk2PzRBZzdaXz8iVFApayxFKkhhJUtHNHo4O0MkWEtAbFEkXm51PHB+aCJKWW5pIzE4LE89K0hEXz9wZlcuLnhSR2U+e1dwXj5uaVM/UltpZipoKDw6TyQ/YHpjTDhgdixMe3opWG4lPGUmVjpKfjg3TCNyPHM8c2pEZHU3UTBNL15dQEwjS09ee0tlSWVbTzA4Q3tpc1hgeyh3Z19VbSsj'@;
put 'K3ZyNVRkMWEzX3kqWlpXPCIxRyJzQE1nYVs7U2Q/NzE2dktgYl9oIXxiek4hSzZWYXlBPSFeW3p6K15icEkqP3c1dVsxXUYkKyRlTHQiKzRAR1BhVW8pPG9WRGM5UF1YO20jOGQmUlsxKV4sNGQyIXdqdkdSZEJwMEEqeERjJSFWYDw4Y0dwSGd0VTQxdG9uZ3RVSUZIR31jclVHfSIkVEg1JX1v'@;
put 'YGF9KnZmdXBtNTIvRzlObTFaJURfMVp3O0RMYWU2WilgSWhxO3VPQkp5djV6PTh2I1NwTSlMUT5MLHN1TV9JWUN6QTpXMjhPdFgrWy88cVhMQk1gZjY6ZFN0WDZFcEU4aE1UQHsjN2p4PW9bZHwqOVhydiN9ey9bcGYkN2F2OyRDUUB4ITgzbm1ePms1SDtYLEZ1LzFJb1B7S35LNS95ezppXzpH'@;
put 'L2RHOVZibWhod2c8Y0glRiNxWjhJSFVYVllkfUxeU11OV3xsZ0FdcyZib2sre3dtZ08laU1RSHN9aUpjPURYamMsQkhASH07LEtvIkI/JHxTQDJ0Xk0jVW5yUk5ANzdeZ214aCZkPV96RFYhYH10cmllLEFCYiwwI1FQVlFWRjBUWDpZSGlrOkAkfjNee0NtRkBYVmpTJm4vPlg+WHYufCVKLFYp'@;
put 'I0x6ajtFZCtUbVolbSk1TjAxTG1tV0YlSDJTaCg/eVhaQE02PXN0PzApOCZrRFFEP2toWjZZd2x2WjROaDViOE5baiwrd2tGZiZFUEw4VjJHUGFVKWNxOWVKPEZ2SV4wcWNyNlA4MiZdcDBmVylXNXElUj4qWEglJHNxSj1danFRXWU5fFFrOWElNis6UT5MaXptfEdvWSt0RT9PczMkW0BwSEVt'@;
put 'PVJZSyVBeCIyNTAxTnhnOlJfPDRteFB1ZkNOZThtfVNKOj5xM3JoSjhbaUxabUhZNThTSDA3T0dmSk95STBjKVc0Pzs0dD9gUDchWUA2QEE9WGVgPDRHT0YoX01bR0U/TixbfW9OQ2BHOHZMWi50VFo/Y3sjVUpmSjwsSigpZzZ6c1U9YXFCY2BZckpDSGsqczJWQz1PMFBEJjpYZGp7YF50VH5w'@;
put 'MEI0TFtKVikxMnU3QVVyMEFLO1k0eHNNTClifGJReGdmOU92QT5XRklIeGpENkwoPF54XTt6TjR8ZG0kdW4lJnhvfClDJVhUWkloN2dJTChnJEtmPHdjRjpPSUNXT2VbQCU3Ly5IcTVyejhZIj5hYztSSmhNKEQpK3E3T0BXXjJdbT1ZXjJEKGNSYkN+VHdDcHJpPDlIPSpBQkJDPlo1eH5wYWpX'@;
put 'Ki8keD4wUEAkcHUwX29ENEMlb0ZDLCxgNUI+LzB2X05GUThQVU1GN2pjKHJpVHVZd2JQa29GdTMsX2ozKUM2MGBoQnRXeStpczRMM0BPUENNTio5PjdAJn5oPF9DXlVHZVR5Z0dUJXNVWz51aSMrck1oQHE/ZnpTfH1hZkI3QEM/fWo2TjE2NzgwKyxCT2hebmZdRHhLfDU5fkorJCRdXzlgdXck'@;
put 'IjtUUE5WRGljR3YxXkoiKVM6Mk9XUCskRCVncS88SkxFYDZZOTQ9bCFBIWxQWW41ZUpZTmdAMis8UlBEa2V1bixAa1JTNWB8bDowenJibEc9fU9iIls7QHphOm9Ndil9clFJRT1DYGMsLmE7UHB6fHc+MiRpXjJuRkVeWTVdckZoJmhPKXRWNmhPfWJ+PVh4RCk6cHkxOVJ8Z1RwJlFyM2xMR1hK'@;
put 'bzwvemJvOTBfNClKNGJYMyFaLlYqOUh4KFsqaXhBJXRHZk1qfldFSjxQX1hsVzFZZ01QfWdjN15kOyMjIU8pJE56XUdXQVJePnlmb30/TDRsKkNiNUtnaSJxS2QraERbXTlUcD1EdSZnYTV9VWo2PlI9Y2QxUDEoeX5MOmcmTDRHbDh1Nm4lXyZCPkkzP3VPdUpGemplcHBjLDMrUH49PU48Onlg'@;
put 'ODVycFd5PWw1NiF3ZiNrKUcxY1dMfT1mTjM/PUwwVTlHdklPeyZKdnFtLmtSfmBZPnAhOFIwM35nQGNzQkt0JWtYZk1KZnwlIzBES25DbCFxaVslaWJSQHNOaisqSWEyW2gkKkFxZVRPfGNySFlqcH1CWT1JbCFeflJ7JUBXaHV3clRfLCZLfEhYUUlgRGskTUN5PWJfR3dYc0M6Z25KJlpNYWln'@;
put 'OHs5LlRMdTJ7bWpHbUYkJkE9Typ9QCY5PDNGJjxXb01qayZMRHByb3FKfSglJDgqe2IwKCQld3xxLHl7bHlSenBYO2tsalUlJUh3YSZCTExSRm0zJlVIWDtzUnZENUwsXzYiQF9Re2UxPyJ1NCxKPShrWGFPJnRJSj1ZM2BWWF1DNEx6O2l0TldnNGJseV9bZVVFQXUiO1peNW1EenpmflV2I2g5'@;
put 'InBtaCpVX2QzVEchUUA9RC5qUWpURUpYdG87cTRGV3lvZHxqNHR+cFJdW0dxPksodyxiZyZ1a30lJiwxZloySSlSZnwrSVZTZ2NHUjl8UlI7cGNFOGdULjczMTFrQi9AJlddczdDNCw3Vn4yRiU/X1NFeWdKcVZrZkdZamJvInZ8Im84R2ZjYmZtem9wMmlNOjU+PThebk1dUjU7OXMqKUtkdVcp'@;
put 'bXJTYDBZKVolO3AwNURZWjVBTTp3NSZKWTR4d29kbEpMXzpicDp6YFBsclQ6TCMyTyZ7Wm94bzZ0JXR3X31lT3B+XUJSVixrb2xoKihZa0AuN0lKN14zOUwwaT9peWQ0QEZ1Xk5sUWRReCZpK3dRe0d6ZDNnaFg+R1AsRVJTcGYhYHB4U0szd0hlWF5lOSFGdWE0VDF4djpMPWY/aShhLz1GdW9l'@;
put 'M2FUZ15YIihnNFdxTk0iQ1JYNHJGWlZPXWNFJUNVVVQ/eWRXXm1PZDFqfFMwRk18T3IqKVBPISFHYkUxanpIUnxwLFZ1PX5HMEQ4Y0I+NU1vbDE4bEJyZUA/KFI5ZEpLZDxBZDhZPEQldmY3K0xQKH42JDh6fH04X18uWVRBXyg3eTd2dz17XXkjbEd6ciY6fiRQX1lzZUp1aDIzMiE1MzwkbXlq'@;
put 'QC55cSw4Nn02OWl0UnhYWCZrN11OelE6ITUsX2ErOXFkYG9GWX5XUFpWPl5BTSJnZj84ISt5LDR6TCE9by5CfFl5Q3ExKCthLnE9VypIaTFJd1EyVzNqPVlJYyVjcWw+YzpjTl16Uj41RTp1ZC5HXWdvNWNaTTBtIm4sZWBzTGYxTmJeayJvfSwoXyx6eFdYWiNOMHhBOkZ6RU1RVDE8YlZRYkhU'@;
put 'RlVXc0Q1YEx1fl9vOHxpUW4ibiwldXV5XWBhWCEhS1dPVSNlPltBc09TPHJFYEZ2ZHxzcXghMmN7WiM4bEgqUEtUP1t3L2B0bmpRZVNVJkRRMil5MWdMcEdrLFp9b0BtclZmNlBZVmFOUDFPfnsoYn45PjwpLiIwMkBYMkU7cTZpamhiQi9rNVk3c1ozd0UyKEckWyR5MWxPO1ArVlksWGlYYUdd'@;
put 'WnZ0JENqQVA/SWpUSHc+MkxxdXVMQyxVKU57dGB0YDQpQl8/X0peVVk7On1Od1ovKSV0YHVzbUxoQl1MK318Zjl7aml9TiFVSUVUTENlY0ppelhAWzJrcFNjfVNuSmEpfjheMztqK0t8UCh+ZUdYQU84cjIlI24hT20vQHk+ckBDfCFuXiVtY3ZHdDRFN1ZdQ15LVUJOMG9FQ18odHpDUjxLbXVv'@;
put 'L2htMjghcXwpdWdMNUl6bSUvJj8/XTlIMDlqWEFNXTIkSV9kfV0mND91YHxoYyFlMFlFJFZYZjxlZiUrOk8pamgjaHAqLigkZGdHdExKbVN2V25RWTdeLE95clohLzFKazBSPGlSND8pTiM6NUs3KiY7NFZ3S2Fkfkw1aFl0d1lNOVR3L3hiZWZ8YWk/R15ZW1l6NnNUSllwR2JzT3M9UFs/ZChF'@;
put 'TTJWOXEjZ0FzPzglTUpvXk5WfnxhQ0defDVpQElqYHQ7W3pTNHd+P00sdjYzPUI1b2UwUUAqZiZzXSk6YnF1O0QrbHFod2ojPmtWQVt8aD9makpeQUZrdSJxU09vaXNlMiRqZEQkOnZfOi8yWFN4ZTVMPWNHTFolbVEuM1ZXZyVPaUpzN3UuY15+aHgkOXkwQ1MkQT9EUndNK21ZQldjP3thcVJq'@;
put 'ZEpEZ2JNbjoqb0M0O3crIz5fdmchKG9BN0Y/VDxjQ0xKZ2xFYTtKSFZjLyhnekFfJnlTfS4kYSg8PShRNlF+Xl5peCR6UWxtJTxeYHJTOms1L1Y1V2YiKzY+VDU4M0Q3UmU2eUBfLGtKLkZ8Tl93NUQ3OUVyZShDcmU+L0liRU9qUGBKalEwOmdrdXg8RmJsTVNsTDoqdjJbeTA6RjJ1bHF5MiJO'@;
put 'N3VLKkptQ19JU0NRRm17c0RGWGp1fVVfSSpYSypVSlRCPSReOkJzNXhRODZMVUtMNWFwdi9JYmQzWmhCTVlbPENkSyFOYVJ2VzRrJSUwYlJWUWlzNkQoYl9PfDF9MHJ0NChLInkpeWtIZ3pgZSoyfFgsWCpkMGM4fkJ0NXFdUXlTVWgvPWAjL3VON1J1Izg4TUh0c1kvKiVGVDxTPEl9OG0hOTVO'@;
put 'UkA7bUVzW0ttSiRiZS82dVBnMjpjUiNEWl8oIXJHNms1STFZZCRzRHhubG8zJSVfPE5EUGJFbVg3SXt1TnxgPjk6TCtsYnx2bEhAcCo7T1I8TzBucUppOXUzbzQkMjh5JUY5TFMyTmIvRyp0VnFSXzpaXkhYYzM6NHZaSndxe2JFdlBwSS50K0IjbzxFQVVYMX0oa0wyLjRifipoWW1kVjx6eC50'@;
put 'QTU6UDQlaj5SblgsdV9xVDopTXZaNk96Y0Rlcnh4fTM1d1gkb2c4R28hPnB0JDByND5VXnFDNDZFSVROZyZuO3AjRG1YSCZFUjl9UG1vQTNrInJ+UXpkdF4xY0VfK1Z6VyVzPFpPR2RgLzw/bGEsX1k7JkM5Yyp9ZCZDbGIkZjszZkMifkBjM1coJXpVSzhoUm1DWl9oWEFPQX46Ri87Yn5PbmIs'@;
put 'MVhkN0g0U085aT1sJDlhU3U3Ji4leT9hdVl+ZnptfGFHNiFNSHwxU3NMcyZxdj5CM3tzc2xJXk92dTNqaypGb3EwYDlEemdIYllMZUFVP3YxNnMzYntZOzZZdjpWbTYlMzZaVldjMk4rdEJMbiNeYiFdVG9hQy9DYTtkNmtsYkUsNHdLWE4wWmd3Uj8jZiQvYywrZ2BLKklycEM4en0jO2UrTChq'@;
put 'QzhjdzlweUUkZ3tqdl4+TCtySX17Z3RGVmtGejFwOUM/MTdERnkoYjNYejZmO0MzVzUzRTVdQzJaZ2pXTihgRU5rTHtBTk1XeS4xbWd0bF50OTpkT1Bxc3o/fWcmSyMmMzhKUWElc3NkSHt5Qj4iams0RDs0alJFVSkkMTpLOjp1aWo0Tl4yc3dzTzJZSkUveXJXMGEzPnlye106TkkzN0Y3N3Jr'@;
put 'KTdeN0NeZjciY2U+OXtmXUVOPip1N2ErNXc3Y11ae1J0bG0pVDd2Z11lSzJEaUlvfjk4bjRkZ1ZKZCs3bFY0emFBMXY5SG15S3NEcW1tN041XzdUWUVzeEtteWNaZVt0Y3E2V1krYGghX098UigkNHRsXUFUe10vSnAwck9VJDBNaXRsT00hOnZJW2wha0VScT9tOm0jbWp+JC91VSY+ZylwTmQk'@;
put 'VjVYeyUuWUAqc0BvbFk6NUwrJWgudUdneDpLLmpUSz1LU0xsR3hvcm5rSyM0JTIyJnA1MiZmdjxVQDYvWSk0TFhMPSE9NUppdDJlNytvKWNbVkU1XyJMSTAiOl5dY11fTyNEK0w3dGQzazdGUmEpRGdVOzdrdFZYXSE1KyIqdDxPezpRN2pbajUzc3Q5bnskQWEqbVMrLCFfeVJxVTF2fFhrbCQ0'@;
put 'KTQ5cFhyMk07T2dqMWV1L2cycl0xZFcsejolbilVJUswRyZMaDtONyNpMXsxSXg0WzBUfkNLRkhOPitYYjtITElwUyZOTiRvZ35pWls/JVhmcn0saVp+Sl17fGxVez0lJWszJTNaUylkUVlkLz19b1ZiJW4wIy5ZXmtodWtvcGRXfkoxb2ZgQWddSGBhVCg7Z0w6PmZyPjoze3NtbixuRUMrXk5T'@;
put 'XjJoQGo+W21QaHN0OixxUlhlckhaLzloVlpUeXdZcTo1RDhiLk1teTsuSnhCWzxzWnR4eyMhKHg0Z0xyRHF1P3hNZGZnLiwxJTosTiNgVXhoNmNxUkpLLl5FKT5XYk8pO0t4an4qLC5iJlt7TDFxI3lVSFo5U0tDNC8zMGMyKzVLI3t3RyEmTT18PktabF1hel0mO2spdEkxPXslUUByLj8mO3BF'@;
put 'UylDdm59JF1OUF4lS1VIKUhEe3B5XiltbD1EdnVMfCNReC5DWStlNnlnUEEjRDwxRURnPkhfPlh4b1FAV0gvQk1UUD9ZY34pL0U/ZUw6emR0Xls2ZUxydVVYWlBtYUliVkNWZGEuRzhlSSVyJCk+IX5YdzUsckxRPXZmXjVZJXs3WCp8IUNNMTZMe3xRLjovcixqeio5ZCZgRF5XeSxUOjQwamZI'@;
put 'WVlZOEpKeE5haEoqY2NeLy5BMT5sSHJIKWlLO1ExZzQ5ZVUlQCg0WnpGUUJwaG9zakFjdG90Oj1uImB7dSs0RTRLZT8zQEh1Q3Z5Kml1Jms/X3dKdStdUCNsQXJhYEhbeWdMQlFTYShzbWpXcEw5Vy44TiIqKS5HaTkuX21+byghbUZEWXJ+MjBUYTExRGZfQjpYPERAaXhNXXl3JXslfVFQP2A8'@;
put 'W2QpPm05bmMlLiswLEA0NV5kQkgjayRbelpZcDc9OCsrd3BQcTJYYCg3bTNsWDN5R0FHYSlAWktKYVVZPGYzUl0wQVpuK0M2S29pfE92PiI/M0JNOyNRI2VOSHJYYyJPO3RxaEJvTVlCVy84QXV3XVlXWiU5R0F2OWpJSD1ZTGU+SHRIaGN2ZUJjOiFAZjRHTSpKXTpFRVNRREIoYzM7Oip5ND40'@;
put 'PzA6cDZtcEs9S3xrOFpNPDtyKSxPZUNjYmQ9ezQsNGZ6X11RWHxgZTtCLF5aNlpNViF5cXU1YHpeJHUldDRJcC9ScEImR1J0bnlDMTQsVnlHYnJTQGBTKDglUF1DJHl0ZF1dUFRqLyl2NXhZd0k4Myx5cFBRcUtzUTY9aiEqJnw3YVR0fDNjbytQfUR2XTQ4bWFWMyt1STdILHl4YTxTLnIidm8r'@;
put 'JnY6dTB9QzcmQ1c9amNDYTl9L3s/NjVeTWQ3WFN4Vz04aFRIKkFLOSg3I1hlN3tiOz9od2gyPjhAeG4wUEEiVTxjencpVj0oMH4lXjc/WFY3XkdXT1JocWQ/UU1HRmVGKVJyKD1gZlpsajw3cipwRlZeZ101OGYwWzs+YGpEO3heV09PLHJDPnkpWXNGb1RhdSRrKTc8aTB2LHl6U1VMYG06bFN6'@;
put 'TzdxLCVMRDkwX0Jdeno9b3g0d3gqRkRrcjJEPTRBe3hzUzorXWM6YHE7czl7cmApSj5mUFVBS10senpLfC8/TEBvfHFUfDF7KFVuJG1eKD14JiskZVg8RWsrMUtUPjRvOSY7aDhqMm85TmFXdW9wUE4hUXdmWjxTcmw5RGFFNl86fFJdNUI+QW5fKDtDPWlBa2dSd2whL09kVyRuWlJ5SzZZOHY5'@;
put 'VWRsd2NdQTtkYD5CfTF+cSVHfDYjNUkyOUVfTCkrSD05YXpIPTRkK2JCK3B4L1FsXUJXbjFTNWd8OllCQnlbV3ZgP3JneTNtQnYjTlVZJE5bJkJVOG1KSFBvYnIiOkR4TzdScjA9L2JJMU89XyFIU1c9YGc2ekN5QVtCbzVnRDJvR0h+WDlFeXhDMHpbXUhqWGQ7IjZydnwxRHhYfXZHZHFsemxG'@;
put 'O3VhXX5WWkl8amh5JXddY1RFOyJyaioyUzJyVF9Ga2N7NCkzb2h1V3BebW52JGVVREBrY0Q9NGE/XTJWOF9rK15FXz1DNEwyOnJpMVg7d2BzIkc3SW4wcUMwdik3cTlzZm9qKEdDOUgoQHt5ZUIuYHQkWVYoIjEoRnhzblVYZGNYNUtSK3tPVCZBS3tqfVd+Pyl8WmNtdF0sSnx6KzhTRUBgeCF2'@;
put 'S1h7OCZKNXk9bTQuOEBASn1CIzdwMVFdfj9vP3RSdik+fiZDTk9rem9xMHd9Pnt7bylNbDQxc1JaOj5ffWgmX0ZqWF9rWG8oYDZkUkpiI2kxJVssSXpwQD5wYSQ+bWNneyZYe3loNXFQbGI+fVJ3YH5uXVA4a0clO2ovMm1aZEpOfEokZEpON05ad3VmeHIubTR4Wkl6UC49Y0hjO24+W3lxLzds'@;
put 'Q1ZNRk5pUGdHPkByJmBlPl4pPGUkRE5dXURdR2owU1JFWGd3TyI9eXJkP0BkfTcmLj44TUs7PSl5enF6SlkqakRyMn1gZEtZa0ZQLFBqa1UxLiZ4ZS88KEImXlFzUHlRfFdeRjlEJkN1YnEhOl9ufXtkXmhmd2xTM2w9KU44PEBXQlQpeGVgP2peU3lLYWUpP0I3KzNBV3BkLFEwIV1scDE2VXAl'@;
put 'UlZ1NlokQkpVN0w7VTpIdmVZL11JYlh8SDRwJClNLk0yVkpsbUkvd25YZGRXfmd1XzdvVEdWRWpzbC4ycWJzVUR+I2FKS0BhVUFbViJAPkdRT1YmKEpvUiIsdV1KU2dTIyZJP0EkIVFpKGAmJns+Qnt4YHRHK3NgRmJNWyl2Ryhtc31SYGdxaHVvdzl3NjZvU2l0ajouJl5IbUtVfj9BUSZvUCw4'@;
put 'b1M+PmU9WlR2PEojfGBsQT8+UmQuIWlVPVRlKzFoQ3NocGwsdztTPzglZWs9VixLVnJrelZqelBlOWUxL2M3fiFZZEtOIUpdLG9wPm5sbEspd0Riazl8QHRdblIpTXY3KiJYU3YkI0U5W25xZFVLMmZ2WHtuW0NiTVVhWW5YNXtySWF7bnpjQ2swLmB0P0R8Y2tRNH55MT9JOHVnOEZYW2klalJQ'@;
put 'MG9AcDRAS3tBeXtqSSsiUmw+enIlOXw1djYkP1A2MHRBfT9sYiQ1YjVUPTopOyhmNzZAZlhmfndxfixWcWB0YGBSWCtpZDNkTlMhTX0sXnk9THJdMk9RaC4qZ3Iqe0tVbEwvT3s+S2lxNmpYJlhbJTh8N3Y6XnlBKntdbjtxUzVHTllWTEBtWjVLTDNbbVZGakA0Z2VRVllFcGZDRSopPXxVYEZ3'@;
put 'JmhvVWVbMz5CQV5NamYhSX00WSEvXWFRazEoK2Q0ZF93bytTR2tYbnlqdWBlWHx3PHNLKWFLUGl8Oi9CeStNO2kqKm1ZTWshTGdmOX1WSjtOanZrSjgqPGpeVXl3aG8iSWVKOl5xSSE9N2lUKllRT29CJTtYN25bXUouLHdENj9dd3h1PjJKVm89cUVkdkdDZ2gkcEskJUJPWj11TjJLQFRXSDZh'@;
put 'WCtDdTkpWV8wMD4lazB8XU1+Jjs6OWJzVj1wVWNDOFB5Uz5CIlZSa29McGg0KElfTXFgP2o9ZX5LSXcldlhsQ1MlY1UrSWNqST5rIX5BWDFEKGh4blpwdW1DMHx3PmxhRWFXSU8mZn5INC9AYUlIfGpoTGorWUdDS2woJTldenxibnh9aSZvODlbQXF0JHRnRXVWPyhnLF0udUAydXhNPERESV5z'@;
put 'fHtUXSh9KlZuTj5be2ZoTyFdOiJoWDNkPHJpRlVdeyVkdUNucldtJDlFdmwre1RELHFSYU99QzlTaVoyelE9NWtQeiMqJElifShJSnhNcUwzX2ZZUmp+WnBXcWFhPmd6czZVY3lQOShGcjl2XWhFYDU+WXRvTEUwU1Z6TiFrSElDIiVZYHlFK21XeXQsbUE7UnZUIWt9fldHOD5jcERUMD5wR3lA'@;
put 'Q2goRUoibkwjUXV3dWBvNCY5YTE8cDBqZ1M9MX5wLnRNe3s2QFZ5Pkl1K2leS2M+JlgzKjlDWSNpS01dLlg/bkEyWVE2X0okdkhucjV0MU4oU2hAWExaZn03XjZRb15ILDckKyFackhDRiw3QDBFdF41O0I1dWBQVWlbdEp6Y0E5SEh2bHZEZHZyTld4eiF7NVRMZFF4NnNDU2Qud1NZanA2VURP'@;
put 'd1U6XilLcEB7fnlBfWZAUFdUfXJhJn4rcDNURyZ4OkdjODVHNy4pITcsekU1UW9VPVYxP3VeKm9VcGUhYXc8M2FCNzBOIVUrL3c7I0A2UEssczcmOHU2amBmJj1vUW9wZGdgYExZUDVmQztjXXwwRChFUzA1NTxaZWJIX3VGaX4uel9aZTdbck5gT3NOYE96YHNiSWlqKVB2QnVVK1olfE9GSCp0'@;
put 'X3FpWWtYKDpwNkJ3WDJDVzd4KWQ2MUp4WStwaFgsYHdeJmx4dE4lK3U4a1tTTWA8KHp8P11QblJvIywzQml8eGApUX1LTnpLRDpdW1ZqMEhHWTY4cTFYcjtMZGlPa3lTb1Fxb0dgM3Y9KGY/L2ZIWmNvMW9kUm1Zc1ZhRTIvfW5ydzw7bksmYSQvQm98VCNuX1VaS3xROnJhMlhRfTllTF4ybm1C'@;
put 'XTFmW1VRKGZfLnNgK2xQezRkMHkuXlVxPjA5Im8+fC83VStXP1p2MWRke35nIWAxdktRSGczZ1omSCo2KjJKP05sPzlkU2p4S3V2PV1bYTR4el4qTT9vSXI8XlJCeTVjb1d9QTpxN10wTTBIRjtVUFpuemV9XUx9OmEocUtdTmleKW5nJTc5Kl0/X1NAfSlWSyVMISpTWmBKez5kM3NSRVN5X2Zo'@;
put 'QSpjekhGU2FKaDdfMENzYzRSM3AyJX17Lz9BJCg5e0UmZV5VcnhKbzAhTG8rVnwqOEVxSmg6LDlWN2deSV1zVTBoZnZDYyNGIzRRJDhkZjpfdiN6dyM+M0ZOZjooJFF4MFhdWThrRD91djomVkMzTSkkfE1RSUNYbzlQbit0fFtxWDNMQ2I+PDsjWH17Q09+TnchOiJ9NmtFUklzbj0hL2BbI01y'@;
put 'KXksa0tocnp2Km5oMkxIcmUycGZKfF1HODImfnpVI3RFeExFJWFiREoqO21SdHJQUn5edWIyJUtuZDxlN0p2Ny85JnJdUFJUPWIvc114UWlZWXVlNzEjJCxMYFN4IUVYJS80W2owfHshbHgvZ219LFF9eyV0WXBSO0JzcmZTQ10lKUNhOzdAZ3s2OnhEQV0rLilUUGUwKnp7Jk54UDl2dStNckdW'@;
put 'LmNEYyxOZlZYdWBWYFV3SzZROzNYQmY3P0w0bEM3WSxYQmY3QHx0XiFKbjB+RVMma2ZvKzxsbllnXkxDRjxXK1JoTFUwZDMkT194VmxmVHdHODtWO2RSIylXQ2RfWG1ORlBXR11baCFBQ0BHcjI4elssNmtwQEg9fXwuWGFxYXF8KyNmaisiYHJxJj52NlZ1S0BmOld6T1ohOWBTNnNFSiFuRTlS'@;
put 'S11+UzZoSkY5ajBoYFMzXj9bfkZwOzV3O0RrUSQsYDpJTGNvWjIveXNobGBzVkwqPEgvLDlxV09VIjNPPTFNSyQ3SzwvZz9uTyV0dDF5OilXNV89OFVpRVQ0el1xImNeS3N5XnhJPEl9YGAwI3I9TXl1a2ooQGZQeytwP2ZFKHB3dWsyYVRUQzQrW11SMkJdPmNxYG5DTWZyO0wrQkJ7eXY3NUFi'@;
put 'c1ROX0VSWHlFU2YscUdIcVRfMEhCWW5IQTJzcUB5OzokYEwuNWB+PUFbKSRfbEIoZSN2SS8zcS9yRjZtTnI8NzslSH0oIzNKfktYXnQmPVl5LFtPKklLK19LLzwzcDZiRVF3Wi5sZyM1MF5bLzthLmNvLDFTYXdjajxiLlRUeU5GISN4QCMrJGpTTjh7JGpTUmV7I2pTUGVEJGssYWlaSXYqczJo'@;
put 'JEEoaXdGUDpqcH5VOE9zN2dETkQxLmYzYUskXjF7Z2JXOnQsWVVbYEsuMUZkYWcicmcjcDB7KjRrPS9hd2lHQkUpRHtfVV99SEErUDgkLjgjdTpge1skKGNeMGs3MzJsYnw4OnY2Mz9eK104OTc6aGNkeCJlTjthLGZvSysjZFpxSWowcHl8QSh9RDthRjlsYlpdU3l8fC42LFV+YDxUQkwpPDVy'@;
put 'eWJ3IWp3XUVIK1s9JEBeSitsJDwrc2QxfHw+cFVEIzYsa3Q2XzVXVTJ8SmU1SH1HK2xkMVszL1shSkdFNzNZX1MrODlWK3hHNlFPVUg3dloyJiZNPDlNWVdhNzM1aHhqN29NY0RHc2U3Yz9kd2FVMkY1WSx5MGI6RmwzcFM3d10obFMyOiVpYyRFQlk0PSkhXkZWQSlSblE7dmlNYUN9WWZsQGBD'@;
put 'V3RxP0pFUipEdjReeXU9W3dLdSpGVl8kSTVRITAwMzZ7fURkdT9Gc0wpdjNSNEB9bVlLK3U7ciZOZTVYY2JsSUZBZDo1KEpAJmdJL2klSnpkJj9ibWZdcjZIdTEpZCMiayZtb1puSEVkPFsjaDxtNmt+NWcmP1Z7MG9QQ34zSDJnLlpfbE0kMlMxaldTeWMmLHF7SWtgemNnSG9+Z0MyTmx3TXMj'@;
put 'KWxdZGBzTCwzRFl2JjAyL0xNUGFhPnpTbjpGUUM1bERCa1lLRnEyMls7TjoxeFFsRUpMe1k9WG5kYHpjaX05OXJ5WGQ0NUA6aC4me0J+cj5YZCEsc2t9PGxsWTE8KlQyX1AqLkBSbTNAUGV2JFU5S05WQTBOUVgkaXdWNGNofVJVbH5gMU4xdk5ieGNhZ2V6XzVjR20xKn55TndYVH0+NTN+fXgo'@;
put 'XjtjOjl+eXNHQmNALklnWWxFN01MYDFaL3lzd21NL1dXMS95c01zW35Le0orKXNJQGJxK2VMbSpqPm99YUEoQCt2Y1NAYX5vMEdbO1U2ZDBydiZER2s7MmNTM118U15vakReIj4rNT9GYi8vMUwjTGYvYSpKWlIsXl0oIStQQGd1NEhlZmR4Ukx9TTc4NWdaJF4iIkVraUs7KnFFP0ZRVE0uKUxG'@;
put 'dl9nUnlRIndlXVBfMkBQPyNkQlNLUnpJM3w6Zl1qN2pXUnFLJGBOdl87NW9AelJkYyNbZlFgMWR8dnpLV1ZpI1QxbEMvd0hVTlBbQkMoIih2UHlweSZqPTxEJUhpTD49NVZHZFoqKEY/bzh8eVp5Wkg1Lz0iKHZmRGhDVVRpQE9ocWBAaT0oSkE+SjxGdXtLYERwejBtS2xrPlRybGxDM3hiVExV'@;
put 'aHsmM0xHJn1LXkxBRlZaal9HaHJVO3M1X1FYTHxrPikqKF06TExSLzdkO2FkK2wqJHhlOjgiaG5saCEmO3dQYXNyXXg8UGc0W3tWdD0zb2R0fWBdM3N5bDJaO0c5VTt0XmMzNEhiK1o4PWgwTCtXVkZbdjFqT3tyb0l7Q3d9QnNCbj4lcio9U1tlSS8lQj5LRyNffVssV3dla0l5ZTJfd1tMek5W'@;
put 'RD43QTBGVjckLHFFdHZbTD9CY2M1JjRgI01nPjZ6Y19qTV12T3AuYTBOPXYxJShPRWRGe2Fwb1lTV2tYM10jWjR6WSsrVkp3emppbH4mYER+Xj42dmZMNl1ncFhxNzRqfVVwSk9USnIyWmJPS09bVio7ejx7ZzgyKGRyb0xzYH1kUnNsOiROYHslblEmNDVIaEc1REtSVVRGIzIvZ0pPei5rfE96'@;
put 'V0hLdFlOQCxYTHRWPyNFQWp4KzUxSFRdTiFWK1dOYnF7PzRiO3o8bSxGWERQSy5eUmdJNHt6WElZeTZFLCZheVNKR0B3VU1hRTJYNUxEOWgqfT5MK09tRzEzTCpQa3dwSzUhRFhdYXlTWFhFZ0FtVy9LPk5eUV8jRDRqTU19dih5cVZoRy5nMTNtOVZyN2s5OyxOUipXKGl1O2BuZTsmSUhXL2Mh'@;
put 'LEJBMjBqP0pPUm58RzY9RGRnQ0c+byxeWG5KRWtkPjhAfFNyUGl7MyQjbE0pLGZsPSpUdWZsdGAyeHQ9UHV4RyU0WDEhakt7Ui40ZldJQ0k2N2l8YktrRD1WeWNpLDllRGUsWStZK1lhWXw8aSghPFU6OzhOOX0wbUdldXVYdjp8JXFXR2dHbCQjanowMFR7al08Mys8OzpYUTJyRGw+RFJQPEdx'@;
put 'SlA/e3FdNjl2bm9qan1ZflFCRWE5VGo8UU9TXzF0QHouezAhakF5Q29OKlovTFsuYChZYCYvcFAqLmN2LmtFb2JgMmFScD5Ya24rVDNFUT59LzZ6P2d+L14sMD9AcD9kV2pNZm8wRyFxc2VadzxyUU5zayFoaW8yWWR0fGhNfEg1WDhjNl9CdEFzKnV5NmM0MWBwOHV+SmdQL0lgPSFldFBub3pm'@;
put 'ZGZBMVhrKVFwS3kvKDkhYWIoIy9XeSRXTzVOKlFPK2ZXK1p3WkRaM1IuT18wUyIxJkVTPj43Tld1NnklPklrcUdiKyEqNV5TaTleXXJ3PjtMdT9nPTtYXj9kJGJzYHs3XmJLNT9kfV40T0BkcFFuJG5RfVp2PFUxNUBZcExtNTVHIzB5KHhSIlRyS1BZYGRlYE9vPCZEWHNLZWYpXThucCwzbGZf'@;
put 'KnMlLmFaWjU2QypKRjxuYCU0LlFsNDdsZTpNU1h7KmZ9Pn10LGFIRWYkS110W3J4MC9IVHpAZV5ELjVKXkBSdjpiYDNrWWt9YTQlLGF8MyZ7VXpLQD4qZCUvWFdYbDwxcTMlXy9wWG5TeHxVMEhIOEF9aipHS1c2QzlSYWQ1Q1I5ZXkrWTZLKWRwL10hVF81dE9pbl4hfkZLeCpWOmdFV19WOUgk'@;
put 'RXtXOjpwNWFEKVJORnNKbjxWI3ZqaXshbTN2SllfR2BqMTtJKiRabThNJFI3ZG4xfXU4RDhPNG49IyRsdHVZQEJaNjU/ektCbm8oJUVGSF5wYlVzQTJxbSsoM0MsVj1EOFhaXyFVJHlVYTl8YF1Rcjl8MlpZIzxQRHhIb1opbC8+P2BncnpOeURTPy5mczh0PTJEUU93MEt5VSs/WE93KHl6b0ZA'@;
put 'QH0rRWF1SCVLX3spZm98ZSVEOmoqYGlZUHk3OyhtTVJYY2oqND0qaWYoNHFaX2hPIUVdWzI6WGJfKHlDNjJhRXBTMXpodVN9THI5dUgmX0Q4cStdZEVAPSokTkAqKS5qW354ZWE2PTxLWSVkQjNXMygmIit9dEpub2hVQnQrQ1hBOmEsYjtqU2RKPVU/R1pdZShYLyV8QlQ3cl5WdG8yO1BEemBj'@;
put 'YDwlNDRLNmBmLEtzc3oyZFo9NGdDbCQ/cTU5OlVKc2VtcyNiPkpVPnUqY3E1TC5SWSFFV2E/MXBkWChRMSxhKml7MEVKTU5wbnskQWRYVkpHVl9HL0lUSz9rdzIscEokb2dLfWA/L3xPJlo8N1gsdXhESUhKYl5DTHlhNUIpdzxqPUY0dSt9R2w1dSRFRUtmO0ZgMmp9fUlBXnBGamFeQ0wrKHg7'@;
put 'Qjs4cGFsQio9Zl5vcXN9b18uJmRUN2xqWX4lT19RbUZbenJFUjdqRTtwNktGZmtDSDF3ZzZYQDckX1EzJXd0cFM8UyR5LkpNRXRYQDpXLF9dLkMvOE59I1hEJEdsIyxYK29CM3w2Zy4pdnldP0pKZnwrKSpXa2NwTGA8fXt5VnBIWXo0fklvP1VXe0BYbXVXezE8W0xIYHc+aiJ+UmZ6I2VMJChd'@;
put 'eVN7XWp6NiUuQCM1Ikwjc3tfLkkyZCtmM1hYSTNmYytGfG0+X0Z4RiJGYyxpLDFlWmZeYEd9Vl0pNzNqeUE+PjM1Q3MvPEhdTjpjNm9pRld2UFtnUl4wOUldL0YuN1d9L0Y5OFtORHVMYkdBZitVWn03MmJ9e2NSPS9kfWgrWmF6VmdEdzQoeyJuYkcsQSl5Mms4I0xJaW9SUillUzw8JCFKRUw3'@;
put 'biFTaGVHbj0+UX4hbGdnOHBzcVApKVJ3a08pdm9OdC9KRDlzeEFRb0VZNUp2OmpkcF8xZ3tnMkdWOjdaaWpWQDpjNDBPYUx4cXErc2xPY1FyKypZVjkscmwjLl5INnVifTAmMDpObGU5TGopbnNRfUZjeHt2JkRfSnROPT1TW2Y+RlhxMDNrWkRWWDBjPiRhfTBWbVYpanQ5RDJHMmlHUlkidDM2'@;
put 'JTJgcSU0YCZGZE4wOEx3Jl0xNE9KdXIueS9hW3ljJTAhKjIrKXQ3REhjPTJGbVY0cDxTXVBXVlckTjpKYjxDNkJKWlZOfTRNezdvTj9kVUx7NzMqVmtzbiYzT196P0E7YGtobVRNSnw5RjhePnAvbng/aGJyTTpNKzMkNEk8Z1BaWE1VL0Qldit3MVVIZVRveD9+clo/Q3owIzI4W1NhJWxRKTlZ'@;
put 'NklITEhGJWo3ZStzbUJdQmwiaE5hX1p1SCpnTUZJKzNEOkduQTpaNTFCeFZwdW94aFg+bmt7RDRDe2YvXVBoSXBMKiVINV9acFJeMnt7NlZ7QE9LYz0kUjIhWEU2M2RLe1RTMzYhKXBjJmA5RTpYPERvUz5rcy5AS2tfJDpTO0M6eXRCOnl0NylGXkFxQXA9JG5nO2JfU29NVE9xSmR6S0hXRkNl'@;
put 'ZnV5U3xrVzMuQklbWFppdkVhcCx1PjxRTjA7N059c0hCKUt7b1tdaiY8VDNAfihEdzA7Y2YuIm9SaDw3Iyk7QTR7Sj8pRjc7aTl8aVErQSh6ZCRiNjMvWTl8ckN2N1N8fD9hJF8qJntBcl0lKncySlhJfEdGMUIofi47TVZ6Y1Q3SkplWyp2d3RgQDNDOERzYEs9MTx9YGRwfn5zQHMiXzBKRTlU'@;
put 'JG9vaiQ+fjBbQnhTJCp+YEtfKGlBY0EqYDo7WD1Ec0J0XkBtOlZXN21NJEJ0QmxiPnFgMTxVXWhxc3dDey9SdE5gKy5VcElEQlZWVDpuSFMyIis8W25oMEBaIXs1IjVCNmQ6Ii9BOk9sQV1pJjZuPHg5IjVUNi9BdEIpKmBFUkNXeE9YMHs1TXJIQVdhb1ltKFRnaE8zQDcjT19KWDZCdl9mKHs/'@;
put 'e1JWKD8rVTl0JElTYlt8IWdCPitmc31SR09xfUt5VCV+KnYzOixIJX5DMVs9RFssZGFKTDtZNEpjSDJBPSM6RTtwMzd4XzNYbjBJPXYxVGQmMnYxWnkqLnM6NCJ3eU86ZTBucSlHMXIiUTxUcFAlXTI8KTxBfSk8WXF4IS5SQWZwTTJPQFduMGhKY0pbPGc6U0dnXj9YPDJ4RzRlKzxoey9SYC5V'@;
put 'R0JwMyUzJTBjWVVgZG8jZkBXQCs8WXF6dD8uaEhDYVV8Q3VTanpkLEZldnMqQE8xcTFVX1MxWmRAJFlibzw1R20xbj5MdmlgdVomMVBEdCNCLm99Qm9ORl1LQFtjJTtvYFAwIkJAbFtma103JGc7c04pbGVsQXd2b15iUXRgP3o7NEhXYnFALFRiPHtHdGZFUEMjJVRKZER2PSg/Sy8hQWkobnxA'@;
put 'YSxDW3Q3Tn4heWZJeFBrRmpkMWhkJE89SDlgeWJHSDxlQ21SPzBNI0t+Tn1OSG5SLnAkKlU8c2Y5T0tUZWBRNzdeL18uMTJeQi5Ba0FTQjJCLkFrX3twWlNjKH1gKDZaKjFJI0AseGZyNzxCSmFwQ0htIWF7c1JgPSt6bz08Ljc3OGFjMW9kTTsyZlI0NVVwSVp2PmZIZmVFNUQ2fmlHSGZlLnR2'@;
put 'flQhVkoseiQrZ3JoNEsqOm44dmU0Uy80azpLIUxDbUU8X25HPEB3MzRONzJoLkxqVHhLJU1nOURtZFNVczw9Ql8jOTxLZ0B4fCZ5YitwRyglalJeLz5ZOjRsc0ZwTV1FfjdrIkckKElXOUBhMzMxZmIiPGxgMHFwRDhHUjBHeFdSKnEkNWAxSjUrIjpSckJsdHh5bUxNXmYmUVBQJW9UR3B8YV9i'@;
put 'PFlLcHcsJlJsWXFod2ovY2p0RlExTio7b2VMXSJhek5UIW5QKXA1QFZmLGBHSVpVNFJ2ODEjKWR3OnVoOFdfTXNgVy8+dXxCNmojRCNlSjMpeEEjd1AzLGR3O1h4O2t4NVZjZ1FTPWc7a0tUWS4sZn1mcDBYfUYhLiVhL3pGRmpDVzhxc2U1QGsleTBWMmxsK2Q/UlBNQ2dnYDxyZ1I9VF84a0lq'@;
put 'TXwxbV06KHFqQCtqKD56IU5CV0MoVCZwJHY+aGx2Jkx6K1lTK0c3eC84VnNXIklbTUEoV0cxMlEkMSVseSN9fXxiSUZzbjdIIWUoeSUiOTlqUEIybF86dmVVbXBdLEV0ajVpX0B1KUAhJXo6SjtbcnlycTBeUDglbFhueUhNejleRH17SERZeDojW0woZkBQbH5yJTxgYyshPDhxWXg7bGY9OXxe'@;
put 'SCg5aigwR2gzTUFfLzR5XTdIdG0ldUFoOFR8RWJ5MnpPLG90dyk2bVNLZCsseHAzNXhGN2wjVH4pd09ZQl15amlXQG51LzYjX2dNMnFPel43NnRoI21FUVleKC4oa3E4XUVoXXgyd10yKS9XQ2JNWzQjd0NUWUc+bj08I01ZKnsoWCxYI0xdJj00QlR8OEM9dzdNW0t4SD1vVS5xPXdRXWk9XX4k'@;
put 'LmdpPGt+QyxdNV1yLkBxN154YHRwTFQrcD4pKlRuMj5wJGs7SXNDbTtdT2tba0ROWU9zW3VPZSNjbiY4YyYvfU53LzNnWiYrTFMuTUdnfiR1QzNraz1UT3JzRWRGP28yVlsvPSgwTHpfSFQxSzY3Wlp3dCNDcV9Ba3RJfnJWRnkvVlBoXk12dElAPG1rVk0+S15KOnVaWWhVeElTJltKNXhhKnsy'@;
put 'V0tIayhuRlt7LEo3bnFWIVtSO2E6Y2diRDkxR1p4WCRYbDVAOXFYODxoYUJiW3lZRGM2ZEVmU3ozRlk5VjZ8ZVtrJUAyanRGYTZlK3gwdCN+MHlneHlNbjVAUyVHJkZkVVB9T2w6PU9ZVTxnZEdkS3BGJV5tMDpTdWpgM2xvQjc7NzxJWmMxKGRJVUx1Z3RGcix2LCZmaitQQjZVOX5QOG5fPXR1'@;
put 'M1FQRTl8YURRcWo+UiwhSU0sITk5VUhdYG48VDJucHYyMmo5QyZ5S3k9bDBNKSQ1UmlXQFd+WFEjc3leaztQRCZLRW8rXldWYndRKVMhbmpzeHA8V1BIOGVLbEg2W21jJi5tcFgjVUZrZlJLNTwiU1cwS2ojLE1rTXlOVip0bkIsMVJNKlMwQGFaNk00PDR4NVc2PWwuVzhQMWlUaVU/U2l7KCNi'@;
put 'SmRebjNudSMhRTo1VjoydF8vS2xeeTk8Xy9FWGtYO3xKQmpHMSlpR1lqNCV2dWsjMXcjVndpTlJRMHpZeHAySUphNll4amAodFIqOns0fVFDTHAkdlJBbit1WyN6OlFsMnRnOnEkZzo7TkFMdj5MO2FYeVg4Vll9dCVBUysxdHpTY0lnX1U7M2JOOkpVTWFdOihbZiZKX01FO11oOmZebT5sZ01J'@;
put 'fCR6ITI9bDhpUz9vdHo4R2UxUSFCbjZjUnsxQnAuW2hxIitJfD9aQztRbCs0fTxqPFZSJDsuQCM6bk1HbmFPQnBaY10vfW53ai5JJDtTQzFRSCs1WmhDSSxiXTRnblErOiNENExwcGNFQCZeOy8pQiF8KVZ9Ql5uPjdYOGtoMlpNZT46SV8uZDcmaFRVUz1dbHUmSTshL3JiQ0QhOGQkX1N9TXI/'@;
put 'UT9OcEV9NzNTPmVvW3RsQkc6OVB+d0A1dl1gJkRZWmtqUXxKQ1lPMXE9XVR7Nl5CelFUdiQ1X0VEZH10a1h+PXdTTWxPa05tK04kO1dDcWEwOkRYaEF1d1ZWR2kiSk9KeSNVQiZjVyR+MEJ7dyxManBnME4lQlUwWTJCYTJoaHNAd2tvRjdZSGcqL1I3fClmSlVpWClhN15NRSEjdVhWZU47ME05'@;
put 'M1FAcU0sISV9JEJxSz07JFlLdzNLPTo6KSszW0xoeGYqOHBWKDswei5fVWcmN3Y1XXxWOnFfU0drWldkKSVyalQiel5TMFNXWnFoKmNgNkMxITNgI25RYitsX1piTHFfXXNrW30odygwcUhTMUMxQGJxfk8rZmMiPiMqOnV9U3pXW3x1PjZTd0pUT25YLHRIV2JYMkx2Mj5HLnIyYGZHRD1pdWdr'@;
put 'PHM7QHtWMXAybEZseUwpL31LSiUjOXh3Z2ksNCttXW5wUzhDOzd9K3JkR25LTD0vYCsmNml8RTh+e3xWKkR8JiMpImB6am1mPSN9fElKQmNFR0JjTHgkNio0Qm4+YGBgUVZBNiwhVjhUNUgyQzhyXXZ4UDtJa2BdR3t0NSNKPDczKXo4V3pjRHs6cFhmalI/Um5xQk18M3Z5NHRyblI2cG9fOSNz'@;
put 'ZHtbNThOXjkoZCQoQjtiQnhXWT8pSURde2Z6XkAmaGI0TG9JRmZqbkgiPGtxRTtgOFJiN1pOQHNNPVZucDBheHp7JWkrMl83RzVxSGY3U0NKbWFbM0ooWEtVaSw/S0k2bjlOfUkre0xlUi5pY3RmWnswZVhKUHZfQHolS2c9c1o1WFMmc10hX3AvPGpUdiIlW1h0U1dbIzh6TXxUSSVQR3YpJGxD'@;
put 'K1ZfTy93Y1A3KmpYIy5HVGZTYD81eD5ra1o3NTBMbyVhMEJbWVtRaSMiXSh7YmZ0UHlPWDl2QlkuJnR1dUoxKWZsKWFhOzc4R1lCeitMMVZ9Y2Z7SmxidFB5PCluIzx2WU9JdU9CTml8OH5OTTVdUmVNQ2lzZTdRZ01hKStxbVh5bUFTYkV5dXFveEZhMk1nRlJSdCY8OUJWdUpYKnRzbjx4cUYz'@;
put 'UzNzfWZ9YXoyO0dGRTxdKF08V307dEE+byk7SEhONW89QiREblk5Qj9jcnU3THhfVSI2KCVYcXp0JlgkXixiW2MkL1RSRCF+NmJALHYrTSRrViw3IXVYVWVgVDdkbihDWFM3aU95U3hScUtZayNuY186S21iJmFJeHxFR3dPPWIlXnJJTDJKS0NwNzQ4VVopQ1pwb29xYFZQRH4oOnI7U2BNMHZ9'@;
put 'WXcqWytdJm5SZChLSTtBXkB0d2xDRnZJQ3d4eFVrLy9tQTBOUkd2M3AxPkl4RSo4XTFuakdsem4kVmdgVGZyMW8pNTJeVWxwbE9pZTF7U1U+Y2VGazYvfUZiSmxDfUxwME5MZzQ/cWE2N1RvSE5VQCRaK1hBfSM7TXU3XltGJkVeTncvN09HYSNZcDpAMzxyd1ZXZGZ0MUErZ3pUNWwqaGFYS09X'@;
put 'Py58NWx4IT9fUGt5KF85ZW95NDVpaUJ0Z05han5tREZMXj9yUyNsVTRQWCNgRmgxe0ZTKUtJOyJGZGJMQGpgIzcsRX1lZ2oxIVtMc3lsYixaIyNyN19gTn10N3lxfmdtSWJOe0k7bSg7PmhRK3hGKiNIMW97Xl4qfEV1YkRBJlVne0Y5QVpwQipiQilkaFZKd2lvcWREUU4hQTRFWXtyUUcuUD88'@;
put 'LmdmSEhXNEk+cC4ha2F5KldkeXp5N0tOR1d0VmAlTXxAUyhNUUV5QCwuJTxONX5HfHU9KH1mU1BoTFBZYzw8W1UpVllDSHwmTnc4YH1qbUw+VDg+Iz4mazpLQjQ2ezl0PXEuNyZxdTxebzt6bk0uLDF2RlpjU0BwdDk4akl7KDFdV1Msbnx5S0d7c0xwOnhdZ0ppNiN7MzpdISU4YGJ9Ti97c29F'@;
put 'RHRFell4dVgseURRdmB8KlF7dVs/ZVRbSDVUKFtvYy4wMUF1JDV5P0xqXX5jM1kpWCk6QT92WiwmOWJCKXE3KikoOiJoMndNdn19YkxLZmVVL0JueVdAQCxCNWs+SFNpKF8qPmwlR2cpIXI+XXRqYkJtP25FYVcjUH05JiNAZD4kJiN7cGN7RCg9NGolUHtaRWhMQE53JWp5cDBxS2p5K241Szcq'@;
put 'dlNfWzIjciUzVzVUTEpmNmt+dT4yXUsqK0luQXpuYG01QEV8bDBrfiJ8aU1CTDI9UWBzVjxXNVR4Y203Z1F9ck1dWVo3aEtAfT80dmplezQrZHNhZzYxUzZ6Ul1zcUVsWTYkMkApZDFVMmR6aVdGYEBjQTYsZHR6JGQ/WFhaOixIWkBOfDMvWVdhVXM4OzZpNmdkJSFldlpgJVdESXo9cGtbOGVB'@;
put 'XXoob3ZvMFplN2h7YT9YbXtKYlp9IVd8W30yXy5ARF1MLHkzeVB5cD9hR2RLeGssRXldIktdcldlIXJUSj1BajBGTDI9JS9rTXx9X281d2dNYk47a3puS3xzI0J5b2dNLltmdiZXTiVPbV85JHolflpQLnRlI10yWD44Wjc6fSIqYmcmNCRSdWpqaGw/VXdqenJzdCVjWWdHOHpQMHNuVithO1Uy'@;
put 'VF9uTlMuazUxUz9bd1Z4PkVZb0pJUEw4RDd7PyVrWDNacE83Zz5lenM+VHcvdiJ8JnN1JllfLmZ4JilRe15JOEIwdGQ6QFYydEApYG5lRD49T0MyTjBaJVc4NlV2OSx1P3BTbjQifU4iJFBQcWE1QGleSGd2N2EyWGRyaTpAeSV7U1MzR0lqOFMhLil8b29QbC9RKDEsJTJLTmZHc1Qqc0tlRHpe'@;
put 'eHlgKCQ4OX1nZkEqOzwvKVNmLHh7MzJVWmUwbzwlcC9DUzo3IzZSQXNufCxhWk9vM2lXZVpfeSVfezZDa0tuRmYxfjpHIS9DTHZTbD56cnZBdmtGZFM2bEg/QmpLfVJ6QUFBQyIkYkFBR0g4VyJ5RU1LKjh5WlF0Z2ZBRkFTN3dQeCtTMmtPKHk/YyUqW0ZhdGxCQUFBQUFBIVdjTVNEcVc3aS86'@;
put 'Lj06LHZEYWJPPjthdzI0QElNalouQlg5VSQpR3RYZUU1ZDhVbGVqb0g1NUFIbSgjIXxReSI2aFlsJDwoTHFFYCRLWmpdZj9wN0UrQU9DcmxJYnVUaE9ZaTB6T2JGcG5qcyRTN05GailMeXNFLGk5W0FIQ1d9NnxjdF1gZ0s7fTY+eHlZPmc3SmF+MUZPVFlVWD51eDxxb1o4U30pMWN4UFZxfmAp'@;
put 'ZCUodWp5VzZ1YFFhczQ2VyIifWJ8KHVhcFlLM0QsZig0YllXSyE+QWtkIXIobTYrPShPTDxEdCROfGdJTj0vTlsrY2RIOlpEe186STArKyh+ZV0qLj4rO0NZO0I0Tj0mYkE1JVBCOHM0QWszITBfU101YDRpUTdvayh6VC5bNVZXYShSMDI4V18hLDtiLGIuMDA+O059cCJfViNVcXFgYXY9Z3pH'@;
put 'WU4/YXZuOmluW21gKnd8UU9YPGpZb3ZLJjBCJSQ+SXh9Pk9PPzhOenAoISthcU5NckNpSS9MTUwqOCtSfGlSfHhSW0tHLzRLYnRvJUdgayllUT5bSFdlK1U8Jk1TRDxFaz9ES151TDBifTFRXkx4dClUciVeNWdtcjYwR3lkb0twVl19RHdNa1tATj1BVGNnXks0T3lXZGc/OTA2Nmk3SEowOWR3'@;
put 'RVRIKD1RTCw1KXEpZG5kZUcoVilkMXopeHFle3dTW05Aa0c0WlJ+OTNyRjpuWEtsVE9wZ1h7bzdkNDhPdWlBRlpqaVUsXS8zeEo2M1FSVFs5TWFRTX1HeXRnKCg6MS99bT54O0JhWURGeWAhJH5BR0NsazJ+cDE0dDx0R3Q0WyZ1YzdJO1dAPXNEemBjWzJmQ11RZnJOQFd4fUVMMkVSWX15cyhy'@;
put 'YV5DMFFNfD45VEhxbUFLIkpdZEpMOFpdV35me11nUWlmTj9fKSJaRjl9KixKaH0+enc/ZnBOV2Q7NUp8KTs1bCxwREtZdE5Td3c8NVtPQStEWTQuQzZTaVg4KEFdbUhkTFddeTx3aitFTCh+UzBHcS8oQ14jJGk2LENNZmNndyFTITtzK3ZFWXFHKktkQTIlIjJwbVFpNUwrMmVOMFdHRT56IiU1'@;
put 'VGxCM0B7bC5PfEEoeHg3Wl96Klhsd35hMUVdfiNFNGB1QlIjTCY0O0J3TWYlRyRjOi47R31WOG14OXBGWWF9Lj1NSDJVPXBZPm1kZl1vYjNXU1B9aSl1VCM3YXdabyokX0Z0VnFGSVRtSUBPJWt2RnlCRzlZZit5Q3VxPHYoO3E5al17JS8wWm8oMHo7XW99S3FmKi9CKU8wNixXUzE3Ojh9VyJI'@;
put 'blovOTMmTV8rIWdaJDFCQjUjUWIwZVFnLmRsTXs+TlkjfHRXPllZWTJfPD9sWiVvT35ZRXp0M21ELDBye0trPnEhTy9wSj5oYn1VQks+Y2hbZkwvWXZMY0xEMHxiQmZuX31lRyU5JGA4PiwhPSQuJkJhN21mPD8hRStZb3d3JFRhSys+Kjs7TmM7dEV6QiEwbWp5bnN6Z09kKjxTYS8wb2FhSCxt'@;
put 'Q31fKVFpIyxScUlkNE5BbCgkTUNyYUNxKztqOWpmXj0/TjBAPHU/T1c/O0w6N09vM1kwO0h9Vkg3TzErelk6JlNHdTs/R2k/fkJRW310Rkg0UVloKkUoP0x2UkdAVShkRGVWRk4hcUAjLEN1QTF3fnQmVmZGb3koUSZtK1csSCw3eik1Nyw0QHpxbDlaTzAvXkZVNSs3N3ptTTEyUUkkfjJJeyYw'@;
put 'T3RVR1dfP0pNd0YiVFE1OTcxe1pwSWxiMS4+VF88Vn5mcGtWaip1aitfI1RaIyVdI1FUTUVZbDVNazd6VVMzP3N3KG5QYzNQT1shSGo7VDJzZ2hMaS89ZiJXTSM4ZVM6Y2t5ajE1UWVAXU9FcW85bmk+LD5jb0pnbDtbZG9fMSNyfl5KYVhnQ1o1KXw9RWNyP19qdDJhRzkuQ2FLeGZyQyxuNGJL'@;
put 'XkQoaUlPUTo2TCxtX1VmPGxLIi9PU2x3LipSMGovfEx+WzshcGFSWT1jYTc5LkMqPSNxTHEkNSUpUnp+bnNPPzE4RFE9X1V7TFo9RD9iZyNKeFdWSVcwLz15UGxQI3E1QkdLY2I9N2hITkM+dHQ5KVEzbnp4fDpXdWRZc14oYjxnSXdYSnRQemxJdTFSQD4lP19FXmtdc0N+V0I5UT4+SVRITE8y'@;
put 'IVd0RDJXdjopajZvSCgkYU5rRm9BekVlfTNeYDZVQWB2e0U5Pjw6eV1PelU8ZitHenVGOWkoWnxwYVUrOk9vSV03cz1FdkkoUEZkU3coSnVoZ0tLa3wiTyYqWkI9ekk5W1FCWnNBYDVockIpdj9WXXQ1YDJxTWwvbiNPU2JdRTosJk0oRyhmfXxmLylQMj5vZHB2K35uWF5ATitPYTwjLz5gVntZ'@;
put 'VjEzKXlXTih8Sk5GOW5YIUpMdiZdK2FZMmNzWHc1VFYpRXVlOiVLU2h3TnhqbzVvV1tEcmh9UmYxQUd0OH1vW0xfJElFaGBqNyZDJmdoRS5TPjlOSSM6eGh5aFBuY3NaTFBSc0RXYEIhaD1ZVWBEM3JPbjopKW1EIVsodG4kamozJGleQjFQXSZCL1ImV3QqP20sNmRLZ0VhdilFUl8jX1UmOEki'@;
put 'OWkiYVooSWdDcGtMRk1OSjVJI1pSb0Z4ci5DK0h4ZVhxNiQoJSg3Ykg9TThabkR0eWIjcCpSKjN2fTI1ZV1TKm9RfDJ4THBRVjhJYXtfISlXdHNwOlhTSWk0SVUoXWhSbDE8KFZgTnZSSzYiTUhZY0VZfD0kZkJaIyNzUCFkdUV3RTlAdGhsKGAkV191SCwkez1JMkJJMW4jMSpMc2xrNXFsWVE2'@;
put 'OWtYdlFCeT84KW97NyUkeykmJENCfHIwakt0YF8+U1dQNSpNMl9tTHwlP1RfUWExX016JH05YEhhXn5eTlZCK1hmWEgmNmB8NCQ5fmM0bVQvMkZXQDNSUVR2QGVieiMwMWpFNTUlPU83OnFBTF8yLEtpVEM2RmEqbzgxOyJFdlR0PSp6cSVFOyx2KmFFITorYi9JcG5eTjtOV01dQnhGIllaVUI/'@;
put 'cHNmOnh1a3M4Myl6eX0/JF10Sk9mYnduOGBBdTVwLnV7eG1VeSJMPmxrRzp2Lmlsa1l5dzJjZXU8WU4hO0okUys3WWpvaFNiKUwjYHY1UmUofmZLRVE/cV9gTUNEPWp1Qz54NVFiIjNIfkhJOWdCMGN7OUgrPjo7b3RjMUNqWC81bmx2akVIISVaNE1hcyE2aCMsZH52KV9eOUs2R1d6RX06a1dC'@;
put 'QXVtaCtAb0d6ayVJNm98fjl4eVVGSGhYQEFmS2BSW2g6W29mJGBueVE2Z1V4TlN4b3BLXn1NNUIkKXRNIWp8Jj5oQ00sVip2XUEqVE5ofTp0Qm92Wj5zW3dnPiw7PFcrczA5cShMcl5WQT4iX1R0d08lVGhlIVh0K345eyZMKXFkJXQlPjdxNUNxVXFEZTNacE9wOCJobi5wYmRxQDVzTnx7ZzEq'@;
put 'Sn4jd2xJJVE1WV99WGo7M1dKVj1zY11VO1BbJHYxX2NLXShPVUMrVTEpcj9FVCp8TWBJd20uV1QpaWxVYkdEVEQxT2t+RjtURm09QkNOWUdYdFtZYDt2d3pJaiYwOWtoLzZlTGI/WSFRfTc/Iip4KiZCZnpCKjxRXkF1US5JM05SVyl9d3h2PFphPGNde3JHLEcpLiZrKEtaRy5APXNwMC9TRStx'@;
put 'PTYzeHl1K0JTW3N9IUd7UEU3Tnt3UF5mZ2BPYTtsaG0jXyVSLFVEUUF5PHB8eF5ZN2M8PVkmcyZdZ0RicVdGKFtlaURHeEorSlVhaklEUnF3RDlHSSZfJCRXUjdde3lBfG9SPjY4YnBKRG4xMTBddX1PZHpvRjt4Iyl4eTpAfHdia00uRHhsMTdGaV15JC85TWNWJCRYeX10NDwxTyE1TTxnJSVS'@;
put 'cT5mcmNoUUlHfGxoZVJXNldtcnMpJXtsX3trbFhxa1FsX0ojXyQjPTx3KGFjVjY6RmxpVE5naHpPXUVQJFp2RWV8TnUxZS5YXTZkJUIpYlJYYzA0I009dmxWYCh3SHhjXXwkZHlbOVIjZGd0RWR8Y0BAJW5ybFl+TT1QIzo8LzRdRGVELHJoWjFEcT9XNWI/VUZnOH1UVXZUSjxGXix8TEQoOGAx'@;
put 'K1pocX5uPy9Odi9ANSt0ZV5vOl5lT11yc0s3bG9xc1tjdnNCV0dOUTNgc0xjOUBkZkgoTktoLjApPkQySFZ0WiVoUmliVFcoJnxwKFRjJDs7akdpNXxXM19PN3tWbEUhNGBoMD5KR0pNSDw+OlR+P3UjZlteVSJodWhGIWd1cSRmXlRJVXxQWiksTjtGWiZ5JVhJRCE0OjBePCkoRC9pTUQ9PCV5'@;
put 'dXhXIThWWkk1UFdhbS8uIXg4SWgrVzspam9CL0UvfnE4KShtS3FpKmo2VEx9STpuXmpxVHJWVE5tWTpuUkg8ajtmRV5ReVZbYzZvW1t5X2FQWCJVJH1re0FQQVQlQl9hbyNNTStDa200IkhTLk1gW1NjTEdobDFMKXN7WykjQUh2R0gmbi81ayoqNH1EYSJBLzlBa11eXnhdeypiZTBPaDlKSl1s'@;
put 'N0JNeUhmMlJ0WF8mIUhddkdyWEV6S201V352dU5PYEpOR2FeK3RScWx3cUx2PU1DakRhYUtzaFtLYlZeQjBrZXwjNjFMNHwvXn1PWllkQW8lQjBtYCtAJkB3JTk3ZWUyUkBhXkxXajswbEIoeTwoRFMiQElwUmtEfUt+MlpbaSlxKihXZHo2TmRTQyMlWGJlUStUNz9pYypwLC45Pk08SndMejNV'@;
put 'OnVVR3ZDJTFXTiQ5Q31rLCsxO0QlKCRqfHFZfE16fGk3ZjRLTlo3enxHQ21bT2ZiMD1nNDBaNlR8JiF8aTN7YSlScDRGXnZAK3UxLFB7IXpzLnBeP1YpJltYdnJWUXplNHIobnUqck58ey5eOFJfJUVUan02MnZPJjkmc1hQWnckS3VeKzR8e0MhbXVMJEVWelBqenRKZHR6T3JyOnRxaERwcVo1'@;
put 'O1lRQ3NBZGBWZyYyZSxhSEIxelVrajRlVkVjcCopd2tlWj95SlM+UE5bRV1uLigibEJfXU04RE8kLilONSt3JWY4UWdfcm5FPFZgLzlHUVh4R3MqWEc+aVsmMCs1OD1nUjN0JDp+eUx5LDJ9YW8+c1piS3pMS2F7PkpleEJNUTZhcjZQYysmKXJwMERob3FVKmhUOHxvRFEwcElBbXQsXmxFS2k/'@;
put 'V2MpWit8NVh6ZHZsKiNqNDBESElAa2F2JWVZSllTYUw/MlhuT0ksWSJ4d1pBLkcuMmkuS0R2aUhVb3xQc19Nck8wSENEUXR+KFlUSGhHd1M+WEB7Q04sP2dSLCVsckZ0V1NLbk5yMkQmZTxabGhWYnIwb0k0OTdXVS5BQDFwOiUuWmReRThiPGN+MXIiWGQ8Qj83LzN9ImAudSZiW1BpRVN+RjYs'@;
put 'ST4iZD96KFhaTmI/akE7VUpjS2hSdWoiejcmeW1tSyl6VG9aPG5gMUNjVEFAZlp6TCxre2tzcTphMUldRms7dzZARGZ5NHRvTiNDaHpIJXdsS2tmT2pPczw5W3JmR2RBZUE3PlVdZitkb0h7MTE0cHN2YnhVeSw0MVpJZVc3fkEjYWdnSFQ3dzZNUWQ7YT5DeHNjXTBNIlJ4WWhheGtHKkBAXnkk'@;
put 'Ozp5IT8uJDtYQ0NnZjo8OH54M2VKYjtWVjV9LipEP0lYK2ZqOmNOJjhOQGdqSUghM1YxY1J7aUNCMXdqO2ByW3BVMlc5SGp6dkpuJTdDWlFZOE0wUnk9aXN2a05PKF89cWw8fTNTJUouR185azM1MGokLGU2I20xc28jajVOU1d8KXgjMHBMVWF6cDZedjlaMjhEZGA0Kip4SVZIaHFMYCQhOWBL'@;
put 'cEZYJFk7YHhQd1V8OVJpNmx8bFlfKG5GUnU1TD89OCRJKnVZdiYhKCk5UW91PFpheTBbZjtgdjY1PlZ8SHR5YCg/O2NPKzVBZ0p2P0gzMyE+PGMyJSx3d3R1O18pSWpYfGhGWVtWNnVbO09aOyFTT1RoLGxvMmRYPm12Q0ZjPVVrN20hT1NCIywvQyEyY2dBJTNlKS5tYlpfUSghM3MqJmxKXklN'@;
put 'UEVOUHp+V3BnK0VzLE12bkhURUJ6V0gpfFpVQ2MzWHJEPDJ+Mm52UjU+MSlzNzRRVUYqO3R6NGpoNU0hODB0clojRCVkaCZbITBSRyM7dkA2OkVdalYrejhiQjZSVX5rPXUsUjx3QzY2S0E+MEREYEI0YFJbdjB8LHk9OkswXnlIQThRTSUufCosQ09zZyYucmJSPURRW15TQiNjbkZUOD01O2x3'@;
put 'Sz58Z2RLNl8ue2krMi5ge1VEOGMjSkl8UkxkVHlXV3FiPkBKKVs4Lk0+JU5IdS5IQllaRTNoMDUyWyUrRFF4TmYmTF5hNmtpPDlhalJKOGg5bEtXMUF2KzsuYSttYyFedFlDQzcqXmEiJHkralN1M2NbcHAiJmRPQyQsZk9LJEteMC4rS0NiY31xdnQlW1daTnAwI1FzeWVrbWlhTVtOXnZYTG1r'@;
put 'Q3AyX15DV3VMdDs+JHd4aGs4QVY2XTw9RGU/SU1ITSNmcmpyU3g+JisseHNSV3BgUlpoQlhSfGAxe29YSHV5Kl9pZmcpbUxYWDRrciZ5I3MpVFcxLytBRW9hY3dSTDZOfXcidnVESDA6d0kqMlk/VXJ1ITNVUGkvUUw9ZmJWIklGOnhaOTxaIV5CM0Q0L0JWRHkkUypHY2NVPTxFLE9pKX5iZ2Up'@;
put 'KHIwWk9TSiFpNC91KFttJiN9TWgqWyJeanJiZkl7ZT5CTihvbXFQaHBpSiI/SVI3VmIlYHBULkdtUUNRJnN9X0tsMDUmQGRFJllrXilDTzFabHBkdyRrPn1KLklNVjZOeWgkW2smYmd1dzBESTwzUV0sL3JPXjR9LHtadlU4JDA8cGBSYyFEenEiVThRTGZQKnFpO2dgUHdienAxaVAySDx6fGlt'@;
put 'ejpSPDUhL0grUlBiPjsmL1ArMkIpd1NrcDRjUUJGcVNCQ2t7KUNSaylFbyJHRUd0JjMmdnlCOzdOPkw8VFM0UHdmS18kTiZyMHV9MSlRO1oqfXNqS083KT1iLi9VUUZ3R2M0Tk58YUU1ZHtIOj1EL3YzPCYmfjc1aSFHJHpmSHMpdFEsKUx4NHx1KmQiLlZmYV87NyleP0t4SWZaKlpGWiZ5bTpv'@;
put 'RkQ+I0tDa0x0Vj1zc0JEcSwmUSN2K3lWNVNAck5gPHEqUC8wVX4rKV1pbytFWUQ2dSoiM3okVU9dJWJlOl9IaGc0b0NoPilaMmd2JEl8YGFLWzsvbEZMbFpkUXRUeUI2WURuOE9xSEYieTc8KTE8W3NCcjVBMmBDI0coTlRRUz9NTFh1cj9iaU9FUCRVRj46fGFlSXJpLi89JmtgP2NpQnRUdjF0'@;
put 'R1AoSGJ0PjNxRC5lJTljQWdGbzVxaWwoZkQ6ME0vWUhFRDZKLl1kXSliIlMrPHhqP1ZSRnp6cyQ1QzJFSzs6LGg/UXlOXiwwUXxeMCskWVlAbTx5JSslV2Z5XkNWKD5KbHsqV28zRW1MVipLcDQoPUosW01reXFgWE1aO3tIbVRSST52VFckWUI0NjxvZVUyR0tDPkR7ams0KVpqWUQyUEVDYiMi'@;
put 'KyI5Oj92MmxdPXc2UiZid2ZfJCNMMCZIU35qLF9VaiFlPmlMfnYzMVI4K3dSaHA3fXQlOEQ0WFBrOjFOUnZPMzMpdlYyTC44ZUJRfHFQZlBFNXpfQixbe2JLYE1XfmdeS3s0a2lmM0grXkFIYClkQ0kvVDd8cSMlPH4vXzEpTHw4LEQ/MkpWVlN3SCJ5bGVxJWB9dm9Wd044PGVCMiUwIypXMypW'@;
put 'b0MufjZZb0UxKl9ZPSZGY253UHZ4IyZZYylbWW1+Xy5oKno0cmFdSGlXckZ7NE04KzpuLC8/RkduNj5XaFpWYHBYXSxWITsjTl0kQl0yLzY5TXh8Umw8dTpPbkoqcEg1QkRhL0tzUkNgT35ZTUZONnF8WGwyX2hZfC9JP0RjQTVCa3gheCQ0MFZCcDslKzxNcmpiXTR4ImJubyI9KjVbQ05SfVdR'@;
put 'VS5ETm5oY3pLLlc3TT4raDo4Q1s0WUhlOEtjXTRpcDojWTxvXUxEPWtZa1UyY2l0NUVAUmk4anNxLlVJOi9hLCp3V0REOj81RWd0MzB8OjFuMWpyWj9DUH5ZNTJ6MGFQQC9WTVRHdV1AL1VeaGR6OFo1MSNdP2lFRkEqQHM5P0QmZjt5PUl0Xk81bn12eXxYQFYrJSxacjF6MGo+amUwLDkqN31u'@;
put 'ZixwMHVqRi57W1g/ZEEvXyhKLDVjLGFnczt7TSlhYTJUV2o9LjFCZnUkXUx1ZTN+cDd3aCZUQ1o5VixaXzt1ND5IYH52MEd8dCV5dS95PjMhM1BXMjlVQ1ttOTdRUV4uMEFlLypQJSgvNG9qXlI3Qnl1TGx7UnY+bChrS3R5bU5Ae2lsIlsydEZePUk3VHguM3JYXypJfio+Q2lVNiw/YSFUdCtN'@;
put 'WG1ibHVmOzIyWWA7c1JWO053KXJja3k9RD1gdDd1OWgqMytwbXNlVHs+ZzdxPj0kYHMyeE15VVF1b14iIi4vSjV1MGo6SVpAZ3FxSlIwJWxiQ2wjNXtKL295NztsRWt6aDBdSjZLKSRESCx7RUxpfVhmbyxiYDdvVks2NiJvZEdpPFk1Z3xJYTZhe2QlZDJ2SyxfQCQ8Q2VGIVQ7YEhrdWtndChQ'@;
put 'ZjJ1dj4kK2hAfHBTeyYsRWZ1XmR6dk5oV1RxNHs4TTFXTXIqLjhxMC5SUGJ1cSIvJUp3JEFTUyp6WFNWSS53dmlmU3k8OHt7YjFpSiUmeUt5bmZGOTcpS095am83KylJVF5TSk1beG11OktvZn5vLmUifXdZSWI+KzloSiNGQitVRmUuYk1hU0g2PmgiWjNnZiNxPERHTXFKfWcoaXolRkJPZlcx'@;
put 'NlhaKV89bVBpUDlLYV0wI29wRyVsVTtKVCJOajR7SzhuNiZCYiw0RXoqJWMsZSxgej91Y3s/VFsuNkBATmV5Ulore2lnX2wsNXRLbCloWkRjaSE7KTFtM2tpSVhrN2U9bSs5UlMxSjIpPUpXPllwUyEpclt6SEw2fTc9PUBNU2JibEBmWk5eeT1+TjZLNCZ9OGkjZmBUal1WcmJ6LGtNOT1KLjF7'@;
put 'UGJ7PCFeMnV2YUNCY2d5a2kqLmhfYWR0N1YsbGAxXU0vKittdT04NSpZIyt0TFV2RWlWdjMmKDQ7W315RmFVNDVFNH59Y2kkejQjPylCdXZtI2h3WCUvUFckdTtqTyp6aXdwayRHNjpSeUhGZz9gQ216VVpqTn5MNUpEIyg1QyhMIl5GOm1IKT1MPFk2T2gjX3ddOFUmKjc+NS5jQGdobnE0Py4q'@;
put 'SV4veWY1cSteP0gkOWtmdjIuOCJXO0RGaDBkQ3BZV2I+NHA7e3YuSlQiYWFmaEFiKUJkbzlTKGM4QS9bUEB3MyF3cUt1RSFYPmw3aih2JFJ7X3VnWz47NkJjK10qKyUvalh8YyNQKFdwYC4oeHUkZSVLXSI7SCs2OVdHWkVyLnpjUGJCKm56TmRiXiNZKz45K0RJVz5zeDgxTG4kVHZRZF1YKzUl'@;
put 'WzFDUTYmdz5QJWAyJDA7N248OFImWHllMyQkPC8rQEg+RUN+LiEyWU4oUlZOYERkdCgjW0NidnNyRU0yLCFrdkxuUnZVRD9nOW5gZkg2IjI6WiF0VU0kNixKOlMiMXZ2YFt2MipNV1tNKH1yaGs2WXtNKiQxcSRsd3I7aV8qKztzP0xuX0k9VUhUVy9VSUdELDtNOGpDaztsRk9naTBsNzBmKDI9'@;
put 'YnEwZjp5bU97cDdnOjBofjdFK0h9JGwubXchKXNqaUMuSDJEZ3JkZFooLy5yZzZZRCh0Z2k7XT9IRk41bE9fLFtNPiYrd0AveiNOVXM0VGhfUmwvcWJXRU04Ty89VTNGQCksME5GeV19dlhQYCM1cXA2ZlR+Q241Wm03KSROciI5diFPaFBjZWs5Ny9ueGEyKzg6N1IwbzAkY2JbZGB4MylPUGpo'@;
put 'SUttO0taTTt2PVlUTFg0TjZbKH1sJHUsajR1V2VFMUBdZzZvTktdNlE8Myg/N2h3aHlhSnAwYWVGPDY6bn5TeShRbVdrL2FQNDMwUSFEaDE0MUNvTUVqMXU2Zj9lQ1FeWztRV3E9Qi9FK21vLEpUUCErNTF8clczbHR7MnlgZy9EYDZ1OzkpIVcxUztNWWVAWlpKSi4kUjElV0dRISJkZUhkJnBs'@;
put 'VCRvS3REZDtSPXgpSGhqS1dVQyJXaWU6K2QwVEZsJVhIOnd6WFJNWkNtcGIzKlJaYTF3JW47fEVuaiYsIXk9bTFKW21hWGVGb3hseCJLLlBzcWBpJVQ1TFgyLDpgdlFPPlNTMD9Bc2N4T0BiT1N1MjpZJTNYJVV9TGlbQkR3ZXU8LF1aJSx4dGNuVks7W3VUcThzXSY9UlFzM0tYZ2lsPVlaUzBZ'@;
put 'eH43UitmXiRMMzQ7N0RkSXdqUEB9WX44VllCKW5YfGcsSnkzZHB6TSk5clo7dnlaIyJ6Ni8iWjQ7ZH5bTXkla3VlU0puaWpmWDg0VzQxdixGM3RWREdtVWxNS3wzI3U0JmUzTCJYMmVDSVZROX4vai5Vbm9OV2c4QUYkaXpvKGclUndGJElBNGMkSEhhb0Z7QTEpU0RaJnFid2lRaFFuTjVmSWYo'@;
put 'OSZtPz5HdF1LXl4pYWdRfXEzeX5zfTwjXm5XclcrQElaTk1YQFExTm1ASj55RTRVL181N31GJkpeIjFmaGh8fSxZKlJRaCU4Jll3LFclVV8+clNNLkwjV1FZS1BxY1BUISs/REVaSHhJQDZ8YENIZHF5YjF2OU0oMmxUMytHJE97MGk2fjpURHRISXVgTFJFRzs4IVI7ZzZfLEV+TV5wSTB6SEE0'@;
put 'Vi5aajdbWH4pL2ZiVUFgWUd1ei85cFVvTSZKUEdMYWp1bUZGbWJFQHsxbHt8RSw3Q3tfMm9iUWREdj1JcnZoZXhWZSZgZDU3On5kfkt6eFMmc0JyKHt1ZiVrSSRDVkdSenxZMypASnRgcCxyNXoyd0wleCxZVW9uRmh5dXs/M0l1VzljYURJVF1HNjpZRTwoTT9pRFFXfDp8UyowWG9aTHdKJlc/'@;
put 'TTVkS0M5LzBTZk92JXtxd3RtWGxyJDZiQlksTG45Mjd2dis9NTJ1WSNrSktmTkJmO1UzNitNMmMwWk1Me2deI295fHlLYHRTbSVxdTphdzdGJFRhK0AkVU9UW1RFNzFSc0lbRl0lR19eaGJAJSV4bHVURkZTfj8rT1M3bDJIVj5HaSowaWYhSjVKclkxayZJcWNHclRlcWBETTAifEEkeig2V2hY'@;
put 'JjUmZCkyNTtZOG1PZFBfRW1DfVgzTWtyUSRPKHFpU2UpKH1ZbUZgMTlkQlUmTm5VWjxMfTVIe3xfOXApWlhNMkhKMSE8OGFiYFRQPnNVTEwwI2JvIiNvRlBIJHcoMSRIMj5bXk9gSU5sSDhpZiU2JUAuM2JlTj1UPFdnfCt3TmZjOXxXNENjfUBQbilhaTchZXB1X2tJM3RURWx4KlpKSU8kXkkm'@;
put 'XS5idkBCdkloMXlSTWIyO0hCM15hQ3NFUXRkXkk1SFFzS09DYVlSeFo+PUQ3YiZQPXdtW25OYFBjfXkwdUBqKVBucXZVeCVROGBgVy9tVV1vOWw1PnZSbHc1aylpMHdKSWhzZXwmbGBYNEZ2Yno2NyhgKkRbQUZqdURuTkNVZEFTaUQqS3BUTT56WCEveiIvcXlCaz4hTVsjey9IIXJwKUIqQWxq'@;
put 'SyxvOG9yL0phTy56dEx1PzA0e2IkTiQ+Smg0ZEYvJCp2Z1pQMzt8WFY8eXZYPE91V2AwXkYjdm42UzRpNGYwUV1JZGQye1FSMXZxJVE8WGkwTkNaRFBtVzUvKUcscDJhe0U9N1V0dT4jOTApYDUiVXsxMVtLaU84PEw3cG44Umw/Z3pockBYbnlvdVtWP1dyeUdVeXRZOCNLaHwlLCh0MVsyZD1+'@;
put 'NDErYFk7THQzSD9wbCtPXXNiYiJxYTlDPl92d3NwVGEuaXxgMmpAblhrektjLmt9QHN3WVJkUTxHSl92fT9RJG9VZlFYSXpVWXpSYiNkWlM/fjpKXWElS20pbHsseENNc34hQWJbVEFONk85SjI6WHhORUF5Iz1fNyRtX1F7QXthJEoiPkB8W0s4SV19LnpyNVckTV5udm1yZit5a05VQlpvYkhL'@;
put 'ODciNWwkMXEwKUx1aSM6QV0lKWFjYlguRzhpS0gkOFlfbWs1aVheflsvVXw5bipEbUpHJm5fcGc6UixHfEpQcUBYOndUYXdEcSJEZTp4TnRTRzolfWNZKGJgKW5IKiJfOzpkP0VmZW5AaV17ejFoR05weG9EVVpxREUjVEhpJDQ3XkMpJEgmM0Q7RVNEYWZYR3tyNVBTRnM0eVtmVi8xWmlyLF9q'@;
put 'QitjPU5CcSslOzZBLnghOUMkamRCRztMOzBwa25dOmZxJmA8NCQscnY7XWF6OUlESjhpL1p9ZHppWG5uKWI3Vk4zWEY0cHlxPDEzMnNTPVZ9RSlgQyh1SHVvIT0lblI7e35pa094P1trNTlCMCQxRjQwfDZIcF0mMTowb0tGSiIufi4ibC5MJHJaRjUlUmZjQmZuW0JiJXJeQio9KklmSXNfU11m'@;
put 'eUNKdmZTXiZUWHU3PzZAfnVaO0MmflpmeEQ8alpFOSh9JiEsWmE1SFYwJHJZfUNiOWhkRVRadXNkeUl6OVROKS9tKDRtY3EvO0hrO308cUN2byZacE5LeHMpcGo+XTptfmdCbj1RMVhVUW8jbEAjZ2o2Zls+JTM0Q3UxP3xUZ3d6eGw2Znc3SzNxXmdXO0BPcFVwQz9NU3x3QDdIU188d3tQKTo+'@;
put 'Skltd29LKnx4IjB1Xkx+VXpQITRHPldxIW4xXTkkQTx4PkBTRVtCYz04XlI/ZTJMVktLS0Bsd1E6ez9Cb0ZxLk4xIyhYRVApUWEjX1hrIUtYaTIiUD08MyVCKFBle2VyclM8fjpUYmQzLDpmZ3t8ejp5dFB3RyhRLk9FVE8jOEVHND45a1JHPV9fKUp9X0lqZTZVI0c9YGt5W2E7fSssLmx1Vihq'@;
put 'QW9FXUZZSlBKU346T347Si95PylaPU9ybHVQVj5qVmpYeWRSN25WXjx+Nl1TZVs6b31ob1ZQdTFpRi5RXTBndzkxSmxYI209MkpxI0U7K3BqNkB2VSQ0REgrJGBBW09QSEglbUVoKTU/SFRaW2pJJG89fjcqZHhXJWIrRlNkQko4ZyhhVk4jVX1qXjxHZF01OD1va05lVlJWdzpfTlNJUm01S307'@;
put 'OFZCUFNPP3xmQjthTClhaFRoJWkpO3A6NF4oXnI2eHtKPVExOUpkUStgRXRPcERqayh5QiRGZl9UNyVAMk9pZFVCOT5mZFRLK0NIaX03c1hTcWR7X2huVVFteVY3dlNydz0wL1Qpd2k4ekM5IjpIO3w2Njo2fFBtdWFMaCNVOiRgUHduPnJ0dWdsZGBQdi5yWm1jUCVHX3pUYyt4cW5NYDY4QzJV'@;
put 'dmhKS1s4eEpgU1EvWEBUemYrUTA8bGRhb1QwYFp0ZHNdNmtPVjRmY3hpTSRFVyJESk0pc2duPnlbKT8/aSlVbmVsY3lZUkU9VGE9clpCMzptYVZ7TzRkJl9NTCQhL1lZcm5dZjcuVzduNVpJdFVxNyNZX0o1ZWhbRkwyZk5SVSRlejZXbVM+PnYiNzVCez00TFo0UnlIV1hvKy98JGp2Yzl2KCVV'@;
put 'fFhGa0lDay9SbGB0UWRyYCFxRFRUdl5SNmxTWU96SGBIdyIsRV8zJmJXTzYsbl5eI0VJN1RkNkt3N3d5PWtZXi4lR297JWo1JGVyOFZobiokW1cpbSRyWUd9WSltS21adFpJSVd4R3xxMGZyZHVbSUVbPmhrRkF7XjsrZHBBeiUqfSNzeVcyKDwmQTchfWEiJjcmY2ksRTttKS8oXytDRjlOfik1'@;
put 'KzB0Jltzd2FadXRYcUZrfjo2bTRUOmNWRWZrcWtTUTNpOz9eNTdnMSlOaTBreWtMbkJ3ITxsW2tuW2YoWHZ9SylXaFVJSV5Qd195SntHQyYmY1dHfGFbJSE8QndUL3RVeEYoNnd0MzdsVUJhSzArWTtSSCFaTiosfWV3KVNLP0l4LFFvMTI4dSVVYTpwZWkxPEQxTzJEVVh5Q2tYR0RgMXhfdHVe'@;
put 'JUJhcCZqN0tzSmFZP3YxdyNfMWtPVE5gWG5PYFRVK3V8IjJWZylyYXxeYTVSWFhadkl9fk1GLGQ9L1FPSUtZcHVKQlJkWXQiTllmbkpESVcwK2UkSisyejA6XSF+TDpRcjM9Xl43YUo/SXpiQkZjW0N9SklLMnc9L0dgTWBKUTA9ekZBdHJ7T3FWbHthJG9RIyZofGV0MExpQUc1Vi8+Q3xIUyZH'@;
put 'VV5LdzdRP0JdQHx2WnQrMiMhOTxEIlZ5UzdjdWNhdWwlV1AhcH5xYG04eGteOD0mWSo1MWp0V2d1bS8+dXRKPlBkaDVDZDpUUTpYdXBjeig8IX4qPHRzP3k9fVptXWspNFlqejtfQj1jQH4oenBheUB2T141Tn02SSpOOm40Y0NlYiokJD06KUdrXTI6a05UYkM9TGc2VW09V2x7UkBqLEQ8bXdb'@;
put 'dk1IIjhaR0wuV1sodzdVQlJbK1FbVmMsfkM+bVttdGhBa2AvRzlFWntBKEBXYV8xNDtob0xpM1l1TktDbCpUI0kqUW4qNFhSbUQ8W25dRTdCfV9SaWU6dVIzPldKRXUmSXkuM1gxQ0x0TDxzNTgjeyM6dU0oeUFGIzNxdGd0ZDE2dXQ6ZiIicW1JZy4zcl9MZnpAdW11dCsvSkAlMTh+TUJFcEYz'@;
put 'KUspOTZ3RzZZWk4/cmZRey84blBpMkojflI/KHddO2A9NSE2XyQlTGdjTF5DWHU1Q0h1eGMhdkQzOmh7TWxWW3MqdV1+cXJ3fV1ISH5KJGsvdVdFYS4yTWxhOj92X354YkBzS3dCO306K0hraDkzcixvJWx2bUVZS1kjUns1VmxpMmsqYj4vNn00Vnx0aX19WTR4aUJoajBFOn42YVBzZlk0T05P'@;
put 'TCZ1dTxyZVlebE0oYWdxXkhPZUNlXUklOnlPcnhZcERnZXx5NVd3YERMYyR+USpRbmFkVjgiekdqJDVzMGkzPy9xZjw9SGFvanclby4kV05Se1NfJS8/fW0vKnYqMCQ3ODFTeGVoNE8xXytCfj9zJS8iRkU/ZHBBPDVCc3JrfExdU2xma1kmRTUzfiVYYTUvOkFoUG8sVGNlLDAjWzkkV3k8ZTV+'@;
put 'YDFMLjAxWE0me3h8YTBjKkxYeH5GJTMyOmldWGMqLE9lIXgwZXtUcTVQM1lxUSZlKlIiL0h3P3QpfCM5Wi5+bmUpbEpKYzZLPEs7alR5VWYpTyNJUClUdiN8SE5rZ1NmU2A1QlFuS1FBbkpjSllmbiRbaVlPRVBfTF9fUHs+cllNcT1KeEk9PFh3Oj82STw+TmNQMnFdWX1dfnJXKmhsSHxZeGJf'@;
put 'bWtMajQ7Sl9kWUJUbiI0On1tTCRIWzlxIj5dLDUqWUM/cHwvWkVWZSxSSFNwIndAUHw4QEI4X3tmbnpXTTROREsrLmBwOHRdazl1NFI5ek5mWTJqLH49SkspMDsiJDZQaX4zTEhUbFlYaiY6dFkpSlFbQjxuJHNlJWkiVmtveHZSd2kqPGFbPU1oRHJkPldqQCxdSEZdd01zU3Yrdlk1YjRyP2R8'@;
put 'SC5jO2xTMSRqXzdXZF0kRTB4bWNxT2hKbVosQ1YxX3g/RVo1cWBBeDtIbjNRMnVNVF0wfl82djApQChLUmJ6Nj1bNGxCcT1eNVd6QCNgV2I9cTZNUVlGUHVfYihBcztwRiQ/djh+YWdCQ2pkODhOcT8lczwlWGB4KjosYn0lZDtGKz1RVHtLcUp2LnxwPUFUbG4vPSE0bXRfYTZmbmxyTF1LaGly'@;
put 'X1tTUGZbKlVFSHsvbUI0MUdWSl9oZ2o6ZkNQL1UlOlBYbT1iZ2xLRz95T1MiIm5LQ09KVFI0IzBjPS4vRiJSUj8pIVF7TD5NSGlgI3ZnVFM3S3dRa2A0ODhnKTpaS2Yqe3BpZiNeRVtDKyV0LFh2Rj5tdnA0OF1mUko/ZyZWSS5LYG43Qmx4Uj47VD5QWHEsZEdHYmZzP3FdPnZTKjhUIUh6Yl95'@;
put 'JnloaWtfNXwoLClkZ1JgQjB9QFZTbnUuVFBtUCUsQmczN3luPVMuI2hHUjN7NlowQEBUVztUPEk+Zi5VT3Jxb34xKmxpUWJSe3dTdz1XVVRBZFU4OTA/eTwpbClOZEB7SkhsPWRQMHY+KHpaeHosbHckYEJIKT9qKltVRUdFLkVoU0MsM2IzU0lVKDE+fTQlY11FR1osbVA7fnRjMnpBZXRAYiR4'@;
put 'Q05Ke1FpaHAlXUFCWkd0JHlWJig2JCpUfWk+YEtNbVEseCxvZ1EhdS94Z2dwYHhEfnV3Xml1cj00QiRfZilNMSJnd0RwV2pBenZoNzFwaipNaTBJQldAMG5xZEVvLjFua11xWyNKXiRCIWRLbyptaHRDSCg/b3wscWIoYTFLTjhNV0MySSlFSDc+Jm13K2d0LzBAaldbY0RdPyYlYlQlRVJlOktH'@;
put 'KDVhR1NwWmx9VmU2a2Aiaj4hY28iblp0RyVuMVRwMisxKW1mWl4vdEEwTU1WdVtzej51VnxTOz5JMWJoVThJL3hSXz06YyY4VC5fQXtEPmhvbiFfXkl3QyIqIzRpVzBXKEBUYVosL34zKytSNEBOfWspUktHQjt0X1UvTGcqVlhnT3wkb3dbMl1vL2cpMTJoT2FDSDI5W2c+dDF0V0YqY2NfMnYy'@;
put 'cmNJKlpEV1hiZXddODxRWkorfEY1cU57LnFyZ1RlYXRVQm9RKiZsTjkzSzdjeXFselA1QWgxJWVoT0R5ZSREQExKezMyWV8/TSJ8VUZQNlliTWZsNnN2X3dFdDNWfStwTXt5dCp6Kj92WzkhPCZCL3FNZENUeW1QVFh0c3UoaW5NT103KjoqLkpuM1ZaM3hgQitDc3N8KT1iQSZlbCFbMHNYdlBE'@;
put 'MkgjdCQ+OjwoYyE1NDx4ZiZBZ0hUR3dnYX5dRTNqYlYqb0RFLnNPLy5qeDB8dUclNXJYbjJlJVhnRGBqMmBXNzBWcWJTW3c0IXw1VzNDL3xhTik7SWRDQmxeJXZkK3Q3fFY6TzBZenNtZWR8Wl02Z0ZlJi9rK0p4YH1ed0pPbWpXW21vKFA3Ui8mRERnbkBLK1hvU3BffTReRV1bXnkiUix7azdG'@;
put 'YWxKWkl5Z15iPDtZUl0+dWMlUS5nQT9HKHBXYDI6czZ8XzwoT0pfZFMyXWpPbSl4RURINWV2NGJfcWlvOnJCVmBeLjR0dC9JUEghWF1kd1g2KG1EUl4mLztWa249K05OeU1pVzRzK2cxZEo4eT1ie3hBMHU/ZyxiPzQlIWU1cH4pRkQmUS5ZMlIoZlN3fSMqWjNrOUp3OFowQk9rfUFAU0dRZSVy'@;
put 'KT1aPlt6Rzd6Ok4zM2BpYlhTWUp0d0ouOys2WklULzxHOj1IXjlHdX1XVXc5W3pIS0FVMnl2Mn48UHJlP1shTDA0dzQuel4yeiVqW1kubm84M3Q9YX5pbjlgSTUoVD9bP1Q0Qk5UWHptdU5taTs6azlubVhgQUdPcmpqK0tKZSFiTmhUdDg+dVJqe0VXIU4wXyxSQlY3fTI9QXFjKlJXMH5sb11T'@;
put 'QyZmNDE/TkJnRzhIQitNWnAxUmJBb10kakw7NURJa2Q7QkhKKFRjYyw7L0tsJWxDN35NOyQ6T3p4eUhyZFhgWnc7SEBUZTROLihWWmVtNDZ3QU91JHNuVDl0bSxQKUBXZ1tvVCVAeTFBd3F7Q1hRMioyfVltWW5HfC5hIz1LITQqYDY3fG9SOGZrTTtLIkl2X05KZGA5NFFJLGdMPDNdRmJUKH5y'@;
put 'WjA1KVh5IiZmSG1fK0s5dDVwUjhAMisrKG46fXl3aWBofSkvbSJwej5OTDBKfH0kY2NyN0lzI3t7UnczWDxHbGVRWkZld0h2VVAqaCM7UixWP2BQdFVpZ3t6LjcyPXhfM3tORCRWYyxRTmguYWF1T2heS2QsNy8vYkBic1tLWD5OJTpEW1VRUUQvUDBRVTt0Yi9yP3khZzh3N0R0SGModWl9Qnti'@;
put 'cihoWSZAe0tAKGQ9W34ycC4qQ3BwdDhKW01wJn02RHJbcExiZGh6JTA1ViJffCYpUiFtYH1rMGAkVi9wMmBxOEZTcm9CSE5XZHx3IyowSV4xQm8iUEs/Vy80WloyOzFDeClvZGA3UWhQKWpnTk83dGhGclR4M1J9K2hnPHx0clklXj51Tis2RUBvSF4qQjBMeE5WX0xVOjVTVDxgQjA/W0hJZl06'@;
put 'PCpmT3JbemNCXjtXNVFqZWRKak5ZWEJgZ11eQGtwWjllTHxaQ2tfKF4jOW5BSVBvVDVXcDA0RTB0dk50cTcsYzBkJDljNDRKRGRPXmsuYGEzOl1EeXB8Kjx5RmE/SnlobjZTJktOTHhbIlchaGRmUl9YQWJ1Mi43bXFNe2lIXSlNSDI0K2hvWDEoOzc2LyZpRzJMVzB6Q1VQOjNfOjt0TlQiZ0R1'@;
put 'VUNCeUFIaj5TJEN3L0dDQD06RDUvZ2tVTSJ6dzRtWWpFblpGQiFuLkUxUkl2Tn5aOG0xUnFJYkxQbSZWN3xNZTNCZEI5MW9KIkVIcEhhVX5rK2sieFd7Ils8Om1CXWkvbFBVQXlqS2p5XiFwRCw+bDdgJWMuZFUhfX4mKjcwUGBvYzVqdnpCImJyM3J0MjBLfipqVGVdKSpdJnl+LF9tbF0sUzkx'@;
put 'dkBFeW9vS2xUOCpvSmttRTZFdEA4U3BIXSRAVld8VDZFMChXfFpVPSJNPHtNaWxKWmRKUEV0YihLSX1nS1pFKHlbQkY9X31ie34rXmkheGlIYyJ0bzZPSl1+X2JEOFVGc1EyRnQxMFZVRXE4ViV4WDBgWG0oIXcqNEReSjRHJDNbWFZvTnlmTEZDSHNAUXtCUWo3Y2k0b2NJOX5EbCF1TDE3V086'@;
put 'WCJ1bkp5VXlLeyVleHtxbkd4b15uMWA4YF44cVZpSFlXPDsuNjxtWj1maShzVlhCaVJyIkMoNER8SS9WeSI9WjdqKkxbZCRJM1sib2JwJWclZk5QNz4mdV1lWypgJHIwUTo6MX1NJiRdWVRjJiRidmFJaFNWNkY+V2JUd0M8QXdZVHQ+bCoyXi9tZSZaWmpPbmoySyQuZH04eUI5KyxDIStsWnoh'@;
put 'dFpqKS9oUy5EUXAhLz0vTURodD9sYHE1MXhSVVhOZCxCKjs4LndTKSYhW2k0LlM8b1FtPlsidDJ8UC9XXW9NaVYmRCM2ciZyYVRMfCJwe116aThZSygjcix4fUVVNXtpXSZvcF9EIW0rIT1QbiQlajhlZixiLygsNyNGaCx7dWRkVFYhPDhFbVt9YzpVNUIkVWF0JDtVV21IYlJSUjVfb1d3RmlH'@;
put 'YGM1Uk8iM35rQkp+TzlqUFQ3TEJ6XWouPzcqMSY0b35edkNxMTMqIUo6Uig0JnN3TEQmND42bVNEfVg5XzlITjBaOTFUcCo5UW8oTUBeNDN0M2pqXSEhIWQ4ZG0rOV9UcCEwMyhrVClOSGpnTXwpOXteczErT2hrSWZSKzdWSEhIKDJuNC9oT3lAX35pK1grN0Y8djlbcH4mTE1UUWNSW3QjKklO'@;
put 'RHlbaEkma1pwVWB9Kz9uYX45K0BefFJsTnUxYUUrKyYjSW1lbFIxaFRJcFc8bGRyJEdLUSQqfGJlUih3fnY0YyEpI0J8UnAmXU81dT5fZFBzfSVsSltWNG1nMDRfOF9jZUxoK05BMixWUFZxWUhdJntmdmgrdHU9WmI3S3VzPSxkQ0EsWFZrWGtPLEFaOkowfnlpTltXO1AjJGEzSjZ1QE4jWnFQ'@;
put 'UUBUKjRUOHhqVzNGU0RmMGhGMm8vITR+dWAubzhOIzkyTjV2ImlfSWBlLmYjMjkxU3NXfTtXXj5aWD8mWTlQQ0M/QTYkd2xveSRNS0MoK0I7VzNPT3lSM09SdVE/QH17Zj1aWmdZc1tSbWIva2JZQUdedGlsYFZ3ZXlYc093JDFEQGswYWVvXkxIYVdvSyVnd0VPWW5iaHxSYmU3KW1xYGRqKTls'@;
put 'fjVwTlpqdnRVMkxrVl90WHRDVHIzSUtNREFDU0t3eyQ8W2UvWGtCeyZKWXVVIzwqaWVlYEdvbGtqVXF8TGJsKl9YNkJ0NSZvYlY/OjhfU0U1JThQbiVITU04PGIsZSFhSFdGTW1MPjY7VmlCcX5rZ0VXYzQuREJzTFRnQiI0SERBSjJVK2AjRShYaCtrcV12Rj9taHM8VEJ3fHkjZ1ZnfjU3Rj4v'@;
put 'cGJLJV4pXVNmT0UreS5YbTxRS1Q8I2Y1MDkxeU1rW2Eqa34vbH0wLnZPUl16YS8kWkQ8VFt7eltBMkNIViQ4amRvXXJYL3w4QTA7U0dXMmNAaShsWFV4cnpvVUBEcyh5NE1jZ3VyaUJIR1t5JEV0aE9iTnNHREduekJkISlhc0dFLnFefF9CX2RwJlQ6bmF0YHJxMT5ra2coMjk6X2BLKS9tSzYm'@;
put 'PFMmcz9zS35rWyQsOzhhY3VZbHElWjopZmRlWG4hZm99TDM3Rml5KFZtZ3pdWygkflMrKzx1NmMxd14wUStzRGFpYFtVa3FGOCE1SVdQZHQ4JDhXfChwWHNbdzsqdUM/Tj4+QUlUK0RnRTUxN35Lblp3dl9kZkpgc0NMeilSYntzaUNbNV5AL3V1VTM7QDZKTT02ZX13eStmYVJYZUB7KCtnPD4v'@;
put 'P31bMjMvfE0pYV09a0EpZ0N3Ozl0eDlOdz1XMEpGaWNbRlpNWDlWRFtkN2VtQG5nfkcjSzRxfXQ4YlM2L3gwPj5xJDtHcE1fKC5qVixFIWlgVXRJSktiRTc5MC47V1ArQ31fRlAha3Y6emhzcn45YHg3NTI1YH44ajJdeSZKYTk+ITIvRV1lRy5kKiI4YD0mUkpLLG01Qk1sMjkwfV1BZmJRcllU'@;
put 'SVl7ZFV7eVRiWEtGeitkNmtKMGVlfHw4KkgueCFYKiM+P2NIPzR6Yk0sPmsvOTJRZXt1fi94VEt1SnpeP1A2LzloOzpzRj5fV19yaTF2WU9+UEszOVpHe0ZsPTpERltxK2JRK3BocyV0ZXdWTTlEbTFaKTdjIjBCQjIpdV5AZFAvOG5kWnZbfHNoWFEsZWwuNiE0XWNJS3AyeCo1ZCM8LyE0P3xO'@;
put 'Ykw1K3FKXltwVGJ8OEdqfTVZOjZbTkw6fkFYXUFPbUhkKnQ/cW9SVzNGaGtsbThqdGJuM1lCUndYKlklInR9XXc2RS8kNTQyMG9hRihreCxlRWppYXg3MSw1Yy52dzBZczRULnRvWmx4NVteJkB7WDpdQmVWKHohUS5QaGhaWVJLeGxfak9fRUc5NSUsP1Y6SlpEUlF+RDJXQjV4TytZdD5pTCVt'@;
put 'Jnk1aHEhaWtZeHVDeE0zVCtxUn11U29wWHpVMDR1RDp6NntiNkArU1czJE8xfShKYGguamlWRmxeSVNJPFtjUHx8d2olRG1dN0ouUl83WEsjbnFEcDwqNnBWP0MxaH4+SDNiV1MwMW1iYC40UEhEJF1oekhyLCFzckh1KEVZWytyOChEPCF7OUxETkZCYSVUKCpjcG18T0pKSE0+dyoxWXZlQTlN'@;
put 'c0s/VmZhfiI4Wi95b0s3T2x3VCxYZiZ1dG1QeD8yL0hecmcmdUVEIj13RGFQQiVSbGF8bHl2eHFTSiNuenNxRUdQSDk3OmByJn45RGoxNjlWbTtoZWksaCN7VytCeF0jKD9dcXVVLyVTVF4mSkgsRVosW2hJJEJwXyZyfWEjd1AzPTRERH0oXls6YkN7KWNlU3hpSGF8TD48XnZ+ZlcjQ2puPi9i'@;
put 'U3pCN3Vob08+fUp6aix8dyJ8P3kve2ZYS154KjNvOjVSXXV1N3oiRzBZfV9nfjdHYzt0dF0lX0Vmb30qRkx9fWE7X25LV0shUWB2TyhpfCNwV0ZOZFpCQVY1UTJwcjNNVFF8Yi8yJT15b34mWEFoY2d4cjpCQHkzdm9WMnM5aFFFVENdcDFHMH5mW2hLK2M5PklLN09bMmBLajszdCw4a0d9X2RG'@;
put 'XUVVUS9xbmx5MihIaSxuM1hBfnspOndWdmU+N3RgSC52L3RqZmVoeVo4VXlhaHVHLnxCQ0JCM3pPSz14VyVeJH5RUCZ+YyNWcDslTmp8KmlAXUF6dDhidztFW0kjN2tzYDBxMTwrdUssaUdIN2MqbVBmKWcyTkA4WlU5ZVg8MGFLS31IeXJVbDkqQy5GWk5FQn0zKzpCWl9rUlRgYW14Q1kwKEss'@;
put 'X31vK3V3aj06IyppYTR5WXQyX1MyVUdKYS5pIkpFPk9rTFZxUF8lZEVGVUghMyQvTUZBVkRZYUA9XmJYTzlbfnNkeUpFYUFVfTc/I1U4W0VtKTt8c3F3Kzo5Ki9UWXZ8Smh1c3VhM1p6alBMMzZgVXh3MlkqKVJKYWUocFdKeEFFbnVjR2pvOSIxajZUSUg5OEtBOXw2Ym1zaF5LRE14OXB6OFc3'@;
put 'dC9ac2JTRStqPWBJel5NeVd+ZHhneDgoa1VFa1NtKShZLk91PWVwVG1EN153LkxFcXtyfHg1Oi9fP1cjcnV8LklebndMfEtmMEwySCxxR3RWbnxNbUhJJkRRI0VXLzddLGBZLyx+fE5DQHhqXmJ+UlovQ2QvP0MyWD4ob2Y3aGVrRzY5Y105VVEicCJWPClsVC91fEteK1khciwxdGZFelUlPlIs'@;
put 'cFZXTnQjWTcvOl9sUSZfQGtOc3tUIip1e2FgODdTZmIkeFpZXmhiLzBbNVZtQHU2RSVtc0QjaXlHJVIqMTdaWS9KaTg7KGBDb3BAeCtfTkV+dDB1cXlBWCpTIlslPjRHRXxBfWEpcEVAUFdGTlJgL249QVE1Yi9iP25iTDMiPUJRREpaZWdldytPRiFoSzRyLFFXOFBGQypqelVbYiosWzZbQDcl'@;
put 'fTxWPnE/IzM2a1NoKU5oMmxWa3ZCRGFCPFZYSk1uOHAkPmBZImNxcEJZQktXW2oxak9eKmd5NEBgQFEiTDsoVWIsb2ZkOFc+KG1HTXQxdFZaYStDMig6ZkJ8UyYkYSpKWWZ2b1FpPi9JfEp5OGFxczRiVDpsQSt1KHNealpFM1Ura0xJdU5EQikzITlyPjJdN21GNU9ySDU3dkZXIWt0d14vam48'@;
put 'KFtheTB0M3o9VW1oQytIPixhYUxgXyI5MHxdTkokaHwxQWVOPEZNZXNfKjwyJUJXQ0ozc0h6JnF4b3hvQmtiQ185KSx1dXwxOlNfRjp1Oy5MTDdhTWdZUnsyOmEyfU5FOCtsfH0mWnt6WGhOaX5tX2V3Mj9OZnliZ2hUSnModCk7OyQ7djVxdHI4fH0lJlhtPWRuWGMvIk1iQDgodnpYQnFHdGBy'@;
put 'e1cjUDxWLH5VNGs7Q19WLEIxYkhoaUZPTXttUWJaWTZ4UmN3YnJVYFQzT0p7SiFFPGtIRTtUMklMTHh8IX5KVEUsZ0tIUjU7MT18cW9jYjI2KUJiMk5Xc2xndzt3WipdPD02OnkqOGRbbXkwazxKL2VpRSRFaDp2NWFNaGNMUikyWGIiZ2tkL1F0MjgkIW0lP0A0cmlzMVR9dS9HXz05SyR2PUNf'@;
put 'dWIlRkwlUmk0UzMjMjQuOzVsU0IkOEQkbSMsXUx8MXJ6Q042bTJzX3xHRnpJc11jMHtNJk07OiIqbE5GSj9nT0NKPnpCczJgOjZTWCRMVkpNMStQKmFja2xPSnBUJT9rbVNfLlUyMkQrKUIzL3FwcTs8Mn18SURaMCZfVF5HQ2xkd2VQPjB7dlJNJExmU1BQKHFYNkY2Jng4L1Nre3heKjwuYXRL'@;
put 'PFZzOl5uPHxzP0wzczE3WEw2U14xYX4hZ2ZFTUJDe2h4JVNRTU9tX2YlQGF8cSZhNH1sIk8zcmppQUUqPlVUcSFkUFZgfX1lcDdRSlhiYWBUXU14ZFN8MlNefj57TCM/ZmkpbSokNCF5ZiM9d1V0TDJlckpZJHAvMGRRTXZTL3xOYDpCREopeTUxc1hRSUp9P1h4I185TzR7VmdzQTg2QkBoSkxF'@;
put 'P1JINEU7KH5mRkhhKlVYSCpkQmB7Zmh5MU0qZ3p0dF8lUG17d0VzRi4mMGR9S1gmXyRJSF0pb1VAa09ZNC9BQnhPaHl7eFdecipCYWlNaHhoTVBrVFNhW1FVXUJGZ0E0V3MoSXFzYCNyIThtX1cvP0BMVy8rXWxkKz4sNE9FMzx7XzNYdWF1dVVmTko5VzxUdVZTNH5AX0woMTVsSisyIWFIYUIv'@;
put 'JDcjbyl9SGV+aS8/bzA+fVc+ci43RCMhaVJKZFJvNCFaKGNTUFNYSTphOlojRUt4K2NafEB2MCVObjMwc1UwUyYieWFfdWYiImZQOjpxZ3JoeypnKkx6UVY5RS43aW40UVZLIikkMUtMPywhQ1NdMTIpeSFmUDwhRWo1d1U4eHI3PHhxI1tAR0xyfmRXPEpDZFhEeHh3MDl2XVpgSGE4PzRiWi5g'@;
put 'e01fIztue2l8KE1uMCo5Qk9ZNlJLKnB3YGNOR09yP05tdG9lO3ZbMyp2eytxJjhJQyVFOj1SZUdBc1tFNWdQJDJjYTFyMV87M2pEXzxKS1FRT19qW2IvQiJxNENlfSx7c1t5dzF7S3IvIkNrUUw5I1oxS1lqK34wJjx3QkJ0ZnU3O04qUlpYKSkkZT5TMXtkZXdIYDpPVFl8TExqaV1aeC80LF12'@;
put 'WFU4JD5vZCs0Kit6RiU0NSV2S0h7Nn4wRyNxbm5JLm9qVU1tIX43O0hDdTMwLyZrWllbITFga3wjZkg1cURIbDtFLm8pN3ROcEk1a09kSl86XnkhNFVvQWk+cldrWm89OD93W2x5cmVAIlsvRiMrPlc0S0Q2e3VaUCZtYkRKYyphWzB6SWpMOy4ic15rPz0yRFF4eGVzfXx0fTRLZW5pIzApVHky'@;
put 'VXEka1RpRGFqYENVKyVaLDg1YktSUndCIV4ralo5dUQsdzhfP3RhfnBESGM+RFIwQE4uVm9IdTQ2SHN6Zl5zLlhOOkQxLy56a3poU3UzKVo/cURqVlFYdDlSW1h6PUc1cFVWM1UrM3kqLnVqYTUkeisiOCFUWiImMz1wOE5bcUpNZmVJVkM0OkdaKThjKHImQiFbckR4SHsycHtTRkYxV1k3cm1b'@;
put 'PDR0WXg3dGBVKXkoV1FdLF4yK3VKN01iN0FsNXgpUWtPPk1RZndeMmhgfG14bSEpY2sxd1U1LGxWbXVRTmJfVUNMYXw/PktYOVh3W2lpW0BWNWRGPEZ8fTRPTGd3WVBbNnk1U3kmO1dEVGcxLGd+byhHLl4xOENefVJncSUoeSY5OFQ3YUY5K0NTPGw4X3R7NEdASTNCa1FTUl5AP2J4S0ohKWo6'@;
put 'Xl1DViJpfUNRYTp1OWM0Kl85JHFaZkZ1ZjAsKyVqVUNRNjZxVUo0W011UWZeNiNwX3AoXXl3TjtDRDl2Q0FzIm1kclI4ez9DYzFPbnRCfCpmI2AoLHR5VEQiYCJxMSVPUHM/QHQwR0MlWkFeL2RXWiZmdmBTcEoqU3wjZVBvNEl2UHE6OUkmJExzSHJtQ3tXfFhqb3Q/L1dyKSlheSZ2RiRAYU05'@;
put 'eD56RDohbVBQInJ3eHdleGE3Wj4+RX1UNzc/VzNqYlhZb0MmOWd1aTomP1AkZyM/Uk4kU1JpJmNnPjFEYjZARjwuZDFQXUN+cmtSPzAid10iTEpAemtrZ2dbKGdPNXByXnI6eWh7TF0rMDQqTC98JVUjRG1GJGokL0h4RThLdHM2clBlUT16LlJ7ZGhQNip8JEolfkRhPltmIklJRUdbWlUweExd'@;
put 'PnttMC87RzRIdWkyeXFicjEhIy9YRzNBaDthb2B2QU9QYk9ZY31tSF5EMVoueUlRRllIMUBEZ2s5UWNGImdwPnNIWHM6dWw3fU5jc0xpUXNhOi9oTk9ScktgMjAiTD5naVpGWyJyTUNoTH1Ka3pgaV0pKThPQyJ0VXFCY1p4VFlpXiMkT01xdGdBRSEuREtaRDdxbUFvZnQmMDQie101YU8ybmU6'@;
put 'YnkwK2tSaC83eGQoekk7R0MmPGMsZWNWeiM3VnMkQXVzSmZOVXJGfGwicChSSG54e3FrY18zVj83QFNrXzM2OXk5W0pWXzpJejFZXWNXYSQ3LiNrTj8vaVFuPWRYcj5bbX1MYlM+NUlFU1pNZjF1RDZ+eHB+aS8wR2xyPXhFP1M0RXt0KEp5XXRpN3UuWyx0Zi8uPHdsRDBqVDM/SSN8LjokamNI'@;
put 'QEJJJnklTXs4NjJieCZhOXF3JCxzNzVbXV8pS2hjeUwkcWlNZz0jTU0jT1MlNn58e1ImL19iND5yR3AkYkUhKGFyRCk7UiljfSQmcGpFRGBOcH1Ge2gzTWp+Q1R9RyVlRzQ5Rz1QVj4+QiI/KFF8Sy5NcHdbViE7UUxWPEM7M25jYVlrentyLCJ1XT5nRm1QdH4uL3diNF90ckddRDdaNDRSVDEo'@;
put 'Vi9VNX19bXFsRWsuVTdqeiRiPmNFKnpTXlhyVnpeMkgja2YmQyw4M3RASl9ANHZ6JW5uaCFkeWI5JHMuPlpYdm1qLmkoVmlHWnMlMk8rSVd3MUQhVCtrX0p9d1FLREt2UjMxYFRAbk1vdndiM3YoOENMMGNBPk9RVWJFVVtbajdRY0oyVDdfWlJWMXpQQEw+bDJaXVg+e1Y7JTB0d2ZgaHJeOiRg'@;
put 'WTc9dSVlLnNbSiNhT3syR2RhRFpFTWtDWU0xMk8wYnhVWSo3d2kmRkEjbmYpZHBwdVpYP1BsSjpRTyY3PGshX2U5aV0sOlclXURFTmZSSnF0VkVSbEchT2UqK0wxJjkrXXB7d0Q2YytwcTVOX0E0YiVyZTtPKXgweVh0VUZSNjNgeWt2WFJ3aVVockxTdUQsWWFoPWBRNzs2T3xYZUN4XyxpN2dw'@;
put 'MnxPQiMlPko8PXwrb2RzPkwkfSlQWV0oLyI+PVlxIltSISpEKVZAajdOVDl1fU1IIiZlSDpmNGphJTJLek1CfT5rQzhEXnBXaUNgakNPbENTR1kzdCFFO15Bd1BGZlZ0eTc2THt+Oi56LkwyKFkyV1ZFNDBfdXpLViFxO0ZoLGd4O3IzMWkpZUdXb3dmdXNZfUkiUWpqXiRNLmIhQD9DbX12fD5Z'@;
put 'OTFeTE8lcXFtOWk3WykyO0goTGxFLn1wUEomeDpfL3tBIiR5Yi9tdyV+eXtzMlI8VTxPOSozZVtrOGtrKzJXMT4xZ2BLW1lSczM7YSsvW2ZScDFONjZAbCMrR04+fWxAYndmTXBmMEFoNjV3QHJMWHp7SXAzV11XM0dKQU0yWVh2Jlgrc3ljX1Vxc0NkRElYaERpZTFYbGR0Ik9hSW4iKGYmdVE8'@;
put 'IWQ+aSRQYVhwYCMhTnQxaiQ/ZHo+TSZhdm5rT2YjVHowWWc+YW9DWG4iVnkmJmU8IU9JV10oIXZnZTJ9JG1LcHZAZGNnM1NrIzBXKURxZFFDMUl2US5Kb1dRUnI3cFBvWXFDWFZQK2BrJl01JndEc2JFaXcybkJuTTZsRCxzfWNjXVAvKnRmKk0/PlUpPXAiYDchTSROWjtmc11QUHxoJTRkXTZa'@;
put 'OGFwOTplZnRgKVZwVyosX3ZfNlA+QkIyeUd3ZU0uRnN7WH5rQipMaGBmYk17OXpVXVkmcixtNkkiPldoNCo4YWY9OXk2c30pX2BCTEQhXkg8a2UsXlhGYzojKTciNnt3SH5rYFpnUEYwTDp5Q184JXBiLl87c2xoNSRlVzloUFElKCVtW1EwfmswWDJ2NihMMVVOT25qOmtqQWJIZEVSbyxubmxm'@;
put 'U3ZuLiUvSEYxNVNrPkI1aGBNSldnc2hnJl4vPU9RY2o2W1VSbWBrbF5jMyhtOjddNVM8T0VtbEU0fHt1fHV6IWs4cSxpW2UoJk9XQjNDRitDKlFxeWlKTVZWRHtpL0UjNUNremJKLkQkKGsxVXhjUFNKNU91M1pOLEZ7UkkiaXRUVjRTellUQU9ldW0/azshI2htLHAieW5PTzIhYyM0I11jKmdS'@;
put 'Z0R3UShTYTZvKXdTQmI2WiRCX2FJb1dRPFBYem4wcVNtJnwpbGckOkpuWTBXKGM8akohRWlUIk1yNEYudDNxYzFYW2dQMX46c19VNSw/WTA4R3VwfUk1P3lHLClOT298S0deUGtbTzRmKGo3cS4wMWd5Om08aH1ZLG18MHV+IVdFSWZKbnw0THkud3ReVEo3Sztfe3cjSmkuY3lHdnQsUSJvUnsu'@;
put 'c1t+S2A6Kk9uOmc4TD42NE5ZezpQYn1+U2BuaSVMdmBTQkYrfDFEUUo2WmNSWGtkQVtoRltMO3lgQzxfNFt0eH16eD4+Lld6ZHAqL0NRLmp8QmF0ImlaKSRIaWRjRTh5OjhCbl9VSiZgLmlVSlA1bTN6KFY9PS5IYmtYYl47N0ldSz5jeWg5OGZzLHVlTEVRRT47RnUwLmZ0d3YvRHNIbnt7Wng3'@;
put 'RHRaaTVVNV9DVns3L3h4P3M8V2BDdilJIld6M2NLYWlRbHxnPD81b0lDbGdAaSEoSmN1RyJ8OCpKSyFeMzoiSSF6OGopMSFVJWFmd04mJSl5UDpaISYhQjosfUZoWSJONllwcF5oMTJuI0lFSngudiwve3ZEYW46STpQLzFEbyFDRWNMSXtQZSoicSgySUQoUTxSKDRHYF16LmxxP05ISSNwWDwx'@;
put 'TiI3YTk+MixrdW5iYGpTb1k7RX5xVnxBQk9nSjswfH49eG5TSXEwOjkyc2BBPTNfWV1UTkZebEg+TzAuSkBrR0NyYyR4PFVgbCw4JVRJNFdkPT9RNGlWIWU5ZC4+KTV6REcrXSo1WCxWI0hrbWNMQVElZD9GbSh7ZXcycCFvb0pWNGdYOkVudmIsPV0+WVlbS0J0eSFDSmhiV3MpK0NHbWQ3T0os'@;
put 'S2BuciIvU1h2b3RmRUc9UFk8V2pbOSVrOW5tUWVmYEY3JDl8K3ZSWDMjNz1xNTRTflZUbFVudT8lIUp5aCtHbiIpO1RiU1JZd3U+YjFqcVV7ZyhyLCNwJStYPU93JlQmU3g8fj03c2EvaFkxUGt+QHlefSF7MVlrL0VAe0o0b0x2PSg0Qkp0LkouPGlYLzAwazYyRCttNSxnITVOeGZzdms0PEM+'@;
put 'cFgvTz94KmpnODZSRnpaW1B6SzQoNVphYiJuQm92e0NVRCFOW20pV0U6PSEufWk/dWc4LzFjTT1DN3lEIVN0JWY6emNOWmQuOGUsMVBKVipoWExMcmxaZCNXVGwvQ0M9VkBRX2J4QEF6MDZ7KUtqMigwe05iKVFWfDQ5dnchK3RMRnYjbkQocWw8P1tsKFh9OTFkW2VzQX48JUA3NSZjR2pMUmNW'@;
put 'Jk5PRTtXUD5jajtAQkxMRV1oKVBSbUFeY1Z8VDIzLl5FSCxKLjZhNzFTXnQyQmRFV3cuOCJLKiFeUX5EdTFbeXwjelU4K1kqP0NmS0xkWDR7bis0MU0oRjFgL3BuJD1TS3B1Qnd6Jmdke3k/MEU+Ljc7ZnhOV2pYcUhbR01Ib1gocnVeST5OMUxtZyZoQ1AwOUIpbTpHe2VmSj5QK2AxP2B2Ul9v'@;
put 'fUFqX25BRjFKbnlKUEdpK0c1LEI2Ulg+Z1p7O187a2RHUTZGdUZTeC9nUUxINntEYmlrdWx5Wj9IOyZ5NXZoI2BDVnAlIlp+JHwrXjQla0A8VUViOT5XRylvc0lsJF4lW1VvXiRMUCUhSjlUKEgkZU89SWk2PyghMy9UUDZLcH5vZ1NQcWBiSH12Jn5ITTJLKUFnYkc+XSMsY2ZrOl1PJkxTaGNY'@;
put 'K2hwO300YmVMaiNGUzNkPUcoMkBjald4Kz8iaWEqKUE+c3l5OC9zZD4iPCJ4JSRNYV9JRmpSTk54SCw+azlgdEM8ZyEsVEBme1pkKDY/MTNDVV9aUmdjYkNaUSxqZC5GSD9Gc0B7bXooaFcsb3Q4d2d+ezpLeFtLKyNMM3RXNk19NmxoIWReKkRLWldTZm9JN048PXxQNEpYTz8sZEU8JSRKKTVk'@;
put 'YnwoT1JRIXwoR0VXWSlnTlZCSWRfSGdpR0EvLHJtelNrZDxpaWBXb0prZXVDNWBsb25KS3llWEJKSlAzMVNrYjNXZ0IoPjJoYiNkcW8rO1hQS3BGJVhseG9KaGdDRWt5IUV5aUp1P1FIQn1EfVQpNDRKYWJgOCheQz8+PH5NNSVGJVM1STVsI0RtWXpsd1RPWFR4InBMaj5bXyEiQSlSY25nI1hX'@;
put 'dV1KWndLfTR7N0NdJltBUTIpfWshfjhrS0RQNmxqSno7O1FtXkUxIykraUI3JlQ0bClNQz9jdCRyJWJSWSZ5TClkTkVOfk5dczRLZz5dNyxXZUVyQStUXSg7WT9Oa15WIlldZkcoeFIvMT8meD9KSWFnZHdHfFZYJWc8LyhDT3A+JmY1MCt3LjZULjhTaE5SSXJsNGRsIUk4c0VwKE56QiNNKWM/'@;
put 'QFgxVkVRalIsQjNUYE1FTHdrS2lkPTI+N29gMVVkbSp9PS9qIj5URnRNWkJzOHcsPXtrMS5hZE1He01DVT0mNyw5N3c/ZzgpO0o4Tj0yZCo/KV1kbkF5QnFMNTxBX0BISGI9elRRakx4N3h+aGM/TSRIamJnT1I0NCxCZit9TmJ3X18+eEttZj5xMW08fDMwNkN+RHErWnA0bTNzQ1gqZFdya3Fk'@;
put 'd106NFAraXlbOmcrM19bQGc+QVJpX31vbWNkcCwoZExSKzRCRm1PKWU9bV13MGVgJGYkS2Bndj5zdyRpfDBxKVNLYnhdK1NZXXFWZkpQQFUvcDAmYSsqPTdxblJaJj0mPFd0MUdlSDxBQGtCQVhnIiFyTzhoM2lNY0Q7OlF9LH0yPWhtW3I/d1tFPT9HcFRYRUhjW2xsVlR3L3ljVW5AfFNuU31I'@;
put 'WixJWlIoS0Uwang5V08hQS5TVGRGYFEzaXU/WiJleVlePSJfQGo/Wk5VRGJBJVBafSNCaFd3dGpJTVlrLFB7IXh+bEskSV8/VWc6K2JpSEZxd2k+RjV+NThNaGJqb0QuTUBOPUJPUiM9OWR2VFdEVm5OSCJhS24qL0lTNGJwPD55IkojLlQqd3RfJF87b34mfCNUJlM5bSYqayZSY1BTNXdnMltm'@;
put 'ZWU4OEJWT0hxZ2ZBYjZgUyFKaTo/P3tXNTRLbmIpcWhlTjBhZVQoSEU4U3Q+RjprXmtOTGwqTlNlM2g7dV5bS1QjQmVXTiVYRU9SJi43PUJHV2U5fj1+eWw1PFRIXVZfVlFgLnRWZXBbSVV9IUk0OUdLQWJNQmh5QlBOTV8mMDRzIyl9SjMkIUlHKUldbHJrUkc2M2lYYDtXVXAxLCQoZFU3Lilk'@;
put 'SlpgekYxJTVgYHUhKiV5WCpUJiJuWkM8eHlUMGFLSCtSSGR1bWtUaWZkPUx7bywvfEA3O2k+NXhmKGMqOzc/YTluS11UV2RATHF1dW9xe0pkOzRKbGdGMU8iNHt1WDN3TGFzOVA1TGtZRE51OVdZIn5gMFA1VU12YzApVVIvfWxHR3RQZTpOcVkiYjlkfWpBWj44Xm4oL14yQWolJkdTP0ZHND4/'@;
put 'W09YQU5QTXtEdW1pPlEyZ1RxUWk3VXNpcnU6TEhQNT19U1JVZm8kKjN4ZyM6NEcxQSUvbnAhdyteNVZCb3BSITNPY0g6JG9APkZkdCJ+Z2FtXTUhU3NjSjV7d1lmWmZIa0MxX2BZLl46Lnk0Nng9ZngrLml4PXdwQG9XJGFxaGBFTWEpalVZdlAhLGsmQjBkS0ZWQl0wIkhoKXwyamBIMzRNOUUx'@;
put 'Yiw5cFkoUFl1aUMvLElVe1gqanchZGpCM0BKJjwlUn18NFY7JWJqb2doTG1WU288K0okYGo/ck06I0t8MSUpVEwwaU5Zdk4xTC8xc0YpVUZIWFdsaWVIWituTFZCVn55LyJJSDhQPDt1OkV6fjNKZm0maiVrWilnbHpfc3k5KDxkPTE3K1d0X096JDw9P1htNlMkYj08dTQyKjBgNyZ5NT0yZTZ4'@;
put 'Yk94NlVsTU89ZXpmbVc0X3RORjJaO3Erd0tqRGg+OHtONkphYmZBMXFAb31iUl0qQXlmMUQsOUQ0KlVHTzd9RFNNd2BGbEF2L0t3XktWO1dHb0xib2V6czJVdSo8dXo5TW4qUmo9bkw2TXVyMztqeWZXZlpkJVZiVmxzV1R0cC84Sl1qa3IiIyExJGU2Uj06VkQqZ1dbTX0kbkhwRi5OVGJKa1A/'@;
put 'bXNAIi9lVEwpRyhIQDBrWihZXXYrSis6dSI/Vz5FWVVCIzNqTSFqYDEvQ0ZgTldBVF9LYm8/dHtAZyRDbTJqYjo2TzF+VSJeL0pYaCRCUUhJREddNWtlSmZdJmNhNTAkMVg7WEc2TEl+UC93SmNfVGxKRC5iJjBAOEM8QGVAWW4hVyY0ZzQuVENmaTd5P3FeVnAuIjBEMm5VSz8sLmFWd1NLMH55'@;
put 'IVRhZU9AaGYmYyo0RjVwdytPZmBwcHQoKGZWeSFBIyZ1W2lGW2N4KGF6RDJCZGovVUc1QlcwWlVuOF4yUkd+M0pVSD96JV4iNj9JWHo4cVUqOTZIWzlgSCRJQzNOdz02UyNpbX1ATXs8XUR8MTNTTXghIy5kWT1iKUI1aWRhKHtuUlZDZFM8IjhXSSV7MHBbV2dNS2E0IVB9O1VlOVtoX2hmX3Vh'@;
put 'ckJPO1ElcjxWWmZ7fT81S3Y+SHRNTX5wZmNuM3syTi9WNGt3W3JdW0Q4K1BsUUwpRXtydHJlN355RVRTcGtsQF9udiIpUyMqKE98a2F1eXYxamFIbldHWyU2VEB8WHAlUntrbGs3W0NmS20rRW9GU01xKlRyPVZ8ZSFQe3srdy5WW1c7PUZzMiw8dWIlKU1lbDRtX3Ricz1gM2p+ZV17V1FbW3Y7'@;
put 'Z34xRjtZeDQ+RFZ+fTJVaVV+X3BaUUZXcVdXeStQWlgzRlpaXXpbKiRAOEhpc3w9Yyg/KTxzaGsoPHJnNVJ7TX1jVEMxTWR9eTdDJEAwLCIwRUdSWURidTBeJXZsfT1famwhJlg2OUszXVY3MTUrSk9BRntXZDtJSHplNmJ8ZGVTWTxaMUtdW3xNU3JCbVtyM2RjSj8qPEQ7bTpyLzVSZFU7O200'@;
put 'PU1DZ31mWCl7e0pRTG1sT1EhfHFNRUJWTkdgMThrRTEoMU1kbi47Vlp8VFFROEBkPEZoSlJFfmZHO0YjJSZiRml2KWRgOnJtSC9zM14+bnk/RHw1KFh4bE5tLk88TCVdNmp3WUhBIkciMEMzMnIoZXg7LjtAIS4uRXJUZkZLdHclX0BOU2ZRZDF0Qn01M2k3RyxDTC83YktddyRVZkB9PE11SHJU'@;
put 'ejozbUdUKDNCWXtOWFZxMCUvfEo9Uk9uK1YpZzFFZjoxVGkrUHMuN3VnNkU/USEoXXp2SnM2OEl3Mm94Y2pRaWFxOTFRL2xwQTVLajRMVWhyOE5hK0pucEw7OVg+T0lZWEQ2OHphZzhmLCQ5aCFoZipVJGE/PGlCaSZnejosMnksLzUkdWdqQ1FGcDgkP21VX3Z9QjE8Tm0+Ol5eUCx0SChoIy9s'@;
put 'LlR4OURiZnQuK25ERHZNK19ZaDh0TlYjR1QhXnx8TXtDfm1ubk1LKXFRTHNlPDd4U2RSYkpMentVXXYsWnIxXT09fUEsdTs/e1pHJD9CQ1Y3Y3B2bmFsN3NhJV05YVo3RGRvejk7V2FIejAyYX1ITnRSXWJRPWJOTTojMVpqWylvPmNIRl5scklGVCsyP05AXkYwLmBzNz5OJWRSaVJzOHRjeCM0'@;
put 'KmhMajA5c1pvNkk/T3k/QFhRZFc4WG5mal4mTTUiRV15TGdId1p0e1BPMj8vV1lvQCYqNF5uQ1NFYDl1THM8bShJO3E9biZEI00yPElqWUtlO34iNXtDLHQmQ01JJENgI1pETSFhcGFQP2xlZmsrOWAxd2ooLCRoS0I6JHR5Kz15eE5ZMEM3I0YsYjhoQTViQ2IvRmVRLkh8bU5GWHVnN1o0Y2B1'@;
put 'eXQkVSM8aTRrQ3ZCNmUoNCk8Qnd4dFBWUDl4bF1yblZZLD5yY01VZENkMDlYKH5SRnw3M1NjLHZyUFA2YEw+Pix8YW03QU41S1kvNS8/XjpSfH5tfml1bGNqOyZPYF1UU0xfVXlOPGlbOmxFR1JFYEtuTC9dKWk4biQ/OUoyMVdSbTx0eXlIdFhYQyJpMFUwSSYoYFtLPktgbyopaXkzfVs9Mjcr'@;
put 'cFMhRzklZ11BYz08eD86RmojR3g/NFZvWm1KfVsqLG9LJkpdJFdFeUlSS2NSWFAkU31wUE4/WWVHSF4vQHlYRXxIZEl8L3FmR1V7L01kM2Q4OSVLVCRWYkh0aHlwUXxHQFNdMzVIbnJ3K3RaeVJ0Vl9GU21uTzQwKEp7QFl7XiY8P2FpeWM3UTh1W0o+YUYvK0AoQ1FnYSxeWFI5PkhgMXhBNDBm'@;
put 'U05dZW4je0dWYz85PFo7K2QxRVsjej9FMV0uMXEoXz95UjJiQXtdMSNfUCJePTFraCM4RXAlW2xkQHxWYzgpSyREeVM+eEtxL21FMk5NaCNCITg6LnF9c2cqSjNkMVZFNixdOH5dbjMrUGFxJWVyfE9qKGpjPVlqcGhgbyhpSWxIRCowTVchTztsfC4mLkgmdUV2dDdMakFwbyNqaEhdUSFpKyhs'@;
put 'ZSZrWTNWTFIuJkMxTTpwS1Z0KVN6b1t0Slo4b3tlfipPLzs2RVkwPXM7SkpHelowRChUMGlgaU94JCM/cyNFdTguWm9tRyR0LFBuNSwhVks2eEl2Kjl1bUA9PEc1REIjUEJ8MkVRRStAOC94aE1hO0JfZV8hUU9oNV1zQ3tBO0FINzw5aEJrN15vZl1zP3UueW9AOkQ/RnF+Ozd5LzMkb041Pytr'@;
put 'TiNASDRmY2ViY19BWC5EeGghU1tMVXwodGUqWHNEZ3dqKFBabzU2Zl5KbHIyN1F9KXU2UzhSWWgoYzpaej5CXXpkPmZYQnkqSXVsPWllQ2woR2N6TU1qVDd7KDFudyQsL2hEeithdSQuV2ZQTnIxcjtsYCRSUXgvLGEvViVxYiF1PF8yUk4yMWNdKD84M2pTXip5c3w0Sz9DNTM8bikvKEB6NCZ7'@;
put 'U2tjQHo8PmpbUS9COVc9MzxqYj5bOyVWYDx3WmtAKTBKTykxSkU9Z3I0UVhVKmdwdXpqMHlWX0UqWiU3czdldExQdTlTMUoxdVZqUl1pSzZ8KS9yamU8NzNOVGV+KnlAR2FpYSFQI1slIyxhME9oJEp0NywkQzV0IU8yOmxDMkI3L2FKfWg2S2ZleWY4UTxlaEx7e1VLLClSS3RKWjU7MiVkaCFg'@;
put 'N218YlQxTWFFMy8yeEo/UHBYLkhtKER0OmY3fllAaGV2U0FBP0xFNSJ1eHROa05lWyF5OlsqaiVmYTVULHMsdCVKdzksY2M2WlV9b3dlJiFOVi8re3VwNkd7NS4iKncjTEg+UD1RTG9VYmtsXm1FMEprVkkmLEUmN1MldGRpK0RORXlBdTZYSC57S24oUUY/SVlPYnZlREh7UHVSPCV7KXNRenpR'@;
put 'anVPLHEsaUZ4QU9ETWBpKE4jLi9uTE9mO25+MD4/d2UvW1ZRYmJlKSZ3IWBnT3NtRDEpRTArenVVKmlXb31pOWchbV00SHdvKl5XVG9QNEVhNUo6JFUkeUYsJH5COWx5QGZ1aDZmelRIeEE/JnNmUWxXbns7OzJyMEdKQ3RGTkxUUSwhTTEyNTsqO0dTKDJRUGpsVj0yLm1VNms5UXN+TntsIV9U'@;
put 'PSFUSnAsKlkvU2xaKUpiIlR3UW9OTkZURGNrNzszQHRBTCoyVkx8NFhSe0ZDVCRBV0RmTm1KKlooXXE8QmlXbkU6LElmaWA2MSlITF4hOT99bkMmUF5AdDFoQjZsP2R8W24qUjNZJC5BUVgqIX5sUHJANV5mRVc7Ijk5JGlhWy9vRGJ7fUhZakA9dWlseCx4PXhUJFgiNj9WJlFReTA/OGducG08'@;
put 'KV1tJkRJWiN5Qmk4OU5sTVRYaHlTSDFsYndGNjtAWHJuPzxGbzovaWdqPiwjfTYzSW4/NT55W11fbH5TKEJaKkhwZ1tgOExqTCEkT25ZNkZ4RUZkQHREcUBDb0xHXWVHUXdjUykvUCNNTm1YTU80X0gzLkBlPD5jbGRna00uMERqR1hnMVRwUl0xP0NYUjRzOWQ7b3M+aDRUQHY5RjNTcTdbJH0q'@;
put 'diVPPVgmfGE6aHRuVTNraFRoLlo5KHhmckgmVn5FNT5tUk1Mc344V21VK30hZjZBPGZjbXBlfWFva3JJelRoV1VXNlhSNEMuK2cpMXZgQzo0bSZxWHRJRFRPLjZOLC5+WHBCQlN0azYvKEpXV2hSU29uS2kqY2NdT2t+azxuJmh2eSw9d2RrKCtaNk06UEwzQWQ0NCtMTnhwIW8pNWtKSi5YV0As'@;
put 'WCtrX25GZkIxQDl1UXEveDduaXxOcmZSIT5dWSF1RylLTCxqRFA3Til9OT15Qm0xako1RTo1KmB8ZSZ8OWxMWnBVO1VUfjw4LCQsXyFUSFZxRGhfNipjeiNwYylZJHpoVHk+ZDhsRS4qbDxZcmdecmVbWjhSPCVKYDlZQ1UmcyVZZigvbk0lKE4jWjJHW1ElK0h7d0osezFAQGRBR21sc2N2bVRp'@;
put 'RUk9TUhHZTd2V1pib3kqIWpFQU1YLCgxRXpLTkU9X0FWdXZ3WEFLLmhPbVM8UkJ0MkxgWmJGQ2ohU2dnWCpYX05rO2dqP2IiJlJrdDFfUSo6dzYudEd5YEIuSihtLzkrIl99WEs5TkwvT2ZhVVFuW2lNRiV5UjVoWDVETmFZZ3Y8ZkAkYVR7cEY+Kjg9NXtlUnQ4Ykg1YXZKeSZaJGZ0aUd+SThX'@;
put 'eGFSel17fSpPWUFsU3BkeHMhNF9JTEd7QCw9bys6MldiKTYlQEVQLF5lR1Z4Tip4SiFNVDhROjovPHNDLG1DeGtPJUddLGYsdERmZWtGLygxLzYqN0JmSjkuZ14xTCIrOUYxXUNdY35mW0EweGxKRzw9VWlQaTtnWWQrWH59YWUqWDVzI2pRLEc0eyNYRGl1ZWk8TmVbOSp2Tz8vJDJqJGM3OnZr'@;
put 'bDs3KE0zY05VKGUqeVAvJnBDVGEwfXViNGFyaUxEKUxgbUcvIXx3Ji97cH1PVEBoaHdYXW9GYilGRy9+aWtHfXI3YkJFbSxiVncvPmhiRmAjZC5hXSNxKk9gQCh8YFtSdGxALFNgbH1yd1c/SmovTl4kMzpzPlVCPG9dR1osa15+VCErRUZJL1hqWDNaeFZmKWlefHpjL1I5RUh9OVN5Qnk1IU4j'@;
put 'YHJhOHcuO2laakw2KjI+I1t+X3hmW2k3bT0+cXBRZiNVPS9xfV1JVH42SGtrIWNIJHRZWXZMSXg8diY+VDoodE1FcG5ZPSo3U2Z4THtCJjB0JC46LERCSTlKezZqYitZSDhpKEw/c05ASj9IKTwxd35hXm1KeyRbLzxSQGwhU2ZJcyUhTHJXTmpoO2h8WVhTMy9dSVFvN3llOlAlWmlHcW9QeXBx'@;
put 'THU0Xm9Jcjk6ckA1cUVbVWlyaCZjL3lpN31eSDhNUGxEbEtxaywmS2xFXn5JTCRbd0RJWnJzRW9xRH1rfiJzJjtQanpgNGt7OVs8P2hpfjM2JWE5d21bW0pbTjh4KyMuSUErZSFRUl1YNSghXXZDZVtzd11ycTwrVDNSMlApbDgvfU9FayY+WG84PyJuNmxMUjNhfDw8WTt8TzNwKlszT1FYNCh3'@;
put 'YjphPGxjST9LW1B8Y2c8IVZ6VT0zUytJIXU9WkkqVXJoejpeW05IbEJEYnJmdltma3lvJlFZKXVVVHY3NHIwWWBuJHdhM3R0WCpRVW08OFQvfkJZQSFUeWp6Z1p8MV1hX0kuV1t4QjhdSEBoSXQ8OmkiZys/SDYhJkw/dCpCR0U1RDBRT0pdVCNLaDJgY2hFM2kjdmh8YCIxL09RKGR7Vz09QlA9'@;
put 'enxXMFJjJmI4b3xHS0l3KFgiRChaJWFjW0EzOkNpX0BITXBZZzJsbXI3MFlEdiZPdVJqVWE/LklzOH11cHV9LCguQWkwUEV1blg7I1szY09PY2VyVWZOVClPWks8QVN3SUtJIUJ1YlE4PDZJWjJNe18+VX1HNW09ezN+QGtNSkhoLmw6V3heO1N3bn5gWip1dGUzTHAwdVdeV3Z1cEIlRjtFMSsz'@;
put 'Ri9NWEhzaWczLm89cURPezMvKGFpWXMxKEQwXkg3dHozUzkuKGxdTz5ISD5uIXM+eE9uRl1ZQXpOOSU4I2V0XmEiU29YYEtSYUNUVTZFVXF5Rlc+I3tdSXdnZV80Q1p1I2wpW0JUbTFWVmA3XT83eWJaJG9nTSZJXj02NS41QjVvPzA1RVNGTmYxdT1vKWwlT0VCVHVoM15ZQ3AoWFBBTEYjdHFB'@;
put 'XWNraHxnMjUjZUVneFdjeENpNT9NTVRuPnVdW0Z+Z2dROnA7SitET1NuVzNpVltwVEpSM1EkV19qej5Pbl41YHs1XTpIZUY0dWckMXR9Pn1LQjU4NkplWHAlaFJBJkZyU1IqXzVkbWVtIzNTW0RpVUNrQ1dTM3MmR0klUnMxYVMjbE1hYDAxSFQvbEpSej8pS2BHM0QrPVghNTBUXyhQL2FZLzJL'@;
put 'JjZIZXR7QEtdUEJSdnBvamVXe2Ihcy9yRlBSdUIkTWw6bCxVNXN+dylaIlYqPTk1YDZ1NWc2JGs6MCklRkgyTko+cGk8dixiZVQyVmlsb3VVV0RrOkhmYHJnKmVsNyN9V0k7KWNbXn1pTkFMKGpwIkJyeVM8QWBzS0JkYDp3aksuOyV2SVkiOXdlUk1YSV5ReFJmeT5hWWksPHN3REshWDpHK0Bn'@;
put 'OHg6Vy8uYlpMKnVbUis0RWZlRmJGIzZXNSJTfmpfIWR+Y2Z9WFJ+Wy5vTHI4QHpPIzxRNVN8KlYmYDgjejhmYndoTWpSd1U5WDBjZDQ3QkhbcElTZnQmR1YhKHc8OHxiVGFAeHY/MyR3OUcsKz1ZKGRVfVdbfE09UyVvJHFOOiJiTV54VVMyMUFaOjtIWTlseS86OUZMQl9pRFgjdT5GSyVyJkVs'@;
put 'PXNzWHtAZTQse2hdL3JLPjFsJV0mLlFIfG9UdnF1V3c+SUJPbEpQbz9OM1RBcC5jalhxZHt2ZnEkKXZXbUIxWm5zRXVrMXciUzJQPEAkciZQM3hXREN7Xlt5REhbJT9INXFyRDB7TE49TzBNYDEiVyxRUSp4UDJBOmp7Y3JpRnRtZz94XSpXSUtqSj9wJUZlLjo3RUo2TE46UjJCRSRqVENaSSF7'@;
put 'IU5lInFyKHxyOFsrRnQvJWRbbyR8L1hdREZIZndQX1NgbyJeak1KfTdIfkFzVU81PHNKUyM9OFJFMGlVMEBBZXkuR2NJUzdYZFVPTil+djwzZTM5Zi9Le2lfbnRpbH0lMUh0elBwI2BXJF5dL3pxcDFUen0jI18vdD4sQWNHJXd8bXhiVyYhSy9oW3FtMlZZNnRETEhXalQzSVhrXUdGWD9MRGMz'@;
put 'JSZmaTdKQDMlX0whOmJQNTtDWD5NcWYoYF1gQGleLnR3Yj0jIX1lYSYkJmRNUUUiRSg7K2NGP1NAPjwsYVd6JnEsfVZbZj04aTQuIzJ4dTpIcFY6RzkmY2tZI1laQm4kIzdia2svYEUlOXh3WUsmOl9RaTgpPztGYjo1cnFEXzpJVnNyYzNpPytjSXlmSGRAZlpGJGlndUIkQkkxby45JlNvI2kk'@;
put 'eDV0bTdDe0BbV0l0O1VJNSV+NUFoVFNEVl46UzVPeS5mLntBMDVsZFJXK21keFZ0aCVabGQ0c11icWVgNCRYfDk7JjFYRkJHVl8qP0RkeiNOZHVJQl89QWpWbC9yazh1e2ZgZ3drLEpfcytRKn4reVoxPFlpM2A+PT9SS1MoUUtTd240M148aCUiOSt7ZyQiYiI7JWFvTk0rdDJ9anQ1RHZ5WU1m'@;
put 'NUh2c2UkOVo0Ti98a0NxOmk3M20vOVM/WWlmVEFZeWtMKSh+RVJiZX1rTE1IakViNVp6JDhQWjRZYmolQE1oMWI8RDBMVnF8JU5wYmgpXUJ8YmEoen5OSF92ZXFvKnFWIkgkPEpUX15XKC5xRzZ6PyVHPFNpbWA5ViJ5ezVgUTh7P1IzXX1CfUQ7dGxBZSxXU3x8TEAxNDAlOEJIUXV+MX1AU3lO'@;
put 'ZklSKj1HaXVCalFtSEJqaCNaJXdjVUVtKjJrVGg4Qk19MG0+NkgsK2l2MHB6YVokOTMzP0s1a1MxV3s6YUhHb3lrbyk2MW0hM0opQmhQI2osbT0yIVJrNCZieE11eUV4LDBHM2RLeXIlJj88JkE2SzBkQCImS3xMekVoRiZVZCg6WVhjQH1+Jn1xQ3k9ZU1yQmxbQXdsTX1lckI5fVosLkZ8RXI8'@;
put 'IXw9I0VxfWZEViVvR1siailRezoiLFtMVE9LJjkkNy9eLFpjeGd5TkFkZz1VdSUzOVlnOCpxMmg0WyhbQ1VuJSpvXXglaHptRHJJVV4kc1F5Ly5PXXkoX1c3Wl5oMHdwTG1NcyI1PHxdM2lld3w9akNEfUUuTEgqWnJZZHRKZ3MoYlV2Tkg6cktbYGRTYSF8cGNCKX49cFF6Y2x2R3QhXWt1K2hs'@;
put 'YT1NV0MjbTsqNW8jWXM2JXZqXU9zJGV+MD1SIlp0PVNrTCsxKVljans8Ym58VCVoWEk0VSVKWH5KRXxiWV5pLGYvSCQ8QyFlKkRieXdHNnJ4YiRwYjk6RWtONjpEYCgvY29oOmNWWURwSl5zRzpwRmVfTjRjVj5sWSsyUGpMflltWz5ZOyZLNFo+Rn51QzFSaDledCs2fl12dllWUDwsNm9yfTFL'@;
put 'YnRgLDxgJFcvU01vaWIsSEYwInslR1Z5aF9zUHF4OClNMngrYCkiYWh2TXZZZUg4L29+KG80cGlCVXdgYT5pWXJdIzlzdW1Qck1FZCFEKmp9VGhuYlVNenlVQnQ3Y3F6O2A2Qm18fVYxaCJLZ0w+XVkyNVpWNjBSIypwRyE8Sj1gYXMxMjZkQzNkc2JUZCZaUjd9R1s4aEBga0FHUSliWXk6LjhQ'@;
put 'dFpTTXt6aFM+NyY2bVgkQkAwT1J3NCp8RXtRI01Gbm9ZPDBEckRvcj56eXI5UmBbOXVrO2JDJihHeXcqRXMoZ24kfU98L2o0T0BWNm5lXT48TmZjREFKKW5LSE10RWgwflBdJGFyPE5dRWR1IkJLLH1WXl4/ZDdgbkIhKD5JRCJoL3lUT0E8Q2xGRFlhO10wMjkhczNJMG53X3EwTzRHYV47fU5y'@;
put 'T0AjOW1KMEpOKXVHYklLbE9dd14qWEJBTHAiVTU9L1M3OzViMEw9RHswcCxLQmd7K1pmYF44KH1ZWCp5K3V3JXMyflo0Kj8wPGo8LE4wKU5KTlE+Oi9IKVs2alI7M19VPiRxWHkqSmFbeT9VTjh4KyZbSCtFTFJEJDguRnVMWDdrSURqfDY6L18zcHF+WVFsJUYifXkqSVtASF59T3Q8YiE0MFd0'@;
put 'W316IyklJVByMiEpU2JWU1BdMis/RTh1XmBAR01rJF0yYlUwRl1ZPTNUe1d3ZDA9KjU8QHIlXjcvOm5rVDxUZkdpclM2I0xHMSRYKmxmaDtmJFNUXV8rYTJ7NF1lZjpSTFcyfUJ7OXNFW0djYCt4ZV5HOl5yRTRzMFtzezkwTmMuUWpVWVthdy8/bWdGJDpTSXp0a1JLJWlMJXhJMD5jT2VXdD56'@;
put 'MTt+MHkkNVtHQlN0RHBRYj1mKnsiTUxvSWppJEA+JGdJazZ2Z21VKSpITV9DTmRAcXQ4OTssU2NYUiJuJiV2Ml1DTH5RLjthIylbQkolJDw7eTBASFpFS103Y259JE44emcrTWBLQHguXy4wV3pxUmBlQCF3VD1iInhJRF8wfkdhZHQiPEJyUmNiJmg9RV1FeWlMRzU/R0k0PVI+IjhmYW1IKlQy'@;
put 'TylKZiZzREMsMWd1cXA7Zm95UztSWnVAY0llNjYrRnlrZDAvdlpgSmB6RlpIcCxNc3I1WS5dY2pwTDJCRGg8KntMQkRUVnNPUHQrWmI3OilKW3gqJGNiNGN9O0xJcnJlbFokVGVoPX1RZHE9YT1Tb0hbVjAlXlQjekJGQis2eHR9d1EyL1FqVTV1RDUyUi4lQkxwbGc7RCY+akZRaXdqc1h1VHZD'@;
put 'ZWlATzxGPDM/OXdLJjpLL0h0PDZpKDJ5PkQ5YyFkQHQ6ZSM9Skl+YGNpLk5Tdzt2Sl9BfVEieCQlJilKLHk0OWEwQk5GNkteaXhmTEE2RWs8Rih4MVgoOU4iPmcqZ31yP0FiJDFqJSp1NXx4Qm1nMzR3UXdaI3hfd0JTeTVdOE17VXRWYUVpTCVmaEJ6cV5gPGUpfFtne0Q2cV8oZ0s5WyVuW09u'@;
put 'KDR4WW4pR2BDLkZSWlgwSyEkNyFhdF8rM3woNiVsbmZGczg7VyRASG1+bkNqM194KiJBLjF0Uztjbl91cUJdTSE1cFJ4e3daSGNnbiY9OG5hWWJ9OmRQV0pEMHphPHs0dkhzWyg0Nls0KnV5ZFdObmhSWmVHe1k7dTFDcjIiQzZlO1tPR1RlRlh9WHl7fml+a0o7KXx+clE+WnUoX2tEZlQ0QkIq'@;
put 'elpGPG1wNnEkPWVLTXl4VjAoanYwQ2grNnhtWFZrP2NTaCtZbShuKHBJOXh8WTI2LzROe31SMGlSK0hFUl43QCNOciVrQ3JlQHN+YjVCZ25OKlpQNERFYTpYMjY3UUpUOkxVSU9+Wy5GSiI+P3xrbUF+VlQ9MkpfNXBpfVVLOlc/Q1FfbzhlKTx9Y1MqaDFnOUJBaTldUzE5OHpkPiQobyR5VyNH'@;
put 'cSw5JkBNV2xMbis3LlMjMDZAOWBCflAoTE1kNlZHdFEmaVMjM2lJXVooVGcqPDU/MilSaX0hTWF2aDRKS1V3MVRJSElWSj5XIzNbbDU+KGs2SF9ffmhQfUcvLnVCPXRab2slenVEKVloUHc0fU9oWlpXZz5kclcleV8kMT0uY3Y5Jk1gTkZVIyN3bzxlOmYhRm9eVUxTTE4lKUxSPz9UU01rfGhr'@;
put 'T2BbVFY8Wz8kdTVOR3M9P20pQVkzc0dEQ1lMSV9nUF9FLmxATTd3LzxkSFU4S0g+JCNFdVoyT0YocDhRY35MfFE5cSsmPDlMIj1dTlskdngoSE1BT0AlKHlVM30/Xz86ckVAOikxLC47MVNYITZmQzN8IyomUlQxTUB1LD8qY2pXe0tRQi9yMyo/KXhYP0dCUmg+e1R8VWVARmsjaTh4KkgjJEZW'@;
put 'M217fW0seyYqYzl4Oi5ydjZDSTNRZHxrJm85NG91KmpbYl8/bi5fNTVVPzlRNFYleV5eNWRJMyJIW3hNb2NAeXRYOXgofnxlXUhUajo8b18lL2FnRV52NV85S1ozMkolKlJlRigmZUQxS25BRFtoOEJyb1FzdTckKm1oPl86eCJDRjl1LiteZXp1NXZXWHw/OHNzJG5WQDRVdWNGMldsLjhidDM6'@;
put 'Ql8pPTEsS3lgeDZedVFPQk5UJSldPl5RKkNhV1o6IitvXnp8RXN6LmN2OyNTalMwckVhfG9lN0VaI2ZHUzh+e28vWk4mV2pLQyNlRF5RTW4rVzs1SmB3L214M3Y5KkhMYTM7fGN+W2B7U1F3Z2N+I2R8Mmc6LFteaz05QkYkN1o3Wl5YMDxNKXNNWlkuRjRwNyNmRzc7QzkiPTojQ1pLaFQwXzNK'@;
put 'MEJzZFcsYWg5Y2lGNShKKERiLGxHVHgvcntCRkhETWo1dmw2SkpEJT0kP0JGLl59T11SMl03USEmQCZIJmBaOENlYHBGbk1jNjZpOHZLJHVzaE8xQTNufExUb2d+NUFEcjQ0NWFBPWsrO0hlNDczdSxrZH5MXl5mTlgmWDFzTG1mfSEmJCw6S3hdSzIqIywsYTQlXUokP149bEtXfW17P3swfmJo'@;
put 'Mjw8KzNiMV9PWlhbc0ojdDV0TU9UJWRIT3YvPnooaGJIYyg3MzExNWN4Yj5rTjBkXzY7KjJvfmBoQ0ZCSShFY2BGUkZSPHtyNFViOk0hSWVJdCJXJnBuKyIubD9YS2hDVnpsQ3RkYHJ6JiVVckc3T0BMRFQ0IV9ZeVYuM3chWU4uU2pGOSp4cksoLHVZJGNTd1p4UlFrdUU1PTgvTGJBN14lb18+'@;
put 'd11JYHVbVG5rVjZ0Y3UobHF4KFg8Q2g0KFsvMWZjd1ljVHE+W0hyQDo+d0NzPEksYnE5Qjs5L31AemFHP3Ekajs0IiYwU104dCRLYEA0c3V2fHpMXn1PbV9MWzosdTtpJFg+PnN2KndfdUQ3eDEqUl1oP3FoVXJBPExGW0VhR2V1WyI3X1VhbEIkKnUibyxGTFomfTxtIS5kXSgsdFtfYFk5W2dd'@;
put 'd3FHXjVPRF8lKldGcUdXTChvc1NecWxrPy5JSCk/Mz8ucFJ2dGozIzZoNjhscTFhM0ZVSH5yaSklMXkjMFpBZjlrKylAPlpVSmF5diFTfFNjODtVeSFzZShzVVlDIUAycERxdGdxNDtdUU94QjJaQkA/e2F3fkI5fmNWcC9jLCEuL3Z+O1VGIVlxbGMjWjEyOEg9KD0+TElsZm8pQHRMfEZKJlN5'@;
put 'c1VySWRaJSgjRHx8IztUbEd0Kk55KWIzbnlVIjtfQ2ZQV3NfTTYuKV4uSjt2dFI6NHB+TGhGZnR5MCt+aF4sbEh+TGssZSolK3Ikfnx9bi5dbSMiV189WjlRR1N4Pkp5eGNQJiIqXn4xeTJsRytsJT1hMSppMyp+UGk6ISFbTndhZ3tkcTdFUzYidU5oS2FRXjNPTkovT05PMy45X21APlo1bWN9'@;
put 'NzAwa2JOUiIuUDorMUxpMTM4Ty9ZTFRkNHJxdVZAVF5IRCZpbzVmOndORCNrZSxEWkJ4KzRMRFlOflN0Z0VYKzwzNUlSSjxdWWZ+Ukp3MWR9VkNebjtWZF8kV2JhNl9uY01dTElSKnVUSERRXzVJJjVNUDUjbFdpa0l1fVl0Lz9jek9OWnJ4UCklNjNsdiRMfi4/Iz55aUJ3Uj9xNVNrVDUuRC9L'@;
put 'ZClTRTshKXJIYSEvQzcsPTkmZiFpPFlrVlowQVBubnM0OXQpeHB+eDh7fElNeip1XWhHISpJUkFeTEY0Z35uM11mN2VbZGF4fVdtcl9wUnZ6bHRXcU0wUjhhNDBaTU4/aC8vKyV7NSomKHVSJEVwSWxeJCg/aSNod0VKXXVzLDM6Pik6Kjk1YTlbUyZQKlhtcFcmUjxmL0dCVHhaaEk+WTFlfTld'@;
put 'WCw8SjNteVIsKUUjIzo1OzhfMFdIJTBeVlA3RFd9el1keXlvOW9EZkJ0MWBUJVFKOD52MU8ldDIrPH5DcDZzTzFUVExYSntXYndTKSoqcTI+XThDXUMrISp6XyxrdVhPJD8hVzg/Wzp2PnpBRzwxQF1fYE5jUGx8THlZUEBnTTs8VUpPSUM8ZFNseSE9NzYoK2R7Z2c/Mmx0TzdXSDc+dVl+dFYq'@;
put 'VWZdemk/M3skYnpBNSFIdng9LlJqekRMTWhBdFY7KFRfYz9CJmEybExjYVs5TjRiWH5mKn18PzZyVFhxfWI2InFLdiwyYi5xPjVzMndwPHlQNlZjRmp4OnIzPyJ4WVFyJS5VNDExMUlhWVlUQHtNSyVzTkx8XzRhdW9UZHdQZm8uVWVZeSxLQ2ozczMoVSE0UDZHOzUoPzJqMlB9TlBRRnJXW2pH'@;
put 'O1k4TkpDYEcuWC42cWoybDl3QSE6PVhiVjMhWzdHazM8OUhiKmEwVlgrXk1Zcyp3T1IwLj42Jk8oKCU/K354el5DQVZZN25SRkBhZF08fl9FLj0rWzpJSldbZCNiPjAlSCpgSTh4M0xsTUIpcUh2dSlVb0I0SDptQElSSXIjJHhSYShuTHlhcVpuY3E2Jk82ejs1XTs5UG1KRFd3cWhzcGZzV3E/'@;
put 'NUVWOkV9Ky8wTmpZPjxPalFSNitGO1ZEOlgicjAzZiNOa0dBMU57d2xyfGgwPmxkLG4qc2soTzVad106RlpOI0dEI3FNKlRVU0ptZnl7VWF7ZklfNWdkKVEzSnhvUjUoWFNqd2hdbSJfK05JJFBVKCp+WTFuUl4jW2FKIldLY1QmT0A+O3J3JE45JSNZXmpvL3BXQkVnXWpZXVBWLkpOQm9+SE5r'@;
put 'aTsycXV+MkNhKDU7OUpeZS8+b0UwQ11eWW45azVaT1tlVkZHSmwsR2gvblZpbD9PcmxIUzM7OHJpYm88Rl5SVE9BYHt+Z05UU1FNKEM9aC8qPU1XNzV7Jks1Nn5nQlE4Q3MrNm5IP2ApLzkufTBAaDFPeHYhMyZkcGRaQ3wjTH1nOHpFeHQzcVdBXldWZHxfSzFJajcvKFQqV2dHRGpDcF43O25T'@;
put 'emkwUDJAMXtXXVpHWEoxd3VRSVF3eHV5cn0qSX1kMDVRcUBGK0UrdC59K2swSF4jWSE8cEd5LzdmSSVjIW5VQTwmRjUkKD8oOWJWWEluTzElPCVRfHZ0IkQ0MjxJL2lFKjNKc04vXWc8XmVPM2RENEs1YW1xKzdffWlbdHtuNDkwKC9SPEFiIVFyU0tndTAyUmVFOV9PXURyX3FjPipzLnlkbk5Z'@;
put 'TSxrRWVRMmA/bDooYFJRbVBScWwqKVJkPzN0fDw4NkdjKmcmM35zVTdGPF8xYXE6c242dG5+e2t8cTBzMC4pK34lRnUiSzByOkZMS2cybzk0WT9xfXFGXU4yIWNWZkViOiQ/L1UwLF57cWdELFZOSSR4ZkgyY3JZbkhSKVpab0xdOWA9d0cuXkA3UD5vTSohLFJGVFhHd0QuQiFxMCNXUiV6WkJe'@;
put 'dmB5dGUhPiYvbnlZXW46eSVxYHxYTVB5fEdoTToydC5pfkpYI1A5fGtMelY1RlVhW20rVWlGMzFjbDF7akpoM2ZiQmVRV2EoIT1GOkhfM2xBZHZTdX04e15AY3MuJkZFeSgmW114QCheVzhTQlIjflBdOE1bRE1HPXk+b3phJi8vOiEmWF5eJlh8TTExUFteL1ZifiQhLj1mUHYvZHZBRHlVLk90'@;
put 'SyEwUkVsbyxEaFYxZHEvbF9APWpjeGg2SjomR21uMnkzP3ArZ01dYENLOmdaQ2FmS1NwWDlNdylGQzRNZExpP3c9Uz5SSnJNOEVQRy5la05lc1FlMTw/RlpjX3tqTUt8OyFwLjMpPENhbnZhOyJ3M0hWVGQ5S29HajE+ZDNrIzZxI28rQzl0dX15YkghU0hLSD55Zm1JYlN5a0xjJXNpQ1E7UStn'@;
put 'dT85PTVnZ2UpdV4xVlMzNmY2aCJ2UUx5cl1aJjhwYjFQLzk8Xz0sWDUlNmIoJWBZemEuRU5qSkRSWH1vVHMpRlY1MT0qJSZIWXpDcWtaISJ6PitdTHdLP0xGIWBkTnhySDN4dWUsd1VoNyVuMWkkdmN4d3d5RVI5fDloMlZrW2d2NCU6Jixfbjl5SFR8cDJiXyNbTXg+LHhecE85S15SUH5YfiVa'@;
put 'RlM4P0UiUk09PEwlSnJlbjtbW0ZuIzIzNjZYIltbJUAsTlttbEBJP1MiL2AifnBvOiFdPkFMayE2eDFofSxMXWNDYHlKOjM0b1N1Lld8P1R+SEdPWT8iSFk1S0JkJFo+dXdhVDg6R3NWSys0XiZGNTRfYD5FQ1AwY2pbRjN+OFU1PTc1YjJ2cCFwSHJLJiJiIltsdkNHTDZecjJrWkhaSyJHK1V5'@;
put 'enxMdShuSE0uM1MjPngxI1VrOk4mJWFwYVslajNWL0BAZFdFbGA0bT12ZH5QM0IrMm1yTmBdYkImZlNnbUUqMG9FPXg8ZEpySWxbZE56VmAlKXJMfnBSNVsoZT1UVTVLZ0p2O3osVzJMPChKcEZvdiZERGdUT3c0YT9KdkJ7NDE9bW5jXmkzaXxOM28henRFM0AvSkpdemE7Ny8pdldYUF43ZWha'@;
put 'a3E8QkpPWE5KXmQ8dGtBd2c2fDU7d0ldfG1YV0p4OiokQG1ZNUN1NC4hOGtYUSRZN05wZG04L0t6di42QWQmX3I4ZXQ1cDo5YTVHfWxsa0lXIXBacERFO3NAQlZROVpOQHxBfmI8c1hKOFtUO2woS25ybmVKbltPRXs+bTJ2RDh5MkRdckZ6MW9IYT4rLkgsSnU3K1ViKzNJdV4jTC9XUnRuWmxr'@;
put 'LFdAYV08TW9DXXUub0d1azJdUypdN05lYnw0L2RPRm58cj0pc1kzTUQiQStZdVFJJTI6TzZhTXwqLCMoO2d8X0oldHZPQXxmPn1eVTMmOH1RZ0QsaEJ1OHlIZ1osLG5hfH15MWtDZz8wJWNudD9xOFssRF9mVCxVTUd8MDYjc0hKTmspbUZKWHhbckFNSi9Acmx6dmYoQnBdLnp1bEZNZV5VRWsy'@;
put 'PVAyRmR8dEpOSWglaEpSa1VPb2pIRi9HPGFVPyJQK2kpRHtaREpPdFZnOXFiNn4yN25IZSp6eTBGQ0M2e2RwTEBZVjhZc1I6MUUuSiRTdVBMaERRWV5wWF4pWy8rPCg2PSZTP1F5OXpQPnFyJWtfTkNRej5wRlZPfjtmN09sRD14VDRJWDlkPyxXTi5fMyNVUncyT1I9OjElQi9ROHFHOiw1SGhB'@;
put 'Z30/TEEmVFRIbUd+QzpULyVXW28qOHY6YGVpUz5lJmRjMzs1PXNeckxDfT4jIjckYS59RXF4UHkyd3ldcjFdVmJiN3BVYFt8aFN4a3JQNG5ETkdjV3NkMVp+MGdfVU07MEs4bFAhZy4uUWZIViIkLnxCaXYsJE09cnIvemNsQHpLN2JYZ0w4YC53fFk3eEs1U293fiI9Um90SlcpcnNmZ2BuOjIk'@;
put 'UH4mPEsrZmgpQixOJVprdEBjP21vdHQjfSM5RmkiPWxAUDgkSzooLnNZYlBXfH57ZlEpMnR2Y31odm5MRVYwWCV5QDZMNj0wdW8hKVF3InF3THpGeVZ6W0dZKTlFUmh8LzU3Ji4qOmMzIzoxQT1BQVhmM0hkaiw4WjkuMV5qY3kkdn4+ej4rW2cueSZZZipsNUBhdm87ayhZSixIMjxEXkIiV2xw'@;
put 'R3xhaWE7NG9iUFYkTndbdTkxOiYmZGVHakw9MXA3endRNGNscDlCampVWGAvKklKJkh0LyNRbDEpVS84ZDlORm9pSSgpUXUsRk52JT8mWzpiJHE6UUZgeVM2Wi5dIU98L0YmVWE6N0JJcH17Ui9PNVYkJG9FMzpzKEBqeVdlV1dNWjU9d1R4WGZ4QCw+dnU0VypySTtDan5qezVWNU5nNypHWSNv'@;
put 'SiRmNVFEL2RVOkN5fiF5WWtPNHFUKnpqYGxSVmNqVi8mSWhfM047VjQ8Nyt0NHF8SDlEU2lqP1hJe0l+TGtzSFY4I3N8KyNqYCRVTjNrTWBwSUAjKywlK2JiMiw7Ol1Xe3IrYW8hZl5oZUFYMj9sQjsuV3I3T2IlVE9gOXt8KEVPOnVrKG5VcjpyUyJnYHZ7bFl4cG5Yd0AjQixdVkxdM3lFbHpq'@;
put 'OilBR2x7UWpuZ3UoMCw6e2d0KnJKSzFUe2NJc2h6blQhQGZtbEsjMiJbU0lYOTAwcUNrN2smVXVKPHBuenx9bF9zezx4cTRNZDtzVWZqJCFONHJ4SFQqNWBKQWtHZCs6WkMqP195LG4yVV57Ung6LmFhTT1VUzpzbklTVjptYTNNVkx3UHRNdiYleHR0UEN6MT1fd0o8VlVTMmp7MDFLSyVGekk2'@;
put 'Mmg3UlIjZF5OfTdkeyRCZSk5VDcxUkghYmx8Uj1NNlIrbmBAKkJqcFQ5fXFOMlp6N0MpeE9JZlIkZ0hzO0RiJihGbHVpPVl3K340PUFyaT1qK21aP1JiUWliYyV3Z3k7QTFfI3p+ZkkqRUZ7Jm0iQGZsdStDT3tkcmZaUGhKZn0+a2N+bT9EZGc1YVRmP1lXLiRjMGN1IkNBeVB8ZiFyM0tDTERh'@;
put 'XXh3UTFQbXVGTjxGUGY2UEAhZl4vIil1b1EjSC4iYXBeaik9RGR6IkBmOmhXemhEWUphW3ZSQkN0aVJHYTxMV28/PTkwczo6O2lIWTF1QTkkcCYmeHpZUTYkQnkzRm84TmljRVdyU3BbWjkqN2gyYiNLcG1UdFs4YTA/W34wXzVoPVg+dHcsKXVLNmJZImtNUnlyWjc+ZC9ea2lnWEsqVFc2Xn1g'@;
put 'fXZfSWE+QjAzcGBHd19+TzNral5kOVA0IXxySz5aT3s4UFBLMXJsMy5sJEBfYkUva1p+TD1YPUVyb0dVUihaczJJfURPZF8qL3twOTt6dEQ0LGZnZi9yaGJmKUVuZ3tBLHpFLyhkOUhLIihebjUuaVcpNmVrQHZJZTBHPHZ9NCQ3RGl2RlJLTXJYa3k6KD1eWDBuUWBLRDwmP2J0SHhffTM9SEVS'@;
put 'TWJVd2Z9JGtqJnR0VXB3X3ZfbHVPd0lPQiwsXWUyens8WXRnU1NgVF5DYiNMImlva15IX0xrKzl4YHFjXylMJD0oJmtlWXlBdHVZfUt0KzAoRW1wZV9bP1lMcSxfQ3xsRHJ8YDZyLCJzfSlvYExyOXpULi9pRWk6d29yZk89cn5sKnFtNmR3SlZfSndwWSJiW05CaHIzcmVhNkssIztzTDMjfF04'@;
put 'T2IxKHVJRCJjTnkiLG5fTGlWX0dRJUkzOHpJODZEZGZlWkZsUDd6NWdZZDBBWj45e2tPVzVYS2plTmE0I0BmcktGZ0xbSSghPixzJHhfUDhdM1N5R017ZGJLL0xISzFzTTxDe1B2eGBkdSpgPWBxI3w1W2BuMStoaHxPc1hMUlRoPHpIQ01vSmBtenRORz0ySCxLQ1EmXVtHXSlgaWJPayxCU35P'@;
put 'QjYkPTVOTEZhRi8mMXVKLm9vbTZ0NTI7fX40My9qfTtjKU4iJmpAJUxGeENFfn16IiwkcHRFJT8yTz43UjM7c198MDVHYjc+eUhMLj56dmlTVjpSTG11N2chMW5OMnNBMSRRKUBbPzwye2V5Mzd8LCFAUEp3TmtvJFo1VVJwWHJjZjhTR0lbMDh4dEhsPlVjZy9zeyxISSN0UU9JKiYsLEM/ZzZo'@;
put 'JCsrUUg0TmA0UitFOHQiOzVDenJdQ25lP0VSeClyfH1CSi4uXkdETHZuL04sZmMzZD1iaEVeMT97fF03XSo2OFJMfDQlNElYJkVLWSNqPEJKRER7QHF7SUU1WXc+TmRRLiRSL0ZGfGQkK11BKz1zUzR9R0A6UUduQ3VbIlZSIkIuaD4qYlV3ZFNybDVSRi9oPWNFVGlSdnFaQEZuIT5bRk17MnBZ'@;
put 'bzFWQkljYmR6dDVDOH1PMTFgVD5LTjJYRlZOOC9XYjl5fTNdQF1wZyVWRj1ARDYxcTYjJUJKOitJdCEoLiNeNlJ6PUI1aSJSZXsvOUlYYHV3SEdKP2Y/Yj9FKUtEJExJKzV3TnojMD5NRVhjVVdsbURiY2QoPVMkd3NuR2lIWTEjKjZ8Xm5ZUGtPdXdGNEYkJUszcTduXSM7RyQwO20rOUxUalRf'@;
put 'UyVjQmFPMVQocXNuM0ByM0FoLFgkTzs2YE5YdXgkUm8oazpbUWJAW15nPzAmJS8jLmNFVEI8MW8lJHhwRSElaUQ9Mjw4JFooMXhDPGQ+VUsjSHlGKEJVR0BsW25TSixnenJjd0BAVmZsSnM5c0pwK3wiSnFkUTNofj9WITRWMEd7dUEqdz9HYHs5VXJhaklRTWlCPW9ibHNKbCp4M286KlYwaTAq'@;
put 'Sm8pdF1RN0F6Ll4oPEF6VXYmPz5oQGxJeGl2L0w3XnUvR1tSaj1iVUVXdSFxY0UpQnNDRGU5QyRGQmFTVHxbdnxjTHB4P21eOVRJWSNBMU5sV2lnZCxeQihwWHg0OWJ4ank0K3lnLHZqbHgka1V5YlBrfktALE9jTFgjVDluK1JwPiwwRyhXWmc5ej1Sd3hBXkxXRz8yZV5aQzt0Iz44Tm5EZU87'@;
put 'UmxscyROUHdIWVcxUVRGIy5iYXNES118OV5qXmp5cyUjOjpnOiphKmlGR2BeZl9qYF9waWlTYzJlcU9KR1RqWCpyWEM/Z01SNXdHMHUuIVhWOF5bKjpRT24hUlNKamYhdSYsJTcvTiI4d3oiWipdVXUsKyU9Oz09RiFvb04kL3JPc2ZVSkoxQHZwajFaP15oQXJhRHgjQkdOfCprKlNOZj99cnJ8'@;
put 'ZSpXU2lrYDI9NigrQGFVKG4mJTU5JiVgPSIhPF9IYTY5UVRTTj97TyE7O2BQeHgvNz05ailPLFdEZ0JkcWJxdm9kczgjTDQvWlVlTkR4L2NVYkYzV2VmX0ldYCxeME1lTWNHRTtqcWFVRTYzd0hZQztiejtfbHluZT5sMk84KUFmOmhkJl9oOl5BJFRMO2RTV2o7TEB+aGAhK11YMkVnTGV+a2NA'@;
put 'O3J4Ui9JKjd4cWRNdFM3UkcmMDZGaFNTYixmMztOSV92P1ZZfUZ6dzxOUTIvdmRTYSpFajR1S1VUcVdLT09YdVVZbFZXJl80TUB9RWZ4V14pT2IvTio+QSRkT0x8c3ooXUxaM1g4WXg2LnRnQlNFXTN2LEF6QktjX1lIQWFHRV88O0NeTVU1UU5mczwjO3hdQk8sWGBXV298IXBCenUqamVjdWg4'@;
put 'JkRCYENFbV8vcytwW0E6ZHlxZFghbXhqSm8lUSZLS0Aia0g8WmxPXXxZPTBgYk5fR041cFVjMV5UbUdbQ3FnUWBQPDNXTjgqcS96NT9hP3NjekxLXl9RYSsyP3EmS2lmJX03TSM+OVksVCVAJTtjaHF1JFIjQCVqWWhYYnI4bCI0Jl9rKnMkdF1RMlpYQj5lbFNPUCFfK11ycEZTKUNmWDhdeFFj'@;
put 'eFZmdD50U0VPZTVCY21KenZEWXFvX2Rke1tlN1EyZUdBOWBYfWVdI0M9OyM8dU5nTiFbPU9rPV1LWERSTXM1eVI/QWZDR2MqSVckX0FtImh2MmVHcD9xX2dUQUlAKStGS1Z9eXlLaXw5Sih2Y3QqeX03fTklP1FXUEQ8NCxWVFJSO04mPCkkMHIpM3EhIkhpLyxHfSo7KVI/OjAmTDl2SW49TXVE'@;
put 'PGs5RU5DYEN1THVaOHBsdyM2LG9DO0Y/KHhNYEk4e1JNVyQiSkI7RW5QOF1VPFhda24/cFFgQG5PeEkkang0ZWp9Z0tFfCslSXBfT217NXNxSEhBQTBrZSo0LyojLy5neUpfXUFSdzJmKn1WcU4xRCgiZSh8Tkluc3VxQXU6UXNrV3wjWHY6MSxIRS9DeHZyRzNGVjljU10sRHVnNVJsSV1DaTsp'@;
put 'Q0xGMkIuWWhqOj4kKmRUQm9oc2tgcSJLOCttKEldSVB8Kkg2a2FqdT53Wk9ZJkB7cyE9X0Y8Rl5ITkcjLHlKKzVyITN6RnA9YjEhYjNuWypORngmPiRyI0h8cntOfTRtNX4kQGgoZnxhTkJgMnU9c0ZQRFA9Oy5mOnhyaEouPSE7MSFqLDY+eGs1UEE6dTdfWDhQQkFbbmQyOSg3Y05lVVp8Vj1F'@;
put 'VFt3NDVzU0pmSVMwZCo7cW1+Z1BINSF0b0YsKThHRztTS2N1NjU9NEwjZH5MVG5kbnVSbCNDWWhGX04hTGA/VFNYUUpANjE6bjd6NUtkUXQxUl0wJGtCfGs9aChGfHkpbjd6MTJZZFdeQF1ENFEpZmJTNEZQJlJfKnQ0KVg2NU17JHRkeUchKU1BMzRHeFBWQyF8dGUmcFdAN1ZuY0lENnhscSlU'@;
put 'NFMzKj5WVCY+OGd1NUw7WkFpQTMpJVhefDhTZiYwbEZgek5+O11eU2ppaGBIPFUjWTxnOVgjL0B7fCVYKmpQbm9EUlY7MyZbYWJAcDB+Ky5eWkIrQ2Z8bGJPcnB+O0x+bHQmLFhmdiU+WkZQYzpPYUN1Q111eXsvZCVLTSp8WnoiRUl2OU04dDAwcXhPOkUlPVdCQH5vdVY4Rm5MOWF5eTBTP01f'@;
put 'LzVqWGdONmh9ZXYyeDRjb1EpWTN4eV5jSWsjWVczeSpwQnw1PExESV5RLDdxcTtwWX5dR35JLl1NUGYrc1YjSGtpV3gpMEpWMVJSd0VFcDkscDgsXlIlcGllaDpqJGpMbjtWOD9AMXZsJl5uITY0QFtFaS83WUU9P3BFKmp7dSJYRD05KWZ+Wl9Ad0IxK0lKaUVyKVkqJXlSa3QiW35Jc1BWK3hC'@;
put 'KXtaX09nN2w2JEF5d2cpOFtFZiNAKlNzQm5AZFE/UTxyY2FyRio+aGlYPjhvbVhhLy9qREwmPy9COz1PZE1HKCo5YnIxQkB5K3c4az5iNTgqPH0zTyF+TWlAdWtTdkA4elZVR2QyblpYVkt6TmZZW3FwIjk8eTIsbG9lQmN9cjRpZVBmRHBQZlcxcEtGJHdQXjx3LHF4dFAsPGAhUXNeZSRXPSpm'@;
put 'aHxFT0oqRExSYzVeZFVxUV1CTEVuJWlBM1JMcCY7RDQ8RChhM2J9PC9LZSk6eENCb0w4UE1yVzN6QTpsTzVLYVFIZDNWUmd7bVAuQl5QZntHSChyZ01UekBZeFExUygxfGdKfjpBITcmU1JBIUBYNU5ZKVtgLlp0dUFtJm58Sjh2RnFdaCkxPUQiX0pTOnd2XlQscVtEeHZeKnpdYktRQyRpYkgh'@;
put 'LD1NaTAqJitmaCtMIkpKPHpQfTgrOVpYeTBkUFo5PkR+VCU5UFk7MWA5I1BEKHUuMVlQUD5DLlhvSEJtLnFTTmBPcVBJPHVVVC9PSHhpcmlbRjxJW2Y3blg5LjA1KXE5S0phc3B3LCVLZSUzNT9VdjF1dHJwZWE1ZHQoLFFVLDw+WGxhfWAmS3o9JTNdaFIjIWUwMCpmVXYwLFhyRmBfMD9nUXpy'@;
put 'TTRwfCNWMlcuRDRtRCglQF1SPT5OWFVOe14/MktRVD8mRDxvamcwPUxiOllyWFNEWCtmamAzPXBVW256YTI/P00lNjYlTl41fDB5P3s+bVMkZTx0O3M5fE1waW9GIkpQbk9JYDg0RCZuQm1sX3FfZ1RJSUx2Mz0iOEE8Sjo8N0AhPiE+ISNqXntEe0pyMmlaLm19d3E4QGhQKlI6eUZsUVBGL282'@;
put 'VWErZ25WQnN5Wl5sdzFfN0JePykkenI2Y2QmXU9bNUtUMEt1SjM8dTQ2aTpfUE9iWWlBIVA1N2RqZXVtVGl3OTdZWTtDZjwpOigxM1UhUD50PnxLUkdzKVIyKUh4RF5hYkh2RjkhfDlZMT1ESlNSclM3P1M2d3FwaSYudSlTTShfSm1VUGhdbHVoOyI5eDMmWnNlKiExLl0/KUlMK1F6c1FPb1o7'@;
put 'VkIkJUhKI31sWTxSXmZvfitPOjY1Z1BRPz85OkRqYThhb2RoWy5uQTE5S15wXUxRPFFuSkt0RFg9P1U1RCtRcXJadUB0XnsiJCUwSTQ0amIpX1p4clFdeVUxVF1eImJJV0R5JGNNczN0XXBmT3MpIm0iaitKMVBTI25Qd0xWJTowX1ZhWlVPWyZgMTA3YTcvUkEhP1dDI2ZyWX1bfFFWIlBdaGsx'@;
put 'VjgvYmNCZXw1SyhEVFddKlNsXmhIZyxhRWF8SmIsQCpIXk1mW11xeTU8OW5xWUc7c0xVLnopTlJBXzZZLy5zRXE9NSldQDxHWzY3IWA2akUpel4oaVVOY0k8cnwsOzghUVZ9dU1YUDZnKUdiZU1zbE44V3hPejJ0R1JHKWswKUlkUmhSX182Uj8qeU51STxiYz8jITtSQnZLell2bC9mZl5JMylh'@;
put 'amFWTjc5bEx1czY3UGgqNVclNDI9JiMibHo4PWFnO1Z2TVlMaXpEfiJUQFdRP2MvQnREYk1QNExQe1UwSS5tLFBkLGQsN0hBdXlnQ05fZlAhfWV9SXBYcFohOHBFMDQ9YWBFT0MmK2QsM3oiKDFQNUlLMDUwWE9bQnVPdmN4eH04NDhbZEFJP2lNNyE4cXg8MTRPQD9CKmY7U0N5NDQhJFlOaThj'@;
put 'PlkvLD5HTnZJRGI0OWw+aUJSMWtoeGI/IyE3UjcqOmtfYWEpLHoleChyY1BoKC5ZYnhzOjdYUUpyRm06QFlbIlthK1t6UiJLbyZwRiNKX1ppamNqNDA3cmAwaGpjaipaTFJGYWQsNCttR11XYmpSeiVaPFN6dGZmU09uRV1XITg1RV4/XjkhTj54L1kkSWg7Y0NkaVp4UG0xKHMwfFAxSWJZWUlJ'@;
put 'QiIyMltlI3F9I187a1lETzViQGFmISh+REgwWmx7UmdXP0Q+IzF0YWo7Tit7SUJlajF5bCkqSF9Ebl44dlBmNStzKEdwL0tBdkVMQj44YzwoXVk/TkIkKDAxRjUrS2VZJFUrQX42U3deJEB9aW0vYWokfX07M2k4Y3EwN1RpRCIpO0hNQ3RZbDBkRHZGWHhRejJ0bVJjaV5PVTRmMyhST29NY3Ng'@;
put 'eXJ5NyZ8Y1hFKXZ+eypEKV1jdztYejNXRUxDIXJmRStvWlhLWjMqUE05aFc4YyFzUkpUT1dYKzJVNEhSfX1ZMFBZNykwWzRxN3A4RytxY3V2dmojc3csb2ZPMjNqI2Z8I2dLLHxUWFlASW5+U1YyWCVJJilaNDc8a3goP0BJan59WWxjL3Y+O0MzNFhkJEprfjx+VkdPRiwqUnNze0khbCVVc34+'@;
put 'VmxjQnxkam9FYzROe3cuS01uJlRqZ2E7fjZ1OSlYWCt8XixVLipLYzpJLkheLk48Kil2QS9hcmFza3Z7NFlsPSpTbk5EJThQOSV0QyxeJlNFfClMflpWW3RPMmhRVigxMltHcS5DIW1Tc0lrMGx4Li8sNE84TCFbPD9YXyJSVm1jS2NEUlp8MCEibmw7OSpGUE97PVZsYzR5NklWdi95WU44byRY'@;
put 'd30oemNvZFdiRn4rNDhZLGh8ZHg/XUQwZCY6JSlxfXhgJGRtfUdjKllpak9EQyJGfkZKLnZ3L1J7YUY9Vip4a0MoSlgzVihYOUlgXkc7T1R9SW8mZkFXVz1JJn4qTnBhMkk2PEMrflZ9InMvODNlXnN+KlZwL2xSIkYsNEckQSw5Y3pdY34uRjJXfEx4XjQ5VnZLMFlqPjFzV08pWzE4azh7dkB8'@;
put 'akJGRTw5Jkd9X0U4RCMyLitua1hlNHIucS5xbER+TDlfYExyb2lyZEBoQjU6IjtufiE1bUVLTjE2OjEzbHBLJHQ5PTEuPU9ITH0rcVNpX3I/L2pIJk9kIXR3emZVVVcwTTQpMTI8UmxCUHNMTHx1RllZSVJmU081fCl2YStXWjM5TSNgcTc7Im83O2FvNztfYTo5TFNvUjd2I19TUS9IWzc6OTVv'@;
put 'NjdQT0hpbytWX3RCPi4hT3Q+eDwybiglIyMpOiQ4WTBiUTAwUlleRkc8a2ohYW0hQSFUIURQJml+NHo1WmBBJEwpSXs/OGs4MnQ0dnFoOkZqW0V+Imxnfj9qRUdEVEJqd1UiOUwwQDRFXlNMMDFJQGcoOTZLJDFQNFAkclJ7fW53IjF9aGVdKExQPDRyJiJFRiFOK2tUJUVYPzh+RFB6IVMrfVJB'@;
put 'REs2I3Q5fUYhO3MmUUdgXkh2RkBsd09ETDNGd3kjWy4uVFZWOU5zSSpUdHtscEohSDZ1dyxvSlhRSDt4OVtdOVZEaCJ8UF9BTzYuYS5PaWdFemFCTCp6YmokLGZLIkomMVMiOD9uTDYzXj4zOkd8b052RHhoPHs4Rk9PSnU3aTcpUUldRmB2Q3pbdDR2VFdqO3FrWVIkY0goOW1aX3BSfUlATWN+'@;
put 'IkJ5dzErWk1Ub25lTSxxeGspV2dvR3BvfSZ1NXl4TnpONls1X2dLYW5XOGY3O3tlX2h2JHorKlMlM3FVMUBQM0JKfWFoR0U7VGVXQF5dM08uSVlHfjlMMkI8PzlMS1hyY0RRMiMrMXFzRTgqSFp8ck4vNmhiRUJHOURtNH5RcjhsMGR+bnBKciFYUVZSOFc4ISl4O1Z7U0MwMTtdLEU9Ok0xb3d6'@;
put 'KCNOcjBrXSMmXSpMfU8sP1YyKjkqI2ptSSMpYS4/WnRrT0VZNTskRGY6VEheIWFOR1ZRTV1bVF45XiR4PC9yP19DNTl7QDYmT2NpaGY2bDBEL2s4ajkmVFBOPUA9TWk2Ui5iMUVOaC9oJlYqJmIqaEQ2X1llK1UiWkkqd0hofWUxdDNqZEphN1IrN3RNczEzVUMrPDFRdyJdcnNscDE9aFZ9bCpW'@;
put 'UUNPMG9ESDlbZjMmMFkkcWVJKkAsd3psdSphSTlAZWhXOjUmSj08bk08PjhwbCkzYDsrRlk1JTgmbTNLdUlVRSlHNS9RMW9oZ116WkoyNDB4R0NPNGskXlovIl0+JkhLfCg+PmdRLGIlSW5kcjsxUE91SiFITzYoVTwyL34yaE4xdFY/I21SPHdiaEwmYV8zOj4vaFl4a1lhUytDMVRUanpje3Vx'@;
put 'L05vQFFwYFB6Ty9WcWgrRnZDIWc1RXRPN21HOHUwZ3NQbHRjQWk0M2QqVUt6XXVPRFdYPyMkJDxFbWk8JCEoO2hDXllrUjdFQXA0WmRUSGx2cUQ/KGN8WkZgelRRYnZ1dE94bVJOJl9YcEpLWnNMYHo0UmJEOzVoW2NNdSkyKH1lTVp3KUw1X0UidGc0OFlsUiR3NW5VWF8iYVMvVk8pV287dDZM'@;
put 'LD5CTjl0c3R2X1dPWSJsK3E9eC43MSlIMVI/dltWUnhWPzRYJHc/Qz1OTWhJRV40bCUieXdaPFBaRjlTJUE7dlZZV0peJU5IX18rNlQ/SzByKjd5O29rM09LWEdIIm5HI0xXLyxPNm48SWN3Z2lMVW16X04+K1tRSnhPTVVFMShqSV0pXjlGS0NsKWpoIyVOe3RjL19ke0NKaTdGKlV2RytBIkNr'@;
put 'U29uI0dSTmFYQzIpSFVFZ3dPXnVDdG5WUnZiQ1FhaVVIQHN3SWp0WDxEeXpaZU1Yd3YpRSE/eCFMd0lmSihYbzNebWNFVXV3NHp5ekxeJmB4P24wLypVLCEvMHxMeXVZQ3RmXUZvTTpUJlEmIl05RktvQUhfT1NyQiQ0YFhLRiR3YmN9JUZLeExXY0dCSHpRP0ZQYDNlNDRrYjF0QEBBXygqVFA1'@;
put 'P2h2bjNrd1Rzdz5uRF5ILDhJIUdBLkQhXVRGcFJZI1tGVU5vM0JLQ34rbkdpdF12RUVWQlchbXw2Y29BPmhkWk5jYHojTX10cCtJYltGSCohd1dDIVdgak9BfTlaTzd0MFc6T3JEZlEjYkNkeVtDQ2w1T3QiWVFZP1VbQSI0JktKanhwbFI9TkhgclF0U3NQJUZ0T3BMYV4qTnQxcUlbJHlLRlJf'@;
put 'RzFlSH42cXh3Y008IlR0OkFyd3VNNnUrKikwQEEjYjxmWHtadSZUQVRBNSskOmx6Yz90NHQ2UmMibW52cE8wYD9EejVPcHo6Q3lOb0U1aS5VRDo9SHNBPjUlV0ZePVZxb1BZImJtWl1PMThEOVpqVk5mWCtxMFB3TjpLfTs5LHlMa3suWikxW3l7OUo1K2A9dHlSODdmMnNxOm0vaFJXVnVbKm4u'@;
put 'U3twKjpXXS88WWJtaX4meWRBXUtKJUxlKlJSeipFMytqdmdxWXNZMXdJcl1RcDUqbmU9WUVEQ0ZVXiJTOWMoP3s/e1RSRHw9VW9KPEpELzclKTJ1YjZxR15DXil4cEs5cjxWUWhhOkBjXXpoSm5MKEBXYFo/d0FsJThVODFMM25IYE9RX1V1T3U9QGpWME9Gc0RWSyh4cDciXTN4fDBCe2tqYlFO'@;
put 'eUl1Q3hBVHd7eTZIUnxCZ2lMSW5GYTA5elRPQmZAOjl4eUx4OVgob0Q3JitJeFFJS0FaTmVfTG9DLl1US35BNH57P313QiRHN3MmKG4vKjEwTGU1Qm9MI21fRkI1QWojU29ee19+OVFVJj45V30jfnV5aDtCOVg+fVpKVXB+dm5tbiV2Ym9IPkR4QztMKXB9Qk9ZV3tpcT94SHtucF9dITlae19d'@;
put 'XSxROEMhRCFWYG0yOGR+fkptOGx4amRRUEZOSls2KndWZSRmOCtWNFlpcnBVcls4VTxPbClhOVB2JiJTPjhNcWhoc3t2WTIvW1NAflE1bksqclModllQNlpkfVVCWypeaX5wemNGcnpfbCNRWFZiMHRoJmhwOEJAaCEmO3deYzVmUFgkPjg4Rk8wRjYzMXlIMnohKC9tQWY2aUhUUURvYzV4Pk1t'@;
put 'Ly4vTzVsWn05KWZHNVdGPkd9YSYsRClObyZCUHswL3xaRHtnVi5hWXc4cWZdWV03I1hdQEBZXXdBNF9HTlsqcWJtfj5CS10rdW9CYnVWI0hNV1UhLEkieFlibEg7XTkheyFRe0AkYVZtUyFwZHJNKE9kMXlMYjNoJl1AeEguejQlb2lQdjVseTUqX0BAVHBUNiJTLyliVDsqLnVMdT0yRS41WVFK'@;
put 'Y100T0FtS0Q+WzxAJSQ5YFpMYXolPmw7e0hNXTskdn59Z1dIeilRUnFUMCQyJWRVIy9QJixtKjFYTTBVKXxnIS9dSCFtWEFXPVNTb2NHSW8yRCIlezNUKEElPmdnfGNxJklOTntrLHp1WFB2MVdefDYxajt7SDlvJXUmLCQhPjdXeT5NRXA/Z0w7cWRDNkw4MiVVJVBLQFk1NHImPEI+QyViSW16'@;
put 'M1RoLkNGdU5ZTS4wVD9xYkZ+ZyVWPVJ2NmtVcCNDU1IyXi57TmBGMEs2KWgjUlVNUCQyJUomdE9vX3ZFelhMTTYiUDovKDQxRTgzMlkqfmxkc0plKzRrdUclQkIpLyQvVkpGVlEjSnEvV1h3THcvLFhATmtYcixdNnRlcWlfW2k7eSVXI0VgOzBUdjhQOCt7Kk44XlMsYmNSQ0tbdHBCXUZzKkhV'@;
put 'Iyo2S0lAMk15PnRTKkhvKUhVdmM+dWUjUy4yMHBFM09xNjgoRDElNTtMRzhveWB9JktVbEBmJkpwYyM2dWxCLn1NcGVnPyQoQT8+PlgvKiNaOF5GWDhCNyRJTkN3MCVMcyMqJEMpPWtQayRmaUpyWVpzWWJObG5TRzgmUH1KTnZ3RHhoO10iT0hELFk2bUgpcjF0RTRIWiM0fDkjZCxzSDcsSHdB'@;
put 'WTZ2OGMkdTx5USo+IlQwISt8bHc3RDQ+OGxXRUk2MVZOaXxbKDFpQSlyVjZtdz9BaUZyfEw2TDhMKzZrMzkjNm9DQUBRV0NgPnlpajM5IzdgLm89Y2NDdlNgMGdINTAkSis+fXZARHJUajM5I04jSU9vSFtkQHVQIVE1eVd9Q0UwInkjTG0lI2JQVXUpKHpJVCx5KVVlbFprI0Z8UjB1YER2IVE1'@;
put 'ZW83dFEiKnVBR1s8MWNQVTUoWSZsSmdDTUFvZHFlMWIsdEA4ZHQvb2ozRE4ibF1DLnV3IlJKNUZKWl8hKlo9TktJMD9zJnZZKzpaRUtWRi4hRDwpJnZoNERBRkJKcFY5e0Y1d3Nbc0VfNFFZWWsxSX14KEQyXys0VUd3NGp4UjViflExUjFRXkFbNk0mRWIpKjBFVVtwMX1RMCUrc0gxRStCLGU0'@;
put 'K187eDAiZltNcykwWkk3W0RoWkI3eDVgKipPak8rRH5bbFU1SSZGTE4iNSg0cTJaTUYlKW0qPT99Jm91VEZjJms3fDV8cGNGZlQ0RjdfO21MJnxeMnN5QG1pfFA1X0w5RD5Pcz1LO30lWj95OVdqQGFMJUg9QzRkLzU1cWhxSywsUnlYcjxqaT5EQ2ExYT81S05iOVE4VFAhKTtRLEphdHs3UVQh'@;
put 'X0RMVjNFdkNGMHd7OG5XXiRfd1BSJSMpdlRFOzZofSpYK2AmZF5rInMvU0U2LH1dMSRuRVo7ekd+S1RVPSZ7dTd7KFJQOG85PERyPjApcEReLGJpMlZOZT4hJlJEYyV5Oy5XT1h1LkZoSzpYIywiOVlERkV4M14yLkk1OyZSM2c6SCoyYExzb3Y2UU5lQmpeNygpMmwsfT0oXkBWXyFYPVh1UF0q'@;
put 'fHAkMWo9c2lZUGxsKzRuNjcjIX0jRywofGJSV2pGeH1AelVIKFFtejMiY3s0R3BRbihSMFpQcHRgXW1bJHdNJTJVND5ueV5eNzBxbit7XURLYnYuLkYhN15zUXwsakdiS2lWbSRNMHdNSk8iTUc3MGdVanMrOkxLdSI9JD07O357eXg3XjxDUj50XjtCYDlyXlV5ODtnJmpyWVY8PDI0UXQse3Fv'@;
put 'LndgNSQmIkVZKGxFaDBteGd8UHpqQlQwa2BbPCJPJWpSbntrNiYqajdAKGBfdXtdQy9gZi5kVDwsTS8zMCtfNXJnJGdaJVpOTyRyZyw/Y103bEdsT0lUSU5FfjozaHs3Y1JHN000ZExXcj9sR2M1Nkp6ZWQ3PD53d2Q/SmpPbXJee29bY3g7LmclKV94XntoQj4hNkN6JWxtYkFPPHIxKWwzakgi'@;
put 'PXpuPC97LH56UGM4X3E5VW86XilEV240Nm8scmBjaSVQNjw/ai52bl9xaFIpWCtiUW1odClAXW14Mls9azZxOWEoOF50NyxbOHo7d113T2owOkQ3XnFvZjEuXVg4e1UwcSV2ZjxjckR0Yl5EMz9UQCk7XXJRUSRUOGE0VHZRWVpGTyN3eHFbJn0lblV9MCZNKD5LIkovMiYlLGlQVmo7PGU3fHoq'@;
put 'VXJKMHd7ZiU+amR0R0N+IVZ+VEZPUjUmQCQ2XjEyc0tkP2FicXB3LjtVWCx6SUE2UVtBfTlvNTYmYnF4dFFwS3QrZT5HbkJmQ3J+ayZ7Wn0xPyNyPi80P3UvQCszTDNETnp3UlFXbzR2Rj9eKlVVIXBaSyYoSVZSNUtzQVlJRi5KbD9SJlJnaS5hV3ZPOUoqPjA8N1JKcW9dR2xCcXtGWnxtVlpq'@;
put 'XUhKcyJLUVc4fm1MPUowJSYoJUIlKXBGJEpvNEleJV9yXlJabj9APihaOUJLXkgpMCNASFciZVd1W0I6VFFZTGJQM0IyeXJkez4lM0kldVIhS3xVIVo6az43bytRKCZ1JT16XjdebXg9Sz4qMDlSeGdKYD97d09oTXs9Vm0ycUErRClAXUFdVixZXyh6QjRLQCl8ZlVia35TKSNqJldtXUlQRmtQ'@;
put 'fHdEaWZvJjgsUDdoT2whZWxyYkRiLE9+WGEzVkYhOj9YdDI9TWlzMz9ENUhJKGVNPXx+QSU1MzBuazdlc1V9XkRJdmc0SWAwI0A3M2osZ2BGTWZgQWlPaXVwVTomNVIrPHZdbHkpfExVOkxzYzJ8dCVMMFtQaHxSdCslIWBGVU1xWiF8em9yP2Z+Lm13Z0gxYyVOP3F1RUBqPTo+fm9zQGFnKngk'@;
put 'QCF8Sno4O1pARlUobmxvP3BrcDhFMCluK14kYHk3YUFpZyZJc3h4Pkc/L31EUUM7MUNNMCliZVd1aW9nJjg7fkBob0ZZNy5RPkN1biwpOVElQTpEZC5DTUlLdW5MT2Apa2A8TElOMSFPXWxpYEQzblBSa2tke09EN2crYCsiflcrcCx3W157NU5CJkxRQjIhcT4oL1o0e2xkKWpgMWlNdzM1QnU4'@;
put 'Tn1ORWkxVm9tPWV7Mj9xOj1ZeyljRkkhVj5qY2okPE5WfVlzMHxORVlUT1JyT29yTih4PX49WUI7dmpBTGxnblJqeEB7LlNtU0NhLis5YiREeUhPXzY8bCI5cjxIYHxUPEx3WnNSXWJiQFs7VjIpekxTcHUrIUgpXTBXaE5mYiVhb0hgLmVCOT9yYGx7aDAleiF3c2xCSSVueFV9RnY8d3l6R0xA'@;
put 'LmR3fkc/c0h0YCp1VH1KcTdKdix4NCljUmQ/YWJfbS8kUSx0T2wkZmI9elBYOUg6TCFAS3NgclE6N1B0Mj56fisidmZWOlBncCpxP1VIXndpIzdodDlfWTM+MWhpJjhEa3tVISFJPCpAQm84PDFMckp5UHZyQ214UnF1SHV2OnE9aEEzWEk8bEtGSG06XUI6VHJmU1phYWRtSW9FRE5DYzlLKjtW'@;
put 'L1dhIUxmIVl1RShJS0xHOG1XOCxCc2FAcy9XR0V5VTxqTmxzaWBoZEs2OkV4N1NSLDQwKm1XTkt9KnBpOkkzRk9FU3MzVHwhNUJ6RkAwRVJYZD9IVExYMTdGMGpCP3BXMiZVUl5hc2Zta1tAPkhnJl1wcHleI0dxNkxQcktQaEdARExCNmwvZU0oeGYrR11jPTxSJlEvIlB6ImEzK25+cmlDdEZa'@;
put 'Q3RGOH5HQlhkNVc7eTcoTnkrIXMjYGhRSl5tZXo0dlBHYXJCYXRBPSlHRGV4UHgqeEMyTm10TzN4VEByNzpod3ZOR1BVfUVARypuQUdYdSxuVXRXVFEjUStoXXY7Tj9EKl92cnZWdUZlTS5wcFsvOCljR0RTfSo5cV5MTCFpaDRudVQqMHxxKFBdfHB1Q3VyXkRaVns/QXk1b1BsTTxEb0IvLytS'@;
put 'Vzk/S0xFQm8xWlJCTCk6Ilp6Ij8wNVR6dWhFeGR+R1pMUShONyhNRlVRZU1LIl8+bDBwOU1RVVptbz5yfmsySy55PEYwfCJFKXk8RnRzKDNscHk+YEd1YyxKTzc4a0dMYTkzRWwrdmJ3aXxbW1RGWlgqXkdyTHRPUXtFcX5MMSUxVnlnOkhsK0RmdF5fVCRZdz4sPWtPb00sZ2srNXdYRGwrOmE4'@;
put 'WG89dV47Mip4eH5tOnRVQGIkVTpCTUR5Z0lOTWk4YUxYd2lXckohSCFsYDJSWnIoQ3tab0xyQzJaY3pwIiU3VEVsejJTdkd+MiJDNmJ7RVFHZ3g3O0BETUdiMypCP0NSb2xkMHk5WntvaGBwImtpQnp2YCJjRF51JVdIajohOWRNbXBqP3AiN3RtREx3OFk8XUNDdURiM0I/MXFxVUpJK0p5akt5'@;
put 'fkVtY3hJNHUpQk5GQiFDd0Myc1lkRm46YEVqKzV3eTouckQzIkNYMUxYQ0tFbV0vIUtfK35HIls+JiphaWdRYz5iQzZZRlhOPGJmKnpJeHczT0dlLi45NSFNelVXX004RlpfS2d6W1teelsvcH4zVzQjS1lDLltdfn07NnQlRk1DW01wazBHVzZaWU1zKGg/aStSantHM1NjRzdMLm8jfkdhMWY6'@;
put 'Vm1rLHxEenZgfW1GYU0uV11vLF5wIWJURWQ6QTZZQGVPR2tze1k2eEIxY15MdmhScXBNQ3olbT4xXkZFNXleOCtJcXdNcnREYzZYTXc9eT9LQnpTJlZLKik0P11bRlooQWNqcE5QelUzLzFYcXg1d0VtKHc+Rlo8MlYwZVNkNjg0IVlTRXdTIU5FO3s/VTAiZn4jQjZmOG1DREBodT54NHgpZF9o'@;
put 'UldiZF9WQlhjNn0pWW8qTzxLdEJYZDA4Pno2fXlicX5BI20+alduMEV9T2Z1SV9UNEtJKi5WZSszbzpEP2xfWmFXYiZaSmxHOylhaXFxdl4zVjR8IixrJi4wR1prQjBRKktPTyhwKkU3ZUN5VE5TSG9hfSEiZ0xsLEs+aEFocGEsYDxnckV1ODZXbSkvdn48MU1kNm5CPjRoOzQsUkM9YTZ8c3sy'@;
put 'NWdNLDB5IUpxU1h4cWkxX2g3WSpTO31+VDl4RVJYTktOKV90Rk5AXnsmYCNCYTxjZE1zR3VdeTYjODouYzZIPi56MTRKPEJkbUkyIVBCbWp5alhDI0E9JkAxTUxTa0luWSo2aXNaWCIqSEVrIyU7MWlnaz4zYkdkYygjazFfPyVXOCxePVYyPnB1d0M6U051Xkd+Siozfj9aaSxQVTJndnd1LGZf'@;
put 'RTEiXlBudnwzRixNd2E4b0ljXmpAakhSNUhRRWsqOT9PT2xKW3VCSyMhT25UPHl7eHpRRTVhfGc0eDwkMWQmQGVjYTlsa054dUxVaCxCW3R7OS9JPjF0VHxHc0NBaUNgUltHeGEzM29fNH49LEhvQ2tNUj5qImdBIV1VOGpkXSwzOlRpZU9AUSJhZW9YZStsV0t7JUdmUzY1QHRlb0hPXmZHcCFf'@;
put 'TiN+WjFgS2lkOkssNGQ9V3UkI3NqYkUydjFxT1FVJSw1Ym0xQ0k6QCZoUzx9YEI9TCNrU2BVVj84X11dPDRZQjAhNEc4RjIpR3k+fEVNa3RQRExtTnMpLyZCYXkiNzFuNT47MkxDbWpfRix1e20vSG1URU1zLH1QV1NXSjFmZU1lITh7MS4kZEJlfHlrO1h7bHQ0W1o7ZSpVWmQoa2tqSHI5Vzw3'@;
put 'ajpoXS5nWVZLaW00eThYZWxwTEN6JkJ7MzEyMEd1TmZaPH1tVElYLiJTV3FAKjFCT1k9fDZQWl9QNmEwT3NPajlFdFBXclM5cERyST0oZlFjLFRgNTU4SThEMXZBYFc3akl2WSlOaV9SZ1JKdktLVipXNHh+T29qS01ZO0luRmN8d2JRIjA9YUZmayFCKWNMJitjQDJUSHdCJGp2fCVIUXByb25C'@;
put 'bXNMWTgqJStGVEpLaEBGVFFhVkNyK0NbVm1WVmVqWWM/IThwaGwkOTtXXiwjaSg7Iz4wVWx2fGBSLE9QbX5eQX0yWlhzfSVXOFhSN3p8Rko2P0d4WWcwd11GRTZjR00kMWZadG04UG8qfm1hb2szdS5kU1RDMikiW2BrVEozUVYyP0dnRUBra2p1X1Z6LlhOTEFrMmlmbyI3Z0AubV9KaWAsPXlV'@;
put 'JkBRbi9LaT9ObkE9bGdvZU0sNGduTmd5fmdeei9qVDF+Yl9qX0trdmlULC9ySWBjUU1XZVZQM2s9ViQ2JD5HOHR8KDFQeH45ImI7QzUyRyUuMXtEcTh1cT56RyVWIUoxY2tbMV5LIWpkUFFrLFU+ejZCSWMvSjp2WXwwT2kidlRjTHwxMnolaT9EK0xGPGspNSh8ZjouWDgpdWhjVWVeRGw+YD56'@;
put 'VWJjdiR1dzxPe2M0fHJXZHpEdTErQ3xhRihXU1h1ZlppU0MoYCRoK3NyLD09SWdPaHF0MX1xN0J2ZFAhYWwqZjhiSSo7VSlnd2pYQlhbemwhcnZuWz9nUXoqeXhTYFhEWkAwR3lPVCIuUGA2djBSQ2phJlR6XW5zd0N1VyJzdyJ0PCJuW0MyPjE8MVh6JihzSVVDclZIPEUzaE5TQyl5eFNjaWUm'@;
put 'YGdwLypSZmFrK3BFXW1gTDphdlZLVDY/REdYa3xQRkEhfDFHbHkuRXY1THxjUkV5Q0BlVFhWcUpWITQ0fTppXnhJVnZrLz5GJE1abEAxUnc/RCpPU3xzPllyTFBGTzxie0IiXiJTITlGOmdGdF8+XWxFOC88PTRQLnFde3hdbXk8aCJwbywqTz0wM29ieldSWSN1aEZ+KSs8MGZNcDZHJWRtKy43'@;
put 'M1VzfllrTUxRNyk+ZGhFZXYzMk1aMCl2eFNhaSx1aUNVPT5lW204bXtBRkJGbHBbRSFHZm96LmZiUGhNU2g/ZDdQWiZmdFUsYlFge248K1gzKUVwWVdWK2NjSTc5NTRwSTRFUiNmNG1FcXZfSj1BYkNKSilrT0NvSy9KdC9KVjJYbVJ5JmshJW4pKCs0b01lKXlAbXdBcmYya3k5d1V9NmJtPSU1'@;
put 'PmZLJTdaOiR2aD0hIjlBezdgUypeL0pTOlkmdV9dSlNJPyNQXz9zWTpeImszIyFhaDN9NUtlKmQ4ZTReLFZJcGtKMmJ3XkYlaCpebmolJl1HOU5dOFpaVG10QllhUUBhVFRPTEg1WSwiYypNfkpnOWdwJTJ0YnpzJlVLQFdaKU5qbVZXfHZHL0x3IkVPL05gN143eGU4WXUuLFNScFptK1dPKkVm'@;
put 'RFJEbi8+NSMyWHU0PzZOQj5seCYlOyt9YjYmZUpOfihUOElBYk1GakAxZnsqQDckSy9Efk4hdiY/Ims3MzxwW2dKfjxgUSE6RzA0KVh7JUhzNU5ebnJEXj1oYjt8eUs7Wl91XnJhZ1l9MCY9d0ZtL3t3czw8bn1fVnNYMnFfKzJJcV5Kal9nbjU1PT9nNT1WISkhUnksb3whcGB4SV5CVEVQVjFI'@;
put 'S2VycT5fUj5KZENgXW1zOV97T1BEc2wrT2BeTHVubGd8biJnalB0Z3s3NDw3eitlTyY+Z25RPHEwVE58WUsjYDB0MyEqc0ZzZXNsWnM/QXpyZE14ZGopT0EvOCxlYVV3T11VcHd2e2t8Wm1NPTI4TEZhVjh9S1BdcWU1WWVSfm8pVlN6UHNPMV05YyNtPClWUXplPzl6Mz04RyFPWjNrMFk+Onpu'@;
put 'fmhFazF8dyJ1dkpCRFEjZH0+Vk1pNW1oSTAwTFI3ZDFgfnppUTtsbXJecmUkVHZXbnxWJCxLZU5bLkgsR1B1Z251SVg9SytMbD8hYCZLSy87X2doLGJpZyVgYUAsOmhINmJAKGUoSi4kWipJdSlhN1B3NSU6aDF+WjpMV145bzM4aDpufDUyfnw9Z2VqPilJWk5ibHksX1pyIkU5NVdvTUZOYXR5'@;
put 'XSpdVWomN2xmaXI6ZyxJLDhpaklfY155SjtZeyJnRnBfWXk1aSFvPXVaN3I2dlJ6ayNfR3Q2Wn0uIVVfU3M/RC80ZXU+Tmp3QWN5KS4iIW18ZWdddlB0b2UyeVJze2t2KXI5V1pmTzR2JjAhUzYlc094MFVTUlRFRUdvfmFJQnd9WFpLWDpPfjdMJHx+UVpdRzVUV1VESzNhW25HV2k/ZSpMU1U9'@;
put 'YWQhKDdtIipjRn5dQ05uRXZAQEZ+XXA7cUwqbnNMKjs+V0VJTklVS05YT1JVVDFPeGojaChScHoqYWl1ZUF1bU5bUHBmcHciInMsTHVrI3wlOEAkOUhjI0cqQCZxR1Yqc2hdTW9GYzgveWJ0MShAW3l+NWd3Q1kuMF5Ab1VvUE5HNGJvUUZHdW5vfltISjU2NGd3b29jUT5EMXJpTkdFe2hRZzI+'@;
put 'NTxSfDIxOS5LWX0hbTY9UGkhJjwzOGA4Y3Y8dDA8P2ciejtiUXl0JXEpVUZfbUQ/SmN2dl1YU1gzVDxvPCZ3N2dybiZeJCZyRE1OUTx7WmlVPHxzQSVBXXxCfSUpbSV4L3Y6fF9ncVs+cGMmLGxiLHFnWmUsbEBrXVM3ajV2fW57K2VyOHJQJjBAUm1WJHZsaSQ1OFVvfDdPbWRhN1NkfXFjRTt7'@;
put 'dyR2ZC5KOytkO2EsME52IylQW34/QXFoOCxEMHZaZFB4SiMsZDZUcT1ecm1HYUlkOnkkJSVtMkN1ZlliUSlXXlZdQWFOUWRIUnBvRWF+QSR8LmtkcztTb1E0aEd5SFBrYGN8OWU9aj9aKm00VUpUW2ljV05aXjwuaU8sbGtVOVt3ektdW0ZaVyVMaHVxM1Z8W0AqamF4SVFmJSZaUF5lLjl6aEco'@;
put 'eCl6YkskVF5YUXJudDk3OFJKUmYkRSpNRVlFZ1gxM1lDKm4vbi87QFN3P0ViO3R+WTkxYUB2MH1LOk4+XkVuLCFKRnojezYlS0YzPWZrI2p4MF5nRSt0eV1dQyEiTEB4djc4OmtNJStrZi46OD0jdnRibkVWPHk1NW9DTiVHOmczQ0FKZU0sd3BMak4iS3NMNEw6KDlJPUlNRlNNKDAlbi5NIjU7'@;
put 'MGkwOHJmN25nSTF3bCE3fUZMYGZ4fmFdbn1yaHdiTkwudmRoUHdkSipyfFhRaiN4aUI/eXI9O1tLZDtoLE0xY1FDMlkjelA+em9Uc0xwailbczdQXS5aW21eTzY8OXdZX0tbeFpuXVZqeWIiTkUrYjxULkY8dlBHUFttVFY3e0RkT1I8ZVNeKnQ0XiNFUnh0Qkd8L3pDPVJ7UEJQd3loXS5OTnYw'@;
put 'Xi56ISokYVg4SC5scmV8dH5nbEo6fDYlSUV2UC5WJipgPT53S0dIX11yUXNgNTMrKD9jQCxgSUpHLy81cyQyajlRYmkkVyVMYXJFdTArNT10Sjc8Zlh6cHcvOnE1WG4rOXFgbGh4XzVlJjBRQE89K1AwUGhuUlg1bXs4QD9zJDkmWmBfRykwTXxYR35VO10mQVlVPz1lPV1VVTdpbSFsMjg5N1Jy'@;
put 'fnVgVTt5S0t4VTsvVmAmOWpvNjY9JjJlLkpwQlcoc2hiOkw5WWVjKzRrUURFPDY9cn4jVFdWfXBaNm4pfW5xaGpzVWFRSHwiNU5hTE0pM0ldW1NRYWB7MmA5PzpYfFY/czgxcW91RD5qJixEX0hzOl52MFY4Pl9gJig5bmhmZnJmOkRTUCUyc0Q0LHB+LCYjSS9pQFY6OWI9MV4rfHZoL0lNVjRy'@;
put 'bHhQQ0J3ISolKnk8ZmMiLCJUO0tOMjp3filaOVY1U29DIXtGeX58JXRjQ2RCWE8iIj5SanE2QVcwei9fa2M1O1MoOSRtLkoqYHE2Oklye2hrKXAlKikhRzB2XkBCSzZpSXUubFJ4SWpiNSwzYCxKdVtvZHlPeGA/VGl8W102Yys7Q2tocEpQWWw/ZzFhTj94Uyg/VjB9QUZifG5COEF+byZ9OEZu'@;
put 'clFYQzpgKVhFS2U9MUFbPDcuO1lnfXxuSV0qcTVHKzB3Y25bUndZMnRTQlpPaUpQWWJLUDFLOUdGezJiakl9cG9pN2BadlhNdTZkQjVzcW9zSU01Z1ImQVkpcXEkKGFoSl94SG84QWtqQ1RQQmFyQndvb0U/ZUx9Mks+PXlKcXJJLGF0MT11NGBtMl5dRnh2dVllN11DXUpXLC42PClgOEchd0h8'@;
put 'dGoqPSFnYjBqWGhCZEVNZit8VVRYO09VZUhGejNYO1MvZWZaQE1odlVlbGNzUyEvdSNZWTBpQ1tbdVRtY3JlTU5GSENSaEFNOjojM09PSFB5Ty5DNCYrLGNgXUUqRGJ3JHQsczxwLm5xW1JMK30+Xz94e0xFK0deOHk9NHJYcH58IXg5ZDdmIzYzTzF6NywyYDxSIyRAMHdqaUtNZ2NRRntESGNU'@;
put 'dElqZEJJRXlDUHxOIjVERWR5T15rTiFfSXVeLz0xTj9GLChzcyk2amB7YW9sPGIpWCM2QXVxQm5OKExzZilIKToxVS9UfkV7dj1USFolVW5IPV1FKWwhWUt2K3FHU2NoL0pjKyF4UChVaGNnJm88IWE3fG1abStZKn1zN3hgNlZqJmV9bllTPmkrImA8cSoyKypqJSojZEFaIlhGazJxKzVmej1M'@;
put 'JUc0UkZqQTMvRz5pJi4yRWg3Kmd4ZEp9eSRYZjdqZXhCS2h4ZjJqSndSIyppUmZsemx7eXA/P3VXYVY8bVI3OkF4PmN1XkNkIypLOlJzKF9uISxVdX13JiMqVWEybGtSUHcqODI9WDlsdDhAR1FabnJhYUdDbF1sbXJUX25gUnJoWWpZSygxWUFfLDA5Q3lRVEs+c1dAYU9GTTlZK1okK0NmOEdU'@;
put 'flkydHlnVnNvOXoqe3p6TEhIUiV3QVl5fDExeGBlaGltdmIpNUtvM1NwZ0RzcTQ7IitgflpUZH45JjNjazFvIjQvYztRYygiTTlWPypLKyUzRHptWjUsWHdLK3VBWXFxSl97QUdjWDV1NDROYXVxeGRsP0cjd1oiMCpMKy9nd0NZTX03UXYvZ3M7UypnV1k5STM4WUR6TVN3OGFtRFJWRk1FeTZk'@;
put 'b0UuW3chbTI3LiNHN0tReGRSPU1CLGtUOkpLbWNXPEAyPTBlOEhmfG8yX2JKXTxlezJROjJ6MHcyclV6T3hMSDM+U2JdaDk5JFN1VUd5VTtZd1o+VHtMRiwpL3BBTTQlbzxFcFo5OkhLKE8mQW14JCt3cWguamMsc2AkPyExQ0whKG8rbElNPVBTQVI0Oik3WVg6QitsLDM/cikqaTA3WTt+UTxa'@;
put 'YnVpZXU7Mno9fUwuXilKYHx2SShNJEcpLDI+IkskX3Rodm1sSjtfU3omX1F8NTR8Ijc7UEc1cWVURUwjMTl5R01hSmZ4T1VzVnhaW20lWnlRbSR0Ym5HUlZdTkJULk8haCYzRjFgU0VkWW0jMHohdSU5eilfM2gvfnh6SE1QTnkqcVthaE1pdG9vW2phTilWcmglSWZWXm9PV0oleSpmOS5UPXJn'@;
put 'MiljdWFNOT58L1klZ2psQz41P0dyfTI9bVFIU29yZnd5N0c6SlQ4Tm0qSk5gVXV1WSNUcixuPFpDO09YLjB5MkcyJVJUMkhiRzokOHBqNDIlUntSMCNvaiR7eCVOYmFEZVo+czQ+aDN4TixtKCtET2xJN1J1Vm1nLDA+UWJqd302WWdhYyttWkUwMEwhP1Z0KzJtRWl8LlJnaz41NDQ2PHVtSWpm'@;
put 'R2QhOD9AJSk1dj0hNkZAPTdBcUFWfm4sN0ZQKnBEPX1qY0tZKW46cmtEJCMpZjViVlkxbC8rVCU7TSpVcl17Jl5uZWx3ajN9Z1t5YXpUdyZKWEd9UlJAWCNLVk1JZG1tPjZyMk9dO3QwWCEkazpMZ24+KT9FZUBAZiokUDxae1o5Qmk7cHNyJlksVFl6eV0pNFBsST4lWHlRfkssTnRRL0Vqe3x1'@;
put 'Lm07M3BkP3w1Zj1SYy5ZI0dTXmpoMHZraDA3aWwwY2ZWXzNgNEldOWxxVWM5XzEhO0ZPK0JpTmFtKildUDM4YGsmQV0hOShScm9CbSZIPkVFe2ExbDJAXSt8PlVEZChDa3RxdTckPnZRX19Oc25UZlUuLDlpJDJQM049JlA9eytrTzw/RzNgTyZfWyRWIWtQTjdWZ1owUUdHb1t1SFJNYWw8ND1p'@;
put 'fS87eVptNXhwM3EyNE1uajNaJnx0dHxaPVZxUkYxdz9pLFIyLk89QSZPbEx+RHVSUlM3dnxoTzFAaFAxU1JaKV5scEleMDNoVEshSmNoUjVoVkY1dnsqdGglaTRedDk1OHh9WnxjaTlveHo2QV4xMFRlUC41QWRRP29oOFlzOGh+eHhVX115IlN2RnslRy8yM2paVi98R3NCM0lRQlB7dU4rRXk8'@;
put 'Z1JNeXgpQXBqdU44Uy4iQzAxVUR4cTM2fSksOmMvMHAhPyxXfkp4NyZVWGt4eH5fRD1jeXlwekp4Ml9DNFR3LHRpcl56VHpadHJZfVpbUDM3bzIubkZPNlkwN1ZGWn1haX5bTTR1eD5VZW9OIUV8PWcmL2NHPHN4PVV1STVtQHA9Wkw2QG1ONkdEMzhsMFI2cz06JXY8aV1wWigjRTsxOlllSVd6'@;
put 'KGkwPTY5RkdYUVd0TTMzPztsUXMpTWh5NW9NfGBsQnldJSpRMjYmO09GXmhBTFFpO1FoUipEOW54Ukd3dS83Yy8+QHdodHgxMXhQZDl8OlkrciEvVH5UUGdEXldgbFR4MExqNTtZfU1XbDNxSUVHX0c6JSV2KHclYXc/Smk6KjlxPytkcXBlcz9OZVBHYCZiRVQrSikiRX5ZTjVoOSVQRmF+bncx'@;
put 'LlVuPXF3algwamNwV3IwUiZZN3E3RyxWM1BeUCQ8ZU5BOHdxO2pbWzVLIWBgJFlhY1d6TjkvbUUoR2diVShjRUMrSW8jdHNqQXFXJWZNKk1mfHZoVEhLOzpIUFN8OFtFcmw5Vm4mXkNqJj9teDwucSxHa0Uuajs8Rl8kMDJfTGFsPEJFL2kocjhfVWd1QDNWW25afWg4cTh3JmElIjxLX3NlaTVH'@;
put 'M3RHWlZkbU1XfCsxMjhoWVZbPHFUXmx4eWFqdFIvTGkwRHs1RFY8cikiaTc8Tng0OExfWi9OOWlkTyNTN3k3OnVYSD8vZUBVZUFkdnwxYGAzJDM9O0ExRGQmXlU9cmZwOXx+cE5lRCNMWltVenBKfGc3X05rMi50VWVbUDNXT05mdzw2M3klekk2PENhTWFeaWh4YCQrekx1PVAlNWdqbWoyWk8/'@;
put 'U2AzM0AzXz0jYzZZNndOLDUpYkw4cEJKPEMjMyhQTHxdKTN0OU5+S3hFOjVEKTVhKDUxMixOYVIwSWBeYTh5aV5xOFBlKnJVWU42MmVKZXZCbV5WNGpAazh+YDd6JkBWSERtWlkrNl5uZSR2WiYiMigxUEZZOEteTDBFbmFGJSY/M1lMWVpxYTQ+WT9XIzk4LjdhJm1FeVEvJjkxUEZgMU5oQn1R'@;
put 'SVBQfnQkLD46SlZWWWtJJUdgbFpTLEtvaihQezY6Oz5XRFlFeDl4WE0xUC5tLCZmVk01TUV1dUI/MV8oJS9MNFJIfFcidG5IM2ZtTG9jKkRGczViLFc+XkExaDREVlUydz1sflF5eU1SZ1M8ND9IW3Q3en14cipxYixxbmhbL1BJNCs3Rn46bVdyKlgjLn1hZSw+YiF1XzFMVU0qNDB1ZlhqdXAz'@;
put 'UC5WUkZOMjNnQ2Ffc2pzdTN6IjlKbCZpc1hkL0g3JjlrQlQwR3QlcndEI2BGSG5mfjFxMDR8ZkkxSzdqfnhhRjBHSU57cTZxN3xXcGtiOkt4ejw6JGhvQzNoWnthQ2sxTXB2OXdESix2Z1BWTi4wcT1JK3h9dTlMRkZiZFNuX1krSF9DPCYhaVZVdzpRSiVyKFcjSjNTeU43YEpqVGBFVjV7cT1H'@;
put 'K3RVXTFvNnZiPHZYUmApR0clV2NAU196UCVGO0kiSSF8UkZzZXxMO0xxTE4+Xi9bLzZLNnhnMCpbTC4wfHdvfGp2S2pPYVhZRGhTR0tWZSs6byg8clsvYkRRYCZtRUB5V2Q+dzNeYWZ3QUQ0TVdmMFp2NWZNcjVpVDcoTnksOXhKWEwwfmM0ZUB7PTJNbnpWS25XSTdTXnhddT8pTU56PCR7MkRE'@;
put 'WCswWn0jNFooVXxTITlVWl8hQCpdTDlqQFlicmtZR18kaypKKjVpVlh4bUtNe285fGgqSE8kfWg4Vn5mbj1LPnJTazxWcHk8dklnSyJZUXNgSi5eKUksXiIua15lKVFESVReRyxaQ1hoXypRZTduOHMyPE1pYF0sejp1JXB6IjlXeWtpcGghfmFMdWo3RSg9O0lMS1lddlR0N29pQ1UqZHRDYTFk'@;
put 'eTJNS1l1RXZ7SURPMCVaNXhZRWNRVSouL2Rjcz8hO3pddTp3bDU9dWU7elZKaVZTWll3PDRteCFoJDovbSRjWEhiWU5HOFhHM2MqPFElalc6RyhmLGsyRCx1IzkqaWpOVVV3QGNZancrdGM6TkVuTElKbTpZRGR1JkQze2taUis2bHhoQVpFVShgKjU9JElzYGFIWmtLJE14ZWAqS0YvdXE0UyVJ'@;
put 'MTN0NUYxT1JJZDkzfE9yU2wzbzAhcWpQWyouLmAoRFFFUGlgWCRqMzlSeFpmPE4kQDouNCN8Xl4iRzY9UE8+dGZdVmFpQCMhMEkqem4sbzlwSjByfUB3ZGVeRnZ4OmxxY0RmVmw2Jkh8VzQ0SU1SJVpgQmh0UDF1X3B4ITk9aHEwejxuWEp2RnZrVHM2UTcpYDFmdjteViU7WXpVLz12T3JTbDp3'@;
put 'b1RgbzBWSjI1QDYxWnNQakddNFJHbE02ZkV6XWNBQyZpZnh4UXVUTjYoZzlNdTp9cjxxWCVTb3MldkJ3MjNQe01dcURlbV5INmxFKEVbXSRwWDFpSjY9ZV58QmNgeSopYXw2Yn4iPisjPl89ZlJjJixMR1tXYUZlWyVzIkYyaDBFbClSL05FYi9hN1UzRldYTGp+RF12Yno5eXBYS19EUUR3MV1k'@;
put 'K218VlsrSCh9MiYqUTpXMUEjZW93JWA+RyF+WDF5MTA/aXE/JHJ0V1hLXXBqM0ZeKSw+P29TIVI4XmhOK30ya0xIRyxRJTh8XV04Jm1MKSoxTHRUKzVGMEMwYTAmY2twSmgmR1hXWklQTU43L3hpLiQjfHxAJHslY28+TGt6XT0hd3wkKkhlRU9VX2RuN2pUQXs7ZnRVQDcjdlEhZ0xkVlVIISMs'@;
put 'ektldXo7QzphVjxFSDYhO15TKSpJeEglcWcxIlhsNnQxKjVnelpZNCsuWiUoIys8clsvSXdWSnlGdVpUd0FNYUpaMX4rVHQvUSZQWVo0K0laNXhmbntrJX5CZmdJdXBGJnFqOzpJIVQpOCEhdGR0d1ViM3ZXPVE4eDE9UnwsektlJlEuZCR5M1FLWCh8Uk9qdTsmNUJxXjVoRDIufSZEcGg+YiVo'@;
put 'ZmRTWj1RRlBMRUR1T3pWUywzQChtLEIsaGJ0VCNmIilbaz81Jm86clRlT3tGYWtNO1VwVFVjTzc5S0QoM0I3RmhvfiE9emhLQHtLIntdW1o2Y1B7UWg+Z31fTkREfV5ddWtiNGJVXiF4aGVzZ1hpQClKYF9zOTdoLmc4ZDRFQGJuWyV3Q2BbejdKWUIsTj1RNkhGLExZM1ohLyVXa1I5WVBNTjdm'@;
put 'RE1lZTZ7WDEpMHROODtEYC86N29lPk0iLzhdZVs6TlAxIXhSe0swQzB0elpIKGdEfkJmPldVNHl8U1NZc21vcURDYzNRRiYmY1phTS5gbDp7Mk5bKmckQEYwZE02SjZJTj80aixMVnJ6UDNEbC4rM1VYJSlYclN0eT54bUdEU2d2fHZzbD4yNjZsQitEM25oOVBNcSlqKF9ZY2l2ajosP2FaNzBR'@;
put 'dllOcERCWzp4MnFpaFZqcHNFQVRFWjJPKUVbM2ZRJklobVcmN11YYVFuZClAVH5ZJnV3QSJ2VVJTaV1Me3VTKygjeW92N0ZjTChbfCtLfktQNzEpYyFSMzdvbmwzVHdIb2MoMEB1d0RRWzkwfnJ6Yjg/VyFzT0V7aWQ3QHJJezg2WU44dXtjMVRUOFEsWmJpY3xGU184MjA0ZlBTSWs2UVs0NDZn'@;
put 'a2N5OkI2X3FGMltGMjNBY21IQjdBd3E8QGdWSlZmdEAzaz9kQX5MNHwuIVNvU3FRXURrMChAM3gkbi5WPXhJVUskNyhAZC4pOnQpKzB4XXA9bzsiUUNLX2gyOzpSeWpbNEEyUVt+bmdsa19DMTU4RVB8OVE1UmduP0ksKHlfLi8hM2dGTDR9aSQzYCVfN2RWRiw+KFh4MGVqQEtvQWZkNTwySXNB'@;
put 'anh2KS5sI1R7VklCTEFzMkIrb2hDdGYwNElrSFFCNTowJkNEfEJKfD1SXzpdOy8yUEJMcEx0N3NxZ308RXksV0I1W2Z2KDVVJXdCdEYifSo0NXt7MDdGOzc6Q0FIQXpWe2pzY21mR0MwN2I1bjgvUFNDNEwuVkVzczVPPEElVDFyPVRIRS90MGBeT0hPKjtbUnx9PTlYRyxJbFtbMUo8RjZ+fXlj'@;
put 'RkxmT1o9NyxCWWddNDo+anxLQWtHW242MSR3K3d6YGsmLFRBS0ZHMD19KkN0Oj9XIXdGLkcsaTtIWSRuRkpWYVg7QkJ0W29QOHpJJGYkdldCIllwLGdgSWljLCI/amhOKHV8KG1oXyltcVRzMjxbbUlrcEJLPkRHQTJUayFtMl48Tkg0QUsmfUhAXmcoYCwub3xuRUlpWjttTk1Ad3hLPndQZyVF'@;
put 'JU5geD5EaT90OlVuJTJvR3wuRSsjN1s+bz9aPmFBa356VmdnaTxfM1Y4X2chIVIoK3dLQTc9RERnZ0dLUCUiYTopR3QvMjhkJEV2Pl1VNC5IaXREMjtIYE9OJXoocEtxUEwhWEM0IjlmYmpZZG4hcFdlPlIuRFp8O1NBc19KdENidURWRUldKl95RWUkRV0xX2hJXVklQ2QubnJfQWg8NSE4cj00'@;
put 'ckdubitdSUVHUmY9XWFuOlt8OUJ3YSViNSh9bTJQX3dNTWhRZmA2OCZ3WXElREV5fEFgK3ddX11oV2Yhdj9fREdHQHk7IlExNDtmM3F2b0Y2cWdXfUI9N2VAP08zUCVrUmp+V1EhYFJuQztsJCssWj9RKDhwIz95X2trUEBOXmtrbWJaOHhzRlNILjspPSlQYWFxc2skS0xKJDBeYmM7aVk8V30x'@;
put 'eHdvczsuYCV1L1FeQmpXVV5KMyR4c2tfQSU+IkU6RTJQNSl3NTgoYVo8dWQveW1dTWxRZlFxWSY5KSspQzspY0xlUVV7XVBrfGVbbUBwaT5JaGpzL115cjRWWyYoSkdiQF53YGNFYypdeCJdXj5AV0NWI0slVzN7OGFXWjh8VTZrQEwxb3cmO1B5LkxzUG5hcCw4cX1jY05QXyM4UCEjfEdTMixj'@;
put 'WXZ6TzlHb0QveWUwfXVANEolNjNCQmtMKip9bUlTfGBqSmwyTyUsYEJxUiR8QWZuYEJaJFpoalF6YENII0k9RnJTLF1ASXVCWUt9aWdYSGh7K0lpYm9vZnVzRDkyQSUxK2laLy9vTHV9e1k7KlRdczxbfFNtKVpRLCl1UHt8Lz8xKzVVTmB6aUtjKjlxPERWUCIxKjkiQ3ROak8oOy9efVsseGhH'@;
put 'YER3UlhoY117YkZ3PSFxfUZQMW4/WTA6VGt7T0xDSyx7MksjQ20hbzxSIypsektLT047K3hJZ28rO3wvSDUrYHpldEN8OCo5bD9hfnsiX0ljNTRhJXpdJFd9YSV8JkEkelI/JSRAPE5QNG9+bGBme2c+c2lNZSg7dyJXI3hwfWouUlVRN3EyZm40Z1d4ZjY8cjs8Ryg0UDpVIVlhJU9ndlp9Vnd9'@;
put 'NyVuX1owWVM9bCMuRzJIaVhpYkJsQFgoMk00fG5rPjAmKSU+d2wueig8bWxFNyIqNV80Yl9Oa1VnRHQhKjspSU1gNFFyKyx4JlkrJnp0Zit3OU0rSUJ8WWFuaGNfVGEuVGhaRU58LFphX1gicy9kXThUVnRIaldWMSJJYk51KH5tRWY1VDVLWG1EaFZfVSZ2OSVlPGVTT1kuUXFbbUE9VzpPam02'@;
put 'RztxOUBiLGh2WmE5clgxUDVsfjhbOD0hXyE3bFdOLm4qI2d7az5mRUZeSjNVaGd1M3k7KmMkcCFVRkIoMUZkJjlGe0pUZ3EmS3s8NTJiNHU8XV0vZ0ZDWDQ0I3xoJjtqRCtCbmksUkouTkJyLlsmUitSP0dlTGwzKXVfPU17PnJbR3Y9OHVHKl8hNnxxfTtsT2FbU082KlRXZDR3Wnd6VHVob3oy'@;
put 'PmRibUk0QzxDKDJ2SHNgQmAzRCIlV0pge2xQMj1vJFBpR25uWWxqfixnaFVqQjQ3UDs4ZGdyYFNnZ2FMNlhxRDxQKl9dI3toPi97MG1RbFVeez17Lm88PT8wbUBwdS5keCtXV2lsXkFpZyVZaDVtUXhqOlVPJEd8dXd5L28oYTFPXllacnwhTXNySylJJmB9bnRSflR5JldRQ1J9dEt8MGVNRE42'@;
put 'NmBmZCRaW3VjMSU2eks1NnpLXSwoeGhaJm8vVUZNbkYuYzZFfHRecCpMMj8oeDJxLFY8WU0mTm8uSFhNe3oqVl4kNE4mYGl8U2NxS3V7PjlJPWlxJVZiLEphZmRpRUhtKF85d2NYVUdrdD00ckI2X1hPdl4pKlVnP0QoTUBOWCpmKWZ+OXdgZmMjL3JfPDFqRjQwMENkbUcodHxPWH11UUcvPixI'@;
put 'bVNnNHRkWkJleCFRaXxLSS80USxCWiFIRjRaPV0oI1QxfCxtITdTekAiKUhpc3s3e0QoVz1KZzc8RWZ4UE92SF07UyZbaEtFXl86XStFcGNgRDphRUJPLCw4UUx4NSk0UGIkT19EPzJoNE1INk5aaFs/RSQ3TE1tbz5yQ3QqY1RFU0kmc21wVSM+SDM9WFlIN05DSHdsXUZ9dTpQR2g0Z3Rhfiwx'@;
put 'Pnc3QD50Z2hxZl5FKCk1UHxLUiEyVGM8bSFTSU49aCFLPmpCIX0uKX5vYk4+cGdvY2dtfX5WXlJyJCVVZExJVDUwaCkkdUgmRi9bKlh+RDMkVSs2SigoOSxDfTUxZ3FjWGx5PW87P0BxUjNnVk9uJmUmQXBYODRAW2dmNVkkWWFSN0JdZSZGcnhNMHFkODlxUW5XJT07NGdFNGhgL3I1XX43WTh1'@;
put 'bSN0O0NGbW5gSzRSUkx4N3Vme3dIVlUhLjVJTF5PbE5+Nlk3ZXwqRX4+MGYlZjB5e2o6elVSQ1N7bC9kPnZkc1JoYThDe1FsV0NNVCsmNiIkbSt4Uk96NGcyUTpJWU1gZCs1d3JURzpuNE8kSjJCKEZjMW9GN2hPZU1lTVJ+eTlPPygzRHNWPFo8P2NdRD8wcXJTJXFSaC9qRzRkajptNFcoIm1g'@;
put 'Oi9kXk8pLl08QHdQaWJXWiEzTlFfTSpMZ2R9NDU8ZmkzJUc+RlB+eUdUJU1CWFNJRTswRjdJZmNfViNkaFNpU3t3T1NzWXt9Uy5mT2lqWy86a29jSFBiTWVxJVFKTihyR1I0QFhjeEldX3pkLD8/LzprLjN6fnhiIWMpTjk7ezJvWVtxUmleJkRDL2dzc1ldeno6dVVRVzI7KlJJQTNnJj1aWjVN'@;
put 'cjZ+LGFTSUBbKTE2TyxuPWNYQVMqIXV7TT81cVNbOH56Ql0rIzdeV0BweDpKUj59bCQwKDtmZE1eRXs1PWhKQ0RpVmd5LmpGeDVbXS9Te1Z0eylDL1VaYXMrbihOR11PPm08PS8xLHgjKmA7Qmw9NDlmMCU6OT57clA4OG5hfGshRlVTcGJNKCFTNS5hViY4LHFESX5seV5TSUxkO1EjNzZ8QFld'@;
put 'dkgwJTZaSiwlWmxzNixLWmFJNlplTXkzMVFZPXxCMV4lK05aczNNT3p5Ik9lTUUrZUg3cVZVa11GNTp9dHpIdzciPHEqK2RSNjNwI3UvZHQqe1pSPjdAVEB6XltfQHB9bFVeL1dNdCFYTkEzakpqPHc5ckNvMnxuOE1ANWcqM3MjNmZkPGMmfDksSG88Y0BiZV5RPn44bnA0VCs2Yl4obCZsfU9x'@;
put 'b1pnW2NYJFgzWVIvOUUjKE80OEUjdzNeSnYzXU1GY3l6T3FxWkgvWzFGVG5MIS50OERTbn0+TDJqZG55JFJtbitZMzVEV3dBays8OnF9VnVoPGZTLlhwXmZ4fjBVTlZBIVp5aU49LElCPDFKUntoSXN9eWlDNnVSaFE6OkpqJlg5TFd+WDAqKz14eV40XlE3aWY9aE4qLDB6K0pDRDM5RHE7N3Ah'@;
put 'WixjMTFSbXFAND9yNllgY3tyLC5IKHgjYyk2RyJCMixAQENNNDZzSl0sUGdFKStaU09IU0c4WCt7Uyw6c2AsKCFHUShRQ3opZDU3bERscFQpXmw/L2dsVEg6fT8pcTptTD1kK3tTZmRURjo7alA3dXlkOFlXeUkvWmUoJnMhOTs7NjhoS0h3dj9oN0p3PXpkQ3lsP1NUW3xqKSoqLmlqYU4qfD8o'@;
put 'W3RKYkVMZnhleyVjWD0+RHBwZEpdVkQ6KHA8dSFtMiNMKm16QzNQe2lLNSMoZyRSQl1EdmV4KWx3fl8jaXRnKUxTRE87UDszUjo9KjF7UEx2Vks3K3VPYmdwJCY7M2FLa0BbUFNzJDRCKyRGVXE4S3BZJjZFXXtYRSp4OiEwejY2P2hBclMxVl0xU255VX1IOSIlTzM3UDRIJWp2ViY8T348YU5M'@;
put 'NnhvUWhpd0k5TXFve218O2JlRl1we0pqbC9HYVZlKSZvQzM4WzxBOmtmLGVreCRJNWVAJH5SSiwwTVJ0JCwjLmxxX1FdLGZ5cj0mZHxwQio0K15Ae0BLd2xKPSkxRUxlblIjKiRJMVEvaG9gRyx7QCljVXlKY3B1QihKfEBWVSVNV30xfXhETUJhanpZUyklIVZfaixeWnd1cUhwPCJaP1IhfTFX'@;
put 'ZDNoMHtHWTpZV3wyeHRiIzNObUMkbHlhVjFPTD4yd1ApM2NbakJ9KCNuIX4hJC59IV0wL1VBXjBUY3xXc3xPMkdDQDxkJVJ6e2hFek5kMTpFJTQxakdMe2p9ZUtxdHBYOEw/L2hPLEJudCVbTUJpfUhzTE85WGhaO25lbywwOipTcCM8JUc2TFgocyh7LypbfTo/UzBoZCooYmdEQ3w4Q3VDcFJa'@;
put 'b1RGPD1lTi5AWnN2RlA9cUZzS2VbNyV2aVE9TGBDcF9sI1l7K2BIdHpFcXVqMzxJc3tiaDkhbVI3aD0ic2NBe3xRbGVPRT0rRSJpS1BVXmExbTd1SWJBbzN3RHIwdjFHMmlwTlEwRiRxfTdsayRXLFp3RFVYKk16VUA7VDRDMHZ5UHBjekdXcFNvV2U1SVZVM1pKTkRafkNQeEtLa2s6JktIZHUp'@;
put 'TV1PRlBkLEd3XnpHSSZGUWZ+TyY0VXwlMStIOEtsTWVGZzVvIXUzWn4/MjVveFhEcG8rKXFtSUUyJHZARVNeRl86bn0hd1EjYlQ5dCFOcDk6fDs2VjsvZkxafVYrO0NmYE9GTXMkZFRXajtQJU1VM1h8OTpMN2xoWyJ6WWBeJiVTL1pLOHc3Jj5ZbDldY19XPX5yL1hiKHVPLmFSNW9jTHl3XXcz'@;
put 'Ijx9eUZedjBsTTI2eGhPJmkoeHYlbkplTjYsX0dwSzliaXpJXlo1fE49KCZjdXN6Oy44el0weGVkayJGY09rPFlhRXgxUU5IYz0vREJ4SzYjQHsxbX08JWtOdE5+bSRPa2I3X01ZdiY1MCRuJSY6T0RGa2o5NX0lMSV+JWZhN0hGci5zOmpAR3JFJClsZmk8dk5+bXdOJiFOUTNUbVF5LGhpS1Uh'@;
put 'TkYxUWg2JGdoJThCIW4mWCZzeUxpZV1HXVMlQnM8e3xnJFBYMDleJiFLMWVNRT0mWF55aEshW3VtX25WQCVlKm5DZndxYlJfJE9QUClET3QkTnMqJiVAQTpke0QraEdWKyZqT1ZhI3VKelFGPV09ckUvaXN6R0cvYVZ2fithbU8zW0dFTzZxNHxbeztfU2BAeFtkd2ovODZbJUM0TFp4djhMaldY'@;
put 'WERSZVVDKFghWVtpUWxSU2ZgfV5LbXl1R1J6MW1FczVaOHE8a0ksYV4mZ3dHdWNjUjc5VmJCRDw9fCpMMXNkTk5eUj4zaFp0VkBMfEBoelFUVzNAOnJOU2ZgSVl4aEcuSUdXI2V4YmAwRFhNQmEsMmhpLDZHNlIlUzApN1kxdSljIXZYeEUjQFYlb1FSNy5bSW5bd31uIWgleHZfVz9DTV86NzMk'@;
put 'OiNhVGIwVTtwNVJOU049Lis1fnx7RDxPXiYzWDw7cD1SJDtdVSFxL3s+MDx9WGN7JGUxNWlNIXlPXVhWKGMkN1YucFZ9JHJGczNtUHs/fSleNywmWktQSWFHL0Q0MTxlP0A6PzBVZTNZSj5tSXpNOEx4VkxbdElwKyp8eVtmT0FbNzYwalNvP3lrXmRmVig+RDhIdW5hVj1JTixVPHxJIiQ3blow'@;
put 'RGRQNXFDL1JqRzxrRHoiRUtFZF0/MXh0OEdub0U2LDFVcHJvXXRBVHQrO3t6W0NoOVFqYyYmQygxb3pZJXIuTWg4dXl7KHhaQ3BxY1RqVSFUaj4pMGNHclVyNyNiflQ5UilgJjp9VENLWXkwYnQ0V0QmPDw5eVE/PihgMUNwIXxgWXk2M2I7Rys6cThEUnlkNCk5U3NodmZEXlopejlpek03MlJT'@;
put 'ZW1iWGsmVT9wMmk/MTtgLjtrLDp3QElNVz9wP15Edi9oT1VoRHR6YmkiYT1uJjtpM1tgUFIhMWpjOCp3JXdRK21iT1F4X29oJEU2aExNTUg1eCM5R3laJW0lVXlOLl1jJlpgfV14RCQoTCgyOk53MzowSnJSTnR5cDwkVy8ufWJKOjl4am9NaS96fF8zS3VOOmlnXlFUXWohVVkkcWJRLDMjfSRF'@;
put 'b0BaeFQyOjYoQGhfRSY0JiY7KiQyMEQ0c1R0azhHOF1BVTA6cmMhYjtaakwjXzM6Ryg7e1pfaDgpcCEsQHt1c3plQWk0Q058XnxsKnJZRSYhLE52aH13Uik7LGFvcCJgYjFeJDZiQyk6Z3cpKkhbJTUwVUNrPkVONGRlU2cjdmldPzEpPT0qK3ppTlJMfCNWNHdNLDdxVn1MSU9sM0l0QH4zJltj'@;
put 'Kj53JHpjMU4qdnEmJUhMOntBb0Jga3Y2c2Q2YjpITHw6SExgZEFeKWtXZjBWaElDYF1tYVReTGpgZlZvMVRlcVRsMCw1NiYlMW1mZUlvKk49QW9AUlU0V21ybTdwREY9Q3ouYzJMOnJxeEtUbVkuTC9LZUBjNDVWcUtZfD5oWTc5L2dRbjs1aVVaPlFpS2lhTiFRKWRrQjAlTWxrSDg3UCRFOjFM'@;
put 'aTFZPVk2T2dQNkJ4c29EaXMmKjlGQmssZGJUOT8xfHQzIishIXFOX2hgUDZCezs1Qyhdd0xlTCgiQiIjO05mYzI3NWF3dm9sYCRHKF9sYCRqcyxCUzw0Vk8kSTMuK2ReYWw6MWAjfkA7cjcxQn5CfnwsdjA0SShaW0s2NTduPTM7YiUmfCQ4RipRNzljaD9aKGlBMVdaL1pHZFs1QE1hLzdyTXFX'@;
put 'aWlONGZONnMsITJoO0pLRl06eXVZMWMpcHZlJmRRTWkhOCFnWWkyempsMDBPSllwajgsUXgpUlJ6Vjg7JU15fFMqXnIsMjo1QDYvMzhodzFRaFI5QEVXYSFZOGtLQDpxYEpJdDkrYUJ+JSM9NlRJRUlFNGBeaFJ0IyEqVH5nO3pmQTFZKnc+UmAjUmpDbjA5LH5PR1I5RSRPVDJ2K0lBQnRnYkFB'@;
put 'R0g2V0h6RU1wWUJHMVAxMSFBSCJLQXtIZyFONXAsaWRvKyRJQUdBQUFBQUFBQUFBLDsvZCNYOF4wJlUuIU5Qay9TLmRrT21zL2x0MlFGVVJtPlpVcj8wMXplcFMyUm9iMVs+MHEjVGV0OixlPFhLPXZvN1VAJDtnNjtkfXIhVCFXfn54MiUvJXFDYyhyXn54TG16XiFhQlRMRSYkMXdOa1U7SGRx'@;
put 'OlRWN0IzT1JtR1hGKiglZ1FiP1NAdTlhTWpsM1dNeW13LkVZKGZtMWdPUXVTZmhUITdDenpCaXdZPHdKM15gKz5LcklHJGojRnxoIkZxLzk1VjoudERhNzRFOmcvUT8zPEMkfklGUldrNWFgYGxBNX1QQzwhdiFMXl1CP251bjhjPC57enx5NCs1Onk4ZGF1VWBPSSVfamcqbHB4K2hJRE0/aSt2'@;
put 'eE07YV9AW1o8PDdhdTByVSpMRH43N0I1OUR3NShGeiNwJX1rKm4jNVJIYDxFUzUobX42MHJmREMpYXhRN0l7e1hiIWQqZGNIZiwyQFhtKEdqe08jTDptOFtVWTFlPElJdnxFI2Y5Uzg9RWJxU190Uy9ERypYXjZuajAqSSIqfFo9KmhjcWI7UEtmQWZxO2FhJHpgSnBsSWBONXk4OkdedEZwR3FX'@;
put 'MHt4VTc2V3s1LGZodVRgZTMuUSlufFlhKmJyJUA0ezhiaTlRXyspVFEmMXAsSX5sVjRobn5maSZkbFdacUFXKzxbX2ZKVllbSWojaGF1ZzsmMHsrWGhgXnRiZX5KRX05KmJve0s9eXEzNUA9PHFEZys3KVNMQGFWPVkqZnVifCpSW2JzbV5oT19LWmpSeVEwYn5tcSlCdWlsYVJCZFpQdD19fHlE'@;
put 'R357WiZqXlI/ZGQ6JX5oT1BJM3AreVcqZGMlYnB2ITAxQkpfPVteU3dMbmZhcURdQWdjRTckL0h8Z01DOHpkPkl2byYuTGtbQk8xeFtkenNeaDZpMmJWe2pbRE9QNiVgXnJ5KV9UX1g7dXssN1JSPG90W2o9OHRFbmhaaFYweD8yPTZXdH12Tig6X3N6eUdxJThbSXMhfF1wZmNLUnxdWTg0Wig5'@;
put 'bkFJSn4jbElCe0ppcEo+N18zQyRhazMmIy4pemFsTVhZZUs2e3pIdEl9M0cjR1ZOOV8hTUhzUEtLL1UlfFN5K1tNKCI0TWN0Z3JKSS9mXlJ0V1tZTjM1ZHloKmpdPVtrZWhVUENueWE4fUw0Q2EiNj17JX45fEJmU1c4V0BrbW1BclI8KFssInBQUGg2SCguR3Q5JT03M1tkYTd9bX5LRVRCVG9J'@;
put 'JV9SITp9c206cEZGdUI3cVNLZUxHcGNsQS4sNiJ3Sk1iSSJBSWQxZVckV1k5YX42YFlYU3xBRGAjaWZAW3ZjdE50dS9qPXE3IXVVTWJjaXdDfjNPYilMJFtKaWJaMHJ3UWB+fSM6T3A/KjNfc2ZuKDkmMUA3TmNQL2xafW41dkx3aTk9ak5dWDVrWDhRTzJjJXhlaz46KVYidUNdJl5geUx2Jiom'@;
put 'XTMxZi9VXmYzcWJ4eUgyVz9Bez8oc04xNEBqJiNWZlpYd2xGdDlqMmFHXzUoZE8vaDpsSmZZPSJhYiViN2gvM0xtQHM3SXc2LkhoKElgVE0oUGtUW31ROUU5NGgzT08jKG1ySj9mdk1XfUVDZG8jMjlzU3ZQSjFUS0ovfE5NZFFWViI7R35zYVpPNEsyaGxQRyJyVVhVPiQsM3F4U2I7Zjh6RyVq'@;
put 'MixXWzcoPl4xeTVFdF9pPzlBazgqQURzVWl1QCM9NVJYT3kkfHJpQjdocjtNdGpXNmFITCpEOmlyRGhbImVjJn5UTDBhfm50fG9CTWwwOFZTOEJGaWJdby5Qb0QkbDVEKTZtQmZQNCorN3VSUmd+KTNxajBCI0BYLkgyfnY1V052dEJve2diKkFZLG0pel4vfmVyMkpvIiVKIXguLD4lQCRzcVNr'@;
put 'OyRjTHJONipWJlUudyRAZWtPeCYkRTouTHN2MWYhNEJLSEkzVlBeTX5kOD5jdU1DUG9uR25dcH0ofTxJaHxNWTc3P0hbQ2M3I28vS092Qkt+LGFKPTlqPklkZ0ExWD5tIm1rRkIhOjJgc3J7Pk1IIzxHVE0+MUckfEI1U0gvbSE8UjFjSz5xVHV6eD0xJlNefmtpfWh3PSl5YnBCUkx3P0xxSiZP'@;
put 'LnopY0I9NFhDVyFyYT53InApXj9EZ0w1IUM3dTx6ZCg3OkN1YDFyY3xFZF9zLEB4eGE2TnBtZkMrdWUwXmFVISQ4TXc0XkVweDdeNDRUJSRXZ05UIytdanB9W21rfWk0USM8WUV9Wjt8d31jaG5xQ2F9SmVsfS5rfWtyTjxhQ1JTUihKPWc4Ry81ImxhYlJjX3Q4ISUzTmw0RDBPeEprQ01ZW0JF'@;
put 'LysuIUY9Z2tSdVcyPS5GezJQPV92YkRYNkVNIWg/TWEuODFRXlk3c05jWVQmR0clJTMpRDBKSz5rMFA0RmcqYj8zc0gvJk9ndTlAK0VffTFFTHkkMCV7YF9DVGE4WXZudDxTY3Y3QHVAdGxnSyp3RnJOQyMkOmQjMXkkSSMsTTRDM0Q2eyxiWSgvXSJpTHEqaCwvYURMYHhTY0loKUtUTFFibHA0'@;
put 'ZlZHRE9HI0JSaVUqbTF9azRxZUpkNFhddnFEd0EwbGtEO0cqKG04U1d5cThBfWVoJmMoRSQkT0NZNGdIc2I5aFFZODNeb0R9bTpqb1hJNztRcjF1JEZ8JGJgb0wha2p4Lj0/X0dnLlQhKm5YOX1VSStPR0VYJTEsTDBgKDolXVtUMWlDaEY3dUU2ait9blIrQlVeW0VPYXtbU2VhaC4+QSVDPzFU'@;
put 'Y3U4OzNzU2YrVTlkciVmJSFoQ1ZpW31mZi5VOlM6N3hvT3hQYTJlL3A6REU2Kno/SERaLmwmK3MqMHBuSSgrZkw8bllfKWZHMG59bDRDPSxmRyFZW1lWZXpoe301ZH5HIT4oKkhbTnY0WSg1LzEsYSMhP3JkbSJrYkE7ejtkby9VM1coTWVzM2VsPTJ1UjxpYyFAQWdUVSh8elV4QCJwK21mRUU/'@;
put 'bkBPeWZCREFKOSR+MThxT2s1UDtUcDB2OVlESHtMS2FUTXxhVkw0UDIzRzY6JiMlSWQwVzZCIUM9TjlEamV0WXVgbUwhVS91O009VVA2Xkd5YTxzRW1ffUdSdUNzZ3VkezFYQnwrMSp9WUpJIjRrbSVqSnlWfC9sRHxmZnhPcn4/fipUKSx3NUxrczBaKTNSZSE9YEglYVFvTUd0KWk0IyFLRX1t'@;
put 'dGdjIWZnWllZPkxJT3V0UkpaZmErJSUyX119V29XLzhqWWJaL1dGJG55TVFffiZlMHFxd2o2XmNIZS81d0tMN30pPz05bChkNSNMRmF2YCU/byNlZGZrZlB4IWZ0V0VLKj0jP04qWjIsMH5ffXRNOGs6dXFbbl8/bHpkUnpYU2MjMmNhMSFIT0pBVS9pW01wSHYlSEJkfD8zZ3d9KE5GUXsjOzNR'@;
put 'Y156dV0kLk9bY3VOMlgzbU12Rz9pRz4vRmFSdCZDLiYxSktvN15tQ11iNk0iI014SzxwVDhyQlEre1B8RH08K2xqR0BYb30kbEIjSGNJRHQxQiY5PXgmVkl9LjUrI3xFbCtxMCpjOF9afH1JclhdQlllenQhTldpQnMxJT1+PHwhKn1JJillI2A7PiRvIk0qcmxMX0N7TklWbXIkdDFVbTt+WlQl'@;
put 'dyEobUhoPnE4PT5CJixHSyU6OCo8PXl8MTAvT0VWWlVIRGElS3Q+Mmc4fU17WnBKaSZ6SmNBMixmT3BEUCRWT1pNWEg2bWBPX3FLMXgveVV2ZikrRmJmTmF1cF81OmxTbDRAK2R8NyFHXilIOXFqPCgkViU3ZyQkOkA1O3RAPXh0QmlYQkBmNW9leU9GX2FoQCJLNnJqS21JKnZoTisqTWR+Jn5U'@;
put 'W0VLJS85Lzx6OE54YWVfamw2d1gkQmxRfjdjYzBDOWd0JVU0NkNAXWpRc2Mialc4PUU3LmdmST9PJlM+bWJKNyovcko6RFg4XyQoRGMpY2QmR1lFImo7aHdvVSsxfHhZL3MkIWlaVjcoYW4qMDloP1N4fn4sKFtdVz9Rfmh5TTNCJUlqSTsoQ3JYXUQlTz4yQW18NC83YFB8RH0wLCYhZTREY21L'@;
put 'JiEyWm0hYXs/OWMra1Y+ezlaQWpuNk9tbm8ldW5kSyI2fHIoYTkpNF93eCFKNFovSVB3ekcsRUkxfXNxeUEvIzprfUVZbmd3dXc1UXg3cmc0P1AwOVFAdkwzd1R0aFNVOF9tVCFzMnl6c3gma3NKcmVnW3k2Smo1PSVgVFovSVh2bkwlZix2al8kOSJxWWlEQGQ6PF9gTW55O0lZPihKKGkrZEd0'@;
put 'WF5idjEvaER5XjlmOCtvNHpSe15DSS9xNSxrIW5GbCojWU56Wlp7Q3chQDBaOE9UZzw5IzNDfXlnemA1Lk0kUDlwZkpMNn5+dn4ze0xLWTUoa2owe1hfTU0rOngoZlN2MzI6YkcucGxQe11oRTQySiJnO2xZPnQ1OCRbSHptYEp5VTZxbi4lcStzeDdYTF8oPWBiczBybjJtQElLPD4qKSNjVWw1'@;
put 'eypUSTxAeEB6cSZCfkJzJkZKZT8qfkMlRXk5WG5ofD9XaCZ8TGx0Qz9Pcys6MV08P2JGRWE4fmBRVCZxKnxqPH13PFBbITlaX09fcFdJPENQTmRzWD82WUpDcSZefVJ7cSMuNHZDQHZ2bE9TOH4wVjNLLFllMHtbZ3EzaHlBUz8+dmBTP3k5Y1Q3MFQqJWciaiNZW2lXTDJ1TU19UXZ1bitSTCN0'@;
put 'bWl5QypwWyoyOkVtL29JYTNXVEZ4Rj89e3JsdGhlbzlIejZ0ZUokJT1NKFFDWVI1cV4lXlE1ISk+PShnS35SfHpDayRbWl5iTXUyWEEsbDU7JE0mJEtmInxJS1VUQSEyKGM4fV84ZT5PXn5DZzkoZmhWanpDV01vLnR+LGYwOWNOaGRjVXwsMEpPRllzY3RhZCQjPG5kYH1ASVIkP3ghazEkUlRw'@;
put 'WileVUdrP1ZGQXV8TGtadGwjS1kkUFNoaFNFYV8sMVJDTkhjakpZMkI0RVMxWEcjL3JsR2EoalttRXBjSzVzZ2RmWiEjNCo5XXxqOihVXSQ9R1ZMSE0jWjBEPm9hKXUlYVB6TyQvbj08V0pQQiwwY35lSyxAJG5dOTl8KF51WUc3ZzNXOn1GNm1gemJ4L0trUnQzQGdvNUJJbyMwJWxIbTltMTJn'@;
put 'WmVmaDIwP2UibTdMP1l+VzB3fSlUSnErVWFgM08vakE9ZTgzfV1KIytUZXdQNU1zYjJvTC9JOkVRJFdyN3Z6WH0uO3hoc0lZJlR7elBbdSo8KiVZKyluWFQqLkVjPz4uQWEsaztmPGZXP0hLcWBEIXV6JW5LO1UufE1vW1FuRDVyQ0R9LkRAYHZ8bWQ1Ijc1YGZBKkhbOnd0QmZjJGlRRHM4e0tk'@;
put 'NDhLUXREZTpRNjBNNlFacix3USFyXXhqK3RQPTFHUyguYm9zRFpANUYrenViJFIyTitUIm5iNEs8bTp7cUcqZzpKcFZ1eD9jJWk7PSUzdzNvdj1NUnhJdHxtJnB0YV1mcDd0TGA0el1fKkRaa2I/a3pCWTYvMExJdFVHISpeIU81OmIscHlzfUlbMVBvYFBmc1cmTVRfaTFDRXpValJUZVY5SHw5'@;
put 'Q0M6aikkI3ZpJUcqRTRSYUFXP2F7RCRbQS9QdnN1I0QjaFoxYDR4WmB6bXtiX2pHcUx5SVsveHNmVG5JUWkhQ21+bnB7VTlrdiphUVFUcFAlQXQ2K2lNWEJzKVcuUkN1P35rNmlPXWdXQyRbPU05UHtmdyoxW00wMU1nJDxyRFA3RzdNfSZlMkhGVEtNTE43TjZrUHxATHdQZDtmTiJ6Wi5eUiFN'@;
put 'PyZ2aG5MXUV1JGlQTEIkTj5DdGRXeiMvR1RBQDxKKGIoKS5qJFU3dF9pem13N24qRG94UURhQmckSV5ga3YhWzd3ZyUvNDY8d0N5TXhzdW9rRn5oODJOaGVvdFJOUk59fWBjKHg7QDxfeEBOekksWHUje2E/Rkk8VEk6Z1IzTng0IzheTDlTb240Qz0+ZjdQeyZXKChXIjRbeGg/cG45KiM4KUpu'@;
put 'dVV9W2ppXjN5fnkwKmZYNnZHQC91QzNvWSEsYF1ua0xaTzM1SmpLdkowQnRlRWhHISY/emVOIjIpL0trSX1fcEs1ZSRuYnZaKndWVjlHbmoxP21mKXo9LHlYeCQ8MUlpKWZ8Y0JeWHJ+VS9rWE83VnosLkp+Sy9tQ31rcW99PG9UZyVYVGsjRzp7dThJfCQjJWlOSDZhM1ddW1g7M1J3dz1rJmd0'@;
put 'WixZe2Q+fmxgQU9YMmhUKztUcCR6cz5CPiMkWWZ9bjVrcXEpYHlTRT03VzhLNCU4P3hkVmNxOTkiJGFQVkpIU2EhaG5XfktxPTFJdDtXcThFUktFU1hyKFV6Pyg/LFA5RUc1dEpib2htfGY1Jj1NXTRwdExwaz9rJVMqRFhvbH5JWFhCdGVyRzlLOiU0I1QhaSVUWj5sK3pIeVQsR2chdHMpWz9l'@;
put 'aVVmRUZfNjwpI18xMThadmVBQlNjbW9dNk0/Zm4uQF1dNEB9bTI8JHdxdEdlaGBvIkZDbFRqVzI0SmYkNl5obHtrXyxebHU4XT46Oj9NZ2MlKlBTX0dEQXhmb011eypkWE1uWnxdVTU4UyVIbztRMis9cE5iSUh5e3F8L0JWWl18PWE3aSEqfF5lcGp3WFdzYi4xKV9YRX5mejFqWz0kQ15ial99'@;
put 'R0xiaEgxbGFtRk02U3EsakkrK0xkRCQkRChbbTlPTHQ8MSlWZTowTVNOaD88VSxjWCtPU0VZXzc8JWtDUTM3K0t0Kz5eSV5wI34ySERnezJoKmxoISlUMGlfQlYwQzBrbn5dNXVwNzpFQF0zKnQjcUd7eU5UU2xzOXI2WHZvXitbIWJoTyQuPHA2Sy9lXyh4e3lCK1pvIWtnZSEiMykwaFIlTGBr'@;
put 'SVBvb2xDczA8eWdtVzpzQ2JQVURDQl9aeFBWNW5mIWIhako6SCFAdF9dRTtsV2MhN0tFcHBaKV16NmBRN0V+LCksREw+OjJ4JD5vb2ZNUyZ1Pyt3M0pSeHFBKiFrd3d0bDsmcUdOS1VFUm1CRUsmanI2cm5AU1hscEhVPz44WjFCUHZhenZEJmZ8UGYrZmVyV3VMY1t0QW8pTW9yPEVqYWl+UCNo'@;
put 'Tk5SOn4hXU5oXy4/SFlOTWtUekIrNXdHbFc1UWJwUD1Ad2p3aUt0K3JYPUJIU0JRQklAJk4rbCgqNU0kTDd1PFQ5UCl9JmtVTjxWX3wibDIlc3xXW3AlN24qYV9dZ1AqbC9dJGoiN3VCPTpDb0JqMTMheTkpRHBXPnMuPmYpYzZVW2haX1VMXS5EUDRJcXNiaEQvSTVPYzxqXmMwJGl9OGNbOH55'@;
put 'WUh1bVsweGQ0UTVlN3oqP150QSxuW0RRekk2T0NPbE9GfnFXWXI/YUklUlBHRG5iUGk8VyFoNzYhdisxKEUsL1khRFcrXVtzK11mWCwkdzl8T1lfeXRyQH4+QSY6XmxLQ0p6YlphbUc/TG5CXjpleGhgQXosZHxMP3xBdEg3VkxlY0AkZmFybHIzVSklRlVMISovSHU9YEhtP01bOEhNMGBdfD5u'@;
put 'X2VRX2NgV1h0QkQyM1A5W3BDNURGcTluSDhIOiU4QGQrQjhiQkU0Sk1HKVVGT3FdJUF2JXZdUDdQenluZyJLKDhOVDdZTD5XayNIWiZaSH1WN1FlK21MVFQhMyl3WEZaZiJFb2d3I3xkO3guLj9FUF9bfUpxTkg8VEFpaTRYOjxFfUpUIlNtektBTVV0Ym5PYk1NLmlQLnlzd2NQajtdPyM8bnl0'@;
put 'O0A7Y3cvS1F9MER+cyE9aDIkRSZdKE5raCROOD52SCxifVEjM1FHQGVldUd2TmljKnNrfH5BMyRoUmx6Y2xKOS9yM3EjZXg3KFcsIVdLRkVlNnk5Rl5BKFUxP3VTQSR9ITdRO24hQ016UEs0JkJtY1V3LDVPSiJtQGpfdk1oIl55VHF4OjFOaXdeZV5oPjgoQU9IalFMV2Q0TW9Vbkp1bmE/azA3'@;
put 'I3BQZ1MuKWc2XzZrQWo1bTFiLm5YMmRjQHYvei59KEV4aVB1JnBYJVR6SSgqPFZuU3QqOHE1bSZLQFJAdFskfnxUcCtlRVUrfEEmPl12aDxXRzlXYjt7Nlc0bEl3YHVSbGtrc0R7Wn07cXNrKjx1UHBLfEU0MGxpazZnSXxdb359LDJecT5XfDFLRjg/Slh0UGdzUjliYkhkUnZAKzwuZW86X1t0'@;
put 'RkIhUzNYXXUuO2xoaHkmZSJjYWUiR01uWWAiNFFddihrXTFoaGVZOlVVL0dXTk8/WmMyUkBJMzchZWpeQEgxdSlgfVdlQChmNW9KLGRuKSg3cnRDPj05KFR8Y24hS0A6d3prITdwZ0xmciF4KXF3X3Y5LD9tX3RITDVSbTBFOGU0bUhTQ28pKjUvWFJhbVEiM21aYyNwQjBHWGttP3p7cFZ1JVJ6'@;
put 'SDtgd1k7PXtUMVQvXUdSVCFTWndZbWYlOTlud190T3U0fkt1bjVuXVdOVVRlTTZXXigzLEciMUVuP0tgXytbPUQ9dkk2RnV3KHtDSGA8InQhezZ6TE0jTlFobHBEUWh4TVcpJlouXUI1bmp1TGI2RkhBTXlSfm02QnhpX2Iwb25dYXVrRVtmNVRaRnB4MWYuLHA0W1A+dTNkelJATng8I0VwaGlV'@;
put 'SHM1WG5rXVVKcipsNG5RaCRHVXRzTT5wI1FPcn5TQitDMDNAdUN8QXVeUmdgUy5DITphREJSQWFxbikjXiUjVUFeblJVdT5sZjg4RVlxVUFObHVQWn5keEddQyl5M3JoU24mdlMqPHBCbHt7L1ptI013UC9eXSNgKTNCTkBuRG9bVkZlakRXenhGWFNWUiNfOURdNnghNzhEOX5tXnI/OV55JHBy'@;
put 'd0U1UHtCIi98TVtOSCtIIWs6dlFeOVZgaTk0Qk5SMz0ldW9eIlQjMSNQLmo0QH1WOVNpVWNkZEklZENSMyg0fXhlJTcsTzlVZF0+I2M4d0d9R2xeKTdgVyo+Mnl4WnwhUypRYlRSWih0TkNvd1RGMHJTc35SXWlZfjYuXigxPzRqNV0sNG80RlYyb15gKStSMEA4QVZGUTRvcSg/Yzl1KEk4NEc8'@;
put 'InBldG4/PEdOaVcxMmRjLmByTnciO2IrY3FiTzwrMj50KT5yVzpdeVZ5Zjo6WlkrVWomLn1iR2ojejI8WWNFej80WWo0Y0Zaa1YiUk49JiZTaTM4YGo2RSs6eSJaJW8hSDdsYjFKVn48SG88O31KUXlYS2RRJjc6VnZmUnZQX21IPkM2X2Q8VX0/fnZtTyFjMERYLi84Q3ZwMVhPOXdmcEkkbkRT'@;
put 'cTxBJkghNDBnJUhjcCZyPzsjUnZkUTpHKnche3pGMHpYTDQiP2ZoaTVYOEkvOztOJEVLeyolJilgaWVCSDFkOzZqPltaVSlJQndJKiMjKlRrJTNqKjdWKmxOMUFTI3k1fWc/K3UiaU1WJmo9eGU0QDs+ZFk6amw4VCV4KmdgaGRnciFiITFCPjojfjljRGRKdTFlJkVgZU1obzlAWDhDWD5tRmtW'@;
put 'ej0vNEpRYnkyKnVvfHV9UVpeaUpHXldkaSxFKSksaU9tPkFOQkJDa1FvfEBeP0hTfjtbQ1YqOGo/cDQ4aD4+RVt7NlE0UjMmeExGYUpPfntxdW5rJDFGVyVKfUs1eyNwaj9YWXBoRnN4YHJwTlEuYVlObTVfSS9jUkQwLmI/SDxBai8zOnAhOV9EX09+Q0IxdmlodiFaUWtpNFF8dHFAO3JkYHl3'@;
put 'ZSxOdT85eWYsUDJxeSs7MjtRdlkoQVhYVUUwd0tkU2E8RTJZcyE5bT1rODZFMT8pQy5TJHs4aWpdbnNqWltqQWokKVZJN11nKVA5MElKTjc6fG1tLj5HcWF1en1dUk4rIUFuTG9hIXIqP2UvZDtPVSI0YFRidUE3Vl9TKnAmX0w0QkQocXNPanxvOU9QfFtYV3loUWZvJD0veyoxQkJaNXBdIUs+'@;
put 'I1U1eH5KZUZINnp+NDspcSNbZTVzSHF1dkZuNUt9OWs+c3ZJMVUwXWRhVER2KC40OVFiY1FucTRZX0QmS0ReVjhNXS56MzhGYyR5KVA6UjYqVnJJXUVeSkk3aSpCLm04dXhKeGRlJHFhX3p3TylSKUghS1JMZHd5LFB1UVZXPCRYQlE2QmFPQmJ3ZFdXRHU9fmRzbFN+X3VHTk58MWBCW2dTczpN'@;
put 'PXNXXk5xL3QwK2JZLzlJPkJXLltdYX5dTjlGVEhHV2N1T3UyNylzSmFtdUxEdm0hYyo1bzs/Mmx0cC9BV1JFTyNyNmhwVVErcn1LYUpXPnczSHI7cypXRixtbjQ+KUhTUkJQZDVeLjZRa3FgeWl7dT9rPHdXe242Mil5ZEdlMyhLK2pzK3xyKkpxaSUraSJkdiw9SkJgcFU8QzolN0o0NFVsLExg'@;
put 'Ujgvc2FofGcseGs/LyVgKEF6WkhQI242dzlORy92KlhoczFJRDpAZ1dCU05yVC56bmYvVEpeWWovTno2KTNCRlFpbjc5X3EsODU2Zj0oe15CXnh6UDJaSihUNng1WTJwUWliOChJcD5RRzp9RlRzdTAxdCp4ZDRtP3B7Jm9JdXg0UEVUMEtfK35BeWkkelRFQ2BDaDZFTCJHcXxZLz5LK2dJIVFN'@;
put 'P2wrWiQ/LnRbfH5yMUlQQyZHeVU3ej5tem12Ym80QnJPdnEqfXk9Wileem1tR1tyaUFST25gaENSKE1QN3FkfnIoWy5vRm8+KCped0VmTik2U0Elci48a1luRkJedkM0PXJ0LnZZUkV7Z3c0eWZfSV5YQjtGO0FacmpSN1tkeD96PHl3bjdtezNHI1VHK0o7fDdMcTozVU9fK21iN3AqeSNpKDBX'@;
put 'QDA+TWIkJUtOaU46fHpxeS92Mis7RCYxI34lSE0zIiF3LjkwLGY7PlJyUVdVMVhETmFsYDMyaXQoUU5Fe357OTNNaUg0bT12Yno7V3kvbWk8eE51LFN+NTglVilNfXR0bThrY0IvXkF4eUxxXU9MXntbaXcuTEp8Jk5YT0RTYW9fZ2NUX1Nsa2h6Sjk5fDdCY0VmSEw6bDtuJjs2NzslO2N8fjYh'@;
put 'bj1LdXg/KEI1XXhYWns7LnYkbSZDOT9KPyxeQnVkQG0rN2N6OUhMPm1GZXhJXnoiSjdSajRZQTRkK1IrQk45Uz50ckBDRWRUZl4pbUteZTQzOCV5SjpMejZmJUohXWkkTDdQO01ROV02Wi8hdzpmcks6TD5dT0VhVl15VV43IS9kQ35oODdNQXkjVnJBNSNDRjhHV0JrKmhFZT5WSltPRHpJXz87'@;
put 'I28kTi80aDlnLiZLIilrZ1Zncz1OTE9lR18jN1cjbGhxQUdxaWprSywpRV8iaSxoRzZFczo3bj4uKjVtbilwRyIuWjdHSmU5WVgpJTcsW05eKFdpdD17bStZY0JLcWV5cTxkemYqQnNmISt0L0tLLlp+cVl9MDx1YXR2ZHdEdzNja0g3IjM2M3M1JjZbcTtGXlkmJCZhIz5qTn1adGg3SithWCpa'@;
put 'YnhNIllDV24oWGFlKz43aGptSGRDKyszXVl4M1oyQlZuRWpidE84bzduYWAlaTFqSUdbREtLcmxkZkJPeEtSKUcrdTU6X3RMOEY/TWd8YylxYC5MQ0U6Jj5CU1l7Z1dLcEBjaiE4YXpvKG1WRWVbXVZCM29IZ08jcFZ4MmNEdCFTNmkralQxaUhgV3xvRkxxVyFXRzkqR0NgMjJxY0loeGlSdCV5'@;
put 'VmhbWCpYSyIsXz9iPHxUL20me29Rd2h+NHltQzl6YSlgQ3hEc1ArWUZ8LG55VjYiMmtxOjo3MXJYVmBfW2chMmtsd0VQX0FdbEdVfTlAWTRqM11Tc0ldVXtILn1MT3JbI1RYRUQzIjM/T2Rjfk5EMFJmNnhwfk13NTY0KUsuN0w4Ll9iUHQ6MiklMXN2SjRzbzBYVzlLYiFFc0IjYmMwZ04sKyhr'@;
put 'IVsuVE1acXksdlBvLlgsQS97WkJzXzkyYGs2VzF3TnlLMlhLbE09bXEvVHg6dkV2LnwjXm4xblMkclJoMlViXjBddGpWWGFsOnhdezlUbShhMkM+PWdYUDwzOD5RfVJjfHI6MSVuciltUFFLX3F3JUFlYGEpPDkvJnR3UVlMZjNsR3IiQSVRWW5MKXt7K2F4cG5RWERNYytmNjN3b0h2IUtwNjok'@;
put 'ZUtYZyttRSlrWTYxZWBgeSlvZFo/ZyQyZmVGK3ptY1leTzN1TUxvODtuM3g4dVpiPWMjekVicVFVczV4WXUuQlVzUC4rdmJHaTVufXk1TTlIXTQ6XTl3QHBqPmZmPy5qPil3LFJodylDU3B5Zk9SL1VKbCpPcjRXPU97Pk9HYF1pR21+JC54QCw/MEBrSSlVSnopOHRsdUNPSHtSdilaM2UzK2t4'@;
put 'bnpJND5KendYe1dgQixeSnJbfVMyNl9eTiNgVSFiaSQ6LDwyazNIRDRLUCU8bWkoKHpEMFE/Zkp1NkY2ZEwmTkgrNzpYYTpxIVlCRS4rK353ZjxAdGVLXjtvMzdiQC9IV19XUVVFM1Bvck18KihCeFVYR1dYJXNfaXVJfTxFfk4wU3c2dExEXyI6RFcuaT9LNnhiWGMySSN5T3gqTGpUfS5CSU1z'@;
put 'dzpYPGl8KkM9Jj0yfEp7RXIofHhIJXklelckPWsuT3pNVXpkd3w1aj57Rzx1MSFRUDJjMn5Kb1NLeG0vNlt6Zj99dVNZNGFgZVFVc0J2dS42WX1kX1RabWBaeGJXMlFLLC5BSUl1ezZtKn1jJmF7SVBuRHs9QyFfQUJPVnlOM1h+M3kwI3k1OlZ0Qitia3l2fT9+QT5+NHhtfjt6IXR9OlFOQ3Y9'@;
put 'ISoxLmZHPiU+eEttXzh1LEhxKno0YT1qXjFwPDh6ak5QWTFDT2NTM1A2JmF9UGx9PF06MCVwVEBDcF5MOT5XeHF3V0FRZnQoRHdueXNYPzxYNC9iQGVKUjwmaFE0QlBTPUBHbjtVLyguTXcld2luUjcwR3tVb243d0NZRWE/O2xiXSksZ213OW59MSN8OWxxZX43L2F4VS9QfT5jVFoqImI0aj1t'@;
put 'WjNlfi9FNzxKU2QhYjZZSiUodFZAaDd6YlNKL1RIQC41flBqOkNpIjY1MFsuYVJoRSU/Wl5odEYoa2l7aVVSNnAlXVJzKndsZChvbVtwMyVVMHc+YWxKMF8qLjZXMzZENSp1OGRbaWU5bEldJGpBPXFbZ2clMXdoXWpRPzsjP2RAXzY4dEtOcDAkaFlmUHFRMTAlWjtyeHJmdV1zTXpCfCQrekNL'@;
put 'WHk2bUAhOWpIJH1JQ29UM3osTWJJNWBFclc0aG9mUzxjVnBaZi9QeT9rO1BVM0ZdU3VJbkBVNnw3TVk7ano2M0wuKVUyLEplLFlQJU9XaW59IWFVaXp8QERUTltIZE1qWyVvWTQxSTArOkRvajImV3J8I1VXREA4NVRRO0k2Q3N1Kiw5dDdBalFQbCgwUjokNTxHTk5ldChUL0poK2dARWcoVH0v'@;
put 'b1RycSlbYiJGdWZFMz14Z1tQLiUlLDtNVUc3fipYPVE+I0Bfb1I3c185JiVUMDFgX3docSJLVDdSdElJL30ueEl2JX5ocEt9QW9zWj12WCgsb0ZMTlkoXmc7Kix2Q2l9LG5pbX1BRXZOU1tTUjlkKS9LIWNXfD4xKkAiOjIhYndAeHF0djxmdFBUNjJlMUlgWT5UOFE4P2ZJV0dnWWFEW3ZLIV1l'@;
put 'WkJWLkhBeHcqVl8hcTV6ZkNWKytVM1tad3xYVzRfQXM9TW5ZfTVSKnp5YnNWZDREOS49ODlXamBbSjJAW2xdTUQve2JPeFYoQyVifUxfQ3ZiVFhOZk49UHxRam51eXg7R2ttOC8oOm1HISFOaChhJTJLKGN0LHhXJGF1IWdfWC9efUU0RyJnIyYiX1MwaF5XNjU1NUxOOU8pJmhCK2BkYyxybnBP'@;
put 'KCs/Jih7b2Jac1BATDsyfEU0RVUhQyVRdH0wZEVtXn1XSGBkMjBTQnhnJSopdXBNZGZFUD04cl5EVzVuKV4rWFFCSWlSNkIiUWQpb09sOXpXak9jbT5VSHR2V0J6Z31tPWloTGZ+dzFgXjhfTHohbl56YzpXaUNhbnpiP2xZbms+I2BiUXEjfCg7Yko5QGBWTDtMdyRLSkIsSmc2WzRZfmtTaW8q'@;
put 'TXpmXz5dM1lyJHBRbmlLKz5FPik9IUlBYzlSaW9DYC5Yby83WyZLLGU4KlhEdCRhTHpQQDJwOjY/d3BKJXY8cjRHUipkNmQ6LndlYDRhYzJNVU98Q0xTPSVMNkhkSFJ8SW42VlFhSldIdUwpT3Y8ND9seVpqOylebFplPmMiIT97MCMpaT8pcSFKNChmOSVNeTlHS2Mpe1kyR2FaTXRSVGhgOnVz'@;
put 'bER9V2xFLz5EN3orOjA/SW5MZnNmX2UyfC5YJSxSYygpQjRYU2tsNnlqPGNaP3I/WlF5YmkjPTFFND9wOXp8fjs7QVZOdD5PVkRmTz5qYlcyKktdaEZIJXErOmN7d1YqT0g6NywrS1J6JXhBXVMoPHk/QzI8eHo0fDZTdFhHdmx5V0hYS1UqX2YlcmQpKFNQUCwoNC9NJHxjQnZJPzR7K2MmZmk2'@;
put 'bm05cCVPd1NPZ3hvZ009cj9qdzUvJCo1KTZrTCR2MEJoei9gQFslaHN8NFdSWlRDTiJHfk1QVkp+WEoyVmdCbzBjdGxWKC5QWjxzOH1AO3dXal1yKyFDeVM2aFdKenchJlVzaHlmfXt8LGY3YkpYVl92VEJCbCRIXW1MS2I/P0tLJFRgJjVFIXI5c0w+LE13Uip3QUQvJkBjLFEuITs/MDlzUnBj'@;
put 'UyZePXIvbjJ8L0NGLjJ5fV9bNyU+cE4jOT03b0lkK1RRbjNWWytyQXBCWUhNX309akxdKXt0Py9fcVpyJSJbcjJ1KGJgeGREfTU5RElhNF57R08ie29KdWJneXckSnhIVyRDLGx3NGBdSnRZKEx5a319IWVaZTFtPHI1cyxfYD58K3kiVj43TDVfJDtpUzlXKl5pOFJeODJlUHRyd0U8eU9nblM+'@;
put 'SHI8U3E4S2osOHQlNWlwKSRNdVJMVEcpb3xbZHFda0JPTDFvdGZuQ2gkb0tUNFRrWEs6ZXNhUzRHS1hISWAqOXpxbWVVLEciWzVrPnNtWEVQdTVLQlpkSFFFKGl6I1ciRnNrZissMEdWRl1kMitvVTJ0Kjcxfm1+TzZ+T14iTSxAb3Budz9vOmFiQGY2b15iTHp6a3taP3ZmLFtbWTBNVCk4bCJh'@;
put 'JkBMVXo8NVddQlhaUk8zL28uOGkzNWIkUl8jYyZuV3NyT25dekQpNTJbbXd9MmJ1PHkmPF1XRFRLWXQuRTZlZ2ElYyxKJX5KL2ZSbWpVfjk5Y2RHVytOcHRyaHBVZyJ+fSxqMytxOWZ9RFY3TkIvMX58V1AxRWF2Zzw6WE9feztIOnYrPTlFcThKSis5Vjp9WFpsMjFvSU5CSk1ZRk1DQVUieno3'@;
put 'OTtyNWQyUXhMK1JaeSpDTXp6fGBBXXF0ay43eVE3XiNbWztQUWw0NUkobChHYWlMQ3RVPCx5cU5NNjU2Xl10R1pQcUgyVzNjNCJ8fUokY256JixlTlQlP3RlfiJxazZqQ2svdmoqR31tU3ZiUD4veVZdc2VYTGx8dWRmI2w5R1dfRXpSZk9qT2gqeTAxO3sxSl1XNyZyUHkxLjgrbmNHSjZKU3Y0'@;
put 'P1p7fixxVzIoMF1uRD0+P0pJKngvb15fWDZ8a21LXTh7JTZ0cUN9WUJIbHBwbkh4eHlpdGs8fGtaRC5LLHJkek5qU097QHtgLF4uT2JwallnOVBYbmtTU0Jmbm8vVWJ1KEsmPU5vPHlJQjd8L0tHVnVaImI4bShRejVWV0BKfHR6XzdGaWRAN1ZBKWRzfXVWZW0mMmtaNz5gRDd0M1p9Jl9aXXgm'@;
put 'fG09dTJfMk5IVTdCRmNqQ3xYJSh6T2lAbl4ucFB9MnExXSl8dkB1c2VvTG5GezJET29uTmMlWjg1TG5ZaiZpKXZ4TmZYWiNLa3NiIiFvM0I2YVpZMDJTYk9OTnJdNFRiNVUkOFQ2YHh6R0tlZVZpbH0vTHF2UDplPHpbT2M8fEx9Szx6WUF9d1daXWRGR3VWezU0T3xrQDhIUU9TZG8uajlXPmI+'@;
put 'Oi4vaGFKO2BsaU5jNiRjeUVjfkU4SVl2OkFLfVFgZFEuP2d2K1RFb3E7dVVVUDw9L1lqajMpemRpel4jRVV0Y2koeUlGME5DO0osYF4qYWAxNE4/T3NdPmg5eFFWfDAzejRWKSFISzZeRm05VX51Z0FGVW5Cdik+KCFOOkQyWmBpZFNbJGUyWmBOejkqNmVuKCJxJXBRcjxIWC5MRyZ3XThjZTNy'@;
put 'SDVMUTxqTU0zT084MWZaRiF0VC5ydHAhfnRLZTcyam1aSnxCOC9HPnZ1dHBedTcjKChffng1Piskc3RAbyhuQy5TUWNAPUVkeWNId0AvXWY5T1NFZ3tDT2RMcCF4bnR8O2BdTiw8V3FaT3UjT0BHeCtESzYsZzpudXYlTE51QTQmW0k3ZnRlNzBdUXl3IyNJcyFRc1R4VHx7MCEyKE1UVVkyaSZZ'@;
put 'Qi8lLFU5NGN4IWs3c0Z5QW5pJExhcGUocnJeeXBtVC49NW9ucERUcit0WzomZHcreXAlW0xzZnUpenhZfHZrXSZOcSIpPUBrSU9bdHpFRkJwRz8ybWlqJEdPM2Q0VztVYGwkOiNqI1hnOHN7KnRdclBCSndXSyhkW3FqQmo9KitLK3V+IkIkPU5YVExVP3JZYF00Ok02MGY5TExWOiE8bUkjTylk'@;
put 'X1pOYXFJcm1bNFAiIVJKSjYzVnBwOykhNDNjW1NQTDV9Kk81TiEpb1F3KUpjU0RWTTA7PVE+M2kzaSMza1grXWRqUnIpZHxjez5XRGh4aDZWX19waCpkJDR2ZDApK2xGN3tZI2h3IyhTdS4wZU0hTERJIzhdcklaOktCPEcrQ1RRWTZMMGVSJSlgNEtZQ099VSlDKER4fXxUZU1xfF1CNVp1al5m'@;
put 'cnR1d1dzIWV4P1M/QEJOaGV2aXNXNDBIeXk9dyI/MEB4V3MiUz19bl95U2pVcCpGL1pyJCg1Q0F1WUFFfDVjM0d5eUtpfWpCVWMyUXpYaSxVdWx1PU1dWGshY0BjYCNCZGgsX2ZeayNPUEU/STc/bkAzMTdBMWo5d2kmWTFreGNQcnJmKXc/aDBCKUEucXo8cHhRfj5iYWt3Zm9XTnA2WyZVJCp3'@;
put 'fi9kMWAiN3g+Sy5UWkJ+R2RMRVJCS0dieStVI2xIZjE2NCh8WHVJVklTaUF0dGNLQVFvU1Y3KypYLjI8OzsmIkcyVnQpM113RytmejpAXmJ4YnVjY3AuYS5rL3lEdDprPmVEeChSPFtLUko8Ry4/Mnp6VUleVDVOQlBLbzNGVE51LjgpJClfSWwsTWp3aD1lYDksPWhpc09NMUl+OUs7WURkWmhQ'@;
put 'Qz9IQTM/O1l+WjxXNCtMbSIsLDciW0h7R1hbTzR6WkNsTWhhTUo2X0RPM1pZdGkhNz5kJihUayghUCQxKGskMSUvMlh3YHZMamBwZTliakc4e34udTN6OHAjJTpZejU1b3o7d1t0XmdkREl4ITNFTjRLdV18ek9GUz53ZWxXMEo1XW5MMmU0Y1ZHLmJSIyg/a1BCLkwqX1EiWHB0fCk+YHRZZjtr'@;
put 'YTtuc0swN2NEfDNCKFtkYk80NndVMjghdEpDdmBwZCYySUcvPz9SYUtSJmM3NnguOj0rNzgsfCw+W0w3fixhSFsoRnptQjw4aypWMk9MM2AvUWN9Xys3KW9NRHFgdm5CS1hWNSwlNTwvJnArZXdZQCY4TFM5Y3pWSko5d2hQYVQ3cW48SyNlOmV7PUx0QTVsZ2MzMSgjbXZDLDY1YyZ2K2ooey8j'@;
put 'NzZLTDhdMjBdLiJ7NT0pbSlIW2k1YGhmUFdNamFxfHVpemtAZ0s0OCUhM0s3bmR9JTx2Zkh1OVluQHM/YCtFdDElRHNGN2hNSX01cX1CVHglRmt7cU0pe0ghJGdBSzl+XnZoeEM0ak1qUy9xO3ErO2w2Rn1Pcyk2KSYlamZCNltiP2JDYns/bDlOT21VN1cqP1swdGJfOU1PPjZte1gzfU08R25t'@;
put 'M2h0UnAkRXNrTXAoJHB+V15VaDtLbXB4KW00c2o5aiJ7TSYxTy96K1YhS2RKRyh2UlYpP1JAZy5vNTdRTz5uLiwuKk5nWmkvZHQ0WCouQDg5fmk/YXNQOm1zPjBqRmBJZCpDMDZnKk5TTU0wdmksR3NpIkBvWERRREs9IS99WjF+fipDSTVeeihmKy5ASmopRHRGM1NaTCwzKT5NfVYkQSxDbnhw'@;
put 'UW1PPG5lO1FoVl9DWDBTS2V0MC5HL1BmTyNrTSkzXzY8YSJ4enp6T0cwbzU7RW9ZbUc1UEY1OFU+eW94Pnc3R3hMdX44YktMdUI6Zy57SWNuRVlvaGlAZiUjfDs5MGUqb0pDO1A0KHdYbFpVKjc5ejFISlhRSGovJStrWC5FPz8/K0MmNW5eXWk8LyJMRihEWUxpcEFzM006RWR1a2tyN0t4dFN+'@;
put 'UEQpJll6TXZzYW14VmNZNj1wR11SOVd4NzhhbTo3SlBmczFXe0crXlpwITJ7THFZVlo7TnhFOlY3VlJnTltFQVAuMTR4NTZLJGlhN1Fba314X2x2JkNEIlgycSJrQjRZRXxwRTpxI2pzSC94alFOVjJiez5+dV0/XnFfQk57fGFVbUN4MWpQeDhPK2pGKEhsRUBHJmJTZj5taCpMQUo8bVN4KSg1'@;
put 'RkxmeU5YSSI/VTlrRkJVKm5vaG9We3Y7di4+WmRZTXY9MFRlVloiKTM4MWpbZEdAV3x3LGdyW2laPEZUUCQreyhxLG88YFY+KTZlNG1qMTlWTF1JQnE+SD9DOmA5JVBFLihGJF8zaUEzZ3JoMjJZbzdJQCNjWWM2SC40M0ppIXdWQnkrZH5LcmkxOTx+XS59a34uTk0rLGp3XTxWU1ZDRn1WSTlU'@;
put 'RSVhWWFOMXpFOjhSPGUkczdkfDhmZFYoR0dPbUV4ZngqaHExKUh8OEN7Q15OMXBZcG4/UFA4V2ZQInlJY2YrNmBydWUxTyFgZjtrYU4zZm4iN1VTITopMj8mZUR9dVRvZjs9Sjk/PFMwJG5uQiVxO2w3d3VmInYyM2BvflQpfkk9WlZ0KWJKLGIlVl4wITRZXkZeQVcvZUdvTSNoUHltOStWdiJz'@;
put 'OVI4YmVGaTQxfVYiTjZmTUBuLl0ybEpsYGMrM2IrfipHdGEwRjUuSTYuLCVYTU50WHYjbHskKXxwZ3hdfWRKOz4+YT9QbikkPFhAImhmP2JIPkBpTTFYXXBMS1s0ZHw1dkBCcFBuPE9bTXFsTlQoWlh0NEg6ZDpGR0tdNkJbbWprfnZgNndmSiV8N0VkflBbOSxzL3lGYE8vPFI2NlQvT0VyPjlt'@;
put 'SUF5NklyY2FpWjNWRSVfYileXVlSRzxSN3h4NTNaZCshSHwsNTdtaU9VckljMXZPeioyQWJ8QVFuNX4lJV9wPFVbRV1IOGFgajBPWzhnaHNxdj0sIVZVTyt7eC5GP1gpNytYbTp7WiJZXTkwdTU8dXEyWVhrcSgzMzNZVSNuQnpQRHpIYXhzTHVjak1saDdAQSYkRiRJWUNleSNTXzEvV2hFTiMp'@;
put 'WHY9IkdyL28sS20+c25mMDFEK0RFWXl3UnM2al45ME4lXUl3XjkoPThxUSUuPis1L1R7cXclIVc0QHF3ImJePEtMPyxDR0ZqZTEhZVtGOF49elpOa0gubGVTT00+LCZPQ3tiTEZmbmtBZXBbR3JgLjhjLkQ6RyU5THRfZTNmdUByRkNTR29ub14vSFl8WHYxdjpfMXIjKDBIO1I8TFduayY/UlE0'@;
put 'OTAyPW5yY11qIl5FOGJqZC5TfGVjfSVgSXFCcTZTR2tjLFFpQW9lYm43T15EJCtMMmQkcDZKYFpwV1pIKUQodD54QmxlKCF1PFRFWElkMTopKD8hL1pxVXBNR0A9OlRUSHMwTmBnbTFdNDpDalhiSiRpPSE8eUguOVh+NlIzb0lMY3NlSz9IRzYrUlU6W1J+RD1WQTZmdGIvQGIyZWs5cUIuRl4l'@;
put 'dHBYYzo5K0NtUV94JWtAIU0rIWJuW1ZDV05nI0E0eCFJKSNSSF04fFJ8eTBaNXN8MXZPPilaaDQ3Xih2UDJlLCVMUUhXV3taNmx5fnpDRXE4QlZKcU1xdGA5R0I3PyQlfCx1YnsxLkxhdnxWQk1UP3AvallTVEE3S2ZPeDJdWHE+Yiw0PTBeKk8lRjhCaHxJajZeeWVgTyUhKHk8IlJkRWpJTGl2'@;
put 'b01kQEBHOjJqODpVbVVwQks0Mj83a3JacF93N3thQ2t+XUZQczBOMTs6bXBsbjFnPD1+bVhxMSQufDxrMkFrK2BBLH58cFowbGhlVn1XYS4qZiZTeTdrcXghNjpWZkNVSDlRd3QmVDJ+a058OyxZR1JHRFk7ZmBday92TyQ0O2VCbDdzdzdbQEteVTxYVVtbMlVSXigwfk1dcEZyXS52NkY2JUB6'@;
put 'XkYkKFV4Y1Fjdyo/dWFxZU5SX25+XUFQcWRaUm1pekZbLjdIfSxKOWNCRjJIZi9hKXVCbH5JZU93JjB1bThRMyh6V3tEQHkzXUpVbmRCZTBtT2BUMn1veyQ8Y3xBTyUyNlcmVk5HVSNmODxWYz0lK3IzWD8zZShMS2N9eU5KLD1gZVpjPF1uP0wjWHhKZDNPM1I/fFM2e1M5OFkvUTl7PDg+USF2'@;
put 'L1YzYGFYRV4mTjEpPFNpL3FyMT8pdzFbQ2FJWjQlbi5FL0A7TVJpMjMyN19DeXBeWnU6U2I/UHc0IUtgTTBTXz0hc2s0YVc7W0VxeyhbMCtXM29iaDxAWitKWVdwRF1BR3d6Tyh8XUZ4W0VAayFuZmV1PjVkd0QsdUtyVG1hayY4Tm9dXUArKDl7S2B1PkM3Q2dBciN5fXxJVDF7XiNEdl1sTyNi'@;
put 'JXQkSHl1XnlxaFt3cV82dDBEYSp2dE9yXmxqMl44OVc5antoRDI1MSpHWl1kUls9KXl2a2FVMEg6U1J3ND06T0x9VnV2TnlOUUlJVGAuMWk6LFd2YGBKNH0zRldTN2J3Ujw2JiU7elJ6YEtyeFhzaHAhRkQicGN3OEw7KEJ4NTNzWFpvSGB0RG9SM0g4LjBVSiE0eUpXUkN7cTM1Vk5HMXJiOkhO'@;
put 'YlVmXnFqLFUhQTJ5QW1jZVBUXWB0an1IYU9xVFAiT3NGKmVyfVhicSRGSytSPltEU0Q7KUBoWzFLJGZnWWE5czV1N190ai8yc2Fuc0pDaiFgTmJofT54UitUWX1iM1VsZWF5ZnpXNUQhb3hQNXNwVyxURDJISnRWaVJuejEmY1oyL2p9flZRQG5uJThpaT1tQ3NkaW1eeTh9e1ZlM2h2SEZvVWZ7'@;
put 'bzYhN3JGey8yUi5XeEVkOUw+QDVeQTBaWnNYXiFIdip3LmhodHZ9NmpfdHM/MC9KYD8rKilOQVdkWTVxSFdpSXJNVyY3eV5STkdCSkNkQWdRck12eSMhIjdPMCFCXy5sZ2YyeXc8fVU2YG0/XnxvJEh+YloxMk5tN19wQ218WkU5PWFIO3FoVCFFYT98WFlwd3R1TCxVbkR7Ondnc1IrJmAoLGlL'@;
put 'Yi5ZOVQmKU5bdihuQjRCbWllc3lNI2chJTpobClCbEooYz0oM1gycnJGampQRUBSKlhhPi8iI3VSXj9SOFE3KmR0XmQvUVZ+Kl8kVSY3LHBHNWJUPDRhfVhCJkYuYCpCbzlPdk14OExLYll6O2tRWEx7PlN0fGdkIjVKaTt4PWdZQWVWa0VxQWU3fXNTbEklIypbbGNsMGJGckJ6Uzs5VzlXRVYo'@;
put 'QjpgRS8hSnxXaVVwcS4xJi9qSDdOODRpP1dleWowU3B9U3NxbFpUYXB4fEt9V0o1InlZUWQ7MEJuVmRgYHRdQnJwPj5+QnR1UFkrT1R5e2lNa0JhMylkN0lIbSxIJUZYTGdVZmU3VyVlVz1qenV3M086SVl5VSV5LnQqUlJqVml8QnBxeDBmKD0wfTludmtOUSpqUzA/PyNuMT4wUGlTOC5OdS9m'@;
put 'VEkjdn17aXdNKmt0byMlbSxOKnNPQXEuK35MXmU8PklZfnQqVXUqI25XbU0yd1EudEBXPD40MVRwX2Y0QC5RYF5kUjZ0fVdteSxNIW9HVDZlaV9pWnBte2xtZEJ2PHlQakNxKUYuciFGTWRsKEpCQWpqKSlLOTF4VjN3byNEXkV2PktrI0JDL3VwUWwoPWg+eXBAYCtoPEUhR2kvKl5CMmx6Q2No'@;
put 'fVhRMFFyPVJWOmFEeV1iZXJAYXFJLiJTRW47c2ojdkxXKVM6JF17N1l3MDFiZyVbM3FFekoyWVkjKV9tW0xONVVtWmFPIXltdFVyeis0enJlLjB3Q1tXUzlMPzcsSz8zeHI8RztAcjl+RVgqR0IkfHc1M0IwIWNhLjYjRFtfQzFpTGI6WTFIOXAle1VeZFVVcGZ0dF40ci9pYks5K1pBYi9KeyNj'@;
put 'NzJidi8qJWM5ajRHSUZwKmJhOkhqbWt8U1BBe3tTfVh9UEBtZitgJilEQU9sQDxAen14VDgjblp3K2dEflo4e3VPN3NtLiR2N3VPbltONWBIQEA4c2E9W3tJKHdmKFdYKCFTbSojZzgmdVcrTEU+SiU4aGs5Ii8vblUvTDtqOC5BZCxkUEouJXV4b19bUCw6QyFVVjZHJFMkYCY8UDwlU3skJFZB'@;
put 'LHxhUUBjU1tZKDhnV2xWJWs2I1hNU044dWs7KW1KP0ZwWEEhZ3RZaHBDTH1sRFdVRm1jM2h8NndzLkBBJDpZZEs8RzolK3dVYGE0Rl9xYis8I0ZvQnJuTmI1KkpWOVgjYE97b3ZCVGRWPllsL2I8KDQ4PlRAUSM7fDJyS3pYOE93TUZSdEwmTCFOSnl2IVViU1c7STJ8OU05dDVjenpHQHNqLF07'@;
put 'b1dIc0RKaGduSGxkKjwhbF5We0NeaE4qdDNuW2hAWng2UFRYVT5wKWN6S11FeU8jN3NsKThifHRwRGQyI2d9Pi5paWA7YFJwO15+JXMvWGpzYW1AYE5MVnx3Q0JuUHI1LDksRmkmVix7eE4lSCxHW0djNGtqY1V3Y1A2SnVObz5OXlpXMytTSHElQHJELHxCOylsIWRUbCw1cjMubFUzWDMuO2Ez'@;
put 'eVs4MnB5Ni5YZUN6ZX5tXUQkZ3JoY0slbEw7NUZhYkhoWj10WnVBV1dSJDBFYywwNWE6fVdORFNIJmheL3l9eFU1K1k1eXhxNiV+P35XKjxHRUJdQShFJSo/Ji4lRlNrNShNSEBJXlpyKG91LzZWITZvOW4/dnU/WWJndnw7VUQsYmFhfkY7aCVVN3tOb2VoU1A6cE1VSXROJC8/fSxEY3E6WGRB'@;
put 'azMlSl0wSUEvXjs9MmcwVjNdSzxtWyYienFyZ20xQFNyVFN5KVk0QHE/O2hKdzReMSV3SmJ7KjJ2UE5CbDx1aHVZeFE6emU2aF08VChaVWg1IXt+KHtTMm8/eDRrdSM1NXV+ckY/OVV1WCZQdl9wem1VYkZ4KH5ne0JLT0xIbEJaQmU7NVc9eW41LlksaVFTO3AxW0N+XmduPWF3OFtrbEZhJkBa'@;
put 'LzsmbjBiKmdVKjVafDVUJS5lYDgqRktuNlhZaGdsZDNAOklfMz4qJj4mWjQ2Z1k2LHJlQ2paJGBESUhnanJLeDRAUCRrSGEmNUkyMl9uZSsmWXM3aEdLRXIzRXEoWEAiazJTU1FjXT8/d2E0XTc1byhFU1h2aV0wPT1ENjVzUigxSnp6RkJ4K0RtKDN+bzYld1o6MSxmUUVtTzg5ZmIsODE0NTdW'@;
put 'ODgpdEoobSxIVUU8czdfNSVSUXphd3xbMjFzIUNuRXF7PCkuSkJuSGdvWEFNUFFAKW9fZzsmNCJYbnJFaSMoSyZWQDFGcyt5RGlZKEJnNld1Y115bm88OC5raDw+dHRNPzppfHBtSVVjWWpBZn5YK1EvcklLRn5yQFNlZk57SjwmNlQqfFN1S0N8ajpDY2F0dnApKlpeIi8+YXApJEtdNSk6OmJx'@;
put 'QTxYQkQrOVswZE1XYHhtY3JaLiF4ZVtOPiI7K11VYS9XPk0+L3E8MmtIbklRb3g0JlgjPHNkOTt2fSV0fUwmSV9mdCNTU0QqPlFWd01hJl1nfGdnMUx7VmRwenV3W1F2PVUjb3lXL0A4WT1gcEhySSYoKm44N0Ava0g0IkFPd2IiQlsyWC95RW4/UChAZmRxfG9CISo8eGpJaEtNO2FwRjhHVjJd'@;
put 'JExpTW0zdT9gdztMV3ltYHB9RW0hS2BXUzM5bSRSNGQjd1JPWEtyfn5fTS8uc24pW0ZhdkYmSS9PZGZiI3pYPCguWlJ+OFJgVlBsMzR7Sm5eOHckdUoxJilTISxGRG9SRCR7Vl1BY3pBXUA0R09qO15rSWBNX3dlRllCY2I6SEMybnVXUWMjLkttKUNBa1h6fDg7UV9xJk8yalpTM3x9JjMvIkpI'@;
put 'I2srOGhJKTpmcV0kbTYzRD88Rn19MEE9SEUzTyY/Rm0lPz95UWQifCFkIj9MMEBqfmYudEIyJkpWZ0Z5N2hiKDUmImU6KVJ0fkNjRUE9RjQjViZuWl43WXlSeE4jak9MaUpzcWA5NispIndyPCVRfDElYUU8XlhwOll4SkU+VU94Z342P3cvVjtxTXhpcitMZmZdaC9VfE56V2lFQyp2cF98b2N1'@;
put 'byN0bTwkOHxIL0cuLjl6N0hwfWQkPS5Ob3hsNyYzblNSQXNJX20vPT8yX2FsU0A/KmJzJTFJVSU4N2pQRmgwfEI0XnJRWVVjPF9jeCNJQndjRENabmJNaXJFYWVxP1lCRi4kcikhYmR5a3psSlBEYCVyKltFYE5JYEdHQkdJdk9abypyR2p2KWY6ZlRtKjBkNEduUn50aSEhenVmNH1rNlZZRj88'@;
put 'OVRmJl4hImMjPV1KPH19a2ZwbEZFOXdMV3RnbCRhMjMqVHc0IjZwUGJmaG9nRFEqfDRVPCV8ZXcifEtrdTZzRUZOU10+KV1rcG9CdEZCQmlXQFlLWm5oQFhHZDF5WGdhYkJFOCpsaXc/KGs7emxPfU07cGVeM3BDLHpiLFRIJHFwMWkzTD9hfXt2YDlKWnBfNWV4PVBAOy5DSU0pLihObnNbTE8+'@;
put 'LksoaV5kekF0ITY9WkZmeFFkQDc8aSYrLGpVVkJWN28jLjJOMDxxP3hlSD4zIVhGc0M5bnxJZnRkWDpAcGZnMUxOI0ptU1c0filzUVF2O2pUU1szV1FZQmJLPlpEMHhucmxCbXdpUzZpZXg0LE5HMC5Nakw6XUVVR3UrcGgzK3AmMTVbcX5hLlQicXEjRiwyZU0kKTBkTyR3ZXR+SkF3RCMoQnwj'@;
put 'Lil4PShkO3NXMFs/OHhbPlhFW0l+fihVcUpKTX1oKClyQFc+NWVKVjZ4SUkudWIxQXd1fCpaNiNkd0B5e0drSD1mcHlAKDNhTm54SUZkOHAmO0JqNyNLWTVEQEh6ZTJ7TEdJOEB5V0lCSmJFLHg6LjJWJTh9dXM0cyRfRTxPXkJJSzpgWTdZc0lVNWJDS2JEclNBVy9rSD1ZVHUsbmFCeVRkNWU3'@;
put 'e2o+bFZ9QEovMkQyamwlZEJLOnVPJUhAN3I6b2gqUmxZIX1mU0hgLFNUfWR+OWd1YX4sSEt+WlBHPVpseDdfZV4vWTBhKUViZkhHREJeUzFZbzVGMFs3VmFmKSRwS2VUR04uWVkuOkVHKUc3LjkoKV5ScWJwfVJTKnkxOno+NCg4NW1faXhkb0JsOnxJfSwuVE8rQ3YxWU57aCE3PkBSeHJZS2t4'@;
put 'JlJgNnA0Xi4sUTRkQDB7S1IvK2FpO2ZjYSUqMVMlc3ZeTW5ublp3ZDJOZ1BmbWJ6X109MU5YMnlgNSYxbD5bKlhNLkY4YzU2WHd3P1c4ITdLZnImYjFWKHZfRER9ZV1CcT5NJWsoR3dpV20zLlBLaUtMI20jZXNBPS9keWxLaEFta2pvPDR5TGZ6eHNUREdMQXUyZkcqc35GMUZyMTFbV1peO1tV'@;
put 'Qzd3amsqclkoNmJQaWshZE4lWUBZI3R9SHErNl0+b0p5QX18O1BSRnUqYCM3X29LWUZzT2hPa0MmaWVob2dOUndQLG5uNHswazE3JHFvOjt0KGM8UDFmR1BiUShnOl0iMHVkSjxQVCFsfkdaWT9ydCk8JnpTTzk8PlQmY3dieUFibVpiMkRyQUx+V1MpaXEiUlE8bzRSO15xZ08uUlhhd2ZpKVNP'@;
put 'aF5Qa01xQiQ5eXpdUW1XKGNfP1NVWjNHT3VyMVZURSYiS0dVLklJKUBMKndGVW4+eEprOCRpdV9Oe3pqMkthXTpFbEwyOlUhZXFYemcvcHpWO2ltOUMwPW5IUzJKb3duISV4aGJvbXNZalJPKWZNO3Q3IlpmOEZkbj9YUENwMmlgJFE4WD9iT2RmeD17eXAqYTFXSWBCYCleJTUram8rS2VkRlJg'@;
put 'Py9VXk5YI3RdeCUyQn1JbGNaemg2TEFJKU4sfk19fnJhZSp1Q1MrejxudmZhVWtOdjdsdld4ay5zZz49MWJ2QTs2R0VWSDAmcCQ+XXZgJUdVWi8lXTNwbXpeO20/QSNwVkQ7SD0jeEtTaXhqTmhQKzhMQnxsVTtDQ0NzPDYsfG8uOTZofiZ9Y1Y3IX5bdXRRO1NERFtNSlFnd11aRiQ6clQqMXpT'@;
put 'eUA/MD5mRGV+YDE9U1ZVSk9Sd1QhQHx7bC54dGNVN0VBYTVgOzVVIk9vbXZmTXdSMz10SiZfW11oeD5AWy54aDMuMDZTJk0oLlc2bnNqa2xKXmhPVEdSOmQ0WXh9YDs2cjh9OWltIUg2aSVgInY6fS5VcWpNWExYITBsVFcuW050bVpkIVE+OX58dns5KEA4LztQc3dKMWVbPGRMKnEibDdGN3Vi'@;
put 'SHxlIlhwMGlsKDdCSClAYDxeajBnK31pZXtePFFhOm9kbGJOTEJPazMmcD9uUXkvN28qREBffGJ1JkI3eGN7SG9+a1E0flg9SCFXfkZ+QFVANj85RCx7bWEvYnM3akVVQ2Jia1lEYEFTdXR4NC57X2tSaG95bThQSE1JR1U6OT9uZ0t8aDZaVCNAUk5FQCtgNSNrPWM+WE9bYWlUR3lkOChHVl45'@;
put 'emQ0UilWI3tjJns8Y0BxQj5KRSV9STYkKThKZFNGPzh3KGQyMGMpMjw+R0hCfD8yLn0/Oz87QU0uYHVrM0x7W01ZQiM1QFVHI3dEdC9sIy5TcEUqaUMpK01udnROT3dEfXB7XUBvPDJbYlFDfmQsZUc+eF8lT25yalYmQSE9OnA9JmN7KiIyYj04fSRsYS81TWE9bEdSYUgidkQ3aShzTD9GekVW'@;
put 'XWBoXWxldHVzdX0pUTwzUjE0VStrUlBfI189OS5qT3BaR3lWSjIxb3k/ays8dlhbKVFXSj5wVSpaK1RLWzlIemxlYWkxcnNVM2sxdUR1KmMzI2ksJkZtSlllK1A+M3IoPCg5aUs3WEJaMEFqezouSVhnM3RBMVloPG01bmgyU2l8bjIjblVnUy97ZTVEdTBHeD9Da2trdHlxXjpVKEJ2UTFiX2xJ'@;
put 'NUJhdCtDVVJvLmphKipyZlF0aSY6Qkh3RXlxRElVMno8PFJsZ3F3IlBwUkQ2Uz8oSlB+Q0ZsdHhgXUI5ckY+aDBYXVRFczxRfkc2KVEvaUlSNEhQbTxvYXRXLzJmQDZPW0Z1Y1dHTDIhRFlUKDBUV2IjWUg5S14zdHlVSUJOP2hlYXIkI2xyeSJVVjx2cGtDaCQ1YGdhIixwW1tPQnFWWlFnZCIm'@;
put 'YDJxYHBfbjgpNiVdXUFJZTg5ZlU1ZCw3Q3F6R29GI3N+MUVNInYyOGNlIntKUVUlaSJBMVV7aipNdmJPWFJbRnoyY3U2O2x1P192JS8lUkwmTVEiU08xKUtYWWEwbTdqVUJXPmVmSFdleHlATyNZTT43MW5uNC5kRkxBISgzLFF4UGRUcERKIlozfjY5d1J7RltCSl0iZUpEck4/cjxHL1QjZUQ2'@;
put 'U2NhNGVSZ2MmLzV0KXhKK2xURStUeFh1VUAwNWJNVXZxMFsuUkNZW2lSP0h9YEpRM1MwI3glWXJ6djwoNmEsVUFGJHdENSZeTVt9I2deU3FPJlZKaCsoVl43fW1MVG9CNmxZSU8lVUZUS2NvY18qMSY9QkRifGBOaFBCN25paUlbKFJaWTJmTDh5RiF9eVpMMVQkWnFJTG08JGEuZWw3X0Umbnou'@;
put 'e10yMUVbVn5IZTE/dj9MXT1wRChnVSxdL11ZJVc6VXVBUilUWGw5JXUlTX4qSGlqRzQ7enpUNi5FU1F7LDppRmRyS0p7Izl+bypTIyomMjlEa0BdZnJoKW1hZHpIaD4zZShSdSxiSjlHVS5dfDFGMSR9ZzlYP2UiSndfJUdoUVtfMGNYaUg3LzAqUktNUUl8MDZqXjI5QFZGfnxePVk1JVhreHhi'@;
put 'X0IkMjxoKEklX2I9dnY+X1VzK3JNciVdZntBWkIrWkdLYUVrMDs9T25DcWR0MSloWChxW1laYnNaMG59SE1PQ3g4dUQ1KzEuaEwhbWYxREJ4PUZ2KihpZnhdY3lpMmZfMHx7aGJafSNxJl1DQHJkRyFkQnB8TTFaW0A2ZER8RltHc3V+SEJSfUFHcH1BWlQ/VDFWK0dva0lzQiJ5MjRsW3FIS242'@;
put 'RHRWe3FWWVNTalk5dmhOWTk5QjY7UyM1bz4sPkIrV3t4Xik4Zll3PTRyKEcwa2xVVVRLbGF3WSJKKkx9P3hGSG1dZ0IqS0NJJGw8TW8ldiNSZHg3Ul1UYHBefGNmWE0jO19iUGkqc1dFXXZqdjArS183ejZEfEdoV0pHclpyO3pFZXJ6STRCeWREYHp1O3heQDxML2A0N2lKbH5PZmh0dmVTTndN'@;
put 'bExDYTAqZVZhZyJpOENiYE1+WCNeYDE/L0NHZmxjIjBNalB3WjhVOEckbWIheUFOfm4pWSJnX2RCS0hbOE80YmheWShLUClVOjZvOipJXiw3XWVkLHFtNTNDPm0+RFFoNi9XPSZJbW9mI0ZzQkhUSWNjNzwrdUI1KmJHcG9ZV2lZfl0/NVtqeWdYfmdSKGhIYTRnb19ubUBBbmVfQEdJIV0jZis7'@;
put 'KCVoMz5rSm9lVVI5YkI8eVUlQGdKPFQ2MjFoWng6YVMpPEp8V1BQYkhzSCEjQjtgS1RBajBJQyssL2RHS3ZtbWFwbWVmKmtbUCosKStEaytuZUQ4SH0zYG89QkZIMmlpemBSeS9XbjNpRTwoKDxIUXZeUj14Y10uVz5XIWNXVzpbPi9sbSxlUHkybXtMZCgpXX1+UzltPS9sKFJVbzIxV0loaGhe'@;
put 'aH1PdCZVKm1ZL3dSSj5ybkI5TXNRPDNxcy8pWWpMeX4xODc0JGN8VyowUH42fih1NlUkW1tHPlF3cCR5K1lDIzloNjYiPF4hRiFvKX1jSlI+UztwbEJJT1JWd3poaHY+Jip+bypXTiwxb21deyZuJnNkSzh2RlhwcEh9Zzt4OmBsRV1UXk1UfEpkbjQ6MDBZMXBUWXFyQCs6Y0xPZXdzcTNTSCNu'@;
put 'RUlZI1dlVWp2XXlmT25pNjNoazFuNjZaK01tRXxTJCh0dUcuUDg+cj13NVI6OHFsVTpTUV1GbHQqJkAjKkRSK1NtVlhEUTheWEgrKzVIKWxMQjYuYyJQdWkyW3ZZU1Ntc3tNWSJQJko2bjx+bkZRO2ZLZG49ZlFELDtRV3NDMUIxVSFdcXRLZTZHRDs0aWhTXVZnSWFzOE5WeDhmIVMvaDhddiNa'@;
put 'SXQqWT1mVFdsUSFMNCVwKX1JJkNEPmckUVN1P0c4IVl8TTEsdGdiOlIsT3ZFNEhObThDKnQmW2Z7W3VKJVAyN1pGfnYkPVBmc1EsMmp7MlR0ckZmNEtdIyVZUGBlbX03ODQhQDkxOmFwKXxHNjF2PjVqIStfM0okaCVkSktSL2pDbFp+JE9QSFMoK18sSEhMWy8hdjFxc0RoUWV7Ri51OXpRL0pb'@;
put 'UDgiNihBNiRkP15UYHQrayFOXUQ2SVFrNyxrNn0rI29feEhRfDxHNEo5UzEwfS8/fWh1VV87c2A+cnZgalUmQFdaSGR4Zl85V05YTy40Xzd4TkplT1kjQTZVTVNOUWtIZ2duLmFSaVVVelk5QDohdk58blA2dD80VXE8NDBIZD17XzU4bXBqMVVSKChLdSN9OGxDMyxCTTAyLFlPMmxNMmwiRCpA'@;
put 'cTNmKm5jWzgrSjJWMSpRVGFKcmFpcHkrbCRteXNhcjxrVSZXSHFWcGJvYENoTUs4eld8b0FuMzJafVk8TUJWeWlLVEApMnVbLFhKZHRMZztTaGxQSD8rVkdYUGgiPlB2KihfcTFEYSxLdzV9W0glMSU6MlVJQnYvLjtUVUNVNFRIVkdSO0JCSHtsU2RBOGFUPGxfIXRnaztMRiEzSyQ1NCNdTndb'@;
put 'aj17NmA9QldOXil6NW99XkNdT01uJUlIVyFmVTk8QGt7S05nVVhEUXc7UmkrdDRpPnt0Oz46RVh1LyJVYkx5LnNnaGhRWkoyKSIyYU5ZWn0vL0osN3MxUmBJaWQrPmZ1UGluTiN+YSF5anlDUihwNyFVaW4zQWthNUVNZmFqTzhbKkhTL1BiZ0xKMl0zMlZGNk9vZ0IuTG55RykpZk8/Y0ssNFZU'@;
put 'YiRNXSJDVWBbN2JPclZJW15wUG00aWJFWV93bitUPGE9bXwlJE8mUDpWeVY7RmJ5cWVrKm1GMzNXe1V6LkdSV1dCe2tFfG4ueV81V3gyIU5acT9vOGYkRFFvTHl3ZV9XandKdk1bS0M3Un1kVFdtUURLeHpLP1dvXShoL2Q5UCZaRkgiNHcqRH1+JFIma0xsMmJBfkw7ITFdOT9eXUY4RkY/VTJ+'@;
put 'S0FeQlQuWEAxZXVnSTxWYjd0P3hTZmJaSk5fVnQ0fitQKjZJXiplZ19EfHE7P1VQcis8eTF4Z3s1TiY7Uzl4Ym0kMW5WY25jfDw5KmVvSVhKWjohJjQjfUl+cDdVX2ZRTzJUeWAyTExHbTx0eyJmVFl9OE01fEpGczBsbjpgLiRHZyt4Llp7KGVjVGNXSGsrMW1ZSzE7cVpVMFVBdHxtQEc8Y1Z3'@;
put 'KixRSWErWXJxeF4vTGxJSmkmSSYpfGpkUn04KnwySXlnSj1FbktnX0lzcjBiLCkqeiY5YFNLJD1EIzdsVHBXfCgkfEo5UjgqMDxEVjp6fEQkfCRQOT1oU1ZMODdnViJVdDgkYmgzQVZWOmg7NChCW083bnsyZm1zeGlhbV5aVj8oNjNDP3VoR25acUpXYHUxdy5WbElWJDhgbHYuOHpgRkszWWJe'@;
put 'dFZucig0L0Q0UyhOITtXK28lNURTbFdYckRKQnslS2RbTyR2SDVDenllbDRQPDF7aSJHdldSMm1QKiNpQHY6eV9tWWV4LDN9bHIpdVhjS0tPfEJyMyVxUTB3Uk5eNS9XYkAhZChvdEkxQipfYGNNK0BkKVRtS0MrQD15VDlaRSlpIi5VLiFiV3wvNGtMKD9dWGg2MkRmXnxCUHJCXSFMaE9BWXNs'@;
put 'aGV1N3d6Vzo/QUlJeUQkUC8+JVFgKjplKl8oKUVvOGt6OWUyb0M1O0dlbjpkQ2JhOXk5KFouaUc7YjxTdjJVamVgSU9ZV1J1THRIJkosVU1SLFVYO3REd3ZddnIhNSwoanBTQ14mRn0/RyRPd2FlaT4sI1V8N1pCekZrUl1MMF5DOHEod2FfYXsjdkgrLnxRQmMoKVtNZH0sUShhYl5OaU9abHdJ'@;
put 'ST9JdFowNWlOSF8mcFZwUVo0JV8mSEg6WF4uaV5WW3ZyTz12RyM6MTwzKCxrbUtdTkFPN1l7VEYyLGtLNFJHNHRsO0R0ImdCZEJNXzliNE1KWmNKRFApKUdsNFZleSsoL1VDfm0wa20iVjAydDlpVVVvWis4eShiNWNIYndDcUBoYD8xemkhZ2tfLEF4S2RUbjx4a0shW1lWbTI0XlcuaiM6dkBN'@;
put 'JDJ6UmMobC9MdX14TGs6YDBWJmFAL29gXihNKmZ8bEFFfChyYmxRT2U5JklSPV8pIWJRP0xJP0hSXzZfKjVNd0diNCwlbng+Jkc3NlFVR3gkRywudmVOMkNlaV5Cc1p7eXZEbC4/KyFHY3xPT0VQIW4kfk1hOUAlKHFFdG81U0dXb1AsWTpvYXFHRjAkemtWJGVCaTUxInJDKEpQOmRFPFZZK0NC'@;
put 'SkJtUUhiVCpzN3lXYXk4OHAmU3VTOEtrRT9yYmhVenF8Syk/IyFoS0wsTH1ANVI7cm02ITw1OGolMzRtaTFgSClNWGhSISgpXjskdCZ0cVpXTFZ2akc9b1A7aURXNkpTR2leeGlmdCZ2S3NWLnw5Tmp+aGIjdFdGc0FeVVcwbnhnNypDOkleZi9oNjNZRzFzNyhUd2Ykdz9wSHh9bXt5OFhBQDo5'@;
put 'X1BCZkw2MyRNU3xnKjNYRn1PYCp6REU4WWs2RHQ3S18pKndAQ0wxNTsuT3pdKjsyaH1aZXFAWFJCRTtlNS5RR2orTVJZQjV5ZVB4LDxfKVR9IUBjKSJJaUwqa2JWOHV2RDlvYkcjZX5eRVNXNSpWXy5GZjFtIzlGNi49PnVTJGpqNDVdcHlLTHd1PkJbSSNlRms/PXxIISRfVChYU01XMS4+byVw'@;
put 'YGtzWCl4SW9TI1l3dTZte052V1AuKjJWOHBkZiswUHwkeWwuRiU8Q3UhNUJTUDtnezU9M2klLHhOal4rdzVrKTdDT1RmaytUbU99UE54T11AakI3NERyVTQ7aXEjUDRVKkxSdWBaVmlWVj9bYXZOQH4xZzM8IkRDTCVFUTBlaktjMyZucU1PdSFIWyZVaW1mVVZvTCpPL1A8VXxKRlF+Qm4xWmFs'@;
put 'aUZ8LmtTZlV7UlBVa21JfkxBLzo3TjkuVyo4aDc6OEJpU35Dej4sfjh+c2cvS3JDQz1tS1p9QzwqRGw5ZkdIflIlW0RDZylUJTU0QjN1VlQ/az1NRSNURE8qKH5HaXYvfSYuantiNTpsOTskfTs/OGY9QnIlX34sdllTZV1aJU5TZW5EcjBmdztEOVB+OVNkQmg8elNsUSMuPHBLOSMzKzZSc2Rw'@;
put 'fEBYLExWM05Cc3JIcSQmL1FDKGJYImA2MDlCQUVTaHRPQjRSQzd8ZWhvLzNMMUMmOkt4VlMzamRRKEdJWi5ETC51I1Z1MldicEhAQCxLVFpCfUBIJHtkfDtBV1EjQzF5MHduYiUmO3RSYyxgXktZcFZ+WGZ7PEdAOjUkS3ZhJGUoK0loN11WT0pvVTc5YDQlZl08Ll5gPyFmKyNPVV9qM0hUWGlb'@;
put 'UjJ7UDJ9W0l2eU9JPDdpQktxdEE1NmA8OUBFaHlXJGw4YT5gVzN+c2NHKWRIWUh1bl1tQjpSK1Q8NXRgTFh1U2R0LGRrPnZDMDFRal1BcDsjQGR0WntrWEVFdls8QjN6X1NGcSZMMT9Qel4oN2w1ZEdkR3Y5TGM1KlQwWV5zV0pQKyhHaHhLUGF1KUpJOjJ4W1RbRkY+NWxBPkdTSDhXPj5GK1Q/'@;
put 'dkQ0KmU6eW4kYl43fDhYaEttTShKREUyJDxVJntTRDRoWjxRKVY1KDxaODBFc2pfTiU/PGQwbzZzQyxxN24uK3ZCOHh0Yzs8PEc/IjJdbGhdZzpJQC9XSUF0bFtrXiU8RXhkPGZPInpWSGA6ZG88YHtEfHYuejFGOVt3fTYiTVpWeVZtWG1mbS9DPEROWFVmK2w1aE1jS2F3TClaOShYbTZUZVdF'@;
put 'QS4+UlZFVmo7STVbO0Q1fU1XVCNMIUFsbk1fPVY3bF5+JUcpSGRGKGEuOT00eCltXXYuKStzX2gsemk2cG05MmxYQCMyVENhUl0lQUxZLk16WGlwKDZ9eHlCdWY5L3NjMTUxWjFNZUZZbjdmJTlLTG5jc1RzN0sydndCL1t0ZVkhV0N1PD0mW1dbJjhdZ2EyPkUxKytEN2NkbmRVJlY2ej1DPUJI'@;
put 'KWJae2NCal4kdkJrNntUKFohRkU8Xy4lKzleZ0VmNEQzMllGUzlEbEhDPSolN3drPjB9Lnt4KGdVZDgwQy44dkI+dHckPE9+dnFwbHZuWEhUU0JrXV4uP15Bb3dGOFoiaX1ATzgrPitRdndjVl9TcH1pXkUiZkxlJiFaKUhvYEN+KDpaUEwvPlt3bE9TP1NxcD41P1lkYzpZO1M0QzBzWW9oWDU5'@;
put 'Jlc4JiEsOE47I2FlMDk/RDRndzJhXVJGTVVILG5MQTc9UHIqMFRSdCV0KHhtO25RPzcucCpkZzhmRGlJd0E3Wzs4L2JUUTU/TzFhSi96QmdNJHdnWih+QUF+VU5NYWFzPCNTbWhaOkIqNTdsSDFkRnROMXZeKF1fTHZGP0k4aCYuVHJITHo+a1kmVV5HYGssNXBhU0NZJkNnSHZjenYiSSxkdl5+'@;
put 'fWZyXjJ3dzhCeV98cnFTUUIjL20+K11dKTNnZ3BvQGdwZyReM0c6LCRBYyUkPD1jXUBRSXdJTnVWZW05dyVBSWV6QiVFaishNSFQUndReVZQdVIzSCU1V096ZDxTLlIvdDRpdkJpImh+dE0wc01eflROUCNDMFtoRnxZIyhVMDtrIU55U050bmQ9S0M1c3RzVHdGJltWL2xqOmghYU1NRUg1R3Bf'@;
put 'K2UpKWVIdCw4ZFpNbjIpXytgVGY7cjlJTSxjaUAhN29OMil6N3YhXk15O1h6UTIyJVpFekVER0s4R0wwNmZDN2ZTfil4Wnc1Iigsay9iOGc6X1ZaeHVjNS5TUXo6aCYsb3YwcEk/Szo4R2JvaTcxLzZafCVqYGZ2W1B3MSxRanwsS3I7Iit+VitjY0UjNyx3L3h4TF1TdDNjMj5oKTtfdktvJiRr'@;
put 'aW1dcDt5cEBabm02Ui9UWWMoTndBZnc4YXRAMUlZRDJfI1Z7JGtjTHpKRHA7I0FZczBpdCVmZGx+Im0sWVd1M1JlLyxuPyFUfiFIazRNPVpsTV4idnxAdlF3P11CKmtLSEpob2xRakV5WS5sQmhFX2JGem9oVmY5b3VoOz0oVWRsSCxrLHZ+LGhfMCZ+YlBKRWs+cHdgdGdgWWpNTnpBKX1JMUdO'@;
put 'eU92YzhrWTFOaWA4dVR5TilwTiJPUFIzdillPjRrN1Y9cG1yNDtGN0RWc2lqPUY6cXlkRFhDdFpdcGdQUVclRGRHSkdIInY0SzN+NDhsSWglU3MuQmFzX15EJio0aj4mSEt3fiEqJjFDRCRgX0ZeanooODR1bkt1OyZ+JFYzQGVtZ3l9blU3UkZPUjVIc2RaPVk+Vz48c0A6P2N9WzZtJTZrSHIy'@;
put 'PSk1ZTFIQCsxW09DO3t2ayRCUjJyJSFNNU0meTRDXylxcyN5R1JYPVFoek89O3wjOlB9MEs2Rn5eKFZCRnRPMilHV2d5RUo7TF1iZVYkSzVbLypuKCpQKXFKRlIoVWlxa041UVBtRkB0cFdCfklOWUZWWWp9e1QkTzoyVnJuQCVWezdmLnc1TX0oTGkxI29iXVchUzx5KlpTPkgkKlhEJnl5MX1p'@;
put 'OEo+Zk41dXdrZFVyeC41NDxGe3o1RUQ6W3ZidmVMUHBTL24zZkw+ND51M0ohKiJVN0d5fEhYbH1SRiVXZnMoaXtyd0JEX1sxdHxGRmpMZzxZNUBIdXNnPztVPl00KVBGcVElcXdfSFckVH5MaU8kVGspSVtrOW0scns4PSlzQVhMa3paL1tdSDdiPGNZL1tJfD1QMGU6Oj1qeCpIKUpUJTQ/dEdg'@;
put 'd09tRysmbnFqQDIhVFNPJTNfNjJZej9hY0hxYXFzbjldeV1DUjdETFpQKzAsbVJoWkxqTkZ+RFhsSCohcmFSJmVeVC8lKn4+ZWh3anRDa3dCIVhFMjZrP3JlX19NUmY2UWgyS2pOO3R4d2ksVWspT3o/aDkzP1RuZj9+Km4wfW9UZ01rTlVQMj1zZmcjUF05Wl8xYzpxSjNEKGo3JkZsW3JsSVBh'@;
put 'Zk50bjFtcVN4PHA/JURvRH0oX1dmO2VmPDZwJTxOKjVFdiRlbFk8Sl9ma1ApPGtHa1MrI3A3VStaK1dAV1YqXSo6XVpIUCIiMChMQVk3a3NAczRVQl1sSDROLGFHfSYkTHs5NGZLbUZRfjx9P0p+SXo3eGU7d0w7aTxDQDFxdmhvNXlRbXAhejBDaGQxeDhwNVdpRnQ/dUpYNHNGeD9eU0Bda3V3'@;
put 'elAlPy5dW0N9N2hzNCl1Pip3MlpoV3x3eyR5V3UwfHVJeCtNNCV0Kl44WXF6ZzxOYzI+RFdZVGwyMlMrVG1RSF80RC9lOXVXJCk+bzluJj5NKnNfQlFLK1RAeXc8c3d3THtpe21eKTVUKlhhNnldSnJAbFcmO3duMHNJL1N3SjI4ZDFMJSVdLnhBVGQxIk8rPG9+RE4zaGZ2fTg6M1h6SnciWjxx'@;
put 'OlIkd0NXa25LfXpHfiVaYSYuP1J4X2Q6KC93YCFoPWhETmNRRWdFfnxxN183a0JoPjx5MHJYZGxyO31RZmUoKCNlblEjL1h1QDBvYXdndk9zVTlLN0U9MkVSc1EzVSRfWjRUPSo2fk59TGZyZDo1PnBHTHcrdCp8NGVuLnRaVyNwP30lK0BVMVFPR2pxST03KTokO0lean4qZ09pfTBkbXgkIWU7'@;
put 'SzNrWU9BfGRNJUZSTTpgNUFlfjMjMlR4MXJuS2JLX3VdODxTTW98bXhdckBTKD8vO3pxX0g0JjtQO3BHUSpvW2I2VT50PGNkYlVqZ3xFLm9TUWEsYm5vRyF8VlVLWjkpbDAmTXR8MjA6NkZjeDhRKzxVPHAyTm8qOTBEJHhWIVVyelhIJDY2LHVrZTZ7fk99bT9aTVhwN2BuJCM9cWpncF01am58'@;
put 'ZzpuKnQyMkE1K0ViN1g1d0YwW1VkOUUzPUAlY2BCLlIyPmhDaG13dzBLYGFzaStCS2l3fUBYPzVVbGlETDNRMi9ARCtULiw0Lz9BSExwXmxMU3xzS08uQ09JW0hRVkJieWd7bF5PSlZIY0w2UV1Ga1YqfVB9YXxCdll4SV1IVFclOX0iSSsqTz4zQCVyQEdxWFRFTVBoeXMsTFBbazFtIStdOFso'@;
put 'eWYzMGsiNitgTmI+K3JhInVkamVwIlRTRXI7SVpJfitMenhtVGNFR3dpRSZRPGxFayZuSWZ3R2ksVnVGIXteLHJJcCRFWiRLNC4/XjNVTFVue0NGS10mTGw0WG96LH1RM0FGV11fXXEoM0pCbkg0NypdXkE+RURuKmZeU2l4cXlUKUgjQE0hQiosP0E5Qk1TZS92YlNkdVAoPXY8PSpSOUgkWWJM'@;
put 'YCwqfFRXcnQ5fDNOUU0kVyNKc3hSe21vSShsczNCTWgkJmI/WFskRDdOR20vRCJMaz44bEJZJXhUeVNPZEwqXSkrKzRDYkdNL0R2eTNLOGk0T0I/PjozO19WPnptMD14UFQwRE02OkJKW35kYlA/cVFOP2M4TERhYWFRRztSfkAxaDEkSmg0Y1BycXJeK3dzPlhgMV05Zl9aSzRwMGx7MlpzYFh2'@;
put 'LipMLlNAWnxIIyMwQ1BoOXwsbyF6XVdHNXB8RCJXdCZpe2IhSmBkfjtmfCNdfjpCYjElIWs1Pl1UckZdUGx4bGo9SyJjWXJqRCEsOn07KUY/Ll87ayFlWXZ5Sn10JV5Wb3d3fSJsJTFGSXcuIU02JixoeCM2KmxnOyMuRUpuY110OW9sL2UqSD5YTW1UbyJWTnhYXkc5PylOYEVPY3daV2Zba1Vj'@;
put 'eDtPQV8kaWIiLFF0L2JmS24qL1hDeihkOjk8dklLYC97MVBDLlowWntUcyY2Y1tPNEpWaX5qZjE/O3lnImlKUmQrMi9aQm8wUCQhSShMJGh9fH1ubTY3UX5ISHUqemZtOXpySixoT2lrNmcmWj5JMUgiJkwwPWk5JFF3Zm86cXBPKms+QHpFJX1MKGB4N2RLTGF4TDpwJWpse2QqUCI0UHZ7JFdP'@;
put 'QGx6Y2BII0R6PTxBeSk6K2V1dG9vUT18QjFHdnpwfF8sQEZqJk8rIURXd24kK2xUaEJRaz9UTlY2L3tad3AyZlsufiNkZjh9a1RPeXpDPiFqQCoyNG1vdUI9ZDdKPnl5K0EhYHRtI0I8SHdxZTtPJnN9anhKK3U6ZEpfb0lBQVdxfXJ7flA4eStuOXJQX0xfYjVReCxEWW5mbHNiPHNxNUBWV2RF'@;
put 'VEpIZHQ6dGgsRSJ8L3grd2ErJWsoc1Zhc2txLyFNdDR+NUpZYCM6Q2J4R2JuJVs9OlAkZHxqXmB3MmVvdCkqMTtuL3VkRjplSFdUWj1OQiRSVkQsNjFXdjZ6fXReS2hJNjsvOmc7XnYka0dAdHhfM0FNJGhmKFpaRnZ6SFpxT3VlYnQuI0E2QHw4ZEs1OFF5b018WGsjYzF+amhrezFYWiZjRkpI'@;
put 'bUBYd2dsfEJuUUxYfSI/YG1wOXsyaHdZWld2MCtEPEBZLkdwJVJjX1oxSC4jIiRlY34lJSV5KCV9SnwxSHxUaF93SkFKUz1lV30xSnE7PkNAYF1PemtHZ2w2ZjV3ODhscyJgRlV3N110I15YZUpqVFl7N3hsSWJfNGVATkkmSzl4WlNTQD1mMjNeI1EhV3RuNCNTdmVHOkBXM1o1OmxPL0wlKH0s'@;
put 'QkNSNmxzYWFlJWYjak56SU1lbWFuNFhSN2hOfklXcj50OyJyKnsuV3l+fll+Lzo/R0l2eEAmL1l8L0V1RV5OfDRYfCx4O18rSTNzLi4vU1VZWT1gZjZVMjpQOFRFPXJ5bnQiMihOI203Y19fcUtwdiJIR1lUJCFqdyZNWzdQbWk1QEtDdiZ+SU1+WldZbUs4Tmc8biE4LytiL1pwMEc/UF9DOXwr'@;
put 'fEd3KFssbUB0eSxiRF1PKCtSKClyP0opWFFFdDNUQ2wya297L3l3ZnhVbH5JNHBLSVFkYkM/V2pwfWRdLDVEREAmQjBIdSp0KiozYzpaOElSKz46MiJzcEwofks5aWF+U1RqUVk3JlR3VkMhNVMhdUtfbmRlU21YT2R9QX1EenFYVSVBbXclS1FFLGhgXj0pWlQpXWJuYE1HL0ZEUUU/YVVMZCVg'@;
put 'LFoxR2xgeGxxaXJpR2B3ek07XykkRjVmYDN4Wz5HKDs6ODdbV3c7MXJJLy47QDsoMCJAW1EjO0VrUWI9I1owWXdiI184UkBUTSZ+UlMlWXpIRyUoNEVdQ34xNFBKc3hJYC9Ra0FoRC9UY2tFYE5FKmMxQVk+MDFeKTxKS0BHbHEod29DUlRpPEA/YjBSUk5uLilvZTUlUk5aK2QqeF1JV3p4Y1gy'@;
put 'NzlheWtjdXFGfmt0XkpQK0JudUBKejQvdXwjQ11nTzVQbkt5NDE5alV0dElydl9NW05xZnwrLz8qaVZ1SGYvUFZoZF5MWHJRb2VkWmphcmF6WE0+SH5bT08qbEIxLGxdV1Y+O2JtWm5xI1Qob0R2L3gjVEJLPXZWeFhbSGN2M2MuUUVoJEpoOWxlNiN4SDNre2FWIX4zbGBGU3ZReSN8e342eGg/'@;
put 'azohMm4kIUI8K19pTSRBSG9GfWguNXI4OmlxaE1TaWl4MkFOOF0zSFpxWysmI10sRS9fJCIoSUxISHBvOGVEM2xocjRyeHFlZ3FHJm96OltMcSI3WXJhSnFyRG9scyZNTy9xZmZWendKWSQ+JEBYIiJ8Mj9mX3AhP1IhcjVhSXE9RDsjRnYsNzEqTCx6MkxMOkY/antrXntheUZgUndbS1dCXzAl'@;
put 'QisoTz8uKDFdJjEpbDNWRzg7cVkzJUQwL15kR3t4OzhgOkNGI0dtJHN6YlBxWjF9Qm8vVUpvWnBBaHlQKDRYe1NWT1NGbGRdSUA3bz8weUs/PV8wT2c0eiN8Yn1AMUYhJnpdZU5MUVEqV1UjW2h0RC5lLHkqci49WVtaSXk/blMwfGFXP2U+fWIrYXpELzRZYj92KSshcGhdWj1HSiMzeHVvWXhj'@;
put 'LGQheWt7R1MqZ1J7d0YzRkgsSHN8aTdqTytwdlhxKHhedlpCM0FvKGJtPEQ+PFdwWCJwKmElKmlWUzppdCh6aGVeNH5+eF01U0t1WCNhOTVCWjtxZGBaUlojXy5VUkFLTVlXQ0ZaZG1zM29zbCVBVzw1bTU+c0JHekwmPkNtNkgkd0hjInF1bFhfXjtna2UsazdpLFEsKXUyWEE6MHJ0XUEvUTxx'@;
put 'KjhObTpGZnxSMSxtVGFVR3M/fCh1KG44KU1IWnpOPSYmMng2MEZFSkNzeklKQihIOUM2QmBgO1gsW1d+a1h5ISVsPDwxXkxhVXBwP191QntuT2NhLkdNXzR+JFY2ZHwiUDtTcXdqbSU0dU1xUy9fcWQ7MTApekNZX1JIeUtwa0R5Rzl8XVY7bT02QG9vWGMwRzZCRSxlNCMxdWUldDVMWCxiZjRG'@;
put 'fSpJdj1jeHcwa1QlUnspa2smTG1TKiErNFlgZyVNR1c6WE5QK1QxaVdOIWsyP3lhLm8oUUpCISNwMUR1dUx9QnZDPm82XW0iZ3hRczM1Rm5wZzN4aU1zQjNvdyl9VnRYckVybVojQGosVFs3Ljc+allialNtMyhNeWdAPH08ZFc2MG5UTjFIRlBMTnJMLDpRaWlwTkFKJmBSTDdKU2RMIXU1cVc0'@;
put 'X29uNl0lWE58OkkqXkoyenJPUX54Nn1DZE5ZXn4jajQoPEU1M010c09MbHFzPldFNnJKM103Jl16NjkvKjBjek4iY0lJNEpye2laSHRgOns8cm8iKm1UfSQoRiNJUS4kXypobGBmMnVLZi54MFZJOUAwYUcxbVlYOl5gdlM7QHFBaG1jdnxPYU9jZzUwUVZdT0V4Wk54OnxKe0koVS4uNDAuXzRd'@;
put 'LFA2MHJwcFZ3dCNRYyhwJmF2LDNVYGkpXiFISkYzPCpIa0NLNz5rT1RRI08jM2ZFYF58VHdhQkIsZXBkaHdCOXU+VVB+JHVzKjwuYkQsYXUxOzFNUTlvRkt9KjZJIzV9V0tASDR6cztwYl8qTEhsVVclYm85bWxNUl9gMGxVKkVtY0dHY1ckcH5APSRjcCVpSEVWeWw8Ql1ST19gO2p8QCxuU3Zm'@;
put 'bTJZNFF6ekp5MiEkcDVMJWU5ZDNHaUJkRn53PGVIW1BGWjp6TEMxWEJ2P0tXTnxGdDUhPjw/aiZKY3JBZ3g9WjddRVkuI14vOHlEVTJ4a2p0TVJyQF5iJnYjUFcjajdSUGRRbDUsNWViKzFhSmhUW2YsWyhFT1gxMiIzSj0xZjo2dl1XaSNHXj52YHtGc188SntDdEAxJUJabl1nalFNU08sbiJj'@;
put 'KXNvPD45dSF+bDxvbW0wd2ExcEpER0JFZUAsVFNHdWBlU0hjNVRLK30qI3l9JlRLcnN6WylTaCU7JmdgdW4lZVJwU1BhWEc3YWIxM0tGdml5WW5+MT5dUlhCVnFaUEdmJGk7R2B1I3Z8PmZfMi9TL0ViODZGeUV0a2hHRENfaFsmamN4QWBqTGorQltwMyJ9IkZqRmovU2VQVn0+ZD9dfiZZI297'@;
put 'NT5IZEFRJnMvKm18M3difXJ1T1RHRV1jeShuXTpXfUw5KDRSQmd+Q1ddYGU2VEUzQ0hkezxULj1ASDgxUkZneEQjNXAvPFd+IWNiIUUkUlhINzo0fi87RnE+JFosVjNXYTJtOjc8eixsbVgyb3hRcGw1S0VEK2tGRndmLHtjZlI+OmhLV0pmRip3TCY6YUNqcHNALHthUyJkQDV7ZW5kNWxJOSt9'@;
put 'dG1rbG1obEoufWA1Ymg7aD5tJmlbcFtkUWN3ZjVvYlh1e1d6Oks6QmMucG5eV1I8JFFaTUw8Tnx+eldNXmplPzBzbFkiNjZsKiV5XjMpbX0hMmVTI3tqPClzXWw0ViIoZmg4P1k9c0F1ViF2VDQ/bDFAYVM8VHNuLFFwSW9fQ05qNnVJSjc6fldWUl97VTEuLFkwYy4zPmg6MFpOeENEdX0uVC8r'@;
put 'cVY2JEc4SSs0eDxieTd8JW5rVVo6PGowKCtRb2Z6OTtxUkYmQ1R+LkpyVVpoRiFLTXdLdlNdeGM0WVI+KEp6KG5RfUxxNEd1PjdFZUgjWVlZNkVdRUlgUGwhUyZuYSVjPWpRd29MTWlybFNVKG4wN3VYb0Q7QU5sVzppMF42OVQzSChfKXRnNE16fkgraSQiXjYzbjVUK1o+VCMzRXwpc1M2ITVd'@;
put 'U013XS4hTUZAb0FmamBXI2VeYkdzPV95Tzl8V3xZUHZ+bWplaEpSbF1wR1UjbF17aHNuQ2Q8OUpURmlefk11TXkhOFl0OSlQIlB2NyNIcGoofWNgZ1cqRy5IfHJCVUxFX0cvan4lOyVbdmRJTD1HXm5ld0ZIak9fPSZUY3FQVyltbn5RQFIkIXw1WVUzX1gzOGx2L2FmIT9DT09ZLjVzS0ZoKz4h'@;
put 'Y3whOTBLazAyK28rMStPX2gjPCg4PkslfTdSVmo5MEFtOVZjK0BLclhydSgiVDFKcSRJaWJVT2hzempuV2FofWhrVFEpSyZxPStQdSVdQ0xncWplV3Y/UnVMfCtofVZDPjpedSwhSns/Lzh4NnNyVTg7bmQvNlAqe2hxN0JqbUAiND08e2N0d1VbX25VfUZYIyhBRWVOYnNWTl5YY290MXFmRGZr'@;
put 'JVZUU3hSb3ouSk9qYzh4KiEjT1ZMQmUmJS9SdlZTYyN3akksIXdBLiVrI0lPN0hGdTAlIyN7MS9odUVFNmpxVF5uWHdrKTlfJV1dIVhXNF9qQDdPRS9bZkJyNyRUMnlhTU0jdGlwWEpKOmpMZGMyRG4sMHU8ZnpSbyFAaF4zdzQ2aj9GLEE2cSZPMHNVUWFSQSQiS2hLKHN+Onp9aUtSVTBiPX10'@;
put 'RkBbZXNAYzZZVmZlQ29MNndpWjh1eStBK2pyS1d5cm5bWVYzZCg1eTUsc3luTWFoWD53XlcmQ0YpJV9VPXZ8TV8iKFFteFFRWHpMITVPRCJgNTgre0MqZFh2IncwJGlkVlJQOHpASk0ocGtGRloudV9CUmpRe0ZSdypRNTNGS1dzd2RwdyxNbklkP3V9UU9peG5mXzJBK2d2cnVveVpCd0wiMm5S'@;
put 'MXdBfmViPnttMys6JG9SUWZzNkUucUxRXj0wKktxSnFiPztuWD8wO3p4MXZ4Pzg/dTltaV9aUk0+ZV82Ijo2eSg+cDp7dUMmc2VrOExqO01gYzJKbS9ofChdYSNAc2xaRilrSTEhaylZTzhhcnVfYi4rLHcmcihOM0xeKjVRQyFsOHpyQm06ZSlfcDdiY0RRPitBJTFFYHRUXixsLzx5dy5ieyRv'@;
put 'bSVycn5QLihHemV2R31TOS9LSTI+LyFUc21yeW42WlpqV3pnXjhYTSpYQmJDMEMzcVFJdDNnJDtjTSZeNVZtO2JVYSt6ZF56QVo3VTA4XmtETmc8fntYY2x5YmIhOEhAb0pWLGlCUnE8aEheOXF4QmwrK28zKlVkVVApfmpZeFlTU1Y+Tz5DOmN0SytjVWtUfDNiODRMPk9sSEk/YF82W0Upc0pO'@;
put 'ZFNfcUguTjorcGRselZlMWdGODdITn0hLixYRFQpMStDJDIkIT03dyYmR0FuWipfO3lVWForK1U8cCxPR0M1RlZWMURQKz0lQCJOdkE+MygoIXNLRjgpSjlFZ0R4LFdyJTlJbyp2fHcwX31IVzJBakA6USs/M1BQfjZlZ1FNNF4vaTxdUWFtblMle2h0KF58P19CSXl8WWsxc0lNe34uIkwhanM1'@;
put 'bH1VWEYwWVJSVVVXLG9DNGFKaHUjLG1QRmc8ZiQ2cmtmbHhQIlhaNU4lcVdWUCEuNVRubDdPWU1RaS9jXUR2OGk2a2twNzNKUkpEc0VeWFdMaUpZXiszdV9aOk8vMVh3K2xfSlJYfHQpaW90LywqQiJVMUJjeE4yaj5TVT1MNV1ZQiI/WlduOkIwfn5gYWAsUDNnYUo0TzNORHcxTXdkOWA6SjYl'@;
put 'YUs4NVZyeVEiMyFuSElYRHVrbVRgJG45X1k/QkpJQj46ZTY8YWZ+KmJpVT19S3FaWml9cmV3OysvT0Fjej98NngrXWpIWiVae3x9T2JWL3N5NWgscyVZZ0tRSFZ5Sz57S2svTGtHc0daSGxyYlNqWDBsJiYsX0hHKlM3R0lYQSpSL1N1RyVmZyZYQ294NE8kbSwpez85Ln5qdXpaZV9+ZT0yK3Ik'@;
put 'cm9uaDFfO0lWI1Fpe2dpRHlgQzhdbSYjMERfW2VaX0RRd1VWLkNWdD43YDZzdH4kZWBRMn0uV3ZRI0xaYn51eVtIYDN6ckY8ezNdZGl9a2ZYZCl5Y2RgV1ojR2BRZj1rW2tLRjp3L0pycTNgW2lTfnAwbTxKeiZNISJGeFU5UE4qQVV9elQjS19QJl0pbV9EfTxJbnJOPTBqLFRmYGZgNTpfdU5Q'@;
put 'd2lkJDllKGwlJiI8Y3VnO3EmPjkiaU8oYTVFaXRAKWgie3FOajRVSnE7OCs6SF0pdTY0THkwYlB4bj10LyJ0fj5seSkpJWJ6b2YhPytyNSEkZlEwOn5EcWU2OGg6TVV7bDFsNV0mVi80TSthTTN0cz5SIlt1b1M3TEcjY1VCMW0zNH0yTmZmZG1tXWpXJWpDJi52Tm1laHRoJGwqY2Nyezd3Q0Bh'@;
put 'QzQhMl9uMSJ5S0dtdUlESVA8MCwoMUBnUnc/L1YyPDpHX01wW1s0U31baCxyeVhFeV1nMVleTGhLUSh3fVRqLyZ4KixMK0cwQkJTcXUlOFFKfTREIXVFXiluXklve1hvUzRUbkN8Ry5qS3o+RF9qUXtjNX1UKDFQaSlKY299MjFqZWZRdlZYQGVzUzVNeih5NCEhdVFHMHdeeHRiWHJEPyZ+azxx'@;
put 'KWskSVZhfGZnWCQkSHd7OllGPCYlKmc0O109aXREO11ecUh2U0BWUmNuaFt2VEA3WTh2dGM7c1I4PGk7RDZJOFlUYWN1OlNmZ09OXWZQZEJ5aT9rfCMmdyNUfDddUH5oNG9gSWY5Om46WC9mNzssQHFCLGgzMVBfSSNRK2c0SG8ye1kqMD5FbE1ra04jcW1Dfj56QHhAQVhIXztMSGg0Q25JU1N9'@;
put 'fVYwL1E1NiFvUWFGKTdbKWtRLjpiZyZCWUw3NiwzMl0pTjJUYTt4O28sc3xRbndyKGl1TUhGen1iJUdWdkskekRKYllJVHMqJS4oVn03YSh4bj02LDooTHc4S1FAOHckV2MhRjR2XnFpMmNlYUdrKVo/V25LYyZdPz56TjhOeSpBI04iWHpXXyVjYGNmZH40OH1qd3lKLms9IVF9YT8hLi9Bajom'@;
put 'Zm9qaS9Bez5BUFUhd1cxbGRVOmU5ZmJ3ZmBAbT1hLkh7TnkzNmozMSxHKzpmKHZHN1ZIRDc+RThkWm5JPVFsRTFVVG10UX5mfi5QNlc+SkMrLyI3PSZEYFcvbHZCP108PW5vUXcpRUhrdXkmJmY0PV9bcGRXVXs2TXNwUCtZI0AsejFZOEVib2tRQiMsWSxreTtUWShFcj55Mn1rVmxQVUQyMXZH'@;
put 'N3VTPVpvMFNsYyhgNjN6UUBRN3Rtcnd1PzxGL2ZrfF11SU1wKm5Vc2Q6Oz9dV0RmaXVYPSlCUHpvYHw1RihKNCMpSVFOOTVvazlmMX1FVHBEKD1DUW5qe3hJS3h6Jj4uWWFPWU5jTHoqLnltbklSPClAR1JWQFlATkBfRDxVU3g0OGVaWHs7dmgySksqdX1GPWU6eiFmMj1TSzs3WStJYzFkS1dd'@;
put 'eU8sYT41Y15IZ2k8RlJPRk8wPXd4RkRHRUErL3NEW3g7dFRQQStAYmpmVjBXMDhidHR5bGV2aTJfUm5BcjVmO2hMR2tORnFfQi9CSm5aYHUsXigsTCV5OXc4LkA/QVFuZUFVSE0zb3hIOSJQaDEpNzgzZnwxUUY4KWIxQz8xN1BlSFNZZXsja0NLfmIvWkM/dDBGdkREVDo1PyMsVCF0OSFHX2lm'@;
put 'bXxdXi4wMChwckxGdWpTKUVDcWN9PF1BX1Z7KTdoOSZtamRdd1cxWX04c0tRPGpFQ3pnUCkkSmY/PFJ+YSI1a3Z3PCFDfnRfa1I0T0lXczREdlh8OixLNlhibiomWDZOPzg9OkdaLEc3cXZSeH1dYkglRUdDJCNVJSpzOlNOXjAxVnpQSi9WNVt+WGtCNnk2OmtmYCFFUzNhdnA3cCwkfURGfHw7'@;
put 'MkohQzR1KkgpRm9nKExxaDddYkIodCYqfUFPQFc/ancjNWhmUCoyPTpURmF8VF1EMjRYWn5dXV8ve3VdTWAqTC5UN0dZISUoIztANXMhTUcqPWVYM1NISCQyOmsiSFpJaFZPW2cvaDM9KmpYZUdLO15ZSFtDdT1QTn1waypNd1tpNkdJPH1yRWxfJDwmfSs7ZC4vPj4+bjhGT0ZAKHN9cSZaXyN0'@;
put 'PyhAeFEiOm5yc0Ise3BLWG18Piw6NzBGL056cWkkeXpxKDgseDIxQFtVMm8uLHgiUDtRbE5hPHl1PDQpajgpK1ljUHwrOSt8amB3LmY5WSUkKmMpUFBbMX5qVHJzR1tzaVIoJSlGbF81Qi55Z3FOcFhNLDFRMGdxSVIuKEBMQHFDQWwlP3U/YHhONDhuV2xyJjVDI0VialZ9MzBqM1UwOitnR1dw'@;
put 'RXtLRz9IWywpMlY1Y3dbSzpxPFpDdE9+IUc1RjZdRmJsPj5oIUlQWTIwezs7L3ZrQGNZPE8kJXRUODVGW1ZLT2dbUzpUOSxPfXh+fGNSQD47MWIkWko2ZW1QOzkiNDlxSFtRd2p8UHt5aStwWD1DOF12LntAa1pMSmp1YltROGZ3NWQldSZaTDwldF12RERsQXxAMngxIlpOPFRjOG9IUFNzejg2'@;
put 'WmpmdkI8NSI6V3w6fUFpNzFPPX13ekVTQD4/dVh3azMrcVpTNHhTWmF+ZmR0InN5XS4sOSNyb0Jnfjo0WnErYk5NdTNpeHZbdFs5TyVSd3Y6N2xNY30sUUxuQ1ErQ28sQXshJlZCeG8vckN7IXooL01aL09EZmR6eS4seX53IzA8cXFUP0Q1ezczaEksaWJAZlhKMDBfKCQ5VFhBPTRgIlZ7JlBI'@;
put 'bzA4TUFDSS87UjxMVTgrJn5XUiFWQno5IzskQjE6c1FUWWhzKCtJRHZLalNvNnIvdE0qY3pETHV2ZV9IblVWblQ8cFgheU1Pey85eEVbJDBdanByYixiZmEiPlB0Wn0sZmh7TFJ5XkVYc2o6REVPKCh8OS9DOjt1RjJLKX5xNF5TYiVYX2xbPS98JWokYGFqbXUvVWpvY3YrTiJYVEJ6LDRFZzJb'@;
put 'PkhoRCtgZUlyfV12YUx7Z0dbV0F+NndZTyZ0TFldXTd2R2QxQz46JiFtPUlNSD9FbmpbK2RnfUxoTkJKZFl3dm8+OXU0QEw0N3JeYVUuK3lySCl5Mi5He3dPWEpLW2s4JEAwO3xpNVlSXkJ5R3M+eCFPaChqfmY9MWF0NWFDL2hVQFsiRm1pZT11YHxUJVosaCIyV0Z1fkJGOU01fWx0YV9QVTMk'@;
put 'LDJtTGd9STBIYT5eIV5jbURtIz4jMWgvYTZrP3R8SHpveUN1VExTYk1beEgjQzUrbFthdFBHQyVrbENhRl5WU11pOXxTOUN0Y00ydjBtOD5sPzk4IlZvVTZUNWlqanlJekd1WDFaPl5DVT0kLztPJE9DTHdPcno3ZSkxZTgqblNGZ1FZfnRXQGI+N2xCLnxxP012RnRbX241MUtJdmoxSX0hSCtv'@;
put 'TTBYZTdMWFJ2YkdhMFUzP0JBX2koeEw5bH59NlNkQ2hURT9qekUhSk97cEZCRCxIPlMhKH4obSZBZ1BfZGxdOFd6dXtfXyVGPHN+IkpmRkdaVEA+fSU+cVp5cWxQb3tlS3d+WnRyfnd6dGV1LmdqaVVYcGcwdkRuVzskQyIxNm58JC44YE9FdzhHdmJJNiUheUFmV19PRTJnQ2k9YD1kOkA5bHxM'@;
put 'IU1bTn5ZdWpaQ3wsYVM0WnB2UGFJdU9zezxGKzt+X2ApJHA+M1QsWFIqS0ptQj97fj1QbCF4JEhbWjpmOFdKbXViPiZAeEIqdXE0d3R7InRlMCZXMEB7eURMMXxHTVU6SCkyfkNMTXpmL201cV4oKHxUIld2RiVud01mfHZqU00wQ1Q3LmhvX3U8SjN5W3dAJkthIWY/fXUuWytCY1dkQHxacW9N'@;
put 'ZjE7P1J1JTd6VCJ3WnxnZDd3QVZ5VC9VajNDQUpUWXwxcVhANGF1b2g5OzJYdUc8NENndXo4ZU9SISZLYWIrRlgvIWB9OHF+Y3o9fl1jMi9qWkBxKS5aNTcpWmFeYzxWbTBpV2FodyMjc2hfaG0pTnZ3LCtHcSxAW0xSVn45SldIJTBTLmRITEQpX3p8JiMiZWJTWFFONy9sQ3A4JlJvSXxLS1Z9'@;
put 'XjA9dUU8Km9iY2JmZlp2NHQlcVlVQypfYVgicThhM1ckbnwmSF92YlNgUHU3OF9DU19AQlZsPUw4IXlgN3UrTS9xVkNEeDw4cDVrWi5DXUpEdTpPNmd+a2BMXVNYUjFIS09MbFM1VTtIcXhJNE5UVHN7enYxcWA2Zz9SWjg9cz90K3c2OzUsPj5YODZpV3cjQV5mVmhGQS5rbyxVOGl+b1p+M3oz'@;
put 'VkZNc0cxay5GPkdlNHMpWFpsaHlQWmh8cWRFbmwqNEJYJERWPzVqMVpDTmZEXyh6IVJWYWN4dSpySSpvXmRAIiRjImEpQlZaRV8oLkJYdlhXXWJiPTtaaG57I1RoTylOMVZvJnsxPjczSXZEO2dGYDMwZjdZMFVOJFJ8SUNFcGo8a1toeit7IUIvP0BhaW9yWUhWK0IrSXQ9T2hyK1tuLiFMRkk3'@;
put 'VjpiWDBRKHtOciUhK3soQXpmTVllKDxvenw6R0lGQz4oQD41Z0s9Z2NjIVlgJjV5TWVzKyZmfUw1VVVtR3Z9KW9Pb2ljR3cqO2FoYikjezIwUEl3WE9KUWF8RnExMUk5cWxQZko5QUlpZk5kU1FJWW11SGMrWW8/ZFAxaSpLU1NRQFlGIlM8MiJRRnt5YnpQPFNhIkhPRVVscTVhM2RnT3BuXjJA'@;
put 'RlhsO1pdZDhdSCUvQ1dCVldTYEo2XUhBNEJ7QC8hTms1aD9KezspaTY2XXBkREQsMi5VcFRLNDc7JjQwS2ZIWGMpY2VjOWVNdEAzX2YhJlRDamJ4NiVYcjdEInk1UVhxbXpZa0U5bXlsS0hCXn5GfEg5QDc0VjpuUT43QGF9RFJXSXkjOj1WMnlEcFBtWE1GbCljbVVdJTdzXzYkRkV5OGVGPW1J'@;
put 'W09tTHJvcGM3RUQsU3NwUm5qcHpbMUZbRFZNUiNGfkYuQTs8M0JwKjxpc14vZCJNNkt2Sn1CaGJ6IURBPkByOEMpRXppRCt1RyI9YG5VZ1lndT0/WVdhIio3enEiakxdYVsiaz1TVSp5K2o7blglWmx0QSglRD1SYCxFX25HfWokcFplMTVJTV1gKFRmczA4NiRoYiRkW1I9LzlHRmo5ajVNcyp5'@;
put 'azVhOSpYMyJGTW1VNXZAaXshcWNNcH4xcllDPWtYRjYwKU58S3RnUlo+WFNIUDx4LnNpYypeVGshXkxKPnw+WDorK2VJRGRpVGA4d2pkWXsjK1ZAPFgmNXtacnsxeG1ueX1PO35tcjtEbH4/fn55dn4xREZPKCVUSHczVFNXJV9yfEZXfTpSam5eayVxW3s5TypQOmglbig8Q01ZQXRtUSEzKVhE'@;
put 'REUscVFDb2xVYSowbG4uPnsrTDpCYy4ydkdlbFtveXsrLztZTmV3XWsjTSJqQFJDNVMzaXdkdz9WNiJbQDU2PWA2KGUqMiRQRjlTbGJwcDQ0Q0VbLlRPSyhUIjsjJGBhIlhjZTxnaTdRPUg/P0EqSm0zSXNEaGNAQktIW3lfUHV0ZEJEbFoiIjtZSGZPdVNjZDFGJmohc3hMeUhQWUFqd0w0K24j'@;
put 'SW9laGt3ckF2VzksMTtmMU5OMUUlI0BYPz46WWRUcG5EZiFOUjpffEZbLDEwOzdfSEJFW2hbRi9NJCohbE4mdkhnUnBlJnBdTntKXzY2ZlpKTytoK3lxTCtLbD0lbEh0N2YkbWt3NSR4fD1WczVTQm82PjtuWDc6ITpCTl06aig+X0hQa0smazZNLGpMYHI5MGdXeE1ScFI3OT1ARDwhOHt4KDdk'@;
put 'flZUSzFPOXx9QH13fSwjUD44REZEbW1SdmxOJXZMVXo6N30zbV9qeiNrcUE3Ll5aQm9Ta34vNEBaemZOdVsyTl9fbXxXUF1wYWNtTmRFcjd0P0tCNTY8NHJrX0diMjskcS8xZz1HXShWWWcwWDhOakBPTXUuUH1CQkJWP2ghPFUiTjhNRz90SilJY0xkZ0pFQSlNfjtyTX48REcpPXc+RmY8UXsx'@;
put 'NUlsKUdPb04/ISZbWSI8d0deZGg7UWtlPGlSSExmNEdSP0k8JHp4bnolZmdZMTBEQ11MQ3wubigme0c3dVVlME9TIWhMKUFBem1eNywpK204QGxNbyFqfTlxM2VSXXJKdXspSF59OzplV314dE5NSXVvcT09cTtkVToqJmpAVCZ5YEAqQHJjQSY9MGJ0cmxKPW1ZMVAjfCxPOV5qMnBRUX01X3Fx'@;
put 'ZCltPiNFbF0wfDpAK048YWQlI3Q9MVNtUjoufk1ZK2J0OS8/QiJuTHZdKj8hOEU0RE0kTiZnYGt2O0M9JlpqVWFxeD1mfT9relcoZmdeTlZrUmNgWzU8O1hyaiRZfCVsSm50dlprUjx9dj0sfkBEJC9db1BaSXovO193bCIlRWBlTi92YX4jTUFaPmdZSihQYkdecWdPWHd3STQoUkpuM1J5cTRW'@;
put 'RS4weDtWQERGb0pdPS9EOkY/Q0x0azQsaTFjNlZoI2ZaeUtAan5tUStmbytNQUshUiRjVm0yLlBfN1M4cT89WUpYcmNBI1VrJFd8IXdbW28uIyhvJEl2YCZWPG8+VkcpQi45flBMNlJzNzYmR01Sd1FQW1NfNXQqakdfMTg6X0ooJElNKWJEZylrPUorWHlWZDA7NXEjR31XaF5GU2E5XjZSSmdi'@;
put 'RShGakFwRTRSbGVyVlgzNWt8RXIrKntuM0loMDYuPFhFdlpVU088aShfXix0eWdqTWclQFVDfTMpMStDQXJTVykvbSUuQHN9ej05dSkpJHJkcHtYdSEvTTojP2t2Iz9wQkwmV1YrcC5RI0E3IS59enxLdGEycVl9L3xWNEpZJENkcFRJSDFeSi4oezNtP1IoeDw+YmpXYTxtdlpHOSphLCJHcl9a'@;
put 'MSZKQHUhT2tMRkk9aC4mNyhVfCFDVFRJUTEuM3B8JixOcjhOVFhVNlhmJEFvI0VSWTlTJEtYS29BI1kyYFRbLzp3XTw1TGldTyJBXX54KSI7M2FjU0N2cS92KERSbEJZPDlJRDQxNHxvVTlVMlJhP0htSz9PcC5hS0lgdkMpU1tieH5Pelg/P1ZeJSVVTlBubll9TnkwdVBSWjlMPSVSaEFndCtC'@;
put 'RmY0akFqWkZCcmpQTy9NNTV3JXtzakFAUj9fWm58WSVWWV9oIUY0YyYhRTx+c3xvRigpKVVSQFV2K2FJZUgmX3J3dlhzM1BiakhoI2YmVUgmJGc0akYuRUd5JC5KfDY4Y0BubEs9c1E9LGY4c1k/PXhVYVZeUD5kWy5vZS47fCZXd0w1e28jYCtQOVFfaiguVDBKZyNWIi9NU25EWno3MUsjSio0'@;
put 'fUYsX2xSVT5tWTRUT3hvezIhdW5aTDxlQjg6eHhKaj13SUVicmFzZm5la0x4d2BJSFFGM01OP3RifTNISUxJRGB7fkNxayE0SVowMTxTWXVGUEQkZm5ObyQsaiRRUjNjbURMJDUqNyN0aSlUOGpbXy9RbXpoZTF9M3BIeU89dClLbGpsTWVDV087WlJObDpxU3tFKWE0XSt3I2U9PEhxNFFOQjo6'@;
put 'ZyZrT2BdeWFJSVE+ay9xbGlvZitvbXZBLmtvNik8eD55IVdPUDJHLktHaFlVQHxjK0RRLlJpdFtCRjpvfkI7MHh9QD9xantQIUZDO2EsfSZkRl4vTGAmc2smIXhiNTkqUER5Z1MiT0lIZzdoMztlPkcmOltmP3gvdUI/V3U9MV1MUi4iKUZDQHJQMG8ubW11cU1bfXVYel1+Xm5zbVhmRUJBdXtj'@;
put 'LjQvOywhPUVVXlNlUkdAWE9kM0lCeSQycSprYFhzQHM1YDp9PWNSMSshUlkvd2VUTndtMClJNzJDbTUmJmh7IiklM2RIPzAiKC8qIldRNns/UEV2ND1uTkdXd3ROJXdyMTNUaEZhVj82Q1thZ3pMRTBRKjhbSkF4YSgsKFdrIlIiL0k6fUF+OGs8OzhEZiQhc0Vne0VkdzxNbzJDJXd4NkllODAj'@;
put 'Q0p7VWtxPlIoVUJhKSxMNUR4SVRXKS87OCM/SSkkbzQzRS5sJU0wTC53InN5MV0/XVFEfGlXeHgrMjA1RCVkP3MhUzB2YFpRNHJoNlUlZmsyUWM8ITYxWSxqdX5gKi91T3Q7Z1hRRDphMT8kcDhIMyJwKWteRXl7MXFAaF5iVCZLRXJWYEhaL2I5PD1MR1QzSWIjdUpPNDJTVlEvTipmQER+KXBP'@;
put 'bmlDajVieXlxeEchPUk4YFFvZUc0MDZpXWdlRCoxUCR9TTF4WEdhZjBpU0woMSVBSiRNZ3wlLDduWF81fEJmOGFheypbTDp2Y2IjLkpQbls9a3NIbGhGYmhyVkREMjxYJmYwaGkjUXo6MjM1I28mNXpFIzBGZjZnakc7KWY0RjdLfn5xODR9MyFidSx3L3Z1UjtXa0psMGZje3h0P0JINWElfjVe'@;
put 'WSU3USJkRyEkRUgoR1ZneVY3cXomNTZJI0Z0LEhETmM7NmJRciE2USVYUzkiZXYpNW8rcj03KmEyVCNVSmBjXzpzTyl9JlckRX1RYjYvMyIjRUtYZmRrd3ZWckhCTHthTiQwYS5HNiNqPVcsMExUPV1wSyZ3YXxxcjdgN2VxMS5wZS4mPiRuKDwlQmUrYElbRDhkLGQ4PCRfK1F9dS5hSTgycnNK'@;
put 'Uj5UeTNOLEpLV2crPUI6QjNXQ1ZSYTdkWl5mbSxWOWcrP1B3Vz94KGY+PCFzYFs0ZlNjayVQZSZyVTdZKT9OWCQyI3lfW140dW59T3F0SmxpInV2Sz1bT3hES09+MzVVNTI+YVckOGtCZis/TDROVCMmMiJZQ305YTB9MylyNyIjI0shKml7aXFDaDN0VzUoQH1GcW15akt9Kk85R2oxanwkbHtu'@;
put 'ME1jZ1h4bUUyY2ZgeEJpKStzZ1VCZS9BMEksSC9ENERTVnNeS0I/O3BdeUhQXmVadEE5MFRLRFpyW3MxYWl1cF8weigiYWBdMiZxSEprNyQmXlspfVpqUGFgQl9Bc0s8NkpvfWA7V3VDYUx8WXV2Vi9IWElBP3Q2Iy93MWpYdEJmS3hbUkVyRCtgPGtJLkM/OVN3PUckX0VCRXImT0ciRmNsPzom'@;
put 'VnQ+YTJAJDtVL3NBZGc4UDR8WmYjbXwyNHNqXzpUQm47V0xlK3RdbzoxInU6N31mSi83UCRaWyJjbVZKS0lDUTBzRD0xIihTRlRkcWNOI2ZwKzBkV0ZkRmc7UmV7bE5xZzpyaW9Hc3VVSjs7Sl5hIXElLmEuaWQsSmVaXV5xfDxefFJmXzN0cnQmP0QofDc1aV5dVUZaWEdNUj0+YH1SKls8dnxm'@;
put 'Z2doKy5Palh0OGB3JkMvQ2gwNmN1LHNLQV1QW0hZJWIjT3ZAa217Rl5USDNTZEFPNVJWJE0xU3okZExWWmQkRSY1KUF5VVFMeyJsMiUyUl8rSzVOKWByS3VdeE8+LE1wZV5oamhmMkU3VCV7IzBkb3hnSz5GR15qIy9wJXNRRC9UXnMwfXZObS5bcGwzQjN2Ol5Tak1OL0d7b3NiPVMhdlhNVTZx'@;
put 'T3Vibi94LmxSSHcpY1U/SUBsbVh7UDcyZHtfcTdQUzxaWkZKREguamtyP3FYNkZ1X3hCSlVRUF5obUovTHR+ejZqMmckWG5QQEB1d3cjRCohcmV1eEU/clUoKiJgYWVeKWNjaXgsSzskLEwhU0ZeQkRDZyUqL2VDOm9fYitoUFheSCYvcGx4OFRKYFFVa29HPHxjPz1CWT4+JStFOzxuJHcpYlJ6'@;
put 'aGw0W2lbZHtrMXdCeXV1dHlubVp2dnJ0azgoTjZaL052P3JVP2F1ZzE4XkcvWUdEVWFEcmJ+VC8jNThgb2pUVW16QnZCU3Q1Wz5bcjN8a09pKlhuSk5uPExrI1QrRE55QWpPZT1+QXxafCZmQX4mZi97eGY0IW4rOUx5cjpeO1dES3FAVUVVL0phWDhOQUg7KHJFbX41aiQoYVc7JCxoc3RDIW1T'@;
put 'NytQc1VTLy4/KUc1Yi9vP209TGdIIktXRjtdW2J0Ljs1YCJgTDwyJjskM0NGSDlgTX1MM1gpTTxgPCFPP0psPUQqY1I7QT0qa2VuNE05SEZ3MyV3WXZ0KCY0Y2VJNix3bEM/R31eRkk7ZWt1Wkl+VEd3dldKLnYqTiJ9S1Q3SlR3TiVrMSg8L3w9SnZ0Pj9RZktqV3tTfSkuI0AkNmJza1RdPzNe'@;
put 'TF0lYz1KfDlbQlNdVXpFYW81alpBVUFLUzEjZnMlTlUwamRsK2FVeGUvbG9CV11IMWRqIzY4TTNyK1F5N08vZUBycXU6KzVEQitAaD5yOkA+YDxIWFhfUyZYUUckO3YscFZaR0BXZTgwV296fltidHNVVjRoe3FkaCI9bHNLWTBVW3R2PDtbbCM6by40YCN4Zjcyanc/OiVXby8sblUmUUIrPWNH'@;
put 'Lkh8d01MLF9OODt2YkAxWXkuZVJUTCxeZ2JienBeU0xZI1N6YkBUUS8iZjx6UCtQKUl7em4+Z1grXWxYJjRlLGZwPktnOD5kUlkzYDhDcCNZODVaPU9uXzJ+SlBJeGcvP2E/PTkqXzZuQURTUFR3I2ZlJTZuQUt2M2YmMVozSDxUJi93LCI8bG9OOkNZWFN6cmslbWFNWTA/Nlc7RXluaVVreiQ8'@;
put 'NkMsJEJTU0tCLyUoKjMmMmtPfWVyPUJibUVkbkk4WVsqPSQ2SXBwKHFHWEZ1a0diNE9qamREPG00YXRtMmoxM2x0U34oXiIpI0tNMXJVI0AuWkBtc1VfT3huLFI9VnAlOTFEZGs/R3twLilNPyxYU0RxPWB2fXFkUzN4aF9PW358YkFdRWk6VE9gMEZiMDNhK24kU2VvV0VLOHNsKCt9fUtGQSwl'@;
put 'cV90Zmp1cW1YKnk9VWkveUNdeEhhRE9xJl5CTmhORClnRnEmSzl3aHpecX53PGBOLHNqO3N4Xm5waWgwSiRxPWVnTCl7Nn5vb2Y4QGUyVSIpNmB9MjlLKl8uZCVYOVcwQ1J2QFthbFZbP2dvLzFkbi4mTGAyakllUT4maGo2KndsbTkhfDAmR2tfJHxhUD1peSF2dU9CeUhbLFJsekUoOVgzbnll'@;
put 'MFZwKEs0e2YmKnYqfDxfSE1+cVpER2QkKTNMNXYvTyg8bVdmTTMhZT45flQ6JDVFLjV5WTMlQjdYOGI8UWd8XUB7ODppWDQ7Pk4vc1Z6cjJocT5KNjchP28ofj1FfDtUSnhBfV80azFVPz5hVDBzJHgjey9gaSFHNjF3JXt7fn15KmA6KSVeOl1mUmt9T1N3NyVUJUk6NSU6JDdrcHY5ZWc+K2wm'@;
put 'TE9heipHUTdaLGkqOUZuYD9tayZKSEdNeHpJZ1YrOHJMTk0rNE1mOjh+ZDVdV1FTRz5IWXkkZXR3VDFUVnlGXTRnR11dZTlbYnVPLkNMIVgoXVksOGM4W2JxOlgwaEM5JGZVez9GdjN8fW5KT31JIlIwWkgzbTdBM0d+Mzh+dVMjOGFMU2AkVzk7cjBoRGJsKH5te3I1OEYxbU0qOW9Xc29AQUUx'@;
put 'XVtDITVXVns5NUtzSVFtZCRuJUNMUjtANlpRXTA1O0BPP1NSI3VQaV0wL21WLD5AKHxATD9MQXBndCNJSCZJODA+fXtecG9nNGcpbldCbVRbbzdySzRdW019ZUQhbXQrejsoelovQD9AU25ZN1spTH0lRGcxckRTZU85Y3MsWzBqSFlgKSI+JGtILklgP3QuUltAOnY4b2M9UW05KDNpa3d2OiRt'@;
put 'VHFIKT9tJGc2UEosNTR3eFo1SSF4enhDXyk9Mm5gYF8uOy8rdDkjOWhFdVcwM2IyO1gmTytmQFZoZV4rPSZQcS57cGVdIjNxcm1nVmVYOENQTyVOJXcmV15jJDV2VGpOTFRlIWove0hlPDZHU31jZlkvZWZWaSJ6U2hhb0NjOTNTRXBHbXxjOVJALjBPLl8vYT8xcVg5SF4pO3pRSVNLOmVXMX5q'@;
put 'XlQkSm5mcykiLkFdNCs8YDBQPzFJRXN6X3wjSER1aWpnUTE+ZiE1QjM8aiw5c1U2YDhAI0RGVFhveUF7KlpCLEooXyZGSnp5JiklMnNzVT1oMkhZcyZVZ3U+aj1wN0BiMXY2Y19QKj9dTXpvaklZNS5VIlVqMHlIeyNzbyJRZFhQNGsxX344Q2V5KTROVC9gSGdXZz42Wmd4ITZKK09QdDdmR0JK'@;
put 'a2NCYmplM2p5fERmNSUlP3diOnh0YzxvdUJAeU9rV1QuaSRhYWdMOEROJmEyOGghVGM2L1F8bzRHKnJqJX0oQXpRSVMrRUchOFl1SUBMaHorM3MwOVpqUW5yeVFnVmwyfjpZJkp9YU94SytLd3xgSURCQ1FaZk98OkZoblJUM0ZGRntbTWVqLzlrYShvTj91fk82KmxKaEtOfV51WTlHUXR6fEEv'@;
put 'U2NdQipvaDkoZzwxKCI3bCRGXUdxSnVFX102ZXZbJWcoUHc/Sk5QfW0mZiwqME4sKjd8bT0wPzlsdWUqTjQmM0B6TDhdSGovLlUpWW5FTiskWGFra1sxMWwka10pSD5FTFJgOU4rN1Z4QltaL0h1d0h6X3xYRSxUaWZzVU9sPVIlQkR7ezksbiFxYF8zTEhIcVZLSG04W29HbUtUQGA4bUgrNGJV'@;
put 'am9VaGNMWV8zcG1aT1RLbztzU09qdDttVStbLjBIIzgvMlNMU3ImOFJWckFMI1sqL14rK0klalp3VF5kcl13VzNSN3s0fVZbOmFeSV5LbjZMNWVfR2lGIW8/OTBUfiM6WSNfKVlrVGokTFVGUWBnYTB0al1wJXJka3BwSlVqJFVKMWJiR2EvPm5+ISQpaEs9aWIpVUpyT15QJjBhLF0hLlJrcihj'@;
put 'aF00M3A3aCh8SyY5UnU9LFpNayhFRTRfaF9uc2tgWyRMKnFsdlJ1I11tV1BlKFFhKyR9SElRVi9UUHRSRSlDUCZQJlA/Ojp7ZFU1RCM7P2Z7O30lYnhFckpzZCQ4WGUlRlNye11weSoiKFJVYCY4OnVVSzZLUG89NFJ1YiokfEgyZ2o5WGNyJTFPfl1xTWtUQT55JmJULCIsQ0hAOV5NZnYsakxv'@;
put 'XissWVIuYCYwKStOW2tzT3dleCI1Mj9JekVeNG1IJE9kcCU2byYsfVRbTGlmKyE+Z2hpZWFdWVYxa3J+cCNwLC9zZzM0fVJGTGVNLmEkcSJuLiolWVUpWi9peFBHO2hFSUBEQHNWMTslWXpVIyZqfVBDVD9pJGw+ZiJ7KyV4JCJ7THVdKzZMMWVfcDE+flReZ2o8cVdvajIueXt1fmMkdT4wO3dV'@;
put 'Nn5Zak9aJV16QkRPSEdJSGNMcFpYM2EuUFJielIsXW9MOiJkbVNdd2o8MUskOz0lbz99b3EmdzZJSnVidzxHcFAxY3htdTo5I01qOVleTzJMP2xqW3ZBWkVgcTZWOC5XLFE8YD5ZaT5wPSs/amBbTW81OT55JGBCRntuMj1AcFFYWkx6PFt5ajV0bSU4S203PUBYTiNjV3NVRCZ2TzouJEZnTzZL'@;
put 'KztORTZOLjY4ayFsYW9FN0AoZE4se2x2fkRqRW0oKldJK2pxalZEN1lTeWw9RD1dKlF5bWROUXxDRHojQFV7e2tsclBCY3hldVliaX5OWm18Sk84KEBgMk1YQktMTSpALntHKHtFUjBmNUBBUDojOTteRjo9XmV6Oyk1X1o8M2dXcUdocXlRJjNwPWlefFQoZSglaiV5IVRJTCosIUBfOkAmfW81'@;
put 'PGBNW0VafChjRzRoRyYlcU95bDZRUl8vfHE7dW0uOl9ndHxiVno+OW4pWioiemNqNmNdTk1VKm8jQylUZ0ZDLGZ0JmMsL110WHhCPipwdWhDbmN9PUNjW3BvPHAzL2JvQXFTRHxvJCVUS25GRVBoYT9CdypvR2UvdEsoND0hPWxqJXtsO2NUNGFXcDNPc2FRYzNPc3Z9Lmo7Nj9uNEVacEF9ZDwp'@;
put 'MXJqLj97Tk9IczR3QCY9c3hkUH56KHBLQV9bcGokQUVhPl46Uy8qNUBBVTRuQVVfW1Asc2prWCx1ZiU1UFpoKiF5T3E5Y1l3KGZvKSVqQUpgOEtnZywxPmlvYFc+ZHdAbnVSJVI/PzoqbiwhbUdbeVlYVUBiSXA8U0suMHJ1dE1iVntWWEUzKzdyKzgsWk4sbG19PWB8UEZyXnlOTzQsdEtSRm55'@;
put 'Lj89IX4ldFFhOE5daUd5MTMsRGRJTltEaWt8aX5SYko2PXJwV1FlaktXJDBPMUd4YGQ/VlF+eD1GTHpoRS5rZip6N1FzfGJRdUBdazZ2dil5Y3RwOUk+P0p8bWhaUTlNe19bTTNfVXx0LiZ1WyFeX155OmwrIz89cG13bFpHTGtaJTwrUmx3OltUNj9oTU1KP1shXVc6TXcwSVdRVGkjSEh4R3sv'@;
put 'ZX1TISl6U3ZrRzs1dVshVTxXVj9YZ1YjNihwQEBxRih1al1NWW53bCRORiNAXUA0ZzVMSmUqcmh1LDpubzk8WGxVLGE1c3kkcTZ1d0J8cGtPYEdIXi5jRV12VWlPezNJUTFJR3J1TV4wKSojJmpSR11+fC4kam0ydldibHlSXnxdXW4uNUEoLjNsPT5rMWFmLCU+dVV9c29ReFBoYCU8U0M+LiEz'@;
put 'OmBRbitgaVJ0amZ4MF0jUz5LWiVrYTErYUNKdTJoR0lLM2cpVTBGaisxYjkoOVdNdVVwJDY4Vj5NZ2Q8RGFKQHk3UTBGUDcyfkk/WUApQD9uWzw7KHJyJStuQ3RmJlMvbEFdU19LJjB+eElmKnYhM0xrPntaW08xc3hJWzgvUFZgbk1LXl4uZSgqMk42O08xUTB1VWwoWz8wdHpNX25jLzZHNkVt'@;
put 'P0BSYSFQdmtoOGVEWiNQcjJPNiZFYnxNVmkkNTssOjMiLEZCNDY4ZkAuN1tHWTpTbGkzcnhWQ2k4TFVTJWZ5bUw7PEE/LEArbz9PY3ZzSVklXW50b0w6WncrSSZQZ0hkWEV4Xkl0S0UpSGBwLDJkQ3F9NFo1NFoiO04wOXEvQCtPQWIwKiI+KF5iZilsPjtsNjpZLGRFXXtOPzBBNT5nU1UxUEhm'@;
put 'Tj1ldH46cCpuQVg6NHIkMU9nczwqOV93S11AfkpzMCxbMGNyLm4+UlMwNm8lMHRRL0NaNnU1cmlVUUc7a29KPCMlT0t2KmxgWXQsP1JeW1IqUipSSVldfkh+VGp1YTxwVmh5RUN2eXAsI2VVZ1p0JnliUmdQUllRZ1YpaEs8dUJvYDlRYT9uXkJTUlJrcSJQbyo9WiJoUVhOXXEzQVc3JDEvLixW'@;
put 'ZSJaOzBeaGwxQmhYMXkxbG8lbztNU1UyYVAxVTFiUTNnXls3UVRFME9adiVtcnVCQFFnWEhZTjZ6VWZUMGFXIn1rPUJEZn1tIyUufjIqazhvR0R3KjtpQUdAWn46TzpBbUpoV0licnVtTENVdk01dTNwKj9OYGhhJmE4UGk4VVckPkVtdkA3MClMbD8hPCQ8aDtwLi8+I2ZgWjxofGVnWV5uOX57'@;
put 'QnBXNyxjWH48e2c4fG9rYTghJiU2SnZnRjtkJjY4OCs7XXosY3V5bVRmd0lmfTo9MCU2Lz9IbGp+RDVeVlJoMEZQPnRMZjcsOGxGaEp4MTg0QjNGI0xiNWZFQEQmdy5xRUQlLzNLI3ciXVIrSV1eT3ZOYSlMcF9CO1JFZk4heDZsN1FjeE55WSY+TmxjaCM/WEAmN2p+JVFnKWZIezlfNmopSFtO'@;
put 'fmtZe31GInUiXi9+ejVFTUVDQi5Kak9wc3d7QWlZa3hhYWt0OU0uSSFMNmglK2ZiTHk4Ok8wP0I5LmEqITZPQjlDNU9jRWZGM1l1JCxpM10yXStXN1BbYFhNWzoqdT19dyx0OjZ9S0tsYCpneGRFMjQrQyI/ISppdSVGRTF2NmFWPWdHV0QpZDRrI3VbImI+bE9zVFJpVUBdQlRzYn1NYyphQEh3'@;
put 'YmlLXTtka0lSZEdqa0QzZ0Z+e2ReJGspMjcjQj9RKnt0WjR5Tno8KHhSIWJRcFV4RXg9TlAxdS4wc2FpSGxEYklnTS5bPzBtPXl9PDZMJkw3Iz5iNztuVm14MTo8US5DQU8zaDFGcFgzaDFGODdfTHo9KXQ3ezNnKFBII148UCo+OVpydSwzJixtYiRYK1khfWVvZGpxNkkzQntnMlQ8PSQsUTI2'@;
put 'ZXxeMipFOHhvckVTWEFxeCksVm1oNzN5Y14oTXVPXishbmYrN2NMa0M+Py5kPnQvYFRfWGslfjFKYCo7OHI3TWZ8elZySjtgO0lYRCYjIThbK29HUCVze2dFNm0wKXBaNjIvXTU/SjIlLHRtOERza1FQZ3EmfGdnSG9JbjVrW2JGSjF2NXpJZDRFWThBYThsU0Nrfms9czplSjRxXkw/YHBdMUI1'@;
put 'dGdkKVNKSy9vcCtyYT0oVnhgcXw7KiojWVJbKmBDc0VkZE1WQHxWW3smeTN9fmEmd144XiNVL25DbktaN3FzMnwsKSxiJEorN2xLb1tJTUV5fHxPcCpCVmFLVihCVjt0MnhSR0orcDsyO2oham0hVWljUWdAVW0iTiVqIThPcXRBOiouMWZQVHJaWktKYil7UCUySzFhNGdAe0orbGEhYSpWM2do'@;
put 'MzQyUyJ8XUNXNiM3XissO3ExJWlCdHFdKjZ0eDRAYD01WTBEZCJvdk80WER6dUdFYWFLam9LPWNhdk83Y1QwUEdVKi8/dTZEXjJ8S2Apc1deKl1VWXlQbXB1TmNHIz1vaF44RklPKDNNaCViSCoiKUB3Zz88KU5aYlJhIk1aU1FtZ0wwZltwTWchKzByfHg0JCEoTXdyWU0rIlNVZW8rMHxSb1ow'@;
put 'Tzw5PSR1XShXWUc8RyUkQ1JgVF5OVShvLCpOYXhwbGl2b21gNklLdmNQVWhXVXpfQT00cjNSIixxQltUandNelAoYV5GTjh7OGQ1USVoNF9lfEVzMVhGJWBXQl1KWyJmW0B5NU8jPSZlVlcrJWFQMWJdTiUvWDFVemA6VmsyfEQjM0dpR0wrOXZKUVM+YyRFa1A9MGdANiV2cF5jZTd8ekxAa2h2'@;
put 'THskI2x7MSEuPXQ7WXo0ZXduSX0/UFZuN01YPmh6S2RKNSYqP3kmXTlhbnB9Z21Wcix1SXJVViw6dEFlSWdOSyZSY01SMDhqbkh1dWVaOT5AUXg1XlRCb2E7VEE8KyV1LjIhXl4id1tLNCxXSG5GaTwmJEQ8MVVLK30rV0BUX3lyNzJXKmZIdGIlN0ckenRDYGhFR2ZWYjZDL2hoUCZzMyJuKDdf'@;
put 'R0xVbmtuNyE1SipsVkApTTxaOWJ8QGdDKkI2Jj5iLmhrUihEV2lCdFU1cGBAfUVqSCsxWSRIQ0Bkc0d5ZnVEYCNRYmNwOSRoLk0+O0V8UGReK1pzQTtaUi85dGVkN0t2fCFQQjM7OX1oViQkPz1BW0R+VFI8LzgvTjdaYWNQM2guRWR8e2QkX343cGclTFsubzgua19hLko7WTRwYjgyaThjN3R4'@;
put 'RDQsaU96ckxGK0txck15S0tUK2NaTmE6MkNacWtoeC8hM0BfLjE8Ii9eK3VoIlV7eWFIIVg5K0Z3YiVEcy8rXXhIJV5NbHZ3Vj1zcGtvPlE1R31genVxZyx2eWNJL1QhUkF7PiY1RCgrTltdZWpLWkcqJltuXl55Ky5aX1c0Mypaels9ajIrK2k/bV5lIklobkc1WWo+TX1rYkQ2fHcxQWl+OElY'@;
put 'bGR+NUJ4VG1bQENQK3Q3OyFQcl5zNGw7cTl8a0w3STs+NnV7PS5DRjRDQ2BOWllAWWlxRXM/UDM5bzIuZUVEJHNmZXBYRCtHMSpAfSY7KDJLL0soOlJgOUJVLlRYWF9VeX5YRU15bTlJWTB1fCl7eDYrOkZgRWZ0Xj9bOVcpMV83UFJnSVlDQFUzVEhnelFCNkxCX3ReQkZ+diZlX2ZkVXI2YVg8'@;
put 'bzJSTHlPZmheeV9pOT41WDAlSD84RHNASGBPRSN2PXhPTFVZbHJ9LztNPlVtYXMmPlowcjlTUnUlc34zNnsjKXBUYilJI0UyYntWI3omXVFzSEwuYXQ7UWhsbUdCfDwoJFdVZHZEMzFFXyNxbjRYaXRCNWYrTGpQNDdfeTFXLjN8XV5mSHlnTDtuMzMqWCsqTT1uRipkNUUwKXx7TT86U20oInMu'@;
put 'cWVbJSUpdFlzKSRvLjs5KTIvZkpmSGBmUTJaRjssZik1NGNYQlloT0BUfUJzLiQ8YylUaThKN0JrUklVeDQ+cm51a0UkQjpUJDs1Km1VRXZOc1ImbSFPXX5ofW9oO3I2OjYvJURJfnhXSWQkeyFifHY6NDU8aTFWZDl5Xz9LMCk1SDp0Kkw8VkYwbyV2YCUvV3FyP3hKYyVEMFU3I0o+O1lJZFNI'@;
put 'PSEsODFbS1AxUVZWVTpjZ1ZWVXZoJipAQDYwaT44R2Q9PXQ+RT1YK1dTYGltPDtdYSFEVV1IY24zIzs7My4mUSZ4bFA0L3MkPW1zNjwvbGxkMV9OPFkwK1ImWVp3QT4mXk9GLE5xSnJEfmVRWVRpK25vOWFoX2FzL0B2fXl1SVpMQ1J2UHFGUCpsK3xJRz18QVNzLCtaczNAIkdKdix2ejI8Vl9h'@;
put 'bzEyKEYlMXV1UVl0d25WTUBeZChaUHI2dU5sZD1sWH4pZVkrfmhoNDRfVGM5YEJEY2pWNzVfc1lXaV1qXTtfQ1goekV7I0RYeXFJfVM6MkVnays7KDt7PG5kdixQSjx6PiVbYjtYMHhjdUE6K1pwWjFsOn00e2hbT3g/ZHFneGdjNTdjIUs4NFImN1F3NmE1TFMjcUpeLFpgUzwkcldiPVEzRSl6'@;
put 'PSE1e0NtaGFscjlQbVNOTDI/V0dHJEwiIzN6SkxYdmpYOGU3W0R7ezkrcVAmR35SO199Q114X1RofDg9ekRxUGQ6KmomYDJUKTl7KCw7SzNveX58eHBUZCUzM2QlR3RsLjYlT3RbRVR4bCNxaWosN1tUdmo0UGBOOUUyW1UjUXE7XUlmIzg9TFBxWy5GPXUzSE92I1NaSkNFMjNocFZOOUIxVyZh'@;
put 'X308cjFnIWpIPz98KDJdPy4uLk0zVl4mRW9XW2QlUV5Rd2JRY2hBOT9uYDtwc0VOZyVQZXlXd11jNnEuSkUoc11CNVsiZnA4c3FePi8oYVAzTHE1VVBraiJwSiNgOmh7eUtFKGRuJHFvKUB8V24yLF5RVVJ7LG5RM1paMFc7S3htJEtzeitkfXoubWJ1IndxISoufTh5VyZ0akZNSll1MHFSZiF5'@;
put 'YzpJSDZCcEFadk9eeyFHWFgpIVYzV2lofnNsQGU8Ml47IyxnSkVQZWBvUH5TNENaR2k4PmdkJTc5RGRJNiY7RGdkXjBtMDxQelZbKyNtI3BxUUYrVCRkW3slYj4+XnZBcHZYVWt2LiQsdC42QXd3dVErNH1vXmBQJShYJE85LFJIZloiQ155RX10TGdqSTJhUV0yfnVEQEFVOU9aP3JgblF5TWh+'@;
put 'X11gd0RASFBJUXtQcW52WDQ8eG52WDs/RHY9MG1kUzFuYTFvNjFSe1lBKiVFI3M5KyokZTN7LihybXFLKGReckZ2bjB+eWYhbVFqN0M+OUdLSXxSeTAuKCljTmtzYFIhTUFDYUVDMHtrOSxpYkFuMVtjYG8pWmQvPD8oKip2WTlMKC9KSSVWc349ZS9EQV54XTtDUnluVEI5PTQsLjUqQkFmTFph'@;
put 'S0k1ZztmUytVb19rZXhdZEVIOzxSejk7Zz5fcGhMYUVfSndHUD1WLn5XWHFDUWAyKTRvd1gkMnV2TiZCd2UsO21HOkc6RzpMcjxuVEpAJl1uKUc/KUsxM2Fka0NqMWJtSjFha11dQHFZeFBxSlBLPTAmOUhuKUB9cm05RFhmRFRDJiNEaUIlTlI+ZGRndSkpS3g/ejJbSE10S0NdRiJxME1OJSEo'@;
put 'Z3g7OVtuX3VJUXQuLDNvZ0t3NjdSXWJwdE13Nlt8VkRrY2hqYzh8YkY9YCtCc2ZhRE4hWzB8VHEuTCFYPjAwUkFIT1IkcHFaNTE1K01DM0V7VkhXTEw8JHtAeCZPZ0xdTyMuUj1RbHZDVCpZN1JIKWkzeipqUVNVYW5CYiUxRFl+XjE2bFkiUiE+UWdhb3wkPXB+Q2YkSXVsd150VH1ZPHAyQDQ+'@;
put 'ZndhOitbfHRPR2xNLE9sQD1naU8lWkh5TzA2PW9kYTV3TmJgXTpFJFt5U2hRWH1+Vk5meCFvSlFleGElRTM6VzA2SkBiO2FpZS4hOkJuOD83LzNxPWs1fVZCKVB3MWYsVFBlKWRiJTR8ZEVJWHNtOTkhYHkyRzA3LilSbm1UW21xZX09Oi8/XV8kaTxRSToxLHhacXNTOnR9UlI+KDNEWUtBa0Uv'@;
put 'WWclfDN2PH5fUyZxL0daQzhlfmc6fHhffjJCQSwrPl1edDAsSyJJTnYoXWFhSDwkNiVEUi85aDJzUFpdQnRVRiFyVXN9dztqTU0iNSs+JiUlXWNNdjw5QGkoeWIpXkJlLFE1VShfbytXcDJ4RThEdjUrLlV6U1JpcGAlUjJEaGZwfl5hOCVXcEdCQHBQP3lIe25oQk5BSjkrKFA/PXI9P3BYUmF6'@;
put 'YkFdUkZhKn1nI3okT04qQS5DaC5qMCxjRHcyeU9namFgc3hpZz50cilYSmUvMmZ1RStYKVtBUFU/X1MqbkIlNC4iNUQwYEMzRT1lfkpnZUhkTF8xbCxCTCQqYHtbJD1oSExPe3JkXkw0P21kMlY0RTE9cnpeL1U6WWViSyp9Nk9MKGVvUE1+YTpmYC4ySUpNRltTdFVQT1NbW1tFPV5kW09kd3ta'@;
put 'ck9tMXd2d29FL1B1dDdtanhvUXcrP3BJI1slJUNNa1hzWjh4ZTV2dCp9dSxoRm1nR154RStYcDNiVnwyNnVnR0lkeEhOI2doKiFjJWYmdVt1Ni56bi4ubnJnYVVCO2pLTnIpcjNaZWdzUTZgbCZWdzVNPWooVCl4JWUqfSVNYyVAJGlxcnBfdn5LITsoMnM5Ryw0UjAjR0U1fV5GeF1Kc2BMJnEx'@;
put 'eEU4VUNtOUFlNXNGOzQsb0g4SyNodD8pIlRkQTFsdTIwTXhYZUJnZHM/Omo7Jio5MGF2bXpSVUcxcGYhXXMlKWdEcE9fUTgiYGdWdE1daElub3QkLm9KT0I/MHQkXU1LOWY9R3QwSWJqOTlqKDcleHMpISFadk9tW1AzP0tQMzxAR1ohcHVtL1kwe3kxK1I4U1F7fF9UZ05NLmpAO3haZiYuVWp1'@;
put 'bDEmcC5mQzJxajZwUzA/ITdAVF5FXUwwTmpwZUAuKV0lNC5ScVpzZypncUlpYGoyWzVGVUFsL3BfaFVSSGY6RDk3X08yZiRPLnNyMD1ZUCk2MD4wOix5SD53Rld0NkdKYmo0ZzUpVEpNSDQ+T2w1QWZmQ3dubFBOQ2RnOTxOWTlvNUM9SVtsVDFacmRpM1R+RjQmfSxPXygyKWQxeWZFWzVVPWVM'@;
put 'IV03JSsxLnhNK2BoLjQsKDJPJEpfKWlDbnoqP2siX283JVpnVk1lcl1GYTE4aGF3XVk4b3IiO3pyK0VaIVQwa0Uuc15OWm81KltwI3pWYnhQPWwiISJrajk+JV9TV1VNXy5XNFtmeWpdSE59YyN1dSVxMH1wW10uQ2xELEg/KG90NWlqWSZ5SV5EZXwrbl9sQiEoTHpndENHbHV2aHsrZCxQSUVE'@;
put 'OFR5dlNyeGBSWSFPcCZTcHdPbi4jYWteJnN0WVRbN2MrWjNvcjoxcWoybixhKXJtYVQ5dWtvZVFHJTRNb2NfWm0/PHJjNyh1MWU5UkcxPWJSNk4xUz0kJlZ+bD10dkN2QT5zZUtndCo5JnE4dHgzLERkSU40N0FleXNEdnIzcl4yek5wSXN5YWgwKkZGVTc2Pl1ucHImbF1NMlhqZ0xMOHQ6S25q'@;
put 'W0NbOzZlMz5xYkYrfSZzbFl8eCJ2L2t4XWAjUWVvKlRTRUlZSDZkZT8vSmE4UzhnOGs5YlhkRV4+PlplZHtXZ0JfeTllLisue0tyZX4mIn05UCslfCFHdHUpQ1JtfTlnV21pc1J4SDZYamc9VUFjPTxKWkxRQkoqP0luUmd7UkkwWUYoPkQuKXM0djxpK2I3RCZZUWt9Z1E6RUpofFg2QSFOYUwi'@;
put 'Qz1eW1k7RiswR2hOM1E7NEY1LE02PC5yYV8wKTI+dkUqTUZMMUB6JGlvdj1NbEZqanVxaG41eHVgIX58I3IzV0hgK1NBXlskXlRTRC9sRkhIb249WiFBM1E3PCwxaUVXZmIxfn0zfl1uJSRfRnVsSFZGQVYyQ25vX0pnejpXVUtGZDdbITF5Q1V2JCx9Yn1JZFB1LiQ4OGxqKEEwUF0jMUB4PCw+'@;
put 'SGxJQkNYXy50KmMwPnswfG8kWCo9SnBkT1NSbjZnSFdjX08mN3R+bzcqQyo6YCkpejtacjJ1JEN8bkZ4QENdZlJDRVs/fG9iIVhKYVVDO09TRys9TVkibHxjb1JbcDB8V155WX4zWy8oWi82dDFKZnV9Q3gvdmBLaThbalhnbXI/QDQqQiZieTQqbixeQUBiXTE6PDshdTUsUislKDd+PHlSKXNW'@;
put 'UipKfCFCTkB6XWwwUit3K01XRVJ6cUlmdTFXL3JzViYrZXMuL2BKdnFHTUJeZE0zS2RiYGUwQXFUYT02OnNiNkRMS1Mwe1twTXkoUGtUbjZfVXpDSTA+Vzk3aUJ+M1hCISxbVGJge1pEU1kyRWpPKGYwU3JMRjUkY2dPUURfSyttOkFubmAqfWRgQDY3dHF4eSxQNCxfZktVbitTfCUiOSssP2Es'@;
put 'Y05vbitiMH0leVUwZWM3NHNnOj4sVV10TGlqIVd9PVYwKXBLXVZkSl5oX3lpPztHWnVLYzNMKDdxI09CVmw/Ym9HK1RoaF9TPjIpfG5jZVl8R0tRRnYza0pATjtAUlMuL0cySzxfenhdVEZxdjxqZypBbWpVaFBTbjYsOUArJDRwVlBZJGdKJVVUS08oanJsWEJxXiJ1U0Rbfl1EalBkKE1YKihn'@;
put 'cmdrZG1zfjptZC89MmdpJnFnXVosUXpAI10maWNYfiwoPTlsbl16Ki5db3JvVHA4U3lqc193NiFgMXAlSyssW0s0fFVZPTIyJW8xT2tDZyU8L1Bgb2NQbi8zfU4rMTEhc2ReaHksc2RYVm06MjIodlA9Zz9yL2QpeCQwaCg7ekM0WncxQz5sNj42eGhlVXo7YCYmfVJbWTBbT11gO1tSPC9tSm1p'@;
put 'NC9SR11ecHpjTk8valZ7JnFnc3FVaVBZT2djI0xxV2FoUWdkZDlfcUxRM05qd2hANEooZmhLKz1eZktzTHEvd14hJSoxMDx9PXx0XUVyLiJeIm1tVjIqWzMhPU5fNjldPTNiM1ZIK1UxbDZSeUhLUyt2ZF5oNVN1cDd0WFN8UTh3Xz9rNCI5JUdTKzFqfjpufE85b1c5SGRyXXM4dS9YLlkoLjpw'@;
put 'dG10VC97JWJELylwa3lHVkIlPSgub2xwL0tHXSt7UVUmQCt7M3ZHMWp2aHVYSyNnMmZEYCJOUFU7Lyl8el99cFlOXSszVj1YaSNFNFNQaSNVaGkjcF0ye2FOZj97VD1dcSEhM2Vfe1NIZXVLSmosLks+XWwrSU0+a1AlT0tzd35uS0c0Py4+JGZ9KFtma0deYCM+OUtwOHBkXnN9T3EjViJyaUtD'@;
put 'LEJfYERnZk8/Y3RXXiZXWSR+Z2FnWilBYHE8P3V2XmQ2TFNrUGMzUUx7ZiFIaUo2YS9IU1pOIWNbcFkzJjZKOko+QElMXnkhc0JkR2NdPCIzVWh5O2p+PDQuRCZ6Ll8xOH4kUWZWdCUvd0hPSUhxNFA0NUVnUmdvakpxSFJIUnh0V3hkRjwkSnZyYTQ1clJreG9LciNldHpeOTUzQ2ltZUwlRXFA'@;
put 'dWNhdkFCSHtlJm5teDFqNUY6VFpKJFg1SDFaRS8sMzo0bFFVWzRULDNqYF5NTzslIXElRT5gfFAwcEJJZiw3MW8sO0p9UmZLdlVbdDtuNE9YTShxSyQoZiZPWE0pcUskVWMiLCQjTFMpQV1KJjY0MTVGenYoOkRQPHVqd11VXklGVFtobDcwRGw2KywjeEtoOWF1Xm5zOHtJLm1SL3FmeixOOz00'@;
put 'ZyhjblFqY2loI2J9Rm5GNj1wb0Z7SUNIYTRqS05BeEQqViM5Y2dWRSk1c2h4bVIjKjFabFAvcWJ9d0MsYE1hOzVeSUg8PCNsLEYsSytaREorezAuWCJ9U1Y4Xj02TGlXQTZGIStndDBAIkVXOiwqaiVielg6RztXYltXQkY6KT5rQ0gqTXMmRU1KWXMmU28oZyprcCVyVChvMD0wbSpkTWFkRVo7'@;
put 'dE8yeCxMRTp0SWRiQzdRJno6blFsSkhha1gsdUFHfkltdjc9OGNnViF0MkR5dmFZeXpuNkRhITo/XVFUZWplT1IwNFI6aG9eUjE3aFBSO1hyT1Jga0NGRkpvVyZiSjZAJndIbUYxQEBTRkt8JGB4cixxIUNwR004Ijk7WFVxV2IhIUNAcXA+IjoqTEtJaCpIM3JtZmVASz8lUGtGV2ZBOTtTeWVi'@;
put 'eFo4Wlg8SSJVayxLSjhZKU1jW1ZhTDNjeGFlWHMjOVhUREwpYjI3RHUxO31LOWdXcl9SRX1aOXFZLFUmXmVxOSxZUiw8blRYRjwpUmZvRHEqa0IwVVVyQ0VYYmN1QnlQMGs6bVohQlQsUmJFOkxhLHdAZntQJVBQbkZqR2hMcS5Cd111JXFfcDNFJCRdZkI+UTg2NGUuZEB0dFZvW2NIVVRSbzB3'@;
put 'aUBfYl1NcikxcjBmUDZKN2xoaEZuKm5jbV9bOTZMRFQlZzhqezUiez5sWUNTPGl8YkxLKiVYU3dSVTxOLEgiX3tMfE0hUlhWI0chT1drSG4kWSFPJkAqZ0goJExacXBrZj0/TVV2Oix3ezEufFRYa2hqWCtUQVdANHY7IlZYc1skLGhVfGcwSTpHW2VedU9YTVtzakpXIVVPWGI3bFU2Wzw2KSF8'@;
put 'YmF3SyZFYmhtJURhfU5Yfj5QQ0R6bU1vejEpPkBUUD5DOjljRiRaOn0zN3xoSUpSdkZoeEZiMyYpXjRqJU1rPyFfSUo8bXlzKWFxfV9yUEAwWilUPGpLfVgmeXR4dyo/eCUpVF1tMjciWSkrJV4zXTojVHx2XzM6NiRndmdWM3N3NjUkQiteKHBaJiN2bG8uKU1ZV2tGKjg1cilYTzZsNVYjWUBN'@;
put 'KWx9QWBSSnxdNS87SzxrRDhFNFl6ZjZSK3lWYkJDW01rSnd6cFpRY2R4L1o8R2sjPnAmYmUxJkdWc155SyVYQyxMNFp6K1lvYj4hMFQ3X2FuRHchaHBuUTZMb252Vzp2MFcvOWJNQ1Q6SSx3eC5NWihfXzY7TXhGYjNKREI2fSZmRilOaCNmJDNDP09DY1B3e0xmR3BzdykyY05aNUtrLHpzKi88'@;
put 'P1BUQ2x6cXg1VVY4VkxYcj5PdnxdKmBaIU5zUHt5KlhGYmBGQT4uUExeW3FJWlAqNzprO2NBJHdSKkVzbEBRfiZ2KStlWWZoTWUuP1h3aX49SjxRRCsyRWpFITE5R28vK0t8c21IRDtpJjw1OFk6aHBrNWJidEdRM1NuPkA8fEE2WTBMPHxvRjxyPkIwPitxUEFGNEtES2tNWj8ueFlmLnN3JE0w'@;
put 'JX5tZE5vVUAvRC82O3JGb1Y5YlFsTDNyKWJXR1N8SD8zXzBWPlpBNlNgMCZjOkBbUFJSSE0mR0dZTmVHRk1KZC94JDQsTS4yJS99WiZnOGFeIjt7LGBINFkmRko5P314fkNwUy5HKGdkMSQ0UDVnWHA5S2l7ejl2d0tIS2VGfk0xPWpjLm1RM3RYIVpjPEhNPzNoWz5bXUxmNkcyPDMxMTV4fVVp'@;
put 'LjZjQj0weFZfVVhVNHV7Y3p8QmVeVzB9W1pzTnE9YWpkWik9MT1PNiw7ZT9iIWgpUyFbfn15L318U0xZLCVFNjVDOzNfPG80YlFlQSxmeXNVK01PJlgwQUdGX0JOTFFDaFR3QHQpcnspW0w9WFJNP289X2EoOT4ocFJwWWg0TntxQC4pLEV8PUQ/e24/JSt5IU1gVGhEYkRHKitlKnpTUjE3Ym1C'@;
put 'ZF8uRiRsRHJqWXhIT1JPbzN8Pmw6TUFbOX5gOUFRZ307PzdHTmVSekh6XSU3UmFAOmFtczY4PVljdTQ8fSszKnd9ZGljaWxFbHNNW3NePzdGeXtUP2NvTntxTV9TVVcpeS9HMkdNbntLeHNeNHdRb3t5X0lFJGIlNitsdFBNcGlMaTg6QUc0IVspZHBCOXc/XlZJRFVNT1h0en1WSilMdXVlZjxK'@;
put 'bzFvYV81QEgydjJvIWdCVihdanhSVU5CLFMmV01oekI+JkZ3KiFBRXdfVDRSOUxsOHxGJCs/ZyJMeVh+UHVNKmM+XUYqeE18YythfWclSDR6WU1STXNwJWs7bE1mL308MWhYVkluWHIrd0k+OVpHTTN2dlFnNk9FRW15c3lbdGEqY2c8RiNERU1LJlt6KzRgW3tycUtPMFE6U1BKS19jVVZmfSRv'@;
put 'P1IwSWFFd1t1UDdnQTAlY3QsVzxhSys2SXRjSX1vSDN4RDtyX2NDdSFaXl1BNDZpdEZFSFgzW0olIiVwek5WdGVNYnZ2RDFndEk0VTZ3ekR+a20rZU8ydEBncythKFtGM3FTbm0rZFNOdmY1MXUpL11dO2t2aUM3bWBUSEprUXJEam15OmRQVUZSPzp8a2lieyVPXWE+JXlIK0pYSlhZSEFeW0I1'@;
put 'd3RwaV9dfjE7JDVEZHxGa05uT0xqKHJPUn1jLGpseSxtbDMqLE1tSWhjTFNuOmEzZnl7UHVVbldHZXxkfCtoKjlFWEYzK105dTJGQSorQDo+cVkxbntMcXV+NU95XXs2YjVuelBzPXg9Qyx0O0NUc3UvRlcpW0h5RzFYaHhjQjIsOXUkYH43fDJsZC9GVylTXjg+LjM/KVp+SnJNOiZrJDs3UGtN'@;
put 'ZlIiMWhdbWtxQltWb115aUZ8KTlZIVAlJCRjdUpqYkpMUyRWJkksO25tVnV4KzRgcj5+R2dfek01PnA+cUxAJiRSLlFqMiolfUc4MVhebGhzaS9mUCY+K3MocD5UUiJTOTtWZFFlNWE+IWM0Xmlsb1ArLypSO0wxTSw6QCYkUWBOemZwIkJuRlVaW3lKUXQuVFhqcl09bGo0Jm5RfiRxb095P2d1'@;
put 'PDx3JF4pLGgpMjxdJlNpNT0jP1toOkg6R3hoKW0ueEt8KEp+dUN4PH1qQmQjcH05WytLLGYubFhlezl1PUsuT3dbd21SIVlXbUUpP3l7LD0uK01rJl1Ae0A1X2w3UjFUSTNLfV53bDRneWclJSw/fCgscklSNyFeSSJVdWM5KlByZUJNViNJKWY9OT8pKkpKbnExakl+SnFVKVdnPi5RPyxjMWV8'@;
put 'cHpIdWR1W2dWKVV7YFRvaU0yS2lJTDl5PV0ieFtnYT8idzBSQGdsSVt5KUZdc142LGxIRUJUan50dj1Fd3tZU09eJHV5NyFpJjZXa0BTM2VVVmsoIW1fSGt+ZDM0bTRyYWp1SW0kK21gPS5zMmhWK10jYkV9XXJgQEB0RjxHLyNrOGM5cSh0bDU7MiR7ezteViY+ViE3PTMmK1VdYz17JF0vIXNw'@;
put 'fUcyRjRWc3M9Xl4ydityfl1sUHw2X2VWJmhzUGdFX2U2Q3FQbDBTZjpGVHBJaFZwPyZ8Imk4KzlofF9dO0ZiL31nbV1fN1FDay9HXU0/QD9wLjsiTWxzUVQlMVNQeWcyU2l3NSRRaVNge2NnbGVqIjw1ZVR4fm5Vbj50UW1oKXkrall8JDd8Uj1nL3UlP0lAUTldQV0vW3hvPjVRYCY9cUVmUntu'@;
put 'KWAxLDNeU0Z1Wz9qUDZnN30jLyQxaG9GeCEkdWEoLyY3UWoyKmB9SjBNSjxOa0BaPEJXKkVMdW53e1FaOyRCWkFnVmlbMiJFblUkcncrYy9GTTAhc3AoL3xUaFNEUXt2dmlQRytINE9bOFo0Wng4cjdbdlBxdVUwQSEmfEQ+XVszeCRLP21jSltEPnw0PUchWCFSdnFSMTF6JVJZaD90XWhKS0Rf'@;
put 'V20rXWFMSDlfOlJ4aGt1fGI0d3dFYCZ7ZFR2YVhpan5OUEQmS0RKdERGSngpXnldMzg0U0V4NDNSUUxDbSk0X3RdYSRPR20mTElSPSluJTpfU359VG03SFVqVWNGV1skKTEvbHdrL0Y8dU85NEohUHFOYUJdcEhYP0I+OkpIKGE7Rz5vK1J5SyUyQn40bzZEfFdVVXZETUg2X3drd15CWTYjTF1q'@;
put 'OmVbOWFvezlXYj1KZD9bZ2xKa1UpSGIsQmF2T2dmP3RsMWBYMDRzZXdPb1FDPXVeTW18bXFLPWxfT347UT9iL0xWdU1oMFVRKkhefkFALm5FJDUuOG4lQ0I9JWAzbzdwbS9NNWZNdyUpWyo9b3Z6YWFpbmVIKClJSmkwMlE3RVIkY3t1OVdAc3pQO2xSeF9fRzM1TjhIW0R0dHBVUjxaUkheO2pB'@;
put 'cENbNkx6cks0SnAmKUxpaXNNYXVPSW4zUVUlQkhqS0ZnSyQjOHImLyxKPXxXXSo8aUxmWCt8XkZeY1U9aVdYSCgibGR1fS86PV1dcU0vbTxfXlgrekpiT3NsZHgmSCgqTFFvX1I7PDtMT0wxQzZMOT49dFVAYExHaVRALGBEdDQpRGszU0AwIUxASDshTGltZ28lW1BdU2xkQVh7KFlvV1deS1pf'@;
put 'PVEzRkh8dGpPPUdtO0hLVVEodEpMOGhjXnZ8Y1JXekUlXilVbUdoIiVNbkcxSnl6KGdbRHI8Olp8XXdRMzwxcHRMM2RFcWVFLnArU28mMWgqeFRPeVdsTVgsdWooNFlFY3wicTFjYChkci5haVszMmx4R2t0eislKTE/WT1pbn02RTlpTHd6U1hHSWhxW0diP0tpM2tDPGhsRTM+UWY/MnVDRz9y'@;
put 'UDNoVnYuaFoxZ2M2WTthfVBBMDFuMSxWJU8sQ1BmcHxiOHZIVzVUe3NgTHBZXTRTKSNeISIoLDIxR2FpWTtyZyp6YSRPVFB2dCNJWTZmWWBLRyIveDl8V0pNTmt8Q15tX211NSwxIjFXa0NDc3ZMNHBvPW0lQSZDWkJIIzM6c2FweWRAMClie2xRWDQ9OytBJjBPQFQ3SVcqNEtCL3clWHRXLm0j'@;
put 'JGJ5Wz1USiFkZzp9bVlpMD5kZTphPjp4KyQ6aiFeRjt6cywlLH4ue31WeGEiPSwlYVdXKCM2PGchdFc1KHdaJnAzeHIxe3NULyRVKTwiWXRGSi9+bGBrfW4kfT1LeEk9S3gwSixGWD1WKSY3fT0/ezk/XU9FN095LkUxUCZqQUl2KSYrbzJrY1tpaHgyYXVtS3dhVUBRWGc/eCJFTiNtYkJsPytI'@;
put 'XjNLLkpTN0VSN28iOTVvKkQ1K2J9QDpGXTBmbmFqN1ErKmtLYkdUfkp5U1drMEBpLDhNPTQ4UE8jIlluKXM+NnsyUUtVWkdTNz9zUHokWFVOUGxOQzcmfTRbOWVoQ2k0Szwkcl9oS1RvMURwTHNwMiZOVDxxL2I6KHpwakUhVm4+Kmg5TXlQenJDIUR0dyw6aCswOE1JJCVaZks9IVFUQl12cj5i'@;
put 'LHd0TUNrVSFCR1clYX1+cDQifXpQTj1fakBOfVt3UEdPdlp9aGoiNlg1Tm15bFh5a15aeiJuV24xKj9yb3JvP3dndkxyUkAqblMve1hYVm5VKVtkNClddlZiXi4mRjdmd1NBYF8pITNbPUchMzwhKn1NRzslUW48eCt8WFR2fkNCaiVOUTtFYWVPd2pZMGNjVTo6QzFCbkQifDI+dUBtK35OYSFV'@;
put 'RHh4Ym59VDNCVSIyfXlBKUw2WykuP1dTRUJtS24rbDRkeDF1amVGVGcmQUJQfVdvKHEkRkRSZ1NGMU9OaWFFSUo3cjhJJUNLP1IwXUg/aWBsOSpaIX1bZG8ve1YzM3o8QW4/XUNHWF5QUGReL15QcyFuPV86ZSF0dCwmVVp4IWRCKyk7L1hHRjoyLFRQS3xzPFFOL1UkaXJ4SitPcz1ZJU81YjBH'@;
put 'bGlXXmtLWUpqeFYuMShneGJtLikoV24kUlI1V0BPNGMiTXNTUk8jUEFaJHouKT1Md3FQcFEqPVo7YU9QXytlVmliITtUPSosI3FYZ2JvdDJnXUlUaGBrPl9GaTMraHVgInouTCxvTiFRRzxWM2JrUDI2X2pSJHk1cnNdMFFoXy8hWWY3b1NjWTR7P3NwRnghc1UheUZKRUkoSlYlWHFVQChlPFhp'@;
put 'IyhOdnx0Pl9PZjUuYC9ZdEdKaX5OaVVXYGBdb004Ykx7QiQ2MWpVRmYwdXE1aFc1fnFjZzE7QERjTF1fZ1l4ez04b3IyU15kbU1bJjJmYE8wSnt4WFJhM2grd3xvSGA6Xkw2PmpZXnByeF4oP0c2e2EpLDojbG8sImRaPk1rdlM9RkxyMnQ9bHpdY2ReYWFEXV1ATDlAeFtIZ0g4VkEmfHA6LDh1'@;
put 'aHVWPUQjenQ2OFhxZ3Q2PWVCeVdOOEN3LkpUVWFqW15YJncwczl+e1peTzhZMCRpeS8zKWFpbTlEcmdPTV1oa315PTFUTl5AdzE9VDswR3Z0KUlDaTBuSF9DOVc8QGxmP3U/YTViRXJKYHJ+ZTVgRV9Da1JBUzFXY0xdJDolZWtCfHhKVyVgT1FAW0VUS2oiYldINyM8UEtJa0JfcHcxKTkvRCRB'@;
put 'MH1MfVJyMV93K29dNz5RajI8VXtTfmx2Nk9NOCp5Ljt6NEN8U1ZveGIpUFRJTE5RX1NldV5ke3VINUNXI2g2Wjx1M348fF19MEc+eWRBXlVPWEZodiUlLGNbOTxzUilLPiVHe2JTbyk0ZWhmYzIwZTRvVTF6QnRhNlJKSkY9PSlqYnlqPkpWOEJZJEcyamFrc0dwOlVLRFZQX3UyPj9PK1kzfiJC'@;
put 'Y1oqT1hGTl09Lj55WUYoR3M5TTsqYVslUVNffFUmUFcwTS47OV9Ha1lob05wUlpJUmcyVWklPk0wOn45e0wuWHUzUiZETWFYUXl6e1NqWncxKSNOdUkwRngzcWB8RShOY2k0YW5BT01MTXgreSsqWHReRygwcWFoIyF2UkNLQ0BNUm1efTNfKUolNFJPJWZmIUleK3M3SEtMVTVDRy9VKEReZXZP'@;
put 'OWJTc1hPOCl4UzVRTzc6NnUxYjQvciFHMEFaXmphVWp5aCRJMk92JGlYaFBvJV5UM0U2L0ZHREdmV0U3PiZvdTtlPzMwYS5lLDViMSliSjdRPTtePEhQRH56VndsZkxxSktHVyNkZktjU09RbXVpM0hvUUQvOl5+Xmh4KWk0TTFefi4qamBuImpkNHorQFdddjssNjg8VEZULnAwSTp3X09xLE5s'@;
put 'SiglMEZqYjo0byEmLng8NVFzXTNaKFFEdzspIytJfnw+VFpKUEdSd1lCUHNMRE98d3JCR0ModENsQkp0cEJiKWJ+NFtmZm1VfURWRV1CSjxNRCl6NFk5Y0pOPmQrRGBzLm17Y2NMYHJwZS53M3FEZDhdSipUUVhlME13P2tyLix3Zm1nKTp1d2AhQDVsMTpPNmwle1R0MUIjd08obHgzeTZXTGBF'@;
put 'dGAwT3tbSjxzTkcofE9OIyoqWn47Iy43IyFPalVCK0hyREZYKzJ2NTVYYHBTZ0VhSnQ0Km8rMiI7OXdMdXxMQENoNSMiM0cqQ1h2a0pNOEY2YiRmdDlvWz8+Ky5SVjFYWFRHKmcjdishNm83X1ElZ2luSXxpbngsQ0Q9fTR9YE85SzxiZ15UODsvYiEwT34pSUosRVo1c3xbQWx2d3xSQDNsP0FV'@;
put 'PjVXW3IseSVjfDB3LClAUDduKnksNmE0UylKISVLci5qOl9QNldnRnFvUl0zKlVmZzBITUIsZVtBKDpgJUxeUmVFaEdrOTksZFJFWTxAe15RbXxAUl84PmZTQ0JMXUt3eElUWmc/azJQW0UvazRdUE9uYlVAPTVJIT1ybWtNdnMkZW02cSxVKTBtTDR6ZkVtbXYvVTJwRm82WVU6SFlOXyxNViNJ'@;
put 'PDpFaGVHIzVwRTE1KSpqUCExbyNsJXhyITRjRlR7OXxLc2ZfbTQyPiVLOSNDITBZYiQ3bW12UiwxRjtqQD14N190aUlJQUNeKFA3I0drR1o+LFFSMlBidlZMPT5eOVA6cDJgKm9ROilZRHJxbEppZT5ocEFTTFdQbFAsdnk2S2dWNk1NMUFxWk5oLypVdlNaY3FRTTUzfjg7TzAzLlFMUDVbU0Um'@;
put 'd2crNDk1SUR9a1t+KyZHUlVANkZobGIwcnBeVmVVODJJOTFJeFAzKXo/UmxZVmF9PyE3cHR4bnxgalcjXWg+TTJlYUpUKjJMIVdtakp3bCQ3JWMkIV0hRU87JnBsUWxRW256YXcsTU5RMXskInxoKFI9JUBGajReZ294IS9wUiU8e012WDZAUGohT1U/Rkw7TUdzdUVRVzdKYUdReGFTN0lufVhy'@;
put 'OnwlUyE1R0o2LyNZJG4sKCNSYjtnI09Kc3VsPWtYZEdqQ1piUX0qVSVVdXA8WGw4LFBnMn1qY1ttbExbYU4sbH0wKWw3X1ZyU0UrRDEyaiQuIWR4bV42PXJZUyJAfkRlSUZWQV84Z093YHUyTyluSFFaSHN9QnxbQF5hLGQ9I0Jwd1JKS1YmYlFVaG5ybz57MFRJYS9TeyE4e1BKV3BRbj1QcClq'@;
put 'UWYxTUZ5TDh9PThnVjxRYUwrIWtAOG0sUyRrZXtiRTpBKUYwYiNZYUNROjVjYlFtdDJLLltxNjU7bWdQPlFER01CVnYheixZZVJdKUtZNy5oNjU8Rl49K2dsRX4me3VbIlU0Pl1rRHdsb11WYTxrJTRhfT9OQFM+XkApZ2c3X0A6bDQ5NyxXK2ZvLH0pIX5TI3cmYGh6biYxaGdXOyImdj93NSZb'@;
put 'YjpffGNpXzFoQFRmPUs7bEMkLlo+eCgiY3lOfG0uaG0zTFF+bC8sQ15VJXRsNE9qaDVlcTRgJmdMdzYhXnMhZ0hwJl0wUVc8L281L3Y+US5kQHRkTTtdb3w/Oy4kfEtTJFpFL05oWiNnPDRAVFEvLDxbfVZhR1ZyRjovb3wpdlRyKVtRd0IsJT09cn1Ad3xnVVYlUmdfNEhfeypXLGdwLkFkfTZA'@;
put 'UT5WK05LZW9rc05lTXVxTSNXbkAjYTZodC8pRzRaX0A7XTRIWkwmai5RMy9NSXsyZVo7YShuZTRZY08vWzQyMmE9WUJ4JHpjSC9rNSxvMV1ibzxVKU9IJHJzYyp8YjZ0L283cTFQfWJaem1gOG4oNCNXWlZEVk8xPGhORHhDTXVGWGgmfVVoWDY0LmA/fUxDMSk6Nm1VSngjSVJ3ZjlgIjVmSFUz'@;
put 'Z0dNWUNva3xvNHZ7WVNzY2FWMTRKc0dxOjMqSlY/bF5EezIyW0RxSDFXa158SitCN2xhdzxvdlBIcykmTSt5bSw4PHF0cyRtN2JHKDpQSVBVZUQhNX45YmNBfStlTmNNPGpjbmBFZi9JMHs3Kng7Kk9UKjM0QjUofWZEbnJoeE1mPmljZjthWkZZQmdmW1tiLzFtKWMiVS5fa0BSKSFrT3Y/ezJt'@;
put 'IlZkVHdtN1NINkBNZ2NKajUmRU1LaikuKXNyTVB8dmBQZXdLR1I7MldaVTFPOUY0MjdibiZRYCRSQEVVVmFhUS5tX0AzdHpMUU5oIWpxKCZSQC8xMCpEYSUmTSleJFdPZX5pNiJiOnsjIyFDQURKIkN+VyNKK3tvXjFPPCx6PDlIUGU2T0p8NUt9JSE9RiV6NSYxMEQ6fF4+bjIoUXR3cXBYL1Zn'@;
put 'ViZMKG4we1FqYnkqZldnYVZRYiRPQy5BQUFBTnRDQXc0KSlSd0hIIlFkdDElL1p1ZFs5NTRzMDBLaFFdMD92bk9xdWdFYXR0QkFBQUFBQUMiLCU4Q28zOjE4PVV0Zl5hMEdkVT9XTEhEIzhlOWNZQDBWKC9VRUtDMlJXU0RKV0ckZnxpSFAjZTouN3xZYDw3aVZdQyxlaElvc2VdWSFRdExkKC5o'@;
put 'Y0Q5anYhKjpbPyUzai9CPTc6QlUpV0lVSER6PHZiQkJ5biNSbDJuVllfKm9gKj1LNkpIeX1BezpsOD11LlRAa15wLkZrdmwjPjNvbjR7UnYkfG02Im16dltKQiNfL31WU087a1JpbmokNjtsLGdyTlkoIl9LfG1NXyhsWil5eHt2fFAmI1Q5Ln1zKUFXXkBTQEdAV3tiT2wzR3lxczcxdkdYVVE5'@;
put 'M0leQz9RMUVnLE5TUk0mVVgqbktHYzJKKVRgbGQ/SnEkWEgsLCpKOV5mTlFAXV8mdWt1P0NNfFd3Z1ZoelR8WCprW1ByLDZ5YnlbbCRhSUVSe0JEczArckpvL3x1aW11UiQ8KkhpNSY2KzYmPz5kYVh8WGxvektPcllqeSxsMUB3byM2ay9PTFlwNFpTMyJ1LEp3fGpFTzw+Izx1Z1ZuZlkmMHde'@;
put 'dGF1c29FWk44YU9ucSowfDhxTUxXJSZsZnxMRX4/MUxyO3p+TFNXXTkuOFZUOEJaSH1wTmJadXBhWCV6S3s7Q0x5Uzg9RyxXPSY6IXlMV2ZrPEIlKHdBbE9TNUpXfmwpbyhBJH4pLG1qams3MWpuTDNoKEY+TWEkQE47eyoqL3V+cGdUcGFmdC4xWnEqa0F1OTJJeDthPHF6LCojakMrL1dDNipH'@;
put 'cys2RSVXRi97fUIwW2ZnZ2clTWpmIUZ9TkRqR1FvfkZ6ajs1Ny9pNXEmYldSeUlYVSJZIlZtY2IlKkJZQDBTY1pNRHRqOUt1TmVJNUVmYkc6U3FQVTU2bD1iZEpOKHdSfDY6Vnc/cVouYS4pRmNzJm5JMkcpY30rLyRwSUdAZlBbYnlkKEYsaVpgJSRjXl5vXz1CWUk/bXFGPzZaZXk7Y31tWz8w'@;
put 'Q3lzYT4jTCRkP2tOQXAvRXkvJSo7T1dwbF8sMypoJldTd0JoaFRDMGNGTktdPUB1VUhhWG11cmRXMnc2eGkmYDtnRWxNUjtidDpmWy5xc09bLz0hTFRdL3lvNCtWR2YhXkZ4YWBxUFh6Sk10SWtmd1pjIipkRGFSXyRnXWlrWCsiLjNGXn4lUUpDPzF6NzdjYiYma1ZIPFglWDE0d0AyS2Z7KWNw'@;
put 'TkBfP2JPWnpveCg7WDZOdjg5SCNKMjldfnFeIkMkflA7RGtMJShrZitJMyI7VzozSHBwNEtlTVFmPWNddikpSCMxOEdYLiJePFtiQSg9Z1ZueTZncnB6PlBEPUdwcXhvMl8uaSMzXXllaVA9bE8rT2khT2hFZyNBTkE6SEpwaF8rd0ljdWE9aiMvfCYvWUBoSEple2tFQmApcG5BbFFoODYjLEgu'@;
put 'SUw2OkU4cDteP115NCkzPkZHSEdQQjJ8SSUhYzo2ZSpFeSZqQiU9ey4hZUZDekMqT2ZOcD1rNCoyaTl7PVQoa3ROYDxFSG5lQHAkTip0ImYqdy4oKXFXP1ZzTWF2InZWSVB6Qm9GI0wmeCJIKVFyKGMpLGFWenw5MndFUVpYZ197OztvYzErNFhTYVk9a1hzdXtocTE4VF0jMXJmU2ViZiI2aXZN'@;
put 'N3opbGVgQHY7Pkt4K3ZFUjNnV11be3NAcDUzKXc4S3hgZVNvfTBgcTlQQnhhS11+PDglRVB1SjlxaDs7b2BiQzU6M0pYImEmMiZtbXh+NHcoMW1vfC5TNXMwfT47O280fE5IV3F6ImJmIj1nUHkjMHIqeFtSSGtwW3F0S3NkXzkoeXUibWZhWDp2N2ZkXSZOOG1uMUJldUxtc2AwdilDVGY5bD5q'@;
put 'Y0oxLixERyQ2d0VfWjpPYzdbTFVER2tIRERHK1FyR2VpYlQ2dDw8XUlnQWRYYHV8ezJyZlgkVldLSjl2Jl4+UE0mL2M7PGwyJSJQU0RSM31IJj4kImgkRkQkQnFYcnd8UEByZ1U+O2RNMSZSK1RKQCtATigiL28oR2N2aTtUcFVieG4xTCQ8NiwwQT5CZGF+XXx+OFA9LnxzYnlyUlUmOksrRn0w'@;
put 'JS9mb19LKjJ2XUNUZCRmRztHInddPTVCaj8uODVSUnVIWjoiZT4/a3soTzlYMD0rRk5nTiJ4SGdacDZMJFlJb01LYTRwfjpqaXRIKFFNWl9dTmI9IUFQcEB5dVY3cDxgZGJQO15LPV1FOjQzSS9zfE4lRzVXNGdRV1c5RVJAc2JVRiV6KkcycV1IeTt4IkBUIjZEfDYiKWRxQ2tINDh0ZnlZPmBe'@;
put 'X2w/SmVwNXA9JDBkZXR7TyhhSCFZNWguVTwxR1A9Qi5VM00vOm8qNXEoWTUoITZvKnUzeUZIR2poQVN2P35ZUH4mZ0txQiRyRU54ZFIzc3ojWkNtaT5ZQnQhOCN3U21Ie0liYl55M1M3V1kmNkk/ZkQ4K3F5K2BrQllueD1AKXw+W2NsYUtuNjZ3fFN7LzpOK1Zke2JmMls5KWQ6QTI3cDd7fTcj'@;
put 'R09uJFBgSHt1KWxFIS9qYktaUCpETi8+fnkoek9yY3ZAK2F4fUlmLmoqYF9LdVY6SSomWHkyenk7cnUvIX5hYTAvaGg7VVFqMjlHblVGbTEleWFvKi9vcChBfThtPUxgTEs8XlVjSTp0MShAKl1ia3ltRnUkbWkqZzc6e2FHbWlnKmomYyN7ZkxCdSYwMTBRdFRtJlRSRVA1O2NKKWJURFVuc250'@;
put 'R0p4TVVMPGB4LmQyZ1hffWFEYFE8YW89PSNXLlBhT21VJHI2JE1MZDhuSzZWTj9VdXo3UmAjLltOSnwuTjUySV4wJWhNPVkvbyFneG9DPThRQytlP2plUy9DT0d5KUtrbyMmO0VUbVNtRm4hYXpiNFRxbWQyRUNNL0hCZDJdI2p2Sj4yRHdgUldxUChtfEp0KSQ8WGUjNUY6NSNFNjEiQVY6aEVF'@;
put 'NXpEVFEiWVRra0I4WSslSyxqIU9pQXFuako7MWd6N3VlPHVKKTlZKm45Z0ZoK1M1S313S05gJC5GLCRMU3tlQldiKUYidUwoblJjSF9KUnV1aHYxKGNORnNlODs4TlVeNzJYUHw9VHltYiliP0g7VnorITh+PHBpSFgyalNYPU5tV2Z+c0IjVDpiMSJZdTJmSVtKVjFHaC9ub3cobVRlfltkNDRF'@;
put 'eSxmPS8xUFpKcCQsPnYxWlNqTkZzOXlnWUZYdG98LD00SEN7LnpsWCF5b0tVPDAxM3B0VDZLLm8/I3ErIjAmUn4+MU1ffEVtVTdOXzpvT2EhLE9lTlcwY3JLdj5leHFtTmU2VD5XWSQiKzdHKWI2RmNxPmpmaHRAdXM0ZmBTandtJHAlTlh1bi5CeU8kU2RfeVI0bG0sVEhNMEpSezlgKk8jfnF+'@;
put 'TH1bM0M7d258MCY2R14sdmNmIXQ0cVByJDlJOSN9NCMrV2pUQ1BGMzF5L1ROKGU9Um1lQi9VTGlXb1FVUzd5L0VBMWQjLl1bSldlZCk/VThmeUpJTVY4anhENXE3Rnpbd28sfHg+ZFN0MkJdSCwidnt8JTxNMyNVQFkwNSo5cGlZaSlUKUx7L2dyYVFoRm80X21zd2pkMlAxQEgiSzlrY1VXPTxG'@;
put 'fVdXNklJbk1vK3RvVTV8QkpwQjBSYktaWXV+SW1VcWF2O3M5VGQpUCVVanU2aSY7aCowayFCRHlwTk1UIU1aPTh9LFQxP0ZePXNSPT85KVg8Wj5pYXZlQmZFenw2Ynpqcj5Bcmg+VmpqdTtJVFpATEtzYlg3ayYhOjVeX043djpxUUVHfXYyX3wxX184UGlHNmF7OTNAL0J4VVtyOWt0RU51cixw'@;
put 'emBJfHtOVH1pRy54dUdxXmZYazhoRCsoKUFENHp5UTlCITQ0KWVyWCE/clZtInVVRzAoXyJwWllpZSZbSnBPU2FnPTE7MW8xeHpabWd1Il1DTEhGbD5lJkN+am42MlM9SlFpfThWTlUscSVAYE5YdHVpW0BAVDxRJnUlK0lwZlI0KCJtbmdTV2p3XXJ9S3s6VkNSXiVJMXlpVy9zdXZGdCR9Zzhu'@;
put 'd2ZfdiNaalBiekh8dUcwP0FufHBiNTU/aUV5IVBtNTJseEJQdW0sbDxIX2NzMSVuW05HZyFza15lWSRbNUw3W31sWTZRZGJ6OTdvQnw/TSFHdHk1JXhWTmJOb1pgdHE4IUlNXVJTZ3o9KmJHIkR1cVMmQkIia3ZuZWhdc2wjKVRMUXZ8UE0ie1ImPS43KDFtZVB7KnBKcE1hNiF7WUtpX0w3M0lP'@;
put 'KFY/NGhdNVthPWpXLyEqd0c8NEF3OWYiRHRseHo9bmpqXmQ5O2QsNkciIyY5bT1iRz12N0M5Q3pGMW8ybVUjVFNWeGorQFJBdVRTTywwNylEYGEybjhkXWArRExZKjhMRlojPjt1QDhMRWBCcH1iP2BJRVpVKkpsSUUvKCZ+fndNODkjXiQsM0FeS0AzS2RfK2dSX2c1ZE0oQX1wdHw5T11fPyMz'@;
put 'ZXJIKSpAcmVWLiFfQDcmdShXZGMoVHJWaFRRWnMoOFtELFYzaTJ+NDgoYSY+c000N3d5Y0ZrbSpSZHYkZ0pGRFlTQ3AyOUZaUjxmPC8lK0paYzh+MWArYnxeZmY6TyhMajFRQmRNMFNCViVNa1s8NXlpVCVOXlVkLmp+XWs4UlgpInFQV0B0LCVYbzhlIVs1bDxoInooJTtGXV5PdVN2PCFYclt8'@;
put 'SnNKWmVZbUVqUTdHO31zJThLWldmOmJtcWo1RWZzcywkZ096KlA1aiF+PyREdU5tbXxsMDJFMlVYeFgsTTluT2F3OTtUMDc+aGZgaTc1QWU4cFRSUUx3M1J6WyFGXj98VFR5M1cmT053Nz9oNUhVZVs1OFZofTcjZmk6OWlhUiMhYXsjS19nMHRoVmRqLFgoZEFzXTZuKHNhZ15eb31ua088IUs1'@;
put 'KlpPOUBWcVVuL3Q3cWpTfSZvKzMxUl06Pik2RHZ0SVErWj0haytSJTBnRzhdMClHOyY1OFprMSRgOEZ4UlEkKmI+KSomWkxDNlZ1V1Q0PEoqY1ByNXVqYG9TR00lLHJjam9ZdVZ9UTxNX1NgQWlGaU1AS2hVWyFkb31ae2U7WmNhLzVmZHJ7bG58IU9nN21fVjVpSnp7IUI3MV5QYChzNig8dSRO'@;
put 'aS9GUjNiYGkxWlhMPl08NTQ5YFdZNz1iTy55OTdFbyYvN34oT1RIdmJDOj5wPCYsKCw4NV9kSDBvWFVOc0pNeSYuVHJeZmlhSlBqP25sM119LD1ieDpOcXIrZ1prITROJHBFNWQsJDVYSzBIRmpncm4sa1clSEw8T3dKZntQdDNkY08zMVhtTDkoYF8ma2FwLGQsXkpNRCNOKDtGOTRGT0V1Mjt3'@;
put 'KShqdXdaZHYxTzU5Q0hdaV1zY3AjUSxLclNLPEc+SHJ8X15uaStxZ3tHMkxiLiNhVlZoLzlNM0szfCMhdndFNW9iSix7KV5OemVZKWZAUURMLE1jSm5QYy4yTmA/THtXPUMmI002Nmp9SWdCNzUpa2d8VThQQkkpaz8xbX4iQmIvZGkoO0Z5MWRodj4zSW5+aio4ZXZsM2M0WV16ekZIaTQ2ejVg'@;
put 'TERDIVZmRTk+UnVrZVtdeT9yNzY0W0BEb2hHMn09RDJyIWFhdDw4O0l9NzVHKi8vTnFDdngiTkNHM15TWXt4ISxpMF46K3gveUc4IzRaZCNwbHlJVCxPXlFScys5eEkmQkZXbmhXKDZ4LklkeWdnd15yZVVmRCZ7QEBsa15qVDxzOlc3cj9FRT1pI3heKEBGOTd2eSlQZSIrIiNGJE8xMjxHNnRS'@;
put 'JUNGa2JWVm4zVWt7b1JELzkrflZoUVJ6dTBUfm5DVT84UDdUSHQqLmgsNVZ5WGlEJTVrdV47UGsxWFojRkdlX1UzekgzQUllPTUuOGhLSnkocF5VREhSP0dRXmVAQVR6Zl9sRyVPRV0pb000KzQ6byJERDBbRDZKflpzbCs9KXRbdmxQXzc2YD9QPldKSiN+WG4xNSNUfTlPQXlhQEMza0VvOl8j'@;
put 'X2hiRFZ6ejNJSHpvfU04UCMmMVlwVnF2LDQ1Ol1HT2QoTHNNMFFYNW5TI2UqViZrcVR2SkZANDwvfSk4JmwwYHBnaVY/NG02fkJRO0JSYC8pKzNKYFZYOTRNUHtsPmkqaHwhWEJUa0JtZkdCTUhfSklFR34xQEpMIjdEZ2VIdCZWXkt3S0NHZDQzTmNraGZAO1sxYl9MWmJdZmRtTH1lNVowVGgj'@;
put 'Jmg9YzRQZnIkYk9GMSNwUCU7R3M0OkpXclJTTSlfZzxwSkRKP3MkLmNienQ8RHZ0R0AwXVI0SiI5QHREYTYzSGZAU2M4MnpMalRgeWhRQzI9OWpTP0tTRFNwP1Z3d3hwQz1ldiZTRGA5WmZ+VDViXntlRndENkJLXT1mRGdDazc3O3lMQVlwUkRoVW4mdGY2Kk40On4ubSgkRkIrVF9vWH4+USZB'@;
put 'cSFqX345T05nfFcpTmdaJTtPP0FjNk1bbD5bQUVbdX04cyY/YFtKey5zO3VYIkQkdG01PEVmaj8vfD4kI2FyVUxqJGVmJHc5ODUhQCsxWj9OIUovWSh8PEhSUiluYDB0e2BgZDNDdCNNb0dfK0BYUSxrc0NrVX4qYmxqens7KlVlVT5aMHBjLmNIPCN4Rzc5JFl5V2hjPHFXfD0+RSl+IUZIdyRa'@;
put 'VE4/eUBONmpCTXUibitBcCp+LDtyMWNwJVNbTGk6MjlfRkp7TE1aTm97Q018KTNvSWNFbjd0Lz9aT3k0ckBibmkuOWt6MV1oZEEyXkp6dD1fMX1aInMlQnM6MzBeUFdeTTAwJmRZa1BgeDIuQkdgSy59bjF6KGtaWC9LcUJdLFIpQEVmM29zOHBNZEYhX1pndSlSd2AjPDtwLm5TL3x8PGl3MCZz'@;
put 'L1V1VUN5RDBHVGpqb0BRaVZ4flIqWFtlVHlsTT83e1ZUT3dYM24/XzgmKm1oJitqfHpNQ1F4SEcuKks+T2NBMX5rWkJ3fGRlP042PlQmZG8hcVZSaT98JFksNFluc2JnPXA+d1RRczdTamExQSoyJDwpKypiZDZQfkRTPUYjNmU5ZDU6KisuTUA7WlJdRlY1dXt7PXBrbXdmPUJJOC9tPjEuakVT'@;
put 'YkJfXiJpVyVlR3t3UmxXJDY3bD1jQ0YxU3QpfHxKTytGUTwmO2hdRyJdUD9XJlpTNHArbXBaaD5iOGU8JUpGSn1bd1Z8TDRQLmFhJUY7RzE1bSV3WH5xW0UpY0lWY0g1aXRFbCUpI2pHdlcrXzMwKXJuZnZHPSJyaSNGQCEsIXFaeWdDX0NlYlcoa1VSVEZoSSouKTYpTD5razVQdV1CQjQ0IW4y'@;
put 'fT5xe2RRNVhrUl4/Q3UxVylYNUVeM141RmNjITlmL3B8Xmw4eygkKEgoNEx8TSksYTdWZTYjfktjampIKkBJUCRzMyttQUZEanRHNnhVYFdsUmxTamtscGV1LldMZmV5VmFHM3NoaCg3TW9JcUs9T0tpOTAjMDEuYD9NW3V2Zk9oTSQrVTFld1JQLktuNnBQekQjb00mfkV8ZjM0Nz1vSFF3eCpL'@;
put 'Ul1RbngyZ31YNyxydTR0d3grND5OZllRTDY1REJ9cltGPnRoWTQ5Rjc7dU5RRSJVemt1JVlXPWhYKE94IWElcUVmaCQjbW92eCFYMk9NZlBGVUBJTTxwPl1xL2xHRSFUUjl3aFVgJmN4bkRMZ11ye0ZILn5EJFplejdvUDl7N1hYYT1wdVg4R1tRRUk3UCZoVEFYd0ErRlJldGJFRyVBQGt5fHk2'@;
put 'UGR1UEc/dDt5QjImKkg/Qis8fXRWMnlafm5pJC48NTt2WXppbnRaUHhedyJnPzZMdD0wZ2Q2JDlJX3FgUzhzaG5xOn16eGpaXzdLPSxaInJbdjtwblZUaUROU1RTLDxrN1o1e31qPkt6PkpXcTpsMWNTJHdsTXpHfU1JKjFrLjxJIT0sIlRDY0ZYKUcwWjpDRFR5ZWprNmN9TCVnUTpGQnpwIih5'@;
put 'YW1TNjJCPF5VTWdGW3IkdEg1eHxbMWZGK0hwenl7N0MhJDkxVG1ZUGlmangyPVM0MXVfa10kQDApcmY6aSQuNHN6aDZVekUxSFRTd0ZOfTlQZz1pTnROYF5WTlBgQmZMQVNnfGpnOX5Yams1P3tQRWdWNSlmd3k9ZmVeJn0wRHMpOExIMz0iQD9xbVFIJW1ZdCheZmI+a11UPnxOTlZSe1dvNVhF'@;
put 'JWgoOns9WllyfFFOUiosNUVqL3h6QUtKdThKUS54fm9WSVB3LnlrV2xzcm16WWUyNj04NE1iJSZKSSxYLExEQWIyIiUkRys8RldZKDheVm9FSygmNGxicTsvd1hCUEU7bmU/aDlrRnAwNzF4anc6WDduaXZfWU1NSl5nI3JpI01VTylKfW5uUFFnfSUvfWkjV20rNXMuUVh1KXRnRGVYPWdGcT1r'@;
put 'Wko8ZlcpLCVMUEEyaWl3e0BRK0J+dl1TTT1FV0Vndkd1d0sxfmRGMnA8NEhMUEtLPGI5RjlhUyl8WlJRYC5rMl9yKEpiemtJLispV3NGU2o9dEA+LzFeWXI5NFkvJjkyNTdbJlVua2J0MWllZyYoV1llZExkOGBRNGhwO0VEem05R04xMmxEbEB7dXpAc1FMYVgjQm5mWm4rPXYoVnk2aEtkQ1Fl'@;
put 'flQ5dXRFY2QobnE2UnYoTEleSmJWR1UxM3BDbU41WVs+cDBRLmhuUSJiVU92WmorS2RNYUc+MSJbRiN2eixEJD1RO1NneEQ5NkhAIWkkeHdEYXQ5JF9FKy82OjVPS0p4R3hvN2FXcy87U1UoQnFHQl4sejQxRDRyMFZuYipzIUAxSWlLdH5NVDgrVmliQTJtQVJDT1NyLnc3PSRvQiJYOVN4YVJf'@;
put 'cER7bF1kUUV2MkJXel9gekIvOFk9aE9aPXM7dm9fMDViL1YqLitXRV1+b3VBcE5FZTRZOShILyFjWiFBSnQjRGdMfnA5VWl1S206VnQwOTBeZV4+fjlBJCt1blA8XSNdV2ReVCxeanR7Vls/ZzI4Qm05REhyeTdKYjZPUyRMXWpMS2FIMUZHR1JxalQ2bklAPkdjfHYxQ3Q5Wm8mcyRHeG4yb1lZ'@;
put 'YGtEUT5zOG96RCs9TEJ1e3xTaTBUYVhXSCRFSEZOaC46ISYiSy9SK3hPZXNOVmJBUDA5RCZFMHxValV8XyFKTWNpNjtYQkdAP3ApWixGR2lVMShPaU5HKX5MQ183ZDszPTFoXTpuUD9TU0ZHIkY/L34oUilwd0Q8JUQwK0ouQ2xCfislJE9OY3hLemE3RF1bfk9KPFRfaSMwS1B3YyFMYz9ORXw4'@;
put 'ej16XWcsUjxEfUkoKzEmekBXUmBJdTp4UHo2ZjlhYj92RFM7Ym9dXlF9Xi4pMy54dkpJZFYkdkZzdFZrOSRiYz9ocWlxdFZzZXYzTE8sej8jIT91dHNzUzo4fWF1Qnc7QjB2flsiOGM0OjVNPklMeCFCaU1TUzBwdzJ7RnxYPUhQOkBkaDosIWp0PShkJlI+I3RKZCkvIktjd1QmW2A5ZV1lMipx'@;
put 'VTZ5QjkpSztDQEVgTSJoI0J8R1hxPkJZN1UpXzJ0UGZeS006XmhUT1V1UUM6fSt2KlpeTjE1ImVDYWY0d1U1VChSRz8hL0J0TiNYZV9JQ1AhVHE1TV4xJFlsSXBZRjEuWkF9cV95I0pWUn44XUB6eTshXyhvLktfez0wZH1UZk9hPHFIN0lGLEdWZkk+SEZIS0UiNktGU1pPMzZjUkltSX1uZEk8'@;
put 'XSFFMjgjUD4+dGdbbGZQRDRURHNicnskfGtFa3ZXOmo0UW0yImQhSU5IKmY9djh5RGZsP29Yfk80L2NvXSs8akx+P3kyKFs9QXc6QkQ6OlVxe11Zbl1Me1Z0Mm88SlIiTX1lLng7ZzdlYE1JTls6dyF0I3xDYT1IJjd2MXlaKERPKEZ2JCsoXnkxRmx3KHA3PVBjTlRrOFE2Iyg3Y09oPVtYVVp4'@;
put 'dlBabilGYVtNfGh3XTVXZyQ3V2V0PnNRPW5GMFMzZj57U3RaXTloS2I4XUNpZz5WUCV5YlFWKFdVRUgsT01hPnRsYFAoMXBLTGZGe1NXNGVHLE5vcSF4OkklVCI7V0IhP2k4LnlwWnZwTnBRPXIsSTd0c2NOfE1oNTlkY1U+a3VLRlpxYXVUKSw5NVdVezM/Ukg5OmhtIXFVU3EqdyJ8clE7PXV1'@;
put 'dzJlO1E1SU87R2g0d24sSkp2ISVQInE0b0tIKFRKcXNEWXRyKjgvamBmQVdab3lHYDp3XlR1fW1NfHRQdEt+Z1lnbVFgPG9FR3xpR24jSFQjK0c0bUA3e24uQnYpOHluJDM+X2hsfGZ2Pi9kUz5QZnh4JCpSUFhzb3piLEB3TjU9aFApeXYlRGFfP3x8K2pVL1IiYD1LNn13NCwjQ3BaWCFVSXtP'@;
put 'VW0kKDNrM0pdN2NQMUYoUFhUZmZAZmd6Sjd0YVZVbmZday50d0QpcVY8c3JhKnd6THRzO0dOaDxURFJDOy4zfT1KIW5uU1FSIXR6M3psY11yOGlyUF5iZEF9ITVoP0lwSHc6WWRlS1NhYVZoajc3MG9Cb0F8NngreiVDQlRUa3wocUN0Lz4yKzN5cXhmL11GcTB+dmV4UTR7YUVjQ0dFeUtjdmpF'@;
put 'dk1SMHFRZkkpQlUhYGE/XngyWCptaHV+WFFGR1tuRkBQL11EQ2E4aV10P2JZMXpDVGNtNnRYPkxzfFBrL0B+UHZ6SnsjNjJZXWYpdnwiUSxrQjYzPlJoNzozUGJPN119aChVVCh6RHNPNU9dbTJkSFhMNn5rakI2SkcoR0U4USxANHIjcURVKUxFOVl4eFBPY0tiWUwoZHlSOkY0eVMzVihtVlpk'@;
put 'VXNNKE1BeikqTFQpPmd7ZD0mV1B0SFtRS21jKSxuLktafEhYTjx0YlBvNndCW1RnRilQYE9QQl05cWEoLDZTTDZUPyk0cFs/SSU9M1k1cklLdDgjXS8mRDsoT2ElWHljb0skWTVLUHF7OiR+VjFrXzczWHApUmFDflhmfHBPNFEkYX42P3tlfWsiazpWPShwSTxtKlVtKTlbUjJjMzZkJGFLcSkw'@;
put 'XVhwRjkkdVMrQHhOXSM0NDNLe3Bhb04ofE87M1lwbEo4fipoZ09GRGU1eFJ8RDhAPWg4U01pXWl+JGtofUp2OUFYN29ZQjs7JW1xYEhQVExoRTB4e0d4RUkuNG9IYyUrR0pRUnFyWSE+PnFsK0swSmpSOEtjRCR4YGRPQSoiQkBda044dTpwZSllXTdpLkZOfWtlKmlnWyE8TWZiKzY0Z0ptK0s8'@;
put 'YjlLSW0uO2d6UlZufTtSRyR8JVhTRGJdRWYzSTRbVytAeT1STSs+Kkk3ITdZKmg7QWRrIXk/ZWRoOjdlY1YlTjkwZSlhdzwvN3Z6OTdNXiV2c2huN1sybjBjMWtwdSZXITJPfTpeQjw9PFJfXnJhXWpFXSJqVnxHJm1OckNaRUxLTyQ9NEpjI1E2TGo/VzU9byl5cyVFKSVtIT1eOUtiQSs0TUY6'@;
put 'Z3tqejFBQEhsKz1rNFV6PXUoTE5WYmFQb3JPPjJybSgscDhiPEojeCZKdkM3K0Z2Ll88XnAsR2g7NmVGUVtUV2d3NTdvVl9tO1kpOCZqKSo0R1Z1MTtAb0cvd0FFTz1IeW0mNm1ePkJieX5XZ3k1aHFXSTRnd3hxJWBaODJvPWxST3gzWkJOI0I5W1d6SmJnS21rcyltX0pAPmdPQnBwLjQ2YXNO'@;
put 'ant5PFlTKDo7NDNFXSo5M1swJDNbKE13KmAuZT0sKGBrakhHbWJMPDdwQmUqdTA+W0MkM2AjSHQ1UndWLlhfR2R1JjNaNnAkdk5EPEB5cTVsVjVQPW45PF8/UDFqYFZZI0xdU11CTDFKIzNBYEk9MGp0NF1mN3RdJHAwVEU9JmwvW19ZR1pUKGspIStfV0huRWRRXyxGMDJCJmkjKWx+K0pvVVl2'@;
put 'dHVBZ3lUaDxrYlpEI2FfYSpsMXdQPUBJcDIvRm04O3JoallXYXBfUitmX1h5YEVxQjxYWT5za2ZuTzlKRFh6ZF5lJWFzUFluaCt3UmhWIXJnTChlc0U4dVI1ZiZFNDQ2VWdFM0tqMSxRJEMlJmhRbHYhbEsoWjxnJC5IKmoha0xSIV1sOWd1RFg/bUlfKzJvKXheIWBlYEleLmFjYmtGMk5YcHNs'@;
put 'RnRXNktkO21qdyU3RXFWTmwqODRpP3JXNHkldU88RV14WzdwUVZQPUdfalJnSyVrTjhWd3RAdmZIWV9UWT9eaTgpRHA/dWZ9YkJSIlYmUkYmZnhpeihSfmJGIiptQkRsTioqem5ERSYvLyZrRlBYfXZrTHBnV0FGdCtVSUgpNllEISoqbi47T3hjM3RnWWQ2ejFbVjxofTZoTFpxI2E1Km5BcEZR'@;
put 'cm0jP156fUojJDtEU35XMnRZfUU5NmclOkw5XzlNIWJ2cjFNd3dlb1R0ZmAvemR8X2dqSUFtUjE/MlglZUpGNjNWLCg1ZGwyTG1HcGlfPlVeSmQiQGUoSGFkMXEzMz5HXksjJnRgSkowKjhCayloQ2w9dFJqeVk0IktlUk9EP2lTLEwpYEI1VF45UV5KOWg5RFNrN2RYdFplUzsvOUpseGIwUE1Q'@;
put 'TmFHWiVPRUdnZT4/fTNobUg7cDtrXWE/NCFnM34pQm1eWSpvTTJIfHIlP1IuQFl9RGdtJWk8M2EpPEBeKVBGQ05BXWUrPyEmeDhpYUkieDdtcCtKZ19WfURjZEVXaWIhWUEwYkRWbiN2WyRMRChtYVdud2NPcUosQmAjMG4xPHV3N211RUBaWTUrakgvK2VPQT50V18rTSZXOUd3d2R8NWkhdXlu'@;
put 'a0UpZWtISjV4V28pVi5dSXszLiFfRHJaUiFgaTJ1WU14Xz8zd0csbmdWN0Z2V3RzalZTdlhqIVVYJjhjVSJXY1VmW15NVi40bDV7cFdgW2R9dzZMJEE2O1EwS200ZGlWSjElYi4qdSJzPWhsZlNyP3U4L0NbPFZORFl6dDI7bH5uN0ZGPTN6V1ZwSXlFW01YYVJlbU0oLzlVVGJxIloiNFdSMWUj'@;
put 'WkpzP0xPJGF2VD5EQzM8Jn52RCVuKUlXTmxiXk1nTU1qbEA5elt2N2dDXitULzZBTmh0b0Y4RWtUVl5PMTlTJjpAWXM/e3hiYDJ6cE4ubW9SRjJ8RT0wSH1mKkEkdGk/MUZ1JGxDX0UqOUp3PkVraUtTfi9Wek9QbWIvYWojejxZRSY2UHUkKklBPHgoZTtxaHBGIi8wd3Y4ZEhVbTZAWTYxP3dt'@;
put 'MmR3TVFOYGZYIzE4QXpDe2s/SFRPdFJsYDBsX2J3ZClkKTFmKStwP0tSbFJjPWx+UlpLb3R3ciQ6O0dAXzg+MVY/PXRoTVtGWitdS341YEguLDIqbkpdfXUxNGM+PDYlPUpGbStha3Q+L1hGT34zaGV0ezYmP1AwbjA+L2w6JC48dGVNQG84VVYyfCkrJSttV3pyZGF9WWNFcmdXP0NWbih3JSp6'@;
put 'eTp3b2MmQFFQZXxoTUFodlJ3TmBzImU7JWpKfUc3WFYhW3Emdy4zOlhaKi9EdUBxYTY/UFJiOWh3V1k5SkQoZSpAMyhNTjFYPVJHQzhKZGBCV1FVdl8/SldoTSRYdXUvMGAvUTNjM3p1cmtCaWZTSHgueUcsYnkzS0o8XmBXK3FfMnJoX2pNNEFJVUZwenpqR1F0SFFDK1t2M35Vay5wMER0MT8p'@;
put 'QG91fktvW3pNQWpmPDtJWyRWcGNScmkkJVhLJDJLWHRVKUtwdyVeKUg2KDlbQDA9RGtLU1dJUXBuTmozPVMrVD1WeSpXcz1qfjJuXSg0NT9IMXt5SUQuel87Uz52PkxEeFY1ZG1uT0dMWjs7X1g4PzN4VFFrNC5kPVB+QkN+TlEzNnNySCFMSVl1TWhsZ1BRVzdlO2R6cllVUzMpIjo5cmpsMDok'@;
put 'Yio5VkpvX3Fec0BWbXkmKldOcUx6fjk2ZVs2fTY4SXwlPGxddnwwWTA2K0w9WDhoPSkqZmtRK2Z0d3FmeFA1YVhdQlJrUGs6KlAkMGJyTVFLRUdaV3MsMXxSKyF2SFhQfX1NNyUuYzpgIjpxNT84cDhrW0xiL2RWViw/ckZmOl9zR0l8Rl94cjdbWUltbGlRVWMyVE1KYShZOCg9VWpSdWZiPU84'@;
put 'RC9kXk9XJjtQUEdoSDd6c0UlL0JBVyFMNzIpPTk2MnYvVm1EPTx5SDYsUUNkYzZOdV5CX0NIXjxaT1cmeUpJcnxHd1M7Tmk3Ym88L2lVXUJza1ldIVYuN28xeT47SWJNcHhRPmVmOWJnVFNifHQqdyN9ejAqelove2RRVEwlQTZhc153M092MDc5QEksRT1Pa01fNTdscW9IfHBNXXsoLEw3e3xk'@;
put 'dm8oQzkyNGJoWT9KeltaXTVtRk82X1Fya3VXUD5bMi84ZzdyO2sjQ0xEWmpufWN7LCRUezB+P0pZZUVdei4sSklFVzg6OjkpLmlxO0dKeWloTTAwfTRiL3chITN0TyF2STVFS2widTxUTmksKyZqIXNWUWlaYTJSdFQkR28uV0N9dChSfjQ0XTVPbjg3JmZkSFRURF5xKFhRM0wkYjA/RWU3eU12'@;
put 'TEBOfnBQZiVke0g1Smh4OTYmUkhmZUJITTlPP0Fibmh8fmRgbDEhLj1QWTJzP0huXXIpZCxyTGg4VCpXYytnVGZvTjBdZFBdZmNdQV9ZY0UpQjw8bC58LHZlU0hzRT4xOyokNDhmQzJPTU9tX1MxcF58KU95Y100cEtuV3JYS10kR35hIUAzb2BocXwydTRLekNQUiRoOE1dPFNTS2kyVkszJkdn'@;
put 'Z1A/Q2x6T3VKKCNdWSh1aUxkYk1VdFRnRUleXz48ZFN0OmZWR3dCfWJbPCs/Zl4laCNNdUIvRmFaPFlnVWA4djB3OzEjZ3BjOyhXeXRxXzh5RWU8YiRseSN3VXM5NlFxWGp0QHdoI185UXMlUT09N08he3xpVzh2KVZHPTAzSjhgXk9qPiNyakI8M2QmY3djXVR4NGNhYiJtKXdeKHRlSzRGaF1t'@;
put 'OTE0OGh6WjZCa2h5cSs8MnEza2subj9VZVpdRH1gTTleKyEqPHZLL11hR0QjP3g3X09OU0J6cU5ncnBWZSMrWjZdPnBNRzo5SDs8WjlkfHQ4aXFHL3cvSHY8RnliOnExNUtLdFRZZkVGJTFqc2UyX3RfWGZeZm5RO2l3aDRmdVJTZ1hUKyVJRXg7aFVBYjNxODR8Ryo+WGxEPy46WUc8akt3LntE'@;
put 'bjNEIVohTDxxTFNtZHdrfmw2K0pwejV6PSRYJCMzKjdmU0ZLQVQ4Xnx9Pl5jYEJtUzZ4IVBzejkrWXd7QUUxOys/Vz96K2BGQzNKay5HfXhHcFFgJkNBP0luSCxPfi85V0ZTIi9gMVNzeCpNY1Q6M0NDSFY9YFtjajdFeEcpSjBjOVhzMERUUmgmLzdrc1Z3aXpaQEB6YkRTfjdmczgjYSRyZXpS'@;
put 'dUhgW25rPTg6JCI4X01IP14oN0ZfTHpsV0x4QXJtcyJga004d3hXeztHRn03JGVaLzdFVm8uKW9OcSR9ck01SCp7fmwhKnd9eSZEXVpldHJEKnlodXNoWFN0eWNQI2J7LHhHUiU3S0RlTGNwKD5xdVoua0UlamouRUUpenVHdjtyOztLPylbNk4vKWp+b0tdbWZpPStwMHxOWjheOEB4X2EvNjgi'@;
put 'NHNAVV99eGNLOEBOX1h+IiZefllhYTZdQSZSSCk4WCI6b28zPChweTVuTVFRQiJGcVZVPTl6TUtbIzlYRz9TNUJVZFRBKEgpSjp3XzRVTFU0WjFiWWNZTE88VDR6anJfOzJRO2QmSy5CMzxAN2RYSHByMD1KYDU1RUxIXzg8aiIlTzRJSThFNEppYlhqbSglSFp1TV1wWE44aCNvIjVASWJyWzpS'@;
put 'dzBOQEAmTTJyazEmOSFdSCFnLzFoaTo4Xjs0MkxfPTsvfEpRTV02UkRdNmAjWDhjeClCMk8yd31WOVNkTnhWWWZPQGNATXNaUS9vfjBwKTJSeFdlcFlAWyNBNm9HJntIW3JvczpVd2o2dzRENC42S3dTTFhFPkpIfWAoXUFKbTQ/V0dlOT17VWlMPUVBcn4lcW13PVpIKDI5XmZATVgzNHRlQ2Eq'@;
put 'IXp6clY+RHZMfGpocXE1fjlCJURyXV5PVVVSSGdhSlU/cSF1M29aWzoifWF9W1ZqXTZxcl1TOCp+QzIhWn16aCpDUEF2O0NVLCk1Yz8rT0ZuPj4hKCZ4OEIiVHwoMGwiMDg4bXkuYGVINXhKJFtnQ2pyR3tqNFguRzc0e0hdJG9nNUwoKz1nVl1OSEFZbC5pbUo/d3UkJX5WJWl6Z0tidTkjL3cj'@;
put 'WE0/dFUyJCxFbEQyRy57Rkp+NmlJWXhyflkxX1o/QDVnMUQ2cmd5eTlYUTZ0KDMpV2F8XWtqfGxvVUBXRjwxNns3e05APjhVJStfTjF0P29zIS9WI21VPzY0bnk5Lmg8XmUzWElHbVclY1YydlVDNj8hbys9NV1HXmJbO0oudDpbK09YckZ+bnYxK3tmdlAoIUg5akl6SiwqeEwuOzEwQHlDQSJK'@;
put 'Zn4vNUZtV0xtSU05MmpRUEk4P0Q7OWwsdW50QnxqOlpVPTZkTzNBUT06cSpAST9DMHRYSEdgdkBGNzhbek0yOnxre0IofChhQHRrc3V0NzEmSyRSWDpKTiUkRVRjNnA7ZXhHWXQmWyFUJDZjNlo1O31PYGVycCksMX5Taj1sLD9IZVdbVyh+alQjaVhlLm0vbTduMUs9NzJZaSQpdnhlW29YbW5n'@;
put 'Yz5GJWV0YjgqTTxEN0lJNHlnT3tBe1Fpak9zelU8a1FPaTEmNDt5PjZEUHZzUTpdQjY8WllSblcvS1lZPHtUUGhlR3IsTnF7RmdoI053dXU+N3pmPUk1WiYxKHBvMF0lbGF2OGdkcH1uTTQpd1g/KnFyKmEmfW9DQT92NFN9aEhaLnpwfVdXO1RrI0dxIUxNK1cmekAoOH4wfV10X3IpfDZTYCMp'@;
put 'VWs/aXckNkhOUmIoNjZ5KiMoQnd9NWIzND94VHAmWHxyWU13bTNHLncqV2VrSD51PClEfV5QPG4mN0suNU8kKlJUKDU2SlRwMD4vWDtiOUQzXlIhd1RJSkYjQiN3fFRRZ3tXKlVBT2Y5e3hvZ30sJiwpdTZXIW4+REN5fnpoTHpScmtdPGxxcU0/Jk0+RXwuQnZXMTtodV46OWssWU0zbHVEemcp'@;
put 'YjpuU0l9Uns1YSxaYE0ha1ZEZFBwUCxGJVJ9eFg5QkBzQiUoemhyQWhbPkZhe0MuV2loLyssdnE7ZSJtNHFFIXYlTTRRN1l8LkR7YyhCR2s8SD9lcCJ2SHV7aiFwYyIucF45ZyZyVyZYUEFFLHZOcnxpQV1yNDpDN2V9LztYU1hrY3tjMkQrJTdYdk0iNGcmT1JeSyhjRyp7WkxMVGBBemBybmNa'@;
put 'ZkpsYVZXcm9GVzB5VU08LFRSdj97Wyt6czFoNnpVJnlJMUlwNz5NLyFjdlo5IjxkV285V0tFUChPfCw4NUV5Z3dPfj9XK0lLSVkpdHc0JVpWJWhgdW5fdk03TTU/Nz55OCgxMSRrNSg4Z1RsQyp+bT1ydCZJJlpKSkt4OStEKHYkUD84P1lWP3xVZV1VVm51SD87WmUxaCx7ZiVHdGwlaUo7UUdJ'@;
put 'YVduJFZFRHAvVGBHNjBfTzBuUS47KXB5NCEzWnBwazJKZHczMyo4eWsxMSFgKkAvSVFdJGV1ZkooIndJWmt9QC8+UWxifldvZEJoQmhLRHAhcm5eOnh6T0dGMmwkN2pXInxSMiRhdHttTXo8aUovKHMxY0NHa0BxcT98TWw3VFljYjhoUCxyRlo2QUdZen0hIixRcHNtMHchVTY5PXIubz8+Nmdf'@;
put 'TF43fnU5SCxQamUzRS5FXVsqUThKK2FOcV9NSUFCVlU2TCM6TnFSUXVAeXpBUHcjXmVpJShSVCxPRE54KH0zU3ZKVF1aNXxdQGs4JkUxYkVucilvd2RQOG1aTVJHJSJhOS5OPEhmfU4sXylyPTlGQGZlUl1jTnRsJn1GQmgmL3JjZixtVlR4N0MyfSJzRVciTyRDOmdYbmhTUEl0TUBuNS5bbDE2'@;
put 'Rn56cHN6PzZITjMzSFovO2lJXiV+Lzc0Im0jVlNMbE9TanwzczRkYnt3K3tDJTxdeSRAMTg/YiNNbmxLc2BqeTk/InJMfDlKNlsjTStGVnF1KSptSDdsdDw9OWF+MSoqa0tmZjtxaC98aWRlRU9UYWR6MCl2WG0yYDFieltoSTdMd3FnZUU3QERWMWA3b1lqb0I+YS9yK3Q4eUtnTENCTUZ+a3p3'@;
put 'SXhhXikuN2kqU0kyWj5FZGBqMXspU0s6OCxRJHsjM2VJMDg2Smg+WndkWyolc15zRzZGKCY2K2FQYCVkRVt6Y25+LE8pXiVfPSRWLkVDZkk+Ty4/RUQ8M2NKREV0XXBEQXJ7d11USG1Dc2lCaH5UMXgxeGZRMXs7byJvSlVjblF0cj82WjBgMVNMaXxbNyY4eVshQCVLLGlsMlVSVT9NQTksLypf'@;
put 'RWBQSExleEh1NXkhNmp1PjFEVV1RIzdRQChzcV1AU3h+Um8yJWAqeHhdVklSVzdpeTFFQEw2TyZvdmwlWntEWFE7b3g+eFhpSSV4XnlpWTRKOWNqOHtZTFg1QHQxRnN4VCZwM0d0Sj8hLlQ1WlNyUncsW0syMlR9U1NeR0YpMGQkSkREWGp4MDBGSm1QP1lfOl94dmpsRUZVUGIvcEspOyo5Lztg'@;
put 'OTp6N196S3J4XSVQa3ptTXgzXT59V2VubCo6I3kuOjg0WFRrTV0oeDJZRTthKz1tdGt0OjtLaVBbIzM6b3IxM0AkSExeOyROIWNSJkJaKHYpPXVmeSx5NUp9Yy9kQmpSd20/THFRQ1dHNXw/SylYQlp7YHopdElGaSR7cjR8cnNrYE1OJSVmb2NEXipDaVBJZEhaWndTaVglbzo6SHtuRUNmTkJe'@;
put 'JC5gI1RbbFszP0FEeXsuYF9bWWBNKWZEbndrVHRYTGQ7Yj5KIWQsODtbWEFofCFmUERwODA/S0k9XigyXXo4JTdeLHVTbFtAYUtSUCRMcz8sTCElIVJCfXpLPFk4RkcsKGo4d2cmPF5HeyUkVE5gbmJzVUNkeXVfKHc+aXVMS1NqLmJtcCEreUBze3RUOFsoYjh4NTE6V2Frc1I6Lnd9eCImKz5p'@;
put 'L20lQVFnOVt6VDo/USoxQkQrS1VgL3UuMWhxR3syfmU3NzJtRXEqa3ozZ1RodWVkdX04aT14O1Zya0xYPzAweCZfSk1bQD8seTxSaWhTNmdUPnFZLGcmPypaOWZMK1p6JFgxe2UzKHB5VzsrPytKbSFKUH0uVj5vT3cqKVAwWCYzKShoV2tYRFt6an04fmZlTFhOe15Nayo5VVsld2kjbj1iO0cw'@;
put 'fTdbNjJPPzZzOk4pQEtuXkVAfSR9VHc2cDZsYFApIktdJE9uOl00X2JeNi40c2ZiLm04TVBtPj5+QzlAX3t7STNZaF0vakd9WjV+aT9bInZMQ2d1YD83fj1+RjFxfVhHNkgjZUtUfkJKbn5uVyNpUCJFMFZtTEtdLGAhflAyPDlxNVJMPFtLKEBibFd+YTdIV0tRLzlyWWJmKX5vLm1gJXY3eH0l'@;
put 'WlRIQWYiUEtPb08xRiNxRVZbekt5PTB3bnhyW2VqdTdEX2VHXmNzbThtZUU7QUk+KiNaYHdWWmNUN1tQNitJTXh9fXx0LjwhYS9AZGouRH52KGhFRz1JeGpUbX5OUmJtZ21nT3xIbDopYH5FSmVUSG5paEBOenp0L2x4LEZjM3F1W28ifWVDXlM5ViNpMWYxSmpXPFZjUGZ+I3xuUVtXM2YkW0ci'@;
put 'ci85RHUuOmBKPiYuR1ElNGlaWD5ffjZvT09eLHM2Pzd3ZVcleShsTDZUUSNSXkZwelkhKnJLQUZablJCIj95KUI2UUowVHtmPnF5cilpM0x5fWF8PV5CO0F3R2MuZGRMT3c2PEF5cEZbTy9DdCJ5QVRjLElTdFBzJD1Ib1BHZkJWWHpxWWVNNkdYRmdAWiphYDtLZFhaPyltJCw2bH0+e3o9aXdx'@;
put 'YFpYZmZoK3t7dE5ofjUudEp0X0p1PzkjM2YofWFgOzlJRlMxLlE5XlQwcG97QXZnOCpiODpBXUtzX0olOEVNNHlZJi8zSTMpXV5aITkmN1JGK2xwTGpdPUkuejB6QW1UOUFZQTE3PUImKkM4cjhkdXtvZ3d6fmpLRW0uLmZCcnF9czhPVlRNaSZtOEN8R2d+WnQpc1dPaUI8czt4UnRYYU9IO1pj'@;
put 'ZjpWR2VmO2oqVnBLQ1lyYW5hWm5TPCMiZ3p3Jlc9bWNSMHFZUFElYGxsN0ptNHwyWWh4fXRWQz1+UkYhYC9idzhdbEhWOGNBdUM+W2VKWXx1Lj5HLFBadEN9YUNLRXBtX0pUJVtuYSp2Q11dMiVhWih1V29tW1VOazpzVk1EZWYiNlZRN0x2K0xKRiZwLnVEeFthPW85Z154OHFleUJ4XjNyTj1+'@;
put 'fC5zdi5WMzZefjk7JX1NZm4yJFpSPFNnZWhLN0tfeTV5JC5WY0JNNzNJPC4hUD99ZCRNdVImVDRTfWRBNEExOkw8JGROXkJ7fEA8SHlNI3wwISM4PHQuUEFia2glVyRHYzVUIX1PV2k4Yl1qLlRgTzBWN016aFdkI2l6SlhnKkc4NCRmMjxuJXFLK0tXIlR0TE9DclMoeHh+OT9pdT9zRzs4SVs2'@;
put 'a35WalVyIW9zPiE+TTVOVTskYmArZk02ZHF5MT1VL0xJW1s6bSlVMm8wNkklNXoqYU0hK2J5LC9PSy4sWmQ8filrayxxO1h7YGIvIT5adjw2fWBjNCwub1dGfDohQWVWb0d8Ol86dmVxTWtUJj07PnNZTmUjPj48OCh+L2VUNktmUFFpdihUeTpxR3FWLExGP2BMJCxBMUJCYVpPZVI1ZE5dQWBh'@;
put 'aHtWQWYpQE8jaDEyW3Fpd1FVd0RDbDcxZV04SSUzNiJeYTA5RigsO1U+TiVgfG5BQ3RCYHtqdlJ7UmFMfHh+fDcyemRaKWtKdDIveTRmNiZfX3MmT2RsMko/KVI+Iz5jNSpDKSt7WkhRekxDZ1pQczBOayVqeS9uREtHenV4dWxlQHUkPXokcko2XUsyUklrUlFDejUzMyFCY3ZHdCZ4PUtyd01l'@;
put 'M1EhUEM1SFdidnRgZGpfeEF1eGtRRCJjO0BfWFciRWRlQSxic0Q7NDZwbFtTZEEpd05XfGI8ZD1xaVZmbyFTL2lQJFIzZ1Q7P2BWdCNvVy9KcV0zOTlVXVdxfExMYXY5SVlgRFMsOWFiaighMWYpXi5eRUIsUzlhemxXTW4ybn0oTmpxRDohTEthPSUhUVszWkNiTmJbeEJTcSIiWWNiL3lOcUVT'@;
put 'b2xVI2JeZiFTVnxeRVlsdmcrPWN3T3ZEVENkeEt8VCp+WGxiQkdJZzhMPjw5dipnTT9FKU0wVl89OWZOPHkjJGtmO1tUOj0/Vj4sdmB5K01pZUhkQlo4UF0kVUNiQkgrb1NaeEB9V3F3NGg0Sl97OExGWTgsOzQkY1hiK25TZCNQcnBHQ2dmbEYqSHpDSDRqaEIuVypPPk5DaixZOWQzIkJ5OkZ2'@;
put 'bnYzRixlQSYsPmA8RGdTNV1VOHdhMUo5XXkoekBkZzBJXllNeU5uamo1aCxqUnRvYU1qbzttcWAhTCpRNiRhI1BZSVJWKiVkJUFfN1I8e0ovJSJ6UWJMK0I8bl9iaUBPfV8yTkorJEgqRT9+TltTTU1Kd1lWM100JnR2VXNoLHN9dFNnWlg1T0Q3dkFkbmgrZyFHKjI6S11HMjw8TlhUYzlNdEok'@;
put 'cz9FdjA/IyoiSmVmYTk4akJBKiNyUHlaMXEkUl5uWFZmOCx5NG5vaW0lJX55dFBbaiNbfDliRyReInlsc3FLX293KGl1SGBuYiRnVGBUdD8hQSJCRXRxVnp9ck9YUzFdIXkxY1BtUW0wIWxVdH49KU5HLzpuSVFzZTIwQStAJEYxXVVNT25sfDtEWlttfUFxRXtsdF9eezJIezVjfld+IkcyMXhI'@;
put 'OVZQdC9lMyM5NU8uUjozPyVdQFh1cStPVlU8PSo8XnMhWShmUyM+Z11rPlZ8W2NlWGNfZFdENSF+YkZ4Tlp9Yl1OOjVvbE05b3h2XVJoZFlVejwmbVB7SnN5dVhwW2FrPX5wQzxJUD8ublttLyFsTV16USx3PD9sND5SRGQjYEwoYmRfJkZxZVFFfSlkfUNnfU5pVHQ5WmYmelt5Ji4lRThOK2wq'@;
put 'Yk5vM3xCcD8vLlUmeTZSQmRybnUoMl1scFY3OXc4ZUdORjApXU1GSmdxdnEjcHZPXVFKT0x0N24yRmFyRzs0dFF4R2gjS3BOYEZTcmQ5dH4zN1lSJjRhYDV8Q1osKSQjLElUcjxYLmklK1gwKGdHMk8mX2oyYVR7NH4zKiQ3JW9KMFJMJi9aKEc2Jl10VFQpZDpoYiw8YjgjeEZPaEd3WHFpa0tx'@;
put 'LFUhMzQ3W0dYVEojbmh4S2B7Q2M+djdJNi4+dXh9ZSRfQSVNazkkW31SKEFrfVcxS2lveVNyLipGMTAzNV44SThlO0xONTkkVUBnSCgxMTthSThhbGcrXjljZHVrIzFoO0pxRTNlVzB4QiRQRW4zLkh4LnAjPWMwbHJPPkowREJlSjNzdiMrYG96IXFePlhRVVhjXnxPITojM0RMZGZQSmZgIjRd'@;
put 'cU0kM1Nrejx6JCY+SmBbJjJDYiNJZzxGYjleeSE3KyZ8PihyUkBgVzQ3b3ZydHtVJjNmSmo3SmQxJUlNQFdwbVZeeUJRKWUqb2BiVVNvQi88T0NeUSMvczQ7IyV6LDsrVngrYkM2JSN1WDlMKkVHLlVXOyxTT0RsV0BAI2EsVDZMUGYwYExjYT9TSDN0cUdCe1NBVk5ZPmBgbSZib2ZCO3Rqb2ZM'@;
put 'fDpJPCJ1YmYiLltrVF4yIVVNST1vTFhta3p7OWZCJGU9LlJZSzkzRzpvQHFEal4oPzJWZDlENnk/TVlMcE51Mk0kdFBDWVd0a0hSYjVXeV9xJihWVXNLdEdWKk49I0tMRFMiey5Vc2t4MityMFcmZytHfjBkQl9uK3I7OXVSMXwuKSJ4LlhkZjVJUUQmTiFIZD1MblhGKFV5SyhbZ01lL2BQIWtk'@;
put 'V3ZJaW9Lc1R0W3BsNz1sI3VuJFclLFIzUGlzS1FGSCprcmlrPk8uZFo4ez54aShCIlhUSSwlKXEuNT8lY0R+YixIaXJhejJ7N2pEJiwvc2VqPkUiKFZsfDBWPDhScV5hSGZaVy9vTyhlWm8oO0hhfEh+OmRjLjYjZl01VjVbb3spZXd4SjFJIz5VKnBjdnFpI3VAOStpVWhJcFVZWHBpM2kmVyRG'@;
put 'bXJSRW1gQ2AiUnFYS3lbLmszKzl6O2Q0akFYdSNvKERaZCFhfnQ/VTBELyt0KExOek0hUndsSXQ1SVYiTkh7e2xMU34+UTBjUTMxXyhBcz9gcCojUj1UbjYjVkU2PmBGVWl1TV05P3ZKPSVNaj1hdjtkW0YvTVcyalowS0NKKzVdfEJLT0xWWHdgbj92N2xjOGZ+Rl5oQFtpUjpQNjVhNUQiXl5B'@;
put 'byJWfCZMaDhTXmowb1NYVDQ9L216XlojK0RPLjgwS2F7Pis9TFQ4KklZemwqJXlIYjh0eC5STEg5bWQjZE15QzBlKy9DaEcqUyFKOi5seGxMUF4pSD55N3kqWkJOTVlmekJWL0o8RDApZ3dEPSlDPXlCUGNNO2R7SCR3ciZTRzFxIXYkM0lBNmd5PVFofUBCTFZlOS94LGtBcnBOLjwrP2tHQGNl'@;
put 'aHpqVVReeFd3KjVjXXwme1F8NVF0WSxEallFN1BSSjk5RTNZO2U3W0MkaEJTakttPCYqZF5hR04lKkxHSVspJixlI0hbcVIiXk1JSE1FSjk3WCZ3WWApUj5uI1VWTTMhYkRdWTlNYD44X1R+aEAwZ3JBJUhsNHY0dUppPW9CTUZJc2ZQfG15JGoqRzRafmglNk0vTSwkPGFGJSJEXWxqL2UrOUxa'@;
put 'YmJYRC5VMl51fkt6NyZdaD5AZWNLKXg/blJXfnpiaT1lJVFFfVY5THJUNlFqQGtoaWFuVWpRaVc+eEhvQ185UzM3UXpzbUw1NFB5Q298YnA2ODFuYVlpIjNOV29gVV9OOF1PTWpOX3tuU3dRK3slejhXaHA9UnVnLHIwJERBTVk6N1F5JEU6YmlgTFcpbldBUzgsI1BWaTolTGJ5Nl4rRkgiJGd1'@;
put 'UzZZXT98ZTNYOyNvfDpVVSRUKEppOlJGSElJTEl0XUlebWQ0IyNMVDdGQyZsT2xAe0ZCcU8kIzJ8YEJjfURrVyQ2JGJWOWh3Y3VZWHhfTihZPXtKMF0wdUpDeERHJVQqUS5hOzQ5JUR3RzhBI0Z0TGxSMn5WRGdgOiluRDIjYXsxYH19TyZiWnhrTldpfUhVeSF0QiUsaH1OZGNzPWlAOy4pP2xH'@;
put 'QlM5PztpTGhbWT1TSCtVeUN2YVlfY31KMWkvMURFbFNxeV9fejVpSXdvQV9EY31afXJfMjlhPiJ1STBFKUdxKF0kMlVvWGpDcTRIYGpXbHJ2W19XbDlULn08SmRGLilCQHlSO3lCXTdvampOQ2xwI25CQEoyT316M3FLYG4rPDsoVnAkWFA6cEBfYm4qZj09L1RNKyRudyt9dHRoSyZfUVNwKWJ1'@;
put 'OlNTWl1kYzVDQjBpOlE4fFhIKSVkcyJfREtSIXIuWDZKbyhATil9Q3BML3FEKCIoOWZITkh+NlhwNnw8eykpNlVoY3xxPnU9QEROVE9xNnddcVtLc2VGWEpPe1NdbHA0ZHJ0IihMc0R9V1ZlK2RDbyY4NXx7PFAqX3xUKUtUK0BmKT5oPEUrVV8mT3pCVUZidSV0R3klKWdLKDU7WV9LPnswcVZl'@;
put 'USpDNHBDZSkqJm5OLmQ0SWI+P2ZefX0/P2BROkUsW2FJbit9MUZnM3hNLkZmQ09sdjg9ai9WY1RhYHApJTVAUjt+Syh3QGNfJWRUM1kocEZnO2gwIVUkSl5XUzgpPj4qcC4rWDdrSU9Ibz9nOnk/TkJbe0hfXSwkW08pYXBxVnJfMDoiXj46JFYvS0pEUj9OL0ZxLmE7aWttJXRCKStLK3I4Pz9m'@;
put 'P3VKKFYxVmNdYSRzKF5TXiM9KTJxJH5sTH4yOXQ8SEVCVzkuPWRHXzUwZ1ZzY0gkSSZpOiZ4e2hINz5iVnB3aCpEMChKRH5kKTZHY3kxVjooellIZllQX1toJiR2K0JaR10xVztFM2woUSpCXyQicmtdRWxoXTIoMU9iWSYpKzhIWGgqV1tKQW9gaGAvQmBnPmNQOE11Y0JSO1tTfTZ1VSJJZXw7'@;
put 'O3B0KUhmcFVVbnZFMU49fSprJFldbkVSbCRXXTdCUHsmSmV8fUx1PCYuM3tvNmBwZWl4dmMxNERmPiFLJUkqYzc7P3dQQj0+bUpvMmNASj9IR0EvWSQ9Skl4OilUfHcqSEgxNEt4NUBIUGwrR1ghSz89Jnw9dDpSJHRzNTxUYGhrPFlOVE1mY2E5OjxVRnR6SW5wd3pudi5BLF81eW8uKX01TChr'@;
put 'WnZsdEZbVE00Ym5mZXsoVlNueyNhWGJOP1hYKjVpInU6Ol9FVmtqXyUsc0diUzZXTjZUQFNHSio5TCMxfG9yTHZtRTRgQSMoLjozdDV7TWZhUCVTSHc/PEEhQEM4YiFfOkc2SyMrOUpsO2NDbHpmZTlKO0d4N2leJTpEPm98MmA1YS9wZCZieG48QmhnaHQyRns5YTRHMjcyPlFhPHFHNG5bPEtJ'@;
put 'PilGMjV+PmJPTnp4eTgyNm5VZ29eaCpTYExxbCxnMlRVXXdmOStFWUAkO1VUZ2hARzJqJiYwdHtWaGRJMT0iMEI4Wmd0QmgoYEojeCVZa1tRaFVnOF83L3ZxKERAd1NxdHlCIV1Gek1hWG0sSHZOMGd4QzZSVmFQVls/aWBseGE3ZE1AOFopP2J8OF8vOzA2Q0pxZjQ+MU9aK2BlMDUiYkJDdllV'@;
put 'MWc3MHtKNkdANnRaUk5ocyl+K2tndTlqJVRPMDYsbithYFN6I35QRiJaMm9YekBXVU5FXmJvMW9uYkovRn57dG5uMFlyTWFbPTFmb29SYiRZOFMmLEpjZ3gvcSMkXypeaGk2OlV8IilPdSEmZlh1NzVWV2Q3JiNnLG5QQ0F8clB8cnBIMkhFMHckKEZ5YEJhdF05MCUuM09uUz1pekpudm17UElP'@;
put 'NiR4bzcpYXQsL0IxekpGUmJMfElGNH5JMGoySS9vZilhJkJyIzhtPWBebUpqN1MsI0VRJVFdXiFbK1FiOjBzbHR0ZiJNZTt5cHs3UlhEQiVURXdlPHw2ViFsbD8yOytNcjF7SzRScm1Ba3ZRUzB6QSpTdlZ9TmRILng+OzcyUjU4LFl9dFZWbGtwNzVqISVUbixXS3c4am5SL2hibXV7XTppJWs/'@;
put 'IWQoPWE+JHFQTihZYz9bOnpEWEJ2T0d4Iy93blJCfTZ9aXF6KkJYVyQ1dXpZZnYoZTJ+Ti44IWVHdDZpIj5lI29tV1ROZ3h2YUdaZEM0fit2MkgmR35qeVJFZSFLI1NAblkyWn4jZ1hKdkNSKmpyNktEMzo0bUVIJXxpJihFImd1TDcoMGkyUkhoO1ZVY3VDNTAufS8jLCFvVnJaWD5TKktPMkc9'@;
put 'MlIpWXgoISVKenhgIVFZNElyRTZpbmNyUk9hPFZyaUJwa1lTWCVQMkJIVkJrU0ZINiVZPWxKMUI+dCp4a35+TmRLdGdffDlFI1YhUXZNcS5ZNWFbKyM/fVdPIy5OVi9WdS9rNFc9YXQmR1tNTDZrdUM4VWAvK2laTW9hNng6S2hSMWtrRihCODpOTXpeaikrejBsRCkkPHIwWzY+N0U/aTErSC90'@;
put 'RmFLP1tPbEdQJit6Z3ArX0VkJmAzSjVZaWYzbG4/MFs/ekQmZ2NBZUlrPHVlOUcraEwpYTJ+aSMvaDlSL1I4R2U6WyNUL3s7bHg1MiZrcD0idWdxPUYodjpEKnhIXkFFRi9keFsqaH06fHMrP3U/LzhLcipCdzduKjwoK18rKy51OTR7aSpQO3Fee0s/VDEsajdvRHJZJlJJI2l6ZTw9MnE2W15J'@;
put 'QkJhYyI4SiRoKCkhRWkvPCUxVmBhI1RRMEp6cFIuPCUwRj97bSFhQkRiI1t7R3FbZl0+fnNGdSk/dzNUPGRwTjhHWCwoWmgvL1Q6emRNNkRAMlE8VC88eVBvKyZwOzYjazpDNzdpRHV4NWk0WHUmdTI4fHFPWEVtU0N6aWBxM0BZZlMqXS5PUlBHXUYpWltyUzouI2dUIUhZJSRIQXlfa0RVUFF+'@;
put 'JWxabWQ2VXlfe2g6T0pMW15YNiElMCNRfn1ldDRPZW1UelZddyQ8VW8jdlByMCFxJTpeXjVVI0Mue1lMcDpwczJOSnxpfjkoZTlCV0dNU0xefDlvOkVvTXl8fXRKaUImOFQ6PGN4JmEmNGs0aVNYYi5JfHJZKmckSX0zeChINz1hQl8oSjc/SihteyVxKnwhOVk0ej9gZXNoez5vPVtrJVlUTXhM'@;
put 'WCFRaiJlRXlQVSQhK3pvQGBAbCx5Ik83T2Z+ZiZmcn5eOXdRdzZsU34kcVRpfEllblRtNU0vNm81c3V1OW4uVXguUXFRS3BUPkEleVFhVGxGfDs+LmYrYjJIe0BNOnlkaXQ1S1ZyWSt5bSRLamlgWXgqTCN5aVcxTl5RfkJGS3I+ZURFfWBGOkloNXVDSzJaI2Y3dUFHdjwjaX05QyN6SUlRIV8q'@;
put 'SWtsJTB8a0U8ZFh9XT4oYWsrIlZXOjJGUWQvNUMhc3M+YCpzRlZvWV1IJml1Kkl7dnlye04yYWk/R1REaGplJjJ+VTFUcllwQ3RkW01CdTp+M2UlYVh+QTozcF9rWSwpfDF5MnFWaEE9dDFxL1B3Kzc+Q3llST03N28sYSZecX0kNzN7Mk1uUns9JUdGWCNqcUpLVXNuW2RnaGFtKUcsMV9NXnww'@;
put 'VEcod0phfnQ0emwpc1NjO1F2SDgvcU1qQH5KYUt2ejJTcVFkeUU8Q0IwSilybjx4KjFPZl8xXUMyN0w3Z3JeX2luZCw7bihHLiVDPVkiOFEvb0hVK0kuK3A3Q0FoNFVdPCY9Jm0wc2VANyMlNkc+NjJCeCZ2eiZVM0BBUFJCciVtVzI4T0NxOXlQYl9mejpZRXtmI25xOVRWYEozNyQ8InIxOi9o'@;
put 'eUsrMThHIktdflUyMWlTV2t+LDBZeiE6NERifFRbNm9KPjZFMSg+Xm96LkZZQ2ojbUt4Vy9DQStvPGI9RF1WSFNxajk6S3hsSX1kWmpVfGI4Uzw4MHciPUBYWV96ZTxIMlJgPkY1NHJsJENoMzw4XmE7W3Vyb1FyNFpVfm98LEEodywpdk18V0BXK1RvZihuMk0wPyZuTmxidCMiRnZoI3pMY3B1'@;
put 'fGVzZXUyQXBtNXhtJTF8OSlpbSMqX2NfOEIibnJjOnNUSylpV2pWMkBCRiYmb1Q3YVskfTZmUlZvK2c4P1B6bHAiVGhJezAmV2ExQmZDY11CKEZkenY4eFFHTW1ieHUkZkVqK2AvKntYbi5tfHhAQ1JUKWsvRWRHRytvMDAsLCV4S1B7MT9Paktldl58amFkLFcuKnVGLG8+ZiFFWDNwayYuUWN6'@;
put 'RH42VSE2PmV1Z280JWVVcyhvLyFDeihZXjRSPXpDWXNHW2B0KmNZWF9dajk4UHZXXnQqOzR7X0M4PiJROFJ3OVYwa1dzOFY/fnBrJEA4I2t8NThnJVJLNXtuK3BDOmJsNWkrfiUxamNGYjVLd0xeNmRIdm18VjdodTRUTn0/azYhYTY6NUVvQjtxXyMwY2FHaUVEUiFjOE1JXzByOUpzR1hXUTFx'@;
put 'byJJITBhbGVtS1FsYD5MMFklP2AkPSZMWFBebmpBaW1pKilGP2FEc1ZXUHlFX2lqN3FCYXExK3REVkN1a09yRHY9X1RALDAsdShVWz9LKGhCMUpyV2sjUEI1NGFadHRsSm0uYipKM155QjBiW3JTOjI/VlJVTHQzKFh+LGxYWjk6VHFSPGxwcVRQOG5gS2ZEMnhoJCZ7a19gJiwpSls2Qk5hSkha'@;
put 'YF9jTkteMjw9JV1gbWR8SUZnTkN9K3ImPHxfKz5yfTNLXmNUIT8qN1huaDVGTlt+LENqVyw4VlEyQVAzYWpDWHVPWzxaUF9lcEYiQT01aiRvO2pUMlcuQlV1cFdJflVdZl1PPFZrY349OkpsX24vdDUxJFQ1XWtDfSp6d11FMX5dPnFSfXFWNTlTTypreyw0aTQ8JSk+blplLlhETihVPyM8OFRC'@;
put 'IXlZSnxwJiszO18ve185PUc8JFNqPUlyPz4iWktvaHImPj48fXNMNmYyWVNsX31+eEU7YWMxcnFxZHolP1I/WHI2VDI/IjBvO283czIuKzIyZz1DOUsoZTpCJTxvYXVWM1swYDlMLzAwXnY5cik+UF1kd3RMOzd9MiNGUEZWUmpnTSEsS318Nl13bz40eE03SSY4cEYoUVdzNVR9QCZGNXthPXY7'@;
put 'QitGVn51TShBfi84dDh9ITV5L0lmQ2NHaT1GPi44LzZUNWxdb2ZQODsodHRQaW5fS3FKYzFzPVJVVm91YFVsbjVGZjlISk04c1I9PkY1Zz05eE5TJlJYbjpxT3F2WGN8TSZEbk8wXiVOaVc6R3RXRU9PeWJ1WkJ6aSYwW0YhclRHeUYke1cuKlRCZkBUWzQlflNfJnNfUzpvbXJoekhsdnBvL0dp'@;
put 'aCF1QT97KnZKMG06PiU5P0QjeV9KfVZ0QDxeUTpiVChZfit8fE5aY3lER0dPXVlsSF9NMTRQZkJiPixUNG9Ib3d9TW9UWld2JEEzMyxWfUFtN3BNaXhCYn0vZys/Zi5EekdJRWJIYX1AMiFBPGJZTWd+ZT1xRz95Zyl9TFA9MXAhI1k7bmdHQ2l8PDRBeExKcSVYOWlNKGE8PSE6RjwpIl90ZXU9'@;
put 'ImJdbF5tOlVhNls/V1ROdEQhUUlUPS5EOEk8I0VoLFd+WiF6Q1ojJm5ANzs9ZFFUVyR+Ji9YYE99KitBWXdyS3owK252MUklYkZReDdwK0NWKXs1WW93cTB2WExIMm9+WCF9IXNGNV49Lnp4aDJXLzxedHhIdT1TcDRzZi4/OX0oOSM8UTB8fnhmdF8+OURobmxFT2ZIVSRLbn5qZlJ5TzF0I2Qu'@;
put 'UkRgJVhyLmpWWiVAWXdGNHhsbHxfbWt3XmZGbTR4VmpifT12Y3NGeU5NSXdgNjM5TH44I0xhdi99djlxaDBQSH1+JT9bLnY0V1pvckhLPGNLXiUhRG18Sy9pbCtrajhwdXsyWnZ+YSV+YCZSSG4pIjU0KXVxMDYvPX5rZE1MYmdPVC8laEdFaDklMGJmbSNXdEFOX2xLakkyKnRKQiJmQV88Y3tM'@;
put 'MixxTyhQIUhdTFtoNHwlKzJvQSU9UGhvQkNpdj5QK0chQHEiUjZAWkRsInB+IXtQUjIiOFcoa3w2WVp+Vk4qeUx7VzYlQEQ4K31TWXBoc3s6aSpSRFUoXzJ3SkI1TEpxOFtbIUBJcT8jT1R7PzxZbXVeIX0zUDl6OUZPWiomQzAvSlI5SCh5TjtKI1dOPyJRcHRRPDE1L2ldTG1SeTJfYGxXJlNX'@;
put 'W2BxXylEYlluZWA+Rn52OGsya1Muc0VPd0g3WGtBQ2IlfSVjP3V9SEpBeCpGenBMJnpqTkNLYDVadCZLQ2I4fU9Sc1hCYU1ZTD9lQUY4Xz4wWXFDITtGbm89VGohPV0mTGVYZnJVVT15OCs9dHkjMXQ6T112bi5FQGVnaDsyfFJeZWp8a0N5TjohUCwpPzRnZSJ7YiNfK21Reis4U3BdP1toe2Fs'@;
put 'ST85RklLPX57REZdcyFdKWM8QjcsS0pfb0RoYGFkJF9tSn45QlMmY1IvOEpee3U9YlpGWU9sSzZ5O1I5NCswY21oUnIvWUFmQWBBWXpqdiFsITMpODNgbF55bmt9Qyk1KmApbGMubFh0TlZaRTkhfWBAW2c3Yy9pdDZrdik6RmBXPCFsM1NIdC85ZjxgSjRYPDZHI0kkTGYyWVtPZF1OOm1GUkhE'@;
put 'MEtML1lkYFNJUTVXSjliM1hyUGlMPXd1ITxUfmU4MEFMZmFATlglXU0mIkw6ZDg1Sy5QXndAaSxTdFNwfjh1Mi8iOnhubmhZXld6ZGlWYG4jOGliWTkoSTVfTytdKD5+S2ZQJFg8M0xNWkYrJXdVK3wsZzt3QF41eHwzaG44PTkjNSEwSiZ7QV9MN1cxNXhqY3NhWDFGM15xWzw/SyVYU0dnT0Eu'@;
put 'I25IezNqM21NQWwyUG08ITclYk0wdX1jVzUifC5zdVV0X0l3TTVaXlg5RHckd2luUWNsS09hOit3ckhzSE0uRnV3em51YiJANlRPZyxJdztXY08rZlc2K0tfdm9BX3h7N1Q3SytuQ3kkPkZRKSFUYGlWMHcpeCVrKiZjXXlPZEUsWURDYTY9dGErakJKVDJQRjZqfUtTQSN2PFViXmxJX0lGfD05'@;
put 'bm4+O19BNj0oSyRXNG1FKWZ4Z1B9Z2hFQGBsSl5jUl81KXhGflpRQmE+OUlnPU1CVFd4QVM3biVuMyxgK2dDLywpaWhOPCQ+Jil0Y0MrX1lnYzlFZGh9bWReJFJJZy85JWVZTklrODc6eTB9JkJ0aXt0W2ErP3hiTnAzSV5pflBFbSJGJGY/d341YVZHZlp5VXR0UyNTOVNnIkMsYytSI0ViKjpU'@;
put 'RUhnPVgodyM2OUklfk53QVpvZTJMJEV+VyxiMyxGMHhGYmR+SFt6R25SL2pYfVNjWTV+VCFAZjpPYjhCa1BJWS97Q1R4LiZ0IWxLTWtBJX1fTT41T3ZsXkM5SyFyaWhWbjwpTGdFPCV6aj0lQThLO0dgZCxQWGwoYTh3L3ZWMGFJSCxtJlYjPVNZVmpYSiNXRWYudzY0bVJkWGJHbWlePWVFR30h'@;
put 'T09kLmlmLjFoQT1MOGhyanBSNn4uPzBQPygwTih4OllHMT84Ny5iLyZvOUNWej5fQ1NHNldLJk5DcSVnZFYpP0VnfT5wSkclWUVqczdEU2hIKm1FUVU3WSMvRnNyLE09S2VbfmhPfFBGajJHNHVyeH5uLDtLK1UwTCRIRC95OlF3OFR0aHlLMFpSeSQuPkMlekU3cD54fntSejF8aip3TWZUKF4z'@;
put 'IVY5QGFCTy9oNz0kbiU3JS50JFchKFMibEFkdEI6JE5WbjtsL1JfSE5DTjpLX3k5RG12KWMsfkxzaVFjIUd0bzI9by52U3V6aX1SbF5xOy5tN2RzRWBPUEYoVGhrQShsPWpLSHE6KCJOeU5vcjNjbE9KfkZAd041d19nNj8uWSY/PExLTnY5a2A4emNWMU5tTk9deU07QXdRQzQxVWUuclJrM14i'@;
put 'fVNXYmBZI2YjOk9EOT5sO0k7NGRWWXZiYjo9aVVgdy9RLkFTfnhnWEJEL3BXXmQ5c1YsNXgwYEpvPGdTJDZSMCx2PTJTKVF4VHM8Y0B2RFdvOGg6dHp9WW53UipNSzZZMStESkFaOSNTUSkiczQsWXovX3xpLGUlMTY7Lj5AIkpfJEUmVW1ILyExJl5QWU14Z2suWmlgK0VHMnl9IyhGMENSaktV'@;
put 'KFR1L0FHSTJnaTBtSDdrUT9bdWsoSzN5OiZkcWRCd1AyZE5KYTtEZ31lKVo9IiQvTT9bP2EhMlZPRXJGWkkwZC9VZks7Kzt+WzA7Z1l8d3NmV1AudmN2IlJ1OUZ2MShYcW5wdnAvaEJpJH0mKiQkZm55RSo6Y21Md1hlOkN5b3prRmxmb1BkOUUzRTZfdjF2cjR+JGJTUWVMXyxIT3w2Q2ozPD92'@;
put 'NFo+LF5beEN9Q3w2dGwrMSxpVTMzdWJMSzo6P1t+WUl2P3U2cUBIJGxNYk5fVnIweiRSI1h8d1l2QG5tQywsM1UjUyIpWTMsd08wfD9BalFwK2BBMHpOSmZtXjlkdzBjSG15K1QrLnlsRyppPFRTJkQ2MzUlK25Se1tuUHF6fiQvNyEqOi54PzFTUz4vfChPPEhpaCh0e3ozT1JlVTouXWVNSkV2'@;
put 'amM3YmJ0bDt0ZGNAeEtLPExPXXJAeT90RzF7R0dQLFkhQiVjLiFwdDgvVFFVS2xmfSxeOVZRRUAsd2o6bjszKGJyRXZwdCpBekI7fGpUZFtyOlk6TEwvdHwwdisoREIoSlkvYzAzW0pUZ21qJU8pLCtMWjkvLCNdflpLKDx8LFdMdHcrJEpDLCtFKWFFPmAkUSMvNmtmeWJjLDI8OUVqJW5iLzYs'@;
put 'QntvN2hwcmRzJSU9eH5NXV0lQjk6TTNSTEBfKSghcz9vbmQ6JUJ8Iy9nakdReUtZTiMmOmd+TFlqUUA1QWZqcUlwcXtyYGRxcD9DTHl6Y3tIO25PdFRIPDRfSkpLaigzKyVPJFswIyFMYXZMVjBFSmpNcV1+VW4hSUtrNTVNOHRYdkhVJXhjWjhWSHJRLDFRWSpFRDN1TFA9PChEM2NVZnJ9ZyRo'@;
put 'SWV2YHtlcn4mN2Z7YDIrdWFyWEEwTGl8d1I9Vj1bQFMqKSZsayR7QjM/SEwvYnRVYltZPXhOZjF7TEh0InF+M3MreUg0XlpvZGRtPTMxQ2w9Yj1LUWNCL1BFbFV7P10vNl5EVEt0dlBgMTxvNEI8N1lfI0cjTDZPKzBxcmdOPiVdMH1RJmh4TGs6aDNQTiV4ZlF5NXxdLjddKlpTdyxFRVl8YU4q'@;
put 'Nyg7RTomIzU0YSlifF5yISt3KC9TcXV0fD4xREgyW3xNVzZVMEtec1t1MkFAPERJZnpEaVZFNW9feWMiP1toT2BqRiFKNX16WGNVMF1DU1o8LEAheX0wMCRhTyt8YjxjR3BDW0BzM1VgRyoycFtXd2x7JSM+ZGVjUmI1bWxkbEBAI0pldTk2QzpoQG52cn1OcHAmIk9nYDkkd3V2Nk9GdSNQTTFV'@;
put 'U0IoQH5De2IwTSk4LGgpZ0hSYGwoUCYoSiV2Qis9bnVvdyU4VW9jJVtHbXhFUixGNShFTSMmY2g/U1pZMCJQbTxOc2ZCTnN+TysmSEc9UmA9VEZnL21zeHNqI1YmPC5sK0dTb3RoV1IpdCRfX2VGQlpqc0swKkp5UGVXMVVFQCtZTV5dJFpBdWhWcUM4Uz5JQGplM3JLZDNCR0oidUJlayI7bThP'@;
put 'MUt6Vk1mRiFyVTtoail0TVM4SSh8al9kOT9lIiE+Q3tHaysxNTp0REhuaTUyVkhSWStNYWF8NWNOUVZLNFBqWTpPSmBCbHNzOntKMysrUnNIWF0kQHAxNH0qVyUhfXN8UzJMcn55KEg9M1B0Im9YNXJ3QXNqOTxIflVJayszZ15UWCYiIlsqPWBHPGdffmlmLD19QnNnfio5WG49RSVYP0MuPCx5'@;
put 'ZEo2UEB1WCk5c2ZJYGgoQHVqSyV9MnFRdDx5MGw9bkM2OXE4QXx5QlMwYkJOVGAvVlhgMUxGeUUpLm9Vezt+LmhqakU+P281RiM+cXtgOzxHVTkuQ0VsdG52dj10aUFAdWEscz5qdWxAYyZWb2VNLCFtSStJc1J2Qyt6Tn5ae2QwKTosYi48W2xAV1cwMjJtV0JaSEApV3hkN3wjKFNmU3F1MjEz'@;
put 'MW05dWNMVWg+QUEqPWFsZFJOMVczVHtqakwkfktWKnokc3B7RDBrL0tSZmtiNzRALEJUMHYrYlFNcWg5eWlLKyVGb3lzLkI5YjQ0KFZjQnV3WjFONihJQUVHfVlMb3EiUTJZXz17IygreWVfezNyQ3BXQDY5TShJdy8/e2FgQ3RpJF4iezhHN2AsJjdoNnZmcXJxT24vOHskLyVqfFlTRjw2OD5X'@;
put 'VzNpeUJNWFJ5ZkYpY3Asb1VTJE5iI3ElN3U4MkV0RilvUXw6YDV+MllTNi9JOUpzW19FSXIqQ2xuRyI4UDViZDI2fTNiIzMkfGw2XztzUXZ5W2lvdFZEPDQwO19+cDkmakhTSiFILEtTNG11fStqXk4uT0YwWTp9WVI0SHd6K1phUk1vT15oQmVhISNMWT06Ynx6XlpuZUN8Y1tqVlJwQjk2UCFL'@;
put 'R2lWdzcvQUA/T0Q4cls8djBVd0RfMWB+VypDbFRTSXU3e3ZbdlRxXW4rQS8xZUg9M0c8WGhpNDUzIWtfSDVje1olfiZeNGhoa0Rpa1pROlM+dm5xP2h1bzRec1g5SUVnSHQrWTp4MlU1dUk8ZXdwcHU/LmJaP2dSRFc8ajkuV19jdHk8XjdeQ0M1SiovS0JLZUVOaHMvNCtTLCo3JjJpSEcjfUMk'@;
put 'TTxOamVFcSxlVCpjREd6TH0rWWtyby5RTDIxPyopPyw/Yk1ISyIwYE0qWTRsfj5wdFgyW2VfSl87cmY+RnopXXdEVFI/dzpoTlEsV0d1RV5PJCgyXzkqQG56UVclNEtHfmpFU2RUVGBvUTRgRWxjc1JNRjZkQVojUVhOVmIkMERdPT5xJGheMW1sdFRTaGlHP05SVGRYX0tgSSpwfmk4ZjREPjs1'@;
put 'NHMpVD8xYFQ9VjpPWlB0XXI4KTE6UHZHQXVvfFFOLGYyUnl5L2VxKE5SRUQyKFQrM109TUM/aGdFWFtHbkFNfHxJSH12a2xRTXd4fEA4XSxiUSZZeGlSRV9kaEYwUWl8UTR0O3dGXUI1RF46LFZ6QF9RREFDMnV9JU1UYTtobFR9fkU0KVlePmd8MnN0Yz9OKzQqUF1HO29rX15BU1s+cTVpYzNT'@;
put 'O0wiPnIvIX0sOEs7Z2svcHgsP3JBVmJRQm13X18xJmpUTGM3aDxmdntpQDM+MTpOTHZaYUYpe2tGTHF6N2E8N3gyRXJGIWJTaThbWG93TV5PNy40Xmw8KGEpN0g1NkVbaFspYDs0cFZGVXY4emsrc2xUdiokNTBYem15YkhrQl5QM2xSa3xwLn0yRU5bXSFRKCM0UCs7bk5Ra0h2T3lbZ1RMaUgv'@;
put 'KlZMdno2TTN7ODJfTyRabjc3JmIzRk4pP1QkWDxjfWwyOltCem5bZEI7OyttMCkrVVclK0BOJjBnR1V6QzFkSH5vek9pKFRjODhVKloqaVpbNVFiOlJHP0M9X2Q7Sn5yR054PHl+VCxeJD4xclpDNktsSXlDfkksSmNbP3o4eXxqTio9U3R6MFpnZG9bfGY5dytXbngpT0I8UXtNaUxSUFlATm8w'@;
put 'dWNzUHc1UTQweyRgcDpETTEjUUBQcXNmaCh8T0VHXkRfM2trRTcoNWosbFJZWDdPaUtKfkBsQnNReXJiR19BclhhVFtjTl9IMSQ9YTMsNlpPRDJsSzh9IT05OTV0MUV2ekkzY0hmOSVsU2s4SktTSTlUaF87RllJXW86ZykpJl1nclF8MGt3L0tDP2BUei9SZ0AiNWRoOXwoJENvdCQoT0MreVll'@;
put 'JTl4YTxtZy9mXjFAaXJwUU14Q1o7cj5mKm1hWDNWb0Ndcy91Q3NDOkpQI2tZQjAiJUcxPC5Mb3NXNWNaMSs9cXh2SyZPUVBqOz9ILkRJIT5panksTmp+bSRdRSRDY1A+eD09RDUqaHduZW8oOXs8Q0lpZmNQYmJPbHs3clpgTGFlcGhDQC55Vj9nPTBOUyFEQ1U1S1I/YHg4ZXhAcm5bRmthREhH'@;
put 'bnx1JGtXbCpRMGpDMChpMkdFOzBAL2lnMnNRXmxJSkdDLixMQWV9K1ZCYCNbJE5DeHVpelUlKWxKTnpHJlslcD1JcCoqXWh3LCtCSWI7SmlBbyhJMmA2eWEzQns6azBaSkVrP0Q6OmlfZyw4W0YwSnNhKEwxZ1oqY19tci84Z2FKR2lqT0BQVnMvWCwsejRqcislZHtQflZwdkZjTkpDWFFDKWJV'@;
put 'RDNtNS5rJjtgKU90X3U5fCgreEBsInlCLEgpRXs7Ij8sT21QIWZJaSFyI0NtXSp1RDpoMy97SjN4dUtGNiw5MkFZUkVZW0dTZWcrXShpYmo3XnVddW0vfjRZVmBoaU1DJTU6UWI+ODBGUDB1ZkJicnRKWDJXOzZMWzA3aDIuISx5V31JWTpEX1A2fD1BXS5bdTV6X1N8ditiQSp0YWsmI2MyfjB9'@;
put 'MFlBdVo0PSZsK3RgVXRTKTAqflddQFFldFV4UWJIdCwkKDdyWTxDcVdnLzZrS15ELioqUVhUT20+Z29mQnx1OSFYYlkzWEtAb2FkP3w3N10wMGpackNEOGwyc0piPFN2JiNjcmEwe2E7bEl3dUNoVFl7YDRtSyoubmJsTXkwcDtCMlNdLGtwLDBIc3lDOypzMWRJJipINlk8VlhkIztsYFkqaywr'@;
put 'Oi46VFA/NHt6JlRFPUB8RTtdTWpXYFdJe2BESnkqSCtWPjU/TnlobHhuOyZyK0VjOHcoOUtvWXc/W1FAJnVKJilGXkhMNkNlan5AR2Q5blhNVUJbZWxRSHR8VW13R3xXKE50SWE2bT93W1ZAPDVZNi9wRkNITEJwfCh4ZDcoa21ffSt1e2d0VjtRZHxeK3xhemxNbU50ZDo/JklgbFpJJCRxLjAp'@;
put 'PV0lOWpPUS5LTTAkOCFpVnNNVUl6X0V0RiRtJD06YStGJXtAcC4jZkxAdihmVmkoVSZ6MiwocUUuP0QibE5uT0s3a3daeF8oZWQzOEApOEs9Uzc7cyZ1Y35aanhab0V5dkQ6b2pydGg0MkZDd0xHPD9qb0Y3KnRxKjVkek1SMzx8MXcjdEdpRmxUPlhxYXEoVlFaUGRnIWBNb0EyVkd0M19GX0My'@;
put 'UVQ7ez1gQGFKUGxrLiFoLjtYNitdRUcrOzo4Z2shRkg4L04lcUZVU2ciQj14V2QqSiFaSTFLb3QldSUwaiQhRCtPVT45YTdndWshMndkK1lERGlDMipNZ3FlWEh4SDxYfl1aNmJTPHFEXzR9IThdOl5WNDB4W2lLOUc2I1ZDU15bNjVITHA6TF55PkptezdfPixydUolLGB1OGg0dWA9c01vYWQ8'@;
put 'KjBZMF9gWFNiUFJ5eDpxb3JnWCxSVnxTZ35wT3l5XzF4SDhncDFDJmdiYD5mb0s+anQ1cVFiZjJUSEBRYj8vdytdO2Y/Qnw6RVB6OjgmIyp7dnNfNEdDSylwNGlxYjs7c1JFN1JhMjcrT1QvYE9kWjY4X3dkcDc7O0NaWXQhVkpHPlJ8cT1sbWhVV0VJPEJ9JkRVS3ttKlBraHFrcUIsQ3RHRmJr'@;
put 'MndaVXQ2SjUuKygoN1hadyoxX1huUDJHdDhrWEAmUyh5ei5mXkJDIUhfQyZ1QSw6P1Y1R3ZLR3lVeSQwa299WyJaYFo0bV54bDZCWV9pNU1MI2xjVXdzaEY9NkklWCM3Qiw3SldqRm0qMDkpNlh8aU5rKUo7alllOixKY3ZiU0p8ZDk+UFVrM0MlXm1XUkIvbzw9JCJUSnJ2O3c9MjUoczhWSSEr'@;
put 'Pn1bbW0uY2F7WUUyVDJ4OT1sfjlqPmVneyJJMDMzPH1aUV4xZiVVKU4wPCpSfXZ9Lk4rXzleOUJNajw7Z0BJLl5JZDNEfHciLjY7MkBufEE4OTFZdSpALG4lRmRzMHhYeXAySW80SGksTio7emNkdDMyQzFyK3pZPXQ3QlU4XmcrX2EoeXJhK3Q1KTBbKzZOL205T042fHA9fHQ6Z1AvPDNrP1BQ'@;
put 'TTE9endMYnk8dHpOTmouX3NEWW8/O3M8eiFGNTB0YlEvMk19SUN3N1hoekhiPGxteStJbE9OPmomKVJoeG00IVc3ZmJCNV55K1lPJWd1RW9yayxjVHRDK19XJnU8V2FzK2VXX2ZITm0qWCFvOV5DMyVdRF1ySTtMTEo5PlZLJjZ2P3h3QVQ+c0RRKzNDYjshNzsxRSRTYTFJSWtXYn5xJjwldnFb'@;
put 'JSg+ZDMoOG9WY3FEZCg9RmRzbE0pXWdGfD4sPjs4Wjd3ZkZGckkoK3JIdW58NWspQ0xZTzxuZ3UrKEleL0BKXyghIkEoLG1GYTJOLHV2IU1rMFM+bTpLPitVVS9IbVIpU2xGTikuQDEqezxIamMwRW1Efnk5fno3ISxXcVkuO216eiRJKnBZJSY7ZFVFKz4pU0YzaT9PeypkX3pPc35pXXQ3NiRE'@;
put 'PHIqfUpWIX16IkRYeUoiUUAvKjdiIV9uZDxaV3pdZXBaSlV0eHJbW3AiRj83OkszbjAlWyxlXWs0WSlJPEJQYztqbHk8MSgreV95IV9bYCU+eXxAcXNmV1pBKHdhZE06ZEpQZDQ1a0B8fSJ0Y1VBZWVZUGU6Iz06MVNsMFYuT3k2UE4kJTFVbV5uTEJ4cEcoT1h3ZXsoY21TcS5AUyFfeTYrJSQ6'@;
put 'fi5BRSJDO3t5NjRSRUs0Rko1ezhfN2p2L3RmU0pnNnQ5U11AYkZWcyU9eEQjRn56QSl2SCpnNCl1W3ZKYTVpIUxaUTJBJWVwIVZCVjI+LHxUOjdIKywqLkg+N0NWTlpWUDxnI1N3TVA8U3tVM0w0SGZVeiNycjZARDpuPSxaZ1AsaEM+c0Rge35FRmdMKllHfVl6TSFva25Bejgkdi5PRHBrNSpr'@;
put 'RC51fEI7T3Y7V1socF4rTllEM3dVUlZpV1hdXzA/SXdXZ2NoT056PVQudihbaERzQ2spXkFeSVVreV1Ic24zNW19UFpUOko8RldDZDA8X3R4dXdnXzhlVz46fiVvPFFNQG4wTz17aWVtSXg7ayM0bFFMaERIT2h3M0w1cTU5cjM1azgmPl1gQXRLX0EqfGk3ejRUSiw/emJPVkRBKCREQWRKdnZf'@;
put 'QD4oSlNFK31kSm50Pyh7RDpeKSRvKCNaPT1dKEReRnkpYG5KITU8cyQ7MlVXLE1FXUBEcD9uTmV2djRqLlFwP0dYOiRENDtuWlQzTWRkN11MMFdXWXpbbWI+K3lWQkBUcSxeJFFkSm1jdltmOjM9PlFSIXl4fj99djxXJCk4S1o8ZTxzMUZbN2VMK2dbPzojPjRXN0RTQ3gmaDUrNmZybm0hJCk8'@;
put 'e3AzcGZ7UEhqcl9AWzlAekx4Wi5JRCZMWHpWK0l8YnFNTEN3Q3c+S0s9VGtLVyZSY3FNVVtxXUduKkhgKlgvQEM7RUA1OGhZUyFkO31fXnNIQDhFaixgUDQ6Tyk/I1RjaiVOVGtjPDd4bXJCIl9oSlhXNyVNXSkmYDZvSUUsJX5FJixhZSNNODlsYVsySEJsLnpjOkh7d0tkdXkob3RNPXBePSJb'@;
put 'dUQqVThRM2lFLCI+InApNywrRHM5aHFJbFtRMTJOTV5TbD1TTVJ1WFRrSEEoQFVWNyQ+MUZXW2tXYkNadT93IzhKc3Q+SCorIztPR1hHQVEiO09eUnJOdFJuZ2ddT0I4Nm5tL0plUjFzLjpKODRaOkZGOGloJkcxPiovR1FVSGQyUUx3JXN2XjApYzk+Rm1WZHtpYVYjbmtFT1JeNUZKSmQrd2Y6'@;
put 'anM4NXFbPyg7cF00fTN1NUBvNlJ0e21vKF17ajdaaUV4d1tua25iRjVGPSpTbmshWXcqJD9RVnIkRi55aSVoZnQxczxsQWE/Qn0pM3UobFR7O3c4YnQ6Ym5kckk+NTxKVEk5QG02JDY2WSFaJE1YM2ZdWDdEcDdmV2hUXSpVLCFjIlZ2Zjl4Jk9TUnslZUpieERSInkxTGJ9UHdzKG5XYzY2SENs'@;
put 'RU9hejttLHh4OyRuYSRBaD9yVSFkST1TRTVCMHczdW1RNFdFTS5mVyFaYyZGW2ZYYD9OYkxdaHNmMVBpQnI1R25PfFFaP29AdEs3Ql5IOndWZnoucXoiUklXV2ZsIXh0cC9RTix7MShqJDJUbEgodyF3fjYkeCV1X3kyQ3hLYSIhTCZIP3Zqby5PciVJbVV0QiMrUFR5QVkxQnFzOEZoXTFoKTY/'@;
put 'dDwoYWA2eWA2eF4jUi85eXtLRCpFVUJobil1M0kiMX5RNDBKbmAkQShRW1Q8UF88YVlvWjJkZUJGbTt+SmoramV7b2EvTCQ1KD1fekRiW2UrdF8+b2hSQmNUZ2g3KXcjcXhJKGR0JnYqekMvYyNCdSF+ZntEOD85KVdCYjllU0w9ZUxOWih1cTFZKyooJH5QIVAoSGBJTG1tREdBPGhoLnxFZGt5'@;
put 'PSgyczF5dkdhb1A4JSNHekchP24wXXBZRTVocXcmM3tvRnx+eDwkfC5wTipyNiJyTkhHPkpoMTkvTip1ZWlOIWMhJElCOmoidHxfbyJfQEN3LEc/SHtgMXRBc0hCPXREMmk+fHpqRlJZJFdZK2lONVtqbVQ6XWtdPiZKUWRrOlZPZV02KHk+UFcyXztEPm0yXWtSKT0yUyFsaWpIfXxpOD5IdGRU'@;
put 'RkQ/LHs+SSVQTlFoTFljRi9LfXdSVFBeaCJ0MldNY3xqTlspNDcyUFVrPF9bMVtdWWRnTFohVGJvSXI0XTg3UyY5PEpdNVZNZlBzIiRZdU0+S3o6RkIqNlJAWHx3cnAySEJ7cD0+Myk/I29sejFgRHkhYDZKT1A6Y3QsQk4yPFA9V1tUflVsN01gITl9JCNHaTlLeChvbyJIaCE6fEdPVWd1YSJU'@;
put 'XT4+S1kwRmErSklRPUxBTzV8IjNXREYrdXl+ZiJ7R3Q2S3RDYi9oPkwxRl5penwoQFYsREFTI3ZecUx7KVJrOileTXg9Kjd8aXFpWDJpO3I3aXxKLlJ6fDNINiNwby5xdkdzUDBCTTNMdnM4ZCUjIygzYTssdjhZQ0pOaWBGbyZdaUM8KDoqcVo/W1ZgI2E9dUM9UClCYF5YXi9VN3Uic0VqZmZY'@;
put 'RWU7cmhEOzh3InY9ZHgzcDxiR2UpUyJdQGc5ITd7ekhYYlEsL3E5cjtRNGhmOCsiNERDKzIrSj5DfG80bkwsYWR4cX5mcDNybCU+Z048RixfbWBDTyt9KEFZfSJoMEJjeHwlfHFrd1BwIkdPTFk/UENbUHZkMUg+I0I+PW5YeVtCJn4+QjhIZSM6cTlCXVEsL1U/RGB+YV9DVWs3WSZndDl6K35D'@;
put 'OjplLzRONkNVK0pbRnpOZjFJbUJNM01QQkZecUtZRzxFfjxGdSw0KX5GIXw5cCM2OnRgWCx+eGVtQTExcjQzZ0oqJEt4cDNlS2s4dlN2XnhxP3VxdkQuSkF6KCtIQ3w7RFVRenw/Q2E/UChjcmNOLzhlLzZqLFNNR0tVPi9abnxTekswN1ZzTUE9QCFHODBFZGd0cX1jZH5hc3pwcCpgPDhlSDNv'@;
put 'Q3xRKShlMXRaaWwxPmYkVXMyNywrWFJHKnF+bUl4ImwxI3RsZ2hmczZoWCF1Kmo6K1tgZkM0OlZQQl9ZeXMzTip9JXIxWiskYkYmYDY1RHNuOl1oXSpYYiFEPGBDcGJVOXQ0PUdSYj12Sy9idmJEXjE3Q0gkRD8sISRhN2xZOnhMIT1QWzFzejBxczUqekBibFJ4eTAxInd6OitSNjNDLD1zJTlH'@;
put 'YFB2KnFyKn42QnxoRCZEcmJ3Lj0zPWU3b3Q0eHA5Yyg+eG1jPHZhcF4zKD9yQl5uMyFqYz59eFp+RE4oU0VhTkxvJEIoVGBNYDJKWzZIQjIiVWxQOE9sYTdPL24zWH0zYWspTi4pSyFZajB2REVDZ0N5fSJwKlJPcXgmO05RImFRalgrJkkmcDdxLGRMZGNfWX0pWysjWnRGP15RXjg6V3dbbGp0'@;
put 'SDZ4SmVlP1NsP1M/YCFnV2EwZiN8OnQqaCljOW5INT59TjQ9fm9vYkdeNHVtclJ6K1U0Yko8Pjw+cyhCSzVZUGVhe1FQZSZ1c2B3WGppOyg6c2olU309SjgxT0ZiSXpDI2N+R3Ykek15VXgiMkUyMFJgNyl4MjBzQ0A5Izo1WFBAU0MxOShFNk8uYFMpK21SQ0BaR0k1YiM1czk9YjkyOXMlK1N4'@;
put 'UHVLVzc/TmRTcktGWXR9L3I/dk1mJkdiQVoyVjRvZW50MU93UnkoV0BhQEM5ZUZPTGQrMENtcV5XM0B9Qy5VezJbZEZva1Y1JmcuZk1nSmNNY2h8eTR9JEI+bGU2XjFOUlMxVl5FMVk3d0FsdXhARlZyPmUmfUNAUmM8ZjpZYSVJT1pVRSRVa3cpeSZ+eWNAMitJfFl2c00wWnFCK25kZGxFaTNA'@;
put 'WSlge09zPzZlNEpLczJYd2BRPD0/K3J6Kj1eM28kKmk+Y2lxPVp2e1VsLCRzVUEpUEJkcV47KjI4SnRCNDxHN258VHxsMWNZbXhrZCk9fDlZdV1XSzN9aGojPTF4a3J0YlY5ZDpdcXMoTHQqMSVpKjdTNX11TXRtcm5HdSYiST9lN3Z9VypzNXRYc1tUVyVkZ2t1TXU6KH1LYFl+ajMlNE9wSUF2'@;
put 'KHouSjNKUGhXLH5wa28rL2hdR1oodW5mcV8vRlNSTWBZXip5YVFLfFJjMC5rJm5OQWpNdkhPfl0iPzUkTE0xc0JiYXxwfXhMQURNWzJfN19aWVFIdGNiWGNNaFU+WC90elBvZm1wdy9yQEYpK2EvfVc/XlhNWmtEO3pTVzBdMiw/Vz8qMS8ldHw6bSlAcSZVMWpMOThudU0uWUNWWmNAY1JNZFBE'@;
put 'YlMsZlsxeSh4RFhmKkc8YzBiKW45NlhCUGlHbmZ0Qm5wJiNNOlNJa1BhNHFsRUMuWyY1VF1Je1MkaS9oUGE4P3czKnVrZGIwPyJSbFApS2VkKEYySWB6MWJeOCt9cUs3NWMmPmw/eGpedSQ3WjBYJkU0UjxUJXRRP2VfSCRsOCl4VExqOHkyc1Q2e24/fCNxR05sJFAmUXo8Il5ZcXteSShxeXRi'@;
put 'JDcvLDI3byZndjI+fCFKfEkuQT1+Z0VSMmxyL21jYFt+Sj9jUWlJUTVVY1JOJjVvdTA/TElbWDYrZmVPKnNFRltMSXw1Xz0jSlpiJTFJflZtc31wUV1YUSZsNnwkV2VBMlkuIlRDSE17c1RgXkFZejZ0PDNSaWdbKShDdjBvK3VJPUc3YjJ0JDNAcn0vKFNDcjw5Iko2YFRnTEU+SzI2RHNoKTdd'@;
put 'QExFI3QwZCo8QXo7JG1kQyk0KVAicD4sYjwvOmRbL0dJUEkwenBVUW00SmpGVlg3czAlbE5FX2FENXF0I35XWn5rSHBxcEF8bH5pPHExXmJ0a0UlJTwhUmI8Y2hjdkY1KjVCWUo4SGAze0hudUNeNzZyNSw2bj5WcEdQfnEmLnduZiMwVix7cClYJjJEd25YYE07KWEqd2s2by51IkdoOjZvdWsm'@;
put 'NWxsZEdaLy9RTVB2TXorP1NtRi9rW2dYNXdZMzY4SGIoWWM8W35FckVRT3cwPW0pKmxEd3R0PH4uSUJQSSpSSlVAcnZMamRDODM9O3EleDFaT1k6ODxgTEVdXVdQMVlYSiw7PV1+aVB5RjhnYW1iIXdfcUZEISVxYnFrRzFzaVRZX0oiLEZNdS9UNl1GPWQ7JFcpejgvQjRERmxXZmFzN2FqTik0'@;
put 'S24wT3Z5e09HRC5Va1tyeHxIODAyRDZUPTNCZChrP0IxZ19+XU1Nan5BTWlvQiNJcTFZJklTTXgldTNjN1ZlPGBvdDpfeG9waEh1U3h9LE5IPCVYMUVVfG5KYzBpdjdkeVBGXkl0YDAwPnUiYGVxVil3SCFdIy4/K0Ese3lNPj5rfVJ5eUtCX3U2WWpEUiVXV1FiR0Q7eGhoJGIuNFkvUlp9blFq'@;
put 'cVBeXzsld0tSTj83ST9BIzFkXUxRTy8qZVRXbzFQX3Z+T3wvTWByalE4U0pjRn1NQ2NsOEZoR2o4cEBtMnAkSmJzWn1tZ3JZfEM4IX0pclJ+czZVTilBfSZAb0l3T3FLenBLYzxMKFI5NVY1XnFMPWFnaU5GRzY4cCQlV05kMkFlIWwrVVBxcihuQSkhNlZVN1R2SUJ5STZQZTxJYWpYfnwxSUs9'@;
put 'IjhwKFJaVSRgbkUubmNqY2R0Lys7VSpIOkZbYmNXNjpCSlYjJUpBY3RJaFExbng0XmhsPW86KGFuTytQbmhsMEFrMUxtTDk1I2AqfTNbKm0uJmt4RUMjIjAybC9oOldgdSxhU3pHQ34hKyJZYj0sdUU3REp3YUEiImNgNlJjNXZqTWtHZUUhcyYsQWZDcW5iIkJbNlQqU2pIWz9CZ115N2s4allL'@;
put 'YihBazEvZjA0eVg5MF9INX1tRT9UOz44a0tvVVZkM1lMWi9MSVEqMWdSSlFhUyQ/aDorYFZVZFtqOntZPXVAX3xgczJ8ZjxSPlUxIldUbWxMSk81QnlMQjJEIXF8dkF7VSYpcFQ2cy9ZfjVCO3VDKVUkaGU9LmpZckkvNS5oeGt0L0lPbHhgSEBFdTNDWnJRZ1tiPl14NE1qQ2pfMzNPNkFTMkUs'@;
put 'UDMuR2Bda0xPa1BDNnowW2ZpelFkUCZJdVtvYEBEWX55RiZ3dHtUem9vMl1zQStnRCZ+MitXaWZfKD5CVkgkWjIvNXtSLHoxJHwrcGxnaCplXlY8Z0IicyhGXTllOUlzSl1BVSI6bWo5YUQ/USgybnxHLCFza3xeL2gyNF9oekdmPWRFLzlWTyZDUEQhUS5aZ0crS2dOfk8laW1wNkZwdG1obSNI'@;
put 'OkpCPFI6TmhGJXUmRWRkeClXOjpiP0xNWVtzM1NZQEd1ZzwvUFAuPlcyVyV9SWFRUkZYem0pS192YkVKLFdPUFlELlE2eSRFbUpCTldDPEJZKmRPVUZwZHlRdm5kc3xTbkI5Q3tHKypvMmYzUW1ZLlZsO2RkVyRDdlRbQz14Im5CSiphTm9mRFlmcUYka3kqYFtNfThCOFlCc2goNXNENS5xVS9Y'@;
put 'dT40aFpER0ddZCM6dzxtdkduQ3YjV3oxPDZOWW1hJUgmY1QsUWMzfFskTlMxdkpzKlJ3K09yXVNZbjs/Nyh3QExdIzNSL0klVDxrRE5ZUmEwciQ+X2F4VDRXXjs1SlBrXip0TF0xKXBMVC5aWHBnQ2orfC83MD00cjdfcGVGO3l0fFdpN0leW01IanMpLDs7TV4rSTIqcV1DXnZAa1kuSkVIL3l3'@;
put 'e1tfU1dzLGddfVR4Li9NSyRlZEJwRixyZ3I5Y0tdW2k+K1d6JmNPb0ZRNWg/TWQ4Vl8xdHkmSkxEXUZTcVdeWVhJKCVzNXdzMjNCSTopQSVnQHY4JWwpZnpCVCN7fWIxO1UzUXNEdSgySipoKmJxXVVaelYzQ15EXyl+digjMFdSLCNgQU51Lk8udCV0MkdZZzIoZzZmT0llOjd7M1A0M1FlOmhE'@;
put 'Smp3UX59TGUuNDl0PGZ8Jjd0PzE0QkRbU2lpWV00UnxjfChEWiU8MiErbnFVMCw4eUYqalNQIjQ0K2I3PyRFNDtAayg/fEdzMk89NDRmP09+KU1BK3JiSHs2dmY8ZHArWCRWfHpRSFtTK2x9U2ddIjQ6b3lHSE85UW8jbWUvK1g5WFNOWHZsayxBXWZxJTRkamJsKmBZdTshTWdHP107anZVPTh+'@;
put 'KzAmTWlBczIsWDh8eW4uTGg7SG8/d0BQP2NVUnY8N2FpOyI5dVBPYW0rSGdbbHlOQ3kvOzJZKGAiZiRzanptVDliT0I9aWsjN2FZTVd+NnYoe2dLP1pdYjFCM2VWMEs9XSZyYDpHcW1xM3h5Qm5lPW4pPkQ+KXk3PTZWclZ+KnVWfSE+b2I9NkBGNUZHUVlAQzZlKEdIJm4vRCVyVm1mbjI/fXdw'@;
put 'a190eUxsbUJbWCU+KShTMlNNIiU7NmAxVTIsJFN+JWBsTWhRMEVga1oiK0VQbWNwMWVKfTp4SHNfeTNaVUkxRFJjWWpnVkM0X3tTMXE9Sl9OPXtYbyV6cnlBNlskQFokeSwwQzQkL1svS2N5QnlmbnRxI0huTUBhLnFweyFhaTh4NUNHYSlhbWpEMUU7PE1gdiZleFgzI3BjVSFwTEJaRkczcEBw'@;
put 'WENDT3QjY3JAPGV1U3drXnR1WTxHMkV8d2tDK080YD9ZKnNxSiJwdUVGVGFUZjsvM0VEe0VBRz4uUl4mYVpEYjpJWihddEd1d2MkUHQ8YD8wLy86cC9mWENZTi8zU3xNeG5PI21iXjolYzJMeDxvfX5mSlAzS0dhUlB+OCV4XWVBMVI9fk5XVCo9IjspVVU3ajBxJkVaKSp5dnE9YmpWRH57UXtS'@;
put 'cjY2MnBDMWF7TUdEKW02NmMsOU1PbiNNXjE3cFJkO1BgQW5CQWdiQSRwPE0uOH1kSlp6NV0uN3RYKG5GTCJZYjNaL1FtM3ksQyJqM1NTTUBqW3crUTJJbi86aEdmdld8STl3ayhYVndsViZkTTB5aGRlLDRzXk9TbDVUTDZsI0YuQjNUPGh+VzJORUdtMnF0OnRjP04qKzh4d1pAVjE9N0JEX148'@;
put 'VnFaIj16N01UOUIzIyJ5PnxDJjA2Uyw5ciNhYkIvRUdPYzFMPig4JUh+Y1lVKyhVVUJjO1FgfCZXbmosU0VYMGZKQ2N5Y3lSMGBHI1NzLjc1M29YRXBhdFN1S1FDZD9QRCIvSiJXSWwrTCJxIjFNJVJVWzokSHdLK2IofiRLM11ROVRRPGVRJGozV3FLRUZxcGBKbGRFOHcqWUEkQWEpUnM7VV9B'@;
put 'L24yXShIRDJdS0sqKWQ2QEddSUF2c0x8Pnp5PSxFPmRLWW0pZ2VzPHE3NUdvRCE5eWk2bnFgQjVEanBaSnRqWChINUFZfFFdUUt9IiRwV0ssRWNNLClRQzVSNXd7eFZtNDVCK3k4YCp5aTdMe2dmXV5td109ejhRemd6eDRJZyRJKnBYfmQ4c1ZNX3hUSj19UWx4eVprMmE6ezpkU3ghPi4/ZkBv'@;
put 'Z0hTWUBlIWFIJX03NzhCbyZ4flRIdnxeYk9OSWdbT3NmM09Gd2xpaj1gPzklYEBPTzkla1pjViolSlhLWklhNzQuMHd8KFRhSUEufHMlPlkobjNlMDw8ckM1dzdDSyNtYSF8YFhicSNMLH1VVG49Xkg4SkZmd0VxMXpjdDxIMmF8bCVxJURmNGJFeUtlZjFNaXBsXypdbSNiTVNpfCVpe0tOImQu'@;
put 'RTtbYCNuPz4kQllveF1yNSQ+Jn4uWGxlYFtOKSQ3IVMpP2Izbk9+KCpidGM+KWl5VTdTbUw8WVMpVT4lUlZlKVA1bnk9LDJ3JE5qT2hhUj0rbDciOnB9fDdmX0NmeikiQEdsIW8hY0Bsd0gjcnFba3xrQEVyRnhSbj00KG5wUmRqOH0xT3Q0ZFQyeThoV1B3d1JudDRLNyIyI1V3RyhDYih5UVgm'@;
put 'SWF0czU4QiZqaDpScyJiVGJ4cHQqbkA1TzBiaWl0bD9UWiJ7KDJhW0BWUjhgSilVNGFLSElsYV8uS0E/NUdzbyhPU15eRSpFIUZeMDJhbFNWODVsLjI3UHE9WHsyY0ZfJFReRiNlYGZXcDtaV1tDeXhFTndId1FvPSNae2FFdl1EOUxGJm92Z0pZVmp8QUIqaHxhe0Erfn5gUW40V0NzQyEvYmBK'@;
put 'QHgjci40KT9TdX5pLGJTWl1MaUBpc2ZgRik/M3lbKj4+QXgydzNeKU81UCJ3czghInlkc2BeazVbdlBVX0soRFVUUVtQI3RUInpmR3JVNW5lNFFNPyRbKWNkZXl3dTNzfSpzRlEuY3RpSmwrQmI3WEdofVJuZzk6KGJOZzpUJnYuIWN0eywhUWR2QFUjRDtVdHs1K1dJakM8Wjp1PHo6XXEuSmlR'@;
put 'SjhUJVdMeDgsdkRATEpSVzRPMGFUKS8kemJeUjghSnhQVzYiamAmMD5bSTMvcWQyYF1nR18jXURFfldsLilyRl8+bihubnlEVl9WPFMpXjZLJF4qXis2fkB3TUZqeCkvYllAbzlqYUpzaUwwfG9WTSEjJllqOyg3IThLRD5PIXk+V2gmYmBROSw+IX5+VSJqKSsxIi5NcWEvZlBhblV0ZT5ocHQp'@;
put 'cmJwcm1wMjtnfCQ9P18mckkzYnd2ezB8WTRlNnBkIz45RG89UkRrXSpEa3JCfVszL3VnJntqJmw5cTtEMlh5Ikg+JWksLkFrdGB8QHhxSi5naCQ2VDF5eD5kKX0kZjt8WU54OlN6PS58RVc4d20zN3M1bFZYZDg7PkVraS5wREllblRuSFJsKn0/LEw/Y3cycVRMd3sodk1MNEUzVndvW0wyRXBQ'@;
put 'bmRlK3FSXlBbOGchWj89bjBTeC96WDYyYFkpU1YrdlVnRHI/a2JAMWxQXy9IS2QzSCNFcUYuJnpXO298UDlzIyxpalQhfExQSGImU15jaTw8X1hUPlV5O0p+Q2hZXnBqLGZ1O1ldSHZ8K2F+WWZ4QiZndnApVy8kNHpTSzwyfFR0R0lVNXo7Rjh4LnEidzclbnRvI0owIX5YL3A4PSJ6I3pWa3o6'@;
put 'QGEkYnVaVEdJQlA9WSlOK0YoOSkqdGcyUl5DPD4ifng0I0tYODMiUTVQKCMhTk9wTzdaWzx6VCs/XkJwe2ZXST8kWDIpayk3RUgrcjZzVHxxIlNwM01KXXJFbE1JaDJrPStgTk4zMX4+VVoyRmU9VkE5M093emFwc3dwal4xOlN5WHV6XWBpRylNM19jT3woW082dyVTKXxNN31aSFhZOlJqOCV6'@;
put 'JjVPYUZ5SHlzOmVubT95RV5uTmFMczh2RVZWN3wrTDBsRHxfT0dZZC47PHUzZ0Fdaj9IYmUvYFdFNUZWeWEmand3JFV5Om1vW1Bia0V6TjVDYUpkM1o/bX42Rls9fXBNRTVtJDhQaTB9UEJ5djs6dk5wNFB+cFkqOD5fJl00dE01RXhHXj5DR146MW13KjI1Qnh1VHUsX2FgL2tkLmA3SjMxUEJp'@;
put 'UVA3QWp+fnBaKDtpYW52YEB0ZjdGbmtoWFFfZjBnfFRiN1JEcyF6fSZUREtuWWlYWTpRe2YkY1EzUzVeJSJ9eEB5SWFzQjZNbGNwRjFSbU42ZFhtcDhbJiwmRn5zRiFsPXkwTlJkISVscmI7d0V0dDdrM2wwcH5oQXsocWc+Y2FDRlZpZU91TXlvI3RAdUY4WXI2aXk1NTNUZyl0bzArV19LOFZa'@;
put 'SyFsTHAiMH4/SiYqaGZLYjlleFpUbWA/VUBiWmtMK3Ircjo1L1ZQeGJvZ2ZlQDooW1RIaHJ4LjZKYX1adVtiNiR2bDQvfDVCKzNbQHtWTHBMTzZqZjlrNWJMZENYI1M9W0xYNlJ6KlB4OzNNT1Y1MH1tKnwuYT88UjpUa1ZFSGY0R0E+PGc6c3tlSmxRdlJGKHBXXXhGVVU1Qylke2QuQWBVU0pT'@;
put 'dTRaaE5XRGkkXXQhfT1WT3VYa1tpISpIJUNjRGNCNTQuTHU6QUBjJS5VcVZPez5zUmldSFJHbGdfPCU4KGRZXWFXZ349ZDRYI1RuPXVxYmp2TyI3OmJLSWFVfkQhaXYpUUQ0Uk5jWjMkLnsoRzs/KFRIRjZkKVsqY2hHWXVQI2NuY0QxJiM6OUEyeDAmIWRfMGt+dFcuWGhKQXs2OGZCRURbYyZb'@;
put 'UkdCSzp2cmJTJmMyKnlCRTc5c0Nfd1E6NT9SKGJqfGJAdGAkRSwkfkAvPkhia05+SER6alRzdXVLdTxZKmlqS2c7dWZ5SjwhQnxNbW5HMSQjMlM+KXsqKnRgQiJCfVl8cl16OD9EMmsqQWIhLChDfjdhNC99TXRUKWJVNS9ZR3AyXzcibl1mR3tOS0hBaEcyUDc4PHdkKFJ6aERFWFc2P1Y6c29l'@;
put 'eTB9SWZHeFV2KmtCR2dKbGA+eWZhYHh9VEh8Qn1sKmtuMlMveE1TSU95RlA5VDZ9U3ROOyppTT4rOmtdbT8rZU9Leit4cFlTclU8MGdgX21Nb2VpcC5Hey5Hbzhjayp2LCF+JGRpLHp6MWs6OWZGU2xiOX19Kyk/bXVnUG1jW3RbfE94bFJVfHFkVT99TmgpcnhNYGBoNjZxJT05LmgwbWVYZF94'@;
put 'QSFvbltgbWlIIS5UUE5eZV1pMSh6dXI/S21YIUxWNWg8NltxZ2Z1XTJjQ0JEdSFlTWtAdi4kTUJGIU5VXmNdJm9eRVBdTlBpbyghYV9uTVY5M2NuM0BqZlskMWA+MXUuTGorQTNnPXB+dyM4ZX5pPmw2TD1eZHJieW5jcSFdTik7YWYhVyhZRDp4KzE0OkdhXU84SmFMPWRsMFBuUVEpUFledFZK'@;
put 'NmBXXnhwVE51SyhxNk8pRFJaNk42c1VsYStuPT9iRSs9RTVLWUN+USt5KiZ6cCljPjthZFt6OlcxUF5TNV93RmtrNVE7OmlaViQlRHVUbVU5WFRDYTlyOURNZWYqIlRfR14jPFBjJTpjUEF1QzAlXl1SUFVbbW4yQUlVYShOIXpgKHk2e1cmLzQpakNCdVR4cV4oUmdZZW1hbEhVOWQlXjM2VFhD'@;
put 'cENUJDYsZ2w0XXRlQzpYPV9wbXJ2cFtNdi5mRlNLSG1STm5xdU4sKmFNZm04cSNNQE0iKE9NJDVRTkhOKHlrdEAvRTtkTX1GN0d7WmlKdEB3U1MzP0o+KD9CaEIiSDtROSZZUEs7Um9iN1lUezUwYVU9JmExdj4hQl08UXw0b0klWGYiMF5Rek8wXyJzaHxTNEJLcnFNanU7KC84N2ZUTFpZeTt5'@;
put 'VmpDVylKJUx1Q0pyLj1abz9tVzVWPjA1aC52IyVIez5kNGZNZ1lWRDRLflZDRXB6aHsiITZueF9mYD57TSNGN3I9Jks4UDs1YXwjUjRbfjpHb1hXIWAsZ3woUkV0OT95PTIzNkQ6UVZ0aHp3T052ITFvNCFQPnBIOntibmsxLlBRLCU5V1I1dTRyeikkeDMufV90NUdgLjBNe2QxaTNSdHtVODx2'@;
put 'XS9lVWJbYWFVeDo0bztpQyQuZERBQkdVKENpbWEzb1dDJE4+Kyk5Q3MjR054Zi47NXxvMUI/cSoyeykyYE5PVk1jeXQqIlB1WT0ySytRPy9UWV5TanJEX3dVRDMwSzxoSSp2NFdaeF5yXk1uck8jaUZlSGk3WXZNcm8/aHlGejUuTV5jV0Q6bTg4Q11HS1BLe09BYDRWTi5FeTRTUDwyWXNpOHh4'@;
put 'UU9uUE9bU2dELGMvSVAlKVkhOSJ1eTE1Sjh8dDVdOmV5OTQjNHBFfXNTeDA1MUt6SEM5YiNCK1NxRS5He3ZibCFpX25Uc3RacGxmMGMzMClMXlRSPV5NY0gqVittJUFFckZVRkNxJjtRJixnaEpjfmpeZUdvPTckbSJvZE0vR1EpVTppVntFLEtFJjNUWG84UmoiblNKdWdKKEZ8alpGLl0pUDZS'@;
put 'P2x8XkhRWX5eJCRGRXYweCNGOEQsT3hxe0xsSmpMT3c2XnQldz5pb1FIc1hpdWU8I2IrTiNIbGduYEVQdUNFMTpoYGVQbGlNZkdzRHB8X1c7Tkk1LzdWSy45WUgwaWp6W1hDU1BTcUZlPVAxQ2wrSzclIzxRJEpdVjtIa2A/fUtEOmY8e3wyP0clbztoUC5Ta2lCOlpWdkdQXzJjYGlqLlQ3VVZ2'@;
put 'WWI7dU9XU241Oj5MVjx8fHI9VmtYcVJ9fiVwdnxTI287QnNnOT43fjhvezZ2JkNfMT50XjJ7RTVuRWlJOD01TVlaK24uRGJ9emklXkRyXXtCUHQ2TDBKI0J3KEllNkEucEVLS1FKdGFpTnVGKXBMRzUud2NwXlBRPmphbXU2KjcoPVFKcWJpYlg4aC5JI292VmM/NmBQcE9sJD49dzldOFpEbS9X'@;
put 'QUdicyVaMnszPXlyTmFkMGhqQ2x3Zyl0JF9LZEVvfWpVbW02Lk81QFF9QmwpI1QwfUhtVFNrRmxGZE8xJHIxZ2Q7QEI1TW5nOl8sKT9pOzZTJlMqeSNZWDswTlQ2WnYqeUY9fUZHNmlJbGNeXz11OWA0UzNPOEEmdVtwJmQzKVEoWSk2NX4yYkgqQTopSVduPiJQVFIjU1tBPUZ2PldBYHt3IVci'@;
put 'bXpoZnxUeEdWfSY3bzdva21VL0lPWisrREs0cmJCT2doKHAvPWMoOV1xZEVjQSlwbWE2fHw8TUFmVU19cjJMRHBjQHRjMGlPNXxKM1tYc190OG09fCNiajxIUThFdSlQbCw4d2hUIXpCenJKNFsqSk5aPnNhbF1DazpbeENlQ0BzfCE0d35mITUhMGwhW21VMVpfJkVCbmIsdUB5JTpYfUdMLyZF'@;
put 'THBVX2MyaWprLEFmUGNuN1BOeFBHSHhIbjlKWzwhLGtTQls7bSYrZE4melNRRWszV1JofiVVK25qNFBfRTgiYGAuR1ReOHMjeTFkJGBAPS9lVX1SMUpFa3s7W0VqPHt2Vy4vVSZtIlhdekRFcy5AdSVOb2RQY21GbkhMKz1fU3p7SWwjMWVXWm0oOyF6Z2R6PGVKUSEzQz0mIW88VXk9b2duR0Ul'@;
put 'VTJVW3koMnFgc21uMDc3R0AucX1MKmZJUSopZTZUL19zYVZkVV9TXztuMTRhMC9Kdi9MQEJgSyl+dU4sOCVMcEZGPj5TMHF1Zk5qVl5WKXJqczM6UHozeV9BcEd5PF1vR1RHREdvcVByPzBFKHJmRWI4cDtCWnJSTyQhOExmJmNDVXkuJjRudXJoeF9uYiRPPSxCR2ZuS0ghdEsjKjRGJSk2WEFx'@;
put 'Q1Rycis2XkxWLzd7fWZGbFQ8K0dVZU9tW2pFMUFOVzI4ejoyc1lzZyI7TzNIOGMjfHN+a3NVS3defl5HR2t8eCo8MjAhSVVPV3RRS1lTeyYsKFNfKzl9SjdlLlclPm5pUn1yY1BMeFQvZWtUOjR1XUM+cmNeLiRMci9BfDFrMnJXQEdaT1VDcU8+Y1FwcCtmSCwyYj1IdClbel9TaG4qcHR6S1px'@;
put 'ckhucD1bRSF8KlFTMHFxbU5UVC5OfjUkYGlscTtAOTkwQDVnfUwybS5RYGtHZWJ+Q19dYVIiJmBsJj4vdXtFNWM6NTFGP3NAO1BiIk5sbGJtXTduSDowSkgofnIxLC5fMnAmYGwrJnk4YVFjMXRIdEYhd3NrOzB3MD0qdms7MFs1KGglblpHU242QC9xQlF4ej5yTzV2em5JLnYmLEIiPS54S21i'@;
put 'VjBAQE9ISjAwc3RzWGJ5W3pNWFdManNXbWk8ezBYeVdGakxhcGAiMDJ7WWpTJSV5WWZJZWIxZmcifS5bej5QW30uTjosalBkOyFhbVIpWmRVYm8oQSJvNV5+ZHcrISxQWTdlTj5gYX5VRm9SdlNpUC97JDFaai8ycjo3IU0rJT5fVX4uK0wwPnpnPztpXyV2VEp9azo8U1ZGL2NvTnZLPWF7QXc6'@;
put 'RVBNQH1AaGdhREJiSUNsVHUrWUN7MHJOYTlPcCZ5byJLVzBBR2FzPSk6MntKakttIURvOV80KjZAZD92L1k8YU00WyRoS0IxfUdmIiY+alQvd0ZfSzQ3LEwzPEhWbzMkZzIyd3sldEFsYWBBOF5td3xCI3lPKWMrblQ2fkZhL244Qz5gcWtHYS8vPS5iSiQ6dzQrVFAhUChRKnpAITtMOS9zYFtp'@;
put 'JlNmZ3ooVDV+Z102YC5qazIvSVtDNlRIOE8+KCVoPlFpODRxOCxRaF9JcGdxXzE6KlNmbTxdMTpUPjZvfXt6WFMxeV4yWlQiPS5pIVcpZlh5aCZlYSlYOjk3eD4jL2RkV14/dGpUUyEvaykhYTl9L2tgMVFFWCt1W3xNSzpHS3xZbkpzKGAlbVNdazhfXTZRW0t+YW5+SldnNFVwPDV9czkkOl9e'@;
put 'fG5aUSwjcUgjZG9ob1c3fmdHKE9oLmlPckA7YmNTVGl2VkU9dFBSYUI/cnJIbEZzeFQoOCx9Vkcsbzg4c25gMzdsIUl+X0I/c2dyN1lseVVbeXBpSm8xVmVRcHUxKXgqdVd+T0hxdTVAcm15dEYyU2tNdHUkNCxoN3k3TyI2ajR9QytwKyFJInlUSUNJRG4hfXZZay4yPjwkYFN2aFgmK3tEIyIv'@;
put 'X3opLjl7SVN+bXJPSCU1PnsvfW5jOVdfR01KU3k3Q088XlpVcjRfPCkpR2UyXWkkZF9ISlIuOHZiVFNPOVJpM0M9JXYzc2M6YVVVdHwlRTd0YVdgY2pgfEMweW8xRSlDcVhRSiooSHcmOldkP2Z8Z05kMzJ9JXRLQTJuJjxDdClhfSZTTj9zY2dMUWtjNz5ieWQqQTx9TVN3QHhhPV1GKlRZUHZq'@;
put 'ekdKbTMlLnlFUkdfOFN2STB1VFhmezBPbGV+RlFEdGQvVXk/JkhPTygoNCokVzA/S0dOVyRWPihtWCNNYkR3RWVuc2prLj1dWmlbfDwrRFFwNiM3UCs0OnlwVjp0Wkt3fFhIbE1gdnFTUUYvTF4oTUZGTG9vfilsQVpgKjJ9RmVzWT0oYDlHWEJmXiJDKHl7eURuOl91bEkkR0lxNCUvSD9tczop'@;
put 'eUVNP0BiWFFJPGtkIyhRaFo/JENicktpeDpzaiVFK2hmJG5mSShNSlg3eFd1dENJM2w4e3pUSWhSLkx6Zl5DIzJlYlQ6Z3d+Xk10Xmkwfj9+Nm5Nd2h7JD5+ZHZhPy92MzooYnpzeF4ycWV1KHZIaiZnQm46ayUzWHhoTWZ7eiFvPEkrXk5WKUN9UmNrR1V3T2BpTS5WMGJSeiI4OmBPZE5QWlV5'@;
put 'LkkjLFVocEZ9NF1RISk7ck1GWDFtJj0kMjgvLG9xIUNGLkZDR1kxITU6QHZ9fT11dDUlQ01yPENJNX1YSCwyQGJDalRpMDFMLkc5cCxvWEYkeDwqaiJjfSVpJkgreX1hVjkyK1V9cD5VYUdWZVkhaTswNjV1bUtpMCN3U31eQ042TikzXm9CU35VJCIqbyhrMz43cyltfFFDRXI8YnhvcFFhREpT'@;
put 'fiRKXkpedHd3ZjRKeTd7WmxQfHw0JlgvRng3SSlBdjFHdWF8XlZleFRkdDBIVXpIdDhHd0lSUEhjKm0hKyF7dTBdJSV5VXohcmR8TiQ/dz9qODUwVThvLCVqTlJyJHxkfldoSUZaTUtLVEUuRExrQj9zeH19S1RmZ2N3P3MxJiwvQzowQixVfVNmQU9XfF1FIlhRWUx8TT5jUUNyR25TYzlSc0V6'@;
put 'UFVmSCM4US4mZXB2VCtIZnJNLjIqQEJYQENbd1Axb01gNilVSzgwPHI3JTJFVylFeFpfQChvSzAyVEYkI18vMlNiMm9hTzM7VW1KImBidyZ6ZzJOXXFkOGEjOTB0YXM6R14vfkI3OWw1b0IxMXB5eGohJHxde0QoXixgeCtpV2hVSDVRbnFZLmpYfikjZiRzOmM9RU80SmJhZlZrXks+XT50NFhJ'@;
put 'eSRRbHRdQGJWZUdEYjsjeE8+Uj9rIWZzKnkjcVkyO31IVTRPW1tSYnAoNGZ9USN9U0hPTCpyP20+Ui9tN3wjZmM1KzAiUlI9LGFSY2ovV0ZURWQkZTJ9UjpsazRKeTNrUSEjOytZflpQPnV1ZH0jSzdeTEBkP0RFOi98QDdTanMqekVKOGVHZnwjVVRnKFs8T3A2I2EweGpbZGdERUdGPmJsVT5z'@;
put 'IWxEcil9S3FgTXZeW3JOZmEsR2IiYiRCU2phe3hLd25AKGdnNiQ7LlFFOU9rOi5BZE4uRkBkIUNNc2ZlSGFfR2J8IVEpMT8sX0smM1QvR0VjaVt4KVp5Rk5mOkw7NCMmNT8yNShzQl5APWFLLEVkOCUsVntJZmhxWyxKYTExPiosTytCOmh+PSMzOioxd293LEg1WjRfXkVpeUA+TFlHckVwK0A/'@;
put 'ZlA8MyZsIzx3c0h6Kn5MckllSmMmeFI3eTF4YEshaGpRLC82e2I+X0VyaGJsJF9NT31uallqaH5MMlA+RX1FRVp9KX4iT1MveHJjeUAwZyoyMDZvYmFnXm4iPi94O0NSQm9vMWlRMFc6WDlEUj9BZFIsajx6KXp4bTkrKTUpXklkTUpTYyR2P3ZZe0tjK24qbiVUZm5dMHB4TWt4I11LUishRWpT'@;
put 'WltSLzdhYk19JF9ic0VnPFQvLGlscmR7bzQ1YWFBOiw/LFllfHk/c1JvM2o+ZnpmJF9ITzFdbFZlViJLczg+cT5eRTxYVTYqbCRkJGA8eFhALzI2PnI5QVldUkp5fE44TjdUcTlxQGEuT1lVLlhwZl4iWHw4KU0jcUZmdzdTMyI8QjZqQzAsQEBdIX0uY10vZDptKTRQYSNSZG9mUC9zVVFGS2Bd'@;
put 'V2MjJC9jPGxsfH5mMEJOVEMsSDBdOzkkL2grIUZUOixvOSVvMTFUR3dyPilaUH5XRkgxLzJTYko3TFo4Q00pWDdvYX5ySEVmLllyIkxgN2E5Qn5sImplTVZ6aHhMIU06Qmo4YSQ3YyxeM0k4b1FgbD19fFh1IXRdekoveHZte1I2TXtoPW5WRWUmWjhQKVJYMlRSdiM0MjkxPHAzV3AsfXNzfn4h'@;
put 'e35TMSsuP3RpdiRVTSokLEl5MCZJWl57dFRsTl44WUhuKkQxc0U3NEpIN3pyd0xuPTxHP0thT0YkSytwOWZaMzRXZDwjdHRDb0cofEN5MFY/RUclNF1MK2E0dlc/dVhdQyslR0AlX3VTKntAKG4pQnJRejpfUEg9UGovbXNZb3pTZ115ZnlGNCx6XmZ4dW1ZNkRfRUhhKWpfb1BeXyg0aF9RKE5F'@;
put 'ZUhOOnEsX35EZng3X2J3NV4vdnxRcnNnPW9FPjwmQUIrOXY8ZytRUzYuOXNTdjZfb2ZDelNmNzxdMzRmcjk4Lm55ViN1dTEsalhhTmZoTFVFRzhKWXh1dEdDdnhZOWMveDhtJTE0QGFpdkdIJUo2JTJ5PGNRUX5tPU53XVdwdHJDOk9wbntXIy5DdDpAayFjVlV7M0QwNkgiRjI+aEtnRilwNDlX'@;
put 'Lm5MZn4kOS54YXFgfj9xY3NAJShYODxdO1V6dj83NjwpSGguRHJicHMqa31GNVsiPE1pTXo+SHpbVzsyNkpreHVifGAhSFBiaGorailCZE4ubmk5OXExPUVVJTxvYEppOkFtOk59RDF6Xlk5RkE0UXZ0P0hERGUsT2ZZUi5KNGo+fi5kYCZVcVVWYWhDNWQ+IUpqVUA0JCZYcjJUUGJhJmRfU0dd'@;
put 'REsyOUlmOTdIe215PnpFMiZwRVFWcFNHeG1TdHZ9QG83WzdSNVdRTEw3XXs5JGgjPGc+fWFlWGwlMjF+UyR+WTRdKlNNKlNlQ2FZJTdkSE98XV87RH0pJVoqPStOO3h6WV42LlArXkhaJmVTLHBeTFYoI2smW0NJN3xvZiVQc1ZDKXAoc3AmOS5+NnNPQVV5Ryp+cDJvb1IqemhYLDFmZWs+eTdK'@;
put 'MzJhMSkxOzMpcCpUSWlFImFNRSxRcmd7Z3R3P25LandAUlVFN0hPfE4kOnB+QF9OKlloKGgraXJ0KkUoczZASUohZnlUSD9DTzlkPn1BO2wsT3YpNzgyOi5SXXs2M21dM0RaRzd2ME9VPXRKU0NzOTJITDsyYmMpUncmYVBLNG5Wc35vTkRmIj8rKlZke2RzOlQ2VmJQSDtFbDQhKzJgUG96NG1T'@;
put 'QE04Mi84YlR6IUJ+ISQ9NUhdMVVFUGB6YiUzXk9+XzIwcTs0LHZuZURXZVo1ZkpQJkNMdmB3XTxyTWJUMj8jczczeV90X0RvKTFDYU1AOStidy5HLDNOcDZkIiQ3VyVwZ3UpbWZNYlRvbzJtWmxJV1kzQEZ7O1BdViwyaD5XJX1YMDpeMG1AMTc7X1JxPUlhWn5PMVl3dls+ND1ALm0yLCttSDBi'@;
put 'elFbNiNARlUlI2Z1V1daVX5oZmFOMS58c3Fkay5sZHlTKkpfL308TUNubF8+cXhARm8zWy9rKG5sTFU+XSlCJXBhS1Z9NSJURiVNMH5BPXNqPl0wQiVwRThVfXg2THg5TTB+fjRjdUk7W3NubEExU3AuTD5dWkMlcE9HODsvQ25eSEJiOV5FPDwhKjJVUVlue1J5VEYoWkhpRHAmaHk6RFJkb35z'@;
put 'ISN2RSlnJiwlcF84TH5nZF40ITosdU5GYk8wfl0jL08kO0w4VEZYNj9OTyV6Wz8lWThkNERaaCwiNmRkX3pnLHNrYlY3czxXeElFTnF1WG9aeFgzb1MlO1ByaGw2TiEkQ3BEXzYocmVyMjIvLnxrL0o6O3t+NGVjdykxNz17djxLR2RebWY/PDNldDBecGc7bXEkQCZ+MjdXZGphanFwIWA7UCZa'@;
put 'P3NUUFB9I2khMiZvLE8wQnZeRTg+ZnZpIW9eYzhnb2hRbEN5IzBmKlJLZG5je3s6cF5ffW9yLj4sPypmSjg0akleXy5aUlFEfVI9Xl9HQ05qbUR+OUU7aWU2UDoxamA+ZH1WMkBKZXJzNCgyMltifHlUayY1X00wP3tfd0Yse1sqY2ZfPDdsVilARlFlRkBtczBOZUF1UTM+a3cyJUtfKnYleiM3'@;
put 'JVY1XlJpfVUqdWAwXnwwPiRXNWNCTEg0PH5ZWUxMWDQ8fmJzXUN4cUI2dTpvWyZgZ28pUmhfW2cudjYvOk0+fjdjQWBPamRvUyplKHs3JGQ7eCpPWjRoYD98blZKYzVuMS41ckA6QDo2LH4xeEBXMkNeNGQ9PDRTbCt5aUFTWSVbZWNlR08wPl5KdkwlVSIyKHMqS0A6P0Z+cCtqVHZER2pAIm95'@;
put 'JShZMH5jKUZ0VklTSFVOJURzQ20mTE9HQiU9fEZ8Mms4LzRzUylPfkxvOjlxb1Z4LzN6eTc4KSxfbld8fC9RbD5KRyJxQTtNWk5mUTpTUC9rUGp3UGQ+bTh9bTJWYVd8UEsualciQS9RZyNkYzosQWtCJkxRaklSJXMsUjZpU0t8Oi9QXTBIOTpgYUomLzBCLGooWFNsOn4lOTZFW0MyNjhCPiJh'@;
put 'QmIxZ3VWcjJFXkhUd0UsMm57OXwhbDAqNDheUjhUcmpXbm04bnBEZldUR2lUWk1LRW1YajJnLixkbz5SeEVXbl44YmNWK2g6eVc5JFp7LGpqYmxCfTVQNitDU357dHhpVzVkemZLQTRKR08xSEcpQWtyWVVrdTlxZFF+Rz1uUiE0ZmA1IUo4RiFZQ2wiPUcxWyEvWkFSbH4zTEMrVTxmSkZGMmFM'@;
put 'MHdHbiVAWXFLUCx1VHVEPH1+aTNEOWpvIz0qTnlETV1bKTsrMlhXZSZNPkV9XUZicFMlWyZ2eXJSYUtdYjdfMF1FPlk9Wnk3Wk8jZnVOKXtsIzlRQjl8X0kzayphWldCU1pKRnE+KVtgaStDSzM+InUydUEqRzVeJF5GN3s4WXojbHt3c2ZzbHk0PlAjbHsvM2lzPV1xMGxaYlB7O2B1WndTSTsl'@;
put 'd3sxcz9dcjwhMXE2TGtVNVY0UU4sQSR2QVs8Ny5nJFM3azNQIldudjp0d1BHdk1WM3k9Iyova29fWVFfYlgyXzhDZHxZMUdvPWUmcXlbQk12OTNLIy9BKlY2IlVwd0B+R105bVl6RGRERlM5SFtbcDdWcltRVCFyUGVTZVVuLyJmOil6KWZMK1Z9c1JjOXE0RHl+KDdEWjljWylxeT84eUJwc1E8'@;
put 'fDckWSFEXVt+RF1YSHtdaH5xKHZrSzk+Q1MqN3VPW084e1BldXk7WlRLUThBLzUjZmJEMH5WcEJraDpiNlpVXTVoRVk3KTQhNkQ0dWNxWTRuXiE8YEB8OyVkUXgqYVpAYH1MPjBqYEomTihTSjMsKVpucHZ9Vz12UTc9WEZyIzlgQFVHLl1VJC47Vmd+L3tMSUw7QHU9JSo4O2VRTCJmS2xLc0BQ'@;
put 'ZnFLbW5pIyojWV9yaCEvUEFYSiwkbUlgcjZMRXUqYSxQOikvbn4yOUIleVNbQzRMKkN+eHlTYW4oUi5ddiRWcDl7L3VUY3lrZCs7R3lCLDVXeEp3cm95LlUkUC4ieEx3RGcieCkrUi4yUzY+eVM1OlZDaUJ1fm94OWRUMUs9ZzpDQl8mV0khe1AmU25Eflt6bF5Rbmg2XVRPZ3Q2UjJxXnZJRSZO'@;
put 'KWt4JEswXk83VkNhJE5naTJoe0x+L3s0ZTZmbmYyR0lbbmZtZlZjN1lKeyxhSjNOKEV8YXx3PmhFO1lJeDc/KTFJOVNlPyh3W1V7XWBgZyZDKVN8Il9nZkxFTTJ9a092YV9nOl5YZ19TXzBJcm9SZFFqJWF1XXFZIyEsbTReXzYwJHV2MEVoY3VWckp2blE1Oj97a0swY0h5JDJFVi9LYiV5UzBa'@;
put 'IjtHLFFRJkNxUl5iOFQxfmZdTzEkci46YlFTXmAhVXNqb3lTMjI/MDNHX3xhPHwsbVdYQ3gpTis5cmpiQlMmUDZCOGp9OytCaUU3WWw2Ml48RWh+R0lyaHU2bzNrTyV6KkBmXkhBaSl7bCYxVy4pfV1DLlFfKjFwNDZDOlV6ckJOUDN3OEFaVyw9aCl6ejk0bCllYyVXZUcjQl1OWn5DVEh9cmc0'@;
put 'LnJnSX1Ke096Z1N+SkxSYEp7Z1UrcyQhO0opI1ZudiZUNFNwUX1KbSU5cE0+MVFRcFhbMDhJfUFHd2ptYFRgVH5Pe35XV3g7OUl9QVZSV3hdITo3RUk1ckw4VzsoYnlDZHxOQTg6ei57JCw3X1d0VmI0MjEuN2hJYlYyejQ/KEdbQlNXWX0oPFRAcVJyMWFCd1s/SXJIJUV3WVFwXUs0RHFrdmBL'@;
put 'ZTBDfiVZVzUkTTxoUWhfNHRJMkJfXXszQWBTNjIqSXxpYX5hQEo7bX0zKGc5XUtkVyxMXUgvUXJ4QEcpa09yRUpCWkJzJlZDeV4jVn02T0c2O34hazxxPENUdE9fZ1JQbD1nLEp1LktneEYkTlA8aDRgLkQ1KGNub1FWeW8yajN3Pm4mM1YlO0BQMCpoKG5mUmZMbDxmMjZvLEZselMsMypUbUl1'@;
put 'X01KWyluZkg9Kyo5eDk7QGg8SmJVX1M1PmhzYi9reFNISjwoOyR7JGlEaCt8VW0lXSZqalh9Z2BvWWVCSCtzK202TW9TWnFMLnMsTGxdfGYyNUUpSnIyWjppckIlSHJKPXBzXXNeRXVfN0dOL05PfT1QSCZnUlBkRmI5aUZYaXZhN1M9WTVVcSljdFM0XzchVDZiUW9+JW9yPkU7ZDBTNnw1OV81'@;
put 'NF4kTSteSS9LJUZIbDdnPVlTLDBKKChZbW9sJnd+eF4xJSIuM200UzdKU1V5VT1AO1kiej5OSVUuVTFnc1N0PnU6cXVmMV1zTGFadyZUY188SiVQWjIoeG5hSVtVOnIhRGg5XVV+YlVtU3k8OyhXaW9TdTt5PjhgTUZ+eFAxQHBSNnhva0x8NEQwQGJGNF83Z1I4czpnd0RkWF0+T2Nvd0ghNkwm'@;
put 'IUE9a2l6cVlvO1E5dThbOVhIaVMpLyo5az1RfEBTTzt1KzQvSFQ5L0ZOdl07LHFeOkQ9YnU4LDM0RWh1O1o3N01uTENtb3lWLzV7O04kPFRXXmJwb0RbdDV9YiR+T0JJZVZ0MSxyLGlfQSNTNW98O2drUSt8fDFrOSU4Tkc4UFAwImpQTmUlQlt6KWJaZ2gpVFcoZmdydTNpSC96PD9SKC4oIUY4'@;
put 'a2hITW9LLDVePz93M2tSUCVbTXYxP2tud2VXMXR9cnVOPGRlWDhWcmxKT1AvaT42W0A9YU1oLkdlIXxAV3paSU9ZZWxYK2tFSTU5IyFDdUgqQCppOTpETl5fRnNfVkZQYVNuYX0wZlZIZmIqQVFVeU0uNyxFYzNxQ05eX1MlYjU7KjdZMHJjSlBTKGxJenswWXc2WTEsaH5BUl8kMz8sQFMoJXV0'@;
put 'Yz9MZHwpLyw/aDZmXn49Y19JfTt4Y193b2FyIzVvPVBWayRrfC5NN0olUVB3JmhreU1rcm5yQmBjY3k/emNZK219eE52dkpeLyE4WkJSSjcrLHNnTF9eM1libSJkNkldcS5Nbi4iUV5SR29JSDN3VGt0SVlhPT93QiR+UVdpVCg0dzBQdmBBRVFuSWJNTyFyP0RJSE1zfHJxOEljTVc/SmZZRFh1'@;
put 'akxhZXkmYCY0UT5RY3dbP0A/UFlQJEp8UHBuS0NycElnUCs8MyVGLCJSTmdDZVN3ZmhEKFU1NlpVNjdVOnJRMzBlZUBjWzs7R0loQGd9Ry8vdyFGQz5FT3ZrSHtZe2V9QzRrREw5IlFzKlAyUDF4an0vJWomJUVXVyN8UC9ZMS9kSF4uTU5DcFdgZG9QXzsqMmBvdSE2VnFzKEI1Mm1gWk1hND5Y'@;
put 'dklQbmdeL3ZKVXZJUGp+PlZzeVZaO0pTZjBnOTtqczlkVDFzI3g3Uy8uIS8xLFBHNTJFd25LOls7Z2NLcShSSiw2YTV6bVJPUXN8Z19laE9ETlcvP0J0YSkyJFhWVXE3PF59eWZVdjU+am9eZENVaUtbelM0R3xvUHBtJUNEOjhGVlgvLHdEXTMoTXFKSFttPlcyfCkjTjl4fXI/MXo5QiVoNX03'@;
put 'PWxeO0dRN1JleDIvPW5RNSZpZy99ZEQhPntMMmkxdTR4W31sbX4pfWtzYUl7Qz47Ylk0UiNGWjpCI19ncDtYajVoQTUqdWAkeWt1VlhPMH4uTUEpejBQd21mZXhCTSNXRF9OJm1ZKC59MS9GcUoiRjYlbEVYfTMmTmE3b0BfdzhPZX1Hdkd3QmdPUWM5XjYsa1RIciUrRC47NlJtZjJFZywvfF1X'@;
put 'PDtyRmo3OmQ3d2J4S1oyP0FdcCg1c1EqdyJOd0A4eyJHWG9+S1NPQyxYNiJieysiRy90UUAmRHBIPU87RiQ6KjFfQ09OJGs5MFFxRFA5aUI1NnBHXVt6XnEsam90U2tEWjMrYyR4ZjclMixsNEdSXWM1RHReUD5ecyZLIUIxTDxvYDNCNkwrMnp+OVFQQSw3JD4+W0s5UHMkIVdVOD4lQlhJd2hz'@;
put 'RHcyMiVqNERCLnYsZTBiW1JtbkM7fVdpQWpLS3J9M3BIbCkscFlqdCtFWV9ed158RHIjJTIzSU9rZi8zSSo1P19NZkpBIXdAS0g0YWR4JlJgVSFZfGpsSEZGQFs/Si89ZjRVNF8wL0U2WUlmNldvKDhmXzBwRVZYfShLLkR1Sk9hI3F8K0lRKHpdRG1scXxyUjo9dmxUdmttKS9eTStvYzIpYWkv'@;
put 'RjBgdkVsRjEhOlFpTH13Qk1ncSlsaz5TSzJzJCVAdUFMYWhwMjFucjlaalEsPltnTktpWykyWyR2YV9NNkEiOjo4cDorXmlpSVg6djVKPUdEcHtiNVheYWpOb1opMllXXzh+Wyg4L05fYGV3cy9RW3JZTlc4bEJ3Q0pSZmh4IUh8QjsjOCI6Y1spcWdkNnhBWzkkTUt8MThoak4zKi8sdkkmSSVn'@;
put 'RDBlSFRteVFnQ290fXpfezxBZ3FVXzd3VEpaVSxvakRWL0tEJnl3Q3NCeExANH17K1d9fkc2WTB4emdmM35ZVVNJP0xaYDFvNUBKeDlbaXc3JCg2NWQ3K0FrRStqeHxmKT5jXS5xdkxkZ2ByM21FdS5GND0lZk9RTHpTJTw4JChzVyt5eEIqZi46U3RsITprTGRTLFNIITNNL2c5RVREWHheU2lL'@;
put 'QzcoQWc1NG51OHZmRzcoNCQzQ0pPX19TJCphKChUIypwUHpxSV0sY3VuRzcoPmoqaVApQ10jaDI5bCJmQVRrPGV3NXd8NElhRU92fCFzVyMxLixHMHdHaSlAUD5sbjc4WVpZT3A6NVEwZSFZZXh6X1MuWUQ1Jmc+dktPaV1wamBmYXEvRiZHcUokWCpSbWFzbGM6Wj1GImxrIWhYdSl9TW4/Jlhx'@;
put 'YGcyPkdoRF89I2pSPT5OJCl9cGt1L3Y9YDlaTmRQUHYhM3pkTH43YS80fCgmST18NylHRiJvZT0vMkIuZ3o/TlRUW19XJG8hWHxpWTdYRE0kTXt8SEdwNHlyUyI5NXBhJE10VVlJYl0yeUV6ZEdlVitMXVpNfUx8eH5kQkd+eUtXe0BWaV0sck9yPiY+T2x8RXwrTzZQWlZVY1RAdWQpYD5jSypY'@;
put 'dzxLPGRic3tZPFdJWGRkQkU1cnNfMmxUIn1zR3NRfXkvO1cpamBkNmR6czhMK0x9RiJPcl08eT5ENktOaDZbPjJrJEt7cEV4Pkc3TDx9T0cxSnpEZE4scixqfnIrNzN8fSx2MHAlTUFhVlovS3l8blZpcWN3MyViWlNlaiEhfEh2RW9AKWxhckxBTjxXWWxXMERkTix2QXswaUZNfTk1eGpaXjl8'@;
put 'Kzc/fF88alVzVldASHxHYnFbLGdWcUV6VSllOj9QMERIdXkyNUMkNVcueSgjQyNyYStyVXh8aDF1VzA/YnxPbWZaX1NXNDB6Z0luK3dbIXJFTXQwRTg6R0dGKCM5eSs4VkRQcjFIMS5uYXUrXXhKaEtUV0hoVS87aD9Le1B9XnwjOSN0Vm5wOkJMXSUxNUA6JFpXcCNNJUo6ZGkhJDEyb2Bweltp'@;
put 'dVtLMi8xWlhXU0o3PHJsZkVyOzYsYTAwN0g2WTBTJDl5ZiFaS1MiWXNFb3U6MHJfKTcuWnFjd1VAaUJ1PlRlQDNINW9WSkFzeUN6MHd+KilaWXMyR3laTz4iMzJLVldefDZMJXNTK1pxPDRdZVJCJnAoVzc5e003OTlIdH4weTVjYSZPXm9MVmNKMnQ1NW96ITN+bjdlKUd8Wkl+N05WVFpJYFE9'@;
put 'K3JWQkl7a0d6Y1VValthel58dGQvZ3ZgZVEzbWYsNkByfmZIdDNRb0VwW2loeGlkX1NkJCFPO20xcmN3IXEkV1cod2RkeWtAZ0phKiJSSWArbSF2RER4Y2JUeSYkZHcwem87KGNaRi5SWGAzKn5+KFo8eS86V1BLeGJoUHA+KlF+Zjg3THhvJVFLKkpEVUI1M2sqbzNUQ0lEbmQ7PW1QUnUvLFZ4'@;
put 'QCMvYzFnV0lsQj5GLz96WFluVm52YEt5fExwa0cjQFgmU0QwdHRWUFNKKkA/R0xaX15QUk0iMXRkRmVtN2pgezNyfEd8bDhYWiJPJERCTW5WSXJ4WDZNYH5zay9nVnFNZChtJW1QKWQvaygwXjppIztRZD5PelZEbG55dDZTWEhaYFs7b2Z5dkNmUHs7fW4vVjVHI3A2PFo3TytJPWRmISJQJGF4'@;
put 'IilJPVllJiJQJEM1QXdQJGQ0KyJQJDw3aXlQJCN5bHRQJF4yPiJQJDQzXSJQJCJ4RCpJPSlhcnRQJC8wIiJQJG42Q0M2PFJmSndQJCY1S0M2PDArL1ZESW8lP2czRUY9XVEweDpUaC54KlR0c2taQm1FXjNGRSVML1ZMSUdkQS94Kk9IfS54KipyV1FwNSskT0dNUlhTQlgmancpcj1vOUFUKHMq'@;
put 'YHszXSxRKHp5SVA9WTtWWSk/WXBkREAlKSxPRT45a35xXktvYWk5blV6am0oYjFzVCt5LD9GfENIZ2d3R1NxKTRpeTY1ZldHX1NBUTpKREh2TFZjSltLei40WCFmP1ldNy5WJjNsR2ZBa09uLmtTcWNTKzMlJGsyeSZDOHM6KkhBaTc2W3pvQTF3bzw0LE8keUpORE5ibD0jdmMmP3hAdDghTjd8'@;
put 'IUBuIS9gdTk9OXN0IUBBbDhgcnkzPjhge3RCbzRUa3h+RnF+Z2whcFV3L2psYGsvbCVoKG9DITAmSD1vZnlzRCEwIjN5ZGlzc2JfUyF8WTZfNEx0SyklTkpwKHtlRGJ8Y2hfXmJ0XXN7Z2w3PkRPX182KEMqUXlPazA5Nzc1LGBnYDE3SmRDYXgyTD0wfj9kVDFyeWtdOjRbIkU+b2JJZyRPKWU2'@;
put 'PFo3XkRpXnhRLkAjMCtkKyVlTC52LG4/NTxfQlomIVZkdyRhYUltLE88IUNRSio9MGlDXihJN0VFNTR2JTBFS3p4NSU0UjIxSipCN0k1WSI0aFRFV3NMRnJLPCZnTChXLiNSTnp3UD5uSTt3MGsyPG8oY2Q4PltnQ3pnaTd3UjdlJFRXc3svVWJ8JHlXMj1DdFhjREM6b2Z6U0xEcFNkdEBadiR5'@;
put 'VkUsaV06NjpAaD5sKGFSZ3NQSlEpYTBPdDVxRCIrNkJzQCRDQG1RY1ZRU3RHRV9YcktZZUtXNFlnVnVZeyRPQXtwcjBhUTdXamc/fXZEL3VARiFmM14hSH44ZmlweEhSdVVbJW5zXTpOM3FbIzBnUno1JTVIXSwzellpdkZDMV98QzpvVFdXcVlHTSZTKn0vQG01dCRxaVBScTlyPnA0W2smUDF1'@;
put 'a21YYCQ3NltOenM6d1pIRVRRbGtXUmg7K2pxRHlvdXdWWlgpeX0rYn0jc2VdVlBoYzdNLFZEV3NXZ1BoY2F6YnJXcTRVYFhkKlZ1P3ZYRG9hPDJ6cV4pKXdVW1MmdCtIQTsmcjBlOyl+NCU4QyFdR1FEc0Z9bS5RKG5HaXx+KDhCPmlSLkpAI1dZdEBObGFZbyg+QHopY01RSDp9TUhkdkkqPTcv'@;
put 'YSVscjZnfENjbiV0XnNrTDM+aEI8fiZJND5sQmhQYHJ2WjIwfSpMX3NKMj9BYEc+flNjQEFgU05jeTYvOk1FfCl4MnwseUJWLzU0WW1aZnR5L2dCO3NRWTM+VytTTChaPDJ4cTg1W1I2b2RDfWVINEdNTlk/fC5fP2MmP1liIXNlXThLQGdSdz8uN0B5ZmEqXnc+Jj56RnQyR21bUEB+KUY7R3xV'@;
put 'bj4zR0FCdChbOWg3Sn4+On4zbU4qYURJSjoiRUg8eD5oJD03Uj9kdy9NMTV9cUZsTnx7Slt6LGh+akwzPih2ZyxuKlZhLlYmSiZDVSw7bkZfanlqQ2IjNHR1a2x2OV05b2Rudz9YQ3Eoc1RTa3M6UlJYOG1UUDNMfiZ1LnhaelY3T3A0UFUxK3NtNzR8amVdfHhxODVqKksjOHkveTk+UltEK3xA'@;
put 'd3pSKEY4MGNALlorU0xiTztKbyYqK3g9IX11YEpOMz5ddUs+TF8lOi59UlA5M3h8fmQuaiV+aF1vbG00W1JGNWpaUF0hNWolYmpJJCtSajRVMTAqanJOfiMjJklPMmRZZkAkMiYiJTV0O35ffT9tOkVocXxKfF17WE0sNjt4PnJbYVI2bXYoKF1NLnZEOGBTMGUqfTs2cGUmM3cqZ0pRKlg6NT4x'@;
put 'fnQlSD1hck8/PjRpRjtFcEswSXt3cXcuNndWTz03YHJpeTt9TzdKL19NbWcvUSQ1QyRaU3NqfDJeT35+UTxNZmxiRC9EO2IoIixWSmNPKH4oWWg0aXcmT11BI058NmVOLkpEN3M+ajorcTUyS0F4ej1JYW0ydXtUPSNqSjIleDUqNEY9ZVAwYlQ8UWhrQ11qZXhvWTVrJDgjfWZEcFRlTXU0TiZd'@;
put 'TGM3cUwvTGwlfVQsbDJyXlZ5NH1nK35pKmB8SEtaTXllIn0qL3NKYzltISQ9anlLLnRXPDRXMCpGNnY3d3k/IThFMDgrdz5SPjNnbnVXcUQ9dll3U0FXMCZtcmFoP3VBJE09MTFFb3ZieERkQjdDezdjbiNIYXIyOHhoOzl4aDc5ODdSUD9vano8dj0vMDEjUiJCcXkhNUM/Y1U4JTosV1MkNUJs'@;
put 'L3IjW2tlSEg2IV4maj8hbmYlUDtfdkIwRG8zPXswbS97LjRCXjEsX3dZVGhSQCZLQyhTcW1nVW40P35dd11COElGRFpTL0g5WjV3dDxIZlZeS2VeWE4wZjc7SU8sd20+WVVrSCNabGQ6YjgxNlQwMzYoOEFsMWNGNFYzWm1wfDgvUzg1Y3lvaHxvPDQkXlJFe2EkU3phPUROIiRSMEYvSUZ4Yzdz'@;
put 'dChSR1o9VDBRW1YzeCR3SDomfWZCcHxIJCMrV0NuIkhoPGNnNnVnRGoxKntSayErW3N3MTF7NkpuQHk8aFFCTldjeXd+WCZNJkY0eT8pK3J+LEBWNXtlP01vMmQ2UGFRJXtafStIKXN2PHRUe1l6OW4zJk4xLjN1ZFVnWmFrISsqMi80dVQkWkx+ai4sRFRwKU9eSnt+a0gjcl4pXTduM0lSRyhO'@;
put 'ezF5TnwvJnwjQFNrcVMxXU11Zk8/WjJFKDVgODxMd3x2dn09JjlyUUJhPk0sIj9QXTE8NCVLbTxkYzFXTUcmXX5hWWtyYlc4VldWOTU/RF9ZP1tvNTk3Xy5laE03eV5oez5xekJhJjU1N1RyaXVCQlpkYCZ7ZGBlQ2hZLENNPE5pb2AvWUBFJH1sKjhANE5ONnowb34qRHc4aVA7b1NkLi9pTDU1'@;
put 'VlcmX110bDBWYjVLSj1YIld6Wj1MUkc6X31LakJZNl5LTEdMRmUiemtVZkFub25xPUs6JkNPblFzJVJ8JEQjTXN4QXRvKSErcE00UjZAcChFbXZJTiU+QUBVNnVMfjp+TkE0Sm9LLzVVfThgXXEoPiNhTXhpelQ2LHMoblp9OVEzdStyJDYrO1R5T0k7ZERAT1s/Q09pYklLTzs9LnZJO19TJnBB'@;
put 'ZFo/bCtDS1UjTkVMVlJdPSlvRl5Fa3FjX316KTR1fGUoLmJocSZlWHt5RHt9ZCswWzY1MHArZEFCTXxzd1NASypId3tXTVdXWUpgQHFuViI+fHVPWTQkdFdXTF0zK3JPSD9dVnVuP29gZCJuP0U9VkJTO1cyJnJtN1s0TzBrV3c6cUxCb3F0XkxhNTFCbC5TPUg0OUhUWmE1W1IxPD85eSpBTnsw'@;
put 'bkxLan1GNVt9IUBXWmNNdlJ9PztudjpLXnlGMlZML0AjOWc9VyIzJkRsKTpOfDw+VXRBQ0cwbHhJIX40S2NkYEVAVn1NRlJ9PD5VdCN9SDJCLkFrQVNCIjg1c3VuL1tzc096VSk6YSU3fkFVb1NpT20oUnQsQUp0NV1vUUhLXXlIW147P116Km1YbWd3eTI1V0AucXBQYTkqPmUxbntwY1RvZ25L'@;
put 'c1pMOyk8Q1tYZStHOioxMVBELnhYajlqNn4lJTspPEA2bTkwWlcmLm1UdVR8dGo+KnN4M3FraWw5ITU4IypSSDdsX2U3UGtOT2ViWiZqV2R+PyFIQTlmWkNFb1RYQVIwQGtpNHdeWUY8biRVfDJ6O2ZGdnxPe1Q/OVhFKmdDTDJWW2ZIbntRWEhBWjB+KU8jPFJ4bVIjKmp2aUt0OnJqJCkjTzpF'@;
put 'JTw+NSxgenJjd0hqRTFgdixOQTUrLmM0fnRjY01hXUNENkE4OTRdflZKO0tCLyRDen1uRjl8PFo/cVRfLCZqPHRDLGZqMjJ1dHY/YD85QVMjLzFsTE9fM3F1LFJxKCIsRk5yKGkjNGo+UjpSVTFsIXZNfmdGc3cmImRXMml6e3BKR2xUIVlEeXZ3WktORyxwOk16Pz8iO2JAQC4yQG9KJVYlPlRt'@;
put 'QDpyfC5aeloldWU4Zn55dUQ9R0VCUSRQRGF6KHZoRG8sJWp8OGdTWVVlcnEuYHNUXyg+X31kT3tiUUNtWnIyS3xpe3k2Z3JSX2VETShtTVJuVnBgKmpYM3N+Uz86P10/bklbMCtxTlswPEh1KSJ1S14kbF0ua0NoRUY/WnJ0NHprMV5hPUB4bCtLeWpUfnpYWFpOKCNyQWpAcUU7dF4kMGEiJllp'@;
put 'a2djV2h1UnJVUD8qJWo2bFN2WXJpZXt6fFpVTyZMcXVkL0JUTCYsVzNNMGJBV1k3QDgmU19GbWdvdDwmaEo8VVt5UzduTXoiPlNvLz1YaTtUfWVYPSFSdi4mWyY1Zn15MmFkYUM6fnRgeltSLys4Q08lcnMySCFIJmhScnAxMjM4PFJLTmxCMz8mUj1wRiZ+ZDs6ait3VDBXdkcsQD9LWVJUTzg7'@;
put 'Z2EwYlJbPSZPOFZIO0hpaFhENk9sOyY6NlN1aTQjQjB5KiReYiNQWiN1MChZe0EyPGJZW05oO3YvPHd3bzM+TC4+Vkk/LDJoQCwyVCZ5dXoyJl5WcVNrUihQN21oJiZbJWRPXjwmPlslM3tnKHhzamVlJWNAVDh2P1YxJWwsOlMmT2l5dDNfVTpBdiI4NiwxNiU3KGgjP2IlYixFbSpWdWdRMFUh'@;
put 'KTlCbzVGSyZaYVl+NW57fj9LJEFvVTNaL0BPYnhQLDBHQkFBNnlbNytEVVJsRnlyaHdieShfYHFxYmg2fF1UbC4jYUsobFdPbUt+UE9uaWBUSWZIdW5QaEtKYEtvfnp9bVRJRTZ1UXg4Ojl4JElaRHMxXk1oP2goM1EsNE9KeywwTzU0JWgrUnllfl5HbFlRN2E5eklMbm89NmcybzlYSGxgMCoi'@;
put 'Uls/bThzYyZTZVFxYWh5LHV0TDRScUsvdVcuR0o1JiFYJWkjO2dQd2lKcH1mKUU0PVJjNixDKDZeYCM0SUZCZExQSFU/JkA6cldfWDZKMH5BTj9LNHhdPmtuSXgiX3RsUEwrciUuS04vNllASFJmdCtnc3osLFlgSFkpQCMxSHpKNTl5O0FtU104SU1xPnRtUVYiQ2tmPiosRylUSXF7LFJxKHRF'@;
put 'bCxLaWs7a3JhSmgvaEU3ezU+TSY1ZzAjZnhoNFduM1h1PiNJcSo/U2M7MjRpZ11DNExddTFfRUNMaV9oVlFxdSlFImU7dltAWEVpeFF6aDRtMUN8JSNVdW1VXU5wUnY8I3hyJio9PXtqSGxGfig1KWtpMkBrX2N+eShqQSFBRHxjYEZdMzhZXyw5QElgPztWLEUrZCNrP3tYXTpqcHRXOUxSK3Ar'@;
put 'R3ckTXY7bl0zM3A3UHVDL1g+RmVGQVhCaVVyejZSPWdCM25PKGJgdDpONVorOWlANzJEZz9Sdks4JFEjRF4zUzNtdkpXKDs1QGU0e0pnbzRmLERDWShGLjBlbSRUUyYlYTEuTHJbQlBxLkQ3fjo+dC9HUX5GXylxUC8kekxmdC5aLkAwaGgmR0ZIO25nNk1VOjxiMjkrRHMpTj03ZjNeQj88ZTxv'@;
put 'dDJraGw+MTFuLmcobGNXd2d3KHxjODZwTXpOakQ1RU8xLDdrSi9oSCUzMWtxV2FzclNRQDFrJGs0O0JeT083NHc4dTlJN28sLF9mdVMpbC9fc3VpaEE+a01+OmpYdVldR0dWO21ZRSk7JHBTZX1CLnJTL1pdQzRMPH1ka1BKYGV3NXJVJCp8Rl14WylVKGVhM35FOTxKYzZJUnI+OEtbJnpFU29d'@;
put 'MyNdNipNYipHTnxPJSNZN3FDaEFuTmFvSjgqTUZJd142WVJySik7IWlZP1MuNl5CXzJyS3tEITVSQmQjeGs0bDIhWFA3Lzs3eHI5dU80dyo7NTg9NHYka1RXSGgqMHIsM1JIIz4qTU5TJTxHSCkmQj4rbHtRd3V2bX1kVn0vUF0ucE1kNlVVJGJRJF18an1kOkVVKnFWJVo4Um0+OSwySlFtJVlW'@;
put 'Xz9wLHFjJn1WXiR6fGZXOEZ3dm5+cy5Kb2AmczlxbUw6OkB4KXZqb006UlslPj0uY2F7b016b0tvI1JwKHNgRDM/W0x6cjsyOn1TaSVnVX04KnxXfUJRR1Y7PnVKaFcxd3lzKVJ4cyxiQUQxdkluQjVZYHA/b2R4LHR2ekRkYVk/Z285eCx3KkdbP25XcFplMTdlLjM+MjQ2RnM+N1lFLDtpYT4u'@;
put 'PHFBa3QqVyNyR1UlPF8oJnR9Q0AoUmtAaStCN0RyelVkPkdGMmgvTm8+XX14VmJ9JUIuNGpsWHskezV7T297VXIwcnB5XThEMkI+ZG97Zk1bciVPLnZ5RlVtSHNTe3wyVGlAQjtxIm9CSUokKCRRMSo+dS9POygrQi5ZWjR7eER9c0JgRk5YWlVrV0pSRnVYXml3P0NsZXZYSkNYfTc+Tnk1TDBL'@;
put 'NX16UiQxWF9AJi5GJUI3fEtQQFszKlo9Qi4vRnNpNC81YU0mcXE7a2p+M1A7bCEpUlFQKT4kXiJPNHlFYikmfjxgfWNqSHZnZEY/fTwyWl91IlNRW3FGRGwoaV9OaXJlYEd9MHZsYUQvXkZBMVhPKHc2dXVNfnBZW3kzNilNY3FoJGhDfVc2KDd5NCZRe3ZgWEJrP1M4IW58WHJ9VXY6KUw7NHZb'@;
put 'PXgsOm8kNGxnYlpFe1VORmpnRSlyW2tzfnJ8WG9nYD5tVDRBRzJZbC5rcy8rKiRjVHd3PzBddHxbZ1dFOitkVy5Me0Q5eG8yO0dYXUd9e2RFeU1yW2IwVk8mUkokTipQUHZsRTdNRnJBaTRCRTBDJks8UHIkfHR4OStEJXpHMHdJLD4wcmI+YyglfHN9bmFjQkRGV3MiMVc/Ik55XlNfT0k7Z15C'@;
put 'R19ZXz8pIkZDNWxgQGxpcTM/eGRsYGIjZjR1XkFtVGNsVV5FfF9NcDV+eXkiTmFzIW5TK2FdU3xUWGslW2BDRGpBc0tWWFIxbnhucGNdRmVdTCt5JFY0MVc0RjduVVo/KEA/c1Q9fX5YfkRlLHc8TiImZFcvJmRtSERNP3FibW1zQ2IpPzJCQnhkJkE4fFBaYl97M1dkeDl6RTlGNlt4VDFdfV0x'@;
put 'SDwxZkRnYlQzR0w+P0daSn46YHlvcihYQkduYlJVcyZ0XjsiLCJtIkVtV0dXKWVKdmBXRkVDdi9tbURfOGo9QEkuSWNDNzhVL1pIWT8lM2B+WipxZzUlS19sdm9CIy5IPyxtej1lIl17U2xgKkJFZCQkLishJWR6LDs0WiVYcE1NTmVkfmNIZEE8fXYoeyQhdDdJeW89Tig1QkwkcUheQTxdYCxi'@;
put 'clV8RilacXIlTktBS1pyQ1JMS0NIcENbZ0JHMGprRSFqVH1RbV9INF4lYn55clhdaSlHR1gpJktQRz83RSlSN1Q7IWUmKURTNF54VUtXVltZVEpRMGtmSWl6bFpSMXg6QHt2TG89dChKJVhwdyhEa3lkUj0+WV9TVW9uV1hYP31jVGRGJlBbSkNdOXZPS1pbem9ldTp2NEkjKjVWNlpBRCtvJm5r'@;
put 'KmsobnNaSD98QDZlfCZZfWBpeWhRO3VINmk7bntzeTlDWXxDUXF4JHxvPHJ5VCQ5TlBIeSk1OFBbRDJjLDUjIyllJTVmNz9WJHUhV2k0X1NRN3cmRUVocnBTdi5McnIyVSQheWEwSHNzbGNvWTdeUShJei5HPXAjJC5WPDJTbFVQSFpOcDspfTgxdzVOIiZBVjxvO1RmXl9HeH5Ca29hdjdkIyJg'@;
put 'IyM7YV9HKVFEKTF9YnFkd0RaO01gY0ROOyxpRzgjbi9ha3BvRzAlOmlFa05ldkt6bWdTPTkucyVYemMkYDFrU0pLN0o4Mkx7Uj0jditbUz1gTnA9X1c1VHE6QShIPiRrTUlzPj9FN3xsPihvQlRgQn10KiRkZlBdSTtFMDc8VyZBejB9VCRrRSlKOTE2Jjs2TnVAeHI9Ylc3Uy5gMG0ySFBaV0B8'@;
put 'ejN7Sjh+enI2YSU7cXd+dVs3VExZLktIOWUoMUc5WUE0PHtRT1p+WF90c1cmIUxmM3Y5Y2Modk52I0UjZV4uZlQpYElLcEhONWFmRXpiT2pjYH5MTnQjZlFCMmdaVnM0KVswbD1sRlB2PXdIfkV5PCRhXn4wMSlHJi9ye3RRQV97S3BrZ2FhMTRdTE8mXX0lUl4hUlh4U2x4LmdLLDUpUmFgNE41'@;
put 'UzR9O10+V3pKWVs7ZHVfYHtJTy5lQHosdDVsYGk7KncsQk8/ZD9iazZUKzI7aUxdTUo4bGh8M3lUQ2RWZ1k2QlNrKCVZdV58I1F9M0cvezxhcjVweDhUc0QvZWdZVz8xbS5sb29hUjU2WkUmRWN9P042QWt0KGx5ckt8KmJ4XUA+aV98TC9UZHhvQUVkbXRsOmRAWVZMOXBZc0w8eXJaSFZYbEZd'@;
put 'dy95JmR3UGt7Tnx6SCNyWEBIK1B8KHdYIzdlN1M6LzlRZz02Zk97MX1mJjJqTkVFK3cyfkFHaEs5TiMiLCIhPXs7RCtLdzI3ZVRTNS4sd0NoVEdHbVVyKDtxWyRYeGBKaX1SLDJbQDpzIS9nNVF4KzI+fnBoO3NwOyJ6KD86ck48Z1p4ezZhZEJLYSE7YnNPVS8zSWBWbnYzd2FNPzpHUGcpWysq'@;
put 'L0RAZHwpVldGXTIwemglOyk8bHpzdX1fXVJFMF07JWNJPlcmIl5kSjNpOnxRLilJRHtDWy9OQmt0VGJ3TypEa1ojMG5bO0QrREJwOn4lYUM6I3ZPUHxhaU5SaDNXXyUiIypPLF85aT9nb01uamleMTI+bzlKbVFsV19BbUZ5aDxTW1V8WlZLbCIuTlhoaUNUJClIPXYvczFbcE8+TSRVWTQjV0Qq'@;
put 'fWZ9YVNXNDgqeFVnV0FuPyF4O0JfO34xa1FrX1hEUWFRNHpiIX15Y2pMTF82TWA0XUhzTDY7YF1kOW1raVhNU2suU1p4XU90TF8kfiU1ITtlR1suNjl3I3FXNmwkOV5sak8sPEd8L3lAWjZTLjFpdFM5emdmJCtOYDUmMzh4VVRufDZTUGpvbT4oJXlFdTEqaFVHaTc1N1QsTHg/ZzozcWZPZ1NU'@;
put 'RHNybyYhWm1YVnIlXSFbWzdyJE10azpVKmlCSyxAJCNiOzk4NGY4ZGxzNkdMcEVAOUtrYUMma3xIcEJTMFc7PUokVTRrTEVHdyxPXn0jJEJfaFVtUSNgcjh7c1JLRFoqNWZeOSthIl1uP1QzMTM6LmYzc0UpVDZGa2FTMStCVEEodl1PIi4kITFnPmBCdzxHJGtxZCw9RikvYEtKalNBQXkxSUxI'@;
put 'fEM2aXJYXyIzSXxITk0+NlN6X09MYjtfP0ltPCpBYn5WLk5eK2ZaNl4oIStQbElSVjNRIShNWnlkayY/QlcmaSRYZi53WEthdzZney9NVTB2QVNDQUFBaHR9YkFBR0giUWR0YlgsdWhHJSFDZSFBRkE6VDtPLlt9b0B6KlppRTRMPWlnRXRCQUFBQVhMJEEqaHQwWz46eSJXXnxKNStdKElJczpA'@;
put 'Liw8SXxXU3praV4+JipsNVpaXzg6aF1Wckl2fUJxfXNQMDxNezNIcmhNZmt4aGJLSlk0dTpSbXk8S019aWtucTBbQCN7Xy4wcnlOLiNUbG5uK2M3PE1vSk0xcGc2X0k/PHZIXnwmPVI3YFtzOGB2czJ+QXBrWFslQ3deXVIqLjAxbUVRcTskOipOb3E0Yz5YZnJOPTdGREx7UTMycGc2dnwufWtt'@;
put 'VC9xNTAjZ1dKbm1bfFcoJGguZSVgPEt2dHZRb3FVaExyekJFRUk3Ik12YWNKXyFmOysyTGwraX4kTSx1cS4/JHFdbkVbYkVWPGxjIjwyRUQ+IjZrTm94ZSM+P2hAS0lscWp0Rzw4by9JVCJiOTtWNipFITFfQlh9dnJVUz0pbHUxTztyJCRkYUx+VjhLLmxBYSNRQX5CPE46UkE2STcpNC9BcEh7'@;
put 'amxES0ZMRGd8USFxekRUfS8uZllmM0AhTUB7KSVjP3E7eHReTz0ueXxmcGFLPUNgfEd8fGhXQDJNXT0xZXJXU1dqTVpPa35Db2E/dCk8bmtQRitCUV1qQn1hdXNgeEU4cERGNE1DNz9EMXUuI31MYHQ4PGRJPGg3TTBzY0M4XzpaKTt3N3F4OEFKTnFsME1yaGZMI0tPJVZCNEZIUyFJUiR4IWE9'@;
put 'KzEyW0Bzfj54VlQjWVIvfWJiRExKcVZlJFh5PywiQSslfDpAVDdJYnVUK3ghL3F+bF89WCtrKFhXcEtpSj1rTG5NX3ZOWDI1SWleX2lIPmJORUM0dTA9WEU7YW5iQGZ0TGo+KGB7W1YwI1k5a2clLCNmQENCbj5xMjUmIzwqTG1XSCMydlNKSURRRkRlRn1dUzYveFVgMDw/MShZPXp4eix+TyJ9'@;
put 'MDRVakhNXnx6XyluNHshMHZ6VzpdXzkjfnlpckJKXjRbOGlqcyYuMntZNFQsbz1oMy96fDN7fnJUWnVZc0pHWUYsPXtTV3JoSGQySTAiLm17Pn1vX0tCTTM3UzUsMj1INi9VM3IjVDghSz50YF9NTXxWXS5WJUl6SG4ya25CZFF4JV9pNEtIU2RBJjVlK051L19tOSFpSyo4Z2J+cE1PciNyQEUp'@;
put 'SmkpcXF9TmZpfChOVkhxSHFgLmFjbVE0WVFhQE9xLl5FVmN5d14oJDJ8WHxscmlwVjx0Q0VKVDpaPnhkdTlfRiN6WCU2KDl6RyQkO0ckdmYkQXhVS01rej0jWGowYyt2LCx1XU04a0hpZVY1Y25kaiZRVy97OnttfiRIfitCcndXNDFMbFg8SmhBcmh2fiUhJmJIYFVyWyZLd2gvNCNVdWVjcj1m'@;
put 'JHhGMyNmdCE/fH1ZI1NsR0IwRClGY0QoSk9DPzlbKyx6Qkk0dXZFdjlEUF9rUDUvOGNTT0g/MElpTytuMGxXdU4uN1QsbGNVMH1IIyY4RT9tPX5dOkYqT2h3PUd8ZnZIPjU7cVtodDRNY3FfWkJeR3E5akxCRFZxajoqcHk2UDZGVCNXKGlNX1sqbmNqcVRaWks3ayJmZSFIbDA7b2R+KHFkJSsl'@;
put 'Umk1QiNWWGxbKHcmJnBPZ04pLml9VkBSPEk2NlBwTEpLbDV0V2MsR3V2WHBMPlYjSjIpK313YztucVBnVFAhYHhUUSwjPlhQdCppbE0udy9qcHxnI1s4NEZQQCh+NFgxSGByfS50KHMuaiE1eFYzIVRIMEgkYDheaThtejA1eHNEXV9WMm0xd1RuJTxxZmhpSkBNKUIxIkJyPHIuTjRJRXwha1R1'@;
put 'cllxR2YyNG9MaVUvamYwSUowJG5mKSwqO2k8ajtITztIRVZpbzQ5UmI9KyUwPEc0eEB6dCheVlhafllLRHxsOjJyLFsjQy9bYVgoSC9fK19EbElaNiRBNipFdiZAR3h0a3FtMFVEVyZKYzx7RSReN3JGJDBnPC4vQyQjOGNGL2AobHRjIThlIU5PJXRUeSlHI2RsXlR7YyE7OjUuckRGW0VgNysh'@;
put 'aHFGampfLHNbM1tdV0ljTUkre3lxTWc6SzN2UEpebFVrK281V3ovMFdWPnB9aWIjZ0pYNUgoI1NhJkNDJjtKeT5MKFBYeEliK317b1VFbDt+P2ErVnpXPmRFNHZObmFaWmNpaGxWSlQqLFM2cjszcTo4REtle2Z1ZyhTUklIfS9NcndXM1ozU0dJOlRYOVs4Nk0ocTFgQkssT2Q7SX0yWWo5PCFj'@;
put 'QkhyOSteMGUyLjAwYzFLS2cpbVE1QjBiQD84e15DKCtsL1hEdWZ7KFAzSjomRnh8K108aSNDQF88Ki9vIjAvX1hxX2NgdyhHYWVrVF5PLGJAVFtlLllAU0RFNTFpdE0oTCFoLkhiQCQxNl5pdXc+K3R3e2J8TzJwV2U0R2Qyb3dDaEplfX00ZUQ5JDRvT2pzdjBOay8jVztLc2ptPz5FRGNYQ1lf'@;
put 'ZEYzJGU2azI1MjJZSHR9VDpUNUV4KTgxaUA2W0YkJVRQIV4/VDU1bSNfRURvWjhiNW09Kj1NNVFtX3B3MjQpOH1EKUZkbnd3ekElckAxNGFdZyNhW2p6VjsoYGFGVCFjNkc1enRlfSQseXgmQ01HfDcvcFJAZSJMT3w7LHx6N35VZzYpTmZRPjpKQ0Q2PkZKWSMzYSN3b2V4Z09MVGV5TWAjODhA'@;
put 'U3B9dV9RR2c5bkp0PTdoZyhNTXduYmgje3R6SH1jKTJdRG9vX0JCeHowfiNhVXw2fCwzZHRTMm5TdklebzJxd35oeHNKSzQrJEthKldYJlNYd2JxJllfRnN3WWlOXVRnPGdJNXd9LHs3aEZ2KmRINkp+NyV3V3k2eV9Fby9zRXgyKC9OP3F6ZT5uN3BeakZwPyFYJn0kZzR6YGR0MWpXWkYwOSk5'@;
put 'ZV42WipVRDJUezp0NDJ8IUBuLC5MYlleWDAlbE9wSl0pKl5gIkZVWjp+PTh7d3FFYFt9MGB8TDVwZEQ7R0ZsTVNbOW9LcyF5dDRUe3hLWyxNTD0rW31CZ1Y0XnRlaGdrdGE1fj9+anNgYF05ZU1STHlUSTZMRkZzOjBEJFJjNE4kRD9PX1RkTyhfUVNIOixLd1RoLyJyem1CZz03TnhBZGBSdkEv'@;
put 'RXpqaUtfM2JTY0x1YzdaaG5xOVFnVjlwdTdiWXBeUjRKdTI0cSkvekBXRjt6UUlZc3dpWHRJamRuQFU5fngyb2NGQzY1bzhQcDJVP3FCOnRdKXN5RiZNV1lJST4mMDBzeHBxaiZiLiQ1VjcuZn4sOj8kPzpNLzFgJTl5PUl3cUNWcDhhUSJzWkZSemhkX3dXPCpQKnpDJDQyWU1saW5RenM5cVIh'@;
put 'M1M9ejhUVFFfY2M7SzZvKyN5T1UzeCE3Xn5VKjhmVy47Tng2U0Fee01vdjs5RS5YRXZmQUNUSm5Acnc0d0tkMDc3QzJ8ZCMwOyRBb0ohOmpuaihgdGckJjU1VnRyPzdqeVdFKyUrPUNgfDZPRTU6Z3BOMCFpfiYhNHtnem1LPDNPTlhRRV5nQSwsWCZtQF4qOTVdJWk8ZlhjUHwrMH5ROEUpVWVG'@;
put 'SVc2eHljU0xlTn4maWt8ZzhiYTZ7MCl6aTY5b35jVHZkUWQpI2NzNUUob2pTZT1+O31ZJEprUEZPenkzdk9TO2trNiMrVS5ZOjgzaDVvUU1zSl1Lakl4TlVeS2V4MGJ4WU0kZVZtKUlifWtUOztTS3Q7aC9aNVdjX3MjciVRXyR5Q0FeZnZaQGoqc21kTVlnWilXZiJNck9iX2BdOjNpN30/WEp6'@;
put 'MUxicTV7dWtqRWMrWj5QdDQiIUFKQ0ZuJUZDLC44XyxlamAjYl1DX3goaTltQyY8S19IQmU7ZislSlp8bHBoWXNoe1FBZmRZdVtaY1lUajQkckgifjppXmgmXUVMWz0yb3U0Rz1Xb21vVCh9ejpvSG4qOG9VeiVdaz5CaS9PVm8sI198Mk4vKlBVRVkoeTw5RiUrLHNzZV16XTc8fEZCcltbKCRh'@;
put 'U2F8LjRDRC45PSRkeypTNjE1ImFEUmwwYkYzd3w7MzhtU2oqZjojdyU0RWpnWjcoV0VCKD1QZjFLJXBLVn0qUltTM2QhYnZOKEAuKFRqU2BdKX5lITUxeVB2fEhXOk4oMUlCRGRMcndyPUlycSFWdkxOJT5hSEgrQ2dwWEVdLzpMRFJKNjhjLzFrRF4qYlpOQ3ZAKTE4Mzh5TzU4PzUkIlNNNDBC'@;
put 'Zi9ndE1hcW8lJER2Z2xEKGFgZHVrP3JPfU5afCtLUDtkbXg7MGdkdXBgb3hiOjRFSUhyYyZMP31JPX4qPGZmQi47X0t9bH1VdVA9amFxaW1hODxFeXRxXSEoMVdScWUkb3A/ZHo4Lk02aVAwalc5ZH4mJnZgbldWWW5IUm1WYHRXRyldQWs/M2kqNHojcjtUb2hLYlN1Q1RUYV5uYjBGZCRNVll6'@;
put 'NWc5ISx0Wyl7ZFsjZXU7TzkoQ2sxYlJ0WmNELi95Q05iRmAsYWpFPFFZWG0pMl9UQEVaP2hLKjt6SXR8ZW5qcmptakRASSYsLmhQXX5SMGBzL2NWLFRmdT0kWzBJXWE1TTNmWVY+MVAiWngiIXFaLyxBOSpdKyh9Ylg2WzFZMTQ4PmlWTUwkYU0zbyVoKytfRCI+OmhHfT1vVUBle2RgJXUkWHB6'@;
put 'Qk42PV1mRX5BcV1te2FSQC5lb3s0YGd+KXRNPzhtNFRNWDBHa2AjRXl3PGl6TyZfOlBDQHluXlF6c0pSVGNUX1ZYQllHIk45KXNvUUN0P2d4QlJ7dzYlUypgP1EmVGRRd1ZqQXdgcWRnUng8JHhAbmpzJXNaIlBtVnBsfChONl5EIkgyMzhCek8yRD4lKUVtPmRpLyFOW2FbXXF6OWddYixGanM+'@;
put 'YTpAS0Ewfl9UbTJAW0V0N35dWCMmK3A+InZEc1djflJ0ME14flA+O0hDY1hvbU53c3Z+Ik9uMC97cVMxRFRnPTgyO14rbWg/bWRjazd0VUc9dVEyKj1qQHZDciR6fikjZFc/XWtZTz5PS0FbdWpfZU9QNWJvQFR0Yy90Q0Jhe182dys2XlR5JlpwamEvSEA+YVVLKjlDOWJWT11FWWl2bHFNMHI3'@;
put 'WiJ9RFB1Mn42dE4+bmBCUGN+aChERUppZkE1dl9wcDVGT29IOy9IeHZ9RDlJXnghVjhScywuKEw/QUs/VX0mK2VScC8zeF5Bb3lEPVteZ3x6R35GQFYjJncwJCs7QU4vTypWREpwOVptX2ozY1B3TEomWUB2NzYsRW86P0suMmdlWH4wSmY7LGlacCUqO1ZDRVc5SyYiOVpVU0o/VTorbyFOSU9w'@;
put 'd1FNMjlVQkIrRDJNakhUaW1NK31zcDwoKDhXazRXYGhdPmdBI2R+WU9ubHFVMEhoZXRrYTtPSCxXX3ZCZGw/WHZ9UXpNbEAuPFFGWX1Oc2Y7K3VbTXBEPDpmcVZxR1FCeV8qZ1ZXfUwye3Q6SVsucUcpQCo7c1F7Ikt1VTUrQ1Zva21yOFtWR29uUnFUJTdiaCp9ZFksbXE3T0U4Nk4uITRkSlhS'@;
put 'R1JsdHd0ZDMvNVtNcjEyXkVwM1U3X2VaKDlXUnp7I0k4aX07NmNEKnJeVj9Ib2dUNjVtJV5ZbT5POD1SYC5BcUJlQGxSXiN+YTojaDIzJDNyZHg0V3xCUFh3IX43SFtWVi5tfEltTi9qWXh0aU9qfiJKNkcqZCxBVX1QYDBTYTVZOCs4ZHJfQC9nUHZ0Vkp6dmFGT0JYay54fVNBV04/PyRVS1ta'@;
put 'ciYhPUNkZmA3SnJdajJzSUxEI09HOWNiblRrKzw0aHwzKjR+T25fLno0OkNVS0JKInZiOXxhcHN6O0l5NkpzPk4xKV1SNSIreEQ8eE5IfSErWWxdaVNHUi56ImxCIk9ObTxpNEssSnVpUTdsXyhaYXkoZSpZYzRPfkskJi56NWg5Vzw+c2lKSDl7aWtDeSowe098LD1SSmJ4OSgwRThqI2lrO1RL'@;
put 'SE1EQjI3T21hN00pLCNLRkdDdmUuSEQjWj5xL28zJGI/bVR8aGklPkhWek43Il52SDpQQCozcCJ6XzlHI2RAZUpeY3A9eUB3UkxIdE5QViZSN09PPS83fmEmTzBQKyF9TnkmQCJFdCxEMH16VDY5IVh4dlh5dTpgfC5lTiYyfm9VPjFKbUoySn52LGpVRU0pYGZTXSxGTyViX1ZZMSVtNH1dW2ZS'@;
put 'fikvS3JvYkBINkJnZzBCPkV6SHNLQGFaVWErW08qY3dqaElJI3coOEsocSNaQj9zVk5gWzY+dFdWa0t4MERRd2FdOD5LOVNQJT5JanUpKWBvKXRVbkZ9QkF7MCZeb3decH1TW1piYDF+ODtCJkZNVywlK35GVzhofXJhZXd+UntfWWxgOEQiPmI5MkI/ZWxES1s7O2A9IkMuUSMmbHAqeEt8UHgh'@;
put 'LGdVJEZ9WDNOQ05LcVJLW2l4NHs7JjAxLkd0L3QzSXZ8NlslTyZeSV1fSjgrYyxOTG89KT45VXZxX1piO0Z2T09hcU4+dkFDITwse24vUkxafiFoWEZnfW8xY3BnczNyPUFhV1YkXis6NDxxZFF6YHs7ME8xPnJCdlhhO3hFU2MpNWFtZWVjW3Q0dzBNOE1IQStRdiEqQldUL3ZabVpqa3I5NyQk'@;
put 'RWo9Q1csKXZze2NPIlpLeltlUypnIWR6Qno6NDwubS5PMkgzNiR4QUtlInUqdUE4eCh7ITdDd3Rsc1BzWWQ6JV90MiRta09mcyVhQ1Z6PD9xcVFacktTTXw6Wzw3TXclOlIoTX0yN1k7dnlGVFIkZDRERnl5P0NbdyNMcDJRYXIkdm97OzVkaCM0MiUlIlEyPzZSVypMTSkxZmcmKyElKWpCe0R1'@;
put 'blc6MGk6Pl91fCVAQ1slbS5YaTJqdTJbTGg+bWhiP3NNL05KZHdnO0gybWZXZCM+d3cmKyh3LDZqNz0yOzJEKVFufDFsNWJ7IyR8MUcoTnsiQGBlM3tXKXJtMlhVLnppKXBlR0UzKHYlZnNbYSJaN3NWQFBoQktZYHhidn5waWQ6aWk5MSUye3hkTnprLiNZb3lAdnBebEo3YEoiUDlyUVZsPHJb'@;
put 'WTYhWH5IOX5MZjprTyJjVF83cyRVRmUrO3F9dl5KZEI1PU1NWEBFZVpAOSJBOllUKWdZW2RecSJeQy8yOGpVYCVGdWlWTHZSdj9SVU98bmM6MC9EYT5lfGoxS2Y7MDZJSktnXVRsfD5efjo7RGc9bihyakMyIT14VEddcl9iZjVdNTt9PE5hOTNzfmV7Z3MkcnxwIjlhRH0lV3A5cD47VC5rdTw/'@;
put 'JFNLYUdVWSlSRiprPVshaiYuMFtxPnh7TCpENSZCVHhud0IsYUphXzpeLFZjcFckNG0yUix1ZiZHN1NmN3lOWDs6aFRqNFYhanY5PTdJW3NnSGVDTktCU2k2RW01Vnp6YiQxb1hOdWd5UktPQj1MaWo6UnQ3a0A4Izl5T1F5ck91Nz8/dz1yIjZtOyVvcGIhV1FIJTtmJTxCUS5SOlZsakF6UVgy'@;
put 'fFMoSUBjSGs0NXNvZTtVKG1ENSwrTkdGNHs8LEJ4fHx0X1Z2LCUjfF9Ccy8qVFs+YjlfIVg4NTpWcy9KaGpgVnZnWjZ3LD9dInxfYFdOXjttWD4yW1B8MkF4aF9KM1lualMrMDNWWSlXX2llRSNTZG5Hc0lXVlg3UzdMYXNFXmAxQ3gkKV47dTAwIiV8ajFbPmE9KzVKN0NXJkVRPjE4Y2phNnJJ'@;
put 'UDlkODhXTl9vfncjbF5ja0AuYm5TMWcjWDBNNkl7cG5vKVBNYFljOV85MSg3SiZYPSQ6JFpjfDliRStYaERzNmhrcGx+IjBHQWVuO3N+NGBpLlpZSFBGWkZuNEojO0ZyMGdqLGQsdFIrJntxKjdUZDx5dXhaTTRNUjdPVmhiNWxCX1FhWDUrUVptPEJibF9EOkB2KV1lNEJWRUgoUzhdVXRpWlJk'@;
put 'Tjs6PDRReGohInhMYFQ0cjUpKCFORkZLU1NEJGtVTjc/aCNeS045O0lEfWQ0KkozLi9qOFheVSNENyZaVEs7RGd9RGJGUmI6Ryh0NVpzbkJzUHlAQl5Pa250PD9tPlMvdn1XNFdCYy5yVmI0PVA5Pkd8SGdRN3RtZH1feHZ4MlgyeDFYem0yY00+Smc3RHYzVUdiZ09RO215NmdKNSY1PEI5K0Zl'@;
put 'd2kjW09dfCM/R2t2MzkkYilKYEZSbCVASnVVUWdeIWVtZGNddU5CcTlxLElTb1lnJTJgQ1YvYjN+cE1xO3A+SSQsYTd1M2BnXjpTZipuPn1HJVV+PHpGYF1sXT1CU25raFtwTW08OUNKalt4T1pKXTdVbDl0PnBLVEx9cys/fEMwWilRZHl2MjpUJiw7bHRucyg3XktFVDFnQ01YW0gsTytwUl9F'@;
put 'TGc+KGdyKT9bKylnOS8+ZEVfbWJVfiNdLk8kbmxZbkdGZDgzKlppPkEpRjxdV2BzSSRXUzFQK0o3LyNxeGx0eG93NXopOzo0KThCfHFgXissMWM2VWRNNTttNCUvKEpQQismOj0rV3dFIWxhNWY7PmsmIXZpcGZFJE5RdlZvNCRqJXFUP3ZVNm9ZMW9NSEtab0l8dFh8Q3deJjl8VVVmblUvZUIh'@;
put 'VjFKdkNUNFJ2ZV48KXY3JjJ+O3BtW3VRMDtNaD0pKCN6UXlyQCViOnBScXpTfGcmP2lEfn1BNndqYFFgTWIidypyI21iSkhpSzZOREgvSXBxZm9yWV4jdEQjRlM1MC5aW1E3SEJ4UlNDKkN9cl95WHpYQkxxeDIqMTtHZERDYCNwO1Q6V1plcFhgJmdYTH5KeTA5MnkhR2BOPGQrYiNDUjl3Wz00'@;
put 'JEBFeTB1dCx5fHV5dF1URHZTdDwsZkhSPVFnPzxSbkksVEBQbDxFUiREaEtXbFhwY1RPJiUmMGkzXjI4WFA3TzhHLz1XKzRLWSNIK2xEVzRMV1dHRHo2ST12UWV2Oi4lSWt2aCsyfWBmKnlxU1t5emNwPyk9L0lPPWIqe1VvRl82bzg/NWl3a2Zua3EhMk4yREglO2gkWHRXIVgkc3ZedHRxX3tw'@;
put 'JDxiVVB6Un1zdXlJNFduTiZCRk9IJixzWSs4cjJ5aiNFeVIpYjNTKmRVOl0zVCFnezM/c11GXTNbfXdjeFp9JWVBVUx5TSpldGpjLmFeeXhKR3M7b10yW1EyKWAlRD9nWGxLKy5MaWNlMGxkZC57dj5FPD9LWUohOS9VNldDNmMoQWlaTzx0OkZfQSlZNnEoTzNpUlZWQlY0Rz5XQW9RMypgc0pG'@;
put 'VnxZSE1rfkd2Ki4+Vlc3d2V3M3ZkSzA8clM9T2tzRF1Eeysya31ySE8zSzRSc2QzaURRan0uP0g9cVs8NUgxNyt0bl0/WU0qZE5eVT8qUE5bWEV1I0lTR055QWdkIWpxV0VGSWF7KHV2LzF9O1Frfix7OT11TU5+ZmNSe31RP2R+fkR7QTdAdn5eSXclW0pOVmlCM1g5V3phL2ZUfFpONXAuPSx6'@;
put 'NDlKVUs0bmouM1RzOiJyREo6MVEpNzpyV0xIYm9rJX1yVnRCbjQ8OCoqM09JQiUvbWcyVXpBYWI2Q2UxZ1pZY1taSyIqIUZpTyolVEQkfllwcExMN11CKFhLVXRQKHxydG1WRjpAYFsyJGhRXishUk8uXz5wKEhHUilsKUpuSkRGNVBRfEk0fVpaNVU/a0BRdSJbcElrOi4zaX1mImt7V052Oj1G'@;
put 'KSZicGhTOyV5ZHFUdl8qPzp+VCZPJHBHLn48fU5ze2tKaiVYK08vZ1B5Pnx3a1JHN0YvdSJ7Mkp8JlQ9TVMvb2djJHAkKzE1Xykzdk56P20mRVIxSGxsYGRER1N7XW95Pig4KyRDdVdrWzhMR35CfXhCOS9EelskVyJzWFtzWWNLR18raF8jbXxNLFt1JHUrUFRYPV1DZy4od240RFRGMSMuSSxD'@;
put 'PnZSKm52VGdFJlRWclE8YiMwNGVWVkBrNSE8Ols1X01oJF1EIiZwfG5NaS5qbW4vfHl0bW5eNUI9IntQeVVtNX4ramFnXmg+XXJgU3dTSXt0dVFHM2Q9Q0c2b19AfTM1XSpeOjAucHgmfllJN2omVmg1WF9sY2BSWEcqclY7aWxzXVYzcEQiMzB0Uyo2UlYyQzA7eV0yUVtqIjYrRn4kfEQ+UX4s'@;
put 'ZWpCekZOVT9HM3xaL1djN3x1Z0BuWCM8ZUdhJDY5T0JFTCJfZyJMJko/KiU2aGBNRlUuS29iQ2xYTS5yJk4zPFkqVXNtUnlPLHtIWUJLZVEjcFh5T3B6UFAjU05mN2dUbEM6LC9JbjQ4VDJyLDZLckpdSmA/VDk4JTVXMXMyW084M2g+NVVLI0pjfEdyQjQ8cnNoR2xRfFVXKjxKMVtlKjd7YiF9'@;
put 'cXBVM0BiSUY+LENRaTw4YlNtQixwWzRCaTxqYjRSKUApVTxRVVVpajVuZWQ9VGQjXSVPaCs6WnVhLktnMVh7L1hubj0/OitNS28wcypBcjJdbEwwdXdgIyY7dzdzXi5zKTc0MXk6Tk4jfCR6TSFlOWxxXUo3Lml2Jj5sMiwvbVBbfHA6R2d+WmAxXiR2Q3hgVWd5MkxTZWo4QG1GaiFpUCN1NXEo'@;
put 'QUg1KmdrVSoyfXV1JX1dWE8qVUtYRyg0UEdAdFB2UmF0b1ErUG1OSVZeaSU7MTZQYytiLGA+KEhpRTxPUWpNPkk2OXw2UltqKixrKzUuODo6XzFEeyFwKDglOT9KfEN8ZGdWKns2Ri4oYXZfYUNuUUdeMVc2XT13L1pnJXFRLD1eKHJLYi80cCVQLGVlQTNLdVVWQzNyWW9TMHh8bWwkRDpuaHpG'@;
put 'USFxcnpoP3d1TU8zUSo9VXMoVzV2ZTxYcFJ4W0JKLD4rOTJCQSFYc0BmRSxeXTxdZEhWbjI+Vz9XfiV7M3J3bkFnWjxMKk5fYUF3KV5EXWFvek10cjUpXTJYQShmKU92PFJoeyU9YCI3QXooP3wlcHdpQyJsJF4pO2RwNW4+NmlEZD85ZUolaHo5W2xANlJubzVCYXxNfHp0JUZreWppTnZkSC9A'@;
put 'WkZqQ2VMdGtfa2M9e3JSbVQ7cExidHE7aWt0djJ2YyJdJjEuJjI1Li4yfDk+dyhARG5hUFgqSjM+JX54amRgaywuOjZ3IzkzcC9OIVN6PihGOSpCeCpTVzgqSElgMUNNYVZddXFdLj5VRT83aH1zPm14fTY+Y0pPTDh0WW9dW245bzNaNlNIN1hXVXRfSD5yJGoqd1MzcXlDJFcwUkwmeXVCQTZJ'@;
put 'bD5gQmxHTFVVXVRfd209SkQhR01QQjB3aj0obkhdNSZdLGVHRzg1PFsvJUxWKjVSRG5QQTx+KXtHUGxxM0IleT1NbkhHS3A3eUF1bzRvP0g5S2d7QUtpJDNFT0B7QkBZM013a0UpVFo3fHBFYEUlcEhvZ0JaKz18cjxyXV86On06VjJsL3NIWSFXTT1OcD0peHpuSitLYihnTlZHTFYkO1U0X2J0'@;
put 'PzxRLDczUm1HdHZ+QiErc2Y2ImI0dVFgYmUzXjYkWVVnXVBLez49MnFOdDBmWzg4KGw0fF1GbSYzfnk6PC5NdFFVK3ZbckRLMixfdGApUy8kTUwkS3NDVEpXbnhra2Q1JjlRVzdvd1VdLlYoKWZiXmNecjp1KzQlYkNmNCZneUQuTVUqSXhYUjgkQ297dHB9NUtWZXA5U0QiWj41eilVXS9VTXJD'@;
put 'MyVZMyxHWjQ5Wik/Y0VwZnNnKCppWWo7UC5IYDZhcXFCRE1pR0YxX2hNcSguMyx1RE48ODxpWTNRVys/elJmT2xldUVnUkchX2I+TCg5MDE/R0gjeDsic21OSTZQeyNnMy9mfkQ+Kzg4I3p9M2BPUV5rbGs2UDxfMFNOQWZtOCtMc1slc2FGTWprUC8+QmVPQjo/ejo3KVo+bUUqOFBZQCZCJDVJ'@;
put 'XXA+VDpEcG1zJWx9Y0I7aGZ7SlhtOzNFO1Zmen12aWVQSGk3Y0ZQOi9SVkozQFVLL20mXTtUeEx0aVFOWVlNTDZzX3txRywyW2xaaHh0NTBvKWQrJVVxZVYmJk0wdiV4STkmNHhbRENgeSVNMnFzPHp0RmkjQk1ENT50RV9RZj5KOjdbNz9+IVUwUzEuXTgqXyIyQ0tJMClARCN4SUBhdkBgRERk'@;
put 'XSw6REdTR0FKeX11SHcyVCg5Iy4pNDRqUDMqWy5TcWA4Xi4mKWh6JlhrWE5mS3A3Z3kkTylrNHdrezlqVTFeN294VXl0JWBVdncoWXo8RTFffUtXeyYvS1gjNlNVeXxWO2tAe2MvcDJ8cyVrUVs2K3dHZzR+b1IheDpmaHw9RGheOjQmXSxfImY+S1lTRVVAfjNJR3U2MFBwZHM4R3NlPik7ZzFF'@;
put 'NSVpIm4/Smg6Jmx0fWdleWBfPkN7KkZXLld1JltdeHA5JWt0MjAvMVljVVksdjNDI25oTl1pLCtrQkdTMWhga1hMLDRNWi9mXTx3XltOXSVBZlVfNWxQQn1gZmF3OzxMVHtIMmplS0hVSHtCOEtdLj5+R2VZQnZ2bCxFaiZHX3VpaThQIiRsOjAuZDQzZixKVzNjRkp2bV5Lb21FKUhSN0FXPWsy'@;
put 'KEZiZ0kvXUp5aUZeYDN9WlQoOTdaOGhGSCJJaiZBQ2NNWWtnNExORDxufE93K3huVSIpeiZFeX1dPyhwXlQ3bkd4Rj1dV3FdZEhwYi9lRjpWQFR6Xz9KSE5UcHxOZzcvcTpdPFgqbmdpYyxnWi9fa2dMJlghS0pmKip5V3YuVzBVV2NOdHwhMkhweHZ+aXYmdSxMcD1uTGVtL2g4RjxsSiMrYDI6'@;
put 'czJJSH54RXdGMF41fUxJTzs1K1tQKGJYTE1QdH45cCsud3IiT0EyaXh3PXhvWGxSIixXPGNzcHkibFRyPzdKN0JbJEszQ0k3NE1VUD5qKVBpTmUsdDs0XUhpczNSPU0pRCRrSHU7LEIpeSk5MUszbj1CWHpGdFUscENCMy9qOXwpMVBtOExOaU9HeHgoI1A0YSNyQ2ZabG4yez5KYTRkOjpMYlFh'@;
put 'P1A7OHh7KnQ9X19gbjtkYlBlT3RVLypYRFB6T0pkTDh2I0tpXyZRbDdvd3xhXUJ7Rn5UPmZ1MlBeeH1idl1hfTJFKykvOEx3L2VdSHdUemBHVG9XNjJPbWBAOi53bUM3LD5ldyswRiFvanFHWFRMQVJjQjt9UE9WWnF9VXxTOklLU0xTY3EvKmYiRFhXczI2KDQ4LllgTUExSCR5WSo7cHs5TGkz'@;
put 'dVAmR2kpKzF8TTYpU242XX58Ky8pYGI/LHEwQkIyM1J2K1s8QVs2eTBkRiNlZ0FgPygwZypVZV8iI2QhMHlXdCQ2byl2fjBbfHRzIiwpTkJOMyI5OzxTUkgpVHo5Tkx7I1AzQ0o2PWk4TCVSWUBSTD5eMmBFTiV4fWRBKHB4ZmAzcG5YcVVjSU88YSlxNUsoR31XW1FKTnBuaC9WZVhNSkVEUXU6'@;
put 'NiRjO0J1Kk0wcnZFN3FqUjtpZD4zLHRZXXE7VSFBRC5QPU1NU2w4XT9VJDswSHcuVDh0OEx7Pj9uLipKKFc/eG9OY2d5IWlJYV1uTH5ITk81I0JKSmd9cXxQbmN1eEh8IVRxY1o0ViIwKnpaMlYxTlEvLlprfWw/QiVFPnhuO1Y0L0BlUmY4PC52ZCs2aWNbV01OTVdxX0J1bVE2SUxFd0JncWBm'@;
put 'WmpyYV1NUVEjajE8TEJ3TmloaXhyM1YheWdaNldEdVE3M2RQTFI6PE5qZTkmcTZfNzssMEBCd08sSlVKfTR+N1gyajR7Tk16PH0vYWZuOEwyIVIsX3tnP0dZdWtWPHJvLyQlWHIvbjxeXi9eWXR3TFk9SzlpOkdPPSY+TC5tOjxCfk9uS0llSjVhcjsqSjljN1ZXcDxyITFDLD5weGBjITVwanZu'@;
put 'P354ITdPPm5uRjZFNSlZQX1GcDx0b3dMKmtXdlY1XkViVntVb2ZqN3J4JnNOeiQhdjFuNWg3YEZTNnl0Xi8keSo5Q11kdlZuT1tGZFFTciRrOjtnN3tKey5yNSFPTj1wdTYia2dSPjZwJDwvOWhTWFYuTSZROzB8WihVOmltdDUvIlAlbS82Qjs7JVNKN1skIzksKX5TOD5LSnFqejtecC5dR1tp'@;
put 'R1duUzI0TEduOGpXUSVuMTFeISUpeGx6NUJucThpMUF7USUmfUtHe3I8VkhiK3ssdUpYTnMuI2w2TUxdS0giRHA5YlFgbyMiZiFYXjkycGphIWQ2IVdZMGVjVm9tOTs6JC5qRm9SUSRJIjAwbD5SVFc/Yk4wUX5bNzcsPChOPTRBNGR9RCk4T1ppP0NTNmZveUdkdCwhOWtyRmYrb19+X1g8ZG43'@;
put 'PUI9TV1dekcuRih+T0dabixDTGlkYi85dF9ha01taHZQcEJdPjxhXm9bKjdwSTZdSz4za1V9NTh6KDlDSW0lWWp7cytOQmdiST04Si9gN0FkIjoyQnk1V1JUNkp0XmcocDFUQkUmM3ZDVFplZ2VXVnt6SlJaYmRRZmYlWFVRImtxTWVVJUI0IUdsUGM9U0ZRZD8rQ0I7fERKPTRgZ1hOTFVMMnFd'@;
put 'a2BLRXV6JjlQXy41WlRVUXBnIjUmYTIjTWEyLHp3UVNNeld1JkclTlspUEQ6eXVNbWY+RiR3Nyg2ejldMFh9dTxZdiFKTjhMYlRYN1cwVDUoZyo5YjA7OHAzTjdCPj96VmJafSUhfShSfFlmMWk2LDg2WUBIeiIocCl5O2VaS3liPlE9ZCNPaTl8WEBXSjw7ekRMKCxgXlVTP2UjKkdhP1ZdJlcm'@;
put 'V043Ly4mdTtLaSEoLmU7WXxTTzg0PGd2YEJyKnopS2EsRmFeeGVaYDN6YTMqOHZaeThtKTouTFE9UUV9SG17QndiISNeOWpwZVZ3X0UjRHFqQCEydFtqR3x+NTlnZX07LEdndHYwT2RsPTllZlp9MHZzOkp1aVguelIvUXlnYWMxOVpCdFZTM2goP3M0OU1GWmMqQTl1V2U8e2ciJk1ubUs9cSRV'@;
put 'PmcqRHFYOFN9XjtIfHxMajtuRz9nUV5GdnEyYDlTQEM1dmg0YEh1OklRK0l7TWUqfX1gMEV9VyosQk4pPU5EcE9xfTUlI1BqRTlLN3NVYUYraCYkNUNnfFF0NDArfndVRCsrMTpGcnolI0o8VVM8OyNyMkpHdnZbVXI7KyYoNW0wYHtvd1U3Z0BZMz40cXRBOHJxOkkzbFJKTFJxNnAzZ0JGJWY6'@;
put 'aHZtOTIhLFJIW1A/PWk8UEVDO1A9WjRKZEtvWiRMWSV0RzhSe3RpKk16fEs1cCZKTUxOc349bXkvJFtYLE4icHlPa156Q3kqfkElM3U6TFBYSitxYXgqMV5SPlQwJmpxOmRAb1hPVDNYQFVOLzVjZUlZcyppai8zTWxObXMlPmJdfiQofSRia3gjZndTJHducDAqY01VQGZ0I0hwcj1iJSpDIUI/'@;
put 'dzUmYVJiclR8ek4mP0tUVFF5fmFhTHZTXkhXRV06KShUdWZ9NTxlRyg4Uk1TeCZ6bFNEOEI2Ulp3eyhYWkVxI1kwZ2VgbTp0cUpVbn15cEM3Q2wqalhSbXQ1RG5ic1BKLiRKWmlnPSZ2WnI+fnAkKjp7ITZaZCg8ZytJPUUiNWdYfnkrTjZRbFp5Q3tvdVQ5T2QjQm5HXXAvdSZzSXNmUHdtMnh3'@;
put 'XV0+WFsqd2dpZzwvYk0hczxjdmFlPFtyMiomV109dCs+VUlbM2JOc1VgOi56MDYoPUAoJVFVckFsIzQ8Z0IyWFlMb1VfdEVhIXFTaj4ydm1nIz0/JktSM052QDM3Sl9kKFVtVkMjWVJBPjdUOmM+fFhoWStOMEBKLlolPC5qeVc4KlIrX2RVKko/d08kXVNyUiglfkM7fi9PdyFfW0BvdFdLJUFe'@;
put 'I187QE5UUFM6M3dkdCY1dylkbkVUaElTXl5Hbkw9QnpxYmZoK0BqLjx2UX1wfDkoSkNXPTJGdTN9JD98dEMwMUYyfU0rSUZDLj1+dTA3VildUGByMEJJYCE7UilOLmBTTFM+ZjZfXj4jPyJmN05bS1h5JUslNFQxciU+TEoxOE8iOVg5WVUhbmVnIUhQfnkkRFtMWCw6YGhmRGpTK3IsXjpVYUw7'@;
put 'MVMwLiRhfnNhd3g5cSx0YHdPWn51SHQxYGgsVUpzRH5CODchRTNwPG5yd1BCTXx8LjZ7VGgvX2E7fE1NIWZOJlowcSovbnhCUDNmOnNAbWlSSGs5O1Z6LGdRMElmLDc2YW87T3E1Vz1qUlAkVEZwM2x8eiQmfilhMnlFSVZkKSxkaWU7bFs+ayRMdGE0b04zV0M5T21hO2N7dUlndXlNWkxkQkFY'@;
put 'Rj42Uz1IVzUhaUR3OlYoJGhpdUw8Vi9IWiUqNklPZUB2ej9RIih7d1l5MHcyKFRTfDwkYG1Mekc7TltDIUBrRGQjRHU/YyVlcWJiTWF+clgud35sUHZBZ252fFgoUDVEMlJVP0l9eSVaLzFoNyMwaXhpIWQiWDUyeEQ2MiVlNktFSmhIaU9GOyVZRFMiaWJ5SVh9PXgmVENidj5NcyZkNnI1UHRG'@;
put 'M088NVt2WEZOdVhGUU15X0ZHInJrS0lkNitwdD47T0I1ZGxER2FTWHh4cG5KU2x+cEgjSnZvMipkI3FrXnw/ZixbKmAsIl9GS0Z2W0RSUDhoTTx3ZThYJkNlJFtIKyVLa2tCU19XJk5tWl9BVnl1XiY+W0A1Vit1JnZQbUtTWWsrcjgmYUlXZmEqW1pqcktMXiRlZXY3Wmhuakwxdmhpc3BoKUdT'@;
put 'R289anFoW3NXQmdwYWQqSUNifW5Tez5wK0lVIiR5PWZETyRRSyhsc1thZlFQVFU6eD9nUS8wLEMze0QvY2EpI1tGdmxHMSJHPW1nSkBAIUxJfHl0PmhdfntSSUtzXlBxcWIxYWZfYXg7LENrQCZMezc4NjRNISYhKGFiOn1KXmVSJlhaWDN9JHcyJihhfW1dQkgsYFppKko6RkZja3JlYXt6PUtm'@;
put 'IiU6UlowT0dzVkI9MF1oWnQ0UDZCXmFxfHlrOGxRPXczSlRFQDE4MGNfKzF4RXRhTVNNT35JPjkrZSxEMEEhciw2ND16ei9+TVRWQXlYYy5OU3ZLLGBFbDpLbHQsbTAoLihALDcjRXMrbU1nSnVbJnRsTUM2WlhobHFjXmBjMCM1c3lecV1dfWAseyUuKmB6fWc2TzkoTy5vP1NLfG5tPXRpV3pL'@;
put 'Wmxpc1JtKWdvUTFoWXpeIXt2ZGQke0xIazVVIWw1eTBZb0NFNGZCKnRbUGxvQjA2VzFDMV5GPWdxYVVsPzRTPT1fUTloSEZ7cC9sLHUxVWB1KjNtP30yIjYhRylYR0VzcjRPRUN5XykpL3sucyVbZHZQOG9sQS8zaDN9bHlGLmZ+TGFqUXlZRF54clttSFRIL306cDJBSSExMDMxekF5cWNrfFda'@;
put 'dzJVZmBdM2h3KVZmNVN0JlBZTzBMYnJsPypOKTgifjQkP1IqZTI7Qy9QTl4yWUhPaFY0NCZBRWsqal5HKSEhOjYiNzc7ZzV7NTFoOHliPlFpbHxIZWFMeUY1ajcofV1faz1CQkw9bDJOTmE2WmJ7RyVkZnN4OUE8Y2ZuV2R+Q2tkVUJjK1ZiNyUxTU9zbyhpP1Y1WzhbRzZpJj46S105KFE2SWR7'@;
put 'RDp8PTJ5b15aUlpVWGtCKX5aJk5iaGFlcGMpNzY2QVM9JV5KZUVCZ2MsIm8xM25wL3M7KjcuT35wenRCKXpYRFlwaUdMRmYobS9pTGZmWiF9RSkzdUFYPyZNW0s2WV14ZXJKYl9FKFZfOGtHVVZtWE8lPVshOCFubTVJPXlNQ2h7LDNbe2EsY0NsPnZuaiZiXmdla2pyekVPfXI/dyw2PHU9KkVJ'@;
put 'MElKQkR8QTRkbDNfT3d1M2xMTVpIPEw6JEQqXTZ2NyxreDQsdTVmfDkwalppO3xpOEE5YzZ3SChqP31xJF1zImRNO1NRRjh1Xj5AQ1BTUmJDZGElXn4+cyZpRDJvVXhZVmE7K2NYb0VaYUZYcj4uaS5MJDp+Il0qcSRoQD9lYnF0XmxZVn1GYj5pQn5NaitoV0UoU299QUVpQDUzcUdxLnM4aDo+'@;
put 'WFpUUT9mfG5uZSIoend3I0gkQCE8a2p5eiNuai9AaVlhcStCY1JlbGlEeSZCXXpdYiRdeXYpKnplOko0ZEAxelNQYD9PWVZjaW97UUZiZkduRGk5M1lPKS5Jb1gsbmp6KCpheVMqS30uKmRrMWNsQmA+VVFxUVRYZ2B6fEE9Tm5TPUt5cHQyPTg7WiU7fjN2NzQuPElaND91NFVteXkwczB8U3tB'@;
put 'XUN5R0hJeV83emwjX1dxZ2dkcWhCOmJrVlhbRW1FYm9sdH5oU0chQWElXSRVQTkxNCp3OSZiZiRtcnA+dVpJIzVdMnsjJWQoakRrTkI/QzE4bj5hOF1UK2BJdUZRbjpdWTlXOEVCK3JIVmopWk5fcnVtJG9HbnBCcXU9eGBuOlIxVyxtM2B5NjM0ZlRIYV9iakA1e3Y+YD5dYytXWVJnVXtsdVJr'@;
put 'RXFHQlByRjNhakJTKTBIUmYkYjZWMVFTZUR2OSMkMix7YXtUOGVzNiIvIkdYWDpUdDQoKVlTSWhjSSgsSU9nT3lmI2lPNWs5b2FTK3kpPUd+bGg2Iz4/IT5jYnVsZmpoOG1YQ2lpQCQ2b0VdMDgoYUJIW350PyhNMjIrb3o0LEkpQDwsYyVsbHImJGI0P211O35uPGN1USpATVhHREdhOWp4VENn'@;
put 'TE0malA9KDZwSzF2TyJ0QjA6KyZJfTVVKSI3PTAwTGIhMmROUCMjbl9Vb3tAdzVDenkoNVJ6RzFye2hYJTA/VjB7OXFob0dTbF18Qi5Ufj81Jjt9R2w5QjoxcmtaRlFpVzBJJlJ4SS5POEx0MElwYjFFdzIjZlFBPX1KOkFxUDtdOmNERlQhNlpEOlpHP0YrZX53JV5weX5pOm0xbD1MLkhmUjk9'@;
put 'VlYrOD9VTzxobHoobWc1PSMhQyJKOV1rX1NIb0hiSHB5cyg3M2lLNygvfjRTQUp0TkVxPSZqVk4uP0RNd1lMc1h+Jn19L0VXSGNSTDs3WTJiOnxZe2VtbCU1dzYsRj87cE5SN04sYz5HaF83IlVIc0I0alRAem5SWDg1PWsoVGhPZD1KUmlGcFlaeXcsY0YiKGB4d3pkVUk8S09ndE0pejNeKGko'@;
put 'RFRHWjxBNVclTUkiRiZ7Y3YzVDtLS3B0eENqZi8hcldJOXA3Njc0KENPVm00dHl2S3F7LnVIIUBnP2FSeixrfS5iSUFrbVk8QkQ1MW89X0V+UjVeSTlrPXNrMWsufThjT2pIQkhTPXFJOlg6PTUhJEQ5d11pWEBbfHdvOXJ6I0JaJm42dEV5YiR2MENnXy99IiNWI1hAIV45LFphby5dSkNBVj1F'@;
put 'KkosN0YpRyt1Szd8N2Ukb1koazllZXdWa2J8cDBTO2N7SyN1eVUlYmZLZ0xLTWUmV05aJUA2eTZeYFB+WHYlfCo+V0JBbUI1L1Qxcj02ZVB9TElZJWUoQ0xQQGtCOjdKTktRTnF4T35kfSNKYy90Oy91c2h4dy5TODV5SVBPMFFudC8sdVtyXT86UjdEJDskfEtURlVYT2N1VHFOfEgrREYjSEZK'@;
put 'KklsIko7TjRVMVh9eUpOaDlUMUlEJSlnPyRRVD8sJFpeVVgsT0QqP0Q1Yn07cnpQSy89SF9rIU0sLmdLTileU2RLVU05QiosMVVRRGR3TjRzOHJHcWNNMEBQWS5VYSYrcF9iQk5odE9PSmp+MTxsXyV5Tz9vc0hQczB3dnFuezo0JVd4QCQvKyZUPCk5MGx0az4jb24+ViF1eWpYTndCOCtdY3g9'@;
put 'fU9MPCVGYzZ1MSJxY1dZLmVRTF0rKDg3cDdecFllWzVRdVt+IVthY3NuTkoqZ3gmO2AheV58SC5tZCIuMjMpV1Vlcz0pfX1kPzhQbjdfXikqW0wufCooNV5xO2FPUDp+YzkqMSh3YCF3aHNrbXt8bGdicV9UbjArJDFDaCUuQzkwZTFgTiQ3fFcpXkMhP1U9c1gjcDIucEB1SzBZZnh8S3EsSz1A'@;
put 'ZlJMZ215UCRYQ3JHbGFKe3ZhbSZMNFNoZiUrNyxnSlQyY0FraHAiREo0R0w2N0JtZEVaZE42emEsKF9yTVUha0xrTC50JldzRm9fI3FgRSI/VndyWyQvMyVCUmM2bkAoUlIsQ2dNKDtxVEtuLE1MRzBAQmZJLE89MFViU0hYZEBuVH5DLCpGLmlDWF1hfjs0UUlvZ2M1O1QuJEJuOTRsV0kvMUtl'@;
put 'RTxJJjVkUyY1XmA7T18jZDIvSm00XnlGKF19Q08uUkNrPlYkTEoqUCZvbz5+bFUjKFo4S1soVTNzZGhkQk5HaGorLkdjYmRvKk07QV4jRyVuV2hncVo+byZLZG5IQjRSZWk7SFhoSDh+Oj91aDh4PWlKdTYkQzt6QldhRk8+MD9yT2FXODd5Iz1IcihySGVIe05EbUc+cFM4S3ZaN3d8OyZoT0hO'@;
put 'TjYsJiowdVZIK2NOeiNLTlY/cG8xemQiKSZpMXFFJG1jLGw7czkxX2hnMTVzO3Y0c3xXKEdePWRZekdCPltxPFJzYn1GMms2Okt7OU02USZOZWVqWzFjKkV1L3Y1PipENTl1eVVqSlVjTl5PSUt5UkZJczJLO3R3Uz4sTCpsaztCNSlFJGI2K3FxZjRSU24zRHh4cHN8JVJjMU1ATExpeH4zbkBK'@;
put 'IkUmczQhPSZfUzpGfFNCMXVJcnRVKlpIblVoLzpfQXo6aT4mfSh6SmZXYzhMPEc3Y29pQ2tCSEtPJj9nPntuPX1qWl42NlZKZ3RYeWJlOntYfClJYEpdeEJ8KGdaO291diwrSjV5T11AUCNWMTh0PlkzSCt1TXFfOilqRG5FajZfSFU9TzhyY0Q1Q29BYylNZWVWTkQiT0A7RDJ6dkJNVjNXWSFn'@;
put 'MmM0eHhbVypxYmxVQlpNJTZ+aFd6KnBDWW9lcFhSKUxAMUI9MTJLWFFpaXJCa29WdkJ1SV1wNkhCL2dHLyYlckddTlI7VlhuLER+bjo+TlJHdV53QndUYWIsQzgqTGdleEkqOWMrR0FXSH5aSSl2bjhpcXtyWV9+U0VFKnJpKF8lRzlAe2FhTH1oVm9qKVZYcFMqKjY5fUo0JGsudGtdbT4xZGYu'@;
put 'Q0I6Yls4NVhHVWUmSEBrSjkiNkNCUEI7dzdQLltMLEVicyZWaUZhcDdla0pLNVI5dmpEcEE6QEVEYmtnUFo8RDtrISw9cU9tWy93NkZ2SWl+VU43Izw3NiEuPDNaZlRjQz1+ZGZPbVlJdXU3PUpxd2hUQ0t7Q35XQnBMTzV6Ukk3aFt0eV1KZjpuQzxWcmxyQV8oP08hVlRSWk1uMzZ6XSg0W2t6'@;
put 'JEVbRm9NRG5GMFRudltyXWE2OFg5e1hvQjJ4aWRYe3s8WEtnVmImNFMxNnckRXxqbXZ9T0xoP0glIjJjXndDaSZzZHNzZFUuQE99dHd0YEd4LDpQMzFUbCM3e3IjLG9GVER4ZywlKGlJMWNoJmdIOzN2QlBZR2hNRV0lYEJtWSUhZG03WndpUmgxS3xGbXVpfVtSUClAL1c+PjFyTEVvXU4+QiEl'@;
put 'ImwjS3ZNKjZKMW5UX2tgekN4UjU4ZExGWHxBamNjTEp4eWpydFNXdjFMNGhZOlZHWEI4e1o8T2tWNSowUT9hMnpkaEBoaV94bGleNyZAWUk/RiooYTUqYUxYOkE9OlJrJnpnSXtBL2QmUVtyXiM5N0k+byMleWMrTykvbn10SE59IU5NNiEkM0kvQ15xNHAhITE7ejtRb21JI3kjLjNDRnEwOkRZ'@;
put 'RXpsWTchRFVJZ192alhoVzJHVmZpNj10bFhbXTdbSSklT2UvbCVsSX5qQ1NKLysuey5Qe09UanpGMDJDP1VwVWRFPX4pcywpTT15aGFmXTVmVFhJKW5BUlJpKy9mQVF8Z2J9K18mYUNwPyZpdkpiMlVvV0suN3EkfDo2MGMzOis5Yz8vJlUmUUZxTkEreDxEbl8hQjFxUTh8XWV7V0oufE9VflBD'@;
put 'Wzk0XypyczRSTylKYzNsbj52KT57PnIvc0B5VX17MClrSCw6byY5fW5NKzl2YHd5MT1xa3lwUC9GfElEVl5CdWtde3ouWGxbajdxbHh1Ym1QNXJbXjV1NDxtMG9hfWlmLmd+Sk8xK2gmVzdfJmZiPVByeSssMDFVfkRjaCEwKFkkLDJ8K1Zsd0d+ZSp0QS81e0FKVTF5RXxQeEBgbFNpW3hxU3RC'@;
put 'aTprQWhld3U3Z1JOXUd9LD92WT0xNE07N19FO24jMzZkNiN4QD1vZkZoPTBDNUY4WWNwOnc+cDpleztUOXVtLjVuaEhtcChALGBOc3dGIj17ajUwe2d+TGQkM1gjT153OU02bnlyOHZ3aD84eChEKjMwVXEpOlgxJiRwP2wjWjppOlN6Qn0hLGl9W3R6YjA7TzxYeG9TKjg+YDM7KlJAOSpYYXx3'@;
put 'XUhjeUNDajxeYXc2ciZ3Vnh3WTF3IU1dTzcpXlgyaXQkYDlyKHJpMGpbXSUhej9dRFs9YzpCSEtCaSZneHlAZVd4MFd1b2M8cXtxaVExWGEyaUluRjJPVzhLXjloK2lfWWo8RGs9L31iI30zb3hHY2pPY3RNJiZZfC52UGV8LEw0VmlmeFNiWGFZYCgkPUlaIXVZRmhyTitFXyVTKEt9RC87Myhg'@;
put 'VXJ1ckVOZ3MpZSkocHBLfDorZkIxPzApISN+ck5pOmVZUCFbbF14Z0cvOzYuMHxdOSxic2FlcW9BQWZnTitvUHprWV5wYio9dzA4NWI+Vz9FdHlNbUs2KTc8WzMrNDFYYUl+VlpaQDxIX2Z5YEhYaFklJjYkbHE8dE4qbXJ3Rz1tR1p2eDl1OFA4c0k4Yk1dJCRoQDwwdktnejZXPCY6PlJbREB6'@;
put 'XzEzUjlZTUBIbzUudFZ9IWxMTW0jQjs8aks9XSJeKXlqcWN3MXxBUjdATiY9TGxBYV5OfnlScWtDR0pkcVdOTmBmMyJGNVVTbCFoRGMmVy5NfF9nJmh2QHs9cjh2bUk0IVY3RzciYDpWOFNfOHo9a144aCxfOXo+amBRcWJvKDg1clt0PGJSYV8zMDBLejlEQkZeO21GT1pnJWE5JWpUZlJtUSVt'@;
put 'JVV0K2tvdTdvREw4Kk1VNVpme1BLQTozI2VSamU9ZUxIKSlzKDJATz0+ZXQ3ekBWfiohdSMjNFdCKUI9dEczQSFBaFVoYz98aHFTQjR0YWx4Xl0pcGJeWjF3VyVvNmNDfHxZLHNUPkxkU0U0UjhMKjo2MHleS1lDPnc1U19bU1A+dz9GNmdlciRkXmNeZiViLC83aXowQEg7IVp8ZntEWSkqTyJN'@;
put 'NSVWTUdMXShiYl83dFAvSkhiW2M3JER4KywlV2ksWjdMRVlaan5mKyp1c2pKNE49d1dfdDhofVltSVR5X3M+WFBJQT08fXpiIVI0b111K344eUZgIlF1Ynk3MyE2VTc8LE1Naj0rcToqLzQsdkMlaWN3VzBnMmQqZ05+YCtKcGQ3RTc6RXtlRFFpUUJqJjJeV1t8OkMvWF5QJC4/XkM/XmMod1RG'@;
put 'IU9fJkg8aVhCNTVtcT0zPFFWLFlgdyVbVFBwYzZRUF15RFFOX0pYM1kvQipRU316TlYpPl4pZk5daVYzPiM0YDFRY2E9PEt+clFifiE2dn1KK0hod0R2Q3NuVUpUbV9EQD16NVc3UGR7TlZPSyZtMXR2b31GO1oqYHs/VEsveHtmITd1aTtIbXk9X0h0R3oyaCpoUHw7OUBPJVpFUyV2bkltRDoh'@;
put 'XjJvUTBoQD9qSnFuIjhEQCJFPHg4OSt6UGpZMSgjKjBVSnRFJTdiL1hhX2A/JEZMSDV0ejZDUTI9T0UjMXhBQjB9RmQobDIhckRmNEpSTncyfipVQ2MjQ1RQPHpYPX5mU3lPazhGb0U8OH5tKTpWZytQO3k+fWhlclZFdj8vQ3JQWGVnSUZuUnJjZTtHX2I9TDNUWmsyfS5ZMTE/JVd7WlhPSDBy'@;
put 'OlpqNkhibmUsOkttMmFCQ2JodDA0azJmYWZMaSFbUXcqQXRTLmtfPEkyODdSIUd6aHFMSVkjRmxSb3ptKil5eS8iXX1FL3t+aVlSUmNlQEJpXjFrcXRJcFNNOjkrbmY6JlNHYzolT3RqRmdJZXh3TV1XOnA4eSJ1fFAyYmk6IzIpKVRhTVZhVFs4XWRWSSZWU2A6PXYlO2pNR2IrUmJxJUhFX3V+'@;
put 'dHZyKFFGRFIsYT96KyhUaztaKW0mUU9fU3Y1UkBdXlhbaEYydT4ua1JnaXxHZGQiVGVGK0lQV1FBV0I7QXwpXUBJITllRko9Km10RlQmbkBtWDJVYWp8e0I7TVUifSkhXUFnNjkuUWVgSD4panNiWkVxYX5SNXQ6UHR0eytrOiR9MU43Oz4sQUlpO05iV2h9REtsSD9LfTVaRUVDcFh0ai9NJU49'@;
put 'bEt3UlQxSztLYDx1R0ZOcSxAVm5eOCx0Qn5zYXhCRUs7NHRMXiVaLHp6Tl5Pb1c8Nit0IzZhdStefUdWJi96SHVTYF5FIXpEQjAwJlhaWHFVal8iTDwuRF41fC84PnNsMjo+ekdJbDk+S1JUPTkkaDpzR3dlaEpXRUBrQUczR0F4bkp2ODdgVig3MVhJJTNrO2gmOkI+WnFUMGt1Zl5CS1tPKiNz'@;
put 'aysmSm59PVo/K1RMR2YlZkNJVH4uKDJ8XTpjeHNNV1AwNnA3V1tCKXwyNX5OZkgvLjJsQlYjb31KZmZKVTl7ZGReLHI7Kz5QLDhqajpIQnJXMUVyXnVXUkldRzg8c0Y0TXl9JitpR2FDYG8zVl04OFVXUVV9XVU2UiRQfGw9O3BpNC48eUI8QVV5MDdkMTRsIlhqUFl7XWtKdTssZmQ/eEE7diYi'@;
put 'LDMvLE5feHpEK34xdFd2YH1NV35kJGtWb255UCxlOT5wOHJLJjo0UVpoIWY5UmJnV2I9Qi8ySi9qez8qXV5lMiYhS1QsNHg5czRVKH1GZ1tGQkchIX1ja05oXVAid1tQcXxkfDFZIzZmRUZDbiZObSloTVMkVV0+RnI/UzRvSlV4T2A4OXcmc050YG40UCU4OWlaJDxGd3VxNFl+JCxjbT9FVkwy'@;
put 'UD1+Tm5iUHhvNnV+e0o0InN0bHtrXnN2PlZvJkh1PUZpPUhLT3VVW2RhS0F8REZQIXZENjBmSUZ1bURveEtOfHNoJk86XmcxMCVpYSghZXczT1Y2NV1SL3s1NWZXaGUhenQoZ0dee35wIUFRQjh0aTFmIyZFcnRobChEJiMqazRxYEZeZiYofE0qYzdNdkxEe3c4RTUyc0x6U3BxPCRAOWhvLGBV'@;
put 'dyZYfmh2SDtEam1faFJ0c3g9ITNbXkNIXzNvNUdKQ3A8bVtBYnZ5dzBBSXszWTNHbzREfm99MzBNIjVbczU7ZlpqW2Zac3UxfmEueHkwaWhxfkpAWFFoIjIhenR3UDJ6PzB6UzZBRmV3Pk97c2xoXmVobk52fGA+NjJxaDA4Kl5rLyVheyVBTzBfO2RrMU1IM204NV1NcDUpfitfIXlLTl5wM3xW'@;
put 'M19mRzNqSFlkWHVkVE59dUtmMmdueW9tdCZAQz83WUxYdTlgKV1DS1NnS0R+MzAsRlJ3eDh6aSxmZzl4STNCaWtCX3pMVGZoM0RGNE90XipDZXI/Wk8xbjo2JSpgKnl6VFQiYDM4dihOOkJrLCZFX2YscTl4UG5afnZSd2BEdFg3O0BFPUojPUdbLyl9KVZIPW50amNubFZgY1pbN2ZJZCsjRiVd'@;
put 'VGFHSSgrNHY5WzN0M2ArR18mOiJgUSFJP2MjQlVoQ2pQdG5yZFBgIWh0YHc+SnNXQCQ5OnwkOUNgdnEqR0d5RSYjbDZkMGBGTTt+ST8oYSljVElSMFtQMCRPVjsqRn5DUSpYUDRvdXRLM1BCK3tsJWhBUCs6ZzpiRSx7T1lhTW07R3tQfHRJSjo5SXw2QDVFJWV8VDdGeUZQP1BaJjQpamNIRX5j'@;
put 'X1J+JUU7YjZHan5aYlpyJGxEcW95ViswOmQrLz12UWY9UF9wOThweVpkMkd3LGFLJS8idX5KQmpiYHJpI0Z6Q259XTl8ZlEuNiUwPTF2SUtrKFJ1K3g+VX1ZZG42a1A6fWQ3L3d4MnIzfkwvLClnYVI3K0t3enEiNn19QnorMkdEcj17YS8kVFguW0ciRyY7Umt6OT5uXy5jXzlNeVUyW0YpXnc2'@;
put 'NyV5ZHd3Tio5VjBNRkE+LzBiOj5MT0FDbGdPeXNeZ01jRkp8fTR1VSZAT35mVGVOMmN0TjVSbHRXTURtaD1FKF5Mels4K15SLipHRj9BcjJJbm1zZV1TRSNNUEI5NEM7ZVJmVCViYyIpKEkkKnk2JkkhQ3hrPGIrYlp7YVFrfks5JUdhYDwxJTBzPWRGRWVDa2xTS1t9P3JLJi54M31teW0qMndZ'@;
put 'ZyUqOT5vSi89cUBrQGQ+RHlCZWhdRXcuXWNhb0xJcHE4L2N9XWtEcmNRbGEjQ0RXOG12QCsyelozbG9URUZjRSRacCF1OnRFRWwvRTIrdi9DaEooRFBuM1htSl40e0AjeHNafGhELHN0P1k2OVFhXnJacHxmenwzUD12V3s9RkcyIzZoIm9RVnNQPWQ/V0R0JmtsJUspV3k7flt1Z08xSDclJmM/'@;
put 'LEw8NzcwIyQvPlQvTFE7JkZ5QkFLMkk+SGtFS3lfMXMsWyIpUnsoQ3FHcVAxbkMxO0F1KWJZRXl1SmhZcmo+aXBvMjtyNHhfW34wI1Eibjl1dSRmbTZfRzlCWjhzR3Zqe0pwRVBGdFtRQkkyTXJxcl8qWHtYTzgla0hSUlNHIz13ck51LFtpWnM7di84fkJXbzt7S3g/RUhXU2VaZ0RudCYjO2Rs'@;
put 'U0lwSnVASjNRWTRvX2V5dCZFUkRQTSIvMmwrZzojN31JYCRgIkZQOTtoQG8iK19VWmNTJlFLZUNwcEkjTjtCZSZ+M2g9MnM8IW12ZW07c0J9aXg8SzJETUcwbkhGI0o0U3BxLHUhbCVuZ0Q6fT1+aEovSX4iNltJRzldSCJrczNzb1c4W3csW1tiV1hhcUtLYzxIU1pVN25CbVV2SkNyQlBSL21W'@;
put 'XkJ7eF84d254dUdCdDUqLkhjRyNUZGcyJnV8KHdMdEMuV0ReUkdULCFFQ2t0T2dURFQrREUvUWE7akBdMzJxJVhMYng6aF9YJiZdNkMxX3M/U0dkJFZYO1QhJXxnSEtOQVNXWDsvcjNAdnt4NG4hSD9KVH45a1BhJE1RYT59R0tnIVteQTJBS0lrSD1fckdpYjVNU0clNGlxVn5mJHksLlhYd3po'@;
put 'KktiLG4xTitCOTpEZDd5dmtaN2JMJXRnS09yYlQsNXUkOkBre01AQmEyWEx5RC9Xc2xmRztSRmZHfWQ4WEk2d1FHYWJjbnYocjBGJTRdfHlkSnYxa0hPSEBkRCwvYlY5fHxCUXw+cCY5Xm4kKW0ibyJGN3RDZEJoQ2ojemZtVk1XYFtHRXYlNFNodmVEZ0tsTUcqOXVKSl1NO2ZxVXU4VE8pYiMh'@;
put 'P2tIR0xAUk1SPHckfThoeT5bbVUjSVt1RjZWXlo6O1JkaHh7SV5PZDU8MzFTdkcpUHBTOFVPRjdTPXZ0Mk5fc0B6YGpFPlBjY0d2M3dlZy58PGdCNzB6XXloKGVhJk9qZ2M5PUBZMjsxZ3p3aVZ0JFpRLH1dejhQYVE0TlkxKS87dThHfVo7YWY4ZnVTMl9seEVoblNeKTYsVGZhenM7bkteTFtr'@;
put 'dkE0YTltNGk1aCZOVFgpcTAuW1QmPihsPysuUlYuWlNvbCpzOFFxaUM3SWt+WEF9ZUZXSFZxY2hLSnZeOUJNcEZDUlA+Pmt0OygpTHBITFcvTyRHfDBpO2habis8MCM1OFF2I2RLQzI9biR4NE98SUI6Xls8TnxFeG1AeTdreVdSUig2bjJCM3kiX1hTZW5yMC87Pn41WmZDcXZ3QHxwZio3RjFt'@;
put 'RVsrbWV7KD9OfC94SmFMbSszJVJKbTJTMlN2JSFCRkUuVl9UVU9uRWpWUSFuVCNFOE9iW3RaUjhHRUhEVnYpS317UlVoVkMwayRZdyZTTjM/RHAsbjczdyFid2lSfDN3JExERD09M1sqfi9LTlYuMWd+JUdVLkAsJjJ0cUwzYnsrZ3AlYiV7Ql1CQGJTOGlFWCUkXTJHb31kVXF7bUhvbGZPM3Vy'@;
put 'JmAsW3EkemF7ZHJ4WnFhYXRGQT51bXw2bjVQUyFHIXJSKUV6LylJQ0VQP1BdTXV0USZpJjRIRjBlLHViUjNIdU03Z3h1RltrfjR4XXVqfiM5RVshfWFuTW5sTTQsamVRTG0ufD9RX0s7W1lqfjVEJj9uPXRbbFgobTtlYDpFPHN+UVFgPDNjbn5jMjtINHhhUnBlLlcmWlVTM157InY5NVZAbX1r'@;
put 'dH1RQW1PXy9RUUdhYCVQL0k/TEFeXTkkKkRvUkBINz1BdkpRNFM/OCo5Y0RLPXBFa1slcTFPNXZJQ3RyJiJuLkYkRUB3ZGQxTHtCdXwxXyJ1cH5WIUQsIkk+KD8yfGpLJihOS19bWEVAQ1NCem5Vfk0pTU5DZ3FgN29Cemlqa2ksJGh4JSkmLFhWPFdWOlZVeCI0JFY0OEQobitUK0hlWHppfCs3'@;
put 'Y0NbfChFKFs1b0U9WjdRN2FjVnhlcjRYLC5tI2hjSm5BcGFVLyE3Q355fGtGOFA8S2ldUyJvVCN3Z2M/ejhxdVBzNUVWe3B0eHxFU2VjUUZdfChwPDBPNllyfCYqTXhjODRtek44bnhsUT5PSUtzbjhLLGJSdTVdfmdEdT5haGJGMTU6d3w2dzA0K2NJQHdKK1Z7bzZCWStMUi9laz9SfDpye31m'@;
put 'Wk50VlolaH15O1F9cypWRiJobHdKcHI9TG8qeElPImBCbVRtTz1oPkZoajUocXB4LkxKaGVQP29QIVBBJiIpaWRGeGZZcjlpXUFdPEQpfV9UbV5zIiRPNHhqQjxEIj0+fSFGZltjMyZ2NDkucXxQSHw6eFQ4cV44ND1Qc1pUeHcoJFtwcjA/dk09dUw5M0UsMitFSDA4MVhxV2ZhTHRfL0M1TWNA'@;
put 'd3RKR3dOSn5SUCFzRUMjWVhAR2lnRDp3RmFUanZXYyJtaXNnLzV2KHdRP2FlLyE9N11TNlFtSTdjJiNUZlAyIzFFOzx+OGwiZiF7MXFlXSNNQCIwbChObUA1PkxQQmVqam82Yj0zSEgqVCRJcVYvYng5PSNeO1lHPWxEOV1+RFdeSSIvPT9XXnlLOVZTYWJzVWYzN3hnWTZGODFbNTdhQlVtMiQo'@;
put 'eVtAMyxfSTomWE1jW0Q3UT1RemM5KHIvWy9bNChYRTZ5fjI1YFk5TmdVWS5faGE5aWYuTTxjXT8vW3BXWmdyYyZZYCsjMEJkKT8qWWlJUn50MlEoKEFHTF1AUk9Ga3QsbVZyOEYlfFQscysmL3o6Olh9bFoyL2EuKWB2Wjt+NyxvU2owIW07OkdDTml0cylhIThHPWVpakd0Mj5PMHBHLD5kLlBF'@;
put 'QEhmLnJ6WGRnSk5xSDwvemFrL24jdiE3QnlAdVlOSU9fc3RsPy4vJHpNM0d7fFVnaDIlbCJYNlY9dkdlKVgsRUpFKE8iKWImOGI8bFcqOWRbOF1MMkp7dzt3PiR7MlQsNEReOywvdj9SUCtgL0NpaWNyMmUrcWM6WChERm07JTpnSXIkP3FgXlcyeF4rRl1qRmY1L11lcGE9PG9kIU5gPm9BMSw9'@;
put 'NHBLQzwwRmp3PzlpSzllQSMoNT1SdS8zelgmbEtIR1ZJWVteRHI1eG0kentfJVVmUFRXWC8qIzpCKGwxajkkUzZ2KHYvYDBiX0h6bXFVLkgjakFhS2xqKlRGdEQzcCpBcHEsY1pTVDYrVyNkb2BvTEshbVRIOSR1PiJRYV0ycFFnYENeNU1OPGVeTmkiOiZKOnltKHtRRkxxQ3NxK0JYMFVxUCVh'@;
put 'JFZnYDEzfEBPdlpVMDduK2NjMUc1dH1KSWgyMlRjZWd5MiNvYD1hMnBVbTgqIjU2JT9FOiouK2MqfDleWVpOdT1XLEdAZHVbWFRfWz87cU99bzwodzF1ck5HRCQ1LlRYYGlgKmc1QkpjWnJvcy9dUnBha1UmOSh4aFpWRGA7I3JkX3NWTl4zOVMlN3BQLFFLTSt9TDxvRDRkPVJaczMwcmNpNWB8'@;
put 'OS5KfSgoW3NhVjZvT2AuOTJ6fkcmZWdbJkpXez9CMGxCYH5lVyIha2gxLjdwUSove1djfSZHPT5aIklIN2tyWztYN29beih6cWZ8OkIlVEVwV3UzXmsjSHIuM0k/RUx6cT5QP0ciI1JtWnUxJlIuTkcjTSRNK3tDLGwkTHFvclYsRS9Fa3BdZ1A5VitzbmMpXj1rJmFqS2whakZne3RteV86VTxd'@;
put 'dEwwUFFnVT4rPTsodlg2fXRKNlN5ISl+aUtNUm55IVJ8KCM0YG44dXhZfW5qSWowUTgxd0sxT2lMKXJJPTdbNyk1Z1B8UTJnQnsyXnYhTmEuVzc7IVt4ZTh7SFh6RTtUPUJUdzNwQkIualZZZiJbN3o4QVtMWDBjRyNRQGY1YUFYOTIrXil8WjxmX0t1RkZWVCFaNUk+eXVmNG9ETCVlKFJnbkla'@;
put 'YSNJTXpYXTJzTE4xWy87WW13YSkrNUx7dENwcC9Vdkt8Vy9kfC9UUWR+WWAuQSkoYnw2YE4oeXVRZSpVRUlsPH0yZjk7QSNwOipMM35PJkMwVDIyNElvViZ9Uig7dHt9JXQ7IjFXRnxfPjJhX3VLYyRhJCZofHJtVHtZNSY/eS9SNU1zT3QvU3wybnlfcXxWKzVZZWYzM28/JF85R3FVRjYheDMv'@;
put 'XlU+aEZOc2M1P1M/Z150KD9qWDVueUU4I1RzW2cqJWg7PkF5KkdWL1hbaGZ5UztOfEg7Y3w4PilfXXA7Y0ZqVDhRMjImVHsrfkEhbGN0cm53SjlFZHJhSklnaHA1RnsyUT5LVCQjS29vSFdvQCtSZHVkY1JwezF9Vz5NfUtPcVNjRTl6MV5GX0koano4cVFpP1FzWzBZempHSGleL1t+VCpaMmZ5'@;
put 'd04pTiZSO01uTGVYRDFKLmNSTUQ1Y3I6Nno9ODM4KUAlLmB3RXdkMUNAb0tKN2h2MHRheSxxVSJdLD9vaTMqMzFXOUg/OVZufC4vNmVgXlJ2QXI/ajVRP2JQajJWZixzdlFvYzttKl1PImhGPFZXa2N+VC9dT2E/OEw2dyh1X0IuTTBKaX13fUE4XSNzPFIzUWlXYGIoT2JYfVMrJnFgSFkjR3ws'@;
put 'VkZhail5XSVndCFLZy9BaV9KTC56fjZyPkNiQ004SWZiaF50TDE7PDFXPk9WOCwwZ104TlczenY6JUlXeDRhO2FNWSNTV25JLC8iPjRZMHszKWc1SCNvN2JnVmEobyE1emJaR31zSUIzcnRXUjM3dlRUckxeJnQvUWFWLFEmQE1+YE9yKnY8QlQ/LFI3a082NUw7Rj19YGEsW058RjVHLmtVfU4m'@;
put 'TDx3KXpCTEhwVENPTE1vLmklJUZQJVlGeSt2aTkzel80JTB8Q0RZW0JveTMjPyRWazwwUSo2KExBKixiMURRUUN4Z3BuL3FLQzMhInxzZj5UdChaO2cxT3hlciRCUC5iMiUrYCZLIy9WUllHWChfYUF1czU+RCNuSlVFVCF6KEcxcHA0Y3lOPHlQckQ8IVcpRyw7MztRRGcjXWwqdSxNcjhyTSZN'@;
put 'SjJdQytvXlU7V1N6ZHRKfVdDV0o8aUA7RE48XzE+ZUxadDdjb3RjLzY5I1QmfjtKSTQ2Ljx1R29YcipATjF+UmBHZXpWdWUjbikyXSpnIXdWPzRKSnBbLGJzNlZZSEltflA4LGYhUyZrOk9sW0JTNFlEe1pYMGNhZHlLL2tCKU9IVDFWIyl2OUopemUhUmhfSzZTdWl8e3BhdH40ITFLeThRZ1tL'@;
put 'XkZBPyZSdDh1P3FAXnFyUnxRfmpgJTYzd0RYWFJmaVY4b1VdXTAycThANWp9U0IzfGd3YSloIiRdSTFzSVBKL0pPVj1YJG4uSX0oa19jSjwwYSk/Y35vRWk5ZEIoeV9XPDBMI0pbY3p2InxLPjhrRTtaKTlTWngxWThERVtxcC9tMnYpT2kxJjZJeVRyPGZsJmJSZm1Ia3UlTVpndVIlVls3YHtW'@;
put 'M3c3b1FTQyk0Rkoud1NdRF1yIXZNbl5fIj4/RHphLEJzYCREal58Tk4wL1tTKEY8cFJLUElDNGQpeS84OTVBY0hBWUphRXV4VUowZm09fChNQGZmeykpIS8zTGBrNFlALDIsL218fDV0WS44TWBWRmoyZGtzXn1iX2BvXXw3UiwyWSUrI21McEF+QzApNXF0bltUMFRXeWNEaWdudFApaF5IKCFS'@;
put 'eUtgLlNdPV1tQ3tPZm08PFEzYmdQM25MQyZiSExqY2RTL2xDYS5KLzs6WHg9OlYmRWJFUXRdIkV1YjQmTCk9ND98Q1gqKDpaMV5pWTphOjEqfFlCfTpCKDQ8c1ZRRG48d0MpTihBZU82dTtIImUsN3IlOkAmNU9HM101S0lTMiNiLHBmZnk5L3tub0NKUGRfJX5POSVSc0p0TGRQY1c1IUI1Jk8z'@;
put 'MyZ+VmkxUDh1T3Z3JjNJaFJYRFVKNylvOjJ6TTsmOTBJa2RpOlQsZVtENl8jdCpOMnooKmZqZFB6I1VtR3M9NSgzOWA1ZUJgX3klVEB6KGx4dT5eTVN6VyJAMWczRmJ0ZTRzVmx6eE1ebnsyfj4zU3lVbDciLFR3RVh7JT8sZTwqLDFGTTw3XlhoW1t3bHw0VTF0IV5mY1U5XSphI3Vqcz8oPj5H'@;
put 'VWUyISY+YH02UWZneVVAOXBHPGg5JTJ8M0UiVV1wU0dmSDs4UiMjMi9BJDhzaVZ0d2E3NlNaMDdfWDFUUWRyQWxpeGE+dS46aS9MVzlRI0ZjQk58ajVedT1CJCx9L1BrWVA6cD0+OnhQTE1McCNhLFFVOiZ3bVd9OV1UfVdYUjJERW4jU3J7eGszaE8lVH54UT5HNzg/RHR7OigvSWc5SH0mZm5M'@;
put 'I1FkWV54dCZwPHJXZ0BlO2FTPmI6KSZ8QjtvaFQrQzVuUkEwRFpXVERseVtla2F0X11yJXBbXm1dOmRCTzAuLmNjVWBWdjZbPElsdTZFX3o/Mn4uOHJgVGNzblJWS19LdU1oQC5zZjp9LDksXyRtMSFKfUpobDEqJHttbHQ8PFo7JW4xR31NP0FuWzhMSENZK2puVjxqTmYxSHVROGZMeC83WWNA'@;
put 'UW1SOCRAbyR5SlNyVzpvPVUxL1ltPVA1NUF1RCpfb01yVHY6Zz5qUUJOMHFjSHVHaCtdMEs9Oz1gZ15tSHtmOHlsRlBmO09tTjdTe3BSPFJKdVI3ekhFIjQ3cCVOYHs8NjBUWVRSXm1PTGZidWdLV3d3RlNNTC9PIltMWkRENGZfKjdMb3BYQ1Z4PFNqam0pflRedk48dDt1Z2RGWFlDcGpOR1Z+'@;
put 'Qj9DeHReeGBzN21dVEs1JUVlKSgqcEN8NDRNWiYrTU1bZG0veDF5OCQzQkQrOHZDcmZKSU1TZnwxX2BEOVU2WS8xdjkmUzVPaTRfYXUoQzVkJkdERTh0I0lZPk1OJW53U21JYnM/VWViSlRXdmFXMzJ9bEx+V25LT1olXUBBMTF9OiZAejdiJmhOKE8qQ1MjclJkPFVxcz5sLmV4YTx7dXZeVV09'@;
put 'LnRwWXdMVlZwP1VrTX5VcVg/fCNpcEVNS1VNfEtKcTxPYH4zQ1p4eS4mYi5lWUgzQj5lOSZHRXhqaC8zKnJuPWtnZUNhWjhBZ0pJZFBJJCJMKHJlLlQoZHE5YnhOUkg8aThhSEh8dXleeTxSaTNiW1pvKk1GRWpqfUFbaV5QMjdPWWRgZD51ZGwrPFVRbHBzfTwuOWVOSnc6W3NLPF5XczVhaENg'@;
put 'bjd2X2U6aTdTN1MsMVFLVHhNVXx7PVtZNTIvfVZqfTtXLnt4TjZmLlN+X2t4NXBxITUxfkxeXixHKGx3M0YzMkxEWHRvdTxsVUpxdnpULntQbT09VHk0Nkdwbn41XiRuZU8uWXNjT2RYVFIpKUBDISlZR195XURUUXgua3JFPm5ld3pGY2N5ZGtId3dbIiJPYSxfZDBiRUNGRiRqbWNsYXdhW0dN'@;
put 'cX53fEN5KC9ePyQ4KTcvZmRNdi97aHUwfiFKQGg8SHxpWH1oMnhjWnp6RmpCR2AxTmk5KSMpdSIhT0p5SH1mXTVYLnQxU0NMdyEvZU5NPmtQd14uTCUwX3xPK10xX1luWyM8bWVVOHNtRU5TVU0lfUF4TkZudD43UyZmKDoub1I5ZTJVTnd9O1IjMlkhSX5edFNsU2MpI1djX1JTQXJUUjNtNEVt'@;
put 'ZyUjIVVYfHpzWC5DUjlqO1Q+fmw3ZT5ZUWgiJThNIiguZVkpdT5zR2hTIlo9ZXR9YyNgcW5lbjArKUBAPDk7QFJAcD8wXUNGKGgjcnhxTyMsOzJpZE51MzpaNzA0eWkvMT9MI1R4eE8hYUR9KGAoU3c4fE94IzpzdDhSKS5vLkJ9TEx6Q24zdytTdk01TyImJkd8SHZ3UHp7VGk/PnlsUT4veDk2'@;
put 'SEdER1Q7TXEiRDtaQihHS3VHKldrNlNeKj5MQEoiWV0xQTZvWzB9Zl55fTc5OSQoKlIuJTUwNilHbz8lWHczTmlxYUMhen1eelt7ViViTkBfV0M1MVhwPVBYcC9JQDU5fCluMW5pWDUmPTdrJj9iP1lBQSpDNmN+TGd4KHx7Wy4rcytkJH1rPkhneVcrekB8ZiNIcXxMdVlzfGBebUhLbiYiaChG'@;
put 'LGMsJCI2Mj9HN1A8KUhOamlGQ3ZgUnxWSFJYaHh4NUduX291Z2NLRCZ3Un1eLkpnfTpvZXkpZ3xUNlNIOk14YCVdKDk3W15ta1gob1U6TV4mMXo1YnYlMD94XklofUh5V1YrcGM7K24rPnxFKVYkWS8pMUN7aEAvMmxHbyJ0Olk2VSxJIipzRVt5MGk+Smw3KDYscjBBKSg2JVZeUEdYS1Y8ejRb'@;
put 'aGFhdVd9Rj1iOCF3NHRKVSNRTERsTk1Kb0NabHJ8JX5jVUFBJnMxWWFyZVZeO2VUcCtgKmtHQ1J6OHtDVH0jeW4xb2dlbDVAJmZXa3hybFg3cnlkJF9ISklhTDZXK283SEg1L1lRODtuM0M4M2NbcVtWJCthZ2BQMXUuVmV7ZTpAOntlZCZ0WHRTek01N1FuNjgpZitALF1CJlgkVktub11dWSJQ'@;
put 'XjQ1YnVvVzMhRnB8OWUibHV2eld1RzxfTXdRdmVWbnImLzxkIVdNNShGVyssUm4jRC9LeHJLPlReKk88eC4+alNmJWxaUzJwbHtDKilKK1cma2Y8UXVeTjt4RmsldDxqP3Q0fTFKR0cjV3wkL3clKWtoUGovXTp+eFhJZyNpbn1dOSQ6LlNdTWV9WUskbCZVP2gmJWl5M1A/eiglXX11XylXI1p4'@;
put 'KmtRJD87dj92Km03QlhYP3hqZDFXcGxNKnJQalBdNSwpbCsvWDY5QTJCZk19YC9hUXRgM3w4YWlGZmskKzl9fG0lfCh9Ulo3WzUqeUVvbSlEImZTPEYhO1U9aE9RbX5fJCpQdSV5L1hWLDlyfXBvQlhPST4/KXxhKHdLXkxxUyZfXUY8Tmh9Tj1TelVKNEFJZFByZmAwPExGT01tfD09ckZGM1dl'@;
put 'QjYhNEojNSghfXRRUDVnJS8uNXNFU2kyTXpUe11oL3hkYXM5cXFEWXI4L354MDFbO1lEW1d4MihkdTJ+W195USgoVC9UQGFVWEAkLnYocFdoT3YpWUVZWyxmfkU7O0RKU0pfQk03On5fNzwqKWZsbDhmOSRdPlAwOm1id2I6Tm02JWtOUUdTUCkzdm1kWlEoZl5LUTg1KHRjOW1ldn0qQztzPD1m'@;
put 'WTlXOjMzW3lZU28uUDt3Inw/WUV0ZVs9fCwzU0lAOD9waWAiaVFmcjBNPD5WdSgxKHdYVVlSOlpiVEI5Lz85Yy5xInBJZXVhb1tQYWZjOl06QTBXcGxFbWU0PipnZipdSk1fckglfkx3QE9TPjMrPTdXR0VRViJQVjpkdTQpZiZLOUhoYVJ9Yz9Qaj4pcEx1PUNEaGE7UFUzQF8iNU4kIzdFWkJ4'@;
put 'OlI8b3o0b0xlUCxkIVU1JnBETk8ufCJ1QiJ4dj4+TyRQMCZNWWZTcFdZI3N4eDkhaHEwaW51OWhadTNLcX5FPTR5RGAzLDFAek8pYEksQShAYHgyeCh3T0o+MU9JfCVTJDEiMXRRYV8+LzYvJE03elF8cDxKb00rNTsoL2tnWUBmMXRxc0BXSlleX3wpazd7RFs+eTlFb1hpPyRed0Q4bmwrOEAz'@;
put 'YHVOXkNoanF8JmteYVQ4LnlCWFNpSitLYW0lYlBMKy90Qk4zSzFnem91Mkx1b2cqWkUoQE89dEdnaXlbTylfaEx5dHU5I2U2Uko0NC4jQkk+JGBsI1hlRXxnYGNEOlNKJGNNTiwhNHAwS0wlLnMrPFZIYUMqeVR7NExqO3RgJCFwWHhtenAzdzVLNChKI1VsQml6NF9TbUV+OkZOQVVlUGI+R31w'@;
put 'alNRWDQ1OD1fSDtaPE0wczBSPiwzT0ZUU3kpfmJ6SipMZypqQj8hVWNVbCRTOCIuNVNSdDc1TlM0LiY2cU8oTCVYYDYuPD9+SjpEN1BOIyhoWX4lRWZXfThDck5DaFpseShvfHw9PiIiVDoqbmpWOF9BQHxXOnUwa28iN1RqTnplUDJfR1grbEJzdVspbjNKbHM0VWdGMihnWF8zZCQjYTsxWE47'@;
put 'Q3BNdXNaUWZnISVOSiwmTUhafUo8Z3ReKGo3cDVzalRPV1ElViRFWkdvdWYqajZFMC8kOnR9aWY+U1pIYVlsKWRNeGZ+dlNDLiR1WCpQJTJydVhHaDBPQyJ+TVI5cTwvLFtbKHFyUDFhSGJZWCg7IkgzODQrajk8YjR7ZzNxRlNAYU9EOStfbnhNX3ZPOlhlP0pBLF41fntnPGNRL1A+azMrN2Z0'@;
put 'SzpDZm5CLEIrdzVXajc0U21OOiZJLE4yaUlKVC9LNUo9Vn4+eFdSU1hVLCVfPUZpQWpGOS5RUUlPN2wwJDhRaGZFIihUVX5IPmpoOnQqUHohKXFtfEA9TXlaSSQvVlZ0fT1WY31kT2NTTThlIS5vVyY5e3FRZl4yN3g1dmBBR2BhdWs7TGRXPSQ7JiJ2RGo0KH17V0IjKVR6KWVSU3N7Z2tPNDRC'@;
put 'V00sc1kmPEZaaUoyK1d2KUJialBjTmdUSSwmdHEzbE92T1lFcVdFUCFWQDVVZERDKkFXa25zWlhYM3grZ053LCFXbz4yQTgpYTM+OjJCaj1SMlhNQFZhIi81PVdKXzJwKyouI1R6PmUyeUddZXZlIipuO2p2MGt6JTVMQjNiOU00cEpYazg1W154SkVhOTVfVWUiZ0ZhQnssSiQ+YV5AMEssbHJH'@;
put 'PjJyaTRPTyNdPSRtMVRvdmJ7OyVqSEl4dEEkOS5tcnQkdV9yJG9zMzlQcDdCTTFXZDlqJXtRVG1xWD1eO25qVlE+PXp5flg2UFUlJlVwPUBXPGtLWmMsSnsySikmaWNOPigqSSUqVyxWaHo/Zj1hfl88KGVKKl5HcFpkKGpeSFojfVE9cW5CUVVsflMoYjBPfCNJeG8uTG1JUHNdXiw8YiN3bE5U'@;
put 'KVlTUE0xc28rX1JLajkwR1swKjhrNVBhT2FmYCwmd1lwd05xYE5KcVkzbUpJUTxlWVBuJCRneDVuRS93T0w4RkBEYG1LX1hFais8S1t1XyhibnxlKFhsTkokMz5eczM+LldqeVY8cmR2RHwqTV1wQkg1YCMhZU1nZk9fVW0xe2FfOzw/LyMjcVhod3tdX0Y1Qj9dZ0s6NjpOV2AwYCMmfFRZQnRt'@;
put 'M3c9IXNlUmFSNl8qSSxrbWwoWVJJeDMsX041cFhlK2o9W2NhaDFFSHsrZnlCdlsuK2pvK3FjI35eSHBdaH00NlguLmgmbENEZTxxNFdvU315LlRaWDhHUSh0Nko/d3JaY317SCM1OmBBcWd0UG5oM3xoMlgjI2BtOXJSKnNhZzcpWl9jbE8xYER6I2I5Wy9mWT5eUi5mUkR9PGt7Tm9ub1pNJFRF'@;
put 'O0olel5tMytkQ2xNK1JNVzB4VyY9bDc5LFdjIXNCQENyZS4wW2BnPFlEZmJGd111T3FpYElTdUF7WkFhLyh9ZzQuNUM/M0cmUFFEOE1hYikvdlVZMjhYRXZIJUlERUY0NFt1alRsdXJDPyFJJkhNTldRRDl6eD5xJUlbZE13U2lsdHosZ0QpTUheXzdrXlB2T3hCKSYuK3huT0B6MUd7PFI7TTxt'@;
put 'UzMjYTRVJFIheGE3d1NzaDtfO0gmb3MuImFVPW9yRSpyZ0kkQlpYJGFTaEZvJE9bR1c+XyJJTXtYJGEwZGh+OCFCJU88ZE1NMnREe1pjWTR3aWdLTTVdISNKPF4qS3VpazMqZmhLUmUia1VTIkNXaCJIVDJPPnJwYStEOTcuVWcqYGdnb2FZNWBpRVd5R35GK3lqakZ1SmZPbHUqTkxxVUF6dCZx'@;
put 'V0trUCo5RGJNNzAwVS9JMWQ3VilFeWIpNmBRYFJqWntDOV1uVT9PYUlOK1JGLlBuMj9tVjBuJDJaZClxTWVnOTs6OGQ8LjRYO3gjV3FWbVd7ZXBjSSZrRG9rX0xqK3U2b3gjdTRReGB2Pk0wTVE9e0FTemEvfXAqKEZANWQzeHJDQG1Re1AxOUhoeXddL04lPnFQQlh9O09CY3YuOUBAWDQlXjQh'@;
put 'cVRUMURlaVNNLjpYUyhNbE8pVlRNTH5EYmdHQnpXaiE5XlFhIWt0ZzhDZ3Z+KzxkSm54cE1MLmFKYkQzSUM2aVcmZzk3NFkqRzxIeX4zOlUpQ2ZAM2VvVU10MUlTIXE7azBNTjhET3U3LklXLllpYChIVTpaOFtESF07UEhtfF1ET2R7JnArJW9DIm5OaiUhZShuKyY8OEB9PERMI3F5UCQyY20h'@;
put 'cnRgezhZS0Q1UXFJVFM+dkslcSh+cExhSykwPVZmOjQ6NzIoMEFhOT9mUVt+bWlGJm4yNXNgeyVSUkE4Sm9fNncsPyQ6bXpGcFsxaFJKczdYbmNZemBFUiElYUMjUC5OXjpwZmNWR0sqcEdTSiprNV9PLyY/Lk8ienVmeCpDWGl4ZWMhalFFO2l+Q0gxLCxCZTBeNmpUOS5PJXI9bG5PNyhscGNH'@;
put 'T1trbXVTczN5dW8mbmJJSj9VVEBLRTk/fChLTVtlI35qZFBtLmZFNHFjfWo9ZV0qe04oWzFpO15lfmJHfTx3ZVo3LEZ5flJPY25IbUNfYUtITl8sVUxGYExnQFNjQipHXmQzdnMwY288a2l2R1AvSFFqSXo9QDkzOnMzdjV9dWFDeHEmRyVFUTZvVHdzXltQSk1gPj0vbUlwJntXfEwsJEBqNlJ0'@;
put 'WW85VkJSSmg+QlUhNTRwb0NjQk43XldTTWBQMTdnRG9QQSo1LEElQVVCTTxbUEdgKl9EO3EpZENMeHZxTnpKdCN+P1cpNyk8Pz5pRCRCaih9XnIqMCt3eyF7cjtLI0JrWmBkQHA7PjBRSjB8Qn1GPDp4JSxZSVBCVEdDZXgqeiFvVXlIOnI3OSRPJW9mZWFbdVpBPUcrNU5eSWljNjdxKzpybkpG'@;
put 'Py4zNWcveXsufDt1b1tFbmB4L3M7e3hHRj0sSVQ5ZS9HZ0dkYVJhKDd3Sm9aMmwwN0MwaXhqPCZlKU1tSls/b3F5QDMmIiZOYjRIY3dbQXc5eztETkBhI0A0UWYoPSpEQjRKZDRrM1h8fXB9eyRHaEdTXkx6ezQ6Onh+MWlWQWpYWF4qIj93T0BSS3g+Oi91UWhyaF4qVFUkSE9kISZVImJWIV08'@;
put 'e0B9OTVyYFhnazwqLCV0bEBzb3d1JnFWM1pnOio2bj9NbENSdiImMzNoYkUoTWYuY1ROOixdWSYmW0tqIihYWTleYywpbiVLXyFqUlg/cDk0Ykw9OXVkU1swb0EoJXdELH5IOGpRS1M7cyM6JC90UFQ1fXx6WU9sdUdhUVhiO1BrKyFfa0cjN3d3QT5mNytqWzwpMlpfVzhJPGpCdVMxO2RyI3os'@;
put 'V3ZsV1VxPUN9Wn1GIXYiO2kjMyNnelprXiVQM3o3KjUvOnVdTlBoZFJHPWY/W2EsUFYjY3s7QFJ7UkdtZVYsKGgqNXBpTFdfNzlAYVJPJmJbM2xrd1gxR3tILnAlPDM4ZFMzbjdNWV5+dT1uS0x3YVBhNjNlXl9oakcie2Q6XzRSe3xMSFZFbCtXbWYwb0lENTpEMlFEdCRpMiwkKWREPyZGRixq'@;
put 'X2Y+bmpOSmhqTn5jSXIqU2J1bEM8dUQ7PjMhaUNKUnhlU2FSeGVxbH45MmgvVDspKnxNLz4hUCVCRkshdzwsLmlHTmckVDBZYUJPVX1xWzt2cDBrKyw7OlYkaWJdJT5LNH1qLzY3aWorUTdCPSk1MXMvVHxoZ3xle0VbW1Jiekc4Oi93eEw/VTgpS0htYmJZcno/PUh0QGFaJT16byY9WV1zX3sq'@;
put 'TnxTdllpYXIyUG5lPWdBPDIodnlpXkRKIiwrbnJLZGtlJHsrX2pgQEJfJGwsNytNbj1sL201bypdNXZDfCp3Y1A6VFRNXXFwUDdMYHd1LmY1e3s9ayhwPlp6OkBTNk1RUk1VPyU9Niw0VGd8W3Q3bGQ1cl9lRSY/c1VdW3wvYUZjZHI8SFUwNnd7P3RLNUVNQEY7KHB5OHZJOzV+VyYxMlVXUX1m'@;
put 'PnRhSyY7QjwwNnpTKUJIdV5AankrLlRDYlApZFRmfEt7cEZbRXZTKEpnU3VOYDwsYns6dFREQHBlanNRQUkqUFskPyJWYyMwKW1JLExTQCI+IlooeDpUWnVdRn1dNzR5Pk4kL3hhSTxbakVsW21eWSVhYE49d2R8WTFOc1Frcnt8VGt8dz47SWdvayZZRURPaGtMMW5IJCwjP3hien5wMyspL2Jd'@;
put 'bTghUTBNVGQkKD1TMzwwOSE+aFc4NislU2FvX2hSK3svXU9maGliVVBqdiVDdzBXY0oyWzJ6MmUjImBiaFZrZiFdczwsWCNgIm0pNmVWYjoiIy89Sj9STHgwKUMzbyNCbG5gMkJwViRALjtUI29iOlNIeyVCL0x5bEVqZ25OdEQwJHNfeUtIQCYvNSNhUVs9QWZRKSs+YWIqIiJaeXplSjNUVVl1'@;
put 'ZXx6KjBbc35YckkodiV+OFlvUiw/c3pJNVc5QSxoXVB4fHQ8JmhqLHJjaSZaWmNxLjgyOUp9YUgzUTAzRCJPTVEjJj9MaiZbfnA1YUxwPUVhTi80LHRARX5JWVM/VkBeREouS34qP0Bgd19QcFdtdEcwOnVlLnZScCJaKTs6Q29bcUh8KEd5LHBtdHsydDNsX25VPlNVTShmLlZ4Kj4rY3ZiLzox'@;
put 'eE5sMGh6Wm55PWtqQnp0LzM0UnROTmFPQ0xURHcoUnwkTy5WQDk0QXpQSERsKFAmKFYlbnp3dng4QnsuK1t6bnE/UWg5UTNyY0BIdjw2VG9naE1zJW5zYXA3YWlPM2F7biRxKX5nVW05KzxpejBWSGBoIXN6QV5QQnR3JD5JQTdNX01YRnE6bjxTZVRTKTtEST9BUzxPUjwzbnxOb1ckRF5MeHB7'@;
put 'aj51OjNmeUQpPyNMOXhWcztOXkE3Vn5XZzQyLz8lODlJd3Qxd1kjZzRQNX5CLCg2YGNmI2BGd2pNSkYwLGksMUwmL0ZGJUNeQzJ2XldaWEFvdFdCXyEwQjhlNnwwNCZDcWUraj9deU1zJHZlajVFZlt1JWB9MiM6UyNZVk1NKStSS2duPF89eVppKTd4Tj89Q21wZEU7ZypkMGJrLyJCcit0ZHEi'@;
put 'OTQ3UEJHOH5gW3lbZytESys5VGgiJTRTbCQ+RlR6XUcoW29TYV9yaTdrbDYvRlk1fWpLSFlDY3ptI1U4RThhWT1AcT9IRn4oZ3F7eE9Me04mKndOWnRNTFdGXm1AP3Y9dWZaQFFaVHB3ZSZCM0U8N1piXTtINXR9OUYmcC9YJjBTSDw2JUZQOkRaInhdeG18Knc2X0UwQW5ieWdKW2dDW1VUQTZv'@;
put 'RHZEaCErT1tmUV1JI2xoe3xjL1U/XlQhMVJUajllYztVQ0MxTkEjL1k0YHg5XnVXQGgiPFlERj9NY1RjN2ckKGx0SmxkPEFpemYzYnJCRDZrLmBVUCRLRmNyWFleY31qem9MNE5iZEMuTzlebnwhLllCUDVSP0tkZCxiazNyRn07OW9jRDp6WEppKDxeRXdjKkNqMSFzU3p2MT5NOFcyTSxATDlN'@;
put 'Nk5BeHlBW1leQndwMzhlK0g6dmFObj9EZG8+JSVwYHB0bD84YjhzZFpzQDFCPyU5L2QoRHZbeztRNz1CfT85dUc2S3Rdcn5bfF5ka0FpME1FZGhzcV5VZG09L1NMdD59M3p3Tz8wWClSYiMjPixzfUgmIXhPNDNlVWAjaG8sVSxlV0Y1WldZbzFfP2IjU3ptcUJBVDcvJkQ4b1ouU3cxRlE/Xk0i'@;
put 'XnskZCwyfE4yZmZVW21PWjdrMXZ1eENjaG1MRyxbOSFSQ0NmeXhXalFddFhRLngmbW14QkZPTHlNflNnPnJ4cT1JT2djPkI8WGBARDleaXcsJjRrfkA3PEE9dVR+TnVbLFVoZnNlRmJiLEJGUF9naHpqVS9YSSR6WDBqVCFIeSM+ZVRsKmk4Ij1ET34uRjhjcTIlSmVFV2l0e05jXlBVZ1JtUV4p'@;
put 'MU1LKFRoZTpnJUNgUkszNWVbPER1Mz45dS5eajpacmRlJHQlL3QyTlozTV5VNnRwUng5IiVAJXZRIXF8Zmh1XWxVbj1DWywuNCF2MEg0eUVsZzNqNyo5Ln5Ed3VidS5pJGwyRXpYM3BhOU9mP2JEYVtUMztOdy5ycCp8eFU6KGk0MGhmdVAoSzMue1ZNJC5UfUpELCRmMVsyUiQ3UEFrbHxWTm1o'@;
put 'Y3Y6cCw/Jj1eIzZVYipUITZNK3pvOml+MWA7dmBjRnVUTWtaSiZBOjFUWWlPaDcjdyxKNV5le0NFSlF4OnljbmY0dUBERDtGPn05dDFkZStQTGAzc3Bqbmk9WXZfWWtGJV11V1QidzxjcFo+bjZqbkw8U3w1M3IoOEB5Ziwxdjk0QElnRjVgTGlIdEZMPGR6WERYQ0JpUlBeQTljSiRlLllrci5P'@;
put 'eF9MTXhVR3t0akR+aGNTS287Y2JSdmF1Wk47e1hGNVpXODMscVJLNnlmP19xPC45ekh3bCMoTEB3aTtYUnUvQyRVNFhSUHI4fG0vPm1ZKH06KjIzZ1YvWTZgVlJuPzdmKkpqb09SWWN1TE9VfT1ZdDJURTE3dVh6YUU0TFg2KThKUUFjc0gpMWd8KXVXaXlpNiJLK11ya2RsblBeRmFwPlM5aHMh'@;
put 'WStOfiJWJT1tQjNXezEiZVUyL2BZQmh1WjRjeTx1RTwseS8kemF9KjEpen5GK040YVZKSXc3aSFmVz5jfEgoKlo9fi8zRTd9ekNbKXI8Pil1SS5YJFI5N0IrOXVJQGRCYVd0LDJ+Vlk3OTJvd14pX3YxWmxTK184cFtIVlsyP2hYRkxYbnAzNylVVzddPz5LN0NwTVNDWSJJQ1J4RHI4QktkRT9C'@;
put 'YVIsPzwzQSQyTE4pdnZuRW49I3B3Y19wSC9YXi9QVj9aazdobUgjJmoiO0BHRG8+OiVJbyZhXXNxem85JDJ7Ojp+LH14RDZFZFQsMG1VNHp2KVFTbCVRVmdSaEllOksxY0MvczEzdGpLIUMpODk6RG95X2ZEJE8oMzV8I3o/NFApYzAhRjZwZyppKlp8UiJgRVohYUNdW3pdQHQoMz9gNCNCcU1O'@;
put 'K2dOU2NXanY6UEZSMnRuJWQ4P0VkYXg8MV9vWUguXT9SU29mUD8jXTVbP1coWXlzRUZVTSRoRzhFdzNnMW1QOGt5RXw6ViR7al04aiI0dkB9bTMsdWQ+PD19KF0rcS9EQEw0TUU7UyZgYiRaTU9SaGx2ZWpHTWtVd2ZSRDZFLyMrdGloYXY9NmRIcmgoKS43WndhMCh2YDVVW2J9TGlge3h7PUB5'@;
put 'eGgsfSRNO11AZFolci8qd3pIOy93KzZdUlVEOzBrVlB9aH1zXjh7MnQzVVJfeDtXNSFMdXh3enR7W0klX1htWDtVMzhvLlhOL0RlSTk8dWRaLjBNTDp9Y1NmWEkqX1BsWlc3LzBwPTpiT1dlVzZCMX1hdUV3IyVwZjtONjxuJFlOW306W3hkRlZ0P2glY2lDRWlEO2Z5Y1krY35TOUlCNklrclVf'@;
put 'Y216JChaPDd1VkRrXiYle1c0fFQkaiR2TDpXNy5yQH0wcWZeRTxEcXYxQGJLYDVeRi5GYVBqK3NjW3RGOX13KXNZR2VrQkljYHQ4IltuJTxzMnRTbVojSFo4QylsfjQxMWl7Yn1eTHtKQmw7TlYrI21OZ1Yqa3dqTFR2N2VfSHA5RiZnPFF6MWJaUFoxb1l4UitULyFNZUFvc1tnNltefnd+cnpr'@;
put 'cXdNTF1qcGBxUFNEUVIkTV5FRTBNPyFyb3tmfTNmY0dkR3VOR2h0eTlwanEqSUxlL0A1MDs9QVAxM3NrdiYrUHZ4cCUsUnUsPHI7eWF2SyNwRHU/JVREMWN5IndhMjMrcj0pPzw5YTRCJilZNzwzZTd6VVY6by9sM1BeUkpgRmhFcVo9dXZON3ZCejZPUU1RSzY3KVAmZjFCfV85OGZeZSttS3Au'@;
put 'WlhlZ19UdD5VK1JAPW9RVkpsOyhBQlNVKD9GJnN1Wj1XNkpmRXBXeD5ofWwlKlRde3t5PUtsbWRIRS4pVldaJVldVXhaeVhFNnRwMjQ7biZ4fnVDUDtHNEQ+Wzx4dVRnOGxMSiE2Wkshb2I+Mjd9e0hPdWZMKi9pSCJGdj8sMGEjJXNMWmBIekl9P0NUbTUxRixHZE8vOEp4Mlg2SCRFXnU6aWNW'@;
put 'eH1DMnRSa0lGYGA4Qjk7T1M9IU5aLFcjbjpeLyJURDtWRGxxZCFJYEsybmNbMys2WXI7NGQyNFA6Z3BCUHs6PnskOlNoe0AwdXtze0JzPjNaMk43IVg4bDR1N1JEaCRNQSFTTnRWU1B+ZS9Ydjt+P1Z8Vyg0ZlZOMmBTbSFdQltETTdTS0R+dkFKUGxQWUghcXg8IzhvOF5OJVB4cUI9XU9RTyV+'@;
put 'Unc/aXooZml0dFZIJTZ9dHdMeTtjeEJJSXdxIl9GZi9+Nm47JW97XnJ+Q1BaaHRFJmFTSXp2dEEsflMiKjx6UloweFU7VHZVY1pbVytzYHdJI0RuWFJrciY9I2RpIkszJnNpSEdBPm5xT1R2ezhaRCFZQlVgIkl8KiRHMlZlXm8oeWRNOGQ4PHNuUTFmbVY4WHl3VlhtOmkxe1t5Z3wwSHUjPXVp'@;
put 'KjRhT0ZPdzF8fHluazlCQnBwJiN7MzkuWWgqbVVVYElsbyskX2g5NHUxM3A9eUo3K01ibWxlUCtIa0MxVy8yJHNiJW1QVks8NVYsNlVydG4mLzdEZCUpblgmO1RTcyQxQzs2elhMe2JJdTdOejMvfTchVzVEZUR2X08ueW1RYTttbVIvS284W3Y7P2RfZ1Q/WnksK35iQFpVZFAqI0k9XVFieDo8'@;
put 'eF82cDElNHllfVNdQmBoJDMuRU9beFhLZXRsd3xRKSFrSCo1ZDl3bEhlOXpDd2tAKCQjTyl2YWUrREtOQFR4OEBzdUw8X0Z6YTlMIWN+NGJtYFtpbihod3l1djtrRVhlWmdZZiUmIy5nUX5vWCYxKHlLLklDdyNPIT4lYlNENitNMixabywlXnxKW1MueCxzRVs6OVJuZ2NJM1lsRilaPm88YXld'@;
put 'NClZNjRPPH5gInRbc3gvJig9TTxOT1UpPTxeKCMsXVhENUYufTNKW1k5KCpMfEt1PWhxRVp+VExrfVkzRGliZD5DWmUvd2hEWTIrajVPRldKO15hKXBfYyxsQDNpWX1oOlhSTldWUWM3S0hIJGUiUix3UX0rdil8TFp1czVlPGleZl9kWm0+IzxqO1BSTzBycDZLVChpM0t0Jj0xP3gjWGxNLjUy'@;
put 'Wkg6Nmh8R0wzMGIkbFM1WStaN3dRNTwydEl0MVkkdnxCNjNWOFFQUktoayIxTkg5NGl3ZHw2TDxeJTUhVWBHbEtDOGNxPWN9IWIzUiRiayxyPURWVl9GfHlTREJldVpXQyNrI2QkR2s2WkJNN2xWMUohP29DO2Z+UyNTI1tafk1XZFo+dlVjeGNtQ3xuKExHaEdXKldsYE9AcSFLXzNBRyopek48'@;
put 'fnYiMk1SQzk5UFNPUk0hL05Ealp1X1pYbH4zbDZJRj5ZdSE0XVZ0WntRd0EjUyxzV0dRLnwsNXBfSih2XjIyaHttRyZSLE1rM01KZiUjLj9ZQCVOaHBXZUkmfEwrJFhldD1qezE/JGh+aHgsT3FUMEo8QCYlaGRNdHtBMil1MUp7blEjMnJQP0k1dkBwbHFkOUQ+QS8zZF1lOWpJM2U6ZU1xPUhe'@;
put 'cTY2ey9ATntpU3puPE1rflohdjA2WFRFOlslaS5SWU1zemZ5ekV8aT0+bj0zIl0uZUAsVEtKMGluZGltMXQ6SlJ5cHE+eGI+UVF7NE0lfStPQ1J7U2B0O3YpezVxNiRBSDhacnJLfGt6KjR2Nkx4cEcoRVtKK0o/WSFQTntWNDxgVVVRMDVvJEpbZ0FbbEtoYGlWdlA8SytXW1k/UXV+N04ufTla'@;
put 'TGhpPkNiPTtPYHRIezZoM0dUZilkdGtqJWBda1VNbEtBd2JmejcwemhkXUpaeEtGS2N6LjRpISo2fEEwbi8zO3dxLCFrUDpUPn5WY3ZATlNOczpUTElEJEVhTWxRYHAzPkBRRmJoVGFkKWYoVmo/bShyaGgoUGp0c0lsSGdqI11Md3hjSEYidGAlQX5yc1Vnbm1zejoofmhtRFd1Yns0LjQqJmlF'@;
put 'fFMhQ2lTTyNZKHlwc31tQl5mKHU0TXEqNTZpYTIpVGBNOUViay5Zc1gke1IoP0ooYkNMeSY5TXAhWyowaGFfZiZgM3Z4Snd3P1l8YVVYOTpoRTU5QlhTWl52eTh2UCJhUHZbdElVdiptY0NLWGRRM1JGRE4lTXtiJWFdOiRKajd2WzV6Kj42fnd+WEdfbTJ5WnR5eyV+YnJ3KEw2UmZydlhCaiVM'@;
put 'QFokOGxefnA0VyhCNTNRVW9RR1dySSE2YEd7UWpnK1ZhY3RUIV5wSSIhTzp0Kl41WS5JZTpQIXlSKikoOVprLzB8QFs5Y2I+RHorZ0NzX3JSWzV1S3ArTDgmaVUyVXoxN1VUOnN7S306XzwiNTgvZStTQ1p8S2x1ckEmZXdiPlsyJnRrcTZ3SnNLTEwsQklyIyEkTVdkOT8lRmtGUHcmLzVOKikp'@;
put 'YldHanB0NUolLHdrJXc/ZnlANyMiekIpX158ZnslP09aPWhqYEVpPmszLz92NSgzflRqbnZqQFpPTnUyeTUoaWFNRjFySHZnJFJYNiU6TlU8PG9nZTx3SUFIJi54P1RIMXdVIkdxZ1BmWW8kMyk3IXAvNVMrOX1YeF94ayNpPlI/OXVbXkd8eTpVNWlLOixyTzxxWiIwJXk0T3AyYEdUUGkjSkts'@;
put 'Q1p4P21HeWpndT5xOmdSPTAwaVQrKyhJUlhVfGRAbHR1c2okfSskTWhUJjlNZVFaNlhNXU1qMDFKKSUlb218NDxoNWp7Kl8rNUk9LjQ0W1FTbHdYdktGb3FIQnYiV08vYVlDfFclVTtEdlArPD9pciZ9dHldLEVhelVPVm9IMXpjP2JeYS8qZjdeb3lIWTxdRitMajM0ZlRGbGRveSYrMzVtRG1p'@;
put 'NnNIdHpKSCRDM3YyI281NjNuLjhMRS8jJStyZHUxdEdvOkI/R01pIUUoWWNXPyFNOGRAdmFaOmssYVtiKk1SKVgpV18yfnUzQzNFOGosRjNZM2lbPHh6MUpldXlKQnBfeWBaQUdUUTksejZdamU8LjA0cix1VytZKGFNZi8xSG1lNCtSLi9IbXM/YndUIXMjJDFWNX5HV05LJDR6byspYW06N2Z+'@;
put 'KEkuNGwmbXdTU2JsOUkofjspWFVLblZ8QlZkQy9HJlNwVzFJTjBgeVhyZDMhNUQhPH1OZz9Wd1REPCk2UShIT256WkV0YEZLK1BxbCMrZj1LeXo7PXxhVC89STlNUWMiRkBuU3glMWlEOk8+PkM8OV5ZaHZ7SzFtZ0p+Rzt8MFlHNj02OlcjTWVRK11vRno7VEB3P0h7OSVuOV4xPj8zdEdlW1Yl'@;
put 'WFsoVW5kZEhQPWAhcWhfJmAkeDtkVktKR0M+XiQ2cUQ0RWlPMlg3e149USNUNUpycmVaZlV3aGcxdXZaKTAqKDJYQEF0d2dGbmJTMyl+L0Z8ZCwxOipjQ0I9YmI3YnIjc3A6WmdtOGA8ZCMsQHJvY2c6TyI7cCE9e0J0RndYTSxGNkk7XnovJmM3Y1BdPG40L0Z6bmFjazwzPjhFblFOJDgqZ1tH'@;
put 'W1ttVyw5RyVzdGxBOV0uR28iV3ZhKk4rd2R6a0A+QCMmYCYxdilhQHBXN3EpZyxIN0NjJFgwR2FCXUJbazZLNX5BSi87dChYflNpSjYufi5ZOnc6JWk2YHE6USwsdSQ6MXg6MGBhLkkrRXt3bX57aC5QZzBMOzk1djc0RDYzUWlvUiQwJi84dGVbYD1WJWlufC9qM2VQKV9gXTUlWUl+ezg2YEpk'@;
put 'bDYqNk5tXSs3JGVzbng5Xl45eHNdNz0kP0hpWHBrQGlaIz5gdzsuZERYfl04OklxRyYwbHNOM3E+UFlfWFdQP0VOWlVufEtCQVFReXNHanhDcjh5NjVOQ0AvNDklKGUrS0g4UU9sKGJxakptYWBVMEMpT3hgLlgqb3N2WiVSQ2FmPj5zZ0kzKHt1Uzg6U3d6RkoxNHpNKS5qZGBZJCMkJVo5Tj8l'@;
put 'TmgsbENwLDhHRXBTQ3lhbDA+ZDRZOTJlL0RsdHZwK0Z+QEslI3xgO1BoRjwqeDtObFplbmU6X3FCXy5WNGd5XT0ySjVdYEs4TENsUCJoRlI9bXp5WjwwQFRqN3M4fWBXRi5dLmJJXW9vVDQjL1VULkNUKFNtNmJ2XVpdRFdlZU1ELF5LNTovXSRpQDhVWlI1eE9KSG9Ce2hIUjhnOzFBOH4yRywm'@;
put 'W2Q3bUY3Jm50eFU8UD51Ty5xUGJxLyhYUl1RJDRSJSpvWSNoOzVQaWQvKzNSSkcoPks8Xj11N1pnR0teRFssfkEyXTZ4UntsfWVyMnFjeGY3TVpucSN2K1FsJXUsQzsrLF5AaGNiamU9enRuYSR2TDdoNEsuSGZPeGt0ciNfXTwoSDtlMG5sP0lWP1swRiIzaGJ4VkVfKW89dmJqVDcqbVAiIXgl'@;
put 'biNCaFU5anRqaEBuVHx9TXlXRng5O2VnWzhLNSRTcyhZNUh4bTNyPDghIyRlOC4wPHhbcG5gNWxZbEBDXXVbQkUxOnVNQGVCZVF7N1g5Tm06aDdfUGVdMiVrW2cyKzBpJEBRcXtMZEQ4KHp8Uyp9TUhKZUVSQ3piNmosfThaPk1XY0JPZ1FRYERCOnhHY0xYUSFWdT9NJD0oYV1yR3U3WWQxQ2FF'@;
put 'SCpbTkh8SzRoOmR9eHZLTGhycGZqbTopdWtDVjg6O35uN0tHOnZBYmE+TUdCYUxsaEpTO1M/SFE+Pzk1W3A7JT4xOUl8Vm5UU1F6NWZ6YTlEc2Nfa2loOkklc0tNfGcxRGtHLEglbl1XfjokU15BLFZkXlFgRUVjPGk5Mit+WGhkKjFFaEI8TFhtWFt2PGhxdy8xRjx0WFYhXmpmYFJKTzxdME4r'@;
put 'WjJ2MHxqOzFNRj5OYms/eEIyVzE0KixSQ3FScnxhdWNWejsyRDdmJHZOUDwvRFVJXXQuJUJZNU8iWEFjailoXmBAc1RMeExlb0VzM3UuPmRXWzpgVCU7KHtbQz1BZV9PPT8jPEtMa1okKztJKl1OJGFQTSJxZm4rRHc9cEUkfXlWSCJbKj1ZQEE8X1h6Lz4sJT1ubU95RGFdPUdeNmhIfXB5ZSYm'@;
put 'aC54Z2oyajN6eS9AbXRMMVltTj9NezVFSyshcGhRJGgxbTtxWCUyMS9LOHc2cHlkfmV8P1kkZmNqN293bHJSQjMmMFgmSnJmSEhiOllqezh1cipYKzhRJE4lTmZ4dU9QJmkhfil7XjJ0WTN4RGc3WTBXKjdHM05iWSRnW11jKCRqeF9rV011PjAuRlFdaiMoVUZMIlZ0MHUibzdkPlFzbDtCVjlh'@;
put 'Py4uQFZsOU47N0dhJTs5W0hbc0dwZzcmQ3NlKmI+UWpnTFNTWEVMNFdlVmBlO2BxMyV7bVJNbUU+LHhdSjE+eUNHLzx0RCNwSDBOXjY2fjtFZFdWRUR5UX1jfUAoakJraFQhSXR0XilbKHhKc0BKcm4wYn1lX1J4LzI3eHttc0h2M3MiYWJEa0NgUnd4NktwYFEqcGReOjwxO25CKSM7YmN3Z31R'@;
put 'cDV3K014Yls4K3hlK3I5JWR7M3dTfWYwUko8QT0zPmYrd0BEfnVPO2preHNfOiNyPHV3LjpLVEx0LHEhNGY1ZDhdMXJJLkxUQTFZNXJ3PEltMXBDMTl5SFhyPUJUP19bL2smdj9jZCUlMzFyOmhlNV89WykkdXIlWml9fmV5W0JtKEY4Y2BZNUNCKll3PHw3aT5GSTBCcDFNK3tbJCkrdVo1VjxL'@;
put 'XWxeYVE4KEpidmVFcWtAXU0qYmddbVtKPiI1UytocF1RK11UMDRve3Q5aW88RnsvX1NvKSk8al8pOj5ofDgwb3l4Rl9FWHRNTlZ1KVk6QTdbfElPdkxrXWd1cG49cnNyVTNdTUV5SnZnenJgfFBYOT07O2hERmc/OTBxR0t6IXlAXUZRdyxsN05DQiNCbjg9N2FzPUcqKypMeVMrM1skPFkzNlVk'@;
put 'T1AyWkE3MGpKRDovL2AhUUVjeHUhRWtAaVYofjhaUiMoUUNuRkl0UXRpZSxWKVEsM3YkaFVJZl05MS4kc19QIU82VGkuVEtpYTMkfkA3RGNLNXokY11Xczt2UH40Uj8xSSYxcX4pal5QKkdsWW1WXT86WVphXXt1WzRiPil+OVBiKXNJeVAkb3kqOXZsRyYsPmlmLnZ5XjF3OnZOJEQjOnpWP3Ew'@;
put 'MllSLC8jfS9AJnd9ezZRQkJTIUA5Km5JI15HRmt4bS88bzlfNFdnWE0yJnAxa2AlJTR0QmZjKk44KFRGMU5BVDAlQE9LNHd+bCpSRzhDZCxzR0FHXT9DLldpT0t5dFpde1AlN0xCT056KkQzMUlXOS95Ki9mSzk5bHpYSTdhX2FrU3M/MUUofGo6JDs5VVk0ZzFoSl5QZ3dHXi8+L0c4akgjJEJX'@;
put 'enM0aXFuNTNHRWRLUC9ScTdxbjdEQiorTE8zbHUhQUIyUixbaHZNYXUwcHUoN3N+eTg1NTBARkNwPDN0TXhXZGxWQz4hZEIpemY5RSlAdGQ+fUdpdX1VQUcoS0Q/RXZUdytVeG9tZGpZVXtOZ3xrODFKd3l1UDc0RUVJMHw5eCVHO2hDbmtuXmZDY151TnQydFZiMntvJjtbP2R8XyVVYHsrTSwv'@;
put 'fTZvdU5XQD1wO0dPPFQ6QiFtan15cHErPnJzWipOMVY0eVl0YHtfdUZHZEU3bilFVUJQQnRiMkpUMH1gPT5rXWolWFA/P11fVTEqRHlnbVYza0Vue1c9M0l+SVpLQEBVfWpIL1FJWUolWnNtVlkqIm96Zy80VW9kPTNtQSFRJWs4RTVtRjImSVJMaVhZOCRLUDhNRFo9bHk8VEJYbHhAQnR6MC85'@;
put 'Sy9CMkVSMG00SGA9V15JRXRfJSl2R2gjV117Ry5mQ24uSm9RPEh9QVdpalN3cER1KTF0aWt+ekZfVjs9Q3FQQ3pELiY5RWNhbE1Oa3shZ0thQylWcV0lKjhdWjQhLEBrPkRkTixZMFpePi9LZll1LGQ6OUBRVHVQLytmXmApbGYxWGNlNWYuLkU4QEhTYjJ+MlEjaC85QGshVGFOPEAuVHhbN147'@;
put 'Y3A5MGViKz0zPiU2cD5DSWwlfHE2Uz4jTCNGX3QqWH1Le1YuR2NKIypTKUJiblQvaT80IyNoV1JbXUlNZH45KUZfbjNwUEE8bSVIa25raSYkcDlDfSE0MTs8bXlEQGNbUCllfWFdW0BiYm9wZnFeODs5PE17ISYuWmNWcVBjVGI2UyRHeHJuKEtVOH5XJkhadEldW3E7WnUlIkwvOykqdjl7YH0z'@;
put 'bXBUWjh6KEJOVjN2aioyPk5fOF47Y1JpazszfUJsJGJ0Wl57eVImTE8/SDZ8SHEjSGpFbHNUWldMd3l1V2tbZXpYNFJBb2tfdWtJM2JlXkFobGtrc3EmWzoiezgjL1s/NE5wVVVBVkdqWksvM1F3SmZOZT16NGxHOTBXNUIjJVo4aTpEb0NpO1tTXUViRzMvJkYmWkp0V0ZtSmZ9O3NQfFtLeUAz'@;
put 'Uyg1NDlyWDh7bVh+ZEMzcjp6Rj5AQHxmMzdwbzRLXnIvJkpxfTxBW3JiamslXTd9PjlUeUx9eHBVTjN9eGgrW2lUIjFhO2pzLERRfXhGbGU9fVMuOTxpfEpZJm94RlhzJTgjfVBdbXx1XjBvQjE6RUF9Q3ppZTpoLClHLkVsUW8jaSEkTTdqMl5RUlUwb3A5czhaOlZ0S308LCh1Qi4uOnJvT1F4'@;
put 'USt1SzhCOkxdUHNHST1GcStfNjY9Vj8ofXRiS0VoKiI/K2lDMX0qMXI5bipicHtdTDMiS3MwSEVVZjkzIn5mcXIlLmpeNVNfciMpMmh9aEVxV14oLFtIYGBMd29CZm5USGEpbUJUSF50KkFkQiNMS0hsQWhWNTFfdFpZWn17czJhMjF8fHU1VFoqVT08bl1jc2o3MndAUV81WlFafSM+bVY0XzlE'@;
put 'MS89cX0lX1IyYGApb3NMVkJqJmdUWS5vM1s/PG9VQDNxcno2QixwPDB0R0Zud0psQHVSWWdSUzpwJTgySnRzU1tTQmRDMSNvWnFTYypXVS9BJjA/dCFRZDd3OHNHanRAL1Q9cytVZ2kvOX0wMWNaZUkmRT1QYzI0bWMzdzVjZFZVP3x8ciZmc2ZtUU9TMEBuMjdZWFRMb3VjRmVtWUx0Qm58a2w1'@;
put 'WnJVQExPIiVnb3Vnc1hnOjh4cGYoPSpoUWZpVFcuTkhvXkJgKDg/aExhMS9hMTpoRTVdQkBVKE41a2w3LHhLNkZDTDdRVj4qTFUsTlYza1R0VUt2RCZMMig/Mjx3ejQuVDM+dEQ+MChIQ3t0VkRPZj1aS2pDNml1MX5GZmN4V09KSClhYzFOTjU6MHtHMCJkTDZJSXV6Y1Ema1U4MGZ9cyl6WCY/'@;
put 'Zj42fSNTTUFKXypoU1NGYXB8ezBbUil0bDdIUTcpJUJkbk4rZ3lfXUtGRGRDfi92W0k8UX1uNVswNC95althXzxZZlZIcn1CZlc7anJCOFQ6YntEe25daFZ4PldwSTxBMDh8b2hRcUUqZ0REWTVve01QbkJ4OCtHOilGV0RIQU15Pz8wLHV9PjVbQ3FAIVh9O141Nl51eVo1NGp0PmB+ZWtVRFY7'@;
put 'T05uL0kuT0lHP3QqSC5zQjRNZj1XMTNkc2p1ZnNiVTFSbSh3UkdWaUNQclcvZCskLEM/flZ1cmE0KFhDUVgvV3pldV54ZVN1Pl95KEQmby8mdH08Jlo5MCtXYEgjSWlbOks3NVM7PjNTdXNYU31yUEl9JXd0QSZeSFZCNUMsbm9jX3Blbz9DWkVSUkVRRW9idjhASUo1QlBXc21RRSsoVkJeaC5o'@;
put 'dUIpclBGLyp0QyRfK0VSRXluPUVMYWV+Y2RnXis0T1ZTI1YlPkQ+SH5CfXJxbGVxbmQ7V2VFSyZbMkJxV09fdzcvfCk0cSFvd25GXkpxQ3FmenY0WUYyQTdRZHN9SVYqfDIpQVhGTnFDQnVub2AmfiM1ZFNNSF97WH16bUN9UC5aQjhBRWNfIXJ9IkJfe2Q+TSZGcWwoUkVucSJAJnxiL2g6VlJw'@;
put 'Qj8mPjkrVHpMPm07fFFTIzErfUA0InB8dGdzYkNDP0lPRylGcWZ8aldRVCM9IVJtKGJ9az54d2tLdltQWzBsVytSU31fVT4kfjdadDBkXm4iTkU6MWghczZoODMwaz1tPWJ8YlRqNG5GbFR8Q29gVFhdQzwqfFhIMDpKX0Y8YSVuNVdDVj03YkgpdW03TWguNlZralA4XmgzWm1LbkFHYkV4cDVO'@;
put 'SzZDRCpuQlpEVl5jMHdNX1N1Z1lhIzpjUGM0YUIjQFAuWWg2Y1BGR10pQXF8Z15zQS4pSXYoUChBXz1ifGUzL3BgR0pWWDU2SDdgPiRtZHVpX15TWSUzJTZdN31OOU5efDhlfW9TU0JRM1ZUcl9CYzxRQn1iW2IhcWUzMjpmWy5xXlYkN1dXejleQDg3OCUmKVFWYDhtckYkVilLUXE3LEh5bmtQ'@;
put 'R05DV1t6cm5RYmt6XSldQ15RZzg7Q0w/M1NSMFY1MixSWlhMfD8zWDY5YHw8RSpNTENRUD5+cU8sJEk7aTdyVF8xb0N1NTV0TFA5IlprPitWSTlgfURMR10sdlIjZExLP3lmSipLI3RMRzdqK3pVKX16TG85ZlAzb31HSlZvfkpmQmU2Pj1GYGBWVzNbNlM2UW9tQVBDJTgzVlhIKyxHRixuY3cu'@;
put 'O3VRSzBHa0hlWnJjdWhEWFRWW2U6QD9bYnF2OUI+ZGBxN1AlaFI7Z2E4WS88ZSs6JHYvZUs4dnhGN1BPR2ZKUEdmVjd6Q3pPL21WOFMyKzAhNGFVLC87XTRMQyVPMyJtPClaVXBaYHksKW1tSmk7ZX47WFMsPVtmcFhxOXt8TDsqRS8oJjJ8PFtPSnNUcmVedXIzVkJhQDhxIzVtNHMhJCNVdloq'@;
put 'dFJySzBUaWpmW1YxQ1VgN0R6RT8mU1N1clVVUS8lZ15bNSF7UzEiVU9AT0Z7IVhyISk2NVY8T11scTBrZnUvSFF3R2ZMfF48X1tSdHopfW1wOl11Sk5lQHAiN0puSlFCNjg3X3FjMi5tWm9MNXxUUUhBOCY0NDlCQF9FcEBseCMzakBpPylLPTQjbnI7YFpiSnR8ZnFfN3RaO0p0el5ROy49ODg0'@;
put 'TlJ0c013WjkjdlNsUkptY35RbUBVWDcqUm8+Vzg0MUVoQF9fPld2OkxOPlBCZTVrPyFuZiVQVittOyQiVTAkK3VNJUBtOWUwMzpzRj9zZSpILjNTUEF6UTUkTi8jWXJ3OSN6Iy5oQ2pDQk5LcVRJS2hTMT00UF5FSFMycy9GQ0ZLYnNVfj1VTXVsdGEyUSNnND1QSXVjZUt1TTdgXyZtajtQfWwl'@;
put 'fX0zJiVXfiEsISJpKFFPcEJySSRlMFEvKyRsTT0mdSt1e08pSjtOJWJwemZVZHZVc1h7VSMrNEBbYzY+fDQsOmZBUy9lVzB5fX55byYzVl5yVWQyLyRiJk5ZM2prITFOOjJdQT5zb019Tn01Sk1qRThYbFhRRXpmcSwsLzhKemRgJVpAe0d4LG58X1F3QzN7NyNvVitsMGlrLzA3LCtNSWAyfjhg'@;
put 'RDc3NzMyT21MLE5TRVg4cnUzeyRmNT9oVWR2M0JmNUVfcW1ePWtbaHFicXVGemhJWypJIXA0cDozbCpCcWZLKSlnKmJANVUpeyRMOH1MW1szU0t8eSIzZSpiKWBiU21JcFo1JFU5ZTVUY1VsZld5ZlJgPTlAdG81TG5yLkZCLDxIY2kwZG04fDB2YWwvbDdEc1sqMUBjVzhKXzZTXVM9YFBGQjlW'@;
put 'O3R8alcqdm82ci5kW15KbnB0eFc3anpnJUBkT0ZSOCh8cWgjbiEzL1FnWHBxXnx9RCslW3VUYCVMRjN1Lj1EYDJdNXtmUU91LyxqbDE5TCRfJF90I0c1IiRdelNHclN8LHk1fEM9XT1wXiRXdHhGdiNxMDI5QWpLd3cwXWVQZlldQlBuNDFSfCxTYClHOC4+P0MobldnOmJ5TD8lWF1HPnBBNT1P'@;
put 'Xmk5enAsRGV7SSVsbjVJODl0UUN1SkhGfms+a0A0fmNXMTdZKEBnSlZWVEojQzQ7OmIkcXpueSFZKUdrNkBYbyVtQWUuYH5SVy5+WyhjalNENEJaOUBTO3J6alc2N2p6Oj1jOnA0eSY2Q2NBdHM8a0RNTnR8ZngsZkgoYHN8XipHIyJvaXlqeVZMV1U3SzJkamRBemJUKmR9WGRBdGwmcH1YO0Y8'@;
put 'O2xoKVp9NVlgMUZbRz5wfVskS2tnN1hJWDdYey5LMTlVPFciPWM8VTl9Q0F5eFcibUoqMXZeP3NSPVEwRntfeUNYUiwxVFE4MXxGNm9bWzU0ZUxYViY0LktCQFBWUVZHY1BdLkx+JFIrcnxRWnlIeSsjOSZrTGhrPSpUbVBCdHNVTTAiPSY8YEZdfixMWU8lRUFEJV4hTD1VZlFPKEtmKn4rSD1Y'@;
put 'ITtfMy9ZNmVqUzxvVzJJcGh+emoxeFhbXV44cVoqMXZSYHI0fnY/eGAlImBTPj10cUAmWko/UT8lQDNdUX5IWlg0Oi9dalg1c295Z0hrWnpMV0h7YyxLQlB5Z09FUG40TGJRUltQfFVfWlJWV3g/MGJibnd8KTFpczFXQkI+TkB4Y1hoc3hDTWMmPC5JTD43eU5FQTJTK0lGWV9fej1rRGpDcXFh'@;
put 'L3BCeGQiJEhrOkBAdD0mVC5uLHU1Q3dNfWVTODFZOk59alQ5Tlp7bVRhd2Q1Klk1byJ9cEZmI0RtQSZycWVAcyVzJC82RDV8KD05SH5mVzlgfHZGK2F3TjU/PF9oZ1QxRSgzYTsrYSJGYitCdzw8ZUpibkYudF5FJn08UilObEU8WGd2OHB0c2VKNEA0VklfKTxzbVhEJlhzfntHVzp8U3VQZCld'@;
put 'eT48Oi5xZC5jW2FdK2Yrfk8vflVDaU1eUDhPMzJIN0NLQGxWK3x6Yig0SzNedWlvaiViJUM0RiF8cE0jdFVjS2o8R15Xa15vIkUlL2A8YExSSl5gQzUvelN2QkAlMXVpPTIwOmhwa1dafTYuRF1WNkc1U3ArR305b1hZNXh1ZVNocDFFb0RhWntUQ0hZdy46U1tbRUlMUDpmOXVpKzsqNFNXRUM9'@;
put 'JUtNWm5GSSIoNlB+b2E+c1ptMC5aa2wxP1NAI3Z0aClKdipsIVlYZ0chc3U1ejgqTzQsKis5YU1mNXU9ekd6PEZtWip+bjZUIyxrZGdDKmY5ZDl0aSplWCE8W0s0XldEWGxXPHQiQTVzc31ZNHZ0bmJMZjV1dUY/MlVEP3E9NVIzUkM7T3Y3YSxKdTl2dDcqTyQsUislPXcvWmwubnsuPSxiOWU7'@;
put 'I0kuV0Rnaih1d2c1SXhvRlRjdD5oQnR9V0krPyVPWipjI2RnSiZPSGU9cl1LOWU9bV5ENGByWSQ5V24mfSU7ZEomJXFYOGwxd0NVMzdAWD4hdFd7djhqbSt9WTRXNTh9fUNYKTBfeSZ8a0ZoNiN6WypnenQ8fSl7Uy9geXJMPl1vOkJyOlc9KzxjbDc+TCNCejdjaWUrKyVRIiRIODFSXyldVHFi'@;
put 'I29mUnIsJXpsSjcvZSRFXzZiOy96LjUpYVQ0QjJJKGIia0NVKVZTVz4jZVRKYHA0SFdCRFZZWnorWFpQbT1USjBFdEM0M0hPWy40RnsmIjkoJFdSXS9ONGRycG4/XTVubClnYWc5eVldV0VheFo+Xiw9JChyImd0K3N3KWspZ29OS0VzdnF2dncpa1dTczJINXNxPiRoeCkqfT9KUk5ZM1JOc2lz'@;
put 'JW1zbDU7SDFpSVtwZ3BqN1RofjU/WVF4KikyMio4fl9+JFN7R3s6YT5GVCsodkVzP1ZELkJ4NVtWcEEzZG43YkAoLGo7PzUiS056Rn1UXjdidmNNYypzNWxbe01rdkxyUjEkOl9GfG4kSS9gXzJeS3xLMSQ+aXRCfVI4TVZ4QkI+bmM1OGsraENSQkM9IS5pXlZifkZGZG1CUkt3Oz9qP0xYZV1r'@;
put 'P3kmJSsiKj5wcnEmY2NrUiVIQkZbfUkoWE9IOEtFdFQlJU5bNDBEIjJoZndVbyMjK2JubHBUcm52c2clNyVQJnFvI2Eqc2sqYDc7WVJ5Uk0xTEpLYlUyR1o3VHBSKDBgMXJCQTNUbDMjMFNubixqQVVyQlNPW0V2Njc0Mz5pOmE+JlNNRGh8PFQzMSIpfkoiRUIyYzo1MWlkXjhGNGNQeSo8VShD'@;
put 'cngoSkhwIm02czZZOzZQbjliKVhjfSNjMml7emEuaWdCZ0FSYGN7dExCcXx4Lj9CTkUzZ3NxQTRqamcrL3o0dUJVVXlRcHFgJVFKXTl2Un1PV21ffjxJbmpnRFMub0JPRCVUSjd8KlQ9JjF9QDR+cGB0d18xXXZCRzg7PDtFfkNWPVBTaVtPaVNzYVVoNHlXZHVlJk9IWmBgLl8hMC50S0gwWWc7'@;
put 'QEZuVnN1Tzcob1hoW3g3Ui88VF0sZzVxNXksa2IodGNeX1c2WFJRa0l7Qy4yNl18bzQ0ImZFSHNwSEZxYXtJKFV7dmJaWXwmUVN8M3FSe2h0YSEvaUFacVslayZPLmpDMls3bSFiRiFQVFImP0NyNXpSOWope0lDUlgpXzV2bS96Tn50T15FYHhUUEdCJio9WT1hLEowMm4+ZFNxWixYMHY7QlFi'@;
put 'Zzs7OjdVbF85MWlbNChyQmZeYzo1MSM9cWQuc3s9Tjc8PU5YPXsmQmEhd0BvY1k8XzZJSHhWIW1mKENMTm83cHR9b29sdjxqJj1kVEU0dThvdT4+eEc6QVtFKHxoZlFbYl4wbFRmTnA/U3FmWmRiL2g0NVUobEFZeDFfaGJIak9CN3oxQFUvb3tULndhQ3pDbnRaI1FNS0VgcGlkeHBhPnlPaX5L'@;
put 'RXB0ZXs+JT1ObDpjYlBPPH1RL1khZ2RWaHZ1W25jQ292djhHZ1NvZjQrWlBPbyRucyJMYD07cEhRRXMqVHY6RX1pMkdzPF1aUj4/e0hkLG9kNENGZG4zN0dXY11bODFwRGhibCNTO0FjRX19VmwmMXNFYzBEe3FjTnZeJWdOWWI9NlhbY059aH41QGdZQ1lyZCF2QEtIVmdGSn5SLiUiPilyYls2'@;
put 'NVgwdThGQiY7YS5bWkdsQS40djpzcEtgIVsxXkVkbmp5KS9gdW9NQmRmTXh1dlgwaFdWR2V0e1RYbFZXI0wjVzhdX20rciNOPitkOkxEUXlzLjx0ayZJfk5jYUJLOVNzVlIhI1l4LllFRFdjWyRRSExhbXg3ZEFmW3dwTzp0bXZ4WlYwM2NBZjVZMERRR0lSOWNteCF1KVdBYEBUX29bd1E1Xihj'@;
put 'WXZpT01rIVMvIkpyJWQ1KG5GaVdrVERQW3JSIk8ybTYmP3YpYmU7fnEoPSlEJDh1UFMveE1jSFIxZHFDNyYmelhnNUlKOiJZci5jZSM/QlVqaXFBKklsJW03a3tGP1l+cHQwUDFZP3U4cF1qcTZrfGVlNW5qSEtwKVU4O0Q6a1hPeFkja0JRNkdrVGBQXW9BZiNkbGdZNnM9IzFGWFR1LHVPRSpv'@;
put 'eTAmeD4kfGByYWIuKjBDWCJuP315JCQpMmh8WTU+JmN7ZGU2Xj5RfThVUShiSmluRHtjMiUuNEhDJm4leCR5YVZtM1B0ezdKdkt9SyNtM1FTOCJ9PHFbOHRZVjIvb0cxQ004Lj5YOWlzaFg+QFlAWzZmODxWZyJEJkVjXWA0ZCk8SnxwZF0wc2RdMkBoITdvKnswRz1GRGZjRm51c1YmRH5eTHRB'@;
put 'Jjk6NClKZjU0W0AxTDJkWjcjSjBML2BoTjEjflpYLD5rLEAhYkUkQ3IiU29HSkJweHNpU2lTaVNpV1JMITRJRmY1ZEBZOnRdPlVpKC9yVStEK0QrREx3RENQRUx3W3VRSGNeWEtATTlgeTtQVW9jeVo4IyZmfSEqb2tDZDRPbnhVVTwhSCM7O3U6Mm9TczRIODF7Vmg5dyZXJS5gIjgmT09rLy5Y'@;
put 'RTAhQE5TS1IrWEcoXyw8cjA1NkAvQiNbW35fITcsR1FMd2NNVlYyX2MmY0ZaNENmX3xWZ144MnZXSF4/WUtzcDkla1B6OHwzJT1qVi4pZD4yWzNzTVA4UXNwZUk1S3dXfkNWSD9yR2pkNEwhfWhTK3h0fXFSN0BgdyxWUU1waCF+P3hRMEI1OFtPL2V9SEFjdSpgcWJPRTsrPFN0Jj9+fTFXPmQo'@;
put 'Wz5taWxYPiJka3B1fnR3JkxfbU5RKVtOUS4/JWpvITUvfEE1MEp3KU9+ekFjcFlLNlN2eWQ2JGFKZnBqb1dacCZiaCw2UC5Cc1JyQVRxVCNPSSU6XXNvJj19czZvJj02Z1E6eHEhIiFfbjguXVNVWFJfVnhiQkgmV0JgL2Aqfnt4NjM4RXksbjpnJUlAMU1IcmtEOTxPOnghcSRYMXxvYCI5Xldl'@;
put 'YnpjVVdaI29BKyhBMXQ+XzZ6VF10Sz5mfUIyNnM0PH1reyFlRkgjaHJTe0RHOEs0JGdoYWVaNTUsWV91NlM9P2RaOSpSN1tZOm9yQWo1TzB8TyRZdDR+dCFHTHVbeiVGQS40WXtRK1N4Z1kscjFySCxCQSllTEtiZXUxTHY6amBFRUUyZTZTWDMvJkclRC5faVFvNzJHTmkmdHBnRjBMWSMoV0NB'@;
put 'U34xKSxbaEArak48dXJ0WXxZWXpIUFhXN1lDYlJvbiNHaXVdV1s+XnF9SU8hKmJTRD5FXklBLldlYFE7VD9yPnpzL3Vbc3t9Q1QsZTNnPnczek9oeTtwVHBFOkc7azs9NSRxLiNGOHg8NGIiclJybkVzfSIyd0lQX0JuRH1eYChdbjlNX2RgZE8udX1WeExMSGhYMHhgQzs4QnRiRkwyWWEwbDs8'@;
put 'T0hnPkV3KTMmbyo4fjpUJEIzKTVCMGl+JmhCM3dJLjh5ZXtaQjMrLjw9ZXt7LyYvLmNZVnZsPkQ5Zyslcjt+NHBKPWk5bFM6WWp3Q0IxdnhOTUplYk9NTyRoNzsiS2JiUyFua2I0Mi4zInAzNU0zcm5FfmpBVGFdcFRteVIrRFY/Syw+WGtQRnx9MXciMVpeN08vR1BlP3l9T0k2TkgpRGchZlZx'@;
put 'MnNIfmNeMmU2biklTGt3dHkrSWFEd3chdiM/NFE2Vn1WWHNNcyldTTw8bDw7KjomW0ZePm9+e2o2cS4peFsxZDR4PikwMCRvJXAlK2QifDtUL2RMNEEreUdQSmNIJXdpOSoqcVhKXTM2NmFyMGIxcko+TzJAQnNvQ213cVpnfHAmfElSfl1UYj9HcU5YTVlASV8vYDxTKXUySSlBKzw4KUhDdmVv'@;
put 'bSZYbixxKjFkRSRrQ1MuemJDTC5zWVIya1NaSn5UTVtOLnIrYnZnU1ZOK2s3WFIybFM8NG14MXQrcWY/bnk0US5PJTBDe1dGJipbKiYrfE1SaCQyaU9+JUcyYWE/Uig4Y1Qpcmh1NVQoUExxbmdXSkVXTm8oV1hVO2UmO0xPd0hOZERmTVpnbHltMVpqWzZbeVQqPHddNVNJc0FlTzlBXVAvbyM+'@;
put 'OSZ9MmslaSlLfnVyJVkmYCo8IkhxMl0sTio5JDA9eSlGaGJ8NTlhQmI/O2FrU3IpXV9ofGYmLy4wfnRJYnx2T2dUR29CNls/QztvV1B5Tk9ZWytaN0piVUBNLnUmKj1hZUFTQlN5YEhSOjlId3ZsLGBwOywkLGxXaXpvSUIlLyo4b3ZCcjZ4UDdJc0RCYG9CU21MOzh8NyN+KStMN09DdXEySDZs'@;
put 'cT8lcTteSmw9TlZwUTouPXU0PU53bzl6Wy8pQzlXNzAqZk9EO29PUDJofWp9T2ZSdSNtRHRGMzluUXFZdmdlJF47JFYkcThKVy9FdXAzTjZvLkZtZDRxczdyc31DS0dJTzNDL24kSTA1WzwlWEUhZzNVRzBkYT5tMDRbVyw1UzYuSX1dLFAiVSlWVDZsSnl8NltJcVVRI3xNPm0wRG9jbmZ7TnM+'@;
put 'X15gVTFoNytbTTFIUT9ndylSKkpsL2ZwWy5FNFcrbitPbVZvLH5tMU11NCw4OEc8VUskR00lLyk1Ml0la1VnKzkubWs8I1M2NE5OL045XW10PXo3cD0yPUt1NEtKXnVsMzsyezYmTSJ4e3RCRGl4RHVYbEZlUy5aUW5bPzpGJkkyNEg0VUN1ZmAhRnpWMUNQZjBVIyoibCVYInJkdVMoOSV5ZTs5'@;
put 'QXgsbz89aXlrMFc9b3MwYGIpQD1+dysuQ3tiSmhEbVlIUGxpKE1NdmVzYTRwKiVAbUVaRVpFWkV3UG02TFY5fV9RKChvKUg6OlJsOX1PT2VRZVFlRip5PyF8IWAyJSs8Wjk6YV9NNDdSRl1MRWZ5ZC8kJXldd0VOSDVHYUVZMW1HP1ZSSiEybiEoXnQ8QiZEZCFvRH1PL2RTNlV3LmpDaWQ0M3w0'@;
put 'VzojOGZGfTRXKHEock83bHBXSkIwem18USR8clReels3by8qOCtjajZsOj9nNGR9XUplcUFOLmlROSluc2VOMlZbNH5yd2VzNzNqfVdQVXlXfjwvOTpmeDtWRV5sUTclWjtSamN2PnI3NjpwQmZdRURHcz1VMDooRjY5bHNuQDB+fDV6TV9SSS5kUDwyMVE4el5gZGohTjFAe142VCxhUVNEXS9L'@;
put 'KUJxJEJgTDosZy9vb1Z1Z2FVP0VwVzZNXVtjaDI6OlVwJVpjK09vUDw4fU1WLlAvdD5EUF1tL1RlZkI0IUA+RWRjKXNlTllVW1pSTFE4QnMvT28oZ2IhSj9bNnplV30sJHxVN29rNz1fJCx1PzRKRndNZnJRYC9LPkJpLiV3V3JnMChVW2ZPL0h5ekljLExzfSUzaFs6Pil8dGJbJnxUT3BCYjNl'@;
put 'O0dGUj42WnYxLFlwfEQ8WE8lSnhLSGBodW0uZXFmTGZEaC9pYnAlOkp8ciRIOFdUS2FoQkhGVkRDYy5jbCVXWl04c29pPGZYVkpbJlV3a09Dfl9FY2RFaiVnZVUleWNZS3VrdFdRX0tFby5AfEhzVlJsK0lwSzwkS1B+ND5CTHl2VVhGPm1yTFV2ZFszYF0yK2FQP2MvenI2TDwmfH5dY14pNnE2'@;
put 'M0xIQ29yTHR8aFBjS2x+KTUvNztWJT4kaWlTaSFDeHJ1e094e0UwTkgjPUEyfnhyZVVmWERfe0diR1JjPSt1N3p+RF1ZW1U9XVA6MiRQMjswYiVkP2RqKHUwW3ZXJSlpc1E0Lmo7SlJMZyxkVih8Qn5AJlB8ck99VUM3T08+Rl4xKTgxb0dNNEMjalJBNFJ3anpCcUlZfl9uQHZeXXFMc1pELkM1'@;
put 'Rz1UfkppI0I0OWdyfEczXU5SREw7dzBQNjFeQ3BUR2g0X19APGsqMVYhLH5ncSZ5Tl0sW3pXNjlqcmU6cHYheypyOGBlSkVIMFRvTX0kK316Ik5vbDM9UlRtMUdRaXN7WkJiQyhbOlhuSiUxUSsqVWAsZkVTMk5kbXN9YF9ZSn5WPTple3kxI1lBcEhPR3J+M35rK3d0YF9mO2BqQFgpMD9SbzBn'@;
put 'dmw7YGIvNEI1Lm0sNVtRZ2x3Z2B6NH1VXlBRWXo4WVVoXW8zVEpQYVkqd0VSQEgja3YjI3VkOXc7R1MvQSEjdGI9MzxAVCssJl90eTsjXm1GWl4qQ0JLcFEuWkUuRztRLDRTVm0/NVhfSzl8R3w6cSRSandycVIvKElJTzJRQXwmSllHOTVueUdCanQvRHpsQWp0eWVjPHNDI15LYSUhXzxmTjRi'@;
put 'K212XV43Uys+OVMmbE0jJjA7M0ZZKS9HVD03OnkvR0p4Jjw3SCVhZ3h0KilzbmFbJCpKXjp7Um4xRD94VG4ldik3X1EqKi9LREViPH1hUjVCbHwxaSR3d0wjc2RFWGkqTm4xXXl8UjxRUEdMPk9PT2huMTdueFQ5ZjRHJWFCUitKQ05GRSVheEJdeHZ6LypSOnNTe1kqWj0/SWxDMVZHTTo6fUBQ'@;
put 'aGBaWGVYIXN+d0sqWUljP2RZLD80PTRrIS8vXSxGSWghWS8qVi9pLC5Pb1glc0JFe2EhaE46VmQ9OTVjcGJgOzhfdFBVYEAqSUkmfGBpQGtvfiZJcSlpfiZJL1JpfiZJKWlYYyFzaEV9KGgoIVloLyFzaEVGRyNoSnVPaGI0O2Z1R31seEJ3LFE8NE9LNm1zUGUhWXNzM2NBUTlpLjVCeDx9JFA4'@;
put 'IXhURixxeiVzcEVdX1pYKEdqfl1JY2BaWHk1Wnw2aiR3VkdjNnlRX2VdRixKJj11QSVzcXg6X1pYY2g8d1ZlOjAoRHV8YWouRSMvSW48bzZ5aCgkWWcmZGNIPzd9NlIhQHp1Vm5QVG1JZzd4VG4lPCFqfjpJfHE3NEwpKX02Um4qS0RbRWdgMStiSHJNelQrQ1V4NlcrSnImR2g5aGg1UD45WyZb'@;
put 'OHNsRS9fWlg/KzhzQ3hoJmUvVkkjfExnLkB6dURwN31GUX5xNzQ7UTMqQT1OUHJNJUo9Nz05KjR4VG1VUypBPT1Qe1lkW218TGdHNjBJcEU7SWMsOTJJZzBAa3BMMGU1YG4vUnxgPSE7RElLPltdbldKPU8jaF0hQ1piYHwkaiwzdW1JI0lrN21+S0lbbnM0NCpXZEZ2JXxyZz1CR0RdW11uLEd+'@;
put 'fHJnXjUpc3V4PUwlc3V4SV1yMTxRU3pGZ24xfiQuTyYsOWRlL19SYlkwWCV9IlJtWT99IlI7Qj59IlJDNm5+IklWb2l+IkkxPzFBVkBhND05ZD9BZjxAejBSUWdvJXNxeC5CNltBITgkSDZ+SjkkLEJffE9sJlVLYnFAIWoqY09ZZyhZQ2UmZGNQRnN1c3BVMjh3PG4jUFdgJCVsNi85b15rJkEv'@;
put 'aUVSaDZYeS5VMCgwRmchZy5AaTM8UHJKK3VyVSNoNlh5LmswR1hUVyw8WV0+MCNxK0s/fUAiVFMwQDZIZDRUaS8mWUM9fTBTZnk6QCIyaFFMOmdmXVk9fSRQOHpqbW1hMSshIzhQN1h1NFEoVnpnbFtXcnpxJTxRY0Qlen19bkpYO3dgezBudGVzU1ElYVoyQ2FDRCV3Ol95I152X0M1d29xNE5u'@;
put 'VHVfaChzWWwjUkZkMXpaOjkscXJhdHNzYTxyZkUvVEZnbjFaSC9jN2M7TDg8Ilk1Zk1eOldkKTVtQlFOdnI4MipQV0tsN0ZMaS8/NXBwIVdGey41MT4pXz8lLis/N2Fza3xXQFklOkImMG90WGIjTD5AbitXRkZReyhNTH57WyY9WjNTLy8pPSwlV0BkZHcxUH5sbiVzcHY9O206VSlNJUxtJVJb'@;
put 'WmlXQClHbn4zYTF0XWc2RVReM2hASV9DLnZkY0BCYkMub2VUIT9iVU0wKX4oOXsheXI5dD1oZlU+aEJdLltuOVNgbDc6PXY9UWtDa3FnZG0pcGlbekw3V20oRzdBSCFGZj0sYU54SWImMDcxZmRyamoub3N3TmNeV2VCOCVqTGE/XzlZT3pgVihscywlal9mfWd5ODorOFtCUCg4YGM8fERlJkos'@;
put 'aU82dmlpdVBeempFREVKdlhNK2IwI0pPOylqVCldJVViVCsqW24sVCxTUGJ8eUBuOEZNUT9WeXgkRzdmS0MkeEp7aT84cnVmJiNdSVMmYTs4Q3sqcnd5Rn1ZODEuRXFhMn0peFAqLnNRXjdbeHdTWUtkODlmKjIwektfR3VgMEI8NiUsaX5rMHptanVsbWZHbCYlPmdBYWJVWzAhcWZlRToreUdl'@;
put 'M2EoJT07Pmw/ZSJbKWdVXiojdTNCOCZoX19GJDZqamlhe3s4PyNjOU84VFBWWGQ6NHV4LGc1IThWP0plM2RuZVI4Z3U7SzZmaWs5WUpHRixyLD9CNUdSWGNrRFszTHNRV1g4a1FYKUZ2JWdTdGlLWnJte3RRJTBJQ15dZ1QpQ1thVUJoUUs6Llh5U2VjYUFuRVdEfX4uQHFmdDNeKCxlOnAlfVgy'@;
put 'aEkxaGZaY2o3Ljd0aUBLUltDcU8jOmo/MDxlVVJhPixsQU91PlszLEhxJEJvYj59ZCRVVFE+bXwucF1ZaGlIYk13XSteJF4hZWVKa1JiZyNVQ3M2KytPWSM8OVBLeWZBYWVbPHdoYHEsS1AzJnA5Tk9wOmE7UXxuaE57UjNseipqaSY5b14uOW9BNC9gb3tBNytYVEU4N2VORDBzXXBsIm1wQkNo'@;
put 'QSo+Zm0oJF8pRWskJD9dRjAqWXNJZVA4RGN5XXh2dERraU1bMzleJSYwYSFrQD42M1ZbN15eUDE1PjRoPX0xOXU1JTNvJXxwWSxfblZ9d1VGQ0BeeSxSUV5QQWxhZDZNcl8sPD01Zm8rWl93RDQxbHl3SzhAdGp6Wl9ebWI+cHdXfjwmYm4zOmRQWEljXl88Xi9WYzJAXS5qNGRhPXswJjw/MXQu'@;
put 'Jko8WGNaPlY5dyFCbzIpUT5lJXpzZkZKKkFoPTgibSUld0k8cEp7RV9fdSlxKEg7anM0RXVoKExDPnJQRW8yRXhSUWReamlxbk9ZbnxTWiE0alpjRk0uN1lLT3tXYl1nXl5hNyNMNkV+OVQ/LlEra097V3NpXnF0eGQmKFs7V2MhPC5KNVNWMmJkeEJlZjlBZXs/U0NmJSkuYUAxPCMuNTBgOnkj'@;
put 'O2Q4bz1dRDQqJVo8SGdWeVhsRz1PeGhvaDRUODtkcy44RGwsNGV8aGF8UGVQM25saHRGTGdDSjd8SC5nQ0JWcF1dUX0xfmpALm93RnVlN1M5aHlYQU4/c0oucC9GdW8wOSwuRWRvP1N0VCE5YGIsK0xza0A5aVp5KU80M0F6ZDBEU2c7NkwmZGhTcU9GU3hda1FnUXt2cFJ9PEhmXnhOLl9BSGw+'@;
put 'bSNRVShYbG0wKD88LlU5UkNkaVdab0dzQyFdOlc8TDFFQjhNSEAyWV1NcjVTODQiJHV8MnVQQk44UGtpRFFiT3IsOjJZV0p+OV1sIXFXXnJ4aVtYMSJuIm4+cGc1e2cxdU1tWylSKEJfLl1rPXMsPThhYUwkImhmeT45UiN0VFUvaj1UUGNRQiZJKDZ7QnxQQk1xYzEiLC97KypqT0ppelkoQ35t'@;
put 'eUZ8PWIxczljVFImcyQkN34oR0BHMSFzOSheY0BPTnwqMn0/UF9QdipRNGM/RSgwQWsjKjRnXkBtT1l8a3p7MXg6KnxfQCgpXjQmW15hJltfLF9scTh0am8sJWowZiQ5WHhnaWghcH5nRi9qUjNFN1pEZDUjMSp1dDxuXylPWV5rbmowSyh1T1prWiN3ZUI4LiNGO3hlQj5yPTN0ZEszLjx8az5o'@;
put 'e1ZGVGx3P2EzN0BVKHhDPC5GMmd4IS9kb2BvLkMkSm9KWUxHT0wrN29xcDY4JDUkOH5dNldHY2dzT1l4MjI3P1YxIl9Ja3tjc2EwSUJnSVI2dXNgXX1hYX40TWtfJC9kIVdaNEZ+UTB+ZihzfX1EYDN4TGs3LlpSM0w4dDsuXX08bkt9b3dgPFAmaCpGJE18YFNgQnRyOEM6MkxIfiV6eGtuR1to'@;
put 'QmFBSjhYMixYeDJ4Ymp+UjwxaVZ1eFQ8dzU8UCZkejZEQXc3RStVNHlNJG9TMzdvT05uNDwwSzFWc0NfRV9yZlF+S2RBYyNsWD4rLjZ7YHJyOWU4Pn0jIzMkcSFJeHwwXjBSWyJ7NilgfmoxUmFCUiJicilDZzFmNT0xInM7YmE9UjN3cyNvRXUqe2kkRzgxQGE4KmxOfGQyaSRHN0leQ3NgUDNT'@;
put 'LDZdYFZyclZTQjJBYmh4XU5FS0RnMEk/KnZeajI8OiNqfXBHOFRJPkVhVFdmQlJtXms6JXxhdXk5PGwsKDUqcWxaOXBQbE9GMiMreD00JCpDfX5pOlVfXmw0dURxe24lUCJeajs5JXxafThNWHZaRHpHNnwsYmQydkFhTnZRUEZ8PnJaUyMwMS58K20zLmo/IWlrXTtDaUZCczFLfFUhLDphX0Yx'@;
put 'a3s5a0tKQFJ1MkRRUSN1LzloK282KUcyMF8jUDEpYSEiM2BkRHpFTVZNaG9Eem56RHpFTVVIUEtSLkNFLGR4N1pbOGczbyM9fmJjLG5wJiV4OSlqeWx2OWJPZzdMcXBNMV43K3JHc1s+RSRoKDh1MGYmaHhmKSVtVT54dlYmUVtqRDMuTXNLZ3BhWGhiUERkK3woX2dWcVBPaCVAYS5jcFtFcjhr'@;
put 'cjEseHhZMEFQT24ySXZDMkgxTVt3QHJ6RnFoWU5LI1F3aUgrfWdmY1RfLzFvMTkmO0l8az5TcnF4Ynw8Pzs0JDBwa3N7Q2pXbT4+eHZINl11ZWxmVy8rQWVZLDVqTjQzOG5Pb3x2eVpyTzN5eXcpKVYoUE8+Inw+eztddGYwJUFlLjtzend9RGJaO2NZSWQ1NUYpJCZ7LGJFbXVudURpP2RsWzFQ'@;
put 'Mkh3a2E5dDZDISwoXUlZYywpe19BfWJUXz5fRXt5bXhiaktNWW5KQnZ+bDImQCEweXVaJkI4bkdPclRfKE9lQik/QyJtNjM4PG4seUt8Nmd9SzlaSylrJUtUNzt0e2AmUTQ7PGM+ZnRnVVtDZWZhKFMwdkcxOlhgR0ImX1s8WzN+IVN4ZTleM18qRTh7TURXaCJEZF8mS3xKP3lzRmVQPl82fFRn'@;
put 'VUlCJl9GRXpfdCQ3djs8NW00aVUrWiZoUTg+clkqI0xKNlZ4WF1DQj5BSCJkbDJdKVg0dy9JSz9GMEVpaFEwQmQoVj54eHpWU0c2NXp5MXxfbl1ue2NWI2Zpez8uTmN6b08zPURPUWc9RG9pa3JGWSZrSUBxd1h9RktefCRsUmZwe3F0Tkc9cD5GXlRgWmxwVkxacG9EQE45WHY/akVyZTtMPSRP'@;
put 'TVdPPXJJIkFicV0pOUdRczhhVmgkUUVLK2I7Jmk7fnBjKS5VMyZvRCV6fHJ0Iz9zUCp3OXkmOWdja0UrJC51dWZpKDJ2K19gTDpSKzFWM3kuIU5lYXh3ZkByc0FJNDFsa2lsUWZ9W3VOS3Y+dXdgTigwc1tDPVYqemxMOTpbYWlDTDckKGo8UnVqTlNFKkZsMX4oXWJtfUtQbjNpZGhATjdLcng3'@;
put 'M0hRSjxSe2l1M2lOUjpHSXBOUipGT3ZaSSxWdzBKRTUyS2FRO1FodVtOQ2NUOFIjKkU4MVROT1tDJisyaCFhIV9qVVIoPWNjUFZjXzt4WXVVbi5PeG17T24vP05CWkRQYiJhYygiNklAPU1ZM3VRL3lFOkNWKDg7VUJoMkZJPW8+OyQ4KkIsJEFJJmc5I11PI2cuWXJrY1Qvb2xJdiRxNEFSM3cz'@;
put 'W0A4N3EsVShmZDhwKX1mYDEiZ0ZZMUpzUGxCaF9tJlVEZCxDX3xrKl5yeDYhZyt9RFZTfXlSX3t1Mld6WEhxV1AkbS5Sai4xPGQ7XjAlYFZFYDAhTXNkT2dZZ1thVyR0dVAyUjtqc3plLkBsaDtPcmM+dnxLZ0VdezczdXBRLF03W2BZd0c9Vlt+ZFtsdTNtTlQwLzg1ImI6SXJXTWsoXXhWeXFe'@;
put 'V35+Rng5XnE/XzNCflNfcVZRe18pdWQzTyYwRm10dXxxM3xwfXBMOG10aiNhVDc6MytNOSUxd3w8Jjt6OiRkcz58XTR+cTQ7OSlaKiQwV3U5ZUhpcj5lc1c4UUY+fjUuV3BWQWYsb1dxc1V4NV1CXmw8OndwR1R7OFpDb0czeVBmR19BXjhpPFhFW0QyX11ZaEh9Kz1KJkpdVX1sVm5IU1JZLCgh'@;
put 'Z182VjJqJkA8OXkhfnZBeUpaIyEhdlojN1tAZV5wRDxxMzleJUd3YWppIngidlBTPyxwW1lfMy5wQmlVVmh6RVR6TzRhfD9ZcWJeVnxzfmh3VThLQjcsRylibVNOWD4yVHR0LkI3alMjfSg/ZUsxJG5pQjY7cnREJCxHYUBjT05FO0F7Wy57L0xsKkUuW1owQTRKUFd3IS8jcUdObmpMQFo/Vndj'@;
put 'bmxELkJVOGY0P3I6UVpKTXhzc0FWKWcjMV41eFIweHBQNlt1NEp7YjlKI1JiSEYhTihuP2RJTkhzOGA6IUtRNDZwZiN1IXVUaGxPb0kwRkl0NWJAeTdwMUw6RmMsMkMhKXdPNzByL0ZlKk09UUR7aSZbSnVqJFhDYFhYRyw5c3d7I25aaGBPSUZGWUNdd0AqWDk6YW9OXno8XixZPU5qIlp0SkFh'@;
put 'MWBnUURRZ3ssOHxvYH1GRkNdTmplZ29zbnB9XTcuL3dtMkxkS0ZXOmNkdHM1bzg8eyxJOWRaXjBMOlpKVixCczQ2VTJMZlpdcGZ2KyQ4TXBIRlBiUXQjXW1mcXcwb1JOKHYiMlEvUjVubzQ5Un00LnJvSmlsOHJKZDFQZ0k3UmJpemtQYHUsSGYvfEAkT2xAYnBwTzQ2eFZsVFMzI3dlejQ2dlI8'@;
put 'I2hDaXgsd1I1MEIxMGA5V1JLVV94N2RqQFBzSERnRHBIcjZuc2kxQ1hmc0tRN1dNSnY6N0wwTmQ8bTJneytQQ0hzVzooITorQSpSK0lOOEd3M2NsUzU7akAuOyRCbi5GO25zMktXV3ptP21RZTdNOk9CVkBGaHkzNmg0TGNbc2ZNKnZhUW81WTp0Wn1gIVhTIXNFRz9YYyZYRjthPm9gXyZ9Jnd4'@;
put 'LmhqYz1UNTZRVW4jUmlJRl9iKlhAJnxtKWNQS0JiMlJqJCE2Ry4/ZlV7cnYifGhxKlVTOk8qM1U2WE9NaCZxfXNVKWxNY3tuTHJRfmBOQ28yNiNYdHFmW0hlfk8/L1lkKiIuKWlpMllUckZNVm4zNnd1JHZSZ3kjZFY/YlNkKCIxJHEkcDBxJlhuVHBufDk+OWBrZnQyXS5qeCorLlJ0ayEqKWQ2'@;
put 'IUd3N1FUQGFnc3J3M1NNMVYoeTRUc0ZXdFRiVlh+TSlzWG5KOyhEOzBZW3MzU01bP3w0QkBYRFFVbl1xKWssOmAkLzwiW015W0hXcmNiOz58UDlLLDVZXi5meCorKSMqfWl0Nz5DQCxnVGJ7WjY5aU85T0RtKW8ySEdCfHR2Y1RAcCptU3A0SWlqJCJkS0lvQHhlfTRYd0IoIyw+cmlGcyFSJFIp'@;
put 'QDg3ZEldKkFBQS5AdyMjMzI1QV06PD5RclYoVz1vUmRQMzxYRyZIN0EjaS4hQ2NnNTkoIUQ1YUh1YmtbUmJEInxvNldefnhTS3tdVjdRflp5WkFVfkxVeVQ9VlZ8UyM7O0A6VEk+c19LakFTKnFAPlIoX3htUkEyfTUyVzVNeHNuUjlrUi8+UU9weF5aMEFjW14jPFZMRFZiJFgmMmFUUn51MCk0'@;
put 'QW82JC9dZjdXJixse25ncFtwdEVhOFtmREgjPDpteTkqe1J1aUVdU2tTUkNwNGBfKU0pS2Q/OHpfTiticWpsIm05JV5UQ1VKd1V0fClmKTQ/Z31rJHgsZCRtb144YzZKUTpsWT5RemNGcVFYVkVAJilfVGw3WXpjRkhJNUtPYiIqblVMLF5UZUFJemR5Sz9eT2NkSH1tVl9qP0lIQDoxfmorOz82'@;
put 'XlVdJS88JX1wWSJWTDJudDEuK1hSUkExRV9PLGNnaDI/TVRjTHNYNkVXXjk9XVdPe0Z2PiJ5cmVXcEE8b0dqdnhaPkBUekBmPX1pK35uRTxse0o2RVoiVlZ9RF1IZVJIISZFOVcqPltQSj1dZ3B9Rnk/KGxuNUhPXnZvbzxDUXhHRCg2IlZlcD90dXdnK09aViVgU0BAa3xMOnpbVUBWKz5gSj1J'@;
put 'dSVWa0BBZUtbVz1PaG1Ab21vLGRQRTErVGVSVFtuckdsZWFAZV8qJmh6UDVHW2VPNlllWjhwOEFlYWBUZUp3PT1fU1FeMWkhSVZySk0paSozS1sqbyVQPkhiOnJdX3ZIcUEuKmU1MSFdQERxOW1hTlVRP2xLW0RGMTwsPiVdJCk4bXlVbX44Pmx5RVcvU1Joe0hqL1tROHxqVXZTbEBScWNzSGQp'@;
put 'MyNZUjJWcixne0lpe3xqe10xVlZgMUdTPFIhUCo9MDAiVHdPa0Z1dnxFJnYmVChYQSs/KUBqYS9PLFhqSnU8amhgOHN3OVc/JDFiYUJhKitkMmd1PEg4MW9qYno+eERpTFNBb0hfKW1fWVt4QSUhSjUiVF9VMnhTPjxwPz4jSzl9RmtsQUhYMU11dntQSEJDOSEieVJNOFh8OnFsZ3suNEVEPTgy'@;
put 'UXFafShdLFFHMn5hRFBrTVE8IUw/VUl1Nm0sQipPRXU+Wnx4PiN+aFU5cWQ+JF8sTlFlTXV9cHkxYUROYSJ0O2poJVEyQWZ0TERSfSJnO2ZzMHZqUmpSaHc7YWl1aHdgODdqQXx4OVswYmVwSk52LnpTIloxcGpeRnovSnRmOVIyOXRpQltFMltLIzMzOFdYMj5YdWwjb04hMFNJME9XTUN8IzRb'@;
put 'N3UsVzo2XUJwenpVeHRoM2I0IWMha156KS51biN0e0hsZjlAKTYmLlhDP2drLltvYT5FRkNSQTR8Yy5vdjpKUVFJT15rcE55I0BRTTsjTzNCfTtwfl9LRTIpTD9BZmlyRWZkOk58NkhybkI3emJOY2plIWEqTHIpfT1TbGlbRVl3eUJXOmxBT2RteSVyXTJVWTRyKXZfLGNebW5eUX01YFdXRFck'@;
put 'ND1OXm1rP0xzKXwkJlkzais/MGRbKy9pO092RyFORVBLPG9nQ0lyfShRNH0uQ3hWQzE5aj5AVDh5M047OGklVFt3JHk4dXw3bUZbMitqbldSKSZPYjZZWURsJkI6VVgsTX5oVmdDZ0NqQi45YyZZKytkYXw9cFpXcHlELGh8Vm5nPURVbXtCXjtzSV5vbVJTKU5oVjxOWE4sMX0hP19rPCVAcCEo'@;
put 'M1I5aSgwIXxkfTV2LkhnJVNwOmp1d0dgMyRqN2N1bX1qaCVQYGpwbSF6V3JFfmVjfmp+VjBWOl43KmEkY2VaQDBiYlUvNklwNm8vZjdvO1ZCZXg8djN5TnYwYlVXaGtQPV9FQz0rM195PiJhaSpQY2R0OUtUK1pPJC5RcioxdiE8VWQ9JXUmfFA1ejVtJjN2diRJUnhlJGdoYTBwO21eUk0haUww'@;
put 'PD8yWWZuYFFDTyN8eXZiSFl5VSNPTjRhaUJIN3BVa112R1NeQ0lCX3x2WW9saz0ldGhubm0uL2xtbCN7NyRNLzMwJkdye05CU3BRZzRDejpkMC4rblgpb3BgKSgsMXNqV01ROy8pSntGV2t5KltaVnFqW1BgfHRiW1l3IltQRnZLfUcpWyZxRy8ydDMyTUQxVnRAfj95VWM0XXwkKEc4ZW8hN29y'@;
put 'YT5JWTF6SiMjMXdbck9PM19ZVGVCMD9VRF1hQ3Z5Snh7YlJYOk5SOD94MEJJK2cpOWx4W3okN29qWE87VTQpQlhWNil9UjI9KF5TY2owLFphKlQ7JXAxck9ERVF8XWVQOmJecHJxe0tbRFh+YntFTEBqMGpGalIzQS92bUcuWHl1Yj1wMUtlRE83KlhKc25CcWBFaXtJIzpvdjw9OCpnOnt6X1JN'@;
put 'P057MkpUIWo2JC43NyE7fGdeSSI8bWpySiZASSMxc20mSUNuNCtvbmpQWzk9di5UdD1zIS9gXmV9YFhieV9dNGp+dzgpYEhJMXB8JCxnNUtMTlgvTn5QdiZXLEZzSzhDUHVOcEZwbCN4akpJT2FrW11YezNDNEwqKi5bNnNzL09QSywmVj8wI11VRmVDKGxWYEpVYVEwTjlLWy9kPntifXxmOTtb'@;
put 'PFRQUEhqWjU0Rm03bEAvNixkX1thIz1FJERuMX09TDw5SzQ2dSZ5al4rdEhne1I1JSZlPTQ2aip5NDZAXkBdcDMyKFo3c1BAYCokZjF1Xyg3PkY9VWMmSzBQbXpeKHNXSWAqM1pSV0whaCx9RHFOS28kOCxRQHVkIzJTckwqTS8rcjNvaHRpaWIkYytVd1dMI18rdmUsSjhoeURXXXFodW1LbVEp'@;
put 'MVZdcEd4STJ2dW9wYzp9UzJGY0BNTXAsZmBAIy9mNXpDZUxpMjFDXnslPXJpQDYmUjFHVHlZeWIvbFVyfldANXtrU1djVCJ8U110dkJSYnMsalkqOGpYQVlCV1ZZS0s7ZyoyL15YI0M4Pl9ldkJXVVhDU2Y9cndMUmZGaC5ka3FjcSw6V0BINm9xayYvYWsoTylGZzF2ZEBOY3wsRXtwIkV4JS4s'@;
put 'b2YjdXY3ezB4N2Y5ZEVGflE6QmUvV3F0I1RuIUp8T2NLbkQwLiEkcVRbYXhFVz1VUzs6bjdwKWU4Iy5bQnlVPFReSGZiUnA2TiRAJWQzZU9YVyMqQUg0cTooYFY+K2xyNj5GNjBeSDZDOjxQbXB2NzJ2NyouWD4/TTNMYjRkWDluVTY7ciY0O2EqJk5zM19HOytNNXdzLnVKNF1pPWRpc1YzSjRM'@;
put 'bkVjXlQobDdUYy4semJDX1FrJjRFRCs7Y1BacDs2c1FMbXowPVdbe2BCZU5YOFtkW156Qj5rTERLOWBIfkVOSl15JjBxfiYxczV0X1t7RVpaQEZ7Wj0/OUw5fUlxTiwuR003MyguQkVEKmQ+OGFgSkp6VWB5NXUlKlZYYVgjNzB1eytTWypjQktlZVNgd3JZIS9vXUJTPyJOL1dxdGxbTDkxUzVa'@;
put 'NmREdyp3LCYubzdAdCZOQCZAUzNNdj43YGtCMC5Nc109eTJ5QGN5L0JLVGUifVh6W3FjflcvQn1IXX1oe2RHRWVlTnVjI15INWlgTiRpeGpudEYsZkt0Xl9AaHZGeSxVY3AkekFGNXNURXZfWFZeQTlLcVtfPSxhSEJfXVczMj47KTE7ZyV5MFEvLlhkdEtzQHJlJWxJKUo3UiwvUzkqbTA8Wm9R'@;
put 'WFhrJXlmQVhSfDE8OmEqc2tDNDUqJGJaeGR4OCoxcyYkLDFiSz0sIzpHektOLk94KEFPPi5Ja1dbYG46VTBfaHR2QlB2fV92OmMrcl02aVJSKGNdYEFaTG9teW5lZ3YiPSg3KXVhOG4xcEdZX3EoPEBAMj9EU1FOMHYjS0ZFXT1RbSlrYFdGdltQJSRJPWl2QyhgI3s2IVl6cXMsT1FIfFQjYUI0'@;
put 'Tl9ZOCo1biUkSWc1K041cyV8d3F8MmRpcGAyU1ExZVphLCIoT2VYNCYwRDhOOUwrbDg1RCpTXkUmPTIuNGJ8ZSUsTy9uZlN0JjFZVFQiOCIiIkdGfWtSVUJ1elpAOHNsaTdQcyMqVGZdKnpAKCxNfENnT2JhdSFiZ3Fzfnkhd01ZKSFZcGBybGlZTTg9fGtXTXBHK3hScmBuXl5DQkpBP2FDdCk3'@;
put 'LnhwTFErUllzMHAuWWUoTXBdfEpaSFNkaHNzKmlNfG00TUJ2SyIoYGBeLkhtZVR5SCx6RTs6V1NgPHpBLkUuZFVdUEFkVTgqYl5tPlI9W0IuK0NTV2AlR05CMilQOWcuRl1kUSxjQn58WENBbT1yQndjeUYkTjl+Rmw3NjNvK1EvMFAlQlhjOjlrRnJ8LEhaKXBiQkglZjpEKT9tKGNBWGQyfSFA'@;
put 'a3dydW1NVFdxKm58UFMqSDtPN3xSX0B3Ol9oPiJgazZDTzprOXZoWFleVS5uZ0VbQUYwN2JHej5yLH4lISUrbn1mIj0qWiRKSmw4MztDJlZ8cVExcHs/XUJjImN7e3p1P0V2WDFtJDEvVmJuNDUkYGFOPU5JTT1Yc1V+PWdVO101NEYzPHFXSj1ZQW41bDNIZV1JYzZrM2gvNn1uZCxLbyJuWEY1'@;
put 'KjI/dC8jSVp4UDRUcmk2eGkpLklyYC9gKXFlPFcoU20jbDZkRHlfVi4jfT5tOHk4emR7ZTJWT0JDLj9udSklaHN2NGZ8MGZ5Lzw4bEJGZmxAQTw3IyY4eTsyP0EvQl17Om58K1Y4TTNnRXFZR2h6ImpaVG1WQlBILGdhaio5OG93PU59Lz1xY0pfQFd7SXNsN3g8R3REUF96KmJ7PzNHNHtBV0A/'@;
put 'L0B5SGA/MWMmJUE+JCw7PklML0BUUjR+V315bUJmNyxsZTYiVkRTWH4xb2wocTI1RXUjT2peNjIjeVJjJXE1PVtrfFsqS3F1RyErNUdyW09VYHpVLC9dOX1DaC9YeWpzYCV2V3RaTnsuOE8mI3ZsJTNiPm1pV3RaZVY/KTN6NUNwd0w/JmJ4dU9EPHAvOiM1QTAzdkR3SHkwbiJuMTc2Wm80JTRk'@;
put 'XlFhVko8cDdiPXB1UHw/NH5qZyRkRVciO199U0tvJFZJYj9+bTxveTZ3cEhRQHdeVW53ZHldW0c/Yl4oL2JdfkJVPytQQWZHNkZUTylXSUswVG5QSX18UHQ2Onp0SHk9XXRwSFFpdV5VNStTWmlwUWxGWGFxOy9iejxfeEM/SltwW0c6K2JbRUQ+XWEpJHYwbi9xQjVHcil8aSJEVzN5I0FbSix9'@;
put 'WUkqUnZpb0kqQmFBdVY/fHZFTFhYKWRWMCZmcys+WSVEQndSeys/Pj4pYHZJT1QvL1ddZjhFenR1RlNULEpkUk0/e15uYG4meDFNQX5FLl9SXzNvWyQ7VVc7RkoxRk1DJT05U1ZrTi4pLzhyV25weCMrMWs3RnNrREUxSi9eXiVoOytuOjl6bzFYP15XLmhOP15DRSRGdzNyNHV6ZGZ5cTg8Pmok'@;
put 'fmQ9alRUSGQpNl8+YEhMXyFMLnVQczQqQip3Sj8kVVhWW1hUN1hSPilbYSZOXiI2KDAzN1AveEo/OypmVT9UeHw3U3V1MDREKn5GWEImNCtULk5hWUdxaT4+eEFAejokV20rNHNYdlVgdWVDcSolKUcmOkUlXW4qMnlPUkJNayxFZnt5T1JCfXNwM1U9amhgZXVQYGl6WyxDL3RTVz5ae3ksdjtA'@;
put 'akB+cyJaWyNiVTZSe1pgeCR8bHcqP1IjV3kiSkI0Qk5aK2RvRG1jU2M2MmE9MHJ5ZW5Tc34jYUc7TmZLPyt2IVtTNU5WWmIzKz9YeygkO1htK2MreHdaUF0rZ2A6VWBPNzhYYishJnxnRGQ9VThMfGs+RlMyX2NvYnAjZDpqcD9lenRETDkhcXR4R15RemZNJCprTVRyIkMpSnp2az4vLkdWbH1v'@;
put 'KW5xMyMkUHk5ci52fCwmIzMiMXhxXyo0UlJARE1+aiFvWyw1UHc4PWl9cUt0dVlGUjNfai4pP0R8UWN2SVEvZzwzI09+TXxQZEFhPEdMRnchIip+bncicVUvJXRnU0FCNEJia2NyVmVvLltFUyU9NmFML35hfHxTK1pgbTBHcWxWdU1aM2pGd0s/Q3YveCZdVWo8ek9PQkc4ZW9oeUkzY0YrWysz'@;
put 'Y2xLUyU9V2dMLzZMVGouJHtMSyIwMDh2Pm5majRLbitiXTgxR3FyVjwhdTQlPjwpSWBjTV1DNTRPIz1kX0Z+JVFud3QpMl59X31OM0J+QjV5W2VNPG9MclE7YSVqaVBUOG8ueS9JVlh3N19TMGk9TFtwfSUuR0JrUHRbfC5VaXYjRGd3YXdOU0xTWW1lXnxfYmN9czlofWV9dEN9W2NmVl1NRHBp'@;
put 'UzB0RUEkQSFHVUFtQnRJOFc4NDZpTEM4RlVJOXJESHhkTTg9dU1rK2E4WXJpPnlGWCUqW0YqIjtDMldYTGhtQUFXc0ZqSSM+OERtVzVyfEFIZ2N2fGA7Ry8vdkR1Qzl1UyUxb2pELlpKZ0AzcC5Yejk6ZVAlN2N4N256RWpJd3QobjJWeD1FTzFYS3YvdlU8cUQrcz5Mdnk0SXRGP10+b3lodV9p'@;
put 'ajJHPzBWPko9PiRJYn1bLEVsLmJ5WVJvRCtkWyNESkgiaGhPX3tvTUwxdGkyVzhQMDtlK3RvRkM4WDUoIW5aYn1JRVsxJWNHd2BPQE9NNlJOTWVjQk02YUoqYX1EUWs5UmZWbGorQ2c/Nn10dldgKU9qYXd7eTdYeXpmRWJHdUxyTzNgQnN1eU1WfEolfSFyaTw2bzFFfVlISmJ7JFddaGNfX0JS'@;
put 'ZF0sUDksV2Mjfl9EfGIremBUL05+RXRge20mZzhAXk8iLi9SL254VVtxOCN9cygxR1o9KmBYd0dkKFc7d09gTk9oXVFedixXMzxhaG9RXiJWcyQwNFllRF9gUUNIVVBZcE5DIVN3ISl5eClRO2BEUHs/Zz5xVHB1QSJyfjE2eCovQDlpcmJyI0w/cGQmbkF+Ui5HciVZdSEhKjYkRFkyJlYkJHlO'@;
put 'XUFRMngjO0tyIUtKImNJNyp8NTdFbj5wWVhKYlRGL3Bza0RHI1l2by5yeko9XjJvdUdbaV5CbzxOIytLWEtfPiNaTnp4Yl40WnVuPjlhUmQxezorSndxa0F+LE9BPChKTnhsJmJqdzpuckJSbzE2I2tDQzNRSiV3VTNuN1NfY2FpUGV5TCYpJVklViVtNW1ScF5kYFEkSV13dXBWb08iTFY/TFBT'@;
put 'bmBfLiFtdDpxKTQzSE1pWkxnZFV3UVpvXSpNZjN3eUNTelZIOE9gSk4xSVQ9MlBzNSNSXy51b1o6PUt+bE0qXz9sSjNCYHpSJn0zJlcyVWZ8ZixddkdFXkpWbltoRW5BZXJgd2B8U2BLaiNybU5vfVs7ZWBtbmVGXnMoW0hFUUJpcUZoM3prfFhxMT5iP1lWbC4vTDZZTE9nSSZIV21EJXAlXXcr'@;
put 'SUo1Oy8+XklSViImT3RBOFNTdjtqLDE3ZmVXITFRNzE9XmpXTUhdMUkvaCo0c34zKEJyR147O3NrVThyb2ciMEQ5K2UrQy9bKmp8YE9vMlREKmc4ZSNYX0JzcWxkMEBpcDNJeX5iKk4uN0g3MTFFcSRpaSxtQSpFLlsrMis5Xnt5fjp9IWYhUVJTUzQ8YyMqNFZeOipzYjdeJWAjaEleT2JXUVNZ'@;
put 'aEhzOXdqOEBvM25RYWJUcCkpPihXRGZhKyRQUitHa3tuY0gpY1MqblJGNzx3WDQ8P3lHMCgobWJDT05dTEFkMk1oVzFjPVUpNyxZezF1UjhISzxeV3Nrem5HNihfYWhyaUJbZSs8OS86QWJfdVQmNC5BK2Z8UEhIS0Z5R0dMITtfPkNWaTdIN3ZzUDE8Ml80dHhDIXZTWXg+XlVNfFRCKX5NTF8o'@;
put 'YTlldWVNOV45MVNYfFhsfSlPalB2PkpFQSNeNXBVI3RRNkxHTFh4MmZsPUQiSXNqMChdNXRIQCxQU3VmSV4rciR2Q2FOYjVdbHpJci90XUI4a245ZD5lZ255Z3ojK1pOI09zbXh1Yyo7dyhnYTV3cCI5MCwiNzlLfD5NcyZ5TSVtdDxOMzpUYVJObWI0RF1lWyRsbT81UDxKKGBBTnFecHFvQiQm'@;
put 'Mz83eGU7I1VOIjVgTltobW08W2E6W2dWTSUpcWtSZCozfWl2JDd6KEYsalMjT0JTP0g3MyJJME9ZRnhJP1gmMGM6eldye0N0SkYjbzM8OzspIlNZQFNEYT5SZXZXXXcsOk18VURWXzFJSkglWT1rTSJHN2p8QjVTTjlsNmk4W1BxKCgzNVcsSD02eX5yXVlEclVQYzImVnVhS3RVQj57RCZBbXws'@;
put 'LHg9eXhxTzc9MTxtOk13V2okZHMzeDFDd1BROG5NIzF8YVhYdGxJOEl3XmhlZXpEYFNWRjo8SlJffiVCJSw+ZzJYaWtQNWJjejt2U09wJXpIW3hTd35iR3k0WGVCNHFwSGQidFt7UTQseC8zRzo8WWw/THJGb3EkbTVQN3VzbmY9S2pKXklAcDtwMDRGOiM5KklPZWxYX3wpeSNOSSxzLCIxVTJR'@;
put 'PkQ+b0VtdjVCKWJfcnUsfXt8KFhOZiN9OmMzOkQpODpfemN+cXVUJSlMbGxFb2B+RyNmWUdZbnlTSk9IZk8vVylWcGJacXAzfkh8bykwMDQsW2pVdFZydFY7NlFwc05VZH13IlN8LyU1UH1XaWxeMCEsV1ZedFpHTjA6JlFManZpTDRFb2NPaDFQMjZpP3woRWdlJCVOb253bUBZaWAmMXBGVXYk'@;
put 'ODt5KjdNZmx0VWFZSXljM0RYXy9UZT0vPWNIIitrOzs5JjtRNks6ckNrZldSO3tiaVlzZnFEPFVAWWN5S0M4ciNtZFVtR0hZVGYlRmozfkVleHcjNjRDWFo0NnI6ZjtJa31raWFAWS40NCNHLypkS19faHhRP1gmNSxpLHFdRCYhdS4wU09fXnsqKSRNLiR6cmo+QG88fEBfZDlFSyxeSElhMmtZ'@;
put 'SlA5WVplSSVmVTQ2YkgmYElENWVeazpdQSJJbC9yZkM4ZEg2eGlfL2hbIzVdWW5FJDQ1KzpIQF0vSWtdXTxYbzRtUnFzanUpeWpgTExEcDAvUXUsdSFZWEp3LmdyTHBMeHhMOXYyTzdqZG5zVFJuYiZAQ2hbMH11MFlbOk9gZ2hzfGp6PWtGfno1dlNKJHE+T2JAaVNnUzovZnJyTVAsYlpsWC9h'@;
put 'QUBaRXgpPm0rZ2t3VX5UPzN1PktQKCw4TEpSNWcsPHF2QmprZD47UUkkP1pQVHlIPSlJTFk7KkB+UDw/MUUkbnB4Rm1VUDhkNWl5eyxxdFF4JmN5dHZVXVh1KFdsYHYmNUZfO2xzWmhaYjtlRC5He3U5OUNJWEtlP21ZXVF6ZHY3W0B0SHs4PEQ0TEJ2dF9ye3AkeVg/SWdHeE87MnozJiw0LHB9'@;
put 'RVt1RVlwTzdAMVh7Ylh+KS9jcCFsOEZqdHx7d19ZMiJBN1cqcDF1Z1UzWTw5VmM7RiJqXW4+aSluTnQ5cnVdVm5hQyVSXTxAWiRSbTpDOl9LVXpCZSo3TCYjR2Jlb1J+Ok5uQSxdZEtbbW1ReC40KWFza3V7QEBedDRMa3EramNye3hwX0g9Zn1hcDgkKEJXU09+KjwybE4/eC5PMnRpbSJVUDJh'@;
put 'cXouJlYyT1BXVH1leVN5ZywuUT4mXnhxRFVgRG8lMHhlO1ZacjRkPE5WbT9+TV9RYXhXdWV2YGxgaCYjdEpTQEk/XkAwVzg0dEtxWiZ+KDBmcHBUPSsoSlRyalVhKj4sXU5mP0RfI1hqWFcvVyU2YUo3Xmp8amtYPGw0Kik6eyFVKW5KQGBac2BpKT1xTSg0QTNKLm9dTlJCbCFhOSl2Wld5YkRw'@;
put 'bF9VdSNrd2d2Yk1OWmE+JW9+ZyRwVlhGc1RYK0c8ZVhQeTI7d2RwMGspOSs/O3ooNXNTSUtIX1YpWykkVW49WUpVNnpTdEVUXlQ5dj8xaWsvQ1ViUWZMO3xmXy5JU0xMYkJ7QVBHQmpPQFBxYEtJayRFMEAlInR7Km5GTnNdUVM8R0U5OTpkLm0lQH1OW3MzT215bX0xL2o1TykvOEVpT3FqcURE'@;
put 'Km1Sc1Yld1hpPVByPmVaLl0wUSlvWldjIVlgM2QlXTBhX0YpazxJdDJRZTNxJTt1WCM5Mj5GbVdaOGM5JGp0aHNfS2YlSzVmYEM8dCN6VD5sU0RmZTlWVm4uLzRMRD5eKG85RiptTGBMYi9TMGUqQHZjMj9sbER1dGN4IzQ1bCpjWyQiPkQzLkZbPCFLLGc8WVtMTSlvQmQsfiglXz9ifWFHUm5t'@;
put 'cFNVZUYvS2dIUTtmXUNMQFBFdnVTQTpUbD5eN2phck1nTGxRSipfZjpMfCpdeltKQlAmQyRGZjpPcjEzLHN1fmFdRltwU05HMTttLGlteldsLFI6QzM3bCMlKyIxY3RAM11fPE8ofD9ZMzR7LF0/LmA1fnl6PUQ1KEhfISxrJD4mT09JVFRjUjE6ZmAlPz1LbGJQVVVCNUglMGJQX30iKkU+biZ3'@;
put 'eig9RDk5bDQ+eFhDQjNPe3IsVjwlKWJVZEl6cHpHUUVLb3NEN0cuc25TeEc6Yk5Re2dre1NddEhSeD1md2J3bVJwdTNwS1pxaHNJWm4lMXZ+JihKITlhVUJDcWlwKmpkSXN3amFwcF8kbjJeWmFMIVdaMz06dyUubF09TD1SWXMmakJlRjxLUUt6UnZfdDRAOlVMVGJBQlFlQDxQOV94eDxLMm9E'@;
put 'PHFFUVtIYHZ1bm0sbDttfWlxNiZkQ0hUdSt9c1BJZyRpQG0kM0s5U3UsM1IlcW1LNlBzY2BXI1d2ZXdbbVErUjhuV015OUpUYV4jXkRZRXhnfHsiPSZSbkQyeFpzRnN0WHA/b2tnWzVuTVc0dD5pR1F7MVd+RT8zTm1MWjZXNV5bIWt1JUFpe3BSaVBTP0tCNyomYipzbU5oJClQNW8saEAvV25r'@;
put 'OkxIVTN0cHFQUXh4N0NweGw8eVYjSjZrWCk7YG0kU3hyVGpZTGVVWVImaVguYCtpQlNhUWw0Q2I4Y2g/Zjs1bUw8OEhtd2JFKlsxW1E2UEZ4N0BjYTtPNk9SeGdnbT8qfT5JNi4/TmFzTmtIOCx5fnh7aixxX2kjT1Z9RiUkTyslP1lPMFQkejl2c2RrQEJgJFswc2RENExyW35jLFtnVTxyb3cj'@;
put 'R08xQW8iZkVMJG4pX18jdXw9SngpRn10VyJOQmMvRGZoYS9+V2B1U0s2X1hYZXtmeikvM1R5QkFLdE06bUdmNFRhN2tzQGNedEBsYHxiLmRjd2pbY1tUSXxtSn1+cEt2UXJTVy5qYkAqKVMqOnFOfmk1UEZSSCVSUG9uZXIseEN1Y2U7U3wwfGFMaC8lcEdTO0JBZi42L3FlVX1bSDE/RkhodlZv'@;
put 'PmM7IltpWmN5fTooVU4jKkg4QlhxTylNKGs4OCUoc2g8PGJ3Njp0R0J3JGshbytvazNbPyojTVQzTmwva2FBInl5TS99dGNwKjo6WltfJl46Kk0zaVNaW0RfVnhwTmM3VXBILitpZ1V6REhwUShnPzhudC5bJDhVNC46YnM1OXo2anRbU19ZPVhdPFhIZih0Il8pT2UwRTVfWFUlJGM+KHV3ezJg'@;
put 'Mzp7bltZQ2ghOFgoa0dMcHR3ZkFme1hgU01pUVV5Xyw8PnxgKyt7IlNhPjhAJitVMFUxODhmSjo5aTsqKygvMS9HX0gzVEt+YmsycytwbEYxLDxuRndDPXtMTjphdCpnd3IqPy49O1VBTCp+T240fmB8dEc9OEgzLjx0Kn5mIzpHRUhTZndgNGlHZGVWcSVMd1lUSzVUYCsxPzIwWlZPPWh6JV5I'@;
put 'YzNvXzRpNkZmflNyQntKdldGRG00cmo0e28/RHIpP24mYiNyTiFnITEra0piJF1ibmcmVlJ4PiVPSFZKZ19Md0ZdNkpaeyZXIytmTi8+Tl5KbDVzYlViSzMqRXZgKkNTdkgydT0xP005RVY1K24oXSRTfiVWSWlyPVhMajFCe20oOXZVTUhpbF9NeDk0ezJjaX5pZ19yUyI/YT9Ha3lUT0c+STdR'@;
put 'fFhkJFhUKGxEKSooRzJqXU0qdn1idHgoRENndzhPVjlYXUhbLDxoJjpCWVssN3tzSDtNT3F4YXdJd10mdzMyLiJ0Q2tnPnJzR2A/UVRuSndhIkd5LG0rWHZlVHo4VW5jcX41K2ZuSmleN1UyPUcyez8+KlUyPVUwUzB2N00kMSNHVHZ+M19gdG80KFVgaTEvSCo9cnBXOG12X1k7Znk/JUokcyt6'@;
put 'JUg8TT1IL0wyYF85dkcyMEwza3kpZjphfTY7MExIMzFfWzRfOkwjPEdtPzBYPWtLX00pQGw8SygrPj53K3pQfW8wMURiZXBOdC5+Q2BjPVsjTkd3ZGFbPilzKnRDQGsmZXdmTE5bTWRMYVc2dENOeTQ8bD0vTXQuUXs+MkFWfHd7W2dGcUpCIm9zX2N7c1UqOTdoPCpIX102T0psKCFqTkR9ZyUy'@;
put 'bEllO0p9REJnX2N1JGJVV3lMZE5JeTljNCpKZmpzWWcjeDdVa21AV25Xb0RTI1hVT0JaQC93dj9Pb2oheH56ImQySmtWVC59WD4zKGQ3ZFc3dm07flgqNDReS2puVnFDbWdTWUlISUA2TEBwYTI7O2hOMi5UOnp8UTVFb3ByWjlCbWVxd0d3XWojSjhwK05VfSFxPF1kVlR7RWRrIVAyeiVSSlUj'@;
put 'aVMvMVg7T3NDe3lbKF9aZHE4Zixse01teUhmVSpALEdITUFKRXNicClXIltyYlpOYU5rSlI0N3pSY3FqQGc+USFaWFVtRz5eaXorQGo9S2JzPz1dbCxTRnFqPyJtfUtSbjBPX1Nwb3c4VCZSK0p9L0hRXXIydyE6P3BiU0JFMENXPk16bGI2dztwRkI/MkJuL308fVlvc1I2e3MkWURSezw0THci'@;
put 'bW0kP3E9RUlyOzdFL3drfDU+azw5NnNLRFNWOmk6LnBlQ3xjOVJdcWQoJjZxWl1CUV5IOzxQXy50XUJ5LHZ+JShCeTRIOmRwYkdXO0IiTUwzSHpKVnZ4ckkwanI1U1ArUCE4V1c0XSkjSGZ1YTI8VmtBOCRkTEJSRGFLcURnfUF+O09TSyg2JjZdY0BsQkc8SnhBWk5IWmBwM31BWk1Ta3FjXT1x'@;
put 'e3pFX0tjVUJXXiFdRX57VD5mUlY+TmFxdD8+QjhTbGZ8c0NPUUl3VyJlPFhVP1UkdTE/cl05UF5ETH5dVnBQbmtTWylNZkNZK1pqRmxWY3lHOVkxYnJiMF1hbHROdWtnKyUqNWBmfGpYWX1rdUw2UWFnVlI6bEZXZmVQPV9aMXI+N3hKQytgOFBxdig1TD0xMFFsQytZNHdkUn1PUUVEaFA3dm09'@;
put 'TTdnWiEmVz9gc0h9dEVRWXxjMlBXQTxrVlA+Lld4I3hYcVZvRiFKcFRmYyosJjduJW80YCp7XnhJUDpsIm1LUGEqZCU4RFglR3o2N1A3SnlTcDtZSkRUbiwxZ2YmWEhsajRSSnQwR21OWzc7KDJUYF1HYWQ1WDBLXVQjOXZhMGQpVDpgZnAvfTcjWHRFMG0zY1MlZyJtPXd7cFheV0wsYVVGPnUv'@;
put 'RDZqdUhZezQ5MjBMVTFnNCpCKD15XjAjNGN9Sz00TjhFeixYJEJDY0t9Mi9IeCNNOXBiNyZeWSU9Tjp2dkNbQSs7OTVpPXNybDp+K2NRNEgjdnNoXkJORSw/YjF5XSpETVk1fUNneiVyUnR+aW81Lzkqb2ozaVoqbzZrWC50ZCw5bHMhKm1tbWJBJlNiOnd0cWNPNklDNX5bcndLRE9DQDkoTDN0'@;
put 'b3JrO1diP1RwYUxFMSErdTEldF1XbzZ1RnM6YmFgXkdxJDFnckdMa1FzeCgmQU1oMCJnXUlaSGdLSW1wRG58X3xjQm52ZTp2fSwxQ28lKD9hTFNLTTg2Ils8WkR8N3Bnfi96VDVVeFkkfHh5Y0U3VT1Ve0R1WDNBQ3NRQC5EUEFhOVN8X2RzVWVOLDo+WEN7QDhhMiJ3MVs0MilnO1osMTpaMTlB'@;
put 'TXplIyxyPG9dVFI5bkdnSjxzdCNuaEJVUyM5K1FyQmlZVkNDWF08X1o4ZmpibjMoWnQraWtTMD9IbjAkaHBCW0VOLFM9L0c4dSZ6YTZVeWk7MEhXXWN4YWVkUS9gPi4qYWQ5dU9ASXAlfG4qV2Mxb2tmaDJEcjsldzkuUSNVMkA2SGljZytSOTc4N2A+Jk96LHdJP2YiMWYwZnxzNFRuPlVGQVs8'@;
put 'Qi9XJU56NVkma0hUNjdVNT1GSGp3XWpfOHJ5ME9CKV9AK05GekwsbCxSbTxdTkw8L31ucXQ8dlpaaFppPEJCMklJOCRjMXhpaC51QDN6fXAlO09QVVhoNnBjWkNFZ2ArVD5Yb2VqbVZlfGFZWFlRa11CIXUsNjVGT2JjbkdvY2ZfNV1hJW1ALkZFfW0pWyk3IzY6I01qKlRmSDZhfCgqJXx2Tkp8'@;
put 'MD9bczNQVCpAUSFtODN4SiZqfUh+Ly56OGRrOChbXlRsTk94JFVKN05fXXJQXkpzL1lPdSFlSDxwIlJJd3tKKyk4RUdnTnJMKTwjb0E5KWxSW1o0OmRkXz1WNld7NSM9IzF3RmN7SzRROFtdWEciRl88bDA3X3RDJjZJaSM/Pz95MXZJaDV0NmJIY2lPdWQ0bExwKiltTlddRStDMyYsKnBDJENi'@;
put 'flpGLCkjSEhzPnkxbS5LIWJSKjBlP2woTCtBemMlRjlJJUVfc2dpPm4qVSo1akR9dlBJXl9rX1FTRkhKPCFqSFAvdzkxRXAieXxbYCQ+XTkjaG9ER0Z8JkFwY1Y/akJ+P3lJWSRmSHRXRmljREJ4I3cqcyp3MyZqITVWaiNCPWdWeWtuWTZaYzA1JCtjWHV3SU83S31IcWIzSTt3NjIibVZETSJf'@;
put 'WylsantEdkZwdGBBL0A1dn4zVjF0RzVBQ0kjSyJTRnNNKHhkPiRofmovUXsmaSJ7cz19VXRfQEVySmp9cWV4QkZucE5VPVIsN1N0ZXE3az95SERpIUk4VkQ1bnFqXTRUN1dkOy5HeW1ZRixSOlU3aF5GMUxKIn5WfVpJR1hBcmo/O2s4PGZ+bzIwP3ZTJEo8KENCMHl2XiZqNHskRXZ0QnxISHBb'@;
put 'MypZSXwmcyM2fmhoaSt7ZXg+TzVDYzRCbS4zPXJtT3FOIVFjMyQ7NnlOJU9sZm8yV0g6X2c0OTp0THNeTmxGLztUOXJNYlgzflhUKGVKPVZ8Jkp1NzRTdGM5UFM/NEZwRC5xWyRHeCNvSSZpKVcva0NKXWdgYWl8VD14KFJNcnNsNUZtRGQoY0ZzY2x+TkdSIXpyVnFnZyI5NzVaWD40RXYpXXck'@;
put 'Z0UvfGBudXtjTTxdRFo+R1IqN1g/NyIuUkQlR156SDFgJkNpOWkwU2ApV3NBanUiYWBQVylTdkFSJl9+L3M5YEJyL31MdCE+bFo6dmx5PzY6O08qWmwyfFIja1M4KSZtYk4mNk9TN084YU53QWVMN0ZZeEdgflhpYVp6Sz5LQzt4TEFGPVJ6fmU5I0dJd01sb0NXamUyTGclJnZDTilVXi8qQjVv'@;
put 'LkRCNmUiN1shL2ttQF5FSzkrXXEyT2Zqek5aOT5vSjJCRXFMJWsxUC9rY3Ija1tbJTxkXys6YTpdfnRrNHYjU0Z6YVJZbXpNT3xET2RkWXZ7Y0Z0aDEkXy5VWFBPRUVSXktDMWRQYGRJNFVfdE45flg2czQhMyhrM3hlfTtCTz1gQ1kzUHIoMTVXKktzQy50P2liImN7LzpmJGckTV0qYmAreHN3'@;
put 'eiMkTWR0LyZ1UX4rUCtzKSFYQnV1dk83U0R3SnBOWjQ4UVlkW1VQNTRWRHNeVU9NNlV3WC8odnQsTnpnbCpfa1pRRTtCYjhASW9NXl1yUyhTP1RbPjMzTkU2bSk6UlpiWnUpNjVmZG9iejM3bjhaRk4wYmh4dT9HVjdWcn16UnprPWNHYDZvcUttNlZWfndfQS5ZIltpcWguKUQ8c1ZdKlU0fX5I'@;
put 'b3x1OntZZmUsNHElZmxrSE90ZDpfL0tQJHVbY21+S0lATU9aamYqbDgqdjs2OnopbDdTbzw5QEMufkBUazY2Wm0rJnJvdSpBVDExPXk5Z29bSGZlPTp9YDZyRGxqP2J0TWNzcStFLip9OH1EaG5YWWEpQnQ5VF99fG03WFAsR2o8PTYiXmtHI319X1dmdm9SJC4+WTldLmFEMlYmYTE2a25hdFY4'@;
put 'fnpldEF3Mj9ST1B1ZlQoKCQzIUZ6T155Q3E3c2ZJVF9hd3VhUktqTi8uQEM1KF1OfmZPUiJuaDdYPWpUOS8xdmtqcU9nNW55PTBDdjMkTSVGVWxQRHBOdmdsPzkldz17Mkk3V14uaFpxTzB8bDRUKVBhQUFCQkd7eDoqXmF+dnpONURCTj5qR0d3PTY1eX1beiEqWiwkSi89bXJNUjEpMzFNX0N7'@;
put 'VG45OkMvfTo1XWdAbzBkXXZgbVViZT8jOzBJL1Jxb0RBXkApfVlzY1hEO2YhZlc8ezdIUjI2dnxUbEhBWVh5UHwoLFRIVE8vKTNaSHNTdT1nTSpve11DTEJWcTdkdmNKQGk4QG99PEhGaDg6JEQpb1IzVWhRVk9AYyw9JEA+aXV5LmY9dDtjaEg3c2JHVyNLMmBVczJuQixeJGZYNUBpNGNTTmpb'@;
put 'OUI0UWdlRF5sNSpqXi88bEQ0OHVrKWlVODpDX1IkY2N3QF1OOXgmIjNjS1MpKTQlPG1uJFFJRT9dIWcvLkVZcURtTyNLWUUieXU5bE1LMUI6c3ZGX1VWNj5XI2Y1YUM+V0o2NHNAZy8oRG1obSp7PCJkO107Yk1RUXdYZUpfU1lMUylNbEdLQGA+KXI6PSpjYm4sVylXZD5oSn5zfFdbWz8/WVZU'@;
put 'VjskTlMiYG9ebFlybV06MUEsRWopQiI1bktjPkROUy9AcnZYVzEsXW8lO18yOitSZTtBaXJ3fmNrZDJadFZrOjxwQlFLcEV2KD4oRmgwXnpBXTkpOE5qb1VkS0JyMyhMb20lTV5DMlE1IzJHSElxaSpxTW50XlY0djdBYkUkMmxmRWJaRWxtOEk2OT45IUIoOSEjOXgjN05YdWgkKVk0O3kldDNi'@;
put 'NldSKzM6aWUjdVsoYiF+MnZnaihlPCQ/bCRMOCF9JjRJOGVoZEU9Qm9MOlU5Rn4uTXZgUG1Ma1ZdI3IoZ0JTditSLkRlaz8lPElmJTk1O0Q4LEJESk9xQG5GRGdfd0lRWS9HLjFCfW0lUy4sbEAiYkhrZC9IMUJrRFBXVWdVYEsudGlOdCErbD4xTVVEMEIybkV6UFt5IUZpcGouRj8rWSxRaHI5'@;
put 'L20oI3xKKDs9SXFaQVtKdSxJUElOUm5UcV8pbSFHRT5yM3t3OHhSZGtqXmA6dDREdUA4XUh4X0R0SkA+fUpzUFNpZmk/MXNmNSZLL112bnNgVHUiODdCMWhnZm0lPXZYaEZIdUUiNmtbMnUpYixfNzJiMVBgaGpKfTxVLyhiKkVXUmQlb0JTWTBCdV1MZzloKiMxLmUpMmp9QGUzOyJfWiQqTTxF'@;
put 'T1JBfGBbIjA5RkBndiYoPHs7Yj1pKCo/dW80UUQ2fX46MUZZNVNGXjJzR25CcFA7JXYmJDxOQWdXT3xQSUwzSDp8ZDlmajtHZXlXbj8/WncrVEU3c3F3c2N9KHVANDpWXTg6OVZtJVpsMTNAeXF4Y1JFeEc1NEJDd1FWIXQuPiVIWmVvcn1fJFZUJEFSMX5RYiR0b2czXz53KDtlM0kmbjd3dmRo'@;
put 'TGN+RktGfXMuY25USCRRUX51Q0lwaCkjRXExbmVLRSN7WjNEXUZsalZYVzNpeylTSmBCXXQ+I04qNjg9KSZeQl5qQ3Z2VVF2VHc/IXBINExqYVhHWjRUWnBAYToxXzxhXyJ1bzYyM2pYdyokQCMuWFNPLkRHcCEhUTVMMEBPSj5jcTByOHNuN1szMFdoRjQ5WzQufGxQazJ7ImEzZWhUUChHQmVm'@;
put 'Kzxsb2RSJFNRa1A1SlBXYyREJEM8LGJHMj1NSkhfJVpuNThHWF4kJitgfGhoNDk2JV57a1daS2s3eiVjMTtEakVKX1JpU0RlQlAyUiVbcl0/ZGRwaF1+RnFSN3ZXUjVONkYpbjI3MDlKJUVlWFBnU15GckJtM08kX0t6PFg7UlZ6eUx1LzdNSk9zS1kjSXttbXdaVmxpOGNAbmdkVE5kMlgvU114'@;
put 'emRmMyNIc14xPz1Sbzc5dzddcklKPTlqJk9aJSFzTTA/fW8pZjBsWz1ye1BgUlNbSCZvP29VQjk+a3doKiNPLi47eHNMNXMxfn1YS2Q2ZDxvTEhgfmd7VV87M1J6TTZAMGg4WSVxWEoycVFSJHNWWCJKdE8vPEw3KDh9LlIqWkVqNEdhKmZKeXp0cz5TOXQoSSt1MiRwM0JMeFZrOjtnZWY2bTtm'@;
put 'QnR6UHZOaSpQInYyeHxzVSZZbF88RiJKJXtgcD59P2g0O3s3clokeG9dKFY7b2tkZihwWUo/a3pBa2NhTUpoVVs2QSt8dVdOW1A/X0RzYi8yYFdWKlRyI1IiY0pMLHhfb0A5VHRUbTsoSFdpSko9RCFkP1ZgKiRDTihqZzc4Z1AzLE4mUH57TnNhI3VqeTUqd2A3b01WWHpaU0B2cWtAZDFSNFc5'@;
put 'TDJAaWtEOCFuOUJ3aVAsbkw7MXlXVHB3bHZEcz5ZOlB+I35tI1R3UzUie0wraGUpIVc5SlYlNFZyKj9gWmdYLmxVYS9mb0tnXUY2ak8pQkp3aV9GdmZRUGI8ZXsraTdjVCxiJUtPSmRzflk3Z3NnNnZwfEBoXzdDTUx0MHlrQXNAe045eTFtIzk/KCglOHhJbGZFaXR0I2IwM2hWc2Q6JEJBZ093'@;
put 'UFdKXUVNP0QjN3FhQmlRR05RQV1CYVZEX2ciUEUkaVNbNWpWeVJdL0prbCVxRzVMaispcWV4IUdVfFtjNz8+PDIwfEJhdkxZO3JsQC5zR0FuSmw0OT9XKzFTIjRsUmlzTCIkYy5OPV1saXhESlh9YHw6cHFtdGNObHNxeU8vJChXMkJoSjRwdW8zal1HdDhsYHRITWNHM2JPX0IifEVoMWk1UnBr'@;
put 'MDRFXWlVYi9rMU85Mnw9Zz9qNSQ5a3A+bHFVJn0kc3dzIkdDMUpsKkheLDMhaX1aaFtQRWhZUTEhVTBVQ0FUWjRnfGIyaXo3fTBgMUN+dkQmZE54VFtod2pMZlhGKEpHY3IwWFdmLlVXOkF1ZS9aR0k5Ijw3PWl+OzZXVGYyZDtTVEpNblorKktrK1o0N2J+TjZ4YU41JF1Ndz1mblFlUTRBR15w'@;
put 'MCwhNUpFbUNmVz46W0V0VkcmNkkyMGdpQDRETXAvVkcmaVQ7MDRaWzZ+Yk9ocl82Qno1Vm88KVRQUEs9Vl9ufDw3N1IrLFVPWGU0dk9gQ2BYdlozO3dJWEkrW1JOb1JERGxfbjB5QX1EdjM6ISM5Nlo1IUd4UHxIRUJFOUYuP3Y8SXckLG4/MnFjSTtTUUZaLlFyfUZESUMsP3Fkd3JVTGZfQkIz'@;
put 'YT5yXzhAZG4lWSNrJj5ubWBfZ0lJS2hVLng3VWQ2Nz99aGZUL3pEWWclbE5aNExoVT9XKTliNixpIzl+cVI0dGhpekJXXzBHaltzI3ltRSNuSCR4M1BmPj4+LyU5U2pEP2A7NnJ8SDF4TSM5NTNvSSUlS1RQTXxvYCNUUndTfGZ0Yz87MntZZEQjJG5VR2xsX29pMGI+IVZZVSpyXnN9KVF8WGVA'@;
put 'Yz9yfV1mU2x2VSJQJWNbfG5QJkJXc2syKXo3L1M3STBNTSYoOGAzTlhzK0QsUnB1PmRBaSIwL0Izamh9a2NsbCE8RiExMylpdTZuTlEqNHUiPGg3QX05VSRrfGxBIlBad3xNblhbeTc3c2xGN1Q6MlI1dC55Mm4peG0kbGcofjhNams1M2x4K2U+R1JAdVozOikuezUic0NKJUx4YCp4WUgwNUlq'@;
put 'MiFdc2tDaCJ4KHwjXVd0KmBecUFtUVN+KE42R05RdVJ4ZmdBW2QyOSEpakNIVk9DTjdYcmdhenczQDM/OUgjVkxMZWRgbUVwWWgzay9PITwxZVdVWEkoYl9iJTh8MCkqYipbfEpyPzU+WktFQ0hkRiFSWlFIUFU2bCNvLmt5Si9IUGtzeDBRSz5ueVdlPHdyNEomcD42ZiJjUVdLPEp9T19pM05T'@;
put 'SV59YDFBWWNjXk9eLFhfV1pYaWwpaXU+SXJNNT5mS1U3P0JNSiZEc1UxMGFRbzV3M2paUWt8ZSQsYCJtVUpzMEhXI0NSZkxOZDI5RyUjTTFnazRwcCtARi9NMldkbzkkbXU4OEUuXnxuQjFQR0s5dmo7QkI9KyhVS0s7XiY5U045e2IzamcxbyZpO0hOdUZ+ezIwPTpHalRgfkFwaERwekNKMD08'@;
put 'JGUuNXg2cTd0dz9YbnZvSDIqRkIiTCgjMHsuTGciV2pkLyZkVE19OE9POGp+azRLLHJdI0RZQVBMTWlXaVd0PG1sKGhxTyM6NkUpYUovRWAkYnFQPW1RLGAlcUlBR3tTY2QmaD5VNjtrZXx2KXQmJS5UVGM8L2Z+eyRmWl1lW3E/ZyZWKyYyYzA9ZmpBXV1SZzA1ejY8IWtNbEwpfTJhWkhUNFZr'@;
put 'eCpERE43TVV9JlVnWFJBVjVNMj9GTD5xOTsiMjBHOj91ZmtPVlJIeEVpVlNsVTR7R0dnW1gwNW0oM2AjKlQkV2lqZ34uJHVPcHQkVWZwKGpjTVF+d3QyYD8kIWdNQWlbYn5PUTU/KXR6L256bWdUbyZ9ViomZGYqaT1VMSQvUStxXUQoXm5bYl1LXj9IISNRQ2lWPXxJVEM4enwjfmNpTFJ3c2Q/'@;
put 'aENebEo8SXpVPWw6eXl8V3QvfWY6KVBkMV5tQF8sJmF5Y0tVfW9LOXZkciZiaX0ldClTdiMiOVY4Jj4kbiVYJl4+eCVmWih7Lks0MjJZS0xAMTVHOjpoVWozXV9ZSHpmSmIxJishdjVSZGA8SENfXyx5c0NsSXJOOilKaih2IX5aISleOkpaSlRyTSEqc0kkUkp3NSFNTVRiKGhjITI+W0R2Vlcy'@;
put 'TzcyXzw4cTI8LEVvMkZBT218OUM7dSNsWGJMSyxuM25Ud18vQk9GOllifjM6bTxCTmEiOWt7QkBYLHRGRU1wTHZ6fnxyb2pPWShTMz43YCZdNXpnN2s0ZWNUVC85XUovL1J7KEYuVDpoMWMkdW5IJWkuJCFHOGdTNzZjU3YyZHh4V0EuOFBQdk1ZIzpTUXU5Q0ZfNVNKYiJGImVKTjciUFo4e1Iq'@;
put 'WGxPOjwpb3Y/YyZHVDgjJXIiQnRwWDVXQkVjQj5dUGcqSCI8fGgzWVEvNE5ETmsjZVQ+Rjt2cGdEbioiPWRhc0xCe0lheVB7WjU2RFd0diZPYyNGSHw7dT18UTEvTCUkSzJvWXt2ZkQ5PHF2VnhhdHEodz9iLDZOZHt0MlNrRS5eNUBnYF5qNSg3YGEvQTI7WnF4SUxBYjRkcm5APnl3OH4yQntd'@;
put 'YDM1bFAuTCYvfmZZOD92aTFhdlhpd0pNZElbcXEmQXtxNXlBX3RUfFd8OWVUPj8+Pj1rISR+SFtfQEtycHRgZ20rYmxUdHJGajQ+NzVKXmNDfmQrPHJMWFpecnZUQzJbPFltd1NQKi8ubkZ1WU19PElTe1YvMVllTigleDw/VHdfcWdET3VxVVBJSCp3fjYpUm9kSS4uQ1lHSDlfdltyZF5gW0JY'@;
put 'I1lVJHYrRTllLj5iMUhRMGZIPnxYXiJOM2xlJVZVKjZPPmRHZk5yW1RpOW9XPmMjZFkwUCNMMWpTSFl7eyQyNjMiaDp1Jll9R1JpJC9ieyZheTg4USZdcF0lQ3RMNFFLfT16bU14ZkkiTiNYbE0hWEJZW2ZURjJjdDl2dkFBI0kwcFA7UEFgMTgiaCp2MDpseFhLQVFaa0x5IVddI1lHOihkTE9u'@;
put 'QjxZRjdvem5OJlpWcUI3Kkp0ZSRtKUg7IS8iWHR4NU9BIVZwPE9IY0RIRzNMZWJnYisvZjQvSztxVGdiT2E8cHFQfWcmTnUpXWdwaT9FXnk3NGpdTVYjMGdAdC50b1UyWDM4ZGxLZlcpLEZ0RVBhclNFKE1JRSVFa3hVN2hOLGh6dTFOWEtVIWNAeHJUU3lHd2pMZSEoZVBPelslV31KY2RJW1Br'@;
put 'eXpgPXlaPnVjXihCbEt3OHlhWFd3RVJuUnNXL19OaV9qVyFzM0FdT3dJSWxFfERvdGxUTjZRJVovP2t1Nj9VS0g2ZFtUREhkRSpCbWImemQ3flA1eCIoa1MvI3NOdWl7I1VaXWl2JitCKnAmKWh4eHIsZTZDNnJvTlhWMDo8dWA4bXF0MWN2K3VeZ04sTz8pYUl3S1YjKTcxbDRbdzdGPnUyTUZ5'@;
put 'UU1LQWZMYlI9TGNJJFBjWV9ANzI+S29pW2RVcGlJTEkwcGY+fGBvOytQQzZOPlpsMHY+PTJpPFV5TXBYfj1idkVIdWwzbUBxLmEhXlNxSytoWlttRm09I2ptJTIlX1QlaCwsaGFYKl1KRUxjJnJwW1NWaGtaR0R8dytzS2tAfF5fPjtwVVEvW2RdeWhEayxwJE08a2U8PUMhamg4V3M6QWI+P3ZF'@;
put 'KGNWNzlXKTEmWVFSbn1QeEoibzRNMnYldz8yayk6Jk1PKiI5V1NDK0FmTl1TJmhHdzxmJm81cmdHbEw7P3wjTndtez1LL2NreCVlS11JQTgxQyNzelIjdiJ+bWBZQytELmpbLn0vVSNjTnx1ZE55VSl+Q0ojPHE2MCQlNX51Pj0/NCg4VmU2QGl3QDFQMGt3XiJJQ1pLIU9GfDo7RWs8eGhOb0Z0'@;
put 'JDYkdypGeDQmUixISDQ8TElCcEFlOSpMWEdbeEl5ISNPT3l3KjxsOSFKNEkxMG5uMilublQyQUE9YlVIa3IvM0VzYSFMVVN3SzxrPmg9M050IV9ON1tiL04icG9gYGNlYi8iVFYxMlNLJk5VV0Vrfnc1PXZ7USlRbiosWyMyTEQ2fHMsJmx5JnZEOF1rWkl5I3UjTSt9JSpiamxARikiJXtRJCY+'@;
put 'W01tcGVwakNLen0jU2wsOk0jST1pQnttYkV9LHdHW1FwKnJIMF1YPXQuaWcoXzROdkUkIWhMfEFaeitQe2pnXjZEUyhsXXZUY0BrcSt2MSJzSDI1P2g6UzBPZDg9WH5SOUdaaCE/NF9eN1hmfkspcU1RcjpFfEBeJnl4PkBGU3dyJio3LCtiejRQL3peNm9xd1QwQnQkbTF5SCVXREBnOTdYRSFS'@;
put 'RnQ7KyF3Ul8wQzFZQzN3WzcqZWNdRz1BU0l3a2wvQlVWcj5TaCx+RmQrRlNKZVFVe2E/azhGaHUvSXVUNkZgI3ZCeFZFNFZ0WEc+Z0BMSWBYdHBhTVpGOCJBPk9jVUEvI2heS3JQY0FAOEVAZH0/c1h7MmNOd1VlYkxGcXxAJXRJZkI1XThmdHRTblZOXlFOVGh7YU4xfXk/ZGRjNk12IUBFRS4x'@;
put 'ZW11Sk9CO3wqXWpMP0xHcCRPKm18YmFVZVVsa1UuMHtlRndgRT0pOzA1dTtUSmUmO25sa2RPYyk0XlkwZ0teTT0hSUYwQVRhNEs7YCRbWCl0dCJxTUpTLmokeF9ZZm84NzAjN11YLEdmOVp6V3I4enBlZjVOS1V5bmI9cWtyUzM7RS5tayJlISllW0NmLnFxdzdLPUwzfn4kRkdrITJAYzlqN3Fa'@;
put 'dD5xZmUsWXEqQntGPl0+K2M4YGo/QGF1cCgxMjRwd3J+eDZkPlpVW3U9SzJ0eFBOOmpFOTdrVnY+TF8lcFBIW0hEMkRIXztrRzYzJVJSZkpdbGk2KWhAd3A6Sys0IlJsXUBvODRfTixJWzphUDNhclMuN09JPjtkZUVlOmlyUEJtdUMvc01LUCI9cCx9Yy96JnQ3Xz9dcnlZPER4XmNYUW1SR242'@;
put 'bWs+YD08SCVKfEplQUg0UGtDP0Y6fTNPNy5LZlFJIzVPO0prMXcpVGddIUFDRiJKSjgjW01SSCVSYzNXY0pdMCZhJmNpUnR5ZCtVRTdvOCorVnt+L3E6PTV6LEB3NT9ycDh6MndMRm1lMSZtWGRVYm5bYGJ5VWVZXUJ7Ry5gPHpNZkVCaD46WTdBVVZKNERxQTVVKkdJYDJ6LGdZLmZ8NjUofSMq'@;
put 'IXx1bT96b2U4OFRWPWcwfGQ8czY3d0kmOnlPMnJpbG04KDhIOVYwMG5fPHc+PXljcmE0dV8pP2M+JiVMYjolTlFjYHNnVFBHY2Nbaz4+Li95QFExanxsZCk5On5Rdns4enQ8UCVQUmB3cWA1NihLNi9LZHZGRz5RdCtxQn1PM3BfI2BCYXlxa3xMLyhNLFZWakZ7SWokZUwsNlkiLl05LnkzWHA/'@;
put 'VzxFLG05PXFCKiRid0g1NnomMWwsY3FhIktWVV5sNHlwQSJOLGpBLDYxWltrYFJLfXQxUXVLPik2L0lLNUV2Vk43WDg4ZWxqKzl3enl5eGQkJjd3SG0sSV51cE11LFl3RFJSUTcmYlFZWXg+XS9sIVptRjNEbm5oMENabGdnTm90Y1hAK11xUl1mRl1wW01wRyNaUE47JmRXcCpKTz5dSXxedkFk'@;
put 'aXI5IiQ0e21jVlAyNXl4aEY0JWJiKlgqJFhdJHNbN0lbWTIlKDpMd3ZCLnZIUTxfVDcseEBWel12RjcyayV7KDRlVjl0cVh8InNfXiIlYTBsbWg2R35tU05bPHE9YGA8Z1NeLEpXMW8wamh2cEdCVUt+fmorOWxZY3pyQ0RRVjl0PTMlPV8yT3Q1OkxbN2k2Jkw+aVpxJWNANnEuXnFNJXp6NyZW'@;
put 'QixQayJIfitKWnxSd3lwUT1rWE5ZeHVmfm13dHkmTTBaSHd8aTZ+azA3UEZMaTlOOVNWJEBUfiUqaE19LlRpKGBBTXJLezpiRHtmRmJeL0tCQ15ZJHxMUSpkW3owYlMuOz11WXxSKndRLiYucygvK1l+UWNFTStxfFZpXWc/Mko+bWxsVVlwN1BmXUBEMkJSVGJuUURoUl03VkxBQnl2YFMxdyF3'@;
put 'UkgvXik9MH1wLiVnSGdiYlVXKjVmVmF6YVdrYkw3ZTdoJmZuR25USGAiOHlkdCgsRDxUYnFycyxYKXwyKkdCYFpHWlBecDZHW3VIOkxfOyI6MCVZdGRyTmBrMzBCLCg7MEZKOXZjQTtpQm0vLEQ7KyQoIzttUj1bYVM7aH0kQXViQihxanNtcG1zcSNGKCkhYGJZKzpsVVVHMT1ZaWx5PiNeWGI4'@;
put 'bndvV290d2EmXSZRXk0kWCl2WUhad01HTnRGNFtLYV4/aUA/S0s3K3U0UCh2IWteWmVeN1t+eyhwb2tYUE4pVlFAcFU5eXJHVkhWR0JXPT98Q3k8YChGYWFsI09jNkksNiJIR3hXR0ldLD43clRQe1FXPHJMQnRwKyQrSWElWy9NaHNfM1Y3O2UpSmdKcTE1ZD9zVWYsY11LOCY4LE06NWJPdVU0'@;
put 'UzZsNWZkd1ZVaTM2TmIwQGRLYFs4cldfOiVOc112TTclOCJRY29oRm5DRnNkVFl3I1FALFl4fWkpV09pdXtqam5iJkV0WlkxdVB1JXpEO3hpR0wrQVdXdyFVem1PIiNPMVFENmpvdmpXTShfUWM3YVN1PSVrOmhSM0VWfiNsRjxxPDBRV14pWyhRdFVMRGFVMWp1Z24lQygsJmBMd1pwayozYGBp'@;
put 'fU1iXzNCYi5vRjBIRjdER3R9MTdnIyopbSFyMVdDIlg6LjdPMEk4Qz0pbHV8Z11UXkU0K0tARG1PPEs2N0p8PCQjTShHN1hrLDVtQDhyZVpER2Z1OEhEU3t8amkidEkvTG8zZ3haYzooRkFwTGY1YFRrKEZ2SkM6SlBeZjxXJUg4LDNPN0cveFppJWxSZGVeOEJgdjdkUko9STBuRTJYNT4wN3lQ'@;
put 'bERaRGk4W3lndS5lcD1ER2FpPXc5b1pWYUxPbipaPE8+RUhLLE46RCw4QWxzYnNtPnleVVBTSXhFXUtbajYsVU1sdGNSdyoqUEc1RmZ1TUYrcX5xbFp8RTdUKjgiO3hTakZkaV4lXVU1ZHR7SD9DRExzM0NdYzNJemtseWVNMlYrMiQyNW8yViI6IWk+JEVlKy9aQX4kemxWYSZbMChRM19fbD9S'@;
put 'XyRZfntIME86UEI7RXc4c0wzWV5ednRqXXx5S1ltVyVTRkBgVzc7OWtPb0dvKjYzN09EIWswbF5tK15XISJYQCFDRCZJbnI/JmlRWWNEYjQpVypPNTJbXVFTeVFsV11BcjRVcihuYlRNdy5eIls6QUQhSDk2QkRuW0JQR15NTyhFcCZ6Uzk7WGViKVJYLE4xTF57VTI8XlBdQC5UNElpI245RG5i'@;
put 'JDA4fTRkWjRuSUh5Rjw1JGBZcV47bnB+MiVsdVlJQDxPP2R2bUAzcn56JSh1RUNJa0xOLGV9RzxPaFByeUZkQklENXJ5XVc8cHR9ZixBIWRaPFd9QE9hS0x8YWcqX0FvbWNKUC9KQ0x+ZFh9Mz17TXJdRV1RQnt3USl6fVZPMjEsaCZSalhZbjJDQDgpJnsmQE5eJUd0WVI8Y1VlcFVQQkd6fExB'@;
put 'LiUvOlRkL0AySFZbI0ZudD90QGZ9bVlsdjIrWGJ8WGo9aUtSKXROaUFTZC45JEw8bypBI1svV1pEVT9LLEYsNFlJJCR5ZiZ1TWw+R3pzdmd0LlIrfmFWNnNIN1lJIXYkfCMvRkNuXzZyfFg0KjhoPkE2V1RrWnJldjxrKmBTeVk1UXMlODMjMFFfTXVrP351biJSXWVNYEdrI2BedlBaLDZEN3VC'@;
put 'M0p3XUpGdC9neXlfflQiJUh6MikiKFc8OlplUzF+W1lwOXx0NnRlS1lFTyUxa3lmWmtzZEEje0IkRSY1fkI0OWxkK05EQSVwSmE9eShQaCZSSnw+anROdURxIzRJPnVVcH1oflguYj8iaEhdVnFVSXNPQDMvTyloeHVVM0pLPk42WyVfVGU0KkdjJWZVWjEjTnA8bVFRRm9FPSMxRkhKVDJmbzQh'@;
put 'Ln0mWVlTSyErUTxCV1FtM1JAJjU5WDxDP31SaGxHe0JGNXVacD1UPTx1aikwU0N8YCFQdUA0YEpvUk1dWUtBeT1OWDFZImpOeiM+ZH5JODouOTJgbmBTajYoOmhJUmImeHRTcX1LZms2eFRiJGpUU0AmciY5KFNRTSwpJkdfeGM0S18uZlZBVjM3RDZHXXRFQl9SQzEsOmFCW3ZsfFdrMGZxQ2t6'@;
put 'UEVDdGVSUFkhKFJ5UWhkT1F3YSIhOyJOPXhwfTlSeU57d0cwXk9Heig3PjtPaUZzQVZyZHh0czA7RjNjLy9KYEhGJmEoQkg2RFdPczZhY08iWjcmdU9IT201LCVPcCRafSszS1VGSXM9PF9OQSR1InZ6a1o7OTZdIl9NWHFLIWZxInM0OTxtRXx6ViNAIyxxWiVLOXtrVWsvZFF3dWppTEpJejoj'@;
put 'bFt7QF01VXxDdTBVJjNQYTtHUi4kKSVFYSFUSiZNQkJdRVgsK19bXighVjJqbnZ+TWJHdXlOakBKfkYpclNNaWM5VDVNQDE9KH59KyFjS0t5OGB+dzFnRGtOP35YQS8oUjhoPXBEL2NCez96fCFqZkRyKVZ5a2UrRGcxcVM5enJicT9FJUkjM1g0aHtSMXdQWzJyU3YiZ2FPNFIzVjlGeF4vWVBO'@;
put 'K3YsPGBZX3AiK1J2OF9XOzo+YnU2OixsKXsod3trWGQ1Rm1Fbi8pU2VSUSRGSjVmSk54T08sPDNAW3pHUHBPWzd0eXBTaTBMUX1JUlIrY016I2xxZEhAWWoxUnhRSzBRNSF6WStKVUtfVShxSVpYY1QlXUNRUn0/QThNPnFgMH1VJWkpdDsqS0xoa3BYan1HbSNBOFBieVlUMG5QITxLPl1DbmJU'@;
put 'Qml5UU1id11nLy8wQDRddlNrblVGTDFUcC57bjUiZCY2UHY5Kmw1ajB6ZyF6NTtVfSJ2b3AvXlBldF44dk89WG8oSExYVDpUeT99LEE8OE4iTGcjTEU6NjNbL3I7c0FONHVTbS9rIXBgNlM7PSUjc0pdc0IlYHRNQ2hpQGJmd1ZnVE0pTnRLMkxJIkw2c3Yxan1TXWlNW0dHQW8rK0F0Kmk7I01H'@;
put 'WGRKWTxocjhDP3lSUzpYQ2VpSiQjWV0sOF11I215USNTUSJQLFFOK3MveT04bSRmVFZ1LzNhRC90TFplQ1ouNnk8WXR2QkRuXVc1WjshfTxLcDw5dVdSeSZbaXVHWzJfT0A3bXUkPk0yOm0pQStIeCg/W0d9NyFCW28sYTVfbzdkekE1WyZpYCx9IzxaKzVacDk3V24uNEx6KEp1Tysqezk9eEhv'@;
put 'd0FRcUBrfG1xMCRYOFhpaC4ucCl4Yn5Jc2EqU0VFNywzcjpGaUlVSVJ4ZCg1SzFIbTxSZm4rUm8jPjV6anY6VTsqMmVLWXNlTSJwREpDUGwualYzXXguc2xoRkhSST5HZ0l0RmxEUChNM3lOMnRJJkY5biF5V2YoelpwVUZtKCg6XTdNYl4oQXhLfVM+Pm9AaWVtNSkyJVd9L3kmaSo1NFhRTUY3'@;
put 'PStqVGtDdDsrLnRreH5Gd1djb3dMW3RTQylDOmRCc0EqakZ+VURWNyVmYyxIRjQ6RSVaS0N5aG5qUX5sMG59WGE8TiRYWjxFZEslOEtnNSg4SDR+JDtQMEVCRzRKRn52Vl4kJT5bIkZvfWNgPTx9WDlQWnk6YGNGfFRnQDpuLm1Abl1uNHFmZltfak1FLnpgLDxZJEZESWFlUzcpL2I5KCwweW5M'@;
put 'ZzQmMjs/WFhJOzxiRTxyTjMrWisiIVo3WWFhSVAmeW45cTNoQms4MSFIUEgoUzQoTzl0Z3EsZGUodUVmI2tnfFhsaklZI01RM2FkKT54bExAd0J8JCJCTkpxdH4hN2ImXn5fPER9XWxZWk13KllnJVUlbVJSPEhgflI8WCFUZl1xW0NVMi9KdzxEWkJXNDMwaXdPdzpmaT08ZjNrLHZkU2xCO3l3'@;
put 'eENscHg7eHRHQVU/NUhafkYvRClATENCLGRoLzgiO007ITk1NSo6dSRaMjduK2JhKmU0MVJOQz0hND5nTnU/Ki5qRW48eHhfQEpPJEtXJWtAMlk2RnYlN11ldGxuKkVdIUcrSVQ/e3tLSGMrUEBFU0MhKTxkdGx7MT84P2A6IlMmZUZtOzpVZ0Y7a24he0QmUTloSEp6aFVxQnQkS1RmMHU6SGVP'@;
put 'MzF0fEZCaWR+Rj9hfDZYMEcyJnB0aHAmbCg0JH1nZEk+dnxUNTc0KSxeenBgLlleb3JWZ2BKSjhtKHlAOjRsZ3k4UlkqdT9rXWRpSj1SMFJ7Mi85SGliZW9xLC9KLl5ZdEtaNWs/a30xQEc2QGRoSW1KT2Y+WUB3fW1pT1hdTi88ZTRzLnx8V1NfZWNSbXA4P2Y8VTAqdkhrfCk9YV88TjA0d2Iv'@;
put 'Ik5ISytwLmt3RCpxUWRtZCNsUmt0MFdmTyphb3BFZH4lJXdZOD9jbVdwLjElN2FMMWwvZVVWSk1CRDQuPWtTYFNPRTNbOWxRaFZmZlZoTkZWNkg6MXB5KDtscCFgbzcrfmJYYjB2Iz1xenBRMlIzdUI8eGBNTTAzMXUlfkghd0x7JnZ0emxGdFQkaWZ6Ul4oJnw9WEVRRn0mIVMxSUNQdXdHUXNi'@;
put 'UU8lX0grM1BDYnpyP2FsenpbV3B8eiI6S2NMQmZOR3tKUSxgPGdhe3U0MClEcVlKfXEyUGxgIzM8VkREOzpSaVMoWnhPQjZVZy9IX0MlUX1Zck5PLmwzRWRKKUs9Oj4kMTA4JHwkQjB+N1glWzJUP15bK2FxLjx0SUddWSNhYWc/KEZmbGJ7IlM6VXN4fCEhJmQ8eWlRazk9JXxMKFBEUzN1Vlt7'@;
put 'UXRsQWFRMiRANldJa2JlJktKQjpeRklkNExQRipSLzx3RW8sdE42VWpEd34jaDJfZFhGTTNgd0Y4ZH1RJjJsbjI/KG88dkBPVj82I2FoeVBwQFdJXV5fMjcoakpmNG0haiUyb3lpTFFDNSsmSSx8cGNkdzhzTFRbRjxQOFAxPjxdMExSVi4kZF1JZkw9WFhGVGxGZWRiZU5tR31eb3Z9aixDLzE4'@;
put 'bz18Qnk1WyloaTZ9RkU0JEVqOjJDdVZYJXFVVTdhdGt3XlU2OjlHRkxuZDUySVNvUlNiLDQrRktZb0RbMXAmUyQwV2paKlRVfFMzST5yWCVCUTVWK3N3XjRzdGw6TVdXSTBpQ001d017SmxzS2pqKS5tSmZTPkdtaEtnLn1tbVBOUEVVXjhOcSUsbiEqZHBSXjgqV3pXXl96VCN1cl1xcihTWUY8'@;
put 'a0QlbGMwfSMiPTs9L0c/P0UyPDIuNmsmJGM7d2R6eHxsSklmSV04WnMiWzx8bFpYcStYKCZPYT46OHZ5cUV1fE5fMGB1cCYqUihCMCZyXWJ2UlhaYHM7dyFEbENvOkdFMEVhRmlkJkxoNU9gV0h5a2B3O1hYKUQ3KnVbZ0hrTCJwdD4ySW52MDFaWCpiJCx5SF1ASEZSTS4zWl9EdjMsPWsrQXdy'@;
put 'aFNjOD5Xe21udCRWaEVfJXRiU05yTlJ1by9eXUVrQylzW2Nta0QwbyVjS1IyPHJ9M3soP14iUDxEamxJOjE5V35ARCs4IUNddU5QVX1JKz1mc2ZMXik/Tno8TS4sUDxNbzg9KD9YOVhzc0FpTkhtIzNZalZ4UStQPURMOVlGeH1WQmlvYTVjPmFwNmV5TiFWNT8odSpJa1R3TTdbLnB9LihFangu'@;
put 'bS8zbnEqUXVNI2FOYWhZQCpnc2RnSWJsL25JbVU2QmwmdUVJckRwLE91bTUzSDk4eTk5VUhCKyZWNiZjTEIxWTFeIlFhJEwzNkFSPTVTS31ZWWNkbiU7PFBkIllodz5bWHczW3FMVFQ5Qjo5dWI/OlI3c1lSL3dhNk5aSmRpVURARnEqe09+UXVXci9UYkBjZGYveHVGODpaJDRfMUg7KzJRaT9W'@;
put 'JVk+fHd7ZTxKX0E+KyslWjd0SHpqJGxwQCRAcl9MPzNWbzFKMXM6JEliVXVQJEs7QDpmMG9qNiNNdSkuXX07eVQpY2w2SUZLZnRxSmxAVFMxN2goIjU3dzA2dWtiUEJGR35dOVN7JU9nbz5NVyUsS3NII1piU0tlYnAhMkhhUX0/WXBbXVRgJC5oUWIoOnR0VSRVYUsxNk8pWyV4VG83bjche3la'@;
put 'LzcjMSwoNjlSfUReMUJxUiREV3ZhTDs6dHc1JjJHelBwVFNtZFZPeCoiOXlKKU1XZHd2N3V1OE1RYDsySk51Q2pNK0xXOm50c1l5ZUBxV1FjYylQbEBrcmwlZEsrNVFDWDJAJC50VERSTGo6ISFrVldUdCVxb0RUMmZbWyh4eElvK3w+Tz59e2JeRyssXSIjVUhWQiouYCxMWFk4TWtkUElCPUNT'@;
put 'NmJkYU9hamx8K3xPMkVxMH1Vc0M+eCNNNX45T3hVaSo7YmoqIiFtIy5lcE1WIXBpZ0FZUmc0Q2pNV306NW9ZfC8oR3h3NyZmRkIqRTwsVVJtP3AoYVt6QWlhdHhgM0ZKNl4+YTQkVzRiTT5lfEZnTlB7dyxVOz5daDIpYU1geDJYPGpqNDU3YnY2cmQrdDdLOzUjVHA1VG1RMVhUZk52bSYuQ0lu'@;
put 'U2M5bld0UTpDRmZDSGpsVjkkInV+JlU6R0V9enJHd2k+IXgoNDp3KHMsOHleSyVscEUseW8kVH5kVVMvUGtGXXQhbitLNF1wOSV9PksrdnRXVWliMEVvPGQ1XlVJJk5QfnN3M2s6cDEyYSQiLnlUIShNLlI1ej9ocVpncyNQRVk2WXlGJWZdZzl+PC4hcVRrRHpwP2Ype3l8O0RIfGpiXTVZI31w'@;
put 'IyRzNmVZMG1SXnFwPl9WRl9MKVB6SCs+WWg8NV0iSE1CdEc5VCt5bVYrfSZrY0MraX5BTVE2fS5mPHlyJGAwMHpfPSl1QSNWeChad0taUThrI2N3fURMInN+fDF6LzI1XV0rKUt6SEc9cklNbVM/QCxYUW17a25pUmRvLldXTXRRQzUwREdJTDNBcWltayxMPkJESzJifXAzVFs3OFZ8KzxDPTlm'@;
put 'JHdiIiJ1big6XzQ/WDhMVUEwaTN+RUZPPlclI3dIT0kwcToqO2xQWDlNUCUmNmFjMDJUdzY8czwiNSNySUdsUixnWlsrV2crP3d3MV03KWppSXUpUXlFIVl+WCQ2LzZkMERUfjE2VjZpJjo3N24oOiRmK1R3VyYob1pzbj9yIl5VWEclemswUEBDR3JjP0dSWjBWVCw2Lz1feWxVeHxeek5LInxw'@;
put 'JXhZOCYhTy4sY245N2FbdEV4YjoyXyt8dnJbUkpwdS9+LDtVRzAweEBxVX12cnhdey5pYTZgIzVOIz5xIW5ELiV0cTlOfCFAR108fmFTMGRAbEcmQlddRz9eUyI3O1lMIVMpRjdmOT1iYlFGXXJSXjM+RS8pZUJDPktle0Y1V2csUUxAQChTQlo/W3p6bDIvM2JEeCkkYEdobF1Ba29AL1BFYyMl'@;
put 'Oyw0Q3Y0SnZFe3Z7JDR3WjFYPnhRJEVXJk01W284LE5BU2tsPkpsc24se1JLWWZmaHpZdE4vSHxwWFpNcks+KSpbYHlWfX5rdGJGZnspbnd8ZFhfcXVleyZ4a3ErW0AkVzBicTh4dG9KYUBpOmtsUXhfREFBZ2tgVFBENEohUGJwWCR+O08rOmQ/NkozTz55K0wqJV19WW59ZVdgYzEmOG5adCtY'@;
put 'NC5RT0k/QnUwYnA4fiJbcn5WMXw7On55VUZCUUZ7fGdwVW4zMyNbfl8zWGJHamF+SH4mP3FwOzIjR31JcHo+T3NgR2RXSz9aKS5EO1JsL0Q6e0NycVBEJFYmU3czSGk8OE1HT0tpL3NaTEp3Sl1HXjImcCM+dVopW0JZO1Y8KH5QY0hgKihOcFIuKG5uem9QYSNFQUtKMGdNPDoxTGJDRlY3cVkw'@;
put 'XV5ZN206Pm0pKlo1bG9SPVdqeGcuSkAuW0RdSTljP1d6Qi9Fd3ohRmBZMSxASzQyRkJ+IVNWPWReTCFjMH5bbGxuSmJTM1tDa0lXfTNpbndjOE5NRS5jVmBaKXgsRmFQaG1AV0VaX15yJlB1ZlRAKTRse0pXRmdpfl0hRjhkZko9MDVoQlpXRW9LQ2w7MmBdZl4vZlt9QHxIKyQvOnwmeXpXWnxE'@;
put 'TCpeYnRYTnp5PytsXklwSSh8STt2Mkh3TX0zUHA1fkJCTWE5KyoweTQ8clAsa050KmEvJm5IZH1qP01PdSFETWZ8W0BkWD5tcXErIn1rRFsoaV5pP0svZUVeQzZuKT5SRV9weHchQ3xGOGdhczQuSmddOlZJYDszWXIzIyFheVJ2Ni5VMVBLYUtzOms+N190R3gsX3F9XkgwLklGRHZFcU9jbTFV'@;
put 'IVE+aFFKT2p+W2NqOls4cD1uQkxlKnF5YjQsd3tYXkwyT3l5PWZSOHxFOX08fFYsL2FvZzwqUShjRkA0b1M/cn4oMU0jYkE0TGIpIVNCSmN3KUhKdT5qLnZkcl5rayV3dilgaE9WdGk4T1Z5fm8jJTBYc1JEakVqOjthSVducHh+e2dJZmtKc114c3Zge2Y4UWdfNGNML2VVVDJ5eUdkb103NWR7'@;
put 'aEwwOSVuOmhbQ1oodig6MGdgTCI3Xj56fUc9YyRJJDMjOlZOR2FoW3FOWDFhRVUzKitTKUFXX3Y7fmQ5ZTF8UmlDakpYQDNSQjJFWCQoP2k9ciFuX1VuOHkrdlBIe1tFL0xsInswT319THwsTjZnZiNjcjo4anFvKFV6VStYYFg6WituIS9zOVddck1WMkpUSFJLRVZfW3hPMi5HMSJmYyIpcERE'@;
put 'bnRLVlRbNy5ed199c2lHPSt8JU1pVX5lWEZvfEddLEZtKSE+JVtZPSw9Z0BUTV5eN0ExeiZqUGpPSyk9Qls8JjQzbHo0S1lSNUslT3pYLEFVfjIlZT9HZ1dlaFRbSWI9biEwOXc0JlZ6entONUg5bChiZGkmOllGOnZCej9yNzFRMlk/eVFfZGpuMnJ0aEErJEVrWVhLW01Haz1gKHU2T2NoNU9J'@;
put 'bSlALHMwbU9ESiFMcGxGJn42MW5LOmJlemdgcl9uRyRMQCkvQFg3PyFeZmgpSmJdXkdWKTpRMDU3IVslWUh0bm86SndMWVhgREY9aldvP3AkSlVqXTIhSywxOD5HSDhed1JKOSslUWxSJCl6fldiJU5oRWR5WktoSm9ydDpoLGF8SnxlJDVKKyFqdVJsJjo1JHI5IU1FQHJRNUM9Si4yfCpOPV0h'@;
put 'eF8yZDhWNikqRSZjJGgycGEpSVB2THAxWShwJSt8QjE2O3U0LkdlOy5sVTZsYH4/ViozY1dTTjhXVGFiKW98RS5nJlU6MUx8OkI3VXd0U2p9ZXZmYHlITyEqaG88RUxDcXRkaGxUZ1olIWBuKGc1KV0wdV0kZSpVVm9zLyRHPT8oJk97XXVCa2dQKlFvUUs7Xjp+ITxSRkt9Y05HcXBOZz4uYTlh'@;
put 'JkdvYGFhdFkhd2YhTElAPmB9RUhMeDRtQ1AiKiF9YntRTzJgb2owdG4jRE0pUmFAUllRIU03Vn14Oj9OXmwwU1BxKmRJcURjd3YhRXVhSjBHbVJFaV5gXSQrMUovJlBMIlMjcUZwWVM+fi8pcUZlV3lRTT0hOUI2WFQhb3soW0RAPnB3YEgpNjp+QyxuJFZpQHA7SVZQUiVrTzlEWTRgczhxPSlJ'@;
put 'Oitycjc+ISo8KiNjUFlffENqanN4bG0jVVdLSzo1RzA9eFoyMy90YX0rOWx8QU5aRCpienFhekdse3NHRCNffU06RDouPXJEX0EhbVV3flEqXSNpV2BeW0xpUHVibHdnUkZzWDBfTGs4Ry5yViRoQXpDXStERihBUDJiM1lsMHpnd1Y4IUlTTzIxPXQ6e0w0W35gfE9WTzJsa3ZnPSh+VGN2Nn18'@;
put 'MWZ7Kms7O1FGVmFgLDlLX0dxPWBlRTQwRzlUIzAyRWspP3RddCt4WyQ9Pk5DPnNgekFXYDIwXSwhVyhVI3U/I2BLMXclbnFNMGJwcjo6JFoqVGBNcCR9ejJ9TExQT3lDVytHe1dGKy9JQGdmMDp0bHA9MisvPGIjTTVOIWFAZj1bM1kwaWIpM097YSh5USgzeUpXUjwkTDg3I3Esc2U6aCo/VWoo'@;
put 'Il9IZmg7dzRKZjJqPGo+UDt1dytQWDhid1A7aWhXWzcoUXtgQVUvNnFzIkQpMEJHU3F3WTdvWnBGckJmdDdiZ2VWLlFjJGFxXnxnTn0sbFJPOjQyakxkRGpRfExWeEVje0V0aEV8aD9Ba2B+YE5GO1BGMUJgVWp8bnpJLi9uUDtQbGV5fnloej1WK1ErRTouJl4wXV9YWU1MKlsmUmtyVkpjJXJx'@;
put 'LixQLnMxMG18NCRjdCszZSFSI359OixKYkteSDhLSVslVXB9XyM/R2QpbUYoOmFhdz9DaXM3R1VWYX5GKHp5en10Qnk+M18zS3QoTWY5Qz58bHsifWgwW3JQLG56WnFmNUwuNG5kIzxXNF0jJmQrXkl9TWx2fD8sPjBbVyVZLmc6MztmITJkK1dEcCZTPS9oTl4/Q2pOJFkhfX1saStQTCRMZG5t'@;
put 'L35CZ2w2VGBOYUNfQFRlWGBGdk9rfSkvI0xTNVNgNz5CSyF8ayVMflJSTHkvNnlQPXEqSkhkaFYqRihUQU9yUiJjM2glfX1OS0FNSHVQdFAub21ISUpuN0JRJjV0WyQheDJmXUFFKFs9WVtTOCsmTjwqQE1jTDVCd1YkdHVKeGZ0N056P3NdKD0hZlVCXjJVeyhlbHRRUVZablYkWmJ1OkMkUz94'@;
put 'cSUrZEV2L2BKal9lRDF+S1BDe0J1b2FkMSFpRTo4a2w7V2hKVDxOdCFnSHQ3YUE4OWlkK2p3IylGPUheeFVMU0tGbUAwK2xLU1R9UDZKS3IpTl8kIWAoN2dZSD1QUFRBM0J5KlFyVW9LPWhWKiNtKipXfFFXelMzL2s2aFBRZk1acjdGLzx4JjR2TVV+ITxUZikpTUYvJT5KUjYoa3U6MTYyeEFK'@;
put 'JGlZS0dbPDN4czdXYz1lcEh1Nmg7RXNHYyh+YzQmIzdJWUJRbHlKY3NsPVBoIlJLNHtPUSJXVDxSNl05ZGlZbXRHNmBMMjVPUjVvan19ZG9TYll9IiVpWlF9MWdQfHNWazE8UHl1OVk6ViRNQUs5WnB+Q1F1VE1kRCk9MlNtYHM+RTVaWFFJcChMbCZ+YUF4ZkNUKWklJEpKM2NzMFcoWEBzdWBk'@;
put 'Xl5AcCpUeDFYcl5la0RBPFk2LyxfPEx8dy9lK2s/LFN6YWBPMFtUbXQvZCpfb2kvP3oyI1ZneVZ2e2h+K2FzXkZoWkVyPTU/Iy9KdzF+KjZKIjIzN1AiZHg/SVgkR3dKKmk1LzUqbjpEM2VWbjVIWjpeZDReekshcU13bn0udER6MnslPyIjbnhEI1psPCZ7PXcuakhvNzEvOVkmSTJNSl1BJlEj'@;
put 'IVBUSEQsWl4qSTRTdixOWy8wZFpVLFZHQGVuSyYqSSpoVGU0TmloVnplN2JeOCR3eiZnWWtLMWwsSFozJS4oYD93LDIsRGpbdyR7dXNSK2h7V2hsTWJoUDVWTy46L1FCWklxJEcya0ErcU90PFdYNG93SFZ8TDIveEY+eE5geTJWbzFSN0g9QGMuTi5TfComWUtNWDFMLGF3XmFBQmJvX0A7aCZq'@;
put 'JnE7KTAoTyhGM3g5XXxqSzlqNiZIKzlEOEIsX2EiUEtMLFdpblQmYExNKSgwKH0hbm5XKU4pPj0sMTh3amdfVSZaNjpMRnh4PHlkPmZAZE9sNyF0fHwsQ005IntGWTs9ZFolXngxN25LUSM3ZGlqQG9zRSphXUJAYSx6O1MlZ0wpekAkanc5X3JHSSlzUT0kKSFaVSszK058dnZ6NCp4JSNZXyVv'@;
put 'WGFyOT8yV2JkQyYqNUtrOzRrJGNfdl1wS2RMcyw+LCssfXxoejkuNVFrPjdXUC9bc2MzTEB9QTlGSyRoTzRbTGtzTWk7U2g4bHFPbXpNK3h4P01CMihEZCxCLEZ9cCIjP0lkV3xsYFIlYmkrWiMmdDFLJEkqTypMJUVPVT0uVTNYaDRCMjchKX0oMTkiPztPemo2NVEsQkZpKDZufDhsdypwbU5a'@;
put 'Qnp6d2hSLnM8Z1prT0ZgenB9ITxXbFZPTXg4SkIvKzQwajh3NSsvTUIlSWhzTkgqS3JBNWBId2VEWFBAZC5VPUYvWSJqcjVPWDxMPiVQWCU8fTJxdXZ1fTI/NiI8JDMidzkvZ1M9LHlienJRQlpRImVbLF9iL0xtdVZPOltsS2dsWCh0VmJtcFhKPXdFWlFba1sxLlNGY3R4TEE2UFtCKFQpMXc9'@;
put 'RXB5ZzFEaiRzT2ExQS9pcG53MHpWQFc9QD5SfnxIRWpHIVp6UVlqXShvbHpJfFhDMlsmRGw0M0wrNig4XzlPM0BASCNgN351IjUpc2JWLDRGUHBzLyp8JSZlUE9xJlJYWV46NVJmbk9gWUhiSCtkSiR6JWRAT2VocmFZe1YzYz1mRWRjTn05RHs+OUZHVV5tOTJAYkAydz40bT1XXzRlZ0NpPFg7'@;
put 'NTJ1SmFuVH4sLm1iVEZ4QVU2akUzKDNxPkplJD9VVzJXc0xuOVF7UE9oZjVgIVBxWEVDQWd8c3FJOEBifm1ZVWVgSCVtMWB3RnUoX2h+V2xwSClbMVQ+QDV7JF9dLEsibzhHXU9KRCxsUkNgXnBGYG5PU154e3NDNSZJb1pKR1A3ZDl9I3hUUiVkWVkhQHJdYUk2OnxvWjE3MFlFVEgseUxmb3M0'@;
put 'a1pnRSsyLGVfc0lEemU1T15DTUkvfUtiZCUsPj9faHZmUWh9biFJNCwpSVZ4TXpnKzV6RzB2KipgV2wkYWM1KXlYWmV4Q1lOPWxPIywsREhQTHklaCs3RyRqa3QhXnhNKXhjfnJGUk9+YSJSWihVTGlLL24rWGdCfmhbI1VTKEYxP0F5dk4uMlsqZGVqZkFadlgyZHJfbVpTMn1QWywiImZ9UkU5'@;
put 'M1dITVQ6WSpBUzMxdE9jdDQoLlc9SWwzTmomKkU+clEkZi9fKEdLZndVS0Z4NXFBLkBeWnFGWy5sOTNEPV9mL1R7T14+T3R4SXdPX1speUc/Tyk5Lm10UExteWN4JFIhbSVMIVp+dl80fiNJZVhadDBkZSZ0RVZJTiJBQ3lePUtud3JiMUIqTzxgfDFrMFFAOEx1cElpZVRaMmlUS1REXlIwKSJR'@;
put 'ITg4ZCtweXt7cnZgPVB1L2hoO1E2SGIhU1AwJnpDNXV9YWZiaCtBWGc0N3Z3SF9iNiQodWR4ZGhwTiluS2JlZ14oOnw9KStWZkdHK3h0S3krWzdDRjVFMHo4OGx4TTlPWEw6bDFSTmFaenl8fF9ieGUudCp5SXNde0xZfFI9dUx7SjMrenU0d0Z5I24ueVNwfnE3TWg0ZEdDVlpEe2F1MGx8Z1Ux'@;
put 'R1goWS94ZExIYn45Xl5uYWwqIUBuYWRWWX13SW03QV40cjhAVW1bfW90Z00/RSEwOUZKLCNlVWVFNjIjMGp5XU8jWDM1UFBNeFk6IU9FL1lxI0tFN0sjd2sxa2ZZaW5NPm0pNlUkbnZUWiRFdlcjWzJxKkE1XVFCN3IzdStbMEJCUiZeT0BYMkxGTndSRF9ARiMyPiNZMTAqeyNAfCxSZi9KVGk9'@;
put 'L1dJVm1jQik3Rj5uYUM3VzFAOEFQLixALEhZMmtlYiY6TyZDdk9tYip2dXZwcCJ+MXNKV2BRI0xhKCRZKDxfVCg2XVUoUXFbOldySkNVZGlRbD1yV0ZSSHJhJmxlVHo9cExGS3IqR28ldU9wYk1LampYO0xbbCp6M0UkZE0lW2d+THtXezojMEBHNStYNW5ybSt2WkAlZXU5c2d2TGQpcDB7KTRr'@;
put 'Xk00bVhoPH5Lfkx6fT1BK2EmXzJkJHNhcDhMRHJaNE1RR09Ke1A4dDR4Ryg1OXZ0Q1RFOm0ie2QiVE97JStzdSxWelRFPy8kK2lScHxwcVk4dEtBcX5QTylAXmYqYTVsSWAxM0FkfjpxMD1TQlVoTig7alZrMDk9LmszIipjOntqO2Y7U1Y0PlAzQX5rUl1NPnxpRTAiWy4/Q1YsfWhedUQ6aTt4'@;
put 'W1tAb0UwMlFEI18yI15zOVhEQU99KmxnX2I6Y1VXd20mYjhtWDRWZFFuNCxnRmZGTTE2RmNXPixPbGZKMHh8Vjhvfk1iNGteMX46YXYxQlBXclQsd25AUV8uOHZdLExDOzVYbFhrQTZqV2g2WTc6OGk9QV1hdzZ+ZGhzdC95cTgqLC4rMkxOQ3NXUzFIdl1scnJ8fnAsRG0hPGkqQjozXVAzfSg5'@;
put 'WT8xSE9WPXxSdGdHITAhUHZFdjVXK1tHRHhPNDp1Ul9HM1U7eXo2PVJnKU58N1FrbWxlPTgmZG4uR09wYXtXaHhYK15oMG1GKnB0UXRzJFYkQjlAfERYfWxSemdeU1J1bj1SSE18RX1IWU01VXhAJkRDa1RqU3JxPFI9bFhsflddUXVvdyVZbTw0NjdqRVUkQkQmfT9xJDo/ak9oPTFlMnJ9eCxF'@;
put 'UFl1Y35RbGxNKTRWUzxYTHhWd21PaypMe24lfmt9Ik1Rc214Rk0rRDZrST40QE1nJigkYS5Ka2ZdekFSamY1JUleXUg0fUt+eVhmOj0jM0VHTjxzKU9JfTgoRz9RfX5NISVdQnxqcTQlRXBgJiVKZCM+eCNARnMsJUBOdj9iYUZEfFMlSipwVk9LbnRxVSRSMm1IR3U2cWpmTyFPaXUieF1YQ1NC'@;
put 'RVdPdWRNWCtFem8yLz1lTEBwfWZPKyo6STZIZWhqNTF0Rld8fTBMbGQkKExnJD9xUHFIO357Pi49KUNeMnVQSD1KUjliUWJ3SVtAajV9KSpZfjV2b2w3TGA/dUBsWCxEfTF8UDJTKD5Ta0hqflYyNjwjMSU0I1JCNU1GSF0hUUMvRTgqenR7bjhrWmBiZEtnI3t1a2dPKGpQVDouNmV7dXNYbVAm'@;
put 'QTlJOip0JSFee2ZfdyopLDx+QV9IaW9pLDJFUzNPYElCQER6VkEvO083dEQ8LjFbWHkmK1cvQUs3RTppdVd5QEZ0ZWUyMjpOKn1jPVVwX2Mje2lTVUh2RWxXfGhrIzdYdm4jOX0kPFliMS5obHBsMmB+VXxuQDFsfTRnUWY5Xj1hQ3Q2YS83WGg3OE84ImFnQU9+PHN8Nn0wbEomQ3AzOVAzJCth'@;
put 'bFcqUUYoWFtQMVdVdmZEfHlRXjthZ05IJDpyeiIzezJ4YTNYbnVkMl57PVJeOSFFXV5bTyxtZlUpYjRWcC8hfXwie3lAT1BlPF57XV5eV1RpWF19T2ROPWtSdEhYRlZNO0NFK2koZWlpcTlbRHc7fk0hOS92fSw1UkxSfUR4Ozk9fSt5MFV5QTpASmd2eDtPRnViQk16d1E8MyYzRyVEWSY0b3p8'@;
put 'PG9oNTkxakhneClbbFklMmlIWlVZaUorWSFNcFR9ZHhgNiZuayltfV87RV1yVGh3YXBJLFMrXT15a04sN1Z3e2ZnIV9TTyZvYGN0Zy4xcnZaWmJHYj85ZUFDZVsyO34vcTZ7L0FgazF2KCt+UytpYUtIbHcjbC8wPkAmWi9gODBxOXtua0N8JXElKm43UWI2NzJoaUIkKUh+SCs1cEhtUlNEIUNp'@;
put 'ISR6VEA8aHE9VkVIeWxoTUQ2SW8oajU/PjRuaFMrayt6JVc1SHpOeEk8e2BtYDooX0tMUlplUypFfjh6LERVXSgsVlRFe3hRQHUrd1E0PE0sOHFeciZoMWJWNEMhUStqdm1aZmZgbXAoWmlNZSNtO25GP1I9Mjg7Y1VmTF0+JU45S1svXig4SWxpJjFIQUBdMHJnR1Mmfm8rLGc4XmYlQndrV2ki'@;
put 'fEhZakxUMkFGe3pmc10mL0xZOUxpOzVdPWhiRjVtSF4lXykoIXI9eVh1XThyMH52JFA3P1haQmYiZEo1VE9QUGE8dmx3Jn0vVjpAIzVPTV4+TTUlai81dFdvPnYwUiVPRzssbXojQl5QKF5fSDk5SEthSno2bGN0QURNOF52a25RbDNkL3c9U3QoaGg9a3hyX3VtR2Uwbj9MYS4kaUVFeTE/cXc5'@;
put 'dXp5YDFfZnElQkVdc0VZfEVUTzFhUlZ7c1lbcHMlWFApdzhyPjpleDM9PVEyPD9sSUExWDhvKjZgYU5YajohNkAsOmZUSG89bC99fDNCZn1ofmo1dHNNUT43RUBuWiUwNUMyaDc4V101VUt9IVdJKzNqXTsvfkAhbVJyTlU2UUFCNVUzZ3shcDh2YH46Y0VeXygxUkNgemlsUTlEdWZQUXksb2s8'@;
put 'MlNdPnZbSmMjeTIrdXg+UW52OVlmWX0uPl9leyR6eVIvNyEqO15yU31sQlVCOGtJNk1MRTxdNV8yR3pjLng6aWVxSUh0Uyp2JWZMJVBfQFJsMUY4UGRWOzooSTJzR1VkMW5HXk1ER3U3cnk7KWF7O2xwMCQ7I1BibGhCKW5rajNsRVRScW92SyopWXVCd1owOzgkMik6KUFnVmJDKUBKOk53OkU9'@;
put 'dW5PdG5KVHRLcnZ6K31mVHFgZj8ySzR3YyFBX3BNckEkMX1LZXElMiQxQnN+MCkjdV0hdFBPZCg9PjI7eiVCOnl+ZEhNTl0zPSlZKSN0U2s+Y115Pi85QilTUHNpazxndXpoY351Tkk+azova1RKTlFJX0w/d1EkdSlfU3hCang7dEkreHxvL1EufTEhQSlKImQ6VG9hMnhkOnhIW0JWRUdUdT12'@;
put 'ZXFwZDw4MWN2eSYpOyplMGhORE4oUCtGdzFrZUhMXyF9bip4O0tIQ2heSiVVYm5MRTFbaE55fWFKd3R9SnVkQGxLcSUmXVsoIUkvLzg1eVl+OTUxSFROSj5zXiF8UDZVOz8sVEw0UEBpIitOOmRsQm9tVkMyMGE4PW54TiM3KWs4RWF4UzgiN31zKC4ucURYVmp1PX52aGdCMVpNdjw/RXNBRFpr'@;
put 'OCwsMmNjazdXREgsRnlEbXVgIipVfXhVeD9rdlM2PDNmWllrNDRZJTsmJVB+bXNMPyF1N0JsLz9QJTVnUzVHTTQ9fEtbcikqdD59PzE/Xk1AfDRNU3hKfmxnanhhJnpfMGEhd19UVzljP0VPcVZfN1NTQktXc2tPe3omInY0KF48XjhMUjJbdklETC9JMWt0MSlXJkksfVpYfSF3dXpYbWd7KyU4'@;
put 'W2x+YnBVIlF7UkgpIWZePnhfVnoyaEFMTTEwJVg0SGBiaE8vZ3AvImB+aENIR1o2d0BUbX53L0hUMC9dY3ZwZDhfdmV8em1EMyZqI3wsVU13QzNkPUNuVnxxSiVvRypNeitnOjA5OFZ2ZHRobGooaD9rNUJuLEh0aCtNQU4kPkdsKUE4Q3tGWSN5ZU9bS206OCJjK3tZY3xJNkkkRks4cUBdMH47'@;
put 'dThjeTJRbDRUWnxnVXE4dTF7Z0V5T0xKSGpmd3teKTl3UDw/ZV4xMjpTTUBhWlYuKFZlW1FNIUg8QVk7P2R0NTIoLy9CVUF+Y05ZOkx4c1gpIlFSWigoQWl3T0hlZD9+KE09X2d2USV6cXt2aTchMmlBNzNiKXk0aE5efF81RWhKOjQkNVYoJT1wTlVNQ3BGdlF+RWZkXzIqd0wyOyErLi5JN0Ai'@;
put 'MEhgO3ssV2RYKzZSWlhWRUtieWwhLGx6eXAiTk5sI2w7JlYmIXZjT1dINEd8R0RpaiFKemNUR2RCWHNBdSxVQSF2JXlQfU1ocjoyLkM2fVZQazNJeXU/O1BFWklSYVN6NEFhcnM5dFRCMjFjXkxrRlpoWUt6IX5KRT9uUlpfTyE/d3M3Lm8kYyxSZEJPbVRaNDBmeSEwI1Z3akdUMU8qIltsRV4j'@;
put 'KmlEWDA1alZ8Oj5xV3NtWWQmKDFAPUVJYVViYCFkZiRyS1hmV2hjP3RTS3JKeEZKYCx9TV18UV1rbmklODVSbDVwSn4+N2lAU3YsWj87PWdCOlo0N2JdSCJDamlbPGNqKzhwQ3FPcFh2VGx9O0h+X2lebip7NFhjLGIuWm99VnI1JWs2aD9DOHZxPChkNitFTkIpNUhmbloua28kJFZeRS8zPnov'@;
put 'dSp4PklQU2Z3VUVrImslIVZ6OigyYUJ4WjMxfjgoVXZeQFVdcyk5dFN3dDczSzkqTUZQTl9zdFBCRlpTOjE5enZbaCkvRj8jMWlsfkJMN3prdXE8cG5Ed1NmaFhNYW9pMjBJM1l9TVArekQyYih+Rml0TnZycEhZa0Y6Uj1GeGlZWTw6eitbMGVdNzVRdGJVWm8sUmJiP25FalM2U3osc1JvfiJU'@;
put 'MWoqaj0mJnIyZj9ZPitAMTByay9bckZnQWI4cF16UHksRDIwZVEpYStmdz1NcHhxJm5uM3BtekhnIkNCTntTL3pMPFNUZnlUQW1RdEBAPCI5YUtvfXlzO3laP3s3WllvWFFdIk0oRUd3bDtiaH4+YUp4N1BhQjRFJnQ2MEttVVs6UWBMbnVCQj5kJlh+LEAkb0M9dFI0W1VANnZnbld3fV1DcCg/'@;
put 'PGQvNUY6KENSQjRQNHhLUWFxaVB0dyJLfDIwOTFyWGtaSSFaaVBVNGlLYE8hXWswVStTRCRYQmdiMmFvR1N+fj9nNHIuQDhEPzk2NzhXJDNAWztrfFN8Lz1Hc3FNNiZxeU12UkwzRXtzfnFTPE52S3MvdVR2RzBUY2N4UXA1aTFOfixhPlRIdEVDdlV2fD5mVEBJQWtASnZKOk1OdVBXUUZmNFd+'@;
put 'UGM6Im4wSUVGNzs6bnhKOH1hJERmQWNTcCIsInZ4OVU6YmU8Y3JkL0ZHKXZTL3ZXWClJNXQjV3JhOTpjTj4mR3h2Xz8hMVBgTyU2ez5iNil8QUApNyJ9fXR+eCEwdHNwJiwrTkkhTUxVQkMhU3ZQNFQobCVUY1JrNyo/YzRbbkxAPW9wTl9pbCYmYnAyNE4jVDNqRUJ+PTI4Z21LUV8sdyN9NTtE'@;
put 'e0khQyJjUVRZPkxGcHVseH5HRjk7Xzc4XUJNUW1DQC8/NXoqaEU2Ylt6dWgxVWA7MXlac0FVWWFjTHtkRUhRd2F5aVFrL0xoTnNuLEVNKWMudjZXXyUwX2BHRz58NG1XXXQjREsvQXl3bGtYUSZLJD48LkBiMzNFLDBOJGt1KlVLQ2I0JnFIMkwyc11pfH1RT3sjSU5KJCxAVzZyTkdoIkVRRVFw'@;
put 'a1g4MUdYfFpXdl8/Y1puRD1FNDp3UkowSUs6JiNwNjI4OnQkPkl5PyJDNzxRaFBgOVZbbnE9Pi5mdC9XJFNTMSpAITZdfkhoaUVQJkZDJWsjdnBsPD5DRTBlaz9tN1psOU96QSVOME08N003b2l6LGJ7XWY7cDxKTVdfYm5TV2MlRXkwS09tbkMzLysmZyt7TUNNMVlvVygjRXtvYDw3ZVhVdVFd'@;
put 'YGFMd1F6WFhjMylXPnJYeUkkWHE4YlVadTlmTGs8Ry9XYSIySE57WU8lQmwwdSpIbzFpd0VMcyQqeE46ZzkrRkdPQG9VSWdSQiZoeGYjSyxaZjBmbk5HeC9ab0h3YlRHU2EjM15SIUdyV1g7QzJKaHljQ3JEUGRbUSUwYDtMeHxVYkNrfmR2ZSZxb144NzNUalNncSxbNnQiRk1+PUxZVUZWTTNB'@;
put 'NER1VilSLk4oM1hXWS5LK0g7RiM1dE4pV0VDXlU+bD1hdXU+Xjl+cDAyNTBIQWJzcW5pakUpKEouO3ZxWm1XOGwjWiRTZSkwdWtIQHUmXkhgbU1eSShhRChCOygwPkEqRjV8bExsfi4yJkhmcERWal9dRFNWIT0/fnNZbGpHVn4jZT8xMVd9RnpHbjosamxrfktOUzp9OH4/Uj5MMVN9IyF7dzhp'@;
put 'PThuWyEqYGhuNnA0Z0dqOkw9KlM2SnZQTTREYWd7PmJURnFUZ3dxSyRWWng4dH5LSUBjOCgmRUxsRGg6e2pwPTkhO3lqJTt0aj8wN3hmQjJXUnxzUl90ZV5tb3tZVlRVekg7LEQzbUpEe1k9UWYyK354O3tjem5GWU1iWThiJn5heS5UWS5NOGF5MTg+eyhORCN1eHhCVzw6K1Ezb1RdV3FfVlY4'@;
put 'ODA5ZVNvb3ZIJi8uUjxKRlc3MWY7Q3QmWG47e1lJMj1HTmQuJTt3W2M4UD9hVz8hMURAS1lPbGQwNmcwb1dIXjJpJkN0YkgpQF9fMGxKck8uJDx+UCw1bzpnYDBuJDlLYGRLYVJ1Pyx9fC5JWD5zPVsrc2tDL3ZhWnN6TyFUXU1dKF5fQXtaeFNhOWw9KVl9aT5FNiwoPlF6KyMsRjlESCl0MWw9'@;
put 'KEQ8WGVPbzp1RTdKdyVgWVRgLDgufFt+K0MpeX5UIiMsY14rRTo1JUFMaVdUaV1aWDUwRnkvRUMxJmMqRERPcShWVjdPW2Avdk1OKzImeGw9QTl7SzJBZnRra3JqViJyJFh5JjZbRjVKKjBFbyJ1JkM7NEolNnw3Wj1MPGEuVFBmOyJQOVVvMExOMXwuJTRXcFgrS2Zmakx2U140TGkhSUE/W19I'@;
put 'SCY3Z0lydjYse0tAcDBLejw5Y2gqbWh0REl7KDp5dVFwY1N8LDRNJjJZfVVNOWxOYSEoakkrZkE0IkA6TzF2SlEvMlIqc25GVmlpfUVKNWwxO1hEdWJkLFgrJUlAcGUldXlASDBhZShtTV4yQC94NHIzYEwvLzhVfEE6eUN7LEU6biNWaDwpfXtvcFJmd0RzRzJ0VC9oO0lYezw6KEVUakRDMi5F'@;
put 'UkQjREJzUUN4S1R6clk+Vil3ITh3PWp2YzU/SzdgSmF6aFppbjtLR09USHRDKH5tKyE+WCg6Nk0/SVMxY2ByWiExPGNXJUM9JmFXbGNtI15ndSgkYz9vMCJbfkJBcE1kbCUrdyJ1LmpAN29nO09gbChyI0MuXU1uY2U8SSJeX34uS1FmfUo1OCF2XTcyJlJrQ24/Rm9WQXMrfDJPRUIqK0NgdjJO'@;
put 'MjxwRTQrVF9jOHQsI0pvTCJVaGJ9Y3EvaT5Nbk9SU2xIaFQ+IXBoIjBRc2p2Pj4zWFY9cEtOXXAwNi5qa0wrbT5dLDAvNjlXKlc0LjNCMWMsaWdsdV0ue1BtMjAucGYlNDcrKkJXLFcuTWxPN05wfU01cWU6SntzZVt2WXJgI0BoXSo3TH1eVVFiM2tSeXVGfEsjSXtNfVBmUDY8MWM4JG0iVy9H'@;
put 'WERHYUcsPkspRWQyVitlRiNrSCgpRXUpMEh4UGIrfVI0cTVDYDF3Xm5hRUFuO0gvWC54aTgsOSUwIiswOnhBVTVTLyEmR2R7OWVGQG5bVUE1OVRVM0BwLy4qYGN6NEhPOjArYW5AMi52UixXcGVDWVRpZF9tKCZxcENRfTB1VUgqeVdsfnZRU1d1NFpsdmkjWyRDI0RDeVpIdk1+WTcpJlI1MVFD'@;
put 'dnFyImoyXVomNzxVezpFfm07aktzfmN1LjdgcjN+IUUzNWF4XUswanRMNFg6amBkbSRyT2Z+TUtqX2o4YD1xQ2JuQyVqakh0VTRzUXBOYDEkQnd8fkw4YyIraGx2RDFDK3BRMmc2dWZlMUZ4NFdNdC5iTn05ZSYuTTJsPGRpLkBoK2hrOHBleTlRR15uUyRnNn5+fStzVVtdbkdXO0dTUSspdzVa'@;
put 'ZW17YGB8TU4lRVhYTmppNyVYbzQjRldtelZ5XkM9QHUhPS55TGRfRUYybVBQVCRpSHJdN2AmKGxmXXtYMihaZCs4WU5HNVVxM0ROMmBkPGkvRndBViNraS45TmR7ZmFVaUc8W3BoY1J2WUQweEtRTkZYTytCKX5NSnFsXkt6Rlt+QnVWUzRkNEJWQCtQYCtmIUt8Z3Z2ckJQW2tnbFMkak13azUw'@;
put 'eEJCL3JVeUxhZkMiNE5WRUJfSD1uV2Y1SkFVeiZ+RFpeZ0o/VFBDelNydDQ6KEExMXgvSTV3NyFfIlMsVUheaHYlRXdLYGUsJmMxNDY8SXNhO2pjUVZjdi9pQm53fVUrZjxVOGAjUl5rI0xfPlE2amlTZkwjcj4zQCRVQUQzU3FtZXNsWyYpUVA5TWgubmJobCo2R1ohZVg9Iz9dIWpzVGUqTEk7'@;
put 'bkhoWVVqVnglbHNhbitiWyhPZWxCRjwmdHNoRSEuViM9T3FuO21QJnoxS2Z2RmZNO3w/YnlqKWRIOV1uajgscyRsT09xX11mdWNFWyxiVXE3NUgiZmswNkJYPWc9aVVNcURmMmIjbD01fn5qX3FEPThFZTY/anpFTkUoQGF4ZFBNdjtLcHNGQ0JZd3U1bDJbKV0sOiI7dEVsZ1ZuWStoeXo7MWN4'@;
put 'KjhIMmEsY09mK3dGL31TMU9SS2M1RCFmNl9YMkpRTEE9VjtuVWRTZUFEUD16ViVrYixRdjAkI2BEZlMoSyZVIn19Qy9DL3ApVC5MMjkiSDkrXWV9RXo1cmNtS3oubH4xcmc9I2g9OHl+O3hYQD9qIl9OKXw4Pyk0dCYsKn1EdUIrQl1zbSt7eilobkUlNCx1cUozXUAyVFomPUQrI15ySEljOWVH'@;
put 'bzZDNFd2ImpIcHNZNmkobW5OaFp0XnFTSyEpZS9NVWRrZVU+NnVBPWZYImM4YEE4LypJSGUqOUhqMHx4aGUzWUpiQlBbRn4qdl1dS1J1eCwzbXFQfHI2ek9wUlhVaDx1dyVKKyJRIXtwd0M9fkNhMEV6cVpGaFR1TXg2SmhaZEJ4Jk5KNi5NdEFUYD0qVkxhflB6SGBdb1l3UkVtNEY+MG01N19f'@;
put 'KTh1b2E9PnJfXzJGe2J0YTdRezYucXUle21wTFlVSjkpTUVaY1FsXVlyNS9HMGNiP3sseWlhVj1RKkh7dVdXW0hRMl5LRVFBZyxAdWFoOChJVjxRT2JYIzZVbFk1ZHJpO08pJFFLUCRZUmVGbVdSZnRsTDB9WzAhT0R6fVYuaC9deD1yIzVpTEhoaTwsPW5xLjd5Ql51Smt4fillQC5rYk5Kek5M'@;
put 'SCRldUNDY0RjUXo0XnBiVnJuXis9cFc6SEtCIzBzL0h8Wl5rRGxoLHw7djA9N2A3TWBBNEQ9Ym4iaWJ3NzJSbjRPNj9tKG15JVpld3BAJC9FQ3Y1cHsuNnBXNT1LeVRVOkc7VURSclU9KHBjfXxwX31Udjs3azQwS1NwRUhDeU1gT1l+fWdheitYTyZEXjE8Jno2ayM4QkxRIWsmeDVrLCNfMSRt'@;
put 'NnhVZ3s1JD9Zd3MvUVJqYU1CLlNnJGIieWwwXlgxa2sjczM1bnhCX3JuLGZrSEg3KG9pSTVlVmRjfUReVHJDfWpwYjMuUjF8JWoje2U2ZHd5bXBTYlRLSGokRF0oTDAlSixneCg/TnZDR09YLyZaKV9EeDdJdVlhakh3ODxpLzxjVW1oMThqY25ZcUklMFhFMUY1NVY3bEhFI31IUlloUztMTio/'@;
put 'RUdJPXRfcE1RNS9jdUtyOyZ1TVNzSV9IdilVfVEmJT10Yz5WZ01BXTw/fX1SSzBhRENELjM9OS9+T3w7UjFgb0hfbihOMkA3JnZAajpCZ0BxTmJrT1NxYlVZci4waWNeaiQiXlpqRXkyUlNoOixxWUhKclBzU1R5QzxNWVZDbnxEbGVtcWFgP31mTS9lLjRyNSlwVVJaSX5kbT98bDRWeWp8Sjtl'@;
put 'TlgsQTZUeFYxRX46UVRUKU1XcXl7Vk1udD1OQHJvJj5SOCZddzxDZjB4Wk9APS59RGV0QkRIfWE5dTdWOzJueiJnJmdFfG5dc1oxamxma1guTnI0P3olQEVYXUc0WSZyTlhlL2BxLCxqQEB6LilJYEFNeEM9RD9GI30mekc9LjVTZz84P01EYkhYakVESXQ0UkhhfDFhTz85KVIpRSlke010M0lt'@;
put 'fEViSy5jS05qeTg9dzQ8MjdyUG5uL0d5LGBhVWhPeU44R15AJTV5KkB6UUcwSk5KJlFib1lRJGttcyRDKjc5eHM3V3xbdVRlWmMxMVE7O19vZCR7RnJORiIpdXouTERXa3s6diRUNHs8UktDW3ZwcyhfWUVhdGcqQTJ9RHB4eUhyV3RCP3d6cEdsR2d1UC4/cVBiZTUuZ3soQmpOSSovQlM1RlFK'@;
put 'eEdsMFRmXVAuPipKZ0Q1JFQ3RXE0KFFGPDgyfVh0Tz9tYW4lbGtqfHFPRnMjdWxOQGdAbGp8PVtid0VXQHZjM35ILk15Rns/UTdvOjJzb3NZO05bVjFbTHJYaVZ2dGE/dEhoUTF2QXRva3o6azIibUVdNSYrOUxHdnomZDB0XWBpU242WjppXTpPYjh8ZktLQ21DMy5EYVgwdGl4UnIzQl1xNnpY'@;
put 'TzRWd3x7OTNAJE8vZ2QlNzYzQDsuOXNwVjBLNitLWEUzPEkwbHp7cFJGdEBOXlBEcl1MJU13SkJfXSVIYm9JM3dYJWk9K2dAU1dGRmRxM2BqPm1td0tOfGdPSXdpNkclWVgvd0FrS0tBK0N2U1gzI1IuNGgraFlOWD1haG15YUJrLChPPnE3JnBpbG00W2pEaio3NTk5ZW12cmgvPXQxSFJWdVUl'@;
put 'eHl8PkpYLDJPeFkrITldQkZ+ZzlQfk59encxRXQiT0AlaFJlI1Ypb1BXOHZ2UCU/PHAiOFY4e1VFbWZ6UU01YVF9THxqU1Q6bE00fHZJUDReTlNiaiJtezsyRCNGJkk2KWo3fmFbV0tGXiphQj02YmxHMXFdZXBpIl5AVlNiVmB3cXxPQ0lPR1VFa35pZ2AmIVQ8OD8uMEwuTDE3dihVLy88MCVH'@;
put 'b3pqIWVaSkIsbSI0ejFXMjxoPzs2NCpfRVJiIVRGdSp3eFpyV288JnZMRjYydVImKHtmLDRGMmN1KVMxTl1baStHU0JPIk0hZ1RldU4lOkQla3djZXgzeDk3KiJzbyk+aG5MXUxaTnJ+dWgrelJYKiZTJiRacDBzVlpZPkpMNT80eVpOMTZNWyZCL21qdCldW2pYTzFnJnJlTHpfcDR4eiJdVV1o'@;
put 'cCZwcCMmcUl3aUJ0MDdLQ1V5IUBGXiNFIyhuTSlVa2Y3VSVNRlNuZStMK0dNRGVaITZObDtdVmg3dFROZFFdMFRWdyNZQlRHZjk2TVBjRj96dGFdQXZDd009ITVSSD51LG9ZMF1hIm1CfjtnYT1SKFFAbnVjQHw2Sns0Xjt9cmtaQnVnd0BjSU9MMG1HXXMzfTtoN3l4JmN6UVRGeC9bYFFxRzIk'@;
put 'RDBNKXNPZlNLPEFfeTgmW1ksO3RrckJ2azs6NlF3XlVWa3EqMmUyJll7bW1ZSnFiYSY4X3dadjNqI1cjST85cS94OioqL0tBbXhqUEQhOT9bbXhTVDR+OUJuMVFabUZuQTl2ZXojWWNSITRRbCJCbXA2SEd7bDJSNStOOUZQZm5Ab3RSeGZlX1Uxem9sKlZHTHE+eG8sPSZmR356aChae1hmKVo5'@;
put 'UltgbzZmUyU5dj1MPElEe2FWU01sOkMudU1hdnFtTztqZTB3SUNjdUJZPGpERCFJdHxofWRBMjJLST5RNy48NnMyK1E6WkdUKF1gQEF5eSw+RE07Mil8SWhYTUcqK3BEZVg4cVRabCttOjw0YXMpZDBFTyMxVjxbW0M6bT43I3pJbVU3I34rRndlZU1yJlREPWtiWjM7YndiLFVmYHEmaT5SWkY9'@;
put 'a19aUVU0OnF8JTFMOSE6dE8zYlswKnF7alp2TXtoOjF1eV4kWUBwcnNOaE0iZlErSlJYc3UvYyFocFdjc1trS15RaERQYGxaOjUpRVNXdG5wdXx0Ul5Ia28qKXBrT0QjNn5QZzt3LDdfNlA1VmhQaEliZCIudEA2WVgsZCMmc21TQD14ZD9kY3JySyFfbj00MiJkYzNic1tuKTteckIscDRgRXJH'@;
put 'KTI1Vld1ZmA8MlJjfCoqalhJTHgldCQ/REdnfCRJdD9XWVtPZGwkSWp9SyVDMD9dOkxQXX1YSHReR0JLLHZ3eF9FSUN5KEMyPFNXQFEhP3JeaF5XKV5Aa2w0XUNiSyVWeW5WYTIwX3tWIy4iRiR3cl9aZXRva3goTHViN2BzViYmQ1FfQT5EJXU9Jjd4Ql1QcHVvLDc0N25PRHhIVl4qY2ZMMDlK'@;
put 'SzFDfkJAZWxZZW14PVRLWmJ3W35xKyNTUTRgPj4reWk3aHh3Y0YjWVMjOGZPZ2VARDRwb2tmKzZYTnZOPD5ja3QuIURBT2tAPjVsMkF8JXVafClRU3VuI00ocV41SGE5TltJfmY+QHQ2fjZpazJsYW9sUH1TNkMpKDxdUG41QVl2TXx0TTh6azQjSiI8SmMre0csXSw4ODk0SGkhX1kkakleKlol'@;
put 'KXllaWNKbnwhbDVfc1h7e00oKTVtITdkVUQ+Pl5HVTdCImo9cGUjbXFROUhYa1d0fE5AX3tddSVwQDh4d10jR2NbfUddInsxKSg5ekxYS0o9NEUlKkBMOitDO2VyXV5XfkhXJDRJfjs0IT99eUlTSX0lWUI/VHQwPGRWXkQubWBsfG1AXns2Yn1CTV9EYmJtVjx5cEJncVhKQWI2cSsxQSlwfkpe'@;
put 'KSRra3ksKW12KyVIbStmNDd3K1VxME9kUlQhZGpLKlVrPjRWKDpWZi8jdDthZTB7SGddWTdhI1E1JGVIOFRtdG1VVFZQT3AwW354IjA1XkheZDY8JE4yVURiIngoPjI1Q1hEP0BeYCZSUiQyUU90RXtEaXZ2dHY3R3k2WTVvRmRNPD92b31sTW8+ZDRwcHdkU3FWUkc7cUxXOTlmX0ZbRWFvaCtZ'@;
put 'KH44JHByVHlyIVV1QVovZjZreC9benFGWCFoIyJIMFVsTylGYVVhVml0dlB1KHIvREZEVHNJcTApUExRa3BIJWw9NGNud0Q6UCVVOTdYKSM4aD40JmE+e2pCWFgmYStFX2sjPHNCcE5VKS43ej0rLjFhQmhZVmMyN0J7LiYyL3VvdXsmVF96SmBQfm82Zjs4ZHo7UElAWXR1X1B7PmZ3cnd9Nj4q'@;
put 'PXYiYVlue10lclp5JGUyU2NHcW9wM0N5UDQ+MGxCXWVHYDlDcVNBfkRUQSNqMFo7bSQ+aiFqZzNjQmMwJEtpSCQ5KVYsOCovJX4rfnE0O0Z8OjV1alZMdjFmMSkvakRXWUhuQ05UVSs2QjJkJnlQKEA0PVRmOilkPXlmMG40ImNPejwpYypbbHhuOiFPczE4OWFLdFZ5S04mMSs6NnJwdEtTVX5b'@;
put 'eTkyX1NYOyloO28oWUh7SCFxSUFZW284W0xvLEF3YmlXK3RyTDZVIVgzVXl1NGV1SlJwVWtJRERAPj14R00kWGRBPHJtKkNvKFs6QFQ1MXFLdi9Oaj8lbF9iaSI6NTVZTlFZclt+XUNeMFB5UiJZLn1md1R0I2FUXU5MPGlDc1FWVX1edHZ0fX1RdTVWZGxOS1NsbUpPOn5eKSMoXSxmLmVVUSJy'@;
put 'OG47KVZPJjlLMSUxQTg8NUJqWHkxaSxhNXJ5cTlCTUZiKiVeIixaIzRaWXU7UU4+RiU3MyJCI2QuMShYSypATixPPF9kKWUoTTRCME1JVVQsbUR0WW0odWU9REpaUCt6OVovM0FLMCUwXUI3S2RFdnxmaktuMmd5UVY0U28wcGIhZE4zPkRDayJYYENrbSYxL0hpYH16YXBXaF8xXV4leiQyO2Em'@;
put 'Tk1CSE1Rd2M3fSpwVXkrKWx9WUojRU13dig7QD1tUHZ+eHJTWFBBJj47KHxld3FWcmhsPjNHRiheXiljZHY7WmZ2VH5GQn1re1BPaEVvOipCKjl2WmwwTTBhNkJOb0V5QHp3dk9lWTdnfmlvIThqPGVkeStrNzl4KSl4fFUuW1cxUjg1bzpoMF17PUtSKCVCKGB3T3pERXBde0w6JSVtZnEyWURO'@;
put 'LklGXl9TQUxYTilFNlIifWR+TmVWbngqKTddMGx6IkwpMH4kZklxcCxTeilCXyYkNilBZ2I3bkJBLn0yQm1XZFZjLCMsfVYlO2l3Rj9vNjwsVmQpYU9GPXNHTmBFRHs+PkdYalpXWyVfXl1VYjdHUV8uTXEhdjhndFpwR2QlZERUQWluLH1rZTBiRE0kW3RudFtJcz5mOT45JHpPMGpkfGRSNXcj'@;
put 'YnJyRHExLDh5KEB0OHhneCpFL3F3dz1iX0toL0I5LE1LRHMzW2dtMmtqZyFFX1U0bDwpKCwqRTAvbXQpezVkZUNeSF5WZlFWKnUzIUokb1IhVHRLdCZSb2oiWWlJRkJ3SFMwRHJ1L290PnwpNCgsKkVJNDJEdFpOdSluS3QrLCFDbik5a0F0dUE5PGluTEkudHpIR0N8a3YoYi51emcjbnc4NDVr'@;
put 'Ul09dXtQM0I6fjAjc2M9JTIlY01SfmhARHg0L2lfSzEpRmUjO2M7MWRadC9YMFdlfHo2V1NMNDBGaTI4ZixrQD5oUjdBRWkpe1dsQmJqPDUya2c9dmMsT2d9XUQwcV9YdC9oTE9WT35tUEFDOTY7RFNpUjczREhCOUlSRVl0KEt9STYrPzkrKD92bVlCd3VAezkxMyFDI3RrVzFEdW1mbTtybW8y'@;
put 'PFpqaz0yYlUvYi4wMnNUWUx2SUJUV1h2I1tkRGpkXUR9JEJWQmdFRHVKbWdUTzprLDErakl3amouXzIkTDxvSiNyQ3hJdkoiTD1GSXQ8bWg/PkMxUkJEayIuQiE9QUBCbXhRK3VyWlVLS3BEX3pKMzFNTUNZa3xBJGY7aC5eSjlMRk5NdTBXUEU4b3IuLkZtTncvbEIkVy49dn1aPz82Kk9OOVRJ'@;
put 'NndSVU9nPGZFPk57Y0RbVVAmIipnTDVya0VCcTE0YUBEezt1PUxNUFUpMUd1VkhEZChYSXB2P015QyR5MUJSKS8pZi9HQXIrfXxyQmVFRVI1a0MhX3YxeE12UCliVzxNXkdRRSE8YjRFWG5QblhBTTsyVEYqZ2ZHZm8kZnI9Q3I9Oiw+SGBXbCs2cCVPLFA2Sl0zdWAkWHM9PiVCcz9OQGpJNEM7'@;
put 'dUNzZjkwPX55cyVGK3N1REh4XzhGTkRuQi9zJk8vZGZCL3NdTzNUPHVWJVI6ZUQ6Mm8pX1dXKHduaDZCZFt6bD1sQ2JuWFlCK2VMOU45QjYocGdoJm1aNkY9R1taeEttKVtPV1ljWzEsUEZOfmlOIUxZcnEpIUhfImwoekBIYXA0Sy9GRUR1ejVQZENAQEorOlMoQ0QuZGNXNnxnK1UqWyQhVy9v'@;
put 'Y09jI1ZlM1RONT5+RSp4VDJkWykwSFh0KnIyMyFXYlN8V2NucnVGfV1RQW1mTDVrZjBJZklHR298SWB9Q2BMT0hnNC5tcGtqPkpfPyMuSkVLNk10dCU4RmUyM25mWVMpM3YrQ3ZKOSxtaGh8diVCdD9ebVUvQCspJlBDbW50eSlDIW5rP0V8Mll5KClnMyYyTXY4bnlkUn5Yc0pmPH1CfiNhSE90'@;
put 'fC8mXyRdaF9sLyJdP1AzSClmUWRVYmt3XzdvYHo6XlNCY1thbTRgXz5EJjJiQ10ubSZTKmJ5ZVdAOmhwQlo7ZEQ1KThCO0Irb0FLMTJNVHZ+XnB1Z0o9KnN9JX1+Mmd4N3kyTiRXYUslQj4lPmFzWDMmaUdFZVEmJVlpUjc+Z0o9Py5gXigpdkdVYCpPZipiN31POlJuNnMwXjFeZHtpPGEzT002'@;
put 'Wzc4dzFje2RlWVtRP2NaI2pgY0RoV0ZGOzZgYS9ufFpsME1OYSxxdjVPTSJzVD1kRXxpPzh3d1dJTnFMY1twYXE6fnVRP05fNjRZKDc7TzFURVp0d1Q1fVRuNSpGQ3FPaS9afDtocihXTyozPUZoYzhyXlFEaEAuKEpTMFpGRGA8Jm0+VUVoJig+NG9NNytPI0R7IkEhM1tDe1dvS0J3SXJ8aX5a'@;
put 'RGciaUdBYEVDJH46LkxDWTl6elgmeEZSJS9MYXE2dGwoTTFJb1phNkNrby4/ODxGQn0lVHchPUppa1J2K3FpZl4pVzpbSS9DYHUpdzRaODVGLnttKlIvP05hQyViQkZ5bWYvUlkzREY0QShxKW1uPGA0SHxCT0lGQlNMLFgiZmphZ31tNCQ5TU1BRVhBLGdxXW5zIl5xdmFvRCRgM2tAYFpNbVo9'@;
put 'PFQ5IUVuM1RPS2B3V1AzVHVLJUYzfnAhSnFsbmo2WlZBc10zNTEyRSUsXSwheTg8TUpNaFFUaE5bQm1BZ1o1WllOJFdkSzdmLiMwPU15SChHPitGM15fOWh0Yk9YeD5PQVlNMFRJQCQkTH1lZW0ldXJHY283Mm1HLGR4Xn0+JHVyR3pTYjZabVszaVd5TmV2SlRUMzQ3ImljUDhvZkxbT2tvd249'@;
put 'QmRjWjZUTmtNYj0/VFhjXmFDbWRZNE5ZTSt1fngqTmgxJUc4QGVlLGpQbkV9SXBbS0lDMjQqXltXSWd2N2ZHS1UxSDk/OCtGZm9ycU8kKTQ1V1BYej1CJDtuWmQ4ZXM5bmY/O3A/PikxSnJhPkxAWWlhY2s9e2ksMkRoQTNnZXUyb0hzZTgwXUBtPlVbXkopPWZId0NdX0VjL09sdE9JM1s3WiR+'@;
put 'MERUbll1Rj9JS0pLWUh3Q2V0eHVKKWxZRXNSPnxzNmxRZyxRTnc0PW10MGA/WUgpNiJtKjpPKTRfKSJ0Vk5zdSExfU1NMTFCYD5LMzdvMi5kVWNbXU9MZGpCL3N1Uzs1TERAd2BdN3I3dCxecGl3Sip6MTF3PTd9WThjRV9vb0VHZz5uOStyaUBRRTFuIVJGUXNzNkxEbGY7MVsvVXp9Jn1xMXxw'@;
put 'eSRReitFeiI4JX4kSG5RYzx0dDBgQ1tzbiFkKCJOMHtiKEhCPWYqNjdHOmNCSjtSUnM2WUw2S3c4UkB7SVQzIWdGWiFCNF1rMEBAO2t5RiFARXkjdjZpOyZlOFRhKkBrU0wwOUNXKEsuMCxUOTFnPX11NWV8V29+c3tzZ2Y1SiNEKzUkZyoudlBjWVNMQHZeal9VTkkuVGA+T0sqYjpGZzQlTzg+'@;
put 'fnIxdXxDeXthUTFuRT95Mzx2QnJJNSlfUWNBbzYwcW1OYlhHJlUmNFROYGA0ayQibXl3bS5QNV9OTmRxdFFab2c0JU9fU0ZMdyJjZ3tHfV9bSz4vK0ZfU2dpZkpsdGlnNkx8VH5aOjA+TUYxJUI5SWQjLyZEKjg8P1E4fl9TM2s1NHJXRktPQy5kSTg7I3RKZlBbdyZXVWRsRSEmRj12PihDSkgv'@;
put 'Sm90UlkzVHxCW0k6YTomdElPSmtoUz99JXxzclhYR01YflsyLyl1c0UidUJOWmRIR2tYJT5VZEAyZWklWEYlZVU5aHNjZi8za3EmaGNnI0t2ZUdnfWBLPD9+KlsiWHV5UD9DTVBuYWd9a0IoUCZDXj98NHBSb3FoXntiYEpOODYlYFZpWHlDLldEbH5KblFCJnE6aFYwRTlWPCQhPCU2ODQwMSNe'@;
put 'bm9+WUooWF86NTBmIShVL3c5M2NYIypnNS4qX3JfMXNETVo4KiYsTjlyTilTLztLTEhOQkcoKitXZThvY19AVVRDVDV5aDZ1clNKSGlYU0xLRHRDTWhxSVhANldtWi9AQHVYeEgmIXtlaSQpd0UoRGl4YXgmIkkhJjkjRWlYTEQ3R0ldM0IvaHM5ZFsuLixWWHRWL1JIUFQoSCxEL2tPSFskc0xN'@;
put 'UFI1XW4vRjxvMkBaXVR1WXV9Ql1FcUFDOUNDaHRrV3pnfXRiWDEzJjs9K0t4XWpeZGJkYj1NLzQsV3d9SmdfYlNWWGZefG9HRlJINjRTUi5kSThxV0FafW1pWkRIMnRgekdJNShLYjg8RypoODowT2VnRG9NPU5pIS5oKHVdMnNCeEYxITRfLGh5TzR0S0V2V2d9MERESSYkYXl8TDRJJCk0S2Nf'@;
put 'elJ1bmcjKD5ydFYvKT5kPk9kIkY5cHpJPCk9MnJ1Zl5Rc3UoTzVBIXJLfSpdeCh9JlRXP01GSSkyT2d9SG9mLHc0dm9aTSZkYjtoUHw1YE9WOT91IUMvO0NHZ0RRMzc0bFUhclFzO01+LygkY1trZ1hgVGhjVSNbfHQkQjQxSUFGXy4mU2VwISwrYltBeF4iZi9tfVhYY3dWJWt+Sz9geWc2anNy'@;
put 'OSEzX3oofGlZcjFRL1p8ZVlpaHspbC5YdG4kSklzcT4+TSZuc2w4QGlZeHZNaFpfTTF5PiliY0t3WmJFXyZERGtGVHNYMnU7YV9NW1RQSGFDVXlHKi88JDdvaTsoZU5ia0FFSlVGeyI9fSpCL21yXTJaQllCbHZyLnwiOVshbXs+QlUrbjNrU3xQSmd9Q14+Im8xW1R2WkxLWW8kQSkoYiNGPllx'@;
put 'cHRsKChza2g/OUMuS20oVmZJIU1Vb2csUktrSUYqKy93RiJ2NDQoPjdZdVNsRnIxbUh3ImtXMUpkL1JdJiFETTlbMSR+OTBPeyZaRHExUS9lNERHQ3V9NlFTc0MwUDRuQ1hpL0tvTSsvaCVnXnhZZSxCYkxmU3hIdVh4IUxSZyNoNlhMOmlrOToqdSl7JDY/LHRhc3BiU0tHS2MoXXQoeVl6KkJx'@;
put 'dlJXOyZsRSRHbj40b2RaaTZhfU9ldkQzfk5dKEtMKXgwMy9MfHV3XVAiQzt2ITxJWD1tW1dYVDBAKTxiPDRXPkppWy47Q2Mrdn1CXnhbYThFOm8/dSFEVDUifnowVWQ0cmd+PXQ6RjAodVdlJVRBSUJGaDIrV0IlKWZzWDFqK09vOW9RNEpWVCVjSTc8RUlVP0ZdX0xKPFo/NkRhc0Q4VUl+YUY3'@;
put 'Ym5lMEMzX3ohIXJKYG1qVzxRPmo1YE54UkVCeVRJPENAUHc4KSpTdzU0bnVdUG5EdkZza35VdVhlbUdOWC9jK0Mpe141an48cERRPCw1Z30vdWhEO35edyYwRWE6XUwxTmlnXlJmREl5TlJ+VTtWW2RjcXJPeFIwKyspT2pEMHIuaClMPWhGRl1pIjJtPTg8UDZHQ2ZhYXRhSkxjeD9MQV58eERw'@;
put 'dGVzXiQ9R3d1Yi9jX1p3NFp4LjFNK3ZLMT97UCg5TDlrMFs2bmF0XV8ualVzLHReflpLaGFaQVRWSytVPEV1KGNbRkwpRlh5WDlNUn5uRTF9Q204PC9jUkY6aSNtZ1RidntbR1hzTVVrfk1fZ2pmdD5FTjxQPW9MeEp2Lk85cGwvamMiQy9zJERuM2pmIXtDSF9XJT50RGNfcEQ3dGwoOnhAJjlr'@;
put 'eFs6RjltVUVGPzBKVTUxNCVFN0c/O01YdDtpOHxCVl0lKHpVTFVUVl4+Z1l5NENScj8idHFzYSJkJVQzSj5UPyFbUk9rIjhtUTJmXjE3Ii5oN0dIcHB3dC9iZ30le3orc0JCfU93UC82TVMiIyRrU3BJeD51RGRkeVZDMGE8VFlwTH5vO3Jib3dxflBZP2VXYVshfiJsI2BZSWxVY0I/M0ltJGc/'@;
put 'fW10OWJJOGAvMUd6LH5galhtNDtXdFsyTDB9LE1IKGxeUDA9VH1fJXtDYHduVjJoXiNnQi97PUN2KyhGREhQXXVdczpyLkN4RHR9LmQ4QS9zeF9RfjtEJEFrciopbC5tWz1MOz4kMXsoQCYpZVc9TyZIN15Hcmt6ezRmY0VhJC4weXF1NF0/WCUuNGVTLzliTEdgZ2MlPGVUOW0jLlUvMjRbW2xa'@;
put 'ZjlfJGIjZXolJXllaEwwRFlEK3QiXjFfZ3xeKTNUe0RoeG1SIyp5PEBpaHhtUjIuJUk9aWh4R3xCeTJIdVNlUlZ8KjJsSFlIdER5VlpGZVlsaVpbUDM3b1d3SDM3bzIuQl0lT2JCeWhRMiRwWGlIZiE8cn1LM147T2hqTm56UyokP2RUeEheY349TWBHN3thMzVGY1I+IzUqK0N3d00udXE0aH0p'@;
put 'NG0+PntuMXRQOXA2Mjd1aUgiJE5DUn42ZlIkYiJsIyNhajhFYXF2LmdDaVgvbmBPI2xYZC82VT9vOCRTdCJKW0Z8bl1pNlV2RXY6bmQ+R35ee25gJDBbPW5JZEF3KUxoMTFQciYlIl9ZYylyYiR+SDZbNn5GfXRefkpLLFYwLFE0Rj1wSmdveD9AfmVxcWlGPjosbz0xfWA7STM6aipdaVttQD0p'@;
put 'amY9TnhZK29GT2d2JnxiV187WFNdSVFjTl9JN2lERHckQkl1NXFINl8pLiYieStJNXBQZS9VS0UsbzhKT0BGOXM9Lk4hXTc2Y1UoQyglbEdwVF1KY3UvYE8xYk45dl1SVitbUmAyVyVqczBxLksxXyw/UC8qeVt5QitCQC5Aa3AxLEc9MyU9Xm4reWtJWFI2T0poODcqdD90M2BWVnRyRFJnPm0y'@;
put 'JU02S31KcmcwaEAqT1tpeEB2MGtoQmlSanIhLGtZL1R3eE8ob0wwST02MmVUM3ZibD9JbFFwOjk+b0hJX2tkLmI1NjZ1STBudUJkfkxLQj9pJSh2WkR6OiJCWFJENEJ1TSw6UkA2b3tKWFFjUT5gI3A/Szl9JV94dXg/Wmx3cl58Zk5wcTZ8XUEqQF9ucj08QixwfX1CO0ZFSEN3ck09MkVWSDg2'@;
put 'ZVdTSj9kQEZeUC5sSjBuInN7KkYuZzNRLnYmbzlHcTNQZkY3e3o4OVRXQnR4P2dPRCg5Rl5Qbn1PUnhEX0xfMFovN2VJMz9LN2BTVTY0VX1vW29RQX1aPjhGKGhNJXwrLG5SS0dfdnIrYjZFXjVbXjl+MHUzN3U+RDxKODlEQWhnVnteQW9ATkdiQ0BVT2h8and9X0dmYiJNJl47cFF8VEp4ck8/'@;
put 'b1R5IUYrQ2RNQU12YWpePUBGdjh+TDFlSyheSGVfcz5gIn1VJWJwO3M2bjlHYTorPntNenFPJTQxTUl5Vmw8TE8qT3VDZys3PGxPRFg/diJETFdUeUZSLmtvQGpYQ11vODtGI0ZOfGFgJDQxPlNWRnlRLzw4QVs7QihfQCp2fUtNSUV0fDtXIjxKdlNATmh7ZmF3IU1yY1JgXkc0ZWZyQC4sSFBq'@;
put 'Ii4lY0Q4dnx9PGxZQT87bEw/bWJzdmU/ZnNULjJaPypKM1prWFVPM1p1LCltTDUoKmF7JXdSKGgyKHF3fSModD8uaiUjRSlvNkpdeylifTg3cFVzXUxmSXoySno3JCE3RyUpbnJIXS5dM183Kz5AcVpRdUFLVy5WV054N0Vla1dNUmRePyRTKUpjJSIkW3xUS3tNVjoqdWd7SDwpfih2fVZgbntf'@;
put 'ektee2V5TH15WCMuYm99V0lFUm1HfGVFJSs7eyhac2N8ZThDUSkwRUVwaSNuWHVtbno+eHY4cFp8VEwyM3BFTTI0PCpMLmA7KXc0VXppTFM/VX4hV2NfRE08Lj9LJUY9fGdYOlZHKFBzKXRoXjc7JEM9bXVQQks/JmcmLzlOMSooQUA+e19fSmRXK1BKe2dMfFZIenIpLGZJb0ZrNGIjI1ljM0Iw'@;
put 'PjZIaGZeI2dYazZkRytUfHRpL0ouSXZnPyZ+MDI6KkdUS11pMGc2bSlvTy8/ViZXdXxuelJRJl5YQEtnIiwldSREbmlENGZxQjYoW204cHJOeCFdNCxMcDNbISJlcDVnIixJSCg0NSlJVHA/c34lV3V8eGhIdCRjRmEzRDF9bnpMMGNiQDRAYFF9YihDL0I2NV1MbkdieUZrJCE8OS5FeGlnN1VC'@;
put 'XV5Scj8+XyFCIX0uJmEoIzs8dkQ2KEVWSXJFdzFTbjZoXTJuPltdPjtAPWloPlA+Xkx1OUMrb0kxNjNfS09tWVVCJmVYbjdSfjdvO3hfe09HSjdieHNAVlFnZTtqfT45S0FtVEYxS0Awb308USNUSD9nZ0FSSnQ5WCxvbXB9SjZ9Iil2fXp+cTgkezhfInEmWFhiNSY1JEh9ZltkW199PHxCb15x'@;
put 'Iiw5V2YjKFVOaiJUbkxTX0kpZVVodGcociJMdl97LjRjeixSamQkeihHfTYublhVP1RsNSFjQXFLLFhpUjF6P1VzOlQrWWo3PDB9ZU51bCVJNS4wMkl2TT5wfWdjeG9wU1IqXiI4L0NvSTghaVg/KjM/dXd5TzdCJGtnMFYibDJheiVdaF5lNTBpXU9gMVg7S2RVMF5GNE05bmIjbEdsRypNOk06'@;
put 'TUd5PWxKY00xeTc1PHlybVJPJDI8Zz56fV53RlFmcXIieV1OcWhefmZTOnwrM04+PixWNCozPXBzVFVjTHtnKjJ4XklDRnkkfVVXO1N0d0t4bXpyZyhSNW9HeDskRng2blpJYjYwZyw/S0l8JER2V3xHVSxRWkJkdGE5TTZmdnNrJTY0JTQlM1UlNHVVblhib3lfWyRaP1VhcDBzSyNtTU9TcFhf'@;
put 'JnomISM9WENEOD5UfTVOKU1AaWlDNkM/OD1TVSVYR3VeSy59Vy93TkQ4SFIuJkt8RD15clRfKm9VbyQ/VXU8NSUmNTtjcmM7en1pUUsrMn5DM3lQemdYYVRfbTBtYDdKPiJpMSl5QXhVOV5Na1FtPD4pa1VmXlFXLDBFcmp2XzN7ZnVMP11udF8oV2RfVkt2Pl1XcylmKW92OjBQTn5AcUNfTW5h'@;
put 'fiRML1RrQnwxO2VUbUU5QCNKfF1WZTM5In4jfCFWaG8qQD1ZTixIPFZ6fGkvenk9cTVxNXFJTj1NOUQkWE9URGZdPm1uR0JEOCEoPSlqQjFUb3dCMEJlXSlydklvTyM7eWxodVtaVGhwQEQiZShmO3MhKyM7XS87eVRGU0k4ckJRdip+PUxZVE4oOjhecjZgYUAxMnUrYWpOJHohIWoiezlEemld'@;
put 'RWV5eX5nV0l9JU4pVTIpeXF8dTpiS0tFWV1Dcj9yTikmdVVAMGtkJmE+R0JKIUhUaFZwfmF8alpbYUp6blNWbD87W04wcjBFRW5HMkdVWHZHXmp8O28hKWV2Ql1sdTRgQjpldjRgZm1mRCgpa0hvPz0maT1nbnhfcH1Dd29pQUc2W1h3NEU/WGduSGAicT9Ra2hzXWgoVWdYJk5DckA0antrMT5F'@;
put 'SDw2WnNXb3hnYW9eenhyfFRQX299d3N8UUBLTnQsVyYpLFc9JjlyT3RhbyR4MW1QVih2Ty98cH0kSztYRFdkI3t2OSw0cEZKMF9KckI/KUdGdFYvLCJbLDRxeWE5LDUkRk9fLHVbem9KTUVFdTZufkF1NCI5Mzs6YWJUbVJkW3BoX2g/JEp6RmI0eVZVMzF1dlF+JlNeWDVyW3tPQnJIeyxkSl1L'@;
put 'KTVKOGYoWiFTMm4+dWJlSCFvWXJXOWBQYVBgUUF5Tjg+UEhRUndTbyJJXVNfd2MmRHA8KDF9R2Ahfnd9LCJQQGxJLnIzeTVlWDphaHNeM0oqelFLQkxdRUJxfVByX209NEIuQ3pyIWorZ285b1teX2Z2L3AzfGwuWzpYXXI+JUU1Zkh5PS5Ue0RiQjdDfHx4UT8hciZUemJ0RHV2Xnx7TytkYHZm'@;
put 'VzY7Rmg4RSx4K0dBKTtHRDUiRGRCWVJfSDZDWlRTNDRfSThkKHJofUNBY253RVgxQztBIiwuZEc8Y0NKaT1gflR9KWQvKHV7Ry9zRj97dTlXQDRrPyErfnthUGlaRHo5dDclPVNRZSFgNmNOYCYmdi4wQ1d0bj02KVZjZGw5QitBWUswRVtoPE8xeDlHMWtrSWFTVGMuYVRyU0M1UFl1QGxVOURx'@;
put 'dVFyZ0dVbGI+eSM9RWB2fVYmK2E7c0JPVG4mKSsrWzZFNl94W0NkOVVXRn5bTzhySGhKRnFDNVNdTmF1QXJuKSFuMnVWdCYkYEJrdEtJdFR5UHtFR05tVHZ2Q3Z7Z3x3QUJ2ZzZfeEB3cndUPkpUcl9gfkU4TFIvUVN0WyFVWUVmPWUhXz9gKyRyRGNgdjFIOn5KZl5EOn5IWTN+ZURRMmpJIiI/'@;
put 'Lm5rd0RPPSNgO3hmXztRfXshek5fR3BTZ1I1aT5OJUlvN1Y0cjQ3JjtrYiolP14sQ2lRUUM+cUQlV0QlNio1dlRPS2NQV0I5RzFyOyZqOjRCTXs9XmBVaD5VQjBUOHIzPlR8Y25LeztXPX1TYzlHRi9VQntONHIzPmFdXXo1YWQ3RisiWiVnfjNUeEosOGUuSHBdIyZRP2Q5MVB0Y0Q4c2x+YCgk'@;
put 'Sm1PJj1LWWkmeGxyYCU7Vnd+WyY4ZDFQWmZsWElqSkA7RWxiTTYiV0FNNldXSGs2OXJ+UG91N2hIOjhnJlduY2pfIXQucT40Wn4mcio7W0BfaTZKcXFlekY3KktDbjkocCZVamZtbkliYn05RTV3WT9DNVQhJmsyIjNRPkVeZDhFQ14pckU/SilIdV90Z01RNWFgI0t8IU1hW1YjSSlBRmV8UG5M'@;
put 'NiozcnJ7Yj1JIkJeRFcraGkzNTdEMiU/Vzw9fDtzL3B3RjxfUVQjKVZ6RCYoPX5RcUB3I0pIMTxsNVltcEc0O3E8fUVqZHUrTCVNLEN6ciwiWkVvU0JmZSMrdjphWWkhOXlfIXA1VWdyWW95byM8TUB4fE1IZm0rRUF9KzMsRWgoISxVL1g5ck51TE85XiQ+Y3YzanojRm9eWEhuSlB7OGhRdzpP'@;
put 'Q3UyXV9GaV08W197OD1wb2ZJO1tLX0p9JCVwXV5vVl0kRFAwRzxKRThkT2M3NXI4Q0BoMU5MUTg2dEslfT03YUF5Qzt1TCE8JnxmOjspNHRxPzooMzx+TjhjX1M5PElhbFdiU0FeNjwscDhPXklKPVM2bUR0WFByVGV8XVdfTWpMZmxbM1R8PTNJQnYwNGZMQyQyR1A/Xkp0eDA8P0pxdiFWRD5f'@;
put 'Rk5PI3p2Lz1FUE81JCgsb0EhPXpNIzJtNDA6JVhnTWBCTDVuPi9bXzJ9V2laWjFbPkVmSGhTS3gve1soPk53I2QodD9NOkNUNXFVW0IuPmF8RlQiR2Rbd0tSJlJ3PlBVSHVDO3ppRnBYLms3RmhCVE1TL1d+dlQ5PV5FNmRwfT5MKEshPUtTZlN1Sm1rSyJyVT80Ij5nRWlmelhwYW1ZP0lNUWg2'@;
put 'YzgoTkBoenYsJDxtdU8qVS9KLFBHSWglUCImIWdtR2xzayomZGclTGFZJD5oOFMrfi56UlskY1M0ZFtdKXlkQC95RkYuWUdgPF5aeztxbStjQ2dxQWd7ezpdMXYseEtJQFZZITRbOGdGVyRRWDR4UHdfJGp+VU9INnVBPDFPY3xKTDtPQWNFQmkvKWN9R0o4IzVUTmcjcz9JdWVSa3x0dFtGe010'@;
put 'ImhpeX1memJ1c3c9WXl0KHt9UGp8NDtDSiMsWnlXMj1GKG87NkQpKTxGQ0xTYn55KV5HdFAvKiRJVVshPU5kLHpaMHRCRVJyYzZxKHw9UjJCJTd3bz5XNzIlYncrImx1PmpqMXg9V1M8YGZPM0o3OyJMWFlCMylqZ09mJUJZSUdLb01KOSpCNyFsey9gVW4+Q25NaUNaNGB6Lko5VnE2eV06PGcr'@;
put 'ZWpaVS9zY2QxXzxYcFZJZCt+PGpUVng5fVFfcSp9T01kWWI3en1UazNZPzNqKE0oSWZSNU15MUJsRjNUdEJxUUo0aUFNNER5Q0tnRHttaygrNy8yRU9XPmY0Z1ZPbTJhTHt2blBoNlE3L186P31qITBybjRNdHc/dVFPUU9XSkZ9eGNxV0g5XyN8cHF4fkdFPno6STJHMndzWzZZbX5wcT59W0VF'@;
put 'WnlpcnIrcnBRKGhdRWFYdl5LXyREfGlGPG4+OGtHLGpVVVskKCssKXNabT40N3smWClhd31QayJMNEx8WEU6WitvOUc6ZCsoOGYpaT9GNyM5aVE4XmdMRWtwNVRvYTQwJXhKSlRINFRNZDdoKFVRS0dKcVliOUtMaCsmdC5yV1ppPGZsN2IwRUl2VCwrWXIjLE1XY3g6fWxgPyR3IlNzPEo2OG9J'@;
put 'ZW1GfjxUfSI7PnFaJHNAPlQ+SkNKPWsvJFhFXkUwOnJXJU9tUEBoV2dDdnhkRGooLEA9USo9OXdJfToyKm5UXyRSImRzLlcjQjErSEh7fD00b206UntCcy90ez9Vb3wwb1ljblZdNT4rSEZFbH1hPVlzL0tUbkN7cEtXK25pMj4uOnMqeHZXflkhSTBGMzE3dlQsbiVKRkRoY1I3T1NQJlJ3Vks+'@;
put 'KkFhampST0Q6d1ArYH0jcHFkcWt6b09aKVNNWT5ecHZ+R2dAXksoc1RMejxeQ35BfENyZGFRZC5Rb08veEh8Zi5AJlVGRyYzSTgkUkYmXmMqSzBGM0RSdlhkPDRzaEc0VDg/KlVwSkZHaWcpTk1vKGc0TFhzMXg7Jl9HRXxTczBKWGc2cj5jVlkyZmc2aF1EfVI2WWkrcnFITkU+ejA6en1tWT91'@;
put 'X1osT215dz1QRWMqcFs2WVRdZDZHbylbW3tNZHdiUV9IQzQ8MD54UDVfbXBnQ15sZyYwci90Z2RoVEZLbyslNFA2PTU4PTRvLjBRJHt5ZHFyLk1meSE2bTVEKClYR2VYfm1AX1ZfTD1tPkJac19XYChANnQ+d1Vzdmh9ZUc6Tns8KEMhSk5NZHAzZzY1Q2tDT2t0LDp2NUc8cjpXLCtTMXx4TiRy'@;
put 'KFJ3VWkiakVmRzp5O2klcSxTRF54ay9YOUs2dyR1T0pjYk1aPyJKR2Znb1EzST1+YyhWKjJCcFlyUnhFOjJEIWJ+JXt7cC9dejVHI1tdWm90fUk4YFdbJFlFbmNVXXdtN1Y9a0R9VkRoc3o0KkI+VXNDPkJqVFE+cU9HKE58PX5FdChqP2Z8WjVvYD9KR3xQSnx9R1g4TUE0bkJ7a3NwLmpmQmxf'@;
put 'IVFKfDg8OSZ8TipGOC4qQmZeM1dJQW4qOUlBclo/N189Ji5MWzQufWtTfnZhO3BGRj5sVV8jMXR3MUg0MCpncDB8bEBeckJDK2VqMWwlSzp6T0ouYClVMyJad29EbndvaFhSV1NhZjl+eDFDREFbWn19VS87KHcjfWhNPVEvWXdwY19xWXFxVWZwdUNKS0ArblFRUittPFpzR3BnNVFiRCJ3c3tK'@;
put 'VnJRRyYzdDdZdVJERkRpZ3g0YC5oZ00uKyt4R3olbVVaM1QyQTZHZ3JVWjNUJnFqYSpFfXNOVnJiNjRRPHV7MXUmW3A/ezg6RTs0LGo8UTksaiJvRVgjTit0O0piNTtJM354OXh1RFsmW3d2UGhGN3xvelFJIXklVjwmdk9YSGh5Uml9e2k/QUVGY0tZdUwoWHNiaHN4MjE9SzRPJmFYQlRnSG92'@;
put 'TSpZLHs7QEl9MiN9N2xQQFAwKEduUUNPJHo9Wl9NWT51XlI7S2c0KDFNfSNqdGcvPG5ENl1DO2p9TUpOandoOChZXjlTQSFgVzJBdiwjfk5TTntdVG5Ra2BsR3JIaFMwS0c5aHgqKGxNTD0lVCtOayMsMkIsMDcjSWcjKDo7NDtmUElEJTZfY1Z+Tld4Z2haVEV6WjRXIl42RHpNa3REY20+Mkdx'@;
put 'WUoxZldaYC5rSUZHTkMsJChLWFFPSyU2cXVfZ3x9JU1lWVFgMz5Cd2BtPlJzTSYyazckX01oeG1SWyNbd2l8Lng7I0o4JiZRSChfISwxQCpsfjhGUV9mISgubT5VI2JqemhONlkwTUBXSWcyPlksMCFwa098dEJ+bz1eUSxmQnQ/eUlKZzxIUn5ucHJGJnVyWyRUVTNkJmhHR1pda3RgXjN1WG1w'@;
put 'Tnc9NTZ8U3VFOm9CaEVRNj1RQUFVQEFBdFJ0YHBgJUBRMn4obD1wIkhhNj1XIkcwQ10oNUd5cj00b2p6JHxBcl8+cVp2UEB7diZ1PUVwUFAzflNwMnEkJmUiVWM+Q2BhZFVIQEFvMWxJWW9Pejd5R2gvODxaUyFXWmM8WVJ+NC5HWFdpIUhQKihXMmsqPm1QOkMoPzQoQ0JAeURObjNZL2MjOnZy'@;
put 'RHpLIXtLfDRrOl02fTg8VHVnX2E8fDk0clt7OlpnPEQlOWp8V3w8YEZfV1VZKX5aUzpWYSJmcnE4V2s2OyleaFc/cjt1RXM+S2IzT0kiQFZheyMwbHQjcWtab2hebzk+W3BPZywxZzhIN2cwWmZtZk5dV3ArTy9VJXUwNHVmUUNQYTdYI3B5LEs6UDZbUyFZOWg7QkQyRHBTVmJ9LnJkX3EzeV1j'@;
put 'OH46PiI0VzRYfUtjVlhnNFFqe3xZJjl8YUsmbzZKVHg7KlZYZzR0QDRtOSU5fDkid0FdKWMjLlYzfW5gRztBayNYLitsWm5qTEhnXmZPRll2P3VAWUtZMFE2N0glYj5FKHM3XTVqLGUuLjNvcl8zazN9Zn13R1N5JjJBKms0bmk3RVhyfW9FYm8xVjNXNHVoVzolND5ERlVgQ3xUK3pnNlAzaXoz'@;
put 'YFVvP0ZlVXdrKzVjVD5nJEl5RDVUTT10VyhXNltIc3s/Yk5OMTlFVml6VzZKI1s4OyFsaypaLDdfNltIczt7bmh8XV9tKzkkJXFbMy5GZiZOUTR1Km08QyJ6PmcjNWtodV5XOTYiKThGJUh8a05waylVL3hLIzM3NyMjQnV3XSQ8JE5zUW5IMlR0TUM6Qj9aRSxCYC5XfW5hP1RIeSU8ZCMrP2sj'@;
put 'REV7a0pKWjg9Ims/QCtDSGFLRiVPPzl5KFsrQ0RGYH0hYktxdV4/KV8ub14vOUAjMTxZYjMiQkdscXF5Yz0zKEdnfGVKLk1ENz1GJkRjanI0T1BSOzhmLDk4T0dzNHpOO0JGPFEpKmBwYCprWHwpKVUqZS9iXzVvemQzQnZTeU5BOiNaVERPVX53X1dNYlQsK2sjWmRbK2lrIn5GfD1uYiJBSyIi'@;
put 'eSJaSm1eWHg7fW1eWE1YOCl2diRBbmlQVCMsPygwbiU8KzlOQ0hUVDMqIiF7OGMhT3RbJUtHJj47RTljRDhrNEo9dmh0RCJTQ3N1U3R1TTlWSWlLT2BgJm1KdmBFUkBFdSU9IjlIeWk2TERWSzJKd0Q3NCl1VXQmZ3RETEJmS3d3WGxqNCJTVnQ+MHtHVXlSdSFQQCJ4ZElnOEhlbzdlQTo0ZTtE'@;
put 'UFV+d2ghZFBmYCk/cWdZel5UMUglPz9QOnVeVHxaR2Z0TT5ueEpuWEZmVTM9XTVvNllpKVVjd3d1Iz5HaSkvTnYiNllrKSZTKXVVdFRkTXV8V2ZafjVfan1JUCwpZlF3fFdUZGtvXmo4TUdTQyRDPylUfUROaUNtQWxaSSt7fjtFdXFJWkl+NVF2YFpVVntaKnklTmlSMzNPKylmMUJBT1tffHw5'@;
put 'ck99P1BXWX1aZHoqQ0VobFE1OSU8b3V+cnUqZC9BbGZHZFtaNTVCfjZ1W1dCLCkwSikmPV88b21MZVFgcEBOTUt2aDFkMUpDNGZwcGJDeyglPGdyMWtkTkdeP1A0dio6clVPPH1UNWQ+cS9KYnhyOVhYNTREXVJ4L3pEQFdOe2Rpd3Y8NW5MZV89JllMZyQ6Qy5XYE18SWJrZGQ2OmNEQnhRXXtV'@;
put 'aGdoMS8qdmo5cCpfc3NmXUV1T0AyWTV+Wm9uKTlEZ0YkZzJjUEp7eyZVdntZdX5sQShxfENmTSVxfERmOWNXUShDSEpoOH17Zl1KbF02SGI9dmFRZ3p8YkJGIT5JPyJ9Q31tMEpMaVt4YXNGaW40Xy5vcloxSD51cGcmT3x9YWJ9Lio0TUVtN35DZFRxRllsQEA9QyQrdndmdnhMZVNhQ0YuN3Y0'@;
put 'VHhXOHgzfFN1ImEjOigsXkBAfkk4SzRNPjhlMj1aRUliJFpvXU52IXs+KWppcnlIfFZKbz4pREl8YD87LHR4WV48QGNQfS5IYXwuWXJJOEBALlddSltTTE1ndFllZnI5N098e3ppXTtdRXEmUDQuNXdGJndnPSFmOXg+NjtKMGVETVJKMG4pblhfJH1XZEMlZUkzYEs5S0FCeyJee2VwWiM0c3As'@;
put 'OHhzOn1AOyZCKGBGQTAvLkBDdlo7KG84KiwkbEJfZE9WYmxebmc9ITt5eHV0TjlgKmkjXmRQdGhgfWo/bj9BPip3R3ExT0hjcDB4cmU3RChjTDBVRzEwW0hDO2hQdnZuPTpkaktxOj1gNkIqZHVOIVtWc0VMXSomODNtKFgrW1crLzdmPUBxeVt7RW5IYEZbZU0wLiteMSk4TFNhPFtxfCJQdkEm'@;
put 'aFE0fH1OVWRtPG1FR29WQlh4ZTlzNiVWeDQuXnRadj12OWBtdjskMEUjX2t2YmY8VXI0Ql9ANEY+U2MuUWI0R1Y5RW1RTkI7azduZ15DM2thO2ZQWFFZV3kkUSR2dVtBcWh4fnVnL2RSZDg0R1M8Ql8/SyY3d3dgb0ViNHFGej09Rk0hJSVddDt2UDdZP1IvNTtTbjE2dSlSITp4ayxtWzBsW2h2'@;
put 'UElEPHFAOz84TW5RSiUwJnhScyM5LlFEe1FyQ2d0VV0mV2RwZjl9e1EsOlZ0OkB5UTIkfXFuYHxFUS9CdTQ7PHpkO0RCNylMZlNAVEJFUFVCRVElUTV4KCsvR1JKYyZjbkdaWlZIV0o8cHhyUkt2My9sIkMqW2ZQb1VWRWlHYVlvSWlBNGJGQjRicVhtOnskNGVELHg0VCQwMHFHaEZFJEFHcWE0'@;
put 'TDUqb2QieSlybWA2LEVfJWNAQ3hCIkpnfSo2R0BtKDNbK10pUGUlOXxAPl9Ec1hUNCVHOzgjJkpWQGFHJiwoNEJkODQ+MXghaiVbcW04OGtoIih+TCF7X2xtKmVbWn0vZCQpdjAhREtBcUwvUHdvKzskX2lQaHd0PkV9KksoNUImMCt7bn1UR1s3eiJiPjFHPk8/ejQjNVVWN3lFUUxSJHt6ayRl'@;
put 'ZkJhPWwlJXlMRXN3QGI6JHpse0lQejRLZFN9XUYlWy9pPlcsd2QySntHUl9RaixCV1l6fSp8LClOcHYkNUFFcUtWI3tAInY5dEJSYG9BUUEvSVJOUTNgSFFDWGhuREZMPkd4XkRBcjE7JGNYSSFOK2E0PkdOQmAuKnpnb00jI0tRZmdeO3MzcjhzcDpRcFgwVT99JipLbz11W2lbZF06VVFkPXEh'@;
put 'eGl2XyNqXSY3ei5wbyQpeEQyMk0lZSlVPXQ1algsdWhEalgsdXhESUgrTUpKME9ATlZhczBuUUFLcjNUVSJfakNOQ3kzPSU9JWRAPE5BbnhIdWVsbkBXcEpSc1hQW1JbVzxoNyE0XzV0c2UsRHE8L0R+YWVnSEdgUXxlc2haYX5fY25BL1lHPF1wRFVXKCVITGJ8MCg/fVUvM0tNOX19YXNmbXk8'@;
put 'LD8zb24uOFQmdl8rSUk/fTxeODk3UXkpMDI5UT0yJGgwWTIyKX08Xm95ZyhCd1lRNCk8JGJ2XkVKYWJEUnRwSXkiWklhdHBJZm06TDtoIitgYTNPTTZbNzh3MWN7ZE0iV3ZxYStmamA6SUdsbXhJd3YyZFFLdWpxNSRWbC5ZIU8hPzNSU0M/fTxUUTUwa3JhK2ZNNls3JFldN1c2bn5fMjFjeGRO'@;
put 'RUo/ak1vRXxfUkdWdjdFJWdBYUNDRkovSmhoSHR6X0hFNm5KSWE/WVNUdjska0VuRllSSXV3UjpVKE8rfEdzWGRdW3IlUzVHUHwvTzUxXXUwYDEqO3c6dWlKTUlHZ2YyWSVQd3p1LG9bPEsoamMvc1M9T2NGL1I9Ty5bM2pHbzohO2RMeTRTXVtjSHk1OWU6bk9dTCVVKno2aTdfZE1qK2M7IUta'@;
put 'ajIkczZVMjxGeTdwN3grLzpkUUZbTE5jbC5yJkNVUlpXNyIweEt9XzFFY19SKihpZioyVSJjOGh2dlUrN0ViJnBMLDIoc2tOR3N1VzhbQUE3NT1fQ3ReW0JBIS4mVUBtUFMoXzgoeiV4Om9VUWE2LGlAdTA4LmVIYSN3OlY0cVtTYj47Z0hxeHBMMiVPLCZ3W3FsQE5PYk9CbXx8Vl1tXTVDTjB0'@;
put 'WTBOWjpSNSpyemJdSDBiY2tyJG54XnAkR2w6d29CU0AxUWFkMi9mRGdLVDBmYVlUOHI2Nlk7Sl1LZj10RjRgT3lgYVozMndwYXo2cTtaPFlWY3J9JTV4OzZQI0VwVmx4amw/YTtiezxeXk4wKFdRVW1DQDx6UyhIVVUicjZXSH4xSC53TltRR3BHODt+bntEOE9YaSolUUIyUSQweTNPW1F+TUY5'@;
put 'YXNLeUdbdmxVXStkSi9eI0gvVmxzYTYjMjYle2chXjs0UzZiWjNrTWs5eGpXNitjXTdsNjpyYH52SCN7WTgrKyZATC9JR3plXjBvKkBpOVB3fj5hWjM5WH4mSFYlUj5kZlZ3flhWc042YnZFbjcpe3ZFbjdvZUM3UGsoYCU8JCo8SWNIa151eX52K3wwfHU2Oy9hN3FONmJPLnp2OzYlMSVSKXZT'@;
put 'PWh4eU9JKzY5UE4wW29HM05VOklMbDpyNnZzYjU3MlhgW1E0PnAxOjxbLnZdYkpbK11HXz42RlY3TkZyeyNlQmNHbyR3PU9gYVozZjk+WDJqTjIweHFOcTtFOyh6OzZfTHFsdE42YnA/QCo0U1ozQj1gOnpFe1ZKODNCTEZBcEZwS31dcUpMJnppfCsxNWR1Yj9iL1tiOmhdbTtie1spd3E8Omo6'@;
put 'SX5gTjk5N1s/fHR5I09gWVc5TC4lLkpbN2puR2pwZzxGPWZmPz0rc04+I31oYEIvc1ZKfVRuN2ByVXNXalliYmRiKF9uYUhSJV9GX0sub3tRVVNeSyM4NXxKRkA4NXxKYG1qVy9lZUdEfFBXOVB7N0NvfH51Kz5+YklsfXlgY2tgOjo4SDhbLHVDRlljPGUqYjBxK2BGQlUmQj1LZVR8SUJVQ1t3'@;
put 'YHNwSHNFYiJWT15KOiRiflV3Ykd6W3w8PiRVZlZNandONiFCL3YrM1BIfU54eU9nS3hUSSx2Tm14b1MmNktbRjxwUz1lfFV4VVBFI1YlUG42UmlwQ1k4a1RjQDNBYE5OfDFFPClVK3dGOW1ycHJCQG9WbDQ1U2B5YHA/JGxCWyV8Y2tBWj9NJVt8P3ZAZ35NMHErNG1wSEQ4Q29zOn5+TTBxK1cz'@;
put 'XztPTi4xNmJma3U+NX44ZjF5KnIzOEhrWCheVEJwL1NhOXghYjhuS04yZEc9SWs6RFNScUAjb2giXUcrfFdoWSRicD9eaXlnakdsVSQldl1TXSh6S213W0E8eHx3aEMrSC41cF47MFovOFVwRUBRPGlgOHdsTlY8d3lSKkR2Jk9ZVlFmMzNeYGxjQkxgT1gxXl9heURlQWMlOkA1cUh6LkQ9eVZG'@;
put 'd2NLL21oVnZ5RHNOMH0jUSMoPSQhP29Ldy49ZHpCa2FzZjloSzdxKzBuRjBQVjJuLFtyPjA7UTAlcDYhO20vUSMzVUxwOkhdVHM6V2BWVzxAJmA8YihjcFt+V3NWaWg5Ryh3W3EjYWdqKSY/NU4wcjpVOzRzRHtycihPSjJKYlhdeiU0ZChkeXpAcElNW2JEeTJSbjY/ZEV7IXlrPGArelN+M1RO'@;
put 'eTE+eEBlX044QHd5SzorM3BhSzovOHghQDplLi5ST2IxbDQ2czpzbDI8N0BeN3svKzNqWUA1R100XVsuKzlfTCN3aHI7ZH1gNzc0eU9iM2FkMjw2NFMuM3I6Iz8/Yih3SWA3N0d7PGIodypxbnA9YjtVPkRvJSgxaHlsb0slSV9faVldJjFrSlIrJFRWQmhSNiI5WXAwJHhAOzkzKXMpd3lqY3V3'@;
put 'NkM7KVtfaXhENyM/NUlNJVJULkohajhGKTNlZk05U1g5IVk1Oj1bYzhjP21SdlZGb3FSXzR7QDJsW2hhekNUKHEzdThQVSx+eCkrQnljLE1Ta3c6OXVeWzUlM3FuTkpfZHROUTtiXntdQ355IUNZSz0uU2ZsITp7eVlSLlNYQDssYDJZYkgqIUNJKnJ6Y2Q6bFFld2JicHhpTFA+P2oqXzZ6YCMs'@;
put 'Tn1pZT5ASSszZ2pPZjhWOm9bYzlkKFo5fHt3Zz9LQzVgZDAldDo1ZWArc31OT0dwUnttMVtgK15ENjFdR31wV0NMI2BmLj9zTH5GNGo4QFJHW3pgQ21wZ0cxeGcwJUtRdyVVNTpnY1Q9MDUwemM4JT1VdjpaWyRkOCV6b2pXallqKDs9ZDpoV2oqTiNaYWZXSFBHcEpVKHpnOCQraTkmMCl1UTt6'@;
put 'Tk1LUEooR0R5MGlyNTkhb2RZJHQrc11gVlJ6K2c3T2QzcVpSL15bUmJOaz0uM2cscXlnQDcwLzFPeWdYMlNXKnolJVpQZDhPYmU4MFZAXlFZMlpPciw9NzwmbCEvPGUsdzhDeV9jZjZAMmNhPGtIaDg2cVslbCNrd3JWQDkmajxufWQqd3FoRWUhMVkrQjgmN1l7RX0/WnJOQU8qek5GVDd0QlA7'@;
put 'Kzk/Om05bSRpIWJ7ZWImQD9ZPzhIZCtxbk43b2Ftall+UzZnMmx4LCoqPzdqKlUlaSN3JXNLQSV5eihndFFVLDs3YnBeTzt+UDtiYXs2ZTNgTXRvY2J3NiYwXT94b0dUTStRc2AueTFgY1tlVGFvOFZ+ME5oVWYpQjV6XmpiaCh2Vk81NjdpM3kvaUZVSCR6OCV5emlEPzZ5M08kcj1OfiYmTH1b'@;
put 'O2t8ajFbYGFSM11CMkF7ISt4blBdVmJHXXdoaTczL0cobzoiT0ZNWilIbj5NQT0iOl0sSVVgcjY9c3tHOVs7MStzfWhdcGZIOFJIXnNGalt7NVBgJDt+e1NBL3olYnJJOi5OWzQiJV1PPkBCMnZoTmVANUA9YmRmVyZ8RzxGejFMU0Z9U0NNblJJLDpvTXs9TVFYa0t2ZFs7WSosXi9uaGE8YTU2'@;
put 'R3pkTik5emptYTM2UU5lckdOb2BYNnowWUhyNn5yYSVBPV57c3ArfXJyLGErQ00zZVp4Zno3UEw9MHR2cnpWO2JUTTVsMyZ8eW9xSH03ZipnOC9TNXcjZUtbQDt3PU9pLitTNS96YXwvenN3WztCV0AibXg3Mm1pNFM/JlI1d1s4MEdRaHs2KzJYKXwmbzVaIkBeLnJdRSFZdSRdWXo7eDxDN1I7'@;
put 'eGcrMHdJTz1MQVA1XnkhUUt5YHw2dWgmM2MzPztOUzB8ODozd3BXVl1HVEEvKH1HW099SDh9Z35yW31KUEVlWl1rMkNZUEBXfV1ZSz1hayZaZDhXYk01QmVHUkw4SW1OIyo5fXtmWD5paEcienRUcHd7TXVgQVBCb1JVQ0Q9S3A4cHojVjRTcDhlMCthWHl1PVVlLlBFMiw5ZWtKYHZdOEA6XiYw'@;
put 'JCZXcztHdl16JXBebWhLPVNiOGk3Onx3YEU9aXVdZUorM1BdayNAVkpHSC4jci9uJHIvbkMvWiM9Vm1me0A5SUdifjNIe0w6e2BgajZXRHI9KnF7ckYvMERnei9WbCp2RjVgTE1TZm1+eXsvP29LdylbSCwyWHpjcy9Je3VdV2BbLnAmOHcpcT56eiEwbXt9U0ZzXSghdjZxajI8P2VWaH5ydGBR'@;
put 'cEswe2ddQFZvOHUrPW5VWl1hRUUycnN4RV1adzpmOm58S30qfG9rSHAlYWQ4RTxTU2ElOzBbaV97YkpRJVdQKHteakVLKm05K3RyNndPeiQ7KXAiPTgxIVI8Ny4yMlNVVEgyPWo1Um5oNztgNFNnS2E+ek1sZlJuOnZgYy5tQ0hTY2lBMit6Nj0jejMrUmxkaUEyQiJyK1Jsa3cqRTo8SCppQ2xt'@;
put 'e2o8aVsyeWMoL2JedXlIMjtZQyRRNTNvTWVFYi42THtBekIlRFlgMm86VjI7ekxvJWJEVVU3O1lMLlY4JHZbZlJVJndAK202TF02YSFyPDBraXI9cWh1UiZAL2UqU3g8WCE3UlsrIjEwNDJ4WSZ+N100ZF0qYlJ5KCtAcndNdEwqOSMrKXdKTW1IOVI1JnR+RlpDOmFid01jVDEuc11CMWB9S0ZX'@;
put 'YktHNE9EM3c/bHdMLkw6dmVUYUd5bEM7M2R3NE4jZDcuWiNKaFpPTkgxd2FZN2k7ZDs7XlI9ZV01emAjLDN8XnEuUHI4VFNEbTo2bVM8NHRrX1pCZEJASlAsZEgwTzBES3A6djtZKjwwZWtrVUVyQ1I8XTM/d3kqe2A6IkRnMngseTJYe2NhOStNZVM1dGVaSCpHLntkLGpDeDljSHVkXmBuLyk5'@;
put 'THt7XUhQODJGczwwbmlUTlsvZ3BSI2MhXy4mb215IVJ4ZltvZFIhPys+WDZXa0ZzM3RbbEBiWiRII1loQ3J+diJPLlNaKXwjXTVuRyp6QiVzenZeR1tDIWkocEhEOFZlPTlQLi9xeWdXOXpeTjRgcm9Pak5kWU5dZ2FhVChjUFNrKDRTOXcpeCY3aGAhVnc6cXBzTnBIQShTYDUuRzBPMFF8Imdt'@;
put 'MF9yYE05LmMyWjpwJmo7KXciPFNvYSUiI1I1ey8oc0x+bTFzMyYpbmR0bTtPPUs/Wl5saEduXUdtPzdncW8jT2QhYTw7PFVhI3ZWMVV4VyhbTzd5U2Frby42LnM4aSojdUtXXWVfTiVSPH54QHd5Z29HVDt+RG5GaEAsK3ZrSkduKmhbKzYxMlRabChydlRiIyVqJGsjY31SIypSJigxT2VLX1B0'@;
put 'PUM6dFYwSExnLF4kYlZeang5Q3pxa0xpeUl1dT8uKyw9T35eQW80Ryp0bChDJjQ/anc0Sy4+L1lKdV80IlozZmgmPEB8YDdeLEw0Ul0yWEF0KjF4bzEiO2heQSNMNyVzRSZ9YEFybDldYlJEPD4pKikqZXZCXWoye1IzRGd8dHxzcSFfYSE0fSpLSmFnPClFblJhTEFrYkhnK0Ivc0pLaWQ7Vys/'@;
put 'O0FAQFtUUktpYSlMam1pdkI8MjBvODgwT2VlPTpxQlB+ckVxU1szKSo/QGMoI2Nwfj5WPmo0fWVjPzsjKVBFaSU/O04vdEQvSnR8d3hqRXFTWzNUR20uJlIxO25USURkWT9WdD49eTZGVXwrTU5pVkp8SVBnZ0V+Lil9TXRXc1cmM0BRSnxJe2J0a2EpRT9pVS5RUjkhJUddQXJaIm0/MEN7KjBr'@;
put 'MHRuWXxfJnwkK1crS3EkZ21IJTU7RTVNYEtIX2MxMHgqUnZ6UlhDY0o7eCI5Y1JXYUxWVjlfOT4mUiVqRTA6STQxckUrdV11ZSJBXVgpMFlkU21JN1JeUiE8Wz9qTTJ3bHh6RUZSKT1EWSl9ZzF+SVJHSWFxK2R4Rml6UllTXlJJPj42ZU93aVU0NVZCVHk4Q1JYNHRFJjtqKEt8NHVvTzBXaSZO'@;
put 'dlt3Ynx6QXFgPkVNSk1KPEoqSD5KTittREo+XiVxRiFUfVlZZ08hQFZzfDxzLz5nfDgkTmtsaGwvKTJWVmh8Wm1Ifk5BdWUjcz1TbUVCT2lVPFE4X3N2QExmWEZpaV9RS0c+Wz8+PXRdfVNeWDomcnxQUjwmcH15QSgpKy91PUFGRG56QWUqNEtLVXtfQmlVc0lEKClYRz19QEJVK19KeE8uPkdE'@;
put 'I19BQVkwJV85WSpKSXlFYVhHbHQkOTFkPmE9RUVaLyJyTUw4UiVPOmBOe2xLQy5FSm5rcj0pX0AyVmZjUHp+Ll1WVTpGe2poWVM4PD0/Zk1MaDhHZjwpVG9zNyRyXSZ+Nkk4Sjc0UlU7OHl1K0BYI2l0KkQ1QWx9SyVESEo7WTZRKiRvaT9pTyskckU5cH5qTHxOdzkkNXp6UmVtWX1udCV0SEd8'@;
put 'OHZhfUk3KV5AQD88ekghQ1NtaVlTI2pMaExoMFdFUjhsO2pgbE8mOio0Qmt6VD1vfmZ5T1BYa24oVmxxOl02KFYqKnN4N0Ujd3ouZFVdejt5IX0/JHpBX2AsND1zbyhWbFN7dSI6OFRaYUxSaH1ffF9SRzsqdHVeXTFRKF9NIjpgayhXNGQmYkk3VzYjJTt2eUF9UkozfXRlaXUqTE4xN29EWzZv'@;
put 'dEBRQ2ZyRF4iPjRaZXgpeGIwSEQ7KXRPLnR1eWcoZSgheGJzL1M4PH0oVkdgS2lUJU8zVEc0IXlQNSppTGpJMGIxMHhVWmZtSVY9aU8mckNIPCtBemJEdEBXQlMhPGt0Ij8oaGlVKXBhUUtFKkM9I3Y+b0ZUKSluOnUuVSlFdlFxPTBwa199Pyk3ISskS0NjLEVQVGomWSY2WzI1RltGQmdzZyNb'@;
put 'KTt2IUR4Oy91Q2M5PGB1YHo1SnR2OHA4eXIxfVUxbClLS3RSRiQpNUNtPn51VkQyUUVpIjs3RVRFOjtlcWhWZlg6KFl+bEZCQkQxMlcuWWJCIzYkS0FLUDQiWHM0V2hCaTQ+TWFBIT1ERkUjZzxyenkxPmw2djJsMzlzNEZjQygzVlY/SSxJTUpHPiYiTipGL34qKS8hNUo4PT1LQkVRQlN6QUQx'@;
put 'aShgX1RSI1I4PD8/Zk1NUSlaTkJPKlA3dltmTlRuaSswcl5UYyNvSDF9bSg9YD95O04zNU5xdS4wX1VucnZfZ0RXVktrVSF7O0VsaG03Y0EmLDNyNjUvTD1QZ15oS29vIWEpXzlRRG57WiFjWlhwOlR8Ml9KMzJxJiokKiQqOnkxX3VGMVd3QSRMb2dJSTM0eXo3blhIYkgiS2h8WXUjeUNUSlY+'@;
put 'W006Pkc4biwpPz5TbEtxfCJsb0tFfiN1PmN+M01AKGMlZ2Q8cl5+e1UlPCVHOjIqTFJoPzFwYE1dRH1ZPmp6aXByJEozaWpsWCM0YE0pWjVEN3UmfDhUZSM/V2ovRHMoYWRbOiZFMH19RFVZP1BzJHgmXk9PTGdBRVBNeSN3dCFbdm5pcGRHUzFoNTE3KztwfT5ne159IzlgcjhxbXVPNSNWK0V8'@;
put 'T0spbUxdR2pGQ29gbG9JS2YpTiV4Ol5ZbjppSEVURVF0PnY+bj56RCZrei5vZGNYUHRdWnFqeSVjNmprMlY6bU07P3VefHhETkFgbTlrPilFdzlBI2dSe3p6RjRgQ3tucy53T0t5Km9wb0JkIipzbmFfSEVjMTltPzsocygoc1FgXUt9MHxtQDZyYU1uVi5XOSlKVnhbVn4pJSM1cFIqQkE+QjhD'@;
put 'KHNtOmAyPCR5aHRDfHRRVFE9RipMKGV0fXQxTmhKcSJUKHUjeDNMfjx3PVBhS3hNeG9ZYyV5YVVNd34sZFVNVXRWbkJkLGMzWWMlVCNmbiV8eH5aKSg9NHN8VW9+LjozfWF7eCkmflNRQ3xHRGJAR19pMDpRNV4+SSpIRzFWI1J4LGw9KURmLjBAZ1o9eHVIYT1vcSZhaiRfI0dsPSJYVnN0Z3l+'@;
put 'XUpLeiswU3x4ejYkb31JPnZgYkRdem04aiNPJi9AY2BxbS5eIjxefWclRVBxcVhmVUhJd15fdSEhc3V8RitQUXEmJD1bemskMT5KQ3gxI197djg0P2FUbnJ2I3xfaGpGYUxMXk10c0gwcj1yP2hDZFtLO2gzZlRSfTg9ZSl9eHk+flcpZE5nfj8pIjZUUmBSIyooQGZNa0lbam9FXjByRVRLcEN+'@;
put 'UW9oamBdblp1OGBbRyVqfURFL1d+UiU6LHw+SjFxKmQ4UWUuRF0lY19VMTJiaGs7QEAzNihCbFpnOGNqYG9RJGd3WWJRIypwJj8wXyhVPXFhK2Y0R3szSEVzMVI2cmtyRkU+WTEuT2JrLDMpVSRUZ15hQlUlPmd9TmlZdzRuaW1lT09SXz5ZenU3IT4qQCp4RU1KVFJmRDcyW1FNSiJNLldXWGdo'@;
put 'VFJYcnRbTHE+c2FYUllOfCt2ek0rNk9NcVhfX2lpeD0qTD5tPTtFalt3JnI/bn4ucSpvT2ZiPk5LUmkvWihoMU1AZHlQM257eXl3PSlgXklUU3kpKkg+fWJLYG9kP2xNOUZhal1DLjA0JVloamJ8XzpJK3VZR2dyWElITE1fTH1+LlhTWytOKVQ4Sn1AbXdJIVc6M1pLVjtXOHJlfDhbZi4jemxN'@;
put 'O1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJlfDg3WGR5bllSMlo8STtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4'@;
put 'W2YuI3psTTtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI21VdF18OFtmbFlkeTojOndIS3xuUmZpISZpcSpddy5IMlBSZmkhJmlxKl13Lkgla3lNZWxgam19WHZAYW4yVTNIZWd4eFBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpITgpXXcuSDJQUmZpISZpcSpd'@;
put 'dy5IMlBSZmkhJmlxKl13LkhsU2khJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcFkrSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmljdmdTQ1VsU3c8akswXlEqSlJkOGEkZWVOZ1k4R1FRZXM5bm1fKiUjYUpDMyZK'@;
put 'X21ObEVvPXIvKlhrLENXVl0wJmtFbyhwXj9NI211NEtxLGhvPXJtNlczWmswZm0sb1JxLChpMGZdMD4jXV47OF0wKEBRVXouTiMsUHEsaG9KM1prMGZdMChAUVV6Lk4jeTJOWS5QIT9la2NIaXIwZl0wVjYxZl0wKEBRVXouL3oxNmVrOipYazJON3gwZiFxLn5IMT10fHZocSRSLiN6bE07Vzhy'@;
put 'ZXw4W2YuI3psTTtXOHJlbFN3PFVIQ0pZJVhTblVrbVl2bDtgUHNlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJlfDhbZi4jemxNO1c4cmV8OFtmLiN6bE07VzhyZXw4W2YuI3psTTtXOHJl'@;
put 'fDhbZi4jemxNO1c4cmV8OFtmVi4vKkN6JSNAbmdsKz8qI016WzxTPG9tXm9WJGNkYiRZYjcyNEsvXV04MiNObEZgPXIvKkduLENXVkgxJmtGYChwXj94JG11NEthUF4vTj4zeE4+dCxPMWJRM2dUJWtvL0AxLE8xYlEzZ1Qla29jdjpVUDVAaW0kRGtHK2w5bS81Z3Uqa28vQDEsTzFiUTNnVCVr'@;
put 'by9AMSxPMWJRM2dUJWtvL0AxLE8xYlEzZ1Qla28vQDEsTzFiUTNnVCVrby9AMSxPMWJRM2dUJWtvL0AxLE8xYlEzZ1Qla28vQDEsTzFiUTNnVCVrby9AMSxPMWJRO2teP3VaPzx7JCEjQG5bPDArb21KbVYkcSVMPTg3Tz02NmRiZHlvcDY7dGcwU0QlX1ZeP3sla3U0SzVhaFNEJT9VfV99Z1RY'@;
put 'ZHl6WWR5O0BERnNxbWxiZGgyPDoyNiRTODdRYm1sYmRoMjw6MjYkUz00Si47NVEuQS5GNG0vS2xCa2NrODdiZWgyPDoyNiRTODdRYm1sYmRoMjw6MjYkUzg3UWJtbGJkaDI8OjI2JFM4N1FibWxiZGgyPDoyNiRTODdRYm1sYmRoMjw6MjYkUzg3UWJtbGJkUUpzcVsvVSQpXm1tcmdWJDchTD1D'@;
put 'Z3ptaTkscG1sYVQ5N2Y6SUBhJVIubWxObEZgdHwxeE1oS0x9X1tsLFhkeUxraFN3cU90LyowOTJ4TWhnSmIiYkR0K0lMN0pWPFsqRlRzISt4TG17aXdKWDxbKkZUcyEreExtI1hSMk1EQE92PWVwO2c+PWM6Jmp8aUhKQzRDV0k7RjUxY29SQCNLcGElV3JdYHRFKzFPaz5vMDIpaXMhK3hMbXtp'@;
put 'd0pYPFsqRlRzISt4TG17aXdKWDxbKkZUcyEreExtN1hkeVcyYSRxS3ptZDhhJGVlTmdZOEdRUWVzOW5tXyolI2FKdz1sVGIlK3g3eCptYEt9XzJta3U0Szx4JmtFb2FeLypqJDd5UURpJDZGc3FiVGFUYVRhVDJteyEpLHtRRz8zdGczM21eP1M9NjZwM0ZUQjJCLi8qdTc1aVV6US5LOnBbJVtg'@;
put 'ViFsPDRfUHJSMmx6ZWR1Wz9RYTM9QmVYT2plciR0M1ZITHkpfFN7MThrR3pPW1A0SjE2US5Na00ySWJCMC9QdGFKeVZdOjh1eXs8YkoiYmA8Ojo0OFUuQlNEakhKSTJ8b2JuRUAlI1sqNFU3VDw0T1pMYk5nV3lhJE9lTmdROEdRTWVESUo4KTtVJHs/IndNO2IvKip+aXdKPTpQbEZgOD1hOklA'@;
put 'QWBPSix9VVdePzM+enY0S24uJmtGYGQiLypTKFFiWko1PlUkPCpsVnxSQ0ZlVjkuLlkrQVlFR3RWZ1pFI2ApM0M7JW5xY25hPWUqUSRgXXFFZUYiSiJCLndZd0pVdUoiXm0kKXhfWTQvMD0kektoPTdqJW02QzppS202Q0g3Mz94XypoTV5ZcVs5ZyZ6S3M4YmtuJXpLTi8xWCxFTCk/KUd0JW5a'@;
put 'NG9LNUJvQFtMPl0uSVFGMWYpSywvc1ZIVnNEL3t6eTFdJVI9YkEvRmEkVWhabEVMeSVuO1djWU9ZInFscG1HX1s0O2phY0BKdCN2MnZDVXpDW11JNFJNQXtKRmVZdV1jS28/XTR9ayV2MUNxUm8/QmBCJTd4O21ePzpsYUp2ZypDV1ZMfmRTRCVQRldWNCZRSnZnPUNMbXI1Xz9wfXBGc3FLV2t1'@;
put 'NEt3RnEvSUAwIVFKdz1JdC8qW3t6S04qanVGVCkvfV9fcyZDV1ZWTFNYZHk6diZrRmBiPDJ4a354V14/ajovKjY7KkVXVmgzby9JQCwvfV9scGl1NEsjLmMvSUAsLzJ4WTlsSypJYUZtelY5bEt0Yz44NjslLjlQWEdDJTdwXj87XTpDV1ZoMzRMdU0xP2dLZjw7YXNncGFGVjw0UCtHaiRKRUxS'@;
put 'WGR5a1s3a0ZgXVtNdyJgKHZNWmhTeHw3cF4/Vl86Q1dWd0sqbi9ZMFc4dWF8fnYodjhHWUZrfF15e0ZMeVp2eSs8TTNHWUYyQlBHZU44ITpMLC9uRz4mZk14aT4mRU5CNWApMDVCWllAIXJRViYrbHwsRixMR01VTjdSQlpKKjspKjYyeEFGIVN9XzV0anY0SyV5by9JQH00Xz9XQnFGc3E6V2t1'@;
put 'NEskRnEvSUAyIVFKQktKdHBaW1RTIi8qdENlTXU/SW8uVWh3V0IyeDVLY1kiKXwpaVMvfS5ZRE4sLy9ZcEw3UiVaSVlTVmR4JVo0SV55YVIwS2VAanNrTVl6UD86Vno1KzMuaFV2Y3dRXm9ralNIUlR5W0N8b3spVWpqUzlQUXpqQTR6dy9GRTNHeEV4QSpMJSFMSTBLfnkwfENOP1JlKTZya19U'@;
put 'IVsybH5PYCVdd0xsVUh9ZFZzfmU2SV9OYCFUZno2Q0ZHX0wsLzA/QjUsTUR5SXdEdz5UOkZAXnlGKm5vT1ROdD9qek5WdFoyX3xMZCk+dlREbUwwS05HOVFfS2FNOSFtYUgqUiYmeT14MUpBejJ8Z1QzeEdhTnQkWmhUL0wzIWBLaHchSm96QkdUTnFNMSgrW1Mrbz1hcVpaNVpkantKYnF1R2xH'@;
put 'ci9gSzpNJiEpTkpWJHJ8ekpaKVpIKl12dStxc3x6M3ZUdi9ONHpSKnx6Z2tleGhbUVZ2dXx6fHZYVl92fHpjdylaLD4jUi9CUHopbnJPM2hfS2ZOMSEjTWUpSDBvazwhPmErckt0M3YicUxqYVghYSRNVHYlWityaDEyK1QiaDFZdyR5bU9iI25MNGJwTCNSb1UiWmtLLz4meVMrQ3lxKytrL2hu'@;
put 'ejYrWTQuNUphamopWk9ZJHJ5MWdrJHJicWxWTUVmVD4yVXYrK29MSUxUWCJHYkk+P0p0bkFnL2Y4bi9VdGh5cGxkW2J5dCI2KzJCN0hebllWIXomMSZ9L0FeQn1ZLj5NdFVaU09WeHE+KWBtOE4+KktxUipPKnt2clNZd1V0XkV8SUk+WCwkZ0ldMTp2b2dbWzwxSzopXiM/WyRVPFZeJXBmV3Fh'@;
put 'aFFueHVWZHV3WXNdVWhIKUN9aVNhNWhSVWFQWFo1JVJtUjtrfEpdXngoVDJsVFdwLCRMSDlJTUlXOURvZDh0Uko4fE5Ab3ZnJSVbKVc5S0RGeHIkXjB4KigyTy9HeHUsOi9XeU4wTE9fVDNWQSpXOSlae1Q9eWUhYGN3Rnc9eGkrY0MyV3NWOVJiQVdHbzB4Lj0wSnA9dTdYc1hkRn1LVD05OF85'@;
put 'aDljam51ImJMMzlZPEJzVjkwaixzPGVTTjlAaElFZiNYUXVaLD1eQS5+T0lZOiE+XTJjNGQuIWZLPWJvaj8uKVhMXSNifiZ3TWRlVmcvYVNOUzRSTWoxLH1lMSIjUFM0U0dqQHB7c1o4TDxlQDssIXZKQ1BFZUlMVDloQlozT2w8IS5USF5hSF0lLG58S0wsc2VNdnVqKEY1RmBTdyNoKnxnW3Jz'@;
put 'PT1pYjZ1U21aeyMucCYyNk9YfnImVWAmcV14RVhHMUw9ekV+WjBgbCZze2Q9UTpbLn1MZTV+MlpVTy8zflZ7QDFNMWxWOyszNC5lI0JXfFJEeWFrRHNsTmJSYF9tUj56bzhgX0hAJElgSyQqQysucT1yaVoibVRkOzdVKyQqUlppeHZnIXB1a3NOYFA2NVZ+I2MoYjY1NjpCeShWISE2cihiX0s7'@;
put 'RX1vWitaPH49MTlJbTQ+Oy56c0Z7Kms4e2okLzVoYHFbbVJQVixgXSRMfUVvMSVqXWN3VGhRUyxhdTEmYExXO35KTnN6KHx9Z1ZIe1JtfklRQ3JqTi8hIm1fS1Yrdjp1eVFbUm9KVWpWIXprZkF7IUo+MUVlTkBgN01Lb2RtN0F7ZXBrWktke10rM1ZkNWhZQyI3ZChzMkZzIlZANkRhInhlWXBj'@;
put 'WkhXZHVgPWksVk1ARnJ2eC5yaiYmSXFSTXBzVlE1K0VwUUM1cCR5b3BTfiZNQEM4VzB1cGJacXJuMGFWQyhILE1XIzlAYlB3R29weW44STJQTGEkdz0iTF1eIlZZKy9kOFooaG1hSC5XdUI7VWhAYmFmIVlpeGt4PGIsSSEzKU8uKjowd1Z2eXBTLzAmfFpkR2FESUR5dz9CK1Y0fmFUNnN+Nk87'@;
put 'SUohWWxYWk8jcCFxJnx8YE52N0JgO3pkLE9TeXxTU2ZdVWRZYiozKHxHe2BsXVBvPkpXNjdifkJEWF9RKkNAeWB8LDd3SGBTTmJ+NE9FZUR5Plh7Ojx6QHNbJS9aTnx0WipAJVtvXWMqZzhweXZ2Q3ldWUdZT11LalJvWF1MQF0xRzJzc0FQd3shO00vV1A2TkJMJCpSKiZ3fEs/byZNJHJjQXtb'@;
put 'JS50ei9afG8rcWdBLiZQfUBLc3k6LkIoJUcuM3dLSSVBSDVPdlZzemkqejZbMTVDaDB5VkgmXlRYMWBMRSo2LElkJlFYLm58KFpqQFhwfWBdUnVvOTF7QGNOeEklazFKK2pYXV9QP0tsfF5sdmtWe3xtXWdKYjZYMnpIczNnMHo2Zjl3Wy5Qd0ZhPWs5fH1hT11AUlRObHxBTHtiPW58TT4qdnJu'@;
put 'SChHKkcrayhkO1VvYDJgeU9vU1c5QWVCKCQzQ3NPM05BK18hZCFhW2sxUDpKb3xgOikvOmR8WUxnZDJVd09xPW45THRZRlZAfDksPjZ1VGZNTn15VUlCMHdTWDVhWE8lbyE0UCNYNndJbDwwI01lYm1YbiFWY2dibSxnKHdlayhzVmpBe1RlIXFycHpbbjo/fDxLMHIhMS5TOGg+Lj5yZCJMMnUr'@;
put 'MzZKZERyOHUmQltUeC9JYyM4XS5ZKk1lb3JMMjhTdXpDN3QrRCgyemM6YEljSFpffDYoJiVyOFA1Ln58JlVzRkdwSVBsYig5UlNCWjwpWUw9emJrLiY4e05mWF9DMUx8TzZaJjwwIXNhTUx9OjhQZkoyMz1uOHpgYlRHVHB3RlRRS3tSKzN1Xjg/N0BTNDFadk1rZlJtLltASyQ1RXtubUY1YGNI'@;
put 'OXZNbFVIfVNdVlNvN0Fzb2F4XXhFWEcxTD16RHNzWlpKRC4mdlo5Znd7X2A0UCMwWlRrZFp1eDFTSSFwJiZ3MV1MQj83dkUmcVV7KilyYHgoO3MyL1REcUQjMUBBVSQvckJZUywjUGQpezRic3tRZW9fQGU1RHksSXV2S1pIKmlpd1JGSyEvYnlfOWRvOU52ViJHbF1COXVNVihXMCF4KilTTTZJ'@;
put 'Y3h8anVNIkVkeWtOPUhxN2tpdmNGbURyUkhec0ZqaVRAVTJGQlI1N05DdkVLLzI/MUQ7SXhHZzdlWUtSTV1PfUYpc3ZZSFBAMDBIOF1qIm8jYklSL2FxJXohP3JoUlFxTXc1MFlSWmZocTM/Ukxec35mSSx6eilxOFFObVMrVForYnohWSQjWTZZNlk2WTZZNypZUiZXRFZETUpqbix2OmZNJFIs'@;
put 'NyNZdlZ6IW5bQVtHfUs7fVJpfio9blVAXkF6JnF1Nks6fVJuNmZ3fmRZNzZOUC4vMSpxdE5SNHFbXTF3ITJ5ZipQLn1SPTBuaCIxTS5SNSw+IjF3Y1JZW2soS0BaOSw7OjNTKnpFQVB+eVUuWnd1d3JhTSp3SGBBLihRXSwzZkwvPV00ZCVHInNsZXxKZG4se1VoaHI2dzNNQjQzMm1haWo1aT9j'@;
put 'KGM/KCUqRmo/Y3dKZko6ejY3I1lDYlt+JDAxUCN+SG1RU0svXjE8eno3IypDSCpxa214VD5ebVI0YlMwYHMpd0wuLF9tN2thfDZjWnRRcWBtNzMwNjw/aWVZTV1STHN6ZXs9fnZIYSNDWWY2OD1GfiVdey4xL2t+aHt1eUxZKE5TKkR5WGBWV3NAL3l7K3Amc0BjL1F3dURvT3k7bk89SyI1fkF7'@;
put 'K0lbSHt7eUxZclVdYDt6OGI7QihOTH03UGl+P3pKemBaYzdANTZ0TFRHQjpXaClTcVZofnJAKTxgTmZYWmVdXnFeYVkjeXo2Jl0wNjw9YmJjYGNEMmByfDZKJDwzLzFVOmk8Ty5VPXAlVitJWChaPyMwWkE4bCs9MWJaX2JdYX43OFtXXTRSS2pmUmVlIT9yIzhbV11jRkJyXytVaGpZK0s+U1RQ'@;
put 'MEJie1A1My5uUjFPcnBFezk/b11lKiUwaU9Ve1A1R11EU0B8d08oW2QxSGAmUVpUUUwpXnMvTVlmWVUrLyFJMTZkQ3JgY1V9SWhFSzhoejA5ejRzVHs/NUddZ10oK2I3dHJob2NaYCR+MFprI3RteFowWEt3T0NiOWFOa0VgLiFrdjZhTmt5PzBqfF93UXoyZEExT0NiZDFhLiQmU21eL08sOlVm'@;
put 'NkgjaiZTbWsyYjBjdipLbmB1eStTL19+N2JIMlFPcjE8Kz5pd1ZdWDhgY2JSTV5SJT8wVGRZNzV7MSxvNixnT28zLD83cGY7Oil6LmpFWjlpSTJpRW55bD9sM0M7ZWhwZk06V2RyNjZxYCp6MmdqIlNmUiVVKHozLFJQVSxYZF4hdmUhP2ZYcGZfN2xwems0LGJkQz1kWUVKLkIrYTBrcmA9aTg+'@;
put 'KypXZVFDPGg/aShYKDJFbyE/NUZ8M2dXMU9fUGJtYSU4NUokRTNCemgxYkgvVVNUWVQjNkQjP3wkMnVjIT9fU3Y3Ki85dzUyNjI3bF9CWyR+MHVjMytwclhqVFN2NyovOkdUNkhwL1NmfSMybjh0Myl1SVRIVXgsUFghO2xvKFl7b1U9SiUyJTg9LnwodjlOVWYyYy8zTl1ATF9aIkAoWl1tKGQ/'@;
put 'JiZVQDcqPUolNFMjNm1dTk5wVF1IIzJSaVB6W3FpVkc9QnM6VVsmPV5ZT0dwYSVpOW8kcFQuKlsvXXNSW1VmOUBrIzU6cnImXVl6dW9gYUh9VVNgJHpWP20rOVBZZ1tqc1lVISx3RV1zT1NzfSU8ZkYrSUQ4Wy5BUCsvJDM3O2MsdF16JTFLfD0zZihkNS4jMzIwXmRuL0ZbPi42N1sxOHBaTyMy'@;
put 'WWQlUVNaUltHSmVBVCsoNyZZQ3N1VmEjaS5qQ2ZUWWRoVHx3bH1TZWZXLjFSbz5qIz0iMSFzXlJyQDdiL3kzdmxvKUkqZFhmdyVoU2RIajJWb1V7UWJMMi5TN0l4fGhJWFdqKXJ6NTwreClWcWhgO29+OSwuKkN5KStBTko0QmE1cyZZcEhkMjJqWjowWlt9RHJYWl1aZnhZM2x9UGVUXlRyUE4x'@;
put 'LkYqZzlqd1dkcWxCTERXRCtXNlMzbVpuXV1pZ2EyKWJZMikyWD0/NnFoRlJefVk/Jmo3JElnIXglP29yNXhqeWMmVypFc0hXZCV3UnpRLk93OjR4alBYL080e3Y1Njw0P0ZaL2RzJU8qQF5HYDNrJFBEbEJpOyIiV3ErbC9BWWdNNkZwMTtCWEwyQnNDaUdQTzduQ1VPNSZWb0FCQk1iTypPN183'@;
put 'cSxDZF1DJUlaTGdBQUFBQUFBQUEyV18pRVQ+fTRfc0k9dEtgWzJFXT8scUkmO0FKYyR2MlRWUXFbYUQvYkFqaXFhPjk0NjQpKyV4KHt7YDxiLkJxU1F8TTM6IloxbHxzZSxVazR+S1lhdit+Ml1ed09+MTRiXVR4cVFXPD5HU35wRjJpTiIoNiYlQkNvWyhBSj9OKS9ddkVJaUgkRi9TKjo1and2'@;
put 'NXRdRjNpbl1Dci8qPUc2SComYkt4YCJIIVlLWDVIX2AjMjBHU3tbWjB0WFBXekhicHReRkU7Kzdud0VzYSF4LEsscD1jWkk3TjA/dF9+amFCVTdWQDZSXl51NWRHXllfeTN3TEN3REFjdiU+flBkb2JMbCppVSZIdF89bTFAWXNjS0Zhcn4sU044SHtJTzlgWWNQPll1bWlDdCU0KWtkZ01tMTd6'@;
put 'UypLO1VwSzRERjRQUGNgXzw1IyZ9L3s/NS9NQE5oKjN8QmdtUHRybUplPCtqSSZpUD08W3Y+KipwX2c8K0hSYGJHOEJldF0mS3NFKE9ydE1bMExQMSNFa3F8JD9eaUxRZCZ4bTFCeUBwMWp6eG4xOUQ0cWdbc0cye2d7dVtQfVEmfjh8YSRnLDJLVjxxImNLa05gLzZGVl8yJHByMkZaOktHeTZR'@;
put 'UHZwbld9M2J4bVAiTmFUYTRERmUrL1tgWFFxTzlhNjB5RWw4QmQ6LndkNW4oTm5FPXB3KFE0RFRaNzREVzE3UnpEYXsufWtXTHdSfj9+bFU3PGF6PEYpRykoY0JOdClRIkBVbHIkOC4uTix5Mix2OT11d3hLQVBadGEhfSV7WXpXZlt+UVJOdSRCaEhrSTo1YkZ8cDw0WmwrX1pJJV1iVnF+OF5z'@;
put 'Q3ZrN2haPW9weUlqSG0wUkxSejMxLlVwPjUvejB5ZmV9ZnlSWX1XP01zJmZyOVtCOTZ6cV42fmhvKHMsMEJDOmJxLlM5W2VqTHlNMXg6OHB5Jno5XUVNJmVxMnkvaTtDSll1O0pUUz5ucys+bHV4Y1VsMDhna3tHUipBNUtwO2F4e15EIXVYWmR5MW4rQHR5ZFlaWjZ7VFVLTFMvVlo+Jmc6OG98'@;
put 'PEMsWWM7RDhjeCpFIVlqfERDI18xP2JTK3BwOnBYcippW2MiJm5NbT84aDN7YHJuQ0ZHQFc8OGc4QChQNGFTX0hsbyhaIyJfalh6Vmo8dndURF9eQXAxWUV4PzMiOl4oSF5GdVhiUU9YIkxVVl06WlB1QHVaSlN0amhMJTJmNClKNjRuW0g0Q2dfRktgeEx0PjRLKit5Uk5WRzFyOixmUSMvfH5N'@;
put 'dT9YaWtHP0VSTj8/QVtVYml8L3YzXXtSIjFwdkM6fnNSQnsvYUlnZnJJQTYwRnFMNnMkRDFeXmtkR3ExUFhdKmFJd3hmImBbeVtQL2FzVz8wMyN+U20xPEBqNm18PmE+KyEjKHB5VTwyeWYlLztMJiRoNUhhO3IvVFYmUWZvJio9XWZwPnhRUT1pcDU8PCROejQhdHZLRW41Okg6aX4wQjY9dTY2'@;
put 'PTJXb25WanFXYkFLYEUiWjpSaH1CQkBNJUhjQVRxISQibk0oeUUkQSl7eHdGU1lsL1hPL3hKa1I/dUc8RDJnRTFAfF9NNS8laldDdzAkKXRONTdqakJ1JXk5MVRiLHgzPEo7eVcicnZeeDdLdTdWYXJvbElOTHc6aFtZcGBAWS5afWpMczBFNCJqKHw/Ql5wLGg2flFJSSo7fFAlcSVeSk03a0BH'@;
put 'SFRFVnplOE1hfjp1M0c0OUVnb0JhJiNRQFR3S3xPWTw+UTpKKCRXdW1DcjdQTDZIRz5ya0Z0YilqT0lLUil2bW9MM3xYMEpHLGBId2w8P0R4XUllWGYoZXtrZEMzd1d+R3U4N2lMLmVSOV89L2hQbHQiW2FfcDlpK2QpM2ZMKU4+fj5iYGw8SXR8SUhLTU57RHAsRnF0MiNGTHo7XXZeYHJ8YEJH'@;
put 'VGE5KilMbjNDcWcySFBtK0gxUk1TImo7MVNNSjZod2g1al11Jk4zWWYpV0h1RF9HO0NLJjpRNVlaN1dadkVDQW1IdFFuTGVDS15lbGRkRGR7YW43REVTaHUpU2laYF4ocj8sc1J7LkcwUGtSfk5eZi5vdl05YCVHZ2hfeDhrY3I9TUV8akEzaiRGMGNwRmFNQ1U0YzFQLkklXXgqVHYrPFgxK2RL'@;
put 'Lyk9QDZwek5bISpRPVt0YnhSUSJUSnBeOU9mO0VuenRVeV4ud3g4dXFzX1VMMj5uWWZIdjlNOHNdIXM0Lz5ydUJKb0p1W3RIZT5ETkJfM19MXmRuQXpqazBNdkRrJjUzPiFwbGB0WkwmM2l8TUllSzU8bE4kQDh4amRMOHg9NmloJGdQSVcwPDFzU2JXL3VIQk5kIiQmXTY2S2BKZFEyTzBPTyt5'@;
put 'KSV6TysmM2Z6UUxWNkN1KWQqO2ZkR2FdYSRrLj5rZV1SIXxKS1JdIlNOSXM9RXloeUl0Rj9gXmFgTSRkayIwM2RkTXo8MHJ8cDFhUk49ZUM3TFlKUllOaE9+JlBsXipxNjs/LHI9e3g4QFtqQ0hDJkN4LjVrK05bYk9TakttUlgxd3tEanJQckRmOG56Wm1mV05WXlplSHl6WX05NTtlalg7NHho'@;
put 'fiQ+fUxWa0RuLkpjVE9dLEF1VzNIIXckIlFMN2Qlfl9LRiFuSnd3cToxTV9QIXJJJTtjQDxbJWgvbW86YSh8KHQmLHFQQE1Le2FZfE01X3VGUVhVbSFIRSx7TVIzT2RiLHlxTEU2QUFHdjU9fUdmNz9GU1FbcnNhWmdJZyV0Tn01JEN9ZThpMzolVzQxZExUbShIezI8JiRfazpCfCVidDIiNDQu'@;
put 'RGEmSSo9XiVNIWVCInBUM3s3RSR1cGt6RTBRU3owcyR5Xjh4fCMxR3U4OygyL2VgIy93ODlvQGFua01RTlZQbnVIRFtyYShFXjpqZSs6KWFXcDptX08xc1d5RVt+dyJAfnZ1MHlQSHYmTVdLLjx2NEU+ZmouRjlYVEl3d3NZKmwsWTdbdVlIdm02UE5HM09QSCJOOkBuPjpYVCY3SzFSYXViUjZ8'@;
put 'fURVNSU7Plled3NjUXJVJkIlLFRMNUdzdTtPQjVEO0lBSjomJDdGRmVhKDNoY152fW9ob11UNiU0T3ZsMSxtKGFsemApbj4zRGBZL0N5JV53P204Ym5HO31gQHVDTHRRWCZ4dDU5UEUwJmIzZC9wK2h7cXchSCQmN2deW2lDOksqXyI9bC9payw/L3VTXy52ZVNoI19dbllYSFYjWmJXVUpLRm59'@;
put 'XU43UXRMcEZISClANEhwQDdiNWxgWik6PTh5LEY3Y1UlanFLPzRlZE9Da25GUiRrRyFgYWd6RH5kU2JHV3o4fW1lM1U8TGF0TlpCYmcwaWJZIldzKmR4blJ+cXs0Ln0zP0t7PHZ1QXlWa1I/bVk2Q09PSkBATUdDMXNhdV1Pek1hMiVZeDQkR308dkcuRmMpe2Y+M0heRE8+XkUxek5vIXZUW2Rk'@;
put 'IVVrfD1GbGJiVmIuISRmWHB6MTRCXWBifEkiQFpDPV9wTjApd1VGSXNGNFJ5OT0+YXkoaS8pVFkzPihiMkkzPW11YT9DYG82M117fmt1OTdaS1o6OjtYUmlQVSFlcEhoKXpveGRWSCJuP1p+dmBmYk8qZjBPZGw3aDxhRnR3dV9RWTombFlWV3REdD9GVntzekVaeEYhcV17JVtOQzxyanVIamlL'@;
put 'MyloYyt1d05jLlc4Nj97ZE05TjRabGk8V19jRXwlMD51MUo4OExrX0JhWSxMWmV0VWRUW3xZNVdXOl5kTklodHp6KnRZYzsiL2o6KnIyLjE5aGt8UnpjQF0yQ10wR25uVis+RD1HPmcuaEZVaCtGPWcvNTJmSXBJRTpCQTQqPF4vfHpoPF9wdz9GYUkwM1NmNm1HJEZWLjZVfDgpanwhSiNgMWB7'@;
put 'VVcsYUB3cmgpMjVpW2szenk8Rj1qXy9eN1gwY2w4ND5bP3pkbTk9cHtdTl5sQmdPPnhUfF14ZVYwVkFue3UxQGBqezFhZFslTU1WNl1hM2NiT01RTDE8YUBsYTNwbFczaH1dKz5fM2QjQG4wVE1ZZjN1ejNJOClQWiwwXVpedWdpaEtub2JQO0BfWWFddFNvKTRbcmY4c0slUWorN04vKnVna2Ve'@;
put 'U1IlfUlwIXUwWnNBQltVbiFgOG5pWFVJZTY/O3pwUGh5fDxPajVQVzJZOEtZQHlhVHxmWVA9elt7dVFVS3hSWn1uO1s7Rl9JN3goRUNIVDBfanc4KWxKVCxQdGNrS3Mvcnx2NngvckRDaUV5V3NYRltlOVoxIkFpcGpmVjVMZFR6US42PGtVP21sOS4kSzk9VjErVismMkxNRHdfWkB2Y0k5JSV1'@;
put 'SHciSXRAYDs8K3h9UnVCdW5iOUR0bkwvLlE8WGc/dV1ZX0pSciFwYnlUaXsiImIqTVM4WyxGJmZiMnB+e1YxXV9DRTB7Tn5wKi8qI1YhWUxvSiFZb11bVXdqSFh7VitSIT5rWm5LZUwkZjAmSDRzRnlSeSsoekhmPD4lYWRxWzNRVVosTFtOa0tSWjwlLG5bJipqKUosPFJbNXModnI1Xypmc348'@;
put 'Nm1zXktPOF5kPGZkdStQPV5DMilxXVplRjRlVXRgKVcmVGBGTSZCNVBgdFVlc2F8Y2RdWjhIRFZufSE/Mm04Q2FDWUJZWD4lXmJ1NiM4dl85XkQ9OlYlSmlTZHNZRC40LkcxKyFYVkNWTio7c1A1TzRPPnduWyZaSCRWNUxsKSpQYltzQl9OU0VnQ15qfkwsKm5ISUBLWm5OXyRaWUAhT2FyYGFu'@;
put 'UmMldWU6N0pRKHwuWktDMWtXKiEubH1JbUl5UTUrZ050fTVWaUZoK0Eia0F8dzNtd0pIfUpDKH12LFsoL05lIT4oJSlEV0IiSGxaazkhPj8kS1ArdXhJSnZ2LDtXcCFYbj8mdHMjbjp+QmokUFJGeEFCcS8iajEsaDUkPVtPdVJkYVReam14RDlZLGJLen4vTEZgWl5RVn1eVClzWkBVOyFZR3FU'@;
put 'eUBNbTo0e0FDPDhLMH07eVRfaUJuMjg1ZzZKXThkQHojd01STzZKN31dTXZuRmgzTGgzIWZTcW9mI0paOXE/Zyt7Y2Z5MURtJjtOTW1fems1Kn1fITt4eXFzR0tSXT1BakdVbkJmOFsyZH0kLiheZDZZVzY9RmVgM2IoZndjLk9jdHM4ayprMF5pTGkkKEp9Kn5uY2NaU24salIsIyloQWdJW3s/'@;
put 'TyxdWlR6VEh4Nz9gKE4keHJ1RmMkWUsqcmtSfTkmaTBVbCxVNFUkOjc1azdhLiQqRn5QYVpCTnJxX0pESCQ+Tykkb1BnIUJFJkA7PCUjQkgxalgoWS8xe3dkWn5QY2t5e2tNJjYxUmtuUzkuWD1JYFRRSnhXfjZQfjF4LjpEdUl9JTdyckx1VCF5QEd5cE8vfk9VUjx9WiJ4fm9SQEVtKGgofm9z'@;
put 'RClqNU81UF9xPzZLPn1MbmI2QG41SlY1PWwwPnVRRiIuYipden5oUGJ8Oihmb0hAcGI7eSZ4ZCJKKXR5XllxXSU0X3Q9O3QwdXxkfWkuMF9vUCtWTFR3Y0x8X1E0S3IsO1RdaUZSKnRVKkQ9QE0kblhZYUR+OnMjL2pgImcvUE1mZmltfXpreF95JTh2aG9IWipiTGM2NnpMVT9eSFtwImkrcXM+'@;
put 'LGpTeClTRjloM3tBNHIhcChpJjgoNko7TT1jYkMsTD8vclt8ZUk+RWFZKnpJXz1QQlU2IWkpZSFYJS8lPX1aRGd5Z0x4UGo5OGQpQDF2Xm1PRiQjSFBHa0opdnp4JlBAOGx1JWoxU3d7TlN4bHxEMFJoTWpmYl16XkVLY2JdTlNjY2F3c3x9Y2pLMzpQSCxrWmB+fVI+K2JwSURTZ0Qvd3E0el1R'@;
put 'JG02aHJjWF5FZjsqX1pXMndRUWMjQG0lbWcpNk0ieWhgJHk2Zm5XcD1MTGd9U25eQz59Y3BGVUJdMytXNyR6RCNJVEVseyY8UT0wfkY7SiRxSmhtWko7RjJeQ3Z+LFVMQVhgayt7cThNSnVafk9DLkloVC9fJSs5aU5gbikmfDdUdkB3MWhhWHU+VSYkWzdKOWVMQFZeLGpJRms2XkVTdlpBNXRN'@;
put 'ODp9dyZYPHVtdWdaVGs2RXl+QmQsOjcrRmklL2lmP3JiaWMpQm9MNXB6SUxMSFl2ImprYVN6UDJ2ZjNBMFlPQiV6S0xDYFZNWzsreXYyKi9HOWlOKWdUdzEvRE1obVdZQGJtPklWMEQsJVBkZT9maTlxcVE/RGtwVlkofUJASyRMZiQ+fjplIUs8NnVmWEtGVV4yTXhiejt0KVRYQX1hK2oyMj86'@;
put 'QkgsbnQ9fEFfNHNTTUtnflNUJnxtO24saSYjbFg1JiVeYSM4Qn5adCRHUWZdbGhTP0owZ0kpMV5VIWhNXz89NF5DZjBAIWJnVlJtISNXOk87d2tFRVhgV34jaElgNzgzeT5VYl1BTDcmbyVpKSlvJDZzO2M0cixxW1k5QDtOWEp+ZX1sbGs9bDk6ZVl3dXVMfl99QXY4QitdcSVnR04xL1Iwek9X'@;
put 'eC9CTHQrKVcocUU/fncmbmthYiUkSSxXezRmcGdZK1p1cURSTkhdVGFGZ1YiMjVwcFBWfDBzSjBUTiZuWERRTShbQmhIN2ZnfT0rVl91WzVnZ0pAN1lRbnRSMFEjNzJvL14oamIiVXAwTFc+MjgmaSkweTV2fGxFWU19dEA+JTtNMyhZNFM1KkwwSy48K3sva2MuZkN+QiwxZngpKGV9bSxaM1Nt'@;
put 'RSIrRHY+RSwwO243WCZ8fTdrL08xP2ZsLCRrMCU+N2xHUXtFUihqYjwuYWZBWiU9dzIoZnZPeFJDRXEiOTVAWG8kNWJUZ25nfkVpWFpafDl+fn1ffiQkfH0ifF5FTG8pWUdAOGk6YSkvMURxWm11VztEfG1HQ1VdVEQvODVXcVY0NXpaMWNMMWV1KC9JJHRZY0Q3Rk9Hb01dMDh7YSk7JVdJbD55'@;
put 'SE02eXJIUz45WS5qcCwiNmYxd1A1aC88V1Y9ez5ld3FsKS9DITI3KCUwey57NUd3UmMme2c7NzYzQFRRImIscWYlKEM6LGBxJio5OU49Pmw9c1J2TVp9TGdYSlFQSnVWcTRncyVaV2ptfD1mM25zZn5AM2tiPH59RSgpeyV5OUQsJTNXKyVlcG9KX1p1akloVCxXeGM/Rzk/WWl6QFhyMT5JbX1y'@;
put 'Vmd1fHBDNlZzN1VHdURWJUAyNW1yWHZyaThUXjR9QFRIb35sMC8mfnkpWSFzeTJ3WXpvLzAqU0EzSGpGLzUkMyVuPVBpbEhUJEZ8dmlPeD9bT2hCImxOUDBiYWs7O3skMUNNQ2M0L1tnc1cvL3xjR0okO1ApMWcwak1NY1Q4MTpZLmZPVEJBW29RPiRIX3tOdF89a1t6eiROQEYyMyZpZUxEWit4'@;
put 'MUJtTmcrNCspJVp3IT18fSNedyFIMmN7XTwhM0hHeUZkWSE6ZUkkS2FONmw1eipJPWxMeVQmTVt7dzwmbmR9L3E0PSxAT0JEMm5YVXcjPDh2OVFEZjRRYypQbkM+MWRhNjV0O0pTa29jSFNWI0J7RWcjdD1La0FhU1lsdndNSjRRZ3F8OXhSU1U7a35HbEIlKiRBU0R5Y01FbndGPVg4MDZGVjp+'@;
put 'eV1FSnplZ047UEJWSld4IlZhMXc1aCYvPU43W2Rga3tAazxLbFVWcH11UFk+OjchJCY/Kn0uYDhNSUswTyEvJTUuRzdaNTJrZWVDdn53OGcqdExYKGVjKihVfTAyQ3h6K3MxMiNaQDo/W0czWXI5czVIa3NoPWNBSkwsQTo2dz5EaE9ldUVCVF5NPXYxOE4yVHIkJSI4aXQ8XXphbEA9OCRiPD9q'@;
put 'eDlwRyVbUmMvS3FrP19sTn5JOEQiSyVOcSRqNkV8R18lNUdOfkx2YWJmPUpvIzBicD9mUll0UjFdMl0lRHVDd2I4cVtTbnEmdCo6O2JZKXZERmQiSHUyJTNoVVQ6Zld6UFdsPldsPSE7RS5bQyxVaDokZCNZL0QxUWdVJUZ1REdUQVYscjR2OWIyPW02NyI+cU9APWR1b3BjPlZRZWM3S1FmVU04'@;
put 'Zz5aIkR2UWx0alp2eSRJWHd8Yks+R3g7UCY1K08vQkU0S317TVNxeDZtPm1KU25+KEo3Ozp9TFs+aCo/YlcsTG0yaiQ5JmJEJGM7Pk47b3RvKD48Q0MjQCI/T2pXQHRlUlZUUk4xJXAxIlYmWU0kNzRNXykqPmwqRGBCQ3JbOzREP3hAKUJSOGl1X3Q3bDxTQkRDeWJ1S3IzKEdOcWlsOmxmIXch'@;
put 'RzMoMXFNXX5KZnswPStLcyJ8USRRejlzLzt9fFg/XWZhSmB0ZSpDVk5OYkBBP242KHZ5aV0uR0t8P04oQV1xakFmNkl6NjRqa1FeZChNbjY4eXhqJW1kd0x8SUdPYjQrRCNzOjgjIUZbUntifSFMQFUqMT4/LHRpKkB9JEEwMXIsI0lEdTo2REJeelZgd0JqRigyb2BpaSpsKGtOL09qWlRfdDdS'@;
put 'VnxMMykrKC89R2Y9IXNva08/OkY3bDM6d103JTVhSD9LYUEsZD5FWEo0NXAqKWp9UU0yRjtEVUY6ZWJTXi5DPF5AeFNJcDRUY1VfRn5RPmZwS2plP2BpU1pAU3FtYGZTejFpeDxkfmtqMlghPU51RThPPUV0eGZoPXdVcFMhP1U+OlJwM3VCa2FDcHtqUGIjIW8hISglczE1V0woZCQrNzV6TktY'@;
put 'ZDRRQn5mTClgfkY8X3xpcTw8MS9TOGouKXVGJD8lZ21FVk4lPGJSM256clFOW285USNnMypSK1tpeTA/OnlSWms+KDZ1L2M6SFk/OHY8Km1GJFJINzRPS25EfG4lY35tRVdPRGMqR3ZkPSxVPDtfY01EYDpCTnRWQmF1M0BraGo0RzJhRTxSckUrSmpvIUZtKl8sZH0/YUZiNVEhWEp5IytjXUYs'@;
put 'dE1gJU84ZTNpczZnT309KFlDYlE0KUV8UE5UNkdbXVZGO14mIj1HbH4oITQ0QjVfdnxxW3ZRPn4qS0w9Rm9FUTpAXVhKc2M8RyZdVmFkT0ZFVSs6MVMqUG87fnsmeWBgTGxYQUJwP1F3MjNaSiYrNjRUc3ZkN0ljdzo9UzIrO2tpfFJZWS5iN04pfXordTpoI0lpKntvNG4hO116QG9Zek5PLy44'@;
put 'MyVLJHVPTGldLyFSe0JzOld+Ujthb3h7OWFWR3lVS2klaHgvQkdKL0xRMkBvTkheRi5neFAsVSoubE9zdSVZO15Sd1UsLkVKJWtQTHlLYExKOGE/R0B6aG18dUg8cUAsZmAvelZvNTtUOG18LzZbZz1rdlRxKGc1Inlwe1FHNiZ1VUZdVGJYcHZSWEkuYXgzUCspQjNVQ15Hd2ZsYyVZWGchZlZO'@;
put 'NztQZTFdYkZociJVSGVETm98PURHIltpeXw2YE9SPnR6bjg2NltHTCQ5JTMwJG9zSEIpbF5hQi5xfV9INURbPF5sJSZYUkBUX0wmKylgUy4sI2xZSzZCMSgibHJ6NDg8WFVmbytrJklodmA8dylbMzBRfFM4QTlVa2YlJnspeWU7Ymg0ayZkeSRnbU01RnVbW0d+V141YD5kWHRMPmJEL1YjdUZT'@;
put 'REhXdGlUQWp5W0YxYSNnSC9KOlZjR2FHUi9DeV8mSlcvfmMmbzhgUW9kVmpGIWNHJStGbTo2K2s5YWlsSU4kKilwYitxSzQ9QD1tUzM+Wm02cnF4aT9yTDB5PGFMU0J2KzBMaDVPQyV8QiFxdCw0WW07Wm8wQyR3fFslfXVlKV1CLns9aiV5VW9UOCY0cnNfYXpHMHpvZkZxP1V9YCtDZkE2LyFg'@;
put 'bj03RTszJmxeImJdXzY+fj1wU0JWX1RlWXZ8MWVxUVpkYWIzdk8saHpQNUR9T3JUWnFiPDNIPjFXVFdPa3twPCVyM046XSRZXSE2MEUuKUM5NiwrIV1LISNhdFZzMiNtSlEuKiNwcXU/Yzd4V0lpVlFjJkB+enVANFhmTik2PC5ZJV1dMzg0fCYsM1A0SDp9NTYoTV5JJVttZGRJMytEUnYkRkkq'@;
put 'aS88Sz5kaF1uOzwkdSlxNUI8fXFhS1kpYDBscnIkTjlvZHJlPnM/enQkdiUsTCVSNCwmQEs1OzshN19MWXRMIyJPVW4sTFB4Xl03QjFwbjt8Jj9CQERUIy5COzZKSl1SWyp3JDoxMFVxbGFyPUlKLlhFImx6TXVVRDU4aH1YIWcpRC9iNkVaemgyNzZHVUx5SzxaLFEwO11SVGdIWyRSWlRMLjkz'@;
put 'KmxiQzdSK0VkcHcoJjUweGNOPHxgfSs3WGEwYWRdYzxje2ZhNlUmYTo4WywjK3s9SmZXM3RQNjk3T1VFZmpDI2tdXkE3Nm9MYVE4NWozLmlqO2Z6WFREXXtKeFI+LltgamZLJW1XIXlPaSVhJjkoI2RzLjEyXXdjPDNCfFNleVkyeU92U3FaSzpabEpvbnpDNGAiZldDdm16YFReMiJQS0lbSkZh'@;
put 'NWdUV2l2SXdJX0FTJjs8VzlRQkgpTDJvQmhEdHNkfTc+Vyw7R2g6RmZ6bGR7fGBrKyQrRGFQRml9WG5oLGcsL0VDMys0SDw0KiNTe0BmcDpxR1QwfkpIWHc2ZGN2P3EzcTxVZCE8L1tyPEMvKmtjWjNHUE1gNXFiXyR5WWVWdTZadCI2TWEjOmRtZXtsSzB8fFVxNmZQN3s5Yj9oNnEzaXckLyVW'@;
put 'UUA6KVFIRDssYWVsQyVqeXtlUzRHX2tRaEdsditrcUxZOGVqNlhSRWFRYzwoVHZNfUFmXSl3T1p9dy54KW5rW29pRDl5P1ZFSWNpVCF+WGBfLmgwVGh2KnBCNlhjJVkpTEpTPEB3WiN2TFBYRWJyRTtBRyticGg/OzozIUcwO0g2UGFhI2oiR055NUxRcCVYOUpGPTxRaSF6QXlSQShdLj10T3Ur'@;
put 'QiVaRSlLPGY0LFBjLkcwaTJYWSVdV3BzekRMaFJJP2JESFZ8PDF9PixSR1l4QjxwMTFDZEBXOWhnQDtuQyFYPz5kUip6RzxmUSZ4KVJHYGdLWXB4RTVCJWpCPiouKDZGYkhGJVhObEJrSkl3dkFxcTJYWWt2Q1dFKkohJHxoVz5OW2FYbEk0PCt0ImNwOWV0UzlJLiFKPEtJXUYhcVlsb0F2fkpr'@;
put 'SCxUaixhb0QyNmY0OzdYaj93VDdGOChjSC9nMmVURDFaKCwicTVKVy5bPH11STZWYW5SRWV3R0omeTlzaG5uOmw/dHo+O1Z2T3xrTjQkNUIrPX11REVpMEhNX21WIkptVSN4aE9SI0dlMGJscWt8TCMkRlhyOFomR1k/cj1wa3xpOyNbZG5GSzNqNXFDLE5DOmRLLjxzPGRNa2B8bDc8KTl3LFAk'@;
put 'SyhBMz9rP0AheER8MWVvUWR0RntPOjs4ZDlUQXpSfGwkUXk/Jnl9LEhseW5eU197TSxlTl1hYmBoOWpUeGlAVWUrdkdhYysqb1hvOnpaPXx2czFCeWs3JjckJnNLOEx9RD1dWil7YUFDJWg3bF8hXnxoMH17ZH4hQC8mV35sZitee1gvczd2bixkZ0wwUT54STFfWnZDIXUlTXRMJGpaOmJDdX5p'@;
put 'aHR6cS54Ji52U0g0JClvVGkweUA0bnZ1eGxjfVdAUFEzc2leUylQcF9Rbjp6Pm4qNWAqTCNOOlIvN1pxcF1hX3R7aX1HSU9CITR5eUg1WE1eMTFsdjdrYE06OUp1M2ZoT35tZ0dDeEFrJElFLlF2dGIxR2Mya2N6QjUkajR8WnVoNVZHWFt0UkRZem8iQ0pQVk1kLzpEWjJAWW9vPThjYkxDNmQh'@;
put 'b1U2PyEoPV9ZVDVRWWpQZFNjWnNVcy5LJElvZzE/VHhOZ0BVcVEqVl8kKyR1fFR3dzFWbl40a24mOTZLPzFJVTgiSUM4I1t1YEV+JV5DSEwvS0YkdjtiQVp2SCl6O1oiQit7IlRPcStkOn4/Yys8diYmWi4/Lz9aZyQ7bW8jI253e0V4bUA6fkBDVlBJKWgjSjovaUQjeiF4Z0VRNDY0JXcrTEJ3'@;
put 'X2xFfTpmOG82XjEoYmN3Qj0kZGw4Qkg9O3E4az5jJEo8LiU4L30lcilMdjQ4WykvWEB0N31kUjVyN2t1dE98SG9+elomQEUpX15VcUtrdHE0aGZnZm1xTGx+c3l0fGBFNEx3XWJUR0EzYWFzfCojbWU/aWtVNytBNUB8Qml+UXFLW2JqK0QsPE0/bnA2WW1GMkcsZCR1ZW1SbUc2RHVBWksjeE1t'@;
put 'YiRBUWdiSVBRPT5fej0mWFdfcjZPbUZGRClLZFdeaToheVllYi47VUY8ODBoPmUrMHVLT2tqWWV2OjM9RXc7ZE8rQkpxbyxzMns7aF1IRT9LPl4kcy9aXToyYVRHdj48XzxadEpve3Naa15POWhJNmxmbXVucFZ3NipidUdDKiVRJW9wKjwhT15tSTc3UXU4VD1ESUgpPFBTai51bzcwKWhjZlFs'@;
put 'JD9QVVIrZ2NXMFF2JjApN0BSOUtTInpIeylMcEMuKCN1QE06eFdaQjgvMi9QSFJ7eTxKSEpON3B9b0pSNjgpVl9TUG5pKz45N3VIfV1Ofld+VUQwKDJhSUBJdzZxY2pIb3JTRWopazk5LjBBUjcoRGxIW0RzRGc6LiRGKkVvQlAsRGRGYUxgcDY2VnwwdTUlZCgqQFNgN255eCRWPFNXLHEybztg'@;
put 'X3IiczVNZlZ2azg3NHMyNCIqKFMzWiNrVzIzc1BpZDR2RWV3PU9PX09NaHFQPDdWZGxZYSNMaWwqWj9iaHMyMCxJQ3JOeDRAfXh4Vn5VQXVqVnp3XSM/X2hxcTs7SmkubWhHOigsSixKI242YmU6VyVTS043fk81eXU0OT1TMlA4Q1FAWihST0RIXzEmPn4xNFU/PFZ4KE8/YkJPUUI2T2M8dkdf'@;
put 'b1hGZCFtKEJWN1ZVfG9TOVYuZChbUnRhJnZFKkJBIW1hYEMkRXRvTm84MSovSSwiL29LRzA4ZFArcWNfK3Q7R1V8WFtaN3U/VXJpQzEybXdYaWR4WmRdTStoYlRgb3AsKTE5Uzo+Z30hWiZJMEgzVSFVcU1bMHMhSEYxZVJeTDVmek9HNSlUTDBeOF0uKXRgcCt8bDBiQV5MbGVxZTNXRD17MDpE'@;
put 'c252a1UsfSN4UmhzX3FwXWVoM1tZM2g/I3MqNXZ1OCZncjhUakRnPVhbbXhCNF55cThYPmMqR35nR3JfY05MdGJKXWx9Sm5OaWUuWV02NWBNOXAxU29sMitkQz1PYl1ZLk1GRX12cz0kO2F7TjJtbkk6Un1zRi5nVkMlaVUkYGQ7QnlOWUg7XjpdNSp9YSNvR3ZRNTxxOl58R0B+eTpCWk5+NWE7'@;
put 'dEVdVXR6clY/WjxoWytlczdYdWh8Kj1QfXgzZzo7aH1XVXVhQkU4ZHp1TjNsajooNWNzdUhzY1FxZG4qJS48bil5JXc+TzNuYWI6SFNYfllbflRXMS8/KCkkJmM9Mmd0YXt1JSs8WVowfk81JkpTWihMcC48SD9jT1hhSWc9QnVXSi46dWpnU0xvdzhLRmkrPnR1TkZWXUIqeEFNKU9GQnFvLn4k'@;
put 'ZlNBKCM3PT58Nnl8VW5aRFY7bTlwMiF3eXI4QToqU21NQF1pJk5COVpkMkRJXUVhdlFHbV5FbHxNflsmfTxJYzlye0olW20jITBARiRLY2F1KnhnckpZazBXRDpYfVBvK3pBSyRSXiMxbis5aXpTN1BXe0NDbnYyeSk2PV96TElaRl9mbzg+NjxqZFg6XztubXMlTmZzUkVQM3BNO1tlfVg/OE06'@;
put 'QCEkakckbUEyeG0iSSo7I0ZCRT49UWxzN2B+WiFZbT9rMFdCRE89YCFWaUJ6RnRHcVtIS2NLK21gdGgyJVJhYnMhfkQxc0RsJjhDaSleSWI4e2A+WlcrVn1rfDA3M0cqPntzUHBEMUtvfGRHaE5YK182WjlgLk8/S35rbip5NG86fjlAbC5La0xfbWtgVGQxTWhQKzRHMmRLRCpXUWN5djNbYHAy'@;
put 'VH1IS2NGNWZmdC9GSF81OURFNU1tQjN3IlljIXB3LChVSWdBblZVamUzX3d8MG9eW3V4cltme0wlLH5GYld4TXxgPCkmO1FvLm9DV0BWbSZjcEdzOnZoe0dCPDtLYnFTPC5lPllEYytTSGhycVBqSmdMOyV4YnJrOXJhKSZ0KX5SUCpYRTpLZUgrTVcoWFZIT2Nka1tyO2BvWy4jcW53UVJ1QUQs'@;
put 'bXc4XTtHOTk8ajcqOz55dzFuSjwhLH0zXiorR1NHdWIodW5qSUwmcjlXUWFjOW5QeXFYQSN0ZXBsYXtCQmhUWGN5UmsmLGN7aV9FdEo9XTshPkguMyFqJCNtJFd7RFFnLG1CVD9kc0lqbik1TzNeKlYzWCkkdHl2Uzkueyp0bCFleXlVL1JIfU88cV53TVtbajk9ZVhnIz0/Oik+R0p0KnBKQmVn'@;
put 'JHVOKHpbR0gxVjF+YGxHOFFbfVt+bWxWeTlnP1VibUQqRDNwfEV4JiprbHQhSSU+PjtoJHRpNUh1djwhUGNYSSY9MENQKEMkS299Vlp0RE5ZOk47fnpecmRrPG1ZeE9KRl5IbitnYjRwfmB1eThxMXlQXyFQM35XQTFxTWBWKlAwOnRia3glPGNsMVt9R05vXXY+X2k9XXJLNVJMK3p8YDxVdFl5'@;
put 'cE9KMzRtdSxeLixLOUNmQSlSXiRbUCl6KjNZdX5tajd2SVpTTjtbX3BwNTZgfDo1V0o3OEdoPShsNFozTEUvTU0ueCpROiJkYSQ0SiN0MUFkPT5KOEY5eXRiWD9aYTw7YW4hP1hSKixWfVo7PzxDPm1PIzZVSzNCRH5XXSZ9USUuRkRVVk1II0x6dlRUNz8ickA0Ujc6YWd1eGQ3X3ksckp1MntZ'@;
put 'd0ZXfkNLT3xtZSs8dElyMD4lUzRfR15yMiVrcCVLfCFMXlVLcXxSYlJwMCZ7VlBteDYjWyUyYE1rbD02IjMxI1pMYChKIWdVSDE4e3hNckUubjd7SllTJlZxZl1lKFArQ15PMkE3IVVhIkRjLiREK2RxRj9UY1V9IyFVcWwkajZ8bkh1U1Niciwrb0gkKjRPdDhwQz8+Mk0pPS5QXXRINjtmciE3'@;
put 'KnV0bWA0cWFle3lvUmx1VGIibD1eQ0Y7V1Fucjk4WGE2SFUpQkhzc1B2TSEvYSFDI35wNlQxa3lvdEB+TkBUNk9pOXowRSkzRF1iR0t5Oj09U3JyfDg/NUAhXXk5QTAuMEomaEgjfHlnVkJWOE0wQFE6WCYsRCYjKEddT2VsM0xnNUZCeCpgNlpCVDFbbyg4WX1nbVFCeW08fVRoZm9PRWZlUjFG'@;
put 'Uy5reilmTWEvL0g3eSFkQkJob1k+ZVpGfEslb0F7YGZqb0MjLn1jJUwuYlUvR1Q1RlQuZT1sL1tIMUojMn59Rzc1fltlWysiJmI7dTcxMF1PazhwVjAjey8pe057MWlZNFI4aCkvRSlZIXsiL2NZM3NsZT1SUy5HbCNKbkxhOCZaOV5PLm47PmkmJFBKJkkxNF0qWyVGcnFCPiw9akA3YU5ATDlf'@;
put 'Ul5eZDwvY1o3KzVCaFh4Rys4UCNtZ0hvdjBPVkY8fFhHSjhKREEjRlAkJn5FO1pfPE1iZHAxdyovdzppcisxMEclTmVNYHM4VW5bYFE4alZ2Wm1Cc1BYfTRWT1I+InldcXhgK3k9PndEVX4/TD1Vd187WVpTUDNfflpgZXdaRUN8aXJ9VXEmWTtKK3dkIVhJc3hFdE49bUNrNjxUZyt2d3NuKi4j'@;
put 'RX46NnhxKmFfPV5NfC55PFZMNk47YTxnVkl9RngofmhAYihXdHtlKE4vZGZpMiRJRyxNKVpfUyEvKFo1SGlFXnkkczplbVF1TCM8KD9ZTyNxZSl8JitIU25TZFZnQkJMZyZfdmd5SXI+Z2wsYH0vLE4oN0A9JCJfPTQhVVd7fSNtaGladmtUNV48Ly9PWE8pNyhzYSIlZTNCfD5mM3kpXyJmMHRu'@;
put 'bVM2SW1AOD9wTUhJcHhHcWgycGJzQ2lJcnV4ay5bUUFCRFFkMGlsL1BWOl5+LiF9TW9GeFpfJmRANTg/OyVKNU0oK04vX3Urbz5yfFhJS2E+VXUhS3txXyRCRH1JKWh+TEJ9bjYrMTNhNUdeOSVAL314Q3UjU3xzOT55PGxtP0o8QFpIZVFueD1oSFFtWlYhcktGMGw+cDdqXTtqPT04NlAqTUZC'@;
put 'N15JOCwwUTw5STZTImo9XSsrV01hW3JhLCFRYixhKy9XVER5SWdGNEt5VWIpZ3U1YHBOPyF9IzlHcTZfP3YoOj4+dSFxZVA7R2toZyN4JVd8VkMlak8+YG0mcyk6OzxmMntQWDRVNzo+cV1nXj9vRCo8ZGtiK1V3VjdUNEdZOVluSSVYR1AwcDQ3cmAwdipYdHI+QjpVIl1ePzYmemdYUiY9MDl8'@;
put 'cDVtRXxWNHEmT2NQbigyalNlJXJua0xrLGVAXSN0U3hrNWAlSHs0Y3NvR0lZd2wiX29mS2MsR0ZZKW9XYWVjcyRRKEZZbys4U3gkPXUuU2B1VlZfaj9NaElIcE8wdHdLLk5ZLilOTkFpSClCfkorO1IrJmwje2dVPkpVWDB7e2FoO05XV0gxZDNVLiprdls/LEokV21PWGUjeGpmQmgwQ0ZVQllY'@;
put 'IjA4YUYxX2EvbGwmOTNgIlc+eWleUWZkfVguZFc+PEk7cGU+MltDNFVkME1gSiNvekxua3hWV0BBcklhdmp7RE96UC9sbitYK1BHaHFaK10jbDtKRCY6WnJHImlyM1B5MzZTc056Q0FOc1IsOnAmQGhPbGtCM0x7b3BhbjpydHEpVG40O35OaVYwYXhDUHgjQXs2VncyPDNJNktCIWlscHNQQWhF'@;
put 'W0RDVyh4RUNGXzE8ME9NWXw1MSxHdXQ4UzJFTVl9TzpmRTRLKD5Wd3dDM1JJWz89RH1hYmoifWokdEcpNUU4PnxMIylCZD14TltvU0dNPWYkTiheYjx9QEpjakFqQmU0V2hLLzVoPW9yX0BReipqKWB8R1ElMEUqSVlEPCFSJkp6dU5CPWlxdUJnV2tDaS45VSpgM14sNV04emwmZVIrNHVkL3NV'@;
put 'KGcjP09hYF99SXJQM2VWfWBlYVIrT1U5O1tKNl52b1lxbC9ZIkojVkdmUzZUKW5wdWlQRTUhNn5xbyR8e2Q7Zn4sT3w2NHwlOUY8clt+Xn1NcDYwc0wuUkFbdWRLajRxTF95b2srV35GRmE6JVssJEVHNH03TWV1OmUsTnxVWzB0U0dNbTNqXipIKl53UCl0dHQ8Rm0yOzByfFpGYUkqWzBTQTpz'@;
put 'R2N+ZSUuPHpnUlJANkRgbEs1KUE5Z1NlZ2ohekdbX2teQXw1MzBQSzFQVSluW2NlOCJJIy56R0t5U3kqVWhuUS48SDJxWWY1YDJsMW0+b3dUUFNYQ24vdGFqQ1l3N0spczMrJEtxN2daWFE2QFA6byQ/W3dqMEpTfnsvUCRSSixTI01JMDRAIjdbalhddWF3a3s4Vj82bCxCb3Z8WyhbIlIiXz86'@;
put 'Q0BrTXRMPjU4XnE6Sm01WWw+RyF7U3BtUFFnLnZ+d00xYGY9KVRXfX5nUlJZcSxYQTJafkQpd3N5LCRLK20sX1AsIWMyYCVWfGdHTDZwaD8pQFskdX5jOEo3QmZgaXpDYUJCcyUrLzpKY0YkNnt5JTZpeTRYaztHPU9dW3t2M0pxL0UvfWVjKHo2bX5DPnRde1NkQWNKSW03eWNVdURhXkdgJG9T'@;
put 'VFomVyJUVn5OKkZ+PWEkOm1ZcGZVNUciWTdvSlZuQmhxIkJHaFlkWFgwYio1VXxWRT9rNWNsX2JZKjtOcDRga1pTcFNIdm0hKURgUktVUHBZeHtRRX4iZH5OR1dmcmM3M2ZGc1t2VEAvZUJgaldDYz01bFtlUFMxP1RRPkxyQG9RInBQNklMTmhmV0QjSGt9VjgqKkJJaXQmImImVDlGMnU9YjVu'@;
put 'dGcsKHlgSF9QPG1TandTZjRrJU5VZnteejttT2N8Knpoc1B7V093MUYvVzlaQk1SbT91dnk1bURDIzQ5LltaLilndipiTjg4Qz1MW11fLzN3UVtJVnBOYDFzYlRNcSFxen1jUmddK3p9PHk5SnUuZDVDWlRqcjdBV01TM2Q0SEo5RDRjMzw3eWJ3T1shJX46WSF1cVp6bk9rMG94I0xKSU9Lb3dK'@;
put 'R2RIdWE9a0kweGtdX0s9LExiSH1veyJSXX10WHVgPihOKDhgUCx9fTk2YyFXPFkmYjBaOk99O212VXFTdj9PWnN9VCFPMVZlUVYzLmRURnViTEBpV2ptYURYJn5MLnhWajFGRGE+SChMcVphKDwuXUt2XzVYSXhvMG8kSFZbTCkmNX1IdCVOTD8laDJdR3VmYWFUW0ksSDdxVGlHZnNhVnBifTg3'@;
put 'Sig3e1V7QG56c0YpSzw4WnM3XmM3Mm9JPVI/WzA9PT9rWGtPI2V8ZncqPStGZ2clfjQsKk19MFhBQGQ7Sz8wRjhZKixAcktraUw2bTdnSGApLCxENT4kJDQ0TWghUmJSKSsrPmUkby4wYFk/ZFA1SFVyb0h7bWJrTHUqWV1KMEshc0wxdHg2KSl6L29eYzVqeEtqfGs+ZlZlTyRQUl9ZLCplTVRQ'@;
put 'OmAkP2xBXW87OGYyKSQ7VytfPmNnTDs2NUIwO3RsV3krJWZwTStNUUVEez8zYjgkZTgxPnxGdT8lKyRwKSR0TnR7KGJRLCZkPVcxXys6R1JkWE1MOHM6dFIzJm9QKWF6SEBAfmZeVDo5PXdVPnRxakVkfT1hPVt4akF9S3VQUWAvWX1rcjZCcVhVNzYhUjBNaDFidlRRYjVBV1skSy5WOzN6UCJA'@;
put 'Uk9uRVc5TDVyTWM/RV94cmltKXY9dGpKJWt4cyNhdU1KPyRKX1tQVjg7KVlBKWxidm80PiJUeGUiciVGWUQqWX0jNFgidi87VjJxJlhva35+ajYuaWFbNihdQkhkLHhoMThIPzUkVmgvc2A5eUVYSj9yZmVVKmZbWkpWMFo6e3FEdjVbWzhoQCtuVz5vaCxBaig/ZFdrUTtmY3N7ImlKMWwkRGhb'@;
put 'Y3ZZMCIkS3hpKnRiV3Q+ZmM+YFRrY3xEPTVLU3o1WjI8Pm1kUkp6ZXJBPWlTTFc/ZmshZklJNWVkWGtAKHJMQSRJeiR0OSY/OmViLEVXQXgmZWciRT9CeXVqQ3JYN3h6KW5vYzVTc3lQWyNDOC9wT21UUm84RztCd1BgK0VbfV1YLDpLNnoqfTJBc2o3VmR1PTFLNDxvcmhaRkROdVckIVk3TXRC'@;
put 'VGNNUVBrS1FST18oSmJnQytjUStENz1bWTBAPSJhUS5NIU0zQUlhQCJxTSVKdHg9MXlCYzJgcUI8e0prd3g7NClvKjoybFcqXzRlR19bcClIa0NCS2FEeksqRH5uN3U1PkxeJDhrIixmb1FsMllpUGVrYzUramRKZTw4Sy5HWFg0eXJ4WHlHZz9zVjkyYFo0NiR8dnp1RTtLPy9lOmwqdztEM2xA'@;
put 'WTpQKk5hWkxOUHdufDFCQEZdU0U0dFIwNzZ3KHpIOV06OmVhWUR1TjRJLG5ISSJ4XzEkXVV0VT42Qjw3ciY1aVt8ck41JjNFPFRiSXRjT3VUJmhzNXxySHFEVVZ9SEozdUBKeVs4bFV0VHQ3bmYwcUAzTU1RTF8sKGNOdVBkYXVocU9HaDRwIXRJPWg2SipDbnt7M204O2JFJH0rUSNoczpBLzB1'@;
put 'T0hjZzhKIkF0bnxmbjFMfjRKLEUudF5xL20yKUdZdmhzTVdXWmoqL0BWOCNNXzhMRmZraTBORDdxWmlWKGkya0ErT09sNHs2TW5UaX5+XkxvZXlPYFd7S3s3MChXPGdacjZkdyhEQj9nSCpwP3Nndi5CdnR8ak5IMj10IVFXbndPdEZMc1d5RV0rLl99KDZ8MTdbdnNCIThjYXBHQGghISUpLDou'@;
put 'dV5YLyFuYVs0ZyouKVZ9eTF0Q1kwQDVFUnYkcmFofCQ/TiNnOklEdSErc3wsZjx3fERWOVloPDJVMm5sZ1t4WygzMCZbdWpaYzBqYmprRTApamEwR1ZiSDlDR1BjIlVzRDZPeCo9bTNbJl9rU1NBQzpvXl98dHkrXzZ7Nz8qflRTU1srSl92Iik6VXR4JT0uKX5DdkQzWnxIZlYkTz95OztWRF5O'@;
put 'SiRfMnIvc0J4S3o6Pj1lR3xXZVtlSTxSV01ibkA+SnBSQDJaeExvdDJ1P1JmJjAjZV0wXiUucDV2a1FPO2dGcGJmODA8YVZiYE01M1NSdipkNlBhb050N1ZNfVpJXTkycWxENkt9NFRzSmI1QDJmdk5HLD5dTk82LiNmIkRIWn1VIz91UjRfSlkrTWdYNmlZM01RPUUsK3IvYntbU0tVaXhGdEB1'@;
put 'flVhYXRQOmYySSlXW1EoeTI7LH52c0l5YlNZc1YyZUt5aWt+a2N7N2pDK2Z8Inp8KlZrKjJkQi5jKC9OaGk4Y3c9e1V4fkY2Z1A8UnM2K0swek83aTgiQXJWWXxsR1szRGFLa1tjNGkvdTYjZUo2e11qfHwqV3xRSDUvfDliVCJfXiFYanZ4JiN6dXE3RH14aCw6NjZYJUJ5VEd4PiomYF4yTWY7'@;
put 'Jjo4U0RKa3UoZmhGVmJ0dGQ+ekNmaSNLKDhxKzlLaD0+UUBINWozK2w7SWxrTjlfJWZ3NlYrM1skd2w+IVBZRzFMcFNJSV5VWEpFNlhNJTc9XUNbKGssI1Ipdjw1NDFJZWNIPE5ha3UvMTx3bFdXaUlZezMxe3djd0RfaCZuMFV1JHgjfEUvJXE3JmpSOVFuS251Tm9NdTolT3k7WyxoWWR1Jig/'@;
put 'U0l2TlV9QntSdEswITQjKSxyXkFMS1VuUFdEan0qRlolZmVnY1RubyNTOWBjUCZpKElRb0VeZHxXMnoka2xARGtYTjRuN3RpIlIlIlNBPjY/fiFiQDJoLzh9fEh6IWAjOnRYSkQ/czdFUlpFKWtPfS89eFVuazBSZkBOLzdXYE8rZ2h9IUZ7PHdHI0AsfUZGWmh8TzprM1ZTaCVeQCNfI3EsPGQp'@;
put 'Xl18Mk9QI0QkLH5lV05sO1kjb2RbLl85ZyxVOV5udTdjY1c6TVNaVV9JSTJeQGlRfmJ6YjgjYz1FUzdlS3ErSFdTLHRZQy88TXgqNE5NPWBwdUkwalk+Q01iIX5FL3B5IzxaMGBnNXphQCxIWDRoT0Y9LCF1NGc0fkVmLDx+WXxqRHFzZE02UnhdfFgmanFTPVtRKztLdDYhQko0Kn5JOyI8aHtg'@;
put 'ZSkqdn43K0Z0Kn1YOTxVSmFdPHA8Mmx0SENRb1A0bitnVHg6UzJhLlE3c2VfTUdeXmgjXW1dckNSJChsWHBNOX1IMkA8Izt6LkEjPS9UTz9MXjU6JGJ7MVJ5Jl9ESEQ7OTd+ZUYoSDx6QCk0Kk9mL1BYPkA6XmF0MC5gLmIsXzFEcSlqQH1FXyNmcU5GcWtPQiZQOFhWWkVvVGE0fH0sajYqeDM2'@;
put 'WGdLLDwpSl1PcngweDJsL3V3U09nOlI/fUxyWSlPXj5LYk5VOzpzUyxEOVFkd2Y5Lj8lRWQsNGxdJF9NTDV2TSxSaXUpOUFzTSYiK0JFXkhyeG1SUk8iPCM4I05IQmIqKztBOCQ3UmxJYyIzK1s8UDEoUzVFWyVNKU0zekhzTWgxTFFUTnFWOixNdk5oNCk4ME1QdUpCRHVtWlVONERhNTltW0dq'@;
put 'TTBWcyhjKSIqMVNfRXxSPGchQzJYWExjWkNjXzo6WmR5Wk90MT5yQnRaLCpbU30zfipJP01iL1k+T15SbmBRXWtMJDhVXih4Sk8/dHBtOHE3fH1hQVp3Ol4zblVuZi9ufUdRY1JZdyUoV30mI1NucG9NQyFFeEw+VSJBPztyOlUhU21ARz48WDJkcTw8LiZMbm5KQj1NWlNEK3QxOy9+fUhHTDdU'@;
put 'Jn1tRHNOODBgSzpVTm1qIXZUazQ3TCNxRzRKYCVPVS9OOWpHSClCU0I6a28oZ3A0WGJFPmZEc0IuI3o/UDF5KCQzRiFCLEsubzxNZ1h0e0lYdGsjJmM4b0VSVCR5JjclRyhRK1piWXJieEApSEAkUWdWU0oqUyV6N3dBME9QV1hrY1ZUdnQ/dVg3eiEmZTR7PG9mdldCYERTRTxQPGddansheWRW'@;
put 'fnBIKkZUWlpKSW1uJmQleVtxVkNaeDBMfEdVdkppKEFse3xDL2VsUSNiLHxvKXZuOXRHdHJTTU87Tjw8Qng8bllkWnB1S3F1SX5pT3Vab0BFMlNXaENtcjRDZkp3UnZsbG9UbC5oekAkPmZvdHE6dHlGYUxIZCpWNnZkMy5he1hPSC9UUjopLHl3Yix2PD18TGMkI0RxU0pzfC5YeVdWYTF7NTBx'@;
put 'XTpRV2o/KVc5KzE7SXxuRy5EQjpYJS5Ke0RoeipLX0RvPzhpWzQrUVFOWHN6dm01eXxTOHcpVjJZfDVJM0JPKj1BSCNAN08sOFM4VWc6U14oSzlyQT5gYCFEPGkya30rPDROKT5Zfmg/YT4uLFA6MENYb3BxZ3BCRnd3c0EwR24hYUtAVUtjLGBORkZGcTtNMihYPGQ9NXRuSFBwZTFXWj4sQCNW'@;
put 'TzhZTjZ7KnhkeFBkJk44dk42MUR5Qmx0Z1FWclIwT3ZNLD1UY2pkQ087bGpYd0RWNXI6cUBQczF5SiJFR3NpN1lYNVpYOCRaYzE/NVkra0NYQFVuI1hhbGhLeSQ1JlZTJWBDWi9fNEcjZjk4QiZPdHp9a0MraiFRP0l8TlhCJW9TRz99ZW8sMjh6PiZ8SlFFKFc8KERZMl9FQCVHW1lAPVdtIkw6'@;
put 'NTY5M1c6UWQqMitgPmtbWywiJXFxR0giWCxqTTJ1Z0EkXSxpJHRhJEghaSJZeDw6ImoyPktbdjpIaWArb29mMFl9WiN7bGFbcDhmIk9kc3o/UFs3NzhbTVh3RWxiTn03ZzBtTih1UjFXVHcheVswI3FUZ31mNyspeSlKYG5rKHZSQipBLFcvTjJnOjd8XSw5NCpwXT1VSmB+OShEUUdvcmZHV0lN'@;
put 'MkkqckwoMU91KE1ZOCNIQDZlKiJ2T3NzKmhNSUdETHlyY2VATWRofkB5bFNLZXRUdjNkRlt7VUVhR0wsfUYsdm5mXmN8RShnXUZ2KnNOSntqdkl8MDNfX0ZrbDluWWVbUipiTU93SDk6MjxNeDhWTTxJPD9NOmNOUXJKdTlMd0M5cjhgLGlNS0dwKD1yOFhsWUhPSCxPTHFXL05NSkouJiEoSz1q'@;
put 'fHcpUjNaNVdubEVTY19EbHJdP21dIXRTLkN6RihbWnRbZlllKyswVU02bGdHO2Q0ZnFtNSZ7S3MvdXpCWSRKVXFCeDRdN3UpWDZvcEAsaXxnXntDQU03ZjBCXTVLQj1kRkk6WVNbU1NpPzw1V1g9SXwpKnpmMkZKIjZTZ2hwPz1qRi9QakY9b3Z+QmVkLyFyM35mJGNlbHFmPig/OWBzI3pUe2A6'@;
put 'SCQlZl1+WkFPUE9oVFFlaENrYk9KOWUyWl03N0kyZn5SMUN2WVhUNlRabiwqelR2a3VaKTJoUE5JYWY3RiM1LDY2Zys6VjdCeWxuIWluO35ERlhTL0djRGAkdjQqcWBjakhnallsbSI5UkVFRCFDfixYPkV8aDoqbGFeUVhPOnJlXT9rYls2fVkleio1cWpAc2JCXXxQOmg8VHdrMVQ8IU9QZihe'@;
put 'bUx8ZlBXVXVoW1JgcXZoSnw9I0wqdzZQXnUkJHpEVWEzVFZCNVlBUW9jMGVNWDxfJDtZSGtTT2VuVWZwNFRAWSRLLlY3ZzkkI3FIImUpOHAodTlVajhsKC48fm5ATUJzLjYkYkVjcSFodTF2PWEqNURhK0peZl5bQGl5KiEpaHB4biU5b1M3ckdQc1syJiYwX0tWQDpGV2tRXiM4dFY9dTVzVyEq'@;
put 'SDhjfHNYWVAkcllEOUBgMUVkQGc1RSp1QmlxV0pKV3d2M2MoS2NzOztQTUV3WHRdW3tpTTlgZj0wIml7OUlNSU9oMzwuRHojYEBFTEdbdyNQPk9ER1FpWGNHS21HVDNlSS88V3Y1MUlINik0dSlCYHVGTlA9eGQuczlHTDdGQVlsMzMkLmtGQl41ZkZ5RC5CYSFPXV9xbDlSU0lAU3RWfTAzcEtm'@;
put 'aHlrP340akomJCxPVj8/MT0+Wk4yPFVdaHltQnM7QUU7am03X1Npd0FgOkohTH5GIiZxb0svMkM7RjwvVG5rWU0kUm5QKHkzM1YhVXV0bHlBVShIWWgqSEQjUmMvMHdNIiZyJnBELi46LDV6XT5VVW0lYCRCJU9iYDlyWFRbQWkxT0podlJpfGMyTj8keC9JNTZSImFtNDVDbFRyL2hDdEBBZTJo'@;
put 'KERpXWhgbmxMUVRUXnV7K0NtTTMrWXdyRUs0TmEydHpqeWBtc3tlYDFoPUE6Zn5bVF5Bd0JLRVAsanM6VSUzOyMvNGR4XWArRk4xc24mcWQ8WHoqZkNbYTFAeW4oPmFAMmguIlkuIUc3JnJLKGVGd1QucEQzXiplI1N+XUZ0W2svO3RieTdnMk1sT11fQ28/dHtvWnI1cDxANE58anNXNDp9fnVM'@;
put 'a2dIKjU3VzYmVHQzPzhJZWd7Q2FkTn1zKXVqZ3RPNEE4VXpCWF0yMSRZIVprUmx9MGghT3ZNdjdxc3J+KUl5c11nKDQlIUdPKzl8aU5UM3ZlTDZyWVpHTyZteXB1fDo4WCo9Ny8xaiZVMm98VWU7YCVMRGlHRERVWGNPdXYhd0JfTX1XVGFNMGs3eD5RUzZkX3BQR11vYUtzQDlNVStKeT1LdyVJ'@;
put 'eFBKXnsyb2FbbkcubVRgdVVOdjRmU2M+Knd4UmNCJF5eNHNNWC55XyVfMF5XWDJdZDgpOS4/JjRlamVJWWBwWWphdFtQdUZ2JSFYMDVWNXxhZmxqbDkjUE9ASig2IWV0Jk54Xy5xd3ssc0R7LEY7NyxYI0RvKi5nUD91ckRSY2tibHFxcEMxei92KjszbEZhMkcoVWJSOWB8ZTE6YiksbGxOaGwm'@;
put 'd2hLRlFEVXYkPT5hfWNDe0tvREFVQFl3RV8zQ0JPQzRVSnU8fmlSNHBJSjR0Q085VCZpLylQYi58WE9Ra1k7SWpmL0s6fl9lZywmIkp+dzhgKihUK0A5LE1DYiUwK1s8d0wqYD54Jl98Ozt+OGxtXV9nYGp7RCs9fTsoWlQ6RHV7XlJvJXksc2JSJGhQdTNfL353QVBYcCtQNigrKDc8Z1BxPm1Z'@;
put 'Li9Zajwxb2FHTCopOWVlUEQlS3xjZHlldk1xWUEmIkxuPEQlN0FgKFpEWk1wbSU9OFU4RyxiKDArfThfIXVjRDw6NWc3U3JnLC51QC94UXg7T3t2aD1DPnBVQH5MJlg0bTpwUGVWWEssc29HVWQ7NWxwSkRscH56PT9wISx5W2d8aDRnSzJbNiQkNk9efXB+TVFwLDUmVXU7JHJQJVZRK1d1U1ZY'@;
put 'ZClLb0FMIzgmfGRiQz1nOCV9K2x6OCp1KkVyVjMseVAlMC5gYS9DdlVPYHJyZ00yfi9AUDpvU3xXZG00OG4sYERGcjBqNy84UiloRkJER3ZMYjVWKypJZzZXYFVsUF1UUF8jRXVNNFIwSHhHRWFlWmljMlpqTkxWdEoxRztxck1GNVlhXmNaWSE1PWRBTzxSans/RSI8cGBbSW9yPGlTOHVOVHUy'@;
put 'Z04uXy5XWiUwQCpkVkhldEwzOk97Sm5fUWIuTHw4OGViK0JBMSFjMi4mT1VuejNtY083WG5meWAsc0RAZSxkTn5PI144MCVuIktGd0B9QlV4X2UjZEVWZ1pIZFY3RXBKQmxIbmV6cUp6eVNXdTtFZ3YuUlZxJlcqbnlCYVpTa0YjWiUrK1cvO2Vmalc3UC9gZVcwbXE1SG4rVVtyWTszZ3JkTzFV'@;
put 'MzxJNkZ+Iih4P3gkJj5dNkpsODE3Lmg8TitIZSVdM2FlUVdzaiQ0ZnUyclIsYiZvNUVMU01gZHZGVSora0dAOjNAZ0p6YFBWOXx7ZFdNO2x7WDpaTGd8UCZhdDoqW1YiZTxMTDl5cytkX1k1SFB5OWsvW1p0OWpYU3cmdENedEViMFRXLmtAYks7Q0QuIXdeKGhTTmYhTHx1YXN4X2NHSTB2OCZz'@;
put 'YFptcXEvUSMjPjtyLzEoO0Z2QnRlS2FeQ1c7JkczXUdtekldUSRbSE9GcCs4dUpUcH4sTmI4cU56XTwqXkJvV3hfNy9lZUNXRHtJajNUR1s8X2F+SiRqS2hPNlUvT0tJcXJQcGZtM2g5Z0lZOjRtLCRBUy4hflA/Q3dmQyUvNUdrIUxZJjEsR1p+OWZYLldAZGNTNFZEKFg1O2I3VEVvaHtwfHFV'@;
put 'VkYhSVF2OWUvUURNZ0Q2bykhRi8jZS9vbGx7V150ZXN7X11HQn1ZTyF5VG0pb21JPjhOZEpOZUtiNmE4K2pEWTlBZCk3bSN0e1dsRHAmKXAkR1p+amljdEFGYHJZQyVWamx6U0d6ODArWHVsLFNoO2xbLjR7YjR1dndvW0ArZSs/Xi9nYlBaNC9sMVUjbUFiZExzNy83NzN4ZGc0P2BdRytyJjgi'@;
put 'WWJUKSZlfD1jclBiTSYqLE8lKF4jPzg9OlNyTnxEKXIuN1pUJTRYTGl1PEJoZlc+bDhBV2w7UCRSN3s5X0w6Kl5lR2xUISxbPGl8VF9FfX0+L0ZzY3F3JE5JTytrXSorPEgzVHV+dmFARVI0WDU8ZiFFVDB9KV5SfSNtYGc/VTJBPn1QJEB3SV1JfWs9SzhAd3VXP1gub0F7Im02Okc2VDNaP1h2'@;
put 'X0xhW19jZCtSO1d9Z3lmVSFZRmF3a1g/Zy4pO2hjMUE0TGpHYjJdMC51aDRGKSxaeGNweHZveW9IXmZPLn03NGMpS2MoVSFDbndvKEwhX2pyVk1uSGtMTU8oT1t8Ykc5dTFhdVhHMEgzbjdwX0d8UHg0KENtXkMjXyZoLjFfUmt3PH1iZHZqKlh6aWl5U1s0aW4kTVl5YVtxaCosPXhAdWUjZTBu'@;
put 'Z2hCdlA6UyhXMFkrcWpnKn08U044ZU48dSZYdmxta3hNS1hDfmhZLjxOI2Y4cVdfKStLT2o8djooNCM8YSl6U3s6cUBpMEYzRUk8bjNzQEJiRmxCVmtvLFNKUWY9MH4rPC9XUnk6M29GUWxPIUJoTVdQd2IkdkwrPypXaU8qcUlQK055OWdkTDMuWXNGbDgpayk/MVpdJk1LIkt+WUdlP0dNQV5H'@;
put 'SDJNKEk7e0xwdDUjfHlFfT9WTEo/dWg5TCtfUTEuZDovPVlkU0lSfEw+LnhOKlZ4YFdWd3s1cFM3OFhEcEEwS1s/M08peT81I3wrVXpZWi86OlJhZ3hVbG8kYTFXZT43KXJ4V05jRzY6Syk3cSEpdF5Fb0FqdFt8OHJJJFFUcWFBW198Nj4xSDBEVTlhS1Rad2d3dC5wOXRwKkRYOlQzQyIlbXtM'@;
put 'eCFyKUhKVVZXen1eUEpHSF9iQjZQNDVJcHpZWWZJMHR7PkVybU0pOj5kfkwoPntCQkNPQTMyKX05O0QyfiwzTWdaYihNJkR7aGBFV250SGEzSHdIeldkfTFPTEpkSV05eD1LWVgqLi5fJmprIyptIXhOaSwoIVZ5QDJiTyVuQkpMbTUuOlgySVk7dmVmSC5PNDwhek95T3cyS2hbYVZDKm9vMU8x'@;
put 'IU12L2krRDk8WzJ2dEIvTnJEaC9AUSQ7U196PFBKQG5UMTpXbFslUVtqP1paJSJdL3dVJik4dHh6MS5ge2MsKyNjbyRpOV4/T1N+VE90U1EySVkpdSUuSEoyIX0iM2w5ZTpWcko2MnFaaSNPZT97dTNYYypoYiJuJnphLmxjIyo8an4rNDV2QjhtS2xBKSIkU0F3dk4kIUApS0olXlgpL3s6S0t0'@;
put 'UllXWXZQO34mQTtIOjZJK0lyLmNGanEpSmNTdl14UzUvNUhCYT5FeCxSRDVGR0dzMDgxPEpwfGJOdmZ7WUhLNT5edVldTCVeSVFASDMmfXdmP243dWBZSUAqIz03a1RiRyhsdSozSlpOXThQXTljIylELkYqNz9DM3xlal1AR24qPSRyZWw6PWZ1SWpTd154PGEyc1hffX1AVmZQJEduK2w8XjV1'@;
put 'Yn5ieXFRR0JkeFJIbj0wQypfdW03TX5lQ2JRWCZNbnFYKWZ5W09CI09MYU9HSj1kY1E/bTlQMSIkOT0zQ3RWNDR0SnFoZSFiOEc7L1l1W2d+Vl48fXdxOnM/WUJ6ZnI9KklpTGBPaEM7MGptbU9QL2JmKlZ4VkthQWBwTHc4WmA9fXRNTiImOnMhfXkzX3MwOCN0L1h9T1ZveGovKyFmcCFSeWt6'@;
put 'OXF1PT9qPzRzVHc6L0E8PHQuK2Ewe0hkNHU8c3AqfHpwXStyeEBoZ2w/dTcxXjF3QFtffHN3Lnl8MUlCRG8iKkJ9e2drNE4wYSI0Sk1UcCo/JVcmNU4zPiQpXls5XUk+XXFwdilZaT9RUltKLkc2cyhGeEhGNDEkQipvQUsvSmAhV09YMntlJk0yIWhgcXhwKGpebnUkYilnKnN3N1tFIjR6eTQh'@;
put 'STk7aDRIPkpfXlJTVzA/KXJOKDxZWVE5KV4oakJdRE57cCokZGt1UGFRc3cqQzE6c25YQk44QXZwa3FZUF8lNGZZNmxgOk1gNT5QSHg6T1pGP2o+cmV7KmhRKU0mLkdXOzBsNDFIRU1Acj1JcW98Y0BAe044TmVlQUpxbC9GNSlHPDM/cy5hJmdEak9HaGc/SThJSnUvVk96V2JRTlBlQSMma0Iq'@;
put 'Sis8ez51ZixpbGU0JiJ5LEl5dVsvKFk5dXxvOiVTeV56Lz1BOi9uJGtzUk4xfWhINyY7XVQufl1CVVJYWEY+aTZkOSVjbWp3YiM9dm59Six9bz80VSV9ND93R0BNRzhVO3tRVzx7Xz9lMi46MW5PZExSPHdhRCoiX1ssaiFFOlZYQXtwXzRoMjt2fjNufnVmRXpEZkJKKHE4REMreHdUMk94bCwz'@;
put 'OVtAbUJ8W1VzJmJMbUdmZnJZR05dRV97aC4ydSh4RG9ESV9GTT1QWTpSWDg5TXh5PnxEM0dEcCZmIWlPTDVraHJLImxVVjpKISh2fCZsUipPL1ppQnkwZjU+MDwraW1lSUs+JXYmMygqVDJrUkovUWpyLiEvVDB4S0cqXjo1ODg2aDFwTFM+U1UwYDxjaVFqTUN6R0UjZSQjMzZ7Ll1vZm1eX25G'@;
put 'eEdsdlZrNXspXkhVOls7IzF8M194VTIuRlltXk8zNGpQb1tUTH1yUjxHOmpDK2RlYCU0RHFAal9EaiVYZC5weXJIb3c3RkQpU15RTHtBQnEmKkhIWDgzO3VARyg9OD9TdX5pYksrfF5xSTQ3TnkvbF9zbnZNQk9MdyxvS1FILGMwJm5ubnE8LnFxbUlRaE1ua35JM19DflEiUX4lbiFIWUB8dXU2'@;
put 'bTEoSkg3REM/I098Jm4kQnVkUyxncWdlWSZ+QXtqaVheZE1PYyE8aV5jWmtSZzpuaTFHKnBFRHBTIWxgRndPYz1fb2skfWFzKmssNy5we29VQzltMSl4QUtCLmMib3hmeElaTlBVUlg5cS4wTnwhNWBLI1FFUDt7a1F1XSx9WnNlI3VWR09TU01GZ0ooT3g+YEk3R0c6eGJIZCxsQ3BvJXRxayxb'@;
put 'TEx7UyF6MUpZWy4vaFZnIldYa2I1Oi9XUy55Nm8vKiJhSEJkMFs3fComJUBXUFdAW0xjYlZPdlBXPzM9amt5V2EzSTApMkBWbllfLHp1aWg8V3tzXSYpQlFEPGZqRVlNLzd1Ok1AeGguTEteW08xPytwfF8sYj91OyMvXjlSMHt9UDtSKEpwK1ouOCVIeFBnaWl9ImklSUxpXiRYIT43STQqQjZE'@;
put 'I1JvbldQW1ByPSNrK2hpUDosPVpLX1ZUeURzLztUZk12Nk9JUFtyOyx4S1tTZFJMdG9nJFFFezFPN2QlbHkkTDlIKDtAT0l4XSRONnMqOTcsbV5zRnlWUDYqI3BfTXVIcHdLQXRlNEAwQE9AQHpbM1BQeER5K1IrfG58L25ZODg1YEcpO0UoRERyfSV3Y0RmTEs+IUwwIjB5OjVkd09tMC9iQz54'@;
put 'VyYjSmQ5OXszO1IreDZAaDxSVVkmdFZ5U0J5aUlXKmVsYH5ia1JMY2Bed0wqP1ZpS1BKdEQsdnxCYl9JUnNFKkAwdTU6WEUhMDV9VkM7K1Z9SEZ6TUZ6aTUudlZvKFUqUn5WOj1VRGR1R3Q/JSIlUU5vdVBFdjpkRGdXaUlyNkpqP2Fpa15SSX1+ZVpmYlJgQXFsW2BobVpKM2hmLl54PS8mYjck'@;
put 'QXV5bjtieCsxUHZHRVVvPGd4ZHZ2dF1PS00vbUM6SHc/ZG16UilnRVF3aV5zIX1RQGoiIUw4V0xDYF9PS2JTQzdWRGtEWjM+PW1SRzY1Yn15NjNARlliSj8xbXU0VkVWYy48aWhTaiZOfnwsblouLmNHKCVlTUUpXWx+PmZANWg5O0NsfmZRaSFJWU1dQDZ3X11NbE1yZ3BrSnMoJFZOdkJnWytP'@;
put 'bVYpJiRQVzk5UWE0c3dOUCI5cU8mZkxVam9wZnpkLklKQWN6KWk9RmYpJmYoL2tMV2RzajZxd2khc2BrfjNePzkzd2gqYzpDI3VNPkZZUExHMVpyZHhHSDUibzxgTk8vcXdlKiJQPUw0MVtLKHs9c3NsZztDaipRXTUjQjN2OTQ3LGhHJDApUkRSNVJFM0t0Q2paMjVGcV1PKmwqS1dNR2gmbzpB'@;
put 'KSZycCZQV01CcCtlYnw5WmBLeVFlW2lzdUYhUkRWNX11NUVDLyZTMkBgJG9hY3MsKndvQ2hLb2I7LGhFTl9xcGJpaUp8W3p4c0RWZD4/JS96NXMpKDJOOmw5VVlSKiN6MFRqQShaelo8Y0FjNjppOiUxIiVxN3ljKyxXMFJhMjZHLF9ob2k4bSVsflFyaj0yU24qWVh4cytvXnQqUHFZZ2UubUt+'@;
put 'dmFTalJ3NHsqOkt9LjxWSzdzc0RqOFZ6a2J0ZlhHZW0qRGFgU1J7P2RPZG58K1VETmE7Jl9oOi5we1lwUUdobykma0lFUkI3WkxoeCk0NF8wTD5AeSkrWlVvLnVnLjROJHw3al0iR0x0cz1uUXVjTTNZYkp6JHpjZStJXURbYm9DW3JdbyFAbnk1NXc+JEk4eC9mVWw1I1c6JG9EUllwZGY8Mnlh'@;
put 'OTJ1Ky5vQDpiXmA1fEtmTCY+Zlk0UCVlMEFwYlJSSElHKUlCOmNFM2JdQ2t7UGkjQDlIWmhrU0ZNbSF2NnpyeVk6Qk59Ri5iPzZlVjZHNTtGKjN5fFFiK0N5bnlxeGxobjh5R2N7dUZSYyJkPHlyb1k7a0IlK2tDI3dSV1EsIlszW0s4dzRZTVN3QmFDO0dXKChTKCJ7VVR1T3Y9VyswVUo9PVQx'@;
put 'dFgxWD1mSUdoJjc/ZFc8PjFmZTZLbihAdiNNKFlIJSNzY2ExfD9XRSJXe3FAbSRtPVtSPW5pZ1VIPzI5c29PJDF1c2hteVFaSmZJRHNOd2BZVjpQW2YyTks2NEdOel9fZktDIlNKUm4jLiExfHFXcEokLG5CVm9zb0NQdGFTPiolbW5NOH5GaHtWbGBGNUx7dmRqSiZ7TlV2Smpuej48fE00NDde'@;
put 'IktKRj1Yb1ssfC41SzdTcUkpOFpRU29hd0ViNShrbUY2SyEhVn1DZ3x7XzlDOF1pRHNeaFJsMVhpPkU1UkErJG5NdCM5JD9sN2ZkY2Vha1l3Q09aeCl9dXIqL01DcjhjPGI7ciFFRk0jLD9hUCpUbls3Wj5ibyo5fUdja1peZ0YuUkhNMVY3ZXwqJjBjdDNxfFFjbkUlPHYqOWo8SHJGKE1RV1o0'@;
put 'dDJXcldlL2dKcH4ySER0VTpHZUIxU3BydmdHVTVfeiZOaF5AYjg2L3ptMFthQy4sfk5NP091bjJ0XypwN3kqfSFpVWhVMXgqakYjOmBldilRbk9IPU1TVF5eeUVzOyRrOD1nYnY5SToqWmZ+MGkiaXNSaDArdlFEfU5mNjY5XjtUNigoXlJTVio+W2NdYlgvSTchUCxTSDp2bV9QQ19SIUtmXkBM'@;
put 'fUlfUEw2cV9SMVpyZ0UiW0xoSHd4Ki5XZihRY0loPl9dQnEle0ljVVloZll4Y0ZreEpANW5oPFdGWnsqXk1GeTRoXkdXPDxsNE0iX05CfFtZNk9CfT5fPTBNKWZmQGgrPFRRODlxYzhxdF1zTzEpSDlWLll2XjhtVEk2QE9xa1B2JWF4Qyl0cFBnWGVQcU4uW3FrZDVVcEs0YiNxeVVObV9QX0xZ'@;
put 'dFtSRE08a3A3dD0uZTc1cSR4YUMoLmJzOGVFaUUySEVgez5SfWtYQ00ySiJDKSVgVTI0e2VOXkkidHomOEQrPmk2b1ljcVhiZysmJUp6Tz1kdzgqLzJSdF58MTB4fVdINW4+e0Y9aEFjVHhwaF5RYV91LDg/SyV7Uz45c2s6Qj9XPSt5RFNjOHNtMlIkSXpKJE87YVsoOUs1RGVlaFFFWCVVVVlO'@;
put 'NDIvLlZYTGJWQW4pbk5KOFNxfWF6SyhkM0hvWk81cHtrOks2MmF+em83Q1MlNkhbOjxwfklualB9QFRIJF1BWj9LKTt6cltJclpHbGt+P2FmITJTKkZaM3dJfGZ+PzRnbTEjREsxLnchPSUhNVNZWGw6Xm5lTXM9ekZkWWtJSElDOG1DeSU0InNCLCRzUVlZLygkZjVldVdmYyhOeWViLCJ4PGk3'@;
put 'TiY0KVppM2E4TURGWk9hd05MLjgwVHpnZ0xTPlJGZVQqWElyYjd3QVdgVX5HfkJ4K3sjej1gLk12ODcxPGV2T010eFZSblh6Wnk9XXN2US9dLj9PZCpVJnNOSTt+NyReIyZpZl5AQzRGSDoiYD1IdSkuImZbYHcjUU9SQmpvK1ltfm5lZ3lNNGohYV98Xi57I3oqKGl6NH5RdCFTInZ1VE5MZSR2'@;
put 'eFY+djJuRSUlcHFFRzk5bXE9LDs0YjEmKmUyfGNOVWYwMjQ3NVc/KzFqdD5dekU5VzE4ekt8c0hePnFmRixHU3N5W2NsPTdycGt8UExQdVAwOl4kYHc3JlRoQGFWa1o/a0A7c2o6KSNka01KfTBQVTJ1aFo2KCwuXix8Zn1ZRWFSbShfYnBjaEdEbTBLPzUyRzlZRSxpanR7TWdPYmtqU1JeKHhE'@;
put 'YDVEdD9kRGswNnlZUSQ0U34uOGhOW1Y4OTg3czpzVzJLUytXa3tUNSRzZHVdN2piM3hHLHxbQzEvXUJCfF5OSXpFN3ptfUREaVRLampAZiFrYnBZWHRdVTYxP1JIPGRXQk5HTDFGXWA2PF5nQl1fZmgjKn4uIyVgcW5wUWd9MGQlQmhHWV1nNFIhOyZ1YUJXYjA9MEciQC8jS1pJKy9efj07Tkxb'@;
put 'KFIqLlIoTntqfjwjNCo3ITBwTUAkbVAvc31DKU8lW0YsKjs3KVd4Iy80InlGTS9tdHVLMGk1XUF9O3w4YSk9VDV8KmVDdD9jQWkhaSY4XjBKMnhIQEE4Zj4vbjdZSHAxckwuJjlwakM1MjUqd0clYndJdUpxJixKO25eZDd7dy8iXlVYRHhbJGgkLzlNWV5TWWVbVFt3czxDKm9ON2tRQkR5PCxg'@;
put 'OCpoRDZxWXxiaFl4b0FLIj5tVnBDP2NJRCZrNiI/WVV3LysxNjF6alZXemQqQ1omRHk0V35JSjlSeXl6YXAkNFtRc3o9Vmo1a1gxfDA6MjB0cEA4UkZ0UXI0K3pjXmxVRGJmPnU0fWl2UkB9UzQuOG1KNENgaW1pTTw+YyFnZjRlbWVLVkMhXUN0YV5DfUI1IiFRJW44YFkpYDNzfk1GM2RCTz1A'@;
put 'Ti9CVDdgIT01OiRYMihvY0NtL0hOVz96OmVbZCFlSGBOX3J3V15IekZKL2pMe3dJPkhDR25JSkMsanA6TE4iPTc+bVVPNC5lOkMyIX1zeDxPIWRyKzxUSDhMbSFDUnQ9Rlt0QmFCUWxoVFUlfV4saiY7KHl0WzAuMiokKHY3Yzxhd3hodkJEcDJLaGddSilafUs2dSsxZ3tFZCVMRldpP0xUQHtQ'@;
put 'Vz9gb0xaSm9Vei80O1B+YSRXWnpiXkZCaX1lNk1CZERiWkU7WkV+Ii5eTSRGVjBNcV93dz03VFFERlolTiZiIkYuJmIhIk9semFBMzhVXXJvWFZrWHhzSTlORWppKjlpL01QMCReWV53TypGXSw1UGsjPVNmQmgxLmR+OkM0W19HbzI5QXFXQTZsXlFfdS9zcTBnXiNQYXIodH5AaHZQZ2Q+NUky'@;
put 'fSI6MVVfQE9ZZzprKnJwQkRhU2RgdnEjdmZhKitXcTosb09kTEdQQy9kP0Q9KCV9LHtILHRrLG1HZDlwdWRtUWN6RTg9I3dIeVFvdCssMlVmLnF1KU4vPFpXWH18TX40XlhbQiRhaCs8VmB7cUU+PSF8YyVTfHdRI19ubEEkK0R1OnN1Wy5uQW93OG0hR31GKkRpb2U+X3gzYTl+KWgxN3ZuQkVd'@;
put 'MjRsQCFzcCVbSC81XXdFeiN7bTtdKk42OHM1T3tgfX5xQzxbPzEuPGxae0VFNCpMV2lHdEJKe3R6VXw7MDJqLDwlZDo0WkNGTlt2IXYrV3BjVXRuQ080LHpoQ3U1SDhgSjBESyVFTkhFSy9YdEZla0xqNXFlNVNsbj1Nb1JCaDpMdnpCbnMuQUtOcnNQWVpuK04wS3c3VnlhSz1SdWNmdTojKU4q'@;
put 'Lz1ReFVXe2omIS9vVn09NkclLG87aF5xdDVJfGE5PzgsLGVuKEc7ZD1qYkl7YzJ8TW1tKm9GZF5HQTs8Zm8sNSI6NyEiVzNNZ09MWjZTVyxRKVJ6b11NKCxsYmZQTllwYTtXcTlPLCokfVRuWSUwWFAjS0d3WjRaPVBTaX1jQTY0WHNjaVUrV0w0NGV8aHkvKS5BRHYyYHxyVCYoaHopaFlSRyFE'@;
put 'SHsuL2pzZjgrQH17WEkyNW17MCtlPCRmPURjQShUcSZ3JVdUTDd8T2daa0ElVXRaT1FAPDcld2V9RUIlMmMuclIvOC81TXJndiRlXy5+Z2AxYmB1XUhgdnlETi5JUF5NWHAwNXghZjNyL3cvTDVeWlBsRGNzXz5hPFV5Wjo/K11MdXl+Q190YFMvU0J3Y3U7aWU2VUxESCp6YiEmM04wczAidT9R'@;
put 'RFsyaz83MiU5KUZ2MTZrNk9sRSJhamZefTJkQmckV1tKSWs/Pk0/cm9EPFA9WmNVVnswU2dWXXwkZXxseXdkOmtQYndxO1dHeSxTZn0zbmkmejdBX2p0SWczKFY1KE1jM21wLF10Yj5SLHZmVyFIeDJvPzZ7Vip+WExRd05LNDQsJXR5WU1FSyQvdThvYEAxIikyMFJQekBEeEY1cC8meSgscjs3'@;
put 'MH5efiZfRzQ+ak9UMElwSW9pdjYoUkx1OHlvK0EhWmZlaGNOKi8lPXFMNnRpT3ljUz1aUSomQiUzbj91e054UCRTX1diI3VhPlZQZE5DNWsxRzJld0Y4a0B4YUZGKHJRI1dTVW1XT15VSV53WkBwVSw3ZnxuNks1UWxYZCYkSVpVVlNhMHdldzQsYUxJfStUS3l4RVtXaHdEY21NeCs/UEI7JGQk'@;
put 'UkVQLzZoaU9Qe0ZvMT5SSDhIOXVBTCg9ekxFd1NlPXJ5c1FLSWJmeWc/YFJ5TXNXXyR8fC5BOnFAMHJ3bmY8YzUxWG1HNCw0cytoakNyezIuXkNFYm9lTERbIy4waml8emwhUlYjdnpJR2VwYFljPXhuNkR1VCZPfSphKklMXU0+JEh2eSs6RXQrdWFlYzlkX3F9P0RNOVBPK3BdSUNOJThINUIx'@;
put 'QTR6N0A2IWJYK0JDV0VIRXJSVmE+UFJye3MhV2I/ZHRuZH1qVEE2OGJAZ1JjIXpbPkZYcTxBSUxdXnMrPD46c0h2eEBkWTheZlo8Rkx9PDZSU2JGcHVeYV0sc3ZgYTt3XUhLakRdK1QoQTkwckVnbDNKantQbXRkUChEJHloK2NZeW9qU00oYE1bVl1dTVJMYXxNTT5yS3Q4bjZye3RCODhEallb'@;
put 'cCt3U3tbIi5wI0hrOzQqRmA+aXk6a1JMQzNEbTB1TiU5Wko5eGg3KD88MEJaK0l9NnNBPXloTCUhemhYTCpyWzIuQUkuUSJzS1owa3pfYFtINXJ+LyFsRDY9MWg7YGMmSkxvSyl0TCo1UWZMTl0vayY9fXo6c1FvN3Uubz1NLypZe0hRQUcvZHExTUorQk59c0VeRVpgaDk0SGt4NFdJbk5ob11p'@;
put 'MEJ3OWQxeFF4OHc2aDhRW3c3M2kxQ3phcSgxUWdWSHZtPjNIa3BjdyQ8dyJMXTxrX35vNTFXY0g5Ymg7MlBETUBbSHdteH4yJShZTF8hMXBfIih5OH5kfkQmTn4zMyR8a2l8NVk7LD5hPT1sLjNYdTNXWi4wP2RRSkkkOFcvPWl6WmxxTi8vTHYwMVRYc0R7NWpCd1FHbyhERHUwcX5ENHtmPztw'@;
put 'SFs1ZmYpOmZyRXd0R2Z6UFM3ZDlXPnx8PC8qU35NI1F4NGJNPjZhQWpkZ3hRJHgrMENHQ356X2RbLnkwJVkkd0tnYjhRJWxNW1dnKVg/LC9rYmoyWURfOjUjKmpYc09zO2xQOT9fVC5iQihkd3NPKE1SKVdkTjp7OylnTik2QmZ5Wm5WbywmN0drSDdHTkdmI3BFUVVWOT5TSTZNaFc6WUNRYDZt'@;
put 'e2NmVyppaVRbb0tKNDRtSV56ajdFO3pGL3RRN00wKnZvT2R1NVd2d3h6emxpeHoqaF9pNSleKjsobVpzTmdsazhwaEovX359anREXVgyMDFXO0U5dWxENWojW3F8Sm4kMTBzfX41Wko8WCt2PTwyNyUxemZIaV8ufmU5ZCNCXnFHQzJ1V3AsNHwkRSM3XSJUQyxUIUM6aFNvOnFJMFFqZ3hIeSxJ'@;
put 'fH5RSXtGRCxeIVpvNT5MUzRjNUg+N1hjfSp8NENQRmB9LGhIfVNaU3J9eXE0IXdzQWBiPU1fQS92dDJmXk9ZcExjLFhFJnskaDksd2VbK1pXVS9KTW8hWGo0PDB0cj5pVXpuZH49Ly9FWiZ5RGpSKWQyfSE/aE1pW2opbm1GeDhMYVcxXlVzNTBRWVJneiFoLDIvejhyflBFdUBmIy5iRkFPX2BD'@;
put 'QmhANFRyKGc2Zjl3Zz9NWy5BJH1ZOilENyhvbDh6WkUsVVN3UHk6Vj0zT208JCMlOWc8cTI5bnpVXUNSNmB8cHgoUmdrJVU3THREI0krOGhmSWByZG9sJStRRzBoP25hUVleaV9UVz94fmxRX2VULGo6LyxwUUN4bGBXWiE7MzN1LGV9I1AoSlI0R3RsbzM/cz9RRnh5ZyJ4VW89Z1MjWT0zZGE4'@;
put 'MV5tS1V0Vit6NVtiUDBILlhLQndtKShpfFd+WHA4OGxTVSR7QTUqPExQIXdZNTFiMEJpRVJLfHglSD9NU0NWYyFrcFJXN2diYnhQeCZNYWBpeG11ek0/bEteKCJjRzllKnZ7bjdmO2N6e0tEL2d9U0tOOChVOlN5Mmp6UE40Tk5hZ3I+NUkoZ21iT3c4Y2JYbV5VUzI7I15xdUsvYDQ2JlchbXpP'@;
put 'bDJCXW0pZlkvUC94WjppKkU9KF18RXV4dDB8ODxbVVVib2I0e0Z5c2lQQ0FKdmpvZTZ4Xnxvb3NuV3tLNih4NGVMbFEoJmcsa3RVKU9aamgpRFppemJFbDZbKCZ+ciF8cUpPO2AqbX0wcGYsKUtpNEt2TEM/Iyt+PGB0UEZGVyw0T1toaHFVQjYiPW99fUEveX1EejBOeWpXLExDSnhxS2w9akxe'@;
put 'RThwc0FjOmloXXdqUnpXYW9ZUzAzemV4IyVZYCtRbShiYXBpRVJWQ3M1R0tNPzhgSlBPc2xTOXhldD12VD5QMDs+VzpzYz1MbEg0O0g9KlM9MmZaeSo1YWBRYCx0VU1rY0lgZElVWkRGNSFgSFtQcDspIXJ3b0NqOVF8WEN0S1lLXlFIVVtFZFV0aWQoTng0PTsiUjxMTTBCSyN+ZXNQbWpNcXwy'@;
put 'ST9MOVdwMERtOEg8LE53UClPRmo6ZWohcFFVaXZIKVRWb3x4fTFMdE9tITg3KixvYTU1Iz08PHQ3UD1wS1pjLmtZVy41fEZnUGp5KTFGbzVjKVtIPlZJUi9ZclQ3d2M/aXkjaFFLcndWO3RdaWptQmdxME08PFBoMVFgUXZwdUlXfCZ9RyVJS0VrRDZvJEZTVE9kb3NMYzdVNTIkfjVkdmU2TWpS'@;
put 'T1lHUndldyFFYHUoWCxBP3RkblNdWVYlU3dVPGVNNCJzd3tiMGxkOjs0N1JGLHo0Jn1+blZZWVUkMFhNaFVJZXJPWFhjNnRuUFNeVU4qfCJDZ2JkTGBJMHsjIj5lR2RLUjlQTEYoLnZuKX5FYDFhRyJtYWEoUWVGezlzaEhkO2VNVG5OZDovInNgISROIkg/YyxAc1YsfENoUzRZRXorJVckemd9'@;
put 'Q097Z2pdJnZ3NGhUWkxLbHk0UT1WMFc8eG83fGsqTFt9V149a21JbGxBYTZSPEBdIV8rOygmQzNhdkIlWHxbMiw1Y3dCL0FMQ0wvVUJMJjNCJmY6UF5xLmZhJkhXfEEldDt5TDp8OTIxQDkiciRHb1JwRlU4aVVAUDlXU185XXt0QmJCP24vTUZ6cWk1S2VacmdxNzZ3UHU7UzdBZFR1L3t4PXpb'@;
put 'ODxXQEN6Qlc5JmlwcSVjQFl+KkN0clRMaiVEKU9DJHNiejMyXVkyJk9YfTMrTTNhVmF9bDVnNDgyfGp1QEZ5VUgvIjshd0pAellRJmZDSFE3UmopSX5rKTN4MlM9ZUVsYjdqSmxqdmkmKHM4Q2BtdC9ySWFkKTliPWZMQ3hEOzZMLGldMHBgNiVqM1JHNltxdGpXRXlrMnFxRCprJTJWI3VKTFp6'@;
put 'KDBlOjgpZStVSm12VzJdaVBGXUdodnQ7eC9GVk9jLCsvJStWLmRZWH4xOVRUWjY0Ryh3UVh4US46L2N2MG4+b244dHZBKExbbUgzSH5BOmNDKjF0eCMyd2F0U2UiI3lWMFBfbkJiQl1ldyp3SEFrUmJpRXZ8YCgjc1BuQUx3K0tBXVlUYXdgUzVxQFZQNWJbfWMjR2d2Zj1aSzVRYGF4JmRpYHtn'@;
put 'LC9BWX5uL1k4VjlNZ0o/IyhnP3MkX3IxcF1gfmlbKHpvWDd5ZVA0PjJ9eFRfTkA8OEZrSClDQSVpMTovdkhybUpiNkZ1NVlkTyg0SS96by46ISkjTkZURGdPfi4jVFFRRF59LDtfTCRHVX19VlppQFZbbEQkVjlbUmlqczt0WkBzailNZXZ5U1U8I1ByUyZkZXFIVl9tVkVyUFdjfj54OWFyIjxP'@;
put 'RXklcDZqO0JTM3spfDx4YXFxeUI+TjJeOmJXNU1DOF9eK1J7K2B2amJ3TUApQXpYbzcuJTErQ2wyZUhAd0pMKFJOQTE+Oi5kQlFaKUR3LFc/UjJaV2Z+XnElYSYhWWYwT3lCZU0kTzJ2T1RPOjFreG5jS3VgaVJvemE5R05oVzNQb11oUG15enBvVyxJKjxCWEZ1M3JFeHF2VUlEQCM8Om10PyFD'@;
put 'Jnc/YFBaRzphPlN1WUdKNVlfKGpXTlU4RWBBfV1lNmUpZkM6OHI/fmJsPz8mR1h0fkt3MThvYn5jQ18+MXBxRzJjd3BUUkYxPE9NY1pQZ041Lys2ZV4+OCpfW35dZyU+RShjZzchTG99MEdPTzlyRE9oRS9eV1FhP2hJfXE1VFtIcG9NM3F+bXs+Py9UaF5LKyNSJDhSQWAyL1smUC5QSjBTblpE'@;
put 'Y1tMZTB5I0pNQHMqaXUpKG8mX0pBbFkiREJTbVoqVCZSVSQyS1UrYXxuMFt6WTRSPkR4Ii47NX1MKD4qI15vNjMmY2VGelJARD19YylMQWp1KkFPU1E3LCRHNmZqTDhGXit3QzZQRihaVC9tUEJnTSYya2VoQ3l4K3Y1P2M5T3VAS1IkQGtjYDEwdyxpZlZ4aXFYbF5SQmglUjlOIWtrfUc2TiYv'@;
put 'bDtHUnphKns0ZTp+XjlFK3M3I25gdFZkZ1Q4TXJLcHtnKChgcHNXS3piOV1yMSlIe3pXcVd7STk6eSl1UWhLRDZqVEcoZzJDQWYvLmI8SCozJmtTY0hVQGpyRXwzYyhVdnd8X1dGcGIlKUBwJHQyMyU4eFkmQ1hyQE80RWwoLztvKiZrOUZBZURHTV5KKzN5TjZ0RiNEMC5XLj0qbnNDc1tKa35q'@;
put 'YV8mVTxXUyxrYCo6XykvOWJEemtDfkBVZXFeNUpvKGgkNWRuQ3gzQUE8VUZXZXE9QH16WzkkRj11Szs2fjllRnBoUStEVn1XMjMrZF1JLnw+NFNYZVUkPmw+V0BUNkN4WzAmTXlGKH5xXnBoJXVDb2tAOz5kXixrOSVnfW52L2Z9M3hAT1N4ajx+Q3M0NHNiamZfYTowKUpIIkE9RVJQfUQiSz9k'@;
put 'VEAoWEZKPntUPm0+YERYfUF3OCIzdj19OV9Sd3V1SlVML2NNck1qXmBqT3tuXzwqeWV7JVB+cXwudlpSY0B2P216TE92W3BkfTg0a1Z5QUBud15IM2ViRSp+TzxUWStgNyRYQWZTNW5ORHBtalledGc2JDMvWkUyUU5zPjNuKjxXLDclQncmMnxNYDJiYVJFY2NocTZNb1B8Rkk0bkhPKk52P3dt'@;
put 'WkJKejolSGdKRlohXkZkOyR6MSo9ODwxbjRTPmVnaTxxN30pK0N8QWJ6O2RqQiV8dlYqJFteZkszejwxbzNIfEdbb2pQc3gmZVMpQSZEPD5nU2tDVD5Ecz04XSJeW0ApRWNxXyY0W3x1JDJhY0UiMzM3Omo5ZXg2cHhSOzFoWkhYSWpXITI+USEyVkQ3WHlpVWBJenQ6VCkkZDdtNi9BLyQ7SCQ7'@;
put 'VSFpPjkhQ0d5Zl9SdWJ8aSkmKVc6MnBPbVRVO20mSTNEJXs4WzZ+c0hNI0xOKSJwSCNDNFYvb2omRypqXjAme0JvMzNjVyghIVhiPlUsWkw0LCkuSSVIaUs8NWBJT0laPUlmR05wZno6KDZFZV5HNGZKNmwidWY5fH5PK1koTkZocT5+aXpRUWRmRXk1dFtMP3x7eFI/bkZTc1M/WmtzX18kODdN'@;
put 'S2EqdE9EO1djSllAcEZsWX4haiZKMl1fP2hXcCRVYD5LRXd3QllGYkc3aWs7eysiZzViWEp1P3ddbXxfODhNdHVWM2R9V0k6OWpGbGNuOlpAWHVUX2czM3kjaGYxa2IxbyYvMTlFaDt4bmFLWl5DNS8kLDpFaFc/cjA5S14ybHYqUiRrYH0pPDpdWzJHR0Z6SVgsI1t2OUUlc1RuNX46c3olOyVF'@;
put 'cFZeJV9pTTB9NTJALEBUfWo+TD5wSmleZmpSRSoxbUY4V0M1K1ROUj56MndhMmN8T25CLkxfYy5raVZPLiQod2MxcTA0OkA3cThIKS58O1gxP1hue2tRLmMmdE1sSHwqdzcib0FyUjAiPGFxe3Q0R3FhaGBZJDB1YlU3L2tUJmpPPCpFU2FAfGlAS1NQJVN6Om8uKjgpT0tYOjgmWE16WSsoMmI6'@;
put 'b1Y7R2s3RVopbEhBLyJiIT55T1JkS11SU3JrQTh6c3RbK31DYnJnP3p0KSN5ZjpofSNIYUwlPXhwcVBtQm4kd1FnVkM4NGJbdyowMD01OnF5bzgreE1FPGxOJSxoXSVBfCpiO2hCbCY6ZV9+b0xtVWQhTi9IYWAkNzxYS1ldY3ZWdHBXVz1Xam0uNUY9ck8mNExLT2ppeWpPRj9kJVd4KT1CS2Am'@;
put 'XlZUP08se3h5IzU8U117fCpDc1QscjlDRUc3YyFLdSJDI3d2MTpaNG8uU2BSUjpdeHk8aD0kSlNBXjxaen10aVdHeV4ma0xnWnh6K15NaWg7fVtkR0JMd0cqLjJ8eUR8NVg/e1JpO3BkQzlnbjVoZnl3RC97VUpgS2JBVFdIbi40UmwkR1kwRCtqOlJ4bUVtZzleQ0M1OGBlZ3VKYWRwWjskXzpp'@;
put 'ODtMMldmeD1tVWEzey5bcWtXQSoycDZIVyQkVShKQiJyNWlnRmx+JDEsS1UzWG55STFiRCx8QFYzc01FTDNuTzx3WCxyWGc3KHlLcCpSTVh5PThIS2FINkdgUjhEQkZNWTdNMUVPdFJLbURUY0NhYXJgYk9QdV81KVo6Kll0WXxPUD5qPl1VO1o1eW95UmZrS0g6cltjRmQ7Q2lXOTVWMjFNZ2Nk'@;
put 'O3F6dXdPX2RIZWY4a3tZXjRZNjI3fV5fMVg/eDwwNyNIIWt5Ymt3b0lgXz05JHl5UyI3YUd2cWtucEQ9fHtdJm0iXUlXKWE6JSlGbGdBazZoOlJRezIvcGQ3bDdQZmpPZCNLdkQ9UjIrTjZyVmhkVWomTVZDezdOOkdqT3wjKUh6emA0ZzZUXlt5LkxZdVdEVUBHSHNAfFEwM1c9Jkc0dCYqQVgx'@;
put 'WWx5L3NjLCU9IyRVQ0VUKVB1KFd9OCJsWDhdNlsrWSxZOGFwLjVGPEhMdjgzLkZRJCFCQHJVKFdlYkJlS3RYKzxxfTJmUDVPMix8UGRsX0RtLiFMV2dkZEN5SXlGY1k3N0R0ZX5eaTw0d30jJV5NRnRdfilyZXo4YG4sZ2E6SUp+LF8oJWppbyE2T3g7NGd1Mj81RnElMVR5K21tLHtZM24vVko9'@;
put 'aTJ9Tj8rfilNdnxgQS50ZTFKLmVnQUwkc1JfdnNPNyYre3JATUElaCVLQ3R4VkdJQyNzelJufEgvVjA/NVkoM1BZVlB0LmNiSkw4LkwiK1lXJXk8MjFPTlZHNlQ9e0BLKCN0bipbcztfN2Z6YldLcT9Ca2FXSUJbdytqJSZ9by9TeTN6bzJHZlRuSmlhOUV4NCxJZWppJXw5YExLPU1XWVAyXiU9'@;
put 'SGR8a1VbfiMhWF9fbmFMM28yPFAodFJKVzEyIV07IXlZWDxbQF0iYH59R1ZYdSoiKTQrTEModG8vKmUmOnx6O0s2ciojME9zTjVqYmdrIWpLeVtNfEpHfkRxMVsxRDFgPHU4LCVoZT0+Q3dMTU9NPF1mSV1udE1oUzAiT0d4MDsmNWlNYGZNUVZaQkMoTl4yLEsoK0VEPigwSGwpVixycU9IOl4z'@;
put 'QGcwdEMwP21TbTlkWW1WN2I3NTsiOTFYa0Y/eSFQfF89TD0jIkhWYndCNW5mRSo4Y31BRFtTe0x1RCNIWC9oS2V1LFpHY0VRVFNZI0FOeSFBOzRTMFVCXUNld1IvMyw1aEBgRl99IjA8N2NRODlWKyV5STxOZ0BFfmwlLkA4OUtUa14xZm1FTXVhQ104aDN5YGo6VSFCfWlUPzksSSRPWFgzVCg9'@;
put 'flN2QHQ5V0JpWmphY0NDS1k5XnEpcEtgMGlVYltoazh6JnIpT0M6M0MmVjMlI0AiOS5nQWV4T1RxKjFDRV1TQCsuOE1lImUkW2FkUzIwcSgmSCQsODxmWSR5I3UhSjUhbkImJXJXMDRSR3RscWBifXUoKHN2KSpEYCU2MStxTzMxdERpcSxLfjVIdjozek5zPXUqRTpuPVpmImtDaSlaTG5xN1Rn'@;
put 'U2NkYCZhenJ6VmJvQH1+UyMvJjk1XyUjYElyUXRWYEIwST0/O3llVGVILGF+S0VNWHpvI0NMQEB5QzJhYUhafF1BWnQ7dnZ1al96U31fMVcwMjhhLFU7LjxtWlpYfDkmbShmbUt1PFJeOnAmdCJ6VEBLU05qek4kal4xeXo5dkBlWjdiY28vSTEvNkZMUGw0REgidys1czo0Yl45X1RZRTdFLiwp'@;
put 'RiE8fkhxQnpoZVduLipsRDJgfElMSjF2VGpKM3UhXVJnJkxYcn1lbEd0LzsyflFycnA1MHZPYXgwXmI5fVp2WXdwT3dxaDF7Xy8xYWpSYzRjdzNPTEpmO0BueWFBdUc7dHM6UGp5YTRERjRnbXRHIyI0RD5LIXokXVpwPmFnYnglKU9qYFZXe3MjNkcqVHcrLn5sYGZoaCNBZXNuJVhBPGYhISI8'@;
put 'TW9zPEtoNz8yWXNBVHo9dVpKeGZ1JD1TfUV7JGBUczZQR1k4bGAxaW16dS5ZViZ+XUxbXkMpT20xXVdHe2FqRE1GRi4kK0dUW0pGQlNbIWJHZ2dyfkEqPj9lZnVNZzRYKV88VHVCIiNEezZVOz5fdz1DXSxKQFNrMD9KRm1zb01ueF59VSNRdiNQK29XR2lxITU+WTpIPU1gcGxnTHBHfXpveHpX'@;
put 'ZXNDejZkRUkoZV9oS01MZEdHTytPMXIrI2N9KkhwcWMxTFkuaDhpZn0zXjRgOGdFKiVPQU8ySiNmXkBiLChhMHBQOihIbypQaFdBX3dOVnkvekFQdE5uOyZJa1Z0enQ2NENnTmIzaFVwaX5TbCp0SHAvIyYud2NNJDIzI35TfG5YKXZabHk/YjdsaklTcFhCSk58IWUyeXNEcX11b0JjOlAkYkxj'@;
put 'JU8ufE5KNlc+Rik9OzFTOyNFVVBkY1NFIy9US2Fac0h3RD5PRHw6KCZbSHpgPVdGMlBvSWlOfXV8NjdGVUtgSlg+UmwxWDdTM1FTL2klVnFQeXtKUiVtQm02dDsxUjhvY1tFcnVwIlBhdWpEdWJBSGR4QVowOCt0OURDbSgofkVQJnA+MitGOU5yQWV4UCIpKy5ETVRUejJ7YV05PXY7WylAPSx1'@;
put 'Qy9ZOSxkeEFiRFIuNT5yM1JsK3M0flJOKUJ6R29uaiZ5fFJtSl9NbmlEd0F2ZllPUjlHKkoyZWtSSDJtRVJtbl9IYFBeWEJNPG5iUihbUnBONX1wcVEsIVdIL0JPdUJ2YjJNJiowcVNmdyRNZkgwLEZmYz5zUW1xRzU/O3FUZFNNZmZLPnslNDc2d19qRlRbSkNhTCVmK0UiO0N6U1pSfGZDe0Zx'@;
put 'bHMjTUtpVylJUFJZOlllLitqIkwvV21KITJTYFJgQGhqc3ZpcHR0dXs1RiVXMkU7SzxUZVY2azI/U0xzTn0pREB7QztQTm5sVz1uPzYlZzNXPVZdQyo4P3E6MzBVXVJmY3o0Z0ZJViZzYU9xW20+dEs8MWBOO2UzUVNRITMybEkvcUg4UGwvbmpxOXJIOHRASDszbHl4SEtXZ0gjTD1CZUAlfDgp'@;
put 'blo4MSxbYk05VSEkPyElRVRMK0lwdUVTM0U7ZVVyJHRlWHtabHdmKyNHZG9UcmVHUGRUPjpPX3Uwb3BPVVc4SGRiazEmckYyZjBWfThuOFM4PGVyazouW2JXbyQuYT5pRl9WPDZHZD5OejgocF1mTVpnSEs3UyM5YklTUGxVcGVFXUhwbSw6VjxLZWprUTN3OSE/KyosJWZWaSEqMlprK2RGO1hs'@;
put 'fj0xI1RSbiZFVEwrfGJia2pLR1JocSxxTFt8JnZsRm0hSUs4TnJ3ZVY2fU8+OUApYThGJHFiRGUxJjNtJHZFYndIbTtpW1t4VCNyZXlUO1EpZX04ZnIhfTk6VjgubkFoMyZefVs4Uzw1L14lVzhTfSouVSZxJFN9VjhWbU47ITklbllsZEk6fCxfUGV1VDpwamxDcCRiNj8mLmI+ISU/ez5II1VU'@;
put 'XT1VeDJuZDw9XVVOJGsmQFRMZTg5R2RzaDwjVzg0SHI8QjtkKHQkYDZ6JDY2VTswKnklfSNvbXg8U2VtM3cqJlVtcndWWjgvX2khTmtlMzojIXdGbVEmUCVYOHhyfTchb1ZnNCp8JmYwRjtCPj0pbyojJWdIcWZoWy8jMi53Mk4kSEoyIyVtfDMlbTN2Z35GenU4Kjo5fj5EJk1rOGR+I0ltUyIz'@;
put 'In5LS3Y0LiJBdH1yKVhsbldMbjZUTyUoIVRhVD0mQSJQU1YpWjM4RDIxVE5eeXRGUUVMaEBjL1ZoT2o6THFmVUxibihkZiFuJFYicElHXSg3WWt4dnFVMEwyW1opcm4rSltjUDsoN0U7TDozZkdOOVc6SzNpR0Qsdml8OTllL3JbNFJEVDkvTlhwbTdxTyxvdTY2OCUxMCx+UTtzUE1ofWROOG53'@;
put 'dGI3dGFvXSpMcDJeTi40YVYiQ1FyRENoOzx2MzNFLmVPV24oeTgmeWIwJipXLj5PWDVhck1wenQ1OjFdfTtzKlspNVhkZ0sje0l2PHl6UXdRcjlGaDV9eVg6XXRSZXRvL1VoS3ZjdE8rSi5pczhsaj9XNSFzaVVGUys5SDI9cXhTOV9hejdsOVQ5aUtTcXdWNDx6X0pUMHQveCt9b3tTaWliKFJR'@;
put 'LFRsOTxuVnoiYGIsaTlud2IhU1JfdXB+PG8zfSNfdCpOT3RVKklNdz9ORTE0LiJFLm83Zk4jWClmSG5Xc19UX1pMMF9SN2BhR3p1K3phQ0ZHPnhnR3MoTTMmIl1sMERFI3ZEMFhMSUxPNWMlX01zXzshR21mNDQ0PDlvWTk5YlB2cXB8dS97WnxHNTYoSWNQVmJPaF9RdltWU3ZPXUVFdUtTKCJm'@;
put 'VjRJe10lX2p0IUF8XzE8ZUNUJk9IPWB8a0p7PGlrVHJNJlc2TVJYOyl0WXBWSmY1LyFeaSlXOyh1MUcjbnBEUUVCc3ZCVHx4YUNXPWRjKXNIOF1tTiFEYEw0KHF7KnhiRkdtVHI4Z3NeRW96I2MvPWFecnZMfnBxRkp7SlU6KnhXOlBTUyV0R1dZZnxeSkh1ez18Il8jP14yUlhtaXJyYFlUS1hJ'@;
put 'TUBUWXZ1M0ZgVkdve1l9WVNROSYqZnxefVJeLnFaSEZoS1M/QmN2RC9+WEtvbjx2WFVvMT1fSzRiSEBxeDhjP0lbM1ptO2gvLk51Y3R5L0lgYkRXfWB6MSJWczVfMmcuRmAzPll4NHwibDsmV1tbP2xYTkpnMW1CS3F9LiV2bkV7cSF5LHt3KDt1c0c0MW94XXIoQz4lbWRNM3clKUZ1Mj9RRyMq'@;
put 'K0t4UElpITckS0dSV0s3RVVrVjpfVkA1O1YrZF4oRTc0OUQkdCg+OSpEV0FyL1tgYEo5dXZCYmpFQGkoWFVDJFRNdGcsakNaOVI2byFpKGp5ej5sQiNfKyt9QGRgQispeGNmWVZ9P3Q6dStHM0UyaVVyY2ZAYFhpeHZVfndlQXM1ITtGOTlWb1NfX2tCMEBVPzh3SkNZM1ZsMUhHRTVOWnF9OUsq'@;
put 'R1p4Z3BQWkBTPXNEdEQiT3o5KFRvRix0UltWRzRRZ3FCM3t2IiJJMVFlPEpUVjI1T20xckFZZ2cpPEM6RFl6e0JoRX1RZVEuI3I6JHA/Tz9QcDFHTit2M3NPRmNLeXhLYTIiVS9LeVtSaipUQEtMRiQ3aWU4VFdZYHB2SC4ucWt6ZVJCQj5CQjw2eU40YG8hMjBILlJLVF10eH5KK30jKC5MZCYh'@;
put 'YUZEZl9bWj99Y2N9S0d4LF9pM1QrPnYrOjUkaHs1ITJfem56Q1hWTjopc0hSSHJPVnBAOSk1RV9PeyFJTFt6aX5oUG05Rnp8cm9AWHVBQj06PiR9RS4qSiEpVmEyd0Y0bTptPEI/cDkoVyk1ST5PW1g1YWxiRU9QQG4mI0lBb21vblsuNkpsUVpbZV59S0M8fEs8SClgdUZ7I1khTCZIMXUiSGZd'@;
put 'eFRdSWt8a0wzO0Q2SnspUnE7Im5GYHBuOngzUUVrLk4yY1FxRVZpV3Z4WSZ3fkcrUHdXMj85d0FmJUA+by5xT1FxSTc4Jk8sO31XUzxDQHsoOT1nMUQmcTUxKTBMdz59OWx9K1tAPyQuQ2VkSUAmRm4mciQ1VFBaOmBVVWgsdk9PbUdZeyRzfTB2IlRWIU0uRVtaVj85KTx4VG9nIjNYVUVWQi5Z'@;
put 'LDgqJTo2bSZuVCg5U0p2biojTi51JDM1MHVnX3sxPnNOSXNOcz9fQTshS3kuJC5KNllHfXQ9bnIoP0RvV35JZDNHUmpePGZddTJuTmNJY2M2UG4oWCpvMjlPXUkiMnxQKnJvUlNtZVJYfjRCYyJJWnMlUnkqSiRrP1szd3cyZjA7a05tWlMzVWNkV3xNUFM9MDYjVkVMOT1aMz1mfmk6PHQkJVd6'@;
put 'MXtCWDBhLDswWCU9IVc4QChXVncyWSp5KlgsMm1LYDlZLmZDPk9vUGR2PW17IXh+MFFifWBrdjN2Lm5wVG8hOm81UGBNb3l3bEdyfHlZMEVqaGVHOnt0dD9QVUpBbCtlL0lwZ1ZFOz5WaDY6PWUxOi9hOm9TZSojOEEyXT1tPmhbW0w6IXY/MC5VfTEsRVcrRlpOS3YoSHtJIl0kb0Y9Y3RkSUhP'@;
put 'WC9+XyNvX2pbclkzVS9GWnRrWltkTXcvb0YmQSljc0h1TnAwRFA4UVpEQiJaUUNNSXFPK2A9eFR8M0UhcHA3dEBUR0FZXlJdY29GQ1NEY094fXFgVEsvN29AbX5ORT4jM10mQCEoJXxgRHl6WWtIfGxwKTNoe0ovfCY4TG9AK1F1V3ZtVnllI3VvaDkmfnwjZ1oxU2J7dyorLyFuVmY4TDlPKk40'@;
put 'TUhpKFZifXgzUSNwSXYudzc8Ly5SInpfbVlgUGNnXyhiQjF2Iko8SGZ9RC4zW196TTFaQzVkXTQ2UiF6SjNdemd3ZiVDfloxM3d9clt4fTk8Ljopdnk6SUZ7Vi8uUjc4Sj1OIS9UNm1XcnFwXSJpaT5CRkp+W2ErJCZ6VHx7MTVYN1F4eXQ0fCFQS0BdeVN4RF8hWyFRXi9KSU5aa19jcWM9M0NO'@;
put 'VUtNdEZUKTpPXUdjPyZnUkNEOnArQjpeKVV8QFhydlZMSHppaHVPO0tObUpyOzNJVmMiKSluQDYodCh2ZTpNI3l7MzRFeyZJNXRwOSZHMlFSd0wiSCUjcjowY2dWUHpeW2tqPTdxUDVxQktuVWNVQi4lIj5xYUc9KVF5NWslYCMhfH5qZ3Y/UCFtQS5TJTRVVytFcF8sWixyaiVxdFYrLmtdVVE1'@;
put 'O2VBNGMlUSZDPXtwa0d7WT9bKilhMWlRZE9Xcllednt+KCFmTVcicGdVVjN9Uy8qQ0ZbVnxnUDU2cVRVdjN2dyIwSzMvZylJSDFhWyVXZWBeNGN0aV5uVTd6MitgRVFZI3xkfEs2Jl5kSnZnejp+TiNEeGg1WSkkdVNgNVNibmVfSkRpMUZbRnh+L0piJWojaS88W2gjIjhuPDZ0TXckZ2dRel4z'@;
put 'TXlDWFZ3Zi5jNG4sUVJiY0ZLbiZnOkhAfDM3NF1oQkZKeXZ5JX5iOD9DcXJDcn13JntLSVV0X0FmXi98QGRzfThpKjUkYHE9VC53RnhaY1E+fnFaP1M/eHdUTV85K2NDR0F5ZVJbcG48ZCZlUFE3LzZ0d1dHTnQwPWAscls9KWBERkc9X1EraUsmfHRDXXhZLi99N1ElW3lMaVRbSC86b0h5OTR4'@;
put 'RWl9el1XTjNfNz5APSVGQnQ+SzM1NjBgeFJbKH5FLHVgXzEodVo8Si9BdGo5V0VuKGFVYCY8TikxNnFHRjdNQUNDRlkucikzeGBVU319dmR+YnVFUGhOT30+ITU9SWBMKkY3ZThWey5pSjxuN2ZiNzdFRklJRi96MmVkRnRLX3VRcT82Zy5ePks+MyNWLHh1eGZVWyYoe14xViEkJUxWOyM8e0d0'@;
put 'QSx+S2xWJkk3bC96dX1PKW90M15VPm43VGk6N3NmWnQ+dVBPezFtZnVXemNUR1Y6QSRzVzx1VnZ+NHt+bnxYY2gwK2Zue2A8O2tkOXZKd2ZxQj9lXUtScm9ZJjIoZyVnIS9KN1ksYjArN2JFZ3NzYUZLXSl6KWZLP0ElLEk4TFgrISk9Vk5MKGBmLn5gfXp3UTJMNkxOKXVXbWdUSEVdOGl1WU51'@;
put 'cDxEVjJ0dCZQdEUpWTswY2s1KUtpRU1paHliUEkoWTpWJUVERSJgR24rW2tKMHhYMkkkSEZPIzlqRDpgKTRiMzooYFRfOyhqKzJWZCp9Z2A+aiI7bDY6VzRyVGRkTElhPUcvKD1jSVIxRUJ6RE4pZ2V2L3giQ0lmdFNYWHhCZz5eSFBKWSlhO0ZbQ05IWEE8JHtoI2p8IVQidXFDMWorT0N7ZihH'@;
put 'Q3I2cVdTMD85bD8rTGB2QkIjNVQjPUJAIjh8fkN2JjouQHtkRVRYQChMNXdyREY3bl0yaXc6WXhaYiMubSN3NllaIitEKyNxXWZsMCNRSkRwIVNgOi9vPW93YncoQioiaUJvJk9QLEApZGVndX5xck4lS3pdW0gpYiE9aDQ6Wz5HMExOMyNAZ2NYWmlSe0hnKnRuKEJGcj5PSTlabHZdUk5QLHBv'@;
put 'Oi9nVEF+NyZUUkNSOiUmTmlGcDZiVDo6c3VQNyhhM206JFBWQXMrOnp6LH1weTBbPn41flp5ezs+fkNgRFVBImp+Xyo0RiJzKn1DP3g6YH5kfj0+e1FSOHxHSFhSSnx5SGBNL19zc3wsSUIiX35fXzdzKj5ffjB9LyZ7O31+On5qfTc8QXQ+fnh9T156VTJAekE3ImNoQXNlJlJvRURzKiRfcHVp'@;
put 'aXZIVFJYIjFqSlQuUlJrX2ovXmRYZm90VlZFQ1NlczdrS0NqNGUrS09oTlVxM09EQTlaYjh8aHJONmJ2flVFXmpyTjdZdWhtZFd0dTYlUnVNfnM/Pyxock5MWWYhYzAlWW1lcmB1aUtAMH5OPio+fV5FaHIoXX5+e01wYWl3Und2XUYrfnpqVFIlczVJTW5saFFZPikwW3QoXyZEPnhvX2giKTV5'@;
put 'SmlWeWw8XTdBfXIzT19YYG5sOXAjNH1MI0p+ZyFeQlQ+e1QkJTF8JUt5Nj55YCkwMGJaXkgpVG1DOiNueUp1Uzh+OHRfaGA8TS5BflVsWjd0UnBiKj9bfUM/IjU8fkFnQlF6UkIlK1hQbzJiSEJIJFtwYn5zW0BVeSZCXWJAcTxCbl9ZO35nci9DdihrPmA9KnMyOGxFdTptZ3JUUCwxOH5bZllf'@;
put 'L1dUaTZWKkdhL0MocjJzUGpFfm40X1EhbHU1QHMqLCQ4YXhBVzJLTi9DXlIuZUJdcXo0LCZKcVVebnBVcnJNS3whaWtjezcmV2MlJj9rWXIjRWkufCE1XzlrPkVWdDYsUChNY3p5cnA6MXpOVUUqQX13MS8+cGZ9K1ouMHxaV0MieXJCcTpBYm9aSEJyVChhdnw/W3tPQFZSYj1AQ3s2cW1yfDhs'@;
put 'UCsjNStea2J1KVNTZUdweUVWMm5fXzZLUypjWlcuW3t3NlBpfXNde09qUl93QUdqKDcrM017ISZpP1lpXyZ4VEFXPD5rPih1MVZlckBOMkd1Q246JiNFJTBXIW1nPihvc09jYDZCQnJaUiVfaz5VWVRfbC4jN2IrPkFBOms+LkpuckIiJXs/Tlk8dTNjfTNPLHdGNk1CU2NLQzIocUN2THFJZSJR'@;
put 'ak43NkFdUWJIXkFGRTpXN0ZbdDAoOUgsLC5GZFo8aCtPOUV3QSlZMkAxY31bUntJbDlaMkB9KG9PXX5ee0hvdFd+c1Z+Zz0jJF9zcHx2JCloPn4+XypPdCg6fjg/TGNxV3M5fTZXMkFjO1Nsd2J2TUo8NE5WKnhlU04qR1hNVnF1U1lldT1sR2spPD00OFk1eE1WcEp6dClMXzBmRiJmMFN1dXN1'@;
put 'YnZYLk5WfSl4O3UmOGttMis1Z3dgZVV0b2BoKHJEP0BRfjdWbDEpPzU6d3MkNFFMSlU4NUtdUjpmc1lMaCg4TThUWzlwQ199d3ghVEpdUTE7fVVyUnxxNCloemB9bGZXI2IxRj88R3JTTHR8fWBpc1ovS0xEXmt1MDB7TGZbInY+fHZpPlE0ZTNZXylORytfRFk1czBuMmhHIjNZWypOR0JgeHUr'@;
put 'fVsoVjQkQ3g6e31TVFY0TCVZbDR+Sz1UNDNOeDouQFB3KX5wNDxzdlBUTE0jN01GfkU1cXNuSy85V1FCYSh8TFlpV1QmRWNFYUMwcj90R1dgUFk4fjtGJWhJdSVhcy49R1ZgWSo6fVc/T1dVfUQ3ZDZbcTh9aTVkfjBMaih3SW0xbSlAZG5bcjBefDdAcH5WP2kobn49OUBXcjhfXygwN3wjQHRz'@;
put 'V2ljK1UiYWZVe11EPkpQdD98V05zfmNEZ19YS3E4cl1sMj59bSJHYzxpQmFVfU0qL31SdTF5eVE/OSgzeDp5fGdbVShMeC5DKl53RlF+bnpdc1RgNHlyMzRsc186KHpzQkRJNCwsK28rKngiMHxbIiZ+Y3EudlE1c3Btfj0pM2hfMlJxL34hcjpRS2g0eTQ0NGwwfSh7VVcmRkVjdkpDMCF7bUQk'@;
put 'fEB0cX40bi92dzVzcG1faXJQVyolMnJ5KzdNY2A2RFt9Tz9YKClpXWVPM0FOXz5XRGp8RzVlKGJxYHM6bz85K3Umbit9SVo2aFcjZ3R3YFVaOn0udFUobXE1eUFAL1N0fHM7V1cwUEVjYmxCYSUqPUdzYFhZe31+V05MeTBgO0AoQTkhfVBqaShWMnFXU1FoNlEuZEdEe3w4anM/U0VPKXxXRFR+'@;
put 'N0whPiwscVdQV2BleH4oNipzcUpeO10pOVc7fD5Ybn5TRDRocj1UTEliVztRQGtKQ354L0ljLk9DMGB4JE5IW3Z3X3xUTWZzM15zcFB9bktJTH1vUnw4MGNaWH5kWXJ+TjxXO2p8e1B2c30+R2NGbkJhTys9Ryw+dnd7fHIpZ341QHNwUn1gZzBGaFYycnYsN013YE8sYH0venI4RSw6I0d9Rk1h'@;
put 'V1ZjRDB5eSROelt2d0R9cik6fnFlfl0ye3RhT0xGeFJ8ZTJjWmxbYjB8fH1INmhEZUMwSmBYd2N8ZClTNFB2N1RWX1NIb35zdHJXODsoVWt8QXZJTCEyUnw7M2NaL1tiMEV9KmdnKH4/Mjd0fGg0L34+UlRMUDx9MXZzMi88MnAuSl18fTJVOVQwPWEjL3xQJFgoY1F8NEJ+OCNSKDdyLlFLQyUs'@;
put 'KmBqd1AoTlsoaEM2NmZ9XzFXQH09XkpjKV1fQipzXlNfZTAscWZtfjU5RU84P0t2PXw7dSRzQjxFNzl7d2w/OXxLcjhoL19SKXMqI1E0SD9vMVdGTHNXTGBqVlJoTU81dEZQPFsqenZydWojcygrNU9CZHhtMio1IU5JKSVtdko8NDVSPClIKWZzMVYlcSU6SzNoJlo+Yl5nVT1xRT5GViEpeHY1'@;
put 'UVovI09tJC58b0hfST1KMDZZS25vIjhGd1RTTltaa19TMVlNW2IoZy5FJndwRTJlLmRbRiNiPSw5NV4uZXwlL0RrbStkRD4uXlZQRihffVI4fiVacndsNit5JiF3cj50O2chKml+eyJSNFFYLmkhVT1rYUY0OW8hLihpUjYyYEo8aiE0LFM7bkBrIipRUDZLZzRId2gzbGtWcSQyNUBtOzxYKF5y'@;
put 'Si5iW1YoajtVandYeCNCay5eMCZzJG5vK2Zub0xnPyN2KjJVXWYmcD07VWdaOHg1KzNbZjxmVT5rRTQyWDZbZjFnTDglYjMkYVtbWyVSfitiMntUUF9nNmU3TjoobEozTChyO2xsPzxiWyNrdzY2PDBJQy9iWzRtL2VTcGVJRWoxLmdoJHYlPCYhOUA4N2ptczt+OFk1fmY6cHs4OCxHbCQzem9x'@;
put 'PGglVihqcHFwIVUzbWU5Njk5MFRhS3BoZik/OyVwPUtrNDJWNW48Ml0jNmU4aX1sJHdDZlNGZVo4YGZia3FbOyFCPnEqeCMkaTo4eXAsPCUjI2w9Om13KlE/InFwPzFYPUVdPkBgXjw6Nz1BVlNVYV43b3k8RyhsMUZtWD0qUyNYeDFtMnEybDJ7cGp7Sl5yXl0hPCpUPmpGYSglbyEuKCVZe0pe'@;
put 'O2VMOjNdQ3IybG44b2phLGE7KjxYMk9gY3t2JkV7UXtsO3AkcClHZW44JXEqUXowNTBtOCQjamU3QCV7U2hndUdbcihlREdRLiNNNmQsVm1zcl88YTkhVUVRNVl4MEw8Qj4uYmhxKXs5d2MlYWs3MkgpS0NnJi4jTltrO3lVTGcyaykldzJFMillYShzSSwocipHOHZJMS5ndUdbOEJdO3xQJTYq'@;
put 'Miw4aF1sbEhxIzIobFNwfiN6bEwoI2wvZVYkT2d8P3s4fDw4QiRwbFNmY3FEJDF2QlBbZUQ/bCxxYzFsXUsqQyFWPGlbaCF2bFNabiZ0MURfTDthO1ltWzwxc014PGQpbG5xbTJzRUIjYntZLjNsRUx+bmY4ZWgrcHdsZCRhUnY4NV5yOzFgWS4yUWg6ZUQ0NjZiOGNCcU1bJiFnfHxoUnJyYWo4'@;
put 'UFMiaHpsdXYudk88KT04QnE7cjxkLnUyUHFWRzlHLGZVVUtUeVBDMUZCNT5HMTIuejJpM08kVGxhVXwoOjBtXkVwQl4wZk05PHI/dF98L0UhNDZFaShBcyZvUzxsaVFUKzNyNk1icUQsTj82W21vYCtmVGVgZ1JmbS54ZX0jRzlfZiYjNVh1VGo+TyNvOV5mTjYrdyVdN2h4XWR9Z1A9O1coPkB9'@;
put 'aDQuSD91SmV7OTRbdGRVZW5YOD07cSRPciJhajhrajspOyUkSFElKCtqM1M7PHEhUl1nJCxIPE1LR3RQXWElPzZ5O1pVJjdtMWpjK2g2aSQsb1opfDo5SHtGdGRVYV59ZSMsKnk9U3FmZ2s2V2xFKGk/LkJnNnBISkc7NG06I0ZyVyg3UXcualZpLnFle3B7PV1bbDFASHBta1FKPUMyVVtQM11y'@;
put 'SmtXSFg/NWpZVElwbSl+MDsleDt4UyFIVmd+KGE6Vj1TVF9JIjBMaUkpenYqKXkxeDFlbyEuUWhNYlgpNllZeEcuJk4yaVp2KWpEZmwvWVlIIU1zMmxVMnR1S0M5N3Y2PjNSI043ZSpuL0NNYUx8fE4ufVNVJSpRN3srOSFoKlAmZTZuZyFjaFVeNWpmb1h4VWVDMVM4UjZyZVlpOiVqMWBEbSNF'@;
put 'U0Z2cSV3PEJwdDpKblUmb1lWIVIxYERfYFoydmFGU007PjY6dzM2WWEuI2xQL2okX2g4YDxqYlUxRGVIUz1bP2c+PWJKRD0haHxHbXZyIWU5Ll18JDdjTzNvP05hX0hxb25gLCMkcGk8bzojUzhFdWFwfCNKRlglZWYuKC4ibCxHUFslKXJuVzJ6OE8qPWh9b24xTmd4WD0sfFdnbFokQDspXXAz'@;
put 'fShAMm9vSXk7dHQxMS46USNpTkVlUmcqbV1UIXslVEgyLC42S0tYNj0sdWwqZSE9aThIczhIWyt2KjYpbWo7Q0NQe0hsJlFmYWw4YEcocylBck03MS43LiF6YmU7XmsmUWxNWzovJVV0SVhjN2dDOWohQjFtZXBuV21HUTcyUnJXdmMuLyVTfUEmWHM8SHMyM3tnZlNtPyZOZEVSZTZPZDhOR3Q8'@;
put 'LH5RSXtMXk47MWA4ZW0zeS5qVitjMEUuNjxybjpRYS84MW86OG1WfUJkLiExbTNgXnZoeTx4eDZSdyw+QHM7bGJCTVEldSxQMVBGNjcxLm9BeHsxZiRSaiFaZyozWy5jfSJvLDp8OCkyd3BQVXk3JjIkYXEkcDgoJXdsLnFvW2ozem1KbmtdK3FebXUqTlAvcW4xSmR1VDUwUFs+cVY7RFZDaHVU'@;
put 'Um1TbkprMjs5T1NrNDJ8XzAmfUp5PGsuX19GXlluXm1WLlZufG9iPislbiZxcDVeV2dxcGgxTjtHIzlpaFYmLEVzaWxPIyFvZiR3ZWlUPzxffSY4dUBYZE8zM3tBI05ySz1EYjlnVHt8Y3ZFISNIMk9rbjJlfSJnV2dWc2lsJmpzMkcjQlJEO1d9YVtae1E2TkltMmwyRE9AbCw6WDhsODJVSUZJ'@;
put 'Siw8QjtRNiUwXTx6JkUuOyM/ZWdSfFgyOCFCKyhIWE9WUVk2azIyRm1WSlpxXUNAYkxiQTxzaVIvPiJlTTBpPiYjI2VrcTluKitRIXRsUGVvdWxoNi8wLmwhekc4ZS5DUXR7am1ZaHFld1RVOzNHNjJASDVMSDk+VUQuR1M4ZDEpLkdIOl83TSErLygjb2BJbStkOTklMiJ3Ul1NOzJmaT9VYmoh'@;
put 'MDV+ZlU7diUmLE9faFR3M246a2JHO0wkWW0sOlBfYHBNOz4mdUNMPHM4ZVs3OWM+TXIvMGJOPDtaKGwxSmtIcSZweSw4LFcxXm1BOTgyQjgzPWIzajZqPktbfDgyc0VQcmVpW3w4NHpGUyVlU3NOVS9jVC4wXUZRLiMwJkczdkBMfCQjbDVvMis9SFA7OkE2bTNZWFtPTig4ZzdvSShmZmJvSms/'@;
put 'QHEyPGxVPlF5KlBJcXttWWRyQGh7KV1iJCRiYTFtVk1bbV1oJWFraC48bEl5a1ZNW1ddSzN6b25WJiwmQFBhLFEhO19JeildODpVY15aVW0uczJ6b3E8Vmx4PGVoKj82JWlwLks/LCJsL1FuJC9JfkJxO15tYWJ+bDh7IlFPIT8lITchb2VRTClfQDk5WX1mL1Y8YyhwcDxqXT0rb1t0JHx5L011'@;
put 'USRHO1E7NGZxMyUzaDZOO2tiMSZjPT98ei4+dH1oMS5FZ0l5eChOM2dYXWhMPE9zK29CXi5qfH1eO2FIZzgiPFpIMi9WV1BlS3wmPntdVj15YFkuQztmZEh2aTltODhgPnE8ezx8SlMuPzhFWyExTzdUMW1uVjl7OD1GVyIjd1BGcng7YTlHOyNPWjtGbUwoV0tHdEJrZm1lUEtJLFFvVEQ+Ulth'@;
put 'KDhleCYhVUtoeDxyOjBmaFtRc0QqN29TPEh7MWxxMn0lQmVrVmZbMypGbXhmNjkyTWtWfCFOa1o4OC4oaSJqTSV5YGo/Q3IlLnZlKSM5LEJxX14hJXczPUZLaTdwYk5+bjYuWH12eEcxSW1KKFQ7Wig9Nl96eTtEVmkuPDIoOWxQWm5Qaz13U3BxMDg2SHEkMj9AXzVYRj58QDIyLD5AczsxPGY6'@;
put 'ek5KPCNwXWZ0aV5SRnJFR2FVaDdlaW9bZ2Y1cG4qZ0V2MjEyYUMueWBQR1MzODU9eVBXQHYyJGZOW298O2xkZEg8R2swMkJrbF44SV80QTxCVFVKLlA7b2U+eSVnSC9zL2UjLGliVVpxcCpQNzJpYD4wZS5DZW0zMVlZMypqR2RxKnV2P2VnW0h+ZyZ8MFRWOTlmOClgQWUqOz5VV0NwezI4MyNI'@;
put 'ZCRsZzNefUVxajgubSFnOGBoJk5ucTxrcXM6JTMwdno4TChZRUQ0OSZZayNLYH10VClscztdQF1neDA9UzRgTWVoa1RVNVk1MFE9VGw6OzlPaCwmc0leI2AiLHdwcV5RKj5IVl1yXjlgIix2bGF4MmZQLnReImpDO2JKLFFqNk1bbEZmdClHNi52MnlwJmtRfmUuMUs8O3EkeGV1PyJqPD09U2xd'@;
put 'Nm06OGMsUypbZkQ7I2x+OC5wN2hSW2A/cnB6ezpRfFl9Izw2TyNOU3hVe298bUM7W0hzMTRocn4+PGJbKCtaM2xJL3FuPEVdTjtrMjQjbFBXZ1YuQCl2OSIkX2YjfEg5X20xXVUhIzIkdS8obip3NiZVNz5tYD09KmJocTkmQHVOOFM8aGtjW29qYjhdVVkzIWc8dzI9Sko5OmJbWjgmLl1sQ2tx'@;
put 'Vjxrbio4UXdtQTlbXlVdUiNYJD5TUm0kSyxkRyMhaW8qRiNOaz5mYDxoO01yOjIveyhsLnE0NS8yJTZ4XUVyQ1B4TU02PGRWLjAyPF5teDFQaCwjbCsjOyVtMTkmSlQjOEc7LiNfXldGKiZ8OHF9PjxzN1swajJXKGJ7Knpgd01UMV04UTJgcCokYTcyMGxdPXZOKT1yZUFoUC5KcmFwOjw7amsz'@;
put 'STk/JVQ7VGx3Zk9fI3ZRMy5xOS5dZktuZ3A+ZDJvTTtzJCspVWF3Iz8lPV8qemRfSmZMZXNUM0tkLlRTOGRlMTpwe3chaF54JDpIUXptazJHXjJdLzhGQCw4ZWQ6UXptazJUMnI5ajUkLGghb1t+OEgpNVRGdyZ8V1FbbndQSTxhKCtTS15OOU5yQlhLcCUjRFY3OXE7ZyxnXUw7UWUpI2hyants'@;
put 'O3AkZX1CYmNeem1bPHc3cGU5JklwKHBfJjAyTjorOHFgPFFYNnJsSi47cSZpYntYcDBWSCMpOSEudjZiSmJVTXNubUZxS1tjbjtRem0hOGBQUGs4Y1t1N11DcGIsajJoPG5kO2pdPSRRcjY8enloTD1VJG5tdWZgPCZxQmZ4I0JreC5aXk1lay46X3M3MS5JJiFIa2xPI3U5SGsrejRmKmdNZTZt'@;
put 'N2FZcGs6d3BmVWdrWjhbKV9tI1VpLnttWjoybEQ+IzYlMn5TTGd3MyE2MGx1dm4mSTNLOHg1ISk9ZlIpe3ViW0hdNiplU2p7JCNzOy5eakZRZEg4eDw7Nml0JTx7VG0ye1JkLmd8PjwwZm5pY1tqbT88Vzh8bXNoZzNyMEI+JiFxJEVkYDZYUVFlJSZTfVR7ZDU8fHpsd3xIPVFyLjkvRjwjbTR7'@;
put 'dzI9R3FsODpVfWw6OH0jUCUvZzBVX3IuI18mWjgjMnEzQm56aD5VOCUvMD18KGwwI2MxKWklJiFVQCVWJDtxSzw7Olc4OC5JJlFwIiQhaFF+WyNreWw7aj95JXtLeTxRckRYXThmJGM+bUolXTRhITl4bFYuaVFNZGtWZTdHM2lwL0pzZClsTWVmYzdnM0tdPDJgdTAwPThvfW48MkZuO3AjJWhr'@;
put 'LiNdZn46YVUyN3l4cj5iaFpUSiQlcFElOmd9RTtRMFR9bG9eI2BfNW9wPW9icGg6aS5QayYlam1ZaFpUWDZFVHFmOTljMXouajgpbV5GIXp5aDYpND1+Zjt7MjhSW2khfSVCZXpobHI0SGtWNzlFKDYlPmRLPCojVyxSVWJVSCMoLnNsREM0NmUuTT1JPDNQUFNmNyFiTTtOcm4mRGVJSk05eDx8'@;
put 'e0g9eC4jJT82PiMjaXomT20scUlbdjZ8e1tBMml6JCEuVW4qUFI8aGswZnlURFEiSnEwLDgqZ286VjxfX01UN1NZLlpUZ05GKlFyRUoyI3w4YGZ2JCxLI2AmIVc4fG18WVNwOlEkbE8zOiNUaGw7YVUlYXxTPy5pKGE+UDM1bC5hOEpmWCVlIm4zMn05MjdCJmoue20kbC9lemVnJWdkay5aVFEx'@;
put 'VG03cGYlVWZoa1c4RmQuPSRhUik3I11WejdxO2h9Rl47ZVpUI0BhJXQkQVsuZjR2VFV2Szw7aX0qeGtWKFVuOFA9eWA9TndsdEByaGJ7cz09TkwzIzJCcVNQPigvUDU+dTl1ZU07LDhwb2QkQTo5Jl84e3dEZTEmQDs1QHAsbjJzJWVoMy5adDpJcmhnMyt3RUpuOGUuWmc5OVsreFRkZ3NyKD9q'@;
put 'Mm0xMV0rJXczTXIjMjEpKSZSOCZieiYqS2Vvei4yLnoyYzNIPUZtTCg1aE8jLix6Mj99RC5rLG4uVFQ9e1VtQGZJdiQsQmE5ZV1wM1NVbCxxLDIlM1QuMiN2Tj5AWFl7Jj06WW1XPT1fSjNDVDltOTtMKCZgbzp6PFt3RD49TkwzImM/Ozk5ZFtuLkhrayo8ZHpoVUN1OXY7ZnlfR3piMmBdNnwk'@;
put 'YHNiLkpwP3RPI2U3SjpddEd0ejZLbnVUX3p2MThgQFtqM31CVVV2byQzUzNULjU+Wm4uKTxtKT53VWhbcUVNZDowdW9VXThvUTo0RFhyRFtZbSxOaisqQnRPeTZbTk9WW0BiXiw2fWg2TyIifWVBLjREb284ezdgflFiazdjPkcwLmRbKi8vVVZddDFlUHhUTD5RW1RTYXgpLENWMipSODJeM1Bb'@;
put 'aGlUPStHXkJfQjlDYjl7QTJPIzxbZWgrWXgmUj51c286eFB4aCgqXiEuMiMkQlAjNiVgViUrOFRbJmBiMHdUVzhxOnBlVl1yKGA8SFE/aUUyNmJjcSUseWJhM0hyVF0vQiwvYHM1PmEwKHEpPipsTihweD5SZ3kpLGUlezhUW2FrU3A2RWJbN15MZXs/dlRgfTp8S2ZRZGBqWC5aVXFQPGdvW119'@;
put 'UXBISjZeeCV8OCUsbX0wako9UEhIV34mQWVMJElaIk9RbEZiRWdyZSplWDosbCUwMmBjN3wmQl8lMnx9KzlSNHR7P0NVLHhVQ1AkNmNoWFNxOS5TX2xpPGxATy49XitzR2JpOGx9Oz00XVsrRDlTXzI4S1czLlo+OkdHYmttTDRJVFJtaGY2I3lecipWbjFdTjRLVChVU2hbPCtwIWIyP2IufVNa'@;
put 'U0lXT2IxOng/YWIqYD0sZSxAZk1pL2VYI31eLD0sJUBdWn0ufG9bTVhZO3hbIj1iXTBvK2dONCRsXXxvW34mSXBMPFguOjQyYDBoaFcuYGJrKyM2WX1uaSgmc1ckOjlRcjkvVSRHL2UsJDNBNUg0KHNiaDhgTzQjQ0wuaG9wczdoUWtPVVh2WmxIcSoyL15mZDdtPiNSbi5TMFZuSzQhTWtLO1Yl'@;
put 'RFY8fGdeOCVtPElxNy5XOztbTjMkO0RiYl9DUGleRyhFfmIzUzE5T0NVcCVDMiFvR2RBflksY3srL0w4N2olaX1QJXtDUDA9JWglOHFmaC5QfVksWlpfcmFbWSw1VGdsaThaM0pSRD03QDheQ1A0aCNgeHNsJEtQQXFbKklyLiNEVng3JT9lOWw4YS4/c2EleyhrJmxmS1JEO3JsRndzNGRuJUhy'@;
put 'MkNQeD5vOFo4JD98JkZQb08vI0NZdzlWdmlwVWxtWi9lOnxHczI1MGA1alB9cClGVHJScGpVNT4zZ2l5VV9yYnhwZkEpd0BySXl8Z0lMUiZAXSU+PVksISZYRkxzP3NUbSxxczpLOE49MGY9NkRlVWxSW09yaF18bmI+OjlXb3hlXz1ockBQbDJ6JG1tX2FeaDspeD44UTQyLzQxb1ckTDk6P1hk'@;
put 'KDRwUVYuVztlb0prOiM2cEw5PGVkfW05NHshfFdGbCZ2MCQzazIzU0pqSjgwb0prSVo7JXw4W103ZzJedGxLOiJnTnIxdS9xYnFSZlE4YmVDMiRQNzJuMm0zTnJfclYudTtdWWpeIyVdSV8hJC59Zlk1OTd2XW86aiElLiQlVyQoak0lcCRKKFI4bV5NO3EkcGUzMHE7YiRwOFd9Vig/ZWZrMGZ3'@;
put 'VFU7JTpVYl8wdEA3eEI+IzZIRTY7UlJ2dFZFc2dlNX5mJCNLUU5yN2M1Nm9wVHAiJG1wfiwlajQzcFhCKiFVIzN3NlM7SC83XzVjTzMxWWVkfXBISWQuK2pROUI+Tl97OHhhMGBue11faWhAfipRXnYoaGB5YWwjSzAuaEtgYDVZLFNWXXJebTlAaWkzTztzPXFtZCRmYHY2Uzs+VWdiYDY0I0oj'@;
put 'ZGI9VDY2ZD1ddzd7eF0xLk5yeDB7b11mXSNwLHhdLzglMm0xM1NKbSZfOz19JmsyO0VDZjxrNG00MTNzeyh9fSlTSmZNNl9SN1M4aypiYTNBOnA6Qn1NTm4/bk1nKWw2bjNCOnlVS3BVXSFTPE4/NjZiYTN5VUtwMDYiNXh7XnpgemB6ZDsiNXdbIlViOn1WXmVeRztOUGZtWF5lS3A2fWQzXnRM'@;
put 'OHBlMWh9SF1lbWR6YmJpKWJodzwsRztqJSouK3gjT0Y0Il5QdmolKWJpezReQ2tBNCJeZnZqJSouJltVPTlndTNeJUplVDhrZWVwY1tQMzdvSmZwOlkoRiNzfSZJQHZJXnBNZylxYlV4TmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2Iy'@;
put 'TmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6TmwwU2IyTmIxNmI6Tmww'@;
put 'U2IyTmIxNmI6TmwwU2IyWUtyUjBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjE2YjpObDBTYjJOYjVTYjJOYmdGYF1lW0BidDpObDBTTFdxM05iXXxzSXJXe3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVb'@;
put 'QS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wq'@;
put 'YHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3xBMEMwLGB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIzfVZ7clt8KmB1W0EvIjN9VntyW3wqYHVbQS8iM31We3JbfCpgdVtBLyIz'@;
put 'fVZ7clt8KmB1W0Evd2A2JkwvIjN9VmVeVT17cnRESUhRT2djJDRqWCx1eERJSFFPZ2MkNGpYLHVgfEhIIWsucUo6fWZBM25gUS4vN2dWUVhhWk5PZ2MkNGpYLHV4RElIUU9nYyQ0algsdXhESUhRT2djJDRqWCx1eERJSFFPZ2MkNGpYLHV4RElIUU9nYyQ0algsdXhESUhRT2djJDRqWCx1eERJ'@;
put 'SFFPZ2MoIzpWLlhwY3d0JihbPnFuVnx3fixYZywsZ2R6fXUofFFNWU1zRFNlWzpae1RxNkJpXU1ySyZlaypEMTN9WWJQRkpmLEFsZlRlVzcrOihbPiNGflVQTFgjRShVa1tOJnx8N2w/TClePmt5ekZGYD99LEtzdihYRkp3RSV8fmIrTnApZ1k7TzhjTXYxKW9gU0llN1k2JFAyYyV3b0d2eCtP'@;
put 'L2RhaUl0aFk7TzJjMyIpSHEiWkQjKDdkUjVsSHlPImE4XyFjSHJXRV8xb0VCeTJCXkBuRSRaeX11bDp8dlc0QSRFQ2lBVDApeVdmNlBEIyh8L24kOSgsN3FZYEEqem5MeURySyksP0kyY3tzRl0uWjdzSjZQfDw5RCg3cykxdj55RlNdZl8qPnRQblhSYypCejFmRDNfSTBRU1toWX1iMTglWTZA'@;
put 'UDhqUVB+TGJYT2Y5JW5CeDFWV2RCcW5hQzgoVUVBaUVIa0E2Rmh0QT99eGFWYmphK3JGSG92WjFaRWMvdmRNQitiRUBWMEkzRkJ5VmVFSENFLj9edCFobnJfKEd0IyI3Qi4kZFNfMChhQUlFKHFCUk0zN3wzQWRbLD8yNyVGZipERSlzUHB0O0M/emRFT2svaERhPSx9QT1+MkRvKGRLcSIiRS5m'@;
put 'S1NyLn5OLCMzKyMqKURgd0RCY0RLP2tIKUAwSVZFYEoqMDRTbmFlKX41bWhfUShuPWgpMF9Rc2NuKVR0NnlSOypiVUUkVU5DOHFUYSJBQVB8N3soZ1kuLmpuRl5LQyMoam4xdz9Cd1dXY0VkNSg9eSFyUGNRQVlESyJZMFlMVkAxNlcwZ2oicyg3fUEqRVY5PGFucXZEbE5WQj5+UXwxQ25fUXxm'@;
put 'Xz5JNH1RfGVuNnJWZWxCdl9sSW1Ca0FhRWFCN3M5cy5oZF85PmE/VnxkLHZEZD0xY2YoN3NWXSxNYjdifiUoJWFEYVFMYFYoQ0U2YDJ0YF1WUU88O3pFZkgwWUxjN2NrOCVpNSZ0QHcmcz1URXFfeil5KSp+dF1UNCxPUXFCfU9USjRkS0wvL19LYnB+OTdhWk42W0smeyIsdXNZY0kvQCNRZFN+'@;
put 'fXdpKEdsayVde1BZM35wWlJ8ciNUaz5zcFoxeTYpOW0pXzIod35VInl5YiVbS3I/dkl3c08ieXl1WXpraXxENmooaEtbWCUuZG0jfTJuUShuS24xR3RIbyVfaVg/cyNVVTRhXW9GJV9DYmRzJVtlV0hITS8lX1siZH4+ND45aXc3TSF7c3h0czZXMXlzTy5WMClfUl98W2l4Rmw0OW12fi8/aigl'@;
put 'NXw0MWBodWlXc0VhK19rWlp+MzxFQ3tbK3YqMlUoLG1eZDVNNGZ7P2VUQl8xPjFDdX56cyJmWzgzIklYSF9VQEAkcER6X0s/REFzKT8leCFgZ19fYUVBWWYpfG1LQyp9UVsrM0VMPWNZbVZhLF5OLkw6d0E3d3xlS0IhfDN1N1ArMUlPKnlvPiEqTl1vMzVrSlVoIUNrJklBZ1JCNlhrMFUoRCRk'@;
put 'JSpyN11OTCZMUF1IL3ciTmV0XklpZ2xKZU8pKmJ7MTRZRFJYNCNyYHRVN1hbO05IPVImJGpSUXpnSWFdeCEpPUcuTnQhMVMsVVhCKFNNLEhYeDh0WDc6Om9keVo8b3FuJGkpT3YuQX06d0V3UzJSWCZSfDpGakF5eEFuWGdSajB6d30kfUV9TCxFVzooIz5kT0IoQmR4ITFTLFZVaEwyQkwweTFu'@;
put 'cCpWSDM4Oi93Ik5SUnIqPHRYQiRjUnkhPVZbIlEvdyJOWGYoVCVGRVU7bkt1bnA4QCl0X2ZQUH4zV3UrNTUmcHQzKCF0MUo5Y3hVemBxJVU/bCoiR2IvfmBkSSJGPXlKL3ZXKzwlOjlgc2k+R1FUaHpze29PVW0sPi8vNFoseWh7T0tHKSYleC89LC49RzJeRXNJckhUfGh0aW9aREVGUy9bUU1w'@;
put 'S2JEWno2MiElTkdOJGx1UmoibFkuaGBAW21hbT1dbUVEemNdKG1rZitfaC89LGo8M0x1aFJHJSUiYGs8Q0ppUSY3dENpYnw/NEFnUnVqWGtBcypZdEI3U2Yhe0EzN3N2eG5IXnFJbSpBMENSImBDSkl6X3FqXl9DWGE8VCx8WipYLzBIImJKWEAvTGs4WThqejZfR2BoS35fV21Pc0tuI3JgUHUk'@;
put 'TXxdfnw/TVY4fXZYPH1tblhIIkldcDFjSlJKdWgpL1csc2VheFNlVXBAUT5Qb1NiQmBWRCE/PkNpVEJGfDNrZztxNXNWb00xOmwqdTpfayFXbUxnR2ZMaTIiSk10MSZhRzhpKiw0OzNjZXtKa0dIRFMxS21uXi9gbThZS3RNR2RmaTVuXV4rIjR0aSJZPGxibm55UzpdZnBzJDhlNGsjcmAoUzdY'@;
put 'Wzt7b2NPJXU4RClXUThRcDtkI09iQyFrYEA0Qm1aWztSSFhqej1gRWZxJHo+a2VreDdLRDNIImJMVn1bP1UiNF81VlpbdiRuY102N2o5Lih2NSExdEcmR3VoWkd3SkJPc2h1ek19NDg/WHJmbiNyYDp0cjRqTW5qWCtnPn18biFwaTNIImJIWGAvenNQIyp8OGk0I0R6e1FWVFNUUDglQFhQfjNe'@;
put 'Py81TX4xSjF2IWRmLD86U1sxSkFfKjg/cjN4YVhfSXRIfDlVMTF2JlNqblJBIXRvbiRpdXc0S2YhSGY6PjghZD9PV1QrODx0UDk/aWVgVnBfIlZZdTI0Pk1+YGVLVigmanBPOndBN3ozImA8TEYuNWojUC8oYl1aaW5IQFc/diRpKU9dYUFzcVpFRTtQd0BCOn02WDE1N3FPLylUUH4zZlpAL2l2'@;
put 'YE5+MksiRUt6Jn1YKzROVG8uPGFrVCFac0o2SShZOkNXbWw9dyk1XUZsI2ZVLFhTQihRcXtJTTc/TV8+Pzh+On4iaV5IQkhTImBrKHBhT1c1NG1IcExSezhJWWF+MGU6fmBrKEtWPDhoLC5jWnt7LF9EZnRmIjRqcUhBe2sod3UzVz9tcyNvTm1NTixtVS9baWVdT1ZdLzVAPTBNYCx+TyFTT3Bq'@;
put 'cVpkL21QdDRqJVMiYCZKYXZ6Vyg0KTQlITQlNWBrI2laPDgvZF9HcVopJXl0fGk7KX5bWDU3dC5oXXFDbyZhfEtvWls7IWRqejVAc2BBfVV5IjFeViosbE89UlZjVnBUfDE8enFmK1lRP0UkND1rc0t1Q2Jpe3AsQlQmMWRnME1vNkFWYW5sfFs/VWReaTUsSyJESmIrUjJRbXgidDNAaDQhMVNv'@;
put 'MkU3SEA+fSI7Rn1SUHBPPkRHYUcyWzdBVyxnWCVXV3dIZFJSW01VM2oqPE47dD1pVGwsayJ5VCxOeFNUPXRaUkA7eE9iJEw6KHdrNXBOakx3SSo1NXFNPzRIe0NjSWg0alNBc0taa0dAZVFPIXh1X0lMM2xMOmhZJVQvZTlZS15lL0c1Qz5ybDhyfk1dYWFrMkU6I0k0eys7N0tgTHhyclZqcEkh'@;
put 'W2drejljMC5mK3U4aEI/KSNOIyExMGkkR3VobEdNd350L1dqe3pRfFQmLmxMQDIhMTBpM3hlR15kS21CWSNiOC5nUm01XnFrTXlFOzFoeCpIbFk2QndRYiJheURMPGtuNmIxN1hbOz41aDFPQiU0Sj1ELkNddCRjOy4keXckaURsdnVBczZaRVkuUlZiWUlKS203TGtnez1sUUYzN1c2Rnp+Iyln'@;
put 'Lmwyb0o3MnFac0xMW345LzxhQFA6KmZYRmchVUlVOmtMT2w4JVZSRztvY3FhazxBWz5xTGkibkVFfGcpYlBqKVVrbjYyME5COWo2NGAyTnI3U1pgM3hVMGk2cW44NDRZcTd1VEFNKWx0YE8udW5aXit1TnVwTkEjKTpBYiU0N2NHO0FZe14lTm1lXU9ad0pIe0RpJHxifldNXzNafEx0aUtZaHp+'@;
put 'I1pSenhKTzk8bUU8PGkmRyNGLlgwM1I4LDcoRyU+RzBPWVVyPEAuWEhuIjY4L2RzR0AsPWA9dW4yKHYucV8qXW8ySzUqNU96UTl+WmRlJkJBQipla2tpJVRGO0FMdGtPK2EmZmQuTzJ1KTpsKkZkK2sheVQsXSswZDg8S1NkQDpKWnAzNHVHWkM5Yz9aemcyKnEueH0qejlOdXRaamIqaFpITTtt'@;
put 'W0ZPRTdrfWk8OTlmNDcuTV95c3taUmVjPn1ENXdhKlRIPj9MZTZyUnspKnF3TF4sUEErMktRQ3E/bWBoVkdaalglNDhCVDdsSXxTcStOXWJmbysvPGFYS18/PGc7RmpaJVhITWpQQnkiInhXc00pJHxCdkRwZmppXlR2M29SSnQiSDtVJVdBXXcheylYREJzTy92VSRsbi8kWy53NGp8a3NjM3As'@;
put 'LkJOL0I2YXViNjRyIyVNZCpSejJPemBgNT0sWmcpWklTbmFgMiJgN09uIWxGZnRsNEAyIlkvXTQuamU3anoxMUZXNiNVJGZTXmczTWNZa3xQTlBxMFI6NGd3Q1FNZCNnKTl7fCNEUW9UMGJPRGNeZ0VqYikoemI3bHVeenZXY1ZjRFI/Mjh9TikxKUp4WiZSIz51VHZFa2dSN3VSSiJsPHU+Pm4y'@;
put 'JiJ2cl9KZys0dyF5L0ZLVERFOD1QRFgpd3J6Yyh0azs9VGMqcSJhaXBMKHkhUl5fMXB8Kj9hI0d1aDFHbSxoKlJpe0ZJdUJANDNPJTgpam4kaTl8aVNeUmFJbEpFZ0BpY0ldLGpiYnxYWndvbndZcUthdlpnVlRbW0FCP2dJWjNHSiU/Ik0hKDhFVj40PHszdlNjLjxhWEtodyo5Y0Q5allBUmNA'@;
put 'KTZhOSZxZDJqNm1IMCExdVUyRXVoTWQ2UzdhNGt0KXVCbThNaEcwcFJ3KDxheUo7eSo5Y0RMeVhJMUc8NixlYlZsKn5vYUMmPH1HMVpCJEw7YGBBR20mKHIuKFZEK3QuRVEzYX02UEBzUyVjK0Jea0Iic0MldlU9b01Ae0lFJXZVdz0kP0BwbXx9Zz1WdSRxeT9Fa2crYT1JMWNPayR+TyxwR3g6'@;
put 'RnsmLHVaaihDTHNXOmclXyFEc35CYVhgd2QvNzAuZDJZXW5VJFQxIVZ+aXxzLD5za3koaHt+cH4weiZzW0ZXTHt+MFV5T1EhSVIxZ25YKnNKLjtjVH53JW4oW3hWZV9jJmFvSCpjbFBxVHNHSHAxX0JNZWwkK1N6U1F7b11tUjU7NENOVkBaT01wQ3UkfSZpKToqfVFaIld8UnZdKnYjeVs0QVJo'@;
put 'WiZKZGthUEY7TCNgcFNhPW9aPDQkfj9IcCJ0Nyt0WmF1XVJaSj1ub2tgWXRmVV8iTzFIdnlPXSpmIlJ1XWZsMHYmfCRnUnAzTTd3PUZXJCFjQWBrI10rV0hHYzl1LmRtdSRgfXgmSnp1RFRjYjY6aiNkO2FHKk0ze2ZdL0gpYVskRlFxJXRJOG5uLGBVJkp+aTo3YXdKJFI7UzlXJV9FLD5UcD1p'@;
put 'IkNAc1FgbjlwYFUpZCZYXmJdZmxMaXxod3Reb2ZqPG57OTtXXW0+Uzt5LmAveEVzPnVqYHdFd2c6PSxUblVmVCVjKWdlfnZ6dGtsMjs9WFRFQTg2eygrWzlib01OLCJNU3BBWnFDX0EsWDMlWkU3UFU6bUhXNzUrbWgoX1dLIS84TE0heSZrRCQlO1NSbUx6VTI+RVZGTDdAVC9pVXA+UFdDPSo5'@;
put 'ZkY2bTN7XjhNYl1wVGFFYXZAT2oxNEBkN3ZpYWRsJT94L3dfUWI3OEZLRlJ6ZHBtMDRlcFRPJHkkeFVPR3VGYHE0bTdLSWZzUnt4IXlSMGZ6KCNMa2lkLjVjNn1pWjQvd0ZvWDc6c3wsIms4eUglMyVDZGFjJUZbaTAvQXwvUEhJfXcmSmBhXnpOMHMvM3lERXE5W1UkNFFxe2JSVCJCP289Nkww'@;
put 'UHZeVyE0OVQvISF0dU9mO1k/Q0RqZlBmMWZoXyFTNjFHUlhiXiFNYlMzWTQoTEx9Zl9UJGZCQltLUVRMUFc3Yl5rSH5hNUpVKXdQKVlPVk9dSyMoRUhoXShFJS5FVjRCKGdgRVdNa3xtRzI3JkguVS98Oi9AWzw4TiZXOCZnK3NZWlE3Yl5TJHxEdXZseklsJjduLiNNJDFeKyg9ZkEwVXA6RkFL'@;
put 'N2g2dk19YG1oLlkuajlKM2RAb0A6fSo2PWFmc2NgZ1hmMnw9bjJ6SX5OQWFOLExXaTF3O1UmV3FhdEF4flMufkNxd11EInI8UD46TUxbek59aypMLC8yR3okO00+Im1FW2hCZV15LHJudUJNYj1nPlcjPGJPV2QsOiF6VENuREJOfTp2SztSOVkiKmNZZ25UZno/NTtzYyZQZ1k8JCNvQjkjaHFm'@;
put 'W0BObVFdalorSzR3SDA9WWhfbGpbNGxfb1hAcyxkcE9BXWBJK3MqQGVCIXpLVkw5V0V7eSV4aF4kPn5XWUV2WFU0ZnIrYSQudSFiJnh+WWFKe1R5ckslZnpQVWdqInZxaF9De1l6TUEhNSZFT1opcnFZOmw+OWFPaUMsIyowVEIqaWZqIjkxNG1JXW9SUlVAfDd5THx0KzVCIWZEayh1ej9TNU9w'@;
put 'dDJvPiskdTQsR2lGfjx6QDdVVX53bSNIWlRqfHFNK099c04xQj1xPi44RV9bOmxsZF9nPVEpZChdfVF7b1N8YzRQR0hPWmNVeCZdXUNddywvfkw/Mkd3MTMmN0VoIllvdC9vZzpdeFdxOCJkd3o1UXFleFpCaC9ZJC5KN3NNTTxSTmZKJntxX2BMbi5wT3x5OmxjfCEkN0VoOklSWU52Q14jRlQs'@;
put 'PypLS3djSiZrZz44fVc5JXY1bzVEP1UsbHtId2Q0cDZ4cW9wW0FBKWdEZk1RfURZPjEvPndQKEopZz9bQ3hFbHl+aEQjX3BCL2tiWXoiWkR4eGM0en5tdzlCK3BKa0tYKk5JfUw1cm1rKCkhI0coTkNbNENLNXpVeipqZitzdWprRyYqekptYC5vZFEkY202eH54RDJ4O0tZWTQsdXZvaT4pTlFH'@;
put 'fllIJEU/RDxvNjp9LmVdXmRVSCtzaFl2cGQqc3VbbyE8anY0R1hiYDoiZnFkTnBfPFQ1SjA3NHNpOyMiOi9pcEF8RjMyI1lgZU9pQyRBWiE4Vzt7RTVfZ2ZCSCtGblpbKFt7VlpoX2ZWK0pXQTpkMlQ/aDFLSy9bMCtzZjY8TmhqcEI2XnFMOE81TzcmeX5YeDVTTTNqaVFJc0J+RSpCP0dXN3hL'@;
put 'VFE5YXlRRF1mLz5HbUk1P1J7fGdTVUxqKkJpU1ZKcHg/OFF6ZHtjaEMsJkRmLF1vYHVYQipocWE4XWg6eixvckxaTjUzITY1P2QkVCxzNzZeJkRiQnBzJiJFMHwjR0J+K3N8WW5ad25Fd3MrWjVCWGlsOV0jQHZEZmR3fE5IVm8xQmhTcVhPe2tweDclOjx1dCVjP3hNOWBjTVhjcjhwYS4kX1Fi'@;
put 'cDhOcnVIaVhLM2N+XVVKcGhnTDtvJDUrPnpYaTtrNyZIYU90YyFHeEg6eCJbbU87REwmI2h7fFhKUmJ+NG5GcUxtJXcucUlGflM1TjJeWFRvOj1lN3JZQVNbQiY3YnMjUDZhIi4lJSFyazZjTCVRbTdfeHFPKVc8T2k6I3lRdF5UNDQ3JSNoK2Z5VGJmdlpqPj96RmhxeT95LHNvRHFneFZpS1Bp'@;
put 'MXhxKkhpKnY/eDVgIU9YfEt5b0MxKD1vRz1YN2k3PjYiW2xSKWt9digzKU0vRDo6UjBgSGZSSDxCWUE5N0Z8eSZUdzhXZiJTeUA6eSlZXyM/KE82RXszJUFEZFpqc0I3Wz1GWFdHMChtOFdwVkslWnVWbkx5d3VfQkR4UWdlIztpeERYMWRSbyUve0YpfEl+T2M1Y3QhWUpgUDhJRUhrTD9veitK'@;
put 'Tz81P3gpQHhCUFliSyJ4KVc5Wi5wbHg/eEl1ZDgvPyxIe0Z4cTw0XTEyKT94IVYsdk1BcVoxdFB6Mz8jKyFjIm5UUUJadXE/Yn1VMDA1WFs1ank/eDY0aFBvXWRDN0dKekw/bnYzel1tcEpiLyZKfk9lSjI1JFJlZkQ/cFReQnRDOiUuYjpYKUMzezMoPU1dbTE9L1QqSHxgeUAwQyU6L1JFbmBZ'@;
put 'MStaUl5bL1k3RyN0Zjw1Wz8hP3gvdzZkalo9OTooYFEuWXVHV0twVDZZMkJHT1JYdi9HPi5MT294Mi46UUhUeik0JlF6cF4pRCFuTlZPO1d7KmpPYyouL2o6QGZ0SjFNJnh1ZXNSPWgkT3pIeC8/eVpPUzkwMFN0P3g4Ul1QS3B7RG5wUkA1W1Q/fSw/eFhgQC4mNzBOZjJBYmlgTnZScHBUPUR9'@;
put 'b28sSzFReyVRS0FRK09vOz0uUV0lc04rMU8wZHh6RDk6UEw0XVUydDxSIXs1S3dqL0NGXUJHcUpmdCFuU2h0WXlGdFQ/ME9mOnpEUzo/eERqSTkyIV1XbG8rTkxmcEBSMnBUQ2NHX1p0TG16QCpVXlcvb09ZNiVjdltoaTliIz9tQmc1Kis+NGc/OilyZ01bP1s+YD1ZdG1IMl9ZTGQ3P2s0ajoh'@;
put 'VmNgdjgrYXhbdCRffmZEby96L2R7Lko6TGs9SzRLV0pqQyY7SUloISxFIndMfUpeNyNeY0N7JCN1cSJqWGNKTTdiX1ElW0xiOGxQdnVXb0JKdGBiRyspU0shdm02OG97OGxvO2UjS3xOamQwKDo9SSNlWlFeLClWYWkvTkZ9eU5RU0hKcnY/JUE8Q2wrWVJmTFR8alc5MXFWYG5qPytUZEpQNHE/'@;
put 'bmxMKDBTdj5DSWpRKyxOKkl6U3Qjb3gjK3haRmI2fWZ8TG98KSJ0U3VNa2pUeD1KYGcrbDR9PGlMS1pUQjc7alR4PXhkbjRNbzZ6L3p6MG1TX1AyTypCQk0jSUpHflFxPlF3JlplWD94KkZ0PDlafEA7SVRqOnlZWEBDOkJtaEtvNWlSP3F6KCJdMmNVU1dUQ1FqbytodH41RnAiWDJRYExFcTls'@;
put 'YTl0Om9qNnkpSXswa0UxUi9NNFhSdkA4aWwrIT15QHpKSUphbzhHNl9hUUBzTGJPcjZqNylJcX0iKzREM08wUWNlcW0hIkp3TUJ1NFgzPTEudHJ5ejMjTWcqe1hzYVBYayR3ZyFNIXpJdXFHfEdXa2ZHdD9XemBXKEIoaV5OKlp4OGtab3RLRC5LfEclZG18I3l8TT9BfVR8R14sbHFOZ0A4Rm4i'@;
put 'YDsxUW8vMzpXWXkxOV1hJE0wK3ZhdGJVZS9MaUBhby95KExXUG95PiF6YkxhUndqK2t6OFpZQ0VQflJxZEB5RnUrNl52W1dXQW9lQHo8I3ZURjNnQDhJa1JJaV1aNlFlUnxCISttWmB2MEJRS3ppd09Yd2FhX3VYUHBdRzMrK3tMaVg6MCRFY1hXSEZVLzM3THhwOEl4ejJhdXdZMDImY1kyezxN'@;
put 'c2pEPDRQTzAxZHBEL1JMRGRvVHZGVUk6WW9walR3bENfUFNnVChseE1VVGoocTdkVkZRK3o5NDNERiNQWlJxTFtZVUc9MV0mPUg7VmhEKCtsK3dXV0FBYkZNXlYlRHBoKEJhdDgmTiUhITpNQ0J+US5ESG4iW3FHOytnWmtDSltza1ZIaXEzaX5aPWJzR3kyWXU9MTV8L1o8K21NQmFsTkJ3KkZn'@;
put 'PC5JJitpTmNaSSgjTHxhQzZbTW0xQDg9ZGQpRHoqWjNqK1dIMmdFU3B2YlRAWVZNYnomcT55Z3pAW00jWSNPVUQoN21mO1psTjYxdWlLK1N5VXZ+a3F4JlIlUn1NajB7ekVNak8qTSEhZXgpTSFpbE5Cd1RMS3UuSSxuYTBEVztPZFVCWVBlRU0yWGg8TmAjeVFgI3khdHg1O2ppd14sZzx6P0hY'@;
put 'akZDRmNpU0NkZiZSaVY/Ty5DO0tgM3A9NHFaamoqLHRyTHhZT20xfClSa0BqPCYhWkAmZE5gTV1rc1s1ZlZ3YlFtVUNaViMhLk0/TUxhaEQmWkxhMVYkYjUzQXNDeTk1Sk9wTXhZOG4+TSUheXphYXhYQ1FMcGpHdXp1TkNiREp8UW00fkovO3ZiKCo6MSYhcisqTHdGaVZ1eCVkNDhgJDlpT05U'@;
put 'WTpFUFomX19NdFlyS2hEaDxpR3Y/cHQ+ajVPM01uUUBLfDN3LnlnXzFLVVJAUFhiQkBtT20wfGNAVHpyWSUzcjBRdnssaEUjSVdvOCtBeHtaLzNXU1NDRjNQYDMrVU1sMDpIMkRDUSJZL31Kb3IrK2AjUChpTCpHJTJnNHF2ejNNQmFwcjBnWGxPJWtmOD9ZdyNNbE0qPHdnX1Y+NXArKU1NZFVh'@;
put 'ZH15cVhLP3B3Z00lcyshSXpnK2pJZVRefClQTFNJfXglJTduUF45TXVMQE5wUXlnUFBwZ2haXkxjTmJ3Tk4lamVlRTZmKmpYMmNUN2tjMjBDeVY6PGNoal5XS3dOTndtJSo7MT1JP19BKmd4U1h+UHhPcGE5VUNAIThpemlqaG87TTtZQXlXOnI3R2FCWHx4MiZUZiopTCp9LyN5cE1HUF5TMGYv'@;
put 'JS99RixKWEZ2byFhby4/ISooKm11OFpoM1VJYFUoXiQkfTVmMDx6VTFVSW9lRkUrQ3RmPF1eLD5jaEB9eVk3REwmVkwqOTV+eSR1O3p1Q0lVMVJHTmM/KnNSKE9tPV9FKk96T0NZVF1hLzFyemFMS1hYQlpbL31sKy95LkxSSFc6Ill5PU1vSU42Pzo9ODRNYSxtSCU8K2FjdVlVYUZnKlo6YmYs'@;
put 'Vno/ZmlPdTU3fDlaWHp0MG8xNTUmR1REXzVXVlJFOVV6YSheenwleX53XUwueVpOJX5QXiFJMmlndz9XbldddFRMMnBkPDpfQSopRCFNa0BbTCx1QkpsY0xsRCtDKyJJPyZTajBMR1hTTS93WltfLD9iTkd4T1FKXkl4T1N6QiVDaW4sODhtK1l6eVpzZTBHdnZbVlskemkkKkpNOnZxV2JhP2RM'@;
put 'VXN6ek06YnxkXU0xUVo5ekBMT1B7cFIwZiJJISolciFaSGFZeXtDPSN+QGBjLitSTj0+alNOZl52P1cueVN5Lkx9RX47aUAieVpNRHhJUXg5Um9UMCJMa1pdZ19jZHhgJH5qQlpZK21YV0tTaiUqND8yajwrUlouXlQ+JFIrUnxNJExzSEI6P01dK0JYeXc4UWcyOVBoaj1Nak1wUTc/cz0oISN5'@;
put 'XndpYjRhcVlEM3Q3bGp2KyF6THpGPV9hOHd1Qyw2X2Nteio1S3V4ViwrQ2FoTmViInc2SU5bY1hfYXZqbkBbeXVYcFFOLFFvST5Zd0QsY3FxST54dVVvTyg1MkdGSyhybSt0d3NaSCsmRyw2RDMrX2FPLGs6OSZHQ3AxPWlacSptYCEhbysoWllhKEJ9eWliT0EpUH5ndCVeLCFSKitEMGR0PEJq'@;
put 'fE8ldXwzPyt6YUxrZHdVSjt9QEolJFIqK1t6OXQ1fDt9RXNtfi99KCE9K1EyYiZzei41cUx1WCs1QEd7S0tVR04yeml6aHhjfU5wKVBrQFFqcUx8TWVCSFQ8LG0rV3cyWjdLN0syISh5ckdlWCJvK3UmK1BjOEMuZVUwNTE5KHR4dXl9ZGJyRkdzWCMvNzssckdhMmp+Kz1YY0MuZWtFMXxkQFd6'@;
put 'UE9QYyJOZ0Qpejxjcz9EekhPY0JrSy8lUF42UmhqIWo1TyU1MExvWns0Y31XMEIse00heiJ5VTQvNVpaJCNFZ2Bjb3oxNCtDb2pjWC5yPmFdTTl6WixXTS8yZzBrWXIqfGpGTlt5WH1JbSZScHptdW0mXS9yKy9MdmVKOTFWPlIxSHZ2ODhXamljLDZDOlZ2UF4yfHN8Z3cye3FOIzgzIWgweEw9'@;
put 'YT5JdSZeLHtrNnxaakp6KVgrST1JLiVEeXM9VGYpIUxLVnY6SVFqSXpGa1dSMkxBWFc0MFkmQCg3UUBPYSpiQ012ZStFM3E2Ul5NNjEwdz9QXiZTXkBJaVI0eiNhbGI1SCZWbnguSWhAW1pUdHlnYC9EM1lAI01wN3dWJVl7L1hveUA5Kml4KklUfTVSLnk+TXVid0dNeVQoe1tVal55akxdYi8z'@;
put 'KkY0PjtyTzxWbyM/IyowTG1iSUsyej9IZ3tyI2ZmWWBvX0leWzFXb3hAeDB4TTVhNWJsY1BeMXFwel96ZzEhU0RDemlES0pgb0w6TmhmIy9AODo0N1ZOaGc8Y2p7eTlZYTlTeUs0akssVXpwLCwjK0h6ZE8qT01KVVJGaipsbGoiYF42SGp5LF16UElIYUFzKDdoTmx1Mj9KYUh4Jk8pZlFvXWIx'@;
put 'TilMWlFPPkUzalpMYV9haGozQnJ6ajRLTUUybWFEVFA8cno3ejxJJX5MKnF6YmpAWl9hNm94R2RHamR5Z3FHUzBEdXNLfmtuImpdPjFKLHpPJDFqTE5JbEBeTk5hbnRmL20yN2x4elAwZXpwaC9yXlZSb1UwaDQ0RTQsQHRISDlrZ1dRV0tvWWpnTC5kUHhSUis2RVViIVlhPnRGMzFGdiYsXjNS'@;
put 'MGkoYzhhb2VXJX1rPUlQJVElTU5mb2Ard1drYVdJSkwhOCQhI1JETls+c25jeSxta3FAXzN6I3lDZSRVSkxnZjNxPCsuK2FAaitddkRDKENtfklUa0BdM2VPWSglfkhUamowejFkc3VGVlZ2bnpYMCtNN1E5VVdnclQwajk0LHhxT0QsT04oTVtJQn1iXTtsdiZfQDcxcXord2FObFQ+NDRndiZb'@;
put 'VnJGLHI0STVqPDMuTVVQdiYvMWlaYHZQZV9LQVc/ZFJLY2YqfXNnVXdzdU1nfkpra3xUWX0wUClfP3lCeHFIM0VsTDBZNG8sUCRDLl8zO1BHNFlIViV2e21VXytVcD12MTY/dioud01WKlRqUkUqTUd2YyF3e21LSWZ4JDFdbnRMZ0xmRlREZ3MkTX5ffF9NP00pTHQlUkBpd2tNJG0yL2J8MnFx'@;
put 'O3lGQnxFWUs8KkBhViUqMWkkR2hWcXlfS1dmITFMdllQK1dxYmRFVjdKO1QpY2I/Li57SkFGOTVBKiUqZj9YdF5DIWdGRlZVeXsxUFZqRmlCKUN7InxiKl13I0FEWUk4S0suLjwsKW53KDVCRWRiVGdJd1EzclghQipBeDpYR3dZZ3JgMThYUi4/VXdHajQqRWA0TE5Na3UuUVVrVUV2LlBmNj9e'@;
put 'dkBMTDUiYVFXcT1rWnZ0dygpW2kjT1dXcW1zO25GaTF0VkNXXkVIVEVaYmkkKG1bMlJXKFReSjB4a2sxJWo2bFhrT05ANUBPaG15UjZZVk9GNFgzdG5Qb05XUG5jaCsmTW5jfCkmejUwVE94SGt2OWwhaiwhbk8kISx5PkdaYXkhYndRTkVlblBnV104SWVnJC5yMm1nJEpASnp0WUcuI2IoN3Vi'@;
put 'MnFMYGR5aDxTY21MV1BoYXkhSGpedzBwaisxKGhAU1YydH04cW0qVlArY3lDbCl0QXMoN3BeezFtITooLEdAeGBsTTtyTnN3JVNSYFlFVypQTzJqUCx9VzJBJkkrTXkrMFckQzdWYlZRam1MeUwrSTdWUUNXanwpMlgzdG5Palk+NEY9a2N3bSQ4ZGZyQGdMM014SDRSZzwoMzlOQyxhTlExOGc2'@;
put 'b0UpTVUxanNMZCRVakI/SFhvYUElKXlsNDxyX2ZAP2F3b05YODchV2o5QEZ5SjdpO2k8Siw/Kyg1WTxQT29OOStTY0BhdVJrdmJWZ2p8TVFbVkBzTnthWzFebk8qb1hxcVAscnRQeE9lbmhySnBydEpKby95Y3o1SnhKVjl5QCg/K3gqdzRNM014SFdaRmJIUFArNGVQbXhWcFpWVHxHSiQ5OCgh'@;
put 'c3oyYGVDK0VoPGsrW3ZNTllUSiQ5OFRtKyteWldZXk5RbWA2KVcldnBKUCtjeTNLKH1PZW5oJkV6eU1OeEguUUdLLyEjUlY5bHw2WEkwQ1I6ckdLQUw2KDZMQWI6Y0Q6I1lTTCMpRFV8RSxZV0ZhdlRGYXZSRi4qQCkxImtpOG5taUU/LCk6NG1XRXsrcmsybGt0TnwrOT97c0dTc0d+W057WFFT'@;
put 'TCJ8NXlhP1thVStifV53JnBHQyp6MlNbL29+RGdQTHFYKlk/MSxtPDZiSGMrPXlkUkBzd2tLWj8xLG1FS2lGXWpMJTV3QVdaV1FNSGJjViFmZWhEZihESG13T1VPY0ZWcENCZ2NXQE8qXjFpbFVLKnNPNFF5TG42YWtFczg3YSZSKjp8WDVROE9fPHJwJnMidUF0XntfMjF0UHIiYVBkRTYmI2FB'@;
put 'KnouZEBjaEtjKlZgQG1obDhzSTgwUmM3OmkiazV3QVdAdGg2fiomSHRuM2N7T2o4Ql9RTUhhMnVNS0hYJklxYV9Ya0E5RixYd1MuQVhDbDtuZiF5W3dLQzdEV350YUFWYCZheSYuI0pBcUc8LnJOVixgekhRX3ZhYzUwYjJmUiMoSH5SYmFOMDZNQ01HbDVMVUsiNHhXLik/bzZDXz5fRVEhL0kv'@;
put 'TFEvYnZWa3A7ZC5pZTtbI3laRXhobmBTSXwkXiM1RXROWnc9NV9KfXgiKk5oPkBfVm5SQCleVmFFQnkxKUVNOGxgUkxhe0wkLHpwKUhkP11+OSZUOSNHcyYyK0ldN0l8QjFETDxBTFhpJGBzc1hMbV1MJmE0bSUjI2xCfT47QSU/VTpBJF41M0J5MkBpS1VIbXRWK0s+RD85TTdGfkBEPykqSH02'@;
put 'ZXl7IV5RW3RLN3J0T1AwSzV8elVXO0ZRbFJHM1Y5ezZmRHpVeHttOUt+Kl8hfkQ2NUEyUUx+ck5aJHFFPFJbSSphbH46cCl6fEZBbDhqYmAuYXY2PXdEI11uZm1EUE0qSEV1NE8zIXF2bmdkNHFoODc5LHBoODwkR3N+RSx3OEtiU25kenF+IWBCWS9bREFpcz9dRmhYbEYzO3ApJThtNDdkezlY'@;
put 'clRfXzd+O2M9MENnNDdkezlFSkEpcEladFhDaUxCOG5edzNpPj48OE5ESnNBWlRYYkYpZlo6eDgyQTE5TGosSyVSUEd1QWZLJDpBZlpVUHBHZCphdTtoYEJKUkUsYms3KTw+Y2RaTUFRN3lTbyhDLiFoRFI4eFd8T3RIe0dlY2hyKSkkTDFBPS5+MTU1U3pIVnZVZ2teU2tJUiMmXTNufEIkLkJq'@;
put 'JkJhOC5QOXUuUEQ8NiMoQGQ9aG9ONjI1dGRPenhdSVYqYmg4aUJpRS86XXJKVkVDZ2tmPm4zU3AiTXxVNHA9ckA7JS4qWEdoXmoseEZaczorN2M+Tjg3e0UmYTtDO2VPVCFGREY7PkhCci9HdyQlYHUma0RXUXx+Qyw2bHw+Vm9JOllyVjIyNFYhfX0+clByI0RMTGU0MyZ+fkVuTVspby9HdyRF'@;
put 'PVQqRW5oeStsUVdxV3BpSG9ELzQxWWByW3o4VldsVlImM0NoJWJJV2pTJiwmXXhwMyZuYH1LXXpiX35LZmdSKyNtcmtkcXNOeHE/NXQ+UDV+VVdyVHE/a18lbUNUa1JXbTsoKT9qaUhda280NDopakMjVCJeQ0o9VFUqci5gXlN8LHh7JXAkdGV3VG9IQU97U3BpLnwoNnlGTC5pfEZGZn0lfmRt'@;
put 'W0p+SEg+TXNEYFFufFY9QDFoPF87I0p0VD5oPmNlRThvOi5AMipURkpDVkZBeERuSyN7ZU5HaHxeMlQjOWI3JE5lSGJ8LiIkaH1BTzMkYlU7Ni52eVRxVWhxe1ksU1VsNCNtciRCOndwaTtzTWs9VGNwQiJJd0tBKnpjQH5bdz9FOkFyeCZrWSJPckU5YVplcTxPZW5rOm9ZPlspbWBTVUJ3bXZh'@;
put 'e0NzM049PXEmJWNrWGBTNjEzbD9waWRVV0FfM0k2eSI9Jj14XyxsUyMvN1I8QH1wKix2TkNlcVpsMTFTYDVJaUYrYiRlVXcrck1AazFWIUVwfmcoe2tjPilpOGxLVF47KlRXTVFrI1FoQ1UjeFhjW3Urck1AfDAmbkFpe0pWWiJhL2I1Wkw8YEB1ZXElWW8mZV0pSGRWUShqZkteT3E/OHxqYXlG'@;
put 'SywzSW1zRWNdKVhgJW1KTClHfUV3R0kxLHZsQGAyU1cuTXE/Mnx1SnlGKF9uZ1NXSU10aWV0RUNgSEpMaD8+VGtzK1ddKUlgVFExRjNfR15SVz5LLmMoTSgyfHtWcEM6VWt2WGBacn1KPklMUXkmbit9Xm4sdiI/Rm1SV1EpJm58QzliXm9AKEBWOy8+PjNJN3Zka3NVaSoxOEY5bmBALmx4Jm5+'@;
put 'SitnS1twVDdFYDJ4TXl8VyttKFVSKX1Ofl0pMX1xYC52S3xhO20/L0BsfWE7L3ZRflEoeEZMX2N4MkY/d09MRT4vLkpfcT9faUE4Jk0hMW9tbT9lS29UQEhNOVpucHJjPU8zbGU0cHpmZGVsa3plNXBwaXF8QmdeKXR9VDoudmB7VTklbmJ1eXJWOjQxUkwzPS5iXilvfVEoLnZCdWhze21uZzBM'@;
put 'UVoiYWkueFo0MURWMEMxJT9WSGBtKktmaHMhT10pbH1lNXhGWSo0MWJXe1NyNCxGZjFvalFSQnJnb0xNXVBATHk9dEBMN2dWYXsuZVFXcUdwaVN+TlosdiV7K0hJTH52VVIjcndnN19WUnpnKmEpS3VnIm5GeH5HSGByeSVLXSklX15ASExwdlYhIX1LUyx2eU4yRmVebmd2RV9oaWl0Nz1idFZX'@;
put 'XSg9VCFXZ2p+UVY0P1NtPVRKK2g0PXtzIWkhSyNNbUdQaj5dNkBsMXMqLyhfOX0+K10pYn1bdy52WT9uZ1BXN0RxP2N8MFhQV0Bwb1doWz5UW2hxP2hLXkpJfHpGW106LFhxWld9OE92TEEsVnZlKWU9QC5iKmVwWUsxTFV+XyQ3T0paW146PzZCJlhFdTduP1J9MiRCQzomO0VvMk1MOHUmbmhX'@;
put 'TERwaUp+JTldKUZSOW1RPjEoKUNwaWF8Z1R4RkgpaHFkcyxEXSlLdERuVXR2dns9NlFlI0RpTUwjdFYhNX1jOF0pTX1KSXhGJihiI01NNCNfMERKVXsrSEhMUHRWIXdzQS4oX2dXaU8oI11DdlJ0MW4kRXhKPmg+YTpbeiF2QXw2ZW9IUFVNdE57WmUvdjt9ayxwaSRzQmAzSTlyW3xhI0xIKTJd'@;
put 'fV0sXmRyZi90M2RvMypeMGJuSjF0JUtTLjU+ZW9LIXUod35JYGpVIn5EfjU2TS9bfkd7bzEpPnZ+Sjp3ZHtNMCtaVjVLWD1UbXYwSXBSSHs4OVpXTDB2IzZwLEJrQmpJWUgvPSpuXU1SPzZKa3d8X3hCIn5zQX1jWnxgX3gySWp4InN1fjQvRk97c29VW34+bzduNn4+YCp1VzQ+fjhbSkN+c319'@;
put 'ZjRdfGRXI31UWi5MIjF0MUd6XyFaRipPPClDdS5MXWNCM05gXywiIXNjTnxgc1t8LlZAOSl+b1tJYH5+YH1xMz18elViRUwpLG8oaHJ+Xl9iP04/bndeMXppRzVjSUtGVFMiRjxXS2hkfGVKM05aSnROX0JEOm1eakZDOEpfO2csXTdnK2R5KlBhQjIzSHFVQExpRjRCQ3p0Tjl1OzU9PjN+VSpv'@;
put 'MV9zbHw6I1dMPn5ofU5HV0wjfnM/dFdyKCN9NnYwWz1+I19zSiF7LEkoaHx+Zn03ez5qV0wifmV8MXt2KWBlIXU6dkEiQH4rfiRgXilWTC9+dHtraCo+XX5VfVE5ezt8fkp+OXVpbiJzOH1lOyloclc4fXx9NEYpPmV+TClaU2B+WHE2fS50SzdydEd+WXQ0Rj1+PWYvdnx+SU5fLF5qS1lOWj4p'@;
put 'Pld5dm8/a1NHbXB+PixeKXIvfTsocXk6WXIwPFlyLDs+cEM2NEZAfm9vOks6JEpxfDtFVjR9bzFTfCspcWM5aHZuS0g8SHghRjJWSkVeUGE2SzRDRn5vPWFsejhGSSNrNGQkblF5UzMvP3ZUeDAyazpLbXFLSzFbOyNzX3NKSFhkU3cuZSN7ZlAubX1WXmhwdjVZKFJZcUBQWDM4RWp+JltFTDkr'@;
put 'NX5zNm5DMWh+QTEjfDZQbz1DdDV0QUYrWDh+aSxmZ2s/fUNpPk8zSnwuNkA5P35jb3FLVnxYND9+YmA7Y1ZMbn5DLElWe341fHdOVWBoYXNXbX4lK1dMaz8oWz1+V0wvZ2JKYkt6U0pyMlMyVU1BS31JW0BkXX1sbihzOTUvUXZTTjJ5YH0xJnNHOix2WTJMY3lgXzEmc0xsJSx5YDwxJnMyU3E/'@;
put 'JXxvKjRGbnw4dCN+U2NKL3d3bkk8X34iI35RYzJ5d3dROW58Z3Qhc1BjJWhlKkBkJn01V2ZXSE9WTFoqd2QmfXpXPXNHT24xOT94NiN+b0hjWj1fTDAjfnRPX2U+X0FkZyhsKjhaaX4mOU5gUm9mfEt0V2U8aFtkIk9XT3hWXTE5Tip6T1hfL3p3cEB5X35gdHVBYkkrIVpeRV95MWt2TDJGcVdW'@;
put 'Qkp9PEo7SEBaQlVDe0oiQWJIWnNaTDhWZSp3fH5lLHAxfkB2THVodTFvanY9ImB2Rz9qV1VTWWxQXSI2fX10SkNtSXB0Rn51RDYiYE09VEF7SCJBYkErOVolImtCO2hUYExjYiJgTU1tImBGIkFic0N4WjI3UWRTSHl+QGQxKFZgV1FBcn0odE4oKT41WXRFQmw3bklYN2t+Lz4oeVBERHRwQT1o'@;
put 'NHFEZ0J+JVdUU1pTcXgweSgsYUtXNE9ZX1chTWdvIk5HMkIieFZ7fkB0aFpLUylCLFJ1IzVZdj4xVGpiWC5KPmdpPSlhVCJ7ZytrPklVeXJWeWZ+W1cyMDlbT3pRREQ3Yj8zdlVCPXNnQ1paNy90Zkg9c2RFeipXeTBuR18kUW08TlssdUNqT1Y0Kj83SzRTfE5UYyp6bnhCcFZxcXMsNk9oNXVU'@;
put 'byl0ISslR0AiNVkibWV5e1tvdzR+eE5OT3x2ImI5SGxYO2haR3omOS45TlFuYktfWDdyUDlZSFshIWxVe1ordzFiSHg0cmwmSzN2XmVPbTlYclZTSF58LkskcXNWK2lAfikkZVQxaClUOkpQX2BLOWtNTGlrbS52RHErIkNuOnpVe3x7NFBtN05XflY+TChJdk9PYipOKixJSXt2S3wpTHVxMCk+'@;
put 'cSptcnY+VnFzM2Z+akc6Jjo1Y1FjQEVrdmQheDhKRjNkUm9FSGBPLEooa0JsbnRXLDhUdWgkeHclR0M7QnhqU0paZCVEelhIWTRfajhIXWdwciVHJDBFYU18KGdnPkd0OX4kV2N+KF9vfSo+fWVRdkJxKCMreGxgW35FZXdLYWM0Vyl1dkw8bE0mUF1zTkElNyR9PkpAcD57Pi5GdlJ7NTx+UDpk'@;
put 'fTEhaCk0d0x3Myl+biRHN3NWW2ReSUwlfl94THFeYCVORnJVImpVcXt2SzZgVlpMR1RMIThDfEFqVXBiZGV+Ql1WbldXXXk9OFNgUUZ4fDFMU3E1NW03Qkh7eDVDb1k/OnNIfT5TSEdzei5aTDtQal1zSjQ0OE03MG9nJThNIWBnKkJXWkFOKFMwKFVNWUBOW35yRSZbKE5PYHReVU02Q2hLQigw'@;
put 'SCwsQF5fYXlxeiQ+JXpdRWNCNmhsYiFsY1luNVV8TCshcn43dyhndF9YYVtPImQhRT53biImJXUkS0UlTUNqQklMPzE2VDFIRE5rUzAofWxrfHQuIzomTS9HL3wvLH1ydlt4QUIicXtba1lWY0d8Q2ErU05mJHtSK3J4aHhzV1JWbiZ0N2IzU3RdQ0hjfE9BNUdFei5CSi9Pfl0lIXFMamNjVUxK'@;
put 'YkkxTFk/OndiV3x4QEAmR1FwdCltbjJSekdkPjN7OSZybWE8eTpCOVA7TlhRQEZxVnk0RGFDbSQwPTkqQTElcD56bE07VEY1e1A3ZDtOai4wSWM6eFlJfHJMRjksdn1BY057NkZYaUdFQ255PDFgVFYwUj54XUlgN0R5RyZHYU1ZJX1CIjhzdCtrRXt4YygpTjU/cy4paH45TygyYUVwK35ATkp7'@;
put 'UlV8Ky5eWDRWcURoMWpzNnB+XVhiW1Z5e29JMFFmREFFd2lUczojIT0oTkx9ZT9WbE4hUmNZWzllZTxHQkI+YGE2NGIsLFlfMT8yYUt7TkYoMFsqUDQ9blI8dn12KWlFbi5ZZSMjRE5vfVZJZHIjZD5QNk0vMHNjWjBra0RXNElDMmFQIWNRUmIxJH0xUi5hMXRyc2VvfEUxMUhiK3VkXyk3dmVu'@;
put 'XTU/QnlzfFgxIkwrWD95N2gkfW0ueDFQRDE2bj9EMFQoTVtmIzJucT1SSztgNU1bKUFzTlg6fn5gNFRPUHRjPUkodnJjSH43eEdYL1l1diVoOkw0V1M9azojN3s/UmY+Sl9LZXo0RS57eVB2TlQ8VDI4YU9KKVhYVDxwKzYyP3I3KXNhUlVufmtIMHZaKXlQUXRadT1iXzJhfl5zY2pzMzxlPjo6'@;
put 'LDtlajpaLmRHW352ajFHdUZgfFNSSEJ5WE5RV3s+IUdHc2hhMTQ5anVzcihRdXx9fD9ddDBjLGs5bVBWL2ojbEtAY3hbfGsyO3x+Mix+T0BedkJxInZGRlZFaHNNP1VfSSxDK0lNYFtATiRgOFQ+dDFUcCkjc3VnTXw4QmUwK09jPXtMYmByV00qYFomRlFXJldeQV9QO3RGUDJmOzMmQk03TXNe'@;
put 'NWVfQzxQMGUhfUIqPmE2NV5Od3BGWUNYQz5pb2dYX3VlWU9AVFIpalVRKWNOc3BrdjNCaml0UyFec2NPST1vNnted11RJiY0Yi8sKk4iX3ZLTWRjWS8pKn5SS0NaZkU1d2BXWV88K1loaCZrLGhLdmB3fEpzKnYmRENPblJVW3l6UmN7VTJ+TzVuPihuOkZrMyl+cjlvQTx3UjJJYSE9Z30sKD98'@;
put 'aUt5Z0w9TiFbdDRBISUjQzZ4I0woekxzVUZze3hiJmBCQ1ljQX5HSUVgQUlTLjgkYz1FdWZ2Z1d3UWp5SnopLmAmV0o5PWBHWHludzx1WV8lMTJFeEx0VkA5YD4qR0spX1crWT4mTFlNS0ZNSG5dKVIxSyNdRklpc0ZXYHV2N3JvLywlW0ZIImtJPEM/dHI+YW9HVTBAb2x6Wz14bn0jZSV9U3Uh'@;
put 'fjU0VW5CcjhZWzdWP1ZPbF9IQzlfSTx5fjVKUFRybkB4bHBIO1A9OTRbQU1DbnpsNmBKbSNFMz4kN0h5UlgvekQle2FaeiVSWkluXWVRV1p5USQxbT5eZmdkN2BgLCZMenAsTmYqPjV3amsmL1RXfEJnajhgSyZwe3UvTjd4M2l5WFtpOUx8XXZAUVF6bXJGX1o9cn0peHJJXkUlRXRtSmIyO1FR'@;
put 'eyQpR19+eW43c2NTK1hDKHF8QkB9JlM3QCRnY0ZBVEVFM1Nuak4pPG0idnxYWT8mMjtKaCZSPm9zcF58c1Qpb1tWMzRQNDMoeDN0MFdPIjdBQEtIY2l7dnMhOUpUKmEvd080fjJ4U0c9WGlANER+ayE1ejt4KmheeXRQRDskbGFfPlZvVVQrOzRyOWM0eDwvXnYvMixFamJBTGM8SXd6fGhOZ3VJ'@;
put 'SEVZJlhmRWsqP08wfURtQSRPWmN+XVhFS2dKJkA2SFpKeGNVK2R+P0lXXz9fbEhEQm4oKFVSTktJdzlLRShfYEVafGEqNWJHYTpoUjlRcXtkTTZZMlpyRXNXIWVaVWtATzF3X3J3Kkg/Qm9meEZPXj8ldVhYX1hCTmlzP3lZX3VmXT5vPk58VFF7Jlk3PTxUelh8RTdENFs2Vk0lIWpEeV8/Lno+'@;
put 'enRNdU1PKEVjK0FAbSg4KTdReExuKHxrLiZUREo/T1pPfUUqeyZ5eDsvfCZAZE58IjU8bClsTDsxTyhfW1UjNGhbZ1k/OSpFSl5SZ206KSFXKVVtVkUvVnpOJVkvQl45a0VRO01HeCYiRjlkeEBUX3klLkU1KWhhZHwkWE90Y2lDRyM+anQuZ1ZuMkFMQz40bSk8cEQjcGFmaTJGVDF1IT94ajh4'@;
put 'M3c0XXJBYEw8cSFXdiR0OEVhNzpKbVp2REZNbityOH19QEBHJDBJSWJsfD1ReCIkUV1HJX5ZRmNnKiEjYlIiOH0pWFsmL2tTLEdHSERURUU/S3whU25GM3pMYzw+OmpoWn5hbFd6W2Q1PUcsSjhMOUZIYHQrfXIhelNEYzY+Q0pMVGAsVmMlaC4ifm12MFByWG5GQkI8YFRaWXhhcUthRnxaODVf'@;
put 'OSw6IlBRVnY0V2BTPDNAOjd2OStSTjlgOChTeWVAc1lyOHB1fCR5SGpaelcpdXwyK2J2MzJHfHVsfns/N1RqVHhqTiU0RGJzJiZzW217T3ZRP0dlUDc1P2NfbmNNQDJ8WXt5dl1yOmIjMTAzdkFtV2RsXUVuVC5vK0hrfVpZeF9gOiFHc2FhT3MoeFt0Y2BLekgidkUhS2NwdSx8QTV6aCNuVCg8'@;
put 'a2ZuXiolNjlzeDdnbjcqbE84fEBCIXNOY1M0VmQqfXU/ZX42Rjw5PH1GMiV+WTRVTHVHaDYiQD1lQH1oQTUhOHxlTFI0NUZ4WyJ9JXtGN2NbUEl5c3kwRE83UFdtIXVwenMleHpRN2tBQXsodz1zR3MjKERXeDpFXVVKdm5nRFtNTE1YXXJ3I3VwekJ6ZThRLyQ2JmEjTDFNUklSd3NPPyshdWh6'@;
put 'JEwlOT5qZCMmR25aU09CMF5fYSNfYSNMeDRfZ31PI3VZRzhSdnpRN05pNztuSk13MVpGXU8vOSpmKyF1UUdvRyY7X1IrZmhEaE1RMGp0X2FASVRLWy5aRTd6dEshJjciUE88MXtrJk1aImBUNFduTk5Gc1pZR3BfQ2I0On5KZkQvKVE2blhCa1NRdEZJaz4wKH5GMEd0YDF7T2FZQGJFLzh9fDQz'@;
put 'di5HKlBxUyE0WGpfLH5ocU5Fd2F5WkJqanl3NjpWSnl3MiVhbDFEIXVBR0R6c20uRzJXZSshdV5GZHo9anlgblI1elE3dGN9W1FwfHN2TyN1XkZPelosQjVQVFhRITRxdUA1QmRoRDhMO01mNkhEUW5mclIyRl9+fkdrZlhuK3grVClbZHdTQHRTY0w6ZWFvUndqMlcpS3ErN019dTIkXV5LNyxX'@;
put 'akM+YUBJdXd7NndbPmo+MSpSPDRIfGM2N01ne1F4fDBmWE9SQzorXmVXeHZJYDtoVkIhNG5CbjRHK3J+KiljK1l9I3NnbkNGQDk2S2hdTSwhdShGfXkkYW8qLj94O2FmLHMuODEhOH0jMlBAYnw9aTN5bUxvYmZEY0xyaWxBITRdKS9GSyJRN19bWEJ4KDI6JTphIkBRXWRCVnhHaE4oRFZZbEJm'@;
put 'RFopeml5d0psRk4mYUdHQENeQWZYKXY8UEd0UE9fW0hCeChJMCU6czBAUV46QHBKTiZhV3s/ejdGaE5tcXFHO0MhR1RWZHZQT05ESU8raHl3IVh0R2hOXyRaTSZhO25gaUoidFZ4KGZYM0M2WjNJdkIhdVRGQU1nQWZjbD9hSyE1K25FQC81KDhnWmtPQjBDYGNrSEUoelE3WGZDe3wldn4wb19Y'@;
put 'aERIS296TVZdYWhEXUo4TWA0IXV8eGJ3T3BzMXUmQVVuWiZXcDExJXJTKjMsWj5oRixGVFV2akEhNHw/PWgraGJsS3l1JnNBITRAQzk1Z1Y3WGlGLlh2fk9odSY8U1t2Xy95clVjZlhWYy81QWR8YkFzJFh0UEZOaUZtTi5rcXkzWmEjfENqelBPYnR8W1g6LEx7IixNY3ojRGNJTl92S2RSa0hV'@;
put 'TSlLJUhbSm5CfjNlSUFyKWNgVkN4T1s0YjhNPUAlYHl8ZX5SRmMreF97akhMPUw9aCo3JkR2JjExQTdYUUF7dTU+eyljJV8sdzgxYFYvYzUuTns4R0RAPCx3VnVjWStrWGVXY0s4ZHtOOWNGS1t0U1R6VkVhPkg8Q1gwJUZ8O3haOjp7WnZpT2BMN3lJe0sjKDNPS1JCc35GV0tydFNhYzRsdjtP'@;
put 'XWExWEpFTVg6aXdlTTcjI0hUdDFQdlZBQD9Hdzo6OC4jNT0/fEpsY1E4L1ZrU2dmLDo4Ul1bVyFmTHB1dVckTU0mSlRGWm1zQipra0s4fU1MSiVGU1ZqSGUrZmI8LCYofFBZZT8wPyhEUUt1LiVPNlo5I09fSSEoVypeUE9mbkJWRm9GS1NlV085fXxINmJSZ016OV1Ae3Uva2k7WW1mS0BLSEw6'@;
put 'Z3V6XUB+TypjWSt2X1g0VHt+XXF+NUF1KE5bbEdvcylrJmUxI0ZaN3k2TUNbeztffVJ0T1dWXi9qUVc7bHlrVik8NWB9fCFoOWN0TEZ8RS52SExURWJ6SU8udjBVKzdhe1gpeX5lfCkiSn56IihoYkhKQVc0UntsYWJXZnArb2ssPDVAfT5XK34yTkovNyo8NV19ImpUXSl+NG5rSV8xbiMjMi5Y'@;
put 'T35EOElMekkoaCQoZlErfGNwI3NRc0A5WHx8KWsoeihET0JOQDkifXB7TExqU1g0O0RoJG48VkElfDojVVcqcWx0cX4uRDlUZHsyYmYoOHxHYmwoYDguYHh+Kkw3TUVbSlNmVyMxKzdPdWA7fkN3Xzlhcn49RTlUPT5kZXh+Z0t6RnZXdmQwfGZBOVRXPzpIenNRMXIoXnRNSkY/c0I+fGkqKCxW'@;
put 'flNDPX40cChoSik2UGJ+bDJSTE16LmBpKChQcyg7fWR9b2U2fWldUUxTWkZ1TExJVFQpLH59dEpMem96ayl+XkJ7c298WWRpfissfUYzXUw9cVAxfDNXU1EqRlEwVzRwflZic0QhfncjdmRbXygwLn1tX1NXWT45R0BAXy9xfm5MPnN5PGtSKnQ0XWdNZ1N8fkJ9VGl2c24sJWg9KHd0fX5RdVNY'@;
put 'RV9WZXdzVi4zP3MocmBEPCloJF5UPEJ+NjcvdiEqSXtXO3d+dSsxeSJ7X1JlfnVILlFDYUd7SVtefkk4cGl8N0ROYDhuV10oVVs/fnkhbi5Ofn1CeFtYNW4uOnxPMV9zUjglYUZ9PCNJY0hLQDlGfjxIKX5XQz0ycl9dRCtza0oudmspQGRIciQvYWZUfV9ySkxKQV1YUCx+QzlgJkRlcyYrMUZW'@;
put 'a1NmcigwOiJQY3xUXz9AQn5DeXlGQ0EoaD9dYjBdfkhLXjtDd31GPj5LdkFYcVtdSkQ/LEQ+fjNHTmpXL2VEeX5PY1RXc0lGN0x0fUZsW3IwcEJ4dGBleX5DP01McFFdWG5eUzM5c25RcihbfXI5e346cylMfnNbfSN0bVFdNFN8PkRgcyFSMFshfCV1JWU7KD8/OFJwfmBodChJeyRkIn1rc1I0'@;
put 'Rzksb1RMUk9ML2x+Z298c2xAcWZlNF9uQyEoRDIlN1BnTjteZkFqV1hoa3UuNExjSWNyKX5DS2AiN2R+JmBLUFZ+em5WVzYlKGpffnFnMSF0P3R1JnxzSEMsIn5YSi92Uy9lRHF9aDRwfldtNzVCKWVqXn16WFgwaSYwMTpAYH5LZzdNMH1+JiQ+YVJwbk1MWlFsS2ZuRlg8W1NFSmBMOGZzW0JI'@;
put 'SiF+S1ssLjt8ejBrKFRib1lQTEpRXVhvfSoiZXNCWGMjXzJdYDokVUU9ZEdCNk1YQCJ2LyUpZVhlZXpUYHY4cCUvP2xHbn41Lyo+Vld9VV5IJkhIPzkha3NkL0xMIk5vMWZhfj48NTt9IkZPTG49ZUQofWdqaCg1UWV6Y2AlYXN+bS8vaUt7VHdQTEttZXphYFl4byVJcXN2Qj1MTGFOZ05BLjtN'@;
put 'PX1BelIvPVcwZGZTX3JMTGBNbzErJV8pOFozfD5yYlo4K31GamB8ayRzNWQjOzdzZEZsdTc/ZCt5RkxHakRqUF1dOFJsfj9UPn41YGlQZVdLWS92fnQ4WjB8PVNefiw+P29tfm4ucSNIfioyJkh9fThreXlmPy5GYGBhdmYoXW9lemJgWEVofmYudzlEfTJCZ1cuMEA5JnNWbX1zXX11TCZ+TVt7'@;
put 'elpXZ1cvdnhGbDVxV119WmQ9fndgfiIvfk9bb2QwNlV3Ik5Nb0N7MEgyeX4+a3hWUjV9LChtV2Z0cGRtXy9Pa1dQdDtjOn5KZCs3RnZSNGNkYTFrJXZIaF0iSDV+a2NKNGt1eithZiFoeE9TNihzc0AxITJ8bSxrQiNuUVVjKz1zSU9nVyF9Nig6MSxfSj5uLlh8Jl5bflRDcT9rfjMlTEwuNnVq'@;
put 'TX1FbnpGQjxLZnd+MWsvdk5dfWQ/fWxSUHFrK2l8dXM6bix2SF15SCl9YlA+OXZ4VVJDfkA8SkxBNiJmUE1+dUE3Z0dRWncodGQ0TEJyeXl8UkBkTVV0VmZuQltDRCpjUU9UZWlpSXZ5eDFUX1FYWWhsdFZLKyRfRGAxKCJHWlkiYGQyLHpZY2pfTGtmN1l2eTkxTTFrX0VXen4mP3I9PyNaQU4i'@;
put 'YihyXk5jZXo6NEZ7fn1GQEBkQ0B6Y0lyMUE3bFV+WzV1QHJ4TGR6Ry43RS9Mfmh7c21PQEA0Qk16TD81fTNpOTF0R2QqPEIoTkFMXWopTyZLQn1rY2J+eilCImlOImJudV8vW0NCW2AiITBCLC9CL2NOPz8rdGRZWSJgX247fFh3aXluQGkhSFJLY3F3ITEhRCZXaUZmZ2hdVG1KdVZlMD0sS1g/'@;
put 'Zig2WGlEbzMhdThaK3MwQDZNW3tIVW8/XlUjbmV6bn1QbUlMPEgjfVc9aUxpaW1HeiRPYldhRVQ7R1goa15RbjRMUXZBRGBFbXI1YjlDU2VJMWNUc1pVflo5eXkpdzkrbnxQbW0/I0AxV0F+VUNSTFUydTBaI0A5ZE9uRn4zeFtGXSZ+VlA0aFtKRzcyLzojZXxCIjZMVShNOjR5MDBiTVVASHc+'@;
put 'fFopbnNgZyM7S1NqTjp5dzAlZWA/U015dFRLRkkxRXNtL3pEJCRlVjM0dChNbyRjTmxYSF1aMDhdTWFien1pZExHW3R4PTQ8UDRQPGc/dU5lMkVwdGl5KzIuQSVYdXQhMFs9KXJvSkNweE1OVGBNU14vZ2xNTkxKY3hYfVVKaFl6djhrNSRlN2AleT9IRVkmTlB9cW9BZE9wNUVNRTVGNjpOMEsi'@;
put 'TykuRX1oZTJFSypPVjJoYyZ2LDVJQ0YlamZQYThvI0U8ME5wPSQ4KmJBbS9lMnQjb00iSUl6c1ZOIypaOkk9ITdPMG5WR1ZTODo+RihtWEdUej8jZTBbPSxNbHk5Y1o8K3dKSXBjZjI6WVhQO0ZPem0jPD5ILDdGaDQzNlpbbSppPWxZMHY8SEgxIlM2NEk2JSRLVkF2UDUqQUs+YyRNWThdaWwi'@;
put 'bU1ZQ1hXT0YqeEpEbk8ve04xLlBOW25HSD08WTRtYHxOWlh7Ti9fWEJTRj5vSWYqK3wkM0Q3OkxZcjN2T0JUei96MyE6eVdYKnlWN3FvdHklPkMkRFo0eDk3SGAxfnolcGhZJj1bb09qcllTUjtpT3s6dSJwITAzQWQ2ZyhDeWovcHp+eiUjbUQxRHJhV1ReWlEuRF08OmlAU1NQQ1d2JjJhciIp'@;
put 'K0FuenNhTjNLWj5kS0lFQyRXVVgiW3M/NXpsfGchRHk7PXw/bnc6MGk4XjU8Jn1XO0hRSEQzdihnImcyIjBEXlE2QVhBNHt7TFB1RXh0Rmd9L0hedTk1RVRKeEoiSmR3ay81emxWUlRidl9vOyJ1fVArYCRgUE9CME9Sbn5aSFgxW3JHa2Z+WXhNfW5GOl8+RCZKa3M6PjA2QzNdVzIueEpnb0d6'@;
put 'LyhBbEkpTU9LeE0vX1JjOmtDWVBAPkF3WF08WnouJCNPKWw7Rm55e2olTGhHWG42Wnh9ckxZLkY1T28+QFd0QCFPeSMjMVcrSUI0LHprODc6ZGVdaTZaQz0kdU0wVU1CTGApR1h4UjVlXy8+MiFSQktpUXZAdGBTKyF3bktBJV4rJUssSWw0JGszaHlQYjZVeThvRWNMWj09bTdxMVZ3XihxbG9O'@;
put 'VSE8fUA8TD4xTHAhcFZNNzZacjNvelVrTzU1clRPci80KG9eaSZJJUdHWHhDd3EzbUFTdjNjRG95e0hVR3Q2JSlBPlM8VEZFOGxTdl9iPkU8a31we2pAd3xRSzpvbHViZWR0SCo7IzkpZj4yX0oyY3QhcH02SWV2fGA1a1FFS285amxdXi9HSlVfVTBKeF4yNFkyKSFbP3hAITR2Y3ZpTV5WZzdG'@;
put 'YXRkOUYmSi8kUE8qOik8dGdPYVljQXNtOEx3U1s6T0xpPFskOjk/PDNKWDw9V0cjMChUTXZAXjF4S3o/UF05Xm05YFB0PFU4NlpHVFk3OGZXITgiVGBnflEyTSo7dS56dExPQ0d6OihVS2NXOmoyRjs8aWo9LyRlWj1ROWd3RDZ5RzVIJilxUFQlYT45Vl4mdE84JVtEUjVWQXVaQTpdREU/QWg8'@;
put 'Ty8wRH0vd2FMLmNZPVF0ciFwfkJfWF89eXo3WCZMSn1aRzZ6Yj9OSkF+SS9rLndXPGY8SlR+SU53V05wfGVYa2koLCNMfSY3MVloITQpNTlwSzhPQFQrYz9jaVR4alNpZFlZQjBHcTwqaThTeC81JE0rO2lhYCpodjhudWRrZnY/UF1yVUk/WVk9dkxmPyk9eWU/Y2FGQ3QiZSpnS0NreXsyOmQ0'@;
put 'OlUwZHU2RmxMcSQ9QU0ha21+TWlKOllyVDQ+Kzo7N1hrIWtTaHV8OUV4LjIoa1FJWExye19VZCFZS2hmdjIiZ3R7aCRlQ1dBa0hmXU1yVXhzPSpgWSRkOSZFc1h2T1IyMkoseXNZVTh0PCRlWkw5NDViYyNXUUAweWtxOGsodEpZRzl3amVqOHk/N1B3Uj1LRnkxMC9wLj5HVjI7P2A6MXVvdj8j'@;
put 'VyVeXjZdbnBQdzxgWVdLdzdXQEt3dTE3Pzo6SykhITUweUMkJFpmY2tjMT07NFBSc2ddV2FaPzw9YGNyei81RUl6KUFWOi4jOVN9aXlnZUNzcnBLcz4jaz5DbksxLm9LOj08NFElLzhRTjNhbWxfL3dtOFJ4eGlTcVVVblYvTGJ9OkdZcjMuVF8+NS9aPC5XbVRhKSwjekBiR1s1K01WfW1GLz13'@;
put 'bjpaS1paIVlabStNY3pzaUtCeC9rMTpSSHw9ImRvQ0M1JjRNQTZWZ29sbFYyM35zbHM4NjpKMEBpVyJFVTo9OXgkaDx5XTt0NGNIKFdxYGU2cjUxPCJ6fkU8NipdekBgcDkkP3hrcSh4fUlAb1spdHEpazxlTnBtSHlFXUFkd2REKz1eSWFmUjQ/eEZ8TjdgOX52RFp4Jmg0W3wwZld6SVdeWC8o'@;
put 'N2NUUk9QLi9PVkw3NStuV0Qifmtdb0I+c3YyYFtHJko4KDNXaEdVXkxaSVBjLDBIaTtjQEYvM3UkTT44dkNlazB1Jjk9a05UMnE2Nm1wQkBoeF40QFcpNGlNcDx5ZC9oJF0iWUlJK0NtZFZmUkdnVH5rU3kxWz1iR2V+WHspcTZpTXMkWVlqNHolXTIiKjY8V0JULmtNX0cxfUNtVnQoYT52U3c9'@;
put 'ZVN6YDZsdl94NmQ6LE5qVnVHQ24yYkNWRk9dcm0+OE9KODVySXxHMSY5eE8zXSlVL2kuZyhqdmVOZztsUzBKPjVBaXMle19mR2ZNelA3UTE/RztlVi5nd3xjYlVDTk82UU4/ejVUYDA9ODsxXUNHUTQ0XUksdmtaL0FUcl0sO0Ald09VZ096cjkxZCxNQl8vTi4iNW8ra1poWlt3SEpoWngwQ2Ze'@;
put 'MUIudWIjYjUlJC5NKSExL3FjfEg5elZkLjo4OmcubUd+aEA9S0NgRGpXe0lxZVlVYHk/JUQmLDJOOG0qOCNgZnMjfnB2eFd3RTZ7Ums1bzA3O184dXVwMmlNTWNSMUIzLmk6bCEhfjg2cWlIfHlLIV9sVEw/WUFtJiMzeDpLUko6PnVjd3EhWkBJTXc7ZmwpYVVMeSREfHwkVmZJYWBidzp3PD5s'@;
put 'bntYfjt5eEQsV2N0aHljemNqJEVOOys1L2g3d0xTVj5DejpCWV9wZyRwIV5eQjMvZ0hBeUYkVXZHRk9LOXAkKElTej5GJExheV5HMG5wOkhibmFsZG5sLyU/U0E1TDVafkNsJmk3OkoiYW9gcUJObV1AY2dCW0ZIfWheRW5RcHpmKGZHelFad3VHRFtveD9Zfkx2Rnc5YjIiMUtbUWk4bVs6OSx1'@;
put 'YF80SFcqXn0oSyxaRShjVlohKWZecmxZMXI+TXhPTzV3S0FhRz42TFtscFV9T3dNek48OmR1Yzx2V2s9V1BBMlo/YjREKT48LCpGSkI4N3FsWTM6R0tXM1k4cDNtcT1LUTtye29PQERENjduP11TOkBpJUJzeypuPSleZCsqNyUhd0ciSmYlX1B4eD9KOjlZW2QhYjs+REg1W3F7Z21KZUFmXTxp'@;
put 'MnlfI2IsbUlfZElwY3RzdE55QjI2YkllTT5XZFtkSWtQcGFYWzljTnloPSkoPnZeXUhheUcwIX1Oal1qaVAwPjhkfHZ4LGhZKSFlU3d0LGFGJml4diY5PWt+O1V3UHBMZjIqNU9pRHo0PztjQDdSTlc7Q1U7QWpNSF82Lz5zMlBtJmFDd3ZieV0wPCZnSnBvfHZ4VTZvalptVGk8VH5XJG1LXXtT'@;
put 'aV40emJ8LlswOigpJU1xXyNoVkdFWT9CPjUlN25DeGRkeGRrQD1OaEhQM0h1K2NLb0krbFswVnw/eDc/JXhEOlNnSiJITzF6JVRycFNEeWNHVjx6MyUxLktdR1tkfD94VzYxazgwXVpNVGshSEQ+Pj87e2B8dyNYZkprNXMyLklwZUJVfiNiWW1CZVM1YGNsPEwmRGN1JCgpcF5EO1dtVE4pZzNN'@;
put 'dXpOI1tLJno1fkRVYkwuU2U3RXByeGojOiI8M3U1dF1taXV2bFR6Ol1vPjt8VXlKW0lyWlNZa0M0ckNfRiF5PiZ6NVs3Vl9wTzpnS3pZQ297WGtNfm1HSUNLQWYpISM1YTpRPkMjOW03WXY1KWdtPF1GWGA6KHdWKDZNUE4uLmE0K2VFdH4jRCJCdGBdOFJOJkZ6Uihte1RmOGYmSSNeTUx7L0pr'@;
put 'I2ApaVNSWiMyRF1faXYjUEZlfUREYWZKUTBxdEpPbnxfeS9wdG9yQEtVIyZyUEAkYX0hWDdGemkjKm1Mem9odyNSVyI6OXtbXWh2P0YicDdhN1RNNWQwd01+LixlT0ZKcHdWZiZAM3hHRz87IXphWjRQaXwjU2AkPipzfG9fayhHUCx6RHpaem1jRmo2W1dle11LI2A5eW52KmpsKFp7S0BMZihu'@;
put 'MVtBenwwZDdkOStGM3QwK30mSjIjL1tTZlJmXXZBVWVKakR7XUosN1d7a2BGK1NPQUxhd2p+XTdSR0JDMigvQFM7eHRTcylzcDtJSz8+TSx6VXEmTkssTkdgOzB1IThEO0ZEeCRfQklZUVp9bERNdXUrU1MkTiYqYXZENGMlc0taRGU1QH1ObnFmdSk+RGJ9bDN3KkUiVFtEbnFfWDUyMTVuflV5'@;
put 'Sj9bd0ZAb1g2diNQMm9rTSU5KzFuaDZxe2FuYEpEWE1OWXVCfiMoZ1FFYmNLaVVxW01qWWxVQD4/VWhuZCkwNmNiXlI3Q0E1LyhlaGF6ejhxYVBPeExpMzJtUVZoSj87QGFnVyt0PzcocXhAJGYzYlsidV5eUE44QVRoY01oLCtRVF1pPyZ6NUU2OFlrSF4iLmRRWXYuNFcmOVtrP0laW0xPez41'@;
put 'MEZMfHkqfW5Lc1o8SHxmR1UuaUo0eHw6JjkmRmpCc3IwOyVdXyJ3LD1FdmB9eE1XbDt9dm5kI0MmKkFuYyxuNGhteiVUant0aGZyLmpOTF04aT1JWmFJejxmK1NXO3BjI0hZQ0NuaF5jdiI1cSViYXFmNms9P3Z4SShVdlo+YXwhR0lPPklsaEFuPz4+SVo5I05PcEJiV0V1WVRzU0heaEskci4v'@;
put 'e2lCaUBFKktgJWYsKFUjcC5fX2guZUxoaHcrRTh6JD9JWndHSmRQZEBRWXk3aWdPb2VsaF8vUCpBSTpNUHptamUrM29EPyZVcDtAd01jKVllcXZXei82eC5GKFVsfEZkJkZ2bDEkNDhEKmAxOHtaek93YlZBWXxRfFNdRGRKTiM5Jl1NJG8iOyg2LF9QeHhqRUMkKEExSkI7SltUQVdUZVBIWlZd'@;
put 'R25ocEdDPzZjR0pxcWJPSXQ7bnlgdGF0Zi9kIUouZ0R8XT53V1loI3I6WkZ6IVNEZjRqKlZAWkp1bHMjcjpaP111TXduR2g4L34qL0R2QDk5JlpnUytCIlFLTmg6QSlnXm4/IlB8V311Qzt7VGtiTSpdWz8qImZaN3dBKDUqKFUmRiNHaE9pKHM6Wip6YWRdQHhnSzhaNGRHM3gpOXJPXjA/R1Nh'@;
put 'dnE/WV5JUXhWW3RhdjUwQS9Gcno5LC5hXmxIdT87NEJKInUxNThWaH5uZU14aWtuNFZeQyI2b04sPkg+bXc8YXxud3IiWnBvRzM8VHw+NkpfTGQxT1VXclJULzlBWS4uaiYsPmBAMS9aKjozLEhDQHxlJjRhJnFNT1Y/VTt8fnowJDdsQENYRXBwNU9vOFFCWyZBNkQlKj9mL0leOko8VH5lRUhz'@;
put 'e11XdnVJXXp5cXElNng9cy5xL15dP08mVH5FRzIkcXN2eThndVFDcXswQEFMNVIpdGImTFMvXTxvNyhdYmoxN1BONUNEXXhiWT4hVEh9U3VWVy9dLEJsViZ4dTp6W19DYDdPcX5wNytoN04jQH1Fa0VRMD87TVkmOHdfRlg1X3kuaWprPCNUdDJfYUIveXhAKGsmLCleS29rTyo1Nk5WMGYxQi9p'@;
put 'RFZCeVE2Z1R2fGUwdU1JRFNTbkRROnN2Ok9GVShxUGE9QVpKRlQ7KXZVLiJuQlpTeDl3Nz8sUTwuTncodlVJWVN2NFAvO04qN2t2TShmd2BReUJwN1J2MXMyek47eWtOVi93cUlac19SO3ExKCUwNmN7bmd+amEmLyl1dTYwcClvOVY5aEVqbDhFdV5XbWZxRWNZJlBOJmtAeVVBfCk/VW1nVlI/'@;
put 'SSklaUBBWVJIfV5ZJjopPnUiJGl0P2dxdHpjdEpAIko+ZlVZQnYwcz8lZXB6S052eTtgd3I2WCpOPUNHfCEwcTY6VDNje1drPjlNWEpJNWkmUE57NGsxKF9KRF5fTkJseEgrZSZQTkk1N0JBJXJ1cHFLWThLZlkhOTA3OmdWMUZ0NkAzSyUhcVMiVV9sPHRXWT5GLHRzcW5rUi9AIkA8TGdhd0BU'@;
put 'SEg4W0duRmIsMmhPWD9MZ1B4XldiUDcoLmU1aTI8KXQiI0N+cUM4KWNZTGhuaUIkTUNhX0ZRQ3h8UUAqbF1rOHhpcFgsZjBydmFeR2VGaCo0UkM+L09BNVJEQCZYTjp0SDBDc340dXJOfkpiNH0qUX03ZlExKmhGQz5dVC9gSTU8Jmc2c25aSjFENEdlKDVCRHtIWitIMnYxRUdoYEh3IUZfS0tZ'@;
put 'RzRHciR9cC9pO2ZPOnlUVnJLfH1oamY/U3NxdEIqKz5XRnJpdkxtcDVkQ3c3U1s3dktIJFdiYEhGPjo9KUxfUSFpRlYwK2hpbGJVVjFednQxSyZPIzMkfGtTaW1We2l3Si5UfEEpdDsxY0prTkFXUjRbdSo3SEdSdCNAZWJWQTVEfGRIYl4xKUNySGMwMm54R0k3IUZGa19UMk4jLi5UMjB2dVt2'@;
put 'YUM4X3ZJeWtAdX5PXnojUjp8azZUVUltYyJxd1R1QTd9SUN7ZCl6KCJHTlJCcnt+UnE3TXt1b29SenpdWEp6XnsybnRENUFvcmFUMSZoJSV7MHVhUXVITWpRR1lIR3hVUnI6Z01uMXkqL0I8fXdlQ3pFVm5PdCRlZ3VCVXoidF13eU8yZmooR0g4WndhMXIiXlozXXhONkhHWSlwYmR0P30zMkdO'@;
put 'dyhGPUhwNT4pdjdZRG5GVyFVPCxbNldzLF5yfGEqU04udmcrVHo1RU1tbnUwSVU8OFh3YTF3dFtPOzdFWiwicjNTPzBWX3Z3MVBqfDJ5MHlxNUx6WixjIlpRPSNkUlFaNVFHVy90IjBpYnt0VkgoeVdSSGBgeWk/LD8kR2F9OnNTMjJSZ3pKcVRsIStRQXVgU1dOKl87d0tZQkhmeTU/SzQ3XX45'@;
put 'XU19ZyswfS58b0RAfm8pInkybWV9L0ljbWRyZ0xRIj5ZS0pMKVdlS2V4QHRCdFRLYVkmUWNWU2FvcDdMKEJRNjxDKDJGdDpoX0Q4OjhVWT5VR0MqX2hTMVNiKmh2dEt1VHB0VlsqP1BWZDo9fUZlU15TNjhwXiUqIigxXVNdYVlRREA+Ym0weVV5JH1SVC9CQzU/NFZjRjBZWF9lRWBPPWtFQGJh'@;
put 'NSxBfjVDNC9XISNZW1I+KkhhNVh6NERWWyFyfGYibjlwRmJvdntvYiRCdDlbaWROZiJuM3srXzZLPSVlcmxrIWxQY2BZfWcjNWVpcFFga0FjV2dxTD09O3x8XW54U11IUnJmc2lYcipkJiwhPnpHVipSMVJDbk1YSnd1YV1ORzpQX2MqZFJTOjo1MmtRYWQ9UVd5WnIudU01WUdPISZTQXlmeyRg'@;
put 'RGd0dl9bakZjdVZxO1Z+N1J3JjkiVXRDYio2MWxOXjc/T2Z2Vk59Wm4qK2Recz0jSCowdX1jcVpRPVZvV0UjNWFUQ1g8Xnp1dTYoNUQ8ezV3VltHSHk9dCp6LnI8MzB5NmtEY0FZcFlNUmhWaD4udWV1MHlqfHUhRm9zJWBfVk5SfVpWKTdPRGNXKTFPLFo3TSg3aVh4LCpuXVYyJkhRUnp2cl0w'@;
put 'NyNGKD9MSD9VPT8/dVZkVk5wXlR7KDpZbyI8YDAiezxmZ205UyRUWWEiUzpoOCN0JncsbnVQY2k5KGtoTDorQkwpOnxgKVVdQXJOdi81SEsiLHR+ZWhwM0VURnZQSFQkZVd1M2A4TEpOVnA+UDFze0g6LzpbcitqSElpVVFpOEBbTmdnQClMJiVUSFRZaFIial1tIUN5cnV7XlBKfSpoJm5heX12'@;
put 'RlN5NGxZc2BMT0dbJHpoNzI1LFdLa30pRUI4biRndXI4dEZNZCw4U3QmTCtTPSk6UzFkMlI/PEF3NUNKUikqTEE5PDR0S15OQWJefThYMVkpfT1bW2g+Z355Sk04S1VAZns9UEkoMktuZE9IWTF2NypNMysxOndCXnMsR0o2e3BfXypUREhtRDEmaEY9TE5FVDxvVGFjKE0qMHhIJSNYUkwvfmhh'@;
put 'TyN7LE83aVhYKntWUHQ/ajQ5SHI6N3tJckV1aUpwO3ZCKUozRHBJKltYVi9QT25qPT1mKEtHU3IvYnZLLmszKU4uRVJEXkdgX3ZKbUh2NUAyVlU+RylMOzprIy5VYjJ0I3ovfHtyU3I9eGNjM3Juc3gkR0ROY0tEOVsxK2ghOCxrU0U/LEFXUEI9P1gwd3I9O0NZMVd7NXkyaF18NCRaInQlKnRl'@;
put 'dlBxWHtPVnE/PF0sPyhIcWRbNEhDZCQyWENJOEc0cXRbWXJuNSYwY2siSz0kSUxbYEt5aTRSZHxQeFRCREtpeFE/Yj5iSVIjQFkqcjFZY0JCK0g2KjVSckY1TCM/W3tTTC4xU2AoUE45LihRanc7MW9oI2NYRkNkfkpYOU9aPUVKZyYoTGtlU0ZAL28odSQjYH1oQUxwPT9xVDd0Vl1ReSZtJVUy'@;
put 'emVLbCpgbU5Wfj01L3lkTnlJMXhYKyhgbT5TfXpBUTp4fjBIKSQjQkZvaC4vO0R9dERhOFU+QTkqRV5fX25LJipXRk1CZ2RAeH5DTDF5LiI8XiJfU1khblhdbV9OfV9pL147JGRaK3xbPkpaN0prbGVUSH0penNgTkJCLkF+ekhzSHRKWk90bnJxWkt9ITh9UTlmSFM+UkpMdGsoRSRyelhEZzxn'@;
put 'a3klQXxbOUo/OzJ1InFYZjFqNmQ1YWVWZiJXa01+MERrS0N3MVBHc0JNb3csJDRyZ25sVjsrcUNbOSlHW3ZXWCZEe11gald7NVBdLzZdQFsmR1k1bChyNVdrVzo0WmszPnJvUn4uMkVadDslV0NXcV4pJU1ZODtzS1ooc0UuREw0P3JHVGJtSkd+bks6dEJGMCgmJHh9X1FUalh8YDskOi98I2wr'@;
put 'NFEme3QhRkVzIWgsYzssVV1qa28/SzVuam9BR0hBPWJpdlpBZGA5WiZPZHh5Wz45JkdASC41NTRSX3FpTnpEV0JAfW5LfitpZC9uJFBOK2B4djZ1TyU5U0RwbWdvaTdHbl5zZSE7MW58WnpsPyJKXUBkL11dakd3L18xOiY7NXYwPSw4Vklyd04wTyM/JXdoS1V2YlIzKDw9bFNHcEdHSXc/OzJC'@;
put 'L1YveHVSeCZfaWFheXUhczZaPmBOQFYzIXlWbWswLEIhUn4jWlJMKV4sc1lTPigvXiRfPiJmek5VWXxtLChvcSFOdUlDbXNJImY9ZmVhWnZqdE5oWHpQajVkKl9XTkNacyZIQiQ6W3h8VXZXOWo0cjpaYU1JRn1INltIS2B5eU4jQj47TCpOWyFuT3hHYDViYUxxZEUzNFZwQSh5IlN+alYmeDVJ'@;
put 'VDFwIyo6MzYhaEdvMCpueCRHfT0qZj5iXntOel0/Y1ZWa0l1XmtFODFoRiYmQTY0UiZDJnErQ1RfVERlZlJOPiYiTVZHSFJybEBCXl88WW1kJlh7XSo8dDFOSnxibXFSK0pmVm9KQnMyQihQMS9YPWlIaG5pJjteTVQ/Y2Q/SndFezB5IUUmXmM3KzpPKHJQYTNSMlFLeT87X1Yhd3o/T0h9U3Ym'@;
put 'NUlfW2VXRGB2RkVBfCJzbj9ndF8yV2RIPSJxe0lCU2QmOT4mUTZwWTpCODF8KHBXfi8iWiMqbzljSXFTYUI3VVlJZmpQRzBNbmhKOltNYEFkTTkqNVcyZns6PHU/ZzV3JT9+QD4meVQmS1laVilfX0ZRamE1dSFXe2guZTBVVWJgUTl7RDFDc2BOIT1rdnN4OS8lakdSfSNhUl0xI1Rsa1Imfkpl'@;
put 'aVleNS5MZzY0WjJtM2lpeVFaWTheMCo+Jmc2Vi9ePTJnajY6dzdHW1BvfDIubFNDb19jZE46ayxTdjg9U1hRJkNRPStXdFFHZDs1PDJ8ezpXUUh7dGZvN05ydFRaQVl1ZylYJnA5WWRAM3FjNzwyXVNuK14xQEBJM1FdPjgrQXAkb0tFPjlFXUZJPz9LLz5abHkpOTd1NG13WkxAK1s/Uk0vPnBs'@;
put 'd2w0ODh3aUBgOUZUXl0kUl9FOS5ScWwiP2ElPjYjRn5FI19lQHgkNEFuVUpuPUwrYFJeZ349U0VdVV0qWUNiPG4mdWZZPX51I0NePkt4KE8jOTJeVnJeSmI7eUVud28qUk0lPDUjRSo4PzpucDNgOzxHInZsdUh8WjFWWlZsNnZFKjRwYyVfTCZFOnYsKW1waHE4VSJHKFtpP2VyJmhxSnE4V14k'@;
put 'X35LTlEjSDlEWEk2PmAjbHBNczdHVFtPP0ZSWUY0QzF1bF1LfWo9IW1pYSokOU0ldDooYnsoJHlkJCxzbC9WKlF4IjIoU3BWKDF0Q1s8RktabFBQVyJaLlRFZmJ4Z0V3cCp8fSl+eXc6Iy4hOV9tdiV8KyhtOiRdIzNyTCksKUEwMW4iYCRgNDM8XjIqY2dvJmUsM0BVbzFxLn03ODozQWZUOyE3'@;
put 'T2VkTlJIJnZqX2c9Kz9mdzcpUCltU1h8alVKV2B+UUx9Q1Q0RDxVP1N9WT81bnVxMn5bcTI9JV4mT3AvR15YciooYWp0RHRfaV02VVh+Lj1SW002fU9WKzQ9RX4zbiU6P3t+SGhSbGhJNDQkTyRgXSslOjp5RTs8JD9bVUIkLClpP2lyfDIyS2o4V2xpdnYpcT8mXzEmMEtHXzRvIU8vSnxyaigv'@;
put 'bFE0Q3ZqKW57L1RkT0xEYTg6N1U0WWB5X2N8aT1TOTJlW04iNnpCWzpiez91RERATDZNcz9RYF5RcldoL18+XkhjUWpDRDoxcU5MUn1fL2FXJWplenV+SXk9dy9AbWNSYnd2UVZuPzJ4RyIvQCFfImAicV9qVCUvbnRWXWciMWM5TzVSWjxdNCosdmF2NnUsaFQlPWJ1RUBAO2w7WDJNUExQV05m'@;
put 'eihOZCJKQ35YTGR7U0RoQWNRZ3YveT9ze0tJKTtNb0JudF01Y1FndjU6UWMyTWA+Xy9FMGNRPCpEOiRaTUx+QWV6YDlzb3pTME1jem5fSFVHTjIsJGN9WytCWSVaSlF6N1o8djVnTy5zTC8+XmNZV2AsOSslc2g1Nk1QezJ8TExLTl9RUFlBWkFMW1ExYVlVflt9UjAze2p4Xj9Rd05AKzpoZXcy'@;
put 'dyozTCYicXpqSFh8W1YwfVJQWW4peS9ZYzJNVUhAQG1rN1oyTW14NWd5RTsuYXl0RjQ3IVRFVXk3W21KNjR5TWZgfjhDV0xHc2pVeVJHX0ZufkRQMSVyfWtFJVd9VzcsMGVGZ1JBIk5VQlhlfl5JNFFBfXVqcjJgYF9STCgsW2V6ZWQ+fkk7TkRXPy9ud3F0VT51RH5MUzN5TF0rcj0wRV1bYSpz'@;
put 'flpPakJ9QVpSTEVgdz1tV1J8akUqc1paT2p+cWROcn5WQ25OXUBHa1BmQ1NOMDAhW1QwITlQVkgvYVclQzI2Kntge2pTK2RYKX5KcnooXSEwSUJzZE41aXBmPm9Bc05OcmA9PzkxPzB8R0FMYURMVnNHLl9uNTtocTxKTUI0Y0F7LDolTk1OQFBBfkBePUZheHF1fi53YytdYCNZaVdgTD9jQEBT'@;
put 'QSpaWSt9WHFhUDFDIl8ve2owND4xO0FlRzkpZkI+LCgre3khaTB1MHcrcjphTVB0UFAxdGBUaj9YPilCU0xqJSsoSVl6eWtrcWQ/KSxHZzlUND8raWgsMXw1U245L3xDdj0uXnRgIlM0eF9WdGlhJVRgVEZJVk5UVmh0VlooZUVuQ0UxczA6M1Btc1N6YCl7ckhNa09RYzMqUmlaMV1hMnpmc0hd'@;
put 'MjUxcHxJX0h3c1VibTghTUdKWC5oeX17PTxyZEdQXiwlNnJnKWw+UUwlXk50RE1gVEUmbWVaanAxOUZ3O3pyP2U5MT1qQC9dIiYmWns7SmZ7dT9BaFF0Y1dtYUBNUkt4QSwuRm9vaTRbV1BAd3cwW09eRHM7YnFvNVF3TU1qW3xIX1FMXi5EVXN+cXFjKyNvKCx2JndjWSsjYFk5aFdaM0lgX30l'@;
put 'QDJ5cXxCeWhXXzIvcVh4Lmp7VEN9KHZnSixYS35QUVYlVjE2fCpmOi5hKigxWDRHQiQxVG9wSWlGdzFhTn5hImBHeF9fR3heXno2NGcxLGckblBNalpbNXlTW0JLZH4ybXo5UUxTYlNZb29KUU8welJdfX4uMnlvfDF7NHl2NnAxL21+NHV5QVt3PVVMRXQwUnV4SWopfHV2UUxZeF9RfmFZTUFM'@;
put 'Q0RYWVsuOTFzTiN4dXlCWSFLb1pZNUNPd1R0VkApSGo1ND5Qb01jejAyOXtYOE9oNl5WOjRoN0YzUFo5cXVpSCt7WC4qT0UuWHs6L2g/dlcoNjRJRlh4WzQyeSxiV2Y8TCQmfm1RVjQ7UHUoKXteQVUxSXxpcT9zQnhuMSNxNig9c3dCT1F1cTplfGxvLGBAKU56NDJMeltkfTF7eENYPHRZNTkk'@;
put 'dWZneW9bSTJhPjVSYTNyPUh0ZGt7ZiFmKGNXKCUzcVQhcHBzYEEyTikuJncoUFEsXkc7P3N0RWNnTHspWlcrOkB5ZiR9b0pjTkUpUWNtOGQ/Rzsxcy5oPHM3Rm1Wez40ZChoY09HN2h8MVclfT0lMWh4aGMrbmArXmdXUDFJYF1NIkBbQG9lWU9NaiR8WGtRTG0seXx2QlYlNDBFYWI8bn5PZWMr'@;
put 'ZGA2M2dXYTBIbzx9LzQyeXZAS00pLFI4cXl1eX12OWswY3hjQXMkKT1WPjRsLyRpPSxzN1pGITEiYCMyMnlwQGt4bVc5ejEhWU9vbz9PSjB6Ujp9cnkrK2tvI1tBfUBZYys0ZFglZkhIYURVYnxMUGx+NSIvQDE9fmBYdUMrdENVSGh2OHdiNm1xVjBBekdvL31odzJ5WEA2UCRzJClIby59eXRx'@;
put 'Ii5qR0tBez1zMnl6SSt2QFFzeDhTQVdveUEuaTVzd3V5SkBdLDB6Lmo4SUN9K1c3I083dHx3ZFdMPFhFVXh1bUF5ZDlGWjtbQH5iLFZNPURJKCx9M1Z4dXldWHJ5ODVXfHFXXU9QMWkpQ11PVFZSMWFHen1bMTYqUmAsWTMwY1krWkdZJV56RWFhZmt+Y1VqanE8WnhBV1lpe2tQYlclO3pHekdv'@;
put 'QEQuMXF5TjNxb3FOQE1LLyZNKFhnK3NvcU45TSxDfngwMVMjSTdxb3FOR00sQ2dzPW9OWEovWU4rfmoxZ1JQWXg1dXlCQCtyI3M1SlBAZX46bDJ5WXxwNitCY1FZN14vQUZUTG5fWVYjc19JeCg2R31iQXMpSSIxSE1hY1krM30zKXZ6L0BlY0F7T35MdC9AfT4iYE5zdnZiTHJ5e3k8TXs0WERU'@;
put 'NVhEPEFbQFVhKlpaREpgOSsieUROOmNWK28/WERBQioscDBCUl4mL0E/TXNRP01DOkguKjFhTkhSQXtwfWMrMH0mO1clYnpBemhEcDFZTGZGcVI6Pz9AW2NjdGhWIVdOLDp2bVo/YTx0MXUvQCpfQX00Z0RyZDlAW3osaHlIQD9UQHcvQDFFfVpTNE8qYCxgdyp4ZDF7UiZQdU0+SCU0aVdYVXFO'@;
put 'MWEqbkN7ZGlQMVsvXy9lO1NMbn1lOzR5UHNXQmNRQyouNUMzR2ptajtaY1lBc2BsQltLWSVUdnZBc1cmSWBoMGNRQWpTaF1gVEUsSG0kP1FFKWNaPlFqfjpeUlFVYDBSPX16OD1MNiZjUXIrP2N2T19zVnBxb0F0bDkhe35+LGdfc0g2bXtCYSF8aCJoIT9RJGdbTnF+W09yfkFKQUd2KD9RXUx1'@;
put 'fn5XdWpiSHx9QHRxLyFNNXlzYyk+ZWs8RD9+PT5sTndJPX4keTl+dUhNYjp4On5VdCl9Z3R8VCxIQSZYNHwveTFEfWQ1dXlLfjY7M3l8ezYzU0xQfXA2NHlee0J5TEBLRDxRd0MlKE86bEdCc35KRnhhalVFR1pTYGJ8PTFpfDlaMUYvSFp6MkRiQGZYPWRgWF1AVURWRiprNEFQRDJ5dVJjL1VI'@;
put 'UDFiR0NdMyl1Ki4xaX57bTkoN3phfEF9alBjKz5fdWJmV1A9LEloc25LSnRrfn1ia0lCTltGaldIPXZBfChlVyI8ZUR4TCpzOkc3TXp6NFUzeTI/UEF4Qk9qbHwuaGV+eGx4OmpUKyxLJXdNYitRQ3MhOC8vUVhZOnIjZ1QlXl0yfXJnWjUhOjh+OT5VJWxuZEI0SnxNPWMqRD9yd3gmMX5JIyg2'@;
put 'Yl0zdkVUJUlnZVdYbyxWVGp7JHNFdl9WQyRye0R7cm4uYEJrJWkoJVkje2h2WXxzWndsWXFwaiZrdlFjUFQlXW9pVyZiRF8ob0d4XW9MTFJ0VVszIWUoXW9qKGRlenI7LEp8fVR7c3hwdlFEYj9vVSt0fn1tcH1fe3UuIzZmVyQlI1FXLnwkXz96RWpzVXgqfmc6Ri8rbi4mRl0vMmlzakFQSlU/'@;
put 'ZGcuT3osKkkmfjxATXxAWT9uK1IoPyhJOnttMUR9NEkzPzg9SG8zbUpWYSNHYDIqcWYraS8+eUZxIjtzaVs8OS8+Ry80eC4mOWteVXozfFk2T3A9RyZbTy5AYyEsfnh1a0U/fCRDMnw8MkU4JD04fE5Eazxyd059Vzd9QGMlcWU+ey90Si85fDFZfXhVTVUiVTReSzh+PndLKC5BSzRuZ3pyZ3hi'@;
put 'VFUiN1RxSWt9Z0N7LlJFVihuJC5RJlksclRffHNiNl1MNyNQOW5VLkAxfFtxa2BzVEojd1l7fj9pPCZKd0Eobm9hViZHVzBPYDxeRF83SD15W3FXYDFZcmZyKn5JbjFHW20oUlNyaGdEbyhIMC4me3ZOJCF1PFFwYmJ9bFRERkVJdCw6UDZya1J4ODJQfTBaU3VAJGhPKTQkO2YsYD4+MlRAU0tF'@;
put 'KkBXejEzNFQvcT4ocj4sfSw0dD5neHwlens1XzB4cHxfZUxTOV5XPyVLY31IMUBKWHM5fWRAJDUwfWNEOyhdcDxBfGx+fVpmRklkT21BJSJuYGhFMn1wUG1BMnI0X05LKSR3KnooN01NMGVndlQuQDhXNX13dG8+djkpP3hqWi9CQ3UvOGhJT0k0clF0dVNUWmluPmhnJDw+OD9eckVlKGd8Lzx0'@;
put 'ZXt7JEpxPiUhWCRedTt+PThpYTNyNlApJFZGNzpwJkN9fmZHSXtUd2M+aiUqSEBYfFBxRjUrbzA/eGVhPD5YUXtVUjlEODR4Pj8zYHdRUlVgcGFtPiZyZjxbKDorTUojfVJ8bCMoKTorJUt5fWs+MnZTUlVgTHdaYzltNTBjOTJ+M1EiJmZAO0g7a15+IWM5JHBxTXxHIzBbTl52a0NrOTIiflBX'@;
put 'XUczZ3dIP25TdFFgOSRhfHpCUkNiczlbVkZrKnxzc0FtLmBBQSV3NW1XLE1raDVCVWZPS2l+fmxVXzUmT0BmVSZ9MU1DKHEzOSFGK31+RjU5XkZKTHkhNVVXKGlYfF5wdWc3L2xbVEVsfC8/N1BqUm5fbDEiVjh+cCw5PjcoTDQyUGw+Kmhqa3ozOnZkOnM+e3pNMWtGRHszWVAobEA6SHF8bDBM'@;
put 'L3k6dypULDhoVzdNNDVXa2goUWM9L09yV0c2V0dLcTxya289NCx+Sm01JClrKT9Xa0xeV2ZWWzw5U2N5W1JBfGtnR0RzfUJxbj54dVphI0l7ZktWZ1o1RVl6Rm4oI1EzPjhoSndqKFRjZD12QjMkRVl7czxvbH1QMWZVNy9UfHBhUXxLSVdqfklUfC4qInIzfVswSlNrX2h5a18sJncoWUNkfmEp'@;
put 'JmYuJipeIiQ6IX5zPThOKyZpM1BWLDdoa0dySzgkUG1mPDshcldpR2k/NSR4bkoxKEkmYFNQdj59aS4/PGlALjlXYyhJREAmfSooMy5WeD9wMl9pTisoM2NaVFthX2ArN2VIODE+KkhHRCNMOH5JKD17Tng3NDMhMGgqJFFrM0A3JHEqKkFsezpKTXw9SzdLeXQ1VzJ9cWdRJU5IPDlpQnxMPDJ5'@;
put 'PiV8MmMuc0kqNCRaJEB7SndyVzBLezIlYmU6RjxaPlhneXkvbXhmVVs1LEtJNlhgJm9qfSZJMS90b1ZdU3VNIj9QfHVqeixUdSV+ZGQwfWYpP24qRS59TnUiJj5OfiZvYEBJZWZAMGtsYnZvQn52cD5rbz9EfWksLGVeLHJsIXlVY09OaWpCMF0kaFBRP2VhKXhbPlpsPmQjQ1FOaVZMMlJfJl8j'@;
put 'b0lwSj8yNmZpc2whTyZAX3puakJHfWhfMV16cixUMnJUXnlyangrdjVgUHcmeSN7Vl90UkoxOlRAYEtuQSg7JHUqISpbNF9SRnx6T3FzS3YrWGslOV90UUohaT9wL11YU3NyLlMqfnhfP2VEPTU4O2ZJNCoqQTlAJT4zfW1GQVV+TC5gRkdIfWFFVCVSWy4sJSY/bkd4RlhhXz18Mn1rVDF2RnRt'@;
put 'PjV+Zyw7dTB8fnUvJi5RKCEzRE5gYXYqcn1sLj0xT3UrJUt4cz1HLjI4RE5gTHdBNjdjbT49cWs9Il88Xks/ZmJPP25JemAxWUtdcSoxXz1zWlgwfUVWWWBNRGZ+XzRaX3dYcT1bVyE+QiorJDhUZTRKMWtWanNCeS9IO2s/Yz5qWV8yZjB8SFZ9QD1tYEpxWUNzUH1XUXdsSHs0KiZyYEM2UDZj'@;
put 'ezElLHE2fmkuemUobHRYV014W0shUC8yNVJyV0I1TVVALkJ6R1Y0a3osTVQzPlRTcyplbGZ7OXkhJGkiMk06JlZzISZ3KntzNEVPUStXN3N1KlJMc3ozb0V2JF5vWi8md1lxZm9FOnxSfCNVbm9qQDFoUStdJks5MVV7LkVAVXhffGI1M3hpIVl5WlN7e2hfKG5NfEBVLGA4PEpxdCZ2a0VgTHch'@;
put 'W0xxTHB6LFkzaldweXF2aFRyZz9QUShJPDQkc3hifjY8Si85d28leTpBc3xZd244SC8qP1FxQF9sQ2tHeC4+X3MrJF54ZHg3c346UTQmYk9vVnhLYDQjRz9IeGs7bklRYH1QK1BNRyw4WlNlezZKXWA4VHFmayVGe2dYLDw9cVJ9Y2pfaXc5UlE0PVp+THwpUFtuW0FVfWk1dz4pfTJ9V0YvTyJZ'@;
put 'fF9wOms+ITsjQTBPV25SejAsZz99bFJ7TVRHUTZjbH5tblsmK05iX2l2Kj5ybzxwSkljPT1+ZWorcndLOFJUJUVtW35mXURoLiRWUUErQX5kP2JuPG5WXyRWW1s5ZXwmPUApJjg1dX4oQUVeYFNKOSNtQDowfT9IRGtbQWt9THU9JnN8QD80PSZUYXVXSWZPNWNnYVBXMCk5ciZ1XU5SbFVDWl8h'@;
put 'K0Z9V0c4MTo2bm1aZUR0ZjReY10wUEIqMFM5c0IlLyprQjtsTyFlP1dUcllFZkQkZXs1cVImWjVJbykxQCRULjUlVDtEOnBaeEU4WyhBRXp0Y2o6ZSxuaD9dLj9TWkREQ2RKOD8kbCUzV1JtWVREYykrXXdbIz11TE98cXxJLE8yPH58c3JLKylvPGcyM28oTjU/JkclYFVifDVYMkIlQW1NRmFL'@;
put 'M25xdmhaMUJ2dTleQ3k2K1UsenJfSDYvPVA7SjpGIkYyRTYkJTg3aihHZGAkWFZqVHZmWDt5SEldVyFNVnA4fmhXLmBDZlc9VG46L3NWMzUoe3RxNkN6XzZ5Qig9Nm9dN2JjL018RS5NM2RVNllJellfQWVCODtOMEB+bWAqdT18UGRfUGxTVFR1c0NQOWZsPFlqZWdfP2thQ2EvLGZuPlZycntt'@;
put 'UWcjQWBYblBHWVI8aXU+b2BxaD5AQXQoei4+RkNpNHZEXXU3cmNSaHcrNTVUQWkpSGN3VG5oIU5QVDVwPi5SV2RITj0mRU5INXpETShXKnwyb3dRKCN1eTFndzRyYndZT3d6QX1rR11XIU1dNkEpfjYkUzdPV0dvdThKbi9idnJzZCssfXhGMXw5TFFERWZvPlEpTVY7WDE+eCEsVS9YOE5gKTYk'@;
put 'SjwpRUBbT35BWHdEKEZyNl1FMlckQTJqeD42RmdBdldVfmBJL0w0Un5IWm5adHBJeHRXa0Rfd2hYfXtBcj5zOiszJDZjOFZfPEAxUWZ3TyhWciUwISRjXmdrWEF9azJPNl89QDEsdWB6ajhqXTN5VWdIXS9FPj1QWDViZTMsfT1SW20kNjkrYlVISXpQcElgUUhwdElPPlNYX0c5cm11dFJzQSlV'@;
put 'WkYqZHhSMTlyeURXY0cpWl9pfHBGZkFVbl8+X0VIP1puYS8wRTlucz5adHBJLEw6MEcmN2pRUHUzMGhEdjskfkZISTgxUiprezxEaGNrSDB7VE9nYzo2bCp7enFOek1DKEtwVV04d1Z1VkVbaF1fdTlicD5sYEB6ckxnfDxVeXhhMUIoeTBVI3wwdV52IkM0RzVUeVdsQkRmVl9acTZDX2huPjco'@;
put 'VUVhIltKM2pzNlF9L013K1gpRGQ7Ymx9eTAxZ0x+TSk7OFtyTCk4UDcvQksrQ2Z2MGg4LDhoSG9mKGVMRyZUU2M9QktxVzlmQSg0VlQlUn1NfCRqR3hnZ1Zfai45PlUhc01HaVZqLD8ubHpbOkRWdDpeX31VeGVzPHR2UFtucn5aQzVyISx4PmtbcVd4eTleOG98LmBzQ3pwQDg9LkU+eztPMHJS'@;
put 'ZyJld0VzfFJ8dUkjLHBPRipSN14kWG4uXT1eSDxNfDN4Ung7NG8+bm9vKC5jNVlnaV0mViROMVlaXmAzWShyU24oSHtUTWBrcCgoOGglfHAvb0x5IkRUbS5sJCkkYUJVNElOa2haNUhJMUM5aGRMMH1lbityekNfc19KLyZudyg7bF9OR3J6N1BmJDtsODtLbSloXnw1TVVWcVlwIW0xQkE9eyg5'@;
put 'PnIrKk80ZilINEhXeG1HJDp2YW9tYX18X3tYcEhQYS5lXjk+JnI0K2xIT1tlTDg+IXowLCx3MWAlQyNyOTJEJmF2cX5lZjpGTyhwbiI9cV9mfXE+JD1LSTtFK0MxYCU+T3w1bThzIShhWCN6RGgqXjFnaHp+c21CMWVxKmhmN0wxcyxXT3FNKDVzbVpPNDZeJGA4PjpHUl57TGt4W0VuQDVIQmE5'@;
put 'VEE4a29dWzhzK3dJMTx5VlEsL2RzQ2FQUXtlYn4sL2V+XWtVXyF4Zj57bz1+XSZEW3IjbCFuPnJna0k0WH0mY34oaDgye3kuTUwrdn1ZdTpeTCF0KD14U25MIlZRNF0sfntDTHxLSTF9Yzt4c0NFcGMkcEM6OykqKl1wTzApaEV9JUVoIXdZMmNuMTVZMWVJeGUoUjVKL3sxSDQxcGdkcjpeKSg3'@;
put 'OVA5ckwpRUk8W3NCTC8rMiZYZT45PntMSTRFNUZWRSJ6fX5DN1RdUTZfKm8ydCw4I3JVeFRneHg/fHQoen1RKyFJSDJrfF97LmFfVWtKKWglL2ZJaEMvSCNlJH5iamN+Qk15fGY5aXM3Wk98UTZlPGc4Mz4oZnQvejwpQGRQVDg3PDx8cnhsZlo1LjhqQnBecFdMWzw5LjhSfCw7eHkpLiQ2MF1l'@;
put 'el5QOkpHZmtvQ1suYDlbbmNRSTxbfnNQITJ9U1EwfUl8ayVkfTY8LHtKfDRGe0hkdyhMV0M8cjN9JixDVEVZU0MhKj5yJmIrJDd6el1VeGQoW00/SDBaYkJ6azQpOyk8LjhoLDFHKk9STH1QMW9KUWtTfi8/Oi40Y0MiemtlOm0oX1IlLGFyRVkje3pyYzlwbld8IXN3U29JPTJ8Jnp9OXYuSU18'@;
put 'NChHJi9TLkA9RGV+PU5GViV3cmd4Qkl+JC9QcXdFTnxLRE99MjVdJkc3b3IudHhzPDFQWjlgY0RfaGckQn4qbFFUPT1bTiVYZUtEUXgvPUozZVV3RTZ5aXpJeD1EJXk2IXQoeTRESll4PjJfcDxdZyt+SntYPzdnXz9yYiVgW35fT3RbSnU8cz5HcW9HeXNffUA0SnZzJDl6VW1kPVRQTCZtJiF1'@;
put 'PjJfNE94bVhXKkRjTXNULCpAZ0JdZig6KztDPHB+Mm9dMU54X35DNnIyLGs+WyhdfnI2enJJQ3JVU2NoKGIvS3Fybjs2NT9uQnZ3OSpWR2BrZSgzXVNIRXNuPDk9T0svPnQyJSNMXWcmJVY4anhlLyJzQE0xPzVdY3BCSm1FM21RflhTbiJlcFg0NytKTmNrW1Jld3JSWjlkUCguUHJ5KlNpQDN3'@;
put 'VlJdQFoqcnc5XkQ/UyheKTBVXkdASytDKWElUmJufEdncTphbF8+RGlzYG91UEk8M05AYEJVdj99RU9iIn4rdlNuVCEzVT0uNX0pY3M+Oy9hMyRPakVTRTYxIj9mPjdnVX1BTj0mOz5Kc3ZbOSIoVUY/M00yNjNVfUQ3fSp0bT5paGc+bC8xRjxiRT5nQ3BsUE00fDU2Sk9ianp7b2t8cElnPkM3'@;
put 'OyptJVpjI0tGWGNwPUslXSJROl4/e0NZfkc0LCZtdGEoIm9MfHEmIVNnWVRgQ3ZjYzg/O3c8L3d3QClnbnZJISxmSjBfWEVsals3cG9WV0FIRFh0fGVJZmw3WVc6SEx5aWFdbXZnLzw0RGMoaH5AajgrRihGWmwzJXtifndTYj8yMHwwWH0mZkMvNWJkTHVIb0F9OVFdKWdzRFhkKElZeSh3Kk4v'@;
put 'MWl5NjxzRFI0VHtlOj4pNnl9c0JeJkJDcUwkelUvfDQmXWJnOW5KPDB+a300MjY9fU1FZXpvTj02eE9HZFA0KC9CYmZvY18kOUorViJRYHV1fUQ1LCZVdGEoeWdhZzNkZiZESWFmZUNgfT1KQjU1PUpwKjlLbTt8Pk5OXkFaSSFlV3QlX01kOXhCM0VyNWJ2JFVJOykvW3ZJWFhMX34pUjleR1RN'@;
put 'ai9PM3MjblB8I0dJYlkhWV5ARn5xO1ZwYzckMEIrMDdmbEV2d18pVitpOi5uITx6c2s8WF9QSWNqJXdhfTUwcT5VfTlTUmprZDoxRT4rdHg3LFJBKXZBVXNxUGNfXWY/fEV0PyYwdmxreEJpKEhJIkBOS2skdyo3fEYyWm5IYHJGNVN6M09qSGA8KC9WOUpmKC86OjJSJlN5LzhAKGZRVSgxWTlK'@;
put 'PEBKdEQ3NyNVQjpzXyVuKHg4LmwwNnczfXNeUCl5WEl7UWB1M18xWTRucSpkKDZaeG4qL0MlRk9dKzZIYzc+T358X2VnTFhSPEEvdltgJT4rPGdCPj5YSVtyLkJCaXllJj1ROTh8bj1mY0RONzQ6UU5jLC5TY3RTNHZxV1ZDbGI1RWtvPHZjcyh5VG40IU1hdGhtQD11VHM9eVs9eCx0KEFiOH5a'@;
put 'Q2NfL1Z4dHRxNHlHYHJ3JTFRWU1SUTRKN3dLXnZFSDFKbFtQSVtyfXhAe0tzK35TZkcmO3hWUWMhLH5EZFtLUld5cjo3dzpfYG1WdT1iZ3VfOV1CKCNNO3NFT0NNPjk0PyU+OiNSeDEoSEk2QHpZOTdIVFUsXXNST0RoYHdifmN1OH01LjUkdUB6eXx9Wy5KU258fVNRX0NbWlNkfHs0UV9IQ0Ms'@;
put 'VV1XZm9pfktOSDBGIllifktDcG49XTU6ej42ZGp5cSNBdTwvVnNyX2A+eTBub04ocFkhe1d3WHxWaXwmP0AheyRDWXxNO1lubVUhJjtXaG5UcTI7X2c9VWFRUXEufG4maFpaVjk3PnNNJmYkR0JmOnh2KFt0bWFfIzdNRnhNNlJlZ3s+PHhhOk9sYn14YXc+MjtoX2YpaH5+aGNfPFsra2pjJj1Q'@;
put 'UWRzTGNFdUljeXVuV25OTyhDVFglUE02YHd4PCZxfDgveD47IWQlZl1MfD4oI15vMW9ZNDR0PlpAUGI7ZEtCIiNKfHlbYDM4ZEY9UTlofFJ8MlQ0fnEqVGtpPjBGbXszd3c+IzVXd2NTX1h2ZDVkRCZHTHdDWUZfamB+cEEyO0lVQDRBcjh9bkFjX1Y/QTJsXSUqUFFiKEdCb3JiY1ooUWNOfGF0'@;
put 'Zj5mdCt+JlAwKUxFUFFsMUskImYhYEdWI29fcCVbLnBbWnRTfncsc2FPenJKU2NXKz5QUT18XmhTSzcrX344R1dfdj91UDZkSit1RCFgMVkvPDIjOH10WDJ9ZkhbMkQvfGwxfWZhdj1zZCt9dnt0PmUwWXc3N0FlX2VYKy9xRHpWS3dYZXNYYjQkW3tbMzU7QjZPKFhxL0ZfWWkoZVI8cFU9S0lK'@;
put 'QH5dPnxlSX57fEZ+fDQqWW4qbSteZiEzeXlJJXxLPDoweFU3Xz1PPCY+KHFueV5JMTk+VkVbaF4zMz9WU258SjRHb2VXdFg4fmReXXhrKHtpLiZnRCV7Ijc9OSRRcEN5V2xCKn41M3tMSnxvUCM5T2VGPSJQaHMsYyV7aEg3fXQ0dD44JUtJTnpAfnlYV193WEQ8VGpRNDh5Ll9aOHJlTU4wcnp9'@;
put 'LCYkfjh9S3ElZFFuJmZbfjRKYXNtVHYzY1RrQlReb3BaW1EjV3xBQlhPV3xiR0JHVUdaQn5+PkNVWyY4KCQyOks0Sjc6MkBndnApKl1zIVhdRTJYSXcvfT59MzBQfGZRdn1+XWB8QjNnRkFaUG08MiopRS9hclBnRE9PfGxpRmptMy95KD4kdTNvZlEpSnJzTGZXbkd2XTFYJSRdQ2ZXLHB8KjdV'@;
put 'cHledTtTKD91UjdULDlUeVQ4WVpKST9xI2VuVCVfcCImV34oJkNFQig/OFpMPGNtYWdOWyo1IkpsMGhWKT9RdXwmTTU0PmM0SW5XMngxZS8+MTtdQCNRN3xiQnFeU3l9RmJuLy47c21uKztQUUApVkdsQH12SUVxV1d4fSpXUiFNUW9PfTR4WG5bbndEOTFgcyI5VV9jXVV5aHpjKiNBK185fH0o'@;
put 'fiY8W2ZyNmJmKChyOH4xP087cC8jTks7Vk8+clBje2RMTjs+e3NrLFRfTCsoT2R+QWl0PlQjJSRXfFIoQjF6cjtzVUIuQ0JRbD5BWnw1RWZzX310fnJ+aUNAP2QufVciRCQha3RDfGdxPWpXPllaLy5fZVlFIThNU2xGRTM8RjpRPTR8VFk0VSIlY1tuNXJzWkZOP3h2M0t+YFouNU5nd3o5M0Jo'@;
put 'RyZrO3xxam41YWpmdj1+Q259WXljQD47RW9bJnEqdGdzNlo7Uzgha3pEKlJROUsqeCZUfChmanQ2SWM+eUxxcEBUI01BMF91REJlRi9QNCF5NkIib2dzSVFMcSZkSDU7dEF+XV4lUnF5PHIxdWlgZXk7ayNod2NFPmdNWDV1QixAcjBwfFFDYWFrQDt5JGFxZCY8QCk8ekB7YmU7L1dITkFeQ0Zh'@;
put 'e2FWVWlSSm9sajhCfkc/Vy5IRHRRPzApW2IpLityPVJGSjtIc2M1KHg5LH14KC4iS2A0TmNKWEVDPmQ1IX5uRDZ+IzFYa0xvLmJrQ09acipzT3NfKVdVPUxWU0tFWXZ2XngmNUNoTltHTHEiZjA3K2dCYk94SlYhZEg8VlRwaEd5RFdPRFlxPmojdmJmSCFZYGVhXXhlYl1AV0tYTkxEeFp5YzFA'@;
put 'ViQrNX09bFB8Ym0/PnBjZXwzUWZfUkJRbF4kPnNsY2Y9dCt0eDVTKkBaeVt8WDEsJil0LHN8PkxxIUJXZ0hOaltyMGVzZi5Me3IzanttMSYkQnFTMUldO1Y1Y0wlXSVxXih1JT1nY1swbl5tdlF1XnZRTWV+WU5YeyJwU0BzMSNtZVpiTDpfbGlZI1JdMl1TM3BxVkBjQj40W1dDPEpCLiY/Vmwp'@;
put 'RVoye153W1FJcVl4ZXF2YkZ8M1NeNDR3XnAqfk57dnZiRVV2IzRXbkxYbEZXRzlNc3BULEhAZ3VdVE1EaFdhVjRUczRMS0l7ZH0zd3lUXVkmbWZIQlMwRyozTy9CRlo7dnpGczlhTTE8K0V4RjdhNjVuYDpBXio9KzNJSWkvXzBZfX44RHdZT0JTXX4+PWVrV3ljfG1raUtsQn12OGAmW2s+Kilb'@;
put 'cz90X3VhWkFUSE57MltaTyFuKS9GZHQ7RlgzMF8mYm9lcmIqVCl+S1BDWm92LF5XSmN+OGZYWDx0UipoSyw+Kmk2KXspRUUufWp6cz5rNHJ2fnYwVTN5UUdZRmk6P21aOiIjWVheYSxsWyR2ZXltaElAWSN0KlphTWorJmlaQFRwRVh0d3toK0RRP1Z5dyN+Njo+MUclfFB0KF9ucnd+UzwsMzUk'@;
put 'blFxIX5vLn0icCNyVWNrPUUlYClyMW9CO2p0aHBDXVtDYkMiXVRnYllXPE0lemIoXWhXY1lZKEspaFkqK3JUQllFPzRJXkcmNkZfRVJSSGBYNEgoVClFVGVkZ1ZiK01QOH44UFYqe3BwfmdHcj5qdWIzJTdiIkxje304dWVEcTQ4dH5dcGAyZkw/cmJfWURPeUAyXm0hM1VrUGNzb0FDPVs8TnBL'@;
put 'eiM3R2VHJHVYQkdifFdlOGk+SDVNek1ZaX1xPk14bE0/a0BYPiFZIzZmVWxoNzptMnJjdWk7LF1CU2t1eUptQkp0YDFnP0MxRG52MUlTY3c+TEZddFghXiRBdCk/fEw/ViI9aT9iW3xAdUMhfV00X1hbSEZtKjUoTmckLm81KT1ub2ZxWF5OUE1pZlA5U01XY1twe3spQiZyYzlCWygqd05xOEQz'@;
put 'XyVBNENdW1dRfkVFVm43SkM3aFF9fXx7cj5bUm5kQWxLPyYzKD9jdy5ydVhpaDFtUDRuWjR3dzhVRFpqIUozNnFkL2FTcm9uJHIxWnZaSj1YITZDdVJDQkRydTVhViU1RU4sbCxPQDwlLjF7eTZNTyx2MWFMOXEuTShIJnk0UyI+eXhJcTJVVzk8SzYobjt6cnx2MVtxKSxbfXhGL3VXdWdYJntY'@;
put 'QyI5ZXJQN3ZzbkFOfHhxUEAyYjBfSnl8SUtZWXcrRUg3LDtYTWU9KiZFL217TnlHPE0/TXlsR2lOZzxlSH1FZj1fYEkpcXp1K0NIc3NRRlVtZ1s/Q3I4fHpKU0JMVmlmI3d8Vms4VE5iZU05TEN5TXA0c1t5azNVXTBDLmA6PnQ6IXFMaihkM3l5TnxZMUt4YzcxJn5xL05xSjNXIz9vI35remFu'@;
put 'bzc3ZjA4TCxgT1F9OHV5RFReQ30vdUMoLj9KPywlcX5+X1pZNjg5NSkjOC5PJFVDSC9IJFNgRTJARGwqQXo1VzVRWEp0WERQXTMyYWJnOkEoMG5YOTpbZD0mWWopIklPckc5JDw9fXk9KndzUiUzWEB1fCV2KHVifCllZzpsb3dRNWx+cj89dkV7e1ZOUkd1Y2ByKHQsPW1yUmBXJDZ3YnpyPD46'@;
put 'K1Baan45LzhUKjpQOjpCTXxCeU1za3hWbTg2Xz41aC4kRGhDeSU3N0l6KEBOcGB2S0IhI2xlK3R+ekxQfCZQeU5Wb0Y2XVhHQDh0cnxXKzMrcmNeaERlUTw7d04yKFpnSFg2cCU/TDUkKGV+dHI/TStzYWVhT01vRzxQRXVSNyliM3ZdS3t2UHVmQ3JLOF9UR20jKl9oOT0+d0YmY3dpZD92aztV'@;
put 'SUo5ZHt4MFdbTk5Xbj9hRitYfnwiIUN4cWdrYiFwSyF4UkorQ0doSUleZVk9aGNnfFh1dSR9TGMrXSJUVkJxbn5+cCldJlV2cSteLFdMUm5Ua2dNO0k4WE1Hai5kZ29iP0N9a2VkNml0PUdpJllrJD9GRFAkIj5NVj00Kzdse1VJSVY6MUtDUjJfVDBoOVAmMSU8JSZeaiF1Lk9AKzBiYk1yWDFG'@;
put 'c3NKQU1DSyR6PGduKTRWMUw9OihUeDNnSTJ1bW40IW8+QH5KbnJSUHFhWVs0P0wrPkRvLi9bKkF6ekZdSnY7PE95e1UrMiheWn1YJVlmSl90eGNkfG9QWnViUEJqYH5lXVs2JkZXNlVIZn5KemJuOGZhTG91clZdKU5fVnk1ZEJ5UHNEN0N6diRSNEBWcSl4fiZPNCQ0NHVHL18wKCxJaWBMR2k6'@;
put 'c1Z0enIoZFNFPnFCdylHdE1dT3pyfEA6cEBUeldAcUhKNmFdQFJ+ZkckX34/WypCRyUkWDA0cl4ue3V0R0Bed296b09uKiVUWltSUUA2Ilg9Y2hjOiZFJXwyK0l6fWJ3LnJ8WURXbUMuMSM+eXdLNlZuUnojV25SY1AhXnR2JDlnXnZnUFlJWy51NDlTKXhffSY3Kyx9KWN5ZHlGTW9RWT8meTE/'@;
put 'U3x4fHsoMCN9bXFQYyl0a0RAcnFELyQ/eiV0e346fDdBRVkvQWtFbnNMRFdfS28mVH4pe2VTRXJ5MGh2NSlnfUdAfU01bT4qaXgmKjQ6X0p5Qn1lNE1dT2NrZDNGTXwjMG43MTB3QFRXKChMfFsye282elojQzkxb1V1XiRVIS9uPlgxdG91RXoqdGxYKmZLYVdvWU0ke2RITHpNQ0xxeWNjNk9h'@;
put 'Ty5nTnpfVn1JYGJ9dX59PSlEIlV9Pi54LyhMTDV1Myg8fEc+RXtBem8jZT0uKmF5OFp7MlNYPXRUQzpKOVFPTTF5TmpKQVFKJVhnRWQ2UnxNSENLMGY9KkF0WmBXKjBDK0YmdnpbJXQ0YGkxbz9FOT58dHVbYm1AXXIqRnB0TDd0c11bTnEoST94ejRbLkxNMnNXelRIJWNsJXw0OTlbYyppKS8o'@;
put 'bSZMOkVdPjN8M1Q+aC9CVmY4dzhnd1kpW3l4JU5KUk9hdih6NEVzLFUvdGRKIX1VWFVRS0s3X0I1cFNqWjNXNCskcyVpSUw9ODhuUzJKL3dGaG0qKTtJQH5BZCRfNUxqYGZxU1ldYDoiTGNaP1VsTUBKbDF0bnNrNzw6RS99TU9NRCJ4c01VQyQrY1ZFbnJDSTxlK1lsQS5fM08kRzlZeDNlZnUs'@;
put 'JVF1YCp1IXI/dzN0PSFtUVZlXiwyXixEVDxGPD59VkI4JDJ8Xks+N0cwTXBWYENSTF43YmV0OHNhTWNnNGl4fDBNT30yWHsmTU4kWVdRN3RJVlZ+PCE9Z3oqfjdtST54VnVuKHFpUC5gTzdfVTdMQW1fQUJoNigoaVBSQkBFfTVQNDsrb0tSPTo/fmptPWh2fV9ZKWBaNE1SY29ZZm9lPylhZDEu'@;
put 'dHBjaiM8fGpKS1JJM0p8X3hJNzpvdzFTSF9pbXNuRDIpYWtRJmh9fSllNG5CcU44fSF3UClIQD4mezt8X042aTc7NHEyfV9FVmtNWXlyR35+R1RpLmdMOXNMRF9rYXMheERwVmM4YEMsI3JWIWtFcloudHNwfXd+OTleclhmQHEia196dz1yZWI/bkBSMV8iZnNjYStGZjtkbV15ayY3dkQqdi5N'@;
put 'NmR8PHt1Jj9ycCVBV2wwRS5MVjFTbmM2W0U5WSgweH4oaF95XilZKVBRZXUxI2FQTSFGSDgqanMqJjpLKzoldDM0NXpzN3AsM10pUU4pYXN6Y3EvRk10MUpMaiNwPURfa0hwcjZHIX5FbFZlVHVAdChiZCZHVihxcU44RzlzVGZYX1s0eF5zQGIrQkthfTlMOU9XWCFVM2hnNGYkWG5mZjA6QH01'@;
put 'P0h5MXxXNGl3Z1doTT5zL3RjZ1ZIY3paUkFbTDA8aDx0fm4+eF5uYSE6cCFrdSI2Qz81YGNTeTZbQkZvZ1J4K0lXL151JDRQdlRbYGRbXjcoY2xzfU5pQXdiJSUoWWhtN2lDb0IwSF1UXlNfaDpPYUV1W2krUGdDeUYrIz10Vz5uNnlQXjUkXzNaU2ZIOnxYWTA+LmBQL3VIL19JWnxIeDN2VlZO'@;
put 'TVRRLlZPOSlrV0lHbG5HIltEfUtjImRaPVR+a3lAXiYqNERFNiRZOkZPMz90OjRjOFB9bDw5YmxeeG1XYWA/SSZ7cWJbJk4rTnNbWzNMdzpjLGZJYnk9UDAiYH1lQk98OldQMjZ0ZS4sSXhgWVBDVjNILms/c3R1RyYrJDxlfmVaW096PmNrdlZ1Ri9xaXouMU83KGgjSDkzbTM/eWswenNeYnYj'@;
put 'Ri9QMD86dUcheE5tcCxpIXtKTipKJjVTTmxfcEg6Un1ne1YrbHgvLkZ+TFRbSEJ4YU1xR1Q9THgxQF8+RVEvTHcxWC9uKDl4YTdIWyRCVCVfP1FRb01Vb19jJTZXP28xW3R+Ql1VblQ8a04+WFJ7aEt2TU1dfT1uRFlSX0N9fCtCTzxNZWRGUkh6dn1layVYSmpHc2JtNVhEbT5RQUFHMiE+SVc0'@;
put 'bT5aNkNCKEpUe3lIX2A6SiRNc3UhZU5MSmZsYnIwWjc+TXcpMCU8fHFNYEtiPFZ4eltPKlV+JmFjWSJJIn1RenU+dClgV2QjdllScT8sK2pBKSs4WjR8fEUqYCZVdCpQMCYrXyZETig7QSt2WVZ6LzFPcGFVWGoheWRrPD5sU25kI24pVlE1d04rJTQ0dyQ4WHxISXw6QT4wLExfXjNKYH4pKXxb'@;
put 'SCo8fE1le2ZRKz5ZeltLaUMxQmp5KFpUbiE3TVlEe2IhYWZSdHcoYHkzWFFvUihHTCxKSDVsOXt8IVRNVTBpQVl+WntyN2M9KFc1K1QzaCwkMH09SHl8bUdvX0NEPXJsITElPUZtPTN5byF4YT5Nb3pbfjBKQz11KyQrXiM8IyJgZHRpczp5TDA/KE9MRy9gS3EqWChVJjw3SWt9Xnh7NVhQemR8'@;
put 'cWFOfF1SaXVedjEqOX55Oyl3QHBwKWBXI01ZTGl0W1ZaeTkmUDRVfS82IztDfkFrRGdTQFkySF4sY0I3M1UvRWRzPGdMdn0+aSJ0WntaLnJ9RkxEXTRYcUB+aTNDQFF2QV9+UUdae0Z8MmprYTEvPHVTJX5CbEwkLFNjJDtuI2lhNUlpVzw7RnxNZjBibClpVG9kanAibml7PmFIL25HNStjQHZB'@;
put 'aEA7S3VHQXlBQU0wSCIrMmg1SjksMm5LNmRVSiU+SG9TXjBOQzljdyssTF1qeW9EQUBAc0FzSWtxJS80YyNQbDRlVlk0dVdfOTxrYFEiVE9QQm8ieVVYUnY0SWsiQUFBQUFBX2tnQSNgWSJhUkolcCUrRkxDLyphLzFGSj1KL3xIL158Umc0R01uNWVVZnl3dTl4eyZqZU5gKWpfbX1wV0AuY3hi'@;
put 'Xn4mMnovPDMiLy9admx5Kzc9SCU2WTxuQWpvezs5Zns5WiNHRWlRdzJmSSoqQj9tNWFFR3MvWnBqflE7TnAodElmXnhzdzt9QjVSYXJHPGpYUlNGd202LHFkSFlqXnZxUm9DblVtcDciMUFiO2E3TDFYbn09bSRQISg3TVNFPShUYDRMdSEpMHtSZGhFYWAhOzE/M1I1IypsJD9LSHdgK1UreU8y'@;
put 'MU8/NU1UVGs9Q3omOH1kYmBGQ25yOFB+d3Y8Ry5bTmF7eW9nJldXcXYhIWdlfi9YI20pW117XXFObTFZdlp3SWlOWmJUQCl5Smt1VEMlbH1rW3JaZCQxPC4rTjUsVktpVWlCTnAzbF1FbCpMRmw4UlFqYDtqN31yQ2xQRjswUzZ8N0FEI1hUan5JVGE/cmA+bUFKdnx7MihjYnVPW1FEOXI4NC9L'@;
put 'Wj5NL2JySnYidyZEP3x0MH12dUdodTtbWFAoWmNNO3A7Q01oIzt9Oz17KiF4M3ZLNGw1LHo6fiZLKCt2Z3BtMV1iKXAhQD59Sy5hN0V5KSlUfVBfJm00O0p5QmxSSUhpK3JtYzx9XzFRXS5UbjVoV0pMe1ZbVF87XzYwOChUZVFoKzU8LiMrfFc2c2dgRmJIfVFeb25FYTN1Y0swekNwckZZdnZW'@;
put 'M1Q8ZCVNVmp5KGN7RSQ6OVpXTzpteEkmQEZ6WWAqeUNZX0BHbGVSV1hIOnk6NndyI0FLWWcubV1udzBMVlI+fjt8VlIzP0RgayZvNUB4V2VUekFZU3RCXU1VWFlGRD9sXywkdXExMz4wV1sxVXVLLExuRksqIig1P2IsOT87QF5fY0FAJjV0VlZmIylOYk96VXRjTDBEYmpSK042NygleyMwfF01'@;
put 'Izo8UH0mbXRAQE5AZUcoaFh4VHJKNVYqME9XSWgwRFR1Pnd0NnckKEtIT3JsPlE5Y241d185eGlbZD9fYmM7O3xuZCJuUDJVeiV3KH17I3d+WGgwZFhtNDgseXdXNSpoXyZKNEc8SlBUcCF2dn5XeC84eWYoMVFSX2RVNCsrOkJ6OGFabj5BJUJDeU44OTJka1swVU9OeXsqVnY2ejFPc3ZId2F7'@;
put 'RXZdUmphWmM5QixaMm9aeTZXXkNeRltHVEBObFVZPnY0YEM5MDR0fHloPDg4OnxpUXVHY20qeShTRGFaVjJlXzl8bm4lQSNIKXcmIy5YM2Q7eUNqODNgYipEcWYyb0AhNChdWlk+dnRiJmZ2SUBkPl0zNGVkKERkJlZAcnhQb05iXyokd1l1c3BjN0xYX1l2R34uQ19zZCw3Szc0YCRkYXFANDps'@;
put 'K25NfHA5L3BxdD5ofnQpTG1iRXFDZm9AYCxPclBHJjFwIylWKyVOWitpTHVhUisoXzw2bXNGb1NLLmpGNV5DdHlHR2BqRnd2VDh8SWAxbTt8MTtaTm9tYjVEQk9EcDlbQXk0JmZeKy80MGBlUGF4XndQKj1mNyM+TlM/RmkmRGVRclVdWitpeFJFW0plTz1wSXRsd1RJQD98MDhSKmB3dnZzMT4h'@;
put 'MXY7Uz9tSFVaaChHUDZjNnF2LmV4K2NSZz9KekZKJElCTns9d3dZbFtRbUdvaHpbXkhBSW9tPSVKNUt7fCpYYW9JO2gyWU5BOmdOMEpeW09Qci5HanlYKVU2UTVXI2xrSW1bWWJkY3chbnRwJU53InYoRzhbVWZ6bk0+LEY1d3wuNV9DXmd2OllNSDc5cWMkJjVWT19xOGFBek8+Plh9YV9hLiU1'@;
put 'WW93VFJ4PmU9Vy5nfSRBYCZieEpPQ2QrMXQsaTljKWtaVylWSiJFcTtDcTRzdDBWb31jI2pELklkaE9QPU5JV2p+WlVyR1BzREx1djQxLHN3RnRyL2JBZ1tbZjB2SnMuLD8oPHd6enBYW1deaThNMT9Rd10lZnNycGY8bSJNOHopMUk9K1okKTJuZD5vZHx1QShHKl1VKW98I3VIKH1uOj8zYk4q'@;
put 'Wj0vbSh9YHRubnZ4d3lkd0A9PX1hQyFaSHhHIW17c0AoQDRMP3BubF4vT1Q5VFhPPT9Fb2ZoSkBCJSptaVF6MFdKVGxhSklbQGhSIkh1R2dtKiY+eXBMNjh0XXNQdGN5Pm9HdUE8bD5kfWg7Q3o+bE5STEpPbE07aU5SdW4rYHl5fktJOW93fVZpLk9POD1YXjoqQlQ6cFhYSzlyNEcuUVZYREtu'@;
put 'V3k/ZmZAfDdPQShpM15JWnwoMC5fTEFmRzF9VVtyfTUkdHZlX2ssXSN4ZDdFZnJ8YnNRJVVlWiF+NUhOMDtWY2lwanZKdTlZTnpVe2NjdGVJPlguPW90XSRQU1ZvZzMsbmM1Ni89KSV5YzMmZzdaZVYhLmg0dHZrP2dkbFA9SG9gUFJRZ3h4IitFVlEyfEtLc2ozJFg9OVl8TW8hWyxTaDR8eUkr'@;
put 'RHNtNGdkS1tqenRjZVpJZUVndFgqQGZmd14mNFlBRV5VV31IbVtRZHpwd3okdWA3PFtrWERfZWo5WG46OWh0X1t1ZypGKS5EbWEmVHBhfjs9blpIVnM4UGh1MXYlZiU3X0wwdzczJUhqTj5hOjVlL0xraz9HVy85WERvPihYPnRDdEtDKysqaE1LK1Y2Ol9ob0B5WGxuVFEoNE1SZDVteUl8YD4x'@;
put 'UVhGdD1PLFpwSmJ8ciJQKyhnOX5ldHRUVUJQKy4lQkt7eE0reldfb199WGNmPVguLl5LPllgKSQmfHM3Vk5AKTJ8YEplJltlJWEiXTxbZE1YYFEoMUh3QnNeKG81SEt8anBRS244JWExSHA5WF5EVzRZZCwhZUVrS0h9VG8+a3YrL01iQ2FdRGt8MV99fWRNTUBvU2VEb1ZVTF4lejB0Q297Uk1h'@;
put 'Zi5VU0cpSFVkaEQ5cWxLV1YpQnpCX29LSnpLQzVvZzxzVDhaIyV+U25WTjhGfDI1fG9IKSI7KXEwQCRYT3FlIih2JXRpW04ya19bbGxKQHp9IjNdcHk+SGpYOmM7PzwyaWkxLz9zIU4icTl2UkBwekJCMVtreUptM3RzL2hfLiNUTGM5LkVIMCszTXZqaFBpVzh+cjw6XXE1Y1BJPmJJXjQ+b30u'@;
put 'JE4/KyRfPTI/P082XSlVYnUoTH5kbVFde28pbSRPejlDP2Eycl91elAzIk44ez17c2BfJSEseH1dbXB+JjZoVzxOQGV0PGc1VWZDeSU+OWl4RjQvaXw9JHJwMFc/ckhRdDdGaWVUaWg4MDBtXXd2YkkhZikhWDs9UD47PDZeNl9DbWYlWFFJOEEobTd6a2UmPVtqQnxKIXFCWiEmTGBqIXJeakJt'@;
put 'JnYyTnsreEU+dVRaOk1pZlF1fTlvd24lajZzcy53aSVWYjtNZWY+QD46Rj9eU2ZkNSYlOHxSWDMkS08/In1gaGJrVVIoaCNue1RMNmw6I3Jdai9vKEtDRTtoKGZkZGpGJlttQWQkVChfWnx0NlpXN0xAd25ecUB1MzBaXiE7dSxDI3Z8fVs6PnF6XzgoYVA+YmApUHRpUzBPfGUlfS83RXI7T19I'@;
put 'RUYseGF+OzpyUCIxamJGQGU/ZG8sUC9xIVJQSjU8SSsjTV99Q2R2JWdFXSRgLH50Y3Y9IkdvQmEidypebkRyXV96RU4iZlttSkY7PlZ3ZDUsMzplTUcwNWFgfTBQOW1fLGRJKGd9OmB4OmxSciQqLzc9U0BnTlNpcnxAaHBiKiZCWCl1TC5VPUJNNXwpTkwkKXA8QHJOJXc0aFN7P2JPfXprdT1Q'@;
put 'KExFW35HVyNXWFZ4NH1WMyw5LGhobT9bejZRQVFNPCE8W3dMV0BLNUFePHxTQmtJYyNyQmsvTFYpWStyPjJHKXY2STROUCxjQDR1PnJ+TX5aYHd7S35zTn1ZO0Z+d0Q6WDR9SWw/Zl0yTkBpZT1wZ3NKV2JjI3M7TjlGLENKTFoselt6RClgalVjNzJScUNFSiQ9Rig9P2tbOXJBUzY/U3klOkox'@;
put 'VDxaRzpQQX40SnFsRyxUYmB1NT4mfCJtKGZKK1Nvbn1+aTArIXlOOlo1R2Y7ZTciJUNCIT5sV0tiTSYlRkt7bk5ybn1yOC9lYVNwMn1XamhgJUx3OlBEU3JsYElmcVEsa2hRdmZVJShzcnRFbVcxQkt8I0opQjBQT3tvWjdrOiVEPDZWfFc2JHA+WEchYWYjb3JPKjMuZEBQJHFqWigyX252ZUVY'@;
put 'UT54JHpeQzt8a2djSnN+X3MzQD0/PFtnd1tWQkVkeSYyKSgrOD1Ae0RoVzRgfl9lUDklWytHcjBzcXMlLlA0UF4jQW48T2ZuWz16XTxve3BvWT8lJDF5ekZmO2gmc2VgSEFFYzBNdz1LeWwyeHghTFY2KEhqVWJfYEN8KGA8P01AI2Q2WWtJS25dO0NJP0Vyb2V1W1B1YmVFd0h1LHtGdXdKfGdO'@;
put 'T2dTOn11eHJtPnc9IXNeP2VFcXJacntCbntuVn53OnFRO18jcCs/W2lUUXYlVzguOnBeUz9gPUI6ejpUUTo2MzFpN3xUOV8vMDBVNmp9eWttWyN9fF1jW0xgQWtPNG1iczM1eGY4LzRqdz5UQTFgQGMhS2ZyfSQxWXJdfn5eU2JiSEdlOyxMSGt9dDQ1dlhSfX4kb1A+bWFMSDh6NW4ibSJqa1Nf'@;
put 'S0BZRzprb1ZQbXBTfndjfnNyT0lGOmtCfHxycSs4ez4waiU7NHZAI2ZrP041RUVJfCY6QzN+flsqNHdBNW1dVHMwT0U9ayg6W0tKWmg1SyNKaU4lVzZvbmdtVT9zJjJGP3EuSl1ge15kMyNmPyJxbFk7W0lXWCMrfHZbV3JrPkBfbCZ3a2kzOmo3cWVqKll7LHVyQU9zZypwdl5tVjo/bGJCIl1M'@;
put 'VGBrVz5MdV89P3M9T01wRDQzYDo2KGVQSSpiWjxaWjF7Yi5hQihgL0EoeTBKLzNaaXVGWylhVEVUMGhZMzlkXllvZE9+Tk1VTE01O2ZbMlAiMnVQaFs3NzBoTlFvSH4vYlQ1KylEIUtXL3FhY2dVOl5gUSg3eGtkSmZlMDBOQkwoa0F9dk1IaWhMJEIzUXJ0TEd1eTZfPlBMaSo5I2xKM3htJCh8'@;
put 'VTpMc19kY3deXTcpQHU8bV8iVmg6OlNwTnheNFYzTX5jfCNIOnhES2M+eF5TbzFpMD8xMW9LUW5FNipIMC99dD9eUGImTCNpLzxIYiQsfEwkQDRSdT0pM2dLOmVRI2JiU35YP3EkYSU8O1JgM288a05BWmleLHc2QH52NjNUYjtXYixRKzMkZFc3d2c9WlhSR0sqUHVub1JBK0pzemJENCtybDNI'@;
put 'O2o1dlddPTBJU1NUbWBackB+YWJAc3M1KWxgMU9scFpVXSRjdjcmNUY8UC9TekZBOTNSTTI7VjdUdyRXc3N5aVtieWRBQHplUzp6WSp+az4pe29sTkN+cWxlZFRIYFAxMDRYbEZ9PSxVeyVXSV9kKGBseSZteHIxImp1eWspPTlfWVh5RUdDfHwpLklUaV8sTmp0RkB+Jl1PZ0IzfXE9dHVjIiVK'@;
put 'eyw8aTYrMGVqSTA9Nzd8RGVFXVEiLi5lZmglbTxMYGdCfVYmVWx1Y0ZMRlE5eiZdWnNQeSslSTs5b3w5VVt7Xk1MQ2wuYDNCZiNfQyh8QkdVWX4lRGhGfm9kbHcyR3gyMlM1M3ZmNX1+YVd4PkJEZUk/ME0rZX5gfjtEU28vWD03dlNaPkN8S35leUw/QXgsI0NNYnFQS2FLZHlPIz0jYFVYRTRT'@;
put 'V31FRXRhVShMcyFBfFZmS1U5b3xWLndNPVFOSmE7I2JAVlQ9KSJRN1BLcGdfRWxXQlQ6blNgaCZfTT8zc1lveWgsVj9tO0F9KCJEQz99O1ZAR3pbUlVsaSJnSGAvQVVbdWk8MkMqbUpQYFk7I281akgoKGh2fT9vKVhJTStSdi81cXI+X3BocHJEcF1GQj8wXyZMcyNBPlY2SmR5RndzLmgxQlI3'@;
put 'T0NoOUY6Lz9PfnRjJE5NI2hfY3dnSEU4fEVVNEgwc156c0ZnZiV3WktNZlUjI0R4bVtvKjVTM305OVdKMjdWMSh7XjRsNHVrZy9aJE5lQl4pbHIkeH1FfkslNG8uenNKV1BMLlUqTjJMKDY6XnFKTCZ7MylDPDx3MmpRcShdUmNHfmhvSyRiZkkiNC85UERAYUJkS0sxMlo8XyZ3O3M8QC9ZUWxU'@;
put 'NktUIT9yPn52Rz47fVs3KFVePy5JYVNIXjpSYVhIOzwqSTAuaT8vMDJZeTNQQnFGKjNMVUFhOUMyTlskQ11xd3RjZDxCZDN2IzZSO3U0SkhVOkcleWIyb3hzWkxzTU4iXihraUQvWkxXRTUxZi9kZml0ITNxYmNubEo1UlN5ayJ6QmNpMzpMeH05Y1tBN11UbiZZQXchWVNiZDNwbTYlWjI5Ukd0'@;
put 'YysiJVJaX3tJKTUsYiVDLHhobGw2dzdjPXRSR3R6UUohYzQ9MHhIfS5naVpnfDg8X1BLU2VtPERBJS44OGxwVlBWUHh+WFN7cyZPRyg9YlJhST5nREcuVUBxR0NfN25qRWtyO145emR6dkEzNVROLi9uLkdQdip0VV57T3FROF1QYX5iMXI1VCsuRHJzTCR2WV9wMHU9UXEheDU1Lyx1YDdPYFZN'@;
put 'Kkd5ZkVrdGp+RG5nK1Zec2NdQVR6eTd6R0trZCt3U1VWT0xzUkxpO041IlR8dl9MUz1VM3IrXUA4QGM/JHwuWTdEV3kwOjpeaVl5MmlCaGx8eW19QEhqVGw9L1szM1ZPe213Y3R3KmtSWjtHblR0cGA1JEtaR2pZcWFMXlEkVFhDQlg/UikwPyNXej1neXZgKVtsZXxfVTN0OTwjcCV2P2kucGs9'@;
put 'czBNLmZiMG02Q1FCeVdFXilvVSUzUVh1K3x8cUE7ZF9aR1o3XzEiRnprNV9jb0gxW2BWKyhhdG9Zd3g2OHdwMjhqfCp8XTdpQ1ohelpZN3pWclNuV2hZLEVCNGV+bCI+dEJ3WSF7KT1PKTNwdFZHRWw6PlV7b3piTihoZUVuMTxKLFFxJk8xVUhQflVhMUQlb1hbMCg5YDI0bGEqd3xKQmo8WGR1'@;
put 'VyFBTDV4TUdFRHxrezNJfkRMRzApZGM1PmMxT3k5Z1EwcU5jKlNiNXNhLm16VWVWZUxgNVNxV1F2QjR8WkheJXFoXjx+O3dtbmV+OXdPNmJzNEpsOzhUL1BVZEIpZyNQdlJhdGg7PEQubDNQK3VqITZxQkRrbHdKY1t6QWo0OCVfOi4/a2Z5OW84QWhWRSVQNFU3JWcyenpQVTttcF97Iy9rMjth'@;
put 'ZV1vWTFWPkNCRVhvITI/cF1ReyxnYHZ8NSlYMXZZaVRjTkA2SUI+d1lsJEQrYTAhLD9xU1UrcyNvRU5nVm1yTlVEelRbfiZkIUJxNWU6THdSeDpkWlFEQmV5LCYvfTc2RXJCLn14Ml5nPih7M1RicX16I1MrRzJTKmxZaylsWFNWQ3koVTdle1okRmpfdDRBYlRzc1AlNytfe2dFLmtVP0p6M1BL'@;
put 'dmN4NUU5TmwzN0JPSlR1ck5YWWdvVCtFcFRKfF1PZ0hdRVMpOHkucG1ZaGJjKGopMVhaInAoNEl1cWZPKncpJHFrRlpVO3QoelgxUkE9RkQ3Kj1hUzRKXT9sO3ZzZmtALlEmU1k1dnh8b0ZCR2IuPXd0dyRASkBiJCpnSkZ1RyReZysoYEd5Q2BWU3oyVDMyby4kcXV5dGE2JiJsaGJHeVk4NWBg'@;
put 'OHh3XkxAJDJSbylXVmQ3ZUcyVFZhJnRNRnVZb1MlfFNxTT9zQi5qbUxEZjpIRiJMYDlPcFtbQiNHeG0+LzRYXzMuVGEkeXd+PVo+Rj8uPT5iY3EvJm4zcj4oaTp0YkdzPkdofkk+WVlDcTwjSmomS01nfXl6bnhCXjMsYVlKMkxeOUxUbDNpUWtnaiNRUGk2Pmg/LCQ5ZiN1Z2BbVV9zSyJDKXlP'@;
put 'aHVSP0MwZ1FLVnRofWRsOip1b1EybDUqRTUueEg2KWRBU19OOihnXn4uTG0zLjpVLGtxPSYjJi9nbFIjRmFMKWk3c2VjXiM6TzluRjQme04uWVZPLlNKN1MhezcyIlI8bkdDTFA6QCl5SUE2XXRvdWU+VWlfJWZfamxTP1dbV3YwV157WUkkYSJuWTk2KSQ3SVllVClnUihgKUc2eU1+U3hhIW9S'@;
put 'Z0NfPzR1bXYxXWYzYHZGXnRMUElSJS9RM1MpXmExRXZXU0wuYEBXIWN2QCFXY2poLyUlcWBiVVAxQmV5VSRPOUJgY3FHVVR9PjVGPFQjeiRnbHZyPl9+KnJrSG5CVCohR0k9WWtwS2c0TEZ1cnJGMFFXNCFOb31gYXZsd10jQUFxJiUvKmt5T3ZLbntrYHVoZHc/d2JUQ25ZQ01AcTQ3Mi4+JjJa'@;
put 'cTVCMFNGbktNNiNkP1JxZy58OjxGQGhvSXxTJD5uPDw1PFN2Uz1Xbz5pV1IjP1B0QE83ZyVHIyllcjhNcWEmXjkiS2FePFRRInUmenIkXWNsfC4wQ1djUFtJQzZSOTlgbCZuOCJ5QjlpSHVVfjVxKEklaVhrakEuS2p3bUNhRHtFQE9FO1k2WmQmYnV5Jk9USGx9Km9iYTl+VFIvUnN5WD1PKHY5'@;
put 'MDhPd0xgYUttbj5ZKD1wdyQhYCMyZWBIV2d+KildeFhfUS5oPyhvV1pSYVhmW0s8SzJtbl4xdURhVG5XXnwxU0NnRTtgdktXM35JKCNgbn1GQjhufHNCR3h4LlNEWSspM3hHb1tBK2NVKXM6T1RmWitmflY7fklyZXhPbUl+UT95VlRhdjsvNj8xRkd1Z3xULF1YW2JtdU0lPVFIVz5HN2lOPGFV'@;
put 'YVEia1pFVkUsZGAod05AODlIRnlIMGVfcXxkWiQ3PFg8PCR7MTRbaVpAUmg/UGNgPytBOFZPVnQiSUJpXU9PMDs3WWRFdSo4TysmJXA9S0hHL3NFbEYqI3QqYyYxcy5Ia0FNRXJBeXYmL3VNOz0/QzRvbEptaEYwPitAXkUwXSIqPjZpOiZhKFolaHJqbzk6ZF9nNzhvYG9QL0J3RTl7WHtyZl5s'@;
put 'UU4xTnNfWUU7cWkza0lsNm1qXl5HNEFBJDhkYGtPISptUzNISFIwUFhwcykrWmIjQmhURDpORF1wNzBOfnldZVRzfWcuPUBNWE43dV5manJ4VUxbOVtIUGtjUExFWnBKSHg4TUIxTkJ7bHJRNiZlJTRPfilYNmYhNCNFdUMkd2tMWSYmQHUhSWo3Oi84a1kyZ2AzKH4oPSR+NkN8cih7UDp8c1p5'@;
put 'S2NJPChIOSZbYHAxUH5fWzdtcDEjOF18VkMvIyNvSip3SUEuX1JiUDhUXSwmRE1qTUw4IjFyYmtOZlp9eEo+PlRKJF5aZDdXPEVSdDxROyxffX5sKGAzay92fShJU3R7NUBfTyVCVTxiYkVdPnYxbmhjc2BbaygiRkIqZF1DTylEd1l7O1NvNDwoeTtuQ1hARWQvcCNZYyE5d3xlRk93RndLOmk/'@;
put 'az5zUTY6V0dMMkZdMyJfNExRejspXlE4dnM7ckVwUlNhLEkrViEhNT5HOCZ0fHliYj0+Z102OSVidV5oIjZ9MSxoLG5dR2c7YTxGQlp1O204VkVTcW9PJGVMKztXSFN9KVB+cl9TLyhFN1hfN0Q1QXNLKzRbSkhyfCo4Km0jOjdXKXZXfn1KQzZIfTUycFtpODticGM9JjltV0VYXlBRYzlFPlpT'@;
put 'TjFwZyVqZCZZQTtoKz4sJnMocHFdYFlRaT5nQiw+QzxkQVBWeXQ1NGVDRm1sUDVNIyZVflNxLFkqUT9YMDxCbV47cUE6bllnV3huX1ZCW3FRaiFGcDA9NyN1IU9rU1pXJF1URDtoNnVhdD4yfjRbclh8WTQ0djg7czNrXnQsa085RjpxP3dgR3E7ITVnfj4lRXFqSz9iISgrWiRvOyhLVX5JTmxX'@;
put 'cHphVT5ZPlZ9UkpbZEFQPXFFZnFFUClhPV51K0JBayJWO3kxeVZFcFhpZEcmNVM7V3psLnAuKnc+S2wsdXkqUjl0O348NkB3NVVJM3MoYylmZVF5fGV1c2dUVUheUEVaaUFwJiJqOzh4PXZMdl1EVnJqWClrR0doPkkwRXojLngzQFlCTl9dblNDfk9pRU9OOG0uITR3KTJsLkFWVWRuNkJWZDZw'@;
put 'Nk16dVdrdEZXbHRQMCIlMiZmW3BKOWRHS1kve1NZJTkwfGI8XyltUyokQFdARyowdkxaSkNVbEpbYWFFUXFBMUNrQ1dbcjhNNk9uJFkqS3tDMERAZW5LeTx+dFVifiQ6Vl9pZkFGKSoqMTR2QlVwNjg1fnUpbFJJIS9Dcjohemp6JS96QSpmPWNUPix8ZVF6LnxMZmYvVE5pMTxMcEZrRjlTeGNv'@;
put 'aUMkQlMpY3VlaiFASWpDfCxwMGF7ZV5BM3VlZzwkWFRXXVo3RkEqdG51VC97PmszS294fTQsUCxMTlRYLG9KfDN6MWxZOmc6R012XlY3ZGNTfnZKP11zZCtWZitxbSVwRl5bVCV6bzx3VHklUjFaTnt7dWVxQ1pUU3FUJGRMX0lQXXhqfXEpZHd5TWIwI3FGNzlFPD0vXWtFUUNUbElYdHgjOU9W'@;
put 'YGpfYDxIJiMmWChRfDdQdn13WFBjYDRfeWU2LDZEbFgiP3ZrJENnKig0XWdUQGt1ST92NkZEP1FwInNZb2A8dWBvbi9ZOzRKY04qPVc3TX5pM1ExNUVeeSRDZzlURGdoYlZqdU82JCY9MFhvbldTLH1xT2JSfkBKN2pgJDJxZkd+d3h+Pn1jOmlhVT00ciVZbExhRGhCLy5CTysuYihIdGRjRDNe'@;
put 'Ml9GdnRheWRJX3kkZjklQDMvNEhOdWZIRiVPXV5NQDNpfVtKVX5wOyo/emRqLmhfSHA6OkB6ZE9kUjVyREYlJHk+WzReciZVT0QzT25zRW0+RSZLclV2Y3NtU0pgMVMuZWB9L0NldCNrQCVFSjRrdiE7OTlefVteXWdyIkUmV30mW2g9ZjMyLyh8SUp0YCRvUjQqfCptUUdwSz45e3RDSSYyOms1'@;
put 'PFVtUCJ9MCVrO1t8cWpOP0wzYURyRUx0TVNYXSlAWGhRW25qMXJuKl8lPkRHYnk2QHo8VFEob1BWK0RqZVh0eSMkTi5Pb3Z9blNwel5xOjohQndeeEpgeVtxTFcoOGt9Y3J4ditDKW82VFBuRTYpQ1koIlNMclJ5SXVeOzdlRGcjRFVDK1hifS5JaXx+c2x6YilYRFVuMVRMZkF6TClJTD8uXypq'@;
put 'dFEjYkFrdiZaNXYhLyN8LGFfPjpiZnt+emRERlhQVDJSXT1Vc2wlNnxdNzIzWDxkeFU0dFBfOlAvbmc9cDZvfjk5Vk1vfns2L1ZrZ0lAK0FvJCNMUWdSbTEqa216Vj9YSi9ZRE95RGcxTV9kZW0hRTN1KmJ9ajQwKlQjZWFyNXBYYzxvOk1JeHlXSGRBOmJQSitGInE1OCJMMWRWI3xQfm9Ca3BS'@;
put 'JlZKWzgiIi9oRmR1YiMkZEh8fGUyfjdsSDJSbG84NilgaiIrbkhfW1VJJnQ6KHZGaWp5VGBkOXZZWis6TEpLSnhBQ0lBNF9zdTozRTN9bV5HP3M2eFRQZyxWaUJEckNWJHIvQlF3SzJUUkduPlFvM0BQWEBrdFZYL154SyFuOVspbWsvIXpvV2FiYWJKdEdWZjRCXWcqPDwhLGJMXnsye1JwMypS'@;
put 'N0Q6VUgjWyRtQFtEa2kzSUlLRUQ2P3FmKEBFfmxjXiJrbG5RUCtHNmhKTC9abl0hajxUKWVjQiQyQ3NLYUVfOX1AVWNDRUIoVENrcStVMS80LnMxWyIxe0R3XlFsKW1TTit4cF9EVyV9WUAkJCN3XnFBSFA9NSIiSkNifDtGNkN1LCYrUiUwI21tVUtgPCZ5ayE9OjtjQHkpeyosdmQ4TmEyVlVN'@;
put 'WHVCPF4oISY7a0c0VjtuXz99MUh0VHd9e0tjJil1OW8oMyFbZilrJSNdQHhsUVM6LFt8ZGsxaS5CUDElPTMmO05CTDZjS21CaVNyWER1MldROmJBREJJUE4vZ3cvNEAmfk90NixDI0s6IjFWWChSI094XXBAR1g6VXY2QGpgQVs5NzpqUSJ0YWcoV2F8cEVTcjswNHFWTW1PZiVYJSJxI3o9Xj9o'@;
put 'U2hUdn19MCExMEU9WHJNIzVTMU5bTig3fDp+OU5vN3I6WENKbWtwYC43QjRiPng8RFtfek1XZSQxQkFLdkEiYmcwZnpzenZsMixscHVre3l7YlI6NUAvSERyIjtTZUs2SzpTKyt1VCE7M0Yja2dGSyRHSWw8Zn5WPEk8NGcpcU50QEomPkgjRWp3TCNzcDVZLFJmTz1Ccm93PGx8OSRlL2FHcCVP'@;
put 'VF9mfUVCOVhEK2xTMXtlb1o4LHs/amtuZH52V3IxSGN6JGgrU004UXNuV0lOQGI6eU4sLnQpST5tZWFBLi8lfEIybWFiPTkyUEgyJEI3d24mYiVIY1NTcldjZXRYfDh1P1RnaDlsck1uNE4rUlhZfnlraUZpdHgiZWMpU0lwRnttRz90ej9eTkJbZFpUWEoqTj8rQlNbOUwqfjc2Tkh8en4uRlU0'@;
put 'SXp9NklfVnghK1pfZEUsdHJLYT8qcEA+Z0JbNm8hWFMjOEs3UEY4VHVOQll0b09iL2FCQUQhfVpJKE16ck06NjBJSCh9dWsvfFBtOXdufG4hR3FBfDNYaEVpVU8jKEdjZCJ4Zms7cnlFZXovOzI7T3B6MiszJWNLU0g8TGdRNmZtTFcpeTolYmA9YjNMNmd3MT1tXypMLjZ8K1RaVFJqM14vOG0s'@;
put 'P1FRQj88O2l0XSQkVjdwfSlwIjd3PEEyZW9lNkdmVTduM1M1W1dPZTZjJUd4enBiK3h+WC5daFhMc3s3VFFVbl1aOmM6NUQ/fEZsTkFtcDFCbUQxSDdOXTRkaVcxMGtYOlJhRU5sKCRzcyE0cGpmPz1GKzxQP3I7NDJTTVtIZlc2SXdZRGQzUlF7KjhsWUwqa1EmWUBjfCxzJWpfLER9K1EyWXNF'@;
put 'NCMzInNGRU4qZ2UjR31+azIxLmN6KlEuW0M2ZEpTcCpzaypoP1smfUZpViJJL2BbaFZNQDV6Q0U7KGYmQGdHeTsjXXt0TTBAWT0/WGdFSXJuTHAkfUFyfiQiY21maCVsU1QsOUErRDpGR0dSeTo0TFdzMHp8PFFqJHouaTEkXiQ+K15VeEo6fnZZIUN6QzBMOmYydEJ9RCY1cyRuRTR6JV9FQzUq'@;
put 'ViVhM0lPa2JKdy4vS0MiajQuR0NffEokQCVubSpnVmlGXT9ZKm9DMGFATWp0dD1PYCFxVTtDbkg0PjkuMmhUfj1QUWx6SWZTeFVCVVJAeVswJU0sKX0lcjddUW9ndzw/bE5xT2N3czYrTWVXYDkpcy5pfDAxIXJwfS85PVU5Xj1JK1JDXnYvcEpIJmE7OD5PNXdAXjxuI1ZKLjFpYVcpNSU0fntM'@;
put 'aHt8b2R3dT4pI3xJIzByeXRyJUUvcDBTK3xyd2I9TzpPUDZ5Wm0pTF9yX1ZZUzF7S3lQfU4sWDVacCNzXS9YT2JxTzFZMDp0KGFKaFBXfnMqeW1YbUhKQXVTW00+eVlLSn5vclhoTmNBMXJtI0klRWhiVUI/Qm5ReipARzhDY2FtZ2VIT2R7TGljUjUkKmE4RjNbYS9vViQ9fTR5KTNgQCZCd09F'@;
put 'dVUyYk4hKHZJOztOcEwuZ2NzdSZxPVVgK0EpQmgvOFdjeEZBdD1GaHx8RiNnJHtEdXxQe210I2ZLT2xjVDhNN1skIl5CUWlzaG0lbHcpZE9DT2hvfTgudktUeF0hfjp7VXFsXThCYT9CW1Frdy5+My4hMkZgKnxzRGU8RUtCO3NbWyk8WSgqdzNwbFJ+JSV5Ril9MVhaaEhXeVVbOztIcTQmOyo1'@;
put 'czIsO096a3V6I0cvUTBtZ2tbbHJGX3clQ0F7PW4uMUhSMCtrIXB9WDttczlOWWE3YHN1KSpHSjxlVX1PIz8uXnIqWX4sRyFmJiIxMFVPYlZyUjZje01kMFM+dnM7UyxSYCg1a2IhPip3diRCUC5YdjcmMG9HZDRBX3VKYCQyKTx7VGkkVmJeI3tlYXw1aFk2e3l7U311VEB8KnEuO20pVn5le1Np'@;
put 'QGY4L1FgZnAvakZQfE4vU1FvKW04c2FKP2JVai8+fT4+Oi59KCZRYVNvb1c5Qm8vXz8zTGMyNj4samp4eFk2TURqbz9dJjRPTFliI3JzdmpzfVpGQVdPeE81RVJyKEhAX1hOYGtgOVglbEN+K2ReKVhuMFp1LHAvSmtDJWRTO0E3akV9alJMW1VefDFLM0thQU8iZ1g7YEMiQ0ZycCVBMWFBMlhV'@;
put 'TkFwY3RGVn5WP0psdEYwKXZKLlptOExae2BvTz5oci9HaXJ1fCNDP00qNUheblA6O150blYyMm8pXWw6XUZkSkk2OkclOU8yPX5KL2hfVnM9Ojt7QjZ8R1VDcHM4X2A8I1E5XUtUdnVndTE+a0AmdCxBUVkoRjI8Jm5HekxZYVAhYFczVVloIjpVbzVnQ3lmVXdiaGhrUHJxdkg1YmBbYjVFe2R2'@;
put 'aS8jQVljfm44YEg6K0E4QTRmMSVlSUdubUc/MEtIRXc3OEs+TE9UMHJYbVdwa0pvK2R4RSlBazVJXThhTEhoRDsoaSg7Jl1aO2p2LEFMe2l+LENkeDFsP1d1SEZQNE8/SGhKNmQqMUM5JF1gS01KRks0OHhZfU1tTF9RdFtVazRlaChJOS9bWTpjLmgpJUVBc3lKKGpQOU9nQUxjamZWeEhKQDVp'@;
put 'WDF0P1E+T1s7XktEby5Vfk1lQlFrRXt0TTIoTztJcnlZIW4zL0wldWBmIzEjXytzREpNaF5DLzFvMDB8PzUuSWRgTldEdjJqZ25NXlN9a35+VzFKZUd4MihhK3hgV1l3Wy9zMSY4LE9EY3VtJnN1IyhhRkYhW1pPUUpVZk1CTXhWR21kYkdbOUc5OSZvNXd8RV1LPT1NQH5HdXA5a3Z6Kll6VFBT'@;
put 'ejFBNmc2TmFdMG42VEtmM2EjMzxEfUp+dURFKkVJUWNNMiwuQyRqTHtKNmFuOWNANWQ3Wlgwey8+Ukp8OHklV0JpfSx8NixSaXFqJCwydU8uUHJJQiNOMX03ajl5WS5ESz9VJV5AKn1vK0FhMCNhejU8Lj15WT9aMF5DKCMpUDtQW047Pzd6QF4vVTVFQyxAQExRdmFoMS5HTll6aGZYZkh9Ijk8'@;
put 'P3QrLkNxeSI5U0R5NnE1aV01Umk2QURmSElIKTM5aXhsLj9XY2wxVThdLkFLeEQ/T3JNZyVVYFYsd15vXzZ0cCk3IU5nI3VdXThaezBRT3xpQUI5ZDs1UjYiRSFQe1QwLHtBWnxNLkVGTkNlUH1JSnlfOEQvVmxxL0wqRlUrVCRuWW1EfWF3RjB8Y0wha0cjM0hofmxEKD5xMTdAJTFbfiRsKntH'@;
put 'fCNTQl4jTXs1OjlSPCl0JlhHRDgiNEgpK2sjPG9rN2pvIStpOzs8KzhbVUxrdEZtYmg5QU50e2p2NjZoSytlP3RdVUpoNUlUN1l9K1U+JUN8RT9dJj9Uc3pHPClxeCMlR0wrbEAueWxWVWNvNFZQalYhQTZ0M05AY1ExSCNIdSh6UzthIWp7VzAhV0omJjZNKH17Xzw2SFlrbGhyd0V5SiYvJklC'@;
put 'TWddJWRgPywyOlshRnxvPlhaIz9KR3deai4wcXc2NjBLaiNhNFQzNExXNnxCO3ZRVlVbL1FwaCNtYURfK1Fydil1TlBuPEgsaEFGRVpmaGFFVmI3dXpVfX4wRmU9fU9LPSJfT0piZFEwLChYQD8rVyUud289RnpwN3J4eUtfL3E7eTFuaG9HXTBtfUIhenp4UEwsIV1qXV1VSXpuYzFFTmwsYDB4'@;
put 'bmp7UV1PTDNXcVdkQUQ9UnRrOXZFPFFqa0sxN3o3Xm4zWlE/aUhTYVs0THdzWT07IlpPPXBRXyM0fjN3X2ooWzsoMEpyLCFmV3VMdnZeOVBRQUgkPHFmcGZkNipfUEBIR09SQChtb3N5ezpkQ19BMX1GQUc8NHxsJlcjNSNrVTlmMTxvJSRjZiExS0VaQi5FTUZlNylwTiMyUTtdfGZzT14pYGJt'@;
put 'RGZPbDw2P18meSFUbyl3cHRxezd9JmE5ZjJ0QDAkSmc2Lj4xMm5aKDZRdmZPYUlUdm1KV3xqSFBLe3VuN0BQcEZbSXdHSVZAK2dgemZDImtxPzQiWD45Vk5Ia1hCSGB3Y1RkQUkwYipvTC4iMGtkbltmVks1JCVgZ1ovNyw2QSk8ZF1WOFR5LkZReSwmPEpEUGV3U29LfnlEZS5mI0ZjXl1gYjc3'@;
put 'L0hHX3MoR2hZLCEpJmBMQ3MxRnNTfGtLPTM3YXVmXnVFVylCdHQ+WGQoTUhAMldUIVBNM3dCPCQyOSh2SytdSHtbJFE+NFp+NkI9MUpvbFBIaiIxJkt+X1tyNFB9QEg2KHJCb2hPUUVAeD0uOT84bGpDMjxPen16eVN8SmQ0azFvZV86Qm1gQ0g4SjQ8ZmVqbTB9Q3c2Qyw5SS8lNy53c1NmLHBe'@;
put 'TDZtXTVHKGZLNkRoQ1B7fVtRfHM0XmhSTEl1Y19vYENNZVRvOmIrRHdgTC5WU2shPkxzYUJoZTgzaDNFNV48ZjcsJHkpdyxQSEoqcFE6ODsvWDQ3fXFrbGp0U0BXWU83YEAlI3xxRTYlcSR4Z21SJCxhOUc7Ylh1MlpZYHgjcT9IUyZjTV52VT1XeT13YUY5SHQ0QmgibCVNV1ZGYE5Zemgkc2p8'@;
put 'U2szNj5ObUd5JFcvYWxmXjlUUDVoKEFWYUBtaVlAUVB5dmt6ITcoRykkJThAY1RdP0VnJGA0KXxeSntoYX0jalY1fn1WY3FHdTQ4Syp5OCY8Wl92Olc9YDE8RTkufGBqRjkmaV1xcG4mTnY6Vl83JVA5NGdhVGhVb2Emam4lNkErPT52P29kcX5zaDN9RUQ7K0N8Iit8bnslWCYvZTM9UiU8dzde'@;
put 'cWohaTUzIjw9TkdvSSI1Tj1kTnc5PFk3WWtDbFlUdUlScT9odCw7JGVWOCVKOHB5Zks3X2xBTFM7QndgcXFvcFtIMm1eVVU3UU1aT1BlOHE7OiVUPm9VP3xRY3pDMG4jWi9QbHRjNChaRVlPZW5QMGtDZjhKfnxSJUtzNSh7XSF4bSE3UmFTRWlrOUI2WGJVa1BzT00hWXFZcERudUQwKVc2OV9J'@;
put 'KlF5d3UqdklbLj07KTJ5LDVoI0V9O0hOJSVKIzQsUVBRPXlfX3NmJUFRUn1HbV5AW0laVS5xPnsiRk93NVlGaDM7T3RSSU0mb1E9NUlBbXFjY2BKeWg+REtEa2lTW2szSTlpPGJUV29eUEFGZ1FPLyVucntZaVpdejhSQXlVYjEyXTx0eTZGVTQ5P2Z7PE4rX1E/XyYwZlpIWy56L09Ub3AuKXBu'@;
put 'NExjRC47OExqMmI1Knh4fm5XVWlGPXpYTF0ob0NJeChqX15pQC90YWFyS1Q4aiMlZEhFPkBlTklpUVNnRzw/I0hHUl5AWlQyRmlCPnMsbC5fK1p8K3I7fi52Uy9iaG9zTCpAIV9hP3VuSiY9MV5oJVVJK3JyPWhldyxMd0JRX3Bidn52U3VMbDpDMnlDaHtpTDF5cDIoaClaKkYqejxNKEFTWHxu'@;
put 'KU4rcEgqZl4lTj5vQ2FFXiNEUXd7aTQ7bkViTiZYfGEiRkM5TXUiJXI5RGQkfnkzaGc4ZkQjTDQrJXpUfGV8S0BDOmdRbio3djd5ITZJdTI0KixdPllBNWd2XUU4cz5CfGNDamNXaDBeKEhsSzxOb356PU13WzpOd2g5Ol05W3AiJENSU3M/bG5XV0VuaH05UXV7eHxiOzNqLHt6MVpQNiFEUk0s'@;
put 'MFpCeVleVk8qLiFXW11sVEwuL1FqSHFWMSEuOX0jaSpmX1o+eFtUZiF3OHRoJllPQ0oyJD9bIVllKl9dUF9ueU9YSCo0NFVLR112anJyRnxRLHxwTy4jajlvclc0ZUE7X3RXPF4mN35WLFlKd28zIUZ7YEZtYSloQmguZn16Mk5WRSIkRixIVUM3cDBLbkBsM2NEW2BGPldwVnFzXnNYaSshKFJE'@;
put 'REtXNW0pX1AkbS9VYGRtS1ZeQDsqNl9DPCxMVnU5fjcoLzk2aEMzey4wbms6Ni5iJDo4eDZEInduZlgzOSl2ZHczRyk+Mzo+Rix+PVo2IT5JTzM0c1QqIj1dP08jSFFzOUJseF11K2UrQjVVOEV7SnBiVnxMIix0RjxEWWgrbUZZTzckVnRoI1IrX3pCKiU5I2U9bCx5WGFubyprK3BgSj5vUzI7'@;
put 'eCMyRzlLXXdjO0diSCpjdGxUY2w2NyskU3tCdTdDUSEyZGo+RE9DZFpyU2NtV2hPL3QzL1JtOmdSbT1WSjJrLj9UNT9FUV5kdGZPbXNre2VGJSkzaW5tQDtSIig1PUJTJGk0T1NtSFNBMWomQkRtIiowT1BzJispZUE2XiwsdzR4cCRKaFQ7JHF2Vl5YeVJJSCJ1d0ZgTSojUj5iJi85P3o0KEJB'@;
put 'Qnxda3B+aDFnTHosRzNubkhMNT4yXzpmPy9pY2p1cH5lJUVAMDMifWYrWS4mPDVvfm9XUGJ4emZRInslUVpbc2pPIjBDJCZ7Yi9qQDN8SWlSRDRma2wjbjVLPDQid104MmdKKjMmeU83TEVKfks+bnpnTHdjTXEwbzVnZiIxVU1wYjBUbE1nL1tgfWJMd3FjRXZ8Jn0xQ0Y8dXBqXzJKMVZRODF9'@;
put 'R2p2ZTJIPkZSLmx+bUdgdXJ9cGZJRnNITFQzJEZObWM9YkhuNEFuSVt3QlB4e0ZVOmxCQm5iSnYsMkV4JmQxSDJ1Kkg/QDZBTTFXXztVNnkzRjArbDFDWWgoPjtCNyhzfj5IKHRPN0hQaCUvMURvU3hHfjtONmIySmJNLDRWJSM4NkIsRTlxNCNyOm4zamIpRXs5d0l2ZUQufFs8OTBiXS4kOlUr'@;
put 'Tm02e2RGQykiRUJSUCo0dnRzK1dib1RMK2p+KTJ7bWdxeS5OTG4jcT5dRHhbfE9OOSt0MT5pXm5mO05Se0ZmUE17SllCRkEsTilDeyZaY0xnPWFKM3wrbF93L2V7MVJiVmBKZXlKM2BzfXhoI0MrUW45cihlQDFTcS9gWSZGQXRBL2R6UzU4QiV+SzBYVV9wO3taOFFHTiwmQUdoUSFWNHcyXV1S'@;
put 'ajp5YHo4fkxvVkJ3NE1dNlBmUns7MGVyS0pXZE4wdXo/KmMhdGtiX0NGY09jQnNIWVk9KGg6SmhEQEgpJk5TQkNgPj1acCl5cVpjVSxDeWlfc2sjdlMpbFZ9T08sZGY+Rm15LixCJmpCWUw7NWtfXmNxLlM8WkV0QX13bDVTUytXKGZbJjJ9M21pQExpTjJ3d2NoR2pwM3FwdjtkcjV4XSJiU3Jl'@;
put 'OlBULzVXdX4lRnYkOERsfHQsbE0hPnpIWj9pYng/ZD9mSzZsb0wsYkR0PjhsMks0Nz43VXdQO3NyX2ksWks5e11nXis1WFl6SCUkP1EucjxtR2pATXFrWkVHK294QCI2V08laXY6aiJVUC9xaVUiVkUheVokM3tYTjdjaTplYkBvYkxQMCs1fWAzL1lAREJXOlF4RSQjQGg9PmZTZDpvai9kOXhI'@;
put 'eEYhV0x8RWpHLjNFW2wuSC50P29oY11UO09SS1tAIXJ8MyteeltoPnkyd1JdbjV+SSN4ZzwmRlNlUikkInpRUjIvamBeZz5mT111JDE2VkJXWkYya2BpMH4kQyVOdGc1O1cxWT1SYTovP0EmbS59MTkiMEosNXtNPD9HPThMWWwwcWJMbWtUXnkwTV4mWz09MmV2PF47RzxOZXM9dHckWU1uRUdE'@;
put 'O01LbVkwITtTP2FxKDc9NS80Kk1QcG9iI2ojZGtsRyJOOU9gMFA5TDNnbF5PZlQwdygqRXMkPCt2I01MQkJ3Ny54ZFpoVntad1FPeWJ0UUluan5Bc2JSaGlkXXA4MmdtPmdEPlkmIXxIbjk/PjddRmlheEVgdy9tciluQGJ0Iig7K0AkPlhociZVcDRvbmJZIkUiYXlyTUFfSFpMRk99bWg6RClA'@;
put 'LGJzbDQ0Pjc2JUUlNilqKjQqKCliV3QyS0RXcktvQiN8dHtEKl0hOWxXK314fFMjXVVpemBkS0NnLlBFbDJUNHw2UCVaYko3VH0qM1JacVFyO304V2ciSHspIiNbTHdJTCFFSThFSFsiRHJjdmtjKFklZCxoeEApSisvYCM0fShufmcmO3hFbkxKO3tONls9UC88cjZ1N19vVTAuWmRMfjttXUJG'@;
put 'cVNycG5XZGwkeylEVV9QfGA5JEQlLlN1MCpqZUlPPitdWFpUPXhVTjNyTyxre013Sk9eNWQuaUNxJF1zXlBhSE1PUlBgQXFGTjFleTE3MHZxdi5aRnc+NGZOQ3EvT3dgNXxXcSFRL01zdyF9ZmYlPTlFUC9zKERsTkBTX31HU3NJMD41O29GWzlJOXlydGs/dyZ4fiRGSUZQaHYmOWtEOShdQ0hH'@;
put 'RXlnI2pHYGtNW2kuaz9nND5yTzpVV2VvMjhjfUFLRX5UZkJoeDtvVXEoc11xcXhoI2JvPGF5NkQ8ajErRHhDej4rYSZzWUlXX2AqPyFnb0g9TFVURX10ZisuT3ZeeV1qKlI4R3ZRK3BIL2NCSCY7WjZEKTU1TlZJIUIuQ2Y1QSljYTplbF1EUE5dckBuYylhJHAoNFdidlYjOT1scS8ia2ohN2RV'@;
put 'fEBMKUwkRzNXP1VNTER+YmNFZjp4Ulh5KyFvfWo+ezxPTXJuWyguXWxoU1spOm1XLkcmLnVVQ3E7KTw4LEwjKzBEKlNqPipSfi4+eTBDRndiNl0+N2JqNEhON05oXjsuMmdrOGxOTlh3dVAjSWlCR3RVUlBTdzZCKlhbcVJ2W2xLOW4qNUd3TChIXldieXc0QGltODRNTj5aeSRPfjhYPVF7bWkv'@;
put 'SXYsT3FbaygwV341XXtKZ09wJHFHKl5iOCg/JUYmQzw7LnJuPDxWalNUUS92NzIkZWpgSyYxKFY/emEqV1IjVlFESSZ0WEdrNzNbUGNiTUJKSzBAeGouKW8pVyJSdUpPS2Y5TSQoIU5gbFpzb3k6MXgrLzRQQDJtTz5GKzY+QWVSelA3Rl5Pdnoja24uNTxWTFlLWk1na21oWipUSjcwSEs+PEYl'@;
put 'L0t9ekM2QUIuLF9qYlBsTUo1JkQrSWBAIVBtRUglU0wsaFFSRlA/fm9kbVFUZmo4cj9kQkomW1tbMnRxYS9kTCEvS0M4I1BVfHVTekp+L0JjUWBGZS9AVGJ6ISheSF1qS3FSWGBPSkpGSk93OEAxei9KJntBMkRPM3I9TFVHZns/P3UjYFRmRWY+czdOLmN2VlYuWzF4N3xmRn4/QVNxUCkjUFQ/'@;
put 'SVN1QG1ENHg+QXheIUApPUpCbl15ZHJCL2hAVW90dUl5Rkt9SkEqMylBTT0hVFMlJno3SjRjc3lBOC47bUhYV1B6dmx4WGMzNWREZHBBWV4sOTFodSxURlV5ZV4xYlA0QSJPeyFIbUBLP2AjayI3Ukw3T0pdZik5cCtSVzJed29xankzamJ0bSZkUD48L197cnFVdU5zdC4hfT4vVHJLYCFPTUhe'@;
put 'Izd0bjQselJMTWM9ZE0sLCw/L0skNUoiSVhndnVUPzQ2NCp4fjRvVVVMdlN4MXpXe3VndCIsa2tUW0BdKHE6WEU6QmVrM0J6WjB1RXZxXn1lTjtKMzlqc3ZGQXxJZHZsR3JocTRNNzIhKkc+SlQ3SzB4P2pVPiRFSEpjUXNjRXB7d050RWE8YGdOcVVQVCtiRVN+VXUhZz80KlovWD9fNGpObnEu'@;
put 'M3B9d1txZi56KH1CRkpFdDMseTwzTVQ+eShQOjEwVWRmZHVlM1tmQ3hFMD0uUH04U3AwXW1mMHt1X3VYdSZ2alMuK1V2Ym5BeShvbjc6clUvcnd9aDRpWyYwcTZTdEkzdmJIdnVpSnVkYyhxRTBRSk5UeG9jS3hIQFBWeEwjLmwzWE4xIT57SltaNHtaPU0zd2ptXnN4QG58M1B+NW5reE5jTktS'@;
put 'JC9me2o7LHUrX3dPMDVUbltGLlZFP29JIV9pfVVPIihLOEA/ejYsNkJIJTVXdmQ+bEk+S3N8Z2Z8IlZBPztaZ0FAWFJwXzdeM2c2cz5VUS9iJFIicGVXXmYjfiosbWEzbH5laXRJKzckTFZDS05HSlciZDY8V0NIeW5yOTZXYno2NUA9RWdSMHJTI2txRC5ZUHtwVTRNVGRjR0A9QDd6Ry9eeGFU'@;
put 'LHNPUWFgPUcjK198VjMpISkkZns5NUx8bCVFfUpMZVJYSXhYeHtrST81KmNSViRoRV0hVkdOJSVnV1JkfUY/XmcjY30zdyl6TEZKOV5VSyIzOXVURH5oeDx2TEs2dm5nZ3g+Mlhscz93VEQlWmhBTllIam5Za0VaYj1Bfl8oRVArM3h9P0cpcDBUe2lnbiV2Ujd4LzYjKyxbKFVQMTo6e2pfYkF8'@;
put 'IzJfbDhyeDRFW3MkPGkjbVRKLEZqajt+SUJ5cT9bKyxJbUN1R1dsM31qdXNbbkN4YEJMdyV2X3Byd25RKjJhbjF2MS5oImxbLCNwP2x2P2MrdGtZZFt2ejxEaWNmZXlZSUkrYkh7W1JKSVdENVo0N2pgdEhbdGRzZmh+eixMQGVBL2Y0VDRLQ3JOQ1U7bSYpdmtIOCNMclBbQz9NKlB8K3NASSo8'@;
put 'cXo9TTY3UD1qejl3Im1pPU09QmhWSDt0eWpVcFgzQzkhbyElZikqW1kxeHdCRmlPPWZ+cjw0Y3EjZD8xeDJKb2w2Sm9XMk8sdS4mQG1eQ1c7KltgcUUsSXhVbmVCVUF8Xz9XVylNYFRvU1pbeipEb2lGQn1OcCM9SXh8YV08flQ5Uyg2UyplQi95cHVeVVo8PlU2NkVoNSVsKUkwdnRUJnFeUSx7'@;
put 'cSImN2lFdS9jJHpnSDIrcmNeL2Y6MmFUV3Z8ajU1PztqR30+am0jTnN9MVtYcE43e2h6YixbalRLIiZrT3pkNlNafnZJWEcjRVFeTHV2RURbKlhdZ3hxPD4hMCp4ailyMnEiVFt0YT9pTH4xNldPTEwrPHl9d1svRl9jalpfYUdsPDQ7b00+JlYjY0tQP2V6aitFT0s3SW1vJX5wez4zcClIMCVM'@;
put 'dns7WHlNXnwpdVB1bH5RWC98eFpoN0xMVE5wSExndVsoQF43TlVPKGs0Tl4wKD98JWMzS1YvKjwwMiZjQHAlUlpMemdxTz5GbyhyTixTOFs3JmkyeEtbOXZWIlZSVCtLJVh3MmNRVlUsMChMbW5ZSShqJnx3Wm9Xcy85Q0Q6b2o+Xz1AaFgjTmhbYyMoTiNoUzdmXU9QbUsuRVRXdmY4RTRhR2FW'@;
put 'bXFlRWY3ZjRVY05uQUhDJn10dUBPU1J+RFhzcl1DSCpyRH19YG98V0FMekwrX0hUcEtZTEE+TjdBTEdZZSM1fil8ekMrbzgsUkBdSz1HYjYuW0F1WiE7Q2swe2FjKFBHRXd2K0FeUS92KUNlYjxnSCFxe1hjP2J2T3VnY0FBeHY5QHxJPks+Pl4sXzlfP2JsdyMuXiorWHtob0pzfWpaem8hITVT'@;
put 'S2ZoRXg0fVVaSGR6X0FCWUBdVF1gPGQyeGNwfGtuK240RkoibXN0cmVsWkBuNXdRb35JUm1ELHNlMzFfYz8uWGAmVTNYTTxPUXdxWmhHJClsWSI7LkQkbkdBMnUuamgzZ2ppdlN7SDE7Qz02Um45ZH5nY1BgZDNrYTp4SlZHZUFefnFvWTtFMD12TH1DKjNlSSZkVzlid0REQlRkUXh8fTc2NFJg'@;
put 'dGpVVU44Mn5MYD0sOV5SZipoc2IrKHVwNXM/RE1kQW5oVUZvPUZPV1JIJU5reXQ6YkxYVWRqZHpLKEMqWVBPJTRIQl0jOjguPUt9KXhdTUk9TD1rPishWmdCQXw5QlJDKGZJd1E8VzRBTG5vcD1TbUowWVhlWHM4enBZbFpjbGRzZzlnKC8mNXN3MVAiPjt5YTt2NnBTeS44NGA+QGJkOEEuanc2'@;
put 'UGM2fWN9djROQjc4M0tvV1ZeV1tFOz0yRUguTklPfVIpQUgxJi5QI1p7SVgpQWRrOStuI0IqKXoweHAhIUdvVlRmTE1nUitPJitYcmBSOVZeTl5fczdsWT9HSVBWVnZVXzJ4c21AL3hFaFQuT2FtZnB3WVNAayo5LmJMKUpjOWgmfTY1Tl5CTkZdYlFlP2A1Q0hYaVdNUENyaUYybT42X0k1Kmo3'@;
put 'dSNSYzZITU4lO3wpcjxUWG00IUI+PCg7UlU5NDZ3Ri4seWZFbkJ4cml3S1ZzSXNMZH15d2RxKVtYXXArfTFeLzRDeTg6NFYvRjFkRDRwL3F0UWpRUi5wOVl4cHUybTs2X3ZiYjskLitBImQwbkc9N2doWlpxVTlGV1Esd0FjIy9PYlA4I2BIRkVAUkw2T1Y0XU9XS0BNNV5IT2ZCc2pERio9bytb'@;
put 'fGoxWjRHQiptPWQiQXkwMFghLFYwMzkjREx4RzNYVSpdKD9uJUNaMGwrPGtJQ34/V0wweVRrO1cheEN3RS9uWSpsWWolRGxuYnQhT3JeMyk0TV9bbls+cjlsbTJJISsqcWBePVBXc01MbEUpKldFKGJ0MnhueUBjUTZ0YEghUWJvSnRNND1sYk1EMzpvJGteWUJQfTVjdihKaStnNzxWW3I6e15M'@;
put 'YVQ/VF1AKDlkRF46a1kjJlJ9XnchT3ZvM2EkL0lqfWl9dlt5cVdbWSFadzQ5UkZFXltZZ3Qxck83dW5XQyQqR2RoVVRnTkwsalchP1EiYzFIJV5nWF0wNix7aTRtVCheeH58Kj11Knh4TUpDK0hYfTt5SXg/R3VbPE93flBHZXBJLEBDeSohWVkhd3pMUFEhNVlydFNpSSVVSntpRGNmamZ8I24v'@;
put 'SUA7JnFWbzlwTHV5LGA9aCFqS2hTbChwU3xYTVVhUSFBY3hhYDZQejtQXnNEaS5yR0EoTVV8RSoseTE2MUNWbjkzLlM2b2tQJF91PzdVT218VkUxaG1pNyYqaHpwKl51SzpAMmU4UUlpJT9xNS40dEVlKmlSUlQyJDdkRGRXOlVqWCUhW3R8dExzVXpKKDpbcHdaQ3EhKWFPS0J6MFMiP0dKOWtl'@;
put 'PXNYRCw0VV9tayEzRFI7OCQkVE8zaEx7WTN0QmcoV0p+V2U2VChlUnBrK2FbdURTYUtUVnZZLmNCNE0uL2t5aSouN1IiUWBnNERiSUBAK35NPW10VSMyKS5NT35VQzxaZjVIfHovJnVnXnVzbzpiM0hyJGVnKWkjWm94THh0QX0+b34sRTA4b2wmXmFIcz9QWVcwNFB7MT41QiEpQ1VxRH18Qkxo'@;
put 'Nj55Ui54U1dQLjgvW2AreEhwI0QmRW9BISg8U3Z4Tjl8Jig0SFpjU2taPDt5ZnZJZGRfIyhrXnEzU0g9Sk5pVlNBXmQ8VztALC9iPkpPUk5hVDJOZjVaK2lTTkBHeTcmZVd8YlQ9LkZoN3FvVWVNU2A5X0tJTUdBMyNgfmVbfU56aHF6fUVKLDQ6NXBGUjV8LyJxVXtGeCJ7ayRTYkwzK0NyQm1Q'@;
put 'UUNiW0B4a0A1ODBxJiVuN3JLdDFFX0tPI2U8a2JfS0ckMD8ydH4+Qj1kKDJ3fmZFX1UpMVJUMjgiVF1DJn06X1tXWDVKcjspKWNhMCN8T088cW9qcy95WUB2dWhidUE2T3R2S1N5c2s2cSNqPCtrcCliPVRwY1tGPGdXJiZnflBtXz9udiE9PT1BeD01cDElSD1LRyouczJRa0V1dy9GWHRoTjxY'@;
put 'RkBtK3c1dCZlLGUiVkVGbSpBNlJFcCsjTDMyIWcpbSJhcEt+UFo2YWsrKjVJOjJTWFZOPCxGbktAMjIlMmQyRHk8KF1JQicpKSxiTXx8KGJNPWhvdCh7d2FzbUJpbmFyeTpfWixsb2NhdGVGaWxlOnZvaWQgMH0pKSxiTSkudGhlbihsPT5uZXcgQ20obCkpfXN0YXRpYyB1bmxvYWQoKXtiTSYm'@;
put 'KGJNPXZvaWQgMCl9dmVyc2lvbigpe3JldHVybiB0aGlzLl9tb2R1bGUuR3JhcGh2aXoucHJvdG90eXBlLnZlcnNpb24oKX1sYXlvdXQobCxhPSJzdmciLGQ9ImRvdCIsaCl7aWYoIWwpcmV0dXJuIiI7Y29uc3QgZj1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6KGg/LnlJbnZlcnQ/MTowLGg/'@;
put 'Lm5vcD9oPy5ub3A6MCk7bGV0IHY9IiIsVD0iIjt0cnl7IWZ1bmN0aW9uKFkscmUpe2NvbnN0IGZlPXtpbWFnZXM6W10sZmlsZXM6W10sLi4ucmV9O3ZhciBfZTtbLi4uZmUuZmlsZXMsLi4uKF9lPWZlLmltYWdlcyxfZS5tYXAoZm90KSldLmZvckVhY2goa2U9PlkuY3JlYXRlRmlsZShrZS5w'@;
put 'YXRoLGtlLmRhdGEpKX0oZixoKTt0cnl7dj1mLmxheW91dChsLGEsZCl9Y2F0Y2goWSl7VD1ZLm1lc3NhZ2V9VD1mLmxhc3RFcnJvcigpfHxUfWZpbmFsbHl7dGhpcy5fbW9kdWxlLmRlc3Ryb3koZil9aWYoIXYmJlQpdGhyb3cgQ20udW5sb2FkKCksbmV3IEVycm9yKFQpO3JldHVybiB2fWFj'@;
put 'eWNsaWMobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybnthY3ljbGljOiExLG51bV9yZXY6MCxvdXRGaWxlOiIifTtjb25zdCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXo7bGV0IGY9ITEsdj0wLFQ9IiIsWT0iIjt0cnl7dHJ5e2Y9aC5hY3ljbGljKGwsYSxkKSx2PWguYWN5Y2xpY19udW1f'@;
put 'cmV2LFQ9aC5hY3ljbGljX291dEZpbGV9Y2F0Y2gocmUpe1k9cmUubWVzc2FnZX1ZPWgubGFzdEVycm9yKCl8fFl9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZihZKXRocm93IENtLnVubG9hZCgpLG5ldyBFcnJvcihZKTtyZXR1cm57YWN5Y2xpYzpmLG51bV9yZXY6dixvdXRG'@;
put 'aWxlOlR9fXRyZWQobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybntvdXQ6IiIsZXJyOiIifTtjb25zdCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXo7bGV0IGY9IiIsdj0iIixUPSIiO3RyeXt0cnl7aC50cmVkKGwsYSxkKSxmPWgudHJlZF9vdXQsdj1oLnRyZWRfZXJyfWNhdGNoKFkpe1Q9'@;
put 'WS5tZXNzYWdlfVQ9aC5sYXN0RXJyb3IoKXx8VH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGgpfWlmKCFmJiZUKXRocm93IENtLnVubG9hZCgpLG5ldyBFcnJvcihUKTtyZXR1cm57b3V0OmYsZXJyOnZ9fXVuZmxhdHRlbihsLGE9MCxkPSExLGg9MCl7aWYoIWwpcmV0dXJuIiI7Y29u'@;
put 'c3QgZj1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6O2xldCB2PSIiLFQ9IiI7dHJ5e3RyeXt2PWYudW5mbGF0dGVuKGwsYSxkLGgpfWNhdGNoKFkpe1Q9WS5tZXNzYWdlfVQ9Zi5sYXN0RXJyb3IoKXx8VH1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGYpfWlmKCF2JiZUKXRocm93IENt'@;
put 'LnVubG9hZCgpLG5ldyBFcnJvcihUKTtyZXR1cm4gdn1jaXJjbyhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxh'@;
put 'eW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwi'@;
put 'b3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfW5vcChsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wIil9'@;
put 'bm9wMihsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wMiIpfX1mdW5jdGlvbiBGQShjKXtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxjKX1mdW5jdGlvbiBTbShjKXtyZXR1cm4gTWF0aC5yb3VuZCgxMDAqYykvMTAwfWZ1bmN0aW9uICR1ZShjLGwpe2lmKCJwb2x5Z29uIj09Yy50'@;
put 'YWcpeyhhPUZBKGMpKS50YWc9InBhdGgiO3ZhciBoPUZBKGQ9Yy5hdHRyaWJ1dGVzKSxmPWQucG9pbnRzO2lmKCJwb2x5Z29uIj09bC50YWcpeyh2PWMuYmJveCkuY3g9di54K3Yud2lkdGgvMix2LmN5PXYueSt2LmhlaWdodC8yO2Zvcih2YXIgWT1kLnBvaW50cy5zcGxpdCgiICIpLHJlPVku'@;
put 'bWFwKGZ1bmN0aW9uKGpuKXt2YXIgVXI9am4uc3BsaXQoIiwiKTtyZXR1cm5bVXJbMF0tdi5jeCxVclsxXS12LmN5XX0pLGZlPXJlW3JlLmxlbmd0aC0xXVswXSxfZT1yZVtyZS5sZW5ndGgtMV1bMV0sa2U9MDtrZTxyZS5sZW5ndGg7a2UrKyxmZT1XZSxfZT1KZSl7dmFyIHR0PShXZT1yZVtr'@;
put 'ZV1bMF0pLWZlO2lmKDAhPSh5dD0oSmU9cmVba2VdWzFdKS1fZSkmJjA8PSh3dD1mZS1fZSp0dC95dCkmJnd0PDEvMCYmKGZlPD13dCYmd3Q8PVdlfHxXZTw9d3QmJnd0PD1mZSkpYnJlYWt9dmFyIEx0PVtbdi5jeCt3dCx2LmN5KzBdLmpvaW4oIiwiKV07Zj0oTHQ9KEx0PUx0LmNvbmNhdChZ'@;
put 'LnNsaWNlKGtlKSkpLmNvbmNhdChZLnNsaWNlKDAsa2UpKSkuam9pbigiICIpfWguZD0iTSIrZisieiIsZGVsZXRlIGgucG9pbnRzLGEuYXR0cmlidXRlcz1ofWVsc2V7dmFyIGE7KGE9RkEoYykpLnRhZz0icGF0aCIsaD1GQShkPWMuYXR0cmlidXRlcyk7dmFyIGQsV2UsSmUsd3Qsb249ZC5j'@;
put 'eCxzbj1kLmN5LE1uPWQucngsVm49ZC5yeTtpZigicG9seWdvbiI9PWwudGFnKXt2YXIgdjsodj1sLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjt2YXIgdXI9bC5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpWzBdLnNwbGl0KCIsIikseXQ9KHR0PXVyWzBd'@;
put 'LXYuY3gsdXJbMV0tdi5jeSksSGk9TWF0aC5zcXJ0KE1hdGgucG93KHR0LDIpK01hdGgucG93KHl0LDIpKSx3cj10dC9IaSxhaT0teXQvSGl9ZWxzZSB3cj0xLGFpPTA7aC5kPSJNICIrb24rIiAiK3NuKyIgbSAiKyhXZT1Nbip3cikrIiwiKyhKZT0tVm4qYWkpKyIgYSAiK01uKyIsIitWbisi'@;
put 'IDAgMSwwICIrKHR0PSh3dD1Nbiotd3IpLVdlKSsiLCIrKHl0PS1WbiotYWktSmUpKyIgYSAiK01uKyIsIitWbisiIDAgMSwwICIrLXR0KyIsIisteXQrInoiLGRlbGV0ZSBoLmN4LGRlbGV0ZSBoLmN5LGRlbGV0ZSBoLnJ4LGRlbGV0ZSBoLnJ5LGEuYXR0cmlidXRlcz1ofXJldHVybiBhfWZ1'@;
put 'bmN0aW9uIGdvdCgpe3RyeXtDbS5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyksdGhpcy5fYWZ0ZXJJbml0'@;
put 'JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChsLGEpfSxjLm1hdGNoKC9e'@;
put 'aHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksdlouY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDoiIixlbmdpbmU6ImRvdCIsdml6VVJMOmN9LGZ1bmN0aW9uKGEpe30pLHZaLmNhbGwodGhpcyx7dHlwZToi'@;
put 'dmVyc2lvbiJ9LGZ1bmN0aW9uKGEpeyJ2ZXJzaW9uIj09PWEuZGF0YS50eXBlJiYobC5fZ3JhcGh2aXpWZXJzaW9uPWEuZGF0YS52ZXJzaW9uLGwuX2Rpc3BhdGNoLmNhbGwoImluaXRFbmQiLHRoaXMpKX0pfX1mdW5jdGlvbiB2WihjLGwpe3RoaXMuX3dvcmtlckNhbGxiYWNrcy5wdXNoKGwp'@;
put 'LHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24geW90KGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5nIj09dHlwZW9mIHRoaXMuX29wdGlv'@;
put 'bnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCx2PXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKTtlbHNl'@;
put 'IGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbix2PSExO3ZhciBUPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsWT17fSxyZT10aGlzLl9kaWN0aW9uYXJ5fHx7fSxmZT17fSxfZT10aGlzLl9ub2RlRGljdGlvbmFyeXx8e307ZnVuY3Rpb24gd3Qod3IsYWk9MCx0aSl7KGZ1'@;
put 'bmN0aW9uIGtlKHdyLGFpKXt2YXIgdGk9d3IudGFnO2lmKCJpbmRleCI9PWEpd3Iua2V5PWFpO2Vsc2UgaWYoIiMiIT10aVswXSlpZigiaWQiPT1hKXdyLmtleT13ci5hdHRyaWJ1dGVzLmlkO2Vsc2UgaWYoInRpdGxlIj09YSl7dmFyIGpuPXdyLmNoaWxkcmVuLmZpbmQoZnVuY3Rpb24oVXIp'@;
put 'e3JldHVybiJ0aXRsZSI9PVVyLnRhZ30pO2puJiYod3Iua2V5PWpuLmNoaWxkcmVuLmxlbmd0aD4wP2puLmNoaWxkcmVuWzBdLnRleHQ6IiIpfW51bGw9PXdyLmtleSYmKGgmJigiZWxsaXBzZSI9PXRpfHwicG9seWdvbiI9PXRpKSYmKHRpPSJwYXRoIiksd3Iua2V5PXRpKyItIithaSl9KSh3'@;
put 'cixhaSksZnVuY3Rpb24gV2Uod3IsYWkpe3dyLmlkPShhaT9haS5pZCsiLiI6IiIpK3dyLmtleX0od3IsdGkpO3ZhciBVcj1yZVt3ci5pZF07KGZ1bmN0aW9uIEplKHdyKXtZW3dyLmlkXT13cn0pKHdyKSxmdW5jdGlvbiB0dCh3cixhaSl7aCYmd3IuaWQgaW4gcmUmJigicG9seWdvbiI9PWFp'@;
put 'LnRhZ3x8ImVsbGlwc2UiPT1haS50YWd8fCJwYXRoIj09YWkudGFnKSYmKGFpLnRhZyE9d3IudGFnfHwicG9seWdvbiI9PXdyLnRhZykmJigicGF0aCIhPWFpLnRhZyYmKHdyLmFsdGVybmF0aXZlT2xkPSR1ZShhaSx3cikpLCJwYXRoIiE9d3IudGFnJiYod3IuYWx0ZXJuYXRpdmVOZXc9JHVl'@;
put 'KHdyLGFpKSkpfSh3cixVciksZnVuY3Rpb24geXQod3IsYWkpe2lmKGQmJmFpJiYoInBhdGgiPT1haS50YWd8fHdyLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PXdyLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciB0aT0od3IuYWx0ZXJuYXRpdmVOZXd8fHdyKS5hdHRyaWJ1dGVzLmQ7aWYod3Iu'@;
put 'YWx0ZXJuYXRpdmVPbGQpdmFyIGpuPXVaKHdyLmFsdGVybmF0aXZlT2xkKTtlbHNlIGpuPXVaKGFpKTsod3IuYWx0ZXJuYXRpdmVPbGR8fCh3ci5hbHRlcm5hdGl2ZU9sZD17fSkpLnBvaW50cz1mdW5jdGlvbiBaaXQoYyxsLGEsZCl7Y29uc3QgaD1jLGY9aC5jbG9uZU5vZGUoKSx2PWguZ2V0'@;
put 'VG90YWxMZW5ndGgoKSxUPShmLnNldEF0dHJpYnV0ZSgiZCIsbCksZikuZ2V0VG90YWxMZW5ndGgoKSxZPVswXTtsZXQgcmU9MDtjb25zdCBmZT1kP2E6YS9NYXRoLm1heCh2LFQpO2Zvcig7KHJlKz1mZSk8MTspWS5wdXNoKHJlKTtyZXR1cm4gWS5wdXNoKDEpLFkubWFwKGZ1bmN0aW9uKGtl'@;
put 'KXtjb25zdCBXZT1oLmdldFBvaW50QXRMZW5ndGgoa2UqdiksSmU9Zi5nZXRQb2ludEF0TGVuZ3RoKGtlKlQpO3JldHVybltbV2UueCxXZS55XSxbSmUueCxKZS55XV19KX0oam4sdGksZix2KX19KHdyLFVyKTt2YXIgZXI9e307d3IuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihEcil7dmFy'@;
put 'IEVyPURyLnRhZzsoImVsbGlwc2UiPT1Fcnx8InBvbHlnb24iPT1FcikmJihFcj0icGF0aCIpLG51bGw9PWVyW0VyXSYmKGVyW0VyXT0wKSx3dChEcixlcltFcl0rKyx3cil9KX1mdW5jdGlvbiBzbih3cil7KGZ1bmN0aW9uIEx0KHdyKXtpZihUJiZ3ci5wYXJlbnQmJiJub2RlIj09d3IucGFy'@;
put 'ZW50LmF0dHJpYnV0ZXMuY2xhc3MmJiJ0aXRsZSI9PXdyLnRhZyl7aWYod3IuY2hpbGRyZW4ubGVuZ3RoPjApdmFyIGpuPXdyLmNoaWxkcmVuWzBdLnRleHQ7ZWxzZSBqbj0iIjtmZVtqbl09d3IucGFyZW50fX0pKHdyKSxmdW5jdGlvbiBvbih3cil7dmFyIHRpPXdyLnRhZztpZihUJiYhcmVb'@;
put 'd3IuaWRdJiZ3ci5wYXJlbnQmJlV1ZSh3cikmJigicGF0aCI9PXRpfHwicG9seWdvbiI9PXRpKSl7aWYoInBvbHlnb24iPT10aSl7dmFyIFVyPXdyLnBhcmVudC5jaGlsZHJlbi5maW5kKGZ1bmN0aW9uKG5pKXtyZXR1cm4icGF0aCI9PW5pLnRhZ30pO1VyJiYod3IudG90YWxMZW5ndGg9VXIu'@;
put 'dG90YWxMZW5ndGgpfXZhciBlcj1mdW5jdGlvbiAkaXQoYyl7cmV0dXJuIGZ1bmN0aW9uIEdpdChjKXtyZXR1cm4iZWRnZSI9PWMucGFyZW50LmF0dHJpYnV0ZXMuY2xhc3M/Yy5wYXJlbnQ6Yy5wYXJlbnQucGFyZW50LnBhcmVudH0oYykuY2hpbGRyZW4uZmluZChmdW5jdGlvbihsKXtyZXR1'@;
put 'cm4idGl0bGUiPT1sLnRhZ30pfSh3ciksRHI9ZXIuY2hpbGRyZW5bMF0sRXI9RHIudGV4dC5zcGxpdCgiLT4iKTsyIT1Fci5sZW5ndGgmJihFcj1Eci50ZXh0LnNwbGl0KCItLSIpKTt2YXIgZ3Q9RXJbMF0sT3Q9ZmVbZ3RdO2lmKE9iamVjdC5oYXNPd24oX2UsZ3QpKXt2YXIgY249X2VbZ3Rd'@;
put 'O2lmKCh4bj1PdC5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24obmksS3Ipe3JldHVybiJnIj09bmkudGFnfSkpPj0wKXt2YXIgTm49T3QuY2hpbGRyZW5beG5dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihuaSxLcil7cmV0dXJuImEiPT1uaS50YWd9KTtPdD1PdC5jaGlsZHJlblt4'@;
put 'bl0uY2hpbGRyZW5bTm5dfSh4bj1jbi5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24obmksS3Ipe3JldHVybiJnIj09bmkudGFnfSkpPj0wJiYoTm49Y24uY2hpbGRyZW5beG5dLmNoaWxkcmVuLmZpbmRJbmRleChmdW5jdGlvbihLcixqbyl7cmV0dXJuImEiPT1Lci50YWd9KSxjbj1jbi5j'@;
put 'aGlsZHJlblt4bl0uY2hpbGRyZW5bTm5dKTtmb3IodmFyIEtuPU90LmNoaWxkcmVuLHhuPTA7eG48S24ubGVuZ3RoO3huKyspaWYoInBvbHlnb24iPT1Lblt4bl0udGFnfHwiZWxsaXBzZSI9PUtuW3huXS50YWd8fCJwYXRoIj09S25beG5dLnRhZ3x8InRleHQiPT1Lblt4bl0udGFnKXt2YXIg'@;
put 'UHI9S25beG5dO2JyZWFrfXZhciBqcj1jbi5jaGlsZHJlbjtmb3IoeG49MDt4bjxqci5sZW5ndGg7eG4rKylpZigicG9seWdvbiI9PWpyW3huXS50YWd8fCJlbGxpcHNlIj09anJbeG5dLnRhZ3x8InBhdGgiPT1qclt4bl0udGFnfHwidGV4dCI9PWpyW3huXS50YWcpe3ZhciBRcj1qclt4bl07'@;
put 'YnJlYWt9d3Iub2Zmc2V0PVFyJiZQcj97eDpRci5jZW50ZXIueC1Qci5jZW50ZXIueCx5OlFyLmNlbnRlci55LVByLmNlbnRlci55fTp7eDowLHk6MH19fX0od3IpLHdyLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oYWkpe3NuKGFpKX0pfXRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dEVu'@;
put 'ZCIsdGhpcyk7dmFyIE1uPU9zKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKCJkaXYiKSx1cj0obmV3IHdpbmRvdy5ET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhjLCJpbWFnZS9zdmcreG1sIik7TW4uYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIHVyLmRvY3Vt'@;
put 'ZW50RWxlbWVudH0pO3ZhciBQaT1fNihNbi5zZWxlY3QoInN2ZyIpKTt0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhRXh0cmFjdEVuZCIsdGhpcyksd3QoUGkpLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImRhdGFQcm9jZXNzUGFzczFFbmQiLHRoaXMpLHNuKFBpKSx0aGlzLl9kaXNwYXRjaC5jYWxs'@;
put 'KCJkYXRhUHJvY2Vzc1Bhc3MyRW5kIix0aGlzKSx0aGlzLl9kYXRhPVBpLHRoaXMuX2RpY3Rpb25hcnk9WSx0aGlzLl9ub2RlRGljdGlvbmFyeT1mZSx0aGlzLl9leHRyYWN0RGF0YT1mdW5jdGlvbih3cixhaSx0aSl7dmFyIGpuPV82KHdyKTtyZXR1cm4gd3Qoam4sYWksdGkpLHNuKGpuKSxq'@;
put 'bn0sdGhpcy5fYnVzeT0hMSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc0VuZCIsdGhpcyksbCYmbC5jYWxsKHRoaXMpLHRoaXMuX3F1ZXVlLmxlbmd0aD4wJiZ0aGlzLl9xdWV1ZS5zaGlmdCgpLmNhbGwodGhpcyl9ZnVuY3Rpb24gSEEoYyxsKXtpZigoYT0oYz1sP2MudG9FeHBv'@;
put 'bmVudGlhbChsLTEpOmMudG9FeHBvbmVudGlhbCgpKS5pbmRleE9mKCJlIikpPDApcmV0dXJuIG51bGw7dmFyIGEsZD1jLnNsaWNlKDAsYSk7cmV0dXJuW2QubGVuZ3RoPjE/ZFswXStkLnNsaWNlKDIpOmQsK2Muc2xpY2UoYSsxKV19dmFyIHF1ZSxVb3Q9L14oPzooLik/KFs8Pj1eXSkpPyhb'@;
put 'K1wtKCBdKT8oWyQjXSk/KDApPyhcZCspPygsKT8oXC5cZCspPyh+KT8oW2EteiVdKT8kL2k7ZnVuY3Rpb24geVooYyl7aWYoIShsPVVvdC5leGVjKGMpKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0OiAiK2MpO3ZhciBsO3JldHVybiBuZXcgYlooe2ZpbGw6bFsxXSxhbGlnbjps'@;
put 'WzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0sd2lkdGg6bFs2XSxjb21tYTpsWzddLHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gYlooYyl7dGhpcy5maWxsPXZvaWQgMD09PWMuZmlsbD8iICI6Yy5maWxsKyIi'@;
put 'LHRoaXMuYWxpZ249dm9pZCAwPT09Yy5hbGlnbj8iPiI6Yy5hbGlnbisiIix0aGlzLnNpZ249dm9pZCAwPT09Yy5zaWduPyItIjpjLnNpZ24rIiIsdGhpcy5zeW1ib2w9dm9pZCAwPT09Yy5zeW1ib2w/IiI6Yy5zeW1ib2wrIiIsdGhpcy56ZXJvPSEhYy56ZXJvLHRoaXMud2lkdGg9dm9pZCAw'@;
put 'PT09Yy53aWR0aD92b2lkIDA6K2Mud2lkdGgsdGhpcy5jb21tYT0hIWMuY29tbWEsdGhpcy5wcmVjaXNpb249dm9pZCAwPT09Yy5wcmVjaXNpb24/dm9pZCAwOitjLnByZWNpc2lvbix0aGlzLnRyaW09ISFjLnRyaW0sdGhpcy50eXBlPXZvaWQgMD09PWMudHlwZT8iIjpjLnR5cGUrIiJ9ZnVu'@;
put 'Y3Rpb24gS3VlKGMsbCl7dmFyIGE9SEEoYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsxXTtyZXR1cm4gaDwwPyIwLiIrbmV3IEFycmF5KC1oKS5qb2luKCIwIikrZDpkLmxlbmd0aD5oKzE/ZC5zbGljZSgwLGgrMSkrIi4iK2Quc2xpY2UoaCsxKTpkK25ldyBBcnJheSho'@;
put 'LWQubGVuZ3RoKzIpLmpvaW4oIjAiKX15Wi5wcm90b3R5cGU9YloucHJvdG90eXBlLGJaLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZpbGwrdGhpcy5hbGlnbit0aGlzLnNpZ24rdGhpcy5zeW1ib2wrKHRoaXMuemVybz8iMCI6IiIpKyh2b2lkIDA9PT10aGlz'@;
put 'LndpZHRoPyIiOk1hdGgubWF4KDEsMHx0aGlzLndpZHRoKSkrKHRoaXMuY29tbWE/IiwiOiIiKSsodm9pZCAwPT09dGhpcy5wcmVjaXNpb24/IiI6Ii4iK01hdGgubWF4KDAsMHx0aGlzLnByZWNpc2lvbikpKyh0aGlzLnRyaW0/In4iOiIiKSt0aGlzLnR5cGV9O2NvbnN0IFh1ZT17IiUiOihj'@;
put 'LGwpPT4oMTAwKmMpLnRvRml4ZWQobCksYjpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDIpLGM6Yz0+YysiIixkOmZ1bmN0aW9uIGpvdChjKXtyZXR1cm4gTWF0aC5hYnMoYz1NYXRoLnJvdW5kKGMpKT49MWUyMT9jLnRvTG9jYWxlU3RyaW5nKCJlbiIpLnJlcGxhY2UoLywvZywiIik6Yy50'@;
put 'b1N0cmluZygxMCl9LGU6KGMsbCk9PmMudG9FeHBvbmVudGlhbChsKSxmOihjLGwpPT5jLnRvRml4ZWQobCksZzooYyxsKT0+Yy50b1ByZWNpc2lvbihsKSxvOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoOCkscDooYyxsKT0+S3VlKDEwMCpjLGwpLHI6S3VlLHM6ZnVuY3Rpb24gV290KGMs'@;
put 'bCl7dmFyIGE9SEEoYyxsKTtpZighYSlyZXR1cm4gYysiIjt2YXIgZD1hWzBdLGg9YVsxXSxmPWgtKHF1ZT0zKk1hdGgubWF4KC04LE1hdGgubWluKDgsTWF0aC5mbG9vcihoLzMpKSkpKzEsdj1kLmxlbmd0aDtyZXR1cm4gZj09PXY/ZDpmPnY/ZCtuZXcgQXJyYXkoZi12KzEpLmpvaW4oIjAi'@;
put 'KTpmPjA/ZC5zbGljZSgwLGYpKyIuIitkLnNsaWNlKGYpOiIwLiIrbmV3IEFycmF5KDEtZikuam9pbigiMCIpK0hBKGMsTWF0aC5tYXgoMCxsK2YtMSkpWzBdfSxYOmM9Pk1hdGgucm91bmQoYykudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkseDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5n'@;
put 'KDE2KX07ZnVuY3Rpb24gSnVlKGMpe3JldHVybiBjfXZhciBOQSxmaCxRdWU9QXJyYXkucHJvdG90eXBlLm1hcCxlMGU9WyJ5IiwieiIsImEiLCJmIiwicCIsIm4iLCJceGI1IiwibSIsIiIsImsiLCJNIiwiRyIsIlQiLCJQIiwiRSIsIloiLCJZIl07IWZ1bmN0aW9uIHFvdChjKXtOQT1mdW5j'@;
put 'dGlvbiBHb3QoYyl7dmFyIGw9dm9pZCAwPT09Yy5ncm91cGluZ3x8dm9pZCAwPT09Yy50aG91c2FuZHM/SnVlOmZ1bmN0aW9uIFlvdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2Zvcih2YXIgaD1hLmxlbmd0aCxmPVtdLHY9MCxUPWNbMF0sWT0wO2g+MCYmVD4wJiYoWStUKzE+ZCYmKFQ9'@;
put 'TWF0aC5tYXgoMSxkLVkpKSxmLnB1c2goYS5zdWJzdHJpbmcoaC09VCxoK1QpKSwhKChZKz1UKzEpPmQpKTspVD1jW3Y9KHYrMSklYy5sZW5ndGhdO3JldHVybiBmLnJldmVyc2UoKS5qb2luKGwpfX0oUXVlLmNhbGwoYy5ncm91cGluZyxOdW1iZXIpLGMudGhvdXNhbmRzKyIiKSxhPXZvaWQg'@;
put 'MD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVswXSsiIixkPXZvaWQgMD09PWMuY3VycmVuY3k/IiI6Yy5jdXJyZW5jeVsxXSsiIixoPXZvaWQgMD09PWMuZGVjaW1hbD8iLiI6Yy5kZWNpbWFsKyIiLGY9dm9pZCAwPT09Yy5udW1lcmFscz9KdWU6ZnVuY3Rpb24gem90KGMpe3JldHVybiBm'@;
put 'dW5jdGlvbihsKXtyZXR1cm4gbC5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGEpe3JldHVybiBjWythXX0pfX0oUXVlLmNhbGwoYy5udW1lcmFscyxTdHJpbmcpKSx2PXZvaWQgMD09PWMucGVyY2VudD8iJSI6Yy5wZXJjZW50KyIiLFQ9dm9pZCAwPT09Yy5taW51cz8iXHUyMjEyIjpjLm1p'@;
put 'bnVzKyIiLFk9dm9pZCAwPT09Yy5uYW4/Ik5hTiI6Yy5uYW4rIiI7ZnVuY3Rpb24gcmUoX2Upe3ZhciBrZT0oX2U9eVooX2UpKS5maWxsLFdlPV9lLmFsaWduLEplPV9lLnNpZ24sdHQ9X2Uuc3ltYm9sLHl0PV9lLnplcm8sd3Q9X2Uud2lkdGgsTHQ9X2UuY29tbWEsb249X2UucHJlY2lzaW9u'@;
put 'LHNuPV9lLnRyaW0sTW49X2UudHlwZTsibiI9PT1Nbj8oTHQ9ITAsTW49ImciKTpYdWVbTW5dfHwodm9pZCAwPT09b24mJihvbj0xMiksc249ITAsTW49ImciKSwoeXR8fCIwIj09PWtlJiYiPSI9PT1XZSkmJih5dD0hMCxrZT0iMCIsV2U9Ij0iKTt2YXIgVm49IiQiPT09dHQ/YToiIyI9PT10'@;
put 'dCYmL1tib3hYXS8udGVzdChNbik/IjAiK01uLnRvTG93ZXJDYXNlKCk6IiIsdXI9IiQiPT09dHQ/ZDovWyVwXS8udGVzdChNbik/djoiIixUcj1YdWVbTW5dLFBpPS9bZGVmZ3BycyVdLy50ZXN0KE1uKTtmdW5jdGlvbiBIaSh3cil7dmFyIGpuLFVyLGVyLGFpPVZuLHRpPXVyO2lmKCJjIj09'@;
put 'PU1uKXRpPVRyKHdyKSt0aSx3cj0iIjtlbHNle3ZhciBEcj0od3I9K3dyKTwwfHwxL3dyPDA7aWYod3I9aXNOYU4od3IpP1k6VHIoTWF0aC5hYnMod3IpLG9uKSxzbiYmKHdyPWZ1bmN0aW9uIFpvdChjKXtlOmZvcih2YXIgaCxsPWMubGVuZ3RoLGE9MSxkPS0xO2E8bDsrK2Epc3dpdGNoKGNb'@;
put 'YV0pe2Nhc2UiLiI6ZD1oPWE7YnJlYWs7Y2FzZSIwIjowPT09ZCYmKGQ9YSksaD1hO2JyZWFrO2RlZmF1bHQ6aWYoIStjW2FdKWJyZWFrIGU7ZD4wJiYoZD0wKX1yZXR1cm4gZD4wP2Muc2xpY2UoMCxkKStjLnNsaWNlKGgrMSk6Y30od3IpKSxEciYmMD09K3dyJiYiKyIhPT1KZSYmKERyPSEx'@;
put 'KSxhaT0oRHI/IigiPT09SmU/SmU6VDoiLSI9PT1KZXx8IigiPT09SmU/IiI6SmUpK2FpLHRpPSgicyI9PT1Nbj9lMGVbOCtxdWUvM106IiIpK3RpKyhEciYmIigiPT09SmU/IikiOiIiKSxQaSlmb3Ioam49LTEsVXI9d3IubGVuZ3RoOysram48VXI7KWlmKDQ4Pihlcj13ci5jaGFyQ29kZUF0'@;
put 'KGpuKSl8fGVyPjU3KXt0aT0oNDY9PT1lcj9oK3dyLnNsaWNlKGpuKzEpOndyLnNsaWNlKGpuKSkrdGksd3I9d3Iuc2xpY2UoMCxqbik7YnJlYWt9fUx0JiYheXQmJih3cj1sKHdyLDEvMCkpO3ZhciBFcj1haS5sZW5ndGgrd3IubGVuZ3RoK3RpLmxlbmd0aCxndD1Fcjx3dD9uZXcgQXJyYXko'@;
put 'd3QtRXIrMSkuam9pbihrZSk6IiI7c3dpdGNoKEx0JiZ5dCYmKHdyPWwoZ3Qrd3IsZ3QubGVuZ3RoP3d0LXRpLmxlbmd0aDoxLzApLGd0PSIiKSxXZSl7Y2FzZSI8Ijp3cj1haSt3cit0aStndDticmVhaztjYXNlIj0iOndyPWFpK2d0K3dyK3RpO2JyZWFrO2Nhc2UiXiI6d3I9Z3Quc2xpY2Uo'@;
put 'MCxFcj1ndC5sZW5ndGg+PjEpK2FpK3dyK3RpK2d0LnNsaWNlKEVyKTticmVhaztkZWZhdWx0OndyPWd0K2FpK3dyK3RpfXJldHVybiBmKHdyKX1yZXR1cm4gb249dm9pZCAwPT09b24/NjovW2dwcnNdLy50ZXN0KE1uKT9NYXRoLm1heCgxLE1hdGgubWluKDIxLG9uKSk6TWF0aC5tYXgoMCxN'@;
put 'YXRoLm1pbigyMCxvbikpLEhpLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIF9lKyIifSxIaX1yZXR1cm57Zm9ybWF0OnJlLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBmZShfZSxrZSl7dmFyIFdlPXJlKCgoX2U9eVooX2UpKS50eXBlPSJmIixfZSkpLEplPTMqTWF0aC5tYXgoLTgsTWF0aC5t'@;
put 'aW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIEJvdChjKXtyZXR1cm4oYz1IQShNYXRoLmFicyhjKSkpP2NbMV06TmFOfShrZSkvMykpKSx0dD1NYXRoLnBvdygxMCwtSmUpLHl0PWUwZVs4K0plLzNdO3JldHVybiBmdW5jdGlvbih3dCl7cmV0dXJuIFdlKHR0Knd0KSt5dH19fX0oYyksZmg9TkEu'@;
put 'Zm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCB3Wj1NYXRoLlBJLE1aPTIqd1oseTY9MWUtNixKb3Q9TVoteTY7ZnVuY3Rpb24gdDBlKGMpe3RoaXMuXys9Y1swXTtmb3IobGV0IGw9MSxhPWMubGVuZ3RoO2w8YTsrK2wpdGhpcy5f'@;
put 'Kz1hcmd1bWVudHNbbF0rY1tsXX1jbGFzcyBDWntjb25zdHJ1Y3RvcihsKXt0aGlzLl94MD10aGlzLl95MD10aGlzLl94MT10aGlzLl95MT1udWxsLHRoaXMuXz0iIix0aGlzLl9hcHBlbmQ9bnVsbD09bD90MGU6ZnVuY3Rpb24gUW90KGMpe2xldCBsPU1hdGguZmxvb3IoYyk7aWYoIShsPj0w'@;
put 'KSl0aHJvdyBuZXcgRXJyb3IoYGludmFsaWQgZGlnaXRzOiAke2N9YCk7aWYobD4xNSlyZXR1cm4gdDBlO2NvbnN0IGE9MTAqKmw7cmV0dXJuIGZ1bmN0aW9uKGQpe3RoaXMuXys9ZFswXTtmb3IobGV0IGg9MSxmPWQubGVuZ3RoO2g8ZjsrK2gpdGhpcy5fKz1NYXRoLnJvdW5kKGFyZ3VtZW50'@;
put 'c1toXSphKS9hK2RbaF19fShsKX1tb3ZlVG8obCxhKXt0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDA9dGhpcy5feDE9K2x9LCR7dGhpcy5feTA9dGhpcy5feTE9K2F9YH1jbG9zZVBhdGgoKXtudWxsIT09dGhpcy5feDEmJih0aGlzLl94MT10aGlzLl94MCx0aGlzLl95MT10aGlzLl95MCx0aGlz'@;
put 'Ll9hcHBlbmRgWmApfWxpbmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT0rbH0sJHt0aGlzLl95MT0rYX1gfXF1YWRyYXRpY0N1cnZlVG8obCxhLGQsaCl7dGhpcy5fYXBwZW5kYFEkeytsfSwkeythfSwke3RoaXMuX3gxPStkfSwke3RoaXMuX3kxPStofWB9YmV6aWVyQ3VydmVU'@;
put 'byhsLGEsZCxoLGYsdil7dGhpcy5fYXBwZW5kYEMkeytsfSwkeythfSwkeytkfSwkeytofSwke3RoaXMuX3gxPStmfSwke3RoaXMuX3kxPSt2fWB9YXJjVG8obCxhLGQsaCxmKXtpZihsPStsLGE9K2EsZD0rZCxoPStoLChmPStmKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVz'@;
put 'OiAke2Z9YCk7bGV0IHY9dGhpcy5feDEsVD10aGlzLl95MSxZPWQtbCxyZT1oLWEsZmU9di1sLF9lPVQtYSxrZT1mZSpmZStfZSpfZTtpZihudWxsPT09dGhpcy5feDEpdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gO2Vsc2UgaWYoa2U+eTYpaWYoTWF0aC5hYnMo'@;
put 'X2UqWS1yZSpmZSk+eTYmJmYpe2xldCBXZT1kLXYsSmU9aC1ULHR0PVkqWStyZSpyZSx5dD1XZSpXZStKZSpKZSx3dD1NYXRoLnNxcnQodHQpLEx0PU1hdGguc3FydChrZSksb249ZipNYXRoLnRhbigod1otTWF0aC5hY29zKCh0dCtrZS15dCkvKDIqd3QqTHQpKSkvMiksc249b24vTHQsTW49'@;
put 'b24vd3Q7TWF0aC5hYnMoc24tMSk+eTYmJnRoaXMuX2FwcGVuZGBMJHtsK3NuKmZlfSwke2Erc24qX2V9YCx0aGlzLl9hcHBlbmRgQSR7Zn0sJHtmfSwwLDAsJHsrKF9lKldlPmZlKkplKX0sJHt0aGlzLl94MT1sK01uKll9LCR7dGhpcy5feTE9YStNbipyZX1gfWVsc2UgdGhpcy5fYXBwZW5k'@;
put 'YEwke3RoaXMuX3gxPWx9LCR7dGhpcy5feTE9YX1gfWFyYyhsLGEsZCxoLGYsdil7aWYobD0rbCxhPSthLHY9ISF2LChkPStkKTwwKXRocm93IG5ldyBFcnJvcihgbmVnYXRpdmUgcmFkaXVzOiAke2R9YCk7bGV0IFQ9ZCpNYXRoLmNvcyhoKSxZPWQqTWF0aC5zaW4oaCkscmU9bCtULGZlPWEr'@;
put 'WSxfZT0xXnYsa2U9dj9oLWY6Zi1oO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7cmV9LCR7ZmV9YDooTWF0aC5hYnModGhpcy5feDEtcmUpPnk2fHxNYXRoLmFicyh0aGlzLl95MS1mZSk+eTYpJiZ0aGlzLl9hcHBlbmRgTCR7cmV9LCR7ZmV9YCxkJiYoa2U8MCYmKGtlPWtlJU1a'@;
put 'K01aKSxrZT5Kb3Q/dGhpcy5fYXBwZW5kYEEke2R9LCR7ZH0sMCwxLCR7X2V9LCR7bC1UfSwke2EtWX1BJHtkfSwke2R9LDAsMSwke19lfSwke3RoaXMuX3gxPXJlfSwke3RoaXMuX3kxPWZlfWA6a2U+eTYmJnRoaXMuX2FwcGVuZGBBJHtkfSwke2R9LDAsJHsrKGtlPj13Wil9LCR7X2V9LCR7'@;
put 'dGhpcy5feDE9bCtkKk1hdGguY29zKGYpfSwke3RoaXMuX3kxPWErZCpNYXRoLnNpbihmKX1gKX1yZWN0KGwsYSxkLGgpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1oJHtkPStkfXYkeytofWgkey1kfVpgfXRvU3RyaW5nKCl7'@;
put 'cmV0dXJuIHRoaXMuX319ZnVuY3Rpb24gbjBlKCl7cmV0dXJuIG5ldyBDWn1mdW5jdGlvbiBlc3QoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiByMGUoYyxsLGEsZCxoLGYsdil7dmFyIFk9XzYoYTBlLmNhbGwodGhp'@;
put 'cyxmKSk7Yy5kYXRhKFtZXSksZ00uY2FsbChjLm5vZGUoKSxZKSxpMGUoYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gaTBlKGMsbCxhLGQsaCxmLHYpe3ZhciBUPXYuc2hvcnRlbmluZ3x8MCxfZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLGtlPWQtbCxXZT1oLWEsSmU9TWF0'@;
put 'aC5zcXJ0KGtlKmtlK1dlKldlKTtpZigwPT1KZSl2YXIgdHQ9MSx5dD0wO2Vsc2UgdHQ9a2UvSmUseXQ9V2UvSmU7aWYoZD1sKyhKZS1ULTEwLS4xKSp0dCxoPWErKEplLVQtMTAtLjEpKnl0LGYuVVJMfHxmLnRvb2x0aXApdmFyIHd0PWMuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigi'@;
put 'ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxMdD13dC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksb249d3Quc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgTHQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9u'@;
put 'KCJwYXRoIiksb249Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7dmFyIHNuPW4wZSgpO3NuLm1vdmVUbyhsLGEpLHNuLmxpbmVUbyhkLGgpLEx0LmF0dHIoImQiLHNuKSxkPWwrKEplLVQtMTApKnR0LGg9YSsoSmUtVC0xMCkqeXQ7Zm9yKHZhciBNbj0wO01uPF9l'@;
put 'Lmxlbmd0aDtNbisrKV9lW01uXT1lc3QoKFZuPV9lW01uXSlbMF0sVm5bMV0sdHQseXQpO2ZvcihNbj0wO01uPF9lLmxlbmd0aDtNbisrKV9lW01uXT1bZCsoVm49X2VbTW5dKVswXSxoK1ZuWzFdXTt2YXIgdXI9W107Zm9yKE1uPTA7TW48X2UubGVuZ3RoO01uKyspe3ZhciBWbjt1ci5wdXNo'@;
put 'KChWbj1fZVtNbl0pLmpvaW4oIiwiKSl9dmFyIFRyPXVyLmpvaW4oIiAiKTtyZXR1cm4gb24uYXR0cigicG9pbnRzIixUciksdGhpc31mdW5jdGlvbiBvMGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0'@;
put 'aGlzKTp0aGlzfWZ1bmN0aW9uIHMwZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6T3MobnVsbCl9ZnVuY3Rpb24gYTBlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2FdJiYobCs9JyAiJythKyciPSInK2NbYV0rJyIn'@;
put 'KTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIitsKyJdfSIsInN2ZyIsImRvdCIpLHY9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiBPcyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50'@;
put 'KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB2LmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBsMGUoYyxsLGEsZCxoLGYpe3ZhciBUPV82KGgwZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbVF0pLGdNLmNhbGwoYy5ub2RlKCksVCksYzBlKGMs'@;
put 'bCxhLGgpLHRoaXN9ZnVuY3Rpb24gYzBlKGMsbCxhLGQsaCl7aWYoZC5VUkx8fGQudG9vbHRpcCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBmPWM7dmFyIHY9Zi5zZWxlY3RBbGwoImVsbGlw'@;
put 'c2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksVD1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT12LnNpemUoKSl7dmFyIFk9di5ub2RlKCkuZ2V0QkJveCgpO1kuY3g9WS54K1kud2lkdGgvMixZLmN5PVkueStZLmhlaWdodC8yfWVsc2UgMCE9VC5zaXplKCkm'@;
put 'JihZPXt4OitULmF0dHIoIngiKSx5OitULmF0dHIoInkiKSx3aWR0aDowLGhlaWdodDowLGN4OitULmF0dHIoIngiKSxjeTorVC5hdHRyKCJ5Iil9KTtyZXR1cm4gdi5lYWNoKGZ1bmN0aW9uKHJlLGZlKXt2YXIgX2U9T3ModGhpcyk7aWYoX2UuYXR0cigiY3giKSlfZS5hdHRyKCJjeCIsU20o'@;
put 'bCkpLmF0dHIoImN5IixTbShhKSk7ZWxzZSBpZihfZS5hdHRyKCJwb2ludHMiKSl7dmFyIGtlPV9lLmF0dHIoInBvaW50cyIpLnRyaW0oKTtfZS5hdHRyKCJwb2ludHMiLGZ1bmN0aW9uIHBvdChmLGwsYSl7dmFyIGgsZD0oaD1mLnNwbGl0KCIgIikpLm1hcChmdW5jdGlvbih2KXtyZXR1cm4g'@;
put 'di5zcGxpdCgiLCIpfSk7cmV0dXJuIGQ9aC5tYXAoZnVuY3Rpb24odil7cmV0dXJuW1NtKCtsKyArdi5zcGxpdCgiLCIpWzBdKSxTbSgrYSsgK3Yuc3BsaXQoIiwiKVsxXSldfSksKGg9ZC5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpLmpvaW4oIiAiKX0oa2UsbC1ZLmN4'@;
put 'LGEtWS5jeSkpfWVsc2V7dmFyIFdlPV9lLmF0dHIoImQiKTtfZS5hdHRyKCJkIixmdW5jdGlvbiBtb3QoYyxsLGEpeyhmPWMuc3BsaXQoL1tBLVogXS8pKS5zaGlmdCgpO3ZhciBkPWMuc3BsaXQoL1teW0EtWiBdKy8pLGY9KGYubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9'@;
put 'KSxmLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bU20oK2wrICt2LnNwbGl0KCIsIilbMF0pLFNtKCthKyArdi5zcGxpdCgiLCIpWzFdKV19KS5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuam9pbigiLCIpfSkpO3JldHVybiBkLnJlZHVjZShmdW5jdGlvbih2LFQsWSl7cmV0dXJuIHYuY29uY2F0'@;
put 'KFQsZltZXSl9LFtdKS5qb2luKCIiKX0oV2UsbC1ZLmN4LGEtWS5jeSkpfX0pLDAhPVQuc2l6ZSgpJiZULmF0dHIoIngiLFNtKCtULmF0dHIoIngiKStsLVkuY3gpKS5hdHRyKCJ5IixTbSgrVC5hdHRyKCJ5IikrYS1ZLmN5KSksdGhpc31mdW5jdGlvbiB1MGUoKXtpZighdGhpcy5fZHJhd25O'@;
put 'b2RlKXJldHVybiB0aGlzO3ZhciBjPXRoaXMuX2RyYXduTm9kZS5nO3JldHVybiBjLmVtcHR5KCl8fGMucmVtb3ZlKCksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc31mdW5jdGlvbiBkMGUoKXtyZXR1cm4gdGhpcy5fZHJhd25Ob2RlP3RoaXMuX2RyYXduTm9kZS5nOk9zKG51bGwpfWZ1bmN0'@;
put 'aW9uIGgwZShjLGwpe3ZhciBhPSIiO2Zvcih2YXIgZCBvZiBPYmplY3Qua2V5cyhsKSludWxsIT1sW2RdJiYoYSs9JyAiJytkKyciPSInK2xbZF0rJyInKTt2YXIgZj10aGlzLmxheW91dFN5bmMoJ2dyYXBoIHsiJytjKyciIFsnK2ErIl19Iiwic3ZnIiwiZG90IiksVD0obmV3IHdpbmRvdy5E'@;
put 'T01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyhmLCJpbWFnZS9zdmcreG1sIik7cmV0dXJuIE9zKGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSkuYXBwZW5kKGZ1bmN0aW9uKCl7cmV0dXJuIFQuZG9jdW1lbnRFbGVtZW50fSkuc2VsZWN0KCIubm9kZSIpfWZ1bmN0aW9uIFZBKGMp'@;
put 'e3NlbGYuZG9jdW1lbnQ9e30sYy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihsKXtsZXQgYT1zZWxmWyJAaHBjYy1qcy93YXNtIl07bnVsbD09YSYmbC5kYXRhLnZpelVSTCYmKGltcG9ydFNjcmlwdHMobC5kYXRhLnZpelVSTCksYT1zZWxmWyJAaHBjYy1qcy93YXNtIl0p'@;
put 'LCJ2ZXJzaW9uIiE9bC5kYXRhLnR5cGU/YS5HcmFwaHZpei5sb2FkKCkudGhlbihkPT57Y29uc3QgaD1kLmxheW91dChsLmRhdGEuZG90LCJzdmciLGwuZGF0YS5lbmdpbmUsbC5kYXRhLm9wdGlvbnMpO2MucG9zdE1lc3NhZ2UoaD97dHlwZToiZG9uZSIsc3ZnOmh9OmwuZGF0YS52aXpVUkw/'@;
put 'e3R5cGU6ImluaXQifTp7dHlwZToic2tpcCJ9KX0pLmNhdGNoKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJlcnJvciIsZXJyb3I6ZC5tZXNzYWdlfSl9KTphLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9PntjLnBvc3RNZXNzYWdlKHt0eXBlOiJ2ZXJzaW9uIix2ZXJzaW9uOmQudmVyc2lvbigp'@;
put 'fSl9KX0pfWZ1bmN0aW9uIGNzdCgpe1ZBKHNlbGYpfWZ1bmN0aW9uIHVzdCgpe3NlbGYub25jb25uZWN0PWZ1bmN0aW9uKGMpe2NvbnN0IGw9Yy5wb3J0c1swXTtWQShsKSxsLnN0YXJ0KCl9fWZ1bmN0aW9uIFNaKGMsbCl7aWYodGhpcy5fb3B0aW9ucz17dXNlV29ya2VyOiEwLHVzZVNoYXJl'@;
put 'ZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0bGUiLGZhZGU6ITAsdHdlZW5QYXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9vbTohMCx6b29tU2NhbGVFeHRl'@;
put 'bnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMuX29wdGlvbnNbYV09bFthXTtl'@;
put 'bHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlvbnMudXNlV29ya2VyPWwpO3ZhciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihkPSExKSx0eXBlb2YgU2hhcmVkV29ya2VyPiJ1'@;
put 'IiYmKGg9ITEpLGR8fGgpe3ZhciB2PVVVKCJzY3JpcHQiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdC93b3JrZXIiPT1Pcyh0aGlzKS5hdHRyKCJ0eXBlIil8fE9zKHRoaXMpLmF0dHIoInNyYyIpJiZPcyh0aGlzKS5hdHRyKCJzcmMiKS5tYXRjaCgvLipcL0BocGNjLWpz'@;
put 'XC93YXNtLyl9KTswPT12LnNpemUoKT8oY29uc29sZS53YXJuKCdObyBzY3JpcHQgdGFnIG9mIHR5cGUgImphdmFzY3JpcHQvd29ya2VyIiB3YXMgZm91bmQgYW5kICJ1c2VXb3JrZXIiIGlzIHRydWUuIE5vdCB1c2luZyB3ZWIgd29ya2VyLicpLGQ9ITEsaD0hMSk6KHRoaXMuX3ZpelVSTD12'@;
put 'LmF0dHIoInNyYyIpLHRoaXMuX3ZpelVSTHx8KGNvbnNvbGUud2FybignTm8gInNyYyIgYXR0cmlidXRlIG9mIHdhcyBmb3VuZCBvbiB0aGUgImphdmFzY3JpcHQvd29ya2VyIiBzY3JpcHQgdGFnIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSEx'@;
put 'LGg9ITEpKX1pZihoKXtjb25zdCByZT0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2EoVkEudG9TdHJpbmcoKSsiKCIrdXN0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtlcihyZSksdGhpcy5fd29ya2Vy'@;
put 'UG9ydD10aGlzLl93b3JrZXIucG9ydCx0aGlzLl93b3JrZXJQb3J0Q2xvc2U9dGhpcy5fd29ya2VyLnBvcnQuY2xvc2UuYmluZCh0aGlzLl93b3JrZXJQb3J0KSx0aGlzLl93b3JrZXIucG9ydC5zdGFydCgpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIGlmKGQpe3ZhciBUPW5ldyBC'@;
put 'bG9iKFtWQS50b1N0cmluZygpKyIoIitjc3QudG9TdHJpbmcoKSsiKSgpIl0pLFk9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoVCk7dGhpcy5fd29ya2VyPW5ldyBXb3JrZXIoWSksdGhpcy5fd29ya2VyUG9ydD10aGlzLl93b3JrZXIsdGhpcy5fd29ya2VyUG9ydENsb3NlPXRoaXMuX3dv'@;
put 'cmtlci50ZXJtaW5hdGUuYmluZCh0aGlzLl93b3JrZXIpLHRoaXMuX3dvcmtlckNhbGxiYWNrcz1bXX1lbHNlIENtLmxvYWQoKS50aGVuKChyZT0+e3RoaXMuX2dyYXBodml6VmVyc2lvbj1yZS52ZXJzaW9uKCl9KS5iaW5kKHRoaXMpKTt0aGlzLl9zZWxlY3Rpb249Yyx0aGlzLl9hY3RpdmU9'@;
put 'ITEsdGhpcy5fYnVzeT0hMSx0aGlzLl9qb2JzPVtdLHRoaXMuX3F1ZXVlPVtdLHRoaXMuX2tleU1vZGVzPW5ldyBTZXQoWyJ0aXRsZSIsImlkIiwidGFnLWluZGV4IiwiaW5kZXgiXSksdGhpcy5faW1hZ2VzPVtdLHRoaXMuX3RyYW5zbGF0aW9uPXZvaWQgMCx0aGlzLl9zY2FsZT12b2lkIDAs'@;
put 'dGhpcy5fZXZlbnRUeXBlcz1bImluaXRFbmQiLCJzdGFydCIsImxheW91dFN0YXJ0IiwibGF5b3V0RW5kIiwiZGF0YUV4dHJhY3RFbmQiLCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIiwiZGF0YVByb2Nlc3NQYXNzMkVuZCIsImRhdGFQcm9jZXNzRW5kIiwicmVuZGVyU3RhcnQiLCJyZW5kZXJFbmQi'@;
put 'LCJ0cmFuc2l0aW9uU3RhcnQiLCJ0cmFuc2l0aW9uRW5kIiwicmVzdG9yZUVuZCIsImVuZCIsInpvb20iXSx0aGlzLl9kaXNwYXRjaD1aVSguLi50aGlzLl9ldmVudFR5cGVzKSxnb3QuY2FsbCh0aGlzKSxjLm5vZGUoKS5fX2dyYXBodml6X189dGhpc31mdW5jdGlvbiBqQShjLGwpe3JldHVy'@;
put 'biBPcyhjKS5ncmFwaHZpeihsKX1uMGUucHJvdG90eXBlPUNaLnByb3RvdHlwZSxTWi5wcm90b3R5cGU9akEucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpTWixlbmdpbmU6ZnVuY3Rpb24gRG90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmVuZ2luZT1jLHRoaXN9LGFkZEltYWdlOmZ1bmN0aW9u'@;
put 'IEFvdChjLGwsYSl7cmV0dXJuIHRoaXMuX2ltYWdlcy5wdXNoKHtwYXRoOmMsd2lkdGg6bCxoZWlnaHQ6YX0pLHRoaXN9LGtleU1vZGU6ZnVuY3Rpb24gTG90KGMpe2lmKCF0aGlzLl9rZXlNb2Rlcy5oYXMoYykpdGhyb3cgRXJyb3IoIklsbGVnYWwga2V5TW9kZTogIitjKTtpZihjIT10aGlz'@;
put 'Ll9vcHRpb25zLmtleU1vZGUmJm51bGwhPXRoaXMuX2RhdGEpdGhyb3cgRXJyb3IoIlRvbyBsYXRlIHRvIGNoYW5nZSBrZXlNb2RlIik7cmV0dXJuIHRoaXMuX29wdGlvbnMua2V5TW9kZT1jLHRoaXN9LGZhZGU6ZnVuY3Rpb24gSW90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZhZGU9Yyx0'@;
put 'aGlzfSx0d2VlblBhdGhzOmZ1bmN0aW9uIFJvdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBhdGhzPWMsdGhpc30sdHdlZW5TaGFwZXM6ZnVuY3Rpb24gT290KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzPWMsYyYmKHRoaXMuX29wdGlvbnMudHdlZW5QYXRocz0h'@;
put 'MCksdGhpc30sY29udmVydEVxdWFsU2lkZWRQb2x5Z29uczpmdW5jdGlvbiBQb3QoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuY29udmVydEVxdWFsU2lkZWRQb2x5Z29ucz1jLHRoaXN9LHR3ZWVuUHJlY2lzaW9uOmZ1bmN0aW9uIEZvdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy50d2VlblBy'@;
put 'ZWNpc2lvbj1jLHRoaXN9LGdyb3dFbnRlcmluZ0VkZ2VzOmZ1bmN0aW9uIEhvdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcz1jLHRoaXN9LHpvb206ZnVuY3Rpb24gTml0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb209Yyx0aGlzLl9vcHRpb25zLnpvb20m'@;
put 'JiF0aGlzLl96b29tQmVoYXZpb3I/WXVlLmNhbGwodGhpcyk6IXRoaXMuX29wdGlvbnMuem9vbSYmdGhpcy5fem9vbUJlaGF2aW9yJiYodGhpcy5fem9vbVNlbGVjdGlvbi5vbigiLnpvb20iLG51bGwpLHRoaXMuX3pvb21CZWhhdmlvcj1udWxsKSx0aGlzfSxyZXNldFpvb206ZnVuY3Rpb24g'@;
put 'Vml0KGMpe3ZhciBsPXRoaXMuX3pvb21TZWxlY3Rpb247cmV0dXJuIGMmJihsPWwudHJhbnNpdGlvbihjKSksbC5jYWxsKHRoaXMuX3pvb21CZWhhdmlvci50cmFuc2Zvcm0sdGhpcy5fb3JpZ2luYWxUcmFuc2Zvcm0pLHRoaXN9LHpvb21CZWhhdmlvcjpmdW5jdGlvbiBZaXQoKXtyZXR1cm4g'@;
put 'dGhpcy5fem9vbUJlaGF2aW9yfHxudWxsfSx6b29tU2VsZWN0aW9uOmZ1bmN0aW9uIHppdCgpe3JldHVybiB0aGlzLl96b29tU2VsZWN0aW9ufHxudWxsfSx6b29tU2NhbGVFeHRlbnQ6ZnVuY3Rpb24gaml0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21TY2FsZUV4dGVudD1jLHRoaXN9'@;
put 'LHpvb21UcmFuc2xhdGVFeHRlbnQ6ZnVuY3Rpb24gQml0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQ9Yyx0aGlzfSxyZW5kZXI6ZnVuY3Rpb24gcWl0KGMpe3JldHVybiB0aGlzLl9idXN5Pyh0aGlzLl9xdWV1ZS5wdXNoKHRoaXMucmVuZGVyLmJpbmQodGhp'@;
put 'cyxjKSksdGhpcyk6KHRoaXMuX2Rpc3BhdGNoLmNhbGwoInJlbmRlclN0YXJ0Iix0aGlzKSx0aGlzLl90cmFuc2l0aW9uRmFjdG9yeT92QShmdW5jdGlvbigpe3RoaXMuX3RyYW5zaXRpb249b1oodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSksWnVlLmNhbGwodGhpcyxjKX0uYmluZCh0aGlz'@;
put 'KSwwKTpadWUuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gX290KGMsbCxhLGQpe2lmKHRoaXMuX3dvcmtlcil2Wi5jYWxsKHRoaXMse3R5cGU6ImxheW91dCIsZG90OmMsZW5naW5lOmwsb3B0aW9uczphfSxmdW5jdGlvbihmKXtkLmNhbGwodGhpcyxmLmRhdGEpfSk7ZWxz'@;
put 'ZSB0cnl7dmFyIGg9dGhpcy5sYXlvdXRTeW5jKGMsInN2ZyIsbCxhKTtkLmNhbGwodGhpcyx7dHlwZToiZG9uZSIsc3ZnOmh9KX1jYXRjaChmKXtkLmNhbGwodGhpcyx7dHlwZToiZXJyb3IiLGVycm9yOmYubWVzc2FnZX0pfX0sZG90OmZ1bmN0aW9uIHZvdChjLGwpe3ZhciBhPXRoaXMsaD10'@;
put 'aGlzLl9vcHRpb25zLmVuZ2luZSxmPXRoaXMuX2ltYWdlcztyZXR1cm4gdGhpcy5fZGlzcGF0Y2guY2FsbCgic3RhcnQiLHRoaXMpLHRoaXMuX2J1c3k9ITAsdGhpcy5fZGlzcGF0Y2guY2FsbCgibGF5b3V0U3RhcnQiLHRoaXMpLHRoaXMuX3dvcmtlcnx8bnVsbCE9dGhpcy5sYXlvdXRTeW5j'@;
put 'Pyh0aGlzLmxheW91dChjLGgse2ltYWdlczpmfSxmdW5jdGlvbihUKXtzd2l0Y2goVC50eXBlKXtjYXNlImVycm9yIjppZighYS5fb25lcnJvcil0aHJvdyBULmVycm9yLm1lc3NhZ2U7YS5fb25lcnJvcihULmVycm9yKTticmVhaztjYXNlImRvbmUiOnlvdC5jYWxsKHRoaXMsVC5zdmcsbCl9'@;
put 'fSksdGhpcyk6KHRoaXMuX2FmdGVySW5pdD10aGlzLmRvdC5iaW5kKHRoaXMsYyxsKSx0aGlzKX0sZGF0YTpmdW5jdGlvbiBXaXQoKXtyZXR1cm4gdGhpcy5fZGF0YXx8bnVsbH0scmVuZGVyRG90OmZ1bmN0aW9uIGJvdChjLGwpe3ZhciBhPXRoaXM7cmV0dXJuIHRoaXMuZG90KGMsZnVuY3Rp'@;
put 'b24gZCgpe2EucmVuZGVyKGwpfSksdGhpc30sdHJhbnNpdGlvbjpmdW5jdGlvbiB3b3QoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBGdW5jdGlvbj90aGlzLl90cmFuc2l0aW9uRmFjdG9yeT1jOnRoaXMuX3RyYW5zaXRpb249b1ooYyksdGhpc30sYWN0aXZlOmZ1bmN0aW9uIE1vdChjKXt2YXIg'@;
put 'YT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIik7cmV0dXJuIDAhPWEuc2l6ZSgpP2Z1bmN0aW9uIF9pdChjLGwpe3ZhciBkLGgsYT1jLl9fdHJhbnNpdGlvbjtpZihhKWZvcihoIGluIGw9bnVsbD09bD9udWxsOmwrIiIsYSlpZigoZD1hW2hdKS5z'@;
put 'dGF0ZT4xJiZkLm5hbWU9PT1sKXJldHVybiBuZXcgWWYoW1tjXV0sZ2l0LGwsK2gpO3JldHVybiBudWxsfShhLm5vZGUoKSxjKTpudWxsfSxvcHRpb25zOmZ1bmN0aW9uIENvdChjKXtpZih0eXBlb2YgYz4idSIpcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdGhpcy5fb3B0aW9ucyk7Zm9yKHZh'@;
put 'ciBsIG9mIE9iamVjdC5rZXlzKGMpKXRoaXMuX29wdGlvbnNbbF09Y1tsXTtyZXR1cm4gdGhpc30sd2lkdGg6ZnVuY3Rpb24gU290KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLndpZHRoPWMsdGhpc30saGVpZ2h0OmZ1bmN0aW9uIHhvdChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5oZWlnaHQ9'@;
put 'Yyx0aGlzfSxzY2FsZTpmdW5jdGlvbiBrb3QoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuc2NhbGU9Yyx0aGlzfSxmaXQ6ZnVuY3Rpb24gRW90KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmZpdD1jLHRoaXN9LGF0dHJpYnV0ZXI6ZnVuY3Rpb24gVG90KGMpe3JldHVybiB0aGlzLl9hdHRyaWJ1'@;
put 'dGVyPWMsdGhpc30sb246ZnVuY3Rpb24gTm90KGMsbCl7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLm9uKGMsbCksdGhpc30sb25lcnJvcjpmdW5jdGlvbiBWb3QoYyl7cmV0dXJuIHRoaXMuX29uZXJyb3I9Yyx0aGlzfSxsb2dFdmVudHM6ZnVuY3Rpb24gS290KGMpe3ZhciBsPURhdGUubm93KCks'@;
put 'YT17fSxkPXRoaXMuX2V2ZW50VHlwZXMsaD1NYXRoLm1heCguLi5kLm1hcChZPT5ZLmxlbmd0aCkpO2ZvcihsZXQgWT0wO1k8ZC5sZW5ndGg7WSsrKXtsZXQgcmU9ZFtZXTthW3JlXT1bXTt2YXIgdixULGY9dGhpczt0aGlzLm9uKHJlKyIubG9nIixjP2Z1bmN0aW9uKCl7dmFyIGZlPURhdGUu'@;
put 'bm93KCksX2U9YVtyZV0ubGVuZ3RoO2FbcmVdLnB1c2goZmUpO3ZhciBrZT0iIjtpZihrZSs9IkV2ZW50ICIsa2UrPWZoKCIgPjIiKShZKSsiICIsa2UrPXJlKyIgIi5yZXBlYXQoaC1yZS5sZW5ndGgpLGtlKz1maCgiID41IikoZmUtbCkrIiAiLCJpbml0RW5kIiE9cmUmJihrZSs9ZmgoIiA+'@;
put 'NSIpKGZlLWEuc3RhcnRbX2VdKSksImRhdGFQcm9jZXNzRW5kIj09cmUmJihrZSs9IiBwcmVwYXJlICAgICAgICAgICAgICAgICAiK2ZoKCIgPjUiKShmZS1hLmxheW91dEVuZFtfZV0pKSwicmVuZGVyRW5kIj09cmUmJmYuX3RyYW5zaXRpb24mJihrZSs9IiB0cmFuc2l0aW9uIHN0YXJ0IG1h'@;
put 'cmdpbiAiK2ZoKCIgPjUiKShmLl90cmFuc2l0aW9uLmRlbGF5KCktKGZlLWEucmVuZGVyU3RhcnRbX2VdKSksdj1mLl90cmFuc2l0aW9uLmRlbGF5KCksVD1mLl90cmFuc2l0aW9uLmR1cmF0aW9uKCkpLCJ0cmFuc2l0aW9uU3RhcnQiPT1yZSl7dmFyIFdlPWZlLWEucmVuZGVyU3RhcnRbX2Vd'@;
put 'O2tlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrZmgoIiA+NSIpKGZlLWEucmVuZGVyU3RhcnRbX2VdKSxrZSs9IiBleHBlY3RlZCAiK2ZoKCIgPjUiKSh2KSxrZSs9IiBkaWZmICIrZmgoIiA+NSIpKFdlLXYpfWlmKCJ0cmFuc2l0aW9uRW5kIj09cmUpe3ZhciBKZT1mZS1hLnRyYW5z'@;
put 'aXRpb25TdGFydFtfZV07a2UrPSIgdHJhbnNpdGlvbiBkdXJhdGlvbiAgICAgIitmaCgiID41IikoSmUpLGtlKz0iIGV4cGVjdGVkICIrZmgoIiA+NSIpKFQpLGtlKz0iIGRpZmYgIitmaCgiID41IikoSmUtVCl9Y29uc29sZS5sb2coa2UpLGw9ZmV9Om51bGwpfXJldHVybiB0aGlzfSxkZXN0'@;
put 'cm95OmZ1bmN0aW9uIFhvdCgpe3JldHVybiBkZWxldGUgdGhpcy5fc2VsZWN0aW9uLm5vZGUoKS5fX2dyYXBodml6X18sdGhpcy5fd29ya2VyJiZ0aGlzLl93b3JrZXJQb3J0Q2xvc2UoKSx0aGlzfSxkcmF3RWRnZTpmdW5jdGlvbiB0c3QoYyxsLGEsZCxoLGY9e30pe2lmKChoPU9iamVjdC5h'@;
put 'c3NpZ24oe30saCkpLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciB2PU9zKG51bGwpO2Vsc2V7dmFyIHJlPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksX2U9XzYo'@;
put 'YTBlLmNhbGwodGhpcyxoKSk7dj1yZS5hcHBlbmQoImciKS5kYXRhKFtfZV0pLGdNLmNhbGwodi5ub2RlKCksX2UpLHIwZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17Zzp2LHgxOmMseTE6bCx4MjphLHkyOmQsYXR0cmlidXRlczpofSx0aGlzfSx1'@;
put 'cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24gbnN0KGMsbCxhLGQsaD17fSxmPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIHY9dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9T2JqZWN0LmFzc2lnbih0aGlzLl9kcmF3bkVk'@;
put 'Z2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9Yyx0aGlzLl9kcmF3bkVkZ2UueTE9bCx0aGlzLl9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhdi5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwodj10aGlzLl9zZWxlY3Rp'@;
put 'b24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPXYpLHYuZW1wdHkoKXx8cjBlLmNhbGwodGhpcyx2LGMsbCxhLGQsaCxmKSx0aGlzfSxtb3ZlRHJhd25FZGdl'@;
put 'RW5kUG9pbnQ6ZnVuY3Rpb24gcnN0KGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10aGlzLl9kcmF3bkVkZ2UueTEsdj10aGlzLl9k'@;
put 'cmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25FZGdlLngyPWMsdGhpcy5fZHJhd25FZGdlLnkyPWwsaTBlKGQsaCxmLGMsbCx2LGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiBpc3QoYyl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJvcigiTm8gZWRn'@;
put 'ZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXduRWRnZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgdj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlv'@;
put 'bigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLFQ9di5kYXR1bSgpLFk9dGhpcy5fZXh0cmFjdERhdGEobCxULmNoaWxkcmVuLmxlbmd0aCx2LmRhdHVtKCkpO3JldHVybiBULmNoaWxkcmVuLnB1c2goWSksZFoobCxZKSx0aGlzLl9kcmF3bkVkZ2U9bnVsbCx0aGlz'@;
put 'fSxyZW1vdmVEcmF3bkVkZ2U6bzBlLHJlbW92ZURyYXduRWRnZTpvMGUsZHJhd25FZGdlU2VsZWN0aW9uOnMwZSxkcmF3bkVkZ2VTZWxlY3Rpb246czBlLGRyYXdOb2RlOmZ1bmN0aW9uIG9zdChjLGwsYSxkPXt9LGg9e30pe2lmKChkPU9iamVjdC5hc3NpZ24oe30sZCkpLnN0eWxlJiZkLnN0'@;
put 'eWxlLmluY2x1ZGVzKCJpbnZpcyIpKXZhciBmPU9zKG51bGwpO2Vsc2V7dmFyIFk9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxmZT1fNihoMGUuY2FsbCh0aGlzLGEsZCkpO2Y9WS5h'@;
put 'cHBlbmQoImciKS5kYXRhKFtmZV0pLGdNLmNhbGwoZi5ub2RlKCksZmUpLGwwZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpfXJldHVybiB0aGlzLl9kcmF3bk5vZGU9e2c6Zixub2RlSWQ6YSx4OmMseTpsLGF0dHJpYnV0ZXM6ZH0sdGhpc30sdXBkYXRlRHJhd25Ob2RlOmZ1bmN0aW9uIHNzdChj'@;
put 'LGwsYSxkPXt9LGg9e30pe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTt2YXIgZj10aGlzLl9kcmF3bk5vZGUuZztyZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5fZHJhd25Ob2RlLm5vZGVJZCksZD1PYmplY3QuYXNzaWduKHRoaXMuX2Ry'@;
put 'YXduTm9kZS5hdHRyaWJ1dGVzLGQpLHRoaXMuX2RyYXduTm9kZS5ub2RlSWQ9YSx0aGlzLl9kcmF3bk5vZGUueD1jLHRoaXMuX2RyYXduTm9kZS55PWwsIWYuZW1wdHkoKXx8ZC5zdHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKXx8KGY9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdpdGhv'@;
put 'dXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5hcHBlbmQoImciKSx0aGlzLl9kcmF3bk5vZGUuZz1mKSxmLmVtcHR5KCl8fGwwZS5jYWxsKHRoaXMsZixjLGwsYSxkLGgpLHRoaXN9LG1vdmVEcmF3bk5vZGU6ZnVuY3Rpb24gYXN0KGMs'@;
put 'bCxhPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25Ob2RlLmcsaD10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25Ob2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1s'@;
put 'LGQuZW1wdHkoKXx8YzBlKGQsYyxsLGgpLHRoaXN9LGluc2VydERyYXduTm9kZTpmdW5jdGlvbiBsc3QoYyl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO251bGw9PWMmJihjPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpO3ZhciBsPXRo'@;
put 'aXMuX2RyYXduTm9kZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpczt2YXIgYT10aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcztpZihsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKSxhLlVSTHx8YS50b29sdGlwKXZhciBmPWwuc2VsZWN0V2l0aG91dERh'@;
put 'dGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxUPShmLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksZi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0IikpO2Vsc2Ug'@;
put 'bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLFQ9bC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0ZXh0Iik7VC50ZXh0KGEubGFiZWx8fGMpO3ZhciBmZT10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQ'@;
put 'cm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLF9lPWZlLmRhdHVtKCksa2U9dGhpcy5fZXh0cmFjdERhdGEobCxfZS5jaGlsZHJlbi5sZW5ndGgsZmUuZGF0dW0oKSk7cmV0dXJuIF9lLmNoaWxkcmVuLnB1c2goa2UpLGRaKGwsa2UpLHRoaXMuX2Ry'@;
put 'YXduTm9kZT1udWxsLHRoaXN9LHJlbW92ZURyYXduTm9kZTp1MGUscmVtb3ZlRHJhd25Ob2RlOnUwZSxkcmF3bk5vZGVTZWxlY3Rpb246ZDBlLGRyYXduTm9kZVNlbGVjdGlvbjpkMGUsZ3JhcGh2aXpWZXJzaW9uOmZ1bmN0aW9uIEtpdCgpe3JldHVybiB0aGlzLl9ncmFwaHZpelZlcnNpb259'@;
put 'fSxkNi5wcm90b3R5cGUuZ3JhcGh2aXo9ZnVuY3Rpb24gZHN0KGMpe3ZhciBsPXRoaXMubm9kZSgpLl9fZ3JhcGh2aXpfXztyZXR1cm4gbD8obC5vcHRpb25zKGMpLHZBKGZ1bmN0aW9uKCl7bC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyl9LmJpbmQodGhpcyksMCkpOmw9bmV3IFNa'@;
put 'KHRoaXMsYyksbH0sZDYucHJvdG90eXBlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb249ZnVuY3Rpb24gaHN0KGMpe3JldHVybiBPcyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciBmc3Q9Uig5ODA4Myk7ZnVuY3Rpb24gcHN0KGMsbCl7'@;
put 'MSZjJiZKdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIG1zdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiwzMCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIiLHh0KGgubGlicmFy'@;
put 'eU9uRmlsdGVyKCkpfSksYmUoKX19ZnVuY3Rpb24gZ3N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwyNiwyKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3Jl'@;
put 'dHVybiBxcihmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLHh0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGJlKCksYnQoNCxwc3QsMSwwLCJjbHItaWNvbiIsMjcpKDUsbXN0LDEs'@;
put 'MCwiY2xyLWljb24iLDI4KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDMpLGQ9WmUoKTt3ZSgyKSxXcigibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLHdlKDIpLFBlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSx3ZSgpLFBlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rp'@;
put 'b24gX3N0KGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIHZzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiwzMCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpLFplKCk7Y29uc3QgaD1YaSgzKSxmPVplKDIpLiRpbXBsaWNpdCx2PVpl'@;
put 'KCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIseHQodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGJlKCl9fWZ1bmN0aW9uIHlzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgy'@;
put 'LCJpbnB1dCIsMzYsMyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoMikuJGltcGxpY2l0O3JldHVybiBxcihmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLHh0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0'@;
put 'IGg9WmUoMikuJGltcGxpY2l0O3JldHVybiB4dChaZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksYmUoKSxidCg0LF9zdCwxLDAsImNsci1pY29uIiwyNykoNSx2c3QsMSwwLCJjbHItaWNvbiIsMjgpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgy'@;
put 'KS4kaW1wbGljaXQ7d2UoMiksV3IoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGJzdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDI5KX1mdW5jdGlv'@;
put 'biB3c3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKSxaZSgpO2NvbnN0IGg9WGkoMyksZj1aZSgpLiRpbXBsaWNpdCx2PVplKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLHh0KHYu'@;
put 'dHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGJlKCl9fWZ1bmN0aW9uIE1zdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzksMyksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgp'@;
put 'e1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoMykudHJlZU9uRmlsdGVy'@;
put 'KGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGJlKCksYnQoNCxic3QsMSwwLCJjbHItaWNvbiIsMjcpKDUsd3N0LDEsMCwiY2xyLWljb24iLDI4KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDMpLGQ9WmUoKS4kaW1wbGljaXQ7d2UoMiksV3IoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSx3'@;
put 'ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIENzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7'@;
put 'Y29uc3QgaD1TdChhKS4kaW1wbGljaXQsZj1aZSgpLiRpbXBsaWNpdCx2PVplKDIpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxKdCgyLCJjbHItaWNvbiIsNDEpLHplKDMpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1aZSg0'@;
put 'KTt3ZSgpLGJyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLHdlKDIpLHhyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gU3N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oaCl7Y29uc3QgZj1TdChhKS4kaW1wbGljaXQsdj1aZSgyKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSksR3IoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4gcXIo'@;
put 'Zi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCkseHQoaCl9KSxnZSgxLCJwIiwzNyksSHQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9U3QoYSkuJGltcGxpY2l0LGY9WmUoMikuJGltcGxpY2l0O3JldHVybiB4dChaZSgpLnRhYmxlT25DbGljayhoLlRBQkxFVVJJLGgsZikpfSksSnQo'@;
put 'MiwiY2xyLWljb24iLDM4KSx6ZSgzKSxiZSgpLGJ0KDQsTXN0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxDc3QsNCwzLCJjbHItdHJlZS1ub2RlIiw2KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDticigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxXcigiY2xyRXhwYW5k'@;
put 'ZWQiLGEuZXhwYW5kZWQpLFBlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSx3ZSgpLFBlKCJpZCIsYS5UQUJMRVVSSSksd2UoMikseHIoIiAiLGEuVEFCTEVOQU1FLCIgIiksd2UoKSxQZSgibmdJZiIsYS5jb2x1bW5zKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLmNv'@;
put 'bHVtbnMpfX1mdW5jdGlvbiB4c3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiwzMiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCkuJGltcGxpY2l0LHY9WmUoKTtyZXR1cm4geHQodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYu'@;
put 'bGlicmFyeUxpc3QpKX0pLEdyKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCkseHQoaCl9KSxnZSgxLCJwIiwzMyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0'@;
put 'KGEpO2NvbnN0IGg9WmUoKS4kaW1wbGljaXQsZj1aZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllJRCx4dChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxKdCgyLCJjbHItaWNvbiIsMzQpLHplKDMpLGJlKCksYnQoNCx5c3QsNiwzLCJjbHItdHJlZS1ub2RlIiw1KSg1LFNzdCw2'@;
put 'LDgsImNsci10cmVlLW5vZGUiLDM1KSxiZSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDticigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxXcigiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLFBlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksd2Uo'@;
put 'MykseHIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSx3ZSgpLFBlKCJuZ0lmIixhLnRhYmxlcyksd2UoKSxQZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBrc3QoYyxsKXtpZigxJmMmJihyaSgwKSxidCgxLHhzdCw2LDcsImNsci10cmVlLW5vZGUiLDMxKSxpaSgpKSwyJmMpe2NvbnN0'@;
put 'IGE9bC4kaW1wbGljaXQ7d2UoKSxQZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIEVzdChjLGwpezEmYyYmKGdlKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSx6ZSgyLCIgTG9hZGluZy4uLiAiKSxiZSgpKCkpfWZ1bmN0aW9uIFRzdChjLGwpezEmYyYmKGdl'@;
put 'KDAsImRpdiIsNDQpLEp0KDEsImNsci1pY29uIiw0NSksZ2UoMiwiaDMiLDQ2KSx6ZSgzLCJQbGVhc2Ugc2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlIiksYmUoKSgpKX1mdW5jdGlvbiBEc3QoYyxsKXtpZigxJmMmJihnZSgwLCJoMyIsNTUpLHplKDEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgz'@;
put 'KTt3ZSgpLHhyKCIgIixhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbj9hLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlKyIuIithLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjphLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlLCIgIil9fWZ1bmN0aW9uIEFzdChjLGwpe2lmKDEmYyYmKGdl'@;
put 'KDAsImRpdiIsNTMpLGJ0KDEsRHN0LDIsMSwiaDMiLDU0KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSxQZSgibmdJZiIsIWEuY3VycmVudExpbmVhZ2VQYXRoQ29sdW1uJiYhYS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSl9fWZ1bmN0aW9uIExzdChjLGwpe2lmKDEmYyYmKGdl'@;
put 'KDAsInNwYW4iKSx6ZSgxKSxnZSgyLCJhIiw1NiksemUoMyksYmUoKSx6ZSg0KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoKSx4cigiICIsYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMF0sIi4iKSx3ZSgpLFBlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2EubGluZWFn'@;
put 'ZVRhYmxlTmFtZSksd2UoKSxwcihhLmxpbmVhZ2VUYWJsZU5hbWUuc3BsaXQoIi4iKVsxXSksd2UoKSx4cigiIixhLmxpbmVhZ2VDb2x1bW5OYW1lLmxlbmd0aD4wPyIuIithLmxpbmVhZ2VDb2x1bW5OYW1lOiIiLCIgIil9fWZ1bmN0aW9uIElzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1Ibigp'@;
put 'O2dlKDAsImRpdiIsNjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoNCkuZG93bmxvYWRQTkcoKSl9KSx6ZSgxLCIgUE5HICIpLGJlKCl9fWZ1bmN0aW9uIFJzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNjYpLEh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoNCkuZG93bmxvYWRDU1YoKSl9KSx6ZSgxLCIgQ1NWICIpLGJlKCl9fWZ1bmN0aW9uIE9zdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1kcm9wZG93bi1tZW51Iiw2NSkoMSwiZGl2Iiw2NiksSHQoImNsaWNrIixmdW5jdGlv'@;
put 'bigpe3JldHVybiBTdChhKSx4dChaZSgzKS5kb3dubG9hZFNWRygpKX0pLHplKDIsIlNWRyIpLGJlKCksYnQoMyxJc3QsMiwwLCJkaXYiLDY3KSxnZSg0LCJkaXYiLDY2KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLmRvd25sb2FkRG90KCkpfSksemUoNSwi'@;
put 'RG90IiksYmUoKSxidCg2LFJzdCwyLDAsImRpdiIsNjcpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO3dlKDMpLFBlKCJuZ0lmIiwhYS5oZWxwZXJTZXJ2aWNlLmlzTWljcm9zb2Z0KSx3ZSgzKSxQZSgibmdJZiIsYS5mbGF0ZGF0YSl9fWZ1bmN0aW9uIFBzdChjLGwpe2lmKDEmYyl7Y29u'@;
put 'c3QgYT1IbigpO2dlKDAsImNsci1jaGVja2JveC13cmFwcGVyIiw2OCkoMSwiaW5wdXQiLDY5KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgzKS5nZW5lcmF0ZUdyYXBoKCkpfSksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9'@;
put 'WmUoMyk7cmV0dXJuIHFyKGYucmVmcmVzaENhY2hlLGgpfHwoZi5yZWZyZXNoQ2FjaGU9aCkseHQoaCl9KSxiZSgpLGdlKDIsImxhYmVsIiksemUoMywiUmVmcmVzaCBDYWNoZSIpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxXcigibmdNb2RlbCIsYS5yZWZyZXNoQ2FjaGUp'@;
put 'fX1mdW5jdGlvbiBGc3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDU3KSgxLCJidXR0b24iLDU4KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDIpLmxpbWl0RG90RGVwdGg9ITApfSksemUoMiwiIExpbWl0IGRlcHRoICIpLGJlKCksZ2Uo'@;
put 'MywiZGl2Iiw1OSkoNCwiZGl2Iiw2MCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9ITEseHQoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBo'@;
put 'VGFibGVDbGljaygpKX0pLEp0KDUsImlucHV0Iiw2MSksZ2UoNiwibGFiZWwiKSx6ZSg3LCJCYWNrd2FyZCIpLGJlKCkoKSxnZSg4LCJkaXYiLDYwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgyKTtyZXR1cm4gaC5mb3J3YXJkTGluZWFnZT0hMCx4dChoLnJvdXRl'@;
put 'ci51cmwuaW5jbHVkZXMoImNvbHVtbiIpP2gub25HZW5lcmF0ZUNsaWNrKCk6aC5vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCkpfSksSnQoOSwiaW5wdXQiLDYxKSxnZSgxMCwibGFiZWwiKSx6ZSgxMSwiRm9yd2FyZCIpLGJlKCkoKSgpLGdlKDEyLCJjbHItZHJvcGRvd24iLDYyKSgxMywi'@;
put 'YnV0dG9uIiw2MyksemUoMTQsIiBEb3dubG9hZCAiKSxKdCgxNSwiY2xyLWljb24iLDIyKSxiZSgpLGJ0KDE2LE9zdCw3LDIsImNsci1kcm9wZG93bi1tZW51IiwyMyksYmUoKSxidCgxNyxQc3QsNCwxLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjQpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVpl'@;
put 'KDIpO3dlKDUpLFBlKCJjaGVja2VkIiwhYS5mb3J3YXJkTGluZWFnZSksd2UoNCksUGUoImNoZWNrZWQiLGEuZm9yd2FyZExpbmVhZ2UpLHdlKDQpLFBlKCJkaXNhYmxlZCIsIWEuY29sdW1uJiYhYS50YWJsZSksd2UoNCksUGUoIm5nSWYiLGEuY29sdW1uKX19ZnVuY3Rpb24gSHN0KGMsbCl7'@;
put 'MSZjJiYoZ2UoMCwic3BhbiIsNzMpLHplKDEsIiBMb2FkaW5nLi4uICIpLGJlKCkpfWZ1bmN0aW9uIE5zdChjLGwpezEmYyYmSnQoMCwic3BhbiIsNDMpfWZ1bmN0aW9uIFZzdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNzQpKDEsImRpdiIsNzUpLGJ0KDIsTnN0LDEsMCwic3BhbiIsNzYp'@;
put 'LGJlKCksSnQoMywiZGl2Iiw3NyksYmUoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKDIpLFBlKCJuZ0lmIixhLmdyYXBoUmVuZGVyaW5nKX19ZnVuY3Rpb24ganN0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IikoMSwiZGl2Iiw3MCksYnQoMixIc3QsMiwwLCJzcGFuIiw3MSkoMyxWc3QsNCwx'@;
put 'LCJkaXYiLDcyKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgyKTticigibXQtMiIsYS50YWJsZUZsYWcpLHdlKDIpLFBlKCJuZ0lmIixhLmdyYXBoTG9hZGluZyksd2UoKSxQZSgibmdJZiIsIWEuZ3JhcGhMb2FkaW5nKX19ZnVuY3Rpb24gQnN0KGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxB'@;
put 'c3QsMiwxLCJkaXYiLDQ3KSxnZSgyLCJkaXYiLDQ4KSgzLCJzZWN0aW9uIiw0OSkoNCwiZGl2Iiw1MCksYnQoNSxMc3QsNSw0LCJzcGFuIiwxMSksYmUoKSxidCg2LEZzdCwxOCw0LCJkaXYiLDUxKSxiZSgpLGJ0KDcsanN0LDQsNCwiZGl2Iiw1MiksYmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9'@;
put 'WmUoKTt3ZSgpLFBlKCJuZ0lmIiwhYS5ncmFwaENvbnRhaW5lciksd2UoNCksUGUoIm5nSWYiLGEubGluZWFnZVRhYmxlTmFtZS5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lciksd2UoKSxQZSgibmdJZiIsYS5ncmFwaENvbnRhaW5lcil9fWZ1bmN0aW9uIFlzdChj'@;
put 'LGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsNjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikucmVuZGVyVG9Eb3dubG9hZCgiUE5HIikpfSksemUoMSwiIFBORyAiKSxiZSgpfX1mdW5jdGlvbiB6c3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9'@;
put 'SG4oKTtnZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5yZW5kZXJUb0Rvd25sb2FkKCJTVkciKSl9KSx6ZSgyLCJTVkciKSxiZSgpLGJ0KDMsWXN0LDIsMCwiZGl2Iiw2NyksZ2UoNCwiZGl2'@;
put 'Iiw2NiksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKTtyZXR1cm4gaC5kb3dubG9hZERvdCgpLHh0KGguY2FuY2VsUmVuZGVyaW5nR3JhcGgoKSl9KSx6ZSg1LCIgRG90ICIpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoKTt3ZSgzKSxQZSgibmdJZiIsIWEuaGVs'@;
put 'cGVyU2VydmljZS5pc01pY3Jvc29mdCl9fWNvbnN0IFVzdD1SKDk3NTg2KTtsZXQgQkE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMucm91dGVyPWYsdGhp'@;
put 'cy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPVQsdGhpcy5sb2dnZXJTZXJ2aWNlPVksdGhpcy5oZWxwZXJTZXJ2aWNlPXJlLHRoaXMuc3dpdGNoRmxhZz0hMSx0aGlzLnRhYmxlRmxhZz0hMCx0aGlzLmZvcndhcmRMaW5lYWdlPSExLHRoaXMuZmxhdGRhdGE9W10sdGhpcy5ncmFwaExv'@;
put 'YWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmdyYXBoQ29udGFpbmVyPSExLHRoaXMudml6SW5wdXQ9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMudGFibGVDb2x1bW5zUmVm'@;
put 'PSIiLHRoaXMubGluZWFnZVRhYmxlTmFtZT0iIix0aGlzLmxpbmVhZ2VDb2x1bW5OYW1lPSIiLHRoaXMubGliPW51bGwsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5yZWZyZXNoQ2FjaGU9ITEsdGhpcy5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT0iIix0aGlzLmN1cnJlbnRMaW5lYWdl'@;
put 'UGF0aENvbHVtbj0iIix0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5sYXJnZURvdEZpbGVMaW1pdD0xZTMsdGhpcy5saW1pdERvdERlcHRoPSExLHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPW51bGwsdGhpcy5kZWJvdW5jZVRpbWU9MjAwfXNob3dUYWJsZVNlbGVjdCgpe3Ro'@;
put 'aXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ310YWJsZU9uQ2xpY2soYSxkLGgsZj0hMSl7dmFyIHY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYodi50YWJsZT1hLGZ8fHYub25HZW5lcmF0ZUdy'@;
put 'YXBoVGFibGVDbGljaygpKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCx2LnRhYmxlPWEsdi5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT1kLkxJQk5BTUUrIi4iK2QuVEFCTEVOQU1FLHlpZWxkIHYuc2VsZWN0VGFibGUoYSxkKSxmfHx2Lm9uR2VuZXJh'@;
put 'dGVHcmFwaFRhYmxlQ2xpY2soKSksdi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKX0pKCl9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2guY29sdW1uc0xpc3Q9W107bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe3RhYmxldXJpOmF9XX07eWll'@;
put 'bGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZ2V0bWV0YWNvbHMiLGYpLnRoZW4odj0+e2guY29sdW1uc0xpc3Q9di5tZXRhY29scyxoLmNvbHVtbnNMaXN0JiZoLmNvbHVtbnNMaXN0Lmxlbmd0aD4wJiYoZC5jb2x1bW5zPWguY29sdW1uc0xpc3QsZC5leHBhbmRlZD0hMCxkLmxv'@;
put 'YWRpbmdDb2x1bW5zPSExKX0pLmNhdGNoKHY9PnYpLGguc2V0R2xvYmFsRGF0YSgpfSkoKX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJy'@;
put 'YXJ5TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9'@;
put 'PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVkPSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9'@;
put 'ITAseWllbGQgaC5zZWxlY3RMaWJyYXJ5KGEsZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxkKX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aC50YWJsZXNMaXN0PVtdLGguY29sdW1uc0xpc3Q9W107bGV0IGY9e1NB'@;
put 'U0NvbnRyb2xUYWJsZTpbe2xpYnVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGF0YWJsZXMiLGYpLnRoZW4odj0+e2gudGFibGVzTGlzdD12Lm1ldGF0YWJsZXMsaC50YWJsZXNMaXN0JiZoLnRhYmxlc0xpc3QubGVuZ3RoPjAmJihkLnRhYmxlcz1o'@;
put 'LnRhYmxlc0xpc3QsZC5leHBhbmRlZD0hMCksaC5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxkLmxvYWRpbmdUYWJsZXM9ITF9KSgpfWNvbHVtbk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVS'@;
put 'SSx0aGlzLnNldEdsb2JhbERhdGEoKSx0aGlzLm9uR2VuZXJhdGVDbGljaygpfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubGlicmFy'@;
put 'eUxpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksR24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2g9dGhpcy5saWJyYXJpZXNTZWFyY2h9bGliQ29sdW1uQWN0aXZlKGEpe2lmKCF0aGlzLmNvbHVtbilyZXR1cm4hMTtsZXQgZD1hLnNwbGl0KCJcXCIpLGg9dGhpcy5jb2x1'@;
put 'bW4uc3BsaXQoIlxcIik7cmV0dXJuIGRbZC5sZW5ndGgtMV09PWhbaC5sZW5ndGgtMV19c2V0R2xvYmFsRGF0YSgpe0duLmxpbmVhZ2UubGlicmFyeUxpc3Q9dGhpcy5saWJyYXJ5TGlzdCxHbi5saW5lYWdlLnRhYmxlc0xpc3Q9dGhpcy50YWJsZXNMaXN0LEduLmxpbmVhZ2UuY29sdW1uc0xp'@;
put 'c3Q9dGhpcy5jb2x1bW5zTGlzdCxHbi5saW5lYWdlLmxpYj10aGlzLmxpYixHbi5saW5lYWdlLnRhYmxlPXRoaXMudGFibGUsR24ubGluZWFnZS5jb2x1bW49dGhpcy5jb2x1bW59bG9hZEdsb2JhbERhdGEoKXt0aGlzLmxpYnJhcnlMaXN0PUduLmxpbmVhZ2UubGlicmFyeUxpc3QsdGhpcy50'@;
put 'YWJsZXNMaXN0PUduLmxpbmVhZ2UudGFibGVzTGlzdCx0aGlzLmNvbHVtbnNMaXN0PUduLmxpbmVhZ2UuY29sdW1uc0xpc3QsdGhpcy5saWJyYXJpZXNTZWFyY2g9R24ubGluZWFnZS5saWJyYXJpZXNTZWFyY2h9cmVzdWJtaXRXaXRoTWF4RGVwdGgoYSl7bGV0IGQ7dGhpcy5jYW5jZWxSZW5k'@;
put 'ZXJpbmdHcmFwaCgpLGEmJihkPXttYXhfZGVwdGg6YX0pLHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLHtyZWxhdGl2ZVRvOnRoaXMucm91dGUscXVlcnlQYXJhbXM6ZH0pfW5nT25Jbml0KCl7R24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvbGluZWFnZSI7bGV0IGE9dGhpcy5yb3V0'@;
put 'ZS5zbmFwc2hvdC5wYXJhbXMucmVsb2FkO2lmKHZvaWQgMCE9PWEpe2xldCBkPXRoaXMucm91dGVyLnVybDsicmVsb2FkIj09PWE/bG9jYWxTdG9yYWdlLmdldEl0ZW0oImZpcnN0TG9hZCIpPyhsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgiZmlyc3RMb2FkIiksdGhpcy5sb2NhdGlvbi5yZXBs'@;
put 'YWNlU3RhdGUoZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkpKToobG9jYWxTdG9yYWdlLmZpcnN0TG9hZD0hMCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmxvY2F0aW9uLnJlbG9hZCgpfSwyZTMpKTp0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0'@;
put 'SW5kZXhPZigiLyIpKSl9dGhpcy5pbml0RGF0YSgpfWluaXREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtHbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoR24ubGluZWFnZS5saWJyYXJ5TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNTZXJ2'@;
put 'aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbih2PT57YS5saWJyYXJ5TGlzdD12LnNhc2xpYnMsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJ5TGlzdCksYS5saWJyYXJ5TGlzdCYmYS5saWJyYXJ5TGlzdC5sZW5ndGg+MCYmKGEubGliPWEu'@;
put 'bGlicmFyeUxpc3RbMF0uTElCUkFSWUlEKSxhLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKHY9PnYpLGEucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHY9PnthLm9uUm91dGVDaGFuZ2UoKX0pLGEucm91dGUucGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRlQ2hhbmdlKCl9KSl9KSgp'@;
put 'fW9uUm91dGVDaGFuZ2UoKXtjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpLHRoaXMuZGVib3VuY2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pntjb25zdCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmNvbHVyaSxkPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmRpcmVj'@;
put 'dGlvbixoPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlaWQsZj10aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLm1heF9kZXB0aDthJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMuY29sdW1uPWEsdGhpcy5nZW5lcmF0ZUdyYXBoKGEsZCxm'@;
put 'KSksIXRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIikmJmgmJmQmJih0aGlzLmZvcndhcmRMaW5lYWdlPSJGT1JXQVJEIj09PWQsdGhpcy50YWJsZT1oLHRoaXMuZ2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoaCxkLGYpKX0sdGhpcy5kZWJvdW5jZVRpbWUpfW5nQWZ0ZXJDb250ZW50'@;
put 'SW5pdCgpe31kaXJlY3Rpb25UZXh0KCl7cmV0dXJuIHRoaXMuZm9yd2FyZExpbmVhZ2U/IkZPUldBUkQiOiJSRVZFUlNFIn1vbkdlbmVyYXRlQ2xpY2soKXtsZXQgYT10aGlzLmRpcmVjdGlvblRleHQoKSxkPXRoaXMuY29sdW1uP3RoaXMuY29sdW1uLnN1YnN0cmluZyh0aGlzLmNvbHVtbi5p'@;
put 'bmRleE9mKCJcXCIpKzEpOm51bGw7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS9jb2x1bW4vIitkKyIvIithKX1vbkdlbmVyYXRlR3JhcGhUYWJsZUNsaWNrKCl7bGV0IGE9dGhpcy5kaXJlY3Rpb25UZXh0KCksZD10aGlzLnRhYmxlLmluY2x1ZGVzKCJcXCIpP3Ro'@;
put 'aXMudGFibGUuc3BsaXQoIlxcIilbMV06dGhpcy50YWJsZTt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlLyIrZCsiLyIrYSl9Z2VuZXJhdGVHcmFwaFRhYmxlTGV2ZWwoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRy'@;
put 'b2xUYWJsZTpbe3RhYmxlX2lkOmEsZGlyZWN0aW9uOmR8fGYuZGlyZWN0aW9uVGV4dCgpfV19O3JldHVybiJ1bmRlZmluZWQiPT09di5TQVNDb250cm9sVGFibGVbMF0udGFibGVfaWQmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoVGFibGVMZXZlbCgpIiwi'@;
put 'dGFibGVfaWQgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIpLGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1'@;
put 'dD0iIixuZXcgUHJvbWlzZSgoVCxZKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2ZldGNodGFibGVsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIHJlPVcoZnVuY3Rpb24qKGZlKXtpZihmZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xp'@;
put 'bmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1heGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBv'@;
put 'cnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlwZW9mIGZlKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFi'@;
put 'bGVOYW1lPWZlLmluZm9bMF0uTElCUkVGKyIuIitmZS5pbmZvWzBdLlRBQkxFTkFNRTtsZXQgX2U9ZmUuZmluYWxmaW5hbCxrZT0iIjtmb3IobGV0IFdlPTA7V2U8X2UubGVuZ3RoO1dlKyspa2UrPXVuZXNjYXBlKF9lW1dlXS5MSU5FKSsiXG4iO2lmKGYuZmxhdGRhdGE9ZmUuZmxhdGRhdGEs'@;
put 'Zi5saWJyYXJ5TGlzdCl7bGV0IFdlPWYubGlicmFyeUxpc3QuZmluZChKZT0+ZmUuaW5mb1swXS5MSUJVUkkudG9VcHBlckNhc2UoKS5pbmNsdWRlcyhKZS5MSUJSQVJZSUQudG9VcHBlckNhc2UoKSkpO2lmKFdlKXtsZXQgSmU7aWYoeWllbGQgZi5saWJyYXJ5T25DbGljayhXZS5MSUJSQVJZ'@;
put 'SUQsV2UpLFdlLnRhYmxlcyYmKEplPVdlLnRhYmxlcy5maW5kKHR0PT50dC5UQUJMRVVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKGZlLmluZm9bMF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksSmUpKXtpZihmLnRhYmxlPUplLlRBQkxFVVJJLGYudGFibGUpe2NvbnN0IHR0PWYudGFibGUu'@;
put 'cmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgoKT0+e2xldCB5dD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7dHR9J11gKTt5dCYmeXQuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1mLnRhYmxlT25DbGljayhKZS5UQUJMRVVSSSxKZSxXZSx2b2lkIDAhPT1kKX1XZSYmKFdl'@;
put 'LmV4cGFuZGVkPSEwKSxKZSYmKEplLmV4cGFuZGVkPSEwKX19Zi52aXpJbnB1dD1rZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxuIiksZi5pZGxvb2t1'@;
put 'cD1mZS5pZGxvb2t1cCxmZS5maW5hbGZpbmFsLmxlbmd0aD5mLmxhcmdlRG90RmlsZUxpbWl0P2YubGFyZ2VEb3RGaWxlTGluZXM9ZmUuZmluYWxmaW5hbC5sZW5ndGg6Zi5idWlsZEdyYXBoKCksVCgpfSk7cmV0dXJuIGZ1bmN0aW9uKGZlKXtyZXR1cm4gcmUuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfX0oKSkuY2F0Y2gocmU9PntmLmdyYXBoTG9hZGluZz0hMSxmLmdyYXBoQ29udGFpbmVyPSExfSl9KX0pKCl9Y2FuY2VsUmVuZGVyaW5nR3JhcGgoKXt0aGlzLnZpeklucHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxs'@;
put 'LHRoaXMuYnVpbGRHcmFwaCgpfWNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKXt0aGlzLmxhcmdlRG90RmlsZUxpbmVzPW51bGwsdGhpcy5idWlsZEdyYXBoKCgpPT57aWYobnVsbCE9PXRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtzd2l0Y2godGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQp'@;
put 'e2Nhc2UiUE5HIjp0aGlzLmRvd25sb2FkUE5HKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMuZG93bmxvYWRTVkcoKX10aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD1udWxsLHRoaXMudml6SW5wdXQ9ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9Iix0aGlzLmJ1aWxkR3JhcGgoKX19'@;
put 'KX1yZW5kZXJUb0Rvd25sb2FkKGEpe3N3aXRjaChhKXtjYXNlIlBORyI6dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9IlBORyIsdGhpcy5jb250aW51ZVJlbmRlcmluZ0dyYXBoKCk7YnJlYWs7Y2FzZSJTVkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJTVkciLHRoaXMuY29udGlu'@;
put 'dWVSZW5kZXJpbmdHcmFwaCgpfX1tYWtlR3JhcGhMaW5rYWJsZShhKXtsZXQgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCIjZ3JhcGggLm5vZGUiKTtmb3IobGV0IGggb2YgZCl7bGV0IFQsZj1oLnF1ZXJ5U2VsZWN0b3IoInRpdGxlIikuaW5uZXJIVE1MLHY9YS5maW5kKFk9PlkuTUVU'@;
put 'QUlEPT09Zik7diYmKFQ9IlRBQkxFIj09PXYuTUVUQVRZUEU/Ii92aWV3L2RhdGEvIit2Lk1FVEFOQU1FOiIvdmlldy9tZXRhZGF0YS9vYmplY3QvIit2Lk1FVEFJRCxoLmNsYXNzTGlzdC5hZGQoImN1cnNvci1wb2ludGVyIiksaC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsWT0+e3RoaXMu'@;
put 'cm91dGVyLm5hdmlnYXRlQnlVcmwoVCl9KSl9fWdlbmVyYXRlR3JhcGgoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7bGV0IHY9e1NBU0NvbnRyb2xUYWJsZTpbe2NvbHVyaTphfHxmLmNvbHVtbixkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCkscmVmcmVzaDpm'@;
put 'LnJlZnJlc2hDYWNoZT8xOjB9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS5jb2x1cmkmJmYuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJnZW5lcmF0ZUdyYXBoKCkiLCJjb2x1cmkgaXMgdW5kZWZpbmVkLiIsdm9pZCAwLCJGcm9udGVuZCBlcnJvciIp'@;
put 'LGgmJih2LlNBU0NvbnRyb2xUYWJsZVswXS5tYXhfZGVwdGg9aCksZi50YWJsZUZsYWc9ITEsZi5zd2l0Y2hGbGFnPSEwLGYuZ3JhcGhDb250YWluZXI9ITAsZi5ncmFwaExvYWRpbmc9ITAsZi52aXpJbnB1dD0iIixuZXcgUHJvbWlzZSgoVCxZKT0+e2Yuc2FzU2VydmljZS5yZXF1ZXN0KCJs'@;
put 'aW5lYWdlL2ZldGNoY29sbGluZWFnZSIsdikudGhlbihmdW5jdGlvbigpe3ZhciByZT1XKGZ1bmN0aW9uKihmZSl7aWYoZmUuZmxhdGRhdGEubGVuZ3RoPjAmJmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgi'@;
put 'Tm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25hbCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJs'@;
put 'KCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBmZSlyZXR1cm4gZi52aXpJbnB1dD0iZGlncmFwaCBHIHtTQVMgRXJyb3J9Iix2b2lkIGYuYnVpbGRHcmFwaCgpO2YubGluZWFnZVRhYmxlTmFtZT1mZS5pbmZvWzBdLkxJQlJFRisiLiIrZmUuaW5mb1swXS5UQUJOQU1FLGYu'@;
put 'bGluZWFnZUNvbHVtbk5hbWU9ZmUuaW5mb1swXS5DT0xOQU1FLGYuaWRsb29rdXA9ZmUuaWRsb29rdXA7bGV0IF9lPWZlLmZyb21zYXMsa2U9IiI7Zm9yKGxldCBXZT0wO1dlPF9lLmxlbmd0aDtXZSsrKWtlKz11bmVzY2FwZShfZVtXZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5wdXQ9a2V8'@;
put 'fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9ZmUuZmxhdGRhdGEsZi5saWJyYXJ5TGlzdCl7bGV0IEplLFdlPWYubGlicmFyeUxp'@;
put 'c3QuZmluZCh0dD0+ZmUuaW5mb1swXT8uTElCVVJJPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyh0dD8uTElCUkFSWUlEPy50b1VwcGVyQ2FzZSgpKSk7V2UmJih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKFdlLkxJQlJBUllJRCxXZSksV2UudGFibGVzJiYoSmU9V2UudGFibGVzLmZpbmQodHQ9'@;
put 'PnR0LlRBQkxFVVJJPT09ZmUuaW5mb1swXS5UQUJVUkkpLEplJiZmLnRhYmxlT25DbGljayhKZS5UQUJMRVVSSSxKZSxXZSwhMCkudGhlbigoKT0+e2xldCB0dD1KZS5UQUJMRVVSSTtpZih0dCl7Y29uc3QgeXQ9dHQucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IHd0PWRvY3VtZW50LnF1ZXJ5'@;
put 'U2VsZWN0b3IoYFtpZD0nJHt5dH0nXWApO3NldFRpbWVvdXQoKCk9Pnt3dCYmKGYubG9nZ2VyU2VydmljZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsV2UpLHd0LnNjcm9sbEludG9WaWV3KCkpfSwxZTMpfX0pKSxXZSYmKFdlLmV4cGFuZGVkPSEwKSxKZSYmKEplLmV4cGFuZGVkPSEwKSl9ZmUu'@;
put 'ZnJvbXNhcy5sZW5ndGg+Zi5sYXJnZURvdEZpbGVMaW1pdD9mLmxhcmdlRG90RmlsZUxpbmVzPWZlLmZyb21zYXMubGVuZ3RoOmYuYnVpbGRHcmFwaCgpLFQoKX0pO3JldHVybiBmdW5jdGlvbihmZSl7cmV0dXJuIHJlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKHJlPT57Zi5n'@;
put 'cmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2'@;
put 'Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uv'@;
put 'c3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKGpBKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVjdE5h'@;
put 'bWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5y'@;
put 'ZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2pBKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxmc3Quc2F2ZVN2Z0FzUG5nKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNncmFwaCBzdmciKSxhLmNvbnN0cnVjdE5hbWUoInBuZyIpKX0p'@;
put 'KCl9ZG93bmxvYWRDU1YoKXtsZXQgYT10aGlzLmZsYXRkYXRhO2NvbnN0IGQ9KGZlLF9lKT0+bnVsbD09PV9lPyIiOl9lLGg9T2JqZWN0LmtleXMoYVswXSk7bGV0IGY9YS5tYXAoZmU9PmgubWFwKF9lPT5KU09OLnN0cmluZ2lmeShmZVtfZV0sZCkpLmpvaW4oIiwiKSk7Zi51bnNoaWZ0KGgu'@;
put 'am9pbigiLCIpKTtsZXQgdj1mLmpvaW4oIlxyXG4iKTt2YXIgVD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksWT1uZXcgQmxvYihbdl0se3R5cGU6InRleHQvY3N2In0pO2lmKG5hdmlnYXRvci5hcHBWZXJzaW9uLnRvU3RyaW5nKCkuaW5kZXhPZigiLk5FVCIpPjApd2luZG93Lm5hdmln'@;
put 'YXRvci5tc1NhdmVCbG9iKFksdGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSk7ZWxzZXt2YXIgcmU9d2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoWSk7VC5ocmVmPXJlLFQuZG93bmxvYWQ9dGhpcy5jb25zdHJ1Y3ROYW1lKCJjc3YiKSxULmNsaWNrKCksd2luZG93LlVSTC5yZXZva2VPYmpl'@;
put 'Y3RVUkwocmUpLFQucmVtb3ZlKCl9fWdldERvdFVybCgpe2xldCBkPW5ldyBCbG9iKFt0aGlzLnZpeklucHV0XSx7dHlwZToidGV4dC9wbGFpbiJ9KTtyZXR1cm4gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoZCl9Z2V0RG90QmxvYigpe3JldHVybiBuZXcgQmxvYihbdGhpcy52aXpJbnB1'@;
put 'dF0se3R5cGU6InRleHQvcGxhaW4ifSl9ZG93bmxvYWREb3QoKXtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldERvdEJsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInR4dCIpKTtl'@;
put 'bHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXREb3RVcmwoKSxhLmRvd25sb2FkPXRoaXMuY29uc3RydWN0TmFtZSgidHh0IiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChh'@;
put 'KX19c2hvd1N2Zygpe3dpbmRvdy5vcGVuKHRoaXMuZ2V0U1ZHVVJMKCksIl9ibGFuayIpfWJ1aWxkR3JhcGgoYSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5ncmFwaExvYWRpbmc9ITEsdGhpcy5ncmFwaFJlbmRlcmluZz0hMCxzZXRUaW1lb3V0KCgpPT57akEoIiNn'@;
put 'cmFwaCIpLnpvb20oITApLmFkZEltYWdlKCJodHRwczovL2RhdGFjb250cm9sbGVyLmlvL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIwLzAxL2ZjMS5wbmciLCIzMHB4IiwiMzBweCIpLnJlbmRlckRvdCh0aGlzLnZpeklucHV0LCgpPT57dGhpcy5ncmFwaFJlbmRlcmluZz0hMSx0aGlzLmlkbG9v'@;
put 'a3VwJiZ0aGlzLm1ha2VHcmFwaExpbmthYmxlKHRoaXMuaWRsb29rdXApLGEmJmEoKX0pfSwxMDApfWNvbnN0cnVjdE5hbWUoYSl7bGV0IGQ9IiIsaD0iIixmPSIiLHY9VXN0KCkuZm9ybWF0KCJZWU1NRERfSEhtbSIpO2lmKHRoaXMubGlicmFyeUxpc3QmJnRoaXMubGlicmFyeUxpc3QubGVu'@;
put 'Z3RoKXtsZXQgVD10aGlzLmxpYnJhcnlMaXN0LmZpbmQoWT0+WS5MSUJSQVJZSUQ9PXRoaXMubGliKTtUJiYoZD1gXyR7VC5MSUJSQVJZTkFNRX1gKX1pZih0aGlzLnRhYmxlc0xpc3QmJnRoaXMudGFibGVzTGlzdC5sZW5ndGgpe2xldCBUPXRoaXMudGFibGVzTGlzdC5maW5kKFk9PlkuVEFC'@;
put 'TEVVUkk9PXRoaXMudGFibGUpO1QmJihoPWBfJHtULlRBQkxFTkFNRX1gKX1pZih0aGlzLmNvbHVtbnNMaXN0JiZ0aGlzLmNvbHVtbnNMaXN0Lmxlbmd0aCl7bGV0IFQ9dGhpcy5jb2x1bW5zTGlzdC5maW5kKFk9PlkuQ09MVVJJPT10aGlzLmNvbHVtbik7VCYmKGY9YF8ke1QuQ09MTkFNRX1g'@;
put 'KX1yZXR1cm5gJHt0aGlzLmRpcmVjdGlvblRleHQoKX0ke2R9JHtofSR7Zn1fJHt2fS4ke2F9YH1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGgxKSxzdCh5YSksc3QoTWMpLHN0KHpzKSxzdChxMSksc3QoR2wpLHN0KGQxKSxzdChjdSkp'@;
put 'fTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1sibWF4RGVwdGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFy'@;
put 'Y2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJj'@;
put 'b250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFsT3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIi'@;
put 'LCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNlaG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbMSwibWItMjAiXSxbMSwiYmln'@;
put 'bGluZWFnZS1yb3ciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJzaGFw'@;
put 'ZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0'@;
put 'b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJd'@;
put 'LFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50'@;
put 'ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRh'@;
put 'YmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLCJpZCJdLFsic2hhcGUiLCJ0YWJsZSJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRl'@;
put 'ciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJd'@;
put 'LFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsiY2xhc3MiLCJjYXJk'@;
put 'LWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWJsb2NrIl0sWzEsImZvcm0tYmxvY2siLCJzdyIsInBvc2l0aW9uLXJlbGF0aXZlIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImxpbmFnZS10aXRs'@;
put 'ZS13cmFwcGVyIiwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiZm9udC13ZWlnaHQtYm9sZCIsInBvc2l0aW9uLWFic29sdXRlIl0sWyJjbGFzcyIsImNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQiLDQsIm5nSWYiXSxbMywibXQtMiIs'@;
put 'NCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBwYi0xMCIsNCwibmdJZiJdLFsxLCJ0ZXh0LWNlbnRlciIsInBiLTEwIl0sWzMsInJvdXRlckxpbmsiXSxbMSwiY2xy'@;
put 'LWNvbC1tZC0xMiIsInRleHQtY2VudGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWVuZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0'@;
put 'eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQtZmxleCBhbGlnbi1pdGVtcy1j'@;
put 'ZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJ0eXBlIiwi'@;
put 'Y2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9zaXRpb24tcmVsYXRpdmUiLDQs'@;
put 'Im5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0'@;
put 'IGY9SG4oKTtnZSgwLCJhcHAtc2lkZWJhciIsNCksSHQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxnZSgxLCJjbHItdHJlZSIpLGJ0KDIsZ3N0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoMyxrc3QsMiwxLCJu'@;
put 'Zy1jb250YWluZXIiLDYpLGJlKCksYnQoNCxFc3QsMywwLCJkaXYiLDcpLGJlKCksZ2UoNSwiZGl2Iiw4KSg2LCJkaXYiLDkpLGJ0KDcsVHN0LDQsMCwiZGl2IiwxMCkoOCxCc3QsOCw0LCJuZy1jb250YWluZXIiLDExKSxiZSgpKCksZ2UoOSwiY2xyLW1vZGFsIiwxMikoMTAsImgzIiwxMyks'@;
put 'emUoMTEsIkxpbWl0IERlcHRoIiksYmUoKSxnZSgxMiwiZGl2IiwxNCkoMTMsInAiKSx6ZSgxNCwiRW50ZXIgdGhlIGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLGJlKCkoKSxnZSgxNSwiZGl2IiwxNSkoMTYsImRpdiIsMTYpLEp0KDE3'@;
put 'LCJpbnB1dCIsMTcsMCksYmUoKSxnZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxOCksemUoMjAsIlRvIHJlbmRlciB3aXRoIHVubGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IiksYmUoKSxnZSgyMSwiZGl2IiwxOSkoMjIsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5saW1pdERvdERlcHRoPSExKX0pLHplKDIzLCIgQ2FuY2VsICIpLGJlKCksZ2UoMjQsImJ1dHRvbiIsMjApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChmKTtjb25zdCBUPVhpKDE4KTtyZXR1cm4gaC5yZXN1Ym1pdFdpdGhNYXhEZXB0aChULnZh'@;
put 'bHVlKSx4dChoLmxpbWl0RG90RGVwdGg9ITEpfSksemUoMjUsIiBSZXN1Ym1pdCAiKSxiZSgpKCkoKSgpLGdlKDI2LCJjbHItbW9kYWwiLDEyKSgyNywiaDMiLDEzKSx6ZSgyOCwiV2FybmluZyIpLGJlKCksZ2UoMjksImRpdiIsMTQpKDMwLCJwIiksemUoMzEpLGJlKCkoKSxnZSgzMiwiZGl2'@;
put 'IiwxNSkoMzMsImRpdiIsMTkpKDM0LCJwIiksemUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUpIiksYmUoKSxnZSgzNiwiYnV0dG9uIiwyMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgo'@;
put 'KSl9KSx6ZSgzNywiIFJlbmRlciAiKSxiZSgpKCksZ2UoMzgsImRpdiIsMTkpKDM5LCJwIiksemUoNDAsIkRvd25sb2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSxiZSgpLGdlKDQxLCJjbHItZHJvcGRvd24iKSg0MiwiYnV0dG9uIiwyMSksemUoNDMsIiBE'@;
put 'b3dubG9hZCAiKSxKdCg0NCwiY2xyLWljb24iLDIyKSxiZSgpLGJ0KDQ1LHpzdCw2LDEsImNsci1kcm9wZG93bi1tZW51IiwyMyksYmUoKSgpLGdlKDQ2LCJkaXYiLDE5KSg0NywicCIpLHplKDQ4LCJSZXN1Ym1pdCB3aXRoIGEgbWF4LWRlcHRoIChzcGVjaWZ5IGRlcHRoKSIpLGJlKCksSnQo'@;
put 'NDksImlucHV0IiwxNywxKSxnZSg1MSwiYnV0dG9uIiwyMCksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGYpO2NvbnN0IFQ9WGkoNTApO3JldHVybiB4dChoLnJlc3VibWl0V2l0aE1heERlcHRoKFQudmFsdWUpKX0pLHplKDUyLCIgUmVzdWJtaXQgIiksYmUoKSgpLGdlKDUzLCJkaXYiLDE5'@;
put 'KSg1NCwicCIpLHplKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNzaW9uIiksYmUoKSxnZSg1NiwiYnV0dG9uIiwyMCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksemUoNTcsIiBDYW5jZWwgIiksYmUoKSgpKCkoKX0yJmQm'@;
put 'Jih3ZSgyKSxQZSgibmdJZiIsaC5saWJyYXJ5TGlzdCksd2UoKSxQZSgibmdGb3JPZiIsaC5saWJyYXJ5TGlzdCksd2UoKSxQZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLHdlKDMpLFBlKCJuZ0lmIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSx3ZSgpLFBlKCJuZ0lmIixoLmNvbHVtbnx8aC50'@;
put 'YWJsZSksd2UoKSxQZSgiY2xyTW9kYWxPcGVuIixoLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksd2UoMTcpLFBlKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1oLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLHdlKDUpLHhyKCIgVGhlIGdlbmVy'@;
put 'YXRlZCBkb3QgZmlsZSBoYXMgIixoLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLHdlKDExKSxQZSgiZGlzYWJsZWQiLCFoLmNvbHVtbiYmIWgudGFibGUpKX0sZGVwZW5k'@;
put 'ZW5jaWVzOltMcyxxaSxrMCxUbCxmMSxjYSxvYSxyaCx1ZCxXNCxaYSxCdSxZdSxyMCxYZCxYcyxnTix2MSxfMSxhZCx0cCxUZyxEZyxlOSx5cF0sc3R5bGVzOlsiLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09N'@;
put 'UCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dy'@;
put 'b3VuZC1jb2xvcn0jZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTRlNGU0O21hcmdpbi10b3A6MTBweH0u'@;
put 'c2VsZWN0aW9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY3MHB4fS5jb2x1bW4tYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNkOGUzZTk7Y29sb3I6IzAwMH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRk'@;
put 'aW5nOi41cmVtIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAxMjBweCl9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZFtfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9LmdyYXBoLXJlbmRlci1z'@;
put 'cGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTBweH0uYmlnbGluZWFnZS1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0'@;
put 'aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmxpbmVhZ2UtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVD'@;
put 'T01QJV17bGVmdDoxMnB4fS5tYXgtZGVwdGgtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsudG9nZ2xlLXN3aXRjaC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MjBweH19Il19KX1yZXR1cm4g'@;
put 'Y30pKCk7Y29uc3QgWnN0PSgpPT5bMTAsMjAsNTAsMTAwXTtmdW5jdGlvbiBXc3QoYyxsKXtpZigxJmMmJihnZSgwLCJvcHRpb24iLDE0KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7azQoInZhbHVlIixhKSx3ZSgpLHhyKCIgIixhLCIgIil9fWZ1bmN0aW9uIEdzdChj'@;
put 'LGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDIwKX1mdW5jdGlvbiAkc3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMjEpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiBoLm1ldGFEYXRhU2VhcmNoPSIiLHh0KGgubWV0'@;
put 'YUxpc3RPbkZpbHRlcigpKX0pLGJlKCl9fWZ1bmN0aW9uIHFzdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDE1KSgxLCJkaXYiLDE2KSgyLCJpbnB1dCIsMTcsMCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUo'@;
put 'KTtyZXR1cm4gcXIoZi5tZXRhRGF0YVNlYXJjaCxoKXx8KGYubWV0YURhdGFTZWFyY2g9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkubWV0YUxpc3RPbkZpbHRlcigpKX0pLGJlKCksYnQoNCxHc3QsMSwwLCJjbHItaWNvbiIsMTgpKDUsJHN0'@;
put 'LDEsMCwiY2xyLWljb24iLDE5KSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDMpLGQ9WmUoKTt3ZSgyKSxXcigibmdNb2RlbCIsZC5tZXRhRGF0YVNlYXJjaCksd2UoMiksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLHdlKCksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5j'@;
put 'dGlvbiBLc3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiwyMyksSHQoImNsaWNrIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCkuJGltcGxpY2l0LHY9WmUoKTtyZXR1cm4geHQodi50cmVlTm9kZUNsaWNrZWQoaCxmLHYubWV0YURhdGFMaXN0'@;
put 'KSl9KSxHcigiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLHh0KGgpfSksZ2UoMSwicCIsMjQpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBo'@;
put 'PVplKCkuJGltcGxpY2l0LGY9WmUoKTtyZXR1cm4gZi5tZXRhRGF0YUlkPWguSUQseHQoZi5tZXRhRGF0YU9uQ2xpY2soZi5tZXRhRGF0YUlkLGgpKX0pLEp0KDIsImNsci1pY29uIiwyNSksemUoMyksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDtXcigiY2xyRXhwYW5k'@;
put 'ZWQiLGEuZXhwYW5kZWQpLFBlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksd2UoMykseHIoIiAiLGEuSUQsIiAiKX19ZnVuY3Rpb24gWHN0KGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxLc3QsNCwzLCJjbHItdHJlZS1ub2RlIiwyMiksaWkoKSksMiZjKXtjb25z'@;
put 'dCBhPWwuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEpzdChjLGwpezEmYyYmKGdlKDAsImRpdiIsMjYpLEp0KDEsImNsci1pY29uIiwyNyksZ2UoMiwiaDMiLDI4KSx6ZSgzLCJQbGVhc2Ugc2VsZWN0IGEgdHlwZSIpLGJlKCkoKSl9ZnVuY3Rpb24gUXN0'@;
put 'KGMsbCl7MSZjJiYoZ2UoMCwiaDQiKSx6ZSgxLCJMb2FkaW5nIG1ldGFkYXRhIHR5cGVzIiksYmUoKSl9ZnVuY3Rpb24gZWF0KGMsbCl7MSZjJiYoZ2UoMCwiaDQiKSx6ZSgxLCJMb2FkaW5nIG1ldGFkYXRhIG9iamVjdHMiKSxiZSgpKX1mdW5jdGlvbiB0YXQoYyxsKXtpZigxJmMmJihnZSgw'@;
put 'LCJkaXYiKSxidCgxLFFzdCwyLDAsImg0IiwzMSkoMixlYXQsMiwwLCJoNCIsMzEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0lmIixhLm1ldGF0eXBlc0xvYWRpbmcpLHdlKCksUGUoIm5nSWYiLCFhLm1ldGF0eXBlc0xvYWRpbmcpfX1mdW5jdGlvbiBuYXQoYyxsKXtp'@;
put 'ZigxJmMmJihnZSgwLCJkaXYiLDI5KSgxLCJzcGFuIiwzMCksemUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSxidCgzLHRhdCwzLDIsImRpdiIsMzEpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDMpLFBlKCJuZ0lmIixhLmxvYWRpbmcpfX1mdW5jdGlvbiByYXQoYyxsKXtpZigxJmMpe2Nv'@;
put 'bnN0IGE9SG4oKTtnZSgwLCJkaXYiLDM4KSgxLCJpbnB1dCIsMzksMSksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoMik7cmV0dXJuIHFyKGYubWV0YU9iamVjdFNlYXJjaCxoKXx8KGYubWV0YU9iamVjdFNlYXJjaD1oKSx4dChoKX0pLEh0KCJrZXl1'@;
put 'cCIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikubWV0YU9iamVjdE9uRmlsdGVyKCkpfSksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFdyKCJuZ01vZGVsIixhLm1ldGFPYmplY3RTZWFyY2gpfX1mdW5jdGlvbiBpYXQoYyxsKXsxJmMmJkp0KDAsImNsci1pY29u'@;
put 'Iiw0Myl9ZnVuY3Rpb24gb2F0KGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIHNhdChjLGwpe2lmKDEmYyYmKGdlKDAsInAiLDU0KSx6ZSgxKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoKSx4cigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gYWF0'@;
put 'KGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApLGJ0KDIsaWF0LDEsMCwiY2xyLWljb24iLDUxKSgzLG9hdCwxLDAsImNsci1pY29uIiw1MiksemUoNCksYnQoNSxzYXQsMiwxLCJwIiw1MyksYmUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7'@;
put 'UGUoImNsckV4cGFuZGFibGUiLCEwKSx3ZSgpLGJyKCJvYmplY3QtaGVhZGVyIiwhYS5jb3VudCksd2UoKSxQZSgibmdJZiIsIWEuY291bnQpLHdlKCksUGUoIm5nSWYiLGEuY291bnQpLHdlKCkseHIoIiAiLGEuZGlzcGxheSwiICIpLHdlKCksUGUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rp'@;
put 'b24gbGF0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiY2xyLXRyZWUiLDQ3KSxidCgxLGFhdCw2LDcsImNsci10cmVlLW5vZGUiLDQ4KSxQYSgyLCJhc3luYyIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSg2KTtQZSgiY2xyTGF6eSIsITApLHdlKCksUGUoImNsclJlY3Vyc2l2ZUZvck9mIix3YygyLDMs'@;
put 'YS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIGNhdChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci1hY2NvcmRpb24tY29udGVudCIpLGJ0KDEsbGF0LDMsNSwiY2xyLXRyZWUiLDQ2KSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoNSk7'@;
put 'd2UoKSxQZSgibmdJZiIsYS5zaG93QWNjKX19ZnVuY3Rpb24gdWF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLWFjY29yZGlvbi1wYW5lbCIsNDIpLEh0KCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1w'@;
put 'bGljaXQsdj1aZSgzKTtyZXR1cm4geHQoaD92LnBhbmVsQ2hhbmdlKGgsZik6IiIpfSksZ2UoMSwiY2xyLWFjY29yZGlvbi10aXRsZSIpLEp0KDIsImNsci1pY29uIiw0MyksemUoMyksZ2UoNCwicCIsNDQpLHplKDUpLGJlKCkoKSxidCg2LGNhdCwyLDEsImNsci1hY2NvcmRpb24tY29udGVu'@;
put 'dCIsNDUpLGJlKCl9aWYoMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O3dlKDMpLHhyKCIgIixhLk5BTUUsIiAiKSx3ZSgyKSxwcihhLklEKX19ZnVuY3Rpb24gZGF0KGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSx1YXQsNywyLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MSksaWkoKSksMiZj'@;
put 'KXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIGhhdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsNDApKDEsImNsci1hY2NvcmRpb24iKSxidCgyLGRhdCwyLDEsIm5nLWNvbnRhaW5lciIsNyksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUo'@;
put 'Mik7d2UoMiksUGUoIm5nRm9yT2YiLGEubWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gZmF0KGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsNDMpfWZ1bmN0aW9uIHBhdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDI1KX1mdW5jdGlvbiBtYXQoYyxsKXtpZigxJmMmJihnZSgwLCJw'@;
put 'Iiw1NCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O3dlKCkseHIoIiAiLGEuVVJJLCIgIil9fWZ1bmN0aW9uIGdhdChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10cmVlLW5vZGUiLDQ5KSgxLCJkaXYiLDUwKSxidCgyLGZhdCwxLDAsImNsci1pY29uIiw1MSkoMyxw'@;
put 'YXQsMSwwLCJjbHItaWNvbiIsNTIpLHplKDQpLGJ0KDUsbWF0LDIsMSwicCIsNTMpLGJlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1BlKCJjbHJFeHBhbmRhYmxlIiwhMCksd2UoKSxicigib2JqZWN0LWhlYWRlciIsIWEuY291bnQpLHdlKCksUGUoIm5nSWYiLCFhLmNvdW50KSx3'@;
put 'ZSgpLFBlKCJuZ0lmIixhLmNvdW50KSx3ZSgpLHhyKCIgIixhLmRpc3BsYXksIiAiKSx3ZSgpLFBlKCJuZ0lmIiwhYS5jb3VudCl9fWZ1bmN0aW9uIF9hdChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10cmVlIiw0NyksYnQoMSxnYXQsNiw3LCJjbHItdHJlZS1ub2RlIiw0OCksUGEoMiwiYXN5'@;
put 'bmMiKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoNCk7UGUoImNsckxhenkiLCEwKSx3ZSgpLFBlKCJjbHJSZWN1cnNpdmVGb3JPZiIsd2MoMiwzLGEucm9vdCQpKSgiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iLGEuZ2V0Q2hpbGRyZW4pfX1mdW5jdGlvbiB2YXQoYyxsKXtpZigxJmMmJihy'@;
put 'aSgwKSxnZSgxLCJkaXYiLDU1KSxKdCgyLCJjbHItaWNvbiIsNDMpLGdlKDMsImRpdiIsNTYpKDQsInAiLDU3KSx6ZSg1KSxiZSgpLGdlKDYsInAiLDU4KSx6ZSg3KSxiZSgpKCkoKSxidCg4LF9hdCwzLDUsImNsci10cmVlIiw0NiksaWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9'@;
put 'WmUoMyk7d2UoNSkseHIoIiAiLGEuTkFNRSwiICIpLHdlKDIpLHhyKCIgIixhLklELCIgIiksd2UoKSxQZSgibmdJZiIsZC5zaG93QWNjKX19ZnVuY3Rpb24geWF0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw0MCksYnQoMSx2YXQsOSwzLCJuZy1jb250YWluZXIiLDcpLGJlKCkpLDImYyl7'@;
put 'Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJuZ0Zvck9mIixhLm1ldGFPYmplY3RTaG93TGlzdCl9fWZ1bmN0aW9uIGJhdChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci1kZy1yb3ciKSgxLCJjbHItZGctY2VsbCIpLHplKDIpLGJlKCksZ2UoMywiY2xyLWRnLWNlbGwiKSx6ZSg0KSxiZSgpLGdlKDUs'@;
put 'ImNsci1kZy1jZWxsIiksemUoNiksYmUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7d2UoMikscHIoYS5UWVBFKSx3ZSgyKSxwcihhLk5BTUUpLHdlKDIpLHByKGEuVkFMVUUpfX1mdW5jdGlvbiB3YXQoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItZGF0YWdyaWQiLDU5KSgxLCJjbHIt'@;
put 'ZGctY29sdW1uIiksemUoMiwiIFRZUEUgIiksSnQoMywiY2xyLWRnLXN0cmluZy1maWx0ZXIiLDYwKSxiZSgpLGdlKDQsImNsci1kZy1jb2x1bW4iKSx6ZSg1LCIgTkFNRSAiKSxKdCg2LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGJlKCksZ2UoNywiY2xyLWRnLWNvbHVtbiIpLHplKDgs'@;
put 'IiBWQUxVRSAiKSxKdCg5LCJjbHItZGctc3RyaW5nLWZpbHRlciIsNjApLGJlKCksYnQoMTAsYmF0LDcsMywiY2xyLWRnLXJvdyIsNjEpLGdlKDExLCJjbHItZGctZm9vdGVyIikoMTIsImNsci1kZy1wYWdpbmF0aW9uIiw2MiwyKSgxNCwiY2xyLWRnLXBhZ2Utc2l6ZSIsNjMpLHplKDE1LCJB'@;
put 'dHRyaWJ1dGVzIHBlciBwYWdlIiksYmUoKSx6ZSgxNiksYmUoKSgpKCkpLDImYyl7Y29uc3QgYT1YaSgxMyksZD1aZSgyKTt3ZSgzKSxQZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQudHlwZUZpbHRlciksd2UoMyksUGUoImNsckRnU3RyaW5nRmlsdGVyIixkLm5hbWVGaWx0ZXIpLHdlKDMpLFBl'@;
put 'KCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC52YWx1ZUZpbHRlciksd2UoKSxQZSgiY2xyRGdJdGVtc09mIixkLm1ldGFPYmplY3RBdHRyaWJ1dGVzKSx3ZSgyKSxQZSgiY2xyRGdQYWdlU2l6ZSIsMTApLHdlKDIpLFBlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLERhKDksWnN0KSksd2UoMiksWmgoIiAi'@;
put 'LGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBBdHRyaWJ1dGVzICIpfX1mdW5jdGlvbiBNYXQoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDMyKSgxLCJkaXYiLDMzKSxidCgyLHJhdCwzLDEsImRpdiIsMzQpLEp0KDMsImJyIiksYnQoNCxo'@;
put 'YXQsMywxLCJkaXYiLDM1KSg1LHlhdCwyLDEsImRpdiIsMzUpLGJlKCksZ2UoNiwiZGl2IiwzNikoNywiaDMiKSx6ZSg4KSxiZSgpLGJ0KDksd2F0LDE3LDEwLCJjbHItZGF0YWdyaWQiLDM3KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKDIpLFBlKCJuZ0lmIixhLm1ldGFPYmplY3RM'@;
put 'aXN0JiYhYS5vYmplY3RSb3V0ZSksd2UoMiksUGUoIm5nSWYiLCFhLm9iamVjdFZpZXcpLHdlKCksUGUoIm5nSWYiLGEub2JqZWN0Vmlldyksd2UoMykscHIoYS5hc3NvT2JqZWN0U2VsZWN0ZWQpLHdlKCksUGUoIm5nSWYiLGEuc2hvd1RhYmxlKX19bGV0IHhaPSgoKT0+e2NsYXNzIGN7Y29u'@;
put 'c3RydWN0b3IoYSxkLGgsZix2LFQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5yb3V0ZT1ULHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2Vh'@;
put 'cmNoPSIiLHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9ucz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlz'@;
put 'Lm1ldGFPYmplY3RTaXplPTIwMCx0aGlzLmFzc29UeXBlU2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1Z'@;
put 'PT5ZLmNvdW50P05vKFkuZGV0YWlscyk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6WS5BU1NPQ1VSSX1dfSkudGhlbihmZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0'@;
put 'ZXM9ZmUuYXR0cmlidXRlcyx0aGlzLmFzc29PYmplY3RTZWxlY3RlZD1ZLk5BTUU7bGV0IF9lPXRoaXMucm91dGVyLnVybDtyZXR1cm4gdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5vYmplY3RSb3V0ZT9fZS5zbGljZSgwLF9lLmxhc3RJbmRleE9mKCJvYmplY3QiKSkrIm9iamVj'@;
put 'dC8iK1kuQVNTT0NVUkkuc2xpY2UoMStZLkFTU09DVVJJLmluZGV4T2YoIlxcIikpOl9lKyIvb2JqZWN0LyIrWS5BU1NPQ1VSSS5zbGljZSgxK1kuQVNTT0NVUkkuaW5kZXhPZigiXFwiKSkpLHRoaXMuZ2V0QXNzb3NpYXRpb25zQ291bnQoZmUuYXNzb2NpYXRpb25zKX0pLHRoaXMuZGVib3Vu'@;
put 'Y2U9ITF9bmdPbkluaXQoKXtHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9tZXRhZGF0YSIsdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCIvdmlldy9tZXRhZGF0YS9vYmplY3QvIikmJih0aGlzLm9iamVjdFJvdXRlPSEwLHRoaXMub2JqZWN0Vmlldz0hMCksdGhpcy5wYWdlU2l6'@;
put 'ZT01LEduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCYmR24ubWV0YWRhdGEubWV0YVJlcG9zaXRvcmllcyYmIXRoaXMub2JqZWN0Um91dGU/KHRoaXMubWV0YURhdGFMaXN0PUduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdCx0aGlzLnJlcG9zaXRvcmllcz1Hbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9y'@;
put 'aWVzLHRoaXMucmVwb3NpdG9yeT1Hbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnksdGhpcy5sb2FkaW5nPSExLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMSx0aGlzLm1ldGFEYXRhU2VhcmNoPUduLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoKToodGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3Qo'@;
put 'Im1ldGFuYXYvbWV0YXR5cGVzIixudWxsKS50aGVuKGE9Pnt0aGlzLm1ldGFEYXRhTGlzdD1hLnR5cGVzLEduLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhpcy5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50aGVuKGE9PntsZXQgZD0hMTt0aGlzLnJlcG9zaXRvcmllcz1bXTtmb3IobGV0IGg9MDtoPGEub3V0cmVwb3MubGVuZ3RoO2grKyl0aGlzLnJlcG9zaXRvcmllcy5wdXNoKGEub3V0cmVwb3NbaF0uTkFNRSksIkZvdW5kYXRpb24iPT09'@;
put 'YS5vdXRyZXBvc1toXS5OQU1FJiYoZD0hMCk7aWYodGhpcy5yZXBvc2l0b3J5PWQ/IkZvdW5kYXRpb24iOmEub3V0cmVwb3NbMF0uTkFNRSxHbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzPXRoaXMucmVwb3NpdG9yaWVzLEduLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeT10aGlzLnJl'@;
put 'cG9zaXRvcnksdGhpcy5vYmplY3RSb3V0ZSl7dGhpcy5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksdGhpcy5zaG93RGF0YT0hMDtsZXQgaD0iIixmPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLm9iamVjdElEO3RoaXMubWV0YU9iamVjdExpc3Q9W10sdGhpcy5tZXRhT2JqZWN0TGlz'@;
put 'dC5wdXNoKHtJRDpmLE5BTUU6aH0pLHRoaXMubWV0YU9iamVjdFNob3dMaXN0PXRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0T25DbGljayh0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXS5JRCx0aGlzLm1ldGFPYmplY3RTaG93TGlzdFswXSl9fSkpfXRyZWVOb2RlQ2xpY2tl'@;
put 'ZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfW1ldGFE'@;
put 'YXRhT25DbGljayhhLGQpe3RoaXMub2JqZWN0Vmlldz0hMSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvbWV0YWRhdGEiKSx0aGlzLnNob3dEYXRhPSExLHRoaXMubG9hZGluZz0hMCx0aGlzLnNlbGVjdG1ldGFEYXRhKGEsZCl9bWV0YU9iamVjdE9uQ2xpY2soYSxkKXt0aGlz'@;
put 'LmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLnNob3dBY2M9ITEsdGhpcy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLnNlbGVjdG1ldGFPYmplY3QoYSxkKX1zZWxlY3RtZXRhRGF0YShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJl'@;
put 'cXVlc3QoIm1ldGFuYXYvbWV0YW9iamVjdHMiLHtTQVNDb250cm9sVGFibGU6W3ttZXRhdHlwZTphLHJlcG86aC5yZXBvc2l0b3J5fV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RMaXN0PXYub2JqZWN0cyxoLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGgubWV0YU9iamVjdFNpemUpLGgubG9h'@;
put 'ZGluZz0hMSxoLmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRhPSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2guc2FzU2VydmljZS5yZXF1ZXN0KCJtZXRhbmF2L21l'@;
put 'dGFkZXRhaWxzIix7U0FTQ29udHJvbFRhYmxlOlt7b2JqZWN0dXJpOmF9XX0pLnRoZW4odj0+e2gubWV0YU9iamVjdEFzc29jaWF0aW9ucz12LmFzc29jaWF0aW9ucyxoLnJvb3QkPU5vKGguZ2V0QXNzb3NpYXRpb25zQ291bnQodi5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93'@;
put 'VGFibGU9ITA7bGV0IFQ9di5hdHRyaWJ1dGVzLmZpbmQocmU9PiJOYW1lIj09PXJlLk5BTUUpLlZBTFVFO2guYXNzb09iamVjdFNlbGVjdGVkPVQsZC5OQU1FPVQ7bGV0IFk9aC5yb3V0ZXIudXJsO2gubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgub2JqZWN0Um91dGU/WS5zbGljZSgwLFkubGFz'@;
put 'dEluZGV4T2YoIm9iamVjdCIpKSsib2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSk6WSsiL29iamVjdC8iK2Euc2xpY2UoMSthLmluZGV4T2YoIlxcIikpKSxoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxz'@;
put 'KGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RBdHRyaWJ1dGVzPXYuYXR0cmlidXRlcyxoLnNo'@;
put 'b3dUYWJsZT0hMH0pfSkoKX1nZXRBc3Nvc2lhdGlvbnNDb3VudChhKXtsZXQgZD1uZXcgTWFwO2ZvcihsZXQgZiBvZiBhKXtkLmhhcyhmLkFTU09DKXx8ZC5zZXQoZi5BU1NPQyx7Y291bnQ6MCxkZXRhaWxzOltdfSk7bGV0IHY9ZC5nZXQoZi5BU1NPQyk7di5jb3VudCsrLHYuZGV0YWlscy5w'@;
put 'dXNoKHtBU1NPQ1VSSTpmLkFTU09DVVJJLE5BTUU6Zi5OQU1FLGRpc3BsYXk6Zi5OQU1FLFVSSTpmLkFTU09DVVJJLnNsaWNlKGYuQVNTT0NVUkkuaW5kZXhPZigiOiIpKzEpfSl9bGV0IGg9W107cmV0dXJuIGQuZm9yRWFjaChmdW5jdGlvbihmLHYpe2gucHVzaCh7QVNTT0M6dixjb3VudDpm'@;
put 'LmNvdW50LGRldGFpbHM6Zi5kZXRhaWxzLGRpc3BsYXk6disiICggIitmLmNvdW50KyIgKSJ9KX0pLGh9c2V0VHlwZUFzc29zaWF0aW9ucyhhKXtsZXQgZD1bXTtmb3IobGV0IGggb2YgdGhpcy5tZXRhT2JqZWN0QXNzb2NpYXRpb25zKWguQVNTT0M9PT1hJiZkLnB1c2goaCk7cmV0dXJuIHRo'@;
put 'aXMuYXNzb3NpYXRpb25OYW1lcz1kLGR9YXNzb3NpYXRpb25OYW1lT25DbGljayhhKXt0aGlzLmFzc29PYmplY3RTZWxlY3RlZD0iIC4gIix0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2VsZWN0QXNzb3NpYXRpb25zRGV0YWlscyhhKX1tZXRh'@;
put 'TGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLm1ldGFEYXRhTGlzdCx0aGlzLm1ldGFEYXRhU2VhcmNoLCJJRCIpLEduLm1ldGFkYXRhLm1ldGFEYXRhU2VhcmNoPXRoaXMubWV0YURhdGFTZWFyY2h9bWV0YU9iamVjdE9uRmlsdGVyKCl7dGhp'@;
put 'cy5tZXRhT2JqZWN0QXR0cmlidXRlcz1bXSx0aGlzLmhlbHBlclNlcnZpY2UubWV0YU9iamVjdE9uRmlsdGVyKHRoaXMubWV0YU9iamVjdExpc3QsdGhpcy5tZXRhT2JqZWN0U2VhcmNoLCJOQU1FIiksdGhpcy5nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyh0aGlzLm1ldGFPYmplY3RTaXplKSxH'@;
put 'bi5tZXRhZGF0YS5tZXRhT2JqZWN0U2VhcmNoPXRoaXMubWV0YU9iamVjdFNlYXJjaH1nZXRNZXRhT2JqZWN0QXR0cmlidXRlcyhhKXtpZih2b2lkIDAhPT10aGlzLm1ldGFPYmplY3RMaXN0JiZ0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aD5hKXtsZXQgZD0wLGg9LTE7Zm9yKGxldCBmPTA7'@;
put 'Zjx0aGlzLm1ldGFPYmplY3RMaXN0Lmxlbmd0aDtmKyspaWYoKHZvaWQgMD09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVufHwhMT09PXRoaXMubWV0YU9iamVjdExpc3RbZl0uaGlkZGVuKSYmZCsrLGQ9PT1hKXtoPWY7YnJlYWt9dGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9LTEhPT1o'@;
put 'P3RoaXMubWV0YU9iamVjdExpc3Quc2xpY2UoMCxoKTp0aGlzLm1ldGFPYmplY3RMaXN0fWVsc2UgdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3Q9dGhpcy5tZXRhT2JqZWN0TGlzdH1wYW5lbENoYW5nZShhLGQpe3RoaXMuZGVib3VuY2V8fCh0aGlzLm1ldGFPYmplY3RPbkNsaWNrKGQuSUQsZCks'@;
put 'dGhpcy5kZWJvdW5jZT0hMCxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZWJvdW5jZT0hMX0sNjAwKSl9dXBkYXRlU2VsZWN0ZWRSZXBvc2l0b3J5KCl7R24ubWV0YWRhdGEuc2VsZWN0ZWRSZXBvc2l0b3J5PXRoaXMucmVwb3NpdG9yeX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk'@;
put 'KXtyZXR1cm4gbmV3KGR8fGMpKHN0KEdsKSxzdCh5YSksc3QoY3UpLHN0KHExKSxzdCh6cyksc3QoTWMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLW1ldGFkYXRhIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNs'@;
put 'czoxNyx2YXJzOjgsY29uc3RzOltbInNlYXJjaExpYlRyZWVJbnB1dCIsIiJdLFsic2VhcmNoT2JqVHJlZUlucHV0IiwiIl0sWyJwYWdpbmF0aW9uIiwiIl0sWzEsInJlcG8tZHJvcGRvd24iXSxbImNsclNlbGVjdCIsIiIsImlkIiwicmVwb3NpdG9yeSIsMywibmdNb2RlbENoYW5nZSIsImNo'@;
put 'YW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWkiXSxbMSwi'@;
put 'Y29sb3ItZ3JheSJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IGNsci1mbGV4LWdyb3ctMSIsNCwibmdJZiJdLFszLCJ2YWx1ZSJdLFsxLCJzZWFyY2gtbm9kZSJdLFsx'@;
put 'LCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIFNBUyBUeXBlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFyY2giLDQs'@;
put 'Im5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdJZiJdLFszLCJj'@;
put 'bGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJibG9jayJdLFsxLCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6'@;
put 'ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzQsIm5nSWYiXSxbMSwiY2xyLXJvdyIsImNsci1mbGV4LWdyb3ctMSJdLFsxLCJjbHItY29sLTYiXSxbImNs'@;
put 'YXNzIiwic2VhcmNoLWlucHV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm9iamVjdHMtY29sIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtNiIsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLWlucHV0Il0sWyJjbHJJbnB1'@;
put 'dCIsIiIsInBsYWNlaG9sZGVyIiwic2VhcmNoIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm9iamVjdHMtY29sIl0sWzMsImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsNCwibmdJZiJdLFsz'@;
put 'LCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMSwiZmxvYXQtcmlnaHQiXSxbNCwiY2xySWZFeHBhbmRlZCJdLFszLCJjbHJMYXp5Iiw0LCJuZ0lmIl0sWzMsImNsckxhenkiXSxbMywiY2xyRXhwYW5kYWJsZSIsNCwiY2xyUmVjdXJzaXZl'@;
put 'Rm9yIiwiY2xyUmVjdXJzaXZlRm9yT2YiLCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiJdLFszLCJjbHJFeHBhbmRhYmxlIl0sWzEsImZ1bGwtd2lkdGgiXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiLDQsIm5nSWYiXSxbInNoYXBlIiwiYmxvY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiZmxv'@;
put 'YXQtcmlnaHQgb2JqZWN0LXVyaSIsNCwibmdJZiJdLFsxLCJmbG9hdC1yaWdodCIsIm9iamVjdC11cmkiXSxbMSwiY29scy1oZWFkIl0sWzEsIm9iamVjdC10ZXh0Il0sWzEsIm0tMCIsIndvcmQtYnJlYWsiLCJtci0yMCJdLFsxLCJmbG9hdC1yaWdodCIsIm1sLTMiXSxbMSwiZGF0YWdyaWQt'@;
put 'Y3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ1N0cmluZ0ZpbHRlciJdLFs0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiYXBwLXNpZGViYXIi'@;
put 'KSgxLCJkaXYiLDMpKDIsImNsci1zZWxlY3QtY29udGFpbmVyIikoMywibGFiZWwiKSx6ZSg0LCJNZXRhZGF0YSBSZXBvc2l0b3J5IiksYmUoKSxnZSg1LCJzZWxlY3QiLDQpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5yZXBvc2l0b3J5LHYpfHwoaC5yZXBv'@;
put 'c2l0b3J5PXYpLHZ9KSxIdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkUmVwb3NpdG9yeSgpfSksYnQoNixXc3QsMiwyLCJvcHRpb24iLDUpLGJlKCkoKSgpLGdlKDcsImNsci10cmVlIiksYnQoOCxxc3QsNiwzLCJjbHItdHJlZS1ub2RlIiw2KSg5LFhzdCwy'@;
put 'LDEsIm5nLWNvbnRhaW5lciIsNyksYmUoKSgpLGdlKDEwLCJkaXYiLDgpKDExLCJkaXYiLDkpKDEyLCJoMyIsMTApLHplKDEzKSxiZSgpLGJ0KDE0LEpzdCw0LDAsImRpdiIsMTEpKDE1LG5hdCw0LDEsImRpdiIsMTIpKDE2LE1hdCwxMCw1LCJkaXYiLDEzKSxiZSgpKCkpLDImZCYmKHdlKDUp'@;
put 'LFdyKCJuZ01vZGVsIixoLnJlcG9zaXRvcnkpLHdlKCksUGUoIm5nRm9yT2YiLGgucmVwb3NpdG9yaWVzKSx3ZSgyKSxQZSgibmdJZiIsaC5tZXRhRGF0YUxpc3QpLHdlKCksUGUoIm5nRm9yT2YiLGgubWV0YURhdGFMaXN0KSx3ZSg0KSxwcihoLmFzc29UeXBlU2VsZWN0ZWQpLHdlKCksUGUo'@;
put 'Im5nSWYiLCFoLmxvYWRpbmcmJiFoLm1ldGFPYmplY3RMaXN0KSx3ZSgpLFBlKCJuZ0lmIixoLmxvYWRpbmcpLHdlKCksUGUoIm5nSWYiLGguc2hvd0RhdGEpKX0sZGVwZW5kZW5jaWVzOltMcyxxaSxuZCxyZCxUbCx0ZCxjYSxvYSxYNyxaNCx3ZyxxRSwkNyxHTixLRSxDZyxycmUsU2cseGcs'@;
put 'UTcsa2csWjcsVTQsRzcsT04scmgsdWQsdXJlLFphLHIwLGtuZSxYcyxhZCx6NyxZNyxobmUsTEUscG5lLGZuZSxtbmUsbE4seXAsZmtdLHN0eWxlczpbIi5vYmplY3RzLWNvbFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0Ojc1dmg7b3ZlcmZsb3c6c2Nyb2xsO2JvcmRlcjoxcHggc29saWQg'@;
put 'I2NjY2NjYztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXJhZGl1czo0cHh9LmNvbHMtaGVhZFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojZmFmYWZhO2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztwYWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fS5vYmplY3QtdGV4dFtfbmdjb250ZW50'@;
put 'LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9LnJlcG8tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1'@;
put 'cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5jbHItYWNjb3JkaW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5mbG9hdC1yaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7ZmxvYXQ6cmlnaHR9LmZ1bGwtd2lkdGhbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEw'@;
put 'MCV9Lm9iamVjdC11cmlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo1cHggMCAwfS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWxlZnQ6M3B4O3BhZGRpbmctcmlnaHQ6M3B4fS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntiYWNrZ3Jv'@;
put 'dW5kLWNvbG9yOiNkOGUzZTk7Ym9yZGVyLXJhZGl1czozcHh9LmRhdGFncmlkLWhvc3RbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6dW5zZXQhaW1wb3J0YW50fS5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlv'@;
put 'bjpjb2x1bW59LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0iXX0pO3N0YXRpYyNuPXRoaXMuXHUwMjc1cHJvdj1scih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHBy'@;
put 'b3ZpZGVkSW46InJvb3QifSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIENhdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlvbiBTYXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25z'@;
put 'dCBoPVplKDIpO3JldHVybiBoLnJvbGVTZWFyY2g9IiIseHQoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksYmUoKX19ZnVuY3Rpb24geGF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxHcigibmdNb2Rl'@;
put 'bENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3JldHVybiBxcihmLnJvbGVTZWFyY2gsaCl8fChmLnJvbGVTZWFyY2g9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLGJlKCksYnQo'@;
put 'NCxDYXQsMSwwLCJjbHItaWNvbiIsMTApKDUsU2F0LDEsMCwiY2xyLWljb24iLDExKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDMpLGQ9WmUoKTt3ZSgyKSxXcigibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJ'@;
put 'ZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGthdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDE1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5yb2xlT25DbGljayho'@;
put 'KSl9KSxnZSgxLCJwIiwxNiksSnQoMiwiY2xyLWljb24iLDE3KSx6ZSgzKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0LGQ9WmUoKTticigidGFibGUtYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJvbGVVcmkpLHdlKDMpLHhyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0'@;
put 'aW9uIEVhdChjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsa2F0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLGlpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLFBlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBUYXQoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDE4KSgxLCJzcGFu'@;
put 'IiwxOSksemUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSgpKX1mdW5jdGlvbiBEYXQoYyxsKXsxJmMmJihnZSgwLCJoNSIpLHplKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGJlKCkpfWZ1bmN0aW9uIEFhdChjLGwpe2lmKDEmYyYmKGdlKDAsInRyIiwzMikoMSwidGQiLDMwKSx6ZSgyKSxiZSgp'@;
put 'LGdlKDMsInRkIiwzMCksemUoNCksYmUoKSxnZSg1LCJ0ZCIsMzApLHplKDYpLGJlKCksZ2UoNywidGQiLDMwKSx6ZSg4KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtQZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksd2UoMikscHIoYS5N'@;
put 'RU1CRVJOQU1FKSx3ZSgyKSxwcihhLkVNQUlMKSx3ZSgyKSxwcihhLk1FTUJFUkNSRUFURUQpLHdlKDIpLHByKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIExhdChjLGwpe2lmKDEmYyYmKGdlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLHpl'@;
put 'KDUsIk5BTUUiKSxiZSgpKCksZ2UoNiwidGQiLDI5KSg3LCJiIiksemUoOCwiRU1BSUwiKSxiZSgpKCksZ2UoOSwidGQiLDI5KSgxMCwiYiIpLHplKDExLCJDUkVBVEVEIiksYmUoKSgpLGdlKDEyLCJ0ZCIsMzApKDEzLCJiIiksemUoMTQsIlVQREFURUQiKSxiZSgpKCkoKSgpLGdlKDE1LCJ0'@;
put 'Ym9keSIpLGJ0KDE2LEFhdCw5LDUsInRyIiwzMSksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoMTYpLFBlKCJuZ0Zvck9mIixhLnJvbGVNZW1iZXJzKX19ZnVuY3Rpb24gSWF0KGMsbCl7MSZjJiYoZ2UoMCwiaDUiKSx6ZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIiksYmUoKSl9ZnVu'@;
put 'Y3Rpb24gUmF0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLHplKDIpLGJlKCksZ2UoMywidGQiLDMwKSx6ZSg0KSxiZSgpLGdlKDUsInRkIiwzMCksemUoNiksYmUoKSxnZSg3LCJ0ZCIsMzApLHplKDgpLGJlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O1Bl'@;
put 'KCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSU1FTSksd2UoMikscHIoYS5NRU1CRVJOQU1FKSx3ZSgyKSxwcihhLkVNQUlMKSx3ZSgyKSxwcihhLk1FTUJFUkNSRUFURUQpLHdlKDIpLHByKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIE9hdChjLGwpe2lmKDEm'@;
put 'YyYmKGdlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLHplKDUsIk5BTUUiKSxiZSgpKCksZ2UoNiwidGQiLDI5KSg3LCJiIiksemUoOCwiRU1BSUwiKSxiZSgpKCksZ2UoOSwidGQiLDI5KSgxMCwiYiIpLHplKDExLCJDUkVBVEVEIiksYmUoKSgp'@;
put 'LGdlKDEyLCJ0ZCIsMzApKDEzLCJiIiksemUoMTQsIlVQREFURUQiKSxiZSgpKCkoKSgpLGdlKDE1LCJ0Ym9keSIpLGJ0KDE2LFJhdCw5LDUsInRyIiwzMSksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoMTYpLFBlKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBQYXQo'@;
put 'YyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksemUoOSksYmUoKSgpKCkoKSxnZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLHplKDEz'@;
put 'KSxiZSgpKCkoKSgpKCkoKSgpLGdlKDE0LCJkaXYiLDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSx6ZSgxOSksYmUoKSxidCgyMCxEYXQsMiwwLCJoNSIsNiksZ2UoMjEsImRpdiIsMjYpLGJ0KDIyLExhdCwxNywxLCJ0YWJsZSIsMjcpLGJlKCkoKSxK'@;
put 'dCgyMywiaHIiKSxnZSgyNCwiZGl2IikoMjUsImgzIiksemUoMjYpLGJlKCksYnQoMjcsSWF0LDIsMCwiaDUiLDYpLGdlKDI4LCJkaXYiLDI2KSxidCgyOSxPYXQsMTcsMSwidGFibGUiLDI3KSxiZSgpKCksSnQoMzAsImJyIiksYmUoKSgpKCkoKSksMiZjKXtjb25zdCBhPVplKCk7d2UoOSks'@;
put 'cHIoYS5yb2xlTmFtZSksd2UoNCkscHIoYS5yb2xlRGVzYyksd2UoNikseHIoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksd2UoKSxQZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSx3ZSgyKSxQZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSx3ZSg0KSx4'@;
put 'cigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiksd2UoKSxQZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLHdlKDIpLFBlKCJuZ0lmIiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCBmMGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2Fz'@;
put 'U2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLnJvbGVTZWFyY2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0'@;
put 'aGlzLnBhcmFtVVJJPSIiLHRoaXMubG9hZGluZz0hMX1uZ09uSW5pdCgpe0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9sZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1V'@;
put 'Ukk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxHbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9R24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9R24udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Hbi51c2VybmF2'@;
put 'LnJvbGVMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9PntpZih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLnJvbGVzLEduLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBhcmFtUHJl'@;
put 'c2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5maW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlk'@;
put 'OnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9'@;
put 'Zi5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSk6KHRoaXMucm9sZXM9R24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9R24udXNlcm5hdi5yb2xlU2Vh'@;
put 'cmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLnJvbGVzLEduLnVzZXJuYXYucm9sZUxpc3Q9YS5yb2xlcyx0aGlzLnBhcmFtUHJlc2VudCYmdm9pZCAwIT09dGhpcy5yb2xlcyl7bGV0IGQ9dGhpcy5m'@;
put 'aW5kUm9sZSh0aGlzLnJvbGVzLHRoaXMucGFyYW1VUkkpOyExIT09ZCYmKHRoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5cm9sZSIse2l3YW50Olt7cm9sZWlkOnRoaXMucGFyYW1VUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGlu'@;
put 'Zz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVV'@;
put 'UkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksR24udXNlcm5hdi5y'@;
put 'b2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVV'@;
put 'UkkoYS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJz'@;
put 'PWYuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5zYXNtZW1iZXJzLmxlbmd0aCx0aGlzLnJvbGVHcm91cHM9Zi5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1hLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1hLlJP'@;
put 'TEVOQU1FLHRoaXMucm9sZURlc2M9YS5ST0xFREVTQ30pfWZpbmRSb2xlKGEsZCl7bGV0IGg9ITE7cmV0dXJuIGEuZm9yRWFjaChmPT57Zi5ST0xFVVJJPT09ZCYmKGg9Zil9KSxofXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoeWEpLHN0'@;
put 'KGN1KSxzdCh6cyksc3QocTEpLHN0KE1jKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0'@;
put 'IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJd'@;
put 'LFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IFJvbGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIs'@;
put 'NCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRl'@;
put 'ciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJ0YWJsZSIsInJvbGUtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsInJvbGUtaW5mby10ZXh0Il0s'@;
put 'WzEsImNhcmQiLCJyb2xlLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIG1lbWJlci10YWJsZSIsNCwibmdJZiJdLFsxLCJ0YWJsZSIsIm1lbWJlci10YWJsZSJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayIsNCwibmdGb3IiLCJuZ0Zv'@;
put 'ck9mIl0sWzMsInJvdXRlckxpbmsiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJhcHAtc2lkZWJhciIsMSkoMSwiY2xyLXRyZWUiKSxidCgyLHhhdCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsRWF0LDIsMSwibmctY29udGFpbmVyIiwzKSxiZSgpKCksZ2UoNCwiZGl2'@;
put 'Iiw0KSxidCg1LFRhdCwzLDAsImRpdiIsNSkoNixQYXQsMzEsOCwiZGl2Iiw2KSxiZSgpKSwyJmQmJih3ZSgyKSxQZSgibmdJZiIsaC5yb2xlcyksd2UoKSxQZSgibmdGb3JPZiIsaC5yb2xlcyksd2UoMiksUGUoIm5nSWYiLGgubG9hZGluZyksd2UoKSxQZSgibmdJZiIsaC5yb2xlTWVtYmVy'@;
put 'cyYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W0xzLHFpLGswLFRsLGNhLG9hLHJoLHVkLFphLGFkLHlwXSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS5yb2xlLWluZm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpp'@;
put 'bmxpbmU7Zm9udC1zaXplOjIwcHh9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3JkZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS5yb2xlLWluZm9bX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgdGRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXI6MXB4IHNvbGlkICNhN2E3YTc7Ym9yZGVyLXJhZGl1czozcHg7Ym94LXNoYWRvdzow'@;
put 'IDJweCA1cHggI2RhZDdkN30ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7d2lkdGg6MTAwJX0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5k'@;
put 'LWNvbG9yOiNkYWRhZGF9Lm1lbWJlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZTZlNmU2O2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6NzAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pfXJldHVybiBjfSkoKSxG'@;
put 'YXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMjdD10aGlzLlx1MDI3NWNtcD1rcih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJd'@;
put 'XSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkp0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltJNF19KX1yZXR1cm4gY30pKCksSGF0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io'@;
put 'KXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJj'@;
put 'b250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZKdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbSTRdfSl9cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIE5hdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDEyKX1mdW5j'@;
put 'dGlvbiBWYXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiBoLnVzZXJTZWFyY2g9IiIseHQoaC51c2VyTGlzdE9uRmlsdGVyKCkpfSksYmUoKX19ZnVuY3Rpb24gamF0'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxHcigibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpO3JldHVybiBxcihmLnVzZXJTZWFyY2gsaCl8fChmLnVzZXJTZWFy'@;
put 'Y2g9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkudXNlckxpc3RPbkZpbHRlcigpKX0pLGJlKCksYnQoNCxOYXQsMSwwLCJjbHItaWNvbiIsMTApKDUsVmF0LDEsMCwiY2xyLWljb24iLDExKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVhpKDMp'@;
put 'LGQ9WmUoKTt3ZSgyKSxXcigibmdNb2RlbCIsZC51c2VyU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEJhdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5v'@;
put 'ZGUiLDE1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS51c2VyT25DbGljayhoKSl9KSxnZSgxLCJwIiwxNiksSnQoMiwiY2xyLWljb24iLDE3KSx6ZSgzKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKCkuJGltcGxp'@;
put 'Y2l0LGQ9WmUoKTticigidGFibGUtYWN0aXZlIiwobnVsbD09ZC51c2VySW5mbz9udWxsOmQudXNlckluZm8uVVJJKT09PWEuVVJJKSx3ZSgzKSx4cigiICIsYS5OQU1FLCIgIil9fWZ1bmN0aW9uIFlhdChjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsQmF0LDQsMywiY2xyLXRyZWUtbm9kZSIs'@;
put 'MTQpLGlpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLFBlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiB6YXQoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksemUoMiwiIExvYWRpbmcuLi4gIiksYmUoKSgpKX1mdW5jdGlvbiBVYXQoYyxsKXtpZigx'@;
put 'JmMmJihyaSgwKSxnZSgxLCJ0ciIpKDIsInRkIiwyNyksemUoMywiIE1ldGFkYXRhIENyZWF0ZWQ6ICIpLGdlKDQsImIiKSx6ZSg1KSxiZSgpKCkoKSxnZSg2LCJ0ciIpKDcsInRkIiwyNyksemUoOCwiIE1ldGFkYXRhIFVwZGF0ZWQ6ICIpLGdlKDksImIiKSx6ZSgxMCksYmUoKSgpKCksaWko'@;
put 'KSksMiZjKXtjb25zdCBhPVplKDMpO3dlKDUpLHByKGEudXNlckluZm8uTUVUQURBVEFDUkVBVEVEKSx3ZSg1KSxwcihhLnVzZXJJbmZvLk1FVEFEQVRBVVBEQVRFRCl9fWZ1bmN0aW9uIFphdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNiko'@;
put 'MywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNykoNiwicCIsMjgpKDcsImIiKSx6ZSg4KSxiZSgpKCkoKSgpLGdlKDksInRyIikoMTAsInRkIiwyNykoMTEsInAiLDI4KSgxMiwiYiIpLHplKDEzKSxiZSgpKCkoKSgpLGJ0KDE0LFVhdCwxMSwyLCJuZy1jb250YWluZXIiLDYpLGJlKCkoKSgp'@;
put 'KCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSg4KSxwcihhLnVzZXJJbmZvLk5BTUUpLHdlKDUpLHByKGEudXNlckluZm8uRElTUExBWU5BTUUpLHdlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19ZnVuY3Rpb24gV2F0KGMsbCl7aWYoMSZjJiYoZ2UoMCwi'@;
put 'ZGl2IiwyMSkoMSwiZGl2IiwyMikoMiwidGFibGUiLDI2KSgzLCJ0Ym9keSIpKDQsInRyIikoNSwidGQiLDI3KSg2LCJwIiwyOCkoNywiYiIpLHplKDgpLGJlKCkoKSgpKCksZ2UoOSwidHIiKSgxMCwidGQiLDI3KSx6ZSgxMSwiIFVzZXIgSUQ6ICIpLGdlKDEyLCJiIiksemUoMTMpLGJlKCko'@;
put 'KSgpLGdlKDE0LCJ0ciIpKDE1LCJ0ZCIsMjcpLHplKDE2LCIgVXNlciBwcm92aWRlciBJRDogIiksZ2UoMTcsImIiKSx6ZSgxOCksYmUoKSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDgpLHByKGEudXNlckluZm8uTkFNRSksd2UoNSkscHIoYS51c2VySW5mby5VUkkpLHdl'@;
put 'KDUpLHByKGEudXNlckluZm8uUFJPVklERVIpfX1mdW5jdGlvbiBHYXQoYyxsKXsxJmMmJihnZSgwLCJoNSIpLHplKDEsIk5vIEVtYWlscyBQcmVzZW50IiksYmUoKSl9ZnVuY3Rpb24gJGF0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiKSgxLCJ0ZCIsMzEpLHplKDIpLGJlKCksZ2UoMywidGQi'@;
put 'LDMxKSx6ZSg0KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgyKSxwcihhLkVNQUlMKSx3ZSgyKSxwcihhLlRZUEUpfX1mdW5jdGlvbiBxYXQoYyxsKXtpZigxJmMmJihnZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSx6ZSg1'@;
put 'LCJFTUFJTCIpLGJlKCkoKSxnZSg2LCJ0ZCIsMzEpKDcsImIiKSx6ZSg4LCJUWVBFIiksYmUoKSgpKCkoKSxnZSg5LCJ0Ym9keSIpLGJ0KDEwLCRhdCw1LDIsInRyIiwzKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgxMCksUGUoIm5nRm9yT2YiLGEudXNlckVtYWlscyl9fWZ1bmN0'@;
put 'aW9uIEthdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiksemUoMiksYmUoKSxidCgzLEdhdCwyLDAsImg1Iiw2KSxnZSg0LCJkaXYiLDI0KSxidCg1LHFhdCwxMSwxLCJ0YWJsZSIsMjUpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDIpLHhyKCJFTUFJTFMgKCIsYS51'@;
put 'c2VyRW1haWxzQ291bnR8fCIwIiwiKSIpLHdlKCksUGUoIm5nSWYiLDA9PWEudXNlckVtYWlsc0NvdW50KSx3ZSgyKSxQZSgibmdJZiIsMCE9YS51c2VyRW1haWxzQ291bnQpfX1mdW5jdGlvbiBYYXQoYyxsKXsxJmMmJkp0KDAsImhyIil9ZnVuY3Rpb24gSmF0KGMsbCl7MSZjJiYoZ2UoMCwi'@;
put 'aDUiKSx6ZSgxLCJObyBHcm91cHMgUHJlc2VudCIpLGJlKCkpfWZ1bmN0aW9uIFFhdChjLGwpe2lmKDEmYyYmKGdlKDAsInRkIiwzMyksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O1BlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSSks'@;
put 'd2UoKSx4cigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gZWx0KGMsbCl7aWYoMSZjJiYocmkoMCksZ2UoMSwidGQiLDMzKSx6ZSgyKSxiZSgpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDt3ZSgpLFBlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMv'@;
put 'IisoYS5HUk9VUFVSSXx8YS5VUkkpKSx3ZSgpLHhyKCIgIixhLkdST1VQTkFNRSwiICIpfX1mdW5jdGlvbiB0bHQoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpLGJ0KDEsUWF0LDIsMiwidGQiLDMyKSgyLGVsdCwzLDIsIm5nLWNvbnRhaW5lciIsNiksYmUoKSksMiZjKXtjb25zdCBhPVplKDMp'@;
put 'O3dlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNWaXlhKSx3ZSgpLFBlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWZ1bmN0aW9uIG5sdChjLGwpe2lmKDEmYyYmKGdlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxidCgy'@;
put 'LHRsdCwzLDIsInRyIiwzKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgyKSxQZSgibmdGb3JPZiIsYS51c2VyR3JvdXBzKX19ZnVuY3Rpb24gcmx0KGMsbCl7MSZjJiZKdCgwLCJociIpfWZ1bmN0aW9uIGlsdChjLGwpezEmYyYmKGdlKDAsImg1IiksemUoMSwiTm8gUm9sZXMgUHJl'@;
put 'c2VudCIpLGJlKCkpfWZ1bmN0aW9uIG9sdChjLGwpe2lmKDEmYyYmKGdlKDAsInRyIikoMSwidGQiLDM0KSx6ZSgyKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPVplKDQpO3dlKCksUGUoInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2L3JvbGVzLyIrZC5nZXRSb2xlVVJJ'@;
put 'KGEuUk9MRVVSSSkpLHdlKCkseHIoIiAiLGEuUk9MRU5BTUUsIiAiKX19ZnVuY3Rpb24gc2x0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidGFibGUiLDI5KSgxLCJ0Ym9keSIpLGJ0KDIsb2x0LDMsMiwidHIiLDMpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDMpO3dlKDIpLFBlKCJuZ0Zvck9mIixh'@;
put 'LnVzZXJSb2xlcyl9fWZ1bmN0aW9uIGFsdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiksemUoMiksYmUoKSxidCgzLGlsdCwyLDAsImg1Iiw2KSxnZSg0LCJkaXYiLDI0KSxidCg1LHNsdCwzLDEsInRhYmxlIiwyNSksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoMik7d2UoMiks'@;
put 'eHIoIlJPTEVTICgiLGEudXNlclJvbGVzQ291bnR8fCIwIiwiKSIpLHdlKCksUGUoIm5nSWYiLDA9PWEudXNlclJvbGVzQ291bnQpLHdlKDIpLFBlKCJuZ0lmIiwwIT1hLnVzZXJSb2xlc0NvdW50KX19ZnVuY3Rpb24gbGx0KGMsbCl7MSZjJiZKdCgwLCJociIpfWZ1bmN0aW9uIGNsdChjLGwp'@;
put 'ezEmYyYmKGdlKDAsImg1IiksemUoMSwiTm8gTG9naW5zIFByZXNlbnQiKSxiZSgpKX1mdW5jdGlvbiB1bHQoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwzMSksemUoMiksYmUoKSxnZSgzLCJ0ZCIsMzEpLHplKDQpLGJlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dl'@;
put 'KDIpLHByKGEuRE9NQUlOKSx3ZSgyKSxwcihhLlVTRVJJRCl9fWZ1bmN0aW9uIGRsdChjLGwpe2lmKDEmYyYmKGdlKDAsInRhYmxlIiwyOSkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwzMCkoNCwiYiIpLHplKDUsIkRPTUFJTiIpLGJlKCkoKSxnZSg2LCJ0ZCIpKDcsImIiKSx6ZSg4LCJV'@;
put 'U0VSIElEIiksYmUoKSgpKCkoKSxnZSg5LCJ0Ym9keSIpLGJ0KDEwLHVsdCw1LDIsInRyIiwzKSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgxMCksUGUoIm5nRm9yT2YiLGEudXNlckxvZ2lucyl9fWZ1bmN0aW9uIGhsdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIpKDEsImgzIiks'@;
put 'emUoMiksYmUoKSxidCgzLGNsdCwyLDAsImg1Iiw2KSxnZSg0LCJkaXYiLDI0KSxidCg1LGRsdCwxMSwxLCJ0YWJsZSIsMjUpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDIpLHhyKCJMT0dJTlMgKCIsYS51c2VyTG9naW5zQ291bnR8fCIwIiwiKSIpLHdlKCksUGUoIm5nSWYiLDA9'@;
put 'PWEudXNlckxvZ2luc0NvdW50KSx3ZSgyKSxQZSgibmdJZiIsMCE9YS51c2VyTG9naW5zQ291bnQpfX1mdW5jdGlvbiBmbHQoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiKSxidCgxLFphdCwxNSwzLCJkaXYiLDIwKSgyLFdhdCwxOSwzLCJkaXYiLDIwKSxnZSgzLCJkaXYiLDIxKSg0LCJkaXYi'@;
put 'LDIyKSg1LCJkaXYiLDIzKSxidCg2LEthdCw2LDMsImRpdiIsNikoNyxYYXQsMSwwLCJociIsNiksZ2UoOCwiZGl2IikoOSwiaDMiKSx6ZSgxMCksYmUoKSxidCgxMSxKYXQsMiwwLCJoNSIsNiksZ2UoMTIsImRpdiIsMjQpLGJ0KDEzLG5sdCwzLDEsInRhYmxlIiwyNSksYmUoKSgpLGJ0KDE0'@;
put 'LHJsdCwxLDAsImhyIiw2KSgxNSxhbHQsNiwzLCJkaXYiLDYpKDE2LGxsdCwxLDAsImhyIiw2KSgxNyxobHQsNiwzLCJkaXYiLDYpLEp0KDE4LCJiciIpLGJlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNW'@;
put 'aXlhKSx3ZSgpLFBlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSYmYS51c2VySW5mbyksd2UoNCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSx3ZSgpLFBlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2Fz'@;
put 'OSksd2UoMykseHIoIkdST1VQUyAoIixhLnVzZXJHcm91cHNDb3VudHx8IjAiLCIpIiksd2UoKSxQZSgibmdJZiIsMD09YS51c2VyR3JvdXBzQ291bnQpLHdlKDIpLFBlKCJuZ0lmIiwwIT1hLnVzZXJHcm91cHNDb3VudCksd2UoKSxQZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJU'@;
put 'eXBlLlNhczkpLHdlKCksUGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSx3ZSgpLFBlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksd2UoKSxQZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpfX1sZXQgcDBl'@;
put 'PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLnJvdXRlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5sb2FkaW5nPSExLHRoaXMudXNlclNlYXJjaD0iIix0aGlzLnBhcmFt'@;
put 'UHJlc2VudD0hMSx0aGlzLnBhcmFtTmFtZT0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBlZC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLnNlcnZlclR5cGU9IiIsdGhpcy5TZXJ2ZXJUeXBlPUN1LlksdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBl'@;
put 'KCksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtpZihHbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2'@;
put 'L3VzZXJzIix2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkmJih0aGlzLnBhcmFtUHJlc2VudD0hMCx0aGlzLnBhcmFtTmFtZT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEduLnVzZXJuYXYudXNlckxpc3QmJiF0aGlzLnBhcmFtUHJlc2VudCl0aGlzLnVz'@;
put 'ZXJzPUduLnVzZXJuYXYudXNlckxpc3QsdGhpcy51c2VyU2VhcmNoPUduLnVzZXJuYXYudXNlclNlYXJjaDtlbHNlIGlmKHZvaWQgMD09PUduLnVzZXJuYXYudXNlckxpc3Q/KHRoaXMubG9hZGluZz0hMCx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lk'@;
put 'ZW50aXRpZXMvdXNlcnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGg9SlNPTi5wYXJzZShhKS5pdGVtcy5tYXAoZj0+KHtOQU1FOmYubmFtZSxVUkk6Zi5pZCxQUk9WSURFUjpmLnByb3Zp'@;
put 'ZGVySWR9KSk7dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9aCxHbi51c2VybmF2LnVzZXJMaXN0PWh9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVycyIsbnVsbCkudGhlbihhPT57dGhpcy5sb2FkaW5nPSExLHRoaXMudXNlcnM9YS51c2VycyxHbi51c2Vy'@;
put 'bmF2LnVzZXJMaXN0PWEudXNlcnN9KSk6KHRoaXMudXNlcnM9R24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9R24udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBhPXRoaXMucm91dGUuc25h'@;
put 'cHNob3QucGFyYW1zLnVyaTtmZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57'@;
put 'bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlzLnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKHY9Pih7R1JPVVBOQU1FOnYubmFtZSxVUkk6di5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0aCx0aGlzLnVzZXJzJiYo'@;
put 'dGhpcy51c2VySW5mbz10aGlzLnVzZXJzLmZpbmQodj0+di5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmF9XX0pLnRo'@;
put 'ZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEN1LlkuU2FzOTp0aGlzLnVzZXJJbmZvPWguaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9aC5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9aC5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWgu'@;
put 'cm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1oLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJMb2dpbnM9aC5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9aC5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQ3UuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5m'@;
put 'aW5kKGY9PmYuVVJJPT09YSk7ZWxzZXtjb25zdCBmPWguZ3JvdXBzWzBdO3RoaXMudXNlckluZm89e1VSSTpmLklELE5BTUU6Zi5OQU1FLERJU1BMQVlOQU1FOmYuTkFNRX19fXRoaXMudXNlckRhdGE9aCx0aGlzLnVzZXJHcm91cHM9aC5ncm91cHMsdGhpcy51c2VyR3JvdXBzQ291bnQ9aC5n'@;
put 'cm91cHMubGVuZ3RofSl9fXVzZXJMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMudXNlcnMsdGhpcy51c2VyU2VhcmNoLCJOQU1FIiksR24udXNlcm5hdi51c2VyU2VhcmNoPXRoaXMudXNlclNlYXJjaH11c2VyT25DbGljayhhKXt0aGlzLmxv'@;
put 'YWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5VUkkpOmQrIi8iK2VuY29kZVVSSShhLlVSSSkpLHRoaXMuaXNWaXlhP2Zl'@;
put 'dGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy91c2Vycy8iK2EuVVJJKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJz'@;
put 'ZShoKTt0aGlzLnVzZXJEYXRhPWYsdGhpcy5sb2FkaW5nPSExO2xldCB2PWYuaXRlbXMubWFwKFQ9Pih7R1JPVVBOQU1FOlQubmFtZSxVUkk6VC5pZH0pKTt0aGlzLnVzZXJHcm91cHM9dix0aGlzLnVzZXJHcm91cHNDb3VudD12Lmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10'@;
put 'aGlzLnVzZXJzLmZpbmQoVD0+VC5VUkk9PT1hLlVSSSkpfSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcmdyb3Vwc2J5bWVtYmVyIix7aXdhbnQ6W3t1cmk6YS5VUkl9XX0pLnRoZW4oZj0+e3N3aXRjaCh0aGlzLmxvYWRpbmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNl'@;
put 'IEN1LlkuU2FzOTp0aGlzLnVzZXJJbmZvPWYuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5lbWFpbHMsdGhpcy51c2VyRW1haWxzQ291bnQ9Zi5lbWFpbHMubGVuZ3RoLHRoaXMudXNlclJvbGVzPWYucm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLnJvbGVzLmxlbmd0aCx0aGlzLnVzZXJM'@;
put 'b2dpbnM9Zi5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9Zi5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgQ3UuWS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3Qgdj1mLmdyb3Vwc1swXTt0aGlz'@;
put 'LnVzZXJJbmZvPXtVUkk6di5JRCxOQU1FOnYuTkFNRSxESVNQTEFZTkFNRTp2Lk5BTUV9fX10aGlzLnVzZXJEYXRhPWYsdGhpcy51c2VyR3JvdXBzPWYuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuZ3JvdXBzLmxlbmd0aH0pfWdldFJvbGVVUkkoYSl7cmV0dXJuIGEuc3BsaXQoIk9N'@;
put 'U09CSjpJZGVudGl0eUdyb3VwIilbMV0uc2xpY2UoMSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShzdChjdSksc3QoeWEpLHN0KE1jKSxzdChxMSksc3QoenMpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3Rv'@;
put 'cnM6W1siYXBwLXVzZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3Ii'@;
put 'LCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgVXNl'@;
put 'cnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNo'@;
put 'YXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsInRhYmxlLWFjdGl2ZSIsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsaWNrIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwibGlzdC1wYWRkaW5nIl0sWyJzaGFwZSIsInVzZXIiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJd'@;
put 'LFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJ1c2VyLWRhdGEiXSxbMSwidGFibGUtY29udGFpbmVyIl0sWyJjbGFzcyIsInRhYmxlIHVzZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJ1c2VyLWluZm8i'@;
put 'XSxbMSwibGVmdCJdLFsxLCJ1c2VyLWluZm8tdGV4dCJdLFsxLCJ0YWJsZSIsInVzZXItdGFibGUiXSxbMSwid2lkdGgtNTAiXSxbMSwiIl0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwiY2xhc3MiLCIiLDMsInJvdXRlckxpbmsiLDQsIm5nSWYiXSxbInJvdXRlckxpbmtBY3RpdmUi'@;
put 'LCJhY3RpdmUiLDEsIiIsMywicm91dGVyTGluayJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ2UoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksYnQoMixqYXQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLFlhdCwyLDEsIm5nLWNvbnRh'@;
put 'aW5lciIsMyksYmUoKSgpLGdlKDQsImRpdiIsNCksYnQoNSx6YXQsMywwLCJkaXYiLDUpKDYsZmx0LDE5LDExLCJkaXYiLDYpLGJlKCkpLDImZCYmKHdlKDIpLFBlKCJuZ0lmIixoLnVzZXJzKSx3ZSgpLFBlKCJuZ0Zvck9mIixoLnVzZXJzKSx3ZSgyKSxQZSgibmdJZiIsaC5sb2FkaW5nKSx3'@;
put 'ZSgpLFBlKCJuZ0lmIixoLnVzZXJEYXRhJiYhaC5sb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbTHMscWksazAsS3ksVGwsY2Esb2EscmgsdWQsWmEsYWQseXBdLHN0eWxlczpbIi5zaWRlYmFyLWhlaWdodFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCV9LnVzZXItaW5mby10ZXh0W19u'@;
put 'Z2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0udXNlci1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyOjFweCBzb2xpZCAjYTdhN2E3O2JvcmRlci1yYWRpdXM6M3B4O2JveC1zaGFkb3c6MCAycHggNXB4'@;
put 'ICNkYWQ3ZDd9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlcjoxcHggc29saWQgI2E3YTdhNztib3Jk'@;
put 'ZXItcmFkaXVzOjNweDtib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnVzZXItZGF0YVtfbmdjb250ZW50'@;
put 'LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTt3aWR0aDoxMDAlfS51c2VyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoZWFkW19uZ2NvbnRl'@;
put 'bnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOiNkYWRhZGF9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JhY2tncm91bmQtY29sb3I6I2U2ZTZlNjtjdXJzb3I6cG9pbnRlcn0u'@;
put 'd2lkdGgtNTBbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwJX0ud2lkdGgtMzNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjMzJX0udGFibGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdy15OnNjcm9sbDttYXgtaGVpZ2h0OjUwMHB4fUBtZWRpYSBzY3JlZW4gYW5k'@;
put 'IChtYXgtd2lkdGg6IDc2OHB4KXsudXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KX1yZXR1cm4gY30pKCkscGx0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1k'@;
put 'LHRoaXMudml5YUFwaXM9e0FuYWx5dGljc19JbnNpZ2h0czp7aW5zaWdodHM6Ii9pbnNpZ2h0cyJ9LFZpc3VhbGlzYXRpb246e3JlcG9ydHM6Ii9yZXBvcnRzIixyZXBvcnRJbWFnZXM6Ii9yZXBvcnRJbWFnZXMiLHJlcG9ydFRyYW5zZm9ybXM6Ii9yZXBvcnRUcmFuc2Zvcm1zIix2aXN1YWxB'@;
put 'bmFseXRpY3M6Ii92aXN1YWxBbmFseXRpY3MifSxDb21wdXRlOntqb2JzOiIvam9iRGVmaW5pdGlvbnMiLGpvYkV4ZWN1dGlvbjoiL2pvYkV4ZWN1dGlvbiJ9LERlY2lzaW9uX01hbmFnZW1lbnQ6e21vZGVsTWFuYWdlbWVudDoiL21vZGVsTWFuYWdlbWVudCIsbW9kZWxSZXBvc2l0b3J5OiIv'@;
put 'bW9kZWxSZXBvc2l0b3J5Iixtb2RlbFB1Ymxpc2g6Ii9tb2RlbFB1Ymxpc2giLG1pY3JvYW5hbHl0aWNTY29yZToiL21pY3JvYW5hbHl0aWNTY29yZSIsZGF0YU1pbmluZzoiL2RhdGFNaW5pbmciLGJ1c2luZXNzUnVsZXM6Ii9idXNpbmVzc1J1bGVzIixyZWZlcmVuY2VEYXRhOiIvcmVmZXJl'@;
put 'bmNlRGF0YSIsdHJlYXRtZW50RGVmaW5pdGlvbnM6Ii90cmVhdG1lbnREZWZpbml0aW9ucyIsc3ViamVjdENvbnRhY3RzOiIvc3ViamVjdENvbnRhY3RzIixkZWNpc2lvbnNSdW50aW1lQnVpbGRlcjoiL2RlY2lzaW9uc1J1bnRpbWVCdWlsZGVyIn0sQ29yZV9TZXJ2aWNlczp7Zm9sZGVyczoi'@;
put 'L2ZvbGRlcnMiLGZpbGVzOiIvZmlsZXMiLGFubm90YXRpb25zOiIvYW5ub3RhdGlvbnMiLGF1dGhvcml6YXRpb246Ii9hdXRob3JpemF0aW9uIixyZWxhdGlvbnNoaXBzOiIvcmVsYXRpb25zaGlwcyIsU0FTTG9nb246Ii9TQVNMb2dvbiJ9LEF1dG9tYXRlZF9NYWNoaW5lX0xlYXJuaW5nOntt'@;
put 'bFBpcGVsaW5lQXV0b21hdGlvbjoiL21sUGlwZWxpbmVBdXRvbWF0aW9uIn0sT3RoZXI6e2lkZW50aXRpZXM6Ii9pZGVudGl0aWVzIn19LHRoaXMuc2VydmVyVXJsPSIiO2NvbnN0IGg9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnNlcnZlclVybD1o'@;
put 'Py5zZXJ2ZXJVcmx8fCIiLHRoaXMuZ2V0QnlDb2xsZWN0aW9uKCJqb2JzIikuc3Vic2NyaWJlKGY9Pntjb25zb2xlLmxvZygicmVzIixmKX0pfWdldEFsbENvbGxlY3Rpb25zKCl7cmV0dXJuIHRoaXMudml5YUFwaXN9Z2V0QnlVcmwoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5z'@;
put 'ZXJ2ZXJVcmx9JHthfWAse3dpdGhDcmVkZW50aWFsczohMH0pfWdldEJ5Q29sbGVjdGlvbihhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu'@;
put 'IG5ldyhkfHxjKShmcihIRiksZnIoaTcpKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX1yZXR1cm4gY30pKCk7Y29uc3QgbWx0PWM9Plsic2VnbWVudCIsY10sZ2x0PShjLGwpPT4oeyJzZWdtZW50'@;
put 'LW1haW4iOiEwLGV4cGFuZGFibGU6YyxleHBhbmRlZDpsfSk7ZnVuY3Rpb24gX2x0KGMsbCl7MSZjJiZKdCgwLCJkaXYiLDkpfWZ1bmN0aW9uIHZsdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsInNwYW4iLDEwKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1a'@;
put 'ZSgpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS5vblZhbHVlQ2xpY2soaCkpfSksemUoMSksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKS4kaW1wbGljaXQ7d2UoKSxwcihhLmRlc2NyaXB0aW9uKX19ZnVuY3Rpb24geWx0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwic2VjdGlv'@;
put 'biIsMTEpKDEsIm5neC1qc29uLXZpZXdlciIsMTIpLEh0KCJzZWdtZW50TGlua0NsaWNrZWQiLGZ1bmN0aW9uKGgpe3JldHVybiBTdChhKSx4dChaZSgyKS5vblNlZ21lbnRMaW5rQ2xpY2soaCkpfSksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdCxkPVplKCk7d2UoKSxQ'@;
put 'ZSgianNvbiIsYS52YWx1ZSkoImV4cGFuZGVkIixkLmV4cGFuZGVkKSgiZGVwdGgiLGQuZGVwdGgpKCJfY3VycmVudERlcHRoIixkLl9jdXJyZW50RGVwdGgrMSl9fWZ1bmN0aW9uIGJsdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsInNlY3Rpb24iLDIpKDEsInNlY3Rpb24iLDMp'@;
put 'LEh0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPVN0KGEpLiRpbXBsaWNpdDtyZXR1cm4geHQoWmUoKS50b2dnbGUoaCkpfSksYnQoMixfbHQsMSwwLCJkaXYiLDQpLGdlKDMsInNwYW4iLDUpLHplKDQpLGJlKCksZ2UoNSwic3BhbiIsNiksemUoNiwiOiAiKSxiZSgpLGJ0KDcsdmx0LDIs'@;
put 'MSwic3BhbiIsNyksYmUoKSxidCg4LHlsdCwyLDQsInNlY3Rpb24iLDgpLGJlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoKTtQZSgibmdDbGFzcyIsYWYoNixtbHQsInNlZ21lbnQtdHlwZS0iK2EudHlwZSkpLHdlKCksUGUoIm5nQ2xhc3MiLGxmKDgsZ2x0LGQuaXNFeHBh'@;
put 'bmRhYmxlKGEpLGEuZXhwYW5kZWQpKSx3ZSgpLFBlKCJuZ0lmIixkLmlzRXhwYW5kYWJsZShhKSksd2UoMikscHIoYS5rZXkpLHdlKDMpLFBlKCJuZ0lmIiwhYS5leHBhbmRlZHx8IWQuaXNFeHBhbmRhYmxlKGEpKSx3ZSgpLFBlKCJuZ0lmIixhLmV4cGFuZGVkJiZkLmlzRXhwYW5kYWJsZShh'@;
put 'KSl9fWxldCB3bHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZXhwYW5kZWQ9ITAsdGhpcy5kZXB0aD0tMSx0aGlzLl9jdXJyZW50RGVwdGg9MCx0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZD1uZXcgSXIsdGhpcy5zZWdtZW50cz1bXX1uZ09uQ2hhbmdlcygpe3RoaXMuc2VnbWVu'@;
put 'dHM9W10sdGhpcy5qc29uPXRoaXMuZGVjeWNsZSh0aGlzLmpzb24pLCJvYmplY3QiPT10eXBlb2YgdGhpcy5qc29uP09iamVjdC5rZXlzKHRoaXMuanNvbikuZm9yRWFjaChhPT57dGhpcy5zZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShhLHRoaXMuanNvblthXSkpfSk6dGhpcy5z'@;
put 'ZWdtZW50cy5wdXNoKHRoaXMucGFyc2VLZXlWYWx1ZShgKCR7dHlwZW9mIHRoaXMuanNvbn0pYCx0aGlzLmpzb24pKX1pc0V4cGFuZGFibGUoYSl7cmV0dXJuIm9iamVjdCI9PT1hLnR5cGV8fCJhcnJheSI9PT1hLnR5cGV9dG9nZ2xlKGEpe3RoaXMuaXNFeHBhbmRhYmxlKGEpJiYoYS5leHBh'@;
put 'bmRlZD0hYS5leHBhbmRlZCl9b25WYWx1ZUNsaWNrKGEpeyJsaW5rIj09PWEudHlwZSYmdGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhLnZhbHVlKX1vblNlZ21lbnRMaW5rQ2xpY2soYSl7dGhpcy5zZWdtZW50TGlua0NsaWNrZWQuZW1pdChhKX1wYXJzZUtleVZhbHVlKGEsZCl7Y29u'@;
put 'c3QgaD17a2V5OmEsdmFsdWU6ZCx0eXBlOnZvaWQgMCxkZXNjcmlwdGlvbjoiIitkLGV4cGFuZGVkOnRoaXMuaXNFeHBhbmRlZCgpfTtzd2l0Y2godHlwZW9mIGgudmFsdWUpe2Nhc2UibnVtYmVyIjpoLnR5cGU9Im51bWJlciI7YnJlYWs7Y2FzZSJib29sZWFuIjpoLnR5cGU9ImJvb2xlYW4i'@;
put 'O2JyZWFrO2Nhc2UiZnVuY3Rpb24iOmgudHlwZT0iZnVuY3Rpb24iO2JyZWFrO2Nhc2Uic3RyaW5nIjppZih0aGlzLmlzTGluayhoLnZhbHVlKSl7aC50eXBlPSJsaW5rIjticmVha31oLnR5cGU9InN0cmluZyIsaC5kZXNjcmlwdGlvbj0nIicraC52YWx1ZSsnIic7YnJlYWs7Y2FzZSJ1bmRl'@;
put 'ZmluZWQiOmgudHlwZT0idW5kZWZpbmVkIixoLmRlc2NyaXB0aW9uPSJ1bmRlZmluZWQiO2JyZWFrO2Nhc2Uib2JqZWN0IjpudWxsPT09aC52YWx1ZT8oaC50eXBlPSJudWxsIixoLmRlc2NyaXB0aW9uPSJudWxsIik6QXJyYXkuaXNBcnJheShoLnZhbHVlKT8oaC50eXBlPSJhcnJheSIsaC5k'@;
put 'ZXNjcmlwdGlvbj0iQXJyYXlbIitoLnZhbHVlLmxlbmd0aCsiXSAiK0pTT04uc3RyaW5naWZ5KGgudmFsdWUpKTpoLnZhbHVlIGluc3RhbmNlb2YgRGF0ZT9oLnR5cGU9ImRhdGUiOihoLnR5cGU9Im9iamVjdCIsaC5kZXNjcmlwdGlvbj0iT2JqZWN0ICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1'@;
put 'ZSkpfXJldHVybiBofWlzTGluayhhKXtyZXR1cm4iaHR0cHM6Ly8iPT09YS5zdWJzdHJpbmcoMCw4KXx8Imh0dHA6Ly8iPT09YS5zdWJzdHJpbmcoMCw3KXx8Ii8iPT09YVswXX1pc0V4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQmJiEodGhpcy5kZXB0aD4tMSYmdGhpcy5fY3VycmVu'@;
put 'dERlcHRoPj10aGlzLmRlcHRoKX1kZWN5Y2xlKGEpe2NvbnN0IGQ9bmV3IFdlYWtNYXA7cmV0dXJuIGZ1bmN0aW9uIGgoZix2KXtsZXQgVCxZO3JldHVybiJvYmplY3QiIT10eXBlb2YgZnx8bnVsbD09PWZ8fGYgaW5zdGFuY2VvZiBCb29sZWFufHxmIGluc3RhbmNlb2YgRGF0ZXx8ZiBpbnN0'@;
put 'YW5jZW9mIE51bWJlcnx8ZiBpbnN0YW5jZW9mIFJlZ0V4cHx8ZiBpbnN0YW5jZW9mIFN0cmluZz9mOihUPWQuZ2V0KGYpLHZvaWQgMCE9PVQ/eyRyZWY6VH06KGQuc2V0KGYsdiksQXJyYXkuaXNBcnJheShmKT8oWT1bXSxmLmZvckVhY2goZnVuY3Rpb24ocmUsZmUpe1lbZmVdPWgocmUsdisi'@;
put 'WyIrZmUrIl0iKX0pKTooWT17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKHJlKXtZW3JlXT1oKGZbcmVdLHYrIlsiK0pTT04uc3RyaW5naWZ5KHJlKSsiXSIpfSkpLFkpKX0oYSwiJCIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s'@;
put 'Yy5cdTAyNzVjbXA9a3Ioe3R5cGU6YyxzZWxlY3RvcnM6W1sibmd4LWpzb24tdmlld2VyIl1dLGlucHV0czp7anNvbjoianNvbiIsZXhwYW5kZWQ6ImV4cGFuZGVkIixkZXB0aDoiZGVwdGgiLF9jdXJyZW50RGVwdGg6Il9jdXJyZW50RGVwdGgifSxvdXRwdXRzOntzZWdtZW50TGlua0NsaWNr'@;
put 'ZWQ6InNlZ21lbnRMaW5rQ2xpY2tlZCJ9LGZlYXR1cmVzOltCYV0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbMSwibmd4LWpzb24tdmlld2VyIl0sWzMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ0NsYXNzIl0sWzMsImNsaWNrIiwibmdDbGFzcyJdLFsiY2xhc3MiLCJ0'@;
put 'b2dnbGVyIiw0LCJuZ0lmIl0sWzEsInNlZ21lbnQta2V5Il0sWzEsInNlZ21lbnQtc2VwYXJhdG9yIl0sWyJjbGFzcyIsInNlZ21lbnQtdmFsdWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzEsInRvZ2dsZXIiXSxbMSwic2VnbWVudC12YWx1'@;
put 'ZSIsMywiY2xpY2siXSxbMSwiY2hpbGRyZW4iXSxbMywic2VnbWVudExpbmtDbGlja2VkIiwianNvbiIsImV4cGFuZGVkIiwiZGVwdGgiLCJfY3VycmVudERlcHRoIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZ2UoMCwic2VjdGlvbiIsMCksYnQoMSxibHQsOSwxMSwic2VjdGlv'@;
put 'biIsMSksYmUoKSksMiZhJiYod2UoKSxQZSgibmdGb3JPZiIsZC5zZWdtZW50cykpfSxkZXBlbmRlbmNpZXM6W1VjLExzLHFpLGNdLHN0eWxlczpbJ0BjaGFyc2V0ICJVVEYtOCI7Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV17Zm9udC1mYW1pbHk6dmFyKC0tbmd4LWpzb24t'@;
put 'Zm9udC1mYW1pbHksIG1vbm9zcGFjZSk7Zm9udC1zaXplOnZhcigtLW5neC1qc29uLWZvbnQtc2l6ZSwgMWVtKTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdt'@;
put 'ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweDttYXJnaW46MXB4IDFweCAxcHggMTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3dvcmQt'@;
put 'd3JhcDpicmVhay13b3JkfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7'@;
put 'bWFyZ2luLWxlZnQ6LTE0cHg7bWFyZ2luLXRvcDozcHg7Zm9udC1zaXplOi44ZW07bGluZS1oZWlnaHQ6MS4yZW07dmVydGljYWwtYWxpZ246bWlkZGxlO2NvbG9yOnZhcigtLW5neC1qc29uLXRvZ2dsZXIsICM3ODc4NzgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAg'@;
put 'LnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiXFwyNWJhIjt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMXMgZWFz'@;
put 'ZS1pbn0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1rZXks'@;
put 'ICM0RTE4N0MpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5n'@;
put 'eC1qc29uLXNlcGFyYXRvciwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xv'@;
put 'cjp2YXIoLS1uZ3gtanNvbi12YWx1ZSwgIzAwMCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hpbGRyZW5bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjEycHh9Lm5neC1qc29uLXZpZXdlcltfbmdj'@;
put 'b250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXN0cmluZ1tfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1zdHJpbmcsICNGRjZCNkIp'@;
put 'fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udW1iZXJbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4'@;
put 'LWpzb24tbnVtYmVyLCAjMDA5Njg4KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYm9vbGVhbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1ib29sZWFuLCAjQjkzOEE0KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZGF0ZVtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdt'@;
put 'ZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1kYXRlLCAjMDU2NjhEKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtYXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250'@;
put 'ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tYXJyYXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1vYmplY3RbX25nY29udGVudC0lQ09NUCVdID4gLnNl'@;
put 'Z21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tb2JqZWN0LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtZnVuY3Rpb25bX25n'@;
put 'Y29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tZnVuY3Rpb24sICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNl'@;
put 'Z21lbnQtdHlwZS1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWxpbmssICM5QjU5QjYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLW51bGwsICNmZmYpfS5uZ3gtanNv'@;
put 'bi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS11bmRlZmluZWRbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24t'@;
put 'dW5kZWZpbmVkLCAjZmZmKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtbnVsbFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXti'@;
put 'YWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLW51bGwtYmcsIHJlZCl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5z'@;
put 'ZWdtZW50LWtleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1t'@;
put 'YWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW5neC1qc29uLXVuZGVmaW5lZC1rZXksICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1s'@;
put 'aW5rW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7Y3Vyc29yOnBvaW50ZXJ9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVD'@;
put 'T01QJV0gICAuc2VnbWVudC10eXBlLW9iamVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWFycmF5W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5z'@;
put 'ZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRlZFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV06YWZ0ZXJ7dHJhbnNmb3JtOnJv'@;
put 'dGF0ZSg5MGRlZyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdjb250ZW50LSVDT01QJV0sIC5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGFibGVbX25nY29udGVudC0lQ09NUCVdID4gLnRvZ2dsZXJbX25n'@;
put 'Y29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSddfSksY30pKCksTWx0PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1zaSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9X2koe2ltcG9ydHM6W21vXX0p'@;
put 'LGN9KSgpLENsdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtpZighYS5pbmNsdWRlcygiLyIpKXJldHVybiBhO2xldCBkPSIiO2NvbnN0IGg9YS5zcGxpdCgiLyIpO2ZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWlmKCIiIT09aFtmXSl7Y29uc3Qgdj1oW2ZdO2QrPSIvIit2LGhbZl09'@;
put 'YDxhIGhyZWY9JHtkfT4ke3Z9PC9hPmB9cmV0dXJuIGguam9pbigiLyIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cGlwZT1Ecyh7bmFtZToibGlua2luemUiLHR5cGU6YyxwdXJlOiEwfSl9cmV0dXJu'@;
put 'IGN9KSgpLFNsdD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSxudWxsLDIpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cGlwZT1Ecyh7bmFtZToicHJldHR5'@;
put 'anNvbiIsdHlwZTpjLHB1cmU6ITB9KX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geGx0KGMsbCl7aWYoMSZjJiYoZ2UoMCwib3B0aW9uIiwyNCksemUoMSksYmUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2s0KCJ2YWx1ZSIsYS52YWx1ZSksd2UoKSx4cigiICIsYS5rZXksIiAiKX19ZnVu'@;
put 'Y3Rpb24ga2x0KGMsbCl7aWYoMSZjJiYoZ2UoMCwib3B0Z3JvdXAiLDIyKSxidCgxLHhsdCwyLDIsIm9wdGlvbiIsMjMpLFBhKDIsImtleXZhbHVlIiksYmUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9WmUoKTtQZSgibGFiZWwiLGEua2V5KSx3ZSgpLFBlKCJuZ0Zvck9mIix3Yygy'@;
put 'LDIsZC5jb2xsZWN0aW9uc1thLmtleV0pKX19ZnVuY3Rpb24gRWx0KGMsbCl7MSZjJiYoZ2UoMCwicCIsMjUpLHplKDEsIiBTZWxlY3QgY29sbGVjdGlvbiB0byBzdGFydCAiKSxiZSgpKX1mdW5jdGlvbiBUbHQoYyxsKXsxJmMmJkp0KDAsImNsci1zcGlubmVyIiwyNil9ZnVuY3Rpb24gRGx0'@;
put 'KGMsbCl7MSZjJiZKdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIEFsdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci1pY29uIiwzMyksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMik7cmV0dXJuIGgubGlua3NTZWFyY2g9IiIseHQoaC5saW5r'@;
put 'c0xpc3RPbkZpbHRlcigpKX0pLGJlKCl9fWZ1bmN0aW9uIExsdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMjksMCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUo'@;
put 'KTtyZXR1cm4gcXIoZi5saW5rc1NlYXJjaCxoKXx8KGYubGlua3NTZWFyY2g9aCkseHQoaCl9KSxIdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkubGlua3NMaXN0T25GaWx0ZXIoKSl9KSxiZSgpLGJ0KDQsRGx0LDEsMCwiY2xyLWljb24iLDMwKSg1LEFsdCwxLDAs'@;
put 'ImNsci1pY29uIiwzMSksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1YaSgzKSxkPVplKCk7d2UoMiksV3IoIm5nTW9kZWwiLGQubGlua3NTZWFyY2gpLHdlKDIpLFBlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSx3ZSgpLFBlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gSWx0'@;
put 'KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEh0KCJjbGljayIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLiRpbXBsaWNpdCx2PVplKCk7cmV0dXJuIHh0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50TGlua3MpKX0pLEdy'@;
put 'KCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7U3QoYSk7Y29uc3QgZj1aZSgpLiRpbXBsaWNpdDtyZXR1cm4gcXIoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCkseHQoaCl9KSxnZSgxLCJwIiwzNiksSHQoImNsaWNrIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoKS4k'@;
put 'aW1wbGljaXQ7cmV0dXJuIHh0KFplKCkubGlua09uQ2xpY2soaCkpfSksSnQoMiwiY2xyLWljb24iLDM3KSx6ZSgzKSxiZSgpKCl9aWYoMiZjKXtjb25zdCBhPVplKCkuJGltcGxpY2l0O1dyKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksUGUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFi'@;
put 'bGVzJiYhYS50YWJsZXMpLHdlKDMpLHQwKCIgIixhLm1ldGhvZCwiICIsYS5yZWwsIiAiKX19ZnVuY3Rpb24gUmx0KGMsbCl7aWYoMSZjJiYocmkoMCksYnQoMSxJbHQsNCw0LCJjbHItdHJlZS1ub2RlIiwzNCksaWkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYi'@;
put 'LCFhLmhpZGRlbil9fWZ1bmN0aW9uIE9sdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDMyKX1mdW5jdGlvbiBQbHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMzMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiBo'@;
put 'Lml0ZW1zU2VhcmNoPSIiLHh0KGguaXRlbXNMaXN0T25GaWx0ZXIoKSl9KSxiZSgpfX1mdW5jdGlvbiBGbHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItdHJlZS1ub2RlIiwyNykoMSwiZGl2IiwyOCkoMiwiaW5wdXQiLDM4LDEpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5j'@;
put 'dGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYuaXRlbXNTZWFyY2gsaCl8fChmLml0ZW1zU2VhcmNoPWgpLHh0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLml0ZW1zTGlzdE9uRmlsdGVyKCkpfSksYmUoKSxidCg0LE9sdCwxLDAs'@;
put 'ImNsci1pY29uIiwzMCkoNSxQbHQsMSwwLCJjbHItaWNvbiIsMzEpLGJlKCkoKX1pZigyJmMpe2NvbnN0IGE9WGkoMyksZD1aZSgpO3dlKDIpLFdyKCJuZ01vZGVsIixkLml0ZW1zU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1'@;
put 'ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhsdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDM1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiB4dCh2LnRyZWVOb2RlQ2xpY2tlZCho'@;
put 'LGYsdi5lbmRwb2ludEl0ZW1zKSl9KSxHcigiY2xyRXhwYW5kZWRDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHFyKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLHh0KGgpfSksZ2UoMSwicCIsMzYpLEh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtTdChhKTtjb25zdCBoPVplKCkuJGltcGxpY2l0O3JldHVybiB4dChaZSgpLml0ZW1PbkNsaWNrKGgpKX0pLEp0KDIsImNsci1pY29uIiwzNyksemUoMyksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1aZSgpLiRpbXBsaWNpdDtXcigiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLFBlKCJj'@;
put 'bHJMb2FkaW5nIiwhIWEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSx3ZSgzKSx4cigiICIsYS5uYW1lfHxhLmlkLCIgIil9fWZ1bmN0aW9uIE5sdChjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsSGx0LDQsMywiY2xyLXRyZWUtbm9kZSIsMzQpLGlpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBs'@;
put 'aWNpdDt3ZSgpLFBlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBWbHQoYyxsKXsxJmMmJkp0KDAsImNsci1zcGlubmVyIiwzOSl9ZnVuY3Rpb24gamx0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwibmd4LWpzb24tdmlld2VyIiw0OSksSHQoInNlZ21lbnRMaW5rQ2xpY2tl'@;
put 'ZCIsZnVuY3Rpb24oaCl7cmV0dXJuIFN0KGEpLHh0KFplKDMpLm9uSnNvbkxpbmtDbGljayhoKSl9KSxiZSgpfTImYyYmUGUoImpzb24iLFplKDMpLmVuZHBvaW50SnNvbikoImV4cGFuZGVkIiwhMSl9ZnVuY3Rpb24gQmx0KGMsbCl7aWYoMSZjJiYocmkoMCksemUoMSksUGEoMiwicHJldHR5'@;
put 'anNvbiIpLGlpKCkpLDImYyl7Y29uc3QgYT1aZSgzKTt3ZSgpLHhyKCJcbiAgICAgICAgICAgICIsd2MoMiwxLGEuZW5kcG9pbnRKc29uKSwiXG4gICAgICAgICAgIil9fWZ1bmN0aW9uIFlsdChjLGwpe2lmKDEmYyYmKHJpKDApLHplKDEsIlxuICAgICAgICAgICIpLGJ0KDIsamx0LDEsMiwi'@;
put 'bmd4LWpzb24tdmlld2VyIiw0OCksemUoMywiXG4gICAgICAgICAgIiksYnQoNCxCbHQsMywzLCJuZy1jb250YWluZXIiLDIxKSx6ZSg1LCJcbiAgICAgICAgIiksaWkoKSksMiZjKXtjb25zdCBhPVplKDIpO3dlKDIpLFBlKCJuZ0lmIiwhYS5yYXdKc29uKSx3ZSgyKSxQZSgibmdJZiIsYS5y'@;
put 'YXdKc29uKX19ZnVuY3Rpb24gemx0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksZ2UoMSwiZGl2Iiw0MCkoMiwic3BhbiIsNDEpLHplKDMsIiBHRVQgIiksZ2UoNCwicCIsNDIpLFBhKDUsImxpbmtpbnplIiksSHQoImNsaWNrIixmdW5jdGlvbihoKXtyZXR1cm4gU3QoYSkseHQo'@;
put 'WmUoKS5vbkJyZWFkY3Vtc0NsaWNrKGgpKX0pLGJlKCksZ2UoNiwiYnV0dG9uIiwxNiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLmNvcHlCcmVhZGNydW1zKCkpfSksSnQoNywiY2xyLWljb24iLDE3KSxiZSgpKCksZ2UoOCwiZGl2Iiw0MykoOSwiY2xyLWlu'@;
put 'cHV0LWNvbnRhaW5lciIsMTQpKDEwLCJsYWJlbCIpLHplKDExLCJTdGFydCIpLGJlKCksZ2UoMTIsImlucHV0Iiw0NCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gcXIoZi5lbmRwb2ludC5zdGFydCxoKXx8KGYuZW5kcG9pbnQuc3Rh'@;
put 'cnQ9aCkseHQoaCl9KSxiZSgpKCksZ2UoMTMsImNsci1pbnB1dC1jb250YWluZXIiLDE0KSgxNCwibGFiZWwiKSx6ZSgxNSwiTGltaXQiKSxiZSgpLGdlKDE2LCJpbnB1dCIsNDQpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKCk7cmV0dXJuIHFyKGYu'@;
put 'ZW5kcG9pbnQubGltaXQsaCl8fChmLmVuZHBvaW50LmxpbWl0PWgpLHh0KGgpfSksYmUoKSgpLGdlKDE3LCJidXR0b24iLDQ1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKCkuYXBwbHlRdWVyeVBhcmFtcygpKX0pLEp0KDE4LCJjbHItaWNvbiIsNDYpLGJlKCko'@;
put 'KSgpLGdlKDE5LCJwcmUiLDQ3KSx6ZSgyMCwiICAgICAgICAiKSxidCgyMSxZbHQsNiwyLCJuZy1jb250YWluZXIiLDIxKSx6ZSgyMiwiXG4gICAgICAiKSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKCk7d2UoNCksUGUoImlubmVySFRNTCIsd2MoNSw3LGEuZW5kcG9pbnQudXJsKSxF'@;
put 'Myksd2UoOCksV3IoIm5nTW9kZWwiLGEuZW5kcG9pbnQuc3RhcnQpLFBlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksd2UoNCksV3IoIm5nTW9kZWwiLGEuZW5kcG9pbnQubGltaXQpLFBlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCksd2UoKSxQ'@;
put 'ZSgiZGlzYWJsZWQiLHZvaWQgMD09PWEuZW5kcG9pbnQubGltaXQmJnZvaWQgMD09PWEuZW5kcG9pbnQuc3RhcnQpLHdlKDQpLFBlKCJuZ0lmIixhLmVuZHBvaW50SnNvbil9fWxldCBVbHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmhlbHBlclNlcnZpY2U9YSx0'@;
put 'aGlzLnNhc1ZpeWFTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLmNvbGxlY3Rpb25zPXt9LHRoaXMuY29sbGVjdGlvbj0iIix0aGlzLmVuZHBvaW50TGlua3M9W10sdGhpcy5lbmRwb2ludEl0ZW1zPVtdLHRoaXMuZW5kcG9pbnQ9e3VybDoiIixz'@;
put 'dGFydDotMSxsaW1pdDotMX0sdGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMSx0aGlzLnJhd0pzb249ITEsdGhpcy5saW5rc1NlYXJjaD0iIix0aGlzLml0ZW1zU2VhcmNoPSIiLHRoaXMuc2FzanNDb25maWc9bmV3IGVkLlNBU2pzQ29uZmlnfW5nT25J'@;
put 'bml0KCl7dGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmNvbGxlY3Rpb25zPXRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QWxsQ29sbGVjdGlvbnMoKX1saW5rc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0'@;
put 'ZXIodGhpcy5lbmRwb2ludExpbmtzLHRoaXMubGlua3NTZWFyY2gsInJlbCIpLEduLnZpeWFBcGkubGlua3NzU2VhcmNoPXRoaXMubGlua3NTZWFyY2h9aXRlbXNMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMuZW5kcG9pbnRJdGVtcyx0aGlz'@;
put 'Lml0ZW1zU2VhcmNoLCJuYW1lIiksR24udml5YUFwaS5pdGVtc1NlYXJjaD10aGlzLml0ZW1zU2VhcmNofWxpbmtPbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmhyZWYpfWl0ZW1PbkNsaWNrKGEpe3RoaXMubG9hZFVybChhLmxpbmtzWzBdLmhyZWYpfXRyZWVOb2RlQ2xpY2tlZChhLGQsaCl7'@;
put 'IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXVwZGF0ZVNlbGVjdGVk'@;
put 'Q29sbGVjdGlvbigpe0duLnZpeWFBcGkuc2VsZWN0ZWRDb2xsZWN0aW9uPXRoaXMuY29sbGVjdGlvbix0aGlzLmVuZHBvaW50LnVybD10aGlzLmNvbGxlY3Rpb24sdGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMCx0aGlzLnNhc1ZpeWFTZXJ2aWNlLmdldEJ5Q29sbGVjdGlvbih0aGlzLmNvbGxl'@;
put 'Y3Rpb24pLnN1YnNjcmliZShhPT57dGhpcy5lbmRwb2ludExpbmtzPWEubGlua3MsdGhpcy5lbmRwb2ludEl0ZW1zPWEuaXRlbXM/YS5pdGVtczpbXSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMuZW5kcG9pbnRKc29uPWEsdGhpcy5lbmRwb2ludC5zdGFydD1hLnN0YXJ0LHRoaXMu'@;
put 'ZW5kcG9pbnQubGltaXQ9YS5saW1pdH0sYT0+e3RoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITE7bGV0IGQ9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcgcmVxdWVzdCI7YS5tZXNzYWdlJiYoZD1hLm1lc3NhZ2UpLGEuZXJyb3ImJihhLmVycm9yLm1lc3NhZ2UmJihkPWEuZXJyb3IubWVz'@;
put 'c2FnZSksYS5lcnJvci5yZW1lZGlhdGlvbiYmKGQ9YCR7ZH1cbiR7YS5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCxkLG51bGwsIkhUVFAgRXJyb3IiKX0pfW9uSnNvbkxpbmtDbGljayhhKXt0aGlzLmxvYWRVcmwoYSl9b25Kc29u'@;
put 'Q2xpY2soYSl7aWYoYS5wcmV2ZW50RGVmYXVsdCgpLCJBIj09PWEuc3JjRWxlbWVudC50YWdOYW1lKXtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9fW9uQnJlYWRjdW1zQ2xpY2soYSl7aWYoYS5wcmV2ZW50RGVm'@;
put 'YXVsdCgpLCFhLnNyY0VsZW1lbnQuaHJlZilyZXR1cm47Y29uc3QgZD1hLnNyY0VsZW1lbnQuaHJlZi5zcGxpdChhLnNyY0VsZW1lbnQuaG9zdClbMV07dGhpcy5sb2FkVXJsKGQpfWNvcHlKc29uKCl7dGhpcy5lbmRwb2ludEpzb24mJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpT'@;
put 'T04uc3RyaW5naWZ5KHRoaXMuZW5kcG9pbnRKc29uLG51bGwsMikpfWNvcHlCcmVhZGNydW1zKCl7dGhpcy5lbmRwb2ludCYmdGhpcy5lbmRwb2ludC51cmwmJm5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRoaXMuZW5kcG9pbnQudXJsKX1hcHBseVF1ZXJ5UGFyYW1zKCl7Y29uc3Qg'@;
put 'YT10aGlzLmVuZHBvaW50LnN0YXJ0LGQ9dGhpcy5lbmRwb2ludC5saW1pdCxoPWA/JHt2b2lkIDAhPT1hPyJzdGFydD0iK2E6IiJ9JHt2b2lkIDAhPT1kPyImbGltaXQ9IitkOiIifWAsZj1gJHt0aGlzLmVuZHBvaW50LnVybC5zcGxpdCgiPyIpWzBdfSR7aH1gO3RoaXMubG9hZFVybChmKX1s'@;
put 'b2FkVXJsKGEpe3RoaXMuZW5kcG9pbnRMb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0QnlVcmwoYSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZHBvaW50TGlua3M9ZC5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9ZC5pdGVtcz9kLml0ZW1zOltdLHRoaXMuZW5kcG9pbnRKc29uPWQs'@;
put 'dGhpcy5lbmRwb2ludExvYWRpbmc9ITEsdGhpcy5lbmRwb2ludC51cmw9YSx0aGlzLmVuZHBvaW50LnN0YXJ0PWQuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1kLmxpbWl0fSxkPT57dGhpcy5lbmRwb2ludExvYWRpbmc9ITE7bGV0IGg9IkVycm9yIG9jY3VycmVkIHdoaWxlIHNlbmRpbmcg'@;
put 'cmVxdWVzdCI7ZC5tZXNzYWdlJiYoaD1kLm1lc3NhZ2UpLGQuZXJyb3ImJihkLmVycm9yLm1lc3NhZ2UmJihoPWQuZXJyb3IubWVzc2FnZSksZC5lcnJvci5yZW1lZGlhdGlvbiYmKGg9YCR7aH1cbiR7ZC5lcnJvci5yZW1lZGlhdGlvbn1gKSksdGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0'@;
put 'TW9kYWwobnVsbCxoLG51bGwsIkhUVFAgRXJyb3IiKX0pfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yykoc3QoY3UpLHN0KHBsdCksc3QoeWEpLHN0KEdsKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltb'@;
put 'ImFwcC12aXlhLWFwaS1leHBsb3JlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MzMsdmFyczoxMyxjb25zdHM6W1sic2VhcmNoTGlua3NUcmVlSW5wdXQiLCIiXSxbInNlYXJjaEl0ZW1zVHJlZUlucHV0IiwiIl0sWzEsImFwaS1jb2xsZWN0aW9uLWRyb3Bk'@;
put 'b3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImxhYmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiY2xy'@;
put 'LWp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJoLTEwMCIsInAtMTAiLCJkLWZsZXgiLCJjbHIt'@;
put 'ZmxleC1jb2x1bW4iXSxbMSwidy0xMDAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzaXRpb24tcmVsYXRpdmUiXSxbMSwianNvbi10b2dnbGUiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsIm0t'@;
put 'MCJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiXSxb'@;
put 'ImNsclNtYWxsIiwiIiw0LCJuZ0lmIl0sWzEsInctMTAwIiwibGlnaHQiXSxbNCwibmdJZiJdLFszLCJsYWJlbCJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsInZhbHVlIl0sWzEsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gt'@;
put 'bm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGxpbmtzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJj'@;
put 'aCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0s'@;
put 'WzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIGl0ZW1zIiwibmFtZSIs'@;
put 'ImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJjbHJTbWFsbCIsIiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImQtZmxleCIsImNs'@;
put 'ci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJlbmRwb2ludC1icmVhZGNydW1zIiwzLCJjbGljayIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwicXVlcnktcGFyYW1zIl0sWyJjbHJJbnB1dCIsIiIsInR5cGUiLCJudW1i'@;
put 'ZXIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsInBsYXkiXSxbMSwianNvbi1hcmVhIl0sWyJjbGFzcyIsImQtYmxvY2siLDMs'@;
put 'Impzb24iLCJleHBhbmRlZCIsInNlZ21lbnRMaW5rQ2xpY2tlZCIsNCwibmdJZiJdLFsxLCJkLWJsb2NrIiwzLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihnZSgwLCJhcHAtc2lkZWJhciIpKDEsImRpdiIsMiko'@;
put 'MiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSgzLCJsYWJlbCIpLHplKDQsIkFQSSBDb2xsZWN0aW9uIiksYmUoKSxnZSg1LCJzZWxlY3QiLDMpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gcXIoaC5jb2xsZWN0aW9uLHYpfHwoaC5jb2xsZWN0aW9uPXYpLHZ9KSxIdCgi'@;
put 'Y2hhbmdlIixmdW5jdGlvbigpe3JldHVybiBoLnVwZGF0ZVNlbGVjdGVkQ29sbGVjdGlvbigpfSksYnQoNixrbHQsMyw0LCJvcHRncm91cCIsNCksUGEoNywia2V5dmFsdWUiKSxiZSgpKCkoKSxidCg4LEVsdCwyLDAsInAiLDUpLGdlKDksImRpdiIsNiksYnQoMTAsVGx0LDEsMCwiY2xyLXNw'@;
put 'aW5uZXIiLDcpLGJlKCksZ2UoMTEsImNsci10cmVlIiksYnQoMTIsTGx0LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTMsUmx0LDIsMSwibmctY29udGFpbmVyIiw5KSxiZSgpLGdlKDE0LCJjbHItdHJlZSIpLGJ0KDE1LEZsdCw2LDMsImNsci10cmVlLW5vZGUiLDgpKDE2LE5sdCwyLDEsIm5n'@;
put 'LWNvbnRhaW5lciIsOSksYmUoKSgpLGdlKDE3LCJkaXYiLDEwKSgxOCwiZGl2IiwxMSkoMTksImRpdiIsMTIpKDIwLCJkaXYiLDEzKSgyMSwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDE0KSgyMiwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjMsImlucHV0IiwxNSksR3IoIm5nTW9kZWxDaGFuZ2Ui'@;
put 'LGZ1bmN0aW9uKHYpe3JldHVybiBxcihoLnJhd0pzb24sdil8fChoLnJhd0pzb249diksdn0pLGJlKCksZ2UoMjQsImxhYmVsIiksemUoMjUsIlJBVyBKc29uIiksYmUoKSgpKCksZ2UoMjYsImJ1dHRvbiIsMTYpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5jb3B5SnNvbigpfSks'@;
put 'SnQoMjcsImNsci1pY29uIiwxNyksYmUoKSgpLGdlKDI4LCJoNCIsMTgpLHplKDI5LCIgQVBJIEV4cGxvcmVyICIpLGJ0KDMwLFZsdCwxLDAsImNsci1zcGlubmVyIiwxOSksYmUoKSgpLEp0KDMxLCJociIsMjApLGJ0KDMyLHpsdCwyMyw5LCJuZy1jb250YWluZXIiLDIxKSxiZSgpKCkpLDIm'@;
put 'ZCYmKHdlKDUpLFdyKCJuZ01vZGVsIixoLmNvbGxlY3Rpb24pLHdlKCksUGUoIm5nRm9yT2YiLHdjKDcsMTEsaC5jb2xsZWN0aW9ucykpLHdlKDIpLFBlKCJuZ0lmIixoLmVuZHBvaW50TGlua3MubGVuZ3RoPDEmJiFoLmNvbGxlY3Rpb25Mb2FkaW5nKSx3ZSgyKSxQZSgibmdJZiIsaC5jb2xs'@;
put 'ZWN0aW9uTG9hZGluZyksd2UoMiksUGUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg+MCksd2UoKSxQZSgibmdGb3JPZiIsaC5lbmRwb2ludExpbmtzKSx3ZSgyKSxQZSgibmdJZiIsaC5lbmRwb2ludEl0ZW1zLmxlbmd0aD4wKSx3ZSgpLFBlKCJuZ0Zvck9mIixoLmVuZHBvaW50SXRl'@;
put 'bXMpLHdlKDcpLFdyKCJuZ01vZGVsIixoLnJhd0pzb24pLHdlKDcpLFBlKCJuZ0lmIixoLmVuZHBvaW50TG9hZGluZyksd2UoMiksUGUoIm5nSWYiLGguY29sbGVjdGlvbi5sZW5ndGg+MCkpfSxkZXBlbmRlbmNpZXM6W0xzLHFpLG5kLHJkLFRsLHJFLGYxLHRkLGNhLG9hLHJoLHVkLFphLHIw'@;
put 'LFhzLHYxLE83LF8xLGFkLHdOLHo3LFk3LG5oLHlwLHdsdCxwayxDbHQsU2x0XSxzdHlsZXM6WyIuYXBpLWNvbGxlY3Rpb24tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5qc29uLWFyZWFb'@;
put 'X25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtvdmVyZmxvdzphdXRvfS5qc29uLWFyZWFbX25nY29udGVudC0lQ09NUCVdICAgICBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5qc29uLWFyZWFbX25nY29u'@;
put 'dGVudC0lQ09NUCVdICAgID5uZ3gtanNvbi12aWV3ZXJ7aGVpZ2h0OjEwMCV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcj4ubmd4LWpzb24tdmlld2Vye292ZXJmbG93OmF1dG99Lmpzb24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlv'@;
put 'bjphYnNvbHV0ZTtsZWZ0OjEwcHg7bWFyZ2luOjB9LmVuZHBvaW50LWJyZWFkY3J1bXNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowIDAgMCAxMHB4fS5xdWVyeS1wYXJhbXNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjcwcHh9Il19KX1y'@;
put 'ZXR1cm4gY30pKCk7Y29uc3QgWmx0PW5ldyBZcigiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IFdsdD0oKCk9'@;
put 'PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IG5uLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNvcHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNv'@;
put 'bmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRoaXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5'@;
put 'UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQmJiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNv'@;
put 'cHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJn'@;
put 'ZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3IgdGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3Ry'@;
put 'eXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklFMTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgp'@;
put 'e2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhpcy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRB'@;
put 'cmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGls'@;
put 'ZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29weUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3Jl'@;
put 'dHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3RoaXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBU'@;
put 'ZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1jb3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5k'@;
put 'KCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0'@;
put 'dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6Imxl'@;
put 'ZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9uc2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAm'@;
put 'JnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKGZyKFBvKSxmcigkcyksZnIoWmx0LDgp'@;
put 'KX0sYy5cdTAyNzVwcm92PWxyKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxHbHQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9uZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBi'@;
put 'b2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IElyLHRoaXMuY2JPbkVycm9yPW5ldyBJcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlzLmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxt'@;
put 'KT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFuZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVu'@;
put 'dCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlz'@;
put 'dGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNydi5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxk'@;
put 'LGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJv'@;
put 'ci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKHN0KFBvKSxzdCgkaSksc3QoY3Mp'@;
put 'LHN0KFdsdCkpfSxjLlx1MDI3NWRpcj12cih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W1FuLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJdLGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVu'@;
put 'dCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSwkbHQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9'@;
put 'LGMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1faSh7aW1wb3J0czpbbW9dfSksY30pKCk7dmFyIHFsdD1SKDI1MDAxKTtsZXQgS2x0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29uc3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2Yg'@;
put 'YT9wYXJzZUludChhKTphO3JldHVybigwLHFsdC5DKShmLGgpfXN0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1cGlwZT1Ecyh7bmFtZToiY29udmVydFNpemUiLHR5cGU6YyxwdXJlOiEwfSl9cmV0dXJuIGN9'@;
put 'KSgpO2NvbnN0IFhsdD1bInF1ZXJ5RmlsdGVyIl0sSmx0PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBRbHQoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDU0KSxKdCgxLCJjbHItc3Bpbm5lciIsNTUpLGJlKCkpfWZ1bmN0aW9uIGVjdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlv'@;
put 'biB0Y3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsNjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIix4dChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGJlKCl9fWZ1bmN0aW9uIG5j'@;
put 'dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNTgsMSksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKTtyZXR1cm4gcXIoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChm'@;
put 'LmxpYnJhcmllc1NlYXJjaD1oKSx4dChoKX0pLEh0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxiZSgpLGJ0KDQsZWN0LDEsMCwiY2xyLWljb24iLDU5KSg1LHRjdCwxLDAsImNsci1pY29uIiw2MCksYmUoKSgpfWlmKDImYyl7'@;
put 'Y29uc3QgYT1YaSgzKSxkPVplKCk7d2UoMiksV3IoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSx3ZSgyKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksd2UoKSxQZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHJjdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24i'@;
put 'LDYxKX1mdW5jdGlvbiBpY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsNjIpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKSxaZSgpO2NvbnN0IGg9WGkoMyksZj1aZSgyKS4kaW1wbGljaXQsdj1aZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3Ry'@;
put 'aW5nPSIiLHh0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGJlKCl9fWZ1bmN0aW9uIG9jdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNjcsMiksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KGgpe1N0KGEpO2NvbnN0IGY9WmUoMikuJGltcGxpY2l0O3JldHVybiBxcihmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLHh0KGgpfSksSHQoImtleXVwIixmdW5jdGlvbigpe1N0KGEpO2NvbnN0IGg9WmUoMikuJGltcGxpY2l0O3JldHVybiB4dChaZSgpLnRyZWVPbkZp'@;
put 'bHRlcihoLCJ0YWJsZXMiKSl9KSxiZSgpLGJ0KDQscmN0LDEsMCwiY2xyLWljb24iLDU5KSg1LGljdCwxLDAsImNsci1pY29uIiw2MCksYmUoKSgpfWlmKDImYyl7Y29uc3QgYT1YaSgzKSxkPVplKDIpLiRpbXBsaWNpdDt3ZSgyKSxQZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLFdy'@;
put 'KCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksd2UoMiksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLHdlKCksUGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBzY3QoYyxsKXsxJmMmJkp0KDAsImNsci1pY29uIiw3NCl9ZnVuY3Rpb24gYWN0KGMsbCl7MSZjJiZKdCgw'@;
put 'LCJjbHItaWNvbiIsNzUpfWZ1bmN0aW9uIGxjdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImJ1dHRvbiIsNzApLEh0KCJjbGljayIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVplKCkubmdWYXIsZj1aZSgpLiRpbXBsaWNpdCx2PVplKDIpLiRpbXBsaWNpdCxUPVplKCk7cmV0'@;
put 'dXJuIHh0KGg/IiI6VC5vblRhYmxlQ2xpY2soZix2KSl9KSxyaSgxLDcxKSxidCgyLHNjdCwxLDAsImNsci1pY29uIiw3MikoMyxhY3QsMSwwLCJjbHItaWNvbiIsNzMpLGlpKCksemUoNCksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoKS5uZ1ZhcixkPVplKCkuJGltcGxpY2l0LGg9WmUoMiku'@;
put 'JGltcGxpY2l0LGY9WmUoKTticigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJ0YWJsZS1hY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksd2UoKSxQZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSx3ZSgpLFBlKCJuZ1N3aXRjaENhc2UiLCEwKSx3ZSgpLFBlKCJu'@;
put 'Z1N3aXRjaENhc2UiLCExKSx3ZSgpLHhyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIGNjdChjLGwpezEmYyYmKGdlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSgxLCJzcGFuIiksemUoMiwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRA'@;
put 'ZGF0YWNvbnRyb2xsZXIuaW8gIiksYmUoKSgpKX1mdW5jdGlvbiB1Y3QoYyxsKXsxJmMmJihyaSgwKSxidCgxLGNjdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc2KSxpaSgpKX1mdW5jdGlvbiBkY3QoYyxsKXtpZigxJmMmJihnZSgwLCJjbHItdG9vbHRpcCIpLGJ0KDEsbGN0LDUsOCwi'@;
put 'YnV0dG9uIiw2OSkoMix1Y3QsMiwwLCJuZy1jb250YWluZXIiLDQyKSxiZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPVplKCkuJGltcGxpY2l0O3dlKCksUGUoIm5nSWYiLGQubGVuZ3RoPjApLHdlKCksUGUoIm5nSWYiLGEpfX1mdW5jdGlvbiBoY3QoYyxsKXtpZigxJmMmJihnZSgwLCJj'@;
put 'bHItdHJlZS1ub2RlIiksYnQoMSxkY3QsMywyLCJjbHItdG9vbHRpcCIsNjgpLGJlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9WmUoMyk7d2UoKSxQZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5fbGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIGZjdChjLGwp'@;
put 'e2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImNsci10cmVlLW5vZGUiLDY0KSxIdCgiY2xpY2siLGZ1bmN0aW9uKGgpe1N0KGEpO2NvbnN0IGY9WmUoKS4kaW1wbGljaXQ7cmV0dXJuIHh0KFplKCkudHJlZU5vZGVDbGlja2VkKGgsZikpfSksR3IoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5j'@;
put 'dGlvbihoKXtTdChhKTtjb25zdCBmPVplKCkuJGltcGxpY2l0O3JldHVybiBxcihmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSx4dChoKX0pLGdlKDEsInAiLDY1KSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSk7Y29uc3QgaD1aZSgpLiRpbXBsaWNpdCxmPVplKCk7cmV0dXJuIGYu'@;
put 'bGliPWguTElCUkFSWVJFRix4dChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxKdCgyLCJjbHItaWNvbiIsNjYpLHplKDMpLGJlKCksYnQoNCxvY3QsNiw0LCJjbHItdHJlZS1ub2RlIiw3KSg1LGhjdCwyLDEsImNsci10cmVlLW5vZGUiLDgpLGJlKCl9aWYoMiZjKXtjb25z'@;
put 'dCBhPVplKCkuJGltcGxpY2l0O2JyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLFdyKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCksUGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSx3ZSgzKSx4cigiICIsYS5MSUJSQVJZTkFNRSwiICIpLHdlKCksUGUoIm5n'@;
put 'SWYiLGEudGFibGVzKSx3ZSgpLFBlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIHBjdChjLGwpe2lmKDEmYyYmKHJpKDApLGJ0KDEsZmN0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjMpLGlpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt3ZSgpLFBlKCJuZ0lmIiwhYS5oaWRkZW4m'@;
put 'JmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gbWN0KGMsbCl7MSZjJiYoZ2UoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLHplKDIsIiBMb2FkaW5nLi4uICIpLGJlKCkoKSl9ZnVuY3Rpb24gZ2N0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSko'@;
put 'MiwiZGl2Iiw4MikoMywiZGl2Iiw4MykoNCwiYnV0dG9uIiw4NCksSnQoNSwiY2xyLWljb24iLDg1KSxiZSgpLGdlKDYsImgzIiw0NyksemUoNywiRXJyb3IiKSxiZSgpKCksZ2UoOCwiZGl2IiwxNSkoOSwicCIpLHplKDEwLCJZb3UgY2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksYmUo'@;
put 'KSgpLGdlKDExLCJkaXYiLDI2KSgxMiwiYnV0dG9uIiw4NiksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksemUoMTMsIiBPayAiKSxiZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIF9jdChjLGwpezEmYyYmSnQoMCwiZGl2Iiw4Nyl9'@;
put 'ZnVuY3Rpb24gdmN0KGMsbCl7MSZjJiZKdCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24geWN0KGMsbCl7MSZjJiYoZ2UoMCwiZGl2Iiw4OCkoMSwic3BhbiIsODkpLHplKDIsIiBMb2FkaW5nLi4uICIpLGJlKCksZ2UoMywiZGl2IikoNCwiaDQiKSx6ZSg1LCJMb2FkaW5nIHRhYmxl'@;
put 'IHZpZXdlciIpLGJlKCkoKSgpKX1mdW5jdGlvbiBiY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHItaWNvbiIsMTEzKSxIdCgiY2xpY2siLGZ1bmN0aW9uKCl7U3QoYSksWmUoKTtjb25zdCBoPVhpKDUpO3JldHVybiB4dChaZSgyKS5zZWFyY2hUYWJsZShoKSl9KSxiZSgp'@;
put 'fX1mdW5jdGlvbiB3Y3QoYyxsKXsxJmMmJihnZSgwLCJzcGFuIiwxMTQpLHplKDEsIiBMb2FkaW5nLi4uICIpLGJlKCkpfWZ1bmN0aW9uIE1jdChjLGwpezEmYyYmSnQoMCwiY2xyLWljb24iLDExNSl9ZnVuY3Rpb24gQ2N0KGMsbCl7aWYoMSZjJiYoZ2UoMCwic3BhbiIsMTE2KSx6ZSgxKSxi'@;
put 'ZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSx4cigiICIsbnVsbD09YS50YWJsZVRpdGxlP251bGw6YS50YWJsZVRpdGxlLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFNjdChjLGwpe2lmKDEmYyYmKGdlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDExOCksemUoMSksYmUo'@;
put 'KSksMiZjKXtjb25zdCBhPVplKDQpO3dlKCkseHIoIiAiLGEuZHNOb3RlLCIgIil9fWZ1bmN0aW9uIHhjdChjLGwpezEmYyYmKHJpKDApLGJ0KDEsU2N0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE3KSxpaSgpKX1mdW5jdGlvbiBrY3QoYyxsKXtpZigxJmMmJihnZSgwLCJzcGFuIiks'@;
put 'emUoMSksUGEoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoNCk7d2UoKSxZeCgiICgiLFk1KDIsNCxhLm51bWJlck9mUm93cywiLCIpLCIgIiwxPT09YS5udW1iZXJPZlJvd3M/InJvdyI6InJvd3MiLCIsICIsYS5maWx0ZXJDb2xzLmxlbmd0aCwiIiwxPT09'@;
put 'YS5maWx0ZXJDb2xzLmxlbmd0aD8iIGNvbCI6IiBjb2xzIiwiKSAiKX19ZnVuY3Rpb24gRWN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7cmkoMCksYnQoMSxrY3QsMyw3LCJzcGFuIiw0MiksZ2UoMiwiY2xyLWljb24iLDExOSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChh'@;
put 'KSx4dChaZSgzKS5yZWxvYWRUYWJsZURhdGEoKSl9KSxiZSgpLGlpKCl9aWYoMiZjKXtjb25zdCBhPVplKDMpO3dlKCksUGUoIm5nSWYiLG51bGwhPT1hLm51bWJlck9mUm93cyl9fWZ1bmN0aW9uIFRjdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1IbigpO2dlKDAsImRpdiIsMTI1KSxIdCgiY2xp'@;
put 'Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGEpLHh0KFplKDUpLmVkaXRUYWJsZSgpKX0pLEp0KDEsImNsci1pY29uIiwxMzEpLGdlKDIsInNwYW4iKSx6ZSgzLCJFZGl0IiksYmUoKSgpfX1mdW5jdGlvbiBEY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJkaXYiLDEyNSksSHQo'@;
put 'ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSg1KS5nb1RvTGluZWFnZSgpKX0pLEp0KDEsImNsci1pY29uIiwxMzIpLGdlKDIsInNwYW4iKSx6ZSgzLCJMaW5lYWdlIiksYmUoKSgpfX1mdW5jdGlvbiBBY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJjbHIt'@;
put 'ZHJvcGRvd24tbWVudSIsMTI0KSgxLCJkaXYiLDEyNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSg0KS5uZXdWaWV3Ym94KCkpfSksSnQoMiwiY2xyLWljb24iLDEyNiksZ2UoMywic3BhbiIpLHplKDQsIlZpZXdib3hlcyIpLGJlKCkoKSxidCg1LFRjdCw0LDAs'@;
put 'ImRpdiIsMTI3KSg2LERjdCw0LDAsImRpdiIsMTI3KSxnZSg3LCJkaXYiLDEyNSksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSg0KS5vcGVuUWIoKSl9KSxKdCg4LCJjbHItaWNvbiIsMTI4KSxnZSg5LCJzcGFuIiksemUoMTAsIkZpbHRlciIpLGJlKCkoKSxnZSgx'@;
put 'MSwiZGl2IiwxMjUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoNCkub3BlbkRvd25sb2FkPSEwKX0pLEp0KDEyLCJjbHItaWNvbiIsMTI5KSxnZSgxMywic3BhbiIpLHplKDE0LCJEb3dubG9hZCIpLGJlKCkoKSxnZSgxNSwiZGl2IiwxMjUpLEh0KCJjbGljayIs'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoNCkuc2hvd1dlYlF1ZXJ5KCkpfSksSnQoMTYsImNsci1pY29uIiwxMzApLGdlKDE3LCJzcGFuIiksemUoMTgsIldlYiBRdWVyeSBVUkwiKSxiZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9WmUoNCk7d2UoNSksUGUoIm5nSWYiLGEudGFibGVF'@;
put 'ZGl0RXhpc3RzKCkpLHdlKCksUGUoIm5nSWYiLGEudGFibGV1cmkpfX1mdW5jdGlvbiBMY3QoYyxsKXsxJmMmJihnZSgwLCJjbHItZHJvcGRvd24iLDEyMCkoMSwiYnV0dG9uIiwxMjEpLEp0KDIsImNsci1pY29uIiwxMjIpLHplKDMsIiBvcHRpb25zICIpLGJlKCksYnQoNCxBY3QsMTksMiwi'@;
put 'Y2xyLWRyb3Bkb3duLW1lbnUiLDEyMyksYmUoKSksMiZjJiZQZSgiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLCEwKX1mdW5jdGlvbiBJY3QoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDEzMykoMSwic3BhbiIpLHplKDIsIkZJTFRFUiA6ICIpLGdlKDMsImIiKSx6ZSg0KSxiZSgpKCkoKSks'@;
put 'MiZjKXtjb25zdCBhPVplKDMpO3dlKDQpLHByKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gUmN0KGMsbCl7aWYoMSZjKXtjb25zdCBhPUhuKCk7Z2UoMCwiZGl2Iiw5NikoMSwic2VjdGlvbiIsOTcpKDIsImZvcm0iLDk4KSgzLCJkaXYiLDk5KSg0LCJpbnB1dCIsMTAwLDQpLEh0KCJrZXl1cC5l'@;
put 'bnRlciIsZnVuY3Rpb24oKXtTdChhKTtjb25zdCBoPVhpKDUpO3JldHVybiB4dChaZSgyKS5zZWFyY2hUYWJsZShoKSl9KSxiZSgpLGJ0KDYsYmN0LDEsMCwiY2xyLWljb24iLDEwMSkoNyx3Y3QsMiwwLCJzcGFuIiwxMDIpLGJlKCksZ2UoOCwiY2xyLWNoZWNrYm94LWNvbnRhaW5lciIpKDks'@;
put 'ImNsci1jaGVja2JveC13cmFwcGVyIikoMTAsImlucHV0IiwxMDMpLEdyKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtTdChhKTtjb25zdCBmPVplKDIpO3JldHVybiBxcihmLnNlYXJjaE51bWVyaWMsaCl8fChmLnNlYXJjaE51bWVyaWM9aCkseHQoaCl9KSxiZSgpLGdlKDExLCJsYWJl'@;
put 'bCIpLHplKDEyLCJOdW1lcmljIiksYmUoKSgpKCkoKSgpLGdlKDEzLCJkaXYiLDEwNCkoMTQsImgzIiwxMDUpKDE1LCJjbHItdG9vbHRpcCIsMTA2KSgxNiwiY2xyLWljb24iLDEwNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChhKSx4dChaZSgyKS5kYXRhc2V0SW5mbz0hMCl9'@;
put 'KSxiZSgpLGJ0KDE3LE1jdCwxLDAsImNsci1pY29uIiwxMDgpKDE4LENjdCwyLDEsInNwYW4iLDEwOSkoMTkseGN0LDIsMCwibmctY29udGFpbmVyIiw0MiksYmUoKSxidCgyMCxFY3QsMywxLCJuZy1jb250YWluZXIiLDQyKSxiZSgpKCksZ2UoMjEsImRpdiIsMTEwKSxidCgyMixMY3QsNSwx'@;
put 'LCJjbHItZHJvcGRvd24iLDExMSksYmUoKSxidCgyMyxJY3QsNSwxLCJkaXYiLDExMiksYmUoKX1pZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoNCksUGUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIpLHdlKDIpLFBlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSx3ZSgp'@;
put 'LFBlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLHdlKDMpLFdyKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLHdlKDcpLFBlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMoIi1GQyIpKSx3ZSgpLFBlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEu'@;
put 'dGFibGVUaXRsZS5sZW5ndGg+MCksd2UoKSxQZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSx3ZSgpLFBlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksd2UoMiksUGUoIm5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLHdl'@;
put 'KCksUGUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFEYSgxMCxKbHQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBPY3QoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDEzNCksSnQoMSwiY2xyLWljb24iLDEzNSksZ2UoMiwiaDMiLDEzNiksemUo'@;
put 'MywiUGxlYXNlIHNlbGVjdCBhIGxpYnJhcnkiKSxiZSgpKCkpfWZ1bmN0aW9uIFBjdChjLGwpezEmYyYmSnQoMCwiY2xyLXNwaW5uZXIiLDU1KX1mdW5jdGlvbiBGY3QoYyxsKXsxJmMmJihnZSgwLCJkaXYiLDE0NCksSnQoMSwiY2xyLWljb24iLDE0NSksZ2UoMiwiaDMiLDEzNiksemUoMywi'@;
put 'UGxlYXNlIHNlbGVjdCBhIHRhYmxlIiksYmUoKSgpKX1mdW5jdGlvbiBIY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtnZSgwLCJwIiwxNDgpLHplKDEsIiBObyBsaWJyYXJ5IGluZm8gZm91bmQuIENsaWNrICIpLGdlKDIsImNsci1pY29uIiwxNDkpLEh0KCJjbGljayIsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gU3QoYSkseHQoWmUoNCkucmVsb2FkTGliSW5mbygpKX0pLGJlKCksemUoMywiIGJ1dHRvbiB0byByZWZyZXNoLiAiKSxiZSgpfX1mdW5jdGlvbiBOY3QoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwxNTApLHplKDIsIkVOR0lORToiKSxiZSgpLGdlKDMsInRkIiwx'@;
put 'NTEpLHplKDQpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLHhyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLkVOR0lORToiIiwiICIpfX1mdW5jdGlvbiBWY3QoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwxNTApLHplKDIsIkxJQklEOiIpLGJlKCksZ2Uo'@;
put 'MywidGQiLDE1MSksemUoNCksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoNSk7d2UoNCkseHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCSUQ6IiIsIiAiKX19ZnVuY3Rpb24gamN0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiKSgxLCJ0ZCIsMTUwKSx6ZSgyLCJMSUJOQU1FOiIp'@;
put 'LGJlKCksZ2UoMywidGQiLDE1MSksemUoNCksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoNSk7d2UoNCkseHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uTElCTkFNRToiIiwiICIpfX1mdW5jdGlvbiBCY3QoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwxNTApLHplKDIs'@;
put 'IkxJQlNJWkU6IiksYmUoKSxnZSgzLCJ0ZCIsMTUxKSx6ZSg0KSxQYSg1LCJjb252ZXJ0U2l6ZSIpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLHhyKCIgIixhLmxpYmluZm9bMF0/d2MoNSwxLGEubGliaW5mb1swXS5MSUJTSVpFKToiIiwiICIpfX1mdW5jdGlvbiBZY3QoYyxs'@;
put 'KXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwxNTApLHplKDIsIk9XTkVSUzoiKSxiZSgpLGdlKDMsInRkIiwxNTEpLHplKDQpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLHhyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLk9XTkVSUzoiIiwiICIpfX1mdW5jdGlv'@;
put 'biB6Y3QoYyxsKXtpZigxJmMmJihnZSgwLCJ0ciIpKDEsInRkIiwxNTApLHplKDIsIlBBVEhTOiIpLGJlKCksZ2UoMywidGQiLDE1MSksemUoNCksYmUoKSgpKSwyJmMpe2NvbnN0IGE9WmUoNSk7d2UoNCkseHIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEFUSFM6IiIsIiAiKX19'@;
put 'ZnVuY3Rpb24gVWN0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiKSgxLCJ0ZCIsMTUwKSx6ZSgyLCJQRVJNUzoiKSxiZSgpLGdlKDMsInRkIiwxNTEpLHplKDQpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLHhyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlBFUk1TOiIi'@;
put 'LCIgIil9fWZ1bmN0aW9uIFpjdChjLGwpe2lmKDEmYyYmKGdlKDAsInRyIikoMSwidGQiLDE1MCksemUoMiwiU0NIRU1BUzoiKSxiZSgpLGdlKDMsInRkIiwxNTEpLHplKDQpLGJlKCkoKSksMiZjKXtjb25zdCBhPVplKDUpO3dlKDQpLHhyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBd'@;
put 'LlNDSEVNQVM6IiIsIiAiKX19ZnVuY3Rpb24gV2N0KGMsbCl7aWYoMSZjJiYoZ2UoMCwidHIiKSgxLCJ0ZCIsMTUwKSx6ZSgyLCJUQUJMRV9DTlQ6IiksYmUoKSxnZSgzLCJ0ZCIsMTUxKSx6ZSg0KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSg1KTt3ZSg0KSx4cigiICIsYS5saWJpbmZvWzBd'@;
put 'P2EubGliaW5mb1swXS5UQUJMRV9DTlQ6IiIsIiAiKX19ZnVuY3Rpb24gR2N0KGMsbCl7aWYoMSZjJiYocmkoMCksZ2UoMSwidGFibGUiKSxidCgyLE5jdCw1LDEsInRyIiw0MikoMyxWY3QsNSwxLCJ0ciIsNDIpKDQsamN0LDUsMSwidHIiLDQyKSg1LEJjdCw2LDMsInRyIiw0MikoNixZY3Qs'@;
put 'NSwxLCJ0ciIsNDIpKDcsemN0LDUsMSwidHIiLDQyKSg4LFVjdCw1LDEsInRyIiw0MikoOSxaY3QsNSwxLCJ0ciIsNDIpKDEwLFdjdCw1LDEsInRyIiw0MiksYmUoKSxpaSgpKSwyJmMpe2NvbnN0IGE9WmUoNCk7d2UoMiksUGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkVOR0lORSksd2Uo'@;
put 'KSxQZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCSUQpLHdlKCksUGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLkxJQk5BTUUpLHdlKCksUGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uTElCU0laRSksd2UoKSxQZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uT1dORVJTKSx3'@;
put 'ZSgpLFBlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QQVRIUyksd2UoKSxQZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uUEVSTVMpLHdlKCksUGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlNDSEVNQVMpLHdlKCksUGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm9bMF0uVEFCTEVfQ05U'@;
put 'KX19ZnVuY3Rpb24gJGN0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2IiwxNDYpLGJ0KDEsSGN0LDQsMCwicCIsMTQ3KSgyLEdjdCwxMSw5LCJuZy1jb250YWluZXIiLDQyKSxiZSgpKSwyJmMpe2NvbnN0IGE9WmUoMyk7d2UoKSxQZSgibmdJZiIsYS5saWJpbmZvLmxlbmd0aDwxKSx3ZSgpLFBl'@;
put 'KCJuZ0lmIixhLmxpYmluZm8ubGVuZ3RoPjApfX1mdW5jdGlvbiBxY3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9SG4oKTtyaSgwKSxnZSgxLCJkaXYiLDEzNyksSnQoMiwic2VjdGlvbiIsOTcpLGdlKDMsImRpdiIsMTM4KSg0LCJoMyIsMTM5KSx6ZSg1KSxiZSgpLGdlKDYsImNsci1pY29uIiwx'@;
put 'MTkpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoYSkseHQoWmUoMikucmVsb2FkTGliSW5mbygpKX0pLGJlKCkoKSxKdCg3LCJkaXYiLDExMCksYmUoKSxnZSg4LCJkaXYiLDE0MCksYnQoOSxQY3QsMSwwLCJjbHItc3Bpbm5lciIsMTQxKSxiZSgpLGJ0KDEwLEZjdCw0LDAsImRp'@;
put 'diIsMTQyKSgxMSwkY3QsMywyLCJkaXYiLDE0MyksaWkoKX1pZigyJmMpe2NvbnN0IGE9WmUoMik7d2UoNSkseHIoIiAiLGEubGliLCIgIiksd2UoNCksUGUoIm5nSWYiLG51bGw9PT1hLmxpYmluZm8pLHdlKCksUGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pLHdlKCksUGUoIm5nSWYiLG51'@;
put 'bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiBLY3QoYyxsKXsxJmMmJihnZSgwLCJoMyIsMTM2KSx6ZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIiksYmUoKSl9ZnVuY3Rpb24gWGN0KGMsbCl7MSZjJiYoZ2UoMCwiaDMiLDEzNiksemUoMSwiIE5vIGRhdGEgZm91'@;
put 'bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLGJlKCkpfWZ1bmN0aW9uIEpjdChjLGwpe2lmKDEmYyYmKGdlKDAsImRpdiIsMTUyKSxKdCgxLCJjbHItaWNvbiIsMTUzKSxidCgyLEtjdCwyLDAsImgzIiwxNTQpKDMsWGN0LDIsMCwiaDMiLDE1NCksYmUoKSksMiZjKXtjb25zdCBhPVpl'@;
put 'KDIpO3dlKDIpLFBlKCJuZ0lmIixhLm5vRGF0YSksd2UoKSxQZSgibmdJZiIsYS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBRY3QoYyxsKXtpZigxJmMmJihnZSgwLCJkaXYiLDE1NSksSnQoMSwiaG90LXRhYmxlIiwxNTYpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3ZSgpLFBlKCJtdWx0'@;
put 'aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5jb2x1bW5zKSgiY29weVBhc3RlIixhLmhvdFRhYmxl'@;
put 'LmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixhLmhvdFRhYmxlLmNvbnRleHRNZW51KSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGEuaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoIm1vZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hla2Vy'@;
put 'KSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgicm93SGVhZGVycyIsYS5ob3RUYWJsZS5yb3dIZWFkZXJzKSgicm93SGVhZGVyV2lkdGgiLGEuaG90VGFibGUucm93SGVhZGVyV2lkdGgpKCJy'@;
put 'b3dIZWlnaHRzIixhLmhvdFRhYmxlLnJvd0hlaWdodHMpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlLmxpY2Vuc2VLZXkpfX1mdW5jdGlvbiBldXQoYyxsKXtpZigxJmMmJihnZSgwLCJwIiwxNTcpLHplKDEpLEp0KDIsImNvbnRhY3QtbGluayIpLGJlKCkpLDImYyl7Y29uc3QgYT1aZSgyKTt3'@;
put 'ZSgpLHhyKCIgVG8gZGlzcGxheSBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkLCIgcm93cywgY29udGFjdCAiKX19ZnVuY3Rpb24gdHV0KGMsbCl7aWYoMSZjJiYoZ2UoMCwiZGl2Iiw5MCksYnQoMSxSY3QsMjQsMTEsImRpdiIsOTEpKDIsT2N0'@;
put 'LDQsMCwiZGl2Iiw5MikoMyxxY3QsMTIsNCwibmctY29udGFpbmVyIiw0MikoNCxKY3QsNCwyLCJkaXYiLDkzKSg1LFFjdCwyLDE4LCJkaXYiLDk0KSxnZSg2LCJkaXYiKSxidCg3LGV1dCwzLDEsInAiLDk1KSxiZSgpKCkpLDImYyl7Y29uc3QgYT1aZSgpO3dlKCksUGUoIm5nSWYiLGEudGFi'@;
put 'bGUpLHdlKCksUGUoIm5nSWYiLCEoYS5saWJ8fGEudGFibGV8fGEubm9EYXRhUmVxRXJyfHxhLm5vRGF0YSkpLHdlKCksUGUoIm5nSWYiLCFhLm5vRGF0YSYmIWEubm9EYXRhUmVxRXJyJiYhYS50YWJsZSYmYS5saWIpLHdlKCksUGUoIm5nSWYiLGEubm9EYXRhfHxhLm5vRGF0YVJlcUVyciks'@;
put 'd2UoKSxQZSgibmdJZiIsIWEubm9EYXRhJiYhYS5ub0RhdGFSZXFFcnImJmEudGFibGUpLHdlKDIpLFBlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkIT09YS5JbmZpbml0eSYmYS5ob3RUYWJsZS5kYXRhJiZhLmhvdFRhYmxlLmRhdGEubGVuZ3RoPmEu'@;
put 'bGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQpfX1sZXQgWUE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsVCxZLHJlLGZlLF9lKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTdG9yZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlz'@;
put 'LnJvdXRlcj1mLHRoaXMucm91dGU9dix0aGlzLmV2ZW50U2VydmljZT1ULHRoaXMubG9nZ2VyU2VydmljZT1ZLHRoaXMuaGVscGVyU2VydmljZT1yZSx0aGlzLmxvY2F0aW9uPWZlLHRoaXMuY2RmPV9lLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgbjEsdGhpcy5saWJyYXJpZXNQYWdp'@;
put 'bmc9ITEsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzVHJlZUV4cGFuZGVkPSExLHRoaXMubGliaW5mbz1udWxsLHRoaXMudGFibGV1cmk9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckNvbHM9W10sdGhpcy5udWxs'@;
put 'VmFyaWFibGVzPSExLHRoaXMuYWJvcnRBY3RpdmU9ITEsdGhpcy51cmxGaWx0ZXJQaz1udWxsLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMud2ViUXVlcnlUZXh0PSIiLHRoaXMucXVlcnlFcnI9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSExLHRoaXMubG9hZGlu'@;
put 'Z1RhYmxlVmlldz0hMSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5ub0RhdGFSZXFFcnI9ITEsdGhpcy50YWJsZURpc2FibGU9ITEsdGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMub3BlbkRvd25sb2FkPSExLHRoaXMud2ViUXVlcnk9ITEsdGhpcy53ZWJRdWVyeVRh'@;
put 'Yj0hMSx0aGlzLmRvd25sb2FkRm9ybWF0PSJDU1YiLHRoaXMuc2FzanNDb25maWc9bmV3IGVkLlNBU2pzQ29uZmlnLHRoaXMuc2VhcmNoTG9hZGluZz0hMSx0aGlzLnNlYXJjaE51bWVyaWM9ITEsdGhpcy5udW1iZXJPZlJvd3M9bnVsbCx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLiRkYXRhRm9y'@;
put 'bWF0cz1udWxsLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRh'@;
put 'OltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNlbnNlS2V5OnZvaWQgMCxyb3dIZWFkZXJz'@;
put 'OmtlPT4iICIscm93SGVhZGVyV2lkdGg6MTUscm93SGVpZ2h0czoyMCxjb250ZXh0TWVudTpbImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSJdLGNvcHlQYXN0ZTp7Y29weUNvbHVtbkhlYWRlcnM6ITAsY29weUNvbHVtbkhlYWRlcnNPbmx5OiEw'@;
put 'fSxkcm9wZG93bk1lbnU6e2l0ZW1zOnttYWtlX3JlYWRfb25seTp7bmFtZToibWFrZV9yZWFkX29ubHkifSxhbGlnbm1lbnQ6e25hbWU6ImFsaWdubWVudCJ9LHNwMTp7bmFtZToiLS0tLS0tLS0tIn0saW5mbzp7bmFtZToidGVzdCBpbmZvIixyZW5kZXJlcjooa2UsV2UsSmUsdHQseXQsd3Qp'@;
put 'PT57Y29uc3QgTHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBvbixzbj0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgTW49dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxWbj1Nbj9NblswXVsxXTotMSx1cj10aGlzLmhvdElu'@;
put 'c3RhbmNlPy5jb2xUb1Byb3AoVm4pO29uPXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3VyXSxvbiYmKHNuPWBMQUJFTDogJHtvbj8ubGFiZWx9PGJyPlRZUEU6ICR7b24/LnR5cGV9PGJyPkxFTkdUSDogJHtvbj8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7b24/LmZvcm1hdH1gKX1yZXR1cm4gTHQu'@;
put 'aW5uZXJIVE1MPXNuLEx0fX19fX0sdGhpcy5ob3RJbnN0YW5jZT1udWxsLHRoaXMuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyPSExLHRoaXMudmlld2JveE9wZW49ITEsdGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXI9bmV3IHFnLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNh'@;
put 'c2pzQ29uZmlnKCl9bmdPbkluaXQoKXsiIiE9PUduLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uJiYwPT09T2JqZWN0LmtleXModGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMpLmxlbmd0aCYmdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0duLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uXSx7cXVlcnlQ'@;
put 'YXJhbXNIYW5kbGluZzoicHJlc2VydmUifSksdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtJiYoR24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvZGF0YSIpLHRoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhp'@;
put 'cy5ob3RUYWJsZS5saWNlbnNlS2V5PWF9KX1uZXdWaWV3Ym94KCl7dGhpcy52aWV3Ym94T3Blbj0hMH1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9c2VhcmNoVGFibGUoYSl7'@;
put 'dmFyIGQ9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLHY9cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRh'@;
put 'U2VhcmNoKGgsZC5zZWFyY2hOdW1lcmljLGYsdikudGhlbihUPT57VC5zYXNwYXJhbXN8fFQudmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQuZHNtZXRhPVQuZHNtZXRhLGQudmVyc2lvbnM9VC52ZXJzaW9uc3x8W10sZC5z'@;
put 'ZXREU05vdGUoKSxkLm51bWJlck9mUm93cz1ULnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PVQuc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPVQuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoP2Qubm9E'@;
put 'YXRhPSEwOihkLm5vRGF0YT0hMSxkLnRhYmxlRmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRo'@;
put 'aXMudXJsRmlsdGVyUGt8fDApfXJlbG9hZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2EubGliaW5mbz1udWxsLGEuc2FzU3RvcmVTZXJ2aWNlLnJlZnJlc2hMaWJJbmZvKGEubGliKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGQ9VyhmdW5jdGlvbiooaCl7YS5saWJp'@;
put 'bmZvPWgubGliaW5mbyxHbi52aWV3ZXIubGliaW5mbz1hLmxpYmluZm87Y29uc3QgZj1hLmxpYnJhcmllcy5maW5kKHY9PnYuTElCUkFSWVJFRj09PWEubGliKTtmJiYoZi5saWJpbmZvPWEubGliaW5mbyl9KTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVu'@;
put 'dHMpfX0oKSxkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLG51bGw9PT1hLmxpYmluZm8mJihhLmxpYmluZm89W10pfSl9KSgpfWZpbHRlckZuKGEpe3RoaXMubGlicmFyaWVzPXRoaXMubGlicmFyaWVzLmZpbHRlcihoPT4tMSE9PWguTElCUkFSWU5BTUUudG9Mb3dlckNhc2UoKS5pbmRl'@;
put 'eE9mKGEudG9Mb2NhbGVMb3dlckNhc2UoKSkpfWRvd25sb2FkRGF0YSgpe2xldCBhPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLGQ9dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2M7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhlY3V0aW9uUGF0aCgpO2xldCBZLGY9IiZ0eXBlPSIrdGhp'@;
put 'cy5kb3dubG9hZEZvcm1hdCx2PSImdGFibGU9Iit0aGlzLnRhYmxlVGl0bGUsVD0iU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU/YCZfY29udGV4dG5hbWU9JHt0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lfWA6IiI7WT10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hv'@;
put 'dC5wYXJhbXMuZmlsdGVySWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpLHdpbmRvdy5vcGVuKGEraCsiLz9fcHJvZ3JhbT0iK2QrIi9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSIrZit2K1QrIiZmaWx0ZXI9IitZKSx0aGlzLm9wZW5Eb3du'@;
put 'bG9hZD0hMX1kb3dubG9hZERETCgpe2xldCBhPXRoaXMubGliLGQ9dGhpcy50YWJsZSxoPXRoaXMuZG93bmxvYWRGb3JtYXQucmVwbGFjZSgiX0RETCIsIiIpLGY9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBUPXRoaXMuc2FzU2Vy'@;
put 'dmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oZitUKyIvP19wcm9ncmFtPSIrdisiL3NlcnZpY2VzL3B1YmxpYy9nZXRkZGwiK2AmZHM9JHtkfSZsaWJyZWY9JHthfSZmbGF2b3VyPSR7aH0keyJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250'@;
put 'ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIn1gKSx0aGlzLm9wZW5Eb3dubG9hZD0hMX1vbkNsaUNvbW1hbmRGb2N1cyhhKXthLnByZXZlbnREZWZhdWx0KCksYS50YXJnZXQuc2VsZWN0KCl9ZWRpdFRhYmxlKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgi'@;
put 'L2VkaXRvci8iK3RoaXMubGliVGFiKX10YWJsZUVkaXRFeGlzdHMoKXtsZXQgYT17fTthPUduLmVkaXRvci5saWJzQW5kVGFibGVzO2xldCBkPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMV0saD10aGlzLmxpYlRhYi5zcGxpdCgiLiIpWzBdO3JldHVybiEhYVtoXSYmYVtoXS5pbmNsdWRlcyhk'@;
put 'KX1nb1RvTGluZWFnZSgpe2xldCBkPWAvdmlldy9saW5lYWdlLyR7dGhpcy50YWJsZXVyaS5zcGxpdCgiXFwiKVsxXX0vUkVWRVJTRWA7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChkKX1zaG93V2ViUXVlcnkoKXtsZXQgYTt0aGlzLndlYlF1ZXJ5PSEwLGE9dHlwZW9mIHRoaXMucm91dGUu'@;
put 'c25hcHNob3QucGFyYW1zLmZpbHRlcklkPiJ1Ij8wOnBhcnNlSW50KHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkKTtsZXQgZD13aW5kb3cubG9jYXRpb24ucG9ydC5sZW5ndGg+MD8iOiIrd2luZG93LmxvY2F0aW9uLnBvcnQ6IiI7Y29uc3QgaD10aGlzLnNhc1NlcnZpY2Uu'@;
put 'Z2V0RXhlY3V0aW9uUGF0aCgpO2xldCB2PWAke3dpbmRvdy5sb2NhdGlvbi5wcm90b2NvbH0vLyR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSR7ZH0vJHtofS8/X3Byb2dyYW09JHt0aGlzLnNhc2pzQ29uZmlnLmFwcExvY30vc2VydmljZXMvcHVibGljL2dldHJhd2RhdGEmdHlwZT1XRUIk'@;
put 'e3RoaXMud2ViUXVlcnlUYWI/IlRBQiI6IkNTViJ9JnRhYmxlPSR7dGhpcy50YWJsZVRpdGxlfSR7IiZmaWx0ZXI9IithfWA7dGhpcy53ZWJRdWVyeVRleHQ9di5yZXBsYWNlKC8gL2dpbSwiJTIwIil9Y29weVRvQ2xpcCgpe2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVh'@;
put 'Iik7YS5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGEuc3R5bGUubGVmdD0iMCIsYS5zdHlsZS50b3A9IjAiLGEuc3R5bGUub3BhY2l0eT0iMCIsYS52YWx1ZT10aGlzLndlYlF1ZXJ5VGV4dCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpLGEuZm9jdXMoKSxhLnNlbGVjdCgpLGRvY3VtZW50'@;
put 'LmV4ZWNDb21tYW5kKCJjb3B5IiksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YSIpfXNob3dUYWJsZVNlbGVjdCgpe3RoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31jaGVja0V4cGFuZChh'@;
put 'KXt9Y29sbGFwc2VMaWJyYXJ5SXRlbXMoYSxkKXthLmZvckVhY2goaD0+e2guTElCUkFSWVJFRiE9PWQuTElCUkFSWVJFRiYmKGguZXhwYW5kZWQ9ITEpfSl9bG9hZE1vcmVMaWJyYXJpZXMoKXt0aGlzLmxpYnJhcmllc1BhZ2luZ3x8KHRoaXMubGlicmFyaWVzUGFnaW5nPSEwLHRoaXMuaGVs'@;
put 'cGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKHRoaXMubGlicmFyaWVzLCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQp'@;
put 'fWxpYnJhcnlFeHBhbmRlZENoYW5nZShhLGQpe2EmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeU9uQ2xpY2soYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0hIWh8fCFkLmV4cGFu'@;
put 'ZGVkOnlpZWxkIGYuc2VsZWN0VGFibGUoYSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IHY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJjaElucHV0XSIs'@;
put 'diksdiYmdi5mb2N1cygpLGQmJmQubGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4o'@;
put 'KCk9PntmLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1z'@;
put 'KGYubGlicmFyaWVzLGQpfSkoKX1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gVyhmdW5jdGlvbiooKXto'@;
put 'LmxvYWRpbmdUYWJsZXM9ITAsZi50YWJsZT0hMSxmLnRhYmxlRGlzYWJsZT0hMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWE/R24udmlld2VyLnRhYmxlc1NldCYmZD8oZi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMSxmLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzLGYubGli'@;
put 'aW5mbz1Hbi52aWV3ZXIubGliaW5mbyk6KGYubGliaW5mbz1udWxsLHlpZWxkIGYuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbih2PT57Zi5hYm9ydEFjdGl2ZT0hMSxmLnRhYmxlRGlzYWJsZT0hMTtsZXQgVD12Lm1wdGFibGVzLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gWS5N'@;
put 'RU1OQU1FfSk7Zi5saWJpbmZvPXYubGliaW5mb3x8W10sZi50YWJsZXM9VCxoJiYoaC50YWJsZXM9VCxoLmxpYmluZm89Zi5saWJpbmZvKSxHbi52aWV3ZXIubGlicmFyaWVzPWYubGlicmFyaWVzLEduLnZpZXdlci5saWJyYXJ5PWYubGliLEduLnZpZXdlci50YWJsZXM9Zi50YWJsZXMsR24u'@;
put 'dmlld2VyLmxpYmluZm89Zi5saWJpbmZvLEduLnZpZXdlci50YWJsZXNTZXQ9ITB9KS5jYXRjaCh2PT57Zi5sb2dnZXJTZXJ2aWNlLmVycm9yKHYpLGYuYWJvcnRBY3RpdmU9ITAsZi5ub0RhdGE9ITAsZi50YWJsZVRpdGxlPSIiLGYudGFibGVEaXNhYmxlPSEwfSkpOmYudGFibGVEaXNhYmxl'@;
put 'PSEwLEduLnZpZXdlci5saWJyYXJ5PWYubGliLGR8fGYuY2xlYXJHbG9iYWxzRmlsdGVyKCksaC5sb2FkaW5nVGFibGVzPSExLGguZXhwYW5kZWQ9IWguZXhwYW5kZWR9KSgpfXNlbGVjdExpYlRhYmxlKGEsZCl7IlBsZWFzZSBzZWxlY3QgdGFibGUiIT09YT8odGhpcy5hY3Rpb25EaXNhYmxl'@;
put 'PSExLHRoaXMubGliVGFiPXRoaXMubGliKyIuIit0aGlzLnRhYmxlKTp0aGlzLmFjdGlvbkRpc2FibGU9ITAsR24udmlld2VyLnRhYmxlPWEsZHx8dGhpcy5jbGVhckdsb2JhbHNGaWx0ZXIoKSx0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRoaXMubGliVGFiKX1jbGVhckdsb2JhbHNGaWx0ZXIo'@;
put 'KXtHbi52aWV3ZXIuZmlsdGVyLmxpYmRzPSIiLEduLnZpZXdlci5maWx0ZXIud2hlcmVDbGF1c2U9IiIsR24udmlld2VyLmZpbHRlci5ncm91cExvZ2ljPSIiLEduLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxHbi52aWV3ZXIuZmlsdGVyLmNvbHM9W10sR24udmlld2VyLmZpbHRlci52YWxz'@;
put 'PVtdfWxpYlRhYkFjdGl2ZShhLGQpe3JldHVybiEhdGhpcy5saWJUYWImJmErIi4iK2Q9PT10aGlzLmxpYlRhYn10cmVlT25GaWx0ZXIoYSxkKXt0aGlzLmhlbHBlclNlcnZpY2UudHJlZU9uRmlsdGVyKGEsZCl9bGlicmFyeU9uRmlsdGVyKCl7dGhpcy5oZWxwZXJTZXJ2aWNlLmxpYnJhcnlP'@;
put 'bkZpbHRlcih0aGlzLmxpYnJhcmllcyx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxHbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoPXRoaXMubGlicmFyaWVzU2VhcmNofWxpYnJhcnlSZXNldEZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5yZXNldEFycmF5RmlsdGVyKHRo'@;
put 'aXMubGlicmFyaWVzKX12aWV3RGF0YShhKXt2YXIgZD10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2xldCBoO2lmKGQubG9hZGluZ1RhYmxlVmlldz0hMCx0eXBlb2YgZC5saWJEYXRhc2V0PiJ1IiloPWQubGliKyIuIitkLnRhYmxlO2Vsc2UgaWYodHlwZW9mIGQubGliPiJ1IiYmdHlwZW9m'@;
put 'IGQudGFibGU+InUiKXtsZXQgVD1bXTtpZihUPWQubGliRGF0YXNldC5zcGxpdCgiLiIpLEduLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKFk9PntkLmxpYnJhcmllcz1ZLnNh'@;
put 'c2xpYnN9KS5jYXRjaChZPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFkpfSksZC5saWI9VFswXSxHbi52aWV3ZXIuc3RhcnR1cFNldClkLnRhYmxlcz1Hbi52aWV3ZXIudGFibGVzO2Vsc2V7bGV0IFk9ZC5saWJyYXJpZXMuZmluZChyZT0+cmUuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09'@;
put 'ZC5saWIudG9Mb3dlckNhc2UoKSk7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihyZT0+e2QudGFibGVzPXJlLm1wdGFibGVzLm1hcChmdW5jdGlvbihmZSl7cmV0dXJuIGZlLk1FTU5BTUV9KSxZLnRhYmxlcz1kLnRhYmxlcyxHbi52aWV3ZXIubGlicmFy'@;
put 'aWVzPWQubGlicmFyaWVzLEduLnZpZXdlci50YWJsZXM9ZC50YWJsZXMsR24udmlld2VyLnN0YXJ0dXBTZXQ9ITB9KS5jYXRjaChyZT0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihyZSl9KX1kLnRhYmxlPVRbMV0sZC50YWJsZUZsYWc9ITEsaD1kLmxpYkRhdGFzZXQsZC5saWJUYWI9aH1lbHNl'@;
put 'IEduLnZpZXdlci5zdGFydHVwU2V0P2QubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXM6eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld0xpYnMoKS50aGVuKFQ9PntkLmxpYnJhcmllcz1ULnNhc2xpYnN9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksdHlwZW9m'@;
put 'IGQudGFibGU8InUiJiYoR24udmlld2VyLnN0YXJ0dXBTZXQ/ZC50YWJsZXM9R24udmlld2VyLnRhYmxlczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGQubGliKS50aGVuKFQ9PntkLnRhYmxlcz1ULm1wdGFibGVzLm1hcChmdW5jdGlvbihZKXtyZXR1cm4gWS5NRU1OQU1F'@;
put 'fSl9KS5jYXRjaChUPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpLGQucm91dGVyLm5hdmlnYXRlKFsiL3ZpZXcvZGF0YSJdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KX0pLGQudGFibGVGbGFnPSExLGg9ZC5saWIrIi4iK2QudGFibGUsZC50YWJsZVRpdGxlPWgsZC5saWJU'@;
put 'YWI9aCk7ZC5yb3V0ZXIudXJsLnNwbGl0KCIvIikubGVuZ3RoPjMmJmgmJih5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShoLGEpLnRoZW4oVD0+e2lmKFQucXVlcnkubGVuZ3RoPjAmJiJ2aWV3Ij09PUduLnJvb3RQYXJhbSYmMD09PUduLnZpZXdlci5maWx0ZXIuY2xhdXNlcy5s'@;
put 'ZW5ndGgmJihHbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5PWQuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoVC5xdWVyeSksR24udmlld2VyLmZpbHRlci5saWJkcz1kLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0sZC5zYXNTdG9yZVNlcnZpY2UuaW5pdGlhbGl6ZUdsb2JhbEZpbHRlckNsYXVz'@;
put 'ZSgidmlld2VyIixULmNvbHMpKSxkLmFib3J0QWN0aXZlPSExLGQuZmlsdGVyQ29scz1ULmNvbHMsQ1UoZC5maWx0ZXJDb2xzLFtdLFQuJHZpZXdkYXRhKSxkLm51bWJlck9mUm93cz1ULnNhc3BhcmFtc1swXS5OT0JTLGQuaGVhZGVyUGtzPVQuc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxp'@;
put 'dCgiICIpLCJTQVM5Ij09PWQuc2FzanNDb25maWcuc2VydmVyVHlwZSl7bGV0IGtlPVQuc2FzcGFyYW1zWzBdLlRBQkxFVVJJO2tlJiZrZS5sZW5ndGg+MCYmKGQudGFibGV1cmk9a2UpfWQuaG90VGFibGUuZGF0YT1ULnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPVQuJHZpZXdkYXRhLGQuZHNt'@;
put 'ZXRhPVQuZHNtZXRhLGQudmVyc2lvbnM9VC52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLnF1ZXJ5VGV4dD1ULnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgWT1bXSxyZT1bXTtmb3IobGV0IGtlIGluIFQudmlld2RhdGFbMF0pa2UmJnJlLnB1c2goa2UpO2ZvcihsZXQga2U9MDtr'@;
put 'ZTxyZS5sZW5ndGg7a2UrKylZLnB1c2goe2RhdGE6cmVba2VdfSk7ZC5ob3RUYWJsZS5jb2xIZWFkZXJzPXJlLGQuaG90VGFibGUuY29sdW1ucz1ZLGQuaG90VGFibGUuY2VsbHM9ZnVuY3Rpb24oKXtyZXR1cm57cmVhZE9ubHk6ITB9fSxkLnRhYmxlRmxhZz0hMTtsZXQgX2U9W107X2U9aC5z'@;
put 'cGxpdCgiLiIpLGQubGliPV9lWzBdLGQudGFibGU9X2VbMV0sMD09PWQuaG90VGFibGUuZGF0YS5sZW5ndGg/KGQubm9EYXRhPSEwLGQudGFibGVGbGFnPSEwKTooZC5ub0RhdGE9ITEsZC50YWJsZUZsYWc9ITEpLGQubm9EYXRhUmVxRXJyPSExfSkuY2F0Y2goVD0+e2QubG9nZ2VyU2Vydmlj'@;
put 'ZS5lcnJvcihUKSxkLmFib3J0QWN0aXZlPSEwLGQubm9EYXRhUmVxRXJyPSEwfSkpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmaCYmZC5yb3V0ZXIubmF2aWdhdGUoMCE9PWE/WyIvdmlldy9kYXRhLyIraCsiLyIrYV06WyIvdmlldy9kYXRhLyIraF0se3F1ZXJ5UGFyYW1zSGFu'@;
put 'ZGxpbmc6InByZXNlcnZlIn0pO2xldCBmPWQudGFibGUsdj1kLmxpYnJhcmllcy5maW5kKFQ9PlQuTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7dj8oR24udmlld2VyLmxpYnJhcmllcy5sZW5ndGg+MCYmKGQubGlicmFyaWVzPUduLnZpZXdlci5saWJy'@;
put 'YXJpZXMsZC5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmllc1NlYXJjaCksZC5saWJyYXJ5T25DbGljayhkLmxpYix2LCEwKSk6ZC5saWJpbmZvPVtdLGQudGFibGU9Znx8ZC50YWJsZSxkLmxpYnJhcmllcyYmZC5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoZC5saWJy'@;
put 'YXJpZXMpLGQucm91dGVyLnVybC5pbmNsdWRlcygiL2RhdGEiKSYmZC5ldmVudFNlcnZpY2UuY2xvc2VTaWRlYmFyKCksZC5sb2FkaW5nVGFibGVWaWV3PSExLCFkLm5vRGF0YSYmIWQubm9EYXRhUmVxRXJyJiZoJiZkLnNldHVwSG90KCksZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXJ8fHNl'@;
put 'dFRpbWVvdXQoKCk9PntsZXQgVD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaG90SW5zdGFuY2UiKTtUJiYoVC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFk9PntzZXRUaW1lb3V0KCgpPT57bGV0IHJlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIp'@;
put 'fHx2b2lkIDA7cmUmJnJlLmNsaWNrKCl9LDEwMCl9KSxkLmhvdEluc3RhbmNlQ2xpY2tMaXN0ZW5lcj0hMCl9LDJlMyl9KSgpfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfW9wZW5RYigpe3RoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlz'@;
put 'LnNhc1N0b3JlU2VydmljZS5zZXRRdWVyeVZhcmlhYmxlcyh0aGlzLmxpYisiLiIrdGhpcy50YWJsZSx0aGlzLmZpbHRlckNvbHMpfXNlbmRDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2Euc3VibWl0TG9hZGluZz0hMDtsZXQgZD1bXSxoPVtdO2lmKHR5cGVvZiBh'@;
put 'LmNsYXVzZXM+InUiKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tsZXQgZj1hLmNsYXVzZXMucXVlcnlPYmo7aWYoZlswXS5lbGVtZW50cy5sZW5ndGg8MSlyZXR1cm4idmlldyI9PT1Hbi5yb290UGFyYW0mJihHbi52aWV3ZXIuZmlsdGVyLmNs'@;
put 'YXVzZXM9W10sR24udmlld2VyLmZpbHRlci5xdWVyeT1bXSxHbi52aWV3ZXIuZmlsdGVyLmdyb3VwTG9naWM9IiIpLHZvaWQgYS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkc10se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pO2ZvcihsZXQgdj0wO3Y8Zi5s'@;
put 'ZW5ndGg7disrKXtjb25zdCBUPWZbdl0uZWxlbWVudHM7ZD1ULmZpbHRlcihmdW5jdGlvbihZKXtyZXR1cm4gbnVsbD09PVkudmFyaWFibGV9KSxkLmxlbmd0aCYmaC5wdXNoKFQpfX1pZihoLmxlbmd0aClyZXR1cm4gYS5udWxsVmFyaWFibGVzPSEwLHZvaWQoYS5zdWJtaXRMb2FkaW5nPSEx'@;
put 'KTt7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKFQ9Pntjb25zdCBZPXtmaWx0ZXJDbGF1c2VzOltdfTtULmVsZW1lbnRzLmZvckVhY2gocmU9PntZLmZpbHRlckNsYXVzZXMucHVzaChh'@;
put 'LmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHJlKSl9KSxZLmNsYXVzZUxvZ2ljPVQuY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFkpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5'@;
put 'aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnkoYS5saWJkcyx2KS50aGVuKFQ9PnthLnF1ZXJ5VGV4dD1ULnJlc3VsdFswXS5GSUxURVJfVEVYVDtsZXQgWT1ULnJlc3VsdFswXS5GSUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrWV0s'@;
put 'e3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLGEudmlld0RhdGEoWSksYS5maWx0ZXI9ITF9KS5jYXRjaChUPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKFQpfSksYS5zdWJtaXRMb2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVD'@;
put 'bGF1c2UoKX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXNldERTTm90ZSgpe2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxk'@;
put 'PXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVNDIj09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERFU0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1z'@;
put 'ZXR1cEhvdCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5sb2FkaW5nVGFibGVWaWV3JiZ0aGlzLmxpYkRhdGFzZXQmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5z'@;
put 'dGFuY2UudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlzLmhvdFRhYmxlLmhlaWdodCxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihhLGQpe3JldHVybiBhPjUwMD81MDA6YX0sYWZ0ZXJHZXRDb2xIZWFkZXI6KGEsZCk9Pntjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChhKTto'@;
put 'JiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKGgpPi0xJiZkLmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpfX0pKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBXKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMCxhLnRhYmxlVGl0bGU9'@;
put 'YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtfHwwLGEudXJsRmlsdGVyUGs9cGFyc2VJbnQoYS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWR8fCIwIik7bGV0IGg9YS5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtO2EubGliRGF0YXNldD1oLGguaW5jbHVkZXMoIi4iKXx8'@;
put 'KGEubGliPWgpLHlpZWxkIGEudmlld0RhdGEoYS51cmxGaWx0ZXJQayksYS5ub0RhdGE/c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSEwfSwxMjAwKTpzZXRUaW1lb3V0KCgpPT57YS50YWJsZUZsYWc9ITF9LDEyMDApfSkoKX1sb2FkV2l0aG91dFBhcmFtZXRlcnMoKXt2YXIgYT10aGlz'@;
put 'O3JldHVybiBXKGZ1bmN0aW9uKigpe2Euc3dpdGNoRmxhZz0hMSxhLmxpYnJhcmllc0xvYWRpbmc9ITAsR24udmlld2VyLnN0YXJ0dXBTZXQ/c2V0VGltZW91dCgoKT0+e2EubGlicmFyaWVzPUduLnZpZXdlci5saWJyYXJpZXMsYS5saWJyYXJpZXNTZWFyY2g9R24udmlld2VyLmxpYnJhcmll'@;
put 'c1NlYXJjaCxhLmxpYj1Hbi52aWV3ZXIubGlicmFyeSxhLmxpYnJhcmllc1RyZWVFeHBhbmRlZD0hMCxhLmxpYnJhcmllc0xvYWRpbmc9ITEsYS5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXMoYS5saWJyYXJpZXMpfSwxMDApOihhLm5vRGF0YVJlcUVycj0hMSx5aWVsZCBhLnNhc1N0'@;
put 'b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e2EubGlicmFyaWVzPWQuc2FzbGlicyxHbi52aWV3ZXIubGlicmFyaWVzPWEubGlicmFyaWVzLEduLnZpZXdlci5zdGFydHVwU2V0PSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhh'@;
put 'LmxpYnJhcmllcyl9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLm5vRGF0YVJlcUVycj0hMH0pKX0pKCl9bmdBZnRlclZpZXdJbml0KCl7fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIFcoZnVuY3Rpb24q'@;
put 'KCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYoYS50YWJsZUZsYWc9ITApLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxhLmNsYXVzZXM9ZC5vYmosYS5saWJkcz1kLmxpYmRzfSksdHlwZW9mIGEucm91dGUu'@;
put 'c25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5sb2FkV2l0aFBhcmFtZXRlcnMoKTphLmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX1zdGF0aWMjZT10aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKHN0KGgxKSxzdChkaCksc3QoeWEpLHN0KHpzKSxzdChN'@;
put 'Yyksc3QoR2wpLHN0KGQxKSxzdChjdSksc3QocTEpLHN0KEZhKSl9O3N0YXRpYyN0PXRoaXMuXHUwMjc1Y21wPWtyKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC12aWV3ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZVbyhYbHQsNSksMiZkKXtsZXQgZjtNaShmPUNpKCkp'@;
put 'JiYoaC5xdWVyeUZpbHRlckNvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjk1LHZhcnM6MzAsY29uc3RzOltbImNsaUNvbW1hbmRJbnB1dCIsIiJdLFsic2VhcmNoTGliVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hUcmVlSW5wdXQiLCIiXSxbInF1'@;
put 'ZXJ5RmlsdGVyIiwiIl0sWyJzZWFyY2hFbCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIs'@;
put 'InctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJtb2RhbCB6LWluZGV4LWhpZ2hlc3QiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVu'@;
put 'Q2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIl0sWzEsIm1vZGFsLXRpdGxlIiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWzEsImNsci1jb2wtbWQtNiJdLFsxLCJkb3dubG9hZC1zZWxlY3QiXSxbImNsclNl'@;
put 'bGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInZhbHVlIiwiQ1NWIl0sWyJ2YWx1ZSIsIlNBUyJdLFsidmFsdWUiLCJQR1NRTF9EREwiXSxbInZhbHVlIiwiU0FTX0RETCJdLFsidmFsdWUiLCJUU1FMX0RETCJdLFsidmFsdWUiLCJFWENFTCJdLFsidmFsdWUiLCJNQVJL'@;
put 'RE9XTiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJpZCJdLFsxLCJtb2Rh'@;
put 'bC1ib2R5Iiwid2ViLXF1ZXJ5Il0sWzEsInJvdyJdLFsxLCJjbHItY29sLWxnLTEyIiwiY2xyLWNvbC1tZC0xMiIsImNsci1jb2wtc20tMTIiLCJjbHItY29sLXhzLTEyIl0sWzEsImNhcmQiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsx'@;
put 'LCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNhcmQtYmxvY2siLCJ3b3JkLWJyZWFrLWFsbCJdLFsicm93cyIsIjQiLCJjb2xzIiwiNTAiLCJ0eXBl'@;
put 'IiwidGV4dCIsInJlYWRvbmx5IiwiIiwxLCJ3ZWItcXVlcnktdGV4dCIsInctMTAwIiwzLCJmb2N1cyIsInZhbHVlIl0sWzEsImNhcmQtZm9vdGVyIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayIsIm5neENsaXBib2FyZCJdLFsiYXJpYS1tb2RhbCIsInRydWUiLDEs'@;
put 'ImZpbHRlci1tb2RhbCIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJi'@;
put 'dXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiYnRuLXNtIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3Bl'@;
put 'biJdLFsxLCJtb2RhbC10aXRsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNz'@;
put 'IiwiY2FyZCBoLTEwMCBkLWZsZXggY2xyLWZsZXgtY29sdW1uIiw0LCJuZ0lmIl0sWzMsIm9wZW5DaGFuZ2UiLCJyb3dDbGlja2VkIiwib3BlbiIsImRzbWV0YSIsInZlcnNpb25zIl0sWzMsInZpZXdib3hNb2RhbENoYW5nZSIsInZpZXdib3hNb2RhbCJdLFsxLCJteS0xMC1teC1hdXRvIiwi'@;
put 'dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hh'@;
put 'bmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmci'@;
put 'LCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2st'@;
put 'c2VydmVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJpZCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xh'@;
put 'c3MiLCJjbHItdHJlZW5vZGUtbGluayIsMywiZGMtbG9ja2VkLWNvbnRyb2wiLCJ0YWJsZS1hY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0'@;
put 'Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hhcGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIs'@;
put 'ImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFs'@;
put 'b2ciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJDbG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20i'@;
put 'LCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFja2Ryb3AiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwiaGVhZGVy'@;
put 'LXJvdyBjbHItcm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIsNCwibmdJZiJdLFsi'@;
put 'Y2xhc3MiLCJjbHItZmxleC0xIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIs'@;
put 'Im0tMCJdLFsxLCJmb3JtLWJsb2NrIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2Vh'@;
put 'cmNoIiwibmFtZSIsInNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3gi'@;
put 'LCIiLCJuYW1lIiwibnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWzEsInZpZXdlclRpdGxlIiwiY2xyLWZsZXgtY29sdW1uIiwiZC1mbGV4'@;
put 'IiwiY2xyLWZsZXgtc20tcm93IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUi'@;
put 'LCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyBtci01Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsNCwibmdJZiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wt'@;
put 'bWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXIt'@;
put 'aW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIsIm1yLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJj'@;
put 'bHJTaXplIiwibGciXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0'@;
put 'bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lkZSJdLFsic2hhcGUiLCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNs'@;
put 'aWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImRvd25sb2FkLWNsb3VkIl0sWyJzaGFwZSIsInBlbmNpbCJdLFsic2hhcGUi'@;
put 'LCJzd2l0Y2giXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyIsImljb24tZGMtZmlsbCJdLFsxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiXSxb'@;
put 'MSwiaGVhZGVyLXJvdyIsImNsci1yb3ciLCJib3JkZXItYm90dG9tLWRpdmlkZXIiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiIsInctMTAwIiwibS0wIl0sWzEsInRpdGxlLWNvbCIsImNsci1jb2wtYXV0byJdLFsxLCJ2aWV3ZXJUaXRsZSIsIm10LTE3Il0sWzEsInRleHQtY2VudGVyIiwi'@;
put 'bXQtMTAiXSxbImNsck1lZGl1bSIsIiIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZC1pbmZvIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQsIm5nSWYiXSxbImNsYXNzIiwibGliaW5mbyBtLTAgY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJuby10YWJsZS1zZWxlY3RlZC1pbmZv'@;
put 'IiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic2hhcGUiLCJpbmZvLXN0YW5kYXJkIiwic2l6ZSIsIjQwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsImxpYmluZm8iLCJtLTAiLCJjbHItcm93Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIG0tMCB3LTEwMCIsNCwibmdJZiJdLFsx'@;
put 'LCJ0ZXh0LWNlbnRlciIsIm0tMCIsInctMTAwIl0sWyJzaGFwZSIsInJlZnJlc2giLDEsInJlZnJlc2gtdGFibGUiLCJtLTAiLDMsImNsaWNrIl0sWzEsIm0tMCJdLFsxLCJtLTAiLCJmb250LWJvbGQiXSxbMSwiY2FyZC1ibG9jayIsIm5vRGF0YSJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5k'@;
put 'YXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIGNvbG9yLWdyYXkiLDQsIm5nSWYiXSxbMSwiY2xyLWZsZXgtMSJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJzdHJldGNoSCIsImFsbCIsMywibXVsdGlDb2x1bW5Tb3J0'@;
put 'aW5nIiwidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsImZpbHRlcnMiLCJkcm9wZG93bk1lbnUiLCJoZWlnaHQiLCJtb2RpZnlDb2xXaWR0aCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVh'@;
put 'bENvbHVtblJlc2l6ZSIsInJvd0hlYWRlcnMiLCJyb3dIZWFkZXJXaWR0aCIsInJvd0hlaWdodHMiLCJsaWNlbnNlS2V5Il0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9SG4oKTtnZSgwLCJhcHAtc2lk'@;
put 'ZWJhciIsNSksSHQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIFN0KGYpLHh0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxidCgxLFFsdCwyLDAsImRpdiIsNiksZ2UoMiwiY2xyLXRyZWUiKSxidCgzLG5jdCw2LDMsImNsci10cmVlLW5vZGUiLDcpKDQscGN0LDIsMSwi'@;
put 'bmctY29udGFpbmVyIiw4KSxiZSgpLGJ0KDUsbWN0LDMsMCwiZGl2Iiw5KSxiZSgpLGdlKDYsImRpdiIsMTApLGJ0KDcsZ2N0LDE0LDAsImRpdiIsMTEpKDgsX2N0LDEsMCwiZGl2IiwxMiksZ2UoOSwiY2xyLW1vZGFsIiwxMyksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7'@;
put 'cmV0dXJuIFN0KGYpLHFyKGgub3BlbkRvd25sb2FkLFQpfHwoaC5vcGVuRG93bmxvYWQ9VCkseHQoVCl9KSxnZSgxMCwiaDMiLDE0KSx6ZSgxMSwiRG93bmxvYWQiKSxiZSgpLGdlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsImNsci1zZWxlY3QtY29udGFpbmVyIiwxNykoMTUsImxh'@;
put 'YmVsIiksemUoMTYsIlBsZWFzZSBjaG9vc2UgZG93bmxvYWQgZm9ybWF0IiksYmUoKSxnZSgxNywic2VsZWN0IiwxOCksR3IoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSxxcihoLmRvd25sb2FkRm9ybWF0LFQpfHwoaC5kb3dubG9hZEZvcm1hdD1UKSx4dChUKX0p'@;
put 'LGdlKDE4LCJvcHRpb24iLDE5KSx6ZSgxOSwiQ1NWIiksYmUoKSxnZSgyMCwib3B0aW9uIiwyMCksemUoMjEsIkRhdGFsaW5lcyAoY2FyZHMgZmlsZSkiKSxiZSgpLGdlKDIyLCJvcHRpb24iLDIxKSx6ZSgyMywiRERMIChQR1NRTCBGbGF2b3VyKSIpLGJlKCksZ2UoMjQsIm9wdGlvbiIsMjIp'@;
put 'LHplKDI1LCJEREwgKFNBUyBGbGF2b3VyKSIpLGJlKCksZ2UoMjYsIm9wdGlvbiIsMjMpLHplKDI3LCJEREwgKFRTUUwgRmxhdm91cikiKSxiZSgpLGdlKDI4LCJvcHRpb24iLDI0KSx6ZSgyOSwiRXhjZWwgKC54bHN4KSIpLGJlKCksZ2UoMzAsIm9wdGlvbiIsMjUpLHplKDMxLCJNYXJrZG93'@;
put 'biAoLm1kKSIpLGJlKCkoKSgpKCkoKSxnZSgzMiwiZGl2IiwyNikoMzMsImJ1dHRvbiIsMjcpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5vcGVuRG93bmxvYWQ9ITEpfSksemUoMzQsIiBDYW5jZWwgIiksYmUoKSxnZSgzNSwiYnV0dG9uIiwyOCksSHQoImNsaWNr'@;
put 'IixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmRvd25sb2FkRm9ybWF0LmluY2x1ZGVzKCJEREwiKT9oLmRvd25sb2FkRERMKCk6aC5kb3dubG9hZERhdGEoKSl9KSx6ZSgzNiwiIE9rICIpLGJlKCkoKSgpLGdlKDM3LCJjbHItbW9kYWwiLDEzKSxHcigiY2xyTW9kYWxPcGVuQ2hhbmdl'@;
put 'IixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC53ZWJRdWVyeSxUKXx8KGgud2ViUXVlcnk9VCkseHQoVCl9KSxnZSgzOCwiaDMiLDE0KSx6ZSgzOSwiIFdlYiBRdWVyeSBVUkwgIiksYmUoKSxnZSg0MCwiZGl2IiwyOSkoNDEsImRpdiIsMzApKDQyLCJkaXYiLDMxKSg0MywiZGl2Iiwz'@;
put 'MikoNDQsImRpdiIsMzMpKDQ1LCJzcGFuIiksemUoNDYsIkNvcHkgdGhlIGJlbG93IGludG8geW91ciBwcmVmZXJyZWQgY2xpZW50IHRvb2w6IiksYmUoKSxnZSg0NywiZGl2IiwzNCkoNDgsImRpdiIsMzUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZiksaC53ZWJRdWVyeVRh'@;
put 'Yj0hMCx4dChoLnNob3dXZWJRdWVyeSgpKX0pLEp0KDQ5LCJpbnB1dCIsMzYpLGdlKDUwLCJsYWJlbCIpLHplKDUxLCJUQUIiKSxiZSgpKCksZ2UoNTIsImRpdiIsMzUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZiksaC53ZWJRdWVyeVRhYj0hMSx4dChoLnNob3dXZWJRdWVy'@;
put 'eSgpKX0pLEp0KDUzLCJpbnB1dCIsMzYpLGdlKDU0LCJsYWJlbCIpLHplKDU1LCJDU1YiKSxiZSgpKCkoKSgpLGdlKDU2LCJkaXYiLDM3KSg1NywidGV4dGFyZWEiLDM4LDApLEh0KCJmb2N1cyIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHh0KGgub25DbGlDb21tYW5kRm9jdXMoVCkpfSks'@;
put 'emUoNTksIiAgICAgICAgICAgICAgIiksYmUoKSgpLGdlKDYwLCJkaXYiLDM5KSg2MSwiYnV0dG9uIiw0MCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLmNvcHlUb0NsaXAoKSl9KSx6ZSg2MiwiIGNvcHkgdG8gY2xpcGJvYXJkICIpLGJlKCkoKSgpKCkoKSgpLGdl'@;
put 'KDYzLCJkaXYiLDI2KSg2NCwiYnV0dG9uIiwyNyksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLndlYlF1ZXJ5PSExKX0pLHplKDY1LCIgY2xvc2UgIiksYmUoKSgpKCksZ2UoNjYsImNsci1tb2RhbCIsNDEpLEdyKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9u'@;
put 'KFQpe3JldHVybiBTdChmKSxxcihoLmZpbHRlcixUKXx8KGguZmlsdGVyPVQpLHh0KFQpfSksZ2UoNjcsImgzIiwxNCksemUoNjgsIiBGaWx0ZXIgZm9yIHRhYmxlOiIpLGdlKDY5LCJzcGFuIiksemUoNzApLGJlKCkoKSxnZSg3MSwiZGl2IiwxNSksYnQoNzIsdmN0LDIsMCwiYXBwLXF1ZXJ5'@;
put 'Iiw0MiksYmUoKSxnZSg3MywiZGl2IiwyNikoNzQsImJ1dHRvbiIsNDMpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5yZXNldEZpbHRlcigpKX0pLHplKDc1LCIgcmVzZXQgZmlsdGVyICIpLGJlKCksZ2UoNzYsImJ1dHRvbiIsNDQpLEh0KCJjbGljayIsZnVuY3Rp'@;
put 'b24oKXtyZXR1cm4gU3QoZiksaC5maWx0ZXI9ITEseHQoaC5yZW1vdmVRdWVyeSgpKX0pLHplKDc3LCIgQ2FuY2VsICIpLGJlKCksZ2UoNzgsImJ1dHRvbiIsNDUpLEh0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5zZW5kQ2xhdXNlKCkpfSksemUoNzksIiBPayAiKSxi'@;
put 'ZSgpKCkoKSxnZSg4MCwiY2xyLW1vZGFsIiw0NiksR3IoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGgucXVlcnlFcnIsVCl8fChoLnF1ZXJ5RXJyPVQpLHh0KFQpfSksZ2UoODEsImgzIiw0NyksemUoODIsIkVycm9yIiksYmUoKSxnZSg4MywiZGl2'@;
put 'IiwxNSkoODQsInAiKSx6ZSg4NSksYmUoKSgpLGdlKDg2LCJkaXYiLDI2KSg4NywiYnV0dG9uIiw0OCksSHQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBTdChmKSx4dChoLnF1ZXJ5RXJyPSExKX0pLHplKDg4LCIgQ2FuY2VsICIpLGJlKCksZ2UoODksImJ1dHRvbiIsNDkpLEh0KCJjbGlj'@;
put 'ayIsZnVuY3Rpb24oKXtyZXR1cm4gU3QoZikseHQoaC5xdWVyeUVycj0hMSl9KSx6ZSg5MCwiIE9rICIpLGJlKCkoKSgpLGJ0KDkxLHljdCw2LDAsImRpdiIsNTApKDkyLHR1dCw4LDYsImRpdiIsNTEpLGJlKCksZ2UoOTMsImFwcC1kYXRhc2V0LWluZm8iLDUyKSxHcigib3BlbkNoYW5nZSIs'@;
put 'ZnVuY3Rpb24oVCl7cmV0dXJuIFN0KGYpLHFyKGguZGF0YXNldEluZm8sVCl8fChoLmRhdGFzZXRJbmZvPVQpLHh0KFQpfSksSHQoInJvd0NsaWNrZWQiLGZ1bmN0aW9uKFQpe3JldHVybiBTdChmKSx4dChoLmRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKFQpKX0pLGJlKCksZ2UoOTQsImFw'@;
put 'cC12aWV3Ym94ZXMiLDUzKSxHcigidmlld2JveE1vZGFsQ2hhbmdlIixmdW5jdGlvbihUKXtyZXR1cm4gU3QoZikscXIoaC52aWV3Ym94T3BlbixUKXx8KGgudmlld2JveE9wZW49VCkseHQoVCl9KSxiZSgpfWlmKDImZCl7Y29uc3QgZj1YaSg1OCk7d2UoKSxQZSgibmdJZiIsaC5saWJyYXJp'@;
put 'ZXNMb2FkaW5nKSx3ZSgyKSxQZSgibmdJZiIsaC5saWJyYXJpZXMpLHdlKCksUGUoIm5nRm9yT2YiLGgubGlicmFyaWVzKSx3ZSgpLFBlKCJuZ0lmIixoLmxpYnJhcmllc1BhZ2luZyksd2UoMiksUGUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksd2UoKSxQZSgibmdJZiIsaC5udWxsVmFyaWFi'@;
put 'bGVzKSx3ZSgpLFdyKCJjbHJNb2RhbE9wZW4iLGgub3BlbkRvd25sb2FkKSxQZSgiY2xyTW9kYWxTaXplIiwibWQiKSx3ZSg4KSxXcigibmdNb2RlbCIsaC5kb3dubG9hZEZvcm1hdCksd2UoMTgpLFBlKCJpZCIsaC50YWJsZVRpdGxlKSx3ZSgyKSxXcigiY2xyTW9kYWxPcGVuIixoLndlYlF1'@;
put 'ZXJ5KSxQZSgiY2xyTW9kYWxTaXplIiwibGciKSx3ZSgxMiksUGUoImNoZWNrZWQiLGgud2ViUXVlcnlUYWIpLHdlKDQpLFBlKCJjaGVja2VkIiwhaC53ZWJRdWVyeVRhYiksd2UoNCksazQoInZhbHVlIixoLndlYlF1ZXJ5VGV4dCksd2UoNCksUGUoIm5neENsaXBib2FyZCIsZiksd2UoNSks'@;
put 'V3IoImNsck1vZGFsT3BlbiIsaC5maWx0ZXIpLFBlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksd2UoNCkseHIoIiAiLGgubGliVGFiLCIgIiksd2UoMiksUGUoIm5nSWYiLGguZmlsdGVyKSx3ZSg2KSxQZSgiY2xyTG9hZGluZyIsaC5zdWJtaXRMb2FkaW5n'@;
put 'KSx3ZSgyKSxXcigiY2xyTW9kYWxPcGVuIixoLnF1ZXJ5RXJyKSx3ZSg1KSxwcihoLnF1ZXJ5RXJyTWVzc2FnZSksd2UoNiksUGUoIm5nSWYiLGgubG9hZGluZ1RhYmxlVmlldyksd2UoKSxQZSgibmdJZiIsIWgubG9hZGluZ1RhYmxlVmlldyksd2UoKSxXcigib3BlbiIsaC5kYXRhc2V0SW5m'@;
put 'byksUGUoImRzbWV0YSIsaC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksd2UoKSxXcigidmlld2JveE1vZGFsIixoLnZpZXdib3hPcGVuKX19LGRlcGVuZGVuY2llczpbYmNlLExzLHFpLFVkLGNmLEdsdCx0ZyxuZCxyZCxUbCxmMSx0ZCxjYSxRNSxvYSx2ZixyaCx1ZCxXNCxaYSxC'@;
put 'dSxZdSxyMCxYZCxvMixYcyxBbmUsdjEsTzcsXzEsYWQsejcsWTcsdHAsVGcsRGcsZTksdDkscjksbjksbmgsTHcseXAsQ2NlLG5ULElVLCQ5LHhjZSxLbHRdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjA7ZmxleDoxO2Rpc3BsYXk6ZmxleDtmbGV4LWRp'@;
put 'cmVjdGlvbjpjb2x1bW59Y2xyLXRyZWUtbm9kZVtfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOm5vd3JhcH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVD'@;
put 'T01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMzMTQzNTE7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxIWltcG9ydGFudDt0cmFuc2l0aW9uOi4xNXMgZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OmJvcmRlci1jb2xvcixiYWNr'@;
put 'Z3JvdW5kLWNvbG9yfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50aXRsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAgLm9wdGlvbnMtY29sW19uZ2NvbnRlbnQt'@;
put 'JUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5zd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjFyZW0gMHJlbSAuNXJlbSAxcmVtfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjEwcHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9y'@;
put 'OiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHh9LmZpbHRlclNpZGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MjZweDttYXJnaW4tYm90dG9tOjE5cHh9Lm9wdGlvbnMtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaWNv'@;
put 'bnttYXJnaW4tcmlnaHQ6NXB4fS52aWV3ZXJUaXRsZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWJvdHRvbToxNXB4O21hcmdpbi10b3A6MTZweH0uZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTgwcHg7bWFyZ2luLXRvcDotMThw'@;
put 'eDtwYWRkaW5nOjB9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTt0ZXh0LXRyYW5zZm9ybTpub25lfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50'@;
put 'ZXJ9Lm5vRGF0YVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4OjF9LmZpbHRlckJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnkt'@;
put 'Y29udGVudDpmbGV4LWVuZH0uZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5idG5WaWV3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCFpbXBvcnRhbnR9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17'@;
put 'cGFkZGluZzouNXJlbSFpbXBvcnRhbnQ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZG93bmxvYWQtc2VsZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OnVuc2V0IWltcG9ydGFudH0ucmVmcmVzaC10YWJsZVtfbmdj'@;
put 'b250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS5saWJpbmZvW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjEwcHggMjBweDtvdmVyZmxvdzphdXRvfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFj'@;
put 'a2dyb3VuZDojMzA2YjAwNmV9Lm5vLXRhYmxlLXNlbGVjdGVkLWluZm9bX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6bm9uZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXXttYXgt'@;
put 'aGVpZ2h0OjM1dmh9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAud2ViLXF1ZXJ5LXRleHRbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MTAwcHg7bWF4LWhlaWdodDoxMDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LmZpbHRlckJ0bltfbmdj'@;
put 'b250ZW50LSVDT01QJV0sIC5lZGl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6IDU3NnB4KXsucm93W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tcmlnaHQ6MHJlbTttYXJnaW4tbGVmdDowcmVt'@;
put 'fX0iXX0pfXJldHVybiBjfSkoKTtjb25zdCBudXQ9W3twYXRoOiIiLGNvbXBvbmVudDpIYXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoiZGF0YSJ9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6WUF9LHtwYXRoOiJkYXRhIixjb21wb25lbnQ6WUF9LHtw'@;
put 'YXRoOiJkYXRhLzpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6WUF9LHtwYXRoOiJkYXRhLzpsaWJNZW0iLGNvbXBvbmVudDpZQX0se3BhdGg6ImxpbmVhZ2UiLGNvbXBvbmVudDpCQX0se3BhdGg6ImxpbmVhZ2UvOnRhYmxlaWQvOmRpcmVjdGlvbiIsY29tcG9uZW50OkJBfSx7cGF0aDoi'@;
put 'bGluZWFnZS9jb2x1bW4vOmNvbHVyaS86ZGlyZWN0aW9uIixjb21wb25lbnQ6QkF9LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24vOnJlbG9hZCIsY29tcG9uZW50OkJBfSx7cGF0aDoidml5YS1hcGktZXhwbG9yZXIiLGNvbXBvbmVudDpVbHR9LHtwYXRoOiJtZXRh'@;
put 'ZGF0YSIsY29tcG9uZW50OnhafSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50OnhafSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRC86b2JqZWN0TmFtZSIsY29tcG9uZW50OnhafSx7cGF0aDoidXNlcm5hdiIsY29tcG9uZW50OkZhdCxjaGlsZHJl'@;
put 'bjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJncm91cHMifSx7cGF0aDoidXNlcnMiLGNvbXBvbmVudDpwMGV9LHtwYXRoOiJ1c2Vycy86dXJpIixjb21wb25lbnQ6cDBlfSx7cGF0aDoiZ3JvdXBzIixjb21wb25lbnQ6V2NlfSx7cGF0aDoiZ3JvdXBzLzp1cmkiLGNv'@;
put 'bXBvbmVudDpXY2V9LHtwYXRoOiJyb2xlcyIsY29tcG9uZW50OmYwZX0se3BhdGg6InJvbGVzLzp1cmkiLGNvbXBvbmVudDpmMGV9XX1dfV07bGV0IHJ1dD0oKCk9PntjbGFzcyBje3N0YXRpYyNlPXRoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyN0'@;
put 'PXRoaXMuXHUwMjc1bW9kPXNpKHt0eXBlOmN9KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7aW1wb3J0czpbV2MuZm9yQ2hpbGQobnV0KSxXY119KX1yZXR1cm4gY30pKCksaXV0PSgoKT0+e2NsYXNzIGN7c3RhdGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l'@;
put 'dyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Y30pO3N0YXRpYyNuPXRoaXMuXHUwMjc1aW5qPV9pKHtpbXBvcnRzOltEY2UsbW8scnV0LCRsdCxDYyxzMCx4OS5mb3JSb290KCksRzksVzksYU0sT1UseTJdfSl9cmV0dXJuIGN9KSgpO2NvbnN0IHN1dD1XYy5mb3JS'@;
put 'b290KFt7cGF0aDoiIixyZWRpcmVjdFRvOiJob21lIixwYXRoTWF0Y2g6ImZ1bGwifSx7cGF0aDoidmlldyIsbG9hZENoaWxkcmVuOigpPT5pdXR9LHtwYXRoOiJyZXZpZXciLGNvbXBvbmVudDpmZXQsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidG9h'@;
put 'cHByb3ZlIn0se3BhdGg6IiIsbG9hZENoaWxkcmVuOigpPT5oZXR9XX0se3BhdGg6ImxpY2Vuc2luZyIsbG9hZENoaWxkcmVuOigpPT5JSmV9LHtwYXRoOiJob21lIixsb2FkQ2hpbGRyZW46KCk9PkdYZX0se3BhdGg6ImVkaXRvciIsbG9hZENoaWxkcmVuOigpPT5PS2V9LHtwYXRoOiJzdGFn'@;
put 'ZSIsbG9hZENoaWxkcmVuOigpPT5DZXR9LHtwYXRoOiJzeXN0ZW0iLGxvYWRDaGlsZHJlbjooKT0+SGV0fSx7cGF0aDoiZGVwbG95Iixsb2FkQ2hpbGRyZW46KCk9PmVPZX0se3BhdGg6IioqIixjb21wb25lbnQ6Z1JlfV0se3VzZUhhc2g6ITB9KTtsZXQgYXV0PSgoKT0+e2NsYXNzIGN7c3Rh'@;
put 'dGljI2U9dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX07c3RhdGljI3Q9dGhpcy5cdTAyNzVtb2Q9c2koe3R5cGU6Yyxib290c3RyYXA6W2tMZV19KTtzdGF0aWMjbj10aGlzLlx1MDI3NWluaj1faSh7cHJvdmlkZXJzOltXayxkaCxGVV0saW1wb3J0czpbbVJl'@;
put 'LHNLLENjLEx2ZSxzZ2Usc3V0LFc5LHMwLEc5LGFNLHkyLE1sdF19KX1yZXR1cm4gY30pKCk7aHBlKCkuYm9vdHN0cmFwTW9kdWxlKGF1dCl9LDM3MzQ6KCRlLFNlLFIpPT57dmFyIGVlPVIoMjkyOTMpLmRlZmF1bHQ7c2VsZiwkZS5leHBvcnRzPSgoKT0+e3ZhciBiPXsyNjU2OmZ1bmN0aW9u'@;
put 'KHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEUpe3JldHVybiBFJiZFLl9fZXNNb2R1bGU/RTp7ZGVmYXVsdDpFfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZGVjb2RlVG9r'@;
put 'ZW49QS5oYXNUb2tlbkV4cGlyZWQ9QS5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPUEuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPXZvaWQgMDt2YXIgVT1QKEQoNjI0NSkpO2Z1bmN0aW9uIEkoRSxrKXtyZXR1cm4oMCxVLmRlZmF1bHQpKEUpLmV4cC0obmV3IERhdGUpLnZhbHVlT2YoKS8xZTM8PWt9'@;
put 'QS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9ZnVuY3Rpb24oRSxrKXtyZXR1cm4gdm9pZCAwPT09ayYmKGs9MzYwMCksIUV8fEkoRSxrKX0sQS5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uKEUsayl7cmV0dXJuIHZvaWQgMD09PWsmJihrPTMwKSwhRXx8SShFLGspfSxBLmhhc1Rva2Vu'@;
put 'RXhwaXJlZD1mdW5jdGlvbihFKXtyZXR1cm4hRXx8SShFLDApfSxBLmRlY29kZVRva2VuPWZ1bmN0aW9uKEUpe3ZhciBrO3RyeXtrPSgwLFUuZGVmYXVsdCkoRSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRva2VuIHN1cHBsaWVkLiIpfXJldHVybiBrfX0sNjc5OTpmdW5jdGlv'@;
put 'bih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLEUsayxCKXt2b2lkIDA9PT1CJiYoQj1rKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxCLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBFW2tdfX0pfTpmdW5jdGlvbihJLEUsayxCKXt2b2lkIDA9PT1CJiYoQj1rKSxJW0JdPUVba119KSxVPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLEUpe2Zvcih2YXIgayBpbiBJKSJkZWZhdWx0Ij09PWt8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChFLGspfHxQKEUsSSxrKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFUoRCgyNjU2KSxBKX0sMzI1OTpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBEPU9i'@;
put 'amVjdC5hc3NpZ258fGZ1bmN0aW9uKFApe2Zvcih2YXIgVSxJPTEsRT1hcmd1bWVudHMubGVuZ3RoO0k8RTtJKyspZm9yKHZhciBrIGluIFU9YXJndW1lbnRzW0ldKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChVLGspJiYoUFtrXT1VW2tdKTtyZXR1cm4gUH0sRC5hcHBs'@;
put 'eSh0aGlzLGFyZ3VtZW50cyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnByZWZpeE1lc3NhZ2U9dm9pZCAwLEEucHJlZml4TWVzc2FnZT1mdW5jdGlvbihQLFUpe2lmKCJvYmplY3QiPT10eXBlb2YgUClpZihQLmhhc093blByb3BlcnR5KCJt'@;
put 'ZXNzYWdlIikpUC5tZXNzYWdlPVUrUC5tZXNzYWdlO2Vsc2V7aWYoIVAuaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gRChEKHt9LFApLHttZXNzYWdlOlV9KTtpZigib2JqZWN0Ij09dHlwZW9mIFAuYm9keSYmKFAubWVzc2FnZT1QLmJvZHkubWVzc2FnZT9VK1AuYm9keS5tZXNzYWdl'@;
put 'OlUpLCJzdHJpbmciPT10eXBlb2YgUC5ib2R5KXt2YXIgST12b2lkIDA7dHJ5e0k9SlNPTi5wYXJzZShQLmJvZHkpfWNhdGNoe3JldHVybiBQLm1lc3NhZ2U9VSxQfXJldHVybiBJLm1lc3NhZ2U9SS5tZXNzYWdlP1UrSS5tZXNzYWdlOlUsUC5ib2R5PUksUH19cmV0dXJuInN0cmluZyI9PXR5'@;
put 'cGVvZiBQJiYoUD1VK1ApLFB9fSw5Nzc4OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLEIs'@;
put 'e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVba119fSl9OmZ1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspLElbQl09RVtrXX0pLFU9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksRSl7Zm9yKHZhciBrIGluIEkpImRlZmF1bHQiPT09a3x8'@;
put 'T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsayl8fFAoRSxJLGspfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVShEKDMyNTkpLEEpLFUoRCgxMDY0KSxBKX0sMTA2NDpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3Zh'@;
put 'ciBQLFU9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChQPWZ1bmN0aW9uKE4sVil7cmV0dXJuKFA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKFosVyl7Wi5fX3Byb3RvX189V318fGZ1bmN0aW9uKFosVyl7Zm9yKHZhciB6IGlu'@;
put 'IFcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFcseikmJihaW3pdPVdbel0pfSkoTixWKX0sZnVuY3Rpb24oTixWKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgViYmbnVsbCE9PVYpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhW'@;
put 'KSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBaKCl7dGhpcy5jb25zdHJ1Y3Rvcj1OfVAoTixWKSxOLnByb3RvdHlwZT1udWxsPT09Vj9PYmplY3QuY3JlYXRlKFYpOihaLnByb3RvdHlwZT1WLnByb3RvdHlwZSxuZXcgWil9KSxJPXRoaXMmJnRoaXMuX19yZWFk'@;
put 'fHxmdW5jdGlvbihOLFYpe3ZhciBaPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJk5bU3ltYm9sLml0ZXJhdG9yXTtpZighWilyZXR1cm4gTjt2YXIgVyx6LHE9Wi5jYWxsKE4pLFE9W107dHJ5e2Zvcig7KHZvaWQgMD09PVZ8fFYtLSA+MCkmJiEoVz1xLm5leHQoKSkuZG9uZTspUS5wdXNo'@;
put 'KFcudmFsdWUpfWNhdGNoKHRlKXt6PXtlcnJvcjp0ZX19ZmluYWxseXt0cnl7VyYmIVcuZG9uZSYmKFo9cS5yZXR1cm4pJiZaLmNhbGwocSl9ZmluYWxseXtpZih6KXRocm93IHouZXJyb3J9fXJldHVybiBRfSxFPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oTixWLFope2lm'@;
put 'KFp8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgVyx6PTAscT1WLmxlbmd0aDt6PHE7eisrKSFXJiZ6IGluIFZ8fChXfHwoVz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChWLDAseikpLFdbel09Vlt6XSk7cmV0dXJuIE4uY29uY2F0KFd8fEFycmF5LnByb3RvdHlwZS5zbGljZS5j'@;
put 'YWxsKFYpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuU2VydmVyVHlwZUVycm9yPXZvaWQgMDt2YXIgaz1EKDM5MDApLEI9ZnVuY3Rpb24oTil7ZnVuY3Rpb24gVihaKXt2b2lkIDA9PT1aJiYoWj1bXSk7dmFyIFc9dGhpcyx6PShaPUUoW10s'@;
put 'SShuZXcgU2V0KFopKSwhMSkpLmxlbmd0aD9aLmpvaW4oIiwgIikudHJpbSgpOltrLlNlcnZlclR5cGUuU2FzVml5YSxrLlNlcnZlclR5cGUuU2FzOSxrLlNlcnZlclR5cGUuU2FzanNdLmpvaW4oIiwgIikudHJpbSgpO3JldHVybiB6PXoucmVwbGFjZSgvLFxzKFteLF0qKSQvLCIgYW5kICQx'@;
put 'IiksKFc9Ti5jYWxsKHRoaXMsIkludmFsaWQgc2VydmVyIHR5cGU6IHZhbGlkIG9wdGlvbiIuY29uY2F0KDEhPT1aLmxlbmd0aD8icyI6IiIsIiAiKS5jb25jYXQoMSE9PVoubGVuZ3RoPyJhcmUiOiJpcyIsIiAiKS5jb25jYXQoeikpfHx0aGlzKS5uYW1lPSJTZXJ2ZXJUeXBlRXJyb3IiLE9i'@;
put 'amVjdC5zZXRQcm90b3R5cGVPZihXLFYucHJvdG90eXBlKSxXfXJldHVybiBVKFYsTiksVn0oRXJyb3IpO0EuU2VydmVyVHlwZUVycm9yPUJ9LDM5MDY6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWixXLHoscSl7cmV0'@;
put 'dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oUSx0ZSl7ZnVuY3Rpb24gYWUobGUpe3RyeXtkZShxLm5leHQobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZShsZSl7dHJ5e2RlKHEudGhyb3cobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBkZShsZSl7dmFy'@;
put 'IGNlO2xlLmRvbmU/UShsZS52YWx1ZSk6KGNlPWxlLnZhbHVlLGNlIGluc3RhbmNlb2Ygej9jZTpuZXcgeihmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKGFlLHNlKX1kZSgocT1xLmFwcGx5KFosV3x8W10pKS5uZXh0KCkpfSl9LFU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24o'@;
put 'WixXKXt2YXIgeixxLFEsdGUsYWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmUVswXSl0aHJvdyBRWzFdO3JldHVybiBRWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5'@;
put 'bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGRlKXtyZXR1cm4gZnVuY3Rpb24obGUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoeil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp'@;
put 'bmcuIik7Zm9yKDthZTspdHJ5e2lmKHo9MSxxJiYoUT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoUT1xLnJldHVybikmJlEuY2FsbChxKSwwKTpxLm5leHQpJiYhKFE9US5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBRO3N3aXRjaChxPTAsUSYmKGNlPVsyJmNlWzBdLFEu'@;
put 'dmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTpRPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYWUubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1OmFlLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPWFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgp'@;
put 'O2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoUT0oUT1hZS50cnlzKS5sZW5ndGg+MCYmUVtRLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7YWU9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighUXx8Y2VbMV0+UVswXSYmY2VbMV08UVszXSkpe2FlLmxhYmVsPWNlWzFdO2JyZWFr'@;
put 'fWlmKDY9PT1jZVswXSYmYWUubGFiZWw8UVsxXSl7YWUubGFiZWw9UVsxXSxRPWNlO2JyZWFrfWlmKFEmJmFlLmxhYmVsPFFbMl0pe2FlLmxhYmVsPVFbMl0sYWUub3BzLnB1c2goY2UpO2JyZWFrfVFbMl0mJmFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbCha'@;
put 'LGFlKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXt6PVE9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtkZSxsZV0pfX19LEk9dGhpcyYmdGhpcy5fX3JlYWR8fGZ1bmN0aW9uKFosVyl7dmFyIHo9ImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIFN5bWJvbCYmWltTeW1ib2wuaXRlcmF0b3JdO2lmKCF6KXJldHVybiBaO3ZhciBxLFEsdGU9ei5jYWxsKFopLGFlPVtdO3RyeXtmb3IoOyh2b2lkIDA9PT1XfHxXLS0gPjApJiYhKHE9dGUubmV4dCgpKS5kb25lOylhZS5wdXNoKHEudmFsdWUpfWNhdGNoKHNlKXtRPXtl'@;
put 'cnJvcjpzZX19ZmluYWxseXt0cnl7cSYmIXEuZG9uZSYmKHo9dGUucmV0dXJuKSYmei5jYWxsKHRlKX1maW5hbGx5e2lmKFEpdGhyb3cgUS5lcnJvcn19cmV0dXJuIGFlfSxFPXRoaXMmJnRoaXMuX19zcHJlYWRBcnJheXx8ZnVuY3Rpb24oWixXLHope2lmKHp8fDI9PT1hcmd1bWVudHMubGVu'@;
put 'Z3RoKWZvcih2YXIgcSxRPTAsdGU9Vy5sZW5ndGg7UTx0ZTtRKyspIXEmJlEgaW4gV3x8KHF8fChxPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFcsMCxRKSkscVtRXT1XW1FdKTtyZXR1cm4gWi5jb25jYXQocXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoVykpfSxrPXRoaXMmJnRo'@;
put 'aXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihaKXtyZXR1cm4gWiYmWi5fX2VzTW9kdWxlP1o6e2RlZmF1bHQ6Wn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnVwZGF0ZUNzdj1BLmNyZWF0ZUNzdj1BLnJlYWRDc3Y9dm9pZCAwO3ZhciBC'@;
put 'PUQoMTU1OSksTj1rKEQoNzU2NSkpO0EucmVhZENzdj1mdW5jdGlvbihaKXtyZXR1cm4gUCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBVKHRoaXMsZnVuY3Rpb24oVyl7c3dpdGNoKFcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCwoMCxCLnJlYWRGaWxlKShaKV07Y2Fz'@;
put 'ZSAxOnJldHVyblsyLFcuc2VudCgpLnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbih6KXtyZXR1cm4gei5sZW5ndGh9KS5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIHouc3BsaXQoIiwiKX0pXX19KX0pfSxBLmNyZWF0ZUNzdj1mdW5jdGlvbihaLFcseil7cmV0dXJuIFAodm9pZCAwLHZvaWQg'@;
put 'MCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcTtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKFEpe3N3aXRjaChRLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9KDAsTi5kZWZhdWx0KShXLHtoZWFkZXI6MT09PVcubGVuZ3RoLGNvbHVtbnM6en0pLFs0LCgwLEIuY3JlYXRlRmlsZSkoWixxKV07Y2FzZSAx'@;
put 'OnJldHVybiBRLnNlbnQoKSxbMl19fSl9KX0sQS51cGRhdGVDc3Y9ZnVuY3Rpb24oWixXLHoscSl7cmV0dXJuIFAodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUSx0ZSxhZTtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKHNlKXtzd2l0Y2goc2UubGFiZWwpe2Nhc2UgMDpyZXR1'@;
put 'cm5bNCxWKFosVyx6LHEpXTtjYXNlIDE6cmV0dXJuIFE9c2Uuc2VudCgpLHEmJih0ZT0wPT09US5sZW5ndGg/MTpRLmxlbmd0aCwoYWU9ei5maW5kSW5kZXgoZnVuY3Rpb24oZGUpe3JldHVybiBkZT09PXF9KSk+LTE/Vy5zcGxpY2UoYWUsMCx0ZSk6KHouc3BsaWNlKDAsMCxxKSxXLnNwbGlj'@;
put 'ZSgwLDAsdGUpKSksUS5wdXNoKFcpLFs0LCgwLEEuY3JlYXRlQ3N2KShaLFEseildO2Nhc2UgMjpyZXR1cm4gc2Uuc2VudCgpLFsyXX19KX0pfTt2YXIgVj1mdW5jdGlvbihaLFcseixxKXtyZXR1cm4gUCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBRLHRlLGFlLHNlO3Jl'@;
put 'dHVybiBVKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7Y2FzZSAwOmlmKFcubGVuZ3RoIT09ei5sZW5ndGgpe2lmKFcubGVuZ3RoPnoubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1u'@;
put 'cyIpO2lmKCFxfHxXLmxlbmd0aCsxIT09ei5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihxJiZ6LmluY2x1ZGVzKHEpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5v'@;
put 'dCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO3JldHVybls0LCgwLEEucmVhZENzdikoWikuY2F0Y2goZnVuY3Rpb24obGUpe3JldHVybltdfSldO2Nhc2UgMTppZihRPWRlLnNlbnQoKSx0ZT1RWzBdKXtpZih6Lmxlbmd0aD50ZS5sZW5ndGgpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgZ3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoei5sZW5ndGg8dGUubGVuZ3RoKXtpZighcXx8ei5sZW5ndGgrMSE9PXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIm51bWJlciBvZiBwcm92aWRl'@;
put 'ZCBjb2x1bW5zIGFyZSBsZXNzIHRoYW4gbnVtYmVyIG9mIGV4aXN0aW5nIGNvbHVtbnMiKTtpZihhZT10ZS5maW5kSW5kZXgoZnVuY3Rpb24obGUpe3JldHVybiBsZT09PXF9KSxzZT1FKFtdLEkoeiksITEpLCEoYWU+LTEpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2Vz'@;
put 'IG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoc2Uuc3BsaWNlKGFlLDAscSksSlNPTi5zdHJpbmdpZnkoeikhPT1KU09OLnN0cmluZ2lmeShzZSkpdGhyb3cgbmV3IEVycm9yKCJwcm92aWRlZCBjb2x1bW5zIGRvZXMgbm90IG1hdGNoIGV4aXN0aW5nIGNvbHVtbnMiKX1lbHNle2lm'@;
put 'KEpTT04uc3RyaW5naWZ5KHopIT09SlNPTi5zdHJpbmdpZnkodGUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYocSYmIXouaW5jbHVkZXMocSkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQg'@;
put 'dG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm5bMixRXX19KX0pfX0sMTU1OTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihHLHksTCxIKXt2b2lkIDA9PT1IJiYoSD1MKSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoRyxILHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB5W0xdfX0pfTpmdW5jdGlvbihHLHksTCxIKXt2b2lkIDA9PT1IJiYoSD1MKSxHW0hdPXlbTF19KSxVPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5j'@;
put 'dGlvbihHLHkpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShHLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTp5fSl9OmZ1bmN0aW9uKEcseSl7Ry5kZWZhdWx0PXl9KSxJPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihHKXtpZihHJiZHLl9fZXNNb2R1bGUpcmV0dXJuIEc7'@;
put 'dmFyIHk9e307aWYobnVsbCE9Rylmb3IodmFyIEwgaW4gRykiZGVmYXVsdCIhPT1MJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRyxMKSYmUCh5LEcsTCk7cmV0dXJuIFUoeSxHKSx5fSxFPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihHLHksTCxIKXtyZXR1'@;
put 'cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihqLGcpe2Z1bmN0aW9uIFMocCl7dHJ5e18oSC5uZXh0KHApKX1jYXRjaChDKXtnKEMpfX1mdW5jdGlvbiB4KHApe3RyeXtfKEgudGhyb3cocCkpfWNhdGNoKEMpe2coQyl9fWZ1bmN0aW9uIF8ocCl7dmFyIEM7cC5kb25lP2oocC52YWx1'@;
put 'ZSk6KEM9cC52YWx1ZSxDIGluc3RhbmNlb2YgTD9DOm5ldyBMKGZ1bmN0aW9uKEspe0soQyl9KSkudGhlbihTLHgpfV8oKEg9SC5hcHBseShHLHl8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEcseSl7dmFyIEwsSCxqLGcsUz17bGFiZWw6MCxz'@;
put 'ZW50OmZ1bmN0aW9uKCl7aWYoMSZqWzBdKXRocm93IGpbMV07cmV0dXJuIGpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gZz17bmV4dDp4KDApLHRocm93OngoMSkscmV0dXJuOngoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihnW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gdGhpc30pLGc7ZnVuY3Rpb24geChfKXtyZXR1cm4gZnVuY3Rpb24ocCl7cmV0dXJuIGZ1bmN0aW9uKEMpe2lmKEwpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7UzspdHJ5e2lmKEw9MSxIJiYoaj0yJkNbMF0/SC5y'@;
put 'ZXR1cm46Q1swXT9ILnRocm93fHwoKGo9SC5yZXR1cm4pJiZqLmNhbGwoSCksMCk6SC5uZXh0KSYmIShqPWouY2FsbChILENbMV0pKS5kb25lKXJldHVybiBqO3N3aXRjaChIPTAsaiYmKEM9WzImQ1swXSxqLnZhbHVlXSksQ1swXSl7Y2FzZSAwOmNhc2UgMTpqPUM7YnJlYWs7Y2FzZSA0OnJl'@;
put 'dHVybiBTLmxhYmVsKysse3ZhbHVlOkNbMV0sZG9uZTohMX07Y2FzZSA1OlMubGFiZWwrKyxIPUNbMV0sQz1bMF07Y29udGludWU7Y2FzZSA3OkM9Uy5vcHMucG9wKCksUy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoaj0oaj1TLnRyeXMpLmxlbmd0aD4wJiZqW2oubGVuZ3Ro'@;
put 'LTFdKXx8NiE9PUNbMF0mJjIhPT1DWzBdKSl7Uz0wO2NvbnRpbnVlfWlmKDM9PT1DWzBdJiYoIWp8fENbMV0+alswXSYmQ1sxXTxqWzNdKSl7Uy5sYWJlbD1DWzFdO2JyZWFrfWlmKDY9PT1DWzBdJiZTLmxhYmVsPGpbMV0pe1MubGFiZWw9alsxXSxqPUM7YnJlYWt9aWYoaiYmUy5sYWJlbDxq'@;
put 'WzJdKXtTLmxhYmVsPWpbMl0sUy5vcHMucHVzaChDKTticmVha31qWzJdJiZTLm9wcy5wb3AoKSxTLnRyeXMucG9wKCk7Y29udGludWV9Qz15LmNhbGwoRyxTKX1jYXRjaChLKXtDPVs2LEtdLEg9MH1maW5hbGx5e0w9aj0wfWlmKDUmQ1swXSl0aHJvdyBDWzFdO3JldHVybnt2YWx1ZTpDWzBd'@;
put 'P0NbMV06dm9pZCAwLGRvbmU6ITB9fShbXyxwXSl9fX0sQj10aGlzJiZ0aGlzLl9fcmVhZHx8ZnVuY3Rpb24oRyx5KXt2YXIgTD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZHW1N5bWJvbC5pdGVyYXRvcl07aWYoIUwpcmV0dXJuIEc7dmFyIEgsaixnPUwuY2FsbChHKSxTPVtdO3RyeXtm'@;
put 'b3IoOyh2b2lkIDA9PT15fHx5LS0gPjApJiYhKEg9Zy5uZXh0KCkpLmRvbmU7KVMucHVzaChILnZhbHVlKX1jYXRjaCh4KXtqPXtlcnJvcjp4fX1maW5hbGx5e3RyeXtIJiYhSC5kb25lJiYoTD1nLnJldHVybikmJkwuY2FsbChnKX1maW5hbGx5e2lmKGopdGhyb3cgai5lcnJvcn19cmV0dXJu'@;
put 'IFN9LE49dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihHLHksTCl7aWYoTHx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBILGo9MCxnPXkubGVuZ3RoO2o8ZztqKyspIUgmJmogaW4geXx8KEh8fChIPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHksMCxqKSksSFtq'@;
put 'XT15W2pdKTtyZXR1cm4gRy5jb25jYXQoSHx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeSkpfSxWPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihHKXtyZXR1cm4gRyYmRy5fX2VzTW9kdWxlP0c6e2RlZmF1bHQ6R319O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmlzVGVzdEZpbGU9QS50ZXN0RmlsZVJlZ0V4cD1BLmNyZWF0ZVJlYWRTdHJlYW09QS5jcmVhdGVXcml0ZVN0cmVhbT1BLmdldFJlYWxQYXRoPUEuYmFzZTY0RW5jb2RlRmlsZT1BLmJhc2U2NEVuY29kZUltYWdlRmlsZT1BLnBhdGhTZXBFc2NhcGVk'@;
put 'PUEuY29weT1BLm1vdmVGaWxlPUEuZ2V0UmVsYXRpdmVQYXRoPUEudW5pZnlGaWxlUGF0aD1BLmRlbGV0ZUZvbGRlcj1BLmRlbGV0ZUZpbGU9QS5jcmVhdGVGaWxlPUEuY3JlYXRlRm9sZGVyPUEubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPUEubGlzdFN1YkZvbGRlcnNJbkZvbGRl'@;
put 'cj1BLmxpc3RTYXNGaWxlc0luRm9sZGVyPUEubGlzdEluaUZpbGVzSW5Gb2xkZXI9QS5saXN0RmlsZXNJbkZvbGRlcj1BLnJlYWRGaWxlQmluYXJ5PUEucmVhZEZpbGU9QS5pc0ZvbGRlcj1BLmZvbGRlckV4aXN0cz1BLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBaPVYoRCg1Njc0KSksVz1WKEQo'@;
put 'OTg0KSksej1WKEQoMjUyMCkpLHE9RCg2MjY2KSxRPUkoRCgyOTc1KSk7ZnVuY3Rpb24gdGUoRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixaLmRlZmF1bHQucHJvbWlzZXMuYWNjZXNzKEcsWi5kZWZh'@;
put 'dWx0LmNvbnN0YW50cy5GX09LKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSldfSl9KX1mdW5jdGlvbiBhZShHKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHkpe3JldHVy'@;
put 'blsyLFouZGVmYXVsdC5wcm9taXNlcy5yZWFkRmlsZShHKV19KX0pfWZ1bmN0aW9uIHNlKEcpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZp'@;
put 'bGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oTCl7cmV0dXJuIEwuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiFILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX1mdW5jdGlvbiBkZShHLHksTCl7cmV0dXJuIHZvaWQgMD09PXkmJih5PSEw'@;
put 'KSx2b2lkIDA9PT1MJiYoTD1bXSksRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oail7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4oZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIEUoSCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFMseD10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oXyl7c3dpdGNoKF8ubGFiZWwpe2Nhc2UgMDpyZXR1cm4geSYmZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLmxlbmd0aD8oUz1b'@;
put 'XSxbNCwoMCxxLmFzeW5jRm9yRWFjaCkoZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNEaXJlY3RvcnkoKX0pLGZ1bmN0aW9uKHApe3JldHVybiBFKHgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBDLEssbmU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih1ZSl7c3dpdGNoKHVl'@;
put 'LmxhYmVsKXtjYXNlIDA6cmV0dXJuIEwuaW5jbHVkZXMoQz1wLm5hbWUpP1szLDJdOihLPXouZGVmYXVsdC5qb2luKEcsQyksbmU9W04oW10sQihTKSwhMSldLFs0LGRlKEsseSxMKV0pO2Nhc2UgMTpTPU4uYXBwbHkodm9pZCAwLG5lLmNvbmNhdChbQi5hcHBseSh2b2lkIDAsW3VlLnNlbnQo'@;
put 'KS5tYXAoZnVuY3Rpb24oaGUpe3JldHVybiB6LmRlZmF1bHQuam9pbihDLGhlKX0pXSksITFdKSksdWUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzJdfX0pfSl9KV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gXy5zZW50KCksWzIsTihOKFtdLEIoZy5maWx0ZXIoZnVuY3Rpb24ocCl7cmV0dXJuIXAu'@;
put 'aXNEaXJlY3RvcnkoKX0pLm1hcChmdW5jdGlvbihwKXtyZXR1cm4gcC5uYW1lfSkpLCExKSxCKFMpLCExKV07Y2FzZSAyOnJldHVyblsyLGcubWFwKGZ1bmN0aW9uKHApe3JldHVybiBwLm5hbWV9KV19fSl9KX0pXX0pfSl9ZnVuY3Rpb24gbGUoRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9p'@;
put 'ZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixaLmRlZmF1bHQucHJvbWlzZXMubWtkaXIoRyx7cmVjdXJzaXZlOiEwfSldfSl9KX1mdW5jdGlvbiBjZShHLHksTCl7dm9pZCAwPT09eSYmKHk9ei5kZWZhdWx0LnNlcCksdm9pZCAwPT09TCYmKEw9Ii8i'@;
put 'KTt2YXIgSD17dW5peDoiLyIsd2luOiJcXCJ9LGo9T2JqZWN0LmtleXMoSCkuZmluZChmdW5jdGlvbihTKXtyZXR1cm4gSFtTXT09PXl9KTtpZihqKXt2YXIgZz1IW09iamVjdC5rZXlzKEgpLmZpbmQoZnVuY3Rpb24oUyl7cmV0dXJuIFMhPT1qfSldO3JldHVybiBqPUhbal0sRy5zcGxpdChn'@;
put 'KS5qb2luKGopfXJldHVybiBHLnNwbGl0KEwpLmpvaW4oeSl9QS5maWxlRXhpc3RzPWZ1bmN0aW9uKEcpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLmFjY2VzcyhHLFou'@;
put 'ZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LEEuZm9sZGVyRXhpc3RzPXRlLEEuaXNGb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixaLmRlZmF1bHQucHJvbWlzZXMubHN0YXQoRykudGhlbihmdW5jdGlvbihMKXtyZXR1cm4gTC5pc0RpcmVjdG9yeSgpfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pXX0pfSl9LEEucmVhZEZpbGU9ZnVuY3Rpb24oRyx5KXty'@;
put 'ZXR1cm4gdm9pZCAwPT09eSYmKHk9InV0ZjgiKSxFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTCl7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcseSldfSl9KX0sQS5yZWFkRmlsZUJpbmFyeT1hZSxBLmxpc3RGaWxl'@;
put 'c0luRm9sZGVyPXNlLEEubGlzdEluaUZpbGVzSW5Gb2xkZXI9ZnVuY3Rpb24oRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHNlKEcpXTtjYXNlIDE6cmV0dXJu'@;
put 'WzIseS5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKEwpe3JldHVybiBMLmVuZHNXaXRoKCIuaW5pIil9KV19fSl9KX0sQS5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbihHLHksTCl7cmV0dXJuIHZvaWQgMD09PXkmJih5PSExKSx2b2lkIDA9PT1MJiYoTD1bXSksRSh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsZGUoRyx5LEwpXTtjYXNlIDE6cmV0dXJuWzIsai5zZW50KCkuZmlsdGVyKGZ1bmN0aW9uKGcpe3JldHVybiBnLmVuZHNXaXRoKCIuc2FzIil9KV19fSl9KX0s'@;
put 'QS5saXN0U3ViRm9sZGVyc0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIoRyx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4o'@;
put 'ZnVuY3Rpb24oTCl7cmV0dXJuIEwuZmlsdGVyKGZ1bmN0aW9uKEgpe3JldHVybiBILmlzRGlyZWN0b3J5KCl9KS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZX0pfSldfSl9KX0sQS5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9ZGUsQS5jcmVhdGVGb2xkZXI9bGUsQS5jcmVh'@;
put 'dGVGaWxlPWZ1bmN0aW9uKEcseSxMKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgSCxqO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDpyZXR1cm4oRz1jZShHKSkuc3BsaXQoei5kZWZhdWx0LnNlcCkubGVuZ3RoPjE/'@;
put 'KChIPUcuc3BsaXQoei5kZWZhdWx0LnNlcCkpLnBvcCgpLFs0LHRlKGo9SC5qb2luKHouZGVmYXVsdC5zZXApKV0pOlszLDNdO2Nhc2UgMTpyZXR1cm4gZy5zZW50KCk/WzMsM106WzQsbGUoaildO2Nhc2UgMjpnLnNlbnQoKSxnLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyLFouZGVmYXVsdC5w'@;
put 'cm9taXNlcy53cml0ZUZpbGUoRyx5LEwpXX19KX0pfSxBLmRlbGV0ZUZpbGU9ZnVuY3Rpb24oRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixaLmRlZmF1bHQucmVtb3ZlKEcpXX0pfSl9LEEuZGVsZXRl'@;
put 'Rm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oTCxIKXsoMCxXLmRlZmF1bHQpKEcse30sZnVuY3Rpb24oail7cmV0dXJuIGo/SChqKTpM'@;
put 'KCl9KX0pXX0pfSl9LEEudW5pZnlGaWxlUGF0aD1jZSxBLmdldFJlbGF0aXZlUGF0aD1mdW5jdGlvbihHLHkpe3ZhciBMPUcuc3BsaXQoei5kZWZhdWx0LnNlcCksSD15LnNwbGl0KHouZGVmYXVsdC5zZXApLGo9W10sZz1bXTtMLmZvckVhY2goZnVuY3Rpb24ocCxDKXt2b2lkIDAhPT1IW0Nd'@;
put 'JiZMW0NdPT09SFtDXT9qLnB1c2gocCk6cCYmZy5wdXNoKHApfSk7dmFyIFM9ai5qb2luKHouZGVmYXVsdC5zZXApLHg9bmV3IFJlZ0V4cCgiXiIuY29uY2F0KHouZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpKSksXz1uZXcgUmVnRXhwKCIiLmNvbmNhdCh6LmRlZmF1bHQuc2Vw'@;
put 'LnJlcGxhY2UoL1xcL2csIlxcXFwiKSwiJCIpKTtyZXR1cm4oZy5sZW5ndGg/Ii4uIi5jb25jYXQoei5kZWZhdWx0LnNlcCkucmVwZWF0KGcubGVuZ3RoKToiLiIuY29uY2F0KHouZGVmYXVsdC5zZXApKSt5LnJlcGxhY2UoUywiIikucmVwbGFjZSh4LCIiKS5yZXBsYWNlKF8sIiIpfSxBLm1v'@;
put 'dmVGaWxlPWZ1bmN0aW9uKEcseSl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihMKXtyZXR1cm5bMixaLmRlZmF1bHQucHJvbWlzZXMucmVuYW1lKEcseSldfSl9KX0sQS5jb3B5PWZ1bmN0aW9uKEcseSl7cmV0dXJuIEUodGhp'@;
put 'cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihMKXtyZXR1cm5bMixaLmRlZmF1bHQuY29weShHLHkpXX0pfSl9LEEucGF0aFNlcEVzY2FwZWQ9ei5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIiksQS5iYXNlNjRFbmNvZGVJbWFnZUZpbGU9'@;
put 'ZnVuY3Rpb24oRyl7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixhZShHKS50aGVuKGZ1bmN0aW9uKEwpe3ZhciBIPXouZGVmYXVsdC5leHRuYW1lKEcpLnN1YnN0cigxKXx8InBuZyI7cmV0dXJuInN2ZyI9'@;
put 'PT1IJiYoSD0ic3ZnK3htbCIpLCJkYXRhOmltYWdlLyIrSCsiO2Jhc2U2NCwiK0wudG9TdHJpbmcoImJhc2U2NCIpfSldfSl9KX0sQS5iYXNlNjRFbmNvZGVGaWxlPWZ1bmN0aW9uKEcpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBrKHRoaXMsZnVuY3Rp'@;
put 'b24oeSl7cmV0dXJuWzIsWi5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKEcse2VuY29kaW5nOiJiYXNlNjQifSldfSl9KX0sQS5nZXRSZWFsUGF0aD1mdW5jdGlvbihHKXtyZXR1cm4gWi5kZWZhdWx0LnJlYWxwYXRoU3luYyhHKX0sQS5jcmVhdGVXcml0ZVN0cmVhbT1mdW5jdGlvbihHKXty'@;
put 'ZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsUS5maWxlRXhpc3RzKEcpXTtjYXNlIDE6cmV0dXJuIHkuc2VudCgpP1syLFouZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVh'@;
put 'bShHLHtmbGFnczoiYSJ9KV06WzQsUS5jcmVhdGVGaWxlKEcsIiIpXTtjYXNlIDI6cmV0dXJuIHkuc2VudCgpLFsyLFouZGVmYXVsdC5jcmVhdGVXcml0ZVN0cmVhbShHLHtmbGFnczoiYSJ9KV19fSl9KX0sQS5jcmVhdGVSZWFkU3RyZWFtPWZ1bmN0aW9uKEcpe3JldHVybiBFKHZvaWQgMCx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih5KXtyZXR1cm5bMixaLmRlZmF1bHQuY3JlYXRlUmVhZFN0cmVhbShHKV19KX0pfSxBLnRlc3RGaWxlUmVnRXhwPS9cLnRlc3RcLihcZCtcLik/c2FzJC9pLEEuaXNUZXN0RmlsZT1mdW5jdGlvbihHKXtyZXR1'@;
put 'cm4gQS50ZXN0RmlsZVJlZ0V4cC50ZXN0KEcpfX0sNTYyNjpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihFKXtyZXR1cm4gRSYmRS5fX2VzTW9kdWxlP0U6e2RlZmF1bHQ6RX19O09iamVjdC5kZWZpbmVQcm9w'@;
put 'ZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmdldEFic29sdXRlUGF0aD12b2lkIDA7dmFyIFU9UChEKDI1MjApKSxJPVAoRCg3NDM1KSk7QS5nZXRBYnNvbHV0ZVBhdGg9ZnVuY3Rpb24oRSxrKXtyZXR1cm4gVS5kZWZhdWx0LmlzQWJzb2x1dGUoRSl8fC9efi8uZXhlYyhFKT9V'@;
put 'LmRlZmF1bHQubm9ybWFsaXplKEUucmVwbGFjZSgvXn4vLEkuZGVmYXVsdC5ob21lZGlyKCkpKTpVLmRlZmF1bHQuam9pbihrLEUpfX0sMjk3NTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5j'@;
put 'dGlvbihrLEIsTixWKXt2b2lkIDA9PT1WJiYoVj1OKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoayxWLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW05dfX0pfTpmdW5jdGlvbihrLEIsTixWKXt2b2lkIDA9PT1WJiYoVj1OKSxrW1ZdPUJbTl19KSxVPXRoaXMmJnRoaXMu'@;
put 'X19leHBvcnRTdGFyfHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBpbiBrKSJkZWZhdWx0Ij09PU58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pfHxQKEIsayxOKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEucmVh'@;
put 'ZENzdj1BLmNyZWF0ZUNzdj1BLnVwZGF0ZUNzdj1BLnRlc3RGaWxlUmVnRXhwPUEuaXNUZXN0RmlsZT1BLmdldFJlYWxQYXRoPUEuYmFzZTY0RW5jb2RlRmlsZT1BLmJhc2U2NEVuY29kZUltYWdlRmlsZT1BLmNvcHk9QS5wYXRoU2VwRXNjYXBlZD1BLm1vdmVGaWxlPUEudW5pZnlGaWxlUGF0'@;
put 'aD1BLmdldFJlbGF0aXZlUGF0aD1BLmRlbGV0ZUZvbGRlcj1BLmRlbGV0ZUZpbGU9QS5jcmVhdGVXcml0ZVN0cmVhbT1BLmNyZWF0ZVJlYWRTdHJlYW09QS5jcmVhdGVGb2xkZXI9QS5jcmVhdGVGaWxlPUEubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVyPUEubGlzdFN1YkZvbGRlcnNJ'@;
put 'bkZvbGRlcj1BLmxpc3RTYXNGaWxlc0luRm9sZGVyPUEubGlzdEluaUZpbGVzSW5Gb2xkZXI9QS5saXN0RmlsZXNJbkZvbGRlcj1BLnJlYWRGaWxlQmluYXJ5PUEucmVhZEZpbGU9QS5pc0ZvbGRlcj1BLmZvbGRlckV4aXN0cz1BLmZpbGVFeGlzdHM9dm9pZCAwO3ZhciBJPUQoMTU1OSk7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEEsImZpbGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'Zm9sZGVyRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInJlYWRGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSS5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJsaXN0RmlsZXNJbkZvbGRlciIs'@;
put 'e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0SW5pRmlsZXNJbkZvbGRl'@;
put 'cn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJsaXN0U3ViRm9sZGVyc0luRm9sZGVyIix7'@;
put 'ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmxpc3RG'@;
put 'aWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiY3JlYXRlRm9sZGVyIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmNyZWF0ZVJlYWRTdHJlYW19fSksT2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEEsImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEku'@;
put 'ZGVsZXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImdldFJlbGF0aXZlUGF0aCIse2VudW1lcmFibGU6ITAs'@;
put 'Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJt'@;
put 'b3ZlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5wYXRoU2VwRXNjYXBlZH19KSxPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoQSwiY29weSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5iYXNlNjRF'@;
put 'bmNvZGVJbWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImdldFJlYWxQYXRoIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwidGVz'@;
put 'dEZpbGVSZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRlc3RGaWxlUmVnRXhwfX0pO3ZhciBFPUQoMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUudXBkYXRl'@;
put 'Q3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJjcmVhdGVDc3YiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IEUucmVhZENzdn19KSxVKEQoNTYyNiksQSl9LDI3Nzc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5uZXdMaW5lPUEuY2FwaXRhbGl6ZUZpcnN0Q2hhcj1BLnNhbml0aXplU3BlY2lhbENoYXJzPUEucGFk'@;
put 'V2l0aE51bWJlcj12b2lkIDA7dmFyIFA9RCg1MzA2KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicGFkV2l0aE51bWJlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFAucGFkV2l0aE51bWJlcn19KTt2YXIgVT1EKDkyNzUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShB'@;
put 'LCJzYW5pdGl6ZVNwZWNpYWxDaGFycyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFUuc2FuaXRpemVTcGVjaWFsQ2hhcnN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImNhcGl0YWxpemVGaXJzdENoYXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiBVLmNhcGl0YWxpemVGaXJzdENoYXJ9fSk7dmFyIEk9RCgxNjI4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmV3TGluZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkubmV3TGluZX19KX0sNTMwNjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5wYWRXaXRoTnVtYmVyPXZvaWQgMCxBLnBhZFdpdGhOdW1iZXI9ZnVuY3Rpb24oRCxQKXtyZXR1cm4gdm9pZCAwPT09UCYmKFA9MCksRD45P0Q6IiIuY29uY2F0KFApLmNvbmNhdChEKX19LDE2Mjg6KHcsQSxEKT0+eyJ1'@;
put 'c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLm5ld0xpbmU9dm9pZCAwLEEubmV3TGluZT1mdW5jdGlvbigpe3JldHVybiJ3aW4zMiI9PT1QLnBsYXRmb3JtPyJcXHJcXG4iOiJcXG4ifX0sOTI3NToodyxB'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5jYXBpdGFsaXplRmlyc3RDaGFyPUEuc2FuaXRpemVTcGVjaWFsQ2hhcnM9dm9pZCAwLEEuc2FuaXRpemVTcGVjaWFsQ2hhcnM9ZnVuY3Rpb24oRCl7cmV0dXJuIEQucmVw'@;
put 'bGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIil9LEEuY2FwaXRhbGl6ZUZpcnN0Q2hhcj1mdW5jdGlvbihEKXtyZXR1cm4gRC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStELnNsaWNlKDEp'@;
put 'fX0sNjQ2NzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihJKXtyZXR1cm4gSSYmSS5fX2VzTW9kdWxlP0k6e2RlZmF1bHQ6SX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxBLmlzU3BlY2lhbE1pc3Npbmc9QS5jaG9pY2VWYWxpZGF0b3I9QS5jb25maXJtYXRpb25WYWxpZGF0b3I9QS51cmxWYWxpZGF0b3I9dm9pZCAwO3ZhciBVPVAoRCg0ODEpKTtBLnVybFZhbGlkYXRvcj1mdW5jdGlvbihJLEUpe3JldHVybiEhVS5kZWZhdWx0LmlzSHR0cFVyaShJKXx8'@;
put 'ISFVLmRlZmF1bHQuaXNIdHRwc1VyaShJKXx8IiI9PT1JfHxFfSxBLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihJKXtyZXR1cm4hMD09PUl8fCExPT09SX0sQS5jaG9pY2VWYWxpZGF0b3I9ZnVuY3Rpb24oSSxFLGspe3JldHVybiBJPjAmJkk8PUV8fGt9LEEuaXNTcGVjaWFsTWlz'@;
put 'c2luZz1mdW5jdGlvbihJKXtyZXR1cm4oInN0cmluZyIhPXR5cGVvZiBJfHwhSS5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEkpfX0sNzc1NzoodyxBLEQpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJf'@;
put 'X2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmdlbmVyYXRlVGltZXN0YW1wPUEudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz12b2lkIDA7dmFyIFA9RCgxMzAyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwidGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIFAudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TU319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZ2VuZXJhdGVUaW1lc3RhbXAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQLmdlbmVyYXRlVGltZXN0YW1wfX0pfSwxMzAyOih3LEEsRCk9'@;
put 'PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZ2VuZXJhdGVUaW1lc3RhbXA9QS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDt2YXIgUD1EKDI3NzcpO0EudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1mdW5j'@;
put 'dGlvbihVKXt2b2lkIDA9PT1VJiYoVT1EYXRlLm5vdygpKTt2YXIgST1uZXcgRGF0ZShVKTtyZXR1cm5bSS5nZXRGdWxsWWVhcigpLCgwLFAucGFkV2l0aE51bWJlcikoSS5nZXRNb250aCgpKzEpLCgwLFAucGFkV2l0aE51bWJlcikoSS5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCxQ'@;
put 'LnBhZFdpdGhOdW1iZXIpKEkuZ2V0SG91cnMoKSksKDAsUC5wYWRXaXRoTnVtYmVyKShJLmdldE1pbnV0ZXMoKSksKDAsUC5wYWRXaXRoTnVtYmVyKShJLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0sQS5nZW5lcmF0ZVRpbWVzdGFtcD1mdW5jdGlvbihVLEkpe3ZvaWQgMD09PVUmJihVPSIi'@;
put 'KTt2YXIgRT1uZXcgRGF0ZSxrPVtFLmdldFVUQ0Z1bGxZZWFyKCksRS5nZXRVVENNb250aCgpKzEsRS5nZXRVVENEYXRlKCksRS5nZXRVVENIb3VycygpLEUuZ2V0VVRDTWludXRlcygpLEUuZ2V0VVRDU2Vjb25kcygpXTtyZXR1cm4gaz1rLm1hcChmdW5jdGlvbihCKXtyZXR1cm4oMCxQLnBh'@;
put 'ZFdpdGhOdW1iZXIpKEIpfSksSSYmVSYmSTxrLmxlbmd0aCYmST49MCYmay5zcGxpY2UoSSwwLFUpLGsuam9pbihJPyIiOlUpfX0sODIzOToodyxBKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5Db25maWdU'@;
put 'eXBlcz12b2lkIDAsKEQ9QS5Db25maWdUeXBlc3x8KEEuQ29uZmlnVHlwZXM9e30pKS5CdWlsZD0iYnVpbGRDb25maWciLEQuU2VydmljZT0ic2VydmljZUNvbmZpZyIsRC5Kb2I9ImpvYkNvbmZpZyIsRC5UZXN0PSJ0ZXN0Q29uZmlnIixELkRvYz0iZG9jQ29uZmlnIixELkRlcGxveT0iZGVw'@;
put 'bG95Q29uZmlnIixELlN0cmVhbT0ic3RyZWFtQ29uZmlnIixELkF1dGg9ImF1dGhDb25maWcifSwyNDI3Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTg5Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzY5MjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDY5Mzk6KHcsQSk9PnsidXNlIHN0cmljdCI7dmFyIEQ7T2JqZWN0LmRlZmluZVBy'@;
put 'b3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuTWVtYmVyVHlwZT12b2lkIDAsKEQ9QS5NZW1iZXJUeXBlfHwoQS5NZW1iZXJUeXBlPXt9KSkuc2VydmljZT0ic2VydmljZSIsRC5maWxlPSJmaWxlIixELmZvbGRlcj0iZm9sZGVyIn0sMzMyNzoodyxBKT0+eyJ1c2Ugc3RyaWN0'@;
put 'IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDUxNjU6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IFA9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLEIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVba119fSl9OmZ1bmN0aW9uKEks'@;
put 'RSxrLEIpe3ZvaWQgMD09PUImJihCPWspLElbQl09RVtrXX0pLFU9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksRSl7Zm9yKHZhciBrIGluIEkpImRlZmF1bHQiPT09a3x8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsayl8fFAoRSxJLGspfTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVShEKDgyMzkpLEEpLFUoRCgyNDI3KSxBKSxVKEQoMTg5KSxBKSxVKEQoMzY5MiksQSksVShEKDY5MzkpLEEpLFUoRCgzMzI3KSxBKSxVKEQoNTE2NSksQSksVShEKDQwNjkpLEEpLFUoRCg4OTMyKSxBKSxVKEQo'@;
put 'NCksQSksVShEKDIwMTUpLEEpLFUoRCg4NTE1KSxBKSxVKEQoNTMxMyksQSksVShEKDg5NzkpLEEpfSw0MDY5Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmlzTWFjcm9WYXJzPXZvaWQgMCxBLmlzTWFjcm9W'@;
put 'YXJzPWZ1bmN0aW9uKEQpe3JldHVybiBEJiYib2JqZWN0Ij09dHlwZW9mIEQubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShELm1hY3JvVmFycyl9fSw4OTMyOih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDoo'@;
put 'dyxBKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5TQVNKc0ZpbGVUeXBlPXZvaWQgMCwoRD1BLlNBU0pzRmlsZVR5cGV8fChBLlNBU0pzRmlsZVR5cGU9e30pKS5zZXJ2aWNlPSJTZXJ2aWNlIixELmpvYj0i'@;
put 'Sm9iIixELnRlc3Q9IlRlc3QiLEQuZmlsZT0iRmlsZSJ9LDIwMTU6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NTE1Oih3LEEpPT57InVzZSBzdHJpY3QiO3ZhciBEO09iamVjdC5kZWZpbmVQcm9wZXJ0eShB'@;
put 'LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLlNlcnZlclR5cGU9dm9pZCAwLChEPUEuU2VydmVyVHlwZXx8KEEuU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLEQuU2FzOT0iU0FTOSIsRC5TYXNqcz0iU0FTSlMifSw1MzEzOih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5k'@;
put 'ZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODk3OTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFA9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oQil7Zm9yKHZhciBOLFY9MSxa'@;
put 'PWFyZ3VtZW50cy5sZW5ndGg7VjxaO1YrKylmb3IodmFyIFcgaW4gTj1hcmd1bWVudHNbVl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE4sVykmJihCW1ddPU5bV10pO3JldHVybiBCfSxQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuVGFyZ2V0PXZvaWQgMDt2YXIgVT1EKDgyMzkpLEk9RCg4NTE1KSxFPUQoNjc4MSksaz1mdW5jdGlvbigpe2Z1bmN0aW9uIEIoTixWKXt2YXIgWj10aGlzO3ZvaWQgMD09PVYmJihWPXt9KSx0aGlzLl9zZXJ2ZXJUeXBlPUkuU2VydmVyVHlw'@;
put 'ZS5TYXNWaXlhLHRoaXMuZ2V0Q29uZmlnPWZ1bmN0aW9uKFcseil7cmV0dXJuIFAoUCh7fSxaLl9jb25maWdbV118fHt9KSx6W1ddKX07dHJ5e2lmKCFOKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQ6IElucHV0IEpTT04gaXMgbnVsbCBvciB1bmRlZmluZWQuIik7dGhpcy5fY29u'@;
put 'ZmlnPVYsdGhpcy5fbmFtZT0oMCxFLnZhbGlkYXRlVGFyZ2V0TmFtZSkoTi5uYW1lKSx0aGlzLl9zZXJ2ZXJVcmw9KDAsRS52YWxpZGF0ZVNlcnZlclVybCkoTi5zZXJ2ZXJVcmwpLHRoaXMuX3NlcnZlclR5cGU9KDAsRS52YWxpZGF0ZVNlcnZlclR5cGUpKE4uc2VydmVyVHlwZSksdGhpcy5f'@;
put 'aHR0cHNBZ2VudE9wdGlvbnM9KDAsRS52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zKShOLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLl9hcHBMb2M9KDAsRS52YWxpZGF0ZUFwcExvYykoTi5hcHBMb2MpLHRoaXMuX2NvbnRleHROYW1lPSgwLEUudmFsaWRhdGVDb250ZXh0TmFtZSkoTi5jb250'@;
put 'ZXh0TmFtZSx0aGlzLl9zZXJ2ZXJUeXBlKSx0aGlzLl9zZXJ2ZXJOYW1lPSgwLEUudmFsaWRhdGVTZXJ2ZXJOYW1lKShOLnNlcnZlck5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc3luY0ZvbGRlcj0oMCxFLnZhbGlkYXRlU3luY0ZvbGRlcikoTi5zeW5jRm9sZGVyKSx0aGlzLl9yZXBv'@;
put 'c2l0b3J5TmFtZT0oMCxFLnZhbGlkYXRlUmVwb3NpdG9yeU5hbWUpKE4ucmVwb3NpdG9yeU5hbWUsdGhpcy5fc2VydmVyVHlwZSksTi5kb2NDb25maWcmJih0aGlzLl9kb2NDb25maWc9KDAsRS52YWxpZGF0ZURvY0NvbmZpZykodGhpcy5nZXRDb25maWcoVS5Db25maWdUeXBlcy5Eb2MsTikp'@;
put 'KSxOLmF1dGhDb25maWcmJih0aGlzLl9hdXRoQ29uZmlnPSgwLEUudmFsaWRhdGVBdXRoQ29uZmlnKSh0aGlzLmdldENvbmZpZyhVLkNvbmZpZ1R5cGVzLkF1dGgsTikpKSxOLmF1dGhDb25maWdTYXM5JiYodGhpcy5fYXV0aENvbmZpZ1Nhczk9KDAsRS52YWxpZGF0ZUF1dGhDb25maWdTYXM5'@;
put 'KShOLmF1dGhDb25maWdTYXM5KSksTi5idWlsZENvbmZpZyYmKHRoaXMuX2J1aWxkQ29uZmlnPSgwLEUudmFsaWRhdGVCdWlsZENvbmZpZykodGhpcy5nZXRDb25maWcoVS5Db25maWdUeXBlcy5CdWlsZCxOKSx0aGlzLl9uYW1lKSksdGhpcy5fZGVwbG95Q29uZmlnPSgwLEUudmFsaWRhdGVE'@;
put 'ZXBsb3lDb25maWcpKE4uZGVwbG95Q29uZmlnP3RoaXMuZ2V0Q29uZmlnKFUuQ29uZmlnVHlwZXMuRGVwbG95LE4pOntkZXBsb3lTZXJ2aWNlUGFjazohMCxkZXBsb3lTY3JpcHRzOltdfSksTi5zZXJ2aWNlQ29uZmlnJiYodGhpcy5fc2VydmljZUNvbmZpZz0oMCxFLnZhbGlkYXRlU2Vydmlj'@;
put 'ZUNvbmZpZykodGhpcy5nZXRDb25maWcoVS5Db25maWdUeXBlcy5TZXJ2aWNlLE4pKSksTi5qb2JDb25maWcmJih0aGlzLl9qb2JDb25maWc9KDAsRS52YWxpZGF0ZUpvYkNvbmZpZykodGhpcy5nZXRDb25maWcoVS5Db25maWdUeXBlcy5Kb2IsTikpKSxOLnN0cmVhbUNvbmZpZyYmKHRoaXMu'@;
put 'X3N0cmVhbUNvbmZpZz0oMCxFLnZhbGlkYXRlU3RyZWFtQ29uZmlnKSh0aGlzLmdldENvbmZpZyhVLkNvbmZpZ1R5cGVzLlN0cmVhbSxOKSkpLE4udGVzdENvbmZpZyYmKHRoaXMuX3Rlc3RDb25maWc9KDAsRS52YWxpZGF0ZVRlc3RDb25maWcpKHRoaXMuZ2V0Q29uZmlnKFUuQ29uZmlnVHlw'@;
put 'ZXMuVGVzdCxOKSkpLE4ubWFjcm9Gb2xkZXJzJiZOLm1hY3JvRm9sZGVycy5sZW5ndGgmJih0aGlzLl9tYWNyb0ZvbGRlcnM9Ti5tYWNyb0ZvbGRlcnMpLE4ucHJvZ3JhbUZvbGRlcnMmJk4ucHJvZ3JhbUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fcHJvZ3JhbUZvbGRlcnM9Ti5wcm9ncmFtRm9s'@;
put 'ZGVycyksTi5iaW5hcnlGb2xkZXJzJiZOLmJpbmFyeUZvbGRlcnMubGVuZ3RoJiYodGhpcy5fYmluYXJ5Rm9sZGVycz1OLmJpbmFyeUZvbGRlcnMpLE4uc3luY0RpcmVjdG9yaWVzJiZOLnN5bmNEaXJlY3Rvcmllcy5sZW5ndGgmJih0aGlzLl9zeW5jRGlyZWN0b3JpZXM9KDAsRS52YWxpZGF0'@;
put 'ZVN5bmNEaXJlY3RvcmllcykoTi5zeW5jRGlyZWN0b3JpZXMpKX1jYXRjaChXKXt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGFyZ2V0OiAiLmNvbmNhdChXLm1lc3NhZ2UpKX19cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwibmFtZSIse2dldDpmdW5j'@;
put 'dGlvbigpe3JldHVybiB0aGlzLl9uYW1lfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwic2VydmVyVXJsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH0sZW51bWVyYWJsZTohMSxjb25maWd1'@;
put 'cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInNlcnZlclR5cGUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmVyVHlwZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUs'@;
put 'Imh0dHBzQWdlbnRPcHRpb25zIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiYXBwTG9jIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IHRoaXMuX2FwcExvY30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImRvY0NvbmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9kb2NDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJhdXRoQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2F1dGhDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJhdXRoQ29uZmln'@;
put 'U2FzOSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnU2FzOX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImJ1aWxkQ29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2J1aWxk'@;
put 'Q29uZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiZGVwbG95Q29uZmlnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlcGxveUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInNlcnZpY2VDb25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsImpvYkNv'@;
put 'bmZpZyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9qb2JDb25maWd9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJzdHJlYW1Db25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3RyZWFtQ29u'@;
put 'ZmlnfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwibWFjcm9Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInByb2dyYW1Gb2xkZXJzIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Byb2dyYW1Gb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiYmluYXJ5'@;
put 'Rm9sZGVycyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9iaW5hcnlGb2xkZXJzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLnByb3RvdHlwZSwiY29udGV4dE5hbWUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29u'@;
put 'dGV4dE5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJzZXJ2ZXJOYW1lIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlcnZlck5hbWV9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSksT2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEIucHJvdG90eXBlLCJyZXBvc2l0b3J5TmFtZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvc2l0b3J5TmFtZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInRlc3RD'@;
put 'b25maWciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInN5bmNGb2xkZXIiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc3luY0ZvbGRl'@;
put 'cn0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQi5wcm90b3R5cGUsInN5bmNEaXJlY3RvcmllcyIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zeW5jRGlyZWN0b3JpZXN9LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSks'@;
put 'Qi5wcm90b3R5cGUudG9Kc29uPWZ1bmN0aW9uKE4pe3ZhciBWLFosVzt2b2lkIDA9PT1OJiYoTj0hMCk7dmFyIHo9e25hbWU6dGhpcy5uYW1lLHNlcnZlclVybDp0aGlzLnNlcnZlclVybCxzZXJ2ZXJUeXBlOnRoaXMuc2VydmVyVHlwZSxodHRwc0FnZW50T3B0aW9uczp0aGlzLmh0dHBzQWdl'@;
put 'bnRPcHRpb25zLGFwcExvYzp0aGlzLmFwcExvYyxkb2NDb25maWc6dGhpcy5kb2NDb25maWcsZGVwbG95Q29uZmlnOnRoaXMuZGVwbG95Q29uZmlnfTtyZXR1cm4hKG51bGw9PT0oVj10aGlzLm1hY3JvRm9sZGVycyl8fHZvaWQgMD09PVYpJiZWLmxlbmd0aCYmKHoubWFjcm9Gb2xkZXJzPXRo'@;
put 'aXMubWFjcm9Gb2xkZXJzKSwhKG51bGw9PT0oWj10aGlzLnByb2dyYW1Gb2xkZXJzKXx8dm9pZCAwPT09WikmJloubGVuZ3RoJiYoei5wcm9ncmFtRm9sZGVycz10aGlzLnByb2dyYW1Gb2xkZXJzKSwhKG51bGw9PT0oVz10aGlzLmJpbmFyeUZvbGRlcnMpfHx2b2lkIDA9PT1XKSYmVy5sZW5n'@;
put 'dGgmJih6LmJpbmFyeUZvbGRlcnM9dGhpcy5iaW5hcnlGb2xkZXJzKSx0aGlzLmF1dGhDb25maWcmJih6LmF1dGhDb25maWc9dGhpcy5hdXRoQ29uZmlnKSx0aGlzLmF1dGhDb25maWdTYXM5JiYoei5hdXRoQ29uZmlnU2FzOT10aGlzLmF1dGhDb25maWdTYXM5KSx0aGlzLnN5bmNEaXJlY3Rv'@;
put 'cmllcz96LnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJlY3RvcmllczpOJiYoei5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/ei5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOk4mJih6LmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToi'@;
put 'IixidWlsZE91dHB1dEZpbGVOYW1lOiIiLmNvbmNhdCh0aGlzLm5hbWUsIi5zYXMiKSxidWlsZE91dHB1dEZvbGRlcjoic2FzanNidWlsZCIsYnVpbGRSZXN1bHRzRm9sZGVyOiJzYXNqc3Jlc3VsdHMiLG1hY3JvVmFyczp7fX0pLHRoaXMuam9iQ29uZmlnP3ouam9iQ29uZmlnPXRoaXMuam9i'@;
put 'Q29uZmlnOk4mJih6LmpvYkNvbmZpZz17am9iRm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnNlcnZpY2VDb25maWc/ei5zZXJ2aWNlQ29uZmlnPXRoaXMuc2VydmljZUNvbmZpZzpOJiYoei5zZXJ2aWNlQ29uZmlnPXtzZXJ2aWNl'@;
put 'Rm9sZGVyczpbXSxpbml0UHJvZ3JhbToiIix0ZXJtUHJvZ3JhbToiIixtYWNyb1ZhcnM6e319KSx0aGlzLnN0cmVhbUNvbmZpZz96LnN0cmVhbUNvbmZpZz10aGlzLnN0cmVhbUNvbmZpZzpOJiYoei5zdHJlYW1Db25maWc9e3N0cmVhbVdlYkZvbGRlcjoiIixzdHJlYW1XZWI6ITEsd2ViU291'@;
put 'cmNlUGF0aDoiIixzdHJlYW1TZXJ2aWNlTmFtZToiIixhc3NldFBhdGhzOltdfSksdGhpcy50ZXN0Q29uZmlnP3oudGVzdENvbmZpZz10aGlzLnRlc3RDb25maWc6TiYmKHoudGVzdENvbmZpZz17aW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9LHRlc3RTZXRVcDoi'@;
put 'Iix0ZXN0VGVhckRvd246IiJ9KSx0aGlzLnNlcnZlclR5cGU9PT1JLlNlcnZlclR5cGUuU2FzVml5YT96LmNvbnRleHROYW1lPXRoaXMuY29udGV4dE5hbWU6dGhpcy5zZXJ2ZXJUeXBlPT09SS5TZXJ2ZXJUeXBlLlNhczkmJih6LnNlcnZlck5hbWU9dGhpcy5zZXJ2ZXJOYW1lLHoucmVwb3Np'@;
put 'dG9yeU5hbWU9dGhpcy5yZXBvc2l0b3J5TmFtZSksen0sQn0oKTtBLlRhcmdldD1rfSw2NzgxOmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEUpe3JldHVybiBFJiZFLl9fZXNNb2R1bGU/RTp7ZGVmYXVsdDpF'@;
put 'fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9QS52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPUEudmFsaWRhdGVTeW5jRm9sZGVyPUEudmFsaWRhdGVTZXJ2ZXJOYW1lPUEudmFsaWRhdGVDb250ZXh0TmFt'@;
put 'ZT1BLnZhbGlkYXRlU3RyZWFtQ29uZmlnPUEudmFsaWRhdGVEZXBsb3lDb25maWc9QS52YWxpZGF0ZUpvYkNvbmZpZz1BLnZhbGlkYXRlVGVzdENvbmZpZz1BLnZhbGlkYXRlU2VydmljZUNvbmZpZz1BLnZhbGlkYXRlQnVpbGRDb25maWc9QS52YWxpZGF0ZUF1dGhDb25maWdTYXM5PUEudmFs'@;
put 'aWRhdGVBdXRoQ29uZmlnPUEudmFsaWRhdGVEb2NDb25maWc9QS52YWxpZGF0ZUFwcExvYz1BLnZhbGlkYXRlSHR0cHNBZ2VudE9wdGlvbnM9QS52YWxpZGF0ZVNlcnZlclVybD1BLnZhbGlkYXRlVGFyZ2V0TmFtZT1BLnZhbGlkYXRlU2VydmVyVHlwZT12b2lkIDA7dmFyIFU9UChEKDQ4MSkp'@;
put 'LEk9RCgzOTAwKTtBLnZhbGlkYXRlU2VydmVyVHlwZT1mdW5jdGlvbihFKXtpZighRSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc2VydmVyIHR5cGU6IGBzZXJ2ZXJUeXBlYCBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoRSE9PUkuU2VydmVyVHlwZS5TYXM5JiZFIT09SS5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWEmJkUhPT1JLlNlcnZlclR5cGUuU2FzanMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZlciB0eXBlOiBTdXBwb3J0ZWQgdmFsdWVzIGZvciAgYHNlcnZlclR5cGVgIGFyZSAiLmNvbmNhdChJLlNlcnZlclR5cGUuU2FzVml5YSwiLCAiKS5jb25jYXQoSS5T'@;
put 'ZXJ2ZXJUeXBlLlNhczksIiBhbmQgIikuY29uY2F0KEkuU2VydmVyVHlwZS5TYXNqcywiLiIpKTtyZXR1cm4gRX0sQS52YWxpZGF0ZVRhcmdldE5hbWU9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGJlIGVtcHR5'@;
put 'LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihFLnRyaW0oKS5pbmNsdWRlcygiICIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbm5vdCBpbmNsdWRlIHNwYWNlcy4iKTtpZighL15bYS16QS1aMC05XC1dKyQvaS50ZXN0KEUpKXRocm93IG5ldyBFcnJv'@;
put 'cigiSW52YWxpZCB0YXJnZXQgbmFtZTogYG5hbWVgIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIGRhc2hlcy4iKTtyZXR1cm4gRX0sQS52YWxpZGF0ZVNlcnZlclVybD1mdW5jdGlvbihFKXtpZihudWxsPT1FJiYoRT0iIiksIiIhPT1FJiYhVS5kZWZhdWx0'@;
put 'LmlzSHR0cFVyaShFKSYmIVUuZGVmYXVsdC5pc0h0dHBzVXJpKEUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBgc2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1z'@;
put 'ZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gRX0sQS52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPWZ1bmN0aW9uKEUpe2lmKEUpe2lmKCJvYmplY3QiIT10eXBlb2YgRSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdmFsdWU6IGBodHRwc0FnZW50T3B0aW9uc2Agc2hvdWxkIGVpdGhlciBi'@;
put 'ZSBhbiBlbXB0eSBvciBhbiBvYmplY3Qgb2YgYEh0dHBzQWdlbnRPcHRpb25zYCIpO2lmKG51bGw9PUUuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKUUuYWxsb3dJbnNlY3VyZVJlcXVlc3RzPSExO2Vsc2UgaWYoImJvb2xlYW4iIT10eXBlb2YgRS5hbGxvd0luc2VjdXJlUmVxdWVzdHMpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnMuYWxsb3dJbnNlY3VyZVJlcXVlc3RzYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IG9yIGEgYm9vbGVhbiIpO3JldHVybiJzdHJpbmciIT10eXBlb2YgRS5jYVBhdGgmJihFLmNhUGF0aD12b2lkIDApLCJzdHJp'@;
put 'bmciIT10eXBlb2YgRS5rZXlQYXRoJiYoRS5rZXlQYXRoPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBFLmNlcnRQYXRoJiYoRS5jZXJ0UGF0aD12b2lkIDApLEV9fSxBLnZhbGlkYXRlQXBwTG9jPWZ1bmN0aW9uKEUpe2lmKCFFKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRp'@;
put 'b246IGBhcHBMb2NgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoIUUuc3RhcnRzV2l0aCgiLyIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhcHAgbG9jYXRpb246IGBhcHBMb2NgIG11c3Qgc3RhcnQgd2l0aCBhIGAvYC4iKTtyZXR1cm4gRX0sQS52YWxpZGF0'@;
put 'ZURvY0NvbmZpZz1mdW5jdGlvbihFKXtpZihFfHwoRT17fSksImJvb2xlYW4iIT10eXBlb2YgRS5kaXNwbGF5TWFjcm9Db3JlJiYoRS5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCksImJvb2xlYW4iIT10eXBlb2YgRS5lbmFibGVMaW5lYWdlJiYoRS5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0'@;
put 'cmluZyIhPXR5cGVvZiBFLm91dERpcmVjdG9yeSYmKEUub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBFLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PUUuZGF0YUNvbnRyb2xsZXJVcmwmJiFVLmRlZmF1bHQuaXNIdHRwVXJpKEUuZGF0YUNvbnRyb2xsZXJVcmwpJiYh'@;
put 'VS5kZWZhdWx0LmlzSHR0cHNVcmkoRS5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxlclVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZv'@;
put 'cm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBFLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gRX0sQS52YWxpZGF0ZUF1dGhDb25maWc9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnOiBKU09OIGNh'@;
put 'bm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gRX0sQS52YWxpZGF0ZUF1dGhDb25maWdTYXM5PWZ1bmN0aW9uKEUpe2lmKCFFKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7'@;
put 'aWYoIUUudXNlck5hbWV8fCFFLnBhc3N3b3JkKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZyBmb3Igc2FzOTogdXNlck5hbWUgYW5kIHBhc3N3b3JkIGNhbiBub3QgYmUgZW1wdHkiKTtyZXR1cm4gRX0sQS52YWxpZGF0ZUJ1aWxkQ29uZmlnPWZ1bmN0aW9uKEUsayl7aWYo'@;
put 'IUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGJ1aWxkIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIEUuYnVpbGRSZXN1bHRzRm9sZGVyfHwoRS5idWlsZFJlc3VsdHNGb2xkZXI9InNhc2pzcmVzdWx0cyIpLEUuYnVpbGRPdXRwdXRGb2xkZXJ8'@;
put 'fChFLmJ1aWxkT3V0cHV0Rm9sZGVyPSJzYXNqc2J1aWxkIiksRS5idWlsZE91dHB1dEZpbGVOYW1lfHwoRS5idWlsZE91dHB1dEZpbGVOYW1lPSIiLmNvbmNhdChrLCIuc2FzIikpLEUuaW5pdFByb2dyYW18fChFLmluaXRQcm9ncmFtPSIiKSxFLnRlcm1Qcm9ncmFtfHwoRS50ZXJtUHJvZ3Jh'@;
put 'bT0iIiksRS5tYWNyb1ZhcnN8fChFLm1hY3JvVmFycz17fSksRX0sQS52YWxpZGF0ZVNlcnZpY2VDb25maWc9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHNlcnZpY2UgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4g'@;
put 'RS5pbml0UHJvZ3JhbXx8KEUuaW5pdFByb2dyYW09IiIpLEUudGVybVByb2dyYW18fChFLnRlcm1Qcm9ncmFtPSIiKSxFLnNlcnZpY2VGb2xkZXJzfHwoRS5zZXJ2aWNlRm9sZGVycz1bXSksRS5tYWNyb1ZhcnN8fChFLm1hY3JvVmFycz17fSksRX0sQS52YWxpZGF0ZVRlc3RDb25maWc9ZnVu'@;
put 'Y3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRlc3QgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gRS5pbml0UHJvZ3JhbXx8KEUuaW5pdFByb2dyYW09IiIpLEUudGVybVByb2dyYW18fChFLnRlcm1Qcm9ncmFtPSIiKSxF'@;
put 'Lm1hY3JvVmFyc3x8KEUubWFjcm9WYXJzPXt9KSxFLnRlc3RTZXRVcHx8KEUudGVzdFNldFVwPSIiKSxFLnRlc3RUZWFyRG93bnx8KEUudGVzdFRlYXJEb3duPSIiKSxFfSxBLnZhbGlkYXRlSm9iQ29uZmlnPWZ1bmN0aW9uKEUpe2lmKCFFKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2Ig'@;
put 'Y29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gRS5pbml0UHJvZ3JhbXx8KEUuaW5pdFByb2dyYW09IiIpLEUudGVybVByb2dyYW18fChFLnRlcm1Qcm9ncmFtPSIiKSxFLmpvYkZvbGRlcnN8fChFLmpvYkZvbGRlcnM9W10pLEUubWFjcm9WYXJzfHwo'@;
put 'RS5tYWNyb1ZhcnM9e30pLEV9LEEudmFsaWRhdGVEZXBsb3lDb25maWc9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGRlcGxveSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBFLmRlcGxveVNlcnZpY2VQYWNrPSEh'@;
put 'RS5kZXBsb3lTZXJ2aWNlUGFjayxFLmRlcGxveVNjcmlwdHN8fChFLmRlcGxveVNjcmlwdHM9W10pLEV9LEEudmFsaWRhdGVTdHJlYW1Db25maWc9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3Ig'@;
put 'dW5kZWZpbmVkLiIpO2lmKCEwIT09RS5zdHJlYW1XZWImJiExIT09RS5zdHJlYW1XZWIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJgIGNhbm5vdCBiZSBhIG5vbi1ib29sZWFuIHZhbHVlLiIpO2lmKEUuc3RyZWFtV2ViJiYhRS5zdHJlYW1XZWJG'@;
put 'b2xkZXIpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGBzdHJlYW1XZWJGb2xkZXJgIGNhbm5vdCBiZSBlbXB0eSwgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBgc3RyZWFtV2ViYCBpcyB0cnVlLiIpO2lmKEUuc3RyZWFtV2ViJiYhRS53ZWJTb3VyY2VQYXRoKXRocm93'@;
put 'IG5ldyBFcnJvcigiSW52YWxpZCBzdHJlYW0gY29uZmlnOiBgd2ViU291cmNlUGF0aGAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gRS5zdHJlYW1Mb2dvJiYic3RyaW5nIiE9dHlwZW9mIEUuc3RyZWFtTG9nbyYmKEUuc3RyZWFtTG9nbz12b2lkIDApLEUu'@;
put 'YXNzZXRQYXRoc3x8KEUuYXNzZXRQYXRocz1bXSksRS5zdHJlYW1TZXJ2aWNlTmFtZXx8KEUuc3RyZWFtU2VydmljZU5hbWU9ImNsaWNrbWUiKSxFfSxBLnZhbGlkYXRlQ29udGV4dE5hbWU9ZnVuY3Rpb24oRSxrKXtyZXR1cm4gayE9PUkuU2VydmVyVHlwZS5TYXNWaXlhfHxFP0U6IlNBUyBK'@;
put 'b2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCJ9LEEudmFsaWRhdGVTZXJ2ZXJOYW1lPWZ1bmN0aW9uKEUsayl7cmV0dXJuIGshPT1JLlNlcnZlclR5cGUuU2FzOXx8RT9FOiJTQVNBcHAifSxBLnZhbGlkYXRlU3luY0ZvbGRlcj1mdW5jdGlvbihFKXtpZigic3RyaW5nIj09dHlwZW9mIEUm'@;
put 'JkUpcmV0dXJuIEV9LEEudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1mdW5jdGlvbihFLGspe3JldHVybiBrIT09SS5TZXJ2ZXJUeXBlLlNhczl8fEU/RToiRm91bmRhdGlvbiJ9LEEudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXM9ZnVuY3Rpb24oRSl7aWYoIUUpdGhyb3cgbmV3IEVycm9yKCJJbnZh'@;
put 'bGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBFLmZvckVhY2goZnVuY3Rpb24oayl7aWYoIWsubG9jYWx8fCFrLnJlbW90ZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3luY0RpcmVjdG9yeSBjb25maWc6IHZh'@;
put 'bHVlcyBvZiBwcm9wZXJ0eSAnbG9jYWwnIGFuZCAncmVtb3RlIGNhbiBub3QgYmUgZW1wdHkgb3IgdW5kZWZpbmVkIil9KSxFfX0sMjkyNzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoODc2NCkuQnVmZmVyLFU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0'@;
put 'aW9uKGspe3JldHVybiBrJiZrLl9fZXNNb2R1bGU/azp7ZGVmYXVsdDprfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZGVjb2RlRnJvbUJhc2U2ND1BLmVuY29kZVRvQmFzZTY0PXZvaWQgMDt2YXIgST1VKEQoNTgzNSkpLEU9IntzYXNqc19l'@;
put 'bmNvZGVkfSI7QS5lbmNvZGVUb0Jhc2U2ND1mdW5jdGlvbihrKXt2YXIgQj1JLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4IiksTj1QLmZyb20oQitrKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEUrTn0sQS5kZWNvZGVGcm9tQmFzZTY0PWZ1bmN0aW9uKGspe3Jl'@;
put 'dHVybiBrLnN0YXJ0c1dpdGgoRSk/KGs9ay5yZXBsYWNlKC9ee3Nhc2pzX2VuY29kZWR9LywiIiksUC5mcm9tKGssImJhc2U2NCIpLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDIwMCkpOmt9fSw1ODE6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEEuYnl0ZXNUb1NpemU9dm9pZCAwLEEuYnl0ZXNUb1NpemU9ZnVuY3Rpb24oRCxQLFUpe2lmKHZvaWQgMD09PVAmJihQPTEpLHZvaWQgMD09PVUmJihVPTEwOTk1MTE2Mjc3NzYpLDA9PT1EKXJldHVybiIwIEIiO0Q9RD5VP1U6RDt2YXIgST1QPDA/MDpQLEU9TWF0'@;
put 'aC5mbG9vcihNYXRoLmxvZyhEKS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKEQvTWF0aC5wb3coMTAyNCxFKSkudG9GaXhlZChJKSsiICIrWyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtFXX19LDg2NTM6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNN'@;
put 'b2R1bGUiLHt2YWx1ZTohMH0pLEEuY2h1bms9dm9pZCAwLEEuY2h1bms9ZnVuY3Rpb24oRCxQKXtyZXR1cm4gdm9pZCAwPT09UCYmKFA9MjIwKSxELmxlbmd0aDw9UD9bRF06KEQubWF0Y2gobmV3IFJlZ0V4cCgiLnsxLCIrUCsifSIsImciKSl8fFtdKS5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0'@;
put 'dXJuISFVfSl9fSw2NDU3OmZ1bmN0aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBEPXRoaXMmJnRoaXMuX19yZWFkfHxmdW5jdGlvbihVLEkpe3ZhciBFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlVbU3ltYm9sLml0ZXJhdG9yXTtpZighRSlyZXR1cm4gVTt2YXIgayxCLE49RS5jYWxs'@;
put 'KFUpLFY9W107dHJ5e2Zvcig7KHZvaWQgMD09PUl8fEktLSA+MCkmJiEoaz1OLm5leHQoKSkuZG9uZTspVi5wdXNoKGsudmFsdWUpfWNhdGNoKFope0I9e2Vycm9yOlp9fWZpbmFsbHl7dHJ5e2smJiFrLmRvbmUmJihFPU4ucmV0dXJuKSYmRS5jYWxsKE4pfWZpbmFsbHl7aWYoQil0aHJvdyBC'@;
put 'LmVycm9yfX1yZXR1cm4gVn0sUD10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKFUsSSxFKXtpZihFfHwyPT09YXJndW1lbnRzLmxlbmd0aClmb3IodmFyIGssQj0wLE49SS5sZW5ndGg7QjxOO0IrKykhayYmQiBpbiBJfHwoa3x8KGs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNh'@;
put 'bGwoSSwwLEIpKSxrW0JdPUlbQl0pO3JldHVybiBVLmNvbmNhdChrfHxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJKSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmRpZmY9dm9pZCAwLEEuZGlmZj1mdW5jdGlvbihVLEkpe3ZhciBFPVUu'@;
put 'ZmlsdGVyKGZ1bmN0aW9uKEIpe3JldHVybiJvYmplY3QiPT10eXBlb2YgQj8hSlNPTi5zdHJpbmdpZnkoSSkuaW5jbHVkZXMoSlNPTi5zdHJpbmdpZnkoQikpOiFJLmluY2x1ZGVzKEIpfSksaz1JLmZpbHRlcihmdW5jdGlvbihCKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEI/IUpTT04uc3Ry'@;
put 'aW5naWZ5KFUpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KEIpKTohVS5pbmNsdWRlcyhCKX0pO3JldHVybiBQKFAoW10sRChFKSwhMSksRChrKSwhMSl9fSwxNTI5Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxB'@;
put 'LmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7dmFyIEQ9e1NBU1ZJWUE6Ii9TQVNKb2JFeGVjdXRpb24iLFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIn07QS5nZXRFeGVjdXRvclBhdGg9ZnVuY3Rpb24oUCl7cmV0dXJuIFA/KFA9UC50b1VwcGVyQ2FzZSgpLERbUF18fCIiKToiIn19LDMzMTY6'@;
put 'KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZXRUcmVlRXhhbXBsZT1BLmlzRmlsZVRyZWU9dm9pZCAwO3ZhciBQPUQoMzkwMCk7QS5pc0ZpbGVUcmVlPWZ1bmN0aW9uKGspe3JldHVybiBrJiZrLm1lbWJl'@;
put 'cnMmJkFycmF5LmlzQXJyYXkoay5tZW1iZXJzKSYmMD09PWsubWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oQil7cmV0dXJuIVUoQikmJiFJKEIpJiYhRShCKX0pLmxlbmd0aH07dmFyIFU9ZnVuY3Rpb24oayl7cmV0dXJuIGsmJiJzdHJpbmciPT10eXBlb2Ygay5uYW1lJiZrLnR5cGU9PT1QLk1l'@;
put 'bWJlclR5cGUuc2VydmljZSYmInN0cmluZyI9PXR5cGVvZiBrLmNvZGV9LEk9ZnVuY3Rpb24oayl7cmV0dXJuIGsmJiJzdHJpbmciPT10eXBlb2Ygay5uYW1lJiZrLnR5cGU9PT1QLk1lbWJlclR5cGUuZmlsZSYmInN0cmluZyI9PXR5cGVvZiBrLmNvZGV9LEU9ZnVuY3Rpb24oayl7cmV0dXJu'@;
put 'IGsmJiJzdHJpbmciPT10eXBlb2Ygay5uYW1lJiZrLnR5cGU9PT1QLk1lbWJlclR5cGUuZm9sZGVyJiZrLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoay5tZW1iZXJzKSYmMD09PWsubWVtYmVycy5maWx0ZXIoZnVuY3Rpb24oQil7cmV0dXJuIVUoQikmJiFJKEIpJiYhRShCKX0pLmxlbmd0aH07'@;
put 'QS5nZXRUcmVlRXhhbXBsZT1mdW5jdGlvbigpe3JldHVybnttZW1iZXJzOlt7bmFtZToiam9icyIsdHlwZTpQLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJleHRyYWN0Iix0eXBlOlAuTWVtYmVyVHlwZS5mb2xkZXIsbWVtYmVyczpbe25hbWU6Im1ha2VkYXRhMSIsdHlwZTpQ'@;
put 'Lk1lbWJlclR5cGUuc2VydmljZSxjb2RlOiIlcHV0IEhlbGxvIFdvcmxkITsifV19XX1dfX19LDYyNjY6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVyx6LHEsUSl7dm9pZCAwPT09'@;
put 'USYmKFE9cSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFcsUSx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geltxXX19KX06ZnVuY3Rpb24oVyx6LHEsUSl7dm9pZCAwPT09USYmKFE9cSksV1tRXT16W3FdfSksVT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24o'@;
put 'Vyx6KXtmb3IodmFyIHEgaW4gVykiZGVmYXVsdCI9PT1xfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixxKXx8UCh6LFcscSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmNodW5rPUEuZGlmZj1BLmJ5dGVzVG9TaXpl'@;
put 'PUEuZ2V0RXhlY3V0b3JQYXRoPUEuZGVjb2RlRnJvbUJhc2U2ND1BLmVuY29kZVRvQmFzZTY0PUEudXJsT3JpZ2luPUEuZ2VuZXJhdGVQYXRoRm9yU2FzPUEuZ2V0TWFjcm9zUGF0aD1BLmVzY2FwZVdpblNsYXNoZXM9QS5pc0xpbnV4PUEuaXNXaW5kb3dzPUEudW5pcUFycmF5PUEuYXN5bmNG'@;
put 'b3JFYWNoPUEudXVpZHY0PXZvaWQgMDt2YXIgST1EKDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYXN5bmNGb3JFYWNoIix7ZW51bWVy'@;
put 'YWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkudW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJpc1dp'@;
put 'bmRvd3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'QSwiZXNjYXBlV2luU2xhc2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEkuZ2V0TWFj'@;
put 'cm9zUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVBhdGhGb3JTYXN9fSksVShEKDMzMTYpLEEpO3ZhciBFPUQoOTY1Mik7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEEsInVybE9yaWdpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEUudXJsT3JpZ2lufX0pO3ZhciBrPUQoMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gay5lbmNv'@;
put 'ZGVUb0Jhc2U2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGsuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgQj1EKDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJnZXRFeGVjdXRv'@;
put 'clBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgTj1EKDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTi5ieXRlc1RvU2l6'@;
put 'ZX19KTt2YXIgVj1EKDY0NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVi5kaWZmfX0pO3ZhciBaPUQoODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImNodW5rIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gWi5jaHVua319KX0sOTY1MjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS51cmxPcmlnaW49dm9pZCAwLEEudXJsT3JpZ2luPWZ1bmN0aW9uKEQpe2lmKCIiPT09RClyZXR1cm4gRDt2'@;
put 'YXIgUDt0cnl7UD1uZXcgVVJMKEQpLm9yaWdpbn1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVVJMLiIpfXJldHVybiBQfX0sMTEzMTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixOLFYs'@;
put 'Wil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oVyx6KXtmdW5jdGlvbiBxKGFlKXt0cnl7dGUoWi5uZXh0KGFlKSl9Y2F0Y2goc2Upe3ooc2UpfX1mdW5jdGlvbiBRKGFlKXt0cnl7dGUoWi50aHJvdyhhZSkpfWNhdGNoKHNlKXt6KHNlKX19ZnVuY3Rpb24gdGUoYWUpe3Zh'@;
put 'ciBzZTthZS5kb25lP1coYWUudmFsdWUpOihzZT1hZS52YWx1ZSxzZSBpbnN0YW5jZW9mIFY/c2U6bmV3IFYoZnVuY3Rpb24oZGUpe2RlKHNlKX0pKS50aGVuKHEsUSl9dGUoKFo9Wi5hcHBseShCLE58fFtdKSkubmV4dCgpKX0pfSxJPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9u'@;
put 'KEIsTil7dmFyIFYsWixXLHoscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZXWzBdKXRocm93IFdbMV07cmV0dXJuIFdbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gej17bmV4dDpRKDApLHRocm93OlEoMSkscmV0dXJuOlEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wm'@;
put 'Jih6W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHo7ZnVuY3Rpb24gUSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKGFlKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lmKFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zv'@;
put 'cig7cTspdHJ5e2lmKFY9MSxaJiYoVz0yJnNlWzBdP1oucmV0dXJuOnNlWzBdP1oudGhyb3d8fCgoVz1aLnJldHVybikmJlcuY2FsbChaKSwwKTpaLm5leHQpJiYhKFc9Vy5jYWxsKFosc2VbMV0pKS5kb25lKXJldHVybiBXO3N3aXRjaChaPTAsVyYmKHNlPVsyJnNlWzBdLFcudmFsdWVdKSxz'@;
put 'ZVswXSl7Y2FzZSAwOmNhc2UgMTpXPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFo9c2VbMV0sc2U9WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVm'@;
put 'YXVsdDppZighKChXPShXPXEudHJ5cykubGVuZ3RoPjAmJldbVy5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighV3x8c2VbMV0+V1swXSYmc2VbMV08V1szXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZx'@;
put 'LmxhYmVsPFdbMV0pe3EubGFiZWw9V1sxXSxXPXNlO2JyZWFrfWlmKFcmJnEubGFiZWw8V1syXSl7cS5sYWJlbD1XWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVdbMl0mJnEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1OLmNhbGwoQixxKX1jYXRjaChkZSl7c2U9WzYsZGVd'@;
put 'LFo9MH1maW5hbGx5e1Y9Vz0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLGFlXSl9fX0sRT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIuX19lc01vZHVsZT9COntk'@;
put 'ZWZhdWx0OkJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZW5lcmF0ZVBhdGhGb3JTYXM9QS5nZXRNYWNyb3NQYXRoPUEuZXNjYXBlV2luU2xhc2hlcz1BLmlzTGludXg9QS5pc1dpbmRvd3M9QS51bmlxQXJyYXk9QS51dWlkdjQ9QS5hc3lu'@;
put 'Y0ZvckVhY2g9dm9pZCAwO3ZhciBrPUUoRCgyNTIwKSk7QS5hc3luY0ZvckVhY2g9ZnVuY3Rpb24oQixOKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVjtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFope3N3aXRjaChaLmxhYmVsKXtjYXNlIDA6Vj0wLFoubGFi'@;
put 'ZWw9MTtjYXNlIDE6cmV0dXJuIFY8Qi5sZW5ndGg/WzQsTihCW1ZdLFYsQildOlszLDRdO2Nhc2UgMjpaLnNlbnQoKSxaLmxhYmVsPTM7Y2FzZSAzOnJldHVybiBWKyssWzMsMV07Y2FzZSA0OnJldHVyblsyXX19KX0pfSxBLnV1aWR2ND1mdW5jdGlvbigpe3JldHVybiJ4eHh4eHh4eC14eHh4'@;
put 'LTR4eHgteXh4eC14eHh4eHh4eHh4eHgiLnJlcGxhY2UoL1t4eV0vZyxmdW5jdGlvbihCKXt2YXIgTj0xNipNYXRoLnJhbmRvbSgpfDA7cmV0dXJuKCJ4Ij09Qj9OOjMmTnw4KS50b1N0cmluZygxNil9KX0sQS51bmlxQXJyYXk9ZnVuY3Rpb24oQil7cmV0dXJuIEFycmF5LmZyb20obmV3IFNl'@;
put 'dChCKSl9LEEuaXNXaW5kb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIndpbjMyIj09PVAucGxhdGZvcm19LEEuaXNMaW51eD1mdW5jdGlvbigpe3JldHVybiJsaW51eCI9PT1QLnBsYXRmb3JtfSxBLmVzY2FwZVdpblNsYXNoZXM9ZnVuY3Rpb24oQil7cmV0dXJuKDAsQS5pc1dpbmRvd3MpKCk/Qi5y'@;
put 'ZXBsYWNlKC9cXC9nLCJcXFxcIik6Qn0sQS5nZXRNYWNyb3NQYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIGsuZGVmYXVsdC5qb2luKCIvIiwiLi4iLCJtYWNyb3MiKX0sQS5nZW5lcmF0ZVBhdGhGb3JTYXM9ZnVuY3Rpb24oQil7cmV0dXJuIEIucmVwbGFjZSgvXFwvZywiLyIpfX0sOTgwOToodyxB'@;
put 'LEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9QTtQLmJpZ251bT1EKDQ1OTApLFAuZGVmaW5lPUQoMjUwMCkuZGVmaW5lLFAuYmFzZT1EKDE5NzkpLFAuY29uc3RhbnRzPUQoNjgyNiksUC5kZWNvZGVycz1EKDgzMDcpLFAuZW5jb2RlcnM9RCg2NTc5KX0sMjUwMDoodyxBLEQpPT57InVzZSBz'@;
put 'dHJpY3QiO2NvbnN0IFA9RCg2NTc5KSxVPUQoODMwNyksST1EKDU3MTcpO2Z1bmN0aW9uIEUoayxCKXt0aGlzLm5hbWU9ayx0aGlzLmJvZHk9Qix0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319QS5kZWZpbmU9ZnVuY3Rpb24oayxCKXtyZXR1cm4gbmV3IEUoayxCKX0sRS5wcm90'@;
put 'b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKGspe2NvbnN0IEI9dGhpcy5uYW1lO2Z1bmN0aW9uIE4oVil7dGhpcy5faW5pdE5hbWVkKFYsQil9cmV0dXJuIEkoTixrKSxOLnByb3RvdHlwZS5faW5pdE5hbWVkPWZ1bmN0aW9uKFYsWil7ay5jYWxsKHRoaXMsVixaKX0sbmV3IE4odGhpcyl9'@;
put 'LEUucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KGs9a3x8ImRlciIpfHwodGhpcy5kZWNvZGVyc1trXT10aGlzLl9jcmVhdGVOYW1lZChVW2tdKSksdGhpcy5kZWNvZGVyc1trXX0sRS5wcm90b3R5cGUuZGVjb2Rl'@;
put 'PWZ1bmN0aW9uKGssQixOKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihCKS5kZWNvZGUoayxOKX0sRS5wcm90b3R5cGUuX2dldEVuY29kZXI9ZnVuY3Rpb24oayl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoaz1rfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW2tdPXRoaXMu'@;
put 'X2NyZWF0ZU5hbWVkKFBba10pKSx0aGlzLmVuY29kZXJzW2tdfSxFLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oayxCLE4pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEIpLmVuY29kZShrLE4pfX0sNjYyNToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg1NzE3KSxVPUQoODQ2'@;
put 'NSkuYixJPUQoMjM5OSkuQnVmZmVyO2Z1bmN0aW9uIEUoQixOKXtVLmNhbGwodGhpcyxOKSxJLmlzQnVmZmVyKEIpPyh0aGlzLmJhc2U9Qix0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPUIubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gayhCLE4pe2lm'@;
put 'KEFycmF5LmlzQXJyYXkoQikpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPUIubWFwKGZ1bmN0aW9uKFYpe3JldHVybiBrLmlzRW5jb2RlckJ1ZmZlcihWKXx8KFY9bmV3IGsoVixOKSksdGhpcy5sZW5ndGgrPVYubGVuZ3RoLFZ9LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBCKXtp'@;
put 'ZighKDA8PUImJkI8PTI1NSkpcmV0dXJuIE4uZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPUIsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgQil0aGlzLnZhbHVlPUIsdGhpcy5sZW5ndGg9SS5ieXRlTGVuZ3RoKEIpO2Vsc2V7'@;
put 'aWYoIUkuaXNCdWZmZXIoQikpcmV0dXJuIE4uZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIEIpO3RoaXMudmFsdWU9Qix0aGlzLmxlbmd0aD1CLmxlbmd0aH19UChFLFUpLEEuQz1FLEUuaXNEZWNvZGVyQnVmZmVyPWZ1bmN0aW9uKEIpe3JldHVybiBCIGluc3RhbmNlb2YgRXx8'@;
put 'Im9iamVjdCI9PXR5cGVvZiBCJiZJLmlzQnVmZmVyKEIuYmFzZSkmJiJEZWNvZGVyQnVmZmVyIj09PUIuY29uc3RydWN0b3IubmFtZSYmIm51bWJlciI9PXR5cGVvZiBCLm9mZnNldCYmIm51bWJlciI9PXR5cGVvZiBCLmxlbmd0aCYmImZ1bmN0aW9uIj09dHlwZW9mIEIuc2F2ZSYmImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIEIucmVzdG9yZSYmImZ1bmN0aW9uIj09dHlwZW9mIEIuaXNFbXB0eSYmImZ1bmN0aW9uIj09dHlwZW9mIEIucmVhZFVJbnQ4JiYiZnVuY3Rpb24iPT10eXBlb2YgQi5za2lwJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5yYXd9LEUucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24o'@;
put 'KXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOlUucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEUucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oQil7Y29uc3QgTj1uZXcgRSh0aGlzLmJhc2UpO3JldHVybiBOLm9mZnNldD1CLm9mZnNldCxOLmxlbmd0aD10aGlzLm9m'@;
put 'ZnNldCx0aGlzLm9mZnNldD1CLm9mZnNldCxVLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyxCLnJlcG9ydGVyKSxOfSxFLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LEUucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlv'@;
put 'bihCKXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKEJ8fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKX0sRS5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbihCLE4pe2lmKCEodGhpcy5vZmZzZXQr'@;
put 'Qjw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKE58fCJEZWNvZGVyQnVmZmVyIG92ZXJydW4iKTtjb25zdCBWPW5ldyBFKHRoaXMuYmFzZSk7cmV0dXJuIFYuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxWLm9mZnNldD10aGlzLm9mZnNldCxWLmxlbmd0aD10aGlz'@;
put 'Lm9mZnNldCtCLHRoaXMub2Zmc2V0Kz1CLFZ9LEUucHJvdG90eXBlLnJhdz1mdW5jdGlvbihCKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKEI/Qi5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxBLlI9ayxrLmlzRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihCKXtyZXR1cm4gQiBpbnN0'@;
put 'YW5jZW9mIGt8fCJvYmplY3QiPT10eXBlb2YgQiYmIkVuY29kZXJCdWZmZXIiPT09Qi5jb25zdHJ1Y3Rvci5uYW1lJiYibnVtYmVyIj09dHlwZW9mIEIubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgQi5qb2lufSxrLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKEIsTil7cmV0dXJuIEJ8fChC'@;
put 'PUkuYWxsb2ModGhpcy5sZW5ndGgpKSxOfHwoTj0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihWKXtWLmpvaW4oQixOKSxOKz1WLmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/QltO'@;
put 'XT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9CLndyaXRlKHRoaXMudmFsdWUsTik6SS5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEIsTiksTis9dGhpcy5sZW5ndGgpKSxCfX0sMTk3OToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9'@;
put 'QTtQLlJlcG9ydGVyPUQoODQ2NSkuYixQLkRlY29kZXJCdWZmZXI9RCg2NjI1KS5DLFAuRW5jb2RlckJ1ZmZlcj1EKDY2MjUpLlIsUC5Ob2RlPUQoMTk0OSl9LDE5NDk6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoODQ2NSkuYixVPUQoNjYyNSkuUixJPUQoNjYyNSkuQyxFPUQo'@;
put 'OTc0Niksaz1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282'@;
put 'NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLEI9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNv'@;
put 'bmNhdChrKTtmdW5jdGlvbiBOKFosVyx6KXtjb25zdCBxPXt9O3RoaXMuX2Jhc2VTdGF0ZT1xLHEubmFtZT16LHEuZW5jPVoscS5wYXJlbnQ9V3x8bnVsbCxxLmNoaWxkcmVuPW51bGwscS50YWc9bnVsbCxxLmFyZ3M9bnVsbCxxLnJldmVyc2VBcmdzPW51bGwscS5jaG9pY2U9bnVsbCxxLm9w'@;
put 'dGlvbmFsPSExLHEuYW55PSExLHEub2JqPSExLHEudXNlPW51bGwscS51c2VEZWNvZGVyPW51bGwscS5rZXk9bnVsbCxxLmRlZmF1bHQ9bnVsbCxxLmV4cGxpY2l0PW51bGwscS5pbXBsaWNpdD1udWxsLHEuY29udGFpbnM9bnVsbCxxLnBhcmVudHx8KHEuY2hpbGRyZW49W10sdGhpcy5fd3Jh'@;
put 'cCgpKX13LmV4cG9ydHM9Tjtjb25zdCBWPVsiZW5jIiwicGFyZW50IiwiY2hpbGRyZW4iLCJ0YWciLCJhcmdzIiwicmV2ZXJzZUFyZ3MiLCJjaG9pY2UiLCJvcHRpb25hbCIsImFueSIsIm9iaiIsInVzZSIsImFsdGVyZWRVc2UiLCJrZXkiLCJkZWZhdWx0IiwiZXhwbGljaXQiLCJpbXBsaWNp'@;
put 'dCIsImNvbnRhaW5zIl07Ti5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXtjb25zdCBaPXRoaXMuX2Jhc2VTdGF0ZSxXPXt9O1YuZm9yRWFjaChmdW5jdGlvbihxKXtXW3FdPVpbcV19KTtjb25zdCB6PW5ldyB0aGlzLmNvbnN0cnVjdG9yKFcucGFyZW50KTtyZXR1cm4gei5fYmFzZVN0YXRl'@;
put 'PVcsen0sTi5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXtjb25zdCBaPXRoaXMuX2Jhc2VTdGF0ZTtCLmZvckVhY2goZnVuY3Rpb24oVyl7dGhpc1tXXT1mdW5jdGlvbigpe2NvbnN0IHo9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIFouY2hpbGRyZW4ucHVzaCh6KSx6W1dd'@;
put 'LmFwcGx5KHosYXJndW1lbnRzKX19LHRoaXMpfSxOLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihaKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtFKG51bGw9PT1XLnBhcmVudCksWi5jYWxsKHRoaXMpLFcuY2hpbGRyZW49Vy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oeil7cmV0dXJuIHou'@;
put 'X2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxFLmVxdWFsKFcuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxOLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihaKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZSx6PVouZmlsdGVy'@;
put 'KGZ1bmN0aW9uKHEpe3JldHVybiBxIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7Wj1aLmZpbHRlcihmdW5jdGlvbihxKXtyZXR1cm4hKHEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PXoubGVuZ3RoJiYoRShudWxsPT09Vy5jaGlsZHJlbiksVy5j'@;
put 'aGlsZHJlbj16LHouZm9yRWFjaChmdW5jdGlvbihxKXtxLl9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09Wi5sZW5ndGgmJihFKG51bGw9PT1XLmFyZ3MpLFcuYXJncz1aLFcucmV2ZXJzZUFyZ3M9Wi5tYXAoZnVuY3Rpb24ocSl7aWYoIm9iamVjdCIhPXR5cGVvZiBxfHxxLmNv'@;
put 'bnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiBxO2NvbnN0IFE9e307cmV0dXJuIE9iamVjdC5rZXlzKHEpLmZvckVhY2goZnVuY3Rpb24odGUpe3RlPT0oMHx0ZSkmJih0ZXw9MCksUVtxW3RlXV09dGV9KSxRfSkpfSxbIl9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3Ry'@;
put 'IiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5jb2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2Vu'@;
put 'Y29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihaKXtOLnByb3RvdHlwZVtaXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihaKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0aGlzLl9iYXNlU3RhdGUuZW5jKX19KSxrLmZvckVhY2goZnVuY3Rpb24o'@;
put 'Wil7Ti5wcm90b3R5cGVbWl09ZnVuY3Rpb24oKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZSx6PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEUobnVsbD09PVcudGFnKSxXLnRhZz1aLHRoaXMuX3VzZUFyZ3MoeiksdGhpc319KSxOLnByb3RvdHlwZS51c2U9'@;
put 'ZnVuY3Rpb24oWil7RShaKTtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gRShudWxsPT09Vy51c2UpLFcudXNlPVosdGhpc30sTi5wcm90b3R5cGUub3B0aW9uYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYmFzZVN0YXRlLm9wdGlvbmFsPSEwLHRoaXN9LE4ucHJvdG90eXBlLmRl'@;
put 'Zj1mdW5jdGlvbihaKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gRShudWxsPT09Vy5kZWZhdWx0KSxXLmRlZmF1bHQ9WixXLm9wdGlvbmFsPSEwLHRoaXN9LE4ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKFope2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBFKG51'@;
put 'bGw9PT1XLmV4cGxpY2l0JiZudWxsPT09Vy5pbXBsaWNpdCksVy5leHBsaWNpdD1aLHRoaXN9LE4ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKFope2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBFKG51bGw9PT1XLmV4cGxpY2l0JiZudWxsPT09Vy5pbXBsaWNpdCksVy5pbXBs'@;
put 'aWNpdD1aLHRoaXN9LE4ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe2NvbnN0IFo9dGhpcy5fYmFzZVN0YXRlLFc9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gWi5vYmo9ITAsMCE9PVcubGVuZ3RoJiZ0aGlzLl91c2VBcmdzKFcpLHRoaXN9LE4ucHJvdG90'@;
put 'eXBlLmtleT1mdW5jdGlvbihaKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gRShudWxsPT09Vy5rZXkpLFcua2V5PVosdGhpc30sTi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTi5wcm90b3R5cGUuY2hvaWNlPWZ1'@;
put 'bmN0aW9uKFope2NvbnN0IFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBFKG51bGw9PT1XLmNob2ljZSksVy5jaG9pY2U9Wix0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKFopLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gWlt6XX0pKSx0aGlzfSxOLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlv'@;
put 'bihaKXtjb25zdCBXPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gRShudWxsPT09Vy51c2UpLFcuY29udGFpbnM9Wix0aGlzfSxOLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKFosVyl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PXoucGFyZW50KXJldHVybiBaLndyYXBSZXN1'@;
put 'bHQoei5jaGlsZHJlblswXS5fZGVjb2RlKFosVykpO2xldCBxLFE9ei5kZWZhdWx0LHRlPSEwLGFlPW51bGw7aWYobnVsbCE9PXoua2V5JiYoYWU9Wi5lbnRlcktleSh6LmtleSkpLHoub3B0aW9uYWwpe2xldCBzZT1udWxsO2lmKG51bGwhPT16LmV4cGxpY2l0P3NlPXouZXhwbGljaXQ6bnVs'@;
put 'bCE9PXouaW1wbGljaXQ/c2U9ei5pbXBsaWNpdDpudWxsIT09ei50YWcmJihzZT16LnRhZyksbnVsbCE9PXNlfHx6LmFueSl7aWYodGU9dGhpcy5fcGVla1RhZyhaLHNlLHouYW55KSxaLmlzRXJyb3IodGUpKXJldHVybiB0ZX1lbHNle2NvbnN0IGRlPVouc2F2ZSgpO3RyeXtudWxsPT09ei5j'@;
put 'aG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyh6LnRhZyxaLFcpOnRoaXMuX2RlY29kZUNob2ljZShaLFcpLHRlPSEwfWNhdGNoe3RlPSExfVoucmVzdG9yZShkZSl9fWlmKHoub2JqJiZ0ZSYmKHE9Wi5lbnRlck9iamVjdCgpKSx0ZSl7aWYobnVsbCE9PXouZXhwbGljaXQpe2NvbnN0IGRlPXRo'@;
put 'aXMuX2RlY29kZVRhZyhaLHouZXhwbGljaXQpO2lmKFouaXNFcnJvcihkZSkpcmV0dXJuIGRlO1o9ZGV9Y29uc3Qgc2U9Wi5vZmZzZXQ7aWYobnVsbD09PXoudXNlJiZudWxsPT09ei5jaG9pY2Upe2xldCBkZTt6LmFueSYmKGRlPVouc2F2ZSgpKTtjb25zdCBsZT10aGlzLl9kZWNvZGVUYWco'@;
put 'WixudWxsIT09ei5pbXBsaWNpdD96LmltcGxpY2l0OnoudGFnLHouYW55KTtpZihaLmlzRXJyb3IobGUpKXJldHVybiBsZTt6LmFueT9RPVoucmF3KGRlKTpaPWxlfWlmKFcmJlcudHJhY2smJm51bGwhPT16LnRhZyYmVy50cmFjayhaLnBhdGgoKSxzZSxaLmxlbmd0aCwidGFnZ2VkIiksVyYm'@;
put 'Vy50cmFjayYmbnVsbCE9PXoudGFnJiZXLnRyYWNrKFoucGF0aCgpLFoub2Zmc2V0LFoubGVuZ3RoLCJjb250ZW50Iiksei5hbnl8fChRPW51bGw9PT16LmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHoudGFnLFosVyk6dGhpcy5fZGVjb2RlQ2hvaWNlKFosVykpLFouaXNFcnJvcihRKSly'@;
put 'ZXR1cm4gUTtpZih6LmFueXx8bnVsbCE9PXouY2hvaWNlfHxudWxsPT09ei5jaGlsZHJlbnx8ei5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGRlKXtkZS5fZGVjb2RlKFosVyl9KSx6LmNvbnRhaW5zJiYoIm9jdHN0ciI9PT16LnRhZ3x8ImJpdHN0ciI9PT16LnRhZykpe2NvbnN0IGRlPW5l'@;
put 'dyBJKFEpO1E9dGhpcy5fZ2V0VXNlKHouY29udGFpbnMsWi5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoZGUsVyl9fXJldHVybiB6Lm9iaiYmdGUmJihRPVoubGVhdmVPYmplY3QocSkpLG51bGw9PT16LmtleXx8bnVsbD09PVEmJiEwIT09dGU/bnVsbCE9PWFlJiZaLmV4aXRLZXkoYWUp'@;
put 'OloubGVhdmVLZXkoYWUsei5rZXksUSksUX0sTi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oWixXLHope2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09Wnx8InNldCI9PT1aP251bGw6InNlcW9mIj09PVp8fCJzZXRvZiI9PT1aP3RoaXMuX2RlY29kZUxp'@;
put 'c3QoVyxaLHEuYXJnc1swXSx6KTovc3RyJC8udGVzdChaKT90aGlzLl9kZWNvZGVTdHIoVyxaLHopOiJvYmppZCI9PT1aJiZxLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoVyxxLmFyZ3NbMF0scS5hcmdzWzFdLHopOiJvYmppZCI9PT1aP3RoaXMuX2RlY29kZU9iamlkKFcsbnVsbCxudWxsLHop'@;
put 'OiJnZW50aW1lIj09PVp8fCJ1dGN0aW1lIj09PVo/dGhpcy5fZGVjb2RlVGltZShXLFoseik6Im51bGxfIj09PVo/dGhpcy5fZGVjb2RlTnVsbChXLHopOiJib29sIj09PVo/dGhpcy5fZGVjb2RlQm9vbChXLHopOiJvYmpEZXNjIj09PVo/dGhpcy5fZGVjb2RlU3RyKFcsWix6KToiaW50Ij09'@;
put 'PVp8fCJlbnVtIj09PVo/dGhpcy5fZGVjb2RlSW50KFcscS5hcmdzJiZxLmFyZ3NbMF0seik6bnVsbCE9PXEudXNlP3RoaXMuX2dldFVzZShxLnVzZSxXLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShXLHopOlcuZXJyb3IoInVua25vd24gdGFnOiAiK1opfSxOLnByb3RvdHlwZS5fZ2V0'@;
put 'VXNlPWZ1bmN0aW9uKFosVyl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHoudXNlRGVjb2Rlcj10aGlzLl91c2UoWixXKSxFKG51bGw9PT16LnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHoudXNlRGVjb2Rlcj16LnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblsw'@;
put 'XSx6LmltcGxpY2l0IT09ei51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJih6LnVzZURlY29kZXI9ei51c2VEZWNvZGVyLmNsb25lKCksei51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ei5pbXBsaWNpdCksei51c2VEZWNvZGVyfSxOLnByb3RvdHlwZS5fZGVjb2RlQ2hv'@;
put 'aWNlPWZ1bmN0aW9uKFosVyl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7bGV0IHE9bnVsbCxRPSExO3JldHVybiBPYmplY3Qua2V5cyh6LmNob2ljZSkuc29tZShmdW5jdGlvbih0ZSl7Y29uc3QgYWU9Wi5zYXZlKCksc2U9ei5jaG9pY2VbdGVdO3RyeXtjb25zdCBkZT1zZS5fZGVjb2RlKFos'@;
put 'Vyk7aWYoWi5pc0Vycm9yKGRlKSlyZXR1cm4hMTtxPXt0eXBlOnRlLHZhbHVlOmRlfSxRPSEwfWNhdGNoe3JldHVybiBaLnJlc3RvcmUoYWUpLCExfXJldHVybiEwfSx0aGlzKSxRP3E6Wi5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LE4ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVm'@;
put 'ZmVyPWZ1bmN0aW9uKFope3JldHVybiBuZXcgVShaLHRoaXMucmVwb3J0ZXIpfSxOLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFosVyx6KXtjb25zdCBxPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsIT09cS5kZWZhdWx0JiZxLmRlZmF1bHQ9PT1aKXJldHVybjtjb25zdCBRPXRoaXMuX2Vu'@;
put 'Y29kZVZhbHVlKFosVyx6KTtyZXR1cm4gdm9pZCAwPT09UXx8dGhpcy5fc2tpcERlZmF1bHQoUSxXLHopP3ZvaWQgMDpRfSxOLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oWixXLHope2NvbnN0IHE9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1xLnBhcmVudClyZXR1cm4gcS5j'@;
put 'aGlsZHJlblswXS5fZW5jb2RlKFosV3x8bmV3IFApO2xldCBRPW51bGw7aWYodGhpcy5yZXBvcnRlcj1XLHEub3B0aW9uYWwmJnZvaWQgMD09PVope2lmKG51bGw9PT1xLmRlZmF1bHQpcmV0dXJuO1o9cS5kZWZhdWx0fWxldCB0ZT1udWxsLGFlPSExO2lmKHEuYW55KVE9dGhpcy5fY3JlYXRl'@;
put 'RW5jb2RlckJ1ZmZlcihaKTtlbHNlIGlmKHEuY2hvaWNlKVE9dGhpcy5fZW5jb2RlQ2hvaWNlKFosVyk7ZWxzZSBpZihxLmNvbnRhaW5zKXRlPXRoaXMuX2dldFVzZShxLmNvbnRhaW5zLHopLl9lbmNvZGUoWixXKSxhZT0hMDtlbHNlIGlmKHEuY2hpbGRyZW4pdGU9cS5jaGlsZHJlbi5tYXAo'@;
put 'ZnVuY3Rpb24oc2Upe2lmKCJudWxsXyI9PT1zZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gc2UuX2VuY29kZShudWxsLFcsWik7aWYobnVsbD09PXNlLl9iYXNlU3RhdGUua2V5KXJldHVybiBXLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO2NvbnN0IGRlPVcuZW50ZXJLZXkoc2Uu'@;
put 'X2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgWilyZXR1cm4gVy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7Y29uc3QgbGU9c2UuX2VuY29kZShaW3NlLl9iYXNlU3RhdGUua2V5XSxXLFopO3JldHVybiBXLmxlYXZlS2V5KGRlKSxs'@;
put 'ZX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2V9KSx0ZT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHRlKTtlbHNlIGlmKCJzZXFvZiI9PT1xLnRhZ3x8InNldG9mIj09PXEudGFnKXtpZighcS5hcmdzfHwxIT09cS5hcmdzLmxlbmd0aClyZXR1cm4gVy5lcnJvcigiVG9v'@;
put 'IG1hbnkgYXJncyBmb3IgOiAiK3EudGFnKTtpZighQXJyYXkuaXNBcnJheShaKSlyZXR1cm4gVy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO2NvbnN0IHNlPXRoaXMuY2xvbmUoKTtzZS5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsdGU9dGhpcy5fY3JlYXRl'@;
put 'RW5jb2RlckJ1ZmZlcihaLm1hcChmdW5jdGlvbihkZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlzLl9iYXNlU3RhdGUuYXJnc1swXSxaKS5fZW5jb2RlKGRlLFcpfSxzZSkpfWVsc2UgbnVsbCE9PXEudXNlP1E9dGhpcy5fZ2V0VXNlKHEudXNlLHopLl9lbmNvZGUoWixXKToodGU9dGhpcy5f'@;
put 'ZW5jb2RlUHJpbWl0aXZlKHEudGFnLFopLGFlPSEwKTtpZighcS5hbnkmJm51bGw9PT1xLmNob2ljZSl7Y29uc3Qgc2U9bnVsbCE9PXEuaW1wbGljaXQ/cS5pbXBsaWNpdDpxLnRhZyxkZT1udWxsPT09cS5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXNlP251bGw9PT1x'@;
put 'LnVzZSYmVy5lcnJvcigiVGFnIGNvdWxkIGJlIG9taXR0ZWQgb25seSBmb3IgLnVzZSgpIik6bnVsbD09PXEudXNlJiYoUT10aGlzLl9lbmNvZGVDb21wb3NpdGUoc2UsYWUsZGUsdGUpKX1yZXR1cm4gbnVsbCE9PXEuZXhwbGljaXQmJihRPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShxLmV4cGxp'@;
put 'Y2l0LCExLCJjb250ZXh0IixRKSksUX0sTi5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihaLFcpe2NvbnN0IHo9dGhpcy5fYmFzZVN0YXRlLHE9ei5jaG9pY2VbWi50eXBlXTtyZXR1cm4gcXx8RSghMSxaLnR5cGUrIiBub3QgZm91bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmpl'@;
put 'Y3Qua2V5cyh6LmNob2ljZSkpKSxxLl9lbmNvZGUoWi52YWx1ZSxXKX0sTi5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihaLFcpe2NvbnN0IHo9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KFopKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoVyxaKTtpZigib2JqaWQi'@;
put 'PT09WiYmei5hcmdzKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChXLHoucmV2ZXJzZUFyZ3NbMF0sei5hcmdzWzFdKTtpZigib2JqaWQiPT09WilyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoVyxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PVp8fCJ1dGN0aW1lIj09PVopcmV0dXJuIHRoaXMu'@;
put 'X2VuY29kZVRpbWUoVyxaKTtpZigibnVsbF8iPT09WilyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09Wnx8ImVudW0iPT09WilyZXR1cm4gdGhpcy5fZW5jb2RlSW50KFcsei5hcmdzJiZ6LnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1aKXJldHVybiB0aGlzLl9lbmNv'@;
put 'ZGVCb29sKFcpO2lmKCJvYmpEZXNjIj09PVopcmV0dXJuIHRoaXMuX2VuY29kZVN0cihXLFopO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK1opfSxOLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oWil7cmV0dXJuL15bMC05IF0qJC8udGVzdChaKX0sTi5wcm90b3R5'@;
put 'cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24oWil7cmV0dXJuL15bQS1aYS16MC05ICcoKSssLS4vOj0/XSokLy50ZXN0KFopfX0sODQ2NToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg1NzE3KTtmdW5jdGlvbiBVKEUpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6'@;
put 'W10sb3B0aW9uczpFfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIEkoRSxrKXt0aGlzLnBhdGg9RSx0aGlzLnJldGhyb3coayl9QS5iPVUsVS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbihFKXtyZXR1cm4gRSBpbnN0YW5jZW9mIEl9LFUucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtjb25z'@;
put 'dCBFPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJue29iajpFLm9iaixwYXRoTGVuOkUucGF0aC5sZW5ndGh9fSxVLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEUpe2NvbnN0IGs9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtrLm9iaj1FLm9iaixrLnBhdGg9ay5wYXRoLnNsaWNlKDAsRS5wYXRo'@;
put 'TGVuKX0sVS5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24oRSl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKEUpfSxVLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKEUpe2NvbnN0IGs9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtrLnBhdGg9ay5wYXRoLnNsaWNlKDAsRS0x'@;
put 'KX0sVS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24oRSxrLEIpe2NvbnN0IE49dGhpcy5fcmVwb3J0ZXJTdGF0ZTt0aGlzLmV4aXRLZXkoRSksbnVsbCE9PU4ub2JqJiYoTi5vYmpba109Qil9LFUucHJvdG90eXBlLnBhdGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0'@;
put 'ZS5wYXRoLmpvaW4oIi8iKX0sVS5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXtjb25zdCBFPXRoaXMuX3JlcG9ydGVyU3RhdGUsaz1FLm9iajtyZXR1cm4gRS5vYmo9e30sa30sVS5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24oRSl7Y29uc3Qgaz10aGlzLl9yZXBvcnRl'@;
put 'clN0YXRlLEI9ay5vYmo7cmV0dXJuIGsub2JqPUUsQn0sVS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24oRSl7bGV0IGs7Y29uc3QgQj10aGlzLl9yZXBvcnRlclN0YXRlLE49RSBpbnN0YW5jZW9mIEk7aWYoaz1OP0U6bmV3IEkoQi5wYXRoLm1hcChmdW5jdGlvbihWKXtyZXR1cm4iWyIrSlNP'@;
put 'Ti5zdHJpbmdpZnkoVikrIl0ifSkuam9pbigiIiksRS5tZXNzYWdlfHxFLEUuc3RhY2spLCFCLm9wdGlvbnMucGFydGlhbCl0aHJvdyBrO3JldHVybiBOfHxCLmVycm9ycy5wdXNoKGspLGt9LFUucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24oRSl7Y29uc3Qgaz10aGlzLl9yZXBvcnRl'@;
put 'clN0YXRlO3JldHVybiBrLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcihFKT9udWxsOkUsZXJyb3JzOmsuZXJyb3JzfTpFfSxQKEksRXJyb3IpLEkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24oRSl7aWYodGhpcy5tZXNzYWdlPUUrIiBhdDogIisodGhpcy5wYXRofHwi'@;
put 'KHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsSSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKGspe3RoaXMuc3RhY2s9ay5zdGFja31yZXR1cm4gdGhpc319LDE2MDoodyxB'@;
put 'KT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBEKFApe2NvbnN0IFU9e307cmV0dXJuIE9iamVjdC5rZXlzKFApLmZvckVhY2goZnVuY3Rpb24oSSl7KDB8SSk9PUkmJihJfD0wKSxVW1BbSV1dPUl9KSxVfUEudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRl'@;
put 'eHQiLDM6InByaXZhdGUifSxBLnRhZ0NsYXNzQnlOYW1lPUQoQS50YWdDbGFzcyksQS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0i'@;
put 'LDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwy'@;
put 'NjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LEEudGFnQnlOYW1lPUQoQS50YWcpfSw2ODI2Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1BO1AuX3JldmVyc2U9ZnVuY3Rpb24oVSl7Y29uc3QgST17fTtyZXR1cm4g'@;
put 'T2JqZWN0LmtleXMoVSkuZm9yRWFjaChmdW5jdGlvbihFKXsoMHxFKT09RSYmKEV8PTApLElbVVtFXV09RX0pLEl9LFAuZGVyPUQoMTYwKX0sMTY3MToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg1NzE3KSxVPUQoNDU5MCksST1EKDY2MjUpLkMsRT1EKDE5NDkpLGs9RCgxNjAp'@;
put 'O2Z1bmN0aW9uIEIoVyl7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPVcubmFtZSx0aGlzLmVudGl0eT1XLHRoaXMudHJlZT1uZXcgTix0aGlzLnRyZWUuX2luaXQoVy5ib2R5KX1mdW5jdGlvbiBOKFcpe0UuY2FsbCh0aGlzLCJkZXIiLFcpfWZ1bmN0aW9uIFYoVyx6KXtsZXQgcT1XLnJlYWRV'@;
put 'SW50OCh6KTtpZihXLmlzRXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgUT1rLnRhZ0NsYXNzW3E+PjZdLHRlPSEoMzImcSk7aWYoMzEmfnEpcSY9MzE7ZWxzZXtsZXQgYWU9cTtmb3IocT0wOyEoMTI4Jn5hZSk7KXtpZihhZT1XLnJlYWRVSW50OCh6KSxXLmlzRXJyb3IoYWUpKXJldHVybiBhZTtx'@;
put 'PDw9NyxxfD0xMjcmYWV9fXJldHVybntjbHM6USxwcmltaXRpdmU6dGUsdGFnOnEsdGFnU3RyOmsudGFnW3FdfX1mdW5jdGlvbiBaKFcseixxKXtsZXQgUT1XLnJlYWRVSW50OChxKTtpZihXLmlzRXJyb3IoUSkpcmV0dXJuIFE7aWYoIXomJjEyOD09PVEpcmV0dXJuIG51bGw7aWYoISgxMjgm'@;
put 'USkpcmV0dXJuIFE7Y29uc3QgdGU9MTI3JlE7aWYodGU+NClyZXR1cm4gVy5lcnJvcigibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZyIpO1E9MDtmb3IobGV0IGFlPTA7YWU8dGU7YWUrKyl7UTw8PTg7Y29uc3Qgc2U9Vy5yZWFkVUludDgocSk7aWYoVy5pc0Vycm9yKHNlKSlyZXR1cm4gc2U7'@;
put 'UXw9c2V9cmV0dXJuIFF9dy5leHBvcnRzPUIsQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFcseil7cmV0dXJuIEkuaXNEZWNvZGVyQnVmZmVyKFcpfHwoVz1uZXcgSShXLHopKSx0aGlzLnRyZWUuX2RlY29kZShXLHopfSxQKE4sRSksTi5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24o'@;
put 'Vyx6LHEpe2lmKFcuaXNFbXB0eSgpKXJldHVybiExO2NvbnN0IFE9Vy5zYXZlKCksdGU9VihXLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK3orJyInKTtyZXR1cm4gVy5pc0Vycm9yKHRlKT90ZTooVy5yZXN0b3JlKFEpLHRlLnRhZz09PXp8fHRlLnRhZ1N0cj09PXp8fHRlLnRhZ1N0cisib2Yi'@;
put 'PT09enx8cSl9LE4ucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24oVyx6LHEpe2NvbnN0IFE9VihXLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJyt6KyciJyk7aWYoVy5pc0Vycm9yKFEpKXJldHVybiBRO2xldCB0ZT1aKFcsUS5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3Ro'@;
put 'IG9mICInK3orJyInKTtpZihXLmlzRXJyb3IodGUpKXJldHVybiB0ZTtpZighcSYmUS50YWchPT16JiZRLnRhZ1N0ciE9PXomJlEudGFnU3RyKyJvZiIhPT16KXJldHVybiBXLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJyt6KyciJyk7aWYoUS5wcmltaXRpdmV8fG51bGwhPT10ZSly'@;
put 'ZXR1cm4gVy5za2lwKHRlLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicreisnIicpO2NvbnN0IGFlPVcuc2F2ZSgpLHNlPXRoaXMuX3NraXBVbnRpbEVuZChXLCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiAiJyt0aGlzLnRhZysnIicpO3JldHVybiBXLmlzRXJy'@;
put 'b3Ioc2UpP3NlOih0ZT1XLm9mZnNldC1hZS5vZmZzZXQsVy5yZXN0b3JlKGFlKSxXLnNraXAodGUsJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJyt6KyciJykpfSxOLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKFcseil7Zm9yKDs7KXtjb25zdCBxPVYoVyx6KTtpZihXLmlz'@;
put 'RXJyb3IocSkpcmV0dXJuIHE7Y29uc3QgUT1aKFcscS5wcmltaXRpdmUseik7aWYoVy5pc0Vycm9yKFEpKXJldHVybiBRO2xldCB0ZTtpZih0ZT1xLnByaW1pdGl2ZXx8bnVsbCE9PVE/Vy5za2lwKFEpOnRoaXMuX3NraXBVbnRpbEVuZChXLHopLFcuaXNFcnJvcih0ZSkpcmV0dXJuIHRlO2lm'@;
put 'KCJlbmQiPT09cS50YWdTdHIpYnJlYWt9fSxOLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihXLHoscSxRKXtjb25zdCB0ZT1bXTtmb3IoOyFXLmlzRW1wdHkoKTspe2NvbnN0IGFlPXRoaXMuX3BlZWtUYWcoVywiZW5kIik7aWYoVy5pc0Vycm9yKGFlKSlyZXR1cm4gYWU7Y29uc3Qg'@;
put 'c2U9cS5kZWNvZGUoVywiZGVyIixRKTtpZihXLmlzRXJyb3Ioc2UpJiZhZSlicmVhazt0ZS5wdXNoKHNlKX1yZXR1cm4gdGV9LE4ucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oVyx6KXtpZigiYml0c3RyIj09PXope2NvbnN0IHE9Vy5yZWFkVUludDgoKTtyZXR1cm4gVy5pc0Vycm9y'@;
put 'KHEpP3E6e3VudXNlZDpxLGRhdGE6Vy5yYXcoKX19aWYoImJtcHN0ciI9PT16KXtjb25zdCBxPVcucmF3KCk7aWYocS5sZW5ndGglMj09MSlyZXR1cm4gVy5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtsZXQgUT0iIjtmb3IobGV0IHRl'@;
put 'PTA7dGU8cS5sZW5ndGgvMjt0ZSsrKVErPVN0cmluZy5mcm9tQ2hhckNvZGUocS5yZWFkVUludDE2QkUoMip0ZSkpO3JldHVybiBRfWlmKCJudW1zdHIiPT09eil7Y29uc3QgcT1XLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihxKT9xOlcuZXJyb3IoIkRl'@;
put 'Y29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfWlmKCJvY3RzdHIiPT09enx8Im9iakRlc2MiPT09eilyZXR1cm4gVy5yYXcoKTtpZigicHJpbnRzdHIiPT09eil7Y29uc3QgcT1XLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlz'@;
put 'Ll9pc1ByaW50c3RyKHEpP3E6Vy5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1yZXR1cm4vc3RyJC8udGVzdCh6KT9XLnJhdygpLnRvU3RyaW5nKCk6Vy5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIreisi'@;
put 'IHVuc3VwcG9ydGVkIil9LE4ucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbihXLHoscSl7bGV0IFE7Y29uc3QgdGU9W107bGV0IGFlPTAsc2U9MDtmb3IoOyFXLmlzRW1wdHkoKTspc2U9Vy5yZWFkVUludDgoKSxhZTw8PTcsYWV8PTEyNyZzZSwhKDEyOCZzZSkmJih0ZS5wdXNoKGFl'@;
put 'KSxhZT0wKTtpZigxMjgmc2UmJnRlLnB1c2goYWUpLFE9cT90ZTpbdGVbMF0vNDB8MCx0ZVswXSU0MF0uY29uY2F0KHRlLnNsaWNlKDEpKSx6KXtsZXQgY2U9eltRLmpvaW4oIiAiKV07dm9pZCAwPT09Y2UmJihjZT16W1Euam9pbigiLiIpXSksdm9pZCAwIT09Y2UmJihRPWNlKX1yZXR1cm4g'@;
put 'UX0sTi5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24oVyx6KXtjb25zdCBxPVcucmF3KCkudG9TdHJpbmcoKTtsZXQgUSx0ZSxhZSxzZSxkZSxsZTtpZigiZ2VudGltZSI9PT16KVE9MHxxLnNsaWNlKDAsNCksdGU9MHxxLnNsaWNlKDQsNiksYWU9MHxxLnNsaWNlKDYsOCksc2U9MHxx'@;
put 'LnNsaWNlKDgsMTApLGRlPTB8cS5zbGljZSgxMCwxMiksbGU9MHxxLnNsaWNlKDEyLDE0KTtlbHNle2lmKCJ1dGN0aW1lIiE9PXopcmV0dXJuIFcuZXJyb3IoIkRlY29kaW5nICIreisiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXQiKTtRPTB8cS5zbGljZSgwLDIpLHRlPTB8cS5zbGljZSgy'@;
put 'LDQpLGFlPTB8cS5zbGljZSg0LDYpLHNlPTB8cS5zbGljZSg2LDgpLGRlPTB8cS5zbGljZSg4LDEwKSxsZT0wfHEuc2xpY2UoMTAsMTIpLFE9UTw3MD8yZTMrUToxOTAwK1F9cmV0dXJuIERhdGUuVVRDKFEsdGUtMSxhZSxzZSxkZSxsZSwwKX0sTi5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gbnVsbH0sTi5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24oVyl7Y29uc3Qgej1XLnJlYWRVSW50OCgpO3JldHVybiBXLmlzRXJyb3Ioeik/ejowIT09en0sTi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihXLHope2NvbnN0IHE9Vy5yYXcoKTtsZXQg'@;
put 'UT1uZXcgVShxKTtyZXR1cm4geiYmKFE9eltRLnRvU3RyaW5nKDEwKV18fFEpLFF9LE4ucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oVyx6KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVyYmKFc9Vyh6KSksVy5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KHcsQSxEKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijtjb25zdCBQPUE7UC5kZXI9RCgxNjcxKSxQLnBlbT1EKDk2MzEpfSw5NjMxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDU3MTcpLFU9RCgyMzk5KS5CdWZmZXIsST1EKDE2NzEpO2Z1bmN0aW9uIEUoayl7SS5jYWxsKHRoaXMsayksdGhpcy5lbmM9InBlbSJ9UChF'@;
put 'LEkpLHcuZXhwb3J0cz1FLEUucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihrLEIpe2NvbnN0IE49ay50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLFY9Qi5sYWJlbC50b1VwcGVyQ2FzZSgpLFo9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvO2xldCBXPS0xLHo9LTE7Zm9y'@;
put 'KGxldCB0ZT0wO3RlPE4ubGVuZ3RoO3RlKyspe2NvbnN0IGFlPU5bdGVdLm1hdGNoKFopO2lmKG51bGwhPT1hZSYmYWVbMl09PT1WKXtpZigtMSE9PVcpe2lmKCJFTkQiIT09YWVbMV0pYnJlYWs7ej10ZTticmVha31pZigiQkVHSU4iIT09YWVbMV0pYnJlYWs7Vz10ZX19aWYoLTE9PT1XfHwt'@;
put 'MT09PXopdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK1YpO2NvbnN0IHE9Ti5zbGljZShXKzEseikuam9pbigiIik7cS5yZXBsYWNlKC9bXmEtejAtOSsvPV0rL2dpLCIiKTtjb25zdCBRPVUuZnJvbShxLCJiYXNlNjQiKTtyZXR1cm4gSS5wcm90b3R5cGUu'@;
put 'ZGVjb2RlLmNhbGwodGhpcyxRLEIpfX0sNjk4NDoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg1NzE3KSxVPUQoMjM5OSkuQnVmZmVyLEk9RCgxOTQ5KSxFPUQoMTYwKTtmdW5jdGlvbiBrKFYpe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1WLm5hbWUsdGhpcy5lbnRpdHk9Vix0'@;
put 'aGlzLnRyZWU9bmV3IEIsdGhpcy50cmVlLl9pbml0KFYuYm9keSl9ZnVuY3Rpb24gQihWKXtJLmNhbGwodGhpcywiZGVyIixWKX1mdW5jdGlvbiBOKFYpe3JldHVybiBWPDEwPyIwIitWOlZ9dy5leHBvcnRzPWssay5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFYsWil7cmV0dXJuIHRoaXMu'@;
put 'dHJlZS5fZW5jb2RlKFYsWikuam9pbigpfSxQKEIsSSksQi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihWLFosVyx6KXtjb25zdCBxPWZ1bmN0aW9uKGFlLHNlLGRlLGxlKXtsZXQgY2U7aWYoInNlcW9mIj09PWFlP2FlPSJzZXEiOiJzZXRvZiI9PT1hZSYmKGFlPSJzZXQi'@;
put 'KSxFLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShhZSkpY2U9RS50YWdCeU5hbWVbYWVdO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBhZXx8KDB8YWUpIT09YWUpcmV0dXJuIGxlLmVycm9yKCJVbmtub3duIHRhZzogIithZSk7Y2U9YWV9cmV0dXJuIGNlPj0zMT9sZS5lcnJvcigiTXVsdGkt'@;
put 'b2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KHNlfHwoY2V8PTMyKSxjZXw9RS50YWdDbGFzc0J5TmFtZVtkZXx8InVuaXZlcnNhbCJdPDw2LGNlKX0oVixaLFcsdGhpcy5yZXBvcnRlcik7aWYoei5sZW5ndGg8MTI4KXtjb25zdCBhZT1VLmFsbG9jKDIpO3JldHVybiBhZVswXT1x'@;
put 'LGFlWzFdPXoubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW2FlLHpdKX1sZXQgUT0xO2ZvcihsZXQgYWU9ei5sZW5ndGg7YWU+PTI1NjthZT4+PTgpUSsrO2NvbnN0IHRlPVUuYWxsb2MoMitRKTt0ZVswXT1xLHRlWzFdPTEyOHxRO2ZvcihsZXQgYWU9MStRLHNlPXoubGVuZ3Ro'@;
put 'O3NlPjA7YWUtLSxzZT4+PTgpdGVbYWVdPTI1NSZzZTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbdGUsel0pfSxCLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKFYsWil7aWYoImJpdHN0ciI9PT1aKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfFYu'@;
put 'dW51c2VkLFYuZGF0YV0pO2lmKCJibXBzdHIiPT09Wil7Y29uc3QgVz1VLmFsbG9jKDIqVi5sZW5ndGgpO2ZvcihsZXQgej0wO3o8Vi5sZW5ndGg7eisrKVcud3JpdGVVSW50MTZCRShWLmNoYXJDb2RlQXQoeiksMip6KTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihXKX1yZXR1'@;
put 'cm4ibnVtc3RyIj09PVo/dGhpcy5faXNOdW1zdHIoVik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZSIpOiJwcmludHN0ciI9PT1aP3Ro'@;
put 'aXMuX2lzUHJpbnRzdHIoVik/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNl'@;
put 'LCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFyayIpOi9zdHIkLy50ZXN0KFopfHwib2JqRGVzYyI9PT1aP3RoaXMuX2NyZWF0ZUVuY29kZXJC'@;
put 'dWZmZXIoVik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6ICIrWisiIHVuc3VwcG9ydGVkIil9LEIucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbihWLFosVyl7aWYoInN0cmluZyI9PXR5cGVvZiBWKXtpZighWilyZXR1cm4gdGhpcy5yZXBvcnRl'@;
put 'ci5lcnJvcigic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZCIpO2lmKCFaLmhhc093blByb3BlcnR5KFYpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcCIpO1Y9WltWXS5zcGxpdCgvW1xzLl0rL2cpO2Zv'@;
put 'cihsZXQgdGU9MDt0ZTxWLmxlbmd0aDt0ZSsrKVZbdGVdfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheShWKSl7Vj1WLnNsaWNlKCk7Zm9yKGxldCB0ZT0wO3RlPFYubGVuZ3RoO3RlKyspVlt0ZV18PTB9aWYoIUFycmF5LmlzQXJyYXkoVikpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9i'@;
put 'amlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogIitKU09OLnN0cmluZ2lmeShWKSk7aWYoIVcpe2lmKFZbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0IiKTtWLnNwbGljZSgwLDIsNDAqVlswXStW'@;
put 'WzFdKX1sZXQgej0wO2ZvcihsZXQgdGU9MDt0ZTxWLmxlbmd0aDt0ZSsrKXtsZXQgYWU9Vlt0ZV07Zm9yKHorKzthZT49MTI4O2FlPj49Nyl6Kyt9Y29uc3QgcT1VLmFsbG9jKHopO2xldCBRPXEubGVuZ3RoLTE7Zm9yKGxldCB0ZT1WLmxlbmd0aC0xO3RlPj0wO3RlLS0pe2xldCBhZT1WW3Rl'@;
put 'XTtmb3IocVtRLS1dPTEyNyZhZTsoYWU+Pj03KT4wOylxW1EtLV09MTI4fDEyNyZhZX1yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihxKX0sQi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oVixaKXtsZXQgVztjb25zdCB6PW5ldyBEYXRlKFYpO3JldHVybiJnZW50aW1l'@;
put 'Ij09PVo/Vz1bTih6LmdldFVUQ0Z1bGxZZWFyKCkpLE4oei5nZXRVVENNb250aCgpKzEpLE4oei5nZXRVVENEYXRlKCkpLE4oei5nZXRVVENIb3VycygpKSxOKHouZ2V0VVRDTWludXRlcygpKSxOKHouZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PVo/Vz1bTih6'@;
put 'LmdldFVUQ0Z1bGxZZWFyKCklMTAwKSxOKHouZ2V0VVRDTW9udGgoKSsxKSxOKHouZ2V0VVRDRGF0ZSgpKSxOKHouZ2V0VVRDSG91cnMoKSksTih6LmdldFVUQ01pbnV0ZXMoKSksTih6LmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGlu'@;
put 'ZyAiK1orIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFcsIm9jdHN0ciIpfSxCLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sQi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5j'@;
put 'dGlvbihWLFope2lmKCJzdHJpbmciPT10eXBlb2YgVil7aWYoIVopcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAiKTtpZighWi5oYXNPd25Qcm9wZXJ0eShWKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigi'@;
put 'VmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoVikpO1Y9WltWXX1pZigibnVtYmVyIiE9dHlwZW9mIFYmJiFVLmlzQnVmZmVyKFYpKXtjb25zdCBxPVYudG9BcnJheSgpOyFWLnNpZ24mJjEyOCZxWzBdJiZxLnVuc2hpZnQoMCksVj1VLmZyb20ocSl9aWYoVS5p'@;
put 'c0J1ZmZlcihWKSl7bGV0IHE9Vi5sZW5ndGg7MD09PVYubGVuZ3RoJiZxKys7Y29uc3QgUT1VLmFsbG9jKHEpO3JldHVybiBWLmNvcHkoUSksMD09PVYubGVuZ3RoJiYoUVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFEpfWlmKFY8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNv'@;
put 'ZGVyQnVmZmVyKFYpO2lmKFY8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLFZdKTtsZXQgVz0xO2ZvcihsZXQgcT1WO3E+PTI1NjtxPj49OClXKys7Y29uc3Qgej1uZXcgQXJyYXkoVyk7Zm9yKGxldCBxPXoubGVuZ3RoLTE7cT49MDtxLS0peltxXT0yNTUmVixWPj49'@;
put 'ODtyZXR1cm4gMTI4JnpbMF0mJnoudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFUuZnJvbSh6KSl9LEIucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFY/MjU1OjApfSxCLnByb3RvdHlwZS5fdXNl'@;
put 'PWZ1bmN0aW9uKFYsWil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFYmJihWPVYoWikpLFYuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEIucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihWLFosVyl7Y29uc3Qgej10aGlzLl9iYXNlU3RhdGU7bGV0IHE7aWYobnVsbD09PXouZGVm'@;
put 'YXVsdClyZXR1cm4hMTtjb25zdCBRPVYuam9pbigpO2lmKHZvaWQgMD09PXouZGVmYXVsdEJ1ZmZlciYmKHouZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZSh6LmRlZmF1bHQsWixXKS5qb2luKCkpLFEubGVuZ3RoIT09ei5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Io'@;
put 'cT0wO3E8US5sZW5ndGg7cSsrKWlmKFFbcV0hPT16LmRlZmF1bHRCdWZmZXJbcV0pcmV0dXJuITE7cmV0dXJuITB9fSw2NTc5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1BO1AuZGVyPUQoNjk4NCksUC5wZW09RCgyODgzKX0sMjg4MzoodyxBLEQpPT57InVzZSBzdHJpY3QiO2Nv'@;
put 'bnN0IFA9RCg1NzE3KSxVPUQoNjk4NCk7ZnVuY3Rpb24gSShFKXtVLmNhbGwodGhpcyxFKSx0aGlzLmVuYz0icGVtIn1QKEksVSksdy5leHBvcnRzPUksSS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKEUsayl7Y29uc3QgQj1VLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLEUpLnRvU3Ry'@;
put 'aW5nKCJiYXNlNjQiKSxOPVsiLS0tLS1CRUdJTiAiK2subGFiZWwrIi0tLS0tIl07Zm9yKGxldCBWPTA7VjxCLmxlbmd0aDtWKz02NClOLnB1c2goQi5zbGljZShWLFYrNjQpKTtyZXR1cm4gTi5wdXNoKCItLS0tLUVORCAiK2subGFiZWwrIi0tLS0tIiksTi5qb2luKCJcbiIpfX0sNDU5MDpm'@;
put 'dW5jdGlvbih3LEEsRCl7IWZ1bmN0aW9uKFAsVSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxTKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoU3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBFKGcsUyl7Zy5zdXBlcl89Uzt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90b3R5cGU9Uy5w'@;
put 'cm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IHgsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBrKGcsUyx4KXtpZihrLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PWcmJigi'@;
put 'bGUiIT09UyYmImJlIiE9PVN8fCh4PVMsUz0xMCksdGhpcy5faW5pdChnfHwwLFN8fDEwLHh8fCJiZSIpKX12YXIgQjsib2JqZWN0Ij09dHlwZW9mIFA/UC5leHBvcnRzPWs6VS5CTj1rLGsuQk49ayxrLndvcmRTaXplPTI2O3RyeXtCPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5k'@;
put 'b3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6RCg5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gTihnLFMpe3ZhciB4PWcuY2hhckNvZGVBdChTKTtyZXR1cm4geD49NjUmJng8PTcwP3gtNTU6eD49OTcmJng8PTEwMj94LTg3OngtNDgmMTV9ZnVuY3Rpb24gVihnLFMseCl7dmFyIF89TihnLHgp'@;
put 'O3JldHVybiB4LTE+PVMmJihffD1OKGcseC0xKTw8NCksX31mdW5jdGlvbiBaKGcsUyx4LF8pe2Zvcih2YXIgcD0wLEM9TWF0aC5taW4oZy5sZW5ndGgseCksSz1TO0s8QztLKyspe3ZhciBuZT1nLmNoYXJDb2RlQXQoSyktNDg7cCo9XyxwKz1uZT49NDk/bmUtNDkrMTA6bmU+PTE3P25lLTE3'@;
put 'KzEwOm5lfXJldHVybiBwfWsuaXNCTj1mdW5jdGlvbihnKXtyZXR1cm4gZyBpbnN0YW5jZW9mIGt8fG51bGwhPT1nJiYib2JqZWN0Ij09dHlwZW9mIGcmJmcuY29uc3RydWN0b3Iud29yZFNpemU9PT1rLndvcmRTaXplJiZBcnJheS5pc0FycmF5KGcud29yZHMpfSxrLm1heD1mdW5jdGlvbihn'@;
put 'LFMpe3JldHVybiBnLmNtcChTKT4wP2c6U30say5taW49ZnVuY3Rpb24oZyxTKXtyZXR1cm4gZy5jbXAoUyk8MD9nOlN9LGsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGcsUyx4KXtpZigibnVtYmVyIj09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoZyxTLHgpO2lmKCJvYmpl'@;
put 'Y3QiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdEFycmF5KGcsUyx4KTsiaGV4Ij09PVMmJihTPTE2KSxJKFM9PT0oMHxTKSYmUz49MiYmUzw9MzYpO3ZhciBfPTA7Ii0iPT09KGc9Zy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihfKyssdGhpcy5uZWdhdGl2ZT0xKSxf'@;
put 'PGcubGVuZ3RoJiYoMTY9PT1TP3RoaXMuX3BhcnNlSGV4KGcsXyx4KToodGhpcy5fcGFyc2VCYXNlKGcsUyxfKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFMseCkpKX0say5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oZyxTLHgpe2c8MCYmKHRoaXMu'@;
put 'bmVnYXRpdmU9MSxnPS1nKSxnPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnXSx0aGlzLmxlbmd0aD0xKTpnPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoZzw5MDA3MTk5MjU0NzQw'@;
put 'OTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxTLHgpfSxrLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGcsUyx4KXtpZihJKCJudW1iZXIi'@;
put 'PT10eXBlb2YgZy5sZW5ndGgpLGcubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGcubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIF89MDtfPHRoaXMubGVuZ3Ro'@;
put 'O18rKyl0aGlzLndvcmRzW19dPTA7dmFyIHAsQyxLPTA7aWYoImJlIj09PXgpZm9yKF89Zy5sZW5ndGgtMSxwPTA7Xz49MDtfLT0zKXRoaXMud29yZHNbcF18PShDPWdbX118Z1tfLTFdPDw4fGdbXy0yXTw8MTYpPDxLJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT1DPj4+MjYtSyY2NzEwODg2'@;
put 'MywoSys9MjQpPj0yNiYmKEstPTI2LHArKyk7ZWxzZSBpZigibGUiPT09eClmb3IoXz0wLHA9MDtfPGcubGVuZ3RoO18rPTMpdGhpcy53b3Jkc1twXXw9KEM9Z1tfXXxnW18rMV08PDh8Z1tfKzJdPDwxNik8PEsmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPUM+Pj4yNi1LJjY3MTA4ODYzLChL'@;
put 'Kz0yNCk+PTI2JiYoSy09MjYscCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oZyxTLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoZy5sZW5ndGgtUykvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0w'@;
put 'O188dGhpcy5sZW5ndGg7XysrKXRoaXMud29yZHNbX109MDt2YXIgcCxDPTAsSz0wO2lmKCJiZSI9PT14KWZvcihfPWcubGVuZ3RoLTE7Xz49UztfLT0yKXA9VihnLFMsXyk8PEMsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmcCxDPj0xOD8oQy09MTgsdGhpcy53b3Jkc1tLKz0xXXw9cD4+PjI2'@;
put 'KTpDKz04O2Vsc2UgZm9yKF89KGcubGVuZ3RoLVMpJTI9PTA/UysxOlM7XzxnLmxlbmd0aDtfKz0yKXA9VihnLFMsXyk8PEMsdGhpcy53b3Jkc1tLXXw9NjcxMDg4NjMmcCxDPj0xOD8oQy09MTgsdGhpcy53b3Jkc1tLKz0xXXw9cD4+PjI2KTpDKz04O3RoaXMuc3RyaXAoKX0say5wcm90b3R5'@;
put 'cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihnLFMseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIF89MCxwPTE7cDw9NjcxMDg4NjM7cCo9UylfKys7Xy0tLHA9cC9TfDA7Zm9yKHZhciBDPWcubGVuZ3RoLXgsSz1DJV8sbmU9TWF0aC5taW4oQyxDLUspK3gsdWU9MCxoZT14'@;
put 'O2hlPG5lO2hlKz1fKXVlPVooZyxoZSxoZStfLFMpLHRoaXMuaW11bG4ocCksdGhpcy53b3Jkc1swXSt1ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11ZTp0aGlzLl9pYWRkbih1ZSk7aWYoMCE9PUspe3ZhciB4ZT0xO2Zvcih1ZT1aKGcsaGUsZy5sZW5ndGgsUyksaGU9MDtoZTxLO2hlKysp'@;
put 'eGUqPVM7dGhpcy5pbXVsbih4ZSksdGhpcy53b3Jkc1swXSt1ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11ZTp0aGlzLl9pYWRkbih1ZSl9dGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGcpe2cud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIFM9'@;
put 'MDtTPHRoaXMubGVuZ3RoO1MrKylnLndvcmRzW1NdPXRoaXMud29yZHNbU107Zy5sZW5ndGg9dGhpcy5sZW5ndGgsZy5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLGcucmVkPXRoaXMucmVkfSxrLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBnPW5ldyBrKG51bGwpO3JldHVybiB0aGlz'@;
put 'LmNvcHkoZyksZ30say5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGc7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30say5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndv'@;
put 'cmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxrLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30say5wcm90'@;
put 'b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgVz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIs'@;
put 'IjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSx6'@;
put 'PVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLHE9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcs'@;
put 'MTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNl'@;
put 'NSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gUShnLFMseCl7eC5uZWdhdGl2ZT1TLm5lZ2F0aXZlXmcubmVnYXRpdmU7dmFyIF89Zy5sZW5ndGgrUy5sZW5ndGh8MDt4Lmxlbmd0aD1fLF89Xy0xfDA7dmFyIHA9MHxnLndv'@;
put 'cmRzWzBdLEM9MHxTLndvcmRzWzBdLEs9cCpDLHVlPUsvNjcxMDg4NjR8MDt4LndvcmRzWzBdPTY3MTA4ODYzJks7Zm9yKHZhciBoZT0xO2hlPF87aGUrKyl7Zm9yKHZhciB4ZT11ZT4+PjI2LE9lPTY3MTA4ODYzJnVlLEhlPU1hdGgubWluKGhlLFMubGVuZ3RoLTEpLEVlPU1hdGgubWF4KDAs'@;
put 'aGUtZy5sZW5ndGgrMSk7RWU8PUhlO0VlKyspeGUrPShLPShwPTB8Zy53b3Jkc1toZS1FZXwwXSkqKEM9MHxTLndvcmRzW0VlXSkrT2UpLzY3MTA4ODY0fDAsT2U9NjcxMDg4NjMmSzt4LndvcmRzW2hlXT0wfE9lLHVlPTB8eGV9cmV0dXJuIDAhPT11ZT94LndvcmRzW2hlXT0wfHVlOngubGVu'@;
put 'Z3RoLS0seC5zdHJpcCgpfWsucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGcsUyl7dmFyIHg7aWYoUz0wfFN8fDEsMTY9PT0oZz1nfHwxMCl8fCJoZXgiPT09Zyl7eD0iIjtmb3IodmFyIF89MCxwPTAsQz0wO0M8dGhpcy5sZW5ndGg7QysrKXt2YXIgSz10aGlzLndvcmRzW0NdLG5lPSgx'@;
put 'Njc3NzIxNSYoSzw8X3xwKSkudG9TdHJpbmcoMTYpO3g9MCE9KHA9Sz4+PjI0LV8mMTY3NzcyMTUpfHxDIT09dGhpcy5sZW5ndGgtMT9XWzYtbmUubGVuZ3RoXStuZSt4Om5lK3gsKF8rPTIpPj0yNiYmKF8tPTI2LEMtLSl9Zm9yKDAhPT1wJiYoeD1wLnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0'@;
put 'aCVTIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYoZz09PSgwfGcpJiZnPj0yJiZnPD0zNil7dmFyIHVlPXpbZ10saGU9cVtnXTt4PSIiO3ZhciB4ZT10aGlzLmNsb25lKCk7Zm9yKHhlLm5lZ2F0aXZlPTA7IXhlLmlzWmVybygpOyl7dmFyIE9l'@;
put 'PXhlLm1vZG4oaGUpLnRvU3RyaW5nKGcpO3g9KHhlPXhlLmlkaXZuKGhlKSkuaXNaZXJvKCk/T2UreDpXW3VlLU9lLmxlbmd0aF0rT2UreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJVMhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIr'@;
put 'eCkseH1JKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LGsucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIGc9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP2crPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYx'@;
put 'PT09dGhpcy53b3Jkc1syXT9nKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmSSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LWc6Z30say5wcm90b3R5cGUudG9K'@;
put 'U09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxrLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihnLFMpe3JldHVybiBJKHZvaWQgMCE9PUIpLHRoaXMudG9BcnJheUxpa2UoQixnLFMpfSxrLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKGcsUyl7cmV0dXJuIHRo'@;
put 'aXMudG9BcnJheUxpa2UoQXJyYXksZyxTKX0say5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfPXRoaXMuYnl0ZUxlbmd0aCgpLHA9eHx8TWF0aC5tYXgoMSxfKTtJKF88PXAsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxJKHA+MCwi'@;
put 'UmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBDLEssbmU9ImxlIj09PVMsdWU9bmV3IGcocCksaGU9dGhpcy5jbG9uZSgpO2lmKG5lKXtmb3IoSz0wOyFoZS5pc1plcm8oKTtLKyspQz1oZS5hbmRsbigyNTUpLGhlLml1c2hybig4KSx1ZVtLXT1DO2Zvcig7'@;
put 'SzxwO0srKyl1ZVtLXT0wfWVsc2V7Zm9yKEs9MDtLPHAtXztLKyspdWVbS109MDtmb3IoSz0wOyFoZS5pc1plcm8oKTtLKyspQz1oZS5hbmRsbigyNTUpLGhlLml1c2hybig4KSx1ZVtwLUstMV09Q31yZXR1cm4gdWV9LGsucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gMzItTWF0aC5jbHozMihnKX06ZnVuY3Rpb24oZyl7dmFyIFM9Zyx4PTA7cmV0dXJuIFM+PTQwOTYmJih4Kz0xMyxTPj4+PTEzKSxTPj02NCYmKHgrPTcsUz4+Pj03KSxTPj04JiYoeCs9NCxTPj4+PTQpLFM+PTImJih4Kz0yLFM+Pj49MikseCtTfSxrLnByb3RvdHlwZS5f'@;
put 'emVyb0JpdHM9ZnVuY3Rpb24oZyl7aWYoMD09PWcpcmV0dXJuIDI2O3ZhciBTPWcseD0wO3JldHVybiEoODE5MSZTKSYmKHgrPTEzLFM+Pj49MTMpLCEoMTI3JlMpJiYoeCs9NyxTPj4+PTcpLCEoMTUmUykmJih4Kz00LFM+Pj49NCksISgzJlMpJiYoeCs9MixTPj4+PTIpLCEoMSZTKSYmeCsr'@;
put 'LHh9LGsucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBTPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK1N9LGsucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSly'@;
put 'ZXR1cm4gMDtmb3IodmFyIGc9MCxTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbU10pO2lmKGcrPXgsMjYhPT14KWJyZWFrfXJldHVybiBnfSxrLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlz'@;
put 'LmJpdExlbmd0aCgpLzgpfSxrLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oZyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oZykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxrLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy50ZXN0'@;
put 'bihnLTEpP3RoaXMubm90bihnKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxrLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0say5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGsucHJv'@;
put 'dG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGsucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgUz0w'@;
put 'O1M8Zy5sZW5ndGg7UysrKXRoaXMud29yZHNbU109dGhpcy53b3Jkc1tTXXxnLndvcmRzW1NdO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmlvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihnKX0say5wcm90b3R5'@;
put 'cGUub3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoZyk6Zy5jbG9uZSgpLmlvcih0aGlzKX0say5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihnKTpn'@;
put 'LmNsb25lKCkuaXVvcih0aGlzKX0say5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oZyl7dmFyIFM7Uz10aGlzLmxlbmd0aD5nLmxlbmd0aD9nOnRoaXM7Zm9yKHZhciB4PTA7eDxTLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJmcud29yZHNbeF07cmV0dXJuIHRoaXMu'@;
put 'bGVuZ3RoPVMubGVuZ3RoLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoZyl9LGsucHJvdG90eXBlLmFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLmlhbmQoZyk6Zy5jbG9uZSgpLmlhbmQodGhpcyl9LGsucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChnKTpnLmNsb25lKCkuaXVhbmQodGhpcyl9LGsucHJvdG90eXBlLml1eG9y'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciBTLHg7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KFM9dGhpcyx4PWcpOihTPWcseD10aGlzKTtmb3IodmFyIF89MDtfPHgubGVuZ3RoO18rKyl0aGlzLndvcmRzW19dPVMud29yZHNbX11eeC53b3Jkc1tfXTtpZih0aGlzIT09Uylmb3IoO188Uy5sZW5ndGg7XysrKXRo'@;
put 'aXMud29yZHNbX109Uy53b3Jkc1tfXTtyZXR1cm4gdGhpcy5sZW5ndGg9Uy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihnKX0say5wcm90b3R5cGUueG9yPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihnKTpnLmNsb25lKCkuaXhvcih0aGlzKX0say5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKGcpOmcuY2xv'@;
put 'bmUoKS5pdXhvcih0aGlzKX0say5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPTB8TWF0aC5jZWlsKGcvMjYpLHg9ZyUyNjt0aGlzLl9leHBhbmQoUykseD4wJiZTLS07Zm9yKHZhciBfPTA7XzxTO18rKyl0aGlzLndvcmRzW19d'@;
put 'PTY3MTA4ODYzJn50aGlzLndvcmRzW19dO3JldHVybiB4PjAmJih0aGlzLndvcmRzW19dPX50aGlzLndvcmRzW19dJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihnKX0say5wcm90b3R5'@;
put 'cGUuc2V0bj1mdW5jdGlvbihnLFMpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgeD1nLzI2fDAsXz1nJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPVM/dGhpcy53b3Jkc1t4XXwxPDxfOnRoaXMud29yZHNbeF0mfigxPDxfKSx0aGlzLnN0cmlwKCl9'@;
put 'LGsucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyl7dmFyIFMseCxfO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFM9dGhpcy5pc3ViKGcpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIGcubmVnYXRpdmU9MCxTPXRoaXMuaXN1YihnKSxnLm5lZ2F0aXZlPTEsUy5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oeD10aGlzLF89Zyk6KHg9ZyxfPXRoaXMpO2Zvcih2YXIgcD0wLEM9MDtDPF8ubGVuZ3RoO0MrKyl0aGlz'@;
put 'LndvcmRzW0NdPTY3MTA4ODYzJihTPSgwfHgud29yZHNbQ10pKygwfF8ud29yZHNbQ10pK3ApLHA9Uz4+PjI2O2Zvcig7MCE9PXAmJkM8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKFM9KDB8eC53b3Jkc1tDXSkrcCkscD1TPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5n'@;
put 'dGgsMCE9PXApdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09cCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXgud29yZHNbQ107cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnKXt2YXIgUztyZXR1cm4g'@;
put 'MCE9PWcubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhnLm5lZ2F0aXZlPTAsUz10aGlzLnN1YihnKSxnLm5lZ2F0aXZlXj0xLFMpOjA9PT1nLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFM9Zy5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLFMpOnRo'@;
put 'aXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKGcpOmcuY2xvbmUoKS5pYWRkKHRoaXMpfSxrLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcpe2lmKDAhPT1nLm5lZ2F0aXZlKXtnLm5lZ2F0aXZlPTA7dmFyIFM9dGhpcy5pYWRkKGcpO3JldHVybiBnLm5lZ2F0aXZlPTEsUy5f'@;
put 'bm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgeCxfLHA9dGhpcy5jbXAoZyk7aWYoMD09PXApcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0'@;
put 'aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3A+MD8oeD10aGlzLF89Zyk6KHg9ZyxfPXRoaXMpO2Zvcih2YXIgQz0wLEs9MDtLPF8ubGVuZ3RoO0srKylDPShTPSgwfHgud29yZHNbS10pLSgwfF8ud29yZHNbS10pK0MpPj4yNix0aGlzLndvcmRzW0tdPTY3MTA4ODYzJlM7Zm9yKDswIT09QyYm'@;
put 'Szx4Lmxlbmd0aDtLKyspQz0oUz0oMHx4LndvcmRzW0tdKStDKT4+MjYsdGhpcy53b3Jkc1tLXT02NzEwODg2MyZTO2lmKDA9PT1DJiZLPHgubGVuZ3RoJiZ4IT09dGhpcylmb3IoO0s8eC5sZW5ndGg7SysrKXRoaXMud29yZHNbS109eC53b3Jkc1tLXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0'@;
put 'aC5tYXgodGhpcy5sZW5ndGgsSykseCE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihnKX07dmFyIHRlPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXyxwLEMsSz1nLndvcmRzLG5l'@;
put 'PVMud29yZHMsdWU9eC53b3JkcyxoZT0wLHhlPTB8S1swXSxPZT04MTkxJnhlLEhlPXhlPj4+MTMsRWU9MHxLWzFdLExlPTgxOTEmRWUsTmU9RWU+Pj4xMyxLZT0wfEtbMl0sVWU9ODE5MSZLZSxYZT1LZT4+PjEzLGF0PTB8S1szXSxGZT04MTkxJmF0LENlPWF0Pj4+MTMsRGU9MHxLWzRdLFJl'@;
put 'PTgxOTEmRGUsZXQ9RGU+Pj4xMyxudD0wfEtbNV0sR2U9ODE5MSZudCxkdD1udD4+PjEzLFRlPTB8S1s2XSxBZT04MTkxJlRlLEJlPVRlPj4+MTMsb3Q9MHxLWzddLGx0PTgxOTEmb3QsQ3Q9b3Q+Pj4xMyxGdD0wfEtbOF0sUnQ9ODE5MSZGdCxYdD1GdD4+PjEzLFNuPTB8S1s5XSx6dD04MTkx'@;
put 'JlNuLHZuPVNuPj4+MTMsQm49MHxuZVswXSx0bj04MTkxJkJuLFpuPUJuPj4+MTMsT249MHxuZVsxXSxwdD04MTkxJk9uLGZuPU9uPj4+MTMsZG49MHxuZVsyXSxNdD04MTkxJmRuLFl0PWRuPj4+MTMsX3Q9MHxuZVszXSxqdD04MTkxJl90LHBuPV90Pj4+MTMscnQ9MHxuZVs0XSxFdD04MTkx'@;
put 'JnJ0LFF0PXJ0Pj4+MTMsVHQ9MHxuZVs1XSxtdD04MTkxJlR0LEd0PVR0Pj4+MTMsa249MHxuZVs2XSxCdD04MTkxJmtuLGJuPWtuPj4+MTMsQ249MHxuZVs3XSxlbj04MTkxJkNuLFBuPUNuPj4+MTMsd249MHxuZVs4XSwkdD04MTkxJnduLFduPXduPj4+MTMsY2k9MHxuZVs5XSxsbj04MTkx'@;
put 'JmNpLG5uPWNpPj4+MTM7eC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXlMubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIHVpPShoZSsoXz1NYXRoLmltdWwoT2UsdG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKE9lLFpuKSkrTWF0aC5pbXVsKEhlLHRuKXwwKSk8PDEzKXwwO2hlPSgoQz1NYXRo'@;
put 'LmltdWwoSGUsWm4pKSsocD4+PjEzKXwwKSsodWk+Pj4yNil8MCx1aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoTGUsdG4pLHA9KHA9TWF0aC5pbXVsKExlLFpuKSkrTWF0aC5pbXVsKE5lLHRuKXwwLEM9TWF0aC5pbXVsKE5lLFpuKTt2YXIgQXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLHB0KXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsZm4pfDApK01hdGguaW11bChIZSxwdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsZm4pfDApKyhwPj4+MTMpfDApKyhBcj4+PjI2KXwwLEFyJj02NzEwODg2MyxfPU1hdGguaW11bChVZSx0bikscD0ocD1NYXRoLmlt'@;
put 'dWwoVWUsWm4pKStNYXRoLmltdWwoWGUsdG4pfDAsQz1NYXRoLmltdWwoWGUsWm4pLF89XytNYXRoLmltdWwoTGUscHQpfDAscD0ocD1wK01hdGguaW11bChMZSxmbil8MCkrTWF0aC5pbXVsKE5lLHB0KXwwLEM9QytNYXRoLmltdWwoTmUsZm4pfDA7dmFyIG1yPShoZSsoXz1fK01hdGguaW11'@;
put 'bChPZSxNdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLFl0KXwwKStNYXRoLmltdWwoSGUsTXQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFl0KXwwKSsocD4+PjEzKXwwKSsobXI+Pj4yNil8MCxtciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRmUsdG4pLHA9'@;
put 'KHA9TWF0aC5pbXVsKEZlLFpuKSkrTWF0aC5pbXVsKENlLHRuKXwwLEM9TWF0aC5pbXVsKENlLFpuKSxfPV8rTWF0aC5pbXVsKFVlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsZm4pfDApK01hdGguaW11bChYZSxwdCl8MCxDPUMrTWF0aC5pbXVsKFhlLGZuKXwwLF89XytNYXRoLmltdWwo'@;
put 'TGUsTXQpfDAscD0ocD1wK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKE5lLE10KXwwLEM9QytNYXRoLmltdWwoTmUsWXQpfDA7dmFyIHlpPShoZSsoXz1fK01hdGguaW11bChPZSxqdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLHBuKXwwKStNYXRoLmltdWwoSGUs'@;
put 'anQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLHBuKXwwKSsocD4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoUmUsdG4pLHA9KHA9TWF0aC5pbXVsKFJlLFpuKSkrTWF0aC5pbXVsKGV0LHRuKXwwLEM9TWF0aC5pbXVsKGV0LFpuKSxfPV8r'@;
put 'TWF0aC5pbXVsKEZlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsZm4pfDApK01hdGguaW11bChDZSxwdCl8MCxDPUMrTWF0aC5pbXVsKENlLGZuKXwwLF89XytNYXRoLmltdWwoVWUsTXQpfDAscD0ocD1wK01hdGguaW11bChVZSxZdCl8MCkrTWF0aC5pbXVsKFhlLE10KXwwLEM9QytNYXRo'@;
put 'LmltdWwoWGUsWXQpfDAsXz1fK01hdGguaW11bChMZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLHBuKXwwKStNYXRoLmltdWwoTmUsanQpfDAsQz1DK01hdGguaW11bChOZSxwbil8MDt2YXIgJHI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLEV0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwoT2UsUXQpfDApK01hdGguaW11bChIZSxFdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsUXQpfDApKyhwPj4+MTMpfDApKygkcj4+PjI2KXwwLCRyJj02NzEwODg2MyxfPU1hdGguaW11bChHZSx0bikscD0ocD1NYXRoLmltdWwoR2UsWm4pKStNYXRoLmltdWwoZHQs'@;
put 'dG4pfDAsQz1NYXRoLmltdWwoZHQsWm4pLF89XytNYXRoLmltdWwoUmUscHQpfDAscD0ocD1wK01hdGguaW11bChSZSxmbil8MCkrTWF0aC5pbXVsKGV0LHB0KXwwLEM9QytNYXRoLmltdWwoZXQsZm4pfDAsXz1fK01hdGguaW11bChGZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFl0KXww'@;
put 'KStNYXRoLmltdWwoQ2UsTXQpfDAsQz1DK01hdGguaW11bChDZSxZdCl8MCxfPV8rTWF0aC5pbXVsKFVlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUscG4pfDApK01hdGguaW11bChYZSxqdCl8MCxDPUMrTWF0aC5pbXVsKFhlLHBuKXwwLF89XytNYXRoLmltdWwoTGUsRXQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChMZSxRdCl8MCkrTWF0aC5pbXVsKE5lLEV0KXwwLEM9QytNYXRoLmltdWwoTmUsUXQpfDA7dmFyIEppPShoZSsoXz1fK01hdGguaW11bChPZSxtdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLEd0KXwwKStNYXRoLmltdWwoSGUsbXQpfDApKTw8MTMpfDA7'@;
put 'aGU9KChDPUMrTWF0aC5pbXVsKEhlLEd0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoQWUsdG4pLHA9KHA9TWF0aC5pbXVsKEFlLFpuKSkrTWF0aC5pbXVsKEJlLHRuKXwwLEM9TWF0aC5pbXVsKEJlLFpuKSxfPV8rTWF0aC5pbXVsKEdlLHB0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsZm4pfDApK01hdGguaW11bChkdCxwdCl8MCxDPUMrTWF0aC5pbXVsKGR0LGZuKXwwLF89XytNYXRoLmltdWwoUmUsTXQpfDAscD0ocD1wK01hdGguaW11bChSZSxZdCl8MCkrTWF0aC5pbXVsKGV0LE10KXwwLEM9QytNYXRoLmltdWwoZXQsWXQpfDAs'@;
put 'Xz1fK01hdGguaW11bChGZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLHBuKXwwKStNYXRoLmltdWwoQ2UsanQpfDAsQz1DK01hdGguaW11bChDZSxwbil8MCxfPV8rTWF0aC5pbXVsKFVlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsUXQpfDApK01hdGguaW11bChYZSxFdCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKFhlLFF0KXwwLF89XytNYXRoLmltdWwoTGUsbXQpfDAscD0ocD1wK01hdGguaW11bChMZSxHdCl8MCkrTWF0aC5pbXVsKE5lLG10KXwwLEM9QytNYXRoLmltdWwoTmUsR3QpfDA7dmFyIHlyPShoZSsoXz1fK01hdGguaW11bChPZSxCdCl8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKE9lLGJuKXwwKStNYXRoLmltdWwoSGUsQnQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLGJuKXwwKSsocD4+PjEzKXwwKSsoeXI+Pj4yNil8MCx5ciY9NjcxMDg4NjMsXz1NYXRoLmltdWwobHQsdG4pLHA9KHA9TWF0aC5pbXVsKGx0LFpuKSkrTWF0aC5pbXVs'@;
put 'KEN0LHRuKXwwLEM9TWF0aC5pbXVsKEN0LFpuKSxfPV8rTWF0aC5pbXVsKEFlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsZm4pfDApK01hdGguaW11bChCZSxwdCl8MCxDPUMrTWF0aC5pbXVsKEJlLGZuKXwwLF89XytNYXRoLmltdWwoR2UsTXQpfDAscD0ocD1wK01hdGguaW11bChHZSxZ'@;
put 'dCl8MCkrTWF0aC5pbXVsKGR0LE10KXwwLEM9QytNYXRoLmltdWwoZHQsWXQpfDAsXz1fK01hdGguaW11bChSZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLHBuKXwwKStNYXRoLmltdWwoZXQsanQpfDAsQz1DK01hdGguaW11bChldCxwbil8MCxfPV8rTWF0aC5pbXVsKEZlLEV0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoRmUsUXQpfDApK01hdGguaW11bChDZSxFdCl8MCxDPUMrTWF0aC5pbXVsKENlLFF0KXwwLF89XytNYXRoLmltdWwoVWUsbXQpfDAscD0ocD1wK01hdGguaW11bChVZSxHdCl8MCkrTWF0aC5pbXVsKFhlLG10KXwwLEM9QytNYXRoLmltdWwoWGUsR3QpfDAsXz1fK01h'@;
put 'dGguaW11bChMZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLGJuKXwwKStNYXRoLmltdWwoTmUsQnQpfDAsQz1DK01hdGguaW11bChOZSxibil8MDt2YXIgSWk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGVuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsUG4pfDApK01hdGgu'@;
put 'aW11bChIZSxlbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsUG4pfDApKyhwPj4+MTMpfDApKyhJaT4+PjI2KXwwLElpJj02NzEwODg2MyxfPU1hdGguaW11bChSdCx0bikscD0ocD1NYXRoLmltdWwoUnQsWm4pKStNYXRoLmltdWwoWHQsdG4pfDAsQz1NYXRoLmltdWwoWHQs'@;
put 'Wm4pLF89XytNYXRoLmltdWwobHQscHQpfDAscD0ocD1wK01hdGguaW11bChsdCxmbil8MCkrTWF0aC5pbXVsKEN0LHB0KXwwLEM9QytNYXRoLmltdWwoQ3QsZm4pfDAsXz1fK01hdGguaW11bChBZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLFl0KXwwKStNYXRoLmltdWwoQmUsTXQpfDAs'@;
put 'Qz1DK01hdGguaW11bChCZSxZdCl8MCxfPV8rTWF0aC5pbXVsKEdlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UscG4pfDApK01hdGguaW11bChkdCxqdCl8MCxDPUMrTWF0aC5pbXVsKGR0LHBuKXwwLF89XytNYXRoLmltdWwoUmUsRXQpfDAscD0ocD1wK01hdGguaW11bChSZSxRdCl8MCkr'@;
put 'TWF0aC5pbXVsKGV0LEV0KXwwLEM9QytNYXRoLmltdWwoZXQsUXQpfDAsXz1fK01hdGguaW11bChGZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLEd0KXwwKStNYXRoLmltdWwoQ2UsbXQpfDAsQz1DK01hdGguaW11bChDZSxHdCl8MCxfPV8rTWF0aC5pbXVsKFVlLEJ0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVWUsYm4pfDApK01hdGguaW11bChYZSxCdCl8MCxDPUMrTWF0aC5pbXVsKFhlLGJuKXwwLF89XytNYXRoLmltdWwoTGUsZW4pfDAscD0ocD1wK01hdGguaW11bChMZSxQbil8MCkrTWF0aC5pbXVsKE5lLGVuKXwwLEM9QytNYXRoLmltdWwoTmUsUG4pfDA7dmFyIG5vPShoZSso'@;
put 'Xz1fK01hdGguaW11bChPZSwkdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLFduKXwwKStNYXRoLmltdWwoSGUsJHQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFduKXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsXz1NYXRoLmlt'@;
put 'dWwoenQsdG4pLHA9KHA9TWF0aC5pbXVsKHp0LFpuKSkrTWF0aC5pbXVsKHZuLHRuKXwwLEM9TWF0aC5pbXVsKHZuLFpuKSxfPV8rTWF0aC5pbXVsKFJ0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsZm4pfDApK01hdGguaW11bChYdCxwdCl8MCxDPUMrTWF0aC5pbXVsKFh0LGZuKXwwLF89'@;
put 'XytNYXRoLmltdWwobHQsTXQpfDAscD0ocD1wK01hdGguaW11bChsdCxZdCl8MCkrTWF0aC5pbXVsKEN0LE10KXwwLEM9QytNYXRoLmltdWwoQ3QsWXQpfDAsXz1fK01hdGguaW11bChBZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLHBuKXwwKStNYXRoLmltdWwoQmUsanQpfDAsQz1DK01h'@;
put 'dGguaW11bChCZSxwbil8MCxfPV8rTWF0aC5pbXVsKEdlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsUXQpfDApK01hdGguaW11bChkdCxFdCl8MCxDPUMrTWF0aC5pbXVsKGR0LFF0KXwwLF89XytNYXRoLmltdWwoUmUsbXQpfDAscD0ocD1wK01hdGguaW11bChSZSxHdCl8MCkrTWF0aC5p'@;
put 'bXVsKGV0LG10KXwwLEM9QytNYXRoLmltdWwoZXQsR3QpfDAsXz1fK01hdGguaW11bChGZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLGJuKXwwKStNYXRoLmltdWwoQ2UsQnQpfDAsQz1DK01hdGguaW11bChDZSxibil8MCxfPV8rTWF0aC5pbXVsKFVlLGVuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoVWUsUG4pfDApK01hdGguaW11bChYZSxlbil8MCxDPUMrTWF0aC5pbXVsKFhlLFBuKXwwLF89XytNYXRoLmltdWwoTGUsJHQpfDAscD0ocD1wK01hdGguaW11bChMZSxXbil8MCkrTWF0aC5pbXVsKE5lLCR0KXwwLEM9QytNYXRoLmltdWwoTmUsV24pfDA7dmFyIHpuPShoZSsoXz1fK01h'@;
put 'dGguaW11bChPZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLG5uKXwwKStNYXRoLmltdWwoSGUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLG5uKXwwKSsocD4+PjEzKXwwKSsoem4+Pj4yNil8MCx6biY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQs'@;
put 'cHQpLHA9KHA9TWF0aC5pbXVsKHp0LGZuKSkrTWF0aC5pbXVsKHZuLHB0KXwwLEM9TWF0aC5pbXVsKHZuLGZuKSxfPV8rTWF0aC5pbXVsKFJ0LE10KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsWXQpfDApK01hdGguaW11bChYdCxNdCl8MCxDPUMrTWF0aC5pbXVsKFh0LFl0KXwwLF89XytNYXRo'@;
put 'LmltdWwobHQsanQpfDAscD0ocD1wK01hdGguaW11bChsdCxwbil8MCkrTWF0aC5pbXVsKEN0LGp0KXwwLEM9QytNYXRoLmltdWwoQ3QscG4pfDAsXz1fK01hdGguaW11bChBZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLFF0KXwwKStNYXRoLmltdWwoQmUsRXQpfDAsQz1DK01hdGguaW11'@;
put 'bChCZSxRdCl8MCxfPV8rTWF0aC5pbXVsKEdlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsR3QpfDApK01hdGguaW11bChkdCxtdCl8MCxDPUMrTWF0aC5pbXVsKGR0LEd0KXwwLF89XytNYXRoLmltdWwoUmUsQnQpfDAscD0ocD1wK01hdGguaW11bChSZSxibil8MCkrTWF0aC5pbXVsKGV0'@;
put 'LEJ0KXwwLEM9QytNYXRoLmltdWwoZXQsYm4pfDAsXz1fK01hdGguaW11bChGZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKEZlLFBuKXwwKStNYXRoLmltdWwoQ2UsZW4pfDAsQz1DK01hdGguaW11bChDZSxQbil8MCxfPV8rTWF0aC5pbXVsKFVlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUs'@;
put 'V24pfDApK01hdGguaW11bChYZSwkdCl8MCxDPUMrTWF0aC5pbXVsKFhlLFduKXwwO3ZhciBaaT0oaGUrKF89XytNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChMZSxubil8MCkrTWF0aC5pbXVsKE5lLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGgu'@;
put 'aW11bChOZSxubil8MCkrKHA+Pj4xMyl8MCkrKFppPj4+MjYpfDAsWmkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LE10KSxwPShwPU1hdGguaW11bCh6dCxZdCkpK01hdGguaW11bCh2bixNdCl8MCxDPU1hdGguaW11bCh2bixZdCksXz1fK01hdGguaW11bChSdCxqdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFJ0LHBuKXwwKStNYXRoLmltdWwoWHQsanQpfDAsQz1DK01hdGguaW11bChYdCxwbil8MCxfPV8rTWF0aC5pbXVsKGx0LEV0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsUXQpfDApK01hdGguaW11bChDdCxFdCl8MCxDPUMrTWF0aC5pbXVsKEN0LFF0KXwwLF89XytNYXRoLmltdWwo'@;
put 'QWUsbXQpfDAscD0ocD1wK01hdGguaW11bChBZSxHdCl8MCkrTWF0aC5pbXVsKEJlLG10KXwwLEM9QytNYXRoLmltdWwoQmUsR3QpfDAsXz1fK01hdGguaW11bChHZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLGJuKXwwKStNYXRoLmltdWwoZHQsQnQpfDAsQz1DK01hdGguaW11bChkdCxi'@;
put 'bil8MCxfPV8rTWF0aC5pbXVsKFJlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsUG4pfDApK01hdGguaW11bChldCxlbil8MCxDPUMrTWF0aC5pbXVsKGV0LFBuKXwwLF89XytNYXRoLmltdWwoRmUsJHQpfDAscD0ocD1wK01hdGguaW11bChGZSxXbil8MCkrTWF0aC5pbXVsKENlLCR0KXww'@;
put 'LEM9QytNYXRoLmltdWwoQ2UsV24pfDA7dmFyIFdpPShoZSsoXz1fK01hdGguaW11bChVZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFVlLG5uKXwwKStNYXRoLmltdWwoWGUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKFhlLG5uKXwwKSsocD4+PjEzKXww'@;
put 'KSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsanQpLHA9KHA9TWF0aC5pbXVsKHp0LHBuKSkrTWF0aC5pbXVsKHZuLGp0KXwwLEM9TWF0aC5pbXVsKHZuLHBuKSxfPV8rTWF0aC5pbXVsKFJ0LEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsUXQpfDApK01hdGguaW11'@;
put 'bChYdCxFdCl8MCxDPUMrTWF0aC5pbXVsKFh0LFF0KXwwLF89XytNYXRoLmltdWwobHQsbXQpfDAscD0ocD1wK01hdGguaW11bChsdCxHdCl8MCkrTWF0aC5pbXVsKEN0LG10KXwwLEM9QytNYXRoLmltdWwoQ3QsR3QpfDAsXz1fK01hdGguaW11bChBZSxCdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KEFlLGJuKXwwKStNYXRoLmltdWwoQmUsQnQpfDAsQz1DK01hdGguaW11bChCZSxibil8MCxfPV8rTWF0aC5pbXVsKEdlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsUG4pfDApK01hdGguaW11bChkdCxlbil8MCxDPUMrTWF0aC5pbXVsKGR0LFBuKXwwLF89XytNYXRoLmltdWwoUmUsJHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChSZSxXbil8MCkrTWF0aC5pbXVsKGV0LCR0KXwwLEM9QytNYXRoLmltdWwoZXQsV24pfDA7dmFyIG9vPShoZSsoXz1fK01hdGguaW11bChGZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEZlLG5uKXwwKStNYXRoLmltdWwoQ2UsbG4pfDAp'@;
put 'KTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKENlLG5uKXwwKSsocD4+PjEzKXwwKSsob28+Pj4yNil8MCxvbyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsRXQpLHA9KHA9TWF0aC5pbXVsKHp0LFF0KSkrTWF0aC5pbXVsKHZuLEV0KXwwLEM9TWF0aC5pbXVsKHZuLFF0KSxfPV8rTWF0aC5p'@;
put 'bXVsKFJ0LG10KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsR3QpfDApK01hdGguaW11bChYdCxtdCl8MCxDPUMrTWF0aC5pbXVsKFh0LEd0KXwwLF89XytNYXRoLmltdWwobHQsQnQpfDAscD0ocD1wK01hdGguaW11bChsdCxibil8MCkrTWF0aC5pbXVsKEN0LEJ0KXwwLEM9QytNYXRoLmltdWwo'@;
put 'Q3QsYm4pfDAsXz1fK01hdGguaW11bChBZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKEFlLFBuKXwwKStNYXRoLmltdWwoQmUsZW4pfDAsQz1DK01hdGguaW11bChCZSxQbil8MCxfPV8rTWF0aC5pbXVsKEdlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsV24pfDApK01hdGguaW11bChkdCwk'@;
put 'dCl8MCxDPUMrTWF0aC5pbXVsKGR0LFduKXwwO3ZhciBobz0oaGUrKF89XytNYXRoLmltdWwoUmUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChSZSxubil8MCkrTWF0aC5pbXVsKGV0LGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChldCxubil8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LG10KSxwPShwPU1hdGguaW11bCh6dCxHdCkpK01hdGguaW11bCh2bixtdCl8MCxDPU1hdGguaW11bCh2bixHdCksXz1fK01hdGguaW11bChSdCxCdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGJuKXwwKStNYXRo'@;
put 'LmltdWwoWHQsQnQpfDAsQz1DK01hdGguaW11bChYdCxibil8MCxfPV8rTWF0aC5pbXVsKGx0LGVuKXwwLHA9KHA9cCtNYXRoLmltdWwobHQsUG4pfDApK01hdGguaW11bChDdCxlbil8MCxDPUMrTWF0aC5pbXVsKEN0LFBuKXwwLF89XytNYXRoLmltdWwoQWUsJHQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChBZSxXbil8MCkrTWF0aC5pbXVsKEJlLCR0KXwwLEM9QytNYXRoLmltdWwoQmUsV24pfDA7dmFyIExyPShoZSsoXz1fK01hdGguaW11bChHZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEdlLG5uKXwwKStNYXRoLmltdWwoZHQsbG4pfDApKTw8MTMpfDA7aGU9KChD'@;
put 'PUMrTWF0aC5pbXVsKGR0LG5uKXwwKSsocD4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsQnQpLHA9KHA9TWF0aC5pbXVsKHp0LGJuKSkrTWF0aC5pbXVsKHZuLEJ0KXwwLEM9TWF0aC5pbXVsKHZuLGJuKSxfPV8rTWF0aC5pbXVsKFJ0LGVuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoUnQsUG4pfDApK01hdGguaW11bChYdCxlbil8MCxDPUMrTWF0aC5pbXVsKFh0LFBuKXwwLF89XytNYXRoLmltdWwobHQsJHQpfDAscD0ocD1wK01hdGguaW11bChsdCxXbil8MCkrTWF0aC5pbXVsKEN0LCR0KXwwLEM9QytNYXRoLmltdWwoQ3QsV24pfDA7dmFyIEJp'@;
put 'PShoZSsoXz1fK01hdGguaW11bChBZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEFlLG5uKXwwKStNYXRoLmltdWwoQmUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEJlLG5uKXwwKSsocD4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsXz1N'@;
put 'YXRoLmltdWwoenQsZW4pLHA9KHA9TWF0aC5pbXVsKHp0LFBuKSkrTWF0aC5pbXVsKHZuLGVuKXwwLEM9TWF0aC5pbXVsKHZuLFBuKSxfPV8rTWF0aC5pbXVsKFJ0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsV24pfDApK01hdGguaW11bChYdCwkdCl8MCxDPUMrTWF0aC5pbXVsKFh0LFdu'@;
put 'KXwwO3ZhciBMbz0oaGUrKF89XytNYXRoLmltdWwobHQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChsdCxubil8MCkrTWF0aC5pbXVsKEN0LGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChDdCxubil8MCkrKHA+Pj4xMyl8MCkrKExvPj4+MjYpfDAsTG8mPTY3'@;
put 'MTA4ODYzLF89TWF0aC5pbXVsKHp0LCR0KSxwPShwPU1hdGguaW11bCh6dCxXbikpK01hdGguaW11bCh2biwkdCl8MCxDPU1hdGguaW11bCh2bixXbik7dmFyIEtvPShoZSsoXz1fK01hdGguaW11bChSdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJ0LG5uKXwwKStNYXRo'@;
put 'LmltdWwoWHQsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKFh0LG5uKXwwKSsocD4+PjEzKXwwKSsoS28+Pj4yNil8MCxLbyY9NjcxMDg4NjM7dmFyIGVzPShoZSsoXz1NYXRoLmltdWwoenQsbG4pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKHp0LG5uKSkrTWF0aC5pbXVs'@;
put 'KHZuLGxuKXwwKSk8PDEzKXwwO3JldHVybiBoZT0oKEM9TWF0aC5pbXVsKHZuLG5uKSkrKHA+Pj4xMyl8MCkrKGVzPj4+MjYpfDAsZXMmPTY3MTA4ODYzLHVlWzBdPXVpLHVlWzFdPUFyLHVlWzJdPW1yLHVlWzNdPXlpLHVlWzRdPSRyLHVlWzVdPUppLHVlWzZdPXlyLHVlWzddPUlpLHVlWzhd'@;
put 'PW5vLHVlWzldPXpuLHVlWzEwXT1aaSx1ZVsxMV09V2ksdWVbMTJdPW9vLHVlWzEzXT1obyx1ZVsxNF09THIsdWVbMTVdPUJpLHVlWzE2XT1Mbyx1ZVsxN109S28sdWVbMThdPWVzLDAhPT1oZSYmKHVlWzE5XT1oZSx4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBhZShnLFMseCl7cmV0dXJuKG5l'@;
put 'dyBzZSkubXVscChnLFMseCl9ZnVuY3Rpb24gc2UoZyxTKXt0aGlzLng9Zyx0aGlzLnk9U31NYXRoLmltdWx8fCh0ZT1RKSxrLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihnLFMpe3ZhciBfPXRoaXMubGVuZ3RoK2cubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PWcubGVu'@;
put 'Z3RoP3RlKHRoaXMsZyxTKTpfPDYzP1EodGhpcyxnLFMpOl88MTAyND9mdW5jdGlvbihwLEMsSyl7Sy5uZWdhdGl2ZT1DLm5lZ2F0aXZlXnAubmVnYXRpdmUsSy5sZW5ndGg9cC5sZW5ndGgrQy5sZW5ndGg7Zm9yKHZhciBuZT0wLHVlPTAsaGU9MDtoZTxLLmxlbmd0aC0xO2hlKyspe3ZhciB4'@;
put 'ZT11ZTt1ZT0wO2Zvcih2YXIgT2U9NjcxMDg4NjMmbmUsSGU9TWF0aC5taW4oaGUsQy5sZW5ndGgtMSksRWU9TWF0aC5tYXgoMCxoZS1wLmxlbmd0aCsxKTtFZTw9SGU7RWUrKyl7dmFyIE5lPSgwfHAud29yZHNbaGUtRWVdKSooMHxDLndvcmRzW0VlXSksS2U9NjcxMDg4NjMmTmU7T2U9Njcx'@;
put 'MDg4NjMmKEtlPUtlK09lfDApLHVlKz0oeGU9KHhlPXhlKyhOZS82NzEwODg2NHwwKXwwKSsoS2U+Pj4yNil8MCk+Pj4yNix4ZSY9NjcxMDg4NjN9Sy53b3Jkc1toZV09T2UsbmU9eGUseGU9dWV9cmV0dXJuIDAhPT1uZT9LLndvcmRzW2hlXT1uZTpLLmxlbmd0aC0tLEsuc3RyaXAoKX0odGhp'@;
put 'cyxnLFMpOmFlKHRoaXMsZyxTKX0sc2UucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPW5ldyBBcnJheShnKSx4PWsucHJvdG90eXBlLl9jb3VudEJpdHMoZyktMSxfPTA7XzxnO18rKylTW19dPXRoaXMucmV2QmluKF8seCxnKTtyZXR1cm4gU30sc2UucHJvdG90eXBl'@;
put 'LnJldkJpbj1mdW5jdGlvbihnLFMseCl7aWYoMD09PWd8fGc9PT14LTEpcmV0dXJuIGc7Zm9yKHZhciBfPTAscD0wO3A8UztwKyspX3w9KDEmZyk8PFMtcC0xLGc+Pj0xO3JldHVybiBffSxzZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihnLFMseCxfLHAsQyl7Zm9yKHZhciBLPTA7SzxD'@;
put 'O0srKylfW0tdPVNbZ1tLXV0scFtLXT14W2dbS11dfSxzZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGcsUyx4LF8scCxDKXt0aGlzLnBlcm11dGUoQyxnLFMseCxfLHApO2Zvcih2YXIgSz0xO0s8cDtLPDw9MSlmb3IodmFyIG5lPUs8PDEsdWU9TWF0aC5jb3MoMipNYXRoLlBJL25l'@;
put 'KSxoZT1NYXRoLnNpbigyKk1hdGguUEkvbmUpLHhlPTA7eGU8cDt4ZSs9bmUpZm9yKHZhciBPZT11ZSxIZT1oZSxFZT0wO0VlPEs7RWUrKyl7dmFyIExlPXhbeGUrRWVdLE5lPV9beGUrRWVdLEtlPXhbeGUrRWUrS10sVWU9X1t4ZStFZStLXSxYZT1PZSpLZS1IZSpVZTtVZT1PZSpVZStIZSpL'@;
put 'ZSx4W3hlK0VlXT1MZSsoS2U9WGUpLF9beGUrRWVdPU5lK1VlLHhbeGUrRWUrS109TGUtS2UsX1t4ZStFZStLXT1OZS1VZSxFZSE9PW5lJiYoWGU9dWUqT2UtaGUqSGUsSGU9dWUqSGUraGUqT2UsT2U9WGUpfX0sc2UucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKGcsUyl7dmFyIHg9'@;
put 'MXxNYXRoLm1heChTLGcpLF89MSZ4LHA9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlwKys7cmV0dXJuIDE8PHArMStffSxzZS5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKGcsUyx4KXtpZighKHg8PTEpKWZvcih2YXIgXz0wO188eC8yO18rKyl7dmFyIHA9Z1tfXTtnW19dPWdbeC1fLTFd'@;
put 'LGdbeC1fLTFdPXAscD1TW19dLFNbX109LVNbeC1fLTFdLFNbeC1fLTFdPS1wfX0sc2UucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihnLFMpe2Zvcih2YXIgeD0wLF89MDtfPFMvMjtfKyspe3ZhciBwPTgxOTIqTWF0aC5yb3VuZChnWzIqXysxXS9TKStNYXRoLnJvdW5kKGdbMipf'@;
put 'XS9TKSt4O2dbX109NjcxMDg4NjMmcCx4PXA8NjcxMDg4NjQ/MDpwLzY3MTA4ODY0fDB9cmV0dXJuIGd9LHNlLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKGcsUyx4LF8pe2Zvcih2YXIgcD0wLEM9MDtDPFM7QysrKXhbMipDXT04MTkxJihwKz0wfGdbQ10pLHhbMipDKzFdPTgxOTEm'@;
put 'KHA+Pj49MTMpLHA+Pj49MTM7Zm9yKEM9MipTO0M8XzsrK0MpeFtDXT0wO0koMD09PXApLEkoISgtODE5MiZwKSl9LHNlLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKGcpe2Zvcih2YXIgUz1uZXcgQXJyYXkoZykseD0wO3g8Zzt4KyspU1t4XT0wO3JldHVybiBTfSxzZS5wcm90b3R5cGUubXVs'@;
put 'cD1mdW5jdGlvbihnLFMseCl7dmFyIF89Mip0aGlzLmd1ZXNzTGVuMTNiKGcubGVuZ3RoLFMubGVuZ3RoKSxwPXRoaXMubWFrZVJCVChfKSxDPXRoaXMuc3R1YihfKSxLPW5ldyBBcnJheShfKSxuZT1uZXcgQXJyYXkoXyksdWU9bmV3IEFycmF5KF8pLGhlPW5ldyBBcnJheShfKSx4ZT1uZXcg'@;
put 'QXJyYXkoXyksT2U9bmV3IEFycmF5KF8pLEhlPXgud29yZHM7SGUubGVuZ3RoPV8sdGhpcy5jb252ZXJ0MTNiKGcud29yZHMsZy5sZW5ndGgsSyxfKSx0aGlzLmNvbnZlcnQxM2IoUy53b3JkcyxTLmxlbmd0aCxoZSxfKSx0aGlzLnRyYW5zZm9ybShLLEMsbmUsdWUsXyxwKSx0aGlzLnRyYW5z'@;
put 'Zm9ybShoZSxDLHhlLE9lLF8scCk7Zm9yKHZhciBFZT0wO0VlPF87RWUrKyl7dmFyIExlPW5lW0VlXSp4ZVtFZV0tdWVbRWVdKk9lW0VlXTt1ZVtFZV09bmVbRWVdKk9lW0VlXSt1ZVtFZV0qeGVbRWVdLG5lW0VlXT1MZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUobmUsdWUsXyksdGhpcy50cmFu'@;
put 'c2Zvcm0obmUsdWUsSGUsQyxfLHApLHRoaXMuY29uanVnYXRlKEhlLEMsXyksdGhpcy5ub3JtYWxpemUxM2IoSGUsXykseC5uZWdhdGl2ZT1nLm5lZ2F0aXZlXlMubmVnYXRpdmUseC5sZW5ndGg9Zy5sZW5ndGgrUy5sZW5ndGgseC5zdHJpcCgpfSxrLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o'@;
put 'Zyl7dmFyIFM9bmV3IGsobnVsbCk7cmV0dXJuIFMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK2cubGVuZ3RoKSx0aGlzLm11bFRvKGcsUyl9LGsucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oZyl7dmFyIFM9bmV3IGsobnVsbCk7cmV0dXJuIFMud29yZHM9bmV3IEFycmF5KHRoaXMubGVu'@;
put 'Z3RoK2cubGVuZ3RoKSxhZSh0aGlzLGcsUyl9LGsucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhnLHRoaXMpfSxrLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KTtmb3IodmFy'@;
put 'IFM9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBfPSgwfHRoaXMud29yZHNbeF0pKmcscD0oNjcxMDg4NjMmXykrKDY3MTA4ODYzJlMpO1M+Pj0yNixTKz1fLzY3MTA4ODY0fDAsUys9cD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmcH1yZXR1cm4gMCE9PVMmJih0aGlzLndvcmRz'@;
put 'W3hdPVMsdGhpcy5sZW5ndGgrKyksdGhpc30say5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKGcpfSxrLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGsucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LGsucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnKXt2YXIgUz1mdW5jdGlvbihDKXtmb3IodmFyIEs9bmV3IEFycmF5KEMuYml0TGVuZ3RoKCkpLG5lPTA7bmU8Sy5sZW5ndGg7bmUrKyl7dmFyIGhlPW5lJTI2O0tbbmVdPShDLndvcmRzW25l'@;
put 'LzI2fDBdJjE8PGhlKT4+PmhlfXJldHVybiBLfShnKTtpZigwPT09Uy5sZW5ndGgpcmV0dXJuIG5ldyBrKDEpO2Zvcih2YXIgeD10aGlzLF89MDtfPFMubGVuZ3RoJiYwPT09U1tfXTtfKysseD14LnNxcigpKTtpZigrK188Uy5sZW5ndGgpZm9yKHZhciBwPXguc3FyKCk7XzxTLmxlbmd0aDtf'@;
put 'KysscD1wLnNxcigpKTAhPT1TW19dJiYoeD14Lm11bChwKSk7cmV0dXJuIHh9LGsucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFMseD1nJTI2LF89KGcteCkvMjYscD02NzEwODg2Mz4+PjI2LXg8PDI2LXg7aWYoMCE9PXgpe3Zh'@;
put 'ciBDPTA7Zm9yKFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIEs9dGhpcy53b3Jkc1tTXSZwO3RoaXMud29yZHNbU109KDB8dGhpcy53b3Jkc1tTXSktSzw8eHxDLEM9Sz4+PjI2LXh9QyYmKHRoaXMud29yZHNbU109Qyx0aGlzLmxlbmd0aCsrKX1pZigwIT09Xyl7Zm9yKFM9dGhpcy5sZW5n'@;
put 'dGgtMTtTPj0wO1MtLSl0aGlzLndvcmRzW1MrX109dGhpcy53b3Jkc1tTXTtmb3IoUz0wO1M8XztTKyspdGhpcy53b3Jkc1tTXT0wO3RoaXMubGVuZ3RoKz1ffXJldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0'@;
put 'aXZlKSx0aGlzLml1c2hsbihnKX0say5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXztJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCksXz1TPyhTLVMlMjYpLzI2OjA7dmFyIHA9ZyUyNixDPU1hdGgubWluKChnLXApLzI2LHRoaXMubGVuZ3RoKSxLPTY3MTA4ODYzXjY3'@;
put 'MTA4ODYzPj4+cDw8cCxuZT14O2lmKF8tPUMsXz1NYXRoLm1heCgwLF8pLG5lKXtmb3IodmFyIHVlPTA7dWU8Qzt1ZSsrKW5lLndvcmRzW3VlXT10aGlzLndvcmRzW3VlXTtuZS5sZW5ndGg9Q31pZigwIT09QylpZih0aGlzLmxlbmd0aD5DKWZvcih0aGlzLmxlbmd0aC09Qyx1ZT0wO3VlPHRo'@;
put 'aXMubGVuZ3RoO3VlKyspdGhpcy53b3Jkc1t1ZV09dGhpcy53b3Jkc1t1ZStDXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoZT0wO2Zvcih1ZT10aGlzLmxlbmd0aC0xO3VlPj0wJiYoMCE9PWhlfHx1ZT49Xyk7dWUtLSl7dmFyIHhlPTB8dGhpcy53b3Jkc1t1ZV07'@;
put 'dGhpcy53b3Jkc1t1ZV09aGU8PDI2LXB8eGU+Pj5wLGhlPXhlJkt9cmV0dXJuIG5lJiYwIT09aGUmJihuZS53b3Jkc1tuZS5sZW5ndGgrK109aGUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmlzaHJu'@;
put 'PWZ1bmN0aW9uKGcsUyx4KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oZyxTLHgpfSxrLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4oZyl9LGsucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaXVzaGxuKGcpfSxrLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oZyl9LGsucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKGcpfSxrLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlv'@;
put 'bihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9ZyUyNix4PShnLVMpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxTKSl9LGsucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy'@;
put 'IFM9ZyUyNix4PShnLVMpLzI2O3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09UyYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1TJiYo'@;
put 'dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5TPDxTKSx0aGlzLnN0cmlwKCkpfSxrLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihnKX0say5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MD90aGlzLmlzdWJuKC1nKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPGc/KHRoaXMud29yZHNbMF09Zy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhp'@;
put 'cyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihnKX0say5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKGcpe3RoaXMud29yZHNbMF0rPWc7Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tTXT49Njcx'@;
put 'MDg4NjQ7UysrKXRoaXMud29yZHNbU10tPTY3MTA4ODY0LFM9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbUysxXT0xOnRoaXMud29yZHNbUysxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxTKzEpLHRoaXN9LGsucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9u'@;
put 'KGcpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpLGc8MClyZXR1cm4gdGhpcy5pYWRkbigtZyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0t'@;
put 'PWcsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1NdPDA7UysrKXRoaXMud29yZHNbU10rPTY3MTA4ODY0LHRoaXMud29y'@;
put 'ZHNbUysxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oZyl9LGsucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihnKX0say5wcm90b3R5cGUuaWFi'@;
put 'cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30say5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LGsucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihnLFMseCl7dmFyIF8scDt0aGlzLl9leHBhbmQoZy5sZW5n'@;
put 'dGgreCk7dmFyIEs9MDtmb3IoXz0wO188Zy5sZW5ndGg7XysrKXtwPSgwfHRoaXMud29yZHNbXyt4XSkrSzt2YXIgbmU9KDB8Zy53b3Jkc1tfXSkqUztLPSgocC09NjcxMDg4NjMmbmUpPj4yNiktKG5lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbXyt4XT02NzEwODg2MyZwfWZvcig7Xzx0aGlz'@;
put 'Lmxlbmd0aC14O18rKylLPShwPSgwfHRoaXMud29yZHNbXyt4XSkrSyk+PjI2LHRoaXMud29yZHNbXyt4XT02NzEwODg2MyZwO2lmKDA9PT1LKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKEkoLTE9PT1LKSxLPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUs9KHA9LSgwfHRoaXMud29yZHNbX10p'@;
put 'K0spPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKGcsUyl7dmFyIHgsXz10aGlzLmNsb25lKCkscD1nLEM9MHxwLndvcmRzW3AubGVuZ3RoLTFdOzAhPSh4PTI2LXRo'@;
put 'aXMuX2NvdW50Qml0cyhDKSkmJihwPXAudXNobG4oeCksXy5pdXNobG4oeCksQz0wfHAud29yZHNbcC5sZW5ndGgtMV0pO3ZhciBLLG5lPV8ubGVuZ3RoLXAubGVuZ3RoO2lmKCJtb2QiIT09Uyl7KEs9bmV3IGsobnVsbCkpLmxlbmd0aD1uZSsxLEsud29yZHM9bmV3IEFycmF5KEsubGVuZ3Ro'@;
put 'KTtmb3IodmFyIHVlPTA7dWU8Sy5sZW5ndGg7dWUrKylLLndvcmRzW3VlXT0wfXZhciBoZT1fLmNsb25lKCkuX2lzaGxuc3VibXVsKHAsMSxuZSk7MD09PWhlLm5lZ2F0aXZlJiYoXz1oZSxLJiYoSy53b3Jkc1tuZV09MSkpO2Zvcih2YXIgeGU9bmUtMTt4ZT49MDt4ZS0tKXt2YXIgT2U9Njcx'@;
put 'MDg4NjQqKDB8Xy53b3Jkc1twLmxlbmd0aCt4ZV0pKygwfF8ud29yZHNbcC5sZW5ndGgreGUtMV0pO2ZvcihPZT1NYXRoLm1pbihPZS9DfDAsNjcxMDg4NjMpLF8uX2lzaGxuc3VibXVsKHAsT2UseGUpOzAhPT1fLm5lZ2F0aXZlOylPZS0tLF8ubmVnYXRpdmU9MCxfLl9pc2hsbnN1Ym11bChw'@;
put 'LDEseGUpLF8uaXNaZXJvKCl8fChfLm5lZ2F0aXZlXj0xKTtLJiYoSy53b3Jkc1t4ZV09T2UpfXJldHVybiBLJiZLLnN0cmlwKCksXy5zdHJpcCgpLCJkaXYiIT09UyYmMCE9PXgmJl8uaXVzaHJuKHgpLHtkaXY6S3x8bnVsbCxtb2Q6X319LGsucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihn'@;
put 'LFMseCl7cmV0dXJuIEkoIWcuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgaygwKSxtb2Q6bmV3IGsoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChnLFMpLCJtb2QiIT09UyYmKF89Qy5kaXYubmVnKCkpLCJkaXYiIT09'@;
put 'UyYmKHA9Qy5tb2QubmVnKCkseCYmMCE9PXAubmVnYXRpdmUmJnAuaWFkZChnKSkse2RpdjpfLG1vZDpwfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlPyhDPXRoaXMuZGl2bW9kKGcubmVnKCksUyksIm1vZCIhPT1TJiYoXz1DLmRpdi5uZWcoKSkse2RpdjpfLG1vZDpDLm1v'@;
put 'ZH0pOnRoaXMubmVnYXRpdmUmZy5uZWdhdGl2ZT8oQz10aGlzLm5lZygpLmRpdm1vZChnLm5lZygpLFMpLCJkaXYiIT09UyYmKHA9Qy5tb2QubmVnKCkseCYmMCE9PXAubmVnYXRpdmUmJnAuaXN1YihnKSkse2RpdjpDLmRpdixtb2Q6cH0pOmcubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNt'@;
put 'cChnKTwwP3tkaXY6bmV3IGsoMCksbW9kOnRoaXN9OjE9PT1nLmxlbmd0aD8iZGl2Ij09PVM/e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Uz97ZGl2Om51bGwsbW9kOm5ldyBrKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKGcud29y'@;
put 'ZHNbMF0pLG1vZDpuZXcgayh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KGcsUyk7dmFyIF8scCxDfSxrLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsImRpdiIsITEpLmRpdn0say5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCExKS5tb2R9LGsucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITApLm1vZH0say5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oZyl7dmFyIFM9dGhpcy5kaXZtb2QoZyk7aWYoUy5tb2QuaXNa'@;
put 'ZXJvKCkpcmV0dXJuIFMuZGl2O3ZhciB4PTAhPT1TLmRpdi5uZWdhdGl2ZT9TLm1vZC5pc3ViKGcpOlMubW9kLF89Zy51c2hybigxKSxwPWcuYW5kbG4oMSksQz14LmNtcChfKTtyZXR1cm4gQzwwfHwxPT09cCYmMD09PUM/Uy5kaXY6MCE9PVMuZGl2Lm5lZ2F0aXZlP1MuZGl2LmlzdWJuKDEp'@;
put 'OlMuZGl2LmlhZGRuKDEpfSxrLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgUz02NzEwODg2NCVnLHg9MCxfPXRoaXMubGVuZ3RoLTE7Xz49MDtfLS0peD0oUyp4KygwfHRoaXMud29yZHNbX10pKSVnO3JldHVybiB4fSxrLnByb3RvdHlwZS5pZGl2'@;
put 'bj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIFM9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBfPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KlM7dGhpcy53b3Jkc1t4XT1fL2d8MCxTPV8lZ31yZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5kaXZu'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oZyl9LGsucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIFM9dGhpcyx4PWcuY2xvbmUoKTtTPTAhPT1TLm5lZ2F0aXZlP1MudW1vZChnKTpTLmNsb25lKCk7'@;
put 'Zm9yKHZhciBfPW5ldyBrKDEpLHA9bmV3IGsoMCksQz1uZXcgaygwKSxLPW5ldyBrKDEpLG5lPTA7Uy5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspUy5pdXNocm4oMSkseC5pdXNocm4oMSksKytuZTtmb3IodmFyIHVlPXguY2xvbmUoKSxoZT1TLmNsb25lKCk7IVMuaXNaZXJvKCk7KXtmb3IodmFy'@;
put 'IHhlPTAsT2U9MTshKFMud29yZHNbMF0mT2UpJiZ4ZTwyNjsrK3hlLE9lPDw9MSk7aWYoeGU+MClmb3IoUy5pdXNocm4oeGUpO3hlLS0gPjA7KShfLmlzT2RkKCl8fHAuaXNPZGQoKSkmJihfLmlhZGQodWUpLHAuaXN1YihoZSkpLF8uaXVzaHJuKDEpLHAuaXVzaHJuKDEpO2Zvcih2YXIgSGU9'@;
put 'MCxFZT0xOyEoeC53b3Jkc1swXSZFZSkmJkhlPDI2OysrSGUsRWU8PD0xKTtpZihIZT4wKWZvcih4Lml1c2hybihIZSk7SGUtLSA+MDspKEMuaXNPZGQoKXx8Sy5pc09kZCgpKSYmKEMuaWFkZCh1ZSksSy5pc3ViKGhlKSksQy5pdXNocm4oMSksSy5pdXNocm4oMSk7Uy5jbXAoeCk+PTA/KFMu'@;
put 'aXN1Yih4KSxfLmlzdWIoQykscC5pc3ViKEspKTooeC5pc3ViKFMpLEMuaXN1YihfKSxLLmlzdWIocCkpfXJldHVybnthOkMsYjpLLGdjZDp4Lml1c2hsbihuZSl9fSxrLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSksSSghZy5pc1plcm8oKSk7dmFyIFM9'@;
put 'dGhpcyx4PWcuY2xvbmUoKTtTPTAhPT1TLm5lZ2F0aXZlP1MudW1vZChnKTpTLmNsb25lKCk7Zm9yKHZhciBfLHA9bmV3IGsoMSksQz1uZXcgaygwKSxLPXguY2xvbmUoKTtTLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIG5lPTAsdWU9MTshKFMud29yZHNbMF0mdWUpJiZuZTwy'@;
put 'NjsrK25lLHVlPDw9MSk7aWYobmU+MClmb3IoUy5pdXNocm4obmUpO25lLS0gPjA7KXAuaXNPZGQoKSYmcC5pYWRkKEspLHAuaXVzaHJuKDEpO2Zvcih2YXIgaGU9MCx4ZT0xOyEoeC53b3Jkc1swXSZ4ZSkmJmhlPDI2OysraGUseGU8PD0xKTtpZihoZT4wKWZvcih4Lml1c2hybihoZSk7aGUt'@;
put 'LSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSyksQy5pdXNocm4oMSk7Uy5jbXAoeCk+PTA/KFMuaXN1Yih4KSxwLmlzdWIoQykpOih4LmlzdWIoUyksQy5pc3ViKHApKX1yZXR1cm4oXz0wPT09Uy5jbXBuKDEpP3A6QykuY21wbigwKTwwJiZfLmlhZGQoZyksX30say5wcm90b3R5cGUuZ2NkPWZ1'@;
put 'bmN0aW9uKGcpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIGcuYWJzKCk7aWYoZy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgUz10aGlzLmNsb25lKCkseD1nLmNsb25lKCk7Uy5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIF89MDtTLmlzRXZlbigpJiZ4LmlzRXZlbigp'@;
put 'O18rKylTLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgcD1TLmNtcCh4KTtpZihwPDApe3ZhciBDPVM7Uz14LHg9Q31lbHNlIGlmKDA9PT1wfHwwPT09eC5jbXBuKDEpKWJy'@;
put 'ZWFrO1MuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oXyl9LGsucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZWdjZChnKS5hLnVtb2QoZyl9LGsucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0say5wcm90b3R5cGUuaXNP'@;
put 'ZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSxrLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZnfSxrLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyk7dmFyIFM9ZyUyNix4PShnLVMp'@;
put 'LzI2LF89MTw8UztpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Xyx0aGlzO2Zvcih2YXIgcD1fLEM9eDswIT09cCYmQzx0aGlzLmxlbmd0aDtDKyspe3ZhciBLPTB8dGhpcy53b3Jkc1tDXTtwPShLKz1wKT4+PjI2LHRoaXMud29yZHNb'@;
put 'Q109SyY9NjcxMDg4NjN9cmV0dXJuIDAhPT1wJiYodGhpcy53b3Jkc1tDXT1wLHRoaXMubGVuZ3RoKyspLHRoaXN9LGsucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxrLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9u'@;
put 'KGcpe3ZhciBTLHg9ZzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYheClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmeClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlTPTE7ZWxzZXt4JiYoZz0tZyksSShnPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWci'@;
put 'KTt2YXIgXz0wfHRoaXMud29yZHNbMF07Uz1fPT09Zz8wOl88Zz8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1TOlN9LGsucHJvdG90eXBlLmNtcD1mdW5jdGlvbihnKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVn'@;
put 'YXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBTPXRoaXMudWNtcChnKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtUzpTfSxrLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKGcpe2lmKHRoaXMubGVuZ3RoPmcubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPGcubGVu'@;
put 'Z3RoKXJldHVybi0xO2Zvcih2YXIgUz0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIF89MHx0aGlzLndvcmRzW3hdLHA9MHxnLndvcmRzW3hdO2lmKF8hPT1wKXtfPHA/Uz0tMTpfPnAmJihTPTEpO2JyZWFrfX1yZXR1cm4gU30say5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiAxPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5ndD1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wKGcpfSxrLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk+PTB9LGsucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhp'@;
put 'cy5jbXAoZyk+PTB9LGsucHJvdG90eXBlLmx0bj1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcChnKX0say5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcp'@;
put 'PD0wfSxrLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPD0wfSxrLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmVxPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXAoZyl9LGsucmVk'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgSChnKX0say5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksSSgwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3Np'@;
put 'dGl2ZXMiKSxnLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQoZyl9LGsucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9t'@;
put 'KHRoaXMpfSxrLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucmVkPWcsdGhpc30say5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5f'@;
put 'Zm9yY2VSZWQoZyl9LGsucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRo'@;
put 'aXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxnKX0say5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'c3ViKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24oZyl7cmV0dXJuIEko'@;
put 'dGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxnKX0say5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'X3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5tdWwodGhpcyxnKX0say5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQuaW11'@;
put 'bCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0say5wcm90b3R5cGUucmVkSVNxcj1mdW5j'@;
put 'dGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LGsucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3Fy'@;
put 'dCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxrLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0say5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5u'@;
put 'ZWcodGhpcyl9LGsucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCYmIWcucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLGcpfTt2YXIgZGU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5'@;
put 'MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBsZShnLFMpe3RoaXMubmFtZT1nLHRoaXMucD1uZXcgayhTLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgaygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rp'@;
put 'b24gY2UoKXtsZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEcoKXtsZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHkoKXtsZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIEwoKXtsZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2Zm'@;
put 'ZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIEgoZyl7aWYoInN0cmluZyI9PXR5cGVvZiBnKXt2YXIgUz1rLl9wcmltZShnKTt0aGlzLm09Uy5wLHRoaXMucHJpbWU9U31lbHNlIEkoZy5ndG4oMSksIm1v'@;
put 'ZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1nLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBqKGcpe0guY2FsbCh0aGlzLGcpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0'@;
put 'aGlzLnI9bmV3IGsoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlz'@;
put 'Lm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9bGUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgayhudWxsKTtyZXR1cm4gZy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLGd9LGxlLnByb3RvdHlwZS5pcmVk'@;
put 'dWNlPWZ1bmN0aW9uKGcpe3ZhciBTLHg9Zztkb3t0aGlzLnNwbGl0KHgsdGhpcy50bXApLFM9KHg9KHg9dGhpcy5pbXVsSyh4KSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKFM+dGhpcy5uKTt2YXIgXz1TPHRoaXMubj8tMTp4LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PV8/'@;
put 'KHgud29yZHNbMF09MCx4Lmxlbmd0aD0xKTpfPjA/eC5pc3ViKHRoaXMucCk6dm9pZCAwIT09eC5zdHJpcD94LnN0cmlwKCk6eC5fc3RyaXAoKSx4fSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxTKXtnLml1c2hybih0aGlzLm4sMCxTKX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0'@;
put 'aW9uKGcpe3JldHVybiBnLmltdWwodGhpcy5rKX0sRShjZSxsZSksY2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsUyl7Zm9yKHZhciB4PTQxOTQzMDMsXz1NYXRoLm1pbihnLmxlbmd0aCw5KSxwPTA7cDxfO3ArKylTLndvcmRzW3BdPWcud29yZHNbcF07aWYoUy5sZW5ndGg9XyxnLmxl'@;
put 'bmd0aDw9OSlyZXR1cm4gZy53b3Jkc1swXT0wLHZvaWQoZy5sZW5ndGg9MSk7dmFyIEM9Zy53b3Jkc1s5XTtmb3IoUy53b3Jkc1tTLmxlbmd0aCsrXT1DJngscD0xMDtwPGcubGVuZ3RoO3ArKyl7dmFyIEs9MHxnLndvcmRzW3BdO2cud29yZHNbcC0xMF09KEsmeCk8PDR8Qz4+PjIyLEM9S31n'@;
put 'LndvcmRzW3AtMTBdPUM+Pj49MjIsZy5sZW5ndGgtPTA9PT1DJiZnLmxlbmd0aD4xMD8xMDo5fSxjZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zy53b3Jkc1tnLmxlbmd0aF09MCxnLndvcmRzW2cubGVuZ3RoKzFdPTAsZy5sZW5ndGgrPTI7Zm9yKHZhciBTPTAseD0wO3g8Zy5sZW5n'@;
put 'dGg7eCsrKXt2YXIgXz0wfGcud29yZHNbeF07Zy53b3Jkc1t4XT02NzEwODg2MyYoUys9OTc3Kl8pLFM9NjQqXysoUy82NzEwODg2NHwwKX1yZXR1cm4gMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJihnLmxlbmd0aC0tLDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiZnLmxlbmd0aC0tKSxnfSxF'@;
put 'KEcsbGUpLEUoeSxsZSksRShMLGxlKSxMLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBfPTE5KigwfGcud29yZHNbeF0pK1MscD02NzEwODg2MyZfO18+Pj49MjYsZy53b3Jkc1t4XT1wLFM9X31yZXR1cm4gMCE9PVMmJihn'@;
put 'LndvcmRzW2cubGVuZ3RoKytdPVMpLGd9LGsuX3ByaW1lPWZ1bmN0aW9uKGcpe2lmKGRlW2ddKXJldHVybiBkZVtnXTt2YXIgUztpZigiazI1NiI9PT1nKVM9bmV3IGNlO2Vsc2UgaWYoInAyMjQiPT09ZylTPW5ldyBHO2Vsc2UgaWYoInAxOTIiPT09ZylTPW5ldyB5O2Vsc2V7aWYoInAyNTUx'@;
put 'OSIhPT1nKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK2cpO1M9bmV3IEx9cmV0dXJuIGRlW2ddPVMsU30sSC5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24oZyl7SSgwPT09Zy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkLCJyZWQg'@;
put 'd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKGcsUyl7SSghKGcubmVnYXRpdmV8Uy5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShnLnJlZCYmZy5yZWQ9PT1TLnJlZCwicmVkIHdvcmtzIG9ubHkg'@;
put 'd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShnKS5fZm9yY2VSZWQodGhpcyk6Zy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIGcuaXNaZXJvKCk/Zy5jbG9uZSgpOnRoaXMubS5zdWIoZykuX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5hZGQoUyk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHgu'@;
put 'X2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVyaWZ5MihnLFMpO3ZhciB4PWcuaWFkZChTKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sSC5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVy'@;
put 'aWZ5MihnLFMpO3ZhciB4PWcuc3ViKFMpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5pc3ViKFMpO3JldHVybiB4LmNtcG4oMCk8MCYm'@;
put 'eC5pYWRkKHRoaXMubSkseH0sSC5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoZyksdGhpcy5pbW9kKGcudXNobG4oUykpfSxILnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxTKSx0aGlzLmltb2QoZy5p'@;
put 'bXVsKFMpKX0sSC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoZyxTKSx0aGlzLmltb2QoZy5tdWwoUykpfSxILnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltdWwoZyxnLmNsb25lKCkpfSxILnByb3RvdHlwZS5zcXI9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMubXVsKGcsZyl9LEgucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciBTPXRoaXMubS5hbmRsbigzKTtpZihJKFMlMj09MSksMz09PVMpe3ZhciB4PXRoaXMubS5hZGQobmV3IGsoMSkpLml1c2hy'@;
put 'bigyKTtyZXR1cm4gdGhpcy5wb3coZyx4KX1mb3IodmFyIF89dGhpcy5tLnN1Ym4oMSkscD0wOyFfLmlzWmVybygpJiYwPT09Xy5hbmRsbigxKTspcCsrLF8uaXVzaHJuKDEpO0koIV8uaXNaZXJvKCkpO3ZhciBDPW5ldyBrKDEpLnRvUmVkKHRoaXMpLEs9Qy5yZWROZWcoKSxuZT10aGlzLm0u'@;
put 'c3VibigxKS5pdXNocm4oMSksdWU9dGhpcy5tLmJpdExlbmd0aCgpO2Zvcih1ZT1uZXcgaygyKnVlKnVlKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3codWUsbmUpLmNtcChLKTspdWUucmVkSUFkZChLKTtmb3IodmFyIGhlPXRoaXMucG93KHVlLF8pLHhlPXRoaXMucG93KGcsXy5hZGRuKDEp'@;
put 'Lml1c2hybigxKSksT2U9dGhpcy5wb3coZyxfKSxIZT1wOzAhPT1PZS5jbXAoQyk7KXtmb3IodmFyIEVlPU9lLExlPTA7MCE9PUVlLmNtcChDKTtMZSsrKUVlPUVlLnJlZFNxcigpO0koTGU8SGUpO3ZhciBOZT10aGlzLnBvdyhoZSxuZXcgaygxKS5pdXNobG4oSGUtTGUtMSkpO3hlPXhlLnJl'@;
put 'ZE11bChOZSksaGU9TmUucmVkU3FyKCksT2U9T2UucmVkTXVsKGhlKSxIZT1MZX1yZXR1cm4geGV9LEgucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7dmFyIFM9Zy5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PVMubmVnYXRpdmU/KFMubmVnYXRpdmU9MCx0aGlzLmltb2QoUykucmVkTmVn'@;
put 'KCkpOnRoaXMuaW1vZChTKX0sSC5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcsUyl7aWYoUy5pc1plcm8oKSlyZXR1cm4gbmV3IGsoMSkudG9SZWQodGhpcyk7aWYoMD09PVMuY21wbigxKSlyZXR1cm4gZy5jbG9uZSgpO3ZhciB4PW5ldyBBcnJheSgxNik7eFswXT1uZXcgaygxKS50b1JlZCh0'@;
put 'aGlzKSx4WzFdPWc7Zm9yKHZhciBfPTI7Xzx4Lmxlbmd0aDtfKyspeFtfXT10aGlzLm11bCh4W18tMV0sZyk7dmFyIHA9eFswXSxDPTAsSz0wLG5lPVMuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSxfPVMubGVuZ3RoLTE7Xz49MDtfLS0pe2Zvcih2YXIgdWU9Uy53b3Jkc1tf'@;
put 'XSxoZT1uZS0xO2hlPj0wO2hlLS0pe3ZhciB4ZT11ZT4+aGUmMTtwIT09eFswXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PUM/KEM8PD0xLEN8PXhlLCg0PT0rK0t8fDA9PT1fJiYwPT09aGUpJiYocD10aGlzLm11bChwLHhbQ10pLEs9MCxDPTApKTpLPTB9bmU9MjZ9cmV0dXJuIHB9'@;
put 'LEgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXt2YXIgUz1nLnVtb2QodGhpcy5tKTtyZXR1cm4gUz09PWc/Uy5jbG9uZSgpOlN9LEgucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBTPWcuY2xvbmUoKTtyZXR1cm4gUy5yZWQ9bnVsbCxTfSxrLm1vbnQ9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIG5ldyBqKGcpfSxFKGosSCksai5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy51c2hsbih0aGlzLnNoaWZ0KSl9LGoucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGcpe3ZhciBTPXRoaXMuaW1vZChnLm11bCh0'@;
put 'aGlzLnJpbnYpKTtyZXR1cm4gUy5yZWQ9bnVsbCxTfSxqLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcsUyl7aWYoZy5pc1plcm8oKXx8Uy5pc1plcm8oKSlyZXR1cm4gZy53b3Jkc1swXT0wLGcubGVuZ3RoPTEsZzt2YXIgeD1nLmltdWwoUyksXz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0'@;
put 'aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPXguaXN1YihfKS5pdXNocm4odGhpcy5zaGlmdCksQz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP0M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihDPXAuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlz'@;
put 'KX0sai5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcsUyl7aWYoZy5pc1plcm8oKXx8Uy5pc1plcm8oKSlyZXR1cm4gbmV3IGsoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PWcubXVsKFMpLF89eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs'@;
put 'KHRoaXMubSkscD14LmlzdWIoXykuaXVzaHJuKHRoaXMuc2hpZnQpLEM9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD9DPXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYoQz1wLmlhZGQodGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGoucHJvdG90eXBlLmludm09ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuaW1vZChnLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odz1ELm5tZCh3KSx0aGlzKX0sOTI4MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpO2Z1bmN0aW9uIEkoaGUpe3JldHVybihJPSJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKHhlKXtyZXR1cm4gdHlwZW9mIHhlfTpmdW5jdGlvbih4ZSl7cmV0dXJuIHhlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZ4ZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmeGUh'@;
put 'PT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiB4ZX0pKGhlKX12YXIgRSxrLEI9RCgyMTM2KS5jb2RlcyxOPUIuRVJSX0FNQklHVU9VU19BUkdVTUVOVCxWPUIuRVJSX0lOVkFMSURfQVJHX1RZUEUsWj1CLkVSUl9JTlZBTElEX0FSR19WQUxVRSxXPUIuRVJSX0lOVkFMSURfUkVU'@;
put 'VVJOX1ZBTFVFLHo9Qi5FUlJfTUlTU0lOR19BUkdTLHE9RCg1OTYxKSxRPUQoOTUzOSkuaW5zcGVjdCx0ZT1EKDk1MzkpLnR5cGVzLGFlPXRlLmlzUHJvbWlzZSxzZT10ZS5pc1JlZ0V4cCxkZT1PYmplY3QuYXNzaWduP09iamVjdC5hc3NpZ246RCg4MDkxKS5hc3NpZ24sbGU9T2JqZWN0Lmlz'@;
put 'P09iamVjdC5pczpEKDYwOSk7ZnVuY3Rpb24gY2UoKXt2YXIgaGU9RCg5MTU4KTtFPWhlLmlzRGVlcEVxdWFsLGs9aGUuaXNEZWVwU3RyaWN0RXF1YWx9dmFyIEc9ITEseT13LmV4cG9ydHM9ZyxMPXt9O2Z1bmN0aW9uIEgoaGUpe3Rocm93IGhlLm1lc3NhZ2UgaW5zdGFuY2VvZiBFcnJvcj9o'@;
put 'ZS5tZXNzYWdlOm5ldyBxKGhlKX1mdW5jdGlvbiBqKGhlLHhlLE9lLEhlKXtpZighT2Upe3ZhciBFZT0hMTtpZigwPT09eGUpRWU9ITAsSGU9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKEhlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgSGU7dmFy'@;
put 'IExlPW5ldyBxKHthY3R1YWw6T2UsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpIZSxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpoZX0pO3Rocm93IExlLmdlbmVyYXRlZE1lc3NhZ2U9RWUsTGV9fWZ1bmN0aW9uIGcoKXtmb3IodmFyIGhlPWFyZ3VtZW50cy5sZW5ndGgseGU9bmV3IEFycmF5KGhl'@;
put 'KSxPZT0wO09lPGhlO09lKyspeGVbT2VdPWFyZ3VtZW50c1tPZV07ai5hcHBseSh2b2lkIDAsW2cseGUubGVuZ3RoXS5jb25jYXQoeGUpKX15LmZhaWw9ZnVuY3Rpb24gaGUoeGUsT2UsSGUsRWUsTGUpe3ZhciBOZSxLZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1LZT9OZT0iRmFpbGVkIjox'@;
put 'PT09S2U/KEhlPXhlLHhlPXZvaWQgMCk6KCExPT09RyYmKEc9ITAsKFAuZW1pdFdhcm5pbmc/UC5lbWl0V2FybmluZzpVLndhcm4uYmluZChVKSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmlj'@;
put 'dEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdlLiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PUtlJiYoRWU9IiE9IikpLEhlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgSGU7dmFyIFVlPXthY3R1YWw6eGUsZXhwZWN0ZWQ6T2Usb3BlcmF0b3I6dm9p'@;
put 'ZCAwPT09RWU/ImZhaWwiOkVlLHN0YWNrU3RhcnRGbjpMZXx8aGV9O3ZvaWQgMCE9PUhlJiYoVWUubWVzc2FnZT1IZSk7dmFyIFhlPW5ldyBxKFVlKTt0aHJvdyBOZSYmKFhlLm1lc3NhZ2U9TmUsWGUuZ2VuZXJhdGVkTWVzc2FnZT0hMCksWGV9LHkuQXNzZXJ0aW9uRXJyb3I9cSx5Lm9rPWcs'@;
put 'eS5lcXVhbD1mdW5jdGlvbiBoZSh4ZSxPZSxIZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyB6KCJhY3R1YWwiLCJleHBlY3RlZCIpO3hlIT1PZSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOk9lLG1lc3NhZ2U6SGUsb3BlcmF0b3I6Ij09IixzdGFja1N0YXJ0Rm46aGV9KX0seS5u'@;
put 'b3RFcXVhbD1mdW5jdGlvbiBoZSh4ZSxPZSxIZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyB6KCJhY3R1YWwiLCJleHBlY3RlZCIpO3hlPT1PZSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOk9lLG1lc3NhZ2U6SGUsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46aGV9KX0seS5k'@;
put 'ZWVwRXF1YWw9ZnVuY3Rpb24gaGUoeGUsT2UsSGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgeigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1FJiZjZSgpLEUoeGUsT2UpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6T2UsbWVzc2FnZTpIZSxvcGVyYXRvcjoiZGVlcEVx'@;
put 'dWFsIixzdGFja1N0YXJ0Rm46aGV9KX0seS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24gaGUoeGUsT2UsSGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgeigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1FJiZjZSgpLEUoeGUsT2UpJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6'@;
put 'T2UsbWVzc2FnZTpIZSxvcGVyYXRvcjoibm90RGVlcEVxdWFsIixzdGFja1N0YXJ0Rm46aGV9KX0seS5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gaGUoeGUsT2UsSGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgeigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1FJiZj'@;
put 'ZSgpLGsoeGUsT2UpfHxIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6T2UsbWVzc2FnZTpIZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46aGV9KX0seS5ub3REZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24gaGUoeGUsT2UsSGUpe2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJv'@;
put 'dyBuZXcgeigiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT1FJiZjZSgpLGsoeGUsT2UpJiZIKHthY3R1YWw6eGUsZXhwZWN0ZWQ6T2UsbWVzc2FnZTpIZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46aGV9KX0seS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBo'@;
put 'ZSh4ZSxPZSxIZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyB6KCJhY3R1YWwiLCJleHBlY3RlZCIpO2xlKHhlLE9lKXx8SCh7YWN0dWFsOnhlLGV4cGVjdGVkOk9lLG1lc3NhZ2U6SGUsb3BlcmF0b3I6InN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46aGV9KX0seS5ub3RTdHJp'@;
put 'Y3RFcXVhbD1mdW5jdGlvbiBoZSh4ZSxPZSxIZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyB6KCJhY3R1YWwiLCJleHBlY3RlZCIpO2xlKHhlLE9lKSYmSCh7YWN0dWFsOnhlLGV4cGVjdGVkOk9lLG1lc3NhZ2U6SGUsb3BlcmF0b3I6Im5vdFN0cmljdEVxdWFsIixzdGFja1N0'@;
put 'YXJ0Rm46aGV9KX07dmFyIFM9ZnVuY3Rpb24gaGUoeGUsT2UsSGUpe3ZhciBFZT10aGlzOyhmdW5jdGlvbihMZSxOZSl7aWYoIShMZSBpbnN0YW5jZW9mIE5lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsaGUpLE9lLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oTGUpe0xlIGluIHhlJiYoRWVbTGVdPXZvaWQgMCE9PUhlJiYic3RyaW5nIj09dHlwZW9mIEhlW0xlXSYmc2UoeGVbTGVdKSYmeGVbTGVdLnRlc3QoSGVbTGVdKT9IZVtMZV06eGVbTGVdKX0pfTtmdW5jdGlvbiB4KGhlLHhlLE9lLEhlKXtpZigiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgeGUpe2lmKHNlKHhlKSlyZXR1cm4geGUudGVzdChoZSk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpdGhyb3cgbmV3IFYoImV4cGVjdGVkIixbIkZ1bmN0aW9uIiwiUmVnRXhwIl0seGUpO2lmKCJvYmplY3QiIT09SShoZSl8fG51bGw9PT1oZSl7dmFyIEVlPW5ldyBxKHthY3R1YWw6'@;
put 'aGUsZXhwZWN0ZWQ6eGUsbWVzc2FnZTpPZSxvcGVyYXRvcjoiZGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46SGV9KTt0aHJvdyBFZS5vcGVyYXRvcj1IZS5uYW1lLEVlfXZhciBMZT1PYmplY3Qua2V5cyh4ZSk7aWYoeGUgaW5zdGFuY2VvZiBFcnJvcilMZS5wdXNoKCJuYW1lIiwibWVz'@;
put 'c2FnZSIpO2Vsc2UgaWYoMD09PUxlLmxlbmd0aCl0aHJvdyBuZXcgWigiZXJyb3IiLHhlLCJtYXkgbm90IGJlIGFuIGVtcHR5IG9iamVjdCIpO3JldHVybiB2b2lkIDA9PT1FJiZjZSgpLExlLmZvckVhY2goZnVuY3Rpb24oTmUpeyJzdHJpbmciPT10eXBlb2YgaGVbTmVdJiZzZSh4ZVtOZV0p'@;
put 'JiZ4ZVtOZV0udGVzdChoZVtOZV0pfHxmdW5jdGlvbihLZSxVZSxYZSxhdCxGZSxDZSl7aWYoIShYZSBpbiBLZSl8fCFrKEtlW1hlXSxVZVtYZV0pKXtpZighYXQpe3ZhciBEZT1uZXcgUyhLZSxGZSksUmU9bmV3IFMoVWUsRmUsS2UpLGV0PW5ldyBxKHthY3R1YWw6RGUsZXhwZWN0ZWQ6UmUs'@;
put 'b3BlcmF0b3I6ImRlZXBTdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOkNlfSk7dGhyb3cgZXQuYWN0dWFsPUtlLGV0LmV4cGVjdGVkPVVlLGV0Lm9wZXJhdG9yPUNlLm5hbWUsZXR9SCh7YWN0dWFsOktlLGV4cGVjdGVkOlVlLG1lc3NhZ2U6YXQsb3BlcmF0b3I6Q2UubmFtZSxzdGFja1N0YXJ0'@;
put 'Rm46Q2V9KX19KGhlLHhlLE5lLE9lLExlLEhlKX0pLCEwfXJldHVybiB2b2lkIDAhPT14ZS5wcm90b3R5cGUmJmhlIGluc3RhbmNlb2YgeGV8fCFFcnJvci5pc1Byb3RvdHlwZU9mKHhlKSYmITA9PT14ZS5jYWxsKHt9LGhlKX1mdW5jdGlvbiBfKGhlKXtpZigiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'aGUpdGhyb3cgbmV3IFYoImZuIiwiRnVuY3Rpb24iLGhlKTt0cnl7aGUoKX1jYXRjaCh4ZSl7cmV0dXJuIHhlfXJldHVybiBMfWZ1bmN0aW9uIHAoaGUpe3JldHVybiBhZShoZSl8fG51bGwhPT1oZSYmIm9iamVjdCI9PT1JKGhlKSYmImZ1bmN0aW9uIj09dHlwZW9mIGhlLnRoZW4mJiJmdW5j'@;
put 'dGlvbiI9PXR5cGVvZiBoZS5jYXRjaH1mdW5jdGlvbiBDKGhlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciB4ZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgaGUpe2lmKCFwKHhlPWhlKCkpKXRocm93IG5ldyBXKCJpbnN0YW5jZSBvZiBQcm9taXNlIiwicHJv'@;
put 'bWlzZUZuIix4ZSl9ZWxzZXtpZighcChoZSkpdGhyb3cgbmV3IFYoInByb21pc2VGbiIsWyJGdW5jdGlvbiIsIlByb21pc2UiXSxoZSk7eGU9aGV9cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4geGV9KS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuIEx9KS5j'@;
put 'YXRjaChmdW5jdGlvbihPZSl7cmV0dXJuIE9lfSl9KX1mdW5jdGlvbiBLKGhlLHhlLE9lLEhlKXtpZigic3RyaW5nIj09dHlwZW9mIE9lKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVigiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLE9l'@;
put 'KTtpZigib2JqZWN0Ij09PUkoeGUpJiZudWxsIT09eGUpe2lmKHhlLm1lc3NhZ2U9PT1PZSl0aHJvdyBuZXcgTigiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdCh4ZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZih4'@;
put 'ZT09PU9lKXRocm93IG5ldyBOKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdCh4ZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO0hlPU9lLE9lPXZvaWQgMH1lbHNlIGlmKG51bGwhPU9lJiYib2JqZWN0IiE9PUkoT2UpJiYiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'T2UpdGhyb3cgbmV3IFYoImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxPZSk7aWYoeGU9PT1MKXt2YXIgRWU9IiI7T2UmJk9lLm5hbWUmJihFZSs9IiAoIi5jb25jYXQoT2UubmFtZSwiKSIpKSxFZSs9SGU/IjogIi5jb25jYXQoSGUpOiIuIixIKHthY3R1'@;
put 'YWw6dm9pZCAwLGV4cGVjdGVkOk9lLG9wZXJhdG9yOmhlLm5hbWUsbWVzc2FnZToiTWlzc2luZyBleHBlY3RlZCAiLmNvbmNhdCgicmVqZWN0cyI9PT1oZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQoRWUpLHN0YWNrU3RhcnRGbjpoZX0pfWlmKE9lJiYheCh4ZSxPZSxI'@;
put 'ZSxoZSkpdGhyb3cgeGV9ZnVuY3Rpb24gbmUoaGUseGUsT2UsSGUpe2lmKHhlIT09TCl7aWYoInN0cmluZyI9PXR5cGVvZiBPZSYmKEhlPU9lLE9lPXZvaWQgMCksIU9lfHx4KHhlLE9lKSl7dmFyIEVlPUhlPyI6ICIuY29uY2F0KEhlKToiLiI7SCh7YWN0dWFsOnhlLGV4cGVjdGVkOk9lLG9w'@;
put 'ZXJhdG9yOmhlLm5hbWUsbWVzc2FnZToiR290IHVud2FudGVkICIuY29uY2F0KCJkb2VzTm90UmVqZWN0Ij09PWhlLm5hbWU/InJlamVjdGlvbiI6ImV4Y2VwdGlvbiIpLmNvbmNhdChFZSwiXG4iKSsnQWN0dWFsIG1lc3NhZ2U6ICInLmNvbmNhdCh4ZSYmeGUubWVzc2FnZSwnIicpLHN0YWNr'@;
put 'U3RhcnRGbjpoZX0pfXRocm93IHhlfX1mdW5jdGlvbiB1ZSgpe2Zvcih2YXIgaGU9YXJndW1lbnRzLmxlbmd0aCx4ZT1uZXcgQXJyYXkoaGUpLE9lPTA7T2U8aGU7T2UrKyl4ZVtPZV09YXJndW1lbnRzW09lXTtqLmFwcGx5KHZvaWQgMCxbdWUseGUubGVuZ3RoXS5jb25jYXQoeGUpKX15LnRo'@;
put 'cm93cz1mdW5jdGlvbiBoZSh4ZSl7Zm9yKHZhciBPZT1hcmd1bWVudHMubGVuZ3RoLEhlPW5ldyBBcnJheShPZT4xP09lLTE6MCksRWU9MTtFZTxPZTtFZSsrKUhlW0VlLTFdPWFyZ3VtZW50c1tFZV07Sy5hcHBseSh2b2lkIDAsW2hlLF8oeGUpXS5jb25jYXQoSGUpKX0seS5yZWplY3RzPWZ1'@;
put 'bmN0aW9uIGhlKHhlKXtmb3IodmFyIE9lPWFyZ3VtZW50cy5sZW5ndGgsSGU9bmV3IEFycmF5KE9lPjE/T2UtMTowKSxFZT0xO0VlPE9lO0VlKyspSGVbRWUtMV09YXJndW1lbnRzW0VlXTtyZXR1cm4gQyh4ZSkudGhlbihmdW5jdGlvbihMZSl7cmV0dXJuIEsuYXBwbHkodm9pZCAwLFtoZSxM'@;
put 'ZV0uY29uY2F0KEhlKSl9KX0seS5kb2VzTm90VGhyb3c9ZnVuY3Rpb24gaGUoeGUpe2Zvcih2YXIgT2U9YXJndW1lbnRzLmxlbmd0aCxIZT1uZXcgQXJyYXkoT2U+MT9PZS0xOjApLEVlPTE7RWU8T2U7RWUrKylIZVtFZS0xXT1hcmd1bWVudHNbRWVdO25lLmFwcGx5KHZvaWQgMCxbaGUsXyh4'@;
put 'ZSldLmNvbmNhdChIZSkpfSx5LmRvZXNOb3RSZWplY3Q9ZnVuY3Rpb24gaGUoeGUpe2Zvcih2YXIgT2U9YXJndW1lbnRzLmxlbmd0aCxIZT1uZXcgQXJyYXkoT2U+MT9PZS0xOjApLEVlPTE7RWU8T2U7RWUrKylIZVtFZS0xXT1hcmd1bWVudHNbRWVdO3JldHVybiBDKHhlKS50aGVuKGZ1bmN0'@;
put 'aW9uKExlKXtyZXR1cm4gbmUuYXBwbHkodm9pZCAwLFtoZSxMZV0uY29uY2F0KEhlKSl9KX0seS5pZkVycm9yPWZ1bmN0aW9uIGhlKHhlKXtpZihudWxsIT14ZSl7dmFyIE9lPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1JKHhlKSYmInN0cmluZyI9PXR5'@;
put 'cGVvZiB4ZS5tZXNzYWdlP09lKz0wPT09eGUubWVzc2FnZS5sZW5ndGgmJnhlLmNvbnN0cnVjdG9yP3hlLmNvbnN0cnVjdG9yLm5hbWU6eGUubWVzc2FnZTpPZSs9USh4ZSk7dmFyIEhlPW5ldyBxKHthY3R1YWw6eGUsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpP'@;
put 'ZSxzdGFja1N0YXJ0Rm46aGV9KSxFZT14ZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIEVlKXt2YXIgTGU9RWUuc3BsaXQoIlxuIik7TGUuc2hpZnQoKTtmb3IodmFyIE5lPUhlLnN0YWNrLnNwbGl0KCJcbiIpLEtlPTA7S2U8TGUubGVuZ3RoO0tlKyspe3ZhciBVZT1OZS5pbmRleE9mKExl'@;
put 'W0tlXSk7aWYoLTEhPT1VZSl7TmU9TmUuc2xpY2UoMCxVZSk7YnJlYWt9fUhlLnN0YWNrPSIiLmNvbmNhdChOZS5qb2luKCJcbiIpLCJcbiIpLmNvbmNhdChMZS5qb2luKCJcbiIpKX10aHJvdyBIZX19LHkuc3RyaWN0PWRlKHVlLHkse2VxdWFsOnkuc3RyaWN0RXF1YWwsZGVlcEVxdWFsOnku'@;
put 'ZGVlcFN0cmljdEVxdWFsLG5vdEVxdWFsOnkubm90U3RyaWN0RXF1YWwsbm90RGVlcEVxdWFsOnkubm90RGVlcFN0cmljdEVxdWFsfSkseS5zdHJpY3Quc3RyaWN0PXkuc3RyaWN0fSw1OTYxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KTtmdW5jdGlvbiBVKGosZyxTKXty'@;
put 'ZXR1cm4gZyBpbiBqP09iamVjdC5kZWZpbmVQcm9wZXJ0eShqLGcse3ZhbHVlOlMsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpqW2ddPVMsan1mdW5jdGlvbiBFKGosZyl7cmV0dXJuIWd8fCJvYmplY3QiIT09VyhnKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGc/'@;
put 'ayhqKTpnfWZ1bmN0aW9uIGsoail7aWYodm9pZCAwPT09ail0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBqfWZ1bmN0aW9uIEIoail7dmFyIGc9ImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIE1hcD9uZXcgTWFwOnZvaWQgMDtyZXR1cm4gQj1mdW5jdGlvbihTKXtpZihudWxsPT09U3x8LTE9PT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKFMpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKSlyZXR1cm4gUztpZigiZnVuY3Rpb24iIT10eXBlb2YgUyl0aHJvdyBuZXcgVHlwZUVycm9y'@;
put 'KCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2lmKHZvaWQgMCE9PWcpe2lmKGcuaGFzKFMpKXJldHVybiBnLmdldChTKTtnLnNldChTLF8pfWZ1bmN0aW9uIF8oKXtyZXR1cm4gTihTLGFyZ3VtZW50cyxaKHRoaXMpLmNvbnN0cnVjdG9yKX1y'@;
put 'ZXR1cm4gXy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShTLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOl8sZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksVihfLFMpfSxCKGopfWZ1bmN0aW9uIE4oaixnLFMpe3JldHVybihOPWZ1bmN0aW9uKCl7aWYo'@;
put 'dHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEwO3RyeXtyZXR1cm4gRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVj'@;
put 'dChEYXRlLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKT9SZWZsZWN0LmNvbnN0cnVjdDpmdW5jdGlvbih4LF8scCl7dmFyIEM9W251bGxdO0MucHVzaC5hcHBseShDLF8pO3ZhciBLPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KHgsQykpO3JldHVybiBwJiZWKEsscC5w'@;
put 'cm90b3R5cGUpLEt9KS5hcHBseShudWxsLGFyZ3VtZW50cyl9ZnVuY3Rpb24gVihqLGcpe3JldHVybihWPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oUyx4KXtyZXR1cm4gUy5fX3Byb3RvX189eCxTfSkoaixnKX1mdW5jdGlvbiBaKGope3JldHVybihaPU9iamVjdC5zZXRQcm90'@;
put 'b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZyl7cmV0dXJuIGcuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZyl9KShqKX1mdW5jdGlvbiBXKGope3JldHVybihXPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9s'@;
put 'Lml0ZXJhdG9yP2Z1bmN0aW9uKGcpe3JldHVybiB0eXBlb2YgZ306ZnVuY3Rpb24oZyl7cmV0dXJuIGcmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmcuY29uc3RydWN0b3I9PT1TeW1ib2wmJmchPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBnfSkoail9dmFyIHo9RCg5'@;
put 'NTM5KS5pbnNwZWN0LHE9RCgyMTM2KS5jb2Rlcy5FUlJfSU5WQUxJRF9BUkdfVFlQRTtmdW5jdGlvbiBRKGosZyxTKXtyZXR1cm4odm9pZCAwPT09U3x8Uz5qLmxlbmd0aCkmJihTPWoubGVuZ3RoKSxqLnN1YnN0cmluZyhTLWcubGVuZ3RoLFMpPT09Z312YXIgdGU9IiIsYWU9IiIsc2U9IiIs'@;
put 'ZGU9IiIsbGU9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJl'@;
put 'IHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFsOiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0'@;
put 'dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5vdFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1'@;
put 'YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQgImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVu'@;
put 'dGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24gRyhqKXt2YXIgZz1PYmplY3Qua2V5cyhqKSxTPU9iamVjdC5jcmVhdGUoT2JqZWN0LmdldFByb3RvdHlwZU9mKGopKTtyZXR1cm4gZy5mb3JFYWNoKGZ1bmN0aW9uKHgpe1NbeF09alt4XX0pLE9iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShTLCJtZXNzYWdlIix7dmFsdWU6ai5tZXNzYWdlfSksU31mdW5jdGlvbiB5KGope3JldHVybiB6KGose2NvbXBhY3Q6ITEsY3VzdG9tSW5zcGVjdDohMSxkZXB0aDoxZTMsbWF4QXJyYXlMZW5ndGg6MS8wLHNob3dIaWRkZW46ITEsYnJlYWtMZW5ndGg6MS8wLHNob3dQcm94eToh'@;
put 'MSxzb3J0ZWQ6ITAsZ2V0dGVyczohMH0pfXZhciBIPWZ1bmN0aW9uKGope2Z1bmN0aW9uIGcocCl7dmFyIEM7aWYoZnVuY3Rpb24oVWUsWGUpe2lmKCEoVWUgaW5zdGFuY2VvZiBYZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRo'@;
put 'aXMsZyksIm9iamVjdCIhPT1XKHApfHxudWxsPT09cCl0aHJvdyBuZXcgcSgib3B0aW9ucyIsIk9iamVjdCIscCk7dmFyIEs9cC5tZXNzYWdlLG5lPXAub3BlcmF0b3IsdWU9cC5zdGFja1N0YXJ0Rm4saGU9cC5hY3R1YWwseGU9cC5leHBlY3RlZCxPZT1FcnJvci5zdGFja1RyYWNlTGltaXQ7'@;
put 'aWYoRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTAsbnVsbCE9SylDPUUodGhpcyxaKGcpLmNhbGwodGhpcyxTdHJpbmcoSykpKTtlbHNlIGlmKFAuc3RkZXJyJiZQLnN0ZGVyci5pc1RUWSYmKFAuc3RkZXJyJiZQLnN0ZGVyci5nZXRDb2xvckRlcHRoJiYxIT09UC5zdGRlcnIuZ2V0Q29sb3JEZXB0'@;
put 'aCgpPyh0ZT0iXHgxYlszNG0iLGFlPSJceDFiWzMybSIsZGU9Ilx4MWJbMzltIixzZT0iXHgxYlszMW0iKToodGU9IiIsYWU9IiIsZGU9IiIsc2U9IiIpKSwib2JqZWN0Ij09PVcoaGUpJiZudWxsIT09aGUmJiJvYmplY3QiPT09Vyh4ZSkmJm51bGwhPT14ZSYmInN0YWNrImluIGhlJiZoZSBp'@;
put 'bnN0YW5jZW9mIEVycm9yJiYic3RhY2siaW4geGUmJnhlIGluc3RhbmNlb2YgRXJyb3ImJihoZT1HKGhlKSx4ZT1HKHhlKSksImRlZXBTdHJpY3RFcXVhbCI9PT1uZXx8InN0cmljdEVxdWFsIj09PW5lKUM9RSh0aGlzLFooZykuY2FsbCh0aGlzLGZ1bmN0aW9uIEwoaixnLFMpe3ZhciB4PSIi'@;
put 'LF89IiIscD0wLEM9IiIsSz0hMSxuZT15KGopLHVlPW5lLnNwbGl0KCJcbiIpLGhlPXkoZykuc3BsaXQoIlxuIikseGU9MCxPZT0iIjtpZigic3RyaWN0RXF1YWwiPT09UyYmIm9iamVjdCI9PT1XKGopJiYib2JqZWN0Ij09PVcoZykmJm51bGwhPT1qJiZudWxsIT09ZyYmKFM9InN0cmljdEVx'@;
put 'dWFsT2JqZWN0IiksMT09PXVlLmxlbmd0aCYmMT09PWhlLmxlbmd0aCYmdWVbMF0hPT1oZVswXSl7dmFyIEhlPXVlWzBdLmxlbmd0aCtoZVswXS5sZW5ndGg7aWYoSGU8PTEwKXtpZighKCJvYmplY3QiPT09VyhqKSYmbnVsbCE9PWp8fCJvYmplY3QiPT09VyhnKSYmbnVsbCE9PWd8fDA9PT1q'@;
put 'JiYwPT09ZykpcmV0dXJuIiIuY29uY2F0KGxlW1NdLCJcblxuIikrIiIuY29uY2F0KHVlWzBdLCIgIT09ICIpLmNvbmNhdChoZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT1TJiZIZTwoUC5zdGRlcnImJlAuc3RkZXJyLmlzVFRZP1Auc3RkZXJyLmNvbHVtbnM6ODAp'@;
put 'KXtmb3IoO3VlWzBdW3hlXT09PWhlWzBdW3hlXTspeGUrKzt4ZT4yJiYoT2U9IlxuICAiLmNvbmNhdChmdW5jdGlvbihldCxudCl7aWYobnQ9TWF0aC5mbG9vcihudCksMD09ZXQubGVuZ3RofHwwPT1udClyZXR1cm4iIjt2YXIgR2U9ZXQubGVuZ3RoKm50O2ZvcihudD1NYXRoLmZsb29yKE1h'@;
put 'dGgubG9nKG50KS9NYXRoLmxvZygyKSk7bnQ7KWV0Kz1ldCxudC0tO3JldHVybiBldCtldC5zdWJzdHJpbmcoMCxHZS1ldC5sZW5ndGgpfSgiICIseGUpLCJeIikseGU9MCl9fWZvcih2YXIgRWU9dWVbdWUubGVuZ3RoLTFdLExlPWhlW2hlLmxlbmd0aC0xXTtFZT09PUxlJiYoeGUrKzwyP0M9'@;
put 'IlxuICAiLmNvbmNhdChFZSkuY29uY2F0KEMpOng9RWUsdWUucG9wKCksaGUucG9wKCksMCE9PXVlLmxlbmd0aCYmMCE9PWhlLmxlbmd0aCk7KUVlPXVlW3VlLmxlbmd0aC0xXSxMZT1oZVtoZS5sZW5ndGgtMV07dmFyIE5lPU1hdGgubWF4KHVlLmxlbmd0aCxoZS5sZW5ndGgpO2lmKDA9PT1O'@;
put 'ZSl7dmFyIEtlPW5lLnNwbGl0KCJcbiIpO2lmKEtlLmxlbmd0aD4zMClmb3IoS2VbMjZdPSIiLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGRlKTtLZS5sZW5ndGg+Mjc7KUtlLnBvcCgpO3JldHVybiIiLmNvbmNhdChsZS5ub3RJZGVudGljYWwsIlxuXG4iKS5jb25jYXQoS2Uuam9pbigiXG4i'@;
put 'KSwiXG4iKX14ZT4zJiYoQz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGRlKS5jb25jYXQoQyksSz0hMCksIiIhPT14JiYoQz0iXG4gICIuY29uY2F0KHgpLmNvbmNhdChDKSx4PSIiKTt2YXIgVWU9MCxYZT1sZVtTXSsiXG4iLmNvbmNhdChhZSwiKyBhY3R1YWwiKS5jb25jYXQoZGUs'@;
put 'IiAiKS5jb25jYXQoc2UsIi0gZXhwZWN0ZWQiKS5jb25jYXQoZGUpLGF0PSIgIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChkZSwiIExpbmVzIHNraXBwZWQiKTtmb3IoeGU9MDt4ZTxOZTt4ZSsrKXt2YXIgRmU9eGUtcDtpZih1ZS5sZW5ndGg8eGUrMSlGZT4xJiZ4ZT4yJiYoRmU+ND8oXys9'@;
put 'IlxuIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChkZSksSz0hMCk6RmU+MyYmKF8rPSJcbiAgIi5jb25jYXQoaGVbeGUtMl0pLFVlKyspLF8rPSJcbiAgIi5jb25jYXQoaGVbeGUtMV0pLFVlKyspLHA9eGUseCs9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoZGUsIiAiKS5jb25jYXQoaGVb'@;
put 'eGVdKSxVZSsrO2Vsc2UgaWYoaGUubGVuZ3RoPHhlKzEpRmU+MSYmeGU+MiYmKEZlPjQ/KF8rPSJcbiIuY29uY2F0KHRlLCIuLi4iKS5jb25jYXQoZGUpLEs9ITApOkZlPjMmJihfKz0iXG4gICIuY29uY2F0KHVlW3hlLTJdKSxVZSsrKSxfKz0iXG4gICIuY29uY2F0KHVlW3hlLTFdKSxVZSsr'@;
put 'KSxwPXhlLF8rPSJcbiIuY29uY2F0KGFlLCIrIikuY29uY2F0KGRlLCIgIikuY29uY2F0KHVlW3hlXSksVWUrKztlbHNle3ZhciBDZT1oZVt4ZV0sRGU9dWVbeGVdLFJlPURlIT09Q2UmJighUShEZSwiLCIpfHxEZS5zbGljZSgwLC0xKSE9PUNlKTtSZSYmUShDZSwiLCIpJiZDZS5zbGljZSgw'@;
put 'LC0xKT09PURlJiYoUmU9ITEsRGUrPSIsIiksUmU/KEZlPjEmJnhlPjImJihGZT40PyhfKz0iXG4iLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGRlKSxLPSEwKTpGZT4zJiYoXys9IlxuICAiLmNvbmNhdCh1ZVt4ZS0yXSksVWUrKyksXys9IlxuICAiLmNvbmNhdCh1ZVt4ZS0xXSksVWUrKyks'@;
put 'cD14ZSxfKz0iXG4iLmNvbmNhdChhZSwiKyIpLmNvbmNhdChkZSwiICIpLmNvbmNhdChEZSkseCs9IlxuIi5jb25jYXQoc2UsIi0iKS5jb25jYXQoZGUsIiAiKS5jb25jYXQoQ2UpLFVlKz0yKTooXys9eCx4PSIiLDEhPT1GZSYmMCE9PXhlfHwoXys9IlxuICAiLmNvbmNhdChEZSksVWUrKykp'@;
put 'fWlmKFVlPjIwJiZ4ZTxOZS0yKXJldHVybiIiLmNvbmNhdChYZSkuY29uY2F0KGF0LCJcbiIpLmNvbmNhdChfLCJcbiIpLmNvbmNhdCh0ZSwiLi4uIikuY29uY2F0KGRlKS5jb25jYXQoeCwiXG4iKSsiIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChkZSl9cmV0dXJuIiIuY29uY2F0KFhlKS5j'@;
put 'b25jYXQoSz9hdDoiIiwiXG4iKS5jb25jYXQoXykuY29uY2F0KHgpLmNvbmNhdChDKS5jb25jYXQoT2UpfShoZSx4ZSxuZSkpKTtlbHNlIGlmKCJub3REZWVwU3RyaWN0RXF1YWwiPT09bmV8fCJub3RTdHJpY3RFcXVhbCI9PT1uZSl7dmFyIEhlPWxlW25lXSxFZT15KGhlKS5zcGxpdCgiXG4i'@;
put 'KTtpZigibm90U3RyaWN0RXF1YWwiPT09bmUmJiJvYmplY3QiPT09VyhoZSkmJm51bGwhPT1oZSYmKEhlPWxlLm5vdFN0cmljdEVxdWFsT2JqZWN0KSxFZS5sZW5ndGg+MzApZm9yKEVlWzI2XT0iIi5jb25jYXQodGUsIi4uLiIpLmNvbmNhdChkZSk7RWUubGVuZ3RoPjI3OylFZS5wb3AoKTtD'@;
put 'PUUodGhpcywxPT09RWUubGVuZ3RoP1ooZykuY2FsbCh0aGlzLCIiLmNvbmNhdChIZSwiICIpLmNvbmNhdChFZVswXSkpOlooZykuY2FsbCh0aGlzLCIiLmNvbmNhdChIZSwiXG5cbiIpLmNvbmNhdChFZS5qb2luKCJcbiIpLCJcbiIpKSl9ZWxzZXt2YXIgTGU9eShoZSksTmU9IiIsS2U9bGVb'@;
put 'bmVdOyJub3REZWVwRXF1YWwiPT09bmV8fCJub3RFcXVhbCI9PT1uZT8oTGU9IiIuY29uY2F0KGxlW25lXSwiXG5cbiIpLmNvbmNhdChMZSkpLmxlbmd0aD4xMDI0JiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsMTAyMSksIi4uLiIpKTooTmU9IiIuY29uY2F0KHkoeGUpKSxMZS5sZW5ndGg+'@;
put 'NTEyJiYoTGU9IiIuY29uY2F0KExlLnNsaWNlKDAsNTA5KSwiLi4uIikpLE5lLmxlbmd0aD41MTImJihOZT0iIi5jb25jYXQoTmUuc2xpY2UoMCw1MDkpLCIuLi4iKSksImRlZXBFcXVhbCI9PT1uZXx8ImVxdWFsIj09PW5lP0xlPSIiLmNvbmNhdChLZSwiXG5cbiIpLmNvbmNhdChMZSwiXG5c'@;
put 'bnNob3VsZCBlcXVhbFxuXG4iKTpOZT0iICIuY29uY2F0KG5lLCIgIikuY29uY2F0KE5lKSksQz1FKHRoaXMsWihnKS5jYWxsKHRoaXMsIiIuY29uY2F0KExlKS5jb25jYXQoTmUpKSl9cmV0dXJuIEVycm9yLnN0YWNrVHJhY2VMaW1pdD1PZSxDLmdlbmVyYXRlZE1lc3NhZ2U9IUssT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGsoQyksIm5hbWUiLHt2YWx1ZToiQXNzZXJ0aW9uRXJyb3IgW0VSUl9BU1NFUlRJT05dIixlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLEMuY29kZT0iRVJSX0FTU0VSVElPTiIsQy5hY3R1YWw9aGUsQy5leHBlY3RlZD14ZSxDLm9w'@;
put 'ZXJhdG9yPW5lLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShrKEMpLHVlKSxDLm5hbWU9IkFzc2VydGlvbkVycm9yIixFKEMpfXZhciB4O3JldHVybiBmdW5jdGlvbihwLEMpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBDJiZudWxsIT09Qyl0aHJvdyBu'@;
put 'ZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO3AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQyYmQy5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTpwLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxDJiZW'@;
put 'KHAsQyl9KGcsaikseD1be2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiIuY29uY2F0KHRoaXMubmFtZSwiIFsiKS5jb25jYXQodGhpcy5jb2RlLCJdOiAiKS5jb25jYXQodGhpcy5tZXNzYWdlKX19LHtrZXk6ei5jdXN0b20sdmFsdWU6ZnVuY3Rpb24ocCxDKXtyZXR1'@;
put 'cm4geih0aGlzLGZ1bmN0aW9uKEspe2Zvcih2YXIgbmU9MTtuZTxhcmd1bWVudHMubGVuZ3RoO25lKyspe3ZhciB1ZT1udWxsIT1hcmd1bWVudHNbbmVdP2FyZ3VtZW50c1tuZV06e30saGU9T2JqZWN0LmtleXModWUpOyJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlT'@;
put 'eW1ib2xzJiYoaGU9aGUuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModWUpLmZpbHRlcihmdW5jdGlvbih4ZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodWUseGUpLmVudW1lcmFibGV9KSkpLGhlLmZvckVhY2goZnVuY3Rpb24oeGUpe1UoSyx4'@;
put 'ZSx1ZVt4ZV0pfSl9cmV0dXJuIEt9KHt9LEMse2N1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MH0pKX19XSx4JiZmdW5jdGlvbiBJKGosZyl7Zm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspe3ZhciB4PWdbU107eC5lbnVtZXJhYmxlPXguZW51bWVyYWJsZXx8ITEseC5jb25maWd1cmFibGU9ITAs'@;
put 'InZhbHVlImluIHgmJih4LndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaix4LmtleSx4KX19KGcucHJvdG90eXBlLHgpLGd9KEIoRXJyb3IpKTt3LmV4cG9ydHM9SH0sMjEzNjoodyxBLEQpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFAoVyl7cmV0dXJuKFA9ImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oeil7cmV0dXJuIHR5cGVvZiB6fTpmdW5jdGlvbih6KXtyZXR1cm4geiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmei5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmeiE9PVN5bWJvbC5w'@;
put 'cm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIHp9KShXKX1mdW5jdGlvbiBJKFcpe3JldHVybihJPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oeil7cmV0dXJuIHouX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2Yoeil9KShXKX1mdW5j'@;
put 'dGlvbiBFKFcseil7cmV0dXJuKEU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihxLFEpe3JldHVybiBxLl9fcHJvdG9fXz1RLHF9KShXLHopfXZhciBrLEIsTj17fTtmdW5jdGlvbiBWKFcseixxKXtxfHwocT1FcnJvcik7dmFyIFE9ZnVuY3Rpb24odGUpe2Z1bmN0aW9uIGFlKHNl'@;
put 'LGRlLGxlKXt2YXIgY2U7cmV0dXJuIGZ1bmN0aW9uKEcseSl7aWYoIShHIGluc3RhbmNlb2YgeSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYWUpLGNlPWZ1bmN0aW9uIFUoVyx6KXtyZXR1cm4henx8Im9iamVjdCIhPT1Q'@;
put 'KHopJiYiZnVuY3Rpb24iIT10eXBlb2Ygej9mdW5jdGlvbihxKXtpZih2b2lkIDA9PT1xKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIHF9KFcpOnp9KHRoaXMsSShhZSku'@;
put 'Y2FsbCh0aGlzLCJzdHJpbmciPT10eXBlb2Ygej96Onooc2UsZGUsbGUpKSksY2UuY29kZT1XLGNlfXJldHVybiBmdW5jdGlvbihzZSxkZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGRlJiZudWxsIT09ZGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhl'@;
put 'ciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtzZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkZSYmZGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6c2Usd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGRlJiZFKHNlLGRlKX0oYWUsdGUpLGFlfShxKTtOW1ddPVF9ZnVuY3Rp'@;
put 'b24gWihXLHope2lmKEFycmF5LmlzQXJyYXkoVykpe3ZhciBxPVcubGVuZ3RoO3JldHVybiBXPVcubWFwKGZ1bmN0aW9uKFEpe3JldHVybiBTdHJpbmcoUSl9KSxxPjI/Im9uZSBvZiAiLmNvbmNhdCh6LCIgIikuY29uY2F0KFcuc2xpY2UoMCxxLTEpLmpvaW4oIiwgIiksIiwgb3IgIikrV1tx'@;
put 'LTFdOjI9PT1xPyJvbmUgb2YgIi5jb25jYXQoeiwiICIpLmNvbmNhdChXWzBdLCIgb3IgIikuY29uY2F0KFdbMV0pOiJvZiAiLmNvbmNhdCh6LCIgIikuY29uY2F0KFdbMF0pfXJldHVybiJvZiAiLmNvbmNhdCh6LCIgIikuY29uY2F0KFN0cmluZyhXKSl9VigiRVJSX0FNQklHVU9VU19BUkdV'@;
put 'TUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksVigiRVJSX0lOVkFMSURfQVJHX1RZUEUiLGZ1bmN0aW9uKFcseixxKXt2YXIgUSxzZSxsZSxHO2lmKHZvaWQgMD09PWsmJihrPUQoOTI4MikpLGsoInN0cmluZyI9PXR5cGVvZiBXLCInbmFtZScg'@;
put 'bXVzdCBiZSBhIHN0cmluZyIpLCJzdHJpbmciPT10eXBlb2YgeiYmIm5vdCAiPT09ei5zdWJzdHIoMCw0KT8oUT0ibXVzdCBub3QgYmUiLHo9ei5yZXBsYWNlKC9ebm90IC8sIiIpKTpRPSJtdXN0IGJlIixsZT1XLCh2b2lkIDA9PT1HfHxHPmxlLmxlbmd0aCkmJihHPWxlLmxlbmd0aCksIiBh'@;
put 'cmd1bWVudCI9PT1sZS5zdWJzdHJpbmcoRy05LEcpKXNlPSJUaGUgIi5jb25jYXQoVywiICIpLmNvbmNhdChRLCIgIikuY29uY2F0KFooeiwidHlwZSIpKTtlbHNle3ZhciBkZT1mdW5jdGlvbihsZSxjZSxHKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIEcmJihHPTApLCEoRysxPmxlLmxlbmd0'@;
put 'aCkmJi0xIT09bGUuaW5kZXhPZigiLiIsRyl9KFcpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtzZT0nVGhlICInLmNvbmNhdChXLCciICcpLmNvbmNhdChkZSwiICIpLmNvbmNhdChRLCIgIikuY29uY2F0KFooeiwidHlwZSIpKX1yZXR1cm4gc2UrIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdChQ'@;
put 'KHEpKX0sVHlwZUVycm9yKSxWKCJFUlJfSU5WQUxJRF9BUkdfVkFMVUUiLGZ1bmN0aW9uKFcseil7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiJpcyBpbnZhbGlkIjt2b2lkIDA9PT1CJiYoQj1EKDk1MzkpKTt2YXIgUT1CLmlu'@;
put 'c3BlY3Qoeik7cmV0dXJuIFEubGVuZ3RoPjEyOCYmKFE9IiIuY29uY2F0KFEuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQoVywiJyAiKS5jb25jYXQocSwiLiBSZWNlaXZlZCAiKS5jb25jYXQoUSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxWKCJFUlJfSU5W'@;
put 'QUxJRF9SRVRVUk5fVkFMVUUiLGZ1bmN0aW9uKFcseixxKXt2YXIgUTtyZXR1cm4gUT1xJiZxLmNvbnN0cnVjdG9yJiZxLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KHEuY29uc3RydWN0b3IubmFtZSk6InR5cGUgIi5jb25jYXQoUChxKSksIkV4cGVjdGVkICIuY29u'@;
put 'Y2F0KFcsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KHosJyInKSsiIGZ1bmN0aW9uIGJ1dCBnb3QgIi5jb25jYXQoUSwiLiIpfSxUeXBlRXJyb3IpLFYoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBXPWFyZ3VtZW50cy5sZW5ndGgsej1uZXcgQXJy'@;
put 'YXkoVykscT0wO3E8VztxKyspeltxXT1hcmd1bWVudHNbcV07dm9pZCAwPT09ayYmKGs9RCg5MjgyKSksayh6Lmxlbmd0aD4wLCJBdCBsZWFzdCBvbmUgYXJnIG5lZWRzIHRvIGJlIHNwZWNpZmllZCIpO3ZhciBRPSJUaGUgIix0ZT16Lmxlbmd0aDtzd2l0Y2goej16Lm1hcChmdW5jdGlvbihh'@;
put 'ZSl7cmV0dXJuJyInLmNvbmNhdChhZSwnIicpfSksdGUpe2Nhc2UgMTpRKz0iIi5jb25jYXQoelswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOlErPSIiLmNvbmNhdCh6WzBdLCIgYW5kICIpLmNvbmNhdCh6WzFdLCIgYXJndW1lbnRzIik7YnJlYWs7ZGVmYXVsdDpRKz16LnNsaWNlKDAs'@;
put 'dGUtMSkuam9pbigiLCAiKSxRKz0iLCBhbmQgIi5jb25jYXQoelt0ZS0xXSwiIGFyZ3VtZW50cyIpfXJldHVybiIiLmNvbmNhdChRLCIgbXVzdCBiZSBzcGVjaWZpZWQiKX0sVHlwZUVycm9yKSx3LmV4cG9ydHMuY29kZXM9Tn0sOTE1ODoodyxBLEQpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9u'@;
put 'IFAoQ2UsRGUpe3JldHVybiBmdW5jdGlvbihSZSl7aWYoQXJyYXkuaXNBcnJheShSZSkpcmV0dXJuIFJlfShDZSl8fGZ1bmN0aW9uKFJlLGV0KXt2YXIgbnQ9W10sR2U9ITAsZHQ9ITEsVGU9dm9pZCAwO3RyeXtmb3IodmFyIEFlLEJlPVJlW1N5bWJvbC5pdGVyYXRvcl0oKTshKEdlPShBZT1C'@;
put 'ZS5uZXh0KCkpLmRvbmUpJiYobnQucHVzaChBZS52YWx1ZSksIWV0fHxudC5sZW5ndGghPT1ldCk7R2U9ITApO31jYXRjaChvdCl7ZHQ9ITAsVGU9b3R9ZmluYWxseXt0cnl7R2V8fG51bGw9PUJlLnJldHVybnx8QmUucmV0dXJuKCl9ZmluYWxseXtpZihkdCl0aHJvdyBUZX19cmV0dXJuIG50'@;
put 'fShDZSxEZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIFUoQ2Upe3JldHVybihVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBl'@;
put 'b2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKERlKXtyZXR1cm4gdHlwZW9mIERlfTpmdW5jdGlvbihEZSl7cmV0dXJuIERlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZEZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmRGUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBE'@;
put 'ZX0pKENlKX12YXIgST12b2lkIDAhPT0vYS9nLmZsYWdzLEU9ZnVuY3Rpb24oQ2Upe3ZhciBEZT1bXTtyZXR1cm4gQ2UuZm9yRWFjaChmdW5jdGlvbihSZSl7cmV0dXJuIERlLnB1c2goUmUpfSksRGV9LGs9ZnVuY3Rpb24oQ2Upe3ZhciBEZT1bXTtyZXR1cm4gQ2UuZm9yRWFjaChmdW5jdGlv'@;
put 'bihSZSxldCl7cmV0dXJuIERlLnB1c2goW2V0LFJlXSl9KSxEZX0sQj1PYmplY3QuaXM/T2JqZWN0LmlzOkQoNjA5KSxOPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxWPU51bWJlci5pc05hTj9O'@;
put 'dW1iZXIuaXNOYU46RCgzNjApO2Z1bmN0aW9uIFooQ2Upe3JldHVybiBDZS5jYWxsLmJpbmQoQ2UpfXZhciBXPVooT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksej1aKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLHE9WihPYmplY3QucHJvdG90eXBlLnRv'@;
put 'U3RyaW5nKSxRPUQoOTUzOSkudHlwZXMsdGU9US5pc0FueUFycmF5QnVmZmVyLGFlPVEuaXNBcnJheUJ1ZmZlclZpZXcsc2U9US5pc0RhdGUsZGU9US5pc01hcCxsZT1RLmlzUmVnRXhwLGNlPVEuaXNTZXQsRz1RLmlzTmF0aXZlRXJyb3IseT1RLmlzQm94ZWRQcmltaXRpdmUsTD1RLmlzTnVt'@;
put 'YmVyT2JqZWN0LEg9US5pc1N0cmluZ09iamVjdCxqPVEuaXNCb29sZWFuT2JqZWN0LGc9US5pc0JpZ0ludE9iamVjdCxTPVEuaXNTeW1ib2xPYmplY3QseD1RLmlzRmxvYXQzMkFycmF5LF89US5pc0Zsb2F0NjRBcnJheTtmdW5jdGlvbiBwKENlKXtpZigwPT09Q2UubGVuZ3RofHxDZS5sZW5n'@;
put 'dGg+MTApcmV0dXJuITA7Zm9yKHZhciBEZT0wO0RlPENlLmxlbmd0aDtEZSsrKXt2YXIgUmU9Q2UuY2hhckNvZGVBdChEZSk7aWYoUmU8NDh8fFJlPjU3KXJldHVybiEwfXJldHVybiAxMD09PUNlLmxlbmd0aCYmQ2U+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIEMoQ2Upe3JldHVybiBPYmpl'@;
put 'Y3Qua2V5cyhDZSkuZmlsdGVyKHApLmNvbmNhdChOKENlKS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5iaW5kKENlKSkpfWZ1bmN0aW9uIEsoQ2UsRGUpe2lmKENlPT09RGUpcmV0dXJuIDA7Zm9yKHZhciBSZT1DZS5sZW5ndGgsZXQ9RGUubGVuZ3RoLG50'@;
put 'PTAsR2U9TWF0aC5taW4oUmUsZXQpO250PEdlOysrbnQpaWYoQ2VbbnRdIT09RGVbbnRdKXtSZT1DZVtudF0sZXQ9RGVbbnRdO2JyZWFrfXJldHVybiBSZTxldD8tMTpldDxSZT8xOjB9dmFyIGhlPTAseGU9MSxPZT0yLEhlPTM7ZnVuY3Rpb24gRWUoQ2UsRGUsUmUsZXQpe2lmKENlPT09RGUp'@;
put 'cmV0dXJuIDAhPT1DZXx8IVJlfHxCKENlLERlKTtpZihSZSl7aWYoIm9iamVjdCIhPT1VKENlKSlyZXR1cm4ibnVtYmVyIj09dHlwZW9mIENlJiZWKENlKSYmVihEZSk7aWYoIm9iamVjdCIhPT1VKERlKXx8bnVsbD09PUNlfHxudWxsPT09RGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihDZSkh'@;
put 'PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoRGUpKXJldHVybiExfWVsc2V7aWYobnVsbD09PUNlfHwib2JqZWN0IiE9PVUoQ2UpKXJldHVybihudWxsPT09RGV8fCJvYmplY3QiIT09VShEZSkpJiZDZT09RGU7aWYobnVsbD09PURlfHwib2JqZWN0IiE9PVUoRGUpKXJldHVybiExfXZhciBudCxH'@;
put 'ZSxkdCxUZSxGdCxSdCxBZT1xKENlKTtpZihBZSE9PXEoRGUpKXJldHVybiExO2lmKEFycmF5LmlzQXJyYXkoQ2UpKXtpZihDZS5sZW5ndGghPT1EZS5sZW5ndGgpcmV0dXJuITE7dmFyIEJlPUMoQ2UpLG90PUMoRGUpO3JldHVybiBCZS5sZW5ndGg9PT1vdC5sZW5ndGgmJk5lKENlLERlLFJl'@;
put 'LGV0LHhlLEJlKX1pZigiW29iamVjdCBPYmplY3RdIj09PUFlJiYoIWRlKENlKSYmZGUoRGUpfHwhY2UoQ2UpJiZjZShEZSkpKXJldHVybiExO2lmKHNlKENlKSl7aWYoIXNlKERlKXx8RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKENlKSE9PURhdGUucHJvdG90eXBlLmdldFRpbWUuY2Fs'@;
put 'bChEZSkpcmV0dXJuITF9ZWxzZSBpZihsZShDZSkpe2lmKCFsZShEZSl8fChkdD1DZSxUZT1EZSwhKEk/ZHQuc291cmNlPT09VGUuc291cmNlJiZkdC5mbGFncz09PVRlLmZsYWdzOlJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkdCk9PT1SZWdFeHAucHJvdG90eXBlLnRvU3RyaW5n'@;
put 'LmNhbGwoVGUpKSkpcmV0dXJuITF9ZWxzZSBpZihHKENlKXx8Q2UgaW5zdGFuY2VvZiBFcnJvcil7aWYoQ2UubWVzc2FnZSE9PURlLm1lc3NhZ2V8fENlLm5hbWUhPT1EZS5uYW1lKXJldHVybiExfWVsc2V7aWYoYWUoQ2UpKXtpZihSZXx8IXgoQ2UpJiYhXyhDZSkpe2lmKChGdD1DZSkuYnl0'@;
put 'ZUxlbmd0aCE9PShSdD1EZSkuYnl0ZUxlbmd0aHx8MCE9PUsobmV3IFVpbnQ4QXJyYXkoRnQuYnVmZmVyLEZ0LmJ5dGVPZmZzZXQsRnQuYnl0ZUxlbmd0aCksbmV3IFVpbnQ4QXJyYXkoUnQuYnVmZmVyLFJ0LmJ5dGVPZmZzZXQsUnQuYnl0ZUxlbmd0aCkpKXJldHVybiExfWVsc2UgaWYoIWZ1'@;
put 'bmN0aW9uKEZ0LFJ0KXtpZihGdC5ieXRlTGVuZ3RoIT09UnQuYnl0ZUxlbmd0aClyZXR1cm4hMTtmb3IodmFyIFh0PTA7WHQ8RnQuYnl0ZUxlbmd0aDtYdCsrKWlmKEZ0W1h0XSE9PVJ0W1h0XSlyZXR1cm4hMTtyZXR1cm4hMH0oQ2UsRGUpKXJldHVybiExO3ZhciBsdD1DKENlKSxDdD1DKERl'@;
put 'KTtyZXR1cm4gbHQubGVuZ3RoPT09Q3QubGVuZ3RoJiZOZShDZSxEZSxSZSxldCxoZSxsdCl9aWYoY2UoQ2UpKXJldHVybiEoIWNlKERlKXx8Q2Uuc2l6ZSE9PURlLnNpemUpJiZOZShDZSxEZSxSZSxldCxPZSk7aWYoZGUoQ2UpKXJldHVybiEoIWRlKERlKXx8Q2Uuc2l6ZSE9PURlLnNpemUp'@;
put 'JiZOZShDZSxEZSxSZSxldCxIZSk7aWYodGUoQ2UpKXtpZigobnQ9Q2UpLmJ5dGVMZW5ndGghPT0oR2U9RGUpLmJ5dGVMZW5ndGh8fDAhPT1LKG5ldyBVaW50OEFycmF5KG50KSxuZXcgVWludDhBcnJheShHZSkpKXJldHVybiExfWVsc2UgaWYoeShDZSkmJiFmdW5jdGlvbihGdCxSdCl7cmV0'@;
put 'dXJuIEwoRnQpP0woUnQpJiZCKE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEZ0KSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSdCkpOkgoRnQpP0goUnQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChGdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2Fs'@;
put 'bChSdCk6aihGdCk/aihSdCkmJkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChGdCk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUnQpOmcoRnQpP2coUnQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChGdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2Yu'@;
put 'Y2FsbChSdCk6UyhSdCkmJlN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKEZ0KT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJ0KX0oQ2UsRGUpKXJldHVybiExfXJldHVybiBOZShDZSxEZSxSZSxldCxoZSl9ZnVuY3Rpb24gTGUoQ2UsRGUpe3JldHVybiBEZS5maWx0ZXIo'@;
put 'ZnVuY3Rpb24oUmUpe3JldHVybiB6KENlLFJlKX0pfWZ1bmN0aW9uIE5lKENlLERlLFJlLGV0LG50LEdlKXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7R2U9T2JqZWN0LmtleXMoQ2UpO3ZhciBkdD1PYmplY3Qua2V5cyhEZSk7aWYoR2UubGVuZ3RoIT09ZHQubGVuZ3RoKXJldHVybiExfWZv'@;
put 'cih2YXIgVGU9MDtUZTxHZS5sZW5ndGg7VGUrKylpZighVyhEZSxHZVtUZV0pKXJldHVybiExO2lmKFJlJiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIEFlPU4oQ2UpO2lmKDAhPT1BZS5sZW5ndGgpe3ZhciBCZT0wO2ZvcihUZT0wO1RlPEFlLmxlbmd0aDtUZSsrKXt2YXIgb3Q9QWVbVGVd'@;
put 'O2lmKHooQ2Usb3QpKXtpZigheihEZSxvdCkpcmV0dXJuITE7R2UucHVzaChvdCksQmUrK31lbHNlIGlmKHooRGUsb3QpKXJldHVybiExfXZhciBsdD1OKERlKTtpZihBZS5sZW5ndGghPT1sdC5sZW5ndGgmJkxlKERlLGx0KS5sZW5ndGghPT1CZSlyZXR1cm4hMX1lbHNle3ZhciBDdD1OKERl'@;
put 'KTtpZigwIT09Q3QubGVuZ3RoJiYwIT09TGUoRGUsQ3QpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PUdlLmxlbmd0aCYmKG50PT09aGV8fG50PT09eGUmJjA9PT1DZS5sZW5ndGh8fDA9PT1DZS5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT1ldClldD17dmFsMTpuZXcgTWFwLHZhbDI6bmV3'@;
put 'IE1hcCxwb3NpdGlvbjowfTtlbHNle3ZhciBGdD1ldC52YWwxLmdldChDZSk7aWYodm9pZCAwIT09RnQpe3ZhciBSdD1ldC52YWwyLmdldChEZSk7aWYodm9pZCAwIT09UnQpcmV0dXJuIEZ0PT09UnR9ZXQucG9zaXRpb24rK31ldC52YWwxLnNldChDZSxldC5wb3NpdGlvbiksZXQudmFsMi5z'@;
put 'ZXQoRGUsZXQucG9zaXRpb24pO3ZhciBYdD1mdW5jdGlvbihTbix6dCx2bixCbix0bixabil7dmFyIE9uPTA7aWYoWm49PT1PZSl7aWYoIWZ1bmN0aW9uKE10LFl0LF90LGp0KXtmb3IodmFyIHBuPW51bGwscnQ9RShNdCksRXQ9MDtFdDxydC5sZW5ndGg7RXQrKyl7dmFyIFF0PXJ0W0V0XTtp'@;
put 'Zigib2JqZWN0Ij09PVUoUXQpJiZudWxsIT09UXQpbnVsbD09PXBuJiYocG49bmV3IFNldCkscG4uYWRkKFF0KTtlbHNlIGlmKCFZdC5oYXMoUXQpKXtpZihfdHx8IVhlKE10LFl0LFF0KSlyZXR1cm4hMTtudWxsPT09cG4mJihwbj1uZXcgU2V0KSxwbi5hZGQoUXQpfX1pZihudWxsIT09cG4p'@;
put 'e2Zvcih2YXIgVHQ9RShZdCksbXQ9MDttdDxUdC5sZW5ndGg7bXQrKyl7dmFyIEd0PVR0W210XTtpZigib2JqZWN0Ij09PVUoR3QpJiZudWxsIT09R3Qpe2lmKCFLZShwbixHdCxfdCxqdCkpcmV0dXJuITF9ZWxzZSBpZighX3QmJiFNdC5oYXMoR3QpJiYhS2UocG4sR3QsX3QsanQpKXJldHVy'@;
put 'biExfXJldHVybiAwPT09cG4uc2l6ZX1yZXR1cm4hMH0oU24senQsdm4sdG4pKXJldHVybiExfWVsc2UgaWYoWm49PT1IZSl7aWYoIWZ1bmN0aW9uKE10LFl0LF90LGp0KXtmb3IodmFyIHBuPW51bGwscnQ9ayhNdCksRXQ9MDtFdDxydC5sZW5ndGg7RXQrKyl7dmFyIFF0PVAocnRbRXRdLDIp'@;
put 'LFR0PVF0WzBdLG10PVF0WzFdO2lmKCJvYmplY3QiPT09VShUdCkmJm51bGwhPT1UdCludWxsPT09cG4mJihwbj1uZXcgU2V0KSxwbi5hZGQoVHQpO2Vsc2V7dmFyIEd0PVl0LmdldChUdCk7aWYodm9pZCAwPT09R3QmJiFZdC5oYXMoVHQpfHwhRWUobXQsR3QsX3QsanQpKXtpZihfdHx8IWF0'@;
put 'KE10LFl0LFR0LG10LGp0KSlyZXR1cm4hMTtudWxsPT09cG4mJihwbj1uZXcgU2V0KSxwbi5hZGQoVHQpfX19aWYobnVsbCE9PXBuKXtmb3IodmFyIGtuPWsoWXQpLEJ0PTA7QnQ8a24ubGVuZ3RoO0J0Kyspe3ZhciBibj1QKGtuW0J0XSwyKSxDbj0oVHQ9Ym5bMF0sYm5bMV0pO2lmKCJvYmpl'@;
put 'Y3QiPT09VShUdCkmJm51bGwhPT1UdCl7aWYoIUZlKHBuLE10LFR0LENuLF90LGp0KSlyZXR1cm4hMX1lbHNlIGlmKCEoX3R8fE10LmhhcyhUdCkmJkVlKE10LmdldChUdCksQ24sITEsanQpfHxGZShwbixNdCxUdCxDbiwhMSxqdCkpKXJldHVybiExfXJldHVybiAwPT09cG4uc2l6ZX1yZXR1'@;
put 'cm4hMH0oU24senQsdm4sdG4pKXJldHVybiExfWVsc2UgaWYoWm49PT14ZSlmb3IoO09uPFNuLmxlbmd0aDtPbisrKXtpZighVyhTbixPbikpe2lmKFcoenQsT24pKXJldHVybiExO2Zvcih2YXIgcHQ9T2JqZWN0LmtleXMoU24pO09uPHB0Lmxlbmd0aDtPbisrKXt2YXIgZm49cHRbT25dO2lm'@;
put 'KCFXKHp0LGZuKXx8IUVlKFNuW2ZuXSx6dFtmbl0sdm4sdG4pKXJldHVybiExfXJldHVybiBwdC5sZW5ndGg9PT1PYmplY3Qua2V5cyh6dCkubGVuZ3RofWlmKCFXKHp0LE9uKXx8IUVlKFNuW09uXSx6dFtPbl0sdm4sdG4pKXJldHVybiExfWZvcihPbj0wO09uPEJuLmxlbmd0aDtPbisrKXt2'@;
put 'YXIgZG49Qm5bT25dO2lmKCFFZShTbltkbl0senRbZG5dLHZuLHRuKSlyZXR1cm4hMX1yZXR1cm4hMH0oQ2UsRGUsUmUsR2UsZXQsbnQpO3JldHVybiBldC52YWwxLmRlbGV0ZShDZSksZXQudmFsMi5kZWxldGUoRGUpLFh0fWZ1bmN0aW9uIEtlKENlLERlLFJlLGV0KXtmb3IodmFyIG50PUUo'@;
put 'Q2UpLEdlPTA7R2U8bnQubGVuZ3RoO0dlKyspe3ZhciBkdD1udFtHZV07aWYoRWUoRGUsZHQsUmUsZXQpKXJldHVybiBDZS5kZWxldGUoZHQpLCEwfXJldHVybiExfWZ1bmN0aW9uIFVlKENlKXtzd2l0Y2goVShDZSkpe2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4gbnVsbDtjYXNlIm9iamVjdCI6'@;
put 'cmV0dXJuO2Nhc2Uic3ltYm9sIjpyZXR1cm4hMTtjYXNlInN0cmluZyI6Q2U9K0NlO2Nhc2UibnVtYmVyIjppZihWKENlKSlyZXR1cm4hMX1yZXR1cm4hMH1mdW5jdGlvbiBYZShDZSxEZSxSZSl7dmFyIGV0PVVlKFJlKTtyZXR1cm4gZXQ/PyhEZS5oYXMoZXQpJiYhQ2UuaGFzKGV0KSl9ZnVu'@;
put 'Y3Rpb24gYXQoQ2UsRGUsUmUsZXQsbnQpe3ZhciBHZT1VZShSZSk7aWYobnVsbCE9R2UpcmV0dXJuIEdlO3ZhciBkdD1EZS5nZXQoR2UpO3JldHVybiEodm9pZCAwPT09ZHQmJiFEZS5oYXMoR2UpfHwhRWUoZXQsZHQsITEsbnQpKSYmIUNlLmhhcyhHZSkmJkVlKGV0LGR0LCExLG50KX1mdW5j'@;
put 'dGlvbiBGZShDZSxEZSxSZSxldCxudCxHZSl7Zm9yKHZhciBkdD1FKENlKSxUZT0wO1RlPGR0Lmxlbmd0aDtUZSsrKXt2YXIgQWU9ZHRbVGVdO2lmKEVlKFJlLEFlLG50LEdlKSYmRWUoZXQsRGUuZ2V0KEFlKSxudCxHZSkpcmV0dXJuIENlLmRlbGV0ZShBZSksITB9cmV0dXJuITF9dy5leHBv'@;
put 'cnRzPXtpc0RlZXBFcXVhbDpmdW5jdGlvbihDZSxEZSl7cmV0dXJuIEVlKENlLERlLCExKX0saXNEZWVwU3RyaWN0RXF1YWw6ZnVuY3Rpb24oQ2UsRGUpe3JldHVybiBFZShDZSxEZSwhMCl9fX0sODIyNDp3PT57InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbihBKXtyZXR1cm4gQX19'@;
put 'LDk2Njk6KHcsQSxEKT0+e3cuZXhwb3J0cz1EKDE2MDkpfSw1NDQ4Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KSxVPUQoNjAyNiksST1EKDQzNzIpLEU9RCg1MzI3KSxrPUQoNDA5NyksQj1EKDQxMDkpLE49RCg3OTg1KSxWPUQoNzg3NCksWj1EKDI2NDgpLFc9RCg2NDQp'@;
put 'LHo9RCgyMDUpO3cuZXhwb3J0cz1mdW5jdGlvbihxKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oUSx0ZSl7dmFyIGFlLHNlPXEuZGF0YSxkZT1xLmhlYWRlcnMsbGU9cS5yZXNwb25zZVR5cGU7ZnVuY3Rpb24gY2UoKXtxLmNhbmNlbFRva2VuJiZxLmNhbmNlbFRva2VuLnVuc3Vic2Ny'@;
put 'aWJlKGFlKSxxLnNpZ25hbCYmcS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGFlKX1QLmlzRm9ybURhdGEoc2UpJiZQLmlzU3RhbmRhcmRCcm93c2VyRW52KCkmJmRlbGV0ZSBkZVsiQ29udGVudC1UeXBlIl07dmFyIEc9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKHEuYXV0aCl7'@;
put 'dmFyIHk9cS5hdXRoLnVzZXJuYW1lfHwiIixMPXEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQocS5hdXRoLnBhc3N3b3JkKSk6IiI7ZGUuQXV0aG9yaXphdGlvbj0iQmFzaWMgIitidG9hKHkrIjoiK0wpfXZhciBIPWsocS5iYXNlVVJMLHEudXJsKTtmdW5jdGlv'@;
put 'biBqKCl7aWYoRyl7dmFyIHg9ImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBHP0IoRy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk6bnVsbDtVKGZ1bmN0aW9uKHApe1EocCksY2UoKX0sZnVuY3Rpb24ocCl7dGUocCksY2UoKX0se2RhdGE6bGUmJiJ0ZXh0IiE9PWxlJiYianNvbiIhPT1sZT9H'@;
put 'LnJlc3BvbnNlOkcucmVzcG9uc2VUZXh0LHN0YXR1czpHLnN0YXR1cyxzdGF0dXNUZXh0Okcuc3RhdHVzVGV4dCxoZWFkZXJzOngsY29uZmlnOnEscmVxdWVzdDpHfSksRz1udWxsfX1pZihHLm9wZW4ocS5tZXRob2QudG9VcHBlckNhc2UoKSxFKEgscS5wYXJhbXMscS5wYXJhbXNTZXJpYWxp'@;
put 'emVyKSwhMCksRy50aW1lb3V0PXEudGltZW91dCwib25sb2FkZW5kImluIEc/Ry5vbmxvYWRlbmQ9ajpHLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe0cmJjQ9PT1HLnJlYWR5U3RhdGUmJigwIT09Ry5zdGF0dXN8fEcucmVzcG9uc2VVUkwmJjA9PT1HLnJlc3BvbnNlVVJMLmluZGV4'@;
put 'T2YoImZpbGU6IikpJiZzZXRUaW1lb3V0KGopfSxHLm9uYWJvcnQ9ZnVuY3Rpb24oKXtHJiYodGUobmV3IFooIlJlcXVlc3QgYWJvcnRlZCIsWi5FQ09OTkFCT1JURUQscSxHKSksRz1udWxsKX0sRy5vbmVycm9yPWZ1bmN0aW9uKCl7dGUobmV3IFooIk5ldHdvcmsgRXJyb3IiLFouRVJSX05F'@;
put 'VFdPUksscSxHLEcpKSxHPW51bGx9LEcub250aW1lb3V0PWZ1bmN0aW9uKCl7dmFyIHg9cS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrcS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiO3EudGltZW91dEVycm9yTWVzc2FnZSYmKHg9cS50aW1lb3V0RXJyb3JNZXNzYWdl'@;
put 'KSx0ZShuZXcgWih4LChxLnRyYW5zaXRpb25hbHx8VikuY2xhcmlmeVRpbWVvdXRFcnJvcj9aLkVUSU1FRE9VVDpaLkVDT05OQUJPUlRFRCxxLEcpKSxHPW51bGx9LFAuaXNTdGFuZGFyZEJyb3dzZXJFbnYoKSl7dmFyIGc9KHEud2l0aENyZWRlbnRpYWxzfHxOKEgpKSYmcS54c3JmQ29va2ll'@;
put 'TmFtZT9JLnJlYWQocS54c3JmQ29va2llTmFtZSk6dm9pZCAwO2cmJihkZVtxLnhzcmZIZWFkZXJOYW1lXT1nKX0ic2V0UmVxdWVzdEhlYWRlciJpbiBHJiZQLmZvckVhY2goZGUsZnVuY3Rpb24oeCxfKXt2b2lkIDA9PT1zZSYmImNvbnRlbnQtdHlwZSI9PT1fLnRvTG93ZXJDYXNlKCk/ZGVs'@;
put 'ZXRlIGRlW19dOkcuc2V0UmVxdWVzdEhlYWRlcihfLHgpfSksUC5pc1VuZGVmaW5lZChxLndpdGhDcmVkZW50aWFscyl8fChHLndpdGhDcmVkZW50aWFscz0hIXEud2l0aENyZWRlbnRpYWxzKSxsZSYmImpzb24iIT09bGUmJihHLnJlc3BvbnNlVHlwZT1xLnJlc3BvbnNlVHlwZSksImZ1bmN0'@;
put 'aW9uIj09dHlwZW9mIHEub25Eb3dubG9hZFByb2dyZXNzJiZHLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixxLm9uRG93bmxvYWRQcm9ncmVzcyksImZ1bmN0aW9uIj09dHlwZW9mIHEub25VcGxvYWRQcm9ncmVzcyYmRy51cGxvYWQmJkcudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInBy'@;
put 'b2dyZXNzIixxLm9uVXBsb2FkUHJvZ3Jlc3MpLChxLmNhbmNlbFRva2VufHxxLnNpZ25hbCkmJihhZT1mdW5jdGlvbih4KXtHJiYodGUoIXh8fHgmJngudHlwZT9uZXcgVzp4KSxHLmFib3J0KCksRz1udWxsKX0scS5jYW5jZWxUb2tlbiYmcS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYWUpLHEu'@;
put 'c2lnbmFsJiYocS5zaWduYWwuYWJvcnRlZD9hZSgpOnEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixhZSkpKSxzZXx8KHNlPW51bGwpO3ZhciBTPXooSCk7UyYmLTE9PT1bImh0dHAiLCJodHRwcyIsImZpbGUiXS5pbmRleE9mKFMpP3RlKG5ldyBaKCJVbnN1cHBvcnRlZCBwcm90'@;
put 'b2NvbCAiK1MrIjoiLFouRVJSX0JBRF9SRVFVRVNULHEpKTpHLnNlbmQoc2UpfSl9fSwxNjA5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KSxVPUQoMTg0OSksST1EKDMyMSksRT1EKDcxODUpLGs9ZnVuY3Rpb24gQihOKXt2YXIgVj1uZXcgSShOKSxaPVUoSS5wcm90b3R5'@;
put 'cGUucmVxdWVzdCxWKTtyZXR1cm4gUC5leHRlbmQoWixJLnByb3RvdHlwZSxWKSxQLmV4dGVuZChaLFYpLFouY3JlYXRlPWZ1bmN0aW9uKFcpe3JldHVybiBCKEUoTixXKSl9LFp9KEQoNTU0NikpO2suQXhpb3M9SSxrLkNhbmNlbGVkRXJyb3I9RCg2NDQpLGsuQ2FuY2VsVG9rZW49RCg0OTcy'@;
put 'KSxrLmlzQ2FuY2VsPUQoNjUwMiksay5WRVJTSU9OPUQoNzI4OCkudmVyc2lvbixrLnRvRm9ybURhdGE9RCg3Njc1KSxrLkF4aW9zRXJyb3I9RCgyNjQ4KSxrLkNhbmNlbD1rLkNhbmNlbGVkRXJyb3Isay5hbGw9ZnVuY3Rpb24oQil7cmV0dXJuIFByb21pc2UuYWxsKEIpfSxrLnNwcmVhZD1E'@;
put 'KDg3MTMpLGsuaXNBeGlvc0Vycm9yPUQoNjI2OCksdy5leHBvcnRzPWssdy5leHBvcnRzLmRlZmF1bHQ9a30sNDk3MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNjQ0KTtmdW5jdGlvbiBVKEkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoImV4'@;
put 'ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTt2YXIgRTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oQil7RT1CfSk7dmFyIGs9dGhpczt0aGlzLnByb21pc2UudGhlbihmdW5jdGlvbihCKXtpZihrLl9saXN0ZW5lcnMpe3ZhciBOLFY9ay5fbGlzdGVuZXJzLmxlbmd0aDtm'@;
put 'b3IoTj0wO048VjtOKyspay5fbGlzdGVuZXJzW05dKEIpO2suX2xpc3RlbmVycz1udWxsfX0pLHRoaXMucHJvbWlzZS50aGVuPWZ1bmN0aW9uKEIpe3ZhciBOLFY9bmV3IFByb21pc2UoZnVuY3Rpb24oWil7ay5zdWJzY3JpYmUoWiksTj1afSkudGhlbihCKTtyZXR1cm4gVi5jYW5jZWw9ZnVu'@;
put 'Y3Rpb24oKXtrLnVuc3Vic2NyaWJlKE4pfSxWfSxJKGZ1bmN0aW9uKEIpe2sucmVhc29ufHwoay5yZWFzb249bmV3IFAoQiksRShrLnJlYXNvbikpfSl9VS5wcm90b3R5cGUudGhyb3dJZlJlcXVlc3RlZD1mdW5jdGlvbigpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufSxVLnBy'@;
put 'b3RvdHlwZS5zdWJzY3JpYmU9ZnVuY3Rpb24oSSl7dGhpcy5yZWFzb24/SSh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEkpOnRoaXMuX2xpc3RlbmVycz1bSV19LFUucHJvdG90eXBlLnVuc3Vic2NyaWJlPWZ1bmN0aW9uKEkpe2lmKHRoaXMuX2xp'@;
put 'c3RlbmVycyl7dmFyIEU9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoSSk7LTEhPT1FJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEUsMSl9fSxVLnNvdXJjZT1mdW5jdGlvbigpe3ZhciBJO3JldHVybnt0b2tlbjpuZXcgVShmdW5jdGlvbihFKXtJPUV9KSxjYW5jZWw6SX19LHcuZXhwb3J0cz1V'@;
put 'fSw2NDQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDI2NDgpO2Z1bmN0aW9uIFUoSSl7UC5jYWxsKHRoaXMsST8/ImNhbmNlbGVkIixQLkVSUl9DQU5DRUxFRCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1EKDQ4NjcpLmluaGVyaXRzKFUsUCx7X19DQU5DRUxfXzohMH0pLHcu'@;
put 'ZXhwb3J0cz1VfSw2NTAyOnc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPWZ1bmN0aW9uKEEpe3JldHVybiEoIUF8fCFBLl9fQ0FOQ0VMX18pfX0sMzIxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KSxVPUQoNTMyNyksST1EKDc4MiksRT1EKDM1NzIpLGs9RCg3MTg1KSxC'@;
put 'PUQoNDA5NyksTj1EKDQ4NzUpLFY9Ti52YWxpZGF0b3JzO2Z1bmN0aW9uIFooVyl7dGhpcy5kZWZhdWx0cz1XLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBJLHJlc3BvbnNlOm5ldyBJfX1aLnByb3RvdHlwZS5yZXF1ZXN0PWZ1bmN0aW9uKFcseil7InN0cmluZyI9PXR5cGVvZiBX'@;
put 'Pyh6PXp8fHt9KS51cmw9Vzp6PVd8fHt9LHoubWV0aG9kPSh6PWsodGhpcy5kZWZhdWx0cyx6KSkubWV0aG9kP3oubWV0aG9kLnRvTG93ZXJDYXNlKCk6dGhpcy5kZWZhdWx0cy5tZXRob2Q/dGhpcy5kZWZhdWx0cy5tZXRob2QudG9Mb3dlckNhc2UoKToiZ2V0Ijt2YXIgcT16LnRyYW5zaXRp'@;
put 'b25hbDt2b2lkIDAhPT1xJiZOLmFzc2VydE9wdGlvbnMocSx7c2lsZW50SlNPTlBhcnNpbmc6Vi50cmFuc2l0aW9uYWwoVi5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpWLnRyYW5zaXRpb25hbChWLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Vi50cmFuc2l0aW9uYWwoVi5ib29s'@;
put 'ZWFuKX0sITEpO3ZhciBRPVtdLHRlPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih5KXsiZnVuY3Rpb24iPT10eXBlb2YgeS5ydW5XaGVuJiYhMT09PXkucnVuV2hlbih6KXx8KHRlPXRlJiZ5LnN5bmNocm9ub3VzLFEudW5zaGlmdCh5LmZ1bGZpbGxlZCx5'@;
put 'LnJlamVjdGVkKSl9KTt2YXIgYWUsc2U9W107aWYodGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih5KXtzZS5wdXNoKHkuZnVsZmlsbGVkLHkucmVqZWN0ZWQpfSksIXRlKXt2YXIgZGU9W0Usdm9pZCAwXTtmb3IoQXJyYXkucHJvdG90eXBlLnVuc2hpZnQuYXBw'@;
put 'bHkoZGUsUSksZGU9ZGUuY29uY2F0KHNlKSxhZT1Qcm9taXNlLnJlc29sdmUoeik7ZGUubGVuZ3RoOylhZT1hZS50aGVuKGRlLnNoaWZ0KCksZGUuc2hpZnQoKSk7cmV0dXJuIGFlfWZvcih2YXIgbGU9ejtRLmxlbmd0aDspe3ZhciBjZT1RLnNoaWZ0KCksRz1RLnNoaWZ0KCk7dHJ5e2xlPWNl'@;
put 'KGxlKX1jYXRjaCh5KXtHKHkpO2JyZWFrfX10cnl7YWU9RShsZSl9Y2F0Y2goeSl7cmV0dXJuIFByb21pc2UucmVqZWN0KHkpfWZvcig7c2UubGVuZ3RoOylhZT1hZS50aGVuKHNlLnNoaWZ0KCksc2Uuc2hpZnQoKSk7cmV0dXJuIGFlfSxaLnByb3RvdHlwZS5nZXRVcmk9ZnVuY3Rpb24oVyl7'@;
put 'Vz1rKHRoaXMuZGVmYXVsdHMsVyk7dmFyIHo9QihXLmJhc2VVUkwsVy51cmwpO3JldHVybiBVKHosVy5wYXJhbXMsVy5wYXJhbXNTZXJpYWxpemVyKX0sUC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihXKXtaLnByb3RvdHlwZVtXXT1mdW5jdGlv'@;
put 'bih6LHEpe3JldHVybiB0aGlzLnJlcXVlc3QoayhxfHx7fSx7bWV0aG9kOlcsdXJsOnosZGF0YToocXx8e30pLmRhdGF9KSl9fSksUC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVyl7ZnVuY3Rpb24geihxKXtyZXR1cm4gZnVuY3Rpb24oUSx0ZSxhZSl7cmV0dXJu'@;
put 'IHRoaXMucmVxdWVzdChrKGFlfHx7fSx7bWV0aG9kOlcsaGVhZGVyczpxP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpRLGRhdGE6dGV9KSl9fVoucHJvdG90eXBlW1ddPXooKSxaLnByb3RvdHlwZVtXKyJGb3JtIl09eighMCl9KSx3LmV4cG9ydHM9Wn0s'@;
put 'MjY0ODoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDg2Nyk7ZnVuY3Rpb24gVShrLEIsTixWLFope0Vycm9yLmNhbGwodGhpcyksdGhpcy5tZXNzYWdlPWssdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixCJiYodGhpcy5jb2RlPUIpLE4mJih0aGlzLmNvbmZpZz1OKSxWJiYodGhpcy5y'@;
put 'ZXF1ZXN0PVYpLFomJih0aGlzLnJlc3BvbnNlPVopfVAuaW5oZXJpdHMoVSxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVO'@;
put 'YW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnRoaXMuY29uZmlnLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0'@;
put 'YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgST1VLnByb3RvdHlwZSxFPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNU'@;
put 'UyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCJdLmZvckVhY2goZnVuY3Rpb24oayl7RVtrXT17dmFsdWU6a319KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVLEUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLCJp'@;
put 'c0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pLFUuZnJvbT1mdW5jdGlvbihrLEIsTixWLFosVyl7dmFyIHo9T2JqZWN0LmNyZWF0ZShJKTtyZXR1cm4gUC50b0ZsYXRPYmplY3Qoayx6LGZ1bmN0aW9uKHEpe3JldHVybiBxIT09RXJyb3IucHJvdG90eXBlfSksVS5jYWxsKHosay5tZXNzYWdlLEIs'@;
put 'TixWLFopLHoubmFtZT1rLm5hbWUsVyYmT2JqZWN0LmFzc2lnbih6LFcpLHp9LHcuZXhwb3J0cz1VfSw3ODI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQ4NjcpO2Z1bmN0aW9uIFUoKXt0aGlzLmhhbmRsZXJzPVtdfVUucHJvdG90eXBlLnVzZT1mdW5jdGlvbihJLEUsayl7cmV0'@;
put 'dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkkscmVqZWN0ZWQ6RSxzeW5jaHJvbm91czohIWsmJmsuc3luY2hyb25vdXMscnVuV2hlbjprP2sucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX0sVS5wcm90b3R5cGUuZWplY3Q9ZnVuY3Rpb24oSSl7dGhpcy5o'@;
put 'YW5kbGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9LFUucHJvdG90eXBlLmZvckVhY2g9ZnVuY3Rpb24oSSl7UC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oRSl7bnVsbCE9PUUmJkkoRSl9KX0sdy5leHBvcnRzPVV9LDQwOTc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgUD1EKDE3OTMpLFU9RCg3MzAzKTt3LmV4cG9ydHM9ZnVuY3Rpb24oSSxFKXtyZXR1cm4gSSYmIVAoRSk/VShJLEUpOkV9fSwzNTcyOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KSxVPUQoODUyNyksST1EKDY1MDIpLEU9RCg1NTQ2KSxrPUQoNjQ0KTtmdW5jdGlvbiBC'@;
put 'KE4pe2lmKE4uY2FuY2VsVG9rZW4mJk4uY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLE4uc2lnbmFsJiZOLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBrfXcuZXhwb3J0cz1mdW5jdGlvbihOKXtyZXR1cm4gQihOKSxOLmhlYWRlcnM9Ti5oZWFkZXJzfHx7fSxOLmRhdGE9VS5jYWxs'@;
put 'KE4sTi5kYXRhLE4uaGVhZGVycyxOLnRyYW5zZm9ybVJlcXVlc3QpLE4uaGVhZGVycz1QLm1lcmdlKE4uaGVhZGVycy5jb21tb258fHt9LE4uaGVhZGVyc1tOLm1ldGhvZF18fHt9LE4uaGVhZGVycyksUC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRj'@;
put 'aCIsImNvbW1vbiJdLGZ1bmN0aW9uKFYpe2RlbGV0ZSBOLmhlYWRlcnNbVl19KSwoTi5hZGFwdGVyfHxFLmFkYXB0ZXIpKE4pLnRoZW4oZnVuY3Rpb24oVil7cmV0dXJuIEIoTiksVi5kYXRhPVUuY2FsbChOLFYuZGF0YSxWLmhlYWRlcnMsTi50cmFuc2Zvcm1SZXNwb25zZSksVn0sZnVuY3Rp'@;
put 'b24oVil7cmV0dXJuIEkoVil8fChCKE4pLFYmJlYucmVzcG9uc2UmJihWLnJlc3BvbnNlLmRhdGE9VS5jYWxsKE4sVi5yZXNwb25zZS5kYXRhLFYucmVzcG9uc2UuaGVhZGVycyxOLnRyYW5zZm9ybVJlc3BvbnNlKSkpLFByb21pc2UucmVqZWN0KFYpfSl9fSw3MTg1Oih3LEEsRCk9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIFA9RCg0ODY3KTt3LmV4cG9ydHM9ZnVuY3Rpb24oVSxJKXtJPUl8fHt9O3ZhciBFPXt9O2Z1bmN0aW9uIGsoeixxKXtyZXR1cm4gUC5pc1BsYWluT2JqZWN0KHopJiZQLmlzUGxhaW5PYmplY3QocSk/UC5tZXJnZSh6LHEpOlAuaXNQbGFpbk9iamVjdChxKT9QLm1lcmdl'@;
put 'KHt9LHEpOlAuaXNBcnJheShxKT9xLnNsaWNlKCk6cX1mdW5jdGlvbiBCKHope3JldHVybiBQLmlzVW5kZWZpbmVkKElbel0pP1AuaXNVbmRlZmluZWQoVVt6XSk/dm9pZCAwOmsodm9pZCAwLFVbel0pOmsoVVt6XSxJW3pdKX1mdW5jdGlvbiBOKHope2lmKCFQLmlzVW5kZWZpbmVkKElbel0p'@;
put 'KXJldHVybiBrKHZvaWQgMCxJW3pdKX1mdW5jdGlvbiBWKHope3JldHVybiBQLmlzVW5kZWZpbmVkKElbel0pP1AuaXNVbmRlZmluZWQoVVt6XSk/dm9pZCAwOmsodm9pZCAwLFVbel0pOmsodm9pZCAwLElbel0pfWZ1bmN0aW9uIFooeil7cmV0dXJuIHogaW4gST9rKFVbel0sSVt6XSk6eiBp'@;
put 'biBVP2sodm9pZCAwLFVbel0pOnZvaWQgMH12YXIgVz17dXJsOk4sbWV0aG9kOk4sZGF0YTpOLGJhc2VVUkw6Vix0cmFuc2Zvcm1SZXF1ZXN0OlYsdHJhbnNmb3JtUmVzcG9uc2U6VixwYXJhbXNTZXJpYWxpemVyOlYsdGltZW91dDpWLHRpbWVvdXRNZXNzYWdlOlYsd2l0aENyZWRlbnRpYWxz'@;
put 'OlYsYWRhcHRlcjpWLHJlc3BvbnNlVHlwZTpWLHhzcmZDb29raWVOYW1lOlYseHNyZkhlYWRlck5hbWU6VixvblVwbG9hZFByb2dyZXNzOlYsb25Eb3dubG9hZFByb2dyZXNzOlYsZGVjb21wcmVzczpWLG1heENvbnRlbnRMZW5ndGg6VixtYXhCb2R5TGVuZ3RoOlYsYmVmb3JlUmVkaXJlY3Q6'@;
put 'Vix0cmFuc3BvcnQ6VixodHRwQWdlbnQ6VixodHRwc0FnZW50OlYsY2FuY2VsVG9rZW46Vixzb2NrZXRQYXRoOlYscmVzcG9uc2VFbmNvZGluZzpWLHZhbGlkYXRlU3RhdHVzOlp9O3JldHVybiBQLmZvckVhY2goT2JqZWN0LmtleXMoVSkuY29uY2F0KE9iamVjdC5rZXlzKEkpKSxmdW5jdGlv'@;
put 'bih6KXt2YXIgcT1XW3pdfHxCLFE9cSh6KTtQLmlzVW5kZWZpbmVkKFEpJiZxIT09Wnx8KEVbel09USl9KSxFfX0sNjAyNjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoMjY0OCk7dy5leHBvcnRzPWZ1bmN0aW9uKFUsSSxFKXt2YXIgaz1FLmNvbmZpZy52YWxpZGF0ZVN0YXR1cztF'@;
put 'LnN0YXR1cyYmayYmIWsoRS5zdGF0dXMpP0kobmV3IFAoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitFLnN0YXR1cyxbUC5FUlJfQkFEX1JFUVVFU1QsUC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKEUuc3RhdHVzLzEwMCktNF0sRS5jb25maWcsRS5yZXF1ZXN0LEUp'@;
put 'KTpVKEUpfX0sODUyNzoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDg2NyksVT1EKDU1NDYpO3cuZXhwb3J0cz1mdW5jdGlvbihJLEUsayl7dmFyIEI9dGhpc3x8VTtyZXR1cm4gUC5mb3JFYWNoKGssZnVuY3Rpb24oTil7ST1OLmNhbGwoQixJLEUpfSksSX19LDU1NDY6KHcsQSxE'@;
put 'KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpLFU9RCg0ODY3KSxJPUQoNjAxNiksRT1EKDI2NDgpLGs9RCg3ODc0KSxCPUQoNzY3NSksTj17IkNvbnRlbnQtVHlwZSI6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCJ9O2Z1bmN0aW9uIFYoeixxKXshVS5pc1VuZGVmaW5l'@;
put 'ZCh6KSYmVS5pc1VuZGVmaW5lZCh6WyJDb250ZW50LVR5cGUiXSkmJih6WyJDb250ZW50LVR5cGUiXT1xKX12YXIgWixXPXt0cmFuc2l0aW9uYWw6ayxhZGFwdGVyOigodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Inx8dm9pZCAwIT09UCYmIltvYmplY3QgcHJvY2Vzc10iPT09T2JqZWN0LnBy'@;
put 'b3RvdHlwZS50b1N0cmluZy5jYWxsKFApKSYmKFo9RCg1NDQ4KSksWiksdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oeixxKXtpZihJKHEsIkFjY2VwdCIpLEkocSwiQ29udGVudC1UeXBlIiksVS5pc0Zvcm1EYXRhKHopfHxVLmlzQXJyYXlCdWZmZXIoeil8fFUuaXNCdWZmZXIoeil8fFUu'@;
put 'aXNTdHJlYW0oeil8fFUuaXNGaWxlKHopfHxVLmlzQmxvYih6KSlyZXR1cm4gejtpZihVLmlzQXJyYXlCdWZmZXJWaWV3KHopKXJldHVybiB6LmJ1ZmZlcjtpZihVLmlzVVJMU2VhcmNoUGFyYW1zKHopKXJldHVybiBWKHEsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFy'@;
put 'c2V0PXV0Zi04Iiksei50b1N0cmluZygpO3ZhciBRLHRlPVUuaXNPYmplY3QoeiksYWU9cSYmcVsiQ29udGVudC1UeXBlIl07aWYoKFE9VS5pc0ZpbGVMaXN0KHopKXx8dGUmJiJtdWx0aXBhcnQvZm9ybS1kYXRhIj09PWFlKXt2YXIgc2U9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3Jl'@;
put 'dHVybiBCKFE/eyJmaWxlc1tdIjp6fTp6LHNlJiZuZXcgc2UpfXJldHVybiB0ZXx8ImFwcGxpY2F0aW9uL2pzb24iPT09YWU/KFYocSwiYXBwbGljYXRpb24vanNvbiIpLGZ1bmN0aW9uKGRlLGxlLGNlKXtpZihVLmlzU3RyaW5nKGRlKSl0cnl7cmV0dXJuKDAsSlNPTi5wYXJzZSkoZGUpLFUu'@;
put 'dHJpbShkZSl9Y2F0Y2goRyl7aWYoIlN5bnRheEVycm9yIiE9PUcubmFtZSl0aHJvdyBHfXJldHVybigwLEpTT04uc3RyaW5naWZ5KShkZSl9KHopKTp6fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHope3ZhciBxPXRoaXMudHJhbnNpdGlvbmFsfHxXLnRyYW5zaXRpb25hbCxhZT0h'@;
put 'KHEmJnEuc2lsZW50SlNPTlBhcnNpbmcpJiYianNvbiI9PT10aGlzLnJlc3BvbnNlVHlwZTtpZihhZXx8cSYmcS5mb3JjZWRKU09OUGFyc2luZyYmVS5pc1N0cmluZyh6KSYmei5sZW5ndGgpdHJ5e3JldHVybiBKU09OLnBhcnNlKHopfWNhdGNoKHNlKXtpZihhZSl0aHJvdyJTeW50YXhFcnJv'@;
put 'ciI9PT1zZS5uYW1lP0UuZnJvbShzZSxFLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOnNlfXJldHVybiB6fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3Ro'@;
put 'Oi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpEKDE2MjMpfSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih6KXtyZXR1cm4gej49MjAwJiZ6PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiJ9fX07VS5mb3JFYWNo'@;
put 'KFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCJdLGZ1bmN0aW9uKHope1cuaGVhZGVyc1t6XT17fX0pLFUuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHope1cuaGVhZGVyc1t6XT1VLm1lcmdlKE4pfSksdy5leHBvcnRzPVd9LDc4NzQ6dz0+eyJ1c2Ugc3RyaWN0Ijt3LmV4'@;
put 'cG9ydHM9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9fSw3Mjg4Onc9Pnt3LmV4cG9ydHM9e3ZlcnNpb246IjAuMjcuMiJ9fSwxODQ5Onc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPWZ1bmN0aW9uKEEsRCl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKCl7Zm9yKHZhciBQPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKSxVPTA7VTxQLmxlbmd0aDtVKyspUFtVXT1hcmd1bWVudHNbVV07cmV0dXJuIEEuYXBwbHkoRCxQKX19fSw1MzI3Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KTtmdW5jdGlvbiBVKEkp'@;
put 'e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoSSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfXcuZXhwb3J0cz1m'@;
put 'dW5jdGlvbihJLEUsayl7aWYoIUUpcmV0dXJuIEk7dmFyIEI7aWYoaylCPWsoRSk7ZWxzZSBpZihQLmlzVVJMU2VhcmNoUGFyYW1zKEUpKUI9RS50b1N0cmluZygpO2Vsc2V7dmFyIE49W107UC5mb3JFYWNoKEUsZnVuY3Rpb24oWixXKXtudWxsIT1aJiYoUC5pc0FycmF5KFopP1crPSJbXSI6'@;
put 'Wj1bWl0sUC5mb3JFYWNoKFosZnVuY3Rpb24oeil7UC5pc0RhdGUoeik/ej16LnRvSVNPU3RyaW5nKCk6UC5pc09iamVjdCh6KSYmKHo9SlNPTi5zdHJpbmdpZnkoeikpLE4ucHVzaChVKFcpKyI9IitVKHopKX0pKX0pLEI9Ti5qb2luKCImIil9aWYoQil7dmFyIFY9SS5pbmRleE9mKCIjIik7'@;
put 'LTEhPT1WJiYoST1JLnNsaWNlKDAsVikpLEkrPSgtMT09PUkuaW5kZXhPZigiPyIpPyI/IjoiJiIpK0J9cmV0dXJuIEl9fSw3MzAzOnc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPWZ1bmN0aW9uKEEsRCl7cmV0dXJuIEQ/QS5yZXBsYWNlKC9cLyskLywiIikrIi8iK0QucmVwbGFjZSgvXlwv'@;
put 'Ky8sIiIpOkF9fSw0MzcyOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KTt3LmV4cG9ydHM9UC5pc1N0YW5kYXJkQnJvd3NlckVudigpP3t3cml0ZTpmdW5jdGlvbihVLEksRSxrLEIsTil7dmFyIFY9W107Vi5wdXNoKFUrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJKSksUC5p'@;
put 'c051bWJlcihFKSYmVi5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoRSkudG9HTVRTdHJpbmcoKSksUC5pc1N0cmluZyhrKSYmVi5wdXNoKCJwYXRoPSIrayksUC5pc1N0cmluZyhCKSYmVi5wdXNoKCJkb21haW49IitCKSwhMD09PU4mJlYucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2ll'@;
put 'PVYuam9pbigiOyAiKX0scmVhZDpmdW5jdGlvbihVKXt2YXIgST1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrVSsiKT0oW147XSopIikpO3JldHVybiBJP2RlY29kZVVSSUNvbXBvbmVudChJWzNdKTpudWxsfSxyZW1vdmU6ZnVuY3Rpb24oVSl7dGhpcy53'@;
put 'cml0ZShVLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlOmZ1bmN0aW9uKCl7fSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHJlbW92ZTpmdW5jdGlvbigpe319fSwxNzkzOnc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPWZ1bmN0aW9uKEEpe3JldHVybi9eKFthLXpdW2Etelxk'@;
put 'K1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9fSw2MjY4Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KTt3LmV4cG9ydHM9ZnVuY3Rpb24oVSl7cmV0dXJuIFAuaXNPYmplY3QoVSkmJiEwPT09VS5pc0F4aW9zRXJyb3J9fSw3OTg1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFy'@;
put 'IFA9RCg0ODY3KTt3LmV4cG9ydHM9UC5pc1N0YW5kYXJkQnJvd3NlckVudigpP2Z1bmN0aW9uKCl7dmFyIFUsST0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLEU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2Z1bmN0aW9uIGsoQil7dmFyIE49QjtyZXR1'@;
put 'cm4gSSYmKEUuc2V0QXR0cmlidXRlKCJocmVmIixOKSxOPUUuaHJlZiksRS5zZXRBdHRyaWJ1dGUoImhyZWYiLE4pLHtocmVmOkUuaHJlZixwcm90b2NvbDpFLnByb3RvY29sP0UucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OkUuaG9zdCxzZWFyY2g6RS5zZWFyY2g/RS5zZWFy'@;
put 'Y2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDpFLmhhc2g/RS5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6RS5ob3N0bmFtZSxwb3J0OkUucG9ydCxwYXRobmFtZToiLyI9PT1FLnBhdGhuYW1lLmNoYXJBdCgwKT9FLnBhdGhuYW1lOiIvIitFLnBhdGhuYW1lfX1yZXR1cm4g'@;
put 'VT1rKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihCKXt2YXIgTj1QLmlzU3RyaW5nKEIpP2soQik6QjtyZXR1cm4gTi5wcm90b2NvbD09PVUucHJvdG9jb2wmJk4uaG9zdD09PVUuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4hMH19LDYwMTY6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgUD1EKDQ4NjcpO3cuZXhwb3J0cz1mdW5jdGlvbihVLEkpe1AuZm9yRWFjaChVLGZ1bmN0aW9uKEUsayl7ayE9PUkmJmsudG9VcHBlckNhc2UoKT09PUkudG9VcHBlckNhc2UoKSYmKFVbSV09RSxkZWxldGUgVVtrXSl9KX19LDE2MjM6dz0+e3cuZXhwb3J0cz1udWxsfSw0MTA5Oih3'@;
put 'LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0ODY3KSxVPVsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIs'@;
put 'Imxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il07dy5leHBvcnRzPWZ1bmN0aW9uKEkpe3ZhciBFLGssQixOPXt9O3JldHVybiBJJiZQLmZvckVhY2goSS5zcGxp'@;
put 'dCgiXG4iKSxmdW5jdGlvbihWKXtpZihCPVYuaW5kZXhPZigiOiIpLEU9UC50cmltKFYuc3Vic3RyKDAsQikpLnRvTG93ZXJDYXNlKCksaz1QLnRyaW0oVi5zdWJzdHIoQisxKSksRSl7aWYoTltFXSYmVS5pbmRleE9mKEUpPj0wKXJldHVybjtOW0VdPSJzZXQtY29va2llIj09PUU/KE5bRV0/'@;
put 'TltFXTpbXSkuY29uY2F0KFtrXSk6TltFXT9OW0VdKyIsICIrazprfX0pLE59fSwyMDU6dz0+eyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9ZnVuY3Rpb24oQSl7dmFyIEQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIEQmJkRbMV18fCIifX0sODcxMzp3PT57InVz'@;
put 'ZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbihBKXtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIEEuYXBwbHkobnVsbCxEKX19fSw3Njc1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg4NzY0KS5CdWZmZXIsVT1EKDQ4NjcpO3cuZXhwb3J0cz1mdW5jdGlvbihJLEUpe0U9RXx8'@;
put 'bmV3IEZvcm1EYXRhO3ZhciBrPVtdO2Z1bmN0aW9uIEIoTil7cmV0dXJuIG51bGw9PT1OPyIiOlUuaXNEYXRlKE4pP04udG9JU09TdHJpbmcoKTpVLmlzQXJyYXlCdWZmZXIoTil8fFUuaXNUeXBlZEFycmF5KE4pPyJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFtOXSk6UC5mcm9t'@;
put 'KE4pOk59cmV0dXJuIGZ1bmN0aW9uIE4oVixaKXtpZihVLmlzUGxhaW5PYmplY3QoVil8fFUuaXNBcnJheShWKSl7aWYoLTEhPT1rLmluZGV4T2YoVikpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK1opO2sucHVzaChWKSxVLmZvckVhY2goVixmdW5jdGlv'@;
put 'bihXLHope2lmKCFVLmlzVW5kZWZpbmVkKFcpKXt2YXIgcSxRPVo/WisiLiIrejp6O2lmKFcmJiFaJiYib2JqZWN0Ij09dHlwZW9mIFcpaWYoVS5lbmRzV2l0aCh6LCJ7fSIpKVc9SlNPTi5zdHJpbmdpZnkoVyk7ZWxzZSBpZihVLmVuZHNXaXRoKHosIltdIikmJihxPVUudG9BcnJheShXKSkp'@;
put 'cmV0dXJuIHZvaWQgcS5mb3JFYWNoKGZ1bmN0aW9uKHRlKXshVS5pc1VuZGVmaW5lZCh0ZSkmJkUuYXBwZW5kKFEsQih0ZSkpfSk7TihXLFEpfX0pLGsucG9wKCl9ZWxzZSBFLmFwcGVuZChaLEIoVikpfShJKSxFfX0sNDg3NToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNTEwOCks'@;
put 'VT1EKDcyODgpLnZlcnNpb24sST1EKDI2NDgpLEU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKGZ1bmN0aW9uKEIsTil7RVtCXT1mdW5jdGlvbihWKXtyZXR1cm4gdHlwZW9mIFY9PT1CfHwiYSIrKE48MT8ibiAi'@;
put 'OiIgIikrQn19KTt2YXIgaz17fTtFLnRyYW5zaXRpb25hbD1mdW5jdGlvbihCLE4sVil7ZnVuY3Rpb24gWihXLHope3JldHVybiJbQXhpb3MgdiIrVSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK1crIiciK3orKFY/Ii4gIitWOiIiKX1yZXR1cm4gZnVuY3Rpb24oVyx6LHEpe2lmKCExPT09'@;
put 'Qil0aHJvdyBuZXcgSShaKHosIiBoYXMgYmVlbiByZW1vdmVkIisoTj8iIGluICIrTjoiIikpLEkuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBOJiYha1t6XSYmKGtbel09ITAsUC53YXJuKFooeiwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrTisiIGFuZCB3aWxsIGJlIHJlbW92ZWQg'@;
put 'aW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhQnx8QihXLHoscSl9fSx3LmV4cG9ydHM9e2Fzc2VydE9wdGlvbnM6ZnVuY3Rpb24oQixOLFYpe2lmKCJvYmplY3QiIT10eXBlb2YgQil0aHJvdyBuZXcgSSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsSS5FUlJfQkFEX09QVElPTl9WQUxVRSk7'@;
put 'Zm9yKHZhciBaPU9iamVjdC5rZXlzKEIpLFc9Wi5sZW5ndGg7Vy0tID4wOyl7dmFyIHo9WltXXSxxPU5bel07aWYocSl7dmFyIFE9Qlt6XSx0ZT12b2lkIDA9PT1RfHxxKFEseixCKTtpZighMCE9PXRlKXRocm93IG5ldyBJKCJvcHRpb24gIit6KyIgbXVzdCBiZSAiK3RlLEkuRVJSX0JBRF9P'@;
put 'UFRJT05fVkFMVUUpfWVsc2UgaWYoITAhPT1WKXRocm93IG5ldyBJKCJVbmtub3duIG9wdGlvbiAiK3osSS5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOkV9fSw0ODY3Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFAsVT1EKDE4NDkpLEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmlu'@;
put 'ZyxFPShQPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oRyl7dmFyIHk9SS5jYWxsKEcpO3JldHVybiBQW3ldfHwoUFt5XT15LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSk7ZnVuY3Rpb24gayhHKXtyZXR1cm4gRz1HLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24oeSl7cmV0dXJuIEUo'@;
put 'eSk9PT1HfX1mdW5jdGlvbiBCKEcpe3JldHVybiBBcnJheS5pc0FycmF5KEcpfWZ1bmN0aW9uIE4oRyl7cmV0dXJuIHZvaWQgMD09PUd9dmFyIFY9aygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBaKEcpe3JldHVybiBudWxsIT09RyYmIm9iamVjdCI9PXR5cGVvZiBHfWZ1bmN0aW9uIFcoRyl7'@;
put 'aWYoIm9iamVjdCIhPT1FKEcpKXJldHVybiExO3ZhciB5PU9iamVjdC5nZXRQcm90b3R5cGVPZihHKTtyZXR1cm4gbnVsbD09PXl8fHk9PT1PYmplY3QucHJvdG90eXBlfXZhciB6PWsoIkRhdGUiKSxxPWsoIkZpbGUiKSxRPWsoIkJsb2IiKSx0ZT1rKCJGaWxlTGlzdCIpO2Z1bmN0aW9uIGFl'@;
put 'KEcpe3JldHVybiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1JLmNhbGwoRyl9dmFyIHNlPWsoIlVSTFNlYXJjaFBhcmFtcyIpO2Z1bmN0aW9uIGRlKEcseSl7aWYobnVsbCE9RylpZigib2JqZWN0IiE9dHlwZW9mIEcmJihHPVtHXSksQihHKSlmb3IodmFyIEw9MCxIPUcubGVuZ3RoO0w8SDtMKysp'@;
put 'eS5jYWxsKG51bGwsR1tMXSxMLEcpO2Vsc2UgZm9yKHZhciBqIGluIEcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEcsaikmJnkuY2FsbChudWxsLEdbal0saixHKX12YXIgbGUsY2U9KGxlPXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT2JqZWN0LmdldFByb3RvdHlwZU9m'@;
put 'KFVpbnQ4QXJyYXkpLGZ1bmN0aW9uKEcpe3JldHVybiBsZSYmRyBpbnN0YW5jZW9mIGxlfSk7dy5leHBvcnRzPXtpc0FycmF5OkIsaXNBcnJheUJ1ZmZlcjpWLGlzQnVmZmVyOmZ1bmN0aW9uKEcpe3JldHVybiBudWxsIT09RyYmIU4oRykmJm51bGwhPT1HLmNvbnN0cnVjdG9yJiYhTihHLmNv'@;
put 'bnN0cnVjdG9yKSYmImZ1bmN0aW9uIj09dHlwZW9mIEcuY29uc3RydWN0b3IuaXNCdWZmZXImJkcuY29uc3RydWN0b3IuaXNCdWZmZXIoRyl9LGlzRm9ybURhdGE6ZnVuY3Rpb24oRyl7dmFyIHk9IltvYmplY3QgRm9ybURhdGFdIjtyZXR1cm4gRyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGb3Jt'@;
put 'RGF0YSYmRyBpbnN0YW5jZW9mIEZvcm1EYXRhfHxJLmNhbGwoRyk9PT15fHxhZShHLnRvU3RyaW5nKSYmRy50b1N0cmluZygpPT09eSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uKEcpe3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlC'@;
put 'dWZmZXIuaXNWaWV3KEcpOkcmJkcuYnVmZmVyJiZWKEcuYnVmZmVyKX0saXNTdHJpbmc6ZnVuY3Rpb24oRyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBHfSxpc051bWJlcjpmdW5jdGlvbihHKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEd9LGlzT2JqZWN0OlosaXNQbGFpbk9iamVjdDpXLGlz'@;
put 'VW5kZWZpbmVkOk4saXNEYXRlOnosaXNGaWxlOnEsaXNCbG9iOlEsaXNGdW5jdGlvbjphZSxpc1N0cmVhbTpmdW5jdGlvbihHKXtyZXR1cm4gWihHKSYmYWUoRy5waXBlKX0saXNVUkxTZWFyY2hQYXJhbXM6c2UsaXNTdGFuZGFyZEJyb3dzZXJFbnY6ZnVuY3Rpb24oKXtyZXR1cm4odHlwZW9m'@;
put 'IG5hdmlnYXRvcj4idSJ8fCJSZWFjdE5hdGl2ZSIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5hdGl2ZVNjcmlwdCIhPT1uYXZpZ2F0b3IucHJvZHVjdCYmIk5TIiE9PW5hdmlnYXRvci5wcm9kdWN0KSYmdHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSJ9LGZvckVhY2g6ZGUs'@;
put 'bWVyZ2U6ZnVuY3Rpb24gRygpe3ZhciB5PXt9O2Z1bmN0aW9uIEwoZyxTKXt5W1NdPVcoeVtTXSkmJlcoZyk/Ryh5W1NdLGcpOlcoZyk/Ryh7fSxnKTpCKGcpP2cuc2xpY2UoKTpnfWZvcih2YXIgSD0wLGo9YXJndW1lbnRzLmxlbmd0aDtIPGo7SCsrKWRlKGFyZ3VtZW50c1tIXSxMKTtyZXR1'@;
put 'cm4geX0sZXh0ZW5kOmZ1bmN0aW9uKEcseSxMKXtyZXR1cm4gZGUoeSxmdW5jdGlvbihILGope0dbal09TCYmImZ1bmN0aW9uIj09dHlwZW9mIEg/VShILEwpOkh9KSxHfSx0cmltOmZ1bmN0aW9uKEcpe3JldHVybiBHLnRyaW0/Ry50cmltKCk6Ry5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9'@;
put 'LHN0cmlwQk9NOmZ1bmN0aW9uKEcpe3JldHVybiA2NTI3OT09PUcuY2hhckNvZGVBdCgwKSYmKEc9Ry5zbGljZSgxKSksR30saW5oZXJpdHM6ZnVuY3Rpb24oRyx5LEwsSCl7Ry5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSxIKSxHLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1H'@;
put 'LEwmJk9iamVjdC5hc3NpZ24oRy5wcm90b3R5cGUsTCl9LHRvRmxhdE9iamVjdDpmdW5jdGlvbihHLHksTCl7dmFyIEgsaixnLFM9e307eT15fHx7fTtkb3tmb3Ioaj0oSD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhHKSkubGVuZ3RoO2otLSA+MDspU1tnPUhbal1dfHwoeVtnXT1HW2dd'@;
put 'LFNbZ109ITApO0c9T2JqZWN0LmdldFByb3RvdHlwZU9mKEcpfXdoaWxlKEcmJighTHx8TChHLHkpKSYmRyE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB5fSxraW5kT2Y6RSxraW5kT2ZUZXN0OmssZW5kc1dpdGg6ZnVuY3Rpb24oRyx5LEwpe0c9U3RyaW5nKEcpLCh2b2lkIDA9PT1MfHxM'@;
put 'PkcubGVuZ3RoKSYmKEw9Ry5sZW5ndGgpO3ZhciBIPUcuaW5kZXhPZih5LEwtPXkubGVuZ3RoKTtyZXR1cm4tMSE9PUgmJkg9PT1MfSx0b0FycmF5OmZ1bmN0aW9uKEcpe2lmKCFHKXJldHVybiBudWxsO3ZhciB5PUcubGVuZ3RoO2lmKE4oeSkpcmV0dXJuIG51bGw7Zm9yKHZhciBMPW5ldyBB'@;
put 'cnJheSh5KTt5LS0gPjA7KUxbeV09R1t5XTtyZXR1cm4gTH0saXNUeXBlZEFycmF5OmNlLGlzRmlsZUxpc3Q6dGV9fSw1NjIzOnc9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQShVLEksRSl7VSBpbnN0YW5jZW9mIFJlZ0V4cCYmKFU9RChVLEUpKSxJIGluc3RhbmNlb2YgUmVnRXhwJiYoST1E'@;
put 'KEksRSkpO3ZhciBrPVAoVSxJLEUpO3JldHVybiBrJiZ7c3RhcnQ6a1swXSxlbmQ6a1sxXSxwcmU6RS5zbGljZSgwLGtbMF0pLGJvZHk6RS5zbGljZShrWzBdK1UubGVuZ3RoLGtbMV0pLHBvc3Q6RS5zbGljZShrWzFdK0kubGVuZ3RoKX19ZnVuY3Rpb24gRChVLEkpe3ZhciBFPUkubWF0Y2go'@;
put 'VSk7cmV0dXJuIEU/RVswXTpudWxsfWZ1bmN0aW9uIFAoVSxJLEUpe3ZhciBrLEIsTixWLFosVz1FLmluZGV4T2YoVSksej1FLmluZGV4T2YoSSxXKzEpLHE9VztpZihXPj0wJiZ6PjApe2lmKFU9PT1JKXJldHVybltXLHpdO2ZvcihrPVtdLE49RS5sZW5ndGg7cT49MCYmIVo7KXE9PVc/KGsu'@;
put 'cHVzaChxKSxXPUUuaW5kZXhPZihVLHErMSkpOjE9PWsubGVuZ3RoP1o9W2sucG9wKCksel06KChCPWsucG9wKCkpPE4mJihOPUIsVj16KSx6PUUuaW5kZXhPZihJLHErMSkpLHE9Vzx6JiZXPj0wP1c6ejtrLmxlbmd0aCYmKFo9W04sVl0pfXJldHVybiBafXcuZXhwb3J0cz1BLEEucmFuZ2U9'@;
put 'UH0sOTc0MjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtBLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oVil7dmFyIFo9QihWKSx6PVpbMV07cmV0dXJuIDMqKFpbMF0reikvNC16fSxBLnRvQnl0ZUFycmF5PWZ1bmN0aW9uKFYpe3ZhciBaLFcsY2Usej1CKFYpLHE9elswXSxRPXpbMV0sdGU9bmV3IFUoMyoo'@;
put 'cSsoY2U9USkpLzQtY2UpLGFlPTAsc2U9UT4wP3EtNDpxO2ZvcihXPTA7VzxzZTtXKz00KVo9UFtWLmNoYXJDb2RlQXQoVyldPDwxOHxQW1YuY2hhckNvZGVBdChXKzEpXTw8MTJ8UFtWLmNoYXJDb2RlQXQoVysyKV08PDZ8UFtWLmNoYXJDb2RlQXQoVyszKV0sdGVbYWUrK109Wj4+MTYmMjU1'@;
put 'LHRlW2FlKytdPVo+PjgmMjU1LHRlW2FlKytdPTI1NSZaO3JldHVybiAyPT09USYmKFo9UFtWLmNoYXJDb2RlQXQoVyldPDwyfFBbVi5jaGFyQ29kZUF0KFcrMSldPj40LHRlW2FlKytdPTI1NSZaKSwxPT09USYmKFo9UFtWLmNoYXJDb2RlQXQoVyldPDwxMHxQW1YuY2hhckNvZGVBdChXKzEp'@;
put 'XTw8NHxQW1YuY2hhckNvZGVBdChXKzIpXT4+Mix0ZVthZSsrXT1aPj44JjI1NSx0ZVthZSsrXT0yNTUmWiksdGV9LEEuZnJvbUJ5dGVBcnJheT1mdW5jdGlvbihWKXtmb3IodmFyIFosVz1WLmxlbmd0aCx6PVclMyxxPVtdLFE9MTYzODMsdGU9MCxhZT1XLXo7dGU8YWU7dGUrPVEpcS5wdXNo'@;
put 'KE4oVix0ZSx0ZStRPmFlP2FlOnRlK1EpKTtyZXR1cm4gMT09PXo/cS5wdXNoKERbKFo9VltXLTFdKT4+Ml0rRFtaPDw0JjYzXSsiPT0iKToyPT09eiYmcS5wdXNoKERbKFo9KFZbVy0yXTw8OCkrVltXLTFdKT4+MTBdK0RbWj4+NCY2M10rRFtaPDwyJjYzXSsiPSIpLHEuam9pbigiIil9O2Zv'@;
put 'cih2YXIgRD1bXSxQPVtdLFU9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksST0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsRT0wO0U8NjQ7KytFKURbRV09SVtFXSxQW0kuY2hhckNvZGVBdChF'@;
put 'KV09RTtmdW5jdGlvbiBCKFYpe3ZhciBaPVYubGVuZ3RoO2lmKFolND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzdHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBXPVYuaW5kZXhPZigiPSIpO3JldHVybi0xPT09VyYmKFc9WiksW1csVz09PVo/MDo0LVcl'@;
put 'NF19ZnVuY3Rpb24gTihWLFosVyl7Zm9yKHZhciBxLFE9W10sdGU9Wjt0ZTxXO3RlKz0zKVEucHVzaChEWyhxPShWW3RlXTw8MTYmMTY3MTE2ODApKyhWW3RlKzFdPDw4JjY1MjgwKSsoMjU1JlZbdGUrMl0pKT4+MTgmNjNdK0RbcT4+MTImNjNdK0RbcT4+NiY2M10rRFs2MyZxXSk7cmV0dXJu'@;
put 'IFEuam9pbigiIil9UFs0NV09NjIsUFs5NV09NjN9LDM1NTA6ZnVuY3Rpb24odyxBLEQpeyFmdW5jdGlvbihQLFUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKF8scCl7aWYoIV8pdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gRShfLHApe18uc3VwZXJf'@;
put 'PXA7dmFyIEM9ZnVuY3Rpb24oKXt9O0MucHJvdG90eXBlPXAucHJvdG90eXBlLF8ucHJvdG90eXBlPW5ldyBDLF8ucHJvdG90eXBlLmNvbnN0cnVjdG9yPV99ZnVuY3Rpb24gayhfLHAsQyl7aWYoay5pc0JOKF8pKXJldHVybiBfO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhp'@;
put 'cy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1fJiYoImxlIiE9PXAmJiJiZSIhPT1wfHwoQz1wLHA9MTApLHRoaXMuX2luaXQoX3x8MCxwfHwxMCxDfHwiYmUiKSl9dmFyIEI7Im9iamVjdCI9PXR5cGVvZiBQP1AuZXhwb3J0cz1rOlUuQk49ayxrLkJOPWssay53b3JkU2l6ZT0yNjt0'@;
put 'cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkQoNjYwMSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBOKF8scCl7dmFyIEM9Xy5jaGFyQ29kZUF0KHApO3JldHVybiBDPj00OCYmQzw9NTc/Qy00ODpDPj02NSYmQzw9NzA/Qy01NTpD'@;
put 'Pj05NyYmQzw9MTAyP0MtODc6dm9pZCBJKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK18pfWZ1bmN0aW9uIFYoXyxwLEMpe3ZhciBLPU4oXyxDKTtyZXR1cm4gQy0xPj1wJiYoS3w9TihfLEMtMSk8PDQpLEt9ZnVuY3Rpb24gWihfLHAsQyxLKXtmb3IodmFyIG5lPTAsdWU9MCxoZT1NYXRo'@;
put 'Lm1pbihfLmxlbmd0aCxDKSx4ZT1wO3hlPGhlO3hlKyspe3ZhciBPZT1fLmNoYXJDb2RlQXQoeGUpLTQ4O25lKj1LLHVlPU9lPj00OT9PZS00OSsxMDpPZT49MTc/T2UtMTcrMTA6T2UsSShPZT49MCYmdWU8SywiSW52YWxpZCBjaGFyYWN0ZXIiKSxuZSs9dWV9cmV0dXJuIG5lfWZ1bmN0aW9u'@;
put 'IFcoXyxwKXtfLndvcmRzPXAud29yZHMsXy5sZW5ndGg9cC5sZW5ndGgsXy5uZWdhdGl2ZT1wLm5lZ2F0aXZlLF8ucmVkPXAucmVkfWlmKGsuaXNCTj1mdW5jdGlvbihfKXtyZXR1cm4gXyBpbnN0YW5jZW9mIGt8fG51bGwhPT1fJiYib2JqZWN0Ij09dHlwZW9mIF8mJl8uY29uc3RydWN0b3Iu'@;
put 'd29yZFNpemU9PT1rLndvcmRTaXplJiZBcnJheS5pc0FycmF5KF8ud29yZHMpfSxrLm1heD1mdW5jdGlvbihfLHApe3JldHVybiBfLmNtcChwKT4wP186cH0say5taW49ZnVuY3Rpb24oXyxwKXtyZXR1cm4gXy5jbXAocCk8MD9fOnB9LGsucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKF8scCxD'@;
put 'KXtpZigibnVtYmVyIj09dHlwZW9mIF8pcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoXyxwLEMpO2lmKCJvYmplY3QiPT10eXBlb2YgXylyZXR1cm4gdGhpcy5faW5pdEFycmF5KF8scCxDKTsiaGV4Ij09PXAmJihwPTE2KSxJKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpO3ZhciBLPTA7Ii0iPT09'@;
put 'KF89Xy50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihLKyssdGhpcy5uZWdhdGl2ZT0xKSxLPF8ubGVuZ3RoJiYoMTY9PT1wP3RoaXMuX3BhcnNlSGV4KF8sSyxDKToodGhpcy5fcGFyc2VCYXNlKF8scCxLKSwibGUiPT09QyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJh'@;
put 'eSgpLHAsQykpKX0say5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oXyxwLEMpe188MCYmKHRoaXMubmVnYXRpdmU9MSxfPS1fKSxfPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZfXSx0aGlzLmxlbmd0aD0xKTpfPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3'@;
put 'MTA4ODYzJl8sXy82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KEkoXzw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZfLF8vNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJy'@;
put 'YXkoKSxwLEMpfSxrLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKF8scCxDKXtpZihJKCJudW1iZXIiPT10eXBlb2YgXy5sZW5ndGgpLF8ubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKF8ubGVuZ3Ro'@;
put 'LzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEs9MDtLPHRoaXMubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPTA7dmFyIG5lLHVlLGhlPTA7aWYoImJlIj09PUMpZm9yKEs9Xy5sZW5ndGgtMSxuZT0wO0s+PTA7Sy09Myl0aGlzLndvcmRzW25lXXw9KHVlPV9b'@;
put 'S118X1tLLTFdPDw4fF9bSy0yXTw8MTYpPDxoZSY2NzEwODg2Myx0aGlzLndvcmRzW25lKzFdPXVlPj4+MjYtaGUmNjcxMDg4NjMsKGhlKz0yNCk+PTI2JiYoaGUtPTI2LG5lKyspO2Vsc2UgaWYoImxlIj09PUMpZm9yKEs9MCxuZT0wO0s8Xy5sZW5ndGg7Sys9Myl0aGlzLndvcmRzW25lXXw9'@;
put 'KHVlPV9bS118X1tLKzFdPDw4fF9bSysyXTw8MTYpPDxoZSY2NzEwODg2Myx0aGlzLndvcmRzW25lKzFdPXVlPj4+MjYtaGUmNjcxMDg4NjMsKGhlKz0yNCk+PTI2JiYoaGUtPTI2LG5lKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSxrLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oXyxw'@;
put 'LEMpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoXy5sZW5ndGgtcCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgSz0wO0s8dGhpcy5sZW5ndGg7SysrKXRoaXMud29yZHNbS109MDt2YXIgbmUsdWU9MCxoZT0wO2lmKCJiZSI9PT1DKWZvcihLPV8ubGVuZ3Ro'@;
put 'LTE7Sz49cDtLLT0yKW5lPVYoXyxwLEspPDx1ZSx0aGlzLndvcmRzW2hlXXw9NjcxMDg4NjMmbmUsdWU+PTE4Pyh1ZS09MTgsdGhpcy53b3Jkc1toZSs9MV18PW5lPj4+MjYpOnVlKz04O2Vsc2UgZm9yKEs9KF8ubGVuZ3RoLXApJTI9PTA/cCsxOnA7SzxfLmxlbmd0aDtLKz0yKW5lPVYoXyxw'@;
put 'LEspPDx1ZSx0aGlzLndvcmRzW2hlXXw9NjcxMDg4NjMmbmUsdWU+PTE4Pyh1ZS09MTgsdGhpcy53b3Jkc1toZSs9MV18PW5lPj4+MjYpOnVlKz04O3RoaXMuX3N0cmlwKCl9LGsucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oXyxwLEMpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3Ro'@;
put 'PTE7Zm9yKHZhciBLPTAsbmU9MTtuZTw9NjcxMDg4NjM7bmUqPXApSysrO0stLSxuZT1uZS9wfDA7Zm9yKHZhciB1ZT1fLmxlbmd0aC1DLGhlPXVlJUsseGU9TWF0aC5taW4odWUsdWUtaGUpK0MsT2U9MCxIZT1DO0hlPHhlO0hlKz1LKU9lPVooXyxIZSxIZStLLHApLHRoaXMuaW11bG4obmUp'@;
put 'LHRoaXMud29yZHNbMF0rT2U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9T2U6dGhpcy5faWFkZG4oT2UpO2lmKDAhPT1oZSl7dmFyIEVlPTE7Zm9yKE9lPVooXyxIZSxfLmxlbmd0aCxwKSxIZT0wO0hlPGhlO0hlKyspRWUqPXA7dGhpcy5pbXVsbihFZSksdGhpcy53b3Jkc1swXStPZTw2NzEw'@;
put 'ODg2ND90aGlzLndvcmRzWzBdKz1PZTp0aGlzLl9pYWRkbihPZSl9dGhpcy5fc3RyaXAoKX0say5wcm90b3R5cGUuY29weT1mdW5jdGlvbihfKXtfLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aDtwKyspXy53b3Jkc1twXT10aGlzLndvcmRz'@;
put 'W3BdO18ubGVuZ3RoPXRoaXMubGVuZ3RoLF8ubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxfLnJlZD10aGlzLnJlZH0say5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oXyl7VyhfLHRoaXMpfSxrLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBfPW5ldyBrKG51bGwpO3JldHVybiB0aGlz'@;
put 'LmNvcHkoXyksX30say5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihfKXtmb3IoO3RoaXMubGVuZ3RoPF87KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30say5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53'@;
put 'b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0say5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVv'@;
put 'ZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7ay5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09en1jYXRjaHtrLnByb3RvdHlwZS5pbnNwZWN0PXp9ZWxzZSBrLnByb3RvdHlwZS5pbnNwZWN0PXo7ZnVuY3Rp'@;
put 'b24geigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBxPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFE9WzAsMCwyNSwxNiwxMiwxMSwx'@;
put 'MCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sdGU9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgs'@;
put 'NjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQz'@;
put 'MiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gYWUoXyxwLEMpe0MubmVnYXRpdmU9cC5uZWdhdGl2ZV5fLm5lZ2F0aXZlO3ZhciBLPV8ubGVuZ3RoK3AubGVuZ3RofDA7Qy5sZW5ndGg9SyxLPUstMXwwO3ZhciBuZT0wfF8ud29yZHNbMF0sdWU9MHxwLndv'@;
put 'cmRzWzBdLGhlPW5lKnVlLE9lPWhlLzY3MTA4ODY0fDA7Qy53b3Jkc1swXT02NzEwODg2MyZoZTtmb3IodmFyIEhlPTE7SGU8SztIZSsrKXtmb3IodmFyIEVlPU9lPj4+MjYsTGU9NjcxMDg4NjMmT2UsTmU9TWF0aC5taW4oSGUscC5sZW5ndGgtMSksS2U9TWF0aC5tYXgoMCxIZS1fLmxlbmd0'@;
put 'aCsxKTtLZTw9TmU7S2UrKylFZSs9KGhlPShuZT0wfF8ud29yZHNbSGUtS2V8MF0pKih1ZT0wfHAud29yZHNbS2VdKStMZSkvNjcxMDg4NjR8MCxMZT02NzEwODg2MyZoZTtDLndvcmRzW0hlXT0wfExlLE9lPTB8RWV9cmV0dXJuIDAhPT1PZT9DLndvcmRzW0hlXT0wfE9lOkMubGVuZ3RoLS0s'@;
put 'Qy5fc3RyaXAoKX1rLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihfLHApe3ZhciBDO2lmKHA9MHxwfHwxLDE2PT09KF89X3x8MTApfHwiaGV4Ij09PV8pe0M9IiI7Zm9yKHZhciBLPTAsbmU9MCx1ZT0wO3VlPHRoaXMubGVuZ3RoO3VlKyspe3ZhciBoZT10aGlzLndvcmRzW3VlXSx4ZT0o'@;
put 'MTY3NzcyMTUmKGhlPDxLfG5lKSkudG9TdHJpbmcoMTYpO25lPWhlPj4+MjQtSyYxNjc3NzIxNSwoSys9Mik+PTI2JiYoSy09MjYsdWUtLSksQz0wIT09bmV8fHVlIT09dGhpcy5sZW5ndGgtMT9xWzYteGUubGVuZ3RoXSt4ZStDOnhlK0N9Zm9yKDAhPT1uZSYmKEM9bmUudG9TdHJpbmcoMTYp'@;
put 'K0MpO0MubGVuZ3RoJXAhPTA7KUM9IjAiK0M7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoQz0iLSIrQyksQ31pZihfPT09KDB8XykmJl8+PTImJl88PTM2KXt2YXIgT2U9UVtfXSxIZT10ZVtfXTtDPSIiO3ZhciBFZT10aGlzLmNsb25lKCk7Zm9yKEVlLm5lZ2F0aXZlPTA7IUVlLmlzWmVy'@;
put 'bygpOyl7dmFyIExlPUVlLm1vZHJuKEhlKS50b1N0cmluZyhfKTtDPShFZT1FZS5pZGl2bihIZSkpLmlzWmVybygpP0xlK0M6cVtPZS1MZS5sZW5ndGhdK0xlK0N9Zm9yKHRoaXMuaXNaZXJvKCkmJihDPSIwIitDKTtDLmxlbmd0aCVwIT0wOylDPSIwIitDO3JldHVybiAwIT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmKEM9Ii0iK0MpLEN9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxrLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBfPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9fKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10'@;
put 'aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Xys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1fOl99LGsu'@;
put 'cHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxCJiYoay5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oXyxwKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShCLF8scCl9KSxrLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKF8scCl7cmV0'@;
put 'dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksXyxwKX0say5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oXyxwLEMpe3RoaXMuX3N0cmlwKCk7dmFyIEs9dGhpcy5ieXRlTGVuZ3RoKCksbmU9Q3x8TWF0aC5tYXgoMSxLKTtJKEs8PW5lLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRl'@;
put 'c2lyZWQgbGVuZ3RoIiksSShuZT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgaGUseGUsdWU9KHhlPW5lLChoZT1fKS5hbGxvY1Vuc2FmZT9oZS5hbGxvY1Vuc2FmZSh4ZSk6bmV3IGhlKHhlKSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlrZSIrKCJsZSI9PT1wPyJMRSI6'@;
put 'IkJFIildKHVlLEspLHVlfSxrLnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihfLHApe2Zvcih2YXIgQz0wLEs9MCxuZT0wLHVlPTA7bmU8dGhpcy5sZW5ndGg7bmUrKyl7dmFyIGhlPXRoaXMud29yZHNbbmVdPDx1ZXxLO19bQysrXT0yNTUmaGUsQzxfLmxlbmd0aCYmKF9bQysr'@;
put 'XT1oZT4+OCYyNTUpLEM8Xy5sZW5ndGgmJihfW0MrK109aGU+PjE2JjI1NSksNj09PXVlPyhDPF8ubGVuZ3RoJiYoX1tDKytdPWhlPj4yNCYyNTUpLEs9MCx1ZT0wKTooSz1oZT4+PjI0LHVlKz0yKX1pZihDPF8ubGVuZ3RoKWZvcihfW0MrK109SztDPF8ubGVuZ3RoOylfW0MrK109MH0say5w'@;
put 'cm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oXyxwKXtmb3IodmFyIEM9Xy5sZW5ndGgtMSxLPTAsbmU9MCx1ZT0wO25lPHRoaXMubGVuZ3RoO25lKyspe3ZhciBoZT10aGlzLndvcmRzW25lXTw8dWV8SztfW0MtLV09MjU1JmhlLEM+PTAmJihfW0MtLV09aGU+PjgmMjU1KSxDPj0w'@;
put 'JiYoX1tDLS1dPWhlPj4xNiYyNTUpLDY9PT11ZT8oQz49MCYmKF9bQy0tXT1oZT4+MjQmMjU1KSxLPTAsdWU9MCk6KEs9aGU+Pj4yNCx1ZSs9Mil9aWYoQz49MClmb3IoX1tDLS1dPUs7Qz49MDspX1tDLS1dPTB9LGsucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihf'@;
put 'KXtyZXR1cm4gMzItTWF0aC5jbHozMihfKX06ZnVuY3Rpb24oXyl7dmFyIHA9XyxDPTA7cmV0dXJuIHA+PTQwOTYmJihDKz0xMyxwPj4+PTEzKSxwPj02NCYmKEMrPTcscD4+Pj03KSxwPj04JiYoQys9NCxwPj4+PTQpLHA+PTImJihDKz0yLHA+Pj49MiksQytwfSxrLnByb3RvdHlwZS5femVy'@;
put 'b0JpdHM9ZnVuY3Rpb24oXyl7aWYoMD09PV8pcmV0dXJuIDI2O3ZhciBwPV8sQz0wO3JldHVybiEoODE5MSZwKSYmKEMrPTEzLHA+Pj49MTMpLCEoMTI3JnApJiYoQys9NyxwPj4+PTcpLCEoMTUmcCkmJihDKz00LHA+Pj49NCksISgzJnApJiYoQys9MixwPj4+PTIpLCEoMSZwKSYmQysrLEN9'@;
put 'LGsucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBwPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK3B9LGsucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1'@;
put 'cm4gMDtmb3IodmFyIF89MCxwPTA7cDx0aGlzLmxlbmd0aDtwKyspe3ZhciBDPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbcF0pO2lmKF8rPUMsMjYhPT1DKWJyZWFrfXJldHVybiBffSxrLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJp'@;
put 'dExlbmd0aCgpLzgpfSxrLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24oXyl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oXykuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxrLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy50ZXN0bihf'@;
put 'LTEpP3RoaXMubm90bihfKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxrLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0say5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LGsucHJvdG90'@;
put 'eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LGsucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oXyl7Zm9yKDt0aGlzLmxlbmd0aDxfLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgcD0wO3A8'@;
put 'Xy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twXXxfLndvcmRzW3BdO3JldHVybiB0aGlzLl9zdHJpcCgpfSxrLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oXyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfF8ubmVnYXRpdmUpKSx0aGlzLml1b3IoXyl9LGsucHJvdG90eXBl'@;
put 'Lm9yPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmxlbmd0aD5fLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKF8pOl8uY2xvbmUoKS5pb3IodGhpcyl9LGsucHJvdG90eXBlLnVvcj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5sZW5ndGg+Xy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoXyk6Xy5j'@;
put 'bG9uZSgpLml1b3IodGhpcyl9LGsucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKF8pe3ZhciBwO3A9dGhpcy5sZW5ndGg+Xy5sZW5ndGg/Xzp0aGlzO2Zvcih2YXIgQz0wO0M8cC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109dGhpcy53b3Jkc1tDXSZfLndvcmRzW0NdO3JldHVybiB0aGlzLmxl'@;
put 'bmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxrLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKF8pe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxfLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChfKX0say5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmxlbmd0aD5fLmxlbmd0'@;
put 'aD90aGlzLmNsb25lKCkuaWFuZChfKTpfLmNsb25lKCkuaWFuZCh0aGlzKX0say5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5sZW5ndGg+Xy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKF8pOl8uY2xvbmUoKS5pdWFuZCh0aGlzKX0say5wcm90b3R5cGUuaXV4b3I9'@;
put 'ZnVuY3Rpb24oXyl7dmFyIHAsQzt0aGlzLmxlbmd0aD5fLmxlbmd0aD8ocD10aGlzLEM9Xyk6KHA9XyxDPXRoaXMpO2Zvcih2YXIgSz0wO0s8Qy5sZW5ndGg7SysrKXRoaXMud29yZHNbS109cC53b3Jkc1tLXV5DLndvcmRzW0tdO2lmKHRoaXMhPT1wKWZvcig7SzxwLmxlbmd0aDtLKyspdGhp'@;
put 'cy53b3Jkc1tLXT1wLndvcmRzW0tdO3JldHVybiB0aGlzLmxlbmd0aD1wLmxlbmd0aCx0aGlzLl9zdHJpcCgpfSxrLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKF8pe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxfLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihfKX0say5wcm90b3R5cGUueG9yPWZ1'@;
put 'bmN0aW9uKF8pe3JldHVybiB0aGlzLmxlbmd0aD5fLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihfKTpfLmNsb25lKCkuaXhvcih0aGlzKX0say5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5sZW5ndGg+Xy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKF8pOl8uY2xv'@;
put 'bmUoKS5pdXhvcih0aGlzKX0say5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24oXyl7SSgibnVtYmVyIj09dHlwZW9mIF8mJl8+PTApO3ZhciBwPTB8TWF0aC5jZWlsKF8vMjYpLEM9XyUyNjt0aGlzLl9leHBhbmQocCksQz4wJiZwLS07Zm9yKHZhciBLPTA7SzxwO0srKyl0aGlzLndvcmRzW0td'@;
put 'PTY3MTA4ODYzJn50aGlzLndvcmRzW0tdO3JldHVybiBDPjAmJih0aGlzLndvcmRzW0tdPX50aGlzLndvcmRzW0tdJjY3MTA4ODYzPj4yNi1DKSx0aGlzLl9zdHJpcCgpfSxrLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oXyl9LGsucHJvdG90'@;
put 'eXBlLnNldG49ZnVuY3Rpb24oXyxwKXtJKCJudW1iZXIiPT10eXBlb2YgXyYmXz49MCk7dmFyIEM9Xy8yNnwwLEs9XyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEMrMSksdGhpcy53b3Jkc1tDXT1wP3RoaXMud29yZHNbQ118MTw8Szp0aGlzLndvcmRzW0NdJn4oMTw8SyksdGhpcy5fc3RyaXAo'@;
put 'KX0say5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihfKXt2YXIgcCxDLEs7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1fLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAscD10aGlzLmlzdWIoXyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5l'@;
put 'Z2F0aXZlJiYwIT09Xy5uZWdhdGl2ZSlyZXR1cm4gXy5uZWdhdGl2ZT0wLHA9dGhpcy5pc3ViKF8pLF8ubmVnYXRpdmU9MSxwLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPl8ubGVuZ3RoPyhDPXRoaXMsSz1fKTooQz1fLEs9dGhpcyk7Zm9yKHZhciBuZT0wLHVlPTA7dWU8Sy5sZW5ndGg7dWUr'@;
put 'Kyl0aGlzLndvcmRzW3VlXT02NzEwODg2MyYocD0oMHxDLndvcmRzW3VlXSkrKDB8Sy53b3Jkc1t1ZV0pK25lKSxuZT1wPj4+MjY7Zm9yKDswIT09bmUmJnVlPEMubGVuZ3RoO3VlKyspdGhpcy53b3Jkc1t1ZV09NjcxMDg4NjMmKHA9KDB8Qy53b3Jkc1t1ZV0pK25lKSxuZT1wPj4+MjY7aWYo'@;
put 'dGhpcy5sZW5ndGg9Qy5sZW5ndGgsMCE9PW5lKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPW5lLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihDIT09dGhpcylmb3IoO3VlPEMubGVuZ3RoO3VlKyspdGhpcy53b3Jkc1t1ZV09Qy53b3Jkc1t1ZV07cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLmFkZD1m'@;
put 'dW5jdGlvbihfKXt2YXIgcDtyZXR1cm4gMCE9PV8ubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhfLm5lZ2F0aXZlPTAscD10aGlzLnN1YihfKSxfLm5lZ2F0aXZlXj0xLHApOjA9PT1fLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLHA9Xy5zdWIodGhp'@;
put 'cyksdGhpcy5uZWdhdGl2ZT0xLHApOnRoaXMubGVuZ3RoPl8ubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKF8pOl8uY2xvbmUoKS5pYWRkKHRoaXMpfSxrLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKF8pe2lmKDAhPT1fLm5lZ2F0aXZlKXtfLm5lZ2F0aXZlPTA7dmFyIHA9dGhpcy5pYWRkKF8p'@;
put 'O3JldHVybiBfLm5lZ2F0aXZlPTEscC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChfKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxLLG5lPXRoaXMuY21wKF8pO2lmKDA9PT1uZSlyZXR1cm4g'@;
put 'dGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7bmU+MD8oQz10aGlzLEs9Xyk6KEM9XyxLPXRoaXMpO2Zvcih2YXIgdWU9MCxoZT0wO2hlPEsubGVuZ3RoO2hlKyspdWU9KHA9KDB8Qy53b3Jkc1toZV0pLSgwfEsud29yZHNbaGVdKSt1ZSk+PjI2LHRo'@;
put 'aXMud29yZHNbaGVdPTY3MTA4ODYzJnA7Zm9yKDswIT09dWUmJmhlPEMubGVuZ3RoO2hlKyspdWU9KHA9KDB8Qy53b3Jkc1toZV0pK3VlKT4+MjYsdGhpcy53b3Jkc1toZV09NjcxMDg4NjMmcDtpZigwPT09dWUmJmhlPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2hlPEMubGVuZ3RoO2hlKysp'@;
put 'dGhpcy53b3Jkc1toZV09Qy53b3Jkc1toZV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGhlKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5fc3RyaXAoKX0say5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1'@;
put 'YihfKX07dmFyIHNlPWZ1bmN0aW9uKF8scCxDKXt2YXIgSyxuZSx1ZSxoZT1fLndvcmRzLHhlPXAud29yZHMsT2U9Qy53b3JkcyxIZT0wLEVlPTB8aGVbMF0sTGU9ODE5MSZFZSxOZT1FZT4+PjEzLEtlPTB8aGVbMV0sVWU9ODE5MSZLZSxYZT1LZT4+PjEzLGF0PTB8aGVbMl0sRmU9ODE5MSZh'@;
put 'dCxDZT1hdD4+PjEzLERlPTB8aGVbM10sUmU9ODE5MSZEZSxldD1EZT4+PjEzLG50PTB8aGVbNF0sR2U9ODE5MSZudCxkdD1udD4+PjEzLFRlPTB8aGVbNV0sQWU9ODE5MSZUZSxCZT1UZT4+PjEzLG90PTB8aGVbNl0sbHQ9ODE5MSZvdCxDdD1vdD4+PjEzLEZ0PTB8aGVbN10sUnQ9ODE5MSZG'@;
put 'dCxYdD1GdD4+PjEzLFNuPTB8aGVbOF0senQ9ODE5MSZTbix2bj1Tbj4+PjEzLEJuPTB8aGVbOV0sdG49ODE5MSZCbixabj1Cbj4+PjEzLE9uPTB8eGVbMF0scHQ9ODE5MSZPbixmbj1Pbj4+PjEzLGRuPTB8eGVbMV0sTXQ9ODE5MSZkbixZdD1kbj4+PjEzLF90PTB8eGVbMl0sanQ9ODE5MSZf'@;
put 'dCxwbj1fdD4+PjEzLHJ0PTB8eGVbM10sRXQ9ODE5MSZydCxRdD1ydD4+PjEzLFR0PTB8eGVbNF0sbXQ9ODE5MSZUdCxHdD1UdD4+PjEzLGtuPTB8eGVbNV0sQnQ9ODE5MSZrbixibj1rbj4+PjEzLENuPTB8eGVbNl0sZW49ODE5MSZDbixQbj1Dbj4+PjEzLHduPTB8eGVbN10sJHQ9ODE5MSZ3'@;
put 'bixXbj13bj4+PjEzLGNpPTB8eGVbOF0sbG49ODE5MSZjaSxubj1jaT4+PjEzLHVpPTB8eGVbOV0sQXI9ODE5MSZ1aSxtcj11aT4+PjEzO0MubmVnYXRpdmU9Xy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEMubGVuZ3RoPTE5O3ZhciB5aT0oSGUrKEs9TWF0aC5pbXVsKExlLHB0KSl8MCkrKCg4MTkx'@;
put 'JihuZT0obmU9TWF0aC5pbXVsKExlLGZuKSkrTWF0aC5pbXVsKE5lLHB0KXwwKSk8PDEzKXwwO0hlPSgodWU9TWF0aC5pbXVsKE5lLGZuKSkrKG5lPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxLPU1hdGguaW11bChVZSxwdCksbmU9KG5lPU1hdGguaW11bChVZSxmbikpK01h'@;
put 'dGguaW11bChYZSxwdCl8MCx1ZT1NYXRoLmltdWwoWGUsZm4pO3ZhciAkcj0oSGUrKEs9SytNYXRoLmltdWwoTGUsTXQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChMZSxZdCl8MCkrTWF0aC5pbXVsKE5lLE10KXwwKSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKE5l'@;
put 'LFl0KXwwKSsobmU+Pj4xMyl8MCkrKCRyPj4+MjYpfDAsJHImPTY3MTA4ODYzLEs9TWF0aC5pbXVsKEZlLHB0KSxuZT0obmU9TWF0aC5pbXVsKEZlLGZuKSkrTWF0aC5pbXVsKENlLHB0KXwwLHVlPU1hdGguaW11bChDZSxmbiksSz1LK01hdGguaW11bChVZSxNdCl8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoWGUsTXQpfDAsdWU9dWUrTWF0aC5pbXVsKFhlLFl0KXwwO3ZhciBKaT0oSGUrKEs9SytNYXRoLmltdWwoTGUsanQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChMZSxwbil8MCkrTWF0aC5pbXVsKE5lLGp0KXwwKSk8PDEzKXww'@;
put 'O0hlPSgodWU9dWUrTWF0aC5pbXVsKE5lLHBuKXwwKSsobmU+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKFJlLHB0KSxuZT0obmU9TWF0aC5pbXVsKFJlLGZuKSkrTWF0aC5pbXVsKGV0LHB0KXwwLHVlPU1hdGguaW11bChldCxmbiksSz1LK01hdGguaW11'@;
put 'bChGZSxNdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEZlLFl0KXwwKStNYXRoLmltdWwoQ2UsTXQpfDAsdWU9dWUrTWF0aC5pbXVsKENlLFl0KXwwLEs9SytNYXRoLmltdWwoVWUsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKFhlLGp0KXwwLHVlPXVlK01h'@;
put 'dGguaW11bChYZSxwbil8MDt2YXIgeXI9KEhlKyhLPUsrTWF0aC5pbXVsKExlLEV0KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChOZSxFdCl8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChOZSxRdCl8MCkrKG5lPj4+MTMpfDAp'@;
put 'Kyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxLPU1hdGguaW11bChHZSxwdCksbmU9KG5lPU1hdGguaW11bChHZSxmbikpK01hdGguaW11bChkdCxwdCl8MCx1ZT1NYXRoLmltdWwoZHQsZm4pLEs9SytNYXRoLmltdWwoUmUsTXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChSZSxZdCl8MCkrTWF0'@;
put 'aC5pbXVsKGV0LE10KXwwLHVlPXVlK01hdGguaW11bChldCxZdCl8MCxLPUsrTWF0aC5pbXVsKEZlLGp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChDZSxqdCl8MCx1ZT11ZStNYXRoLmltdWwoQ2UscG4pfDAsSz1LK01hdGguaW11bChVZSxFdCl8MCxuZT0o'@;
put 'bmU9bmUrTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoWGUsRXQpfDAsdWU9dWUrTWF0aC5pbXVsKFhlLFF0KXwwO3ZhciBJaT0oSGUrKEs9SytNYXRoLmltdWwoTGUsbXQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChMZSxHdCl8MCkrTWF0aC5pbXVsKE5lLG10KXww'@;
put 'KSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKE5lLEd0KXwwKSsobmU+Pj4xMyl8MCkrKElpPj4+MjYpfDAsSWkmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKEFlLHB0KSxuZT0obmU9TWF0aC5pbXVsKEFlLGZuKSkrTWF0aC5pbXVsKEJlLHB0KXwwLHVlPU1hdGguaW11bChCZSxmbiksSz1L'@;
put 'K01hdGguaW11bChHZSxNdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEdlLFl0KXwwKStNYXRoLmltdWwoZHQsTXQpfDAsdWU9dWUrTWF0aC5pbXVsKGR0LFl0KXwwLEs9SytNYXRoLmltdWwoUmUsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGV0LGp0KXww'@;
put 'LHVlPXVlK01hdGguaW11bChldCxwbil8MCxLPUsrTWF0aC5pbXVsKEZlLEV0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsUXQpfDApK01hdGguaW11bChDZSxFdCl8MCx1ZT11ZStNYXRoLmltdWwoQ2UsUXQpfDAsSz1LK01hdGguaW11bChVZSxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVs'@;
put 'KFVlLEd0KXwwKStNYXRoLmltdWwoWGUsbXQpfDAsdWU9dWUrTWF0aC5pbXVsKFhlLEd0KXwwO3ZhciBubz0oSGUrKEs9SytNYXRoLmltdWwoTGUsQnQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChMZSxibil8MCkrTWF0aC5pbXVsKE5lLEJ0KXwwKSk8PDEzKXwwO0hlPSgo'@;
put 'dWU9dWUrTWF0aC5pbXVsKE5lLGJuKXwwKSsobmU+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEs9TWF0aC5pbXVsKGx0LHB0KSxuZT0obmU9TWF0aC5pbXVsKGx0LGZuKSkrTWF0aC5pbXVsKEN0LHB0KXwwLHVlPU1hdGguaW11bChDdCxmbiksSz1LK01hdGguaW11bChBZSxN'@;
put 'dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLFl0KXwwKStNYXRoLmltdWwoQmUsTXQpfDAsdWU9dWUrTWF0aC5pbXVsKEJlLFl0KXwwLEs9SytNYXRoLmltdWwoR2UsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bChHZSxwbil8MCkrTWF0aC5pbXVsKGR0LGp0KXwwLHVlPXVlK01hdGguaW11'@;
put 'bChkdCxwbil8MCxLPUsrTWF0aC5pbXVsKFJlLEV0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsUXQpfDApK01hdGguaW11bChldCxFdCl8MCx1ZT11ZStNYXRoLmltdWwoZXQsUXQpfDAsSz1LK01hdGguaW11bChGZSxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEZlLEd0KXwwKStNYXRo'@;
put 'LmltdWwoQ2UsbXQpfDAsdWU9dWUrTWF0aC5pbXVsKENlLEd0KXwwLEs9SytNYXRoLmltdWwoVWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxibil8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLHVlPXVlK01hdGguaW11bChYZSxibil8MDt2YXIgem49KEhlKyhLPUsrTWF0aC5pbXVsKExl'@;
put 'LGVuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChOZSxlbil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChOZSxQbil8MCkrKG5lPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxLPU1hdGguaW11bChSdCxwdCks'@;
put 'bmU9KG5lPU1hdGguaW11bChSdCxmbikpK01hdGguaW11bChYdCxwdCl8MCx1ZT1NYXRoLmltdWwoWHQsZm4pLEs9SytNYXRoLmltdWwobHQsTXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxZdCl8MCkrTWF0aC5pbXVsKEN0LE10KXwwLHVlPXVlK01hdGguaW11bChDdCxZdCl8MCxLPUsr'@;
put 'TWF0aC5pbXVsKEFlLGp0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUscG4pfDApK01hdGguaW11bChCZSxqdCl8MCx1ZT11ZStNYXRoLmltdWwoQmUscG4pfDAsSz1LK01hdGguaW11bChHZSxFdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEdlLFF0KXwwKStNYXRoLmltdWwoZHQsRXQpfDAs'@;
put 'dWU9dWUrTWF0aC5pbXVsKGR0LFF0KXwwLEs9SytNYXRoLmltdWwoUmUsbXQpfDAsbmU9KG5lPW5lK01hdGguaW11bChSZSxHdCl8MCkrTWF0aC5pbXVsKGV0LG10KXwwLHVlPXVlK01hdGguaW11bChldCxHdCl8MCxLPUsrTWF0aC5pbXVsKEZlLEJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwo'@;
put 'RmUsYm4pfDApK01hdGguaW11bChDZSxCdCl8MCx1ZT11ZStNYXRoLmltdWwoQ2UsYm4pfDAsSz1LK01hdGguaW11bChVZSxlbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoWGUsZW4pfDAsdWU9dWUrTWF0aC5pbXVsKFhlLFBuKXwwO3ZhciBaaT0oSGUrKEs9'@;
put 'SytNYXRoLmltdWwoTGUsJHQpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChMZSxXbil8MCkrTWF0aC5pbXVsKE5lLCR0KXwwKSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKE5lLFduKXwwKSsobmU+Pj4xMyl8MCkrKFppPj4+MjYpfDAsWmkmPTY3MTA4ODYzLEs9TWF0'@;
put 'aC5pbXVsKHp0LHB0KSxuZT0obmU9TWF0aC5pbXVsKHp0LGZuKSkrTWF0aC5pbXVsKHZuLHB0KXwwLHVlPU1hdGguaW11bCh2bixmbiksSz1LK01hdGguaW11bChSdCxNdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFJ0LFl0KXwwKStNYXRoLmltdWwoWHQsTXQpfDAsdWU9dWUrTWF0aC5pbXVs'@;
put 'KFh0LFl0KXwwLEs9SytNYXRoLmltdWwobHQsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bChsdCxwbil8MCkrTWF0aC5pbXVsKEN0LGp0KXwwLHVlPXVlK01hdGguaW11bChDdCxwbil8MCxLPUsrTWF0aC5pbXVsKEFlLEV0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoQWUsUXQpfDApK01hdGgu'@;
put 'aW11bChCZSxFdCl8MCx1ZT11ZStNYXRoLmltdWwoQmUsUXQpfDAsSz1LK01hdGguaW11bChHZSxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEdlLEd0KXwwKStNYXRoLmltdWwoZHQsbXQpfDAsdWU9dWUrTWF0aC5pbXVsKGR0LEd0KXwwLEs9SytNYXRoLmltdWwoUmUsQnQpfDAsbmU9KG5l'@;
put 'PW5lK01hdGguaW11bChSZSxibil8MCkrTWF0aC5pbXVsKGV0LEJ0KXwwLHVlPXVlK01hdGguaW11bChldCxibil8MCxLPUsrTWF0aC5pbXVsKEZlLGVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRmUsUG4pfDApK01hdGguaW11bChDZSxlbil8MCx1ZT11ZStNYXRoLmltdWwoQ2UsUG4pfDAs'@;
put 'Sz1LK01hdGguaW11bChVZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFVlLFduKXwwKStNYXRoLmltdWwoWGUsJHQpfDAsdWU9dWUrTWF0aC5pbXVsKFhlLFduKXwwO3ZhciBXaT0oSGUrKEs9SytNYXRoLmltdWwoTGUsbG4pfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChM'@;
put 'ZSxubil8MCkrTWF0aC5pbXVsKE5lLGxuKXwwKSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKE5lLG5uKXwwKSsobmU+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKHRuLHB0KSxuZT0obmU9TWF0aC5pbXVsKHRuLGZuKSkrTWF0aC5pbXVsKFpuLHB0'@;
put 'KXwwLHVlPU1hdGguaW11bChabixmbiksSz1LK01hdGguaW11bCh6dCxNdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHp0LFl0KXwwKStNYXRoLmltdWwodm4sTXQpfDAsdWU9dWUrTWF0aC5pbXVsKHZuLFl0KXwwLEs9SytNYXRoLmltdWwoUnQsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bChS'@;
put 'dCxwbil8MCkrTWF0aC5pbXVsKFh0LGp0KXwwLHVlPXVlK01hdGguaW11bChYdCxwbil8MCxLPUsrTWF0aC5pbXVsKGx0LEV0KXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsUXQpfDApK01hdGguaW11bChDdCxFdCl8MCx1ZT11ZStNYXRoLmltdWwoQ3QsUXQpfDAsSz1LK01hdGguaW11bChB'@;
put 'ZSxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLEd0KXwwKStNYXRoLmltdWwoQmUsbXQpfDAsdWU9dWUrTWF0aC5pbXVsKEJlLEd0KXwwLEs9SytNYXRoLmltdWwoR2UsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChHZSxibil8MCkrTWF0aC5pbXVsKGR0LEJ0KXwwLHVlPXVlK01hdGgu'@;
put 'aW11bChkdCxibil8MCxLPUsrTWF0aC5pbXVsKFJlLGVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUmUsUG4pfDApK01hdGguaW11bChldCxlbil8MCx1ZT11ZStNYXRoLmltdWwoZXQsUG4pfDAsSz1LK01hdGguaW11bChGZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEZlLFduKXwwKStN'@;
put 'YXRoLmltdWwoQ2UsJHQpfDAsdWU9dWUrTWF0aC5pbXVsKENlLFduKXwwLEs9SytNYXRoLmltdWwoVWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKFhlLGxuKXwwLHVlPXVlK01hdGguaW11bChYZSxubil8MDt2YXIgb289KEhlKyhLPUsrTWF0aC5pbXVs'@;
put 'KExlLEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoTGUsbXIpfDApK01hdGguaW11bChOZSxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChOZSxtcil8MCkrKG5lPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxLPU1hdGguaW11bCh0bixN'@;
put 'dCksbmU9KG5lPU1hdGguaW11bCh0bixZdCkpK01hdGguaW11bChabixNdCl8MCx1ZT1NYXRoLmltdWwoWm4sWXQpLEs9SytNYXRoLmltdWwoenQsanQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh6dCxwbil8MCkrTWF0aC5pbXVsKHZuLGp0KXwwLHVlPXVlK01hdGguaW11bCh2bixwbil8MCxL'@;
put 'PUsrTWF0aC5pbXVsKFJ0LEV0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsUXQpfDApK01hdGguaW11bChYdCxFdCl8MCx1ZT11ZStNYXRoLmltdWwoWHQsUXQpfDAsSz1LK01hdGguaW11bChsdCxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LEd0KXwwKStNYXRoLmltdWwoQ3QsbXQp'@;
put 'fDAsdWU9dWUrTWF0aC5pbXVsKEN0LEd0KXwwLEs9SytNYXRoLmltdWwoQWUsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxibil8MCkrTWF0aC5pbXVsKEJlLEJ0KXwwLHVlPXVlK01hdGguaW11bChCZSxibil8MCxLPUsrTWF0aC5pbXVsKEdlLGVuKXwwLG5lPShuZT1uZStNYXRoLmlt'@;
put 'dWwoR2UsUG4pfDApK01hdGguaW11bChkdCxlbil8MCx1ZT11ZStNYXRoLmltdWwoZHQsUG4pfDAsSz1LK01hdGguaW11bChSZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFJlLFduKXwwKStNYXRoLmltdWwoZXQsJHQpfDAsdWU9dWUrTWF0aC5pbXVsKGV0LFduKXwwLEs9SytNYXRoLmlt'@;
put 'dWwoRmUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChGZSxubil8MCkrTWF0aC5pbXVsKENlLGxuKXwwLHVlPXVlK01hdGguaW11bChDZSxubil8MDt2YXIgaG89KEhlKyhLPUsrTWF0aC5pbXVsKFVlLEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVWUsbXIpfDApK01h'@;
put 'dGguaW11bChYZSxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChYZSxtcil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxLPU1hdGguaW11bCh0bixqdCksbmU9KG5lPU1hdGguaW11bCh0bixwbikpK01hdGguaW11bChabixqdCl8MCx1ZT1NYXRo'@;
put 'LmltdWwoWm4scG4pLEs9SytNYXRoLmltdWwoenQsRXQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh6dCxRdCl8MCkrTWF0aC5pbXVsKHZuLEV0KXwwLHVlPXVlK01hdGguaW11bCh2bixRdCl8MCxLPUsrTWF0aC5pbXVsKFJ0LG10KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsR3QpfDApK01h'@;
put 'dGguaW11bChYdCxtdCl8MCx1ZT11ZStNYXRoLmltdWwoWHQsR3QpfDAsSz1LK01hdGguaW11bChsdCxCdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGx0LGJuKXwwKStNYXRoLmltdWwoQ3QsQnQpfDAsdWU9dWUrTWF0aC5pbXVsKEN0LGJuKXwwLEs9SytNYXRoLmltdWwoQWUsZW4pfDAsbmU9'@;
put 'KG5lPW5lK01hdGguaW11bChBZSxQbil8MCkrTWF0aC5pbXVsKEJlLGVuKXwwLHVlPXVlK01hdGguaW11bChCZSxQbil8MCxLPUsrTWF0aC5pbXVsKEdlLCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoR2UsV24pfDApK01hdGguaW11bChkdCwkdCl8MCx1ZT11ZStNYXRoLmltdWwoZHQsV24p'@;
put 'fDAsSz1LK01hdGguaW11bChSZSxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFJlLG5uKXwwKStNYXRoLmltdWwoZXQsbG4pfDAsdWU9dWUrTWF0aC5pbXVsKGV0LG5uKXwwO3ZhciBMcj0oSGUrKEs9SytNYXRoLmltdWwoRmUsQXIpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11'@;
put 'bChGZSxtcil8MCkrTWF0aC5pbXVsKENlLEFyKXwwKSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKENlLG1yKXwwKSsobmU+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEs9TWF0aC5pbXVsKHRuLEV0KSxuZT0obmU9TWF0aC5pbXVsKHRuLFF0KSkrTWF0aC5pbXVsKFpu'@;
put 'LEV0KXwwLHVlPU1hdGguaW11bChabixRdCksSz1LK01hdGguaW11bCh6dCxtdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHp0LEd0KXwwKStNYXRoLmltdWwodm4sbXQpfDAsdWU9dWUrTWF0aC5pbXVsKHZuLEd0KXwwLEs9SytNYXRoLmltdWwoUnQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11'@;
put 'bChSdCxibil8MCkrTWF0aC5pbXVsKFh0LEJ0KXwwLHVlPXVlK01hdGguaW11bChYdCxibil8MCxLPUsrTWF0aC5pbXVsKGx0LGVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwobHQsUG4pfDApK01hdGguaW11bChDdCxlbil8MCx1ZT11ZStNYXRoLmltdWwoQ3QsUG4pfDAsSz1LK01hdGguaW11'@;
put 'bChBZSwkdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEFlLFduKXwwKStNYXRoLmltdWwoQmUsJHQpfDAsdWU9dWUrTWF0aC5pbXVsKEJlLFduKXwwLEs9SytNYXRoLmltdWwoR2UsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChHZSxubil8MCkrTWF0aC5pbXVsKGR0LGxuKXwwLHVlPXVlK01h'@;
put 'dGguaW11bChkdCxubil8MDt2YXIgQmk9KEhlKyhLPUsrTWF0aC5pbXVsKFJlLEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUmUsbXIpfDApK01hdGguaW11bChldCxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChldCxtcil8MCkrKG5lPj4+MTMpfDAp'@;
put 'KyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxLPU1hdGguaW11bCh0bixtdCksbmU9KG5lPU1hdGguaW11bCh0bixHdCkpK01hdGguaW11bChabixtdCl8MCx1ZT1NYXRoLmltdWwoWm4sR3QpLEs9SytNYXRoLmltdWwoenQsQnQpfDAsbmU9KG5lPW5lK01hdGguaW11bCh6dCxibil8MCkrTWF0'@;
put 'aC5pbXVsKHZuLEJ0KXwwLHVlPXVlK01hdGguaW11bCh2bixibil8MCxLPUsrTWF0aC5pbXVsKFJ0LGVuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsUG4pfDApK01hdGguaW11bChYdCxlbil8MCx1ZT11ZStNYXRoLmltdWwoWHQsUG4pfDAsSz1LK01hdGguaW11bChsdCwkdCl8MCxuZT0o'@;
put 'bmU9bmUrTWF0aC5pbXVsKGx0LFduKXwwKStNYXRoLmltdWwoQ3QsJHQpfDAsdWU9dWUrTWF0aC5pbXVsKEN0LFduKXwwLEs9SytNYXRoLmltdWwoQWUsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKEJlLGxuKXwwLHVlPXVlK01hdGguaW11bChCZSxubil8'@;
put 'MDt2YXIgTG89KEhlKyhLPUsrTWF0aC5pbXVsKEdlLEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoR2UsbXIpfDApK01hdGguaW11bChkdCxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChkdCxtcil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExv'@;
put 'Jj02NzEwODg2MyxLPU1hdGguaW11bCh0bixCdCksbmU9KG5lPU1hdGguaW11bCh0bixibikpK01hdGguaW11bChabixCdCl8MCx1ZT1NYXRoLmltdWwoWm4sYm4pLEs9SytNYXRoLmltdWwoenQsZW4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh6dCxQbil8MCkrTWF0aC5pbXVsKHZuLGVuKXww'@;
put 'LHVlPXVlK01hdGguaW11bCh2bixQbil8MCxLPUsrTWF0aC5pbXVsKFJ0LCR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoUnQsV24pfDApK01hdGguaW11bChYdCwkdCl8MCx1ZT11ZStNYXRoLmltdWwoWHQsV24pfDAsSz1LK01hdGguaW11bChsdCxsbil8MCxuZT0obmU9bmUrTWF0aC5pbXVs'@;
put 'KGx0LG5uKXwwKStNYXRoLmltdWwoQ3QsbG4pfDAsdWU9dWUrTWF0aC5pbXVsKEN0LG5uKXwwO3ZhciBLbz0oSGUrKEs9SytNYXRoLmltdWwoQWUsQXIpfDApfDApKygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bChBZSxtcil8MCkrTWF0aC5pbXVsKEJlLEFyKXwwKSk8PDEzKXwwO0hlPSgo'@;
put 'dWU9dWUrTWF0aC5pbXVsKEJlLG1yKXwwKSsobmU+Pj4xMyl8MCkrKEtvPj4+MjYpfDAsS28mPTY3MTA4ODYzLEs9TWF0aC5pbXVsKHRuLGVuKSxuZT0obmU9TWF0aC5pbXVsKHRuLFBuKSkrTWF0aC5pbXVsKFpuLGVuKXwwLHVlPU1hdGguaW11bChabixQbiksSz1LK01hdGguaW11bCh6dCwk'@;
put 'dCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKHp0LFduKXwwKStNYXRoLmltdWwodm4sJHQpfDAsdWU9dWUrTWF0aC5pbXVsKHZuLFduKXwwLEs9SytNYXRoLmltdWwoUnQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChSdCxubil8MCkrTWF0aC5pbXVsKFh0LGxuKXwwLHVlPXVlK01hdGguaW11'@;
put 'bChYdCxubil8MDt2YXIgZXM9KEhlKyhLPUsrTWF0aC5pbXVsKGx0LEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwobHQsbXIpfDApK01hdGguaW11bChDdCxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChDdCxtcil8MCkrKG5lPj4+MTMpfDApKyhlcz4+'@;
put 'PjI2KXwwLGVzJj02NzEwODg2MyxLPU1hdGguaW11bCh0biwkdCksbmU9KG5lPU1hdGguaW11bCh0bixXbikpK01hdGguaW11bChabiwkdCl8MCx1ZT1NYXRoLmltdWwoWm4sV24pLEs9SytNYXRoLmltdWwoenQsbG4pfDAsbmU9KG5lPW5lK01hdGguaW11bCh6dCxubil8MCkrTWF0aC5pbXVs'@;
put 'KHZuLGxuKXwwLHVlPXVlK01hdGguaW11bCh2bixubil8MDt2YXIgRGM9KEhlKyhLPUsrTWF0aC5pbXVsKFJ0LEFyKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoUnQsbXIpfDApK01hdGguaW11bChYdCxBcil8MCkpPDwxMyl8MDtIZT0oKHVlPXVlK01hdGguaW11bChYdCxt'@;
put 'cil8MCkrKG5lPj4+MTMpfDApKyhEYz4+PjI2KXwwLERjJj02NzEwODg2MyxLPU1hdGguaW11bCh0bixsbiksbmU9KG5lPU1hdGguaW11bCh0bixubikpK01hdGguaW11bChabixsbil8MCx1ZT1NYXRoLmltdWwoWm4sbm4pO3ZhciB1Yz0oSGUrKEs9SytNYXRoLmltdWwoenQsQXIpfDApfDAp'@;
put 'KygoODE5MSYobmU9KG5lPW5lK01hdGguaW11bCh6dCxtcil8MCkrTWF0aC5pbXVsKHZuLEFyKXwwKSk8PDEzKXwwO0hlPSgodWU9dWUrTWF0aC5pbXVsKHZuLG1yKXwwKSsobmU+Pj4xMyl8MCkrKHVjPj4+MjYpfDAsdWMmPTY3MTA4ODYzO3ZhciBJbD0oSGUrKEs9TWF0aC5pbXVsKHRuLEFy'@;
put 'KSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKHRuLG1yKSkrTWF0aC5pbXVsKFpuLEFyKXwwKSk8PDEzKXwwO3JldHVybiBIZT0oKHVlPU1hdGguaW11bChabixtcikpKyhuZT4+PjEzKXwwKSsoSWw+Pj4yNil8MCxJbCY9NjcxMDg4NjMsT2VbMF09eWksT2VbMV09JHIsT2VbMl09Smks'@;
put 'T2VbM109eXIsT2VbNF09SWksT2VbNV09bm8sT2VbNl09em4sT2VbN109WmksT2VbOF09V2ksT2VbOV09b28sT2VbMTBdPWhvLE9lWzExXT1McixPZVsxMl09QmksT2VbMTNdPUxvLE9lWzE0XT1LbyxPZVsxNV09ZXMsT2VbMTZdPURjLE9lWzE3XT11YyxPZVsxOF09SWwsMCE9PUhlJiYoT2Vb'@;
put 'MTldPUhlLEMubGVuZ3RoKyspLEN9O2Z1bmN0aW9uIGRlKF8scCxDKXtDLm5lZ2F0aXZlPXAubmVnYXRpdmVeXy5uZWdhdGl2ZSxDLmxlbmd0aD1fLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIEs9MCxuZT0wLHVlPTA7dWU8Qy5sZW5ndGgtMTt1ZSsrKXt2YXIgaGU9bmU7bmU9MDtmb3IodmFy'@;
put 'IHhlPTY3MTA4ODYzJkssT2U9TWF0aC5taW4odWUscC5sZW5ndGgtMSksSGU9TWF0aC5tYXgoMCx1ZS1fLmxlbmd0aCsxKTtIZTw9T2U7SGUrKyl7dmFyIExlPSgwfF8ud29yZHNbdWUtSGVdKSooMHxwLndvcmRzW0hlXSksTmU9NjcxMDg4NjMmTGU7eGU9NjcxMDg4NjMmKE5lPU5lK3hlfDAp'@;
put 'LG5lKz0oaGU9KGhlPWhlKyhMZS82NzEwODg2NHwwKXwwKSsoTmU+Pj4yNil8MCk+Pj4yNixoZSY9NjcxMDg4NjN9Qy53b3Jkc1t1ZV09eGUsSz1oZSxoZT1uZX1yZXR1cm4gMCE9PUs/Qy53b3Jkc1t1ZV09SzpDLmxlbmd0aC0tLEMuX3N0cmlwKCl9ZnVuY3Rpb24gbGUoXyxwLEMpe3JldHVy'@;
put 'biBkZShfLHAsQyl9ZnVuY3Rpb24gY2UoXyxwKXt0aGlzLng9Xyx0aGlzLnk9cH1NYXRoLmltdWx8fChzZT1hZSksay5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oXyxwKXt2YXIgQz10aGlzLmxlbmd0aCtfLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1fLmxlbmd0aD9z'@;
put 'ZSh0aGlzLF8scCk6Qzw2Mz9hZSh0aGlzLF8scCk6QzwxMDI0P2RlKHRoaXMsXyxwKTpsZSh0aGlzLF8scCl9LGNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKF8pe2Zvcih2YXIgcD1uZXcgQXJyYXkoXyksQz1rLnByb3RvdHlwZS5fY291bnRCaXRzKF8pLTEsSz0wO0s8XztLKyspcFtL'@;
put 'XT10aGlzLnJldkJpbihLLEMsXyk7cmV0dXJuIHB9LGNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oXyxwLEMpe2lmKDA9PT1ffHxfPT09Qy0xKXJldHVybiBfO2Zvcih2YXIgSz0wLG5lPTA7bmU8cDtuZSsrKUt8PSgxJl8pPDxwLW5lLTEsXz4+PTE7cmV0dXJuIEt9LGNlLnByb3RvdHlw'@;
put 'ZS5wZXJtdXRlPWZ1bmN0aW9uKF8scCxDLEssbmUsdWUpe2Zvcih2YXIgaGU9MDtoZTx1ZTtoZSsrKUtbaGVdPXBbX1toZV1dLG5lW2hlXT1DW19baGVdXX0sY2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihfLHAsQyxLLG5lLHVlKXt0aGlzLnBlcm11dGUodWUsXyxwLEMsSyxuZSk7'@;
put 'Zm9yKHZhciBoZT0xO2hlPG5lO2hlPDw9MSlmb3IodmFyIHhlPWhlPDwxLE9lPU1hdGguY29zKDIqTWF0aC5QSS94ZSksSGU9TWF0aC5zaW4oMipNYXRoLlBJL3hlKSxFZT0wO0VlPG5lO0VlKz14ZSlmb3IodmFyIExlPU9lLE5lPUhlLEtlPTA7S2U8aGU7S2UrKyl7dmFyIFVlPUNbRWUrS2Vd'@;
put 'LFhlPUtbRWUrS2VdLGF0PUNbRWUrS2UraGVdLEZlPUtbRWUrS2UraGVdLENlPUxlKmF0LU5lKkZlO0ZlPUxlKkZlK05lKmF0LENbRWUrS2VdPVVlKyhhdD1DZSksS1tFZStLZV09WGUrRmUsQ1tFZStLZStoZV09VWUtYXQsS1tFZStLZStoZV09WGUtRmUsS2UhPT14ZSYmKENlPU9lKkxlLUhl'@;
put 'Kk5lLE5lPU9lKk5lK0hlKkxlLExlPUNlKX19LGNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihfLHApe3ZhciBDPTF8TWF0aC5tYXgocCxfKSxLPTEmQyxuZT0wO2ZvcihDPUMvMnwwO0M7Qz4+Pj0xKW5lKys7cmV0dXJuIDE8PG5lKzErS30sY2UucHJvdG90eXBlLmNvbmp1Z2F0'@;
put 'ZT1mdW5jdGlvbihfLHAsQyl7aWYoIShDPD0xKSlmb3IodmFyIEs9MDtLPEMvMjtLKyspe3ZhciBuZT1fW0tdO19bS109X1tDLUstMV0sX1tDLUstMV09bmUsbmU9cFtLXSxwW0tdPS1wW0MtSy0xXSxwW0MtSy0xXT0tbmV9fSxjZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKF8s'@;
put 'cCl7Zm9yKHZhciBDPTAsSz0wO0s8cC8yO0srKyl7dmFyIG5lPTgxOTIqTWF0aC5yb3VuZChfWzIqSysxXS9wKStNYXRoLnJvdW5kKF9bMipLXS9wKStDO19bS109NjcxMDg4NjMmbmUsQz1uZTw2NzEwODg2ND8wOm5lLzY3MTA4ODY0fDB9cmV0dXJuIF99LGNlLnByb3RvdHlwZS5jb252ZXJ0'@;
put 'MTNiPWZ1bmN0aW9uKF8scCxDLEspe2Zvcih2YXIgbmU9MCx1ZT0wO3VlPHA7dWUrKylDWzIqdWVdPTgxOTEmKG5lKz0wfF9bdWVdKSxDWzIqdWUrMV09ODE5MSYobmU+Pj49MTMpLG5lPj4+PTEzO2Zvcih1ZT0yKnA7dWU8SzsrK3VlKUNbdWVdPTA7SSgwPT09bmUpLEkoISgtODE5MiZuZSkp'@;
put 'fSxjZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihfKXtmb3IodmFyIHA9bmV3IEFycmF5KF8pLEM9MDtDPF87QysrKXBbQ109MDtyZXR1cm4gcH0sY2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oXyxwLEMpe3ZhciBLPTIqdGhpcy5ndWVzc0xlbjEzYihfLmxlbmd0aCxwLmxlbmd0aCksbmU9'@;
put 'dGhpcy5tYWtlUkJUKEspLHVlPXRoaXMuc3R1YihLKSxoZT1uZXcgQXJyYXkoSykseGU9bmV3IEFycmF5KEspLE9lPW5ldyBBcnJheShLKSxIZT1uZXcgQXJyYXkoSyksRWU9bmV3IEFycmF5KEspLExlPW5ldyBBcnJheShLKSxOZT1DLndvcmRzO05lLmxlbmd0aD1LLHRoaXMuY29udmVydDEz'@;
put 'YihfLndvcmRzLF8ubGVuZ3RoLGhlLEspLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLEhlLEspLHRoaXMudHJhbnNmb3JtKGhlLHVlLHhlLE9lLEssbmUpLHRoaXMudHJhbnNmb3JtKEhlLHVlLEVlLExlLEssbmUpO2Zvcih2YXIgS2U9MDtLZTxLO0tlKyspe3ZhciBVZT14ZVtL'@;
put 'ZV0qRWVbS2VdLU9lW0tlXSpMZVtLZV07T2VbS2VdPXhlW0tlXSpMZVtLZV0rT2VbS2VdKkVlW0tlXSx4ZVtLZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKHhlLE9lLEspLHRoaXMudHJhbnNmb3JtKHhlLE9lLE5lLHVlLEssbmUpLHRoaXMuY29uanVnYXRlKE5lLHVlLEspLHRoaXMubm9y'@;
put 'bWFsaXplMTNiKE5lLEspLEMubmVnYXRpdmU9Xy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEMubGVuZ3RoPV8ubGVuZ3RoK3AubGVuZ3RoLEMuX3N0cmlwKCl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbihfKXt2YXIgcD1uZXcgayhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkodGhpcy5s'@;
put 'ZW5ndGgrXy5sZW5ndGgpLHRoaXMubXVsVG8oXyxwKX0say5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihfKXt2YXIgcD1uZXcgayhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrXy5sZW5ndGgpLGxlKHRoaXMsXyxwKX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlv'@;
put 'bihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKF8sdGhpcyl9LGsucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKF8pe3ZhciBwPV88MDtwJiYoXz0tXyksSSgibnVtYmVyIj09dHlwZW9mIF8pLEkoXzw2NzEwODg2NCk7Zm9yKHZhciBDPTAsSz0wO0s8dGhpcy5sZW5ndGg7SysrKXt2YXIg'@;
put 'bmU9KDB8dGhpcy53b3Jkc1tLXSkqXyx1ZT0oNjcxMDg4NjMmbmUpKyg2NzEwODg2MyZDKTtDPj49MjYsQys9bmUvNjcxMDg4NjR8MCxDKz11ZT4+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmdWV9cmV0dXJuIDAhPT1DJiYodGhpcy53b3Jkc1tLXT1DLHRoaXMubGVuZ3RoKyspLHA/dGhp'@;
put 'cy5pbmVnKCk6dGhpc30say5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKF8pfSxrLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LGsucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p'@;
put 'bXVsKHRoaXMuY2xvbmUoKSl9LGsucHJvdG90eXBlLnBvdz1mdW5jdGlvbihfKXt2YXIgcD1mdW5jdGlvbih1ZSl7Zm9yKHZhciBoZT1uZXcgQXJyYXkodWUuYml0TGVuZ3RoKCkpLHhlPTA7eGU8aGUubGVuZ3RoO3hlKyspaGVbeGVdPXVlLndvcmRzW3hlLzI2fDBdPj4+eGUlMjYmMTtyZXR1'@;
put 'cm4gaGV9KF8pO2lmKDA9PT1wLmxlbmd0aClyZXR1cm4gbmV3IGsoMSk7Zm9yKHZhciBDPXRoaXMsSz0wO0s8cC5sZW5ndGgmJjA9PT1wW0tdO0srKyxDPUMuc3FyKCkpO2lmKCsrSzxwLmxlbmd0aClmb3IodmFyIG5lPUMuc3FyKCk7SzxwLmxlbmd0aDtLKyssbmU9bmUuc3FyKCkpMCE9PXBb'@;
put 'S10mJihDPUMubXVsKG5lKSk7cmV0dXJuIEN9LGsucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihfKXtJKCJudW1iZXIiPT10eXBlb2YgXyYmXz49MCk7dmFyIHAsQz1fJTI2LEs9KF8tQykvMjYsbmU9NjcxMDg4NjM+Pj4yNi1DPDwyNi1DO2lmKDAhPT1DKXt2YXIgdWU9MDtmb3IocD0wO3A8'@;
put 'dGhpcy5sZW5ndGg7cCsrKXt2YXIgaGU9dGhpcy53b3Jkc1twXSZuZTt0aGlzLndvcmRzW3BdPSgwfHRoaXMud29yZHNbcF0pLWhlPDxDfHVlLHVlPWhlPj4+MjYtQ311ZSYmKHRoaXMud29yZHNbcF09dWUsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUspe2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49'@;
put 'MDtwLS0pdGhpcy53b3Jkc1twK0tdPXRoaXMud29yZHNbcF07Zm9yKHA9MDtwPEs7cCsrKXRoaXMud29yZHNbcF09MDt0aGlzLmxlbmd0aCs9S31yZXR1cm4gdGhpcy5fc3RyaXAoKX0say5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oXyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRo'@;
put 'aXMuaXVzaGxuKF8pfSxrLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oXyxwLEMpe3ZhciBLO0koIm51bWJlciI9PXR5cGVvZiBfJiZfPj0wKSxLPXA/KHAtcCUyNikvMjY6MDt2YXIgbmU9XyUyNix1ZT1NYXRoLm1pbigoXy1uZSkvMjYsdGhpcy5sZW5ndGgpLGhlPTY3MTA4ODYzXjY3MTA4'@;
put 'ODYzPj4+bmU8PG5lLHhlPUM7aWYoSy09dWUsSz1NYXRoLm1heCgwLEspLHhlKXtmb3IodmFyIE9lPTA7T2U8dWU7T2UrKyl4ZS53b3Jkc1tPZV09dGhpcy53b3Jkc1tPZV07eGUubGVuZ3RoPXVlfWlmKDAhPT11ZSlpZih0aGlzLmxlbmd0aD51ZSlmb3IodGhpcy5sZW5ndGgtPXVlLE9lPTA7'@;
put 'T2U8dGhpcy5sZW5ndGg7T2UrKyl0aGlzLndvcmRzW09lXT10aGlzLndvcmRzW09lK3VlXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBIZT0wO2ZvcihPZT10aGlzLmxlbmd0aC0xO09lPj0wJiYoMCE9PUhlfHxPZT49Syk7T2UtLSl7dmFyIEVlPTB8dGhpcy53b3Jk'@;
put 'c1tPZV07dGhpcy53b3Jkc1tPZV09SGU8PDI2LW5lfEVlPj4+bmUsSGU9RWUmaGV9cmV0dXJuIHhlJiYwIT09SGUmJih4ZS53b3Jkc1t4ZS5sZW5ndGgrK109SGUpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLl9zdHJpcCgpfSxrLnByb3Rv'@;
put 'dHlwZS5pc2hybj1mdW5jdGlvbihfLHAsQyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKF8scCxDKX0say5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKF8pfSxrLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihfKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihfKX0say5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKF8pfSxrLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihfKX0say5wcm90b3R5cGUudGVz'@;
put 'dG49ZnVuY3Rpb24oXyl7SSgibnVtYmVyIj09dHlwZW9mIF8mJl8+PTApO3ZhciBwPV8lMjYsQz0oXy1wKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1DfHwhKHRoaXMud29yZHNbQ10mMTw8cCkpfSxrLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oXyl7SSgibnVtYmVyIj09dHlwZW9mIF8m'@;
put 'Jl8+PTApO3ZhciBwPV8lMjYsQz0oXy1wKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PUM/dGhpczooMCE9PXAmJkMrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihDLHRoaXMubGVuZ3Ro'@;
put 'KSwwIT09cCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+cDw8cCksdGhpcy5fc3RyaXAoKSl9LGsucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKF8pfSxrLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlv'@;
put 'bihfKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIF8pLEkoXzw2NzEwODg2NCksXzwwP3RoaXMuaXN1Ym4oLV8pOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8PV8/KHRoaXMud29yZHNbMF09Xy0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKF8pLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihfKX0say5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKF8pe3RoaXMud29yZHNbMF0rPV87Zm9yKHZhciBwPTA7cDx0aGlzLmxlbmd0aCYmdGhpcy53'@;
put 'b3Jkc1twXT49NjcxMDg4NjQ7cCsrKXRoaXMud29yZHNbcF0tPTY3MTA4ODY0LHA9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbcCsxXT0xOnRoaXMud29yZHNbcCsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxwKzEpLHRoaXN9LGsucHJvdG90eXBlLmlz'@;
put 'dWJuPWZ1bmN0aW9uKF8pe2lmKEkoIm51bWJlciI9PXR5cGVvZiBfKSxJKF88NjcxMDg4NjQpLF88MClyZXR1cm4gdGhpcy5pYWRkbigtXyk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKF8pLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRo'@;
put 'aXMud29yZHNbMF0tPV8sMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIHA9MDtwPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW3BdPDA7cCsrKXRoaXMud29yZHNbcF0rPTY3MTA4'@;
put 'ODY0LHRoaXMud29yZHNbcCsxXS09MTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0say5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKF8pfSxrLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oXyl9LGsu'@;
put 'cHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGsucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxrLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oXyxwLEMpe3ZhciBLLG5lO3RoaXMu'@;
put 'X2V4cGFuZChfLmxlbmd0aCtDKTt2YXIgaGU9MDtmb3IoSz0wO0s8Xy5sZW5ndGg7SysrKXtuZT0oMHx0aGlzLndvcmRzW0srQ10pK2hlO3ZhciB4ZT0oMHxfLndvcmRzW0tdKSpwO2hlPSgobmUtPTY3MTA4ODYzJnhlKT4+MjYpLSh4ZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW0srQ109Njcx'@;
put 'MDg4NjMmbmV9Zm9yKDtLPHRoaXMubGVuZ3RoLUM7SysrKWhlPShuZT0oMHx0aGlzLndvcmRzW0srQ10pK2hlKT4+MjYsdGhpcy53b3Jkc1tLK0NdPTY3MTA4ODYzJm5lO2lmKDA9PT1oZSlyZXR1cm4gdGhpcy5fc3RyaXAoKTtmb3IoSSgtMT09PWhlKSxoZT0wLEs9MDtLPHRoaXMubGVuZ3Ro'@;
put 'O0srKyloZT0obmU9LSgwfHRoaXMud29yZHNbS10pK2hlKT4+MjYsdGhpcy53b3Jkc1tLXT02NzEwODg2MyZuZTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX3N0cmlwKCl9LGsucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKF8scCl7dmFyIEMsSz10aGlzLmNsb25lKCksbmU9Xyx1'@;
put 'ZT0wfG5lLndvcmRzW25lLmxlbmd0aC0xXTswIT0oQz0yNi10aGlzLl9jb3VudEJpdHModWUpKSYmKG5lPW5lLnVzaGxuKEMpLEsuaXVzaGxuKEMpLHVlPTB8bmUud29yZHNbbmUubGVuZ3RoLTFdKTt2YXIgaGUseGU9Sy5sZW5ndGgtbmUubGVuZ3RoO2lmKCJtb2QiIT09cCl7KGhlPW5ldyBr'@;
put 'KG51bGwpKS5sZW5ndGg9eGUrMSxoZS53b3Jkcz1uZXcgQXJyYXkoaGUubGVuZ3RoKTtmb3IodmFyIE9lPTA7T2U8aGUubGVuZ3RoO09lKyspaGUud29yZHNbT2VdPTB9dmFyIEhlPUsuY2xvbmUoKS5faXNobG5zdWJtdWwobmUsMSx4ZSk7MD09PUhlLm5lZ2F0aXZlJiYoSz1IZSxoZSYmKGhl'@;
put 'LndvcmRzW3hlXT0xKSk7Zm9yKHZhciBFZT14ZS0xO0VlPj0wO0VlLS0pe3ZhciBMZT02NzEwODg2NCooMHxLLndvcmRzW25lLmxlbmd0aCtFZV0pKygwfEsud29yZHNbbmUubGVuZ3RoK0VlLTFdKTtmb3IoTGU9TWF0aC5taW4oTGUvdWV8MCw2NzEwODg2MyksSy5faXNobG5zdWJtdWwobmUs'@;
put 'TGUsRWUpOzAhPT1LLm5lZ2F0aXZlOylMZS0tLEsubmVnYXRpdmU9MCxLLl9pc2hsbnN1Ym11bChuZSwxLEVlKSxLLmlzWmVybygpfHwoSy5uZWdhdGl2ZV49MSk7aGUmJihoZS53b3Jkc1tFZV09TGUpfXJldHVybiBoZSYmaGUuX3N0cmlwKCksSy5fc3RyaXAoKSwiZGl2IiE9PXAmJjAhPT1D'@;
put 'JiZLLml1c2hybihDKSx7ZGl2OmhlfHxudWxsLG1vZDpLfX0say5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKF8scCxDKXtyZXR1cm4gSSghXy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBrKDApLG1vZDpuZXcgaygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1fLm5lZ2F0'@;
put 'aXZlPyh1ZT10aGlzLm5lZygpLmRpdm1vZChfLHApLCJtb2QiIT09cCYmKEs9dWUuZGl2Lm5lZygpKSwiZGl2IiE9PXAmJihuZT11ZS5tb2QubmVnKCksQyYmMCE9PW5lLm5lZ2F0aXZlJiZuZS5pYWRkKF8pKSx7ZGl2OkssbW9kOm5lfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1fLm5lZ2F0'@;
put 'aXZlPyh1ZT10aGlzLmRpdm1vZChfLm5lZygpLHApLCJtb2QiIT09cCYmKEs9dWUuZGl2Lm5lZygpKSx7ZGl2OkssbW9kOnVlLm1vZH0pOnRoaXMubmVnYXRpdmUmXy5uZWdhdGl2ZT8odWU9dGhpcy5uZWcoKS5kaXZtb2QoXy5uZWcoKSxwKSwiZGl2IiE9PXAmJihuZT11ZS5tb2QubmVnKCks'@;
put 'QyYmMCE9PW5lLm5lZ2F0aXZlJiZuZS5pc3ViKF8pKSx7ZGl2OnVlLmRpdixtb2Q6bmV9KTpfLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoXyk8MD97ZGl2Om5ldyBrKDApLG1vZDp0aGlzfToxPT09Xy5sZW5ndGg/ImRpdiI9PT1wP3tkaXY6dGhpcy5kaXZuKF8ud29yZHNbMF0pLG1v'@;
put 'ZDpudWxsfToibW9kIj09PXA/e2RpdjpudWxsLG1vZDpuZXcgayh0aGlzLm1vZHJuKF8ud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oXy53b3Jkc1swXSksbW9kOm5ldyBrKHRoaXMubW9kcm4oXy53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KF8scCk7dmFyIEssbmUsdWV9LGsucHJvdG90'@;
put 'eXBlLmRpdj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5kaXZtb2QoXywiZGl2IiwhMSkuZGl2fSxrLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oXyl7cmV0dXJuIHRoaXMuZGl2bW9kKF8sIm1vZCIsITEpLm1vZH0say5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5kaXZt'@;
put 'b2QoXywibW9kIiwhMCkubW9kfSxrLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihfKXt2YXIgcD10aGlzLmRpdm1vZChfKTtpZihwLm1vZC5pc1plcm8oKSlyZXR1cm4gcC5kaXY7dmFyIEM9MCE9PXAuZGl2Lm5lZ2F0aXZlP3AubW9kLmlzdWIoXyk6cC5tb2QsSz1fLnVzaHJuKDEpLG5l'@;
put 'PV8uYW5kbG4oMSksdWU9Qy5jbXAoSyk7cmV0dXJuIHVlPDB8fDE9PT1uZSYmMD09PXVlP3AuZGl2OjAhPT1wLmRpdi5uZWdhdGl2ZT9wLmRpdi5pc3VibigxKTpwLmRpdi5pYWRkbigxKX0say5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oXyl7dmFyIHA9XzwwO3AmJihfPS1fKSxJKF88PTY3'@;
put 'MTA4ODYzKTtmb3IodmFyIEM9NjcxMDg4NjQlXyxLPTAsbmU9dGhpcy5sZW5ndGgtMTtuZT49MDtuZS0tKUs9KEMqSysoMHx0aGlzLndvcmRzW25lXSkpJV87cmV0dXJuIHA/LUs6S30say5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5tb2RybihfKX0say5wcm90b3R5'@;
put 'cGUuaWRpdm49ZnVuY3Rpb24oXyl7dmFyIHA9XzwwO3AmJihfPS1fKSxJKF88PTY3MTA4ODYzKTtmb3IodmFyIEM9MCxLPXRoaXMubGVuZ3RoLTE7Sz49MDtLLS0pe3ZhciBuZT0oMHx0aGlzLndvcmRzW0tdKSs2NzEwODg2NCpDO3RoaXMud29yZHNbS109bmUvX3wwLEM9bmUlX31yZXR1cm4g'@;
put 'dGhpcy5fc3RyaXAoKSxwP3RoaXMuaW5lZygpOnRoaXN9LGsucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oXyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihfKX0say5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihfKXtJKDA9PT1fLm5lZ2F0aXZlKSxJKCFfLmlzWmVybygpKTt2YXIgcD10aGlz'@;
put 'LEM9Xy5jbG9uZSgpO3A9MCE9PXAubmVnYXRpdmU/cC51bW9kKF8pOnAuY2xvbmUoKTtmb3IodmFyIEs9bmV3IGsoMSksbmU9bmV3IGsoMCksdWU9bmV3IGsoMCksaGU9bmV3IGsoMSkseGU9MDtwLmlzRXZlbigpJiZDLmlzRXZlbigpOylwLml1c2hybigxKSxDLml1c2hybigxKSwrK3hlO2Zv'@;
put 'cih2YXIgT2U9Qy5jbG9uZSgpLEhlPXAuY2xvbmUoKTshcC5pc1plcm8oKTspe2Zvcih2YXIgRWU9MCxMZT0xOyEocC53b3Jkc1swXSZMZSkmJkVlPDI2OysrRWUsTGU8PD0xKTtpZihFZT4wKWZvcihwLml1c2hybihFZSk7RWUtLSA+MDspKEsuaXNPZGQoKXx8bmUuaXNPZGQoKSkmJihLLmlh'@;
put 'ZGQoT2UpLG5lLmlzdWIoSGUpKSxLLml1c2hybigxKSxuZS5pdXNocm4oMSk7Zm9yKHZhciBOZT0wLEtlPTE7IShDLndvcmRzWzBdJktlKSYmTmU8MjY7KytOZSxLZTw8PTEpO2lmKE5lPjApZm9yKEMuaXVzaHJuKE5lKTtOZS0tID4wOykodWUuaXNPZGQoKXx8aGUuaXNPZGQoKSkmJih1ZS5p'@;
put 'YWRkKE9lKSxoZS5pc3ViKEhlKSksdWUuaXVzaHJuKDEpLGhlLml1c2hybigxKTtwLmNtcChDKT49MD8ocC5pc3ViKEMpLEsuaXN1Yih1ZSksbmUuaXN1YihoZSkpOihDLmlzdWIocCksdWUuaXN1YihLKSxoZS5pc3ViKG5lKSl9cmV0dXJue2E6dWUsYjpoZSxnY2Q6Qy5pdXNobG4oeGUpfX0s'@;
put 'ay5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKF8pe0koMD09PV8ubmVnYXRpdmUpLEkoIV8uaXNaZXJvKCkpO3ZhciBwPXRoaXMsQz1fLmNsb25lKCk7cD0wIT09cC5uZWdhdGl2ZT9wLnVtb2QoXyk6cC5jbG9uZSgpO2Zvcih2YXIgSyxuZT1uZXcgaygxKSx1ZT1uZXcgaygwKSxoZT1DLmNs'@;
put 'b25lKCk7cC5jbXBuKDEpPjAmJkMuY21wbigxKT4wOyl7Zm9yKHZhciB4ZT0wLE9lPTE7IShwLndvcmRzWzBdJk9lKSYmeGU8MjY7Kyt4ZSxPZTw8PTEpO2lmKHhlPjApZm9yKHAuaXVzaHJuKHhlKTt4ZS0tID4wOyluZS5pc09kZCgpJiZuZS5pYWRkKGhlKSxuZS5pdXNocm4oMSk7Zm9yKHZh'@;
put 'ciBIZT0wLEVlPTE7IShDLndvcmRzWzBdJkVlKSYmSGU8MjY7KytIZSxFZTw8PTEpO2lmKEhlPjApZm9yKEMuaXVzaHJuKEhlKTtIZS0tID4wOyl1ZS5pc09kZCgpJiZ1ZS5pYWRkKGhlKSx1ZS5pdXNocm4oMSk7cC5jbXAoQyk+PTA/KHAuaXN1YihDKSxuZS5pc3ViKHVlKSk6KEMuaXN1Yihw'@;
put 'KSx1ZS5pc3ViKG5lKSl9cmV0dXJuKEs9MD09PXAuY21wbigxKT9uZTp1ZSkuY21wbigwKTwwJiZLLmlhZGQoXyksS30say5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKF8pe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIF8uYWJzKCk7aWYoXy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIg'@;
put 'cD10aGlzLmNsb25lKCksQz1fLmNsb25lKCk7cC5uZWdhdGl2ZT0wLEMubmVnYXRpdmU9MDtmb3IodmFyIEs9MDtwLmlzRXZlbigpJiZDLmlzRXZlbigpO0srKylwLml1c2hybigxKSxDLml1c2hybigxKTtmb3IoOzspe2Zvcig7cC5pc0V2ZW4oKTspcC5pdXNocm4oMSk7Zm9yKDtDLmlzRXZl'@;
put 'bigpOylDLml1c2hybigxKTt2YXIgbmU9cC5jbXAoQyk7aWYobmU8MCl7dmFyIHVlPXA7cD1DLEM9dWV9ZWxzZSBpZigwPT09bmV8fDA9PT1DLmNtcG4oMSkpYnJlYWs7cC5pc3ViKEMpfXJldHVybiBDLml1c2hsbihLKX0say5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihfKXtyZXR1cm4gdGhp'@;
put 'cy5lZ2NkKF8pLmEudW1vZChfKX0say5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxrLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGsucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKF8pe3Jl'@;
put 'dHVybiB0aGlzLndvcmRzWzBdJl99LGsucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKF8pe0koIm51bWJlciI9PXR5cGVvZiBfKTt2YXIgcD1fJTI2LEM9KF8tcCkvMjYsSz0xPDxwO2lmKHRoaXMubGVuZ3RoPD1DKXJldHVybiB0aGlzLl9leHBhbmQoQysxKSx0aGlzLndvcmRzW0NdfD1LLHRo'@;
put 'aXM7Zm9yKHZhciBuZT1LLHVlPUM7MCE9PW5lJiZ1ZTx0aGlzLmxlbmd0aDt1ZSsrKXt2YXIgaGU9MHx0aGlzLndvcmRzW3VlXTtuZT0oaGUrPW5lKT4+PjI2LHRoaXMud29yZHNbdWVdPWhlJj02NzEwODg2M31yZXR1cm4gMCE9PW5lJiYodGhpcy53b3Jkc1t1ZV09bmUsdGhpcy5sZW5ndGgr'@;
put 'KyksdGhpc30say5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGsucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oXyl7dmFyIHAsQz1fPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFDKXJldHVybi0xO2lmKDA9PT10'@;
put 'aGlzLm5lZ2F0aXZlJiZDKXJldHVybiAxO2lmKHRoaXMuX3N0cmlwKCksdGhpcy5sZW5ndGg+MSlwPTE7ZWxzZXtDJiYoXz0tXyksSShfPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgSz0wfHRoaXMud29yZHNbMF07cD1LPT09Xz8wOks8Xz8tMToxfXJldHVybiAwIT09dGhp'@;
put 'cy5uZWdhdGl2ZT8wfC1wOnB9LGsucHJvdG90eXBlLmNtcD1mdW5jdGlvbihfKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PV8ubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1fLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBwPXRoaXMudWNtcChfKTtyZXR1cm4g'@;
put 'MCE9PXRoaXMubmVnYXRpdmU/MHwtcDpwfSxrLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKF8pe2lmKHRoaXMubGVuZ3RoPl8ubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPF8ubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgcD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl7dmFyIEs9'@;
put 'MHx0aGlzLndvcmRzW0NdLG5lPTB8Xy53b3Jkc1tDXTtpZihLIT09bmUpe0s8bmU/cD0tMTpLPm5lJiYocD0xKTticmVha319cmV0dXJuIHB9LGsucHJvdG90eXBlLmd0bj1mdW5jdGlvbihfKXtyZXR1cm4gMT09PXRoaXMuY21wbihfKX0say5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oXyl7cmV0'@;
put 'dXJuIDE9PT10aGlzLmNtcChfKX0say5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5jbXBuKF8pPj0wfSxrLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oXyl7cmV0dXJuIHRoaXMuY21wKF8pPj0wfSxrLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oXyl7cmV0dXJuLTE9PT10'@;
put 'aGlzLmNtcG4oXyl9LGsucHJvdG90eXBlLmx0PWZ1bmN0aW9uKF8pe3JldHVybi0xPT09dGhpcy5jbXAoXyl9LGsucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oXyl7cmV0dXJuIHRoaXMuY21wbihfKTw9MH0say5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLmNtcChfKTw9'@;
put 'MH0say5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKF8pe3JldHVybiAwPT09dGhpcy5jbXBuKF8pfSxrLnByb3RvdHlwZS5lcT1mdW5jdGlvbihfKXtyZXR1cm4gMD09PXRoaXMuY21wKF8pfSxrLnJlZD1mdW5jdGlvbihfKXtyZXR1cm4gbmV3IFMoXyl9LGsucHJvdG90eXBlLnRvUmVkPWZ1bmN0'@;
put 'aW9uKF8pe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksXy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKF8pfSxrLnByb3RvdHlwZS5m'@;
put 'cm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0say5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlz'@;
put 'LnJlZD1fLHRoaXN9LGsucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKF8pe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKF8pfSxrLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oXyl7cmV0dXJuIEko'@;
put 'dGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxfKX0say5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihfKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5pYWRkKHRoaXMsXyl9LGsucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihfKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLF8pfSxrLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKF8pe3JldHVybiBJ'@;
put 'KHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxfKX0say5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKF8pe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5y'@;
put 'ZWQuc2hsKHRoaXMsXyl9LGsucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihfKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsXyksdGhpcy5yZWQubXVsKHRoaXMsXyl9LGsucHJvdG90eXBlLnJl'@;
put 'ZElNdWw9ZnVuY3Rpb24oXyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLF8pLHRoaXMucmVkLmltdWwodGhpcyxfKX0say5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhp'@;
put 'cy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGsucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVk'@;
put 'IG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp'@;
put 'cyksdGhpcy5yZWQuc3FydCh0aGlzKX0say5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGsucHJvdG90'@;
put 'eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oXyl7cmV0dXJuIEkodGhp'@;
put 'cy5yZWQmJiFfLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxfKX07dmFyIEc9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiB5KF8scCl7dGhpcy5uYW1lPV8sdGhpcy5w'@;
put 'PW5ldyBrKHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBrKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBMKCl7eS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIEgoKXt5LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gaigpe3kuY2FsbCh0'@;
put 'aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBnKCl7eS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZm'@;
put 'ZmZlZCIpfWZ1bmN0aW9uIFMoXyl7aWYoInN0cmluZyI9PXR5cGVvZiBfKXt2YXIgcD1rLl9wcmltZShfKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIEkoXy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1fLHRoaXMucHJpbWU9bnVsbH1mdW5j'@;
put 'dGlvbiB4KF8pe1MuY2FsbCh0aGlzLF8pLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IGsoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5z'@;
put 'cXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9eS5wcm90b3R5'@;
put 'cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBfPW5ldyBrKG51bGwpO3JldHVybiBfLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksX30seS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihfKXt2YXIgcCxDPV87ZG97dGhpcy5zcGxpdChDLHRoaXMudG1wKSxwPShDPShDPXRo'@;
put 'aXMuaW11bEsoQykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShwPnRoaXMubik7dmFyIEs9cDx0aGlzLm4/LTE6Qy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1LPyhDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSk6Sz4wP0MuaXN1Yih0aGlzLnApOnZvaWQgMCE9PUMuc3RyaXA/'@;
put 'Qy5zdHJpcCgpOkMuX3N0cmlwKCksQ30seS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oXyxwKXtfLml1c2hybih0aGlzLm4sMCxwKX0seS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oXyl7cmV0dXJuIF8uaW11bCh0aGlzLmspfSxFKEwseSksTC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24o'@;
put 'XyxwKXtmb3IodmFyIEM9NDE5NDMwMyxLPU1hdGgubWluKF8ubGVuZ3RoLDkpLG5lPTA7bmU8SztuZSsrKXAud29yZHNbbmVdPV8ud29yZHNbbmVdO2lmKHAubGVuZ3RoPUssXy5sZW5ndGg8PTkpcmV0dXJuIF8ud29yZHNbMF09MCx2b2lkKF8ubGVuZ3RoPTEpO3ZhciB1ZT1fLndvcmRzWzld'@;
put 'O2ZvcihwLndvcmRzW3AubGVuZ3RoKytdPXVlJkMsbmU9MTA7bmU8Xy5sZW5ndGg7bmUrKyl7dmFyIGhlPTB8Xy53b3Jkc1tuZV07Xy53b3Jkc1tuZS0xMF09KGhlJkMpPDw0fHVlPj4+MjIsdWU9aGV9Xy53b3Jkc1tuZS0xMF09dWU+Pj49MjIsXy5sZW5ndGgtPTA9PT11ZSYmXy5sZW5ndGg+'@;
put 'MTA/MTA6OX0sTC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oXyl7Xy53b3Jkc1tfLmxlbmd0aF09MCxfLndvcmRzW18ubGVuZ3RoKzFdPTAsXy5sZW5ndGgrPTI7Zm9yKHZhciBwPTAsQz0wO0M8Xy5sZW5ndGg7QysrKXt2YXIgSz0wfF8ud29yZHNbQ107Xy53b3Jkc1tDXT02NzEwODg2MyYo'@;
put 'cCs9OTc3KkspLHA9NjQqSysocC82NzEwODg2NHwwKX1yZXR1cm4gMD09PV8ud29yZHNbXy5sZW5ndGgtMV0mJihfLmxlbmd0aC0tLDA9PT1fLndvcmRzW18ubGVuZ3RoLTFdJiZfLmxlbmd0aC0tKSxffSxFKEgseSksRShqLHkpLEUoZyx5KSxnLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihf'@;
put 'KXtmb3IodmFyIHA9MCxDPTA7QzxfLmxlbmd0aDtDKyspe3ZhciBLPTE5KigwfF8ud29yZHNbQ10pK3AsbmU9NjcxMDg4NjMmSztLPj4+PTI2LF8ud29yZHNbQ109bmUscD1LfXJldHVybiAwIT09cCYmKF8ud29yZHNbXy5sZW5ndGgrK109cCksX30say5fcHJpbWU9ZnVuY3Rpb24oXyl7aWYo'@;
put 'R1tfXSlyZXR1cm4gR1tfXTt2YXIgcDtpZigiazI1NiI9PT1fKXA9bmV3IEw7ZWxzZSBpZigicDIyNCI9PT1fKXA9bmV3IEg7ZWxzZSBpZigicDE5MiI9PT1fKXA9bmV3IGo7ZWxzZXtpZigicDI1NTE5IiE9PV8pdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrXyk7cD1uZXcgZ31y'@;
put 'ZXR1cm4gR1tfXT1wLHB9LFMucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKF8pe0koMD09PV8ubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShfLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTLnByb3RvdHlwZS5fdmVyaWZ5Mj1m'@;
put 'dW5jdGlvbihfLHApe0koIShfLm5lZ2F0aXZlfHAubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoXy5yZWQmJl8ucmVkPT09cC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sUy5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihfKXtyZXR1'@;
put 'cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoXykuX2ZvcmNlUmVkKHRoaXMpOihXKF8sXy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxfKX0sUy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKF8pe3JldHVybiBfLmlzWmVybygpP18uY2xvbmUoKTp0aGlzLm0uc3ViKF8pLl9m'@;
put 'b3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKF8scCl7dGhpcy5fdmVyaWZ5MihfLHApO3ZhciBDPV8uYWRkKHApO3JldHVybiBDLmNtcCh0aGlzLm0pPj0wJiZDLmlzdWIodGhpcy5tKSxDLl9mb3JjZVJlZCh0aGlzKX0sUy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihf'@;
put 'LHApe3RoaXMuX3ZlcmlmeTIoXyxwKTt2YXIgQz1fLmlhZGQocCk7cmV0dXJuIEMuY21wKHRoaXMubSk+PTAmJkMuaXN1Yih0aGlzLm0pLEN9LFMucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihfLHApe3RoaXMuX3ZlcmlmeTIoXyxwKTt2YXIgQz1fLnN1YihwKTtyZXR1cm4gQy5jbXBuKDApPDAm'@;
put 'JkMuaWFkZCh0aGlzLm0pLEMuX2ZvcmNlUmVkKHRoaXMpfSxTLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKF8scCl7dGhpcy5fdmVyaWZ5MihfLHApO3ZhciBDPV8uaXN1YihwKTtyZXR1cm4gQy5jbXBuKDApPDAmJkMuaWFkZCh0aGlzLm0pLEN9LFMucHJvdG90eXBlLnNobD1mdW5jdGlvbihf'@;
put 'LHApe3JldHVybiB0aGlzLl92ZXJpZnkxKF8pLHRoaXMuaW1vZChfLnVzaGxuKHApKX0sUy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihfLHApe3JldHVybiB0aGlzLl92ZXJpZnkyKF8scCksdGhpcy5pbW9kKF8uaW11bChwKSl9LFMucHJvdG90eXBlLm11bD1mdW5jdGlvbihfLHApe3JldHVy'@;
put 'biB0aGlzLl92ZXJpZnkyKF8scCksdGhpcy5pbW9kKF8ubXVsKHApKX0sUy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5pbXVsKF8sXy5jbG9uZSgpKX0sUy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKF8pe3JldHVybiB0aGlzLm11bChfLF8pfSxTLnByb3RvdHlwZS5z'@;
put 'cXJ0PWZ1bmN0aW9uKF8pe2lmKF8uaXNaZXJvKCkpcmV0dXJuIF8uY2xvbmUoKTt2YXIgcD10aGlzLm0uYW5kbG4oMyk7aWYoSShwJTI9PTEpLDM9PT1wKXt2YXIgQz10aGlzLm0uYWRkKG5ldyBrKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KF8sQyl9Zm9yKHZhciBLPXRoaXMubS5z'@;
put 'dWJuKDEpLG5lPTA7IUsuaXNaZXJvKCkmJjA9PT1LLmFuZGxuKDEpOyluZSsrLEsuaXVzaHJuKDEpO0koIUsuaXNaZXJvKCkpO3ZhciB1ZT1uZXcgaygxKS50b1JlZCh0aGlzKSxoZT11ZS5yZWROZWcoKSx4ZT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksT2U9dGhpcy5tLmJpdExlbmd0aCgp'@;
put 'O2ZvcihPZT1uZXcgaygyKk9lKk9lKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coT2UseGUpLmNtcChoZSk7KU9lLnJlZElBZGQoaGUpO2Zvcih2YXIgSGU9dGhpcy5wb3coT2UsSyksRWU9dGhpcy5wb3coXyxLLmFkZG4oMSkuaXVzaHJuKDEpKSxMZT10aGlzLnBvdyhfLEspLE5lPW5lOzAh'@;
put 'PT1MZS5jbXAodWUpOyl7Zm9yKHZhciBLZT1MZSxVZT0wOzAhPT1LZS5jbXAodWUpO1VlKyspS2U9S2UucmVkU3FyKCk7SShVZTxOZSk7dmFyIFhlPXRoaXMucG93KEhlLG5ldyBrKDEpLml1c2hsbihOZS1VZS0xKSk7RWU9RWUucmVkTXVsKFhlKSxIZT1YZS5yZWRTcXIoKSxMZT1MZS5yZWRN'@;
put 'dWwoSGUpLE5lPVVlfXJldHVybiBFZX0sUy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihfKXt2YXIgcD1fLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09cC5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChwKS5yZWROZWcoKSk6dGhpcy5pbW9kKHApfSxTLnByb3RvdHlwZS5wb3c9'@;
put 'ZnVuY3Rpb24oXyxwKXtpZihwLmlzWmVybygpKXJldHVybiBuZXcgaygxKS50b1JlZCh0aGlzKTtpZigwPT09cC5jbXBuKDEpKXJldHVybiBfLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyBrKDEpLnRvUmVkKHRoaXMpLENbMV09Xztmb3IodmFyIEs9MjtLPEMubGVuZ3Ro'@;
put 'O0srKylDW0tdPXRoaXMubXVsKENbSy0xXSxfKTt2YXIgbmU9Q1swXSx1ZT0wLGhlPTAseGU9cC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXhlJiYoeGU9MjYpLEs9cC5sZW5ndGgtMTtLPj0wO0stLSl7Zm9yKHZhciBPZT1wLndvcmRzW0tdLEhlPXhlLTE7SGU+PTA7SGUtLSl7dmFyIEVlPU9l'@;
put 'Pj5IZSYxO25lIT09Q1swXSYmKG5lPXRoaXMuc3FyKG5lKSksMCE9PUVlfHwwIT09dWU/KHVlPDw9MSx1ZXw9RWUsKDQ9PSsraGV8fDA9PT1LJiYwPT09SGUpJiYobmU9dGhpcy5tdWwobmUsQ1t1ZV0pLGhlPTAsdWU9MCkpOmhlPTB9eGU9MjZ9cmV0dXJuIG5lfSxTLnByb3RvdHlwZS5jb252'@;
put 'ZXJ0VG89ZnVuY3Rpb24oXyl7dmFyIHA9Xy51bW9kKHRoaXMubSk7cmV0dXJuIHA9PT1fP3AuY2xvbmUoKTpwfSxTLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihfKXt2YXIgcD1fLmNsb25lKCk7cmV0dXJuIHAucmVkPW51bGwscH0say5tb250PWZ1bmN0aW9uKF8pe3JldHVybiBu'@;
put 'ZXcgeChfKX0sRSh4LFMpLHgucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihfKXtyZXR1cm4gdGhpcy5pbW9kKF8udXNobG4odGhpcy5zaGlmdCkpfSx4LnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihfKXt2YXIgcD10aGlzLmltb2QoXy5tdWwodGhpcy5yaW52KSk7cmV0dXJu'@;
put 'IHAucmVkPW51bGwscH0seC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihfLHApe2lmKF8uaXNaZXJvKCl8fHAuaXNaZXJvKCkpcmV0dXJuIF8ud29yZHNbMF09MCxfLmxlbmd0aD0xLF87dmFyIEM9Xy5pbXVsKHApLEs9Qy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24o'@;
put 'dGhpcy5zaGlmdCkubXVsKHRoaXMubSksbmU9Qy5pc3ViKEspLml1c2hybih0aGlzLnNoaWZ0KSx1ZT1uZTtyZXR1cm4gbmUuY21wKHRoaXMubSk+PTA/dWU9bmUuaXN1Yih0aGlzLm0pOm5lLmNtcG4oMCk8MCYmKHVlPW5lLmlhZGQodGhpcy5tKSksdWUuX2ZvcmNlUmVkKHRoaXMpfSx4LnBy'@;
put 'b3RvdHlwZS5tdWw9ZnVuY3Rpb24oXyxwKXtpZihfLmlzWmVybygpfHxwLmlzWmVybygpKXJldHVybiBuZXcgaygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEM9Xy5tdWwocCksSz1DLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5t'@;
put 'KSxuZT1DLmlzdWIoSykuaXVzaHJuKHRoaXMuc2hpZnQpLHVlPW5lO3JldHVybiBuZS5jbXAodGhpcy5tKT49MD91ZT1uZS5pc3ViKHRoaXMubSk6bmUuY21wbigwKTwwJiYodWU9bmUuaWFkZCh0aGlzLm0pKSx1ZS5fZm9yY2VSZWQodGhpcyl9LHgucHJvdG90eXBlLmludm09ZnVuY3Rpb24o'@;
put 'Xyl7cmV0dXJuIHRoaXMuaW1vZChfLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odz1ELm5tZCh3KSx0aGlzKX0sMzY0NDoodyxBLEQpPT57dmFyIFA9RCgxMDQ4KSxVPUQoNTYyMyk7dy5leHBvcnRzPWZ1bmN0aW9uKHNlKXtyZXR1cm4gc2U/KCJ7fSI9'@;
put 'PT1zZS5zdWJzdHIoMCwyKSYmKHNlPSJcXHtcXH0iK3NlLnN1YnN0cigyKSksYWUoKGRlPXNlLGRlLnNwbGl0KCJcXFxcIikuam9pbihJKS5zcGxpdCgiXFx7Iikuam9pbihFKS5zcGxpdCgiXFx9Iikuam9pbihrKS5zcGxpdCgiXFwsIikuam9pbihCKS5zcGxpdCgiXFwuIikuam9pbihOKSks'@;
put 'ITApLm1hcChaKSk6W107dmFyIGRlfTt2YXIgST0iXDBTTEFTSCIrTWF0aC5yYW5kb20oKSsiXDAiLEU9IlwwT1BFTiIrTWF0aC5yYW5kb20oKSsiXDAiLGs9IlwwQ0xPU0UiK01hdGgucmFuZG9tKCkrIlwwIixCPSJcMENPTU1BIitNYXRoLnJhbmRvbSgpKyJcMCIsTj0iXDBQRVJJT0QiK01h'@;
put 'dGgucmFuZG9tKCkrIlwwIjtmdW5jdGlvbiBWKHNlKXtyZXR1cm4gcGFyc2VJbnQoc2UsMTApPT1zZT9wYXJzZUludChzZSwxMCk6c2UuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBaKHNlKXtyZXR1cm4gc2Uuc3BsaXQoSSkuam9pbigiXFwiKS5zcGxpdChFKS5qb2luKCJ7Iikuc3BsaXQoayku'@;
put 'am9pbigifSIpLnNwbGl0KEIpLmpvaW4oIiwiKS5zcGxpdChOKS5qb2luKCIuIil9ZnVuY3Rpb24gVyhzZSl7aWYoIXNlKXJldHVyblsiIl07dmFyIGRlPVtdLGxlPVUoInsiLCJ9IixzZSk7aWYoIWxlKXJldHVybiBzZS5zcGxpdCgiLCIpO3ZhciBHPWxlLmJvZHkseT1sZS5wb3N0LEw9bGUu'@;
put 'cHJlLnNwbGl0KCIsIik7TFtMLmxlbmd0aC0xXSs9InsiK0crIn0iO3ZhciBIPVcoeSk7cmV0dXJuIHkubGVuZ3RoJiYoTFtMLmxlbmd0aC0xXSs9SC5zaGlmdCgpLEwucHVzaC5hcHBseShMLEgpKSxkZS5wdXNoLmFwcGx5KGRlLEwpLGRlfWZ1bmN0aW9uIHooc2Upe3JldHVybiJ7IitzZSsi'@;
put 'fSJ9ZnVuY3Rpb24gcShzZSl7cmV0dXJuL14tPzBcZC8udGVzdChzZSl9ZnVuY3Rpb24gUShzZSxkZSl7cmV0dXJuIHNlPD1kZX1mdW5jdGlvbiB0ZShzZSxkZSl7cmV0dXJuIHNlPj1kZX1mdW5jdGlvbiBhZShzZSxkZSl7dmFyIGxlPVtdLGNlPVUoInsiLCJ9IixzZSk7aWYoIWNlfHwvXCQk'@;
put 'Ly50ZXN0KGNlLnByZSkpcmV0dXJuW3NlXTt2YXIgRyx5PS9eLT9cZCtcLlwuLT9cZCsoPzpcLlwuLT9cZCspPyQvLnRlc3QoY2UuYm9keSksTD0vXlthLXpBLVpdXC5cLlthLXpBLVpdKD86XC5cLi0/XGQrKT8kLy50ZXN0KGNlLmJvZHkpLEg9eXx8TCxqPWNlLmJvZHkuaW5kZXhPZigiLCIp'@;
put 'Pj0wO2lmKCFIJiYhailyZXR1cm4gY2UucG9zdC5tYXRjaCgvLC4qXH0vKT9hZShzZT1jZS5wcmUrInsiK2NlLmJvZHkraytjZS5wb3N0KTpbc2VdO2lmKEgpRz1jZS5ib2R5LnNwbGl0KC9cLlwuLyk7ZWxzZSBpZigxPT09KEc9VyhjZS5ib2R5KSkubGVuZ3RoJiYxPT09KEc9YWUoR1swXSwh'@;
put 'MSkubWFwKHopKS5sZW5ndGgpcmV0dXJuKHg9Y2UucG9zdC5sZW5ndGg/YWUoY2UucG9zdCwhMSk6WyIiXSkubWFwKGZ1bmN0aW9uKEtlKXtyZXR1cm4gY2UucHJlK0dbMF0rS2V9KTt2YXIgZyxTPWNlLnByZSx4PWNlLnBvc3QubGVuZ3RoP2FlKGNlLnBvc3QsITEpOlsiIl07aWYoSCl7dmFy'@;
put 'IF89VihHWzBdKSxwPVYoR1sxXSksQz1NYXRoLm1heChHWzBdLmxlbmd0aCxHWzFdLmxlbmd0aCksSz0zPT1HLmxlbmd0aD9NYXRoLmFicyhWKEdbMl0pKToxLG5lPVE7cDxfJiYoSyo9LTEsbmU9dGUpO3ZhciB1ZT1HLnNvbWUocSk7Zz1bXTtmb3IodmFyIGhlPV87bmUoaGUscCk7aGUrPUsp'@;
put 'e3ZhciB4ZTtpZihMKSJcXCI9PT0oeGU9U3RyaW5nLmZyb21DaGFyQ29kZShoZSkpJiYoeGU9IiIpO2Vsc2UgaWYoeGU9U3RyaW5nKGhlKSx1ZSl7dmFyIE9lPUMteGUubGVuZ3RoO2lmKE9lPjApe3ZhciBIZT1uZXcgQXJyYXkoT2UrMSkuam9pbigiMCIpO3hlPWhlPDA/Ii0iK0hlK3hlLnNs'@;
put 'aWNlKDEpOkhlK3hlfX1nLnB1c2goeGUpfX1lbHNlIGc9UChHLGZ1bmN0aW9uKEtlKXtyZXR1cm4gYWUoS2UsITEpfSk7Zm9yKHZhciBFZT0wO0VlPGcubGVuZ3RoO0VlKyspZm9yKHZhciBMZT0wO0xlPHgubGVuZ3RoO0xlKyspe3ZhciBOZT1TK2dbRWVdK3hbTGVdOyghZGV8fEh8fE5lKSYm'@;
put 'bGUucHVzaChOZSl9cmV0dXJuIGxlfX0sOTkzMToodyxBLEQpPT57dmFyIFA7ZnVuY3Rpb24gVShFKXt0aGlzLnJhbmQ9RX1pZih3LmV4cG9ydHM9ZnVuY3Rpb24oRSl7cmV0dXJuIFB8fChQPW5ldyBVKG51bGwpKSxQLmdlbmVyYXRlKEUpfSx3LmV4cG9ydHMuUmFuZD1VLFUucHJvdG90eXBl'@;
put 'LmdlbmVyYXRlPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9yYW5kKEUpfSxVLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihFKXtpZih0aGlzLnJhbmQuZ2V0Qnl0ZXMpcmV0dXJuIHRoaXMucmFuZC5nZXRCeXRlcyhFKTtmb3IodmFyIGs9bmV3IFVpbnQ4QXJyYXkoRSksQj0wO0I8ay5sZW5n'@;
put 'dGg7QisrKWtbQl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4ga30sIm9iamVjdCI9PXR5cGVvZiBzZWxmKXNlbGYuY3J5cHRvJiZzZWxmLmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/VS5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oRSl7dmFyIGs9bmV3IFVpbnQ4QXJyYXkoRSk7cmV0dXJu'@;
put 'IHNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhrKSxrfTpzZWxmLm1zQ3J5cHRvJiZzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9VLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihFKXt2YXIgaz1uZXcgVWludDhBcnJheShFKTtyZXR1cm4gc2VsZi5tc0NyeXB0by5nZXRSYW5kb21W'@;
put 'YWx1ZXMoayksa306Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihVLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIHlldCIpfSk7ZWxzZSB0cnl7dmFyIEk9RCg5MjE0KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgSS5yYW5kb21CeXRl'@;
put 'cyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtVLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbihFKXtyZXR1cm4gSS5yYW5kb21CeXRlcyhFKX19Y2F0Y2h7fX0sNDQ5NzoodyxBLEQpPT57dmFyIFA9RCg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24gVShWKXtQLmlzQnVmZmVyKFYpfHwo'@;
put 'Vj1QLmZyb20oVikpO2Zvcih2YXIgWj1WLmxlbmd0aC80fDAsVz1uZXcgQXJyYXkoWiksej0wO3o8Wjt6KyspV1t6XT1WLnJlYWRVSW50MzJCRSg0KnopO3JldHVybiBXfWZ1bmN0aW9uIEkoVil7Zm9yKDswPFYubGVuZ3RoO1YrKylWWzBdPTB9ZnVuY3Rpb24gRShWLFosVyx6LHEpe2Zvcih2'@;
put 'YXIgUSx0ZSxhZSxzZSxkZT1XWzBdLGxlPVdbMV0sY2U9V1syXSxHPVdbM10seT1WWzBdXlpbMF0sTD1WWzFdXlpbMV0sSD1WWzJdXlpbMl0saj1WWzNdXlpbM10sZz00LFM9MTtTPHE7UysrKVE9ZGVbeT4+PjI0XV5sZVtMPj4+MTYmMjU1XV5jZVtIPj4+OCYyNTVdXkdbMjU1JmpdXlpbZysr'@;
put 'XSx0ZT1kZVtMPj4+MjRdXmxlW0g+Pj4xNiYyNTVdXmNlW2o+Pj44JjI1NV1eR1syNTUmeV1eWltnKytdLGFlPWRlW0g+Pj4yNF1ebGVbaj4+PjE2JjI1NV1eY2VbeT4+PjgmMjU1XV5HWzI1NSZMXV5aW2crK10sc2U9ZGVbaj4+PjI0XV5sZVt5Pj4+MTYmMjU1XV5jZVtMPj4+OCYyNTVdXkdb'@;
put 'MjU1JkhdXlpbZysrXSx5PVEsTD10ZSxIPWFlLGo9c2U7cmV0dXJuIFE9KHpbeT4+PjI0XTw8MjR8eltMPj4+MTYmMjU1XTw8MTZ8eltIPj4+OCYyNTVdPDw4fHpbMjU1JmpdKV5aW2crK10sdGU9KHpbTD4+PjI0XTw8MjR8eltIPj4+MTYmMjU1XTw8MTZ8eltqPj4+OCYyNTVdPDw4fHpbMjU1'@;
put 'JnldKV5aW2crK10sYWU9KHpbSD4+PjI0XTw8MjR8eltqPj4+MTYmMjU1XTw8MTZ8elt5Pj4+OCYyNTVdPDw4fHpbMjU1JkxdKV5aW2crK10sc2U9KHpbaj4+PjI0XTw8MjR8elt5Pj4+MTYmMjU1XTw8MTZ8eltMPj4+OCYyNTVdPDw4fHpbMjU1JkhdKV5aW2crK10sW1E+Pj49MCx0ZT4+Pj0w'@;
put 'LGFlPj4+PTAsc2U+Pj49MF19dmFyIGs9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLEI9ZnVuY3Rpb24oKXtmb3IodmFyIFY9bmV3IEFycmF5KDI1NiksWj0wO1o8MjU2O1orKylWW1pdPVo8MTI4P1o8PDE6Wjw8MV4yODM7Zm9yKHZhciBXPVtdLHo9W10scT1bW10sW10sW10sW11d'@;
put 'LFE9W1tdLFtdLFtdLFtdXSx0ZT0wLGFlPTAsc2U9MDtzZTwyNTY7KytzZSl7dmFyIGRlPWFlXmFlPDwxXmFlPDwyXmFlPDwzXmFlPDw0O1dbdGVdPWRlPWRlPj4+OF4yNTUmZGVeOTkseltkZV09dGU7dmFyIGxlPVZbdGVdLGNlPVZbbGVdLEc9VltjZV0seT0yNTcqVltkZV1eMTY4NDMwMDgq'@;
put 'ZGU7cVswXVt0ZV09eTw8MjR8eT4+PjgscVsxXVt0ZV09eTw8MTZ8eT4+PjE2LHFbMl1bdGVdPXk8PDh8eT4+PjI0LHFbM11bdGVdPXksUVswXVtkZV09KHk9MTY4NDMwMDkqR142NTUzNypjZV4yNTcqbGVeMTY4NDMwMDgqdGUpPDwyNHx5Pj4+OCxRWzFdW2RlXT15PDwxNnx5Pj4+MTYsUVsy'@;
put 'XVtkZV09eTw8OHx5Pj4+MjQsUVszXVtkZV09eSwwPT09dGU/dGU9YWU9MToodGU9bGVeVltWW1ZbR15sZV1dXSxhZV49VltWW2FlXV0pfXJldHVybntTQk9YOlcsSU5WX1NCT1g6eixTVUJfTUlYOnEsSU5WX1NVQl9NSVg6UX19KCk7ZnVuY3Rpb24gTihWKXt0aGlzLl9rZXk9VShWKSx0aGlz'@;
put 'Ll9yZXNldCgpfU4uYmxvY2tTaXplPTE2LE4ua2V5U2l6ZT0zMixOLnByb3RvdHlwZS5ibG9ja1NpemU9Ti5ibG9ja1NpemUsTi5wcm90b3R5cGUua2V5U2l6ZT1OLmtleVNpemUsTi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBWPXRoaXMuX2tleSxaPVYubGVuZ3RoLFc9'@;
put 'Wis2LHo9NCooVysxKSxxPVtdLFE9MDtRPFo7USsrKXFbUV09VltRXTtmb3IoUT1aO1E8ejtRKyspe3ZhciB0ZT1xW1EtMV07USVaPT0wPyh0ZT1CLlNCT1hbKHRlPXRlPDw4fHRlPj4+MjQpPj4+MjRdPDwyNHxCLlNCT1hbdGU+Pj4xNiYyNTVdPDwxNnxCLlNCT1hbdGU+Pj44JjI1NV08PDh8'@;
put 'Qi5TQk9YWzI1NSZ0ZV0sdGVePWtbUS9afDBdPDwyNCk6Wj42JiZRJVo9PTQmJih0ZT1CLlNCT1hbdGU+Pj4yNF08PDI0fEIuU0JPWFt0ZT4+PjE2JjI1NV08PDE2fEIuU0JPWFt0ZT4+PjgmMjU1XTw8OHxCLlNCT1hbMjU1JnRlXSkscVtRXT1xW1EtWl1edGV9Zm9yKHZhciBhZT1bXSxzZT0w'@;
put 'O3NlPHo7c2UrKyl7dmFyIGRlPXotc2UsbGU9cVtkZS0oc2UlND8wOjQpXTthZVtzZV09c2U8NHx8ZGU8PTQ/bGU6Qi5JTlZfU1VCX01JWFswXVtCLlNCT1hbbGU+Pj4yNF1dXkIuSU5WX1NVQl9NSVhbMV1bQi5TQk9YW2xlPj4+MTYmMjU1XV1eQi5JTlZfU1VCX01JWFsyXVtCLlNCT1hbbGU+'@;
put 'Pj44JjI1NV1dXkIuSU5WX1NVQl9NSVhbM11bQi5TQk9YWzI1NSZsZV1dfXRoaXMuX25Sb3VuZHM9Vyx0aGlzLl9rZXlTY2hlZHVsZT1xLHRoaXMuX2ludktleVNjaGVkdWxlPWFlfSxOLnByb3RvdHlwZS5lbmNyeXB0QmxvY2tSYXc9ZnVuY3Rpb24oVil7cmV0dXJuIEUoVj1VKFYpLHRoaXMu'@;
put 'X2tleVNjaGVkdWxlLEIuU1VCX01JWCxCLlNCT1gsdGhpcy5fblJvdW5kcyl9LE4ucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihWKXt2YXIgWj10aGlzLmVuY3J5cHRCbG9ja1JhdyhWKSxXPVAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBXLndyaXRlVUludDMyQkUoWlswXSwwKSxX'@;
put 'LndyaXRlVUludDMyQkUoWlsxXSw0KSxXLndyaXRlVUludDMyQkUoWlsyXSw4KSxXLndyaXRlVUludDMyQkUoWlszXSwxMiksV30sTi5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKFYpe3ZhciBaPShWPVUoVikpWzFdO1ZbMV09VlszXSxWWzNdPVo7dmFyIFc9RShWLHRoaXMuX2lu'@;
put 'dktleVNjaGVkdWxlLEIuSU5WX1NVQl9NSVgsQi5JTlZfU0JPWCx0aGlzLl9uUm91bmRzKSx6PVAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiB6LndyaXRlVUludDMyQkUoV1swXSwwKSx6LndyaXRlVUludDMyQkUoV1szXSw0KSx6LndyaXRlVUludDMyQkUoV1syXSw4KSx6LndyaXRlVUludDMy'@;
put 'QkUoV1sxXSwxMiksen0sTi5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtJKHRoaXMuX2tleVNjaGVkdWxlKSxJKHRoaXMuX2ludktleVNjaGVkdWxlKSxJKHRoaXMuX2tleSl9LHcuZXhwb3J0cy5BRVM9Tn0sNDg0ODoodyxBLEQpPT57dmFyIFA9RCg0NDk3KSxVPUQoOTUwOSkuQnVmZmVy'@;
put 'LEk9RCgxMDI3KSxFPUQoNTcxNyksaz1EKDMyODgpLEI9RCg3Mjk1KSxOPUQoNjg1KTtmdW5jdGlvbiBWKFosVyx6LHEpe0kuY2FsbCh0aGlzKTt2YXIgUT1VLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhXKTt2YXIgdGU9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhRKTt0'@;
put 'aGlzLl9naGFzaD1uZXcgayh0ZSksej1mdW5jdGlvbihhZSxzZSxkZSl7aWYoMTI9PT1zZS5sZW5ndGgpcmV0dXJuIGFlLl9maW5JRD1VLmNvbmNhdChbc2UsVS5mcm9tKFswLDAsMCwxXSldKSxVLmNvbmNhdChbc2UsVS5mcm9tKFswLDAsMCwyXSldKTt2YXIgbGU9bmV3IGsoZGUpLGNlPXNl'@;
put 'Lmxlbmd0aCxHPWNlJTE2O2xlLnVwZGF0ZShzZSksRyYmbGUudXBkYXRlKFUuYWxsb2MoRz0xNi1HLDApKSxsZS51cGRhdGUoVS5hbGxvYyg4LDApKTt2YXIgeT04KmNlLEw9VS5hbGxvYyg4KTtMLndyaXRlVUludEJFKHksMCw4KSxsZS51cGRhdGUoTCksYWUuX2ZpbklEPWxlLnN0YXRlO3Zh'@;
put 'ciBIPVUuZnJvbShhZS5fZmluSUQpO3JldHVybiBOKEgpLEh9KHRoaXMseix0ZSksdGhpcy5fcHJldj1VLmZyb20oeiksdGhpcy5fY2FjaGU9VS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1VLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9cSx0aGlzLl9hbGVuPTAsdGhpcy5f'@;
put 'bGVuPTAsdGhpcy5fbW9kZT1aLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9RShWLEkpLFYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWil7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIFc9MTYtdGhpcy5fYWxlbiUxNjtXPDE2JiYoVz1VLmFsbG9jKFcs'@;
put 'MCksdGhpcy5fZ2hhc2gudXBkYXRlKFcpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIHo9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWik7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P1o6eiksdGhpcy5fbGVuKz1aLmxlbmd0aCx6fSxWLnByb3RvdHlwZS5fZmluYWw9ZnVu'@;
put 'Y3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBaPUIodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlz'@;
put 'Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24oVyx6KXt2YXIgcT0wO1cubGVuZ3RoIT09ei5sZW5ndGgmJnErKztmb3IodmFyIFE9TWF0aC5taW4oVy5sZW5ndGgsei5sZW5ndGgpLHRlPTA7dGU8UTsrK3RlKXErPVdbdGVdXnpb'@;
put 'dGVdO3JldHVybiBxfShaLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1aLHRoaXMuX2NpcGhlci5zY3J1YigpfSxWLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0'@;
put 'aW9uKCl7aWYodGhpcy5fZGVjcnlwdHx8IVUuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxWLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1'@;
put 'bmN0aW9uKFope2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPVp9LFYucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihaKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoWiksdGhpcy5fYWxlbis9Wi5sZW5ndGh9LHcuZXhwb3J0cz1WfSw0Njk2Oih3LEEsRCk9Pnt2YXIgUD1EKDE0OTQpLFU9RCg2MTkzKSxJPUQoNDk0Nik7QS5j'@;
put 'cmVhdGVDaXBoZXI9QS5DaXBoZXI9UC5jcmVhdGVDaXBoZXIsQS5jcmVhdGVDaXBoZXJpdj1BLkNpcGhlcml2PVAuY3JlYXRlQ2lwaGVyaXYsQS5jcmVhdGVEZWNpcGhlcj1BLkRlY2lwaGVyPVUuY3JlYXRlRGVjaXBoZXIsQS5jcmVhdGVEZWNpcGhlcml2PUEuRGVjaXBoZXJpdj1VLmNyZWF0'@;
put 'ZURlY2lwaGVyaXYsQS5saXN0Q2lwaGVycz1BLmdldENpcGhlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmtleXMoSSl9fSw2MTkzOih3LEEsRCk9Pnt2YXIgUD1EKDQ4NDgpLFU9RCg5NTA5KS5CdWZmZXIsST1EKDQ1KSxFPUQoNTk2OSksaz1EKDEwMjcpLEI9RCg0NDk3KSxOPUQoMzA0'@;
put 'OCk7ZnVuY3Rpb24gVih6LHEsUSl7ay5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBaLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgQi5BRVMocSksdGhpcy5fcHJldj1VLmZyb20oUSksdGhpcy5fbW9kZT16LHRoaXMuX2F1dG9wYWRkaW5nPSEwfWZ1bmN0aW9uIFooKXt0'@;
put 'aGlzLmNhY2hlPVUuYWxsb2NVbnNhZmUoMCl9ZnVuY3Rpb24gVyh6LHEsUSl7dmFyIHRlPUlbei50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBRJiYoUT1VLmZyb20oUSkpLCJHQ00iIT09'@;
put 'dGUubW9kZSYmUS5sZW5ndGghPT10ZS5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1EubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIHEmJihxPVUuZnJvbShxKSkscS5sZW5ndGghPT10ZS5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGtl'@;
put 'eSBsZW5ndGggIitxLmxlbmd0aCk7cmV0dXJuInN0cmVhbSI9PT10ZS50eXBlP25ldyBFKHRlLm1vZHVsZSxxLFEsITApOiJhdXRoIj09PXRlLnR5cGU/bmV3IFAodGUubW9kdWxlLHEsUSwhMCk6bmV3IFYodGUubW9kdWxlLHEsUSl9RCg1NzE3KShWLGspLFYucHJvdG90eXBlLl91cGRhdGU9'@;
put 'ZnVuY3Rpb24oeil7dmFyIHEsUTt0aGlzLl9jYWNoZS5hZGQoeik7Zm9yKHZhciB0ZT1bXTtxPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KVE9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMscSksdGUucHVzaChRKTtyZXR1cm4gVS5jb25jYXQodGUpfSxWLnByb3RvdHlwZS5f'@;
put 'ZmluYWw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbihxKXt2YXIgUT1xWzE1XTtpZihRPDF8fFE+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciB0ZT0tMTsr'@;
put 'K3RlPFE7KWlmKHFbdGUrKDE2LVEpXSE9PVEpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1RKXJldHVybiBxLnNsaWNlKDAsMTYtUSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHopKTtpZih6KXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVs'@;
put 'dGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LFYucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXosdGhpc30sWi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHope3RoaXMuY2FjaGU9VS5jb25jYXQoW3RoaXMuY2FjaGUsel0pfSxa'@;
put 'LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oeil7dmFyIHE7aWYoeil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHF9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJu'@;
put 'IHE9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHE7cmV0dXJuIG51bGx9LFoucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LEEuY3JlYXRlRGVjaXBoZXI9ZnVuY3Rp'@;
put 'b24oeixxKXt2YXIgUT1JW3oudG9Mb3dlckNhc2UoKV07aWYoIVEpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIHRlPU4ocSwhMSxRLmtleSxRLml2KTtyZXR1cm4gVyh6LHRlLmtleSx0ZS5pdil9LEEuY3JlYXRlRGVjaXBoZXJpdj1XfSwxNDk0Oih3LEEs'@;
put 'RCk9Pnt2YXIgUD1EKDQ1KSxVPUQoNDg0OCksST1EKDk1MDkpLkJ1ZmZlcixFPUQoNTk2OSksaz1EKDEwMjcpLEI9RCg0NDk3KSxOPUQoMzA0OCk7ZnVuY3Rpb24gVihxLFEsdGUpe2suY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgVyx0aGlzLl9jaXBoZXI9bmV3IEIuQUVTKFEpLHRoaXMu'@;
put 'X3ByZXY9SS5mcm9tKHRlKSx0aGlzLl9tb2RlPXEsdGhpcy5fYXV0b3BhZGRpbmc9ITB9RCg1NzE3KShWLGspLFYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24ocSl7dmFyIFEsdGU7dGhpcy5fY2FjaGUuYWRkKHEpO2Zvcih2YXIgYWU9W107UT10aGlzLl9jYWNoZS5nZXQoKTspdGU9dGhp'@;
put 'cy5fbW9kZS5lbmNyeXB0KHRoaXMsUSksYWUucHVzaCh0ZSk7cmV0dXJuIEkuY29uY2F0KGFlKX07dmFyIFo9SS5hbGxvYygxNiwxNik7ZnVuY3Rpb24gVygpe3RoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiB6KHEsUSx0ZSl7dmFyIGFlPVBbcS50b0xvd2VyQ2FzZSgpXTtp'@;
put 'ZighYWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7aWYoInN0cmluZyI9PXR5cGVvZiBRJiYoUT1JLmZyb20oUSkpLFEubGVuZ3RoIT09YWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrUS5sZW5ndGgpO2lmKCJzdHJp'@;
put 'bmciPT10eXBlb2YgdGUmJih0ZT1JLmZyb20odGUpKSwiR0NNIiE9PWFlLm1vZGUmJnRlLmxlbmd0aCE9PWFlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrdGUubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PWFlLnR5cGU/bmV3IEUoYWUubW9kdWxlLFEsdGUp'@;
put 'OiJhdXRoIj09PWFlLnR5cGU/bmV3IFUoYWUubW9kdWxlLFEsdGUpOm5ldyBWKGFlLm1vZHVsZSxRLHRlKX1WLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgcT10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBxPXRoaXMuX21vZGUuZW5jcnlw'@;
put 'dCh0aGlzLHEpLHRoaXMuX2NpcGhlci5zY3J1YigpLHE7aWYoIXEuZXF1YWxzKFopKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LFYucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHEpe3Jl'@;
put 'dHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXEsdGhpc30sVy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHEpe3RoaXMuY2FjaGU9SS5jb25jYXQoW3RoaXMuY2FjaGUscV0pfSxXLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHE9dGhpcy5jYWNo'@;
put 'ZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxxfXJldHVybiBudWxsfSxXLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgcT0xNi10aGlzLmNhY2hlLmxlbmd0aCxRPUkuYWxsb2NVbnNhZmUocSksdGU9LTE7Kyt0ZTxxOylRLndy'@;
put 'aXRlVUludDgocSx0ZSk7cmV0dXJuIEkuY29uY2F0KFt0aGlzLmNhY2hlLFFdKX0sQS5jcmVhdGVDaXBoZXJpdj16LEEuY3JlYXRlQ2lwaGVyPWZ1bmN0aW9uKHEsUSl7dmFyIHRlPVBbcS50b0xvd2VyQ2FzZSgpXTtpZighdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0'@;
put 'eXBlIik7dmFyIGFlPU4oUSwhMSx0ZS5rZXksdGUuaXYpO3JldHVybiB6KHEsYWUua2V5LGFlLml2KX19LDMyODg6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyLFU9UC5hbGxvYygxNiwwKTtmdW5jdGlvbiBJKGspe3ZhciBCPVAuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBCLndyaXRl'@;
put 'VUludDMyQkUoa1swXT4+PjAsMCksQi53cml0ZVVJbnQzMkJFKGtbMV0+Pj4wLDQpLEIud3JpdGVVSW50MzJCRShrWzJdPj4+MCw4KSxCLndyaXRlVUludDMyQkUoa1szXT4+PjAsMTIpLEJ9ZnVuY3Rpb24gRShrKXt0aGlzLmg9ayx0aGlzLnN0YXRlPVAuYWxsb2MoMTYsMCksdGhpcy5jYWNo'@;
put 'ZT1QLmFsbG9jVW5zYWZlKDApfUUucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKGspe2Zvcih2YXIgQj0tMTsrK0I8ay5sZW5ndGg7KXRoaXMuc3RhdGVbQl1ePWtbQl07dGhpcy5fbXVsdGlwbHkoKX0sRS5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBrLEIsTixWPVso'@;
put 'az10aGlzLmgpLnJlYWRVSW50MzJCRSgwKSxrLnJlYWRVSW50MzJCRSg0KSxrLnJlYWRVSW50MzJCRSg4KSxrLnJlYWRVSW50MzJCRSgxMildLFo9WzAsMCwwLDBdLFc9LTE7KytXPDEyODspe2Zvcih0aGlzLnN0YXRlW35+KFcvOCldJjE8PDctVyU4JiYoWlswXV49VlswXSxaWzFdXj1WWzFd'@;
put 'LFpbMl1ePVZbMl0sWlszXV49VlszXSksTj0hISgxJlZbM10pLEI9MztCPjA7Qi0tKVZbQl09VltCXT4+PjF8KDEmVltCLTFdKTw8MzE7VlswXT1WWzBdPj4+MSxOJiYoVlswXT0tNTIwMDkzNjk2XlZbMF0pfXRoaXMuc3RhdGU9SShaKX0sRS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGsp'@;
put 'e3ZhciBCO2Zvcih0aGlzLmNhY2hlPVAuY29uY2F0KFt0aGlzLmNhY2hlLGtdKTt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goQil9LEUucHJvdG90eXBlLmZpbmFsPWZ1bmN0'@;
put 'aW9uKGssQil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKFAuY29uY2F0KFt0aGlzLmNhY2hlLFVdLDE2KSksdGhpcy5naGFzaChJKFswLGssMCxCXSkpLHRoaXMuc3RhdGV9LHcuZXhwb3J0cz1FfSw2ODU6dz0+e3cuZXhwb3J0cz1mdW5jdGlvbihBKXtmb3IodmFyIEQs'@;
put 'UD1BLmxlbmd0aDtQLS07KXtpZigyNTUhPT0oRD1BLnJlYWRVSW50OChQKSkpe0QrKyxBLndyaXRlVUludDgoRCxQKTticmVha31BLndyaXRlVUludDgoMCxQKX19fSw1MjkyOih3LEEsRCk9Pnt2YXIgUD1EKDcyOTUpO0EuZW5jcnlwdD1mdW5jdGlvbihVLEkpe3ZhciBFPVAoSSxVLl9wcmV2'@;
put 'KTtyZXR1cm4gVS5fcHJldj1VLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEUpLFUuX3ByZXZ9LEEuZGVjcnlwdD1mdW5jdGlvbihVLEkpe3ZhciBFPVUuX3ByZXY7VS5fcHJldj1JO3ZhciBrPVUuX2NpcGhlci5kZWNyeXB0QmxvY2soSSk7cmV0dXJuIFAoayxFKX19LDYzMTE6KHcsQSxEKT0+e3Zh'@;
put 'ciBQPUQoOTUwOSkuQnVmZmVyLFU9RCg3Mjk1KTtmdW5jdGlvbiBJKEUsayxCKXt2YXIgTj1rLmxlbmd0aCxWPVUoayxFLl9jYWNoZSk7cmV0dXJuIEUuX2NhY2hlPUUuX2NhY2hlLnNsaWNlKE4pLEUuX3ByZXY9UC5jb25jYXQoW0UuX3ByZXYsQj9rOlZdKSxWfUEuZW5jcnlwdD1mdW5jdGlv'@;
put 'bihFLGssQil7Zm9yKHZhciBOLFY9UC5hbGxvY1Vuc2FmZSgwKTtrLmxlbmd0aDspe2lmKDA9PT1FLl9jYWNoZS5sZW5ndGgmJihFLl9jYWNoZT1FLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEUuX3ByZXYpLEUuX3ByZXY9UC5hbGxvY1Vuc2FmZSgwKSksIShFLl9jYWNoZS5sZW5ndGg8PWsubGVu'@;
put 'Z3RoKSl7Vj1QLmNvbmNhdChbVixJKEUsayxCKV0pO2JyZWFrfVY9UC5jb25jYXQoW1YsSShFLGsuc2xpY2UoMCxOPUUuX2NhY2hlLmxlbmd0aCksQildKSxrPWsuc2xpY2UoTil9cmV0dXJuIFZ9fSwxNTEwOih3LEEsRCk9Pnt2YXIgUD1EKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBVKEUsayxC'@;
put 'KXtmb3IodmFyIE4sVixaPS0xLFc9MDsrK1o8ODspTj1rJjE8PDctWj8xMjg6MCxXKz0oMTI4JihWPUUuX2NpcGhlci5lbmNyeXB0QmxvY2soRS5fcHJldilbMF1eTikpPj5aJTgsRS5fcHJldj1JKEUuX3ByZXYsQj9OOlYpO3JldHVybiBXfWZ1bmN0aW9uIEkoRSxrKXt2YXIgQj1FLmxlbmd0'@;
put 'aCxOPS0xLFY9UC5hbGxvY1Vuc2FmZShFLmxlbmd0aCk7Zm9yKEU9UC5jb25jYXQoW0UsUC5mcm9tKFtrXSldKTsrK048QjspVltOXT1FW05dPDwxfEVbTisxXT4+NztyZXR1cm4gVn1BLmVuY3J5cHQ9ZnVuY3Rpb24oRSxrLEIpe2Zvcih2YXIgTj1rLmxlbmd0aCxWPVAuYWxsb2NVbnNhZmUo'@;
put 'TiksWj0tMTsrK1o8TjspVltaXT1VKEUsa1taXSxCKTtyZXR1cm4gVn19LDE5NjQ6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIFUoSSxFLGspe3ZhciBCPUkuX2NpcGhlci5lbmNyeXB0QmxvY2soSS5fcHJldilbMF1eRTtyZXR1cm4gSS5fcHJldj1QLmNvbmNhdChb'@;
put 'SS5fcHJldi5zbGljZSgxKSxQLmZyb20oW2s/RTpCXSldKSxCfUEuZW5jcnlwdD1mdW5jdGlvbihJLEUsayl7Zm9yKHZhciBCPUUubGVuZ3RoLE49UC5hbGxvY1Vuc2FmZShCKSxWPS0xOysrVjxCOylOW1ZdPVUoSSxFW1ZdLGspO3JldHVybiBOfX0sNjAwOToodyxBLEQpPT57dmFyIFA9RCg3'@;
put 'Mjk1KSxVPUQoOTUwOSkuQnVmZmVyLEk9RCg2ODUpO2Z1bmN0aW9uIEUoayl7dmFyIEI9ay5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhrLl9wcmV2KTtyZXR1cm4gSShrLl9wcmV2KSxCfUEuZW5jcnlwdD1mdW5jdGlvbihrLEIpe3ZhciBOPU1hdGguY2VpbChCLmxlbmd0aC8xNiksVj1rLl9j'@;
put 'YWNoZS5sZW5ndGg7ay5fY2FjaGU9VS5jb25jYXQoW2suX2NhY2hlLFUuYWxsb2NVbnNhZmUoMTYqTildKTtmb3IodmFyIFo9MDtaPE47WisrKXt2YXIgVz1FKGspLHo9VisxNipaO2suX2NhY2hlLndyaXRlVUludDMyQkUoV1swXSx6KzApLGsuX2NhY2hlLndyaXRlVUludDMyQkUoV1sxXSx6'@;
put 'KzQpLGsuX2NhY2hlLndyaXRlVUludDMyQkUoV1syXSx6KzgpLGsuX2NhY2hlLndyaXRlVUludDMyQkUoV1szXSx6KzEyKX12YXIgcT1rLl9jYWNoZS5zbGljZSgwLEIubGVuZ3RoKTtyZXR1cm4gay5fY2FjaGU9ay5fY2FjaGUuc2xpY2UoQi5sZW5ndGgpLFAoQixxKX19LDEwODQ6KHcsQSk9'@;
put 'PntBLmVuY3J5cHQ9ZnVuY3Rpb24oRCxQKXtyZXR1cm4gRC5fY2lwaGVyLmVuY3J5cHRCbG9jayhQKX0sQS5kZWNyeXB0PWZ1bmN0aW9uKEQsUCl7cmV0dXJuIEQuX2NpcGhlci5kZWNyeXB0QmxvY2soUCl9fSw0NToodyxBLEQpPT57dmFyIFA9e0VDQjpEKDEwODQpLENCQzpEKDUyOTIpLENG'@;
put 'QjpEKDYzMTEpLENGQjg6RCgxOTY0KSxDRkIxOkQoMTUxMCksT0ZCOkQoODg2MSksQ1RSOkQoNjAwOSksR0NNOkQoNjAwOSl9LFU9RCg0OTQ2KTtmb3IodmFyIEkgaW4gVSlVW0ldLm1vZHVsZT1QW1VbSV0ubW9kZV07dy5leHBvcnRzPVV9LDg4NjE6KHcsQSxEKT0+e3ZhciBQPUQoODc2NCku'@;
put 'QnVmZmVyLFU9RCg3Mjk1KTtmdW5jdGlvbiBJKEUpe3JldHVybiBFLl9wcmV2PUUuX2NpcGhlci5lbmNyeXB0QmxvY2soRS5fcHJldiksRS5fcHJldn1BLmVuY3J5cHQ9ZnVuY3Rpb24oRSxrKXtmb3IoO0UuX2NhY2hlLmxlbmd0aDxrLmxlbmd0aDspRS5fY2FjaGU9UC5jb25jYXQoW0UuX2Nh'@;
put 'Y2hlLEkoRSldKTt2YXIgQj1FLl9jYWNoZS5zbGljZSgwLGsubGVuZ3RoKTtyZXR1cm4gRS5fY2FjaGU9RS5fY2FjaGUuc2xpY2Uoay5sZW5ndGgpLFUoayxCKX19LDU5Njk6KHcsQSxEKT0+e3ZhciBQPUQoNDQ5NyksVT1EKDk1MDkpLkJ1ZmZlcixJPUQoMTAyNyk7ZnVuY3Rpb24gRShrLEIs'@;
put 'TixWKXtJLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhCKSx0aGlzLl9wcmV2PVUuZnJvbShOKSx0aGlzLl9jYWNoZT1VLmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPVUuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1WLHRoaXMuX21vZGU9a31EKDU3MTcpKEUs'@;
put 'SSksRS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsayx0aGlzLl9kZWNyeXB0KX0sRS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9LHcuZXhwb3J0cz1FfSwzNjE0Oih3LEEsRCk9Pnt2'@;
put 'YXIgUD1EKDc2NjcpLFU9RCg0Njk2KSxJPUQoNDUpLEU9RCg5NzE1KSxrPUQoMzA0OCk7ZnVuY3Rpb24gQihWLFosVyl7aWYoVj1WLnRvTG93ZXJDYXNlKCksSVtWXSlyZXR1cm4gVS5jcmVhdGVDaXBoZXJpdihWLFosVyk7aWYoRVtWXSlyZXR1cm4gbmV3IFAoe2tleTpaLGl2OlcsbW9kZTpW'@;
put 'fSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24gTihWLFosVyl7aWYoVj1WLnRvTG93ZXJDYXNlKCksSVtWXSlyZXR1cm4gVS5jcmVhdGVEZWNpcGhlcml2KFYsWixXKTtpZihFW1ZdKXJldHVybiBuZXcgUCh7a2V5OlosaXY6Vyxtb2RlOlYsZGVj'@;
put 'cnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfUEuY3JlYXRlQ2lwaGVyPUEuQ2lwaGVyPWZ1bmN0aW9uKFYsWil7dmFyIFcsejtpZihWPVYudG9Mb3dlckNhc2UoKSxJW1ZdKVc9SVtWXS5rZXksej1JW1ZdLml2O2Vsc2V7aWYoIUVbVl0pdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7Vz04KkVbVl0ua2V5LHo9RVtWXS5pdn12YXIgcT1rKFosITEsVyx6KTtyZXR1cm4gQihWLHEua2V5LHEuaXYpfSxBLmNyZWF0ZUNpcGhlcml2PUEuQ2lwaGVyaXY9QixBLmNyZWF0ZURlY2lwaGVyPUEuRGVjaXBoZXI9ZnVuY3Rp'@;
put 'b24oVixaKXt2YXIgVyx6O2lmKFY9Vi50b0xvd2VyQ2FzZSgpLElbVl0pVz1JW1ZdLmtleSx6PUlbVl0uaXY7ZWxzZXtpZighRVtWXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtXPTgqRVtWXS5rZXksej1FW1ZdLml2fXZhciBxPWsoWiwhMSxXLHopO3JldHVy'@;
put 'biBOKFYscS5rZXkscS5pdil9LEEuY3JlYXRlRGVjaXBoZXJpdj1BLkRlY2lwaGVyaXY9TixBLmxpc3RDaXBoZXJzPUEuZ2V0Q2lwaGVycz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhFKS5jb25jYXQoVS5nZXRDaXBoZXJzKCkpfX0sNzY2NzoodyxBLEQpPT57dmFyIFA9RCgxMDI3'@;
put 'KSxVPUQoNTI1MSksST1EKDU3MTcpLEU9RCg5NTA5KS5CdWZmZXIsaz17ImRlcy1lZGUzLWNiYyI6VS5DQkMuaW5zdGFudGlhdGUoVS5FREUpLCJkZXMtZWRlMyI6VS5FREUsImRlcy1lZGUtY2JjIjpVLkNCQy5pbnN0YW50aWF0ZShVLkVERSksImRlcy1lZGUiOlUuRURFLCJkZXMtY2JjIjpV'@;
put 'LkNCQy5pbnN0YW50aWF0ZShVLkRFUyksImRlcy1lY2IiOlUuREVTfTtmdW5jdGlvbiBCKE4pe1AuY2FsbCh0aGlzKTt2YXIgVixaPU4ubW9kZS50b0xvd2VyQ2FzZSgpLFc9a1taXTtWPU4uZGVjcnlwdD8iZGVjcnlwdCI6ImVuY3J5cHQiO3ZhciB6PU4ua2V5O0UuaXNCdWZmZXIoeil8fCh6'@;
put 'PUUuZnJvbSh6KSksImRlcy1lZGUiIT09WiYmImRlcy1lZGUtY2JjIiE9PVp8fCh6PUUuY29uY2F0KFt6LHouc2xpY2UoMCw4KV0pKTt2YXIgcT1OLml2O0UuaXNCdWZmZXIocSl8fChxPUUuZnJvbShxKSksdGhpcy5fZGVzPVcuY3JlYXRlKHtrZXk6eixpdjpxLHR5cGU6Vn0pfWsuZGVzPWtb'@;
put 'ImRlcy1jYmMiXSxrLmRlczM9a1siZGVzLWVkZTMtY2JjIl0sdy5leHBvcnRzPUIsSShCLFApLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7cmV0dXJuIEUuZnJvbSh0aGlzLl9kZXMudXBkYXRlKE4pKX0sQi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIEUuZnJv'@;
put 'bSh0aGlzLl9kZXMuZmluYWwoKSl9fSw5NzE1Oih3LEEpPT57QVsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxBWyJkZXMtY2JjIl09QS5kZXM9e2tleTo4LGl2Ojh9LEFbImRlcy1lZGUzLWNiYyJdPUEuZGVzMz17a2V5OjI0LGl2Ojh9LEFbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxBWyJk'@;
put 'ZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0sQVsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6MH19LDM2NjM6KHcsQSxEKT0+e3ZhciBQPUQoODc2NCkuQnVmZmVyLFU9RCgzNTUwKSxJPUQoMTc5OCk7ZnVuY3Rpb24gRShCKXt2YXIgTixWPUIubW9kdWx1cy5ieXRlTGVuZ3RoKCk7ZG97Tj1uZXcg'@;
put 'VShJKFYpKX13aGlsZShOLmNtcChCLm1vZHVsdXMpPj0wfHwhTi51bW9kKEIucHJpbWUxKXx8IU4udW1vZChCLnByaW1lMikpO3JldHVybiBOfWZ1bmN0aW9uIGsoQixOKXt2YXIgY2UsRyxWPXtibGluZGVyOihHPUUoY2U9TikpLnRvUmVkKFUubW9udChjZS5tb2R1bHVzKSkucmVkUG93KG5l'@;
put 'dyBVKGNlLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpHLmludm0oY2UubW9kdWx1cyl9LFo9Ti5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxXPW5ldyBVKEIpLm11bChWLmJsaW5kZXIpLnVtb2QoTi5tb2R1bHVzKSx6PVcudG9SZWQoVS5tb250KE4ucHJpbWUxKSkscT1XLnRv'@;
put 'UmVkKFUubW9udChOLnByaW1lMikpLFE9Ti5jb2VmZmljaWVudCx0ZT1OLnByaW1lMSxhZT1OLnByaW1lMixzZT16LnJlZFBvdyhOLmV4cG9uZW50MSkuZnJvbVJlZCgpLGRlPXEucmVkUG93KE4uZXhwb25lbnQyKS5mcm9tUmVkKCksbGU9c2UuaXN1YihkZSkuaW11bChRKS51bW9kKHRlKS5p'@;
put 'bXVsKGFlKTtyZXR1cm4gZGUuaWFkZChsZSkuaW11bChWLnVuYmxpbmRlcikudW1vZChOLm1vZHVsdXMpLnRvQXJyYXlMaWtlKFAsImJlIixaKX1rLmdldHI9RSx3LmV4cG9ydHM9a30sNjA0MjoodyxBLEQpPT57dy5leHBvcnRzPUQoNTIwNyl9LDQ3NDM6KHcsQSxEKT0+e3ZhciBQPUQoOTUw'@;
put 'OSkuQnVmZmVyLFU9RCgzNDgyKSxJPUQoODQ3MyksRT1EKDU3MTcpLGs9RCgyOTU3KSxCPUQoNzc1MyksTj1EKDUyMDcpO2Z1bmN0aW9uIFYocSl7SS5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBRPU5bcV07aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7'@;
put 'dGhpcy5faGFzaFR5cGU9US5oYXNoLHRoaXMuX2hhc2g9VShRLmhhc2gpLHRoaXMuX3RhZz1RLmlkLHRoaXMuX3NpZ25UeXBlPVEuc2lnbn1mdW5jdGlvbiBaKHEpe0kuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgUT1OW3FdO2lmKCFRKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdl'@;
put 'IGRpZ2VzdCIpO3RoaXMuX2hhc2g9VShRLmhhc2gpLHRoaXMuX3RhZz1RLmlkLHRoaXMuX3NpZ25UeXBlPVEuc2lnbn1mdW5jdGlvbiBXKHEpe3JldHVybiBuZXcgVihxKX1mdW5jdGlvbiB6KHEpe3JldHVybiBuZXcgWihxKX1PYmplY3Qua2V5cyhOKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe05b'@;
put 'cV0uaWQ9UC5mcm9tKE5bcV0uaWQsImhleCIpLE5bcS50b0xvd2VyQ2FzZSgpXT1OW3FdfSksRShWLEkuV3JpdGFibGUpLFYucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihxLFEsdGUpe3RoaXMuX2hhc2gudXBkYXRlKHEpLHRlKCl9LFYucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihxLFEp'@;
put 'e3JldHVybiJzdHJpbmciPT10eXBlb2YgcSYmKHE9UC5mcm9tKHEsUSkpLHRoaXMuX2hhc2gudXBkYXRlKHEpLHRoaXN9LFYucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24ocSxRKXt0aGlzLmVuZCgpO3ZhciB0ZT10aGlzLl9oYXNoLmRpZ2VzdCgpLGFlPWsodGUscSx0aGlzLl9oYXNoVHlwZSx0'@;
put 'aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBRP2FlLnRvU3RyaW5nKFEpOmFlfSxFKFosSS5Xcml0YWJsZSksWi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHEsUSx0ZSl7dGhpcy5faGFzaC51cGRhdGUocSksdGUoKX0sWi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHEsUSl7'@;
put 'cmV0dXJuInN0cmluZyI9PXR5cGVvZiBxJiYocT1QLmZyb20ocSxRKSksdGhpcy5faGFzaC51cGRhdGUocSksdGhpc30sWi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHEsUSx0ZSl7InN0cmluZyI9PXR5cGVvZiBRJiYoUT1QLmZyb20oUSx0ZSkpLHRoaXMuZW5kKCk7dmFyIGFlPXRoaXMu'@;
put 'X2hhc2guZGlnZXN0KCk7cmV0dXJuIEIoUSxhZSxxLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyl9LHcuZXhwb3J0cz17U2lnbjpXLFZlcmlmeTp6LGNyZWF0ZVNpZ246VyxjcmVhdGVWZXJpZnk6en19LDI5NTc6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyLFU9RCg4MzU1KSxJPUQo'@;
put 'MzY2MyksRT1EKDY5NDgpLmVjLGs9RCgzNTUwKSxCPUQoOTgwKSxOPUQoMTMwOCk7ZnVuY3Rpb24gVihxLFEsdGUsYWUpe2lmKChxPVAuZnJvbShxLnRvQXJyYXkoKSkpLmxlbmd0aDxRLmJ5dGVMZW5ndGgoKSl7dmFyIHNlPVAuYWxsb2MoUS5ieXRlTGVuZ3RoKCktcS5sZW5ndGgpO3E9UC5j'@;
put 'b25jYXQoW3NlLHFdKX12YXIgZGU9dGUubGVuZ3RoLGxlPWZ1bmN0aW9uKHksTCl7eT0oeT1aKHksTCkpLm1vZChMKTt2YXIgSD1QLmZyb20oeS50b0FycmF5KCkpO2lmKEgubGVuZ3RoPEwuYnl0ZUxlbmd0aCgpKXt2YXIgaj1QLmFsbG9jKEwuYnl0ZUxlbmd0aCgpLUgubGVuZ3RoKTtIPVAu'@;
put 'Y29uY2F0KFtqLEhdKX1yZXR1cm4gSH0odGUsUSksY2U9UC5hbGxvYyhkZSk7Y2UuZmlsbCgxKTt2YXIgRz1QLmFsbG9jKGRlKTtyZXR1cm4gRz1VKGFlLEcpLnVwZGF0ZShjZSkudXBkYXRlKFAuZnJvbShbMF0pKS51cGRhdGUocSkudXBkYXRlKGxlKS5kaWdlc3QoKSxjZT1VKGFlLEcpLnVw'@;
put 'ZGF0ZShjZSkuZGlnZXN0KCkse2s6Rz1VKGFlLEcpLnVwZGF0ZShjZSkudXBkYXRlKFAuZnJvbShbMV0pKS51cGRhdGUocSkudXBkYXRlKGxlKS5kaWdlc3QoKSx2OmNlPVUoYWUsRykudXBkYXRlKGNlKS5kaWdlc3QoKX19ZnVuY3Rpb24gWihxLFEpe3ZhciB0ZT1uZXcgayhxKSxhZT0ocS5s'@;
put 'ZW5ndGg8PDMpLVEuYml0TGVuZ3RoKCk7cmV0dXJuIGFlPjAmJnRlLmlzaHJuKGFlKSx0ZX1mdW5jdGlvbiBXKHEsUSx0ZSl7dmFyIGFlLHNlO2Rve2ZvcihhZT1QLmFsbG9jKDApOzgqYWUubGVuZ3RoPHEuYml0TGVuZ3RoKCk7KVEudj1VKHRlLFEuaykudXBkYXRlKFEudikuZGlnZXN0KCks'@;
put 'YWU9UC5jb25jYXQoW2FlLFEudl0pO3NlPVooYWUscSksUS5rPVUodGUsUS5rKS51cGRhdGUoUS52KS51cGRhdGUoUC5mcm9tKFswXSkpLmRpZ2VzdCgpLFEudj1VKHRlLFEuaykudXBkYXRlKFEudikuZGlnZXN0KCl9d2hpbGUoLTEhPT1zZS5jbXAocSkpO3JldHVybiBzZX1mdW5jdGlvbiB6'@;
put 'KHEsUSx0ZSxhZSl7cmV0dXJuIHEudG9SZWQoay5tb250KHRlKSkucmVkUG93KFEpLmZyb21SZWQoKS5tb2QoYWUpfXcuZXhwb3J0cz1mdW5jdGlvbihxLFEsdGUsYWUsc2Upe3ZhciBkZT1CKFEpO2lmKGRlLmN1cnZlKXtpZigiZWNkc2EiIT09YWUmJiJlY2RzYS9yc2EiIT09YWUpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlIik7cmV0dXJuIGZ1bmN0aW9uKHksTCl7dmFyIEg9TltMLmN1cnZlLmpvaW4oIi4iKV07aWYoIUgpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrTC5jdXJ2ZS5qb2luKCIuIikpO3ZhciBnPW5ldyBFKEgpLmtleUZyb21Q'@;
put 'cml2YXRlKEwucHJpdmF0ZUtleSkuc2lnbih5KTtyZXR1cm4gUC5mcm9tKGcudG9ERVIoKSl9KHEsZGUpfWlmKCJkc2EiPT09ZGUudHlwZSl7aWYoImRzYSIhPT1hZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oeSxMLEgpe2Zvcih2'@;
put 'YXIgaixnPUwucGFyYW1zLnByaXZfa2V5LFM9TC5wYXJhbXMucCx4PUwucGFyYW1zLnEsXz1MLnBhcmFtcy5nLHA9bmV3IGsoMCksQz1aKHkseCkubW9kKHgpLEs9ITEsbmU9VihnLHgseSxIKTshMT09PUs7KXA9eihfLGo9Vyh4LG5lLEgpLFMseCksMD09PShLPWouaW52bSh4KS5pbXVsKEMu'@;
put 'YWRkKGcubXVsKHApKSkubW9kKHgpKS5jbXBuKDApJiYoSz0hMSxwPW5ldyBrKDApKTtyZXR1cm4gZnVuY3Rpb24odWUsaGUpe3VlPXVlLnRvQXJyYXkoKSxoZT1oZS50b0FycmF5KCksMTI4JnVlWzBdJiYodWU9WzBdLmNvbmNhdCh1ZSkpLDEyOCZoZVswXSYmKGhlPVswXS5jb25jYXQoaGUp'@;
put 'KTt2YXIgT2U9WzQ4LHVlLmxlbmd0aCtoZS5sZW5ndGgrNCwyLHVlLmxlbmd0aF07cmV0dXJuIE9lPU9lLmNvbmNhdCh1ZSxbMixoZS5sZW5ndGhdLGhlKSxQLmZyb20oT2UpfShwLEspfShxLGRlLHRlKX1pZigicnNhIiE9PWFlJiYiZWNkc2EvcnNhIiE9PWFlKXRocm93IG5ldyBFcnJvcigi'@;
put 'd3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3E9UC5jb25jYXQoW3NlLHFdKTtmb3IodmFyIGxlPWRlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGNlPVswLDFdO3EubGVuZ3RoK2NlLmxlbmd0aCsxPGxlOyljZS5wdXNoKDI1NSk7Y2UucHVzaCgwKTtmb3IodmFyIEc9LTE7KytHPHEubGVuZ3RoOylj'@;
put 'ZS5wdXNoKHFbR10pO3JldHVybiBJKGNlLGRlKX0sdy5leHBvcnRzLmdldEtleT1WLHcuZXhwb3J0cy5tYWtlS2V5PVd9LDc3NTM6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyLFU9RCgzNTUwKSxJPUQoNjk0OCkuZWMsRT1EKDk4MCksaz1EKDEzMDgpO2Z1bmN0aW9uIEIoTixWKXtp'@;
put 'ZihOLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKE4uY21wKFYpPj1WKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX13LmV4cG9ydHM9ZnVuY3Rpb24oTixWLFosVyx6KXt2YXIgcT1FKFopO2lmKCJlYyI9PT1xLnR5cGUpe2lmKCJlY2RzYSIhPT1X'@;
put 'JiYiZWNkc2EvcnNhIiE9PVcpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyx5KXt2YXIgTD1rW3kuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighTCl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gY3VydmUgIit5'@;
put 'LmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBJKEwpLnZlcmlmeShHLGNlLHkuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oTixWLHEpfWlmKCJkc2EiPT09cS50eXBlKXtpZigiZHNhIiE9PVcpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5'@;
put 'IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24oY2UsRyx5KXt2YXIgTD15LmRhdGEucCxIPXkuZGF0YS5xLGo9eS5kYXRhLmcsZz15LmRhdGEucHViX2tleSxTPUUuc2lnbmF0dXJlLmRlY29kZShjZSwiZGVyIikseD1TLnMsXz1TLnI7Qih4LEgpLEIoXyxIKTt2YXIgcD1VLm1vbnQoTCksQz14Lmlu'@;
put 'dm0oSCk7cmV0dXJuIDA9PT1qLnRvUmVkKHApLnJlZFBvdyhuZXcgVShHKS5tdWwoQykubW9kKEgpKS5mcm9tUmVkKCkubXVsKGcudG9SZWQocCkucmVkUG93KF8ubXVsKEMpLm1vZChIKSkuZnJvbVJlZCgpKS5tb2QoTCkubW9kKEgpLmNtcChfKX0oTixWLHEpfWlmKCJyc2EiIT09VyYmImVj'@;
put 'ZHNhL3JzYSIhPT1XKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7Vj1QLmNvbmNhdChbeixWXSk7Zm9yKHZhciBRPXEubW9kdWx1cy5ieXRlTGVuZ3RoKCksdGU9WzFdLGFlPTA7Vi5sZW5ndGgrdGUubGVuZ3RoKzI8UTspdGUucHVzaCgyNTUpLGFlKys7dGUucHVz'@;
put 'aCgwKTtmb3IodmFyIHNlPS0xOysrc2U8Vi5sZW5ndGg7KXRlLnB1c2goVltzZV0pO3RlPVAuZnJvbSh0ZSk7dmFyIGRlPVUubW9udChxLm1vZHVsdXMpO049KE49bmV3IFUoTikudG9SZWQoZGUpKS5yZWRQb3cobmV3IFUocS5wdWJsaWNFeHBvbmVudCkpLE49UC5mcm9tKE4uZnJvbVJlZCgp'@;
put 'LnRvQXJyYXkoKSk7dmFyIGxlPWFlPDg/MTowO2ZvcihRPU1hdGgubWluKE4ubGVuZ3RoLHRlLmxlbmd0aCksTi5sZW5ndGghPT10ZS5sZW5ndGgmJihsZT0xKSxzZT0tMTsrK3NlPFE7KWxlfD1OW3NlXV50ZVtzZV07cmV0dXJuIDA9PT1sZX19LDcyOTU6KHcsQSxEKT0+e3ZhciBQPUQoODc2'@;
put 'NCkuQnVmZmVyO3cuZXhwb3J0cz1mdW5jdGlvbihVLEkpe2Zvcih2YXIgRT1NYXRoLm1pbihVLmxlbmd0aCxJLmxlbmd0aCksaz1uZXcgUChFKSxCPTA7QjxFOysrQilrW0JdPVVbQl1eSVtCXTtyZXR1cm4ga319LDg3NjQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDUxMDgpO2Nv'@;
put 'bnN0IFU9RCg5NzQyKSxJPUQoNjQ1KSxFPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtBLkJ1ZmZlcj1OLEEuU2xvd0J1ZmZlcj1mdW5jdGlvbihUZSl7'@;
put 'cmV0dXJuK1RlIT1UZSYmKFRlPTApLE4uYWxsb2MoK1RlKX0sQS5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCBrPTIxNDc0ODM2NDc7ZnVuY3Rpb24gQihUZSl7aWYoVGU+ayl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1RlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAi'@;
put 'c2l6ZSInKTtjb25zdCBBZT1uZXcgVWludDhBcnJheShUZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihBZSxOLnByb3RvdHlwZSksQWV9ZnVuY3Rpb24gTihUZSxBZSxCZSl7aWYoIm51bWJlciI9PXR5cGVvZiBUZSl7aWYoInN0cmluZyI9PXR5cGVvZiBBZSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCdUaGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gVyhUZSl9cmV0dXJuIFYoVGUsQWUsQmUpfWZ1bmN0aW9uIFYoVGUsQWUsQmUpe2lmKCJzdHJpbmciPT10eXBlb2YgVGUpcmV0dXJuIGZ1bmN0'@;
put 'aW9uKEN0LEZ0KXtpZigic3RyaW5nIj09dHlwZW9mIEZ0JiYiIiE9PUZ0fHwoRnQ9InV0ZjgiKSwhTi5pc0VuY29kaW5nKEZ0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK0Z0KTtjb25zdCBSdD0wfHRlKEN0LEZ0KTtsZXQgWHQ9QihSdCk7Y29uc3QgU249WHQu'@;
put 'd3JpdGUoQ3QsRnQpO3JldHVybiBTbiE9PVJ0JiYoWHQ9WHQuc2xpY2UoMCxTbikpLFh0fShUZSxBZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFRlKSlyZXR1cm4gZnVuY3Rpb24oQ3Qpe2lmKFJlKEN0LFVpbnQ4QXJyYXkpKXtjb25zdCBGdD1uZXcgVWludDhBcnJheShDdCk7cmV0dXJuIHEo'@;
put 'RnQuYnVmZmVyLEZ0LmJ5dGVPZmZzZXQsRnQuYnl0ZUxlbmd0aCl9cmV0dXJuIHooQ3QpfShUZSk7aWYobnVsbD09VGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwg'@;
put 'b3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVGUpO2lmKFJlKFRlLEFycmF5QnVmZmVyKXx8VGUmJlJlKFRlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihSZShUZSxTaGFyZWRBcnJheUJ1ZmZlcil8fFRlJiZS'@;
put 'ZShUZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gcShUZSxBZSxCZSk7aWYoIm51bWJlciI9PXR5cGVvZiBUZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXIn'@;
put 'KTtjb25zdCBvdD1UZS52YWx1ZU9mJiZUZS52YWx1ZU9mKCk7aWYobnVsbCE9b3QmJm90IT09VGUpcmV0dXJuIE4uZnJvbShvdCxBZSxCZSk7Y29uc3QgbHQ9ZnVuY3Rpb24oQ3Qpe2lmKE4uaXNCdWZmZXIoQ3QpKXtjb25zdCBGdD0wfFEoQ3QubGVuZ3RoKSxSdD1CKEZ0KTtyZXR1cm4gMD09'@;
put 'PVJ0Lmxlbmd0aHx8Q3QuY29weShSdCwwLDAsRnQpLFJ0fXJldHVybiB2b2lkIDAhPT1DdC5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBDdC5sZW5ndGh8fGV0KEN0Lmxlbmd0aCk/QigwKTp6KEN0KToiQnVmZmVyIj09PUN0LnR5cGUmJkFycmF5LmlzQXJyYXkoQ3QuZGF0YSk/eihDdC5kYXRh'@;
put 'KTp2b2lkIDB9KFRlKTtpZihsdClyZXR1cm4gbHQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIFRlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIE4uZnJvbShUZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmci'@;
put 'KSxBZSxCZSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgVGUpfWZ1bmN0aW9uIFoo'@;
put 'VGUpe2lmKCJudW1iZXIiIT10eXBlb2YgVGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihUZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrVGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXpl'@;
put 'IicpfWZ1bmN0aW9uIFcoVGUpe3JldHVybiBaKFRlKSxCKFRlPDA/MDowfFEoVGUpKX1mdW5jdGlvbiB6KFRlKXtjb25zdCBBZT1UZS5sZW5ndGg8MD8wOjB8UShUZS5sZW5ndGgpLEJlPUIoQWUpO2ZvcihsZXQgb3Q9MDtvdDxBZTtvdCs9MSlCZVtvdF09MjU1JlRlW290XTtyZXR1cm4gQmV9'@;
put 'ZnVuY3Rpb24gcShUZSxBZSxCZSl7aWYoQWU8MHx8VGUuYnl0ZUxlbmd0aDxBZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoVGUuYnl0ZUxlbmd0aDxBZSsoQmV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3Ro'@;
put 'IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgb3Q7cmV0dXJuIG90PXZvaWQgMD09PUFlJiZ2b2lkIDA9PT1CZT9uZXcgVWludDhBcnJheShUZSk6dm9pZCAwPT09QmU/bmV3IFVpbnQ4QXJyYXkoVGUsQWUpOm5ldyBVaW50OEFycmF5KFRlLEFlLEJlKSxPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2Yob3QsTi5wcm90b3R5cGUpLG90fWZ1bmN0aW9uIFEoVGUpe2lmKFRlPj1rKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitrLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8'@;
put 'VGV9ZnVuY3Rpb24gdGUoVGUsQWUpe2lmKE4uaXNCdWZmZXIoVGUpKXJldHVybiBUZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KFRlKXx8UmUoVGUsQXJyYXlCdWZmZXIpKXJldHVybiBUZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgVGUpdGhyb3cgbmV3IFR5cGVFcnJv'@;
put 'cignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIFRlKTtjb25zdCBCZT1UZS5sZW5ndGgsb3Q9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtp'@;
put 'Zighb3QmJjA9PT1CZSlyZXR1cm4gMDtsZXQgbHQ9ITE7Zm9yKDs7KXN3aXRjaChBZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gQmU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gRmUoVGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIi'@;
put 'OmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqQmU7Y2FzZSJoZXgiOnJldHVybiBCZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBDZShUZSkubGVuZ3RoO2RlZmF1bHQ6aWYobHQpcmV0dXJuIG90Py0xOkZlKFRlKS5sZW5ndGg7QWU9KCIiK0FlKS50b0xvd2VyQ2FzZSgp'@;
put 'LGx0PSEwfX1mdW5jdGlvbiBhZShUZSxBZSxCZSl7bGV0IG90PSExO2lmKCh2b2lkIDA9PT1BZXx8QWU8MCkmJihBZT0wKSxBZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1CZXx8QmU+dGhpcy5sZW5ndGgpJiYoQmU9dGhpcy5sZW5ndGgpLEJlPD0wKXx8KEJlPj4+PTApPD0oQWU+Pj49MCkp'@;
put 'cmV0dXJuIiI7Zm9yKFRlfHwoVGU9InV0ZjgiKTs7KXN3aXRjaChUZSl7Y2FzZSJoZXgiOnJldHVybiBwKHRoaXMsQWUsQmUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGcodGhpcyxBZSxCZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIHgodGhpcyxBZSxCZSk7Y2FzZSJsYXRpbjEiOmNh'@;
put 'c2UiYmluYXJ5IjpyZXR1cm4gXyh0aGlzLEFlLEJlKTtjYXNlImJhc2U2NCI6cmV0dXJuIGoodGhpcyxBZSxCZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBDKHRoaXMsQWUsQmUpO2RlZmF1bHQ6aWYob3QpdGhyb3cgbmV3IFR5'@;
put 'cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitUZSk7VGU9KFRlKyIiKS50b0xvd2VyQ2FzZSgpLG90PSEwfX1mdW5jdGlvbiBzZShUZSxBZSxCZSl7Y29uc3Qgb3Q9VGVbQWVdO1RlW0FlXT1UZVtCZV0sVGVbQmVdPW90fWZ1bmN0aW9uIGRlKFRlLEFlLEJlLG90LGx0KXtpZigwPT09VGUu'@;
put 'bGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2YgQmU/KG90PUJlLEJlPTApOkJlPjIxNDc0ODM2NDc/QmU9MjE0NzQ4MzY0NzpCZTwtMjE0NzQ4MzY0OCYmKEJlPS0yMTQ3NDgzNjQ4KSxldChCZT0rQmUpJiYoQmU9bHQ/MDpUZS5sZW5ndGgtMSksQmU8MCYmKEJlPVRlLmxlbmd0'@;
put 'aCtCZSksQmU+PVRlLmxlbmd0aCl7aWYobHQpcmV0dXJuLTE7QmU9VGUubGVuZ3RoLTF9ZWxzZSBpZihCZTwwKXtpZighbHQpcmV0dXJuLTE7QmU9MH1pZigic3RyaW5nIj09dHlwZW9mIEFlJiYoQWU9Ti5mcm9tKEFlLG90KSksTi5pc0J1ZmZlcihBZSkpcmV0dXJuIDA9PT1BZS5sZW5ndGg/'@;
put 'LTE6bGUoVGUsQWUsQmUsb3QsbHQpO2lmKCJudW1iZXIiPT10eXBlb2YgQWUpcmV0dXJuIEFlJj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/bHQ/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKFRlLEFlLEJlKTpVaW50OEFycmF5'@;
put 'LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKFRlLEFlLEJlKTpsZShUZSxbQWVdLEJlLG90LGx0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBsZShUZSxBZSxCZSxvdCxsdCl7bGV0IEN0LEZ0PTEsUnQ9VGUu'@;
put 'bGVuZ3RoLFh0PUFlLmxlbmd0aDtpZih2b2lkIDAhPT1vdCYmKCJ1Y3MyIj09PShvdD1TdHJpbmcob3QpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09b3R8fCJ1dGYxNmxlIj09PW90fHwidXRmLTE2bGUiPT09b3QpKXtpZihUZS5sZW5ndGg8Mnx8QWUubGVuZ3RoPDIpcmV0dXJuLTE7RnQ9'@;
put 'MixSdC89MixYdC89MixCZS89Mn1mdW5jdGlvbiBTbih6dCx2bil7cmV0dXJuIDE9PT1GdD96dFt2bl06enQucmVhZFVJbnQxNkJFKHZuKkZ0KX1pZihsdCl7bGV0IHp0PS0xO2ZvcihDdD1CZTtDdDxSdDtDdCsrKWlmKFNuKFRlLEN0KT09PVNuKEFlLC0xPT09enQ/MDpDdC16dCkpe2lmKC0x'@;
put 'PT09enQmJih6dD1DdCksQ3QtenQrMT09PVh0KXJldHVybiB6dCpGdH1lbHNlLTEhPT16dCYmKEN0LT1DdC16dCksenQ9LTF9ZWxzZSBmb3IoQmUrWHQ+UnQmJihCZT1SdC1YdCksQ3Q9QmU7Q3Q+PTA7Q3QtLSl7bGV0IHp0PSEwO2ZvcihsZXQgdm49MDt2bjxYdDt2bisrKWlmKFNuKFRlLEN0'@;
put 'K3ZuKSE9PVNuKEFlLHZuKSl7enQ9ITE7YnJlYWt9aWYoenQpcmV0dXJuIEN0fXJldHVybi0xfWZ1bmN0aW9uIGNlKFRlLEFlLEJlLG90KXtCZT1OdW1iZXIoQmUpfHwwO2NvbnN0IGx0PVRlLmxlbmd0aC1CZTtvdD8ob3Q9TnVtYmVyKG90KSk+bHQmJihvdD1sdCk6b3Q9bHQ7Y29uc3QgQ3Q9'@;
put 'QWUubGVuZ3RoO2xldCBGdDtmb3Iob3Q+Q3QvMiYmKG90PUN0LzIpLEZ0PTA7RnQ8b3Q7KytGdCl7Y29uc3QgUnQ9cGFyc2VJbnQoQWUuc3Vic3RyKDIqRnQsMiksMTYpO2lmKGV0KFJ0KSlyZXR1cm4gRnQ7VGVbQmUrRnRdPVJ0fXJldHVybiBGdH1mdW5jdGlvbiBHKFRlLEFlLEJlLG90KXty'@;
put 'ZXR1cm4gRGUoRmUoQWUsVGUubGVuZ3RoLUJlKSxUZSxCZSxvdCl9ZnVuY3Rpb24geShUZSxBZSxCZSxvdCl7cmV0dXJuIERlKGZ1bmN0aW9uKGx0KXtjb25zdCBDdD1bXTtmb3IobGV0IEZ0PTA7RnQ8bHQubGVuZ3RoOysrRnQpQ3QucHVzaCgyNTUmbHQuY2hhckNvZGVBdChGdCkpO3JldHVy'@;
put 'biBDdH0oQWUpLFRlLEJlLG90KX1mdW5jdGlvbiBMKFRlLEFlLEJlLG90KXtyZXR1cm4gRGUoQ2UoQWUpLFRlLEJlLG90KX1mdW5jdGlvbiBIKFRlLEFlLEJlLG90KXtyZXR1cm4gRGUoZnVuY3Rpb24obHQsQ3Qpe2xldCBGdCxSdCxYdDtjb25zdCBTbj1bXTtmb3IobGV0IHp0PTA7enQ8bHQu'@;
put 'bGVuZ3RoJiYhKChDdC09Mik8MCk7Kyt6dClGdD1sdC5jaGFyQ29kZUF0KHp0KSxSdD1GdD4+OCxYdD1GdCUyNTYsU24ucHVzaChYdCksU24ucHVzaChSdCk7cmV0dXJuIFNufShBZSxUZS5sZW5ndGgtQmUpLFRlLEJlLG90KX1mdW5jdGlvbiBqKFRlLEFlLEJlKXtyZXR1cm4gVS5mcm9tQnl0'@;
put 'ZUFycmF5KDA9PT1BZSYmQmU9PT1UZS5sZW5ndGg/VGU6VGUuc2xpY2UoQWUsQmUpKX1mdW5jdGlvbiBnKFRlLEFlLEJlKXtCZT1NYXRoLm1pbihUZS5sZW5ndGgsQmUpO2NvbnN0IG90PVtdO2xldCBsdD1BZTtmb3IoO2x0PEJlOyl7Y29uc3QgQ3Q9VGVbbHRdO2xldCBGdD1udWxsLFJ0PUN0'@;
put 'PjIzOT80OkN0PjIyMz8zOkN0PjE5MT8yOjE7aWYobHQrUnQ8PUJlKXtsZXQgWHQsU24senQsdm47c3dpdGNoKFJ0KXtjYXNlIDE6Q3Q8MTI4JiYoRnQ9Q3QpO2JyZWFrO2Nhc2UgMjpYdD1UZVtsdCsxXSwxMjg9PSgxOTImWHQpJiYodm49KDMxJkN0KTw8Nnw2MyZYdCx2bj4xMjcmJihGdD12'@;
put 'bikpO2JyZWFrO2Nhc2UgMzpYdD1UZVtsdCsxXSxTbj1UZVtsdCsyXSwxMjg9PSgxOTImWHQpJiYxMjg9PSgxOTImU24pJiYodm49KDE1JkN0KTw8MTJ8KDYzJlh0KTw8Nnw2MyZTbix2bj4yMDQ3JiYodm48NTUyOTZ8fHZuPjU3MzQzKSYmKEZ0PXZuKSk7YnJlYWs7Y2FzZSA0Olh0PVRlW2x0'@;
put 'KzFdLFNuPVRlW2x0KzJdLHp0PVRlW2x0KzNdLDEyOD09KDE5MiZYdCkmJjEyOD09KDE5MiZTbikmJjEyOD09KDE5MiZ6dCkmJih2bj0oMTUmQ3QpPDwxOHwoNjMmWHQpPDwxMnwoNjMmU24pPDw2fDYzJnp0LHZuPjY1NTM1JiZ2bjwxMTE0MTEyJiYoRnQ9dm4pKX19bnVsbD09PUZ0PyhGdD02'@;
put 'NTUzMyxSdD0xKTpGdD42NTUzNSYmKEZ0LT02NTUzNixvdC5wdXNoKEZ0Pj4+MTAmMTAyM3w1NTI5NiksRnQ9NTYzMjB8MTAyMyZGdCksb3QucHVzaChGdCksbHQrPVJ0fXJldHVybiBmdW5jdGlvbihDdCl7Y29uc3QgRnQ9Q3QubGVuZ3RoO2lmKEZ0PD1TKXJldHVybiBTdHJpbmcuZnJvbUNo'@;
put 'YXJDb2RlLmFwcGx5KFN0cmluZyxDdCk7bGV0IFJ0PSIiLFh0PTA7Zm9yKDtYdDxGdDspUnQrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLEN0LnNsaWNlKFh0LFh0Kz1TKSk7cmV0dXJuIFJ0fShvdCl9QS5rTWF4TGVuZ3RoPWssKE4uVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5j'@;
put 'dGlvbigpe3RyeXtjb25zdCBUZT1uZXcgVWludDhBcnJheSgxKSxBZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihBZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKFRlLEFlKSw0Mj09PVRlLmZvbygp'@;
put 'fWNhdGNoe3JldHVybiExfX0oKSl8fHZvaWQgMD09PVB8fCJmdW5jdGlvbiIhPXR5cGVvZiBQLmVycm9yfHxQLmVycm9yKCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBi'@;
put 'dWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTi5wcm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSks'@;
put 'T2JqZWN0LmRlZmluZVByb3BlcnR5KE4ucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lmKE4uaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxOLnBvb2xTaXplPTgxOTIsTi5mcm9tPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1'@;
put 'cm4gVihUZSxBZSxCZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihOLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKE4sVWludDhBcnJheSksTi5hbGxvYz1mdW5jdGlvbihUZSxBZSxCZSl7cmV0dXJuIGx0PUFlLEN0PUJlLFoob3Q9VGUpLG90'@;
put 'PD0wP0Iob3QpOnZvaWQgMCE9PWx0PyJzdHJpbmciPT10eXBlb2YgQ3Q/QihvdCkuZmlsbChsdCxDdCk6QihvdCkuZmlsbChsdCk6QihvdCk7dmFyIG90LGx0LEN0fSxOLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFRlKXtyZXR1cm4gVyhUZSl9LE4uYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKFRl'@;
put 'KXtyZXR1cm4gVyhUZSl9LE4uaXNCdWZmZXI9ZnVuY3Rpb24oVGUpe3JldHVybiBudWxsIT1UZSYmITA9PT1UZS5faXNCdWZmZXImJlRlIT09Ti5wcm90b3R5cGV9LE4uY29tcGFyZT1mdW5jdGlvbihUZSxBZSl7aWYoUmUoVGUsVWludDhBcnJheSkmJihUZT1OLmZyb20oVGUsVGUub2Zmc2V0'@;
put 'LFRlLmJ5dGVMZW5ndGgpKSxSZShBZSxVaW50OEFycmF5KSYmKEFlPU4uZnJvbShBZSxBZS5vZmZzZXQsQWUuYnl0ZUxlbmd0aCkpLCFOLmlzQnVmZmVyKFRlKXx8IU4uaXNCdWZmZXIoQWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiYnVmMSIsICJidWYyIiBhcmd1bWVudHMgbXVzdCBi'@;
put 'ZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheScpO2lmKFRlPT09QWUpcmV0dXJuIDA7bGV0IEJlPVRlLmxlbmd0aCxvdD1BZS5sZW5ndGg7Zm9yKGxldCBsdD0wLEN0PU1hdGgubWluKEJlLG90KTtsdDxDdDsrK2x0KWlmKFRlW2x0XSE9PUFlW2x0XSl7QmU9VGVbbHRdLG90PUFl'@;
put 'W2x0XTticmVha31yZXR1cm4gQmU8b3Q/LTE6b3Q8QmU/MTowfSxOLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oVGUpe3N3aXRjaChTdHJpbmcoVGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFy'@;
put 'eSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sTi5jb25jYXQ9ZnVuY3Rpb24oVGUsQWUpe2lmKCFBcnJheS5pc0FycmF5KFRlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCci'@;
put 'bGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PVRlLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtsZXQgQmU7aWYodm9pZCAwPT09QWUpZm9yKEFlPTAsQmU9MDtCZTxUZS5sZW5ndGg7KytCZSlBZSs9VGVbQmVdLmxlbmd0aDtjb25zdCBvdD1OLmFs'@;
put 'bG9jVW5zYWZlKEFlKTtsZXQgbHQ9MDtmb3IoQmU9MDtCZTxUZS5sZW5ndGg7KytCZSl7bGV0IEN0PVRlW0JlXTtpZihSZShDdCxVaW50OEFycmF5KSlsdCtDdC5sZW5ndGg+b3QubGVuZ3RoPyhOLmlzQnVmZmVyKEN0KXx8KEN0PU4uZnJvbShDdCkpLEN0LmNvcHkob3QsbHQpKTpVaW50OEFy'@;
put 'cmF5LnByb3RvdHlwZS5zZXQuY2FsbChvdCxDdCxsdCk7ZWxzZXtpZighTi5pc0J1ZmZlcihDdCkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO0N0LmNvcHkob3QsbHQpfWx0Kz1DdC5sZW5ndGh9cmV0dXJuIG90fSxO'@;
put 'LmJ5dGVMZW5ndGg9dGUsTi5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLE4ucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe2NvbnN0IFRlPXRoaXMubGVuZ3RoO2lmKFRlJTIhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRz'@;
put 'Iik7Zm9yKGxldCBBZT0wO0FlPFRlO0FlKz0yKXNlKHRoaXMsQWUsQWUrMSk7cmV0dXJuIHRoaXN9LE4ucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe2NvbnN0IFRlPXRoaXMubGVuZ3RoO2lmKFRlJTQhPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBt'@;
put 'dWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKGxldCBBZT0wO0FlPFRlO0FlKz00KXNlKHRoaXMsQWUsQWUrMyksc2UodGhpcyxBZSsxLEFlKzIpO3JldHVybiB0aGlzfSxOLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24oKXtjb25zdCBUZT10aGlzLmxlbmd0aDtpZihUZSU4IT0wKXRocm93IG5l'@;
put 'dyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2ZvcihsZXQgQWU9MDtBZTxUZTtBZSs9OClzZSh0aGlzLEFlLEFlKzcpLHNlKHRoaXMsQWUrMSxBZSs2KSxzZSh0aGlzLEFlKzIsQWUrNSksc2UodGhpcyxBZSszLEFlKzQpO3JldHVybiB0'@;
put 'aGlzfSxOLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1OLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe2NvbnN0IFRlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09VGU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Zyh0aGlzLDAsVGUpOmFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sTi5w'@;
put 'cm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKFRlKXtpZighTi5pc0J1ZmZlcihUZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09VGV8fDA9PT1OLmNvbXBhcmUodGhpcyxUZSl9LE4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rp'@;
put 'b24oKXtsZXQgVGU9IiI7Y29uc3QgQWU9QS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gVGU9dGhpcy50b1N0cmluZygiaGV4IiwwLEFlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRoaXMubGVuZ3RoPkFlJiYoVGUrPSIgLi4uICIpLCI8QnVmZmVyICIrVGUrIj4ifSxFJiYo'@;
put 'Ti5wcm90b3R5cGVbRV09Ti5wcm90b3R5cGUuaW5zcGVjdCksTi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihUZSxBZSxCZSxvdCxsdCl7aWYoUmUoVGUsVWludDhBcnJheSkmJihUZT1OLmZyb20oVGUsVGUub2Zmc2V0LFRlLmJ5dGVMZW5ndGgpKSwhTi5pc0J1ZmZlcihUZSkpdGhyb3cg'@;
put 'bmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVGUpO2lmKHZvaWQgMD09PUFlJiYoQWU9MCksdm9pZCAwPT09QmUmJihCZT1UZT9UZS5sZW5ndGg6MCksdm9p'@;
put 'ZCAwPT09b3QmJihvdD0wKSx2b2lkIDA9PT1sdCYmKGx0PXRoaXMubGVuZ3RoKSxBZTwwfHxCZT5UZS5sZW5ndGh8fG90PDB8fGx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihvdD49bHQmJkFlPj1CZSlyZXR1cm4gMDtpZihvdD49'@;
put 'bHQpcmV0dXJuLTE7aWYoQWU+PUJlKXJldHVybiAxO2lmKHRoaXM9PT1UZSlyZXR1cm4gMDtsZXQgQ3Q9KGx0Pj4+PTApLShvdD4+Pj0wKSxGdD0oQmU+Pj49MCktKEFlPj4+PTApO2NvbnN0IFJ0PU1hdGgubWluKEN0LEZ0KSxYdD10aGlzLnNsaWNlKG90LGx0KSxTbj1UZS5zbGljZShBZSxC'@;
put 'ZSk7Zm9yKGxldCB6dD0wO3p0PFJ0OysrenQpaWYoWHRbenRdIT09U25benRdKXtDdD1YdFt6dF0sRnQ9U25benRdO2JyZWFrfXJldHVybiBDdDxGdD8tMTpGdDxDdD8xOjB9LE4ucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihU'@;
put 'ZSxBZSxCZSl9LE4ucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBkZSh0aGlzLFRlLEFlLEJlLCEwKX0sTi5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBkZSh0aGlzLFRlLEFlLEJlLCExKX0sTi5wcm90b3R5cGUud3Jp'@;
put 'dGU9ZnVuY3Rpb24oVGUsQWUsQmUsb3Qpe2lmKHZvaWQgMD09PUFlKW90PSJ1dGY4IixCZT10aGlzLmxlbmd0aCxBZT0wO2Vsc2UgaWYodm9pZCAwPT09QmUmJiJzdHJpbmciPT10eXBlb2YgQWUpb3Q9QWUsQmU9dGhpcy5sZW5ndGgsQWU9MDtlbHNle2lmKCFpc0Zpbml0ZShBZSkpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0FlPj4+PTAsaXNGaW5pdGUoQmUpPyhCZT4+Pj0wLHZvaWQgMD09PW90JiYob3Q9InV0ZjgiKSk6KG90PUJlLEJlPXZvaWQgMCl9Y29uc3Qg'@;
put 'bHQ9dGhpcy5sZW5ndGgtQWU7aWYoKHZvaWQgMD09PUJlfHxCZT5sdCkmJihCZT1sdCksVGUubGVuZ3RoPjAmJihCZTwwfHxBZTwwKXx8QWU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7b3R8fChvdD0i'@;
put 'dXRmOCIpO2xldCBDdD0hMTtmb3IoOzspc3dpdGNoKG90KXtjYXNlImhleCI6cmV0dXJuIGNlKHRoaXMsVGUsQWUsQmUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEcodGhpcyxUZSxBZSxCZSk7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geSh0'@;
put 'aGlzLFRlLEFlLEJlKTtjYXNlImJhc2U2NCI6cmV0dXJuIEwodGhpcyxUZSxBZSxCZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBIKHRoaXMsVGUsQWUsQmUpO2RlZmF1bHQ6aWYoQ3QpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5r'@;
put 'bm93biBlbmNvZGluZzogIitvdCk7b3Q9KCIiK290KS50b0xvd2VyQ2FzZSgpLEN0PSEwfX0sTi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IkJ1ZmZlciIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTtjb25zdCBT'@;
put 'PTQwOTY7ZnVuY3Rpb24geChUZSxBZSxCZSl7bGV0IG90PSIiO0JlPU1hdGgubWluKFRlLmxlbmd0aCxCZSk7Zm9yKGxldCBsdD1BZTtsdDxCZTsrK2x0KW90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZUZVtsdF0pO3JldHVybiBvdH1mdW5jdGlvbiBfKFRlLEFlLEJlKXtsZXQgb3Q9IiI7'@;
put 'QmU9TWF0aC5taW4oVGUubGVuZ3RoLEJlKTtmb3IobGV0IGx0PUFlO2x0PEJlOysrbHQpb3QrPVN0cmluZy5mcm9tQ2hhckNvZGUoVGVbbHRdKTtyZXR1cm4gb3R9ZnVuY3Rpb24gcChUZSxBZSxCZSl7Y29uc3Qgb3Q9VGUubGVuZ3RoOyghQWV8fEFlPDApJiYoQWU9MCksKCFCZXx8QmU8MHx8'@;
put 'QmU+b3QpJiYoQmU9b3QpO2xldCBsdD0iIjtmb3IobGV0IEN0PUFlO0N0PEJlOysrQ3QpbHQrPW50W1RlW0N0XV07cmV0dXJuIGx0fWZ1bmN0aW9uIEMoVGUsQWUsQmUpe2NvbnN0IG90PVRlLnNsaWNlKEFlLEJlKTtsZXQgbHQ9IiI7Zm9yKGxldCBDdD0wO0N0PG90Lmxlbmd0aC0xO0N0Kz0y'@;
put 'KWx0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG90W0N0XSsyNTYqb3RbQ3QrMV0pO3JldHVybiBsdH1mdW5jdGlvbiBLKFRlLEFlLEJlKXtpZihUZSUxIT0wfHxUZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZihUZStBZT5CZSl0aHJvdyBuZXcgUmFuZ2VF'@;
put 'cnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIG5lKFRlLEFlLEJlLG90LGx0LEN0KXtpZighTi5pc0J1ZmZlcihUZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lm'@;
put 'KEFlPmx0fHxBZTxDdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoQmUrb3Q+VGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiB1ZShUZSxBZSxCZSxvdCxsdCl7S2Uo'@;
put 'QWUsb3QsbHQsVGUsQmUsNyk7bGV0IEN0PU51bWJlcihBZSZCaWdJbnQoNDI5NDk2NzI5NSkpO1RlW0JlKytdPUN0LEN0Pj49OCxUZVtCZSsrXT1DdCxDdD4+PTgsVGVbQmUrK109Q3QsQ3Q+Pj04LFRlW0JlKytdPUN0O2xldCBGdD1OdW1iZXIoQWU+PkJpZ0ludCgzMikmQmlnSW50KDQyOTQ5'@;
put 'NjcyOTUpKTtyZXR1cm4gVGVbQmUrK109RnQsRnQ+Pj04LFRlW0JlKytdPUZ0LEZ0Pj49OCxUZVtCZSsrXT1GdCxGdD4+PTgsVGVbQmUrK109RnQsQmV9ZnVuY3Rpb24gaGUoVGUsQWUsQmUsb3QsbHQpe0tlKEFlLG90LGx0LFRlLEJlLDcpO2xldCBDdD1OdW1iZXIoQWUmQmlnSW50KDQyOTQ5'@;
put 'NjcyOTUpKTtUZVtCZSs3XT1DdCxDdD4+PTgsVGVbQmUrNl09Q3QsQ3Q+Pj04LFRlW0JlKzVdPUN0LEN0Pj49OCxUZVtCZSs0XT1DdDtsZXQgRnQ9TnVtYmVyKEFlPj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuIFRlW0JlKzNdPUZ0LEZ0Pj49OCxUZVtCZSsyXT1GdCxG'@;
put 'dD4+PTgsVGVbQmUrMV09RnQsRnQ+Pj04LFRlW0JlXT1GdCxCZSs4fWZ1bmN0aW9uIHhlKFRlLEFlLEJlLG90LGx0LEN0KXtpZihCZStvdD5UZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEJlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIklu'@;
put 'ZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE9lKFRlLEFlLEJlLG90LGx0KXtyZXR1cm4gQWU9K0FlLEJlPj4+PTAsbHR8fHhlKFRlLDAsQmUsNCksSS53cml0ZShUZSxBZSxCZSxvdCwyMyw0KSxCZSs0fWZ1bmN0aW9uIEhlKFRlLEFlLEJlLG90LGx0KXtyZXR1cm4gQWU9K0FlLEJlPj4+'@;
put 'PTAsbHR8fHhlKFRlLDAsQmUsOCksSS53cml0ZShUZSxBZSxCZSxvdCw1Miw4KSxCZSs4fU4ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKFRlLEFlKXtjb25zdCBCZT10aGlzLmxlbmd0aDsoVGU9fn5UZSk8MD8oVGUrPUJlKTwwJiYoVGU9MCk6VGU+QmUmJihUZT1CZSksKEFlPXZvaWQgMD09'@;
put 'PUFlP0JlOn5+QWUpPDA/KEFlKz1CZSk8MCYmKEFlPTApOkFlPkJlJiYoQWU9QmUpLEFlPFRlJiYoQWU9VGUpO2NvbnN0IG90PXRoaXMuc3ViYXJyYXkoVGUsQWUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yob3QsTi5wcm90b3R5cGUpLG90fSxOLnByb3RvdHlwZS5yZWFkVWludExF'@;
put 'PU4ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24oVGUsQWUsQmUpe1RlPj4+PTAsQWU+Pj49MCxCZXx8SyhUZSxBZSx0aGlzLmxlbmd0aCk7bGV0IG90PXRoaXNbVGVdLGx0PTEsQ3Q9MDtmb3IoOysrQ3Q8QWUmJihsdCo9MjU2KTspb3QrPXRoaXNbVGUrQ3RdKmx0O3JldHVybiBvdH0s'@;
put 'Ti5wcm90b3R5cGUucmVhZFVpbnRCRT1OLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKFRlLEFlLEJlKXtUZT4+Pj0wLEFlPj4+PTAsQmV8fEsoVGUsQWUsdGhpcy5sZW5ndGgpO2xldCBvdD10aGlzW1RlKy0tQWVdLGx0PTE7Zm9yKDtBZT4wJiYobHQqPTI1Nik7KW90Kz10aGlzW1Rl'@;
put 'Ky0tQWVdKmx0O3JldHVybiBvdH0sTi5wcm90b3R5cGUucmVhZFVpbnQ4PU4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihUZSxBZSl7cmV0dXJuIFRlPj4+PTAsQWV8fEsoVGUsMSx0aGlzLmxlbmd0aCksdGhpc1tUZV19LE4ucHJvdG90eXBlLnJlYWRVaW50MTZMRT1OLnByb3RvdHlw'@;
put 'ZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24oVGUsQWUpe3JldHVybiBUZT4+Pj0wLEFlfHxLKFRlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVGVdfHRoaXNbVGUrMV08PDh9LE4ucHJvdG90eXBlLnJlYWRVaW50MTZCRT1OLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24oVGUsQWUpe3JldHVy'@;
put 'biBUZT4+Pj0wLEFlfHxLKFRlLDIsdGhpcy5sZW5ndGgpLHRoaXNbVGVdPDw4fHRoaXNbVGUrMV19LE4ucHJvdG90eXBlLnJlYWRVaW50MzJMRT1OLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24oVGUsQWUpe3JldHVybiBUZT4+Pj0wLEFlfHxLKFRlLDQsdGhpcy5sZW5ndGgpLCh0'@;
put 'aGlzW1RlXXx0aGlzW1RlKzFdPDw4fHRoaXNbVGUrMl08PDE2KSsxNjc3NzIxNip0aGlzW1RlKzNdfSxOLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ti5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKFRlLEFlKXtyZXR1cm4gVGU+Pj49MCxBZXx8SyhUZSw0LHRoaXMubGVuZ3RoKSwx'@;
put 'Njc3NzIxNip0aGlzW1RlXSsodGhpc1tUZSsxXTw8MTZ8dGhpc1tUZSsyXTw8OHx0aGlzW1RlKzNdKX0sTi5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NExFPUdlKGZ1bmN0aW9uKFRlKXtVZShUZT4+Pj0wLCJvZmZzZXQiKTtjb25zdCBBZT10aGlzW1RlXSxCZT10aGlzW1RlKzddO3ZvaWQgMCE9'@;
put 'PUFlJiZ2b2lkIDAhPT1CZXx8WGUoVGUsdGhpcy5sZW5ndGgtOCk7Y29uc3Qgb3Q9QWUrMjU2KnRoaXNbKytUZV0rNjU1MzYqdGhpc1srK1RlXSt0aGlzWysrVGVdKjIqKjI0LGx0PXRoaXNbKytUZV0rMjU2KnRoaXNbKytUZV0rNjU1MzYqdGhpc1srK1RlXStCZSoyKioyNDtyZXR1cm4gQmln'@;
put 'SW50KG90KSsoQmlnSW50KGx0KTw8QmlnSW50KDMyKSl9KSxOLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9R2UoZnVuY3Rpb24oVGUpe1VlKFRlPj4+PTAsIm9mZnNldCIpO2NvbnN0IEFlPXRoaXNbVGVdLEJlPXRoaXNbVGUrN107dm9pZCAwIT09QWUmJnZvaWQgMCE9PUJlfHxYZShUZSx0'@;
put 'aGlzLmxlbmd0aC04KTtjb25zdCBvdD1BZSoyKioyNCs2NTUzNip0aGlzWysrVGVdKzI1Nip0aGlzWysrVGVdK3RoaXNbKytUZV0sbHQ9dGhpc1srK1RlXSoyKioyNCs2NTUzNip0aGlzWysrVGVdKzI1Nip0aGlzWysrVGVdK0JlO3JldHVybihCaWdJbnQob3QpPDxCaWdJbnQoMzIpKStCaWdJ'@;
put 'bnQobHQpfSksTi5wcm90b3R5cGUucmVhZEludExFPWZ1bmN0aW9uKFRlLEFlLEJlKXtUZT4+Pj0wLEFlPj4+PTAsQmV8fEsoVGUsQWUsdGhpcy5sZW5ndGgpO2xldCBvdD10aGlzW1RlXSxsdD0xLEN0PTA7Zm9yKDsrK0N0PEFlJiYobHQqPTI1Nik7KW90Kz10aGlzW1RlK0N0XSpsdDtyZXR1'@;
put 'cm4gbHQqPTEyOCxvdD49bHQmJihvdC09TWF0aC5wb3coMiw4KkFlKSksb3R9LE4ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihUZSxBZSxCZSl7VGU+Pj49MCxBZT4+Pj0wLEJlfHxLKFRlLEFlLHRoaXMubGVuZ3RoKTtsZXQgb3Q9QWUsbHQ9MSxDdD10aGlzW1RlKy0tb3RdO2Zvcig7'@;
put 'b3Q+MCYmKGx0Kj0yNTYpOylDdCs9dGhpc1tUZSstLW90XSpsdDtyZXR1cm4gbHQqPTEyOCxDdD49bHQmJihDdC09TWF0aC5wb3coMiw4KkFlKSksQ3R9LE4ucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKFRlLEFlKXtyZXR1cm4gVGU+Pj49MCxBZXx8SyhUZSwxLHRoaXMubGVuZ3RoKSwx'@;
put 'MjgmdGhpc1tUZV0/LTEqKDI1NS10aGlzW1RlXSsxKTp0aGlzW1RlXX0sTi5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oVGUsQWUpe1RlPj4+PTAsQWV8fEsoVGUsMix0aGlzLmxlbmd0aCk7Y29uc3QgQmU9dGhpc1tUZV18dGhpc1tUZSsxXTw8ODtyZXR1cm4gMzI3NjgmQmU/NDI5'@;
put 'NDkwMTc2MHxCZTpCZX0sTi5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24oVGUsQWUpe1RlPj4+PTAsQWV8fEsoVGUsMix0aGlzLmxlbmd0aCk7Y29uc3QgQmU9dGhpc1tUZSsxXXx0aGlzW1RlXTw8ODtyZXR1cm4gMzI3NjgmQmU/NDI5NDkwMTc2MHxCZTpCZX0sTi5wcm90b3R5cGUu'@;
put 'cmVhZEludDMyTEU9ZnVuY3Rpb24oVGUsQWUpe3JldHVybiBUZT4+Pj0wLEFlfHxLKFRlLDQsdGhpcy5sZW5ndGgpLHRoaXNbVGVdfHRoaXNbVGUrMV08PDh8dGhpc1tUZSsyXTw8MTZ8dGhpc1tUZSszXTw8MjR9LE4ucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKFRlLEFlKXtyZXR1'@;
put 'cm4gVGU+Pj49MCxBZXx8SyhUZSw0LHRoaXMubGVuZ3RoKSx0aGlzW1RlXTw8MjR8dGhpc1tUZSsxXTw8MTZ8dGhpc1tUZSsyXTw8OHx0aGlzW1RlKzNdfSxOLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1HZShmdW5jdGlvbihUZSl7VWUoVGU+Pj49MCwib2Zmc2V0Iik7Y29uc3QgQWU9dGhp'@;
put 'c1tUZV0sQmU9dGhpc1tUZSs3XTtyZXR1cm4gdm9pZCAwIT09QWUmJnZvaWQgMCE9PUJlfHxYZShUZSx0aGlzLmxlbmd0aC04KSwoQmlnSW50KHRoaXNbVGUrNF0rMjU2KnRoaXNbVGUrNV0rNjU1MzYqdGhpc1tUZSs2XSsoQmU8PDI0KSk8PEJpZ0ludCgzMikpK0JpZ0ludChBZSsyNTYqdGhp'@;
put 'c1srK1RlXSs2NTUzNip0aGlzWysrVGVdKzE2Nzc3MjE2KnRoaXNbKytUZV0pfSksTi5wcm90b3R5cGUucmVhZEJpZ0ludDY0QkU9R2UoZnVuY3Rpb24oVGUpe1VlKFRlPj4+PTAsIm9mZnNldCIpO2NvbnN0IEFlPXRoaXNbVGVdLEJlPXRoaXNbVGUrN107dm9pZCAwIT09QWUmJnZvaWQgMCE9'@;
put 'PUJlfHxYZShUZSx0aGlzLmxlbmd0aC04KTtjb25zdCBvdD0oQWU8PDI0KSs2NTUzNip0aGlzWysrVGVdKzI1Nip0aGlzWysrVGVdK3RoaXNbKytUZV07cmV0dXJuKEJpZ0ludChvdCk8PEJpZ0ludCgzMikpK0JpZ0ludCgxNjc3NzIxNip0aGlzWysrVGVdKzY1NTM2KnRoaXNbKytUZV0rMjU2'@;
put 'KnRoaXNbKytUZV0rQmUpfSksTi5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24oVGUsQWUpe3JldHVybiBUZT4+Pj0wLEFlfHxLKFRlLDQsdGhpcy5sZW5ndGgpLEkucmVhZCh0aGlzLFRlLCEwLDIzLDQpfSxOLnByb3RvdHlwZS5yZWFkRmxvYXRCRT1mdW5jdGlvbihUZSxBZSl7cmV0'@;
put 'dXJuIFRlPj4+PTAsQWV8fEsoVGUsNCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsVGUsITEsMjMsNCl9LE4ucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihUZSxBZSl7cmV0dXJuIFRlPj4+PTAsQWV8fEsoVGUsOCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsVGUsITAsNTIsOCl9'@;
put 'LE4ucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbihUZSxBZSl7cmV0dXJuIFRlPj4+PTAsQWV8fEsoVGUsOCx0aGlzLmxlbmd0aCksSS5yZWFkKHRoaXMsVGUsITEsNTIsOCl9LE4ucHJvdG90eXBlLndyaXRlVWludExFPU4ucHJvdG90eXBlLndyaXRlVUludExFPWZ1bmN0aW9uKFRl'@;
put 'LEFlLEJlLG90KXtUZT0rVGUsQWU+Pj49MCxCZT4+Pj0wLCFvdCYmbmUodGhpcyxUZSxBZSxCZSxNYXRoLnBvdygyLDgqQmUpLTEsMCk7bGV0IGx0PTEsQ3Q9MDtmb3IodGhpc1tBZV09MjU1JlRlOysrQ3Q8QmUmJihsdCo9MjU2KTspdGhpc1tBZStDdF09VGUvbHQmMjU1O3JldHVybiBBZStC'@;
put 'ZX0sTi5wcm90b3R5cGUud3JpdGVVaW50QkU9Ti5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oVGUsQWUsQmUsb3Qpe1RlPStUZSxBZT4+Pj0wLEJlPj4+PTAsIW90JiZuZSh0aGlzLFRlLEFlLEJlLE1hdGgucG93KDIsOCpCZSktMSwwKTtsZXQgbHQ9QmUtMSxDdD0xO2Zvcih0aGlz'@;
put 'W0FlK2x0XT0yNTUmVGU7LS1sdD49MCYmKEN0Kj0yNTYpOyl0aGlzW0FlK2x0XT1UZS9DdCYyNTU7cmV0dXJuIEFlK0JlfSxOLnByb3RvdHlwZS53cml0ZVVpbnQ4PU4ucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBUZT0rVGUsQWU+Pj49MCxCZXx8bmUo'@;
put 'dGhpcyxUZSxBZSwxLDI1NSwwKSx0aGlzW0FlXT0yNTUmVGUsQWUrMX0sTi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1OLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gVGU9K1RlLEFlPj4+PTAsQmV8fG5lKHRoaXMsVGUsQWUsMiw2NTUzNSwwKSx0'@;
put 'aGlzW0FlXT0yNTUmVGUsdGhpc1tBZSsxXT1UZT4+PjgsQWUrMn0sTi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1OLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gVGU9K1RlLEFlPj4+PTAsQmV8fG5lKHRoaXMsVGUsQWUsMiw2NTUzNSwwKSx0aGlz'@;
put 'W0FlXT1UZT4+PjgsdGhpc1tBZSsxXT0yNTUmVGUsQWUrMn0sTi5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1OLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gVGU9K1RlLEFlPj4+PTAsQmV8fG5lKHRoaXMsVGUsQWUsNCw0Mjk0OTY3Mjk1LDApLHRo'@;
put 'aXNbQWUrM109VGU+Pj4yNCx0aGlzW0FlKzJdPVRlPj4+MTYsdGhpc1tBZSsxXT1UZT4+PjgsdGhpc1tBZV09MjU1JlRlLEFlKzR9LE4ucHJvdG90eXBlLndyaXRlVWludDMyQkU9Ti5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihUZSxBZSxCZSl7cmV0dXJuIFRlPStUZSxBZT4+'@;
put 'Pj0wLEJlfHxuZSh0aGlzLFRlLEFlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW0FlXT1UZT4+PjI0LHRoaXNbQWUrMV09VGU+Pj4xNix0aGlzW0FlKzJdPVRlPj4+OCx0aGlzW0FlKzNdPTI1NSZUZSxBZSs0fSxOLnByb3RvdHlwZS53cml0ZUJpZ1VJbnQ2NExFPUdlKGZ1bmN0aW9uKFRlLEFlPTAp'@;
put 'e3JldHVybiB1ZSh0aGlzLFRlLEFlLEJpZ0ludCgwKSxCaWdJbnQoIjB4ZmZmZmZmZmZmZmZmZmZmZiIpKX0pLE4ucHJvdG90eXBlLndyaXRlQmlnVUludDY0QkU9R2UoZnVuY3Rpb24oVGUsQWU9MCl7cmV0dXJuIGhlKHRoaXMsVGUsQWUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZm'@;
put 'ZmZmZmZmIikpfSksTi5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbihUZSxBZSxCZSxvdCl7aWYoVGU9K1RlLEFlPj4+PTAsIW90KXtjb25zdCBSdD1NYXRoLnBvdygyLDgqQmUtMSk7bmUodGhpcyxUZSxBZSxCZSxSdC0xLC1SdCl9bGV0IGx0PTAsQ3Q9MSxGdD0wO2Zvcih0aGlzW0Fl'@;
put 'XT0yNTUmVGU7KytsdDxCZSYmKEN0Kj0yNTYpOylUZTwwJiYwPT09RnQmJjAhPT10aGlzW0FlK2x0LTFdJiYoRnQ9MSksdGhpc1tBZStsdF09KFRlL0N0fDApLUZ0JjI1NTtyZXR1cm4gQWUrQmV9LE4ucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oVGUsQWUsQmUsb3Qpe2lmKFRlPStU'@;
put 'ZSxBZT4+Pj0wLCFvdCl7Y29uc3QgUnQ9TWF0aC5wb3coMiw4KkJlLTEpO25lKHRoaXMsVGUsQWUsQmUsUnQtMSwtUnQpfWxldCBsdD1CZS0xLEN0PTEsRnQ9MDtmb3IodGhpc1tBZStsdF09MjU1JlRlOy0tbHQ+PTAmJihDdCo9MjU2KTspVGU8MCYmMD09PUZ0JiYwIT09dGhpc1tBZStsdCsx'@;
put 'XSYmKEZ0PTEpLHRoaXNbQWUrbHRdPShUZS9DdHwwKS1GdCYyNTU7cmV0dXJuIEFlK0JlfSxOLnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBUZT0rVGUsQWU+Pj49MCxCZXx8bmUodGhpcyxUZSxBZSwxLDEyNywtMTI4KSxUZTwwJiYoVGU9MjU1K1RlKzEp'@;
put 'LHRoaXNbQWVdPTI1NSZUZSxBZSsxfSxOLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBUZT0rVGUsQWU+Pj49MCxCZXx8bmUodGhpcyxUZSxBZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tBZV09MjU1JlRlLHRoaXNbQWUrMV09VGU+Pj44LEFlKzJ9LE4u'@;
put 'cHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihUZSxBZSxCZSl7cmV0dXJuIFRlPStUZSxBZT4+Pj0wLEJlfHxuZSh0aGlzLFRlLEFlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0FlXT1UZT4+PjgsdGhpc1tBZSsxXT0yNTUmVGUsQWUrMn0sTi5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1'@;
put 'bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gVGU9K1RlLEFlPj4+PTAsQmV8fG5lKHRoaXMsVGUsQWUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0FlXT0yNTUmVGUsdGhpc1tBZSsxXT1UZT4+PjgsdGhpc1tBZSsyXT1UZT4+PjE2LHRoaXNbQWUrM109VGU+Pj4yNCxBZSs0fSxOLnBy'@;
put 'b3RvdHlwZS53cml0ZUludDMyQkU9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBUZT0rVGUsQWU+Pj49MCxCZXx8bmUodGhpcyxUZSxBZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLFRlPDAmJihUZT00Mjk0OTY3Mjk1K1RlKzEpLHRoaXNbQWVdPVRlPj4+MjQsdGhpc1tBZSsxXT1UZT4+'@;
put 'PjE2LHRoaXNbQWUrMl09VGU+Pj44LHRoaXNbQWUrM109MjU1JlRlLEFlKzR9LE4ucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRT1HZShmdW5jdGlvbihUZSxBZT0wKXtyZXR1cm4gdWUodGhpcyxUZSxBZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZm'@;
put 'ZmZmZmZmZiIpKX0pLE4ucHJvdG90eXBlLndyaXRlQmlnSW50NjRCRT1HZShmdW5jdGlvbihUZSxBZT0wKXtyZXR1cm4gaGUodGhpcyxUZSxBZSwtQmlnSW50KCIweDgwMDAwMDAwMDAwMDAwMDAiKSxCaWdJbnQoIjB4N2ZmZmZmZmZmZmZmZmZmZiIpKX0pLE4ucHJvdG90eXBlLndyaXRlRmxv'@;
put 'YXRMRT1mdW5jdGlvbihUZSxBZSxCZSl7cmV0dXJuIE9lKHRoaXMsVGUsQWUsITAsQmUpfSxOLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24oVGUsQWUsQmUpe3JldHVybiBPZSh0aGlzLFRlLEFlLCExLEJlKX0sTi5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihUZSxB'@;
put 'ZSxCZSl7cmV0dXJuIEhlKHRoaXMsVGUsQWUsITAsQmUpfSxOLnByb3RvdHlwZS53cml0ZURvdWJsZUJFPWZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gSGUodGhpcyxUZSxBZSwhMSxCZSl9LE4ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oVGUsQWUsQmUsb3Qpe2lmKCFOLmlzQnVmZmVyKFRl'@;
put 'KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBCdWZmZXIiKTtpZihCZXx8KEJlPTApLG90fHwwPT09b3R8fChvdD10aGlzLmxlbmd0aCksQWU+PVRlLmxlbmd0aCYmKEFlPVRlLmxlbmd0aCksQWV8fChBZT0wKSxvdD4wJiZvdDxCZSYmKG90PUJlKSxvdD09PUJl'@;
put 'fHwwPT09VGUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoQWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKEJlPDB8fEJlPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdl'@;
put 'Iik7aWYob3Q8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtvdD50aGlzLmxlbmd0aCYmKG90PXRoaXMubGVuZ3RoKSxUZS5sZW5ndGgtQWU8b3QtQmUmJihvdD1UZS5sZW5ndGgtQWUrQmUpO2NvbnN0IGx0PW90LUJlO3JldHVybiB0aGlzPT09VGUm'@;
put 'JiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihBZSxCZSxvdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoVGUsdGhpcy5zdWJhcnJheShCZSxvdCksQWUpLGx0fSxOLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9u'@;
put 'KFRlLEFlLEJlLG90KXtpZigic3RyaW5nIj09dHlwZW9mIFRlKXtpZigic3RyaW5nIj09dHlwZW9mIEFlPyhvdD1BZSxBZT0wLEJlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIEJlJiYob3Q9QmUsQmU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PW90JiYic3RyaW5nIiE9dHlwZW9mIG90'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG90JiYhTi5pc0VuY29kaW5nKG90KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK290KTtpZigxPT09VGUubGVuZ3RoKXtjb25zdCBDdD1U'@;
put 'ZS5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1vdCYmQ3Q8MTI4fHwibGF0aW4xIj09PW90KSYmKFRlPUN0KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgVGU/VGUmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiBUZSYmKFRlPU51bWJlcihUZSkpO2lmKEFlPDB8fHRoaXMubGVuZ3RoPEFlfHx0aGlzLmxl'@;
put 'bmd0aDxCZSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoQmU8PUFlKXJldHVybiB0aGlzO2xldCBsdDtpZihBZT4+Pj0wLEJlPXZvaWQgMD09PUJlP3RoaXMubGVuZ3RoOkJlPj4+MCxUZXx8KFRlPTApLCJudW1iZXIiPT10eXBlb2YgVGUpZm9yKGx0PUFl'@;
put 'O2x0PEJlOysrbHQpdGhpc1tsdF09VGU7ZWxzZXtjb25zdCBDdD1OLmlzQnVmZmVyKFRlKT9UZTpOLmZyb20oVGUsb3QpLEZ0PUN0Lmxlbmd0aDtpZigwPT09RnQpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK1RlKyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSIn'@;
put 'KTtmb3IobHQ9MDtsdDxCZS1BZTsrK2x0KXRoaXNbbHQrQWVdPUN0W2x0JUZ0XX1yZXR1cm4gdGhpc307Y29uc3QgRWU9e307ZnVuY3Rpb24gTGUoVGUsQWUsQmUpe0VlW1RlXT1jbGFzcyBleHRlbmRzIEJle2NvbnN0cnVjdG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhp'@;
put 'cywibWVzc2FnZSIse3ZhbHVlOkFlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHtUZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdldCBjb2RlKCl7cmV0dXJuIFRlfXNldCBjb2RlKG90KXtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOm90LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFske1RlfV06ICR7dGhpcy5tZXNzYWdlfWB9fX1mdW5jdGlvbiBOZShUZSl7bGV0IEFlPSIi'@;
put 'LEJlPVRlLmxlbmd0aDtjb25zdCBvdD0iLSI9PT1UZVswXT8xOjA7Zm9yKDtCZT49b3QrNDtCZS09MylBZT1gXyR7VGUuc2xpY2UoQmUtMyxCZSl9JHtBZX1gO3JldHVybmAke1RlLnNsaWNlKDAsQmUpfSR7QWV9YH1mdW5jdGlvbiBLZShUZSxBZSxCZSxvdCxsdCxDdCl7aWYoVGU+QmV8fFRl'@;
put 'PEFlKXtjb25zdCBGdD0iYmlnaW50Ij09dHlwZW9mIEFlPyJuIjoiIjtsZXQgUnQ7dGhyb3cgUnQ9Q3Q+Mz8wPT09QWV8fEFlPT09QmlnSW50KDApP2A+PSAwJHtGdH0gYW5kIDwgMiR7RnR9ICoqICR7OCooQ3QrMSl9JHtGdH1gOmA+PSAtKDIke0Z0fSAqKiAkezgqKEN0KzEpLTF9JHtGdH0p'@;
put 'IGFuZCA8IDIgKiogJHs4KihDdCsxKS0xfSR7RnR9YDpgPj0gJHtBZX0ke0Z0fSBhbmQgPD0gJHtCZX0ke0Z0fWAsbmV3IEVlLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixSdCxUZSl9dmFyIEZ0LFJ0LFh0O0Z0PW90LFh0PUN0LFVlKFJ0PWx0LCJvZmZzZXQiKSx2b2lkIDAhPT1GdFtSdF0m'@;
put 'JnZvaWQgMCE9PUZ0W1J0K1h0XXx8WGUoUnQsRnQubGVuZ3RoLShYdCsxKSl9ZnVuY3Rpb24gVWUoVGUsQWUpe2lmKCJudW1iZXIiIT10eXBlb2YgVGUpdGhyb3cgbmV3IEVlLkVSUl9JTlZBTElEX0FSR19UWVBFKEFlLCJudW1iZXIiLFRlKX1mdW5jdGlvbiBYZShUZSxBZSxCZSl7dGhyb3cg'@;
put 'TWF0aC5mbG9vcihUZSkhPT1UZT8oVWUoVGUsQmUpLG5ldyBFZS5FUlJfT1VUX09GX1JBTkdFKEJlfHwib2Zmc2V0IiwiYW4gaW50ZWdlciIsVGUpKTpBZTwwP25ldyBFZS5FUlJfQlVGRkVSX09VVF9PRl9CT1VORFM6bmV3IEVlLkVSUl9PVVRfT0ZfUkFOR0UoQmV8fCJvZmZzZXQiLGA+PSAk'@;
put 'e0JlPzE6MH0gYW5kIDw9ICR7QWV9YCxUZSl9TGUoIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsZnVuY3Rpb24oVGUpe3JldHVybiBUZT9gJHtUZX0gaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzYDoiQXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IG91dHNpZGUgYnVmZmVyIGJvdW5kcyJ9'@;
put 'LFJhbmdlRXJyb3IpLExlKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oVGUsQWUpe3JldHVybmBUaGUgIiR7VGV9IiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIEFlfWB9LFR5cGVFcnJvciksTGUoIkVSUl9PVVRfT0ZfUkFO'@;
put 'R0UiLGZ1bmN0aW9uKFRlLEFlLEJlKXtsZXQgb3Q9YFRoZSB2YWx1ZSBvZiAiJHtUZX0iIGlzIG91dCBvZiByYW5nZS5gLGx0PUJlO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKEJlKSYmTWF0aC5hYnMoQmUpPjQyOTQ5NjcyOTY/bHQ9TmUoU3RyaW5nKEJlKSk6ImJpZ2ludCI9PXR5cGVvZiBC'@;
put 'ZSYmKGx0PVN0cmluZyhCZSksKEJlPkJpZ0ludCgyKSoqQmlnSW50KDMyKXx8QmU8LShCaWdJbnQoMikqKkJpZ0ludCgzMikpKSYmKGx0PU5lKGx0KSksbHQrPSJuIiksb3QrPWAgSXQgbXVzdCBiZSAke0FlfS4gUmVjZWl2ZWQgJHtsdH1gLG90fSxSYW5nZUVycm9yKTtjb25zdCBhdD0vW14r'@;
put 'LzAtOUEtWmEtei1fXS9nO2Z1bmN0aW9uIEZlKFRlLEFlKXtsZXQgQmU7QWU9QWV8fDEvMDtjb25zdCBvdD1UZS5sZW5ndGg7bGV0IGx0PW51bGw7Y29uc3QgQ3Q9W107Zm9yKGxldCBGdD0wO0Z0PG90OysrRnQpe2lmKEJlPVRlLmNoYXJDb2RlQXQoRnQpLEJlPjU1Mjk1JiZCZTw1NzM0NCl7'@;
put 'aWYoIWx0KXtpZihCZT41NjMxOSl7KEFlLT0zKT4tMSYmQ3QucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoRnQrMT09PW90KXsoQWUtPTMpPi0xJiZDdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1sdD1CZTtjb250aW51ZX1pZihCZTw1NjMyMCl7KEFlLT0zKT4tMSYmQ3QucHVz'@;
put 'aCgyMzksMTkxLDE4OSksbHQ9QmU7Y29udGludWV9QmU9NjU1MzYrKGx0LTU1Mjk2PDwxMHxCZS01NjMyMCl9ZWxzZSBsdCYmKEFlLT0zKT4tMSYmQ3QucHVzaCgyMzksMTkxLDE4OSk7aWYobHQ9bnVsbCxCZTwxMjgpe2lmKChBZS09MSk8MClicmVhaztDdC5wdXNoKEJlKX1lbHNlIGlmKEJl'@;
put 'PDIwNDgpe2lmKChBZS09Mik8MClicmVhaztDdC5wdXNoKEJlPj42fDE5Miw2MyZCZXwxMjgpfWVsc2UgaWYoQmU8NjU1MzYpe2lmKChBZS09Myk8MClicmVhaztDdC5wdXNoKEJlPj4xMnwyMjQsQmU+PjYmNjN8MTI4LDYzJkJlfDEyOCl9ZWxzZXtpZighKEJlPDExMTQxMTIpKXRocm93IG5l'@;
put 'dyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKEFlLT00KTwwKWJyZWFrO0N0LnB1c2goQmU+PjE4fDI0MCxCZT4+MTImNjN8MTI4LEJlPj42JjYzfDEyOCw2MyZCZXwxMjgpfX1yZXR1cm4gQ3R9ZnVuY3Rpb24gQ2UoVGUpe3JldHVybiBVLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKEFl'@;
put 'KXtpZigoQWU9KEFlPUFlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKGF0LCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9yKDtBZS5sZW5ndGglNCE9MDspQWUrPSI9IjtyZXR1cm4gQWV9KFRlKSl9ZnVuY3Rpb24gRGUoVGUsQWUsQmUsb3Qpe2xldCBsdDtmb3IobHQ9MDtsdDxvdCYm'@;
put 'IShsdCtCZT49QWUubGVuZ3RofHxsdD49VGUubGVuZ3RoKTsrK2x0KUFlW2x0K0JlXT1UZVtsdF07cmV0dXJuIGx0fWZ1bmN0aW9uIFJlKFRlLEFlKXtyZXR1cm4gVGUgaW5zdGFuY2VvZiBBZXx8bnVsbCE9VGUmJm51bGwhPVRlLmNvbnN0cnVjdG9yJiZudWxsIT1UZS5jb25zdHJ1Y3Rvci5u'@;
put 'YW1lJiZUZS5jb25zdHJ1Y3Rvci5uYW1lPT09QWUubmFtZX1mdW5jdGlvbiBldChUZSl7cmV0dXJuIFRlIT1UZX1jb25zdCBudD1mdW5jdGlvbigpe2NvbnN0IFRlPSIwMTIzNDU2Nzg5YWJjZGVmIixBZT1uZXcgQXJyYXkoMjU2KTtmb3IobGV0IEJlPTA7QmU8MTY7KytCZSl7Y29uc3Qgb3Q9'@;
put 'MTYqQmU7Zm9yKGxldCBsdD0wO2x0PDE2OysrbHQpQWVbb3QrbHRdPVRlW0JlXStUZVtsdF19cmV0dXJuIEFlfSgpO2Z1bmN0aW9uIEdlKFRlKXtyZXR1cm4gdHlwZW9mIEJpZ0ludD4idSI/ZHQ6VGV9ZnVuY3Rpb24gZHQoKXt0aHJvdyBuZXcgRXJyb3IoIkJpZ0ludCBub3Qgc3VwcG9ydGVk'@;
put 'Iil9fSwxOTI0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgyMTApLFU9RCg1NTU5KSxJPVUoUCgiU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mIikpO3cuZXhwb3J0cz1mdW5jdGlvbihFLGspe3ZhciBCPVAoRSwhIWspO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBCJiZJKEUsIi5w'@;
put 'cm90b3R5cGUuIik+LTE/VShCKTpCfX0sNTU1OToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoODYxMiksVT1EKDIxMCksST1VKCIlRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSIpLEU9VSgiJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJSIpLGs9VSgiJVJlZmxlY3QuYXBwbHklIiwh'@;
put 'MCl8fFAuY2FsbChFLEkpLEI9VSgiJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlIiwhMCksTj1VKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLFY9VSgiJU1hdGgubWF4JSIpO2lmKE4pdHJ5e04oe30sImEiLHt2YWx1ZToxfSl9Y2F0Y2h7Tj1udWxsfXcuZXhwb3J0cz1m'@;
put 'dW5jdGlvbihXKXt2YXIgej1rKFAsRSxhcmd1bWVudHMpO3JldHVybiBCJiZOJiZCKHosImxlbmd0aCIpLmNvbmZpZ3VyYWJsZSYmTih6LCJsZW5ndGgiLHt2YWx1ZToxK1YoMCxXLmxlbmd0aC0oYXJndW1lbnRzLmxlbmd0aC0xKSl9KSx6fTt2YXIgWj1mdW5jdGlvbigpe3JldHVybiBrKFAs'@;
put 'SSxhcmd1bWVudHMpfTtOP04ody5leHBvcnRzLCJhcHBseSIse3ZhbHVlOlp9KTp3LmV4cG9ydHMuYXBwbHk9Wn0sMTAyNzoodyxBLEQpPT57dmFyIFA9RCg5NTA5KS5CdWZmZXIsVT1EKDI4MzApLlRyYW5zZm9ybSxJPUQoMjU1MykuU3RyaW5nRGVjb2RlcjtmdW5jdGlvbiBFKGspe1UuY2Fs'@;
put 'bCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygayx0aGlzLmhhc2hNb2RlP3RoaXNba109dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwmJih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9'@;
put 'bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9RCg1NzE3KShFLFUpLEUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihrLEIsTil7InN0cmluZyI9PXR5cGVvZiBrJiYoaz1QLmZyb20oayxCKSk7dmFyIFY9dGhpcy5fdXBkYXRlKGspO3JldHVybiB0aGlzLmhh'@;
put 'c2hNb2RlP3RoaXM6KE4mJihWPXRoaXMuX3RvU3RyaW5nKFYsTikpLFYpfSxFLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sRS5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1'@;
put 'cHBvcnRlZCBzdGF0ZSIpfSxFLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LEUucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5'@;
put 'aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sRS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihrLEIsTil7dmFyIFY7dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKGspOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoaykpfWNhdGNoKFope1Y9Wn1maW5hbGx5'@;
put 'e04oVil9fSxFLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oayl7dmFyIEI7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goTil7Qj1OfWsoQil9LEUucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKGspe3ZhciBCPXRoaXMuX19maW5hbCgpfHxQLmFsbG9jKDAp'@;
put 'O3JldHVybiBrJiYoQj10aGlzLl90b1N0cmluZyhCLGssITApKSxCfSxFLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24oayxCLE4pe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBJKEIpLHRoaXMuX2VuY29kaW5nPUIpLHRoaXMuX2VuY29kaW5nIT09Qil0aHJvdyBu'@;
put 'ZXcgRXJyb3IoImNhbid0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgVj10aGlzLl9kZWNvZGVyLndyaXRlKGspO3JldHVybiBOJiYoVis9dGhpcy5fZGVjb2Rlci5lbmQoKSksVn0sdy5leHBvcnRzPUV9LDEwNDg6dz0+e3cuZXhwb3J0cz1mdW5jdGlvbihELFApe2Zvcih2YXIgVT1bXSxJPTA7'@;
put 'STxELmxlbmd0aDtJKyspe3ZhciBFPVAoRFtJXSxJKTtBKEUpP1UucHVzaC5hcHBseShVLEUpOlUucHVzaChFKX1yZXR1cm4gVX07dmFyIEE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oRCl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChE'@;
put 'KX19LDUxMDg6KHcsQSxEKT0+e3ZhciBQPUQoOTUzOSksVT1EKDkyODIpO2Z1bmN0aW9uIEkoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgRSxrPUFycmF5LnByb3RvdHlwZS5zbGljZSxCPXt9O0U9dm9pZCAwIT09RC5nJiZELmcuY29uc29sZT9ELmcuY29uc29sZTp0eXBlb2Yg'@;
put 'd2luZG93PCJ1IiYmd2luZG93LmNvbnNvbGU/d2luZG93LmNvbnNvbGU6e307Zm9yKHZhciBOPVtbZnVuY3Rpb24oKXt9LCJsb2ciXSxbZnVuY3Rpb24oKXtFLmxvZy5hcHBseShFLGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uKCl7RS5sb2cuYXBwbHkoRSxhcmd1bWVudHMpfSwid2Fy'@;
put 'biJdLFtmdW5jdGlvbigpe0Uud2Fybi5hcHBseShFLGFyZ3VtZW50cyl9LCJlcnJvciJdLFtmdW5jdGlvbihxKXtCW3FdPUkoKX0sInRpbWUiXSxbZnVuY3Rpb24ocSl7dmFyIFE9QltxXTtpZighUSl0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrcSk7ZGVsZXRlIEJbcV07dmFy'@;
put 'IHRlPUkoKS1RO0UubG9nKHErIjogIit0ZSsibXMiKX0sInRpbWVFbmQiXSxbZnVuY3Rpb24oKXt2YXIgcT1uZXcgRXJyb3I7cS5uYW1lPSJUcmFjZSIscS5tZXNzYWdlPVAuZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSxFLmVycm9yKHEuc3RhY2spfSwidHJhY2UiXSxbZnVuY3Rpb24o'@;
put 'cSl7RS5sb2coUC5pbnNwZWN0KHEpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uKHEpe2lmKCFxKXt2YXIgUT1rLmNhbGwoYXJndW1lbnRzLDEpO1Uub2soITEsUC5mb3JtYXQuYXBwbHkobnVsbCxRKSl9fSwiYXNzZXJ0Il1dLFY9MDtWPE4ubGVuZ3RoO1YrKyl7dmFyIFo9TltWXSx6PVpbMV07'@;
put 'RVt6XXx8KEVbel09WlswXSl9dy5leHBvcnRzPUV9LDYzOTM6KHcsQSxEKT0+e3ZhciBQPUQoODc2NCkuQnVmZmVyLFU9RCg2OTQ4KSxJPUQoNjQyNik7dy5leHBvcnRzPWZ1bmN0aW9uKE4pe3JldHVybiBuZXcgayhOKX07dmFyIEU9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRl'@;
put 'TGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAyMjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9'@;
put 'LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gayhOKXt0aGlzLmN1cnZlVHlwZT1FW05dLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6Tn0pLHRoaXMuY3VydmU9'@;
put 'bmV3IFUuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBCKE4sVixaKXtBcnJheS5pc0FycmF5KE4pfHwoTj1OLnRvQXJyYXkoKSk7dmFyIFc9bmV3IFAoTik7aWYoWiYmVy5sZW5ndGg8Wil7dmFyIHo9bmV3IFAoWi1XLmxlbmd0aCk7ei5maWxsKDAp'@;
put 'LFc9UC5jb25jYXQoW3osV10pfXJldHVybiBWP1cudG9TdHJpbmcoVik6V31FLnAyMjQ9RS5zZWNwMjI0cjEsRS5wMjU2PUUuc2VjcDI1NnIxPUUucHJpbWUyNTZ2MSxFLnAxOTI9RS5zZWNwMTkycjE9RS5wcmltZTE5MnYxLEUucDM4ND1FLnNlY3AzODRyMSxFLnA1MjE9RS5zZWNwNTIxcjEs'@;
put 'ay5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKE4sVil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShOLFYpfSxrLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKE4sVixaKXtyZXR1cm4gVj1WfHwidXRmOCIs'@;
put 'UC5pc0J1ZmZlcihOKXx8KE49bmV3IFAoTixWKSksQih0aGlzLmN1cnZlLmtleUZyb21QdWJsaWMoTikuZ2V0UHVibGljKCkubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKSxaLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxrLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVu'@;
put 'Y3Rpb24oTixWKXt2YXIgWj10aGlzLmtleXMuZ2V0UHVibGljKCJjb21wcmVzc2VkIj09PVYsITApO3JldHVybiJoeWJyaWQiPT09ViYmKFpbMF09WltaLmxlbmd0aC0xXSUyPzc6NiksQihaLE4pfSxrLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKE4pe3JldHVybiBCKHRoaXMu'@;
put 'a2V5cy5nZXRQcml2YXRlKCksTil9LGsucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbihOLFYpe3JldHVybiBWPVZ8fCJ1dGY4IixQLmlzQnVmZmVyKE4pfHwoTj1uZXcgUChOLFYpKSx0aGlzLmtleXMuX2ltcG9ydFB1YmxpYyhOKSx0aGlzfSxrLnByb3RvdHlwZS5zZXRQcml2YXRl'@;
put 'S2V5PWZ1bmN0aW9uKE4sVil7Vj1WfHwidXRmOCIsUC5pc0J1ZmZlcihOKXx8KE49bmV3IFAoTixWKSk7dmFyIFo9bmV3IEkoTik7cmV0dXJuIFo9Wi50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShaKSx0aGlz'@;
put 'fX0sNjQyNjpmdW5jdGlvbih3LEEsRCl7IWZ1bmN0aW9uKFAsVSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxTKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoU3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBFKGcsUyl7Zy5zdXBlcl89Uzt2YXIgeD1mdW5jdGlvbigpe307eC5wcm90'@;
put 'b3R5cGU9Uy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IHgsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBrKGcsUyx4KXtpZihrLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVs'@;
put 'bCE9PWcmJigibGUiIT09UyYmImJlIiE9PVN8fCh4PVMsUz0xMCksdGhpcy5faW5pdChnfHwwLFN8fDEwLHh8fCJiZSIpKX12YXIgQjsib2JqZWN0Ij09dHlwZW9mIFA/UC5leHBvcnRzPWs6VS5CTj1rLGsuQk49ayxrLndvcmRTaXplPTI2O3RyeXtCPXR5cGVvZiB3aW5kb3c8InUiJiZ2b2lk'@;
put 'IDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6RCg4NjIzKS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIE4oZyxTKXt2YXIgeD1nLmNoYXJDb2RlQXQoUyk7cmV0dXJuIHg+PTY1JiZ4PD03MD94LTU1Ong+PTk3JiZ4PD0xMDI/eC04Nzp4LTQ4JjE1fWZ1bmN0aW9uIFYoZyxTLHgpe3Zh'@;
put 'ciBfPU4oZyx4KTtyZXR1cm4geC0xPj1TJiYoX3w9TihnLHgtMSk8PDQpLF99ZnVuY3Rpb24gWihnLFMseCxfKXtmb3IodmFyIHA9MCxDPU1hdGgubWluKGcubGVuZ3RoLHgpLEs9UztLPEM7SysrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEspLTQ4O3AqPV8scCs9bmU+PTQ5P25lLTQ5KzEwOm5l'@;
put 'Pj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1rLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBrfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09ay53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShnLndvcmRzKX0say5tYXg9'@;
put 'ZnVuY3Rpb24oZyxTKXtyZXR1cm4gZy5jbXAoUyk+MD9nOlN9LGsubWluPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIGcuY21wKFMpPDA/ZzpTfSxrLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLFMseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKGcsUyx4'@;
put 'KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLFMseCk7ImhleCI9PT1TJiYoUz0xNiksSShTPT09KDB8UykmJlM+PTImJlM8PTM2KTt2YXIgXz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoXysrLHRoaXMubmVn'@;
put 'YXRpdmU9MSksXzxnLmxlbmd0aCYmKDE2PT09Uz90aGlzLl9wYXJzZUhleChnLF8seCk6KHRoaXMuX3BhcnNlQmFzZShnLFMsXyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxTLHgpKSl9LGsucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKGcsUyx4KXtn'@;
put 'PDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihJKGc8OTAw'@;
put 'NzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksUyx4KX0say5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihnLFMseCl7aWYo'@;
put 'SSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBfPTA7Xzx0'@;
put 'aGlzLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT0wO3ZhciBwLEMsSz0wO2lmKCJiZSI9PT14KWZvcihfPWcubGVuZ3RoLTEscD0wO18+PTA7Xy09Myl0aGlzLndvcmRzW3BdfD0oQz1nW19dfGdbXy0xXTw8OHxnW18tMl08PDE2KTw8SyY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Qz4+PjI2'@;
put 'LUsmNjcxMDg4NjMsKEsrPTI0KT49MjYmJihLLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKF89MCxwPTA7XzxnLmxlbmd0aDtfKz0zKXRoaXMud29yZHNbcF18PShDPWdbX118Z1tfKzFdPDw4fGdbXysyXTw8MTYpPDxLJjY3MTA4ODYzLHRoaXMud29yZHNbcCsxXT1DPj4+MjYtSyY2'@;
put 'NzEwODg2MywoSys9MjQpPj0yNiYmKEstPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsUyx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLVMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtm'@;
put 'b3IodmFyIF89MDtfPHRoaXMubGVuZ3RoO18rKyl0aGlzLndvcmRzW19dPTA7dmFyIHAsQz0wLEs9MDtpZigiYmUiPT09eClmb3IoXz1nLmxlbmd0aC0xO18+PVM7Xy09MilwPVYoZyxTLF8pPDxDLHRoaXMud29yZHNbS118PTY3MTA4ODYzJnAsQz49MTg/KEMtPTE4LHRoaXMud29yZHNbSys9'@;
put 'MV18PXA+Pj4yNik6Qys9ODtlbHNlIGZvcihfPShnLmxlbmd0aC1TKSUyPT0wP1MrMTpTO188Zy5sZW5ndGg7Xys9MilwPVYoZyxTLF8pPDxDLHRoaXMud29yZHNbS118PTY3MTA4ODYzJnAsQz49MTg/KEMtPTE4LHRoaXMud29yZHNbSys9MV18PXA+Pj4yNik6Qys9ODt0aGlzLnN0cmlwKCl9'@;
put 'LGsucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxTLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBfPTAscD0xO3A8PTY3MTA4ODYzO3AqPVMpXysrO18tLSxwPXAvU3wwO2Zvcih2YXIgQz1nLmxlbmd0aC14LEs9QyVfLG5lPU1hdGgubWluKEMsQy1LKSt4'@;
put 'LHVlPTAsaGU9eDtoZTxuZTtoZSs9Xyl1ZT1aKGcsaGUsaGUrXyxTKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rdWU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dWU6dGhpcy5faWFkZG4odWUpO2lmKDAhPT1LKXt2YXIgeGU9MTtmb3IodWU9WihnLGhlLGcubGVuZ3RoLFMpLGhlPTA7'@;
put 'aGU8SztoZSsrKXhlKj1TO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rdWU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dWU6dGhpcy5faWFkZG4odWUpfXRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7'@;
put 'Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspZy53b3Jkc1tTXT10aGlzLndvcmRzW1NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0say5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgZz1uZXcgayhudWxsKTty'@;
put 'ZXR1cm4gdGhpcy5jb3B5KGcpLGd9LGsucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYw'@;
put 'PT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0say5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRo'@;
put 'aXN9LGsucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFc9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwIl0sej1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMw'@;
put 'NDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1'@;
put 'MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFEoZyxTLHgpe3gubmVnYXRpdmU9Uy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciBfPWcubGVuZ3RoK1MubGVuZ3RofDA7eC5sZW5ndGg9XyxfPV8tMXwwO3Zh'@;
put 'ciBwPTB8Zy53b3Jkc1swXSxDPTB8Uy53b3Jkc1swXSxLPXAqQyx1ZT1LLzY3MTA4ODY0fDA7eC53b3Jkc1swXT02NzEwODg2MyZLO2Zvcih2YXIgaGU9MTtoZTxfO2hlKyspe2Zvcih2YXIgeGU9dWU+Pj4yNixPZT02NzEwODg2MyZ1ZSxIZT1NYXRoLm1pbihoZSxTLmxlbmd0aC0xKSxFZT1N'@;
put 'YXRoLm1heCgwLGhlLWcubGVuZ3RoKzEpO0VlPD1IZTtFZSsrKXhlKz0oSz0ocD0wfGcud29yZHNbaGUtRWV8MF0pKihDPTB8Uy53b3Jkc1tFZV0pK09lKS82NzEwODg2NHwwLE9lPTY3MTA4ODYzJks7eC53b3Jkc1toZV09MHxPZSx1ZT0wfHhlfXJldHVybiAwIT09dWU/eC53b3Jkc1toZV09'@;
put 'MHx1ZTp4Lmxlbmd0aC0tLHguc3RyaXAoKX1rLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLFMpe3ZhciB4O2lmKFM9MHxTfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBfPTAscD0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEs9dGhpcy53b3Jk'@;
put 'c1tDXSxuZT0oMTY3NzcyMTUmKEs8PF98cCkpLnRvU3RyaW5nKDE2KTt4PTAhPShwPUs+Pj4yNC1fJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/V1s2LW5lLmxlbmd0aF0rbmUreDpuZSt4LChfKz0yKT49MjYmJihfLT0yNixDLS0pfWZvcigwIT09cCYmKHg9cC50b1N0cmluZygxNikr'@;
put 'eCk7eC5sZW5ndGglUyE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciB1ZT16W2ddLGhlPXFbZ107eD0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2ZT0wOyF4ZS5pc1plcm8o'@;
put 'KTspe3ZhciBPZT14ZS5tb2RuKGhlKS50b1N0cmluZyhnKTt4PSh4ZT14ZS5pZGl2bihoZSkpLmlzWmVybygpP09lK3g6V1t1ZS1PZS5sZW5ndGhdK09lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCVTIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmKHg9Ii0iK3gpLHh9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxrLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlz'@;
put 'Lmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1nOmd9LGsucHJv'@;
put 'dG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0say5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gSSh2b2lkIDAhPT1CKSx0aGlzLnRvQXJyYXlMaWtlKEIsZyxTKX0say5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihnLFMp'@;
put 'e3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsUyl9LGsucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXz10aGlzLmJ5dGVMZW5ndGgoKSxwPXh8fE1hdGgubWF4KDEsXyk7SShfPD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3Ro'@;
put 'IiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgQyxLLG5lPSJsZSI9PT1TLHVlPW5ldyBnKHApLGhlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEs9MDshaGUuaXNaZXJvKCk7SysrKUM9aGUuYW5kbG4oMjU1KSxoZS5pdXNocm4oOCksdWVb'@;
put 'S109Qztmb3IoO0s8cDtLKyspdWVbS109MH1lbHNle2ZvcihLPTA7SzxwLV87SysrKXVlW0tdPTA7Zm9yKEs9MDshaGUuaXNaZXJvKCk7SysrKUM9aGUuYW5kbG4oMjU1KSxoZS5pdXNocm4oOCksdWVbcC1LLTFdPUN9cmV0dXJuIHVlfSxrLnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6'@;
put 'MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBTPWcseD0wO3JldHVybiBTPj00MDk2JiYoeCs9MTMsUz4+Pj0xMyksUz49NjQmJih4Kz03LFM+Pj49NyksUz49OCYmKHgrPTQsUz4+Pj00KSxTPj0yJiYoeCs9MixTPj4+PTIpLHgrU30say5w'@;
put 'cm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgUz1nLHg9MDtyZXR1cm4hKDgxOTEmUykmJih4Kz0xMyxTPj4+PTEzKSwhKDEyNyZTKSYmKHgrPTcsUz4+Pj03KSwhKDE1JlMpJiYoeCs9NCxTPj4+PTQpLCEoMyZTKSYmKHgrPTIsUz4+Pj0yKSwh'@;
put 'KDEmUykmJngrKyx4fSxrLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgUz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStTfSxrLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMu'@;
put 'aXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1NdKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30say5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRo'@;
put 'LmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0say5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0say5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0say5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGsucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5l'@;
put 'ZygpfSxrLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxrLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtm'@;
put 'b3IodmFyIFM9MDtTPGcubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU118Zy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1b3IoZyl9'@;
put 'LGsucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LGsucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgp'@;
put 'Lml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LGsucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBTO1M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8Uy5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZnLndvcmRzW3hdO3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD1TLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxrLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVu'@;
put 'Z3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxrLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5kKHRoaXMpfSxrLnByb3Rv'@;
put 'dHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgUyx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMseD1nKTooUz1nLHg9dGhpcyk7Zm9yKHZhciBfPTA7Xzx4Lmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT1TLndvcmRzW19dXngud29yZHNbX107aWYodGhpcyE9PVMpZm9yKDtfPFMubGVu'@;
put 'Z3RoO18rKyl0aGlzLndvcmRzW19dPVMud29yZHNbX107cmV0dXJuIHRoaXMubGVuZ3RoPVMubGVuZ3RoLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoZyl9LGsucHJvdG90'@;
put 'eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LGsucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhv'@;
put 'cihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LGsucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKFMpLHg+MCYmUy0tO2Zvcih2YXIgXz0wO188UztfKyspdGhp'@;
put 'cy53b3Jkc1tfXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tfXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tfXT1+dGhpcy53b3Jkc1tfXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oZyl9'@;
put 'LGsucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxTKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLF89ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1TP3RoaXMud29yZHNbeF18MTw8Xzp0aGlzLndvcmRzW3hdJn4oMTw8XyksdGhp'@;
put 'cy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBTLHgsXztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxTPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09'@;
put 'PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsUz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLFMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxfPWcpOih4PWcsXz10aGlzKTtmb3IodmFyIHA9MCxDPTA7QzxfLmxlbmd0'@;
put 'aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoUz0oMHx4LndvcmRzW0NdKSsoMHxfLndvcmRzW0NdKStwKSxwPVM+Pj4yNjtmb3IoOzAhPT1wJiZDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihTPSgwfHgud29yZHNbQ10pK3ApLHA9Uz4+PjI2O2lmKHRoaXMubGVu'@;
put 'Z3RoPXgubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT14LndvcmRzW0NdO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZyl7dmFy'@;
put 'IFM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLFM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxTKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxTPWcuc3ViKHRoaXMpLHRoaXMubmVnYXRp'@;
put 'dmU9MSxTKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0say5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBTPXRoaXMuaWFkZChnKTtyZXR1cm4gZy5uZWdh'@;
put 'dGl2ZT0xLFMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHgsXyxwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAs'@;
put 'dGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KHg9dGhpcyxfPWcpOih4PWcsXz10aGlzKTtmb3IodmFyIEM9MCxLPTA7SzxfLmxlbmd0aDtLKyspQz0oUz0oMHx4LndvcmRzW0tdKS0oMHxfLndvcmRzW0tdKStDKT4+MjYsdGhpcy53b3Jkc1tLXT02NzEwODg2MyZTO2Zv'@;
put 'cig7MCE9PUMmJks8eC5sZW5ndGg7SysrKUM9KFM9KDB8eC53b3Jkc1tLXSkrQyk+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmUztpZigwPT09QyYmSzx4Lmxlbmd0aCYmeCE9PXRoaXMpZm9yKDtLPHgubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPXgud29yZHNbS107cmV0dXJuIHRoaXMu'@;
put 'bGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEspLHghPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLFMseCl7dmFyIF8scCxDLEs9'@;
put 'Zy53b3JkcyxuZT1TLndvcmRzLHVlPXgud29yZHMsaGU9MCx4ZT0wfEtbMF0sT2U9ODE5MSZ4ZSxIZT14ZT4+PjEzLEVlPTB8S1sxXSxMZT04MTkxJkVlLE5lPUVlPj4+MTMsS2U9MHxLWzJdLFVlPTgxOTEmS2UsWGU9S2U+Pj4xMyxhdD0wfEtbM10sRmU9ODE5MSZhdCxDZT1hdD4+PjEzLERl'@;
put 'PTB8S1s0XSxSZT04MTkxJkRlLGV0PURlPj4+MTMsbnQ9MHxLWzVdLEdlPTgxOTEmbnQsZHQ9bnQ+Pj4xMyxUZT0wfEtbNl0sQWU9ODE5MSZUZSxCZT1UZT4+PjEzLG90PTB8S1s3XSxsdD04MTkxJm90LEN0PW90Pj4+MTMsRnQ9MHxLWzhdLFJ0PTgxOTEmRnQsWHQ9RnQ+Pj4xMyxTbj0wfEtb'@;
put 'OV0senQ9ODE5MSZTbix2bj1Tbj4+PjEzLEJuPTB8bmVbMF0sdG49ODE5MSZCbixabj1Cbj4+PjEzLE9uPTB8bmVbMV0scHQ9ODE5MSZPbixmbj1Pbj4+PjEzLGRuPTB8bmVbMl0sTXQ9ODE5MSZkbixZdD1kbj4+PjEzLF90PTB8bmVbM10sanQ9ODE5MSZfdCxwbj1fdD4+PjEzLHJ0PTB8bmVb'@;
put 'NF0sRXQ9ODE5MSZydCxRdD1ydD4+PjEzLFR0PTB8bmVbNV0sbXQ9ODE5MSZUdCxHdD1UdD4+PjEzLGtuPTB8bmVbNl0sQnQ9ODE5MSZrbixibj1rbj4+PjEzLENuPTB8bmVbN10sZW49ODE5MSZDbixQbj1Dbj4+PjEzLHduPTB8bmVbOF0sJHQ9ODE5MSZ3bixXbj13bj4+PjEzLGNpPTB8bmVb'@;
put 'OV0sbG49ODE5MSZjaSxubj1jaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV5TLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1aT0oaGUrKF89TWF0aC5pbXVsKE9lLHRuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChPZSxabikpK01hdGguaW11bChIZSx0bil8MCkpPDwxMyl8MDto'@;
put 'ZT0oKEM9TWF0aC5pbXVsKEhlLFpuKSkrKHA+Pj4xMyl8MCkrKHVpPj4+MjYpfDAsdWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKExlLHRuKSxwPShwPU1hdGguaW11bChMZSxabikpK01hdGguaW11bChOZSx0bil8MCxDPU1hdGguaW11bChOZSxabik7dmFyIEFyPShoZSsoXz1fK01hdGguaW11'@;
put 'bChPZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSGUscHQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLGZuKXwwKSsocD4+PjEzKXwwKSsoQXI+Pj4yNil8MCxBciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoVWUsdG4pLHA9'@;
put 'KHA9TWF0aC5pbXVsKFVlLFpuKSkrTWF0aC5pbXVsKFhlLHRuKXwwLEM9TWF0aC5pbXVsKFhlLFpuKSxfPV8rTWF0aC5pbXVsKExlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChOZSxwdCl8MCxDPUMrTWF0aC5pbXVsKE5lLGZuKXwwO3ZhciBtcj0oaGUrKF89'@;
put 'XytNYXRoLmltdWwoT2UsTXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxZdCl8MCkrTWF0aC5pbXVsKEhlLE10KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG1yPj4+MjYpfDAsbXImPTY3MTA4ODYzLF89TWF0aC5pbXVs'@;
put 'KEZlLHRuKSxwPShwPU1hdGguaW11bChGZSxabikpK01hdGguaW11bChDZSx0bil8MCxDPU1hdGguaW11bChDZSxabiksXz1fK01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoWGUscHQpfDAsQz1DK01hdGguaW11bChYZSxmbil8MCxfPV8r'@;
put 'TWF0aC5pbXVsKExlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChOZSxNdCl8MCxDPUMrTWF0aC5pbXVsKE5lLFl0KXwwO3ZhciB5aT0oaGUrKF89XytNYXRoLmltdWwoT2UsanQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxwbil8MCkrTWF0'@;
put 'aC5pbXVsKEhlLGp0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxwbil8MCkrKHA+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKFJlLHRuKSxwPShwPU1hdGguaW11bChSZSxabikpK01hdGguaW11bChldCx0bil8MCxDPU1hdGguaW11bChl'@;
put 'dCxabiksXz1fK01hdGguaW11bChGZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLGZuKXwwKStNYXRoLmltdWwoQ2UscHQpfDAsQz1DK01hdGguaW11bChDZSxmbil8MCxfPV8rTWF0aC5pbXVsKFVlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01hdGguaW11bChYZSxNdCl8'@;
put 'MCxDPUMrTWF0aC5pbXVsKFhlLFl0KXwwLF89XytNYXRoLmltdWwoTGUsanQpfDAscD0ocD1wK01hdGguaW11bChMZSxwbil8MCkrTWF0aC5pbXVsKE5lLGp0KXwwLEM9QytNYXRoLmltdWwoTmUscG4pfDA7dmFyICRyPShoZSsoXz1fK01hdGguaW11bChPZSxFdCl8MCl8MCkrKCg4MTkxJihw'@;
put 'PShwPXArTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoSGUsRXQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFF0KXwwKSsocD4+PjEzKXwwKSsoJHI+Pj4yNil8MCwkciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoR2UsdG4pLHA9KHA9TWF0aC5pbXVsKEdlLFpuKSkrTWF0'@;
put 'aC5pbXVsKGR0LHRuKXwwLEM9TWF0aC5pbXVsKGR0LFpuKSxfPV8rTWF0aC5pbXVsKFJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChldCxwdCl8MCxDPUMrTWF0aC5pbXVsKGV0LGZuKXwwLF89XytNYXRoLmltdWwoRmUsTXQpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChGZSxZdCl8MCkrTWF0aC5pbXVsKENlLE10KXwwLEM9QytNYXRoLmltdWwoQ2UsWXQpfDAsXz1fK01hdGguaW11bChVZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoWGUsanQpfDAsQz1DK01hdGguaW11bChYZSxwbil8MCxfPV8rTWF0aC5pbXVsKExlLEV0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChOZSxFdCl8MCxDPUMrTWF0aC5pbXVsKE5lLFF0KXwwO3ZhciBKaT0oaGUrKF89XytNYXRoLmltdWwoT2UsbXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0aC5pbXVsKEhlLG10KXww'@;
put 'KSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxHdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKEFlLHRuKSxwPShwPU1hdGguaW11bChBZSxabikpK01hdGguaW11bChCZSx0bil8MCxDPU1hdGguaW11bChCZSxabiksXz1fK01hdGgu'@;
put 'aW11bChHZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLGZuKXwwKStNYXRoLmltdWwoZHQscHQpfDAsQz1DK01hdGguaW11bChkdCxmbil8MCxfPV8rTWF0aC5pbXVsKFJlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsWXQpfDApK01hdGguaW11bChldCxNdCl8MCxDPUMrTWF0aC5pbXVs'@;
put 'KGV0LFl0KXwwLF89XytNYXRoLmltdWwoRmUsanQpfDAscD0ocD1wK01hdGguaW11bChGZSxwbil8MCkrTWF0aC5pbXVsKENlLGp0KXwwLEM9QytNYXRoLmltdWwoQ2UscG4pfDAsXz1fK01hdGguaW11bChVZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXwwKStNYXRoLmltdWwoWGUs'@;
put 'RXQpfDAsQz1DK01hdGguaW11bChYZSxRdCl8MCxfPV8rTWF0aC5pbXVsKExlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsR3QpfDApK01hdGguaW11bChOZSxtdCl8MCxDPUMrTWF0aC5pbXVsKE5lLEd0KXwwO3ZhciB5cj0oaGUrKF89XytNYXRoLmltdWwoT2UsQnQpfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChPZSxibil8MCkrTWF0aC5pbXVsKEhlLEJ0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxibil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKGx0LHRuKSxwPShwPU1hdGguaW11bChsdCxabikp'@;
put 'K01hdGguaW11bChDdCx0bil8MCxDPU1hdGguaW11bChDdCxabiksXz1fK01hdGguaW11bChBZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZuKXwwKStNYXRoLmltdWwoQmUscHQpfDAsQz1DK01hdGguaW11bChCZSxmbil8MCxfPV8rTWF0aC5pbXVsKEdlLE10KXwwLHA9KHA9cCtNYXRo'@;
put 'LmltdWwoR2UsWXQpfDApK01hdGguaW11bChkdCxNdCl8MCxDPUMrTWF0aC5pbXVsKGR0LFl0KXwwLF89XytNYXRoLmltdWwoUmUsanQpfDAscD0ocD1wK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGV0LGp0KXwwLEM9QytNYXRoLmltdWwoZXQscG4pfDAsXz1fK01hdGguaW11bChG'@;
put 'ZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFF0KXwwKStNYXRoLmltdWwoQ2UsRXQpfDAsQz1DK01hdGguaW11bChDZSxRdCl8MCxfPV8rTWF0aC5pbXVsKFVlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsR3QpfDApK01hdGguaW11bChYZSxtdCl8MCxDPUMrTWF0aC5pbXVsKFhlLEd0'@;
put 'KXwwLF89XytNYXRoLmltdWwoTGUsQnQpfDAscD0ocD1wK01hdGguaW11bChMZSxibil8MCkrTWF0aC5pbXVsKE5lLEJ0KXwwLEM9QytNYXRoLmltdWwoTmUsYm4pfDA7dmFyIElpPShoZSsoXz1fK01hdGguaW11bChPZSxlbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLFBu'@;
put 'KXwwKStNYXRoLmltdWwoSGUsZW4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFBuKXwwKSsocD4+PjEzKXwwKSsoSWk+Pj4yNil8MCxJaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoUnQsdG4pLHA9KHA9TWF0aC5pbXVsKFJ0LFpuKSkrTWF0aC5pbXVsKFh0LHRuKXwwLEM9TWF0'@;
put 'aC5pbXVsKFh0LFpuKSxfPV8rTWF0aC5pbXVsKGx0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZm4pfDApK01hdGguaW11bChDdCxwdCl8MCxDPUMrTWF0aC5pbXVsKEN0LGZuKXwwLF89XytNYXRoLmltdWwoQWUsTXQpfDAscD0ocD1wK01hdGguaW11bChBZSxZdCl8MCkrTWF0aC5pbXVs'@;
put 'KEJlLE10KXwwLEM9QytNYXRoLmltdWwoQmUsWXQpfDAsXz1fK01hdGguaW11bChHZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLHBuKXwwKStNYXRoLmltdWwoZHQsanQpfDAsQz1DK01hdGguaW11bChkdCxwbil8MCxfPV8rTWF0aC5pbXVsKFJlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'UmUsUXQpfDApK01hdGguaW11bChldCxFdCl8MCxDPUMrTWF0aC5pbXVsKGV0LFF0KXwwLF89XytNYXRoLmltdWwoRmUsbXQpfDAscD0ocD1wK01hdGguaW11bChGZSxHdCl8MCkrTWF0aC5pbXVsKENlLG10KXwwLEM9QytNYXRoLmltdWwoQ2UsR3QpfDAsXz1fK01hdGguaW11bChVZSxCdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFVlLGJuKXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQz1DK01hdGguaW11bChYZSxibil8MCxfPV8rTWF0aC5pbXVsKExlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChOZSxlbil8MCxDPUMrTWF0aC5pbXVsKE5lLFBuKXwwO3Zh'@;
put 'ciBubz0oaGUrKF89XytNYXRoLmltdWwoT2UsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxXbil8MCkrTWF0aC5pbXVsKEhlLCR0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxXbil8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYz'@;
put 'LF89TWF0aC5pbXVsKHp0LHRuKSxwPShwPU1hdGguaW11bCh6dCxabikpK01hdGguaW11bCh2bix0bil8MCxDPU1hdGguaW11bCh2bixabiksXz1fK01hdGguaW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGZuKXwwKStNYXRoLmltdWwoWHQscHQpfDAsQz1DK01hdGguaW11bChY'@;
put 'dCxmbil8MCxfPV8rTWF0aC5pbXVsKGx0LE10KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsWXQpfDApK01hdGguaW11bChDdCxNdCl8MCxDPUMrTWF0aC5pbXVsKEN0LFl0KXwwLF89XytNYXRoLmltdWwoQWUsanQpfDAscD0ocD1wK01hdGguaW11bChBZSxwbil8MCkrTWF0aC5pbXVsKEJlLGp0'@;
put 'KXwwLEM9QytNYXRoLmltdWwoQmUscG4pfDAsXz1fK01hdGguaW11bChHZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFF0KXwwKStNYXRoLmltdWwoZHQsRXQpfDAsQz1DK01hdGguaW11bChkdCxRdCl8MCxfPV8rTWF0aC5pbXVsKFJlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsR3Qp'@;
put 'fDApK01hdGguaW11bChldCxtdCl8MCxDPUMrTWF0aC5pbXVsKGV0LEd0KXwwLF89XytNYXRoLmltdWwoRmUsQnQpfDAscD0ocD1wK01hdGguaW11bChGZSxibil8MCkrTWF0aC5pbXVsKENlLEJ0KXwwLEM9QytNYXRoLmltdWwoQ2UsYm4pfDAsXz1fK01hdGguaW11bChVZSxlbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoWGUsZW4pfDAsQz1DK01hdGguaW11bChYZSxQbil8MCxfPV8rTWF0aC5pbXVsKExlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsV24pfDApK01hdGguaW11bChOZSwkdCl8MCxDPUMrTWF0aC5pbXVsKE5lLFduKXwwO3ZhciB6bj0o'@;
put 'aGUrKF89XytNYXRoLmltdWwoT2UsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKEhlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxubil8MCkrKHA+Pj4xMyl8MCkrKHpuPj4+MjYpfDAsem4mPTY3MTA4ODYzLF89TWF0'@;
put 'aC5pbXVsKHp0LHB0KSxwPShwPU1hdGguaW11bCh6dCxmbikpK01hdGguaW11bCh2bixwdCl8MCxDPU1hdGguaW11bCh2bixmbiksXz1fK01hdGguaW11bChSdCxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFl0KXwwKStNYXRoLmltdWwoWHQsTXQpfDAsQz1DK01hdGguaW11bChYdCxZdCl8'@;
put 'MCxfPV8rTWF0aC5pbXVsKGx0LGp0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscG4pfDApK01hdGguaW11bChDdCxqdCl8MCxDPUMrTWF0aC5pbXVsKEN0LHBuKXwwLF89XytNYXRoLmltdWwoQWUsRXQpfDAscD0ocD1wK01hdGguaW11bChBZSxRdCl8MCkrTWF0aC5pbXVsKEJlLEV0KXwwLEM9'@;
put 'QytNYXRoLmltdWwoQmUsUXQpfDAsXz1fK01hdGguaW11bChHZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLEd0KXwwKStNYXRoLmltdWwoZHQsbXQpfDAsQz1DK01hdGguaW11bChkdCxHdCl8MCxfPV8rTWF0aC5pbXVsKFJlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsYm4pfDApK01h'@;
put 'dGguaW11bChldCxCdCl8MCxDPUMrTWF0aC5pbXVsKGV0LGJuKXwwLF89XytNYXRoLmltdWwoRmUsZW4pfDAscD0ocD1wK01hdGguaW11bChGZSxQbil8MCkrTWF0aC5pbXVsKENlLGVuKXwwLEM9QytNYXRoLmltdWwoQ2UsUG4pfDAsXz1fK01hdGguaW11bChVZSwkdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFVlLFduKXwwKStNYXRoLmltdWwoWGUsJHQpfDAsQz1DK01hdGguaW11bChYZSxXbil8MDt2YXIgWmk9KGhlKyhfPV8rTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChOZSxsbil8MCkpPDwxMyl8MDtoZT0o'@;
put 'KEM9QytNYXRoLmltdWwoTmUsbm4pfDApKyhwPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxNdCkscD0ocD1NYXRoLmltdWwoenQsWXQpKStNYXRoLmltdWwodm4sTXQpfDAsQz1NYXRoLmltdWwodm4sWXQpLF89XytNYXRoLmltdWwoUnQsanQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChSdCxwbil8MCkrTWF0aC5pbXVsKFh0LGp0KXwwLEM9QytNYXRoLmltdWwoWHQscG4pfDAsXz1fK01hdGguaW11bChsdCxFdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFF0KXwwKStNYXRoLmltdWwoQ3QsRXQpfDAsQz1DK01hdGguaW11bChDdCxRdCl8MCxfPV8r'@;
put 'TWF0aC5pbXVsKEFlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsR3QpfDApK01hdGguaW11bChCZSxtdCl8MCxDPUMrTWF0aC5pbXVsKEJlLEd0KXwwLF89XytNYXRoLmltdWwoR2UsQnQpfDAscD0ocD1wK01hdGguaW11bChHZSxibil8MCkrTWF0aC5pbXVsKGR0LEJ0KXwwLEM9QytNYXRo'@;
put 'LmltdWwoZHQsYm4pfDAsXz1fK01hdGguaW11bChSZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFBuKXwwKStNYXRoLmltdWwoZXQsZW4pfDAsQz1DK01hdGguaW11bChldCxQbil8MCxfPV8rTWF0aC5pbXVsKEZlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsV24pfDApK01hdGguaW11'@;
put 'bChDZSwkdCl8MCxDPUMrTWF0aC5pbXVsKENlLFduKXwwO3ZhciBXaT0oaGUrKF89XytNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKFhlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChYZSxubil8MCkr'@;
put 'KHA+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LGp0KSxwPShwPU1hdGguaW11bCh6dCxwbikpK01hdGguaW11bCh2bixqdCl8MCxDPU1hdGguaW11bCh2bixwbiksXz1fK01hdGguaW11bChSdCxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFF0KXww'@;
put 'KStNYXRoLmltdWwoWHQsRXQpfDAsQz1DK01hdGguaW11bChYdCxRdCl8MCxfPV8rTWF0aC5pbXVsKGx0LG10KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsR3QpfDApK01hdGguaW11bChDdCxtdCl8MCxDPUMrTWF0aC5pbXVsKEN0LEd0KXwwLF89XytNYXRoLmltdWwoQWUsQnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChBZSxibil8MCkrTWF0aC5pbXVsKEJlLEJ0KXwwLEM9QytNYXRoLmltdWwoQmUsYm4pfDAsXz1fK01hdGguaW11bChHZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKEdlLFBuKXwwKStNYXRoLmltdWwoZHQsZW4pfDAsQz1DK01hdGguaW11bChkdCxQbil8MCxfPV8rTWF0aC5p'@;
put 'bXVsKFJlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsV24pfDApK01hdGguaW11bChldCwkdCl8MCxDPUMrTWF0aC5pbXVsKGV0LFduKXwwO3ZhciBvbz0oaGUrKF89XytNYXRoLmltdWwoRmUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxubil8MCkrTWF0aC5pbXVs'@;
put 'KENlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChDZSxubil8MCkrKHA+Pj4xMyl8MCkrKG9vPj4+MjYpfDAsb28mPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LEV0KSxwPShwPU1hdGguaW11bCh6dCxRdCkpK01hdGguaW11bCh2bixFdCl8MCxDPU1hdGguaW11bCh2bixRdCks'@;
put 'Xz1fK01hdGguaW11bChSdCxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LEd0KXwwKStNYXRoLmltdWwoWHQsbXQpfDAsQz1DK01hdGguaW11bChYdCxHdCl8MCxfPV8rTWF0aC5pbXVsKGx0LEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsYm4pfDApK01hdGguaW11bChDdCxCdCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKEN0LGJuKXwwLF89XytNYXRoLmltdWwoQWUsZW4pfDAscD0ocD1wK01hdGguaW11bChBZSxQbil8MCkrTWF0aC5pbXVsKEJlLGVuKXwwLEM9QytNYXRoLmltdWwoQmUsUG4pfDAsXz1fK01hdGguaW11bChHZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFduKXwwKStNYXRo'@;
put 'LmltdWwoZHQsJHQpfDAsQz1DK01hdGguaW11bChkdCxXbil8MDt2YXIgaG89KGhlKyhfPV8rTWF0aC5pbXVsKFJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUmUsbm4pfDApK01hdGguaW11bChldCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoZXQsbm4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxtdCkscD0ocD1NYXRoLmltdWwoenQsR3QpKStNYXRoLmltdWwodm4sbXQpfDAsQz1NYXRoLmltdWwodm4sR3QpLF89XytNYXRoLmltdWwoUnQsQnQpfDAscD0ocD1wK01hdGguaW11bChSdCxi'@;
put 'bil8MCkrTWF0aC5pbXVsKFh0LEJ0KXwwLEM9QytNYXRoLmltdWwoWHQsYm4pfDAsXz1fK01hdGguaW11bChsdCxlbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LFBuKXwwKStNYXRoLmltdWwoQ3QsZW4pfDAsQz1DK01hdGguaW11bChDdCxQbil8MCxfPV8rTWF0aC5pbXVsKEFlLCR0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoQWUsV24pfDApK01hdGguaW11bChCZSwkdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFduKXwwO3ZhciBMcj0oaGUrKF89XytNYXRoLmltdWwoR2UsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChHZSxubil8MCkrTWF0aC5pbXVsKGR0LGxuKXwwKSk8PDEz'@;
put 'KXwwO2hlPSgoQz1DK01hdGguaW11bChkdCxubil8MCkrKHA+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LEJ0KSxwPShwPU1hdGguaW11bCh6dCxibikpK01hdGguaW11bCh2bixCdCl8MCxDPU1hdGguaW11bCh2bixibiksXz1fK01hdGguaW11bChS'@;
put 'dCxlbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFBuKXwwKStNYXRoLmltdWwoWHQsZW4pfDAsQz1DK01hdGguaW11bChYdCxQbil8MCxfPV8rTWF0aC5pbXVsKGx0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsV24pfDApK01hdGguaW11bChDdCwkdCl8MCxDPUMrTWF0aC5pbXVsKEN0LFdu'@;
put 'KXwwO3ZhciBCaT0oaGUrKF89XytNYXRoLmltdWwoQWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKEJlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChCZSxubil8MCkrKHA+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3'@;
put 'MTA4ODYzLF89TWF0aC5pbXVsKHp0LGVuKSxwPShwPU1hdGguaW11bCh6dCxQbikpK01hdGguaW11bCh2bixlbil8MCxDPU1hdGguaW11bCh2bixQbiksXz1fK01hdGguaW11bChSdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFduKXwwKStNYXRoLmltdWwoWHQsJHQpfDAsQz1DK01hdGgu'@;
put 'aW11bChYdCxXbil8MDt2YXIgTG89KGhlKyhfPV8rTWF0aC5pbXVsKGx0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsbm4pfDApK01hdGguaW11bChDdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQ3Qsbm4pfDApKyhwPj4+MTMpfDApKyhMbz4+PjI2'@;
put 'KXwwLExvJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCwkdCkscD0ocD1NYXRoLmltdWwoenQsV24pKStNYXRoLmltdWwodm4sJHQpfDAsQz1NYXRoLmltdWwodm4sV24pO3ZhciBLbz0oaGUrKF89XytNYXRoLmltdWwoUnQsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChSdCxu'@;
put 'bil8MCkrTWF0aC5pbXVsKFh0LGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChYdCxubil8MCkrKHA+Pj4xMyl8MCkrKEtvPj4+MjYpfDAsS28mPTY3MTA4ODYzO3ZhciBlcz0oaGUrKF89TWF0aC5pbXVsKHp0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bCh6dCxubikp'@;
put 'K01hdGguaW11bCh2bixsbil8MCkpPDwxMyl8MDtyZXR1cm4gaGU9KChDPU1hdGguaW11bCh2bixubikpKyhwPj4+MTMpfDApKyhlcz4+PjI2KXwwLGVzJj02NzEwODg2Myx1ZVswXT11aSx1ZVsxXT1Bcix1ZVsyXT1tcix1ZVszXT15aSx1ZVs0XT0kcix1ZVs1XT1KaSx1ZVs2XT15cix1ZVs3'@;
put 'XT1JaSx1ZVs4XT1ubyx1ZVs5XT16bix1ZVsxMF09WmksdWVbMTFdPVdpLHVlWzEyXT1vbyx1ZVsxM109aG8sdWVbMTRdPUxyLHVlWzE1XT1CaSx1ZVsxNl09TG8sdWVbMTddPUtvLHVlWzE4XT1lcywwIT09aGUmJih1ZVsxOV09aGUseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gYWUoZyxTLHgp'@;
put 'e3JldHVybihuZXcgc2UpLm11bHAoZyxTLHgpfWZ1bmN0aW9uIHNlKGcsUyl7dGhpcy54PWcsdGhpcy55PVN9TWF0aC5pbXVsfHwodGU9USksay5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxTKXt2YXIgXz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYm'@;
put 'MTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsUyk6Xzw2Mz9RKHRoaXMsZyxTKTpfPDEwMjQ/ZnVuY3Rpb24ocCxDLEspe0submVnYXRpdmU9Qy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEsubGVuZ3RoPXAubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgbmU9MCx1ZT0wLGhlPTA7aGU8Sy5sZW5ndGgtMTto'@;
put 'ZSsrKXt2YXIgeGU9dWU7dWU9MDtmb3IodmFyIE9lPTY3MTA4ODYzJm5lLEhlPU1hdGgubWluKGhlLEMubGVuZ3RoLTEpLEVlPU1hdGgubWF4KDAsaGUtcC5sZW5ndGgrMSk7RWU8PUhlO0VlKyspe3ZhciBOZT0oMHxwLndvcmRzW2hlLUVlXSkqKDB8Qy53b3Jkc1tFZV0pLEtlPTY3MTA4ODYz'@;
put 'Jk5lO09lPTY3MTA4ODYzJihLZT1LZStPZXwwKSx1ZSs9KHhlPSh4ZT14ZSsoTmUvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUsud29yZHNbaGVdPU9lLG5lPXhlLHhlPXVlfXJldHVybiAwIT09bmU/Sy53b3Jkc1toZV09bmU6Sy5sZW5ndGgtLSxLLnN0'@;
put 'cmlwKCl9KHRoaXMsZyxTKTphZSh0aGlzLGcsUyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgUz1uZXcgQXJyYXkoZykseD1rLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsXz0wO188ZztfKyspU1tfXT10aGlzLnJldkJpbihfLHgsZyk7cmV0dXJuIFN9LHNl'@;
put 'LnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxTLHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgXz0wLHA9MDtwPFM7cCsrKV98PSgxJmcpPDxTLXAtMSxnPj49MTtyZXR1cm4gX30sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxTLHgsXyxwLEMpe2Zvcih2'@;
put 'YXIgSz0wO0s8QztLKyspX1tLXT1TW2dbS11dLHBbS109eFtnW0tdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLFMseCxfLHAsQyl7dGhpcy5wZXJtdXRlKEMsZyxTLHgsXyxwKTtmb3IodmFyIEs9MTtLPHA7Szw8PTEpZm9yKHZhciBuZT1LPDwxLHVlPU1hdGguY29zKDIq'@;
put 'TWF0aC5QSS9uZSksaGU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgT2U9dWUsSGU9aGUsRWU9MDtFZTxLO0VlKyspe3ZhciBMZT14W3hlK0VlXSxOZT1fW3hlK0VlXSxLZT14W3hlK0VlK0tdLFVlPV9beGUrRWUrS10sWGU9T2UqS2UtSGUqVWU7VWU9'@;
put 'T2UqVWUrSGUqS2UseFt4ZStFZV09TGUrKEtlPVhlKSxfW3hlK0VlXT1OZStVZSx4W3hlK0VlK0tdPUxlLUtlLF9beGUrRWUrS109TmUtVWUsRWUhPT1uZSYmKFhlPXVlKk9lLWhlKkhlLEhlPXVlKkhlK2hlKk9lLE9lPVhlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihn'@;
put 'LFMpe3ZhciB4PTF8TWF0aC5tYXgoUyxnKSxfPTEmeCxwPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpcCsrO3JldHVybiAxPDxwKzErX30sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLFMseCl7aWYoISh4PD0xKSlmb3IodmFyIF89MDtfPHgvMjtfKyspe3ZhciBwPWdbX107Z1tf'@;
put 'XT1nW3gtXy0xXSxnW3gtXy0xXT1wLHA9U1tfXSxTW19dPS1TW3gtXy0xXSxTW3gtXy0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxTKXtmb3IodmFyIHg9MCxfPTA7XzxTLzI7XysrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1syKl8rMV0vUykrTWF0aC5y'@;
put 'b3VuZChnWzIqX10vUykreDtnW19dPTY3MTA4ODYzJnAseD1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLFMseCxfKXtmb3IodmFyIHA9MCxDPTA7QzxTO0MrKyl4WzIqQ109ODE5MSYocCs9MHxnW0NdKSx4WzIq'@;
put 'QysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2ZvcihDPTIqUztDPF87KytDKXhbQ109MDtJKDA9PT1wKSxJKCEoLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIFM9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKVNbeF09MDtyZXR1cm4gU30sc2UucHJv'@;
put 'dG90eXBlLm11bHA9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxTLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoXyksQz10aGlzLnN0dWIoXyksSz1uZXcgQXJyYXkoXyksbmU9bmV3IEFycmF5KF8pLHVlPW5ldyBBcnJheShfKSxoZT1uZXcgQXJyYXko'@;
put 'XykseGU9bmV3IEFycmF5KF8pLE9lPW5ldyBBcnJheShfKSxIZT14LndvcmRzO0hlLmxlbmd0aD1fLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEssXyksdGhpcy5jb252ZXJ0MTNiKFMud29yZHMsUy5sZW5ndGgsaGUsXyksdGhpcy50cmFuc2Zvcm0oSyxDLG5lLHVlLF8scCks'@;
put 'dGhpcy50cmFuc2Zvcm0oaGUsQyx4ZSxPZSxfLHApO2Zvcih2YXIgRWU9MDtFZTxfO0VlKyspe3ZhciBMZT1uZVtFZV0qeGVbRWVdLXVlW0VlXSpPZVtFZV07dWVbRWVdPW5lW0VlXSpPZVtFZV0rdWVbRWVdKnhlW0VlXSxuZVtFZV09TGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG5lLHVlLF8p'@;
put 'LHRoaXMudHJhbnNmb3JtKG5lLHVlLEhlLEMsXyxwKSx0aGlzLmNvbmp1Z2F0ZShIZSxDLF8pLHRoaXMubm9ybWFsaXplMTNiKEhlLF8pLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV5TLm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK1MubGVuZ3RoLHguc3RyaXAoKX0say5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciBTPW5ldyBrKG51bGwpO3JldHVybiBTLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLFMpfSxrLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBTPW5ldyBrKG51bGwpO3JldHVybiBTLndvcmRzPW5ldyBBcnJh'@;
put 'eSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksYWUodGhpcyxnLFMpfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0say5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2'@;
put 'NCk7Zm9yKHZhciBTPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgXz0oMHx0aGlzLndvcmRzW3hdKSpnLHA9KDY3MTA4ODYzJl8pKyg2NzEwODg2MyZTKTtTPj49MjYsUys9Xy82NzEwODg2NHwwLFMrPXA+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJnB9cmV0dXJuIDAhPT1TJiYo'@;
put 'dGhpcy53b3Jkc1t4XT1TLHRoaXMubGVuZ3RoKyspLHRoaXN9LGsucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0say5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxrLnByb3RvdHlwZS5pc3FyPWZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxrLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIFM9ZnVuY3Rpb24oQyl7Zm9yKHZhciBLPW5ldyBBcnJheShDLmJpdExlbmd0aCgpKSxuZT0wO25lPEsubGVuZ3RoO25lKyspe3ZhciBoZT1uZSUyNjtLW25lXT0o'@;
put 'Qy53b3Jkc1tuZS8yNnwwXSYxPDxoZSk+Pj5oZX1yZXR1cm4gS30oZyk7aWYoMD09PVMubGVuZ3RoKXJldHVybiBuZXcgaygxKTtmb3IodmFyIHg9dGhpcyxfPTA7XzxTLmxlbmd0aCYmMD09PVNbX107XysrLHg9eC5zcXIoKSk7aWYoKytfPFMubGVuZ3RoKWZvcih2YXIgcD14LnNxcigpO188'@;
put 'Uy5sZW5ndGg7XysrLHA9cC5zcXIoKSkwIT09U1tfXSYmKHg9eC5tdWwocCkpO3JldHVybiB4fSxrLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTLHg9ZyUyNixfPShnLXgpLzI2LHA9NjcxMDg4NjM+Pj4yNi14PDwyNi14O2lm'@;
put 'KDAhPT14KXt2YXIgQz0wO2ZvcihTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBLPXRoaXMud29yZHNbU10mcDt0aGlzLndvcmRzW1NdPSgwfHRoaXMud29yZHNbU10pLUs8PHh8QyxDPUs+Pj4yNi14fUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PV8pe2ZvcihT'@;
put 'PXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pdGhpcy53b3Jkc1tTK19dPXRoaXMud29yZHNbU107Zm9yKFM9MDtTPF87UysrKXRoaXMud29yZHNbU109MDt0aGlzLmxlbmd0aCs9X31yZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgwPT09'@;
put 'dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LGsucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLFMseCl7dmFyIF87SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLF89Uz8oUy1TJTI2KS8yNjowO3ZhciBwPWclMjYsQz1NYXRoLm1pbigoZy1wKS8yNix0aGlzLmxlbmd0aCksSz02'@;
put 'NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9eDtpZihfLT1DLF89TWF0aC5tYXgoMCxfKSxuZSl7Zm9yKHZhciB1ZT0wO3VlPEM7dWUrKyluZS53b3Jkc1t1ZV09dGhpcy53b3Jkc1t1ZV07bmUubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3IodGhpcy5sZW5ndGgtPUMs'@;
put 'dWU9MDt1ZTx0aGlzLmxlbmd0aDt1ZSsrKXRoaXMud29yZHNbdWVdPXRoaXMud29yZHNbdWUrQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaGU9MDtmb3IodWU9dGhpcy5sZW5ndGgtMTt1ZT49MCYmKDAhPT1oZXx8dWU+PV8pO3VlLS0pe3ZhciB4ZT0wfHRoaXMu'@;
put 'd29yZHNbdWVdO3RoaXMud29yZHNbdWVdPWhlPDwyNi1wfHhlPj4+cCxoZT14ZSZLfXJldHVybiBuZSYmMCE9PWhlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWhlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxrLnByb3Rv'@;
put 'dHlwZS5pc2hybj1mdW5jdGlvbihnLFMseCl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsUyx4KX0say5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxrLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0say5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxrLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0say5wcm90b3R5cGUudGVz'@;
put 'dG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWclMjYseD0oZy1TKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8UykpfSxrLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcm'@;
put 'Jmc+PTApO3ZhciBTPWclMjYseD0oZy1TKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PVMmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbih4LHRoaXMubGVuZ3Ro'@;
put 'KSwwIT09UyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Uzw8UyksdGhpcy5zdHJpcCgpKX0say5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LGsucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdh'@;
put 'dGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LGsucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGgmJnRoaXMud29y'@;
put 'ZHNbU10+PTY3MTA4ODY0O1MrKyl0aGlzLndvcmRzW1NdLT02NzEwODg2NCxTPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW1MrMV09MTp0aGlzLndvcmRzW1MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUysxKSx0aGlzfSxrLnByb3RvdHlwZS5pc3Vi'@;
put 'bj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlz'@;
put 'LndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tTXTwwO1MrKyl0aGlzLndvcmRzW1NdKz02NzEwODg2'@;
put 'NCx0aGlzLndvcmRzW1MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxrLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oZyl9LGsucHJv'@;
put 'dG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGsucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxrLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfLHA7dGhpcy5fZXhw'@;
put 'YW5kKGcubGVuZ3RoK3gpO3ZhciBLPTA7Zm9yKF89MDtfPGcubGVuZ3RoO18rKyl7cD0oMHx0aGlzLndvcmRzW18reF0pK0s7dmFyIG5lPSgwfGcud29yZHNbX10pKlM7Sz0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18reF09NjcxMDg4NjMmcH1m'@;
put 'b3IoO188dGhpcy5sZW5ndGgteDtfKyspSz0ocD0oMHx0aGlzLndvcmRzW18reF0pK0spPj4yNix0aGlzLndvcmRzW18reF09NjcxMDg4NjMmcDtpZigwPT09SylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SyksSz0wLF89MDtfPHRoaXMubGVuZ3RoO18rKylLPShwPS0oMHx0aGlz'@;
put 'LndvcmRzW19dKStLKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLFMpe3ZhciB4LF89dGhpcy5jbG9uZSgpLHA9ZyxDPTB8cC53b3Jkc1twLmxlbmd0aC0xXTsw'@;
put 'IT0oeD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYocD1wLnVzaGxuKHgpLF8uaXVzaGxuKHgpLEM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSyxuZT1fLmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PVMpeyhLPW5ldyBrKG51bGwpKS5sZW5ndGg9bmUrMSxLLndvcmRzPW5ldyBBcnJh'@;
put 'eShLLmxlbmd0aCk7Zm9yKHZhciB1ZT0wO3VlPEsubGVuZ3RoO3VlKyspSy53b3Jkc1t1ZV09MH12YXIgaGU9Xy5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1oZS5uZWdhdGl2ZSYmKF89aGUsSyYmKEsud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5lLTE7eGU+PTA7eGUtLSl7'@;
put 'dmFyIE9lPTY3MTA4ODY0KigwfF8ud29yZHNbcC5sZW5ndGgreGVdKSsoMHxfLndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoT2U9TWF0aC5taW4oT2UvQ3wwLDY3MTA4ODYzKSxfLl9pc2hsbnN1Ym11bChwLE9lLHhlKTswIT09Xy5uZWdhdGl2ZTspT2UtLSxfLm5lZ2F0aXZlPTAsXy5faXNo'@;
put 'bG5zdWJtdWwocCwxLHhlKSxfLmlzWmVybygpfHwoXy5uZWdhdGl2ZV49MSk7SyYmKEsud29yZHNbeGVdPU9lKX1yZXR1cm4gSyYmSy5zdHJpcCgpLF8uc3RyaXAoKSwiZGl2IiE9PVMmJjAhPT14JiZfLml1c2hybih4KSx7ZGl2Okt8fG51bGwsbW9kOl99fSxrLnByb3RvdHlwZS5kaXZtb2Q9'@;
put 'ZnVuY3Rpb24oZyxTLHgpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGsoMCksbW9kOm5ldyBrKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoZyxTKSwibW9kIiE9PVMmJihfPUMuZGl2Lm5lZygp'@;
put 'KSwiZGl2IiE9PVMmJihwPUMubW9kLm5lZygpLHgmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6Xyxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChnLm5lZygpLFMpLCJtb2QiIT09UyYmKF89Qy5kaXYubmVnKCkpLHtkaXY6'@;
put 'Xyxtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxTKSwiZGl2IiE9PVMmJihwPUMubW9kLm5lZygpLHgmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Qy5kaXYsbW9kOnB9KTpnLmxlbmd0aD50aGlzLmxlbmd0'@;
put 'aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBrKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1TP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVM/e2RpdjpudWxsLG1vZDpuZXcgayh0aGlzLm1vZG4oZy53b3Jkc1swXSkpfTp7ZGl2OnRoaXMu'@;
put 'ZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IGsodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLFMpO3ZhciBfLHAsQ30say5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LGsucHJvdG90eXBlLm1vZD1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxrLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LGsucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBTPXRoaXMuZGl2bW9kKGcpO2lm'@;
put 'KFMubW9kLmlzWmVybygpKXJldHVybiBTLmRpdjt2YXIgeD0wIT09Uy5kaXYubmVnYXRpdmU/Uy5tb2QuaXN1YihnKTpTLm1vZCxfPWcudXNocm4oMSkscD1nLmFuZGxuKDEpLEM9eC5jbXAoXyk7cmV0dXJuIEM8MHx8MT09PXAmJjA9PT1DP1MuZGl2OjAhPT1TLmRpdi5uZWdhdGl2ZT9TLmRp'@;
put 'di5pc3VibigxKTpTLmRpdi5pYWRkbigxKX0say5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIFM9NjcxMDg4NjQlZyx4PTAsXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXg9KFMqeCsoMHx0aGlzLndvcmRzW19dKSklZztyZXR1cm4geH0say5wcm90'@;
put 'b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBTPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgXz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpTO3RoaXMud29yZHNbeF09Xy9nfDAsUz1fJWd9cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90'@;
put 'b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxrLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBTPXRoaXMseD1nLmNsb25lKCk7Uz0wIT09Uy5uZWdhdGl2ZT9TLnVtb2QoZyk6'@;
put 'Uy5jbG9uZSgpO2Zvcih2YXIgXz1uZXcgaygxKSxwPW5ldyBrKDApLEM9bmV3IGsoMCksSz1uZXcgaygxKSxuZT0wO1MuaXNFdmVuKCkmJnguaXNFdmVuKCk7KVMuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciB1ZT14LmNsb25lKCksaGU9Uy5jbG9uZSgpOyFTLmlzWmVybygp'@;
put 'Oyl7Zm9yKHZhciB4ZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmeGU8MjY7Kyt4ZSxPZTw8PTEpO2lmKHhlPjApZm9yKFMuaXVzaHJuKHhlKTt4ZS0tID4wOykoXy5pc09kZCgpfHxwLmlzT2RkKCkpJiYoXy5pYWRkKHVlKSxwLmlzdWIoaGUpKSxfLml1c2hybigxKSxwLml1c2hybigxKTtm'@;
put 'b3IodmFyIEhlPTAsRWU9MTshKHgud29yZHNbMF0mRWUpJiZIZTwyNjsrK0hlLEVlPDw9MSk7aWYoSGU+MClmb3IoeC5pdXNocm4oSGUpO0hlLS0gPjA7KShDLmlzT2RkKCl8fEsuaXNPZGQoKSkmJihDLmlhZGQodWUpLEsuaXN1YihoZSkpLEMuaXVzaHJuKDEpLEsuaXVzaHJuKDEpO1MuY21w'@;
put 'KHgpPj0wPyhTLmlzdWIoeCksXy5pc3ViKEMpLHAuaXN1YihLKSk6KHguaXN1YihTKSxDLmlzdWIoXyksSy5pc3ViKHApKX1yZXR1cm57YTpDLGI6SyxnY2Q6eC5pdXNobG4obmUpfX0say5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJv'@;
put 'KCkpO3ZhciBTPXRoaXMseD1nLmNsb25lKCk7Uz0wIT09Uy5uZWdhdGl2ZT9TLnVtb2QoZyk6Uy5jbG9uZSgpO2Zvcih2YXIgXyxwPW5ldyBrKDEpLEM9bmV3IGsoMCksSz14LmNsb25lKCk7Uy5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLHVlPTE7IShTLndvcmRzWzBd'@;
put 'JnVlKSYmbmU8MjY7KytuZSx1ZTw8PTEpO2lmKG5lPjApZm9yKFMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChLKSxwLml1c2hybigxKTtmb3IodmFyIGhlPTAseGU9MTshKHgud29yZHNbMF0meGUpJiZoZTwyNjsrK2hlLHhlPDw9MSk7aWYoaGU+MClmb3IoeC5pdXNo'@;
put 'cm4oaGUpO2hlLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEspLEMuaXVzaHJuKDEpO1MuY21wKHgpPj0wPyhTLmlzdWIoeCkscC5pc3ViKEMpKTooeC5pc3ViKFMpLEMuaXN1YihwKSl9cmV0dXJuKF89MD09PVMuY21wbigxKT9wOkMpLmNtcG4oMCk8MCYmXy5pYWRkKGcpLF99LGsucHJvdG90'@;
put 'eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFM9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO1MubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBfPTA7Uy5pc0V2ZW4oKSYm'@;
put 'eC5pc0V2ZW4oKTtfKyspUy5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIHA9Uy5jbXAoeCk7aWYocDwwKXt2YXIgQz1TO1M9eCx4PUN9ZWxzZSBpZigwPT09cHx8MD09PXgu'@;
put 'Y21wbigxKSlicmVhaztTLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKF8pfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxrLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LGsucHJv'@;
put 'dG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0say5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30say5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcpO3ZhciBTPWcl'@;
put 'MjYseD0oZy1TKS8yNixfPTE8PFM7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PV8sdGhpcztmb3IodmFyIHA9XyxDPXg7MCE9PXAmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgSz0wfHRoaXMud29yZHNbQ107cD0oSys9cCk+Pj4yNix0'@;
put 'aGlzLndvcmRzW0NdPUsmPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbQ109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxrLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0say5wcm90b3R5cGUuY21w'@;
put 'bj1mdW5jdGlvbihnKXt2YXIgUyx4PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXgpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJngpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpUz0xO2Vsc2V7eCYmKGc9LWcpLEkoZzw9NjcxMDg4NjMsIk51bWJlciBp'@;
put 'cyB0b28gYmlnIik7dmFyIF89MHx0aGlzLndvcmRzWzBdO1M9Xz09PWc/MDpfPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtUzpTfSxrLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9'@;
put 'PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgUz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30say5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxl'@;
put 'bmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFM9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBfPTB8dGhpcy53b3Jkc1t4XSxwPTB8Zy53b3Jkc1t4XTtpZihfIT09cCl7XzxwP1M9LTE6Xz5wJiYoUz0xKTticmVha319cmV0dXJuIFN9LGsucHJvdG90eXBlLmd0bj1mdW5j'@;
put 'dGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0say5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxrLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxrLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LGsucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRo'@;
put 'aXMuY21wbihnKTw9MH0say5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0say5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21w'@;
put 'KGcpfSxrLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LGsucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5'@;
put 'IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxrLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5j'@;
put 'b252ZXJ0RnJvbSh0aGlzKX0say5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LGsucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4'@;
put 'dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxrLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0say5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLnN1Yih0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0say5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKGcp'@;
put 'e3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRo'@;
put 'aXMucmVkLmltdWwodGhpcyxnKX0say5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LGsucHJvdG90eXBlLnJl'@;
put 'ZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5y'@;
put 'ZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0say5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGsucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQubmVnKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGRlPXtrMjU2Om51bGwscDIy'@;
put 'NDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gbGUoZyxTKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IGsoUywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGsoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3Rt'@;
put 'cCgpfWZ1bmN0aW9uIGNlKCl7bGUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7bGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYg'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB5KCl7bGUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBMKCl7bGUuY2FsbCh0aGlzLCIy'@;
put 'NTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIFM9ay5fcHJpbWUoZyk7dGhpcy5tPVMucCx0aGlzLnByaW1lPVN9ZWxzZSBJKGcu'@;
put 'Z3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gaihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5z'@;
put 'aGlmdCUyNiksdGhpcy5yPW5ldyBrKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlz'@;
put 'Lm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWxlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IGsobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxnfSxsZS5wcm90'@;
put 'b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgUyx4PWc7ZG97dGhpcy5zcGxpdCh4LHRoaXMudG1wKSxTPSh4PSh4PXRoaXMuaW11bEsoeCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShTPnRoaXMubik7dmFyIF89Uzx0aGlzLm4/LTE6eC51Y21wKHRoaXMucCk7cmV0'@;
put 'dXJuIDA9PT1fPyh4LndvcmRzWzBdPTAseC5sZW5ndGg9MSk6Xz4wP3guaXN1Yih0aGlzLnApOnZvaWQgMCE9PXguc3RyaXA/eC5zdHJpcCgpOnguX3N0cmlwKCkseH0sbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsUyl7Zy5pdXNocm4odGhpcy5uLDAsUyl9LGxlLnByb3RvdHlwZS5p'@;
put 'bXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LEUoY2UsbGUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLFMpe2Zvcih2YXIgeD00MTk0MzAzLF89TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8XztwKyspUy53b3Jkc1twXT1nLndvcmRzW3BdO2lmKFMubGVu'@;
put 'Z3RoPV8sZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBDPWcud29yZHNbOV07Zm9yKFMud29yZHNbUy5sZW5ndGgrK109QyZ4LHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBLPTB8Zy53b3Jkc1twXTtnLndvcmRzW3AtMTBdPShLJngpPDw0fEM+'@;
put 'Pj4yMixDPUt9Zy53b3Jkc1twLTEwXT1DPj4+PTIyLGcubGVuZ3RoLT0wPT09QyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0yO2Zvcih2YXIgUz0wLHg9'@;
put 'MDt4PGcubGVuZ3RoO3grKyl7dmFyIF89MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKFMrPTk3NypfKSxTPTY0Kl8rKFMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmZy5sZW5n'@;
put 'dGgtLSksZ30sRShHLGxlKSxFKHksbGUpLEUoTCxsZSksTC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgXz0xOSooMHxnLndvcmRzW3hdKStTLHA9NjcxMDg4NjMmXztfPj4+PTI2LGcud29yZHNbeF09cCxTPV99cmV0dXJu'@;
put 'IDAhPT1TJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1TKSxnfSxrLl9wcmltZT1mdW5jdGlvbihnKXtpZihkZVtnXSlyZXR1cm4gZGVbZ107dmFyIFM7aWYoImsyNTYiPT09ZylTPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpUz1uZXcgRztlbHNlIGlmKCJwMTkyIj09PWcpUz1uZXcgeTtlbHNl'@;
put 'e2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtTPW5ldyBMfXJldHVybiBkZVtnXT1TLFN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksSShn'@;
put 'LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLFMpe0koIShnLm5lZ2F0aXZlfFMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVkPT09Uy5yZWQsInJlZCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUubmVnPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVyaWZ5MihnLFMpO3ZhciB4PWcuYWRkKFMpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIo'@;
put 'dGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmlhZGQoUyk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LEgucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnLFMp'@;
put 'e3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLnN1YihTKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVyaWZ5MihnLFMpO3ZhciB4PWcuaXN1YihTKTtyZXR1cm4geC5j'@;
put 'bXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKFMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsUyksdGhp'@;
put 'cy5pbW9kKGcuaW11bChTKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsUyksdGhpcy5pbW9kKGcubXVsKFMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9uZSgpKX0sSC5wcm90b3R5'@;
put 'cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz10aGlzLm0uYW5kbG4oMyk7aWYoSShTJTI9PTEpLDM9PT1TKXt2YXIgeD10aGlzLm0uYWRkKG5ldyBr'@;
put 'KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBfPXRoaXMubS5zdWJuKDEpLHA9MDshXy5pc1plcm8oKSYmMD09PV8uYW5kbG4oMSk7KXArKyxfLml1c2hybigxKTtJKCFfLmlzWmVybygpKTt2YXIgQz1uZXcgaygxKS50b1JlZCh0aGlzKSxLPUMucmVkTmVnKCks'@;
put 'bmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHVlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodWU9bmV3IGsoMip1ZSp1ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHVlLG5lKS5jbXAoSyk7KXVlLnJlZElBZGQoSyk7Zm9yKHZhciBoZT10aGlzLnBvdyh1ZSxfKSx4ZT10aGlzLnBvdyhn'@;
put 'LF8uYWRkbigxKS5pdXNocm4oMSkpLE9lPXRoaXMucG93KGcsXyksSGU9cDswIT09T2UuY21wKEMpOyl7Zm9yKHZhciBFZT1PZSxMZT0wOzAhPT1FZS5jbXAoQyk7TGUrKylFZT1FZS5yZWRTcXIoKTtJKExlPEhlKTt2YXIgTmU9dGhpcy5wb3coaGUsbmV3IGsoMSkuaXVzaGxuKEhlLUxlLTEp'@;
put 'KTt4ZT14ZS5yZWRNdWwoTmUpLGhlPU5lLnJlZFNxcigpLE9lPU9lLnJlZE11bChoZSksSGU9TGV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBTPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1TLm5lZ2F0aXZlPyhTLm5lZ2F0aXZlPTAsdGhpcy5pbW9k'@;
put 'KFMpLnJlZE5lZygpKTp0aGlzLmltb2QoUyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLFMpe2lmKFMuaXNaZXJvKCkpcmV0dXJuIG5ldyBrKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1TLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeD1uZXcgQXJyYXkoMTYpO3hbMF09bmV3IGso'@;
put 'MSkudG9SZWQodGhpcykseFsxXT1nO2Zvcih2YXIgXz0yO188eC5sZW5ndGg7XysrKXhbX109dGhpcy5tdWwoeFtfLTFdLGcpO3ZhciBwPXhbMF0sQz0wLEs9MCxuZT1TLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksXz1TLmxlbmd0aC0xO18+PTA7Xy0tKXtmb3IodmFyIHVl'@;
put 'PVMud29yZHNbX10saGU9bmUtMTtoZT49MDtoZS0tKXt2YXIgeGU9dWU+PmhlJjE7cCE9PXhbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT1DPyhDPDw9MSxDfD14ZSwoND09KytLfHwwPT09XyYmMD09PWhlKSYmKHA9dGhpcy5tdWwocCx4W0NdKSxLPTAsQz0wKSk6Sz0wfW5lPTI2'@;
put 'fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIFM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIFM9PT1nP1MuY2xvbmUoKTpTfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgUz1nLmNsb25lKCk7cmV0dXJuIFMucmVkPW51bGwsU30s'@;
put 'ay5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgaihnKX0sRShqLEgpLGoucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxqLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgUz10aGlzLmlt'@;
put 'b2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFMucmVkPW51bGwsU30sai5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLFMpe2lmKGcuaXNaZXJvKCl8fFMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKFMpLF89eC5tYXNrbih0aGlzLnNo'@;
put 'aWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD14LmlzdWIoXykuaXVzaHJuKHRoaXMuc2hpZnQpLEM9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD9DPXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYoQz1wLmlhZGQodGhpcy5tKSksQy5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLFMpe2lmKGcuaXNaZXJvKCl8fFMuaXNaZXJvKCkpcmV0dXJuIG5ldyBrKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bChTKSxfPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMu'@;
put 'c2hpZnQpLm11bCh0aGlzLm0pLHA9eC5pc3ViKF8pLml1c2hybih0aGlzLnNoaWZ0KSxDPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Qz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKEM9cC5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxqLnByb3RvdHlwZS5pbnZtPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHc9RC5ubWQodyksdGhpcyl9LDM0ODI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDU3MTcpLFU9RCgyMzE4KSxJPUQoOTc4NSksRT1EKDkwNzIp'@;
put 'LGs9RCgxMDI3KTtmdW5jdGlvbiBCKE4pe2suY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPU59UChCLGspLEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTil7dGhpcy5faGFzaC51cGRhdGUoTil9LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9o'@;
put 'YXNoLmRpZ2VzdCgpfSx3LmV4cG9ydHM9ZnVuY3Rpb24oTil7cmV0dXJuIm1kNSI9PT0oTj1OLnRvTG93ZXJDYXNlKCkpP25ldyBVOiJybWQxNjAiPT09Tnx8InJpcGVtZDE2MCI9PT1OP25ldyBJOm5ldyBCKEUoTikpfX0sODAyODoodyxBLEQpPT57dmFyIFA9RCgyMzE4KTt3LmV4cG9ydHM9'@;
put 'ZnVuY3Rpb24oVSl7cmV0dXJuKG5ldyBQKS51cGRhdGUoVSkuZGlnZXN0KCl9fSw4MzU1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg1NzE3KSxVPUQoMTAzMSksST1EKDEwMjcpLEU9RCg5NTA5KS5CdWZmZXIsaz1EKDgwMjgpLEI9RCg5Nzg1KSxOPUQoOTA3MiksVj1FLmFsbG9j'@;
put 'KDEyOCk7ZnVuY3Rpb24gWihXLHope0kuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIHomJih6PUUuZnJvbSh6KSk7dmFyIHE9InNoYTUxMiI9PT1XfHwic2hhMzg0Ij09PVc/MTI4OjY0O3RoaXMuX2FsZz1XLHRoaXMuX2tleT16LHoubGVuZ3RoPnE/ej0oInJtZDE2MCI9'@;
put 'PT1XP25ldyBCOk4oVykpLnVwZGF0ZSh6KS5kaWdlc3QoKTp6Lmxlbmd0aDxxJiYoej1FLmNvbmNhdChbeixWXSxxKSk7Zm9yKHZhciBRPXRoaXMuX2lwYWQ9RS5hbGxvY1Vuc2FmZShxKSx0ZT10aGlzLl9vcGFkPUUuYWxsb2NVbnNhZmUocSksYWU9MDthZTxxO2FlKyspUVthZV09NTReelth'@;
put 'ZV0sdGVbYWVdPTkyXnpbYWVdO3RoaXMuX2hhc2g9InJtZDE2MCI9PT1XP25ldyBCOk4oVyksdGhpcy5faGFzaC51cGRhdGUoUSl9UChaLEkpLFoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5faGFzaC51cGRhdGUoVyl9LFoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigp'@;
put 'e3ZhciBXPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBCOk4odGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShXKS5kaWdlc3QoKX0sdy5leHBvcnRzPWZ1bmN0aW9uKFcseil7cmV0dXJuInJtZDE2MCI9PT0oVz1XLnRvTG93'@;
put 'ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PVc/bmV3IFooInJtZDE2MCIseik6Im1kNSI9PT1XP25ldyBVKGsseik6bmV3IFooVyx6KX19LDEwMzE6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDU3MTcpLFU9RCg5NTA5KS5CdWZmZXIsST1EKDEwMjcpLEU9VS5hbGxvYygxMjgpLGs9'@;
put 'NjQ7ZnVuY3Rpb24gQihOLFYpe0kuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIFYmJihWPVUuZnJvbShWKSksdGhpcy5fYWxnPU4sdGhpcy5fa2V5PVYsVi5sZW5ndGg+az9WPU4oVik6Vi5sZW5ndGg8ayYmKFY9VS5jb25jYXQoW1YsRV0saykpO2Zvcih2YXIgWj10aGlz'@;
put 'Ll9pcGFkPVUuYWxsb2NVbnNhZmUoayksVz10aGlzLl9vcGFkPVUuYWxsb2NVbnNhZmUoayksej0wO3o8azt6KyspWlt6XT01NF5WW3pdLFdbel09OTJeVlt6XTt0aGlzLl9oYXNoPVtaXX1QKEIsSSksQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9oYXNoLnB1c2goTil9'@;
put 'LEIucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBOPXRoaXMuX2FsZyhVLmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0dXJuIHRoaXMuX2FsZyhVLmNvbmNhdChbdGhpcy5fb3BhZCxOXSkpfSx3LmV4cG9ydHM9Qn0sNTgzNToodyxBLEQpPT57InVzZSBzdHJpY3QiO0EucmFuZG9tQnl0'@;
put 'ZXM9QS5ybmc9QS5wc2V1ZG9SYW5kb21CeXRlcz1BLnBybmc9RCgxNzk4KSxBLmNyZWF0ZUhhc2g9QS5IYXNoPUQoMzQ4MiksQS5jcmVhdGVIbWFjPUEuSG1hYz1EKDgzNTUpO3ZhciBQPUQoNjA0MiksVT1PYmplY3Qua2V5cyhQKSxJPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4'@;
put 'NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdChVKTtBLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBJfTt2YXIgRT1EKDU2MzIpO0EucGJrZGYyPUUucGJrZGYyLEEucGJrZGYyU3luYz1FLnBia2RmMlN5bmM7dmFyIGs9RCgzNjE0KTtBLkNpcGhlcj1rLkNpcGhlcixBLmNy'@;
put 'ZWF0ZUNpcGhlcj1rLmNyZWF0ZUNpcGhlcixBLkNpcGhlcml2PWsuQ2lwaGVyaXYsQS5jcmVhdGVDaXBoZXJpdj1rLmNyZWF0ZUNpcGhlcml2LEEuRGVjaXBoZXI9ay5EZWNpcGhlcixBLmNyZWF0ZURlY2lwaGVyPWsuY3JlYXRlRGVjaXBoZXIsQS5EZWNpcGhlcml2PWsuRGVjaXBoZXJpdixB'@;
put 'LmNyZWF0ZURlY2lwaGVyaXY9ay5jcmVhdGVEZWNpcGhlcml2LEEuZ2V0Q2lwaGVycz1rLmdldENpcGhlcnMsQS5saXN0Q2lwaGVycz1rLmxpc3RDaXBoZXJzO3ZhciBCPUQoMjYwNyk7QS5EaWZmaWVIZWxsbWFuR3JvdXA9Qi5EaWZmaWVIZWxsbWFuR3JvdXAsQS5jcmVhdGVEaWZmaWVIZWxs'@;
put 'bWFuR3JvdXA9Qi5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsQS5nZXREaWZmaWVIZWxsbWFuPUIuZ2V0RGlmZmllSGVsbG1hbixBLmNyZWF0ZURpZmZpZUhlbGxtYW49Qi5jcmVhdGVEaWZmaWVIZWxsbWFuLEEuRGlmZmllSGVsbG1hbj1CLkRpZmZpZUhlbGxtYW47dmFyIE49RCg0NzQzKTtB'@;
put 'LmNyZWF0ZVNpZ249Ti5jcmVhdGVTaWduLEEuU2lnbj1OLlNpZ24sQS5jcmVhdGVWZXJpZnk9Ti5jcmVhdGVWZXJpZnksQS5WZXJpZnk9Ti5WZXJpZnksQS5jcmVhdGVFQ0RIPUQoNjM5Myk7dmFyIFY9RCg3OTAwKTtBLnB1YmxpY0VuY3J5cHQ9Vi5wdWJsaWNFbmNyeXB0LEEucHJpdmF0ZUVu'@;
put 'Y3J5cHQ9Vi5wcml2YXRlRW5jcnlwdCxBLnB1YmxpY0RlY3J5cHQ9Vi5wdWJsaWNEZWNyeXB0LEEucHJpdmF0ZURlY3J5cHQ9Vi5wcml2YXRlRGVjcnlwdDt2YXIgWj1EKDc5NjMpO0EucmFuZG9tRmlsbD1aLnJhbmRvbUZpbGwsQS5yYW5kb21GaWxsU3luYz1aLnJhbmRvbUZpbGxTeW5jLEEu'@;
put 'Y3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWyJzb3JyeSwgY3JlYXRlQ3JlZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldCIsIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzIiwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0'@;
put 'by1icm93c2VyaWZ5Il0uam9pbigiXG4iKSl9LEEuY29uc3RhbnRzPXtESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FOjIsREhfQ0hFQ0tfUF9OT1RfUFJJTUU6MSxESF9VTkFCTEVfVE9fQ0hFQ0tfR0VORVJBVE9SOjQsREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUjo4LE5QTl9FTkFCTEVEOjEs'@;
put 'QUxQTl9FTkFCTEVEOjEsUlNBX1BLQ1MxX1BBRERJTkc6MSxSU0FfU1NMVjIzX1BBRERJTkc6MixSU0FfTk9fUEFERElORzozLFJTQV9QS0NTMV9PQUVQX1BBRERJTkc6NCxSU0FfWDkzMV9QQURESU5HOjUsUlNBX1BLQ1MxX1BTU19QQURESU5HOjYsUE9JTlRfQ09OVkVSU0lPTl9DT01QUkVT'@;
put 'U0VEOjIsUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQ6NCxQT0lOVF9DT05WRVJTSU9OX0hZQlJJRDo2fX0sNTA1NjoodyxBLEQpPT57dmFyIFA9RCg4NzY0KS5CdWZmZXI7Y29uc3R7VHJhbnNmb3JtOlV9PUQoMjgzMCksST1QLmZyb20oWzIzOSwxODcsMTkxXSk7Y2xhc3MgRSBleHRl'@;
put 'bmRzIFV7Y29uc3RydWN0b3IoY2U9e30pe3N1cGVyKHt3cml0YWJsZU9iamVjdE1vZGU6ITAsLi4uY2V9KTtjb25zdCBHPXt9O2xldCB5O2ZvcihsZXQgTCBpbiBjZSlHW1YoTCldPWNlW0xdO2lmKHk9dGhpcy5ub3JtYWxpemUoRykpdGhyb3cgeTtzd2l0Y2goRy5yZWNvcmRfZGVsaW1pdGVy'@;
put 'KXtjYXNlImF1dG8iOkcucmVjb3JkX2RlbGltaXRlcj1udWxsO2JyZWFrO2Nhc2UidW5peCI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcbiI7YnJlYWs7Y2FzZSJtYWMiOkcucmVjb3JkX2RlbGltaXRlcj0iXHIiO2JyZWFrO2Nhc2Uid2luZG93cyI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcclxuIjti'@;
put 'cmVhaztjYXNlImFzY2lpIjpHLnJlY29yZF9kZWxpbWl0ZXI9Ilx4MWUiO2JyZWFrO2Nhc2UidW5pY29kZSI6Ry5yZWNvcmRfZGVsaW1pdGVyPSJcdTIwMjgifXRoaXMub3B0aW9ucz1HLHRoaXMuc3RhdGU9e3N0b3A6ITF9LHRoaXMuaW5mbz17cmVjb3JkczowfX1ub3JtYWxpemUoY2Upe2lm'@;
put 'KG51bGw9PWNlLmJvbXx8ITE9PT1jZS5ib20pY2UuYm9tPSExO2Vsc2UgaWYoITAhPT1jZS5ib20pcmV0dXJuIG5ldyBCKCJDU1ZfT1BUSU9OX0JPT0xFQU5fSU5WQUxJRF9UWVBFIixbIm9wdGlvbiBgYm9tYCBpcyBvcHRpb25hbCBhbmQgbXVzdCBiZSBhIGJvb2xlYW4gdmFsdWUsIixgZ290'@;
put 'ICR7SlNPTi5zdHJpbmdpZnkoY2UuYm9tKX1gXSk7aWYobnVsbD09Y2UuZGVsaW1pdGVyKWNlLmRlbGltaXRlcj0iLCI7ZWxzZSBpZihQLmlzQnVmZmVyKGNlLmRlbGltaXRlcikpY2UuZGVsaW1pdGVyPWNlLmRlbGltaXRlci50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBj'@;
put 'ZS5kZWxpbWl0ZXIpcmV0dXJuIG5ldyBCKCJDU1ZfT1BUSU9OX0RFTElNSVRFUl9JTlZBTElEX1RZUEUiLFsib3B0aW9uIGBkZWxpbWl0ZXJgIG11c3QgYmUgYSBidWZmZXIgb3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UuZGVsaW1pdGVyKX1gXSk7aWYobnVsbD09Y2Uu'@;
put 'cXVvdGUpY2UucXVvdGU9JyInO2Vsc2UgaWYoITA9PT1jZS5xdW90ZSljZS5xdW90ZT0nIic7ZWxzZSBpZighMT09PWNlLnF1b3RlKWNlLnF1b3RlPSIiO2Vsc2UgaWYoUC5pc0J1ZmZlcihjZS5xdW90ZSkpY2UucXVvdGU9Y2UucXVvdGUudG9TdHJpbmcoKTtlbHNlIGlmKCJzdHJpbmciIT10'@;
put 'eXBlb2YgY2UucXVvdGUpcmV0dXJuIG5ldyBCKCJDU1ZfT1BUSU9OX1FVT1RFX0lOVkFMSURfVFlQRSIsWyJvcHRpb24gYHF1b3RlYCBtdXN0IGJlIGEgYm9vbGVhbiwgYSBidWZmZXIgb3IgYSBzdHJpbmcsIixgZ290ICR7SlNPTi5zdHJpbmdpZnkoY2UucXVvdGUpfWBdKTtpZihudWxsIT1j'@;
put 'ZS5xdW90ZWR8fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLnF1b3RlZF9lbXB0eXx8KGNlLnF1b3RlZF9lbXB0eT12b2lkIDApLG51bGw9PWNlLnF1b3RlZF9tYXRjaHx8ITE9PT1jZS5xdW90ZWRfbWF0Y2g/Y2UucXVvdGVkX21hdGNoPW51bGw6QXJyYXkuaXNBcnJheShjZS5xdW90ZWRfbWF0'@;
put 'Y2gpfHwoY2UucXVvdGVkX21hdGNoPVtjZS5xdW90ZWRfbWF0Y2hdKSxjZS5xdW90ZWRfbWF0Y2gpZm9yKGxldCBHIG9mIGNlLnF1b3RlZF9tYXRjaCl7Y29uc3QgeT1HIGluc3RhbmNlb2YgUmVnRXhwO2lmKCJzdHJpbmciIT10eXBlb2YgRyYmIXkpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9w'@;
put 'dGlvbjogcXVvdGVkX21hdGNoIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoRyl9YCl9aWYobnVsbCE9Y2UucXVvdGVkX3N0cmluZ3x8KGNlLnF1b3RlZF9zdHJpbmc9ITEpLG51bGwhPWNlLmVvZnx8KGNlLmVvZj0hMCksbnVsbD09Y2UuZXNjYXBl'@;
put 'KWNlLmVzY2FwZT0nIic7ZWxzZSBpZihQLmlzQnVmZmVyKGNlLmVzY2FwZSkpY2UuZXNjYXBlPWNlLmVzY2FwZS50b1N0cmluZygpO2Vsc2UgaWYoInN0cmluZyIhPXR5cGVvZiBjZS5lc2NhcGUpcmV0dXJuIEVycm9yKGBJbnZhbGlkIE9wdGlvbjogZXNjYXBlIG11c3QgYmUgYSBidWZmZXIg'@;
put 'b3IgYSBzdHJpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGNlLmVzY2FwZSl9YCk7aWYoY2UuZXNjYXBlLmxlbmd0aD4xKXJldHVybiBFcnJvcihgSW52YWxpZCBPcHRpb246IGVzY2FwZSBtdXN0IGJlIG9uZSBjaGFyYWN0ZXIsIGdvdCAke2NlLmVzY2FwZS5sZW5ndGh9IGNoYXJhY3RlcnNg'@;
put 'KTtpZihudWxsIT1jZS5oZWFkZXJ8fChjZS5oZWFkZXI9ITEpLGNlLmNvbHVtbnM9dGhpcy5ub3JtYWxpemVfY29sdW1ucyhjZS5jb2x1bW5zKSxudWxsIT1jZS5xdW90ZWR8fChjZS5xdW90ZWQ9ITEpLG51bGwhPWNlLmNhc3R8fChjZS5jYXN0PXt9KSxudWxsIT1jZS5jYXN0LmJpZ2ludHx8'@;
put 'KGNlLmNhc3QuYmlnaW50PUc9PiIiK0cpLG51bGwhPWNlLmNhc3QuYm9vbGVhbnx8KGNlLmNhc3QuYm9vbGVhbj1HPT5HPyIxIjoiIiksbnVsbCE9Y2UuY2FzdC5kYXRlfHwoY2UuY2FzdC5kYXRlPUc9PiIiK0cuZ2V0VGltZSgpKSxudWxsIT1jZS5jYXN0Lm51bWJlcnx8KGNlLmNhc3QubnVt'@;
put 'YmVyPUc9PiIiK0cpLG51bGwhPWNlLmNhc3Qub2JqZWN0fHwoY2UuY2FzdC5vYmplY3Q9Rz0+SlNPTi5zdHJpbmdpZnkoRykpLG51bGwhPWNlLmNhc3Quc3RyaW5nfHwoY2UuY2FzdC5zdHJpbmc9ZnVuY3Rpb24oRyl7cmV0dXJuIEd9KSxudWxsPT1jZS5yZWNvcmRfZGVsaW1pdGVyKWNlLnJl'@;
put 'Y29yZF9kZWxpbWl0ZXI9IlxuIjtlbHNlIGlmKFAuaXNCdWZmZXIoY2UucmVjb3JkX2RlbGltaXRlcikpY2UucmVjb3JkX2RlbGltaXRlcj1jZS5yZWNvcmRfZGVsaW1pdGVyLnRvU3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGNlLnJlY29yZF9kZWxpbWl0ZXIpcmV0dXJuIEVy'@;
put 'cm9yKGBJbnZhbGlkIE9wdGlvbjogcmVjb3JkX2RlbGltaXRlciBtdXN0IGJlIGEgYnVmZmVyIG9yIGEgc3RyaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZS5yZWNvcmRfZGVsaW1pdGVyKX1gKX1fdHJhbnNmb3JtKGNlLEcseSl7aWYoITA9PT10aGlzLnN0YXRlLnN0b3ApcmV0dXJuO2lm'@;
put 'KCFBcnJheS5pc0FycmF5KGNlKSYmIm9iamVjdCIhPXR5cGVvZiBjZSlyZXR1cm4gdGhpcy5zdGF0ZS5zdG9wPSEwLHkoRXJyb3IoYEludmFsaWQgUmVjb3JkOiBleHBlY3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0LCBnb3QgJHtKU09OLnN0cmluZ2lmeShjZSl9YCkpO2lmKDA9PT10aGlzLmlu'@;
put 'Zm8ucmVjb3JkcylpZihBcnJheS5pc0FycmF5KGNlKSl7aWYoITA9PT10aGlzLm9wdGlvbnMuaGVhZGVyJiYhdGhpcy5vcHRpb25zLmNvbHVtbnMpcmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCx5KEVycm9yKCJVbmRpc2NvdmVyYWJsZSBDb2x1bW5zOiBoZWFkZXIgb3B0aW9uIHJlcXVpcmVz'@;
put 'IGNvbHVtbiBvcHRpb24gb3Igb2JqZWN0IHJlY29yZHMiKSl9ZWxzZSBudWxsIT10aGlzLm9wdGlvbnMuY29sdW1uc3x8KHRoaXMub3B0aW9ucy5jb2x1bW5zPXRoaXMubm9ybWFsaXplX2NvbHVtbnMoT2JqZWN0LmtleXMoY2UpKSk7MD09PXRoaXMuaW5mby5yZWNvcmRzJiYodGhpcy5ib20o'@;
put 'KSx0aGlzLmhlYWRlcnMoKSk7dHJ5e3RoaXMuZW1pdCgicmVjb3JkIixjZSx0aGlzLmluZm8ucmVjb3Jkcyl9Y2F0Y2goSCl7cmV0dXJuIHRoaXMuc3RhdGUuc3RvcD0hMCx0aGlzLmVtaXQoImVycm9yIixIKX1sZXQgTDtpZih0aGlzLm9wdGlvbnMuZW9mKXtpZihMPXRoaXMuc3RyaW5naWZ5'@;
put 'KGNlKSx2b2lkIDA9PT1MKXJldHVybjtMKz10aGlzLm9wdGlvbnMucmVjb3JkX2RlbGltaXRlcn1lbHNle2lmKEw9dGhpcy5zdHJpbmdpZnkoY2UpLHZvaWQgMD09PUwpcmV0dXJuOyh0aGlzLm9wdGlvbnMuaGVhZGVyfHx0aGlzLmluZm8ucmVjb3JkcykmJihMPXRoaXMub3B0aW9ucy5yZWNv'@;
put 'cmRfZGVsaW1pdGVyK0wpfXRoaXMuaW5mby5yZWNvcmRzKyssdGhpcy5wdXNoKEwpLHkoKX1fZmx1c2goY2UpezA9PT10aGlzLmluZm8ucmVjb3JkcyYmKHRoaXMuYm9tKCksdGhpcy5oZWFkZXJzKCkpLGNlKCl9c3RyaW5naWZ5KGNlLEc9ITEpe2lmKCJvYmplY3QiIT10eXBlb2YgY2UpcmV0'@;
put 'dXJuIGNlO2NvbnN0e2NvbHVtbnM6eX09dGhpcy5vcHRpb25zLEg9W107aWYoQXJyYXkuaXNBcnJheShjZSkpe3kmJmNlLnNwbGljZSh5Lmxlbmd0aCk7Zm9yKGxldCBnPTA7ZzxjZS5sZW5ndGg7ZysrKXtjb25zdCBTPWNlW2ddLFt4LF9dPXRoaXMuX19jYXN0KFMse2luZGV4OmcsY29sdW1u'@;
put 'OmcscmVjb3Jkczp0aGlzLmluZm8ucmVjb3JkcyxoZWFkZXI6R30pO2lmKHgpcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIseCk7SFtnXT1bXyxTXX19ZWxzZSBpZih5KWZvcihsZXQgZz0wO2c8eS5sZW5ndGg7ZysrKXtjb25zdCBTPWRlKGNlLHlbZ10ua2V5KSxbeCxfXT10aGlzLl9f'@;
put 'Y2FzdChTLHtpbmRleDpnLGNvbHVtbjp5W2ddLmtleSxyZWNvcmRzOnRoaXMuaW5mby5yZWNvcmRzLGhlYWRlcjpHfSk7aWYoeClyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIix4KTtIW2ddPVtfLFNdfWVsc2UgZm9yKGxldCBnIG9mIGNlKXtjb25zdCBTPWNlW2ddLFt4LF9dPXRoaXMu'@;
put 'X19jYXN0KFMse2luZGV4OmksY29sdW1uOnlbaV0ua2V5LHJlY29yZHM6dGhpcy5pbmZvLnJlY29yZHMsaGVhZGVyOkd9KTtpZih4KXJldHVybiB2b2lkIHRoaXMuZW1pdCgiZXJyb3IiLHgpO0gucHVzaChbXyxTXSl9bGV0IGo9IiI7Zm9yKGxldCBnPTA7ZzxILmxlbmd0aDtnKyspe2xldCBT'@;
put 'LHgsW18scF09SFtnXTtpZigic3RyaW5nIj09dHlwZW9mIF8pUz10aGlzLm9wdGlvbnM7ZWxzZSBpZihOKF8pKXtpZihTPV8sXz1TLnZhbHVlLGRlbGV0ZSBTLnZhbHVlLCJzdHJpbmciIT10eXBlb2YgXyYmbnVsbCE9XylyZXR1cm4gdm9pZCB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgSW52'@;
put 'YWxpZCBDYXN0aW5nIFZhbHVlOiByZXR1cm5lZCB2YWx1ZSBtdXN0IHJldHVybiBhIHN0cmluZywgbnVsbCBvciB1bmRlZmluZWQsIGdvdCAke0pTT04uc3RyaW5naWZ5KF8pfWApKTtpZihTPXsuLi50aGlzLm9wdGlvbnMsLi4uU30seD10aGlzLm5vcm1hbGl6ZShTKSlyZXR1cm4gdm9pZCB0'@;
put 'aGlzLmVtaXQoImVycm9yIix4KX1lbHNle2lmKG51bGwhPV8pcmV0dXJuIHZvaWQgdGhpcy5lbWl0KCJlcnJvciIsRXJyb3IoYEludmFsaWQgQ2FzdGluZyBWYWx1ZTogcmV0dXJuZWQgdmFsdWUgbXVzdCByZXR1cm4gYSBzdHJpbmcsIGFuIG9iamVjdCwgbnVsbCBvciB1bmRlZmluZWQsIGdv'@;
put 'dCAke0pTT04uc3RyaW5naWZ5KF8pfWApKTtTPXRoaXMub3B0aW9uc31jb25zdHtkZWxpbWl0ZXI6Qyxlc2NhcGU6SyxxdW90ZTpuZSxxdW90ZWQ6dWUscXVvdGVkX2VtcHR5OmhlLHF1b3RlZF9zdHJpbmc6eGUscXVvdGVkX21hdGNoOk9lLHJlY29yZF9kZWxpbWl0ZXI6SGV9PVM7aWYoXyl7'@;
put 'aWYoInN0cmluZyIhPXR5cGVvZiBfKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixFcnJvcihgRm9ybWF0dGVyIG11c3QgcmV0dXJuIGEgc3RyaW5nLCBudWxsIG9yIHVuZGVmaW5lZCwgZ290ICR7SlNPTi5zdHJpbmdpZnkoXyl9YCkpLG51bGw7Y29uc3QgRWU9Qy5sZW5ndGgmJl8uaW5kZXhP'@;
put 'ZihDKT49MCxMZT0iIiE9PW5lJiZfLmluZGV4T2YobmUpPj0wLE5lPV8uaW5kZXhPZihLKT49MCYmSyE9PW5lLEtlPV8uaW5kZXhPZihIZSk+PTAsVWU9eGUmJiJzdHJpbmciPT10eXBlb2YgcDtsZXQgWGU9T2UmJk9lLmZpbHRlcihGZT0+InN0cmluZyI9PXR5cGVvZiBGZT8tMSE9PV8uaW5k'@;
put 'ZXhPZihGZSk6RmUudGVzdChfKSk7WGU9WGUmJlhlLmxlbmd0aD4wO2NvbnN0IGF0PSEwPT09TGV8fEVlfHxLZXx8dWV8fFVlfHxYZTtpZighMD09PWF0JiYhMD09PU5lKXtjb25zdCBGZT0iXFwiPT09Sz9uZXcgUmVnRXhwKEsrSywiZyIpOm5ldyBSZWdFeHAoSywiZyIpO189Xy5yZXBsYWNl'@;
put 'KEZlLEsrSyl9aWYoITA9PT1MZSl7Y29uc3QgRmU9bmV3IFJlZ0V4cChuZSwiZyIpO189Xy5yZXBsYWNlKEZlLEsrbmUpfSEwPT09YXQmJihfPW5lK18rbmUpLGorPV99ZWxzZSghMD09PWhlfHwiIj09PXAmJiEwPT09eGUmJiExIT09aGUpJiYoais9bmUrbmUpO2chPT1ILmxlbmd0aC0xJiYo'@;
put 'ais9Qyl9cmV0dXJuIGp9Ym9tKCl7ITA9PT10aGlzLm9wdGlvbnMuYm9tJiZ0aGlzLnB1c2goSSl9aGVhZGVycygpe2lmKCExPT09dGhpcy5vcHRpb25zLmhlYWRlcnx8dm9pZCAwPT09dGhpcy5vcHRpb25zLmNvbHVtbnMpcmV0dXJuO2xldCBjZT10aGlzLm9wdGlvbnMuY29sdW1ucy5tYXAo'@;
put 'Rz0+Ry5oZWFkZXIpO2NlPXRoaXMub3B0aW9ucy5lb2Y/dGhpcy5zdHJpbmdpZnkoY2UsITApK3RoaXMub3B0aW9ucy5yZWNvcmRfZGVsaW1pdGVyOnRoaXMuc3RyaW5naWZ5KGNlKSx0aGlzLnB1c2goY2UpfV9fY2FzdChjZSxHKXtjb25zdCB5PXR5cGVvZiBjZTt0cnl7cmV0dXJuInN0cmlu'@;
put 'ZyI9PT15P1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Quc3RyaW5nKGNlLEcpXToiYmlnaW50Ij09PXk/W3ZvaWQgMCx0aGlzLm9wdGlvbnMuY2FzdC5iaWdpbnQoY2UsRyldOiJudW1iZXIiPT09eT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0Lm51bWJlcihjZSxHKV06ImJvb2xlYW4iPT09'@;
put 'eT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmJvb2xlYW4oY2UsRyldOmNlIGluc3RhbmNlb2YgRGF0ZT9bdm9pZCAwLHRoaXMub3B0aW9ucy5jYXN0LmRhdGUoY2UsRyldOiJvYmplY3QiPT09eSYmbnVsbCE9PWNlP1t2b2lkIDAsdGhpcy5vcHRpb25zLmNhc3Qub2JqZWN0KGNlLEcpXTpb'@;
put 'dm9pZCAwLGNlLGNlXX1jYXRjaChMKXtyZXR1cm5bTF19fW5vcm1hbGl6ZV9jb2x1bW5zKGNlKXtpZihudWxsIT1jZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBjZSl0aHJvdyBFcnJvcignSW52YWxpZCBvcHRpb24gImNvbHVtbnMiOiBleHBlY3QgYW4gYXJyYXkgb3IgYW4gb2JqZWN0Jyk7aWYo'@;
put 'QXJyYXkuaXNBcnJheShjZSkpe2NvbnN0IEc9W107Zm9yKGxldCB5IG9mIGNlKWlmKCJzdHJpbmciPT10eXBlb2YgeSlHLnB1c2goe2tleTp5LGhlYWRlcjp5fSk7ZWxzZXtpZigib2JqZWN0IiE9dHlwZW9mIHl8fHZvaWQgMD09PXl8fEFycmF5LmlzQXJyYXkoeSkpdGhyb3cgRXJyb3IoIklu'@;
put 'dmFsaWQgY29sdW1uIGRlZmluaXRpb246IGV4cGVjdCBhIHN0cmluZyBvciBhbiBvYmplY3QiKTtpZigheS5rZXkpdGhyb3cgRXJyb3IoJ0ludmFsaWQgY29sdW1uIGRlZmluaXRpb246IHByb3BlcnR5ICJrZXkiIGlzIHJlcXVpcmVkJyk7dm9pZCAwPT09eS5oZWFkZXImJih5LmhlYWRlcj15'@;
put 'LmtleSksRy5wdXNoKHkpfWNlPUd9ZWxzZXtjb25zdCBHPVtdO2ZvcihsZXQgeSBpbiBjZSlHLnB1c2goe2tleTp5LGhlYWRlcjpjZVt5XX0pO2NlPUd9cmV0dXJuIGNlfX19Y29uc3Qgaz1mdW5jdGlvbigpe2xldCBsZSxjZSxHO2ZvcihsZXQgTCBpbiBhcmd1bWVudHMpe2NvbnN0IEg9YXJn'@;
put 'dW1lbnRzW0xdLGo9dHlwZW9mIEg7aWYodm9pZCAwPT09bGUmJkFycmF5LmlzQXJyYXkoSCkpbGU9SDtlbHNlIGlmKHZvaWQgMD09PWNlJiZOKEgpKWNlPUg7ZWxzZXtpZih2b2lkIDAhPT1HfHwiZnVuY3Rpb24iIT09ail0aHJvdyBuZXcgQigiQ1NWX0lOVkFMSURfQVJHVU1FTlQiLFsiSW52'@;
put 'YWxpZCBhcmd1bWVudDoiLGBnb3QgJHtKU09OLnN0cmluZ2lmeShIKX0gYXQgaW5kZXggJHtMfWBdKTtHPUh9fWNvbnN0IHk9bmV3IEUoY2UpO2lmKEcpe2NvbnN0IEw9W107eS5vbigicmVhZGFibGUiLGZ1bmN0aW9uKCl7bGV0IEg7Zm9yKDtudWxsIT09KEg9dGhpcy5yZWFkKCkpOylMLnB1'@;
put 'c2goSCl9KSx5Lm9uKCJlcnJvciIsZnVuY3Rpb24oSCl7RyhIKX0pLHkub24oImVuZCIsZnVuY3Rpb24oKXtHKHZvaWQgMCxMLmpvaW4oIiIpKX0pfWlmKHZvaWQgMCE9PWxlKWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBzZXRJbW1lZGlhdGUpc2V0SW1tZWRpYXRlKGZ1bmN0aW9uKCl7Zm9yKGxl'@;
put 'dCBMIG9mIGxlKXkud3JpdGUoTCk7eS5lbmQoKX0pO2Vsc2V7Zm9yKGxldCBMIG9mIGxlKXkud3JpdGUoTCk7eS5lbmQoKX1yZXR1cm4geX07Y2xhc3MgQiBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGNlLEcsLi4ueSl7QXJyYXkuaXNBcnJheShHKSYmKEc9Ry5qb2luKCIgIikpLHN1cGVy'@;
put 'KEcpLHZvaWQgMCE9PUVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLEIpLHRoaXMuY29kZT1jZTtmb3IoY29uc3QgTCBvZiB5KWZvcihjb25zdCBIIGluIEwpe2NvbnN0IGo9TFtIXTt0aGlzW0hdPVAuaXNCdWZmZXIoaik/ai50b1N0cmluZygp'@;
put 'Om51bGw9PWo/ajpKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGopKX19fWsuU3RyaW5naWZpZXI9RSxrLkNzdkVycm9yPUIsdy5leHBvcnRzPWs7Y29uc3QgTj1mdW5jdGlvbihsZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBsZSYmbnVsbCE9PWxlJiYhQXJyYXkuaXNBcnJheShsZSl9LFY9'@;
put 'ZnVuY3Rpb24obGUpe3JldHVybiBsZS5yZXBsYWNlKC8oW0EtWl0pL2csZnVuY3Rpb24oY2UsRyl7cmV0dXJuIl8iK0cudG9Mb3dlckNhc2UoKX0pfSxXPS9cXChcXCk/L2csej1SZWdFeHAoIlteLltcXF1dK3xcXFsoPzooW15cIiddW15bXSopfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18'@;
put 'XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JCkpIiwiZyIpLHE9L1wufFxbKD86W15bXF1dKnwoWyInXSkoPzooPyFcMSlbXlxcXXxcXC4pKj9cMSlcXS8sUT0vXlx3KiQvLHRlPWZ1bmN0aW9uKGxlKXtjb25zdCBjZT10eXBlb2YgbGU7cmV0dXJuInN5'@;
put 'bWJvbCI9PT1jZXx8Im9iamVjdCI9PT1jZSYmbGUmJiJbb2JqZWN0IFN5bWJvbF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGxlKX0sc2U9ZnVuY3Rpb24obGUpe2lmKCJzdHJpbmciPT10eXBlb2YgbGV8fHRlKGxlKSlyZXR1cm4gbGU7Y29uc3QgY2U9YCR7bGV9YDtyZXR1'@;
put 'cm4iMCI9PWNlJiYxL2xlPT0tSU5GSU5JVFk/Ii0wIjpjZX0sZGU9ZnVuY3Rpb24obGUsY2Upe2xldCBHPTA7Y29uc3QgeT0oY2U9ZnVuY3Rpb24obGUsY2Upe3JldHVybiBBcnJheS5pc0FycmF5KGxlKT9sZTpmdW5jdGlvbihHLHkpe2lmKEFycmF5LmlzQXJyYXkoRykpcmV0dXJuITE7Y29u'@;
put 'c3QgTD10eXBlb2YgRztyZXR1cm4hKCJudW1iZXIiIT09TCYmInN5bWJvbCIhPT1MJiYiYm9vbGVhbiIhPT1MJiZHJiYhdGUoRykpfHxRLnRlc3QoRyl8fCFxLnRlc3QoRyl8fG51bGwhPXkmJkcgaW4gT2JqZWN0KHkpfShsZSxjZSk/W2xlXTpmdW5jdGlvbihHKXtjb25zdCB5PVtdO3JldHVy'@;
put 'biA0Nj09PUcuY2hhckNvZGVBdCgwKSYmeS5wdXNoKCIiKSxHLnJlcGxhY2UoeixmdW5jdGlvbihMLEgsaixnKXtsZXQgUz1MO2o/Uz1nLnJlcGxhY2UoVywiJDEiKTpIJiYoUz1ILnRyaW0oKSkseS5wdXNoKFMpfSkseX0obGUpfShjZSxsZSkpLmxlbmd0aDtmb3IoO251bGwhPWxlJiZHPHk7'@;
put 'KWxlPWxlW3NlKGNlW0crK10pXTtyZXR1cm4gRyYmRz09PXk/bGU6dm9pZCAwfX0sNzU2NToodyxBLEQpPT57dmFyIFA9RCg4NzY0KS5CdWZmZXI7Y29uc3QgVT1EKDUwNTYpLHtTdHJpbmdEZWNvZGVyOkl9PUQoMjU1Myk7dy5leHBvcnRzPWZ1bmN0aW9uKEUsaz17fSl7Y29uc3QgQj1bXTtm'@;
put 'dW5jdGlvbiBOKFope1omJkIucHVzaChaLnRvU3RyaW5nKCkpfVAuaXNCdWZmZXIoRSkmJihFPShuZXcgSSkud3JpdGUoRSkpO2xldCBWPW5ldyBVLlN0cmluZ2lmaWVyKGspO1Yub24oImRhdGEiLE4pO2ZvcihsZXQgWiBvZiBFKVYud3JpdGUoWik7cmV0dXJuIFYuZW5kKCksVi5vZmYoImRh'@;
put 'dGEiLE4pLEIuam9pbigiIil9fSw0Mjg5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgyMjE1KSxVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJmb28iKSxJPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1BcnJheS5wcm90b3R5'@;
put 'cGUuY29uY2F0LGs9T2JqZWN0LmRlZmluZVByb3BlcnR5LEI9RCgxMDQ0KSgpLE49ayYmQixWPWZ1bmN0aW9uKFcseixxLFEpe2lmKHogaW4gVylpZighMD09PVEpe2lmKFdbel09PT1xKXJldHVybn1lbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZih0ZT1RKXx8IltvYmplY3QgRnVuY3Rpb25d'@;
put 'IiE9PUkuY2FsbCh0ZSl8fCFRKCkpcmV0dXJuO3ZhciB0ZTtOP2soVyx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpxLHdyaXRhYmxlOiEwfSk6V1t6XT1xfSxaPWZ1bmN0aW9uKFcseil7dmFyIHE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxRPVAo'@;
put 'eik7VSYmKFE9RS5jYWxsKFEsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh6KSkpO2Zvcih2YXIgdGU9MDt0ZTxRLmxlbmd0aDt0ZSs9MSlWKFcsUVt0ZV0seltRW3RlXV0scVtRW3RlXV0pfTtaLnN1cHBvcnRzRGVzY3JpcHRvcnM9ISFOLHcuZXhwb3J0cz1afSw1MjUxOih3LEEsRCk9'@;
put 'PnsidXNlIHN0cmljdCI7QS51dGlscz1EKDEyNzgpLEEuQ2lwaGVyPUQoNTc1NiksQS5ERVM9RCgzMjcpLEEuQ0JDPUQoOTA1MSksQS5FREU9RCg2NTEpfSw5MDUxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg5NzQ2KSxVPUQoNTcxNyksST17fTtmdW5jdGlvbiBFKGspe1AuZXF1'@;
put 'YWwoay5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIEI9MDtCPHRoaXMuaXYubGVuZ3RoO0IrKyl0aGlzLml2W0JdPWtbQl19QS5pbnN0YW50aWF0ZT1mdW5jdGlvbihrKXtmdW5jdGlvbiBCKFcpe2suY2FsbCh0aGlzLFcpLHRoaXMu'@;
put 'X2NiY0luaXQoKX1VKEIsayk7Zm9yKHZhciBOPU9iamVjdC5rZXlzKEkpLFY9MDtWPE4ubGVuZ3RoO1YrKyl7dmFyIFo9TltWXTtCLnByb3RvdHlwZVtaXT1JW1pdfXJldHVybiBCLmNyZWF0ZT1mdW5jdGlvbihXKXtyZXR1cm4gbmV3IEIoVyl9LEJ9LEkuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2'@;
put 'YXIgaz1uZXcgRSh0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPWt9LEkuX3VwZGF0ZT1mdW5jdGlvbihrLEIsTixWKXt2YXIgVz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsej10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2'@;
put 'YXIgcT0wO3E8dGhpcy5ibG9ja1NpemU7cSsrKXpbcV1ePWtbQitxXTtmb3IoVy5fdXBkYXRlLmNhbGwodGhpcyx6LDAsTixWKSxxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspeltxXT1OW1YrcV19ZWxzZXtmb3IoVy5fdXBkYXRlLmNhbGwodGhpcyxrLEIsTixWKSxxPTA7cTx0aGlzLmJsb2Nr'@;
put 'U2l6ZTtxKyspTltWK3FdXj16W3FdO2ZvcihxPTA7cTx0aGlzLmJsb2NrU2l6ZTtxKyspeltxXT1rW0IrcV19fX0sNTc1NjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoOTc0Nik7ZnVuY3Rpb24gVShJKXt0aGlzLm9wdGlvbnM9SSx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUs'@;
put 'dGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wfXcuZXhwb3J0cz1VLFUucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKCl7fSxVLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oSSl7cmV0dXJu'@;
put 'IDA9PT1JLmxlbmd0aD9bXToiZGVjcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdChJKTp0aGlzLl91cGRhdGVFbmNyeXB0KEkpfSxVLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKEksRSl7Zm9yKHZhciBrPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1'@;
put 'ZmZlck9mZixJLmxlbmd0aC1FKSxCPTA7QjxrO0IrKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZitCXT1JW0UrQl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1rLGt9LFUucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbihJLEUpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZm'@;
put 'ZXIsMCxJLEUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LFUucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKEkpe3ZhciBFPTAsaz0wLE49bmV3IEFycmF5KCgodGhpcy5idWZmZXJPZmYrSS5sZW5ndGgpL3RoaXMuYmxvY2tTaXplfDApKnRoaXMuYmxvY2tTaXpl'@;
put 'KTswIT09dGhpcy5idWZmZXJPZmYmJihFKz10aGlzLl9idWZmZXIoSSxFKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKGsrPXRoaXMuX2ZsdXNoQnVmZmVyKE4saykpKTtmb3IodmFyIFY9SS5sZW5ndGgtKEkubGVuZ3RoLUUpJXRoaXMuYmxvY2tTaXplO0U8VjtFKz10'@;
put 'aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUoSSxFLE4sayksays9dGhpcy5ibG9ja1NpemU7Zm9yKDtFPEkubGVuZ3RoO0UrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT1JW0VdO3JldHVybiBOfSxVLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5j'@;
put 'dGlvbihJKXtmb3IodmFyIEU9MCxrPTAsQj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK0kubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxOPW5ldyBBcnJheShCKnRoaXMuYmxvY2tTaXplKTtCPjA7Qi0tKUUrPXRoaXMuX2J1ZmZlcihJLEUpLGsrPXRoaXMuX2ZsdXNoQnVmZmVyKE4sayk7'@;
put 'cmV0dXJuIEUrPXRoaXMuX2J1ZmZlcihJLEUpLE59LFUucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKEkpe3ZhciBFLGs7cmV0dXJuIEkmJihFPXRoaXMudXBkYXRlKEkpKSxrPSJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxF'@;
put 'P0UuY29uY2F0KGspOmt9LFUucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oSSxFKXtpZigwPT09RSlyZXR1cm4hMTtmb3IoO0U8SS5sZW5ndGg7KUlbRSsrXT0wO3JldHVybiEwfSxVLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0'@;
put 'aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIEk9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsSSwwKSxJfSxVLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEl9LFUucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9'@;
put 'ZnVuY3Rpb24oKXtQLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdCIpO3ZhciBJPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKEksMCksdGhpcy5fdW5wYWQoSSl9fSwzMjc6KHcs'@;
put 'QSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDk3NDYpLFU9RCg1NzE3KSxJPUQoMTI3OCksRT1EKDU3NTYpO2Z1bmN0aW9uIGsoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gQihWKXtFLmNhbGwodGhpcyxWKTt2YXIgWj1uZXcgazt0aGlzLl9kZXNT'@;
put 'dGF0ZT1aLHRoaXMuZGVyaXZlS2V5cyhaLFYua2V5KX1VKEIsRSksdy5leHBvcnRzPUIsQi5jcmVhdGU9ZnVuY3Rpb24oVil7cmV0dXJuIG5ldyBCKFYpfTt2YXIgTj1bMSwxLDIsMiwyLDIsMiwyLDEsMiwyLDIsMiwyLDIsMV07Qi5wcm90b3R5cGUuZGVyaXZlS2V5cz1mdW5jdGlvbihWLFop'@;
put 'e1Yua2V5cz1uZXcgQXJyYXkoMzIpLFAuZXF1YWwoWi5sZW5ndGgsdGhpcy5ibG9ja1NpemUsIkludmFsaWQga2V5IGxlbmd0aCIpO3ZhciBXPUkucmVhZFVJbnQzMkJFKFosMCksej1JLnJlYWRVSW50MzJCRShaLDQpO0kucGMxKFcseixWLnRtcCwwKSxXPVYudG1wWzBdLHo9Vi50bXBbMV07'@;
put 'Zm9yKHZhciBxPTA7cTxWLmtleXMubGVuZ3RoO3ErPTIpe3ZhciBRPU5bcT4+PjFdO1c9SS5yMjhzaGwoVyxRKSx6PUkucjI4c2hsKHosUSksSS5wYzIoVyx6LFYua2V5cyxxKX19LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVixaLFcseil7dmFyIHE9dGhpcy5fZGVzU3RhdGUsUT1J'@;
put 'LnJlYWRVSW50MzJCRShWLFopLHRlPUkucmVhZFVJbnQzMkJFKFYsWis0KTtJLmlwKFEsdGUscS50bXAsMCksUT1xLnRtcFswXSx0ZT1xLnRtcFsxXSwiZW5jcnlwdCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChxLFEsdGUscS50bXAsMCk6dGhpcy5fZGVjcnlwdChxLFEsdGUscS50bXAs'@;
put 'MCksdGU9cS50bXBbMV0sSS53cml0ZVVJbnQzMkJFKFcsUT1xLnRtcFswXSx6KSxJLndyaXRlVUludDMyQkUoVyx0ZSx6KzQpfSxCLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKFYsWil7Zm9yKHZhciBXPVYubGVuZ3RoLVosej1aO3o8Vi5sZW5ndGg7eisrKVZbel09VztyZXR1cm4hMH0sQi5w'@;
put 'cm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKFYpe2Zvcih2YXIgWj1WW1YubGVuZ3RoLTFdLFc9Vi5sZW5ndGgtWjtXPFYubGVuZ3RoO1crKylQLmVxdWFsKFZbV10sWik7cmV0dXJuIFYuc2xpY2UoMCxWLmxlbmd0aC1aKX0sQi5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oVixaLFcseixx'@;
put 'KXtmb3IodmFyIFE9Wix0ZT1XLGFlPTA7YWU8Vi5rZXlzLmxlbmd0aDthZSs9Mil7dmFyIHNlPVYua2V5c1thZV0sZGU9Vi5rZXlzW2FlKzFdO0kuZXhwYW5kKHRlLFYudG1wLDApO3ZhciBsZT1JLnN1YnN0aXR1dGUoc2VePVYudG1wWzBdLGRlXj1WLnRtcFsxXSksY2U9dGU7dGU9KFFeSS5w'@;
put 'ZXJtdXRlKGxlKSk+Pj4wLFE9Y2V9SS5yaXAodGUsUSx6LHEpfSxCLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbihWLFosVyx6LHEpe2Zvcih2YXIgUT1XLHRlPVosYWU9Vi5rZXlzLmxlbmd0aC0yO2FlPj0wO2FlLT0yKXt2YXIgc2U9Vi5rZXlzW2FlXSxkZT1WLmtleXNbYWUrMV07SS5l'@;
put 'eHBhbmQoUSxWLnRtcCwwKTt2YXIgbGU9SS5zdWJzdGl0dXRlKHNlXj1WLnRtcFswXSxkZV49Vi50bXBbMV0pLGNlPVE7UT0odGVeSS5wZXJtdXRlKGxlKSk+Pj4wLHRlPWNlfUkucmlwKFEsdGUseixxKX19LDY1MToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoOTc0NiksVT1EKDU3'@;
put 'MTcpLEk9RCg1NzU2KSxFPUQoMzI3KTtmdW5jdGlvbiBrKE4sVil7UC5lcXVhbChWLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIFo9Vi5zbGljZSgwLDgpLFc9Vi5zbGljZSg4LDE2KSx6PVYuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1OP1tFLmNy'@;
put 'ZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Olp9KSxFLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Old9KSxFLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Onp9KV06W0UuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6en0pLEUuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6V30pLEUu'@;
put 'Y3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6Wn0pXX1mdW5jdGlvbiBCKE4pe0kuY2FsbCh0aGlzLE4pO3ZhciBWPW5ldyBrKHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1WfVUoQixJKSx3LmV4cG9ydHM9QixCLmNyZWF0ZT1mdW5jdGlvbihOKXtyZXR1cm4g'@;
put 'bmV3IEIoTil9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oTixWLFosVyl7dmFyIHo9dGhpcy5fZWRlU3RhdGU7ei5jaXBoZXJzWzBdLl91cGRhdGUoTixWLFosVyksei5jaXBoZXJzWzFdLl91cGRhdGUoWixXLFosVyksei5jaXBoZXJzWzJdLl91cGRhdGUoWixXLFosVyl9LEIucHJv'@;
put 'dG90eXBlLl9wYWQ9RS5wcm90b3R5cGUuX3BhZCxCLnByb3RvdHlwZS5fdW5wYWQ9RS5wcm90b3R5cGUuX3VucGFkfSwxMjc4Oih3LEEpPT57InVzZSBzdHJpY3QiO0EucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEksRSl7cmV0dXJuKElbMCtFXTw8MjR8SVsxK0VdPDwxNnxJWzIrRV08PDh8SVsz'@;
put 'K0VdKT4+PjB9LEEud3JpdGVVSW50MzJCRT1mdW5jdGlvbihJLEUsayl7SVswK2tdPUU+Pj4yNCxJWzEra109RT4+PjE2JjI1NSxJWzIra109RT4+PjgmMjU1LElbMytrXT0yNTUmRX0sQS5pcD1mdW5jdGlvbihJLEUsayxCKXtmb3IodmFyIE49MCxWPTAsWj02O1o+PTA7Wi09Mil7Zm9yKHZh'@;
put 'ciBXPTA7Vzw9MjQ7Vys9OClOPDw9MSxOfD1FPj4+VytaJjE7Zm9yKFc9MDtXPD0yNDtXKz04KU48PD0xLE58PUk+Pj5XK1omMX1mb3IoWj02O1o+PTA7Wi09Mil7Zm9yKFc9MTtXPD0yNTtXKz04KVY8PD0xLFZ8PUU+Pj5XK1omMTtmb3IoVz0xO1c8PTI1O1crPTgpVjw8PTEsVnw9ST4+Plcr'@;
put 'WiYxfWtbQiswXT1OPj4+MCxrW0IrMV09Vj4+PjB9LEEucmlwPWZ1bmN0aW9uKEksRSxrLEIpe2Zvcih2YXIgTj0wLFY9MCxaPTA7Wjw0O1orKylmb3IodmFyIFc9MjQ7Vz49MDtXLT04KU48PD0xLE58PUU+Pj5XK1omMSxOPDw9MSxOfD1JPj4+VytaJjE7Zm9yKFo9NDtaPDg7WisrKWZvcihX'@;
put 'PTI0O1c+PTA7Vy09OClWPDw9MSxWfD1FPj4+VytaJjEsVjw8PTEsVnw9ST4+PlcrWiYxO2tbQiswXT1OPj4+MCxrW0IrMV09Vj4+PjB9LEEucGMxPWZ1bmN0aW9uKEksRSxrLEIpe2Zvcih2YXIgTj0wLFY9MCxaPTc7Wj49NTtaLS0pe2Zvcih2YXIgVz0wO1c8PTI0O1crPTgpTjw8PTEsTnw9'@;
put 'RT4+VytaJjE7Zm9yKFc9MDtXPD0yNDtXKz04KU48PD0xLE58PUk+PlcrWiYxfWZvcihXPTA7Vzw9MjQ7Vys9OClOPDw9MSxOfD1FPj5XK1omMTtmb3IoWj0xO1o8PTM7WisrKXtmb3IoVz0wO1c8PTI0O1crPTgpVjw8PTEsVnw9RT4+VytaJjE7Zm9yKFc9MDtXPD0yNDtXKz04KVY8PD0xLFZ8'@;
put 'PUk+PlcrWiYxfWZvcihXPTA7Vzw9MjQ7Vys9OClWPDw9MSxWfD1JPj5XK1omMTtrW0IrMF09Tj4+PjAsa1tCKzFdPVY+Pj4wfSxBLnIyOHNobD1mdW5jdGlvbihJLEUpe3JldHVybiBJPDxFJjI2ODQzNTQ1NXxJPj4+MjgtRX07dmFyIEQ9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3'@;
put 'LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07QS5wYzI9ZnVuY3Rpb24oSSxFLGssQil7Zm9yKHZhciBOPTAsVj0wLFo9RC5sZW5ndGg+Pj4xLFc9MDtXPFo7Vysr'@;
put 'KU48PD0xLE58PUk+Pj5EW1ddJjE7Zm9yKFc9WjtXPEQubGVuZ3RoO1crKylWPDw9MSxWfD1FPj4+RFtXXSYxO2tbQiswXT1OPj4+MCxrW0IrMV09Vj4+PjB9LEEuZXhwYW5kPWZ1bmN0aW9uKEksRSxrKXt2YXIgQj0wLE49MDtCPSgxJkkpPDw1fEk+Pj4yNztmb3IodmFyIFY9MjM7Vj49MTU7'@;
put 'Vi09NClCPDw9NixCfD1JPj4+ViY2Mztmb3IoVj0xMTtWPj0zO1YtPTQpTnw9ST4+PlYmNjMsTjw8PTY7Tnw9KDMxJkkpPDwxfEk+Pj4zMSxFW2srMF09Qj4+PjAsRVtrKzFdPU4+Pj4wfTt2YXIgUD1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYs'@;
put 'MTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAs'@;
put 'OSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwx'@;
put 'MywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAs'@;
put 'MCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMs'@;
put 'MTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcs'@;
put 'MTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAs'@;
put 'OCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1'@;
put 'LDUsNiw4LDExXTtBLnN1YnN0aXR1dGU9ZnVuY3Rpb24oSSxFKXtmb3IodmFyIGs9MCxCPTA7Qjw0O0IrKylrPDw9NCxrfD1QWzY0KkIrKEk+Pj4xOC02KkImNjMpXTtmb3IoQj0wO0I8NDtCKyspazw8PTQsa3w9UFsyNTYrNjQqQisoRT4+PjE4LTYqQiY2MyldO3JldHVybiBrPj4+MH07dmFy'@;
put 'IFU9WzE2LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO0EucGVybXV0ZT1mdW5jdGlvbihJKXtmb3IodmFyIEU9MCxrPTA7azxVLmxlbmd0aDtrKyspRTw8PTEsRXw9ST4+PlVba10mMTty'@;
put 'ZXR1cm4gRT4+PjB9LEEucGFkU3BsaXQ9ZnVuY3Rpb24oSSxFLGspe2Zvcih2YXIgQj1JLnRvU3RyaW5nKDIpO0IubGVuZ3RoPEU7KUI9IjAiK0I7Zm9yKHZhciBOPVtdLFY9MDtWPEU7Vis9aylOLnB1c2goQi5zbGljZShWLFYraykpO3JldHVybiBOLmpvaW4oIiAiKX19LDI2MDc6KHcsQSxE'@;
put 'KT0+e3ZhciBQPUQoODc2NCkuQnVmZmVyLFU9RCgzNTkwKSxJPUQoOTc5OSksRT1EKDc0MjYpLGs9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtBLkRpZmZpZUhlbGxtYW5Hcm91cD1BLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1BLmdldERpZmZpZUhlbGxtYW49ZnVuY3Rpb24oQil7'@;
put 'dmFyIE49bmV3IFAoSVtCXS5wcmltZSwiaGV4IiksVj1uZXcgUChJW0JdLmdlbiwiaGV4Iik7cmV0dXJuIG5ldyBFKE4sVil9LEEuY3JlYXRlRGlmZmllSGVsbG1hbj1BLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gQihOLFYsWixXKXtyZXR1cm4gUC5pc0J1ZmZlcihWKXx8dm9pZCAwPT09a1tW'@;
put 'XT9CKE4sImJpbmFyeSIsVixaKTooVj1WfHwiYmluYXJ5IixXPVd8fCJiaW5hcnkiLFo9Wnx8bmV3IFAoWzJdKSxQLmlzQnVmZmVyKFopfHwoWj1uZXcgUChaLFcpKSwibnVtYmVyIj09dHlwZW9mIE4/bmV3IEUoVShOLFopLFosITApOihQLmlzQnVmZmVyKE4pfHwoTj1uZXcgUChOLFYpKSxu'@;
put 'ZXcgRShOLFosITApKSl9fSw3NDI2Oih3LEEsRCk9Pnt2YXIgUD1EKDg3NjQpLkJ1ZmZlcixVPUQoMzYyMCksST1uZXcoRCgzMDQ3KSksRT1uZXcgVSgyNCksaz1uZXcgVSgxMSksQj1uZXcgVSgxMCksTj1uZXcgVSgzKSxWPW5ldyBVKDcpLFo9RCgzNTkwKSxXPUQoMTc5OCk7ZnVuY3Rpb24g'@;
put 'eihzZSxkZSl7cmV0dXJuIGRlPWRlfHwidXRmOCIsUC5pc0J1ZmZlcihzZSl8fChzZT1uZXcgUChzZSxkZSkpLHRoaXMuX3B1Yj1uZXcgVShzZSksdGhpc31mdW5jdGlvbiBxKHNlLGRlKXtyZXR1cm4gZGU9ZGV8fCJ1dGY4IixQLmlzQnVmZmVyKHNlKXx8KHNlPW5ldyBQKHNlLGRlKSksdGhp'@;
put 'cy5fcHJpdj1uZXcgVShzZSksdGhpc313LmV4cG9ydHM9dGU7dmFyIFE9e307ZnVuY3Rpb24gdGUoc2UsZGUsbGUpe3RoaXMuc2V0R2VuZXJhdG9yKGRlKSx0aGlzLl9fcHJpbWU9bmV3IFUoc2UpLHRoaXMuX3ByaW1lPVUubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPXNlLmxl'@;
put 'bmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMuX3ByaW1lQ29kZT12b2lkIDAsbGU/KHRoaXMuc2V0UHVibGljS2V5PXosdGhpcy5zZXRQcml2YXRlS2V5PXEpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGFlKHNlLGRlKXt2YXIgbGU9bmV3IFAoc2UudG9B'@;
put 'cnJheSgpKTtyZXR1cm4gZGU/bGUudG9TdHJpbmcoZGUpOmxlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZS5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3By'@;
put 'aW1lQ29kZT1mdW5jdGlvbihzZSxkZSl7dmFyIGxlPWRlLnRvU3RyaW5nKCJoZXgiKSxjZT1bbGUsc2UudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYoY2UgaW4gUSlyZXR1cm4gUVtjZV07dmFyIEcseT0wO2lmKHNlLmlzRXZlbigpfHwhWi5zaW1wbGVTaWV2ZXx8IVouZmVybWF0VGVzdChz'@;
put 'ZSl8fCFJLnRlc3Qoc2UpKXJldHVybiB5Kz0xLFFbY2VdPXkrPSIwMiI9PT1sZXx8IjA1Ij09PWxlPzg6NCx5O3N3aXRjaChJLnRlc3Qoc2Uuc2hybigxKSl8fCh5Kz0yKSxsZSl7Y2FzZSIwMiI6c2UubW9kKEUpLmNtcChrKSYmKHkrPTgpO2JyZWFrO2Nhc2UiMDUiOihHPXNlLm1vZChCKSku'@;
put 'Y21wKE4pJiZHLmNtcChWKSYmKHkrPTgpO2JyZWFrO2RlZmF1bHQ6eSs9NH1yZXR1cm4gUVtjZV09eSx5fSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSx0ZS5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0'@;
put 'aGlzLl9wcml2PW5ldyBVKFcodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5fcHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSx0ZS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbihzZSl7'@;
put 'dmFyIGRlPShzZT0oc2U9bmV3IFUoc2UpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksbGU9bmV3IFAoZGUudG9BcnJheSgpKSxjZT10aGlzLmdldFByaW1lKCk7aWYobGUubGVuZ3RoPGNlLmxlbmd0aCl7dmFyIEc9bmV3IFAoY2UubGVuZ3RoLWxl'@;
put 'Lmxlbmd0aCk7Ry5maWxsKDApLGxlPVAuY29uY2F0KFtHLGxlXSl9cmV0dXJuIGxlfSx0ZS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHNlKXtyZXR1cm4gYWUodGhpcy5fcHViLHNlKX0sdGUucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oc2Upe3JldHVybiBhZSh0'@;
put 'aGlzLl9wcml2LHNlKX0sdGUucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHNlKXtyZXR1cm4gYWUodGhpcy5fX3ByaW1lLHNlKX0sdGUucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihzZSl7cmV0dXJuIGFlKHRoaXMuX2dlbixzZSl9LHRlLnByb3RvdHlwZS5zZXRHZW5lcmF0'@;
put 'b3I9ZnVuY3Rpb24oc2UsZGUpe3JldHVybiBkZT1kZXx8InV0ZjgiLFAuaXNCdWZmZXIoc2UpfHwoc2U9bmV3IFAoc2UsZGUpKSx0aGlzLl9fZ2VuPXNlLHRoaXMuX2dlbj1uZXcgVShzZSksdGhpc319LDM1OTA6KHcsQSxEKT0+e3ZhciBQPUQoMTc5OCk7dy5leHBvcnRzPXNlLHNlLnNpbXBs'@;
put 'ZVNpZXZlPXRlLHNlLmZlcm1hdFRlc3Q9YWU7dmFyIFU9RCgzNjIwKSxJPW5ldyBVKDI0KSxFPW5ldyhEKDMwNDcpKSxrPW5ldyBVKDEpLEI9bmV3IFUoMiksTj1uZXcgVSg1KSxWPShuZXcgVSgxNiksbmV3IFUoOCksbmV3IFUoMTApKSxaPW5ldyBVKDMpLFc9KG5ldyBVKDcpLG5ldyBVKDEx'@;
put 'KSksej1uZXcgVSg0KSxxPShuZXcgVSgxMiksbnVsbCk7ZnVuY3Rpb24gdGUoZGUpe2Zvcih2YXIgbGU9ZnVuY3Rpb24gUSgpe2lmKG51bGwhPT1xKXJldHVybiBxO3ZhciBkZT1bXTtkZVswXT0yO2Zvcih2YXIgbGU9MSxjZT0zO2NlPDEwNDg1NzY7Y2UrPTIpe2Zvcih2YXIgRz1NYXRoLmNl'@;
put 'aWwoTWF0aC5zcXJ0KGNlKSkseT0wO3k8bGUmJmRlW3ldPD1HJiZjZSVkZVt5XSE9MDt5KyspO2xlIT09eSYmZGVbeV08PUd8fChkZVtsZSsrXT1jZSl9cmV0dXJuIHE9ZGUsZGV9KCksY2U9MDtjZTxsZS5sZW5ndGg7Y2UrKylpZigwPT09ZGUubW9kbihsZVtjZV0pKXJldHVybiAwPT09ZGUu'@;
put 'Y21wbihsZVtjZV0pO3JldHVybiEwfWZ1bmN0aW9uIGFlKGRlKXt2YXIgbGU9VS5tb250KGRlKTtyZXR1cm4gMD09PUIudG9SZWQobGUpLnJlZFBvdyhkZS5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBzZShkZSxsZSl7aWYoZGU8MTYpcmV0dXJuIG5ldyBVKDI9PT1sZXx8'@;
put 'NT09PWxlP1sxNDAsMTIzXTpbMTQwLDM5XSk7dmFyIGNlLEc7Zm9yKGxlPW5ldyBVKGxlKTs7KXtmb3IoY2U9bmV3IFUoUChNYXRoLmNlaWwoZGUvOCkpKTtjZS5iaXRMZW5ndGgoKT5kZTspY2UuaXNocm4oMSk7aWYoY2UuaXNFdmVuKCkmJmNlLmlhZGQoayksY2UudGVzdG4oMSl8fGNlLmlh'@;
put 'ZGQoQiksbGUuY21wKEIpKXtpZighbGUuY21wKE4pKWZvcig7Y2UubW9kKFYpLmNtcChaKTspY2UuaWFkZCh6KX1lbHNlIGZvcig7Y2UubW9kKEkpLmNtcChXKTspY2UuaWFkZCh6KTtpZih0ZShHPWNlLnNocm4oMSkpJiZ0ZShjZSkmJmFlKEcpJiZhZShjZSkmJkUudGVzdChHKSYmRS50ZXN0'@;
put 'KGNlKSlyZXR1cm4gY2V9fX0sMzYyMDpmdW5jdGlvbih3LEEsRCl7IWZ1bmN0aW9uKFAsVSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIEkoZyxTKXtpZighZyl0aHJvdyBuZXcgRXJyb3IoU3x8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBFKGcsUyl7Zy5zdXBlcl89Uzt2YXIgeD1mdW5j'@;
put 'dGlvbigpe307eC5wcm90b3R5cGU9Uy5wcm90b3R5cGUsZy5wcm90b3R5cGU9bmV3IHgsZy5wcm90b3R5cGUuY29uc3RydWN0b3I9Z31mdW5jdGlvbiBrKGcsUyx4KXtpZihrLmlzQk4oZykpcmV0dXJuIGc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRo'@;
put 'aXMucmVkPW51bGwsbnVsbCE9PWcmJigibGUiIT09UyYmImJlIiE9PVN8fCh4PVMsUz0xMCksdGhpcy5faW5pdChnfHwwLFN8fDEwLHh8fCJiZSIpKX12YXIgQjsib2JqZWN0Ij09dHlwZW9mIFA/UC5leHBvcnRzPWs6VS5CTj1rLGsuQk49ayxrLndvcmRTaXplPTI2O3RyeXtCPXR5cGVvZiB3'@;
put 'aW5kb3c8InUiJiZ2b2lkIDAhPT13aW5kb3cuQnVmZmVyP3dpbmRvdy5CdWZmZXI6RCg3NzQ4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIE4oZyxTKXt2YXIgeD1nLmNoYXJDb2RlQXQoUyk7cmV0dXJuIHg+PTY1JiZ4PD03MD94LTU1Ong+PTk3JiZ4PD0xMDI/eC04Nzp4LTQ4JjE1fWZ1bmN0'@;
put 'aW9uIFYoZyxTLHgpe3ZhciBfPU4oZyx4KTtyZXR1cm4geC0xPj1TJiYoX3w9TihnLHgtMSk8PDQpLF99ZnVuY3Rpb24gWihnLFMseCxfKXtmb3IodmFyIHA9MCxDPU1hdGgubWluKGcubGVuZ3RoLHgpLEs9UztLPEM7SysrKXt2YXIgbmU9Zy5jaGFyQ29kZUF0KEspLTQ4O3AqPV8scCs9bmU+'@;
put 'PTQ5P25lLTQ5KzEwOm5lPj0xNz9uZS0xNysxMDpuZX1yZXR1cm4gcH1rLmlzQk49ZnVuY3Rpb24oZyl7cmV0dXJuIGcgaW5zdGFuY2VvZiBrfHxudWxsIT09ZyYmIm9iamVjdCI9PXR5cGVvZiBnJiZnLmNvbnN0cnVjdG9yLndvcmRTaXplPT09ay53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShn'@;
put 'LndvcmRzKX0say5tYXg9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gZy5jbXAoUyk+MD9nOlN9LGsubWluPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIGcuY21wKFMpPDA/ZzpTfSxrLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihnLFMseCl7aWYoIm51bWJlciI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9p'@;
put 'bml0TnVtYmVyKGcsUyx4KTtpZigib2JqZWN0Ij09dHlwZW9mIGcpcmV0dXJuIHRoaXMuX2luaXRBcnJheShnLFMseCk7ImhleCI9PT1TJiYoUz0xNiksSShTPT09KDB8UykmJlM+PTImJlM8PTM2KTt2YXIgXz0wOyItIj09PShnPWcudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBd'@;
put 'JiYoXysrLHRoaXMubmVnYXRpdmU9MSksXzxnLmxlbmd0aCYmKDE2PT09Uz90aGlzLl9wYXJzZUhleChnLF8seCk6KHRoaXMuX3BhcnNlQmFzZShnLFMsXyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxTLHgpKSl9LGsucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1'@;
put 'bmN0aW9uKGcsUyx4KXtnPDAmJih0aGlzLm5lZ2F0aXZlPTEsZz0tZyksZzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZ10sdGhpcy5sZW5ndGg9MSk6Zzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZnLGcvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVu'@;
put 'Z3RoPTIpOihJKGc8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksUyx4KX0say5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5j'@;
put 'dGlvbihnLFMseCl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcubGVuZ3RoKSxnLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChnLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7'@;
put 'Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT0wO3ZhciBwLEMsSz0wO2lmKCJiZSI9PT14KWZvcihfPWcubGVuZ3RoLTEscD0wO18+PTA7Xy09Myl0aGlzLndvcmRzW3BdfD0oQz1nW19dfGdbXy0xXTw8OHxnW18tMl08PDE2KTw8SyY2NzEwODg2Myx0aGlzLndv'@;
put 'cmRzW3ArMV09Qz4+PjI2LUsmNjcxMDg4NjMsKEsrPTI0KT49MjYmJihLLT0yNixwKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKF89MCxwPTA7XzxnLmxlbmd0aDtfKz0zKXRoaXMud29yZHNbcF18PShDPWdbX118Z1tfKzFdPDw4fGdbXysyXTw8MTYpPDxLJjY3MTA4ODYzLHRoaXMud29yZHNb'@;
put 'cCsxXT1DPj4+MjYtSyY2NzEwODg2MywoSys9MjQpPj0yNiYmKEstPTI2LHArKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGcsUyx4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGcubGVuZ3RoLVMpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5'@;
put 'KHRoaXMubGVuZ3RoKTtmb3IodmFyIF89MDtfPHRoaXMubGVuZ3RoO18rKyl0aGlzLndvcmRzW19dPTA7dmFyIHAsQz0wLEs9MDtpZigiYmUiPT09eClmb3IoXz1nLmxlbmd0aC0xO18+PVM7Xy09MilwPVYoZyxTLF8pPDxDLHRoaXMud29yZHNbS118PTY3MTA4ODYzJnAsQz49MTg/KEMtPTE4'@;
put 'LHRoaXMud29yZHNbSys9MV18PXA+Pj4yNik6Qys9ODtlbHNlIGZvcihfPShnLmxlbmd0aC1TKSUyPT0wP1MrMTpTO188Zy5sZW5ndGg7Xys9MilwPVYoZyxTLF8pPDxDLHRoaXMud29yZHNbS118PTY3MTA4ODYzJnAsQz49MTg/KEMtPTE4LHRoaXMud29yZHNbSys9MV18PXA+Pj4yNik6Qys9'@;
put 'ODt0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oZyxTLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBfPTAscD0xO3A8PTY3MTA4ODYzO3AqPVMpXysrO18tLSxwPXAvU3wwO2Zvcih2YXIgQz1nLmxlbmd0aC14LEs9QyVfLG5lPU1h'@;
put 'dGgubWluKEMsQy1LKSt4LHVlPTAsaGU9eDtoZTxuZTtoZSs9Xyl1ZT1aKGcsaGUsaGUrXyxTKSx0aGlzLmltdWxuKHApLHRoaXMud29yZHNbMF0rdWU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dWU6dGhpcy5faWFkZG4odWUpO2lmKDAhPT1LKXt2YXIgeGU9MTtmb3IodWU9WihnLGhlLGcu'@;
put 'bGVuZ3RoLFMpLGhlPTA7aGU8SztoZSsrKXhlKj1TO3RoaXMuaW11bG4oeGUpLHRoaXMud29yZHNbMF0rdWU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dWU6dGhpcy5faWFkZG4odWUpfXRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuY29weT1mdW5jdGlvbihnKXtnLndvcmRzPW5ldyBBcnJh'@;
put 'eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aDtTKyspZy53b3Jkc1tTXT10aGlzLndvcmRzW1NdO2cubGVuZ3RoPXRoaXMubGVuZ3RoLGcubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxnLnJlZD10aGlzLnJlZH0say5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIg'@;
put 'Zz1uZXcgayhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KGcpLGd9LGsucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oZyl7Zm9yKDt0aGlzLmxlbmd0aDxnOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LGsucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0'@;
put 'aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0say5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlz'@;
put 'Lm5lZ2F0aXZlPTApLHRoaXN9LGsucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIFc9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sej1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxxPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2'@;
put 'MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5'@;
put 'MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFEoZyxTLHgpe3gubmVnYXRpdmU9Uy5uZWdhdGl2ZV5nLm5lZ2F0aXZlO3ZhciBfPWcubGVuZ3RoK1MubGVuZ3RofDA7eC5sZW5n'@;
put 'dGg9XyxfPV8tMXwwO3ZhciBwPTB8Zy53b3Jkc1swXSxDPTB8Uy53b3Jkc1swXSxLPXAqQyx1ZT1LLzY3MTA4ODY0fDA7eC53b3Jkc1swXT02NzEwODg2MyZLO2Zvcih2YXIgaGU9MTtoZTxfO2hlKyspe2Zvcih2YXIgeGU9dWU+Pj4yNixPZT02NzEwODg2MyZ1ZSxIZT1NYXRoLm1pbihoZSxT'@;
put 'Lmxlbmd0aC0xKSxFZT1NYXRoLm1heCgwLGhlLWcubGVuZ3RoKzEpO0VlPD1IZTtFZSsrKXhlKz0oSz0ocD0wfGcud29yZHNbaGUtRWV8MF0pKihDPTB8Uy53b3Jkc1tFZV0pK09lKS82NzEwODg2NHwwLE9lPTY3MTA4ODYzJks7eC53b3Jkc1toZV09MHxPZSx1ZT0wfHhlfXJldHVybiAwIT09'@;
put 'dWU/eC53b3Jkc1toZV09MHx1ZTp4Lmxlbmd0aC0tLHguc3RyaXAoKX1rLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihnLFMpe3ZhciB4O2lmKFM9MHxTfHwxLDE2PT09KGc9Z3x8MTApfHwiaGV4Ij09PWcpe3g9IiI7Zm9yKHZhciBfPTAscD0wLEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl7'@;
put 'dmFyIEs9dGhpcy53b3Jkc1tDXSxuZT0oMTY3NzcyMTUmKEs8PF98cCkpLnRvU3RyaW5nKDE2KTt4PTAhPShwPUs+Pj4yNC1fJjE2Nzc3MjE1KXx8QyE9PXRoaXMubGVuZ3RoLTE/V1s2LW5lLmxlbmd0aF0rbmUreDpuZSt4LChfKz0yKT49MjYmJihfLT0yNixDLS0pfWZvcigwIT09cCYmKHg9'@;
put 'cC50b1N0cmluZygxNikreCk7eC5sZW5ndGglUyE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpe3ZhciB1ZT16W2ddLGhlPXFbZ107eD0iIjt2YXIgeGU9dGhpcy5jbG9uZSgpO2Zvcih4ZS5uZWdhdGl2'@;
put 'ZT0wOyF4ZS5pc1plcm8oKTspe3ZhciBPZT14ZS5tb2RuKGhlKS50b1N0cmluZyhnKTt4PSh4ZT14ZS5pZGl2bihoZSkpLmlzWmVybygpP09lK3g6V1t1ZS1PZS5sZW5ndGhdK09lK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCVTIT0wOyl4PSIwIit4O3JldHVybiAw'@;
put 'IT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9SSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSxrLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBnPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9nKz02NzEwODg2NCp0aGlzLndv'@;
put 'cmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Zys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJkkoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlPy1nOmd9LGsucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0say5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gSSh2b2lkIDAhPT1CKSx0aGlzLnRvQXJyYXlMaWtlKEIsZyxTKX0say5wcm90b3R5cGUudG9BcnJh'@;
put 'eT1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LGcsUyl9LGsucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXz10aGlzLmJ5dGVMZW5ndGgoKSxwPXh8fE1hdGgubWF4KDEsXyk7SShfPD1wLCJieXRlIGFycmF5IGxvbmdlciB0aGFu'@;
put 'IGRlc2lyZWQgbGVuZ3RoIiksSShwPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgQyxLLG5lPSJsZSI9PT1TLHVlPW5ldyBnKHApLGhlPXRoaXMuY2xvbmUoKTtpZihuZSl7Zm9yKEs9MDshaGUuaXNaZXJvKCk7SysrKUM9aGUuYW5kbG4oMjU1KSxo'@;
put 'ZS5pdXNocm4oOCksdWVbS109Qztmb3IoO0s8cDtLKyspdWVbS109MH1lbHNle2ZvcihLPTA7SzxwLV87SysrKXVlW0tdPTA7Zm9yKEs9MDshaGUuaXNaZXJvKCk7SysrKUM9aGUuYW5kbG4oMjU1KSxoZS5pdXNocm4oOCksdWVbcC1LLTFdPUN9cmV0dXJuIHVlfSxrLnByb3RvdHlwZS5fY291'@;
put 'bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oZyl7cmV0dXJuIDMyLU1hdGguY2x6MzIoZyl9OmZ1bmN0aW9uKGcpe3ZhciBTPWcseD0wO3JldHVybiBTPj00MDk2JiYoeCs9MTMsUz4+Pj0xMyksUz49NjQmJih4Kz03LFM+Pj49NyksUz49OCYmKHgrPTQsUz4+Pj00KSxTPj0yJiYoeCs9MixT'@;
put 'Pj4+PTIpLHgrU30say5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKGcpe2lmKDA9PT1nKXJldHVybiAyNjt2YXIgUz1nLHg9MDtyZXR1cm4hKDgxOTEmUykmJih4Kz0xMyxTPj4+PTEzKSwhKDEyNyZTKSYmKHgrPTcsUz4+Pj03KSwhKDE1JlMpJiYoeCs9NCxTPj4+PTQpLCEoMyZTKSYm'@;
put 'KHgrPTIsUz4+Pj0yKSwhKDEmUykmJngrKyx4fSxrLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgUz10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStTfSxrLnByb3RvdHlwZS56ZXJvQml0cz1mdW5j'@;
put 'dGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBnPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1NdKTtpZihnKz14LDI2IT09eClicmVha31yZXR1cm4gZ30say5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlv'@;
put 'bigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0say5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKGcpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0say5wcm90b3R5cGUuZnJvbVR3b3M9ZnVu'@;
put 'Y3Rpb24oZyl7cmV0dXJuIHRoaXMudGVzdG4oZy0xKT90aGlzLm5vdG4oZykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0say5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LGsucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLmNsb25lKCkuaW5lZygpfSxrLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxrLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8Zy5sZW5ndGg7KXRoaXMud29yZHNbdGhp'@;
put 'cy5sZW5ndGgrK109MDtmb3IodmFyIFM9MDtTPGcubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPXRoaXMud29yZHNbU118Zy53b3Jkc1tTXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUp'@;
put 'KSx0aGlzLml1b3IoZyl9LGsucHJvdG90eXBlLm9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKGcpOmcuY2xvbmUoKS5pb3IodGhpcyl9LGsucHJvdG90eXBlLnVvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5n'@;
put 'dGg/dGhpcy5jbG9uZSgpLml1b3IoZyk6Zy5jbG9uZSgpLml1b3IodGhpcyl9LGsucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKGcpe3ZhciBTO1M9dGhpcy5sZW5ndGg+Zy5sZW5ndGg/Zzp0aGlzO2Zvcih2YXIgeD0wO3g8Uy5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4'@;
put 'XSZnLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1TLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1YW5kKGcpfSxrLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oZyl7'@;
put 'cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGcpOmcuY2xvbmUoKS5pYW5kKHRoaXMpfSxrLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoZyk6Zy5jbG9uZSgpLml1YW5k'@;
put 'KHRoaXMpfSxrLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihnKXt2YXIgUyx4O3RoaXMubGVuZ3RoPmcubGVuZ3RoPyhTPXRoaXMseD1nKTooUz1nLHg9dGhpcyk7Zm9yKHZhciBfPTA7Xzx4Lmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT1TLndvcmRzW19dXngud29yZHNbX107aWYodGhpcyE9'@;
put 'PVMpZm9yKDtfPFMubGVuZ3RoO18rKyl0aGlzLndvcmRzW19dPVMud29yZHNbX107cmV0dXJuIHRoaXMubGVuZ3RoPVMubGVuZ3RoLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihnKXtyZXR1cm4gSSghKHRoaXMubmVnYXRpdmV8Zy5uZWdhdGl2ZSkpLHRoaXMuaXV4'@;
put 'b3IoZyl9LGsucHJvdG90eXBlLnhvcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoZyk6Zy5jbG9uZSgpLml4b3IodGhpcyl9LGsucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3Ro'@;
put 'aXMuY2xvbmUoKS5pdXhvcihnKTpnLmNsb25lKCkuaXV4b3IodGhpcyl9LGsucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz0wfE1hdGguY2VpbChnLzI2KSx4PWclMjY7dGhpcy5fZXhwYW5kKFMpLHg+MCYmUy0tO2Zvcih2YXIg'@;
put 'Xz0wO188UztfKyspdGhpcy53b3Jkc1tfXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tfXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tfXT1+dGhpcy53b3Jkc1tfXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNs'@;
put 'b25lKCkuaW5vdG4oZyl9LGsucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oZyxTKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIHg9Zy8yNnwwLF89ZyUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1TP3RoaXMud29yZHNbeF18MTw8Xzp0aGlzLndvcmRz'@;
put 'W3hdJn4oMTw8XyksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKGcpe3ZhciBTLHgsXztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxTPXRoaXMuaXN1YihnKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25v'@;
put 'cm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1nLm5lZ2F0aXZlKXJldHVybiBnLm5lZ2F0aXZlPTAsUz10aGlzLmlzdWIoZyksZy5uZWdhdGl2ZT0xLFMuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Zy5sZW5ndGg/KHg9dGhpcyxfPWcpOih4PWcsXz10aGlzKTtmb3IodmFyIHA9'@;
put 'MCxDPTA7QzxfLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoUz0oMHx4LndvcmRzW0NdKSsoMHxfLndvcmRzW0NdKStwKSxwPVM+Pj4yNjtmb3IoOzAhPT1wJiZDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJihTPSgwfHgud29yZHNbQ10pK3ApLHA9Uz4+'@;
put 'PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1wKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPXAsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT14LndvcmRzW0NdO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS5hZGQ9'@;
put 'ZnVuY3Rpb24oZyl7dmFyIFM7cmV0dXJuIDAhPT1nLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oZy5uZWdhdGl2ZT0wLFM9dGhpcy5zdWIoZyksZy5uZWdhdGl2ZV49MSxTKTowPT09Zy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxTPWcuc3ViKHRo'@;
put 'aXMpLHRoaXMubmVnYXRpdmU9MSxTKTp0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChnKTpnLmNsb25lKCkuaWFkZCh0aGlzKX0say5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnKXtpZigwIT09Zy5uZWdhdGl2ZSl7Zy5uZWdhdGl2ZT0wO3ZhciBTPXRoaXMuaWFkZChn'@;
put 'KTtyZXR1cm4gZy5uZWdhdGl2ZT0xLFMuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHgsXyxwPXRoaXMuY21wKGcpO2lmKDA9PT1wKXJldHVybiB0'@;
put 'aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztwPjA/KHg9dGhpcyxfPWcpOih4PWcsXz10aGlzKTtmb3IodmFyIEM9MCxLPTA7SzxfLmxlbmd0aDtLKyspQz0oUz0oMHx4LndvcmRzW0tdKS0oMHxfLndvcmRzW0tdKStDKT4+MjYsdGhpcy53b3Jkc1tL'@;
put 'XT02NzEwODg2MyZTO2Zvcig7MCE9PUMmJks8eC5sZW5ndGg7SysrKUM9KFM9KDB8eC53b3Jkc1tLXSkrQyk+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmUztpZigwPT09QyYmSzx4Lmxlbmd0aCYmeCE9PXRoaXMpZm9yKDtLPHgubGVuZ3RoO0srKyl0aGlzLndvcmRzW0tdPXgud29yZHNb'@;
put 'S107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEspLHghPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoZyl9O3ZhciB0ZT1mdW5jdGlvbihnLFMs'@;
put 'eCl7dmFyIF8scCxDLEs9Zy53b3JkcyxuZT1TLndvcmRzLHVlPXgud29yZHMsaGU9MCx4ZT0wfEtbMF0sT2U9ODE5MSZ4ZSxIZT14ZT4+PjEzLEVlPTB8S1sxXSxMZT04MTkxJkVlLE5lPUVlPj4+MTMsS2U9MHxLWzJdLFVlPTgxOTEmS2UsWGU9S2U+Pj4xMyxhdD0wfEtbM10sRmU9ODE5MSZh'@;
put 'dCxDZT1hdD4+PjEzLERlPTB8S1s0XSxSZT04MTkxJkRlLGV0PURlPj4+MTMsbnQ9MHxLWzVdLEdlPTgxOTEmbnQsZHQ9bnQ+Pj4xMyxUZT0wfEtbNl0sQWU9ODE5MSZUZSxCZT1UZT4+PjEzLG90PTB8S1s3XSxsdD04MTkxJm90LEN0PW90Pj4+MTMsRnQ9MHxLWzhdLFJ0PTgxOTEmRnQsWHQ9'@;
put 'RnQ+Pj4xMyxTbj0wfEtbOV0senQ9ODE5MSZTbix2bj1Tbj4+PjEzLEJuPTB8bmVbMF0sdG49ODE5MSZCbixabj1Cbj4+PjEzLE9uPTB8bmVbMV0scHQ9ODE5MSZPbixmbj1Pbj4+PjEzLGRuPTB8bmVbMl0sTXQ9ODE5MSZkbixZdD1kbj4+PjEzLF90PTB8bmVbM10sanQ9ODE5MSZfdCxwbj1f'@;
put 'dD4+PjEzLHJ0PTB8bmVbNF0sRXQ9ODE5MSZydCxRdD1ydD4+PjEzLFR0PTB8bmVbNV0sbXQ9ODE5MSZUdCxHdD1UdD4+PjEzLGtuPTB8bmVbNl0sQnQ9ODE5MSZrbixibj1rbj4+PjEzLENuPTB8bmVbN10sZW49ODE5MSZDbixQbj1Dbj4+PjEzLHduPTB8bmVbOF0sJHQ9ODE5MSZ3bixXbj13'@;
put 'bj4+PjEzLGNpPTB8bmVbOV0sbG49ODE5MSZjaSxubj1jaT4+PjEzO3gubmVnYXRpdmU9Zy5uZWdhdGl2ZV5TLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciB1aT0oaGUrKF89TWF0aC5pbXVsKE9lLHRuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChPZSxabikpK01hdGguaW11bChIZSx0'@;
put 'bil8MCkpPDwxMyl8MDtoZT0oKEM9TWF0aC5pbXVsKEhlLFpuKSkrKHA+Pj4xMyl8MCkrKHVpPj4+MjYpfDAsdWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKExlLHRuKSxwPShwPU1hdGguaW11bChMZSxabikpK01hdGguaW11bChOZSx0bil8MCxDPU1hdGguaW11bChOZSxabik7dmFyIEFyPSho'@;
put 'ZSsoXz1fK01hdGguaW11bChPZSxwdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLGZuKXwwKStNYXRoLmltdWwoSGUscHQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLGZuKXwwKSsocD4+PjEzKXwwKSsoQXI+Pj4yNil8MCxBciY9NjcxMDg4NjMsXz1NYXRo'@;
put 'LmltdWwoVWUsdG4pLHA9KHA9TWF0aC5pbXVsKFVlLFpuKSkrTWF0aC5pbXVsKFhlLHRuKXwwLEM9TWF0aC5pbXVsKFhlLFpuKSxfPV8rTWF0aC5pbXVsKExlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsZm4pfDApK01hdGguaW11bChOZSxwdCl8MCxDPUMrTWF0aC5pbXVsKE5lLGZuKXww'@;
put 'O3ZhciBtcj0oaGUrKF89XytNYXRoLmltdWwoT2UsTXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxZdCl8MCkrTWF0aC5pbXVsKEhlLE10KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxZdCl8MCkrKHA+Pj4xMyl8MCkrKG1yPj4+MjYpfDAsbXImPTY3MTA4'@;
put 'ODYzLF89TWF0aC5pbXVsKEZlLHRuKSxwPShwPU1hdGguaW11bChGZSxabikpK01hdGguaW11bChDZSx0bil8MCxDPU1hdGguaW11bChDZSxabiksXz1fK01hdGguaW11bChVZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGZuKXwwKStNYXRoLmltdWwoWGUscHQpfDAsQz1DK01hdGguaW11'@;
put 'bChYZSxmbil8MCxfPV8rTWF0aC5pbXVsKExlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsWXQpfDApK01hdGguaW11bChOZSxNdCl8MCxDPUMrTWF0aC5pbXVsKE5lLFl0KXwwO3ZhciB5aT0oaGUrKF89XytNYXRoLmltdWwoT2UsanQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11'@;
put 'bChPZSxwbil8MCkrTWF0aC5pbXVsKEhlLGp0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxwbil8MCkrKHA+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKFJlLHRuKSxwPShwPU1hdGguaW11bChSZSxabikpK01hdGguaW11bChldCx0bil8'@;
put 'MCxDPU1hdGguaW11bChldCxabiksXz1fK01hdGguaW11bChGZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLGZuKXwwKStNYXRoLmltdWwoQ2UscHQpfDAsQz1DK01hdGguaW11bChDZSxmbil8MCxfPV8rTWF0aC5pbXVsKFVlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsWXQpfDApK01h'@;
put 'dGguaW11bChYZSxNdCl8MCxDPUMrTWF0aC5pbXVsKFhlLFl0KXwwLF89XytNYXRoLmltdWwoTGUsanQpfDAscD0ocD1wK01hdGguaW11bChMZSxwbil8MCkrTWF0aC5pbXVsKE5lLGp0KXwwLEM9QytNYXRoLmltdWwoTmUscG4pfDA7dmFyICRyPShoZSsoXz1fK01hdGguaW11bChPZSxFdCl8'@;
put 'MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKE9lLFF0KXwwKStNYXRoLmltdWwoSGUsRXQpfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFF0KXwwKSsocD4+PjEzKXwwKSsoJHI+Pj4yNil8MCwkciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoR2UsdG4pLHA9KHA9TWF0aC5p'@;
put 'bXVsKEdlLFpuKSkrTWF0aC5pbXVsKGR0LHRuKXwwLEM9TWF0aC5pbXVsKGR0LFpuKSxfPV8rTWF0aC5pbXVsKFJlLHB0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsZm4pfDApK01hdGguaW11bChldCxwdCl8MCxDPUMrTWF0aC5pbXVsKGV0LGZuKXwwLF89XytNYXRoLmltdWwoRmUsTXQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChGZSxZdCl8MCkrTWF0aC5pbXVsKENlLE10KXwwLEM9QytNYXRoLmltdWwoQ2UsWXQpfDAsXz1fK01hdGguaW11bChVZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoWGUsanQpfDAsQz1DK01hdGguaW11bChYZSxwbil8MCxfPV8r'@;
put 'TWF0aC5pbXVsKExlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsUXQpfDApK01hdGguaW11bChOZSxFdCl8MCxDPUMrTWF0aC5pbXVsKE5lLFF0KXwwO3ZhciBKaT0oaGUrKF89XytNYXRoLmltdWwoT2UsbXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxHdCl8MCkrTWF0'@;
put 'aC5pbXVsKEhlLG10KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxHdCl8MCkrKHA+Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKEFlLHRuKSxwPShwPU1hdGguaW11bChBZSxabikpK01hdGguaW11bChCZSx0bil8MCxDPU1hdGguaW11bChC'@;
put 'ZSxabiksXz1fK01hdGguaW11bChHZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLGZuKXwwKStNYXRoLmltdWwoZHQscHQpfDAsQz1DK01hdGguaW11bChkdCxmbil8MCxfPV8rTWF0aC5pbXVsKFJlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsWXQpfDApK01hdGguaW11bChldCxNdCl8'@;
put 'MCxDPUMrTWF0aC5pbXVsKGV0LFl0KXwwLF89XytNYXRoLmltdWwoRmUsanQpfDAscD0ocD1wK01hdGguaW11bChGZSxwbil8MCkrTWF0aC5pbXVsKENlLGp0KXwwLEM9QytNYXRoLmltdWwoQ2UscG4pfDAsXz1fK01hdGguaW11bChVZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFF0KXww'@;
put 'KStNYXRoLmltdWwoWGUsRXQpfDAsQz1DK01hdGguaW11bChYZSxRdCl8MCxfPV8rTWF0aC5pbXVsKExlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsR3QpfDApK01hdGguaW11bChOZSxtdCl8MCxDPUMrTWF0aC5pbXVsKE5lLEd0KXwwO3ZhciB5cj0oaGUrKF89XytNYXRoLmltdWwoT2Us'@;
put 'QnQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxibil8MCkrTWF0aC5pbXVsKEhlLEJ0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxibil8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKGx0LHRuKSxwPShwPU1h'@;
put 'dGguaW11bChsdCxabikpK01hdGguaW11bChDdCx0bil8MCxDPU1hdGguaW11bChDdCxabiksXz1fK01hdGguaW11bChBZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLGZuKXwwKStNYXRoLmltdWwoQmUscHQpfDAsQz1DK01hdGguaW11bChCZSxmbil8MCxfPV8rTWF0aC5pbXVsKEdlLE10'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsWXQpfDApK01hdGguaW11bChkdCxNdCl8MCxDPUMrTWF0aC5pbXVsKGR0LFl0KXwwLF89XytNYXRoLmltdWwoUmUsanQpfDAscD0ocD1wK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKGV0LGp0KXwwLEM9QytNYXRoLmltdWwoZXQscG4pfDAs'@;
put 'Xz1fK01hdGguaW11bChGZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFF0KXwwKStNYXRoLmltdWwoQ2UsRXQpfDAsQz1DK01hdGguaW11bChDZSxRdCl8MCxfPV8rTWF0aC5pbXVsKFVlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoVWUsR3QpfDApK01hdGguaW11bChYZSxtdCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKFhlLEd0KXwwLF89XytNYXRoLmltdWwoTGUsQnQpfDAscD0ocD1wK01hdGguaW11bChMZSxibil8MCkrTWF0aC5pbXVsKE5lLEJ0KXwwLEM9QytNYXRoLmltdWwoTmUsYm4pfDA7dmFyIElpPShoZSsoXz1fK01hdGguaW11bChPZSxlbil8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKE9lLFBuKXwwKStNYXRoLmltdWwoSGUsZW4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEhlLFBuKXwwKSsocD4+PjEzKXwwKSsoSWk+Pj4yNil8MCxJaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoUnQsdG4pLHA9KHA9TWF0aC5pbXVsKFJ0LFpuKSkrTWF0aC5pbXVs'@;
put 'KFh0LHRuKXwwLEM9TWF0aC5pbXVsKFh0LFpuKSxfPV8rTWF0aC5pbXVsKGx0LHB0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsZm4pfDApK01hdGguaW11bChDdCxwdCl8MCxDPUMrTWF0aC5pbXVsKEN0LGZuKXwwLF89XytNYXRoLmltdWwoQWUsTXQpfDAscD0ocD1wK01hdGguaW11bChBZSxZ'@;
put 'dCl8MCkrTWF0aC5pbXVsKEJlLE10KXwwLEM9QytNYXRoLmltdWwoQmUsWXQpfDAsXz1fK01hdGguaW11bChHZSxqdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLHBuKXwwKStNYXRoLmltdWwoZHQsanQpfDAsQz1DK01hdGguaW11bChkdCxwbil8MCxfPV8rTWF0aC5pbXVsKFJlLEV0KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoUmUsUXQpfDApK01hdGguaW11bChldCxFdCl8MCxDPUMrTWF0aC5pbXVsKGV0LFF0KXwwLF89XytNYXRoLmltdWwoRmUsbXQpfDAscD0ocD1wK01hdGguaW11bChGZSxHdCl8MCkrTWF0aC5pbXVsKENlLG10KXwwLEM9QytNYXRoLmltdWwoQ2UsR3QpfDAsXz1fK01h'@;
put 'dGguaW11bChVZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLGJuKXwwKStNYXRoLmltdWwoWGUsQnQpfDAsQz1DK01hdGguaW11bChYZSxibil8MCxfPV8rTWF0aC5pbXVsKExlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsUG4pfDApK01hdGguaW11bChOZSxlbil8MCxDPUMrTWF0aC5p'@;
put 'bXVsKE5lLFBuKXwwO3ZhciBubz0oaGUrKF89XytNYXRoLmltdWwoT2UsJHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxXbil8MCkrTWF0aC5pbXVsKEhlLCR0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxXbil8MCkrKHA+Pj4xMyl8MCkrKG5vPj4+MjYp'@;
put 'fDAsbm8mPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LHRuKSxwPShwPU1hdGguaW11bCh6dCxabikpK01hdGguaW11bCh2bix0bil8MCxDPU1hdGguaW11bCh2bixabiksXz1fK01hdGguaW11bChSdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LGZuKXwwKStNYXRoLmltdWwoWHQscHQpfDAs'@;
put 'Qz1DK01hdGguaW11bChYdCxmbil8MCxfPV8rTWF0aC5pbXVsKGx0LE10KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsWXQpfDApK01hdGguaW11bChDdCxNdCl8MCxDPUMrTWF0aC5pbXVsKEN0LFl0KXwwLF89XytNYXRoLmltdWwoQWUsanQpfDAscD0ocD1wK01hdGguaW11bChBZSxwbil8MCkr'@;
put 'TWF0aC5pbXVsKEJlLGp0KXwwLEM9QytNYXRoLmltdWwoQmUscG4pfDAsXz1fK01hdGguaW11bChHZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFF0KXwwKStNYXRoLmltdWwoZHQsRXQpfDAsQz1DK01hdGguaW11bChkdCxRdCl8MCxfPV8rTWF0aC5pbXVsKFJlLG10KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoUmUsR3QpfDApK01hdGguaW11bChldCxtdCl8MCxDPUMrTWF0aC5pbXVsKGV0LEd0KXwwLF89XytNYXRoLmltdWwoRmUsQnQpfDAscD0ocD1wK01hdGguaW11bChGZSxibil8MCkrTWF0aC5pbXVsKENlLEJ0KXwwLEM9QytNYXRoLmltdWwoQ2UsYm4pfDAsXz1fK01hdGguaW11'@;
put 'bChVZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKFVlLFBuKXwwKStNYXRoLmltdWwoWGUsZW4pfDAsQz1DK01hdGguaW11bChYZSxQbil8MCxfPV8rTWF0aC5pbXVsKExlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsV24pfDApK01hdGguaW11bChOZSwkdCl8MCxDPUMrTWF0aC5pbXVsKE5l'@;
put 'LFduKXwwO3ZhciB6bj0oaGUrKF89XytNYXRoLmltdWwoT2UsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxubil8MCkrTWF0aC5pbXVsKEhlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxubil8MCkrKHA+Pj4xMyl8MCkrKHpuPj4+MjYpfDAsem4m'@;
put 'PTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LHB0KSxwPShwPU1hdGguaW11bCh6dCxmbikpK01hdGguaW11bCh2bixwdCl8MCxDPU1hdGguaW11bCh2bixmbiksXz1fK01hdGguaW11bChSdCxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFl0KXwwKStNYXRoLmltdWwoWHQsTXQpfDAsQz1DK01h'@;
put 'dGguaW11bChYdCxZdCl8MCxfPV8rTWF0aC5pbXVsKGx0LGp0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQscG4pfDApK01hdGguaW11bChDdCxqdCl8MCxDPUMrTWF0aC5pbXVsKEN0LHBuKXwwLF89XytNYXRoLmltdWwoQWUsRXQpfDAscD0ocD1wK01hdGguaW11bChBZSxRdCl8MCkrTWF0aC5p'@;
put 'bXVsKEJlLEV0KXwwLEM9QytNYXRoLmltdWwoQmUsUXQpfDAsXz1fK01hdGguaW11bChHZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLEd0KXwwKStNYXRoLmltdWwoZHQsbXQpfDAsQz1DK01hdGguaW11bChkdCxHdCl8MCxfPV8rTWF0aC5pbXVsKFJlLEJ0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoUmUsYm4pfDApK01hdGguaW11bChldCxCdCl8MCxDPUMrTWF0aC5pbXVsKGV0LGJuKXwwLF89XytNYXRoLmltdWwoRmUsZW4pfDAscD0ocD1wK01hdGguaW11bChGZSxQbil8MCkrTWF0aC5pbXVsKENlLGVuKXwwLEM9QytNYXRoLmltdWwoQ2UsUG4pfDAsXz1fK01hdGguaW11bChVZSwk'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFduKXwwKStNYXRoLmltdWwoWGUsJHQpfDAsQz1DK01hdGguaW11bChYZSxXbil8MDt2YXIgWmk9KGhlKyhfPV8rTWF0aC5pbXVsKExlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoTGUsbm4pfDApK01hdGguaW11bChOZSxsbil8'@;
put 'MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoTmUsbm4pfDApKyhwPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxNdCkscD0ocD1NYXRoLmltdWwoenQsWXQpKStNYXRoLmltdWwodm4sTXQpfDAsQz1NYXRoLmltdWwodm4sWXQpLF89XytNYXRo'@;
put 'LmltdWwoUnQsanQpfDAscD0ocD1wK01hdGguaW11bChSdCxwbil8MCkrTWF0aC5pbXVsKFh0LGp0KXwwLEM9QytNYXRoLmltdWwoWHQscG4pfDAsXz1fK01hdGguaW11bChsdCxFdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFF0KXwwKStNYXRoLmltdWwoQ3QsRXQpfDAsQz1DK01hdGguaW11'@;
put 'bChDdCxRdCl8MCxfPV8rTWF0aC5pbXVsKEFlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsR3QpfDApK01hdGguaW11bChCZSxtdCl8MCxDPUMrTWF0aC5pbXVsKEJlLEd0KXwwLF89XytNYXRoLmltdWwoR2UsQnQpfDAscD0ocD1wK01hdGguaW11bChHZSxibil8MCkrTWF0aC5pbXVsKGR0'@;
put 'LEJ0KXwwLEM9QytNYXRoLmltdWwoZHQsYm4pfDAsXz1fK01hdGguaW11bChSZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKFJlLFBuKXwwKStNYXRoLmltdWwoZXQsZW4pfDAsQz1DK01hdGguaW11bChldCxQbil8MCxfPV8rTWF0aC5pbXVsKEZlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUs'@;
put 'V24pfDApK01hdGguaW11bChDZSwkdCl8MCxDPUMrTWF0aC5pbXVsKENlLFduKXwwO3ZhciBXaT0oaGUrKF89XytNYXRoLmltdWwoVWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChVZSxubil8MCkrTWF0aC5pbXVsKFhlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGgu'@;
put 'aW11bChYZSxubil8MCkrKHA+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LGp0KSxwPShwPU1hdGguaW11bCh6dCxwbikpK01hdGguaW11bCh2bixqdCl8MCxDPU1hdGguaW11bCh2bixwbiksXz1fK01hdGguaW11bChSdCxFdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFJ0LFF0KXwwKStNYXRoLmltdWwoWHQsRXQpfDAsQz1DK01hdGguaW11bChYdCxRdCl8MCxfPV8rTWF0aC5pbXVsKGx0LG10KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsR3QpfDApK01hdGguaW11bChDdCxtdCl8MCxDPUMrTWF0aC5pbXVsKEN0LEd0KXwwLF89XytNYXRoLmltdWwo'@;
put 'QWUsQnQpfDAscD0ocD1wK01hdGguaW11bChBZSxibil8MCkrTWF0aC5pbXVsKEJlLEJ0KXwwLEM9QytNYXRoLmltdWwoQmUsYm4pfDAsXz1fK01hdGguaW11bChHZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKEdlLFBuKXwwKStNYXRoLmltdWwoZHQsZW4pfDAsQz1DK01hdGguaW11bChkdCxQ'@;
put 'bil8MCxfPV8rTWF0aC5pbXVsKFJlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUsV24pfDApK01hdGguaW11bChldCwkdCl8MCxDPUMrTWF0aC5pbXVsKGV0LFduKXwwO3ZhciBvbz0oaGUrKF89XytNYXRoLmltdWwoRmUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChGZSxu'@;
put 'bil8MCkrTWF0aC5pbXVsKENlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChDZSxubil8MCkrKHA+Pj4xMyl8MCkrKG9vPj4+MjYpfDAsb28mPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LEV0KSxwPShwPU1hdGguaW11bCh6dCxRdCkpK01hdGguaW11bCh2bixFdCl8MCxDPU1h'@;
put 'dGguaW11bCh2bixRdCksXz1fK01hdGguaW11bChSdCxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LEd0KXwwKStNYXRoLmltdWwoWHQsbXQpfDAsQz1DK01hdGguaW11bChYdCxHdCl8MCxfPV8rTWF0aC5pbXVsKGx0LEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsYm4pfDApK01hdGguaW11'@;
put 'bChDdCxCdCl8MCxDPUMrTWF0aC5pbXVsKEN0LGJuKXwwLF89XytNYXRoLmltdWwoQWUsZW4pfDAscD0ocD1wK01hdGguaW11bChBZSxQbil8MCkrTWF0aC5pbXVsKEJlLGVuKXwwLEM9QytNYXRoLmltdWwoQmUsUG4pfDAsXz1fK01hdGguaW11bChHZSwkdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KEdlLFduKXwwKStNYXRoLmltdWwoZHQsJHQpfDAsQz1DK01hdGguaW11bChkdCxXbil8MDt2YXIgaG89KGhlKyhfPV8rTWF0aC5pbXVsKFJlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUmUsbm4pfDApK01hdGguaW11bChldCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytN'@;
put 'YXRoLmltdWwoZXQsbm4pfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxtdCkscD0ocD1NYXRoLmltdWwoenQsR3QpKStNYXRoLmltdWwodm4sbXQpfDAsQz1NYXRoLmltdWwodm4sR3QpLF89XytNYXRoLmltdWwoUnQsQnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChSdCxibil8MCkrTWF0aC5pbXVsKFh0LEJ0KXwwLEM9QytNYXRoLmltdWwoWHQsYm4pfDAsXz1fK01hdGguaW11bChsdCxlbil8MCxwPShwPXArTWF0aC5pbXVsKGx0LFBuKXwwKStNYXRoLmltdWwoQ3QsZW4pfDAsQz1DK01hdGguaW11bChDdCxQbil8MCxfPV8rTWF0aC5p'@;
put 'bXVsKEFlLCR0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsV24pfDApK01hdGguaW11bChCZSwkdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFduKXwwO3ZhciBMcj0oaGUrKF89XytNYXRoLmltdWwoR2UsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChHZSxubil8MCkrTWF0aC5pbXVs'@;
put 'KGR0LGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChkdCxubil8MCkrKHA+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LEJ0KSxwPShwPU1hdGguaW11bCh6dCxibikpK01hdGguaW11bCh2bixCdCl8MCxDPU1hdGguaW11bCh2bixibiks'@;
put 'Xz1fK01hdGguaW11bChSdCxlbil8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFBuKXwwKStNYXRoLmltdWwoWHQsZW4pfDAsQz1DK01hdGguaW11bChYdCxQbil8MCxfPV8rTWF0aC5pbXVsKGx0LCR0KXwwLHA9KHA9cCtNYXRoLmltdWwobHQsV24pfDApK01hdGguaW11bChDdCwkdCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKEN0LFduKXwwO3ZhciBCaT0oaGUrKF89XytNYXRoLmltdWwoQWUsbG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChBZSxubil8MCkrTWF0aC5pbXVsKEJlLGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChCZSxubil8MCkrKHA+Pj4xMyl8MCkrKEJp'@;
put 'Pj4+MjYpfDAsQmkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKHp0LGVuKSxwPShwPU1hdGguaW11bCh6dCxQbikpK01hdGguaW11bCh2bixlbil8MCxDPU1hdGguaW11bCh2bixQbiksXz1fK01hdGguaW11bChSdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFJ0LFduKXwwKStNYXRoLmltdWwoWHQs'@;
put 'JHQpfDAsQz1DK01hdGguaW11bChYdCxXbil8MDt2YXIgTG89KGhlKyhfPV8rTWF0aC5pbXVsKGx0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobHQsbm4pfDApK01hdGguaW11bChDdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQ3Qsbm4pfDApKyhwPj4+'@;
put 'MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCwkdCkscD0ocD1NYXRoLmltdWwoenQsV24pKStNYXRoLmltdWwodm4sJHQpfDAsQz1NYXRoLmltdWwodm4sV24pO3ZhciBLbz0oaGUrKF89XytNYXRoLmltdWwoUnQsbG4pfDApfDApKygoODE5MSYocD0ocD1w'@;
put 'K01hdGguaW11bChSdCxubil8MCkrTWF0aC5pbXVsKFh0LGxuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChYdCxubil8MCkrKHA+Pj4xMyl8MCkrKEtvPj4+MjYpfDAsS28mPTY3MTA4ODYzO3ZhciBlcz0oaGUrKF89TWF0aC5pbXVsKHp0LGxuKSl8MCkrKCg4MTkxJihwPShwPU1h'@;
put 'dGguaW11bCh6dCxubikpK01hdGguaW11bCh2bixsbil8MCkpPDwxMyl8MDtyZXR1cm4gaGU9KChDPU1hdGguaW11bCh2bixubikpKyhwPj4+MTMpfDApKyhlcz4+PjI2KXwwLGVzJj02NzEwODg2Myx1ZVswXT11aSx1ZVsxXT1Bcix1ZVsyXT1tcix1ZVszXT15aSx1ZVs0XT0kcix1ZVs1XT1K'@;
put 'aSx1ZVs2XT15cix1ZVs3XT1JaSx1ZVs4XT1ubyx1ZVs5XT16bix1ZVsxMF09WmksdWVbMTFdPVdpLHVlWzEyXT1vbyx1ZVsxM109aG8sdWVbMTRdPUxyLHVlWzE1XT1CaSx1ZVsxNl09TG8sdWVbMTddPUtvLHVlWzE4XT1lcywwIT09aGUmJih1ZVsxOV09aGUseC5sZW5ndGgrKykseH07ZnVu'@;
put 'Y3Rpb24gYWUoZyxTLHgpe3JldHVybihuZXcgc2UpLm11bHAoZyxTLHgpfWZ1bmN0aW9uIHNlKGcsUyl7dGhpcy54PWcsdGhpcy55PVN9TWF0aC5pbXVsfHwodGU9USksay5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oZyxTKXt2YXIgXz10aGlzLmxlbmd0aCtnLmxlbmd0aDtyZXR1cm4gMTA9'@;
put 'PT10aGlzLmxlbmd0aCYmMTA9PT1nLmxlbmd0aD90ZSh0aGlzLGcsUyk6Xzw2Mz9RKHRoaXMsZyxTKTpfPDEwMjQ/ZnVuY3Rpb24ocCxDLEspe0submVnYXRpdmU9Qy5uZWdhdGl2ZV5wLm5lZ2F0aXZlLEsubGVuZ3RoPXAubGVuZ3RoK0MubGVuZ3RoO2Zvcih2YXIgbmU9MCx1ZT0wLGhlPTA7'@;
put 'aGU8Sy5sZW5ndGgtMTtoZSsrKXt2YXIgeGU9dWU7dWU9MDtmb3IodmFyIE9lPTY3MTA4ODYzJm5lLEhlPU1hdGgubWluKGhlLEMubGVuZ3RoLTEpLEVlPU1hdGgubWF4KDAsaGUtcC5sZW5ndGgrMSk7RWU8PUhlO0VlKyspe3ZhciBOZT0oMHxwLndvcmRzW2hlLUVlXSkqKDB8Qy53b3Jkc1tF'@;
put 'ZV0pLEtlPTY3MTA4ODYzJk5lO09lPTY3MTA4ODYzJihLZT1LZStPZXwwKSx1ZSs9KHhlPSh4ZT14ZSsoTmUvNjcxMDg4NjR8MCl8MCkrKEtlPj4+MjYpfDApPj4+MjYseGUmPTY3MTA4ODYzfUsud29yZHNbaGVdPU9lLG5lPXhlLHhlPXVlfXJldHVybiAwIT09bmU/Sy53b3Jkc1toZV09bmU6'@;
put 'Sy5sZW5ndGgtLSxLLnN0cmlwKCl9KHRoaXMsZyxTKTphZSh0aGlzLGcsUyl9LHNlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKGcpe2Zvcih2YXIgUz1uZXcgQXJyYXkoZykseD1rLnByb3RvdHlwZS5fY291bnRCaXRzKGcpLTEsXz0wO188ZztfKyspU1tfXT10aGlzLnJldkJpbihfLHgs'@;
put 'Zyk7cmV0dXJuIFN9LHNlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oZyxTLHgpe2lmKDA9PT1nfHxnPT09eC0xKXJldHVybiBnO2Zvcih2YXIgXz0wLHA9MDtwPFM7cCsrKV98PSgxJmcpPDxTLXAtMSxnPj49MTtyZXR1cm4gX30sc2UucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oZyxT'@;
put 'LHgsXyxwLEMpe2Zvcih2YXIgSz0wO0s8QztLKyspX1tLXT1TW2dbS11dLHBbS109eFtnW0tdXX0sc2UucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihnLFMseCxfLHAsQyl7dGhpcy5wZXJtdXRlKEMsZyxTLHgsXyxwKTtmb3IodmFyIEs9MTtLPHA7Szw8PTEpZm9yKHZhciBuZT1LPDwx'@;
put 'LHVlPU1hdGguY29zKDIqTWF0aC5QSS9uZSksaGU9TWF0aC5zaW4oMipNYXRoLlBJL25lKSx4ZT0wO3hlPHA7eGUrPW5lKWZvcih2YXIgT2U9dWUsSGU9aGUsRWU9MDtFZTxLO0VlKyspe3ZhciBMZT14W3hlK0VlXSxOZT1fW3hlK0VlXSxLZT14W3hlK0VlK0tdLFVlPV9beGUrRWUrS10sWGU9'@;
put 'T2UqS2UtSGUqVWU7VWU9T2UqVWUrSGUqS2UseFt4ZStFZV09TGUrKEtlPVhlKSxfW3hlK0VlXT1OZStVZSx4W3hlK0VlK0tdPUxlLUtlLF9beGUrRWUrS109TmUtVWUsRWUhPT1uZSYmKFhlPXVlKk9lLWhlKkhlLEhlPXVlKkhlK2hlKk9lLE9lPVhlKX19LHNlLnByb3RvdHlwZS5ndWVzc0xl'@;
put 'bjEzYj1mdW5jdGlvbihnLFMpe3ZhciB4PTF8TWF0aC5tYXgoUyxnKSxfPTEmeCxwPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpcCsrO3JldHVybiAxPDxwKzErX30sc2UucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihnLFMseCl7aWYoISh4PD0xKSlmb3IodmFyIF89MDtfPHgvMjtfKysp'@;
put 'e3ZhciBwPWdbX107Z1tfXT1nW3gtXy0xXSxnW3gtXy0xXT1wLHA9U1tfXSxTW19dPS1TW3gtXy0xXSxTW3gtXy0xXT0tcH19LHNlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oZyxTKXtmb3IodmFyIHg9MCxfPTA7XzxTLzI7XysrKXt2YXIgcD04MTkyKk1hdGgucm91bmQoZ1sy'@;
put 'Kl8rMV0vUykrTWF0aC5yb3VuZChnWzIqX10vUykreDtnW19dPTY3MTA4ODYzJnAseD1wPDY3MTA4ODY0PzA6cC82NzEwODg2NHwwfXJldHVybiBnfSxzZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihnLFMseCxfKXtmb3IodmFyIHA9MCxDPTA7QzxTO0MrKyl4WzIqQ109ODE5MSYo'@;
put 'cCs9MHxnW0NdKSx4WzIqQysxXT04MTkxJihwPj4+PTEzKSxwPj4+PTEzO2ZvcihDPTIqUztDPF87KytDKXhbQ109MDtJKDA9PT1wKSxJKCEoLTgxOTImcCkpfSxzZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihnKXtmb3IodmFyIFM9bmV3IEFycmF5KGcpLHg9MDt4PGc7eCsrKVNbeF09MDty'@;
put 'ZXR1cm4gU30sc2UucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfPTIqdGhpcy5ndWVzc0xlbjEzYihnLmxlbmd0aCxTLmxlbmd0aCkscD10aGlzLm1ha2VSQlQoXyksQz10aGlzLnN0dWIoXyksSz1uZXcgQXJyYXkoXyksbmU9bmV3IEFycmF5KF8pLHVlPW5ldyBBcnJheShf'@;
put 'KSxoZT1uZXcgQXJyYXkoXykseGU9bmV3IEFycmF5KF8pLE9lPW5ldyBBcnJheShfKSxIZT14LndvcmRzO0hlLmxlbmd0aD1fLHRoaXMuY29udmVydDEzYihnLndvcmRzLGcubGVuZ3RoLEssXyksdGhpcy5jb252ZXJ0MTNiKFMud29yZHMsUy5sZW5ndGgsaGUsXyksdGhpcy50cmFuc2Zvcm0o'@;
put 'SyxDLG5lLHVlLF8scCksdGhpcy50cmFuc2Zvcm0oaGUsQyx4ZSxPZSxfLHApO2Zvcih2YXIgRWU9MDtFZTxfO0VlKyspe3ZhciBMZT1uZVtFZV0qeGVbRWVdLXVlW0VlXSpPZVtFZV07dWVbRWVdPW5lW0VlXSpPZVtFZV0rdWVbRWVdKnhlW0VlXSxuZVtFZV09TGV9cmV0dXJuIHRoaXMuY29u'@;
put 'anVnYXRlKG5lLHVlLF8pLHRoaXMudHJhbnNmb3JtKG5lLHVlLEhlLEMsXyxwKSx0aGlzLmNvbmp1Z2F0ZShIZSxDLF8pLHRoaXMubm9ybWFsaXplMTNiKEhlLF8pLHgubmVnYXRpdmU9Zy5uZWdhdGl2ZV5TLm5lZ2F0aXZlLHgubGVuZ3RoPWcubGVuZ3RoK1MubGVuZ3RoLHguc3RyaXAoKX0s'@;
put 'ay5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKGcpe3ZhciBTPW5ldyBrKG51bGwpO3JldHVybiBTLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksdGhpcy5tdWxUbyhnLFMpfSxrLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGcpe3ZhciBTPW5ldyBrKG51bGwpO3JldHVybiBT'@;
put 'LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtnLmxlbmd0aCksYWUodGhpcyxnLFMpfSxrLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oZyx0aGlzKX0say5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9m'@;
put 'IGcpLEkoZzw2NzEwODg2NCk7Zm9yKHZhciBTPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgXz0oMHx0aGlzLndvcmRzW3hdKSpnLHA9KDY3MTA4ODYzJl8pKyg2NzEwODg2MyZTKTtTPj49MjYsUys9Xy82NzEwODg2NHwwLFMrPXA+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJnB9'@;
put 'cmV0dXJuIDAhPT1TJiYodGhpcy53b3Jkc1t4XT1TLHRoaXMubGVuZ3RoKyspLHRoaXN9LGsucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihnKX0say5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxrLnBy'@;
put 'b3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxrLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyl7dmFyIFM9ZnVuY3Rpb24oQyl7Zm9yKHZhciBLPW5ldyBBcnJheShDLmJpdExlbmd0aCgpKSxuZT0wO25lPEsubGVuZ3RoO25lKyspe3ZhciBo'@;
put 'ZT1uZSUyNjtLW25lXT0oQy53b3Jkc1tuZS8yNnwwXSYxPDxoZSk+Pj5oZX1yZXR1cm4gS30oZyk7aWYoMD09PVMubGVuZ3RoKXJldHVybiBuZXcgaygxKTtmb3IodmFyIHg9dGhpcyxfPTA7XzxTLmxlbmd0aCYmMD09PVNbX107XysrLHg9eC5zcXIoKSk7aWYoKytfPFMubGVuZ3RoKWZvcih2'@;
put 'YXIgcD14LnNxcigpO188Uy5sZW5ndGg7XysrLHA9cC5zcXIoKSkwIT09U1tfXSYmKHg9eC5tdWwocCkpO3JldHVybiB4fSxrLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTLHg9ZyUyNixfPShnLXgpLzI2LHA9NjcxMDg4NjM+'@;
put 'Pj4yNi14PDwyNi14O2lmKDAhPT14KXt2YXIgQz0wO2ZvcihTPTA7Uzx0aGlzLmxlbmd0aDtTKyspe3ZhciBLPXRoaXMud29yZHNbU10mcDt0aGlzLndvcmRzW1NdPSgwfHRoaXMud29yZHNbU10pLUs8PHh8QyxDPUs+Pj4yNi14fUMmJih0aGlzLndvcmRzW1NdPUMsdGhpcy5sZW5ndGgrKyl9'@;
put 'aWYoMCE9PV8pe2ZvcihTPXRoaXMubGVuZ3RoLTE7Uz49MDtTLS0pdGhpcy53b3Jkc1tTK19dPXRoaXMud29yZHNbU107Zm9yKFM9MDtTPF87UysrKXRoaXMud29yZHNbU109MDt0aGlzLmxlbmd0aCs9X31yZXR1cm4gdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oZyl9LGsucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihnLFMseCl7dmFyIF87SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApLF89Uz8oUy1TJTI2KS8yNjowO3ZhciBwPWclMjYsQz1NYXRoLm1pbigoZy1wKS8yNix0'@;
put 'aGlzLmxlbmd0aCksSz02NzEwODg2M142NzEwODg2Mz4+PnA8PHAsbmU9eDtpZihfLT1DLF89TWF0aC5tYXgoMCxfKSxuZSl7Zm9yKHZhciB1ZT0wO3VlPEM7dWUrKyluZS53b3Jkc1t1ZV09dGhpcy53b3Jkc1t1ZV07bmUubGVuZ3RoPUN9aWYoMCE9PUMpaWYodGhpcy5sZW5ndGg+Qylmb3Io'@;
put 'dGhpcy5sZW5ndGgtPUMsdWU9MDt1ZTx0aGlzLmxlbmd0aDt1ZSsrKXRoaXMud29yZHNbdWVdPXRoaXMud29yZHNbdWUrQ107ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaGU9MDtmb3IodWU9dGhpcy5sZW5ndGgtMTt1ZT49MCYmKDAhPT1oZXx8dWU+PV8pO3VlLS0p'@;
put 'e3ZhciB4ZT0wfHRoaXMud29yZHNbdWVdO3RoaXMud29yZHNbdWVdPWhlPDwyNi1wfHhlPj4+cCxoZT14ZSZLfXJldHVybiBuZSYmMCE9PWhlJiYobmUud29yZHNbbmUubGVuZ3RoKytdPWhlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5z'@;
put 'dHJpcCgpfSxrLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihnLFMseCl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKGcsUyx4KX0say5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKGcpfSxrLnByb3RvdHlwZS51c2hs'@;
put 'bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihnKX0say5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKGcpfSxrLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihnKX0s'@;
put 'ay5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWclMjYseD0oZy1TKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8UykpfSxrLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oZyl7SSgibnVt'@;
put 'YmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciBTPWclMjYseD0oZy1TKS8yNjtyZXR1cm4gSSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PVMmJngrKyx0aGlzLmxlbmd0aD1NYXRoLm1p'@;
put 'bih4LHRoaXMubGVuZ3RoKSwwIT09UyYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Uzw8UyksdGhpcy5zdHJpcCgpKX0say5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oZyl9LGsucHJvdG90eXBl'@;
put 'LmlhZGRuPWZ1bmN0aW9uKGcpe3JldHVybiBJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDA/dGhpcy5pc3VibigtZyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxnPyh0aGlzLndvcmRzWzBdPWctKDB8dGhpcy53b3Jk'@;
put 'c1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihnKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oZyl9LGsucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihnKXt0aGlzLndvcmRzWzBdKz1nO2Zvcih2YXIgUz0wO1M8dGhpcy5s'@;
put 'ZW5ndGgmJnRoaXMud29yZHNbU10+PTY3MTA4ODY0O1MrKyl0aGlzLndvcmRzW1NdLT02NzEwODg2NCxTPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW1MrMV09MTp0aGlzLndvcmRzW1MrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsUysxKSx0aGlzfSxr'@;
put 'LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihnKXtpZihJKCJudW1iZXIiPT10eXBlb2YgZyksSShnPDY3MTA4ODY0KSxnPDApcmV0dXJuIHRoaXMuaWFkZG4oLWcpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihnKSx0aGlzLm5lZ2F0aXZl'@;
put 'PTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1nLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBTPTA7Uzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tTXTwwO1MrKyl0aGlzLndv'@;
put 'cmRzW1NdKz02NzEwODg2NCx0aGlzLndvcmRzW1MrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKGcpfSxrLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCku'@;
put 'aXN1Ym4oZyl9LGsucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LGsucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxrLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oZyxTLHgpe3Zh'@;
put 'ciBfLHA7dGhpcy5fZXhwYW5kKGcubGVuZ3RoK3gpO3ZhciBLPTA7Zm9yKF89MDtfPGcubGVuZ3RoO18rKyl7cD0oMHx0aGlzLndvcmRzW18reF0pK0s7dmFyIG5lPSgwfGcud29yZHNbX10pKlM7Sz0oKHAtPTY3MTA4ODYzJm5lKT4+MjYpLShuZS82NzEwODg2NHwwKSx0aGlzLndvcmRzW18r'@;
put 'eF09NjcxMDg4NjMmcH1mb3IoO188dGhpcy5sZW5ndGgteDtfKyspSz0ocD0oMHx0aGlzLndvcmRzW18reF0pK0spPj4yNix0aGlzLndvcmRzW18reF09NjcxMDg4NjMmcDtpZigwPT09SylyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihJKC0xPT09SyksSz0wLF89MDtfPHRoaXMubGVuZ3RoO18r'@;
put 'KylLPShwPS0oMHx0aGlzLndvcmRzW19dKStLKT4+MjYsdGhpcy53b3Jkc1tfXT02NzEwODg2MyZwO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihnLFMpe3ZhciB4LF89dGhpcy5jbG9uZSgpLHA9ZyxDPTB8cC53b3Jk'@;
put 'c1twLmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoQykpJiYocD1wLnVzaGxuKHgpLF8uaXVzaGxuKHgpLEM9MHxwLndvcmRzW3AubGVuZ3RoLTFdKTt2YXIgSyxuZT1fLmxlbmd0aC1wLmxlbmd0aDtpZigibW9kIiE9PVMpeyhLPW5ldyBrKG51bGwpKS5sZW5ndGg9bmUrMSxL'@;
put 'LndvcmRzPW5ldyBBcnJheShLLmxlbmd0aCk7Zm9yKHZhciB1ZT0wO3VlPEsubGVuZ3RoO3VlKyspSy53b3Jkc1t1ZV09MH12YXIgaGU9Xy5jbG9uZSgpLl9pc2hsbnN1Ym11bChwLDEsbmUpOzA9PT1oZS5uZWdhdGl2ZSYmKF89aGUsSyYmKEsud29yZHNbbmVdPTEpKTtmb3IodmFyIHhlPW5l'@;
put 'LTE7eGU+PTA7eGUtLSl7dmFyIE9lPTY3MTA4ODY0KigwfF8ud29yZHNbcC5sZW5ndGgreGVdKSsoMHxfLndvcmRzW3AubGVuZ3RoK3hlLTFdKTtmb3IoT2U9TWF0aC5taW4oT2UvQ3wwLDY3MTA4ODYzKSxfLl9pc2hsbnN1Ym11bChwLE9lLHhlKTswIT09Xy5uZWdhdGl2ZTspT2UtLSxfLm5l'@;
put 'Z2F0aXZlPTAsXy5faXNobG5zdWJtdWwocCwxLHhlKSxfLmlzWmVybygpfHwoXy5uZWdhdGl2ZV49MSk7SyYmKEsud29yZHNbeGVdPU9lKX1yZXR1cm4gSyYmSy5zdHJpcCgpLF8uc3RyaXAoKSwiZGl2IiE9PVMmJjAhPT14JiZfLml1c2hybih4KSx7ZGl2Okt8fG51bGwsbW9kOl99fSxrLnBy'@;
put 'b3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oZyxTLHgpe3JldHVybiBJKCFnLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IGsoMCksbW9kOm5ldyBrKDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PWcubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoZyxTKSwibW9kIiE9PVMm'@;
put 'JihfPUMuZGl2Lm5lZygpKSwiZGl2IiE9PVMmJihwPUMubW9kLm5lZygpLHgmJjAhPT1wLm5lZ2F0aXZlJiZwLmlhZGQoZykpLHtkaXY6Xyxtb2Q6cH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZT8oQz10aGlzLmRpdm1vZChnLm5lZygpLFMpLCJtb2QiIT09UyYmKF89Qy5k'@;
put 'aXYubmVnKCkpLHtkaXY6Xyxtb2Q6Qy5tb2R9KTp0aGlzLm5lZ2F0aXZlJmcubmVnYXRpdmU/KEM9dGhpcy5uZWcoKS5kaXZtb2QoZy5uZWcoKSxTKSwiZGl2IiE9PVMmJihwPUMubW9kLm5lZygpLHgmJjAhPT1wLm5lZ2F0aXZlJiZwLmlzdWIoZykpLHtkaXY6Qy5kaXYsbW9kOnB9KTpnLmxl'@;
put 'bmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoZyk8MD97ZGl2Om5ldyBrKDApLG1vZDp0aGlzfToxPT09Zy5sZW5ndGg/ImRpdiI9PT1TP3tkaXY6dGhpcy5kaXZuKGcud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVM/e2RpdjpudWxsLG1vZDpuZXcgayh0aGlzLm1vZG4oZy53b3Jkc1sw'@;
put 'XSkpfTp7ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bmV3IGsodGhpcy5tb2RuKGcud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihnLFMpO3ZhciBfLHAsQ30say5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJkaXYiLCExKS5kaXZ9LGsucHJv'@;
put 'dG90eXBlLm1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMSkubW9kfSxrLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmRpdm1vZChnLCJtb2QiLCEwKS5tb2R9LGsucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGcpe3ZhciBTPXRo'@;
put 'aXMuZGl2bW9kKGcpO2lmKFMubW9kLmlzWmVybygpKXJldHVybiBTLmRpdjt2YXIgeD0wIT09Uy5kaXYubmVnYXRpdmU/Uy5tb2QuaXN1YihnKTpTLm1vZCxfPWcudXNocm4oMSkscD1nLmFuZGxuKDEpLEM9eC5jbXAoXyk7cmV0dXJuIEM8MHx8MT09PXAmJjA9PT1DP1MuZGl2OjAhPT1TLmRp'@;
put 'di5uZWdhdGl2ZT9TLmRpdi5pc3VibigxKTpTLmRpdi5pYWRkbigxKX0say5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihnKXtJKGc8PTY3MTA4ODYzKTtmb3IodmFyIFM9NjcxMDg4NjQlZyx4PTAsXz10aGlzLmxlbmd0aC0xO18+PTA7Xy0tKXg9KFMqeCsoMHx0aGlzLndvcmRzW19dKSklZzty'@;
put 'ZXR1cm4geH0say5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBTPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgXz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpTO3RoaXMud29yZHNbeF09Xy9nfDAsUz1fJWd9cmV0dXJuIHRoaXMu'@;
put 'c3RyaXAoKX0say5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKGcpfSxrLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBTPXRoaXMseD1nLmNsb25lKCk7Uz0wIT09Uy5uZWdh'@;
put 'dGl2ZT9TLnVtb2QoZyk6Uy5jbG9uZSgpO2Zvcih2YXIgXz1uZXcgaygxKSxwPW5ldyBrKDApLEM9bmV3IGsoMCksSz1uZXcgaygxKSxuZT0wO1MuaXNFdmVuKCkmJnguaXNFdmVuKCk7KVMuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrbmU7Zm9yKHZhciB1ZT14LmNsb25lKCksaGU9Uy5jbG9u'@;
put 'ZSgpOyFTLmlzWmVybygpOyl7Zm9yKHZhciB4ZT0wLE9lPTE7IShTLndvcmRzWzBdJk9lKSYmeGU8MjY7Kyt4ZSxPZTw8PTEpO2lmKHhlPjApZm9yKFMuaXVzaHJuKHhlKTt4ZS0tID4wOykoXy5pc09kZCgpfHxwLmlzT2RkKCkpJiYoXy5pYWRkKHVlKSxwLmlzdWIoaGUpKSxfLml1c2hybigx'@;
put 'KSxwLml1c2hybigxKTtmb3IodmFyIEhlPTAsRWU9MTshKHgud29yZHNbMF0mRWUpJiZIZTwyNjsrK0hlLEVlPDw9MSk7aWYoSGU+MClmb3IoeC5pdXNocm4oSGUpO0hlLS0gPjA7KShDLmlzT2RkKCl8fEsuaXNPZGQoKSkmJihDLmlhZGQodWUpLEsuaXN1YihoZSkpLEMuaXVzaHJuKDEpLEsu'@;
put 'aXVzaHJuKDEpO1MuY21wKHgpPj0wPyhTLmlzdWIoeCksXy5pc3ViKEMpLHAuaXN1YihLKSk6KHguaXN1YihTKSxDLmlzdWIoXyksSy5pc3ViKHApKX1yZXR1cm57YTpDLGI6SyxnY2Q6eC5pdXNobG4obmUpfX0say5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRp'@;
put 'dmUpLEkoIWcuaXNaZXJvKCkpO3ZhciBTPXRoaXMseD1nLmNsb25lKCk7Uz0wIT09Uy5uZWdhdGl2ZT9TLnVtb2QoZyk6Uy5jbG9uZSgpO2Zvcih2YXIgXyxwPW5ldyBrKDEpLEM9bmV3IGsoMCksSz14LmNsb25lKCk7Uy5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBuZT0wLHVl'@;
put 'PTE7IShTLndvcmRzWzBdJnVlKSYmbmU8MjY7KytuZSx1ZTw8PTEpO2lmKG5lPjApZm9yKFMuaXVzaHJuKG5lKTtuZS0tID4wOylwLmlzT2RkKCkmJnAuaWFkZChLKSxwLml1c2hybigxKTtmb3IodmFyIGhlPTAseGU9MTshKHgud29yZHNbMF0meGUpJiZoZTwyNjsrK2hlLHhlPDw9MSk7aWYo'@;
put 'aGU+MClmb3IoeC5pdXNocm4oaGUpO2hlLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEspLEMuaXVzaHJuKDEpO1MuY21wKHgpPj0wPyhTLmlzdWIoeCkscC5pc3ViKEMpKTooeC5pc3ViKFMpLEMuaXN1YihwKSl9cmV0dXJuKF89MD09PVMuY21wbigxKT9wOkMpLmNtcG4oMCk8MCYmXy5pYWRk'@;
put 'KGcpLF99LGsucHJvdG90eXBlLmdjZD1mdW5jdGlvbihnKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBnLmFicygpO2lmKGcuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFM9dGhpcy5jbG9uZSgpLHg9Zy5jbG9uZSgpO1MubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBf'@;
put 'PTA7Uy5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtfKyspUy5pdXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1MuaXNFdmVuKCk7KVMuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIHA9Uy5jbXAoeCk7aWYocDwwKXt2YXIgQz1TO1M9eCx4PUN9ZWxzZSBp'@;
put 'ZigwPT09cHx8MD09PXguY21wbigxKSlicmVhaztTLmlzdWIoeCl9cmV0dXJuIHguaXVzaGxuKF8pfSxrLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmVnY2QoZykuYS51bW9kKGcpfSxrLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53'@;
put 'b3Jkc1swXSl9LGsucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0say5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMud29yZHNbMF0mZ30say5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oZyl7SSgibnVtYmVyIj09dHlw'@;
put 'ZW9mIGcpO3ZhciBTPWclMjYseD0oZy1TKS8yNixfPTE8PFM7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PV8sdGhpcztmb3IodmFyIHA9XyxDPXg7MCE9PXAmJkM8dGhpcy5sZW5ndGg7QysrKXt2YXIgSz0wfHRoaXMud29yZHNbQ107'@;
put 'cD0oSys9cCk+Pj4yNix0aGlzLndvcmRzW0NdPUsmPTY3MTA4ODYzfXJldHVybiAwIT09cCYmKHRoaXMud29yZHNbQ109cCx0aGlzLmxlbmd0aCsrKSx0aGlzfSxrLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0s'@;
put 'ay5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihnKXt2YXIgUyx4PWc8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIXgpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJngpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpUz0xO2Vsc2V7eCYmKGc9LWcpLEkoZzw9Njcx'@;
put 'MDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIF89MHx0aGlzLndvcmRzWzBdO1M9Xz09PWc/MDpfPGc/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtUzpTfSxrLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oZyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZl'@;
put 'KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgUz10aGlzLnVjbXAoZyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30say5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihnKXtpZih0aGlzLmxlbmd0aD5nLmxlbmd0aClyZXR1'@;
put 'cm4gMTtpZih0aGlzLmxlbmd0aDxnLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFM9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBfPTB8dGhpcy53b3Jkc1t4XSxwPTB8Zy53b3Jkc1t4XTtpZihfIT09cCl7XzxwP1M9LTE6Xz5wJiYoUz0xKTticmVha319cmV0dXJuIFN9LGsucHJv'@;
put 'dG90eXBlLmd0bj1mdW5jdGlvbihnKXtyZXR1cm4gMT09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcChnKX0say5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXBuKGcpPj0wfSxrLnByb3RvdHlwZS5n'@;
put 'dGU9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wKGcpPj0wfSxrLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oZyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmx0PWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXAoZyl9LGsucHJvdG90eXBlLmx0ZW49ZnVuY3Rp'@;
put 'b24oZyl7cmV0dXJuIHRoaXMuY21wbihnKTw9MH0say5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKTw9MH0say5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKGcpe3JldHVybiAwPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5lcT1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gMD09PXRoaXMuY21wKGcpfSxrLnJlZD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IEgoZyl9LGsucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLEkoMD09PXRoaXMubmVnYXRpdmUs'@;
put 'InJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKGcpfSxrLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRl'@;
put 'eHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0say5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnJlZD1nLHRoaXN9LGsucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKGcpe3JldHVybiBJKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiBy'@;
put 'ZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKGcpfSxrLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxnKX0say5wcm90b3R5cGUucmVkSUFk'@;
put 'ZD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxnKX0say5wcm90b3R5cGUucmVk'@;
put 'U2hsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsZyksdGhpcy5yZWQubXVsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy'@;
put 'aWZ5Mih0aGlzLGcpLHRoaXMucmVkLmltdWwodGhpcyxnKX0say5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9'@;
put 'LGsucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIEkodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0say5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LGsucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'X3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQmJiFnLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxnKX07dmFyIGRl'@;
put 'PXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gbGUoZyxTKXt0aGlzLm5hbWU9Zyx0aGlzLnA9bmV3IGsoUywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IGsoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRo'@;
put 'aXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGNlKCl7bGUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBHKCl7bGUuY2FsbCh0aGlzLCJwMjI0IiwiZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiB5KCl7bGUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBMKCl7'@;
put 'bGUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBIKGcpe2lmKCJzdHJpbmciPT10eXBlb2YgZyl7dmFyIFM9ay5fcHJpbWUoZyk7dGhpcy5tPVMucCx0aGlzLnBy'@;
put 'aW1lPVN9ZWxzZSBJKGcuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Zyx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gaihnKXtILmNhbGwodGhpcyxnKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5z'@;
put 'aGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBrKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5k'@;
put 'aXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWxlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IGsobnVsbCk7cmV0dXJuIGcud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4v'@;
put 'MTMpKSxnfSxsZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihnKXt2YXIgUyx4PWc7ZG97dGhpcy5zcGxpdCh4LHRoaXMudG1wKSxTPSh4PSh4PXRoaXMuaW11bEsoeCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShTPnRoaXMubik7dmFyIF89Uzx0aGlzLm4/LTE6eC51'@;
put 'Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1fPyh4LndvcmRzWzBdPTAseC5sZW5ndGg9MSk6Xz4wP3guaXN1Yih0aGlzLnApOnZvaWQgMCE9PXguc3RyaXA/eC5zdHJpcCgpOnguX3N0cmlwKCkseH0sbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGcsUyl7Zy5pdXNocm4odGhpcy5uLDAsUyl9'@;
put 'LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pbXVsKHRoaXMuayl9LEUoY2UsbGUpLGNlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLFMpe2Zvcih2YXIgeD00MTk0MzAzLF89TWF0aC5taW4oZy5sZW5ndGgsOSkscD0wO3A8XztwKyspUy53b3Jkc1twXT1nLndv'@;
put 'cmRzW3BdO2lmKFMubGVuZ3RoPV8sZy5sZW5ndGg8PTkpcmV0dXJuIGcud29yZHNbMF09MCx2b2lkKGcubGVuZ3RoPTEpO3ZhciBDPWcud29yZHNbOV07Zm9yKFMud29yZHNbUy5sZW5ndGgrK109QyZ4LHA9MTA7cDxnLmxlbmd0aDtwKyspe3ZhciBLPTB8Zy53b3Jkc1twXTtnLndvcmRzW3At'@;
put 'MTBdPShLJngpPDw0fEM+Pj4yMixDPUt9Zy53b3Jkc1twLTEwXT1DPj4+PTIyLGcubGVuZ3RoLT0wPT09QyYmZy5sZW5ndGg+MTA/MTA6OX0sY2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2cud29yZHNbZy5sZW5ndGhdPTAsZy53b3Jkc1tnLmxlbmd0aCsxXT0wLGcubGVuZ3RoKz0y'@;
put 'O2Zvcih2YXIgUz0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIF89MHxnLndvcmRzW3hdO2cud29yZHNbeF09NjcxMDg4NjMmKFMrPTk3NypfKSxTPTY0Kl8rKFMvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1nLndvcmRzW2cubGVuZ3RoLTFdJiYoZy5sZW5ndGgtLSwwPT09Zy53b3Jkc1tnLmxl'@;
put 'bmd0aC0xXSYmZy5sZW5ndGgtLSksZ30sRShHLGxlKSxFKHksbGUpLEUoTCxsZSksTC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPTAseD0wO3g8Zy5sZW5ndGg7eCsrKXt2YXIgXz0xOSooMHxnLndvcmRzW3hdKStTLHA9NjcxMDg4NjMmXztfPj4+PTI2LGcud29yZHNb'@;
put 'eF09cCxTPV99cmV0dXJuIDAhPT1TJiYoZy53b3Jkc1tnLmxlbmd0aCsrXT1TKSxnfSxrLl9wcmltZT1mdW5jdGlvbihnKXtpZihkZVtnXSlyZXR1cm4gZGVbZ107dmFyIFM7aWYoImsyNTYiPT09ZylTPW5ldyBjZTtlbHNlIGlmKCJwMjI0Ij09PWcpUz1uZXcgRztlbHNlIGlmKCJwMTkyIj09'@;
put 'PWcpUz1uZXcgeTtlbHNle2lmKCJwMjU1MTkiIT09Zyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitnKTtTPW5ldyBMfXJldHVybiBkZVtnXT1TLFN9LEgucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKGcpe0koMD09PWcubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGgg'@;
put 'cG9zaXRpdmVzIiksSShnLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxILnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihnLFMpe0koIShnLm5lZ2F0aXZlfFMubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQmJmcucmVk'@;
put 'PT09Uy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoZykuX2ZvcmNlUmVkKHRoaXMpOmcudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sSC5w'@;
put 'cm90b3R5cGUubmVnPWZ1bmN0aW9uKGcpe3JldHVybiBnLmlzWmVybygpP2cuY2xvbmUoKTp0aGlzLm0uc3ViKGcpLl9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVyaWZ5MihnLFMpO3ZhciB4PWcuYWRkKFMpO3JldHVybiB4LmNtcCh0aGlz'@;
put 'Lm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmlhZGQoUyk7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LEgucHJvdG90eXBlLnN1'@;
put 'Yj1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLnN1YihTKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxILnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKGcsUyl7dGhpcy5fdmVyaWZ5MihnLFMpO3ZhciB4PWcuaXN1'@;
put 'YihTKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LEgucHJvdG90eXBlLnNobD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92ZXJpZnkxKGcpLHRoaXMuaW1vZChnLnVzaGxuKFMpKX0sSC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92'@;
put 'ZXJpZnkyKGcsUyksdGhpcy5pbW9kKGcuaW11bChTKSl9LEgucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLFMpe3JldHVybiB0aGlzLl92ZXJpZnkyKGcsUyksdGhpcy5pbW9kKGcubXVsKFMpKX0sSC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbXVsKGcsZy5jbG9u'@;
put 'ZSgpKX0sSC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLm11bChnLGcpfSxILnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKGcpe2lmKGcuaXNaZXJvKCkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgUz10aGlzLm0uYW5kbG4oMyk7aWYoSShTJTI9PTEpLDM9PT1TKXt2YXIgeD10'@;
put 'aGlzLm0uYWRkKG5ldyBrKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KGcseCl9Zm9yKHZhciBfPXRoaXMubS5zdWJuKDEpLHA9MDshXy5pc1plcm8oKSYmMD09PV8uYW5kbG4oMSk7KXArKyxfLml1c2hybigxKTtJKCFfLmlzWmVybygpKTt2YXIgQz1uZXcgaygxKS50b1JlZCh0aGlz'@;
put 'KSxLPUMucmVkTmVnKCksbmU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHVlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodWU9bmV3IGsoMip1ZSp1ZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHVlLG5lKS5jbXAoSyk7KXVlLnJlZElBZGQoSyk7Zm9yKHZhciBoZT10aGlzLnBvdyh1ZSxf'@;
put 'KSx4ZT10aGlzLnBvdyhnLF8uYWRkbigxKS5pdXNocm4oMSkpLE9lPXRoaXMucG93KGcsXyksSGU9cDswIT09T2UuY21wKEMpOyl7Zm9yKHZhciBFZT1PZSxMZT0wOzAhPT1FZS5jbXAoQyk7TGUrKylFZT1FZS5yZWRTcXIoKTtJKExlPEhlKTt2YXIgTmU9dGhpcy5wb3coaGUsbmV3IGsoMSku'@;
put 'aXVzaGxuKEhlLUxlLTEpKTt4ZT14ZS5yZWRNdWwoTmUpLGhlPU5lLnJlZFNxcigpLE9lPU9lLnJlZE11bChoZSksSGU9TGV9cmV0dXJuIHhlfSxILnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3ZhciBTPWcuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1TLm5lZ2F0aXZlPyhTLm5lZ2F0'@;
put 'aXZlPTAsdGhpcy5pbW9kKFMpLnJlZE5lZygpKTp0aGlzLmltb2QoUyl9LEgucHJvdG90eXBlLnBvdz1mdW5jdGlvbihnLFMpe2lmKFMuaXNaZXJvKCkpcmV0dXJuIG5ldyBrKDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1TLmNtcG4oMSkpcmV0dXJuIGcuY2xvbmUoKTt2YXIgeD1uZXcgQXJyYXko'@;
put 'MTYpO3hbMF09bmV3IGsoMSkudG9SZWQodGhpcykseFsxXT1nO2Zvcih2YXIgXz0yO188eC5sZW5ndGg7XysrKXhbX109dGhpcy5tdWwoeFtfLTFdLGcpO3ZhciBwPXhbMF0sQz0wLEs9MCxuZT1TLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bmUmJihuZT0yNiksXz1TLmxlbmd0aC0xO18+PTA7'@;
put 'Xy0tKXtmb3IodmFyIHVlPVMud29yZHNbX10saGU9bmUtMTtoZT49MDtoZS0tKXt2YXIgeGU9dWU+PmhlJjE7cCE9PXhbMF0mJihwPXRoaXMuc3FyKHApKSwwIT09eGV8fDAhPT1DPyhDPDw9MSxDfD14ZSwoND09KytLfHwwPT09XyYmMD09PWhlKSYmKHA9dGhpcy5tdWwocCx4W0NdKSxLPTAs'@;
put 'Qz0wKSk6Sz0wfW5lPTI2fXJldHVybiBwfSxILnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7dmFyIFM9Zy51bW9kKHRoaXMubSk7cmV0dXJuIFM9PT1nP1MuY2xvbmUoKTpTfSxILnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihnKXt2YXIgUz1nLmNsb25lKCk7cmV0dXJu'@;
put 'IFMucmVkPW51bGwsU30say5tb250PWZ1bmN0aW9uKGcpe3JldHVybiBuZXcgaihnKX0sRShqLEgpLGoucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcudXNobG4odGhpcy5zaGlmdCkpfSxqLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihn'@;
put 'KXt2YXIgUz10aGlzLmltb2QoZy5tdWwodGhpcy5yaW52KSk7cmV0dXJuIFMucmVkPW51bGwsU30sai5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnLFMpe2lmKGcuaXNaZXJvKCl8fFMuaXNaZXJvKCkpcmV0dXJuIGcud29yZHNbMF09MCxnLmxlbmd0aD0xLGc7dmFyIHg9Zy5pbXVsKFMpLF89'@;
put 'eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSkscD14LmlzdWIoXykuaXVzaHJuKHRoaXMuc2hpZnQpLEM9cDtyZXR1cm4gcC5jbXAodGhpcy5tKT49MD9DPXAuaXN1Yih0aGlzLm0pOnAuY21wbigwKTwwJiYoQz1wLmlhZGQo'@;
put 'dGhpcy5tKSksQy5fZm9yY2VSZWQodGhpcyl9LGoucHJvdG90eXBlLm11bD1mdW5jdGlvbihnLFMpe2lmKGcuaXNaZXJvKCl8fFMuaXNaZXJvKCkpcmV0dXJuIG5ldyBrKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1nLm11bChTKSxfPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWlu'@;
put 'dikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9eC5pc3ViKF8pLml1c2hybih0aGlzLnNoaWZ0KSxDPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Qz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKEM9cC5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxqLnBy'@;
put 'b3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmltb2QoZy5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHc9RC5ubWQodyksdGhpcyl9LDY5NDg6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1BO1AudmVyc2lvbj1EKDg1OTcpLmk4'@;
put 'LFAudXRpbHM9RCg5NTMpLFAucmFuZD1EKDk5MzEpLFAuY3VydmU9RCg4MjU0KSxQLmN1cnZlcz1EKDU0MjcpLFAuZWM9RCg3OTU0KSxQLmVkZHNhPUQoNTk4MCl9LDQ5MTg6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDM3ODUpLFU9RCg5NTMpLEk9VS5nZXROQUYsRT1VLmdldEpT'@;
put 'RixrPVUuYXNzZXJ0O2Z1bmN0aW9uIEIoVixaKXt0aGlzLnR5cGU9Vix0aGlzLnA9bmV3IFAoWi5wLDE2KSx0aGlzLnJlZD1aLnByaW1lP1AucmVkKFoucHJpbWUpOlAubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgUCgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IFAoMSkudG9S'@;
put 'ZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBQKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49Wi5uJiZuZXcgUChaLm4sMTYpLHRoaXMuZz1aLmcmJnRoaXMucG9pbnRGcm9tSlNPTihaLmcsWi5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXko'@;
put 'NCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5uLmJpdExlbmd0aCgpOjA7dmFyIFc9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IVd8fFcuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6'@;
put 'KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gTihWLFope3RoaXMuY3VydmU9Vix0aGlzLnR5cGU9Wix0aGlzLnByZWNvbXB1dGVkPW51bGx9dy5leHBvcnRzPUIsQi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbihWLFope2soVi5wcmVjb21wdXRlZCk7dmFyIFc9Vi5f'@;
put 'Z2V0RG91YmxlcygpLHo9SShaLDEsdGhpcy5fYml0TGVuZ3RoKSxxPSgxPDxXLnN0ZXArMSktKFcuc3RlcCUyPT0wPzI6MSk7cS89Mzt2YXIgUSx0ZSxhZT1bXTtmb3IoUT0wO1E8ei5sZW5ndGg7USs9Vy5zdGVwKXt0ZT0wO2Zvcih2YXIgc2U9UStXLnN0ZXAtMTtzZT49UTtzZS0tKXRlPSh0'@;
put 'ZTw8MSkreltzZV07YWUucHVzaCh0ZSl9Zm9yKHZhciBkZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksbGU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGNlPXE7Y2U+MDtjZS0tKXtmb3IoUT0wO1E8YWUubGVuZ3RoO1ErKykodGU9YWVbUV0pPT09Y2U/bGU9bGUubWl4ZWRBZGQo'@;
put 'Vy5wb2ludHNbUV0pOnRlPT09LWNlJiYobGU9bGUubWl4ZWRBZGQoVy5wb2ludHNbUV0ubmVnKCkpKTtkZT1kZS5hZGQobGUpfXJldHVybiBkZS50b1AoKX0sQi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oVixaKXtmb3IodmFyIFc9NCx6PVYuX2dldE5BRlBvaW50cyhXKSxxPXoucG9p'@;
put 'bnRzLFE9SShaLFc9ei53bmQsdGhpcy5fYml0TGVuZ3RoKSx0ZT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksYWU9US5sZW5ndGgtMTthZT49MDthZS0tKXtmb3IodmFyIHNlPTA7YWU+PTAmJjA9PT1RW2FlXTthZS0tKXNlKys7aWYoYWU+PTAmJnNlKyssdGU9dGUuZGJscChzZSksYWU8'@;
put 'MClicmVhazt2YXIgZGU9UVthZV07aygwIT09ZGUpLHRlPSJhZmZpbmUiPT09Vi50eXBlP3RlLm1peGVkQWRkKGRlPjA/cVtkZS0xPj4xXTpxWy1kZS0xPj4xXS5uZWcoKSk6dGUuYWRkKGRlPjA/cVtkZS0xPj4xXTpxWy1kZS0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT1WLnR5cGU/'@;
put 'dGUudG9QKCk6dGV9LEIucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKFYsWixXLHoscSl7dmFyIFEsdGUsYWUsc2U9dGhpcy5fd25hZlQxLGRlPXRoaXMuX3duYWZUMixsZT10aGlzLl93bmFmVDMsY2U9MDtmb3IoUT0wO1E8ejtRKyspe3ZhciBHPShhZT1aW1FdKS5fZ2V0TkFGUG9p'@;
put 'bnRzKFYpO3NlW1FdPUcud25kLGRlW1FdPUcucG9pbnRzfWZvcihRPXotMTtRPj0xO1EtPTIpe3ZhciB5PVEtMSxMPVE7aWYoMT09PXNlW3ldJiYxPT09c2VbTF0pe3ZhciBIPVtaW3ldLG51bGwsbnVsbCxaW0xdXTswPT09Wlt5XS55LmNtcChaW0xdLnkpPyhIWzFdPVpbeV0uYWRkKFpbTF0p'@;
put 'LEhbMl09Wlt5XS50b0ooKS5taXhlZEFkZChaW0xdLm5lZygpKSk6MD09PVpbeV0ueS5jbXAoWltMXS55LnJlZE5lZygpKT8oSFsxXT1aW3ldLnRvSigpLm1peGVkQWRkKFpbTF0pLEhbMl09Wlt5XS5hZGQoWltMXS5uZWcoKSkpOihIWzFdPVpbeV0udG9KKCkubWl4ZWRBZGQoWltMXSksSFsy'@;
put 'XT1aW3ldLnRvSigpLm1peGVkQWRkKFpbTF0ubmVnKCkpKTt2YXIgaj1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxnPUUoV1t5XSxXW0xdKTtmb3IoY2U9TWF0aC5tYXgoZ1swXS5sZW5ndGgsY2UpLGxlW3ldPW5ldyBBcnJheShjZSksbGVbTF09bmV3IEFycmF5KGNlKSx0ZT0wO3RlPGNlO3Rl'@;
put 'KyspbGVbeV1bdGVdPWpbMyooMSsoMHxnWzBdW3RlXSkpKygxKygwfGdbMV1bdGVdKSldLGxlW0xdW3RlXT0wLGRlW3ldPUh9ZWxzZSBsZVt5XT1JKFdbeV0sc2VbeV0sdGhpcy5fYml0TGVuZ3RoKSxsZVtMXT1JKFdbTF0sc2VbTF0sdGhpcy5fYml0TGVuZ3RoKSxjZT1NYXRoLm1heChsZVt5'@;
put 'XS5sZW5ndGgsY2UpLGNlPU1hdGgubWF4KGxlW0xdLmxlbmd0aCxjZSl9dmFyIF89dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHA9dGhpcy5fd25hZlQ0O2ZvcihRPWNlO1E+PTA7US0tKXtmb3IodmFyIEM9MDtRPj0wOyl7dmFyIEs9ITA7Zm9yKHRlPTA7dGU8ejt0ZSsrKXBbdGVdPTB8'@;
put 'bGVbdGVdW1FdLDAhPT1wW3RlXSYmKEs9ITEpO2lmKCFLKWJyZWFrO0MrKyxRLS19aWYoUT49MCYmQysrLF89Xy5kYmxwKEMpLFE8MClicmVhaztmb3IodGU9MDt0ZTx6O3RlKyspe3ZhciBuZT1wW3RlXTswIT09bmUmJihuZT4wP2FlPWRlW3RlXVtuZS0xPj4xXTpuZTwwJiYoYWU9ZGVbdGVd'@;
put 'Wy1uZS0xPj4xXS5uZWcoKSksXz0iYWZmaW5lIj09PWFlLnR5cGU/Xy5taXhlZEFkZChhZSk6Xy5hZGQoYWUpKX19Zm9yKFE9MDtRPHo7USsrKWRlW1FdPW51bGw7cmV0dXJuIHE/XzpfLnRvUCgpfSxCLkJhc2VQb2ludD1OLE4ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sTi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sQi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oVixaKXtWPVUudG9BcnJheShWLFopO3ZhciBXPXRoaXMucC5ieXRlTGVu'@;
put 'Z3RoKCk7aWYoKDQ9PT1WWzBdfHw2PT09VlswXXx8Nz09PVZbMF0pJiZWLmxlbmd0aC0xPT0yKlcpcmV0dXJuIDY9PT1WWzBdP2soVltWLmxlbmd0aC0xXSUyPT0wKTo3PT09VlswXSYmayhWW1YubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoVi5zbGljZSgxLDErVyksVi5zbGljZSgxK1cs'@;
put 'MSsyKlcpKTtpZigoMj09PVZbMF18fDM9PT1WWzBdKSYmVi5sZW5ndGgtMT09PVcpcmV0dXJuIHRoaXMucG9pbnRGcm9tWChWLnNsaWNlKDEsMStXKSwzPT09VlswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxOLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2Vk'@;
put 'PWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzLmVuY29kZShWLCEwKX0sTi5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihWKXt2YXIgWj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLFc9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLFopO3JldHVybiBWP1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8y'@;
put 'OjNdLmNvbmNhdChXKTpbNF0uY29uY2F0KFcsdGhpcy5nZXRZKCkudG9BcnJheSgiYmUiLFopKX0sTi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFYsWil7cmV0dXJuIFUuZW5jb2RlKHRoaXMuX2VuY29kZShaKSxWKX0sTi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbihWKXtpZih0'@;
put 'aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBaPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gWi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLFouZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsViksWi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnBy'@;
put 'ZWNvbXB1dGVkPVosdGhpc30sTi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24oVil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIFo9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhWiYmWi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKFYuYml0TGVuZ3Ro'@;
put 'KCkrMSkvWi5zdGVwKX0sTi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24oVixaKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIFc9W3RoaXNdLHo9dGhpcyxxPTA7cTxaO3Er'@;
put 'PVYpe2Zvcih2YXIgUT0wO1E8VjtRKyspej16LmRibCgpO1cucHVzaCh6KX1yZXR1cm57c3RlcDpWLHBvaW50czpXfX0sTi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbihWKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVj'@;
put 'b21wdXRlZC5uYWY7Zm9yKHZhciBaPVt0aGlzXSxXPSgxPDxWKS0xLHo9MT09PVc/bnVsbDp0aGlzLmRibCgpLHE9MTtxPFc7cSsrKVpbcV09WltxLTFdLmFkZCh6KTtyZXR1cm57d25kOlYscG9pbnRzOlp9fSxOLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxO'@;
put 'LnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKFYpe2Zvcih2YXIgWj10aGlzLFc9MDtXPFY7VysrKVo9Wi5kYmwoKTtyZXR1cm4gWn19LDExMzg6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDk1MyksVT1EKDM3ODUpLEk9RCg1NzE3KSxFPUQoNDkxOCksaz1QLmFzc2VydDtmdW5jdGlv'@;
put 'biBCKFYpe3RoaXMudHdpc3RlZD0xIT0oMHxWLmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYtMT09KDB8Vi5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsRS5jYWxsKHRoaXMsImVkd2FyZHMiLFYpLHRoaXMuYT1uZXcgVShWLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRo'@;
put 'aXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBVKFYuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgVShWLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxrKCF0aGlzLnR3aXN0ZWR8'@;
put 'fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT0oMHxWLmMpfWZ1bmN0aW9uIE4oVixaLFcseixxKXtFLkJhc2VQb2ludC5jYWxsKHRoaXMsViwicHJvamVjdGl2ZSIpLG51bGw9PT1aJiZudWxsPT09VyYmbnVsbD09PXo/KHRoaXMueD10aGlzLmN1cnZlLnplcm8s'@;
put 'dGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgVShaLDE2KSx0aGlzLnk9bmV3IFUoVywxNiksdGhpcy56PXo/bmV3IFUoeiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXEm'@;
put 'Jm5ldyBVKHEsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRo'@;
put 'aXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRo'@;
put 'aXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfUkoQixFKSx3LmV4cG9ydHM9QixCLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5tT25lQT9WLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoVil9LEIucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKFYp'@;
put 'e3JldHVybiB0aGlzLm9uZUM/Vjp0aGlzLmMucmVkTXVsKFYpfSxCLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oVixaLFcseil7cmV0dXJuIHRoaXMucG9pbnQoVixaLFcseil9LEIucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oVixaKXsoVj1uZXcgVShWLDE2KSkucmVkfHwoVj1W'@;
put 'LnRvUmVkKHRoaXMucmVkKSk7dmFyIFc9Vi5yZWRTcXIoKSx6PXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoVykpLHE9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKFcpKSxRPXoucmVkTXVsKHEucmVkSW52bSgpKSx0ZT1RLnJlZFNxcnQoKTtpZigw'@;
put 'IT09dGUucmVkU3FyKCkucmVkU3ViKFEpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBhZT10ZS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oWiYmIWFlfHwhWiYmYWUpJiYodGU9dGUucmVkTmVnKCkpLHRoaXMucG9pbnQoVix0ZSl9LEIucHJv'@;
put 'dG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oVixaKXsoVj1uZXcgVShWLDE2KSkucmVkfHwoVj1WLnRvUmVkKHRoaXMucmVkKSk7dmFyIFc9Vi5yZWRTcXIoKSx6PVcucmVkU3ViKHRoaXMuYzIpLHE9Vy5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksUT16'@;
put 'LnJlZE11bChxLnJlZEludm0oKSk7aWYoMD09PVEuY21wKHRoaXMuemVybykpe2lmKFopdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLFYpfXZhciB0ZT1RLnJlZFNxcnQoKTtpZigwIT09dGUucmVkU3FyKCkucmVkU3ViKFEpLmNt'@;
put 'cCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0ZS5mcm9tUmVkKCkuaXNPZGQoKSE9PVomJih0ZT10ZS5yZWROZWcoKSksdGhpcy5wb2ludCh0ZSxWKX0sQi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oVil7aWYoVi5pc0luZmluaXR5KCkp'@;
put 'cmV0dXJuITA7Vi5ub3JtYWxpemUoKTt2YXIgWj1WLngucmVkU3FyKCksVz1WLnkucmVkU3FyKCksej1aLnJlZE11bCh0aGlzLmEpLnJlZEFkZChXKSxxPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKFopLnJlZE11bChXKSkpO3JldHVybiAwPT09ei5jbXAo'@;
put 'cSl9LEkoTixFLkJhc2VQb2ludCksQi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihWKXtyZXR1cm4gTi5mcm9tSlNPTih0aGlzLFYpfSxCLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihWLFosVyx6KXtyZXR1cm4gbmV3IE4odGhpcyxWLFosVyx6KX0sTi5mcm9tSlNPTj1mdW5j'@;
put 'dGlvbihWLFope3JldHVybiBuZXcgTihWLFpbMF0sWlsxXSxaWzJdKX0sTi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYs'@;
put 'MikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxOLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnkuY21wKHRo'@;
put 'aXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LE4ucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgVj10aGlzLngucmVkU3FyKCksWj10aGlzLnkucmVkU3FyKCksVz10aGlzLnoucmVkU3FyKCk7Vz1XLnJlZElBZGQoVyk7dmFyIHo9dGhpcy5j'@;
put 'dXJ2ZS5fbXVsQShWKSxxPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKFYpLnJlZElTdWIoWiksUT16LnJlZEFkZChaKSx0ZT1RLnJlZFN1YihXKSxhZT16LnJlZFN1YihaKSxzZT1xLnJlZE11bCh0ZSksZGU9US5yZWRNdWwoYWUpLGxlPXEucmVkTXVsKGFlKSxjZT10'@;
put 'ZS5yZWRNdWwoUSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoc2UsZGUsY2UsbGUpfSxOLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciBWLFosVyx6LHEsUSx0ZT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksYWU9dGhpcy54LnJlZFNxcigpLHNlPXRoaXMueS5yZWRT'@;
put 'cXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBkZT0oej10aGlzLmN1cnZlLl9tdWxBKGFlKSkucmVkQWRkKHNlKTt0aGlzLnpPbmU/KFY9dGUucmVkU3ViKGFlKS5yZWRTdWIoc2UpLnJlZE11bChkZS5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxaPWRlLnJlZE11bCh6LnJlZFN1Yihz'@;
put 'ZSkpLFc9ZGUucmVkU3FyKCkucmVkU3ViKGRlKS5yZWRTdWIoZGUpKToocT10aGlzLnoucmVkU3FyKCksUT1kZS5yZWRTdWIocSkucmVkSVN1YihxKSxWPXRlLnJlZFN1YihhZSkucmVkSVN1YihzZSkucmVkTXVsKFEpLFo9ZGUucmVkTXVsKHoucmVkU3ViKHNlKSksVz1kZS5yZWRNdWwoUSkp'@;
put 'fWVsc2Ugej1hZS5yZWRBZGQoc2UpLHE9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLFE9ei5yZWRTdWIocSkucmVkU3ViKHEpLFY9dGhpcy5jdXJ2ZS5fbXVsQyh0ZS5yZWRJU3ViKHopKS5yZWRNdWwoUSksWj10aGlzLmN1cnZlLl9tdWxDKHopLnJlZE11bChhZS5yZWRJU3Vi'@;
put 'KHNlKSksVz16LnJlZE11bChRKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChWLFosVyl9LE4ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxOLnBy'@;
put 'b3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKFYpe3ZhciBaPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoVi55LnJlZFN1YihWLngpKSxXPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoVi55LnJlZEFkZChWLngpKSx6PXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVs'@;
put 'KFYudCkscT10aGlzLnoucmVkTXVsKFYuei5yZWRBZGQoVi56KSksUT1XLnJlZFN1YihaKSx0ZT1xLnJlZFN1Yih6KSxhZT1xLnJlZEFkZCh6KSxzZT1XLnJlZEFkZChaKSxkZT1RLnJlZE11bCh0ZSksbGU9YWUucmVkTXVsKHNlKSxjZT1RLnJlZE11bChzZSksRz10ZS5yZWRNdWwoYWUpO3Jl'@;
put 'dHVybiB0aGlzLmN1cnZlLnBvaW50KGRlLGxlLEcsY2UpfSxOLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbihWKXt2YXIgWixXLHo9dGhpcy56LnJlZE11bChWLnopLHE9ei5yZWRTcXIoKSxRPXRoaXMueC5yZWRNdWwoVi54KSx0ZT10aGlzLnkucmVkTXVsKFYueSksYWU9dGhpcy5jdXJ2'@;
put 'ZS5kLnJlZE11bChRKS5yZWRNdWwodGUpLHNlPXEucmVkU3ViKGFlKSxkZT1xLnJlZEFkZChhZSksbGU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bChWLngucmVkQWRkKFYueSkpLnJlZElTdWIoUSkucmVkSVN1Yih0ZSksY2U9ei5yZWRNdWwoc2UpLnJlZE11bChsZSk7cmV0dXJuIHRo'@;
put 'aXMuY3VydmUudHdpc3RlZD8oWj16LnJlZE11bChkZSkucmVkTXVsKHRlLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKFEpKSksVz1zZS5yZWRNdWwoZGUpKTooWj16LnJlZE11bChkZSkucmVkTXVsKHRlLnJlZFN1YihRKSksVz10aGlzLmN1cnZlLl9tdWxDKHNlKS5yZWRNdWwoZGUpKSx0aGlz'@;
put 'LmN1cnZlLnBvaW50KGNlLFosVyl9LE4ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/VjpWLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKFYpOnRoaXMuX3Byb2pBZGQoVil9LE4ucHJvdG90eXBlLm11'@;
put 'bD1mdW5jdGlvbihWKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhWKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFYpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxWKX0sTi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKFYsWixXKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFk'@;
put 'ZCgxLFt0aGlzLFpdLFtWLFddLDIsITEpfSxOLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKFYsWixXKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLFpdLFtWLFddLDIsITApfSxOLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0'@;
put 'dXJuIHRoaXM7dmFyIFY9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoViksdGhpcy55PXRoaXMueS5yZWRNdWwoViksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoVikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sTi5w'@;
put 'cm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxOLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZy'@;
put 'b21SZWQoKX0sTi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LE4ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFYpe3JldHVybiB0aGlzPT09Vnx8MD09PXRoaXMuZ2V0WCgpLmNtcChWLmdldFgoKSkmJjA9PT10aGlzLmdl'@;
put 'dFkoKS5jbXAoVi5nZXRZKCkpfSxOLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oVil7dmFyIFo9Vi50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoWikpcmV0dXJuITA7Zm9yKHZhciBXPVYuY2xvbmUoKSx6PXRoaXMuY3VydmUucmVkTi5y'@;
put 'ZWRNdWwodGhpcy56KTs7KXtpZihXLmlhZGQodGhpcy5jdXJ2ZS5uKSxXLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKFoucmVkSUFkZCh6KSwwPT09dGhpcy54LmNtcChaKSlyZXR1cm4hMH19LE4ucHJvdG90eXBlLnRvUD1OLnByb3RvdHlwZS5ub3JtYWxpemUsTi5wcm90b3R5'@;
put 'cGUubWl4ZWRBZGQ9Ti5wcm90b3R5cGUuYWRkfSw4MjU0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9QTtQLmJhc2U9RCg0OTE4KSxQLnNob3J0PUQoNjY3MyksUC5tb250PUQoMjg4MSksUC5lZHdhcmRzPUQoMTEzOCl9LDI4ODE6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1E'@;
put 'KDM3ODUpLFU9RCg1NzE3KSxJPUQoNDkxOCksRT1EKDk1Myk7ZnVuY3Rpb24gayhOKXtJLmNhbGwodGhpcywibW9udCIsTiksdGhpcy5hPW5ldyBQKE4uYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgUChOLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBQKDQpLnRv'@;
put 'UmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IFAoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBCKE4sVixaKXtJLkJhc2VQb2ludC5jYWxsKHRoaXMsTiwicHJvamVjdGl2ZSIpLG51'@;
put 'bGw9PT1WJiZudWxsPT09Wj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IFAoViwxNiksdGhpcy56PW5ldyBQKFosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8'@;
put 'KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9VShrLEkpLHcuZXhwb3J0cz1rLGsucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE4pe3ZhciBWPU4ubm9ybWFsaXplKCkueCxaPVYucmVkU3FyKCksVz1aLnJlZE11bChWKS5yZWRBZGQoWi5yZWRNdWwodGhpcy5hKSku'@;
put 'cmVkQWRkKFYpO3JldHVybiAwPT09Vy5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKFcpfSxVKEIsSS5CYXNlUG9pbnQpLGsucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE4sVil7cmV0dXJuIHRoaXMucG9pbnQoRS50b0FycmF5KE4sViksMSl9LGsucHJvdG90eXBlLnBvaW50PWZ1bmN0'@;
put 'aW9uKE4sVil7cmV0dXJuIG5ldyBCKHRoaXMsTixWKX0say5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOKXtyZXR1cm4gQi5mcm9tSlNPTih0aGlzLE4pfSxCLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxCLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sQi5mcm9tSlNPTj1mdW5jdGlvbihOLFYpe3JldHVybiBuZXcgQihOLFZbMF0sVlsxXXx8Ti5vbmUpfSxCLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJ'@;
put 'bmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEIucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'MD09PXRoaXMuei5jbXBuKDApfSxCLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksVj10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksWj1OLnJlZFN1YihWKSxXPU4ucmVkTXVsKFYpLHo9Wi5yZWRNdWwoVi5yZWRBZGQo'@;
put 'dGhpcy5jdXJ2ZS5hMjQucmVkTXVsKFopKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVyx6KX0sQi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sQi5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlv'@;
put 'bihOLFYpe3ZhciBaPXRoaXMueC5yZWRBZGQodGhpcy56KSxXPXRoaXMueC5yZWRTdWIodGhpcy56KSx6PU4ueC5yZWRBZGQoTi56KSxxPU4ueC5yZWRTdWIoTi56KS5yZWRNdWwoWiksUT16LnJlZE11bChXKSx0ZT1WLnoucmVkTXVsKHEucmVkQWRkKFEpLnJlZFNxcigpKSxhZT1WLngucmVk'@;
put 'TXVsKHEucmVkSVN1YihRKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGUsYWUpfSxCLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7Zm9yKHZhciBWPU4uY2xvbmUoKSxaPXRoaXMsVz10aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCksej1bXTswIT09Vi5jbXBuKDApO1Yu'@;
put 'aXVzaHJuKDEpKXoucHVzaChWLmFuZGxuKDEpKTtmb3IodmFyIHE9ei5sZW5ndGgtMTtxPj0wO3EtLSkwPT09eltxXT8oWj1aLmRpZmZBZGQoVyx0aGlzKSxXPVcuZGJsKCkpOihXPVouZGlmZkFkZChXLHRoaXMpLFo9Wi5kYmwoKSk7cmV0dXJuIFd9LEIucHJvdG90eXBlLm11bEFkZD1mdW5j'@;
put 'dGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LEIucHJvdG90eXBlLmp1bWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxCLnByb3RvdHlwZS5lcT1mdW5j'@;
put 'dGlvbihOKXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcChOLmdldFgoKSl9LEIucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30sQi5wcm90b3R5cGUu'@;
put 'Z2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSw2NjczOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg5NTMpLFU9RCgzNzg1KSxJPUQoNTcxNyksRT1EKDQ5MTgpLGs9UC5hc3NlcnQ7ZnVuY3Rpb24gQihaKXtFLmNhbGwodGhp'@;
put 'cywic2hvcnQiLFopLHRoaXMuYT1uZXcgVShaLmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IFUoWi5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJl'@;
put 'ZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbShaKSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBOKFosVyx6LHEpe0UuQmFz'@;
put 'ZVBvaW50LmNhbGwodGhpcyxaLCJhZmZpbmUiKSxudWxsPT09VyYmbnVsbD09PXo/KHRoaXMueD1udWxsLHRoaXMueT1udWxsLHRoaXMuaW5mPSEwKToodGhpcy54PW5ldyBVKFcsMTYpLHRoaXMueT1uZXcgVSh6LDE2KSxxJiYodGhpcy54LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSx0aGlz'@;
put 'LnkuZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy5pbmY9ITEpfWZ1bmN0aW9uIFYoWixXLHoscSl7RS5C'@;
put 'YXNlUG9pbnQuY2FsbCh0aGlzLFosImphY29iaWFuIiksbnVsbD09PVcmJm51bGw9PT16JiZudWxsPT09cT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IFUoMCkpOih0aGlzLng9bmV3IFUoVywxNiksdGhpcy55PW5ldyBVKHosMTYpLHRo'@;
put 'aXMuej1uZXcgVShxLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVk'@;
put 'KSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfUkoQixFKSx3LmV4cG9ydHM9QixCLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKFope2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBXLHo7aWYoWi5iZXRh'@;
put 'KVc9bmV3IFUoWi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgcT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtXPShXPXFbMF0uY21wKHFbMV0pPDA/cVswXTpxWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoWi5sYW1iZGEpej1uZXcgVShaLmxhbWJkYSwxNik7ZWxzZXt2YXIg'@;
put 'UT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChRWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoVykpP3o9UVswXTprKDA9PT10aGlzLmcubXVsKHo9UVsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKFcpKSl9cmV0dXJue2JldGE6VyxsYW1iZGE6eixiYXNpczpa'@;
put 'LmJhc2lzP1ouYmFzaXMubWFwKGZ1bmN0aW9uKHRlKXtyZXR1cm57YTpuZXcgVSh0ZS5hLDE2KSxiOm5ldyBVKHRlLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyh6KX19fSxCLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKFope3ZhciBXPVo9PT10aGlzLnA/dGhpcy5yZWQ6'@;
put 'VS5tb250KFopLHo9bmV3IFUoMikudG9SZWQoVykucmVkSW52bSgpLHE9ei5yZWROZWcoKSxRPW5ldyBVKDMpLnRvUmVkKFcpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoeik7cmV0dXJuW3EucmVkQWRkKFEpLmZyb21SZWQoKSxxLnJlZFN1YihRKS5mcm9tUmVkKCldfSxCLnByb3RvdHlw'@;
put 'ZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKFope2Zvcih2YXIgVyx6LHEsUSx0ZSxhZSxzZSxkZSxsZSxjZT10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLEc9Wix5PXRoaXMubi5jbG9uZSgpLEw9bmV3IFUoMSksSD1uZXcgVSgwKSxqPW5ldyBVKDApLGc9'@;
put 'bmV3IFUoMSksUz0wOzAhPT1HLmNtcG4oMCk7KXt2YXIgeD15LmRpdihHKTtkZT15LnN1Yih4Lm11bChHKSksbGU9ai5zdWIoeC5tdWwoTCkpO3ZhciBfPWcuc3ViKHgubXVsKEgpKTtpZighcSYmZGUuY21wKGNlKTwwKVc9c2UubmVnKCksej1MLHE9ZGUubmVnKCksUT1sZTtlbHNlIGlmKHEm'@;
put 'JjI9PSsrUylicmVhaztzZT1kZSx5PUcsRz1kZSxqPUwsTD1sZSxnPUgsSD1ffXRlPWRlLm5lZygpLGFlPWxlO3ZhciBwPXEuc3FyKCkuYWRkKFEuc3FyKCkpO3JldHVybiB0ZS5zcXIoKS5hZGQoYWUuc3FyKCkpLmNtcChwKT49MCYmKHRlPVcsYWU9eikscS5uZWdhdGl2ZSYmKHE9cS5uZWco'@;
put 'KSxRPVEubmVnKCkpLHRlLm5lZ2F0aXZlJiYodGU9dGUubmVnKCksYWU9YWUubmVnKCkpLFt7YTpxLGI6UX0se2E6dGUsYjphZX1dfSxCLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKFope3ZhciBXPXRoaXMuZW5kby5iYXNpcyx6PVdbMF0scT1XWzFdLFE9cS5iLm11bChaKS5kaXZS'@;
put 'b3VuZCh0aGlzLm4pLHRlPXouYi5uZWcoKS5tdWwoWikuZGl2Um91bmQodGhpcy5uKSxhZT1RLm11bCh6LmEpLHNlPXRlLm11bChxLmEpLGRlPVEubXVsKHouYiksbGU9dGUubXVsKHEuYik7cmV0dXJue2sxOlouc3ViKGFlKS5zdWIoc2UpLGsyOmRlLmFkZChsZSkubmVnKCl9fSxCLnByb3Rv'@;
put 'dHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKFosVyl7KFo9bmV3IFUoWiwxNikpLnJlZHx8KFo9Wi50b1JlZCh0aGlzLnJlZCkpO3ZhciB6PVoucmVkU3FyKCkucmVkTXVsKFopLnJlZElBZGQoWi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLHE9ei5yZWRTcXJ0KCk7aWYoMCE9PXEu'@;
put 'cmVkU3FyKCkucmVkU3ViKHopLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBRPXEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKFcmJiFRfHwhVyYmUSkmJihxPXEucmVkTmVnKCkpLHRoaXMucG9pbnQoWixxKX0sQi5wcm90b3R5cGUudmFsaWRh'@;
put 'dGU9ZnVuY3Rpb24oWil7aWYoWi5pbmYpcmV0dXJuITA7dmFyIFc9Wi54LHo9Wi55LHE9dGhpcy5hLnJlZE11bChXKSxRPVcucmVkU3FyKCkucmVkTXVsKFcpLnJlZElBZGQocSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09ei5yZWRTcXIoKS5yZWRJU3ViKFEpLmNtcG4oMCl9LEIucHJv'@;
put 'dG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihaLFcseil7Zm9yKHZhciBxPXRoaXMuX2VuZG9XbmFmVDEsUT10aGlzLl9lbmRvV25hZlQyLHRlPTA7dGU8Wi5sZW5ndGg7dGUrKyl7dmFyIGFlPXRoaXMuX2VuZG9TcGxpdChXW3RlXSksc2U9Wlt0ZV0sZGU9c2UuX2dldEJldGEoKTth'@;
put 'ZS5rMS5uZWdhdGl2ZSYmKGFlLmsxLmluZWcoKSxzZT1zZS5uZWcoITApKSxhZS5rMi5uZWdhdGl2ZSYmKGFlLmsyLmluZWcoKSxkZT1kZS5uZWcoITApKSxxWzIqdGVdPXNlLHFbMip0ZSsxXT1kZSxRWzIqdGVdPWFlLmsxLFFbMip0ZSsxXT1hZS5rMn1mb3IodmFyIGxlPXRoaXMuX3duYWZN'@;
put 'dWxBZGQoMSxxLFEsMip0ZSx6KSxjZT0wO2NlPDIqdGU7Y2UrKylxW2NlXT1udWxsLFFbY2VdPW51bGw7cmV0dXJuIGxlfSxJKE4sRS5CYXNlUG9pbnQpLEIucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFosVyx6KXtyZXR1cm4gbmV3IE4odGhpcyxaLFcseil9LEIucHJvdG90eXBlLnBvaW50'@;
put 'RnJvbUpTT049ZnVuY3Rpb24oWixXKXtyZXR1cm4gTi5mcm9tSlNPTih0aGlzLFosVyl9LE4ucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgWj10aGlzLnByZWNvbXB1dGVkO2lmKFomJlouYmV0YSlyZXR1cm4gWi5iZXRhO3ZhciBXPXRoaXMu'@;
put 'Y3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZihaKXt2YXIgej10aGlzLmN1cnZlLHE9ZnVuY3Rpb24oUSl7cmV0dXJuIHoucG9pbnQoUS54LnJlZE11bCh6LmVuZG8uYmV0YSksUS55KX07Wi5iZXRhPVcsVy5wcmVjb21wdXRlZD17YmV0'@;
put 'YTpudWxsLG5hZjpaLm5hZiYme3duZDpaLm5hZi53bmQscG9pbnRzOloubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6Wi5kb3VibGVzJiZ7c3RlcDpaLmRvdWJsZXMuc3RlcCxwb2ludHM6Wi5kb3VibGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gV319LE4ucHJvdG90eXBlLnRvSlNPTj1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91'@;
put 'Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LE4uZnJvbUpTT049ZnVuY3Rpb24oWixX'@;
put 'LHopeyJzdHJpbmciPT10eXBlb2YgVyYmKFc9SlNPTi5wYXJzZShXKSk7dmFyIHE9Wi5wb2ludChXWzBdLFdbMV0seik7aWYoIVdbMl0pcmV0dXJuIHE7ZnVuY3Rpb24gUShhZSl7cmV0dXJuIFoucG9pbnQoYWVbMF0sYWVbMV0seil9dmFyIHRlPVdbMl07cmV0dXJuIHEucHJlY29tcHV0ZWQ9'@;
put 'e2JldGE6bnVsbCxkb3VibGVzOnRlLmRvdWJsZXMmJntzdGVwOnRlLmRvdWJsZXMuc3RlcCxwb2ludHM6W3FdLmNvbmNhdCh0ZS5kb3VibGVzLnBvaW50cy5tYXAoUSkpfSxuYWY6dGUubmFmJiZ7d25kOnRlLm5hZi53bmQscG9pbnRzOltxXS5jb25jYXQodGUubmFmLnBvaW50cy5tYXAoUSkp'@;
put 'fX0scX0sTi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmco'@;
put 'MTYsMikrIj4ifSxOLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWil7aWYodGhpcy5pbmYpcmV0dXJuIFo7aWYoWi5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShaKSlyZXR1cm4gdGhpcy5kYmwoKTtp'@;
put 'Zih0aGlzLm5lZygpLmVxKFopKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoWi54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBXPXRoaXMueS5yZWRTdWIoWi55KTswIT09Vy5jbXBuKDApJiYoVz1XLnJlZE11bCh0'@;
put 'aGlzLngucmVkU3ViKFoueCkucmVkSW52bSgpKSk7dmFyIHo9Vy5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihaLngpLHE9Vy5yZWRNdWwodGhpcy54LnJlZFN1Yih6KSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHoscSl9LE4ucHJvdG90eXBlLmRi'@;
put 'bD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBaPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09Wi5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIFc9dGhpcy5jdXJ2ZS5hLHo9dGhpcy54LnJlZFNxcigpLHE9Wi5yZWRJbnZt'@;
put 'KCksUT16LnJlZEFkZCh6KS5yZWRJQWRkKHopLnJlZElBZGQoVykucmVkTXVsKHEpLHRlPVEucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLGFlPVEucmVkTXVsKHRoaXMueC5yZWRTdWIodGUpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQo'@;
put 'dGUsYWUpfSxOLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LE4ucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0sTi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKFope3JldHVybiBaPW5ldyBVKFosMTYpLHRo'@;
put 'aXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5faGFzRG91YmxlcyhaKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLFopOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW1pdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWil9LE4ucHJvdG90'@;
put 'eXBlLm11bEFkZD1mdW5jdGlvbihaLFcseil7dmFyIHE9W3RoaXMsV10sUT1bWix6XTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHEsUSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsUSwyKX0sTi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlv'@;
put 'bihaLFcseil7dmFyIHE9W3RoaXMsV10sUT1bWix6XTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKHEsUSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLHEsUSwyLCEwKX0sTi5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oWil7cmV0dXJuIHRoaXM9'@;
put 'PT1afHx0aGlzLmluZj09PVouaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKFoueCkmJjA9PT10aGlzLnkuY21wKFoueSkpfSxOLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oWil7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIFc9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55'@;
put 'LnJlZE5lZygpKTtpZihaJiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgej10aGlzLnByZWNvbXB1dGVkLHE9ZnVuY3Rpb24oUSl7cmV0dXJuIFEubmVnKCl9O1cucHJlY29tcHV0ZWQ9e25hZjp6Lm5hZiYme3duZDp6Lm5hZi53bmQscG9pbnRzOnoubmFmLnBvaW50cy5tYXAocSl9LGRvdWJsZXM6'@;
put 'ei5kb3VibGVzJiZ7c3RlcDp6LmRvdWJsZXMuc3RlcCxwb2ludHM6ei5kb3VibGVzLnBvaW50cy5tYXAocSl9fX1yZXR1cm4gV30sTi5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmN1cnZlLmpw'@;
put 'b2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKX0sSShWLEUuQmFzZVBvaW50KSxCLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oWixXLHope3JldHVybiBuZXcgVih0aGlzLFosVyx6KX0sVi5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0'@;
put 'dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgWj10aGlzLnoucmVkSW52bSgpLFc9Wi5yZWRTcXIoKSx6PXRoaXMueC5yZWRNdWwoVykscT10aGlzLnkucmVkTXVsKFcpLnJlZE11bChaKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh6LHEpfSxWLnByb3RvdHlwZS5uZWc9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxWLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oWil7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIFo7aWYoWi5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIFc9Wi56LnJl'@;
put 'ZFNxcigpLHo9dGhpcy56LnJlZFNxcigpLHE9dGhpcy54LnJlZE11bChXKSxRPVoueC5yZWRNdWwoeiksdGU9dGhpcy55LnJlZE11bChXLnJlZE11bChaLnopKSxhZT1aLnkucmVkTXVsKHoucmVkTXVsKHRoaXMueikpLHNlPXEucmVkU3ViKFEpLGRlPXRlLnJlZFN1YihhZSk7aWYoMD09PXNl'@;
put 'LmNtcG4oMCkpcmV0dXJuIDAhPT1kZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBsZT1zZS5yZWRTcXIoKSxjZT1sZS5yZWRNdWwoc2UpLEc9cS5yZWRNdWwobGUpLHk9ZGUucmVkU3FyKCkucmVkSUFkZChjZSkucmVkSVN1YihHKS5y'@;
put 'ZWRJU3ViKEcpLEw9ZGUucmVkTXVsKEcucmVkSVN1Yih5KSkucmVkSVN1Yih0ZS5yZWRNdWwoY2UpKSxIPXRoaXMuei5yZWRNdWwoWi56KS5yZWRNdWwoc2UpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh5LEwsSCl9LFYucHJvdG90eXBlLm1peGVkQWRkPWZ1bmN0aW9uKFope2lmKHRoaXMu'@;
put 'aXNJbmZpbml0eSgpKXJldHVybiBaLnRvSigpO2lmKFouaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBXPXRoaXMuei5yZWRTcXIoKSx6PXRoaXMueCxxPVoueC5yZWRNdWwoVyksUT10aGlzLnksdGU9Wi55LnJlZE11bChXKS5yZWRNdWwodGhpcy56KSxhZT16LnJlZFN1YihxKSxzZT1R'@;
put 'LnJlZFN1Yih0ZSk7aWYoMD09PWFlLmNtcG4oMCkpcmV0dXJuIDAhPT1zZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBkZT1hZS5yZWRTcXIoKSxsZT1kZS5yZWRNdWwoYWUpLGNlPXoucmVkTXVsKGRlKSxHPXNlLnJlZFNxcigpLnJl'@;
put 'ZElBZGQobGUpLnJlZElTdWIoY2UpLnJlZElTdWIoY2UpLHk9c2UucmVkTXVsKGNlLnJlZElTdWIoRykpLnJlZElTdWIoUS5yZWRNdWwobGUpKSxMPXRoaXMuei5yZWRNdWwoYWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChHLHksTCl9LFYucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oWil7'@;
put 'aWYoMD09PVopcmV0dXJuIHRoaXM7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7aWYoIVopcmV0dXJuIHRoaXMuZGJsKCk7dmFyIFc7aWYodGhpcy5jdXJ2ZS56ZXJvQXx8dGhpcy5jdXJ2ZS50aHJlZUEpe3ZhciB6PXRoaXM7Zm9yKFc9MDtXPFo7VysrKXo9ei5kYmwoKTtyZXR1'@;
put 'cm4gen12YXIgcT10aGlzLmN1cnZlLmEsUT10aGlzLmN1cnZlLnRpbnYsdGU9dGhpcy54LGFlPXRoaXMueSxzZT10aGlzLnosZGU9c2UucmVkU3FyKCkucmVkU3FyKCksbGU9YWUucmVkQWRkKGFlKTtmb3IoVz0wO1c8WjtXKyspe3ZhciBjZT10ZS5yZWRTcXIoKSxHPWxlLnJlZFNxcigpLHk9'@;
put 'Ry5yZWRTcXIoKSxMPWNlLnJlZEFkZChjZSkucmVkSUFkZChjZSkucmVkSUFkZChxLnJlZE11bChkZSkpLEg9dGUucmVkTXVsKEcpLGo9TC5yZWRTcXIoKS5yZWRJU3ViKEgucmVkQWRkKEgpKSxnPUgucmVkSVN1YihqKSxTPUwucmVkTXVsKGcpO1M9Uy5yZWRJQWRkKFMpLnJlZElTdWIoeSk7'@;
put 'dmFyIHg9bGUucmVkTXVsKHNlKTtXKzE8WiYmKGRlPWRlLnJlZE11bCh5KSksdGU9aixzZT14LGxlPVN9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRlLGxlLnJlZE11bChRKSxzZSl9LFYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRo'@;
put 'aXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LFYucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIFosVyx6O2lmKHRoaXMuek9uZSl7dmFyIHE9dGhpcy54LnJlZFNxcigpLFE9dGhpcy55'@;
put 'LnJlZFNxcigpLHRlPVEucmVkU3FyKCksYWU9dGhpcy54LnJlZEFkZChRKS5yZWRTcXIoKS5yZWRJU3ViKHEpLnJlZElTdWIodGUpO2FlPWFlLnJlZElBZGQoYWUpO3ZhciBzZT1xLnJlZEFkZChxKS5yZWRJQWRkKHEpLGRlPXNlLnJlZFNxcigpLnJlZElTdWIoYWUpLnJlZElTdWIoYWUpLGxl'@;
put 'PXRlLnJlZElBZGQodGUpO2xlPShsZT1sZS5yZWRJQWRkKGxlKSkucmVkSUFkZChsZSksWj1kZSxXPXNlLnJlZE11bChhZS5yZWRJU3ViKGRlKSkucmVkSVN1YihsZSksej10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy54LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigp'@;
put 'LHk9Ry5yZWRTcXIoKSxMPXRoaXMueC5yZWRBZGQoRykucmVkU3FyKCkucmVkSVN1YihjZSkucmVkSVN1Yih5KTtMPUwucmVkSUFkZChMKTt2YXIgSD1jZS5yZWRBZGQoY2UpLnJlZElBZGQoY2UpLGo9SC5yZWRTcXIoKSxnPXkucmVkSUFkZCh5KTtnPShnPWcucmVkSUFkZChnKSkucmVkSUFk'@;
put 'ZChnKSxaPWoucmVkSVN1YihMKS5yZWRJU3ViKEwpLFc9SC5yZWRNdWwoTC5yZWRJU3ViKFopKS5yZWRJU3ViKGcpLHo9KHo9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKHopfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChaLFcseil9LFYucHJvdG90eXBlLl90aHJlZURibD1mdW5j'@;
put 'dGlvbigpe3ZhciBaLFcsejtpZih0aGlzLnpPbmUpe3ZhciBxPXRoaXMueC5yZWRTcXIoKSxRPXRoaXMueS5yZWRTcXIoKSx0ZT1RLnJlZFNxcigpLGFlPXRoaXMueC5yZWRBZGQoUSkucmVkU3FyKCkucmVkSVN1YihxKS5yZWRJU3ViKHRlKTthZT1hZS5yZWRJQWRkKGFlKTt2YXIgc2U9cS5y'@;
put 'ZWRBZGQocSkucmVkSUFkZChxKS5yZWRJQWRkKHRoaXMuY3VydmUuYSksZGU9c2UucmVkU3FyKCkucmVkSVN1YihhZSkucmVkSVN1YihhZSk7Wj1kZTt2YXIgbGU9dGUucmVkSUFkZCh0ZSk7bGU9KGxlPWxlLnJlZElBZGQobGUpKS5yZWRJQWRkKGxlKSxXPXNlLnJlZE11bChhZS5yZWRJU3Vi'@;
put 'KGRlKSkucmVkSVN1YihsZSksej10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgY2U9dGhpcy56LnJlZFNxcigpLEc9dGhpcy55LnJlZFNxcigpLHk9dGhpcy54LnJlZE11bChHKSxMPXRoaXMueC5yZWRTdWIoY2UpLnJlZE11bCh0aGlzLngucmVkQWRkKGNlKSk7TD1MLnJlZEFkZChM'@;
put 'KS5yZWRJQWRkKEwpO3ZhciBIPXkucmVkSUFkZCh5KSxqPShIPUgucmVkSUFkZChIKSkucmVkQWRkKEgpO1o9TC5yZWRTcXIoKS5yZWRJU3ViKGopLHo9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIoRykucmVkSVN1YihjZSk7dmFyIGc9Ry5yZWRTcXIoKTtnPShnPShn'@;
put 'PWcucmVkSUFkZChnKSkucmVkSUFkZChnKSkucmVkSUFkZChnKSxXPUwucmVkTXVsKEgucmVkSVN1YihaKSkucmVkSVN1YihnKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWixXLHopfSxWLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIFo9dGhpcy5jdXJ2ZS5hLFc9dGhpcy54LHo9'@;
put 'dGhpcy55LHE9dGhpcy56LFE9cS5yZWRTcXIoKS5yZWRTcXIoKSx0ZT1XLnJlZFNxcigpLGFlPXoucmVkU3FyKCksc2U9dGUucmVkQWRkKHRlKS5yZWRJQWRkKHRlKS5yZWRJQWRkKFoucmVkTXVsKFEpKSxkZT1XLnJlZEFkZChXKSxsZT0oZGU9ZGUucmVkSUFkZChkZSkpLnJlZE11bChhZSks'@;
put 'Y2U9c2UucmVkU3FyKCkucmVkSVN1YihsZS5yZWRBZGQobGUpKSxHPWxlLnJlZElTdWIoY2UpLHk9YWUucmVkU3FyKCk7eT0oeT0oeT15LnJlZElBZGQoeSkpLnJlZElBZGQoeSkpLnJlZElBZGQoeSk7dmFyIEw9c2UucmVkTXVsKEcpLnJlZElTdWIoeSksSD16LnJlZEFkZCh6KS5yZWRNdWwo'@;
put 'cSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGNlLEwsSCl9LFYucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIFo9dGhpcy54LnJlZFNxcigpLFc9dGhpcy55LnJlZFNxcigpLHo9dGhpcy56LnJl'@;
put 'ZFNxcigpLHE9Vy5yZWRTcXIoKSxRPVoucmVkQWRkKFopLnJlZElBZGQoWiksdGU9US5yZWRTcXIoKSxhZT10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoWikucmVkSVN1YihxKSxzZT0oYWU9KGFlPShhZT1hZS5yZWRJQWRkKGFlKSkucmVkQWRkKGFlKS5yZWRJQWRkKGFlKSku'@;
put 'cmVkSVN1Yih0ZSkpLnJlZFNxcigpLGRlPXEucmVkSUFkZChxKTtkZT0oZGU9KGRlPWRlLnJlZElBZGQoZGUpKS5yZWRJQWRkKGRlKSkucmVkSUFkZChkZSk7dmFyIGxlPVEucmVkSUFkZChhZSkucmVkU3FyKCkucmVkSVN1Yih0ZSkucmVkSVN1YihzZSkucmVkSVN1YihkZSksY2U9Vy5yZWRN'@;
put 'dWwobGUpO2NlPShjZT1jZS5yZWRJQWRkKGNlKSkucmVkSUFkZChjZSk7dmFyIEc9dGhpcy54LnJlZE11bChzZSkucmVkSVN1YihjZSk7Rz0oRz1HLnJlZElBZGQoRykpLnJlZElBZGQoRyk7dmFyIHk9dGhpcy55LnJlZE11bChsZS5yZWRNdWwoZGUucmVkSVN1YihsZSkpLnJlZElTdWIoYWUu'@;
put 'cmVkTXVsKHNlKSkpO3k9KHk9KHk9eS5yZWRJQWRkKHkpKS5yZWRJQWRkKHkpKS5yZWRJQWRkKHkpO3ZhciBMPXRoaXMuei5yZWRBZGQoYWUpLnJlZFNxcigpLnJlZElTdWIoeikucmVkSVN1YihzZSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KEcseSxMKX0sVi5wcm90b3R5cGUubXVsPWZ1'@;
put 'bmN0aW9uKFosVyl7cmV0dXJuIFo9bmV3IFUoWixXKSx0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsWil9LFYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFope2lmKCJhZmZpbmUiPT09Wi50eXBlKXJldHVybiB0aGlzLmVxKFoudG9KKCkpO2lmKHRoaXM9PT1aKXJldHVybiEwO3ZhciBXPXRoaXMu'@;
put 'ei5yZWRTcXIoKSx6PVouei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bCh6KS5yZWRJU3ViKFoueC5yZWRNdWwoVykpLmNtcG4oMCkpcmV0dXJuITE7dmFyIHE9Vy5yZWRNdWwodGhpcy56KSxRPXoucmVkTXVsKFoueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKFEpLnJlZElTdWIo'@;
put 'Wi55LnJlZE11bChxKSkuY21wbigwKX0sVi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKFope3ZhciBXPXRoaXMuei5yZWRTcXIoKSx6PVoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChXKTtpZigwPT09dGhpcy54LmNtcCh6KSlyZXR1cm4hMDtmb3IodmFyIHE9Wi5jbG9uZSgpLFE9'@;
put 'dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChXKTs7KXtpZihxLmlhZGQodGhpcy5jdXJ2ZS5uKSxxLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHoucmVkSUFkZChRKSwwPT09dGhpcy54LmNtcCh6KSlyZXR1cm4hMH19LFYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBKUG9pbnQgSW5maW5pdHk+IjoiPEVDIEpQb2ludCB4OiAiK3RoaXMueC50b1N0cmluZygxNiwyKSsiIHk6ICIrdGhpcy55LnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnoudG9TdHJpbmcoMTYsMikrIj4ifSxWLnByb3RvdHlwZS5pc0luZmlu'@;
put 'aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LDU0Mjc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPUEsST1EKDM3MTUpLEU9RCg4MjU0KSxrPUQoOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gQihWKXt0aGlzLmN1cnZlPSJzaG9ydCI9PT1WLnR5cGU/bmV3IEUu'@;
put 'c2hvcnQoVik6ImVkd2FyZHMiPT09Vi50eXBlP25ldyBFLmVkd2FyZHMoVik6bmV3IEUubW9udChWKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPVYuaGFzaCxrKHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZlIiksayh0aGlzLmcubXVs'@;
put 'KHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIE4oVixaKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVSxWLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgVz1uZXcgQihaKTtyZXR1cm4gT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KFUsVix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6V30pLFd9fSl9VS5QcmVzZXRDdXJ2ZT1CLE4oInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2'@;
put 'IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTEiXX0pLE4oInAy'@;
put 'MjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSIs'@;
put 'YjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOkkuc2hhMjU2LGdSZWQ6ITEsZzpbImI3MGUw'@;
put 'Y2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLE4oInAyNTYiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJm'@;
put 'ZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMiLGI6IjVhYzYzNWQ4IGFhM2E5'@;
put 'M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI2YjE3'@;
put 'ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxOKCJwMzg0Iix7dHlwZToic2hv'@;
put 'cnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5'@;
put 'ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6SS5zaGEzODQsZ1JlZDohMSxnOlsiYWE4N2Nh'@;
put 'MjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzEx'@;
put 'MyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksTigicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3'@;
put 'ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdm'@;
put 'Y2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOkkuc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1'@;
put 'ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2'@;
put 'NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLE4oImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZm'@;
put 'ZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpJLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxOKCJlZDI1NTE5Iix7dHlwZToiZWR3YXJkcyIscHJpbWU6'@;
put 'InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTMi'@;
put 'LG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6SS5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYSIs'@;
put 'IjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXtQPUQoMTAzNyl9Y2F0Y2h7UD12b2lkIDB9Tigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6SS5zaGEyNTYsYmV0YToi'@;
put 'N2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZi'@;
put 'Y2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFj'@;
put 'NTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsUF19KX0sNzk1NDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoMzc4NSks'@;
put 'VT1EKDIxNTYpLEk9RCg5NTMpLEU9RCg1NDI3KSxrPUQoOTkzMSksQj1JLmFzc2VydCxOPUQoMTI1MSksVj1EKDYxMSk7ZnVuY3Rpb24gWihXKXtpZighKHRoaXMgaW5zdGFuY2VvZiBaKSlyZXR1cm4gbmV3IFooVyk7InN0cmluZyI9PXR5cGVvZiBXJiYoQihPYmplY3QucHJvdG90eXBlLmhh'@;
put 'c093blByb3BlcnR5LmNhbGwoRSxXKSwiVW5rbm93biBjdXJ2ZSAiK1cpLFc9RVtXXSksVyBpbnN0YW5jZW9mIEUuUHJlc2V0Q3VydmUmJihXPXtjdXJ2ZTpXfSksdGhpcy5jdXJ2ZT1XLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhp'@;
put 'cy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9Vy5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKFcuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Vy5oYXNofHxXLmN1cnZlLmhhc2h9dy5leHBvcnRzPVosWi5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbihXKXtyZXR1cm4gbmV3IE4o'@;
put 'dGhpcyxXKX0sWi5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24oVyx6KXtyZXR1cm4gTi5mcm9tUHJpdmF0ZSh0aGlzLFcseil9LFoucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oVyx6KXtyZXR1cm4gTi5mcm9tUHVibGljKHRoaXMsVyx6KX0sWi5wcm90b3R5cGUu'@;
put 'Z2VuS2V5UGFpcj1mdW5jdGlvbihXKXtXfHwoVz17fSk7Zm9yKHZhciB6PW5ldyBVKHtoYXNoOnRoaXMuaGFzaCxwZXJzOlcucGVycyxwZXJzRW5jOlcucGVyc0VuY3x8InV0ZjgiLGVudHJvcHk6Vy5lbnRyb3B5fHxrKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLGVudHJvcHlFbmM6Vy5lbnRy'@;
put 'b3B5JiZXLmVudHJvcHlFbmN8fCJ1dGY4Iixub25jZTp0aGlzLm4udG9BcnJheSgpfSkscT10aGlzLm4uYnl0ZUxlbmd0aCgpLFE9dGhpcy5uLnN1YihuZXcgUCgyKSk7Oyl7dmFyIHRlPW5ldyBQKHouZ2VuZXJhdGUocSkpO2lmKCEodGUuY21wKFEpPjApKXJldHVybiB0ZS5pYWRkbigxKSx0'@;
put 'aGlzLmtleUZyb21Qcml2YXRlKHRlKX19LFoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihXLHope3ZhciBxPTgqVy5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBxPjAmJihXPVcudXNocm4ocSkpLCF6JiZXLmNtcCh0aGlzLm4pPj0wP1cuc3ViKHRoaXMu'@;
put 'bik6V30sWi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihXLHoscSxRKXsib2JqZWN0Ij09dHlwZW9mIHEmJihRPXEscT1udWxsKSxRfHwoUT17fSksej10aGlzLmtleUZyb21Qcml2YXRlKHoscSksVz10aGlzLl90cnVuY2F0ZVRvTihuZXcgUChXLDE2KSk7Zm9yKHZhciB0ZT10aGlzLm4uYnl0'@;
put 'ZUxlbmd0aCgpLGFlPXouZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoImJlIix0ZSksc2U9Vy50b0FycmF5KCJiZSIsdGUpLGRlPW5ldyBVKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmFlLG5vbmNlOnNlLHBlcnM6US5wZXJzLHBlcnNFbmM6US5wZXJzRW5jfHwidXRmOCJ9KSxsZT10aGlzLm4uc3Vi'@;
put 'KG5ldyBQKDEpKSxjZT0wOztjZSsrKXt2YXIgRz1RLms/US5rKGNlKTpuZXcgUChkZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgoRz10aGlzLl90cnVuY2F0ZVRvTihHLCEwKSkuY21wbigxKTw9MHx8Ry5jbXAobGUpPj0wKSl7dmFyIHk9dGhpcy5nLm11bChHKTtpZigh'@;
put 'eS5pc0luZmluaXR5KCkpe3ZhciBMPXkuZ2V0WCgpLEg9TC51bW9kKHRoaXMubik7aWYoMCE9PUguY21wbigwKSl7dmFyIGo9Ry5pbnZtKHRoaXMubikubXVsKEgubXVsKHouZ2V0UHJpdmF0ZSgpKS5pYWRkKFcpKTtpZigwIT09KGo9ai51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBnPSh5'@;
put 'LmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1MLmNtcChIKT8yOjApO3JldHVybiBRLmNhbm9uaWNhbCYmai5jbXAodGhpcy5uaCk+MCYmKGo9dGhpcy5uLnN1YihqKSxnXj0xKSxuZXcgVih7cjpILHM6aixyZWNvdmVyeVBhcmFtOmd9KX19fX19fSxaLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rp'@;
put 'b24oVyx6LHEsUSl7Vz10aGlzLl90cnVuY2F0ZVRvTihuZXcgUChXLDE2KSkscT10aGlzLmtleUZyb21QdWJsaWMocSxRKTt2YXIgdGU9KHo9bmV3IFYoeiwiaGV4IikpLnIsYWU9ei5zO2lmKHRlLmNtcG4oMSk8MHx8dGUuY21wKHRoaXMubik+PTB8fGFlLmNtcG4oMSk8MHx8YWUuY21wKHRo'@;
put 'aXMubik+PTApcmV0dXJuITE7dmFyIHNlLGRlPWFlLmludm0odGhpcy5uKSxsZT1kZS5tdWwoVykudW1vZCh0aGlzLm4pLGNlPWRlLm11bCh0ZSkudW1vZCh0aGlzLm4pO3JldHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShzZT10aGlzLmcuam11bEFkZChsZSxxLmdldFB1YmxpYygp'@;
put 'LGNlKSkuaXNJbmZpbml0eSgpJiZzZS5lcVhUb1AodGUpOiEoc2U9dGhpcy5nLm11bEFkZChsZSxxLmdldFB1YmxpYygpLGNlKSkuaXNJbmZpbml0eSgpJiYwPT09c2UuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAodGUpfSxaLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKFcseixx'@;
put 'LFEpe0IoKDMmcSk9PT1xLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksej1uZXcgVih6LFEpO3ZhciB0ZT10aGlzLm4sYWU9bmV3IFAoVyksc2U9ei5yLGRlPXoucyxsZT0xJnEsY2U9cT4+MTtpZihzZS5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2'@;
put 'ZS5uKSk+PTAmJmNlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7c2U9dGhpcy5jdXJ2ZS5wb2ludEZyb21YKGNlP3NlLmFkZCh0aGlzLmN1cnZlLm4pOnNlLGxlKTt2YXIgRz16LnIuaW52bSh0ZSkseT10ZS5zdWIoYWUpLm11bChHKS51'@;
put 'bW9kKHRlKSxMPWRlLm11bChHKS51bW9kKHRlKTtyZXR1cm4gdGhpcy5nLm11bEFkZCh5LHNlLEwpfSxaLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKFcseixxLFEpe2lmKG51bGwhPT0oej1uZXcgVih6LFEpKS5yZWNvdmVyeVBhcmFtKXJldHVybiB6LnJlY292ZXJ5'@;
put 'UGFyYW07Zm9yKHZhciB0ZT0wO3RlPDQ7dGUrKyl7dmFyIGFlO3RyeXthZT10aGlzLnJlY292ZXJQdWJLZXkoVyx6LHRlKX1jYXRjaHtjb250aW51ZX1pZihhZS5lcShxKSlyZXR1cm4gdGV9dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19'@;
put 'LDEyNTE6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDM3ODUpLFU9RCg5NTMpLmFzc2VydDtmdW5jdGlvbiBJKEUsayl7dGhpcy5lYz1FLHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsay5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKGsucHJpdixrLnByaXZFbmMpLGsucHVi'@;
put 'JiZ0aGlzLl9pbXBvcnRQdWJsaWMoay5wdWIsay5wdWJFbmMpfXcuZXhwb3J0cz1JLEkuZnJvbVB1YmxpYz1mdW5jdGlvbihFLGssQil7cmV0dXJuIGsgaW5zdGFuY2VvZiBJP2s6bmV3IEkoRSx7cHViOmsscHViRW5jOkJ9KX0sSS5mcm9tUHJpdmF0ZT1mdW5jdGlvbihFLGssQil7cmV0dXJu'@;
put 'IGsgaW5zdGFuY2VvZiBJP2s6bmV3IEkoRSx7cHJpdjprLHByaXZFbmM6Qn0pfSxJLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBFPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIEUuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpF'@;
put 'LnZhbGlkYXRlKCk/RS5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxJLnBy'@;
put 'b3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRSxrKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEUmJihrPUUsRT1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksaz90aGlzLnB1Yi5lbmNvZGUoayxFKTp0aGlzLnB1Yn0sSS5wcm90b3R5cGUuZ2V0'@;
put 'UHJpdmF0ZT1mdW5jdGlvbihFKXtyZXR1cm4iaGV4Ij09PUU/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sSS5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oRSxrKXt0aGlzLnByaXY9bmV3IFAoRSxrfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRo'@;
put 'aXMuZWMuY3VydmUubil9LEkucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oRSxrKXtpZihFLnh8fEUueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/VShFLngsIk5lZWQgeCBjb29yZGluYXRlIik6InNob3J0IiE9PXRoaXMuZWMuY3VydmUudHlwZSYmImVkd2Fy'@;
put 'ZHMiIT09dGhpcy5lYy5jdXJ2ZS50eXBlfHxVKEUueCYmRS55LCJOZWVkIGJvdGggeCBhbmQgeSBjb29yZGluYXRlIiksdm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KEUueCxFLnkpKTt0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KEUsayl9LEkucHJvdG90eXBl'@;
put 'LmRlcml2ZT1mdW5jdGlvbihFKXtyZXR1cm4gRS52YWxpZGF0ZSgpfHxVKEUudmFsaWRhdGUoKSwicHVibGljIHBvaW50IG5vdCB2YWxpZGF0ZWQiKSxFLm11bCh0aGlzLnByaXYpLmdldFgoKX0sSS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihFLGssQil7cmV0dXJuIHRoaXMuZWMuc2lnbihF'@;
put 'LHRoaXMsayxCKX0sSS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEUsayl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KEUsayx0aGlzKX0sSS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIp'@;
put 'KSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoMzc4NSksVT1EKDk1MyksST1VLmFzc2VydDtmdW5jdGlvbiBFKFosVyl7aWYoWiBpbnN0YW5jZW9mIEUpcmV0dXJuIFo7dGhpcy5faW1wb3J0'@;
put 'REVSKFosVyl8fChJKFouciYmWi5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IFAoWi5yLDE2KSx0aGlzLnM9bmV3IFAoWi5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09Wi5yZWNvdmVyeVBhcmFtP251bGw6Wi5yZWNvdmVyeVBhcmFtKX1mdW5jdGlv'@;
put 'biBrKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIEIoWixXKXt2YXIgej1aW1cucGxhY2UrK107aWYoISgxMjgmeikpcmV0dXJuIHo7dmFyIHE9MTUmejtpZigwPT09cXx8cT40KXJldHVybiExO2Zvcih2YXIgUT0wLHRlPTAsYWU9Vy5wbGFjZTt0ZTxxO3RlKyssYWUrKylRPDw9OCxRfD1aW2Fl'@;
put 'XSxRPj4+PTA7cmV0dXJuIShRPD0xMjcpJiYoVy5wbGFjZT1hZSxRKX1mdW5jdGlvbiBOKFope2Zvcih2YXIgVz0wLHo9Wi5sZW5ndGgtMTshWltXXSYmISgxMjgmWltXKzFdKSYmVzx6OylXKys7cmV0dXJuIDA9PT1XP1o6Wi5zbGljZShXKX1mdW5jdGlvbiBWKFosVyl7aWYoVzwxMjgpWi5w'@;
put 'dXNoKFcpO2Vsc2V7dmFyIHo9MSsoTWF0aC5sb2coVykvTWF0aC5MTjI+Pj4zKTtmb3IoWi5wdXNoKDEyOHx6KTstLXo7KVoucHVzaChXPj4+KHo8PDMpJjI1NSk7Wi5wdXNoKFcpfX13LmV4cG9ydHM9RSxFLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKFosVyl7Wj1VLnRvQXJyYXko'@;
put 'WixXKTt2YXIgej1uZXcgaztpZig0OCE9PVpbei5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgcT1CKFoseik7aWYoITE9PT1xfHxxK3oucGxhY2UhPT1aLmxlbmd0aHx8MiE9PVpbei5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgUT1CKFoseik7aWYoITE9PT1RKXJldHVybiExO3ZhciB0ZT1aLnNsaWNl'@;
put 'KHoucGxhY2UsUSt6LnBsYWNlKTtpZih6LnBsYWNlKz1RLDIhPT1aW3oucGxhY2UrK10pcmV0dXJuITE7dmFyIGFlPUIoWix6KTtpZighMT09PWFlfHxaLmxlbmd0aCE9PWFlK3oucGxhY2UpcmV0dXJuITE7dmFyIHNlPVouc2xpY2Uoei5wbGFjZSxhZSt6LnBsYWNlKTtpZigwPT09dGVbMF0p'@;
put 'e2lmKCEoMTI4JnRlWzFdKSlyZXR1cm4hMTt0ZT10ZS5zbGljZSgxKX1pZigwPT09c2VbMF0pe2lmKCEoMTI4JnNlWzFdKSlyZXR1cm4hMTtzZT1zZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBQKHRlKSx0aGlzLnM9bmV3IFAoc2UpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxF'@;
put 'LnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihaKXt2YXIgVz10aGlzLnIudG9BcnJheSgpLHo9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JldbMF0mJihXPVswXS5jb25jYXQoVykpLDEyOCZ6WzBdJiYoej1bMF0uY29uY2F0KHopKSxXPU4oVyksej1OKHopOyEoelswXXx8MTI4JnpbMV0pOyl6'@;
put 'PXouc2xpY2UoMSk7dmFyIHE9WzJdO1YocSxXLmxlbmd0aCksKHE9cS5jb25jYXQoVykpLnB1c2goMiksVihxLHoubGVuZ3RoKTt2YXIgUT1xLmNvbmNhdCh6KSx0ZT1bNDhdO3JldHVybiBWKHRlLFEubGVuZ3RoKSx0ZT10ZS5jb25jYXQoUSksVS5lbmNvZGUodGUsWil9fSw1OTgwOih3LEEs'@;
put 'RCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgzNzE1KSxVPUQoNTQyNyksST1EKDk1MyksRT1JLmFzc2VydCxrPUkucGFyc2VCeXRlcyxCPUQoOTA4NyksTj1EKDM2MjIpO2Z1bmN0aW9uIFYoWil7aWYoRSgiZWQyNTUxOSI9PT1aLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiks'@;
put 'ISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKFopO3RoaXMuY3VydmU9Wj1VW1pdLmN1cnZlLHRoaXMuZz1aLmcsdGhpcy5nLnByZWNvbXB1dGUoWi5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1aLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0'@;
put 'aD1NYXRoLmNlaWwoWi5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1QLnNoYTUxMn13LmV4cG9ydHM9VixWLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFosVyl7Wj1rKFopO3ZhciB6PXRoaXMua2V5RnJvbVNlY3JldChXKSxxPXRoaXMuaGFzaEludCh6Lm1lc3NhZ2VQcmVmaXgoKSxaKSxR'@;
put 'PXRoaXMuZy5tdWwocSksdGU9dGhpcy5lbmNvZGVQb2ludChRKSxhZT10aGlzLmhhc2hJbnQodGUsei5wdWJCeXRlcygpLFopLm11bCh6LnByaXYoKSksc2U9cS5hZGQoYWUpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlEsUzpzZSxSZW5jb2RlZDp0'@;
put 'ZX0pfSxWLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oWixXLHope1o9ayhaKSxXPXRoaXMubWFrZVNpZ25hdHVyZShXKTt2YXIgcT10aGlzLmtleUZyb21QdWJsaWMoeiksUT10aGlzLmhhc2hJbnQoVy5SZW5jb2RlZCgpLHEucHViQnl0ZXMoKSxaKSx0ZT10aGlzLmcubXVsKFcuUygpKTty'@;
put 'ZXR1cm4gVy5SKCkuYWRkKHEucHViKCkubXVsKFEpKS5lcSh0ZSl9LFYucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIFo9dGhpcy5oYXNoKCksVz0wO1c8YXJndW1lbnRzLmxlbmd0aDtXKyspWi51cGRhdGUoYXJndW1lbnRzW1ddKTtyZXR1cm4gSS5pbnRGcm9tTEUoWi5k'@;
put 'aWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxWLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKFope3JldHVybiBCLmZyb21QdWJsaWModGhpcyxaKX0sVi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihaKXtyZXR1cm4gQi5mcm9tU2VjcmV0KHRoaXMsWil9LFYu'@;
put 'cHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oWil7cmV0dXJuIFogaW5zdGFuY2VvZiBOP1o6bmV3IE4odGhpcyxaKX0sVi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oWil7dmFyIFc9Wi5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVy'@;
put 'biBXW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PVouZ2V0WCgpLmlzT2RkKCk/MTI4OjAsV30sVi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oWil7dmFyIFc9KFo9SS5wYXJzZUJ5dGVzKFopKS5sZW5ndGgtMSx6PVouc2xpY2UoMCxXKS5jb25jYXQoLTEyOSZaW1ddKSxxPSEhKDEy'@;
put 'OCZaW1ddKSxRPUkuaW50RnJvbUxFKHopO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoUSxxKX0sVi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKFope3JldHVybiBaLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sVi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0'@;
put 'aW9uKFope3JldHVybiBJLmludEZyb21MRShaKX0sVi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihaKXtyZXR1cm4gWiBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDkwODc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDk1MyksVT1QLmFzc2VydCxJPVAucGFyc2VCeXRl'@;
put 'cyxFPVAuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gayhCLE4pe3RoaXMuZWRkc2E9Qix0aGlzLl9zZWNyZXQ9SShOLnNlY3JldCksQi5pc1BvaW50KE4ucHViKT90aGlzLl9wdWI9Ti5wdWI6dGhpcy5fcHViQnl0ZXM9SShOLnB1Yil9ay5mcm9tUHVibGljPWZ1bmN0aW9uKEIsTil7cmV0dXJu'@;
put 'IE4gaW5zdGFuY2VvZiBrP046bmV3IGsoQix7cHViOk59KX0say5mcm9tU2VjcmV0PWZ1bmN0aW9uKEIsTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBrP046bmV3IGsoQix7c2VjcmV0Ok59KX0say5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sRShrLCJw'@;
put 'dWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEUoaywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRo'@;
put 'aXMucHJpdigpKX0pLEUoaywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBCPXRoaXMuZWRkc2EsTj10aGlzLmhhc2goKSxWPUIuZW5jb2RpbmdMZW5ndGgtMSxaPU4uc2xpY2UoMCxCLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gWlswXSY9MjQ4LFpbVl0mPTEyNyxaW1ZdfD02NCxafSksRShr'@;
put 'LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLEUoaywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksRShrLCJtZXNzYWdlUHJlZml4'@;
put 'IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLGsucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oQil7cmV0dXJuIFUodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihCLHRo'@;
put 'aXMpfSxrLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQixOKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoQixOLHRoaXMpfSxrLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oQil7cmV0dXJuIFUodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksUC5lbmNvZGUo'@;
put 'dGhpcy5zZWNyZXQoKSxCKX0say5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEIpe3JldHVybiBQLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksQil9LHcuZXhwb3J0cz1rfSwzNjIyOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgzNzg1KSxVPUQoOTUzKSxJPVUuYXNzZXJ0LEU9'@;
put 'VS5jYWNoZWRQcm9wZXJ0eSxrPVUucGFyc2VCeXRlcztmdW5jdGlvbiBCKE4sVil7dGhpcy5lZGRzYT1OLCJvYmplY3QiIT10eXBlb2YgViYmKFY9ayhWKSksQXJyYXkuaXNBcnJheShWKSYmKFY9e1I6Vi5zbGljZSgwLE4uZW5jb2RpbmdMZW5ndGgpLFM6Vi5zbGljZShOLmVuY29kaW5nTGVu'@;
put 'Z3RoKX0pLEkoVi5SJiZWLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLE4uaXNQb2ludChWLlIpJiYodGhpcy5fUj1WLlIpLFYuUyBpbnN0YW5jZW9mIFAmJih0aGlzLl9TPVYuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShWLlIpP1YuUjpWLlJlbmNvZGVkLHRoaXMuX1Nl'@;
put 'bmNvZGVkPUFycmF5LmlzQXJyYXkoVi5TKT9WLlM6Vi5TZW5jb2RlZH1FKEIsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxFKEIsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5j'@;
put 'b2RlZCgpKX0pLEUoQiwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksRShCLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksQi5wcm90b3R5cGUudG9CeXRlcz1m'@;
put 'dW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LEIucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIFUuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx3LmV4cG9ydHM9Qn0sMTAzNzp3PT57dy5l'@;
put 'eHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGEiLCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIx'@;
put 'Il0sWyI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4IiwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZiJdLFsiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2'@;
put 'YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOSIsImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTUiXSxbIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJh'@;
put 'ZDhmODNmZjQ2NDAiLCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTkiXSxbIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGMiLCI0YWFkMGE2ZjY4ZDMwOGI0'@;
put 'YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2Il0sWyI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhIiwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0'@;
put 'OTQ4MDFkYzA2OWQ5ZWIzOWY1ZiJdLFsiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYSIsIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTkiXSxbIjEwMGY0'@;
put 'NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjAiLCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5Il0sWyJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3'@;
put 'N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkIiwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZCJdLFsiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2'@;
put 'ZCIsImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODgiXSxbImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjEiLCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdl'@;
put 'Yzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkIl0sWyI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwIiwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5'@;
put 'NmIwMjI3NzFjOCJdLFsiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0NyIsIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmEiXSxbIjM4NWVlZDM0YzFjZGZm'@;
put 'MjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjIiLCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzIl0sWyI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3'@;
put 'ZmJjOWM2MDZlZDg2YzNmYWMzYTciLCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwIl0sWyIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkIiwiNTZlNzA3'@;
put 'OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMCJdLFsiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4MyIsIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3'@;
put 'ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTYiXSxbIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYSIsIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODki'@;
put 'XSxbIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZTgiLCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3Il0sWyJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0'@;
put 'YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkIiwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYSJdLFsiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZh'@;
put 'MGFlNGZjZTcyNSIsIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGQiXSxbIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTQiLCI0YjZkYWQwYjVhZTQ2MjUw'@;
put 'NzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyIl0sWyI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjIiwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdk'@;
put 'ZDMzZTBiMzk0MTgxN2RjYWFlNiJdLFsiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNiIsIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmYiXSxbIjc2ZTY0'@;
put 'MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzkiLCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxIl0sWyJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThm'@;
put 'N2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxIiwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjMyJdLFsiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0'@;
put 'YiIsImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWYiXSxbImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDMiLCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3'@;
put 'NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3Il0sWyJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkIiwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5'@;
put 'MWI2YWM5ZWM3OCJdLFsiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MCIsIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTEiXSxbIjkwYWQ4NWIzODlkNmI5'@;
put 'MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDQiLCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTAiXSxbIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNl'@;
put 'YTMzNTFiN2I0NDRjOWVjNGMwZGEiLCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyIl0sWyJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExIiwiMWU2MzYz'@;
put 'M2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiYyJdLFsiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZSIsImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJm'@;
put 'YWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGIiXSxbImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDEiLCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUx'@;
put 'Il0sWyJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmIiwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1Il0sWyJkNjhhODBjODI4MGJiODQwNzkzMjM0YWEx'@;
put 'MThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4IiwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMCJdLFsiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4'@;
put 'MGZjMjhkM2Q1ZCIsIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODQiXSxbIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTYiLCIzNWVjNTEwOTJkODcyODA1'@;
put 'MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZCJdLFsiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZCIsImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0Yzhl'@;
put 'NmJlN2U1ZTAzZDRmYzU5OWQiXSxbIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTUiLCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4Il0sWyJhNTc2ZGY4'@;
put 'ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2IiwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOCJdLFsiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMw'@;
put 'ZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MSIsIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWMiXSxbIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhYyIs'@;
put 'ImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWYiXSxbIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTEiLCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJj'@;
put 'ZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyIl0sWyJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlIiwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFm'@;
put 'MGMyOTkwNyJdLFsiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MSIsImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWMiXSxbImVhYTY0OWYyMWY1MWJkYmFl'@;
put 'N2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjMiLCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkIl0sWyJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3'@;
put 'NDAxZTIzNjMyZGRhMzRkMjRmIiwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNCJdLFsiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOSIsImFlZWZlOTM3'@;
put 'NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmQiXSxbIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmUiLCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5'@;
put 'NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwIl0sWyJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5IiwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMSJd'@;
put 'LFsiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMiIsIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjEiXSxbImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4'@;
put 'ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTMiLCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjIl0sWyIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJk'@;
put 'ZTgzMTk0OTdjIiwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3MyJdLFsiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYSIsIjJlN2U1NTI4ODhjMzMxZGQ4'@;
put 'YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmQiXSxbImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTEiLCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNh'@;
put 'NTJkNDE0MjE3NGRjZjg5NDA1Il0sWyI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczIiwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OSJdLFsiODQ4MWJk'@;
put 'ZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OCIsIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2UiXSxbIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2Zm'@;
put 'Y2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmIiLCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3Il0sWyJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2'@;
put 'IiwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxIl0sWyI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhIiwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3'@;
put 'Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MiJdLFsiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwIiwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMw'@;
put 'ZTYyYjk0NSJdLFsiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4NyIsIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzMiXSxbImY3MTBkNzlkOWViOTYyMjk3'@;
put 'ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWUiLCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyIl1dfSxuYWY6e3duZDo3LHBvaW50czpbWyJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVm'@;
put 'ODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5IiwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MiJdLFsiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1'@;
put 'NjliMjQwZWZlNCIsImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDYiXSxbIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmMiLCI2YWViY2E0MGJhMjU1OTYw'@;
put 'YTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhIl0sWyJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlIiwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4'@;
put 'ZTBmMDVjYzI2MmFjNjRmOWMzNyJdLFsiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYiIsImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWIiXSxbImYyODc3'@;
put 'M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYTgiLCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODEiXSxbImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFl'@;
put 'NTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGUiLCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4Il0sWyJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0'@;
put 'IiwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3NyJdLFsiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2YyIsIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVh'@;
put 'MWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2EiXSxbIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDUiLCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4'@;
put 'YmNmODE5OThjIl0sWyIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmIiwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3Il0sWyI5MjQ4Mjc5YjA5YjRkNjhk'@;
put 'YWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0IiwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMiJdLFsiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYx'@;
put 'NWMwN2U5OTZkNDQzZGVlODcyOSIsImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTUiXSxbImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGIiLCIyMTE5YTQ2'@;
put 'MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyIl0sWyI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0IiwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMz'@;
put 'YmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MiJdLFsiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNSIsImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTYi'@;
put 'XSxbIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzkiLCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDkiXSxbIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVh'@;
put 'MjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2QiLCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmIl0sWyI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMy'@;
put 'Zjg2MzA4YjZmIiwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YSJdLFsiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYiIsImQwZTNmYTllY2E4NzI2OTA5'@;
put 'NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmNyJdLFsiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOSIsImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRi'@;
put 'YzA2MzQ2NWI1MjE0MDk5MzMiXSxbIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2MyIsIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWEiXSxbIjc3ZjIzMDkz'@;
put 'NmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzQiLCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2Il0sWyJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4Yzgw'@;
put 'MDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwIiwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzNyJdLFsiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YiIs'@;
put 'IjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2UiXSxbImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDciLCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRl'@;
put 'MzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2Il0sWyJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxIiwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMx'@;
put 'OGEwNDQ3NiJdLFsiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMCIsIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDAiXSxbIjc2MzVjYTcyZDdlODQzMmMz'@;
put 'MzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzUiLCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjEiXSxbIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0Njhm'@;
put 'YmMxYTUwNzQzYmY1NmNjMTgiLCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODMiXSxbImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZTgiLCI1OWM5ZTBiYmEz'@;
put 'OTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1Il0sWyIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViIiwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5'@;
put 'MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YiJdLFsiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZiIsIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTciXSxb'@;
put 'IjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDMiLCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4Il0sWyIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdl'@;
put 'OWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhIiwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YSJdLFsiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2Vm'@;
put 'NDA1M2I0NSIsImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzYiXSxbIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWEiLCI3NDRiMTE1MmVhY2JlNWUzOGRj'@;
put 'Yzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2Il0sWyI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlIiwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThj'@;
put 'ZDg1ZTIxNmM0YTMwN2Y2ZSJdLFsiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOCIsImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2QiXSxbIjc3NTRiNGZh'@;
put 'MGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmMiLCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyIl0sWyI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4'@;
put 'Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5IiwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZSJdLFsiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYiIs'@;
put 'IjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzciXSxbIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2EiLCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgx'@;
put 'MjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExIl0sWyJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmIiwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0'@;
put 'ZWVkZTBhNCJdLFsiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMCIsIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzUiXSxbIjczM2NlODBkYTk1NWE4YTI2'@;
put 'OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDQiLCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkIl0sWyIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2'@;
put 'OTllZjI1OGRmYWI4MWMwNDVjIiwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZCJdLFsiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MCIsImVkZDc3ZjUw'@;
put 'YmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjkiXSxbImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODAiLCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5'@;
put 'MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDYiXSxbIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjMiLCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0Il0s'@;
put 'WyIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmIiwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlIl0sWyJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdl'@;
put 'YjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzIiwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMSJdLFsiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2'@;
put 'OWEwYjQ0OCIsImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2IiXSxbIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmYiLCI1ZjMwMzJmNTg5MjE1NmUzOWNj'@;
put 'ZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxIl0sWyI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1IiwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2'@;
put 'YjM5ODQ3YjNjYzA5MmZmNiJdLFsiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNiIsIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWUiXSxbIjE2ZWM5M2U0'@;
put 'NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjUiLCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkIl0sWyJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1'@;
put 'ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5IiwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkYyJdLFsiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxIiwi'@;
put 'ZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNCJdLFsiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNSIsIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZi'@;
put 'YTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmMiXSxbImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjUiLCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJk'@;
put 'ODY0ZTZiIl0sWyJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3IiwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzIl0sWyI4NDFkNjA2M2E1ODZmYTQ3NWE3'@;
put 'MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxIiwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0Il0sWyI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRl'@;
put 'ZDExMmFjNGQ3MGUyMGQ1IiwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NSJdLFsiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NiIsImQyNDI0YjFiMWFi'@;
put 'ZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmMiXSxbIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNiIsImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQx'@;
put 'MGNkMWUwZWYzZGNkY2FiZDJmZGEyMjQiXSxbIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGUiLCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlIl0sWyIx'@;
put 'ZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0IiwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2Il0sWyI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIw'@;
put 'YTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxIiwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMSJdLFsiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFj'@;
put 'NWY1MSIsImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YiJdLFsiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MiIsImFlNDM0MTAyZWRkZTA5NThlYzRiMTlk'@;
put 'OTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjIiXSxbIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNSIsImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4Mjdj'@;
put 'ZTYyYTMyNjY4M2MiXSxbImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2IiLCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzIl0sWyJlYTAxNjA2YTdhNmM5'@;
put 'Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0IiwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZCJdLFsiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1'@;
put 'ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZiIsIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDAiXSxbImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5IiwiMmFlYWJl'@;
put 'N2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNCJdLFsiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NiIsImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZm'@;
put 'MGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTYiXSxbIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODQiLCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0'@;
put 'Il0sWyIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhIiwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1NyJdLFsiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcy'@;
put 'OTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMCIsImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTMiXSxbImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQx'@;
put 'MTliMjg4OWIxOTciLCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2Il0sWyJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTMiLCJjMzU5ZDY5MjNiYjM5OGY3'@;
put 'ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4Il0sWyJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmIiwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAz'@;
put 'MTM5ODYyYWZkNjE3ZmE5YjlmIl0sWyIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4IiwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OCJdLFsiZGE2NTQ1'@;
put 'ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YSIsIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGEiXSxbImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMy'@;
put 'NWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTEiLCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0Il0sWyI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAy'@;
put 'IiwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzNyJdLFsiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYSIsImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgy'@;
put 'OGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjciXSxbImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjYiLCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEw'@;
put 'MWM0M2IxYzZkIl0sWyJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2IiwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYSJdLFsiZDQyNjNkZmMzZDJkZjky'@;
put 'M2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZSIsIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTQiXSxbIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEy'@;
put 'ZGU0MjIyMzNlZWRhODk3NjEyYzQiLCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3Il0sWyJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhIiwiZWNmYjcw'@;
put 'NTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxNyJdLFsiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OSIsImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUy'@;
put 'MWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTAiXSxbImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWYiLCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1'@;
put 'Il0sWyJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjIiwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZSJdLFsiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2'@;
put 'ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MiIsImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjEiXSxbImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0'@;
put 'OTE2OTFlNTc2NGEiLCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyIl0sWyJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwIiwiNWYzMTBkNGIzYzk5Yjll'@;
put 'YmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyMyJdLFsiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZCIsIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUy'@;
put 'ZWRkZDQ3NDBkMDk4Y2VkMWYwZDgiXSxbIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTEiLCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4Il0sWyI1MmRi'@;
put 'MGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzIiwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1Il0sWyJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdk'@;
put 'MGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyIiwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZCJdLFsiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5'@;
put 'MyIsImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWMiXSxbIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDAiLCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3'@;
put 'NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzAiXSxbIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNTgiLCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3'@;
put 'Nzk0Yzg3NTNjIl0sWyJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3IiwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNCJdLFsiODQzODQ0NzU2NmQ0ZDdi'@;
put 'ZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOCIsImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWYiXSxbIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2'@;
put 'MGI4NzhhYjY1YzgyYzcxMWQ2N2UiLCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5Il0sWyIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkIiwiY2QxYmM3'@;
put 'Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2Il0sWyI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiIiwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRi'@;
put 'NTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNSJdLFsiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZiIsImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODci'@;
put 'XSxbIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjYiLCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiIl0sWyJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQz'@;
put 'MzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3IiwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliYyJdLFsiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1'@;
put 'OWZmZjVkZjA0YSIsIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2MiXSxbImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmMiLCJhYjhjMWUwODZkMDRlODEz'@;
put 'NzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmIl0sWyJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyIiwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0'@;
put 'ODBkODk1NWU4NTkyZjI3NDQ3YSJdLFsiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYiIsImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDYiXSxbIjQ2M2Uy'@;
put 'NzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjUiLCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmIl0sWyI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4'@;
put 'ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3IiwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwMyJdLFsiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNl'@;
put 'OSIsImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDgiXSxbIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTMiLCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdm'@;
put 'MzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4Il0sWyI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3IiwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYy'@;
put 'NjI5MDA4MzczIl0sWyIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2IiwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjMyJdLFsiNzVkNDZlZmVhMzc3MWU2'@;
put 'ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOCIsIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDgiXSxbIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4'@;
put 'NjkzNDViNzMxOWY2NDU2MDU3MjEiLCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxIl0sWyIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwIiwiNDAzNmVk'@;
put 'YzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOSJdXX19fSw5NTM6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1BLFU9RCgzNzg1KSxJPUQoOTc0NiksRT1EKDQ1MDQpO1AuYXNzZXJ0PUksUC50b0FycmF5PUUudG9BcnJheSxQLnpl'@;
put 'cm8yPUUuemVybzIsUC50b0hleD1FLnRvSGV4LFAuZW5jb2RlPUUuZW5jb2RlLFAuZ2V0TkFGPWZ1bmN0aW9uKGssQixOKXt2YXIgVj1uZXcgQXJyYXkoTWF0aC5tYXgoay5iaXRMZW5ndGgoKSxOKSsxKTtWLmZpbGwoMCk7Zm9yKHZhciBaPTE8PEIrMSxXPWsuY2xvbmUoKSx6PTA7ejxWLmxl'@;
put 'bmd0aDt6Kyspe3ZhciBxLFE9Vy5hbmRsbihaLTEpO1cuaXNPZGQoKT9XLmlzdWJuKHE9UT4oWj4+MSktMT8oWj4+MSktUTpRKTpxPTAsVlt6XT1xLFcuaXVzaHJuKDEpfXJldHVybiBWfSxQLmdldEpTRj1mdW5jdGlvbihrLEIpe3ZhciBOPVtbXSxbXV07az1rLmNsb25lKCksQj1CLmNsb25l'@;
put 'KCk7Zm9yKHZhciBWLFo9MCxXPTA7ay5jbXBuKC1aKT4wfHxCLmNtcG4oLVcpPjA7KXt2YXIgeixxLFE9ay5hbmRsbigzKStaJjMsdGU9Qi5hbmRsbigzKStXJjM7Mz09PVEmJihRPS0xKSwzPT09dGUmJih0ZT0tMSksej0xJlE/MyE9KFY9ay5hbmRsbig3KStaJjcpJiY1IT09Vnx8MiE9PXRl'@;
put 'P1E6LVE6MCxOWzBdLnB1c2goeikscT0xJnRlPzMhPShWPUIuYW5kbG4oNykrVyY3KSYmNSE9PVZ8fDIhPT1RP3RlOi10ZTowLE5bMV0ucHVzaChxKSwyKlo9PT16KzEmJihaPTEtWiksMipXPT09cSsxJiYoVz0xLVcpLGsuaXVzaHJuKDEpLEIuaXVzaHJuKDEpfXJldHVybiBOfSxQLmNhY2hl'@;
put 'ZFByb3BlcnR5PWZ1bmN0aW9uKGssQixOKXt2YXIgVj0iXyIrQjtrLnByb3RvdHlwZVtCXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW1ZdP3RoaXNbVl06dGhpc1tWXT1OLmNhbGwodGhpcyl9fSxQLnBhcnNlQnl0ZXM9ZnVuY3Rpb24oayl7cmV0dXJuInN0cmluZyI9PXR5cGVv'@;
put 'ZiBrP1AudG9BcnJheShrLCJoZXgiKTprfSxQLmludEZyb21MRT1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IFUoaywiaGV4IiwibGUiKX19LDM3ODU6ZnVuY3Rpb24odyxBLEQpeyFmdW5jdGlvbihQLFUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsUyl7aWYoIWcpdGhyb3cgbmV3IEVycm9y'@;
put 'KFN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gRShnLFMpe2cuc3VwZXJfPVM7dmFyIHg9ZnVuY3Rpb24oKXt9O3gucHJvdG90eXBlPVMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyB4LGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gayhnLFMseCl7aWYoay5pc0JO'@;
put 'KGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PVMmJiJiZSIhPT1TfHwoeD1TLFM9MTApLHRoaXMuX2luaXQoZ3x8MCxTfHwxMCx4fHwiYmUiKSl9dmFyIEI7Im9iamVjdCI9PXR5'@;
put 'cGVvZiBQP1AuZXhwb3J0cz1rOlUuQk49ayxrLkJOPWssay53b3JkU2l6ZT0yNjt0cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkQoNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBOKGcsUyl7dmFyIHg9Zy5jaGFyQ29kZUF0'@;
put 'KFMpO3JldHVybiB4Pj02NSYmeDw9NzA/eC01NTp4Pj05NyYmeDw9MTAyP3gtODc6eC00OCYxNX1mdW5jdGlvbiBWKGcsUyx4KXt2YXIgXz1OKGcseCk7cmV0dXJuIHgtMT49UyYmKF98PU4oZyx4LTEpPDw0KSxffWZ1bmN0aW9uIFooZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz1NYXRoLm1pbihn'@;
put 'Lmxlbmd0aCx4KSxLPVM7SzxDO0srKyl7dmFyIG5lPWcuY2hhckNvZGVBdChLKS00ODtwKj1fLHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9ay5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Yga3x8bnVsbCE9PWcmJiJvYmplY3QiPT10'@;
put 'eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWsud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LGsubWF4PWZ1bmN0aW9uKGcsUyl7cmV0dXJuIGcuY21wKFMpPjA/ZzpTfSxrLm1pbj1mdW5jdGlvbihnLFMpe3JldHVybiBnLmNtcChTKTwwP2c6U30say5wcm90b3R5'@;
put 'cGUuX2luaXQ9ZnVuY3Rpb24oZyxTLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLFMseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxTLHgpOyJoZXgiPT09UyYmKFM9MTYpLEkoUz09PSgwfFMpJiZTPj0y'@;
put 'JiZTPD0zNik7dmFyIF89MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKF8rKyx0aGlzLm5lZ2F0aXZlPTEpLF88Zy5sZW5ndGgmJigxNj09PVM/dGhpcy5fcGFyc2VIZXgoZyxfLHgpOih0aGlzLl9wYXJzZUJhc2UoZyxTLF8pLCJsZSI9PT14JiZ0aGlz'@;
put 'Ll9pbml0QXJyYXkodGhpcy50b0FycmF5KCksUyx4KSkpfSxrLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLFMseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYy'@;
put 'NzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhp'@;
put 'cy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFMseCl9LGsucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxTLHgpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxl'@;
put 'bmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0wO188dGhpcy5sZW5ndGg7XysrKXRoaXMud29yZHNbX109MDt2YXIgcCxDLEs9MDtpZigiYmUiPT09eClmb3IoXz1nLmxlbmd0aC0xLHA9MDtfPj0wO18tPTMpdGhp'@;
put 'cy53b3Jkc1twXXw9KEM9Z1tfXXxnW18tMV08PDh8Z1tfLTJdPDwxNik8PEsmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPUM+Pj4yNi1LJjY3MTA4ODYzLChLKz0yNCk+PTI2JiYoSy09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihfPTAscD0wO188Zy5sZW5ndGg7Xys9Myl0aGlzLndv'@;
put 'cmRzW3BdfD0oQz1nW19dfGdbXysxXTw8OHxnW18rMl08PDE2KTw8SyY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Qz4+PjI2LUsmNjcxMDg4NjMsKEsrPTI0KT49MjYmJihLLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLFMs'@;
put 'eCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1TKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT0wO3ZhciBwLEM9MCxLPTA7aWYoImJlIj09PXgpZm9yKF89Zy5sZW5ndGgtMTtf'@;
put 'Pj1TO18tPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndvcmRzW0tdfD02NzEwODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRzW0srPTFdfD1wPj4+MjYpOkMrPTg7ZWxzZSBmb3IoXz0oZy5sZW5ndGgtUyklMj09MD9TKzE6UztfPGcubGVuZ3RoO18rPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndv'@;
put 'cmRzW0tdfD02NzEwODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRzW0srPTFdfD1wPj4+MjYpOkMrPTg7dGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsUyx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgXz0wLHA9MTtwPD02'@;
put 'NzEwODg2MztwKj1TKV8rKztfLS0scD1wL1N8MDtmb3IodmFyIEM9Zy5sZW5ndGgteCxLPUMlXyxuZT1NYXRoLm1pbihDLEMtSykreCx1ZT0wLGhlPXg7aGU8bmU7aGUrPV8pdWU9WihnLGhlLGhlK18sUyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0P3RoaXMud29y'@;
put 'ZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVlKTtpZigwIT09Syl7dmFyIHhlPTE7Zm9yKHVlPVooZyxoZSxnLmxlbmd0aCxTKSxoZT0wO2hlPEs7aGUrKyl4ZSo9Uzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVl'@;
put 'KX10aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKWcud29yZHNbU109dGhpcy53b3Jkc1tTXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRo'@;
put 'aXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LGsucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IGsobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxrLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlz'@;
put 'Lmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGsucHJvdG90eXBlLl9ub3JtU2ln'@;
put 'bj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxrLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsi'@;
put 'PiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHo9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUs'@;
put 'NV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgx'@;
put 'LDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBRKGcsUyx4KXt4Lm5l'@;
put 'Z2F0aXZlPVMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgXz1nLmxlbmd0aCtTLmxlbmd0aHwwO3gubGVuZ3RoPV8sXz1fLTF8MDt2YXIgcD0wfGcud29yZHNbMF0sQz0wfFMud29yZHNbMF0sSz1wKkMsdWU9Sy82NzEwODg2NHwwO3gud29yZHNbMF09NjcxMDg4NjMmSztmb3IodmFyIGhlPTE7'@;
put 'aGU8XztoZSsrKXtmb3IodmFyIHhlPXVlPj4+MjYsT2U9NjcxMDg4NjMmdWUsSGU9TWF0aC5taW4oaGUsUy5sZW5ndGgtMSksRWU9TWF0aC5tYXgoMCxoZS1nLmxlbmd0aCsxKTtFZTw9SGU7RWUrKyl4ZSs9KEs9KHA9MHxnLndvcmRzW2hlLUVlfDBdKSooQz0wfFMud29yZHNbRWVdKStPZSkv'@;
put 'NjcxMDg4NjR8MCxPZT02NzEwODg2MyZLO3gud29yZHNbaGVdPTB8T2UsdWU9MHx4ZX1yZXR1cm4gMCE9PXVlP3gud29yZHNbaGVdPTB8dWU6eC5sZW5ndGgtLSx4LnN0cmlwKCl9ay5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxTKXt2YXIgeDtpZihTPTB8U3x8MSwxNj09PShnPWd8'@;
put 'fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgXz0wLHA9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBLPXRoaXMud29yZHNbQ10sbmU9KDE2Nzc3MjE1JihLPDxffHApKS50b1N0cmluZygxNik7eD0wIT0ocD1LPj4+MjQtXyYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP1db'@;
put 'Ni1uZS5sZW5ndGhdK25lK3g6bmUreCwoXys9Mik+PTI2JiYoXy09MjYsQy0tKX1mb3IoMCE9PXAmJih4PXAudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJVMhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2'@;
put 'KXt2YXIgdWU9eltnXSxoZT1xW2ddO3g9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgT2U9eGUubW9kbihoZSkudG9TdHJpbmcoZyk7eD0oeGU9eGUuaWRpdm4oaGUpKS5pc1plcm8oKT9PZSt4OldbdWUtT2UubGVuZ3RoXStPZSt4'@;
put 'fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglUyE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0say5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2'@;
put 'YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCEx'@;
put 'LCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGsucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsUyl7cmV0'@;
put 'dXJuIEkodm9pZCAwIT09QiksdGhpcy50b0FycmF5TGlrZShCLGcsUyl9LGsucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLFMpfSxrLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLFMseCl7dmFyIF89dGhpcy5i'@;
put 'eXRlTGVuZ3RoKCkscD14fHxNYXRoLm1heCgxLF8pO0koXzw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEMsSyxuZT0ibGUiPT09Uyx1ZT1uZXcgZyhwKSxoZT10'@;
put 'aGlzLmNsb25lKCk7aWYobmUpe2ZvcihLPTA7IWhlLmlzWmVybygpO0srKylDPWhlLmFuZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW0tdPUM7Zm9yKDtLPHA7SysrKXVlW0tdPTB9ZWxzZXtmb3IoSz0wO0s8cC1fO0srKyl1ZVtLXT0wO2ZvcihLPTA7IWhlLmlzWmVybygpO0srKylDPWhlLmFu'@;
put 'ZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW3AtSy0xXT1DfXJldHVybiB1ZX0say5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgUz1nLHg9MDtyZXR1cm4gUz49NDA5NiYmKHgrPTEzLFM+'@;
put 'Pj49MTMpLFM+PTY0JiYoeCs9NyxTPj4+PTcpLFM+PTgmJih4Kz00LFM+Pj49NCksUz49MiYmKHgrPTIsUz4+Pj0yKSx4K1N9LGsucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIFM9Zyx4PTA7cmV0dXJuISg4MTkxJlMpJiYoeCs9MTMsUz4+'@;
put 'Pj0xMyksISgxMjcmUykmJih4Kz03LFM+Pj49NyksISgxNSZTKSYmKHgrPTQsUz4+Pj00KSwhKDMmUykmJih4Kz0yLFM+Pj49MiksISgxJlMpJiZ4KysseH0say5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5n'@;
put 'dGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrU30say5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tTXSk7'@;
put 'aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LGsucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGsucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5h'@;
put 'YnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGsucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGsucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7'@;
put 'cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxrLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0say5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30say5wcm90b3R5'@;
put 'cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdfGcud29yZHNbU107cmV0dXJuIHRoaXMuc3RyaXAoKX0say5w'@;
put 'cm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxrLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9y'@;
put 'KHRoaXMpfSxrLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxrLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgUztTPXRoaXMubGVuZ3RoPmcubGVuZ3Ro'@;
put 'P2c6dGhpcztmb3IodmFyIHg9MDt4PFMubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Uy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdh'@;
put 'dGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0say5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0say5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0say5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIFMseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHg9Zyk6KFM9Zyx4PXRoaXMpO2Zvcih2YXIgXz0w'@;
put 'O188eC5sZW5ndGg7XysrKXRoaXMud29yZHNbX109Uy53b3Jkc1tfXV54LndvcmRzW19dO2lmKHRoaXMhPT1TKWZvcig7XzxTLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT1TLndvcmRzW19dO3JldHVybiB0aGlzLmxlbmd0aD1TLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLml4'@;
put 'b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxrLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMp'@;
put 'fSxrLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxrLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFy'@;
put 'IFM9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZChTKSx4PjAmJlMtLTtmb3IodmFyIF89MDtfPFM7XysrKXRoaXMud29yZHNbX109NjcxMDg4NjMmfnRoaXMud29yZHNbX107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbX109fnRoaXMud29yZHNbX10mNjcxMDg4NjM+PjI2'@;
put 'LXgpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxrLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsUyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxfPWclMjY7cmV0dXJuIHRo'@;
put 'aXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Uz90aGlzLndvcmRzW3hdfDE8PF86dGhpcy53b3Jkc1t4XSZ+KDE8PF8pLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgUyx4LF87aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJl'@;
put 'dHVybiB0aGlzLm5lZ2F0aXZlPTAsUz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLFM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxTLl9ub3JtU2ln'@;
put 'bigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsXz1nKTooeD1nLF89dGhpcyk7Zm9yKHZhciBwPTAsQz0wO0M8Xy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKFM9KDB8eC53b3Jkc1tDXSkrKDB8Xy53b3Jkc1tDXSkrcCkscD1TPj4+MjY7Zm9yKDswIT09cCYmQzx4'@;
put 'Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoUz0oMHx4LndvcmRzW0NdKStwKSxwPVM+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0M8eC5sZW5n'@;
put 'dGg7QysrKXRoaXMud29yZHNbQ109eC53b3Jkc1tDXTtyZXR1cm4gdGhpc30say5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBTO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxTPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsUyk6'@;
put 'MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsUz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsUyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LGsucHJvdG90eXBlLmlzdWI9'@;
put 'ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgUz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxTLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRp'@;
put 'dmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciB4LF8scD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyh4PXRoaXMsXz1nKTooeD1nLF89dGhpcyk7Zm9yKHZhciBDPTAsSz0wO0s8Xy5sZW5n'@;
put 'dGg7SysrKUM9KFM9KDB8eC53b3Jkc1tLXSktKDB8Xy53b3Jkc1tLXSkrQyk+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmUztmb3IoOzAhPT1DJiZLPHgubGVuZ3RoO0srKylDPShTPSgwfHgud29yZHNbS10pK0MpPj4yNix0aGlzLndvcmRzW0tdPTY3MTA4ODYzJlM7aWYoMD09PUMmJks8'@;
put 'eC5sZW5ndGgmJnghPT10aGlzKWZvcig7Szx4Lmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT14LndvcmRzW0tdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxLKSx4IT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5zdWI9'@;
put 'ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfLHAsQyxLPWcud29yZHMsbmU9Uy53b3Jkcyx1ZT14LndvcmRzLGhlPTAseGU9MHxLWzBdLE9lPTgxOTEmeGUsSGU9eGU+Pj4xMyxFZT0wfEtbMV0sTGU9ODE5MSZFZSxO'@;
put 'ZT1FZT4+PjEzLEtlPTB8S1syXSxVZT04MTkxJktlLFhlPUtlPj4+MTMsYXQ9MHxLWzNdLEZlPTgxOTEmYXQsQ2U9YXQ+Pj4xMyxEZT0wfEtbNF0sUmU9ODE5MSZEZSxldD1EZT4+PjEzLG50PTB8S1s1XSxHZT04MTkxJm50LGR0PW50Pj4+MTMsVGU9MHxLWzZdLEFlPTgxOTEmVGUsQmU9VGU+'@;
put 'Pj4xMyxvdD0wfEtbN10sbHQ9ODE5MSZvdCxDdD1vdD4+PjEzLEZ0PTB8S1s4XSxSdD04MTkxJkZ0LFh0PUZ0Pj4+MTMsU249MHxLWzldLHp0PTgxOTEmU24sdm49U24+Pj4xMyxCbj0wfG5lWzBdLHRuPTgxOTEmQm4sWm49Qm4+Pj4xMyxPbj0wfG5lWzFdLHB0PTgxOTEmT24sZm49T24+Pj4x'@;
put 'Myxkbj0wfG5lWzJdLE10PTgxOTEmZG4sWXQ9ZG4+Pj4xMyxfdD0wfG5lWzNdLGp0PTgxOTEmX3QscG49X3Q+Pj4xMyxydD0wfG5lWzRdLEV0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxUdD0wfG5lWzVdLG10PTgxOTEmVHQsR3Q9VHQ+Pj4xMyxrbj0wfG5lWzZdLEJ0PTgxOTEma24sYm49a24+Pj4x'@;
put 'MyxDbj0wfG5lWzddLGVuPTgxOTEmQ24sUG49Q24+Pj4xMyx3bj0wfG5lWzhdLCR0PTgxOTEmd24sV249d24+Pj4xMyxjaT0wfG5lWzldLGxuPTgxOTEmY2ksbm49Y2k+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeUy5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWk9KGhlKyhfPU1hdGgu'@;
put 'aW11bChPZSx0bikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoT2UsWm4pKStNYXRoLmltdWwoSGUsdG4pfDApKTw8MTMpfDA7aGU9KChDPU1hdGguaW11bChIZSxabikpKyhwPj4+MTMpfDApKyh1aT4+PjI2KXwwLHVpJj02NzEwODg2MyxfPU1hdGguaW11bChMZSx0bikscD0ocD1NYXRo'@;
put 'LmltdWwoTGUsWm4pKStNYXRoLmltdWwoTmUsdG4pfDAsQz1NYXRoLmltdWwoTmUsWm4pO3ZhciBBcj0oaGUrKF89XytNYXRoLmltdWwoT2UscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEhlLHB0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01h'@;
put 'dGguaW11bChIZSxmbil8MCkrKHA+Pj4xMyl8MCkrKEFyPj4+MjYpfDAsQXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKFVlLHRuKSxwPShwPU1hdGguaW11bChVZSxabikpK01hdGguaW11bChYZSx0bil8MCxDPU1hdGguaW11bChYZSxabiksXz1fK01hdGguaW11bChMZSxwdCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoTmUscHQpfDAsQz1DK01hdGguaW11bChOZSxmbil8MDt2YXIgbXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLE10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsWXQpfDApK01hdGguaW11bChIZSxNdCl8MCkpPDwxMyl8MDto'@;
put 'ZT0oKEM9QytNYXRoLmltdWwoSGUsWXQpfDApKyhwPj4+MTMpfDApKyhtcj4+PjI2KXwwLG1yJj02NzEwODg2MyxfPU1hdGguaW11bChGZSx0bikscD0ocD1NYXRoLmltdWwoRmUsWm4pKStNYXRoLmltdWwoQ2UsdG4pfDAsQz1NYXRoLmltdWwoQ2UsWm4pLF89XytNYXRoLmltdWwoVWUscHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFhlLHB0KXwwLEM9QytNYXRoLmltdWwoWGUsZm4pfDAsXz1fK01hdGguaW11bChMZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoTmUsTXQpfDAsQz1DK01hdGguaW11bChOZSxZdCl8MDt2'@;
put 'YXIgeWk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UscG4pfDApK01hdGguaW11bChIZSxqdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUscG4pfDApKyhwPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2'@;
put 'MyxfPU1hdGguaW11bChSZSx0bikscD0ocD1NYXRoLmltdWwoUmUsWm4pKStNYXRoLmltdWwoZXQsdG4pfDAsQz1NYXRoLmltdWwoZXQsWm4pLF89XytNYXRoLmltdWwoRmUscHQpfDAscD0ocD1wK01hdGguaW11bChGZSxmbil8MCkrTWF0aC5pbXVsKENlLHB0KXwwLEM9QytNYXRoLmltdWwo'@;
put 'Q2UsZm4pfDAsXz1fK01hdGguaW11bChVZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoWGUsTXQpfDAsQz1DK01hdGguaW11bChYZSxZdCl8MCxfPV8rTWF0aC5pbXVsKExlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUscG4pfDApK01hdGguaW11bChOZSxq'@;
put 'dCl8MCxDPUMrTWF0aC5pbXVsKE5lLHBuKXwwO3ZhciAkcj0oaGUrKF89XytNYXRoLmltdWwoT2UsRXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKEhlLEV0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxRdCl8MCkrKHA+Pj4x'@;
put 'Myl8MCkrKCRyPj4+MjYpfDAsJHImPTY3MTA4ODYzLF89TWF0aC5pbXVsKEdlLHRuKSxwPShwPU1hdGguaW11bChHZSxabikpK01hdGguaW11bChkdCx0bil8MCxDPU1hdGguaW11bChkdCxabiksXz1fK01hdGguaW11bChSZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRo'@;
put 'LmltdWwoZXQscHQpfDAsQz1DK01hdGguaW11bChldCxmbil8MCxfPV8rTWF0aC5pbXVsKEZlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWXQpfDApK01hdGguaW11bChDZSxNdCl8MCxDPUMrTWF0aC5pbXVsKENlLFl0KXwwLF89XytNYXRoLmltdWwoVWUsanQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChVZSxwbil8MCkrTWF0aC5pbXVsKFhlLGp0KXwwLEM9QytNYXRoLmltdWwoWGUscG4pfDAsXz1fK01hdGguaW11bChMZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoTmUsRXQpfDAsQz1DK01hdGguaW11bChOZSxRdCl8MDt2YXIgSmk9KGhlKyhfPV8r'@;
put 'TWF0aC5pbXVsKE9lLG10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChIZSxtdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsR3QpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxfPU1hdGguaW11bChB'@;
put 'ZSx0bikscD0ocD1NYXRoLmltdWwoQWUsWm4pKStNYXRoLmltdWwoQmUsdG4pfDAsQz1NYXRoLmltdWwoQmUsWm4pLF89XytNYXRoLmltdWwoR2UscHQpfDAscD0ocD1wK01hdGguaW11bChHZSxmbil8MCkrTWF0aC5pbXVsKGR0LHB0KXwwLEM9QytNYXRoLmltdWwoZHQsZm4pfDAsXz1fK01h'@;
put 'dGguaW11bChSZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFl0KXwwKStNYXRoLmltdWwoZXQsTXQpfDAsQz1DK01hdGguaW11bChldCxZdCl8MCxfPV8rTWF0aC5pbXVsKEZlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChDZSxqdCl8MCxDPUMrTWF0aC5p'@;
put 'bXVsKENlLHBuKXwwLF89XytNYXRoLmltdWwoVWUsRXQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKFhlLEV0KXwwLEM9QytNYXRoLmltdWwoWGUsUXQpfDAsXz1fK01hdGguaW11bChMZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLEd0KXwwKStNYXRoLmltdWwo'@;
put 'TmUsbXQpfDAsQz1DK01hdGguaW11bChOZSxHdCl8MDt2YXIgeXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLEJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsYm4pfDApK01hdGguaW11bChIZSxCdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsYm4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGguaW11bChsdCx0bikscD0ocD1NYXRoLmltdWwobHQsWm4pKStNYXRoLmltdWwoQ3QsdG4pfDAsQz1NYXRoLmltdWwoQ3QsWm4pLF89XytNYXRoLmltdWwoQWUscHQpfDAscD0ocD1wK01hdGguaW11bChBZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKEJlLHB0KXwwLEM9QytNYXRoLmltdWwoQmUsZm4pfDAsXz1fK01hdGguaW11bChHZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFl0KXwwKStNYXRoLmltdWwoZHQsTXQpfDAsQz1DK01hdGguaW11bChkdCxZdCl8MCxfPV8rTWF0aC5pbXVsKFJlLGp0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChldCxqdCl8MCxDPUMrTWF0aC5pbXVsKGV0LHBuKXwwLF89XytNYXRoLmltdWwoRmUsRXQpfDAscD0ocD1wK01hdGguaW11bChGZSxRdCl8MCkrTWF0aC5pbXVsKENlLEV0KXwwLEM9QytNYXRoLmltdWwoQ2UsUXQpfDAsXz1fK01hdGguaW11'@;
put 'bChVZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEd0KXwwKStNYXRoLmltdWwoWGUsbXQpfDAsQz1DK01hdGguaW11bChYZSxHdCl8MCxfPV8rTWF0aC5pbXVsKExlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsYm4pfDApK01hdGguaW11bChOZSxCdCl8MCxDPUMrTWF0aC5pbXVsKE5l'@;
put 'LGJuKXwwO3ZhciBJaT0oaGUrKF89XytNYXRoLmltdWwoT2UsZW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxQbil8MCkrTWF0aC5pbXVsKEhlLGVuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxQbil8MCkrKHA+Pj4xMyl8MCkrKElpPj4+MjYpfDAsSWkm'@;
put 'PTY3MTA4ODYzLF89TWF0aC5pbXVsKFJ0LHRuKSxwPShwPU1hdGguaW11bChSdCxabikpK01hdGguaW11bChYdCx0bil8MCxDPU1hdGguaW11bChYdCxabiksXz1fK01hdGguaW11bChsdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZuKXwwKStNYXRoLmltdWwoQ3QscHQpfDAsQz1DK01h'@;
put 'dGguaW11bChDdCxmbil8MCxfPV8rTWF0aC5pbXVsKEFlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsWXQpfDApK01hdGguaW11bChCZSxNdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFl0KXwwLF89XytNYXRoLmltdWwoR2UsanQpfDAscD0ocD1wK01hdGguaW11bChHZSxwbil8MCkrTWF0aC5p'@;
put 'bXVsKGR0LGp0KXwwLEM9QytNYXRoLmltdWwoZHQscG4pfDAsXz1fK01hdGguaW11bChSZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFF0KXwwKStNYXRoLmltdWwoZXQsRXQpfDAsQz1DK01hdGguaW11bChldCxRdCl8MCxfPV8rTWF0aC5pbXVsKEZlLG10KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRmUsR3QpfDApK01hdGguaW11bChDZSxtdCl8MCxDPUMrTWF0aC5pbXVsKENlLEd0KXwwLF89XytNYXRoLmltdWwoVWUsQnQpfDAscD0ocD1wK01hdGguaW11bChVZSxibil8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEM9QytNYXRoLmltdWwoWGUsYm4pfDAsXz1fK01hdGguaW11bChMZSxl'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoTmUsZW4pfDAsQz1DK01hdGguaW11bChOZSxQbil8MDt2YXIgbm89KGhlKyhfPV8rTWF0aC5pbXVsKE9lLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsV24pfDApK01hdGguaW11bChIZSwkdCl8'@;
put 'MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsV24pfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCx0bikscD0ocD1NYXRoLmltdWwoenQsWm4pKStNYXRoLmltdWwodm4sdG4pfDAsQz1NYXRoLmltdWwodm4sWm4pLF89XytNYXRo'@;
put 'LmltdWwoUnQscHQpfDAscD0ocD1wK01hdGguaW11bChSdCxmbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEM9QytNYXRoLmltdWwoWHQsZm4pfDAsXz1fK01hdGguaW11bChsdCxNdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFl0KXwwKStNYXRoLmltdWwoQ3QsTXQpfDAsQz1DK01hdGguaW11'@;
put 'bChDdCxZdCl8MCxfPV8rTWF0aC5pbXVsKEFlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscG4pfDApK01hdGguaW11bChCZSxqdCl8MCxDPUMrTWF0aC5pbXVsKEJlLHBuKXwwLF89XytNYXRoLmltdWwoR2UsRXQpfDAscD0ocD1wK01hdGguaW11bChHZSxRdCl8MCkrTWF0aC5pbXVsKGR0'@;
put 'LEV0KXwwLEM9QytNYXRoLmltdWwoZHQsUXQpfDAsXz1fK01hdGguaW11bChSZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEd0KXwwKStNYXRoLmltdWwoZXQsbXQpfDAsQz1DK01hdGguaW11bChldCxHdCl8MCxfPV8rTWF0aC5pbXVsKEZlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUs'@;
put 'Ym4pfDApK01hdGguaW11bChDZSxCdCl8MCxDPUMrTWF0aC5pbXVsKENlLGJuKXwwLF89XytNYXRoLmltdWwoVWUsZW4pfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKFhlLGVuKXwwLEM9QytNYXRoLmltdWwoWGUsUG4pfDAsXz1fK01hdGguaW11bChMZSwkdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKExlLFduKXwwKStNYXRoLmltdWwoTmUsJHQpfDAsQz1DK01hdGguaW11bChOZSxXbil8MDt2YXIgem49KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2Usbm4pfDApK01hdGguaW11bChIZSxsbil8MCkpPDwx'@;
put 'Myl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsbm4pfDApKyhwPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxwdCkscD0ocD1NYXRoLmltdWwoenQsZm4pKStNYXRoLmltdWwodm4scHQpfDAsQz1NYXRoLmltdWwodm4sZm4pLF89XytNYXRoLmltdWwo'@;
put 'UnQsTXQpfDAscD0ocD1wK01hdGguaW11bChSdCxZdCl8MCkrTWF0aC5pbXVsKFh0LE10KXwwLEM9QytNYXRoLmltdWwoWHQsWXQpfDAsXz1fK01hdGguaW11bChsdCxqdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHBuKXwwKStNYXRoLmltdWwoQ3QsanQpfDAsQz1DK01hdGguaW11bChDdCxw'@;
put 'bil8MCxfPV8rTWF0aC5pbXVsKEFlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsUXQpfDApK01hdGguaW11bChCZSxFdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFF0KXwwLF89XytNYXRoLmltdWwoR2UsbXQpfDAscD0ocD1wK01hdGguaW11bChHZSxHdCl8MCkrTWF0aC5pbXVsKGR0LG10KXww'@;
put 'LEM9QytNYXRoLmltdWwoZHQsR3QpfDAsXz1fK01hdGguaW11bChSZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLGJuKXwwKStNYXRoLmltdWwoZXQsQnQpfDAsQz1DK01hdGguaW11bChldCxibil8MCxfPV8rTWF0aC5pbXVsKEZlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsUG4pfDAp'@;
put 'K01hdGguaW11bChDZSxlbil8MCxDPUMrTWF0aC5pbXVsKENlLFBuKXwwLF89XytNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxXbil8MCkrTWF0aC5pbXVsKFhlLCR0KXwwLEM9QytNYXRoLmltdWwoWGUsV24pfDA7dmFyIFppPShoZSsoXz1fK01hdGguaW11bChMZSxs'@;
put 'bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoTmUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKE5lLG5uKXwwKSsocD4+PjEzKXwwKSsoWmk+Pj4yNil8MCxaaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsTXQpLHA9KHA9TWF0'@;
put 'aC5pbXVsKHp0LFl0KSkrTWF0aC5pbXVsKHZuLE10KXwwLEM9TWF0aC5pbXVsKHZuLFl0KSxfPV8rTWF0aC5pbXVsKFJ0LGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQscG4pfDApK01hdGguaW11bChYdCxqdCl8MCxDPUMrTWF0aC5pbXVsKFh0LHBuKXwwLF89XytNYXRoLmltdWwobHQsRXQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChsdCxRdCl8MCkrTWF0aC5pbXVsKEN0LEV0KXwwLEM9QytNYXRoLmltdWwoQ3QsUXQpfDAsXz1fK01hdGguaW11bChBZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEd0KXwwKStNYXRoLmltdWwoQmUsbXQpfDAsQz1DK01hdGguaW11bChCZSxHdCl8MCxf'@;
put 'PV8rTWF0aC5pbXVsKEdlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsYm4pfDApK01hdGguaW11bChkdCxCdCl8MCxDPUMrTWF0aC5pbXVsKGR0LGJuKXwwLF89XytNYXRoLmltdWwoUmUsZW4pfDAscD0ocD1wK01hdGguaW11bChSZSxQbil8MCkrTWF0aC5pbXVsKGV0LGVuKXwwLEM9QytN'@;
put 'YXRoLmltdWwoZXQsUG4pfDAsXz1fK01hdGguaW11bChGZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFduKXwwKStNYXRoLmltdWwoQ2UsJHQpfDAsQz1DK01hdGguaW11bChDZSxXbil8MDt2YXIgV2k9KGhlKyhfPV8rTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtN'@;
put 'YXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChYZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoWGUsbm4pfDApKyhwPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxqdCkscD0ocD1NYXRoLmltdWwoenQscG4pKStNYXRoLmltdWwo'@;
put 'dm4sanQpfDAsQz1NYXRoLmltdWwodm4scG4pLF89XytNYXRoLmltdWwoUnQsRXQpfDAscD0ocD1wK01hdGguaW11bChSdCxRdCl8MCkrTWF0aC5pbXVsKFh0LEV0KXwwLEM9QytNYXRoLmltdWwoWHQsUXQpfDAsXz1fK01hdGguaW11bChsdCxtdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEd0'@;
put 'KXwwKStNYXRoLmltdWwoQ3QsbXQpfDAsQz1DK01hdGguaW11bChDdCxHdCl8MCxfPV8rTWF0aC5pbXVsKEFlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsYm4pfDApK01hdGguaW11bChCZSxCdCl8MCxDPUMrTWF0aC5pbXVsKEJlLGJuKXwwLF89XytNYXRoLmltdWwoR2UsZW4pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChHZSxQbil8MCkrTWF0aC5pbXVsKGR0LGVuKXwwLEM9QytNYXRoLmltdWwoZHQsUG4pfDAsXz1fK01hdGguaW11bChSZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFduKXwwKStNYXRoLmltdWwoZXQsJHQpfDAsQz1DK01hdGguaW11bChldCxXbil8MDt2YXIgb289'@;
put 'KGhlKyhfPV8rTWF0aC5pbXVsKEZlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRmUsbm4pfDApK01hdGguaW11bChDZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQ2Usbm4pfDApKyhwPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1h'@;
put 'dGguaW11bCh6dCxFdCkscD0ocD1NYXRoLmltdWwoenQsUXQpKStNYXRoLmltdWwodm4sRXQpfDAsQz1NYXRoLmltdWwodm4sUXQpLF89XytNYXRoLmltdWwoUnQsbXQpfDAscD0ocD1wK01hdGguaW11bChSdCxHdCl8MCkrTWF0aC5pbXVsKFh0LG10KXwwLEM9QytNYXRoLmltdWwoWHQsR3Qp'@;
put 'fDAsXz1fK01hdGguaW11bChsdCxCdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LGJuKXwwKStNYXRoLmltdWwoQ3QsQnQpfDAsQz1DK01hdGguaW11bChDdCxibil8MCxfPV8rTWF0aC5pbXVsKEFlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsUG4pfDApK01hdGguaW11bChCZSxlbil8MCxD'@;
put 'PUMrTWF0aC5pbXVsKEJlLFBuKXwwLF89XytNYXRoLmltdWwoR2UsJHQpfDAscD0ocD1wK01hdGguaW11bChHZSxXbil8MCkrTWF0aC5pbXVsKGR0LCR0KXwwLEM9QytNYXRoLmltdWwoZHQsV24pfDA7dmFyIGhvPShoZSsoXz1fK01hdGguaW11bChSZSxsbil8MCl8MCkrKCg4MTkxJihwPShw'@;
put 'PXArTWF0aC5pbXVsKFJlLG5uKXwwKStNYXRoLmltdWwoZXQsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKGV0LG5uKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsbXQpLHA9KHA9TWF0aC5pbXVsKHp0LEd0KSkrTWF0aC5p'@;
put 'bXVsKHZuLG10KXwwLEM9TWF0aC5pbXVsKHZuLEd0KSxfPV8rTWF0aC5pbXVsKFJ0LEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsYm4pfDApK01hdGguaW11bChYdCxCdCl8MCxDPUMrTWF0aC5pbXVsKFh0LGJuKXwwLF89XytNYXRoLmltdWwobHQsZW4pfDAscD0ocD1wK01hdGguaW11bChs'@;
put 'dCxQbil8MCkrTWF0aC5pbXVsKEN0LGVuKXwwLEM9QytNYXRoLmltdWwoQ3QsUG4pfDAsXz1fK01hdGguaW11bChBZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLFduKXwwKStNYXRoLmltdWwoQmUsJHQpfDAsQz1DK01hdGguaW11bChCZSxXbil8MDt2YXIgTHI9KGhlKyhfPV8rTWF0aC5p'@;
put 'bXVsKEdlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoR2Usbm4pfDApK01hdGguaW11bChkdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoZHQsbm4pfDApKyhwPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxCdCks'@;
put 'cD0ocD1NYXRoLmltdWwoenQsYm4pKStNYXRoLmltdWwodm4sQnQpfDAsQz1NYXRoLmltdWwodm4sYm4pLF89XytNYXRoLmltdWwoUnQsZW4pfDAscD0ocD1wK01hdGguaW11bChSdCxQbil8MCkrTWF0aC5pbXVsKFh0LGVuKXwwLEM9QytNYXRoLmltdWwoWHQsUG4pfDAsXz1fK01hdGguaW11'@;
put 'bChsdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFduKXwwKStNYXRoLmltdWwoQ3QsJHQpfDAsQz1DK01hdGguaW11bChDdCxXbil8MDt2YXIgQmk9KGhlKyhfPV8rTWF0aC5pbXVsKEFlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChC'@;
put 'ZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQmUsbm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxlbikscD0ocD1NYXRoLmltdWwoenQsUG4pKStNYXRoLmltdWwodm4sZW4pfDAsQz1NYXRoLmltdWwodm4sUG4pLF89'@;
put 'XytNYXRoLmltdWwoUnQsJHQpfDAscD0ocD1wK01hdGguaW11bChSdCxXbil8MCkrTWF0aC5pbXVsKFh0LCR0KXwwLEM9QytNYXRoLmltdWwoWHQsV24pfDA7dmFyIExvPShoZSsoXz1fK01hdGguaW11bChsdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LG5uKXwwKStN'@;
put 'YXRoLmltdWwoQ3QsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEN0LG5uKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsJHQpLHA9KHA9TWF0aC5pbXVsKHp0LFduKSkrTWF0aC5pbXVsKHZuLCR0KXwwLEM9TWF0aC5pbXVs'@;
put 'KHZuLFduKTt2YXIgS289KGhlKyhfPV8rTWF0aC5pbXVsKFJ0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUnQsbm4pfDApK01hdGguaW11bChYdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoWHQsbm4pfDApKyhwPj4+MTMpfDApKyhLbz4+PjI2KXwwLEtv'@;
put 'Jj02NzEwODg2Mzt2YXIgZXM9KGhlKyhfPU1hdGguaW11bCh6dCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoenQsbm4pKStNYXRoLmltdWwodm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGhlPSgoQz1NYXRoLmltdWwodm4sbm4pKSsocD4+PjEzKXwwKSsoZXM+Pj4yNil8MCxlcyY9'@;
put 'NjcxMDg4NjMsdWVbMF09dWksdWVbMV09QXIsdWVbMl09bXIsdWVbM109eWksdWVbNF09JHIsdWVbNV09SmksdWVbNl09eXIsdWVbN109SWksdWVbOF09bm8sdWVbOV09em4sdWVbMTBdPVppLHVlWzExXT1XaSx1ZVsxMl09b28sdWVbMTNdPWhvLHVlWzE0XT1Mcix1ZVsxNV09QmksdWVbMTZd'@;
put 'PUxvLHVlWzE3XT1Lbyx1ZVsxOF09ZXMsMCE9PWhlJiYodWVbMTldPWhlLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGFlKGcsUyx4KXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsUyx4KX1mdW5jdGlvbiBzZShnLFMpe3RoaXMueD1nLHRoaXMueT1TfU1hdGguaW11bHx8KHRlPVEpLGsucHJvdG90'@;
put 'eXBlLm11bFRvPWZ1bmN0aW9uKGcsUyl7dmFyIF89dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLFMpOl88NjM/USh0aGlzLGcsUyk6XzwxMDI0P2Z1bmN0aW9uKHAsQyxLKXtLLm5lZ2F0aXZlPUMubmVnYXRpdmVe'@;
put 'cC5uZWdhdGl2ZSxLLmxlbmd0aD1wLmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIG5lPTAsdWU9MCxoZT0wO2hlPEsubGVuZ3RoLTE7aGUrKyl7dmFyIHhlPXVlO3VlPTA7Zm9yKHZhciBPZT02NzEwODg2MyZuZSxIZT1NYXRoLm1pbihoZSxDLmxlbmd0aC0xKSxFZT1NYXRoLm1heCgwLGhlLXAu'@;
put 'bGVuZ3RoKzEpO0VlPD1IZTtFZSsrKXt2YXIgTmU9KDB8cC53b3Jkc1toZS1FZV0pKigwfEMud29yZHNbRWVdKSxLZT02NzEwODg2MyZOZTtPZT02NzEwODg2MyYoS2U9S2UrT2V8MCksdWUrPSh4ZT0oeGU9eGUrKE5lLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEw'@;
put 'ODg2M31LLndvcmRzW2hlXT1PZSxuZT14ZSx4ZT11ZX1yZXR1cm4gMCE9PW5lP0sud29yZHNbaGVdPW5lOksubGVuZ3RoLS0sSy5zdHJpcCgpfSh0aGlzLGcsUyk6YWUodGhpcyxnLFMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIFM9bmV3IEFycmF5KGcpLHg9'@;
put 'ay5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLF89MDtfPGc7XysrKVNbX109dGhpcy5yZXZCaW4oXyx4LGcpO3JldHVybiBTfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsUyx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIF89MCxwPTA7cDxTO3ArKylffD0o'@;
put 'MSZnKTw8Uy1wLTEsZz4+PTE7cmV0dXJuIF99LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsUyx4LF8scCxDKXtmb3IodmFyIEs9MDtLPEM7SysrKV9bS109U1tnW0tdXSxwW0tdPXhbZ1tLXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxTLHgsXyxwLEMpe3Ro'@;
put 'aXMucGVybXV0ZShDLGcsUyx4LF8scCk7Zm9yKHZhciBLPTE7SzxwO0s8PD0xKWZvcih2YXIgbmU9Szw8MSx1ZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGhlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIE9lPXVlLEhlPWhlLEVlPTA7RWU8SztFZSsr'@;
put 'KXt2YXIgTGU9eFt4ZStFZV0sTmU9X1t4ZStFZV0sS2U9eFt4ZStFZStLXSxVZT1fW3hlK0VlK0tdLFhlPU9lKktlLUhlKlVlO1VlPU9lKlVlK0hlKktlLHhbeGUrRWVdPUxlKyhLZT1YZSksX1t4ZStFZV09TmUrVWUseFt4ZStFZStLXT1MZS1LZSxfW3hlK0VlK0tdPU5lLVVlLEVlIT09bmUm'@;
put 'JihYZT11ZSpPZS1oZSpIZSxIZT11ZSpIZStoZSpPZSxPZT1YZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxTKXt2YXIgeD0xfE1hdGgubWF4KFMsZyksXz0xJngscD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK199LHNlLnByb3RvdHlw'@;
put 'ZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxTLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBfPTA7Xzx4LzI7XysrKXt2YXIgcD1nW19dO2dbX109Z1t4LV8tMV0sZ1t4LV8tMV09cCxwPVNbX10sU1tfXT0tU1t4LV8tMV0sU1t4LV8tMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0'@;
put 'aW9uKGcsUyl7Zm9yKHZhciB4PTAsXz0wO188Uy8yO18rKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMipfKzFdL1MpK01hdGgucm91bmQoZ1syKl9dL1MpK3g7Z1tfXT02NzEwODg2MyZwLHg9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZl'@;
put 'cnQxM2I9ZnVuY3Rpb24oZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz0wO0M8UztDKyspeFsyKkNdPTgxOTEmKHArPTB8Z1tDXSkseFsyKkMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoQz0yKlM7QzxfOysrQyl4W0NdPTA7SSgwPT09cCksSSghKC04MTkyJnApKX0sc2UucHJvdG90eXBl'@;
put 'LnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPW5ldyBBcnJheShnKSx4PTA7eDxnO3grKylTW3hdPTA7cmV0dXJuIFN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsUy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKF8p'@;
put 'LEM9dGhpcy5zdHViKF8pLEs9bmV3IEFycmF5KF8pLG5lPW5ldyBBcnJheShfKSx1ZT1uZXcgQXJyYXkoXyksaGU9bmV3IEFycmF5KF8pLHhlPW5ldyBBcnJheShfKSxPZT1uZXcgQXJyYXkoXyksSGU9eC53b3JkcztIZS5sZW5ndGg9Xyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0'@;
put 'aCxLLF8pLHRoaXMuY29udmVydDEzYihTLndvcmRzLFMubGVuZ3RoLGhlLF8pLHRoaXMudHJhbnNmb3JtKEssQyxuZSx1ZSxfLHApLHRoaXMudHJhbnNmb3JtKGhlLEMseGUsT2UsXyxwKTtmb3IodmFyIEVlPTA7RWU8XztFZSsrKXt2YXIgTGU9bmVbRWVdKnhlW0VlXS11ZVtFZV0qT2VbRWVd'@;
put 'O3VlW0VlXT1uZVtFZV0qT2VbRWVdK3VlW0VlXSp4ZVtFZV0sbmVbRWVdPUxlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSx1ZSxfKSx0aGlzLnRyYW5zZm9ybShuZSx1ZSxIZSxDLF8scCksdGhpcy5jb25qdWdhdGUoSGUsQyxfKSx0aGlzLm5vcm1hbGl6ZTEzYihIZSxfKSx4Lm5lZ2F0aXZl'@;
put 'PWcubmVnYXRpdmVeUy5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCtTLmxlbmd0aCx4LnN0cmlwKCl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgUz1uZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8o'@;
put 'ZyxTKX0say5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgUz1uZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGFlKHRoaXMsZyxTKX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11'@;
put 'bFRvKGcsdGhpcyl9LGsucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgUz0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIF89KDB8dGhpcy53b3Jkc1t4XSkqZyxwPSg2NzEwODg2MyZfKSsoNjcxMDg4NjMm'@;
put 'Uyk7Uz4+PTI2LFMrPV8vNjcxMDg4NjR8MCxTKz1wPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZwfXJldHVybiAwIT09UyYmKHRoaXMud29yZHNbeF09Uyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxrLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11'@;
put 'bG4oZyl9LGsucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0say5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0say5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBTPWZ1bmN0aW9uKEMpe2Zv'@;
put 'cih2YXIgSz1uZXcgQXJyYXkoQy5iaXRMZW5ndGgoKSksbmU9MDtuZTxLLmxlbmd0aDtuZSsrKXt2YXIgaGU9bmUlMjY7S1tuZV09KEMud29yZHNbbmUvMjZ8MF0mMTw8aGUpPj4+aGV9cmV0dXJuIEt9KGcpO2lmKDA9PT1TLmxlbmd0aClyZXR1cm4gbmV3IGsoMSk7Zm9yKHZhciB4PXRoaXMs'@;
put 'Xz0wO188Uy5sZW5ndGgmJjA9PT1TW19dO18rKyx4PXguc3FyKCkpO2lmKCsrXzxTLmxlbmd0aClmb3IodmFyIHA9eC5zcXIoKTtfPFMubGVuZ3RoO18rKyxwPXAuc3FyKCkpMCE9PVNbX10mJih4PXgubXVsKHApKTtyZXR1cm4geH0say5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0ko'@;
put 'Im51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUyx4PWclMjYsXz0oZy14KS8yNixwPTY3MTA4ODYzPj4+MjYteDw8MjYteDtpZigwIT09eCl7dmFyIEM9MDtmb3IoUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgSz10aGlzLndvcmRzW1NdJnA7dGhpcy53b3Jkc1tTXT0oMHx0aGlzLndv'@;
put 'cmRzW1NdKS1LPDx4fEMsQz1LPj4+MjYteH1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1fKXtmb3IoUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXRoaXMud29yZHNbUytfXT10aGlzLndvcmRzW1NdO2ZvcihTPTA7UzxfO1MrKyl0aGlzLndvcmRzW1NdPTA7dGhp'@;
put 'cy5sZW5ndGgrPV99cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxrLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxTLHgpe3ZhciBfO0koIm51bWJlciI9PXR5cGVv'@;
put 'ZiBnJiZnPj0wKSxfPVM/KFMtUyUyNikvMjY6MDt2YXIgcD1nJTI2LEM9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEs9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPXg7aWYoXy09QyxfPU1hdGgubWF4KDAsXyksbmUpe2Zvcih2YXIgdWU9MDt1ZTxDO3VlKyspbmUud29yZHNb'@;
put 'dWVdPXRoaXMud29yZHNbdWVdO25lLmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHVlPTA7dWU8dGhpcy5sZW5ndGg7dWUrKyl0aGlzLndvcmRzW3VlXT10aGlzLndvcmRzW3VlK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3Ro'@;
put 'PTE7dmFyIGhlPTA7Zm9yKHVlPXRoaXMubGVuZ3RoLTE7dWU+PTAmJigwIT09aGV8fHVlPj1fKTt1ZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW3VlXTt0aGlzLndvcmRzW3VlXT1oZTw8MjYtcHx4ZT4+PnAsaGU9eGUmS31yZXR1cm4gbmUmJjAhPT1oZSYmKG5lLndvcmRzW25lLmxlbmd0aCsr'@;
put 'XT1oZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxTLHgpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLFMseCl9LGsucHJvdG90eXBlLnNo'@;
put 'bG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0say5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LGsucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0s'@;
put 'ay5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LGsucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9KGctUykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8'@;
put 'ISh0aGlzLndvcmRzW3hdJjE8PFMpKX0say5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9KGctUykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUg'@;
put 'bnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1TJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PVMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlM8PFMpLHRoaXMuc3RyaXAoKSl9LGsucHJvdG90eXBl'@;
put 'Lm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxrLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10'@;
put 'aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxrLnByb3Rv'@;
put 'dHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1NdPj02NzEwODg2NDtTKyspdGhpcy53b3Jkc1tTXS09NjcxMDg4NjQsUz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tTKzFdPTE6dGhpcy53b3Jk'@;
put 'c1tTKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMrMSksdGhpc30say5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9'@;
put 'MTtlbHNlIGZvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbU108MDtTKyspdGhpcy53b3Jkc1tTXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tTKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pYWRkbihnKX0say5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxrLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxrLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlhYnMoKX0say5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXyxwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSz0wO2ZvcihfPTA7XzxnLmxlbmd0aDtfKyspe3A9KDB8dGhpcy53b3Jkc1tfK3hdKStLO3ZhciBuZT0oMHxnLndvcmRz'@;
put 'W19dKSpTO0s9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnB9Zm9yKDtfPHRoaXMubGVuZ3RoLXg7XysrKUs9KHA9KDB8dGhpcy53b3Jkc1tfK3hdKStLKT4+MjYsdGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnA7aWYoMD09'@;
put 'PUspcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUspLEs9MCxfPTA7Xzx0aGlzLmxlbmd0aDtfKyspSz0ocD0tKDB8dGhpcy53b3Jkc1tfXSkrSyk+PjI2LHRoaXMud29yZHNbX109NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0say5wcm90b3R5'@;
put 'cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxTKXt2YXIgeCxfPXRoaXMuY2xvbmUoKSxwPWcsQz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKHA9cC51c2hsbih4KSxfLml1c2hsbih4KSxDPTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEssbmU9'@;
put 'Xy5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1TKXsoSz1uZXcgayhudWxsKSkubGVuZ3RoPW5lKzEsSy53b3Jkcz1uZXcgQXJyYXkoSy5sZW5ndGgpO2Zvcih2YXIgdWU9MDt1ZTxLLmxlbmd0aDt1ZSsrKUsud29yZHNbdWVdPTB9dmFyIGhlPV8uY2xvbmUoKS5faXNobG5zdWJtdWwocCwx'@;
put 'LG5lKTswPT09aGUubmVnYXRpdmUmJihfPWhlLEsmJihLLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBPZT02NzEwODg2NCooMHxfLndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8Xy53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKE9lPU1hdGgubWluKE9lL0N8'@;
put 'MCw2NzEwODg2MyksXy5faXNobG5zdWJtdWwocCxPZSx4ZSk7MCE9PV8ubmVnYXRpdmU7KU9lLS0sXy5uZWdhdGl2ZT0wLF8uX2lzaGxuc3VibXVsKHAsMSx4ZSksXy5pc1plcm8oKXx8KF8ubmVnYXRpdmVePTEpO0smJihLLndvcmRzW3hlXT1PZSl9cmV0dXJuIEsmJksuc3RyaXAoKSxfLnN0'@;
put 'cmlwKCksImRpdiIhPT1TJiYwIT09eCYmXy5pdXNocm4oeCkse2RpdjpLfHxudWxsLG1vZDpffX0say5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsUyx4KXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBrKDApLG1vZDpuZXcgaygwKX06MCE9PXRoaXMu'@;
put 'bmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGcsUyksIm1vZCIhPT1TJiYoXz1DLmRpdi5uZWcoKSksImRpdiIhPT1TJiYocD1DLm1vZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2Ol8sbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2'@;
put 'ZSYmMCE9PWcubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoZy5uZWcoKSxTKSwibW9kIiE9PVMmJihfPUMuZGl2Lm5lZygpKSx7ZGl2Ol8sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksUyksImRpdiIhPT1TJiYocD1DLm1v'@;
put 'ZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OkMuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgaygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Uz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBd'@;
put 'KSxtb2Q6bnVsbH06Im1vZCI9PT1TP3tkaXY6bnVsbCxtb2Q6bmV3IGsodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBrKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxTKTt2YXIgXyxwLEN9LGsucHJvdG90'@;
put 'eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxrLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0say5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZt'@;
put 'b2QoZywibW9kIiwhMCkubW9kfSxrLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgUz10aGlzLmRpdm1vZChnKTtpZihTLm1vZC5pc1plcm8oKSlyZXR1cm4gUy5kaXY7dmFyIHg9MCE9PVMuZGl2Lm5lZ2F0aXZlP1MubW9kLmlzdWIoZyk6Uy5tb2QsXz1nLnVzaHJuKDEpLHA9'@;
put 'Zy5hbmRsbigxKSxDPXguY21wKF8pO3JldHVybiBDPDB8fDE9PT1wJiYwPT09Qz9TLmRpdjowIT09Uy5kaXYubmVnYXRpdmU/Uy5kaXYuaXN1Ym4oMSk6Uy5kaXYuaWFkZG4oMSl9LGsucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBTPTY3MTA4ODY0'@;
put 'JWcseD0wLF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl4PShTKngrKDB8dGhpcy53b3Jkc1tfXSkpJWc7cmV0dXJuIHh9LGsucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgUz0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIF89KDB8dGhp'@;
put 'cy53b3Jkc1t4XSkrNjcxMDg4NjQqUzt0aGlzLndvcmRzW3hdPV8vZ3wwLFM9XyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0say5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1n'@;
put 'Lm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5jbG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMuY2xvbmUoKTtmb3IodmFyIF89bmV3IGsoMSkscD1uZXcgaygwKSxDPW5ldyBrKDApLEs9bmV3IGsoMSksbmU9MDtTLmlzRXZlbigpJiZ4LmlzRXZlbigp'@;
put 'OylTLml1c2hybigxKSx4Lml1c2hybigxKSwrK25lO2Zvcih2YXIgdWU9eC5jbG9uZSgpLGhlPVMuY2xvbmUoKTshUy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJnhlPDI2OysreGUsT2U8PD0xKTtpZih4ZT4wKWZvcihTLml1c2hybih4ZSk7eGUtLSA+'@;
put 'MDspKF8uaXNPZGQoKXx8cC5pc09kZCgpKSYmKF8uaWFkZCh1ZSkscC5pc3ViKGhlKSksXy5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBIZT0wLEVlPTE7ISh4LndvcmRzWzBdJkVlKSYmSGU8MjY7KytIZSxFZTw8PTEpO2lmKEhlPjApZm9yKHguaXVzaHJuKEhlKTtIZS0tID4wOyko'@;
put 'Qy5pc09kZCgpfHxLLmlzT2RkKCkpJiYoQy5pYWRkKHVlKSxLLmlzdWIoaGUpKSxDLml1c2hybigxKSxLLml1c2hybigxKTtTLmNtcCh4KT49MD8oUy5pc3ViKHgpLF8uaXN1YihDKSxwLmlzdWIoSykpOih4LmlzdWIoUyksQy5pc3ViKF8pLEsuaXN1YihwKSl9cmV0dXJue2E6QyxiOkssZ2Nk'@;
put 'OnguaXVzaGxuKG5lKX19LGsucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5jbG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMuY2xvbmUoKTtmb3IodmFyIF8scD1uZXcgaygxKSxDPW5l'@;
put 'dyBrKDApLEs9eC5jbG9uZSgpO1MuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCx1ZT0xOyEoUy53b3Jkc1swXSZ1ZSkmJm5lPDI2OysrbmUsdWU8PD0xKTtpZihuZT4wKWZvcihTLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSykscC5pdXNocm4o'@;
put 'MSk7Zm9yKHZhciBoZT0wLHhlPTE7ISh4LndvcmRzWzBdJnhlKSYmaGU8MjY7KytoZSx4ZTw8PTEpO2lmKGhlPjApZm9yKHguaXVzaHJuKGhlKTtoZS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChLKSxDLml1c2hybigxKTtTLmNtcCh4KT49MD8oUy5pc3ViKHgpLHAuaXN1YihDKSk6KHguaXN1'@;
put 'YihTKSxDLmlzdWIocCkpfXJldHVybihfPTA9PT1TLmNtcG4oMSk/cDpDKS5jbXBuKDApPDAmJl8uaWFkZChnKSxffSxrLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBT'@;
put 'PXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTtTLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgXz0wO1MuaXNFdmVuKCkmJnguaXNFdmVuKCk7XysrKVMuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTtmb3IoO3guaXNFdmVu'@;
put 'KCk7KXguaXVzaHJuKDEpO3ZhciBwPVMuY21wKHgpO2lmKHA8MCl7dmFyIEM9UztTPXgseD1DfWVsc2UgaWYoMD09PXB8fDA9PT14LmNtcG4oMSkpYnJlYWs7Uy5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihfKX0say5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2Nk'@;
put 'KGcpLmEudW1vZChnKX0say5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxrLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGsucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0'@;
put 'aGlzLndvcmRzWzBdJmd9LGsucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgUz1nJTI2LHg9KGctUykvMjYsXz0xPDxTO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1fLHRoaXM7Zm9y'@;
put 'KHZhciBwPV8sQz14OzAhPT1wJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEs9MHx0aGlzLndvcmRzW0NdO3A9KEsrPXApPj4+MjYsdGhpcy53b3Jkc1tDXT1LJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW0NdPXAsdGhpcy5sZW5ndGgrKyksdGhpc30say5wcm90b3R5cGUu'@;
put 'aXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGsucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIFMseD1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF4KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ4KXJldHVy'@;
put 'biAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKVM9MTtlbHNle3gmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBfPTB8dGhpcy53b3Jkc1swXTtTPV89PT1nPzA6XzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30say5w'@;
put 'cm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1T'@;
put 'OlN9LGsucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBTPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgXz0wfHRoaXMud29yZHNbeF0scD0wfGcu'@;
put 'd29yZHNbeF07aWYoXyE9PXApe188cD9TPS0xOl8+cCYmKFM9MSk7YnJlYWt9fXJldHVybiBTfSxrLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LGsucHJv'@;
put 'dG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0say5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0say5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5s'@;
put 'dD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxrLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LGsucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LGsucHJvdG90eXBlLmVxbj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0say5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxrLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQs'@;
put 'IkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0say5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJ'@;
put 'KHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGsucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxrLnByb3RvdHlwZS5m'@;
put 'b3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0say5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25s'@;
put 'eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxrLnByb3RvdHlw'@;
put 'ZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0say5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBv'@;
put 'bmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxrLnByb3RvdHlw'@;
put 'ZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJ'@;
put 'KHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm'@;
put 'eTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0say5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGsu'@;
put 'cHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxrLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0say5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3Jt'@;
put 'YWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBkZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGxlKGcsUyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBrKFMsMTYpLHRoaXMubj10aGlz'@;
put 'LnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBrKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe2xlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe2xlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24geSgpe2xlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gTCgpe2xlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChn'@;
put 'KXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBTPWsuX3ByaW1lKGcpO3RoaXMubT1TLnAsdGhpcy5wcmltZT1TfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGooZyl7SC5jYWxsKHRo'@;
put 'aXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgaygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhp'@;
put 'cy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1sZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigp'@;
put 'e3ZhciBnPW5ldyBrKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sbGUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIFMseD1nO2Rve3RoaXMuc3BsaXQoeCx0aGlzLnRtcCksUz0oeD0oeD10aGlzLmltdWxLKHgpKS5pYWRk'@;
put 'KHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoUz50aGlzLm4pO3ZhciBfPVM8dGhpcy5uPy0xOngudWNtcCh0aGlzLnApO3JldHVybiAwPT09Xz8oeC53b3Jkc1swXT0wLHgubGVuZ3RoPTEpOl8+MD94LmlzdWIodGhpcy5wKTp2b2lkIDAhPT14LnN0cmlwP3guc3RyaXAoKTp4Ll9zdHJp'@;
put 'cCgpLHh9LGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLFMpe2cuaXVzaHJuKHRoaXMubiwwLFMpfSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxFKGNlLGxlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxTKXtmb3IodmFy'@;
put 'IHg9NDE5NDMwMyxfPU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPF87cCsrKVMud29yZHNbcF09Zy53b3Jkc1twXTtpZihTLmxlbmd0aD1fLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgQz1nLndvcmRzWzldO2ZvcihTLndvcmRzW1MubGVu'@;
put 'Z3RoKytdPUMmeCxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSz0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSyZ4KTw8NHxDPj4+MjIsQz1LfWcud29yZHNbcC0xMF09Qz4+Pj0yMixnLmxlbmd0aC09MD09PUMmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5j'@;
put 'dGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBfPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJihTKz05NzcqXyksUz02NCpfKyhTLzY3MTA4ODY0fDAp'@;
put 'fXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LEUoRyxsZSksRSh5LGxlKSxFKEwsbGUpLEwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgUz0wLHg9MDt4PGcubGVuZ3Ro'@;
put 'O3grKyl7dmFyIF89MTkqKDB8Zy53b3Jkc1t4XSkrUyxwPTY3MTA4ODYzJl87Xz4+Pj0yNixnLndvcmRzW3hdPXAsUz1ffXJldHVybiAwIT09UyYmKGcud29yZHNbZy5sZW5ndGgrK109UyksZ30say5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoZGVbZ10pcmV0dXJuIGRlW2ddO3ZhciBTO2lmKCJr'@;
put 'MjU2Ij09PWcpUz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKVM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKVM9bmV3IHk7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Uz1uZXcgTH1yZXR1cm4gZGVbZ109UyxTfSxILnByb3RvdHlw'@;
put 'ZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxTKXtJKCEoZy5uZWdhdGl2'@;
put 'ZXxTLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PVMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5p'@;
put 'cmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5j'@;
put 'dGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmFkZChTKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5pYWRk'@;
put 'KFMpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5zdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0s'@;
put 'SC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmlzdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmlt'@;
put 'b2QoZy51c2hsbihTKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLmltdWwoUykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLm11'@;
put 'bChTKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVy'@;
put 'biBnLmNsb25lKCk7dmFyIFM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoUyUyPT0xKSwzPT09Uyl7dmFyIHg9dGhpcy5tLmFkZChuZXcgaygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgXz10aGlzLm0uc3VibigxKSxwPTA7IV8uaXNaZXJvKCkmJjA9PT1fLmFuZGxu'@;
put 'KDEpOylwKyssXy5pdXNocm4oMSk7SSghXy5pc1plcm8oKSk7dmFyIEM9bmV3IGsoMSkudG9SZWQodGhpcyksSz1DLnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHVlPW5ldyBrKDIqdWUqdWUpLnRvUmVkKHRoaXMpOzAhPT10'@;
put 'aGlzLnBvdyh1ZSxuZSkuY21wKEspOyl1ZS5yZWRJQWRkKEspO2Zvcih2YXIgaGU9dGhpcy5wb3codWUsXykseGU9dGhpcy5wb3coZyxfLmFkZG4oMSkuaXVzaHJuKDEpKSxPZT10aGlzLnBvdyhnLF8pLEhlPXA7MCE9PU9lLmNtcChDKTspe2Zvcih2YXIgRWU9T2UsTGU9MDswIT09RWUuY21w'@;
put 'KEMpO0xlKyspRWU9RWUucmVkU3FyKCk7SShMZTxIZSk7dmFyIE5lPXRoaXMucG93KGhlLG5ldyBrKDEpLml1c2hsbihIZS1MZS0xKSk7eGU9eGUucmVkTXVsKE5lKSxoZT1OZS5yZWRTcXIoKSxPZT1PZS5yZWRNdWwoaGUpLEhlPUxlfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5j'@;
put 'dGlvbihnKXt2YXIgUz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Uy5uZWdhdGl2ZT8oUy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChTKS5yZWROZWcoKSk6dGhpcy5pbW9kKFMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxTKXtpZihTLmlzWmVybygpKXJldHVybiBuZXcgaygxKS50'@;
put 'b1JlZCh0aGlzKTtpZigwPT09Uy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIHg9bmV3IEFycmF5KDE2KTt4WzBdPW5ldyBrKDEpLnRvUmVkKHRoaXMpLHhbMV09Zztmb3IodmFyIF89MjtfPHgubGVuZ3RoO18rKyl4W19dPXRoaXMubXVsKHhbXy0xXSxnKTt2YXIgcD14WzBdLEM9MCxL'@;
put 'PTAsbmU9Uy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLF89Uy5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciB1ZT1TLndvcmRzW19dLGhlPW5lLTE7aGU+PTA7aGUtLSl7dmFyIHhlPXVlPj5oZSYxO3AhPT14WzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09Qz8o'@;
put 'Qzw8PTEsQ3w9eGUsKDQ9PSsrS3x8MD09PV8mJjA9PT1oZSkmJihwPXRoaXMubXVsKHAseFtDXSksSz0wLEM9MCkpOks9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBTPWcudW1vZCh0aGlzLm0pO3JldHVybiBTPT09Zz9TLmNsb25lKCk6'@;
put 'U30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIFM9Zy5jbG9uZSgpO3JldHVybiBTLnJlZD1udWxsLFN9LGsubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IGooZyl9LEUoaixIKSxqLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'aW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sai5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIFM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBTLnJlZD1udWxsLFN9LGoucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygpfHxT'@;
put 'LmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bChTKSxfPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9eC5pc3ViKF8pLml1c2hybih0aGlzLnNoaWZ0KSxDPXA7cmV0'@;
put 'dXJuIHAuY21wKHRoaXMubSk+PTA/Qz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKEM9cC5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxqLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygpfHxTLmlzWmVybygpKXJldHVybiBuZXcgaygwKS5fZm9y'@;
put 'Y2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoUyksXz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPXguaXN1YihfKS5pdXNocm4odGhpcy5zaGlmdCksQz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP0M9cC5pc3ViKHRo'@;
put 'aXMubSk6cC5jbXBuKDApPDAmJihDPXAuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sai5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh3PUQubm1kKHcpLHRo'@;
put 'aXMpfSw4MDkxOnc9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gQShELFApe2lmKG51bGw9PUQpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgZmlyc3QgYXJndW1lbnQgdG8gb2JqZWN0Iik7Zm9yKHZhciBVPU9iamVjdChEKSxJPTE7STxhcmd1bWVudHMubGVuZ3RoO0krKyl7'@;
put 'dmFyIEU9YXJndW1lbnRzW0ldO2lmKG51bGwhPUUpZm9yKHZhciBrPU9iamVjdC5rZXlzKE9iamVjdChFKSksQj0wLE49ay5sZW5ndGg7QjxOO0IrKyl7dmFyIFY9a1tCXSxaPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxWKTt2b2lkIDAhPT1aJiZaLmVudW1lcmFibGUmJihV'@;
put 'W1ZdPUVbVl0pfX1yZXR1cm4gVX13LmV4cG9ydHM9e2Fzc2lnbjpBLHBvbHlmaWxsOmZ1bmN0aW9uKCl7T2JqZWN0LmFzc2lnbnx8T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdCwiYXNzaWduIix7ZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6QX0p'@;
put 'fX19LDcxODc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPUQoNTEwOCksST0ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3Q/UmVmbGVjdDpudWxsLEU9SSYmImZ1bmN0aW9uIj09dHlwZW9mIEkuYXBwbHk/SS5hcHBseTpmdW5jdGlvbihkZSxsZSxjZSl7cmV0dXJuIEZ1bmN0aW9uLnBy'@;
put 'b3RvdHlwZS5hcHBseS5jYWxsKGRlLGxlLGNlKX07UD1JJiYiZnVuY3Rpb24iPT10eXBlb2YgSS5vd25LZXlzP0kub3duS2V5czpPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzP2Z1bmN0aW9uKGRlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGUpLmNvbmNhdChPYmpl'@;
put 'Y3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGRlKSl9OmZ1bmN0aW9uKGRlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZGUpfTt2YXIgaz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUhPWRlfTtmdW5jdGlvbiBCKCl7Qi5pbml0LmNhbGwodGhpcyl9dy5l'@;
put 'eHBvcnRzPUIsdy5leHBvcnRzLm9uY2U9ZnVuY3Rpb24oZGUsbGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiB5KEgpe2RlLnJlbW92ZUxpc3RlbmVyKGxlLEwpLEcoSCl9ZnVuY3Rpb24gTCgpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZS5yZW1vdmVMaXN0ZW5l'@;
put 'ciYmZGUucmVtb3ZlTGlzdGVuZXIoImVycm9yIix5KSxjZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpfXZhciBIO3NlKGRlLGxlLEwse29uY2U6ITB9KSwiZXJyb3IiIT09bGUmJiJmdW5jdGlvbiI9PXR5cGVvZihIPWRlKS5vbiYmc2UoSCwiZXJyb3IiLHkse29uY2U6ITB9KX0pfSxCLkV2'@;
put 'ZW50RW1pdHRlcj1CLEIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLEIucHJvdG90eXBlLl9ldmVudHNDb3VudD0wLEIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwO3ZhciBOPTEwO2Z1bmN0aW9uIFYoZGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBkZSl0aHJvdyBuZXcgVHlwZUVy'@;
put 'cm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZGUpfWZ1bmN0aW9uIFooZGUpe3JldHVybiB2b2lkIDA9PT1kZS5fbWF4TGlzdGVuZXJzP0IuZGVmYXVsdE1heExpc3RlbmVyczpkZS5fbWF4TGlzdGVu'@;
put 'ZXJzfWZ1bmN0aW9uIFcoZGUsbGUsY2UsRyl7dmFyIHksTCxIO2lmKFYoY2UpLHZvaWQgMD09PShMPWRlLl9ldmVudHMpPyhMPWRlLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxkZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PUwubmV3TGlzdGVuZXImJihkZS5lbWl0KCJuZXdMaXN0'@;
put 'ZW5lciIsbGUsY2UubGlzdGVuZXI/Y2UubGlzdGVuZXI6Y2UpLEw9ZGUuX2V2ZW50cyksSD1MW2xlXSksdm9pZCAwPT09SClIPUxbbGVdPWNlLCsrZGUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIEg/SD1MW2xlXT1HP1tjZSxIXTpbSCxjZV06Rz9ILnVuc2hpZnQo'@;
put 'Y2UpOkgucHVzaChjZSksKHk9WihkZSkpPjAmJkgubGVuZ3RoPnkmJiFILndhcm5lZCl7SC53YXJuZWQ9ITA7dmFyIGc9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrSC5sZW5ndGgrIiAiK1N0cmluZyhsZSkrIiBsaXN0ZW5lcnMgYWRk'@;
put 'ZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0Iik7Zy5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGcuZW1pdHRlcj1kZSxnLnR5cGU9bGUsZy5jb3VudD1ILmxlbmd0aCxVJiZVLndhcm4mJlUud2FybihnKX1yZXR1cm4gZGV9ZnVu'@;
put 'Y3Rpb24geigpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFw'@;
put 'cGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gcShkZSxsZSxjZSl7dmFyIEc9e2ZpcmVkOiExLHdyYXBGbjp2b2lkIDAsdGFyZ2V0OmRlLHR5cGU6bGUsbGlzdGVuZXI6Y2V9LHk9ei5iaW5kKEcpO3JldHVybiB5Lmxpc3RlbmVyPWNlLEcud3JhcEZuPXkseX1mdW5jdGlvbiBR'@;
put 'KGRlLGxlLGNlKXt2YXIgRz1kZS5fZXZlbnRzO2lmKHZvaWQgMD09PUcpcmV0dXJuW107dmFyIHk9R1tsZV07cmV0dXJuIHZvaWQgMD09PXk/W106ImZ1bmN0aW9uIj09dHlwZW9mIHk/Y2U/W3kubGlzdGVuZXJ8fHldOlt5XTpjZT9mdW5jdGlvbihMKXtmb3IodmFyIEg9bmV3IEFycmF5KEwu'@;
put 'bGVuZ3RoKSxqPTA7ajxILmxlbmd0aDsrK2opSFtqXT1MW2pdLmxpc3RlbmVyfHxMW2pdO3JldHVybiBIfSh5KTphZSh5LHkubGVuZ3RoKX1mdW5jdGlvbiB0ZShkZSl7dmFyIGxlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1sZSl7dmFyIGNlPWxlW2RlXTtpZigiZnVuY3Rpb24iPT10eXBl'@;
put 'b2YgY2UpcmV0dXJuIDE7aWYodm9pZCAwIT09Y2UpcmV0dXJuIGNlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBhZShkZSxsZSl7Zm9yKHZhciBjZT1uZXcgQXJyYXkobGUpLEc9MDtHPGxlOysrRyljZVtHXT1kZVtHXTtyZXR1cm4gY2V9ZnVuY3Rpb24gc2UoZGUsbGUsY2UsRyl7aWYoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIGRlLm9uKUcub25jZT9kZS5vbmNlKGxlLGNlKTpkZS5vbihsZSxjZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZGUuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBF'@;
put 'dmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgZGUpO2RlLmFkZEV2ZW50TGlzdGVuZXIobGUsZnVuY3Rpb24geShMKXtHLm9uY2UmJmRlLnJlbW92ZUV2ZW50TGlzdGVuZXIobGUseSksY2UoTCl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEIsImRlZmF1bHRNYXhMaXN0ZW5l'@;
put 'cnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBOfSxzZXQ6ZnVuY3Rpb24oZGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZGV8fGRlPDB8fGsoZGUpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiBy'@;
put 'YW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrZGUrIi4iKTtOPWRlfX0pLEIuaW5pdD1mdW5jdGlvbigpe3ZvaWQgMCE9PXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzIT09T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHN8fCh0aGlz'@;
put 'Ll9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LEIucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihkZSl7aWYoIm51bWJlciIhPXR5cGVvZiBkZXx8ZGU8'@;
put 'MHx8ayhkZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytkZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9ZGUsdGhpc30sQi5wcm90b3R5cGUu'@;
put 'Z2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyl9LEIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oZGUpe2Zvcih2YXIgbGU9W10sY2U9MTtjZTxhcmd1bWVudHMubGVuZ3RoO2NlKyspbGUucHVzaChhcmd1bWVudHNbY2VdKTt2YXIgRz0iZXJyb3IiPT09ZGUseT10aGlz'@;
put 'Ll9ldmVudHM7aWYodm9pZCAwIT09eSlHPUcmJnZvaWQgMD09PXkuZXJyb3I7ZWxzZSBpZighRylyZXR1cm4hMTtpZihHKXt2YXIgTDtpZihsZS5sZW5ndGg+MCYmKEw9bGVbMF0pLEwgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBMO3ZhciBIPW5ldyBFcnJvcigiVW5oYW5kbGVkIGVycm9yLiIr'@;
put 'KEw/IiAoIitMLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgSC5jb250ZXh0PUwsSH12YXIgaj15W2RlXTtpZih2b2lkIDA9PT1qKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBqKUUoaix0aGlzLGxlKTtlbHNle3ZhciBnPWoubGVuZ3RoLFM9YWUoaixnKTtmb3IoY2U9MDtjZTxnOysr'@;
put 'Y2UpRShTW2NlXSx0aGlzLGxlKX1yZXR1cm4hMH0sQi5wcm90b3R5cGUub249Qi5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oZGUsbGUpe3JldHVybiBXKHRoaXMsZGUsbGUsITEpfSxCLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oZGUsbGUpe3JldHVybiBXKHRo'@;
put 'aXMsZGUsbGUsITApfSxCLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGRlLGxlKXtyZXR1cm4gVihsZSksdGhpcy5vbihkZSxxKHRoaXMsZGUsbGUpKSx0aGlzfSxCLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGRlLGxlKXtyZXR1cm4gVihsZSksdGhpcy5wcmVwZW5k'@;
put 'TGlzdGVuZXIoZGUscSh0aGlzLGRlLGxlKSksdGhpc30sQi5wcm90b3R5cGUub2ZmPUIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGRlLGxlKXt2YXIgY2UsRyx5LEwsSDtpZihWKGxlKSx2b2lkIDA9PT0oRz10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09'@;
put 'PShjZT1HW2RlXSkpcmV0dXJuIHRoaXM7aWYoY2U9PT1sZXx8Y2UubGlzdGVuZXI9PT1sZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgR1tkZV0sRy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5l'@;
put 'ciIsZGUsY2UubGlzdGVuZXJ8fGxlKSk7ZWxzZSBpZigiZnVuY3Rpb24iIT10eXBlb2YgY2Upe2Zvcih5PS0xLEw9Y2UubGVuZ3RoLTE7TD49MDtMLS0paWYoY2VbTF09PT1sZXx8Y2VbTF0ubGlzdGVuZXI9PT1sZSl7SD1jZVtMXS5saXN0ZW5lcix5PUw7YnJlYWt9aWYoeTwwKXJldHVybiB0'@;
put 'aGlzOzA9PT15P2NlLnNoaWZ0KCk6ZnVuY3Rpb24oaixnKXtmb3IoO2crMTxqLmxlbmd0aDtnKyspaltnXT1qW2crMV07ai5wb3AoKX0oY2UseSksMT09PWNlLmxlbmd0aCYmKEdbZGVdPWNlWzBdKSx2b2lkIDAhPT1HLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVy'@;
put 'IixkZSxIfHxsZSl9cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihkZSl7dmFyIGxlLGNlLEc7aWYodm9pZCAwPT09KGNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09Y2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1h'@;
put 'cmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1jZVtkZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBjZVtkZV0pLHRoaXM7'@;
put 'aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciB5LEw9T2JqZWN0LmtleXMoY2UpO2ZvcihHPTA7RzxMLmxlbmd0aDsrK0cpInJlbW92ZUxpc3RlbmVyIiE9PSh5PUxbR10pJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyh5KTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoInJlbW92'@;
put 'ZUxpc3RlbmVyIiksdGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCx0aGlzfWlmKCJmdW5jdGlvbiI9PXR5cGVvZihsZT1jZVtkZV0pKXRoaXMucmVtb3ZlTGlzdGVuZXIoZGUsbGUpO2Vsc2UgaWYodm9pZCAwIT09bGUpZm9yKEc9bGUubGVuZ3Ro'@;
put 'LTE7Rz49MDtHLS0pdGhpcy5yZW1vdmVMaXN0ZW5lcihkZSxsZVtHXSk7cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihkZSl7cmV0dXJuIFEodGhpcyxkZSwhMCl9LEIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihkZSl7cmV0dXJuIFEodGhpcyxk'@;
put 'ZSwhMSl9LEIubGlzdGVuZXJDb3VudD1mdW5jdGlvbihkZSxsZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGRlLmxpc3RlbmVyQ291bnQ/ZGUubGlzdGVuZXJDb3VudChsZSk6dGUuY2FsbChkZSxsZSl9LEIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9dGUsQi5wcm90b3R5cGUuZXZlbnRO'@;
put 'YW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP1AodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyLFU9RCgyMzE4KTt3LmV4cG9ydHM9ZnVuY3Rpb24oSSxFLGssQil7aWYoUC5pc0J1ZmZlcihJKXx8KEk9UC5mcm9t'@;
put 'KEksImJpbmFyeSIpKSxFJiYoUC5pc0J1ZmZlcihFKXx8KEU9UC5mcm9tKEUsImJpbmFyeSIpKSw4IT09RS5sZW5ndGgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJzYWx0IHNob3VsZCBiZSBCdWZmZXIgd2l0aCA4IGJ5dGUgbGVuZ3RoIik7Zm9yKHZhciBOPWsvOCxWPVAuYWxsb2MoTiksWj1Q'@;
put 'LmFsbG9jKEJ8fDApLFc9UC5hbGxvYygwKTtOPjB8fEI+MDspe3ZhciB6PW5ldyBVO3oudXBkYXRlKFcpLHoudXBkYXRlKEkpLEUmJnoudXBkYXRlKEUpLFc9ei5kaWdlc3QoKTt2YXIgcT0wO2lmKE4+MCl7dmFyIFE9Vi5sZW5ndGgtTjtxPU1hdGgubWluKE4sVy5sZW5ndGgpLFcuY29weShW'@;
put 'LFEsMCxxKSxOLT1xfWlmKHE8Vy5sZW5ndGgmJkI+MCl7dmFyIHRlPVoubGVuZ3RoLUIsYWU9TWF0aC5taW4oQixXLmxlbmd0aC1xKTtXLmNvcHkoWix0ZSxxLHErYWUpLEItPWFlfX1yZXR1cm4gVy5maWxsKDApLHtrZXk6VixpdjpafX19LDQwMjk6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgUD1EKDUzMjApLFU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dy5leHBvcnRzPWZ1bmN0aW9uKEUsayxCKXtpZighUChrKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpdGVyYXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTt2YXIg'@;
put 'Tjthcmd1bWVudHMubGVuZ3RoPj0zJiYoTj1CKSwiW29iamVjdCBBcnJheV0iPT09VS5jYWxsKEUpP2Z1bmN0aW9uKFYsWixXKXtmb3IodmFyIHo9MCxxPVYubGVuZ3RoO3o8cTt6KyspSS5jYWxsKFYseikmJihudWxsPT1XP1ooVlt6XSx6LFYpOlouY2FsbChXLFZbel0seixWKSl9KEUsayxO'@;
put 'KToic3RyaW5nIj09dHlwZW9mIEU/ZnVuY3Rpb24oVixaLFcpe2Zvcih2YXIgej0wLHE9Vi5sZW5ndGg7ejxxO3orKyludWxsPT1XP1ooVi5jaGFyQXQoeikseixWKTpaLmNhbGwoVyxWLmNoYXJBdCh6KSx6LFYpfShFLGssTik6ZnVuY3Rpb24oVixaLFcpe2Zvcih2YXIgeiBpbiBWKUkuY2Fs'@;
put 'bChWLHopJiYobnVsbD09Vz9aKFZbel0seixWKTpaLmNhbGwoVyxWW3pdLHosVikpfShFLGssTil9fSw2MjMwOnc9Pnt3LmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSw1MzAyOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9'@;
put 'RCg0MTU1KSxVPUQoNTEwOCk7Y29uc3QgST1EKDc3KSxFPUQoMjUyMCksaz1EKDEzODEpLm1rZGlyc1N5bmMsQj1EKDMxOCkudXRpbWVzTWlsbGlzU3luYyxOPUQoMjczMyk7ZnVuY3Rpb24gVihxLFEsdGUsYWUpe2NvbnN0IHNlPShhZS5kZXJlZmVyZW5jZT9JLnN0YXRTeW5jOkkubHN0YXRT'@;
put 'eW5jKShRKTtpZihzZS5pc0RpcmVjdG9yeSgpKXJldHVybiBkZT1zZSxjZT1RLEc9dGUseT1hZSxxP3ooY2UsRyx5KTooTD1kZS5tb2RlLEg9Y2UsZz15LEkubWtkaXJTeW5jKGo9RykseihILGosZyksVyhqLEwpKTt2YXIgZGUsY2UsRyx5LEwsSCxqLGc7aWYoc2UuaXNGaWxlKCl8fHNlLmlz'@;
put 'Q2hhcmFjdGVyRGV2aWNlKCl8fHNlLmlzQmxvY2tEZXZpY2UoKSlyZXR1cm4gZnVuY3Rpb24oZGUsbGUsY2UsRyx5KXtyZXR1cm4gbGU/ZnVuY3Rpb24oTCxILGosZyl7aWYoZy5vdmVyd3JpdGUpcmV0dXJuIEkudW5saW5rU3luYyhqKSxaKEwsSCxqLGcpO2lmKGcuZXJyb3JPbkV4aXN0KXRo'@;
put 'cm93IG5ldyBFcnJvcihgJyR7an0nIGFscmVhZHkgZXhpc3RzYCl9KGRlLGNlLEcseSk6WihkZSxjZSxHLHkpfShzZSxxLFEsdGUsYWUpO2lmKHNlLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uKGRlLGxlLGNlLEcpe2xldCB5PUkucmVhZGxpbmtTeW5jKGxlKTtpZihHLmRlcmVm'@;
put 'ZXJlbmNlJiYoeT1FLnJlc29sdmUoUC5jd2QoKSx5KSksZGUpe2xldCBMO3RyeXtMPUkucmVhZGxpbmtTeW5jKGNlKX1jYXRjaChIKXtpZigiRUlOVkFMIj09PUguY29kZXx8IlVOS05PV04iPT09SC5jb2RlKXJldHVybiBJLnN5bWxpbmtTeW5jKHksY2UpO3Rocm93IEh9aWYoRy5kZXJlZmVy'@;
put 'ZW5jZSYmKEw9RS5yZXNvbHZlKFAuY3dkKCksTCkpLE4uaXNTcmNTdWJkaXIoeSxMKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3l9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke0x9Jy5gKTtpZihJLnN0YXRTeW5jKGNlKS5pc0RpcmVjdG9yeSgpJiZOLmlzU3Jj'@;
put 'U3ViZGlyKEwseSkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke0x9JyB3aXRoICcke3l9Jy5gKTtyZXR1cm4gZnVuY3Rpb24oSCxqKXtyZXR1cm4gSS51bmxpbmtTeW5jKGopLEkuc3ltbGlua1N5bmMoSCxqKX0oeSxjZSl9cmV0dXJuIEkuc3ltbGlua1N5bmMoeSxjZSl9'@;
put 'KHEsUSx0ZSxhZSk7dGhyb3cgc2UuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7UX1gKTpzZS5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1F9YCk6bmV3IEVycm9yKGBVbmtub3duIGZpbGU6ICR7UX1gKX1m'@;
put 'dW5jdGlvbiBaKHEsUSx0ZSxhZSl7cmV0dXJuIEkuY29weUZpbGVTeW5jKFEsdGUpLGFlLnByZXNlcnZlVGltZXN0YW1wcyYmKGRlPVEsbGU9dGUsISgxMjgmKHNlPXEubW9kZSkpJiZXKGxlLDEyOHxzZSksZnVuY3Rpb24oY2UsRyl7Y29uc3QgeT1JLnN0YXRTeW5jKGNlKTtCKEcseS5hdGlt'@;
put 'ZSx5Lm10aW1lKX0oZGUsbGUpKSxXKHRlLHEubW9kZSk7dmFyIHNlLGRlLGxlfWZ1bmN0aW9uIFcocSxRKXtyZXR1cm4gSS5jaG1vZFN5bmMocSxRKX1mdW5jdGlvbiB6KHEsUSx0ZSl7SS5yZWFkZGlyU3luYyhxKS5mb3JFYWNoKGFlPT5mdW5jdGlvbihzZSxkZSxsZSxjZSl7Y29uc3QgRz1F'@;
put 'LmpvaW4oZGUsc2UpLHk9RS5qb2luKGxlLHNlKSx7ZGVzdFN0YXQ6TH09Ti5jaGVja1BhdGhzU3luYyhHLHksImNvcHkiLGNlKTtyZXR1cm4gZnVuY3Rpb24oSCxqLGcsUyl7aWYoIVMuZmlsdGVyfHxTLmZpbHRlcihqLGcpKXJldHVybiBWKEgsaixnLFMpfShMLEcseSxjZSl9KGFlLHEsUSx0'@;
put 'ZSkpfXcuZXhwb3J0cz1mdW5jdGlvbihxLFEsdGUpeyJmdW5jdGlvbiI9PXR5cGVvZiB0ZSYmKHRlPXtmaWx0ZXI6dGV9KSwodGU9dGV8fHt9KS5jbG9iYmVyPSEoImNsb2JiZXIiaW4gdGUpfHwhIXRlLmNsb2JiZXIsdGUub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gdGU/ISF0ZS5vdmVyd3Jp'@;
put 'dGU6dGUuY2xvYmJlcix0ZS5wcmVzZXJ2ZVRpbWVzdGFtcHMmJiJpYTMyIj09PVAuYXJjaCYmVS53YXJuKCJmcy1leHRyYTogVXNpbmcgdGhlIHByZXNlcnZlVGltZXN0YW1wcyBvcHRpb24gaW4gMzItYml0IG5vZGUgaXMgbm90IHJlY29tbWVuZGVkO1xuXG4gICAgc2VlIGh0dHBzOi8vZ2l0'@;
put 'aHViLmNvbS9qcHJpY2hhcmRzb24vbm9kZS1mcy1leHRyYS9pc3N1ZXMvMjY5Iik7Y29uc3R7c3JjU3RhdDphZSxkZXN0U3RhdDpzZX09Ti5jaGVja1BhdGhzU3luYyhxLFEsImNvcHkiLHRlKTtyZXR1cm4gTi5jaGVja1BhcmVudFBhdGhzU3luYyhxLGFlLFEsImNvcHkiKSxmdW5jdGlvbihk'@;
put 'ZSxsZSxjZSxHKXtpZihHLmZpbHRlciYmIUcuZmlsdGVyKGxlLGNlKSlyZXR1cm47Y29uc3QgeT1FLmRpcm5hbWUoY2UpO3JldHVybiBJLmV4aXN0c1N5bmMoeSl8fGsoeSksVihkZSxsZSxjZSxHKX0oc2UscSxRLHRlKX19LDg2OTA6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9'@;
put 'e2NvcHlTeW5jOkQoNTMwMil9fSw3MTg5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KSxVPUQoNTEwOCk7Y29uc3QgST1EKDc3KSxFPUQoMjUyMCksaz1EKDEzODEpLm1rZGlycyxCPUQoOTI1NykucGF0aEV4aXN0cyxOPUQoMzE4KS51dGltZXNNaWxsaXMsVj1EKDI3MzMp'@;
put 'O2Z1bmN0aW9uIFoobGUsY2UsRyx5LEwpe2NvbnN0IEg9RS5kaXJuYW1lKEcpO0IoSCwoaixnKT0+aj9MKGopOmc/eihsZSxjZSxHLHksTCk6dm9pZCBrKEgsUz0+Uz9MKFMpOnoobGUsY2UsRyx5LEwpKSl9ZnVuY3Rpb24gVyhsZSxjZSxHLHksTCxIKXtQcm9taXNlLnJlc29sdmUoTC5maWx0'@;
put 'ZXIoRyx5KSkudGhlbihqPT5qP2xlKGNlLEcseSxMLEgpOkgoKSxqPT5IKGopKX1mdW5jdGlvbiB6KGxlLGNlLEcseSxMKXsoeS5kZXJlZmVyZW5jZT9JLnN0YXQ6SS5sc3RhdCkoY2UsKEgsaik9PntyZXR1cm4gSD9MKEgpOmouaXNEaXJlY3RvcnkoKT8oZz1qLHg9Y2UsXz1HLHA9eSxDPUws'@;
put 'bGU/YWUoeCxfLHAsQyk6KEs9Zy5tb2RlLG5lPXgsaGU9cCx4ZT1DLHZvaWQgSS5ta2Rpcih1ZT1fLE9lPT57aWYoT2UpcmV0dXJuIHhlKE9lKTthZShuZSx1ZSxoZSxIZT0+SGU/eGUoSGUpOnRlKHVlLEsseGUpKX0pKSk6ai5pc0ZpbGUoKXx8ai5pc0NoYXJhY3RlckRldmljZSgpfHxqLmlz'@;
put 'QmxvY2tEZXZpY2UoKT9mdW5jdGlvbihnLFMseCxfLHAsQyl7cmV0dXJuIFM/ZnVuY3Rpb24oSyxuZSx1ZSxoZSx4ZSl7aWYoIWhlLm92ZXJ3cml0ZSlyZXR1cm4gaGUuZXJyb3JPbkV4aXN0P3hlKG5ldyBFcnJvcihgJyR7dWV9JyBhbHJlYWR5IGV4aXN0c2ApKTp4ZSgpO0kudW5saW5rKHVl'@;
put 'LE9lPT5PZT94ZShPZSk6cShLLG5lLHVlLGhlLHhlKSl9KGcseCxfLHAsQyk6cShnLHgsXyxwLEMpfShqLGxlLGNlLEcseSxMKTpqLmlzU3ltYm9saWNMaW5rKCk/ZnVuY3Rpb24gZGUobGUsY2UsRyx5LEwpe0kucmVhZGxpbmsoY2UsKEgsaik9Pkg/TChIKTooeS5kZXJlZmVyZW5jZSYmKGo9'@;
put 'RS5yZXNvbHZlKFAuY3dkKCksaikpLGxlP3ZvaWQgSS5yZWFkbGluayhHLChnLFMpPT5nPyJFSU5WQUwiPT09Zy5jb2RlfHwiVU5LTk9XTiI9PT1nLmNvZGU/SS5zeW1saW5rKGosRyxMKTpMKGcpOih5LmRlcmVmZXJlbmNlJiYoUz1FLnJlc29sdmUoUC5jd2QoKSxTKSksVi5pc1NyY1N1YmRp'@;
put 'cihqLFMpP0wobmV3IEVycm9yKGBDYW5ub3QgY29weSAnJHtqfScgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgaXRzZWxmLCAnJHtTfScuYCkpOmxlLmlzRGlyZWN0b3J5KCkmJlYuaXNTcmNTdWJkaXIoUyxqKT9MKG5ldyBFcnJvcihgQ2Fubm90IG92ZXJ3cml0ZSAnJHtTfScgd2l0aCAnJHtqfScu'@;
put 'YCkpOmZ1bmN0aW9uKHgsXyxwKXtJLnVubGluayhfLEM9PkM/cChDKTpJLnN5bWxpbmsoeCxfLHApKX0oaixHLEwpKSk6SS5zeW1saW5rKGosRyxMKSkpfShsZSxjZSxHLHksTCk6ai5pc1NvY2tldCgpP0wobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke2NlfWApKTpq'@;
put 'LmlzRklGTygpP0wobmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8gcGlwZTogJHtjZX1gKSk6TChuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtjZX1gKSk7dmFyIGcseCxfLHAsQyxLLG5lLHVlLGhlLHhlfSl9ZnVuY3Rpb24gcShsZSxjZSxHLHksTCl7SS5jb3B5RmlsZShjZSxHLEg9'@;
put 'PntyZXR1cm4gSD9MKEgpOnkucHJlc2VydmVUaW1lc3RhbXBzPyhnPWNlLFM9Ryx4PUwsMTI4JihqPWxlLm1vZGUpP1EoaixnLFMseCk6dGUoUywxMjh8aixfPT5fP3goXyk6UShqLGcsUyx4KSkpOnRlKEcsbGUubW9kZSxMKTt2YXIgaixnLFMseH0pfWZ1bmN0aW9uIFEobGUsY2UsRyx5KXt2'@;
put 'YXIgSCxqO0g9RyxqPUw9Pkw/eShMKTp0ZShHLGxlLHkpLEkuc3RhdChjZSwoZyxTKT0+Zz9qKGcpOk4oSCxTLmF0aW1lLFMubXRpbWUsaikpfWZ1bmN0aW9uIHRlKGxlLGNlLEcpe3JldHVybiBJLmNobW9kKGxlLGNlLEcpfWZ1bmN0aW9uIGFlKGxlLGNlLEcseSl7SS5yZWFkZGlyKGxlLChM'@;
put 'LEgpPT5MP3koTCk6c2UoSCxsZSxjZSxHLHkpKX1mdW5jdGlvbiBzZShsZSxjZSxHLHksTCl7Y29uc3QgSD1sZS5wb3AoKTtyZXR1cm4gSD9mdW5jdGlvbihqLGcsUyx4LF8scCl7Y29uc3QgQz1FLmpvaW4oUyxnKSxLPUUuam9pbih4LGcpO1YuY2hlY2tQYXRocyhDLEssImNvcHkiLF8sKG5l'@;
put 'LHVlKT0+e2lmKG5lKXJldHVybiBwKG5lKTtjb25zdHtkZXN0U3RhdDpoZX09dWU7dmFyIHhlLE9lLEhlLEVlLExlO3hlPWhlLE9lPUMsSGU9SyxMZT14ZT0+eGU/cCh4ZSk6c2UoaixTLHgsXyxwKSwoRWU9XykuZmlsdGVyP1coeix4ZSxPZSxIZSxFZSxMZSk6eih4ZSxPZSxIZSxFZSxMZSl9'@;
put 'KX0obGUsSCxjZSxHLHksTCk6TCgpfXcuZXhwb3J0cz1mdW5jdGlvbihsZSxjZSxHLHkpeyJmdW5jdGlvbiIhPXR5cGVvZiBHfHx5PyJmdW5jdGlvbiI9PXR5cGVvZiBHJiYoRz17ZmlsdGVyOkd9KTooeT1HLEc9e30pLHk9eXx8ZnVuY3Rpb24oKXt9LChHPUd8fHt9KS5jbG9iYmVyPSEoImNs'@;
put 'b2JiZXIiaW4gRyl8fCEhRy5jbG9iYmVyLEcub3ZlcndyaXRlPSJvdmVyd3JpdGUiaW4gRz8hIUcub3ZlcndyaXRlOkcuY2xvYmJlcixHLnByZXNlcnZlVGltZXN0YW1wcyYmImlhMzIiPT09UC5hcmNoJiZVLndhcm4oImZzLWV4dHJhOiBVc2luZyB0aGUgcHJlc2VydmVUaW1lc3RhbXBzIG9w'@;
put 'dGlvbiBpbiAzMi1iaXQgbm9kZSBpcyBub3QgcmVjb21tZW5kZWQ7XG5cbiAgICBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiKSxWLmNoZWNrUGF0aHMobGUsY2UsImNvcHkiLEcsKEwsSCk9PntpZihMKXJldHVybiB5KEwpO2Nv'@;
put 'bnN0e3NyY1N0YXQ6aixkZXN0U3RhdDpnfT1IO1YuY2hlY2tQYXJlbnRQYXRocyhsZSxqLGNlLCJjb3B5IixTPT5TP3koUyk6Ry5maWx0ZXI/VyhaLGcsbGUsY2UsRyx5KTpaKGcsbGUsY2UsRyx5KSl9KX19LDY0NjQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoODk4MSkuZnJv'@;
put 'bUNhbGxiYWNrO3cuZXhwb3J0cz17Y29weTpQKEQoNzE4OSkpfX0sNTU5MDoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg4OTgxKS5mcm9tUHJvbWlzZSxVPUQoNzc0OSksST1EKDI1MjApLEU9RCgxMzgxKSxrPUQoNDU0MiksQj1QKGZ1bmN0aW9uKCl7dmFyIFY9ZWUoZnVuY3Rp'@;
put 'b24qKFope2xldCBXO3RyeXtXPXlpZWxkIFUucmVhZGRpcihaKX1jYXRjaHtyZXR1cm4gRS5ta2RpcnMoWil9cmV0dXJuIFByb21pc2UuYWxsKFcubWFwKHo9PmsucmVtb3ZlKEkuam9pbihaLHopKSkpfSk7cmV0dXJuIGZ1bmN0aW9uKFope3JldHVybiBWLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KX19KCkpO2Z1bmN0aW9uIE4oVil7bGV0IFo7dHJ5e1o9VS5yZWFkZGlyU3luYyhWKX1jYXRjaHtyZXR1cm4gRS5ta2RpcnNTeW5jKFYpfVouZm9yRWFjaChXPT57Vz1JLmpvaW4oVixXKSxrLnJlbW92ZVN5bmMoVyl9KX13LmV4cG9ydHM9e2VtcHR5RGlyU3luYzpOLGVtcHR5ZGlyU3luYzpO'@;
put 'LGVtcHR5RGlyOkIsZW1wdHlkaXI6Qn19LDY1MzA6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoODk4MSkuZnJvbUNhbGxiYWNrLFU9RCgyNTIwKSxJPUQoNzcpLEU9RCgxMzgxKTt3LmV4cG9ydHM9e2NyZWF0ZUZpbGU6UChmdW5jdGlvbihrLEIpe2Z1bmN0aW9uIE4oKXtJLndy'@;
put 'aXRlRmlsZShrLCIiLFY9PntpZihWKXJldHVybiBCKFYpO0IoKX0pfUkuc3RhdChrLChWLFopPT57aWYoIVYmJlouaXNGaWxlKCkpcmV0dXJuIEIoKTtjb25zdCBXPVUuZGlybmFtZShrKTtJLnN0YXQoVywoeixxKT0+e2lmKHopcmV0dXJuIkVOT0VOVCI9PT16LmNvZGU/RS5ta2RpcnMoVyxR'@;
put 'PT57aWYoUSlyZXR1cm4gQihRKTtOKCl9KTpCKHopO3EuaXNEaXJlY3RvcnkoKT9OKCk6SS5yZWFkZGlyKFcsUT0+e2lmKFEpcmV0dXJuIEIoUSl9KX0pfSl9KSxjcmVhdGVGaWxlU3luYzpmdW5jdGlvbihrKXtsZXQgQjt0cnl7Qj1JLnN0YXRTeW5jKGspfWNhdGNoe31pZihCJiZCLmlzRmls'@;
put 'ZSgpKXJldHVybjtjb25zdCBOPVUuZGlybmFtZShrKTt0cnl7SS5zdGF0U3luYyhOKS5pc0RpcmVjdG9yeSgpfHxJLnJlYWRkaXJTeW5jKE4pfWNhdGNoKFYpe2lmKCFWfHwiRU5PRU5UIiE9PVYuY29kZSl0aHJvdyBWO0UubWtkaXJzU3luYyhOKX1JLndyaXRlRmlsZVN5bmMoaywiIil9fX0s'@;
put 'MTcyMDoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg2NTMwKSxVPUQoNDE0NyksST1EKDM2MzUpO3cuZXhwb3J0cz17Y3JlYXRlRmlsZTpQLmNyZWF0ZUZpbGUsY3JlYXRlRmlsZVN5bmM6UC5jcmVhdGVGaWxlU3luYyxlbnN1cmVGaWxlOlAuY3JlYXRlRmlsZSxlbnN1cmVGaWxl'@;
put 'U3luYzpQLmNyZWF0ZUZpbGVTeW5jLGNyZWF0ZUxpbms6VS5jcmVhdGVMaW5rLGNyZWF0ZUxpbmtTeW5jOlUuY3JlYXRlTGlua1N5bmMsZW5zdXJlTGluazpVLmNyZWF0ZUxpbmssZW5zdXJlTGlua1N5bmM6VS5jcmVhdGVMaW5rU3luYyxjcmVhdGVTeW1saW5rOkkuY3JlYXRlU3ltbGluayxj'@;
put 'cmVhdGVTeW1saW5rU3luYzpJLmNyZWF0ZVN5bWxpbmtTeW5jLGVuc3VyZVN5bWxpbms6SS5jcmVhdGVTeW1saW5rLGVuc3VyZVN5bWxpbmtTeW5jOkkuY3JlYXRlU3ltbGlua1N5bmN9fSw0MTQ3Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDg5ODEpLmZyb21DYWxsYmFjayxV'@;
put 'PUQoMjUyMCksST1EKDc3KSxFPUQoMTM4MSksaz1EKDkyNTcpLnBhdGhFeGlzdHMse2FyZUlkZW50aWNhbDpCfT1EKDI3MzMpO3cuZXhwb3J0cz17Y3JlYXRlTGluazpQKGZ1bmN0aW9uKE4sVixaKXtmdW5jdGlvbiBXKHoscSl7SS5saW5rKHoscSxRPT57aWYoUSlyZXR1cm4gWihRKTtaKG51'@;
put 'bGwpfSl9SS5sc3RhdChWLCh6LHEpPT57SS5sc3RhdChOLChRLHRlKT0+e2lmKFEpcmV0dXJuIFEubWVzc2FnZT1RLm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksWihRKTtpZihxJiZCKHRlLHEpKXJldHVybiBaKG51bGwpO2NvbnN0IGFlPVUuZGlybmFtZShWKTtrKGFl'@;
put 'LChzZSxkZSk9PnNlP1ooc2UpOmRlP1coTixWKTp2b2lkIEUubWtkaXJzKGFlLGxlPT57aWYobGUpcmV0dXJuIFoobGUpO1coTixWKX0pKX0pfSl9KSxjcmVhdGVMaW5rU3luYzpmdW5jdGlvbihOLFYpe2xldCBaO3RyeXtaPUkubHN0YXRTeW5jKFYpfWNhdGNoe310cnl7Y29uc3Qgej1JLmxz'@;
put 'dGF0U3luYyhOKTtpZihaJiZCKHosWikpcmV0dXJufWNhdGNoKHope3Rocm93IHoubWVzc2FnZT16Lm1lc3NhZ2UucmVwbGFjZSgibHN0YXQiLCJlbnN1cmVMaW5rIiksen1jb25zdCBXPVUuZGlybmFtZShWKTtyZXR1cm4gSS5leGlzdHNTeW5jKFcpfHxFLm1rZGlyc1N5bmMoVyksSS5saW5r'@;
put 'U3luYyhOLFYpfX19LDYwNzI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoMjUyMCksVT1EKDc3KSxJPUQoOTI1NykucGF0aEV4aXN0czt3LmV4cG9ydHM9e3N5bWxpbmtQYXRoczpmdW5jdGlvbihFLGssQil7aWYoUC5pc0Fic29sdXRlKEUpKXJldHVybiBVLmxzdGF0KEUsTj0+'@;
put 'Tj8oTi5tZXNzYWdlPU4ubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxCKE4pKTpCKG51bGwse3RvQ3dkOkUsdG9Ec3Q6RX0pKTt7Y29uc3QgTj1QLmRpcm5hbWUoayksVj1QLmpvaW4oTixFKTtyZXR1cm4gSShWLChaLFcpPT5aP0IoWik6Vz9CKG51bGwse3RvQ3dk'@;
put 'OlYsdG9Ec3Q6RX0pOlUubHN0YXQoRSx6PT56Pyh6Lm1lc3NhZ2U9ei5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLEIoeikpOkIobnVsbCx7dG9Dd2Q6RSx0b0RzdDpQLnJlbGF0aXZlKE4sRSl9KSkpfX0sc3ltbGlua1BhdGhzU3luYzpmdW5jdGlvbihFLGspe2xl'@;
put 'dCBCO2lmKFAuaXNBYnNvbHV0ZShFKSl7aWYoQj1VLmV4aXN0c1N5bmMoRSksIUIpdGhyb3cgbmV3IEVycm9yKCJhYnNvbHV0ZSBzcmNwYXRoIGRvZXMgbm90IGV4aXN0Iik7cmV0dXJue3RvQ3dkOkUsdG9Ec3Q6RX19e2NvbnN0IE49UC5kaXJuYW1lKGspLFY9UC5qb2luKE4sRSk7aWYoQj1V'@;
put 'LmV4aXN0c1N5bmMoViksQilyZXR1cm57dG9Dd2Q6Vix0b0RzdDpFfTtpZihCPVUuZXhpc3RzU3luYyhFKSwhQil0aHJvdyBuZXcgRXJyb3IoInJlbGF0aXZlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6RSx0b0RzdDpQLnJlbGF0aXZlKE4sRSl9fX19fSw5MjU5Oih3'@;
put 'LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDc3KTt3LmV4cG9ydHM9e3N5bWxpbmtUeXBlOmZ1bmN0aW9uKFUsSSxFKXtpZihFPSJmdW5jdGlvbiI9PXR5cGVvZiBJP0k6RSxJPSJmdW5jdGlvbiIhPXR5cGVvZiBJJiZJKXJldHVybiBFKG51bGwsSSk7UC5sc3RhdChVLChrLEIpPT57'@;
put 'aWYoaylyZXR1cm4gRShudWxsLCJmaWxlIik7ST1CJiZCLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUiLEUobnVsbCxJKX0pfSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24oVSxJKXtsZXQgRTtpZihJKXJldHVybiBJO3RyeXtFPVAubHN0YXRTeW5jKFUpfWNhdGNoe3JldHVybiJmaWxlIn1y'@;
put 'ZXR1cm4gRSYmRS5pc0RpcmVjdG9yeSgpPyJkaXIiOiJmaWxlIn19fSwzNjM1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDg5ODEpLmZyb21DYWxsYmFjayxVPUQoMjUyMCksST1EKDc3NDkpLEU9RCgxMzgxKSxrPUUubWtkaXJzLEI9RS5ta2RpcnNTeW5jLE49RCg2MDcyKSxW'@;
put 'PU4uc3ltbGlua1BhdGhzLFo9Ti5zeW1saW5rUGF0aHNTeW5jLFc9RCg5MjU5KSx6PVcuc3ltbGlua1R5cGUscT1XLnN5bWxpbmtUeXBlU3luYyxRPUQoOTI1NykucGF0aEV4aXN0cyx7YXJlSWRlbnRpY2FsOnRlfT1EKDI3MzMpO2Z1bmN0aW9uIGFlKHNlLGRlLGxlLGNlKXtWKHNlLGRlLChH'@;
put 'LHkpPT57aWYoRylyZXR1cm4gY2UoRyk7c2U9eS50b0RzdCx6KHkudG9Dd2QsbGUsKEwsSCk9PntpZihMKXJldHVybiBjZShMKTtjb25zdCBqPVUuZGlybmFtZShkZSk7UShqLChnLFMpPT5nP2NlKGcpOlM/SS5zeW1saW5rKHNlLGRlLEgsY2UpOnZvaWQgayhqLHg9PntpZih4KXJldHVybiBj'@;
put 'ZSh4KTtJLnN5bWxpbmsoc2UsZGUsSCxjZSl9KSl9KX0pfXcuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpQKGZ1bmN0aW9uKHNlLGRlLGxlLGNlKXtjZT0iZnVuY3Rpb24iPT10eXBlb2YgbGU/bGU6Y2UsbGU9ImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiZsZSxJLmxzdGF0KGRlLChHLHkpPT57IUcm'@;
put 'JnkuaXNTeW1ib2xpY0xpbmsoKT9Qcm9taXNlLmFsbChbSS5zdGF0KHNlKSxJLnN0YXQoZGUpXSkudGhlbigoW0wsSF0pPT57aWYodGUoTCxIKSlyZXR1cm4gY2UobnVsbCk7YWUoc2UsZGUsbGUsY2UpfSk6YWUoc2UsZGUsbGUsY2UpfSl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbihz'@;
put 'ZSxkZSxsZSl7bGV0IGNlO3RyeXtjZT1JLmxzdGF0U3luYyhkZSl9Y2F0Y2h7fWlmKGNlJiZjZS5pc1N5bWJvbGljTGluaygpKXtjb25zdCBMPUkuc3RhdFN5bmMoc2UpLEg9SS5zdGF0U3luYyhkZSk7aWYodGUoTCxIKSlyZXR1cm59Y29uc3QgRz1aKHNlLGRlKTtzZT1HLnRvRHN0LGxlPXEo'@;
put 'Ry50b0N3ZCxsZSk7Y29uc3QgeT1VLmRpcm5hbWUoZGUpO3JldHVybiBJLmV4aXN0c1N5bmMoeSl8fEIoeSksSS5zeW1saW5rU3luYyhzZSxkZSxsZSl9fX0sNzc0OToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg4OTgxKS5mcm9tQ2FsbGJhY2ssVT1EKDc3KSxJPVsiYWNjZXNz'@;
put 'IiwiYXBwZW5kRmlsZSIsImNobW9kIiwiY2hvd24iLCJjbG9zZSIsImNvcHlGaWxlIiwiZmNobW9kIiwiZmNob3duIiwiZmRhdGFzeW5jIiwiZnN0YXQiLCJmc3luYyIsImZ0cnVuY2F0ZSIsImZ1dGltZXMiLCJsY2htb2QiLCJsY2hvd24iLCJsaW5rIiwibHN0YXQiLCJta2RpciIsIm1rZHRl'@;
put 'bXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJdLmZpbHRlcihFPT4iZnVuY3Rpb24i'@;
put 'PT10eXBlb2YgVVtFXSk7T2JqZWN0LmFzc2lnbihBLFUpLEkuZm9yRWFjaChFPT57QVtFXT1QKFVbRV0pfSksQS5yZWFscGF0aC5uYXRpdmU9UChVLnJlYWxwYXRoLm5hdGl2ZSksQS5leGlzdHM9ZnVuY3Rpb24oRSxrKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygaz9VLmV4aXN0cyhFLGsp'@;
put 'Om5ldyBQcm9taXNlKEI9PlUuZXhpc3RzKEUsQikpfSxBLnJlYWQ9ZnVuY3Rpb24oRSxrLEIsTixWLFope3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBaP1UucmVhZChFLGssQixOLFYsWik6bmV3IFByb21pc2UoKFcseik9PntVLnJlYWQoRSxrLEIsTixWLChxLFEsdGUpPT57aWYocSlyZXR1'@;
put 'cm4geihxKTtXKHtieXRlc1JlYWQ6USxidWZmZXI6dGV9KX0pfSl9LEEud3JpdGU9ZnVuY3Rpb24oRSxrLC4uLkIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBCW0IubGVuZ3RoLTFdP1Uud3JpdGUoRSxrLC4uLkIpOm5ldyBQcm9taXNlKChOLFYpPT57VS53cml0ZShFLGssLi4uQiwoWixX'@;
put 'LHopPT57aWYoWilyZXR1cm4gVihaKTtOKHtieXRlc1dyaXR0ZW46VyxidWZmZXI6en0pfSl9KX0sImZ1bmN0aW9uIj09dHlwZW9mIFUud3JpdGV2JiYoQS53cml0ZXY9ZnVuY3Rpb24oRSxrLC4uLkIpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBCW0IubGVuZ3RoLTFdP1Uud3JpdGV2KEUs'@;
put 'aywuLi5CKTpuZXcgUHJvbWlzZSgoTixWKT0+e1Uud3JpdGV2KEUsaywuLi5CLChaLFcseik9PntpZihaKXJldHVybiBWKFopO04oe2J5dGVzV3JpdHRlbjpXLGJ1ZmZlcnM6en0pfSl9KX0pfSw1Njc0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPXsuLi5EKDc3NDkpLC4uLkQo'@;
put 'ODY5MCksLi4uRCg2NDY0KSwuLi5EKDU1OTApLC4uLkQoMTcyMCksLi4uRCg2NTczKSwuLi5EKDEzODEpLC4uLkQoNDAyNiksLi4uRCg1MzApLC4uLkQoMTMxNSksLi4uRCg5MjU3KSwuLi5EKDQ1NDIpfX0sNjU3MzoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg4OTgxKS5mcm9t'@;
put 'UHJvbWlzZSxVPUQoNzE4Myk7VS5vdXRwdXRKc29uPVAoRCgzNTA4KSksVS5vdXRwdXRKc29uU3luYz1EKDk1NzgpLFUub3V0cHV0SlNPTj1VLm91dHB1dEpzb24sVS5vdXRwdXRKU09OU3luYz1VLm91dHB1dEpzb25TeW5jLFUud3JpdGVKU09OPVUud3JpdGVKc29uLFUud3JpdGVKU09OU3lu'@;
put 'Yz1VLndyaXRlSnNvblN5bmMsVS5yZWFkSlNPTj1VLnJlYWRKc29uLFUucmVhZEpTT05TeW5jPVUucmVhZEpzb25TeW5jLHcuZXhwb3J0cz1VfSw3MTgzOih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDY4MTMpO3cuZXhwb3J0cz17cmVhZEpzb246UC5yZWFkRmlsZSxyZWFkSnNv'@;
put 'blN5bmM6UC5yZWFkRmlsZVN5bmMsd3JpdGVKc29uOlAud3JpdGVGaWxlLHdyaXRlSnNvblN5bmM6UC53cml0ZUZpbGVTeW5jfX0sOTU3ODoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpQfT1EKDY3ODApLHtvdXRwdXRGaWxlU3luYzpVfT1EKDEzMTUpO3cuZXhwb3J0'@;
put 'cz1mdW5jdGlvbihJLEUsayl7Y29uc3QgQj1QKEUsayk7VShJLEIsayl9fSwzNTA4Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3R7c3RyaW5naWZ5OlB9PUQoNjc4MCkse291dHB1dEZpbGU6VX09RCgxMzE1KTt3LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1lZShmdW5jdGlvbiooRSxr'@;
put 'LEI9e30pe2NvbnN0IE49UChrLEIpO3lpZWxkIFUoRSxOLEIpfSk7cmV0dXJuIGZ1bmN0aW9uKEUsayl7cmV0dXJuIEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX0sMTM4MToodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg4OTgxKS5mcm9tUHJvbWlzZSx7bWFrZURpcjpVLG1h'@;
put 'a2VEaXJTeW5jOkl9PUQoODIzMyksRT1QKFUpO3cuZXhwb3J0cz17bWtkaXJzOkUsbWtkaXJzU3luYzpJLG1rZGlycDpFLG1rZGlycFN5bmM6SSxlbnN1cmVEaXI6RSxlbnN1cmVEaXJTeW5jOkl9fSw4MjMzOih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDc3NDkpLHtjaGVja1Bh'@;
put 'dGg6VX09RCgzNDY4KSxJPUU9PiJudW1iZXIiPT10eXBlb2YgRT9FOnttb2RlOjUxMSwuLi5FfS5tb2RlO3cuZXhwb3J0cy5tYWtlRGlyPWZ1bmN0aW9uKCl7dmFyIEU9ZWUoZnVuY3Rpb24qKGssQil7cmV0dXJuIFUoayksUC5ta2RpcihrLHttb2RlOkkoQikscmVjdXJzaXZlOiEwfSl9KTty'@;
put 'ZXR1cm4gZnVuY3Rpb24oayxCKXtyZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLHcuZXhwb3J0cy5tYWtlRGlyU3luYz0oRSxrKT0+KFUoRSksUC5ta2RpclN5bmMoRSx7bW9kZTpJKGspLHJlY3Vyc2l2ZTohMH0pKX0sMzQ2ODoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQ'@;
put 'PUQoNDE1NSk7Y29uc3QgVT1EKDI1MjApO3cuZXhwb3J0cy5jaGVja1BhdGg9ZnVuY3Rpb24oSSl7aWYoIndpbjMyIj09PVAucGxhdGZvcm0mJi9bPD46Inw/Kl0vLnRlc3QoSS5yZXBsYWNlKFUucGFyc2UoSSkucm9vdCwiIikpKXtjb25zdCBFPW5ldyBFcnJvcihgUGF0aCBjb250YWlucyBp'@;
put 'bnZhbGlkIGNoYXJhY3RlcnM6ICR7SX1gKTt0aHJvdyBFLmNvZGU9IkVJTlZBTCIsRX19fSw0MDI2Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPXttb3ZlU3luYzpEKDYwMDYpfX0sNjAwNjoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg3NyksVT1EKDI1MjApLEk9'@;
put 'RCg4NjkwKS5jb3B5U3luYyxFPUQoNDU0MikucmVtb3ZlU3luYyxrPUQoMTM4MSkubWtkaXJwU3luYyxCPUQoMjczMyk7ZnVuY3Rpb24gTihWLFosVyl7dHJ5e1AucmVuYW1lU3luYyhWLFopfWNhdGNoKHope2lmKCJFWERFViIhPT16LmNvZGUpdGhyb3cgejtyZXR1cm4gSShxPVYsWix7b3Zl'@;
put 'cndyaXRlOlcsZXJyb3JPbkV4aXN0OiEwfSksRShxKX12YXIgcX13LmV4cG9ydHM9ZnVuY3Rpb24oVixaLFcpe2NvbnN0IHo9KFc9V3x8e30pLm92ZXJ3cml0ZXx8Vy5jbG9iYmVyfHwhMSx7c3JjU3RhdDpxLGlzQ2hhbmdpbmdDYXNlOlE9ITF9PUIuY2hlY2tQYXRoc1N5bmMoVixaLCJtb3Zl'@;
put 'IixXKTtyZXR1cm4gQi5jaGVja1BhcmVudFBhdGhzU3luYyhWLHEsWiwibW92ZSIpLGZ1bmN0aW9uKHRlKXtjb25zdCBhZT1VLmRpcm5hbWUodGUpO3JldHVybiBVLnBhcnNlKGFlKS5yb290PT09YWV9KFopfHxrKFUuZGlybmFtZShaKSksZnVuY3Rpb24odGUsYWUsc2UsZGUpe2lmKGRlKXJl'@;
put 'dHVybiBOKHRlLGFlLHNlKTtpZihzZSlyZXR1cm4gRShhZSksTih0ZSxhZSxzZSk7aWYoUC5leGlzdHNTeW5jKGFlKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIE4odGUsYWUsc2UpfShWLFoseixRKX19LDUzMDoodyxBLEQpPT57InVzZSBzdHJpY3Qi'@;
put 'O2NvbnN0IFA9RCg4OTgxKS5mcm9tQ2FsbGJhY2s7dy5leHBvcnRzPXttb3ZlOlAoRCg0MzYpKX19LDQzNjoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg3NyksVT1EKDI1MjApLEk9RCg2NDY0KS5jb3B5LEU9RCg0NTQyKS5yZW1vdmUsaz1EKDEzODEpLm1rZGlycCxCPUQoOTI1'@;
put 'NykucGF0aEV4aXN0cyxOPUQoMjczMyk7ZnVuY3Rpb24gVihXLHoscSxRLHRlKXtyZXR1cm4gUT9aKFcseixxLHRlKTpxP0UoeixhZT0+YWU/dGUoYWUpOlooVyx6LHEsdGUpKTp2b2lkIEIoeiwoYWUsc2UpPT5hZT90ZShhZSk6c2U/dGUobmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3Rz'@;
put 'LiIpKTpaKFcseixxLHRlKSl9ZnVuY3Rpb24gWihXLHoscSxRKXtQLnJlbmFtZShXLHosdGU9PntyZXR1cm4gdGU/IkVYREVWIiE9PXRlLmNvZGU/USh0ZSk6KGxlPVEsdm9pZCBJKGFlPVcseix7b3ZlcndyaXRlOnEsZXJyb3JPbkV4aXN0OiEwfSxHPT5HP2xlKEcpOkUoYWUsbGUpKSk6USgp'@;
put 'O3ZhciBhZSxsZX0pfXcuZXhwb3J0cz1mdW5jdGlvbihXLHoscSxRKXsiZnVuY3Rpb24iPT10eXBlb2YgcSYmKFE9cSxxPXt9KTtjb25zdCB0ZT1xLm92ZXJ3cml0ZXx8cS5jbG9iYmVyfHwhMTtOLmNoZWNrUGF0aHMoVyx6LCJtb3ZlIixxLChhZSxzZSk9PntpZihhZSlyZXR1cm4gUShhZSk7'@;
put 'Y29uc3R7c3JjU3RhdDpkZSxpc0NoYW5naW5nQ2FzZTpsZT0hMX09c2U7Ti5jaGVja1BhcmVudFBhdGhzKFcsZGUseiwibW92ZSIsY2U9PmNlP1EoY2UpOmZ1bmN0aW9uKEcpe2NvbnN0IHk9VS5kaXJuYW1lKEcpO3JldHVybiBVLnBhcnNlKHkpLnJvb3Q9PT15fSh6KT9WKFcseix0ZSxsZSxR'@;
put 'KTp2b2lkIGsoVS5kaXJuYW1lKHopLEc9Pkc/UShHKTpWKFcseix0ZSxsZSxRKSkpfSl9fSwxMzE1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDg5ODEpLmZyb21DYWxsYmFjayxVPUQoNzcpLEk9RCgyNTIwKSxFPUQoMTM4MSksaz1EKDkyNTcpLnBhdGhFeGlzdHM7dy5leHBv'@;
put 'cnRzPXtvdXRwdXRGaWxlOlAoZnVuY3Rpb24oQixOLFYsWil7ImZ1bmN0aW9uIj09dHlwZW9mIFYmJihaPVYsVj0idXRmOCIpO2NvbnN0IFc9SS5kaXJuYW1lKEIpO2soVywoeixxKT0+ej9aKHopOnE/VS53cml0ZUZpbGUoQixOLFYsWik6dm9pZCBFLm1rZGlycyhXLFE9PntpZihRKXJldHVy'@;
put 'biBaKFEpO1Uud3JpdGVGaWxlKEIsTixWLFopfSkpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24oQiwuLi5OKXtjb25zdCBWPUkuZGlybmFtZShCKTtpZihVLmV4aXN0c1N5bmMoVikpcmV0dXJuIFUud3JpdGVGaWxlU3luYyhCLC4uLk4pO0UubWtkaXJzU3luYyhWKSxVLndyaXRlRmlsZVN5'@;
put 'bmMoQiwuLi5OKX19fSw5MjU3Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDg5ODEpLmZyb21Qcm9taXNlLFU9RCg3NzQ5KTt3LmV4cG9ydHM9e3BhdGhFeGlzdHM6UChmdW5jdGlvbihJKXtyZXR1cm4gVS5hY2Nlc3MoSSkudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxw'@;
put 'YXRoRXhpc3RzU3luYzpVLmV4aXN0c1N5bmN9fSw0NTQyOih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDc3KSxVPUQoODk4MSkuZnJvbUNhbGxiYWNrLEk9RCgzNDU2KTt3LmV4cG9ydHM9e3JlbW92ZTpVKGZ1bmN0aW9uKEUsayl7aWYoUC5ybSlyZXR1cm4gUC5ybShFLHtyZWN1'@;
put 'cnNpdmU6ITAsZm9yY2U6ITB9LGspO0koRSxrKX0pLHJlbW92ZVN5bmM6ZnVuY3Rpb24oRSl7aWYoUC5ybVN5bmMpcmV0dXJuIFAucm1TeW5jKEUse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pO0kuc3luYyhFKX19fSwzNDU2Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KTtj'@;
put 'b25zdCBVPUQoNzcpLEk9RCgyNTIwKSxFPUQoOTI4Miksaz0id2luMzIiPT09UC5wbGF0Zm9ybTtmdW5jdGlvbiBCKHRlKXtbInVubGluayIsImNobW9kIiwic3RhdCIsImxzdGF0Iiwicm1kaXIiLCJyZWFkZGlyIl0uZm9yRWFjaChhZT0+e3RlW2FlXT10ZVthZV18fFVbYWVdLHRlW2FlKz0i'@;
put 'U3luYyJdPXRlW2FlXXx8VVthZV19KSx0ZS5tYXhCdXN5VHJpZXM9dGUubWF4QnVzeVRyaWVzfHwzfWZ1bmN0aW9uIE4odGUsYWUsc2Upe2xldCBkZT0wOyJmdW5jdGlvbiI9PXR5cGVvZiBhZSYmKHNlPWFlLGFlPXt9KSxFKHRlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLEUuc3RyaWN0RXF1'@;
put 'YWwodHlwZW9mIHRlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksRS5zdHJpY3RFcXVhbCh0eXBlb2Ygc2UsImZ1bmN0aW9uIiwicmltcmFmOiBjYWxsYmFjayBmdW5jdGlvbiByZXF1aXJlZCIpLEUoYWUsInJpbXJhZjogaW52YWxpZCBvcHRpb25zIGFyZ3Vt'@;
put 'ZW50IHByb3ZpZGVkIiksRS5zdHJpY3RFcXVhbCh0eXBlb2YgYWUsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IiksQihhZSksVih0ZSxhZSxmdW5jdGlvbiBsZShjZSl7aWYoY2Upe2lmKCgiRUJVU1kiPT09Y2UuY29kZXx8IkVOT1RFTVBUWSI9PT1jZS5jb2Rl'@;
put 'fHwiRVBFUk0iPT09Y2UuY29kZSkmJmRlPGFlLm1heEJ1c3lUcmllcylyZXR1cm4gZGUrKyxzZXRUaW1lb3V0KCgpPT5WKHRlLGFlLGxlKSwxMDAqZGUpOyJFTk9FTlQiPT09Y2UuY29kZSYmKGNlPW51bGwpfXNlKGNlKX0pfWZ1bmN0aW9uIFYodGUsYWUsc2Upe0UodGUpLEUoYWUpLEUoImZ1'@;
put 'bmN0aW9uIj09dHlwZW9mIHNlKSxhZS5sc3RhdCh0ZSwoZGUsbGUpPT5kZSYmIkVOT0VOVCI9PT1kZS5jb2RlP3NlKG51bGwpOmRlJiYiRVBFUk0iPT09ZGUuY29kZSYmaz9aKHRlLGFlLGRlLHNlKTpsZSYmbGUuaXNEaXJlY3RvcnkoKT96KHRlLGFlLGRlLHNlKTp2b2lkIGFlLnVubGluayh0'@;
put 'ZSxjZT0+e2lmKGNlKXtpZigiRU5PRU5UIj09PWNlLmNvZGUpcmV0dXJuIHNlKG51bGwpO2lmKCJFUEVSTSI9PT1jZS5jb2RlKXJldHVybiBrP1oodGUsYWUsY2Usc2UpOnoodGUsYWUsY2Usc2UpO2lmKCJFSVNESVIiPT09Y2UuY29kZSlyZXR1cm4geih0ZSxhZSxjZSxzZSl9cmV0dXJuIHNl'@;
put 'KGNlKX0pKX1mdW5jdGlvbiBaKHRlLGFlLHNlLGRlKXtFKHRlKSxFKGFlKSxFKCJmdW5jdGlvbiI9PXR5cGVvZiBkZSksYWUuY2htb2QodGUsNDM4LGxlPT57bGU/ZGUoIkVOT0VOVCI9PT1sZS5jb2RlP251bGw6c2UpOmFlLnN0YXQodGUsKGNlLEcpPT57Y2U/ZGUoIkVOT0VOVCI9PT1jZS5j'@;
put 'b2RlP251bGw6c2UpOkcuaXNEaXJlY3RvcnkoKT96KHRlLGFlLHNlLGRlKTphZS51bmxpbmsodGUsZGUpfSl9KX1mdW5jdGlvbiBXKHRlLGFlLHNlKXtsZXQgZGU7RSh0ZSksRShhZSk7dHJ5e2FlLmNobW9kU3luYyh0ZSw0MzgpfWNhdGNoKGxlKXtpZigiRU5PRU5UIj09PWxlLmNvZGUpcmV0'@;
put 'dXJuO3Rocm93IHNlfXRyeXtkZT1hZS5zdGF0U3luYyh0ZSl9Y2F0Y2gobGUpe2lmKCJFTk9FTlQiPT09bGUuY29kZSlyZXR1cm47dGhyb3cgc2V9ZGUuaXNEaXJlY3RvcnkoKT9RKHRlLGFlLHNlKTphZS51bmxpbmtTeW5jKHRlKX1mdW5jdGlvbiB6KHRlLGFlLHNlLGRlKXtFKHRlKSxFKGFl'@;
put 'KSxFKCJmdW5jdGlvbiI9PXR5cGVvZiBkZSksYWUucm1kaXIodGUsbGU9Pnt2YXIgY2UsRyx5OyFsZXx8IkVOT1RFTVBUWSIhPT1sZS5jb2RlJiYiRUVYSVNUIiE9PWxlLmNvZGUmJiJFUEVSTSIhPT1sZS5jb2RlP2RlKGxlJiYiRU5PVERJUiI9PT1sZS5jb2RlP3NlOmxlKTooRz1hZSx5PWRl'@;
put 'LEUoY2U9dGUpLEUoRyksRSgiZnVuY3Rpb24iPT10eXBlb2YgeSksRy5yZWFkZGlyKGNlLChMLEgpPT57aWYoTClyZXR1cm4geShMKTtsZXQgaixnPUgubGVuZ3RoO2lmKDA9PT1nKXJldHVybiBHLnJtZGlyKGNlLHkpO0guZm9yRWFjaChTPT57TihJLmpvaW4oY2UsUyksRyx4PT57aWYoIWop'@;
put 'cmV0dXJuIHg/eShqPXgpOnZvaWQoMD09LS1nJiZHLnJtZGlyKGNlLHkpKX0pfSl9KSl9KX1mdW5jdGlvbiBxKHRlLGFlKXtsZXQgc2U7QihhZT1hZXx8e30pLEUodGUsInJpbXJhZjogbWlzc2luZyBwYXRoIiksRS5zdHJpY3RFcXVhbCh0eXBlb2YgdGUsInN0cmluZyIsInJpbXJhZjogcGF0'@;
put 'aCBzaG91bGQgYmUgYSBzdHJpbmciKSxFKGFlLCJyaW1yYWY6IG1pc3Npbmcgb3B0aW9ucyIpLEUuc3RyaWN0RXF1YWwodHlwZW9mIGFlLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpO3RyeXtzZT1hZS5sc3RhdFN5bmModGUpfWNhdGNoKGRlKXtpZigiRU5P'@;
put 'RU5UIj09PWRlLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1kZS5jb2RlJiZrJiZXKHRlLGFlLGRlKX10cnl7c2UmJnNlLmlzRGlyZWN0b3J5KCk/USh0ZSxhZSxudWxsKTphZS51bmxpbmtTeW5jKHRlKX1jYXRjaChkZSl7aWYoIkVOT0VOVCI9PT1kZS5jb2RlKXJldHVybjtpZigiRVBFUk0iPT09'@;
put 'ZGUuY29kZSlyZXR1cm4gaz9XKHRlLGFlLGRlKTpRKHRlLGFlLGRlKTtpZigiRUlTRElSIiE9PWRlLmNvZGUpdGhyb3cgZGU7USh0ZSxhZSxkZSl9fWZ1bmN0aW9uIFEodGUsYWUsc2Upe0UodGUpLEUoYWUpO3RyeXthZS5ybWRpclN5bmModGUpfWNhdGNoKGRlKXtpZigiRU5PVERJUiI9PT1k'@;
put 'ZS5jb2RlKXRocm93IHNlO2lmKCJFTk9URU1QVFkiPT09ZGUuY29kZXx8IkVFWElTVCI9PT1kZS5jb2RlfHwiRVBFUk0iPT09ZGUuY29kZSkhZnVuY3Rpb24obGUsY2Upe2lmKEUobGUpLEUoY2UpLGNlLnJlYWRkaXJTeW5jKGxlKS5mb3JFYWNoKEc9PnEoSS5qb2luKGxlLEcpLGNlKSksIWsp'@;
put 'cmV0dXJuIGNlLnJtZGlyU3luYyhsZSxjZSk7e2NvbnN0IEc9RGF0ZS5ub3coKTtkb3t0cnl7cmV0dXJuIGNlLnJtZGlyU3luYyhsZSxjZSl9Y2F0Y2h7fX13aGlsZShEYXRlLm5vdygpLUc8NTAwKX19KHRlLGFlKTtlbHNlIGlmKCJFTk9FTlQiIT09ZGUuY29kZSl0aHJvdyBkZX19dy5leHBv'@;
put 'cnRzPU4sTi5zeW5jPXF9LDI3MzM6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoNzc0OSksVT1EKDI1MjApLEk9RCg5NTM5KTtmdW5jdGlvbiBFKFYsWixXKXtjb25zdCB6PVcuZGVyZWZlcmVuY2U/cT0+UC5zdGF0KHEse2JpZ2ludDohMH0pOnE9PlAubHN0YXQocSx7YmlnaW50'@;
put 'OiEwfSk7cmV0dXJuIFByb21pc2UuYWxsKFt6KFYpLHooWikuY2F0Y2gocT0+e2lmKCJFTk9FTlQiPT09cS5jb2RlKXJldHVybiBudWxsO3Rocm93IHF9KV0pLnRoZW4oKFtxLFFdKT0+KHtzcmNTdGF0OnEsZGVzdFN0YXQ6UX0pKX1mdW5jdGlvbiBrKFYsWil7cmV0dXJuIFouaW5vJiZaLmRl'@;
put 'diYmWi5pbm89PT1WLmlubyYmWi5kZXY9PT1WLmRldn1mdW5jdGlvbiBCKFYsWil7Y29uc3QgVz1VLnJlc29sdmUoVikuc3BsaXQoVS5zZXApLmZpbHRlcihxPT5xKSx6PVUucmVzb2x2ZShaKS5zcGxpdChVLnNlcCkuZmlsdGVyKHE9PnEpO3JldHVybiBXLnJlZHVjZSgocSxRLHRlKT0+cSYm'@;
put 'elt0ZV09PT1RLCEwKX1mdW5jdGlvbiBOKFYsWixXKXtyZXR1cm5gQ2Fubm90ICR7V30gJyR7Vn0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7Wn0nLmB9dy5leHBvcnRzPXtjaGVja1BhdGhzOmZ1bmN0aW9uKFYsWixXLHoscSl7SS5jYWxsYmFja2lmeShFKShWLFoseiwoUSx0'@;
put 'ZSk9PntpZihRKXJldHVybiBxKFEpO2NvbnN0e3NyY1N0YXQ6YWUsZGVzdFN0YXQ6c2V9PXRlO2lmKHNlKXtpZihrKGFlLHNlKSl7Y29uc3QgZGU9VS5iYXNlbmFtZShWKSxsZT1VLmJhc2VuYW1lKFopO3JldHVybiJtb3ZlIj09PVcmJmRlIT09bGUmJmRlLnRvTG93ZXJDYXNlKCk9PT1sZS50'@;
put 'b0xvd2VyQ2FzZSgpP3EobnVsbCx7c3JjU3RhdDphZSxkZXN0U3RhdDpzZSxpc0NoYW5naW5nQ2FzZTohMH0pOnEobmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1lLiIpKX1pZihhZS5pc0RpcmVjdG9yeSgpJiYhc2UuaXNEaXJlY3RvcnkoKSly'@;
put 'ZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtafScgd2l0aCBkaXJlY3RvcnkgJyR7Vn0nLmApKTtpZighYWUuaXNEaXJlY3RvcnkoKSYmc2UuaXNEaXJlY3RvcnkoKSlyZXR1cm4gcShuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0'@;
put 'b3J5ICcke1p9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Vn0nLmApKX1yZXR1cm4gYWUuaXNEaXJlY3RvcnkoKSYmQihWLFopP3EobmV3IEVycm9yKE4oVixaLFcpKSk6cShudWxsLHtzcmNTdGF0OmFlLGRlc3RTdGF0OnNlfSl9KX0sY2hlY2tQYXRoc1N5bmM6ZnVuY3Rpb24oVixaLFcseil7'@;
put 'Y29uc3R7c3JjU3RhdDpxLGRlc3RTdGF0OlF9PWZ1bmN0aW9uKHRlLGFlLHNlKXtsZXQgZGU7Y29uc3QgbGU9c2UuZGVyZWZlcmVuY2U/Rz0+UC5zdGF0U3luYyhHLHtiaWdpbnQ6ITB9KTpHPT5QLmxzdGF0U3luYyhHLHtiaWdpbnQ6ITB9KSxjZT1sZSh0ZSk7dHJ5e2RlPWxlKGFlKX1jYXRj'@;
put 'aChHKXtpZigiRU5PRU5UIj09PUcuY29kZSlyZXR1cm57c3JjU3RhdDpjZSxkZXN0U3RhdDpudWxsfTt0aHJvdyBHfXJldHVybntzcmNTdGF0OmNlLGRlc3RTdGF0OmRlfX0oVixaLHopO2lmKFEpe2lmKGsocSxRKSl7Y29uc3QgdGU9VS5iYXNlbmFtZShWKSxhZT1VLmJhc2VuYW1lKFopO2lm'@;
put 'KCJtb3ZlIj09PVcmJnRlIT09YWUmJnRlLnRvTG93ZXJDYXNlKCk9PT1hZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnEsZGVzdFN0YXQ6USxpc0NoYW5naW5nQ2FzZTohMH07dGhyb3cgbmV3IEVycm9yKCJTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIG11c3Qgbm90IGJlIHRoZSBzYW1l'@;
put 'LiIpfWlmKHEuaXNEaXJlY3RvcnkoKSYmIVEuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgbm9uLWRpcmVjdG9yeSAnJHtafScgd2l0aCBkaXJlY3RvcnkgJyR7Vn0nLmApO2lmKCFxLmlzRGlyZWN0b3J5KCkmJlEuaXNEaXJlY3RvcnkoKSl0aHJvdyBu'@;
put 'ZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1p9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7Vn0nLmApfWlmKHEuaXNEaXJlY3RvcnkoKSYmQihWLFopKXRocm93IG5ldyBFcnJvcihOKFYsWixXKSk7cmV0dXJue3NyY1N0YXQ6cSxkZXN0U3RhdDpRfX0sY2hlY2tQYXJl'@;
put 'bnRQYXRoczpmdW5jdGlvbiBWKFosVyx6LHEsUSl7Y29uc3QgdGU9VS5yZXNvbHZlKFUuZGlybmFtZShaKSksYWU9VS5yZXNvbHZlKFUuZGlybmFtZSh6KSk7aWYoYWU9PT10ZXx8YWU9PT1VLnBhcnNlKGFlKS5yb290KXJldHVybiBRKCk7UC5zdGF0KGFlLHtiaWdpbnQ6ITB9LChzZSxkZSk9'@;
put 'PnNlPyJFTk9FTlQiPT09c2UuY29kZT9RKCk6UShzZSk6ayhXLGRlKT9RKG5ldyBFcnJvcihOKFoseixxKSkpOlYoWixXLGFlLHEsUSkpfSxjaGVja1BhcmVudFBhdGhzU3luYzpmdW5jdGlvbiBWKFosVyx6LHEpe2NvbnN0IFE9VS5yZXNvbHZlKFUuZGlybmFtZShaKSksdGU9VS5yZXNvbHZl'@;
put 'KFUuZGlybmFtZSh6KSk7aWYodGU9PT1RfHx0ZT09PVUucGFyc2UodGUpLnJvb3QpcmV0dXJuO2xldCBhZTt0cnl7YWU9UC5zdGF0U3luYyh0ZSx7YmlnaW50OiEwfSl9Y2F0Y2goc2Upe2lmKCJFTk9FTlQiPT09c2UuY29kZSlyZXR1cm47dGhyb3cgc2V9aWYoayhXLGFlKSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoTihaLHoscSkpO3JldHVybiBWKFosVyx0ZSxxKX0saXNTcmNTdWJkaXI6QixhcmVJZGVudGljYWw6a319LDMxODoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg3Nyk7dy5leHBvcnRzPXt1dGltZXNNaWxsaXM6ZnVuY3Rpb24oVSxJLEUsayl7UC5vcGVuKFUsInIrIiwo'@;
put 'QixOKT0+e2lmKEIpcmV0dXJuIGsoQik7UC5mdXRpbWVzKE4sSSxFLFY9PntQLmNsb3NlKE4sWj0+e2smJmsoVnx8Wil9KX0pfSl9LHV0aW1lc01pbGxpc1N5bmM6ZnVuY3Rpb24oVSxJLEUpe2NvbnN0IGs9UC5vcGVuU3luYyhVLCJyKyIpO3JldHVybiBQLmZ1dGltZXNTeW5jKGssSSxFKSxQ'@;
put 'LmNsb3NlU3luYyhrKX19fSw3MzM0Oih3LEEsRCk9Pnt2YXIgUD1EKDQxNTUpO3cuZXhwb3J0cz1aLFoucmVhbHBhdGg9WixaLnN5bmM9VyxaLnJlYWxwYXRoU3luYz1XLFoubW9ua2V5cGF0Y2g9ZnVuY3Rpb24oKXtVLnJlYWxwYXRoPVosVS5yZWFscGF0aFN5bmM9V30sWi51bm1vbmtleXBh'@;
put 'dGNoPWZ1bmN0aW9uKCl7VS5yZWFscGF0aD1JLFUucmVhbHBhdGhTeW5jPUV9O3ZhciBVPUQoMjUzNSksST1VLnJlYWxwYXRoLEU9VS5yZWFscGF0aFN5bmMsQj0vXnZbMC01XVwuLy50ZXN0KFAudmVyc2lvbiksTj1EKDcwNTkpO2Z1bmN0aW9uIFYoeil7cmV0dXJuIHomJiJyZWFscGF0aCI9'@;
put 'PT16LnN5c2NhbGwmJigiRUxPT1AiPT09ei5jb2RlfHwiRU5PTUVNIj09PXouY29kZXx8IkVOQU1FVE9PTE9ORyI9PT16LmNvZGUpfWZ1bmN0aW9uIFooeixxLFEpe2lmKEIpcmV0dXJuIEkoeixxLFEpOyJmdW5jdGlvbiI9PXR5cGVvZiBxJiYoUT1xLHE9bnVsbCksSSh6LHEsZnVuY3Rpb24o'@;
put 'dGUsYWUpe1YodGUpP04ucmVhbHBhdGgoeixxLFEpOlEodGUsYWUpfSl9ZnVuY3Rpb24gVyh6LHEpe2lmKEIpcmV0dXJuIEUoeixxKTt0cnl7cmV0dXJuIEUoeixxKX1jYXRjaChRKXtpZihWKFEpKXJldHVybiBOLnJlYWxwYXRoU3luYyh6LHEpO3Rocm93IFF9fX0sNzA1OToodyxBLEQpPT57'@;
put 'dmFyIFA9RCg0MTU1KSxVPUQoNTEwOCksST1EKDI1MjApLEU9IndpbjMyIj09PVAucGxhdGZvcm0saz1EKDI1MzUpLEI9UC5lbnYuTk9ERV9ERUJVRyYmL2ZzLy50ZXN0KFAuZW52Lk5PREVfREVCVUcpO2lmKEUpdmFyIFY9LyguKj8pKD86W1wvXFxdK3wkKS9nO2Vsc2UgVj0vKC4qPykoPzpb'@;
put 'XC9dK3wkKS9nO2lmKEUpdmFyIFo9L14oPzpbYS16QS1aXTp8W1xcXC9dezJ9W15cXFwvXStbXFxcL11bXlxcXC9dKyk/W1xcXC9dKi87ZWxzZSBaPS9eW1wvXSovO0EucmVhbHBhdGhTeW5jPWZ1bmN0aW9uKFcseil7aWYoVz1JLnJlc29sdmUoVykseiYmT2JqZWN0LnByb3RvdHlwZS5oYXNP'@;
put 'd25Qcm9wZXJ0eS5jYWxsKHosVykpcmV0dXJuIHpbV107dmFyIHEsUSx0ZSxhZSxzZT1XLGRlPXt9LGxlPXt9O2Z1bmN0aW9uIGNlKCl7dmFyIGc9Wi5leGVjKFcpO3E9Z1swXS5sZW5ndGgsUT1nWzBdLHRlPWdbMF0sYWU9IiIsRSYmIWxlW3RlXSYmKGsubHN0YXRTeW5jKHRlKSxsZVt0ZV09'@;
put 'ITApfWZvcihjZSgpO3E8Vy5sZW5ndGg7KXtWLmxhc3RJbmRleD1xO3ZhciBHPVYuZXhlYyhXKTtpZihhZT1RLFErPUdbMF0scT1WLmxhc3RJbmRleCwhKGxlW3RlPWFlK0dbMV1dfHx6JiZ6W3RlXT09PXRlKSl7dmFyIHk7aWYoeiYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKHosdGUpKXk9elt0ZV07ZWxzZXt2YXIgTD1rLmxzdGF0U3luYyh0ZSk7aWYoIUwuaXNTeW1ib2xpY0xpbmsoKSl7bGVbdGVdPSEwLHomJih6W3RlXT10ZSk7Y29udGludWV9dmFyIEg9bnVsbDtpZighRSl7dmFyIGo9TC5kZXYudG9TdHJpbmcoMzIpKyI6IitMLmluby50b1N0cmluZygz'@;
put 'Mik7ZGUuaGFzT3duUHJvcGVydHkoaikmJihIPWRlW2pdKX1udWxsPT09SCYmKGsuc3RhdFN5bmModGUpLEg9ay5yZWFkbGlua1N5bmModGUpKSx5PUkucmVzb2x2ZShhZSxIKSx6JiYoelt0ZV09eSksRXx8KGRlW2pdPUgpfVc9SS5yZXNvbHZlKHksVy5zbGljZShxKSksY2UoKX19cmV0dXJu'@;
put 'IHomJih6W3NlXT1XKSxXfSxBLnJlYWxwYXRoPWZ1bmN0aW9uKFcseixxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSYmKHE9ZnVuY3Rpb24gTihXKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgVz9XOmZ1bmN0aW9uKCl7dmFyIHo7aWYoQil7dmFyIHE9bmV3IEVycm9yO3o9ZnVuY3Rpb24o'@;
put 'dGUpe3RlJiYocS5tZXNzYWdlPXRlLm1lc3NhZ2UsUSh0ZT1xKSl9fWVsc2Ugej1RO3JldHVybiB6O2Z1bmN0aW9uIFEodGUpe2lmKHRlKXtpZihQLnRocm93RGVwcmVjYXRpb24pdGhyb3cgdGU7aWYoIVAubm9EZXByZWNhdGlvbil7dmFyIGFlPSJmczogbWlzc2luZyBjYWxsYmFjayAiKyh0'@;
put 'ZS5zdGFja3x8dGUubWVzc2FnZSk7UC50cmFjZURlcHJlY2F0aW9uP1UudHJhY2UoYWUpOlUuZXJyb3IoYWUpfX19fSgpfSh6KSx6PW51bGwpLFc9SS5yZXNvbHZlKFcpLHomJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh6LFcpKXJldHVybiBQLm5leHRUaWNrKHEuYmlu'@;
put 'ZChudWxsLG51bGwseltXXSkpO3ZhciBRLHRlLGFlLHNlLGRlPVcsbGU9e30sY2U9e307ZnVuY3Rpb24gRygpe3ZhciBnPVouZXhlYyhXKTtRPWdbMF0ubGVuZ3RoLHRlPWdbMF0sYWU9Z1swXSxzZT0iIixFJiYhY2VbYWVdP2subHN0YXQoYWUsZnVuY3Rpb24oUyl7aWYoUylyZXR1cm4gcShT'@;
put 'KTtjZVthZV09ITAseSgpfSk6UC5uZXh0VGljayh5KX1mdW5jdGlvbiB5KCl7aWYoUT49Vy5sZW5ndGgpcmV0dXJuIHomJih6W2RlXT1XKSxxKG51bGwsVyk7Vi5sYXN0SW5kZXg9UTt2YXIgZz1WLmV4ZWMoVyk7cmV0dXJuIHNlPXRlLHRlKz1nWzBdLFE9Vi5sYXN0SW5kZXgsY2VbYWU9c2Ur'@;
put 'Z1sxXV18fHomJnpbYWVdPT09YWU/UC5uZXh0VGljayh5KTp6JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeixhZSk/aih6W2FlXSk6ay5sc3RhdChhZSxMKX1mdW5jdGlvbiBMKGcsUyl7aWYoZylyZXR1cm4gcShnKTtpZighUy5pc1N5bWJvbGljTGluaygpKXJldHVy'@;
put 'biBjZVthZV09ITAseiYmKHpbYWVdPWFlKSxQLm5leHRUaWNrKHkpO2lmKCFFKXt2YXIgeD1TLmRldi50b1N0cmluZygzMikrIjoiK1MuaW5vLnRvU3RyaW5nKDMyKTtpZihsZS5oYXNPd25Qcm9wZXJ0eSh4KSlyZXR1cm4gSChudWxsLGxlW3hdLGFlKX1rLnN0YXQoYWUsZnVuY3Rpb24oXyl7'@;
put 'aWYoXylyZXR1cm4gcShfKTtrLnJlYWRsaW5rKGFlLGZ1bmN0aW9uKHAsQyl7RXx8KGxlW3hdPUMpLEgocCxDKX0pfSl9ZnVuY3Rpb24gSChnLFMseCl7aWYoZylyZXR1cm4gcShnKTt2YXIgXz1JLnJlc29sdmUoc2UsUyk7eiYmKHpbeF09XyksaihfKX1mdW5jdGlvbiBqKGcpe1c9SS5yZXNv'@;
put 'bHZlKGcsVy5zbGljZShRKSksRygpfUcoKX19LDc2NDg6dz0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQT1BcnJheS5wcm90b3R5cGUuc2xpY2UsRD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3cuZXhwb3J0cz1mdW5jdGlvbihQKXt2YXIgVT10aGlzO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBVfHwi'@;
put 'W29iamVjdCBGdW5jdGlvbl0iIT09RC5jYWxsKFUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgIitVKTtmb3IodmFyIEksRT1BLmNhbGwoYXJndW1lbnRzLDEpLGs9TWF0aC5tYXgoMCxVLmxlbmd0aC1FLmxlbmd0'@;
put 'aCksQj1bXSxOPTA7TjxrO04rKylCLnB1c2goIiQiK04pO2lmKEk9RnVuY3Rpb24oImJpbmRlciIsInJldHVybiBmdW5jdGlvbiAoIitCLmpvaW4oIiwiKSsiKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0iKShmdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBJ'@;
put 'KXt2YXIgWj1VLmFwcGx5KHRoaXMsRS5jb25jYXQoQS5jYWxsKGFyZ3VtZW50cykpKTtyZXR1cm4gT2JqZWN0KFopPT09Wj9aOnRoaXN9cmV0dXJuIFUuYXBwbHkoUCxFLmNvbmNhdChBLmNhbGwoYXJndW1lbnRzKSkpfSksVS5wcm90b3R5cGUpe3ZhciBWPWZ1bmN0aW9uKCl7fTtWLnByb3Rv'@;
put 'dHlwZT1VLnByb3RvdHlwZSxJLnByb3RvdHlwZT1uZXcgVixWLnByb3RvdHlwZT1udWxsfXJldHVybiBJfX0sODYxMjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNzY0OCk7dy5leHBvcnRzPUZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kfHxQfSwyMTA6KHcsQSxEKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgUCxVPVN5bnRheEVycm9yLEk9RnVuY3Rpb24sRT1UeXBlRXJyb3Isaz1mdW5jdGlvbih4KXt0cnl7cmV0dXJuIEkoJyJ1c2Ugc3RyaWN0IjsgcmV0dXJuICgnK3grIikuY29uc3RydWN0b3I7IikoKX1jYXRjaHt9fSxCPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7'@;
put 'aWYoQil0cnl7Qih7fSwiIil9Y2F0Y2h7Qj1udWxsfXZhciBOPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEV9LFY9Qj9mdW5jdGlvbigpe3RyeXtyZXR1cm4gTn1jYXRjaHt0cnl7cmV0dXJuIEIoYXJndW1lbnRzLCJjYWxsZWUiKS5nZXR9Y2F0Y2h7cmV0dXJuIE59fX0oKTpOLFo9RCgxNDA1KSgp'@;
put 'LFc9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbih4KXtyZXR1cm4geC5fX3Byb3RvX199LHo9e30scT10eXBlb2YgVWludDhBcnJheT4idSI/UDpXKFVpbnQ4QXJyYXkpLFE9eyIlQWdncmVnYXRlRXJyb3IlIjp0eXBlb2YgQWdncmVnYXRlRXJyb3I+InUiP1A6QWdncmVnYXRlRXJy'@;
put 'b3IsIiVBcnJheSUiOkFycmF5LCIlQXJyYXlCdWZmZXIlIjp0eXBlb2YgQXJyYXlCdWZmZXI+InUiP1A6QXJyYXlCdWZmZXIsIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI6Wj9XKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSk6UCwiJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUiOlAs'@;
put 'IiVBc3luY0Z1bmN0aW9uJSI6eiwiJUFzeW5jR2VuZXJhdG9yJSI6eiwiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIjp6LCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiOnosIiVBdG9taWNzJSI6dHlwZW9mIEF0b21pY3M+InUiP1A6QXRvbWljcywiJUJpZ0ludCUiOnR5cGVvZiBCaWdJbnQ+'@;
put 'InUiP1A6QmlnSW50LCIlQmlnSW50NjRBcnJheSUiOnR5cGVvZiBCaWdJbnQ2NEFycmF5PiJ1Ij9QOkJpZ0ludDY0QXJyYXksIiVCaWdVaW50NjRBcnJheSUiOnR5cGVvZiBCaWdVaW50NjRBcnJheT4idSI/UDpCaWdVaW50NjRBcnJheSwiJUJvb2xlYW4lIjpCb29sZWFuLCIlRGF0YVZpZXcl'@;
put 'Ijp0eXBlb2YgRGF0YVZpZXc+InUiP1A6RGF0YVZpZXcsIiVEYXRlJSI6RGF0ZSwiJWRlY29kZVVSSSUiOmRlY29kZVVSSSwiJWRlY29kZVVSSUNvbXBvbmVudCUiOmRlY29kZVVSSUNvbXBvbmVudCwiJWVuY29kZVVSSSUiOmVuY29kZVVSSSwiJWVuY29kZVVSSUNvbXBvbmVudCUiOmVuY29k'@;
put 'ZVVSSUNvbXBvbmVudCwiJUVycm9yJSI6RXJyb3IsIiVldmFsJSI6ZXZhbCwiJUV2YWxFcnJvciUiOkV2YWxFcnJvciwiJUZsb2F0MzJBcnJheSUiOnR5cGVvZiBGbG9hdDMyQXJyYXk+InUiP1A6RmxvYXQzMkFycmF5LCIlRmxvYXQ2NEFycmF5JSI6dHlwZW9mIEZsb2F0NjRBcnJheT4idSI/'@;
put 'UDpGbG9hdDY0QXJyYXksIiVGaW5hbGl6YXRpb25SZWdpc3RyeSUiOnR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeT4idSI/UDpGaW5hbGl6YXRpb25SZWdpc3RyeSwiJUZ1bmN0aW9uJSI6SSwiJUdlbmVyYXRvckZ1bmN0aW9uJSI6eiwiJUludDhBcnJheSUiOnR5cGVvZiBJbnQ4QXJyYXk+'@;
put 'InUiP1A6SW50OEFycmF5LCIlSW50MTZBcnJheSUiOnR5cGVvZiBJbnQxNkFycmF5PiJ1Ij9QOkludDE2QXJyYXksIiVJbnQzMkFycmF5JSI6dHlwZW9mIEludDMyQXJyYXk+InUiP1A6SW50MzJBcnJheSwiJWlzRmluaXRlJSI6aXNGaW5pdGUsIiVpc05hTiUiOmlzTmFOLCIlSXRlcmF0b3JQ'@;
put 'cm90b3R5cGUlIjpaP1coVyhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTpQLCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOlAsIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij9QOk1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcDwidSImJlo/VygobmV3IE1hcClb'@;
put 'U3ltYm9sLml0ZXJhdG9yXSgpKTpQLCIlTWF0aCUiOk1hdGgsIiVOdW1iZXIlIjpOdW1iZXIsIiVPYmplY3QlIjpPYmplY3QsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP1A6UHJvbWlzZSwiJVBy'@;
put 'b3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij9QOlByb3h5LCIlUmFuZ2VFcnJvciUiOlJhbmdlRXJyb3IsIiVSZWZlcmVuY2VFcnJvciUiOlJlZmVyZW5jZUVycm9yLCIlUmVmbGVjdCUiOnR5cGVvZiBSZWZsZWN0PiJ1Ij9QOlJlZmxlY3QsIiVSZWdFeHAlIjpSZWdFeHAsIiVTZXQlIjp0eXBlb2Yg'@;
put 'U2V0PiJ1Ij9QOlNldCwiJVNldEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIFNldDwidSImJlo/VygobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKTpQLCIlU2hhcmVkQXJyYXlCdWZmZXIlIjp0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI+InUiP1A6U2hhcmVkQXJyYXlCdWZmZXIsIiVT'@;
put 'dHJpbmclIjpTdHJpbmcsIiVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUiOlo/VygiIltTeW1ib2wuaXRlcmF0b3JdKCkpOlAsIiVTeW1ib2wlIjpaP1N5bWJvbDpQLCIlU3ludGF4RXJyb3IlIjpVLCIlVGhyb3dUeXBlRXJyb3IlIjpWLCIlVHlwZWRBcnJheSUiOnEsIiVUeXBlRXJyb3IlIjpF'@;
put 'LCIlVWludDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij9QOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/UDpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij9QOlVp'@;
put 'bnQxNkFycmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP1A6VWludDMyQXJyYXksIiVVUklFcnJvciUiOlVSSUVycm9yLCIlV2Vha01hcCUiOnR5cGVvZiBXZWFrTWFwPiJ1Ij9QOldlYWtNYXAsIiVXZWFrUmVmJSI6dHlwZW9mIFdlYWtSZWY+InUiP1A6V2Vha1Jl'@;
put 'ZiwiJVdlYWtTZXQlIjp0eXBlb2YgV2Vha1NldD4idSI/UDpXZWFrU2V0fTt0cnl7bnVsbC5lcnJvcn1jYXRjaCh4KXt2YXIgdGU9VyhXKHgpKTtRWyIlRXJyb3IucHJvdG90eXBlJSJdPXRlfXZhciBhZT1mdW5jdGlvbiB4KF8pe3ZhciBwO2lmKCIlQXN5bmNGdW5jdGlvbiUiPT09XylwPWso'@;
put 'ImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT1fKXA9aygiZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lIj09PV8pcD1rKCJhc3luYyBmdW5jdGlvbiogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNH'@;
put 'ZW5lcmF0b3IlIj09PV8pe3ZhciBDPXgoIiVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSIpO0MmJihwPUMucHJvdG90eXBlKX1lbHNlIGlmKCIlQXN5bmNJdGVyYXRvclByb3RvdHlwZSUiPT09Xyl7dmFyIEs9eCgiJUFzeW5jR2VuZXJhdG9yJSIpO0smJihwPVcoSy5wcm90b3R5cGUpKX1yZXR1'@;
put 'cm4gUVtfXT1wLHB9LHNlPXsiJUFycmF5QnVmZmVyUHJvdG90eXBlJSI6WyJBcnJheUJ1ZmZlciIsInByb3RvdHlwZSJdLCIlQXJyYXlQcm90b3R5cGUlIjpbIkFycmF5IiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvX2VudHJpZXMlIjpbIkFycmF5IiwicHJvdG90eXBlIiwiZW50cmllcyJd'@;
put 'LCIlQXJyYXlQcm90b19mb3JFYWNoJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImZvckVhY2giXSwiJUFycmF5UHJvdG9fa2V5cyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJrZXlzIl0sIiVBcnJheVByb3RvX3ZhbHVlcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJ2YWx1ZXMiXSwiJUFzeW5j'@;
put 'RnVuY3Rpb25Qcm90b3R5cGUlIjpbIkFzeW5jRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUiOlsiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiIsInBy'@;
put 'b3RvdHlwZSIsInByb3RvdHlwZSJdLCIlQm9vbGVhblByb3RvdHlwZSUiOlsiQm9vbGVhbiIsInByb3RvdHlwZSJdLCIlRGF0YVZpZXdQcm90b3R5cGUlIjpbIkRhdGFWaWV3IiwicHJvdG90eXBlIl0sIiVEYXRlUHJvdG90eXBlJSI6WyJEYXRlIiwicHJvdG90eXBlIl0sIiVFcnJvclByb3Rv'@;
put 'dHlwZSUiOlsiRXJyb3IiLCJwcm90b3R5cGUiXSwiJUV2YWxFcnJvclByb3RvdHlwZSUiOlsiRXZhbEVycm9yIiwicHJvdG90eXBlIl0sIiVGbG9hdDMyQXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0MzJBcnJheSIsInByb3RvdHlwZSJdLCIlRmxvYXQ2NEFycmF5UHJvdG90eXBlJSI6WyJGbG9h'@;
put 'dDY0QXJyYXkiLCJwcm90b3R5cGUiXSwiJUZ1bmN0aW9uUHJvdG90eXBlJSI6WyJGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInByb3RvdHlwZSJdLCIlR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJHZW5lcmF0b3JGdW5jdGlvbiIsInBy'@;
put 'b3RvdHlwZSIsInByb3RvdHlwZSJdLCIlSW50OEFycmF5UHJvdG90eXBlJSI6WyJJbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDE2QXJyYXlQcm90b3R5cGUlIjpbIkludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwiJUludDMyQXJyYXlQcm90b3R5cGUlIjpbIkludDMyQXJyYXkiLCJwcm90'@;
put 'b3R5cGUiXSwiJUpTT05QYXJzZSUiOlsiSlNPTiIsInBhcnNlIl0sIiVKU09OU3RyaW5naWZ5JSI6WyJKU09OIiwic3RyaW5naWZ5Il0sIiVNYXBQcm90b3R5cGUlIjpbIk1hcCIsInByb3RvdHlwZSJdLCIlTnVtYmVyUHJvdG90eXBlJSI6WyJOdW1iZXIiLCJwcm90b3R5cGUiXSwiJU9iamVj'@;
put 'dFByb3RvdHlwZSUiOlsiT2JqZWN0IiwicHJvdG90eXBlIl0sIiVPYmpQcm90b190b1N0cmluZyUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciXSwiJU9ialByb3RvX3ZhbHVlT2YlIjpbIk9iamVjdCIsInByb3RvdHlwZSIsInZhbHVlT2YiXSwiJVByb21pc2VQcm90b3R5cGUl'@;
put 'IjpbIlByb21pc2UiLCJwcm90b3R5cGUiXSwiJVByb21pc2VQcm90b190aGVuJSI6WyJQcm9taXNlIiwicHJvdG90eXBlIiwidGhlbiJdLCIlUHJvbWlzZV9hbGwlIjpbIlByb21pc2UiLCJhbGwiXSwiJVByb21pc2VfcmVqZWN0JSI6WyJQcm9taXNlIiwicmVqZWN0Il0sIiVQcm9taXNlX3Jl'@;
put 'c29sdmUlIjpbIlByb21pc2UiLCJyZXNvbHZlIl0sIiVSYW5nZUVycm9yUHJvdG90eXBlJSI6WyJSYW5nZUVycm9yIiwicHJvdG90eXBlIl0sIiVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUiOlsiUmVmZXJlbmNlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZ0V4cFByb3RvdHlwZSUiOlsiUmVn'@;
put 'RXhwIiwicHJvdG90eXBlIl0sIiVTZXRQcm90b3R5cGUlIjpbIlNldCIsInByb3RvdHlwZSJdLCIlU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlIjpbIlNoYXJlZEFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVTdHJpbmdQcm90b3R5cGUlIjpbIlN0cmluZyIsInByb3RvdHlwZSJdLCIl'@;
put 'U3ltYm9sUHJvdG90eXBlJSI6WyJTeW1ib2wiLCJwcm90b3R5cGUiXSwiJVN5bnRheEVycm9yUHJvdG90eXBlJSI6WyJTeW50YXhFcnJvciIsInByb3RvdHlwZSJdLCIlVHlwZWRBcnJheVByb3RvdHlwZSUiOlsiVHlwZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVHlwZUVycm9yUHJvdG90eXBl'@;
put 'JSI6WyJUeXBlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVVpbnQ4QXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4QXJyYXkiLCJwcm90b3R5cGUiXSwiJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSI6WyJVaW50OENsYW1wZWRBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDE2QXJyYXlQcm90b3R5'@;
put 'cGUlIjpbIlVpbnQxNkFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MzJBcnJheVByb3RvdHlwZSUiOlsiVWludDMyQXJyYXkiLCJwcm90b3R5cGUiXSwiJVVSSUVycm9yUHJvdG90eXBlJSI6WyJVUklFcnJvciIsInByb3RvdHlwZSJdLCIlV2Vha01hcFByb3RvdHlwZSUiOlsiV2Vha01hcCIs'@;
put 'InByb3RvdHlwZSJdLCIlV2Vha1NldFByb3RvdHlwZSUiOlsiV2Vha1NldCIsInByb3RvdHlwZSJdfSxkZT1EKDg2MTIpLGxlPUQoNzY0MiksY2U9ZGUuY2FsbChGdW5jdGlvbi5jYWxsLEFycmF5LnByb3RvdHlwZS5jb25jYXQpLEc9ZGUuY2FsbChGdW5jdGlvbi5hcHBseSxBcnJheS5wcm90'@;
put 'b3R5cGUuc3BsaWNlKSx5PWRlLmNhbGwoRnVuY3Rpb24uY2FsbCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLEw9ZGUuY2FsbChGdW5jdGlvbi5jYWxsLFN0cmluZy5wcm90b3R5cGUuc2xpY2UpLEg9ZGUuY2FsbChGdW5jdGlvbi5jYWxsLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksaj0vW14l'@;
put 'LltcXV0rfFxbKD86KC0/XGQrKD86XC5cZCspPyl8KFsiJ10pKCg/Oig/IVwyKVteXFxdfFxcLikqPylcMilcXXwoPz0oPzpcLnxcW1xdKSg/OlwufFxbXF18JSQpKS9nLGc9L1xcKFxcKT8vZyxTPWZ1bmN0aW9uKHgsXyl7dmFyIHAsQz14O2lmKGxlKHNlLEMpJiYoQz0iJSIrKHA9c2VbQ10p'@;
put 'WzBdKyIlIiksbGUoUSxDKSl7dmFyIEs9UVtDXTtpZihLPT09eiYmKEs9YWUoQykpLHZvaWQgMD09PUsmJiFfKXRocm93IG5ldyBFKCJpbnRyaW5zaWMgIit4KyIgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOnAsbmFt'@;
put 'ZTpDLHZhbHVlOkt9fXRocm93IG5ldyBVKCJpbnRyaW5zaWMgIit4KyIgZG9lcyBub3QgZXhpc3QhIil9O3cuZXhwb3J0cz1mdW5jdGlvbih4LF8pe2lmKCJzdHJpbmciIT10eXBlb2YgeHx8MD09PXgubGVuZ3RoKXRocm93IG5ldyBFKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVt'@;
put 'cHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgXyl0aHJvdyBuZXcgRSgnImFsbG93TWlzc2luZyIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtpZihudWxsPT09SCgvXiU/W14lXSolPyQvLHgpKXRocm93IG5ldyBVKCJgJWAgbWF5IG5v'@;
put 'dCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lIik7dmFyIHA9ZnVuY3Rpb24oVWUpe3ZhciBYZT1MKFVlLDAsMSksYXQ9TChVZSwtMSk7aWYoIiUiPT09WGUmJiIlIiE9PWF0KXRocm93IG5ldyBVKCJpbnZhbGlk'@;
put 'IGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09YXQmJiIlIiE9PVhlKXRocm93IG5ldyBVKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIEZlPVtdO3JldHVybiB5KFVlLGosZnVuY3Rpb24oQ2UsRGUs'@;
put 'UmUsZXQpe0ZlW0ZlLmxlbmd0aF09UmU/eShldCxnLCIkMSIpOkRlfHxDZX0pLEZlfSh4KSxDPXAubGVuZ3RoPjA/cFswXToiIixLPVMoIiUiK0MrIiUiLF8pLG5lPUsubmFtZSx1ZT1LLnZhbHVlLGhlPSExLHhlPUsuYWxpYXM7eGUmJihDPXhlWzBdLEcocCxjZShbMCwxXSx4ZSkpKTtmb3Io'@;
put 'dmFyIE9lPTEsSGU9ITA7T2U8cC5sZW5ndGg7T2UrPTEpe3ZhciBFZT1wW09lXSxMZT1MKEVlLDAsMSksTmU9TChFZSwtMSk7aWYoKCciJz09PUxlfHwiJyI9PT1MZXx8ImAiPT09TGV8fCciJz09PU5lfHwiJyI9PT1OZXx8ImAiPT09TmUpJiZMZSE9PU5lKXRocm93IG5ldyBVKCJwcm9wZXJ0'@;
put 'eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzIik7aWYoImNvbnN0cnVjdG9yIiE9PUVlJiZIZXx8KGhlPSEwKSxsZShRLG5lPSIlIisoQys9Ii4iK0VlKSsiJSIpKXVlPVFbbmVdO2Vsc2UgaWYobnVsbCE9dWUpe2lmKCEoRWUgaW4gdWUpKXtpZighXyl0aHJv'@;
put 'dyBuZXcgRSgiYmFzZSBpbnRyaW5zaWMgZm9yICIreCsiIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLiIpO3JldHVybn1pZihCJiZPZSsxPj1wLmxlbmd0aCl7dmFyIEtlPUIodWUsRWUpO3VlPShIZT0hIUtlKSYmImdldCJpbiBLZSYmISgib3JpZ2luYWxWYWx1'@;
put 'ZSJpbiBLZS5nZXQpP0tlLmdldDp1ZVtFZV19ZWxzZSBIZT1sZSh1ZSxFZSksdWU9dWVbRWVdO0hlJiYhaGUmJihRW25lXT11ZSl9fXJldHVybiB1ZX19LDY3NzI6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSk7ZnVuY3Rpb24gVShxLFEpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blBy'@;
put 'b3BlcnR5LmNhbGwocSxRKX1BLnNldG9wdHM9ZnVuY3Rpb24ocSxRLHRlKXtpZih0ZXx8KHRlPXt9KSx0ZS5tYXRjaEJhc2UmJi0xPT09US5pbmRleE9mKCIvIikpe2lmKHRlLm5vZ2xvYnN0YXIpdGhyb3cgbmV3IEVycm9yKCJiYXNlIG1hdGNoaW5nIHJlcXVpcmVzIGdsb2JzdGFyIik7UT0i'@;
put 'KiovIitRfXZhciBzZTtxLnNpbGVudD0hIXRlLnNpbGVudCxxLnBhdHRlcm49USxxLnN0cmljdD0hMSE9PXRlLnN0cmljdCxxLnJlYWxwYXRoPSEhdGUucmVhbHBhdGgscS5yZWFscGF0aENhY2hlPXRlLnJlYWxwYXRoQ2FjaGV8fE9iamVjdC5jcmVhdGUobnVsbCkscS5mb2xsb3c9ISF0ZS5m'@;
put 'b2xsb3cscS5kb3Q9ISF0ZS5kb3QscS5tYXJrPSEhdGUubWFyayxxLm5vZGlyPSEhdGUubm9kaXIscS5ub2RpciYmKHEubWFyaz0hMCkscS5zeW5jPSEhdGUuc3luYyxxLm5vdW5pcXVlPSEhdGUubm91bmlxdWUscS5ub251bGw9ISF0ZS5ub251bGwscS5ub3NvcnQ9ISF0ZS5ub3NvcnQscS5u'@;
put 'b2Nhc2U9ISF0ZS5ub2Nhc2UscS5zdGF0PSEhdGUuc3RhdCxxLm5vcHJvY2Vzcz0hIXRlLm5vcHJvY2VzcyxxLmFic29sdXRlPSEhdGUuYWJzb2x1dGUscS5mcz10ZS5mc3x8SSxxLm1heExlbmd0aD10ZS5tYXhMZW5ndGh8fDEvMCxxLmNhY2hlPXRlLmNhY2hlfHxPYmplY3QuY3JlYXRlKG51'@;
put 'bGwpLHEuc3RhdENhY2hlPXRlLnN0YXRDYWNoZXx8T2JqZWN0LmNyZWF0ZShudWxsKSxxLnN5bWxpbmtzPXRlLnN5bWxpbmtzfHxPYmplY3QuY3JlYXRlKG51bGwpLChzZT1xKS5pZ25vcmU9dGUuaWdub3JlfHxbXSxBcnJheS5pc0FycmF5KHNlLmlnbm9yZSl8fChzZS5pZ25vcmU9W3NlLmln'@;
put 'bm9yZV0pLHNlLmlnbm9yZS5sZW5ndGgmJihzZS5pZ25vcmU9c2UuaWdub3JlLm1hcChaKSkscS5jaGFuZ2VkQ3dkPSExO3ZhciBhZT1QLmN3ZCgpO1UodGUsImN3ZCIpPyhxLmN3ZD1FLnJlc29sdmUodGUuY3dkKSxxLmNoYW5nZWRDd2Q9cS5jd2QhPT1hZSk6cS5jd2Q9YWUscS5yb290PXRl'@;
put 'LnJvb3R8fEUucmVzb2x2ZShxLmN3ZCwiLyIpLHEucm9vdD1FLnJlc29sdmUocS5yb290KSwid2luMzIiPT09UC5wbGF0Zm9ybSYmKHEucm9vdD1xLnJvb3QucmVwbGFjZSgvXFwvZywiLyIpKSxxLmN3ZEFicz1CKHEuY3dkKT9xLmN3ZDpXKHEscS5jd2QpLCJ3aW4zMiI9PT1QLnBsYXRmb3Jt'@;
put 'JiYocS5jd2RBYnM9cS5jd2RBYnMucmVwbGFjZSgvXFwvZywiLyIpKSxxLm5vbW91bnQ9ISF0ZS5ub21vdW50LHRlLm5vbmVnYXRlPSEwLHRlLm5vY29tbWVudD0hMCx0ZS5hbGxvd1dpbmRvd3NFc2NhcGU9ITEscS5taW5pbWF0Y2g9bmV3IE4oUSx0ZSkscS5vcHRpb25zPXEubWluaW1hdGNo'@;
put 'Lm9wdGlvbnN9LEEub3duUHJvcD1VLEEubWFrZUFicz1XLEEuZmluaXNoPWZ1bmN0aW9uKHEpe2Zvcih2YXIgUT1xLm5vdW5pcXVlLHRlPVE/W106T2JqZWN0LmNyZWF0ZShudWxsKSxhZT0wLHNlPXEubWF0Y2hlcy5sZW5ndGg7YWU8c2U7YWUrKyl7dmFyIGRlPXEubWF0Y2hlc1thZV07aWYo'@;
put 'ZGUmJjAhPT1PYmplY3Qua2V5cyhkZSkubGVuZ3RoKXt2YXIgbGU9T2JqZWN0LmtleXMoZGUpO1E/dGUucHVzaC5hcHBseSh0ZSxsZSk6bGUuZm9yRWFjaChmdW5jdGlvbihHKXt0ZVtHXT0hMH0pfWVsc2UgaWYocS5ub251bGwpe3ZhciBjZT1xLm1pbmltYXRjaC5nbG9iU2V0W2FlXTtRP3Rl'@;
put 'LnB1c2goY2UpOnRlW2NlXT0hMH19aWYoUXx8KHRlPU9iamVjdC5rZXlzKHRlKSkscS5ub3NvcnR8fCh0ZT10ZS5zb3J0KFYpKSxxLm1hcmspe2ZvcihhZT0wO2FlPHRlLmxlbmd0aDthZSsrKXRlW2FlXT1xLl9tYXJrKHRlW2FlXSk7cS5ub2RpciYmKHRlPXRlLmZpbHRlcihmdW5jdGlvbihH'@;
put 'KXt2YXIgeT0hL1wvJC8udGVzdChHKSxMPXEuY2FjaGVbR118fHEuY2FjaGVbVyhxLEcpXTtyZXR1cm4geSYmTCYmKHk9IkRJUiIhPT1MJiYhQXJyYXkuaXNBcnJheShMKSkseX0pKX1xLmlnbm9yZS5sZW5ndGgmJih0ZT10ZS5maWx0ZXIoZnVuY3Rpb24oRyl7cmV0dXJuIXoocSxHKX0pKSxx'@;
put 'LmZvdW5kPXRlfSxBLm1hcms9ZnVuY3Rpb24ocSxRKXt2YXIgdGU9VyhxLFEpLGFlPXEuY2FjaGVbdGVdLHNlPVE7aWYoYWUpe3ZhciBkZT0iRElSIj09PWFlfHxBcnJheS5pc0FycmF5KGFlKSxsZT0iLyI9PT1RLnNsaWNlKC0xKTtpZihkZSYmIWxlP3NlKz0iLyI6IWRlJiZsZSYmKHNlPXNl'@;
put 'LnNsaWNlKDAsLTEpKSxzZSE9PVEpe3ZhciBjZT1XKHEsc2UpO3Euc3RhdENhY2hlW2NlXT1xLnN0YXRDYWNoZVt0ZV0scS5jYWNoZVtjZV09cS5jYWNoZVt0ZV19fXJldHVybiBzZX0sQS5pc0lnbm9yZWQ9eixBLmNoaWxkcmVuSWdub3JlZD1mdW5jdGlvbihxLFEpe3JldHVybiEhcS5pZ25v'@;
put 'cmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4hKCF0ZS5nbWF0Y2hlcnx8IXRlLmdtYXRjaGVyLm1hdGNoKFEpKX0pfTt2YXIgST1EKDM3MTApLEU9RCgyNTIwKSxrPUQoMTE3MSksQj1EKDQwOTUpLE49ay5NaW5pbWF0Y2g7ZnVuY3Rpb24gVihxLFEpe3JldHVy'@;
put 'biBxLmxvY2FsZUNvbXBhcmUoUSwiZW4iKX1mdW5jdGlvbiBaKHEpe3ZhciBRPW51bGw7aWYoIi8qKiI9PT1xLnNsaWNlKC0zKSl7dmFyIHRlPXEucmVwbGFjZSgvKFwvXCpcKikrJC8sIiIpO1E9bmV3IE4odGUse2RvdDohMH0pfXJldHVybnttYXRjaGVyOm5ldyBOKHEse2RvdDohMH0pLGdt'@;
put 'YXRjaGVyOlF9fWZ1bmN0aW9uIFcocSxRKXt2YXIgdGU9UTtyZXR1cm4gdGU9Ii8iPT09US5jaGFyQXQoMCk/RS5qb2luKHEucm9vdCxRKTpCKFEpfHwiIj09PVE/UTpxLmNoYW5nZWRDd2Q/RS5yZXNvbHZlKHEuY3dkLFEpOkUucmVzb2x2ZShRKSwid2luMzIiPT09UC5wbGF0Zm9ybSYmKHRl'@;
put 'PXRlLnJlcGxhY2UoL1xcL2csIi8iKSksdGV9ZnVuY3Rpb24geihxLFEpe3JldHVybiEhcS5pZ25vcmUubGVuZ3RoJiZxLmlnbm9yZS5zb21lKGZ1bmN0aW9uKHRlKXtyZXR1cm4gdGUubWF0Y2hlci5tYXRjaChRKXx8ISghdGUuZ21hdGNoZXJ8fCF0ZS5nbWF0Y2hlci5tYXRjaChRKSl9KX19'@;
put 'LDI4ODQ6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpO3cuZXhwb3J0cz1sZTt2YXIgST1EKDczMzQpLEU9RCgxMTcxKSxrPUQoNTcxNyksQj1EKDcxODcpLkV2ZW50RW1pdHRlcixOPUQoMjUyMCksVj1EKDkyODIpLFo9RCg0MDk1KSxXPUQoNDc1MSksej1EKDY3NzIpLHE9ei5z'@;
put 'ZXRvcHRzLFE9ei5vd25Qcm9wLHRlPUQoNzg0NCksYWU9KEQoOTUzOSksei5jaGlsZHJlbklnbm9yZWQpLHNlPXouaXNJZ25vcmVkLGRlPUQoNzc4KTtmdW5jdGlvbiBsZSh5LEwsSCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEwmJihIPUwsTD17fSksTHx8KEw9e30pLEwuc3luYyl7aWYoSCl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2IiKTtyZXR1cm4gVyh5LEwpfXJldHVybiBuZXcgRyh5LEwsSCl9bGUuc3luYz1XO3ZhciBjZT1sZS5HbG9iU3luYz1XLkdsb2JTeW5jO2Z1bmN0aW9uIEcoeSxMLEgpe2lmKCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBMJiYoSD1MLEw9bnVsbCksTCYmTC5zeW5jKXtpZihIKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYiIpO3JldHVybiBuZXcgY2UoeSxMKX1pZighKHRoaXMgaW5zdGFuY2VvZiBHKSlyZXR1cm4gbmV3IEcoeSxMLEgpO3EodGhpcyx5LEwpLHRo'@;
put 'aXMuX2RpZFJlYWxQYXRoPSExO3ZhciBqPXRoaXMubWluaW1hdGNoLnNldC5sZW5ndGg7dGhpcy5tYXRjaGVzPW5ldyBBcnJheShqKSwiZnVuY3Rpb24iPT10eXBlb2YgSCYmKEg9ZGUoSCksdGhpcy5vbigiZXJyb3IiLEgpLHRoaXMub24oImVuZCIsZnVuY3Rpb24ocCl7SChudWxsLHApfSkp'@;
put 'O3ZhciBnPXRoaXM7aWYodGhpcy5fcHJvY2Vzc2luZz0wLHRoaXMuX2VtaXRRdWV1ZT1bXSx0aGlzLl9wcm9jZXNzUXVldWU9W10sdGhpcy5wYXVzZWQ9ITEsdGhpcy5ub3Byb2Nlc3MpcmV0dXJuIHRoaXM7aWYoMD09PWopcmV0dXJuIF8oKTtmb3IodmFyIFM9ITAseD0wO3g8ajt4KyspdGhp'@;
put 'cy5fcHJvY2Vzcyh0aGlzLm1pbmltYXRjaC5zZXRbeF0seCwhMSxfKTtmdW5jdGlvbiBfKCl7LS1nLl9wcm9jZXNzaW5nLGcuX3Byb2Nlc3Npbmc8PTAmJihTP1AubmV4dFRpY2soZnVuY3Rpb24oKXtnLl9maW5pc2goKX0pOmcuX2ZpbmlzaCgpKX1TPSExfWxlLmdsb2I9bGUsbGUuaGFzTWFn'@;
put 'aWM9ZnVuY3Rpb24oeSxMKXt2YXIgSD1mdW5jdGlvbihTLHgpe2lmKG51bGw9PT14fHwib2JqZWN0IiE9dHlwZW9mIHgpcmV0dXJuIFM7Zm9yKHZhciBfPU9iamVjdC5rZXlzKHgpLHA9Xy5sZW5ndGg7cC0tOylTW19bcF1dPXhbX1twXV07cmV0dXJuIFN9KHt9LEwpO0gubm9wcm9jZXNzPSEw'@;
put 'O3ZhciBqPW5ldyBHKHksSCkubWluaW1hdGNoLnNldDtpZigheSlyZXR1cm4hMTtpZihqLmxlbmd0aD4xKXJldHVybiEwO2Zvcih2YXIgZz0wO2c8alswXS5sZW5ndGg7ZysrKWlmKCJzdHJpbmciIT10eXBlb2YgalswXVtnXSlyZXR1cm4hMDtyZXR1cm4hMX0sbGUuR2xvYj1HLGsoRyxCKSxH'@;
put 'LnByb3RvdHlwZS5fZmluaXNoPWZ1bmN0aW9uKCl7aWYoVih0aGlzIGluc3RhbmNlb2YgRyksIXRoaXMuYWJvcnRlZCl7aWYodGhpcy5yZWFscGF0aCYmIXRoaXMuX2RpZFJlYWxwYXRoKXJldHVybiB0aGlzLl9yZWFscGF0aCgpO3ouZmluaXNoKHRoaXMpLHRoaXMuZW1pdCgiZW5kIix0aGlz'@;
put 'LmZvdW5kKX19LEcucHJvdG90eXBlLl9yZWFscGF0aD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRSZWFscGF0aCl7dGhpcy5fZGlkUmVhbHBhdGg9ITA7dmFyIHk9dGhpcy5tYXRjaGVzLmxlbmd0aDtpZigwPT09eSlyZXR1cm4gdGhpcy5fZmluaXNoKCk7Zm9yKHZhciBMPXRoaXMsSD0wO0g8'@;
put 'dGhpcy5tYXRjaGVzLmxlbmd0aDtIKyspdGhpcy5fcmVhbHBhdGhTZXQoSCxqKX1mdW5jdGlvbiBqKCl7MD09LS15JiZMLl9maW5pc2goKX19LEcucHJvdG90eXBlLl9yZWFscGF0aFNldD1mdW5jdGlvbih5LEwpe3ZhciBIPXRoaXMubWF0Y2hlc1t5XTtpZighSClyZXR1cm4gTCgpO3ZhciBq'@;
put 'PU9iamVjdC5rZXlzKEgpLGc9dGhpcyxTPWoubGVuZ3RoO2lmKDA9PT1TKXJldHVybiBMKCk7dmFyIHg9dGhpcy5tYXRjaGVzW3ldPU9iamVjdC5jcmVhdGUobnVsbCk7ai5mb3JFYWNoKGZ1bmN0aW9uKF8scCl7Xz1nLl9tYWtlQWJzKF8pLEkucmVhbHBhdGgoXyxnLnJlYWxwYXRoQ2FjaGUs'@;
put 'ZnVuY3Rpb24oQyxLKXtDPyJzdGF0Ij09PUMuc3lzY2FsbD94W19dPSEwOmcuZW1pdCgiZXJyb3IiLEMpOnhbS109ITAsMD09LS1TJiYoZy5tYXRjaGVzW3ldPXgsTCgpKX0pfSl9LEcucHJvdG90eXBlLl9tYXJrPWZ1bmN0aW9uKHkpe3JldHVybiB6Lm1hcmsodGhpcyx5KX0sRy5wcm90b3R5'@;
put 'cGUuX21ha2VBYnM9ZnVuY3Rpb24oeSl7cmV0dXJuIHoubWFrZUFicyh0aGlzLHkpfSxHLnByb3RvdHlwZS5hYm9ydD1mdW5jdGlvbigpe3RoaXMuYWJvcnRlZD0hMCx0aGlzLmVtaXQoImFib3J0Iil9LEcucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7dGhpcy5wYXVzZWR8fCh0aGlzLnBh'@;
put 'dXNlZD0hMCx0aGlzLmVtaXQoInBhdXNlIikpfSxHLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXtpZih0aGlzLnBhdXNlZCl7aWYodGhpcy5lbWl0KCJyZXN1bWUiKSx0aGlzLnBhdXNlZD0hMSx0aGlzLl9lbWl0UXVldWUubGVuZ3RoKXt2YXIgeT10aGlzLl9lbWl0UXVldWUuc2xpY2Uo'@;
put 'MCk7dGhpcy5fZW1pdFF1ZXVlLmxlbmd0aD0wO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7TCsrKXt2YXIgSD15W0xdO3RoaXMuX2VtaXRNYXRjaChIWzBdLEhbMV0pfX1pZih0aGlzLl9wcm9jZXNzUXVldWUubGVuZ3RoKXt2YXIgaj10aGlzLl9wcm9jZXNzUXVldWUuc2xpY2UoMCk7Zm9yKHRo'@;
put 'aXMuX3Byb2Nlc3NRdWV1ZS5sZW5ndGg9MCxMPTA7TDxqLmxlbmd0aDtMKyspe3ZhciBnPWpbTF07dGhpcy5fcHJvY2Vzc2luZy0tLHRoaXMuX3Byb2Nlc3MoZ1swXSxnWzFdLGdbMl0sZ1szXSl9fX19LEcucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKHksTCxILGope2lmKFYodGhpcyBp'@;
put 'bnN0YW5jZW9mIEcpLFYoImZ1bmN0aW9uIj09dHlwZW9mIGopLCF0aGlzLmFib3J0ZWQpaWYodGhpcy5fcHJvY2Vzc2luZysrLHRoaXMucGF1c2VkKXRoaXMuX3Byb2Nlc3NRdWV1ZS5wdXNoKFt5LEwsSCxqXSk7ZWxzZXtmb3IodmFyIGcsUz0wOyJzdHJpbmciPT10eXBlb2YgeVtTXTspUysr'@;
put 'O3N3aXRjaChTKXtjYXNlIHkubGVuZ3RoOnJldHVybiB2b2lkIHRoaXMuX3Byb2Nlc3NTaW1wbGUoeS5qb2luKCIvIiksTCxqKTtjYXNlIDA6Zz1udWxsO2JyZWFrO2RlZmF1bHQ6Zz15LnNsaWNlKDAsUykuam9pbigiLyIpfXZhciB4LF89eS5zbGljZShTKTtudWxsPT09Zz94PSIuIjooKFoo'@;
put 'Zyl8fFooeS5tYXAoZnVuY3Rpb24oQyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDP0M6IlsqXSJ9KS5qb2luKCIvIikpKSYmKGcmJlooZyl8fChnPSIvIitnKSkseD1nKTt2YXIgcD10aGlzLl9tYWtlQWJzKHgpO2lmKGFlKHRoaXMseCkpcmV0dXJuIGooKTtfWzBdPT09RS5HTE9CU1RBUj90'@;
put 'aGlzLl9wcm9jZXNzR2xvYlN0YXIoZyx4LHAsXyxMLEgsaik6dGhpcy5fcHJvY2Vzc1JlYWRkaXIoZyx4LHAsXyxMLEgsail9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24oeSxMLEgsaixnLFMseCl7dmFyIF89dGhpczt0aGlzLl9yZWFkZGlyKEgsUyxmdW5jdGlvbihw'@;
put 'LEMpe3JldHVybiBfLl9wcm9jZXNzUmVhZGRpcjIoeSxMLEgsaixnLFMsQyx4KX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXIyPWZ1bmN0aW9uKHksTCxILGosZyxTLHgsXyl7aWYoIXgpcmV0dXJuIF8oKTtmb3IodmFyIHA9alswXSxDPSEhdGhpcy5taW5pbWF0Y2gubmVnYXRlLG5l'@;
put 'PXRoaXMuZG90fHwiLiI9PT1wLl9nbG9iLmNoYXJBdCgwKSx1ZT1bXSxoZT0wO2hlPHgubGVuZ3RoO2hlKyspKCIuIiE9PShPZT14W2hlXSkuY2hhckF0KDApfHxuZSkmJihDJiYheT8hT2UubWF0Y2gocCk6T2UubWF0Y2gocCkpJiZ1ZS5wdXNoKE9lKTt2YXIgeGU9dWUubGVuZ3RoO2lmKDA9'@;
put 'PT14ZSlyZXR1cm4gXygpO2lmKDE9PT1qLmxlbmd0aCYmIXRoaXMubWFyayYmIXRoaXMuc3RhdCl7Zm9yKHRoaXMubWF0Y2hlc1tnXXx8KHRoaXMubWF0Y2hlc1tnXT1PYmplY3QuY3JlYXRlKG51bGwpKSxoZT0wO2hlPHhlO2hlKyspe3ZhciBPZT11ZVtoZV07eSYmKE9lPSIvIiE9PXk/eSsi'@;
put 'LyIrT2U6eStPZSksIi8iIT09T2UuY2hhckF0KDApfHx0aGlzLm5vbW91bnR8fChPZT1OLmpvaW4odGhpcy5yb290LE9lKSksdGhpcy5fZW1pdE1hdGNoKGcsT2UpfXJldHVybiBfKCl9Zm9yKGouc2hpZnQoKSxoZT0wO2hlPHhlO2hlKyspT2U9dWVbaGVdLHkmJihPZT0iLyIhPT15P3krIi8i'@;
put 'K09lOnkrT2UpLHRoaXMuX3Byb2Nlc3MoW09lXS5jb25jYXQoaiksZyxTLF8pO18oKX0sRy5wcm90b3R5cGUuX2VtaXRNYXRjaD1mdW5jdGlvbih5LEwpe2lmKCF0aGlzLmFib3J0ZWQmJiFzZSh0aGlzLEwpKWlmKHRoaXMucGF1c2VkKXRoaXMuX2VtaXRRdWV1ZS5wdXNoKFt5LExdKTtlbHNl'@;
put 'e3ZhciBIPVooTCk/TDp0aGlzLl9tYWtlQWJzKEwpO2lmKHRoaXMubWFyayYmKEw9dGhpcy5fbWFyayhMKSksdGhpcy5hYnNvbHV0ZSYmKEw9SCksIXRoaXMubWF0Y2hlc1t5XVtMXSl7aWYodGhpcy5ub2Rpcil7dmFyIGo9dGhpcy5jYWNoZVtIXTtpZigiRElSIj09PWp8fEFycmF5LmlzQXJy'@;
put 'YXkoaikpcmV0dXJufXRoaXMubWF0Y2hlc1t5XVtMXT0hMDt2YXIgZz10aGlzLnN0YXRDYWNoZVtIXTtnJiZ0aGlzLmVtaXQoInN0YXQiLEwsZyksdGhpcy5lbWl0KCJtYXRjaCIsTCl9fX0sRy5wcm90b3R5cGUuX3JlYWRkaXJJbkdsb2JTdGFyPWZ1bmN0aW9uKHksTCl7aWYoIXRoaXMuYWJv'@;
put 'cnRlZCl7aWYodGhpcy5mb2xsb3cpcmV0dXJuIHRoaXMuX3JlYWRkaXIoeSwhMSxMKTt2YXIgSD10aGlzLGo9dGUoImxzdGF0XDAiK3ksZnVuY3Rpb24oZyxTKXtpZihnJiYiRU5PRU5UIj09PWcuY29kZSlyZXR1cm4gTCgpO3ZhciB4PVMmJlMuaXNTeW1ib2xpY0xpbmsoKTtILnN5bWxpbmtz'@;
put 'W3ldPXgseHx8IVN8fFMuaXNEaXJlY3RvcnkoKT9ILl9yZWFkZGlyKHksITEsTCk6KEguY2FjaGVbeV09IkZJTEUiLEwoKSl9KTtqJiZILmZzLmxzdGF0KHksail9fSxHLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbih5LEwsSCl7aWYoIXRoaXMuYWJvcnRlZCYmKEg9dGUoInJlYWRkaXJc'@;
put 'MCIreSsiXDAiK0wsSCkpKXtpZihMJiYhUSh0aGlzLnN5bWxpbmtzLHkpKXJldHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3Rhcih5LEgpO2lmKFEodGhpcy5jYWNoZSx5KSl7dmFyIGo9dGhpcy5jYWNoZVt5XTtpZighanx8IkZJTEUiPT09ailyZXR1cm4gSCgpO2lmKEFycmF5LmlzQXJyYXko'@;
put 'aikpcmV0dXJuIEgobnVsbCxqKX10aGlzLmZzLnJlYWRkaXIoeSxmdW5jdGlvbihnLFMseCl7cmV0dXJuIGZ1bmN0aW9uKF8scCl7Xz9nLl9yZWFkZGlyRXJyb3IoUyxfLHgpOmcuX3JlYWRkaXJFbnRyaWVzKFMscCx4KX19KHRoaXMseSxIKSl9fSxHLnByb3RvdHlwZS5fcmVhZGRpckVudHJp'@;
put 'ZXM9ZnVuY3Rpb24oeSxMLEgpe2lmKCF0aGlzLmFib3J0ZWQpe2lmKCF0aGlzLm1hcmsmJiF0aGlzLnN0YXQpZm9yKHZhciBqPTA7ajxMLmxlbmd0aDtqKyspe3ZhciBnPUxbal07dGhpcy5jYWNoZVtnPSIvIj09PXk/eStnOnkrIi8iK2ddPSEwfXJldHVybiB0aGlzLmNhY2hlW3ldPUwsSChu'@;
put 'dWxsLEwpfX0sRy5wcm90b3R5cGUuX3JlYWRkaXJFcnJvcj1mdW5jdGlvbih5LEwsSCl7aWYoIXRoaXMuYWJvcnRlZCl7c3dpdGNoKEwuY29kZSl7Y2FzZSJFTk9UU1VQIjpjYXNlIkVOT1RESVIiOnZhciBqPXRoaXMuX21ha2VBYnMoeSk7aWYodGhpcy5jYWNoZVtqXT0iRklMRSIsaj09PXRo'@;
put 'aXMuY3dkQWJzKXt2YXIgZz1uZXcgRXJyb3IoTC5jb2RlKyIgaW52YWxpZCBjd2QgIit0aGlzLmN3ZCk7Zy5wYXRoPXRoaXMuY3dkLGcuY29kZT1MLmNvZGUsdGhpcy5lbWl0KCJlcnJvciIsZyksdGhpcy5hYm9ydCgpfWJyZWFrO2Nhc2UiRU5PRU5UIjpjYXNlIkVMT09QIjpjYXNlIkVOQU1F'@;
put 'VE9PTE9ORyI6Y2FzZSJVTktOT1dOIjp0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoeSldPSExO2JyZWFrO2RlZmF1bHQ6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKHkpXT0hMSx0aGlzLnN0cmljdCYmKHRoaXMuZW1pdCgiZXJyb3IiLEwpLHRoaXMuYWJvcnQoKSksdGhpcy5zaWxlbnR8fFUu'@;
put 'ZXJyb3IoImdsb2IgZXJyb3IiLEwpfXJldHVybiBIKCl9fSxHLnByb3RvdHlwZS5fcHJvY2Vzc0dsb2JTdGFyPWZ1bmN0aW9uKHksTCxILGosZyxTLHgpe3ZhciBfPXRoaXM7dGhpcy5fcmVhZGRpcihILFMsZnVuY3Rpb24ocCxDKXtfLl9wcm9jZXNzR2xvYlN0YXIyKHksTCxILGosZyxTLEMs'@;
put 'eCl9KX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NHbG9iU3RhcjI9ZnVuY3Rpb24oeSxMLEgsaixnLFMseCxfKXtpZigheClyZXR1cm4gXygpO3ZhciBwPWouc2xpY2UoMSksQz15P1t5XTpbXSxLPUMuY29uY2F0KHApO3RoaXMuX3Byb2Nlc3MoSyxnLCExLF8pO3ZhciB1ZT14Lmxlbmd0aDtpZih0'@;
put 'aGlzLnN5bWxpbmtzW0hdJiZTKXJldHVybiBfKCk7Zm9yKHZhciBoZT0wO2hlPHVlO2hlKyspaWYoIi4iIT09eFtoZV0uY2hhckF0KDApfHx0aGlzLmRvdCl7dmFyIHhlPUMuY29uY2F0KHhbaGVdLHApO3RoaXMuX3Byb2Nlc3MoeGUsZywhMCxfKTt2YXIgT2U9Qy5jb25jYXQoeFtoZV0saik7'@;
put 'dGhpcy5fcHJvY2VzcyhPZSxnLCEwLF8pfV8oKX0sRy5wcm90b3R5cGUuX3Byb2Nlc3NTaW1wbGU9ZnVuY3Rpb24oeSxMLEgpe3ZhciBqPXRoaXM7dGhpcy5fc3RhdCh5LGZ1bmN0aW9uKGcsUyl7ai5fcHJvY2Vzc1NpbXBsZTIoeSxMLGcsUyxIKX0pfSxHLnByb3RvdHlwZS5fcHJvY2Vzc1Np'@;
put 'bXBsZTI9ZnVuY3Rpb24oeSxMLEgsaixnKXtpZih0aGlzLm1hdGNoZXNbTF18fCh0aGlzLm1hdGNoZXNbTF09T2JqZWN0LmNyZWF0ZShudWxsKSksIWopcmV0dXJuIGcoKTtpZih5JiZaKHkpJiYhdGhpcy5ub21vdW50KXt2YXIgUz0vW1wvXFxdJC8udGVzdCh5KTsiLyI9PT15LmNoYXJBdCgw'@;
put 'KT95PU4uam9pbih0aGlzLnJvb3QseSk6KHk9Ti5yZXNvbHZlKHRoaXMucm9vdCx5KSxTJiYoeSs9Ii8iKSl9IndpbjMyIj09PVAucGxhdGZvcm0mJih5PXkucmVwbGFjZSgvXFwvZywiLyIpKSx0aGlzLl9lbWl0TWF0Y2goTCx5KSxnKCl9LEcucHJvdG90eXBlLl9zdGF0PWZ1bmN0aW9uKHks'@;
put 'TCl7dmFyIEg9dGhpcy5fbWFrZUFicyh5KSxqPSIvIj09PXkuc2xpY2UoLTEpO2lmKHkubGVuZ3RoPnRoaXMubWF4TGVuZ3RoKXJldHVybiBMKCk7aWYoIXRoaXMuc3RhdCYmUSh0aGlzLmNhY2hlLEgpKXt2YXIgZz10aGlzLmNhY2hlW0hdO2lmKEFycmF5LmlzQXJyYXkoZykmJihnPSJESVIi'@;
put 'KSwhanx8IkRJUiI9PT1nKXJldHVybiBMKG51bGwsZyk7aWYoaiYmIkZJTEUiPT09ZylyZXR1cm4gTCgpfXZhciBTPXRoaXMuc3RhdENhY2hlW0hdO2lmKHZvaWQgMCE9PVMpe2lmKCExPT09UylyZXR1cm4gTChudWxsLFMpO3ZhciB4PVMuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklMRSI7cmV0'@;
put 'dXJuIGomJiJGSUxFIj09PXg/TCgpOkwobnVsbCx4LFMpfXZhciBfPXRoaXMscD10ZSgic3RhdFwwIitILGZ1bmN0aW9uKEMsSyl7aWYoSyYmSy5pc1N5bWJvbGljTGluaygpKXJldHVybiBfLmZzLnN0YXQoSCxmdW5jdGlvbihuZSx1ZSl7bmU/Xy5fc3RhdDIoeSxILG51bGwsSyxMKTpfLl9z'@;
put 'dGF0Mih5LEgsbmUsdWUsTCl9KTtfLl9zdGF0Mih5LEgsQyxLLEwpfSk7cCYmXy5mcy5sc3RhdChILHApfSxHLnByb3RvdHlwZS5fc3RhdDI9ZnVuY3Rpb24oeSxMLEgsaixnKXtpZihIJiYoIkVOT0VOVCI9PT1ILmNvZGV8fCJFTk9URElSIj09PUguY29kZSkpcmV0dXJuIHRoaXMuc3RhdENh'@;
put 'Y2hlW0xdPSExLGcoKTt2YXIgUz0iLyI9PT15LnNsaWNlKC0xKTtpZih0aGlzLnN0YXRDYWNoZVtMXT1qLCIvIj09PUwuc2xpY2UoLTEpJiZqJiYhai5pc0RpcmVjdG9yeSgpKXJldHVybiBnKG51bGwsITEsaik7dmFyIHg9ITA7cmV0dXJuIGomJih4PWouaXNEaXJlY3RvcnkoKT8iRElSIjoi'@;
put 'RklMRSIpLHRoaXMuY2FjaGVbTF09dGhpcy5jYWNoZVtMXXx8eCxTJiYiRklMRSI9PT14P2coKTpnKG51bGwseCxqKX19LDQ3NTE6KHcsQSxEKT0+e3ZhciBQPUQoNTEwOCksVT1EKDQxNTUpO3cuZXhwb3J0cz1RLFEuR2xvYlN5bmM9dGU7dmFyIEk9RCg3MzM0KSxFPUQoMTE3MSksaz0oRCgy'@;
put 'ODg0KSxEKDk1MzkpLEQoMjUyMCkpLEI9RCg5MjgyKSxOPUQoNDA5NSksVj1EKDY3NzIpLFo9Vi5zZXRvcHRzLFc9Vi5vd25Qcm9wLHo9Vi5jaGlsZHJlbklnbm9yZWQscT1WLmlzSWdub3JlZDtmdW5jdGlvbiBRKGFlLHNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygc2V8fDM9PT1hcmd1bWVu'@;
put 'dHMubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJyb3IoImNhbGxiYWNrIHByb3ZpZGVkIHRvIHN5bmMgZ2xvYlxuU2VlOiBodHRwczovL2dpdGh1Yi5jb20vaXNhYWNzL25vZGUtZ2xvYi9pc3N1ZXMvMTY3Iik7cmV0dXJuIG5ldyB0ZShhZSxzZSkuZm91bmR9ZnVuY3Rpb24gdGUoYWUsc2Upe2lm'@;
put 'KCFhZSl0aHJvdyBuZXcgRXJyb3IoIm11c3QgcHJvdmlkZSBwYXR0ZXJuIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwzPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJjYWxsYmFjayBwcm92aWRlZCB0byBzeW5jIGdsb2JcblNlZTogaHR0cHM6Ly9naXRodWIu'@;
put 'Y29tL2lzYWFjcy9ub2RlLWdsb2IvaXNzdWVzLzE2NyIpO2lmKCEodGhpcyBpbnN0YW5jZW9mIHRlKSlyZXR1cm4gbmV3IHRlKGFlLHNlKTtpZihaKHRoaXMsYWUsc2UpLHRoaXMubm9wcm9jZXNzKXJldHVybiB0aGlzO3ZhciBkZT10aGlzLm1pbmltYXRjaC5zZXQubGVuZ3RoO3RoaXMubWF0'@;
put 'Y2hlcz1uZXcgQXJyYXkoZGUpO2Zvcih2YXIgbGU9MDtsZTxkZTtsZSsrKXRoaXMuX3Byb2Nlc3ModGhpcy5taW5pbWF0Y2guc2V0W2xlXSxsZSwhMSk7dGhpcy5fZmluaXNoKCl9dGUucHJvdG90eXBlLl9maW5pc2g9ZnVuY3Rpb24oKXtpZihCLm9rKHRoaXMgaW5zdGFuY2VvZiB0ZSksdGhp'@;
put 'cy5yZWFscGF0aCl7dmFyIGFlPXRoaXM7dGhpcy5tYXRjaGVzLmZvckVhY2goZnVuY3Rpb24oc2UsZGUpe3ZhciBsZT1hZS5tYXRjaGVzW2RlXT1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcih2YXIgY2UgaW4gc2UpdHJ5e2NlPWFlLl9tYWtlQWJzKGNlKSxsZVtJLnJlYWxwYXRoU3luYyhjZSxh'@;
put 'ZS5yZWFscGF0aENhY2hlKV09ITB9Y2F0Y2goRyl7aWYoInN0YXQiIT09Ry5zeXNjYWxsKXRocm93IEc7bGVbYWUuX21ha2VBYnMoY2UpXT0hMH19KX1WLmZpbmlzaCh0aGlzKX0sdGUucHJvdG90eXBlLl9wcm9jZXNzPWZ1bmN0aW9uKGFlLHNlLGRlKXtCLm9rKHRoaXMgaW5zdGFuY2VvZiB0'@;
put 'ZSk7Zm9yKHZhciBsZSxjZT0wOyJzdHJpbmciPT10eXBlb2YgYWVbY2VdOyljZSsrO3N3aXRjaChjZSl7Y2FzZSBhZS5sZW5ndGg6cmV0dXJuIHZvaWQgdGhpcy5fcHJvY2Vzc1NpbXBsZShhZS5qb2luKCIvIiksc2UpO2Nhc2UgMDpsZT1udWxsO2JyZWFrO2RlZmF1bHQ6bGU9YWUuc2xpY2Uo'@;
put 'MCxjZSkuam9pbigiLyIpfXZhciBHLHk9YWUuc2xpY2UoY2UpO251bGw9PT1sZT9HPSIuIjooKE4obGUpfHxOKGFlLm1hcChmdW5jdGlvbihIKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEg/SDoiWypdIn0pLmpvaW4oIi8iKSkpJiYobGUmJk4obGUpfHwobGU9Ii8iK2xlKSksRz1sZSk7dmFy'@;
put 'IEw9dGhpcy5fbWFrZUFicyhHKTt6KHRoaXMsRyl8fCh5WzBdPT09RS5HTE9CU1RBUj90aGlzLl9wcm9jZXNzR2xvYlN0YXIobGUsRyxMLHksc2UsZGUpOnRoaXMuX3Byb2Nlc3NSZWFkZGlyKGxlLEcsTCx5LHNlLGRlKSl9LHRlLnByb3RvdHlwZS5fcHJvY2Vzc1JlYWRkaXI9ZnVuY3Rpb24o'@;
put 'YWUsc2UsZGUsbGUsY2UsRyl7dmFyIHk9dGhpcy5fcmVhZGRpcihkZSxHKTtpZih5KXtmb3IodmFyIEw9bGVbMF0sSD0hIXRoaXMubWluaW1hdGNoLm5lZ2F0ZSxnPXRoaXMuZG90fHwiLiI9PT1MLl9nbG9iLmNoYXJBdCgwKSxTPVtdLHg9MDt4PHkubGVuZ3RoO3grKykoIi4iIT09KEM9eVt4'@;
put 'XSkuY2hhckF0KDApfHxnKSYmKEgmJiFhZT8hQy5tYXRjaChMKTpDLm1hdGNoKEwpKSYmUy5wdXNoKEMpO3ZhciBfPVMubGVuZ3RoO2lmKDAhPT1fKWlmKDEhPT1sZS5sZW5ndGh8fHRoaXMubWFya3x8dGhpcy5zdGF0KWZvcihsZS5zaGlmdCgpLHg9MDt4PF87eCsrKUM9U1t4XSx0aGlzLl9w'@;
put 'cm9jZXNzKChhZT9bYWUsQ106W0NdKS5jb25jYXQobGUpLGNlLEcpO2Vsc2UgZm9yKHRoaXMubWF0Y2hlc1tjZV18fCh0aGlzLm1hdGNoZXNbY2VdPU9iamVjdC5jcmVhdGUobnVsbCkpLHg9MDt4PF87eCsrKXt2YXIgQz1TW3hdO2FlJiYoQz0iLyIhPT1hZS5zbGljZSgtMSk/YWUrIi8iK0M6'@;
put 'YWUrQyksIi8iIT09Qy5jaGFyQXQoMCl8fHRoaXMubm9tb3VudHx8KEM9ay5qb2luKHRoaXMucm9vdCxDKSksdGhpcy5fZW1pdE1hdGNoKGNlLEMpfX19LHRlLnByb3RvdHlwZS5fZW1pdE1hdGNoPWZ1bmN0aW9uKGFlLHNlKXtpZighcSh0aGlzLHNlKSl7dmFyIGRlPXRoaXMuX21ha2VBYnMo'@;
put 'c2UpO2lmKHRoaXMubWFyayYmKHNlPXRoaXMuX21hcmsoc2UpKSx0aGlzLmFic29sdXRlJiYoc2U9ZGUpLCF0aGlzLm1hdGNoZXNbYWVdW3NlXSl7aWYodGhpcy5ub2Rpcil7dmFyIGxlPXRoaXMuY2FjaGVbZGVdO2lmKCJESVIiPT09bGV8fEFycmF5LmlzQXJyYXkobGUpKXJldHVybn10aGlz'@;
put 'Lm1hdGNoZXNbYWVdW3NlXT0hMCx0aGlzLnN0YXQmJnRoaXMuX3N0YXQoc2UpfX19LHRlLnByb3RvdHlwZS5fcmVhZGRpckluR2xvYlN0YXI9ZnVuY3Rpb24oYWUpe2lmKHRoaXMuZm9sbG93KXJldHVybiB0aGlzLl9yZWFkZGlyKGFlLCExKTt2YXIgc2UsZGU7dHJ5e2RlPXRoaXMuZnMubHN0'@;
put 'YXRTeW5jKGFlKX1jYXRjaChjZSl7aWYoIkVOT0VOVCI9PT1jZS5jb2RlKXJldHVybiBudWxsfXZhciBsZT1kZSYmZGUuaXNTeW1ib2xpY0xpbmsoKTtyZXR1cm4gdGhpcy5zeW1saW5rc1thZV09bGUsbGV8fCFkZXx8ZGUuaXNEaXJlY3RvcnkoKT9zZT10aGlzLl9yZWFkZGlyKGFlLCExKTp0'@;
put 'aGlzLmNhY2hlW2FlXT0iRklMRSIsc2V9LHRlLnByb3RvdHlwZS5fcmVhZGRpcj1mdW5jdGlvbihhZSxzZSl7aWYoc2UmJiFXKHRoaXMuc3ltbGlua3MsYWUpKXJldHVybiB0aGlzLl9yZWFkZGlySW5HbG9iU3RhcihhZSk7aWYoVyh0aGlzLmNhY2hlLGFlKSl7dmFyIGRlPXRoaXMuY2FjaGVb'@;
put 'YWVdO2lmKCFkZXx8IkZJTEUiPT09ZGUpcmV0dXJuIG51bGw7aWYoQXJyYXkuaXNBcnJheShkZSkpcmV0dXJuIGRlfXRyeXtyZXR1cm4gdGhpcy5fcmVhZGRpckVudHJpZXMoYWUsdGhpcy5mcy5yZWFkZGlyU3luYyhhZSkpfWNhdGNoKGxlKXtyZXR1cm4gdGhpcy5fcmVhZGRpckVycm9yKGFl'@;
put 'LGxlKSxudWxsfX0sdGUucHJvdG90eXBlLl9yZWFkZGlyRW50cmllcz1mdW5jdGlvbihhZSxzZSl7aWYoIXRoaXMubWFyayYmIXRoaXMuc3RhdClmb3IodmFyIGRlPTA7ZGU8c2UubGVuZ3RoO2RlKyspe3ZhciBsZT1zZVtkZV07dGhpcy5jYWNoZVtsZT0iLyI9PT1hZT9hZStsZTphZSsiLyIr'@;
put 'bGVdPSEwfXJldHVybiB0aGlzLmNhY2hlW2FlXT1zZSxzZX0sdGUucHJvdG90eXBlLl9yZWFkZGlyRXJyb3I9ZnVuY3Rpb24oYWUsc2Upe3N3aXRjaChzZS5jb2RlKXtjYXNlIkVOT1RTVVAiOmNhc2UiRU5PVERJUiI6dmFyIGRlPXRoaXMuX21ha2VBYnMoYWUpO2lmKHRoaXMuY2FjaGVbZGVd'@;
put 'PSJGSUxFIixkZT09PXRoaXMuY3dkQWJzKXt2YXIgbGU9bmV3IEVycm9yKHNlLmNvZGUrIiBpbnZhbGlkIGN3ZCAiK3RoaXMuY3dkKTt0aHJvdyBsZS5wYXRoPXRoaXMuY3dkLGxlLmNvZGU9c2UuY29kZSxsZX1icmVhaztjYXNlIkVOT0VOVCI6Y2FzZSJFTE9PUCI6Y2FzZSJFTkFNRVRPT0xP'@;
put 'TkciOmNhc2UiVU5LTk9XTiI6dGhpcy5jYWNoZVt0aGlzLl9tYWtlQWJzKGFlKV09ITE7YnJlYWs7ZGVmYXVsdDppZih0aGlzLmNhY2hlW3RoaXMuX21ha2VBYnMoYWUpXT0hMSx0aGlzLnN0cmljdCl0aHJvdyBzZTt0aGlzLnNpbGVudHx8UC5lcnJvcigiZ2xvYiBlcnJvciIsc2UpfX0sdGUu'@;
put 'cHJvdG90eXBlLl9wcm9jZXNzR2xvYlN0YXI9ZnVuY3Rpb24oYWUsc2UsZGUsbGUsY2UsRyl7dmFyIHk9dGhpcy5fcmVhZGRpcihkZSxHKTtpZih5KXt2YXIgTD1sZS5zbGljZSgxKSxIPWFlP1thZV06W10saj1ILmNvbmNhdChMKTt0aGlzLl9wcm9jZXNzKGosY2UsITEpO3ZhciBnPXkubGVu'@;
put 'Z3RoO2lmKCF0aGlzLnN5bWxpbmtzW2RlXXx8IUcpZm9yKHZhciBTPTA7UzxnO1MrKylpZigiLiIhPT15W1NdLmNoYXJBdCgwKXx8dGhpcy5kb3Qpe3ZhciB4PUguY29uY2F0KHlbU10sTCk7dGhpcy5fcHJvY2Vzcyh4LGNlLCEwKTt2YXIgXz1ILmNvbmNhdCh5W1NdLGxlKTt0aGlzLl9wcm9j'@;
put 'ZXNzKF8sY2UsITApfX19LHRlLnByb3RvdHlwZS5fcHJvY2Vzc1NpbXBsZT1mdW5jdGlvbihhZSxzZSl7dmFyIGRlPXRoaXMuX3N0YXQoYWUpO2lmKHRoaXMubWF0Y2hlc1tzZV18fCh0aGlzLm1hdGNoZXNbc2VdPU9iamVjdC5jcmVhdGUobnVsbCkpLGRlKXtpZihhZSYmTihhZSkmJiF0aGlz'@;
put 'Lm5vbW91bnQpe3ZhciBsZT0vW1wvXFxdJC8udGVzdChhZSk7Ii8iPT09YWUuY2hhckF0KDApP2FlPWsuam9pbih0aGlzLnJvb3QsYWUpOihhZT1rLnJlc29sdmUodGhpcy5yb290LGFlKSxsZSYmKGFlKz0iLyIpKX0id2luMzIiPT09VS5wbGF0Zm9ybSYmKGFlPWFlLnJlcGxhY2UoL1xcL2cs'@;
put 'Ii8iKSksdGhpcy5fZW1pdE1hdGNoKHNlLGFlKX19LHRlLnByb3RvdHlwZS5fc3RhdD1mdW5jdGlvbihhZSl7dmFyIHNlPXRoaXMuX21ha2VBYnMoYWUpLGRlPSIvIj09PWFlLnNsaWNlKC0xKTtpZihhZS5sZW5ndGg+dGhpcy5tYXhMZW5ndGgpcmV0dXJuITE7aWYoIXRoaXMuc3RhdCYmVyh0'@;
put 'aGlzLmNhY2hlLHNlKSl7dmFyIGxlPXRoaXMuY2FjaGVbc2VdO2lmKEFycmF5LmlzQXJyYXkobGUpJiYobGU9IkRJUiIpLCFkZXx8IkRJUiI9PT1sZSlyZXR1cm4gbGU7aWYoZGUmJiJGSUxFIj09PWxlKXJldHVybiExfXZhciBjZT10aGlzLnN0YXRDYWNoZVtzZV07aWYoIWNlKXt2YXIgRzt0'@;
put 'cnl7Rz10aGlzLmZzLmxzdGF0U3luYyhzZSl9Y2F0Y2goeSl7aWYoeSYmKCJFTk9FTlQiPT09eS5jb2RlfHwiRU5PVERJUiI9PT15LmNvZGUpKXJldHVybiB0aGlzLnN0YXRDYWNoZVtzZV09ITEsITF9aWYoRyYmRy5pc1N5bWJvbGljTGluaygpKXRyeXtjZT10aGlzLmZzLnN0YXRTeW5jKHNl'@;
put 'KX1jYXRjaHtjZT1HfWVsc2UgY2U9R31yZXR1cm4gdGhpcy5zdGF0Q2FjaGVbc2VdPWNlLGxlPSEwLGNlJiYobGU9Y2UuaXNEaXJlY3RvcnkoKT8iRElSIjoiRklMRSIpLHRoaXMuY2FjaGVbc2VdPXRoaXMuY2FjaGVbc2VdfHxsZSwoIWRlfHwiRklMRSIhPT1sZSkmJmxlfSx0ZS5wcm90b3R5'@;
put 'cGUuX21hcms9ZnVuY3Rpb24oYWUpe3JldHVybiBWLm1hcmsodGhpcyxhZSl9LHRlLnByb3RvdHlwZS5fbWFrZUFicz1mdW5jdGlvbihhZSl7cmV0dXJuIFYubWFrZUFicyh0aGlzLGFlKX19LDcyOTY6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDIxMCkoIiVPYmplY3QuZ2V0T3du'@;
put 'UHJvcGVydHlEZXNjcmlwdG9yJSIsITApO2lmKFApdHJ5e1AoW10sImxlbmd0aCIpfWNhdGNoe1A9bnVsbH13LmV4cG9ydHM9UH0sNjQ1ODp3PT57InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbihEKXtpZihudWxsPT09RHx8Im9iamVjdCIhPXR5cGVvZiBEKXJldHVybiBEO2lmKEQg'@;
put 'aW5zdGFuY2VvZiBPYmplY3QpdmFyIFA9e19fcHJvdG9fXzpBKEQpfTtlbHNlIFA9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoRCkuZm9yRWFjaChmdW5jdGlvbihVKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoUCxVLE9iamVjdC5nZXRPd25Q'@;
put 'cm9wZXJ0eURlc2NyaXB0b3IoRCxVKSl9KSxQfTt2YXIgQT1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKEQpe3JldHVybiBELl9fcHJvdG9fX319LDc3Oih3LEEsRCk9Pnt2YXIgUCxVLEk9RCg0MTU1KSxFPUQoNTEwOCksaz1EKDU0NDMpLEI9RCgyMTYxKSxOPUQoODUyMCksVj1E'@;
put 'KDY0NTgpLFo9RCg5NTM5KTtmdW5jdGlvbiBXKGxlLGNlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobGUsUCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGNlfX0pfSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yPyhQPVN5bWJvbC5mb3IoImdy'@;
put 'YWNlZnVsLWZzLnF1ZXVlIiksVT1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooUD0iX19fZ3JhY2VmdWwtZnMucXVldWUiLFU9Il9fX2dyYWNlZnVsLWZzLnByZXZpb3VzIik7dmFyIHoscT1mdW5jdGlvbigpe307ZnVuY3Rpb24gdGUobGUpe0IobGUpLGxlLmdyYWNlZnVs'@;
put 'aWZ5PXRlLGxlLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24oaGUseGUpe3JldHVybiBuZXcgbGUuUmVhZFN0cmVhbShoZSx4ZSl9LGxlLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uKGhlLHhlKXtyZXR1cm4gbmV3IGxlLldyaXRlU3RyZWFtKGhlLHhlKX07dmFyIGNlPWxlLnJlYWRGaWxl'@;
put 'O2xlLnJlYWRGaWxlPWZ1bmN0aW9uKGhlLHhlLE9lKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeGUmJihPZT14ZSx4ZT1udWxsKSxmdW5jdGlvbiBIZShFZSxMZSxOZSxLZSl7cmV0dXJuIGNlKEVlLExlLGZ1bmN0aW9uKFVlKXshVWV8fCJFTUZJTEUiIT09VWUuY29kZSYmIkVORklMRSIh'@;
put 'PT1VZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBOZSYmTmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFlKFtIZSxbRWUsTGUsTmVdLFVlLEtlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShoZSx4ZSxPZSl9O3ZhciBHPWxlLndyaXRlRmlsZTtsZS53cml0ZUZpbGU9ZnVuY3Rpb24oaGUs'@;
put 'eGUsT2UsSGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBPZSYmKEhlPU9lLE9lPW51bGwpLGZ1bmN0aW9uIEVlKExlLE5lLEtlLFVlLFhlKXtyZXR1cm4gRyhMZSxOZSxLZSxmdW5jdGlvbihhdCl7IWF0fHwiRU1GSUxFIiE9PWF0LmNvZGUmJiJFTkZJTEUiIT09YXQuY29kZT8iZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgVWUmJlVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphZShbRWUsW0xlLE5lLEtlLFVlXSxhdCxYZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9KX0oaGUseGUsT2UsSGUpfTt2YXIgeT1sZS5hcHBlbmRGaWxlO3kmJihsZS5hcHBlbmRGaWxlPWZ1bmN0aW9uKGhlLHhlLE9l'@;
put 'LEhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2UmJihIZT1PZSxPZT1udWxsKSxmdW5jdGlvbiBFZShMZSxOZSxLZSxVZSxYZSl7cmV0dXJuIHkoTGUsTmUsS2UsZnVuY3Rpb24oYXQpeyFhdHx8IkVNRklMRSIhPT1hdC5jb2RlJiYiRU5GSUxFIiE9PWF0LmNvZGU/ImZ1bmN0aW9uIj09'@;
put 'dHlwZW9mIFVlJiZVZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6YWUoW0VlLFtMZSxOZSxLZSxVZV0sYXQsWGV8fERhdGUubm93KCksRGF0ZS5ub3coKV0pfSl9KGhlLHhlLE9lLEhlKX0pO3ZhciBMPWxlLmNvcHlGaWxlO0wmJihsZS5jb3B5RmlsZT1mdW5jdGlvbihoZSx4ZSxPZSxIZSl7cmV0'@;
put 'dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9lJiYoSGU9T2UsT2U9MCksZnVuY3Rpb24gRWUoTGUsTmUsS2UsVWUsWGUpe3JldHVybiBMKExlLE5lLEtlLGZ1bmN0aW9uKGF0KXshYXR8fCJFTUZJTEUiIT09YXQuY29kZSYmIkVORklMRSIhPT1hdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBVZSYm'@;
put 'VWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFlKFtFZSxbTGUsTmUsS2UsVWVdLGF0LFhlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShoZSx4ZSxPZSxIZSl9KTt2YXIgSD1sZS5yZWFkZGlyO2xlLnJlYWRkaXI9ZnVuY3Rpb24oaGUseGUsT2UpeyJmdW5jdGlvbiI9PXR5cGVvZiB4ZSYm'@;
put 'KE9lPXhlLHhlPW51bGwpO3ZhciBIZT1qLnRlc3QoSS52ZXJzaW9uKT9mdW5jdGlvbihMZSxOZSxLZSxVZSl7cmV0dXJuIEgoTGUsRWUoTGUsTmUsS2UsVWUpKX06ZnVuY3Rpb24oTGUsTmUsS2UsVWUpe3JldHVybiBIKExlLE5lLEVlKExlLE5lLEtlLFVlKSl9O3JldHVybiBIZShoZSx4ZSxP'@;
put 'ZSk7ZnVuY3Rpb24gRWUoTGUsTmUsS2UsVWUpe3JldHVybiBmdW5jdGlvbihYZSxhdCl7IVhlfHwiRU1GSUxFIiE9PVhlLmNvZGUmJiJFTkZJTEUiIT09WGUuY29kZT8oYXQmJmF0LnNvcnQmJmF0LnNvcnQoKSwiZnVuY3Rpb24iPT10eXBlb2YgS2UmJktlLmNhbGwodGhpcyxYZSxhdCkpOmFl'@;
put 'KFtIZSxbTGUsTmUsS2VdLFhlLFVlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX19fTt2YXIgaj0vXnZbMC01XVwuLztpZigidjAuOCI9PT1JLnZlcnNpb24uc3Vic3RyKDAsNCkpe3ZhciBnPU4obGUpO0M9Zy5SZWFkU3RyZWFtLEs9Zy5Xcml0ZVN0cmVhbX12YXIgUz1sZS5SZWFkU3RyZWFt'@;
put 'O1MmJihDLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSxDLnByb3RvdHlwZS5vcGVuPWZ1bmN0aW9uKCl7dmFyIGhlPXRoaXM7dWUoaGUucGF0aCxoZS5mbGFncyxoZS5tb2RlLGZ1bmN0aW9uKHhlLE9lKXt4ZT8oaGUuYXV0b0Nsb3NlJiZoZS5kZXN0cm95KCksaGUuZW1p'@;
put 'dCgiZXJyb3IiLHhlKSk6KGhlLmZkPU9lLGhlLmVtaXQoIm9wZW4iLE9lKSxoZS5yZWFkKCkpfSl9KTt2YXIgeD1sZS5Xcml0ZVN0cmVhbTt4JiYoSy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh4LnByb3RvdHlwZSksSy5wcm90b3R5cGUub3Blbj1mdW5jdGlvbigpe3ZhciBoZT10aGlzO3Vl'@;
put 'KGhlLnBhdGgsaGUuZmxhZ3MsaGUubW9kZSxmdW5jdGlvbih4ZSxPZSl7eGU/KGhlLmRlc3Ryb3koKSxoZS5lbWl0KCJlcnJvciIseGUpKTooaGUuZmQ9T2UsaGUuZW1pdCgib3BlbiIsT2UpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIEN9LHNldDpmdW5jdGlvbihoZSl7Qz1oZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUsIldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEt9LHNldDpmdW5jdGlvbihoZSl7Sz1oZX0sZW51bWVyYWJs'@;
put 'ZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgXz1DO09iamVjdC5kZWZpbmVQcm9wZXJ0eShsZSwiRmlsZVJlYWRTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gX30sc2V0OmZ1bmN0aW9uKGhlKXtfPWhlfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBwPUs7ZnVu'@;
put 'Y3Rpb24gQyhoZSx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBDPyhTLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpDLmFwcGx5KE9iamVjdC5jcmVhdGUoQy5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gSyhoZSx4ZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBLPyh4LmFw'@;
put 'cGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpLLmFwcGx5KE9iamVjdC5jcmVhdGUoSy5wcm90b3R5cGUpLGFyZ3VtZW50cyl9T2JqZWN0LmRlZmluZVByb3BlcnR5KGxlLCJGaWxlV3JpdGVTdHJlYW0iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcH0sc2V0OmZ1bmN0aW9uKGhlKXtwPWhlfSxl'@;
put 'bnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBuZT1sZS5vcGVuO2Z1bmN0aW9uIHVlKGhlLHhlLE9lLEhlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgT2UmJihIZT1PZSxPZT1udWxsKSxmdW5jdGlvbiBFZShMZSxOZSxLZSxVZSxYZSl7cmV0dXJuIG5lKExlLE5lLEtlLGZ1'@;
put 'bmN0aW9uKGF0LEZlKXshYXR8fCJFTUZJTEUiIT09YXQuY29kZSYmIkVORklMRSIhPT1hdC5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBVZSYmVWUuYXBwbHkodGhpcyxhcmd1bWVudHMpOmFlKFtFZSxbTGUsTmUsS2UsVWVdLGF0LFhlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShoZSx4'@;
put 'ZSxPZSxIZSl9cmV0dXJuIGxlLm9wZW49dWUsbGV9ZnVuY3Rpb24gYWUobGUpe3EoIkVOUVVFVUUiLGxlWzBdLm5hbWUsbGVbMV0pLGtbUF0ucHVzaChsZSksZGUoKX1mdW5jdGlvbiBzZSgpe2Zvcih2YXIgbGU9RGF0ZS5ub3coKSxjZT0wO2NlPGtbUF0ubGVuZ3RoOysrY2Upa1tQXVtjZV0u'@;
put 'bGVuZ3RoPjImJihrW1BdW2NlXVszXT1sZSxrW1BdW2NlXVs0XT1sZSk7ZGUoKX1mdW5jdGlvbiBkZSgpe2lmKGNsZWFyVGltZW91dCh6KSx6PXZvaWQgMCwwIT09a1tQXS5sZW5ndGgpe3ZhciBsZT1rW1BdLnNoaWZ0KCksY2U9bGVbMF0sRz1sZVsxXSx5PWxlWzJdLEw9bGVbM10sSD1sZVs0'@;
put 'XTtpZih2b2lkIDA9PT1MKXEoIlJFVFJZIixjZS5uYW1lLEcpLGNlLmFwcGx5KG51bGwsRyk7ZWxzZSBpZihEYXRlLm5vdygpLUw+PTZlNCl7cSgiVElNRU9VVCIsY2UubmFtZSxHKTt2YXIgaj1HLnBvcCgpOyJmdW5jdGlvbiI9PXR5cGVvZiBqJiZqLmNhbGwobnVsbCx5KX1lbHNle3ZhciBn'@;
put 'PURhdGUubm93KCktSCxTPU1hdGgubWF4KEgtTCwxKTtnPj1NYXRoLm1pbigxLjIqUywxMDApPyhxKCJSRVRSWSIsY2UubmFtZSxHKSxjZS5hcHBseShudWxsLEcuY29uY2F0KFtMXSkpKTprW1BdLnB1c2gobGUpfXZvaWQgMD09PXomJih6PXNldFRpbWVvdXQoZGUsMCkpfX1aLmRlYnVnbG9n'@;
put 'P3E9Wi5kZWJ1Z2xvZygiZ2ZzNCIpOi9cYmdmczRcYi9pLnRlc3QoSS5lbnYuTk9ERV9ERUJVR3x8IiIpJiYocT1mdW5jdGlvbigpe3ZhciBsZT1aLmZvcm1hdC5hcHBseShaLGFyZ3VtZW50cyk7bGU9IkdGUzQ6ICIrbGUuc3BsaXQoL1xuLykuam9pbigiXG5HRlM0OiAiKSxFLmVycm9yKGxl'@;
put 'KX0pLGtbUF18fChXKGssRC5nW1BdfHxbXSksay5jbG9zZT1mdW5jdGlvbihsZSl7ZnVuY3Rpb24gY2UoRyx5KXtyZXR1cm4gbGUuY2FsbChrLEcsZnVuY3Rpb24oTCl7THx8c2UoKSwiZnVuY3Rpb24iPT10eXBlb2YgeSYmeS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0'@;
put 'LmRlZmluZVByb3BlcnR5KGNlLFUse3ZhbHVlOmxlfSksY2V9KGsuY2xvc2UpLGsuY2xvc2VTeW5jPWZ1bmN0aW9uKGxlKXtmdW5jdGlvbiBjZShHKXtsZS5hcHBseShrLGFyZ3VtZW50cyksc2UoKX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGNlLFUse3ZhbHVlOmxlfSksY2V9KGsu'@;
put 'Y2xvc2VTeW5jKSwvXGJnZnM0XGIvaS50ZXN0KEkuZW52Lk5PREVfREVCVUd8fCIiKSYmSS5vbigiZXhpdCIsZnVuY3Rpb24oKXtxKGtbUF0pLEQoOTI4MikuZXF1YWwoa1tQXS5sZW5ndGgsMCl9KSksRC5nW1BdfHxXKEQuZyxrW1BdKSx3LmV4cG9ydHM9dGUoVihrKSksSS5lbnYuVEVTVF9H'@;
put 'UkFDRUZVTF9GU19HTE9CQUxfUEFUQ0gmJiFrLl9fcGF0Y2hlZCYmKHcuZXhwb3J0cz10ZShrKSxrLl9fcGF0Y2hlZD0hMCl9LDg1MjA6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSksVT1EKDI4MzApLlN0cmVhbTt3LmV4cG9ydHM9ZnVuY3Rpb24oSSl7cmV0dXJue1JlYWRTdHJlYW06ZnVuY3Rp'@;
put 'b24gRShrLEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEUpKXJldHVybiBuZXcgRShrLEIpO1UuY2FsbCh0aGlzKTt2YXIgTj10aGlzO3RoaXMucGF0aD1rLHRoaXMuZmQ9bnVsbCx0aGlzLnJlYWRhYmxlPSEwLHRoaXMucGF1c2VkPSExLHRoaXMuZmxhZ3M9InIiLHRoaXMubW9kZT00MzgsdGhp'@;
put 'cy5idWZmZXJTaXplPTY1NTM2LEI9Qnx8e307Zm9yKHZhciBWPU9iamVjdC5rZXlzKEIpLFo9MCxXPVYubGVuZ3RoO1o8VztaKyspe3ZhciB6PVZbWl07dGhpc1t6XT1CW3pdfWlmKHRoaXMuZW5jb2RpbmcmJnRoaXMuc2V0RW5jb2RpbmcodGhpcy5lbmNvZGluZyksdm9pZCAwIT09dGhpcy5z'@;
put 'dGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHZvaWQgMD09PXRoaXMuZW5kKXRoaXMuZW5kPTEvMDtlbHNlIGlmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5lbmQpdGhyb3cgVHlwZUVycm9yKCJl'@;
put 'bmQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ+dGhpcy5lbmQpdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlIDw9IGVuZCIpO3RoaXMucG9zPXRoaXMuc3RhcnR9bnVsbD09PXRoaXMuZmQ/SS5vcGVuKHRoaXMucGF0aCx0aGlzLmZsYWdzLHRoaXMubW9kZSxmdW5jdGlv'@;
put 'bihxLFEpe2lmKHEpcmV0dXJuIE4uZW1pdCgiZXJyb3IiLHEpLHZvaWQoTi5yZWFkYWJsZT0hMSk7Ti5mZD1RLE4uZW1pdCgib3BlbiIsUSksTi5fcmVhZCgpfSk6UC5uZXh0VGljayhmdW5jdGlvbigpe04uX3JlYWQoKX0pfSxXcml0ZVN0cmVhbTpmdW5jdGlvbiBFKGssQil7aWYoISh0aGlz'@;
put 'IGluc3RhbmNlb2YgRSkpcmV0dXJuIG5ldyBFKGssQik7VS5jYWxsKHRoaXMpLHRoaXMucGF0aD1rLHRoaXMuZmQ9bnVsbCx0aGlzLndyaXRhYmxlPSEwLHRoaXMuZmxhZ3M9InciLHRoaXMuZW5jb2Rpbmc9ImJpbmFyeSIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ5dGVzV3JpdHRlbj0wLEI9Qnx8'@;
put 'e307Zm9yKHZhciBOPU9iamVjdC5rZXlzKEIpLFY9MCxaPU4ubGVuZ3RoO1Y8WjtWKyspe3ZhciBXPU5bVl07dGhpc1tXXT1CW1ddfWlmKHZvaWQgMCE9PXRoaXMuc3RhcnQpe2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5zdGFydCl0aHJvdyBUeXBlRXJyb3IoInN0YXJ0IG11c3QgYmUgYSBO'@;
put 'dW1iZXIiKTtpZih0aGlzLnN0YXJ0PDApdGhyb3cgbmV3IEVycm9yKCJzdGFydCBtdXN0IGJlID49IHplcm8iKTt0aGlzLnBvcz10aGlzLnN0YXJ0fXRoaXMuYnVzeT0hMSx0aGlzLl9xdWV1ZT1bXSxudWxsPT09dGhpcy5mZCYmKHRoaXMuX29wZW49SS5vcGVuLHRoaXMuX3F1ZXVlLnB1c2go'@;
put 'W3RoaXMuX29wZW4sdGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLHZvaWQgMF0pLHRoaXMuZmx1c2goKSl9fX19LDIxNjE6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSksVT1EKDMyMDgpLEk9UC5jd2QsRT1udWxsLGs9UC5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fFAucGxhdGZvcm07'@;
put 'UC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gRXx8KEU9SS5jYWxsKFApKSxFfTt0cnl7UC5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIFAuY2hkaXIpe3ZhciBCPVAuY2hkaXI7UC5jaGRpcj1mdW5jdGlvbihOKXtFPW51bGwsQi5jYWxsKFAsTil9LE9iamVjdC5zZXRQcm90b3R5'@;
put 'cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKFAuY2hkaXIsQil9dy5leHBvcnRzPWZ1bmN0aW9uKE4pe3ZhciBzZSxhZTtmdW5jdGlvbiBWKHNlKXtyZXR1cm4gc2UmJmZ1bmN0aW9uKGRlLGxlLGNlKXtyZXR1cm4gc2UuY2FsbChOLGRlLGxlLGZ1bmN0aW9uKEcpe3RlKEcpJiYoRz1udWxs'@;
put 'KSxjZSYmY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9fWZ1bmN0aW9uIFooc2Upe3JldHVybiBzZSYmZnVuY3Rpb24oZGUsbGUpe3RyeXtyZXR1cm4gc2UuY2FsbChOLGRlLGxlKX1jYXRjaChjZSl7aWYoIXRlKGNlKSl0aHJvdyBjZX19fWZ1bmN0aW9uIFcoc2Upe3JldHVybiBzZSYmZnVu'@;
put 'Y3Rpb24oZGUsbGUsY2UsRyl7cmV0dXJuIHNlLmNhbGwoTixkZSxsZSxjZSxmdW5jdGlvbih5KXt0ZSh5KSYmKHk9bnVsbCksRyYmRy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24geihzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihkZSxsZSxjZSl7dHJ5e3JldHVybiBzZS5jYWxs'@;
put 'KE4sZGUsbGUsY2UpfWNhdGNoKEcpe2lmKCF0ZShHKSl0aHJvdyBHfX19ZnVuY3Rpb24gcShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihkZSxsZSxjZSl7ZnVuY3Rpb24gRyh5LEwpe0wmJihMLnVpZDwwJiYoTC51aWQrPTQyOTQ5NjcyOTYpLEwuZ2lkPDAmJihMLmdpZCs9NDI5NDk2NzI5Nikp'@;
put 'LGNlJiZjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGxlJiYoY2U9bGUsbGU9bnVsbCksbGU/c2UuY2FsbChOLGRlLGxlLEcpOnNlLmNhbGwoTixkZSxHKX19ZnVuY3Rpb24gUShzZSl7cmV0dXJuIHNlJiZmdW5jdGlvbihkZSxsZSl7dmFyIGNlPWxl'@;
put 'P3NlLmNhbGwoTixkZSxsZSk6c2UuY2FsbChOLGRlKTtyZXR1cm4gY2UmJihjZS51aWQ8MCYmKGNlLnVpZCs9NDI5NDk2NzI5NiksY2UuZ2lkPDAmJihjZS5naWQrPTQyOTQ5NjcyOTYpKSxjZX19ZnVuY3Rpb24gdGUoc2Upe3JldHVybiFzZXx8IkVOT1NZUyI9PT1zZS5jb2RlfHwhKFAuZ2V0'@;
put 'dWlkJiYwPT09UC5nZXR1aWQoKXx8IkVJTlZBTCIhPT1zZS5jb2RlJiYiRVBFUk0iIT09c2UuY29kZSl9VS5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJlAudmVyc2lvbi5tYXRjaCgvXnYwXC42XC5bMC0yXXxedjBcLjVcLi8pJiYoKHNlPU4pLmxjaG1vZD1mdW5jdGlvbihkZSxsZSxj'@;
put 'ZSl7c2Uub3BlbihkZSxVLk9fV1JPTkxZfFUuT19TWU1MSU5LLGxlLGZ1bmN0aW9uKEcseSl7Rz9jZSYmY2UoRyk6c2UuZmNobW9kKHksbGUsZnVuY3Rpb24oTCl7c2UuY2xvc2UoeSxmdW5jdGlvbihIKXtjZSYmY2UoTHx8SCl9KX0pfSl9LHNlLmxjaG1vZFN5bmM9ZnVuY3Rpb24oZGUsbGUp'@;
put 'e3ZhciBjZSxHPXNlLm9wZW5TeW5jKGRlLFUuT19XUk9OTFl8VS5PX1NZTUxJTkssbGUpLHk9ITA7dHJ5e2NlPXNlLmZjaG1vZFN5bmMoRyxsZSkseT0hMX1maW5hbGx5e2lmKHkpdHJ5e3NlLmNsb3NlU3luYyhHKX1jYXRjaHt9ZWxzZSBzZS5jbG9zZVN5bmMoRyl9cmV0dXJuIGNlfSksTi5s'@;
put 'dXRpbWVzfHxmdW5jdGlvbihzZSl7VS5oYXNPd25Qcm9wZXJ0eSgiT19TWU1MSU5LIikmJnNlLmZ1dGltZXM/KHNlLmx1dGltZXM9ZnVuY3Rpb24oZGUsbGUsY2UsRyl7c2Uub3BlbihkZSxVLk9fU1lNTElOSyxmdW5jdGlvbih5LEwpe3k/RyYmRyh5KTpzZS5mdXRpbWVzKEwsbGUsY2UsZnVu'@;
put 'Y3Rpb24oSCl7c2UuY2xvc2UoTCxmdW5jdGlvbihqKXtHJiZHKEh8fGopfSl9KX0pfSxzZS5sdXRpbWVzU3luYz1mdW5jdGlvbihkZSxsZSxjZSl7dmFyIEcseT1zZS5vcGVuU3luYyhkZSxVLk9fU1lNTElOSyksTD0hMDt0cnl7Rz1zZS5mdXRpbWVzU3luYyh5LGxlLGNlKSxMPSExfWZpbmFs'@;
put 'bHl7aWYoTCl0cnl7c2UuY2xvc2VTeW5jKHkpfWNhdGNoe31lbHNlIHNlLmNsb3NlU3luYyh5KX1yZXR1cm4gR30pOnNlLmZ1dGltZXMmJihzZS5sdXRpbWVzPWZ1bmN0aW9uKGRlLGxlLGNlLEcpe0cmJlAubmV4dFRpY2soRyl9LHNlLmx1dGltZXNTeW5jPWZ1bmN0aW9uKCl7fSl9KE4pLE4u'@;
put 'Y2hvd249VyhOLmNob3duKSxOLmZjaG93bj1XKE4uZmNob3duKSxOLmxjaG93bj1XKE4ubGNob3duKSxOLmNobW9kPVYoTi5jaG1vZCksTi5mY2htb2Q9VihOLmZjaG1vZCksTi5sY2htb2Q9VihOLmxjaG1vZCksTi5jaG93blN5bmM9eihOLmNob3duU3luYyksTi5mY2hvd25TeW5jPXooTi5m'@;
put 'Y2hvd25TeW5jKSxOLmxjaG93blN5bmM9eihOLmxjaG93blN5bmMpLE4uY2htb2RTeW5jPVooTi5jaG1vZFN5bmMpLE4uZmNobW9kU3luYz1aKE4uZmNobW9kU3luYyksTi5sY2htb2RTeW5jPVooTi5sY2htb2RTeW5jKSxOLnN0YXQ9cShOLnN0YXQpLE4uZnN0YXQ9cShOLmZzdGF0KSxOLmxz'@;
put 'dGF0PXEoTi5sc3RhdCksTi5zdGF0U3luYz1RKE4uc3RhdFN5bmMpLE4uZnN0YXRTeW5jPVEoTi5mc3RhdFN5bmMpLE4ubHN0YXRTeW5jPVEoTi5sc3RhdFN5bmMpLE4uY2htb2QmJiFOLmxjaG1vZCYmKE4ubGNobW9kPWZ1bmN0aW9uKHNlLGRlLGxlKXtsZSYmUC5uZXh0VGljayhsZSl9LE4u'@;
put 'bGNobW9kU3luYz1mdW5jdGlvbigpe30pLE4uY2hvd24mJiFOLmxjaG93biYmKE4ubGNob3duPWZ1bmN0aW9uKHNlLGRlLGxlLGNlKXtjZSYmUC5uZXh0VGljayhjZSl9LE4ubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT1rJiYoTi5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9m'@;
put 'IE4ucmVuYW1lP04ucmVuYW1lOmZ1bmN0aW9uKHNlKXtmdW5jdGlvbiBkZShsZSxjZSxHKXt2YXIgeT1EYXRlLm5vdygpLEw9MDtzZShsZSxjZSxmdW5jdGlvbiBIKGope2lmKGomJigiRUFDQ0VTIj09PWouY29kZXx8IkVQRVJNIj09PWouY29kZSkmJkRhdGUubm93KCkteTw2ZTQpcmV0dXJu'@;
put 'IHNldFRpbWVvdXQoZnVuY3Rpb24oKXtOLnN0YXQoY2UsZnVuY3Rpb24oZyxTKXtnJiYiRU5PRU5UIj09PWcuY29kZT9zZShsZSxjZSxIKTpHKGopfSl9LEwpLHZvaWQoTDwxMDAmJihMKz0xMCkpO0cmJkcoail9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJv'@;
put 'dG90eXBlT2YoZGUsc2UpLGRlfShOLnJlbmFtZSkpLE4ucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgTi5yZWFkP04ucmVhZDpmdW5jdGlvbihzZSl7ZnVuY3Rpb24gZGUobGUsY2UsRyx5LEwsSCl7dmFyIGo7aWYoSCYmImZ1bmN0aW9uIj09dHlwZW9mIEgpe3ZhciBnPTA7aj1mdW5jdGlvbihT'@;
put 'LHgsXyl7aWYoUyYmIkVBR0FJTiI9PT1TLmNvZGUmJmc8MTApcmV0dXJuIGcrKyxzZS5jYWxsKE4sbGUsY2UsRyx5LEwsaik7SC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fXJldHVybiBzZS5jYWxsKE4sbGUsY2UsRyx5LEwsail9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0'@;
put 'LnNldFByb3RvdHlwZU9mKGRlLHNlKSxkZX0oTi5yZWFkKSxOLnJlYWRTeW5jPSJmdW5jdGlvbiIhPXR5cGVvZiBOLnJlYWRTeW5jP04ucmVhZFN5bmM6KGFlPU4ucmVhZFN5bmMsZnVuY3Rpb24oc2UsZGUsbGUsY2UsRyl7Zm9yKHZhciB5PTA7Oyl0cnl7cmV0dXJuIGFlLmNhbGwoTixzZSxk'@;
put 'ZSxsZSxjZSxHKX1jYXRjaChMKXtpZigiRUFHQUlOIj09PUwuY29kZSYmeTwxMCl7eSsrO2NvbnRpbnVlfXRocm93IEx9fSl9fSwxMDQ0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgyMTApKCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSIsITApLFU9ZnVuY3Rpb24oKXtpZihQKXRy'@;
put 'eXtyZXR1cm4gUCh7fSwiYSIse3ZhbHVlOjF9KSwhMH1jYXRjaHtyZXR1cm4hMX1yZXR1cm4hMX07VS5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFVKCkpcmV0dXJuIG51bGw7dHJ5e3JldHVybiAxIT09UChbXSwibGVuZ3RoIix7dmFsdWU6MX0pLmxlbmd0aH1jYXRj'@;
put 'aHtyZXR1cm4hMH19LHcuZXhwb3J0cz1VfSwxNDA1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCxVPUQoNTQxOSk7dy5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFAmJiJmdW5jdGlvbiI9PXR5cGVvZiBT'@;
put 'eW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgUCgiZm9vIikmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sKCJiYXIiKSYmVSgpfX0sNTQxOTp3PT57InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBP'@;
put 'YmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBBPXt9LEQ9U3ltYm9sKCJ0ZXN0IiksUD1PYmplY3QoRCk7aWYoInN0cmluZyI9PXR5cGVvZiBEfHwiW29iamVjdCBTeW1ib2xdIiE9PU9i'@;
put 'amVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChEKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoUCkpcmV0dXJuITE7Zm9yKEQgaW4gQVtEXT00MixBKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3Qua2V5cyYmMCE9PU9i'@;
put 'amVjdC5rZXlzKEEpLmxlbmd0aHx8ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzJiYwIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSkubGVuZ3RoKXJldHVybiExO3ZhciBVPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoQSk7aWYoMSE9PVUu'@;
put 'bGVuZ3RofHxVWzBdIT09RHx8IU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChBLEQpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKXt2YXIgST1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlw'@;
put 'dG9yKEEsRCk7aWYoNDIhPT1JLnZhbHVlfHwhMCE9PUkuZW51bWVyYWJsZSlyZXR1cm4hMX1yZXR1cm4hMH19LDY0MTA6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDU0MTkpO3cuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBQKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sNzY0'@;
put 'MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoODYxMik7dy5leHBvcnRzPVAuY2FsbChGdW5jdGlvbi5jYWxsLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpfSwzMzQ5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg5NTA5KS5CdWZmZXIsVT1EKDg0NzMpLlRy'@;
put 'YW5zZm9ybTtmdW5jdGlvbiBJKEUpe1UuY2FsbCh0aGlzKSx0aGlzLl9ibG9jaz1QLmFsbG9jVW5zYWZlKEUpLHRoaXMuX2Jsb2NrU2l6ZT1FLHRoaXMuX2Jsb2NrT2Zmc2V0PTAsdGhpcy5fbGVuZ3RoPVswLDAsMCwwXSx0aGlzLl9maW5hbGl6ZWQ9ITF9RCg1NzE3KShJLFUpLEkucHJvdG90'@;
put 'eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRSxrLEIpe3ZhciBOPW51bGw7dHJ5e3RoaXMudXBkYXRlKEUsayl9Y2F0Y2goVil7Tj1WfUIoTil9LEkucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihFKXt2YXIgaz1udWxsO3RyeXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goQil7az1C'@;
put 'fUUoayl9LEkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihFLGspe2lmKGZ1bmN0aW9uKHoscSl7aWYoIVAuaXNCdWZmZXIoeikmJiJzdHJpbmciIT10eXBlb2Ygeil0aHJvdyBuZXcgVHlwZUVycm9yKCJEYXRhIG11c3QgYmUgYSBzdHJpbmcgb3IgYSBidWZmZXIiKX0oRSksdGhpcy5fZmlu'@;
put 'YWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7UC5pc0J1ZmZlcihFKXx8KEU9UC5mcm9tKEUsaykpO2Zvcih2YXIgQj10aGlzLl9ibG9jayxOPTA7dGhpcy5fYmxvY2tPZmZzZXQrRS5sZW5ndGgtTj49dGhpcy5fYmxvY2tTaXplOyl7Zm9yKHZhciBWPXRo'@;
put 'aXMuX2Jsb2NrT2Zmc2V0O1Y8dGhpcy5fYmxvY2tTaXplOylCW1YrK109RVtOKytdO3RoaXMuX3VwZGF0ZSgpLHRoaXMuX2Jsb2NrT2Zmc2V0PTB9Zm9yKDtOPEUubGVuZ3RoOylCW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPUVbTisrXTtmb3IodmFyIFo9MCxXPTgqRS5sZW5ndGg7Vz4wOysrWil0'@;
put 'aGlzLl9sZW5ndGhbWl0rPVcsKFc9dGhpcy5fbGVuZ3RoW1pdLzQyOTQ5NjcyOTZ8MCk+MCYmKHRoaXMuX2xlbmd0aFtaXS09NDI5NDk2NzI5NipXKTtyZXR1cm4gdGhpc30sSS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX3VwZGF0ZSBpcyBub3QgaW1w'@;
put 'bGVtZW50ZWQiKX0sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEUpe2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO3RoaXMuX2ZpbmFsaXplZD0hMDt2YXIgaz10aGlzLl9kaWdlc3QoKTt2b2lkIDAhPT1FJiYoaz1rLnRvU3Ry'@;
put 'aW5nKEUpKSx0aGlzLl9ibG9jay5maWxsKDApLHRoaXMuX2Jsb2NrT2Zmc2V0PTA7Zm9yKHZhciBCPTA7Qjw0OysrQil0aGlzLl9sZW5ndGhbQl09MDtyZXR1cm4ga30sSS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiX2RpZ2VzdCBpcyBub3QgaW1wbGVt'@;
put 'ZW50ZWQiKX0sdy5leHBvcnRzPUl9LDM3MTU6KHcsQSxEKT0+e3ZhciBQPUE7UC51dGlscz1EKDY0MzYpLFAuY29tbW9uPUQoNTc3MiksUC5zaGE9RCg5MDQxKSxQLnJpcGVtZD1EKDI5NDkpLFAuaG1hYz1EKDIzNDQpLFAuc2hhMT1QLnNoYS5zaGExLFAuc2hhMjU2PVAuc2hhLnNoYTI1NixQ'@;
put 'LnNoYTIyND1QLnNoYS5zaGEyMjQsUC5zaGEzODQ9UC5zaGEuc2hhMzg0LFAuc2hhNTEyPVAuc2hhLnNoYTUxMixQLnJpcGVtZDE2MD1QLnJpcGVtZC5yaXBlbWQxNjB9LDU3NzI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDY0MzYpLFU9RCg5NzQ2KTtmdW5jdGlvbiBJKCl7dGhp'@;
put 'cy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRo'@;
put 'aXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49ImJpZyIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn1BLkJsb2NrSGFzaD1JLEkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihF'@;
put 'LGspe2lmKEU9UC50b0FycmF5KEUsayksdGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZz90aGlzLnBlbmRpbmcuY29uY2F0KEUpOkUsdGhpcy5wZW5kaW5nVG90YWwrPUUubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dmFyIEI9KEU9dGhpcy5wZW5kaW5nKS5sZW5n'@;
put 'dGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz1FLnNsaWNlKEUubGVuZ3RoLUIsRS5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLEU9UC5qb2luMzIoRSwwLEUubGVuZ3RoLUIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgTj0wO048RS5sZW5ndGg7'@;
put 'Tis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUoRSxOLE4rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LEkucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLFUobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KEUp'@;
put 'fSxJLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5wZW5kaW5nVG90YWwsaz10aGlzLl9kZWx0YTgsQj1rLShFK3RoaXMucGFkTGVuZ3RoKSVrLE49bmV3IEFycmF5KEIrdGhpcy5wYWRMZW5ndGgpO05bMF09MTI4O2Zvcih2YXIgVj0xO1Y8QjtWKyspTltWXT0wO2lmKEU8'@;
put 'PD0zLCJiaWciPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgWj04O1o8dGhpcy5wYWRMZW5ndGg7WisrKU5bVisrXT0wO05bVisrXT0wLE5bVisrXT0wLE5bVisrXT0wLE5bVisrXT0wLE5bVisrXT1FPj4+MjQmMjU1LE5bVisrXT1FPj4+MTYmMjU1LE5bVisrXT1FPj4+OCYyNTUsTltWKytdPTI1'@;
put 'NSZFfWVsc2UgZm9yKE5bVisrXT0yNTUmRSxOW1YrK109RT4+PjgmMjU1LE5bVisrXT1FPj4+MTYmMjU1LE5bVisrXT1FPj4+MjQmMjU1LE5bVisrXT0wLE5bVisrXT0wLE5bVisrXT0wLE5bVisrXT0wLFo9ODtaPHRoaXMucGFkTGVuZ3RoO1orKylOW1YrK109MDtyZXR1cm4gTn19LDIzNDQ6'@;
put 'KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDY0MzYpLFU9RCg5NzQ2KTtmdW5jdGlvbiBJKEUsayxCKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEkoRSxrLEIpO3RoaXMuSGFzaD1FLHRoaXMuYmxvY2tTaXplPUUuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPUUu'@;
put 'b3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChQLnRvQXJyYXkoayxCKSl9dy5leHBvcnRzPUksSS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oRSl7RS5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJihFPShuZXcgdGhpcy5IYXNoKS51cGRhdGUoRSku'@;
put 'ZGlnZXN0KCkpLFUoRS5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIGs9RS5sZW5ndGg7azx0aGlzLmJsb2NrU2l6ZTtrKyspRS5wdXNoKDApO2ZvcihrPTA7azxFLmxlbmd0aDtrKyspRVtrXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShFKSxrPTA7'@;
put 'azxFLmxlbmd0aDtrKyspRVtrXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZShFKX0sSS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEUsayl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKEUsayksdGhpc30sSS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEUpe3Jl'@;
put 'dHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdChFKX19LDI5NDk6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDY0MzYpLFU9RCg1NzcyKSxJPVAucm90bDMyLEU9UC5zdW0zMixrPVAuc3VtMzJfMyxCPVAuc3VtMzJfNCxO'@;
put 'PVUuQmxvY2tIYXNoO2Z1bmN0aW9uIFYoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFY7Ti5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuZW5kaWFuPSJsaXR0bGUifWZ1bmN0'@;
put 'aW9uIFooc2UsZGUsbGUsY2Upe3JldHVybiBzZTw9MTU/ZGVebGVeY2U6c2U8PTMxP2RlJmxlfH5kZSZjZTpzZTw9NDc/KGRlfH5sZSleY2U6c2U8PTYzP2RlJmNlfGxlJn5jZTpkZV4obGV8fmNlKX1mdW5jdGlvbiBXKHNlKXtyZXR1cm4gc2U8PTE1PzA6c2U8PTMxPzE1MTg1MDAyNDk6c2U8'@;
put 'PTQ3PzE4NTk3NzUzOTM6c2U8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiB6KHNlKXtyZXR1cm4gc2U8PTE1PzEzNTI4Mjk5MjY6c2U8PTMxPzE1NDg2MDM2ODQ6c2U8PTQ3PzE4MzYwNzI2OTE6c2U8PTYzPzIwNTM5OTQyMTc6MH1QLmluaGVyaXRzKFYsTiksQS5yaXBlbWQx'@;
put 'NjA9VixWLmJsb2NrU2l6ZT01MTIsVi5vdXRTaXplPTE2MCxWLmhtYWNTdHJlbmd0aD0xOTIsVi5wYWRMZW5ndGg9NjQsVi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihzZSxkZSl7Zm9yKHZhciBsZT10aGlzLmhbMF0sY2U9dGhpcy5oWzFdLEc9dGhpcy5oWzJdLHk9dGhpcy5oWzNdLEw9'@;
put 'dGhpcy5oWzRdLEg9bGUsaj1jZSxnPUcsUz15LHg9TCxfPTA7Xzw4MDtfKyspe3ZhciBwPUUoSShCKGxlLFooXyxjZSxHLHkpLHNlW3FbX10rZGVdLFcoXykpLHRlW19dKSxMKTtsZT1MLEw9eSx5PUkoRywxMCksRz1jZSxjZT1wLHA9RShJKEIoSCxaKDc5LV8saixnLFMpLHNlW1FbX10rZGVd'@;
put 'LHooXykpLGFlW19dKSx4KSxIPXgseD1TLFM9SShnLDEwKSxnPWosaj1wfXA9ayh0aGlzLmhbMV0sRyxTKSx0aGlzLmhbMV09ayh0aGlzLmhbMl0seSx4KSx0aGlzLmhbMl09ayh0aGlzLmhbM10sTCxIKSx0aGlzLmhbM109ayh0aGlzLmhbNF0sbGUsaiksdGhpcy5oWzRdPWsodGhpcy5oWzBd'@;
put 'LGNlLGcpLHRoaXMuaFswXT1wfSxWLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHNlKXtyZXR1cm4iaGV4Ij09PXNlP1AudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOlAuc3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgcT1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywx'@;
put 'NCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxRPVs1LDE0'@;
put 'LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgs'@;
put 'Nyw2LDIsMTMsMTQsMCwzLDksMTFdLHRlPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5'@;
put 'LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxhZT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQs'@;
put 'MTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LDkwNDE6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0IjtBLnNoYTE9RCg0NzYxKSxBLnNoYTIyND1EKDc5OSksQS5z'@;
put 'aGEyNTY9RCg5MzQ0KSxBLnNoYTM4ND1EKDc3MiksQS5zaGE1MTI9RCg1OTAwKX0sNDc2MToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNjQzNiksVT1EKDU3NzIpLEk9RCg3MDM4KSxFPVAucm90bDMyLGs9UC5zdW0zMixCPVAuc3VtMzJfNSxOPUkuZnRfMSxWPVUuQmxvY2tIYXNo'@;
put 'LFo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIFcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBXKSlyZXR1cm4gbmV3IFc7Vi5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMy'@;
put 'ODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfVAuaW5oZXJpdHMoVyxWKSx3LmV4cG9ydHM9VyxXLmJsb2NrU2l6ZT01MTIsVy5vdXRTaXplPTE2MCxXLmhtYWNTdHJlbmd0aD04MCxXLnBhZExlbmd0aD02NCxXLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHoscSl7Zm9yKHZhciBR'@;
put 'PXRoaXMuVyx0ZT0wO3RlPDE2O3RlKyspUVt0ZV09eltxK3RlXTtmb3IoO3RlPFEubGVuZ3RoO3RlKyspUVt0ZV09RShRW3RlLTNdXlFbdGUtOF1eUVt0ZS0xNF1eUVt0ZS0xNl0sMSk7dmFyIGFlPXRoaXMuaFswXSxzZT10aGlzLmhbMV0sZGU9dGhpcy5oWzJdLGxlPXRoaXMuaFszXSxjZT10'@;
put 'aGlzLmhbNF07Zm9yKHRlPTA7dGU8US5sZW5ndGg7dGUrKyl7dmFyIEc9fn4odGUvMjApLHk9QihFKGFlLDUpLE4oRyxzZSxkZSxsZSksY2UsUVt0ZV0sWltHXSk7Y2U9bGUsbGU9ZGUsZGU9RShzZSwzMCksc2U9YWUsYWU9eX10aGlzLmhbMF09ayh0aGlzLmhbMF0sYWUpLHRoaXMuaFsxXT1r'@;
put 'KHRoaXMuaFsxXSxzZSksdGhpcy5oWzJdPWsodGhpcy5oWzJdLGRlKSx0aGlzLmhbM109ayh0aGlzLmhbM10sbGUpLHRoaXMuaFs0XT1rKHRoaXMuaFs0XSxjZSl9LFcucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oeil7cmV0dXJuImhleCI9PT16P1AudG9IZXgzMih0aGlzLmgsImJpZyIp'@;
put 'OlAuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg2NDM2KSxVPUQoOTM0NCk7ZnVuY3Rpb24gSSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEkpKXJldHVybiBuZXcgSTtVLmNhbGwodGhpcyksdGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1'@;
put 'MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XX1QLmluaGVyaXRzKEksVSksdy5leHBvcnRzPUksSS5ibG9ja1NpemU9NTEyLEkub3V0U2l6ZT0yMjQsSS5obWFjU3RyZW5ndGg9MTkyLEkucGFkTGVuZ3RoPTY0LEku'@;
put 'cHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oRSl7cmV0dXJuImhleCI9PT1FP1AudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSwiYmlnIik6UC5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKX19LDkzNDQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDY0MzYpLFU9RCg1'@;
put 'NzcyKSxJPUQoNzAzOCksRT1EKDk3NDYpLGs9UC5zdW0zMixCPVAuc3VtMzJfNCxOPVAuc3VtMzJfNSxWPUkuY2gzMixaPUkubWFqMzIsVz1JLnMwXzI1Nix6PUkuczFfMjU2LHE9SS5nMF8yNTYsUT1JLmcxXzI1Nix0ZT1VLkJsb2NrSGFzaCxhZT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMw'@;
put 'NDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIy'@;
put 'MjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUs'@;
put 'NzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQz'@;
put 'MDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1'@;
put 'Mjk4XTtmdW5jdGlvbiBzZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gbmV3IHNlO3RlLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIy'@;
put 'NV0sdGhpcy5rPWFlLHRoaXMuVz1uZXcgQXJyYXkoNjQpfVAuaW5oZXJpdHMoc2UsdGUpLHcuZXhwb3J0cz1zZSxzZS5ibG9ja1NpemU9NTEyLHNlLm91dFNpemU9MjU2LHNlLmhtYWNTdHJlbmd0aD0xOTIsc2UucGFkTGVuZ3RoPTY0LHNlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGRl'@;
put 'LGxlKXtmb3IodmFyIGNlPXRoaXMuVyxHPTA7RzwxNjtHKyspY2VbR109ZGVbbGUrR107Zm9yKDtHPGNlLmxlbmd0aDtHKyspY2VbR109QihRKGNlW0ctMl0pLGNlW0ctN10scShjZVtHLTE1XSksY2VbRy0xNl0pO3ZhciB5PXRoaXMuaFswXSxMPXRoaXMuaFsxXSxIPXRoaXMuaFsyXSxqPXRo'@;
put 'aXMuaFszXSxnPXRoaXMuaFs0XSxTPXRoaXMuaFs1XSx4PXRoaXMuaFs2XSxfPXRoaXMuaFs3XTtmb3IoRSh0aGlzLmsubGVuZ3RoPT09Y2UubGVuZ3RoKSxHPTA7RzxjZS5sZW5ndGg7RysrKXt2YXIgcD1OKF8seihnKSxWKGcsUyx4KSx0aGlzLmtbR10sY2VbR10pLEM9ayhXKHkpLFooeSxM'@;
put 'LEgpKTtfPXgseD1TLFM9ZyxnPWsoaixwKSxqPUgsSD1MLEw9eSx5PWsocCxDKX10aGlzLmhbMF09ayh0aGlzLmhbMF0seSksdGhpcy5oWzFdPWsodGhpcy5oWzFdLEwpLHRoaXMuaFsyXT1rKHRoaXMuaFsyXSxIKSx0aGlzLmhbM109ayh0aGlzLmhbM10saiksdGhpcy5oWzRdPWsodGhpcy5o'@;
put 'WzRdLGcpLHRoaXMuaFs1XT1rKHRoaXMuaFs1XSxTKSx0aGlzLmhbNl09ayh0aGlzLmhbNl0seCksdGhpcy5oWzddPWsodGhpcy5oWzddLF8pfSxzZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihkZSl7cmV0dXJuImhleCI9PT1kZT9QLnRvSGV4MzIodGhpcy5oLCJiaWciKTpQLnNwbGl0'@;
put 'MzIodGhpcy5oLCJiaWciKX19LDc3MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNjQzNiksVT1EKDU5MDApO2Z1bmN0aW9uIEkoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBJKSlyZXR1cm4gbmV3IEk7VS5jYWxsKHRoaXMpLHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2'@;
put 'NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF19UC5pbmhlcml0cyhJLFUp'@;
put 'LHcuZXhwb3J0cz1JLEkuYmxvY2tTaXplPTEwMjQsSS5vdXRTaXplPTM4NCxJLmhtYWNTdHJlbmd0aD0xOTIsSS5wYWRMZW5ndGg9MTI4LEkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oRSl7cmV0dXJuImhleCI9PT1FP1AudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpOlAu'@;
put 'c3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksImJpZyIpfX0sNTkwMDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNjQzNiksVT1EKDU3NzIpLEk9RCg5NzQ2KSxFPVAucm90cjY0X2hpLGs9UC5yb3RyNjRfbG8sQj1QLnNocjY0X2hpLE49UC5zaHI2NF9sbyxWPVAuc3VtNjQsWj1Q'@;
put 'LnN1bTY0X2hpLFc9UC5zdW02NF9sbyx6PVAuc3VtNjRfNF9oaSxxPVAuc3VtNjRfNF9sbyxRPVAuc3VtNjRfNV9oaSx0ZT1QLnN1bTY0XzVfbG8sYWU9VS5CbG9ja0hhc2gsc2U9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQz'@;
put 'OTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgs'@;
put 'MTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0'@;
put 'MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0'@;
put 'MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwx'@;
put 'NTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4'@;
put 'MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgy'@;
put 'Mzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIy'@;
put 'LDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywz'@;
put 'MzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIw'@;
put 'MzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwx'@;
put 'MjQ2MTg5NTkxXTtmdW5jdGlvbiBkZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGRlKSlyZXR1cm4gbmV3IGRlO2FlLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1'@;
put 'OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9c2UsdGhpcy5XPW5ldyBBcnJheSgxNjApfWZ1bmN0aW9uIGxlKEMsSyxuZSx1ZSxoZSl7dmFyIHhlPUMmbmVe'@;
put 'fkMmaGU7cmV0dXJuIHhlPDAmJih4ZSs9NDI5NDk2NzI5NikseGV9ZnVuY3Rpb24gY2UoQyxLLG5lLHVlLGhlLHhlKXt2YXIgT2U9SyZ1ZV5+SyZ4ZTtyZXR1cm4gT2U8MCYmKE9lKz00Mjk0OTY3Mjk2KSxPZX1mdW5jdGlvbiBHKEMsSyxuZSx1ZSxoZSl7dmFyIHhlPUMmbmVeQyZoZV5uZSZo'@;
put 'ZTtyZXR1cm4geGU8MCYmKHhlKz00Mjk0OTY3Mjk2KSx4ZX1mdW5jdGlvbiB5KEMsSyxuZSx1ZSxoZSx4ZSl7dmFyIE9lPUsmdWVeSyZ4ZV51ZSZ4ZTtyZXR1cm4gT2U8MCYmKE9lKz00Mjk0OTY3Mjk2KSxPZX1mdW5jdGlvbiBMKEMsSyl7dmFyIG5lPUUoQyxLLDI4KV5FKEssQywyKV5FKEss'@;
put 'Qyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBIKEMsSyl7dmFyIG5lPWsoQyxLLDI4KV5rKEssQywyKV5rKEssQyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBqKEMsSyl7dmFyIG5lPUUoQyxLLDE0KV5FKEMsSywxOCle'@;
put 'RShLLEMsOSk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gZyhDLEspe3ZhciBuZT1rKEMsSywxNCleayhDLEssMTgpXmsoSyxDLDkpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfWZ1bmN0aW9uIFMoQyxLKXt2YXIgbmU9RShDLEssMSleRShDLEss'@;
put 'OCleQihDLEssNyk7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24geChDLEspe3ZhciBuZT1rKEMsSywxKV5rKEMsSyw4KV5OKEMsSyw3KTtyZXR1cm4gbmU8MCYmKG5lKz00Mjk0OTY3Mjk2KSxuZX1mdW5jdGlvbiBfKEMsSyl7dmFyIG5lPUUoQyxLLDE5KV5FKEss'@;
put 'QywyOSleQihDLEssNik7cmV0dXJuIG5lPDAmJihuZSs9NDI5NDk2NzI5NiksbmV9ZnVuY3Rpb24gcChDLEspe3ZhciBuZT1rKEMsSywxOSleayhLLEMsMjkpXk4oQyxLLDYpO3JldHVybiBuZTwwJiYobmUrPTQyOTQ5NjcyOTYpLG5lfVAuaW5oZXJpdHMoZGUsYWUpLHcuZXhwb3J0cz1kZSxk'@;
put 'ZS5ibG9ja1NpemU9MTAyNCxkZS5vdXRTaXplPTUxMixkZS5obWFjU3RyZW5ndGg9MTkyLGRlLnBhZExlbmd0aD0xMjgsZGUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oQyxLKXtmb3IodmFyIG5lPXRoaXMuVyx1ZT0wO3VlPDMyO3VlKyspbmVbdWVdPUNbSyt1ZV07Zm9yKDt1'@;
put 'ZTxuZS5sZW5ndGg7dWUrPTIpe3ZhciBoZT1fKG5lW3VlLTRdLG5lW3VlLTNdKSx4ZT1wKG5lW3VlLTRdLG5lW3VlLTNdKSxPZT1uZVt1ZS0xNF0sSGU9bmVbdWUtMTNdLEVlPVMobmVbdWUtMzBdLG5lW3VlLTI5XSksTGU9eChuZVt1ZS0zMF0sbmVbdWUtMjldKSxOZT1uZVt1ZS0zMl0sS2U9'@;
put 'bmVbdWUtMzFdO25lW3VlXT16KGhlLHhlLE9lLEhlLEVlLExlLE5lLEtlKSxuZVt1ZSsxXT1xKGhlLHhlLE9lLEhlLEVlLExlLE5lLEtlKX19LGRlLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEMsSyl7dGhpcy5fcHJlcGFyZUJsb2NrKEMsSyk7dmFyIG5lPXRoaXMuVyx1ZT10aGlzLmhb'@;
put 'MF0saGU9dGhpcy5oWzFdLHhlPXRoaXMuaFsyXSxPZT10aGlzLmhbM10sSGU9dGhpcy5oWzRdLEVlPXRoaXMuaFs1XSxMZT10aGlzLmhbNl0sTmU9dGhpcy5oWzddLEtlPXRoaXMuaFs4XSxVZT10aGlzLmhbOV0sWGU9dGhpcy5oWzEwXSxhdD10aGlzLmhbMTFdLEZlPXRoaXMuaFsxMl0sQ2U9'@;
put 'dGhpcy5oWzEzXSxEZT10aGlzLmhbMTRdLFJlPXRoaXMuaFsxNV07SSh0aGlzLmsubGVuZ3RoPT09bmUubGVuZ3RoKTtmb3IodmFyIGV0PTA7ZXQ8bmUubGVuZ3RoO2V0Kz0yKXt2YXIgbnQ9RGUsR2U9UmUsZHQ9aihLZSxVZSksVGU9ZyhLZSxVZSksQWU9bGUoS2UsMCxYZSwwLEZlKSxCZT1j'@;
put 'ZSgwLFVlLDAsYXQsMCxDZSksb3Q9dGhpcy5rW2V0XSxsdD10aGlzLmtbZXQrMV0sQ3Q9bmVbZXRdLEZ0PW5lW2V0KzFdLFJ0PVEobnQsR2UsZHQsVGUsQWUsQmUsb3QsbHQsQ3QsRnQpLFh0PXRlKG50LEdlLGR0LFRlLEFlLEJlLG90LGx0LEN0LEZ0KTtudD1MKHVlLGhlKSxHZT1IKHVlLGhl'@;
put 'KSxkdD1HKHVlLDAseGUsMCxIZSksVGU9eSgwLGhlLDAsT2UsMCxFZSk7dmFyIFNuPVoobnQsR2UsZHQsVGUpLHp0PVcobnQsR2UsZHQsVGUpO0RlPUZlLFJlPUNlLEZlPVhlLENlPWF0LFhlPUtlLGF0PVVlLEtlPVooTGUsTmUsUnQsWHQpLFVlPVcoTmUsTmUsUnQsWHQpLExlPUhlLE5lPUVl'@;
put 'LEhlPXhlLEVlPU9lLHhlPXVlLE9lPWhlLHVlPVooUnQsWHQsU24senQpLGhlPVcoUnQsWHQsU24senQpfVYodGhpcy5oLDAsdWUsaGUpLFYodGhpcy5oLDIseGUsT2UpLFYodGhpcy5oLDQsSGUsRWUpLFYodGhpcy5oLDYsTGUsTmUpLFYodGhpcy5oLDgsS2UsVWUpLFYodGhpcy5oLDEwLFhl'@;
put 'LGF0KSxWKHRoaXMuaCwxMixGZSxDZSksVih0aGlzLmgsMTQsRGUsUmUpfSxkZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihDKXtyZXR1cm4iaGV4Ij09PUM/UC50b0hleDMyKHRoaXMuaCwiYmlnIik6UC5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4Oih3LEEsRCk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIFA9RCg2NDM2KS5yb3RyMzI7ZnVuY3Rpb24gVShrLEIsTil7cmV0dXJuIGsmQl5+ayZOfWZ1bmN0aW9uIEkoayxCLE4pe3JldHVybiBrJkJeayZOXkImTn1mdW5jdGlvbiBFKGssQixOKXtyZXR1cm4ga15CXk59QS5mdF8xPWZ1bmN0aW9uKGssQixOLFYpe3JldHVybiAwPT09'@;
put 'az9VKEIsTixWKToxPT09a3x8Mz09PWs/RShCLE4sVik6Mj09PWs/SShCLE4sVik6dm9pZCAwfSxBLmNoMzI9VSxBLm1hajMyPUksQS5wMzI9RSxBLnMwXzI1Nj1mdW5jdGlvbihrKXtyZXR1cm4gUChrLDIpXlAoaywxMyleUChrLDIyKX0sQS5zMV8yNTY9ZnVuY3Rpb24oayl7cmV0dXJuIFAo'@;
put 'ayw2KV5QKGssMTEpXlAoaywyNSl9LEEuZzBfMjU2PWZ1bmN0aW9uKGspe3JldHVybiBQKGssNyleUChrLDE4KV5rPj4+M30sQS5nMV8yNTY9ZnVuY3Rpb24oayl7cmV0dXJuIFAoaywxNyleUChrLDE5KV5rPj4+MTB9fSw2NDM2Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg5NzQ2'@;
put 'KSxVPUQoNTcxNyk7ZnVuY3Rpb24gSShOLFYpe3JldHVybiA1NTI5Nj09KDY0NTEyJk4uY2hhckNvZGVBdChWKSkmJiEoVjwwfHxWKzE+PU4ubGVuZ3RoKSYmNTYzMjA9PSg2NDUxMiZOLmNoYXJDb2RlQXQoVisxKSl9ZnVuY3Rpb24gRShOKXtyZXR1cm4oTj4+PjI0fE4+Pj44JjY1MjgwfE48'@;
put 'PDgmMTY3MTE2ODB8KDI1NSZOKTw8MjQpPj4+MH1mdW5jdGlvbiBrKE4pe3JldHVybiAxPT09Ti5sZW5ndGg/IjAiK046Tn1mdW5jdGlvbiBCKE4pe3JldHVybiA3PT09Ti5sZW5ndGg/IjAiK046Nj09PU4ubGVuZ3RoPyIwMCIrTjo1PT09Ti5sZW5ndGg/IjAwMCIrTjo0PT09Ti5sZW5ndGg/'@;
put 'IjAwMDAiK046Mz09PU4ubGVuZ3RoPyIwMDAwMCIrTjoyPT09Ti5sZW5ndGg/IjAwMDAwMCIrTjoxPT09Ti5sZW5ndGg/IjAwMDAwMDAiK046Tn1BLmluaGVyaXRzPVUsQS50b0FycmF5PWZ1bmN0aW9uKE4sVil7aWYoQXJyYXkuaXNBcnJheShOKSlyZXR1cm4gTi5zbGljZSgpO2lmKCFOKXJl'@;
put 'dHVybltdO3ZhciBaPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgTilpZihWKXtpZigiaGV4Ij09PVYpZm9yKChOPU4ucmVwbGFjZSgvW15hLXowLTldKy9naSwiIikpLmxlbmd0aCUyIT0wJiYoTj0iMCIrTiksej0wO3o8Ti5sZW5ndGg7eis9MilaLnB1c2gocGFyc2VJbnQoTlt6XStOW3orMV0s'@;
put 'MTYpKX1lbHNlIGZvcih2YXIgVz0wLHo9MDt6PE4ubGVuZ3RoO3orKyl7dmFyIHE9Ti5jaGFyQ29kZUF0KHopO3E8MTI4P1pbVysrXT1xOnE8MjA0OD8oWltXKytdPXE+PjZ8MTkyLFpbVysrXT02MyZxfDEyOCk6SShOLHopPyhxPTY1NTM2KygoMTAyMyZxKTw8MTApKygxMDIzJk4uY2hhckNv'@;
put 'ZGVBdCgrK3opKSxaW1crK109cT4+MTh8MjQwLFpbVysrXT1xPj4xMiY2M3wxMjgsWltXKytdPXE+PjYmNjN8MTI4LFpbVysrXT02MyZxfDEyOCk6KFpbVysrXT1xPj4xMnwyMjQsWltXKytdPXE+PjYmNjN8MTI4LFpbVysrXT02MyZxfDEyOCl9ZWxzZSBmb3Ioej0wO3o8Ti5sZW5ndGg7eisr'@;
put 'KVpbel09MHxOW3pdO3JldHVybiBafSxBLnRvSGV4PWZ1bmN0aW9uKE4pe2Zvcih2YXIgVj0iIixaPTA7WjxOLmxlbmd0aDtaKyspVis9ayhOW1pdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFZ9LEEuaHRvbmw9RSxBLnRvSGV4MzI9ZnVuY3Rpb24oTixWKXtmb3IodmFyIFo9IiIsVz0wO1c8Ti5s'@;
put 'ZW5ndGg7VysrKXt2YXIgej1OW1ddOyJsaXR0bGUiPT09ViYmKHo9RSh6KSksWis9Qih6LnRvU3RyaW5nKDE2KSl9cmV0dXJuIFp9LEEuemVybzI9ayxBLnplcm84PUIsQS5qb2luMzI9ZnVuY3Rpb24oTixWLFosVyl7dmFyIHo9Wi1WO1AoeiU0PT0wKTtmb3IodmFyIHE9bmV3IEFycmF5KHov'@;
put 'NCksUT0wLHRlPVY7UTxxLmxlbmd0aDtRKyssdGUrPTQpcVtRXT0oImJpZyI9PT1XP05bdGVdPDwyNHxOW3RlKzFdPDwxNnxOW3RlKzJdPDw4fE5bdGUrM106Tlt0ZSszXTw8MjR8Tlt0ZSsyXTw8MTZ8Tlt0ZSsxXTw8OHxOW3RlXSk+Pj4wO3JldHVybiBxfSxBLnNwbGl0MzI9ZnVuY3Rpb24o'@;
put 'TixWKXtmb3IodmFyIFo9bmV3IEFycmF5KDQqTi5sZW5ndGgpLFc9MCx6PTA7VzxOLmxlbmd0aDtXKysseis9NCl7dmFyIHE9TltXXTsiYmlnIj09PVY/KFpbel09cT4+PjI0LFpbeisxXT1xPj4+MTYmMjU1LFpbeisyXT1xPj4+OCYyNTUsWlt6KzNdPTI1NSZxKTooWlt6KzNdPXE+Pj4yNCxa'@;
put 'W3orMl09cT4+PjE2JjI1NSxaW3orMV09cT4+PjgmMjU1LFpbel09MjU1JnEpfXJldHVybiBafSxBLnJvdHIzMj1mdW5jdGlvbihOLFYpe3JldHVybiBOPj4+VnxOPDwzMi1WfSxBLnJvdGwzMj1mdW5jdGlvbihOLFYpe3JldHVybiBOPDxWfE4+Pj4zMi1WfSxBLnN1bTMyPWZ1bmN0aW9uKE4s'@;
put 'Vil7cmV0dXJuIE4rVj4+PjB9LEEuc3VtMzJfMz1mdW5jdGlvbihOLFYsWil7cmV0dXJuIE4rVitaPj4+MH0sQS5zdW0zMl80PWZ1bmN0aW9uKE4sVixaLFcpe3JldHVybiBOK1YrWitXPj4+MH0sQS5zdW0zMl81PWZ1bmN0aW9uKE4sVixaLFcseil7cmV0dXJuIE4rVitaK1crej4+PjB9LEEu'@;
put 'c3VtNjQ9ZnVuY3Rpb24oTixWLFosVyl7dmFyIHE9VytOW1YrMV0+Pj4wO05bVl09KHE8Vz8xOjApK1orTltWXT4+PjAsTltWKzFdPXF9LEEuc3VtNjRfaGk9ZnVuY3Rpb24oTixWLFosVyl7cmV0dXJuKFYrVz4+PjA8Vj8xOjApK04rWj4+PjB9LEEuc3VtNjRfbG89ZnVuY3Rpb24oTixWLFos'@;
put 'Vyl7cmV0dXJuIFYrVz4+PjB9LEEuc3VtNjRfNF9oaT1mdW5jdGlvbihOLFYsWixXLHoscSxRLHRlKXt2YXIgYWU9MCxzZT1WO3JldHVybiBhZSs9KHNlPXNlK1c+Pj4wKTxWPzE6MCxhZSs9KHNlPXNlK3E+Pj4wKTxxPzE6MCxOK1oreitRKyhhZSs9KHNlPXNlK3RlPj4+MCk8dGU/MTowKT4+'@;
put 'PjB9LEEuc3VtNjRfNF9sbz1mdW5jdGlvbihOLFYsWixXLHoscSxRLHRlKXtyZXR1cm4gVitXK3ErdGU+Pj4wfSxBLnN1bTY0XzVfaGk9ZnVuY3Rpb24oTixWLFosVyx6LHEsUSx0ZSxhZSxzZSl7dmFyIGRlPTAsbGU9VjtyZXR1cm4gZGUrPShsZT1sZStXPj4+MCk8Vj8xOjAsZGUrPShsZT1s'@;
put 'ZStxPj4+MCk8cT8xOjAsZGUrPShsZT1sZSt0ZT4+PjApPHRlPzE6MCxOK1oreitRK2FlKyhkZSs9KGxlPWxlK3NlPj4+MCk8c2U/MTowKT4+PjB9LEEuc3VtNjRfNV9sbz1mdW5jdGlvbihOLFYsWixXLHoscSxRLHRlLGFlLHNlKXtyZXR1cm4gVitXK3ErdGUrc2U+Pj4wfSxBLnJvdHI2NF9o'@;
put 'aT1mdW5jdGlvbihOLFYsWil7cmV0dXJuKFY8PDMyLVp8Tj4+PlopPj4+MH0sQS5yb3RyNjRfbG89ZnVuY3Rpb24oTixWLFope3JldHVybihOPDwzMi1afFY+Pj5aKT4+PjB9LEEuc2hyNjRfaGk9ZnVuY3Rpb24oTixWLFope3JldHVybiBOPj4+Wn0sQS5zaHI2NF9sbz1mdW5jdGlvbihOLFYs'@;
put 'Wil7cmV0dXJuKE48PDMyLVp8Vj4+PlopPj4+MH19LDIxNTY6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDM3MTUpLFU9RCg0NTA0KSxJPUQoOTc0Nik7ZnVuY3Rpb24gRShrKXtpZighKHRoaXMgaW5zdGFuY2VvZiBFKSlyZXR1cm4gbmV3IEUoayk7dGhpcy5oYXNoPWsuaGFzaCx0'@;
put 'aGlzLnByZWRSZXNpc3Q9ISFrLnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PWsubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51'@;
put 'bGwsdGhpcy5WPW51bGw7dmFyIEI9VS50b0FycmF5KGsuZW50cm9weSxrLmVudHJvcHlFbmN8fCJoZXgiKSxOPVUudG9BcnJheShrLm5vbmNlLGsubm9uY2VFbmN8fCJoZXgiKSxWPVUudG9BcnJheShrLnBlcnMsay5wZXJzRW5jfHwiaGV4Iik7SShCLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5'@;
put 'LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChCLE4sVil9dy5leHBvcnRzPUUsRS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oayxCLE4pe3ZhciBWPWsuY29uY2F0KEIpLmNvbmNhdChOKTt0aGlzLks9bmV3'@;
put 'IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBaPTA7Wjx0aGlzLlYubGVuZ3RoO1orKyl0aGlzLktbWl09MCx0aGlzLlZbWl09MTt0aGlzLl91cGRhdGUoViksdGhpcy5fcmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0'@;
put 'NzQ5NzY3MTA2NTZ9LEUucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBQLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LEUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oayl7dmFyIEI9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO2smJihCPUIu'@;
put 'dXBkYXRlKGspKSx0aGlzLks9Qi5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLGsmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZShrKS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVw'@;
put 'ZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sRS5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKGssQixOLFYpeyJzdHJpbmciIT10eXBlb2YgQiYmKFY9TixOPUIsQj1udWxsKSxrPVUudG9BcnJheShrLEIpLE49VS50b0FycmF5KE4sViksSShrLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5v'@;
put 'dCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5fdXBkYXRlKGsuY29uY2F0KE58fFtdKSksdGhpcy5fcmVzZWVkPTF9LEUucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKGssQixOLFYpe2lmKHRoaXMuX3Jlc2VlZD50aGlzLnJl'@;
put 'c2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcigiUmVzZWVkIGlzIHJlcXVpcmVkIik7InN0cmluZyIhPXR5cGVvZiBCJiYoVj1OLE49QixCPW51bGwpLE4mJihOPVUudG9BcnJheShOLFZ8fCJoZXgiKSx0aGlzLl91cGRhdGUoTikpO2Zvcih2YXIgWj1bXTtaLmxlbmd0aDxrOyl0aGlzLlY9'@;
put 'dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLFo9Wi5jb25jYXQodGhpcy5WKTt2YXIgVz1aLnNsaWNlKDAsayk7cmV0dXJuIHRoaXMuX3VwZGF0ZShOKSx0aGlzLl9yZXNlZWQrKyxVLmVuY29kZShXLEIpfX0sNjQ1Oih3LEEpPT57QS5yZWFkPWZ1bmN0aW9uKEQsUCxVLEks'@;
put 'RSl7dmFyIGssQixOPTgqRS1JLTEsVj0oMTw8TiktMSxaPVY+PjEsVz0tNyx6PVU/RS0xOjAscT1VPy0xOjEsUT1EW1Arel07Zm9yKHorPXEsaz1RJigxPDwtVyktMSxRPj49LVcsVys9TjtXPjA7az0yNTYqaytEW1Arel0seis9cSxXLT04KTtmb3IoQj1rJigxPDwtVyktMSxrPj49LVcsVys9'@;
put 'STtXPjA7Qj0yNTYqQitEW1Arel0seis9cSxXLT04KTtpZigwPT09aylrPTEtWjtlbHNle2lmKGs9PT1WKXJldHVybiBCP05hTjoxLzAqKFE/LTE6MSk7Qis9TWF0aC5wb3coMixJKSxrLT1afXJldHVybihRPy0xOjEpKkIqTWF0aC5wb3coMixrLUkpfSxBLndyaXRlPWZ1bmN0aW9uKEQsUCxV'@;
put 'LEksRSxrKXt2YXIgQixOLFYsWj04KmstRS0xLFc9KDE8PFopLTEsej1XPj4xLHE9MjM9PT1FP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxRPUk/MDprLTEsdGU9ST8xOi0xLGFlPVA8MHx8MD09PVAmJjEvUDwwPzE6MDtmb3IoUD1NYXRoLmFicyhQKSxpc05hTihQKXx8UD09'@;
put 'PTEvMD8oTj1pc05hTihQKT8xOjAsQj1XKTooQj1NYXRoLmZsb29yKE1hdGgubG9nKFApL01hdGguTE4yKSxQKihWPU1hdGgucG93KDIsLUIpKTwxJiYoQi0tLFYqPTIpLChQKz1CK3o+PTE/cS9WOnEqTWF0aC5wb3coMiwxLXopKSpWPj0yJiYoQisrLFYvPTIpLEIrej49Vz8oTj0wLEI9Vyk6'@;
put 'Qit6Pj0xPyhOPShQKlYtMSkqTWF0aC5wb3coMixFKSxCKz16KTooTj1QKk1hdGgucG93KDIsei0xKSpNYXRoLnBvdygyLEUpLEI9MCkpO0U+PTg7RFtVK1FdPTI1NSZOLFErPXRlLE4vPTI1NixFLT04KTtmb3IoQj1CPDxFfE4sWis9RTtaPjA7RFtVK1FdPTI1NSZCLFErPXRlLEIvPTI1Nixa'@;
put 'LT04KTtEW1UrUS10ZV18PTEyOCphZX19LDc4NDQ6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSksVT1EKDI0NzkpLEk9T2JqZWN0LmNyZWF0ZShudWxsKSxFPUQoNzc4KTt3LmV4cG9ydHM9VShmdW5jdGlvbihrLEIpe3JldHVybiBJW2tdPyhJW2tdLnB1c2goQiksbnVsbCk6KElba109W0JdLE49'@;
put 'ayxFKGZ1bmN0aW9uIFYoKXt2YXIgWj1JW05dLFc9Wi5sZW5ndGgsej1mdW5jdGlvbihRKXtmb3IodmFyIHRlPVEubGVuZ3RoLGFlPVtdLHNlPTA7c2U8dGU7c2UrKylhZVtzZV09UVtzZV07cmV0dXJuIGFlfShhcmd1bWVudHMpO3RyeXtmb3IodmFyIHE9MDtxPFc7cSsrKVpbcV0uYXBwbHko'@;
put 'bnVsbCx6KX1maW5hbGx5e1oubGVuZ3RoPlc/KFouc3BsaWNlKDAsVyksUC5uZXh0VGljayhmdW5jdGlvbigpe1YuYXBwbHkobnVsbCx6KX0pKTpkZWxldGUgSVtOXX19KSk7dmFyIE59KX0sNTcxNzp3PT57dy5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0'@;
put 'aW9uKEEsRCl7RCYmKEEuc3VwZXJfPUQsQS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShELnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkEsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSkpfTpmdW5jdGlvbihBLEQpe2lmKEQpe0Euc3VwZXJfPUQ7dmFy'@;
put 'IFA9ZnVuY3Rpb24oKXt9O1AucHJvdG90eXBlPUQucHJvdG90eXBlLEEucHJvdG90eXBlPW5ldyBQLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUF9fX0sMjU4NDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNjQxMCkoKSxVPUQoMTkyNCkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJp'@;
put 'bmciKSxJPWZ1bmN0aW9uKEIpe3JldHVybiEoUCYmQiYmIm9iamVjdCI9PXR5cGVvZiBCJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gQikmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09VShCKX0sRT1mdW5jdGlvbihCKXtyZXR1cm4hIUkoQil8fG51bGwhPT1CJiYib2JqZWN0Ij09dHlwZW9mIEIm'@;
put 'JiJudW1iZXIiPT10eXBlb2YgQi5sZW5ndGgmJkIubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iIT09VShCKSYmIltvYmplY3QgRnVuY3Rpb25dIj09PVUoQi5jYWxsZWUpfSxrPWZ1bmN0aW9uKCl7cmV0dXJuIEkoYXJndW1lbnRzKX0oKTtJLmlzTGVnYWN5QXJndW1lbnRzPUUsdy5leHBv'@;
put 'cnRzPWs/STpFfSw1MzIwOnc9PnsidXNlIHN0cmljdCI7dmFyIEEsRCxQPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxVPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3QuYXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFUmJiJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0E9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyBEfX0pLEQ9e30sVShmdW5jdGlvbigpe3Rocm93IDQyfSxudWxsLEEpfWNhdGNoKHope3ohPT1EJiYoVT1udWxsKX1lbHNlIFU9'@;
put 'bnVsbDt2YXIgST0vXlxzKmNsYXNzXGIvLEU9ZnVuY3Rpb24oeil7dHJ5e3ZhciBxPVAuY2FsbCh6KTtyZXR1cm4gSS50ZXN0KHEpfWNhdGNoe3JldHVybiExfX0saz1mdW5jdGlvbih6KXt0cnl7cmV0dXJuIUUoeikmJihQLmNhbGwoeiksITApfWNhdGNoe3JldHVybiExfX0sQj1PYmplY3Qu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nLE49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmISFTeW1ib2wudG9TdHJpbmdUYWcsVj0hKDAgaW5bLF0pLFo9ZnVuY3Rpb24oKXtyZXR1cm4hMX07aWYoIm9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCl7dmFyIFc9ZG9jdW1lbnQuYWxsO0IuY2FsbChXKT09'@;
put 'PUIuY2FsbChkb2N1bWVudC5hbGwpJiYoWj1mdW5jdGlvbih6KXtpZigoVnx8IXopJiYodm9pZCAwPT09enx8Im9iamVjdCI9PXR5cGVvZiB6KSl0cnl7dmFyIHE9Qi5jYWxsKHopO3JldHVybigiW29iamVjdCBIVE1MQWxsQ29sbGVjdGlvbl0iPT09cXx8IltvYmplY3QgSFRNTCBkb2N1bWVu'@;
put 'dC5hbGwgY2xhc3NdIj09PXF8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1xfHwiW29iamVjdCBPYmplY3RdIj09PXEpJiZudWxsPT16KCIiKX1jYXRjaHt9cmV0dXJuITF9KX13LmV4cG9ydHM9VT9mdW5jdGlvbih6KXtpZihaKHopKXJldHVybiEwO2lmKCF6fHwiZnVuY3Rpb24iIT10'@;
put 'eXBlb2YgeiYmIm9iamVjdCIhPXR5cGVvZiB6KXJldHVybiExO3RyeXtVKHosbnVsbCxBKX1jYXRjaChxKXtpZihxIT09RClyZXR1cm4hMX1yZXR1cm4hRSh6KSYmayh6KX06ZnVuY3Rpb24oeil7aWYoWih6KSlyZXR1cm4hMDtpZighenx8ImZ1bmN0aW9uIiE9dHlwZW9mIHomJiJvYmplY3Qi'@;
put 'IT10eXBlb2YgeilyZXR1cm4hMTtpZihOKXJldHVybiBrKHopO2lmKEUoeikpcmV0dXJuITE7dmFyIHE9Qi5jYWxsKHopO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXEmJiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSIhPT1xJiYhL15cW29iamVjdCBIVE1MLy50ZXN0KHEpKSYm'@;
put 'ayh6KX19LDg2NjI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsST1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsRT0vXlxzKig/OmZ1bmN0aW9uKT9cKi8saz1EKDY0MTApKCksQj1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7dy5leHBv'@;
put 'cnRzPWZ1bmN0aW9uKE4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBOKXJldHVybiExO2lmKEUudGVzdChJLmNhbGwoTikpKXJldHVybiEwO2lmKCFrKXJldHVybiJbb2JqZWN0IEdlbmVyYXRvckZ1bmN0aW9uXSI9PT1VLmNhbGwoTik7aWYoIUIpcmV0dXJuITE7aWYodm9pZCAwPT09UCl7dmFy'@;
put 'IFY9ZnVuY3Rpb24oKXtpZighaylyZXR1cm4hMTt0cnl7cmV0dXJuIEZ1bmN0aW9uKCJyZXR1cm4gZnVuY3Rpb24qKCkge30iKSgpfWNhdGNoe319KCk7UD0hIVYmJkIoVil9cmV0dXJuIEIoTik9PT1QfX0sODYxMTp3PT57InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1mdW5jdGlvbihBKXtyZXR1'@;
put 'cm4gQSE9QX19LDM2MDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNTU1OSksVT1EKDQyODkpLEk9RCg4NjExKSxFPUQoOTQxNSksaz1EKDMxOTQpLEI9UChFKCksTnVtYmVyKTtVKEIse2dldFBvbHlmaWxsOkUsaW1wbGVtZW50YXRpb246SSxzaGltOmt9KSx3LmV4cG9ydHM9Qn0s'@;
put 'OTQxNToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoODYxMSk7dy5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5pc05hTiYmTnVtYmVyLmlzTmFOKE5hTikmJiFOdW1iZXIuaXNOYU4oImEiKT9OdW1iZXIuaXNOYU46UH19LDMxOTQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgUD1EKDQyODkpLFU9RCg5NDE1KTt3LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgST1VKCk7cmV0dXJuIFAoTnVtYmVyLHtpc05hTjpJfSx7aXNOYU46ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09SX19KSxJfX0sNTY5MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQ'@;
put 'PUQoNDAyOSksVT1EKDMwODMpLEk9RCgxOTI0KSxFPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxrPUQoNjQxMCkoKSxCPUQoNzI5NiksTj10eXBlb2YgZ2xvYmFsVGhpcz4idSI/RC5nOmdsb2JhbFRoaXMsVj1VKCksWj1JKCJBcnJheS5wcm90b3R5cGUuaW5kZXhPZiIsITApfHxm'@;
put 'dW5jdGlvbihRLHRlKXtmb3IodmFyIGFlPTA7YWU8US5sZW5ndGg7YWUrPTEpaWYoUVthZV09PT10ZSlyZXR1cm4gYWU7cmV0dXJuLTF9LFc9SSgiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLHo9e30scT1PYmplY3QuZ2V0UHJvdG90eXBlT2Y7ayYmQiYmcSYmUChWLGZ1bmN0aW9uKFEpe3Zh'@;
put 'ciB0ZT1uZXcgTltRXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gdGUpe3ZhciBhZT1xKHRlKSxzZT1CKGFlLFN5bWJvbC50b1N0cmluZ1RhZyk7aWYoIXNlKXt2YXIgZGU9cShhZSk7c2U9QihkZSxTeW1ib2wudG9TdHJpbmdUYWcpfXpbUV09c2UuZ2V0fX0pLHcuZXhwb3J0cz1mdW5jdGlv'@;
put 'bihRKXtpZighUXx8Im9iamVjdCIhPXR5cGVvZiBRKXJldHVybiExO2lmKCFrfHwhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBRKSl7dmFyIHRlPVcoRShRKSw4LC0xKTtyZXR1cm4gWihWLHRlKT4tMX1yZXR1cm4hIUImJihhZT1RLHNlPSExLFAoeixmdW5jdGlvbihkZSxsZSl7aWYoIXNlKXRy'@;
put 'eXtzZT1kZS5jYWxsKGFlKT09PWxlfWNhdGNoe319KSxzZSk7dmFyIGFlLHNlfX0sNjgxMzoodyxBLEQpPT57bGV0IFA7dHJ5e1A9RCg3Nyl9Y2F0Y2h7UD1EKDQxMjkpfWNvbnN0IFU9RCg4OTgxKSx7c3RyaW5naWZ5Okksc3RyaXBCb206RX09RCg2NzgwKSxrPXtyZWFkRmlsZTpVLmZyb21Q'@;
put 'cm9taXNlKGZ1bmN0aW9uKCl7dmFyIEI9ZWUoZnVuY3Rpb24qKE4sVj17fSl7InN0cmluZyI9PXR5cGVvZiBWJiYoVj17ZW5jb2Rpbmc6Vn0pO2NvbnN0IFo9Vi5mc3x8UCxXPSEoInRocm93cyJpbiBWKXx8Vi50aHJvd3M7bGV0IHoscT15aWVsZCBVLmZyb21DYWxsYmFjayhaLnJlYWRGaWxl'@;
put 'KShOLFYpO3E9RShxKTt0cnl7ej1KU09OLnBhcnNlKHEsVj9WLnJldml2ZXI6bnVsbCl9Y2F0Y2goUSl7aWYoVyl0aHJvdyBRLm1lc3NhZ2U9YCR7Tn06ICR7US5tZXNzYWdlfWAsUTtyZXR1cm4gbnVsbH1yZXR1cm4gen0pO3JldHVybiBmdW5jdGlvbihOKXtyZXR1cm4gQi5hcHBseSh0aGlz'@;
put 'LGFyZ3VtZW50cyl9fSgpKSxyZWFkRmlsZVN5bmM6ZnVuY3Rpb24oQixOPXt9KXsic3RyaW5nIj09dHlwZW9mIE4mJihOPXtlbmNvZGluZzpOfSk7Y29uc3QgVj1OLmZzfHxQLFo9ISgidGhyb3dzImluIE4pfHxOLnRocm93czt0cnl7bGV0IFc9Vi5yZWFkRmlsZVN5bmMoQixOKTtyZXR1cm4g'@;
put 'Vz1FKFcpLEpTT04ucGFyc2UoVyxOLnJldml2ZXIpfWNhdGNoKFcpe2lmKFopdGhyb3cgVy5tZXNzYWdlPWAke0J9OiAke1cubWVzc2FnZX1gLFc7cmV0dXJuIG51bGx9fSx3cml0ZUZpbGU6VS5mcm9tUHJvbWlzZShmdW5jdGlvbigpe3ZhciBCPWVlKGZ1bmN0aW9uKihOLFYsWj17fSl7Y29u'@;
put 'c3QgVz1aLmZzfHxQLHo9SShWLFopO3lpZWxkIFUuZnJvbUNhbGxiYWNrKFcud3JpdGVGaWxlKShOLHosWil9KTtyZXR1cm4gZnVuY3Rpb24oTixWKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx3cml0ZUZpbGVTeW5jOmZ1bmN0aW9uKEIsTixWPXt9KXtjb25zdCBaPVYu'@;
put 'ZnN8fFAsVz1JKE4sVik7cmV0dXJuIFoud3JpdGVGaWxlU3luYyhCLFcsVil9fTt3LmV4cG9ydHM9a30sNjc4MDoodyxBLEQpPT57dmFyIFA9RCg4NzY0KS5CdWZmZXI7dy5leHBvcnRzPXtzdHJpbmdpZnk6ZnVuY3Rpb24oVSx7RU9MOkk9IlxuIixmaW5hbEVPTDpFPSEwLHJlcGxhY2VyOms9'@;
put 'bnVsbCxzcGFjZXM6Qn09e30pe2NvbnN0IE49RT9JOiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShVLGssQikucmVwbGFjZSgvXG4vZyxJKStOfSxzdHJpcEJvbTpmdW5jdGlvbihVKXtyZXR1cm4gUC5pc0J1ZmZlcihVKSYmKFU9VS50b1N0cmluZygidXRmOCIpKSxVLnJlcGxhY2UoL15cdUZF'@;
put 'RkYvLCIiKX19fSw2MjQ1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gUChCKXt0aGlzLm1lc3NhZ2U9Qn1ELnIoQSksRC5kKEEse0ludmFsaWRUb2tlbkVycm9yOigpPT5FLGRlZmF1bHQ6KCk9Pmt9KSwoUC5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFj'@;
put 'dGVyRXJyb3IiO3ZhciBVPXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihCKXt2YXIgTj1TdHJpbmcoQikucmVwbGFjZSgvPSskLywiIik7aWYoTi5sZW5ndGglND09MSl0aHJvdyBuZXcgUCgiJ2F0b2InIGZhaWxlZDog'@;
put 'VGhlIHN0cmluZyB0byBiZSBkZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIFYsWixXPTAsej0wLHE9IiI7Wj1OLmNoYXJBdCh6KyspO35aJiYoVj1XJTQ/NjQqVitaOlosVysrJTQpP3ErPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JlY+PigtMipXJjYpKTowKVo9'@;
put 'IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKFopO3JldHVybiBxfTtmdW5jdGlvbiBFKEIpe3RoaXMubWVzc2FnZT1CfShFLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9y'@;
put 'Ijtjb25zdCBrPWZ1bmN0aW9uKEIsTil7aWYoInN0cmluZyIhPXR5cGVvZiBCKXRocm93IG5ldyBFKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZCIpO3ZhciBWPSEwPT09KE49Tnx8e30pLmhlYWRlcj8wOjE7dHJ5e3JldHVybiBKU09OLnBhcnNlKGZ1bmN0aW9uIEkoQil7dmFyIE49Qi5yZXBs'@;
put 'YWNlKC8tL2csIisiKS5yZXBsYWNlKC9fL2csIi8iKTtzd2l0Y2goTi5sZW5ndGglNCl7Y2FzZSAwOmJyZWFrO2Nhc2UgMjpOKz0iPT0iO2JyZWFrO2Nhc2UgMzpOKz0iPSI7YnJlYWs7ZGVmYXVsdDp0aHJvdyJJbGxlZ2FsIGJhc2U2NHVybCBzdHJpbmchIn10cnl7cmV0dXJuIGRlY29kZVVS'@;
put 'SUNvbXBvbmVudChVKE4pLnJlcGxhY2UoLyguKS9nLGZ1bmN0aW9uKFosVyl7dmFyIHo9Vy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiB6Lmxlbmd0aDwyJiYoej0iMCIreiksIiUiK3p9KSl9Y2F0Y2h7cmV0dXJuIFUoTil9fShCLnNwbGl0KCIuIilb'@;
put 'Vl0pKX1jYXRjaChaKXt0aHJvdyBuZXcgRSgiSW52YWxpZCB0b2tlbiBzcGVjaWZpZWQ6ICIrWi5tZXNzYWdlKX19fSwyMzE4Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg1NzE3KSxVPUQoMzM0OSksST1EKDk1MDkpLkJ1ZmZlcixFPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gaygp'@;
put 'e1UuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBCKHoscSl7cmV0dXJuIHo8PHF8ej4+PjMyLXF9ZnVuY3Rpb24gTih6LHEsUSx0ZSxhZSxzZSxkZSl7cmV0dXJu'@;
put 'IEIoeisocSZRfH5xJnRlKSthZStzZXwwLGRlKStxfDB9ZnVuY3Rpb24gVih6LHEsUSx0ZSxhZSxzZSxkZSl7cmV0dXJuIEIoeisocSZ0ZXxRJn50ZSkrYWUrc2V8MCxkZSkrcXwwfWZ1bmN0aW9uIFooeixxLFEsdGUsYWUsc2UsZGUpe3JldHVybiBCKHorKHFeUV50ZSkrYWUrc2V8MCxkZSkr'@;
put 'cXwwfWZ1bmN0aW9uIFcoeixxLFEsdGUsYWUsc2UsZGUpe3JldHVybiBCKHorKFFeKHF8fnRlKSkrYWUrc2V8MCxkZSkrcXwwfVAoayxVKSxrLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciB6PUUscT0wO3E8MTY7KytxKXpbcV09dGhpcy5fYmxvY2sucmVhZEludDMyTEUo'@;
put 'NCpxKTt2YXIgUT10aGlzLl9hLHRlPXRoaXMuX2IsYWU9dGhpcy5fYyxzZT10aGlzLl9kO1E9TihRLHRlLGFlLHNlLHpbMF0sMzYxNDA5MDM2MCw3KSxzZT1OKHNlLFEsdGUsYWUselsxXSwzOTA1NDAyNzEwLDEyKSxhZT1OKGFlLHNlLFEsdGUselsyXSw2MDYxMDU4MTksMTcpLHRlPU4odGUs'@;
put 'YWUsc2UsUSx6WzNdLDMyNTA0NDE5NjYsMjIpLFE9TihRLHRlLGFlLHNlLHpbNF0sNDExODU0ODM5OSw3KSxzZT1OKHNlLFEsdGUsYWUsels1XSwxMjAwMDgwNDI2LDEyKSxhZT1OKGFlLHNlLFEsdGUsels2XSwyODIxNzM1OTU1LDE3KSx0ZT1OKHRlLGFlLHNlLFEsels3XSw0MjQ5MjYxMzEz'@;
put 'LDIyKSxRPU4oUSx0ZSxhZSxzZSx6WzhdLDE3NzAwMzU0MTYsNyksc2U9TihzZSxRLHRlLGFlLHpbOV0sMjMzNjU1Mjg3OSwxMiksYWU9TihhZSxzZSxRLHRlLHpbMTBdLDQyOTQ5MjUyMzMsMTcpLHRlPU4odGUsYWUsc2UsUSx6WzExXSwyMzA0NTYzMTM0LDIyKSxRPU4oUSx0ZSxhZSxzZSx6'@;
put 'WzEyXSwxODA0NjAzNjgyLDcpLHNlPU4oc2UsUSx0ZSxhZSx6WzEzXSw0MjU0NjI2MTk1LDEyKSxhZT1OKGFlLHNlLFEsdGUselsxNF0sMjc5Mjk2NTAwNiwxNyksUT1WKFEsdGU9Tih0ZSxhZSxzZSxRLHpbMTVdLDEyMzY1MzUzMjksMjIpLGFlLHNlLHpbMV0sNDEyOTE3MDc4Niw1KSxzZT1W'@;
put 'KHNlLFEsdGUsYWUsels2XSwzMjI1NDY1NjY0LDkpLGFlPVYoYWUsc2UsUSx0ZSx6WzExXSw2NDM3MTc3MTMsMTQpLHRlPVYodGUsYWUsc2UsUSx6WzBdLDM5MjEwNjk5OTQsMjApLFE9VihRLHRlLGFlLHNlLHpbNV0sMzU5MzQwODYwNSw1KSxzZT1WKHNlLFEsdGUsYWUselsxMF0sMzgwMTYw'@;
put 'ODMsOSksYWU9VihhZSxzZSxRLHRlLHpbMTVdLDM2MzQ0ODg5NjEsMTQpLHRlPVYodGUsYWUsc2UsUSx6WzRdLDM4ODk0Mjk0NDgsMjApLFE9VihRLHRlLGFlLHNlLHpbOV0sNTY4NDQ2NDM4LDUpLHNlPVYoc2UsUSx0ZSxhZSx6WzE0XSwzMjc1MTYzNjA2LDkpLGFlPVYoYWUsc2UsUSx0ZSx6'@;
put 'WzNdLDQxMDc2MDMzMzUsMTQpLHRlPVYodGUsYWUsc2UsUSx6WzhdLDExNjM1MzE1MDEsMjApLFE9VihRLHRlLGFlLHNlLHpbMTNdLDI4NTAyODU4MjksNSksc2U9VihzZSxRLHRlLGFlLHpbMl0sNDI0MzU2MzUxMiw5KSxhZT1WKGFlLHNlLFEsdGUsels3XSwxNzM1MzI4NDczLDE0KSxRPVoo'@;
put 'USx0ZT1WKHRlLGFlLHNlLFEselsxMl0sMjM2ODM1OTU2MiwyMCksYWUsc2Usels1XSw0Mjk0NTg4NzM4LDQpLHNlPVooc2UsUSx0ZSxhZSx6WzhdLDIyNzIzOTI4MzMsMTEpLGFlPVooYWUsc2UsUSx0ZSx6WzExXSwxODM5MDMwNTYyLDE2KSx0ZT1aKHRlLGFlLHNlLFEselsxNF0sNDI1OTY1'@;
put 'Nzc0MCwyMyksUT1aKFEsdGUsYWUsc2UselsxXSwyNzYzOTc1MjM2LDQpLHNlPVooc2UsUSx0ZSxhZSx6WzRdLDEyNzI4OTMzNTMsMTEpLGFlPVooYWUsc2UsUSx0ZSx6WzddLDQxMzk0Njk2NjQsMTYpLHRlPVoodGUsYWUsc2UsUSx6WzEwXSwzMjAwMjM2NjU2LDIzKSxRPVooUSx0ZSxhZSxz'@;
put 'ZSx6WzEzXSw2ODEyNzkxNzQsNCksc2U9WihzZSxRLHRlLGFlLHpbMF0sMzkzNjQzMDA3NCwxMSksYWU9WihhZSxzZSxRLHRlLHpbM10sMzU3MjQ0NTMxNywxNiksdGU9Wih0ZSxhZSxzZSxRLHpbNl0sNzYwMjkxODksMjMpLFE9WihRLHRlLGFlLHNlLHpbOV0sMzY1NDYwMjgwOSw0KSxzZT1a'@;
put 'KHNlLFEsdGUsYWUselsxMl0sMzg3MzE1MTQ2MSwxMSksYWU9WihhZSxzZSxRLHRlLHpbMTVdLDUzMDc0MjUyMCwxNiksUT1XKFEsdGU9Wih0ZSxhZSxzZSxRLHpbMl0sMzI5OTYyODY0NSwyMyksYWUsc2UselswXSw0MDk2MzM2NDUyLDYpLHNlPVcoc2UsUSx0ZSxhZSx6WzddLDExMjY4OTE0'@;
put 'MTUsMTApLGFlPVcoYWUsc2UsUSx0ZSx6WzE0XSwyODc4NjEyMzkxLDE1KSx0ZT1XKHRlLGFlLHNlLFEsels1XSw0MjM3NTMzMjQxLDIxKSxRPVcoUSx0ZSxhZSxzZSx6WzEyXSwxNzAwNDg1NTcxLDYpLHNlPVcoc2UsUSx0ZSxhZSx6WzNdLDIzOTk5ODA2OTAsMTApLGFlPVcoYWUsc2UsUSx0'@;
put 'ZSx6WzEwXSw0MjkzOTE1NzczLDE1KSx0ZT1XKHRlLGFlLHNlLFEselsxXSwyMjQwMDQ0NDk3LDIxKSxRPVcoUSx0ZSxhZSxzZSx6WzhdLDE4NzMzMTMzNTksNiksc2U9VyhzZSxRLHRlLGFlLHpbMTVdLDQyNjQzNTU1NTIsMTApLGFlPVcoYWUsc2UsUSx0ZSx6WzZdLDI3MzQ3Njg5MTYsMTUp'@;
put 'LHRlPVcodGUsYWUsc2UsUSx6WzEzXSwxMzA5MTUxNjQ5LDIxKSxRPVcoUSx0ZSxhZSxzZSx6WzRdLDQxNDk0NDQyMjYsNiksc2U9VyhzZSxRLHRlLGFlLHpbMTFdLDMxNzQ3NTY5MTcsMTApLGFlPVcoYWUsc2UsUSx0ZSx6WzJdLDcxODc4NzI1OSwxNSksdGU9Vyh0ZSxhZSxzZSxRLHpbOV0s'@;
put 'Mzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1F8MCx0aGlzLl9iPXRoaXMuX2IrdGV8MCx0aGlzLl9jPXRoaXMuX2MrYWV8MCx0aGlzLl9kPXRoaXMuX2Qrc2V8MH0say5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEy'@;
put 'OCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQz'@;
put 'MkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciB6PUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiB6LndyaXRlSW50MzJMRSh0aGlzLl9hLDApLHoud3JpdGVJbnQzMkxFKHRoaXMuX2Is'@;
put 'NCksei53cml0ZUludDMyTEUodGhpcy5fYyw4KSx6LndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSx6fSx3LmV4cG9ydHM9a30sMzA0NzoodyxBLEQpPT57dmFyIFA9RCg2MjQwKSxVPUQoOTkzMSk7ZnVuY3Rpb24gSShFKXt0aGlzLnJhbmQ9RXx8bmV3IFUuUmFuZH13LmV4cG9ydHM9SSxJLmNy'@;
put 'ZWF0ZT1mdW5jdGlvbihFKXtyZXR1cm4gbmV3IEkoRSl9LEkucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24oRSl7dmFyIGs9RS5iaXRMZW5ndGgoKSxCPU1hdGguY2VpbChrLzgpO2Rve3ZhciBOPW5ldyBQKHRoaXMucmFuZC5nZW5lcmF0ZShCKSl9d2hpbGUoTi5jbXAoRSk+PTApO3Jl'@;
put 'dHVybiBOfSxJLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKEUsayl7dmFyIEI9ay5zdWIoRSk7cmV0dXJuIEUuYWRkKHRoaXMuX3JhbmRiZWxvdyhCKSl9LEkucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24oRSxrLEIpe3ZhciBOPUUuYml0TGVuZ3RoKCksVj1QLm1vbnQoRSksWj1uZXcg'@;
put 'UCgxKS50b1JlZChWKTtrfHwoaz1NYXRoLm1heCgxLE4vNDh8MCkpO2Zvcih2YXIgVz1FLnN1Ym4oMSksej0wOyFXLnRlc3RuKHopO3orKyk7Zm9yKHZhciBxPUUuc2hybih6KSxRPVcudG9SZWQoVik7az4wO2stLSl7dmFyIHRlPXRoaXMuX3JhbmRyYW5nZShuZXcgUCgyKSxXKTtCJiZCKHRl'@;
put 'KTt2YXIgYWU9dGUudG9SZWQoVikucmVkUG93KHEpO2lmKDAhPT1hZS5jbXAoWikmJjAhPT1hZS5jbXAoUSkpe2Zvcih2YXIgc2U9MTtzZTx6O3NlKyspe2lmKDA9PT0oYWU9YWUucmVkU3FyKCkpLmNtcChaKSlyZXR1cm4hMTtpZigwPT09YWUuY21wKFEpKWJyZWFrfWlmKHNlPT09eilyZXR1'@;
put 'cm4hMX19cmV0dXJuITB9LEkucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24oRSxrKXt2YXIgQj1FLmJpdExlbmd0aCgpLE49UC5tb250KEUpLFY9bmV3IFAoMSkudG9SZWQoTik7a3x8KGs9TWF0aC5tYXgoMSxCLzQ4fDApKTtmb3IodmFyIFo9RS5zdWJuKDEpLFc9MDshWi50ZXN0bihX'@;
put 'KTtXKyspO2Zvcih2YXIgej1FLnNocm4oVykscT1aLnRvUmVkKE4pO2s+MDtrLS0pe3ZhciBRPXRoaXMuX3JhbmRyYW5nZShuZXcgUCgyKSxaKSx0ZT1FLmdjZChRKTtpZigwIT09dGUuY21wbigxKSlyZXR1cm4gdGU7dmFyIGFlPVEudG9SZWQoTikucmVkUG93KHopO2lmKDAhPT1hZS5jbXAo'@;
put 'VikmJjAhPT1hZS5jbXAocSkpe2Zvcih2YXIgc2U9MTtzZTxXO3NlKyspe2lmKDA9PT0oYWU9YWUucmVkU3FyKCkpLmNtcChWKSlyZXR1cm4gYWUuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKEUpO2lmKDA9PT1hZS5jbXAocSkpYnJlYWt9aWYoc2U9PT1XKXJldHVybihhZT1hZS5yZWRTcXIoKSku'@;
put 'ZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKEUpfX1yZXR1cm4hMX19LDYyNDA6ZnVuY3Rpb24odyxBLEQpeyFmdW5jdGlvbihQLFUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKGcsUyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKFN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gRShnLFMpe2cu'@;
put 'c3VwZXJfPVM7dmFyIHg9ZnVuY3Rpb24oKXt9O3gucHJvdG90eXBlPVMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyB4LGcucHJvdG90eXBlLmNvbnN0cnVjdG9yPWd9ZnVuY3Rpb24gayhnLFMseCl7aWYoay5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51'@;
put 'bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PVMmJiJiZSIhPT1TfHwoeD1TLFM9MTApLHRoaXMuX2luaXQoZ3x8MCxTfHwxMCx4fHwiYmUiKSl9dmFyIEI7Im9iamVjdCI9PXR5cGVvZiBQP1AuZXhwb3J0cz1rOlUuQk49ayxrLkJOPWssay53b3JkU2l6'@;
put 'ZT0yNjt0cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkQoNjYxOSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBOKGcsUyl7dmFyIHg9Zy5jaGFyQ29kZUF0KFMpO3JldHVybiB4Pj02NSYmeDw9NzA/eC01NTp4Pj05NyYmeDw9MTAy'@;
put 'P3gtODc6eC00OCYxNX1mdW5jdGlvbiBWKGcsUyx4KXt2YXIgXz1OKGcseCk7cmV0dXJuIHgtMT49UyYmKF98PU4oZyx4LTEpPDw0KSxffWZ1bmN0aW9uIFooZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz1NYXRoLm1pbihnLmxlbmd0aCx4KSxLPVM7SzxDO0srKyl7dmFyIG5lPWcuY2hhckNvZGVB'@;
put 'dChLKS00ODtwKj1fLHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9ay5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGluc3RhbmNlb2Yga3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWsud29yZFNp'@;
put 'emUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LGsubWF4PWZ1bmN0aW9uKGcsUyl7cmV0dXJuIGcuY21wKFMpPjA/ZzpTfSxrLm1pbj1mdW5jdGlvbihnLFMpe3JldHVybiBnLmNtcChTKTwwP2c6U30say5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxTLHgpe2lmKCJudW1iZXIiPT10eXBl'@;
put 'b2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLFMseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxTLHgpOyJoZXgiPT09UyYmKFM9MTYpLEkoUz09PSgwfFMpJiZTPj0yJiZTPD0zNik7dmFyIF89MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVw'@;
put 'bGFjZSgvXHMrL2csIiIpKVswXSYmKF8rKyx0aGlzLm5lZ2F0aXZlPTEpLF88Zy5sZW5ndGgmJigxNj09PVM/dGhpcy5fcGFyc2VIZXgoZyxfLHgpOih0aGlzLl9wYXJzZUJhc2UoZyxTLF8pLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksUyx4KSkpfSxrLnByb3Rv'@;
put 'dHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLFMseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0'@;
put 'JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFMseCl9LGsucHJvdG90'@;
put 'eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxTLHgpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcg'@;
put 'QXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0wO188dGhpcy5sZW5ndGg7XysrKXRoaXMud29yZHNbX109MDt2YXIgcCxDLEs9MDtpZigiYmUiPT09eClmb3IoXz1nLmxlbmd0aC0xLHA9MDtfPj0wO18tPTMpdGhpcy53b3Jkc1twXXw9KEM9Z1tfXXxnW18tMV08PDh8Z1tfLTJdPDwxNik8'@;
put 'PEsmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPUM+Pj4yNi1LJjY3MTA4ODYzLChLKz0yNCk+PTI2JiYoSy09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihfPTAscD0wO188Zy5sZW5ndGg7Xys9Myl0aGlzLndvcmRzW3BdfD0oQz1nW19dfGdbXysxXTw8OHxnW18rMl08PDE2KTw8SyY2'@;
put 'NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Qz4+PjI2LUsmNjcxMDg4NjMsKEsrPTI0KT49MjYmJihLLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLFMseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1TKS82KSx0'@;
put 'aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT0wO3ZhciBwLEM9MCxLPTA7aWYoImJlIj09PXgpZm9yKF89Zy5sZW5ndGgtMTtfPj1TO18tPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndvcmRzW0tdfD02NzEw'@;
put 'ODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRzW0srPTFdfD1wPj4+MjYpOkMrPTg7ZWxzZSBmb3IoXz0oZy5sZW5ndGgtUyklMj09MD9TKzE6UztfPGcubGVuZ3RoO18rPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndvcmRzW0tdfD02NzEwODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRz'@;
put 'W0srPTFdfD1wPj4+MjYpOkMrPTg7dGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsUyx4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgXz0wLHA9MTtwPD02NzEwODg2MztwKj1TKV8rKztfLS0scD1wL1N8MDtmb3IodmFyIEM9Zy5s'@;
put 'ZW5ndGgteCxLPUMlXyxuZT1NYXRoLm1pbihDLEMtSykreCx1ZT0wLGhlPXg7aGU8bmU7aGUrPV8pdWU9WihnLGhlLGhlK18sUyksdGhpcy5pbXVsbihwKSx0aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVlKTtpZigwIT09Syl7dmFyIHhl'@;
put 'PTE7Zm9yKHVlPVooZyxoZSxnLmxlbmd0aCxTKSxoZT0wO2hlPEs7aGUrKyl4ZSo9Uzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVlKX10aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24o'@;
put 'Zyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKWcud29yZHNbU109dGhpcy53b3Jkc1tTXTtnLmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LGsucHJvdG90eXBlLmNs'@;
put 'b25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IGsobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxrLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zvcig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS5zdHJp'@;
put 'cD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LGsucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10'@;
put 'aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxrLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAw'@;
put 'IiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHo9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4'@;
put 'MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1'@;
put 'NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBRKGcsUyx4KXt4Lm5lZ2F0aXZlPVMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgXz1nLmxlbmd0'@;
put 'aCtTLmxlbmd0aHwwO3gubGVuZ3RoPV8sXz1fLTF8MDt2YXIgcD0wfGcud29yZHNbMF0sQz0wfFMud29yZHNbMF0sSz1wKkMsdWU9Sy82NzEwODg2NHwwO3gud29yZHNbMF09NjcxMDg4NjMmSztmb3IodmFyIGhlPTE7aGU8XztoZSsrKXtmb3IodmFyIHhlPXVlPj4+MjYsT2U9NjcxMDg4NjMm'@;
put 'dWUsSGU9TWF0aC5taW4oaGUsUy5sZW5ndGgtMSksRWU9TWF0aC5tYXgoMCxoZS1nLmxlbmd0aCsxKTtFZTw9SGU7RWUrKyl4ZSs9KEs9KHA9MHxnLndvcmRzW2hlLUVlfDBdKSooQz0wfFMud29yZHNbRWVdKStPZSkvNjcxMDg4NjR8MCxPZT02NzEwODg2MyZLO3gud29yZHNbaGVdPTB8T2Us'@;
put 'dWU9MHx4ZX1yZXR1cm4gMCE9PXVlP3gud29yZHNbaGVdPTB8dWU6eC5sZW5ndGgtLSx4LnN0cmlwKCl9ay5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oZyxTKXt2YXIgeDtpZihTPTB8U3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgXz0wLHA9MCxDPTA7'@;
put 'Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBLPXRoaXMud29yZHNbQ10sbmU9KDE2Nzc3MjE1JihLPDxffHApKS50b1N0cmluZygxNik7eD0wIT0ocD1LPj4+MjQtXyYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP1dbNi1uZS5sZW5ndGhdK25lK3g6bmUreCwoXys9Mik+PTI2JiYoXy09MjYs'@;
put 'Qy0tKX1mb3IoMCE9PXAmJih4PXAudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJVMhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgdWU9eltnXSxoZT1xW2ddO3g9IiI7dmFyIHhlPXRoaXMuY2xv'@;
put 'bmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgT2U9eGUubW9kbihoZSkudG9TdHJpbmcoZyk7eD0oeGU9eGUuaWRpdm4oaGUpKS5pc1plcm8oKT9PZSt4OldbdWUtT2UubGVuZ3RoXStPZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglUyE9'@;
put 'MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0say5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/'@;
put 'Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJp'@;
put 'dHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGsucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIEkodm9pZCAwIT09QiksdGhpcy50b0FycmF5TGlrZShCLGcsUyl9'@;
put 'LGsucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLFMpfSxrLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihnLFMseCl7dmFyIF89dGhpcy5ieXRlTGVuZ3RoKCkscD14fHxNYXRoLm1heCgxLF8pO0koXzw9cCwiYnl0'@;
put 'ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEMsSyxuZT0ibGUiPT09Uyx1ZT1uZXcgZyhwKSxoZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihLPTA7IWhlLmlzWmVybygpO0sr'@;
put 'KylDPWhlLmFuZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW0tdPUM7Zm9yKDtLPHA7SysrKXVlW0tdPTB9ZWxzZXtmb3IoSz0wO0s8cC1fO0srKyl1ZVtLXT0wO2ZvcihLPTA7IWhlLmlzWmVybygpO0srKylDPWhlLmFuZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW3AtSy0xXT1DfXJldHVybiB1'@;
put 'ZX0say5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIgUz1nLHg9MDtyZXR1cm4gUz49NDA5NiYmKHgrPTEzLFM+Pj49MTMpLFM+PTY0JiYoeCs9NyxTPj4+PTcpLFM+PTgmJih4Kz00LFM+'@;
put 'Pj49NCksUz49MiYmKHgrPTIsUz4+Pj0yKSx4K1N9LGsucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIFM9Zyx4PTA7cmV0dXJuISg4MTkxJlMpJiYoeCs9MTMsUz4+Pj0xMyksISgxMjcmUykmJih4Kz03LFM+Pj49NyksISgxNSZTKSYmKHgr'@;
put 'PTQsUz4+Pj00KSwhKDMmUykmJih4Kz0yLFM+Pj49MiksISgxJlMpJiZ4KysseH0say5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFM9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrU30say5wcm90'@;
put 'b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tTXSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LGsucHJvdG90eXBl'@;
put 'LmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGsucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihnKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGsucHJv'@;
put 'dG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LGsucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxrLnByb3RvdHlwZS5uZWc9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0say5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30say5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVu'@;
put 'Z3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdfGcud29yZHNbU107cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5u'@;
put 'ZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxrLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxrLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxrLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihnKXt2YXIgUztTPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PFMubGVuZ3RoO3grKyl0aGlzLndv'@;
put 'cmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Uy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0say5wcm90b3R5'@;
put 'cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0say5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5k'@;
put 'KGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0say5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIFMseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10aGlzLHg9Zyk6KFM9Zyx4PXRoaXMpO2Zvcih2YXIgXz0wO188eC5sZW5ndGg7XysrKXRoaXMud29yZHNbX109Uy53b3Jkc1tfXV54'@;
put 'LndvcmRzW19dO2lmKHRoaXMhPT1TKWZvcig7XzxTLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT1TLndvcmRzW19dO3JldHVybiB0aGlzLmxlbmd0aD1TLmxlbmd0aCx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcu'@;
put 'bmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxrLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxrLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlz'@;
put 'Lmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxrLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihnKXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZChT'@;
put 'KSx4PjAmJlMtLTtmb3IodmFyIF89MDtfPFM7XysrKXRoaXMud29yZHNbX109NjcxMDg4NjMmfnRoaXMud29yZHNbX107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbX109fnRoaXMud29yZHNbX10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUubm90bj1mdW5jdGlv'@;
put 'bihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxrLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsUyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+PTApO3ZhciB4PWcvMjZ8MCxfPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Uz90aGlzLndvcmRz'@;
put 'W3hdfDE8PF86dGhpcy53b3Jkc1t4XSZ+KDE8PF8pLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgUyx4LF87aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsUz10aGlzLmlzdWIoZyksdGhpcy5u'@;
put 'ZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLFM9dGhpcy5pc3ViKGcpLGcubmVnYXRpdmU9MSxTLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsXz1nKTooeD1n'@;
put 'LF89dGhpcyk7Zm9yKHZhciBwPTAsQz0wO0M8Xy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKFM9KDB8eC53b3Jkc1tDXSkrKDB8Xy53b3Jkc1tDXSkrcCkscD1TPj4+MjY7Zm9yKDswIT09cCYmQzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoUz0oMHx4'@;
put 'LndvcmRzW0NdKStwKSxwPVM+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eC53b3Jkc1tDXTtyZXR1cm4gdGhp'@;
put 'c30say5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBTO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9MCxTPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsUyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5l'@;
put 'Z2F0aXZlPTAsUz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsUyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9uZSgpLmlhZGQodGhpcyl9LGsucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9'@;
put 'MDt2YXIgUz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxTLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciB4LF8scD10aGlzLmNtcChn'@;
put 'KTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyh4PXRoaXMsXz1nKTooeD1nLF89dGhpcyk7Zm9yKHZhciBDPTAsSz0wO0s8Xy5sZW5ndGg7SysrKUM9KFM9KDB8eC53b3Jkc1tLXSktKDB8Xy53b3Jkc1tLXSkr'@;
put 'Qyk+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmUztmb3IoOzAhPT1DJiZLPHgubGVuZ3RoO0srKylDPShTPSgwfHgud29yZHNbS10pK0MpPj4yNix0aGlzLndvcmRzW0tdPTY3MTA4ODYzJlM7aWYoMD09PUMmJks8eC5sZW5ndGgmJnghPT10aGlzKWZvcig7Szx4Lmxlbmd0aDtLKyspdGhp'@;
put 'cy53b3Jkc1tLXT14LndvcmRzW0tdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxLKSx4IT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2'@;
put 'YXIgdGU9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfLHAsQyxLPWcud29yZHMsbmU9Uy53b3Jkcyx1ZT14LndvcmRzLGhlPTAseGU9MHxLWzBdLE9lPTgxOTEmeGUsSGU9eGU+Pj4xMyxFZT0wfEtbMV0sTGU9ODE5MSZFZSxOZT1FZT4+PjEzLEtlPTB8S1syXSxVZT04MTkxJktlLFhlPUtlPj4+MTMs'@;
put 'YXQ9MHxLWzNdLEZlPTgxOTEmYXQsQ2U9YXQ+Pj4xMyxEZT0wfEtbNF0sUmU9ODE5MSZEZSxldD1EZT4+PjEzLG50PTB8S1s1XSxHZT04MTkxJm50LGR0PW50Pj4+MTMsVGU9MHxLWzZdLEFlPTgxOTEmVGUsQmU9VGU+Pj4xMyxvdD0wfEtbN10sbHQ9ODE5MSZvdCxDdD1vdD4+PjEzLEZ0PTB8'@;
put 'S1s4XSxSdD04MTkxJkZ0LFh0PUZ0Pj4+MTMsU249MHxLWzldLHp0PTgxOTEmU24sdm49U24+Pj4xMyxCbj0wfG5lWzBdLHRuPTgxOTEmQm4sWm49Qm4+Pj4xMyxPbj0wfG5lWzFdLHB0PTgxOTEmT24sZm49T24+Pj4xMyxkbj0wfG5lWzJdLE10PTgxOTEmZG4sWXQ9ZG4+Pj4xMyxfdD0wfG5l'@;
put 'WzNdLGp0PTgxOTEmX3QscG49X3Q+Pj4xMyxydD0wfG5lWzRdLEV0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxUdD0wfG5lWzVdLG10PTgxOTEmVHQsR3Q9VHQ+Pj4xMyxrbj0wfG5lWzZdLEJ0PTgxOTEma24sYm49a24+Pj4xMyxDbj0wfG5lWzddLGVuPTgxOTEmQ24sUG49Q24+Pj4xMyx3bj0wfG5l'@;
put 'WzhdLCR0PTgxOTEmd24sV249d24+Pj4xMyxjaT0wfG5lWzldLGxuPTgxOTEmY2ksbm49Y2k+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeUy5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgdWk9KGhlKyhfPU1hdGguaW11bChPZSx0bikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoT2Us'@;
put 'Wm4pKStNYXRoLmltdWwoSGUsdG4pfDApKTw8MTMpfDA7aGU9KChDPU1hdGguaW11bChIZSxabikpKyhwPj4+MTMpfDApKyh1aT4+PjI2KXwwLHVpJj02NzEwODg2MyxfPU1hdGguaW11bChMZSx0bikscD0ocD1NYXRoLmltdWwoTGUsWm4pKStNYXRoLmltdWwoTmUsdG4pfDAsQz1NYXRoLmlt'@;
put 'dWwoTmUsWm4pO3ZhciBBcj0oaGUrKF89XytNYXRoLmltdWwoT2UscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5pbXVsKEhlLHB0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxmbil8MCkrKHA+Pj4xMyl8MCkrKEFyPj4+MjYpfDAs'@;
put 'QXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKFVlLHRuKSxwPShwPU1hdGguaW11bChVZSxabikpK01hdGguaW11bChYZSx0bil8MCxDPU1hdGguaW11bChYZSxabiksXz1fK01hdGguaW11bChMZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoTmUscHQpfDAsQz1D'@;
put 'K01hdGguaW11bChOZSxmbil8MDt2YXIgbXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLE10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsWXQpfDApK01hdGguaW11bChIZSxNdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsWXQpfDApKyhwPj4+MTMpfDApKyht'@;
put 'cj4+PjI2KXwwLG1yJj02NzEwODg2MyxfPU1hdGguaW11bChGZSx0bikscD0ocD1NYXRoLmltdWwoRmUsWm4pKStNYXRoLmltdWwoQ2UsdG4pfDAsQz1NYXRoLmltdWwoQ2UsWm4pLF89XytNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFhl'@;
put 'LHB0KXwwLEM9QytNYXRoLmltdWwoWGUsZm4pfDAsXz1fK01hdGguaW11bChMZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwoTmUsTXQpfDAsQz1DK01hdGguaW11bChOZSxZdCl8MDt2YXIgeWk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGp0KXwwKXwwKSsoKDgx'@;
put 'OTEmKHA9KHA9cCtNYXRoLmltdWwoT2UscG4pfDApK01hdGguaW11bChIZSxqdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUscG4pfDApKyhwPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxfPU1hdGguaW11bChSZSx0bikscD0ocD1NYXRoLmltdWwoUmUsWm4p'@;
put 'KStNYXRoLmltdWwoZXQsdG4pfDAsQz1NYXRoLmltdWwoZXQsWm4pLF89XytNYXRoLmltdWwoRmUscHQpfDAscD0ocD1wK01hdGguaW11bChGZSxmbil8MCkrTWF0aC5pbXVsKENlLHB0KXwwLEM9QytNYXRoLmltdWwoQ2UsZm4pfDAsXz1fK01hdGguaW11bChVZSxNdCl8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoWGUsTXQpfDAsQz1DK01hdGguaW11bChYZSxZdCl8MCxfPV8rTWF0aC5pbXVsKExlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUscG4pfDApK01hdGguaW11bChOZSxqdCl8MCxDPUMrTWF0aC5pbXVsKE5lLHBuKXwwO3ZhciAkcj0oaGUrKF89'@;
put 'XytNYXRoLmltdWwoT2UsRXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKEhlLEV0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKCRyPj4+MjYpfDAsJHImPTY3MTA4ODYzLF89TWF0aC5pbXVs'@;
put 'KEdlLHRuKSxwPShwPU1hdGguaW11bChHZSxabikpK01hdGguaW11bChkdCx0bil8MCxDPU1hdGguaW11bChkdCxabiksXz1fK01hdGguaW11bChSZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoZXQscHQpfDAsQz1DK01hdGguaW11bChldCxmbil8MCxfPV8r'@;
put 'TWF0aC5pbXVsKEZlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWXQpfDApK01hdGguaW11bChDZSxNdCl8MCxDPUMrTWF0aC5pbXVsKENlLFl0KXwwLF89XytNYXRoLmltdWwoVWUsanQpfDAscD0ocD1wK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKFhlLGp0KXwwLEM9QytNYXRo'@;
put 'LmltdWwoWGUscG4pfDAsXz1fK01hdGguaW11bChMZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoTmUsRXQpfDAsQz1DK01hdGguaW11bChOZSxRdCl8MDt2YXIgSmk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLG10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwoT2UsR3QpfDApK01hdGguaW11bChIZSxtdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsR3QpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxfPU1hdGguaW11bChBZSx0bikscD0ocD1NYXRoLmltdWwoQWUsWm4pKStNYXRoLmltdWwoQmUs'@;
put 'dG4pfDAsQz1NYXRoLmltdWwoQmUsWm4pLF89XytNYXRoLmltdWwoR2UscHQpfDAscD0ocD1wK01hdGguaW11bChHZSxmbil8MCkrTWF0aC5pbXVsKGR0LHB0KXwwLEM9QytNYXRoLmltdWwoZHQsZm4pfDAsXz1fK01hdGguaW11bChSZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFl0KXww'@;
put 'KStNYXRoLmltdWwoZXQsTXQpfDAsQz1DK01hdGguaW11bChldCxZdCl8MCxfPV8rTWF0aC5pbXVsKEZlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4pfDApK01hdGguaW11bChDZSxqdCl8MCxDPUMrTWF0aC5pbXVsKENlLHBuKXwwLF89XytNYXRoLmltdWwoVWUsRXQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKFhlLEV0KXwwLEM9QytNYXRoLmltdWwoWGUsUXQpfDAsXz1fK01hdGguaW11bChMZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLEd0KXwwKStNYXRoLmltdWwoTmUsbXQpfDAsQz1DK01hdGguaW11bChOZSxHdCl8MDt2YXIgeXI9KGhl'@;
put 'KyhfPV8rTWF0aC5pbXVsKE9lLEJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsYm4pfDApK01hdGguaW11bChIZSxCdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsYm4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGgu'@;
put 'aW11bChsdCx0bikscD0ocD1NYXRoLmltdWwobHQsWm4pKStNYXRoLmltdWwoQ3QsdG4pfDAsQz1NYXRoLmltdWwoQ3QsWm4pLF89XytNYXRoLmltdWwoQWUscHQpfDAscD0ocD1wK01hdGguaW11bChBZSxmbil8MCkrTWF0aC5pbXVsKEJlLHB0KXwwLEM9QytNYXRoLmltdWwoQmUsZm4pfDAs'@;
put 'Xz1fK01hdGguaW11bChHZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFl0KXwwKStNYXRoLmltdWwoZHQsTXQpfDAsQz1DK01hdGguaW11bChkdCxZdCl8MCxfPV8rTWF0aC5pbXVsKFJlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChldCxqdCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKGV0LHBuKXwwLF89XytNYXRoLmltdWwoRmUsRXQpfDAscD0ocD1wK01hdGguaW11bChGZSxRdCl8MCkrTWF0aC5pbXVsKENlLEV0KXwwLEM9QytNYXRoLmltdWwoQ2UsUXQpfDAsXz1fK01hdGguaW11bChVZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEd0KXwwKStNYXRo'@;
put 'LmltdWwoWGUsbXQpfDAsQz1DK01hdGguaW11bChYZSxHdCl8MCxfPV8rTWF0aC5pbXVsKExlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsYm4pfDApK01hdGguaW11bChOZSxCdCl8MCxDPUMrTWF0aC5pbXVsKE5lLGJuKXwwO3ZhciBJaT0oaGUrKF89XytNYXRoLmltdWwoT2UsZW4pfDAp'@;
put 'fDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxQbil8MCkrTWF0aC5pbXVsKEhlLGVuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxQbil8MCkrKHA+Pj4xMyl8MCkrKElpPj4+MjYpfDAsSWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKFJ0LHRuKSxwPShwPU1hdGguaW11'@;
put 'bChSdCxabikpK01hdGguaW11bChYdCx0bil8MCxDPU1hdGguaW11bChYdCxabiksXz1fK01hdGguaW11bChsdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LGZuKXwwKStNYXRoLmltdWwoQ3QscHQpfDAsQz1DK01hdGguaW11bChDdCxmbil8MCxfPV8rTWF0aC5pbXVsKEFlLE10KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoQWUsWXQpfDApK01hdGguaW11bChCZSxNdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFl0KXwwLF89XytNYXRoLmltdWwoR2UsanQpfDAscD0ocD1wK01hdGguaW11bChHZSxwbil8MCkrTWF0aC5pbXVsKGR0LGp0KXwwLEM9QytNYXRoLmltdWwoZHQscG4pfDAsXz1fK01h'@;
put 'dGguaW11bChSZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFF0KXwwKStNYXRoLmltdWwoZXQsRXQpfDAsQz1DK01hdGguaW11bChldCxRdCl8MCxfPV8rTWF0aC5pbXVsKEZlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsR3QpfDApK01hdGguaW11bChDZSxtdCl8MCxDPUMrTWF0aC5p'@;
put 'bXVsKENlLEd0KXwwLF89XytNYXRoLmltdWwoVWUsQnQpfDAscD0ocD1wK01hdGguaW11bChVZSxibil8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEM9QytNYXRoLmltdWwoWGUsYm4pfDAsXz1fK01hdGguaW11bChMZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwo'@;
put 'TmUsZW4pfDAsQz1DK01hdGguaW11bChOZSxQbil8MDt2YXIgbm89KGhlKyhfPV8rTWF0aC5pbXVsKE9lLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsV24pfDApK01hdGguaW11bChIZSwkdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsV24pfDApKyhw'@;
put 'Pj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCx0bikscD0ocD1NYXRoLmltdWwoenQsWm4pKStNYXRoLmltdWwodm4sdG4pfDAsQz1NYXRoLmltdWwodm4sWm4pLF89XytNYXRoLmltdWwoUnQscHQpfDAscD0ocD1wK01hdGguaW11bChSdCxmbil8MCkr'@;
put 'TWF0aC5pbXVsKFh0LHB0KXwwLEM9QytNYXRoLmltdWwoWHQsZm4pfDAsXz1fK01hdGguaW11bChsdCxNdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFl0KXwwKStNYXRoLmltdWwoQ3QsTXQpfDAsQz1DK01hdGguaW11bChDdCxZdCl8MCxfPV8rTWF0aC5pbXVsKEFlLGp0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoQWUscG4pfDApK01hdGguaW11bChCZSxqdCl8MCxDPUMrTWF0aC5pbXVsKEJlLHBuKXwwLF89XytNYXRoLmltdWwoR2UsRXQpfDAscD0ocD1wK01hdGguaW11bChHZSxRdCl8MCkrTWF0aC5pbXVsKGR0LEV0KXwwLEM9QytNYXRoLmltdWwoZHQsUXQpfDAsXz1fK01hdGguaW11'@;
put 'bChSZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEd0KXwwKStNYXRoLmltdWwoZXQsbXQpfDAsQz1DK01hdGguaW11bChldCxHdCl8MCxfPV8rTWF0aC5pbXVsKEZlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsYm4pfDApK01hdGguaW11bChDZSxCdCl8MCxDPUMrTWF0aC5pbXVsKENl'@;
put 'LGJuKXwwLF89XytNYXRoLmltdWwoVWUsZW4pfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKFhlLGVuKXwwLEM9QytNYXRoLmltdWwoWGUsUG4pfDAsXz1fK01hdGguaW11bChMZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFduKXwwKStNYXRoLmltdWwoTmUsJHQp'@;
put 'fDAsQz1DK01hdGguaW11bChOZSxXbil8MDt2YXIgem49KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2Usbm4pfDApK01hdGguaW11bChIZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsbm4pfDApKyhwPj4+MTMp'@;
put 'fDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxwdCkscD0ocD1NYXRoLmltdWwoenQsZm4pKStNYXRoLmltdWwodm4scHQpfDAsQz1NYXRoLmltdWwodm4sZm4pLF89XytNYXRoLmltdWwoUnQsTXQpfDAscD0ocD1wK01hdGguaW11bChSdCxZdCl8MCkrTWF0aC5p'@;
put 'bXVsKFh0LE10KXwwLEM9QytNYXRoLmltdWwoWHQsWXQpfDAsXz1fK01hdGguaW11bChsdCxqdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHBuKXwwKStNYXRoLmltdWwoQ3QsanQpfDAsQz1DK01hdGguaW11bChDdCxwbil8MCxfPV8rTWF0aC5pbXVsKEFlLEV0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoQWUsUXQpfDApK01hdGguaW11bChCZSxFdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFF0KXwwLF89XytNYXRoLmltdWwoR2UsbXQpfDAscD0ocD1wK01hdGguaW11bChHZSxHdCl8MCkrTWF0aC5pbXVsKGR0LG10KXwwLEM9QytNYXRoLmltdWwoZHQsR3QpfDAsXz1fK01hdGguaW11bChSZSxC'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLGJuKXwwKStNYXRoLmltdWwoZXQsQnQpfDAsQz1DK01hdGguaW11bChldCxibil8MCxfPV8rTWF0aC5pbXVsKEZlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsUG4pfDApK01hdGguaW11bChDZSxlbil8MCxDPUMrTWF0aC5pbXVsKENlLFBuKXww'@;
put 'LF89XytNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxXbil8MCkrTWF0aC5pbXVsKFhlLCR0KXwwLEM9QytNYXRoLmltdWwoWGUsV24pfDA7dmFyIFppPShoZSsoXz1fK01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG5uKXww'@;
put 'KStNYXRoLmltdWwoTmUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKE5lLG5uKXwwKSsocD4+PjEzKXwwKSsoWmk+Pj4yNil8MCxaaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsTXQpLHA9KHA9TWF0aC5pbXVsKHp0LFl0KSkrTWF0aC5pbXVsKHZuLE10KXwwLEM9TWF0aC5p'@;
put 'bXVsKHZuLFl0KSxfPV8rTWF0aC5pbXVsKFJ0LGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQscG4pfDApK01hdGguaW11bChYdCxqdCl8MCxDPUMrTWF0aC5pbXVsKFh0LHBuKXwwLF89XytNYXRoLmltdWwobHQsRXQpfDAscD0ocD1wK01hdGguaW11bChsdCxRdCl8MCkrTWF0aC5pbXVsKEN0'@;
put 'LEV0KXwwLEM9QytNYXRoLmltdWwoQ3QsUXQpfDAsXz1fK01hdGguaW11bChBZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEd0KXwwKStNYXRoLmltdWwoQmUsbXQpfDAsQz1DK01hdGguaW11bChCZSxHdCl8MCxfPV8rTWF0aC5pbXVsKEdlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2Us'@;
put 'Ym4pfDApK01hdGguaW11bChkdCxCdCl8MCxDPUMrTWF0aC5pbXVsKGR0LGJuKXwwLF89XytNYXRoLmltdWwoUmUsZW4pfDAscD0ocD1wK01hdGguaW11bChSZSxQbil8MCkrTWF0aC5pbXVsKGV0LGVuKXwwLEM9QytNYXRoLmltdWwoZXQsUG4pfDAsXz1fK01hdGguaW11bChGZSwkdCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKEZlLFduKXwwKStNYXRoLmltdWwoQ2UsJHQpfDAsQz1DK01hdGguaW11bChDZSxXbil8MDt2YXIgV2k9KGhlKyhfPV8rTWF0aC5pbXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChYZSxsbil8MCkpPDwx'@;
put 'Myl8MDtoZT0oKEM9QytNYXRoLmltdWwoWGUsbm4pfDApKyhwPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxqdCkscD0ocD1NYXRoLmltdWwoenQscG4pKStNYXRoLmltdWwodm4sanQpfDAsQz1NYXRoLmltdWwodm4scG4pLF89XytNYXRoLmltdWwo'@;
put 'UnQsRXQpfDAscD0ocD1wK01hdGguaW11bChSdCxRdCl8MCkrTWF0aC5pbXVsKFh0LEV0KXwwLEM9QytNYXRoLmltdWwoWHQsUXQpfDAsXz1fK01hdGguaW11bChsdCxtdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEd0KXwwKStNYXRoLmltdWwoQ3QsbXQpfDAsQz1DK01hdGguaW11bChDdCxH'@;
put 'dCl8MCxfPV8rTWF0aC5pbXVsKEFlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsYm4pfDApK01hdGguaW11bChCZSxCdCl8MCxDPUMrTWF0aC5pbXVsKEJlLGJuKXwwLF89XytNYXRoLmltdWwoR2UsZW4pfDAscD0ocD1wK01hdGguaW11bChHZSxQbil8MCkrTWF0aC5pbXVsKGR0LGVuKXww'@;
put 'LEM9QytNYXRoLmltdWwoZHQsUG4pfDAsXz1fK01hdGguaW11bChSZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFduKXwwKStNYXRoLmltdWwoZXQsJHQpfDAsQz1DK01hdGguaW11bChldCxXbil8MDt2YXIgb289KGhlKyhfPV8rTWF0aC5pbXVsKEZlLGxuKXwwKXwwKSsoKDgxOTEmKHA9'@;
put 'KHA9cCtNYXRoLmltdWwoRmUsbm4pfDApK01hdGguaW11bChDZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQ2Usbm4pfDApKyhwPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxFdCkscD0ocD1NYXRoLmltdWwoenQsUXQpKStNYXRo'@;
put 'LmltdWwodm4sRXQpfDAsQz1NYXRoLmltdWwodm4sUXQpLF89XytNYXRoLmltdWwoUnQsbXQpfDAscD0ocD1wK01hdGguaW11bChSdCxHdCl8MCkrTWF0aC5pbXVsKFh0LG10KXwwLEM9QytNYXRoLmltdWwoWHQsR3QpfDAsXz1fK01hdGguaW11bChsdCxCdCl8MCxwPShwPXArTWF0aC5pbXVs'@;
put 'KGx0LGJuKXwwKStNYXRoLmltdWwoQ3QsQnQpfDAsQz1DK01hdGguaW11bChDdCxibil8MCxfPV8rTWF0aC5pbXVsKEFlLGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsUG4pfDApK01hdGguaW11bChCZSxlbil8MCxDPUMrTWF0aC5pbXVsKEJlLFBuKXwwLF89XytNYXRoLmltdWwoR2UsJHQp'@;
put 'fDAscD0ocD1wK01hdGguaW11bChHZSxXbil8MCkrTWF0aC5pbXVsKGR0LCR0KXwwLEM9QytNYXRoLmltdWwoZHQsV24pfDA7dmFyIGhvPShoZSsoXz1fK01hdGguaW11bChSZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJlLG5uKXwwKStNYXRoLmltdWwoZXQsbG4pfDAp'@;
put 'KTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKGV0LG5uKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsbXQpLHA9KHA9TWF0aC5pbXVsKHp0LEd0KSkrTWF0aC5pbXVsKHZuLG10KXwwLEM9TWF0aC5pbXVsKHZuLEd0KSxfPV8rTWF0aC5p'@;
put 'bXVsKFJ0LEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsYm4pfDApK01hdGguaW11bChYdCxCdCl8MCxDPUMrTWF0aC5pbXVsKFh0LGJuKXwwLF89XytNYXRoLmltdWwobHQsZW4pfDAscD0ocD1wK01hdGguaW11bChsdCxQbil8MCkrTWF0aC5pbXVsKEN0LGVuKXwwLEM9QytNYXRoLmltdWwo'@;
put 'Q3QsUG4pfDAsXz1fK01hdGguaW11bChBZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLFduKXwwKStNYXRoLmltdWwoQmUsJHQpfDAsQz1DK01hdGguaW11bChCZSxXbil8MDt2YXIgTHI9KGhlKyhfPV8rTWF0aC5pbXVsKEdlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'R2Usbm4pfDApK01hdGguaW11bChkdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoZHQsbm4pfDApKyhwPj4+MTMpfDApKyhMcj4+PjI2KXwwLExyJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxCdCkscD0ocD1NYXRoLmltdWwoenQsYm4pKStNYXRoLmltdWwodm4sQnQpfDAs'@;
put 'Qz1NYXRoLmltdWwodm4sYm4pLF89XytNYXRoLmltdWwoUnQsZW4pfDAscD0ocD1wK01hdGguaW11bChSdCxQbil8MCkrTWF0aC5pbXVsKFh0LGVuKXwwLEM9QytNYXRoLmltdWwoWHQsUG4pfDAsXz1fK01hdGguaW11bChsdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFduKXwwKStNYXRo'@;
put 'LmltdWwoQ3QsJHQpfDAsQz1DK01hdGguaW11bChDdCxXbil8MDt2YXIgQmk9KGhlKyhfPV8rTWF0aC5pbXVsKEFlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChCZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQmUsbm4p'@;
put 'fDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxlbikscD0ocD1NYXRoLmltdWwoenQsUG4pKStNYXRoLmltdWwodm4sZW4pfDAsQz1NYXRoLmltdWwodm4sUG4pLF89XytNYXRoLmltdWwoUnQsJHQpfDAscD0ocD1wK01hdGguaW11bChSdCxX'@;
put 'bil8MCkrTWF0aC5pbXVsKFh0LCR0KXwwLEM9QytNYXRoLmltdWwoWHQsV24pfDA7dmFyIExvPShoZSsoXz1fK01hdGguaW11bChsdCxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LG5uKXwwKStNYXRoLmltdWwoQ3QsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5p'@;
put 'bXVsKEN0LG5uKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsJHQpLHA9KHA9TWF0aC5pbXVsKHp0LFduKSkrTWF0aC5pbXVsKHZuLCR0KXwwLEM9TWF0aC5pbXVsKHZuLFduKTt2YXIgS289KGhlKyhfPV8rTWF0aC5pbXVsKFJ0LGxuKXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUnQsbm4pfDApK01hdGguaW11bChYdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoWHQsbm4pfDApKyhwPj4+MTMpfDApKyhLbz4+PjI2KXwwLEtvJj02NzEwODg2Mzt2YXIgZXM9KGhlKyhfPU1hdGguaW11bCh6dCxsbikp'@;
put 'fDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoenQsbm4pKStNYXRoLmltdWwodm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGhlPSgoQz1NYXRoLmltdWwodm4sbm4pKSsocD4+PjEzKXwwKSsoZXM+Pj4yNil8MCxlcyY9NjcxMDg4NjMsdWVbMF09dWksdWVbMV09QXIsdWVbMl09bXIsdWVbM109'@;
put 'eWksdWVbNF09JHIsdWVbNV09SmksdWVbNl09eXIsdWVbN109SWksdWVbOF09bm8sdWVbOV09em4sdWVbMTBdPVppLHVlWzExXT1XaSx1ZVsxMl09b28sdWVbMTNdPWhvLHVlWzE0XT1Mcix1ZVsxNV09QmksdWVbMTZdPUxvLHVlWzE3XT1Lbyx1ZVsxOF09ZXMsMCE9PWhlJiYodWVbMTldPWhl'@;
put 'LHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGFlKGcsUyx4KXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsUyx4KX1mdW5jdGlvbiBzZShnLFMpe3RoaXMueD1nLHRoaXMueT1TfU1hdGguaW11bHx8KHRlPVEpLGsucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsUyl7dmFyIF89dGhpcy5sZW5ndGgr'@;
put 'Zy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLFMpOl88NjM/USh0aGlzLGcsUyk6XzwxMDI0P2Z1bmN0aW9uKHAsQyxLKXtLLm5lZ2F0aXZlPUMubmVnYXRpdmVecC5uZWdhdGl2ZSxLLmxlbmd0aD1wLmxlbmd0aCtDLmxlbmd0aDtmb3Io'@;
put 'dmFyIG5lPTAsdWU9MCxoZT0wO2hlPEsubGVuZ3RoLTE7aGUrKyl7dmFyIHhlPXVlO3VlPTA7Zm9yKHZhciBPZT02NzEwODg2MyZuZSxIZT1NYXRoLm1pbihoZSxDLmxlbmd0aC0xKSxFZT1NYXRoLm1heCgwLGhlLXAubGVuZ3RoKzEpO0VlPD1IZTtFZSsrKXt2YXIgTmU9KDB8cC53b3Jkc1to'@;
put 'ZS1FZV0pKigwfEMud29yZHNbRWVdKSxLZT02NzEwODg2MyZOZTtPZT02NzEwODg2MyYoS2U9S2UrT2V8MCksdWUrPSh4ZT0oeGU9eGUrKE5lLzY3MTA4ODY0fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31LLndvcmRzW2hlXT1PZSxuZT14ZSx4ZT11ZX1yZXR1cm4gMCE9'@;
put 'PW5lP0sud29yZHNbaGVdPW5lOksubGVuZ3RoLS0sSy5zdHJpcCgpfSh0aGlzLGcsUyk6YWUodGhpcyxnLFMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihnKXtmb3IodmFyIFM9bmV3IEFycmF5KGcpLHg9ay5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLF89MDtfPGc7XysrKVNb'@;
put 'X109dGhpcy5yZXZCaW4oXyx4LGcpO3JldHVybiBTfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsUyx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1cm4gZztmb3IodmFyIF89MCxwPTA7cDxTO3ArKylffD0oMSZnKTw8Uy1wLTEsZz4+PTE7cmV0dXJuIF99LHNlLnByb3RvdHlwZS5w'@;
put 'ZXJtdXRlPWZ1bmN0aW9uKGcsUyx4LF8scCxDKXtmb3IodmFyIEs9MDtLPEM7SysrKV9bS109U1tnW0tdXSxwW0tdPXhbZ1tLXV19LHNlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oZyxTLHgsXyxwLEMpe3RoaXMucGVybXV0ZShDLGcsUyx4LF8scCk7Zm9yKHZhciBLPTE7SzxwO0s8'@;
put 'PD0xKWZvcih2YXIgbmU9Szw8MSx1ZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGhlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlmb3IodmFyIE9lPXVlLEhlPWhlLEVlPTA7RWU8SztFZSsrKXt2YXIgTGU9eFt4ZStFZV0sTmU9X1t4ZStFZV0sS2U9eFt4ZStFZStL'@;
put 'XSxVZT1fW3hlK0VlK0tdLFhlPU9lKktlLUhlKlVlO1VlPU9lKlVlK0hlKktlLHhbeGUrRWVdPUxlKyhLZT1YZSksX1t4ZStFZV09TmUrVWUseFt4ZStFZStLXT1MZS1LZSxfW3hlK0VlK0tdPU5lLVVlLEVlIT09bmUmJihYZT11ZSpPZS1oZSpIZSxIZT11ZSpIZStoZSpPZSxPZT1YZSl9fSxz'@;
put 'ZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxTKXt2YXIgeD0xfE1hdGgubWF4KFMsZyksXz0xJngscD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKXArKztyZXR1cm4gMTw8cCsxK199LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxTLHgpe2lmKCEoeDw9MSkpZm9y'@;
put 'KHZhciBfPTA7Xzx4LzI7XysrKXt2YXIgcD1nW19dO2dbX109Z1t4LV8tMV0sZ1t4LV8tMV09cCxwPVNbX10sU1tfXT0tU1t4LV8tMV0sU1t4LV8tMV09LXB9fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsUyl7Zm9yKHZhciB4PTAsXz0wO188Uy8yO18rKyl7dmFyIHA9'@;
put 'ODE5MipNYXRoLnJvdW5kKGdbMipfKzFdL1MpK01hdGgucm91bmQoZ1syKl9dL1MpK3g7Z1tfXT02NzEwODg2MyZwLHg9cDw2NzEwODg2ND8wOnAvNjcxMDg4NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz0wO0M8'@;
put 'UztDKyspeFsyKkNdPTgxOTEmKHArPTB8Z1tDXSkseFsyKkMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoQz0yKlM7QzxfOysrQyl4W0NdPTA7SSgwPT09cCksSSghKC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPW5ldyBBcnJheShnKSx4'@;
put 'PTA7eDxnO3grKylTW3hdPTA7cmV0dXJuIFN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5sZW5ndGgsUy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKF8pLEM9dGhpcy5zdHViKF8pLEs9bmV3IEFycmF5KF8pLG5lPW5ldyBBcnJh'@;
put 'eShfKSx1ZT1uZXcgQXJyYXkoXyksaGU9bmV3IEFycmF5KF8pLHhlPW5ldyBBcnJheShfKSxPZT1uZXcgQXJyYXkoXyksSGU9eC53b3JkcztIZS5sZW5ndGg9Xyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxLLF8pLHRoaXMuY29udmVydDEzYihTLndvcmRzLFMubGVuZ3RoLGhl'@;
put 'LF8pLHRoaXMudHJhbnNmb3JtKEssQyxuZSx1ZSxfLHApLHRoaXMudHJhbnNmb3JtKGhlLEMseGUsT2UsXyxwKTtmb3IodmFyIEVlPTA7RWU8XztFZSsrKXt2YXIgTGU9bmVbRWVdKnhlW0VlXS11ZVtFZV0qT2VbRWVdO3VlW0VlXT1uZVtFZV0qT2VbRWVdK3VlW0VlXSp4ZVtFZV0sbmVbRWVd'@;
put 'PUxlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSx1ZSxfKSx0aGlzLnRyYW5zZm9ybShuZSx1ZSxIZSxDLF8scCksdGhpcy5jb25qdWdhdGUoSGUsQyxfKSx0aGlzLm5vcm1hbGl6ZTEzYihIZSxfKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeUy5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCtT'@;
put 'Lmxlbmd0aCx4LnN0cmlwKCl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgUz1uZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxTKX0say5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgUz1u'@;
put 'ZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGFlKHRoaXMsZyxTKX0say5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LGsucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcp'@;
put 'e0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgUz0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIF89KDB8dGhpcy53b3Jkc1t4XSkqZyxwPSg2NzEwODg2MyZfKSsoNjcxMDg4NjMmUyk7Uz4+PTI2LFMrPV8vNjcxMDg4NjR8MCxTKz1wPj4+MjYsdGhpcy53'@;
put 'b3Jkc1t4XT02NzEwODg2MyZwfXJldHVybiAwIT09UyYmKHRoaXMud29yZHNbeF09Uyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxrLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LGsucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0'@;
put 'aGlzLm11bCh0aGlzKX0say5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0say5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGcpe3ZhciBTPWZ1bmN0aW9uKEMpe2Zvcih2YXIgSz1uZXcgQXJyYXkoQy5iaXRMZW5ndGgoKSksbmU9MDtuZTxL'@;
put 'Lmxlbmd0aDtuZSsrKXt2YXIgaGU9bmUlMjY7S1tuZV09KEMud29yZHNbbmUvMjZ8MF0mMTw8aGUpPj4+aGV9cmV0dXJuIEt9KGcpO2lmKDA9PT1TLmxlbmd0aClyZXR1cm4gbmV3IGsoMSk7Zm9yKHZhciB4PXRoaXMsXz0wO188Uy5sZW5ndGgmJjA9PT1TW19dO18rKyx4PXguc3FyKCkpO2lm'@;
put 'KCsrXzxTLmxlbmd0aClmb3IodmFyIHA9eC5zcXIoKTtfPFMubGVuZ3RoO18rKyxwPXAuc3FyKCkpMCE9PVNbX10mJih4PXgubXVsKHApKTtyZXR1cm4geH0say5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUyx4PWclMjYsXz0o'@;
put 'Zy14KS8yNixwPTY3MTA4ODYzPj4+MjYteDw8MjYteDtpZigwIT09eCl7dmFyIEM9MDtmb3IoUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgSz10aGlzLndvcmRzW1NdJnA7dGhpcy53b3Jkc1tTXT0oMHx0aGlzLndvcmRzW1NdKS1LPDx4fEMsQz1LPj4+MjYteH1DJiYodGhpcy53b3Jkc1tT'@;
put 'XT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1fKXtmb3IoUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXRoaXMud29yZHNbUytfXT10aGlzLndvcmRzW1NdO2ZvcihTPTA7UzxfO1MrKyl0aGlzLndvcmRzW1NdPTA7dGhpcy5sZW5ndGgrPV99cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5'@;
put 'cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxrLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oZyxTLHgpe3ZhciBfO0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxfPVM/KFMtUyUyNikvMjY6MDt2YXIgcD1nJTI2LEM9'@;
put 'TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEs9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPXg7aWYoXy09QyxfPU1hdGgubWF4KDAsXyksbmUpe2Zvcih2YXIgdWU9MDt1ZTxDO3VlKyspbmUud29yZHNbdWVdPXRoaXMud29yZHNbdWVdO25lLmxlbmd0aD1DfWlmKDAhPT1DKWlm'@;
put 'KHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHVlPTA7dWU8dGhpcy5sZW5ndGg7dWUrKyl0aGlzLndvcmRzW3VlXT10aGlzLndvcmRzW3VlK0NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGhlPTA7Zm9yKHVlPXRoaXMubGVuZ3RoLTE7dWU+PTAmJigw'@;
put 'IT09aGV8fHVlPj1fKTt1ZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW3VlXTt0aGlzLndvcmRzW3VlXT1oZTw8MjYtcHx4ZT4+PnAsaGU9eGUmS31yZXR1cm4gbmUmJjAhPT1oZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1oZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRo'@;
put 'aXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxTLHgpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihnLFMseCl9LGsucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihn'@;
put 'KX0say5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LGsucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0say5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pdXNocm4oZyl9LGsucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9KGctUykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PFMpKX0say5wcm90b3R5cGUuaW1hc2tu'@;
put 'PWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9KGctUykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1TJiZ4Kyss'@;
put 'dGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PVMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlM8PFMpLHRoaXMuc3RyaXAoKSl9LGsucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1h'@;
put 'c2tuKGcpfSxrLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMuaXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jk'@;
put 'c1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxrLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztm'@;
put 'b3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1NdPj02NzEwODg2NDtTKyspdGhpcy53b3Jkc1tTXS09NjcxMDg4NjQsUz09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tTKzFdPTE6dGhpcy53b3Jkc1tTKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMu'@;
put 'bGVuZ3RoLFMrMSksdGhpc30say5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwKXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFk'@;
put 'ZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGgmJnRoaXMud29y'@;
put 'ZHNbU108MDtTKyspdGhpcy53b3Jkc1tTXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tTKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0say5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxrLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxrLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0say5wcm90b3R5cGUuX2lzaGxuc3VibXVs'@;
put 'PWZ1bmN0aW9uKGcsUyx4KXt2YXIgXyxwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSz0wO2ZvcihfPTA7XzxnLmxlbmd0aDtfKyspe3A9KDB8dGhpcy53b3Jkc1tfK3hdKStLO3ZhciBuZT0oMHxnLndvcmRzW19dKSpTO0s9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4'@;
put 'NjR8MCksdGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnB9Zm9yKDtfPHRoaXMubGVuZ3RoLXg7XysrKUs9KHA9KDB8dGhpcy53b3Jkc1tfK3hdKStLKT4+MjYsdGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnA7aWYoMD09PUspcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUspLEs9MCxf'@;
put 'PTA7Xzx0aGlzLmxlbmd0aDtfKyspSz0ocD0tKDB8dGhpcy53b3Jkc1tfXSkrSyk+PjI2LHRoaXMud29yZHNbX109NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxTKXt2YXIgeCxfPXRoaXMuY2xv'@;
put 'bmUoKSxwPWcsQz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKHA9cC51c2hsbih4KSxfLml1c2hsbih4KSxDPTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEssbmU9Xy5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1TKXsoSz1uZXcgayhu'@;
put 'dWxsKSkubGVuZ3RoPW5lKzEsSy53b3Jkcz1uZXcgQXJyYXkoSy5sZW5ndGgpO2Zvcih2YXIgdWU9MDt1ZTxLLmxlbmd0aDt1ZSsrKUsud29yZHNbdWVdPTB9dmFyIGhlPV8uY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09aGUubmVnYXRpdmUmJihfPWhlLEsmJihLLndvcmRzW25l'@;
put 'XT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBPZT02NzEwODg2NCooMHxfLndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8Xy53b3Jkc1twLmxlbmd0aCt4ZS0xXSk7Zm9yKE9lPU1hdGgubWluKE9lL0N8MCw2NzEwODg2MyksXy5faXNobG5zdWJtdWwocCxPZSx4ZSk7MCE9PV8u'@;
put 'bmVnYXRpdmU7KU9lLS0sXy5uZWdhdGl2ZT0wLF8uX2lzaGxuc3VibXVsKHAsMSx4ZSksXy5pc1plcm8oKXx8KF8ubmVnYXRpdmVePTEpO0smJihLLndvcmRzW3hlXT1PZSl9cmV0dXJuIEsmJksuc3RyaXAoKSxfLnN0cmlwKCksImRpdiIhPT1TJiYwIT09eCYmXy5pdXNocm4oeCkse2RpdjpL'@;
put 'fHxudWxsLG1vZDpffX0say5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsUyx4KXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyBrKDApLG1vZDpuZXcgaygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2'@;
put 'bW9kKGcsUyksIm1vZCIhPT1TJiYoXz1DLmRpdi5uZWcoKSksImRpdiIhPT1TJiYocD1DLm1vZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcpKSx7ZGl2Ol8sbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoZy5uZWcoKSxT'@;
put 'KSwibW9kIiE9PVMmJihfPUMuZGl2Lm5lZygpKSx7ZGl2Ol8sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGcubmVnKCksUyksImRpdiIhPT1TJiYocD1DLm1vZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2'@;
put 'OkMuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgaygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJkaXYiPT09Uz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1TP3tkaXY6bnVsbCxtb2Q6bmV3IGso'@;
put 'dGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBrKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoZyxTKTt2YXIgXyxwLEN9LGsucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywi'@;
put 'ZGl2IiwhMSkuZGl2fSxrLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0say5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxrLnByb3RvdHlwZS5kaXZSb3VuZD1m'@;
put 'dW5jdGlvbihnKXt2YXIgUz10aGlzLmRpdm1vZChnKTtpZihTLm1vZC5pc1plcm8oKSlyZXR1cm4gUy5kaXY7dmFyIHg9MCE9PVMuZGl2Lm5lZ2F0aXZlP1MubW9kLmlzdWIoZyk6Uy5tb2QsXz1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSxDPXguY21wKF8pO3JldHVybiBDPDB8fDE9PT1wJiYw'@;
put 'PT09Qz9TLmRpdjowIT09Uy5kaXYubmVnYXRpdmU/Uy5kaXYuaXN1Ym4oMSk6Uy5kaXYuaWFkZG4oMSl9LGsucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7SShnPD02NzEwODg2Myk7Zm9yKHZhciBTPTY3MTA4ODY0JWcseD0wLF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl4PShTKngrKDB8'@;
put 'dGhpcy53b3Jkc1tfXSkpJWc7cmV0dXJuIHh9LGsucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgUz0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIF89KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqUzt0aGlzLndvcmRzW3hdPV8vZ3ww'@;
put 'LFM9XyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0say5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5j'@;
put 'bG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMuY2xvbmUoKTtmb3IodmFyIF89bmV3IGsoMSkscD1uZXcgaygwKSxDPW5ldyBrKDApLEs9bmV3IGsoMSksbmU9MDtTLmlzRXZlbigpJiZ4LmlzRXZlbigpOylTLml1c2hybigxKSx4Lml1c2hybigxKSwrK25lO2Zvcih2YXIgdWU9'@;
put 'eC5jbG9uZSgpLGhlPVMuY2xvbmUoKTshUy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJnhlPDI2OysreGUsT2U8PD0xKTtpZih4ZT4wKWZvcihTLml1c2hybih4ZSk7eGUtLSA+MDspKF8uaXNPZGQoKXx8cC5pc09kZCgpKSYmKF8uaWFkZCh1ZSkscC5p'@;
put 'c3ViKGhlKSksXy5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBIZT0wLEVlPTE7ISh4LndvcmRzWzBdJkVlKSYmSGU8MjY7KytIZSxFZTw8PTEpO2lmKEhlPjApZm9yKHguaXVzaHJuKEhlKTtIZS0tID4wOykoQy5pc09kZCgpfHxLLmlzT2RkKCkpJiYoQy5pYWRkKHVlKSxLLmlzdWIo'@;
put 'aGUpKSxDLml1c2hybigxKSxLLml1c2hybigxKTtTLmNtcCh4KT49MD8oUy5pc3ViKHgpLF8uaXN1YihDKSxwLmlzdWIoSykpOih4LmlzdWIoUyksQy5pc3ViKF8pLEsuaXN1YihwKSl9cmV0dXJue2E6QyxiOkssZ2NkOnguaXVzaGxuKG5lKX19LGsucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlv'@;
put 'bihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5jbG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMuY2xvbmUoKTtmb3IodmFyIF8scD1uZXcgaygxKSxDPW5ldyBrKDApLEs9eC5jbG9uZSgpO1MuY21wbigxKT4wJiZ4LmNtcG4oMSk+'@;
put 'MDspe2Zvcih2YXIgbmU9MCx1ZT0xOyEoUy53b3Jkc1swXSZ1ZSkmJm5lPDI2OysrbmUsdWU8PD0xKTtpZihuZT4wKWZvcihTLml1c2hybihuZSk7bmUtLSA+MDspcC5pc09kZCgpJiZwLmlhZGQoSykscC5pdXNocm4oMSk7Zm9yKHZhciBoZT0wLHhlPTE7ISh4LndvcmRzWzBdJnhlKSYmaGU8'@;
put 'MjY7KytoZSx4ZTw8PTEpO2lmKGhlPjApZm9yKHguaXVzaHJuKGhlKTtoZS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChLKSxDLml1c2hybigxKTtTLmNtcCh4KT49MD8oUy5pc3ViKHgpLHAuaXN1YihDKSk6KHguaXN1YihTKSxDLmlzdWIocCkpfXJldHVybihfPTA9PT1TLmNtcG4oMSk/cDpD'@;
put 'KS5jbXBuKDApPDAmJl8uaWFkZChnKSxffSxrLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihnLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBTPXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTtTLm5lZ2F0aXZlPTAseC5u'@;
put 'ZWdhdGl2ZT0wO2Zvcih2YXIgXz0wO1MuaXNFdmVuKCkmJnguaXNFdmVuKCk7XysrKVMuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtTLmlzRXZlbigpOylTLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBwPVMuY21wKHgpO2lmKHA8MCl7dmFy'@;
put 'IEM9UztTPXgseD1DfWVsc2UgaWYoMD09PXB8fDA9PT14LmNtcG4oMSkpYnJlYWs7Uy5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihfKX0say5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0say5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxrLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGsucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LGsucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9u'@;
put 'KGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgUz1nJTI2LHg9KGctUykvMjYsXz0xPDxTO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1fLHRoaXM7Zm9yKHZhciBwPV8sQz14OzAhPT1wJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFy'@;
put 'IEs9MHx0aGlzLndvcmRzW0NdO3A9KEsrPXApPj4+MjYsdGhpcy53b3Jkc1tDXT1LJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW0NdPXAsdGhpcy5sZW5ndGgrKyksdGhpc30say5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYm'@;
put 'MD09PXRoaXMud29yZHNbMF19LGsucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIFMseD1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF4KXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ4KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKVM9MTtlbHNl'@;
put 'e3gmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBfPTB8dGhpcy53b3Jkc1swXTtTPV89PT1nPzA6XzxnPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30say5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFM9dGhpcy51Y21wKGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1TOlN9LGsucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5s'@;
put 'ZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBTPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgXz0wfHRoaXMud29yZHNbeF0scD0wfGcud29yZHNbeF07aWYoXyE9PXApe188cD9TPS0xOl8+cCYmKFM9MSk7YnJl'@;
put 'YWt9fXJldHVybiBTfSxrLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmd0PWZ1bmN0aW9uKGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LGsucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihn'@;
put 'KT49MH0say5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0say5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVybi0xPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxrLnBy'@;
put 'b3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LGsucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbXAoZyk8PTB9LGsucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUu'@;
put 'ZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0say5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxrLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJ'@;
put 'KDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0say5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJz'@;
put 'IGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGsucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5yZWQ9Zyx0aGlzfSxrLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFs'@;
put 'cmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0say5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9'@;
put 'LGsucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJl'@;
put 'ZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0say5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMs'@;
put 'Zyl9LGsucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJl'@;
put 'ZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i'@;
put 'ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyks'@;
put 'dGhpcy5yZWQuc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0say5wcm90b3R5cGUu'@;
put 'cmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGsucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlz'@;
put 'LnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxrLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0say5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQu'@;
put 'cG93KHRoaXMsZyl9O3ZhciBkZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGxlKGcsUyl7dGhpcy5uYW1lPWcsdGhpcy5wPW5ldyBrKFMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBrKDEpLml1c2hsbih0aGlz'@;
put 'Lm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe2xlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe2xlLmNh'@;
put 'bGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24geSgpe2xlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIil9ZnVuY3Rpb24gTCgpe2xlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBTPWsuX3ByaW1lKGcp'@;
put 'O3RoaXMubT1TLnAsdGhpcy5wcmltZT1TfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGooZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5z'@;
put 'aGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgaygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVs'@;
put 'KHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1sZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBrKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJh'@;
put 'eShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sbGUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIFMseD1nO2Rve3RoaXMuc3BsaXQoeCx0aGlzLnRtcCksUz0oeD0oeD10aGlzLmltdWxLKHgpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoUz50aGlzLm4pO3Zh'@;
put 'ciBfPVM8dGhpcy5uPy0xOngudWNtcCh0aGlzLnApO3JldHVybiAwPT09Xz8oeC53b3Jkc1swXT0wLHgubGVuZ3RoPTEpOl8+MD94LmlzdWIodGhpcy5wKTp2b2lkIDAhPT14LnN0cmlwP3guc3RyaXAoKTp4Ll9zdHJpcCgpLHh9LGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLFMpe2cu'@;
put 'aXVzaHJuKHRoaXMubiwwLFMpfSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxFKGNlLGxlKSxjZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxTKXtmb3IodmFyIHg9NDE5NDMwMyxfPU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPF87'@;
put 'cCsrKVMud29yZHNbcF09Zy53b3Jkc1twXTtpZihTLmxlbmd0aD1fLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2YXIgQz1nLndvcmRzWzldO2ZvcihTLndvcmRzW1MubGVuZ3RoKytdPUMmeCxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSz0wfGcu'@;
put 'd29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSyZ4KTw8NHxDPj4+MjIsQz1LfWcud29yZHNbcC0xMF09Qz4+Pj0yMixnLmxlbmd0aC09MD09PUMmJmcubGVuZ3RoPjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5n'@;
put 'dGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBfPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYzJihTKz05NzcqXyksUz02NCpfKyhTLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3Ro'@;
put 'LS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LEUoRyxsZSksRSh5LGxlKSxFKEwsbGUpLEwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGcpe2Zvcih2YXIgUz0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIF89MTkqKDB8Zy53b3Jkc1t4XSkrUyxwPTY3MTA4ODYz'@;
put 'Jl87Xz4+Pj0yNixnLndvcmRzW3hdPXAsUz1ffXJldHVybiAwIT09UyYmKGcud29yZHNbZy5sZW5ndGgrK109UyksZ30say5fcHJpbWU9ZnVuY3Rpb24oZyl7aWYoZGVbZ10pcmV0dXJuIGRlW2ddO3ZhciBTO2lmKCJrMjU2Ij09PWcpUz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKVM9bmV3'@;
put 'IEc7ZWxzZSBpZigicDE5MiI9PT1nKVM9bmV3IHk7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Uz1uZXcgTH1yZXR1cm4gZGVbZ109UyxTfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJy'@;
put 'ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oZyxTKXtJKCEoZy5uZWdhdGl2ZXxTLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2'@;
put 'ZXMiKSxJKGcucmVkJiZnLnJlZD09PVMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5f'@;
put 'Zm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmFkZChT'@;
put 'KTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5pYWRkKFMpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5t'@;
put 'KSx4fSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5zdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLFMpe3RoaXMuX3Zlcmlm'@;
put 'eTIoZyxTKTt2YXIgeD1nLmlzdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihTKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o'@;
put 'ZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLmltdWwoUykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLm11bChTKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJu'@;
put 'IHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoUyUy'@;
put 'PT0xKSwzPT09Uyl7dmFyIHg9dGhpcy5tLmFkZChuZXcgaygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgXz10aGlzLm0uc3VibigxKSxwPTA7IV8uaXNaZXJvKCkmJjA9PT1fLmFuZGxuKDEpOylwKyssXy5pdXNocm4oMSk7SSghXy5pc1plcm8oKSk7dmFyIEM9'@;
put 'bmV3IGsoMSkudG9SZWQodGhpcyksSz1DLnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHVlPW5ldyBrKDIqdWUqdWUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1ZSxuZSkuY21wKEspOyl1ZS5yZWRJQWRkKEspO2Zvcih2'@;
put 'YXIgaGU9dGhpcy5wb3codWUsXykseGU9dGhpcy5wb3coZyxfLmFkZG4oMSkuaXVzaHJuKDEpKSxPZT10aGlzLnBvdyhnLF8pLEhlPXA7MCE9PU9lLmNtcChDKTspe2Zvcih2YXIgRWU9T2UsTGU9MDswIT09RWUuY21wKEMpO0xlKyspRWU9RWUucmVkU3FyKCk7SShMZTxIZSk7dmFyIE5lPXRo'@;
put 'aXMucG93KGhlLG5ldyBrKDEpLml1c2hsbihIZS1MZS0xKSk7eGU9eGUucmVkTXVsKE5lKSxoZT1OZS5yZWRTcXIoKSxPZT1PZS5yZWRNdWwoaGUpLEhlPUxlfXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgUz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09'@;
put 'Uy5uZWdhdGl2ZT8oUy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChTKS5yZWROZWcoKSk6dGhpcy5pbW9kKFMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxTKXtpZihTLmlzWmVybygpKXJldHVybiBuZXcgaygxKS50b1JlZCh0aGlzKTtpZigwPT09Uy5jbXBuKDEpKXJldHVybiBnLmNsb25l'@;
put 'KCk7dmFyIHg9bmV3IEFycmF5KDE2KTt4WzBdPW5ldyBrKDEpLnRvUmVkKHRoaXMpLHhbMV09Zztmb3IodmFyIF89MjtfPHgubGVuZ3RoO18rKyl4W19dPXRoaXMubXVsKHhbXy0xXSxnKTt2YXIgcD14WzBdLEM9MCxLPTAsbmU9Uy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYp'@;
put 'LF89Uy5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciB1ZT1TLndvcmRzW19dLGhlPW5lLTE7aGU+PTA7aGUtLSl7dmFyIHhlPXVlPj5oZSYxO3AhPT14WzBdJiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09Qz8oQzw8PTEsQ3w9eGUsKDQ9PSsrS3x8MD09PV8mJjA9PT1oZSkmJihwPXRo'@;
put 'aXMubXVsKHAseFtDXSksSz0wLEM9MCkpOks9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBTPWcudW1vZCh0aGlzLm0pO3JldHVybiBTPT09Zz9TLmNsb25lKCk6U30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFy'@;
put 'IFM9Zy5jbG9uZSgpO3JldHVybiBTLnJlZD1udWxsLFN9LGsubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IGooZyl9LEUoaixIKSxqLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sai5wcm90b3R5cGUuY29u'@;
put 'dmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIFM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBTLnJlZD1udWxsLFN9LGoucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygpfHxTLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxn'@;
put 'O3ZhciB4PWcuaW11bChTKSxfPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9eC5pc3ViKF8pLml1c2hybih0aGlzLnNoaWZ0KSxDPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Qz1wLmlzdWIodGhpcy5tKTpwLmNt'@;
put 'cG4oMCk8MCYmKEM9cC5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxqLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygpfHxTLmlzWmVybygpKXJldHVybiBuZXcgaygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoUyksXz14Lm1hc2tuKHRoaXMu'@;
put 'c2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPXguaXN1YihfKS5pdXNocm4odGhpcy5zaGlmdCksQz1wO3JldHVybiBwLmNtcCh0aGlzLm0pPj0wP0M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihDPXAuaWFkZCh0aGlzLm0pKSxDLl9m'@;
put 'b3JjZVJlZCh0aGlzKX0sai5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh3PUQubm1kKHcpLHRoaXMpfSw5NzQ2Onc9PntmdW5jdGlvbiBBKEQsUCl7aWYoIUQpdGhyb3cg'@;
put 'bmV3IEVycm9yKFB8fCJBc3NlcnRpb24gZmFpbGVkIil9dy5leHBvcnRzPUEsQS5lcXVhbD1mdW5jdGlvbihELFAsVSl7aWYoRCE9UCl0aHJvdyBuZXcgRXJyb3IoVXx8IkFzc2VydGlvbiBmYWlsZWQ6ICIrRCsiICE9ICIrUCl9fSw0NTA0Oih3LEEpPT57InVzZSBzdHJpY3QiO3ZhciBEPUE7'@;
put 'ZnVuY3Rpb24gUChJKXtyZXR1cm4gMT09PUkubGVuZ3RoPyIwIitJOkl9ZnVuY3Rpb24gVShJKXtmb3IodmFyIEU9IiIsaz0wO2s8SS5sZW5ndGg7aysrKUUrPVAoSVtrXS50b1N0cmluZygxNikpO3JldHVybiBFfUQudG9BcnJheT1mdW5jdGlvbihJLEUpe2lmKEFycmF5LmlzQXJyYXkoSSkp'@;
put 'cmV0dXJuIEkuc2xpY2UoKTtpZighSSlyZXR1cm5bXTt2YXIgaz1bXTtpZigic3RyaW5nIiE9dHlwZW9mIEkpe2Zvcih2YXIgQj0wO0I8SS5sZW5ndGg7QisrKWtbQl09MHxJW0JdO3JldHVybiBrfWlmKCJoZXgiPT09RSlmb3IoKEk9SS5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLCIiKSkubGVu'@;
put 'Z3RoJTIhPTAmJihJPSIwIitJKSxCPTA7QjxJLmxlbmd0aDtCKz0yKWsucHVzaChwYXJzZUludChJW0JdK0lbQisxXSwxNikpO2Vsc2UgZm9yKEI9MDtCPEkubGVuZ3RoO0IrKyl7dmFyIE49SS5jaGFyQ29kZUF0KEIpLFY9Tj4+OCxaPTI1NSZOO1Y/ay5wdXNoKFYsWik6ay5wdXNoKFopfXJl'@;
put 'dHVybiBrfSxELnplcm8yPVAsRC50b0hleD1VLEQuZW5jb2RlPWZ1bmN0aW9uKEksRSl7cmV0dXJuImhleCI9PT1FP1UoSSk6SX19LDExNzE6KHcsQSxEKT0+e3ZhciBQPUQoNTEwOCk7dy5leHBvcnRzPVEsUS5NaW5pbWF0Y2g9dGU7dmFyIFU9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIEQoMjUy'@;
put 'MCl9Y2F0Y2h7fX0oKXx8e3NlcDoiLyJ9O1Euc2VwPVUuc2VwO3ZhciBJPVEuR0xPQlNUQVI9dGUuR0xPQlNUQVI9e30sRT1EKDM2NDQpLGs9eyIhIjp7b3BlbjoiKD86KD8hKD86IixjbG9zZToiKSlbXi9dKj8pIn0sIj8iOntvcGVuOiIoPzoiLGNsb3NlOiIpPyJ9LCIrIjp7b3BlbjoiKD86'@;
put 'IixjbG9zZToiKSsifSwiKiI6e29wZW46Iig/OiIsY2xvc2U6IikqIn0sIkAiOntvcGVuOiIoPzoiLGNsb3NlOiIpIn19LEI9IlteL10iLE49QisiKj8iLFc9IigpLip7fSs/W11eJFxcISIuc3BsaXQoIiIpLnJlZHVjZShmdW5jdGlvbihsZSxjZSl7cmV0dXJuIGxlW2NlXT0hMCxsZX0se30p'@;
put 'LHo9L1wvKy87ZnVuY3Rpb24gcShsZSxjZSl7Y2U9Y2V8fHt9O3ZhciBHPXt9O3JldHVybiBPYmplY3Qua2V5cyhsZSkuZm9yRWFjaChmdW5jdGlvbih5KXtHW3ldPWxlW3ldfSksT2JqZWN0LmtleXMoY2UpLmZvckVhY2goZnVuY3Rpb24oeSl7R1t5XT1jZVt5XX0pLEd9ZnVuY3Rpb24gUShs'@;
put 'ZSxjZSxHKXtyZXR1cm4gc2UoY2UpLEd8fChHPXt9KSwhKCFHLm5vY29tbWVudCYmIiMiPT09Y2UuY2hhckF0KDApKSYmbmV3IHRlKGNlLEcpLm1hdGNoKGxlKX1mdW5jdGlvbiB0ZShsZSxjZSl7aWYoISh0aGlzIGluc3RhbmNlb2YgdGUpKXJldHVybiBuZXcgdGUobGUsY2UpO3NlKGxlKSxj'@;
put 'ZXx8KGNlPXt9KSxsZT1sZS50cmltKCksY2UuYWxsb3dXaW5kb3dzRXNjYXBlfHwiLyI9PT1VLnNlcHx8KGxlPWxlLnNwbGl0KFUuc2VwKS5qb2luKCIvIikpLHRoaXMub3B0aW9ucz1jZSx0aGlzLnNldD1bXSx0aGlzLnBhdHRlcm49bGUsdGhpcy5yZWdleHA9bnVsbCx0aGlzLm5lZ2F0ZT0h'@;
put 'MSx0aGlzLmNvbW1lbnQ9ITEsdGhpcy5lbXB0eT0hMSx0aGlzLnBhcnRpYWw9ISFjZS5wYXJ0aWFsLHRoaXMubWFrZSgpfWZ1bmN0aW9uIGFlKGxlLGNlKXtyZXR1cm4gY2V8fChjZT10aGlzIGluc3RhbmNlb2YgdGU/dGhpcy5vcHRpb25zOnt9KSxzZShsZT12b2lkIDA9PT1sZT90aGlzLnBh'@;
put 'dHRlcm46bGUpLGNlLm5vYnJhY2V8fCEvXHsoPzooPyFceykuKSpcfS8udGVzdChsZSk/W2xlXTpFKGxlKX1RLmZpbHRlcj1mdW5jdGlvbihsZSxjZSl7cmV0dXJuIGNlPWNlfHx7fSxmdW5jdGlvbihHLHksTCl7cmV0dXJuIFEoRyxsZSxjZSl9fSxRLmRlZmF1bHRzPWZ1bmN0aW9uKGxlKXtp'@;
put 'ZighbGV8fCJvYmplY3QiIT10eXBlb2YgbGV8fCFPYmplY3Qua2V5cyhsZSkubGVuZ3RoKXJldHVybiBRO3ZhciBjZT1RLEc9ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBjZSh5LEwscShsZSxIKSl9O3JldHVybihHLk1pbmltYXRjaD1mdW5jdGlvbih5LEwpe3JldHVybiBuZXcgY2UuTWluaW1h'@;
put 'dGNoKHkscShsZSxMKSl9KS5kZWZhdWx0cz1mdW5jdGlvbih5KXtyZXR1cm4gY2UuZGVmYXVsdHMocShsZSx5KSkuTWluaW1hdGNofSxHLmZpbHRlcj1mdW5jdGlvbih5LEwpe3JldHVybiBjZS5maWx0ZXIoeSxxKGxlLEwpKX0sRy5kZWZhdWx0cz1mdW5jdGlvbih5KXtyZXR1cm4gY2UuZGVm'@;
put 'YXVsdHMocShsZSx5KSl9LEcubWFrZVJlPWZ1bmN0aW9uKHksTCl7cmV0dXJuIGNlLm1ha2VSZSh5LHEobGUsTCkpfSxHLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKHksTCl7cmV0dXJuIGNlLmJyYWNlRXhwYW5kKHkscShsZSxMKSl9LEcubWF0Y2g9ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBjZS5t'@;
put 'YXRjaCh5LEwscShsZSxIKSl9LEd9LHRlLmRlZmF1bHRzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gUS5kZWZhdWx0cyhsZSkuTWluaW1hdGNofSx0ZS5wcm90b3R5cGUuZGVidWc9ZnVuY3Rpb24oKXt9LHRlLnByb3RvdHlwZS5tYWtlPWZ1bmN0aW9uKCl7dmFyIGxlPXRoaXMucGF0dGVybixjZT10'@;
put 'aGlzLm9wdGlvbnM7aWYoY2Uubm9jb21tZW50fHwiIyIhPT1sZS5jaGFyQXQoMCkpaWYobGUpe3RoaXMucGFyc2VOZWdhdGUoKTt2YXIgRz10aGlzLmdsb2JTZXQ9dGhpcy5icmFjZUV4cGFuZCgpO2NlLmRlYnVnJiYodGhpcy5kZWJ1Zz1mdW5jdGlvbigpe1AuZXJyb3IuYXBwbHkoUCxhcmd1'@;
put 'bWVudHMpfSksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sRyksRz10aGlzLmdsb2JQYXJ0cz1HLm1hcChmdW5jdGlvbih5KXtyZXR1cm4geS5zcGxpdCh6KX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLEc9Ry5tYXAoZnVuY3Rpb24oeSxMLEgpe3JldHVybiB5Lm1hcCh0aGlzLnBhcnNl'@;
put 'LHRoaXMpfSx0aGlzKSx0aGlzLmRlYnVnKHRoaXMucGF0dGVybixHKSxHPUcuZmlsdGVyKGZ1bmN0aW9uKHkpe3JldHVybi0xPT09eS5pbmRleE9mKCExKX0pLHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLEcpLHRoaXMuc2V0PUd9ZWxzZSB0aGlzLmVtcHR5PSEwO2Vsc2UgdGhpcy5jb21tZW50'@;
put 'PSEwfSx0ZS5wcm90b3R5cGUucGFyc2VOZWdhdGU9ZnVuY3Rpb24oKXt2YXIgbGU9dGhpcy5wYXR0ZXJuLGNlPSExLHk9MDtpZighdGhpcy5vcHRpb25zLm5vbmVnYXRlKXtmb3IodmFyIEw9MCxIPWxlLmxlbmd0aDtMPEgmJiIhIj09PWxlLmNoYXJBdChMKTtMKyspY2U9IWNlLHkrKzt5JiYo'@;
put 'dGhpcy5wYXR0ZXJuPWxlLnN1YnN0cih5KSksdGhpcy5uZWdhdGU9Y2V9fSxRLmJyYWNlRXhwYW5kPWZ1bmN0aW9uKGxlLGNlKXtyZXR1cm4gYWUobGUsY2UpfSx0ZS5wcm90b3R5cGUuYnJhY2VFeHBhbmQ9YWU7dmFyIHNlPWZ1bmN0aW9uKGxlKXtpZigic3RyaW5nIiE9dHlwZW9mIGxlKXRo'@;
put 'cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgcGF0dGVybiIpO2lmKGxlLmxlbmd0aD42NTUzNil0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXR0ZXJuIGlzIHRvbyBsb25nIil9O3RlLnByb3RvdHlwZS5wYXJzZT1mdW5jdGlvbihsZSxjZSl7c2UobGUpO3ZhciBHPXRoaXMub3B0aW9ucztpZigi'@;
put 'KioiPT09bGUpe2lmKCFHLm5vZ2xvYnN0YXIpcmV0dXJuIEk7bGU9IioifWlmKCIiPT09bGUpcmV0dXJuIiI7dmFyIHksTD0iIixIPSEhRy5ub2Nhc2Usaj0hMSxnPVtdLFM9W10seD0hMSxfPS0xLHA9LTEsQz0iLiI9PT1sZS5jaGFyQXQoMCk/IiI6Ry5kb3Q/Iig/ISg/Ol58XFwvKVxcLnsx'@;
put 'LDJ9KD86JHxcXC8pKSI6Iig/IVxcLikiLEs9dGhpcztmdW5jdGlvbiBuZSgpe2lmKHkpe3N3aXRjaCh5KXtjYXNlIioiOkwrPU4sSD0hMDticmVhaztjYXNlIj8iOkwrPUIsSD0hMDticmVhaztkZWZhdWx0OkwrPSJcXCIreX1LLmRlYnVnKCJjbGVhclN0YXRlQ2hhciAlaiAlaiIseSxMKSx5'@;
put 'PSExfX1mb3IodmFyIHVlLGhlPTAseGU9bGUubGVuZ3RoO2hlPHhlJiYodWU9bGUuY2hhckF0KGhlKSk7aGUrKylpZih0aGlzLmRlYnVnKCIlc1x0JXMgJXMgJWoiLGxlLGhlLEwsdWUpLGomJldbdWVdKUwrPSJcXCIrdWUsaj0hMTtlbHNlIHN3aXRjaCh1ZSl7Y2FzZSIvIjpyZXR1cm4hMTtj'@;
put 'YXNlIlxcIjpuZSgpLGo9ITA7Y29udGludWU7Y2FzZSI/IjpjYXNlIioiOmNhc2UiKyI6Y2FzZSJAIjpjYXNlIiEiOmlmKHRoaXMuZGVidWcoIiVzXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyIixsZSxoZSxMLHVlKSx4KXt0aGlzLmRlYnVnKCIgIGluIGNsYXNzIiksIiEiPT09dWUmJmhlPT09'@;
put 'cCsxJiYodWU9Il4iKSxMKz11ZTtjb250aW51ZX1LLmRlYnVnKCJjYWxsIGNsZWFyU3RhdGVDaGFyICVqIix5KSxuZSgpLHk9dWUsRy5ub2V4dCYmbmUoKTtjb250aW51ZTtjYXNlIigiOmlmKHgpe0wrPSIoIjtjb250aW51ZX1pZigheSl7TCs9IlxcKCI7Y29udGludWV9Zy5wdXNoKHt0eXBl'@;
put 'Onksc3RhcnQ6aGUtMSxyZVN0YXJ0OkwubGVuZ3RoLG9wZW46a1t5XS5vcGVuLGNsb3NlOmtbeV0uY2xvc2V9KSx0aGlzLmRlYnVnKCJwbFR5cGUgJWogJWoiLHksTCs9IiEiPT09eT8iKD86KD8hKD86IjoiKD86IikseT0hMTtjb250aW51ZTtjYXNlIikiOmlmKHh8fCFnLmxlbmd0aCl7TCs9'@;
put 'IlxcKSI7Y29udGludWV9bmUoKSxIPSEwO3ZhciBPZT1nLnBvcCgpO0wrPU9lLmNsb3NlLCIhIj09PU9lLnR5cGUmJlMucHVzaChPZSksT2UucmVFbmQ9TC5sZW5ndGg7Y29udGludWU7Y2FzZSJ8IjppZih4fHwhZy5sZW5ndGh8fGope0wrPSJcXHwiLGo9ITE7Y29udGludWV9bmUoKSxMKz0i'@;
put 'fCI7Y29udGludWU7Y2FzZSJbIjppZihuZSgpLHgpe0wrPSJcXCIrdWU7Y29udGludWV9eD0hMCxwPWhlLF89TC5sZW5ndGgsTCs9dWU7Y29udGludWU7Y2FzZSJdIjppZihoZT09PXArMXx8IXgpe0wrPSJcXCIrdWUsaj0hMTtjb250aW51ZX12YXIgSGU9bGUuc3Vic3RyaW5nKHArMSxoZSk7'@;
put 'dHJ5e1JlZ0V4cCgiWyIrSGUrIl0iKX1jYXRjaHt2YXIgRWU9dGhpcy5wYXJzZShIZSxkZSk7TD1MLnN1YnN0cigwLF8pKyJcXFsiK0VlWzBdKyJcXF0iLEg9SHx8RWVbMV0seD0hMTtjb250aW51ZX1IPSEwLHg9ITEsTCs9dWU7Y29udGludWU7ZGVmYXVsdDpuZSgpLGo/aj0hMTohV1t1ZV18'@;
put 'fCJeIj09PXVlJiZ4fHwoTCs9IlxcIiksTCs9dWV9Zm9yKHgmJihIZT1sZS5zdWJzdHIocCsxKSxFZT10aGlzLnBhcnNlKEhlLGRlKSxMPUwuc3Vic3RyKDAsXykrIlxcWyIrRWVbMF0sSD1IfHxFZVsxXSksT2U9Zy5wb3AoKTtPZTtPZT1nLnBvcCgpKXt2YXIgTGU9TC5zbGljZShPZS5yZVN0'@;
put 'YXJ0K09lLm9wZW4ubGVuZ3RoKTt0aGlzLmRlYnVnKCJzZXR0aW5nIHRhaWwiLEwsT2UpLExlPUxlLnJlcGxhY2UoLygoPzpcXHsyfSl7MCw2NH0pKFxcPylcfC9nLGZ1bmN0aW9uKFRlLEFlLEJlKXtyZXR1cm4gQmV8fChCZT0iXFwiKSxBZStBZStCZSsifCJ9KSx0aGlzLmRlYnVnKCJ0YWls'@;
put 'PSVqXG4gICAlcyIsTGUsTGUsT2UsTCk7dmFyIE5lPSIqIj09PU9lLnR5cGU/TjoiPyI9PT1PZS50eXBlP0I6IlxcIitPZS50eXBlO0g9ITAsTD1MLnNsaWNlKDAsT2UucmVTdGFydCkrTmUrIlxcKCIrTGV9bmUoKSxqJiYoTCs9IlxcXFwiKTt2YXIgS2U9ITE7c3dpdGNoKEwuY2hhckF0KDAp'@;
put 'KXtjYXNlIlsiOmNhc2UiLiI6Y2FzZSIoIjpLZT0hMH1mb3IodmFyIFVlPVMubGVuZ3RoLTE7VWU+LTE7VWUtLSl7dmFyIFhlPVNbVWVdLGF0PUwuc2xpY2UoMCxYZS5yZVN0YXJ0KSxGZT1MLnNsaWNlKFhlLnJlU3RhcnQsWGUucmVFbmQtOCksQ2U9TC5zbGljZShYZS5yZUVuZC04LFhlLnJl'@;
put 'RW5kKSxEZT1MLnNsaWNlKFhlLnJlRW5kKTtDZSs9RGU7dmFyIFJlPWF0LnNwbGl0KCIoIikubGVuZ3RoLTEsZXQ9RGU7Zm9yKGhlPTA7aGU8UmU7aGUrKylldD1ldC5yZXBsYWNlKC9cKVsrKj9dPy8sIiIpO3ZhciBudD0iIjsiIj09PShEZT1ldCkmJmNlIT09ZGUmJihudD0iJCIpLEw9YXQr'@;
put 'RmUrRGUrbnQrQ2V9aWYoIiIhPT1MJiZIJiYoTD0iKD89LikiK0wpLEtlJiYoTD1DK0wpLGNlPT09ZGUpcmV0dXJuW0wsSF07aWYoIUgpcmV0dXJuIGxlLnJlcGxhY2UoL1xcKC4pL2csIiQxIik7dmFyIEdlPUcubm9jYXNlPyJpIjoiIjt0cnl7dmFyIGR0PW5ldyBSZWdFeHAoIl4iK0wrIiQi'@;
put 'LEdlKX1jYXRjaHtyZXR1cm4gbmV3IFJlZ0V4cCgiJC4iKX1yZXR1cm4gZHQuX2dsb2I9bGUsZHQuX3NyYz1MLGR0fTt2YXIgZGU9e307US5tYWtlUmU9ZnVuY3Rpb24obGUsY2Upe3JldHVybiBuZXcgdGUobGUsY2V8fHt9KS5tYWtlUmUoKX0sdGUucHJvdG90eXBlLm1ha2VSZT1mdW5jdGlv'@;
put 'bigpe2lmKHRoaXMucmVnZXhwfHwhMT09PXRoaXMucmVnZXhwKXJldHVybiB0aGlzLnJlZ2V4cDt2YXIgbGU9dGhpcy5zZXQ7aWYoIWxlLmxlbmd0aClyZXR1cm4gdGhpcy5yZWdleHA9ITEsdGhpcy5yZWdleHA7dmFyIGNlPXRoaXMub3B0aW9ucyxHPWNlLm5vZ2xvYnN0YXI/TjpjZS5kb3Q/'@;
put 'Iig/Oig/ISg/OlxcL3xeKSg/OlxcLnsxLDJ9KSgkfFxcLykpLikqPyI6Iig/Oig/ISg/OlxcL3xeKVxcLikuKSo/Iix5PWNlLm5vY2FzZT8iaSI6IiIsTD1sZS5tYXAoZnVuY3Rpb24oSCl7cmV0dXJuIEgubWFwKGZ1bmN0aW9uKGope3JldHVybiBqPT09ST9HOiJzdHJpbmciPT10eXBlb2Yg'@;
put 'aj9qLnJlcGxhY2UoL1stW1xde30oKSorPy4sXFxeJHwjXHNdL2csIlxcJCYiKTpqLl9zcmN9KS5qb2luKCJcXC8iKX0pLmpvaW4oInwiKTtMPSJeKD86IitMKyIpJCIsdGhpcy5uZWdhdGUmJihMPSJeKD8hIitMKyIpLiokIik7dHJ5e3RoaXMucmVnZXhwPW5ldyBSZWdFeHAoTCx5KX1jYXRj'@;
put 'aHt0aGlzLnJlZ2V4cD0hMX1yZXR1cm4gdGhpcy5yZWdleHB9LFEubWF0Y2g9ZnVuY3Rpb24obGUsY2UsRyl7dmFyIHk9bmV3IHRlKGNlLEc9R3x8e30pO3JldHVybiBsZT1sZS5maWx0ZXIoZnVuY3Rpb24oTCl7cmV0dXJuIHkubWF0Y2goTCl9KSx5Lm9wdGlvbnMubm9udWxsJiYhbGUubGVu'@;
put 'Z3RoJiZsZS5wdXNoKGNlKSxsZX0sdGUucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKGxlLGNlKXtpZih2b2lkIDA9PT1jZSYmKGNlPXRoaXMucGFydGlhbCksdGhpcy5kZWJ1ZygibWF0Y2giLGxlLHRoaXMucGF0dGVybiksdGhpcy5jb21tZW50KXJldHVybiExO2lmKHRoaXMuZW1wdHkpcmV0'@;
put 'dXJuIiI9PT1sZTtpZigiLyI9PT1sZSYmY2UpcmV0dXJuITA7dmFyIEc9dGhpcy5vcHRpb25zOyIvIiE9PVUuc2VwJiYobGU9bGUuc3BsaXQoVS5zZXApLmpvaW4oIi8iKSksbGU9bGUuc3BsaXQoeiksdGhpcy5kZWJ1Zyh0aGlzLnBhdHRlcm4sInNwbGl0IixsZSk7dmFyIHksTCxIPXRoaXMu'@;
put 'c2V0O2Zvcih0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwic2V0IixIKSxMPWxlLmxlbmd0aC0xO0w+PTAmJiEoeT1sZVtMXSk7TC0tKTtmb3IoTD0wO0w8SC5sZW5ndGg7TCsrKXt2YXIgaj1IW0xdLGc9bGU7aWYoRy5tYXRjaEJhc2UmJjE9PT1qLmxlbmd0aCYmKGc9W3ldKSx0aGlzLm1hdGNo'@;
put 'T25lKGcsaixjZSkpcmV0dXJuISFHLmZsaXBOZWdhdGV8fCF0aGlzLm5lZ2F0ZX1yZXR1cm4hRy5mbGlwTmVnYXRlJiZ0aGlzLm5lZ2F0ZX0sdGUucHJvdG90eXBlLm1hdGNoT25lPWZ1bmN0aW9uKGxlLGNlLEcpe3ZhciB5PXRoaXMub3B0aW9uczt0aGlzLmRlYnVnKCJtYXRjaE9uZSIse3Ro'@;
put 'aXM6dGhpcyxmaWxlOmxlLHBhdHRlcm46Y2V9KSx0aGlzLmRlYnVnKCJtYXRjaE9uZSIsbGUubGVuZ3RoLGNlLmxlbmd0aCk7Zm9yKHZhciBMPTAsSD0wLGo9bGUubGVuZ3RoLGc9Y2UubGVuZ3RoO0w8aiYmSDxnO0wrKyxIKyspe3RoaXMuZGVidWcoIm1hdGNoT25lIGxvb3AiKTt2YXIgUyx4'@;
put 'PWNlW0hdLF89bGVbTF07aWYodGhpcy5kZWJ1ZyhjZSx4LF8pLCExPT09eClyZXR1cm4hMTtpZih4PT09SSl7dGhpcy5kZWJ1ZygiR0xPQlNUQVIiLFtjZSx4LF9dKTt2YXIgcD1MLEM9SCsxO2lmKEM9PT1nKXtmb3IodGhpcy5kZWJ1ZygiKiogYXQgdGhlIGVuZCIpO0w8ajtMKyspaWYoIi4i'@;
put 'PT09bGVbTF18fCIuLiI9PT1sZVtMXXx8IXkuZG90JiYiLiI9PT1sZVtMXS5jaGFyQXQoMCkpcmV0dXJuITE7cmV0dXJuITB9Zm9yKDtwPGo7KXt2YXIgSz1sZVtwXTtpZih0aGlzLmRlYnVnKCJcbmdsb2JzdGFyIHdoaWxlIixsZSxwLGNlLEMsSyksdGhpcy5tYXRjaE9uZShsZS5zbGljZShw'@;
put 'KSxjZS5zbGljZShDKSxHKSlyZXR1cm4gdGhpcy5kZWJ1ZygiZ2xvYnN0YXIgZm91bmQgbWF0Y2ghIixwLGosSyksITA7aWYoIi4iPT09S3x8Ii4uIj09PUt8fCF5LmRvdCYmIi4iPT09Sy5jaGFyQXQoMCkpe3RoaXMuZGVidWcoImRvdCBkZXRlY3RlZCEiLGxlLHAsY2UsQyk7YnJlYWt9dGhp'@;
put 'cy5kZWJ1ZygiZ2xvYnN0YXIgc3dhbGxvdyBhIHNlZ21lbnQsIGFuZCBjb250aW51ZSIpLHArK31yZXR1cm4hKCFHfHwodGhpcy5kZWJ1ZygiXG4+Pj4gbm8gbWF0Y2gsIHBhcnRpYWw/IixsZSxwLGNlLEMpLHAhPT1qKSl9aWYoInN0cmluZyI9PXR5cGVvZiB4P3RoaXMuZGVidWcoInN0cmlu'@;
put 'ZyBtYXRjaCIseCxfLFM9Xz09PXgpOihTPV8ubWF0Y2goeCksdGhpcy5kZWJ1ZygicGF0dGVybiBtYXRjaCIseCxfLFMpKSwhUylyZXR1cm4hMX1pZihMPT09aiYmSD09PWcpcmV0dXJuITA7aWYoTD09PWopcmV0dXJuIEc7aWYoSD09PWcpcmV0dXJuIEw9PT1qLTEmJiIiPT09bGVbTF07dGhy'@;
put 'b3cgbmV3IEVycm9yKCJ3dGY/Iil9fSw0MjQ0Onc9PnsidXNlIHN0cmljdCI7dmFyIEE9ZnVuY3Rpb24oRCl7cmV0dXJuIEQhPUR9O3cuZXhwb3J0cz1mdW5jdGlvbihELFApe3JldHVybiAwPT09RCYmMD09PVA/MS9EPT0xL1A6RD09PVB8fCEoIUEoRCl8fCFBKFApKX19LDYwOToodyxBLEQp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDI4OSksVT1EKDU1NTkpLEk9RCg0MjQ0KSxFPUQoNTYyNCksaz1EKDIyODEpLEI9VShFKCksT2JqZWN0KTtQKEIse2dldFBvbHlmaWxsOkUsaW1wbGVtZW50YXRpb246SSxzaGltOmt9KSx3LmV4cG9ydHM9Qn0sNTYyNDoodyxBLEQpPT57InVzZSBz'@;
put 'dHJpY3QiO3ZhciBQPUQoNDI0NCk7dy5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6UH19LDIyODE6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDU2MjQpLFU9RCg0Mjg5KTt3LmV4cG9ydHM9ZnVuY3Rpb24oKXt2'@;
put 'YXIgST1QKCk7cmV0dXJuIFUoT2JqZWN0LHtpczpJfSx7aXM6ZnVuY3Rpb24oKXtyZXR1cm4gT2JqZWN0LmlzIT09SX19KSxJfX0sODk4NzoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQO2lmKCFPYmplY3Qua2V5cyl7dmFyIFU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxJ'@;
put 'PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsRT1EKDE0MTQpLGs9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxCPSFrLmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLE49ay5jYWxsKGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIiksVj1bInRvU3RyaW5nIiwi'@;
put 'dG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLFo9ZnVuY3Rpb24ocSl7dmFyIFE9cS5jb25zdHJ1Y3RvcjtyZXR1cm4gUSYmUS5wcm90b3R5cGU9PT1xfSxXPXskYXBw'@;
put 'bGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNoYW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91'@;
put 'dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxmOiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3Jh'@;
put 'Z2VJbmZvOiEwLCR3aW5kb3c6ITB9LHo9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIHEgaW4gd2luZG93KXRyeXtpZighV1siJCIrcV0mJlUuY2FsbCh3aW5kb3cscSkmJm51bGwhPT13aW5kb3dbcV0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W3Fd'@;
put 'KXRyeXtaKHdpbmRvd1txXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO1A9ZnVuY3Rpb24ocSl7dmFyIFE9bnVsbCE9PXEmJiJvYmplY3QiPT10eXBlb2YgcSx0ZT0iW29iamVjdCBGdW5jdGlvbl0iPT09SS5jYWxsKHEpLGFlPUUocSksc2U9USYmIltvYmpl'@;
put 'Y3QgU3RyaW5nXSI9PT1JLmNhbGwocSksZGU9W107aWYoIVEmJiF0ZSYmIWFlKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgbGU9TiYmdGU7aWYoc2UmJnEubGVuZ3RoPjAmJiFVLmNhbGwocSwwKSlmb3IodmFyIGNlPTA7Y2U8'@;
put 'cS5sZW5ndGg7KytjZSlkZS5wdXNoKFN0cmluZyhjZSkpO2lmKGFlJiZxLmxlbmd0aD4wKWZvcih2YXIgRz0wO0c8cS5sZW5ndGg7KytHKWRlLnB1c2goU3RyaW5nKEcpKTtlbHNlIGZvcih2YXIgeSBpbiBxKWxlJiYicHJvdG90eXBlIj09PXl8fCFVLmNhbGwocSx5KXx8ZGUucHVzaChTdHJp'@;
put 'bmcoeSkpO2lmKEIpZm9yKHZhciBMPWZ1bmN0aW9uKGope2lmKHR5cGVvZiB3aW5kb3c+InUifHwheilyZXR1cm4gWihqKTt0cnl7cmV0dXJuIFooail9Y2F0Y2h7cmV0dXJuITF9fShxKSxIPTA7SDxWLmxlbmd0aDsrK0gpTCYmImNvbnN0cnVjdG9yIj09PVZbSF18fCFVLmNhbGwocSxWW0hd'@;
put 'KXx8ZGUucHVzaChWW0hdKTtyZXR1cm4gZGV9fXcuZXhwb3J0cz1QfSwyMjE1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9QXJyYXkucHJvdG90eXBlLnNsaWNlLFU9RCgxNDE0KSxJPU9iamVjdC5rZXlzLEU9ST9mdW5jdGlvbihCKXtyZXR1cm4gSShCKX06RCg4OTg3KSxrPU9iamVj'@;
put 'dC5rZXlzO0Uuc2hpbT1mdW5jdGlvbigpe2lmKE9iamVjdC5rZXlzKXt2YXIgQj1mdW5jdGlvbigpe3ZhciBOPU9iamVjdC5rZXlzKGFyZ3VtZW50cyk7cmV0dXJuIE4mJk4ubGVuZ3RoPT09YXJndW1lbnRzLmxlbmd0aH0oMSwyKTtCfHwoT2JqZWN0LmtleXM9ZnVuY3Rpb24oTil7cmV0dXJu'@;
put 'IFUoTik/ayhQLmNhbGwoTikpOmsoTil9KX1lbHNlIE9iamVjdC5rZXlzPUU7cmV0dXJuIE9iamVjdC5rZXlzfHxFfSx3LmV4cG9ydHM9RX0sMTQxNDp3PT57InVzZSBzdHJpY3QiO3ZhciBBPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7dy5leHBvcnRzPWZ1bmN0aW9uKEQpe3ZhciBQPUEu'@;
put 'Y2FsbChEKSxVPSJbb2JqZWN0IEFyZ3VtZW50c10iPT09UDtyZXR1cm4gVXx8KFU9IltvYmplY3QgQXJyYXldIiE9PVAmJm51bGwhPT1EJiYib2JqZWN0Ij09dHlwZW9mIEQmJiJudW1iZXIiPT10eXBlb2YgRC5sZW5ndGgmJkQubGVuZ3RoPj0wJiYiW29iamVjdCBGdW5jdGlvbl0iPT09QS5j'@;
put 'YWxsKEQuY2FsbGVlKSksVX19LDc3ODoodyxBLEQpPT57dmFyIFA9RCgyNDc5KTtmdW5jdGlvbiBVKEUpe3ZhciBrPWZ1bmN0aW9uKCl7cmV0dXJuIGsuY2FsbGVkP2sudmFsdWU6KGsuY2FsbGVkPSEwLGsudmFsdWU9RS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfTtyZXR1cm4gay5jYWxsZWQ9'@;
put 'ITEsa31mdW5jdGlvbiBJKEUpe3ZhciBrPWZ1bmN0aW9uKCl7aWYoay5jYWxsZWQpdGhyb3cgbmV3IEVycm9yKGsub25jZUVycm9yKTtyZXR1cm4gay5jYWxsZWQ9ITAsay52YWx1ZT1FLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGsub25jZUVycm9yPShFLm5hbWV8fCJGdW5jdGlv'@;
put 'biB3cmFwcGVkIHdpdGggYG9uY2VgIikrIiBzaG91bGRuJ3QgYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIixrLmNhbGxlZD0hMSxrfXcuZXhwb3J0cz1QKFUpLHcuZXhwb3J0cy5zdHJpY3Q9UChJKSxVLnByb3RvPVUoZnVuY3Rpb24oKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoRnVuY3Rpb24u'@;
put 'cHJvdG90eXBlLCJvbmNlIix7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzKX0sY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEZ1bmN0aW9uLnByb3RvdHlwZSwib25jZVN0cmljdCIse3ZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyl9LGNvbmZpZ3Vy'@;
put 'YWJsZTohMH0pfSl9LDc0MzU6KHcsQSk9PntBLmVuZGlhbm5lc3M9ZnVuY3Rpb24oKXtyZXR1cm4iTEUifSxBLmhvc3RuYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVvZiBsb2NhdGlvbjwidSI/bG9jYXRpb24uaG9zdG5hbWU6IiJ9LEEubG9hZGF2Zz1mdW5jdGlvbigpe3JldHVybltdfSxB'@;
put 'LnVwdGltZT1mdW5jdGlvbigpe3JldHVybiAwfSxBLmZyZWVtZW09ZnVuY3Rpb24oKXtyZXR1cm4gTnVtYmVyLk1BWF9WQUxVRX0sQS50b3RhbG1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxBLmNwdXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sQS50eXBlPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIkJyb3dzZXIifSxBLnJlbGVhc2U9ZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIG5hdmlnYXRvcjwidSI/bmF2aWdhdG9yLmFwcFZlcnNpb246IiJ9LEEubmV0d29ya0ludGVyZmFjZXM9QS5nZXROZXR3b3JrSW50ZXJmYWNlcz1mdW5jdGlvbigpe3JldHVybnt9fSxBLmFyY2g9'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4iamF2YXNjcmlwdCJ9LEEucGxhdGZvcm09ZnVuY3Rpb24oKXtyZXR1cm4iYnJvd3NlciJ9LEEudG1wZGlyPUEudG1wRGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi90bXAifSxBLkVPTD0iXG4iLEEuaG9tZWRpcj1mdW5jdGlvbigpe3JldHVybiIvIn19LDI4MTg6KHcs'@;
put 'QSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDk4MDkpO0EuY2VydGlmaWNhdGU9RCgxOTM0KTt2YXIgVT1QLmRlZmluZSgiUlNBUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCks'@;
put 'dGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIi'@;
put 'KS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtBLlJTQVByaXZhdGVLZXk9VTt2YXIgST1QLmRlZmluZSgiUlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50'@;
put 'IikuaW50KCkpfSk7QS5SU0FQdWJsaWNLZXk9STt2YXIgRT1QLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShrKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pO0Eu'@;
put 'UHVibGljS2V5PUU7dmFyIGs9UC5kZWZpbmUoIkFsZ29yaXRobUlkZW50aWZpZXIiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLm9iamlkKCksdGhpcy5rZXkoIm5vbmUiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQo'@;
put 'KS5vcHRpb25hbCgpLHRoaXMua2V5KCJwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCkpLm9wdGlvbmFsKCkpfSksQj1QLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEo'@;
put 'KS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKGspLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0EuUHJpdmF0ZUtleT1CO3ZhciBOPVAuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rp'@;
put 'b24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJr'@;
put 'ZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRoaXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJz'@;
put 'dWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO0EuRW5jcnlwdGVkUHJpdmF0ZUtleT1OO3ZhciBWPVAuZGVmaW5lKCJEU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtl'@;
put 'eSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9rZXkiKS5pbnQoKSl9KTtBLkRTQVByaXZhdGVLZXk9VixBLkRTQXBhcmFtPVAuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFy'@;
put 'IFo9UC5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZShXKSx0'@;
put 'aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtBLkVDUHJpdmF0ZUtleT1aO3ZhciBXPVAuZGVmaW5lKCJFQ1BhcmFtZXRlcnMiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtBLnNpZ25hdHVy'@;
put 'ZT1QLmRlZmluZSgic2lnbmF0dXJlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJyIikuaW50KCksdGhpcy5rZXkoInMiKS5pbnQoKSl9KX0sMTkzNDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoOTgwOSksVT1QLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0'@;
put 'aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksST1QLmRlZmluZSgiQXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUi'@;
put 'KS5hbnkoKSl9KSxFPVAuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlv'@;
put 'bmFsKCkpfSksaz1QLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ29yaXRobSIpLnVzZShFKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLEI9UC5kZWZpbmUoIlJlbGF0aXZlRGlzdGlu'@;
put 'Z3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihJKX0pLE49UC5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3RoaXMuc2Vxb2YoQil9KSxWPVAuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShOKX0pfSksWj1Q'@;
put 'LmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZShVKSx0aGlzLmtleSgibm90QWZ0ZXIiKS51c2UoVSkpfSksVz1QLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJl'@;
put 'eHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3RzdHIoKSl9KSx6PVAuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxp'@;
put 'Y2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51c2UoRSksdGhpcy5rZXkoImlzc3VlciIpLnVzZShWKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoWiksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoViks'@;
put 'dGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKGspLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5r'@;
put 'ZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihXKS5vcHRpb25hbCgpKX0pLHE9UC5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoeiksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29y'@;
put 'aXRobSIpLnVzZShFKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt3LmV4cG9ydHM9cX0sNzYzMToodyxBLEQpPT57dmFyIFA9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAt'@;
put 'OUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20sVT0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sST0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEt'@;
put 'LS0tLSQvbSxFPUQoMzA0OCksaz1EKDQ2OTYpLEI9RCg5NTA5KS5CdWZmZXI7dy5leHBvcnRzPWZ1bmN0aW9uKE4sVil7dmFyIFosVz1OLnRvU3RyaW5nKCksej1XLm1hdGNoKFApO2lmKHope3ZhciBxPSJhZXMiK3pbMV0sUT1CLmZyb20oelsyXSwiaGV4IiksdGU9Qi5mcm9tKHpbM10ucmVw'@;
put 'bGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxhZT1FKFYsUS5zbGljZSgwLDgpLHBhcnNlSW50KHpbMV0sMTApKS5rZXksc2U9W10sZGU9ay5jcmVhdGVEZWNpcGhlcml2KHEsYWUsUSk7c2UucHVzaChkZS51cGRhdGUodGUpKSxzZS5wdXNoKGRlLmZpbmFsKCkpLFo9Qi5jb25jYXQoc2Up'@;
put 'fWVsc2V7dmFyIGxlPVcubWF0Y2goSSk7Wj1CLmZyb20obGVbMl0ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOlcubWF0Y2goVSlbMV0sZGF0YTpafX19LDk4MDoodyxBLEQpPT57dmFyIFA9RCgyODE4KSxVPUQoMjU2MiksST1EKDc2MzEpLEU9RCg0Njk2KSxr'@;
put 'PUQoNTYzMiksQj1EKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBOKFYpe3ZhciBaOyJvYmplY3QiIT10eXBlb2YgVnx8Qi5pc0J1ZmZlcihWKXx8KFo9Vi5wYXNzcGhyYXNlLFY9Vi5rZXkpLCJzdHJpbmciPT10eXBlb2YgViYmKFY9Qi5mcm9tKFYpKTt2YXIgVyx6LGFlLHNlLGRlLGxlLGNlLEcs'@;
put 'eSxMLEgsaixnLHE9SShWLFopLFE9cS50YWcsdGU9cS5kYXRhO3N3aXRjaChRKXtjYXNlIkNFUlRJRklDQVRFIjp6PVAuY2VydGlmaWNhdGUuZGVjb2RlKHRlLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaCh6fHwoej1Q'@;
put 'LlB1YmxpY0tleS5kZWNvZGUodGUsImRlciIpKSxXPXouYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKCIuIikpe2Nhc2UiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOnJldHVybiBQLlJTQVB1YmxpY0tleS5kZWNvZGUoei5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpO2Nhc2UiMS4yLjg0MC4x'@;
put 'MDA0NS4yLjEiOnJldHVybiB6LnN1YmplY3RQcml2YXRlS2V5PXouc3ViamVjdFB1YmxpY0tleSx7dHlwZToiZWMiLGRhdGE6en07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIHouYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PVAuRFNBcGFyYW0uZGVjb2RlKHouc3ViamVjdFB1Ymxp'@;
put 'Y0tleS5kYXRhLCJkZXIiKSx7dHlwZToiZHNhIixkYXRhOnouYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJFTkNSWVBURUQgUFJJVkFURSBLRVkiOnNlPVosZGU9KGFlPXRlPVAuRW5jcnlwdGVkUHJpdmF0ZUtleS5k'@;
put 'ZWNvZGUodGUsImRlciIpKS5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsbGU9cGFyc2VJbnQoYWUuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxjZT1VW2FlLmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4o'@;
put 'Ii4iKV0sRz1hZS5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYseT1hZS5zdWJqZWN0UHJpdmF0ZUtleSxMPXBhcnNlSW50KGNlLnNwbGl0KCItIilbMV0sMTApLzgsSD1rLnBia2RmMlN5bmMoc2UsZGUsbGUsTCwic2hhMSIpLGo9RS5jcmVhdGVEZWNpcGhlcml2KGNlLEgsRyksKGc9W10p'@;
put 'LnB1c2goai51cGRhdGUoeSkpLGcucHVzaChqLmZpbmFsKCkpLHRlPUIuY29uY2F0KGcpO2Nhc2UiUFJJVkFURSBLRVkiOnN3aXRjaChXPSh6PVAuUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4x'@;
put 'LjEuMSI6cmV0dXJuIFAuUlNBUHJpdmF0ZUtleS5kZWNvZGUoei5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOnouYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6UC5FQ1ByaXZhdGVLZXkuZGVjb2RlKHouc3ViamVjdFByaXZh'@;
put 'dGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0MC4xMDA0MC40LjEiOnJldHVybiB6LmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9UC5EU0FwYXJhbS5kZWNvZGUoei5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOnouYWxnb3JpdGhtLnBhcmFt'@;
put 'c307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24ga2V5IGlkICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIFAuUlNBUHVibGljS2V5LmRlY29kZSh0ZSwiZGVyIik7Y2FzZSJSU0EgUFJJVkFURSBLRVkiOnJldHVybiBQLlJTQVByaXZhdGVLZXkuZGVjb2RlKHRlLCJk'@;
put 'ZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOlAuRFNBUHJpdmF0ZUtleS5kZWNvZGUodGUsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KHRlPVAuRUNQcml2YXRlS2V5LmRlY29kZSh0ZSwiZGVyIikpLnBhcmFtZXRl'@;
put 'cnMudmFsdWUscHJpdmF0ZUtleTp0ZS5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK1EpfX13LmV4cG9ydHM9TixOLnNpZ25hdHVyZT1QLnNpZ25hdHVyZX0sNDA5NToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSk7ZnVu'@;
put 'Y3Rpb24gVShFKXtyZXR1cm4iLyI9PT1FLmNoYXJBdCgwKX1mdW5jdGlvbiBJKEUpe3ZhciBrPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9dK1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLmV4ZWMoRSksQj1rWzFdfHwiIixOPSEoIUJ8fCI6Ij09PUIuY2hhckF0'@;
put 'KDEpKTtyZXR1cm4hKCFrWzJdJiYhTil9dy5leHBvcnRzPSJ3aW4zMiI9PT1QLnBsYXRmb3JtP0k6VSx3LmV4cG9ydHMucG9zaXg9VSx3LmV4cG9ydHMud2luMzI9SX0sMTcyNTp3PT57dy5leHBvcnRzPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEEsRCl7QS5z'@;
put 'dXBlcl89RCxBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6QSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06ZnVuY3Rpb24oQSxEKXtBLnN1cGVyXz1EO3ZhciBQPWZ1bmN0aW9uKCl7fTtQLnByb3Rv'@;
put 'dHlwZT1ELnByb3RvdHlwZSxBLnByb3RvdHlwZT1uZXcgUCxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BfX0sMjk3NDp3PT57dy5leHBvcnRzPWZ1bmN0aW9uKEEpe3JldHVybiBBJiYib2JqZWN0Ij09dHlwZW9mIEEmJiJmdW5jdGlvbiI9PXR5cGVvZiBBLmNvcHkmJiJmdW5jdGlvbiI9PXR5'@;
put 'cGVvZiBBLmZpbGwmJiJmdW5jdGlvbiI9PXR5cGVvZiBBLnJlYWRVSW50OH19LDgwNTk6KHcsQSxEKT0+e3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpLEk9LyVbc2RqJV0vZztBLmZvcm1hdD1mdW5jdGlvbih4KXtpZighc2UoeCkpe2Zvcih2YXIgXz1bXSxwPTA7cDxhcmd1bWVudHMubGVuZ3Ro'@;
put 'O3ArKylfLnB1c2goQihhcmd1bWVudHNbcF0pKTtyZXR1cm4gXy5qb2luKCIgIil9cD0xO2Zvcih2YXIgQz1hcmd1bWVudHMsSz1DLmxlbmd0aCxuZT1TdHJpbmcoeCkucmVwbGFjZShJLGZ1bmN0aW9uKGhlKXtpZigiJSUiPT09aGUpcmV0dXJuIiUiO2lmKHA+PUspcmV0dXJuIGhlO3N3aXRj'@;
put 'aChoZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhDW3ArK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoQ1twKytdKTtjYXNlIiVqIjp0cnl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KENbcCsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIGhlfX0pLHVlPUNbcF07'@;
put 'cDxLO3VlPUNbKytwXSl0ZSh1ZSl8fCFjZSh1ZSk/bmUrPSIgIit1ZTpuZSs9IiAiK0IodWUpO3JldHVybiBuZX0sQS5kZXByZWNhdGU9ZnVuY3Rpb24oeCxfKXtpZihkZShELmcucHJvY2VzcykpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuZGVwcmVjYXRlKHgsXykuYXBwbHkodGhpcyxh'@;
put 'cmd1bWVudHMpfTtpZighMD09PVAubm9EZXByZWNhdGlvbilyZXR1cm4geDt2YXIgcD0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighcCl7aWYoUC50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihfKTtQLnRyYWNlRGVwcmVjYXRpb24/VS50cmFjZShfKTpVLmVycm9yKF8pLHA9ITB9'@;
put 'cmV0dXJuIHguYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIEUsaz17fTtmdW5jdGlvbiBCKHgsXyl7dmFyIHA9e3NlZW46W10sc3R5bGl6ZTpWfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHAuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYocC5jb2xv'@;
put 'cnM9YXJndW1lbnRzWzNdKSxRKF8pP3Auc2hvd0hpZGRlbj1fOl8mJkEuX2V4dGVuZChwLF8pLGRlKHAuc2hvd0hpZGRlbikmJihwLnNob3dIaWRkZW49ITEpLGRlKHAuZGVwdGgpJiYocC5kZXB0aD0yKSxkZShwLmNvbG9ycykmJihwLmNvbG9ycz0hMSksZGUocC5jdXN0b21JbnNwZWN0KSYm'@;
put 'KHAuY3VzdG9tSW5zcGVjdD0hMCkscC5jb2xvcnMmJihwLnN0eWxpemU9TiksWihwLHgscC5kZXB0aCl9ZnVuY3Rpb24gTih4LF8pe3ZhciBwPUIuc3R5bGVzW19dO3JldHVybiBwPyJceDFiWyIrQi5jb2xvcnNbcF1bMF0rIm0iK3grIlx4MWJbIitCLmNvbG9yc1twXVsxXSsibSI6eH1mdW5j'@;
put 'dGlvbiBWKHgsXyl7cmV0dXJuIHh9ZnVuY3Rpb24gWih4LF8scCl7aWYoeC5jdXN0b21JbnNwZWN0JiZfJiZMKF8uaW5zcGVjdCkmJl8uaW5zcGVjdCE9PUEuaW5zcGVjdCYmKCFfLmNvbnN0cnVjdG9yfHxfLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PV8pKXt2YXIgQz1fLmluc3BlY3QocCx4'@;
put 'KTtyZXR1cm4gc2UoQyl8fChDPVooeCxDLHApKSxDfXZhciBLPWZ1bmN0aW9uKExlLE5lKXtpZihkZShOZSkpcmV0dXJuIExlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKHNlKE5lKSl7dmFyIEtlPSInIitKU09OLnN0cmluZ2lmeShOZSkucmVwbGFjZSgvXiJ8IiQvZywi'@;
put 'IikucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gTGUuc3R5bGl6ZShLZSwic3RyaW5nIil9cmV0dXJuIGFlKE5lKT9MZS5zdHlsaXplKCIiK05lLCJudW1iZXIiKTpRKE5lKT9MZS5zdHlsaXplKCIiK05lLCJib29sZWFuIik6dGUoTmUpP0xlLnN0'@;
put 'eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfSh4LF8pO2lmKEspcmV0dXJuIEs7dmFyIE5lLG5lPU9iamVjdC5rZXlzKF8pLHVlPShOZT17fSxuZS5mb3JFYWNoKGZ1bmN0aW9uKEtlLFVlKXtOZVtLZV09ITB9KSxOZSk7aWYoeC5zaG93SGlkZGVuJiYobmU9T2JqZWN0LmdldE93blByb3Bl'@;
put 'cnR5TmFtZXMoXykpLHkoXykmJihuZS5pbmRleE9mKCJtZXNzYWdlIik+PTB8fG5lLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBXKF8pO2lmKDA9PT1uZS5sZW5ndGgpe2lmKEwoXykpcmV0dXJuIHguc3R5bGl6ZSgiW0Z1bmN0aW9uIisoXy5uYW1lPyI6ICIrXy5uYW1lOiIi'@;
put 'KSsiXSIsInNwZWNpYWwiKTtpZihsZShfKSlyZXR1cm4geC5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfKSwicmVnZXhwIik7aWYoRyhfKSlyZXR1cm4geC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXyksImRhdGUiKTtpZih5KF8pKXJldHVy'@;
put 'biBXKF8pfXZhciB4ZSxPZT0iIixIZT0hMSxFZT1bInsiLCJ9Il07cmV0dXJuIHEoXykmJihIZT0hMCxFZT1bIlsiLCJdIl0pLEwoXykmJihPZT0iIFtGdW5jdGlvbiIrKF8ubmFtZT8iOiAiK18ubmFtZToiIikrIl0iKSxsZShfKSYmKE9lPSIgIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5n'@;
put 'LmNhbGwoXykpLEcoXykmJihPZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChfKSkseShfKSYmKE9lPSIgIitXKF8pKSwwIT09bmUubGVuZ3RofHxIZSYmMCE9Xy5sZW5ndGg/cDwwP2xlKF8pP3guc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoXyks'@;
put 'InJlZ2V4cCIpOnguc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHguc2Vlbi5wdXNoKF8pLHhlPUhlP2Z1bmN0aW9uKExlLE5lLEtlLFVlLFhlKXtmb3IodmFyIGF0PVtdLEZlPTAsQ2U9TmUubGVuZ3RoO0ZlPENlOysrRmUpUyhOZSxTdHJpbmcoRmUpKT9hdC5wdXNoKHooTGUsTmUs'@;
put 'S2UsVWUsU3RyaW5nKEZlKSwhMCkpOmF0LnB1c2goIiIpO3JldHVybiBYZS5mb3JFYWNoKGZ1bmN0aW9uKERlKXtEZS5tYXRjaCgvXlxkKyQvKXx8YXQucHVzaCh6KExlLE5lLEtlLFVlLERlLCEwKSl9KSxhdH0oeCxfLHAsdWUsbmUpOm5lLm1hcChmdW5jdGlvbihMZSl7cmV0dXJuIHooeCxf'@;
put 'LHAsdWUsTGUsSGUpfSkseC5zZWVuLnBvcCgpLGZ1bmN0aW9uKExlLE5lLEtlKXtyZXR1cm4gTGUucmVkdWNlKGZ1bmN0aW9uKFhlLGF0KXtyZXR1cm4gYXQuaW5kZXhPZigiXG4iKSxYZSthdC5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk+NjA/S2VbMF0rKCIi'@;
put 'PT09TmU/IiI6TmUrIlxuICIpKyIgIitMZS5qb2luKCIsXG4gICIpKyIgIitLZVsxXTpLZVswXStOZSsiICIrTGUuam9pbigiLCAiKSsiICIrS2VbMV19KHhlLE9lLEVlKSk6RWVbMF0rT2UrRWVbMV19ZnVuY3Rpb24gVyh4KXtyZXR1cm4iWyIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNh'@;
put 'bGwoeCkrIl0ifWZ1bmN0aW9uIHooeCxfLHAsQyxLLG5lKXt2YXIgdWUsaGUseGU7aWYoKHhlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXyxLKXx8e3ZhbHVlOl9bS119KS5nZXQ/aGU9eC5zdHlsaXplKHhlLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVj'@;
put 'aWFsIik6eGUuc2V0JiYoaGU9eC5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksUyhDLEspfHwodWU9IlsiK0srIl0iKSxoZXx8KHguc2Vlbi5pbmRleE9mKHhlLnZhbHVlKTwwPyhoZT10ZShwKT9aKHgseGUudmFsdWUsbnVsbCk6Wih4LHhlLnZhbHVlLHAtMSkpLmluZGV4T2YoIlxu'@;
put 'Iik+LTEmJihoZT1uZT9oZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oT2Upe3JldHVybiIgICIrT2V9KS5qb2luKCJcbiIpLnN1YnN0cigyKToiXG4iK2hlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihPZSl7cmV0dXJuIiAgICIrT2V9KS5qb2luKCJcbiIpKTpoZT14LnN0eWxpemUoIltD'@;
put 'aXJjdWxhcl0iLCJzcGVjaWFsIikpLGRlKHVlKSl7aWYobmUmJksubWF0Y2goL15cZCskLykpcmV0dXJuIGhlOyh1ZT1KU09OLnN0cmluZ2lmeSgiIitLKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8odWU9dWUuc3Vic3RyKDEsdWUubGVuZ3RoLTIpLHVlPXguc3R5'@;
put 'bGl6ZSh1ZSwibmFtZSIpKToodWU9dWUucmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLHVlPXguc3R5bGl6ZSh1ZSwic3RyaW5nIikpfXJldHVybiB1ZSsiOiAiK2hlfWZ1bmN0aW9uIHEoeCl7cmV0dXJuIEFycmF5LmlzQXJy'@;
put 'YXkoeCl9ZnVuY3Rpb24gUSh4KXtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB4fWZ1bmN0aW9uIHRlKHgpe3JldHVybiBudWxsPT09eH1mdW5jdGlvbiBhZSh4KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHh9ZnVuY3Rpb24gc2UoeCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB4fWZ1bmN0aW9u'@;
put 'IGRlKHgpe3JldHVybiB2b2lkIDA9PT14fWZ1bmN0aW9uIGxlKHgpe3JldHVybiBjZSh4KSYmIltvYmplY3QgUmVnRXhwXSI9PT1IKHgpfWZ1bmN0aW9uIGNlKHgpe3JldHVybiJvYmplY3QiPT10eXBlb2YgeCYmbnVsbCE9PXh9ZnVuY3Rpb24gRyh4KXtyZXR1cm4gY2UoeCkmJiJbb2JqZWN0'@;
put 'IERhdGVdIj09PUgoeCl9ZnVuY3Rpb24geSh4KXtyZXR1cm4gY2UoeCkmJigiW29iamVjdCBFcnJvcl0iPT09SCh4KXx8eCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBMKHgpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB4fWZ1bmN0aW9uIEgoeCl7cmV0dXJuIE9iamVjdC5wcm90b3R5'@;
put 'cGUudG9TdHJpbmcuY2FsbCh4KX1mdW5jdGlvbiBqKHgpe3JldHVybiB4PDEwPyIwIit4LnRvU3RyaW5nKDEwKTp4LnRvU3RyaW5nKDEwKX1BLmRlYnVnbG9nPWZ1bmN0aW9uKHgpe2lmKGRlKEUpJiYoRT1QLmVudi5OT0RFX0RFQlVHfHwiIikseD14LnRvVXBwZXJDYXNlKCksIWtbeF0paWYo'@;
put 'bmV3IFJlZ0V4cCgiXFxiIit4KyJcXGIiLCJpIikudGVzdChFKSl7dmFyIF89UC5waWQ7a1t4XT1mdW5jdGlvbigpe3ZhciBwPUEuZm9ybWF0LmFwcGx5KEEsYXJndW1lbnRzKTtVLmVycm9yKCIlcyAlZDogJXMiLHgsXyxwKX19ZWxzZSBrW3hdPWZ1bmN0aW9uKCl7fTtyZXR1cm4ga1t4XX0s'@;
put 'QS5pbnNwZWN0PUIsQi5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdl'@;
put 'bnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LEIuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoi'@;
put 'cmVkIn0sQS5pc0FycmF5PXEsQS5pc0Jvb2xlYW49USxBLmlzTnVsbD10ZSxBLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKHgpe3JldHVybiBudWxsPT14fSxBLmlzTnVtYmVyPWFlLEEuaXNTdHJpbmc9c2UsQS5pc1N5bWJvbD1mdW5jdGlvbih4KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9m'@;
put 'IHh9LEEuaXNVbmRlZmluZWQ9ZGUsQS5pc1JlZ0V4cD1sZSxBLmlzT2JqZWN0PWNlLEEuaXNEYXRlPUcsQS5pc0Vycm9yPXksQS5pc0Z1bmN0aW9uPUwsQS5pc1ByaW1pdGl2ZT1mdW5jdGlvbih4KXtyZXR1cm4gbnVsbD09PXh8fCJib29sZWFuIj09dHlwZW9mIHh8fCJudW1iZXIiPT10eXBl'@;
put 'b2YgeHx8InN0cmluZyI9PXR5cGVvZiB4fHwic3ltYm9sIj09dHlwZW9mIHh8fHZvaWQgMD09PXh9LEEuaXNCdWZmZXI9RCgyOTc0KTt2YXIgZz1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9u'@;
put 'IFMoeCxfKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHgsXyl9QS5sb2c9ZnVuY3Rpb24oKXt2YXIgeCxfO1UubG9nKCIlcyAtICVzIiwoXz1baigoeD1uZXcgRGF0ZSkuZ2V0SG91cnMoKSksaih4LmdldE1pbnV0ZXMoKSksaih4LmdldFNlY29uZHMoKSld'@;
put 'LmpvaW4oIjoiKSxbeC5nZXREYXRlKCksZ1t4LmdldE1vbnRoKCldLF9dLmpvaW4oIiAiKSksQS5mb3JtYXQuYXBwbHkoQSxhcmd1bWVudHMpKX0sQS5pbmhlcml0cz1EKDE3MjUpLEEuX2V4dGVuZD1mdW5jdGlvbih4LF8pe2lmKCFffHwhY2UoXykpcmV0dXJuIHg7Zm9yKHZhciBwPU9iamVj'@;
put 'dC5rZXlzKF8pLEM9cC5sZW5ndGg7Qy0tOyl4W3BbQ11dPV9bcFtDXV07cmV0dXJuIHh9fSwyNTIwOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KSxVPSJ3aW4zMiI9PT1QLnBsYXRmb3JtLEk9RCg4MDU5KTtmdW5jdGlvbiBFKGFlLHNlKXtmb3IodmFyIGRlPVtdLGxlPTA7'@;
put 'bGU8YWUubGVuZ3RoO2xlKyspe3ZhciBjZT1hZVtsZV07Y2UmJiIuIiE9PWNlJiYoIi4uIj09PWNlP2RlLmxlbmd0aCYmIi4uIiE9PWRlW2RlLmxlbmd0aC0xXT9kZS5wb3AoKTpzZSYmZGUucHVzaCgiLi4iKTpkZS5wdXNoKGNlKSl9cmV0dXJuIGRlfWZ1bmN0aW9uIGsoYWUpe2Zvcih2YXIg'@;
put 'c2U9YWUubGVuZ3RoLTEsZGU9MDtkZTw9c2UmJiFhZVtkZV07ZGUrKyk7Zm9yKHZhciBsZT1zZTtsZT49MCYmIWFlW2xlXTtsZS0tKTtyZXR1cm4gMD09PWRlJiZsZT09PXNlP2FlOmRlPmxlP1tdOmFlLnNsaWNlKGRlLGxlKzEpfXZhciBCPS9eKFthLXpBLVpdOnxbXFxcL117Mn1bXlxcXC9d'@;
put 'K1tcXFwvXStbXlxcXC9dKyk/KFtcXFwvXSk/KFtcc1xTXSo/KSQvLE49L14oW1xzXFNdKj8pKCg/OlwuezEsMn18W15cXFwvXSs/fCkoXC5bXi5cL1xcXSp8KSkoPzpbXFxcL10qKSQvLFY9e307ZnVuY3Rpb24gWihhZSl7dmFyIHNlPUIuZXhlYyhhZSksZGU9KHNlWzFdfHwiIikrKHNlWzJd'@;
put 'fHwiIiksY2U9Ti5leGVjKHNlWzNdfHwiIik7cmV0dXJuW2RlLGNlWzFdLGNlWzJdLGNlWzNdXX1mdW5jdGlvbiBXKGFlKXt2YXIgc2U9Qi5leGVjKGFlKSxkZT1zZVsxXXx8IiIsbGU9ISFkZSYmIjoiIT09ZGVbMV07cmV0dXJue2RldmljZTpkZSxpc1VuYzpsZSxpc0Fic29sdXRlOmxlfHwh'@;
put 'IXNlWzJdLHRhaWw6c2VbM119fWZ1bmN0aW9uIHooYWUpe3JldHVybiJcXFxcIithZS5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1WLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGFlPSIiLHNlPSIiLGRlPSExLGxlPWFyZ3VtZW50cy5sZW5ndGgt'@;
put 'MTtsZT49LTE7bGUtLSl7dmFyIGNlO2lmKGxlPj0wP2NlPWFyZ3VtZW50c1tsZV06YWU/KGNlPVAuZW52WyI9IithZV0pJiZjZS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpPT09YWUudG9Mb3dlckNhc2UoKSsiXFwifHwoY2U9YWUrIlxcIik6Y2U9UC5jd2QoKSwhSS5pc1N0cmluZyhjZSkp'@;
put 'dGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtpZihjZSl7dmFyIEc9VyhjZSkseT1HLmRldmljZSxMPUcuaXNVbmMsSD1HLmlzQWJzb2x1dGUsaj1HLnRhaWw7aWYoKCF5fHwhYWV8fHkudG9Mb3dlckNhc2UoKT09PWFlLnRv'@;
put 'TG93ZXJDYXNlKCkpJiYoYWV8fChhZT15KSxkZXx8KHNlPWorIlxcIitzZSxkZT1IKSxhZSYmZGUpKWJyZWFrfX1yZXR1cm4gTCYmKGFlPXooYWUpKSxhZSsoZGU/IlxcIjoiIikrKHNlPUUoc2Uuc3BsaXQoL1tcXFwvXSsvKSwhZGUpLmpvaW4oIlxcIikpfHwiLiJ9LFYubm9ybWFsaXplPWZ1'@;
put 'bmN0aW9uKGFlKXt2YXIgc2U9VyhhZSksZGU9c2UuZGV2aWNlLGxlPXNlLmlzVW5jLGNlPXNlLmlzQWJzb2x1dGUsRz1zZS50YWlsLHk9L1tcXFwvXSQvLnRlc3QoRyk7cmV0dXJuKEc9RShHLnNwbGl0KC9bXFxcL10rLyksIWNlKS5qb2luKCJcXCIpKXx8Y2V8fChHPSIuIiksRyYmeSYmKEcr'@;
put 'PSJcXCIpLGxlJiYoZGU9eihkZSkpLGRlKyhjZT8iXFwiOiIiKStHfSxWLmlzQWJzb2x1dGU9ZnVuY3Rpb24oYWUpe3JldHVybiBXKGFlKS5pc0Fic29sdXRlfSxWLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIGFlPVtdLHNlPTA7c2U8YXJndW1lbnRzLmxlbmd0aDtzZSsrKXt2YXIgZGU9YXJn'@;
put 'dW1lbnRzW3NlXTtpZighSS5pc1N0cmluZyhkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtkZSYmYWUucHVzaChkZSl9dmFyIGxlPWFlLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KGFlWzBd'@;
put 'KXx8KGxlPWxlLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksVi5ub3JtYWxpemUobGUpfSxWLnJlbGF0aXZlPWZ1bmN0aW9uKGFlLHNlKXthZT1WLnJlc29sdmUoYWUpLHNlPVYucmVzb2x2ZShzZSk7Zm9yKHZhciBkZT1hZS50b0xvd2VyQ2FzZSgpLGxlPXNlLnRvTG93ZXJDYXNlKCks'@;
put 'Y2U9ayhzZS5zcGxpdCgiXFwiKSksRz1rKGRlLnNwbGl0KCJcXCIpKSx5PWsobGUuc3BsaXQoIlxcIikpLEw9TWF0aC5taW4oRy5sZW5ndGgseS5sZW5ndGgpLEg9TCxqPTA7ajxMO2orKylpZihHW2pdIT09eVtqXSl7SD1qO2JyZWFrfWlmKDA9PUgpcmV0dXJuIHNlO3ZhciBnPVtdO2Zvcihq'@;
put 'PUg7ajxHLmxlbmd0aDtqKyspZy5wdXNoKCIuLiIpO3JldHVybihnPWcuY29uY2F0KGNlLnNsaWNlKEgpKSkuam9pbigiXFwiKX0sVi5fbWFrZUxvbmc9ZnVuY3Rpb24oYWUpe2lmKCFJLmlzU3RyaW5nKGFlKSlyZXR1cm4gYWU7aWYoIWFlKXJldHVybiIiO3ZhciBzZT1WLnJlc29sdmUoYWUp'@;
put 'O3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KHNlKT8iXFxcXD9cXCIrc2U6L15cXFxcW14/Ll0vLnRlc3Qoc2UpPyJcXFxcP1xcVU5DXFwiK3NlLnN1YnN0cmluZygyKTphZX0sVi5kaXJuYW1lPWZ1bmN0aW9uKGFlKXt2YXIgc2U9WihhZSksZGU9c2VbMF0sbGU9c2VbMV07cmV0dXJuIGRl'@;
put 'fHxsZT8obGUmJihsZT1sZS5zdWJzdHIoMCxsZS5sZW5ndGgtMSkpLGRlK2xlKToiLiJ9LFYuYmFzZW5hbWU9ZnVuY3Rpb24oYWUsc2Upe3ZhciBkZT1aKGFlKVsyXTtyZXR1cm4gc2UmJmRlLnN1YnN0cigtMSpzZS5sZW5ndGgpPT09c2UmJihkZT1kZS5zdWJzdHIoMCxkZS5sZW5ndGgtc2Uu'@;
put 'bGVuZ3RoKSksZGV9LFYuZXh0bmFtZT1mdW5jdGlvbihhZSl7cmV0dXJuIFooYWUpWzNdfSxWLmZvcm1hdD1mdW5jdGlvbihhZSl7aWYoIUkuaXNPYmplY3QoYWUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aE9iamVjdCcgbXVzdCBiZSBhbiBvYmplY3QsIG5vdCAiK3R5'@;
put 'cGVvZiBhZSk7aWYoIUkuaXNTdHJpbmcoYWUucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgYWUucm9vdCk7dmFyIGRlPWFlLmRpcixsZT1hZS5iYXNlfHwiIjtyZXR1cm4g'@;
put 'ZGU/ZGVbZGUubGVuZ3RoLTFdPT09Vi5zZXA/ZGUrbGU6ZGUrVi5zZXArbGU6bGV9LFYucGFyc2U9ZnVuY3Rpb24oYWUpe2lmKCFJLmlzU3RyaW5nKGFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBh'@;
put 'ZSk7dmFyIHNlPVooYWUpO2lmKCFzZXx8NCE9PXNlLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIHBhdGggJyIrYWUrIiciKTtyZXR1cm57cm9vdDpzZVswXSxkaXI6c2VbMF0rc2VbMV0uc2xpY2UoMCwtMSksYmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGlj'@;
put 'ZSgwLHNlWzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sVi5zZXA9IlxcIixWLmRlbGltaXRlcj0iOyI7dmFyIHE9L14oXC8/fCkoW1xzXFNdKj8pKCg/OlwuezEsMn18W15cL10rP3wpKFwuW14uXC9dKnwpKSg/OltcL10qKSQvLFE9e307ZnVuY3Rpb24gdGUoYWUpe3JldHVybiBxLmV4ZWMo'@;
put 'YWUpLnNsaWNlKDEpfVEucmVzb2x2ZT1mdW5jdGlvbigpe2Zvcih2YXIgYWU9IiIsc2U9ITEsZGU9YXJndW1lbnRzLmxlbmd0aC0xO2RlPj0tMSYmIXNlO2RlLS0pe3ZhciBsZT1kZT49MD9hcmd1bWVudHNbZGVdOlAuY3dkKCk7aWYoIUkuaXNTdHJpbmcobGUpKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzIik7bGUmJihhZT1sZSsiLyIrYWUsc2U9Ii8iPT09bGVbMF0pfXJldHVybihzZT8iLyI6IiIpKyhhZT1FKGFlLnNwbGl0KCIvIiksIXNlKS5qb2luKCIvIikpfHwiLiJ9LFEubm9ybWFsaXplPWZ1bmN0aW9uKGFl'@;
put 'KXt2YXIgc2U9US5pc0Fic29sdXRlKGFlKSxkZT1hZSYmIi8iPT09YWVbYWUubGVuZ3RoLTFdO3JldHVybihhZT1FKGFlLnNwbGl0KCIvIiksIXNlKS5qb2luKCIvIikpfHxzZXx8KGFlPSIuIiksYWUmJmRlJiYoYWUrPSIvIiksKHNlPyIvIjoiIikrYWV9LFEuaXNBYnNvbHV0ZT1mdW5jdGlv'@;
put 'bihhZSl7cmV0dXJuIi8iPT09YWUuY2hhckF0KDApfSxRLmpvaW49ZnVuY3Rpb24oKXtmb3IodmFyIGFlPSIiLHNlPTA7c2U8YXJndW1lbnRzLmxlbmd0aDtzZSsrKXt2YXIgZGU9YXJndW1lbnRzW3NlXTtpZighSS5pc1N0cmluZyhkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRz'@;
put 'IHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtkZSYmKGFlKz1hZT8iLyIrZGU6ZGUpfXJldHVybiBRLm5vcm1hbGl6ZShhZSl9LFEucmVsYXRpdmU9ZnVuY3Rpb24oYWUsc2Upe2FlPVEucmVzb2x2ZShhZSkuc3Vic3RyKDEpLHNlPVEucmVzb2x2ZShzZSkuc3Vic3RyKDEpO2Zvcih2'@;
put 'YXIgZGU9ayhhZS5zcGxpdCgiLyIpKSxsZT1rKHNlLnNwbGl0KCIvIikpLGNlPU1hdGgubWluKGRlLmxlbmd0aCxsZS5sZW5ndGgpLEc9Y2UseT0wO3k8Y2U7eSsrKWlmKGRlW3ldIT09bGVbeV0pe0c9eTticmVha312YXIgTD1bXTtmb3IoeT1HO3k8ZGUubGVuZ3RoO3krKylMLnB1c2goIi4u'@;
put 'Iik7cmV0dXJuKEw9TC5jb25jYXQobGUuc2xpY2UoRykpKS5qb2luKCIvIil9LFEuX21ha2VMb25nPWZ1bmN0aW9uKGFlKXtyZXR1cm4gYWV9LFEuZGlybmFtZT1mdW5jdGlvbihhZSl7dmFyIHNlPXRlKGFlKSxkZT1zZVswXSxsZT1zZVsxXTtyZXR1cm4gZGV8fGxlPyhsZSYmKGxlPWxlLnN1'@;
put 'YnN0cigwLGxlLmxlbmd0aC0xKSksZGUrbGUpOiIuIn0sUS5iYXNlbmFtZT1mdW5jdGlvbihhZSxzZSl7dmFyIGRlPXRlKGFlKVsyXTtyZXR1cm4gc2UmJmRlLnN1YnN0cigtMSpzZS5sZW5ndGgpPT09c2UmJihkZT1kZS5zdWJzdHIoMCxkZS5sZW5ndGgtc2UubGVuZ3RoKSksZGV9LFEuZXh0'@;
put 'bmFtZT1mdW5jdGlvbihhZSl7cmV0dXJuIHRlKGFlKVszXX0sUS5mb3JtYXQ9ZnVuY3Rpb24oYWUpe2lmKCFJLmlzT2JqZWN0KGFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgYWUpO2lmKCFJLmlz'@;
put 'U3RyaW5nKGFlLnJvb3R8fCIiKSl0aHJvdyBuZXcgVHlwZUVycm9yKCIncGF0aE9iamVjdC5yb290JyBtdXN0IGJlIGEgc3RyaW5nIG9yIHVuZGVmaW5lZCwgbm90ICIrdHlwZW9mIGFlLnJvb3QpO3JldHVybihhZS5kaXI/YWUuZGlyK1Euc2VwOiIiKSsoYWUuYmFzZXx8IiIpfSxRLnBhcnNl'@;
put 'PWZ1bmN0aW9uKGFlKXtpZighSS5pc1N0cmluZyhhZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoU3RyaW5nJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgYWUpO3ZhciBzZT10ZShhZSk7aWYoIXNlfHw0IT09c2UubGVuZ3RoKXRocm93IG5ldyBUeXBlRXJy'@;
put 'b3IoIkludmFsaWQgcGF0aCAnIithZSsiJyIpO3JldHVybiBzZVsxXT1zZVsxXXx8IiIsc2VbMl09c2VbMl18fCIiLHNlWzNdPXNlWzNdfHwiIix7cm9vdDpzZVswXSxkaXI6c2VbMF0rc2VbMV0uc2xpY2UoMCwtMSksYmFzZTpzZVsyXSxleHQ6c2VbM10sbmFtZTpzZVsyXS5zbGljZSgwLHNl'@;
put 'WzJdLmxlbmd0aC1zZVszXS5sZW5ndGgpfX0sUS5zZXA9Ii8iLFEuZGVsaW1pdGVyPSI6Iix3LmV4cG9ydHM9VT9WOlEsdy5leHBvcnRzLnBvc2l4PVEsdy5leHBvcnRzLndpbjMyPVZ9LDU2MzI6KHcsQSxEKT0+e0EucGJrZGYyPUQoODYzOCksQS5wYmtkZjJTeW5jPUQoMTI1Nyl9LDg2Mzg6'@;
put 'KHcsQSxEKT0+e3ZhciBQLFUsST1EKDk1MDkpLkJ1ZmZlcixFPUQoNzM1Nyksaz1EKDIzNjgpLEI9RCgxMjU3KSxOPUQoNzc3NyksVj1ELmcuY3J5cHRvJiZELmcuY3J5cHRvLnN1YnRsZSxaPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1'@;
put 'NiIsInNoYS0yNTYiOiJTSEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSxXPVtdO2Z1bmN0aW9uIHooKXtyZXR1cm4gVXx8KFU9RC5nLnByb2Nlc3MmJkQuZy5wcm9jZXNzLm5leHRUaWNrP0Qu'@;
put 'Zy5wcm9jZXNzLm5leHRUaWNrOkQuZy5xdWV1ZU1pY3JvdGFzaz9ELmcucXVldWVNaWNyb3Rhc2s6RC5nLnNldEltbWVkaWF0ZT9ELmcuc2V0SW1tZWRpYXRlOkQuZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBxKFEsdGUsYWUsc2UsZGUpe3JldHVybiBWLmltcG9ydEtleSgicmF3IixRLHtuYW1l'@;
put 'OiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihsZSl7cmV0dXJuIFYuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OnRlLGl0ZXJhdGlvbnM6YWUsaGFzaDp7bmFtZTpkZX19LGxlLHNlPDwzKX0pLnRoZW4oZnVuY3Rpb24obGUpe3JldHVybiBJLmZyb20o'@;
put 'bGUpfSl9dy5leHBvcnRzPWZ1bmN0aW9uKFEsdGUsYWUsc2UsZGUsbGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBkZSYmKGxlPWRlLGRlPXZvaWQgMCk7dmFyIEcseSxjZT1aWyhkZT1kZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihjZSYmImZ1bmN0aW9uIj09dHlwZW9mIEQuZy5Qcm9taXNl'@;
put 'KXtpZihFKGFlLHNlKSxRPU4oUSxrLCJQYXNzd29yZCIpLHRlPU4odGUsaywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBsZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpO0c9ZnVuY3Rpb24oRyl7aWYoRC5nLnByb2Nlc3MmJiFELmcucHJvY2Vz'@;
put 'cy5icm93c2VyfHwhVnx8IVYuaW1wb3J0S2V5fHwhVi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PVdbR10pcmV0dXJuIFdbR107dmFyIHk9cShQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsRykudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0'@;
put 'Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiBXW0ddPXkseX0oY2UpLnRoZW4oZnVuY3Rpb24oRyl7cmV0dXJuIEc/cShRLHRlLGFlLHNlLGNlKTpCKFEsdGUsYWUsc2UsZGUpfSkseT1sZSxHLnRoZW4oZnVuY3Rpb24oTCl7eigpKGZ1bmN0aW9uKCl7eShudWxsLEwpfSl9LGZ1bmN0'@;
put 'aW9uKEwpe3ooKShmdW5jdGlvbigpe3koTCl9KX0pfWVsc2UgeigpKGZ1bmN0aW9uKCl7dmFyIEc7dHJ5e0c9QihRLHRlLGFlLHNlLGRlKX1jYXRjaCh5KXtyZXR1cm4gbGUoeSl9bGUobnVsbCxHKX0pfX0sMjM2ODoodyxBLEQpPT57dmFyIFAsVT1EKDQxNTUpO1A9RC5nLnByb2Nlc3MmJkQu'@;
put 'Zy5wcm9jZXNzLmJyb3dzZXI/InV0Zi04IjpELmcucHJvY2VzcyYmRC5nLnByb2Nlc3MudmVyc2lvbj9wYXJzZUludChVLnZlcnNpb24uc3BsaXQoIi4iKVswXS5zbGljZSgxKSwxMCk+PTY/InV0Zi04IjoiYmluYXJ5IjoidXRmLTgiLHcuZXhwb3J0cz1QfSw3MzU3Onc9Pnt2YXIgQT1NYXRo'@;
put 'LnBvdygyLDMwKS0xO3cuZXhwb3J0cz1mdW5jdGlvbihELFApe2lmKCJudW1iZXIiIT10eXBlb2YgRCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJdGVyYXRpb25zIG5vdCBhIG51bWJlciIpO2lmKEQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJCYWQgaXRlcmF0aW9ucyIpO2lmKCJudW1iZXIiIT10'@;
put 'eXBlb2YgUCl0aHJvdyBuZXcgVHlwZUVycm9yKCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlciIpO2lmKFA8MHx8UD5BfHxQIT1QKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBrZXkgbGVuZ3RoIil9fSwxMjU3Oih3LEEsRCk9Pnt2YXIgUD1EKDgwMjgpLFU9RCg5Nzg1KSxJPUQoOTA3MiksRT1E'@;
put 'KDk1MDkpLkJ1ZmZlcixrPUQoNzM1NyksQj1EKDIzNjgpLE49RCg3Nzc3KSxWPUUuYWxsb2MoMTI4KSxaPXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gVyh6LHEsUSl7dmFyIHRl'@;
put 'PWZ1bmN0aW9uKEcpe3JldHVybiJybWQxNjAiPT09R3x8InJpcGVtZDE2MCI9PT1HP2Z1bmN0aW9uIEwoSCl7cmV0dXJuKG5ldyBVKS51cGRhdGUoSCkuZGlnZXN0KCl9OiJtZDUiPT09Rz9QOmZ1bmN0aW9uIHkoSCl7cmV0dXJuIEkoRykudXBkYXRlKEgpLmRpZ2VzdCgpfX0oeiksYWU9InNo'@;
put 'YTUxMiI9PT16fHwic2hhMzg0Ij09PXo/MTI4OjY0O3EubGVuZ3RoPmFlP3E9dGUocSk6cS5sZW5ndGg8YWUmJihxPUUuY29uY2F0KFtxLFZdLGFlKSk7Zm9yKHZhciBzZT1FLmFsbG9jVW5zYWZlKGFlK1pbel0pLGRlPUUuYWxsb2NVbnNhZmUoYWUrWlt6XSksbGU9MDtsZTxhZTtsZSsrKXNl'@;
put 'W2xlXT01NF5xW2xlXSxkZVtsZV09OTJecVtsZV07dmFyIGNlPUUuYWxsb2NVbnNhZmUoYWUrUSs0KTtzZS5jb3B5KGNlLDAsMCxhZSksdGhpcy5pcGFkMT1jZSx0aGlzLmlwYWQyPXNlLHRoaXMub3BhZD1kZSx0aGlzLmFsZz16LHRoaXMuYmxvY2tzaXplPWFlLHRoaXMuaGFzaD10ZSx0aGlz'@;
put 'LnNpemU9Wlt6XX1XLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oeixxKXtyZXR1cm4gei5jb3B5KHEsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChxKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhpcy5oYXNoKHRoaXMub3BhZCl9LHcuZXhwb3J0cz1mdW5jdGlvbih6LHEsUSx0'@;
put 'ZSxhZSl7ayhRLHRlKTt2YXIgc2U9bmV3IFcoYWU9YWV8fCJzaGExIix6PU4oeixCLCJQYXNzd29yZCIpLChxPU4ocSxCLCJTYWx0IikpLmxlbmd0aCksZGU9RS5hbGxvY1Vuc2FmZSh0ZSksbGU9RS5hbGxvY1Vuc2FmZShxLmxlbmd0aCs0KTtxLmNvcHkobGUsMCwwLHEubGVuZ3RoKTtmb3Io'@;
put 'dmFyIGNlPTAsRz1aW2FlXSx5PU1hdGguY2VpbCh0ZS9HKSxMPTE7TDw9eTtMKyspe2xlLndyaXRlVUludDMyQkUoTCxxLmxlbmd0aCk7Zm9yKHZhciBIPXNlLnJ1bihsZSxzZS5pcGFkMSksaj1ILGc9MTtnPFE7ZysrKXtqPXNlLnJ1bihqLHNlLmlwYWQyKTtmb3IodmFyIFM9MDtTPEc7Uysr'@;
put 'KUhbU11ePWpbU119SC5jb3B5KGRlLGNlKSxjZSs9R31yZXR1cm4gZGV9fSw3Nzc3Oih3LEEsRCk9Pnt2YXIgUD1EKDk1MDkpLkJ1ZmZlcjt3LmV4cG9ydHM9ZnVuY3Rpb24oVSxJLEUpe2lmKFAuaXNCdWZmZXIoVSkpcmV0dXJuIFU7aWYoInN0cmluZyI9PXR5cGVvZiBVKXJldHVybiBQLmZy'@;
put 'b20oVSxJKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoVSkpcmV0dXJuIFAuZnJvbShVLmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihFKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sNDE1NTp3PT57dmFyIEEsRCxQPXcuZXhw'@;
put 'b3J0cz17fTtmdW5jdGlvbiBVKCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gRShRKXtpZihBPT09c2V0VGlt'@;
put 'ZW91dClyZXR1cm4gc2V0VGltZW91dChRLDApO2lmKChBPT09VXx8IUEpJiZzZXRUaW1lb3V0KXJldHVybiBBPXNldFRpbWVvdXQsc2V0VGltZW91dChRLDApO3RyeXtyZXR1cm4gQShRLDApfWNhdGNoe3RyeXtyZXR1cm4gQS5jYWxsKG51bGwsUSwwKX1jYXRjaHtyZXR1cm4gQS5jYWxsKHRo'@;
put 'aXMsUSwwKX19fSFmdW5jdGlvbigpe3RyeXtBPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6VX1jYXRjaHtBPVV9dHJ5e0Q9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6SX1jYXRjaHtEPUl9fSgpO3ZhciBrLEI9W10sTj0hMSxW'@;
put 'PS0xO2Z1bmN0aW9uIFooKXtOJiZrJiYoTj0hMSxrLmxlbmd0aD9CPWsuY29uY2F0KEIpOlY9LTEsQi5sZW5ndGgmJlcoKSl9ZnVuY3Rpb24gVygpe2lmKCFOKXt2YXIgUT1FKFopO049ITA7Zm9yKHZhciB0ZT1CLmxlbmd0aDt0ZTspe2ZvcihrPUIsQj1bXTsrK1Y8dGU7KWsmJmtbVl0ucnVu'@;
put 'KCk7Vj0tMSx0ZT1CLmxlbmd0aH1rPW51bGwsTj0hMSxmdW5jdGlvbihhZSl7aWYoRD09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGFlKTtpZigoRD09PUl8fCFEKSYmY2xlYXJUaW1lb3V0KXJldHVybiBEPWNsZWFyVGltZW91dCxjbGVhclRpbWVvdXQoYWUpO3RyeXtyZXR1'@;
put 'cm4gRChhZSl9Y2F0Y2h7dHJ5e3JldHVybiBELmNhbGwobnVsbCxhZSl9Y2F0Y2h7cmV0dXJuIEQuY2FsbCh0aGlzLGFlKX19fShRKX19ZnVuY3Rpb24geihRLHRlKXt0aGlzLmZ1bj1RLHRoaXMuYXJyYXk9dGV9ZnVuY3Rpb24gcSgpe31QLm5leHRUaWNrPWZ1bmN0aW9uKFEpe3ZhciB0ZT1u'@;
put 'ZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBhZT0xO2FlPGFyZ3VtZW50cy5sZW5ndGg7YWUrKyl0ZVthZS0xXT1hcmd1bWVudHNbYWVdO0IucHVzaChuZXcgeihRLHRlKSksMSE9PUIubGVuZ3RofHxOfHxFKFcpfSx6LnByb3RvdHlw'@;
put 'ZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxQLnRpdGxlPSJicm93c2VyIixQLmJyb3dzZXI9ITAsUC5lbnY9e30sUC5hcmd2PVtdLFAudmVyc2lvbj0iIixQLnZlcnNpb25zPXt9LFAub249cSxQLmFkZExpc3RlbmVyPXEsUC5vbmNlPXEsUC5vZmY9'@;
put 'cSxQLnJlbW92ZUxpc3RlbmVyPXEsUC5yZW1vdmVBbGxMaXN0ZW5lcnM9cSxQLmVtaXQ9cSxQLnByZXBlbmRMaXN0ZW5lcj1xLFAucHJlcGVuZE9uY2VMaXN0ZW5lcj1xLFAubGlzdGVuZXJzPWZ1bmN0aW9uKFEpe3JldHVybltdfSxQLmJpbmRpbmc9ZnVuY3Rpb24oUSl7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxQLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0sUC5jaGRpcj1mdW5jdGlvbihRKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIpfSxQLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJu'@;
put 'IDB9fSw2MjQ0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgzNjg5KSxVPXt9O1UucnVsZXM9RCgzNzA0KS5tYXAoZnVuY3Rpb24oSSl7cmV0dXJue3J1bGU6SSxzdWZmaXg6SS5yZXBsYWNlKC9eKFwqXC58XCEpLywiIikscHVueVN1ZmZpeDotMSx3aWxkY2FyZDoiKiI9PT1JLmNo'@;
put 'YXJBdCgwKSxleGNlcHRpb246IiEiPT09SS5jaGFyQXQoMCl9fSksVS5lbmRzV2l0aD1mdW5jdGlvbihJLEUpe3JldHVybi0xIT09SS5pbmRleE9mKEUsSS5sZW5ndGgtRS5sZW5ndGgpfSxVLmZpbmRSdWxlPWZ1bmN0aW9uKEkpe3ZhciBFPVAudG9BU0NJSShJKTtyZXR1cm4gVS5ydWxlcy5y'@;
put 'ZWR1Y2UoZnVuY3Rpb24oayxCKXtyZXR1cm4tMT09PUIucHVueVN1ZmZpeCYmKEIucHVueVN1ZmZpeD1QLnRvQVNDSUkoQi5zdWZmaXgpKSxVLmVuZHNXaXRoKEUsIi4iK0IucHVueVN1ZmZpeCl8fEU9PT1CLnB1bnlTdWZmaXg/QjprfSxudWxsKX0sQS5lcnJvckNvZGVzPXtET01BSU5fVE9P'@;
put 'X1NIT1JUOiJEb21haW4gbmFtZSB0b28gc2hvcnQuIixET01BSU5fVE9PX0xPTkc6IkRvbWFpbiBuYW1lIHRvbyBsb25nLiBJdCBzaG91bGQgYmUgbm8gbW9yZSB0aGFuIDI1NSBjaGFycy4iLExBQkVMX1NUQVJUU19XSVRIX0RBU0g6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBub3Qgc3RhcnQg'@;
put 'd2l0aCBhIGRhc2guIixMQUJFTF9FTkRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBlbmQgd2l0aCBhIGRhc2guIixMQUJFTF9UT09fTE9ORzoiRG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IG1vc3QgNjMgY2hhcnMgbG9uZy4iLExBQkVMX1RPT19TSE9SVDoi'@;
put 'RG9tYWluIG5hbWUgbGFiZWwgc2hvdWxkIGJlIGF0IGxlYXN0IDEgY2hhcmFjdGVyIGxvbmcuIixMQUJFTF9JTlZBTElEX0NIQVJTOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gb25seSBjb250YWluIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIG9yIGRhc2hlcy4ifSxVLnZhbGlkYXRlPWZ1bmN0'@;
put 'aW9uKEkpe3ZhciBFPVAudG9BU0NJSShJKTtpZihFLmxlbmd0aDwxKXJldHVybiJET01BSU5fVE9PX1NIT1JUIjtpZihFLmxlbmd0aD4yNTUpcmV0dXJuIkRPTUFJTl9UT09fTE9ORyI7Zm9yKHZhciBrLEI9RS5zcGxpdCgiLiIpLE49MDtOPEIubGVuZ3RoOysrTil7aWYoIShrPUJbTl0pLmxl'@;
put 'bmd0aClyZXR1cm4iTEFCRUxfVE9PX1NIT1JUIjtpZihrLmxlbmd0aD42MylyZXR1cm4iTEFCRUxfVE9PX0xPTkciO2lmKCItIj09PWsuY2hhckF0KDApKXJldHVybiJMQUJFTF9TVEFSVFNfV0lUSF9EQVNIIjtpZigiLSI9PT1rLmNoYXJBdChrLmxlbmd0aC0xKSlyZXR1cm4iTEFCRUxfRU5E'@;
put 'U19XSVRIX0RBU0giO2lmKCEvXlthLXowLTlcLV0rJC8udGVzdChrKSlyZXR1cm4iTEFCRUxfSU5WQUxJRF9DSEFSUyJ9fSxBLnBhcnNlPWZ1bmN0aW9uKEkpe2lmKCJzdHJpbmciIT10eXBlb2YgSSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIp'@;
put 'O3ZhciBFPUkuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1FLmNoYXJBdChFLmxlbmd0aC0xKSYmKEU9RS5zbGljZSgwLEUubGVuZ3RoLTEpKTt2YXIgaz1VLnZhbGlkYXRlKEUpO2lmKGspcmV0dXJue2lucHV0OkksZXJyb3I6e21lc3NhZ2U6QS5lcnJvckNvZGVzW2tdLGNvZGU6a319'@;
put 'O3ZhciBCPXtpbnB1dDpJLHRsZDpudWxsLHNsZDpudWxsLGRvbWFpbjpudWxsLHN1YmRvbWFpbjpudWxsLGxpc3RlZDohMX0sTj1FLnNwbGl0KCIuIik7aWYoImxvY2FsIj09PU5bTi5sZW5ndGgtMV0pcmV0dXJuIEI7dmFyIFY9ZnVuY3Rpb24oKXtyZXR1cm4veG4tLS8udGVzdChFKSYmKEIu'@;
put 'ZG9tYWluJiYoQi5kb21haW49UC50b0FTQ0lJKEIuZG9tYWluKSksQi5zdWJkb21haW4mJihCLnN1YmRvbWFpbj1QLnRvQVNDSUkoQi5zdWJkb21haW4pKSksQn0sWj1VLmZpbmRSdWxlKEUpO2lmKCFaKXJldHVybiBOLmxlbmd0aDwyP0I6KEIudGxkPU4ucG9wKCksQi5zbGQ9Ti5wb3AoKSxC'@;
put 'LmRvbWFpbj1bQi5zbGQsQi50bGRdLmpvaW4oIi4iKSxOLmxlbmd0aCYmKEIuc3ViZG9tYWluPU4ucG9wKCkpLFYoKSk7Qi5saXN0ZWQ9ITA7dmFyIFc9Wi5zdWZmaXguc3BsaXQoIi4iKSx6PU4uc2xpY2UoMCxOLmxlbmd0aC1XLmxlbmd0aCk7cmV0dXJuIFouZXhjZXB0aW9uJiZ6LnB1c2go'@;
put 'Vy5zaGlmdCgpKSxCLnRsZD1XLmpvaW4oIi4iKSx6Lmxlbmd0aD8oWi53aWxkY2FyZCYmKFcudW5zaGlmdCh6LnBvcCgpKSxCLnRsZD1XLmpvaW4oIi4iKSksei5sZW5ndGgmJihCLnNsZD16LnBvcCgpLEIuZG9tYWluPVtCLnNsZCxCLnRsZF0uam9pbigiLiIpLHoubGVuZ3RoJiYoQi5zdWJk'@;
put 'b21haW49ei5qb2luKCIuIikpKSxWKCkpOlYoKX0sQS5nZXQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkmJkEucGFyc2UoSSkuZG9tYWlufHxudWxsfSxBLmlzVmFsaWQ9ZnVuY3Rpb24oSSl7dmFyIEU9QS5wYXJzZShJKTtyZXR1cm4hKCFFLmRvbWFpbnx8IUUubGlzdGVkKX19LDc5MDA6KHcsQSxE'@;
put 'KT0+e0EucHVibGljRW5jcnlwdD1EKDY1NTkpLEEucHJpdmF0ZURlY3J5cHQ9RCg2MTM4KSxBLnByaXZhdGVFbmNyeXB0PWZ1bmN0aW9uKFAsVSl7cmV0dXJuIEEucHVibGljRW5jcnlwdChQLFUsITApfSxBLnB1YmxpY0RlY3J5cHQ9ZnVuY3Rpb24oUCxVKXtyZXR1cm4gQS5wcml2YXRlRGVj'@;
put 'cnlwdChQLFUsITApfX0sOTE5OToodyxBLEQpPT57dmFyIFA9RCgzNDgyKSxVPUQoOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIEkoRSl7dmFyIGs9VS5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gay53cml0ZVVJbnQzMkJFKEUsMCksa313LmV4cG9ydHM9ZnVuY3Rpb24oRSxrKXtmb3IodmFyIEIsTj1V'@;
put 'LmFsbG9jKDApLFY9MDtOLmxlbmd0aDxrOylCPUkoVisrKSxOPVUuY29uY2F0KFtOLFAoInNoYTEiKS51cGRhdGUoRSkudXBkYXRlKEIpLmRpZ2VzdCgpXSk7cmV0dXJuIE4uc2xpY2UoMCxrKX19LDIxNDQ6ZnVuY3Rpb24odyxBLEQpeyFmdW5jdGlvbihQLFUpeyJ1c2Ugc3RyaWN0IjtmdW5j'@;
put 'dGlvbiBJKGcsUyl7aWYoIWcpdGhyb3cgbmV3IEVycm9yKFN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gRShnLFMpe2cuc3VwZXJfPVM7dmFyIHg9ZnVuY3Rpb24oKXt9O3gucHJvdG90eXBlPVMucHJvdG90eXBlLGcucHJvdG90eXBlPW5ldyB4LGcucHJvdG90eXBlLmNvbnN0cnVj'@;
put 'dG9yPWd9ZnVuY3Rpb24gayhnLFMseCl7aWYoay5pc0JOKGcpKXJldHVybiBnO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1nJiYoImxlIiE9PVMmJiJiZSIhPT1TfHwoeD1TLFM9MTApLHRoaXMuX2luaXQoZ3x8MCxT'@;
put 'fHwxMCx4fHwiYmUiKSl9dmFyIEI7Im9iamVjdCI9PXR5cGVvZiBQP1AuZXhwb3J0cz1rOlUuQk49ayxrLkJOPWssay53b3JkU2l6ZT0yNjt0cnl7Qj10eXBlb2Ygd2luZG93PCJ1IiYmdm9pZCAwIT09d2luZG93LkJ1ZmZlcj93aW5kb3cuQnVmZmVyOkQoNzEwOCkuQnVmZmVyfWNhdGNoe31m'@;
put 'dW5jdGlvbiBOKGcsUyl7dmFyIHg9Zy5jaGFyQ29kZUF0KFMpO3JldHVybiB4Pj02NSYmeDw9NzA/eC01NTp4Pj05NyYmeDw9MTAyP3gtODc6eC00OCYxNX1mdW5jdGlvbiBWKGcsUyx4KXt2YXIgXz1OKGcseCk7cmV0dXJuIHgtMT49UyYmKF98PU4oZyx4LTEpPDw0KSxffWZ1bmN0aW9uIFoo'@;
put 'ZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz1NYXRoLm1pbihnLmxlbmd0aCx4KSxLPVM7SzxDO0srKyl7dmFyIG5lPWcuY2hhckNvZGVBdChLKS00ODtwKj1fLHArPW5lPj00OT9uZS00OSsxMDpuZT49MTc/bmUtMTcrMTA6bmV9cmV0dXJuIHB9ay5pc0JOPWZ1bmN0aW9uKGcpe3JldHVybiBnIGlu'@;
put 'c3RhbmNlb2Yga3x8bnVsbCE9PWcmJiJvYmplY3QiPT10eXBlb2YgZyYmZy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PWsud29yZFNpemUmJkFycmF5LmlzQXJyYXkoZy53b3Jkcyl9LGsubWF4PWZ1bmN0aW9uKGcsUyl7cmV0dXJuIGcuY21wKFMpPjA/ZzpTfSxrLm1pbj1mdW5jdGlvbihnLFMp'@;
put 'e3JldHVybiBnLmNtcChTKTwwP2c6U30say5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oZyxTLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgZylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihnLFMseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBnKXJldHVybiB0aGlzLl9pbml0QXJyYXkoZyxTLHgpOyJo'@;
put 'ZXgiPT09UyYmKFM9MTYpLEkoUz09PSgwfFMpJiZTPj0yJiZTPD0zNik7dmFyIF89MDsiLSI9PT0oZz1nLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKF8rKyx0aGlzLm5lZ2F0aXZlPTEpLF88Zy5sZW5ndGgmJigxNj09PVM/dGhpcy5fcGFyc2VIZXgoZyxfLHgpOih0aGlz'@;
put 'Ll9wYXJzZUJhc2UoZyxTLF8pLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksUyx4KSkpfSxrLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihnLFMseCl7ZzwwJiYodGhpcy5uZWdhdGl2ZT0xLGc9LWcpLGc8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4'@;
put 'ODYzJmddLHRoaXMubGVuZ3RoPTEpOmc8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmZyxnLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooSShnPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJmcsZy82NzEwODg2NCY2NzEwODg2'@;
put 'MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFMseCl9LGsucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oZyxTLHgpe2lmKEkoIm51bWJlciI9PXR5cGVvZiBnLmxlbmd0aCksZy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29y'@;
put 'ZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoZy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgXz0wO188dGhpcy5sZW5ndGg7XysrKXRoaXMud29yZHNbX109MDt2YXIgcCxDLEs9MDtpZigiYmUiPT09eClm'@;
put 'b3IoXz1nLmxlbmd0aC0xLHA9MDtfPj0wO18tPTMpdGhpcy53b3Jkc1twXXw9KEM9Z1tfXXxnW18tMV08PDh8Z1tfLTJdPDwxNik8PEsmNjcxMDg4NjMsdGhpcy53b3Jkc1twKzFdPUM+Pj4yNi1LJjY3MTA4ODYzLChLKz0yNCk+PTI2JiYoSy09MjYscCsrKTtlbHNlIGlmKCJsZSI9PT14KWZv'@;
put 'cihfPTAscD0wO188Zy5sZW5ndGg7Xys9Myl0aGlzLndvcmRzW3BdfD0oQz1nW19dfGdbXysxXTw8OHxnW18rMl08PDE2KTw8SyY2NzEwODg2Myx0aGlzLndvcmRzW3ArMV09Qz4+PjI2LUsmNjcxMDg4NjMsKEsrPTI0KT49MjYmJihLLT0yNixwKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LGsu'@;
put 'cHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihnLFMseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChnLmxlbmd0aC1TKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBfPTA7Xzx0aGlzLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT0wO3ZhciBwLEM9MCxL'@;
put 'PTA7aWYoImJlIj09PXgpZm9yKF89Zy5sZW5ndGgtMTtfPj1TO18tPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndvcmRzW0tdfD02NzEwODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRzW0srPTFdfD1wPj4+MjYpOkMrPTg7ZWxzZSBmb3IoXz0oZy5sZW5ndGgtUyklMj09MD9TKzE6UztfPGcu'@;
put 'bGVuZ3RoO18rPTIpcD1WKGcsUyxfKTw8Qyx0aGlzLndvcmRzW0tdfD02NzEwODg2MyZwLEM+PTE4PyhDLT0xOCx0aGlzLndvcmRzW0srPTFdfD1wPj4+MjYpOkMrPTg7dGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGcsUyx4KXt0aGlzLndvcmRzPVswXSx0'@;
put 'aGlzLmxlbmd0aD0xO2Zvcih2YXIgXz0wLHA9MTtwPD02NzEwODg2MztwKj1TKV8rKztfLS0scD1wL1N8MDtmb3IodmFyIEM9Zy5sZW5ndGgteCxLPUMlXyxuZT1NYXRoLm1pbihDLEMtSykreCx1ZT0wLGhlPXg7aGU8bmU7aGUrPV8pdWU9WihnLGhlLGhlK18sUyksdGhpcy5pbXVsbihwKSx0'@;
put 'aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVlKTtpZigwIT09Syl7dmFyIHhlPTE7Zm9yKHVlPVooZyxoZSxnLmxlbmd0aCxTKSxoZT0wO2hlPEs7aGUrKyl4ZSo9Uzt0aGlzLmltdWxuKHhlKSx0aGlzLndvcmRzWzBdK3VlPDY3MTA4ODY0'@;
put 'P3RoaXMud29yZHNbMF0rPXVlOnRoaXMuX2lhZGRuKHVlKX10aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZyl7Zy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGg7UysrKWcud29yZHNbU109dGhpcy53b3Jkc1tTXTtn'@;
put 'Lmxlbmd0aD10aGlzLmxlbmd0aCxnLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsZy5yZWQ9dGhpcy5yZWR9LGsucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIGc9bmV3IGsobnVsbCk7cmV0dXJuIHRoaXMuY29weShnKSxnfSxrLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKGcpe2Zv'@;
put 'cig7dGhpcy5sZW5ndGg8ZzspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxrLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMu'@;
put 'X25vcm1TaWduKCl9LGsucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxrLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4t'@;
put 'UjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBXPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAw'@;
put 'MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLHo9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2'@;
put 'LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0scT1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2'@;
put 'Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1'@;
put 'LDYwNDY2MTc2XTtmdW5jdGlvbiBRKGcsUyx4KXt4Lm5lZ2F0aXZlPVMubmVnYXRpdmVeZy5uZWdhdGl2ZTt2YXIgXz1nLmxlbmd0aCtTLmxlbmd0aHwwO3gubGVuZ3RoPV8sXz1fLTF8MDt2YXIgcD0wfGcud29yZHNbMF0sQz0wfFMud29yZHNbMF0sSz1wKkMsdWU9Sy82NzEwODg2NHwwO3gu'@;
put 'd29yZHNbMF09NjcxMDg4NjMmSztmb3IodmFyIGhlPTE7aGU8XztoZSsrKXtmb3IodmFyIHhlPXVlPj4+MjYsT2U9NjcxMDg4NjMmdWUsSGU9TWF0aC5taW4oaGUsUy5sZW5ndGgtMSksRWU9TWF0aC5tYXgoMCxoZS1nLmxlbmd0aCsxKTtFZTw9SGU7RWUrKyl4ZSs9KEs9KHA9MHxnLndvcmRz'@;
put 'W2hlLUVlfDBdKSooQz0wfFMud29yZHNbRWVdKStPZSkvNjcxMDg4NjR8MCxPZT02NzEwODg2MyZLO3gud29yZHNbaGVdPTB8T2UsdWU9MHx4ZX1yZXR1cm4gMCE9PXVlP3gud29yZHNbaGVdPTB8dWU6eC5sZW5ndGgtLSx4LnN0cmlwKCl9ay5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24o'@;
put 'ZyxTKXt2YXIgeDtpZihTPTB8U3x8MSwxNj09PShnPWd8fDEwKXx8ImhleCI9PT1nKXt4PSIiO2Zvcih2YXIgXz0wLHA9MCxDPTA7Qzx0aGlzLmxlbmd0aDtDKyspe3ZhciBLPXRoaXMud29yZHNbQ10sbmU9KDE2Nzc3MjE1JihLPDxffHApKS50b1N0cmluZygxNik7eD0wIT0ocD1LPj4+MjQt'@;
put 'XyYxNjc3NzIxNSl8fEMhPT10aGlzLmxlbmd0aC0xP1dbNi1uZS5sZW5ndGhdK25lK3g6bmUreCwoXys9Mik+PTI2JiYoXy09MjYsQy0tKX1mb3IoMCE9PXAmJih4PXAudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJVMhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0i'@;
put 'LSIreCkseH1pZihnPT09KDB8ZykmJmc+PTImJmc8PTM2KXt2YXIgdWU9eltnXSxoZT1xW2ddO3g9IiI7dmFyIHhlPXRoaXMuY2xvbmUoKTtmb3IoeGUubmVnYXRpdmU9MDsheGUuaXNaZXJvKCk7KXt2YXIgT2U9eGUubW9kbihoZSkudG9TdHJpbmcoZyk7eD0oeGU9eGUuaWRpdm4oaGUpKS5p'@;
put 'c1plcm8oKT9PZSt4OldbdWUtT2UubGVuZ3RoXStPZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglUyE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fUkoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0s'@;
put 'ay5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgZz10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/Zys9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP2crPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQq'@;
put 'dGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZJKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tZzpnfSxrLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LGsucHJv'@;
put 'dG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKGcsUyl7cmV0dXJuIEkodm9pZCAwIT09QiksdGhpcy50b0FycmF5TGlrZShCLGcsUyl9LGsucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxnLFMpfSxrLnByb3RvdHlwZS50b0FycmF5'@;
put 'TGlrZT1mdW5jdGlvbihnLFMseCl7dmFyIF89dGhpcy5ieXRlTGVuZ3RoKCkscD14fHxNYXRoLm1heCgxLF8pO0koXzw9cCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLEkocD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFy'@;
put 'IEMsSyxuZT0ibGUiPT09Uyx1ZT1uZXcgZyhwKSxoZT10aGlzLmNsb25lKCk7aWYobmUpe2ZvcihLPTA7IWhlLmlzWmVybygpO0srKylDPWhlLmFuZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW0tdPUM7Zm9yKDtLPHA7SysrKXVlW0tdPTB9ZWxzZXtmb3IoSz0wO0s8cC1fO0srKyl1ZVtLXT0w'@;
put 'O2ZvcihLPTA7IWhlLmlzWmVybygpO0srKylDPWhlLmFuZGxuKDI1NSksaGUuaXVzaHJuKDgpLHVlW3AtSy0xXT1DfXJldHVybiB1ZX0say5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKGcpe3JldHVybiAzMi1NYXRoLmNsejMyKGcpfTpmdW5jdGlvbihnKXt2YXIg'@;
put 'Uz1nLHg9MDtyZXR1cm4gUz49NDA5NiYmKHgrPTEzLFM+Pj49MTMpLFM+PTY0JiYoeCs9NyxTPj4+PTcpLFM+PTgmJih4Kz00LFM+Pj49NCksUz49MiYmKHgrPTIsUz4+Pj0yKSx4K1N9LGsucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihnKXtpZigwPT09ZylyZXR1cm4gMjY7dmFyIFM9'@;
put 'Zyx4PTA7cmV0dXJuISg4MTkxJlMpJiYoeCs9MTMsUz4+Pj0xMyksISgxMjcmUykmJih4Kz03LFM+Pj49NyksISgxNSZTKSYmKHgrPTQsUz4+Pj00KSwhKDMmUykmJih4Kz0yLFM+Pj49MiksISgxJlMpJiZ4KysseH0say5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIFM9dGhp'@;
put 'cy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrU30say5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFy'@;
put 'IHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tTXSk7aWYoZys9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIGd9LGsucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LGsucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihn'@;
put 'KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihnKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LGsucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLnRlc3RuKGctMSk/dGhpcy5ub3RuKGcpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25l'@;
put 'KCl9LGsucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxrLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0say5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwo'@;
put 'dGhpcy5uZWdhdGl2ZV49MSksdGhpc30say5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihnKXtmb3IoO3RoaXMubGVuZ3RoPGcubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdfGcu'@;
put 'd29yZHNbU107cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdW9yKGcpfSxrLnByb3RvdHlwZS5vcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLmlvcihnKTpnLmNsb25lKCkuaW9yKHRoaXMpfSxrLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKGcpOmcuY2xvbmUoKS5pdW9yKHRoaXMpfSxrLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlv'@;
put 'bihnKXt2YXIgUztTPXRoaXMubGVuZ3RoPmcubGVuZ3RoP2c6dGhpcztmb3IodmFyIHg9MDt4PFMubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mZy53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Uy5sZW5ndGgsdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5pYW5k'@;
put 'PWZ1bmN0aW9uKGcpe3JldHVybiBJKCEodGhpcy5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChnKX0say5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChnKTpnLmNsb25lKCkuaWFuZCh0aGlzKX0s'@;
put 'ay5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKGcpOmcuY2xvbmUoKS5pdWFuZCh0aGlzKX0say5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24oZyl7dmFyIFMseDt0aGlzLmxlbmd0aD5nLmxlbmd0aD8oUz10'@;
put 'aGlzLHg9Zyk6KFM9Zyx4PXRoaXMpO2Zvcih2YXIgXz0wO188eC5sZW5ndGg7XysrKXRoaXMud29yZHNbX109Uy53b3Jkc1tfXV54LndvcmRzW19dO2lmKHRoaXMhPT1TKWZvcig7XzxTLmxlbmd0aDtfKyspdGhpcy53b3Jkc1tfXT1TLndvcmRzW19dO3JldHVybiB0aGlzLmxlbmd0aD1TLmxl'@;
put 'bmd0aCx0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoISh0aGlzLm5lZ2F0aXZlfGcubmVnYXRpdmUpKSx0aGlzLml1eG9yKGcpfSxrLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMubGVuZ3RoPmcubGVuZ3RoP3RoaXMuY2xv'@;
put 'bmUoKS5peG9yKGcpOmcuY2xvbmUoKS5peG9yKHRoaXMpfSxrLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmxlbmd0aD5nLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoZyk6Zy5jbG9uZSgpLml1eG9yKHRoaXMpfSxrLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihn'@;
put 'KXtJKCJudW1iZXIiPT10eXBlb2YgZyYmZz49MCk7dmFyIFM9MHxNYXRoLmNlaWwoZy8yNikseD1nJTI2O3RoaXMuX2V4cGFuZChTKSx4PjAmJlMtLTtmb3IodmFyIF89MDtfPFM7XysrKXRoaXMud29yZHNbX109NjcxMDg4NjMmfnRoaXMud29yZHNbX107cmV0dXJuIHg+MCYmKHRoaXMud29y'@;
put 'ZHNbX109fnRoaXMud29yZHNbX10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUubm90bj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKGcpfSxrLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKGcsUyl7SSgibnVtYmVyIj09dHlwZW9mIGcmJmc+'@;
put 'PTApO3ZhciB4PWcvMjZ8MCxfPWclMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Uz90aGlzLndvcmRzW3hdfDE8PF86dGhpcy53b3Jkc1t4XSZ+KDE8PF8pLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihnKXt2YXIgUyx4LF87aWYoMCE9'@;
put 'PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsUz10aGlzLmlzdWIoZyksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Zy5uZWdhdGl2ZSlyZXR1cm4gZy5uZWdhdGl2ZT0wLFM9dGhp'@;
put 'cy5pc3ViKGcpLGcubmVnYXRpdmU9MSxTLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPmcubGVuZ3RoPyh4PXRoaXMsXz1nKTooeD1nLF89dGhpcyk7Zm9yKHZhciBwPTAsQz0wO0M8Xy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmKFM9KDB8eC53b3Jkc1tDXSkrKDB8Xy53b3Jk'@;
put 'c1tDXSkrcCkscD1TPj4+MjY7Zm9yKDswIT09cCYmQzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyYoUz0oMHx4LndvcmRzW0NdKStwKSxwPVM+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09cCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1wLHRoaXMubGVuZ3Ro'@;
put 'Kys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109eC53b3Jkc1tDXTtyZXR1cm4gdGhpc30say5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGcpe3ZhciBTO3JldHVybiAwIT09Zy5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KGcubmVnYXRpdmU9'@;
put 'MCxTPXRoaXMuc3ViKGcpLGcubmVnYXRpdmVePTEsUyk6MD09PWcubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsUz1nLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsUyk6dGhpcy5sZW5ndGg+Zy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQoZyk6Zy5jbG9u'@;
put 'ZSgpLmlhZGQodGhpcyl9LGsucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oZyl7aWYoMCE9PWcubmVnYXRpdmUpe2cubmVnYXRpdmU9MDt2YXIgUz10aGlzLmlhZGQoZyk7cmV0dXJuIGcubmVnYXRpdmU9MSxTLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5l'@;
put 'Z2F0aXZlPTAsdGhpcy5pYWRkKGcpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciB4LF8scD10aGlzLmNtcChnKTtpZigwPT09cClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7cD4wPyh4PXRoaXMsXz1nKTooeD1n'@;
put 'LF89dGhpcyk7Zm9yKHZhciBDPTAsSz0wO0s8Xy5sZW5ndGg7SysrKUM9KFM9KDB8eC53b3Jkc1tLXSktKDB8Xy53b3Jkc1tLXSkrQyk+PjI2LHRoaXMud29yZHNbS109NjcxMDg4NjMmUztmb3IoOzAhPT1DJiZLPHgubGVuZ3RoO0srKylDPShTPSgwfHgud29yZHNbS10pK0MpPj4yNix0aGlz'@;
put 'LndvcmRzW0tdPTY3MTA4ODYzJlM7aWYoMD09PUMmJks8eC5sZW5ndGgmJnghPT10aGlzKWZvcig7Szx4Lmxlbmd0aDtLKyspdGhpcy53b3Jkc1tLXT14LndvcmRzW0tdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxLKSx4IT09dGhpcyYmKHRoaXMubmVnYXRpdmU9'@;
put 'MSksdGhpcy5zdHJpcCgpfSxrLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGcpfTt2YXIgdGU9ZnVuY3Rpb24oZyxTLHgpe3ZhciBfLHAsQyxLPWcud29yZHMsbmU9Uy53b3Jkcyx1ZT14LndvcmRzLGhlPTAseGU9MHxLWzBdLE9lPTgxOTEmeGUs'@;
put 'SGU9eGU+Pj4xMyxFZT0wfEtbMV0sTGU9ODE5MSZFZSxOZT1FZT4+PjEzLEtlPTB8S1syXSxVZT04MTkxJktlLFhlPUtlPj4+MTMsYXQ9MHxLWzNdLEZlPTgxOTEmYXQsQ2U9YXQ+Pj4xMyxEZT0wfEtbNF0sUmU9ODE5MSZEZSxldD1EZT4+PjEzLG50PTB8S1s1XSxHZT04MTkxJm50LGR0PW50'@;
put 'Pj4+MTMsVGU9MHxLWzZdLEFlPTgxOTEmVGUsQmU9VGU+Pj4xMyxvdD0wfEtbN10sbHQ9ODE5MSZvdCxDdD1vdD4+PjEzLEZ0PTB8S1s4XSxSdD04MTkxJkZ0LFh0PUZ0Pj4+MTMsU249MHxLWzldLHp0PTgxOTEmU24sdm49U24+Pj4xMyxCbj0wfG5lWzBdLHRuPTgxOTEmQm4sWm49Qm4+Pj4x'@;
put 'MyxPbj0wfG5lWzFdLHB0PTgxOTEmT24sZm49T24+Pj4xMyxkbj0wfG5lWzJdLE10PTgxOTEmZG4sWXQ9ZG4+Pj4xMyxfdD0wfG5lWzNdLGp0PTgxOTEmX3QscG49X3Q+Pj4xMyxydD0wfG5lWzRdLEV0PTgxOTEmcnQsUXQ9cnQ+Pj4xMyxUdD0wfG5lWzVdLG10PTgxOTEmVHQsR3Q9VHQ+Pj4x'@;
put 'Myxrbj0wfG5lWzZdLEJ0PTgxOTEma24sYm49a24+Pj4xMyxDbj0wfG5lWzddLGVuPTgxOTEmQ24sUG49Q24+Pj4xMyx3bj0wfG5lWzhdLCR0PTgxOTEmd24sV249d24+Pj4xMyxjaT0wfG5lWzldLGxuPTgxOTEmY2ksbm49Y2k+Pj4xMzt4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeUy5uZWdhdGl2'@;
put 'ZSx4Lmxlbmd0aD0xOTt2YXIgdWk9KGhlKyhfPU1hdGguaW11bChPZSx0bikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoT2UsWm4pKStNYXRoLmltdWwoSGUsdG4pfDApKTw8MTMpfDA7aGU9KChDPU1hdGguaW11bChIZSxabikpKyhwPj4+MTMpfDApKyh1aT4+PjI2KXwwLHVpJj02NzEw'@;
put 'ODg2MyxfPU1hdGguaW11bChMZSx0bikscD0ocD1NYXRoLmltdWwoTGUsWm4pKStNYXRoLmltdWwoTmUsdG4pfDAsQz1NYXRoLmltdWwoTmUsWm4pO3ZhciBBcj0oaGUrKF89XytNYXRoLmltdWwoT2UscHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxmbil8MCkrTWF0aC5p'@;
put 'bXVsKEhlLHB0KXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxmbil8MCkrKHA+Pj4xMyl8MCkrKEFyPj4+MjYpfDAsQXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKFVlLHRuKSxwPShwPU1hdGguaW11bChVZSxabikpK01hdGguaW11bChYZSx0bil8MCxDPU1hdGguaW11bChYZSxa'@;
put 'biksXz1fK01hdGguaW11bChMZSxwdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLGZuKXwwKStNYXRoLmltdWwoTmUscHQpfDAsQz1DK01hdGguaW11bChOZSxmbil8MDt2YXIgbXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLE10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsWXQp'@;
put 'fDApK01hdGguaW11bChIZSxNdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsWXQpfDApKyhwPj4+MTMpfDApKyhtcj4+PjI2KXwwLG1yJj02NzEwODg2MyxfPU1hdGguaW11bChGZSx0bikscD0ocD1NYXRoLmltdWwoRmUsWm4pKStNYXRoLmltdWwoQ2UsdG4pfDAsQz1NYXRo'@;
put 'LmltdWwoQ2UsWm4pLF89XytNYXRoLmltdWwoVWUscHQpfDAscD0ocD1wK01hdGguaW11bChVZSxmbil8MCkrTWF0aC5pbXVsKFhlLHB0KXwwLEM9QytNYXRoLmltdWwoWGUsZm4pfDAsXz1fK01hdGguaW11bChMZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFl0KXwwKStNYXRoLmltdWwo'@;
put 'TmUsTXQpfDAsQz1DK01hdGguaW11bChOZSxZdCl8MDt2YXIgeWk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGp0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UscG4pfDApK01hdGguaW11bChIZSxqdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUscG4pfDApKyhw'@;
put 'Pj4+MTMpfDApKyh5aT4+PjI2KXwwLHlpJj02NzEwODg2MyxfPU1hdGguaW11bChSZSx0bikscD0ocD1NYXRoLmltdWwoUmUsWm4pKStNYXRoLmltdWwoZXQsdG4pfDAsQz1NYXRoLmltdWwoZXQsWm4pLF89XytNYXRoLmltdWwoRmUscHQpfDAscD0ocD1wK01hdGguaW11bChGZSxmbil8MCkr'@;
put 'TWF0aC5pbXVsKENlLHB0KXwwLEM9QytNYXRoLmltdWwoQ2UsZm4pfDAsXz1fK01hdGguaW11bChVZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLFl0KXwwKStNYXRoLmltdWwoWGUsTXQpfDAsQz1DK01hdGguaW11bChYZSxZdCl8MCxfPV8rTWF0aC5pbXVsKExlLGp0KXwwLHA9KHA9cCtN'@;
put 'YXRoLmltdWwoTGUscG4pfDApK01hdGguaW11bChOZSxqdCl8MCxDPUMrTWF0aC5pbXVsKE5lLHBuKXwwO3ZhciAkcj0oaGUrKF89XytNYXRoLmltdWwoT2UsRXQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxRdCl8MCkrTWF0aC5pbXVsKEhlLEV0KXwwKSk8PDEzKXwwO2hl'@;
put 'PSgoQz1DK01hdGguaW11bChIZSxRdCl8MCkrKHA+Pj4xMyl8MCkrKCRyPj4+MjYpfDAsJHImPTY3MTA4ODYzLF89TWF0aC5pbXVsKEdlLHRuKSxwPShwPU1hdGguaW11bChHZSxabikpK01hdGguaW11bChkdCx0bil8MCxDPU1hdGguaW11bChkdCxabiksXz1fK01hdGguaW11bChSZSxwdCl8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKFJlLGZuKXwwKStNYXRoLmltdWwoZXQscHQpfDAsQz1DK01hdGguaW11bChldCxmbil8MCxfPV8rTWF0aC5pbXVsKEZlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsWXQpfDApK01hdGguaW11bChDZSxNdCl8MCxDPUMrTWF0aC5pbXVsKENlLFl0KXwwLF89'@;
put 'XytNYXRoLmltdWwoVWUsanQpfDAscD0ocD1wK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKFhlLGp0KXwwLEM9QytNYXRoLmltdWwoWGUscG4pfDAsXz1fK01hdGguaW11bChMZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFF0KXwwKStNYXRoLmltdWwoTmUsRXQpfDAsQz1DK01h'@;
put 'dGguaW11bChOZSxRdCl8MDt2YXIgSmk9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLG10KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsR3QpfDApK01hdGguaW11bChIZSxtdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsR3QpfDApKyhwPj4+MTMpfDApKyhKaT4+'@;
put 'PjI2KXwwLEppJj02NzEwODg2MyxfPU1hdGguaW11bChBZSx0bikscD0ocD1NYXRoLmltdWwoQWUsWm4pKStNYXRoLmltdWwoQmUsdG4pfDAsQz1NYXRoLmltdWwoQmUsWm4pLF89XytNYXRoLmltdWwoR2UscHQpfDAscD0ocD1wK01hdGguaW11bChHZSxmbil8MCkrTWF0aC5pbXVsKGR0LHB0'@;
put 'KXwwLEM9QytNYXRoLmltdWwoZHQsZm4pfDAsXz1fK01hdGguaW11bChSZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFl0KXwwKStNYXRoLmltdWwoZXQsTXQpfDAsQz1DK01hdGguaW11bChldCxZdCl8MCxfPV8rTWF0aC5pbXVsKEZlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUscG4p'@;
put 'fDApK01hdGguaW11bChDZSxqdCl8MCxDPUMrTWF0aC5pbXVsKENlLHBuKXwwLF89XytNYXRoLmltdWwoVWUsRXQpfDAscD0ocD1wK01hdGguaW11bChVZSxRdCl8MCkrTWF0aC5pbXVsKFhlLEV0KXwwLEM9QytNYXRoLmltdWwoWGUsUXQpfDAsXz1fK01hdGguaW11bChMZSxtdCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKExlLEd0KXwwKStNYXRoLmltdWwoTmUsbXQpfDAsQz1DK01hdGguaW11bChOZSxHdCl8MDt2YXIgeXI9KGhlKyhfPV8rTWF0aC5pbXVsKE9lLEJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoT2UsYm4pfDApK01hdGguaW11bChIZSxCdCl8MCkpPDwxMyl8'@;
put 'MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsYm4pfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGguaW11bChsdCx0bikscD0ocD1NYXRoLmltdWwobHQsWm4pKStNYXRoLmltdWwoQ3QsdG4pfDAsQz1NYXRoLmltdWwoQ3QsWm4pLF89XytNYXRoLmltdWwoQWUs'@;
put 'cHQpfDAscD0ocD1wK01hdGguaW11bChBZSxmbil8MCkrTWF0aC5pbXVsKEJlLHB0KXwwLEM9QytNYXRoLmltdWwoQmUsZm4pfDAsXz1fK01hdGguaW11bChHZSxNdCl8MCxwPShwPXArTWF0aC5pbXVsKEdlLFl0KXwwKStNYXRoLmltdWwoZHQsTXQpfDAsQz1DK01hdGguaW11bChkdCxZdCl8'@;
put 'MCxfPV8rTWF0aC5pbXVsKFJlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChldCxqdCl8MCxDPUMrTWF0aC5pbXVsKGV0LHBuKXwwLF89XytNYXRoLmltdWwoRmUsRXQpfDAscD0ocD1wK01hdGguaW11bChGZSxRdCl8MCkrTWF0aC5pbXVsKENlLEV0KXwwLEM9'@;
put 'QytNYXRoLmltdWwoQ2UsUXQpfDAsXz1fK01hdGguaW11bChVZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFVlLEd0KXwwKStNYXRoLmltdWwoWGUsbXQpfDAsQz1DK01hdGguaW11bChYZSxHdCl8MCxfPV8rTWF0aC5pbXVsKExlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoTGUsYm4pfDApK01h'@;
put 'dGguaW11bChOZSxCdCl8MCxDPUMrTWF0aC5pbXVsKE5lLGJuKXwwO3ZhciBJaT0oaGUrKF89XytNYXRoLmltdWwoT2UsZW4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChPZSxQbil8MCkrTWF0aC5pbXVsKEhlLGVuKXwwKSk8PDEzKXwwO2hlPSgoQz1DK01hdGguaW11bChIZSxQ'@;
put 'bil8MCkrKHA+Pj4xMyl8MCkrKElpPj4+MjYpfDAsSWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKFJ0LHRuKSxwPShwPU1hdGguaW11bChSdCxabikpK01hdGguaW11bChYdCx0bil8MCxDPU1hdGguaW11bChYdCxabiksXz1fK01hdGguaW11bChsdCxwdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0'@;
put 'LGZuKXwwKStNYXRoLmltdWwoQ3QscHQpfDAsQz1DK01hdGguaW11bChDdCxmbil8MCxfPV8rTWF0aC5pbXVsKEFlLE10KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsWXQpfDApK01hdGguaW11bChCZSxNdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFl0KXwwLF89XytNYXRoLmltdWwoR2UsanQpfDAs'@;
put 'cD0ocD1wK01hdGguaW11bChHZSxwbil8MCkrTWF0aC5pbXVsKGR0LGp0KXwwLEM9QytNYXRoLmltdWwoZHQscG4pfDAsXz1fK01hdGguaW11bChSZSxFdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFF0KXwwKStNYXRoLmltdWwoZXQsRXQpfDAsQz1DK01hdGguaW11bChldCxRdCl8MCxfPV8r'@;
put 'TWF0aC5pbXVsKEZlLG10KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsR3QpfDApK01hdGguaW11bChDZSxtdCl8MCxDPUMrTWF0aC5pbXVsKENlLEd0KXwwLF89XytNYXRoLmltdWwoVWUsQnQpfDAscD0ocD1wK01hdGguaW11bChVZSxibil8MCkrTWF0aC5pbXVsKFhlLEJ0KXwwLEM9QytNYXRo'@;
put 'LmltdWwoWGUsYm4pfDAsXz1fK01hdGguaW11bChMZSxlbil8MCxwPShwPXArTWF0aC5pbXVsKExlLFBuKXwwKStNYXRoLmltdWwoTmUsZW4pfDAsQz1DK01hdGguaW11bChOZSxQbil8MDt2YXIgbm89KGhlKyhfPV8rTWF0aC5pbXVsKE9lLCR0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRo'@;
put 'LmltdWwoT2UsV24pfDApK01hdGguaW11bChIZSwkdCl8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsV24pfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCx0bikscD0ocD1NYXRoLmltdWwoenQsWm4pKStNYXRoLmltdWwodm4s'@;
put 'dG4pfDAsQz1NYXRoLmltdWwodm4sWm4pLF89XytNYXRoLmltdWwoUnQscHQpfDAscD0ocD1wK01hdGguaW11bChSdCxmbil8MCkrTWF0aC5pbXVsKFh0LHB0KXwwLEM9QytNYXRoLmltdWwoWHQsZm4pfDAsXz1fK01hdGguaW11bChsdCxNdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFl0KXww'@;
put 'KStNYXRoLmltdWwoQ3QsTXQpfDAsQz1DK01hdGguaW11bChDdCxZdCl8MCxfPV8rTWF0aC5pbXVsKEFlLGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUscG4pfDApK01hdGguaW11bChCZSxqdCl8MCxDPUMrTWF0aC5pbXVsKEJlLHBuKXwwLF89XytNYXRoLmltdWwoR2UsRXQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChHZSxRdCl8MCkrTWF0aC5pbXVsKGR0LEV0KXwwLEM9QytNYXRoLmltdWwoZHQsUXQpfDAsXz1fK01hdGguaW11bChSZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLEd0KXwwKStNYXRoLmltdWwoZXQsbXQpfDAsQz1DK01hdGguaW11bChldCxHdCl8MCxfPV8rTWF0aC5p'@;
put 'bXVsKEZlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsYm4pfDApK01hdGguaW11bChDZSxCdCl8MCxDPUMrTWF0aC5pbXVsKENlLGJuKXwwLF89XytNYXRoLmltdWwoVWUsZW4pfDAscD0ocD1wK01hdGguaW11bChVZSxQbil8MCkrTWF0aC5pbXVsKFhlLGVuKXwwLEM9QytNYXRoLmltdWwo'@;
put 'WGUsUG4pfDAsXz1fK01hdGguaW11bChMZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKExlLFduKXwwKStNYXRoLmltdWwoTmUsJHQpfDAsQz1DK01hdGguaW11bChOZSxXbil8MDt2YXIgem49KGhlKyhfPV8rTWF0aC5pbXVsKE9lLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwo'@;
put 'T2Usbm4pfDApK01hdGguaW11bChIZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoSGUsbm4pfDApKyhwPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxwdCkscD0ocD1NYXRoLmltdWwoenQsZm4pKStNYXRoLmltdWwodm4scHQpfDAs'@;
put 'Qz1NYXRoLmltdWwodm4sZm4pLF89XytNYXRoLmltdWwoUnQsTXQpfDAscD0ocD1wK01hdGguaW11bChSdCxZdCl8MCkrTWF0aC5pbXVsKFh0LE10KXwwLEM9QytNYXRoLmltdWwoWHQsWXQpfDAsXz1fK01hdGguaW11bChsdCxqdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LHBuKXwwKStNYXRo'@;
put 'LmltdWwoQ3QsanQpfDAsQz1DK01hdGguaW11bChDdCxwbil8MCxfPV8rTWF0aC5pbXVsKEFlLEV0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsUXQpfDApK01hdGguaW11bChCZSxFdCl8MCxDPUMrTWF0aC5pbXVsKEJlLFF0KXwwLF89XytNYXRoLmltdWwoR2UsbXQpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChHZSxHdCl8MCkrTWF0aC5pbXVsKGR0LG10KXwwLEM9QytNYXRoLmltdWwoZHQsR3QpfDAsXz1fK01hdGguaW11bChSZSxCdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLGJuKXwwKStNYXRoLmltdWwoZXQsQnQpfDAsQz1DK01hdGguaW11bChldCxibil8MCxfPV8rTWF0aC5pbXVsKEZl'@;
put 'LGVuKXwwLHA9KHA9cCtNYXRoLmltdWwoRmUsUG4pfDApK01hdGguaW11bChDZSxlbil8MCxDPUMrTWF0aC5pbXVsKENlLFBuKXwwLF89XytNYXRoLmltdWwoVWUsJHQpfDAscD0ocD1wK01hdGguaW11bChVZSxXbil8MCkrTWF0aC5pbXVsKFhlLCR0KXwwLEM9QytNYXRoLmltdWwoWGUsV24p'@;
put 'fDA7dmFyIFppPShoZSsoXz1fK01hdGguaW11bChMZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKExlLG5uKXwwKStNYXRoLmltdWwoTmUsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKE5lLG5uKXwwKSsocD4+PjEzKXwwKSsoWmk+Pj4yNil8MCxaaSY9Njcx'@;
put 'MDg4NjMsXz1NYXRoLmltdWwoenQsTXQpLHA9KHA9TWF0aC5pbXVsKHp0LFl0KSkrTWF0aC5pbXVsKHZuLE10KXwwLEM9TWF0aC5pbXVsKHZuLFl0KSxfPV8rTWF0aC5pbXVsKFJ0LGp0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQscG4pfDApK01hdGguaW11bChYdCxqdCl8MCxDPUMrTWF0aC5p'@;
put 'bXVsKFh0LHBuKXwwLF89XytNYXRoLmltdWwobHQsRXQpfDAscD0ocD1wK01hdGguaW11bChsdCxRdCl8MCkrTWF0aC5pbXVsKEN0LEV0KXwwLEM9QytNYXRoLmltdWwoQ3QsUXQpfDAsXz1fK01hdGguaW11bChBZSxtdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLEd0KXwwKStNYXRoLmltdWwo'@;
put 'QmUsbXQpfDAsQz1DK01hdGguaW11bChCZSxHdCl8MCxfPV8rTWF0aC5pbXVsKEdlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoR2UsYm4pfDApK01hdGguaW11bChkdCxCdCl8MCxDPUMrTWF0aC5pbXVsKGR0LGJuKXwwLF89XytNYXRoLmltdWwoUmUsZW4pfDAscD0ocD1wK01hdGguaW11bChS'@;
put 'ZSxQbil8MCkrTWF0aC5pbXVsKGV0LGVuKXwwLEM9QytNYXRoLmltdWwoZXQsUG4pfDAsXz1fK01hdGguaW11bChGZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEZlLFduKXwwKStNYXRoLmltdWwoQ2UsJHQpfDAsQz1DK01hdGguaW11bChDZSxXbil8MDt2YXIgV2k9KGhlKyhfPV8rTWF0aC5p'@;
put 'bXVsKFVlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVWUsbm4pfDApK01hdGguaW11bChYZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoWGUsbm4pfDApKyhwPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxqdCks'@;
put 'cD0ocD1NYXRoLmltdWwoenQscG4pKStNYXRoLmltdWwodm4sanQpfDAsQz1NYXRoLmltdWwodm4scG4pLF89XytNYXRoLmltdWwoUnQsRXQpfDAscD0ocD1wK01hdGguaW11bChSdCxRdCl8MCkrTWF0aC5pbXVsKFh0LEV0KXwwLEM9QytNYXRoLmltdWwoWHQsUXQpfDAsXz1fK01hdGguaW11'@;
put 'bChsdCxtdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LEd0KXwwKStNYXRoLmltdWwoQ3QsbXQpfDAsQz1DK01hdGguaW11bChDdCxHdCl8MCxfPV8rTWF0aC5pbXVsKEFlLEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoQWUsYm4pfDApK01hdGguaW11bChCZSxCdCl8MCxDPUMrTWF0aC5pbXVsKEJl'@;
put 'LGJuKXwwLF89XytNYXRoLmltdWwoR2UsZW4pfDAscD0ocD1wK01hdGguaW11bChHZSxQbil8MCkrTWF0aC5pbXVsKGR0LGVuKXwwLEM9QytNYXRoLmltdWwoZHQsUG4pfDAsXz1fK01hdGguaW11bChSZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKFJlLFduKXwwKStNYXRoLmltdWwoZXQsJHQp'@;
put 'fDAsQz1DK01hdGguaW11bChldCxXbil8MDt2YXIgb289KGhlKyhfPV8rTWF0aC5pbXVsKEZlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRmUsbm4pfDApK01hdGguaW11bChDZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQ2Usbm4pfDApKyhwPj4+MTMp'@;
put 'fDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxFdCkscD0ocD1NYXRoLmltdWwoenQsUXQpKStNYXRoLmltdWwodm4sRXQpfDAsQz1NYXRoLmltdWwodm4sUXQpLF89XytNYXRoLmltdWwoUnQsbXQpfDAscD0ocD1wK01hdGguaW11bChSdCxHdCl8MCkrTWF0aC5p'@;
put 'bXVsKFh0LG10KXwwLEM9QytNYXRoLmltdWwoWHQsR3QpfDAsXz1fK01hdGguaW11bChsdCxCdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LGJuKXwwKStNYXRoLmltdWwoQ3QsQnQpfDAsQz1DK01hdGguaW11bChDdCxibil8MCxfPV8rTWF0aC5pbXVsKEFlLGVuKXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoQWUsUG4pfDApK01hdGguaW11bChCZSxlbil8MCxDPUMrTWF0aC5pbXVsKEJlLFBuKXwwLF89XytNYXRoLmltdWwoR2UsJHQpfDAscD0ocD1wK01hdGguaW11bChHZSxXbil8MCkrTWF0aC5pbXVsKGR0LCR0KXwwLEM9QytNYXRoLmltdWwoZHQsV24pfDA7dmFyIGhvPShoZSsoXz1fK01h'@;
put 'dGguaW11bChSZSxsbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFJlLG5uKXwwKStNYXRoLmltdWwoZXQsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKGV0LG5uKXwwKSsocD4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQs'@;
put 'bXQpLHA9KHA9TWF0aC5pbXVsKHp0LEd0KSkrTWF0aC5pbXVsKHZuLG10KXwwLEM9TWF0aC5pbXVsKHZuLEd0KSxfPV8rTWF0aC5pbXVsKFJ0LEJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoUnQsYm4pfDApK01hdGguaW11bChYdCxCdCl8MCxDPUMrTWF0aC5pbXVsKFh0LGJuKXwwLF89XytNYXRo'@;
put 'LmltdWwobHQsZW4pfDAscD0ocD1wK01hdGguaW11bChsdCxQbil8MCkrTWF0aC5pbXVsKEN0LGVuKXwwLEM9QytNYXRoLmltdWwoQ3QsUG4pfDAsXz1fK01hdGguaW11bChBZSwkdCl8MCxwPShwPXArTWF0aC5pbXVsKEFlLFduKXwwKStNYXRoLmltdWwoQmUsJHQpfDAsQz1DK01hdGguaW11'@;
put 'bChCZSxXbil8MDt2YXIgTHI9KGhlKyhfPV8rTWF0aC5pbXVsKEdlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoR2Usbm4pfDApK01hdGguaW11bChkdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoZHQsbm4pfDApKyhwPj4+MTMpfDApKyhMcj4+PjI2KXww'@;
put 'LExyJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxCdCkscD0ocD1NYXRoLmltdWwoenQsYm4pKStNYXRoLmltdWwodm4sQnQpfDAsQz1NYXRoLmltdWwodm4sYm4pLF89XytNYXRoLmltdWwoUnQsZW4pfDAscD0ocD1wK01hdGguaW11bChSdCxQbil8MCkrTWF0aC5pbXVsKFh0LGVuKXwwLEM9'@;
put 'QytNYXRoLmltdWwoWHQsUG4pfDAsXz1fK01hdGguaW11bChsdCwkdCl8MCxwPShwPXArTWF0aC5pbXVsKGx0LFduKXwwKStNYXRoLmltdWwoQ3QsJHQpfDAsQz1DK01hdGguaW11bChDdCxXbil8MDt2YXIgQmk9KGhlKyhfPV8rTWF0aC5pbXVsKEFlLGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9'@;
put 'cCtNYXRoLmltdWwoQWUsbm4pfDApK01hdGguaW11bChCZSxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoQmUsbm4pfDApKyhwPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxfPU1hdGguaW11bCh6dCxlbikscD0ocD1NYXRoLmltdWwoenQsUG4pKStNYXRoLmlt'@;
put 'dWwodm4sZW4pfDAsQz1NYXRoLmltdWwodm4sUG4pLF89XytNYXRoLmltdWwoUnQsJHQpfDAscD0ocD1wK01hdGguaW11bChSdCxXbil8MCkrTWF0aC5pbXVsKFh0LCR0KXwwLEM9QytNYXRoLmltdWwoWHQsV24pfDA7dmFyIExvPShoZSsoXz1fK01hdGguaW11bChsdCxsbil8MCl8MCkrKCg4'@;
put 'MTkxJihwPShwPXArTWF0aC5pbXVsKGx0LG5uKXwwKStNYXRoLmltdWwoQ3QsbG4pfDApKTw8MTMpfDA7aGU9KChDPUMrTWF0aC5pbXVsKEN0LG5uKXwwKSsocD4+PjEzKXwwKSsoTG8+Pj4yNil8MCxMbyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoenQsJHQpLHA9KHA9TWF0aC5pbXVsKHp0LFdu'@;
put 'KSkrTWF0aC5pbXVsKHZuLCR0KXwwLEM9TWF0aC5pbXVsKHZuLFduKTt2YXIgS289KGhlKyhfPV8rTWF0aC5pbXVsKFJ0LGxuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoUnQsbm4pfDApK01hdGguaW11bChYdCxsbil8MCkpPDwxMyl8MDtoZT0oKEM9QytNYXRoLmltdWwoWHQs'@;
put 'bm4pfDApKyhwPj4+MTMpfDApKyhLbz4+PjI2KXwwLEtvJj02NzEwODg2Mzt2YXIgZXM9KGhlKyhfPU1hdGguaW11bCh6dCxsbikpfDApKygoODE5MSYocD0ocD1NYXRoLmltdWwoenQsbm4pKStNYXRoLmltdWwodm4sbG4pfDApKTw8MTMpfDA7cmV0dXJuIGhlPSgoQz1NYXRoLmltdWwodm4s'@;
put 'bm4pKSsocD4+PjEzKXwwKSsoZXM+Pj4yNil8MCxlcyY9NjcxMDg4NjMsdWVbMF09dWksdWVbMV09QXIsdWVbMl09bXIsdWVbM109eWksdWVbNF09JHIsdWVbNV09SmksdWVbNl09eXIsdWVbN109SWksdWVbOF09bm8sdWVbOV09em4sdWVbMTBdPVppLHVlWzExXT1XaSx1ZVsxMl09b28sdWVb'@;
put 'MTNdPWhvLHVlWzE0XT1Mcix1ZVsxNV09QmksdWVbMTZdPUxvLHVlWzE3XT1Lbyx1ZVsxOF09ZXMsMCE9PWhlJiYodWVbMTldPWhlLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGFlKGcsUyx4KXtyZXR1cm4obmV3IHNlKS5tdWxwKGcsUyx4KX1mdW5jdGlvbiBzZShnLFMpe3RoaXMueD1nLHRo'@;
put 'aXMueT1TfU1hdGguaW11bHx8KHRlPVEpLGsucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKGcsUyl7dmFyIF89dGhpcy5sZW5ndGgrZy5sZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Zy5sZW5ndGg/dGUodGhpcyxnLFMpOl88NjM/USh0aGlzLGcsUyk6XzwxMDI0P2Z1bmN0'@;
put 'aW9uKHAsQyxLKXtLLm5lZ2F0aXZlPUMubmVnYXRpdmVecC5uZWdhdGl2ZSxLLmxlbmd0aD1wLmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIG5lPTAsdWU9MCxoZT0wO2hlPEsubGVuZ3RoLTE7aGUrKyl7dmFyIHhlPXVlO3VlPTA7Zm9yKHZhciBPZT02NzEwODg2MyZuZSxIZT1NYXRoLm1pbiho'@;
put 'ZSxDLmxlbmd0aC0xKSxFZT1NYXRoLm1heCgwLGhlLXAubGVuZ3RoKzEpO0VlPD1IZTtFZSsrKXt2YXIgTmU9KDB8cC53b3Jkc1toZS1FZV0pKigwfEMud29yZHNbRWVdKSxLZT02NzEwODg2MyZOZTtPZT02NzEwODg2MyYoS2U9S2UrT2V8MCksdWUrPSh4ZT0oeGU9eGUrKE5lLzY3MTA4ODY0'@;
put 'fDApfDApKyhLZT4+PjI2KXwwKT4+PjI2LHhlJj02NzEwODg2M31LLndvcmRzW2hlXT1PZSxuZT14ZSx4ZT11ZX1yZXR1cm4gMCE9PW5lP0sud29yZHNbaGVdPW5lOksubGVuZ3RoLS0sSy5zdHJpcCgpfSh0aGlzLGcsUyk6YWUodGhpcyxnLFMpfSxzZS5wcm90b3R5cGUubWFrZVJCVD1mdW5j'@;
put 'dGlvbihnKXtmb3IodmFyIFM9bmV3IEFycmF5KGcpLHg9ay5wcm90b3R5cGUuX2NvdW50Qml0cyhnKS0xLF89MDtfPGc7XysrKVNbX109dGhpcy5yZXZCaW4oXyx4LGcpO3JldHVybiBTfSxzZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKGcsUyx4KXtpZigwPT09Z3x8Zz09PXgtMSlyZXR1'@;
put 'cm4gZztmb3IodmFyIF89MCxwPTA7cDxTO3ArKylffD0oMSZnKTw8Uy1wLTEsZz4+PTE7cmV0dXJuIF99LHNlLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKGcsUyx4LF8scCxDKXtmb3IodmFyIEs9MDtLPEM7SysrKV9bS109U1tnW0tdXSxwW0tdPXhbZ1tLXV19LHNlLnByb3RvdHlwZS50'@;
put 'cmFuc2Zvcm09ZnVuY3Rpb24oZyxTLHgsXyxwLEMpe3RoaXMucGVybXV0ZShDLGcsUyx4LF8scCk7Zm9yKHZhciBLPTE7SzxwO0s8PD0xKWZvcih2YXIgbmU9Szw8MSx1ZT1NYXRoLmNvcygyKk1hdGguUEkvbmUpLGhlPU1hdGguc2luKDIqTWF0aC5QSS9uZSkseGU9MDt4ZTxwO3hlKz1uZSlm'@;
put 'b3IodmFyIE9lPXVlLEhlPWhlLEVlPTA7RWU8SztFZSsrKXt2YXIgTGU9eFt4ZStFZV0sTmU9X1t4ZStFZV0sS2U9eFt4ZStFZStLXSxVZT1fW3hlK0VlK0tdLFhlPU9lKktlLUhlKlVlO1VlPU9lKlVlK0hlKktlLHhbeGUrRWVdPUxlKyhLZT1YZSksX1t4ZStFZV09TmUrVWUseFt4ZStFZStL'@;
put 'XT1MZS1LZSxfW3hlK0VlK0tdPU5lLVVlLEVlIT09bmUmJihYZT11ZSpPZS1oZSpIZSxIZT11ZSpIZStoZSpPZSxPZT1YZSl9fSxzZS5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oZyxTKXt2YXIgeD0xfE1hdGgubWF4KFMsZyksXz0xJngscD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0x'@;
put 'KXArKztyZXR1cm4gMTw8cCsxK199LHNlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oZyxTLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBfPTA7Xzx4LzI7XysrKXt2YXIgcD1nW19dO2dbX109Z1t4LV8tMV0sZ1t4LV8tMV09cCxwPVNbX10sU1tfXT0tU1t4LV8tMV0sU1t4LV8tMV09LXB9'@;
put 'fSxzZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKGcsUyl7Zm9yKHZhciB4PTAsXz0wO188Uy8yO18rKyl7dmFyIHA9ODE5MipNYXRoLnJvdW5kKGdbMipfKzFdL1MpK01hdGgucm91bmQoZ1syKl9dL1MpK3g7Z1tfXT02NzEwODg2MyZwLHg9cDw2NzEwODg2ND8wOnAvNjcxMDg4'@;
put 'NjR8MH1yZXR1cm4gZ30sc2UucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oZyxTLHgsXyl7Zm9yKHZhciBwPTAsQz0wO0M8UztDKyspeFsyKkNdPTgxOTEmKHArPTB8Z1tDXSkseFsyKkMrMV09ODE5MSYocD4+Pj0xMykscD4+Pj0xMztmb3IoQz0yKlM7QzxfOysrQyl4W0NdPTA7SSgw'@;
put 'PT09cCksSSghKC04MTkyJnApKX0sc2UucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oZyl7Zm9yKHZhciBTPW5ldyBBcnJheShnKSx4PTA7eDxnO3grKylTW3hdPTA7cmV0dXJuIFN9LHNlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXz0yKnRoaXMuZ3Vlc3NMZW4xM2IoZy5s'@;
put 'ZW5ndGgsUy5sZW5ndGgpLHA9dGhpcy5tYWtlUkJUKF8pLEM9dGhpcy5zdHViKF8pLEs9bmV3IEFycmF5KF8pLG5lPW5ldyBBcnJheShfKSx1ZT1uZXcgQXJyYXkoXyksaGU9bmV3IEFycmF5KF8pLHhlPW5ldyBBcnJheShfKSxPZT1uZXcgQXJyYXkoXyksSGU9eC53b3JkcztIZS5sZW5ndGg9'@;
put 'Xyx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCxLLF8pLHRoaXMuY29udmVydDEzYihTLndvcmRzLFMubGVuZ3RoLGhlLF8pLHRoaXMudHJhbnNmb3JtKEssQyxuZSx1ZSxfLHApLHRoaXMudHJhbnNmb3JtKGhlLEMseGUsT2UsXyxwKTtmb3IodmFyIEVlPTA7RWU8XztFZSsrKXt2'@;
put 'YXIgTGU9bmVbRWVdKnhlW0VlXS11ZVtFZV0qT2VbRWVdO3VlW0VlXT1uZVtFZV0qT2VbRWVdK3VlW0VlXSp4ZVtFZV0sbmVbRWVdPUxlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShuZSx1ZSxfKSx0aGlzLnRyYW5zZm9ybShuZSx1ZSxIZSxDLF8scCksdGhpcy5jb25qdWdhdGUoSGUsQyxfKSx0'@;
put 'aGlzLm5vcm1hbGl6ZTEzYihIZSxfKSx4Lm5lZ2F0aXZlPWcubmVnYXRpdmVeUy5uZWdhdGl2ZSx4Lmxlbmd0aD1nLmxlbmd0aCtTLmxlbmd0aCx4LnN0cmlwKCl9LGsucHJvdG90eXBlLm11bD1mdW5jdGlvbihnKXt2YXIgUz1uZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXko'@;
put 'dGhpcy5sZW5ndGgrZy5sZW5ndGgpLHRoaXMubXVsVG8oZyxTKX0say5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihnKXt2YXIgUz1uZXcgayhudWxsKTtyZXR1cm4gUy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrZy5sZW5ndGgpLGFlKHRoaXMsZyxTKX0say5wcm90b3R5cGUuaW11bD1m'@;
put 'dW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKGcsdGhpcyl9LGsucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKSxJKGc8NjcxMDg4NjQpO2Zvcih2YXIgUz0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIF89KDB8dGhpcy53b3Jk'@;
put 'c1t4XSkqZyxwPSg2NzEwODg2MyZfKSsoNjcxMDg4NjMmUyk7Uz4+PTI2LFMrPV8vNjcxMDg4NjR8MCxTKz1wPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZwfXJldHVybiAwIT09UyYmKHRoaXMud29yZHNbeF09Uyx0aGlzLmxlbmd0aCsrKSx0aGlzfSxrLnByb3RvdHlwZS5tdWxuPWZ1'@;
put 'bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oZyl9LGsucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0say5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0say5wcm90b3R5cGUucG93'@;
put 'PWZ1bmN0aW9uKGcpe3ZhciBTPWZ1bmN0aW9uKEMpe2Zvcih2YXIgSz1uZXcgQXJyYXkoQy5iaXRMZW5ndGgoKSksbmU9MDtuZTxLLmxlbmd0aDtuZSsrKXt2YXIgaGU9bmUlMjY7S1tuZV09KEMud29yZHNbbmUvMjZ8MF0mMTw8aGUpPj4+aGV9cmV0dXJuIEt9KGcpO2lmKDA9PT1TLmxlbmd0'@;
put 'aClyZXR1cm4gbmV3IGsoMSk7Zm9yKHZhciB4PXRoaXMsXz0wO188Uy5sZW5ndGgmJjA9PT1TW19dO18rKyx4PXguc3FyKCkpO2lmKCsrXzxTLmxlbmd0aClmb3IodmFyIHA9eC5zcXIoKTtfPFMubGVuZ3RoO18rKyxwPXAuc3FyKCkpMCE9PVNbX10mJih4PXgubXVsKHApKTtyZXR1cm4geH0s'@;
put 'ay5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUyx4PWclMjYsXz0oZy14KS8yNixwPTY3MTA4ODYzPj4+MjYteDw8MjYteDtpZigwIT09eCl7dmFyIEM9MDtmb3IoUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgSz10aGlzLndv'@;
put 'cmRzW1NdJnA7dGhpcy53b3Jkc1tTXT0oMHx0aGlzLndvcmRzW1NdKS1LPDx4fEMsQz1LPj4+MjYteH1DJiYodGhpcy53b3Jkc1tTXT1DLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1fKXtmb3IoUz10aGlzLmxlbmd0aC0xO1M+PTA7Uy0tKXRoaXMud29yZHNbUytfXT10aGlzLndvcmRzW1NdO2Zv'@;
put 'cihTPTA7UzxfO1MrKyl0aGlzLndvcmRzW1NdPTA7dGhpcy5sZW5ndGgrPV99cmV0dXJuIHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGcpfSxrLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rp'@;
put 'b24oZyxTLHgpe3ZhciBfO0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKSxfPVM/KFMtUyUyNikvMjY6MDt2YXIgcD1nJTI2LEM9TWF0aC5taW4oKGctcCkvMjYsdGhpcy5sZW5ndGgpLEs9NjcxMDg4NjNeNjcxMDg4NjM+Pj5wPDxwLG5lPXg7aWYoXy09QyxfPU1hdGgubWF4KDAsXyksbmUp'@;
put 'e2Zvcih2YXIgdWU9MDt1ZTxDO3VlKyspbmUud29yZHNbdWVdPXRoaXMud29yZHNbdWVdO25lLmxlbmd0aD1DfWlmKDAhPT1DKWlmKHRoaXMubGVuZ3RoPkMpZm9yKHRoaXMubGVuZ3RoLT1DLHVlPTA7dWU8dGhpcy5sZW5ndGg7dWUrKyl0aGlzLndvcmRzW3VlXT10aGlzLndvcmRzW3VlK0Nd'@;
put 'O2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGhlPTA7Zm9yKHVlPXRoaXMubGVuZ3RoLTE7dWU+PTAmJigwIT09aGV8fHVlPj1fKTt1ZS0tKXt2YXIgeGU9MHx0aGlzLndvcmRzW3VlXTt0aGlzLndvcmRzW3VlXT1oZTw8MjYtcHx4ZT4+PnAsaGU9eGUmS31yZXR1cm4g'@;
put 'bmUmJjAhPT1oZSYmKG5lLndvcmRzW25lLmxlbmd0aCsrXT1oZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oZyxTLHgpe3JldHVybiBJKDA9PT10aGlzLm5lZ2F0aXZlKSx0'@;
put 'aGlzLml1c2hybihnLFMseCl9LGsucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihnKX0say5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oZyl9LGsucHJvdG90eXBlLnNocm49ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihnKX0say5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oZyl9LGsucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9'@;
put 'KGctUykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PFMpKX0say5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnJiZnPj0wKTt2YXIgUz1nJTI2LHg9KGctUykvMjY7cmV0dXJuIEkoMD09PXRoaXMubmVnYXRpdmUs'@;
put 'ImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1TJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PVMmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+'@;
put 'PlM8PFMpLHRoaXMuc3RyaXAoKSl9LGsucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKGcpfSxrLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihnKXtyZXR1cm4gSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzwwP3RoaXMu'@;
put 'aXN1Ym4oLWcpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8Zz8odGhpcy53b3Jkc1swXT1nLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oZyksdGhpcy5uZWdhdGl2'@;
put 'ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKGcpfSxrLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oZyl7dGhpcy53b3Jkc1swXSs9Zztmb3IodmFyIFM9MDtTPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1NdPj02NzEwODg2NDtTKyspdGhpcy53b3Jkc1tTXS09NjcxMDg4NjQsUz09PXRoaXMubGVu'@;
put 'Z3RoLTE/dGhpcy53b3Jkc1tTKzFdPTE6dGhpcy53b3Jkc1tTKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLFMrMSksdGhpc30say5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oZyl7aWYoSSgibnVtYmVyIj09dHlwZW9mIGcpLEkoZzw2NzEwODg2NCksZzww'@;
put 'KXJldHVybiB0aGlzLmlhZGRuKC1nKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oZyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09ZywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRz'@;
put 'WzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgUz0wO1M8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbU108MDtTKyspdGhpcy53b3Jkc1tTXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tTKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmFk'@;
put 'ZG49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihnKX0say5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGcpfSxrLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxrLnBy'@;
put 'b3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0say5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGcsUyx4KXt2YXIgXyxwO3RoaXMuX2V4cGFuZChnLmxlbmd0aCt4KTt2YXIgSz0wO2ZvcihfPTA7XzxnLmxlbmd0aDtfKyspe3A9KDB8dGhp'@;
put 'cy53b3Jkc1tfK3hdKStLO3ZhciBuZT0oMHxnLndvcmRzW19dKSpTO0s9KChwLT02NzEwODg2MyZuZSk+PjI2KS0obmUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnB9Zm9yKDtfPHRoaXMubGVuZ3RoLXg7XysrKUs9KHA9KDB8dGhpcy53b3Jkc1tfK3hdKStLKT4+MjYs'@;
put 'dGhpcy53b3Jkc1tfK3hdPTY3MTA4ODYzJnA7aWYoMD09PUspcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoSSgtMT09PUspLEs9MCxfPTA7Xzx0aGlzLmxlbmd0aDtfKyspSz0ocD0tKDB8dGhpcy53b3Jkc1tfXSkrSyk+PjI2LHRoaXMud29yZHNbX109NjcxMDg4NjMmcDtyZXR1cm4gdGhpcy5u'@;
put 'ZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0say5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oZyxTKXt2YXIgeCxfPXRoaXMuY2xvbmUoKSxwPWcsQz0wfHAud29yZHNbcC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEMpKSYmKHA9cC51c2hsbih4KSxfLml1c2hsbih4KSxD'@;
put 'PTB8cC53b3Jkc1twLmxlbmd0aC0xXSk7dmFyIEssbmU9Xy5sZW5ndGgtcC5sZW5ndGg7aWYoIm1vZCIhPT1TKXsoSz1uZXcgayhudWxsKSkubGVuZ3RoPW5lKzEsSy53b3Jkcz1uZXcgQXJyYXkoSy5sZW5ndGgpO2Zvcih2YXIgdWU9MDt1ZTxLLmxlbmd0aDt1ZSsrKUsud29yZHNbdWVdPTB9'@;
put 'dmFyIGhlPV8uY2xvbmUoKS5faXNobG5zdWJtdWwocCwxLG5lKTswPT09aGUubmVnYXRpdmUmJihfPWhlLEsmJihLLndvcmRzW25lXT0xKSk7Zm9yKHZhciB4ZT1uZS0xO3hlPj0wO3hlLS0pe3ZhciBPZT02NzEwODg2NCooMHxfLndvcmRzW3AubGVuZ3RoK3hlXSkrKDB8Xy53b3Jkc1twLmxl'@;
put 'bmd0aCt4ZS0xXSk7Zm9yKE9lPU1hdGgubWluKE9lL0N8MCw2NzEwODg2MyksXy5faXNobG5zdWJtdWwocCxPZSx4ZSk7MCE9PV8ubmVnYXRpdmU7KU9lLS0sXy5uZWdhdGl2ZT0wLF8uX2lzaGxuc3VibXVsKHAsMSx4ZSksXy5pc1plcm8oKXx8KF8ubmVnYXRpdmVePTEpO0smJihLLndvcmRz'@;
put 'W3hlXT1PZSl9cmV0dXJuIEsmJksuc3RyaXAoKSxfLnN0cmlwKCksImRpdiIhPT1TJiYwIT09eCYmXy5pdXNocm4oeCkse2RpdjpLfHxudWxsLG1vZDpffX0say5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGcsUyx4KXtyZXR1cm4gSSghZy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2'@;
put 'Om5ldyBrKDApLG1vZDpuZXcgaygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1nLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2bW9kKGcsUyksIm1vZCIhPT1TJiYoXz1DLmRpdi5uZWcoKSksImRpdiIhPT1TJiYocD1DLm1vZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pYWRkKGcp'@;
put 'KSx7ZGl2Ol8sbW9kOnB9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmU/KEM9dGhpcy5kaXZtb2QoZy5uZWcoKSxTKSwibW9kIiE9PVMmJihfPUMuZGl2Lm5lZygpKSx7ZGl2Ol8sbW9kOkMubW9kfSk6dGhpcy5uZWdhdGl2ZSZnLm5lZ2F0aXZlPyhDPXRoaXMubmVnKCkuZGl2'@;
put 'bW9kKGcubmVnKCksUyksImRpdiIhPT1TJiYocD1DLm1vZC5uZWcoKSx4JiYwIT09cC5uZWdhdGl2ZSYmcC5pc3ViKGcpKSx7ZGl2OkMuZGl2LG1vZDpwfSk6Zy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGcpPDA/e2RpdjpuZXcgaygwKSxtb2Q6dGhpc306MT09PWcubGVuZ3RoPyJk'@;
put 'aXYiPT09Uz97ZGl2OnRoaXMuZGl2bihnLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1TP3tkaXY6bnVsbCxtb2Q6bmV3IGsodGhpcy5tb2RuKGcud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oZy53b3Jkc1swXSksbW9kOm5ldyBrKHRoaXMubW9kbihnLndvcmRzWzBdKSl9OnRoaXMu'@;
put 'X3dvcmREaXYoZyxTKTt2YXIgXyxwLEN9LGsucHJvdG90eXBlLmRpdj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywiZGl2IiwhMSkuZGl2fSxrLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuZGl2bW9kKGcsIm1vZCIsITEpLm1vZH0say5wcm90b3R5cGUu'@;
put 'dW1vZD1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5kaXZtb2QoZywibW9kIiwhMCkubW9kfSxrLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihnKXt2YXIgUz10aGlzLmRpdm1vZChnKTtpZihTLm1vZC5pc1plcm8oKSlyZXR1cm4gUy5kaXY7dmFyIHg9MCE9PVMuZGl2Lm5lZ2F0aXZlP1Mu'@;
put 'bW9kLmlzdWIoZyk6Uy5tb2QsXz1nLnVzaHJuKDEpLHA9Zy5hbmRsbigxKSxDPXguY21wKF8pO3JldHVybiBDPDB8fDE9PT1wJiYwPT09Qz9TLmRpdjowIT09Uy5kaXYubmVnYXRpdmU/Uy5kaXYuaXN1Ym4oMSk6Uy5kaXYuaWFkZG4oMSl9LGsucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oZyl7'@;
put 'SShnPD02NzEwODg2Myk7Zm9yKHZhciBTPTY3MTA4ODY0JWcseD0wLF89dGhpcy5sZW5ndGgtMTtfPj0wO18tLSl4PShTKngrKDB8dGhpcy53b3Jkc1tfXSkpJWc7cmV0dXJuIHh9LGsucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGcpe0koZzw9NjcxMDg4NjMpO2Zvcih2YXIgUz0wLHg9dGhp'@;
put 'cy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIF89KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqUzt0aGlzLndvcmRzW3hdPV8vZ3wwLFM9XyVnfXJldHVybiB0aGlzLnN0cmlwKCl9LGsucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihnKX0say5w'@;
put 'cm90b3R5cGUuZWdjZD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5jbG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMuY2xvbmUoKTtmb3IodmFyIF89bmV3IGsoMSkscD1uZXcgaygwKSxDPW5ldyBrKDApLEs9bmV3'@;
put 'IGsoMSksbmU9MDtTLmlzRXZlbigpJiZ4LmlzRXZlbigpOylTLml1c2hybigxKSx4Lml1c2hybigxKSwrK25lO2Zvcih2YXIgdWU9eC5jbG9uZSgpLGhlPVMuY2xvbmUoKTshUy5pc1plcm8oKTspe2Zvcih2YXIgeGU9MCxPZT0xOyEoUy53b3Jkc1swXSZPZSkmJnhlPDI2OysreGUsT2U8PD0x'@;
put 'KTtpZih4ZT4wKWZvcihTLml1c2hybih4ZSk7eGUtLSA+MDspKF8uaXNPZGQoKXx8cC5pc09kZCgpKSYmKF8uaWFkZCh1ZSkscC5pc3ViKGhlKSksXy5pdXNocm4oMSkscC5pdXNocm4oMSk7Zm9yKHZhciBIZT0wLEVlPTE7ISh4LndvcmRzWzBdJkVlKSYmSGU8MjY7KytIZSxFZTw8PTEpO2lm'@;
put 'KEhlPjApZm9yKHguaXVzaHJuKEhlKTtIZS0tID4wOykoQy5pc09kZCgpfHxLLmlzT2RkKCkpJiYoQy5pYWRkKHVlKSxLLmlzdWIoaGUpKSxDLml1c2hybigxKSxLLml1c2hybigxKTtTLmNtcCh4KT49MD8oUy5pc3ViKHgpLF8uaXN1YihDKSxwLmlzdWIoSykpOih4LmlzdWIoUyksQy5pc3Vi'@;
put 'KF8pLEsuaXN1YihwKSl9cmV0dXJue2E6QyxiOkssZ2NkOnguaXVzaGxuKG5lKX19LGsucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlKSxJKCFnLmlzWmVybygpKTt2YXIgUz10aGlzLHg9Zy5jbG9uZSgpO1M9MCE9PVMubmVnYXRpdmU/Uy51bW9kKGcpOlMu'@;
put 'Y2xvbmUoKTtmb3IodmFyIF8scD1uZXcgaygxKSxDPW5ldyBrKDApLEs9eC5jbG9uZSgpO1MuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgbmU9MCx1ZT0xOyEoUy53b3Jkc1swXSZ1ZSkmJm5lPDI2OysrbmUsdWU8PD0xKTtpZihuZT4wKWZvcihTLml1c2hybihuZSk7bmUtLSA+'@;
put 'MDspcC5pc09kZCgpJiZwLmlhZGQoSykscC5pdXNocm4oMSk7Zm9yKHZhciBoZT0wLHhlPTE7ISh4LndvcmRzWzBdJnhlKSYmaGU8MjY7KytoZSx4ZTw8PTEpO2lmKGhlPjApZm9yKHguaXVzaHJuKGhlKTtoZS0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChLKSxDLml1c2hybigxKTtTLmNtcCh4'@;
put 'KT49MD8oUy5pc3ViKHgpLHAuaXN1YihDKSk6KHguaXN1YihTKSxDLmlzdWIocCkpfXJldHVybihfPTA9PT1TLmNtcG4oMSk/cDpDKS5jbXBuKDApPDAmJl8uaWFkZChnKSxffSxrLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24oZyl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gZy5hYnMoKTtpZihn'@;
put 'LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBTPXRoaXMuY2xvbmUoKSx4PWcuY2xvbmUoKTtTLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgXz0wO1MuaXNFdmVuKCkmJnguaXNFdmVuKCk7XysrKVMuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtTLmlz'@;
put 'RXZlbigpOylTLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBwPVMuY21wKHgpO2lmKHA8MCl7dmFyIEM9UztTPXgseD1DfWVsc2UgaWYoMD09PXB8fDA9PT14LmNtcG4oMSkpYnJlYWs7Uy5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihfKX0say5wcm90b3R5cGUu'@;
put 'aW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5lZ2NkKGcpLmEudW1vZChnKX0say5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSxrLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LGsucHJv'@;
put 'dG90eXBlLmFuZGxuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLndvcmRzWzBdJmd9LGsucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKGcpe0koIm51bWJlciI9PXR5cGVvZiBnKTt2YXIgUz1nJTI2LHg9KGctUykvMjYsXz0xPDxTO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBh'@;
put 'bmQoeCsxKSx0aGlzLndvcmRzW3hdfD1fLHRoaXM7Zm9yKHZhciBwPV8sQz14OzAhPT1wJiZDPHRoaXMubGVuZ3RoO0MrKyl7dmFyIEs9MHx0aGlzLndvcmRzW0NdO3A9KEsrPXApPj4+MjYsdGhpcy53b3Jkc1tDXT1LJj02NzEwODg2M31yZXR1cm4gMCE9PXAmJih0aGlzLndvcmRzW0NdPXAs'@;
put 'dGhpcy5sZW5ndGgrKyksdGhpc30say5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LGsucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24oZyl7dmFyIFMseD1nPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiF4KXJldHVy'@;
put 'bi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZ4KXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKVM9MTtlbHNle3gmJihnPS1nKSxJKGc8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBfPTB8dGhpcy53b3Jkc1swXTtTPV89PT1nPzA6XzxnPy0xOjF9cmV0'@;
put 'dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30say5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGcpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Zy5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWcubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFM9dGhpcy51Y21w'@;
put 'KGcpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1TOlN9LGsucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oZyl7aWYodGhpcy5sZW5ndGg+Zy5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8Zy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBTPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7'@;
put 'eC0tKXt2YXIgXz0wfHRoaXMud29yZHNbeF0scD0wfGcud29yZHNbeF07aWYoXyE9PXApe188cD9TPS0xOl8+cCYmKFM9MSk7YnJlYWt9fXJldHVybiBTfSxrLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oZyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oZyl9LGsucHJvdG90eXBlLmd0PWZ1bmN0aW9u'@;
put 'KGcpe3JldHVybiAxPT09dGhpcy5jbXAoZyl9LGsucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuY21wbihnKT49MH0say5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcChnKT49MH0say5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'bi0xPT09dGhpcy5jbXBuKGcpfSxrLnByb3RvdHlwZS5sdD1mdW5jdGlvbihnKXtyZXR1cm4tMT09PXRoaXMuY21wKGcpfSxrLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmNtcG4oZyk8PTB9LGsucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5j'@;
put 'bXAoZyk8PTB9LGsucHJvdG90eXBlLmVxbj1mdW5jdGlvbihnKXtyZXR1cm4gMD09PXRoaXMuY21wbihnKX0say5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT10aGlzLmNtcChnKX0say5yZWQ9ZnVuY3Rpb24oZyl7cmV0dXJuIG5ldyBIKGcpfSxrLnByb3RvdHlwZS50b1Jl'@;
put 'ZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxJKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChnKX0say5wcm90'@;
put 'b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LGsucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1'@;
put 'cm4gdGhpcy5yZWQ9Zyx0aGlzfSxrLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihnKXtyZXR1cm4gSSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChnKX0say5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKGcpe3Jl'@;
put 'dHVybiBJKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuaWFkZCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxnKX0say5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihnKXty'@;
put 'ZXR1cm4gSSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihnKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLnNobCh0aGlzLGcpfSxrLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oZyl7cmV0dXJuIEkodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGcpLHRoaXMucmVkLm11bCh0aGlzLGcpfSxrLnByb3Rv'@;
put 'dHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGcpe3JldHVybiBJKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxnKSx0aGlzLnJlZC5pbXVsKHRoaXMsZyl9LGsucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVy'@;
put 'biBJKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxrLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0say5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJp'@;
put 'ZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LGsucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxr'@;
put 'LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0say5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKGcpe3JldHVy'@;
put 'biBJKHRoaXMucmVkJiYhZy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsZyl9O3ZhciBkZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGxlKGcsUyl7dGhpcy5uYW1l'@;
put 'PWcsdGhpcy5wPW5ldyBrKFMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBrKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBjZSgpe2xlLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gRygpe2xlLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24g'@;
put 'eSgpe2xlLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gTCgpe2xlLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gSChnKXtpZigic3RyaW5nIj09dHlwZW9mIGcpe3ZhciBTPWsuX3ByaW1lKGcpO3RoaXMubT1TLnAsdGhpcy5wcmltZT1TfWVsc2UgSShnLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPWcsdGhpcy5w'@;
put 'cmltZT1udWxsfWZ1bmN0aW9uIGooZyl7SC5jYWxsKHRoaXMsZyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgaygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlz'@;
put 'Lmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5t'@;
put 'aW52KX1sZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBnPW5ldyBrKG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksZ30sbGUucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oZyl7dmFyIFMseD1nO2Rve3RoaXMuc3BsaXQoeCx0aGlz'@;
put 'LnRtcCksUz0oeD0oeD10aGlzLmltdWxLKHgpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoUz50aGlzLm4pO3ZhciBfPVM8dGhpcy5uPy0xOngudWNtcCh0aGlzLnApO3JldHVybiAwPT09Xz8oeC53b3Jkc1swXT0wLHgubGVuZ3RoPTEpOl8+MD94LmlzdWIodGhpcy5wKTp2'@;
put 'b2lkIDAhPT14LnN0cmlwP3guc3RyaXAoKTp4Ll9zdHJpcCgpLHh9LGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihnLFMpe2cuaXVzaHJuKHRoaXMubiwwLFMpfSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oZyl7cmV0dXJuIGcuaW11bCh0aGlzLmspfSxFKGNlLGxlKSxjZS5wcm90'@;
put 'b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oZyxTKXtmb3IodmFyIHg9NDE5NDMwMyxfPU1hdGgubWluKGcubGVuZ3RoLDkpLHA9MDtwPF87cCsrKVMud29yZHNbcF09Zy53b3Jkc1twXTtpZihTLmxlbmd0aD1fLGcubGVuZ3RoPD05KXJldHVybiBnLndvcmRzWzBdPTAsdm9pZChnLmxlbmd0aD0xKTt2'@;
put 'YXIgQz1nLndvcmRzWzldO2ZvcihTLndvcmRzW1MubGVuZ3RoKytdPUMmeCxwPTEwO3A8Zy5sZW5ndGg7cCsrKXt2YXIgSz0wfGcud29yZHNbcF07Zy53b3Jkc1twLTEwXT0oSyZ4KTw8NHxDPj4+MjIsQz1LfWcud29yZHNbcC0xMF09Qz4+Pj0yMixnLmxlbmd0aC09MD09PUMmJmcubGVuZ3Ro'@;
put 'PjEwPzEwOjl9LGNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihnKXtnLndvcmRzW2cubGVuZ3RoXT0wLGcud29yZHNbZy5sZW5ndGgrMV09MCxnLmxlbmd0aCs9Mjtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4Kyspe3ZhciBfPTB8Zy53b3Jkc1t4XTtnLndvcmRzW3hdPTY3MTA4ODYz'@;
put 'JihTKz05NzcqXyksUz02NCpfKyhTLzY3MTA4ODY0fDApfXJldHVybiAwPT09Zy53b3Jkc1tnLmxlbmd0aC0xXSYmKGcubGVuZ3RoLS0sMD09PWcud29yZHNbZy5sZW5ndGgtMV0mJmcubGVuZ3RoLS0pLGd9LEUoRyxsZSksRSh5LGxlKSxFKEwsbGUpLEwucHJvdG90eXBlLmltdWxLPWZ1bmN0'@;
put 'aW9uKGcpe2Zvcih2YXIgUz0wLHg9MDt4PGcubGVuZ3RoO3grKyl7dmFyIF89MTkqKDB8Zy53b3Jkc1t4XSkrUyxwPTY3MTA4ODYzJl87Xz4+Pj0yNixnLndvcmRzW3hdPXAsUz1ffXJldHVybiAwIT09UyYmKGcud29yZHNbZy5sZW5ndGgrK109UyksZ30say5fcHJpbWU9ZnVuY3Rpb24oZyl7'@;
put 'aWYoZGVbZ10pcmV0dXJuIGRlW2ddO3ZhciBTO2lmKCJrMjU2Ij09PWcpUz1uZXcgY2U7ZWxzZSBpZigicDIyNCI9PT1nKVM9bmV3IEc7ZWxzZSBpZigicDE5MiI9PT1nKVM9bmV3IHk7ZWxzZXtpZigicDI1NTE5IiE9PWcpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrZyk7Uz1u'@;
put 'ZXcgTH1yZXR1cm4gZGVbZ109UyxTfSxILnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihnKXtJKDA9PT1nLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEkoZy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sSC5wcm90b3R5cGUuX3Zl'@;
put 'cmlmeTI9ZnVuY3Rpb24oZyxTKXtJKCEoZy5uZWdhdGl2ZXxTLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxJKGcucmVkJiZnLnJlZD09PVMucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LEgucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24o'@;
put 'Zyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGcpLl9mb3JjZVJlZCh0aGlzKTpnLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLm5lZz1mdW5jdGlvbihnKXtyZXR1cm4gZy5pc1plcm8oKT9nLmNsb25lKCk6dGhpcy5tLnN1YihnKS5fZm9y'@;
put 'Y2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmFkZD1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmFkZChTKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LEgucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oZyxT'@;
put 'KXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5pYWRkKFMpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxILnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oZyxTKXt0aGlzLl92ZXJpZnkyKGcsUyk7dmFyIHg9Zy5zdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4'@;
put 'LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sSC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihnLFMpe3RoaXMuX3ZlcmlmeTIoZyxTKTt2YXIgeD1nLmlzdWIoUyk7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxILnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oZyxT'@;
put 'KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShnKSx0aGlzLmltb2QoZy51c2hsbihTKSl9LEgucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLmltdWwoUykpfSxILnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtyZXR1cm4g'@;
put 'dGhpcy5fdmVyaWZ5MihnLFMpLHRoaXMuaW1vZChnLm11bChTKSl9LEgucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW11bChnLGcuY2xvbmUoKSl9LEgucHJvdG90eXBlLnNxcj1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5tdWwoZyxnKX0sSC5wcm90b3R5cGUuc3Fy'@;
put 'dD1mdW5jdGlvbihnKXtpZihnLmlzWmVybygpKXJldHVybiBnLmNsb25lKCk7dmFyIFM9dGhpcy5tLmFuZGxuKDMpO2lmKEkoUyUyPT0xKSwzPT09Uyl7dmFyIHg9dGhpcy5tLmFkZChuZXcgaygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhnLHgpfWZvcih2YXIgXz10aGlzLm0uc3Vi'@;
put 'bigxKSxwPTA7IV8uaXNaZXJvKCkmJjA9PT1fLmFuZGxuKDEpOylwKyssXy5pdXNocm4oMSk7SSghXy5pc1plcm8oKSk7dmFyIEM9bmV3IGsoMSkudG9SZWQodGhpcyksSz1DLnJlZE5lZygpLG5lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx1ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHVl'@;
put 'PW5ldyBrKDIqdWUqdWUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh1ZSxuZSkuY21wKEspOyl1ZS5yZWRJQWRkKEspO2Zvcih2YXIgaGU9dGhpcy5wb3codWUsXykseGU9dGhpcy5wb3coZyxfLmFkZG4oMSkuaXVzaHJuKDEpKSxPZT10aGlzLnBvdyhnLF8pLEhlPXA7MCE9PU9lLmNtcChD'@;
put 'KTspe2Zvcih2YXIgRWU9T2UsTGU9MDswIT09RWUuY21wKEMpO0xlKyspRWU9RWUucmVkU3FyKCk7SShMZTxIZSk7dmFyIE5lPXRoaXMucG93KGhlLG5ldyBrKDEpLml1c2hsbihIZS1MZS0xKSk7eGU9eGUucmVkTXVsKE5lKSxoZT1OZS5yZWRTcXIoKSxPZT1PZS5yZWRNdWwoaGUpLEhlPUxl'@;
put 'fXJldHVybiB4ZX0sSC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXt2YXIgUz1nLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Uy5uZWdhdGl2ZT8oUy5uZWdhdGl2ZT0wLHRoaXMuaW1vZChTKS5yZWROZWcoKSk6dGhpcy5pbW9kKFMpfSxILnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oZyxT'@;
put 'KXtpZihTLmlzWmVybygpKXJldHVybiBuZXcgaygxKS50b1JlZCh0aGlzKTtpZigwPT09Uy5jbXBuKDEpKXJldHVybiBnLmNsb25lKCk7dmFyIHg9bmV3IEFycmF5KDE2KTt4WzBdPW5ldyBrKDEpLnRvUmVkKHRoaXMpLHhbMV09Zztmb3IodmFyIF89MjtfPHgubGVuZ3RoO18rKyl4W19dPXRo'@;
put 'aXMubXVsKHhbXy0xXSxnKTt2YXIgcD14WzBdLEM9MCxLPTAsbmU9Uy5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW5lJiYobmU9MjYpLF89Uy5sZW5ndGgtMTtfPj0wO18tLSl7Zm9yKHZhciB1ZT1TLndvcmRzW19dLGhlPW5lLTE7aGU+PTA7aGUtLSl7dmFyIHhlPXVlPj5oZSYxO3AhPT14WzBd'@;
put 'JiYocD10aGlzLnNxcihwKSksMCE9PXhlfHwwIT09Qz8oQzw8PTEsQ3w9eGUsKDQ9PSsrS3x8MD09PV8mJjA9PT1oZSkmJihwPXRoaXMubXVsKHAseFtDXSksSz0wLEM9MCkpOks9MH1uZT0yNn1yZXR1cm4gcH0sSC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGcpe3ZhciBTPWcudW1v'@;
put 'ZCh0aGlzLm0pO3JldHVybiBTPT09Zz9TLmNsb25lKCk6U30sSC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIFM9Zy5jbG9uZSgpO3JldHVybiBTLnJlZD1udWxsLFN9LGsubW9udD1mdW5jdGlvbihnKXtyZXR1cm4gbmV3IGooZyl9LEUoaixIKSxqLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0VG89ZnVuY3Rpb24oZyl7cmV0dXJuIHRoaXMuaW1vZChnLnVzaGxuKHRoaXMuc2hpZnQpKX0sai5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oZyl7dmFyIFM9dGhpcy5pbW9kKGcubXVsKHRoaXMucmludikpO3JldHVybiBTLnJlZD1udWxsLFN9LGoucHJvdG90eXBlLmlt'@;
put 'dWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygpfHxTLmlzWmVybygpKXJldHVybiBnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSxnO3ZhciB4PWcuaW11bChTKSxfPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLHA9eC5p'@;
put 'c3ViKF8pLml1c2hybih0aGlzLnNoaWZ0KSxDPXA7cmV0dXJuIHAuY21wKHRoaXMubSk+PTA/Qz1wLmlzdWIodGhpcy5tKTpwLmNtcG4oMCk8MCYmKEM9cC5pYWRkKHRoaXMubSkpLEMuX2ZvcmNlUmVkKHRoaXMpfSxqLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oZyxTKXtpZihnLmlzWmVybygp'@;
put 'fHxTLmlzWmVybygpKXJldHVybiBuZXcgaygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9Zy5tdWwoUyksXz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxwPXguaXN1YihfKS5pdXNocm4odGhpcy5zaGlmdCksQz1wO3Jl'@;
put 'dHVybiBwLmNtcCh0aGlzLm0pPj0wP0M9cC5pc3ViKHRoaXMubSk6cC5jbXBuKDApPDAmJihDPXAuaWFkZCh0aGlzLm0pKSxDLl9mb3JjZVJlZCh0aGlzKX0sai5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihnKXtyZXR1cm4gdGhpcy5pbW9kKGcuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIp'@;
put 'KS5fZm9yY2VSZWQodGhpcyl9fSh3PUQubm1kKHcpLHRoaXMpfSw2MTM4Oih3LEEsRCk9Pnt2YXIgUD1EKDk4MCksVT1EKDkxOTkpLEk9RCg3ODU5KSxFPUQoMjE0NCksaz1EKDM2NjMpLEI9RCgzNDgyKSxOPUQoNDgxOCksVj1EKDk1MDkpLkJ1ZmZlcjt3LmV4cG9ydHM9ZnVuY3Rpb24oWixX'@;
put 'LHope3ZhciBxO3E9Wi5wYWRkaW5nP1oucGFkZGluZzp6PzE6NDt2YXIgUSx0ZT1QKFopLGFlPXRlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFcubGVuZ3RoPmFlfHxuZXcgRShXKS5jbXAodGUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7UT16P04o'@;
put 'bmV3IEUoVyksdGUpOmsoVyx0ZSk7dmFyIHNlPVYuYWxsb2MoYWUtUS5sZW5ndGgpO2lmKFE9Vi5jb25jYXQoW3NlLFFdLGFlKSw0PT09cSlyZXR1cm4gZnVuY3Rpb24oZGUsbGUpe3ZhciBjZT1kZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxHPUIoInNoYTEiKS51cGRhdGUoVi5hbGxvYygwKSku'@;
put 'ZGlnZXN0KCkseT1HLmxlbmd0aDtpZigwIT09bGVbMF0pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7dmFyIEw9bGUuc2xpY2UoMSx5KzEpLEg9bGUuc2xpY2UoeSsxKSxqPUkoTCxVKEgseSkpLGc9SShILFUoaixjZS15LTEpKTtpZihmdW5jdGlvbih4LF8pe3g9Vi5mcm9t'@;
put 'KHgpLF89Vi5mcm9tKF8pO3ZhciBwPTAsQz14Lmxlbmd0aDt4Lmxlbmd0aCE9PV8ubGVuZ3RoJiYocCsrLEM9TWF0aC5taW4oeC5sZW5ndGgsXy5sZW5ndGgpKTtmb3IodmFyIEs9LTE7KytLPEM7KXArPXhbS11eX1tLXTtyZXR1cm4gcH0oRyxnLnNsaWNlKDAseSkpKXRocm93IG5ldyBFcnJv'@;
put 'cigiZGVjcnlwdGlvbiBlcnJvciIpO2Zvcih2YXIgUz15OzA9PT1nW1NdOylTKys7aWYoMSE9PWdbUysrXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gZy5zbGljZShTKX0odGUsUSk7aWYoMT09PXEpcmV0dXJuIGZ1bmN0aW9uKGRlLGxlLGNlKXtmb3IodmFy'@;
put 'IEc9bGUuc2xpY2UoMCwyKSx5PTIsTD0wOzAhPT1sZVt5KytdOylpZih5Pj1sZS5sZW5ndGgpe0wrKzticmVha312YXIgSD1sZS5zbGljZSgyLHktMSk7aWYoKCIwMDAyIiE9PUcudG9TdHJpbmcoImhleCIpJiYhY2V8fCIwMDAxIiE9PUcudG9TdHJpbmcoImhleCIpJiZjZSkmJkwrKyxILmxl'@;
put 'bmd0aDw4JiZMKyssTCl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtyZXR1cm4gbGUuc2xpY2UoeSl9KDAsUSx6KTtpZigzPT09cSlyZXR1cm4gUTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OToodyxBLEQpPT57dmFyIFA9RCg5ODApLFU9RCgx'@;
put 'Nzk4KSxJPUQoMzQ4MiksRT1EKDkxOTkpLGs9RCg3ODU5KSxCPUQoMjE0NCksTj1EKDQ4MTgpLFY9RCgzNjYzKSxaPUQoOTUwOSkuQnVmZmVyO3cuZXhwb3J0cz1mdW5jdGlvbihXLHoscSl7dmFyIFE7UT1XLnBhZGRpbmc/Vy5wYWRkaW5nOnE/MTo0O3ZhciB0ZSxhZT1QKFcpO2lmKDQ9PT1R'@;
put 'KXRlPWZ1bmN0aW9uKHNlLGRlKXt2YXIgbGU9c2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksY2U9ZGUubGVuZ3RoLEc9SSgic2hhMSIpLnVwZGF0ZShaLmFsbG9jKDApKS5kaWdlc3QoKSx5PUcubGVuZ3RoLEw9Mip5O2lmKGNlPmxlLUwtMil0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxv'@;
put 'bmciKTt2YXIgSD1aLmFsbG9jKGxlLWNlLUwtMiksaj1sZS15LTEsZz1VKHkpLFM9ayhaLmNvbmNhdChbRyxILFouYWxsb2MoMSwxKSxkZV0saiksRShnLGopKSx4PWsoZyxFKFMseSkpO3JldHVybiBuZXcgQihaLmNvbmNhdChbWi5hbGxvYygxKSx4LFNdLGxlKSl9KGFlLHopO2Vsc2UgaWYo'@;
put 'MT09PVEpdGU9ZnVuY3Rpb24oc2UsZGUsbGUpe3ZhciBjZSxHPWRlLmxlbmd0aCx5PXNlLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKEc+eS0xMSl0aHJvdyBuZXcgRXJyb3IoIm1lc3NhZ2UgdG9vIGxvbmciKTtyZXR1cm4gY2U9bGU/Wi5hbGxvYyh5LUctMywyNTUpOmZ1bmN0aW9uKEwpe2Zv'@;
put 'cih2YXIgSCxqPVouYWxsb2NVbnNhZmUoTCksZz0wLFM9VSgyKkwpLHg9MDtnPEw7KXg9PT1TLmxlbmd0aCYmKFM9VSgyKkwpLHg9MCksKEg9U1t4KytdKSYmKGpbZysrXT1IKTtyZXR1cm4gan0oeS1HLTMpLG5ldyBCKFouY29uY2F0KFtaLmZyb20oWzAsbGU/MToyXSksY2UsWi5hbGxvYygx'@;
put 'KSxkZV0seSkpfShhZSx6LHEpO2Vsc2V7aWYoMyE9PVEpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigodGU9bmV3IEIoeikpLmNtcChhZS5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXMiKX1yZXR1cm4gcT9WKHRlLGFl'@;
put 'KTpOKHRlLGFlKX19LDQ4MTg6KHcsQSxEKT0+e3ZhciBQPUQoMjE0NCksVT1EKDk1MDkpLkJ1ZmZlcjt3LmV4cG9ydHM9ZnVuY3Rpb24oSSxFKXtyZXR1cm4gVS5mcm9tKEkudG9SZWQoUC5tb250KEUubW9kdWx1cykpLnJlZFBvdyhuZXcgUChFLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgp'@;
put 'LnRvQXJyYXkoKSl9fSw3ODU5Onc9Pnt3LmV4cG9ydHM9ZnVuY3Rpb24oQSxEKXtmb3IodmFyIFA9QS5sZW5ndGgsVT0tMTsrK1U8UDspQVtVXV49RFtVXTtyZXR1cm4gQX19LDM2ODk6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0IjtELnIoQSksRC5kKEEse2RlY29kZTooKT0+YWUsZGVmYXVsdDoo'@;
put 'KT0+Y2UsZW5jb2RlOigpPT5zZSx0b0FTQ0lJOigpPT5sZSx0b1VuaWNvZGU6KCk9PmRlLHVjczJkZWNvZGU6KCk9PnosdWNzMmVuY29kZTooKT0+cX0pO2NvbnN0IFA9MjE0NzQ4MzY0NyxVPTM2LEk9L154bi0tLyxFPS9bXlwwLVx4N0ZdLyxrPS9bXHgyRVx1MzAwMlx1RkYwRVx1RkY2MV0v'@;
put 'ZyxCPXtvdmVyZmxvdzoiT3ZlcmZsb3c6IGlucHV0IG5lZWRzIHdpZGVyIGludGVnZXJzIHRvIHByb2Nlc3MiLCJub3QtYmFzaWMiOiJJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpIiwiaW52YWxpZC1pbnB1dCI6IkludmFsaWQgaW5wdXQifSxOPU1hdGgu'@;
put 'Zmxvb3IsVj1TdHJpbmcuZnJvbUNoYXJDb2RlO2Z1bmN0aW9uIFooRyl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoQltHXSl9ZnVuY3Rpb24gVyhHLHkpe2NvbnN0IEw9Ry5zcGxpdCgiQCIpO2xldCBIPSIiO3JldHVybiBMLmxlbmd0aD4xJiYoSD1MWzBdKyJAIixHPUxbMV0pLEgrZnVuY3Rpb24o'@;
put 'ZyxTKXtjb25zdCB4PVtdO2xldCBfPWcubGVuZ3RoO2Zvcig7Xy0tOyl4W19dPVMoZ1tfXSk7cmV0dXJuIHh9KChHPUcucmVwbGFjZShrLCIuIikpLnNwbGl0KCIuIikseSkuam9pbigiLiIpfWZ1bmN0aW9uIHooRyl7Y29uc3QgeT1bXTtsZXQgTD0wO2NvbnN0IEg9Ry5sZW5ndGg7Zm9yKDtM'@;
put 'PEg7KXtjb25zdCBqPUcuY2hhckNvZGVBdChMKyspO2lmKGo+PTU1Mjk2JiZqPD01NjMxOSYmTDxIKXtjb25zdCBnPUcuY2hhckNvZGVBdChMKyspOzU2MzIwPT0oNjQ1MTImZyk/eS5wdXNoKCgoMTAyMyZqKTw8MTApKygxMDIzJmcpKzY1NTM2KTooeS5wdXNoKGopLEwtLSl9ZWxzZSB5LnB1'@;
put 'c2goail9cmV0dXJuIHl9Y29uc3QgcT1HPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5HKSxRPWZ1bmN0aW9uKEcseSl7cmV0dXJuIEcrMjIrNzUqKEc8MjYpLSgoMCE9eSk8PDUpfSx0ZT1mdW5jdGlvbihHLHksTCl7bGV0IEg9MDtmb3IoRz1MP04oRy83MDApOkc+PjEsRys9TihHL3kpO0c+'@;
put 'NDU1O0grPVUpRz1OKEcvMzUpO3JldHVybiBOKEgrMzYqRy8oRyszOCkpfSxhZT1mdW5jdGlvbihHKXtjb25zdCB5PVtdLEw9Ry5sZW5ndGg7bGV0IEg9MCxqPTEyOCxnPTcyLFM9Ry5sYXN0SW5kZXhPZigiLSIpO1M8MCYmKFM9MCk7Zm9yKGxldCBfPTA7XzxTOysrXylHLmNoYXJDb2RlQXQo'@;
put 'Xyk+PTEyOCYmWigibm90LWJhc2ljIikseS5wdXNoKEcuY2hhckNvZGVBdChfKSk7Zm9yKGxldCBfPVM+MD9TKzE6MDtfPEw7KXtjb25zdCBwPUg7Zm9yKGxldCBLPTEsbmU9VTs7bmUrPVUpe18+PUwmJlooImludmFsaWQtaW5wdXQiKTtjb25zdCB1ZT0oeD1HLmNoYXJDb2RlQXQoXysrKSk+'@;
put 'PTQ4JiZ4PDU4P3gtNDgrMjY6eD49NjUmJng8OTE/eC02NTp4Pj05NyYmeDwxMjM/eC05NzpVO3VlPj1VJiZaKCJpbnZhbGlkLWlucHV0IiksdWU+TigoUC1IKS9LKSYmWigib3ZlcmZsb3ciKSxIKz11ZSpLO2NvbnN0IGhlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZih1ZTxoZSlicmVh'@;
put 'aztjb25zdCB4ZT1VLWhlO0s+TihQL3hlKSYmWigib3ZlcmZsb3ciKSxLKj14ZX1jb25zdCBDPXkubGVuZ3RoKzE7Zz10ZShILXAsQywwPT1wKSxOKEgvQyk+UC1qJiZaKCJvdmVyZmxvdyIpLGorPU4oSC9DKSxIJT1DLHkuc3BsaWNlKEgrKywwLGopfXZhciB4O3JldHVybiBTdHJpbmcuZnJv'@;
put 'bUNvZGVQb2ludCguLi55KX0sc2U9ZnVuY3Rpb24oRyl7Y29uc3QgeT1bXSxMPShHPXooRykpLmxlbmd0aDtsZXQgSD0xMjgsaj0wLGc9NzI7Zm9yKGNvbnN0IF8gb2YgRylfPDEyOCYmeS5wdXNoKFYoXykpO2NvbnN0IFM9eS5sZW5ndGg7bGV0IHg9Uztmb3IoUyYmeS5wdXNoKCItIik7eDxM'@;
put 'Oyl7bGV0IF89UDtmb3IoY29uc3QgQyBvZiBHKUM+PUgmJkM8XyYmKF89Qyk7Y29uc3QgcD14KzE7Xy1IPk4oKFAtaikvcCkmJlooIm92ZXJmbG93Iiksais9KF8tSCkqcCxIPV87Zm9yKGNvbnN0IEMgb2YgRylpZihDPEgmJisraj5QJiZaKCJvdmVyZmxvdyIpLEM9PT1IKXtsZXQgSz1qO2Zv'@;
put 'cihsZXQgbmU9VTs7bmUrPVUpe2NvbnN0IHVlPW5lPD1nPzE6bmU+PWcrMjY/MjY6bmUtZztpZihLPHVlKWJyZWFrO2NvbnN0IGhlPUstdWUseGU9VS11ZTt5LnB1c2goVihRKHVlK2hlJXhlLDApKSksSz1OKGhlL3hlKX15LnB1c2goVihRKEssMCkpKSxnPXRlKGoscCx4PT09Uyksaj0wLCsr'@;
put 'eH0rK2osKytIfXJldHVybiB5LmpvaW4oIiIpfSxkZT1mdW5jdGlvbihHKXtyZXR1cm4gVyhHLGZ1bmN0aW9uKHkpe3JldHVybiBJLnRlc3QoeSk/YWUoeS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKTp5fSl9LGxlPWZ1bmN0aW9uKEcpe3JldHVybiBXKEcsZnVuY3Rpb24oeSl7cmV0dXJuIEUu'@;
put 'dGVzdCh5KT8ieG4tLSIrc2UoeSk6eX0pfSxjZT17dmVyc2lvbjoiMi4xLjAiLHVjczI6e2RlY29kZTp6LGVuY29kZTpxfSxkZWNvZGU6YWUsZW5jb2RlOnNlLHRvQVNDSUk6bGUsdG9Vbmljb2RlOmRlfX0sNzEyOToodyxBKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRD1PYmplY3QucHJvdG90eXBl'@;
put 'Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFAoSSl7dHJ5e3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoSS5yZXBsYWNlKC9cKy9nLCIgIikpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBVKEkpe3RyeXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEkpfWNhdGNoe3JldHVybiBudWxs'@;
put 'fX1BLnN0cmluZ2lmeT1mdW5jdGlvbihJLEUpe0U9RXx8IiI7dmFyIGssQixOPVtdO2ZvcihCIGluInN0cmluZyIhPXR5cGVvZiBFJiYoRT0iPyIpLEkpaWYoRC5jYWxsKEksQikpe2lmKChrPUlbQl0pfHxudWxsIT1rJiYhaXNOYU4oayl8fChrPSIiKSxCPVUoQiksaz1VKGspLG51bGw9PT1C'@;
put 'fHxudWxsPT09ayljb250aW51ZTtOLnB1c2goQisiPSIrayl9cmV0dXJuIE4ubGVuZ3RoP0UrTi5qb2luKCImIik6IiJ9LEEucGFyc2U9ZnVuY3Rpb24oSSl7Zm9yKHZhciBFLGs9LyhbXj0/IyZdKyk9PyhbXiZdKikvZyxCPXt9O0U9ay5leGVjKEkpOyl7dmFyIE49UChFWzFdKSxWPVAoRVsy'@;
put 'XSk7bnVsbD09PU58fG51bGw9PT1WfHxOIGluIEJ8fChCW05dPVYpfXJldHVybiBCfX0sMTc5ODoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT02NTUzNixFPUQoOTUwOSkuQnVmZmVyLGs9RC5nLmNyeXB0b3x8RC5nLm1zQ3J5cHRvO3cuZXhwb3J0cz1rJiZrLmdldFJh'@;
put 'bmRvbVZhbHVlcz9mdW5jdGlvbihCLE4pe2lmKEI+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlcyIpO3ZhciBWPUUuYWxsb2NVbnNhZmUoQik7aWYoQj4wKWlmKEI+VSlmb3IodmFyIFo9MDtaPEI7Wis9VSlrLmdldFJhbmRv'@;
put 'bVZhbHVlcyhWLnNsaWNlKFosWitVKSk7ZWxzZSBrLmdldFJhbmRvbVZhbHVlcyhWKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTj9QLm5leHRUaWNrKGZ1bmN0aW9uKCl7TihudWxsLFYpfSk6Vn06ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlNlY3VyZSByYW5kb20gbnVtYmVyIGdl'@;
put 'bmVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIuXG5Vc2UgQ2hyb21lLCBGaXJlZm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9fSw3OTYzOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KTtmdW5jdGlvbiBVKCl7dGhyb3cgbmV3IEVycm9yKCJz'@;
put 'ZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIEk9RCg5NTA5KSxFPUQoMTc5OCksaz1JLkJ1ZmZlcixCPUkua01heExlbmd0aCxOPUQuZy5j'@;
put 'cnlwdG98fEQuZy5tc0NyeXB0byxWPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24gWihxLFEpe2lmKCJudW1iZXIiIT10eXBlb2YgcXx8cSE9cSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKHE+Vnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9m'@;
put 'ZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYocT5CfHxxPlEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBXKHEsUSx0ZSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxIT1xKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIG51'@;
put 'bWJlciIpO2lmKHE+Vnx8cTwwKXRocm93IG5ldyBUeXBlRXJyb3IoInNpemUgbXVzdCBiZSBhIHVpbnQzMiIpO2lmKHErUT50ZXx8cT5CKXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24geihxLFEsdGUsYWUpe2lmKFAuYnJvd3Nlcil7dmFyIGRlPW5l'@;
put 'dyBVaW50OEFycmF5KHEuYnVmZmVyLFEsdGUpO3JldHVybiBOLmdldFJhbmRvbVZhbHVlcyhkZSksYWU/dm9pZCBQLm5leHRUaWNrKGZ1bmN0aW9uKCl7YWUobnVsbCxxKX0pOnF9aWYoIWFlKXJldHVybiBFKHRlKS5jb3B5KHEsUSkscTtFKHRlLGZ1bmN0aW9uKGxlLGNlKXtpZihsZSlyZXR1'@;
put 'cm4gYWUobGUpO2NlLmNvcHkocSxRKSxhZShudWxsLHEpfSl9TiYmTi5nZXRSYW5kb21WYWx1ZXN8fCFQLmJyb3dzZXI/KEEucmFuZG9tRmlsbD1mdW5jdGlvbihxLFEsdGUsYWUpe2lmKCEoay5pc0J1ZmZlcihxKXx8cSBpbnN0YW5jZW9mIEQuZy5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUSlhZT1RLFE9MCx0ZT1xLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0ZSlhZT10ZSx0ZT1xLmxlbmd0aC1RO2Vsc2UgaWYoImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIGFlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIFooUSxxLmxlbmd0aCksVyh0ZSxRLHEubGVuZ3RoKSx6KHEsUSx0ZSxhZSl9LEEucmFuZG9tRmlsbFN5bmM9ZnVuY3Rpb24ocSxRLHRlKXtpZih2b2lk'@;
put 'IDA9PT1RJiYoUT0wKSwhKGsuaXNCdWZmZXIocSl8fHEgaW5zdGFuY2VvZiBELmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7cmV0dXJuIFooUSxxLmxlbmd0aCksdm9pZCAwPT09dGUmJih0'@;
put 'ZT1xLmxlbmd0aC1RKSxXKHRlLFEscS5sZW5ndGgpLHoocSxRLHRlKX0pOihBLnJhbmRvbUZpbGw9VSxBLnJhbmRvbUZpbGxTeW5jPVUpfSw0MjgxOnc9PnsidXNlIHN0cmljdCI7dmFyIEE9e307ZnVuY3Rpb24gRChVLEksRSl7RXx8KEU9RXJyb3IpO3ZhciBrPWZ1bmN0aW9uKEIpe3ZhciBO'@;
put 'LFY7ZnVuY3Rpb24gWihXLHoscSl7cmV0dXJuIEIuY2FsbCh0aGlzLCJzdHJpbmciPT10eXBlb2YgST9JOkkoVyx6LHEpKXx8dGhpc31yZXR1cm4gVj1CLChOPVopLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFYucHJvdG90eXBlKSxOLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1OLE4uX19wcm90'@;
put 'b19fPVYsWn0oRSk7ay5wcm90b3R5cGUubmFtZT1FLm5hbWUsay5wcm90b3R5cGUuY29kZT1VLEFbVV09a31mdW5jdGlvbiBQKFUsSSl7aWYoQXJyYXkuaXNBcnJheShVKSl7dmFyIEU9VS5sZW5ndGg7cmV0dXJuIFU9VS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIFN0cmluZyhrKX0pLEU+Mj8i'@;
put 'b25lIG9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoVS5zbGljZSgwLEUtMSkuam9pbigiLCAiKSwiLCBvciAiKStVW0UtMV06Mj09PUU/Im9uZSBvZiAiLmNvbmNhdChJLCIgIikuY29uY2F0KFVbMF0sIiBvciAiKS5jb25jYXQoVVsxXSk6Im9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoVVsw'@;
put 'XSl9cmV0dXJuIm9mICIuY29uY2F0KEksIiAiKS5jb25jYXQoU3RyaW5nKFUpKX1EKCJFUlJfSU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKFUsSSl7cmV0dXJuJ1RoZSB2YWx1ZSAiJytJKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytVKyciJ30sVHlwZUVycm9yKSxEKCJFUlJfSU5W'@;
put 'QUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oVSxJLEUpe3ZhciBrLFYsVyxxO2lmKCJzdHJpbmciPT10eXBlb2YgSSYmIm5vdCAiPT09SS5zdWJzdHIoMCw0KT8oaz0ibXVzdCBub3QgYmUiLEk9SS5yZXBsYWNlKC9ebm90IC8sIiIpKTprPSJtdXN0IGJlIixXPVUsKHZvaWQgMD09PXF8fHE+Vy5s'@;
put 'ZW5ndGgpJiYocT1XLmxlbmd0aCksIiBhcmd1bWVudCI9PT1XLnN1YnN0cmluZyhxLTkscSkpVj0iVGhlICIuY29uY2F0KFUsIiAiKS5jb25jYXQoaywiICIpLmNvbmNhdChQKEksInR5cGUiKSk7ZWxzZXt2YXIgWj1mdW5jdGlvbihXLHoscSl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBxJiYo'@;
put 'cT0wKSwhKHErMT5XLmxlbmd0aCkmJi0xIT09Vy5pbmRleE9mKCIuIixxKX0oVSk/InByb3BlcnR5IjoiYXJndW1lbnQiO1Y9J1RoZSAiJy5jb25jYXQoVSwnIiAnKS5jb25jYXQoWiwiICIpLmNvbmNhdChrLCIgIikuY29uY2F0KFAoSSwidHlwZSIpKX1yZXR1cm4gVisiLiBSZWNlaXZlZCB0'@;
put 'eXBlICIuY29uY2F0KHR5cGVvZiBFKX0sVHlwZUVycm9yKSxEKCJFUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GIiwic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSxEKCJFUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCIsZnVuY3Rpb24oVSl7cmV0dXJuIlRoZSAiK1UrIiBtZXRob2QgaXMgbm90'@;
put 'IGltcGxlbWVudGVkIn0pLEQoIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiwiUHJlbWF0dXJlIGNsb3NlIiksRCgiRVJSX1NUUkVBTV9ERVNUUk9ZRUQiLGZ1bmN0aW9uKFUpe3JldHVybiJDYW5ub3QgY2FsbCAiK1UrIiBhZnRlciBhIHN0cmVhbSB3YXMgZGVzdHJveWVkIn0pLEQoIkVS'@;
put 'Ul9NVUxUSVBMRV9DQUxMQkFDSyIsIkNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpLEQoIkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUiLCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIiksRCgiRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQiLCJ3cml0ZSBhZnRlciBlbmQiKSxEKCJF'@;
put 'UlJfU1RSRUFNX05VTExfVkFMVUVTIiwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW0iLFR5cGVFcnJvciksRCgiRVJSX1VOS05PV05fRU5DT0RJTkciLGZ1bmN0aW9uKFUpe3JldHVybiJVbmtub3duIGVuY29kaW5nOiAiK1V9LFR5cGVFcnJvciksRCgiRVJSX1NUUkVBTV9V'@;
put 'TlNISUZUX0FGVEVSX0VORF9FVkVOVCIsInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50Iiksdy5leHBvcnRzLnE9QX0sNjc1MzoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oeil7dmFyIHE9W107Zm9yKHZhciBRIGlu'@;
put 'IHopcS5wdXNoKFEpO3JldHVybiBxfTt3LmV4cG9ydHM9Vjt2YXIgST1EKDk0ODEpLEU9RCg0MjI5KTtEKDU3MTcpKFYsSSk7Zm9yKHZhciBrPVUoRS5wcm90b3R5cGUpLEI9MDtCPGsubGVuZ3RoO0IrKyl7dmFyIE49a1tCXTtWLnByb3RvdHlwZVtOXXx8KFYucHJvdG90eXBlW05dPUUucHJv'@;
put 'dG90eXBlW05dKX1mdW5jdGlvbiBWKHope2lmKCEodGhpcyBpbnN0YW5jZW9mIFYpKXJldHVybiBuZXcgVih6KTtJLmNhbGwodGhpcyx6KSxFLmNhbGwodGhpcyx6KSx0aGlzLmFsbG93SGFsZk9wZW49ITAseiYmKCExPT09ei5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09ei53'@;
put 'cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09ei5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixaKSkpfWZ1bmN0aW9uIFooKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxQLm5leHRUaWNrKFcsdGhpcyl9ZnVuY3Rpb24gVyh6'@;
put 'KXt6LmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShW'@;
put 'LnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWLnByb3RvdHlwZSwid3JpdGFibGVM'@;
put 'ZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9'@;
put 'PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKHope3ZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQg'@;
put 'MCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD16LHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPXopfX0pfSwyNzI1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPVU7dmFyIFA9RCg0NjA1KTtmdW5jdGlvbiBVKEkpe2lm'@;
put 'KCEodGhpcyBpbnN0YW5jZW9mIFUpKXJldHVybiBuZXcgVShJKTtQLmNhbGwodGhpcyxJKX1EKDU3MTcpKFUsUCksVS5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihJLEUsayl7ayhudWxsLEkpfX0sOTQ4MToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQLFU9RCg0MTU1KTt3LmV4'@;
put 'cG9ydHM9SCxILlJlYWRhYmxlU3RhdGU9TCxEKDcxODcpO3ZhciBOLEk9ZnVuY3Rpb24oTmUsS2Upe3JldHVybiBOZS5saXN0ZW5lcnMoS2UpLmxlbmd0aH0sRT1EKDI1MDMpLGs9RCg4NzY0KS5CdWZmZXIsQj0odm9pZCAwIT09RC5nP0QuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlw'@;
put 'ZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxWPUQoNDYxNik7Tj1WJiZWLmRlYnVnbG9nP1YuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgWixXLHoscT1EKDczMjcpLFE9RCgxMTk1KSx0ZT1EKDI0NTcpLmdldEhpZ2hXYXRlck1hcmss'@;
put 'YWU9RCg0MjgxKS5xLHNlPWFlLkVSUl9JTlZBTElEX0FSR19UWVBFLGRlPWFlLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YsbGU9YWUuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsY2U9YWUuRVJSX1NUUkVBTV9VTlNISUZUX0FGVEVSX0VORF9FVkVOVDtEKDU3MTcpKEgsRSk7dmFyIEc9'@;
put 'US5lcnJvck9yRGVzdHJveSx5PVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIEwoTmUsS2UsVWUpe1A9UHx8RCg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBVZSYmKFVlPUtlIGluc3RhbmNlb2YgUCksdGhpcy5vYmplY3RNb2RlPSEhKE5lPU5l'@;
put 'fHx7fSkub2JqZWN0TW9kZSxVZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTmUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9dGUodGhpcyxOZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIixVZSksdGhpcy5idWZmZXI9bmV3IHEsdGhpcy5sZW5n'@;
put 'dGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0'@;
put 'aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMucGF1c2VkPSEwLHRoaXMuZW1pdENsb3NlPSExIT09TmUuZW1pdENsb3NlLHRoaXMuYXV0b0Rlc3Ryb3k9ISFOZS5hdXRvRGVzdHJveSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlZmF1bHRFbmNv'@;
put 'ZGluZz1OZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCxOZS5lbmNvZGluZyYmKFp8fChaPUQoMjU1MykuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5l'@;
put 'dyBaKE5lLmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPU5lLmVuY29kaW5nKX1mdW5jdGlvbiBIKE5lKXtpZihQPVB8fEQoNjc1MyksISh0aGlzIGluc3RhbmNlb2YgSCkpcmV0dXJuIG5ldyBIKE5lKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyBMKE5lLHRoaXMsdGhpcyBpbnN0YW5jZW9mIFAp'@;
put 'LHRoaXMucmVhZGFibGU9ITAsTmUmJigiZnVuY3Rpb24iPT10eXBlb2YgTmUucmVhZCYmKHRoaXMuX3JlYWQ9TmUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIE5lLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PU5lLmRlc3Ryb3kpKSxFLmNhbGwodGhpcyl9ZnVuY3Rpb24gaihOZSxLZSxVZSxY'@;
put 'ZSxhdCl7TigicmVhZGFibGVBZGRDaHVuayIsS2UpO3ZhciBGZSxEZSxSZSxldCxudCxDZT1OZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09S2UpQ2UucmVhZGluZz0hMSxmdW5jdGlvbihEZSxSZSl7aWYoTigib25Fb2ZDaHVuayIpLCFSZS5lbmRlZCl7aWYoUmUuZGVjb2Rlcil7dmFyIGV0'@;
put 'PVJlLmRlY29kZXIuZW5kKCk7ZXQmJmV0Lmxlbmd0aCYmKFJlLmJ1ZmZlci5wdXNoKGV0KSxSZS5sZW5ndGgrPVJlLm9iamVjdE1vZGU/MTpldC5sZW5ndGgpfVJlLmVuZGVkPSEwLFJlLnN5bmM/XyhEZSk6KFJlLm5lZWRSZWFkYWJsZT0hMSxSZS5lbWl0dGVkUmVhZGFibGV8fChSZS5lbWl0'@;
put 'dGVkUmVhZGFibGU9ITAscChEZSkpKX19KE5lLENlKTtlbHNlIGlmKGF0fHwoRGU9Q2Usay5pc0J1ZmZlcihudD1SZT1LZSl8fG50IGluc3RhbmNlb2YgQnx8InN0cmluZyI9PXR5cGVvZiBSZXx8dm9pZCAwPT09UmV8fERlLm9iamVjdE1vZGV8fChldD1uZXcgc2UoImNodW5rIixbInN0cmlu'@;
put 'ZyIsIkJ1ZmZlciIsIlVpbnQ4QXJyYXkiXSxSZSkpLEZlPWV0KSxGZSlHKE5lLEZlKTtlbHNlIGlmKENlLm9iamVjdE1vZGV8fEtlJiZLZS5sZW5ndGg+MClpZigic3RyaW5nIj09dHlwZW9mIEtlfHxDZS5vYmplY3RNb2RlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoS2UpPT09ay5wcm90b3R5'@;
put 'cGV8fChLZT1mdW5jdGlvbihEZSl7cmV0dXJuIGsuZnJvbShEZSl9KEtlKSksWGUpQ2UuZW5kRW1pdHRlZD9HKE5lLG5ldyBjZSk6ZyhOZSxDZSxLZSwhMCk7ZWxzZSBpZihDZS5lbmRlZClHKE5lLG5ldyBkZSk7ZWxzZXtpZihDZS5kZXN0cm95ZWQpcmV0dXJuITE7Q2UucmVhZGluZz0hMSxD'@;
put 'ZS5kZWNvZGVyJiYhVWU/KEtlPUNlLmRlY29kZXIud3JpdGUoS2UpLENlLm9iamVjdE1vZGV8fDAhPT1LZS5sZW5ndGg/ZyhOZSxDZSxLZSwhMSk6QyhOZSxDZSkpOmcoTmUsQ2UsS2UsITEpfWVsc2UgWGV8fChDZS5yZWFkaW5nPSExLEMoTmUsQ2UpKTtyZXR1cm4hQ2UuZW5kZWQmJihDZS5s'@;
put 'ZW5ndGg8Q2UuaGlnaFdhdGVyTWFya3x8MD09PUNlLmxlbmd0aCl9ZnVuY3Rpb24gZyhOZSxLZSxVZSxYZSl7S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCYmIUtlLnN5bmM/KEtlLmF3YWl0RHJhaW49MCxOZS5lbWl0KCJkYXRhIixVZSkpOihLZS5sZW5ndGgrPUtlLm9iamVjdE1vZGU/MTpV'@;
put 'ZS5sZW5ndGgsWGU/S2UuYnVmZmVyLnVuc2hpZnQoVWUpOktlLmJ1ZmZlci5wdXNoKFVlKSxLZS5uZWVkUmVhZGFibGUmJl8oTmUpKSxDKE5lLEtlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oTmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1OZSl9fSksSC5wcm90b3R5cGUuZGVzdHJveT1RLmRl'@;
put 'c3Ryb3ksSC5wcm90b3R5cGUuX3VuZGVzdHJveT1RLnVuZGVzdHJveSxILnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihOZSxLZSl7S2UoTmUpfSxILnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKE5lLEtlKXt2YXIgVWUsWGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gWGUub2JqZWN0'@;
put 'TW9kZT9VZT0hMDoic3RyaW5nIj09dHlwZW9mIE5lJiYoKEtlPUtlfHxYZS5kZWZhdWx0RW5jb2RpbmcpIT09WGUuZW5jb2RpbmcmJihOZT1rLmZyb20oTmUsS2UpLEtlPSIiKSxVZT0hMCksaih0aGlzLE5lLEtlLCExLFVlKX0sSC5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihOZSl7cmV0'@;
put 'dXJuIGoodGhpcyxOZSxudWxsLCEwLCExKX0sSC5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sSC5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oTmUpe1p8fChaPUQoMjU1MykuU3RyaW5nRGVjb2Rlcik7'@;
put 'dmFyIEtlPW5ldyBaKE5lKTt0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9S2UsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmNvZGluZz10aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXIuZW5jb2Rpbmc7Zm9yKHZhciBVZT10aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5oZWFkLFhlPSIiO251'@;
put 'bGwhPT1VZTspWGUrPUtlLndyaXRlKFVlLmRhdGEpLFVlPVVlLm5leHQ7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmNsZWFyKCksIiIhPT1YZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIucHVzaChYZSksdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGg9WGUubGVuZ3Ro'@;
put 'LHRoaXN9O3ZhciBTPTEwNzM3NDE4MjQ7ZnVuY3Rpb24geChOZSxLZSl7cmV0dXJuIE5lPD0wfHwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD8wOktlLm9iamVjdE1vZGU/MTpOZSE9TmU/S2UuZmxvd2luZyYmS2UubGVuZ3RoP0tlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOktlLmxlbmd0aDoo'@;
put 'TmU+S2UuaGlnaFdhdGVyTWFyayYmKEtlLmhpZ2hXYXRlck1hcms9KChVZT1OZSk+PVM/VWU9UzooVWUtLSxVZXw9VWU+Pj4xLFVlfD1VZT4+PjIsVWV8PVVlPj4+NCxVZXw9VWU+Pj44LFVlfD1VZT4+PjE2LFVlKyspLFVlKSksTmU8PUtlLmxlbmd0aD9OZTpLZS5lbmRlZD9LZS5sZW5ndGg6'@;
put 'KEtlLm5lZWRSZWFkYWJsZT0hMCwwKSk7dmFyIFVlfWZ1bmN0aW9uIF8oTmUpe3ZhciBLZT1OZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGUiLEtlLm5lZWRSZWFkYWJsZSxLZS5lbWl0dGVkUmVhZGFibGUpLEtlLm5lZWRSZWFkYWJsZT0hMSxLZS5lbWl0dGVkUmVhZGFibGV8fChO'@;
put 'KCJlbWl0UmVhZGFibGUiLEtlLmZsb3dpbmcpLEtlLmVtaXR0ZWRSZWFkYWJsZT0hMCxVLm5leHRUaWNrKHAsTmUpKX1mdW5jdGlvbiBwKE5lKXt2YXIgS2U9TmUuX3JlYWRhYmxlU3RhdGU7TigiZW1pdFJlYWRhYmxlXyIsS2UuZGVzdHJveWVkLEtlLmxlbmd0aCxLZS5lbmRlZCksS2UuZGVz'@;
put 'dHJveWVkfHwhS2UubGVuZ3RoJiYhS2UuZW5kZWR8fChOZS5lbWl0KCJyZWFkYWJsZSIpLEtlLmVtaXR0ZWRSZWFkYWJsZT0hMSksS2UubmVlZFJlYWRhYmxlPSFLZS5mbG93aW5nJiYhS2UuZW5kZWQmJktlLmxlbmd0aDw9S2UuaGlnaFdhdGVyTWFyayx4ZShOZSl9ZnVuY3Rpb24gQyhOZSxL'@;
put 'ZSl7S2UucmVhZGluZ01vcmV8fChLZS5yZWFkaW5nTW9yZT0hMCxVLm5leHRUaWNrKEssTmUsS2UpKX1mdW5jdGlvbiBLKE5lLEtlKXtmb3IoOyFLZS5yZWFkaW5nJiYhS2UuZW5kZWQmJihLZS5sZW5ndGg8S2UuaGlnaFdhdGVyTWFya3x8S2UuZmxvd2luZyYmMD09PUtlLmxlbmd0aCk7KXt2'@;
put 'YXIgVWU9S2UubGVuZ3RoO2lmKE4oIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksTmUucmVhZCgwKSxVZT09PUtlLmxlbmd0aClicmVha31LZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBuZShOZSl7dmFyIEtlPU5lLl9yZWFkYWJsZVN0YXRlO0tlLnJlYWRhYmxlTGlzdGVuaW5nPU5lLmxpc3Rl'@;
put 'bmVyQ291bnQoInJlYWRhYmxlIik+MCxLZS5yZXN1bWVTY2hlZHVsZWQmJiFLZS5wYXVzZWQ/S2UuZmxvd2luZz0hMDpOZS5saXN0ZW5lckNvdW50KCJkYXRhIik+MCYmTmUucmVzdW1lKCl9ZnVuY3Rpb24gdWUoTmUpe04oInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLE5lLnJlYWQoMCl9'@;
put 'ZnVuY3Rpb24gaGUoTmUsS2Upe04oInJlc3VtZSIsS2UucmVhZGluZyksS2UucmVhZGluZ3x8TmUucmVhZCgwKSxLZS5yZXN1bWVTY2hlZHVsZWQ9ITEsTmUuZW1pdCgicmVzdW1lIikseGUoTmUpLEtlLmZsb3dpbmcmJiFLZS5yZWFkaW5nJiZOZS5yZWFkKDApfWZ1bmN0aW9uIHhlKE5lKXt2'@;
put 'YXIgS2U9TmUuX3JlYWRhYmxlU3RhdGU7Zm9yKE4oImZsb3ciLEtlLmZsb3dpbmcpO0tlLmZsb3dpbmcmJm51bGwhPT1OZS5yZWFkKCk7KTt9ZnVuY3Rpb24gT2UoTmUsS2Upe3JldHVybiAwPT09S2UubGVuZ3RoP251bGw6KEtlLm9iamVjdE1vZGU/VWU9S2UuYnVmZmVyLnNoaWZ0KCk6IU5l'@;
put 'fHxOZT49S2UubGVuZ3RoPyhVZT1LZS5kZWNvZGVyP0tlLmJ1ZmZlci5qb2luKCIiKToxPT09S2UuYnVmZmVyLmxlbmd0aD9LZS5idWZmZXIuZmlyc3QoKTpLZS5idWZmZXIuY29uY2F0KEtlLmxlbmd0aCksS2UuYnVmZmVyLmNsZWFyKCkpOlVlPUtlLmJ1ZmZlci5jb25zdW1lKE5lLEtlLmRl'@;
put 'Y29kZXIpLFVlKTt2YXIgVWV9ZnVuY3Rpb24gSGUoTmUpe3ZhciBLZT1OZS5fcmVhZGFibGVTdGF0ZTtOKCJlbmRSZWFkYWJsZSIsS2UuZW5kRW1pdHRlZCksS2UuZW5kRW1pdHRlZHx8KEtlLmVuZGVkPSEwLFUubmV4dFRpY2soRWUsS2UsTmUpKX1mdW5jdGlvbiBFZShOZSxLZSl7aWYoTigi'@;
put 'ZW5kUmVhZGFibGVOVCIsTmUuZW5kRW1pdHRlZCxOZS5sZW5ndGgpLCFOZS5lbmRFbWl0dGVkJiYwPT09TmUubGVuZ3RoJiYoTmUuZW5kRW1pdHRlZD0hMCxLZS5yZWFkYWJsZT0hMSxLZS5lbWl0KCJlbmQiKSxOZS5hdXRvRGVzdHJveSkpe3ZhciBVZT1LZS5fd3JpdGFibGVTdGF0ZTsoIVVl'@;
put 'fHxVZS5hdXRvRGVzdHJveSYmVWUuZmluaXNoZWQpJiZLZS5kZXN0cm95KCl9fWZ1bmN0aW9uIExlKE5lLEtlKXtmb3IodmFyIFVlPTAsWGU9TmUubGVuZ3RoO1VlPFhlO1VlKyspaWYoTmVbVWVdPT09S2UpcmV0dXJuIFVlO3JldHVybi0xfUgucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24oTmUp'@;
put 'e04oInJlYWQiLE5lKSxOZT1wYXJzZUludChOZSwxMCk7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsVWU9TmU7aWYoMCE9PU5lJiYoS2UuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09TmUmJktlLm5lZWRSZWFkYWJsZSYmKCgwIT09S2UuaGlnaFdhdGVyTWFyaz9LZS5sZW5ndGg+PUtlLmhp'@;
put 'Z2hXYXRlck1hcms6S2UubGVuZ3RoPjApfHxLZS5lbmRlZCkpcmV0dXJuIE4oInJlYWQ6IGVtaXRSZWFkYWJsZSIsS2UubGVuZ3RoLEtlLmVuZGVkKSwwPT09S2UubGVuZ3RoJiZLZS5lbmRlZD9IZSh0aGlzKTpfKHRoaXMpLG51bGw7aWYoMD09PShOZT14KE5lLEtlKSkmJktlLmVuZGVkKXJl'@;
put 'dHVybiAwPT09S2UubGVuZ3RoJiZIZSh0aGlzKSxudWxsO3ZhciBYZSxhdD1LZS5uZWVkUmVhZGFibGU7cmV0dXJuIE4oIm5lZWQgcmVhZGFibGUiLGF0KSwoMD09PUtlLmxlbmd0aHx8S2UubGVuZ3RoLU5lPEtlLmhpZ2hXYXRlck1hcmspJiZOKCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFy'@;
put 'ayIsYXQ9ITApLEtlLmVuZGVkfHxLZS5yZWFkaW5nP04oInJlYWRpbmcgb3IgZW5kZWQiLGF0PSExKTphdCYmKE4oImRvIHJlYWQiKSxLZS5yZWFkaW5nPSEwLEtlLnN5bmM9ITAsMD09PUtlLmxlbmd0aCYmKEtlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChLZS5oaWdoV2F0ZXJNYXJr'@;
put 'KSxLZS5zeW5jPSExLEtlLnJlYWRpbmd8fChOZT14KFVlLEtlKSkpLG51bGw9PT0oWGU9TmU+MD9PZShOZSxLZSk6bnVsbCk/KEtlLm5lZWRSZWFkYWJsZT1LZS5sZW5ndGg8PUtlLmhpZ2hXYXRlck1hcmssTmU9MCk6KEtlLmxlbmd0aC09TmUsS2UuYXdhaXREcmFpbj0wKSwwPT09S2UubGVu'@;
put 'Z3RoJiYoS2UuZW5kZWR8fChLZS5uZWVkUmVhZGFibGU9ITApLFVlIT09TmUmJktlLmVuZGVkJiZIZSh0aGlzKSksbnVsbCE9PVhlJiZ0aGlzLmVtaXQoImRhdGEiLFhlKSxYZX0sSC5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oTmUpe0codGhpcyxuZXcgbGUoIl9yZWFkKCkiKSl9LEgucHJv'@;
put 'dG90eXBlLnBpcGU9ZnVuY3Rpb24oTmUsS2Upe3ZhciBVZT10aGlzLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKFhlLnBpcGVzQ291bnQpe2Nhc2UgMDpYZS5waXBlcz1OZTticmVhaztjYXNlIDE6WGUucGlwZXM9W1hlLnBpcGVzLE5lXTticmVhaztkZWZhdWx0OlhlLnBpcGVzLnB1'@;
put 'c2goTmUpfVhlLnBpcGVzQ291bnQrPTEsTigicGlwZSBjb3VudD0lZCBvcHRzPSVqIixYZS5waXBlc0NvdW50LEtlKTt2YXIgYXQ9S2UmJiExPT09S2UuZW5kfHxOZT09PVUuc3Rkb3V0fHxOZT09PVUuc3RkZXJyP1RlOkNlO2Z1bmN0aW9uIENlKCl7Tigib25lbmQiKSxOZS5lbmQoKX1YZS5l'@;
put 'bmRFbWl0dGVkP1UubmV4dFRpY2soYXQpOlVlLm9uY2UoImVuZCIsYXQpLE5lLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIEZlKEFlLEJlKXtOKCJvbnVucGlwZSIpLEFlPT09VWUmJkJlJiYhMT09PUJlLmhhc1VucGlwZWQmJihCZS5oYXNVbnBpcGVkPSEwLE4oImNsZWFudXAiKSxOZS5yZW1vdmVM'@;
put 'aXN0ZW5lcigiY2xvc2UiLEdlKSxOZS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixkdCksTmUucmVtb3ZlTGlzdGVuZXIoImRyYWluIixEZSksTmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixudCksTmUucmVtb3ZlTGlzdGVuZXIoInVucGlwZSIsRmUpLFVlLnJlbW92ZUxpc3RlbmVyKCJlbmQi'@;
put 'LENlKSxVZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixUZSksVWUucmVtb3ZlTGlzdGVuZXIoImRhdGEiLGV0KSxSZT0hMCwhWGUuYXdhaXREcmFpbnx8TmUuX3dyaXRhYmxlU3RhdGUmJiFOZS5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fERlKCkpfSk7dmFyIERlPWZ1bmN0aW9uKEFlKXtyZXR1'@;
put 'cm4gZnVuY3Rpb24oKXt2YXIgQmU9QWUuX3JlYWRhYmxlU3RhdGU7TigicGlwZU9uRHJhaW4iLEJlLmF3YWl0RHJhaW4pLEJlLmF3YWl0RHJhaW4mJkJlLmF3YWl0RHJhaW4tLSwwPT09QmUuYXdhaXREcmFpbiYmSShBZSwiZGF0YSIpJiYoQmUuZmxvd2luZz0hMCx4ZShBZSkpfX0oVWUpO05l'@;
put 'Lm9uKCJkcmFpbiIsRGUpO3ZhciBSZT0hMTtmdW5jdGlvbiBldChBZSl7Tigib25kYXRhIik7dmFyIEJlPU5lLndyaXRlKEFlKTtOKCJkZXN0LndyaXRlIixCZSksITE9PT1CZSYmKCgxPT09WGUucGlwZXNDb3VudCYmWGUucGlwZXM9PT1OZXx8WGUucGlwZXNDb3VudD4xJiYtMSE9PUxlKFhl'@;
put 'LnBpcGVzLE5lKSkmJiFSZSYmKE4oImZhbHNlIHdyaXRlIHJlc3BvbnNlLCBwYXVzZSIsWGUuYXdhaXREcmFpbiksWGUuYXdhaXREcmFpbisrKSxVZS5wYXVzZSgpKX1mdW5jdGlvbiBudChBZSl7Tigib25lcnJvciIsQWUpLFRlKCksTmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixudCksMD09'@;
put 'PUkoTmUsImVycm9yIikmJkcoTmUsQWUpfWZ1bmN0aW9uIEdlKCl7TmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsZHQpLFRlKCl9ZnVuY3Rpb24gZHQoKXtOKCJvbmZpbmlzaCIpLE5lLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsR2UpLFRlKCl9ZnVuY3Rpb24gVGUoKXtOKCJ1bnBpcGUiKSxV'@;
put 'ZS51bnBpcGUoTmUpfXJldHVybiBVZS5vbigiZGF0YSIsZXQpLGZ1bmN0aW9uKEFlLEJlLG90KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgQWUucHJlcGVuZExpc3RlbmVyKXJldHVybiBBZS5wcmVwZW5kTGlzdGVuZXIoQmUsb3QpO0FlLl9ldmVudHMmJkFlLl9ldmVudHNbQmVdP0FycmF5Lmlz'@;
put 'QXJyYXkoQWUuX2V2ZW50c1tCZV0pP0FlLl9ldmVudHNbQmVdLnVuc2hpZnQob3QpOkFlLl9ldmVudHNbQmVdPVtvdCxBZS5fZXZlbnRzW0JlXV06QWUub24oQmUsb3QpfShOZSwiZXJyb3IiLG50KSxOZS5vbmNlKCJjbG9zZSIsR2UpLE5lLm9uY2UoImZpbmlzaCIsZHQpLE5lLmVtaXQoInBp'@;
put 'cGUiLFVlKSxYZS5mbG93aW5nfHwoTigicGlwZSByZXN1bWUiKSxVZS5yZXN1bWUoKSksTmV9LEgucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihOZSl7dmFyIEtlPXRoaXMuX3JlYWRhYmxlU3RhdGUsVWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1LZS5waXBlc0NvdW50KXJldHVybiB0aGlz'@;
put 'O2lmKDE9PT1LZS5waXBlc0NvdW50KXJldHVybiBOZSYmTmUhPT1LZS5waXBlc3x8KE5lfHwoTmU9S2UucGlwZXMpLEtlLnBpcGVzPW51bGwsS2UucGlwZXNDb3VudD0wLEtlLmZsb3dpbmc9ITEsTmUmJk5lLmVtaXQoInVucGlwZSIsdGhpcyxVZSkpLHRoaXM7aWYoIU5lKXt2YXIgWGU9S2Uu'@;
put 'cGlwZXMsYXQ9S2UucGlwZXNDb3VudDtLZS5waXBlcz1udWxsLEtlLnBpcGVzQ291bnQ9MCxLZS5mbG93aW5nPSExO2Zvcih2YXIgRmU9MDtGZTxhdDtGZSsrKVhlW0ZlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgQ2U9TGUoS2UucGlwZXMs'@;
put 'TmUpO3JldHVybi0xPT09Q2V8fChLZS5waXBlcy5zcGxpY2UoQ2UsMSksS2UucGlwZXNDb3VudC09MSwxPT09S2UucGlwZXNDb3VudCYmKEtlLnBpcGVzPUtlLnBpcGVzWzBdKSxOZS5lbWl0KCJ1bnBpcGUiLHRoaXMsVWUpKSx0aGlzfSxILnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1ILnByb3Rv'@;
put 'dHlwZS5vbj1mdW5jdGlvbihOZSxLZSl7dmFyIFVlPUUucHJvdG90eXBlLm9uLmNhbGwodGhpcyxOZSxLZSksWGU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1OZT8oWGUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1Y'@;
put 'ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09TmUmJihYZS5lbmRFbWl0dGVkfHxYZS5yZWFkYWJsZUxpc3RlbmluZ3x8KFhlLnJlYWRhYmxlTGlzdGVuaW5nPVhlLm5lZWRSZWFkYWJsZT0hMCxYZS5mbG93aW5nPSExLFhlLmVtaXR0ZWRSZWFkYWJsZT0hMSxOKCJvbiBy'@;
put 'ZWFkYWJsZSIsWGUubGVuZ3RoLFhlLnJlYWRpbmcpLFhlLmxlbmd0aD9fKHRoaXMpOlhlLnJlYWRpbmd8fFUubmV4dFRpY2sodWUsdGhpcykpKSxVZX0sSC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oTmUsS2Upe3ZhciBVZT1FLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5j'@;
put 'YWxsKHRoaXMsTmUsS2UpO3JldHVybiJyZWFkYWJsZSI9PT1OZSYmVS5uZXh0VGljayhuZSx0aGlzKSxVZX0sSC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKE5lKXt2YXIgS2U9RS5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRz'@;
put 'KTtyZXR1cm4icmVhZGFibGUiIT09TmUmJnZvaWQgMCE9PU5lfHxVLm5leHRUaWNrKG5lLHRoaXMpLEtlfSxILnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgVWUsTmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTmUuZmxvd2luZ3x8KE4oInJlc3VtZSIpLE5lLmZsb3dpbmc9'@;
put 'IU5lLnJlYWRhYmxlTGlzdGVuaW5nLChVZT1OZSkucmVzdW1lU2NoZWR1bGVkfHwoVWUucmVzdW1lU2NoZWR1bGVkPSEwLFUubmV4dFRpY2soaGUsdGhpcyxVZSkpKSxOZS5wYXVzZWQ9ITEsdGhpc30sSC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTigiY2FsbCBwYXVzZSBm'@;
put 'bG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0h'@;
put 'MCx0aGlzfSxILnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKE5lKXt2YXIgS2U9dGhpcyxVZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPSExO2Zvcih2YXIgYXQgaW4gTmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihOKCJ3cmFwcGVkIGVuZCIpLFVlLmRlY29kZXImJiFVZS5lbmRlZCl7dmFyIENl'@;
put 'PVVlLmRlY29kZXIuZW5kKCk7Q2UmJkNlLmxlbmd0aCYmS2UucHVzaChDZSl9S2UucHVzaChudWxsKX0pLE5lLm9uKCJkYXRhIixmdW5jdGlvbihDZSl7Tigid3JhcHBlZCBkYXRhIiksVWUuZGVjb2RlciYmKENlPVVlLmRlY29kZXIud3JpdGUoQ2UpKSxVZS5vYmplY3RNb2RlJiZudWxsPT1D'@;
put 'ZXx8KFVlLm9iamVjdE1vZGV8fENlJiZDZS5sZW5ndGgpJiYoS2UucHVzaChDZSl8fChYZT0hMCxOZS5wYXVzZSgpKSl9KSxOZSl2b2lkIDA9PT10aGlzW2F0XSYmImZ1bmN0aW9uIj09dHlwZW9mIE5lW2F0XSYmKHRoaXNbYXRdPWZ1bmN0aW9uKENlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gTmVbQ2VdLmFwcGx5KE5lLGFyZ3VtZW50cyl9fShhdCkpO2Zvcih2YXIgRmU9MDtGZTx5Lmxlbmd0aDtGZSsrKU5lLm9uKHlbRmVdLHRoaXMuZW1pdC5iaW5kKHRoaXMseVtGZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihDZSl7Tigid3JhcHBlZCBfcmVhZCIsQ2UpLFhlJiYo'@;
put 'WGU9ITEsTmUucmVzdW1lKCkpfSx0aGlzfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoSC5wcm90b3R5cGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PVcmJihXPUQoNTg1MCkpLFcodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5w'@;
put 'cm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVy'@;
put 'YWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3Jl'@;
put 'dHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihOZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1OZSl9fSksSC5fZnJvbUxpc3Q9T2UsT2JqZWN0LmRlZmluZVByb3BlcnR5KEgucHJvdG90eXBlLCJyZWFkYWJs'@;
put 'ZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihILmZyb209ZnVuY3Rpb24oTmUsS2Upe3JldHVybiB2b2lkIDA9PT16JiYoej1EKDUxNjcpKSx6KEgsTmUs'@;
put 'S2UpfSl9LDQ2MDU6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9Vjt2YXIgUD1EKDQyODEpLnEsVT1QLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELEk9UC5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssRT1QLkVSUl9UUkFOU0ZPUk1fQUxSRUFEWV9UUkFOU0ZPUk1JTkcsaz1QLkVS'@;
put 'Ul9UUkFOU0ZPUk1fV0lUSF9MRU5HVEhfMCxCPUQoNjc1Myk7ZnVuY3Rpb24gTih6LHEpe3ZhciBRPXRoaXMuX3RyYW5zZm9ybVN0YXRlO1EudHJhbnNmb3JtaW5nPSExO3ZhciB0ZT1RLndyaXRlY2I7aWYobnVsbD09PXRlKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgSSk7US53cml0'@;
put 'ZWNodW5rPW51bGwsUS53cml0ZWNiPW51bGwsbnVsbCE9cSYmdGhpcy5wdXNoKHEpLHRlKHopO3ZhciBhZT10aGlzLl9yZWFkYWJsZVN0YXRlO2FlLnJlYWRpbmc9ITEsKGFlLm5lZWRSZWFkYWJsZXx8YWUubGVuZ3RoPGFlLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGFlLmhpZ2hXYXRl'@;
put 'ck1hcmspfWZ1bmN0aW9uIFYoeil7aWYoISh0aGlzIGluc3RhbmNlb2YgVikpcmV0dXJuIG5ldyBWKHopO0IuY2FsbCh0aGlzLHopLHRoaXMuX3RyYW5zZm9ybVN0YXRlPXthZnRlclRyYW5zZm9ybTpOLmJpbmQodGhpcyksbmVlZFRyYW5zZm9ybTohMSx0cmFuc2Zvcm1pbmc6ITEsd3JpdGVj'@;
put 'YjpudWxsLHdyaXRlY2h1bms6bnVsbCx3cml0ZWVuY29kaW5nOm51bGx9LHRoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx6JiYoImZ1bmN0aW9uIj09dHlwZW9mIHoudHJhbnNmb3JtJiYodGhpcy5fdHJhbnNmb3JtPXoudHJh'@;
put 'bnNmb3JtKSwiZnVuY3Rpb24iPT10eXBlb2Ygei5mbHVzaCYmKHRoaXMuX2ZsdXNoPXouZmx1c2gpKSx0aGlzLm9uKCJwcmVmaW5pc2giLFopfWZ1bmN0aW9uIFooKXt2YXIgej10aGlzOyJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzLl9mbHVzaHx8dGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95'@;
put 'ZWQ/Vyh0aGlzLG51bGwsbnVsbCk6dGhpcy5fZmx1c2goZnVuY3Rpb24ocSxRKXtXKHoscSxRKX0pfWZ1bmN0aW9uIFcoeixxLFEpe2lmKHEpcmV0dXJuIHouZW1pdCgiZXJyb3IiLHEpO2lmKG51bGwhPVEmJnoucHVzaChRKSx6Ll93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgaztp'@;
put 'Zih6Ll90cmFuc2Zvcm1TdGF0ZS50cmFuc2Zvcm1pbmcpdGhyb3cgbmV3IEU7cmV0dXJuIHoucHVzaChudWxsKX1EKDU3MTcpKFYsQiksVi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih6LHEpe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEIucHJvdG90eXBl'@;
put 'LnB1c2guY2FsbCh0aGlzLHoscSl9LFYucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixxLFEpe1EobmV3IFUoIl90cmFuc2Zvcm0oKSIpKX0sVi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHoscSxRKXt2YXIgdGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYodGUud3JpdGVjYj1R'@;
put 'LHRlLndyaXRlY2h1bms9eix0ZS53cml0ZWVuY29kaW5nPXEsIXRlLnRyYW5zZm9ybWluZyl7dmFyIGFlPXRoaXMuX3JlYWRhYmxlU3RhdGU7KHRlLm5lZWRUcmFuc2Zvcm18fGFlLm5lZWRSZWFkYWJsZXx8YWUubGVuZ3RoPGFlLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGFlLmhpZ2hX'@;
put 'YXRlck1hcmspfX0sVi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oeil7dmFyIHE9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbD09PXEud3JpdGVjaHVua3x8cS50cmFuc2Zvcm1pbmc/cS5uZWVkVHJhbnNmb3JtPSEwOihxLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0ocS53cml0'@;
put 'ZWNodW5rLHEud3JpdGVlbmNvZGluZyxxLmFmdGVyVHJhbnNmb3JtKSl9LFYucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKHoscSl7Qi5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLHosZnVuY3Rpb24oUSl7cShRKX0pfX0sNDIyOToodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQ'@;
put 'LFU9RCg0MTU1KTtmdW5jdGlvbiBJKEMpe3ZhciBLPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uKG5lLHVlLGhlKXt2YXIgeGU9bmUuZW50cnk7Zm9yKG5lLmVudHJ5PW51bGw7eGU7KXt2YXIgT2U9eGUuY2FsbGJh'@;
put 'Y2s7dWUucGVuZGluZ2NiLS0sT2Uodm9pZCAwKSx4ZT14ZS5uZXh0fXVlLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PW5lfShLLEMpfX13LmV4cG9ydHM9SCxILldyaXRhYmxlU3RhdGU9TDt2YXIgVixFPXtkZXByZWNhdGU6RCg0OTI3KX0saz1EKDI1MDMpLEI9RCg4NzY0KS5CdWZmZXIsTj0o'@;
put 'dm9pZCAwIT09RC5nP0QuZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxaPUQoMTE5NSksVz1EKDI0NTcpLmdldEhpZ2hXYXRlck1hcmssej1EKDQyODEpLnEscT16LkVSUl9JTlZBTElEX0FSR19UWVBF'@;
put 'LFE9ei5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCx0ZT16LkVSUl9NVUxUSVBMRV9DQUxMQkFDSyxhZT16LkVSUl9TVFJFQU1fQ0FOTk9UX1BJUEUsc2U9ei5FUlJfU1RSRUFNX0RFU1RST1lFRCxkZT16LkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsbGU9ei5FUlJfU1RSRUFNX1dSSVRFX0FG'@;
put 'VEVSX0VORCxjZT16LkVSUl9VTktOT1dOX0VOQ09ESU5HLEc9Wi5lcnJvck9yRGVzdHJveTtmdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIEwoQyxLLG5lKXtQPVB8fEQoNjc1MyksImJvb2xlYW4iIT10eXBlb2YgbmUmJihuZT1LIGluc3RhbmNlb2YgUCksdGhpcy5vYmplY3RNb2RlPSEhKEM9Q3x8'@;
put 'e30pLm9iamVjdE1vZGUsbmUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIUMud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Vyh0aGlzLEMsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIsbmUpLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJh'@;
put 'aW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09Qy5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1DLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMu'@;
put 'bGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oaGUpeyFmdW5jdGlvbih4ZSxPZSl7dmFyIEtlLEhlPXhlLl93cml0YWJsZVN0YXRlLEVlPUhlLnN5bmMsTGU9SGUu'@;
put 'd3JpdGVjYjtpZigiZnVuY3Rpb24iIT10eXBlb2YgTGUpdGhyb3cgbmV3IHRlO2lmKChLZT1IZSkud3JpdGluZz0hMSxLZS53cml0ZWNiPW51bGwsS2UubGVuZ3RoLT1LZS53cml0ZWxlbixLZS53cml0ZWxlbj0wLE9lKSFmdW5jdGlvbihLZSxVZSxYZSxhdCxGZSl7LS1VZS5wZW5kaW5nY2Is'@;
put 'WGU/KFUubmV4dFRpY2soRmUsYXQpLFUubmV4dFRpY2socCxLZSxVZSksS2UuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLEcoS2UsYXQpKTooRmUoYXQpLEtlLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxHKEtlLGF0KSxwKEtlLFVlKSl9KHhlLEhlLEVlLE9lLExlKTtl'@;
put 'bHNle3ZhciBOZT14KEhlKXx8eGUuZGVzdHJveWVkO05lfHxIZS5jb3JrZWR8fEhlLmJ1ZmZlclByb2Nlc3Npbmd8fCFIZS5idWZmZXJlZFJlcXVlc3R8fFMoeGUsSGUpLEVlP1UubmV4dFRpY2soZyx4ZSxIZSxOZSxMZSk6Zyh4ZSxIZSxOZSxMZSl9fShLLGhlKX0sdGhpcy53cml0ZWNiPW51'@;
put 'bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuZW1pdENsb3NlPSExIT09Qy5lbWl0Q2xvc2Us'@;
put 'dGhpcy5hdXRvRGVzdHJveT0hIUMuYXV0b0Rlc3Ryb3ksdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBJKHRoaXMpfWZ1bmN0aW9uIEgoQyl7dmFyIEs9dGhpcyBpbnN0YW5jZW9mKFA9UHx8RCg2NzUzKSk7aWYoIUsmJiFWLmNhbGwoSCx0'@;
put 'aGlzKSlyZXR1cm4gbmV3IEgoQyk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgTChDLHRoaXMsSyksdGhpcy53cml0YWJsZT0hMCxDJiYoImZ1bmN0aW9uIj09dHlwZW9mIEMud3JpdGUmJih0aGlzLl93cml0ZT1DLndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgQy53cml0ZXYmJih0aGlzLl93'@;
put 'cml0ZXY9Qy53cml0ZXYpLCJmdW5jdGlvbiI9PXR5cGVvZiBDLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PUMuZGVzdHJveSksImZ1bmN0aW9uIj09dHlwZW9mIEMuZmluYWwmJih0aGlzLl9maW5hbD1DLmZpbmFsKSksay5jYWxsKHRoaXMpfWZ1bmN0aW9uIGooQyxLLG5lLHVlLGhlLHhlLE9l'@;
put 'KXtLLndyaXRlbGVuPXVlLEsud3JpdGVjYj1PZSxLLndyaXRpbmc9ITAsSy5zeW5jPSEwLEsuZGVzdHJveWVkP0sub253cml0ZShuZXcgc2UoIndyaXRlIikpOm5lP0MuX3dyaXRldihoZSxLLm9ud3JpdGUpOkMuX3dyaXRlKGhlLHhlLEsub253cml0ZSksSy5zeW5jPSExfWZ1bmN0aW9uIGco'@;
put 'QyxLLG5lLHVlKXt2YXIgaGUseGU7bmV8fChoZT1DLDA9PT0oeGU9SykubGVuZ3RoJiZ4ZS5uZWVkRHJhaW4mJih4ZS5uZWVkRHJhaW49ITEsaGUuZW1pdCgiZHJhaW4iKSkpLEsucGVuZGluZ2NiLS0sdWUoKSxwKEMsSyl9ZnVuY3Rpb24gUyhDLEspe0suYnVmZmVyUHJvY2Vzc2luZz0hMDt2'@;
put 'YXIgbmU9Sy5idWZmZXJlZFJlcXVlc3Q7aWYoQy5fd3JpdGV2JiZuZSYmbmUubmV4dCl7dmFyIGhlPW5ldyBBcnJheShLLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSx4ZT1LLmNvcmtlZFJlcXVlc3RzRnJlZTt4ZS5lbnRyeT1uZTtmb3IodmFyIE9lPTAsSGU9ITA7bmU7KWhlW09lXT1uZSxuZS5p'@;
put 'c0J1Znx8KEhlPSExKSxuZT1uZS5uZXh0LE9lKz0xO2hlLmFsbEJ1ZmZlcnM9SGUsaihDLEssITAsSy5sZW5ndGgsaGUsIiIseGUuZmluaXNoKSxLLnBlbmRpbmdjYisrLEsubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHhlLm5leHQ/KEsuY29ya2VkUmVxdWVzdHNGcmVlPXhlLm5leHQseGUu'@;
put 'bmV4dD1udWxsKTpLLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgSShLKSxLLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO25lOyl7dmFyIEVlPW5lLmNodW5rO2lmKGooQyxLLCExLEsub2JqZWN0TW9kZT8xOkVlLmxlbmd0aCxFZSxuZS5lbmNvZGluZyxuZS5jYWxsYmFjayksbmU9'@;
put 'bmUubmV4dCxLLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sSy53cml0aW5nKWJyZWFrfW51bGw9PT1uZSYmKEsubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1LLmJ1ZmZlcmVkUmVxdWVzdD1uZSxLLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24geChDKXtyZXR1cm4gQy5lbmRpbmcmJjA9'@;
put 'PT1DLmxlbmd0aCYmbnVsbD09PUMuYnVmZmVyZWRSZXF1ZXN0JiYhQy5maW5pc2hlZCYmIUMud3JpdGluZ31mdW5jdGlvbiBfKEMsSyl7Qy5fZmluYWwoZnVuY3Rpb24obmUpe0sucGVuZGluZ2NiLS0sbmUmJkcoQyxuZSksSy5wcmVmaW5pc2hlZD0hMCxDLmVtaXQoInByZWZpbmlzaCIpLHAo'@;
put 'QyxLKX0pfWZ1bmN0aW9uIHAoQyxLKXt2YXIgaGUseGUsbmU9eChLKTtpZihuZSYmKGhlPUMsKHhlPUspLnByZWZpbmlzaGVkfHx4ZS5maW5hbENhbGxlZHx8KCJmdW5jdGlvbiIhPXR5cGVvZiBoZS5fZmluYWx8fHhlLmRlc3Ryb3llZD8oeGUucHJlZmluaXNoZWQ9ITAsaGUuZW1pdCgicHJl'@;
put 'ZmluaXNoIikpOih4ZS5wZW5kaW5nY2IrKyx4ZS5maW5hbENhbGxlZD0hMCxVLm5leHRUaWNrKF8saGUseGUpKSksMD09PUsucGVuZGluZ2NiJiYoSy5maW5pc2hlZD0hMCxDLmVtaXQoImZpbmlzaCIpLEsuYXV0b0Rlc3Ryb3kpKSl7dmFyIHVlPUMuX3JlYWRhYmxlU3RhdGU7KCF1ZXx8dWUu'@;
put 'YXV0b0Rlc3Ryb3kmJnVlLmVuZEVtaXR0ZWQpJiZDLmRlc3Ryb3koKX1yZXR1cm4gbmV9RCg1NzE3KShILGspLEwucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgQz10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxLPVtdO0M7KUsucHVzaChDKSxDPUMubmV4dDtyZXR1cm4gS30s'@;
put 'ZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEwucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6RS5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3Rh'@;
put 'dGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXT8oVj1GdW5jdGlvbi5w'@;
put 'cm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSCxTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKEMpe3JldHVybiEhVi5jYWxsKHRoaXMsQyl8fHRoaXM9PT1IJiZDJiZDLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgTH19KSk6Vj1m'@;
put 'dW5jdGlvbihDKXtyZXR1cm4gQyBpbnN0YW5jZW9mIHRoaXN9LEgucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtHKHRoaXMsbmV3IGFlKX0sSC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oQyxLLG5lKXt2YXIgdWUsSGUsRWUsTGUsaGU9dGhpcy5fd3JpdGFibGVTdGF0ZSx4ZT0hMSxPZT0h'@;
put 'aGUub2JqZWN0TW9kZSYmKEIuaXNCdWZmZXIodWU9Qyl8fHVlIGluc3RhbmNlb2YgTik7cmV0dXJuIE9lJiYhQi5pc0J1ZmZlcihDKSYmKEM9Qi5mcm9tKEMpKSwiZnVuY3Rpb24iPT10eXBlb2YgSyYmKG5lPUssSz1udWxsKSxPZT9LPSJidWZmZXIiOkt8fChLPWhlLmRlZmF1bHRFbmNvZGlu'@;
put 'ZyksImZ1bmN0aW9uIiE9dHlwZW9mIG5lJiYobmU9eSksaGUuZW5kaW5nPyhIZT10aGlzLEVlPW5lLExlPW5ldyBsZSxHKEhlLExlKSxVLm5leHRUaWNrKEVlLExlKSk6KE9lfHxmdW5jdGlvbihIZSxFZSxMZSxOZSl7dmFyIEtlO3JldHVybiBudWxsPT09TGU/S2U9bmV3IGRlOiJzdHJpbmci'@;
put 'PT10eXBlb2YgTGV8fEVlLm9iamVjdE1vZGV8fChLZT1uZXcgcSgiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sTGUpKSwhS2V8fChHKEhlLEtlKSxVLm5leHRUaWNrKE5lLEtlKSwhMSl9KHRoaXMsaGUsQyxuZSkpJiYoaGUucGVuZGluZ2NiKysseGU9ZnVuY3Rpb24oSGUsRWUsTGUsTmUs'@;
put 'S2UsVWUpe2lmKCFMZSl7dmFyIFhlPShSZT1OZSwoRGU9RWUpLm9iamVjdE1vZGV8fCExPT09RGUuZGVjb2RlU3RyaW5nc3x8InN0cmluZyIhPXR5cGVvZiBSZXx8KFJlPUIuZnJvbShSZSxLZSkpLFJlKTtOZSE9PVhlJiYoTGU9ITAsS2U9ImJ1ZmZlciIsTmU9WGUpfXZhciBEZSxSZSxhdD1F'@;
put 'ZS5vYmplY3RNb2RlPzE6TmUubGVuZ3RoO0VlLmxlbmd0aCs9YXQ7dmFyIEZlPUVlLmxlbmd0aDxFZS5oaWdoV2F0ZXJNYXJrO2lmKEZlfHwoRWUubmVlZERyYWluPSEwKSxFZS53cml0aW5nfHxFZS5jb3JrZWQpe3ZhciBDZT1FZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O0VlLmxhc3RCdWZmZXJl'@;
put 'ZFJlcXVlc3Q9e2NodW5rOk5lLGVuY29kaW5nOktlLGlzQnVmOkxlLGNhbGxiYWNrOlVlLG5leHQ6bnVsbH0sQ2U/Q2UubmV4dD1FZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OkVlLmJ1ZmZlcmVkUmVxdWVzdD1FZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LEVlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0x'@;
put 'fWVsc2UgaihIZSxFZSwhMSxhdCxOZSxLZSxVZSk7cmV0dXJuIEZlfSh0aGlzLGhlLE9lLEMsSyxuZSkpLHhlfSxILnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sSC5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIEM9dGhpcy5f'@;
put 'd3JpdGFibGVTdGF0ZTtDLmNvcmtlZCYmKEMuY29ya2VkLS0sQy53cml0aW5nfHxDLmNvcmtlZHx8Qy5idWZmZXJQcm9jZXNzaW5nfHwhQy5idWZmZXJlZFJlcXVlc3R8fFModGhpcyxDKSl9LEgucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihDKXtpZigic3RyaW5nIj09'@;
put 'dHlwZW9mIEMmJihDPUMudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoQysiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5l'@;
put 'dyBjZShDKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9Qyx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0'@;
put 'ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFy'@;
put 'a319KSxILnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oQyxLLG5lKXtuZShuZXcgUSgiX3dyaXRlKCkiKSl9LEgucHJvdG90eXBlLl93cml0ZXY9bnVsbCxILnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oQyxLLG5lKXt2YXIgeGUsT2UsdWU9dGhpcy5fd3JpdGFibGVTdGF0ZTtyZXR1cm4iZnVu'@;
put 'Y3Rpb24iPT10eXBlb2YgQz8obmU9QyxDPW51bGwsSz1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgSyYmKG5lPUssSz1udWxsKSxudWxsIT1DJiZ0aGlzLndyaXRlKEMsSyksdWUuY29ya2VkJiYodWUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksdWUuZW5kaW5nfHwoT2U9bmUsKHhlPXVlKS5l'@;
put 'bmRpbmc9ITAscCh0aGlzLHhlKSxPZSYmKHhlLmZpbmlzaGVkP1UubmV4dFRpY2soT2UpOnRoaXMub25jZSgiZmluaXNoIixPZSkpLHhlLmVuZGVkPSEwLHRoaXMud3JpdGFibGU9ITEpLHRoaXN9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtl'@;
put 'bnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSC5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dy'@;
put 'aXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oQyl7dGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUMpfX0pLEgucHJvdG90eXBlLmRlc3Ryb3k9Wi5kZXN0cm95LEgucHJvdG90eXBlLl91bmRl'@;
put 'c3Ryb3k9Wi51bmRlc3Ryb3ksSC5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oQyxLKXtLKEMpfX0sNTg1MDoodyxBLEQpPT57InVzZSBzdHJpY3QiO3ZhciBQLFU9RCg0MTU1KTtmdW5jdGlvbiBJKGRlLGxlLGNlKXtyZXR1cm4obGU9InN5bWJvbCI9PXR5cGVvZih5PWZ1bmN0aW9uKEws'@;
put 'SCl7aWYoIm9iamVjdCIhPXR5cGVvZiBMfHxudWxsPT09TClyZXR1cm4gTDt2YXIgaj1MW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ail7dmFyIGc9ai5jYWxsKEwsInN0cmluZyIpO2lmKCJvYmplY3QiIT10eXBlb2YgZylyZXR1cm4gZzt0aHJvdyBuZXcgVHlwZUVycm9yKCJA'@;
put 'QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJpbmcoTCl9KGxlKSk/eTpTdHJpbmcoeSkpaW4gZGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlLGxlLHt2YWx1ZTpjZSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh'@;
put 'MH0pOmRlW2xlXT1jZSxkZTt2YXIgeX12YXIgRT1EKDg2MTApLGs9U3ltYm9sKCJsYXN0UmVzb2x2ZSIpLEI9U3ltYm9sKCJsYXN0UmVqZWN0IiksTj1TeW1ib2woImVycm9yIiksVj1TeW1ib2woImVuZGVkIiksWj1TeW1ib2woImxhc3RQcm9taXNlIiksVz1TeW1ib2woImhhbmRsZVByb21p'@;
put 'c2UiKSx6PVN5bWJvbCgic3RyZWFtIik7ZnVuY3Rpb24gcShkZSxsZSl7cmV0dXJue3ZhbHVlOmRlLGRvbmU6bGV9fWZ1bmN0aW9uIFEoZGUpe3ZhciBsZT1kZVtrXTtpZihudWxsIT09bGUpe3ZhciBjZT1kZVt6XS5yZWFkKCk7bnVsbCE9PWNlJiYoZGVbWl09bnVsbCxkZVtrXT1udWxsLGRl'@;
put 'W0JdPW51bGwsbGUocShjZSwhMSkpKX19ZnVuY3Rpb24gdGUoZGUpe1UubmV4dFRpY2soUSxkZSl9dmFyIGFlPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLHNlPU9iamVjdC5zZXRQcm90b3R5cGVPZigoSShQPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbel19LG5leHQ6'@;
put 'ZnVuY3Rpb24oKXt2YXIgZGU9dGhpcyxsZT10aGlzW05dO2lmKG51bGwhPT1sZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobGUpO2lmKHRoaXNbVl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShxKHZvaWQgMCwhMCkpO2lmKHRoaXNbel0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5j'@;
put 'dGlvbihMLEgpe1UubmV4dFRpY2soZnVuY3Rpb24oKXtkZVtOXT9IKGRlW05dKTpMKHEodm9pZCAwLCEwKSl9KX0pO3ZhciBjZSxHPXRoaXNbWl07aWYoRyljZT1uZXcgUHJvbWlzZShmdW5jdGlvbihMLEgpe3JldHVybiBmdW5jdGlvbihqLGcpe0wudGhlbihmdW5jdGlvbigpe0hbVl0/aihx'@;
put 'KHZvaWQgMCwhMCkpOkhbV10oaixnKX0sZyl9fShHLHRoaXMpKTtlbHNle3ZhciB5PXRoaXNbel0ucmVhZCgpO2lmKG51bGwhPT15KXJldHVybiBQcm9taXNlLnJlc29sdmUocSh5LCExKSk7Y2U9bmV3IFByb21pc2UodGhpc1tXXSl9cmV0dXJuIHRoaXNbWl09Y2UsY2V9fSxTeW1ib2wuYXN5'@;
put 'bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksSShQLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGRlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGxlLGNlKXtkZVt6XS5kZXN0cm95KG51bGwsZnVuY3Rpb24oRyl7Rz9jZShHKTpsZShxKHZvaWQgMCwhMCkpfSl9'@;
put 'KX0pLFApLGFlKTt3LmV4cG9ydHM9ZnVuY3Rpb24oZGUpe3ZhciBsZSxjZT1PYmplY3QuY3JlYXRlKHNlLChJKGxlPXt9LHose3ZhbHVlOmRlLHdyaXRhYmxlOiEwfSksSShsZSxrLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSShsZSxCLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSShs'@;
put 'ZSxOLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSksSShsZSxWLHt2YWx1ZTpkZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSksSShsZSxXLHt2YWx1ZTpmdW5jdGlvbihHLHkpe3ZhciBMPWNlW3pdLnJlYWQoKTtMPyhjZVtaXT1udWxsLGNlW2tdPW51bGwsY2VbQl09'@;
put 'bnVsbCxHKHEoTCwhMSkpKTooY2Vba109RyxjZVtCXT15KX0sd3JpdGFibGU6ITB9KSxsZSkpO3JldHVybiBjZVtaXT1udWxsLEUoZGUsZnVuY3Rpb24oRyl7aWYoRyYmIkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NMT1NFIiE9PUcuY29kZSl7dmFyIHk9Y2VbQl07cmV0dXJuIG51bGwhPT15JiYo'@;
put 'Y2VbWl09bnVsbCxjZVtrXT1udWxsLGNlW0JdPW51bGwseShHKSksdm9pZChjZVtOXT1HKX12YXIgTD1jZVtrXTtudWxsIT09TCYmKGNlW1pdPW51bGwsY2Vba109bnVsbCxjZVtCXT1udWxsLEwocSh2b2lkIDAsITApKSksY2VbVl09ITB9KSxkZS5vbigicmVhZGFibGUiLHRlLmJpbmQobnVs'@;
put 'bCxjZSkpLGNlfX0sNzMyNzoodyxBLEQpPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIFAoWixXKXt2YXIgej1PYmplY3Qua2V5cyhaKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKXt2YXIgcT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFopO1cmJihxPXEuZmlsdGVyKGZ1'@;
put 'bmN0aW9uKFEpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFosUSkuZW51bWVyYWJsZX0pKSx6LnB1c2guYXBwbHkoeixxKX1yZXR1cm4gen1mdW5jdGlvbiBVKFope2Zvcih2YXIgVz0xO1c8YXJndW1lbnRzLmxlbmd0aDtXKyspe3ZhciB6PW51bGwhPWFyZ3VtZW50'@;
put 'c1tXXT9hcmd1bWVudHNbV106e307VyUyP1AoT2JqZWN0KHopLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKHEpe0koWixxLHpbcV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoWixPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9y'@;
put 'cyh6KSk6UChPYmplY3QoeikpLmZvckVhY2goZnVuY3Rpb24ocSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFoscSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHoscSkpfSl9cmV0dXJuIFp9ZnVuY3Rpb24gSShaLFcseil7cmV0dXJuKFc9ayhXKSlpbiBaP09iamVjdC5kZWZpbmVQ'@;
put 'cm9wZXJ0eShaLFcse3ZhbHVlOnosZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpaW1ddPXosWn1mdW5jdGlvbiBrKFope3ZhciBXPWZ1bmN0aW9uKHoscSl7aWYoIm9iamVjdCIhPXR5cGVvZiB6fHxudWxsPT09eilyZXR1cm4gejt2YXIgUT16W1N5bWJvbC50'@;
put 'b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09USl7dmFyIHRlPVEuY2FsbCh6LCJzdHJpbmciKTtpZigib2JqZWN0IiE9dHlwZW9mIHRlKXJldHVybiB0ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybiBTdHJp'@;
put 'bmcoeil9KFopO3JldHVybiJzeW1ib2wiPT10eXBlb2YgVz9XOlN0cmluZyhXKX12YXIgQj1EKDg3NjQpLkJ1ZmZlcixOPUQoMjM2MSkuaW5zcGVjdCxWPU4mJk4uY3VzdG9tfHwiaW5zcGVjdCI7dy5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gWigpeyhmdW5jdGlvbihRLHRlKXtpZigh'@;
put 'KFEgaW5zdGFuY2VvZiB0ZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFopLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIFcsejtyZXR1cm4gVz1aLCh6PVt7a2V5OiJwdXNoIix2'@;
put 'YWx1ZTpmdW5jdGlvbihRKXt2YXIgdGU9e2RhdGE6USxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9dGU6dGhpcy5oZWFkPXRlLHRoaXMudGFpbD10ZSwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oUSl7dmFyIHRlPXtkYXRhOlEs'@;
put 'bmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD10ZSksdGhpcy5oZWFkPXRlLCsrdGhpcy5sZW5ndGh9fSx7a2V5OiJzaGlmdCIsdmFsdWU6ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBRPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9'@;
put 'MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsUX19fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH19LHtrZXk6ImpvaW4iLHZhbHVlOmZ1bmN0aW9uKFEp'@;
put 'e2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHRlPXRoaXMuaGVhZCxhZT0iIit0ZS5kYXRhO3RlPXRlLm5leHQ7KWFlKz1RK3RlLmRhdGE7cmV0dXJuIGFlfX0se2tleToiY29uY2F0Iix2YWx1ZTpmdW5jdGlvbihRKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIEIuYWxs'@;
put 'b2MoMCk7Zm9yKHZhciBkZT1CLmFsbG9jVW5zYWZlKFE+Pj4wKSxsZT10aGlzLmhlYWQsY2U9MDtsZTspQi5wcm90b3R5cGUuY29weS5jYWxsKGxlLmRhdGEsZGUsY2UpLGNlKz1sZS5kYXRhLmxlbmd0aCxsZT1sZS5uZXh0O3JldHVybiBkZX19LHtrZXk6ImNvbnN1bWUiLHZhbHVlOmZ1bmN0'@;
put 'aW9uKFEsdGUpe3ZhciBhZTtyZXR1cm4gUTx0aGlzLmhlYWQuZGF0YS5sZW5ndGg/KGFlPXRoaXMuaGVhZC5kYXRhLnNsaWNlKDAsUSksdGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoUSkpOmFlPVE9PT10aGlzLmhlYWQuZGF0YS5sZW5ndGg/dGhpcy5zaGlmdCgpOnRlP3Ro'@;
put 'aXMuX2dldFN0cmluZyhRKTp0aGlzLl9nZXRCdWZmZXIoUSksYWV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgdGU9dGhpcy5oZWFkLGFlPTEsc2U9dGUuZGF0YTtm'@;
put 'b3IoUS09c2UubGVuZ3RoO3RlPXRlLm5leHQ7KXt2YXIgZGU9dGUuZGF0YSxsZT1RPmRlLmxlbmd0aD9kZS5sZW5ndGg6UTtpZihzZSs9bGU9PT1kZS5sZW5ndGg/ZGU6ZGUuc2xpY2UoMCxRKSwwPT0oUS09bGUpKXtsZT09PWRlLmxlbmd0aD8oKythZSx0aGlzLmhlYWQ9dGUubmV4dD90ZS5u'@;
put 'ZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXRlLHRlLmRhdGE9ZGUuc2xpY2UobGUpKTticmVha30rK2FlfXJldHVybiB0aGlzLmxlbmd0aC09YWUsc2V9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihRKXt2YXIgdGU9Qi5hbGxvY1Vuc2FmZShRKSxhZT10aGlzLmhl'@;
put 'YWQsc2U9MTtmb3IoYWUuZGF0YS5jb3B5KHRlKSxRLT1hZS5kYXRhLmxlbmd0aDthZT1hZS5uZXh0Oyl7dmFyIGRlPWFlLmRhdGEsbGU9UT5kZS5sZW5ndGg/ZGUubGVuZ3RoOlE7aWYoZGUuY29weSh0ZSx0ZS5sZW5ndGgtUSwwLGxlKSwwPT0oUS09bGUpKXtsZT09PWRlLmxlbmd0aD8oKytz'@;
put 'ZSx0aGlzLmhlYWQ9YWUubmV4dD9hZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPWFlLGFlLmRhdGE9ZGUuc2xpY2UobGUpKTticmVha30rK3NlfXJldHVybiB0aGlzLmxlbmd0aC09c2UsdGV9fSx7a2V5OlYsdmFsdWU6ZnVuY3Rpb24oUSx0ZSl7cmV0dXJuIE4odGhpcyxVKFUo'@;
put 'e30sdGUpLHt9LHtkZXB0aDowLGN1c3RvbUluc3BlY3Q6ITF9KSl9fV0pJiZmdW5jdGlvbiBFKFosVyl7Zm9yKHZhciB6PTA7ejxXLmxlbmd0aDt6Kyspe3ZhciBxPVdbel07cS5lbnVtZXJhYmxlPXEuZW51bWVyYWJsZXx8ITEscS5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHEmJihxLndy'@;
put 'aXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWixrKHEua2V5KSxxKX19KFcucHJvdG90eXBlLHopLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShXLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFp9KCl9LDExOTU6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpO2Z1'@;
put 'bmN0aW9uIFUoayxCKXtFKGssQiksSShrKX1mdW5jdGlvbiBJKGspe2suX3dyaXRhYmxlU3RhdGUmJiFrLl93cml0YWJsZVN0YXRlLmVtaXRDbG9zZXx8ay5fcmVhZGFibGVTdGF0ZSYmIWsuX3JlYWRhYmxlU3RhdGUuZW1pdENsb3NlfHxrLmVtaXQoImNsb3NlIil9ZnVuY3Rpb24gRShrLEIp'@;
put 'e2suZW1pdCgiZXJyb3IiLEIpfXcuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbihrLEIpe3ZhciBOPXRoaXM7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfHx0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRl'@;
put 'c3Ryb3llZD8oQj9CKGspOmsmJih0aGlzLl93cml0YWJsZVN0YXRlP3RoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkfHwodGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsUC5uZXh0VGljayhFLHRoaXMsaykpOlAubmV4dFRpY2soRSx0aGlzLGspKSx0aGlzKToodGhp'@;
put 'cy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX2Rlc3Ryb3koa3x8bnVsbCxmdW5jdGlvbihXKXshQiYmVz9OLl93cml0YWJsZVN0YXRl'@;
put 'P04uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkP1AubmV4dFRpY2soSSxOKTooTi5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsUC5uZXh0VGljayhVLE4sVykpOlAubmV4dFRpY2soVSxOLFcpOkI/KFAubmV4dFRpY2soSSxOKSxCKFcpKTpQLm5leHRUaWNrKEksTil9KSx0aGlz'@;
put 'KX0sdW5kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1p'@;
put 'dHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93'@;
put 'cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbihrLEIpe3ZhciBOPWsuX3JlYWRhYmxlU3RhdGUsVj1rLl93cml0YWJsZVN0'@;
put 'YXRlO04mJk4uYXV0b0Rlc3Ryb3l8fFYmJlYuYXV0b0Rlc3Ryb3k/ay5kZXN0cm95KEIpOmsuZW1pdCgiZXJyb3IiLEIpfX19LDg2MTA6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQyODEpLnEuRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0U7ZnVuY3Rpb24gVSgpe313LmV4cG9y'@;
put 'dHM9ZnVuY3Rpb24gSShFLGssQil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGspcmV0dXJuIEkoRSxudWxsLGspO2t8fChrPXt9KSxCPWZ1bmN0aW9uKGRlKXt2YXIgbGU9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIWxlKXtsZT0hMDtmb3IodmFyIGNlPWFyZ3VtZW50cy5sZW5ndGgsRz1uZXcg'@;
put 'QXJyYXkoY2UpLHk9MDt5PGNlO3krKylHW3ldPWFyZ3VtZW50c1t5XTtkZS5hcHBseSh0aGlzLEcpfX19KEJ8fFUpO3ZhciBkZSxOPWsucmVhZGFibGV8fCExIT09ay5yZWFkYWJsZSYmRS5yZWFkYWJsZSxWPWsud3JpdGFibGV8fCExIT09ay53cml0YWJsZSYmRS53cml0YWJsZSxaPWZ1bmN0'@;
put 'aW9uKCl7RS53cml0YWJsZXx8eigpfSxXPUUuX3dyaXRhYmxlU3RhdGUmJkUuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsej1mdW5jdGlvbigpe1Y9ITEsVz0hMCxOfHxCLmNhbGwoRSl9LHE9RS5fcmVhZGFibGVTdGF0ZSYmRS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLFE9ZnVuY3Rpb24o'@;
put 'KXtOPSExLHE9ITAsVnx8Qi5jYWxsKEUpfSx0ZT1mdW5jdGlvbihkZSl7Qi5jYWxsKEUsZGUpfSxhZT1mdW5jdGlvbigpe3ZhciBkZTtyZXR1cm4gTiYmIXE/KEUuX3JlYWRhYmxlU3RhdGUmJkUuX3JlYWRhYmxlU3RhdGUuZW5kZWR8fChkZT1uZXcgUCksQi5jYWxsKEUsZGUpKTpWJiYhVz8o'@;
put 'RS5fd3JpdGFibGVTdGF0ZSYmRS5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8KGRlPW5ldyBQKSxCLmNhbGwoRSxkZSkpOnZvaWQgMH0sc2U9ZnVuY3Rpb24oKXtFLnJlcS5vbigiZmluaXNoIix6KX07cmV0dXJuKGRlPUUpLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIGRlLmFib3J0PyhF'@;
put 'Lm9uKCJjb21wbGV0ZSIseiksRS5vbigiYWJvcnQiLGFlKSxFLnJlcT9zZSgpOkUub24oInJlcXVlc3QiLHNlKSk6ViYmIUUuX3dyaXRhYmxlU3RhdGUmJihFLm9uKCJlbmQiLFopLEUub24oImNsb3NlIixaKSksRS5vbigiZW5kIixRKSxFLm9uKCJmaW5pc2giLHopLCExIT09ay5lcnJvciYm'@;
put 'RS5vbigiZXJyb3IiLHRlKSxFLm9uKCJjbG9zZSIsYWUpLGZ1bmN0aW9uKCl7RS5yZW1vdmVMaXN0ZW5lcigiY29tcGxldGUiLHopLEUucmVtb3ZlTGlzdGVuZXIoImFib3J0IixhZSksRS5yZW1vdmVMaXN0ZW5lcigicmVxdWVzdCIsc2UpLEUucmVxJiZFLnJlcS5yZW1vdmVMaXN0ZW5lcigi'@;
put 'ZmluaXNoIix6KSxFLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFopLEUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixaKSxFLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHopLEUucmVtb3ZlTGlzdGVuZXIoImVuZCIsUSksRS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLHRlKSxFLnJlbW92ZUxpc3RlbmVy'@;
put 'KCJjbG9zZSIsYWUpfX19LDUxNjc6dz0+e3cuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw5OTQ2Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFAsVT1EKDQyODEpLnEsST1VLkVS'@;
put 'Ul9NSVNTSU5HX0FSR1MsRT1VLkVSUl9TVFJFQU1fREVTVFJPWUVEO2Z1bmN0aW9uIGsoVil7aWYoVil0aHJvdyBWfWZ1bmN0aW9uIEIoVil7VigpfWZ1bmN0aW9uIE4oVixaKXtyZXR1cm4gVi5waXBlKFopfXcuZXhwb3J0cz1mdW5jdGlvbigpe2Zvcih2YXIgVj1hcmd1bWVudHMubGVuZ3Ro'@;
put 'LFo9bmV3IEFycmF5KFYpLFc9MDtXPFY7VysrKVpbV109YXJndW1lbnRzW1ddO3ZhciB6LHRlLHE9KHRlPVopLmxlbmd0aD8iZnVuY3Rpb24iIT10eXBlb2YgdGVbdGUubGVuZ3RoLTFdP2s6dGUucG9wKCk6aztpZihBcnJheS5pc0FycmF5KFpbMF0pJiYoWj1aWzBdKSxaLmxlbmd0aDwyKXRo'@;
put 'cm93IG5ldyBJKCJzdHJlYW1zIik7dmFyIFE9Wi5tYXAoZnVuY3Rpb24odGUsYWUpe3ZhciBzZT1hZTxaLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihkZSxsZSxjZSxHKXtHPWZ1bmN0aW9uKEgpe3ZhciBqPSExO3JldHVybiBmdW5jdGlvbigpe2p8fChqPSEwLEguYXBwbHkodm9pZCAwLGFy'@;
put 'Z3VtZW50cykpfX0oRyk7dmFyIHk9ITE7ZGUub24oImNsb3NlIixmdW5jdGlvbigpe3k9ITB9KSx2b2lkIDA9PT1QJiYoUD1EKDg2MTApKSxQKGRlLHtyZWFkYWJsZTpsZSx3cml0YWJsZTpjZX0sZnVuY3Rpb24oSCl7aWYoSClyZXR1cm4gRyhIKTt5PSEwLEcoKX0pO3ZhciBMPSExO3JldHVy'@;
put 'biBmdW5jdGlvbihIKXtpZigheSYmIUwpcmV0dXJuIEw9ITAsKGo9ZGUpLnNldEhlYWRlciYmImZ1bmN0aW9uIj09dHlwZW9mIGouYWJvcnQ/ZGUuYWJvcnQoKToiZnVuY3Rpb24iPT10eXBlb2YgZGUuZGVzdHJveT9kZS5kZXN0cm95KCk6dm9pZCBHKEh8fG5ldyBFKCJwaXBlIikpO3ZhciBq'@;
put 'fX0odGUsc2UsYWU+MCxmdW5jdGlvbihkZSl7enx8KHo9ZGUpLGRlJiZRLmZvckVhY2goQiksc2V8fChRLmZvckVhY2goQikscSh6KSl9KX0pO3JldHVybiBaLnJlZHVjZShOKX19LDI0NTc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZB'@;
put 'TFVFO3cuZXhwb3J0cz17Z2V0SGlnaFdhdGVyTWFyazpmdW5jdGlvbihVLEksRSxrKXt2YXIgTixCPW51bGwhPShOPUkpLmhpZ2hXYXRlck1hcms/Ti5oaWdoV2F0ZXJNYXJrOms/TltFXTpudWxsO2lmKG51bGwhPUIpe2lmKCFpc0Zpbml0ZShCKXx8TWF0aC5mbG9vcihCKSE9PUJ8fEI8MCl0'@;
put 'aHJvdyBuZXcgUChrP0U6ImhpZ2hXYXRlck1hcmsiLEIpO3JldHVybiBNYXRoLmZsb29yKEIpfXJldHVybiBVLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzoodyxBLEQpPT57dy5leHBvcnRzPUQoNzE4NykuRXZlbnRFbWl0dGVyfSw4NDczOih3LEEsRCk9PnsoQT13LmV4cG9ydHM9RCg5'@;
put 'NDgxKSkuU3RyZWFtPUEsQS5SZWFkYWJsZT1BLEEuV3JpdGFibGU9RCg0MjI5KSxBLkR1cGxleD1EKDY3NTMpLEEuVHJhbnNmb3JtPUQoNDYwNSksQS5QYXNzVGhyb3VnaD1EKDI3MjUpLEEuZmluaXNoZWQ9RCg4NjEwKSxBLnBpcGVsaW5lPUQoOTk0Nil9LDc0MTg6dz0+eyJ1c2Ugc3RyaWN0'@;
put 'Ijt3LmV4cG9ydHM9ZnVuY3Rpb24oQSxEKXtpZihEPUQuc3BsaXQoIjoiKVswXSwhKEE9K0EpKXJldHVybiExO3N3aXRjaChEKXtjYXNlImh0dHAiOmNhc2Uid3MiOnJldHVybiA4MCE9PUE7Y2FzZSJodHRwcyI6Y2FzZSJ3c3MiOnJldHVybiA0NDMhPT1BO2Nhc2UiZnRwIjpyZXR1cm4gMjEh'@;
put 'PT1BO2Nhc2UiZ29waGVyIjpyZXR1cm4gNzAhPT1BO2Nhc2UiZmlsZSI6cmV0dXJuITF9cmV0dXJuIDAhPT1BfX0sOTg0Oih3LEEsRCk9Pnt2YXIgUD1EKDQxNTUpO2NvbnN0IFU9RCg5MjgyKSxJPUQoMjUyMCksRT1EKDcyMTcpO2xldCBrO3RyeXtrPUQoMjg4NCl9Y2F0Y2h7fWNvbnN0IEI9'@;
put 'e25vc29ydDohMCxzaWxlbnQ6ITB9O2xldCBOPTA7Y29uc3QgVj0id2luMzIiPT09UC5wbGF0Zm9ybSxaPWNlPT57aWYoWyJ1bmxpbmsiLCJjaG1vZCIsInN0YXQiLCJsc3RhdCIsInJtZGlyIiwicmVhZGRpciJdLmZvckVhY2goRz0+e2NlW0ddPWNlW0ddfHxFW0ddLGNlW0crPSJTeW5jIl09'@;
put 'Y2VbR118fEVbR119KSxjZS5tYXhCdXN5VHJpZXM9Y2UubWF4QnVzeVRyaWVzfHwzLGNlLmVtZmlsZVdhaXQ9Y2UuZW1maWxlV2FpdHx8MWUzLCExPT09Y2UuZ2xvYiYmKGNlLmRpc2FibGVHbG9iPSEwKSwhMCE9PWNlLmRpc2FibGVHbG9iJiZ2b2lkIDA9PT1rKXRocm93IEVycm9yKCJnbG9i'@;
put 'IGRlcGVuZGVuY3kgbm90IGZvdW5kLCBzZXQgYG9wdGlvbnMuZGlzYWJsZUdsb2IgPSB0cnVlYCBpZiBpbnRlbnRpb25hbCIpO2NlLmRpc2FibGVHbG9iPWNlLmRpc2FibGVHbG9ifHwhMSxjZS5nbG9iPWNlLmdsb2J8fEJ9LFc9KGNlLEcseSk9PnsiZnVuY3Rpb24iPT10eXBlb2YgRyYmKHk9'@;
put 'RyxHPXt9KSxVKGNlLCJyaW1yYWY6IG1pc3NpbmcgcGF0aCIpLFUuZXF1YWwodHlwZW9mIGNlLCJzdHJpbmciLCJyaW1yYWY6IHBhdGggc2hvdWxkIGJlIGEgc3RyaW5nIiksVS5lcXVhbCh0eXBlb2YgeSwiZnVuY3Rpb24iLCJyaW1yYWY6IGNhbGxiYWNrIGZ1bmN0aW9uIHJlcXVpcmVkIiks'@;
put 'VShHLCJyaW1yYWY6IGludmFsaWQgb3B0aW9ucyBhcmd1bWVudCBwcm92aWRlZCIpLFUuZXF1YWwodHlwZW9mIEcsIm9iamVjdCIsInJpbXJhZjogb3B0aW9ucyBzaG91bGQgYmUgb2JqZWN0IiksWihHKTtsZXQgTD0wLEg9bnVsbCxqPTA7Y29uc3QgZz0oUyx4KT0+Uz95KFMpOihqPXgubGVu'@;
put 'Z3RoLDA9PT1qP3koKTp2b2lkIHguZm9yRWFjaChfPT57Y29uc3QgcD1DPT57aWYoQyl7aWYoKCJFQlVTWSI9PT1DLmNvZGV8fCJFTk9URU1QVFkiPT09Qy5jb2RlfHwiRVBFUk0iPT09Qy5jb2RlKSYmTDxHLm1heEJ1c3lUcmllcylyZXR1cm4gTCsrLHNldFRpbWVvdXQoKCk9PnooXyxHLHAp'@;
put 'LDEwMCpMKTtpZigiRU1GSUxFIj09PUMuY29kZSYmTjxHLmVtZmlsZVdhaXQpcmV0dXJuIHNldFRpbWVvdXQoKCk9PnooXyxHLHApLE4rKyk7IkVOT0VOVCI9PT1DLmNvZGUmJihDPW51bGwpfU49MCxIPUh8fEMsMD09LS1qJiZ5KEgpfTt6KF8sRyxwKX0pKTtpZihHLmRpc2FibGVHbG9ifHwh'@;
put 'ay5oYXNNYWdpYyhjZSkpcmV0dXJuIGcobnVsbCxbY2VdKTtHLmxzdGF0KGNlLChTLHgpPT57aWYoIVMpcmV0dXJuIGcobnVsbCxbY2VdKTtrKGNlLEcuZ2xvYixnKX0pfSx6PShjZSxHLHkpPT57VShjZSksVShHKSxVKCJmdW5jdGlvbiI9PXR5cGVvZiB5KSxHLmxzdGF0KGNlLChMLEgpPT5M'@;
put 'JiYiRU5PRU5UIj09PUwuY29kZT95KG51bGwpOihMJiYiRVBFUk0iPT09TC5jb2RlJiZWJiZxKGNlLEcsTCx5KSxIJiZILmlzRGlyZWN0b3J5KCk/dGUoY2UsRyxMLHkpOnZvaWQgRy51bmxpbmsoY2Usaj0+e2lmKGope2lmKCJFTk9FTlQiPT09ai5jb2RlKXJldHVybiB5KG51bGwpO2lmKCJF'@;
put 'UEVSTSI9PT1qLmNvZGUpcmV0dXJuIFY/cShjZSxHLGoseSk6dGUoY2UsRyxqLHkpO2lmKCJFSVNESVIiPT09ai5jb2RlKXJldHVybiB0ZShjZSxHLGoseSl9cmV0dXJuIHkoail9KSkpfSxxPShjZSxHLHksTCk9PntVKGNlKSxVKEcpLFUoImZ1bmN0aW9uIj09dHlwZW9mIEwpLEcuY2htb2Qo'@;
put 'Y2UsNDM4LEg9PntIP0woIkVOT0VOVCI9PT1ILmNvZGU/bnVsbDp5KTpHLnN0YXQoY2UsKGosZyk9PntqP0woIkVOT0VOVCI9PT1qLmNvZGU/bnVsbDp5KTpnLmlzRGlyZWN0b3J5KCk/dGUoY2UsRyx5LEwpOkcudW5saW5rKGNlLEwpfSl9KX0sUT0oY2UsRyx5KT0+e1UoY2UpLFUoRyk7dHJ5'@;
put 'e0cuY2htb2RTeW5jKGNlLDQzOCl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IHl9bGV0IEw7dHJ5e0w9Ry5zdGF0U3luYyhjZSl9Y2F0Y2goSCl7aWYoIkVOT0VOVCI9PT1ILmNvZGUpcmV0dXJuO3Rocm93IHl9TC5pc0RpcmVjdG9yeSgpP2RlKGNlLEcseSk6'@;
put 'Ry51bmxpbmtTeW5jKGNlKX0sdGU9KGNlLEcseSxMKT0+e1UoY2UpLFUoRyksVSgiZnVuY3Rpb24iPT10eXBlb2YgTCksRy5ybWRpcihjZSxIPT57IUh8fCJFTk9URU1QVFkiIT09SC5jb2RlJiYiRUVYSVNUIiE9PUguY29kZSYmIkVQRVJNIiE9PUguY29kZT9MKEgmJiJFTk9URElSIj09PUgu'@;
put 'Y29kZT95OkgpOmFlKGNlLEcsTCl9KX0sYWU9KGNlLEcseSk9PntVKGNlKSxVKEcpLFUoImZ1bmN0aW9uIj09dHlwZW9mIHkpLEcucmVhZGRpcihjZSwoTCxIKT0+e2lmKEwpcmV0dXJuIHkoTCk7bGV0IGosZz1ILmxlbmd0aDtpZigwPT09ZylyZXR1cm4gRy5ybWRpcihjZSx5KTtILmZvckVh'@;
put 'Y2goUz0+e1coSS5qb2luKGNlLFMpLEcseD0+e2lmKCFqKXJldHVybiB4P3koaj14KTp2b2lkKDA9PS0tZyYmRy5ybWRpcihjZSx5KSl9KX0pfSl9LHNlPShjZSxHKT0+e2xldCB5O2lmKFooRz1HfHx7fSksVShjZSwicmltcmFmOiBtaXNzaW5nIHBhdGgiKSxVLmVxdWFsKHR5cGVvZiBjZSwi'@;
put 'c3RyaW5nIiwicmltcmFmOiBwYXRoIHNob3VsZCBiZSBhIHN0cmluZyIpLFUoRywicmltcmFmOiBtaXNzaW5nIG9wdGlvbnMiKSxVLmVxdWFsKHR5cGVvZiBHLCJvYmplY3QiLCJyaW1yYWY6IG9wdGlvbnMgc2hvdWxkIGJlIG9iamVjdCIpLEcuZGlzYWJsZUdsb2J8fCFrLmhhc01hZ2ljKGNl'@;
put 'KSl5PVtjZV07ZWxzZSB0cnl7Ry5sc3RhdFN5bmMoY2UpLHk9W2NlXX1jYXRjaHt5PWsuc3luYyhjZSxHLmdsb2IpfWlmKHkubGVuZ3RoKWZvcihsZXQgTD0wO0w8eS5sZW5ndGg7TCsrKXtjb25zdCBIPXlbTF07bGV0IGo7dHJ5e2o9Ry5sc3RhdFN5bmMoSCl9Y2F0Y2goZyl7aWYoIkVOT0VO'@;
put 'VCI9PT1nLmNvZGUpcmV0dXJuOyJFUEVSTSI9PT1nLmNvZGUmJlYmJlEoSCxHLGcpfXRyeXtqJiZqLmlzRGlyZWN0b3J5KCk/ZGUoSCxHLG51bGwpOkcudW5saW5rU3luYyhIKX1jYXRjaChnKXtpZigiRU5PRU5UIj09PWcuY29kZSlyZXR1cm47aWYoIkVQRVJNIj09PWcuY29kZSlyZXR1cm4g'@;
put 'Vj9RKEgsRyxnKTpkZShILEcsZyk7aWYoIkVJU0RJUiIhPT1nLmNvZGUpdGhyb3cgZztkZShILEcsZyl9fX0sZGU9KGNlLEcseSk9PntVKGNlKSxVKEcpO3RyeXtHLnJtZGlyU3luYyhjZSl9Y2F0Y2goTCl7aWYoIkVOT0VOVCI9PT1MLmNvZGUpcmV0dXJuO2lmKCJFTk9URElSIj09PUwuY29k'@;
put 'ZSl0aHJvdyB5OyJFTk9URU1QVFkiIT09TC5jb2RlJiYiRUVYSVNUIiE9PUwuY29kZSYmIkVQRVJNIiE9PUwuY29kZXx8bGUoY2UsRyl9fSxsZT0oY2UsRyk9PntVKGNlKSxVKEcpLEcucmVhZGRpclN5bmMoY2UpLmZvckVhY2goSD0+c2UoSS5qb2luKGNlLEgpLEcpKTtjb25zdCB5PVY/MTAw'@;
put 'OjE7bGV0IEw9MDtmb3IoOzspe2xldCBIPSEwO3RyeXtjb25zdCBqPUcucm1kaXJTeW5jKGNlLEcpO3JldHVybiBIPSExLGp9ZmluYWxseXtpZigrK0w8eSYmSCljb250aW51ZX19fTt3LmV4cG9ydHM9VyxXLnN5bmM9c2V9LDk3ODU6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDg3'@;
put 'NjQpLkJ1ZmZlcixVPUQoNTcxNyksST1EKDMzNDkpLEU9bmV3IEFycmF5KDE2KSxrPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwx'@;
put 'LDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLEI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3'@;
put 'LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sTj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywx'@;
put 'NSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sVj1bOCw5LDksMTEsMTMsMTUsMTUs'@;
put 'NSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEz'@;
put 'LDYsNSwxNSwxMywxMSwxMV0sWj1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSxXPVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO2Z1bmN0aW9uIHooKXtJLmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkz'@;
put 'LHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwfWZ1bmN0aW9uIHEobGUsY2Upe3JldHVybiBsZTw8Y2V8bGU+Pj4zMi1jZX1mdW5jdGlvbiBRKGxlLGNlLEcseSxMLEgsaixnKXtyZXR1cm4gcShsZSsoY2Ve'@;
put 'R155KStIK2p8MCxnKStMfDB9ZnVuY3Rpb24gdGUobGUsY2UsRyx5LEwsSCxqLGcpe3JldHVybiBxKGxlKyhjZSZHfH5jZSZ5KStIK2p8MCxnKStMfDB9ZnVuY3Rpb24gYWUobGUsY2UsRyx5LEwsSCxqLGcpe3JldHVybiBxKGxlKygoY2V8fkcpXnkpK0granwwLGcpK0x8MH1mdW5jdGlvbiBz'@;
put 'ZShsZSxjZSxHLHksTCxILGosZyl7cmV0dXJuIHEobGUrKGNlJnl8RyZ+eSkrSCtqfDAsZykrTHwwfWZ1bmN0aW9uIGRlKGxlLGNlLEcseSxMLEgsaixnKXtyZXR1cm4gcShsZSsoY2VeKEd8fnkpKStIK2p8MCxnKStMfDB9VSh6LEkpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtm'@;
put 'b3IodmFyIGxlPUUsY2U9MDtjZTwxNjsrK2NlKWxlW2NlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KmNlKTtmb3IodmFyIEc9MHx0aGlzLl9hLHk9MHx0aGlzLl9iLEw9MHx0aGlzLl9jLEg9MHx0aGlzLl9kLGo9MHx0aGlzLl9lLGc9MHx0aGlzLl9hLFM9MHx0aGlzLl9iLHg9MHx0aGlz'@;
put 'Ll9jLF89MHx0aGlzLl9kLHA9MHx0aGlzLl9lLEM9MDtDPDgwO0MrPTEpe3ZhciBLLG5lO0M8MTY/KEs9UShHLHksTCxILGosbGVba1tDXV0sWlswXSxOW0NdKSxuZT1kZShnLFMseCxfLHAsbGVbQltDXV0sV1swXSxWW0NdKSk6QzwzMj8oSz10ZShHLHksTCxILGosbGVba1tDXV0sWlsxXSxO'@;
put 'W0NdKSxuZT1zZShnLFMseCxfLHAsbGVbQltDXV0sV1sxXSxWW0NdKSk6Qzw0OD8oSz1hZShHLHksTCxILGosbGVba1tDXV0sWlsyXSxOW0NdKSxuZT1hZShnLFMseCxfLHAsbGVbQltDXV0sV1syXSxWW0NdKSk6Qzw2ND8oSz1zZShHLHksTCxILGosbGVba1tDXV0sWlszXSxOW0NdKSxuZT10'@;
put 'ZShnLFMseCxfLHAsbGVbQltDXV0sV1szXSxWW0NdKSk6KEs9ZGUoRyx5LEwsSCxqLGxlW2tbQ11dLFpbNF0sTltDXSksbmU9UShnLFMseCxfLHAsbGVbQltDXV0sV1s0XSxWW0NdKSksRz1qLGo9SCxIPXEoTCwxMCksTD15LHk9SyxnPXAscD1fLF89cSh4LDEwKSx4PVMsUz1uZX12YXIgdWU9'@;
put 'dGhpcy5fYitMK198MDt0aGlzLl9iPXRoaXMuX2MrSCtwfDAsdGhpcy5fYz10aGlzLl9kK2orZ3wwLHRoaXMuX2Q9dGhpcy5fZStHK1N8MCx0aGlzLl9lPXRoaXMuX2EreSt4fDAsdGhpcy5fYT11ZX0sei5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Js'@;
put 'b2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9i'@;
put 'bG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBsZT1QLmFsbG9jP1AuYWxsb2MoMjApOm5ldyBQKDIwKTtyZXR1cm4gbGUud3JpdGVJbnQzMkxFKHRoaXMu'@;
put 'X2EsMCksbGUud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksbGUud3JpdGVJbnQzMkxFKHRoaXMuX2MsOCksbGUud3JpdGVJbnQzMkxFKHRoaXMuX2QsMTIpLGxlLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxsZX0sdy5leHBvcnRzPXp9LDk1MDk6KHcsQSxEKT0+e3ZhciBQPUQoODc2NCksVT1Q'@;
put 'LkJ1ZmZlcjtmdW5jdGlvbiBJKGssQil7Zm9yKHZhciBOIGluIGspQltOXT1rW05dfWZ1bmN0aW9uIEUoayxCLE4pe3JldHVybiBVKGssQixOKX1VLmZyb20mJlUuYWxsb2MmJlUuYWxsb2NVbnNhZmUmJlUuYWxsb2NVbnNhZmVTbG93P3cuZXhwb3J0cz1QOihJKFAsQSksQS5CdWZmZXI9RSks'@;
put 'RS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShVLnByb3RvdHlwZSksSShVLEUpLEUuZnJvbT1mdW5jdGlvbihrLEIsTil7aWYoIm51bWJlciI9PXR5cGVvZiBrKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIFUoayxCLE4pfSxFLmFs'@;
put 'bG9jPWZ1bmN0aW9uKGssQixOKXtpZigibnVtYmVyIiE9dHlwZW9mIGspdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3ZhciBWPVUoayk7cmV0dXJuIHZvaWQgMCE9PUI/InN0cmluZyI9PXR5cGVvZiBOP1YuZmlsbChCLE4pOlYuZmlsbChCKTpWLmZp'@;
put 'bGwoMCksVn0sRS5hbGxvY1Vuc2FmZT1mdW5jdGlvbihrKXtpZigibnVtYmVyIiE9dHlwZW9mIGspdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBVKGspfSxFLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihrKXtpZigibnVtYmVyIiE9dHlw'@;
put 'ZW9mIGspdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBQLlNsb3dCdWZmZXIoayl9fSwyMzk5Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFAsVT1EKDQxNTUpLEk9RCg4NzY0KSxFPUkuQnVmZmVyLGs9e307Zm9yKFAgaW4gSSlJLmhh'@;
put 'c093blByb3BlcnR5KFApJiYiU2xvd0J1ZmZlciIhPT1QJiYiQnVmZmVyIiE9PVAmJihrW1BdPUlbUF0pO3ZhciBCPWsuQnVmZmVyPXt9O2ZvcihQIGluIEUpRS5oYXNPd25Qcm9wZXJ0eShQKSYmImFsbG9jVW5zYWZlIiE9PVAmJiJhbGxvY1Vuc2FmZVNsb3ciIT09UCYmKEJbUF09RVtQXSk7'@;
put 'aWYoay5CdWZmZXIucHJvdG90eXBlPUUucHJvdG90eXBlLEIuZnJvbSYmQi5mcm9tIT09VWludDhBcnJheS5mcm9tfHwoQi5mcm9tPWZ1bmN0aW9uKE4sVixaKXtpZigibnVtYmVyIj09dHlwZW9mIE4pdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3Qg'@;
put 'YmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTik7aWYoTiYmdm9pZCAwPT09Ti5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwg'@;
put 'b3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgTik7cmV0dXJuIEUoTixWLFopfSksQi5hbGxvY3x8KEIuYWxsb2M9ZnVuY3Rpb24oTixWLFope2lmKCJudW1iZXIiIT10eXBlb2YgTil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInNpemUiIGFyZ3VtZW50IG11'@;
put 'c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgTik7aWYoTjwwfHxOPj0yMTQ3NDgzNjQ4KXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrTisnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFyIFc9RShOKTtyZXR1cm4gViYmMCE9'@;
put 'PVYubGVuZ3RoPyJzdHJpbmciPT10eXBlb2YgWj9XLmZpbGwoVixaKTpXLmZpbGwoVik6Vy5maWxsKDApLFd9KSwhay5rU3RyaW5nTWF4TGVuZ3RoKXRyeXtrLmtTdHJpbmdNYXhMZW5ndGg9VS5iaW5kaW5nKCJidWZmZXIiKS5rU3RyaW5nTWF4TGVuZ3RofWNhdGNoe31rLmNvbnN0YW50c3x8'@;
put 'KGsuY29uc3RhbnRzPXtNQVhfTEVOR1RIOmsua01heExlbmd0aH0say5rU3RyaW5nTWF4TGVuZ3RoJiYoay5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEg9ay5rU3RyaW5nTWF4TGVuZ3RoKSksdy5leHBvcnRzPWt9LDQxODk6KHcsQSxEKT0+e3ZhciBQPUQoOTUwOSkuQnVmZmVyO2Z1bmN0'@;
put 'aW9uIFUoSSxFKXt0aGlzLl9ibG9jaz1QLmFsbG9jKEkpLHRoaXMuX2ZpbmFsU2l6ZT1FLHRoaXMuX2Jsb2NrU2l6ZT1JLHRoaXMuX2xlbj0wfVUucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihJLEUpeyJzdHJpbmciPT10eXBlb2YgSSYmKEk9UC5mcm9tKEksRT1FfHwidXRmOCIpKTtmb3Io'@;
put 'dmFyIGs9dGhpcy5fYmxvY2ssQj10aGlzLl9ibG9ja1NpemUsTj1JLmxlbmd0aCxWPXRoaXMuX2xlbixaPTA7WjxOOyl7Zm9yKHZhciBXPVYlQix6PU1hdGgubWluKE4tWixCLVcpLHE9MDtxPHo7cSsrKWtbVytxXT1JW1orcV07Wis9eiwoVis9eiklQj09MCYmdGhpcy5fdXBkYXRlKGspfXJl'@;
put 'dHVybiB0aGlzLl9sZW4rPU4sdGhpc30sVS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKEkpe3ZhciBFPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbRV09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxFKzEpLEU+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0'@;
put 'aGlzLl9ibG9jayksdGhpcy5fYmxvY2suZmlsbCgwKSk7dmFyIGs9OCp0aGlzLl9sZW47aWYoazw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKGssdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIEI9KDQyOTQ5NjcyOTUmayk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUlu'@;
put 'dDMyQkUoKGstQikvNDI5NDk2NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShCLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBWPXRoaXMuX2hhc2goKTtyZXR1cm4gST9WLnRvU3RyaW5nKEkpOlZ9LFUucHJv'@;
put 'dG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSx3LmV4cG9ydHM9VX0sOTA3MjoodyxBLEQpPT57dmFyIFA9dy5leHBvcnRzPWZ1bmN0aW9uKFUpe1U9VS50b0xvd2VyQ2FzZSgpO3ZhciBJ'@;
put 'PVBbVV07aWYoIUkpdGhyb3cgbmV3IEVycm9yKFUrIiBpcyBub3Qgc3VwcG9ydGVkICh3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0cykiKTtyZXR1cm4gbmV3IEl9O1Auc2hhPUQoNDQ0OCksUC5zaGExPUQoODMzNiksUC5zaGEyMjQ9RCg4NDMyKSxQLnNoYTI1Nj1EKDc0OTkpLFAuc2hhMzg0PUQo'@;
put 'MTY4NiksUC5zaGE1MTI9RCg3ODE2KX0sNDQ0ODoodyxBLEQpPT57dmFyIFA9RCg1NzE3KSxVPUQoNDE4OSksST1EKDk1MDkpLkJ1ZmZlcixFPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0saz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIEIoKXt0aGlzLmlu'@;
put 'aXQoKSx0aGlzLl93PWssVS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIE4oWil7cmV0dXJuIFo8PDMwfFo+Pj4yfWZ1bmN0aW9uIFYoWixXLHoscSl7cmV0dXJuIDA9PT1aP1cmenx+VyZxOjI9PT1aP1cmenxXJnF8eiZxOldeel5xfVAoQixVKSxCLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFope2Zvcih2YXIgVyx6PXRoaXMuX3cscT0w'@;
put 'fHRoaXMuX2EsUT0wfHRoaXMuX2IsdGU9MHx0aGlzLl9jLGFlPTB8dGhpcy5fZCxzZT0wfHRoaXMuX2UsZGU9MDtkZTwxNjsrK2RlKXpbZGVdPVoucmVhZEludDMyQkUoNCpkZSk7Zm9yKDtkZTw4MDsrK2RlKXpbZGVdPXpbZGUtM11eeltkZS04XV56W2RlLTE0XV56W2RlLTE2XTtmb3IodmFy'@;
put 'IGxlPTA7bGU8ODA7KytsZSl7dmFyIGNlPX5+KGxlLzIwKSxHPTB8KChXPXEpPDw1fFc+Pj4yNykrVihjZSxRLHRlLGFlKStzZSt6W2xlXStFW2NlXTtzZT1hZSxhZT10ZSx0ZT1OKFEpLFE9cSxxPUd9dGhpcy5fYT1xK3RoaXMuX2F8MCx0aGlzLl9iPVErdGhpcy5fYnwwLHRoaXMuX2M9dGUr'@;
put 'dGhpcy5fY3wwLHRoaXMuX2Q9YWUrdGhpcy5fZHwwLHRoaXMuX2U9c2UrdGhpcy5fZXwwfSxCLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBaPUkuYWxsb2NVbnNhZmUoMjApO3JldHVybiBaLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksWi53cml0ZUludDMyQkUoMHx0aGlzLl9i'@;
put 'LDQpLFoud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxaLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLFoud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksWn0sdy5leHBvcnRzPUJ9LDgzMzY6KHcsQSxEKT0+e3ZhciBQPUQoNTcxNyksVT1EKDQxODkpLEk9RCg5NTA5KS5CdWZmZXIsRT1b'@;
put 'MTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGs9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBCKCl7dGhpcy5pbml0KCksdGhpcy5fdz1rLFUuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBOKFcpe3JldHVybiBXPDw1fFc+Pj4yN31mdW5jdGlvbiBWKFcpe3Jl'@;
put 'dHVybiBXPDwzMHxXPj4+Mn1mdW5jdGlvbiBaKFcseixxLFEpe3JldHVybiAwPT09Vz96JnF8fnomUToyPT09Vz96JnF8eiZRfHEmUTp6XnFeUX1QKEIsVSksQi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRo'@;
put 'aXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sQi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihXKXtmb3IodmFyIHoscT10aGlzLl93LFE9MHx0aGlzLl9hLHRlPTB8dGhpcy5fYixhZT0wfHRoaXMuX2Msc2U9MHx0aGlzLl9kLGRl'@;
put 'PTB8dGhpcy5fZSxsZT0wO2xlPDE2OysrbGUpcVtsZV09Vy5yZWFkSW50MzJCRSg0KmxlKTtmb3IoO2xlPDgwOysrbGUpcVtsZV09KHo9cVtsZS0zXV5xW2xlLThdXnFbbGUtMTRdXnFbbGUtMTZdKTw8MXx6Pj4+MzE7Zm9yKHZhciBjZT0wO2NlPDgwOysrY2Upe3ZhciBHPX5+KGNlLzIwKSx5'@;
put 'PU4oUSkrWihHLHRlLGFlLHNlKStkZStxW2NlXStFW0ddfDA7ZGU9c2Usc2U9YWUsYWU9Vih0ZSksdGU9USxRPXl9dGhpcy5fYT1RK3RoaXMuX2F8MCx0aGlzLl9iPXRlK3RoaXMuX2J8MCx0aGlzLl9jPWFlK3RoaXMuX2N8MCx0aGlzLl9kPXNlK3RoaXMuX2R8MCx0aGlzLl9lPWRlK3RoaXMu'@;
put 'X2V8MH0sQi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVz1JLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gVy53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLFcud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxXLndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksVy53cml0ZUludDMyQkUo'@;
put 'MHx0aGlzLl9kLDEyKSxXLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLFd9LHcuZXhwb3J0cz1CfSw4NDMyOih3LEEsRCk9Pnt2YXIgUD1EKDU3MTcpLFU9RCg3NDk5KSxJPUQoNDE4OSksRT1EKDk1MDkpLkJ1ZmZlcixrPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gQigpe3RoaXMuaW5pdCgp'@;
put 'LHRoaXMuX3c9ayxJLmNhbGwodGhpcyw2NCw1Nil9UChCLFUpLEIucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcs'@;
put 'dGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sQi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1FLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gTi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxOLndyaXRlSW50MzJCRSh0'@;
put 'aGlzLl9iLDQpLE4ud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksTi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksTi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksTi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksTi53cml0ZUludDMyQkUodGhpcy5fZywyNCksTn0sdy5leHBvcnRzPUJ9LDc0OTk6'@;
put 'KHcsQSxEKT0+e3ZhciBQPUQoNTcxNyksVT1EKDQxODkpLEk9RCg5NTA5KS5CdWZmZXIsRT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3'@;
put 'MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0'@;
put 'MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEs'@;
put 'MjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2'@;
put 'MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxrPW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gQigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ayxVLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gTihx'@;
put 'LFEsdGUpe3JldHVybiB0ZV5xJihRXnRlKX1mdW5jdGlvbiBWKHEsUSx0ZSl7cmV0dXJuIHEmUXx0ZSYocXxRKX1mdW5jdGlvbiBaKHEpe3JldHVybihxPj4+MnxxPDwzMCleKHE+Pj4xM3xxPDwxOSleKHE+Pj4yMnxxPDwxMCl9ZnVuY3Rpb24gVyhxKXtyZXR1cm4ocT4+PjZ8cTw8MjYpXihx'@;
put 'Pj4+MTF8cTw8MjEpXihxPj4+MjV8cTw8Nyl9ZnVuY3Rpb24geihxKXtyZXR1cm4ocT4+Pjd8cTw8MjUpXihxPj4+MTh8cTw8MTQpXnE+Pj4zfVAoQixVKSxCLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhp'@;
put 'cy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHEpe2Zvcih2YXIgUSx0ZT10aGlz'@;
put 'Ll93LGFlPTB8dGhpcy5fYSxzZT0wfHRoaXMuX2IsZGU9MHx0aGlzLl9jLGxlPTB8dGhpcy5fZCxjZT0wfHRoaXMuX2UsRz0wfHRoaXMuX2YseT0wfHRoaXMuX2csTD0wfHRoaXMuX2gsSD0wO0g8MTY7KytIKXRlW0hdPXEucmVhZEludDMyQkUoNCpIKTtmb3IoO0g8NjQ7KytIKXRlW0hdPTB8'@;
put 'KCgoUT10ZVtILTJdKT4+PjE3fFE8PDE1KV4oUT4+PjE5fFE8PDEzKV5RPj4+MTApK3RlW0gtN10reih0ZVtILTE1XSkrdGVbSC0xNl07Zm9yKHZhciBqPTA7ajw2NDsrK2ope3ZhciBnPUwrVyhjZSkrTihjZSxHLHkpK0Vbal0rdGVbal18MCxTPVooYWUpK1YoYWUsc2UsZGUpfDA7TD15LHk9'@;
put 'RyxHPWNlLGNlPWxlK2d8MCxsZT1kZSxkZT1zZSxzZT1hZSxhZT1nK1N8MH10aGlzLl9hPWFlK3RoaXMuX2F8MCx0aGlzLl9iPXNlK3RoaXMuX2J8MCx0aGlzLl9jPWRlK3RoaXMuX2N8MCx0aGlzLl9kPWxlK3RoaXMuX2R8MCx0aGlzLl9lPWNlK3RoaXMuX2V8MCx0aGlzLl9mPUcrdGhpcy5f'@;
put 'ZnwwLHRoaXMuX2c9eSt0aGlzLl9nfDAsdGhpcy5faD1MK3RoaXMuX2h8MH0sQi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgcT1JLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gcS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxxLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLHEud3JpdGVJ'@;
put 'bnQzMkJFKHRoaXMuX2MsOCkscS53cml0ZUludDMyQkUodGhpcy5fZCwxMikscS53cml0ZUludDMyQkUodGhpcy5fZSwxNikscS53cml0ZUludDMyQkUodGhpcy5fZiwyMCkscS53cml0ZUludDMyQkUodGhpcy5fZywyNCkscS53cml0ZUludDMyQkUodGhpcy5faCwyOCkscX0sdy5leHBvcnRz'@;
put 'PUJ9LDE2ODY6KHcsQSxEKT0+e3ZhciBQPUQoNTcxNyksVT1EKDc4MTYpLEk9RCg0MTg5KSxFPUQoOTUwOSkuQnVmZmVyLGs9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gQigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ayxJLmNhbGwodGhpcywxMjgsMTEyKX1QKEIsVSksQi5wcm90b3R5cGUuaW5p'@;
put 'dD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5f'@;
put 'aGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0'@;
put 'MDc1NDI4LHRoaXN9LEIucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIE49RS5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gVihaLFcseil7Ti53cml0ZUludDMyQkUoWix6KSxOLndyaXRlSW50MzJCRShXLHorNCl9cmV0dXJuIFYodGhpcy5fYWgsdGhpcy5fYWwsMCksVih0aGlzLl9i'@;
put 'aCx0aGlzLl9ibCw4KSxWKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxWKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxWKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxWKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxOfSx3LmV4cG9ydHM9Qn0sNzgxNjoodyxBLEQpPT57dmFyIFA9RCg1NzE3KSxVPUQoNDE4OSks'@;
put 'ST1EKDk1MDkpLkJ1ZmZlcixFPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3'@;
put 'NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4'@;
put 'MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwx'@;
put 'NTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0'@;
put 'NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYx'@;
put 'MDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0'@;
put 'NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgz'@;
put 'MDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQz'@;
put 'NjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5'@;
put 'OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5'@;
put 'NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0saz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBCKCl7dGhpcy5pbml0KCksdGhpcy5fdz1rLFUuY2FsbCh0aGlzLDEyOCwxMTIp'@;
put 'fWZ1bmN0aW9uIE4oc2UsZGUsbGUpe3JldHVybiBsZV5zZSYoZGVebGUpfWZ1bmN0aW9uIFYoc2UsZGUsbGUpe3JldHVybiBzZSZkZXxsZSYoc2V8ZGUpfWZ1bmN0aW9uIFooc2UsZGUpe3JldHVybihzZT4+PjI4fGRlPDw0KV4oZGU+Pj4yfHNlPDwzMCleKGRlPj4+N3xzZTw8MjUpfWZ1bmN0'@;
put 'aW9uIFcoc2UsZGUpe3JldHVybihzZT4+PjE0fGRlPDwxOCleKHNlPj4+MTh8ZGU8PDE0KV4oZGU+Pj45fHNlPDwyMyl9ZnVuY3Rpb24geihzZSxkZSl7cmV0dXJuKHNlPj4+MXxkZTw8MzEpXihzZT4+Pjh8ZGU8PDI0KV5zZT4+Pjd9ZnVuY3Rpb24gcShzZSxkZSl7cmV0dXJuKHNlPj4+MXxk'@;
put 'ZTw8MzEpXihzZT4+Pjh8ZGU8PDI0KV4oc2U+Pj43fGRlPDwyNSl9ZnVuY3Rpb24gUShzZSxkZSl7cmV0dXJuKHNlPj4+MTl8ZGU8PDEzKV4oZGU+Pj4yOXxzZTw8Mylec2U+Pj42fWZ1bmN0aW9uIHRlKHNlLGRlKXtyZXR1cm4oc2U+Pj4xOXxkZTw8MTMpXihkZT4+PjI5fHNlPDwzKV4oc2U+'@;
put 'Pj42fGRlPDwyNil9ZnVuY3Rpb24gYWUoc2UsZGUpe3JldHVybiBzZT4+PjA8ZGU+Pj4wPzE6MH1QKEIsVSksQi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9k'@;
put 'aD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1'@;
put 'NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oc2Upe2Zvcih2YXIgZGU9dGhpcy5fdyxsZT0wfHRoaXMuX2FoLGNlPTB8dGhp'@;
put 'cy5fYmgsRz0wfHRoaXMuX2NoLHk9MHx0aGlzLl9kaCxMPTB8dGhpcy5fZWgsSD0wfHRoaXMuX2ZoLGo9MHx0aGlzLl9naCxnPTB8dGhpcy5faGgsUz0wfHRoaXMuX2FsLHg9MHx0aGlzLl9ibCxfPTB8dGhpcy5fY2wscD0wfHRoaXMuX2RsLEM9MHx0aGlzLl9lbCxLPTB8dGhpcy5fZmwsbmU9'@;
put 'MHx0aGlzLl9nbCx1ZT0wfHRoaXMuX2hsLGhlPTA7aGU8MzI7aGUrPTIpZGVbaGVdPXNlLnJlYWRJbnQzMkJFKDQqaGUpLGRlW2hlKzFdPXNlLnJlYWRJbnQzMkJFKDQqaGUrNCk7Zm9yKDtoZTwxNjA7aGUrPTIpe3ZhciB4ZT1kZVtoZS0zMF0sT2U9ZGVbaGUtMzArMV0sSGU9eih4ZSxPZSks'@;
put 'RWU9cShPZSx4ZSksTGU9USh4ZT1kZVtoZS00XSxPZT1kZVtoZS00KzFdKSxOZT10ZShPZSx4ZSksWGU9ZGVbaGUtMzJdLGF0PWRlW2hlLTMyKzFdLEZlPUVlK2RlW2hlLTE0KzFdfDAsQ2U9SGUrZGVbaGUtMTRdK2FlKEZlLEVlKXwwO0NlPShDZT1DZStMZSthZShGZT1GZStOZXwwLE5lKXww'@;
put 'KStYZSthZShGZT1GZSthdHwwLGF0KXwwLGRlW2hlXT1DZSxkZVtoZSsxXT1GZX1mb3IodmFyIERlPTA7RGU8MTYwO0RlKz0yKXtDZT1kZVtEZV0sRmU9ZGVbRGUrMV07dmFyIFJlPVYobGUsY2UsRyksZXQ9VihTLHgsXyksbnQ9WihsZSxTKSxHZT1aKFMsbGUpLGR0PVcoTCxDKSxUZT1XKEMs'@;
put 'TCksQWU9RVtEZV0sQmU9RVtEZSsxXSxvdD1OKEwsSCxqKSxsdD1OKEMsSyxuZSksQ3Q9dWUrVGV8MCxGdD1nK2R0K2FlKEN0LHVlKXwwO0Z0PShGdD0oRnQ9RnQrb3QrYWUoQ3Q9Q3QrbHR8MCxsdCl8MCkrQWUrYWUoQ3Q9Q3QrQmV8MCxCZSl8MCkrQ2UrYWUoQ3Q9Q3QrRmV8MCxGZSl8MDt2'@;
put 'YXIgUnQ9R2UrZXR8MCxYdD1udCtSZSthZShSdCxHZSl8MDtnPWosdWU9bmUsaj1ILG5lPUssSD1MLEs9QyxMPXkrRnQrYWUoQz1wK0N0fDAscCl8MCx5PUcscD1fLEc9Y2UsXz14LGNlPWxlLHg9UyxsZT1GdCtYdCthZShTPUN0K1J0fDAsQ3QpfDB9dGhpcy5fYWw9dGhpcy5fYWwrU3wwLHRo'@;
put 'aXMuX2JsPXRoaXMuX2JsK3h8MCx0aGlzLl9jbD10aGlzLl9jbCtffDAsdGhpcy5fZGw9dGhpcy5fZGwrcHwwLHRoaXMuX2VsPXRoaXMuX2VsK0N8MCx0aGlzLl9mbD10aGlzLl9mbCtLfDAsdGhpcy5fZ2w9dGhpcy5fZ2wrbmV8MCx0aGlzLl9obD10aGlzLl9obCt1ZXwwLHRoaXMuX2FoPXRo'@;
put 'aXMuX2FoK2xlK2FlKHRoaXMuX2FsLFMpfDAsdGhpcy5fYmg9dGhpcy5fYmgrY2UrYWUodGhpcy5fYmwseCl8MCx0aGlzLl9jaD10aGlzLl9jaCtHK2FlKHRoaXMuX2NsLF8pfDAsdGhpcy5fZGg9dGhpcy5fZGgreSthZSh0aGlzLl9kbCxwKXwwLHRoaXMuX2VoPXRoaXMuX2VoK0wrYWUodGhp'@;
put 'cy5fZWwsQyl8MCx0aGlzLl9maD10aGlzLl9maCtIK2FlKHRoaXMuX2ZsLEspfDAsdGhpcy5fZ2g9dGhpcy5fZ2graithZSh0aGlzLl9nbCxuZSl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK2FlKHRoaXMuX2hsLHVlKXwwfSxCLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBzZT1JLmFs'@;
put 'bG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBkZShsZSxjZSxHKXtzZS53cml0ZUludDMyQkUobGUsRyksc2Uud3JpdGVJbnQzMkJFKGNlLEcrNCl9cmV0dXJuIGRlKHRoaXMuX2FoLHRoaXMuX2FsLDApLGRlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGRlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxkZSh0'@;
put 'aGlzLl9kaCx0aGlzLl9kbCwyNCksZGUodGhpcy5fZWgsdGhpcy5fZWwsMzIpLGRlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxkZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksZGUodGhpcy5faGgsdGhpcy5faGwsNTYpLHNlfSx3LmV4cG9ydHM9Qn0sMjgzMDoodyxBLEQpPT57dy5leHBvcnRzPVU7'@;
put 'dmFyIFA9RCg3MTg3KS5FdmVudEVtaXR0ZXI7ZnVuY3Rpb24gVSgpe1AuY2FsbCh0aGlzKX1EKDU3MTcpKFUsUCksVS5SZWFkYWJsZT1EKDk0ODEpLFUuV3JpdGFibGU9RCg0MjI5KSxVLkR1cGxleD1EKDY3NTMpLFUuVHJhbnNmb3JtPUQoNDYwNSksVS5QYXNzVGhyb3VnaD1EKDI3MjUpLFUu'@;
put 'ZmluaXNoZWQ9RCg4NjEwKSxVLnBpcGVsaW5lPUQoOTk0NiksVS5TdHJlYW09VSxVLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEksRSl7dmFyIGs9dGhpcztmdW5jdGlvbiBCKFEpe0kud3JpdGFibGUmJiExPT09SS53cml0ZShRKSYmay5wYXVzZSYmay5wYXVzZSgpfWZ1bmN0aW9uIE4oKXtr'@;
put 'LnJlYWRhYmxlJiZrLnJlc3VtZSYmay5yZXN1bWUoKX1rLm9uKCJkYXRhIixCKSxJLm9uKCJkcmFpbiIsTiksSS5faXNTdGRpb3x8RSYmITE9PT1FLmVuZHx8KGsub24oImVuZCIsWiksay5vbigiY2xvc2UiLFcpKTt2YXIgVj0hMTtmdW5jdGlvbiBaKCl7Vnx8KFY9ITAsSS5lbmQoKSl9ZnVu'@;
put 'Y3Rpb24gVygpe1Z8fChWPSEwLCJmdW5jdGlvbiI9PXR5cGVvZiBJLmRlc3Ryb3kmJkkuZGVzdHJveSgpKX1mdW5jdGlvbiB6KFEpe2lmKHEoKSwwPT09UC5saXN0ZW5lckNvdW50KHRoaXMsImVycm9yIikpdGhyb3cgUX1mdW5jdGlvbiBxKCl7ay5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsQiks'@;
put 'SS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLE4pLGsucmVtb3ZlTGlzdGVuZXIoImVuZCIsWiksay5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLFcpLGsucmVtb3ZlTGlzdGVuZXIoImVycm9yIix6KSxJLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIseiksay5yZW1vdmVMaXN0ZW5lcigiZW5kIixxKSxr'@;
put 'LnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIscSksSS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHEpfXJldHVybiBrLm9uKCJlcnJvciIseiksSS5vbigiZXJyb3IiLHopLGsub24oImVuZCIscSksay5vbigiY2xvc2UiLHEpLEkub24oImNsb3NlIixxKSxJLmVtaXQoInBpcGUiLGspLEl9fSwyNTUz'@;
put 'Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg5NTA5KS5CdWZmZXIsVT1QLmlzRW5jb2Rpbmd8fGZ1bmN0aW9uKHEpe3N3aXRjaCgocT0iIitxKSYmcS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6'@;
put 'Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIEkocSl7dmFyIFE7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9ZnVuY3Rpb24odGUpe3ZhciBhZT1m'@;
put 'dW5jdGlvbihzZSl7aWYoIXNlKXJldHVybiJ1dGY4Ijtmb3IodmFyIGRlOzspc3dpdGNoKHNlKXtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiJ1dGY4IjtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuInV0ZjE2bGUiO2Nhc2Ui'@;
put 'bGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuImxhdGluMSI7Y2FzZSJiYXNlNjQiOmNhc2UiYXNjaWkiOmNhc2UiaGV4IjpyZXR1cm4gc2U7ZGVmYXVsdDppZihkZSlyZXR1cm47c2U9KCIiK3NlKS50b0xvd2VyQ2FzZSgpLGRlPSEwfX0odGUpO2lmKCJzdHJpbmciIT10eXBlb2YgYWUmJihQ'@;
put 'LmlzRW5jb2Rpbmc9PT1VfHwhVSh0ZSkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0ZSk7cmV0dXJuIGFlfHx0ZX0ocSksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Qix0aGlzLmVuZD1OLFE9NDticmVhaztjYXNlInV0ZjgiOnRoaXMuZmls'@;
put 'bExhc3Q9ayxRPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1WLHRoaXMuZW5kPVosUT0zO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9Vyx2b2lkKHRoaXMuZW5kPXopfXRoaXMubGFzdE5lZWQ9MCx0aGlzLmxhc3RUb3RhbD0wLHRoaXMubGFzdENoYXI9UC5hbGxvY1Vu'@;
put 'c2FmZShRKX1mdW5jdGlvbiBFKHEpe3JldHVybiBxPD0xMjc/MDpxPj41PT02PzI6cT4+ND09MTQ/MzpxPj4zPT0zMD80OnE+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24gayhxKXt2YXIgUT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLHRlPWZ1bmN0aW9uKGFlLHNlLGRlKXtpZigxMjghPSgx'@;
put 'OTImc2VbMF0pKXJldHVybiBhZS5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKGFlLmxhc3ROZWVkPjEmJnNlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImc2VbMV0pKXJldHVybiBhZS5sYXN0TmVlZD0xLCJcdWZmZmQiO2lmKGFlLmxhc3ROZWVkPjImJnNlLmxlbmd0aD4yJiYxMjghPSgxOTImc2Vb'@;
put 'Ml0pKXJldHVybiBhZS5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxxKTtyZXR1cm4gdm9pZCAwIT09dGU/dGU6dGhpcy5sYXN0TmVlZDw9cS5sZW5ndGg/KHEuY29weSh0aGlzLmxhc3RDaGFyLFEsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2Rp'@;
put 'bmcsMCx0aGlzLmxhc3RUb3RhbCkpOihxLmNvcHkodGhpcy5sYXN0Q2hhcixRLDAscS5sZW5ndGgpLHZvaWQodGhpcy5sYXN0TmVlZC09cS5sZW5ndGgpKX1mdW5jdGlvbiBCKHEsUSl7aWYoKHEubGVuZ3RoLVEpJTI9PTApe3ZhciB0ZT1xLnRvU3RyaW5nKCJ1dGYxNmxlIixRKTtpZih0ZSl7'@;
put 'dmFyIGFlPXRlLmNoYXJDb2RlQXQodGUubGVuZ3RoLTEpO2lmKGFlPj01NTI5NiYmYWU8PTU2MzE5KXJldHVybiB0aGlzLmxhc3ROZWVkPTIsdGhpcy5sYXN0VG90YWw9NCx0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdLHRlLnNs'@;
put 'aWNlKDAsLTEpfXJldHVybiB0ZX1yZXR1cm4gdGhpcy5sYXN0TmVlZD0xLHRoaXMubGFzdFRvdGFsPTIsdGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdLHEudG9TdHJpbmcoInV0ZjE2bGUiLFEscS5sZW5ndGgtMSl9ZnVuY3Rpb24gTihxKXt2YXIgUT1xJiZxLmxlbmd0aD90aGlzLndy'@;
put 'aXRlKHEpOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP1ErdGhpcy5sYXN0Q2hhci50b1N0cmluZygidXRmMTZsZSIsMCx0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkKTpRfWZ1bmN0aW9uIFYocSxRKXt2YXIgdGU9KHEubGVuZ3RoLVEpJTM7cmV0dXJuIDA9PT10ZT9xLnRvU3RyaW5nKCJi'@;
put 'YXNlNjQiLFEpOih0aGlzLmxhc3ROZWVkPTMtdGUsdGhpcy5sYXN0VG90YWw9MywxPT09dGU/dGhpcy5sYXN0Q2hhclswXT1xW3EubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPXFbcS5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1xW3EubGVuZ3RoLTFdKSxxLnRvU3RyaW5nKCJiYXNl'@;
put 'NjQiLFEscS5sZW5ndGgtdGUpKX1mdW5jdGlvbiBaKHEpe3ZhciBRPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/USt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpRfWZ1bmN0aW9uIFcocSl7cmV0dXJu'@;
put 'IHEudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24geihxKXtyZXR1cm4gcSYmcS5sZW5ndGg/dGhpcy53cml0ZShxKToiIn1BLlN0cmluZ0RlY29kZXI9SSxJLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihxKXtpZigwPT09cS5sZW5ndGgpcmV0dXJuIiI7dmFyIFEsdGU7aWYodGhp'@;
put 'cy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KFE9dGhpcy5maWxsTGFzdChxKSkpcmV0dXJuIiI7dGU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSB0ZT0wO3JldHVybiB0ZTxxLmxlbmd0aD9RP1ErdGhpcy50ZXh0KHEsdGUpOnRoaXMudGV4dChxLHRlKTpRfHwiIn0sSS5wcm90'@;
put 'b3R5cGUuZW5kPWZ1bmN0aW9uKHEpe3ZhciBRPXEmJnEubGVuZ3RoP3RoaXMud3JpdGUocSk6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/USsiXHVmZmZkIjpRfSxJLnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uKHEsUSl7dmFyIHRlPWZ1bmN0aW9uKHNlLGRlLGxlKXt2YXIgY2U9ZGUubGVuZ3Ro'@;
put 'LTE7aWYoY2U8bGUpcmV0dXJuIDA7dmFyIEc9RShkZVtjZV0pO3JldHVybiBHPj0wPyhHPjAmJihzZS5sYXN0TmVlZD1HLTEpLEcpOi0tY2U8bGV8fC0yPT09Rz8wOihHPUUoZGVbY2VdKSk+PTA/KEc+MCYmKHNlLmxhc3ROZWVkPUctMiksRyk6LS1jZTxsZXx8LTI9PT1HPzA6KEc9RShkZVtj'@;
put 'ZV0pKT49MD8oRz4wJiYoMj09PUc/Rz0wOnNlLmxhc3ROZWVkPUctMyksRyk6MH0odGhpcyxxLFEpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBxLnRvU3RyaW5nKCJ1dGY4IixRKTt0aGlzLmxhc3RUb3RhbD10ZTt2YXIgYWU9cS5sZW5ndGgtKHRlLXRoaXMubGFzdE5lZWQpO3JldHVybiBx'@;
put 'LmNvcHkodGhpcy5sYXN0Q2hhciwwLGFlKSxxLnRvU3RyaW5nKCJ1dGY4IixRLGFlKX0sSS5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24ocSl7aWYodGhpcy5sYXN0TmVlZDw9cS5sZW5ndGgpcmV0dXJuIHEuY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5l'@;
put 'ZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7cS5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHEubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1xLmxlbmd0aH19LDc4'@;
put 'NTc6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBQPUQoMzY4OSksVT1EKDQ1NjQpLEk9RCg3NTIpLEU9RCgyMjI0KS55LGs9RCg1NzYxKS5tLEI9RCg4OTcxKS5VLE49RCg3NjUyKSxWPUQoNDU2KSx7ZnJvbUNhbGxiYWNrOlp9PUQoNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6'@;
put 'V309RCgxMjY5KSx6PS9eW1x4MjFceDIzLVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLHE9L1tceDAwLVx4MUZdLyxRPVsiXG4iLCJcciIsIlwwIl0sdGU9L1tceDIwLVx4M0FceDNDLVx4N0VdKy8sYWU9L1tceDA5XHgyMC1ceDJGXHgzQi1ceDQwXHg1Qi1ceDYwXHg3Qi1c'@;
put 'eDdFXS8sc2U9e2phbjowLGZlYjoxLG1hcjoyLGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LGRlPTIxNDc0ODM2NDdlMyxsZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9u'@;
put 'ZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJub25lIic7ZnVuY3Rpb24gY2UoWGUpe04udmFsaWRhdGUoTi5pc05vbkVtcHR5U3RyaW5nKFhlKSxYZSk7Y29uc3QgYXQ9U3RyaW5nKFhlKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PWF0fHwibGF4Ij09PWF0fHwic3RyaWN0Ij09PWF0'@;
put 'P2F0Om51bGx9Y29uc3QgRz1PYmplY3QuZnJlZXplKHtTSUxFTlQ6InNpbGVudCIsU1RSSUNUOiJzdHJpY3QiLERJU0FCTEVEOiJ1bnNhZmUtZGlzYWJsZWQifSkseT0vKD86Xig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxk'@;
put 'XGR8WzEtOV1cZHxcZCkpezN9JCl8KD86Xig/Oig/OlthLWZcZF17MSw0fTopezd9KD86W2EtZlxkXXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezZ9KD86KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxk'@;
put 'fFxkKSl7M318OlthLWZcZF17MSw0fXw6KXwoPzpbYS1mXGRdezEsNH06KXs1fSg/OjooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDJ9fDopfCg/Olth'@;
put 'LWZcZF17MSw0fTopezR9KD86KD86OlthLWZcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDN9fDopfCg/OlthLWZcZF17MSw0'@;
put 'fTopezN9KD86KD86OlthLWZcZF17MSw0fSl7MCwyfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDR9fDopfCg/OlthLWZcZF17MSw0fTopezJ9KD86'@;
put 'KD86OlthLWZcZF17MSw0fSl7MCwzfTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDV9fDopfCg/OlthLWZcZF17MSw0fTopezF9KD86KD86OlthLWZc'@;
put 'ZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXwoPzo6W2EtZlxkXXsxLDR9KXsxLDZ9fDopfCg/OjooPzooPzo6W2EtZlxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18'@;
put 'MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsN318OikpKSQpLyxMPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8'@;
put 'XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0'@;
put 'fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzoo'@;
put 'Pzo6W2EtZkEtRlxcZF17MSw0fSl7MCwxfTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxc'@;
put 'ZF17MSw0fTopezN9KD86KD86OlthLWZBLUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6'@;
put 'KXxcbig/OlthLWZBLUZcXGRdezEsNH06KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZc'@;
put 'XGRdezEsNH0pezEsNX18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkp'@;
put 'ezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318'@;
put 'KD86OlthLWZBLUZcXGRdezEsNH0pezEsN318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksSD1uZXcgUmVnRXhwKGBeJHtMfSRgKTtmdW5jdGlvbiBqKFhlLGF0LEZlLENlKXtsZXQg'@;
put 'RGU9MDtmb3IoO0RlPFhlLmxlbmd0aDspe2NvbnN0IFJlPVhlLmNoYXJDb2RlQXQoRGUpO2lmKFJlPD00N3x8UmU+PTU4KWJyZWFrO0RlKyt9cmV0dXJuIERlPGF0fHxEZT5GZT9udWxsOkNlfHxEZT09WGUubGVuZ3RoP3BhcnNlSW50KFhlLnN1YnN0cigwLERlKSwxMCk6bnVsbH1mdW5jdGlv'@;
put 'biBnKFhlKXtjb25zdCBhdD1YZS5zcGxpdCgiOiIpLEZlPVswLDAsMF07aWYoMyE9PWF0Lmxlbmd0aClyZXR1cm4gbnVsbDtmb3IobGV0IENlPTA7Q2U8MztDZSsrKXtjb25zdCBSZT1qKGF0W0NlXSwxLDIsMj09Q2UpO2lmKG51bGw9PT1SZSlyZXR1cm4gbnVsbDtGZVtDZV09UmV9cmV0dXJu'@;
put 'IEZlfWZ1bmN0aW9uIFMoWGUpe1hlPVN0cmluZyhYZSkuc3Vic3RyKDAsMykudG9Mb3dlckNhc2UoKTtjb25zdCBhdD1zZVtYZV07cmV0dXJuIGF0Pj0wP2F0Om51bGx9ZnVuY3Rpb24geChYZSl7aWYoIVhlKXJldHVybjtjb25zdCBhdD1YZS5zcGxpdChhZSk7aWYoIWF0KXJldHVybjtsZXQg'@;
put 'RmU9bnVsbCxDZT1udWxsLERlPW51bGwsUmU9bnVsbCxldD1udWxsLG50PW51bGw7Zm9yKGxldCBHZT0wO0dlPGF0Lmxlbmd0aDtHZSsrKXtjb25zdCBkdD1hdFtHZV0udHJpbSgpO2lmKCFkdC5sZW5ndGgpY29udGludWU7bGV0IFRlO251bGw9PT1EZSYmKFRlPWcoZHQpLFRlKT8oRmU9VGVb'@;
put 'MF0sQ2U9VGVbMV0sRGU9VGVbMl0pOm51bGwhPT1SZXx8KFRlPWooZHQsMSwyLCEwKSxudWxsPT09VGUpP251bGwhPT1ldHx8KFRlPVMoZHQpLG51bGw9PT1UZSk/bnVsbD09PW50JiYoVGU9aihkdCwyLDQsITApLG51bGwhPT1UZSYmKG50PVRlLG50Pj03MCYmbnQ8PTk5P250Kz0xOTAwOm50'@;
put 'Pj0wJiZudDw9NjkmJihudCs9MmUzKSkpOmV0PVRlOlJlPVRlfXJldHVybiBudWxsPT09UmV8fG51bGw9PT1ldHx8bnVsbD09PW50fHxudWxsPT09RGV8fFJlPDF8fFJlPjMxfHxudDwxNjAxfHxGZT4yM3x8Q2U+NTl8fERlPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhudCxldCxSZSxG'@;
put 'ZSxDZSxEZSkpfWZ1bmN0aW9uIF8oWGUpe3JldHVybiBOLnZhbGlkYXRlKE4uaXNEYXRlKFhlKSxYZSksWGUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiBwKFhlKXtyZXR1cm4gbnVsbD09WGU/bnVsbDooWGU9WGUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLEgudGVzdChYZSkmJihYZT1YZS5y'@;
put 'ZXBsYWNlKCJbIiwiIikucmVwbGFjZSgiXSIsIiIpKSxQJiYvW15cdTAwMDEtXHUwMDdmXS8udGVzdChYZSkmJihYZT1QLnRvQVNDSUkoWGUpKSxYZS50b0xvd2VyQ2FzZSgpKX1mdW5jdGlvbiBDKFhlLGF0LEZlKXtpZihudWxsPT1YZXx8bnVsbD09YXQpcmV0dXJuIG51bGw7aWYoITEhPT1G'@;
put 'ZSYmKFhlPXAoWGUpLGF0PXAoYXQpKSxYZT09YXQpcmV0dXJuITA7Y29uc3QgQ2U9WGUubGFzdEluZGV4T2YoYXQpO3JldHVybiEoQ2U8PTB8fFhlLmxlbmd0aCE9PWF0Lmxlbmd0aCtDZXx8Ii4iIT09WGUuc3Vic3RyKENlLTEsMSl8fHkudGVzdChYZSkpfWZ1bmN0aW9uIEsoWGUpe2lmKCFY'@;
put 'ZXx8Ii8iIT09WGUuc3Vic3RyKDAsMSkpcmV0dXJuIi8iO2lmKCIvIj09PVhlKXJldHVybiBYZTtjb25zdCBhdD1YZS5sYXN0SW5kZXhPZigiLyIpO3JldHVybiAwPT09YXQ/Ii8iOlhlLnNsaWNlKDAsYXQpfWZ1bmN0aW9uIHVlKFhlLGF0KXtpZihhdCYmIm9iamVjdCI9PXR5cGVvZiBhdHx8'@;
put 'KGF0PXt9KSxOLmlzRW1wdHlTdHJpbmcoWGUpfHwhTi5pc1N0cmluZyhYZSkpcmV0dXJuIG51bGw7Y29uc3QgRmU9KFhlPVhlLnRyaW0oKSkuaW5kZXhPZigiOyIpLENlPWZ1bmN0aW9uIG5lKFhlLGF0KXtYZT1mdW5jdGlvbihldCl7aWYoTi5pc0VtcHR5U3RyaW5nKGV0KSlyZXR1cm4gZXQ7'@;
put 'Zm9yKGxldCBudD0wO250PFEubGVuZ3RoO250Kyspe2NvbnN0IEdlPWV0LmluZGV4T2YoUVtudF0pOy0xIT09R2UmJihldD1ldC5zdWJzdHIoMCxHZSkpfXJldHVybiBldH0oWGUpLE4udmFsaWRhdGUoTi5pc1N0cmluZyhYZSksWGUpO2xldCBGZSxDZSxEZT1YZS5pbmRleE9mKCI9Iik7aWYo'@;
put 'YXQpMD09PURlJiYoRGU9KFhlPVhlLnN1YnN0cigxKSkuaW5kZXhPZigiPSIpKTtlbHNlIGlmKERlPD0wKXJldHVybjtpZihEZTw9MD8oRmU9IiIsQ2U9WGUudHJpbSgpKTooRmU9WGUuc3Vic3RyKDAsRGUpLnRyaW0oKSxDZT1YZS5zdWJzdHIoRGUrMSkudHJpbSgpKSxxLnRlc3QoRmUpfHxx'@;
put 'LnRlc3QoQ2UpKXJldHVybjtjb25zdCBSZT1uZXcgTGU7cmV0dXJuIFJlLmtleT1GZSxSZS52YWx1ZT1DZSxSZX0oLTE9PT1GZT9YZTpYZS5zdWJzdHIoMCxGZSksISFhdC5sb29zZSk7aWYoIUNlKXJldHVybjtpZigtMT09PUZlKXJldHVybiBDZTtjb25zdCBEZT1YZS5zbGljZShGZSsxKS50'@;
put 'cmltKCk7aWYoMD09PURlLmxlbmd0aClyZXR1cm4gQ2U7Y29uc3QgUmU9RGUuc3BsaXQoIjsiKTtmb3IoO1JlLmxlbmd0aDspe2NvbnN0IGV0PVJlLnNoaWZ0KCkudHJpbSgpO2lmKDA9PT1ldC5sZW5ndGgpY29udGludWU7Y29uc3QgbnQ9ZXQuaW5kZXhPZigiPSIpO2xldCBHZSxkdDtzd2l0'@;
put 'Y2goLTE9PT1udD8oR2U9ZXQsZHQ9bnVsbCk6KEdlPWV0LnN1YnN0cigwLG50KSxkdD1ldC5zdWJzdHIobnQrMSkpLEdlPUdlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGR0JiYoZHQ9ZHQudHJpbSgpKSxHZSl7Y2FzZSJleHBpcmVzIjppZihkdCl7Y29uc3QgVGU9eChkdCk7VGUmJihDZS5leHBp'@;
put 'cmVzPVRlKX1icmVhaztjYXNlIm1heC1hZ2UiOmlmKGR0JiYvXi0/WzAtOV0rJC8udGVzdChkdCkpe2NvbnN0IFRlPXBhcnNlSW50KGR0LDEwKTtDZS5zZXRNYXhBZ2UoVGUpfWJyZWFrO2Nhc2UiZG9tYWluIjppZihkdCl7Y29uc3QgVGU9ZHQudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpO1Rl'@;
put 'JiYoQ2UuZG9tYWluPVRlLnRvTG93ZXJDYXNlKCkpfWJyZWFrO2Nhc2UicGF0aCI6Q2UucGF0aD1kdCYmIi8iPT09ZHRbMF0/ZHQ6bnVsbDticmVhaztjYXNlInNlY3VyZSI6Q2Uuc2VjdXJlPSEwO2JyZWFrO2Nhc2UiaHR0cG9ubHkiOkNlLmh0dHBPbmx5PSEwO2JyZWFrO2Nhc2Uic2FtZXNp'@;
put 'dGUiOnN3aXRjaChkdD9kdC50b0xvd2VyQ2FzZSgpOiIiKXtjYXNlInN0cmljdCI6Q2Uuc2FtZVNpdGU9InN0cmljdCI7YnJlYWs7Y2FzZSJsYXgiOkNlLnNhbWVTaXRlPSJsYXgiO2JyZWFrO2Nhc2Uibm9uZSI6Q2Uuc2FtZVNpdGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6Q2Uuc2FtZVNpdGU9'@;
put 'dm9pZCAwfWJyZWFrO2RlZmF1bHQ6Q2UuZXh0ZW5zaW9ucz1DZS5leHRlbnNpb25zfHxbXSxDZS5leHRlbnNpb25zLnB1c2goZXQpfX1yZXR1cm4gQ2V9ZnVuY3Rpb24gaGUoWGUpe2xldCBhdDt0cnl7YXQ9SlNPTi5wYXJzZShYZSl9Y2F0Y2goRmUpe3JldHVybiBGZX1yZXR1cm4gYXR9ZnVu'@;
put 'Y3Rpb24geGUoWGUpe2lmKCFYZXx8Ti5pc0VtcHR5U3RyaW5nKFhlKSlyZXR1cm4gbnVsbDtsZXQgYXQ7aWYoInN0cmluZyI9PXR5cGVvZiBYZSl7aWYoYXQ9aGUoWGUpLGF0IGluc3RhbmNlb2YgRXJyb3IpcmV0dXJuIG51bGx9ZWxzZSBhdD1YZTtjb25zdCBGZT1uZXcgTGU7Zm9yKGxldCBD'@;
put 'ZT0wO0NlPExlLnNlcmlhbGl6YWJsZVByb3BlcnRpZXMubGVuZ3RoO0NlKyspe2NvbnN0IERlPUxlLnNlcmlhbGl6YWJsZVByb3BlcnRpZXNbQ2VdO3ZvaWQgMCE9PWF0W0RlXSYmYXRbRGVdIT09RWVbRGVdJiYoRmVbRGVdPSJleHBpcmVzIj09PURlfHwiY3JlYXRpb24iPT09RGV8fCJsYXN0'@;
put 'QWNjZXNzZWQiPT09RGU/bnVsbD09PWF0W0RlXT9udWxsOiJJbmZpbml0eSI9PWF0W0RlXT8iSW5maW5pdHkiOm5ldyBEYXRlKGF0W0RlXSk6YXRbRGVdKX1yZXR1cm4gRmV9ZnVuY3Rpb24gT2UoWGUsYXQpe04udmFsaWRhdGUoTi5pc09iamVjdChYZSksWGUpLE4udmFsaWRhdGUoTi5pc09i'@;
put 'amVjdChhdCksYXQpO2xldCBGZT0wO3JldHVybiBGZT0oYXQucGF0aD9hdC5wYXRoLmxlbmd0aDowKS0oWGUucGF0aD9YZS5wYXRoLmxlbmd0aDowKSwwIT09RmV8fChGZT0oWGUuY3JlYXRpb24/WGUuY3JlYXRpb24uZ2V0VGltZSgpOmRlKS0oYXQuY3JlYXRpb24/YXQuY3JlYXRpb24uZ2V0'@;
put 'VGltZSgpOmRlKSwwIT09RmV8fChGZT1YZS5jcmVhdGlvbkluZGV4LWF0LmNyZWF0aW9uSW5kZXgpKSxGZX1mdW5jdGlvbiBIZShYZSl7aWYoWGUgaW5zdGFuY2VvZiBPYmplY3QpcmV0dXJuIFhlO3RyeXtYZT1kZWNvZGVVUkkoWGUpfWNhdGNoe31yZXR1cm4gVShYZSl9Y29uc3QgRWU9e2tl'@;
put 'eToiIix2YWx1ZToiIixleHBpcmVzOiJJbmZpbml0eSIsbWF4QWdlOm51bGwsZG9tYWluOm51bGwscGF0aDpudWxsLHNlY3VyZTohMSxodHRwT25seTohMSxleHRlbnNpb25zOm51bGwsaG9zdE9ubHk6bnVsbCxwYXRoSXNEZWZhdWx0Om51bGwsY3JlYXRpb246bnVsbCxsYXN0QWNjZXNzZWQ6'@;
put 'bnVsbCxzYW1lU2l0ZTp2b2lkIDB9O2NsYXNzIExle2NvbnN0cnVjdG9yKGF0PXt9KXtjb25zdCBGZT1XKCk7RmUmJih0aGlzW0ZlXT10aGlzLmluc3BlY3QpLE9iamVjdC5hc3NpZ24odGhpcyxFZSxhdCksdGhpcy5jcmVhdGlvbj10aGlzLmNyZWF0aW9ufHxuZXcgRGF0ZSxPYmplY3QuZGVm'@;
put 'aW5lUHJvcGVydHkodGhpcywiY3JlYXRpb25JbmRleCIse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLHZhbHVlOisrTGUuY29va2llc0NyZWF0ZWR9KX1pbnNwZWN0KCl7Y29uc3QgYXQ9RGF0ZS5ub3coKSxGZT1udWxsIT10aGlzLmhvc3RPbmx5P3RoaXMuaG9z'@;
put 'dE9ubHk6Ij8iLENlPXRoaXMuY3JlYXRpb24/YXQtdGhpcy5jcmVhdGlvbi5nZXRUaW1lKCkrIm1zIjoiPyIsRGU9dGhpcy5sYXN0QWNjZXNzZWQ/YXQtdGhpcy5sYXN0QWNjZXNzZWQuZ2V0VGltZSgpKyJtcyI6Ij8iO3JldHVybmBDb29raWU9IiR7dGhpcy50b1N0cmluZygpfTsgaG9zdE9u'@;
put 'bHk9JHtGZX07IGFBZ2U9JHtEZX07IGNBZ2U9JHtDZX0iYH10b0pTT04oKXtjb25zdCBhdD17fTtmb3IoY29uc3QgRmUgb2YgTGUuc2VyaWFsaXphYmxlUHJvcGVydGllcyl0aGlzW0ZlXSE9PUVlW0ZlXSYmKCJleHBpcmVzIj09PUZlfHwiY3JlYXRpb24iPT09RmV8fCJsYXN0QWNjZXNzZWQi'@;
put 'PT09RmU/YXRbRmVdPW51bGw9PT10aGlzW0ZlXT9udWxsOiJJbmZpbml0eSI9PXRoaXNbRmVdPyJJbmZpbml0eSI6dGhpc1tGZV0udG9JU09TdHJpbmcoKToibWF4QWdlIj09PUZlP251bGwhPT10aGlzW0ZlXSYmKGF0W0ZlXT10aGlzW0ZlXT09MS8wfHx0aGlzW0ZlXT09LTEvMD90aGlzW0Zl'@;
put 'XS50b1N0cmluZygpOnRoaXNbRmVdKTp0aGlzW0ZlXSE9PUVlW0ZlXSYmKGF0W0ZlXT10aGlzW0ZlXSkpO3JldHVybiBhdH1jbG9uZSgpe3JldHVybiB4ZSh0aGlzLnRvSlNPTigpKX12YWxpZGF0ZSgpe2lmKCF6LnRlc3QodGhpcy52YWx1ZSl8fCEodGhpcy5leHBpcmVzPT0xLzB8fHRoaXMu'@;
put 'ZXhwaXJlcyBpbnN0YW5jZW9mIERhdGV8fHgodGhpcy5leHBpcmVzKSl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhdGUudGVzdCh0aGlzLnBhdGgpKXJldHVybiExO2NvbnN0IGF0PXRoaXMuY2RvbWFpbigpO3JldHVybiEoYXQmJihhdC5t'@;
put 'YXRjaCgvXC4kLyl8fG51bGw9PUkuZ2V0UHVibGljU3VmZml4KGF0KSkpfXNldEV4cGlyZXMoYXQpe3RoaXMuZXhwaXJlcz1hdCBpbnN0YW5jZW9mIERhdGU/YXQ6eChhdCl8fCJJbmZpbml0eSJ9c2V0TWF4QWdlKGF0KXt0aGlzLm1heEFnZT1hdD09PTEvMHx8YXQ9PT0tMS8wP2F0LnRvU3Ry'@;
put 'aW5nKCk6YXR9Y29va2llU3RyaW5nKCl7bGV0IGF0PXRoaXMudmFsdWU7cmV0dXJuIG51bGw9PWF0JiYoYXQ9IiIpLCIiPT09dGhpcy5rZXk/YXQ6YCR7dGhpcy5rZXl9PSR7YXR9YH10b1N0cmluZygpe2xldCBhdD10aGlzLmNvb2tpZVN0cmluZygpO2lmKHRoaXMuZXhwaXJlcyE9MS8wJiYo'@;
put 'dGhpcy5leHBpcmVzIGluc3RhbmNlb2YgRGF0ZT9hdCs9YDsgRXhwaXJlcz0ke18odGhpcy5leHBpcmVzKX1gOmF0Kz1gOyBFeHBpcmVzPSR7dGhpcy5leHBpcmVzfWApLG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZSE9MS8wJiYoYXQrPWA7IE1heC1BZ2U9JHt0aGlzLm1heEFnZX1g'@;
put 'KSx0aGlzLmRvbWFpbiYmIXRoaXMuaG9zdE9ubHkmJihhdCs9YDsgRG9tYWluPSR7dGhpcy5kb21haW59YCksdGhpcy5wYXRoJiYoYXQrPWA7IFBhdGg9JHt0aGlzLnBhdGh9YCksdGhpcy5zZWN1cmUmJihhdCs9IjsgU2VjdXJlIiksdGhpcy5odHRwT25seSYmKGF0Kz0iOyBIdHRwT25seSIp'@;
put 'LHRoaXMuc2FtZVNpdGUmJiJub25lIiE9PXRoaXMuc2FtZVNpdGUpe2NvbnN0IEZlPUxlLnNhbWVTaXRlQ2Fub25pY2FsW3RoaXMuc2FtZVNpdGUudG9Mb3dlckNhc2UoKV07YXQrPWA7IFNhbWVTaXRlPSR7RmV8fHRoaXMuc2FtZVNpdGV9YH1yZXR1cm4gdGhpcy5leHRlbnNpb25zJiZ0aGlz'@;
put 'LmV4dGVuc2lvbnMuZm9yRWFjaChGZT0+e2F0Kz1gOyAke0ZlfWB9KSxhdH1UVEwoYXQpe2lmKG51bGwhPXRoaXMubWF4QWdlKXJldHVybiB0aGlzLm1heEFnZTw9MD8wOjFlMyp0aGlzLm1heEFnZTtsZXQgRmU9dGhpcy5leHBpcmVzO3JldHVybiBGZSE9MS8wPyhGZSBpbnN0YW5jZW9mIERh'@;
put 'dGV8fChGZT14KEZlKXx8MS8wKSxGZT09MS8wPzEvMDpGZS5nZXRUaW1lKCktKGF0fHxEYXRlLm5vdygpKSk6MS8wfWV4cGlyeVRpbWUoYXQpe2lmKG51bGwhPXRoaXMubWF4QWdlKXtjb25zdCBDZT10aGlzLm1heEFnZTw9MD8tMS8wOjFlMyp0aGlzLm1heEFnZTtyZXR1cm4oYXR8fHRoaXMu'@;
put 'Y3JlYXRpb258fG5ldyBEYXRlKS5nZXRUaW1lKCkrQ2V9cmV0dXJuIHRoaXMuZXhwaXJlcz09MS8wPzEvMDp0aGlzLmV4cGlyZXMuZ2V0VGltZSgpfWV4cGlyeURhdGUoYXQpe2NvbnN0IEZlPXRoaXMuZXhwaXJ5VGltZShhdCk7cmV0dXJuIEZlPT0xLzA/bmV3IERhdGUoZGUpOkZlPT0tMS8w'@;
put 'P25ldyBEYXRlKDApOm5ldyBEYXRlKEZlKX1pc1BlcnNpc3RlbnQoKXtyZXR1cm4gbnVsbCE9dGhpcy5tYXhBZ2V8fHRoaXMuZXhwaXJlcyE9MS8wfWNhbm9uaWNhbGl6ZWREb21haW4oKXtyZXR1cm4gbnVsbD09dGhpcy5kb21haW4/bnVsbDpwKHRoaXMuZG9tYWluKX1jZG9tYWluKCl7cmV0'@;
put 'dXJuIHRoaXMuY2Fub25pY2FsaXplZERvbWFpbigpfX1mdW5jdGlvbiBOZShYZSl7aWYobnVsbCE9WGUpe2NvbnN0IGF0PVhlLnRvTG93ZXJDYXNlKCk7c3dpdGNoKGF0KXtjYXNlIEcuU1RSSUNUOmNhc2UgRy5TSUxFTlQ6Y2FzZSBHLkRJU0FCTEVEOnJldHVybiBhdH19cmV0dXJuIEcuU0lM'@;
put 'RU5UfUxlLmNvb2tpZXNDcmVhdGVkPTAsTGUucGFyc2U9dWUsTGUuZnJvbUpTT049eGUsTGUuc2VyaWFsaXphYmxlUHJvcGVydGllcz1PYmplY3Qua2V5cyhFZSksTGUuc2FtZVNpdGVMZXZlbD17c3RyaWN0OjMsbGF4OjIsbm9uZToxfSxMZS5zYW1lU2l0ZUNhbm9uaWNhbD17c3RyaWN0OiJT'@;
put 'dHJpY3QiLGxheDoiTGF4In07Y2xhc3MgS2V7Y29uc3RydWN0b3IoYXQsRmU9e3JlamVjdFB1YmxpY1N1ZmZpeGVzOiEwfSl7ImJvb2xlYW4iPT10eXBlb2YgRmUmJihGZT17cmVqZWN0UHVibGljU3VmZml4ZXM6RmV9KSxOLnZhbGlkYXRlKE4uaXNPYmplY3QoRmUpLEZlKSx0aGlzLnJlamVj'@;
put 'dFB1YmxpY1N1ZmZpeGVzPUZlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLHRoaXMuZW5hYmxlTG9vc2VNb2RlPSEhRmUubG9vc2VNb2RlLHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluPSJib29sZWFuIiE9dHlwZW9mIEZlLmFsbG93U3BlY2lhbFVzZURvbWFpbnx8RmUuYWxsb3dTcGVjaWFsVXNl'@;
put 'RG9tYWluLHRoaXMuc3RvcmU9YXR8fG5ldyBrLHRoaXMucHJlZml4U2VjdXJpdHk9TmUoRmUucHJlZml4U2VjdXJpdHkpLHRoaXMuX2Nsb25lU3luYz1VZSgiY2xvbmUiKSx0aGlzLl9pbXBvcnRDb29raWVzU3luYz1VZSgiX2ltcG9ydENvb2tpZXMiKSx0aGlzLmdldENvb2tpZXNTeW5jPVVl'@;
put 'KCJnZXRDb29raWVzIiksdGhpcy5nZXRDb29raWVTdHJpbmdTeW5jPVVlKCJnZXRDb29raWVTdHJpbmciKSx0aGlzLmdldFNldENvb2tpZVN0cmluZ3NTeW5jPVVlKCJnZXRTZXRDb29raWVTdHJpbmdzIiksdGhpcy5yZW1vdmVBbGxDb29raWVzU3luYz1VZSgicmVtb3ZlQWxsQ29va2llcyIp'@;
put 'LHRoaXMuc2V0Q29va2llU3luYz1VZSgic2V0Q29va2llIiksdGhpcy5zZXJpYWxpemVTeW5jPVVlKCJzZXJpYWxpemUiKX1zZXRDb29raWUoYXQsRmUsQ2UsRGUpe2xldCBSZTtpZihOLnZhbGlkYXRlKE4uaXNOb25FbXB0eVN0cmluZyhGZSksRGUsQ2UpLE4uaXNGdW5jdGlvbihGZSkpcmV0'@;
put 'dXJuKERlPUZlKShuZXcgRXJyb3IoIk5vIFVSTCB3YXMgc3BlY2lmaWVkIikpO2NvbnN0IGV0PUhlKEZlKTtpZihOLmlzRnVuY3Rpb24oQ2UpJiYoRGU9Q2UsQ2U9e30pLE4udmFsaWRhdGUoTi5pc0Z1bmN0aW9uKERlKSxEZSksIU4uaXNOb25FbXB0eVN0cmluZyhhdCkmJiFOLmlzT2JqZWN0'@;
put 'KGF0KSYmYXQgaW5zdGFuY2VvZiBTdHJpbmcmJjA9PWF0Lmxlbmd0aClyZXR1cm4gRGUobnVsbCk7Y29uc3QgbnQ9cChldC5ob3N0bmFtZSksR2U9Q2UubG9vc2V8fHRoaXMuZW5hYmxlTG9vc2VNb2RlO2xldCBkdD1udWxsO2lmKENlLnNhbWVTaXRlQ29udGV4dCYmKGR0PWNlKENlLnNhbWVT'@;
put 'aXRlQ29udGV4dCksIWR0KSlyZXR1cm4gRGUobmV3IEVycm9yKGxlKSk7aWYoInN0cmluZyI9PXR5cGVvZiBhdHx8YXQgaW5zdGFuY2VvZiBTdHJpbmcpe2lmKCEoYXQ9TGUucGFyc2UoYXQse2xvb3NlOkdlfSkpKXJldHVybiBSZT1uZXcgRXJyb3IoIkNvb2tpZSBmYWlsZWQgdG8gcGFyc2Ui'@;
put 'KSxEZShDZS5pZ25vcmVFcnJvcj9udWxsOlJlKX1lbHNlIGlmKCEoYXQgaW5zdGFuY2VvZiBMZSkpcmV0dXJuIFJlPW5ldyBFcnJvcigiRmlyc3QgYXJndW1lbnQgdG8gc2V0Q29va2llIG11c3QgYmUgYSBDb29raWUgb2JqZWN0IG9yIHN0cmluZyIpLERlKENlLmlnbm9yZUVycm9yP251bGw6'@;
put 'UmUpO2NvbnN0IFRlPUNlLm5vd3x8bmV3IERhdGU7aWYodGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyYmYXQuZG9tYWluJiZudWxsPT1JLmdldFB1YmxpY1N1ZmZpeChhdC5jZG9tYWluKCkse2FsbG93U3BlY2lhbFVzZURvbWFpbjp0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixpZ25vcmVF'@;
put 'cnJvcjpDZS5pZ25vcmVFcnJvcn0pJiYhSC50ZXN0KGF0LmRvbWFpbikpcmV0dXJuIFJlPW5ldyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLERlKENlLmlnbm9yZUVycm9yP251bGw6UmUpO2lmKGF0LmRvbWFpbil7aWYoIUMobnQsYXQuY2RvbWFp'@;
put 'bigpLCExKSlyZXR1cm4gUmU9bmV3IEVycm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOiR7YXQuY2RvbWFpbigpfSBSZXF1ZXN0OiR7bnR9YCksRGUoQ2UuaWdub3JlRXJyb3I/bnVsbDpSZSk7bnVsbD09YXQuaG9zdE9ubHkmJihhdC5ob3N0T25seT0hMSl9'@;
put 'ZWxzZSBhdC5ob3N0T25seT0hMCxhdC5kb21haW49bnQ7aWYoYXQucGF0aCYmIi8iPT09YXQucGF0aFswXXx8KGF0LnBhdGg9SyhldC5wYXRobmFtZSksYXQucGF0aElzRGVmYXVsdD0hMCksITE9PT1DZS5odHRwJiZhdC5odHRwT25seSlyZXR1cm4gUmU9bmV3IEVycm9yKCJDb29raWUgaXMg'@;
put 'SHR0cE9ubHkgYW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxEZShDZS5pZ25vcmVFcnJvcj9udWxsOlJlKTtpZigibm9uZSIhPT1hdC5zYW1lU2l0ZSYmdm9pZCAwIT09YXQuc2FtZVNpdGUmJmR0JiYibm9uZSI9PT1kdClyZXR1cm4gUmU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNp'@;
put 'dGUgYnV0IHRoaXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCIpLERlKENlLmlnbm9yZUVycm9yP251bGw6UmUpO2NvbnN0IEFlPXRoaXMucHJlZml4U2VjdXJpdHk9PT1HLlNJTEVOVDtpZih0aGlzLnByZWZpeFNlY3VyaXR5IT09Ry5ESVNBQkxFRCl7bGV0IG90LGx0PSExO2lmKE4udmFs'@;
put 'aWRhdGUoTi5pc09iamVjdChDdD1hdCksQ3QpLCFDdC5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fEN0LnNlY3VyZT9mdW5jdGlvbihDdCl7cmV0dXJuIE4udmFsaWRhdGUoTi5pc09iamVjdChDdCkpLCFDdC5rZXkuc3RhcnRzV2l0aCgiX19Ib3N0LSIpfHxDdC5zZWN1cmUmJkN0Lmhv'@;
put 'c3RPbmx5JiZudWxsIT1DdC5wYXRoJiYiLyI9PT1DdC5wYXRofShhdCl8fChsdD0hMCxvdD0iQ29va2llIGhhcyBfX0hvc3QgcHJlZml4IGJ1dCBlaXRoZXIgU2VjdXJlIG9yIEhvc3RPbmx5IGF0dHJpYnV0ZSBpcyBub3Qgc2V0IG9yIFBhdGggaXMgbm90ICcvJyIpOihsdD0hMCxvdD0iQ29v'@;
put 'a2llIGhhcyBfX1NlY3VyZSBwcmVmaXggYnV0IFNlY3VyZSBhdHRyaWJ1dGUgaXMgbm90IHNldCIpLGx0KXJldHVybiBEZShDZS5pZ25vcmVFcnJvcnx8QWU/bnVsbDpuZXcgRXJyb3Iob3QpKX12YXIgQ3Q7Y29uc3QgQmU9dGhpcy5zdG9yZTtCZS51cGRhdGVDb29raWV8fChCZS51cGRhdGVD'@;
put 'b29raWU9ZnVuY3Rpb24ob3QsbHQsQ3Qpe3RoaXMucHV0Q29va2llKGx0LEN0KX0pLEJlLmZpbmRDb29raWUoYXQuZG9tYWluLGF0LnBhdGgsYXQua2V5LGZ1bmN0aW9uKG90LGx0KXtpZihvdClyZXR1cm4gRGUob3QpO2NvbnN0IEN0PWZ1bmN0aW9uKEZ0KXtpZihGdClyZXR1cm4gRGUoRnQp'@;
put 'O0RlKG51bGwsYXQpfTtpZihsdCl7aWYoITE9PT1DZS5odHRwJiZsdC5odHRwT25seSlyZXR1cm4gb3Q9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksRGUoQ2UuaWdub3JlRXJyb3I/bnVsbDpvdCk7YXQuY3JlYXRpb249bHQu'@;
put 'Y3JlYXRpb24sYXQuY3JlYXRpb25JbmRleD1sdC5jcmVhdGlvbkluZGV4LGF0Lmxhc3RBY2Nlc3NlZD1UZSxCZS51cGRhdGVDb29raWUobHQsYXQsQ3QpfWVsc2UgYXQuY3JlYXRpb249YXQubGFzdEFjY2Vzc2VkPVRlLEJlLnB1dENvb2tpZShhdCxDdCl9KX1nZXRDb29raWVzKGF0LEZlLENl'@;
put 'KXtOLnZhbGlkYXRlKE4uaXNOb25FbXB0eVN0cmluZyhhdCksQ2UsYXQpO2NvbnN0IERlPUhlKGF0KTtOLmlzRnVuY3Rpb24oRmUpJiYoQ2U9RmUsRmU9e30pLE4udmFsaWRhdGUoTi5pc09iamVjdChGZSksQ2UsRmUpLE4udmFsaWRhdGUoTi5pc0Z1bmN0aW9uKENlKSxDZSk7Y29uc3QgUmU9'@;
put 'cChEZS5ob3N0bmFtZSksZXQ9RGUucGF0aG5hbWV8fCIvIjtsZXQgbnQ9RmUuc2VjdXJlO251bGwhPW50fHwhRGUucHJvdG9jb2x8fCJodHRwczoiIT1EZS5wcm90b2NvbCYmIndzczoiIT1EZS5wcm90b2NvbHx8KG50PSEwKTtsZXQgR2U9MDtpZihGZS5zYW1lU2l0ZUNvbnRleHQpe2NvbnN0'@;
put 'IEN0PWNlKEZlLnNhbWVTaXRlQ29udGV4dCk7aWYoR2U9TGUuc2FtZVNpdGVMZXZlbFtDdF0sIUdlKXJldHVybiBDZShuZXcgRXJyb3IobGUpKX1sZXQgZHQ9RmUuaHR0cDtudWxsPT1kdCYmKGR0PSEwKTtjb25zdCBUZT1GZS5ub3d8fERhdGUubm93KCksQWU9ITEhPT1GZS5leHBpcmUsQmU9'@;
put 'ISFGZS5hbGxQYXRocyxvdD10aGlzLnN0b3JlO2Z1bmN0aW9uIGx0KEN0KXtpZihDdC5ob3N0T25seSl7aWYoQ3QuZG9tYWluIT1SZSlyZXR1cm4hMX1lbHNlIGlmKCFDKFJlLEN0LmRvbWFpbiwhMSkpcmV0dXJuITE7cmV0dXJuISghQmUmJiFCKGV0LEN0LnBhdGgpfHxDdC5zZWN1cmUmJiFu'@;
put 'dHx8Q3QuaHR0cE9ubHkmJiFkdHx8R2UmJkxlLnNhbWVTaXRlTGV2ZWxbQ3Quc2FtZVNpdGV8fCJub25lIl0+R2V8fEFlJiZDdC5leHBpcnlUaW1lKCk8PVRlJiYob3QucmVtb3ZlQ29va2llKEN0LmRvbWFpbixDdC5wYXRoLEN0LmtleSwoKT0+e30pLDEpKX1vdC5maW5kQ29va2llcyhSZSxC'@;
put 'ZT9udWxsOmV0LHRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLChDdCxGdCk9PntpZihDdClyZXR1cm4gQ2UoQ3QpO0Z0PUZ0LmZpbHRlcihsdCksITEhPT1GZS5zb3J0JiYoRnQ9RnQuc29ydChPZSkpO2NvbnN0IFJ0PW5ldyBEYXRlO2Zvcihjb25zdCBYdCBvZiBGdClYdC5sYXN0QWNjZXNz'@;
put 'ZWQ9UnQ7Q2UobnVsbCxGdCl9KX1nZXRDb29raWVTdHJpbmcoLi4uYXQpe2NvbnN0IEZlPWF0LnBvcCgpO04udmFsaWRhdGUoTi5pc0Z1bmN0aW9uKEZlKSxGZSksYXQucHVzaChmdW5jdGlvbihDZSxEZSl7Q2U/RmUoQ2UpOkZlKG51bGwsRGUuc29ydChPZSkubWFwKFJlPT5SZS5jb29raWVT'@;
put 'dHJpbmcoKSkuam9pbigiOyAiKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxhdCl9Z2V0U2V0Q29va2llU3RyaW5ncyguLi5hdCl7Y29uc3QgRmU9YXQucG9wKCk7Ti52YWxpZGF0ZShOLmlzRnVuY3Rpb24oRmUpLEZlKSxhdC5wdXNoKGZ1bmN0aW9uKENlLERlKXtDZT9GZShDZSk6'@;
put 'RmUobnVsbCxEZS5tYXAoUmU9PlJlLnRvU3RyaW5nKCkpKX0pLHRoaXMuZ2V0Q29va2llcy5hcHBseSh0aGlzLGF0KX1zZXJpYWxpemUoYXQpe04udmFsaWRhdGUoTi5pc0Z1bmN0aW9uKGF0KSxhdCk7bGV0IEZlPXRoaXMuc3RvcmUuY29uc3RydWN0b3IubmFtZTtOLmlzT2JqZWN0KEZlKSYm'@;
put 'KEZlPW51bGwpO2NvbnN0IENlPXt2ZXJzaW9uOmB0b3VnaC1jb29raWVAJHtWfWAsc3RvcmVUeXBlOkZlLHJlamVjdFB1YmxpY1N1ZmZpeGVzOiEhdGhpcy5yZWplY3RQdWJsaWNTdWZmaXhlcyxlbmFibGVMb29zZU1vZGU6ISF0aGlzLmVuYWJsZUxvb3NlTW9kZSxhbGxvd1NwZWNpYWxVc2VE'@;
put 'b21haW46ISF0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpOZSh0aGlzLnByZWZpeFNlY3VyaXR5KSxjb29raWVzOltdfTtpZighdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKXJldHVy'@;
put 'biBhdChuZXcgRXJyb3IoInN0b3JlIGRvZXMgbm90IHN1cHBvcnQgZ2V0QWxsQ29va2llcyBhbmQgY2Fubm90IGJlIHNlcmlhbGl6ZWQiKSk7dGhpcy5zdG9yZS5nZXRBbGxDb29raWVzKChEZSxSZSk9PkRlP2F0KERlKTooQ2UuY29va2llcz1SZS5tYXAoZXQ9PihkZWxldGUoZXQ9ZXQgaW5z'@;
put 'dGFuY2VvZiBMZT9ldC50b0pTT04oKTpldCkuY3JlYXRpb25JbmRleCxldCkpLGF0KG51bGwsQ2UpKSl9dG9KU09OKCl7cmV0dXJuIHRoaXMuc2VyaWFsaXplU3luYygpfV9pbXBvcnRDb29raWVzKGF0LEZlKXtsZXQgQ2U9YXQuY29va2llcztpZighQ2V8fCFBcnJheS5pc0FycmF5KENlKSly'@;
put 'ZXR1cm4gRmUobmV3IEVycm9yKCJzZXJpYWxpemVkIGphciBoYXMgbm8gY29va2llcyBhcnJheSIpKTtDZT1DZS5zbGljZSgpO2NvbnN0IERlPVJlPT57aWYoUmUpcmV0dXJuIEZlKFJlKTtpZighQ2UubGVuZ3RoKXJldHVybiBGZShSZSx0aGlzKTtsZXQgZXQ7dHJ5e2V0PXhlKENlLnNoaWZ0'@;
put 'KCkpfWNhdGNoKG50KXtyZXR1cm4gRmUobnQpfWlmKG51bGw9PT1ldClyZXR1cm4gRGUobnVsbCk7dGhpcy5zdG9yZS5wdXRDb29raWUoZXQsRGUpfTtEZSgpfWNsb25lKGF0LEZlKXsxPT09YXJndW1lbnRzLmxlbmd0aCYmKEZlPWF0LGF0PW51bGwpLHRoaXMuc2VyaWFsaXplKChDZSxEZSk9'@;
put 'PntpZihDZSlyZXR1cm4gRmUoQ2UpO0tlLmRlc2VyaWFsaXplKERlLGF0LEZlKX0pfWNsb25lU3luYyhhdCl7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX2Nsb25lU3luYygpO2lmKCFhdC5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBjbG9uZSBk'@;
put 'ZXN0aW5hdGlvbiBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gdGhpcy5fY2xvbmVTeW5jKGF0KX1yZW1vdmVBbGxDb29raWVzKGF0KXtOLnZhbGlkYXRlKE4uaXNGdW5jdGlvbihhdCksYXQpO2NvbnN0IEZlPXRoaXMuc3RvcmU7aWYo'@;
put 'ImZ1bmN0aW9uIj09dHlwZW9mIEZlLnJlbW92ZUFsbENvb2tpZXMmJkZlLnJlbW92ZUFsbENvb2tpZXMhPT1FLnByb3RvdHlwZS5yZW1vdmVBbGxDb29raWVzKXJldHVybiBGZS5yZW1vdmVBbGxDb29raWVzKGF0KTtGZS5nZXRBbGxDb29raWVzKChDZSxEZSk9PntpZihDZSlyZXR1cm4gYXQo'@;
put 'Q2UpO2lmKDA9PT1EZS5sZW5ndGgpcmV0dXJuIGF0KG51bGwpO2xldCBSZT0wO2NvbnN0IGV0PVtdO2Z1bmN0aW9uIG50KEdlKXtpZihHZSYmZXQucHVzaChHZSksUmUrKyxSZT09PURlLmxlbmd0aClyZXR1cm4gYXQoZXQubGVuZ3RoP2V0WzBdOm51bGwpfURlLmZvckVhY2goR2U9PntGZS5y'@;
put 'ZW1vdmVDb29raWUoR2UuZG9tYWluLEdlLnBhdGgsR2Uua2V5LG50KX0pfSl9c3RhdGljIGRlc2VyaWFsaXplKGF0LEZlLENlKXtsZXQgRGU7aWYoMyE9PWFyZ3VtZW50cy5sZW5ndGgmJihDZT1GZSxGZT1udWxsKSxOLnZhbGlkYXRlKE4uaXNGdW5jdGlvbihDZSksQ2UpLCJzdHJpbmciPT10'@;
put 'eXBlb2YgYXQpe2lmKERlPWhlKGF0KSxEZSBpbnN0YW5jZW9mIEVycm9yKXJldHVybiBDZShEZSl9ZWxzZSBEZT1hdDtjb25zdCBSZT1uZXcgS2UoRmUse3JlamVjdFB1YmxpY1N1ZmZpeGVzOkRlLnJlamVjdFB1YmxpY1N1ZmZpeGVzLGxvb3NlTW9kZTpEZS5lbmFibGVMb29zZU1vZGUsYWxs'@;
put 'b3dTcGVjaWFsVXNlRG9tYWluOkRlLmFsbG93U3BlY2lhbFVzZURvbWFpbixwcmVmaXhTZWN1cml0eTpEZS5wcmVmaXhTZWN1cml0eX0pO1JlLl9pbXBvcnRDb29raWVzKERlLGV0PT57aWYoZXQpcmV0dXJuIENlKGV0KTtDZShudWxsLFJlKX0pfXN0YXRpYyBkZXNlcmlhbGl6ZVN5bmMoYXQs'@;
put 'RmUpe2NvbnN0IENlPSJzdHJpbmciPT10eXBlb2YgYXQ/SlNPTi5wYXJzZShhdCk6YXQsRGU9bmV3IEtlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpDZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6Q2UuZW5hYmxlTG9vc2VNb2RlfSk7aWYoIURlLnN0b3JlLnN5bmNocm9ub3Vz'@;
put 'KXRocm93IG5ldyBFcnJvcigiQ29va2llSmFyIHN0b3JlIGlzIG5vdCBzeW5jaHJvbm91czsgdXNlIGFzeW5jIEFQSSBpbnN0ZWFkLiIpO3JldHVybiBEZS5faW1wb3J0Q29va2llc1N5bmMoQ2UpLERlfX1mdW5jdGlvbiBVZShYZSl7cmV0dXJuIGZ1bmN0aW9uKC4uLmF0KXtpZighdGhpcy5z'@;
put 'dG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtsZXQgRmUsQ2U7aWYodGhpc1tYZV0oLi4uYXQsKERlLFJlKT0+e0ZlPURlLENlPVJlfSksRmUpdGhyb3cgRmU7cmV0dXJu'@;
put 'IENlfX1LZS5mcm9tSlNPTj1LZS5kZXNlcmlhbGl6ZVN5bmMsWyJfaW1wb3J0Q29va2llcyIsImNsb25lIiwiZ2V0Q29va2llcyIsImdldENvb2tpZVN0cmluZyIsImdldFNldENvb2tpZVN0cmluZ3MiLCJyZW1vdmVBbGxDb29raWVzIiwic2VyaWFsaXplIiwic2V0Q29va2llIl0uZm9yRWFj'@;
put 'aChYZT0+e0tlLnByb3RvdHlwZVtYZV09WihLZS5wcm90b3R5cGVbWGVdKX0pLEtlLmRlc2VyaWFsaXplPVooS2UuZGVzZXJpYWxpemUpLEEudmVyc2lvbj1WLEEuQ29va2llSmFyPUtlLEEuQ29va2llPUxlLEEuU3RvcmU9RSxBLk1lbW9yeUNvb2tpZVN0b3JlPWssQS5wYXJzZURhdGU9eCxB'@;
put 'LmZvcm1hdERhdGU9XyxBLnBhcnNlPXVlLEEuZnJvbUpTT049eGUsQS5kb21haW5NYXRjaD1DLEEuZGVmYXVsdFBhdGg9SyxBLnBhdGhNYXRjaD1CLEEuZ2V0UHVibGljU3VmZml4PUkuZ2V0UHVibGljU3VmZml4LEEuY29va2llQ29tcGFyZT1PZSxBLnBlcm11dGVEb21haW49RCg3MzI0KS5w'@;
put 'ZXJtdXRlRG9tYWluLEEucGVybXV0ZVBhdGg9ZnVuY3Rpb24oWGUpe2lmKE4udmFsaWRhdGUoTi5pc1N0cmluZyhYZSkpLCIvIj09PVhlKXJldHVyblsiLyJdO2NvbnN0IGF0PVtYZV07Zm9yKDtYZS5sZW5ndGg+MTspe2NvbnN0IEZlPVhlLmxhc3RJbmRleE9mKCIvIik7aWYoMD09PUZlKWJy'@;
put 'ZWFrO1hlPVhlLnN1YnN0cigwLEZlKSxhdC5wdXNoKFhlKX1yZXR1cm4gYXQucHVzaCgiLyIpLGF0fSxBLmNhbm9uaWNhbERvbWFpbj1wLEEuUHJlZml4U2VjdXJpdHlFbnVtPUcsQS5QYXJhbWV0ZXJFcnJvcj1OLlBhcmFtZXRlckVycm9yfSw1NzYxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7'@;
put 'Y29uc3R7ZnJvbUNhbGxiYWNrOlB9PUQoNzA0MSksVT1EKDIyMjQpLnksST1EKDczMjQpLnBlcm11dGVEb21haW4sRT1EKDg5NzEpLlUse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6ayxnZXRVdGlsSW5zcGVjdDpCfT1EKDEyNjkpO2NsYXNzIE4gZXh0ZW5kcyBVe2NvbnN0cnVjdG9yKCl7c3Vw'@;
put 'ZXIoKSx0aGlzLnN5bmNocm9ub3VzPSEwLHRoaXMuaWR4PU9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3QgVz1rKCk7VyYmKHRoaXNbV109dGhpcy5pbnNwZWN0KX1pbnNwZWN0KCl7cmV0dXJuYHsgaWR4OiAke0IoVikodGhpcy5pZHgsITEsMil9IH1gfWZpbmRDb29raWUoVyx6LHEsUSl7cmV0'@;
put 'dXJuIFEobnVsbCx0aGlzLmlkeFtXXSYmdGhpcy5pZHhbV11bel0/dGhpcy5pZHhbV11bel1bcV18fG51bGw6dm9pZCAwKX1maW5kQ29va2llcyhXLHoscSxRKXtjb25zdCB0ZT1bXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgcSYmKFE9cSxxPSEwKSwhVylyZXR1cm4gUShudWxsLFtdKTtsZXQg'@;
put 'YWU7YWU9ej9mdW5jdGlvbihsZSl7T2JqZWN0LmtleXMobGUpLmZvckVhY2goY2U9PntpZihFKHosY2UpKXtjb25zdCBHPWxlW2NlXTtmb3IoY29uc3QgeSBpbiBHKXRlLnB1c2goR1t5XSl9fSl9OmZ1bmN0aW9uKGxlKXtmb3IoY29uc3QgY2UgaW4gbGUpe2NvbnN0IEc9bGVbY2VdO2Zvcihj'@;
put 'b25zdCB5IGluIEcpdGUucHVzaChHW3ldKX19O2NvbnN0IHNlPUkoVyxxKXx8W1ddLGRlPXRoaXMuaWR4O3NlLmZvckVhY2gobGU9Pntjb25zdCBjZT1kZVtsZV07Y2UmJmFlKGNlKX0pLFEobnVsbCx0ZSl9cHV0Q29va2llKFcseil7dGhpcy5pZHhbVy5kb21haW5dfHwodGhpcy5pZHhbVy5k'@;
put 'b21haW5dPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1cuZG9tYWluXVtXLnBhdGhdfHwodGhpcy5pZHhbVy5kb21haW5dW1cucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVy5kb21haW5dW1cucGF0aF1bVy5rZXldPVcseihudWxsKX11cGRhdGVDb29raWUoVyx6'@;
put 'LHEpe3RoaXMucHV0Q29va2llKHoscSl9cmVtb3ZlQ29va2llKFcseixxLFEpe3RoaXMuaWR4W1ddJiZ0aGlzLmlkeFtXXVt6XSYmdGhpcy5pZHhbV11bel1bcV0mJmRlbGV0ZSB0aGlzLmlkeFtXXVt6XVtxXSxRKG51bGwpfXJlbW92ZUNvb2tpZXMoVyx6LHEpe3JldHVybiB0aGlzLmlkeFtX'@;
put 'XSYmKHo/ZGVsZXRlIHRoaXMuaWR4W1ddW3pdOmRlbGV0ZSB0aGlzLmlkeFtXXSkscShudWxsKX1yZW1vdmVBbGxDb29raWVzKFcpe3JldHVybiB0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpLFcobnVsbCl9Z2V0QWxsQ29va2llcyhXKXtjb25zdCB6PVtdLHE9dGhpcy5pZHg7T2JqZWN0'@;
put 'LmtleXMocSkuZm9yRWFjaChRPT57T2JqZWN0LmtleXMocVtRXSkuZm9yRWFjaCh0ZT0+e09iamVjdC5rZXlzKHFbUV1bdGVdKS5mb3JFYWNoKGFlPT57bnVsbCE9PWFlJiZ6LnB1c2gocVtRXVt0ZV1bYWVdKX0pfSl9KSx6LnNvcnQoKFEsdGUpPT4oUS5jcmVhdGlvbkluZGV4fHwwKS0odGUu'@;
put 'Y3JlYXRpb25JbmRleHx8MCkpLFcobnVsbCx6KX19ZnVuY3Rpb24gVihaKXtjb25zdCBXPU9iamVjdC5rZXlzKFopO2lmKDA9PT1XLmxlbmd0aClyZXR1cm4iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHt9IjtsZXQgej0iW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbiI7cmV0dXJuIE9i'@;
put 'amVjdC5rZXlzKFopLmZvckVhY2goKHEsUSk9Pnt6Kz1mdW5jdGlvbih0ZSxhZSl7bGV0IGRlPWAgICcke3RlfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhhZSkuZm9yRWFjaCgobGUsY2UsRyk9PntkZSs9ZnVuY3Rpb24oeSxMKXtjb25zdCBI'@;
put 'PSIgICAgIjtsZXQgaj1gJHtIfScke3l9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKEwpLmZvckVhY2goKGcsUyx4KT0+e2orPWAgICAgICAke2d9OiAke0xbZ10uaW5zcGVjdCgpfWAsUzx4Lmxlbmd0aC0xJiYoais9IiwiKSxqKz0iXG4ifSks'@;
put 'ais9YCR7SH19YCxqfShsZSxhZVtsZV0pLGNlPEcubGVuZ3RoLTEmJihkZSs9IiwiKSxkZSs9IlxuIn0pLGRlKz0iICB9IixkZX0ocSxaW3FdKSxRPFcubGVuZ3RoLTEmJih6Kz0iLCIpLHorPSJcbiJ9KSx6Kz0ifSIsen1bImZpbmRDb29raWUiLCJmaW5kQ29va2llcyIsInB1dENvb2tpZSIs'@;
put 'InVwZGF0ZUNvb2tpZSIsInJlbW92ZUNvb2tpZSIsInJlbW92ZUNvb2tpZXMiLCJyZW1vdmVBbGxDb29raWVzIiwiZ2V0QWxsQ29va2llcyJdLmZvckVhY2goWj0+e04ucHJvdG90eXBlW1pdPVAoTi5wcm90b3R5cGVbWl0pfSksQS5tPU59LDg5NzE6KHcsQSk9PnsidXNlIHN0cmljdCI7QS5V'@;
put 'PWZ1bmN0aW9uKEQsUCl7cmV0dXJuIFA9PT1EfHwwPT09RC5pbmRleE9mKFApJiYoIi8iPT09UC5zdWJzdHIoLTEpfHwiLyI9PT1ELnN1YnN0cihQLmxlbmd0aCwxKSl9fSw3MzI0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7Y29uc3QgUD1EKDc1Mik7QS5wZXJtdXRlRG9tYWluPWZ1bmN0aW9u'@;
put 'KFUsSSl7Y29uc3QgRT1QLmdldFB1YmxpY1N1ZmZpeChVLHthbGxvd1NwZWNpYWxVc2VEb21haW46SX0pO2lmKCFFKXJldHVybiBudWxsO2lmKEU9PVUpcmV0dXJuW1VdOyIuIj09VS5zbGljZSgtMSkmJihVPVUuc2xpY2UoMCwtMSkpO2NvbnN0IGs9VS5zbGljZSgwLC0oRS5sZW5ndGgrMSkp'@;
put 'LnNwbGl0KCIuIikucmV2ZXJzZSgpO2xldCBCPUU7Y29uc3QgTj1bQl07Zm9yKDtrLmxlbmd0aDspQj1gJHtrLnNoaWZ0KCl9LiR7Qn1gLE4ucHVzaChCKTtyZXR1cm4gTn19LDc1MjoodyxBLEQpPT57InVzZSBzdHJpY3QiO2NvbnN0IFA9RCg2MjQ0KSxVPVsibG9jYWwiLCJleGFtcGxlIiwi'@;
put 'aW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxJPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO0EuZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uKEUsaz17fSl7Y29uc3QgQj1FLnNwbGl0KCIuIiksTj1CW0IubGVuZ3RoLTFdLFo9ISFrLmlnbm9yZUVycm9yO2lmKGsuYWxsb3dTcGVjaWFsVXNl'@;
put 'RG9tYWluJiZVLmluY2x1ZGVzKE4pKXtpZihCLmxlbmd0aD4xKXJldHVybmAke0JbQi5sZW5ndGgtMl19LiR7Tn1gO2lmKEkuaW5jbHVkZXMoTikpcmV0dXJuYCR7Tn1gfWlmKCFaJiZVLmluY2x1ZGVzKE4pKXRocm93IG5ldyBFcnJvcihgQ29va2llIGhhcyBkb21haW4gc2V0IHRvIHRoZSBw'@;
put 'dWJsaWMgc3VmZml4ICIke059IiB3aGljaCBpcyBhIHNwZWNpYWwgdXNlIGRvbWFpbi4gVG8gYWxsb3cgdGhpcywgY29uZmlndXJlIHlvdXIgQ29va2llSmFyIHdpdGgge2FsbG93U3BlY2lhbFVzZURvbWFpbjp0cnVlLCByZWplY3RQdWJsaWNTdWZmaXhlczogZmFsc2V9LmApO3JldHVybiBQ'@;
put 'LmdldChFKX19LDIyMjQ6KHcsQSk9PnsidXNlIHN0cmljdCI7QS55PWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5zeW5jaHJvbm91cz0hMX1maW5kQ29va2llKEQsUCxVLEkpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1maW5kQ29va2llcyhELFAs'@;
put 'VSxJKXt0aHJvdyBuZXcgRXJyb3IoImZpbmRDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXB1dENvb2tpZShELFApe3Rocm93IG5ldyBFcnJvcigicHV0Q29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXVwZGF0ZUNvb2tpZShELFAsVSl7dGhyb3cgbmV3IEVycm9yKCJ1cGRhdGVDb29r'@;
put 'aWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llKEQsUCxVLEkpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUNvb2tpZXMoRCxQLFUpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQ29va2llcyBpcyBub3QgaW1wbGVtZW50'@;
put 'ZWQiKX1yZW1vdmVBbGxDb29raWVzKEQpe3Rocm93IG5ldyBFcnJvcigicmVtb3ZlQWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQiKX1nZXRBbGxDb29raWVzKEQpe3Rocm93IG5ldyBFcnJvcigiZ2V0QWxsQ29va2llcyBpcyBub3QgaW1wbGVtZW50ZWQgKHRoZXJlZm9yZSBqYXIgY2Fu'@;
put 'bm90IGJlIHNlcmlhbGl6ZWQpIil9fX0sMTI2OToodyxBLEQpPT57ZnVuY3Rpb24gUCgpe3RyeXtyZXR1cm4gRCg5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gVSgpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpfUEuZ2V0VXRpbEluc3Bl'@;
put 'Y3Q9ZnVuY3Rpb24oSSxFPXt9KXtjb25zdCBrPShFLnJlcXVpcmVVdGlsfHxQKSgpO3JldHVybiBmdW5jdGlvbihCLE4sVil7cmV0dXJuIGs/ay5pbnNwZWN0KEIsTixWKTpJKEIpfX0sQS5nZXRDdXN0b21JbnNwZWN0U3ltYm9sPWZ1bmN0aW9uKEk9e30pe3JldHVybihJLmxvb2t1cEN1c3Rv'@;
put 'bUluc3BlY3RTeW1ib2x8fFUpKCl8fGZ1bmN0aW9uKEUpe2NvbnN0IGs9KEUucmVxdWlyZVV0aWx8fFApKCk7cmV0dXJuIGs/ay5pbnNwZWN0LmN1c3RvbTpudWxsfShJKX19LDc2NTI6KHcsQSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gRChFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'RX1mdW5jdGlvbiBQKEUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgRXx8RSBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiBVKEUpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChFKX1jbGFzcyBJIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uayl7c3VwZXIo'@;
put 'Li4uayl9fUEuUGFyYW1ldGVyRXJyb3I9SSxBLmlzRnVuY3Rpb249RCxBLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24oRSl7cmV0dXJuIFAoRSkmJiIiIT09RX0sQS5pc0RhdGU9ZnVuY3Rpb24oRSl7cmV0dXJuIGZ1bmN0aW9uKGssQil7dHJ5e3JldHVybiBrIGluc3RhbmNlb2YgQn1jYXRj'@;
put 'aHtyZXR1cm4hMX19KEUsRGF0ZSkmJiJudW1iZXIiPT10eXBlb2Yoaz1FLmdldFRpbWUoKSkmJmslMT09MDt2YXIga30sQS5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uKEUpe3JldHVybiIiPT09RXx8RSBpbnN0YW5jZW9mIFN0cmluZyYmIiI9PT1FLnRvU3RyaW5nKCl9LEEuaXNTdHJpbmc9UCxB'@;
put 'LmlzT2JqZWN0PVUsQS52YWxpZGF0ZT1mdW5jdGlvbihFLGssQil7aWYoRChrKXx8KEI9ayxrPW51bGwpLFUoQil8fChCPXtFcnJvcjoiRmFpbGVkIENoZWNrIn0pLCFFKXtpZighayl0aHJvdyBuZXcgSShCKTtrKG5ldyBJKEIpKX19fSw0NTY6dz0+e3cuZXhwb3J0cz0iNC4xLjMifSw3MDQx'@;
put 'Oih3LEEpPT57InVzZSBzdHJpY3QiO0EuZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKEQpe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKChQLFUp'@;
put 'PT57YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGhdPShJLEUpPT57aWYoSSlyZXR1cm4gVShJKTtQKEUpfSxhcmd1bWVudHMubGVuZ3RoKyssRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KTtELmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sIm5hbWUiLHt2YWx1ZTpELm5hbWV9KX0sQS5mcm9tUHJv'@;
put 'bWlzZT1mdW5jdGlvbihEKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7Y29uc3QgUD1hcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgUClyZXR1cm4gRC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7ZGVsZXRlIGFyZ3VtZW50'@;
put 'c1thcmd1bWVudHMubGVuZ3RoLTFdLGFyZ3VtZW50cy5sZW5ndGgtLSxELmFwcGx5KHRoaXMsYXJndW1lbnRzKS50aGVuKFU9PlAobnVsbCxVKSxQKX0sIm5hbWUiLHt2YWx1ZTpELm5hbWV9KX19LDY3MjpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19h'@;
put 'c3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFA9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oTil7Zm9yKHZhciBWLFo9MSxXPWFyZ3VtZW50cy5sZW5ndGg7WjxXO1orKylmb3IodmFyIHogaW4gVj1hcmd1bWVudHNbWl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFYseikm'@;
put 'JihOW3pdPVZbel0pO3JldHVybiBOfSxQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sVT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixWLFosVyl7cmV0dXJuIG5ldyhafHwoWj1Qcm9taXNlKSkoZnVuY3Rpb24oeixxKXtmdW5jdGlvbiBRKHNlKXt0cnl7YWUoVy5uZXh0KHNlKSl9'@;
put 'Y2F0Y2goZGUpe3EoZGUpfX1mdW5jdGlvbiB0ZShzZSl7dHJ5e2FlKFcudGhyb3coc2UpKX1jYXRjaChkZSl7cShkZSl9fWZ1bmN0aW9uIGFlKHNlKXt2YXIgZGU7c2UuZG9uZT96KHNlLnZhbHVlKTooZGU9c2UudmFsdWUsZGUgaW5zdGFuY2VvZiBaP2RlOm5ldyBaKGZ1bmN0aW9uKGxlKXts'@;
put 'ZShkZSl9KSkudGhlbihRLHRlKX1hZSgoVz1XLmFwcGx5KE4sVnx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oTixWKXt2YXIgWixXLHoscSxRPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnpbMF0pdGhyb3cgelsxXTtyZXR1cm4gelsx'@;
put 'XX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBxPXtuZXh0OnRlKDApLHRocm93OnRlKDEpLHJldHVybjp0ZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHFbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSkscTtmdW5jdGlvbiB0ZShhZSl7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKHNlKXtyZXR1cm4gZnVuY3Rpb24oZGUpe2lmKFopdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7UTspdHJ5e2lmKFo9MSxXJiYoej0yJmRlWzBdP1cucmV0dXJuOmRlWzBdP1cudGhyb3d8fCgoej1XLnJldHVybikmJnou'@;
put 'Y2FsbChXKSwwKTpXLm5leHQpJiYhKHo9ei5jYWxsKFcsZGVbMV0pKS5kb25lKXJldHVybiB6O3N3aXRjaChXPTAseiYmKGRlPVsyJmRlWzBdLHoudmFsdWVdKSxkZVswXSl7Y2FzZSAwOmNhc2UgMTp6PWRlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gUS5sYWJlbCsrLHt2YWx1ZTpkZVsxXSxkb25l'@;
put 'OiExfTtjYXNlIDU6US5sYWJlbCsrLFc9ZGVbMV0sZGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpkZT1RLm9wcy5wb3AoKSxRLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKCh6PSh6PVEudHJ5cykubGVuZ3RoPjAmJnpbei5sZW5ndGgtMV0pfHw2IT09ZGVbMF0mJjIhPT1kZVswXSkp'@;
put 'e1E9MDtjb250aW51ZX1pZigzPT09ZGVbMF0mJighenx8ZGVbMV0+elswXSYmZGVbMV08elszXSkpe1EubGFiZWw9ZGVbMV07YnJlYWt9aWYoNj09PWRlWzBdJiZRLmxhYmVsPHpbMV0pe1EubGFiZWw9elsxXSx6PWRlO2JyZWFrfWlmKHomJlEubGFiZWw8elsyXSl7US5sYWJlbD16WzJdLFEu'@;
put 'b3BzLnB1c2goZGUpO2JyZWFrfXpbMl0mJlEub3BzLnBvcCgpLFEudHJ5cy5wb3AoKTtjb250aW51ZX1kZT1WLmNhbGwoTixRKX1jYXRjaChsZSl7ZGU9WzYsbGVdLFc9MH1maW5hbGx5e1o9ej0wfWlmKDUmZGVbMF0pdGhyb3cgZGVbMV07cmV0dXJue3ZhbHVlOmRlWzBdP2RlWzFdOnZvaWQg'@;
put 'MCxkb25lOiEwfX0oW2FlLHNlXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuQ29udGV4dE1hbmFnZXI9dm9pZCAwO3ZhciBFPUQoNTkyOCksaz1EKDk3NzgpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBOKFYsWil7dGhpcy5zZXJ2ZXJVcmw9'@;
put 'Vix0aGlzLnJlcXVlc3RDbGllbnQ9Wix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0IiwiU0FTIEpvYiBF'@;
put 'eGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHM9WyJD'@;
put 'QVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1dGlvbiBsYXVu'@;
put 'Y2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLFYmJigwLEUuaXNVcmwpKFYpfXJldHVybiBPYmplY3QuZGVmaW5lUHJv'@;
put 'cGVydHkoTi5wcm90b3R5cGUsImdldERlZmF1bHRDb21wdXRlQ29udGV4dHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShOLnByb3RvdHlwZSwi'@;
put 'Z2V0RGVmYXVsdExhdW5jaGVyQ29udGV4dHMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0c30sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxOLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oVil7cmV0dXJuIFUo'@;
put 'dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFo7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihXKXtzd2l0Y2goVy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvY29tcHV0ZS9jb250ZXh0cz9saW1p'@;
put 'dD0xMDAwMCIpLFYpLmNhdGNoKGZ1bmN0aW9uKHope3Rocm93KDAsay5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dHMuICIpfSldO2Nhc2UgMTpyZXR1cm5bMiwoKFo9Vy5zZW50KCkucmVzdWx0KSYmWi5pdGVtcz9aLml0ZW1zOltdKS5tYXAo'@;
put 'ZnVuY3Rpb24oeil7cmV0dXJue2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJpYnV0ZXM6e319fSldfX0pfSl9LE4ucHJvdG90eXBlLmdldExhdW5jaGVyQ29udGV4dHM9ZnVuY3Rpb24oVil7cmV0dXJuIFUodGhpcyx2b2lk'@;
put 'IDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFo7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihXKXtzd2l0Y2goVy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9MTAwMDAi'@;
put 'KSxWKS5jYXRjaChmdW5jdGlvbih6KXt0aHJvdygwLGsucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KV07Y2FzZSAxOnJldHVyblsyLCgoWj1XLnNlbnQoKS5yZXN1bHQpJiZaLml0ZW1zP1ouaXRlbXM6W10pLm1hcChmdW5jdGlv'@;
put 'bih6KXtyZXR1cm57Y3JlYXRlZEJ5OnouY3JlYXRlZEJ5LGlkOnouaWQsbmFtZTp6Lm5hbWUsdmVyc2lvbjp6LnZlcnNpb24sYXR0cmlidXRlczp7fX19KV19fSl9KX0sTi5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oVixaLFcseixxLFEpe3JldHVybiBVKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB0ZSxhZSxzZSxkZSxsZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFYpLHRoaXMuaXNEZWZhdWx0Q29udGV4dChWLHRoaXMuZGVmYXVs'@;
put 'dENvbXB1dGVDb250ZXh0cywiQ29tcHV0ZSBjb250ZXh0ICciLmNvbmNhdChWLCInIGFscmVhZHkgZXhpc3RzLiIpKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0cyhxKV07Y2FzZSAxOmlmKGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3JldHVybiBHLm5hbWU9PT1WfSkpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJDb21wdXRlIGNvbnRleHQgJyIuY29uY2F0KFYsIicgYWxyZWFkeSBleGlzdHMuIikpO3JldHVybiBaP3RoaXMuZGVmYXVsdExhdW5jaGVyQ29udGV4dHMuaW5jbHVkZXMoWik/WzMsNF06WzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHEpXTpbMyw0XTtjYXNlIDI6cmV0dXJu'@;
put 'IGNlLnNlbnQoKS5maW5kKGZ1bmN0aW9uKEcpe3JldHVybiBHLm5hbWU9PT1afSk/WzMsNF06KHRlPSJUaGUgbGF1bmNoZXIgY29udGV4dCBmb3IgIi5jb25jYXQoWiksWzQsdGhpcy5jcmVhdGVMYXVuY2hlckNvbnRleHQoWix0ZSwiZGlyZWN0IixxKS5jYXRjaChmdW5jdGlvbihHKXt0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIuY29uY2F0KEcpKX0pXSk7Y2FzZSAzOmlmKCEoYWU9Y2Uuc2VudCgpKXx8IWFlLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJFcnJvciB3aGlsZSBjcmVhdGluZyBsYXVuY2hlciBjb250ZXh0LiIpO1o9'@;
put 'YWUubmFtZSxjZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm4gc2U9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0scSYmKHNlLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdChxKSksZGU9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfSxXJiYoZGU9UChQKHt9LGRlKSx7cnVu'@;
put 'U2VydmVyQXM6V30pKSxsZT17bmFtZTpWLGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOlp8fCIifSxhdHRyaWJ1dGVzOmRlfSxRJiZRLmxlbmd0aD9sZS5hdXRob3JpemVkVXNlcnM9UTpsZS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAseiYmKGxlLmVudmlyb25tZW50PXth'@;
put 'dXRvRXhlY0xpbmVzOnp9KSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzIiksbGUscSkuY2F0Y2goZnVuY3Rpb24oRyl7dGhyb3coMCxrLnByZWZpeE1lc3NhZ2UpKEcsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGNv'@;
put 'bXB1dGUgY29udGV4dC4gIil9KV07Y2FzZSA1OnJldHVyblsyLGNlLnNlbnQoKS5yZXN1bHRdfX0pfSl9LE4ucHJvdG90eXBlLmNyZWF0ZUxhdW5jaGVyQ29udGV4dD1mdW5jdGlvbihWLFosVyx6KXtyZXR1cm4gdm9pZCAwPT09VyYmKFc9ImRpcmVjdCIpLFUodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7dmFyIHEsUTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHRlKXtzd2l0Y2godGUubGFiZWwpe2Nhc2UgMDppZighVil0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRDb250ZXh0KFYsdGhpcy5kZWZhdWx0'@;
put 'TGF1bmNoZXJDb250ZXh0cywiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoViwiJyBhbHJlYWR5IGV4aXN0cy4iKSksWzQsdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHopXTtjYXNlIDE6aWYodGUuc2VudCgpLmZpbmQoZnVuY3Rpb24oYWUpe3JldHVybiBhZS5uYW1lPT09Vn0pKXRocm93'@;
put 'IG5ldyBFcnJvcigiTGF1bmNoZXIgY29udGV4dCAnIi5jb25jYXQoViwiJyBhbHJlYWR5IGV4aXN0cy4iKSk7cmV0dXJuIHE9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0seiYmKHEuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KHopKSxRPXtuYW1lOlYsZGVzY3Jp'@;
put 'cHRpb246WixsYXVuY2hUeXBlOld9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2xhdW5jaGVyL2NvbnRleHRzIiksUSx6KS5jYXRjaChmdW5jdGlvbihhZSl7dGhyb3coMCxrLnByZWZpeE1lc3NhZ2UpKGFlLCJFcnJvciB3aGlsZSBjcmVh'@;
put 'dGluZyBsYXVuY2hlciBjb250ZXh0LiAiKX0pXTtjYXNlIDI6cmV0dXJuWzIsdGUuc2VudCgpLnJlc3VsdF19fSl9KX0sTi5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKFYsWixXKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeixxLFEs'@;
put 'dGU7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihhZSl7c3dpdGNoKGFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMudmFsaWRhdGVDb250ZXh0TmFtZShWKSx0aGlzLmlzRGVmYXVsdENvbnRleHQoVix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHMsIkVkaXRpbmcgZGVmYXVsdCBTQVMgY29t'@;
put 'cHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFYsVyldO2Nhc2UgMTpyZXR1cm4oej1hZS5zZW50KCkpP1szLDNdOls0LHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeUlkKFouaWQsVyldO2Nhc2UgMjp6PWFlLnNlbnQoKSxh'@;
put 'ZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHouaWQpLFcpLmNhdGNoKGZ1bmN0aW9uKHNlKXt0aHJvdyBzZSYmNDA0PT09c2Uuc3RhdHVzP25ldyBFcnJv'@;
put 'cigiVGhlIGNvbnRleHQgJyIuY29uY2F0KFYsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci4iKSk6c2V9KV07Y2FzZSA0OnJldHVybiBxPWFlLnNlbnQoKSx0ZT1xLmV0YWcsWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dCgiL2NvbXB1dGUvY29udGV4dHMvIi5jb25jYXQoKFE9cS5y'@;
put 'ZXN1bHQpLmlkKSxQKFAoUCh7fSxRKSxaKSx7YXR0cmlidXRlczpQKFAoe30sUS5hdHRyaWJ1dGVzKSxaLmF0dHJpYnV0ZXMpfSksVyx7IklmLU1hdGNoIjp0ZX0pXTtjYXNlIDU6cmV0dXJuWzIsYWUuc2VudCgpXX19KX0pfSxOLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1m'@;
put 'dW5jdGlvbihWLFope3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oeil7c3dpdGNoKHoubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwn'@;
put 'L2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICInKS5jb25jYXQoViwnIiknKSxaKS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLGsucHJlZml4TWVzc2FnZSkocSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KV07Y2FzZSAxOmlmKCEo'@;
put 'Vz16LnNlbnQoKS5yZXN1bHQpfHwhVy5pdGVtc3x8IVcuaXRlbXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiVGhlIGNvbnRleHQgJyIuY29uY2F0KFYsIicgd2FzIG5vdCBmb3VuZCBhdCAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm5bMixXLml0ZW1zWzBdXX19KX0p'@;
put 'fSxOLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5SWQ9ZnVuY3Rpb24oVixaKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50'@;
put 'LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9jb21wdXRlL2NvbnRleHRzLyIpLmNvbmNhdChWKSxaKS5jYXRjaChmdW5jdGlvbih6KXt0aHJvdygwLGsucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgaWQuICIpfSldO2Nhc2Ug'@;
put 'MTpyZXR1cm5bMixXLnNlbnQoKS5yZXN1bHRdfX0pfSl9LE4ucHJvdG90eXBlLmdldEV4ZWN1dGFibGVDb250ZXh0cz1mdW5jdGlvbihWLFope3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBXLHoscSxRLHRlLGFlLHNlLGxlLGNlO3JldHVybiBJKHRoaXMsZnVu'@;
put 'Y3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiKSxaPy5hY2Nlc3NfdG9rZW4pLmNhdGNoKGZ1bmN0aW9uKHkpe3Rocm93KDAs'@;
put 'ay5wcmVmaXhNZXNzYWdlKSh5LCJFcnJvciB3aGlsZSBmZXRjaGluZyBjb21wdXRlIGNvbnRleHRzLiIpfSldO2Nhc2UgMTpXPUcuc2VudCgpLnJlc3VsdCxxPVtdLFE9KHo9Vy5pdGVtc3x8W10pLm1hcChmdW5jdGlvbih5KXt2YXIgTD1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIFYoInRlc3QtIi5jb25jYXQoeS5uYW1lKSxMLHkubmFtZSxaLG51bGwsITEsITAsITApLmNhdGNoKGZ1bmN0aW9uKEgpe3JldHVybiBIfSl9fSksdGU9W10sYWU9MCxzZT1RLEcubGFiZWw9MjtjYXNlIDI6cmV0dXJuIGFlPHNlLmxlbmd0aD8oY2U9KGxlPXRlKS5w'@;
put 'dXNoLFs0LCgwLHNlW2FlXSkoKV0pOlszLDVdO2Nhc2UgMzpjZS5hcHBseShsZSxbRy5zZW50KCldKSxHLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBhZSsrLFszLDJdO2Nhc2UgNTpyZXR1cm4gdGUuZm9yRWFjaChmdW5jdGlvbih5LEwpe2lmKHkmJnkubG9nKXRyeXt2YXIgaj0iIixnPXkubG9n'@;
put 'LnNwbGl0KCJcbiIpLmZpbmQoZnVuY3Rpb24oUyl7cmV0dXJuIFMuc3RhcnRzV2l0aCgiU1lTVVNFUklEPSIpfSk7ZyYmKGo9Zy5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIikscS5wdXNoKHtjcmVhdGVkQnk6eltMXS5jcmVhdGVkQnksaWQ6eltMXS5pZCxuYW1lOnpbTF0ubmFtZSx2ZXJzaW9u'@;
put 'OnpbTF0udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6an19KSl9Y2F0Y2goUyl7dGhyb3cgU319KSxbMixxXX19KX0pfSxOLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihWLFope3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBX'@;
put 'LHo7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihxKXtzd2l0Y2gocS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoViksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFYsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJEZWxldGluZyBkZWZhdWx0IFNBUyBjb21w'@;
put 'dXRlIGNvbnRleHRzIGlzIG5vdCBhbGxvd2VkLiIsITApLFc9eyJDb250ZW50LVR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIn0sWiYmKFcuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KFopKSxbNCx0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFYsWildO2Nhc2UgMTpyZXR1cm4g'@;
put 'ej1xLnNlbnQoKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHouaWQpLFopXTtjYXNlIDI6cmV0dXJuWzIscS5zZW50KCldfX0pfSl9LE4ucHJvdG90eXBlLnZhbGlkYXRlQ29udGV4dE5h'@;
put 'bWU9ZnVuY3Rpb24oVil7aWYoIVYpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9LE4ucHJvdG90eXBlLmlzRGVmYXVsdENvbnRleHQ9ZnVuY3Rpb24oVixaLFcseil7aWYodm9pZCAwPT09WiYmKFo9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzKSx2b2lk'@;
put 'IDA9PT1XJiYoVz0iIiksdm9pZCAwPT09eiYmKHo9ITEpLFouaW5jbHVkZXMoVikpdGhyb3cgbmV3IEVycm9yKCIiLmNvbmNhdChXKS5jb25jYXQoej8iXG5EZWZhdWx0IGNvbnRleHRzOiIrWi5tYXAoZnVuY3Rpb24ocSxRKXtyZXR1cm4iXG4iLmNvbmNhdChRKzEsIi4gIikuY29uY2F0KHEp'@;
put 'fSk6IiIpKX0sTn0oKTtBLkNvbnRleHRNYW5hZ2VyPUJ9LDgzMDY6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyx6LHEsUSl7cmV0dXJuIG5ldyhxfHwocT1Qcm9taXNlKSkoZnVuY3Rpb24odGUsYWUpe2Z1bmN0aW9u'@;
put 'IHNlKGNlKXt0cnl7bGUoUS5uZXh0KGNlKSl9Y2F0Y2goRyl7YWUoRyl9fWZ1bmN0aW9uIGRlKGNlKXt0cnl7bGUoUS50aHJvdyhjZSkpfWNhdGNoKEcpe2FlKEcpfX1mdW5jdGlvbiBsZShjZSl7dmFyIEc7Y2UuZG9uZT90ZShjZS52YWx1ZSk6KEc9Y2UudmFsdWUsRyBpbnN0YW5jZW9mIHE/'@;
put 'RzpuZXcgcShmdW5jdGlvbih5KXt5KEcpfSkpLnRoZW4oc2UsZGUpfWxlKChRPVEuYXBwbHkoVyx6fHxbXSkpLm5leHQoKSl9KX0sVT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihXLHope3ZhciBxLFEsdGUsYWUsc2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmdGVb'@;
put 'MF0pdGhyb3cgdGVbMV07cmV0dXJuIHRlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGFlPXtuZXh0OmRlKDApLHRocm93OmRlKDEpLHJldHVybjpkZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGFlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30p'@;
put 'LGFlO2Z1bmN0aW9uIGRlKGxlKXtyZXR1cm4gZnVuY3Rpb24oY2Upe3JldHVybiBmdW5jdGlvbihHKXtpZihxKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3NlOyl0cnl7aWYocT0xLFEmJih0ZT0yJkdbMF0/US5yZXR1cm46R1sw'@;
put 'XT9RLnRocm93fHwoKHRlPVEucmV0dXJuKSYmdGUuY2FsbChRKSwwKTpRLm5leHQpJiYhKHRlPXRlLmNhbGwoUSxHWzFdKSkuZG9uZSlyZXR1cm4gdGU7c3dpdGNoKFE9MCx0ZSYmKEc9WzImR1swXSx0ZS52YWx1ZV0pLEdbMF0pe2Nhc2UgMDpjYXNlIDE6dGU9RzticmVhaztjYXNlIDQ6cmV0'@;
put 'dXJuIHNlLmxhYmVsKysse3ZhbHVlOkdbMV0sZG9uZTohMX07Y2FzZSA1OnNlLmxhYmVsKyssUT1HWzFdLEc9WzBdO2NvbnRpbnVlO2Nhc2UgNzpHPXNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgodGU9KHRlPXNlLnRyeXMpLmxlbmd0aD4wJiZ0ZVt0'@;
put 'ZS5sZW5ndGgtMV0pfHw2IT09R1swXSYmMiE9PUdbMF0pKXtzZT0wO2NvbnRpbnVlfWlmKDM9PT1HWzBdJiYoIXRlfHxHWzFdPnRlWzBdJiZHWzFdPHRlWzNdKSl7c2UubGFiZWw9R1sxXTticmVha31pZig2PT09R1swXSYmc2UubGFiZWw8dGVbMV0pe3NlLmxhYmVsPXRlWzFdLHRlPUc7YnJl'@;
put 'YWt9aWYodGUmJnNlLmxhYmVsPHRlWzJdKXtzZS5sYWJlbD10ZVsyXSxzZS5vcHMucHVzaChHKTticmVha310ZVsyXSYmc2Uub3BzLnBvcCgpLHNlLnRyeXMucG9wKCk7Y29udGludWV9Rz16LmNhbGwoVyxzZSl9Y2F0Y2goeSl7Rz1bNix5XSxRPTB9ZmluYWxseXtxPXRlPTB9aWYoNSZHWzBd'@;
put 'KXRocm93IEdbMV07cmV0dXJue3ZhbHVlOkdbMF0/R1sxXTp2b2lkIDAsZG9uZTohMH19KFtsZSxjZV0pfX19LEk9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlvbihXLHoscSl7aWYocXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBRLHRlPTAsYWU9ei5sZW5ndGg7dGU8'@;
put 'YWU7dGUrKykhUSYmdGUgaW4genx8KFF8fChRPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHosMCx0ZSkpLFFbdGVdPXpbdGVdKTtyZXR1cm4gVy5jb25jYXQoUXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoeikpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSksQS5TQVM5QXBpQ2xpZW50PXZvaWQgMDt2YXIgRT1EKDc3NTcpLGs9RCg2MjMwKSxCPUQoNzk1KSxOPUQoNTkyOCksVj1mdW5jdGlvbigpe2Z1bmN0aW9uIFcoeixxLFEpe3RoaXMuc2VydmVyVXJsPXosdGhpcy5qb2JzUGF0aD1xLHomJigwLE4uaXNVcmwpKHopLHRoaXMu'@;
put 'cmVxdWVzdENsaWVudD1uZXcgQi5TYXM5UmVxdWVzdENsaWVudCh6LFEpfXJldHVybiBXLnByb3RvdHlwZS5nZXRDb25maWc9ZnVuY3Rpb24oKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX0sVy5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKHope3omJih0aGlzLnNlcnZl'@;
put 'clVybD16KX0sVy5wcm90b3R5cGUuZXhlY3V0ZVNjcmlwdD1mdW5jdGlvbih6LHEsUSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLGFlLHNlLGRlLGxlLGNlLEc7cmV0dXJuIFUodGhpcyxmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOnJl'@;
put 'dHVybls0LHRoaXMucmVxdWVzdENsaWVudC5sb2dpbihxLFEsdGhpcy5qb2JzUGF0aCldO2Nhc2UgMTpyZXR1cm4geS5zZW50KCksdGU9WyJkYXRhIF9udWxsXzsiLCJmaWxlIF93ZWJvdXQ7IiwicHV0ICdFeGVjdXRlZCBzYXNqcyBydW4nOyIsInJ1bjsiXSxhZT1aKEkoSShbXSx6LCEwKSx0'@;
put 'ZSwhMCkuam9pbigiXG4iKSksc2U9Ii9Vc2VyIEZvbGRlcnMvIi5jb25jYXQocSwiL015IEZvbGRlci9zYXNqcy9ydW5uZXIiKSxkZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9IithZS5nZXRCb3VuZGFyeSgpLGxlPWFlLmdldExlbmd0aFN5bmMoKSxjZT17ImNhY2hlLWNvbnRy'@;
put 'b2wiOiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOmRlLCJDb250ZW50LUxlbmd0aCI6bGUsQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LEc9IiIuY29uY2F0KHRoaXMuam9ic1BhdGgsIi8/IikuY29uY2F0KCJfcHJvZ3JhbT0iK3NlKyImX2RlYnVnPWxvZyIpLFs0LHRo'@;
put 'aXMucmVxdWVzdENsaWVudC5wb3N0KEcsYWUsdm9pZCAwLGRlLGNlKV07Y2FzZSAyOnJldHVyblsyLHkuc2VudCgpLnJlc3VsdF19fSl9KX0sV30oKTtBLlNBUzlBcGlDbGllbnQ9Vjt2YXIgWj1mdW5jdGlvbihXKXt2YXIgej1uZXcgayxxPSJzYXNqcy1leGVjdXRlLXNhczktIi5jb25jYXQo'@;
put 'KDAsRS5nZW5lcmF0ZVRpbWVzdGFtcCkoIiIpLCIuc2FzIik7cmV0dXJuIHouYXBwZW5kKHEsVyx7ZmlsZW5hbWU6cSxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSx6fX0sOTgyMTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpLEk9dGhpcyYm'@;
put 'dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGNlLEcseSxMKXtyZXR1cm4gbmV3KHl8fCh5PVByb21pc2UpKShmdW5jdGlvbihILGope2Z1bmN0aW9uIGcoXyl7dHJ5e3goTC5uZXh0KF8pKX1jYXRjaChwKXtqKHApfX1mdW5jdGlvbiBTKF8pe3RyeXt4KEwudGhyb3coXykpfWNhdGNoKHApe2oo'@;
put 'cCl9fWZ1bmN0aW9uIHgoXyl7dmFyIHA7Xy5kb25lP0goXy52YWx1ZSk6KHA9Xy52YWx1ZSxwIGluc3RhbmNlb2YgeT9wOm5ldyB5KGZ1bmN0aW9uKEMpe0MocCl9KSkudGhlbihnLFMpfXgoKEw9TC5hcHBseShjZSxHfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9y'@;
put 'fHxmdW5jdGlvbihjZSxHKXt2YXIgeSxMLEgsaixnPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkhbMF0pdGhyb3cgSFsxXTtyZXR1cm4gSFsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBqPXtuZXh0OlMoMCksdGhyb3c6UygxKSxyZXR1cm46UygyKX0sImZ1bmN0aW9uIj09dHlw'@;
put 'ZW9mIFN5bWJvbCYmKGpbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksajtmdW5jdGlvbiBTKHgpe3JldHVybiBmdW5jdGlvbihfKXtyZXR1cm4gZnVuY3Rpb24ocCl7aWYoeSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRp'@;
put 'bmcuIik7Zm9yKDtnOyl0cnl7aWYoeT0xLEwmJihIPTImcFswXT9MLnJldHVybjpwWzBdP0wudGhyb3d8fCgoSD1MLnJldHVybikmJkguY2FsbChMKSwwKTpMLm5leHQpJiYhKEg9SC5jYWxsKEwscFsxXSkpLmRvbmUpcmV0dXJuIEg7c3dpdGNoKEw9MCxIJiYocD1bMiZwWzBdLEgudmFsdWVd'@;
put 'KSxwWzBdKXtjYXNlIDA6Y2FzZSAxOkg9cDticmVhaztjYXNlIDQ6cmV0dXJuIGcubGFiZWwrKyx7dmFsdWU6cFsxXSxkb25lOiExfTtjYXNlIDU6Zy5sYWJlbCsrLEw9cFsxXSxwPVswXTtjb250aW51ZTtjYXNlIDc6cD1nLm9wcy5wb3AoKSxnLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVs'@;
put 'dDppZighKChIPShIPWcudHJ5cykubGVuZ3RoPjAmJkhbSC5sZW5ndGgtMV0pfHw2IT09cFswXSYmMiE9PXBbMF0pKXtnPTA7Y29udGludWV9aWYoMz09PXBbMF0mJighSHx8cFsxXT5IWzBdJiZwWzFdPEhbM10pKXtnLmxhYmVsPXBbMV07YnJlYWt9aWYoNj09PXBbMF0mJmcubGFiZWw8SFsx'@;
put 'XSl7Zy5sYWJlbD1IWzFdLEg9cDticmVha31pZihIJiZnLmxhYmVsPEhbMl0pe2cubGFiZWw9SFsyXSxnLm9wcy5wdXNoKHApO2JyZWFrfUhbMl0mJmcub3BzLnBvcCgpLGcudHJ5cy5wb3AoKTtjb250aW51ZX1wPUcuY2FsbChjZSxnKX1jYXRjaChDKXtwPVs2LENdLEw9MH1maW5hbGx5e3k9'@;
put 'SD0wfWlmKDUmcFswXSl0aHJvdyBwWzFdO3JldHVybnt2YWx1ZTpwWzBdP3BbMV06dm9pZCAwLGRvbmU6ITB9fShbeCxfXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuU0FTVml5YUFwaUNsaWVudD12b2lkIDA7dmFyIGs9RCg1OTI4KSxC'@;
put 'PUQoNjIzMCksTj1EKDEzOTUpLFY9RCg2OTAzKSxaPUQoNjcyKSxXPUQoOTA5Nyksej1EKDk3NzgpLHE9RCgxMzQzKSxRPUQoNzA0KSx0ZT1EKDY0OTYpLGFlPUQoMTYyMiksc2U9RCgzNTY5KSxkZT1EKDM2NiksbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBjZShHLHksTCxIKXt0aGlzLnNlcnZl'@;
put 'clVybD1HLHRoaXMucm9vdEZvbGRlck5hbWU9eSx0aGlzLmNvbnRleHROYW1lPUwsdGhpcy5yZXF1ZXN0Q2xpZW50PUgsdGhpcy5fZGVidWc9ITEsdGhpcy5zZXNzaW9uTWFuYWdlcj1uZXcgVi5TZXNzaW9uTWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLmNvbnRleHROYW1lLHRoaXMucmVx'@;
put 'dWVzdENsaWVudCksdGhpcy5jb250ZXh0TWFuYWdlcj1uZXcgWi5Db250ZXh0TWFuYWdlcih0aGlzLnNlcnZlclVybCx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuZm9sZGVyTWFwPW5ldyBNYXAsRyYmKDAsay5pc1VybCkoRyl9cmV0dXJuIGNlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1'@;
put 'bmN0aW9uKEcseSxMKXt0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChHLHksTCl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjZS5wcm90b3R5cGUsImRlYnVnIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oRyl7dGhpcy5fZGVidWc9Ryx0'@;
put 'aGlzLnNlc3Npb25NYW5hZ2VyJiYodGhpcy5zZXNzaW9uTWFuYWdlci5kZWJ1Zz1HKX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxjZS5wcm90b3R5cGUuZ2V0Sm9ic0luRm9sZGVyPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3Zh'@;
put 'ciB5O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTCl7c3dpdGNoKEwubGFiZWwpe2Nhc2UgMDpyZXR1cm4geT0oMCxrLmlzUmVsYXRpdmVQYXRoKShHKT8iIi5jb25jYXQodGhpcy5yb290Rm9sZGVyTmFtZSwiLyIpLmNvbmNhdChHKTpHLHRoaXMuZm9sZGVyTWFwLmdldCh5KT9bMix0aGlzLmZv'@;
put 'bGRlck1hcC5nZXQoeSldOls0LHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoeSldO2Nhc2UgMTpyZXR1cm4gTC5zZW50KCksWzIsdGhpcy5mb2xkZXJNYXAuZ2V0KHkpXX19KX0pfSxjZS5wcm90b3R5cGUuZ2V0Q29uZmlnPWZ1bmN0aW9uKCl7cmV0dXJue3NlcnZlclVybDp0aGlzLnNlcnZlclVy'@;
put 'bCxyb290Rm9sZGVyTmFtZTp0aGlzLnJvb3RGb2xkZXJOYW1lfX0sY2UucHJvdG90eXBlLnNldENvbmZpZz1mdW5jdGlvbihHLHkpe0cmJih0aGlzLnNlcnZlclVybD1HKSx5JiYodGhpcy5yb290Rm9sZGVyTmFtZT15KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlv'@;
put 'bihHKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRDb21wdXRlQ29udGV4dHMoRyldO2Nhc2UgMTpyZXR1cm5bMix5LnNl'@;
put 'bnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0TWFuYWdlci5nZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzfSxjZS5wcm90b3R5cGUuZ2V0TGF1bmNoZXJDb250ZXh0cz1mdW5jdGlvbihHKXtyZXR1'@;
put 'cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5nZXRMYXVuY2hlckNvbnRleHRzKEcpXTtjYXNlIDE6cmV0dXJuWzIseS5zZW50KCldfX0p'@;
put 'fSl9LGNlLnByb3RvdHlwZS5nZXRFeGVjdXRhYmxlQ29udGV4dHM9ZnVuY3Rpb24oRyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHk7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihMKXtzd2l0Y2goTC5sYWJlbCl7Y2FzZSAwOnJldHVybiB5PXRoaXMuZXhlY3V0'@;
put 'ZVNjcmlwdC5iaW5kKHRoaXMpLFs0LHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKHksRyldO2Nhc2UgMTpyZXR1cm5bMixMLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZVNlc3Npb249ZnVuY3Rpb24oRyx5KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgTCxILGo7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihnKXtzd2l0Y2goZy5sYWJlbCl7Y2FzZSAwOnJldHVybiBMPXsiQ29udGVudC1UeXBlIjoiYXBwbGljYXRpb24vanNvbiJ9LHkmJihMLkF1dGhvcml6YXRpb249IkJlYXJlciAiLmNvbmNhdCh5KSksWzQs'@;
put 'dGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDAiLHkpXTtjYXNlIDE6aWYoSD1nLnNlbnQoKS5yZXN1bHQsIShqPUguaXRlbXMmJkguaXRlbXMubGVuZ3RoP0guaXRlbXMuZmluZChmdW5jdGlvbihTKXtyZXR1cm4gUy5uYW1lPT09R30pOm51bGwp'@;
put 'KXRocm93IG5ldyBFcnJvcigiRXhlY3V0aW9uIGNvbnRleHQgIi5jb25jYXQoRywiIG5vdCBmb3VuZC4iKSk7cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIi9jb21wdXRlL2NvbnRleHRzLyIuY29uY2F0KGouaWQsIi9zZXNzaW9ucyIpLHt9LHkpXTtjYXNlIDI6cmV0dXJuWzIs'@;
put 'Zy5zZW50KCkucmVzdWx0XX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyx5LEwsSCxqLGcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2Ug'@;
put 'MDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmNyZWF0ZUNvbXB1dGVDb250ZXh0KEcseSxMLEgsaixnKV07Y2FzZSAxOnJldHVyblsyLFMuc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKEcseSxMLEgpe3JldHVybiB2b2lkIDA9'@;
put 'PT1MJiYoTD0iZGlyZWN0IiksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoRyx5LEwsSCldO2Nhc2Ug'@;
put 'MTpyZXR1cm5bMixqLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmVkaXRDb21wdXRlQ29udGV4dD1mdW5jdGlvbihHLHksTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7Y2FzZSAwOnJl'@;
put 'dHVybls0LHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KEcseSxMKV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ29tcHV0ZUNvbnRleHQ9ZnVuY3Rpb24oRyx5KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5jb250ZXh0TWFuYWdlci5kZWxldGVDb21wdXRlQ29udGV4dChHLHkpXTtjYXNlIDE6cmV0dXJuWzIsTC5zZW50KCldfX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRl'@;
put 'U2NyaXB0PWZ1bmN0aW9uKEcseSxMLEgsaixnLFMseCxfLHAsQyl7cmV0dXJuIHZvaWQgMD09PWomJihqPW51bGwpLHZvaWQgMD09PWcmJihnPSExKSx2b2lkIDA9PT1TJiYoUz0hMSksdm9pZCAwPT09eCYmKHg9ITApLHZvaWQgMD09PXAmJihwPSExKSxJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oSyl7cmV0dXJuWzIsKDAsYWUuZXhlY3V0ZU9uQ29tcHV0ZUFwaSkodGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2Vzc2lvbk1hbmFnZXIsdGhpcy5yb290Rm9sZGVyTmFtZSxHLHksTCxILGosZyxTLHgsXyxwLEMpXX0pfSl9LGNlLnBy'@;
put 'b3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24oRyx5KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiL2ZvbGRlcnMvZm9s'@;
put 'ZGVycy9AaXRlbT9wYXRoPSIuY29uY2F0KEcpLHkpLnRoZW4oZnVuY3Rpb24oSCl7cmV0dXJuIEgucmVzdWx0fSldO2Nhc2UgMTpyZXR1cm5bMixMLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24oRyx5LEwsSCxqKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxTO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDppZighTCYmIUgpdGhyb3cgbmV3IEVycm9yKCJQYXRoIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gSHx8IUw/WzMs'@;
put 'Ml06WzQsdGhpcy5nZXRGb2xkZXJVcmkoTCxqKV07Y2FzZSAxOkg9eC5zZW50KCkseC5sYWJlbD0yO2Nhc2UgMjpyZXR1cm4gZz17QWNjZXB0OiJhcHBsaWNhdGlvbi92bmQuc2FzLmZpbGUranNvbiIsIkNvbnRlbnQtRGlzcG9zaXRpb24iOidmaWxlbmFtZT0iJy5jb25jYXQoRywnIjsnKX0s'@;
put 'KFM9bmV3IEIpLmFwcGVuZCgiZmlsZSIseSxHKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiL2ZpbGVzL2ZpbGVzP3BhcmVudEZvbGRlclVyaT0iLmNvbmNhdChILCImdHlwZURlZk5hbWU9ZmlsZSNyYXdVcGxvYWQiKSxTLGosIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIr'@;
put 'Uy5fYm91bmRhcnksZyldO2Nhc2UgMzpyZXR1cm5bMix4LnNlbnQoKS5yZXN1bHRdfX0pfSl9LGNlLnByb3RvdHlwZS5jcmVhdGVGb2xkZXI9ZnVuY3Rpb24oRyx5LEwsSCxqKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxTLHgsXyxDO3JldHVybiBFKHRo'@;
put 'aXMsZnVuY3Rpb24oSyl7c3dpdGNoKEsubGFiZWwpe2Nhc2UgMDppZihnPVAubG9nZ2VyfHxVLCF5JiYhTCl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO3JldHVybiBMfHwheT9bMyw2XTpbNCx0aGlzLmdldEZvbGRlclVy'@;
put 'aSh5LEgpXTtjYXNlIDE6aWYoTD1LLnNlbnQoKSlyZXR1cm5bMywzXTtpZihnLmluZm8oIlBhcmVudCBmb2xkZXIgYXQgcGF0aCAnIi5jb25jYXQoeSwiJyBpcyBub3QgcHJlc2VudC4iKSksUz15LnN1YnN0cmluZygwLHkubGFzdEluZGV4T2YoIi8iKSkseD0iIi5jb25jYXQoeS5zcGxpdCgi'@;
put 'LyIpLnBvcCgpKSwiIj09PVMpdGhyb3cgbmV3IE4uUm9vdEZvbGRlck5vdEZvdW5kRXJyb3IoeSx0aGlzLnNlcnZlclVybCxIKTtyZXR1cm4gZy5pbmZvKCJDcmVhdGluZyBwYXJlbnQgZm9sZGVyOlxuJyIuY29uY2F0KHgsIicgaW4gJyIpLmNvbmNhdChTLCInIikpLFs0LHRoaXMuY3JlYXRl'@;
put 'Rm9sZGVyKHgsUyx2b2lkIDAsSCldO2Nhc2UgMjpyZXR1cm4gXz1LLnNlbnQoKSxnLmluZm8oIlBhcmVudCBmb2xkZXIgJyIuY29uY2F0KHgsIicgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuIikpLEw9Ii9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoXy5pZCksWzMsNl07Y2FzZSAz'@;
put 'OnJldHVybiBqP1s0LHRoaXMuZ2V0Rm9sZGVyVXJpKHkrIi8iK0csSCldOlszLDZdO2Nhc2UgNDpyZXR1cm4gSy5zZW50KCk/WzQsdGhpcy5kZWxldGVGb2xkZXIoeSsiLyIrRyxIKV06WzMsNl07Y2FzZSA1Oksuc2VudCgpLEsubGFiZWw9NjtjYXNlIDY6cmV0dXJuWzQsdGhpcy5yZXF1ZXN0'@;
put 'Q2xpZW50LnBvc3QoIi9mb2xkZXJzL2ZvbGRlcnM/cGFyZW50Rm9sZGVyVXJpPSIuY29uY2F0KEwpLHtuYW1lOkcsdHlwZToiZm9sZGVyIn0sSCkuY2F0Y2goZnVuY3Rpb24obmUpe3ZhciB1ZT1uZS5tZXNzYWdlLGhlPW5lLnJlc3BvbnNlO2lmKHVlJiZoZSYmaGUuZGF0YSYmaGUuZGF0YS5t'@;
put 'ZXNzYWdlKXt2YXIgeGU9aGUuc3RhdHVzLE9lPVt1ZSxoZS5kYXRhLm1lc3NhZ2VdLm1hcChmdW5jdGlvbihIZSl7cmV0dXJuL1wuJC8udGVzdChIZSk/SGU6IiIuY29uY2F0KEhlLCIuIil9KTt0aHJvdyBqfHw0MDkhPT14ZXx8T2UucHVzaCgnVG8gb3ZlcnJpZGUsIHBsZWFzZSBzZXQgImlz'@;
put 'Rm9yY2VkIiB0byAidHJ1ZSIuJyksT2Uuam9pbigiICIpfXRocm93IG5lfSldO2Nhc2UgNzpyZXR1cm4gQz1LLnNlbnQoKS5yZXN1bHQsWzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcCgiIi5jb25jYXQoeSwiLyIpLmNvbmNhdChHKSxIKV07Y2FzZSA4OnJldHVybiBLLnNlbnQoKSxbMixDXX19'@;
put 'KX0pfSxjZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbihHLHksTCxILGope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZighTCYmIUgpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJQYXRoIHRvIG9yIFVSSSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4gSHx8IUw/WzMsMl06WzQsdGhpcy5nZXRGb2xkZXJVcmkoTCxqKV07Y2FzZSAxOkg9Zy5zZW50KCksZy5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnJlcXVlc3RDbGll'@;
put 'bnQucG9zdCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIi9qb2JEZWZpbml0aW9ucy9kZWZpbml0aW9ucz9wYXJlbnRGb2xkZXJVcmk9IikuY29uY2F0KEgpLHtuYW1lOkcscGFyYW1ldGVyczpbe25hbWU6Il9hZGRqZXNiZWdpbmVuZG1hY3JvcyIsdHlwZToiQ0hBUkFDVEVSIixkZWZhdWx0'@;
put 'VmFsdWU6ImZhbHNlIn1dLHR5cGU6IkNvbXB1dGUiLGNvZGU6eX0saildO2Nhc2UgMzpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKEcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB5LEw9dGhpczty'@;
put 'ZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHk9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0iKS5jb25jYXQoRywiJnJlc3BvbnNlX3R5cGU9Y29kZSIpLFs0LHRoaXMucmVx'@;
put 'dWVzdENsaWVudC5nZXQoeSx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKGZ1bmN0aW9uKGope3JldHVybiBqLnJlc3VsdH0pLnRoZW4oZnVuY3Rpb24oail7cmV0dXJuIEkoTCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsUyx4LF87cmV0dXJuIEUodGhpcyxmdW5jdGlvbihwKXtz'@;
put 'd2l0Y2gocC5sYWJlbCl7Y2FzZSAwOnJldHVybiBnPSIiLCgwLFcuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKGopP1s0LHRoaXMucmVxdWVzdENsaWVudC5hdXRob3JpemUoaildOlszLDJdO2Nhc2UgMTpyZXR1cm4gUz1wLnNlbnQoKSx4PVMuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8'@;
put 'L2JvZHk+IilbMF0sKF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD14LFsyLGc9Xy5xdWVyeVNlbGVjdG9yKCIuaW5mb2JveCBoNCIpLmlubmVyVGV4dF07Y2FzZSAyOnJldHVybiB4PWouc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKF89'@;
put 'ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD14LF8mJihnPV8ucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQpLFsyLGddfX0pfSl9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiBudWxsfSldO2Nhc2UgMTpyZXR1cm5bMixILnNlbnQoKV19fSl9'@;
put 'KX0sY2UucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKEcseSxMKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3JldHVyblsyLCgwLHNlLmdldEFjY2Vzc1Rva2VuRm9yVml5YSkodGhpcy5yZXF1ZXN0Q2xp'@;
put 'ZW50LEcseSxMKV19KX0pfSxjZS5wcm90b3R5cGUucmVmcmVzaFRva2Vucz1mdW5jdGlvbihHLHksTCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtyZXR1cm5bMiwoMCxkZS5yZWZyZXNoVG9rZW5zRm9yVml5YSkodGhp'@;
put 'cy5yZXF1ZXN0Q2xpZW50LEcseSxMKV19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlQ2xpZW50PWZ1bmN0aW9uKEcseSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEwsSDtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6'@;
put 'cmV0dXJuIEw9dGhpcy5zZXJ2ZXJVcmwrIi9vYXV0aC9jbGllbnRzLyIuY29uY2F0KEcpLEg9e30seSYmKEguQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KHkpKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZGVsZXRlKEwseSldO2Nhc2UgMTpyZXR1cm5bMixqLnNlbnQoKS5yZXN1bHRd'@;
put 'fX0pfSl9LGNlLnByb3RvdHlwZS5leGVjdXRlQ29tcHV0ZUpvYj1mdW5jdGlvbihHLHksTCxILGosZyxTLHgsXyxwKXtyZXR1cm4gdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PVMmJihTPSExKSx2b2lkIDA9PT1fJiYoXz0hMSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2'@;
put 'YXIgQyxLLG5lLHVlLGhlLHhlLE9lLEhlLEVlLExlLE5lO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oS2Upe3N3aXRjaChLZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBDPShqfHx7fSkuYWNjZXNzX3Rva2VuLGo/WzQsKDAsUS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxqKV06WzMsMl07'@;
put 'Y2FzZSAxOkM9S2Uuc2VudCgpLmFjY2Vzc190b2tlbixLZS5sYWJlbD0yO2Nhc2UgMjppZigoMCxrLmlzUmVsYXRpdmVQYXRoKShHKSYmIXRoaXMucm9vdEZvbGRlck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcg'@;
put 'YSByb290IGZvbGRlciBuYW1lIik7cmV0dXJuIEs9Ry5zcGxpdCgiLyIpLG5lPUsucG9wKCksdWU9Sy5qb2luKCIvIiksaGU9KDAsay5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZvbGRlck5hbWUsIi8iKS5jb25jYXQodWUpOnVlLFs0LHRoaXMucG9wdWxhdGVGb2xk'@;
put 'ZXJNYXAoaGUsQykuY2F0Y2goZnVuY3Rpb24oVWUpe3Rocm93KDAsei5wcmVmaXhNZXNzYWdlKShVZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pXTtjYXNlIDM6aWYoS2Uuc2VudCgpLCEoeGU9dGhpcy5mb2xkZXJNYXAuZ2V0KGhlKSkpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJUaGUgZm9sZGVyICciLmNvbmNhdChoZSwiJyB3YXMgbm90IGZvdW5kIG9uICciKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwsIiciKSk7aWYoIShPZT14ZT8uZmluZChmdW5jdGlvbihVZSl7cmV0dXJuIFVlLm5hbWU9PT1uZX0pKSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90IGZvdW5k'@;
put 'LiIpO2lmKEhlPU9lPy5jb2RlKXJldHVyblszLDVdO2lmKCEoRWU9T2U/LmxpbmtzLmZpbmQoZnVuY3Rpb24oVWUpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1VZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCx0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KEVlLmhyZWYpLEMpLmNhdGNoKGZ1bmN0aW9uKFVlKXt0aHJvdygwLHoucHJlZml4TWVzc2FnZSkoVWUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSldO2Nhc2UgNDpM'@;
put 'ZT1LZS5zZW50KCkucmVzdWx0LE9lLmNvZGU9SGU9TGUuY29kZSxLZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gSGV8fChIZT0iIiksTmU9SGUucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnNwbGl0KCJcbiIpLFs0LHRoaXMuZXhlY3V0ZVNjcmlwdChHLE5lLHksaixILEwsUyxnLHgsXyxwKV07Y2Fz'@;
put 'ZSA2OnJldHVyblsyLEtlLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24oRyx5LEwsSCxqKXt2YXIgZyxTLHg7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIF8scCxDLEssbmUsdWUsaGUseGUsT2UsSGUsRWUsTGUsTmUsS2Us'@;
put 'VWUsWGUsYXQsRmUsQ2UsRGUsUmU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihldCl7c3dpdGNoKGV0LmxhYmVsKXtjYXNlIDA6cmV0dXJuIF89KGp8fHt9KS5hY2Nlc3NfdG9rZW4saj9bNCwoMCxRLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LGopXTpbMywyXTtjYXNlIDE6Xz1ldC5z'@;
put 'ZW50KCkuYWNjZXNzX3Rva2VuLGV0LmxhYmVsPTI7Y2FzZSAyOmlmKCgwLGsuaXNSZWxhdGl2ZVBhdGgpKEcpJiYhdGhpcy5yb290Rm9sZGVyTmFtZSl0aHJvdyBuZXcgRXJyb3IoIlJlbGF0aXZlIHBhdGhzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgc3BlY2lmeWluZyBhIHJvb3QgZm9sZGVy'@;
put 'IG5hbWUuIik7cmV0dXJuIHA9Ry5zcGxpdCgiLyIpLEM9cC5wb3AoKSxLPXAuam9pbigiLyIpLG5lPSgwLGsuaXNSZWxhdGl2ZVBhdGgpKEcpPyIiLmNvbmNhdCh0aGlzLnJvb3RGb2xkZXJOYW1lLCIvIikuY29uY2F0KEspOkssWzQsdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChuZSxfKV07Y2Fz'@;
put 'ZSAzOmlmKGV0LnNlbnQoKSwhKHVlPXRoaXMuZm9sZGVyTWFwLmdldChuZSkpKXRocm93IG5ldyBFcnJvcigiVGhlIGZvbGRlciAnIi5jb25jYXQobmUsIicgd2FzIG5vdCBmb3VuZCBvbiAnIikuY29uY2F0KHRoaXMuc2VydmVyVXJsLCInLiIpKTtyZXR1cm4gaGU9dWU/LmZpbmQoZnVuY3Rp'@;
put 'b24obnQpe3JldHVybiBudC5uYW1lPT09Q30pLHhlPVtdLEgmJk9iamVjdC5rZXlzKEgpLmxlbmd0aD9bNCx0aGlzLnVwbG9hZFRhYmxlcyhILF8pXTpbMyw1XTtjYXNlIDQ6eGU9ZXQuc2VudCgpLGV0LmxhYmVsPTU7Y2FzZSA1OmlmKCFoZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiB3YXMgbm90'@;
put 'IGZvdW5kLiIpO3JldHVybiBPZT1udWxsPT09KGc9aGU/LmxpbmtzLmZpbmQoZnVuY3Rpb24obnQpe3JldHVybiJnZXRSZXNvdXJjZSI9PT1udC5yZWx9KSl8fHZvaWQgMD09PWc/dm9pZCAwOmcuaHJlZixbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVy'@;
put 'bCkuY29uY2F0KE9lKSxfKV07Y2FzZSA2OnJldHVybiBIZT1ldC5zZW50KCkucmVzdWx0LEVlPXtfY29udGV4dE5hbWU6eSxfcHJvZ3JhbToiIi5jb25jYXQobmUsIi8iKS5jb25jYXQoQyksX3dlYmluX2ZpbGVfY291bnQ6eGUubGVuZ3RoLF9PTUlUSlNPTkxJU1RJTkc6ITAsX09NSVRKU09O'@;
put 'TE9HOiEwLF9PTUlUU0VTU0lPTlJFU1VMVFM6ITAsX09NSVRURVhUTElTVElORzohMCxfT01JVFRFWFRMT0c6ITB9LEwmJihFZS5fT01JVFRFWFRMT0c9ImZhbHNlIixFZS5fT01JVFNFU1NJT05SRVNVTFRTPSJmYWxzZSIsRWUuX0RFQlVHPTEzMSkseGUuZm9yRWFjaChmdW5jdGlvbihudCxH'@;
put 'ZSl7RWVbIl93ZWJpbl9maWxldXJpIi5jb25jYXQoR2UrMSldPSIvZmlsZXMvZmlsZXMvIi5jb25jYXQobnQuZmlsZS5pZCksRWVbIl93ZWJpbl9uYW1lIi5jb25jYXQoR2UrMSldPW50LnRhYmxlTmFtZX0pLExlPXtuYW1lOiJleGVjLSIuY29uY2F0KEMpLGRlc2NyaXB0aW9uOiJQb3dlcmVk'@;
put 'IGJ5IFNBU2pzIixqb2JEZWZpbml0aW9uOkhlLGFyZ3VtZW50czpFZX0sWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvam9iRXhlY3V0aW9uL2pvYnM/X2FjdGlvbj13YWl0IiksTGUsXyldO2Nhc2UgNzpyZXR1cm4gTmU9ZXQuc2VudCgpLnJl'@;
put 'c3VsdCxbNCx0aGlzLnBvbGxKb2JTdGF0ZShOZSxqKS5jYXRjaChmdW5jdGlvbihudCl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKG50LCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfSldO2Nhc2UgODpyZXR1cm4gS2U9ZXQuc2VudCgpLFs0LHRoaXMucmVxdWVzdENsaWVu'@;
put 'dC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvam9iRXhlY3V0aW9uL2pvYnMvIikuY29uY2F0KE5lLmlkKSxfKV07Y2FzZSA5OnJldHVybiBVZT1ldC5zZW50KCkucmVzdWx0LEZlPVVlLnJlc3VsdHNbIl93ZWJvdXQuanNvbiJdLENlPVVlLmxpbmtzLmZpbmQoZnVuY3Rpb24obnQp'@;
put 'e3JldHVybiJsb2ciPT09bnQucmVsfSksRmU/WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChGZSwiL2NvbnRlbnQiKSxfLCJ0ZXh0L3BsYWluIildOlszLDExXTtjYXNlIDEwOlhlPWV0LnNlbnQoKSxldC5sYWJlbD0xMTtjYXNlIDEx'@;
put 'OnJldHVybiBMJiZDZT9bNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KENlLmhyZWYsIi9jb250ZW50IiksXykudGhlbihmdW5jdGlvbihudCl7cmV0dXJuIG50LnJlc3VsdC5pdGVtcy5tYXAoZnVuY3Rpb24oR2Upe3JldHVybiBHZS5s'@;
put 'aW5lfSkuam9pbigiXG4iKX0pXTpbMywxM107Y2FzZSAxMjphdD1ldC5zZW50KCksZXQubGFiZWw9MTM7Y2FzZSAxMzppZigiZmFpbGVkIj09PUtlKXRocm93IG5ldyBOLkpvYkV4ZWN1dGlvbkVycm9yKG51bGw9PT0oUz1VZS5lcnJvcil8fHZvaWQgMD09PVM/dm9pZCAwOlMuZXJyb3JDb2Rl'@;
put 'LG51bGw9PT0oeD1VZS5lcnJvcil8fHZvaWQgMD09PXg/dm9pZCAwOngubWVzc2FnZSxhdCk7cmV0dXJuIERlPXtyZXN1bHQ6WGU/LnJlc3VsdCxsb2c6YXR9LChSZT1VZS5lcnJvcikmJihEZS5lcnJvcj1SZSksWzIsRGVdfX0pfSl9LGNlLnByb3RvdHlwZS5wb3B1bGF0ZUZvbGRlck1hcD1m'@;
put 'dW5jdGlvbihHLHkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBMLGosZztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuIEw9KDAsay5pc1JlbGF0aXZlUGF0aCkoRyk/IiIuY29uY2F0KHRoaXMucm9vdEZv'@;
put 'bGRlck5hbWUsIi8iKS5jb25jYXQoRyk6Ryx0aGlzLmZvbGRlck1hcC5nZXQoTCk/WzJdOls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KCIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9IitMKSx5KS5jYXRjaChmdW5jdGlvbihfKXt0aHJvdygwLHoucHJlZml4TWVzc2Fn'@;
put 'ZSkoXywiRXJyb3Igd2hpbGUgZ2V0dGluZyBmb2xkZXIuICIpfSldO2Nhc2UgMTppZighKGo9eC5zZW50KCkucmVzdWx0KSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXRoICIuY29uY2F0KEwsIiBkb2VzIG5vdCBleGlzdCBvbiAiKS5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpKTtyZXR1cm5bNCx0'@;
put 'aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvZm9sZGVycy9mb2xkZXJzLyIuY29uY2F0KGouaWQsIi9tZW1iZXJzP2xpbWl0PSIpLmNvbmNhdChqLm1lbWJlckNvdW50PDUwMD81MDA6ai5tZW1iZXJDb3VudCkseSkuY2F0Y2goZnVuY3Rpb24oXyl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKF8s'@;
put 'IkVycm9yIHdoaWxlIGdldHRpbmcgbWVtYmVycy4gIil9KV07Y2FzZSAyOnJldHVybiBnPXguc2VudCgpLnJlc3VsdCx0aGlzLmZvbGRlck1hcC5zZXQoTCxnLml0ZW1zKSxbMl19fSl9KX0sY2UucHJvdG90eXBlLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbihHLHksTCl7cmV0dXJuIEkodGhpcyx2'@;
put 'b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtyZXR1cm5bMiwoMCxxLnBvbGxKb2JTdGF0ZSkodGhpcy5yZXF1ZXN0Q2xpZW50LEcsdGhpcy5kZWJ1Zyx5LEwpXX0pfSl9LGNlLnByb3RvdHlwZS51cGxvYWRUYWJsZXM9ZnVuY3Rpb24oRyx5KXtyZXR1'@;
put 'cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEwpe3JldHVyblsyLCgwLHRlLnVwbG9hZFRhYmxlcykodGhpcy5yZXF1ZXN0Q2xpZW50LEcseSldfSl9KX0sY2UucHJvdG90eXBlLmdldEZvbGRlckRldGFpbHM9ZnVuY3Rpb24oRyx5KXty'@;
put 'ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTCxIO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oail7c3dpdGNoKGoubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTD0oMCxrLmlzVXJpKShHKT9HOiIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9Ii5jb25jYXQoRyksWzQs'@;
put 'dGhpcy5yZXF1ZXN0Q2xpZW50LmdldCgiIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChMKSx5KS5jYXRjaChmdW5jdGlvbihnKXtpZihnIGluc3RhbmNlb2YgTi5DZXJ0aWZpY2F0ZUVycm9yKXRocm93IGc7cmV0dXJue3Jlc3VsdDpudWxsfX0pXTtjYXNlIDE6cmV0dXJuKEg9ai5z'@;
put 'ZW50KCkucmVzdWx0KT9bMixIXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRGb2xkZXJVcmk9ZnVuY3Rpb24oRyx5KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTDtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtj'@;
put 'YXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRGb2xkZXJEZXRhaWxzKEcseSldO2Nhc2UgMTpyZXR1cm4oTD1ILnNlbnQoKSk/WzIsIi9mb2xkZXJzL2ZvbGRlcnMvIi5jb25jYXQoTC5pZCldOlsyLHZvaWQgMF19fSl9KX0sY2UucHJvdG90eXBlLmdldFJlY3ljbGVCaW5Vcmk9ZnVuY3Rpb24oRyl7'@;
put 'cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHk7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihMKXtzd2l0Y2goTC5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJsKS5jb25jYXQoIi9mb2xk'@;
put 'ZXJzL2ZvbGRlcnMvQG15UmVjeWNsZUJpbiIpLEcpLmNhdGNoKGZ1bmN0aW9uKEgpe2lmKEggaW5zdGFuY2VvZiBOLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgSDtyZXR1cm57cmVzdWx0Om51bGx9fSldO2Nhc2UgMTpyZXR1cm4oeT1MLnNlbnQoKS5yZXN1bHQpP1syLCIvZm9sZGVycy9mb2xk'@;
put 'ZXJzLyIuY29uY2F0KHkuaWQpXTpbMix2b2lkIDBdfX0pfSl9LGNlLnByb3RvdHlwZS5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZT1mdW5jdGlvbihHLHkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTCl7c3dpdGNoKEwubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKEcseSldO2Nhc2UgMTpyZXR1cm5bMixMLnNlbnQoKV19fSl9KX0sY2UucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbihHLHkpe3JldHVybiBJKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTCl7c3dpdGNoKEwubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlJZChHLHkpXTtjYXNlIDE6cmV0dXJuWzIsTC5zZW50KCldfX0pfSl9LGNl'@;
put 'LnByb3RvdHlwZS5saXN0Rm9sZGVyPWZ1bmN0aW9uKEcseSxMKXtyZXR1cm4gdm9pZCAwPT09TCYmKEw9MjApLEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsaixnO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm4oMCxr'@;
put 'LmlzVXJpKShHKT8oaj1HLFszLDNdKTpbMywxXTtjYXNlIDE6cmV0dXJuWzQsdGhpcy5nZXRGb2xkZXJVcmkoRyx5KV07Y2FzZSAyOmo9Uy5zZW50KCksUy5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gSD1qLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQoIiIuY29uY2F0KHRoaXMuc2VydmVyVXJs'@;
put 'KS5jb25jYXQoSCwiL21lbWJlcnM/bGltaXQ9IikuY29uY2F0KEwpLHkpXTtjYXNlIDQ6cmV0dXJuKGc9Uy5zZW50KCkucmVzdWx0KSYmZy5pdGVtcz9bMixnLml0ZW1zLm1hcChmdW5jdGlvbih4KXtyZXR1cm4geC5uYW1lfSldOlsyLFtdXX19KX0pfSxjZS5wcm90b3R5cGUubW92ZUZvbGRl'@;
put 'cj1mdW5jdGlvbihHLHksTCxIKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaixnLFMseCxfLHA7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDKXtzd2l0Y2goQy5sYWJlbCl7Y2FzZSAwOnJldHVybiBqPUcuc3BsaXQoIi8iKS5wb3AoKSxbNCx0aGlzLmdldEZv'@;
put 'bGRlckRldGFpbHMoeSxIKV07Y2FzZSAxOnJldHVybiBDLnNlbnQoKT9MPWo6KChnPXkuc3BsaXQoIi8iKSkuc3BsaWNlKGcubGVuZ3RoLTEsMSkseT1nLmpvaW4oIi8iKSksWzQsdGhpcy5nZXRGb2xkZXJVcmkoRyxIKV07Y2FzZSAyOnJldHVybiBTPUMuc2VudCgpLFs0LHRoaXMuZ2V0Rm9s'@;
put 'ZGVyVXJpKHksSCldO2Nhc2UgMzpyZXR1cm4geD1DLnNlbnQoKSxTPyhfPVM/LnNwbGl0KCIvIikucG9wKCksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBhdGNoKCIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCkuY29uY2F0KFMpLHtpZDpfLG5hbWU6TCxwYXJlbnRGb2xkZXJVcmk6eH0sSCkuY2F0'@;
put 'Y2goZnVuY3Rpb24oSyl7dGhyb3cgSy5jb2RlJiYiRU5PVEZPVU5EIj09PUsuY29kZT97Ym9keTp7bWVzc2FnZToiRm9sZGVyICciLmNvbmNhdChHLnNwbGl0KCIvIikucG9wKCksIicgd2FzIG5vdCBmb3VuZC4iKX19Okt9KV0pOlsyLHZvaWQgMF07Y2FzZSA0OnJldHVybihwPUMuc2VudCgp'@;
put 'LnJlc3VsdCk/WzIscF06WzIsdm9pZCAwXX19KX0pfSxjZS5wcm90b3R5cGUuZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKEcseSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEwsSCxqLGc7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4KXtzd2l0Y2goeC5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybls0LHRoaXMuZ2V0UmVjeWNsZUJpblVyaSh5KV07Y2FzZSAxOnJldHVybiBMPXguc2VudCgpLEg9Ry5zcGxpdCgiLyIpLnBvcCgpfHwiIixnPShqPW5ldyBEYXRlKS50b0xvY2FsZURhdGVTdHJpbmcoKSsiICIrai50b0xvY2FsZVRpbWVTdHJpbmcoKSxbNCx0aGlzLm1v'@;
put 'dmVGb2xkZXIoRyxMLEgrIiAiK2cseSldO2Nhc2UgMjpyZXR1cm5bMix4LnNlbnQoKV19fSl9KX0sY2V9KCk7QS5TQVNWaXlhQXBpQ2xpZW50PWxlfSw1OTU2OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4g'@;
put 'UD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihkZSl7Zm9yKHZhciBsZSxjZT0xLEc9YXJndW1lbnRzLmxlbmd0aDtjZTxHO2NlKyspZm9yKHZhciB5IGluIGxlPWFyZ3VtZW50c1tjZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGxlLHkpJiYoZGVbeV09bGVbeV0pO3Jl'@;
put 'dHVybiBkZX0sUC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFU9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGRlLGxlLGNlLEcpe3JldHVybiBuZXcoY2V8fChjZT1Qcm9taXNlKSkoZnVuY3Rpb24oeSxMKXtmdW5jdGlvbiBIKFMpe3RyeXtnKEcubmV4dChTKSl9Y2F0Y2goeCl7TCh4'@;
put 'KX19ZnVuY3Rpb24gaihTKXt0cnl7ZyhHLnRocm93KFMpKX1jYXRjaCh4KXtMKHgpfX1mdW5jdGlvbiBnKFMpe3ZhciB4O1MuZG9uZT95KFMudmFsdWUpOih4PVMudmFsdWUseCBpbnN0YW5jZW9mIGNlP3g6bmV3IGNlKGZ1bmN0aW9uKF8pe18oeCl9KSkudGhlbihILGopfWcoKEc9Ry5hcHBs'@;
put 'eShkZSxsZXx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oZGUsbGUpe3ZhciBjZSxHLHksTCxIPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnlbMF0pdGhyb3cgeVsxXTtyZXR1cm4geVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBM'@;
put 'PXtuZXh0OmooMCksdGhyb3c6aigxKSxyZXR1cm46aigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKExbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTDtmdW5jdGlvbiBqKGcpe3JldHVybiBmdW5jdGlvbihTKXtyZXR1cm4gZnVuY3Rpb24oeCl7aWYo'@;
put 'Y2UpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7SDspdHJ5e2lmKGNlPTEsRyYmKHk9MiZ4WzBdP0cucmV0dXJuOnhbMF0/Ry50aHJvd3x8KCh5PUcucmV0dXJuKSYmeS5jYWxsKEcpLDApOkcubmV4dCkmJiEoeT15LmNhbGwoRyx4'@;
put 'WzFdKSkuZG9uZSlyZXR1cm4geTtzd2l0Y2goRz0wLHkmJih4PVsyJnhbMF0seS52YWx1ZV0pLHhbMF0pe2Nhc2UgMDpjYXNlIDE6eT14O2JyZWFrO2Nhc2UgNDpyZXR1cm4gSC5sYWJlbCsrLHt2YWx1ZTp4WzFdLGRvbmU6ITF9O2Nhc2UgNTpILmxhYmVsKyssRz14WzFdLHg9WzBdO2NvbnRp'@;
put 'bnVlO2Nhc2UgNzp4PUgub3BzLnBvcCgpLEgudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHk9KHk9SC50cnlzKS5sZW5ndGg+MCYmeVt5Lmxlbmd0aC0xXSl8fDYhPT14WzBdJiYyIT09eFswXSkpe0g9MDtjb250aW51ZX1pZigzPT09eFswXSYmKCF5fHx4WzFdPnlbMF0mJnhb'@;
put 'MV08eVszXSkpe0gubGFiZWw9eFsxXTticmVha31pZig2PT09eFswXSYmSC5sYWJlbDx5WzFdKXtILmxhYmVsPXlbMV0seT14O2JyZWFrfWlmKHkmJkgubGFiZWw8eVsyXSl7SC5sYWJlbD15WzJdLEgub3BzLnB1c2goeCk7YnJlYWt9eVsyXSYmSC5vcHMucG9wKCksSC50cnlzLnBvcCgpO2Nv'@;
put 'bnRpbnVlfXg9bGUuY2FsbChkZSxIKX1jYXRjaChfKXt4PVs2LF9dLEc9MH1maW5hbGx5e2NlPXk9MH1pZig1JnhbMF0pdGhyb3cgeFsxXTtyZXR1cm57dmFsdWU6eFswXT94WzFdOnZvaWQgMCxkb25lOiEwfX0oW2csU10pfX19LEU9dGhpcyYmdGhpcy5fX3NwcmVhZEFycmF5fHxmdW5jdGlv'@;
put 'bihkZSxsZSxjZSl7aWYoY2V8fDI9PT1hcmd1bWVudHMubGVuZ3RoKWZvcih2YXIgRyx5PTAsTD1sZS5sZW5ndGg7eTxMO3krKykhRyYmeSBpbiBsZXx8KEd8fChHPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGxlLDAseSkpLEdbeV09bGVbeV0pO3JldHVybiBkZS5jb25jYXQoR3x8QXJy'@;
put 'YXkucHJvdG90eXBlLnNsaWNlLmNhbGwobGUpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBrPUQoNTkyOCksQj1EKDEyMzApLE49RCg5ODIxKSxWPUQoODMwNiksWj1EKDM0NjcpLFc9RCgxNTI3KSx6PUQoMzkwMCkscT1EKDQ1ODgpLFE9'@;
put 'RCgzNjAyKSx0ZT1EKDgyMTcpLGFlPXtzZXJ2ZXJVcmw6IiIscGF0aFNBU0pTOiIvU0FTanNBcGkvc3RwL2V4ZWN1dGUiLHBhdGhTQVM5OiIvU0FTU3RvcmVkUHJvY2Vzcy9kbyIscGF0aFNBU1ZpeWE6Ii9TQVNKb2JFeGVjdXRpb24iLGFwcExvYzoiL1B1YmxpYy9zZWVkYXBwIixzZXJ2ZXJU'@;
put 'eXBlOnouU2VydmVyVHlwZS5TYXNWaXlhLGRlYnVnOiExLGNvbnRleHROYW1lOiJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiLHVzZUNvbXB1dGVBcGk6bnVsbCxsb2dpbk1lY2hhbmlzbTpCLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHR9LHNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24g'@;
put 'ZGUobGUpe3ZhciBjZT10aGlzO3RoaXMuc2FzanNDb25maWc9bmV3IEIuU0FTanNDb25maWcsdGhpcy5qb2JzUGF0aD0iIix0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bnVsbCx0aGlzLnNhczlBcGlDbGllbnQ9bnVsbCx0aGlzLnNhc0pTQXBpQ2xpZW50PW51bGwsdGhpcy5maWxlVXBsb2FkZXI9'@;
put 'bnVsbCx0aGlzLmF1dGhNYW5hZ2VyPW51bGwsdGhpcy5yZXF1ZXN0Q2xpZW50PW51bGwsdGhpcy53ZWJKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2FzanNKb2JFeGVjdXRvcj1udWxsLHRoaXMuY29tcHV0ZUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5qZXNKb2JFeGVjdXRvcj1udWxsLHRoaXMuc2Fz'@;
put 'OUpvYkV4ZWN1dG9yPW51bGwsdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9ZnVuY3Rpb24oKXtyZXR1cm4gVShjZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcseSxMLEgsajtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQs'@;
put 'bnVsbD09PShHPXRoaXMud2ViSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1HP3ZvaWQgMDpHLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDE6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oeT10aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PXk/dm9pZCAwOnkucmVzZW5k'@;
put 'V2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgMjpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShMPXRoaXMuamVzSm9iRXhlY3V0b3IpfHx2b2lkIDA9PT1MP3ZvaWQgMDpMLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cygpXTtjYXNlIDM6cmV0dXJuIGcuc2VudCgpLFs0LG51bGw9PT0oSD10aGlzLmZp'@;
put 'bGVVcGxvYWRlcil8fHZvaWQgMD09PUg/dm9pZCAwOkgucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nhc2UgNDpyZXR1cm4gZy5zZW50KCksWzQsbnVsbD09PShqPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWo/dm9pZCAwOmoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCldO2Nh'@;
put 'c2UgNTpyZXR1cm4gZy5zZW50KCksWzJdfX0pfSl9LHRoaXMuc2V0VmVyYm9zZU1vZGU9ZnVuY3Rpb24oRyl7dmFyIHk7bnVsbD09PSh5PWNlLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT15fHx5LnNldFZlcmJvc2VNb2RlKEcpfSx0aGlzLnNhc2pzQ29uZmlnPVAoUCh7fSxhZSksbGUpLHRo'@;
put 'aXMuc2V0dXBDb25maWd1cmF0aW9uKCl9cmV0dXJuIGRlLnByb3RvdHlwZS5nZXRDc3JmVG9rZW49ZnVuY3Rpb24obGUpe3ZhciBjZTtyZXR1cm4gdm9pZCAwPT09bGUmJihsZT0iZ2VuZXJhbCIpLG51bGw9PT0oY2U9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09Y2U/dm9pZCAwOmNl'@;
put 'LmdldENzcmZUb2tlbihsZSl9LGRlLnByb3RvdHlwZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKGxlKXt2YXIgY2UsRyx5PWxlLmxpbmVzT2ZDb2RlLEw9bGUuZmlsZU5hbWUsSD1sZS5jb250ZXh0TmFtZSxqPWxlLnJ1blRpbWUsZz1sZS5hdXRoQ29uZmlnLFM9bGUuYXV0aENvbmZpZ1Nhczks'@;
put 'eD1sZS5kZWJ1ZztyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKF8pe3N3aXRjaChfLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZXhlY3V0ZVNjcmlwdCIsW3ouU2VydmVyVHlwZS5TYXM5LHouU2Vy'@;
put 'dmVyVHlwZS5TYXNqcyx6LlNlcnZlclR5cGUuU2FzVml5YV0pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PXouU2VydmVyVHlwZS5TYXM5KXJldHVyblszLDJdO2lmKCFTKXRocm93IG5ldyBFcnJvcigiQXV0aCBjb25maWcgZm9yIHNhczkgaXMgbm90IHByb3ZpZGVkIik7cmV0dXJu'@;
put 'WzQsbnVsbD09PShjZT10aGlzLnNhczlBcGlDbGllbnQpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2UuZXhlY3V0ZVNjcmlwdCh5LFMudXNlck5hbWUsUy5wYXNzd29yZCldO2Nhc2UgMTpjYXNlIDM6Y2FzZSA1OnJldHVyblsyLF8uc2VudCgpXTtjYXNlIDI6cmV0dXJuIHRoaXMuc2FzanNDb25m'@;
put 'aWcuc2VydmVyVHlwZSE9PXouU2VydmVyVHlwZS5TYXNqcz9bMyw0XTpbNCxudWxsPT09KEc9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZXhlY3V0ZVNjcmlwdCh5LmpvaW4oIlxuIiksaixnKV07Y2FzZSA0OmlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlw'@;
put 'ZSE9PXouU2VydmVyVHlwZS5TYXNWaXlhKXJldHVyblszLDZdO2lmKCEoSD1IfHx0aGlzLnNhc2pzQ29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Ig'@;
put 'b3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFMKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJlcXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZXhlY3V0ZVNjcmlwdChMLHks'@;
put 'SCxnLG51bGwseHx8dGhpcy5zYXNqc0NvbmZpZy5kZWJ1ZyldO2Nhc2UgNjpyZXR1cm5bMl19fSl9KX0sZGUucHJvdG90eXBlLmV4ZWN1dGVKb2I9ZnVuY3Rpb24obGUsY2UsRyl7dmFyIHk7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5j'@;
put 'dGlvbihMKXtzd2l0Y2goTC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0Iixbei5TZXJ2ZXJUeXBlLlNhc2pzXSksWzQsbnVsbD09PSh5PXRoaXMuc2FzSlNBcGlDbGllbnQpfHx2b2lkIDA9PT15P3ZvaWQgMDp5LmV4ZWN1dGVKb2Io'@;
put 'bGUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixMLnNlbnQoKV19fSl9KX0sZGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0cz1mdW5jdGlvbihsZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihjZSl7c3dpdGNoKGNlLmxh'@;
put 'YmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0cyIsW3ouU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0cyhsZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0p'@;
put 'fSl9LGRlLnByb3RvdHlwZS5nZXRMYXVuY2hlckNvbnRleHRzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv'@;
put 'cnRlZCgiZ2V0TGF1bmNoZXJDb250ZXh0cyIsW3ouU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldExhdW5jaGVyQ29udGV4dHMobGUpXTtjYXNlIDE6cmV0dXJuWzIsY2Uuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVD'@;
put 'b250ZXh0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNvbnRleHRzIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfSxkZS5wcm90b3R5cGUu'@;
put 'Z2V0RXhlY3V0YWJsZUNvbnRleHRzPWZ1bmN0aW9uKGxlKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0RXhlY3V0'@;
put 'YWJsZUNvbnRleHRzIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGxlKV07Y2FzZSAxOnJldHVyblsyLGNlLnNlbnQoKV19fSl9KX0sZGUucHJvdG90eXBlLmNyZWF0ZUNvbXB1dGVDb250ZXh0PWZ1bmN0aW9u'@;
put 'KGxlLGNlLEcseSxMLEgpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oail7c3dpdGNoKGoubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlQ29tcHV0ZUNvbnRleHQiLFt6LlNlcnZl'@;
put 'clR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVDb21wdXRlQ29udGV4dChsZSxjZSxHLHksTCxIKV07Y2FzZSAxOnJldHVyblsyLGouc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuY3JlYXRlTGF1bmNoZXJDb250ZXh0PWZ1bmN0aW9uKGxlLGNlLEcseSl7'@;
put 'cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihMKXtzd2l0Y2goTC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVMYXVuY2hlckNvbnRleHQiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0p'@;
put 'LFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVMYXVuY2hlckNvbnRleHQobGUsY2UsRyx5KV07Y2FzZSAxOnJldHVyblsyLEwuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuZWRpdENvbXB1dGVDb250ZXh0PWZ1bmN0aW9uKGxlLGNlLEcpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZv'@;
put 'aWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oeSl7c3dpdGNoKHkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZWRpdENvbXB1dGVDb250ZXh0Iixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQu'@;
put 'ZWRpdENvbXB1dGVDb250ZXh0KGxlLGNlLEcpXTtjYXNlIDE6cmV0dXJuWzIseS5zZW50KCldfX0pfSl9LGRlLnByb3RvdHlwZS5kZWxldGVDb21wdXRlQ29udGV4dD1mdW5jdGlvbihsZSxjZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxm'@;
put 'dW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDb21wdXRlQ29udGV4dCIsW3ouU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlbGV0ZUNvbXB1dGVDb250ZXh0KGxlLGNlKV07'@;
put 'Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWU9ZnVuY3Rpb24obGUsY2Upe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwp'@;
put 'e2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShsZSxjZSldO2Nhc2UgMTpyZXR1cm5bMixHLnNl'@;
put 'bnQoKV19fSl9KX0sZGUucHJvdG90eXBlLmdldENvbXB1dGVDb250ZXh0QnlJZD1mdW5jdGlvbihsZSxjZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlz'@;
put 'TWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5SWQiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb21wdXRlQ29udGV4dEJ5SWQobGUsY2UpXTtjYXNlIDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGRlLnByb3RvdHlwZS5j'@;
put 'cmVhdGVTZXNzaW9uPWZ1bmN0aW9uKGxlLGNlKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEcpe3N3aXRjaChHLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZVNlc3Npb24iLFt6'@;
put 'LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVTZXNzaW9uKGxlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuY3JlYXRlRm9sZGVyPWZ1bmN0aW9uKGxlLGNlLEcseSxMLEgpe3JldHVybiBVKHRoaXMs'@;
put 'dm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oail7c3dpdGNoKGoubGFiZWwpe2Nhc2UgMDpyZXR1cm4gTD9bNCxMLmNyZWF0ZUZvbGRlcihsZSxjZSxHLHksSCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsai5zZW50KCldO2Nhc2UgMjpyZXR1'@;
put 'cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRm9sZGVyKGxlLGNlLEcseSxIKV19fSl9KX0sZGUucHJvdG90eXBlLmNyZWF0ZUZpbGU9ZnVuY3Rpb24obGUsY2UsRyx5LEwsSCl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5j'@;
put 'dGlvbihqKXtzd2l0Y2goai5sYWJlbCl7Y2FzZSAwOnJldHVybiBIP1s0LEguY3JlYXRlRmlsZShsZSxjZSxHLHksTCldOlszLDJdO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIsai5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShsZSxjZSxH'@;
put 'LHksTCldfX0pfSl9LGRlLnByb3RvdHlwZS5nZXRGb2xkZXI9ZnVuY3Rpb24obGUsY2Upe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBv'@;
put 'cnRlZCgiZ2V0Rm9sZGVyIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxbNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Rm9sZGVyKGxlLGNlKV07Y2FzZSAxOnJldHVyblsyLEcuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuZGVsZXRlRm9sZGVyPWZ1bmN0aW9uKGxlLGNlKXt2YXIgRzty'@;
put 'ZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUZvbGRlciIsW3ouU2VydmVyVHlwZS5TYXNWaXlhXSksWzQsbnVsbD09'@;
put 'PShHPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PUc/dm9pZCAwOkcuZGVsZXRlRm9sZGVyKGxlLGNlKV07Y2FzZSAxOnJldHVyblsyLHkuc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUubGlzdEZvbGRlcj1mdW5jdGlvbihsZSxjZSxHKXt2YXIgeTtyZXR1cm4gVSh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0oeT10aGlzLnNhc1ZpeWFB'@;
put 'cGlDbGllbnQpfHx2b2lkIDA9PT15P3ZvaWQgMDp5Lmxpc3RGb2xkZXIobGUsY2UsRyldO2Nhc2UgMTpyZXR1cm5bMixMLnNlbnQoKV19fSl9KX0sZGUucHJvdG90eXBlLm1vdmVGb2xkZXI9ZnVuY3Rpb24obGUsY2UsRyx5KXt2YXIgTDtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LG51bGw9PT0oTD10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lk'@;
put 'IDA9PT1MP3ZvaWQgMDpMLm1vdmVGb2xkZXIobGUsY2UsRyx5KV07Y2FzZSAxOnJldHVyblsyLEguc2VudCgpXX19KX0pfSxkZS5wcm90b3R5cGUuY3JlYXRlSm9iRGVmaW5pdGlvbj1mdW5jdGlvbihsZSxjZSxHLHksTCxIKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24o'@;
put 'KXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUpvYkRlZmluaXRpb24iLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLEg/WzQsSC5jcmVhdGVKb2JEZWZpbml0aW9uKGxlLGNlLEcseSxM'@;
put 'KV06WzMsMl07Y2FzZSAxOmNhc2UgMzpyZXR1cm5bMixqLnNlbnQoKV07Y2FzZSAyOnJldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVKb2JEZWZpbml0aW9uKGxlLGNlLEcseSxMKV19fSl9KX0sZGUucHJvdG90eXBlLmdldEF1dGhDb2RlPWZ1bmN0aW9uKGxlKXtyZXR1cm4g'@;
put 'VSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtzd2l0Y2goY2UubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QXV0aENvZGUiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5'@;
put 'YUFwaUNsaWVudC5nZXRBdXRoQ29kZShsZSldO2Nhc2UgMTpyZXR1cm5bMixjZS5zZW50KCldfX0pfSl9LGRlLnByb3RvdHlwZS5nZXRBY2Nlc3NUb2tlbj1mdW5jdGlvbihsZSxjZSxHKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0'@;
put 'aW9uKHkpe3N3aXRjaCh5LmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEFjY2Vzc1Rva2VuIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWEsei5TZXJ2ZXJUeXBlLlNhc2pzXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlIT09ei5TZXJ2ZXJUeXBlLlNh'@;
put 'c2pzP1szLDJdOls0LHRoaXMuc2FzSlNBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4obGUsRyldO2Nhc2UgMTpjYXNlIDM6cmV0dXJuWzIseS5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4obGUsY2UsRyldfX0pfSl9LGRlLnByb3Rv'@;
put 'dHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKGxlLGNlLEcpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oeSl7c3dpdGNoKHkubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgicmVmcmVzaFRv'@;
put 'a2VucyIsW3ouU2VydmVyVHlwZS5TYXNWaXlhLHouU2VydmVyVHlwZS5TYXNqc10pLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSE9PXouU2VydmVyVHlwZS5TYXNqcz9bMywyXTpbNCx0aGlzLnNhc0pTQXBpQ2xpZW50LnJlZnJlc2hUb2tlbnMoRyldO2Nhc2UgMTpjYXNlIDM6cmV0dXJu'@;
put 'WzIseS5zZW50KCldO2Nhc2UgMjpyZXR1cm5bNCx0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhsZSxjZSxHKV19fSl9KX0sZGUucHJvdG90eXBlLmRlbGV0ZUNsaWVudD1mdW5jdGlvbihsZSxjZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZWxldGVDbGllbnQiLFt6LlNlcnZlclR5cGUuU2FzVml5YV0pLFs0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQobGUsY2UpXTtjYXNl'@;
put 'IDE6cmV0dXJuWzIsRy5zZW50KCldfX0pfSl9LGRlLnByb3RvdHlwZS5nZXRTYXNqc0NvbmZpZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNhc2pzQ29uZmlnfSxkZS5wcm90b3R5cGUuZ2V0VXNlck5hbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci51c2VyTmFtZX0sZGUu'@;
put 'cHJvdG90eXBlLnNldFNBU2pzQ29uZmlnPWZ1bmN0aW9uKGxlKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGNlKXtyZXR1cm4gdGhpcy5zYXNqc0NvbmZpZz1QKFAoe30sdGhpcy5zYXNqc0NvbmZpZyksbGUpLHRoaXMuc2V0'@;
put 'dXBDb25maWd1cmF0aW9uKCksWzJdfSl9KX0sZGUucHJvdG90eXBlLnNldERlYnVnU3RhdGU9ZnVuY3Rpb24obGUpe3RoaXMuc2FzanNDb25maWcuZGVidWc9bGUsdGhpcy5zYXNWaXlhQXBpQ2xpZW50JiYodGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPWxlKX0sZGUucHJvdG90eXBlLmNo'@;
put 'ZWNrU2Vzc2lvbj1mdW5jdGlvbigpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24obGUpe3JldHVyblsyLHRoaXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCldfSl9KX0sZGUucHJvdG90eXBlLmxvZ0luPWZ1bmN0aW9uKGxl'@;
put 'LGNlLEcseSl7cmV0dXJuIHZvaWQgMD09PXkmJih5PXt9KSxVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oTCl7aWYodGhpcy5zYXNqc0NvbmZpZy5sb2dpbk1lY2hhbmlzbT09PUIuTG9naW5NZWNoYW5pc20uRGVmYXVsdCl7aWYoIWxlfHwh'@;
put 'Y2UpdGhyb3cgbmV3IEVycm9yKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgcmVxdWlyZWQgd2hlbiB1c2luZyB0aGUgZGVmYXVsdCBsb2dpbiBtZWNoYW5pc20uIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5sb2dJbihsZSxjZSldfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93'@;
put 'IG5ldyBFcnJvcigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuWzIsdGhpcy5hdXRoTWFuYWdlci5yZWRpcmVjdGVkTG9nSW4oeSldfSl9KX0sZGUucHJvdG90eXBlLmxvZ091dD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmF1dGhNYW5hZ2VyLmxvZ091dCgpfSxkZS5wcm90b3R5cGUudXBsb2FkRmlsZT1mdW5jdGlvbihsZSxjZSxHLHksTCl7cmV0dXJuIHZvaWQgMD09PXkmJih5PXt9KSxVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24o'@;
put 'ail7c3dpdGNoKGoubGFiZWwpe2Nhc2UgMDpyZXR1cm4geT1QKFAoe30sdGhpcy5zYXNqc0NvbmZpZykseSksWzQsdGhpcy5maWxlVXBsb2FkZXIuZXhlY3V0ZShsZSx7ZmlsZXM6Y2UscGFyYW1zOkd9LHksTCldO2Nhc2UgMTpyZXR1cm5bMixqLnNlbnQoKV19fSl9KX0sZGUucHJvdG90eXBl'@;
put 'LnJlcXVlc3Q9ZnVuY3Rpb24obGUsY2UsRyx5LEwsSCl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSx2b2lkIDA9PT1IJiYoSD1bXSksVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgajtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtjYXNlIDA6'@;
put 'cmV0dXJuIEc9UChQKHt9LHRoaXMuc2FzanNDb25maWcpLEcpLChqPSgwLGsudmFsaWRhdGVJbnB1dCkoY2UpKS5zdGF0dXM/Ry5zZXJ2ZXJUeXBlIT09ei5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKGxlLGNlLEcseSxMLEgpXTpbMywx'@;
put 'Ml07Y2FzZSAxOmNhc2UgMzpjYXNlIDU6Y2FzZSA4OmNhc2UgMTA6cmV0dXJuWzIsZy5zZW50KCldO2Nhc2UgMjpyZXR1cm4gRy5zZXJ2ZXJUeXBlIT09ei5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fG51bGw9PUcudXNlQ29tcHV0ZUFwaT9bMyw3XTpHLnVzZUNvbXB1dGVBcGk/WzQsdGhpcy5jb21w'@;
put 'dXRlSm9iRXhlY3V0b3IuZXhlY3V0ZShsZSxjZSxHLHksTCldOlszLDRdO2Nhc2UgNDpyZXR1cm4gRy5jb250ZXh0TmFtZXx8KEc9UChQKHt9LEcpLHtjb250ZXh0TmFtZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSxbNCx0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1'@;
put 'dGUobGUsY2UsRyx5LEwsSCldO2Nhc2UgNjpyZXR1cm5bMywxMV07Y2FzZSA3OnJldHVybiBHLnNlcnZlclR5cGU9PT16LlNlcnZlclR5cGUuU2FzOSYmRy51c2VybmFtZSYmRy5wYXNzd29yZD9bNCx0aGlzLnNhczlKb2JFeGVjdXRvci5leGVjdXRlKGxlLGNlLEcpXTpbMyw5XTtjYXNlIDk6'@;
put 'cmV0dXJuWzQsdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKGxlLGNlLEcseSxMLEgpXTtjYXNlIDExOnJldHVyblszLDEzXTtjYXNlIDEyOnJldHVyblsyLFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2Uoai5tc2cpKV07Y2FzZSAxMzpyZXR1cm5bMl19fSl9KX0sZGUucHJv'@;
put 'dG90eXBlLmRlcGxveVNlcnZpY2VQYWNrPWZ1bmN0aW9uKGxlLGNlLEcseSxMKXtyZXR1cm4gdm9pZCAwPT09TCYmKEw9ITEpLFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsajtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFMpe3N3aXRjaChTLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImRlcGxveVNlcnZpY2VQYWNrIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxIPW51bGwsR3x8Y2U/KEd8fChHPXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKSxjZXx8KGNlPXRoaXMuc2FzanNDb25maWcuYXBwTG9jKSx0aGlzLnNhc2pzQ29u'@;
put 'ZmlnLnNlcnZlclR5cGU9PT16LlNlcnZlclR5cGUuU2FzVml5YT8oSD1uZXcgTi5TQVNWaXlhQXBpQ2xpZW50KEcsY2UsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpKS5kZWJ1Zz10aGlzLnNhc2pzQ29uZmlnLmRlYnVnOnRoaXMuc2FzanNDb25maWcu'@;
put 'c2VydmVyVHlwZT09PXouU2VydmVyVHlwZS5TYXM5JiYoSD1uZXcgVi5TQVM5QXBpQ2xpZW50KEcsdGhpcy5qb2JzUGF0aCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSkpOihqPW51bGwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09ei5TZXJ2ZXJUeXBlLlNhc1Zp'@;
put 'eWE/aj10aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29uZmlnKCk6dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09ei5TZXJ2ZXJUeXBlLlNhczkmJihqPXRoaXMuc2FzOUFwaUNsaWVudC5nZXRDb25maWcoKSksRz1qLnNlcnZlclVybCxjZT1qLnJvb3RGb2xkZXJOYW1lKSxsZS5tZW1i'@;
put 'ZXJzWzBdLm1lbWJlcnMmJmxlLm1lbWJlcnNbMF0ubWVtYmVycy5zb3J0KGZ1bmN0aW9uKHgpe3JldHVybiJmb2xkZXIiPT09eC50eXBlPy0xOjF9KSxbNCx0aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhjZSxsZS5tZW1iZXJzLHksSCxMKV07Y2FzZSAxOnJldHVybiBTLnNlbnQoKSxb'@;
put 'Ml19fSl9KX0sZGUucHJvdG90eXBlLnN0YXJ0Q29tcHV0ZUpvYj1mdW5jdGlvbihsZSxjZSxHLHksTCxILGosZyxTKXt2YXIgeCxfLHAsQztyZXR1cm4gdm9pZCAwPT09RyYmKEc9e30pLHZvaWQgMD09PWomJihqPSExKSxVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJ'@;
put 'KHRoaXMsZnVuY3Rpb24oSyl7aWYoRz1QKFAoe30sdGhpcy5zYXNqc0NvbmZpZyksRyksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbei5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhRy5jb250ZXh0TmFtZSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1'@;
put 'bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO3JldHVybiBTPyhudWxsPT09KHg9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09eHx8eC5zZXRWZXJib3NlTW9kZShTKSxudWxsPT09KF89dGhpcy5yZXF1'@;
put 'ZXN0Q2xpZW50KXx8dm9pZCAwPT09X3x8Xy5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PVMmJihudWxsPT09KHA9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09cHx8cC5kaXNhYmxlVmVyYm9zZU1vZGUoKSksWzIsbnVsbD09PShDPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQg'@;
put 'MD09PUM/dm9pZCAwOkMuZXhlY3V0ZUNvbXB1dGVKb2IobGUsRy5jb250ZXh0TmFtZSxHLmRlYnVnLGNlLHksISFMLCExLEgsaixnKV19KX0pfSxkZS5wcm90b3R5cGUuZmV0Y2hMb2dGaWxlQ29udGVudD1mdW5jdGlvbihsZSxjZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMucmVxdWVzdENsaWVudC5nZXQobGUsY2UpLnRoZW4oZnVuY3Rpb24oeSl7aWYoIXkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoIkVycm9y'@;
put 'IHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh5LnJlc3VsdCl9Y2F0Y2goTCl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBCLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4g'@;
put 'VGhlIHJlc3VsdCBpcyBub3QgdmFsaWQuIixMKSl9fSldO2Nhc2UgMTpyZXR1cm5bMixHLnNlbnQoKV19fSl9KX0sZGUucHJvdG90eXBlLmdldFNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7cmV0dXJuIEUoW10sdGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVlc3RzKCksITApLnNvcnQoay5jb21w'@;
put 'YXJlVGltZXN0YW1wcyl9LGRlLnByb3RvdHlwZS5jbGVhclNhc1JlcXVlc3RzPWZ1bmN0aW9uKCl7dGhpcy5yZXF1ZXN0Q2xpZW50LmNsZWFyUmVxdWVzdHMoKX0sZGUucHJvdG90eXBlLnNldHVwQ29uZmlndXJhdGlvbj1mdW5jdGlvbigpe2lmKHZvaWQgMD09PXRoaXMuc2FzanNDb25maWcu'@;
put 'c2VydmVyVXJsfHwiIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKWlmKHR5cGVvZiBsb2NhdGlvbjwidSIpe3ZhciBsZT0iIi5jb25jYXQobG9jYXRpb24ucHJvdG9jb2wsIi8vIikuY29uY2F0KGxvY2F0aW9uLmhvc3RuYW1lKTtsb2NhdGlvbi5wb3J0JiYobGU9IiIuY29uY2F0KGxl'@;
put 'LCI6IikuY29uY2F0KGxvY2F0aW9uLnBvcnQpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD1sZX1lbHNlIHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPSIiOyIvIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKC0xKSYmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJs'@;
put 'PXRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLnNsaWNlKDAsLTEpKSx0aGlzLnJlcXVlc3RDbGllbnQ/dGhpcy5yZXF1ZXN0Q2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKTp0aGlzLnJlcXVlc3RD'@;
put 'bGllbnQ9bmV3KHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PXouU2VydmVyVHlwZS5TYXNqcz9RLlNhc2pzUmVxdWVzdENsaWVudDpxLlJlcXVlc3RDbGllbnQpKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMsdGhpcy5z'@;
put 'YXNqc0NvbmZpZy5yZXF1ZXN0SGlzdG9yeUxpbWl0LHRoaXMuc2FzanNDb25maWcudmVyYm9zZSksdGhpcy5qb2JzUGF0aD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT16LlNlcnZlclR5cGUuU2FzVml5YT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVNWaXlhOnRoaXMuc2FzanNDb25m'@;
put 'aWcuc2VydmVyVHlwZT09PXouU2VydmVyVHlwZS5TYXM5P3RoaXMuc2FzanNDb25maWcucGF0aFNBUzk6dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTSlMsdGhpcy5hdXRoTWFuYWdlcj1uZXcgVy5BdXRoTWFuYWdlcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmln'@;
put 'LnNlcnZlclR5cGUsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMucmVzZW5kV2FpdGluZ1JlcXVlc3RzKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT16LlNlcnZlclR5cGUuU2FzVml5YSYmKHRoaXMuc2FzVml5YUFwaUNsaWVudD90aGlzLnNhc1ZpeWFBcGlDbGllbnQuc2V0Q29uZmln'@;
put 'KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuYXBwTG9jKTp0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9bmV3IE4uU0FTVml5YUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyx0aGlzLnNhc2pzQ29uZmln'@;
put 'LmNvbnRleHROYW1lLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmRlYnVnPXRoaXMuc2FzanNDb25maWcuZGVidWcpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PXouU2VydmVyVHlwZS5TYXM5JiYodGhpcy5zYXM5QXBpQ2xpZW50P3RoaXMuc2FzOUFw'@;
put 'aUNsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwpOnRoaXMuc2FzOUFwaUNsaWVudD1uZXcgVi5TQVM5QXBpQ2xpZW50KHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9ic1BhdGgsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucykpLHRo'@;
put 'aXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PXouU2VydmVyVHlwZS5TYXNqcyYmKHRoaXMuc2FzSlNBcGlDbGllbnR8fCh0aGlzLnNhc0pTQXBpQ2xpZW50PW5ldyBaLlNBU2pzQXBpQ2xpZW50KHRoaXMucmVxdWVzdENsaWVudCkpKSx0aGlzLmZpbGVVcGxvYWRlcj1uZXcgdGUuRmlsZVVw'@;
put 'bG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgdGUuV2ViSm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmws'@;
put 'dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMuam9ic1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW5ldyB0ZS5TYXNqc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuam9i'@;
put 'c1BhdGgsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLnNhczlKb2JFeGVjdXRvcj1uZXcgdGUuU2FzOUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNh'@;
put 'c2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgdGUuQ29tcHV0ZUpvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCksdGhpcy5qZXNKb2JFeGVjdXRvcj1uZXcgdGUuSmVzSm9iRXhl'@;
put 'Y3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KX0sZGUucHJvdG90eXBlLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcz1mdW5jdGlvbihsZSxjZSxHLHksTCl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhp'@;
put 'cztyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsay5hc3luY0ZvckVhY2gpKGNlLGZ1bmN0aW9uKGcpe3JldHVybiBVKEgsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMu'@;
put 'bGFiZWwpe2Nhc2UgMDpzd2l0Y2goZy50eXBlKXtjYXNlImZvbGRlciI6cmV0dXJuWzMsMV07Y2FzZSJmaWxlIjpyZXR1cm5bMywzXTtjYXNlInNlcnZpY2UiOnJldHVyblszLDVdfXJldHVyblszLDddO2Nhc2UgMTpyZXR1cm5bNCx0aGlzLmNyZWF0ZUZvbGRlcihnLm5hbWUsbGUsdm9pZCAw'@;
put 'LEcseSxMKV07Y2FzZSAyOnJldHVybiBTLnNlbnQoKSxbMyw4XTtjYXNlIDM6cmV0dXJuWzQsdGhpcy5jcmVhdGVGaWxlKGcubmFtZSxnLmNvZGUsbGUsdm9pZCAwLEcseSldO2Nhc2UgNDpyZXR1cm4gUy5zZW50KCksWzMsOF07Y2FzZSA1OnJldHVybls0LHRoaXMuY3JlYXRlSm9iRGVmaW5p'@;
put 'dGlvbihnLm5hbWUsZy5jb2RlLGxlLHZvaWQgMCxHLHkpXTtjYXNlIDY6cmV0dXJuIFMuc2VudCgpLFszLDhdO2Nhc2UgNzp0aHJvdyBuZXcgRXJyb3IoIlVuaWRlbnRpZmllZCBtZW1iZXIgJyIuY29uY2F0KGcubmFtZSwiJyBwcm92aWRlZC4iKSk7Y2FzZSA4OnJldHVybiJmb2xkZXIiPT09'@;
put 'Zy50eXBlJiZnLm1lbWJlcnMmJmcubWVtYmVycy5sZW5ndGg/WzQsdGhpcy5jcmVhdGVGb2xkZXJzQW5kU2VydmljZXMoIiIuY29uY2F0KGxlLCIvIikuY29uY2F0KGcubmFtZSksZy5tZW1iZXJzLEcseSxMKV06WzMsMTBdO2Nhc2UgOTpTLnNlbnQoKSxTLmxhYmVsPTEwO2Nhc2UgMTA6cmV0'@;
put 'dXJuWzJdfX0pfSl9KV07Y2FzZSAxOnJldHVybiBqLnNlbnQoKSxbMl19fSl9KX0sZGUucHJvdG90eXBlLmlzTWV0aG9kU3VwcG9ydGVkPWZ1bmN0aW9uKGxlLGNlKXtpZighdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlfHwhY2UuaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU'@;
put 'eXBlKSl0aHJvdyBuZXcgRXJyb3IoIk1ldGhvZCAnIi5jb25jYXQobGUsIicgaXMgb25seSBzdXBwb3J0ZWQgb24gIikuY29uY2F0KGNlLmpvaW4oIiwgIiksIiBzZXJ2ZXJzLiIpKX0sZGUucHJvdG90eXBlLmVuYWJsZVZlcmJvc2VNb2RlPWZ1bmN0aW9uKGxlLGNlKXt2YXIgRztudWxsPT09'@;
put 'KEc9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09R3x8Ry5lbmFibGVWZXJib3NlTW9kZShsZSxjZSl9LGRlLnByb3RvdHlwZS5kaXNhYmxlVmVyYm9zZU1vZGU9ZnVuY3Rpb24oKXt2YXIgbGU7bnVsbD09PShsZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1sZXx8bGUuZGlz'@;
put 'YWJsZVZlcmJvc2VNb2RlKCl9LGRlfSgpO0EuZGVmYXVsdD1zZX0sMzQ2NzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIFA9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oeil7Zm9yKHZhciBxLFE9MSx0ZT1h'@;
put 'cmd1bWVudHMubGVuZ3RoO1E8dGU7USsrKWZvcih2YXIgYWUgaW4gcT1hcmd1bWVudHNbUV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsYWUpJiYoelthZV09cVthZV0pO3JldHVybiB6fSxQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sVT10aGlzJiZ0aGlzLl9fYXdh'@;
put 'aXRlcnx8ZnVuY3Rpb24oeixxLFEsdGUpe3JldHVybiBuZXcoUXx8KFE9UHJvbWlzZSkpKGZ1bmN0aW9uKGFlLHNlKXtmdW5jdGlvbiBkZShHKXt0cnl7Y2UodGUubmV4dChHKSl9Y2F0Y2goeSl7c2UoeSl9fWZ1bmN0aW9uIGxlKEcpe3RyeXtjZSh0ZS50aHJvdyhHKSl9Y2F0Y2goeSl7c2Uo'@;
put 'eSl9fWZ1bmN0aW9uIGNlKEcpe3ZhciB5O0cuZG9uZT9hZShHLnZhbHVlKTooeT1HLnZhbHVlLHkgaW5zdGFuY2VvZiBRP3k6bmV3IFEoZnVuY3Rpb24oTCl7TCh5KX0pKS50aGVuKGRlLGxlKX1jZSgodGU9dGUuYXBwbHkoeixxfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2Vu'@;
put 'ZXJhdG9yfHxmdW5jdGlvbih6LHEpe3ZhciBRLHRlLGFlLHNlLGRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmFlWzBdKXRocm93IGFlWzFdO3JldHVybiBhZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBzZT17bmV4dDpsZSgwKSx0aHJvdzpsZSgxKSxyZXR1cm46bGUoMil9'@;
put 'LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihzZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxzZTtmdW5jdGlvbiBsZShjZSl7cmV0dXJuIGZ1bmN0aW9uKEcpe3JldHVybiBmdW5jdGlvbih5KXtpZihRKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRv'@;
put 'ciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2RlOyl0cnl7aWYoUT0xLHRlJiYoYWU9MiZ5WzBdP3RlLnJldHVybjp5WzBdP3RlLnRocm93fHwoKGFlPXRlLnJldHVybikmJmFlLmNhbGwodGUpLDApOnRlLm5leHQpJiYhKGFlPWFlLmNhbGwodGUseVsxXSkpLmRvbmUpcmV0dXJuIGFl'@;
put 'O3N3aXRjaCh0ZT0wLGFlJiYoeT1bMiZ5WzBdLGFlLnZhbHVlXSkseVswXSl7Y2FzZSAwOmNhc2UgMTphZT15O2JyZWFrO2Nhc2UgNDpyZXR1cm4gZGUubGFiZWwrKyx7dmFsdWU6eVsxXSxkb25lOiExfTtjYXNlIDU6ZGUubGFiZWwrKyx0ZT15WzFdLHk9WzBdO2NvbnRpbnVlO2Nhc2UgNzp5'@;
put 'PWRlLm9wcy5wb3AoKSxkZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoYWU9KGFlPWRlLnRyeXMpLmxlbmd0aD4wJiZhZVthZS5sZW5ndGgtMV0pfHw2IT09eVswXSYmMiE9PXlbMF0pKXtkZT0wO2NvbnRpbnVlfWlmKDM9PT15WzBdJiYoIWFlfHx5WzFdPmFlWzBdJiZ5WzFd'@;
put 'PGFlWzNdKSl7ZGUubGFiZWw9eVsxXTticmVha31pZig2PT09eVswXSYmZGUubGFiZWw8YWVbMV0pe2RlLmxhYmVsPWFlWzFdLGFlPXk7YnJlYWt9aWYoYWUmJmRlLmxhYmVsPGFlWzJdKXtkZS5sYWJlbD1hZVsyXSxkZS5vcHMucHVzaCh5KTticmVha31hZVsyXSYmZGUub3BzLnBvcCgpLGRl'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9eT1xLmNhbGwoeixkZSl9Y2F0Y2goTCl7eT1bNixMXSx0ZT0wfWZpbmFsbHl7UT1hZT0wfWlmKDUmeVswXSl0aHJvdyB5WzFdO3JldHVybnt2YWx1ZTp5WzBdP3lbMV06dm9pZCAwLGRvbmU6ITB9fShbY2UsR10pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLlNBU2pzQXBpQ2xpZW50PXZvaWQgMDt2YXIgRT1EKDYyMzApLGs9RCgzOTAwKSxCPUQoOTc3OCksTj1EKDU3KSxWPUQoMjQ5KSxaPUQoNzA0KSxXPWZ1bmN0aW9uKCl7ZnVuY3Rpb24geihxKXt0aGlzLnJlcXVlc3RDbGllbnQ9cX1yZXR1'@;
put 'cm4gei5wcm90b3R5cGUuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0PWZ1bmN0aW9uKHEpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMsZnVuY3Rpb24oUSl7c3dpdGNoKFEubGFiZWwpe2Nhc2UgMDpyZXR1cm4gcT9bNCwoMCxaLmdldFRva2Vu'@;
put 'cykodGhpcy5yZXF1ZXN0Q2xpZW50LHEsay5TZXJ2ZXJUeXBlLlNhc2pzKV06WzMsMl07Y2FzZSAxOnJldHVyblsyLFEuc2VudCgpLmFjY2Vzc190b2tlbl07Y2FzZSAyOnJldHVyblsyXX19KX0pfSx6LnByb3RvdHlwZS5kZXBsb3k9ZnVuY3Rpb24ocSxRLHRlKXtyZXR1cm4gVSh0aGlzLHZv'@;
put 'aWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgYWUsc2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QodGUpXTtjYXNlIDE6cmV0dXJuIGFlPWRlLnNlbnQoKSxxLmFwcExvYz1x'@;
put 'LmFwcExvY3x8USxbNCx0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixxLGFlLHZvaWQgMCx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KV07Y2FzZSAyOnJldHVybiBzZT1kZS5zZW50KCkucmVzdWx0LFsyLFByb21pc2Uu'@;
put 'cmVzb2x2ZShzZSldfX0pfSl9LHoucHJvdG90eXBlLmRlcGxveVppcEZpbGU9ZnVuY3Rpb24ocSxRKXtyZXR1cm4gVSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgdGUsYWUsc2UsZGUsbGUsY2U7cmV0dXJuIEkodGhpcyxmdW5jdGlvbihHKXtzd2l0Y2goRy5sYWJlbCl7Y2Fz'@;
put 'ZSAwOnJldHVybiB0ZT1EKDI5NzUpLmNyZWF0ZVJlYWRTdHJlYW0sWzQsdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoUSldO2Nhc2UgMTpyZXR1cm4gYWU9Ry5zZW50KCksWzQsdGUocSldO2Nhc2UgMjpyZXR1cm4gc2U9Ry5zZW50KCksKGRlPW5ldyBFKS5hcHBlbmQoImZpbGUiLHNl'@;
put 'KSxsZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Ii5jb25jYXQoZGUuZ2V0Qm91bmRhcnkoKSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLGRlLGFlLGxlLHt9LHttYXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVu'@;
put 'Z3RoOjEvMH0pXTtjYXNlIDM6cmV0dXJuIGNlPUcuc2VudCgpLnJlc3VsdCxbMixQcm9taXNlLnJlc29sdmUoY2UpXX19KX0pfSx6LnByb3RvdHlwZS5leGVjdXRlSm9iPWZ1bmN0aW9uKHEsUSx0ZSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGFlLHNlLGRl'@;
put 'O3JldHVybiBJKHRoaXMsZnVuY3Rpb24obGUpe3N3aXRjaChsZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBhZT10ZT90ZS5hY2Nlc3NfdG9rZW46dm9pZCAwLHNlPXEuX3Byb2dyYW0uc3RhcnRzV2l0aCgiLyIpP3EuX3Byb2dyYW06IiIuY29uY2F0KFEsIi8iKS5jb25jYXQocS5fcHJvZ3JhbSks'@;
put 'WzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL3N0cC9leGVjdXRlIixQKFAoe19kZWJ1ZzoxMzF9LHEpLHtfcHJvZ3JhbTpzZX0pLGFlKV07Y2FzZSAxOnJldHVyblsyLHtyZXN1bHQ6KGRlPWxlLnNlbnQoKSkucmVzdWx0LGxvZzpkZS5sb2d9XX19KX0pfSx6LnByb3RvdHlw'@;
put 'ZS5leGVjdXRlU2NyaXB0PWZ1bmN0aW9uKHEsUSx0ZSl7cmV0dXJuIHZvaWQgMD09PVEmJihRPSJzYXMiKSxVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBhZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0'@;
put 'aGlzLmdldEFjY2Vzc1Rva2VuRm9yUmVxdWVzdCh0ZSldO2Nhc2UgMTpyZXR1cm4gYWU9ZGUuc2VudCgpLHNlPXtsb2c6IiJ9LFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KCJTQVNqc0FwaS9jb2RlL2V4ZWN1dGUiLHtjb2RlOnEscnVuVGltZTpRfSxhZSkudGhlbihmdW5jdGlvbihsZSl7'@;
put 'dmFyIEc9bGUucHJpbnRPdXRwdXQseT1sZS5yZXN1bHQ7c2UubG9nPWxlLmxvZyxHJiYoc2UucHJpbnRPdXRwdXQ9RykseSYmKHNlLndlYm91dD15KX0pLmNhdGNoKGZ1bmN0aW9uKGxlKXt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkobGUsIkVycm9yIHdoaWxlIHNlbmRpbmcgUE9TVCByZXF1'@;
put 'ZXN0IHRvIGV4ZWN1dGUgY29kZS4gIil9KV07Y2FzZSAyOnJldHVybiBkZS5zZW50KCksWzIsc2VdfX0pfSl9LHoucHJvdG90eXBlLmdldEFjY2Vzc1Rva2VuPWZ1bmN0aW9uKHEsUSl7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyxmdW5jdGlv'@;
put 'bih0ZSl7cmV0dXJuWzIsKDAsTi5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzKSh0aGlzLnJlcXVlc3RDbGllbnQscSxRKV19KX0pfSx6LnByb3RvdHlwZS5yZWZyZXNoVG9rZW5zPWZ1bmN0aW9uKHEpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBJKHRoaXMs'@;
put 'ZnVuY3Rpb24oUSl7cmV0dXJuWzIsKDAsVi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxxKV19KX0pfSx6fSgpO0EuU0FTanNBcGlDbGllbnQ9V30sNjkwMzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpLEk9dGhp'@;
put 'cyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcseixxLFEpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLGFlKXtmdW5jdGlvbiBzZShjZSl7dHJ5e2xlKFEubmV4dChjZSkpfWNhdGNoKEcpe2FlKEcpfX1mdW5jdGlvbiBkZShjZSl7dHJ5e2xlKFEudGhyb3coY2Up'@;
put 'KX1jYXRjaChHKXthZShHKX19ZnVuY3Rpb24gbGUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBxP0c6bmV3IHEoZnVuY3Rpb24oeSl7eShHKX0pKS50aGVuKHNlLGRlKX1sZSgoUT1RLmFwcGx5KFcsenx8W10pKS5uZXh0KCkpfSl9LEU9'@;
put 'dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVyx6KXt2YXIgcSxRLHRlLGFlLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhZT17bmV4dDpkZSgwKSx0aHJvdzpkZSgx'@;
put 'KSxyZXR1cm46ZGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihhZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhZTtmdW5jdGlvbiBkZShsZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYocSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxRJiYodGU9MiZHWzBdP1EucmV0dXJuOkdbMF0/US50aHJvd3x8KCh0ZT1RLnJldHVybikmJnRlLmNhbGwoUSksMCk6US5uZXh0KSYmISh0ZT10ZS5jYWxsKFEsR1sxXSkpLmRvbmUp'@;
put 'cmV0dXJuIHRlO3N3aXRjaChRPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLFE9R1sxXSxHPVswXTtjb250aW51ZTtj'@;
put 'YXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PUdbMF0mJjIhPT1HWzBdKSl7c2U9MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8R1sxXT50ZVsw'@;
put 'XSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10ZVsxXSx0ZT1HO2JyZWFrfWlmKHRlJiZzZS5sYWJlbDx0ZVsyXSl7c2UubGFiZWw9dGVbMl0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0mJnNlLm9wcy5w'@;
put 'b3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9ei5jYWxsKFcsc2UpfWNhdGNoKHkpe0c9WzYseV0sUT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbbGUsY2VdKX19fTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5TZXNzaW9uTWFuYWdlcj12b2lkIDA7dmFyIGs9RCgxMjMwKSxCPUQoMTM5NSksTj1EKDU5MjgpLFY9RCg5Nzc4KSxaPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gVyh6LHEsUSl7dGhpcy5zZXJ2ZXJVcmw9eix0aGlzLmNvbnRleHRO'@;
put 'YW1lPXEsdGhpcy5yZXF1ZXN0Q2xpZW50PVEsdGhpcy5sb2dnZWRFcnJvcnM9W10sdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I9IkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiBzdGF0ZSBsaW5rLiAiLHRoaXMuc2Vzc2lvbnM9W10sdGhpcy5jdXJyZW50Q29udGV4dD1udWxsLHRoaXMu'@;
put 'c2V0dGluZ0NvbnRleHQ9ITEsdGhpcy5fZGVidWc9ITEsdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlPXtwcmludGVkOiExLHN0YXRlOmsuU2Vzc2lvblN0YXRlLk5vU3RhdGV9LHomJigwLE4uaXNVcmwpKHopfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoVy5wcm90b3R5cGUsImRlYnVn'@;
put 'Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2RlYnVnfSxzZXQ6ZnVuY3Rpb24oeil7dGhpcy5fZGVidWc9en0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxXLnByb3RvdHlwZS5pc1Nlc3Npb25WYWxpZD1mdW5jdGlvbih6KXtpZigheilyZXR1cm4hMTt2YXIgcT0oKG5l'@;
put 'dyBEYXRlKS5nZXRUaW1lKCktbmV3IERhdGUoei5jcmVhdGlvblRpbWVTdGFtcCkuZ2V0VGltZSgpKS8xZTM7cmV0dXJuISghei5hdHRyaWJ1dGVzfHxxPj16LmF0dHJpYnV0ZXMuc2Vzc2lvbkluYWN0aXZlVGltZW91dCl9LFcucHJvdG90eXBlLnJlbW92ZVNlc3Npb25Gcm9tUG9vbD1mdW5j'@;
put 'dGlvbih6KXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHEpe3JldHVybiBxLmlkIT09ei5pZH0pfSxXLnByb3RvdHlwZS5yZW1vdmVFeHBpcmVkU2Vzc2lvbnM9ZnVuY3Rpb24oKXt2YXIgej10aGlzO3RoaXMuc2Vzc2lvbnM9dGhpcy5zZXNzaW9ucy5maWx0'@;
put 'ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHouaXNTZXNzaW9uVmFsaWQocSl9KX0sVy5wcm90b3R5cGUudGhyb3dFcnJvcnM9ZnVuY3Rpb24oeixxKXt0aHJvdyBxPygwLFYucHJlZml4TWVzc2FnZSkobmV3IEVycm9yKHouam9pbigiLiAiKSkscSk6bmV3IEVycm9yKHoubWFwKGZ1bmN0aW9uKFEp'@;
put 'e3JldHVybiBRLm1lc3NhZ2U/US5tZXNzYWdlOlF9KS5qb2luKCIuICIpKX0sVy5wcm90b3R5cGUuZ2V0U2Vzc2lvbj1mdW5jdGlvbih6KXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxRLHRlLGFlLHNlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihk'@;
put 'ZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHE9W10sUT0hMSx0ZT1mdW5jdGlvbigpe3EubGVuZ3RoJiYhUSYmKFE9ITAsc2UudGhyb3dFcnJvcnMocSkpfSx0aGlzLnJlbW92ZUV4cGlyZWRTZXNzaW9ucygpLHRoaXMuc2Vzc2lvbnMubGVuZ3RoPyh0aGlzLnJlbW92ZVNlc3Np'@;
put 'b25Gcm9tUG9vbChhZT10aGlzLnNlc3Npb25zWzBdKSx0aGlzLmNyZWF0ZVNlc3Npb25zKHopLmNhdGNoKGZ1bmN0aW9uKGxlKXtxLnB1c2gobGUpfSksdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbih6KS5jYXRjaChmdW5jdGlvbihsZSl7cS5wdXNoKGxlKX0pLHRlKCksWzIsYWVdKTpb'@;
put 'MywxXTtjYXNlIDE6cmV0dXJuIHRoaXMuY3JlYXRlU2Vzc2lvbnMoeikuY2F0Y2goZnVuY3Rpb24obGUpe3EucHVzaChsZSl9KSxbNCx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKHopLmNhdGNoKGZ1bmN0aW9uKGxlKXtxLnB1c2gobGUpfSldO2Nhc2UgMjpyZXR1cm4gZGUuc2VudCgp'@;
put 'LHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCksYWU9dGhpcy5zZXNzaW9ucy5wb3AoKSx0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChhZSksdGUoKSxbMixhZV19fSl9KX0sVy5wcm90b3R5cGUuZ2V0RXJyb3JNZXNzYWdlPWZ1bmN0aW9uKHoscSxRKXtyZXR1cm4iIi5jb25jYXQoUSwi'@;
put 'IHJlcXVlc3QgdG8gIikuY29uY2F0KHEsIiBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiKS5jb25jYXQoei5yZXNwb25zZS5zdGF0dXN8fCJ1bmtub3duIiwiLiAiKSt6LnJlc3BvbnNlLmRhdGEubWVzc2FnZXx8IiJ9LFcucHJvdG90eXBlLmNsZWFyU2Vzc2lvbj1mdW5jdGlvbih6LHEpe3Jl'@;
put 'dHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBRLHRlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihhZSl7c3dpdGNoKGFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIFE9Ii9jb21wdXRlL3Nlc3Npb25zLyIuY29uY2F0KHopLFs0LHRoaXMucmVxdWVzdENsaWVudC5k'@;
put 'ZWxldGUoUSxxKS50aGVuKGZ1bmN0aW9uKCl7dGUuc2Vzc2lvbnM9dGUuc2Vzc2lvbnMuZmlsdGVyKGZ1bmN0aW9uKHNlKXtyZXR1cm4gc2UuaWQhPT16fSl9KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSxRLCJERUxF'@;
put 'VEUiKSwiRXJyb3Igd2hpbGUgZGVsZXRpbmcgc2Vzc2lvbi4gIil9KV07Y2FzZSAxOnJldHVyblsyLGFlLnNlbnQoKV19fSl9KX0sVy5wcm90b3R5cGUuY3JlYXRlU2Vzc2lvbnM9ZnVuY3Rpb24oeil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsUT10aGlz'@;
put 'O3JldHVybiBFKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBxPVtdLHRoaXMuc2Vzc2lvbnMubGVuZ3RoP1szLDJdOls0LCgwLE4uYXN5bmNGb3JFYWNoKShuZXcgQXJyYXkoMSksZnVuY3Rpb24oKXtyZXR1cm4gSShRLHZvaWQgMCx2b2lkIDAsZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGFlKXtzd2l0Y2goYWUubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uKHopLmNhdGNoKGZ1bmN0aW9uKHNlKXtxLnB1c2goc2UpfSldO2Nhc2UgMTpyZXR1cm4gYWUuc2VudCgpLFsyXX19KX0p'@;
put 'fSldO2Nhc2UgMTp0ZS5zZW50KCksdGUubGFiZWw9MjtjYXNlIDI6cmV0dXJuIHEubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKHEsIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpLFsyXX19KX0pfSxXLnByb3RvdHlwZS53YWl0Rm9yQ3VycmVudENvbnRleHQ9ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgej10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24ocSl7cmV0dXJuWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oUSl7dmFyIHRlPXNldEludGVydmFsKGZ1bmN0aW9uKCl7ei5jdXJyZW50Q29udGV4dCYmKHouc2V0dGlu'@;
put 'Z0NvbnRleHQ9ITEsY2xlYXJJbnRlcnZhbCh0ZSksUSgpKX0sMTAwKX0pXX0pfSl9LFcucHJvdG90eXBlLmNyZWF0ZUFuZFdhaXRGb3JTZXNzaW9uPWZ1bmN0aW9uKHope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBxLFEsdGUsYWUsc2UsZGU9dGhpcztyZXR1'@;
put 'cm4gRSh0aGlzLGZ1bmN0aW9uKGxlKXtzd2l0Y2gobGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jdXJyZW50Q29udGV4dD9bMyw0XTp0aGlzLnNldHRpbmdDb250ZXh0P1szLDJdOls0LHRoaXMuc2V0Q3VycmVudENvbnRleHQoeildO2Nhc2UgMTpyZXR1cm4gbGUuc2VudCgpLFszLDRd'@;
put 'O2Nhc2UgMjpyZXR1cm5bNCx0aGlzLndhaXRGb3JDdXJyZW50Q29udGV4dCgpXTtjYXNlIDM6bGUuc2VudCgpLGxlLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBxPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHMvIikuY29uY2F0KHRoaXMuY3VycmVudENvbnRleHQu'@;
put 'aWQsIi9zZXNzaW9ucyIpLFs0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHEse30seikuY2F0Y2goZnVuY3Rpb24oY2Upe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShkZS5nZXRFcnJvck1lc3NhZ2UoY2UscSwiUE9TVCIpLCJFcnJvciB3aGlsZSBjcmVhdGluZyBzZXNzaW9uLiAiKX0pXTtj'@;
put 'YXNlIDU6aWYoUT1sZS5zZW50KCksKHRlPVEucmVzdWx0KS5ldGFnPWFlPVEuZXRhZywhKHNlPXRlLmxpbmtzLmZpbmQoZnVuY3Rpb24oY2Upe3JldHVybiJzdGF0ZSI9PT1jZS5yZWx9KSkpdGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3I7cmV0dXJuIHRlLnN0YXRlVXJsPXNlLmhy'@;
put 'ZWYsWzQsdGhpcy53YWl0Rm9yU2Vzc2lvbih0ZSxhZSx6KV07Y2FzZSA2OnJldHVybiBsZS5zZW50KCksdGhpcy5zZXNzaW9ucy5wdXNoKHRlKSxbMix0ZV19fSl9KX0sVy5wcm90b3R5cGUuc2V0Q3VycmVudENvbnRleHQ9ZnVuY3Rpb24oeil7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7dmFyIHEsUSxhZSxzZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLmN1cnJlbnRDb250ZXh0P1szLDJdOihxPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvY29udGV4dHM/bGlt'@;
put 'aXQ9MTAwMDAiKSx0aGlzLnNldHRpbmdDb250ZXh0PSEwLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQocSx6KS5jYXRjaChmdW5jdGlvbihsZSl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKHNlLmdldEVycm9yTWVzc2FnZShsZSxxLCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsaXN0'@;
put 'IG9mIGNvbnRleHRzLiAiKX0pXSk7Y2FzZSAxOmlmKFE9ZGUuc2VudCgpLnJlc3VsdCwhKGFlPShRJiZRLml0ZW1zJiZRLml0ZW1zLmxlbmd0aD9RLml0ZW1zOltdKS5maW5kKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUubmFtZT09PXNlLmNvbnRleHROYW1lfSkpKXRocm93IG5ldyBFcnJvcigi'@;
put 'VGhlIGNvbnRleHQgJyIuY29uY2F0KHRoaXMuY29udGV4dE5hbWUsIicgd2FzIG5vdCBmb3VuZCBvbiB0aGUgc2VydmVyICIpLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiLiIpKTt0aGlzLmN1cnJlbnRDb250ZXh0PWFlLFByb21pc2UucmVzb2x2ZSgpLGRlLmxhYmVsPTI7Y2FzZSAyOnJldHVy'@;
put 'blsyXX19KX0pfSxXLnByb3RvdHlwZS53YWl0Rm9yU2Vzc2lvbj1mdW5jdGlvbih6LHEsUSl7dmFyIHRlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBhZSxzZSxkZSxsZSxjZSx5LEw7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihIKXtzd2l0Y2goSC5sYWJlbCl7'@;
put 'Y2FzZSAwOnJldHVybiBzZT16LnN0YXRlVXJsLGRlPVAubG9nZ2VyfHxVLChhZT16LnN0YXRlKSE9PWsuU2Vzc2lvblN0YXRlLlBlbmRpbmcmJmFlIT09ay5TZXNzaW9uU3RhdGUuUnVubmluZyYmYWUhPT1rLlNlc3Npb25TdGF0ZS5Ob1N0YXRlP1szLDZdOnNlPyh0aGlzLmRlYnVnJiYhdGhp'@;
put 'cy5wcmludGVkU2Vzc2lvblN0YXRlLnByaW50ZWQmJihkZS5pbmZvKCJQb2xsaW5nOiAiLmNvbmNhdCh0aGlzLnNlcnZlclVybCtzZSkpLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSEwKSxsZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJVcmwpLmNvbmNhdChzZSwiP3dhaXQ9MzAi'@;
put 'KSxbNCx0aGlzLmdldFNlc3Npb25TdGF0ZShsZSxxLFEpLmNhdGNoKGZ1bmN0aW9uKGope3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShqLCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBzZXNzaW9uLiAiKX0pXSk6WzMsNF07Y2FzZSAxOnJldHVybiBjZT1ILnNlbnQoKSx5PWNlLnJlc3BvbnNl'@;
put 'U3RhdHVzLGFlPWNlLnJlc3VsdC50cmltKCksdGhpcy5kZWJ1ZyYmdGhpcy5wcmludGVkU2Vzc2lvblN0YXRlLnN0YXRlIT09YWUmJihkZS5pbmZvKCJDdXJyZW50IHNlc3Npb24gc3RhdGUgaXMgJyIuY29uY2F0KGFlLCInIikpLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1hZSx0'@;
put 'aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0hMSksYWU/WzMsM106KEw9bmV3IEIuTm9TZXNzaW9uU3RhdGVFcnJvcih5LHRoaXMuc2VydmVyVXJsK3NlLG51bGw9PT0odGU9ei5saW5rcy5maW5kKGZ1bmN0aW9uKGope3JldHVybiJsb2ciPT09ai5yZWx9KSl8fHZvaWQgMD09PXRl'@;
put 'P3ZvaWQgMDp0ZS5ocmVmKSx0aGlzLmxvZ2dlZEVycm9ycy5maW5kKGZ1bmN0aW9uKGope3JldHVybiBqLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09TC5zZXJ2ZXJSZXNwb25zZVN0YXR1c30pfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChMKSxkZS5pbmZvKEwubWVzc2FnZSkpLFs0LHRoaXMu'@;
put 'd2FpdEZvclNlc3Npb24oeixxLFEpXSk7Y2FzZSAyOnJldHVyblsyLEguc2VudCgpXTtjYXNlIDM6Y2FzZSA2OnJldHVybiB0aGlzLmxvZ2dlZEVycm9ycz1bXSxbMixhZV07Y2FzZSA0OnRocm93IHRoaXMuc2Vzc2lvblN0YXRlTGlua0Vycm9yO2Nhc2UgNTpyZXR1cm5bMyw3XTtjYXNlIDc6'@;
put 'cmV0dXJuWzJdfX0pfSl9LFcucHJvdG90eXBlLmdldFNlc3Npb25TdGF0ZT1mdW5jdGlvbih6LHEsUSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihhZSl7c3dpdGNoKGFlLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh6LFEsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6cX0pLnRoZW4oZnVuY3Rpb24oc2Upe3JldHVybntyZXN1bHQ6c2UucmVzdWx0LHJlc3BvbnNlU3RhdHVzOnNlLnN0YXR1c319KS5jYXRjaChmdW5jdGlvbihzZSl7dGhyb3coMCxW'@;
put 'LnByZWZpeE1lc3NhZ2UpKHRlLmdldEVycm9yTWVzc2FnZShzZSx6LCJHRVQiKSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlLiAiKX0pXTtjYXNlIDE6cmV0dXJuWzIsYWUuc2VudCgpXX19KX0pfSxXLnByb3RvdHlwZS5nZXRWYXJpYWJsZT1mdW5jdGlvbih6LHEsUSl7cmV0'@;
put 'dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHRlLGFlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHRlPSIiLmNvbmNhdCh0aGlzLnNlcnZlclVybCwiL2NvbXB1dGUvc2Vzc2lvbnMvIikuY29uY2F0'@;
put 'KHosIi92YXJpYWJsZXMvIikuY29uY2F0KHEpLFs0LHRoaXMucmVxdWVzdENsaWVudC5nZXQodGUsUSkuY2F0Y2goZnVuY3Rpb24oZGUpe3Rocm93KDAsVi5wcmVmaXhNZXNzYWdlKShhZS5nZXRFcnJvck1lc3NhZ2UoZGUsdGUsIkdFVCIpLCJFcnJvciB3aGlsZSBmZXRjaGluZyBzZXNzaW9u'@;
put 'IHZhcmlhYmxlICciLmNvbmNhdChxLCInLiAiKSl9KV07Y2FzZSAxOnJldHVyblsyLHNlLnNlbnQoKV19fSl9KX0sV30oKTtBLlNlc3Npb25NYW5hZ2VyPVp9LDE2MjI6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpLFU9RCg1MTA4KSxJPXRoaXMmJnRoaXMuX19h'@;
put 'c3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24odGUpe2Zvcih2YXIgYWUsc2U9MSxkZT1hcmd1bWVudHMubGVuZ3RoO3NlPGRlO3NlKyspZm9yKHZhciBsZSBpbiBhZT1hcmd1bWVudHNbc2VdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku'@;
put 'Y2FsbChhZSxsZSkmJih0ZVtsZV09YWVbbGVdKTtyZXR1cm4gdGV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxFPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih0ZSxhZSxzZSxkZSl7cmV0dXJuIG5ldyhzZXx8KHNlPVByb21pc2UpKShmdW5jdGlvbihsZSxjZSl7ZnVuY3Rpb24g'@;
put 'RyhIKXt0cnl7TChkZS5uZXh0KEgpKX1jYXRjaChqKXtjZShqKX19ZnVuY3Rpb24geShIKXt0cnl7TChkZS50aHJvdyhIKSl9Y2F0Y2goail7Y2Uoail9fWZ1bmN0aW9uIEwoSCl7dmFyIGo7SC5kb25lP2xlKEgudmFsdWUpOihqPUgudmFsdWUsaiBpbnN0YW5jZW9mIHNlP2o6bmV3IHNlKGZ1'@;
put 'bmN0aW9uKGcpe2coail9KSkudGhlbihHLHkpfUwoKGRlPWRlLmFwcGx5KHRlLGFlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbih0ZSxhZSl7dmFyIHNlLGRlLGxlLGNlLEc9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmbGVbMF0pdGhy'@;
put 'b3cgbGVbMV07cmV0dXJuIGxlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGNlPXtuZXh0OnkoMCksdGhyb3c6eSgxKSxyZXR1cm46eSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGNlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGNlO2Z1bmN0'@;
put 'aW9uIHkoTCl7cmV0dXJuIGZ1bmN0aW9uKEgpe3JldHVybiBmdW5jdGlvbihqKXtpZihzZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtHOyl0cnl7aWYoc2U9MSxkZSYmKGxlPTImalswXT9kZS5yZXR1cm46alswXT9kZS50aHJv'@;
put 'd3x8KChsZT1kZS5yZXR1cm4pJiZsZS5jYWxsKGRlKSwwKTpkZS5uZXh0KSYmIShsZT1sZS5jYWxsKGRlLGpbMV0pKS5kb25lKXJldHVybiBsZTtzd2l0Y2goZGU9MCxsZSYmKGo9WzImalswXSxsZS52YWx1ZV0pLGpbMF0pe2Nhc2UgMDpjYXNlIDE6bGU9ajticmVhaztjYXNlIDQ6cmV0dXJu'@;
put 'IEcubGFiZWwrKyx7dmFsdWU6alsxXSxkb25lOiExfTtjYXNlIDU6Ry5sYWJlbCsrLGRlPWpbMV0saj1bMF07Y29udGludWU7Y2FzZSA3Omo9Ry5vcHMucG9wKCksRy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgobGU9KGxlPUcudHJ5cykubGVuZ3RoPjAmJmxlW2xlLmxlbmd0'@;
put 'aC0xXSl8fDYhPT1qWzBdJiYyIT09alswXSkpe0c9MDtjb250aW51ZX1pZigzPT09alswXSYmKCFsZXx8alsxXT5sZVswXSYmalsxXTxsZVszXSkpe0cubGFiZWw9alsxXTticmVha31pZig2PT09alswXSYmRy5sYWJlbDxsZVsxXSl7Ry5sYWJlbD1sZVsxXSxsZT1qO2JyZWFrfWlmKGxlJiZH'@;
put 'LmxhYmVsPGxlWzJdKXtHLmxhYmVsPWxlWzJdLEcub3BzLnB1c2goaik7YnJlYWt9bGVbMl0mJkcub3BzLnBvcCgpLEcudHJ5cy5wb3AoKTtjb250aW51ZX1qPWFlLmNhbGwodGUsRyl9Y2F0Y2goZyl7aj1bNixnXSxkZT0wfWZpbmFsbHl7c2U9bGU9MH1pZig1JmpbMF0pdGhyb3cgalsxXTty'@;
put 'ZXR1cm57dmFsdWU6alswXT9qWzFdOnZvaWQgMCxkb25lOiEwfX0oW0wsSF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmV4ZWN1dGVPbkNvbXB1dGVBcGk9dm9pZCAwO3ZhciBCPUQoNzc1NyksTj1EKDk3NzgpLFY9RCgzNjA3KSxaPUQo'@;
put 'NzA0KSxXPUQoNTkyOCksej1EKDcxNCkscT1EKDEzNDMpLFE9RCg2NDk2KTtBLmV4ZWN1dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gdGUoYWUsc2UsZGUsbGUsY2UsRyx5LEwsSCxqLGcsUyx4LF8pe3ZhciBwLEM7cmV0dXJuIHZvaWQgMD09PUwmJihMPW51bGwpLHZvaWQgMD09PUgmJihIPSEx'@;
put 'KSx2b2lkIDA9PT1qJiYoaj0hMSksdm9pZCAwPT09ZyYmKGc9ITApLHZvaWQgMD09PXgmJih4PSExKSxFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBLLG5lLHVlLGhlLHhlLE9lLEhlLEVlLExlLE5lLEtlLFVlLFhlLGF0LEZlLENlLERlLFJlLGV0LG50LEdlLGR0LFRlPXRo'@;
put 'aXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihBZSl7c3dpdGNoKEFlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEs9KHl8fHt9KS5hY2Nlc3NfdG9rZW4seT9bNCwoMCxaLmdldFRva2VucykoYWUseSldOlszLDJdO2Nhc2UgMTpLPUFlLnNlbnQoKS5hY2Nlc3NfdG9rZW4sQWUubGFiZWw9MjtjYXNl'@;
put 'IDI6bmU9UC5sb2dnZXJ8fFUsQWUubGFiZWw9MztjYXNlIDM6cmV0dXJuIEFlLnRyeXMucHVzaChbMywxOSwsMjBdKSx1ZT12b2lkIDAsWzQsc2UuZ2V0U2Vzc2lvbihLKS5jYXRjaChmdW5jdGlvbihCZSl7dGhyb3coMCxOLnByZWZpeE1lc3NhZ2UpKEJlLCJFcnJvciB3aGlsZSBnZXR0aW5n'@;
put 'IHNlc3Npb24uICIpfSldO2Nhc2UgNDpyZXR1cm4gaGU9QWUuc2VudCgpLHVlPWhlLmlkLHg/WzQsc2UuZ2V0VmFyaWFibGUodWUsIlNZU0pPQklEIixLKS5jYXRjaChmdW5jdGlvbihCZSl7dGhyb3coMCxOLnByZWZpeE1lc3NhZ2UpKEJlLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24g'@;
put 'dmFyaWFibGUuICIpfSldOlszLDZdO2Nhc2UgNTooeGU9QWUuc2VudCgpLnJlc3VsdCkmJnhlLnZhbHVlJiYoT2U9ZGU/bGUuc3BsaXQoZGUpLmpvaW4oIiIpLnJlcGxhY2UoL15cLy8sIiIpOmxlLChQLmxvZ2dlcnx8VSkuaW5mbygiVHJpZ2dlcmluZyAnIi5jb25jYXQoT2UsIicgd2l0aCBQ'@;
put 'SUQgIikuY29uY2F0KHhlLnZhbHVlLCIgYXQgIikuY29uY2F0KCgwLEIudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUykoKSkpKSxBZS5sYWJlbD02O2Nhc2UgNjpyZXR1cm4gSGU9dm9pZCAwLCgwLFcuaXNSZWxhdGl2ZVBhdGgpKGxlKT9IZT0iZXhlYy0iLmNvbmNhdChsZS5pbmNsdWRlcygi'@;
put 'LyIpP2xlLnNwbGl0KCIvIilbMV06bGUpOihFZT1sZS5zcGxpdCgiLyIpLEhlPUVlLnBvcCgpKSxMZT17U1lTX0pFU19KT0JfVVJJOiIiLF9wcm9ncmFtOigwLFcuaXNSZWxhdGl2ZVBhdGgpKGxlKT9kZSsiLyIrbGU6bGV9LF8mJihMZT1JKEkoe30sTGUpLF8pKSxIJiYoTGU9SShJKHt9LExl'@;
put 'KSx7X0RFQlVHOjEzMX0pKSxOZT1bXSxMP0pTT04uc3RyaW5naWZ5KEwpLmluY2x1ZGVzKCI7Iik/WzQsKDAsUS51cGxvYWRUYWJsZXMpKGFlLEwsSykuY2F0Y2goZnVuY3Rpb24oQmUpe3Rocm93KDAsTi5wcmVmaXhNZXNzYWdlKShCZSwiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIHRhYmxlcy4g'@;
put 'Iil9KV06WzMsOF06WzMsOV07Y2FzZSA3OnJldHVybiBOZT1BZS5zZW50KCksTGUuX3dlYmluX2ZpbGVfY291bnQ9TmUubGVuZ3RoLE5lLmZvckVhY2goZnVuY3Rpb24oQmUsb3Qpe0xlWyJfd2ViaW5fZmlsZXVyaSIuY29uY2F0KG90KzEpXT0iL2ZpbGVzL2ZpbGVzLyIuY29uY2F0KEJlLmZp'@;
put 'bGUuaWQpLExlWyJfd2ViaW5fbmFtZSIuY29uY2F0KG90KzEpXT1CZS50YWJsZU5hbWV9KSxbMyw5XTtjYXNlIDg6TGU9SShJKHt9LExlKSwoMCx6LmZvcm1hdERhdGFGb3JSZXF1ZXN0KShMKSksQWUubGFiZWw9OTtjYXNlIDk6cmV0dXJuIEtlPXtuYW1lOkhlfHwiRGVmYXVsdCBKb2IgTmFt'@;
put 'ZSIsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGNvZGU6Y2UsdmFyaWFibGVzOkxlLHZlcnNpb246Mn0sWzQsYWUucG9zdCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQodWUsIi9qb2JzIiksS2UsSykuY2F0Y2goZnVuY3Rpb24oQmUpe3Rocm93KDAsTi5wcmVmaXhNZXNzYWdl'@;
put 'KShCZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSldO2Nhc2UgMTA6cmV0dXJuIFVlPUFlLnNlbnQoKSxYZT1VZS5yZXN1bHQsZz8oSCYmKG5lLmluZm8oIkpvYiBoYXMgYmVlbiBzdWJtaXR0ZWQgZm9yICciLmNvbmNhdChIZSwiJy4iKSksbmUuaW5mbygiWW91IGNhbiBtb25pdG9y'@;
put 'IHRoZSBqb2IgcHJvZ3Jlc3MgYXQgJyIuY29uY2F0KGFlLmdldEJhc2VVcmwoKSkuY29uY2F0KFhlLmxpbmtzLmZpbmQoZnVuY3Rpb24oQmUpe3JldHVybiJzdGF0ZSI9PT1CZS5yZWx9KS5ocmVmLCInLiIpKSksWzQsKDAscS5wb2xsSm9iU3RhdGUpKGFlLFhlLEgseSxTLHtzZXNzaW9uOmhl'@;
put 'LHNlc3Npb25NYW5hZ2VyOnNlfSkuY2F0Y2goZnVuY3Rpb24oQmUpe3JldHVybiBFKFRlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb3QsbHQsQ3QsRnQsUnQsWHQ7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihTbil7c3dpdGNoKFNuLmxhYmVsKXtjYXNlIDA6cmV0dXJuIG90PW51bGw9'@;
put 'PT0oUnQ9QmU/LnJlc3BvbnNlKXx8dm9pZCAwPT09UnQ/dm9pZCAwOlJ0LmRhdGEsbHQ9L2Vycj1bMC05XSosLy5leGVjKG90KSwiNTExMyIhPT0obnVsbD09PShYdD1sdD8uWzBdKXx8dm9pZCAwPT09WHQ/dm9pZCAwOlh0LnNsaWNlKDQsLTEpKT9bMywyXTooQ3Q9WGUubGlua3MuZmluZChm'@;
put 'dW5jdGlvbih6dCl7cmV0dXJuInVwIj09PXp0LnJlbH0pLmhyZWYrIi9sb2ciLEZ0PUJlLFs0LCgwLFcuZmV0Y2hMb2dCeUNodW5rcykoYWUsSyxDdCwxZTYpXSk7Y2FzZSAxOkZ0LmxvZz1Tbi5zZW50KCksU24ubGFiZWw9MjtjYXNlIDI6dGhyb3coMCxOLnByZWZpeE1lc3NhZ2UpKEJlLCJF'@;
put 'cnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0dXMuICIpfX0pfSl9KV0pOlsyLGhlXTtjYXNlIDExOnJldHVybiBhdD1BZS5zZW50KCkseT9bNCwoMCxaLmdldFRva2VucykoYWUseSldOlszLDEzXTtjYXNlIDEyOks9QWUuc2VudCgpLmFjY2Vzc190b2tlbixBZS5sYWJlbD0xMztjYXNlIDEz'@;
put 'OnJldHVybls0LGFlLmdldCgiL2NvbXB1dGUvc2Vzc2lvbnMvIi5jb25jYXQodWUsIi9qb2JzLyIpLmNvbmNhdChYZS5pZCksSykuY2F0Y2goZnVuY3Rpb24oQmUpe3Rocm93KDAsTi5wcmVmaXhNZXNzYWdlKShCZSwiRXJyb3Igd2hpbGUgZ2V0dGluZyBqb2IuICIpfSldO2Nhc2UgMTQ6cmV0'@;
put 'dXJuIEZlPUFlLnNlbnQoKS5yZXN1bHQsQ2U9dm9pZCAwLERlPSIiLFJlPUZlLmxpbmtzLmZpbmQoZnVuY3Rpb24oQmUpe3JldHVybiJsb2ciPT09QmUucmVsfSksSCYmUmU/KGV0PSIiLmNvbmNhdChSZS5ocmVmLCIvY29udGVudCIpLG50PW51bGwhPT0oQz1udWxsPT09KHA9RmUubG9nU3Rh'@;
put 'dGlzdGljcyl8fHZvaWQgMD09PXA/dm9pZCAwOnAubGluZUNvdW50KSYmdm9pZCAwIT09Qz9DOjFlNixbNCwoMCxXLmZldGNoTG9nQnlDaHVua3MpKGFlLEssZXQsbnQpXSk6WzMsMTZdO2Nhc2UgMTU6RGU9QWUuc2VudCgpLEFlLmxhYmVsPTE2O2Nhc2UgMTY6aWYoYXQ9PT1xLkpvYlN0YXRl'@;
put 'LkZhaWxlZHx8YXQ9PT1xLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBWLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihGZSxEZSk7cmV0dXJuIGo/KEdlPSIvY29tcHV0ZS9zZXNzaW9ucy8iLmNvbmNhdCh1ZSwiL2ZpbGVyZWZzL193ZWJvdXQvY29udGVudCIpLFs0LGFlLmdldChHZSxLLCJ0'@;
put 'ZXh0L3BsYWluIikuY2F0Y2goZnVuY3Rpb24oQmUpe3JldHVybiBFKFRlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgb3QsbHQsQ3QsRnQ7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihSdCl7c3dpdGNoKFJ0LmxhYmVsKXtjYXNlIDA6cmV0dXJuIEJlIGluc3RhbmNlb2YgVi5Ob3RGb3Vu'@;
put 'ZEVycm9yJiZSZT8ob3Q9IiIuY29uY2F0KFJlLmhyZWYsIi9jb250ZW50IiksbHQ9bnVsbCE9PShGdD1udWxsPT09KEN0PUZlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1DdD92b2lkIDA6Q3QubGluZUNvdW50KSYmdm9pZCAwIT09RnQ/RnQ6MWU2LFs0LCgwLFcuZmV0Y2hMb2dCeUNodW5r'@;
put 'cykoYWUsSyxvdCxsdCldKTpbMywyXTtjYXNlIDE6cmV0dXJuIERlPVJ0LnNlbnQoKSxbMixQcm9taXNlLnJlamVjdCh7c3RhdHVzOjUwMCxsb2c6RGV9KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6SlNPTi5zdHJpbmdpZnkoQmUpfV19fSl9KX0pXSk6WzIse2pvYjpGZSxsb2c6RGV9XTtj'@;
put 'YXNlIDE3OnJldHVybiBDZT1BZS5zZW50KCksWzQsc2UuY2xlYXJTZXNzaW9uKHVlLEspLmNhdGNoKGZ1bmN0aW9uKEJlKXt0aHJvdygwLE4ucHJlZml4TWVzc2FnZSkoQmUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSldO2Nhc2UgMTg6cmV0dXJuIEFlLnNlbnQoKSxbMix7'@;
put 'cmVzdWx0OkNlPy5yZXN1bHQsbG9nOkRlfV07Y2FzZSAxOTppZig0MDQ9PT0oZHQ9QWUuc2VudCgpKS5zdGF0dXMpcmV0dXJuWzIsdGUoYWUsc2UsZGUsbGUsY2UsRyx5LEwsSCwhMSwhMCldO3Rocm93KDAsTi5wcmVmaXhNZXNzYWdlKShkdCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlw'@;
put 'dC4gIik7Y2FzZSAyMDpyZXR1cm5bMl19fSl9KX19LDc0NTg6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpLFU9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEIsTixWLFope3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFcseil7ZnVu'@;
put 'Y3Rpb24gcShhZSl7dHJ5e3RlKFoubmV4dChhZSkpfWNhdGNoKHNlKXt6KHNlKX19ZnVuY3Rpb24gUShhZSl7dHJ5e3RlKFoudGhyb3coYWUpKX1jYXRjaChzZSl7eihzZSl9fWZ1bmN0aW9uIHRlKGFlKXt2YXIgc2U7YWUuZG9uZT9XKGFlLnZhbHVlKTooc2U9YWUudmFsdWUsc2UgaW5zdGFu'@;
put 'Y2VvZiBWP3NlOm5ldyBWKGZ1bmN0aW9uKGRlKXtkZShzZSl9KSkudGhlbihxLFEpfXRlKChaPVouYXBwbHkoQixOfHxbXSkpLm5leHQoKSl9KX0sST10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihCLE4pe3ZhciBWLFosVyx6LHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lm'@;
put 'KDEmV1swXSl0aHJvdyBXWzFdO3JldHVybiBXWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHo9e25leHQ6USgwKSx0aHJvdzpRKDEpLHJldHVybjpRKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoeltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx6'@;
put 'O2Z1bmN0aW9uIFEodGUpe3JldHVybiBmdW5jdGlvbihhZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihWPTEsWiYmKFc9MiZzZVswXT9aLnJldHVybjpzZVswXT9a'@;
put 'LnRocm93fHwoKFc9Wi5yZXR1cm4pJiZXLmNhbGwoWiksMCk6Wi5uZXh0KSYmIShXPVcuY2FsbChaLHNlWzFdKSkuZG9uZSlyZXR1cm4gVztzd2l0Y2goWj0wLFcmJihzZT1bMiZzZVswXSxXLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6Vz1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEu'@;
put 'bGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxaPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVz0oVz1xLnRyeXMpLmxlbmd0aD4wJiZXW1cubGVuZ3RoLTFd'@;
put 'KXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVd8fHNlWzFdPldbMF0mJnNlWzFdPFdbM10pKXtxLmxhYmVsPXNlWzFdO2JyZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxXWzFdKXtxLmxhYmVsPVdbMV0sVz1zZTticmVha31pZihXJiZxLmxh'@;
put 'YmVsPFdbMl0pe3EubGFiZWw9V1syXSxxLm9wcy5wdXNoKHNlKTticmVha31XWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Ti5jYWxsKEIscSl9Y2F0Y2goZGUpe3NlPVs2LGRlXSxaPTB9ZmluYWxseXtWPVc9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVy'@;
put 'bnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxhZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmdldEZpbGVTdHJlYW09dm9pZCAwO3ZhciBFPUQoMjk3NSksaz1EKDc3NTcpO0EuZ2V0RmlsZVN0cmVhbT1mdW5j'@;
put 'dGlvbihCLE4pe3JldHVybiBVKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIFYsWixXLHoscTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKFEpe3N3aXRjaChRLmxhYmVsKXtjYXNlIDA6cmV0dXJuIFY9RCgyOTc1KS5jcmVhdGVXcml0ZVN0cmVhbSxaPU58fFAuY3dkKCksWzQs'@;
put 'KDAsRS5pc0ZvbGRlcikoWildO2Nhc2UgMTpyZXR1cm4gUS5zZW50KCk/KFc9IiIuY29uY2F0KEIubmFtZXx8ImpvYiIsIi0iKS5jb25jYXQoKDAsay5nZW5lcmF0ZVRpbWVzdGFtcCkoKSwiLmxvZyIpLHo9RCgyNTIwKSxxPXouam9pbihOfHxQLmN3ZCgpLFcpLFs0LFYocSldKTpbMywzXTtj'@;
put 'YXNlIDI6Y2FzZSA0OnJldHVyblsyLFEuc2VudCgpXTtjYXNlIDM6cmV0dXJuWzQsVihaKV19fSl9KX19LDEzNDM6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpLFU9RCg1MTA4KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuIEk9T2Jq'@;
put 'ZWN0LmFzc2lnbnx8ZnVuY3Rpb24oYWUpe2Zvcih2YXIgc2UsZGU9MSxsZT1hcmd1bWVudHMubGVuZ3RoO2RlPGxlO2RlKyspZm9yKHZhciBjZSBpbiBzZT1hcmd1bWVudHNbZGVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxjZSkmJihhZVtjZV09c2VbY2VdKTty'@;
put 'ZXR1cm4gYWV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxFPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihhZSxzZSxkZSxsZSl7cmV0dXJuIG5ldyhkZXx8KGRlPVByb21pc2UpKShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiB5KGope3RyeXtIKGxlLm5leHQoaikpfWNhdGNoKGcp'@;
put 'e0coZyl9fWZ1bmN0aW9uIEwoail7dHJ5e0gobGUudGhyb3coaikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEgoail7dmFyIGc7ai5kb25lP2NlKGoudmFsdWUpOihnPWoudmFsdWUsZyBpbnN0YW5jZW9mIGRlP2c6bmV3IGRlKGZ1bmN0aW9uKFMpe1MoZyl9KSkudGhlbih5LEwpfUgoKGxl'@;
put 'PWxlLmFwcGx5KGFlLHNlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihhZSxzZSl7dmFyIGRlLGxlLGNlLEcseT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm4gY2VbMV19LHRyeXM6W10sb3Bz'@;
put 'OltdfTtyZXR1cm4gRz17bmV4dDpMKDApLHRocm93OkwoMSkscmV0dXJuOkwoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihHW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gTChIKXtyZXR1cm4gZnVuY3Rpb24oail7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKGcpe2lmKGRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3k7KXRyeXtpZihkZT0xLGxlJiYoY2U9MiZnWzBdP2xlLnJldHVybjpnWzBdP2xlLnRocm93fHwoKGNlPWxlLnJldHVybikmJmNlLmNhbGwobGUpLDApOmxl'@;
put 'Lm5leHQpJiYhKGNlPWNlLmNhbGwobGUsZ1sxXSkpLmRvbmUpcmV0dXJuIGNlO3N3aXRjaChsZT0wLGNlJiYoZz1bMiZnWzBdLGNlLnZhbHVlXSksZ1swXSl7Y2FzZSAwOmNhc2UgMTpjZT1nO2JyZWFrO2Nhc2UgNDpyZXR1cm4geS5sYWJlbCsrLHt2YWx1ZTpnWzFdLGRvbmU6ITF9O2Nhc2Ug'@;
put 'NTp5LmxhYmVsKyssbGU9Z1sxXSxnPVswXTtjb250aW51ZTtjYXNlIDc6Zz15Lm9wcy5wb3AoKSx5LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChjZT0oY2U9eS50cnlzKS5sZW5ndGg+MCYmY2VbY2UubGVuZ3RoLTFdKXx8NiE9PWdbMF0mJjIhPT1nWzBdKSl7eT0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1nWzBdJiYoIWNlfHxnWzFdPmNlWzBdJiZnWzFdPGNlWzNdKSl7eS5sYWJlbD1nWzFdO2JyZWFrfWlmKDY9PT1nWzBdJiZ5LmxhYmVsPGNlWzFdKXt5LmxhYmVsPWNlWzFdLGNlPWc7YnJlYWt9aWYoY2UmJnkubGFiZWw8Y2VbMl0pe3kubGFiZWw9Y2VbMl0seS5vcHMucHVz'@;
put 'aChnKTticmVha31jZVsyXSYmeS5vcHMucG9wKCkseS50cnlzLnBvcCgpO2NvbnRpbnVlfWc9c2UuY2FsbChhZSx5KX1jYXRjaChTKXtnPVs2LFNdLGxlPTB9ZmluYWxseXtkZT1jZT0wfWlmKDUmZ1swXSl0aHJvdyBnWzFdO3JldHVybnt2YWx1ZTpnWzBdP2dbMV06dm9pZCAwLGRvbmU6ITB9'@;
put 'fShbSCxqXSl9fX0sQj10aGlzJiZ0aGlzLl9fc3ByZWFkQXJyYXl8fGZ1bmN0aW9uKGFlLHNlLGRlKXtpZihkZXx8Mj09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKHZhciBsZSxjZT0wLEc9c2UubGVuZ3RoO2NlPEc7Y2UrKykhbGUmJmNlIGluIHNlfHwobGV8fChsZT1BcnJheS5wcm90b3R5cGUu'@;
put 'c2xpY2UuY2FsbChzZSwwLGNlKSksbGVbY2VdPXNlW2NlXSk7cmV0dXJuIGFlLmNvbmNhdChsZXx8QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoc2UpKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZG9Qb2xsPUEucG9sbEpvYlN0YXRlPUEu'@;
put 'Sm9iU3RhdGU9dm9pZCAwO3ZhciBOLGFlLFY9RCg3MDQpLFo9RCgxMzk1KSxXPUQoMTIzMCksej1EKDU5MjgpOyhhZT1OPUEuSm9iU3RhdGV8fChBLkpvYlN0YXRlPXt9KSkuQ29tcGxldGVkPSJjb21wbGV0ZWQiLGFlLlJ1bm5pbmc9InJ1bm5pbmciLGFlLlBlbmRpbmc9InBlbmRpbmciLGFl'@;
put 'LlVuYXZhaWxhYmxlPSJ1bmF2YWlsYWJsZSIsYWUuTm9TdGF0ZT0iIixhZS5GYWlsZWQ9ImZhaWxlZCIsYWUuRXJyb3I9ImVycm9yIixBLnBvbGxKb2JTdGF0ZT1mdW5jdGlvbihhZSxzZSxkZSxsZSxjZSxHKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeSxM'@;
put 'LEgsaixnLFMseCxfLHAsQyxLO3JldHVybiBrKHRoaXMsZnVuY3Rpb24obmUpe3N3aXRjaChuZS5sYWJlbCl7Y2FzZSAwOmlmKHk9UC5sb2dnZXJ8fFUsTD1jZT8uc3RyZWFtTG9nfHwhMSxIPVt7bWF4UG9sbENvdW50OjIwMCxwb2xsSW50ZXJ2YWw6MzAwfSx7bWF4UG9sbENvdW50OjMwMCxw'@;
put 'b2xsSW50ZXJ2YWw6M2UzfSx7bWF4UG9sbENvdW50OjUwMCxwb2xsSW50ZXJ2YWw6M2U0fSx7bWF4UG9sbENvdW50OjM0MDAscG9sbEludGVydmFsOjZlNH1dLHZvaWQgMCE9PWNlPyhqPVtjZV0sdm9pZCAwIT09KGc9Y2UucG9sbFN0cmF0ZWd5KT8odGUoZyksZz1nLnNvcnQoZnVuY3Rpb24o'@;
put 'dWUsaGUpe3JldHVybiB1ZS5tYXhQb2xsQ291bnQtaGUubWF4UG9sbENvdW50fSksaj1CKEIoW10saiwhMCksZywhMCkpOmo9QihCKFtdLGosITApLEgsITApKTpqPUgsUz1qLnNwbGljZSgwLDEpWzBdLGNlPUkoSSh7fSxTKSxjZXx8e30pLCEoeD1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKHVl'@;
put 'KXtyZXR1cm4ic3RhdGUiPT09dWUucmVsfSkpKXRocm93IG5ldyBFcnJvcigiSm9iIHN0YXRlIGxpbmsgd2FzIG5vdCBmb3VuZC4iKTtyZXR1cm5bNCxxKGFlLHNlLE4uTm9TdGF0ZSxkZSxsZSkuY2F0Y2goZnVuY3Rpb24odWUpe3JldHVybiB5LmVycm9yKCJFcnJvciBmZXRjaGluZyBqb2Ig'@;
put 'c3RhdGUgZnJvbSAiLmNvbmNhdCh4LmhyZWYsIi4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuIiksdWUpLE4uVW5hdmFpbGFibGV9KV07Y2FzZSAxOnJldHVybiBfPW5lLnNlbnQoKSxwPTAsXz09PU4uQ29tcGxldGVkP1syLFByb21pc2UucmVzb2x2ZShfKV06'@;
put 'TCYmKDAsei5pc05vZGUpKCk/WzQsKDAsRCg3NDU4KS5nZXRGaWxlU3RyZWFtKShzZSxjZS5sb2dGb2xkZXJQYXRoKV06WzMsM107Y2FzZSAyOkM9bmUuc2VudCgpLG5lLmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LCgwLEEuZG9Qb2xsKShhZSxzZSxfLGRlLHAsY2UsbGUsTCxDLEcpXTtjYXNl'@;
put 'IDQ6aWYoSz1uZS5zZW50KCkscD1LLnBvbGxDb3VudCwhUShfPUsuc3RhdGUpfHxwPj1jZS5tYXhQb2xsQ291bnQmJiFqLmxlbmd0aClyZXR1cm5bMixfXTtuZS5sYWJlbD01O2Nhc2UgNTpyZXR1cm4gai5sZW5ndGgmJlEoXyk/KFM9ai5zcGxpY2UoMCwxKVswXSxjZSYmKFMubG9nRm9sZGVy'@;
put 'UGF0aD1jZS5sb2dGb2xkZXJQYXRoKSxbNCwoMCxBLmRvUG9sbCkoYWUsc2UsXyxkZSxwLFMsbGUsTCxDLEcpXSk6WzMsN107Y2FzZSA2OnJldHVybiBLPW5lLnNlbnQoKSxfPUsuc3RhdGUscD1LLnBvbGxDb3VudCxbMyw1XTtjYXNlIDc6cmV0dXJuIEMmJkMuZW5kKCksWzIsX119fSl9KX07'@;
put 'dmFyIHE9ZnVuY3Rpb24oYWUsc2UsZGUsbGUsY2Upe3JldHVybiBFKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEcseTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEwpe3N3aXRjaChMLmxhYmVsKXtjYXNlIDA6cmV0dXJuIEc9c2UubGlua3MuZmluZChmdW5jdGlvbihIKXty'@;
put 'ZXR1cm4ic3RhdGUiPT09SC5yZWx9KSxRKGRlKT8oeT12b2lkIDAsY2U/WzQsKDAsVi5nZXRUb2tlbnMpKGFlLGNlKV06WzMsMl0pOlszLDRdO2Nhc2UgMTp5PUwuc2VudCgpLEwubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzQsYWUuZ2V0KCIiLmNvbmNhdChHLmhyZWYsIj9fYWN0aW9uPXdhaXQm'@;
put 'd2FpdD0zMDAiKSx5Py5hY2Nlc3NfdG9rZW4sInRleHQvcGxhaW4iLHt9LGxlKS5jYXRjaChmdW5jdGlvbihIKXt0aHJvdyBuZXcgWi5Kb2JTdGF0ZVBvbGxFcnJvcihzZS5pZCxIKX0pXTtjYXNlIDM6cmV0dXJuWzIsTC5zZW50KCkucmVzdWx0LnRyaW0oKV07Y2FzZSA0OnJldHVyblsyLGRl'@;
put 'XX19KX0pfSxRPWZ1bmN0aW9uKGFlKXtyZXR1cm4gYWU9PT1OLlJ1bm5pbmd8fGFlPT09Ti5Ob1N0YXRlfHxhZT09PU4uUGVuZGluZ3x8YWU9PT1OLlVuYXZhaWxhYmxlfTtBLmRvUG9sbD1mdW5jdGlvbihhZSxzZSxkZSxsZSxjZSxHLHksTCxILGope3JldHVybiBFKHZvaWQgMCx2b2lkIDAs'@;
put 'dm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGcsUyx4LF8scCxDLEssbmUsdWUsaGUseGU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihPZSl7c3dpdGNoKE9lLmxhYmVsKXtjYXNlIDA6Zz1HLm1heFBvbGxDb3VudCxTPUcucG9sbEludGVydmFsLHg9UC5sb2dnZXJ8fFUsXz1zZS5saW5rcy5maW5kKGZ1'@;
put 'bmN0aW9uKEhlKXtyZXR1cm4ic3RhdGUiPT09SGUucmVsfSkscD0wLEM9ZGUsSz1OLk5vU3RhdGUsbmU9MCx1ZT1mdW5jdGlvbigpe3ZhciBIZSxFZSxLZSxVZSxYZSxhdCxGZSxDZSxEZSxSZSxldCxudCxHZSxkdDtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKFRlKXtzd2l0Y2goVGUubGFiZWwp'@;
put 'e2Nhc2UgMDpyZXR1cm4gaiYmY2UmJmNlJTEwPT0wJiZ5PyhLZT0oSGU9ai5zZXNzaW9uKS5pZCxYZT1zZS5pZCxbNCwoRWU9ai5zZXNzaW9uTWFuYWdlcikuZ2V0U2Vzc2lvblN0YXRlKEhlLnN0YXRlVXJsLEhlLmV0YWcsVWU9eS5hY2Nlc3NfdG9rZW4pLmNhdGNoKGZ1bmN0aW9uKEFlKXt0'@;
put 'aHJvdyBuZXcgWi5Kb2JTdGF0ZVBvbGxFcnJvcihYZSxBZSl9KV0pOlszLDJdO2Nhc2UgMTppZihhdD1UZS5zZW50KCksQ2U9YXQucmVzcG9uc2VTdGF0dXMsIShEZT1mdW5jdGlvbihBZSl7cmV0dXJuW1cuU2Vzc2lvblN0YXRlLlJ1bm5pbmcsVy5TZXNzaW9uU3RhdGUuSWRsZV0uaW5jbHVk'@;
put 'ZXMoQWUpfSkoRmU9YXQucmVzdWx0KXx8MjAwIT09Q2UpdGhyb3cgRWUuY2xlYXJTZXNzaW9uKEtlLFVlKSxSZT1EZShGZSk/IlNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICIuY29uY2F0KENlLCIuIik6IlNlc3Npb24gc3Rh'@;
put 'dGUgb2YgdGhlIGpvYiBpcyBub3QgJ3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnIi5jb25jYXQoRmUsIiciKSxuZXcgWi5Kb2JTdGF0ZVBvbGxFcnJvcihYZSxuZXcgRXJyb3IoUmUpKTtUZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bNCxxKGFlLHNlLEMsbGUseSkuY2F0'@;
put 'Y2goZnVuY3Rpb24oQWUpe2lmKHArKyxjZT49Z3x8cD49NSl0aHJvdyBBZTtyZXR1cm4geC5lcnJvcigiRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gIi5jb25jYXQoXy5ocmVmLCIuIFJlc3VtaW5nIHBvbGwsIGFzc3VtaW5nIGpvYiB0byBiZSBydW5uaW5nLiIpLEFlKSxOLlVuYXZh'@;
put 'aWxhYmxlfSldO2Nhc2UgMzpyZXR1cm4gQz1UZS5zZW50KCksY2UrKyxldD1zZS5saW5rcy5maW5kKGZ1bmN0aW9uKEFlKXtyZXR1cm4ic2VsZiI9PT1BZS5yZWx9KS5ocmVmLEw/WzQsYWUuZ2V0KGV0LHk/LmFjY2Vzc190b2tlbildOlszLDddO2Nhc2UgNDpyZXR1cm4gbnQ9VGUuc2VudCgp'@;
put 'LnJlc3VsdCxHZT1udWxsIT09KHhlPW51bGw9PT0oaGU9bnQubG9nU3RhdGlzdGljcyl8fHZvaWQgMD09PWhlP3ZvaWQgMDpoZS5saW5lQ291bnQpJiZ2b2lkIDAhPT14ZT94ZToxZTYsKGR0PSgoMCx6LmlzTm9kZSkoKT9EKDIwODApOntzYXZlTG9nOm51bGx9KS5zYXZlTG9nKT9bNCxkdChz'@;
put 'ZSxhZSxuZSxHZSxILHk/LmFjY2Vzc190b2tlbildOlszLDZdO2Nhc2UgNTpUZS5zZW50KCksVGUubGFiZWw9NjtjYXNlIDY6bmUrPUdlLFRlLmxhYmVsPTc7Y2FzZSA3OnJldHVybiBsZSYmSyE9PUMmJih4LmluZm8oIlBvbGxpbmc6ICIuY29uY2F0KGFlLmdldEJhc2VVcmwoKStldCwiL3N0'@;
put 'YXRlIikpLHguaW5mbygiQ3VycmVudCBqb2Igc3RhdGU6ICIuY29uY2F0KEMpKSxLPUMpLEMhPT1OLlVuYXZhaWxhYmxlJiZwPjAmJihwPTApLEM9PT1OLkNvbXBsZXRlZD9bMyw5XTpbNCwoMCx6LmRlbGF5KShTKV07Y2FzZSA4OlRlLnNlbnQoKSxUZS5sYWJlbD05O2Nhc2UgOTpyZXR1cm5b'@;
put 'Ml19fSl9LE9lLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBRKEMpJiZjZTw9Zz9bNSx1ZSgpXTpbMywzXTtjYXNlIDI6cmV0dXJuIE9lLnNlbnQoKSxbMywxXTtjYXNlIDM6cmV0dXJuWzIse3N0YXRlOkMscG9sbENvdW50OmNlfV19fSl9KX07dmFyIHRlPWZ1bmN0aW9uKGFlKXt2YXIgc2U9ZnVu'@;
put 'Y3Rpb24oZGUsbGUpe3Rocm93IG5ldyBFcnJvcigiUG9sbCBzdHJhdGVnaWVzIGFyZSBub3QgdmFsaWQuIi5jb25jYXQoZGU/IiAiLmNvbmNhdChkZSk6IiIpLmNvbmNhdChsZT8iIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4iLmNvbmNhdChKU09OLnN0cmluZ2lmeShsZSxudWxsLDIpKToi'@;
put 'IikpfTthZS5mb3JFYWNoKGZ1bmN0aW9uKGRlLGxlKXt2YXIgY2U9ZGUubWF4UG9sbENvdW50LEc9ZGUucG9sbEludGVydmFsO2NlPDE/c2UoIidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gMC4iLGRlKTowIT09bGU/Y2U8PWFlW2xlLTFdLm1heFBvbGxDb3VudCYmc2Uo'@;
put 'IidtYXhQb2xsQ291bnQnIGhhcyB0byBiZSBncmVhdGVyIHRoYW4gJ21heFBvbGxDb3VudCcgaW4gcHJldmlvdXMgcG9sbCBzdHJhdGVneS4iLGRlKTpHPDEmJnNlKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixkZSl9KX19LDIwODA6ZnVuY3Rpb24odyxBLEQp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDQxNTUpLFU9RCg1MTA4KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLFYsWixXKXtyZXR1cm4gbmV3KFp8fChaPVByb21pc2UpKShmdW5jdGlvbih6LHEpe2Z1bmN0aW9uIFEoc2Upe3RyeXthZShXLm5leHQoc2UpKX1jYXRjaChkZSl7'@;
put 'cShkZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7YWUoVy50aHJvdyhzZSkpfWNhdGNoKGRlKXtxKGRlKX19ZnVuY3Rpb24gYWUoc2Upe3ZhciBkZTtzZS5kb25lP3ooc2UudmFsdWUpOihkZT1zZS52YWx1ZSxkZSBpbnN0YW5jZW9mIFo/ZGU6bmV3IFooZnVuY3Rpb24obGUpe2xlKGRlKX0pKS50'@;
put 'aGVuKFEsdGUpfWFlKChXPVcuYXBwbHkoTixWfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihOLFYpe3ZhciBaLFcseixxLFE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmelswXSl0aHJvdyB6WzFdO3JldHVybiB6WzFdfSx0cnlzOltd'@;
put 'LG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRlKGFlKXtyZXR1cm4gZnVuY3Rpb24oc2Up'@;
put 'e3JldHVybiBmdW5jdGlvbihkZSl7aWYoWil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtROyl0cnl7aWYoWj0xLFcmJih6PTImZGVbMF0/Vy5yZXR1cm46ZGVbMF0/Vy50aHJvd3x8KCh6PVcucmV0dXJuKSYmei5jYWxsKFcpLDAp'@;
put 'OlcubmV4dCkmJiEoej16LmNhbGwoVyxkZVsxXSkpLmRvbmUpcmV0dXJuIHo7c3dpdGNoKFc9MCx6JiYoZGU9WzImZGVbMF0sei52YWx1ZV0pLGRlWzBdKXtjYXNlIDA6Y2FzZSAxOno9ZGU7YnJlYWs7Y2FzZSA0OnJldHVybiBRLmxhYmVsKysse3ZhbHVlOmRlWzFdLGRvbmU6ITF9O2Nhc2Ug'@;
put 'NTpRLmxhYmVsKyssVz1kZVsxXSxkZT1bMF07Y29udGludWU7Y2FzZSA3OmRlPVEub3BzLnBvcCgpLFEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHo9KHo9US50cnlzKS5sZW5ndGg+MCYmelt6Lmxlbmd0aC0xXSl8fDYhPT1kZVswXSYmMiE9PWRlWzBdKSl7UT0wO2NvbnRp'@;
put 'bnVlfWlmKDM9PT1kZVswXSYmKCF6fHxkZVsxXT56WzBdJiZkZVsxXTx6WzNdKSl7US5sYWJlbD1kZVsxXTticmVha31pZig2PT09ZGVbMF0mJlEubGFiZWw8elsxXSl7US5sYWJlbD16WzFdLHo9ZGU7YnJlYWt9aWYoeiYmUS5sYWJlbDx6WzJdKXtRLmxhYmVsPXpbMl0sUS5vcHMucHVzaChk'@;
put 'ZSk7YnJlYWt9elsyXSYmUS5vcHMucG9wKCksUS50cnlzLnBvcCgpO2NvbnRpbnVlfWRlPVYuY2FsbChOLFEpfWNhdGNoKGxlKXtkZT1bNixsZV0sVz0wfWZpbmFsbHl7Wj16PTB9aWYoNSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm57dmFsdWU6ZGVbMF0/ZGVbMV06dm9pZCAwLGRvbmU6ITB9'@;
put 'fShbYWUsc2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5zYXZlTG9nPXZvaWQgMDt2YXIgaz1EKDU5MjgpLEI9RCg2MTMxKTtBLnNhdmVMb2c9ZnVuY3Rpb24oTixWLFosVyx6LHEpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm'@;
put 'dW5jdGlvbigpe3ZhciBRLHRlLGFlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oc2Upe3N3aXRjaChzZS5sYWJlbCl7Y2FzZSAwOmlmKCFxKXRocm93IG5ldyBFcnJvcigiTG9ncyBmb3Igam9iICIuY29uY2F0KE4uaWQsIiBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNz'@;
put 'IHRva2VuLiIpKTtpZigheil0aHJvdyBuZXcgRXJyb3IoIkxvZ3MgZm9yIGpvYiAiLmNvbmNhdChOLmlkLCIgY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS4iKSk7aWYoUT1QLmxvZ2dlcnx8VSwhKHRlPU4ubGlua3MuZmluZChmdW5jdGlvbihkZSl7cmV0'@;
put 'dXJuImxvZyI9PT1kZS5yZWx9KSkpdGhyb3cgbmV3IEVycm9yKCJMb2cgVVJMIGZvciBqb2IgIi5jb25jYXQoTi5pZCwiIHdhcyBub3QgZm91bmQuIikpO3JldHVybls0LCgwLGsuZmV0Y2hMb2cpKFYscSwiIi5jb25jYXQodGUuaHJlZiwiL2NvbnRlbnQiKSxaLFcpXTtjYXNlIDE6cmV0dXJu'@;
put 'IGFlPXNlLnNlbnQoKSxRLmluZm8oIldyaXRpbmcgbG9ncyB0byAiLmNvbmNhdCh6LnBhdGgpKSxbNCwoMCxCLndyaXRlU3RyZWFtKSh6LGFlfHwiIildO2Nhc2UgMjpyZXR1cm4gc2Uuc2VudCgpLFsyXX19KX0pfX0sNjQ5NjpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRo'@;
put 'aXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihrLEIsTixWKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihaLFcpe2Z1bmN0aW9uIHoodGUpe3RyeXtRKFYubmV4dCh0ZSkpfWNhdGNoKGFlKXtXKGFlKX19ZnVuY3Rpb24gcSh0ZSl7dHJ5e1EoVi50aHJvdyh0ZSkpfWNh'@;
put 'dGNoKGFlKXtXKGFlKX19ZnVuY3Rpb24gUSh0ZSl7dmFyIGFlO3RlLmRvbmU/Wih0ZS52YWx1ZSk6KGFlPXRlLnZhbHVlLGFlIGluc3RhbmNlb2YgTj9hZTpuZXcgTihmdW5jdGlvbihzZSl7c2UoYWUpfSkpLnRoZW4oeixxKX1RKChWPVYuYXBwbHkoayxCfHxbXSkpLm5leHQoKSl9KX0sVT10'@;
put 'aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihrLEIpe3ZhciBOLFYsWixXLHo9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmWlswXSl0aHJvdyBaWzFdO3JldHVybiBaWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFc9e25leHQ6cSgwKSx0aHJvdzpxKDEpLHJldHVybjpx'@;
put 'KDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoV1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxXO2Z1bmN0aW9uIHEoUSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtyZXR1cm4gZnVuY3Rpb24oYWUpe2lmKE4pdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJh'@;
put 'dG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ejspdHJ5e2lmKE49MSxWJiYoWj0yJmFlWzBdP1YucmV0dXJuOmFlWzBdP1YudGhyb3d8fCgoWj1WLnJldHVybikmJlouY2FsbChWKSwwKTpWLm5leHQpJiYhKFo9Wi5jYWxsKFYsYWVbMV0pKS5kb25lKXJldHVybiBaO3N3aXRjaChW'@;
put 'PTAsWiYmKGFlPVsyJmFlWzBdLFoudmFsdWVdKSxhZVswXSl7Y2FzZSAwOmNhc2UgMTpaPWFlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gei5sYWJlbCsrLHt2YWx1ZTphZVsxXSxkb25lOiExfTtjYXNlIDU6ei5sYWJlbCsrLFY9YWVbMV0sYWU9WzBdO2NvbnRpbnVlO2Nhc2UgNzphZT16Lm9wcy5w'@;
put 'b3AoKSx6LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChaPShaPXoudHJ5cykubGVuZ3RoPjAmJlpbWi5sZW5ndGgtMV0pfHw2IT09YWVbMF0mJjIhPT1hZVswXSkpe3o9MDtjb250aW51ZX1pZigzPT09YWVbMF0mJighWnx8YWVbMV0+WlswXSYmYWVbMV08WlszXSkpe3oubGFi'@;
put 'ZWw9YWVbMV07YnJlYWt9aWYoNj09PWFlWzBdJiZ6LmxhYmVsPFpbMV0pe3oubGFiZWw9WlsxXSxaPWFlO2JyZWFrfWlmKFomJnoubGFiZWw8WlsyXSl7ei5sYWJlbD1aWzJdLHoub3BzLnB1c2goYWUpO2JyZWFrfVpbMl0mJnoub3BzLnBvcCgpLHoudHJ5cy5wb3AoKTtjb250aW51ZX1hZT1C'@;
put 'LmNhbGwoayx6KX1jYXRjaChzZSl7YWU9WzYsc2VdLFY9MH1maW5hbGx5e049Wj0wfWlmKDUmYWVbMF0pdGhyb3cgYWVbMV07cmV0dXJue3ZhbHVlOmFlWzBdP2FlWzFdOnZvaWQgMCxkb25lOiEwfX0oW1EsdGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksQS51cGxvYWRUYWJsZXM9dm9pZCAwO3ZhciBJPUQoOTc3OCksRT1EKDI0MDIpO0EudXBsb2FkVGFibGVzPWZ1bmN0aW9uKGssQixOKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVixaLFcseixxLFEsdGU7cmV0dXJuIFUodGhpcyxmdW5jdGlv'@;
put 'bihhZSl7c3dpdGNoKGFlLmxhYmVsKXtjYXNlIDA6Zm9yKFcgaW4gVj1bXSxaPVtdLEIpWi5wdXNoKFcpO3o9MCxhZS5sYWJlbD0xO2Nhc2UgMTppZighKHo8Wi5sZW5ndGgpKXJldHVyblszLDRdO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT0oUT0oMCxFLmNvbnZlcnRUb0NT'@;
put 'VikoQixxPVpbel0pKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7cmV0dXJuWzQsay51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBsb2FkIixRLE4pLmNhdGNoKGZ1bmN0aW9uKHNl'@;
put 'KXt0aHJvdygwLEkucHJlZml4TWVzc2FnZSkoc2UsIkVycm9yIHdoaWxlIHVwbG9hZGluZyBmaWxlLiAiKX0pXTtjYXNlIDI6dGU9YWUuc2VudCgpLFYucHVzaCh7dGFibGVOYW1lOnEsZmlsZTp0ZS5yZXN1bHR9KSxhZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4geisrLFszLDFdO2Nhc2UgNDpy'@;
put 'ZXR1cm5bMixWXX19KX0pfX0sNjEzMTpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVSxJLEUsayl7cmV0dXJuIG5ldyhFfHwoRT1Qcm9taXNlKSkoZnVuY3Rpb24oQixOKXtmdW5jdGlvbiBWKHope3RyeXtXKGsubmV4dCh6'@;
put 'KSl9Y2F0Y2gocSl7TihxKX19ZnVuY3Rpb24gWih6KXt0cnl7VyhrLnRocm93KHopKX1jYXRjaChxKXtOKHEpfX1mdW5jdGlvbiBXKHope3ZhciBxO3ouZG9uZT9CKHoudmFsdWUpOihxPXoudmFsdWUscSBpbnN0YW5jZW9mIEU/cTpuZXcgRShmdW5jdGlvbihRKXtRKHEpfSkpLnRoZW4oVixa'@;
put 'KX1XKChrPWsuYXBwbHkoVSxJfHxbXSkpLm5leHQoKSl9KX0sUD10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihVLEkpe3ZhciBFLGssQixOLFY9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmQlswXSl0aHJvdyBCWzFdO3JldHVybiBCWzFdfSx0cnlzOltdLG9wczpbXX07'@;
put 'cmV0dXJuIE49e25leHQ6WigwKSx0aHJvdzpaKDEpLHJldHVybjpaKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoTltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxOO2Z1bmN0aW9uIFooVyl7cmV0dXJuIGZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlv'@;
put 'bihxKXtpZihFKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1Y7KXRyeXtpZihFPTEsayYmKEI9MiZxWzBdP2sucmV0dXJuOnFbMF0/ay50aHJvd3x8KChCPWsucmV0dXJuKSYmQi5jYWxsKGspLDApOmsubmV4dCkmJiEoQj1CLmNh'@;
put 'bGwoayxxWzFdKSkuZG9uZSlyZXR1cm4gQjtzd2l0Y2goaz0wLEImJihxPVsyJnFbMF0sQi52YWx1ZV0pLHFbMF0pe2Nhc2UgMDpjYXNlIDE6Qj1xO2JyZWFrO2Nhc2UgNDpyZXR1cm4gVi5sYWJlbCsrLHt2YWx1ZTpxWzFdLGRvbmU6ITF9O2Nhc2UgNTpWLmxhYmVsKyssaz1xWzFdLHE9WzBd'@;
put 'O2NvbnRpbnVlO2Nhc2UgNzpxPVYub3BzLnBvcCgpLFYudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKEI9KEI9Vi50cnlzKS5sZW5ndGg+MCYmQltCLmxlbmd0aC0xXSl8fDYhPT1xWzBdJiYyIT09cVswXSkpe1Y9MDtjb250aW51ZX1pZigzPT09cVswXSYmKCFCfHxxWzFdPkJb'@;
put 'MF0mJnFbMV08QlszXSkpe1YubGFiZWw9cVsxXTticmVha31pZig2PT09cVswXSYmVi5sYWJlbDxCWzFdKXtWLmxhYmVsPUJbMV0sQj1xO2JyZWFrfWlmKEImJlYubGFiZWw8QlsyXSl7Vi5sYWJlbD1CWzJdLFYub3BzLnB1c2gocSk7YnJlYWt9QlsyXSYmVi5vcHMucG9wKCksVi50cnlzLnBv'@;
put 'cCgpO2NvbnRpbnVlfXE9SS5jYWxsKFUsVil9Y2F0Y2goUSl7cT1bNixRXSxrPTB9ZmluYWxseXtFPUI9MH1pZig1JnFbMF0pdGhyb3cgcVsxXTtyZXR1cm57dmFsdWU6cVswXT9xWzFdOnZvaWQgMCxkb25lOiEwfX0oW1csel0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9k'@;
put 'dWxlIix7dmFsdWU6ITB9KSxBLndyaXRlU3RyZWFtPXZvaWQgMCxBLndyaXRlU3RyZWFtPWZ1bmN0aW9uKFUsSSl7cmV0dXJuIEQodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gUCh0aGlzLGZ1bmN0aW9uKEUpe3JldHVyblsyLFUud3JpdGUoSSsiXG4iLGZ1bmN0aW9u'@;
put 'KGspe3JldHVybiBrP1Byb21pc2UucmVqZWN0KGspOlByb21pc2UucmVzb2x2ZSgpfSldfSl9KX19LDI4NTE6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDUxMDgpLFU9RCg0MTU1KSxJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihhZSxzZSxkZSxsZSl7cmV0'@;
put 'dXJuIG5ldyhkZXx8KGRlPVByb21pc2UpKShmdW5jdGlvbihjZSxHKXtmdW5jdGlvbiB5KGope3RyeXtIKGxlLm5leHQoaikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEwoail7dHJ5e0gobGUudGhyb3coaikpfWNhdGNoKGcpe0coZyl9fWZ1bmN0aW9uIEgoail7dmFyIGc7ai5kb25lP2Nl'@;
put 'KGoudmFsdWUpOihnPWoudmFsdWUsZyBpbnN0YW5jZW9mIGRlP2c6bmV3IGRlKGZ1bmN0aW9uKFMpe1MoZyl9KSkudGhlbih5LEwpfUgoKGxlPWxlLmFwcGx5KGFlLHNlfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihhZSxzZSl7dmFyIGRlLGxl'@;
put 'LGNlLEcseT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZjZVswXSl0aHJvdyBjZVsxXTtyZXR1cm4gY2VbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gRz17bmV4dDpMKDApLHRocm93OkwoMSkscmV0dXJuOkwoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihHW1N5bWJv'@;
put 'bC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEc7ZnVuY3Rpb24gTChIKXtyZXR1cm4gZnVuY3Rpb24oail7cmV0dXJuIGZ1bmN0aW9uKGcpe2lmKGRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3k7KXRyeXtp'@;
put 'ZihkZT0xLGxlJiYoY2U9MiZnWzBdP2xlLnJldHVybjpnWzBdP2xlLnRocm93fHwoKGNlPWxlLnJldHVybikmJmNlLmNhbGwobGUpLDApOmxlLm5leHQpJiYhKGNlPWNlLmNhbGwobGUsZ1sxXSkpLmRvbmUpcmV0dXJuIGNlO3N3aXRjaChsZT0wLGNlJiYoZz1bMiZnWzBdLGNlLnZhbHVlXSks'@;
put 'Z1swXSl7Y2FzZSAwOmNhc2UgMTpjZT1nO2JyZWFrO2Nhc2UgNDpyZXR1cm4geS5sYWJlbCsrLHt2YWx1ZTpnWzFdLGRvbmU6ITF9O2Nhc2UgNTp5LmxhYmVsKyssbGU9Z1sxXSxnPVswXTtjb250aW51ZTtjYXNlIDc6Zz15Lm9wcy5wb3AoKSx5LnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVs'@;
put 'dDppZighKChjZT0oY2U9eS50cnlzKS5sZW5ndGg+MCYmY2VbY2UubGVuZ3RoLTFdKXx8NiE9PWdbMF0mJjIhPT1nWzBdKSl7eT0wO2NvbnRpbnVlfWlmKDM9PT1nWzBdJiYoIWNlfHxnWzFdPmNlWzBdJiZnWzFdPGNlWzNdKSl7eS5sYWJlbD1nWzFdO2JyZWFrfWlmKDY9PT1nWzBdJiZ5Lmxh'@;
put 'YmVsPGNlWzFdKXt5LmxhYmVsPWNlWzFdLGNlPWc7YnJlYWt9aWYoY2UmJnkubGFiZWw8Y2VbMl0pe3kubGFiZWw9Y2VbMl0seS5vcHMucHVzaChnKTticmVha31jZVsyXSYmeS5vcHMucG9wKCkseS50cnlzLnBvcCgpO2NvbnRpbnVlfWc9c2UuY2FsbChhZSx5KX1jYXRjaChTKXtnPVs2LFNd'@;
put 'LGxlPTB9ZmluYWxseXtkZT1jZT0wfWlmKDUmZ1swXSl0aHJvdyBnWzFdO3JldHVybnt2YWx1ZTpnWzBdP2dbMV06dm9pZCAwLGRvbmU6ITB9fShbSCxqXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuQXV0aE1hbmFnZXI9dm9pZCAwO3Zh'@;
put 'ciBrPUQoMzkwMCksQj1EKDEzOTUpLE49RCg1OTI4KSxWPUQoMTE3MCksWj1EKDU0MTgpLFc9RCg0NTgyKSx6PUQoNjU0NykscT1mdW5jdGlvbigpe2Z1bmN0aW9uIGFlKHNlLGRlLGxlLGNlKXt2YXIgRz10aGlzO3RoaXMuc2VydmVyVXJsPXNlLHRoaXMuc2VydmVyVHlwZT1kZSx0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQ9bGUsdGhpcy5sb2dpbkNhbGxiYWNrPWNlLHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9Ii9TQVNMb2dvbiIsdGhpcy5leHRyYWN0VXNlck5hbWU9ZnVuY3Rpb24oeSl7c3dpdGNoKEcuc2VydmVyVHlwZSl7'@;
put 'Y2FzZSBrLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4geT8uaWQ7Y2FzZSBrLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4iIjtjYXNlIGsuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4geT8udXNlcm5hbWU7ZGVmYXVsdDpyZXR1cm4gUC5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4'@;
put 'dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5leHRyYWN0VXNlckxvbmdOYW1lPWZ1bmN0aW9uKHkpe3N3aXRjaChHLnNlcnZlclR5cGUpe2Nhc2Ugay5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuIHk/Lm5hbWU7Y2FzZSBrLlNlcnZlclR5cGUuU2FzOTpyZXR1cm4oMCxWLmV4'@;
put 'dHJhY3RVc2VyTG9uZ05hbWVTYXM5KSh5KTtjYXNlIGsuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4geT8uZGlzcGxheU5hbWU7ZGVmYXVsdDpyZXR1cm4gUC5lcnJvcigiU2VydmVyIFR5cGUgbm90IGZvdW5kIGluIGV4dHJhY3RVc2VyTmFtZSBmdW5jdGlvbiIpLCIifX0sdGhpcy5zZXRMb2dp'@;
put 'blVybD1mdW5jdGlvbih5KXt2YXIgTD15WzFdLnJlcGxhY2UoL1w/LiovLCIiKTtpZigiLyI9PT1MWzBdKXtMPUwuc3Vic3RyKDEpO3ZhciBIPUcuc2VydmVyVXJsPyIiLmNvbmNhdChHLnNlcnZlclVybCwiLyIpLmNvbmNhdChMKToiIi5jb25jYXQoTCk7Ry5sb2dpblVybD1HLnNlcnZlclR5'@;
put 'cGU9PT1rLlNlcnZlclR5cGUuU2FzVml5YT9IOkgucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FTTG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRoaXMuc2VydmVyVHlwZT09PWsuU2VydmVyVHlwZS5TYXM5PyIv'@;
put 'U0FTTG9nb24vbG9nb3V0PyI6dGhpcy5zZXJ2ZXJUeXBlPT09ay5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9dGhpcy5zZXJ2ZXJVcmwrdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmx9cmV0'@;
put 'dXJuIGFlLnByb3RvdHlwZS5yZWRpcmVjdGVkTG9nSW49ZnVuY3Rpb24oc2Upe3ZhciBkZT1zZS5vbkxvZ2dlZE91dDtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgbGUsRyx5LEwsSCxqLGcsUyx4O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oXyl7c3dpdGNoKF8u'@;
put 'bGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmZldGNoVXNlck5hbWUoKV07Y2FzZSAxOnJldHVybiBsZT1fLnNlbnQoKSxHPWxlLnVzZXJOYW1lLHk9bGUudXNlckxvbmdOYW1lLGxlLmlzTG9nZ2VkSW4/KChVLmxvZ2dlcnx8UCkubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBh'@;
put 'IHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSxbNCx0aGlzLmxvZ2luQ2FsbGJhY2soKV0pOlszLDNdO2Nhc2UgMjpyZXR1cm4gXy5zZW50KCksWzIse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6Ryx1c2VyTG9uZ05hbWU6eX1dO2Nhc2UgMzpyZXR1cm5bNCwoMCxaLm9wZW5XZWJQYWdl'@;
put 'KSh0aGlzLnJlZGlyZWN0ZWRMb2dpblVybCwiU0FTTG9nb24iLHt3aWR0aDo1MDAsaGVpZ2h0OjYwMH0sZGUpXTtjYXNlIDQ6cmV0dXJuKEw9Xy5zZW50KCkpP3RoaXMuc2VydmVyVHlwZSE9PWsuU2VydmVyVHlwZS5TYXNWaXlhP1szLDZdOls0LCgwLHoudmVyaWZ5U2FzVml5YUxvZ2luKShM'@;
put 'KV06WzIse2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifV07Y2FzZSA1OnJldHVybiBqPV8uc2VudCgpLFszLDhdO2Nhc2UgNjpyZXR1cm5bNCwoMCxXLnZlcmlmeVNhczlMb2dpbikoTCldO2Nhc2UgNzpqPV8uc2VudCgpLF8ubGFiZWw9ODtjYXNlIDg6cmV0dXJu'@;
put 'IEg9ai5pc0xvZ2dlZEluLEwuY2xvc2UoKSxIP3RoaXMuc2VydmVyVHlwZSE9PWsuU2VydmVyVHlwZS5TYXM5P1szLDEwXTpbNCx0aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCldOlszLDEzXTtjYXNlIDk6Xy5zZW50KCksXy5sYWJlbD0xMDtjYXNlIDEwOnJldHVybls0LHRoaXMuZmV0'@;
put 'Y2hVc2VyTmFtZSgpXTtjYXNlIDExOnJldHVybiBnPV8uc2VudCgpLFM9Zy51c2VyTmFtZSx4PWcudXNlckxvbmdOYW1lLFs0LHRoaXMubG9naW5DYWxsYmFjaygpXTtjYXNlIDEyOnJldHVybiBfLnNlbnQoKSxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTpTLHVzZXJMb25nTmFtZTp4fV07'@;
put 'Y2FzZSAxMzpyZXR1cm5bMix7aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XX19KX0pfSxhZS5wcm90b3R5cGUubG9nSW49ZnVuY3Rpb24oc2UsZGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBsZSxjZSx5LEwsSCxqLGcsUzty'@;
put 'ZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKHgpe3N3aXRjaCh4LmxhYmVsKXtjYXNlIDA6cmV0dXJuIGxlPXtfc2VydmljZToiZGVmYXVsdCIsdXNlcm5hbWU6c2UscGFzc3dvcmQ6ZGV9LHRoaXMudXNlck5hbWU9IiIsdGhpcy51c2VyTG9uZ05hbWU9IiIsWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07'@;
put 'Y2FzZSAxOnJldHVybiBjZT14LnNlbnQoKSx5PWNlLmxvZ2luRm9ybSxMPWNlLnVzZXJMb25nTmFtZSxjZS5pc0xvZ2dlZEluPygoVS5sb2dnZXJ8fFApLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIiksWzQsdGhpcy5sb2dp'@;
put 'bkNhbGxiYWNrKCldKTpbMywzXTtjYXNlIDI6cmV0dXJuIHguc2VudCgpLHRoaXMudXNlck5hbWU9bGUudXNlcm5hbWUsdGhpcy51c2VyTG9uZ05hbWU9TCxbMix7aXNMb2dnZWRJbjohMCx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dO2Nh'@;
put 'c2UgMzpyZXR1cm5bNCx0aGlzLnNlbmRMb2dpblJlcXVlc3QoeSxsZSldO2Nhc2UgNDpyZXR1cm4gSD14LnNlbnQoKSwoaj10ZSh0aGlzLnNlcnZlclR5cGUsSCkpP1szLDldOlEoSCk/WzQsdGhpcy5nZXRMb2dpbkZvcm0oSCldOlszLDddO2Nhc2UgNTpyZXR1cm4gZz14LnNlbnQoKSxbNCx0'@;
put 'aGlzLnNlbmRMb2dpblJlcXVlc3QoZyxsZSldO2Nhc2UgNjpIPXguc2VudCgpLHgubGFiZWw9NztjYXNlIDc6cmV0dXJuWzQsdGhpcy5jaGVja1Nlc3Npb24oKV07Y2FzZSA4OlM9eC5zZW50KCksaj1TLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9Uy51c2VyTG9uZ05hbWUseC5sYWJl'@;
put 'bD05O2Nhc2UgOTpyZXR1cm4gaj90aGlzLnNlcnZlclR5cGUhPT1rLlNlcnZlclR5cGUuU2FzOT9bMywxMV06WzQsdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpXTpbMywxMl07Y2FzZSAxMDp4LnNlbnQoKSx4LmxhYmVsPTExO2Nhc2UgMTE6dGhpcy5sb2dpbkNhbGxiYWNrKCksdGhp'@;
put 'cy51c2VyTmFtZT1sZS51c2VybmFtZSx4LmxhYmVsPTEyO2Nhc2UgMTI6cmV0dXJuWzIse2lzTG9nZ2VkSW46aix1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX1dfX0pfSl9LGFlLnByb3RvdHlwZS5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaz1m'@;
put 'dW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZTtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gc2U9IiIuY29uY2F0KHRoaXMuc2VydmVyVXJsLCIvU0FTU3RvcmVkUHJvY2Vzcy9qX3Nw'@;
put 'cmluZ19jYXNfc2VjdXJpdHlfY2hlY2siKSxbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvU0FTTG9nb24vbG9naW4/c2VydmljZT0iLmNvbmNhdChzZSksdm9pZCAwKS5jYXRjaChmdW5jdGlvbihsZSl7aWYoIShsZSBpbnN0YW5jZW9mIEIuTm90Rm91bmRFcnJvcikpdGhyb3cgbGV9KV07'@;
put 'Y2FzZSAxOnJldHVybiBkZS5zZW50KCksWzJdfX0pfSl9LGFlLnByb3RvdHlwZS5zZW5kTG9naW5SZXF1ZXN0PWZ1bmN0aW9uKHNlLGRlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgRyx5O3JldHVybiBFKHRoaXMsZnVuY3Rpb24oTCl7c3dpdGNoKEwubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm4gdGhpcy5zZXJ2ZXJUeXBlIT09ay5TZXJ2ZXJUeXBlLlNhc2pzP1szLDJdOls0LHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5Vcmwse3VzZXJuYW1lOmRlLnVzZXJuYW1lLHBhc3N3b3JkOmRlLnBhc3N3b3JkfSx2b2lkIDApXTtjYXNlIDE6Y2Fz'@;
put 'ZSAzOnJldHVyblsyLEwuc2VudCgpLnJlc3VsdF07Y2FzZSAyOmZvcihHIGluIHNlKWRlW0ddPXNlW0ddO3JldHVybiB5PSgwLE4uc2VyaWFsaXplKShkZSksWzQsdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx5LHZvaWQgMCwidGV4dC9wbGFpbiIseyJDb250ZW50LVR5'@;
put 'cGUiOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLEFjY2VwdDoiKi8qIn0pXX19KX0pfSxhZS5wcm90b3R5cGUuY2hlY2tTZXNzaW9uPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGRlLGxlLGNlLEc7cmV0dXJuIEUo'@;
put 'dGhpcyxmdW5jdGlvbih5KXtzd2l0Y2goeS5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuZmV0Y2hVc2VyTmFtZSgpXTtjYXNlIDE6cmV0dXJuIHNlPXkuc2VudCgpLGxlPXNlLnVzZXJOYW1lLGNlPXNlLnVzZXJMb25nTmFtZSxHPW51bGwsKGRlPXNlLmlzTG9nZ2VkSW4pP1szLDRdOls0'@;
put 'LHRoaXMubG9nT3V0KCldO2Nhc2UgMjpyZXR1cm4geS5zZW50KCksWzQsdGhpcy5nZXROZXdMb2dpbkZvcm0oKV07Y2FzZSAzOkc9eS5zZW50KCkseS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMixQcm9taXNlLnJlc29sdmUoe2lzTG9nZ2VkSW46ZGUsdXNlck5hbWU6bGUsdXNlckxvbmdOYW1l'@;
put 'OmNlLGxvZ2luRm9ybTpHfSldfX0pfSl9LGFlLnByb3RvdHlwZS5nZXROZXdMb2dpbkZvcm09ZnVuY3Rpb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgc2U7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihkZSl7c3dpdGNoKGRlLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHRoaXMuc2VydmVyVHlwZT09PWsuU2VydmVyVHlwZS5TYXNqcz9bMix0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oZnVuY3Rpb24obGUpe3ZhciBjZSx5PW51bGw9PT0oY2U9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgt'@;
put 'QWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKGxlLnJlc3VsdCkpfHx2b2lkIDA9PT1jZT92b2lkIDA6Y2VbMV07eSYmKGRvY3VtZW50LmNvb2tpZT15KX0pXTpbNCx0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFj'@;
put 'ZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIildO2Nhc2UgMTpyZXR1cm4gc2U9ZGUuc2VudCgpLnJlc3VsdCxbNCx0aGlzLmdldExvZ2luRm9ybShzZSldO2Nhc2UgMjpyZXR1cm5bMixkZS5zZW50KCldfX0pfSl9LGFlLnByb3Rv'@;
put 'dHlwZS5mZXRjaFVzZXJOYW1lPWZ1bmN0aW9uKCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHNlLGRlLGxlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oY2Upe3N3aXRjaChjZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBzZT0iIi5jb25jYXQodGhpcy5zZXJ2ZXJV'@;
put 'cmwsdGhpcy5zZXJ2ZXJUeXBlPT09ay5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNlciI6dGhpcy5zZXJ2ZXJUeXBlPT09ay5TZXJ2ZXJUeXBlLlNhczk/Ii9TQVNTdG9yZWRQcm9jZXNzIjoiL1NBU2pzQXBpL3Nlc3Npb24iKSxbNCx0aGlzLnJlcXVl'@;
put 'c3RDbGllbnQuZ2V0KHNlLHZvaWQgMCwidGV4dC9wbGFpbiIpLmNhdGNoKGZ1bmN0aW9uKEcpe3JldHVybntyZXN1bHQ6ImF1dGhFcnIifX0pXTtjYXNlIDE6cmV0dXJuIGRlPWNlLnNlbnQoKS5yZXN1bHQsKGxlPSJhdXRoRXJyIiE9PWRlKT9bMywzXTpbNCx0aGlzLmxvZ091dCgpXTtjYXNl'@;
put 'IDI6cmV0dXJuIGNlLnNlbnQoKSxbMix7aXNMb2dnZWRJbjpsZSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9XTtjYXNlIDM6cmV0dXJuWzIse2lzTG9nZ2VkSW46bGUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUoZGUpLHVzZXJMb25nTmFtZTp0aGlzLmV4dHJhY3RVc2VyTG9u'@;
put 'Z05hbWUoZGUpfV19fSl9KX0sYWUucHJvdG90eXBlLmdldExvZ2luRm9ybT1mdW5jdGlvbihzZSl7dmFyIGRlPS88Zm9ybS4rYWN0aW9uPSIoLiooTG9nb258bG9naW4pW14iXSopLio+Ly5leGVjKHNlKSxsZT17fTtpZihkZSYmZGUubGVuZ3RoKXt0aGlzLnNldExvZ2luVXJsKGRlKTt2YXIg'@;
put 'Y2U9KHNlPXNlLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtjZSYmY2UuZm9yRWFjaChmdW5jdGlvbihHKXt2YXIgeT1HLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikvKTt5JiZ5Lmxlbmd0aCYmKGxl'@;
put 'W3lbMV1dPXlbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKGxlKS5sZW5ndGg/bGU6bnVsbH0sYWUucHJvdG90eXBlLmxvZ091dD1mdW5jdGlvbigpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3JldHVybiBFKHRoaXMsZnVuY3Rpb24oc2Upe3JldHVybiB0aGlzLnJl'@;
put 'cXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCksWzIsdGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4hMH0pXX0pfSl9LGFlfSgpO0EuQXV0aE1hbmFnZXI9cTt2YXIgUT1mdW5jdGlvbihhZSl7cmV0dXJuL0FuIGVy'@;
put 'cm9yIG9jY3VycmVkIHdoaWxlIHRoZSBzeXN0ZW0gd2FzIHZlcmlmeWluZyB5b3VyIGNyZWRlbnRpYWxzLiBQbGVhc2UgZW50ZXIgeW91ciBjcmVkZW50aWFscyBhZ2Fpbi4vZ20udGVzdChhZSl9LHRlPWZ1bmN0aW9uKGFlLHNlKXtyZXR1cm4gYWU9PT1rLlNlcnZlclR5cGUuU2FzanM/c2U/'@;
put 'LmxvZ2dlZGluOi9Zb3UgaGF2ZSBzaWduZWQgaW4vZ20udGVzdChzZSl9fSw1NzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLE4sVixaKXtyZXR1cm4gbmV3KFZ8fChWPVByb21pc2UpKShmdW5jdGlvbihXLHope2Z1'@;
put 'bmN0aW9uIHEoYWUpe3RyeXt0ZShaLm5leHQoYWUpKX1jYXRjaChzZSl7eihzZSl9fWZ1bmN0aW9uIFEoYWUpe3RyeXt0ZShaLnRocm93KGFlKSl9Y2F0Y2goc2Upe3ooc2UpfX1mdW5jdGlvbiB0ZShhZSl7dmFyIHNlO2FlLmRvbmU/VyhhZS52YWx1ZSk6KHNlPWFlLnZhbHVlLHNlIGluc3Rh'@;
put 'bmNlb2YgVj9zZTpuZXcgVihmdW5jdGlvbihkZSl7ZGUoc2UpfSkpLnRoZW4ocSxRKX10ZSgoWj1aLmFwcGx5KEIsTnx8W10pKS5uZXh0KCkpfSl9LFU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oQixOKXt2YXIgVixaLFcseixxPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtp'@;
put 'ZigxJldbMF0pdGhyb3cgV1sxXTtyZXR1cm4gV1sxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiB6PXtuZXh0OlEoMCksdGhyb3c6USgxKSxyZXR1cm46USgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHpbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSks'@;
put 'ejtmdW5jdGlvbiBRKHRlKXtyZXR1cm4gZnVuY3Rpb24oYWUpe3JldHVybiBmdW5jdGlvbihzZSl7aWYoVil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtxOyl0cnl7aWYoVj0xLFomJihXPTImc2VbMF0/Wi5yZXR1cm46c2VbMF0/'@;
put 'Wi50aHJvd3x8KChXPVoucmV0dXJuKSYmVy5jYWxsKFopLDApOloubmV4dCkmJiEoVz1XLmNhbGwoWixzZVsxXSkpLmRvbmUpcmV0dXJuIFc7c3dpdGNoKFo9MCxXJiYoc2U9WzImc2VbMF0sVy52YWx1ZV0pLHNlWzBdKXtjYXNlIDA6Y2FzZSAxOlc9c2U7YnJlYWs7Y2FzZSA0OnJldHVybiBx'@;
put 'LmxhYmVsKysse3ZhbHVlOnNlWzFdLGRvbmU6ITF9O2Nhc2UgNTpxLmxhYmVsKyssWj1zZVsxXSxzZT1bMF07Y29udGludWU7Y2FzZSA3OnNlPXEub3BzLnBvcCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFc9KFc9cS50cnlzKS5sZW5ndGg+MCYmV1tXLmxlbmd0aC0x'@;
put 'XSl8fDYhPT1zZVswXSYmMiE9PXNlWzBdKSl7cT0wO2NvbnRpbnVlfWlmKDM9PT1zZVswXSYmKCFXfHxzZVsxXT5XWzBdJiZzZVsxXTxXWzNdKSl7cS5sYWJlbD1zZVsxXTticmVha31pZig2PT09c2VbMF0mJnEubGFiZWw8V1sxXSl7cS5sYWJlbD1XWzFdLFc9c2U7YnJlYWt9aWYoVyYmcS5s'@;
put 'YWJlbDxXWzJdKXtxLmxhYmVsPVdbMl0scS5vcHMucHVzaChzZSk7YnJlYWt9V1syXSYmcS5vcHMucG9wKCkscS50cnlzLnBvcCgpO2NvbnRpbnVlfXNlPU4uY2FsbChCLHEpfWNhdGNoKGRlKXtzZT1bNixkZV0sWj0wfWZpbmFsbHl7Vj1XPTB9aWYoNSZzZVswXSl0aHJvdyBzZVsxXTtyZXR1'@;
put 'cm57dmFsdWU6c2VbMF0/c2VbMV06dm9pZCAwLGRvbmU6ITB9fShbdGUsYWVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDt2YXIgST1EKDk3NzgpLEU9RCg5MDE3KSxrPUQoMzkwMCk7'@;
put 'QS5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPWZ1bmN0aW9uKEIsTixWKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgVztyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKHope3N3aXRjaCh6LmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsQi5wb3N0KCIvU0FTanNBcGkvYXV0'@;
put 'aC90b2tlbiIsVz17Y2xpZW50SWQ6Tixjb2RlOlZ9LHZvaWQgMCkudGhlbihmdW5jdGlvbihxKXt2YXIgUT1xLnJlc3VsdDtyZXR1cm57YWNjZXNzX3Rva2VuOlEuYWNjZXNzVG9rZW4scmVmcmVzaF90b2tlbjpRLnJlZnJlc2hUb2tlbn19KS5jYXRjaChmdW5jdGlvbihxKXt0aHJvdygwLEku'@;
put 'cHJlZml4TWVzc2FnZSkocSwoMCxFLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsay5TZXJ2ZXJUeXBlLlNhc2pzLCIvU0FTanNBcGkvYXV0aC90b2tlbiIsVyxOKSl9KV07Y2FzZSAxOnJldHVyblsy'@;
put 'LHouc2VudCgpXX19KX0pfX0sMzU2OTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoODc2NCkuQnVmZmVyLFU9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFYsWixXLHope3JldHVybiBuZXcoV3x8KFc9UHJvbWlzZSkpKGZ1bmN0aW9uKHEsUSl7ZnVuY3Rpb24g'@;
put 'dGUoZGUpe3RyeXtzZSh6Lm5leHQoZGUpKX1jYXRjaChsZSl7UShsZSl9fWZ1bmN0aW9uIGFlKGRlKXt0cnl7c2Uoei50aHJvdyhkZSkpfWNhdGNoKGxlKXtRKGxlKX19ZnVuY3Rpb24gc2UoZGUpe3ZhciBsZTtkZS5kb25lP3EoZGUudmFsdWUpOihsZT1kZS52YWx1ZSxsZSBpbnN0YW5jZW9m'@;
put 'IFc/bGU6bmV3IFcoZnVuY3Rpb24oY2Upe2NlKGxlKX0pKS50aGVuKHRlLGFlKX1zZSgoej16LmFwcGx5KFYsWnx8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVixaKXt2YXIgVyx6LHEsUSx0ZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYo'@;
put 'MSZxWzBdKXRocm93IHFbMV07cmV0dXJuIHFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gUT17bmV4dDphZSgwKSx0aHJvdzphZSgxKSxyZXR1cm46YWUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihRW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30p'@;
put 'LFE7ZnVuY3Rpb24gYWUoc2Upe3JldHVybiBmdW5jdGlvbihkZSl7cmV0dXJuIGZ1bmN0aW9uKGxlKXtpZihXKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO3RlOyl0cnl7aWYoVz0xLHomJihxPTImbGVbMF0/ei5yZXR1cm46bGVb'@;
put 'MF0/ei50aHJvd3x8KChxPXoucmV0dXJuKSYmcS5jYWxsKHopLDApOnoubmV4dCkmJiEocT1xLmNhbGwoeixsZVsxXSkpLmRvbmUpcmV0dXJuIHE7c3dpdGNoKHo9MCxxJiYobGU9WzImbGVbMF0scS52YWx1ZV0pLGxlWzBdKXtjYXNlIDA6Y2FzZSAxOnE9bGU7YnJlYWs7Y2FzZSA0OnJldHVy'@;
put 'biB0ZS5sYWJlbCsrLHt2YWx1ZTpsZVsxXSxkb25lOiExfTtjYXNlIDU6dGUubGFiZWwrKyx6PWxlWzFdLGxlPVswXTtjb250aW51ZTtjYXNlIDc6bGU9dGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChxPShxPXRlLnRyeXMpLmxlbmd0aD4wJiZxW3Eu'@;
put 'bGVuZ3RoLTFdKXx8NiE9PWxlWzBdJiYyIT09bGVbMF0pKXt0ZT0wO2NvbnRpbnVlfWlmKDM9PT1sZVswXSYmKCFxfHxsZVsxXT5xWzBdJiZsZVsxXTxxWzNdKSl7dGUubGFiZWw9bGVbMV07YnJlYWt9aWYoNj09PWxlWzBdJiZ0ZS5sYWJlbDxxWzFdKXt0ZS5sYWJlbD1xWzFdLHE9bGU7YnJl'@;
put 'YWt9aWYocSYmdGUubGFiZWw8cVsyXSl7dGUubGFiZWw9cVsyXSx0ZS5vcHMucHVzaChsZSk7YnJlYWt9cVsyXSYmdGUub3BzLnBvcCgpLHRlLnRyeXMucG9wKCk7Y29udGludWV9bGU9Wi5jYWxsKFYsdGUpfWNhdGNoKGNlKXtsZT1bNixjZV0sej0wfWZpbmFsbHl7Vz1xPTB9aWYoNSZsZVsw'@;
put 'XSl0aHJvdyBsZVsxXTtyZXR1cm57dmFsdWU6bGVbMF0/bGVbMV06dm9pZCAwLGRvbmU6ITB9fShbc2UsZGVdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO3ZhciBFPUQoMzkwMCksaz1E'@;
put 'KDk3NzgpLEI9RCgxMzk1KSxOPUQoOTAxNyk7QS5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9ZnVuY3Rpb24oVixaLFcseil7cmV0dXJuIFUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHEsUSx0ZSxhZSxzZTtyZXR1cm4gSSh0aGlzLGZ1bmN0aW9uKGRlKXtzd2l0Y2goZGUubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm4gcT12b2lkIDA9PT1QP2J0b2EoWisiOiIrVyk6UC5mcm9tKForIjoiK1cpLnRvU3RyaW5nKCJiYXNlNjQiKSxRPSIvU0FTTG9nb24vb2F1dGgvdG9rZW4iLHRlPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK3EsQWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sYWU9'@;
put 'bmV3IFVSTFNlYXJjaFBhcmFtcyh7Z3JhbnRfdHlwZToiYXV0aG9yaXphdGlvbl9jb2RlIixjb2RlOnp9KSxzZT1uZXcgVVJMU2VhcmNoUGFyYW1zKGFlKSxbNCxWLnBvc3QoUSxzZSx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsdGUpLnRoZW4oZnVuY3Rpb24o'@;
put 'bGUpe3JldHVybiBsZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihsZSl7dGhyb3cgbGUgaW5zdGFuY2VvZiBCLkNlcnRpZmljYXRlRXJyb3I/bGU6KDAsay5wcmVmaXhNZXNzYWdlKShsZSwoMCxOLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwi'@;
put 'Z2V0QWNjZXNzVG9rZW5Gb3JWaXlhIixFLlNlcnZlclR5cGUuU2FzVml5YSxRLGFlLHRlLFosVykpfSldO2Nhc2UgMTpyZXR1cm5bMixkZS5zZW50KCldfX0pfSl9fSw5MDE3Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1'@;
put 'ZTohMH0pLEEuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXhSZXNwb25zZT1BLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4PXZvaWQgMDt2YXIgUD1EKDM5MDApLFU9ZnVuY3Rpb24oSSl7cmV0dXJuIlJlc3BvbnNlIGZyb20gIi5jb25jYXQoST09PVAuU2VydmVyVHlwZS5TYXNWaXlhPyJW'@;
put 'aXlhIjoiU2FzanMiLCIgaXMgYmVsb3cuIil9O0EuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9ZnVuY3Rpb24oSSxFLGssQixOLFYsWixXKXt2YXIgej1mdW5jdGlvbihRKXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoUSxudWxsLDIpfSxxPVsiRXJyb3Igd2hpbGUgIi5jb25jYXQoSSwiIGZy'@;
put 'b20gIikuY29uY2F0KEIpLCJUaHJvd24gYnkgdGhlIEBzYXNqcy9hZGFwdGVyICIuY29uY2F0KEUsIiBmdW5jdGlvbi4iKV07cmV0dXJuIE4mJihxLnB1c2goIlBheWxvYWQ6IikscS5wdXNoKHooTikpKSxWJiYocS5wdXNoKCJIZWFkZXJzOiIpLHEucHVzaCh6KFYpKSksWiYmcS5wdXNoKCJD'@;
put 'bGllbnRJZDogIi5jb25jYXQoWikpLFcmJnEucHVzaCgiQ2xpZW50U2VjcmV0OiAiLmNvbmNhdChXKSkscS5wdXNoKCIiKSxxLnB1c2goIiIuY29uY2F0KFUoaykpKSxxLnB1c2goIiIpLHEuam9pbigiXG4iKX0sQS5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeFJlc3BvbnNlPWZ1bmN0aW9u'@;
put 'KEksRSl7cmV0dXJuIEkuc3BsaXQoIiIuY29uY2F0KFUoRSksIlxuIikpLnBvcCgpfX0sNzA0OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KSxVPUQoNTEwOCksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWixXLHoscSl7cmV0dXJuIG5ldyh6fHwo'@;
put 'ej1Qcm9taXNlKSkoZnVuY3Rpb24oUSx0ZSl7ZnVuY3Rpb24gYWUobGUpe3RyeXtkZShxLm5leHQobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBzZShsZSl7dHJ5e2RlKHEudGhyb3cobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBkZShsZSl7dmFyIGNlO2xlLmRvbmU/'@;
put 'UShsZS52YWx1ZSk6KGNlPWxlLnZhbHVlLGNlIGluc3RhbmNlb2Ygej9jZTpuZXcgeihmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKGFlLHNlKX1kZSgocT1xLmFwcGx5KFosV3x8W10pKS5uZXh0KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWixXKXt2YXIgeixx'@;
put 'LFEsdGUsYWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmUVswXSl0aHJvdyBRWzFdO3JldHVybiBRWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5'@;
put 'bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGRlKXtyZXR1cm4gZnVuY3Rpb24obGUpe3JldHVybiBmdW5jdGlvbihjZSl7aWYoeil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDth'@;
put 'ZTspdHJ5e2lmKHo9MSxxJiYoUT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoUT1xLnJldHVybikmJlEuY2FsbChxKSwwKTpxLm5leHQpJiYhKFE9US5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBRO3N3aXRjaChxPTAsUSYmKGNlPVsyJmNlWzBdLFEudmFsdWVdKSxjZVsw'@;
put 'XSl7Y2FzZSAwOmNhc2UgMTpRPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYWUubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1OmFlLmxhYmVsKysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPWFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgpO2NvbnRpbnVlO2Rl'@;
put 'ZmF1bHQ6aWYoISgoUT0oUT1hZS50cnlzKS5sZW5ndGg+MCYmUVtRLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7YWU9MDtjb250aW51ZX1pZigzPT09Y2VbMF0mJighUXx8Y2VbMV0+UVswXSYmY2VbMV08UVszXSkpe2FlLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVsw'@;
put 'XSYmYWUubGFiZWw8UVsxXSl7YWUubGFiZWw9UVsxXSxRPWNlO2JyZWFrfWlmKFEmJmFlLmxhYmVsPFFbMl0pe2FlLmxhYmVsPVFbMl0sYWUub3BzLnB1c2goY2UpO2JyZWFrfVFbMl0mJmFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbChaLGFlKX1jYXRjaChH'@;
put 'KXtjZT1bNixHXSxxPTB9ZmluYWxseXt6PVE9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZTohMH19KFtkZSxsZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmdldFRva2Vu'@;
put 'cz12b2lkIDA7dmFyIGs9RCg2Nzk5KSxCPUQoMzkwMCksTj1EKDM2NiksVj1EKDI0OSk7QS5nZXRUb2tlbnM9ZnVuY3Rpb24oWixXLHope3JldHVybiB2b2lkIDA9PT16JiYoej1CLlNlcnZlclR5cGUuU2FzVml5YSksSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgcSxRLHRl'@;
put 'LGFlLHNlLGxlLGNlO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oRyl7c3dpdGNoKEcubGFiZWwpe2Nhc2UgMDppZihxPVAubG9nZ2VyfHxVLHRlPVcucmVmcmVzaF90b2tlbixhZT1XLmNsaWVudCxzZT1XLnNlY3JldCwhKDAsay5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKFE9Vy5hY2Nlc3NfdG9r'@;
put 'ZW4pJiYhKDAsay5pc1JlZnJlc2hUb2tlbkV4cGlyaW5nKSh0ZSkpcmV0dXJuWzMsNV07aWYoKDAsay5oYXNUb2tlbkV4cGlyZWQpKHRlKSl0aHJvdyBxLmVycm9yKCJVbmFibGUgdG8gb2J0YWluIG5ldyBhY2Nlc3MgdG9rZW4uIFlvdXIgcmVmcmVzaCB0b2tlbiBoYXMgZXhwaXJlZC4iKSxu'@;
put 'ZXcgRXJyb3IoIlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiIpO3JldHVybiBxLmluZm8oIlJlZnJlc2hpbmcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2Vucy4iKSx6IT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/WzMsMl06'@;
put 'WzQsKDAsTi5yZWZyZXNoVG9rZW5zRm9yVml5YSkoWixhZSxzZSx0ZSldO2Nhc2UgMTpyZXR1cm4gY2U9Ry5zZW50KCksWzMsNF07Y2FzZSAyOnJldHVybls0LCgwLFYucmVmcmVzaFRva2Vuc0ZvclNhc2pzKShaLHRlKV07Y2FzZSAzOmNlPUcuc2VudCgpLEcubGFiZWw9NDtjYXNlIDQ6UT0o'@;
put 'bGU9Y2UpLmFjY2Vzc190b2tlbix0ZT1sZS5yZWZyZXNoX3Rva2VuLEcubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzIse2FjY2Vzc190b2tlbjpRLHJlZnJlc2hfdG9rZW46dGUsY2xpZW50OmFlLHNlY3JldDpzZX1dfX0pfSl9fSwxNTI3OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IFA9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspO3ZhciBOPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxrKTtOJiYhKCJnZXQiaW4gTj8hRS5fX2VzTW9kdWxlOk4ud3JpdGFibGV8'@;
put 'fE4uY29uZmlndXJhYmxlKXx8KE49e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVba119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksQixOKX06ZnVuY3Rpb24oSSxFLGssQil7dm9pZCAwPT09QiYmKEI9ayksSVtCXT1FW2tdfSksVT10aGlzJiZ0aGlzLl9fZXhwb3J0'@;
put 'U3Rhcnx8ZnVuY3Rpb24oSSxFKXtmb3IodmFyIGsgaW4gSSkiZGVmYXVsdCI9PT1rfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxrKXx8UChFLEksayl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxVKEQoMjg1MSksQSks'@;
put 'VShEKDkwOTcpLEEpLFUoRCg5MTY2KSxBKX0sOTA5NzoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAsQS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1mdW5j'@;
put 'dGlvbihEKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9hdXRob3JpemVbXiJdKikuKj4vZ20udGVzdChEKX19LDkxNjY6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuaXNMb2dJblJl'@;
put 'cXVpcmVkPXZvaWQgMCxBLmlzTG9nSW5SZXF1aXJlZD1mdW5jdGlvbihEKXtyZXR1cm4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9naW4pW14iXSopLio+L2dtLnRlc3QoRCl9fSw1NDE4OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2F3YWl0'@;
put 'ZXJ8fGZ1bmN0aW9uKGssQixOLFYpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFosVyl7ZnVuY3Rpb24geih0ZSl7dHJ5e1EoVi5uZXh0KHRlKSl9Y2F0Y2goYWUpe1coYWUpfX1mdW5jdGlvbiBxKHRlKXt0cnl7UShWLnRocm93KHRlKSl9Y2F0Y2goYWUpe1coYWUpfX1m'@;
put 'dW5jdGlvbiBRKHRlKXt2YXIgYWU7dGUuZG9uZT9aKHRlLnZhbHVlKTooYWU9dGUudmFsdWUsYWUgaW5zdGFuY2VvZiBOP2FlOm5ldyBOKGZ1bmN0aW9uKHNlKXtzZShhZSl9KSkudGhlbih6LHEpfVEoKFY9Vi5hcHBseShrLEJ8fFtdKSkubmV4dCgpKX0pfSxVPXRoaXMmJnRoaXMuX19nZW5l'@;
put 'cmF0b3J8fGZ1bmN0aW9uKGssQil7dmFyIE4sVixaLFcsej17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZaWzBdKXRocm93IFpbMV07cmV0dXJuIFpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVz17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9'@;
put 'PXR5cGVvZiBTeW1ib2wmJihXW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFc7ZnVuY3Rpb24gcShRKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihhZSl7aWYoTil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBl'@;
put 'eGVjdXRpbmcuIik7Zm9yKDt6Oyl0cnl7aWYoTj0xLFYmJihaPTImYWVbMF0/Vi5yZXR1cm46YWVbMF0/Vi50aHJvd3x8KChaPVYucmV0dXJuKSYmWi5jYWxsKFYpLDApOlYubmV4dCkmJiEoWj1aLmNhbGwoVixhZVsxXSkpLmRvbmUpcmV0dXJuIFo7c3dpdGNoKFY9MCxaJiYoYWU9WzImYWVb'@;
put 'MF0sWi52YWx1ZV0pLGFlWzBdKXtjYXNlIDA6Y2FzZSAxOlo9YWU7YnJlYWs7Y2FzZSA0OnJldHVybiB6LmxhYmVsKysse3ZhbHVlOmFlWzFdLGRvbmU6ITF9O2Nhc2UgNTp6LmxhYmVsKyssVj1hZVsxXSxhZT1bMF07Y29udGludWU7Y2FzZSA3OmFlPXoub3BzLnBvcCgpLHoudHJ5cy5wb3Ao'@;
put 'KTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKFo9KFo9ei50cnlzKS5sZW5ndGg+MCYmWltaLmxlbmd0aC0xXSl8fDYhPT1hZVswXSYmMiE9PWFlWzBdKSl7ej0wO2NvbnRpbnVlfWlmKDM9PT1hZVswXSYmKCFafHxhZVsxXT5aWzBdJiZhZVsxXTxaWzNdKSl7ei5sYWJlbD1hZVsxXTticmVha31p'@;
put 'Zig2PT09YWVbMF0mJnoubGFiZWw8WlsxXSl7ei5sYWJlbD1aWzFdLFo9YWU7YnJlYWt9aWYoWiYmei5sYWJlbDxaWzJdKXt6LmxhYmVsPVpbMl0sei5vcHMucHVzaChhZSk7YnJlYWt9WlsyXSYmei5vcHMucG9wKCksei50cnlzLnBvcCgpO2NvbnRpbnVlfWFlPUIuY2FsbChrLHopfWNhdGNo'@;
put 'KHNlKXthZT1bNixzZV0sVj0wfWZpbmFsbHl7Tj1aPTB9aWYoNSZhZVswXSl0aHJvdyBhZVsxXTtyZXR1cm57dmFsdWU6YWVbMF0/YWVbMV06dm9pZCAwLGRvbmU6ITB9fShbUSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLm9wZW5X'@;
put 'ZWJQYWdlPXZvaWQgMDt2YXIgST1EKDEyMTApLEU9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtBLm9wZW5XZWJQYWdlPWZ1bmN0aW9uKGssQixOLFYpe3JldHVybiB2b2lkIDA9PT1CJiYoQj0iIiksdm9pZCAwPT09TiYmKE49RSksUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIg'@;
put 'WixXLHoscSxRO3JldHVybiBVKHRoaXMsZnVuY3Rpb24odGUpe3N3aXRjaCh0ZS5sYWJlbCl7Y2FzZSAwOnJldHVybiBaPU4ud2lkdGgsVz1OLmhlaWdodCx6PXNjcmVlbi53aWR0aC8yLVovMixxPXNjcmVlbi5oZWlnaHQvMi1XLzIsKFE9d2luZG93Lm9wZW4oayxCLCJ0b29sYmFyPTAsbG9j'@;
put 'YXRpb249MCxtZW51YmFyPTAsd2lkdGg9Ii5jb25jYXQoWiwiLGhlaWdodD0iKS5jb25jYXQoVywiLGxlZnQ9IikuY29uY2F0KHosIix0b3A9IikuY29uY2F0KHEpKSk/WzMsMl06WzQsKFY/P0kub3BlbkxvZ2luUHJvbXB0KSgpXTtjYXNlIDE6cmV0dXJuWzIsdGUuc2VudCgpP3dpbmRvdy5v'@;
put 'cGVuKGssQiwidG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSIuY29uY2F0KFosIixoZWlnaHQ9IikuY29uY2F0KFcsIixsZWZ0PSIpLmNvbmNhdCh6LCIsdG9wPSIpLmNvbmNhdChxKSk6bnVsbF07Y2FzZSAyOnJldHVyblsyLFFdfX0pfSl9fSwyNDk6ZnVuY3Rpb24odyxB'@;
put 'LEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oQixOLFYsWil7cmV0dXJuIG5ldyhWfHwoVj1Qcm9taXNlKSkoZnVuY3Rpb24oVyx6KXtmdW5jdGlvbiBxKGFlKXt0cnl7dGUoWi5uZXh0KGFlKSl9Y2F0Y2goc2Upe3ooc2UpfX1mdW5jdGlvbiBR'@;
put 'KGFlKXt0cnl7dGUoWi50aHJvdyhhZSkpfWNhdGNoKHNlKXt6KHNlKX19ZnVuY3Rpb24gdGUoYWUpe3ZhciBzZTthZS5kb25lP1coYWUudmFsdWUpOihzZT1hZS52YWx1ZSxzZSBpbnN0YW5jZW9mIFY/c2U6bmV3IFYoZnVuY3Rpb24oZGUpe2RlKHNlKX0pKS50aGVuKHEsUSl9dGUoKFo9Wi5h'@;
put 'cHBseShCLE58fFtdKSkubmV4dCgpKX0pfSxVPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEIsTil7dmFyIFYsWixXLHoscT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZXWzBdKXRocm93IFdbMV07cmV0dXJuIFdbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gej17'@;
put 'bmV4dDpRKDApLHRocm93OlEoMSkscmV0dXJuOlEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJih6W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHo7ZnVuY3Rpb24gUSh0ZSl7cmV0dXJuIGZ1bmN0aW9uKGFlKXtyZXR1cm4gZnVuY3Rpb24oc2Upe2lm'@;
put 'KFYpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7cTspdHJ5e2lmKFY9MSxaJiYoVz0yJnNlWzBdP1oucmV0dXJuOnNlWzBdP1oudGhyb3d8fCgoVz1aLnJldHVybikmJlcuY2FsbChaKSwwKTpaLm5leHQpJiYhKFc9Vy5jYWxsKFos'@;
put 'c2VbMV0pKS5kb25lKXJldHVybiBXO3N3aXRjaChaPTAsVyYmKHNlPVsyJnNlWzBdLFcudmFsdWVdKSxzZVswXSl7Y2FzZSAwOmNhc2UgMTpXPXNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gcS5sYWJlbCsrLHt2YWx1ZTpzZVsxXSxkb25lOiExfTtjYXNlIDU6cS5sYWJlbCsrLFo9c2VbMV0sc2U9'@;
put 'WzBdO2NvbnRpbnVlO2Nhc2UgNzpzZT1xLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChXPShXPXEudHJ5cykubGVuZ3RoPjAmJldbVy5sZW5ndGgtMV0pfHw2IT09c2VbMF0mJjIhPT1zZVswXSkpe3E9MDtjb250aW51ZX1pZigzPT09c2VbMF0mJighV3x8'@;
put 'c2VbMV0+V1swXSYmc2VbMV08V1szXSkpe3EubGFiZWw9c2VbMV07YnJlYWt9aWYoNj09PXNlWzBdJiZxLmxhYmVsPFdbMV0pe3EubGFiZWw9V1sxXSxXPXNlO2JyZWFrfWlmKFcmJnEubGFiZWw8V1syXSl7cS5sYWJlbD1XWzJdLHEub3BzLnB1c2goc2UpO2JyZWFrfVdbMl0mJnEub3BzLnBv'@;
put 'cCgpLHEudHJ5cy5wb3AoKTtjb250aW51ZX1zZT1OLmNhbGwoQixxKX1jYXRjaChkZSl7c2U9WzYsZGVdLFo9MH1maW5hbGx5e1Y9Vz0wfWlmKDUmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJue3ZhbHVlOnNlWzBdP3NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3RlLGFlXSl9fX07T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEucmVmcmVzaFRva2Vuc0ZvclNhc2pzPXZvaWQgMDt2YXIgST1EKDk3NzgpLEU9RCg5MDE3KSxrPUQoMzkwMCk7QS5yZWZyZXNoVG9rZW5zRm9yU2FzanM9ZnVuY3Rpb24oQixOKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2'@;
put 'b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsQi5wb3N0KCIvU0FTanNBcGkvYXV0aC9yZWZyZXNoIix2b2lkIDAsdm9pZCAwLHZvaWQgMCx7QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrTn0pLnRoZW4oZnVu'@;
put 'Y3Rpb24oeil7dmFyIHE9ei5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpxLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46cS5yZWZyZXNoVG9rZW59fSkuY2F0Y2goZnVuY3Rpb24oeil7dGhyb3coMCxJLnByZWZpeE1lc3NhZ2UpKHosKDAsRS5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZp'@;
put 'eCkoInJlZnJlc2hpbmcgdG9rZW5zIiwicmVmcmVzaFRva2Vuc0ZvclNhc2pzIixrLlNlcnZlclR5cGUuU2FzanMsIi9TQVNqc0FwaS9hdXRoL3JlZnJlc2giKSl9KV07Y2FzZSAxOnJldHVyblsyLFcuc2VudCgpXX19KX0pfX0sMzY2OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IFA9RCg4NzY0KS5CdWZmZXIsVT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oWixXLHoscSl7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNlKSkoZnVuY3Rpb24oUSx0ZSl7ZnVuY3Rpb24gYWUobGUpe3RyeXtkZShxLm5leHQobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBz'@;
put 'ZShsZSl7dHJ5e2RlKHEudGhyb3cobGUpKX1jYXRjaChjZSl7dGUoY2UpfX1mdW5jdGlvbiBkZShsZSl7dmFyIGNlO2xlLmRvbmU/UShsZS52YWx1ZSk6KGNlPWxlLnZhbHVlLGNlIGluc3RhbmNlb2Ygej9jZTpuZXcgeihmdW5jdGlvbihHKXtHKGNlKX0pKS50aGVuKGFlLHNlKX1kZSgocT1x'@;
put 'LmFwcGx5KFosV3x8W10pKS5uZXh0KCkpfSl9LEk9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oWixXKXt2YXIgeixxLFEsdGUsYWU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmUVswXSl0aHJvdyBRWzFdO3JldHVybiBRWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJu'@;
put 'IHRlPXtuZXh0OnNlKDApLHRocm93OnNlKDEpLHJldHVybjpzZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHRlO2Z1bmN0aW9uIHNlKGRlKXtyZXR1cm4gZnVuY3Rpb24obGUpe3JldHVybiBmdW5j'@;
put 'dGlvbihjZSl7aWYoeil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDthZTspdHJ5e2lmKHo9MSxxJiYoUT0yJmNlWzBdP3EucmV0dXJuOmNlWzBdP3EudGhyb3d8fCgoUT1xLnJldHVybikmJlEuY2FsbChxKSwwKTpxLm5leHQpJiYh'@;
put 'KFE9US5jYWxsKHEsY2VbMV0pKS5kb25lKXJldHVybiBRO3N3aXRjaChxPTAsUSYmKGNlPVsyJmNlWzBdLFEudmFsdWVdKSxjZVswXSl7Y2FzZSAwOmNhc2UgMTpRPWNlO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYWUubGFiZWwrKyx7dmFsdWU6Y2VbMV0sZG9uZTohMX07Y2FzZSA1OmFlLmxhYmVs'@;
put 'KysscT1jZVsxXSxjZT1bMF07Y29udGludWU7Y2FzZSA3OmNlPWFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoUT0oUT1hZS50cnlzKS5sZW5ndGg+MCYmUVtRLmxlbmd0aC0xXSl8fDYhPT1jZVswXSYmMiE9PWNlWzBdKSl7YWU9MDtjb250aW51ZX1p'@;
put 'ZigzPT09Y2VbMF0mJighUXx8Y2VbMV0+UVswXSYmY2VbMV08UVszXSkpe2FlLmxhYmVsPWNlWzFdO2JyZWFrfWlmKDY9PT1jZVswXSYmYWUubGFiZWw8UVsxXSl7YWUubGFiZWw9UVsxXSxRPWNlO2JyZWFrfWlmKFEmJmFlLmxhYmVsPFFbMl0pe2FlLmxhYmVsPVFbMl0sYWUub3BzLnB1c2go'@;
put 'Y2UpO2JyZWFrfVFbMl0mJmFlLm9wcy5wb3AoKSxhZS50cnlzLnBvcCgpO2NvbnRpbnVlfWNlPVcuY2FsbChaLGFlKX1jYXRjaChHKXtjZT1bNixHXSxxPTB9ZmluYWxseXt6PVE9MH1pZig1JmNlWzBdKXRocm93IGNlWzFdO3JldHVybnt2YWx1ZTpjZVswXT9jZVsxXTp2b2lkIDAsZG9uZToh'@;
put 'MH19KFtkZSxsZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnJlZnJlc2hUb2tlbnNGb3JWaXlhPXZvaWQgMDt2YXIgRT1EKDM5MDApLGs9RCg5Nzc4KSxCPUQoNjIzMCksTj1EKDU5MjgpLFY9RCg5MDE3KTtBLnJlZnJlc2hUb2tlbnNG'@;
put 'b3JWaXlhPWZ1bmN0aW9uKFosVyx6LHEpe3JldHVybiBVKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBRLHRlLGFlLHNlO3JldHVybiBJKHRoaXMsZnVuY3Rpb24oZGUpe3N3aXRjaChkZS5sYWJlbCl7Y2FzZSAwOmlmKCEoMCxOLmlzTm9kZSkoKSl0aHJvdyBuZXcgRXJyb3Io'@;
put 'Ik1ldGhvZCAncmVmcmVzaFRva2Vuc0ZvclZpeWEnIGNhbiBvbmx5IGJlIHVzZWQgYnkgTm9kZS4iKTtyZXR1cm4gUT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIix0ZT12b2lkIDA9PT1QP2J0b2EoVysiOiIreik6UC5mcm9tKFcrIjoiK3opLnRvU3RyaW5nKCJiYXNlNjQiKSxhZT17QXV0aG9y'@;
put 'aXphdGlvbjoiQmFzaWMgIit0ZX0sKHNlPW5ldyBCKS5hcHBlbmQoImdyYW50X3R5cGUiLCJyZWZyZXNoX3Rva2VuIiksc2UuYXBwZW5kKCJyZWZyZXNoX3Rva2VuIixxKSxbNCxaLnBvc3QoUSxzZSx2b2lkIDAsIm11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PSIrc2UuX2JvdW5kYXJ5'@;
put 'LGFlKS50aGVuKGZ1bmN0aW9uKGxlKXtyZXR1cm4gbGUucmVzdWx0fSkuY2F0Y2goZnVuY3Rpb24obGUpe3Rocm93KDAsay5wcmVmaXhNZXNzYWdlKShsZSwoMCxWLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4KSgicmVmcmVzaGluZyB0b2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yVml5YSIs'@;
put 'RS5TZXJ2ZXJUeXBlLlNhc1ZpeWEsUSxzZSxhZSxXLHopKX0pXTtjYXNlIDE6cmV0dXJuWzIsZGUuc2VudCgpXX19KX0pfX0sNDU4MjpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihFLGssQixOKXtyZXR1cm4gbmV3KEJ8'@;
put 'fChCPVByb21pc2UpKShmdW5jdGlvbihWLFope2Z1bmN0aW9uIFcoUSl7dHJ5e3EoTi5uZXh0KFEpKX1jYXRjaCh0ZSl7Wih0ZSl9fWZ1bmN0aW9uIHooUSl7dHJ5e3EoTi50aHJvdyhRKSl9Y2F0Y2godGUpe1oodGUpfX1mdW5jdGlvbiBxKFEpe3ZhciB0ZTtRLmRvbmU/VihRLnZhbHVlKToo'@;
put 'dGU9US52YWx1ZSx0ZSBpbnN0YW5jZW9mIEI/dGU6bmV3IEIoZnVuY3Rpb24oYWUpe2FlKHRlKX0pKS50aGVuKFcseil9cSgoTj1OLmFwcGx5KEUsa3x8W10pKS5uZXh0KCkpfSl9LFU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oRSxrKXt2YXIgQixOLFYsWixXPXtsYWJlbDow'@;
put 'LHNlbnQ6ZnVuY3Rpb24oKXtpZigxJlZbMF0pdGhyb3cgVlsxXTtyZXR1cm4gVlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBaPXtuZXh0OnooMCksdGhyb3c6eigxKSxyZXR1cm46eigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFpbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzfSksWjtmdW5jdGlvbiB6KHEpe3JldHVybiBmdW5jdGlvbihRKXtyZXR1cm4gZnVuY3Rpb24odGUpe2lmKEIpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7VzspdHJ5e2lmKEI9MSxOJiYoVj0yJnRlWzBd'@;
put 'P04ucmV0dXJuOnRlWzBdP04udGhyb3d8fCgoVj1OLnJldHVybikmJlYuY2FsbChOKSwwKTpOLm5leHQpJiYhKFY9Vi5jYWxsKE4sdGVbMV0pKS5kb25lKXJldHVybiBWO3N3aXRjaChOPTAsViYmKHRlPVsyJnRlWzBdLFYudmFsdWVdKSx0ZVswXSl7Y2FzZSAwOmNhc2UgMTpWPXRlO2JyZWFr'@;
put 'O2Nhc2UgNDpyZXR1cm4gVy5sYWJlbCsrLHt2YWx1ZTp0ZVsxXSxkb25lOiExfTtjYXNlIDU6Vy5sYWJlbCsrLE49dGVbMV0sdGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzp0ZT1XLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChWPShWPVcudHJ5cykubGVuZ3Ro'@;
put 'PjAmJlZbVi5sZW5ndGgtMV0pfHw2IT09dGVbMF0mJjIhPT10ZVswXSkpe1c9MDtjb250aW51ZX1pZigzPT09dGVbMF0mJighVnx8dGVbMV0+VlswXSYmdGVbMV08VlszXSkpe1cubGFiZWw9dGVbMV07YnJlYWt9aWYoNj09PXRlWzBdJiZXLmxhYmVsPFZbMV0pe1cubGFiZWw9VlsxXSxWPXRl'@;
put 'O2JyZWFrfWlmKFYmJlcubGFiZWw8VlsyXSl7Vy5sYWJlbD1WWzJdLFcub3BzLnB1c2godGUpO2JyZWFrfVZbMl0mJlcub3BzLnBvcCgpLFcudHJ5cy5wb3AoKTtjb250aW51ZX10ZT1rLmNhbGwoRSxXKX1jYXRjaChhZSl7dGU9WzYsYWVdLE49MH1maW5hbGx5e0I9Vj0wfWlmKDUmdGVbMF0p'@;
put 'dGhyb3cgdGVbMV07cmV0dXJue3ZhbHVlOnRlWzBdP3RlWzFdOnZvaWQgMCxkb25lOiEwfX0oW3EsUV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnZlcmlmeVNhczlMb2dpbj12b2lkIDA7dmFyIEk9RCg1OTI4KTtBLnZlcmlmeVNhczlM'@;
put 'b2dpbj1mdW5jdGlvbihFKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgayxCLE47cmV0dXJuIFUodGhpcyxmdW5jdGlvbihWKXtzd2l0Y2goVi5sYWJlbCl7Y2FzZSAwOms9ITEsQj1uZXcgRGF0ZSxOPTAsVi5sYWJlbD0xO2Nhc2UgMTpyZXR1cm5bNCwoMCxJ'@;
put 'LmRlbGF5KSgxZTMpXTtjYXNlIDI6aWYoVi5zZW50KCksRS5jbG9zZWQpcmV0dXJuWzMsNF07az1FLndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpJiZFLndpbmRvdy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dC5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIp'@;
put 'LE49KChuZXcgRGF0ZSkudmFsdWVPZigpLUIudmFsdWVPZigpKS8xZTMsVi5sYWJlbD0zO2Nhc2UgMzppZighayYmTjwzMDApcmV0dXJuWzMsMV07Vi5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMix7aXNMb2dnZWRJbjprfV19fSl9KX19LDY1NDc6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0'@;
put 'Ijt2YXIgUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxrLEIsTil7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oVixaKXtmdW5jdGlvbiBXKFEpe3RyeXtxKE4ubmV4dChRKSl9Y2F0Y2godGUpe1oodGUpfX1mdW5jdGlvbiB6KFEpe3RyeXtxKE4udGhyb3co'@;
put 'USkpfWNhdGNoKHRlKXtaKHRlKX19ZnVuY3Rpb24gcShRKXt2YXIgdGU7US5kb25lP1YoUS52YWx1ZSk6KHRlPVEudmFsdWUsdGUgaW5zdGFuY2VvZiBCP3RlOm5ldyBCKGZ1bmN0aW9uKGFlKXthZSh0ZSl9KSkudGhlbihXLHopfXEoKE49Ti5hcHBseShFLGt8fFtdKSkubmV4dCgpKX0pfSxV'@;
put 'PXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsayl7dmFyIEIsTixWLFosVz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWj17bmV4dDp6KDApLHRocm93OnooMSkscmV0dXJu'@;
put 'OnooMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihaW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFo7ZnVuY3Rpb24geihxKXtyZXR1cm4gZnVuY3Rpb24oUSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihCKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVy'@;
put 'YXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1c7KXRyeXtpZihCPTEsTiYmKFY9MiZ0ZVswXT9OLnJldHVybjp0ZVswXT9OLnRocm93fHwoKFY9Ti5yZXR1cm4pJiZWLmNhbGwoTiksMCk6Ti5uZXh0KSYmIShWPVYuY2FsbChOLHRlWzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2go'@;
put 'Tj0wLFYmJih0ZT1bMiZ0ZVswXSxWLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFcubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlcubGFiZWwrKyxOPXRlWzFdLHRlPVswXTtjb250aW51ZTtjYXNlIDc6dGU9Vy5vcHMu'@;
put 'cG9wKCksVy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1XLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtXPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIVZ8fHRlWzFdPlZbMF0mJnRlWzFdPFZbM10pKXtXLmxh'@;
put 'YmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmVy5sYWJlbDxWWzFdKXtXLmxhYmVsPVZbMV0sVj10ZTticmVha31pZihWJiZXLmxhYmVsPFZbMl0pe1cubGFiZWw9VlsyXSxXLm9wcy5wdXNoKHRlKTticmVha31WWzJdJiZXLm9wcy5wb3AoKSxXLnRyeXMucG9wKCk7Y29udGludWV9dGU9'@;
put 'ay5jYWxsKEUsVyl9Y2F0Y2goYWUpe3RlPVs2LGFlXSxOPTB9ZmluYWxseXtCPVY9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLFFdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3Zh'@;
put 'bHVlOiEwfSksQS5pc0xvZ2dlZEluU0FTVklZQT1BLnZlcmlmeVNhc1ZpeWFMb2dpbj12b2lkIDA7dmFyIEk9RCg1OTI4KTtBLnZlcmlmeVNhc1ZpeWFMb2dpbj1mdW5jdGlvbihFKXt2YXIgayxCO3JldHVybiBQKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBOLFYsWixXO3Jl'@;
put 'dHVybiBVKHRoaXMsZnVuY3Rpb24oeil7c3dpdGNoKHoubGFiZWwpe2Nhc2UgMDpOPSExLFY9bmV3IERhdGUsWj0wLHoubGFiZWw9MTtjYXNlIDE6cmV0dXJuWzQsKDAsSS5kZWxheSkoMWUzKV07Y2FzZSAyOmlmKHouc2VudCgpLEUuY2xvc2VkKXJldHVyblszLDRdO049KDAsQS5pc0xvZ2dl'@;
put 'ZEluU0FTVklZQSkoKSxaPSgobmV3IERhdGUpLnZhbHVlT2YoKS1WLnZhbHVlT2YoKSkvMWUzLHoubGFiZWw9MztjYXNlIDM6aWYoIU4mJlo8MzAwKXJldHVyblszLDFdO3oubGFiZWw9NDtjYXNlIDQ6Vz0hMSxWPW5ldyBEYXRlLHoubGFiZWw9NTtjYXNlIDU6cmV0dXJuWzQsKDAsSS5kZWxh'@;
put 'eSkoMWUzKV07Y2FzZSA2OmlmKHouc2VudCgpLEUuY2xvc2VkKXJldHVyblszLDhdO1c9RS53aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygiU0FTTG9nb24iKXx8KG51bGw9PT0oQj1udWxsPT09KGs9RS53aW5kb3cuZG9jdW1lbnQuYm9keSl8fHZvaWQgMD09PWs/dm9pZCAwOmsuaW5u'@;
put 'ZXJUZXh0KXx8dm9pZCAwPT09Qj92b2lkIDA6Qi5pbmNsdWRlcygiWW91IGhhdmUgc2lnbmVkIGluLiIpKSxaPSgobmV3IERhdGUpLnZhbHVlT2YoKS1WLnZhbHVlT2YoKSkvMWUzLHoubGFiZWw9NztjYXNlIDc6aWYoIVcmJlo8MzAwKXJldHVyblszLDVdO3oubGFiZWw9ODtjYXNlIDg6cmV0'@;
put 'dXJuWzIse2lzTG9nZ2VkSW46TiYmV31dfX0pfSl9LEEuaXNMb2dnZWRJblNBU1ZJWUE9ZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJDdXJyZW50LVVzZXIiKSYmZG9jdW1lbnQuY29va2llLmluY2x1ZGVzKCJ1c2VySWQiKX19LDQwMzc6KHcsQSxEKT0+eyJ1'@;
put 'c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZW5lcmF0ZUZpbGVVcGxvYWRGb3JtPXZvaWQgMDt2YXIgUD1EKDI0MDIpLFU9RCg1OTI4KTtBLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09ZnVuY3Rpb24oSSxFKXtmb3IodmFyIGsg'@;
put 'aW4gRSlpZihBcnJheS5pc0FycmF5KEVba10pKXt2YXIgQj1rLE49KDAsUC5jb252ZXJ0VG9DU1YpKEUsayk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2'@;
put 'NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLFUuaXNOb2RlKSgpKUkuYXBwZW5kKEIsTix7ZmlsZW5hbWU6IiIuY29uY2F0KEIsIi5jc3YiKSxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7dmFyIFY9bmV3IEJsb2IoW05dLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7SS5hcHBl'@;
put 'bmQoQixWLCIiLmNvbmNhdChCLCIuY3N2IikpfX1yZXR1cm4gSX19LDIxNzA6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT12b2lkIDA7dmFyIFA9RCgyNDAyKSxV'@;
put 'PUQoNDc5OSk7QS5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybT1mdW5jdGlvbihJLEUpe3ZhciBrPVtdLEI9e30sTj0wO2Zvcih2YXIgViBpbiBFKXtOKyssKDAsUC5pc0Zvcm1hdHNUYWJsZSkoVil8fGsucHVzaChWKTt2YXIgWj0oMCxQLmNvbnZlcnRUb0NTVikoRSxWKTtpZigiRVJST1I6IExB'@;
put 'UkdFIFNUUklORyBMRU5HVEgiPT09Wil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Wi5sZW5ndGg+MTZlMz8oMCxVLnNwbGl0Q2h1bmtzKShaKS5tYXAoZnVuY3Rpb24oVyl7SS5hcHBlbmQo'@;
put 'InNhc2pzIi5jb25jYXQoTiwiZGF0YSIpLFcpfSk6Qlsic2FzanMiLmNvbmNhdChOLCJkYXRhIildPVp9cmV0dXJuIEIuc2FzanNfdGFibGVzPWsuam9pbigiICIpLHtmb3JtRGF0YTpJLHJlcXVlc3RQYXJhbXM6Qn19fSwzNjA3OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9'@;
put 'dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEUsayxCLE4pe3ZvaWQgMD09PU4mJihOPUIpO3ZhciBWPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoayxCKTtWJiYhKCJnZXQiaW4gVj8hay5fX2VzTW9kdWxlOlYud3JpdGFibGV8fFYu'@;
put 'Y29uZmlndXJhYmxlKXx8KFY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGtbQl19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEUsTixWKX06ZnVuY3Rpb24oRSxrLEIsTil7dm9pZCAwPT09TiYmKE49QiksRVtOXT1rW0JdfSksVT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rh'@;
put 'cnx8ZnVuY3Rpb24oRSxrKXtmb3IodmFyIEIgaW4gRSkiZGVmYXVsdCI9PT1CfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoayxCKXx8UChrLEUsQil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgST1EKDU5NTYpO1Uo'@;
put 'RCgxMjMwKSxBKSxVKEQoMTM5NSksQSksVShEKDk4MjEpLEEpLFUoRCg4MzA2KSxBKSxVKEQoMzQ2NyksQSksVShEKDM2MDIpLEEpLEEuZGVmYXVsdD1JLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUD1m'@;
put 'dW5jdGlvbihWLFope3JldHVybihQPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihXLHope1cuX19wcm90b19fPXp9fHxmdW5jdGlvbihXLHope2Zvcih2YXIgcSBpbiB6KU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy'@;
put 'dHkuY2FsbCh6LHEpJiYoV1txXT16W3FdKX0pKFYsWil9LGZ1bmN0aW9uKFYsWil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFomJm51bGwhPT1aKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoWikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxs'@;
put 'Iik7ZnVuY3Rpb24gVygpe3RoaXMuY29uc3RydWN0b3I9Vn1QKFYsWiksVi5wcm90b3R5cGU9bnVsbD09PVo/T2JqZWN0LmNyZWF0ZShaKTooVy5wcm90b3R5cGU9Wi5wcm90b3R5cGUsbmV3IFcpfSksST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVixaLFcseil7cmV0dXJuIG5l'@;
put 'dyhXfHwoVz1Qcm9taXNlKSkoZnVuY3Rpb24ocSxRKXtmdW5jdGlvbiB0ZShkZSl7dHJ5e3NlKHoubmV4dChkZSkpfWNhdGNoKGxlKXtRKGxlKX19ZnVuY3Rpb24gYWUoZGUpe3RyeXtzZSh6LnRocm93KGRlKSl9Y2F0Y2gobGUpe1EobGUpfX1mdW5jdGlvbiBzZShkZSl7dmFyIGxlO2RlLmRv'@;
put 'bmU/cShkZS52YWx1ZSk6KGxlPWRlLnZhbHVlLGxlIGluc3RhbmNlb2YgVz9sZTpuZXcgVyhmdW5jdGlvbihjZSl7Y2UobGUpfSkpLnRoZW4odGUsYWUpfXNlKCh6PXouYXBwbHkoVixafHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihWLFope3Zh'@;
put 'ciBXLHoscSxRLHRlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnFbMF0pdGhyb3cgcVsxXTtyZXR1cm4gcVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBRPXtuZXh0OmFlKDApLHRocm93OmFlKDEpLHJldHVybjphZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKFFb'@;
put 'U3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksUTtmdW5jdGlvbiBhZShzZSl7cmV0dXJuIGZ1bmN0aW9uKGRlKXtyZXR1cm4gZnVuY3Rpb24obGUpe2lmKFcpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7'@;
put 'dGU7KXRyeXtpZihXPTEseiYmKHE9MiZsZVswXT96LnJldHVybjpsZVswXT96LnRocm93fHwoKHE9ei5yZXR1cm4pJiZxLmNhbGwoeiksMCk6ei5uZXh0KSYmIShxPXEuY2FsbCh6LGxlWzFdKSkuZG9uZSlyZXR1cm4gcTtzd2l0Y2goej0wLHEmJihsZT1bMiZsZVswXSxxLnZhbHVlXSksbGVb'@;
put 'MF0pe2Nhc2UgMDpjYXNlIDE6cT1sZTticmVhaztjYXNlIDQ6cmV0dXJuIHRlLmxhYmVsKysse3ZhbHVlOmxlWzFdLGRvbmU6ITF9O2Nhc2UgNTp0ZS5sYWJlbCsrLHo9bGVbMV0sbGU9WzBdO2NvbnRpbnVlO2Nhc2UgNzpsZT10ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZTtk'@;
put 'ZWZhdWx0OmlmKCEoKHE9KHE9dGUudHJ5cykubGVuZ3RoPjAmJnFbcS5sZW5ndGgtMV0pfHw2IT09bGVbMF0mJjIhPT1sZVswXSkpe3RlPTA7Y29udGludWV9aWYoMz09PWxlWzBdJiYoIXF8fGxlWzFdPnFbMF0mJmxlWzFdPHFbM10pKXt0ZS5sYWJlbD1sZVsxXTticmVha31pZig2PT09bGVb'@;
put 'MF0mJnRlLmxhYmVsPHFbMV0pe3RlLmxhYmVsPXFbMV0scT1sZTticmVha31pZihxJiZ0ZS5sYWJlbDxxWzJdKXt0ZS5sYWJlbD1xWzJdLHRlLm9wcy5wdXNoKGxlKTticmVha31xWzJdJiZ0ZS5vcHMucG9wKCksdGUudHJ5cy5wb3AoKTtjb250aW51ZX1sZT1aLmNhbGwoVix0ZSl9Y2F0Y2go'@;
put 'Y2Upe2xlPVs2LGNlXSx6PTB9ZmluYWxseXtXPXE9MH1pZig1JmxlWzBdKXRocm93IGxlWzFdO3JldHVybnt2YWx1ZTpsZVswXT9sZVsxXTp2b2lkIDAsZG9uZTohMH19KFtzZSxkZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLkNvbXB1'@;
put 'dGVKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGs9RCgzOTAwKSxCPUQoMTM5NSksTj1mdW5jdGlvbihWKXtmdW5jdGlvbiBaKFcseil7dmFyIHE9Vi5jYWxsKHRoaXMsVyxrLlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHEuc2FzVml5YUFwaUNsaWVudD16LHF9cmV0dXJuIFUoWixW'@;
put 'KSxaLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKFcseixxLFEsdGUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBhZSxkZT10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24obGUpe3JldHVybiBhZT1RfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJl'@;
put 'c29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oY2UsRyl7dmFyIHk7bnVsbD09PSh5PWRlLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT15fHx5LmV4ZWN1dGVDb21wdXRlSm9iKFcscS5jb250ZXh0TmFtZSxxLmRlYnVnLHosdGUsITAsITApLnRoZW4oZnVuY3Rpb24oTCl7ZGUu'@;
put 'c2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEwsVyxxLmRlYnVnKSxjZShMLnJlc3VsdCl9KS5jYXRjaChmdW5jdGlvbihMKXtyZXR1cm4gSShkZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVs'@;
put 'KXtjYXNlIDA6cmV0dXJuIEwgaW5zdGFuY2VvZiBCLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KEwsVyxxLmRlYnVnKSxHKG5ldyBCLkVycm9yUmVzcG9uc2UoTD8ubWVzc2FnZSxMKSkpLEwgaW5zdGFuY2VvZiBCLkxvZ2lu'@;
put 'UmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdChmdW5jdGlvbigpe3JldHVybiBILmV4ZWN1dGUoVyx6LHEsUSkudGhlbihmdW5jdGlvbihnKXtjZShnKX0sZnVuY3Rpb24oZyl7RyhnKX0pfSksWzQsYWUoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4gai5zZW50KCksWzMs'@;
put 'M107Y2FzZSAyOkcobmV3IEIuRXJyb3JSZXNwb25zZShMPy5tZXNzYWdlLEwpKSxqLmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSxafShEKDYxMTgpLkJhc2VKb2JFeGVjdXRvcik7QS5Db21wdXRlSm9iRXhlY3V0b3I9Tn0sMzQ5MTpmdW5jdGlvbih3LEEsRCl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBQLFU9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChQPWZ1bmN0aW9uKFosVyl7cmV0dXJuKFA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKHoscSl7ei5fX3Byb3RvX189cX18fGZ1bmN0aW9uKHoscSl7'@;
put 'Zm9yKHZhciBRIGluIHEpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHEsUSkmJih6W1FdPXFbUV0pfSkoWixXKX0sZnVuY3Rpb24oWixXKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgVyYmbnVsbCE9PVcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1'@;
put 'ZSAiK1N0cmluZyhXKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiB6KCl7dGhpcy5jb25zdHJ1Y3Rvcj1afVAoWixXKSxaLnByb3RvdHlwZT1udWxsPT09Vz9PYmplY3QuY3JlYXRlKFcpOih6LnByb3RvdHlwZT1XLnByb3RvdHlwZSxuZXcgeil9KSxJPXRoaXMm'@;
put 'JnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihaLFcseixxKXtyZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihRLHRlKXtmdW5jdGlvbiBhZShsZSl7dHJ5e2RlKHEubmV4dChsZSkpfWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIHNlKGxlKXt0cnl7ZGUocS50aHJvdyhsZSkp'@;
put 'fWNhdGNoKGNlKXt0ZShjZSl9fWZ1bmN0aW9uIGRlKGxlKXt2YXIgY2U7bGUuZG9uZT9RKGxlLnZhbHVlKTooY2U9bGUudmFsdWUsY2UgaW5zdGFuY2VvZiB6P2NlOm5ldyB6KGZ1bmN0aW9uKEcpe0coY2UpfSkpLnRoZW4oYWUsc2UpfWRlKChxPXEuYXBwbHkoWixXfHxbXSkpLm5leHQoKSl9'@;
put 'KX0sRT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihaLFcpe3ZhciB6LHEsUSx0ZSxhZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZRWzBdKXRocm93IFFbMV07cmV0dXJuIFFbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gdGU9e25leHQ6c2UoMCksdGhyb3c6c2Uo'@;
put 'MSkscmV0dXJuOnNlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYodGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksdGU7ZnVuY3Rpb24gc2UoZGUpe3JldHVybiBmdW5jdGlvbihsZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtpZih6KXRocm93IG5ldyBU'@;
put 'eXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2FlOyl0cnl7aWYoej0xLHEmJihRPTImY2VbMF0/cS5yZXR1cm46Y2VbMF0/cS50aHJvd3x8KChRPXEucmV0dXJuKSYmUS5jYWxsKHEpLDApOnEubmV4dCkmJiEoUT1RLmNhbGwocSxjZVsxXSkpLmRvbmUp'@;
put 'cmV0dXJuIFE7c3dpdGNoKHE9MCxRJiYoY2U9WzImY2VbMF0sUS52YWx1ZV0pLGNlWzBdKXtjYXNlIDA6Y2FzZSAxOlE9Y2U7YnJlYWs7Y2FzZSA0OnJldHVybiBhZS5sYWJlbCsrLHt2YWx1ZTpjZVsxXSxkb25lOiExfTtjYXNlIDU6YWUubGFiZWwrKyxxPWNlWzFdLGNlPVswXTtjb250aW51'@;
put 'ZTtjYXNlIDc6Y2U9YWUub3BzLnBvcCgpLGFlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChRPShRPWFlLnRyeXMpLmxlbmd0aD4wJiZRW1EubGVuZ3RoLTFdKXx8NiE9PWNlWzBdJiYyIT09Y2VbMF0pKXthZT0wO2NvbnRpbnVlfWlmKDM9PT1jZVswXSYmKCFRfHxjZVsxXT5R'@;
put 'WzBdJiZjZVsxXTxRWzNdKSl7YWUubGFiZWw9Y2VbMV07YnJlYWt9aWYoNj09PWNlWzBdJiZhZS5sYWJlbDxRWzFdKXthZS5sYWJlbD1RWzFdLFE9Y2U7YnJlYWt9aWYoUSYmYWUubGFiZWw8UVsyXSl7YWUubGFiZWw9UVsyXSxhZS5vcHMucHVzaChjZSk7YnJlYWt9UVsyXSYmYWUub3BzLnBv'@;
put 'cCgpLGFlLnRyeXMucG9wKCk7Y29udGludWV9Y2U9Vy5jYWxsKFosYWUpfWNhdGNoKEcpe2NlPVs2LEddLHE9MH1maW5hbGx5e3o9UT0wfWlmKDUmY2VbMF0pdGhyb3cgY2VbMV07cmV0dXJue3ZhbHVlOmNlWzBdP2NlWzFdOnZvaWQgMCxkb25lOiEwfX0oW2RlLGxlXSl9fX07T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuRmlsZVVwbG9hZGVyPXZvaWQgMDt2YXIgaz1EKDU5MjgpLEI9RCgxMzk1KSxOPUQoMzkwMCksVj1mdW5jdGlvbihaKXtmdW5jdGlvbiBXKHoscSxRLHRlKXt2YXIgYWU9Wi5jYWxsKHRoaXMseixxKXx8dGhpcztyZXR1'@;
put 'cm4gYWUuam9ic1BhdGg9USxhZS5yZXF1ZXN0Q2xpZW50PXRlLGFlfXJldHVybiBVKFcsWiksVy5wcm90b3R5cGUuZXhlY3V0ZT1mdW5jdGlvbih6LHEsUSx0ZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGFlLHNlLGRlLGxlLGNlLEcseSxMLEgsaixnLFMs'@;
put 'eCxwPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihDKXtpZihhZT1xLmZpbGVzLHNlPXEucGFyYW1zLGRlPXRlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sIWFlPy5sZW5ndGgpdGhyb3cgbmV3IEIuRXJyb3JSZXNwb25zZSgiQXQgbGVhc3Qgb25lIGZpbGUgbXVz'@;
put 'dCBiZSBwcm92aWRlZC4iKTtpZighenx8IiI9PT16KXRocm93IG5ldyBCLkVycm9yUmVzcG9uc2UoInNhc0pvYiBtdXN0IGJlIHByb3ZpZGVkLiIpO2ZvcihjZSBpbiBsZT0iIixzZSlzZS5oYXNPd25Qcm9wZXJ0eShjZSkmJihsZSs9IiYiLmNvbmNhdChjZSwiPSIpLmNvbmNhdChzZVtjZV0p'@;
put 'KTtmb3IoRz1RLmFwcExvYz9RLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK3oucmVwbGFjZSgvXlwvLywiIik6eix5PSIiLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitHKS5jb25jYXQobGUpLEw9bmV3IEZvcm1EYXRhLEg9MCxqPWFlO0g8ai5sZW5n'@;
put 'dGg7SCsrKUwuYXBwZW5kKCJmaWxlIiwoZz1qW0hdKS5maWxlLGcuZmlsZU5hbWUpO3JldHVybihTPXRoaXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKSkmJkwuYXBwZW5kKCJfY3NyZiIsUy52YWx1ZSksUS5kZWJ1ZyYmTC5hcHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLFEuc2Vy'@;
put 'dmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXNWaXlhJiZRLmNvbnRleHROYW1lJiZMLmFwcGVuZCgiX2NvbnRleHRuYW1lIixRLmNvbnRleHROYW1lKSx4PXsiY2FjaGUtY29udHJvbCI6Im5vLWNhY2hlIixBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifSxbMixuZXcg'@;
put 'UHJvbWlzZShmdW5jdGlvbihLLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdCh5LEwsdm9pZCAwLCJhcHBsaWNhdGlvbi9qc29uIix4KS50aGVuKGZ1bmN0aW9uKHVlKXtyZXR1cm4gSShwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaGU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4ZSl7'@;
put 'c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6aWYodGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QodWUseixRLmRlYnVnKSxoZT11ZS5yZXN1bHQsIVEuZGVidWcpcmV0dXJuWzMsNl07c3dpdGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBOLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm5b'@;
put 'MywxXTtjYXNlIE4uU2VydmVyVHlwZS5TYXM5OnJldHVyblszLDNdO2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc2pzOnJldHVyblszLDRdfXJldHVyblszLDVdO2Nhc2UgMTpyZXR1cm5bNCwoMCxrLnBhcnNlU2FzVml5YURlYnVnUmVzcG9uc2UpKHVlLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQs'@;
put 'US5zZXJ2ZXJVcmwpXTtjYXNlIDI6cmV0dXJuIGhlPXhlLnNlbnQoKSxbMyw1XTtjYXNlIDM6cmV0dXJuIGhlPSJzdHJpbmciPT10eXBlb2YgdWUucmVzdWx0PygwLGsucGFyc2VXZWJvdXRSZXNwb25zZSkodWUucmVzdWx0LHkpOnVlLnJlc3VsdCxbMyw1XTtjYXNlIDQ6cmV0dXJuIGhlPSJz'@;
put 'dHJpbmciPT10eXBlb2YgdWUucmVzdWx0PygwLGsuZ2V0VmFsaWRKc29uKSh1ZS5yZXN1bHQpOnVlLnJlc3VsdCxbMyw1XTtjYXNlIDU6cmV0dXJuWzMsN107Y2FzZSA2OmhlPSJzdHJpbmciPT10eXBlb2YgdWUucmVzdWx0PygwLGsuZ2V0VmFsaWRKc29uKSh1ZS5yZXN1bHQpOnVlLnJlc3Vs'@;
put 'dCx4ZS5sYWJlbD03O2Nhc2UgNzpyZXR1cm4gSyhoZSksWzJdfX0pfSl9KS5jYXRjaChmdW5jdGlvbih1ZSl7cmV0dXJuIEkocCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGhlPXRoaXM7cmV0dXJuIEUodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0'@;
put 'dXJuIHVlIGluc3RhbmNlb2YgQi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHVlLHosUS5kZWJ1ZyksbmUobmV3IEIuRXJyb3JSZXNwb25zZSh1ZT8ubWVzc2FnZSx1ZSkpKSx1ZSBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh0'@;
put 'aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGhlLmV4ZWN1dGUoeixxLFEsdGUpLnRoZW4oZnVuY3Rpb24oT2Upe0soT2UpfSxmdW5jdGlvbihPZSl7bmUoT2UpfSl9KSxbNCxkZSgpXSk6WzMsMl07Y2FzZSAxOnJldHVybiB4ZS5zZW50KCksWzMsM107Y2FzZSAy'@;
put 'Om5lKG5ldyBCLkVycm9yUmVzcG9uc2UoIkZpbGUgdXBsb2FkIHJlcXVlc3QgZmFpbGVkLiIsdWUpKSx4ZS5sYWJlbD0zO2Nhc2UgMzpyZXR1cm5bMl19fSl9KX0pfSldfSl9KX0sV30oRCg2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO0EuRmlsZVVwbG9hZGVyPVZ9LDQ0NDY6ZnVuY3Rpb24odyxB'@;
put 'LEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUD1mdW5jdGlvbihXLHope3JldHVybihQPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihxLFEpe3EuX19wcm90b19fPVF9fHxmdW5jdGlv'@;
put 'bihxLFEpe2Zvcih2YXIgdGUgaW4gUSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUSx0ZSkmJihxW3RlXT1RW3RlXSl9KShXLHopfSxmdW5jdGlvbihXLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB6JiZudWxsIT09eil0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBl'@;
put 'eHRlbmRzIHZhbHVlICIrU3RyaW5nKHopKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIHEoKXt0aGlzLmNvbnN0cnVjdG9yPVd9UChXLHopLFcucHJvdG90eXBlPW51bGw9PT16P09iamVjdC5jcmVhdGUoeik6KHEucHJvdG90eXBlPXoucHJvdG90eXBlLG5ldyBx'@;
put 'KX0pLEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFcseixxLFEpe3JldHVybiBuZXcocXx8KHE9UHJvbWlzZSkpKGZ1bmN0aW9uKHRlLGFlKXtmdW5jdGlvbiBzZShjZSl7dHJ5e2xlKFEubmV4dChjZSkpfWNhdGNoKEcpe2FlKEcpfX1mdW5jdGlvbiBkZShjZSl7dHJ5e2xlKFEu'@;
put 'dGhyb3coY2UpKX1jYXRjaChHKXthZShHKX19ZnVuY3Rpb24gbGUoY2Upe3ZhciBHO2NlLmRvbmU/dGUoY2UudmFsdWUpOihHPWNlLnZhbHVlLEcgaW5zdGFuY2VvZiBxP0c6bmV3IHEoZnVuY3Rpb24oeSl7eShHKX0pKS50aGVuKHNlLGRlKX1sZSgoUT1RLmFwcGx5KFcsenx8W10pKS5uZXh0'@;
put 'KCkpfSl9LEU9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVyx6KXt2YXIgcSxRLHRlLGFlLHNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJnRlWzBdKXRocm93IHRlWzFdO3JldHVybiB0ZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBhZT17bmV4dDpkZSgwKSx0'@;
put 'aHJvdzpkZSgxKSxyZXR1cm46ZGUoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihhZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxhZTtmdW5jdGlvbiBkZShsZSl7cmV0dXJuIGZ1bmN0aW9uKGNlKXtyZXR1cm4gZnVuY3Rpb24oRyl7aWYocSl0aHJv'@;
put 'dyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtzZTspdHJ5e2lmKHE9MSxRJiYodGU9MiZHWzBdP1EucmV0dXJuOkdbMF0/US50aHJvd3x8KCh0ZT1RLnJldHVybikmJnRlLmNhbGwoUSksMCk6US5uZXh0KSYmISh0ZT10ZS5jYWxsKFEsR1sx'@;
put 'XSkpLmRvbmUpcmV0dXJuIHRlO3N3aXRjaChRPTAsdGUmJihHPVsyJkdbMF0sdGUudmFsdWVdKSxHWzBdKXtjYXNlIDA6Y2FzZSAxOnRlPUc7YnJlYWs7Y2FzZSA0OnJldHVybiBzZS5sYWJlbCsrLHt2YWx1ZTpHWzFdLGRvbmU6ITF9O2Nhc2UgNTpzZS5sYWJlbCsrLFE9R1sxXSxHPVswXTtj'@;
put 'b250aW51ZTtjYXNlIDc6Rz1zZS5vcHMucG9wKCksc2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHRlPSh0ZT1zZS50cnlzKS5sZW5ndGg+MCYmdGVbdGUubGVuZ3RoLTFdKXx8NiE9PUdbMF0mJjIhPT1HWzBdKSl7c2U9MDtjb250aW51ZX1pZigzPT09R1swXSYmKCF0ZXx8'@;
put 'R1sxXT50ZVswXSYmR1sxXTx0ZVszXSkpe3NlLmxhYmVsPUdbMV07YnJlYWt9aWYoNj09PUdbMF0mJnNlLmxhYmVsPHRlWzFdKXtzZS5sYWJlbD10ZVsxXSx0ZT1HO2JyZWFrfWlmKHRlJiZzZS5sYWJlbDx0ZVsyXSl7c2UubGFiZWw9dGVbMl0sc2Uub3BzLnB1c2goRyk7YnJlYWt9dGVbMl0m'@;
put 'JnNlLm9wcy5wb3AoKSxzZS50cnlzLnBvcCgpO2NvbnRpbnVlfUc9ei5jYWxsKFcsc2UpfWNhdGNoKHkpe0c9WzYseV0sUT0wfWZpbmFsbHl7cT10ZT0wfWlmKDUmR1swXSl0aHJvdyBHWzFdO3JldHVybnt2YWx1ZTpHWzBdP0dbMV06dm9pZCAwLGRvbmU6ITB9fShbbGUsY2VdKX19fTtPYmpl'@;
put 'Y3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5KZXNKb2JFeGVjdXRvcj12b2lkIDA7dmFyIGs9RCgzOTAwKSxCPUQoMTM5NSksTj1EKDYxMTgpLFY9RCg1OTI4KSxaPWZ1bmN0aW9uKFcpe2Z1bmN0aW9uIHoocSxRKXt2YXIgdGU9Vy5jYWxsKHRoaXMscSxr'@;
put 'LlNlcnZlclR5cGUuU2FzVml5YSl8fHRoaXM7cmV0dXJuIHRlLnNhc1ZpeWFBcGlDbGllbnQ9USx0ZX1yZXR1cm4gVSh6LFcpLHoucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24ocSxRLHRlLGFlLHNlLGRlKXtyZXR1cm4gdm9pZCAwPT09ZGUmJihkZT1bXSksSSh0aGlzLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXt2YXIgbGUsRz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuIGxlPWFlfHxmdW5jdGlvbigpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX0sWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oTCxIKXt2YXIgajtudWxsPT09KGo9Ry5zYXNWaXlhQXBpQ2xp'@;
put 'ZW50KXx8dm9pZCAwPT09anx8ai5leGVjdXRlSm9iKHEsdGUuY29udGV4dE5hbWUsdGUuZGVidWcsUSxzZSkudGhlbihmdW5jdGlvbihnKXtHLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpO3ZhciBTPSgwLFYuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0'@;
put 'ZXMpKGcsZGUpO0woUyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gSShHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUz10aGlzO3JldHVybiBFKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIEIuSm9iRXhlY3V0aW9u'@;
put 'RXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChnLHEsdGUuZGVidWcpLEgobmV3IEIuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdlLGcpKSksZyBpbnN0YW5jZW9mIEIuTG9naW5SZXF1aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIFMuZXhlY3V0ZShxLFEsdGUsYWUsc2UsZGUpLnRoZW4oZnVuY3Rpb24oXyl7TChfKX0sZnVuY3Rpb24oXyl7SChfKX0pfSksWzQsbGUoKV0pOlszLDJdO2Nhc2UgMTpyZXR1cm4geC5zZW50KCksWzMsM107Y2FzZSAyOkgobmV3IEIuRXJyb3JSZXNwb25zZShnPy5tZXNzYWdl'@;
put 'LGcpKSx4LmxhYmVsPTM7Y2FzZSAzOnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx6fShOLkJhc2VKb2JFeGVjdXRvcik7QS5KZXNKb2JFeGVjdXRvcj1afSw2MTE4OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGssQixO'@;
put 'LFYpe3JldHVybiBuZXcoTnx8KE49UHJvbWlzZSkpKGZ1bmN0aW9uKFosVyl7ZnVuY3Rpb24geih0ZSl7dHJ5e1EoVi5uZXh0KHRlKSl9Y2F0Y2goYWUpe1coYWUpfX1mdW5jdGlvbiBxKHRlKXt0cnl7UShWLnRocm93KHRlKSl9Y2F0Y2goYWUpe1coYWUpfX1mdW5jdGlvbiBRKHRlKXt2YXIg'@;
put 'YWU7dGUuZG9uZT9aKHRlLnZhbHVlKTooYWU9dGUudmFsdWUsYWUgaW5zdGFuY2VvZiBOP2FlOm5ldyBOKGZ1bmN0aW9uKHNlKXtzZShhZSl9KSkudGhlbih6LHEpfVEoKFY9Vi5hcHBseShrLEJ8fFtdKSkubmV4dCgpKX0pfSxVPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGss'@;
put 'Qil7dmFyIE4sVixaLFcsej17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZaWzBdKXRocm93IFpbMV07cmV0dXJuIFpbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gVz17bmV4dDpxKDApLHRocm93OnEoMSkscmV0dXJuOnEoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihX'@;
put 'W1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFc7ZnVuY3Rpb24gcShRKXtyZXR1cm4gZnVuY3Rpb24odGUpe3JldHVybiBmdW5jdGlvbihhZSl7aWYoTil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDt6'@;
put 'Oyl0cnl7aWYoTj0xLFYmJihaPTImYWVbMF0/Vi5yZXR1cm46YWVbMF0/Vi50aHJvd3x8KChaPVYucmV0dXJuKSYmWi5jYWxsKFYpLDApOlYubmV4dCkmJiEoWj1aLmNhbGwoVixhZVsxXSkpLmRvbmUpcmV0dXJuIFo7c3dpdGNoKFY9MCxaJiYoYWU9WzImYWVbMF0sWi52YWx1ZV0pLGFlWzBd'@;
put 'KXtjYXNlIDA6Y2FzZSAxOlo9YWU7YnJlYWs7Y2FzZSA0OnJldHVybiB6LmxhYmVsKysse3ZhbHVlOmFlWzFdLGRvbmU6ITF9O2Nhc2UgNTp6LmxhYmVsKyssVj1hZVsxXSxhZT1bMF07Y29udGludWU7Y2FzZSA3OmFlPXoub3BzLnBvcCgpLHoudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0'@;
put 'OmlmKCEoKFo9KFo9ei50cnlzKS5sZW5ndGg+MCYmWltaLmxlbmd0aC0xXSl8fDYhPT1hZVswXSYmMiE9PWFlWzBdKSl7ej0wO2NvbnRpbnVlfWlmKDM9PT1hZVswXSYmKCFafHxhZVsxXT5aWzBdJiZhZVsxXTxaWzNdKSl7ei5sYWJlbD1hZVsxXTticmVha31pZig2PT09YWVbMF0mJnoubGFi'@;
put 'ZWw8WlsxXSl7ei5sYWJlbD1aWzFdLFo9YWU7YnJlYWt9aWYoWiYmei5sYWJlbDxaWzJdKXt6LmxhYmVsPVpbMl0sei5vcHMucHVzaChhZSk7YnJlYWt9WlsyXSYmei5vcHMucG9wKCksei50cnlzLnBvcCgpO2NvbnRpbnVlfWFlPUIuY2FsbChrLHopfWNhdGNoKHNlKXthZT1bNixzZV0sVj0w'@;
put 'fWZpbmFsbHl7Tj1aPTB9aWYoNSZhZVswXSl0aHJvdyBhZVsxXTtyZXR1cm57dmFsdWU6YWVbMF0/YWVbMV06dm9pZCAwLGRvbmU6ITB9fShbUSx0ZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLkJhc2VKb2JFeGVjdXRvcj12b2lkIDA7'@;
put 'dmFyIEk9RCg1OTI4KSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gayhCLE4pe3ZhciBWPXRoaXM7dGhpcy5zZXJ2ZXJVcmw9Qix0aGlzLnNlcnZlclR5cGU9Tix0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXSx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBQKFYsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBaPXRoaXM7cmV0dXJuIFUodGhpcyxmdW5jdGlvbihXKXtzd2l0Y2goVy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LCgwLEkuYXN5bmNGb3JFYWNoKSh0aGlzLndhaXRpbmdSZXF1ZXN0cyxmdW5jdGlvbih6KXtyZXR1cm4gUChaLHZvaWQgMCx2b2lk'@;
put 'IDAsZnVuY3Rpb24oKXtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKHEpe3N3aXRjaChxLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQseigpXTtjYXNlIDE6cmV0dXJuIHEuc2VudCgpLFsyXX19KX0pfSldO2Nhc2UgMTpyZXR1cm4gVy5zZW50KCksdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sWzJdfX0p'@;
put 'fSl9fXJldHVybiBrLnByb3RvdHlwZS5hcHBlbmRXYWl0aW5nUmVxdWVzdD1mdW5jdGlvbihCKXt0aGlzLndhaXRpbmdSZXF1ZXN0cy5wdXNoKEIpfSxrLnByb3RvdHlwZS5nZXRSZXF1ZXN0UGFyYW1zPWZ1bmN0aW9uKEIpe3ZhciBOPXt9O3JldHVybiBCLmRlYnVnJiYoTi5fb21pdHRleHRs'@;
put 'b2c9ImZhbHNlIixOLl9vbWl0c2Vzc2lvbnJlc3VsdHM9ImZhbHNlIixOLl9kZWJ1Zz0xMzEpLE59LGt9KCk7QS5CYXNlSm9iRXhlY3V0b3I9RX0sMjY5MzpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQLFU9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChQPWZ1bmN0aW9uKFEsdGUp'@;
put 'e3JldHVybihQPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihhZSxzZSl7YWUuX19wcm90b19fPXNlfXx8ZnVuY3Rpb24oYWUsc2Upe2Zvcih2YXIgZGUgaW4gc2UpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j'@;
put 'YWxsKHNlLGRlKSYmKGFlW2RlXT1zZVtkZV0pfSkoUSx0ZSl9LGZ1bmN0aW9uKFEsdGUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0ZSYmbnVsbCE9PXRlKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcodGUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Ig'@;
put 'b3IgbnVsbCIpO2Z1bmN0aW9uIGFlKCl7dGhpcy5jb25zdHJ1Y3Rvcj1RfVAoUSx0ZSksUS5wcm90b3R5cGU9bnVsbD09PXRlP09iamVjdC5jcmVhdGUodGUpOihhZS5wcm90b3R5cGU9dGUucHJvdG90eXBlLG5ldyBhZSl9KSxJPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIEk9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oUSl7Zm9yKHZhciB0ZSxhZT0xLHNlPWFyZ3VtZW50cy5sZW5ndGg7YWU8c2U7YWUrKylmb3IodmFyIGRlIGluIHRlPWFyZ3VtZW50c1thZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRlLGRlKSYmKFFbZGVdPXRl'@;
put 'W2RlXSk7cmV0dXJuIFF9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxFPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihRLHRlLGFlLHNlKXtyZXR1cm4gbmV3KGFlfHwoYWU9UHJvbWlzZSkpKGZ1bmN0aW9uKGRlLGxlKXtmdW5jdGlvbiBjZShMKXt0cnl7eShzZS5uZXh0KEwpKX1j'@;
put 'YXRjaChIKXtsZShIKX19ZnVuY3Rpb24gRyhMKXt0cnl7eShzZS50aHJvdyhMKSl9Y2F0Y2goSCl7bGUoSCl9fWZ1bmN0aW9uIHkoTCl7dmFyIEg7TC5kb25lP2RlKEwudmFsdWUpOihIPUwudmFsdWUsSCBpbnN0YW5jZW9mIGFlP0g6bmV3IGFlKGZ1bmN0aW9uKGope2ooSCl9KSkudGhlbihj'@;
put 'ZSxHKX15KChzZT1zZS5hcHBseShRLHRlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihRLHRlKXt2YXIgYWUsc2UsZGUsbGUsY2U9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmZGVbMF0pdGhyb3cgZGVbMV07cmV0dXJuIGRlWzFdfSx0'@;
put 'cnlzOltdLG9wczpbXX07cmV0dXJuIGxlPXtuZXh0OkcoMCksdGhyb3c6RygxKSxyZXR1cm46RygyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKGxlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGxlO2Z1bmN0aW9uIEcoeSl7cmV0dXJuIGZ1bmN0aW9u'@;
put 'KEwpe3JldHVybiBmdW5jdGlvbihIKXtpZihhZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtjZTspdHJ5e2lmKGFlPTEsc2UmJihkZT0yJkhbMF0/c2UucmV0dXJuOkhbMF0/c2UudGhyb3d8fCgoZGU9c2UucmV0dXJuKSYmZGUu'@;
put 'Y2FsbChzZSksMCk6c2UubmV4dCkmJiEoZGU9ZGUuY2FsbChzZSxIWzFdKSkuZG9uZSlyZXR1cm4gZGU7c3dpdGNoKHNlPTAsZGUmJihIPVsyJkhbMF0sZGUudmFsdWVdKSxIWzBdKXtjYXNlIDA6Y2FzZSAxOmRlPUg7YnJlYWs7Y2FzZSA0OnJldHVybiBjZS5sYWJlbCsrLHt2YWx1ZTpIWzFd'@;
put 'LGRvbmU6ITF9O2Nhc2UgNTpjZS5sYWJlbCsrLHNlPUhbMV0sSD1bMF07Y29udGludWU7Y2FzZSA3Okg9Y2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChkZT0oZGU9Y2UudHJ5cykubGVuZ3RoPjAmJmRlW2RlLmxlbmd0aC0xXSl8fDYhPT1IWzBdJiYy'@;
put 'IT09SFswXSkpe2NlPTA7Y29udGludWV9aWYoMz09PUhbMF0mJighZGV8fEhbMV0+ZGVbMF0mJkhbMV08ZGVbM10pKXtjZS5sYWJlbD1IWzFdO2JyZWFrfWlmKDY9PT1IWzBdJiZjZS5sYWJlbDxkZVsxXSl7Y2UubGFiZWw9ZGVbMV0sZGU9SDticmVha31pZihkZSYmY2UubGFiZWw8ZGVbMl0p'@;
put 'e2NlLmxhYmVsPWRlWzJdLGNlLm9wcy5wdXNoKEgpO2JyZWFrfWRlWzJdJiZjZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZX1IPXRlLmNhbGwoUSxjZSl9Y2F0Y2goail7SD1bNixqXSxzZT0wfWZpbmFsbHl7YWU9ZGU9MH1pZig1JkhbMF0pdGhyb3cgSFsxXTtyZXR1cm57dmFs'@;
put 'dWU6SFswXT9IWzFdOnZvaWQgMCxkb25lOiEwfX0oW3ksTF0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLlNhczlKb2JFeGVjdXRvcj12b2lkIDA7dmFyIEI9RCg2MjMwKSxOPUQoMTM5NSksVj1EKDU5MjgpLFo9RCg2MTE4KSxXPUQoNzk1'@;
put 'KSx6PWZ1bmN0aW9uKFEpe2Z1bmN0aW9uIHRlKGFlLHNlLGRlLGxlLGNlKXt2YXIgRz1RLmNhbGwodGhpcyxhZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9ZGUsRy5yZXF1ZXN0Q2xpZW50PWxlLEcuc2FzOVJlcXVlc3RDbGllbnQ9bmV3IFcuU2FzOVJlcXVlc3RDbGllbnQoYWUsY2Up'@;
put 'LEd9cmV0dXJuIFUodGUsUSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oYWUsc2UsZGUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBsZSxjZSxHLHksTCxILGo9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGcpe3N3aXRjaChnLmxhYmVsKXtj'@;
put 'YXNlIDA6aWYobGU9KDAsVi5pc1JlbGF0aXZlUGF0aCkoYWUpJiZkZS5hcHBMb2M/ZGUuYXBwTG9jLnJlcGxhY2UoL1wvPyQvLCIvIikrYWUucmVwbGFjZSgvXlwvLywiIik6YWUsY2U9IiIuY29uY2F0KGRlLnNlcnZlclVybCkuY29uY2F0KHRoaXMuam9ic1BhdGgsIj8iKS5jb25jYXQoIl9w'@;
put 'cm9ncmFtPSIrbGUpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGRlLnVzZXJuYW1lJiZkZS5wYXNzd29yZD8iJl91c2VybmFtZT0iK2RlLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrZGUucGFzc3dvcmQ6IiIpLGNlPSIiLmNvbmNhdChjZSkuY29uY2F0KGRlLmRlYnVnPyImX2RlYnVnPTEzMSI6'@;
put 'IiIpLEc9SSh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoZGUpKSx5PW5ldyBCLHNlKXRyeXt5PXEoeSxzZSl9Y2F0Y2goUyl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IE4uRXJyb3JSZXNwb25zZShTPy5tZXNzYWdlLFMpKV19ZWxzZSBzZT0iIjtmb3IoTCBpbiBHKUcuaGFzT3duUHJv'@;
put 'cGVydHkoTCkmJnkuYXBwZW5kKEwsR1tMXSk7cmV0dXJuWzQsdGhpcy5zYXM5UmVxdWVzdENsaWVudC5sb2dpbihkZS51c2VybmFtZSxkZS5wYXNzd29yZCx0aGlzLmpvYnNQYXRoKV07Y2FzZSAxOnJldHVybiBnLnNlbnQoKSxIPXNlJiZPYmplY3Qua2V5cyhzZSkubGVuZ3RoPyJtdWx0aXBh'@;
put 'cnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK3kuX2JvdW5kYXJ5OiJ0ZXh0L3BsYWluIixbMixuZXcgUHJvbWlzZShmdW5jdGlvbihTLHgpe3JldHVybiBqLnNhczlSZXF1ZXN0Q2xpZW50LnBvc3QoY2UseSx2b2lkIDAsSCx7QWNjZXB0OiIqLyoiLENvbm5lY3Rpb246IktlZXAtQWxpdmUifSku'@;
put 'dGhlbihmdW5jdGlvbihfKXtqLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChfLGFlLGRlLmRlYnVnKSxTKF8pfSkuY2F0Y2goZnVuY3Rpb24oXyl7dmFyIHA9XztfLnJlc3VsdCYmIiIhPT1fLnJlc3VsdD9wPV8ucmVzdWx0Ol8ubWVzc2FnZSYmKHA9Xy5tZXNzYWdlKSxqLnJlcXVlc3RD'@;
put 'bGllbnQuYXBwZW5kUmVxdWVzdChwLGFlLGRlLmRlYnVnKSx4KG5ldyBOLkVycm9yUmVzcG9uc2UoXz8ubWVzc2FnZSxfKSl9KX0pXX19KX0pfSx0ZS5wcm90b3R5cGUuZ2V0UmVxdWVzdFBhcmFtcz1mdW5jdGlvbihhZSl7dmFyIHNlPXt9O3JldHVybiBhZS5kZWJ1ZyYmKHNlLl9kZWJ1Zz0x'@;
put 'MzEpLHNlfSx0ZX0oWi5CYXNlSm9iRXhlY3V0b3IpO0EuU2FzOUpvYkV4ZWN1dG9yPXo7dmFyIHE9ZnVuY3Rpb24oUSx0ZSl7Zm9yKHZhciBhZSBpbiB0ZSl7dmFyIHNlPWFlLGRlPSgwLFYuY29udmVydFRvQ1NWKSh0ZSxhZSk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PWRl'@;
put 'KXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2YgYSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtRLmFwcGVuZChzZSxkZSx7ZmlsZW5hbWU6IiIuY29uY2F0KHNlLCIuY3N2IiksY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KX1yZXR1'@;
put 'cm4gUX19LDEwNjU6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUD1mdW5jdGlvbihRLHRlKXtyZXR1cm4oUD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oYWUs'@;
put 'c2Upe2FlLl9fcHJvdG9fXz1zZX18fGZ1bmN0aW9uKGFlLHNlKXtmb3IodmFyIGRlIGluIHNlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSxkZSkmJihhZVtkZV09c2VbZGVdKX0pKFEsdGUpfSxmdW5jdGlvbihRLHRlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGUm'@;
put 'Jm51bGwhPT10ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKHRlKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBhZSgpe3RoaXMuY29uc3RydWN0b3I9UX1QKFEsdGUpLFEucHJvdG90eXBlPW51bGw9PT10ZT9PYmpl'@;
put 'Y3QuY3JlYXRlKHRlKTooYWUucHJvdG90eXBlPXRlLnByb3RvdHlwZSxuZXcgYWUpfSksST10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKFEpe2Zvcih2YXIgdGUsYWU9MSxzZT1hcmd1bWVudHMubGVuZ3RoO2FlPHNlO2Fl'@;
put 'KyspZm9yKHZhciBkZSBpbiB0ZT1hcmd1bWVudHNbYWVdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0ZSxkZSkmJihRW2RlXT10ZVtkZV0pO3JldHVybiBRfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUSx0'@;
put 'ZSxhZSxzZSl7cmV0dXJuIG5ldyhhZXx8KGFlPVByb21pc2UpKShmdW5jdGlvbihkZSxsZSl7ZnVuY3Rpb24gY2UoTCl7dHJ5e3koc2UubmV4dChMKSl9Y2F0Y2goSCl7bGUoSCl9fWZ1bmN0aW9uIEcoTCl7dHJ5e3koc2UudGhyb3coTCkpfWNhdGNoKEgpe2xlKEgpfX1mdW5jdGlvbiB5KEwp'@;
put 'e3ZhciBIO0wuZG9uZT9kZShMLnZhbHVlKTooSD1MLnZhbHVlLEggaW5zdGFuY2VvZiBhZT9IOm5ldyBhZShmdW5jdGlvbihqKXtqKEgpfSkpLnRoZW4oY2UsRyl9eSgoc2U9c2UuYXBwbHkoUSx0ZXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24o'@;
put 'USx0ZSl7dmFyIGFlLHNlLGRlLGxlLGNlPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJmRlWzBdKXRocm93IGRlWzFdO3JldHVybiBkZVsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBsZT17bmV4dDpHKDApLHRocm93OkcoMSkscmV0dXJuOkcoMil9LCJmdW5jdGlvbiI9PXR5cGVv'@;
put 'ZiBTeW1ib2wmJihsZVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxsZTtmdW5jdGlvbiBHKHkpe3JldHVybiBmdW5jdGlvbihMKXtyZXR1cm4gZnVuY3Rpb24oSCl7aWYoYWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0'@;
put 'aW5nLiIpO2Zvcig7Y2U7KXRyeXtpZihhZT0xLHNlJiYoZGU9MiZIWzBdP3NlLnJldHVybjpIWzBdP3NlLnRocm93fHwoKGRlPXNlLnJldHVybikmJmRlLmNhbGwoc2UpLDApOnNlLm5leHQpJiYhKGRlPWRlLmNhbGwoc2UsSFsxXSkpLmRvbmUpcmV0dXJuIGRlO3N3aXRjaChzZT0wLGRlJiYo'@;
put 'SD1bMiZIWzBdLGRlLnZhbHVlXSksSFswXSl7Y2FzZSAwOmNhc2UgMTpkZT1IO2JyZWFrO2Nhc2UgNDpyZXR1cm4gY2UubGFiZWwrKyx7dmFsdWU6SFsxXSxkb25lOiExfTtjYXNlIDU6Y2UubGFiZWwrKyxzZT1IWzFdLEg9WzBdO2NvbnRpbnVlO2Nhc2UgNzpIPWNlLm9wcy5wb3AoKSxjZS50'@;
put 'cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoZGU9KGRlPWNlLnRyeXMpLmxlbmd0aD4wJiZkZVtkZS5sZW5ndGgtMV0pfHw2IT09SFswXSYmMiE9PUhbMF0pKXtjZT0wO2NvbnRpbnVlfWlmKDM9PT1IWzBdJiYoIWRlfHxIWzFdPmRlWzBdJiZIWzFdPGRlWzNdKSl7Y2UubGFiZWw9'@;
put 'SFsxXTticmVha31pZig2PT09SFswXSYmY2UubGFiZWw8ZGVbMV0pe2NlLmxhYmVsPWRlWzFdLGRlPUg7YnJlYWt9aWYoZGUmJmNlLmxhYmVsPGRlWzJdKXtjZS5sYWJlbD1kZVsyXSxjZS5vcHMucHVzaChIKTticmVha31kZVsyXSYmY2Uub3BzLnBvcCgpLGNlLnRyeXMucG9wKCk7Y29udGlu'@;
put 'dWV9SD10ZS5jYWxsKFEsY2UpfWNhdGNoKGope0g9WzYsal0sc2U9MH1maW5hbGx5e2FlPWRlPTB9aWYoNSZIWzBdKXRocm93IEhbMV07cmV0dXJue3ZhbHVlOkhbMF0/SFsxXTp2b2lkIDAsZG9uZTohMH19KFt5LExdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSksQS5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDt2YXIgQj1EKDYyMzApLE49RCgzOTAwKSxWPUQoMTM5NSksWj1EKDQwMzcpLFc9RCg1OTI4KSx6PUQoNTkyOCkscT1mdW5jdGlvbihRKXtmdW5jdGlvbiB0ZShhZSxzZSxkZSl7dmFyIGxlPVEuY2FsbCh0aGlzLGFlLE4uU2Vy'@;
put 'dmVyVHlwZS5TYXNqcyl8fHRoaXM7cmV0dXJuIGxlLmpvYnNQYXRoPXNlLGxlLnJlcXVlc3RDbGllbnQ9ZGUsbGV9cmV0dXJuIFUodGUsUSksdGUucHJvdG90eXBlLmV4ZWN1dGU9ZnVuY3Rpb24oYWUsc2UsZGUsbGUsY2UsRyl7cmV0dXJuIHZvaWQgMD09PUcmJihHPVtdKSxFKHRoaXMsdm9p'@;
put 'ZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB5LEwsSCxqLGcsUyx4LHA9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe2lmKHk9bGUsTD0oMCx6LmlzUmVsYXRpdmVQYXRoKShhZSkmJmRlLmFwcExvYz9kZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKSthZS5yZXBsYWNlKC9eXC8v'@;
put 'LCIiKTphZSxIPSIiLmNvbmNhdChkZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitMKSxqPUkoe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKGRlKSksZz0oMCxXLmdldEZvcm1EYXRhKSgpLHNlKXRyeXtnPSgwLFouZ2VuZXJhdGVGaWxl'@;
put 'VXBsb2FkRm9ybSkoZyxzZSl9Y2F0Y2goSyl7cmV0dXJuWzIsUHJvbWlzZS5yZWplY3QobmV3IFYuRXJyb3JSZXNwb25zZShLPy5tZXNzYWdlLEspKV19Zm9yKFMgaW4gailqLmhhc093blByb3BlcnR5KFMpJiZnLmFwcGVuZChTLGpbU10pO3JldHVybiB4PWcgaW5zdGFuY2VvZiBCJiZ0eXBl'@;
put 'b2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdChnLmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihLLG5lKXtwLnJlcXVlc3RDbGllbnQucG9zdChILGcsY2U/LmFjY2Vzc190b2tlbix4KS50aGVuKGZ1bmN0'@;
put 'aW9uKHVlKXtyZXR1cm4gRShwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaGUseGU7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihPZSl7aWYoT2JqZWN0LmVudHJpZXModWUucmVzdWx0KS5sZW5ndGg8MSl0aHJvdyBuZXcgVi5Kb2JFeGVjdXRpb25FcnJvcigwLCJObyB3ZWJvdXQgd2Fz'@;
put 'IHJldHVybmVkIGJ5IGpvYiAiLmNvbmNhdChMLCIuICBQbGVhc2UgY2hlY2sgdGhlIFNBUyBsb2cgZm9yIG1vcmUgaW5mby4iKSx1ZS5sb2cpO3JldHVybihoZT11ZS5yZXN1bHQpJiYic3RyaW5nIj09dHlwZW9mIGhlJiZoZS50cmltKCkmJih1ZS5yZXN1bHQ9KDAsei5nZXRWYWxpZEpzb24p'@;
put 'KGhlKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QodWUsYWUsZGUuZGVidWcpLHhlPSgwLHouYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXMpKHVlLEcpLEsoeGUpLFsyXX0pfSl9KS5jYXRjaChmdW5jdGlvbih1ZSl7cmV0dXJuIEUocCx2b2lkIDAsdm9pZCAwLGZ1bmN0'@;
put 'aW9uKCl7dmFyIGhlPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbih4ZSl7c3dpdGNoKHhlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIHVlIGluc3RhbmNlb2YgVi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KHVlLGFlLGRlLmRlYnVnKSxuZShu'@;
put 'ZXcgVi5FcnJvclJlc3BvbnNlKHVlPy5tZXNzYWdlLHVlKSkpLHVlIGluc3RhbmNlb2YgVi5Mb2dpblJlcXVpcmVkRXJyb3I/KGxlfHxuZShuZXcgVi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZh'@;
put 'bGlkIGNyZWRlbnRpYWxzLiIsdWUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIGhlLmV4ZWN1dGUoYWUsc2UsZGUsbGUsY2UsRykudGhlbihmdW5jdGlvbihPZSl7SyhPZSl9LGZ1bmN0aW9uKE9lKXtuZShPZSl9KX0pLHk/WzQseSgpXTpbMywyXSk6WzMs'@;
put 'M107Y2FzZSAxOnhlLnNlbnQoKSx4ZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMyw0XTtjYXNlIDM6bmUobmV3IFYuRXJyb3JSZXNwb25zZSh1ZT8ubWVzc2FnZSx1ZSkpLHhlLmxhYmVsPTQ7Y2FzZSA0OnJldHVyblsyXX19KX0pfSl9KV19KX0pfSx0ZX0oRCg2MTE4KS5CYXNlSm9iRXhlY3V0'@;
put 'b3IpO0EuU2FzanNKb2JFeGVjdXRvcj1xfSw2MDg0OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFAsVT10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KFA9ZnVuY3Rpb24oUSx0ZSl7cmV0dXJuKFA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2Yg'@;
put 'QXJyYXkmJmZ1bmN0aW9uKGFlLHNlKXthZS5fX3Byb3RvX189c2V9fHxmdW5jdGlvbihhZSxzZSl7Zm9yKHZhciBkZSBpbiBzZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc2UsZGUpJiYoYWVbZGVdPXNlW2RlXSl9KShRLHRlKX0sZnVuY3Rpb24oUSx0ZSl7aWYoImZ1'@;
put 'bmN0aW9uIiE9dHlwZW9mIHRlJiZudWxsIT09dGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyh0ZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gYWUoKXt0aGlzLmNvbnN0cnVjdG9yPVF9UChRLHRlKSxRLnByb3Rv'@;
put 'dHlwZT1udWxsPT09dGU/T2JqZWN0LmNyZWF0ZSh0ZSk6KGFlLnByb3RvdHlwZT10ZS5wcm90b3R5cGUsbmV3IGFlKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihRKXtmb3IodmFyIHRlLGFlPTEsc2U9YXJndW1l'@;
put 'bnRzLmxlbmd0aDthZTxzZTthZSsrKWZvcih2YXIgZGUgaW4gdGU9YXJndW1lbnRzW2FlXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGUsZGUpJiYoUVtkZV09dGVbZGVdKTtyZXR1cm4gUX0sSS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LEU9dGhpcyYmdGhpcy5fX2F3'@;
put 'YWl0ZXJ8fGZ1bmN0aW9uKFEsdGUsYWUsc2Upe3JldHVybiBuZXcoYWV8fChhZT1Qcm9taXNlKSkoZnVuY3Rpb24oZGUsbGUpe2Z1bmN0aW9uIGNlKEwpe3RyeXt5KHNlLm5leHQoTCkpfWNhdGNoKEgpe2xlKEgpfX1mdW5jdGlvbiBHKEwpe3RyeXt5KHNlLnRocm93KEwpKX1jYXRjaChIKXts'@;
put 'ZShIKX19ZnVuY3Rpb24geShMKXt2YXIgSDtMLmRvbmU/ZGUoTC52YWx1ZSk6KEg9TC52YWx1ZSxIIGluc3RhbmNlb2YgYWU/SDpuZXcgYWUoZnVuY3Rpb24oail7aihIKX0pKS50aGVuKGNlLEcpfXkoKHNlPXNlLmFwcGx5KFEsdGV8fFtdKSkubmV4dCgpKX0pfSxrPXRoaXMmJnRoaXMuX19n'@;
put 'ZW5lcmF0b3J8fGZ1bmN0aW9uKFEsdGUpe3ZhciBhZSxzZSxkZSxsZSxjZT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm4gZGVbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbGU9e25leHQ6RygwKSx0aHJvdzpHKDEpLHJldHVybjpHKDIp'@;
put 'fSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYobGVbU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksbGU7ZnVuY3Rpb24gRyh5KXtyZXR1cm4gZnVuY3Rpb24oTCl7cmV0dXJuIGZ1bmN0aW9uKEgpe2lmKGFlKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRv'@;
put 'ciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2NlOyl0cnl7aWYoYWU9MSxzZSYmKGRlPTImSFswXT9zZS5yZXR1cm46SFswXT9zZS50aHJvd3x8KChkZT1zZS5yZXR1cm4pJiZkZS5jYWxsKHNlKSwwKTpzZS5uZXh0KSYmIShkZT1kZS5jYWxsKHNlLEhbMV0pKS5kb25lKXJldHVybiBk'@;
put 'ZTtzd2l0Y2goc2U9MCxkZSYmKEg9WzImSFswXSxkZS52YWx1ZV0pLEhbMF0pe2Nhc2UgMDpjYXNlIDE6ZGU9SDticmVhaztjYXNlIDQ6cmV0dXJuIGNlLmxhYmVsKysse3ZhbHVlOkhbMV0sZG9uZTohMX07Y2FzZSA1OmNlLmxhYmVsKyssc2U9SFsxXSxIPVswXTtjb250aW51ZTtjYXNlIDc6'@;
put 'SD1jZS5vcHMucG9wKCksY2UudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKGRlPShkZT1jZS50cnlzKS5sZW5ndGg+MCYmZGVbZGUubGVuZ3RoLTFdKXx8NiE9PUhbMF0mJjIhPT1IWzBdKSl7Y2U9MDtjb250aW51ZX1pZigzPT09SFswXSYmKCFkZXx8SFsxXT5kZVswXSYmSFsx'@;
put 'XTxkZVszXSkpe2NlLmxhYmVsPUhbMV07YnJlYWt9aWYoNj09PUhbMF0mJmNlLmxhYmVsPGRlWzFdKXtjZS5sYWJlbD1kZVsxXSxkZT1IO2JyZWFrfWlmKGRlJiZjZS5sYWJlbDxkZVsyXSl7Y2UubGFiZWw9ZGVbMl0sY2Uub3BzLnB1c2goSCk7YnJlYWt9ZGVbMl0mJmNlLm9wcy5wb3AoKSxj'@;
put 'ZS50cnlzLnBvcCgpO2NvbnRpbnVlfUg9dGUuY2FsbChRLGNlKX1jYXRjaChqKXtIPVs2LGpdLHNlPTB9ZmluYWxseXthZT1kZT0wfWlmKDUmSFswXSl0aHJvdyBIWzFdO3JldHVybnt2YWx1ZTpIWzBdP0hbMV06dm9pZCAwLGRvbmU6ITB9fShbeSxMXSl9fX07T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuV2ViSm9iRXhlY3V0b3I9dm9pZCAwO3ZhciBCPUQoNjIzMCksTj1EKDM5MDApLFY9RCgxMzk1KSxaPUQoNDAzNyksVz1EKDIxNzApLHo9RCg1OTI4KSxxPWZ1bmN0aW9uKFEpe2Z1bmN0aW9uIHRlKGFlLHNlLGRlLGxlLGNlKXt2YXIg'@;
put 'Rz1RLmNhbGwodGhpcyxhZSxzZSl8fHRoaXM7cmV0dXJuIEcuam9ic1BhdGg9ZGUsRy5yZXF1ZXN0Q2xpZW50PWxlLEcuc2FzVml5YUFwaUNsaWVudD1jZSxHfXJldHVybiBVKHRlLFEpLHRlLnByb3RvdHlwZS5leGVjdXRlPWZ1bmN0aW9uKGFlLHNlLGRlLGxlLGNlLEcpe3JldHVybiB2b2lk'@;
put 'IDA9PT1HJiYoRz1bXSksRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeSxMLEgsaixnLFMseCxfLHAsSyxuZSx1ZSx4ZT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oT2Upe3N3aXRjaChPZS5sYWJlbCl7Y2FzZSAwOmlmKHk9bGUsTD0oMCx6LmlzUmVsYXRpdmVQYXRo'@;
put 'KShhZSkmJmRlLmFwcExvYz9kZS5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKSthZS5yZXBsYWNlKC9eXC8vLCIiKTphZSxIPSIiLmNvbmNhdChkZS5zZXJ2ZXJVcmwpLmNvbmNhdCh0aGlzLmpvYnNQYXRoLCIvPyIpLmNvbmNhdCgiX3Byb2dyYW09IitMKSxkZS5zZXJ2ZXJUeXBlIT09Ti5T'@;
put 'ZXJ2ZXJUeXBlLlNhc1ZpeWEpcmV0dXJuWzMsNV07aj12b2lkIDAsT2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIE9lLnRyeXMucHVzaChbMSwzLCw0XSksWzQsdGhpcy5nZXRKb2JVcmkoYWUpXTtjYXNlIDI6cmV0dXJuIGo9T2Uuc2VudCgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gZz1PZS5zZW50'@;
put 'KCksWzIsbmV3IFByb21pc2UoZnVuY3Rpb24oSGUsRWUpe3JldHVybiBFKHhlLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgTGU9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKE5lKXtzd2l0Y2goTmUubGFiZWwpe2Nhc2UgMDpyZXR1cm4gZyBpbnN0YW5jZW9mIFYuTG9naW5SZXF1'@;
put 'aXJlZEVycm9yPyh0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIExlLmV4ZWN1dGUoYWUsc2UsZGUsbGUsY2UsRykudGhlbihmdW5jdGlvbihLZSl7SGUoS2UpfSxmdW5jdGlvbihLZSl7RWUoS2UpfSl9KSx5P1s0LHkoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTpO'@;
put 'ZS5zZW50KCksTmUubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAzOkVlKG5ldyBWLkVycm9yUmVzcG9uc2UoZz8ubWVzc2FnZSxnKSksTmUubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzJdfX0pfSl9KV07Y2FzZSA0OkgrPWoubGVuZ3RoPjA/IiZfam9iPSIrajoiIixqLmxlbmd0aD4w'@;
put 'JiYoSD0oSCs9IiZfam9iPSIraikucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxIKz1kZS5jb250ZXh0TmFtZSYmIS9ccy8udGVzdChkZS5jb250ZXh0TmFtZSk/IiZfY29udGV4dG5hbWU9Ii5jb25jYXQoZGUuY29udGV4dE5hbWUpOiIiLE9lLmxhYmVsPTU7Y2FzZSA1Omlm'@;
put 'KFM9SSh7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoZGUpKSx4PSgwLHouZ2V0Rm9ybURhdGEpKCksc2UpaWYoXz1KU09OLnN0cmluZ2lmeShzZSksZGUuc2VydmVyVHlwZT09PU4uU2VydmVyVHlwZS5TYXM5fHxfLmxlbmd0aD41ZTV8fF8uaW5jbHVkZXMoIjsiKSl0cnl7eD0oMCxaLmdlbmVy'@;
put 'YXRlRmlsZVVwbG9hZEZvcm0pKHgsc2UpfWNhdGNoKEhlKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgVi5FcnJvclJlc3BvbnNlKEhlPy5tZXNzYWdlLEhlKSldfWVsc2UgdHJ5e3A9KDAsVy5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9ybSkoeCxzZSksSz1wLnJlcXVlc3RQYXJhbXMseD1w'@;
put 'LmZvcm1EYXRhLFM9SShJKHt9LFMpLEspfWNhdGNoKEhlKXtyZXR1cm5bMixQcm9taXNlLnJlamVjdChuZXcgVi5FcnJvclJlc3BvbnNlKEhlPy5tZXNzYWdlLEhlKSldfWZvcihuZSBpbiBTKVMuaGFzT3duUHJvcGVydHkobmUpJiZ4LmFwcGVuZChuZSxTW25lXSk7cmV0dXJuIHVlPXggaW5z'@;
put 'dGFuY2VvZiBCJiZ0eXBlb2YgRm9ybURhdGE+InUiPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iLmNvbmNhdCh4LmdldEJvdW5kYXJ5KCkpOnZvaWQgMCxbMixuZXcgUHJvbWlzZShmdW5jdGlvbihIZSxFZSl7eGUucmVxdWVzdENsaWVudC5wb3N0KEgseCxjZT8uYWNjZXNzX3Rv'@;
put 'a2VuLHVlKS50aGVuKGZ1bmN0aW9uKExlKXtyZXR1cm4gRSh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE5lLEtlO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oVWUpe3N3aXRjaChVZS5sYWJlbCl7Y2FzZSAwOmlmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KExlLGFl'@;
put 'LGRlLmRlYnVnKSxOZT1MZS5yZXN1bHQsIWRlLmRlYnVnKXJldHVyblszLDRdO3N3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cmV0dXJuWzMsMV07Y2FzZSBOLlNlcnZlclR5cGUuU2FzOTpyZXR1cm5bMywzXX1yZXR1cm5bMyw0XTtjYXNlIDE6cmV0'@;
put 'dXJuWzQsKDAsei5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlKShMZS5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xpZW50LHRoaXMuc2VydmVyVXJsKV07Y2FzZSAyOnJldHVybiBOZT1VZS5zZW50KCksWzMsNF07Y2FzZSAzOnJldHVybiBOZT0ic3RyaW5nIj09dHlwZW9mIExlLnJlc3VsdD8oMCx6'@;
put 'LnBhcnNlV2Vib3V0UmVzcG9uc2UpKExlLnJlc3VsdCxIKTpMZS5yZXN1bHQsWzMsNF07Y2FzZSA0OnJldHVybiBLZT0oMCx6LmFwcGVuZEV4dHJhUmVzcG9uc2VBdHRyaWJ1dGVzKSh7cmVzdWx0Ok5lLGxvZzpMZS5sb2d9LEcpLEhlKEtlKSxbMl19fSl9KX0pLmNhdGNoKGZ1bmN0aW9uKExl'@;
put 'KXtyZXR1cm4gRSh4ZSx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIE5lPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihLZSl7c3dpdGNoKEtlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIExlIGluc3RhbmNlb2YgVi5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5h'@;
put 'cHBlbmRSZXF1ZXN0KExlLGFlLGRlLmRlYnVnKSxFZShuZXcgVi5FcnJvclJlc3BvbnNlKExlPy5tZXNzYWdlLExlKSkpLExlIGluc3RhbmNlb2YgVi5Mb2dpblJlcXVpcmVkRXJyb3I/KGxlfHxFZShuZXcgVi5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBN'@;
put 'YWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsTGUpKSx0aGlzLmFwcGVuZFdhaXRpbmdSZXF1ZXN0KGZ1bmN0aW9uKCl7cmV0dXJuIE5lLmV4ZWN1dGUoYWUsc2UsZGUsbGUsY2UsRykudGhlbihmdW5jdGlvbihVZSl7SGUoVWUpfSxmdW5jdGlvbihV'@;
put 'ZSl7RWUoVWUpfSl9KSx5P1s0LHkoKV06WzMsMl0pOlszLDNdO2Nhc2UgMTpLZS5zZW50KCksS2UubGFiZWw9MjtjYXNlIDI6cmV0dXJuWzMsNF07Y2FzZSAzOkVlKG5ldyBWLkVycm9yUmVzcG9uc2UoTGU/Lm1lc3NhZ2UsTGUpKSxLZS5sYWJlbD00O2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0p'@;
put 'fSldfX0pfSl9LHRlLnByb3RvdHlwZS5nZXRKb2JVcmk9ZnVuY3Rpb24oYWUpe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBzZSxkZSxsZSxjZSxHLHk7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihMKXtzd2l0Y2goTC5sYWJlbCl7Y2FzZSAwOmlmKCF0aGlzLnNh'@;
put 'c1ZpeWFBcGlDbGllbnQpcmV0dXJuWzIsIiJdO2lmKHNlPSIiLCgwLHouaXNSZWxhdGl2ZVBhdGgpKGFlKT8oY2U9YWUuc3BsaXQoIi8iKSxkZT1jZS5sZW5ndGg+MT9jZVswXToiIixsZT1jZS5sZW5ndGg+MT9jZVsxXToiIik6KGNlPWFlLnNwbGl0KCIvIiksbGU9Y2UucG9wKCl8fCIiLGRl'@;
put 'PWNlLmpvaW4oIi8iKSksIWxlKXRocm93IG5ldyBFcnJvcigiSm9iIG5hbWUgaXMgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybls0LHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoZGUpXTtjYXNlIDE6cmV0dXJuKEc9TC5zZW50KCkpJiYoeT1HLmZpbmQo'@;
put 'ZnVuY3Rpb24oSCl7cmV0dXJuIEgubmFtZT09PWxlJiYiam9iRGVmaW5pdGlvbiI9PT1ILmNvbnRlbnRUeXBlfSkpJiYoc2U9eS51cmkpLFsyLHNlXX19KX0pfSx0ZX0oRCg2MTE4KS5CYXNlSm9iRXhlY3V0b3IpO0EuV2ViSm9iRXhlY3V0b3I9cX0sODIxNzpmdW5jdGlvbih3LEEsRCl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihJLEUsayxCKXt2b2lkIDA9PT1CJiYoQj1rKTt2YXIgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUsayk7TiYmISgiZ2V0ImluIE4/IUUuX19lc01vZHVs'@;
put 'ZTpOLndyaXRhYmxlfHxOLmNvbmZpZ3VyYWJsZSl8fChOPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBFW2tdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLEIsTil9OmZ1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspLElbQl09RVtrXX0pLFU9dGhpcyYm'@;
put 'dGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksRSl7Zm9yKHZhciBrIGluIEkpImRlZmF1bHQiPT09a3x8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsayl8fFAoRSxJLGspfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks'@;
put 'VShEKDE1NzApLEEpLFUoRCgzNDkxKSxBKSxVKEQoNDQ0NiksQSksVShEKDYxMTgpLEEpLFUoRCgyNjkzKSxBKSxVKEQoNjA4NCksQSksVShEKDEwNjUpLEEpfSw0NTg4OmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9RCg0MTU1KSxVPUQoNTEwOCksST10aGlzJiZ0aGlzLl9f'@;
put 'YXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBJPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGxlKXtmb3IodmFyIGNlLEc9MSx5PWFyZ3VtZW50cy5sZW5ndGg7Rzx5O0crKylmb3IodmFyIEwgaW4gY2U9YXJndW1lbnRzW0ddKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChj'@;
put 'ZSxMKSYmKGxlW0xdPWNlW0xdKTtyZXR1cm4gbGV9LEkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxFPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihsZSxjZSxHLHkpe3JldHVybiBuZXcoR3x8KEc9UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSCl7ZnVuY3Rpb24gaih4KXt0cnl7Uyh5Lm5l'@;
put 'eHQoeCkpfWNhdGNoKF8pe0goXyl9fWZ1bmN0aW9uIGcoeCl7dHJ5e1MoeS50aHJvdyh4KSl9Y2F0Y2goXyl7SChfKX19ZnVuY3Rpb24gUyh4KXt2YXIgXzt4LmRvbmU/TCh4LnZhbHVlKTooXz14LnZhbHVlLF8gaW5zdGFuY2VvZiBHP186bmV3IEcoZnVuY3Rpb24ocCl7cChfKX0pKS50aGVu'@;
put 'KGosZyl9UygoeT15LmFwcGx5KGxlLGNlfHxbXSkpLm5leHQoKSl9KX0saz10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihsZSxjZSl7dmFyIEcseSxMLEgsaj17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZMWzBdKXRocm93IExbMV07cmV0dXJuIExbMV19LHRyeXM6W10s'@;
put 'b3BzOltdfTtyZXR1cm4gSD17bmV4dDpnKDApLHRocm93OmcoMSkscmV0dXJuOmcoMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihIW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLEg7ZnVuY3Rpb24gZyhTKXtyZXR1cm4gZnVuY3Rpb24oeCl7cmV0dXJu'@;
put 'IGZ1bmN0aW9uKF8pe2lmKEcpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpO2Zvcig7ajspdHJ5e2lmKEc9MSx5JiYoTD0yJl9bMF0/eS5yZXR1cm46X1swXT95LnRocm93fHwoKEw9eS5yZXR1cm4pJiZMLmNhbGwoeSksMCk6eS5uZXh0KSYm'@;
put 'IShMPUwuY2FsbCh5LF9bMV0pKS5kb25lKXJldHVybiBMO3N3aXRjaCh5PTAsTCYmKF89WzImX1swXSxMLnZhbHVlXSksX1swXSl7Y2FzZSAwOmNhc2UgMTpMPV87YnJlYWs7Y2FzZSA0OnJldHVybiBqLmxhYmVsKysse3ZhbHVlOl9bMV0sZG9uZTohMX07Y2FzZSA1OmoubGFiZWwrKyx5PV9b'@;
put 'MV0sXz1bMF07Y29udGludWU7Y2FzZSA3Ol89ai5vcHMucG9wKCksai50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoTD0oTD1qLnRyeXMpLmxlbmd0aD4wJiZMW0wubGVuZ3RoLTFdKXx8NiE9PV9bMF0mJjIhPT1fWzBdKSl7aj0wO2NvbnRpbnVlfWlmKDM9PT1fWzBdJiYoIUx8'@;
put 'fF9bMV0+TFswXSYmX1sxXTxMWzNdKSl7ai5sYWJlbD1fWzFdO2JyZWFrfWlmKDY9PT1fWzBdJiZqLmxhYmVsPExbMV0pe2oubGFiZWw9TFsxXSxMPV87YnJlYWt9aWYoTCYmai5sYWJlbDxMWzJdKXtqLmxhYmVsPUxbMl0sai5vcHMucHVzaChfKTticmVha31MWzJdJiZqLm9wcy5wb3AoKSxq'@;
put 'LnRyeXMucG9wKCk7Y29udGludWV9Xz1jZS5jYWxsKGxlLGopfWNhdGNoKHApe189WzYscF0seT0wfWZpbmFsbHl7Rz1MPTB9aWYoNSZfWzBdKXRocm93IF9bMV07cmV0dXJue3ZhbHVlOl9bMF0/X1sxXTp2b2lkIDAsZG9uZTohMH19KFtTLHhdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHko'@;
put 'QSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS50aHJvd0lmRXJyb3I9QS5SZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgQj1EKDk2NjkpLE49RCg4MzczKSxWPUQoMTUyNyksWj1EKDEzOTUpLFc9RCgyODEzKSx6PUQoOTc3OCkscT1EKDk1MjYpLFE9RCg1OTI4KSx0ZT1EKDEwMDUpLGFlPUQo'@;
put 'OTUzOSksc2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBsZShjZSxHLHksTCl7dmFyIEg9dGhpczt0aGlzLmJhc2VVcmw9Y2UsdGhpcy5yZXF1ZXN0cz1bXSx0aGlzLnJlcXVlc3RzTGltaXQ9MTAsdGhpcy52ZXJib3NlTW9kZT0hMSx0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToi'@;
put 'In0sdGhpcy5nZXRSZXF1ZXN0cz1mdW5jdGlvbigpe3JldHVybiBILnJlcXVlc3RzfSx0aGlzLmNsZWFyUmVxdWVzdHM9ZnVuY3Rpb24oKXtILnJlcXVlc3RzPVtdfSx0aGlzLmF1dGhvcml6ZT1mdW5jdGlvbihqKXtyZXR1cm4gRShILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZyxT'@;
put 'LHgsXyxwLEMsSyxuZSx1ZSxoZSx4ZSxPZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEhlKXtzd2l0Y2goSGUubGFiZWwpe2Nhc2UgMDpmb3IoUz17fSx4PWouc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0sKF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlu'@;
put 'bmVySFRNTD14LHA9Xy5xdWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpLGc9cD90aGlzLmJhc2VVcmwrcC5nZXRBdHRyaWJ1dGUoImFjdGlvbiIpOm51bGwsQz1wPy5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dCIpLEs9MCxuZT1DO0s8bmUubGVuZ3RoO0srKykidXNl'@;
put 'cl9vYXV0aF9hcHByb3ZhbCI9PT0odWU9bmVbS10pLm5hbWUmJih1ZS52YWx1ZT0idHJ1ZSIpLFNbdWUubmFtZV09dWUudmFsdWU7Zm9yKE9lIGluKGhlPU9iamVjdC5rZXlzKFMpLmZpbmQoZnVuY3Rpb24oRWUpe3JldHVybiBFZT8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcygiY3NyZiIpfSkp'@;
put 'JiYodGhpcy5jc3JmVG9rZW4udmFsdWU9U1toZV0sdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZT10aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lfHwieC1jc3JmLXRva2VuIikseGU9bmV3IEZvcm1EYXRhLFMpUy5oYXNPd25Qcm9wZXJ0eShPZSkmJnhlLmFwcGVuZChPZSxTW09lXSk7aWYoIWcp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJBdXRoIEZvcm0gVVJMIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybls0LHRoaXMuaHR0cENsaWVudC5wb3N0KGcseGUse3Jlc3BvbnNlVHlwZToidGV4dCIsaGVhZGVyczp7QWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn19KS50'@;
put 'aGVuKGZ1bmN0aW9uKEVlKXtyZXR1cm4gRWUuZGF0YX0pLmNhdGNoKGZ1bmN0aW9uKEVlKXsoUC5sb2dnZXJ8fFUpLmVycm9yKEVlKX0pXTtjYXNlIDE6cmV0dXJuWzIsSGUuc2VudCgpXX19KX0pfSx0aGlzLnByZXR0aWZ5U3RyaW5nPWZ1bmN0aW9uKGope3JldHVybigwLGFlLmluc3BlY3Qp'@;
put 'KGose2NvbG9yczoiYmxlYWNoZWQiIT09SC52ZXJib3NlTW9kZX0pfSx0aGlzLnBhcnNlSW50ZXJjZXB0ZWRCb2R5PWZ1bmN0aW9uKGope2lmKCFqKXJldHVybiIiO3ZhciBnO2lmKCJzdHJpbmciPT10eXBlb2Ygail0cnl7Zz1KU09OLnBhcnNlKGopfWNhdGNoe2c9an1lbHNlIGc9ajt2YXIg'@;
put 'Uz1ILnByZXR0aWZ5U3RyaW5nKGcpLnNwbGl0KCJcbiIpO3JldHVybiBTLmxlbmd0aD41MSYmKFMuc3BsaWNlKDUwKSxTLnB1c2goIi4uLiIpKSxTLmpvaW4oIlxuIil9LHRoaXMuZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrPWZ1bmN0aW9uKGope3ZhciBnLFM9Ik5vdCBwcm92aWRlZCIs'@;
put 'eD17X2hlYWRlcjoiIi5jb25jYXQoUywiXG4iKSxyZXM6e3Jhd0hlYWRlcnM6W1NdfX0sXz1qO2lmKEIuZGVmYXVsdC5pc0F4aW9zRXJyb3Ioaikpe3ZhciBwPWoucmVzcG9uc2UsQz1qLnJlcXVlc3QsSz1qLmNvbmZpZztpZihwKV89cDtlbHNle2lmKEMpe3ZhciBuZT1DLl9oZWFkZXIsdWU9'@;
put 'Qy5fY3VycmVudFJlcXVlc3Q7bmU/eC5faGVhZGVyPW5lOnVlJiZ1ZS5faGVhZGVyJiYoeC5faGVhZGVyPXVlLl9oZWFkZXIpO3ZhciBoZT1DLnJlcztoZSYmaGUucmF3SGVhZGVycyYmKHgucmVzLnJhd0hlYWRlcnM9aGUucmF3SGVhZGVycyl9Xz17c3RhdHVzOlMscmVxdWVzdDp4LGNvbmZp'@;
put 'ZzpLfHx7ZGF0YTpTfSxkYXRhOlN9fX12YXIgeGU9Xy5zdGF0dXMsRWU9Xy5kYXRhLExlPV8uY29uZmlnLmRhdGEsTmU9Xy5yZXF1ZXN0fHx4LEtlPU5lLl9oZWFkZXIsVWU9TmUucmVzLnJhd0hlYWRlcnMucmVkdWNlKGZ1bmN0aW9uKGF0LEZlLENlKXtyZXR1cm4gYXQrKENlJTI9PTA/IiIu'@;
put 'Y29uY2F0KDA9PT1DZT8iIjoiXG4iKS5jb25jYXQoRmUpOiI6ICIuY29uY2F0KEZlKSl9LCIiKSxYZT1ILnBhcnNlSW50ZXJjZXB0ZWRCb2R5KEVlKTtyZXR1cm4gbnVsbD09PShnPVAubG9nZ2VyKXx8dm9pZCAwPT09Z3x8Zy5pbmZvKCJIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpc'@;
put 'biIuY29uY2F0KEtlKS5jb25jYXQoSC5wYXJzZUludGVyY2VwdGVkQm9keShMZSksIlxuXG5IVFRQIFJlc3BvbnNlIENvZGU6ICIpLmNvbmNhdChILnByZXR0aWZ5U3RyaW5nKHhlKSwiXG5cbkhUVFAgUmVzcG9uc2UgKGZpcnN0IDUwIGxpbmVzKTpcbiIpLmNvbmNhdChVZSkuY29uY2F0KFhl'@;
put 'PyJcblxuIi5jb25jYXQoWGUpOiIiLCJcbiIpKSxqfSx0aGlzLnNldFZlcmJvc2VNb2RlPWZ1bmN0aW9uKGope0gudmVyYm9zZU1vZGU9aixILnZlcmJvc2VNb2RlP0guZW5hYmxlVmVyYm9zZU1vZGUoKTpILmRpc2FibGVWZXJib3NlTW9kZSgpfSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlPWZ1'@;
put 'bmN0aW9uKGosZyl7dm9pZCAwPT09aiYmKGo9SC5kZWZhdWx0SW50ZXJjZXB0aW9uQ2FsbEJhY2spLHZvaWQgMD09PWcmJihnPUguZGVmYXVsdEludGVyY2VwdGlvbkNhbGxCYWNrKSxILmh0dHBJbnRlcmNlcHRvcj1ILmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShqLGcp'@;
put 'fSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT1mdW5jdGlvbigpe0guaHR0cEludGVyY2VwdG9yJiZILmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmVqZWN0KEguaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPWZ1bmN0aW9uKGosZyl7dmFyIFM9e307cmV0dXJuImFw'@;
put 'cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1nJiYoU1siQ29udGVudC1UeXBlIl09ZyksUy5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09Zz8iYXBwbGljYXRpb24vanNvbiI6IiovKiIsaiYmKFMuQXV0aG9yaXphdGlvbj0iQmVhcmVyICIuY29uY2F0KGopKSxILmNzcmZU'@;
put 'b2tlbi5oZWFkZXJOYW1lJiZILmNzcmZUb2tlbi52YWx1ZSYmKFNbSC5jc3JmVG9rZW4uaGVhZGVyTmFtZV09SC5jc3JmVG9rZW4udmFsdWUpLFN9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPWZ1bmN0aW9uKGope3ZhciBnPUgucGFyc2VDc3JmVG9rZW4oaik7ZyYmKEgu'@;
put 'ZmlsZVVwbG9hZENzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbj1mdW5jdGlvbihqKXt2YXIgZz1ILnBhcnNlQ3NyZlRva2VuKGopO2cmJihILmNzcmZUb2tlbj1nKX0sdGhpcy5wYXJzZUNzcmZUb2tlbj1mdW5jdGlvbihqKXt2YXIgZyxTPW51bGw9PT0oZz1qLmhlYWRl'@;
put 'cnNbIngtY3NyZi1oZWFkZXIiXSl8fHZvaWQgMD09PWc/dm9pZCAwOmcudG9Mb3dlckNhc2UoKTtpZihTKXJldHVybntoZWFkZXJOYW1lOlMsdmFsdWU6ai5oZWFkZXJzW1NdfHwiIn19LHRoaXMuaGFuZGxlRXJyb3I9ZnVuY3Rpb24oaixnLFMpe3JldHVybiB2b2lkIDA9PT1TJiYoUz0hMSks'@;
put 'RShILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeCxfO3JldHVybiBrKHRoaXMsZnVuY3Rpb24ocCl7c3dpdGNoKHAubGFiZWwpe2Nhc2UgMDpyZXR1cm4geD1qLnJlc3BvbnNlLGogaW5zdGFuY2VvZiBaLkF1dGhvcml6ZUVycm9yP1s0LHRoaXMuaHR0cENsaWVudC5nZXQoai5jb25m'@;
put 'aXJtVXJsLHtyZXNwb25zZVR5cGU6InRleHQiLGhlYWRlcnM6eyJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIixBY2NlcHQ6IiovKiJ9fSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGdldHRpbmcgZXJyb3IgY29uZmlybVVybC4g'@;
put 'Iil9KV06WzMsNV07Y2FzZSAxOnJldHVybiBfPXAuc2VudCgpLCgwLFYuaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKF8/LmRhdGEpP1s0LHRoaXMuYXV0aG9yaXplKF8uZGF0YSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGF1dGhv'@;
put 'cml6aW5nIHJlcXVlc3QuICIpfSldOlszLDNdO2Nhc2UgMjpwLnNlbnQoKSxwLmxhYmVsPTM7Y2FzZSAzOnJldHVybls0LGcoKS5jYXRjaChmdW5jdGlvbihDKXt0aHJvdygwLHoucHJlZml4TWVzc2FnZSkoQywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9y'@;
put 'LiAiKX0pXTtjYXNlIDQ6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgNTppZihqIGluc3RhbmNlb2YgWi5Mb2dpblJlcXVpcmVkRXJyb3IpdGhyb3cgdGhpcy5jbGVhckNzcmZUb2tlbnMoKSxqO3JldHVybiBqIGluc3RhbmNlb2YgdGUuSW52YWxpZFNBU2pzQ3NyZkVycm9yP1s0LHRoaXMuaHR0'@;
put 'cENsaWVudC5nZXQoIi8iLHt3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKEMpe3ZhciBLLG5lPW51bGw9PT0oSz0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3Nj'@;
put 'cmlwdD4vLmV4ZWMoQy5kYXRhKSl8fHZvaWQgMD09PUs/dm9pZCAwOktbMV07bmUmJihkb2N1bWVudC5jb29raWU9bmUpfSkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KV06WzMsOF07'@;
put 'Y2FzZSA2OnJldHVybiBwLnNlbnQoKSxbNCxnKCkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCx6LnByZWZpeE1lc3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV07Y2FzZSA3OnJldHVyblsyLHAuc2VudCgpXTtjYXNlIDg6cmV0'@;
put 'dXJuIDQwMyE9PXg/LnN0YXR1cyYmNDQ5IT09eD8uc3RhdHVzP1szLDExXToodGhpcy5wYXJzZUFuZFNldENzcmZUb2tlbih4KSx0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lJiZ0aGlzLmNzcmZUb2tlbi52YWx1ZT9bNCxnKCkuY2F0Y2goZnVuY3Rpb24oQyl7dGhyb3coMCx6LnByZWZpeE1l'@;
put 'c3NhZ2UpKEMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBjYWxsYmFjayBpbiBoYW5kbGVFcnJvci4gIil9KV06WzMsMTBdKTtjYXNlIDk6cmV0dXJuWzIscC5zZW50KCldO2Nhc2UgMTA6dGhyb3cgajtjYXNlIDExOmlmKDQwND09PXg/LnN0YXR1cyl0aHJvdyBuZXcgWi5Ob3RGb3VuZEVycm9y'@;
put 'KHguY29uZmlnLnVybCk7aWYoNTAyPT09eD8uc3RhdHVzKXtpZihTKXRocm93IG5ldyBaLkludGVybmFsU2VydmVyRXJyb3I7cmV0dXJuWzJdfXAubGFiZWw9MTI7Y2FzZSAxMjp0aHJvdyBqLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09ai5jb2Rl'@;
put 'P25ldyBaLkNlcnRpZmljYXRlRXJyb3Ioai5tZXNzYWdlKTpqLm1lc3NhZ2U/ajooMCx6LnByZWZpeE1lc3NhZ2UpKGosIkVycm9yIHdoaWxlIGhhbmRsaW5nIGVycm9yLiAiKX19KX0pfSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoY2UsRykseSYmKHRoaXMucmVxdWVzdHNMaW1pdD15KSxMJiYo'@;
put 'dGhpcy5zZXRWZXJib3NlTW9kZShMKSx0aGlzLmVuYWJsZVZlcmJvc2VNb2RlKCkpfXJldHVybiBsZS5wcm90b3R5cGUuc2V0Q29uZmlnPWZ1bmN0aW9uKGNlLEcpe3RoaXMuY3JlYXRlSHR0cENsaWVudChjZSxHKX0sbGUucHJvdG90eXBlLnNhdmVMb2NhbFN0b3JhZ2VUb2tlbj1mdW5jdGlv'@;
put 'bihjZSxHKXtsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiYWNjZXNzVG9rZW4iLGNlKSxsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgicmVmcmVzaFRva2VuIixHKX0sbGUucHJvdG90eXBlLmdldENzcmZUb2tlbj1mdW5jdGlvbihjZSl7cmV0dXJuIHZvaWQgMD09PWNlJiYoY2U9ImdlbmVyYWwiKSwiZmls'@;
put 'ZSI9PT1jZT90aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW46dGhpcy5jc3JmVG9rZW59LGxlLnByb3RvdHlwZS5jbGVhckNzcmZUb2tlbnM9ZnVuY3Rpb24oKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1l'@;
put 'OiIiLHZhbHVlOiIifX0sbGUucHJvdG90eXBlLmNsZWFyTG9jYWxTdG9yYWdlVG9rZW5zPWZ1bmN0aW9uKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIiwiIiksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsIiIpfSxsZS5wcm90b3R5cGUuZ2V0QmFzZVVy'@;
put 'bD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuYmFzZVVSTHx8IiJ9LGxlLnByb3RvdHlwZS5hcHBlbmRSZXF1ZXN0PWZ1bmN0aW9uKGNlLEcseSl7dmFyIEw9IiIsSD0iIixqPW51bGw7eSYmKGNlPy5sb2c/KEw9KDAsUS5wYXJzZVNvdXJjZUNvZGUpKGNlLmxv'@;
put 'ZyksSD0oMCxRLnBhcnNlR2VuZXJhdGVkQ29kZSkoY2UubG9nKSxqPWNlPy5yZXN1bHQ/Y2UucmVzdWx0LldPUks6Y2UubG9nKTpjZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBjZS5yZXN1bHQmJihMPSgwLFEucGFyc2VTb3VyY2VDb2RlKShjZS5yZXN1bHQpLEg9KDAsUS5wYXJzZUdl'@;
put 'bmVyYXRlZENvZGUpKGNlLnJlc3VsdCkpLGo9Y2UucmVzdWx0LldPUkspKTt2YXIgZz0ic3RyaW5nIj09dHlwZW9mIGNlPy5yZXN1bHQ/Y2U/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShjZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmNlPy5sb2d8fGd8fGNl'@;
put 'LHNlcnZpY2VMaW5rOkcsdGltZXN0YW1wOm5ldyBEYXRlLHNvdXJjZUNvZGU6TCxnZW5lcmF0ZWRDb2RlOkgsU0FTV09SSzpqfSksdGhpcy5yZXF1ZXN0cy5sZW5ndGg+dGhpcy5yZXF1ZXN0c0xpbWl0JiZ0aGlzLnJlcXVlc3RzLnNwbGljZSgwLDEpfSxsZS5wcm90b3R5cGUuZ2V0PWZ1bmN0'@;
put 'aW9uKGNlLEcseSxMLEgpe3JldHVybiB2b2lkIDA9PT15JiYoeT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PUwmJihMPXt9KSx2b2lkIDA9PT1IJiYoSD0hMSksRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaixnLFM9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9u'@;
put 'KHgpe3JldHVybiBqPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoRyx5KSksTCksZz17aGVhZGVyczpqLHJlc3BvbnNlVHlwZToidGV4dC9wbGFpbiI9PT15PyJ0ZXh0IjoianNvbiIsd2l0aENyZWRlbnRpYWxzOiEwfSwidGV4dC9wbGFpbiI9PT15JiYoZy50cmFuc2Zvcm1SZXNwb25zZT12b2lk'@;
put 'IDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQoY2UsZykudGhlbihmdW5jdGlvbihfKXtyZXR1cm4oMCxBLnRocm93SWZFcnJvcikoXyksUy5wYXJzZVJlc3BvbnNlKF8pfSkuY2F0Y2goZnVuY3Rpb24oXyl7cmV0dXJuIEUoUyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHA9dGhpczty'@;
put 'ZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihfLGZ1bmN0aW9uKCl7cmV0dXJuIHAuZ2V0KGNlLEcseSxMKS5jYXRjaChmdW5jdGlvbihLKXt0aHJvdygwLHoucHJlZml4TWVzc2FnZSkoSywiRXJyb3Igd2hp'@;
put 'bGUgZXhlY3V0aW5nIGhhbmRsZSBlcnJvciBjYWxsYmFjay4gIil9KX0sSCldO2Nhc2UgMTpyZXR1cm5bMixDLnNlbnQoKV19fSl9KX0pXX0pfSl9LGxlLnByb3RvdHlwZS5wb3N0PWZ1bmN0aW9uKGNlLEcseSxMLEgsail7cmV0dXJuIHZvaWQgMD09PUwmJihMPSJhcHBsaWNhdGlvbi9qc29u'@;
put 'Iiksdm9pZCAwPT09SCYmKEg9e30pLHZvaWQgMD09PWomJihqPXt9KSxFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBnLFM9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKHgpe3JldHVybiBnPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoeSxMKSksSCksWzIsdGhpcy5odHRw'@;
put 'Q2xpZW50LnBvc3QoY2UsRyxJKHtoZWFkZXJzOmcsd2l0aENyZWRlbnRpYWxzOiEwfSxqKSkudGhlbihmdW5jdGlvbihfKXtyZXR1cm4oMCxBLnRocm93SWZFcnJvcikoXyksUy5wYXJzZVJlc3BvbnNlKF8pfSkuY2F0Y2goZnVuY3Rpb24oXyl7cmV0dXJuIEUoUyx2b2lkIDAsdm9pZCAwLGZ1'@;
put 'bmN0aW9uKCl7dmFyIHA9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKEMpe3N3aXRjaChDLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5oYW5kbGVFcnJvcihfLGZ1bmN0aW9uKCl7cmV0dXJuIHAucG9zdChjZSxHLHksTCxIKX0pXTtjYXNlIDE6cmV0dXJuWzIsQy5zZW50KCldfX0p'@;
put 'fSl9KV19KX0pfSxsZS5wcm90b3R5cGUucHV0PWZ1bmN0aW9uKGNlLEcseSxMKXtyZXR1cm4gdm9pZCAwPT09TCYmKEw9e30pLEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEgsaj10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIEg9SShJKHt9LHRoaXMu'@;
put 'Z2V0SGVhZGVycyh5LCJhcHBsaWNhdGlvbi9qc29uIikpLEwpLFsyLHRoaXMuaHR0cENsaWVudC5wdXQoY2UsRyx7aGVhZGVyczpILHdpdGhDcmVkZW50aWFsczohMH0pLnRoZW4oZnVuY3Rpb24oUyl7cmV0dXJuKDAsQS50aHJvd0lmRXJyb3IpKFMpLGoucGFyc2VSZXNwb25zZShTKX0pLmNh'@;
put 'dGNoKGZ1bmN0aW9uKFMpe3JldHVybiBFKGosdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciB4PXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihfKXtzd2l0Y2goXy5sYWJlbCl7Y2FzZSAwOnJldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoUyxmdW5jdGlvbigpe3JldHVybiB4LnB1dChj'@;
put 'ZSxHLHksTCl9KV07Y2FzZSAxOnJldHVyblsyLF8uc2VudCgpXX19KX0pfSldfSl9KX0sbGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihjZSxHKXtyZXR1cm4gRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeSxMPXRoaXM7cmV0dXJuIGsodGhpcyxmdW5jdGlvbihIKXty'@;
put 'ZXR1cm4geT10aGlzLmdldEhlYWRlcnMoRywiYXBwbGljYXRpb24vanNvbiIpLFsyLHRoaXMuaHR0cENsaWVudC5kZWxldGUoY2Use2hlYWRlcnM6eSx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKGope3JldHVybigwLEEudGhyb3dJZkVycm9yKShqKSxMLnBhcnNlUmVzcG9u'@;
put 'c2Uoail9KS5jYXRjaChmdW5jdGlvbihqKXtyZXR1cm4gRShMLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgZz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlzLmhhbmRsZUVycm9yKGosZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4gZy5kZWxldGUoY2UsRyl9KV07Y2FzZSAxOnJldHVyblsyLFMuc2VudCgpXX19KX0pfSldfSl9KX0sbGUucHJvdG90eXBlLnBhdGNoPWZ1bmN0aW9uKGNlLEcseSl7cmV0dXJuIHZvaWQgMD09PUcmJihHPXt9KSxFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBMLEg9dGhp'@;
put 'cztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGope3JldHVybiBMPXRoaXMuZ2V0SGVhZGVycyh5LCJhcHBsaWNhdGlvbi9qc29uIiksWzIsdGhpcy5odHRwQ2xpZW50LnBhdGNoKGNlLEcse2hlYWRlcnM6TCx3aXRoQ3JlZGVudGlhbHM6ITB9KS50aGVuKGZ1bmN0aW9uKGcpe3JldHVybigwLEEu'@;
put 'dGhyb3dJZkVycm9yKShnKSxILnBhcnNlUmVzcG9uc2UoZyl9KS5jYXRjaChmdW5jdGlvbihnKXtyZXR1cm4gRShILHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgUz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeCl7c3dpdGNoKHgubGFiZWwpe2Nhc2UgMDpyZXR1cm5bNCx0aGlz'@;
put 'LmhhbmRsZUVycm9yKGcsZnVuY3Rpb24oKXtyZXR1cm4gUy5wYXRjaChjZSxHLHkpfSldO2Nhc2UgMTpyZXR1cm5bMix4LnNlbnQoKV19fSl9KX0pXX0pfSl9LGxlLnByb3RvdHlwZS51cGxvYWRGaWxlPWZ1bmN0aW9uKGNlLEcseSl7dmFyIEw7cmV0dXJuIEUodGhpcyx2b2lkIDAsdm9pZCAw'@;
put 'LGZ1bmN0aW9uKCl7dmFyIEgsaixnO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oUyl7c3dpdGNoKFMubGFiZWwpe2Nhc2UgMDpIPXRoaXMuZ2V0SGVhZGVycyh5LCJhcHBsaWNhdGlvbi9qc29uIiksIShudWxsPT09KEw9dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXx8dm9pZCAwPT09TCkmJkwu'@;
put 'dmFsdWUmJihIW3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4udmFsdWUpLFMubGFiZWw9MTtjYXNlIDE6cmV0dXJuIFMudHJ5cy5wdXNoKFsxLDMsLDRdKSxbNCx0aGlzLmh0dHBDbGllbnQucG9zdChjZSxHLHtoZWFkZXJzOkgs'@;
put 'dHJhbnNmb3JtUmVxdWVzdDpmdW5jdGlvbih4KXtyZXR1cm4geH19KV07Y2FzZSAyOnJldHVyblsyLHtyZXN1bHQ6KGc9Uy5zZW50KCkpLmRhdGEsZXRhZzpnLmhlYWRlcnMuZXRhZ31dO2Nhc2UgMzppZihqPVMuc2VudCgpLDQwMz09PShudWxsPT0oZz1qLnJlc3BvbnNlKT92b2lkIDA6Zy5z'@;
put 'dGF0dXMpfHw0NDk9PT1nPy5zdGF0dXMpe2lmKHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuKGcpLHRoaXMuZmlsZVVwbG9hZENzcmZUb2tlbilyZXR1cm5bMix0aGlzLnVwbG9hZEZpbGUoY2UsRyx5KV07dGhyb3cgan10aHJvdyBqO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0s'@;
put 'bGUucHJvdG90eXBlLnBhcnNlUmVzcG9uc2U9ZnVuY3Rpb24oY2Upe3ZhciBHLHk9Y2U/LmhlYWRlcnM/Y2UuaGVhZGVycy5ldGFnOiIiLEw9ITE7dHJ5e0c9InN0cmluZyI9PXR5cGVvZiBjZS5kYXRhP0pTT04ucGFyc2UoY2UuZGF0YSk6Y2UuZGF0YX1jYXRjaHt0cnl7Rz1KU09OLnBhcnNl'@;
put 'KCgwLFcucGFyc2VXZWJvdXRSZXNwb25zZSkoY2UuZGF0YSkpfWNhdGNoe0c9Y2UuZGF0YX1MPSEwfXZhciBIPXtyZXN1bHQ6RyxldGFnOnksc3RhdHVzOmNlLnN0YXR1c307cmV0dXJuIEwmJihILmxvZz1jZS5kYXRhKSxIfSxsZS5wcm90b3R5cGUuY3JlYXRlSHR0cENsaWVudD1mdW5jdGlv'@;
put 'bihjZSxHKXt2YXIgeT1HP25ldyBOLkFnZW50KEcpOnZvaWQgMDt0aGlzLmh0dHBDbGllbnQ9KDAsUS5jcmVhdGVBeGlvc0luc3RhbmNlKShjZSx5KSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9ZnVuY3Rpb24oTCl7cmV0dXJuIEw+PTIwMCYmTDw9NDAxfX0sbGV9'@;
put 'KCk7QS5SZXF1ZXN0Q2xpZW50PXNlLEEudGhyb3dJZkVycm9yPWZ1bmN0aW9uKGxlKXt2YXIgY2UsRyx5LEwsSCxqLGc7c3dpdGNoKGxlLnN0YXR1cyl7Y2FzZSA0MDA6aWYoIm9iamVjdCI9PXR5cGVvZiBsZS5kYXRhJiYiaW52YWxpZF9ncmFudCI9PT1sZS5kYXRhLmVycm9yKXRocm93IG5l'@;
put 'dyBaLkxvZ2luUmVxdWlyZWRFcnJvcihsZS5kYXRhKTtpZigic3RyaW5nIj09dHlwZW9mIGxlLmRhdGEmJiJpbnZhbGlkIGNzcmYgdG9rZW4hIj09PWxlLmRhdGEudG9Mb3dlckNhc2UoKSl0aHJvdyBuZXcgdGUuSW52YWxpZFNBU2pzQ3NyZkVycm9yO2JyZWFrO2Nhc2UgNDAxOnRocm93Im9i'@;
put 'amVjdCI9PXR5cGVvZiBsZS5kYXRhP25ldyBaLkxvZ2luUmVxdWlyZWRFcnJvcihsZS5kYXRhKTpuZXcgWi5Mb2dpblJlcXVpcmVkRXJyb3J9aWYobnVsbCE9PShHPW51bGw9PT0oY2U9bGUuZGF0YSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5lbnRpdHlJRCkmJnZvaWQgMCE9PUcmJkcuaW5j'@;
put 'bHVkZXMoImxvZ2luIikpdGhyb3cgbmV3IFouTG9naW5SZXF1aXJlZEVycm9yO2lmKCJzdHJpbmciPT10eXBlb2YgbGUuZGF0YSYmKDAsVi5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZCkobGUuZGF0YSkpdGhyb3cgbmV3IFouQXV0aG9yaXplRXJyb3IoIkF1dGhvcml6YXRpb24gcmVxdWlyZWQi'@;
put 'LGxlLnJlcXVlc3QucmVzcG9uc2VVUkwpO2lmKCJzdHJpbmciPT10eXBlb2YgbGUuZGF0YSYmKDAsVi5pc0xvZ0luUmVxdWlyZWQpKGxlLmRhdGEpJiYobnVsbD09PShMPW51bGw9PT0oeT1sZS5jb25maWcpfHx2b2lkIDA9PT15P3ZvaWQgMDp5LnVybCl8fHZvaWQgMD09PUx8fCFMLmluY2x1'@;
put 'ZGVzKCIvU0FTTG9nb24vbG9naW4iKSkpdGhyb3cgbmV3IFouTG9naW5SZXF1aXJlZEVycm9yO2lmKG51bGwhPT0oSD1sZS5kYXRhKSYmdm9pZCAwIT09SCYmSC5hdXRoX3JlcXVlc3QpdGhyb3cgbmV3IFouQXV0aG9yaXplRXJyb3IobGUuZGF0YS5tZXNzYWdlLGxlLnJlcXVlc3QucmVzcG9u'@;
put 'c2VVUkwpO2lmKG51bGwhPT0oZz1udWxsPT09KGo9bGUuY29uZmlnKXx8dm9pZCAwPT09aj92b2lkIDA6ai51cmwpJiZ2b2lkIDAhPT1nJiZnLmluY2x1ZGVzKCJzYXNBdXRoRXJyb3IiKSl0aHJvdyBuZXcgcS5TQVM5QXV0aEVycm9yO3ZhciB4PWRlKGxlLmRhdGEpO2lmKHgpdGhyb3cgeH07'@;
put 'dmFyIGRlPWZ1bmN0aW9uKGxlKXtpZighbGUpcmV0dXJuIG51bGw7dHJ5e3ZhciBjZT1KU09OLnBhcnNlKGxlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihjZS5lcnJvckNvZGUmJmNlLm1lc3NhZ2UpcmV0dXJuIG5ldyBaLkpvYkV4ZWN1dGlvbkVycm9yKGNlLmVycm9yQ29kZSxjZS5t'@;
put 'ZXNzYWdlLGxlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKGxlPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSYmKGo9bGUuc3BsaXQoJ3siZXJyb3JDb2RlJykpLmxlbmd0aD4xKXt2YXIgRz0neyJlcnJvckNvZGUnK2pbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9Jyx5PUpT'@;
put 'T04ucGFyc2UoRy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtyZXR1cm4gbmV3IFouSm9iRXhlY3V0aW9uRXJyb3IoeS5lcnJvckNvZGUseS5tZXNzYWdlLGxlPy5yZXBsYWNlKC9bXG5ccl0vZywiXG4iKSl9fWNhdGNoe310cnl7aWYobGU/Lm1hdGNoKC9zdG9yZWQgcHJvY2VzcyBub3QgZm91'@;
put 'bmQ6IC9pKSYmKGo9bGUuc3BsaXQoL3N0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogL2kpKS5sZW5ndGg+MSl7dmFyIEw9alsxXS5zcGxpdCgiPGk+IilbMV0uc3BsaXQoIjwvaT4iKVswXSxIPUwuZW5kc1dpdGgoInJ1bm5lciIpPyJTQVNKUyBydW5uZXIgbm90IGZvdW5kLiBIZXJlJ3MgdGhl'@;
put 'IGxpbmsgKGh0dHBzOi8vY2xpLnNhc2pzLmlvL2F1dGgvI3Nhc2pzLXJ1bm5lcikgdG8gdGhlIFNBUyBjb2RlIGZvciByZWdpc3RlcmluZyB0aGUgU0FTanMgcnVubmVyIjoiU3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAiLmNvbmNhdChMKTtyZXR1cm4gbmV3IFouSm9iRXhlY3V0aW9uRXJy'@;
put 'b3IoNTAwLEgsIiIpfX1jYXRjaHt9dHJ5e3ZhciBqO2lmKCFsZT8ubWF0Y2goLz4+d2Vib3V0QkVHSU48PC8pJiZsZT8ubWF0Y2goL1N0b3JlZCBQcm9jZXNzIEVycm9yL2kpJiZsZT8ubWF0Y2goL1RoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuL2kpJiYoaj1sZS5zcGxpdCgi'@;
put 'PGgyPlNBUyBMb2c8L2gyPiIpKS5sZW5ndGg+MSl7dmFyIGc9alsxXS5zcGxpdCgiPHByZT4iKVsxXS5zcGxpdCgiPC9wcmU+IilbMF07cmV0dXJuIG5ldyBaLkpvYkV4ZWN1dGlvbkVycm9yKDUwMCxIPSJUaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLiIsZyl9fWNhdGNoe31y'@;
put 'ZXR1cm4gbnVsbH19LDc5NTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQLFU9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChQPWZ1bmN0aW9uKHEsUSl7cmV0dXJuKFA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9u'@;
put 'KHRlLGFlKXt0ZS5fX3Byb3RvX189YWV9fHxmdW5jdGlvbih0ZSxhZSl7Zm9yKHZhciBzZSBpbiBhZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYWUsc2UpJiYodGVbc2VdPWFlW3NlXSl9KShxLFEpfSxmdW5jdGlvbihxLFEpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBR'@;
put 'JiZudWxsIT09USl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKFEpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIHRlKCl7dGhpcy5jb25zdHJ1Y3Rvcj1xfVAocSxRKSxxLnByb3RvdHlwZT1udWxsPT09UT9PYmplY3Qu'@;
put 'Y3JlYXRlKFEpOih0ZS5wcm90b3R5cGU9US5wcm90b3R5cGUsbmV3IHRlKX0pLEk9dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4gST1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihxKXtmb3IodmFyIFEsdGU9MSxhZT1hcmd1bWVudHMubGVuZ3RoO3RlPGFlO3RlKyspZm9y'@;
put 'KHZhciBzZSBpbiBRPWFyZ3VtZW50c1t0ZV0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFEsc2UpJiYocVtzZV09UVtzZV0pO3JldHVybiBxfSxJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocSxRLHRlLGFlKXty'@;
put 'ZXR1cm4gbmV3KHRlfHwodGU9UHJvbWlzZSkpKGZ1bmN0aW9uKHNlLGRlKXtmdW5jdGlvbiBsZSh5KXt0cnl7RyhhZS5uZXh0KHkpKX1jYXRjaChMKXtkZShMKX19ZnVuY3Rpb24gY2UoeSl7dHJ5e0coYWUudGhyb3coeSkpfWNhdGNoKEwpe2RlKEwpfX1mdW5jdGlvbiBHKHkpe3ZhciBMO3ku'@;
put 'ZG9uZT9zZSh5LnZhbHVlKTooTD15LnZhbHVlLEwgaW5zdGFuY2VvZiB0ZT9MOm5ldyB0ZShmdW5jdGlvbihIKXtIKEwpfSkpLnRoZW4obGUsY2UpfUcoKGFlPWFlLmFwcGx5KHEsUXx8W10pKS5uZXh0KCkpfSl9LGs9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24ocSxRKXt2YXIg'@;
put 'dGUsYWUsc2UsZGUsbGU9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmc2VbMF0pdGhyb3cgc2VbMV07cmV0dXJuIHNlWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIGRlPXtuZXh0OmNlKDApLHRocm93OmNlKDEpLHJldHVybjpjZSgyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJv'@;
put 'bCYmKGRlW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLGRlO2Z1bmN0aW9uIGNlKEcpe3JldHVybiBmdW5jdGlvbih5KXtyZXR1cm4gZnVuY3Rpb24oTCl7aWYodGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIp'@;
put 'O2Zvcig7bGU7KXRyeXtpZih0ZT0xLGFlJiYoc2U9MiZMWzBdP2FlLnJldHVybjpMWzBdP2FlLnRocm93fHwoKHNlPWFlLnJldHVybikmJnNlLmNhbGwoYWUpLDApOmFlLm5leHQpJiYhKHNlPXNlLmNhbGwoYWUsTFsxXSkpLmRvbmUpcmV0dXJuIHNlO3N3aXRjaChhZT0wLHNlJiYoTD1bMiZM'@;
put 'WzBdLHNlLnZhbHVlXSksTFswXSl7Y2FzZSAwOmNhc2UgMTpzZT1MO2JyZWFrO2Nhc2UgNDpyZXR1cm4gbGUubGFiZWwrKyx7dmFsdWU6TFsxXSxkb25lOiExfTtjYXNlIDU6bGUubGFiZWwrKyxhZT1MWzFdLEw9WzBdO2NvbnRpbnVlO2Nhc2UgNzpMPWxlLm9wcy5wb3AoKSxsZS50cnlzLnBv'@;
put 'cCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoc2U9KHNlPWxlLnRyeXMpLmxlbmd0aD4wJiZzZVtzZS5sZW5ndGgtMV0pfHw2IT09TFswXSYmMiE9PUxbMF0pKXtsZT0wO2NvbnRpbnVlfWlmKDM9PT1MWzBdJiYoIXNlfHxMWzFdPnNlWzBdJiZMWzFdPHNlWzNdKSl7bGUubGFiZWw9TFsxXTti'@;
put 'cmVha31pZig2PT09TFswXSYmbGUubGFiZWw8c2VbMV0pe2xlLmxhYmVsPXNlWzFdLHNlPUw7YnJlYWt9aWYoc2UmJmxlLmxhYmVsPHNlWzJdKXtsZS5sYWJlbD1zZVsyXSxsZS5vcHMucHVzaChMKTticmVha31zZVsyXSYmbGUub3BzLnBvcCgpLGxlLnRyeXMucG9wKCk7Y29udGludWV9TD1R'@;
put 'LmNhbGwocSxsZSl9Y2F0Y2goSCl7TD1bNixIXSxhZT0wfWZpbmFsbHl7dGU9c2U9MH1pZig1JkxbMF0pdGhyb3cgTFsxXTtyZXR1cm57dmFsdWU6TFswXT9MWzFdOnZvaWQgMCxkb25lOiEwfX0oW0cseV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6'@;
put 'ITB9KSxBLlNhczlSZXF1ZXN0Q2xpZW50PXZvaWQgMDt2YXIgQj1EKDgyMjQpLE49RCg3ODU3KSxWPUQoOTc3OCksWj1EKDQ1ODgpLFc9RCgxMzk1KSx6PWZ1bmN0aW9uKHEpe2Z1bmN0aW9uIFEodGUsYWUpe3ZhciBzZT1xLmNhbGwodGhpcyx0ZSxhZSl8fHRoaXM7cmV0dXJuIHNlLmh0dHBD'@;
put 'bGllbnQuZGVmYXVsdHMubWF4UmVkaXJlY3RzPTAsc2UuaHR0cENsaWVudC5kZWZhdWx0cy52YWxpZGF0ZVN0YXR1cz1mdW5jdGlvbihkZSl7cmV0dXJuIGRlPj0yMDAmJmRlPDMwM30sQi5kZWZhdWx0JiYoKDAsQi5kZWZhdWx0KShzZS5odHRwQ2xpZW50KSxzZS5odHRwQ2xpZW50LmRlZmF1'@;
put 'bHRzLmphcj1uZXcgTi5Db29raWVKYXIpLHNlfXJldHVybiBVKFEscSksUS5wcm90b3R5cGUubG9naW49ZnVuY3Rpb24odGUsYWUsc2Upe3JldHVybiBFKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBkZTtyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGxlKXtzd2l0Y2gobGUubGFi'@;
put 'ZWwpe2Nhc2UgMDpyZXR1cm4gZGU9Ii9Vc2VyIEZvbGRlcnMvIi5jb25jYXQodGUsIi9NeSBGb2xkZXIvc2FzanMvcnVubmVyIiksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj8odGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphci5yZW1vdmVBbGxDb29raWVzKCksWzQsdGhpcy5nZXQo'@;
put 'IiIuY29uY2F0KHNlLCI/X3Byb2dyYW09IikuY29uY2F0KGRlLCImX3VzZXJuYW1lPSIpLmNvbmNhdCh0ZSwiJl9wYXNzd29yZD0iKS5jb25jYXQoYWUpLHZvaWQgMCwidGV4dC9wbGFpbiIpXSk6WzMsMl07Y2FzZSAxOmxlLnNlbnQoKSxsZS5sYWJlbD0yO2Nhc2UgMjpyZXR1cm5bMl19fSl9'@;
put 'KX0sUS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHRlLGFlLHNlLGRlLGxlKXtyZXR1cm4gdm9pZCAwPT09c2UmJihzZT0iYXBwbGljYXRpb24vanNvbiIpLHZvaWQgMD09PWRlJiYoZGU9e30pLHZvaWQgMD09PWxlJiYobGU9ITEpLEUodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFy'@;
put 'IGNlLEcseT10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oTCl7cmV0dXJuIGNlPUkoSSh7fSx0aGlzLmdldEhlYWRlcnMoYWUsc2UpKSxkZSksRz17aGVhZGVyczpjZSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09c2U/InRleHQiOiJqc29uIix3aXRoQ3JlZGVudGlhbHM6ITB9LCJ0'@;
put 'ZXh0L3BsYWluIj09PXNlJiYoRy50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLFsyLHRoaXMuaHR0cENsaWVudC5nZXQodGUsRykudGhlbihmdW5jdGlvbihIKXtyZXR1cm4gMzAyPT09SC5zdGF0dXM/eS5nZXQoSC5oZWFkZXJzLmxvY2F0aW9uLGFlLHNlKTooKDAsWi50aHJvd0lmRXJyb3Ip'@;
put 'KEgpLHkucGFyc2VSZXNwb25zZShIKSl9KS5jYXRjaChmdW5jdGlvbihIKXtyZXR1cm4gRSh5LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgaj10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oZyl7c3dpdGNoKGcubGFiZWwpe2Nhc2UgMDppZihIIGluc3RhbmNlb2YgVy5Kb2JFeGVj'@;
put 'dXRpb25FcnJvcil0aHJvdyBIO3JldHVybls0LHRoaXMuaGFuZGxlRXJyb3IoSCxmdW5jdGlvbigpe3JldHVybiBqLmdldCh0ZSxhZSxzZSxkZSkuY2F0Y2goZnVuY3Rpb24oUyl7dGhyb3coMCxWLnByZWZpeE1lc3NhZ2UpKFMsIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBoYW5kbGUgZXJyb3Ig'@;
put 'Y2FsbGJhY2suICIpfSl9LGxlKS5jYXRjaChmdW5jdGlvbihTKXt0aHJvdygwLFYucHJlZml4TWVzc2FnZSkoUywiRXJyb3Igd2hpbGUgaGFuZGxpbmcgZXJyb3IuICIpfSldO2Nhc2UgMTpyZXR1cm5bMixnLnNlbnQoKV19fSl9KX0pXX0pfSl9LFEucHJvdG90eXBlLnBvc3Q9ZnVuY3Rpb24o'@;
put 'dGUsYWUsc2UsZGUsbGUpe3JldHVybiB2b2lkIDA9PT1kZSYmKGRlPSJhcHBsaWNhdGlvbi9qc29uIiksdm9pZCAwPT09bGUmJihsZT17fSksRSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgY2UsRz10aGlzO3JldHVybiBrKHRoaXMsZnVuY3Rpb24oeSl7cmV0dXJuIGNlPUko'@;
put 'SSh7fSx0aGlzLmdldEhlYWRlcnMoc2UsZGUpKSxsZSksWzIsdGhpcy5odHRwQ2xpZW50LnBvc3QodGUsYWUse2hlYWRlcnM6Y2Usd2l0aENyZWRlbnRpYWxzOiEwfSkudGhlbihmdW5jdGlvbihMKXtyZXR1cm4gRShHLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gayh0aGlzLGZ1'@;
put 'bmN0aW9uKEgpe3N3aXRjaChILmxhYmVsKXtjYXNlIDA6cmV0dXJuIDMwMiE9PUwuc3RhdHVzP1szLDJdOls0LHRoaXMuZ2V0KEwuaGVhZGVycy5sb2NhdGlvbix2b2lkIDAsZGUsbGUpXTtjYXNlIDE6cmV0dXJuWzIsSC5zZW50KCldO2Nhc2UgMjpyZXR1cm4oMCxaLnRocm93SWZFcnJvciko'@;
put 'TCksWzIsdGhpcy5wYXJzZVJlc3BvbnNlKEwpXX19KX0pfSkuY2F0Y2goZnVuY3Rpb24oTCl7cmV0dXJuIEUoRyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEg9dGhpcztyZXR1cm4gayh0aGlzLGZ1bmN0aW9uKGope3N3aXRjaChqLmxhYmVsKXtjYXNlIDA6cmV0dXJuWzQsdGhpcy5o'@;
put 'YW5kbGVFcnJvcihMLGZ1bmN0aW9uKCl7cmV0dXJuIEgucG9zdCh0ZSxhZSxzZSxkZSxsZSl9KV07Y2FzZSAxOnJldHVyblsyLGouc2VudCgpXX19KX0pfSldfSl9KX0sUX0oWi5SZXF1ZXN0Q2xpZW50KTtBLlNhczlSZXF1ZXN0Q2xpZW50PXp9LDM2MDI6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgUCxVPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoUD1mdW5jdGlvbihFLGspe3JldHVybihQPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihCLE4pe0IuX19wcm90b19fPU59fHxmdW5jdGlvbihCLE4pe2Zv'@;
put 'cih2YXIgViBpbiBOKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChOLFYpJiYoQltWXT1OW1ZdKX0pKEUsayl9LGZ1bmN0aW9uKEUsayl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGsmJm51bGwhPT1rKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUg'@;
put 'IitTdHJpbmcoaykrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gQigpe3RoaXMuY29uc3RydWN0b3I9RX1QKEUsayksRS5wcm90b3R5cGU9bnVsbD09PWs/T2JqZWN0LmNyZWF0ZShrKTooQi5wcm90b3R5cGU9ay5wcm90b3R5cGUsbmV3IEIpfSk7T2JqZWN0LmRl'@;
put 'ZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuU0FTSlNfTE9HU19TRVBBUkFUT1I9QS5TYXNqc1JlcXVlc3RDbGllbnQ9dm9pZCAwO3ZhciBJPWZ1bmN0aW9uKEUpe2Z1bmN0aW9uIGsoKXt2YXIgQj1udWxsIT09RSYmRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRo'@;
put 'aXM7cmV0dXJuIEIuZ2V0SGVhZGVycz1mdW5jdGlvbihOLFYpe3ZhciBaLFc9e307cmV0dXJuImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIhPT1WJiYoV1siQ29udGVudC1UeXBlIl09ViksVy5BY2NlcHQ9ImFwcGxpY2F0aW9uL2pzb24iPT09Vj9WOiIqLyoiLE58fHR5cGVv'@;
put 'ZiB3aW5kb3c+InUifHwoTj1udWxsIT09KFo9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1aP1o6dm9pZCAwKSxOJiYoVy5BdXRob3JpemF0aW9uPSJCZWFyZXIgIi5jb25jYXQoTikpLFd9LEJ9cmV0dXJuIFUoayxFKSxrLnByb3RvdHlwZS5wYXJzZVJl'@;
put 'c3BvbnNlPWZ1bmN0aW9uKEIpe3ZhciBOLFYsWixXPUI/LmhlYWRlcnM/Qi5oZWFkZXJzLmV0YWc6IiIsej17fTt0cnl7ej0ic3RyaW5nIj09dHlwZW9mIEIuZGF0YT9KU09OLnBhcnNlKEIuZGF0YSk6Qi5kYXRhfWNhdGNoe2lmKEIuZGF0YS5pbmNsdWRlcyhBLlNBU0pTX0xPR1NfU0VQQVJB'@;
put 'VE9SKSl7dmFyIHE9Qi5kYXRhLFE9cS5zcGxpdChBLlNBU0pTX0xPR1NfU0VQQVJBVE9SKTt2b2lkIDAhPT0oTj1RLnNwbGljZSgwLDEpWzBdKSYmKHo9Tik7dmFyIHRlPVEuc3BsaWNlKDAsUS5sZW5ndGgtMSksYWU9bmV3IFJlZ0V4cCgiIi5jb25jYXQoQS5TQVNKU19MT0dTX1NFUEFSQVRP'@;
put 'UiwiJCIpKSxzZT1RWzBdO3NlJiYoYWUudGVzdChxKT90ZS5sZW5ndGg+MSYmdGUucHVzaChzZSk6Wj1zZSksVj10ZS5qb2luKEEuU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2Ugej1CLmRhdGF9dmFyIGRlPXtyZXN1bHQ6eixsb2c6Vnx8IiIsZXRhZzpXLHN0YXR1czpCLnN0YXR1c307cmV0'@;
put 'dXJuIFomJihkZS5wcmludE91dHB1dD1aKSxkZX0sa30oRCg0NTg4KS5SZXF1ZXN0Q2xpZW50KTtBLlNhc2pzUmVxdWVzdENsaWVudD1JLEEuU0FTSlNfTE9HU19TRVBBUkFUT1I9IlNBU0pTX0xPR1NfU0VQQVJBVE9SXzE2M2VlMTdiNmZmMjRmMDI4OTI4OTcyZDgwYTI2Nzg0In0sNDcwOih3'@;
put 'LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2NjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDYxNzc6KHcsQSk9PnsidXNlIHN0'@;
put 'cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw1NzY2Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NToodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu'@;
put 'ZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDIxNToodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDQ3ODI6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sODUxNjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVs'@;
put 'ZSIse3ZhbHVlOiEwfSl9LDM4NDA6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9'@;
put 'KX0sMTQyODoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU4NDE6KHcsQSk9PnsidXNlIHN0cmljdCI7dmFyIEQsVTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5M'@;
put 'b2dpbk1lY2hhbmlzbT1BLlNBU2pzQ29uZmlnPXZvaWQgMCxBLlNBU2pzQ29uZmlnPWZ1bmN0aW9uKCl7dGhpcy5zZXJ2ZXJVcmw9IiIsdGhpcy5wYXRoU0FTSlM9IiIsdGhpcy5wYXRoU0FTOT0iIix0aGlzLnBhdGhTQVNWaXlhPSIiLHRoaXMuYXBwTG9jPSIiLHRoaXMuc2VydmVyVHlwZT1u'@;
put 'dWxsLHRoaXMuZGVidWc9ITAsdGhpcy52ZXJib3NlPSEwLHRoaXMuY29udGV4dE5hbWU9IiIsdGhpcy51c2VDb21wdXRlQXBpPW51bGwsdGhpcy5sb2dpbk1lY2hhbmlzbT1ELkRlZmF1bHQsdGhpcy5yZXF1ZXN0SGlzdG9yeUxpbWl0PTEwfSwoVT1EPUEuTG9naW5NZWNoYW5pc218fChBLkxv'@;
put 'Z2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIsVS5SZWRpcmVjdGVkPSJSZWRpcmVjdGVkIn0sNjAzODoodyxBKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRDtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5TZXNzaW9uU3RhdGU9dm9pZCAw'@;
put 'LChEPUEuU2Vzc2lvblN0YXRlfHwoQS5TZXNzaW9uU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsRC5SdW5uaW5nPSJydW5uaW5nIixELlBlbmRpbmc9InBlbmRpbmciLEQuSWRsZT0iaWRsZSIsRC5VbmF2YWlsYWJsZT0idW5hdmFpbGFibGUiLEQuTm9TdGF0ZT0iIixELkZhaWxl'@;
put 'ZD0iZmFpbGVkIixELkVycm9yPSJlcnJvciJ9LDk0OTM6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw4NjUwOih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxl'@;
put 'Iix7dmFsdWU6ITB9KX0sMTI0OmZ1bmN0aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBELFA9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChEPWZ1bmN0aW9uKEksRSl7cmV0dXJuKEQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9u'@;
put 'KGssQil7ay5fX3Byb3RvX189Qn18fGZ1bmN0aW9uKGssQil7Zm9yKHZhciBOIGluIEIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTikmJihrW05dPUJbTl0pfSkoSSxFKX0sZnVuY3Rpb24oSSxFKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhy'@;
put 'b3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBrKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUQoSSxFKSxJLnByb3RvdHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihrLnBy'@;
put 'b3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgayl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5BdXRob3JpemVFcnJvcj12b2lkIDA7dmFyIFU9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gRShrLEIpe3ZhciBOPUkuY2FsbCh0aGlzLGspfHx0aGlzO3Jl'@;
put 'dHVybiBOLm1lc3NhZ2U9ayxOLmNvbmZpcm1Vcmw9QixOLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoTixFLnByb3RvdHlwZSksTn1yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLkF1dGhvcml6ZUVycm9yPVV9LDk0NjU6ZnVuY3Rpb24odyxBKXsidXNlIHN0'@;
put 'cmljdCI7dmFyIEQsUD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEQ9ZnVuY3Rpb24oSSxFKXtyZXR1cm4oRD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oayxCKXtrLl9fcHJvdG9fXz1CfXx8ZnVuY3Rpb24oayxCKXtmb3Io'@;
put 'dmFyIE4gaW4gQilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSYmKGtbTl09QltOXSl9KShJLEUpfSxmdW5jdGlvbihJLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIr'@;
put 'U3RyaW5nKEUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGsoKXt0aGlzLmNvbnN0cnVjdG9yPUl9RChJLEUpLEkucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGsucHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBrKX0pO09iamVjdC5kZWZp'@;
put 'bmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLkNlcnRpZmljYXRlRXJyb3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoayl7dmFyIEI9SS5jYWxsKHRoaXMsIiIuY29uY2F0KGssIlxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0'@;
put 'aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tICIpLmNvbmNhdCgiaHR0cHM6Ly9naXRodWIuY29tL3Nhc2pzL2NsaS9pc3N1ZXMvMTE4MSNpc3N1ZWNvbW1lbnQtMTA5MDYzODU4NCIsIlxuIikpfHx0aGlzO3JldHVybiBCLm5hbWU9IkNlcnRpZmljYXRlRXJyb3IiLE9iamVjdC5z'@;
put 'ZXRQcm90b3R5cGVPZihCLEUucHJvdG90eXBlKSxCfXJldHVybiBQKEUsSSksRX0oRXJyb3IpO0EuQ2VydGlmaWNhdGVFcnJvcj1VfSw1MjY3OmZ1bmN0aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBELFA9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChEPWZ1bmN0aW9uKEksRSl7cmV0dXJuKEQ9'@;
put 'T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGssQil7ay5fX3Byb3RvX189Qn18fGZ1bmN0aW9uKGssQil7Zm9yKHZhciBOIGluIEIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTikmJihrW05dPUJb'@;
put 'Tl0pfSkoSSxFKX0sZnVuY3Rpb24oSSxFKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBrKCl7dGhpcy5j'@;
put 'b25zdHJ1Y3Rvcj1JfUQoSSxFKSxJLnByb3RvdHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihrLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgayl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5Db21wdXRlSm9iRXhlY3V0aW9uRXJy'@;
put 'b3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoayxCKXt2YXIgTj1JLmNhbGwodGhpcywiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIil8fHRoaXM7cmV0dXJuIE4uam9iPWssTi5sb2c9QixOLm5hbWU9IkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNl'@;
put 'dFByb3RvdHlwZU9mKE4sRS5wcm90b3R5cGUpLE59cmV0dXJuIFAoRSxJKSxFfShFcnJvcik7QS5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3I9VX0sOTIzMjoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5FcnJv'@;
put 'clJlc3BvbnNlPXZvaWQgMCxBLkVycm9yUmVzcG9uc2U9ZnVuY3Rpb24oUCxVLEkpe3ZhciBFPVU7aWYoIm9iamVjdCIhPXR5cGVvZiBVKXRyeXtFPUpTT04ucGFyc2UoVSl9Y2F0Y2h7ST1VLEU9IiJ9dGhpcy5lcnJvcj17bWVzc2FnZTpQLGRldGFpbHM6RSxyYXc6SX19fSw1MTA5OmZ1bmN0'@;
put 'aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBELFA9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChEPWZ1bmN0aW9uKEksRSl7cmV0dXJuKEQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGssQil7ay5fX3Byb3RvX189Qn18fGZ1'@;
put 'bmN0aW9uKGssQil7Zm9yKHZhciBOIGluIEIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTikmJihrW05dPUJbTl0pfSkoSSxFKX0sZnVuY3Rpb24oSSxFKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3Mg'@;
put 'ZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBrKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUQoSSxFKSxJLnByb3RvdHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihrLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcg'@;
put 'ayl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5JbnRlcm5hbFNlcnZlckVycm9yPXZvaWQgMDt2YXIgVT1mdW5jdGlvbihJKXtmdW5jdGlvbiBFKCl7dmFyIGs9SS5jYWxsKHRoaXMsIkVycm9yOiBJbnRlcm5hbCBzZXJ2ZXIgZXJyb3IuIil8'@;
put 'fHRoaXM7cmV0dXJuIGsubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGssRS5wcm90b3R5cGUpLGt9cmV0dXJuIFAoRSxJKSxFfShFcnJvcik7QS5JbnRlcm5hbFNlcnZlckVycm9yPVV9LDU1MTg6ZnVuY3Rpb24odyxBKXsidXNlIHN0cmljdCI7dmFy'@;
put 'IEQsUD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEQ9ZnVuY3Rpb24oSSxFKXtyZXR1cm4oRD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oayxCKXtrLl9fcHJvdG9fXz1CfXx8ZnVuY3Rpb24oayxCKXtmb3IodmFyIE4gaW4g'@;
put 'QilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSYmKGtbTl09QltOXSl9KShJLEUpfSxmdW5jdGlvbihJLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEUp'@;
put 'KyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGsoKXt0aGlzLmNvbnN0cnVjdG9yPUl9RChJLEUpLEkucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGsucHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBrKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0'@;
put 'eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLkludmFsaWRKc29uRXJyb3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoKXt2YXIgaz1JLmNhbGwodGhpcywiRXJyb3I6IGludmFsaWQgSnNvbiBzdHJpbmciKXx8dGhpcztyZXR1cm4gay5uYW1lPSJJbnZhbGlkSnNv'@;
put 'bkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoayxFLnByb3RvdHlwZSksa31yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLkludmFsaWRKc29uRXJyb3I9VX0sMTAwNTpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRCxQPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoRD1mdW5jdGlv'@;
put 'bihJLEUpe3JldHVybihEPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihrLEIpe2suX19wcm90b19fPUJ9fHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChCLE4pJiYoa1tOXT1CW05dKX0pKEksRSl9LGZ1bmN0aW9uKEksRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVu'@;
put 'Y3Rpb24gaygpe3RoaXMuY29uc3RydWN0b3I9SX1EKEksRSksSS5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooay5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGspfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuSW52YWxp'@;
put 'ZFNBU2pzQ3NyZkVycm9yPXZvaWQgMDt2YXIgVT1mdW5jdGlvbihJKXtmdW5jdGlvbiBFKCl7dmFyIGs9dGhpcztyZXR1cm4oaz1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoIkludmFsaWQgQ1NSRiB0b2tlbiEiKSl8fHRoaXMpLm5hbWU9IkludmFsaWRTQVNqc0NzcmZFcnJv'@;
put 'ciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKGssRS5wcm90b3R5cGUpLGt9cmV0dXJuIFAoRSxJKSxFfShFcnJvcik7QS5JbnZhbGlkU0FTanNDc3JmRXJyb3I9VX0sODUzMTpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRCxQPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoRD1mdW5jdGlv'@;
put 'bihJLEUpe3JldHVybihEPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihrLEIpe2suX19wcm90b19fPUJ9fHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2Fs'@;
put 'bChCLE4pJiYoa1tOXT1CW05dKX0pKEksRSl9LGZ1bmN0aW9uKEksRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVu'@;
put 'Y3Rpb24gaygpe3RoaXMuY29uc3RydWN0b3I9SX1EKEksRSksSS5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooay5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGspfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuSm9iRXhl'@;
put 'Y3V0aW9uRXJyb3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoayxCLE4pe3ZhciBWPUkuY2FsbCh0aGlzLCJFcnJvciBDb2RlICIuY29uY2F0KGssIjogIikuY29uY2F0KEIpKXx8dGhpcztyZXR1cm4gVi5lcnJvckNvZGU9ayxWLmVycm9yTWVzc2FnZT1CLFYucmVzdWx0'@;
put 'PU4sVi5uYW1lPSJKb2JFeGVjdXRpb25FcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFYsRS5wcm90b3R5cGUpLFZ9cmV0dXJuIFAoRSxJKSxFfShFcnJvcik7QS5Kb2JFeGVjdXRpb25FcnJvcj1VfSw5MDc5OmZ1bmN0aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBELFA9dGhpcyYmdGhp'@;
put 'cy5fX2V4dGVuZHN8fChEPWZ1bmN0aW9uKEksRSl7cmV0dXJuKEQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGssQil7ay5fX3Byb3RvX189Qn18fGZ1bmN0aW9uKGssQil7Zm9yKHZhciBOIGluIEIpT2JqZWN0LnByb3Rv'@;
put 'dHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTikmJihrW05dPUJbTl0pfSkoSSxFKX0sZnVuY3Rpb24oSSxFKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNv'@;
put 'bnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBrKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUQoSSxFKSxJLnByb3RvdHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihrLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgayl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVs'@;
put 'ZSIse3ZhbHVlOiEwfSksQS5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7dmFyIFU9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gRShrLEIpe3ZhciBOPUkuY2FsbCh0aGlzLCJFcnJvciB3aGlsZSBwb2xsaW5nIGpvYiBzdGF0ZSBmb3Igam9iICIuY29uY2F0KGssIjogIikuY29uY2F0KEIubWVzc2Fn'@;
put 'ZXx8QikpfHx0aGlzO3JldHVybiBOLm9yaWdpbmFsRXJyb3I9QixOLm5hbWU9IkpvYlN0YXRlUG9sbEVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoTixFLnByb3RvdHlwZSksTn1yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLkpvYlN0YXRlUG9sbEVycm9yPVV9LDMwOTY6ZnVuY3Rpb24o'@;
put 'dyxBKXsidXNlIHN0cmljdCI7dmFyIEQsUD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEQ9ZnVuY3Rpb24oSSxFKXtyZXR1cm4oRD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oayxCKXtrLl9fcHJvdG9fXz1CfXx8ZnVuY3Rp'@;
put 'b24oayxCKXtmb3IodmFyIE4gaW4gQilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSYmKGtbTl09QltOXSl9KShJLEUpfSxmdW5jdGlvbihJLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRl'@;
put 'bmRzIHZhbHVlICIrU3RyaW5nKEUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGsoKXt0aGlzLmNvbnN0cnVjdG9yPUl9RChJLEUpLEkucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGsucHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBrKX0p'@;
put 'O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoKXt2YXIgaz1JLmNhbGwodGhpcywiQ2FuIG5vdCBwYXJzZSBhcnJheSBvYmplY3QgdG8ganNvbi4i'@;
put 'KXx8dGhpcztyZXR1cm4gay5uYW1lPSJKc29uUGFyc2VBcnJheUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YoayxFLnByb3RvdHlwZSksa31yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLkpzb25QYXJzZUFycmF5RXJyb3I9VX0sNjc0MzpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgRCxQPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoRD1mdW5jdGlvbihJLEUpe3JldHVybihEPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihrLEIpe2suX19wcm90b19fPUJ9fHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBp'@;
put 'biBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pJiYoa1tOXT1CW05dKX0pKEksRSl9LGZ1bmN0aW9uKEksRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmco'@;
put 'RSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gaygpe3RoaXMuY29uc3RydWN0b3I9SX1EKEksRSksSS5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooay5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGspfSk7T2JqZWN0LmRlZmluZVByb3Bl'@;
put 'cnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDt2YXIgVT1mdW5jdGlvbihJKXtmdW5jdGlvbiBFKGspe3ZhciBCPXRoaXMsTj1rP0pTT04uc3RyaW5naWZ5KGssbnVsbCwyKToiWW91IG11c3QgYmUgbG9nZ2VkIGluIHRvIGFjY2VzcyB0'@;
put 'aGlzIHJlc291cmNlIjtyZXR1cm4oQj1JLmNhbGwodGhpcywiQXV0aCBlcnJvcjogIi5jb25jYXQoTikpfHx0aGlzKS5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZihCLEUucHJvdG90eXBlKSxCfXJldHVybiBQKEUsSSksRX0oRXJyb3IpO0EuTG9naW5S'@;
put 'ZXF1aXJlZEVycm9yPVV9LDc4NjQ6ZnVuY3Rpb24odyxBKXsidXNlIHN0cmljdCI7dmFyIEQsUD10aGlzJiZ0aGlzLl9fZXh0ZW5kc3x8KEQ9ZnVuY3Rpb24oSSxFKXtyZXR1cm4oRD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rp'@;
put 'b24oayxCKXtrLl9fcHJvdG9fXz1CfXx8ZnVuY3Rpb24oayxCKXtmb3IodmFyIE4gaW4gQilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQixOKSYmKGtbTl09QltOXSl9KShJLEUpfSxmdW5jdGlvbihJLEUpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBFJiZudWxsIT09RSl0'@;
put 'aHJvdyBuZXcgVHlwZUVycm9yKCJDbGFzcyBleHRlbmRzIHZhbHVlICIrU3RyaW5nKEUpKyIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbCIpO2Z1bmN0aW9uIGsoKXt0aGlzLmNvbnN0cnVjdG9yPUl9RChJLEUpLEkucHJvdG90eXBlPW51bGw9PT1FP09iamVjdC5jcmVhdGUoRSk6KGsu'@;
put 'cHJvdG90eXBlPUUucHJvdG90eXBlLG5ldyBrKX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLk5vU2Vzc2lvblN0YXRlRXJyb3I9dm9pZCAwO3ZhciBVPWZ1bmN0aW9uKEkpe2Z1bmN0aW9uIEUoayxCLE4pe3ZhciBWPUkuY2FsbCh0aGlzLCJD'@;
put 'b3VsZCBub3QgZ2V0IHNlc3Npb24gc3RhdGUuIFNlcnZlciByZXNwb25kZWQgd2l0aCAiLmNvbmNhdChrLCIgd2hpbHN0IGNoZWNraW5nIHN0YXRlOiAiKS5jb25jYXQoQikpfHx0aGlzO3JldHVybiBWLnNlcnZlclJlc3BvbnNlU3RhdHVzPWssVi5zZXNzaW9uU3RhdGVVcmw9QixWLmxvZ1Vy'@;
put 'bD1OLFYubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBlT2YoVixFLnByb3RvdHlwZSksVn1yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLk5vU2Vzc2lvblN0YXRlRXJyb3I9VX0sOTU3NzpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRCxQPXRoaXMmJnRo'@;
put 'aXMuX19leHRlbmRzfHwoRD1mdW5jdGlvbihJLEUpe3JldHVybihEPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihrLEIpe2suX19wcm90b19fPUJ9fHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBpbiBCKU9iamVjdC5wcm90'@;
put 'b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pJiYoa1tOXT1CW05dKX0pKEksRSl9LGZ1bmN0aW9uKEksRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRSkrIiBpcyBub3QgYSBj'@;
put 'b25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gaygpe3RoaXMuY29uc3RydWN0b3I9SX1EKEksRSksSS5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooay5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGspfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1'@;
put 'bGUiLHt2YWx1ZTohMH0pLEEuTm90Rm91bmRFcnJvcj12b2lkIDA7dmFyIFU9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gRShrKXt2YXIgQj1JLmNhbGwodGhpcywiRXJyb3I6IFJlc291cmNlIGF0ICIuY29uY2F0KGssIiB3YXMgbm90IGZvdW5kIikpfHx0aGlzO3JldHVybiBCLnVybD1rLEIubmFt'@;
put 'ZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKEIsRS5wcm90b3R5cGUpLEJ9cmV0dXJuIFAoRSxJKSxFfShFcnJvcik7QS5Ob3RGb3VuZEVycm9yPVV9LDkyNzk6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUCxVPXRoaXMmJnRoaXMuX19leHRlbmRzfHwo'@;
put 'UD1mdW5jdGlvbihrLEIpe3JldHVybihQPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihOLFYpe04uX19wcm90b19fPVZ9fHxmdW5jdGlvbihOLFYpe2Zvcih2YXIgWiBpbiBWKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJv'@;
put 'cGVydHkuY2FsbChWLFopJiYoTltaXT1WW1pdKX0pKGssQil9LGZ1bmN0aW9uKGssQil7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEImJm51bGwhPT1CKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoQikrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBu'@;
put 'dWxsIik7ZnVuY3Rpb24gTigpe3RoaXMuY29uc3RydWN0b3I9a31QKGssQiksay5wcm90b3R5cGU9bnVsbD09PUI/T2JqZWN0LmNyZWF0ZShCKTooTi5wcm90b3R5cGU9Qi5wcm90b3R5cGUsbmV3IE4pfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0p'@;
put 'LEEuUm9vdEZvbGRlck5vdEZvdW5kRXJyb3I9dm9pZCAwO3ZhciBJPUQoNjc5OSksRT1mdW5jdGlvbihrKXtmdW5jdGlvbiBCKE4sVixaKXt2YXIgVz10aGlzLHo9IlJvb3QgZm9sZGVyICIuY29uY2F0KE4sIiB3YXMgbm90IGZvdW5kLiIpKyJcblBsZWFzZSBjaGVjayAiLmNvbmNhdChWLCIv'@;
put 'U0FTRHJpdmUuIikrIlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuIjtpZihaKXt2YXIgcT0oMCxJLmRlY29kZVRva2VuKShaKS5zY29wZTt6Kz0iWW91ciBhY2Nlc3MgdG9rZW4gY29udGFpbnMgdGhlIGZvbGxvd2lu'@;
put 'ZyBzY29wZXM6XG4iKyhxPXEubWFwKGZ1bmN0aW9uKFEpe3JldHVybiIqICIrUX0pKS5qb2luKCJcbiIpfXJldHVybihXPWsuY2FsbCh0aGlzLHopfHx0aGlzKS5uYW1lPSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKFcsQi5wcm90b3R5cGUpLFd9cmV0'@;
put 'dXJuIFUoQixrKSxCfShFcnJvcik7QS5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj1FfSw5NTI2OmZ1bmN0aW9uKHcsQSl7InVzZSBzdHJpY3QiO3ZhciBELFA9dGhpcyYmdGhpcy5fX2V4dGVuZHN8fChEPWZ1bmN0aW9uKEksRSl7cmV0dXJuKEQ9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19w'@;
put 'cm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGssQil7ay5fX3Byb3RvX189Qn18fGZ1bmN0aW9uKGssQil7Zm9yKHZhciBOIGluIEIpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTikmJihrW05dPUJbTl0pfSkoSSxFKX0sZnVuY3Rpb24oSSxFKXtp'@;
put 'ZigiZnVuY3Rpb24iIT10eXBlb2YgRSYmbnVsbCE9PUUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSAiK1N0cmluZyhFKSsiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTtmdW5jdGlvbiBrKCl7dGhpcy5jb25zdHJ1Y3Rvcj1JfUQoSSxFKSxJLnByb3Rv'@;
put 'dHlwZT1udWxsPT09RT9PYmplY3QuY3JlYXRlKEUpOihrLnByb3RvdHlwZT1FLnByb3RvdHlwZSxuZXcgayl9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5TQVM5QXV0aEVycm9yPXZvaWQgMDt2YXIgVT1mdW5jdGlvbihJKXtmdW5jdGlvbiBF'@;
put 'KCl7dmFyIGs9SS5jYWxsKHRoaXMsIlRoZSBjcmVkZW50aWFscyB5b3UgcHJvdmlkZWQgY2Fubm90IGJlIGF1dGhlbnRpY2F0ZWQuIFBsZWFzZSBwcm92aWRlIGEgdmFsaWQgc2V0IG9mIGNyZWRlbnRpYWxzLiIpfHx0aGlzO3JldHVybiBrLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YoayxFLnByb3RvdHlwZSksa31yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLlNBUzlBdXRoRXJyb3I9VX0sODg3NTpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRCxQPXRoaXMmJnRoaXMuX19leHRlbmRzfHwoRD1mdW5jdGlvbihJLEUpe3JldHVybihEPU9i'@;
put 'amVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihrLEIpe2suX19wcm90b19fPUJ9fHxmdW5jdGlvbihrLEIpe2Zvcih2YXIgTiBpbiBCKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLE4pJiYoa1tOXT1CW05d'@;
put 'KX0pKEksRSl9LGZ1bmN0aW9uKEksRSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEUmJm51bGwhPT1FKXRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIitTdHJpbmcoRSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsIik7ZnVuY3Rpb24gaygpe3RoaXMuY29u'@;
put 'c3RydWN0b3I9SX1EKEksRSksSS5wcm90b3R5cGU9bnVsbD09PUU/T2JqZWN0LmNyZWF0ZShFKTooay5wcm90b3R5cGU9RS5wcm90b3R5cGUsbmV3IGspfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuV2Vib3V0UmVzcG9uc2VFcnJvcj12b2lk'@;
put 'IDA7dmFyIFU9ZnVuY3Rpb24oSSl7ZnVuY3Rpb24gRShrKXt2YXIgQj1JLmNhbGwodGhpcywiRXJyb3I6IGVycm9yIHdoaWxlIHBhcnNpbmcgcmVzcG9uc2UgZnJvbSAiLmNvbmNhdChrKSl8fHRoaXM7cmV0dXJuIEIudXJsPWssQi5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Qu'@;
put 'c2V0UHJvdG90eXBlT2YoQixFLnByb3RvdHlwZSksQn1yZXR1cm4gUChFLEkpLEV9KEVycm9yKTtBLldlYm91dFJlc3BvbnNlRXJyb3I9VX0sMTM5NTpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9m'@;
put 'dW5jdGlvbihJLEUsayxCKXt2b2lkIDA9PT1CJiYoQj1rKTt2YXIgTj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEUsayk7TiYmISgiZ2V0ImluIE4/IUUuX19lc01vZHVsZTpOLndyaXRhYmxlfHxOLmNvbmZpZ3VyYWJsZSl8fChOPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv'@;
put 'bigpe3JldHVybiBFW2tdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShJLEIsTil9OmZ1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspLElbQl09RVtrXX0pLFU9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKEksRSl7Zm9yKHZhciBrIGluIEkpImRlZmF1bHQiPT09'@;
put 'a3x8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsayl8fFAoRSxJLGspfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksVShEKDEyNCksQSksVShEKDk0NjUpLEEpLFUoRCg1MjY3KSxBKSxVKEQoOTIzMiksQSksVShEKDUxMDkp'@;
put 'LEEpLFUoRCg1NTE4KSxBKSxVKEQoODUzMSksQSksVShEKDkwNzkpLEEpLFUoRCgzMDk2KSxBKSxVKEQoNjc0MyksQSksVShEKDc4NjQpLEEpLFUoRCg5NTc3KSxBKSxVKEQoOTI3OSksQSksVShEKDg4NzUpLEEpfSwxMjMwOmZ1bmN0aW9uKHcsQSxEKXsidXNlIHN0cmljdCI7dmFyIFA9dGhp'@;
put 'cyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEksRSxrLEIpe3ZvaWQgMD09PUImJihCPWspO3ZhciBOPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoRSxrKTtOJiYhKCJnZXQiaW4gTj8hRS5fX2VzTW9kdWxlOk4ud3JpdGFibGV8fE4uY29u'@;
put 'ZmlndXJhYmxlKXx8KE49e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEVba119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEksQixOKX06ZnVuY3Rpb24oSSxFLGssQil7dm9pZCAwPT09QiYmKEI9ayksSVtCXT1FW2tdfSksVT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8'@;
put 'ZnVuY3Rpb24oSSxFKXtmb3IodmFyIGsgaW4gSSkiZGVmYXVsdCI9PT1rfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoRSxrKXx8UChFLEksayl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxVKEQoNDcwKSxBKSxVKEQoNDY2'@;
put 'NiksQSksVShEKDQ5NzUpLEEpLFUoRCg1NzY2KSxBKSxVKEQoMjE1KSxBKSxVKEQoNDc4MiksQSksVShEKDQxNjgpLEEpLFUoRCg4NTE2KSxBKSxVKEQoMzg0MCksQSksVShEKDU4NDEpLEEpLFUoRCgxNDI4KSxBKSxVKEQoNjAzOCksQSksVShEKDk0OTMpLEEpLFUoRCgzMTUzKSxBKSxVKEQo'@;
put 'ODY1MCksQSksVShEKDYxNzcpLEEpLFUoRCgxMzk1KSxBKX0sMzMwMjpmdW5jdGlvbih3LEEpeyJ1c2Ugc3RyaWN0Ijt2YXIgRD10aGlzJiZ0aGlzLl9fYXNzaWdufHxmdW5jdGlvbigpe3JldHVybiBEPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKEkpe2Zvcih2YXIgRSxrPTEsQj1hcmd1bWVu'@;
put 'dHMubGVuZ3RoO2s8QjtrKyspZm9yKHZhciBOIGluIEU9YXJndW1lbnRzW2tdKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChFLE4pJiYoSVtOXT1FW05dKTtyZXR1cm4gSX0sRC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LFA9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0'@;
put 'aW9uKEksRSxrLEIpe3JldHVybiBuZXcoa3x8KGs9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sVil7ZnVuY3Rpb24gWihxKXt0cnl7eihCLm5leHQocSkpfWNhdGNoKFEpe1YoUSl9fWZ1bmN0aW9uIFcocSl7dHJ5e3ooQi50aHJvdyhxKSl9Y2F0Y2goUSl7VihRKX19ZnVuY3Rpb24geihxKXt2YXIg'@;
put 'UTtxLmRvbmU/TihxLnZhbHVlKTooUT1xLnZhbHVlLFEgaW5zdGFuY2VvZiBrP1E6bmV3IGsoZnVuY3Rpb24odGUpe3RlKFEpfSkpLnRoZW4oWixXKX16KChCPUIuYXBwbHkoSSxFfHxbXSkpLm5leHQoKSl9KX0sVT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihJLEUpe3ZhciBr'@;
put 'LEIsTixWLFo9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmTlswXSl0aHJvdyBOWzFdO3JldHVybiBOWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIFY9e25leHQ6VygwKSx0aHJvdzpXKDEpLHJldHVybjpXKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYoVltTeW1ib2wu'@;
put 'aXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxWO2Z1bmN0aW9uIFcoeil7cmV0dXJuIGZ1bmN0aW9uKHEpe3JldHVybiBmdW5jdGlvbihRKXtpZihrKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1o7KXRyeXtpZihr'@;
put 'PTEsQiYmKE49MiZRWzBdP0IucmV0dXJuOlFbMF0/Qi50aHJvd3x8KChOPUIucmV0dXJuKSYmTi5jYWxsKEIpLDApOkIubmV4dCkmJiEoTj1OLmNhbGwoQixRWzFdKSkuZG9uZSlyZXR1cm4gTjtzd2l0Y2goQj0wLE4mJihRPVsyJlFbMF0sTi52YWx1ZV0pLFFbMF0pe2Nhc2UgMDpjYXNlIDE6'@;
put 'Tj1RO2JyZWFrO2Nhc2UgNDpyZXR1cm4gWi5sYWJlbCsrLHt2YWx1ZTpRWzFdLGRvbmU6ITF9O2Nhc2UgNTpaLmxhYmVsKyssQj1RWzFdLFE9WzBdO2NvbnRpbnVlO2Nhc2UgNzpRPVoub3BzLnBvcCgpLFoudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKE49KE49Wi50cnlzKS5s'@;
put 'ZW5ndGg+MCYmTltOLmxlbmd0aC0xXSl8fDYhPT1RWzBdJiYyIT09UVswXSkpe1o9MDtjb250aW51ZX1pZigzPT09UVswXSYmKCFOfHxRWzFdPk5bMF0mJlFbMV08TlszXSkpe1oubGFiZWw9UVsxXTticmVha31pZig2PT09UVswXSYmWi5sYWJlbDxOWzFdKXtaLmxhYmVsPU5bMV0sTj1RO2Jy'@;
put 'ZWFrfWlmKE4mJloubGFiZWw8TlsyXSl7Wi5sYWJlbD1OWzJdLFoub3BzLnB1c2goUSk7YnJlYWt9TlsyXSYmWi5vcHMucG9wKCksWi50cnlzLnBvcCgpO2NvbnRpbnVlfVE9RS5jYWxsKEksWil9Y2F0Y2godGUpe1E9WzYsdGVdLEI9MH1maW5hbGx5e2s9Tj0wfWlmKDUmUVswXSl0aHJvdyBR'@;
put 'WzFdO3JldHVybnt2YWx1ZTpRWzBdP1FbMV06dm9pZCAwLGRvbmU6ITB9fShbeixxXSl9fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLEEuYXBwZW5kRXh0cmFSZXNwb25zZUF0'@;
put 'dHJpYnV0ZXM9ZnVuY3Rpb24oSSxFKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgayxCO3JldHVybiBVKHRoaXMsZnVuY3Rpb24oTil7cmV0dXJuIGs9e30sRT8ubGVuZ3RoPyhCPUUucmVkdWNlKGZ1bmN0aW9uKFYsWil7cmV0dXJuIFZbWl09SVtaXSxWfSx7'@;
put 'fSksaz1EKHtyZXN1bHQ6SS5yZXN1bHR9LEIpKTprPUkucmVzdWx0LFsyLGtdfSl9KX19LDc5MjI6ZnVuY3Rpb24odyxBKXsidXNlIHN0cmljdCI7dmFyIEQ9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFUsSSxFLGspe3JldHVybiBuZXcoRXx8KEU9UHJvbWlzZSkpKGZ1bmN0aW9u'@;
put 'KEIsTil7ZnVuY3Rpb24gVih6KXt0cnl7VyhrLm5leHQoeikpfWNhdGNoKHEpe04ocSl9fWZ1bmN0aW9uIFooeil7dHJ5e1coay50aHJvdyh6KSl9Y2F0Y2gocSl7TihxKX19ZnVuY3Rpb24gVyh6KXt2YXIgcTt6LmRvbmU/Qih6LnZhbHVlKToocT16LnZhbHVlLHEgaW5zdGFuY2VvZiBFP3E6'@;
put 'bmV3IEUoZnVuY3Rpb24oUSl7UShxKX0pKS50aGVuKFYsWil9Vygoaz1rLmFwcGx5KFUsSXx8W10pKS5uZXh0KCkpfSl9LFA9dGhpcyYmdGhpcy5fX2dlbmVyYXRvcnx8ZnVuY3Rpb24oVSxJKXt2YXIgRSxrLEIsTixWPXtsYWJlbDowLHNlbnQ6ZnVuY3Rpb24oKXtpZigxJkJbMF0pdGhyb3cg'@;
put 'QlsxXTtyZXR1cm4gQlsxXX0sdHJ5czpbXSxvcHM6W119O3JldHVybiBOPXtuZXh0OlooMCksdGhyb3c6WigxKSxyZXR1cm46WigyKX0sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKE5bU3ltYm9sLml0ZXJhdG9yXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSksTjtmdW5jdGlvbiBaKFcp'@;
put 'e3JldHVybiBmdW5jdGlvbih6KXtyZXR1cm4gZnVuY3Rpb24ocSl7aWYoRSl0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtWOyl0cnl7aWYoRT0xLGsmJihCPTImcVswXT9rLnJldHVybjpxWzBdP2sudGhyb3d8fCgoQj1rLnJldHVy'@;
put 'bikmJkIuY2FsbChrKSwwKTprLm5leHQpJiYhKEI9Qi5jYWxsKGsscVsxXSkpLmRvbmUpcmV0dXJuIEI7c3dpdGNoKGs9MCxCJiYocT1bMiZxWzBdLEIudmFsdWVdKSxxWzBdKXtjYXNlIDA6Y2FzZSAxOkI9cTticmVhaztjYXNlIDQ6cmV0dXJuIFYubGFiZWwrKyx7dmFsdWU6cVsxXSxkb25l'@;
put 'OiExfTtjYXNlIDU6Vi5sYWJlbCsrLGs9cVsxXSxxPVswXTtjb250aW51ZTtjYXNlIDc6cT1WLm9wcy5wb3AoKSxWLnRyeXMucG9wKCk7Y29udGludWU7ZGVmYXVsdDppZighKChCPShCPVYudHJ5cykubGVuZ3RoPjAmJkJbQi5sZW5ndGgtMV0pfHw2IT09cVswXSYmMiE9PXFbMF0pKXtWPTA7'@;
put 'Y29udGludWV9aWYoMz09PXFbMF0mJighQnx8cVsxXT5CWzBdJiZxWzFdPEJbM10pKXtWLmxhYmVsPXFbMV07YnJlYWt9aWYoNj09PXFbMF0mJlYubGFiZWw8QlsxXSl7Vi5sYWJlbD1CWzFdLEI9cTticmVha31pZihCJiZWLmxhYmVsPEJbMl0pe1YubGFiZWw9QlsyXSxWLm9wcy5wdXNoKHEp'@;
put 'O2JyZWFrfUJbMl0mJlYub3BzLnBvcCgpLFYudHJ5cy5wb3AoKTtjb250aW51ZX1xPUkuY2FsbChVLFYpfWNhdGNoKFEpe3E9WzYsUV0saz0wfWZpbmFsbHl7RT1CPTB9aWYoNSZxWzBdKXRocm93IHFbMV07cmV0dXJue3ZhbHVlOnFbMF0/cVsxXTp2b2lkIDAsZG9uZTohMH19KFtXLHpdKX19'@;
put 'fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5hc3luY0ZvckVhY2g9dm9pZCAwLEEuYXN5bmNGb3JFYWNoPWZ1bmN0aW9uKFUsSSl7cmV0dXJuIEQodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIEU7cmV0dXJuIFAodGhpcyxmdW5j'@;
put 'dGlvbihrKXtzd2l0Y2goay5sYWJlbCl7Y2FzZSAwOkU9MCxrLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBFPFUubGVuZ3RoP1s0LEkoVVtFXSxFLFUpXTpbMyw0XTtjYXNlIDI6ay5zZW50KCksay5sYWJlbD0zO2Nhc2UgMzpyZXR1cm4gRSsrLFszLDFdO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX19'@;
put 'LDM3OTM6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuY29tcGFyZVRpbWVzdGFtcHM9dm9pZCAwLEEuY29tcGFyZVRpbWVzdGFtcHM9ZnVuY3Rpb24oRCxQKXtyZXR1cm4gUC50aW1lc3RhbXAuZ2V0VGltZSgp'@;
put 'LUQudGltZXN0YW1wLmdldFRpbWUoKX19LDI0MDI6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmlzRm9ybWF0c1RhYmxlPUEuY29udmVydFRvQ1NWPXZvaWQgMDt2YXIgVT1EKDY0'@;
put 'NjcpLEk9RCg5Nzc4KTtBLmNvbnZlcnRUb0NTVj1mdW5jdGlvbihrLEIpe3ZhciBOO2lmKCFrW0JdKXRocm93KDAsSS5wcmVmaXhNZXNzYWdlKSgiTm8gdGFibGUgcHJvdmlkZWQgdG8gYmUgY29udmVydGVkIHRvIENTVi4iLCJFcnJvciB3aGlsZSBjb252ZXJ0aW5nIHRvIENTVi4gIik7dmFy'@;
put 'IFY9a1tCXTtpZighQXJyYXkuaXNBcnJheShWKSlyZXR1cm4iIjt2YXIgWixXPW51bGw9PT0oTj1rWyIkIi5jb25jYXQoQildKXx8dm9pZCAwPT09Tj92b2lkIDA6Ti5mb3JtYXRzLHo9W10scT0hMTtXJiYoej1PYmplY3Qua2V5cyhXKS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiIiLmNvbmNh'@;
put 'dCh0ZSwiOiIpLmNvbmNhdChXW3RlXSl9KSk7dmFyIFE9T2JqZWN0LmtleXMoVlswXSk7cmV0dXJuIFEuZm9yRWFjaChmdW5jdGlvbih0ZSl7aWYoIVd8fCFPYmplY3Qua2V5cyhXKS5pbmNsdWRlcyh0ZSkpe3ZhciBhZT0hMSxzZT0hMTtpZihWLmZvckVhY2goZnVuY3Rpb24oeSl7bnVsbD09'@;
put 'PXlbdGVdfHwibnVtYmVyIj09dHlwZW9mIHlbdGVdP2FlPSEwOiJzdHJpbmciPT10eXBlb2YgeVt0ZV0mJigwLFUuaXNTcGVjaWFsTWlzc2luZykoeVt0ZV0pJiYoc2U9ITApfSksYWUmJnNlKXoucHVzaCgiIi5jb25jYXQodGUsIjpiZXN0LiIpKSxXfHwoVz17fSksV1t0ZV09ImJlc3QuIjtl'@;
put 'bHNle3ZhciBkZT1udWxsLGxlPSExLGNlPS0xLEc9Vi5tYXAoZnVuY3Rpb24oeSxMKXtpZih5W3RlXXx8IiI9PT15W3RlXSl7ZGU/bGV8fChjZT0obGU9KCIiPT09eVt0ZV18fCJzdHJpbmciPT10eXBlb2YgeVt0ZV0/ImNoYXJzIjoibnVtYmVyIikhPT1kZSk/TCsxOi0xKTpkZT0iIj09PXlb'@;
put 'dGVdfHwic3RyaW5nIj09dHlwZW9mIHlbdGVdPyJjaGFycyI6Im51bWJlciI7dmFyIGo9dm9pZCAwO3JldHVybiJzdHJpbmciPT10eXBlb2YgeVt0ZV0mJihqPUUoeVt0ZV0pKSxqfX0pLnNvcnQoZnVuY3Rpb24oeSxMKXtyZXR1cm4gTC15fSlbMF07RyYmRz4zMjc2NSYmKHE9ITApLGxlJiZQ'@;
put 'LmVycm9yKCJSb3cgKCIuY29uY2F0KGNlLCIpLCBDb2x1bW4gKCIpLmNvbmNhdCh0ZSwiKSBoYXMgbWl4ZWQgdHlwZXM6IEVSUk9SIikpLHoucHVzaCgiIi5jb25jYXQodGUsIjoiKS5jb25jYXQoImNoYXJzIj09PWRlPyIkY2hhciI6IiIpLmNvbmNhdChHfHwoImNoYXJzIj09PWRlPyIxIjoi'@;
put 'YmVzdCIpLCIuIikpfX19KSxXJiYoej16LnNvcnQoZnVuY3Rpb24odGUsYWUpe3JldHVybiBRLmluZGV4T2YodGUucmVwbGFjZSgvOi4qLywiIikpLVEuaW5kZXhPZihhZS5yZXBsYWNlKC86LiovLCIiKSl9KSkscT8iRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiOihaPVYubWFwKGZ1bmN0'@;
put 'aW9uKHRlKXtyZXR1cm4gT2JqZWN0LmtleXModGUpLm1hcChmdW5jdGlvbihhZSxzZSl7dmFyIGRlLGxlPXRlW2FlXTtpZigibnVtYmVyIj09dHlwZW9mIGxlKXJldHVybiBsZTtpZihkZT1udWxsPT09bGU/IiI6bGUsVyYmImJlc3QuIj09PVdbYWVdKXtpZihkZSYmISgwLFUuaXNTcGVjaWFs'@;
put 'TWlzc2luZykoZGUpKXRocm93IG5ldyBFcnJvcigiQSBTcGVjaWFsIG1pc3NpbmcgdmFsdWUgY2FuIG9ubHkgYmUgYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gJ0EnIHRvICdaJywgJ18nLCAnLlthLXpdJywgJy5fJyIpO3ZhciBjZT1kZS5pbmNsdWRlcygiLiIpPyIiOiIuIjtyZXR1cm4iIi5j'@;
put 'b25jYXQoY2UpLmNvbmNhdChkZS50b0xvd2VyQ2FzZSgpKX1yZXR1cm4gZGU9ZGUucmVwbGFjZSgvIi9nLCciIicpLChkZT0nIicuY29uY2F0KGRlLCciJykpLnN1YnN0cmluZygxLGRlLmxlbmd0aC0xKS5zZWFyY2goLyhcdHxcbnxccnwsfFwnfFwiKS9nbSk8MCYmKGRlPWRlLnN1YnN0cmlu'@;
put 'ZygxLGRlLmxlbmd0aC0xKSksIiI9PT0oZGU9ZGUucmVwbGFjZSgvXHJcbi9nbSwiXG4iKSkmJnpbc2VdLmluY2x1ZGVzKCJiZXN0IikmJihkZT0iLiIpLGRlfSkuam9pbigiLCIpfSksei5qb2luKCIsIikucmVwbGFjZSgvLC9nLCIgIikrIlxyXG4iK1ouam9pbigiXHJcbiIpKX0sQS5pc0Zv'@;
put 'cm1hdHNUYWJsZT1mdW5jdGlvbihrKXtyZXR1cm4vXlwkLiovLnRlc3Qoayl9O3ZhciBFPWZ1bmN0aW9uKGspe2Zvcih2YXIgQj1rLmxlbmd0aCxOPWsubGVuZ3RoLTE7Tj49MDtOLS0pe3ZhciBWPWsuY2hhckNvZGVBdChOKTtWPjEyNyYmVjw9MjA0Nz9CKys6Vj4yMDQ3JiZWPD02NTUzNSYm'@;
put 'KEIrPTIpLFY+PTU2MzIwJiZWPD01NzM0MyYmTi0tfXJldHVybiBCfX0sNjExNjoodyxBLEQpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmNyZWF0ZUF4aW9zSW5zdGFuY2U9dm9pZCAwO3ZhciBQPUQoOTY2OSk7QS5j'@;
put 'cmVhdGVBeGlvc0luc3RhbmNlPWZ1bmN0aW9uKFUsSSl7cmV0dXJuIFAuZGVmYXVsdC5jcmVhdGUoe2Jhc2VVUkw6VSxodHRwc0FnZW50Okl9KX19LDk4MjU6KHcsQSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZGVs'@;
put 'YXk9dm9pZCAwLEEuZGVsYXk9ZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKFApe3JldHVybiBzZXRUaW1lb3V0KFAsRCl9KX19LDk5MDpmdW5jdGlvbih3LEEsRCl7InVzZSBzdHJpY3QiO3ZhciBQPUQoNDE1NSksVT1EKDUxMDgpLEk9dGhpcyYmdGhpcy5fX2F3YWl0'@;
put 'ZXJ8fGZ1bmN0aW9uKEIsTixWLFope3JldHVybiBuZXcoVnx8KFY9UHJvbWlzZSkpKGZ1bmN0aW9uKFcseil7ZnVuY3Rpb24gcShhZSl7dHJ5e3RlKFoubmV4dChhZSkpfWNhdGNoKHNlKXt6KHNlKX19ZnVuY3Rpb24gUShhZSl7dHJ5e3RlKFoudGhyb3coYWUpKX1jYXRjaChzZSl7eihzZSl9'@;
put 'fWZ1bmN0aW9uIHRlKGFlKXt2YXIgc2U7YWUuZG9uZT9XKGFlLnZhbHVlKTooc2U9YWUudmFsdWUsc2UgaW5zdGFuY2VvZiBWP3NlOm5ldyBWKGZ1bmN0aW9uKGRlKXtkZShzZSl9KSkudGhlbihxLFEpfXRlKChaPVouYXBwbHkoQixOfHxbXSkpLm5leHQoKSl9KX0sRT10aGlzJiZ0aGlzLl9f'@;
put 'Z2VuZXJhdG9yfHxmdW5jdGlvbihCLE4pe3ZhciBWLFosVyx6LHE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmV1swXSl0aHJvdyBXWzFdO3JldHVybiBXWzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHo9e25leHQ6USgwKSx0aHJvdzpRKDEpLHJldHVybjpRKDIpfSwiZnVuY3Rp'@;
put 'b24iPT10eXBlb2YgU3ltYm9sJiYoeltTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSx6O2Z1bmN0aW9uIFEodGUpe3JldHVybiBmdW5jdGlvbihhZSl7cmV0dXJuIGZ1bmN0aW9uKHNlKXtpZihWKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJl'@;
put 'YWR5IGV4ZWN1dGluZy4iKTtmb3IoO3E7KXRyeXtpZihWPTEsWiYmKFc9MiZzZVswXT9aLnJldHVybjpzZVswXT9aLnRocm93fHwoKFc9Wi5yZXR1cm4pJiZXLmNhbGwoWiksMCk6Wi5uZXh0KSYmIShXPVcuY2FsbChaLHNlWzFdKSkuZG9uZSlyZXR1cm4gVztzd2l0Y2goWj0wLFcmJihzZT1b'@;
put 'MiZzZVswXSxXLnZhbHVlXSksc2VbMF0pe2Nhc2UgMDpjYXNlIDE6Vz1zZTticmVhaztjYXNlIDQ6cmV0dXJuIHEubGFiZWwrKyx7dmFsdWU6c2VbMV0sZG9uZTohMX07Y2FzZSA1OnEubGFiZWwrKyxaPXNlWzFdLHNlPVswXTtjb250aW51ZTtjYXNlIDc6c2U9cS5vcHMucG9wKCkscS50cnlz'@;
put 'LnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVz0oVz1xLnRyeXMpLmxlbmd0aD4wJiZXW1cubGVuZ3RoLTFdKXx8NiE9PXNlWzBdJiYyIT09c2VbMF0pKXtxPTA7Y29udGludWV9aWYoMz09PXNlWzBdJiYoIVd8fHNlWzFdPldbMF0mJnNlWzFdPFdbM10pKXtxLmxhYmVsPXNlWzFdO2Jy'@;
put 'ZWFrfWlmKDY9PT1zZVswXSYmcS5sYWJlbDxXWzFdKXtxLmxhYmVsPVdbMV0sVz1zZTticmVha31pZihXJiZxLmxhYmVsPFdbMl0pe3EubGFiZWw9V1syXSxxLm9wcy5wdXNoKHNlKTticmVha31XWzJdJiZxLm9wcy5wb3AoKSxxLnRyeXMucG9wKCk7Y29udGludWV9c2U9Ti5jYWxsKEIscSl9'@;
put 'Y2F0Y2goZGUpe3NlPVs2LGRlXSxaPTB9ZmluYWxseXtWPVc9MH1pZig1JnNlWzBdKXRocm93IHNlWzFdO3JldHVybnt2YWx1ZTpzZVswXT9zZVsxXTp2b2lkIDAsZG9uZTohMH19KFt0ZSxhZV0pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxB'@;
put 'LmZldGNoTG9nPUEuZmV0Y2hMb2dCeUNodW5rcz12b2lkIDA7dmFyIGs9RCg5Nzc4KTtBLmZldGNoTG9nQnlDaHVua3M9ZnVuY3Rpb24oQixOLFYsWil7cmV0dXJuIEkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gRSh0aGlzLGZ1bmN0aW9uKFcpe3N3aXRjaChXLmxh'@;
put 'YmVsKXtjYXNlIDA6cmV0dXJuWzQsKDAsQS5mZXRjaExvZykoQixOLFYsMCxaKV07Y2FzZSAxOnJldHVyblsyLFcuc2VudCgpXX19KX0pfSxBLmZldGNoTG9nPWZ1bmN0aW9uKEIsTixWLFosVyl7cmV0dXJuIEkodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXt2YXIgeixxLFEsdGUs'@;
put 'YWU7cmV0dXJuIEUodGhpcyxmdW5jdGlvbihzZSl7c3dpdGNoKHNlLmxhYmVsKXtjYXNlIDA6ej1QLmxvZ2dlcnx8VSxxPSIiLFE9VzwxZTQ/VzoxZTQsc2UubGFiZWw9MTtjYXNlIDE6cmV0dXJuIHouaW5mbygiRmV0Y2hpbmcgbG9ncyBmcm9tIGxpbmUgbm86ICIuY29uY2F0KForMSwiIHRv'@;
put 'ICIpLmNvbmNhdChaK1EsIiBvZiAiKS5jb25jYXQoVywiLiIpKSxbNCxCLmdldCgiIi5jb25jYXQoViwiP3N0YXJ0PSIpLmNvbmNhdChaLCImbGltaXQ9IikuY29uY2F0KFEpLE4pLnRoZW4oZnVuY3Rpb24oZGUpe3JldHVybiBkZS5yZXN1bHR9KS5jYXRjaChmdW5jdGlvbihkZSl7dGhyb3co'@;
put 'MCxrLnByZWZpeE1lc3NhZ2UpKGRlLCJFcnJvciB3aGlsZSBnZXR0aW5nIGxvZy4gIil9KV07Y2FzZSAyOmlmKDA9PT0odGU9c2Uuc2VudCgpKS5pdGVtcy5sZW5ndGgpcmV0dXJuWzMsNF07YWU9dGUuaXRlbXMubWFwKGZ1bmN0aW9uKGRlKXtyZXR1cm4gZGUubGluZX0pLmpvaW4oIlxuIiks'@;
put 'cSs9YWUsWis9USxzZS5sYWJlbD0zO2Nhc2UgMzppZihaPFcpcmV0dXJuWzMsMV07c2UubGFiZWw9NDtjYXNlIDQ6cmV0dXJuWzIscV19fSl9KX19LDcxNDoodyxBLEQpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLmZv'@;
put 'cm1hdERhdGFGb3JSZXF1ZXN0PXZvaWQgMDt2YXIgUD1EKDI0MDIpLFU9RCg0Nzk5KTtBLmZvcm1hdERhdGFGb3JSZXF1ZXN0PWZ1bmN0aW9uKEkpe3ZhciBFPVtdLGs9MCxCPXt9O2Zvcih2YXIgTiBpbiBJKWlmKCEoMCxQLmlzRm9ybWF0c1RhYmxlKShOKXx8IU9iamVjdC5rZXlzKEkpLmlu'@;
put 'Y2x1ZGVzKE4ucmVwbGFjZSgvXlwkLywiIikpKXtrKyssKDAsUC5pc0Zvcm1hdHNUYWJsZSkoTil8fEUucHVzaChOKTt2YXIgVj0oMCxQLmNvbnZlcnRUb0NTVikoSSxOKTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Vil0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3Ro'@;
put 'IG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7aWYoVi5sZW5ndGg+MTZlMyl7dmFyIFo9KDAsVS5zcGxpdENodW5rcykoVik7Qlsic2FzanMiLmNvbmNhdChrLCJkYXRhMCIpXT1aLmxlbmd0aCxaLmZvckVhY2goZnVuY3Rpb24oVyx6KXtCWyJzYXNq'@;
put 'cyIuY29uY2F0KGssImRhdGEiKS5jb25jYXQoeisxKV09V30pfWVsc2UgQlsic2FzanMiLmNvbmNhdChrLCJkYXRhIildPVZ9cmV0dXJuIEIuc2FzanNfdGFibGVzPUUuam9pbigiICIpLEJ9fSw4NDU4Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9f'@;
put 'ZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZ2V0Rm9ybURhdGE9dm9pZCAwO3ZhciBQPUQoNTkyOCksVT1EKDYyMzApO0EuZ2V0Rm9ybURhdGE9ZnVuY3Rpb24oKXtyZXR1cm4oMCxQLmlzTm9kZSkoKT9uZXcgVTpuZXcgRm9ybURhdGF9fSwxODg0Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7T2Jq'@;
put 'ZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuZ2V0VmFsaWRKc29uPXZvaWQgMDt2YXIgUD1EKDEzOTUpO0EuZ2V0VmFsaWRKc29uPWZ1bmN0aW9uKFUpe3RyeXtpZihudWxsPT1VKXRocm93IG5ldyBQLkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNB'@;
put 'cnJheShVKSl0aHJvdyBuZXcgUC5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgVT9VOiIiPT09VT97fTpKU09OLnBhcnNlKFUpfWNhdGNoKEkpe3Rocm93IEkgaW5zdGFuY2VvZiBQLkpzb25QYXJzZUFycmF5RXJyb3I/STpuZXcgUC5JbnZhbGlkSnNvbkVycm9y'@;
put 'fX19LDU5Mjg6ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oSSxFLGssQil7dm9pZCAwPT09QiYmKEI9ayk7dmFyIE49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihFLGsp'@;
put 'O04mJiEoImdldCJpbiBOPyFFLl9fZXNNb2R1bGU6Ti53cml0YWJsZXx8Ti5jb25maWd1cmFibGUpfHwoTj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRVtrXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxCLE4pfTpmdW5jdGlvbihJLEUsayxCKXt2b2lkIDA9PT1C'@;
put 'JiYoQj1rKSxJW0JdPUVba119KSxVPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihJLEUpe2Zvcih2YXIgayBpbiBJKSJkZWZhdWx0Ij09PWt8fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChFLGspfHxQKEUsSSxrKX07T2JqZWN0LmRlZmluZVByb3BlcnR5'@;
put 'KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLFUoRCgzMzAyKSxBKSxVKEQoNzkyMiksQSksVShEKDM3OTMpLEEpLFUoRCgyNDAyKSxBKSxVKEQoNjExNiksQSksVShEKDk4MjUpLEEpLFUoRCg5OTApLEEpLFUoRCgxODg0KSxBKSxVKEQoNDI0MyksQSksVShEKDI1NyksQSksVShEKDIpLEEp'@;
put 'LFUoRCgyNjE1KSxBKSxVKEQoMjkyMCksQSksVShEKDI0MjIpLEEpLFUoRCgzMSksQSksVShEKDY1MTUpLEEpLFUoRCg2NDE2KSxBKSxVKEQoMjgxMyksQSksVShEKDk4OTYpLEEpLFUoRCg0Nzk5KSxBKSxVKEQoNDUxNiksQSksVShEKDg0NTgpLEEpfSw0MjQzOih3LEEsRCk9PnsidXNlIHN0'@;
put 'cmljdCI7dmFyIFA9RCg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5pc05vZGU9dm9pZCAwLEEuaXNOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PVAmJm51bGwhPVAudmVyc2lvbnMmJm51bGwhPVAudmVyc2lvbnMubm9kZX19'@;
put 'LDI1NzoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5pc1JlbGF0aXZlUGF0aD12b2lkIDAsQS5pc1JlbGF0aXZlUGF0aD1mdW5jdGlvbihEKXtyZXR1cm4hIUQmJiFELnN0YXJ0c1dpdGgoIi8iKX19LDI6KHcs'@;
put 'QSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuaXNVcmk9dm9pZCAwLEEuaXNVcmk9ZnVuY3Rpb24oRCl7cmV0dXJuL15cL2ZvbGRlcnNcL2ZvbGRlcnNcLy8udGVzdChEKX19LDI2MTU6KHcsQSk9PnsidXNlIHN0cmlj'@;
put 'dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEuaXNVcmw9dm9pZCAwLEEuaXNVcmw9ZnVuY3Rpb24oRCl7dHJ5e3ZhciBQPW5ldyBVUkwoRCk7aWYoIVsiaHR0cDoiLCJodHRwczoiXS5pbmNsdWRlcyhQLnByb3RvY29sKSlyZXR1cm4hMX1jYXRj'@;
put 'aHtyZXR1cm4hMX1yZXR1cm4hMH19LDEyMTA6ZnVuY3Rpb24odyxBKXsidXNlIHN0cmljdCI7dmFyIEQsTixQPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLFYsWixXKXtyZXR1cm4gbmV3KFp8fChaPVByb21pc2UpKShmdW5jdGlvbih6LHEpe2Z1bmN0aW9uIFEoc2Upe3RyeXth'@;
put 'ZShXLm5leHQoc2UpKX1jYXRjaChkZSl7cShkZSl9fWZ1bmN0aW9uIHRlKHNlKXt0cnl7YWUoVy50aHJvdyhzZSkpfWNhdGNoKGRlKXtxKGRlKX19ZnVuY3Rpb24gYWUoc2Upe3ZhciBkZTtzZS5kb25lP3ooc2UudmFsdWUpOihkZT1zZS52YWx1ZSxkZSBpbnN0YW5jZW9mIFo/ZGU6bmV3IFoo'@;
put 'ZnVuY3Rpb24obGUpe2xlKGRlKX0pKS50aGVuKFEsdGUpfWFlKChXPVcuYXBwbHkoTixWfHxbXSkpLm5leHQoKSl9KX0sVT10aGlzJiZ0aGlzLl9fZ2VuZXJhdG9yfHxmdW5jdGlvbihOLFYpe3ZhciBaLFcseixxLFE9e2xhYmVsOjAsc2VudDpmdW5jdGlvbigpe2lmKDEmelswXSl0aHJvdyB6'@;
put 'WzFdO3JldHVybiB6WzFdfSx0cnlzOltdLG9wczpbXX07cmV0dXJuIHE9e25leHQ6dGUoMCksdGhyb3c6dGUoMSkscmV0dXJuOnRlKDIpfSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYocVtTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxxO2Z1bmN0aW9uIHRl'@;
put 'KGFlKXtyZXR1cm4gZnVuY3Rpb24oc2Upe3JldHVybiBmdW5jdGlvbihkZSl7aWYoWil0aHJvdyBuZXcgVHlwZUVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuIik7Zm9yKDtROyl0cnl7aWYoWj0xLFcmJih6PTImZGVbMF0/Vy5yZXR1cm46ZGVbMF0/Vy50aHJvd3x8KCh6'@;
put 'PVcucmV0dXJuKSYmei5jYWxsKFcpLDApOlcubmV4dCkmJiEoej16LmNhbGwoVyxkZVsxXSkpLmRvbmUpcmV0dXJuIHo7c3dpdGNoKFc9MCx6JiYoZGU9WzImZGVbMF0sei52YWx1ZV0pLGRlWzBdKXtjYXNlIDA6Y2FzZSAxOno9ZGU7YnJlYWs7Y2FzZSA0OnJldHVybiBRLmxhYmVsKysse3Zh'@;
put 'bHVlOmRlWzFdLGRvbmU6ITF9O2Nhc2UgNTpRLmxhYmVsKyssVz1kZVsxXSxkZT1bMF07Y29udGludWU7Y2FzZSA3OmRlPVEub3BzLnBvcCgpLFEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoKHo9KHo9US50cnlzKS5sZW5ndGg+MCYmelt6Lmxlbmd0aC0xXSl8fDYhPT1kZVsw'@;
put 'XSYmMiE9PWRlWzBdKSl7UT0wO2NvbnRpbnVlfWlmKDM9PT1kZVswXSYmKCF6fHxkZVsxXT56WzBdJiZkZVsxXTx6WzNdKSl7US5sYWJlbD1kZVsxXTticmVha31pZig2PT09ZGVbMF0mJlEubGFiZWw8elsxXSl7US5sYWJlbD16WzFdLHo9ZGU7YnJlYWt9aWYoeiYmUS5sYWJlbDx6WzJdKXtR'@;
put 'LmxhYmVsPXpbMl0sUS5vcHMucHVzaChkZSk7YnJlYWt9elsyXSYmUS5vcHMucG9wKCksUS50cnlzLnBvcCgpO2NvbnRpbnVlfWRlPVYuY2FsbChOLFEpfWNhdGNoKGxlKXtkZT1bNixsZV0sVz0wfWZpbmFsbHl7Wj16PTB9aWYoNSZkZVswXSl0aHJvdyBkZVsxXTtyZXR1cm57dmFsdWU6ZGVb'@;
put 'MF0/ZGVbMV06dm9pZCAwLGRvbmU6ITB9fShbYWUsc2VdKX19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5vcGVuTG9naW5Qcm9tcHQ9dm9pZCAwLChOPUR8fChEPXt9KSkuc3R5bGVzPSJzYXNqc0FkYXB0ZXJTdHlsZXMiLE4ub3ZlcmxheT0i'@;
put 'c2FzanNBZGFwdGVyTG9naW5Qcm9tcHRCRyIsTi5kaWFsb2c9InNhc2pzQWRhcHRlckxvZ2luUHJvbXB0Ijt2YXIgST0ic2FzanMtYWRhcHRlciIsRT17cG9wVXA6IiIuY29uY2F0KEksInBvcFVwIikscG9wVXBCRzoiIi5jb25jYXQoSSwicG9wVXBCRyIpfTtBLm9wZW5Mb2dpblByb21wdD1m'@;
put 'dW5jdGlvbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihOKXtyZXR1cm4gUCh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBWLFosVyx6LHEsUSx0ZSxhZTtyZXR1cm4gVSh0aGlzLGZ1bmN0aW9uKHNlKXtyZXR1cm4oVj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJz'@;
put 'dHlsZSIpKS5pZD1ELnN0eWxlcyxWLmlubmVyVGV4dD1CLChaPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pZD1ELm92ZXJsYXksWi5jbGFzc0xpc3QuYWRkKEUucG9wVXBCRyksKFc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlkPUQuZGlhbG9nLFcuY2xhc3NMaXN0'@;
put 'LmFkZChFLnBvcFVwKSwoej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJoMSIpKS5pbm5lclRleHQ9IlNlc3Npb24gRXhwaXJlZCEiLFcuYXBwZW5kQ2hpbGQoeikscT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSwoUT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikpLmlubmVy'@;
put 'VGV4dD0iWW91IG5lZWQgdG8gcmVsb2dpbiwgY2xpY2sgT0sgdG8gbG9naW4uIixxLmFwcGVuZENoaWxkKFEpLFcuYXBwZW5kQ2hpbGQocSksKHRlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpKS5jbGFzc0xpc3QuYWRkKCJjYW5jZWwiKSx0ZS5pbm5lclRleHQ9IkNhbmNlbCIs'@;
put 'dGUub25jbGljaz1mdW5jdGlvbigpe2soKSxOKCExKX0sVy5hcHBlbmRDaGlsZCh0ZSksKGFlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpKS5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksYWUuaW5uZXJUZXh0PSJPayIsYWUub25jbGljaz1mdW5jdGlvbigpe2soKSxOKCEwKX0s'@;
put 'Vy5hcHBlbmRDaGlsZChhZSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKFYpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoWiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChXKSxbMl19KX0pfSl9O3ZhciBrPWZ1bmN0'@;
put 'aW9uKCl7T2JqZWN0LnZhbHVlcyhEKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe3ZhciBWLFo9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoTik7bnVsbD09PShWPVo/LnBhcmVudE5vZGUpfHx2b2lkIDA9PT1WfHxWLnJlbW92ZUNoaWxkKFopfSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0i'@;
put 'YXV0byJ9LEI9IlxuLiIuY29uY2F0KEUucG9wVXBCRywiICxcbi4iKS5jb25jYXQoRS5wb3BVcCwiIHtcbiAgei1pbmRleDogMTAwMDA7XG59XG4uIikuY29uY2F0KEUucG9wVXAsIiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJv'@;
put 'eDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDQwJTtcbiAgbGVmdDogNTAlO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtZmFtaWx5OiAnUFQgU2FucycsIHNh'@;
put 'bnMtc2VyaWY7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXItc3R5bGU6IG5vbmU7XG4gIHotaW5kZXg6IDk5OTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBtYXJnaW46IDA7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6'@;
put 'IDMwMHB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1heC1oZWlnaHQ6IDMwMHB4O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cbi4iKS5jb25jYXQoRS5wb3BVcCwiID4gaDEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6'@;
put 'IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNXB4O1xuICBtaW4taGVpZ2h0OiA0MHB4O1xuICBmb250LXNpemU6IDEuMmVtO1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBjb2xvcjogI2ZmZjtc'@;
put 'biAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XG4gIGJvcmRlci1jb2xvcjogYmxhY2s7XG59XG4uIikuY29uY2F0KEUucG9wVXAsIiA+IGRpdiB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGNh'@;
put 'bGMoMTAwJSAtMTA4cHgpO1xuICBtYXJnaW46IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgcGFkZGluZzogNSU7XG4gIHRl'@;
put 'eHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gIGJvcmRlci1jb2xvcjogI2NjYztcbiAgYm9yZGVyLXN0eWxlOiBub25lIG5vbmUgc29saWQgbm9uZTtcbiAgb3ZlcmZsb3c6IGF1dG87XG59XG4uIikuY29uY2F0KEUucG9wVXAsIiA+IGRpdiA+IHNwYW4ge1xuICBk'@;
put 'aXNwbGF5OiB0YWJsZS1jZWxsO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICB3aWR0aDogMzAwcHg7XG4gIGhl'@;
put 'aWdodDogMTA4cHg7XG4gIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gIGJvcmRlci1zdHlsZTogbm9uZTtcbn1cbi4iKS5jb25jYXQoRS5wb3BVcCwiIC5jYW5jZWwge1xuICBmbG9hdDogbGVmdDtcbn1cbi4iKS5jb25jYXQoRS5wb3BVcCwiIC5jb25maXJtIHtcbiAgZmxvYXQ6IHJpZ2h0'@;
put 'O1xufVxuLiIpLmNvbmNhdChFLnBvcFVwLCIgPiBidXR0b24ge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAxMHB4O1xu'@;
put 'ICB3aWR0aDogNTAlO1xuICBib3JkZXI6IDFweCBub25lICNjY2M7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBoZWlnaHQ6IDUwcHg7XG4gIGJhY2tncm91bmQ6IHJnYmEoMSwgMSwgMSwgMC4yKTtcbn1cbi4iKS5jb25j'@;
put 'YXQoRS5wb3BVcCwiID4gYnV0dG9uOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpO1xufVxuLiIpLmNvbmNhdChFLnBvcFVwQkcsIiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6'@;
put 'IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBvcGFjaXR5OiAwLjk1O1xuICB6LWluZGV4OiA1MDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmFkaWFsLWdyYWRpZW50KCMwMzc4Y2QsICMwMTIwMzYpO1xufVxuIil9LDI5MjA6KHcsQSk9Pnsi'@;
put 'dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLEEubmVlZHNSZXRyeT12b2lkIDAsQS5uZWVkc1JldHJ5PWZ1bmN0aW9uKEQpe3JldHVybiEhRCYmKEQuaW5jbHVkZXMoJyJlcnJvckNvZGUiOjQwMycpJiZELmluY2x1ZGVzKCJfY3Ny'@;
put 'ZiIpJiZELmluY2x1ZGVzKCJYLUNTUkYtVE9LRU4iKXx8RC5pbmNsdWRlcygnInN0YXR1cyI6NDAzJykmJkQuaW5jbHVkZXMoJyJlcnJvciI6IkZvcmJpZGRlbiInKXx8RC5pbmNsdWRlcygnInN0YXR1cyI6NDQ5JykmJkQuaW5jbHVkZXMoIkF1dGhlbnRpY2F0aW9uIHN1Y2Nlc3MsIHJldHJ5'@;
put 'IG9yaWdpbmFsIHJlcXVlc3QiKSl9fSwyNDIyOih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnBhcnNlR2VuZXJhdGVkQ29kZT12b2lkIDAsQS5wYXJzZUdlbmVyYXRlZENvZGU9ZnVuY3Rpb24oRCl7cmV0dXJu'@;
put 'IEQuc3BsaXQoIlxuIikuZmlsdGVyKGZ1bmN0aW9uKFApe3JldHVybiBQLnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKX0pLmpvaW4oIlxyXG4iKX19LDMxOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIs'@;
put 'e3ZhbHVlOiEwfSksQS5wYXJzZVNhc1ZpeWFMb2c9dm9pZCAwLEEucGFyc2VTYXNWaXlhTG9nPWZ1bmN0aW9uKFUpe3ZhciBJO3RyeXtJPVUuaXRlbXM/VS5pdGVtcy5tYXAoZnVuY3Rpb24oRSl7cmV0dXJuIEUubGluZX0pLmpvaW4oIlxuIik6SlNPTi5zdHJpbmdpZnkoVSl9Y2F0Y2goRSl7'@;
put 'UC5lcnJvcigiQW4gZXJyb3IgaGFzIG9jY3VycmVkIHdoaWxlIHBhcnNpbmcgdGhlIGxvZyByZXNwb25zZSIsRSksST1VfXJldHVybiBJfX0sNjUxNToodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5wYXJzZVNv'@;
put 'dXJjZUNvZGU9dm9pZCAwLEEucGFyc2VTb3VyY2VDb2RlPWZ1bmN0aW9uKEQpe3JldHVybiBELnNwbGl0KCJcbiIpLmZpbHRlcihmdW5jdGlvbihQKXtyZXR1cm4gUC50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKX0pLmpvaW4oIlxyXG4iKX19LDY0MTY6'@;
put 'ZnVuY3Rpb24odyxBLEQpeyJ1c2Ugc3RyaWN0Ijt2YXIgUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRSxrLEIsTil7cmV0dXJuIG5ldyhCfHwoQj1Qcm9taXNlKSkoZnVuY3Rpb24oVixaKXtmdW5jdGlvbiBXKFEpe3RyeXtxKE4ubmV4dChRKSl9Y2F0Y2godGUpe1oodGUpfX1m'@;
put 'dW5jdGlvbiB6KFEpe3RyeXtxKE4udGhyb3coUSkpfWNhdGNoKHRlKXtaKHRlKX19ZnVuY3Rpb24gcShRKXt2YXIgdGU7US5kb25lP1YoUS52YWx1ZSk6KHRlPVEudmFsdWUsdGUgaW5zdGFuY2VvZiBCP3RlOm5ldyBCKGZ1bmN0aW9uKGFlKXthZSh0ZSl9KSkudGhlbihXLHopfXEoKE49Ti5h'@;
put 'cHBseShFLGt8fFtdKSkubmV4dCgpKX0pfSxVPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKEUsayl7dmFyIEIsTixWLFosVz17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZWWzBdKXRocm93IFZbMV07cmV0dXJuIFZbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gWj17'@;
put 'bmV4dDp6KDApLHRocm93OnooMSkscmV0dXJuOnooMil9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihaW1N5bWJvbC5pdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLFo7ZnVuY3Rpb24geihxKXtyZXR1cm4gZnVuY3Rpb24oUSl7cmV0dXJuIGZ1bmN0aW9uKHRlKXtpZihC'@;
put 'KXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO1c7KXRyeXtpZihCPTEsTiYmKFY9MiZ0ZVswXT9OLnJldHVybjp0ZVswXT9OLnRocm93fHwoKFY9Ti5yZXR1cm4pJiZWLmNhbGwoTiksMCk6Ti5uZXh0KSYmIShWPVYuY2FsbChOLHRl'@;
put 'WzFdKSkuZG9uZSlyZXR1cm4gVjtzd2l0Y2goTj0wLFYmJih0ZT1bMiZ0ZVswXSxWLnZhbHVlXSksdGVbMF0pe2Nhc2UgMDpjYXNlIDE6Vj10ZTticmVhaztjYXNlIDQ6cmV0dXJuIFcubGFiZWwrKyx7dmFsdWU6dGVbMV0sZG9uZTohMX07Y2FzZSA1OlcubGFiZWwrKyxOPXRlWzFdLHRlPVsw'@;
put 'XTtjb250aW51ZTtjYXNlIDc6dGU9Vy5vcHMucG9wKCksVy50cnlzLnBvcCgpO2NvbnRpbnVlO2RlZmF1bHQ6aWYoISgoVj0oVj1XLnRyeXMpLmxlbmd0aD4wJiZWW1YubGVuZ3RoLTFdKXx8NiE9PXRlWzBdJiYyIT09dGVbMF0pKXtXPTA7Y29udGludWV9aWYoMz09PXRlWzBdJiYoIVZ8fHRl'@;
put 'WzFdPlZbMF0mJnRlWzFdPFZbM10pKXtXLmxhYmVsPXRlWzFdO2JyZWFrfWlmKDY9PT10ZVswXSYmVy5sYWJlbDxWWzFdKXtXLmxhYmVsPVZbMV0sVj10ZTticmVha31pZihWJiZXLmxhYmVsPFZbMl0pe1cubGFiZWw9VlsyXSxXLm9wcy5wdXNoKHRlKTticmVha31WWzJdJiZXLm9wcy5wb3Ao'@;
put 'KSxXLnRyeXMucG9wKCk7Y29udGludWV9dGU9ay5jYWxsKEUsVyl9Y2F0Y2goYWUpe3RlPVs2LGFlXSxOPTB9ZmluYWxseXtCPVY9MH1pZig1JnRlWzBdKXRocm93IHRlWzFdO3JldHVybnt2YWx1ZTp0ZVswXT90ZVsxXTp2b2lkIDAsZG9uZTohMH19KFtxLFFdKX19fTtPYmplY3QuZGVmaW5l'@;
put 'UHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5wYXJzZVNhc1ZpeWFEZWJ1Z1Jlc3BvbnNlPXZvaWQgMDt2YXIgST1EKDU5MjgpO0EucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT1mdW5jdGlvbihFLGssQil7cmV0dXJuIFAodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rp'@;
put 'b24oKXt2YXIgTixWO3JldHVybiBVKHRoaXMsZnVuY3Rpb24oWil7aWYoTj1FLnNwbGl0KC88aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4IiBzcmM9Inw8aWZyYW1lIHN0eWxlPSJ3aWR0aDogOTklOyBoZWlnaHQ6IDUwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOkNhbnZh'@;
put 'czsiIHNyYz0vKVsxXSwhKFY9Tj9OLnNwbGl0KC8iPjxcL2lmcmFtZT58PjxcL2lmcmFtZT4vKVswXTpudWxsKSl0aHJvdyBuZXcgRXJyb3IoIlVuYWJsZSB0byBmaW5kIHdlYm91dCBmaWxlIFVSTC4iKTtyZXR1cm5bMixrLmdldChCK1Ysdm9pZCAwLCJ0ZXh0L3BsYWluIikudGhlbihmdW5j'@;
put 'dGlvbihXKXtyZXR1cm4oMCxJLmdldFZhbGlkSnNvbikoVy5yZXN1bHQpfSldfSl9KX19LDI4MTM6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnBhcnNlV2Vib3V0UmVzcG9uc2U9'@;
put 'dm9pZCAwO3ZhciBVPUQoMTM5NSk7QS5wYXJzZVdlYm91dFJlc3BvbnNlPWZ1bmN0aW9uKEksRSl7dmFyIGs9IiI7aWYoSS5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e2s9SS5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRj'@;
put 'aChCKXtpZihFKXRocm93IG5ldyBVLldlYm91dFJlc3BvbnNlRXJyb3IoRSk7az0iIixQLmVycm9yKEIpfXJldHVybiBrfX0sMTE3MDoodyxBKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5leHRyYWN0VXNlckxvbmdO'@;
put 'YW1lU2FzOT12b2lkIDA7dmFyIEQ9WyJMb2cgT2ZmIl07QS5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT1mdW5jdGlvbihQKXt2YXIgVT1QPy5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pLEk9VT8uWzBdLnNwbGl0KCI6IilbMV0udHJpbSgpLEU9ST8uaW5kZXhPZigiICIpO3JldHVybiBJPyhE'@;
put 'Lm1hcChmdW5jdGlvbihrKXt2YXIgQj1JPy5pbmRleE9mKGspfHwtMTtCPi0xJiYoRT1CK2subGVuZ3RoKX0pLEkuc2xpY2UoRSwtMSkudHJpbSgpKToidW5rbm93biJ9fSw5ODk2Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFs'@;
put 'dWU6ITB9KSxBLnNlcmlhbGl6ZT12b2lkIDAsQS5zZXJpYWxpemU9ZnVuY3Rpb24oRCl7dmFyIFA9W107Zm9yKHZhciBVIGluIEQpaWYoRC5oYXNPd25Qcm9wZXJ0eShVKSlpZihEW1VdaW5zdGFuY2VvZiBBcnJheSlmb3IodmFyIEk9MCxFPURbVV0ubGVuZ3RoO0k8RTtJKyspUC5wdXNoKGVu'@;
put 'Y29kZVVSSUNvbXBvbmVudChVKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KERbVV1bSV0pKTtlbHNlIFAucHVzaChlbmNvZGVVUklDb21wb25lbnQoVSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChEW1VdKSk7cmV0dXJuIFAuam9pbigiJiIpfX0sNDc5OToodyxBKT0+eyJ1c2Ugc3RyaWN0IjtP'@;
put 'YmplY3QuZGVmaW5lUHJvcGVydHkoQSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksQS5zcGxpdENodW5rcz12b2lkIDAsQS5zcGxpdENodW5rcz1mdW5jdGlvbihEKXtmb3IodmFyIFA9MTZlMyxVPU1hdGguY2VpbChELmxlbmd0aC9QKSxJPW5ldyBBcnJheShVKSxFPTAsaz0wO0U8VTsrK0Us'@;
put 'ays9UClJW0VdPUQuc3Vic3RyKGssUCk7cmV0dXJuIEl9fSw0NTE2Oih3LEEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxBLnZhbGlkYXRlSW5wdXQ9QS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1BLk1PUkVfSU5GTz12'@;
put 'b2lkIDAsQS5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVxdWVzdC1yZXNwb25zZSIsQS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT0iUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICIu'@;
put 'Y29uY2F0KEEuTU9SRV9JTkZPKSxBLnZhbGlkYXRlSW5wdXQ9ZnVuY3Rpb24oUCl7aWYobnVsbD09PVApcmV0dXJue3N0YXR1czohMCxtc2c6IiJ9O2lmKCJvYmplY3QiIT09RChQKSlyZXR1cm57c3RhdHVzOiExLG1zZzpBLklOVkFMSURfVEFCTEVfU1RSVUNUVVJFfTt2YXIgVT1mdW5jdGlv'@;
put 'bihXKXtyZXR1cm4gVy5tYXRjaCgvXlwkLiovKSYmT2JqZWN0LmtleXMoUCkuaW5jbHVkZXMoVy5yZXBsYWNlKC9eXCQvLCIiKSl9O2Zvcih2YXIgSSBpbiBQKXtpZighSS5tYXRjaCgvXlthLXpBLVpfXS8pJiYhVShJKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRh'@;
put 'YmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFJLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIVUoSSkpcmV0dXJue3N0YXR1czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihJLmxlbmd0aD4zMilyZXR1'@;
put 'cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09RChQW0ldKSYmIVUoSSkpcmV0dXJue3N0YXR1czohMSxtc2c6QS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Zm9yKHZhciBFPTAsaz1Q'@;
put 'W0ldO0U8ay5sZW5ndGg7RSsrKXt2YXIgQj1rW0VdO2lmKCJvYmplY3QiIT09RChCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiVGFibGUgIi5jb25jYXQoSSwiIGNvbnRhaW5zIGludmFsaWQgc3RydWN0dXJlLiAiKS5jb25jYXQoQS5NT1JFX0lORk8pfTtmb3IodmFyIE49MCxWPU9iamVjdC5r'@;
put 'ZXlzKEIpO048Vi5sZW5ndGg7TisrKXt2YXIgWj1WW05dO2lmKHZvaWQgMD09PUJbWl0pcmV0dXJue3N0YXR1czohMSxtc2c6IkEgcm93IGluIHRhYmxlICIuY29uY2F0KEksIiBjb250YWlucyBpbnZhbGlkIHZhbHVlLiBDYW4ndCBhc3NpZ24gdW5kZWZpbmVkIHRvICIpLmNvbmNhdChaLCIu'@;
put 'Iil9fX19cmV0dXJue3N0YXR1czohMCxtc2c6IiJ9fTt2YXIgRD1mdW5jdGlvbihQKXtyZXR1cm4gQXJyYXkuaXNBcnJheShQKT8iQXJyYXkiOnR5cGVvZiBQfX0sODk4MToodyxBKT0+eyJ1c2Ugc3RyaWN0IjtBLmZyb21DYWxsYmFjaz1mdW5jdGlvbihEKXtyZXR1cm4gT2JqZWN0LmRlZmlu'@;
put 'ZVByb3BlcnR5KGZ1bmN0aW9uKC4uLlApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBQW1AubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoVSxJKT0+e0QuY2FsbCh0aGlzLC4uLlAsKEUsayk9Pm51bGwhPUU/SShFKTpVKGspKX0pO0QuYXBwbHkodGhpcyxQKX0sIm5hbWUiLHt2YWx1ZTpE'@;
put 'Lm5hbWV9KX0sQS5mcm9tUHJvbWlzZT1mdW5jdGlvbihEKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKC4uLlApe2NvbnN0IFU9UFtQLmxlbmd0aC0xXTtpZigiZnVuY3Rpb24iIT10eXBlb2YgVSlyZXR1cm4gRC5hcHBseSh0aGlzLFApO0QuYXBwbHkodGhpcyxQLnNs'@;
put 'aWNlKDAsLTEpKS50aGVuKEk9PlUobnVsbCxJKSxVKX0sIm5hbWUiLHt2YWx1ZTpELm5hbWV9KX19LDQ1NjQ6KHcsQSxEKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgUD1EKDc0MTgpLFU9RCg3MTI5KSxJPS9eW1x4MDAtXHgyMFx1MDBhMFx1MTY4MFx1MjAwMC1cdTIwMGFcdTIwMjhcdTIwMjlcdTIw'@;
put 'MmZcdTIwNWZcdTMwMDBcdWZlZmZdKy8sRT0vW1xuXHJcdF0vZyxrPS9eW0EtWmEtel1bQS1aYS16MC05Ky0uXSo6XC9cLy8sQj0vOlxkKyQvLE49L14oW2Etel1bYS16MC05ListXSo6KT8oXC9cLyk/KFtcXC9dKyk/KFtcU1xzXSopL2ksVj0vXlthLXpBLVpdOi87ZnVuY3Rpb24gWihzZSl7'@;
put 'cmV0dXJuKHNlfHwiIikudG9TdHJpbmcoKS5yZXBsYWNlKEksIiIpfXZhciBXPVtbIiMiLCJoYXNoIl0sWyI/IiwicXVlcnkiXSxmdW5jdGlvbihzZSxkZSl7cmV0dXJuIFEoZGUucHJvdG9jb2wpP3NlLnJlcGxhY2UoL1xcL2csIi8iKTpzZX0sWyIvIiwicGF0aG5hbWUiXSxbIkAiLCJhdXRo'@;
put 'IiwxXSxbTmFOLCJob3N0Iix2b2lkIDAsMSwxXSxbLzooXGQqKSQvLCJwb3J0Iix2b2lkIDAsMV0sW05hTiwiaG9zdG5hbWUiLHZvaWQgMCwxLDFdXSx6PXtoYXNoOjEscXVlcnk6MX07ZnVuY3Rpb24gcShzZSl7dmFyIGRlLGxlPSh0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dm9pZCAwIT09'@;
put 'RC5nP0QuZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkubG9jYXRpb258fHt9LGNlPXt9LEc9dHlwZW9mKHNlPXNlfHxsZSk7aWYoImJsb2I6Ij09PXNlLnByb3RvY29sKWNlPW5ldyBhZSh1bmVzY2FwZShzZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1HKWZvcihkZSBpbiBj'@;
put 'ZT1uZXcgYWUoc2Use30pLHopZGVsZXRlIGNlW2RlXTtlbHNlIGlmKCJvYmplY3QiPT09Ryl7Zm9yKGRlIGluIHNlKWRlIGluIHp8fChjZVtkZV09c2VbZGVdKTt2b2lkIDA9PT1jZS5zbGFzaGVzJiYoY2Uuc2xhc2hlcz1rLnRlc3Qoc2UuaHJlZikpfXJldHVybiBjZX1mdW5jdGlvbiBRKHNl'@;
put 'KXtyZXR1cm4iZmlsZToiPT09c2V8fCJmdHA6Ij09PXNlfHwiaHR0cDoiPT09c2V8fCJodHRwczoiPT09c2V8fCJ3czoiPT09c2V8fCJ3c3M6Ij09PXNlfWZ1bmN0aW9uIHRlKHNlLGRlKXtzZT0oc2U9WihzZSkpLnJlcGxhY2UoRSwiIiksZGU9ZGV8fHt9O3ZhciBsZSxjZT1OLmV4ZWMoc2Up'@;
put 'LEc9Y2VbMV0/Y2VbMV0udG9Mb3dlckNhc2UoKToiIix5PSEhY2VbMl0sTD0hIWNlWzNdLEg9MDtyZXR1cm4geT9MPyhsZT1jZVsyXStjZVszXStjZVs0XSxIPWNlWzJdLmxlbmd0aCtjZVszXS5sZW5ndGgpOihsZT1jZVsyXStjZVs0XSxIPWNlWzJdLmxlbmd0aCk6TD8obGU9Y2VbM10rY2Vb'@;
put 'NF0sSD1jZVszXS5sZW5ndGgpOmxlPWNlWzRdLCJmaWxlOiI9PT1HP0g+PTImJihsZT1sZS5zbGljZSgyKSk6UShHKT9sZT1jZVs0XTpHP3kmJihsZT1sZS5zbGljZSgyKSk6SD49MiYmUShkZS5wcm90b2NvbCkmJihsZT1jZVs0XSkse3Byb3RvY29sOkcsc2xhc2hlczp5fHxRKEcpLHNsYXNo'@;
put 'ZXNDb3VudDpILHJlc3Q6bGV9fWZ1bmN0aW9uIGFlKHNlLGRlLGxlKXtpZihzZT0oc2U9WihzZSkpLnJlcGxhY2UoRSwiIiksISh0aGlzIGluc3RhbmNlb2YgYWUpKXJldHVybiBuZXcgYWUoc2UsZGUsbGUpO3ZhciBjZSxHLHksTCxILGosZz1XLnNsaWNlKCksUz10eXBlb2YgZGUseD10aGlz'@;
put 'LF89MDtmb3IoIm9iamVjdCIhPT1TJiYic3RyaW5nIiE9PVMmJihsZT1kZSxkZT1udWxsKSxsZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiYobGU9VS5wYXJzZSksY2U9IShHPXRlKHNlfHwiIixkZT1xKGRlKSkpLnByb3RvY29sJiYhRy5zbGFzaGVzLHguc2xhc2hlcz1HLnNsYXNoZXN8fGNl'@;
put 'JiZkZS5zbGFzaGVzLHgucHJvdG9jb2w9Ry5wcm90b2NvbHx8ZGUucHJvdG9jb2x8fCIiLHNlPUcucmVzdCwoImZpbGU6Ij09PUcucHJvdG9jb2wmJigyIT09Ry5zbGFzaGVzQ291bnR8fFYudGVzdChzZSkpfHwhRy5zbGFzaGVzJiYoRy5wcm90b2NvbHx8Ry5zbGFzaGVzQ291bnQ8Mnx8IVEo'@;
put 'eC5wcm90b2NvbCkpKSYmKGdbM109Wy8oLiopLywicGF0aG5hbWUiXSk7XzxnLmxlbmd0aDtfKyspImZ1bmN0aW9uIiE9dHlwZW9mKEw9Z1tfXSk/KGo9TFsxXSwoeT1MWzBdKSE9eT94W2pdPXNlOiJzdHJpbmciPT10eXBlb2YgeT9+KEg9IkAiPT09eT9zZS5sYXN0SW5kZXhPZih5KTpzZS5p'@;
put 'bmRleE9mKHkpKSYmKCJudW1iZXIiPT10eXBlb2YgTFsyXT8oeFtqXT1zZS5zbGljZSgwLEgpLHNlPXNlLnNsaWNlKEgrTFsyXSkpOih4W2pdPXNlLnNsaWNlKEgpLHNlPXNlLnNsaWNlKDAsSCkpKTooSD15LmV4ZWMoc2UpKSYmKHhbal09SFsxXSxzZT1zZS5zbGljZSgwLEguaW5kZXgpKSx4'@;
put 'W2pdPXhbal18fGNlJiZMWzNdJiZkZVtqXXx8IiIsTFs0XSYmKHhbal09eFtqXS50b0xvd2VyQ2FzZSgpKSk6c2U9TChzZSx4KTtsZSYmKHgucXVlcnk9bGUoeC5xdWVyeSkpLGNlJiZkZS5zbGFzaGVzJiYiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmKCIiIT09eC5wYXRobmFtZXx8IiIh'@;
put 'PT1kZS5wYXRobmFtZSkmJih4LnBhdGhuYW1lPWZ1bmN0aW9uKHAsQyl7aWYoIiI9PT1wKXJldHVybiBDO2Zvcih2YXIgSz0oQ3x8Ii8iKS5zcGxpdCgiLyIpLnNsaWNlKDAsLTEpLmNvbmNhdChwLnNwbGl0KCIvIikpLG5lPUsubGVuZ3RoLHVlPUtbbmUtMV0saGU9ITEseGU9MDtuZS0tOyki'@;
put 'LiI9PT1LW25lXT9LLnNwbGljZShuZSwxKToiLi4iPT09S1tuZV0/KEsuc3BsaWNlKG5lLDEpLHhlKyspOnhlJiYoMD09PW5lJiYoaGU9ITApLEsuc3BsaWNlKG5lLDEpLHhlLS0pO3JldHVybiBoZSYmSy51bnNoaWZ0KCIiKSwiLiIhPT11ZSYmIi4uIiE9PXVlfHxLLnB1c2goIiIpLEsuam9p'@;
put 'bigiLyIpfSh4LnBhdGhuYW1lLGRlLnBhdGhuYW1lKSksIi8iIT09eC5wYXRobmFtZS5jaGFyQXQoMCkmJlEoeC5wcm90b2NvbCkmJih4LnBhdGhuYW1lPSIvIit4LnBhdGhuYW1lKSxQKHgucG9ydCx4LnByb3RvY29sKXx8KHguaG9zdD14Lmhvc3RuYW1lLHgucG9ydD0iIikseC51c2VybmFt'@;
put 'ZT14LnBhc3N3b3JkPSIiLHguYXV0aCYmKH4oSD14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCxIKSx4LnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC51c2VybmFtZSkpLHgucGFzc3dvcmQ9eC5hdXRoLnNsaWNl'@;
put 'KEgrMSkseC5wYXNzd29yZD1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgucGFzc3dvcmQpKSk6eC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHguYXV0aCkpLHguYXV0aD14LnBhc3N3b3JkP3gudXNlcm5hbWUrIjoiK3gucGFz'@;
put 'c3dvcmQ6eC51c2VybmFtZSkseC5vcmlnaW49ImZpbGU6IiE9PXgucHJvdG9jb2wmJlEoeC5wcm90b2NvbCkmJnguaG9zdD94LnByb3RvY29sKyIvLyIreC5ob3N0OiJudWxsIix4LmhyZWY9eC50b1N0cmluZygpfWFlLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHNlLGRlLGxlKXt2YXIgY2U9'@;
put 'dGhpcztzd2l0Y2goc2Upe2Nhc2UicXVlcnkiOiJzdHJpbmciPT10eXBlb2YgZGUmJmRlLmxlbmd0aCYmKGRlPShsZXx8VS5wYXJzZSkoZGUpKSxjZVtzZV09ZGU7YnJlYWs7Y2FzZSJwb3J0IjpjZVtzZV09ZGUsUChkZSxjZS5wcm90b2NvbCk/ZGUmJihjZS5ob3N0PWNlLmhvc3RuYW1lKyI6'@;
put 'IitkZSk6KGNlLmhvc3Q9Y2UuaG9zdG5hbWUsY2Vbc2VdPSIiKTticmVhaztjYXNlImhvc3RuYW1lIjpjZVtzZV09ZGUsY2UucG9ydCYmKGRlKz0iOiIrY2UucG9ydCksY2UuaG9zdD1kZTticmVhaztjYXNlImhvc3QiOmNlW3NlXT1kZSxCLnRlc3QoZGUpPyhkZT1kZS5zcGxpdCgiOiIpLGNl'@;
put 'LnBvcnQ9ZGUucG9wKCksY2UuaG9zdG5hbWU9ZGUuam9pbigiOiIpKTooY2UuaG9zdG5hbWU9ZGUsY2UucG9ydD0iIik7YnJlYWs7Y2FzZSJwcm90b2NvbCI6Y2UucHJvdG9jb2w9ZGUudG9Mb3dlckNhc2UoKSxjZS5zbGFzaGVzPSFsZTticmVhaztjYXNlInBhdGhuYW1lIjpjYXNlImhhc2gi'@;
put 'OmlmKGRlKXt2YXIgRz0icGF0aG5hbWUiPT09c2U/Ii8iOiIjIjtjZVtzZV09ZGUuY2hhckF0KDApIT09Rz9HK2RlOmRlfWVsc2UgY2Vbc2VdPWRlO2JyZWFrO2Nhc2UidXNlcm5hbWUiOmNhc2UicGFzc3dvcmQiOmNlW3NlXT1lbmNvZGVVUklDb21wb25lbnQoZGUpO2JyZWFrO2Nhc2UiYXV0'@;
put 'aCI6dmFyIHk9ZGUuaW5kZXhPZigiOiIpO355PyhjZS51c2VybmFtZT1kZS5zbGljZSgwLHkpLGNlLnVzZXJuYW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoY2UudXNlcm5hbWUpKSxjZS5wYXNzd29yZD1kZS5zbGljZSh5KzEpLGNlLnBhc3N3b3JkPWVuY29kZVVS'@;
put 'SUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoY2UucGFzc3dvcmQpKSk6Y2UudXNlcm5hbWU9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChkZSkpfWZvcih2YXIgTD0wO0w8Vy5sZW5ndGg7TCsrKXt2YXIgSD1XW0xdO0hbNF0mJihjZVtIWzFdXT1jZVtIWzFdXS50'@;
put 'b0xvd2VyQ2FzZSgpKX1yZXR1cm4gY2UuYXV0aD1jZS5wYXNzd29yZD9jZS51c2VybmFtZSsiOiIrY2UucGFzc3dvcmQ6Y2UudXNlcm5hbWUsY2Uub3JpZ2luPSJmaWxlOiIhPT1jZS5wcm90b2NvbCYmUShjZS5wcm90b2NvbCkmJmNlLmhvc3Q/Y2UucHJvdG9jb2wrIi8vIitjZS5ob3N0OiJu'@;
put 'dWxsIixjZS5ocmVmPWNlLnRvU3RyaW5nKCksY2V9LHRvU3RyaW5nOmZ1bmN0aW9uKHNlKXtzZSYmImZ1bmN0aW9uIj09dHlwZW9mIHNlfHwoc2U9VS5zdHJpbmdpZnkpO3ZhciBkZSxsZT10aGlzLGNlPWxlLmhvc3QsRz1sZS5wcm90b2NvbDtHJiYiOiIhPT1HLmNoYXJBdChHLmxlbmd0aC0x'@;
put 'KSYmKEcrPSI6Iik7dmFyIHk9RysobGUucHJvdG9jb2wmJmxlLnNsYXNoZXN8fFEobGUucHJvdG9jb2wpPyIvLyI6IiIpO3JldHVybiBsZS51c2VybmFtZT8oeSs9bGUudXNlcm5hbWUsbGUucGFzc3dvcmQmJih5Kz0iOiIrbGUucGFzc3dvcmQpLHkrPSJAIik6bGUucGFzc3dvcmQ/KHkrPSI6'@;
put 'IitsZS5wYXNzd29yZCx5Kz0iQCIpOiJmaWxlOiIhPT1sZS5wcm90b2NvbCYmUShsZS5wcm90b2NvbCkmJiFjZSYmIi8iIT09bGUucGF0aG5hbWUmJih5Kz0iQCIpLCgiOiI9PT1jZVtjZS5sZW5ndGgtMV18fEIudGVzdChsZS5ob3N0bmFtZSkmJiFsZS5wb3J0KSYmKGNlKz0iOiIpLHkrPWNl'@;
put 'K2xlLnBhdGhuYW1lLChkZT0ib2JqZWN0Ij09dHlwZW9mIGxlLnF1ZXJ5P3NlKGxlLnF1ZXJ5KTpsZS5xdWVyeSkmJih5Kz0iPyIhPT1kZS5jaGFyQXQoMCk/Ij8iK2RlOmRlKSxsZS5oYXNoJiYoeSs9bGUuaGFzaCkseX19LGFlLmV4dHJhY3RQcm90b2NvbD10ZSxhZS5sb2NhdGlvbj1xLGFl'@;
put 'LnRyaW1MZWZ0PVosYWUucXM9VSx3LmV4cG9ydHM9YWV9LDQ5Mjc6KHcsQSxEKT0+e3ZhciBQPUQoNTEwOCk7ZnVuY3Rpb24gVShJKXt0cnl7aWYoIUQuZy5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9dmFyIEU9RC5nLmxvY2FsU3RvcmFnZVtJXTtyZXR1cm4gbnVsbCE9'@;
put 'RSYmInRydWUiPT09U3RyaW5nKEUpLnRvTG93ZXJDYXNlKCl9dy5leHBvcnRzPWZ1bmN0aW9uKEksRSl7aWYoVSgibm9EZXByZWNhdGlvbiIpKXJldHVybiBJO3ZhciBrPSExO3JldHVybiBmdW5jdGlvbigpe2lmKCFrKXtpZihVKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9y'@;
put 'KEUpO1UoInRyYWNlRGVwcmVjYXRpb24iKT9QLnRyYWNlKEUpOlAud2FybihFKSxrPSEwfXJldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6dz0+e3cuZXhwb3J0cz1mdW5jdGlvbihBKXtyZXR1cm4gQSYmIm9iamVjdCI9PXR5cGVvZiBBJiYiZnVuY3Rpb24iPT10eXBlb2Yg'@;
put 'QS5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgQS5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgQS5yZWFkVUludDh9fSw1OTU1Oih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCgyNTg0KSxVPUQoODY2MiksST1EKDY0MzApLEU9RCg1NjkyKTtmdW5jdGlvbiBrKEspe3JldHVybiBLLmNh'@;
put 'bGwuYmluZChLKX12YXIgQj10eXBlb2YgQmlnSW50PCJ1IixOPXR5cGVvZiBTeW1ib2w8InUiLFY9ayhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSxaPWsoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxXPWsoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSx6PWsoQm9vbGVhbi5wcm90b3R5'@;
put 'cGUudmFsdWVPZik7aWYoQil2YXIgcT1rKEJpZ0ludC5wcm90b3R5cGUudmFsdWVPZik7aWYoTil2YXIgUT1rKFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gdGUoSyxuZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBLKXJldHVybiExO3RyeXtyZXR1cm4gbmUoSyksITB9Y2F0Y2h7'@;
put 'cmV0dXJuITF9fWZ1bmN0aW9uIGFlKEspe3JldHVybiJbb2JqZWN0IE1hcF0iPT09VihLKX1mdW5jdGlvbiBzZShLKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PVYoSyl9ZnVuY3Rpb24gZGUoSyl7cmV0dXJuIltvYmplY3QgV2Vha01hcF0iPT09VihLKX1mdW5jdGlvbiBsZShLKXtyZXR1cm4i'@;
put 'W29iamVjdCBXZWFrU2V0XSI9PT1WKEspfWZ1bmN0aW9uIGNlKEspe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1WKEspfWZ1bmN0aW9uIEcoSyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJihjZS53b3JraW5nP2NlKEspOksgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil9'@;
put 'ZnVuY3Rpb24geShLKXtyZXR1cm4iW29iamVjdCBEYXRhVmlld10iPT09VihLKX1mdW5jdGlvbiBMKEspe3JldHVybiB0eXBlb2YgRGF0YVZpZXc8InUiJiYoeS53b3JraW5nP3koSyk6SyBpbnN0YW5jZW9mIERhdGFWaWV3KX1BLmlzQXJndW1lbnRzT2JqZWN0PVAsQS5pc0dlbmVyYXRvckZ1'@;
put 'bmN0aW9uPVUsQS5pc1R5cGVkQXJyYXk9RSxBLmlzUHJvbWlzZT1mdW5jdGlvbihLKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZLIGluc3RhbmNlb2YgUHJvbWlzZXx8bnVsbCE9PUsmJiJvYmplY3QiPT10eXBlb2YgSyYmImZ1bmN0aW9uIj09dHlwZW9mIEsudGhlbiYmImZ1bmN0aW9u'@;
put 'Ij09dHlwZW9mIEsuY2F0Y2h9LEEuaXNBcnJheUJ1ZmZlclZpZXc9ZnVuY3Rpb24oSyl7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BcnJheUJ1ZmZlci5pc1ZpZXcoSyk6RShLKXx8TChLKX0sQS5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24oSyl7cmV0'@;
put 'dXJuIlVpbnQ4QXJyYXkiPT09SShLKX0sQS5pc1VpbnQ4Q2xhbXBlZEFycmF5PWZ1bmN0aW9uKEspe3JldHVybiJVaW50OENsYW1wZWRBcnJheSI9PT1JKEspfSxBLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24oSyl7cmV0dXJuIlVpbnQxNkFycmF5Ij09PUkoSyl9LEEuaXNVaW50MzJBcnJheT1m'@;
put 'dW5jdGlvbihLKXtyZXR1cm4iVWludDMyQXJyYXkiPT09SShLKX0sQS5pc0ludDhBcnJheT1mdW5jdGlvbihLKXtyZXR1cm4iSW50OEFycmF5Ij09PUkoSyl9LEEuaXNJbnQxNkFycmF5PWZ1bmN0aW9uKEspe3JldHVybiJJbnQxNkFycmF5Ij09PUkoSyl9LEEuaXNJbnQzMkFycmF5PWZ1bmN0'@;
put 'aW9uKEspe3JldHVybiJJbnQzMkFycmF5Ij09PUkoSyl9LEEuaXNGbG9hdDMyQXJyYXk9ZnVuY3Rpb24oSyl7cmV0dXJuIkZsb2F0MzJBcnJheSI9PT1JKEspfSxBLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uKEspe3JldHVybiJGbG9hdDY0QXJyYXkiPT09SShLKX0sQS5pc0JpZ0ludDY0QXJy'@;
put 'YXk9ZnVuY3Rpb24oSyl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09SShLKX0sQS5pc0JpZ1VpbnQ2NEFycmF5PWZ1bmN0aW9uKEspe3JldHVybiJCaWdVaW50NjRBcnJheSI9PT1JKEspfSxhZS53b3JraW5nPXR5cGVvZiBNYXA8InUiJiZhZShuZXcgTWFwKSxBLmlzTWFwPWZ1bmN0aW9uKEsp'@;
put 'e3JldHVybiB0eXBlb2YgTWFwPCJ1IiYmKGFlLndvcmtpbmc/YWUoSyk6SyBpbnN0YW5jZW9mIE1hcCl9LHNlLndvcmtpbmc9dHlwZW9mIFNldDwidSImJnNlKG5ldyBTZXQpLEEuaXNTZXQ9ZnVuY3Rpb24oSyl7cmV0dXJuIHR5cGVvZiBTZXQ8InUiJiYoc2Uud29ya2luZz9zZShLKTpLIGlu'@;
put 'c3RhbmNlb2YgU2V0KX0sZGUud29ya2luZz10eXBlb2YgV2Vha01hcDwidSImJmRlKG5ldyBXZWFrTWFwKSxBLmlzV2Vha01hcD1mdW5jdGlvbihLKXtyZXR1cm4gdHlwZW9mIFdlYWtNYXA8InUiJiYoZGUud29ya2luZz9kZShLKTpLIGluc3RhbmNlb2YgV2Vha01hcCl9LGxlLndvcmtpbmc9'@;
put 'dHlwZW9mIFdlYWtTZXQ8InUiJiZsZShuZXcgV2Vha1NldCksQS5pc1dlYWtTZXQ9ZnVuY3Rpb24oSyl7cmV0dXJuIGxlKEspfSxjZS53b3JraW5nPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJmNlKG5ldyBBcnJheUJ1ZmZlciksQS5pc0FycmF5QnVmZmVyPUcseS53b3JraW5nPXR5cGVvZiBB'@;
put 'cnJheUJ1ZmZlcjwidSImJnR5cGVvZiBEYXRhVmlldzwidSImJnkobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxBLmlzRGF0YVZpZXc9TDt2YXIgSD10eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXI8InUiP1NoYXJlZEFycmF5QnVmZmVyOnZvaWQgMDtmdW5jdGlvbiBqKEsp'@;
put 'e3JldHVybiJbb2JqZWN0IFNoYXJlZEFycmF5QnVmZmVyXSI9PT1WKEspfWZ1bmN0aW9uIGcoSyl7cmV0dXJuIHZvaWQgMCE9PUgmJih2b2lkIDA9PT1qLndvcmtpbmcmJihqLndvcmtpbmc9aihuZXcgSCkpLGoud29ya2luZz9qKEspOksgaW5zdGFuY2VvZiBIKX1mdW5jdGlvbiBTKEspe3Jl'@;
put 'dHVybiB0ZShLLFopfWZ1bmN0aW9uIHgoSyl7cmV0dXJuIHRlKEssVyl9ZnVuY3Rpb24gXyhLKXtyZXR1cm4gdGUoSyx6KX1mdW5jdGlvbiBwKEspe3JldHVybiBCJiZ0ZShLLHEpfWZ1bmN0aW9uIEMoSyl7cmV0dXJuIE4mJnRlKEssUSl9QS5pc1NoYXJlZEFycmF5QnVmZmVyPWcsQS5pc0Fz'@;
put 'eW5jRnVuY3Rpb249ZnVuY3Rpb24oSyl7cmV0dXJuIltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT09VihLKX0sQS5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uKEspe3JldHVybiJbb2JqZWN0IE1hcCBJdGVyYXRvcl0iPT09VihLKX0sQS5pc1NldEl0ZXJhdG9yPWZ1bmN0aW9uKEspe3JldHVybiJb'@;
put 'b2JqZWN0IFNldCBJdGVyYXRvcl0iPT09VihLKX0sQS5pc0dlbmVyYXRvck9iamVjdD1mdW5jdGlvbihLKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIj09PVYoSyl9LEEuaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uKEspe3JldHVybiJbb2JqZWN0IFdlYkFzc2VtYmx5'@;
put 'Lk1vZHVsZV0iPT09VihLKX0sQS5pc051bWJlck9iamVjdD1TLEEuaXNTdHJpbmdPYmplY3Q9eCxBLmlzQm9vbGVhbk9iamVjdD1fLEEuaXNCaWdJbnRPYmplY3Q9cCxBLmlzU3ltYm9sT2JqZWN0PUMsQS5pc0JveGVkUHJpbWl0aXZlPWZ1bmN0aW9uKEspe3JldHVybiBTKEspfHx4KEspfHxf'@;
put 'KEspfHxwKEspfHxDKEspfSxBLmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24oSyl7cmV0dXJuIHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmKEcoSyl8fGcoSykpfSxbImlzUHJveHkiLCJpc0V4dGVybmFsIiwiaXNNb2R1bGVOYW1lc3BhY2VPYmplY3QiXS5mb3JFYWNoKGZ1bmN0aW9uKEspe09i'@;
put 'amVjdC5kZWZpbmVQcm9wZXJ0eShBLEsse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoSysiIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdXNlcmxhbmQiKX19KX0pfSw5NTM5Oih3LEEsRCk9Pnt2YXIgUD1EKDQxNTUpLFU9RCg1MTA4KSxJPU9iamVjdC5nZXRP'@;
put 'd25Qcm9wZXJ0eURlc2NyaXB0b3JzfHxmdW5jdGlvbihLKXtmb3IodmFyIG5lPU9iamVjdC5rZXlzKEspLHVlPXt9LGhlPTA7aGU8bmUubGVuZ3RoO2hlKyspdWVbbmVbaGVdXT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEssbmVbaGVdKTtyZXR1cm4gdWV9LEU9LyVbc2RqJV0v'@;
put 'ZztBLmZvcm1hdD1mdW5jdGlvbihLKXtpZighbGUoSykpe2Zvcih2YXIgbmU9W10sdWU9MDt1ZTxhcmd1bWVudHMubGVuZ3RoO3VlKyspbmUucHVzaChWKGFyZ3VtZW50c1t1ZV0pKTtyZXR1cm4gbmUuam9pbigiICIpfXVlPTE7Zm9yKHZhciBoZT1hcmd1bWVudHMseGU9aGUubGVuZ3RoLE9l'@;
put 'PVN0cmluZyhLKS5yZXBsYWNlKEUsZnVuY3Rpb24oRWUpe2lmKCIlJSI9PT1FZSlyZXR1cm4iJSI7aWYodWU+PXhlKXJldHVybiBFZTtzd2l0Y2goRWUpe2Nhc2UiJXMiOnJldHVybiBTdHJpbmcoaGVbdWUrK10pO2Nhc2UiJWQiOnJldHVybiBOdW1iZXIoaGVbdWUrK10pO2Nhc2UiJWoiOnRy'@;
put 'eXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkoaGVbdWUrK10pfWNhdGNoe3JldHVybiJbQ2lyY3VsYXJdIn1kZWZhdWx0OnJldHVybiBFZX19KSxIZT1oZVt1ZV07dWU8eGU7SGU9aGVbKyt1ZV0pc2UoSGUpfHwheShIZSk/T2UrPSIgIitIZTpPZSs9IiAiK1YoSGUpO3JldHVybiBPZX0sQS5kZXBy'@;
put 'ZWNhdGU9ZnVuY3Rpb24oSyxuZSl7aWYodm9pZCAwIT09UCYmITA9PT1QLm5vRGVwcmVjYXRpb24pcmV0dXJuIEs7aWYodm9pZCAwPT09UClyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5kZXByZWNhdGUoSyxuZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgdWU9ITE7cmV0dXJuIGZ1'@;
put 'bmN0aW9uKCl7aWYoIXVlKXtpZihQLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG5lKTtQLnRyYWNlRGVwcmVjYXRpb24/VS50cmFjZShuZSk6VS5lcnJvcihuZSksdWU9ITB9cmV0dXJuIEsuYXBwbHkodGhpcyxhcmd1bWVudHMpfX07dmFyIGs9e30sQj0vXiQvO2lmKFAuZW52'@;
put 'Lk5PREVfREVCVUcpe3ZhciBOPVAuZW52Lk5PREVfREVCVUc7Tj1OLnJlcGxhY2UoL1t8XFx7fSgpW1xdXiQrPy5dL2csIlxcJCYiKS5yZXBsYWNlKC9cKi9nLCIuKiIpLnJlcGxhY2UoLywvZywiJHxeIikudG9VcHBlckNhc2UoKSxCPW5ldyBSZWdFeHAoIl4iK04rIiQiLCJpIil9ZnVuY3Rp'@;
put 'b24gVihLLG5lKXt2YXIgdWU9e3NlZW46W10sc3R5bGl6ZTpXfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKHVlLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKHVlLmNvbG9ycz1hcmd1bWVudHNbM10pLGFlKG5lKT91ZS5zaG93SGlkZGVuPW5lOm5lJiZB'@;
put 'Ll9leHRlbmQodWUsbmUpLGNlKHVlLnNob3dIaWRkZW4pJiYodWUuc2hvd0hpZGRlbj0hMSksY2UodWUuZGVwdGgpJiYodWUuZGVwdGg9MiksY2UodWUuY29sb3JzKSYmKHVlLmNvbG9ycz0hMSksY2UodWUuY3VzdG9tSW5zcGVjdCkmJih1ZS5jdXN0b21JbnNwZWN0PSEwKSx1ZS5jb2xvcnMm'@;
put 'Jih1ZS5zdHlsaXplPVopLHoodWUsSyx1ZS5kZXB0aCl9ZnVuY3Rpb24gWihLLG5lKXt2YXIgdWU9Vi5zdHlsZXNbbmVdO3JldHVybiB1ZT8iXHgxYlsiK1YuY29sb3JzW3VlXVswXSsibSIrSysiXHgxYlsiK1YuY29sb3JzW3VlXVsxXSsibSI6S31mdW5jdGlvbiBXKEssbmUpe3JldHVybiBL'@;
put 'fWZ1bmN0aW9uIHooSyxuZSx1ZSl7aWYoSy5jdXN0b21JbnNwZWN0JiZuZSYmaihuZS5pbnNwZWN0KSYmbmUuaW5zcGVjdCE9PUEuaW5zcGVjdCYmKCFuZS5jb25zdHJ1Y3Rvcnx8bmUuY29uc3RydWN0b3IucHJvdG90eXBlIT09bmUpKXt2YXIgaGU9bmUuaW5zcGVjdCh1ZSxLKTtyZXR1cm4g'@;
put 'bGUoaGUpfHwoaGU9eihLLGhlLHVlKSksaGV9dmFyIHhlPWZ1bmN0aW9uKFhlLGF0KXtpZihjZShhdCkpcmV0dXJuIFhlLnN0eWxpemUoInVuZGVmaW5lZCIsInVuZGVmaW5lZCIpO2lmKGxlKGF0KSl7dmFyIEZlPSInIitKU09OLnN0cmluZ2lmeShhdCkucmVwbGFjZSgvXiJ8IiQvZywiIiku'@;
put 'cmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpKyInIjtyZXR1cm4gWGUuc3R5bGl6ZShGZSwic3RyaW5nIil9cmV0dXJuIGRlKGF0KT9YZS5zdHlsaXplKCIiK2F0LCJudW1iZXIiKTphZShhdCk/WGUuc3R5bGl6ZSgiIithdCwiYm9vbGVhbiIpOnNlKGF0KT9YZS5zdHls'@;
put 'aXplKCJudWxsIiwibnVsbCIpOnZvaWQgMH0oSyxuZSk7aWYoeGUpcmV0dXJuIHhlO3ZhciBhdCxPZT1PYmplY3Qua2V5cyhuZSksSGU9KGF0PXt9LE9lLmZvckVhY2goZnVuY3Rpb24oRmUsQ2Upe2F0W0ZlXT0hMH0pLGF0KTtpZihLLnNob3dIaWRkZW4mJihPZT1PYmplY3QuZ2V0T3duUHJv'@;
put 'cGVydHlOYW1lcyhuZSkpLEgobmUpJiYoT2UuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxPZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gcShuZSk7aWYoMD09PU9lLmxlbmd0aCl7aWYoaihuZSkpcmV0dXJuIEsuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobmUubmFtZT8iOiAiK25l'@;
put 'Lm5hbWU6IiIpKyJdIiwic3BlY2lhbCIpO2lmKEcobmUpKXJldHVybiBLLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik7aWYoTChuZSkpcmV0dXJuIEsuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwiZGF0ZSIpO2lm'@;
put 'KEgobmUpKXJldHVybiBxKG5lKX12YXIgTGUsTmU9IiIsS2U9ITEsVWU9WyJ7IiwifSJdO3JldHVybiB0ZShuZSkmJihLZT0hMCxVZT1bIlsiLCJdIl0pLGoobmUpJiYoTmU9IiBbRnVuY3Rpb24iKyhuZS5uYW1lPyI6ICIrbmUubmFtZToiIikrIl0iKSxHKG5lKSYmKE5lPSIgIitSZWdFeHAu'@;
put 'cHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmUpKSxMKG5lKSYmKE5lPSIgIitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG5lKSksSChuZSkmJihOZT0iICIrcShuZSkpLDAhPT1PZS5sZW5ndGh8fEtlJiYwIT1uZS5sZW5ndGg/dWU8MD9HKG5lKT9LLnN0eWxpemUoUmVnRXhwLnBy'@;
put 'b3RvdHlwZS50b1N0cmluZy5jYWxsKG5lKSwicmVnZXhwIik6Sy5zdHlsaXplKCJbT2JqZWN0XSIsInNwZWNpYWwiKTooSy5zZWVuLnB1c2gobmUpLExlPUtlP2Z1bmN0aW9uKFhlLGF0LEZlLENlLERlKXtmb3IodmFyIFJlPVtdLGV0PTAsbnQ9YXQubGVuZ3RoO2V0PG50OysrZXQpXyhhdCxT'@;
put 'dHJpbmcoZXQpKT9SZS5wdXNoKFEoWGUsYXQsRmUsQ2UsU3RyaW5nKGV0KSwhMCkpOlJlLnB1c2goIiIpO3JldHVybiBEZS5mb3JFYWNoKGZ1bmN0aW9uKEdlKXtHZS5tYXRjaCgvXlxkKyQvKXx8UmUucHVzaChRKFhlLGF0LEZlLENlLEdlLCEwKSl9KSxSZX0oSyxuZSx1ZSxIZSxPZSk6T2Uu'@;
put 'bWFwKGZ1bmN0aW9uKFhlKXtyZXR1cm4gUShLLG5lLHVlLEhlLFhlLEtlKX0pLEsuc2Vlbi5wb3AoKSxmdW5jdGlvbihYZSxhdCxGZSl7cmV0dXJuIFhlLnJlZHVjZShmdW5jdGlvbihEZSxSZSl7cmV0dXJuIFJlLmluZGV4T2YoIlxuIiksRGUrUmUucmVwbGFjZSgvXHUwMDFiXFtcZFxkP20v'@;
put 'ZywiIikubGVuZ3RoKzF9LDApPjYwP0ZlWzBdKygiIj09PWF0PyIiOmF0KyJcbiAiKSsiICIrWGUuam9pbigiLFxuICAiKSsiICIrRmVbMV06RmVbMF0rYXQrIiAiK1hlLmpvaW4oIiwgIikrIiAiK0ZlWzFdfShMZSxOZSxVZSkpOlVlWzBdK05lK1VlWzFdfWZ1bmN0aW9uIHEoSyl7cmV0dXJu'@;
put 'IlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEspKyJdIn1mdW5jdGlvbiBRKEssbmUsdWUsaGUseGUsT2Upe3ZhciBIZSxFZSxMZTtpZigoTGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuZSx4ZSl8fHt2YWx1ZTpuZVt4ZV19KS5nZXQ/RWU9Sy5zdHlsaXplKExl'@;
put 'LnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6TGUuc2V0JiYoRWU9Sy5zdHlsaXplKCJbU2V0dGVyXSIsInNwZWNpYWwiKSksXyhoZSx4ZSl8fChIZT0iWyIreGUrIl0iKSxFZXx8KEsuc2Vlbi5pbmRleE9mKExlLnZhbHVlKTwwPyhFZT1zZSh1ZSk/eihLLExl'@;
put 'LnZhbHVlLG51bGwpOnooSyxMZS52YWx1ZSx1ZS0xKSkuaW5kZXhPZigiXG4iKT4tMSYmKEVlPU9lP0VlLnNwbGl0KCJcbiIpLm1hcChmdW5jdGlvbihOZSl7cmV0dXJuIiAgIitOZX0pLmpvaW4oIlxuIikuc2xpY2UoMik6IlxuIitFZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oTmUpe3Jl'@;
put 'dHVybiIgICAiK05lfSkuam9pbigiXG4iKSk6RWU9Sy5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxjZShIZSkpe2lmKE9lJiZ4ZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gRWU7KEhlPUpTT04uc3RyaW5naWZ5KCIiK3hlKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05'@;
put 'XSopIiQvKT8oSGU9SGUuc2xpY2UoMSwtMSksSGU9Sy5zdHlsaXplKEhlLCJuYW1lIikpOihIZT1IZS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksSGU9Sy5zdHlsaXplKEhlLCJzdHJpbmciKSl9cmV0dXJuIEhlKyI6ICIr'@;
put 'RWV9ZnVuY3Rpb24gdGUoSyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoSyl9ZnVuY3Rpb24gYWUoSyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgS31mdW5jdGlvbiBzZShLKXtyZXR1cm4gbnVsbD09PUt9ZnVuY3Rpb24gZGUoSyl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBLfWZ1bmN0aW9uIGxl'@;
put 'KEspe3JldHVybiJzdHJpbmciPT10eXBlb2YgS31mdW5jdGlvbiBjZShLKXtyZXR1cm4gdm9pZCAwPT09S31mdW5jdGlvbiBHKEspe3JldHVybiB5KEspJiYiW29iamVjdCBSZWdFeHBdIj09PWcoSyl9ZnVuY3Rpb24geShLKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIEsmJm51bGwhPT1LfWZ1'@;
put 'bmN0aW9uIEwoSyl7cmV0dXJuIHkoSykmJiJbb2JqZWN0IERhdGVdIj09PWcoSyl9ZnVuY3Rpb24gSChLKXtyZXR1cm4geShLKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1nKEspfHxLIGluc3RhbmNlb2YgRXJyb3IpfWZ1bmN0aW9uIGooSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEt9ZnVu'@;
put 'Y3Rpb24gZyhLKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEspfWZ1bmN0aW9uIFMoSyl7cmV0dXJuIEs8MTA/IjAiK0sudG9TdHJpbmcoMTApOksudG9TdHJpbmcoMTApfUEuZGVidWdsb2c9ZnVuY3Rpb24oSyl7aWYoSz1LLnRvVXBwZXJDYXNlKCksIWtbS10paWYo'@;
put 'Qi50ZXN0KEspKXt2YXIgbmU9UC5waWQ7a1tLXT1mdW5jdGlvbigpe3ZhciB1ZT1BLmZvcm1hdC5hcHBseShBLGFyZ3VtZW50cyk7VS5lcnJvcigiJXMgJWQ6ICVzIixLLG5lLHVlKX19ZWxzZSBrW0tdPWZ1bmN0aW9uKCl7fTtyZXR1cm4ga1tLXX0sQS5pbnNwZWN0PVYsVi5jb2xvcnM9e2Jv'@;
put 'bGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0s'@;
put 'eWVsbG93OlszMywzOV19LFYuc3R5bGVzPXtzcGVjaWFsOiJjeWFuIixudW1iZXI6InllbGxvdyIsYm9vbGVhbjoieWVsbG93Iix1bmRlZmluZWQ6ImdyZXkiLG51bGw6ImJvbGQiLHN0cmluZzoiZ3JlZW4iLGRhdGU6Im1hZ2VudGEiLHJlZ2V4cDoicmVkIn0sQS50eXBlcz1EKDU5NTUpLEEu'@;
put 'aXNBcnJheT10ZSxBLmlzQm9vbGVhbj1hZSxBLmlzTnVsbD1zZSxBLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uKEspe3JldHVybiBudWxsPT1LfSxBLmlzTnVtYmVyPWRlLEEuaXNTdHJpbmc9bGUsQS5pc1N5bWJvbD1mdW5jdGlvbihLKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEt9LEEu'@;
put 'aXNVbmRlZmluZWQ9Y2UsQS5pc1JlZ0V4cD1HLEEudHlwZXMuaXNSZWdFeHA9RyxBLmlzT2JqZWN0PXksQS5pc0RhdGU9TCxBLnR5cGVzLmlzRGF0ZT1MLEEuaXNFcnJvcj1ILEEudHlwZXMuaXNOYXRpdmVFcnJvcj1ILEEuaXNGdW5jdGlvbj1qLEEuaXNQcmltaXRpdmU9ZnVuY3Rpb24oSyl7'@;
put 'cmV0dXJuIG51bGw9PT1LfHwiYm9vbGVhbiI9PXR5cGVvZiBLfHwibnVtYmVyIj09dHlwZW9mIEt8fCJzdHJpbmciPT10eXBlb2YgS3x8InN5bWJvbCI9PXR5cGVvZiBLfHx2b2lkIDA9PT1LfSxBLmlzQnVmZmVyPUQoMzg0KTt2YXIgeD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIs'@;
put 'Ikp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIF8oSyxuZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChLLG5lKX1BLmxvZz1mdW5jdGlvbigpe3ZhciBLLG5lO1UubG9nKCIlcyAtICVzIiwobmU9W1MoKEs9bmV3'@;
put 'IERhdGUpLmdldEhvdXJzKCkpLFMoSy5nZXRNaW51dGVzKCkpLFMoSy5nZXRTZWNvbmRzKCkpXS5qb2luKCI6IiksW0suZ2V0RGF0ZSgpLHhbSy5nZXRNb250aCgpXSxuZV0uam9pbigiICIpKSxBLmZvcm1hdC5hcHBseShBLGFyZ3VtZW50cykpfSxBLmluaGVyaXRzPUQoNTcxNyksQS5fZXh0'@;
put 'ZW5kPWZ1bmN0aW9uKEssbmUpe2lmKCFuZXx8IXkobmUpKXJldHVybiBLO2Zvcih2YXIgdWU9T2JqZWN0LmtleXMobmUpLGhlPXVlLmxlbmd0aDtoZS0tOylLW3VlW2hlXV09bmVbdWVbaGVdXTtyZXR1cm4gS307dmFyIHA9dHlwZW9mIFN5bWJvbDwidSI/U3ltYm9sKCJ1dGlsLnByb21pc2lm'@;
put 'eS5jdXN0b20iKTp2b2lkIDA7ZnVuY3Rpb24gQyhLLG5lKXtpZighSyl7dmFyIHVlPW5ldyBFcnJvcigiUHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCBhIGZhbHN5IHZhbHVlIik7dWUucmVhc29uPUssSz11ZX1yZXR1cm4gbmUoSyl9QS5wcm9taXNpZnk9ZnVuY3Rpb24oSyl7aWYoImZ1bmN0'@;
put 'aW9uIiE9dHlwZW9mIEspdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7aWYocCYmS1twXSl7dmFyIG5lO2lmKCJmdW5jdGlvbiIhPXR5cGVvZihuZT1LW3BdKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInV0'@;
put 'aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZSxwLHt2YWx1ZTpuZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLG5lfWZ1bmN0aW9uIG5lKCl7Zm9y'@;
put 'KHZhciB1ZSxoZSx4ZT1uZXcgUHJvbWlzZShmdW5jdGlvbihFZSxMZSl7dWU9RWUsaGU9TGV9KSxPZT1bXSxIZT0wO0hlPGFyZ3VtZW50cy5sZW5ndGg7SGUrKylPZS5wdXNoKGFyZ3VtZW50c1tIZV0pO09lLnB1c2goZnVuY3Rpb24oRWUsTGUpe0VlP2hlKEVlKTp1ZShMZSl9KTt0cnl7Sy5h'@;
put 'cHBseSh0aGlzLE9lKX1jYXRjaChFZSl7aGUoRWUpfXJldHVybiB4ZX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKG5lLE9iamVjdC5nZXRQcm90b3R5cGVPZihLKSkscCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG5lLHAse3ZhbHVlOm5lLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITEs'@;
put 'Y29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobmUsSShLKSl9LEEucHJvbWlzaWZ5LmN1c3RvbT1wLEEuY2FsbGJhY2tpZnk9ZnVuY3Rpb24oSyl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEspdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJvcmlnaW5hbCIgYXJndW1l'@;
put 'bnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7ZnVuY3Rpb24gbmUoKXtmb3IodmFyIHVlPVtdLGhlPTA7aGU8YXJndW1lbnRzLmxlbmd0aDtoZSsrKXVlLnB1c2goYXJndW1lbnRzW2hlXSk7dmFyIHhlPXVlLnBvcCgpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB4ZSl0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJUaGUgbGFzdCBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24iKTt2YXIgT2U9dGhpcyxIZT1mdW5jdGlvbigpe3JldHVybiB4ZS5hcHBseShPZSxhcmd1bWVudHMpfTtLLmFwcGx5KHRoaXMsdWUpLnRoZW4oZnVuY3Rpb24oRWUpe1AubmV4dFRpY2soSGUuYmluZChu'@;
put 'dWxsLG51bGwsRWUpKX0sZnVuY3Rpb24oRWUpe1AubmV4dFRpY2soQy5iaW5kKG51bGwsRWUsSGUpKX0pfXJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YobmUsT2JqZWN0LmdldFByb3RvdHlwZU9mKEspKSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhuZSxJKEspKSxuZX19LDQ4MToodyxB'@;
put 'LEQpPT57IWZ1bmN0aW9uKFApeyJ1c2Ugc3RyaWN0IjtQLmV4cG9ydHMuaXNfdXJpPUksUC5leHBvcnRzLmlzX2h0dHBfdXJpPUUsUC5leHBvcnRzLmlzX2h0dHBzX3VyaT1rLFAuZXhwb3J0cy5pc193ZWJfdXJpPUIsUC5leHBvcnRzLmlzVXJpPUksUC5leHBvcnRzLmlzSHR0cFVyaT1FLFAu'@;
put 'ZXhwb3J0cy5pc0h0dHBzVXJpPWssUC5leHBvcnRzLmlzV2ViVXJpPUI7dmFyIFU9ZnVuY3Rpb24oTil7cmV0dXJuIE4ubWF0Y2goLyg/OihbXjpcLz8jXSspOik/KD86XC9cLyhbXlwvPyNdKikpPyhbXj8jXSopKD86XD8oW14jXSopKT8oPzojKC4qKSk/Lyl9O2Z1bmN0aW9uIEkoTil7aWYo'@;
put 'TiYmIS9bXmEtejAtOVw6XC9cP1wjXFtcXVxAXCFcJFwmXCdcKFwpXCpcK1wsXDtcPVwuXC1cX1x+XCVdL2kudGVzdChOKSYmIS8lW14wLTlhLWZdL2kudGVzdChOKSYmIS8lWzAtOWEtZl0oOj9bXjAtOWEtZl18JCkvaS50ZXN0KE4pKXt2YXIgVixaLFcseixxLFE9IiIsdGU9IiI7aWYoUT0o'@;
put 'Vj1VKE4pKVsxXSxaPVZbMl0sVz1WWzNdLHo9Vls0XSxxPVZbNV0sUSYmUS5sZW5ndGgmJlcubGVuZ3RoPj0wKXtpZihaJiZaLmxlbmd0aCl7aWYoMCE9PVcubGVuZ3RoJiYhL15cLy8udGVzdChXKSlyZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoVykpcmV0dXJuO2lmKC9eW2Etel1bYS16'@;
put 'MC05XCtcLVwuXSokLy50ZXN0KFEudG9Mb3dlckNhc2UoKSkpcmV0dXJuIHRlKz1RKyI6IixaJiZaLmxlbmd0aCYmKHRlKz0iLy8iK1opLHRlKz1XLHomJnoubGVuZ3RoJiYodGUrPSI/Iit6KSxxJiZxLmxlbmd0aCYmKHRlKz0iIyIrcSksdGV9fX1mdW5jdGlvbiBFKE4sVil7aWYoSShOKSl7'@;
put 'dmFyIFosVyx6LHEsUT0iIix0ZT0iIixhZT0iIixzZT0iIjtpZihRPShaPVUoTikpWzFdLHRlPVpbMl0sVz1aWzNdLHo9Wls0XSxxPVpbNV0sUSl7aWYoVil7aWYoImh0dHBzIiE9US50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9US50b0xvd2VyQ2FzZSgpKXJldHVybjtp'@;
put 'Zih0ZSlyZXR1cm4vOihcZCspJC8udGVzdCh0ZSkmJihhZT10ZS5tYXRjaCgvOihcZCspJC8pWzBdLHRlPXRlLnJlcGxhY2UoLzpcZCskLywiIikpLHNlKz1RKyI6IixzZSs9Ii8vIit0ZSxhZSYmKHNlKz1hZSksc2UrPVcseiYmei5sZW5ndGgmJihzZSs9Ij8iK3opLHEmJnEubGVuZ3RoJiYo'@;
put 'c2UrPSIjIitxKSxzZX19fWZ1bmN0aW9uIGsoTil7cmV0dXJuIEUoTiwhMCl9ZnVuY3Rpb24gQihOKXtyZXR1cm4gRShOKXx8ayhOKX19KHc9RC5ubWQodykpfSw2NDMwOih3LEEsRCk9PnsidXNlIHN0cmljdCI7dmFyIFA9RCg0MDI5KSxVPUQoMzA4MyksST1EKDE5MjQpLEU9RCg3Mjk2KSxr'@;
put 'PUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxCPUQoNjQxMCkoKSxOPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9ELmc6Z2xvYmFsVGhpcyxWPVUoKSxaPUkoIlN0cmluZy5wcm90b3R5cGUuc2xpY2UiKSxXPXt9LHo9T2JqZWN0LmdldFByb3RvdHlwZU9mO0ImJkUmJnomJlAoVixmdW5j'@;
put 'dGlvbihRKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgTltRXSl7dmFyIHRlPW5ldyBOW1FdO2lmKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB0ZSl7dmFyIGFlPXoodGUpLHNlPUUoYWUsU3ltYm9sLnRvU3RyaW5nVGFnKTtpZighc2Upe3ZhciBkZT16KGFlKTtzZT1FKGRlLFN5bWJvbC50b1N0cmlu'@;
put 'Z1RhZyl9V1tRXT1zZS5nZXR9fX0pO3ZhciBxPUQoNTY5Mik7dy5leHBvcnRzPWZ1bmN0aW9uKFEpe3JldHVybiEhcShRKSYmKEImJlN5bWJvbC50b1N0cmluZ1RhZyBpbiBRPyh0ZT1RLGFlPSExLFAoVyxmdW5jdGlvbihzZSxkZSl7aWYoIWFlKXRyeXt2YXIgbGU9c2UuY2FsbCh0ZSk7bGU9'@;
put 'PT1kZSYmKGFlPWxlKX1jYXRjaHt9fSksYWUpOlooayhRKSw4LC0xKSk7dmFyIHRlLGFlfX0sMjQ3OTp3PT57dy5leHBvcnRzPWZ1bmN0aW9uIEEoRCxQKXtpZihEJiZQKXJldHVybiBBKEQpKFApO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBEKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWQgd3Jh'@;
put 'cHBlciBmdW5jdGlvbiIpO3JldHVybiBPYmplY3Qua2V5cyhEKS5mb3JFYWNoKGZ1bmN0aW9uKEkpe1VbSV09RFtJXX0pLFU7ZnVuY3Rpb24gVSgpe2Zvcih2YXIgST1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCksRT0wO0U8SS5sZW5ndGg7RSsrKUlbRV09YXJndW1lbnRzW0VdO3ZhciBr'@;
put 'PUQuYXBwbHkodGhpcyxJKSxCPUlbSS5sZW5ndGgtMV07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGsmJmshPT1CJiZPYmplY3Qua2V5cyhCKS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2tbTl09QltOXX0pLGt9fX0sOTUwOigpPT57fSw2NjAxOigpPT57fSw5MjE0OigpPT57fSw4NjIzOigpPT57'@;
put 'fSw3NzQ4OigpPT57fSw1NTY4OigpPT57fSwyNTM1OigpPT57fSwzNzEwOigpPT57fSw1NDQzOigpPT57fSw0MTI5OigpPT57fSw2NjE5OigpPT57fSw3MTA4OigpPT57fSwyMzYxOigpPT57fSw0NjE2OigpPT57fSw3MjE3OigpPT57fSw4MzczOigpPT57fSwzMDgzOih3LEEsRCk9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIFA9WyJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIkludDhBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhD'@;
put 'bGFtcGVkQXJyYXkiXSxVPXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9ELmc6Z2xvYmFsVGhpczt3LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIEk9W10sRT0wO0U8UC5sZW5ndGg7RSsrKSJmdW5jdGlvbiI9PXR5cGVvZiBVW1BbRV1dJiYoSVtJLmxlbmd0aF09UFtFXSk7cmV0dXJuIEl9fSw0'@;
put 'OTQ2Onc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPUpTT04ucGFyc2UoJ3siYWVzLTEyOC1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6'@;
put 'MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNC'@;
put 'QyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoi'@;
put 'YmxvY2sifSwiYWVzMTI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMTkyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzMjU2Ijp7ImNp'@;
put 'cGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTEyOC1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIiOnsiY2lwaGVyIjoiQUVT'@;
put 'Iiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6'@;
put 'MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1Niwi'@;
put 'aXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2Ijox'@;
put 'NiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9k'@;
put 'ZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6Ik9GQiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1vZmIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6Ik9GQiIs'@;
put 'InR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJz'@;
put 'dHJlYW0ifSwiYWVzLTI1Ni1jdHIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNUUiIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTEyOC1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFl'@;
put 'cy0xOTItZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMjU2LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifX0nKX0sNTIwNzp3PT57InVz'@;
put 'ZSBzdHJpY3QiO3cuZXhwb3J0cz1KU09OLnBhcnNlKCd7InNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJSU0EtU0hBMjI0Ijp7InNpZ24iOiJlY2RzYS9y'@;
put 'c2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxYyJ9LCJzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0'@;
put 'MjAifSwiUlNBLVNIQTI1NiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjAifSwic2hhMzg0V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMw'@;
put 'NDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sIlJTQS1TSEEzODQiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwIn0sInNoYTUxMldpdGhSU0FFbmNyeXB0aW9uIjp7InNp'@;
put 'Z24iOiJyc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MCJ9LCJSU0EtU0hBNTEyIjp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0'@;
put 'MCJ9LCJSU0EtU0hBMSI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNCJ9LCJlY2RzYS13aXRoLVNIQTEiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJzaGEyNTYiOnsic2lnbiI6ImVjZHNhIiwi'@;
put 'aGFzaCI6InNoYTI1NiIsImlkIjoiIn0sInNoYTIyNCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwic2hhMzg0Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJzaGE1MTIiOnsic2lnbiI6ImVjZHNhIiwiaGFzaCI6InNoYTUxMiIs'@;
put 'ImlkIjoiIn0sIkRTQS1TSEEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBLVNIQTEiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwiRFNBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTIyNCI6'@;
put 'eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sIkRTQS1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyNTYiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJEU0EtU0hBMjU2Ijp7InNp'@;
put 'Z24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMzg0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwiRFNBLVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1XSVRILVNIQTUxMiI6eyJz'@;
put 'aWduIjoiZHNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiIn0sIkRTQS1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtUklQRU1EMTYwIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIifSwicmlwZW1kMTYwV2l0aFJTQSI6eyJz'@;
put 'aWduIjoicnNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiMzAyMTMwMDkwNjA1MmIyNDAzMDIwMTA1MDAwNDE0In0sIlJTQS1SSVBFTUQxNjAiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJtZDVXaXRoUlNBRW5j'@;
put 'cnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6Im1kNSIsImlkIjoiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwIn0sIlJTQS1NRDUiOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9fScp'@;
put 'fSwxMzA4Onc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPUpTT04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAu'@;
put 'MzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9LDMyMDg6dz0+eyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9SlNPTi5wYXJzZSgneyJPX1JET05MWSI6MCwiT19XUk9OTFkiOjEsIk9fUkRXUiI6MiwiU19JRk1UIjo2MTQ0MCwiU19JRlJFRyI6MzI3NjgsIlNfSUZESVIiOjE2Mzg0'@;
put 'LCJTX0lGQ0hSIjo4MTkyLCJTX0lGQkxLIjoyNDU3NiwiU19JRklGTyI6NDA5NiwiU19JRkxOSyI6NDA5NjAsIlNfSUZTT0NLIjo0OTE1MiwiT19DUkVBVCI6NTEyLCJPX0VYQ0wiOjIwNDgsIk9fTk9DVFRZIjoxMzEwNzIsIk9fVFJVTkMiOjEwMjQsIk9fQVBQRU5EIjo4LCJPX0RJUkVDVE9S'@;
put 'WSI6MTA0ODU3NiwiT19OT0ZPTExPVyI6MjU2LCJPX1NZTkMiOjEyOCwiT19TWU1MSU5LIjoyMDk3MTUyLCJPX05PTkJMT0NLIjo0LCJTX0lSV1hVIjo0NDgsIlNfSVJVU1IiOjI1NiwiU19JV1VTUiI6MTI4LCJTX0lYVVNSIjo2NCwiU19JUldYRyI6NTYsIlNfSVJHUlAiOjMyLCJTX0lXR1JQ'@;
put 'IjoxNiwiU19JWEdSUCI6OCwiU19JUldYTyI6NywiU19JUk9USCI6NCwiU19JV09USCI6MiwiU19JWE9USCI6MSwiRTJCSUciOjcsIkVBQ0NFUyI6MTMsIkVBRERSSU5VU0UiOjQ4LCJFQUREUk5PVEFWQUlMIjo0OSwiRUFGTk9TVVBQT1JUIjo0NywiRUFHQUlOIjozNSwiRUFMUkVBRFkiOjM3'@;
put 'LCJFQkFERiI6OSwiRUJBRE1TRyI6OTQsIkVCVVNZIjoxNiwiRUNBTkNFTEVEIjo4OSwiRUNISUxEIjoxMCwiRUNPTk5BQk9SVEVEIjo1MywiRUNPTk5SRUZVU0VEIjo2MSwiRUNPTk5SRVNFVCI6NTQsIkVERUFETEsiOjExLCJFREVTVEFERFJSRVEiOjM5LCJFRE9NIjozMywiRURRVU9UIjo2'@;
put 'OSwiRUVYSVNUIjoxNywiRUZBVUxUIjoxNCwiRUZCSUciOjI3LCJFSE9TVFVOUkVBQ0giOjY1LCJFSURSTSI6OTAsIkVJTFNFUSI6OTIsIkVJTlBST0dSRVNTIjozNiwiRUlOVFIiOjQsIkVJTlZBTCI6MjIsIkVJTyI6NSwiRUlTQ09OTiI6NTYsIkVJU0RJUiI6MjEsIkVMT09QIjo2MiwiRU1G'@;
put 'SUxFIjoyNCwiRU1MSU5LIjozMSwiRU1TR1NJWkUiOjQwLCJFTVVMVElIT1AiOjk1LCJFTkFNRVRPT0xPTkciOjYzLCJFTkVURE9XTiI6NTAsIkVORVRSRVNFVCI6NTIsIkVORVRVTlJFQUNIIjo1MSwiRU5GSUxFIjoyMywiRU5PQlVGUyI6NTUsIkVOT0RBVEEiOjk2LCJFTk9ERVYiOjE5LCJF'@;
put 'Tk9FTlQiOjIsIkVOT0VYRUMiOjgsIkVOT0xDSyI6NzcsIkVOT0xJTksiOjk3LCJFTk9NRU0iOjEyLCJFTk9NU0ciOjkxLCJFTk9QUk9UT09QVCI6NDIsIkVOT1NQQyI6MjgsIkVOT1NSIjo5OCwiRU5PU1RSIjo5OSwiRU5PU1lTIjo3OCwiRU5PVENPTk4iOjU3LCJFTk9URElSIjoyMCwiRU5P'@;
put 'VEVNUFRZIjo2NiwiRU5PVFNPQ0siOjM4LCJFTk9UU1VQIjo0NSwiRU5PVFRZIjoyNSwiRU5YSU8iOjYsIkVPUE5PVFNVUFAiOjEwMiwiRU9WRVJGTE9XIjo4NCwiRVBFUk0iOjEsIkVQSVBFIjozMiwiRVBST1RPIjoxMDAsIkVQUk9UT05PU1VQUE9SVCI6NDMsIkVQUk9UT1RZUEUiOjQxLCJF'@;
put 'UkFOR0UiOjM0LCJFUk9GUyI6MzAsIkVTUElQRSI6MjksIkVTUkNIIjozLCJFU1RBTEUiOjcwLCJFVElNRSI6MTAxLCJFVElNRURPVVQiOjYwLCJFVFhUQlNZIjoyNiwiRVdPVUxEQkxPQ0siOjM1LCJFWERFViI6MTgsIlNJR0hVUCI6MSwiU0lHSU5UIjoyLCJTSUdRVUlUIjozLCJTSUdJTEwi'@;
put 'OjQsIlNJR1RSQVAiOjUsIlNJR0FCUlQiOjYsIlNJR0lPVCI6NiwiU0lHQlVTIjoxMCwiU0lHRlBFIjo4LCJTSUdLSUxMIjo5LCJTSUdVU1IxIjozMCwiU0lHU0VHViI6MTEsIlNJR1VTUjIiOjMxLCJTSUdQSVBFIjoxMywiU0lHQUxSTSI6MTQsIlNJR1RFUk0iOjE1LCJTSUdDSExEIjoyMCwi'@;
put 'U0lHQ09OVCI6MTksIlNJR1NUT1AiOjE3LCJTSUdUU1RQIjoxOCwiU0lHVFRJTiI6MjEsIlNJR1RUT1UiOjIyLCJTSUdVUkciOjE2LCJTSUdYQ1BVIjoyNCwiU0lHWEZTWiI6MjUsIlNJR1ZUQUxSTSI6MjYsIlNJR1BST0YiOjI3LCJTSUdXSU5DSCI6MjgsIlNJR0lPIjoyMywiU0lHU1lTIjox'@;
put 'MiwiU1NMX09QX0FMTCI6MjE0NzQ4NjcxOSwiU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTiI6MjYyMTQ0LCJTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIjo0MTk0MzA0LCJTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVCI6MzI3NjgsIlNTTF9PUF9DT09LSUVf'@;
put 'RVhDSEFOR0UiOjgxOTIsIlNTTF9PUF9DUllQVE9QUk9fVExTRVhUX0JVRyI6MjE0NzQ4MzY0OCwiU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUyI6MjA0OCwiU1NMX09QX0VQSEVNRVJBTF9SU0EiOjAsIlNTTF9PUF9MRUdBQ1lfU0VSVkVSX0NPTk5FQ1QiOjQsIlNTTF9PUF9N'@;
put 'SUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUiI6MzIsIlNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUciOjEsIlNTTF9PUF9NU0lFX1NTTFYyX1JTQV9QQURESU5HIjowLCJTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHIjo1MzY4NzA5MTIsIlNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVH'@;
put 'IjoyLCJTU0xfT1BfTkVUU0NBUEVfREVNT19DSVBIRVJfQ0hBTkdFX0JVRyI6MTA3Mzc0MTgyNCwiU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHIjo4LCJTU0xfT1BfTk9fQ09NUFJFU1NJT04iOjEzMTA3MiwiU1NMX09QX05PX1FVRVJZX01UVSI6NDA5NiwiU1NMX09Q'@;
put 'X05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OIjo2NTUzNiwiU1NMX09QX05PX1NTTHYyIjoxNjc3NzIxNiwiU1NMX09QX05PX1NTTHYzIjozMzU1NDQzMiwiU1NMX09QX05PX1RJQ0tFVCI6MTYzODQsIlNTTF9PUF9OT19UTFN2MSI6NjcxMDg4NjQsIlNTTF9PUF9OT19U'@;
put 'TFN2MV8xIjoyNjg0MzU0NTYsIlNTTF9PUF9OT19UTFN2MV8yIjoxMzQyMTc3MjgsIlNTTF9PUF9QS0NTMV9DSEVDS18xIjowLCJTU0xfT1BfUEtDUzFfQ0hFQ0tfMiI6MCwiU1NMX09QX1NJTkdMRV9ESF9VU0UiOjEwNDg1NzYsIlNTTF9PUF9TSU5HTEVfRUNESF9VU0UiOjUyNDI4OCwiU1NM'@;
put 'X09QX1NTTEVBWV8wODBfQ0xJRU5UX0RIX0JVRyI6MTI4LCJTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHIjowLCJTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHIjo1MTIsIlNTTF9PUF9UTFNfRDVfQlVHIjoyNTYsIlNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHIjo4Mzg4NjA4'@;
put 'LCJFTkdJTkVfTUVUSE9EX0RTQSI6MiwiRU5HSU5FX01FVEhPRF9ESCI6NCwiRU5HSU5FX01FVEhPRF9SQU5EIjo4LCJFTkdJTkVfTUVUSE9EX0VDREgiOjE2LCJFTkdJTkVfTUVUSE9EX0VDRFNBIjozMiwiRU5HSU5FX01FVEhPRF9DSVBIRVJTIjo2NCwiRU5HSU5FX01FVEhPRF9ESUdFU1RT'@;
put 'IjoxMjgsIkVOR0lORV9NRVRIT0RfU1RPUkUiOjI1NiwiRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTIjo1MTIsIkVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTIjoxMDI0LCJFTkdJTkVfTUVUSE9EX0FMTCI6NjU1MzUsIkVOR0lORV9NRVRIT0RfTk9ORSI6MCwiREhfQ0hFQ0tfUF9OT1Rf'@;
put 'U0FGRV9QUklNRSI6MiwiREhfQ0hFQ0tfUF9OT1RfUFJJTUUiOjEsIkRIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1IiOjQsIkRIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1IiOjgsIk5QTl9FTkFCTEVEIjoxLCJSU0FfUEtDUzFfUEFERElORyI6MSwiUlNBX1NTTFYyM19QQURESU5HIjoyLCJS'@;
put 'U0FfTk9fUEFERElORyI6MywiUlNBX1BLQ1MxX09BRVBfUEFERElORyI6NCwiUlNBX1g5MzFfUEFERElORyI6NSwiUlNBX1BLQ1MxX1BTU19QQURESU5HIjo2LCJQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQiOjIsIlBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEIjo0LCJQT0lOVF9D'@;
put 'T05WRVJTSU9OX0hZQlJJRCI6NiwiRl9PSyI6MCwiUl9PSyI6NCwiV19PSyI6MiwiWF9PSyI6MSwiVVZfVURQX1JFVVNFQUREUiI6NH0nKX0sOTc5OTp3PT57InVzZSBzdHJpY3QiO3cuZXhwb3J0cz1KU09OLnBhcnNlKCd7Im1vZHAxIjp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZm'@;
put 'ZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYy'@;
put 'MGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDIiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJi'@;
put 'MGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDUiOnsiZ2VuIjoiMDIiLCJw'@;
put 'cmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdl'@;
put 'YzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVk'@;
put 'NTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMjM3MzI3ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTQiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVh'@;
put 'NjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0'@;
put 'NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5'@;
put 'YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZk'@;
put 'YWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0'@;
put 'MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgw'@;
put 'NGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1'@;
put 'MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3'@;
put 'YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMx'@;
put 'Y2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFl'@;
put 'OWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0'@;
put 'NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRi'@;
put 'ZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIw'@;
put 'OGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5'@;
put 'NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDYzMTk5ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTci'@;
put 'OnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0'@;
put 'NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYy'@;
put 'ZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5'@;
put 'OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4'@;
put 'NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5'@;
put 'NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4'@;
put 'OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIx'@;
put 'NGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIz'@;
put 'YTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThk'@;
put 'NzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkY2M0MDI0ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTgiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2'@;
put 'N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2'@;
put 'NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3'@;
put 'NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVk'@;
put 'MDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIz'@;
put 'MTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIy'@;
put 'OTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYz'@;
put 'ZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0Yjky'@;
put 'ZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5'@;
put 'NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2'@;
put 'YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNm'@;
put 'MGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIx'@;
put 'ZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZm'@;
put 'ZmZmZmZmZmZmIn19Jyl9LDg1OTc6dz0+eyJ1c2Ugc3RyaWN0Ijt3LmV4cG9ydHM9e2k4OiI2LjUuNCJ9fSwyNTYyOnc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPUpTT04ucGFyc2UoJ3siMi4xNi44NDAuMS4xMDEuMy40LjEuMSI6ImFlcy0xMjgtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40'@;
put 'LjEuMiI6ImFlcy0xMjgtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMyI6ImFlcy0xMjgtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNCI6ImFlcy0xMjgtY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjEiOiJhZXMtMTkyLWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyIjoi'@;
put 'YWVzLTE5Mi1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMyI6ImFlcy0xOTItb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjQiOiJhZXMtMTkyLWNmYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxIjoiYWVzLTI1Ni1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MiI6ImFlcy0y'@;
put 'NTYtY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDMiOiJhZXMtMjU2LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0IjoiYWVzLTI1Ni1jZmIifScpfSwzNzA0Onc9PnsidXNlIHN0cmljdCI7dy5leHBvcnRzPUpTT04ucGFyc2UoJ1siYWMiLCJjb20uYWMiLCJlZHUuYWMiLCJnb3Yu'@;
put 'YWMiLCJuZXQuYWMiLCJtaWwuYWMiLCJvcmcuYWMiLCJhZCIsIm5vbS5hZCIsImFlIiwiY28uYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhYy5hZSIsImdvdi5hZSIsIm1pbC5hZSIsImFlcm8iLCJhY2NpZGVudC1pbnZlc3RpZ2F0aW9uLmFlcm8iLCJhY2NpZGVudC1wcmV2ZW50'@;
put 'aW9uLmFlcm8iLCJhZXJvYmF0aWMuYWVybyIsImFlcm9jbHViLmFlcm8iLCJhZXJvZHJvbWUuYWVybyIsImFnZW50cy5hZXJvIiwiYWlyY3JhZnQuYWVybyIsImFpcmxpbmUuYWVybyIsImFpcnBvcnQuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpcnRyYWZmaWMuYWVybyIsImFp'@;
put 'ci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFtYnVsYW5jZS5hZXJvIiwiYW11c2VtZW50LmFlcm8iLCJhc3NvY2lhdGlvbi5hZXJvIiwiYXV0aG9yLmFlcm8iLCJiYWxsb29uaW5nLmFlcm8iLCJicm9rZXIuYWVybyIsImNhYS5hZXJvIiwiY2FyZ28uYWVybyIsImNhdGVyaW5nLmFlcm8iLCJj'@;
put 'ZXJ0aWZpY2F0aW9uLmFlcm8iLCJjaGFtcGlvbnNoaXAuYWVybyIsImNoYXJ0ZXIuYWVybyIsImNpdmlsYXZpYXRpb24uYWVybyIsImNsdWIuYWVybyIsImNvbmZlcmVuY2UuYWVybyIsImNvbnN1bHRhbnQuYWVybyIsImNvbnN1bHRpbmcuYWVybyIsImNvbnRyb2wuYWVybyIsImNvdW5jaWwu'@;
put 'YWVybyIsImNyZXcuYWVybyIsImRlc2lnbi5hZXJvIiwiZGdjYS5hZXJvIiwiZWR1Y2F0b3IuYWVybyIsImVtZXJnZW5jeS5hZXJvIiwiZW5naW5lLmFlcm8iLCJlbmdpbmVlci5hZXJvIiwiZW50ZXJ0YWlubWVudC5hZXJvIiwiZXF1aXBtZW50LmFlcm8iLCJleGNoYW5nZS5hZXJvIiwiZXhw'@;
put 'cmVzcy5hZXJvIiwiZmVkZXJhdGlvbi5hZXJvIiwiZmxpZ2h0LmFlcm8iLCJmdWVsLmFlcm8iLCJnbGlkaW5nLmFlcm8iLCJnb3Zlcm5tZW50LmFlcm8iLCJncm91bmRoYW5kbGluZy5hZXJvIiwiZ3JvdXAuYWVybyIsImhhbmdnbGlkaW5nLmFlcm8iLCJob21lYnVpbHQuYWVybyIsImluc3Vy'@;
put 'YW5jZS5hZXJvIiwiam91cm5hbC5hZXJvIiwiam91cm5hbGlzdC5hZXJvIiwibGVhc2luZy5hZXJvIiwibG9naXN0aWNzLmFlcm8iLCJtYWdhemluZS5hZXJvIiwibWFpbnRlbmFuY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmln'@;
put 'YXRpb24uYWVybyIsInBhcmFjaHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJv'@;
put 'IiwicmVzZWFyY2guYWVybyIsInJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5n'@;
put 'LmFlcm8iLCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJnb3YuYWYiLCJjb20uYWYiLCJvcmcuYWYiLCJuZXQuYWYiLCJlZHUuYWYiLCJhZyIsImNvbS5hZyIsIm9yZy5hZyIsIm5ldC5hZyIsImNvLmFnIiwibm9tLmFn'@;
put 'IiwiYWkiLCJvZmYuYWkiLCJjb20uYWkiLCJuZXQuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJlZC5h'@;
put 'byIsImd2LmFvIiwib2cuYW8iLCJjby5hbyIsInBiLmFvIiwiaXQuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVhbC5hciIsIm5ldC5hciIsIm9yZy5h'@;
put 'ciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0Iiwic3Ro'@;
put 'LmFjLmF0IiwiYXUiLCJjb20uYXUiLCJuZXQuYXUiLCJvcmcuYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJhc24uYXUiLCJpZC5hdSIsImluZm8uYXUiLCJjb25mLmF1Iiwib3ouYXUiLCJhY3QuYXUiLCJuc3cuYXUiLCJudC5hdSIsInFsZC5hdSIsInNhLmF1IiwidGFzLmF1IiwidmljLmF1Iiwi'@;
put 'd2EuYXUiLCJhY3QuZWR1LmF1IiwiY2F0aG9saWMuZWR1LmF1IiwibnN3LmVkdS5hdSIsIm50LmVkdS5hdSIsInFsZC5lZHUuYXUiLCJzYS5lZHUuYXUiLCJ0YXMuZWR1LmF1IiwidmljLmVkdS5hdSIsIndhLmVkdS5hdSIsInFsZC5nb3YuYXUiLCJzYS5nb3YuYXUiLCJ0YXMuZ292LmF1Iiwi'@;
put 'dmljLmdvdi5hdSIsIndhLmdvdi5hdSIsInNjaG9vbHMubnN3LmVkdS5hdSIsImF3IiwiY29tLmF3IiwiYXgiLCJheiIsImNvbS5heiIsIm5ldC5heiIsImludC5heiIsImdvdi5heiIsIm9yZy5heiIsImVkdS5heiIsImluZm8uYXoiLCJwcC5heiIsIm1pbC5heiIsIm5hbWUuYXoiLCJwcm8u'@;
put 'YXoiLCJiaXouYXoiLCJiYSIsImNvbS5iYSIsImVkdS5iYSIsImdvdi5iYSIsIm1pbC5iYSIsIm5ldC5iYSIsIm9yZy5iYSIsImJiIiwiYml6LmJiIiwiY28uYmIiLCJjb20uYmIiLCJlZHUuYmIiLCJnb3YuYmIiLCJpbmZvLmJiIiwibmV0LmJiIiwib3JnLmJiIiwic3RvcmUuYmIiLCJ0di5i'@;
put 'YiIsIiouYmQiLCJiZSIsImFjLmJlIiwiYmYiLCJnb3YuYmYiLCJiZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJlLmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5i'@;
put 'ZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImJoIiwiY29tLmJoIiwiZWR1LmJoIiwibmV0LmJoIiwib3Jn'@;
put 'LmJoIiwiZ292LmJoIiwiYmkiLCJjby5iaSIsImNvbS5iaSIsImVkdS5iaSIsIm9yLmJpIiwib3JnLmJpIiwiYml6IiwiYmoiLCJhc3NvLmJqIiwiYmFycmVhdS5iaiIsImdvdXYuYmoiLCJibSIsImNvbS5ibSIsImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29t'@;
put 'LmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJvcmcuYm8iLCJuZXQuYm8iLCJtaWwuYm8iLCJ0di5ibyIsIndlYi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9n'@;
put 'LmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJpbmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2lu'@;
put 'YS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwb2xpdGljYS5ibyIsInByb2Zlc2lvbmFsLmJvIiwicGx1cmluYWNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1'@;
put 'ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIiLCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwi'@;
put 'YXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlh'@;
put 'cy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwiZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwi'@;
put 'ZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJyIiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEy'@;
put 'LmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdvdi5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIs'@;
put 'Im1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJuLmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5i'@;
put 'ciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZpbGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVsLmJyIiwibG9nLmJyIiwi'@;
put 'bG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJyIiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5v'@;
put 'dC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5iciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVw'@;
put 'LmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwic2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJz'@;
put 'bGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5iciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIi'@;
put 'LCJ6bGcuYnIiLCJicyIsImNvbS5icyIsIm5ldC5icyIsIm9yZy5icyIsImVkdS5icyIsImdvdi5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20u'@;
put 'YnkiLCJvZi5ieSIsImJ6IiwiY29tLmJ6IiwibmV0LmJ6Iiwib3JnLmJ6IiwiZWR1LmJ6IiwiZ292LmJ6IiwiY2EiLCJhYi5jYSIsImJjLmNhIiwibWIuY2EiLCJuYi5jYSIsIm5mLmNhIiwibmwuY2EiLCJucy5jYSIsIm50LmNhIiwibnUuY2EiLCJvbi5jYSIsInBlLmNhIiwicWMuY2EiLCJz'@;
put 'ay5jYSIsInlrLmNhIiwiZ2MuY2EiLCJjYXQiLCJjYyIsImNkIiwiZ292LmNkIiwiY2YiLCJjZyIsImNoIiwiY2kiLCJvcmcuY2kiLCJvci5jaSIsImNvbS5jaSIsImNvLmNpIiwiZWR1LmNpIiwiZWQuY2kiLCJhYy5jaSIsIm5ldC5jaSIsImdvLmNpIiwiYXNzby5jaSIsImFceGU5cm9wb3J0'@;
put 'LmNpIiwiaW50LmNpIiwicHJlc3NlLmNpIiwibWQuY2kiLCJnb3V2LmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5jbSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJl'@;
put 'ZHUuY24iLCJnb3YuY24iLCJuZXQuY24iLCJvcmcuY24iLCJtaWwuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdmNTFcdTdlZGMuY24iLCJcdTdkYjJcdTdkNjEuY24iLCJhaC5jbiIsImJqLmNuIiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJnei5jbiIsImd4LmNuIiwiaGEu'@;
put 'Y24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJobC5jbiIsImhuLmNuIiwiamwuY24iLCJqcy5jbiIsImp4LmNuIiwibG4uY24iLCJubS5jbiIsIm54LmNuIiwicWguY24iLCJzYy5jbiIsInNkLmNuIiwic2guY24iLCJzbi5jbiIsInN4LmNuIiwidGouY24iLCJ4ai5jbiIsInh6LmNuIiwi'@;
put 'eW4uY24iLCJ6ai5jbiIsImhrLmNuIiwibW8uY24iLCJ0dy5jbiIsImNvIiwiYXJ0cy5jbyIsImNvbS5jbyIsImVkdS5jbyIsImZpcm0uY28iLCJnb3YuY28iLCJpbmZvLmNvIiwiaW50LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwicmVjLmNvIiwid2ViLmNvIiwi'@;
put 'Y29tIiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsIm9yZy5jdSIsIm5ldC5jdSIsImdvdi5jdSIsImluZi5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaW50LmN2Iiwi'@;
put 'bm9tZS5jdiIsIm9yZy5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5jeSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInBy'@;
put 'ZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY29tLmRtIiwibmV0LmRtIiwib3JnLmRtIiwiZWR1LmRtIiwiZ292LmRtIiwiZG8iLCJhcnQuZG8iLCJjb20uZG8iLCJlZHUuZG8iLCJnb2IuZG8iLCJnb3YuZG8iLCJtaWwuZG8iLCJuZXQuZG8iLCJv'@;
put 'cmcuZG8iLCJzbGQuZG8iLCJ3ZWIuZG8iLCJkeiIsImFydC5keiIsImFzc28uZHoiLCJjb20uZHoiLCJlZHUuZHoiLCJnb3YuZHoiLCJvcmcuZHoiLCJuZXQuZHoiLCJwb2wuZHoiLCJzb2MuZHoiLCJ0bS5keiIsImVjIiwiY29tLmVjIiwiaW5mby5lYyIsIm5ldC5lYyIsImZpbi5lYyIsImsx'@;
put 'Mi5lYyIsIm1lZC5lYyIsInByby5lYyIsIm9yZy5lYyIsImVkdS5lYyIsImdvdi5lYyIsImdvYi5lYyIsIm1pbC5lYyIsImVkdSIsImVlIiwiZWR1LmVlIiwiZ292LmVlIiwicmlpay5lZSIsImxpYi5lZSIsIm1lZC5lZSIsImNvbS5lZSIsInByaS5lZSIsImFpcC5lZSIsIm9yZy5lZSIsImZp'@;
put 'ZS5lZSIsImVnIiwiY29tLmVnIiwiZWR1LmVnIiwiZXVuLmVnIiwiZ292LmVnIiwibWlsLmVnIiwibmFtZS5lZyIsIm5ldC5lZyIsIm9yZy5lZyIsInNjaS5lZyIsIiouZXIiLCJlcyIsImNvbS5lcyIsIm5vbS5lcyIsIm9yZy5lcyIsImdvYi5lcyIsImVkdS5lcyIsImV0IiwiY29tLmV0Iiwi'@;
put 'Z292LmV0Iiwib3JnLmV0IiwiZWR1LmV0IiwiYml6LmV0IiwibmFtZS5ldCIsImluZm8uZXQiLCJuZXQuZXQiLCJldSIsImZpIiwiYWxhbmQuZmkiLCJmaiIsImFjLmZqIiwiYml6LmZqIiwiY29tLmZqIiwiZ292LmZqIiwiaW5mby5maiIsIm1pbC5maiIsIm5hbWUuZmoiLCJuZXQuZmoiLCJv'@;
put 'cmcuZmoiLCJwcm8uZmoiLCIqLmZrIiwiY29tLmZtIiwiZWR1LmZtIiwibmV0LmZtIiwib3JnLmZtIiwiZm0iLCJmbyIsImZyIiwiYXNzby5mciIsImNvbS5mciIsImdvdXYuZnIiLCJub20uZnIiLCJwcmQuZnIiLCJ0bS5mciIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiYXZvdWVzLmZy'@;
put 'IiwiY2NpLmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwiZ2VvbWV0cmUtZXhwZXJ0LmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwibWVkZWNpbi5mciIsIm5vdGFpcmVzLmZyIiwicGhhcm1h'@;
put 'Y2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsImdhIiwiZ2IiLCJlZHUuZ2QiLCJnb3YuZ2QiLCJnZCIsImdlIiwiY29tLmdlIiwiZWR1LmdlIiwiZ292LmdlIiwib3JnLmdlIiwibWlsLmdlIiwibmV0LmdlIiwicHZ0LmdlIiwiZ2YiLCJnZyIsImNvLmdnIiwibmV0LmdnIiwi'@;
put 'b3JnLmdnIiwiZ2giLCJjb20uZ2giLCJlZHUuZ2giLCJnb3YuZ2giLCJvcmcuZ2giLCJtaWwuZ2giLCJnaSIsImNvbS5naSIsImx0ZC5naSIsImdvdi5naSIsIm1vZC5naSIsImVkdS5naSIsIm9yZy5naSIsImdsIiwiY28uZ2wiLCJjb20uZ2wiLCJlZHUuZ2wiLCJuZXQuZ2wiLCJvcmcuZ2wi'@;
put 'LCJnbSIsImduIiwiYWMuZ24iLCJjb20uZ24iLCJlZHUuZ24iLCJnb3YuZ24iLCJvcmcuZ24iLCJuZXQuZ24iLCJnb3YiLCJncCIsImNvbS5ncCIsIm5ldC5ncCIsIm1vYmkuZ3AiLCJlZHUuZ3AiLCJvcmcuZ3AiLCJhc3NvLmdwIiwiZ3EiLCJnciIsImNvbS5nciIsImVkdS5nciIsIm5ldC5n'@;
put 'ciIsIm9yZy5nciIsImdvdi5nciIsImdzIiwiZ3QiLCJjb20uZ3QiLCJlZHUuZ3QiLCJnb2IuZ3QiLCJpbmQuZ3QiLCJtaWwuZ3QiLCJuZXQuZ3QiLCJvcmcuZ3QiLCJndSIsImNvbS5ndSIsImVkdS5ndSIsImdvdi5ndSIsImd1YW0uZ3UiLCJpbmZvLmd1IiwibmV0Lmd1Iiwib3JnLmd1Iiwi'@;
put 'd2ViLmd1IiwiZ3ciLCJneSIsImNvLmd5IiwiY29tLmd5IiwiZWR1Lmd5IiwiZ292Lmd5IiwibmV0Lmd5Iiwib3JnLmd5IiwiaGsiLCJjb20uaGsiLCJlZHUuaGsiLCJnb3YuaGsiLCJpZHYuaGsiLCJuZXQuaGsiLCJvcmcuaGsiLCJcdTUxNmNcdTUzZjguaGsiLCJcdTY1NTlcdTgwYjIuaGsi'@;
put 'LCJcdTY1NGVcdTgwYjIuaGsiLCJcdTY1M2ZcdTVlOWMuaGsiLCJcdTUwMGJcdTRlYmEuaGsiLCJcdTRlMmFcdWZmZmRcdWZmZmQuaGsiLCJcdTdiODdcdTRlYmEuaGsiLCJcdTdkYjJcdTdlZGMuaGsiLCJcdTdmNTFcdTdlZGMuaGsiLCJcdTdlYzRcdTdlNTQuaGsiLCJcdTdkYjJcdTdkNjEu'@;
put 'aGsiLCJcdTdmNTFcdTdkNjEuaGsiLCJcdTdlYzRcdTdlYzcuaGsiLCJcdTdkNDRcdTdlNTQuaGsiLCJcdTdkNDRcdTdlYzcuaGsiLCJobSIsImhuIiwiY29tLmhuIiwiZWR1LmhuIiwib3JnLmhuIiwibmV0LmhuIiwibWlsLmhuIiwiZ29iLmhuIiwiaHIiLCJpei5ociIsImZyb20uaHIiLCJu'@;
put 'YW1lLmhyIiwiY29tLmhyIiwiaHQiLCJjb20uaHQiLCJzaG9wLmh0IiwiZmlybS5odCIsImluZm8uaHQiLCJhZHVsdC5odCIsIm5ldC5odCIsInByby5odCIsIm9yZy5odCIsIm1lZC5odCIsImFydC5odCIsImNvb3AuaHQiLCJwb2wuaHQiLCJhc3NvLmh0IiwiZWR1Lmh0IiwicmVsLmh0Iiwi'@;
put 'Z291di5odCIsInBlcnNvLmh0IiwiaHUiLCJjby5odSIsImluZm8uaHUiLCJvcmcuaHUiLCJwcml2Lmh1Iiwic3BvcnQuaHUiLCJ0bS5odSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiZXJvdGljYS5odSIsImVyb3Rpa2EuaHUiLCJmaWxt'@;
put 'Lmh1IiwiZm9ydW0uaHUiLCJnYW1lcy5odSIsImhvdGVsLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1IiwicmVrbGFtLmh1Iiwic2V4Lmh1Iiwic2hvcC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG96'@;
put 'c2RlLmh1IiwidXRhemFzLmh1IiwidmlkZW8uaHUiLCJpZCIsImFjLmlkIiwiYml6LmlkIiwiY28uaWQiLCJkZXNhLmlkIiwiZ28uaWQiLCJtaWwuaWQiLCJteS5pZCIsIm5ldC5pZCIsIm9yLmlkIiwicG9ucGVzLmlkIiwic2NoLmlkIiwid2ViLmlkIiwiaWUiLCJnb3YuaWUiLCJpbCIsImFj'@;
put 'LmlsIiwiY28uaWwiLCJnb3YuaWwiLCJpZGYuaWwiLCJrMTIuaWwiLCJtdW5pLmlsIiwibmV0LmlsIiwib3JnLmlsIiwiaW0iLCJhYy5pbSIsImNvLmltIiwiY29tLmltIiwibHRkLmNvLmltIiwibmV0LmltIiwib3JnLmltIiwicGxjLmNvLmltIiwidHQuaW0iLCJ0di5pbSIsImluIiwiY28u'@;
put 'aW4iLCJmaXJtLmluIiwibmV0LmluIiwib3JnLmluIiwiZ2VuLmluIiwiaW5kLmluIiwibmljLmluIiwiYWMuaW4iLCJlZHUuaW4iLCJyZXMuaW4iLCJnb3YuaW4iLCJtaWwuaW4iLCJpbmZvIiwiaW50IiwiZXUuaW50IiwiaW8iLCJjb20uaW8iLCJpcSIsImdvdi5pcSIsImVkdS5pcSIsIm1p'@;
put 'bC5pcSIsImNvbS5pcSIsIm9yZy5pcSIsIm5ldC5pcSIsImlyIiwiYWMuaXIiLCJjby5pciIsImdvdi5pciIsImlkLmlyIiwibmV0LmlyIiwib3JnLmlyIiwic2NoLmlyIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2LmlyIiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2'@;
put 'LmlyIiwiaXMiLCJuZXQuaXMiLCJjb20uaXMiLCJlZHUuaXMiLCJnb3YuaXMiLCJvcmcuaXMiLCJpbnQuaXMiLCJpdCIsImdvdi5pdCIsImVkdS5pdCIsImFici5pdCIsImFicnV6em8uaXQiLCJhb3N0YS12YWxsZXkuaXQiLCJhb3N0YXZhbGxleS5pdCIsImJhcy5pdCIsImJhc2lsaWNhdGEu'@;
put 'aXQiLCJjYWwuaXQiLCJjYWxhYnJpYS5pdCIsImNhbS5pdCIsImNhbXBhbmlhLml0IiwiZW1pbGlhLXJvbWFnbmEuaXQiLCJlbWlsaWFyb21hZ25hLml0IiwiZW1yLml0IiwiZnJpdWxpLXYtZ2l1bGlhLml0IiwiZnJpdWxpLXZlLWdpdWxpYS5pdCIsImZyaXVsaS12ZWdpdWxpYS5pdCIsImZy'@;
put 'aXVsaS12ZW5lemlhLWdpdWxpYS5pdCIsImZyaXVsaS12ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpLXZnaXVsaWEuaXQiLCJmcml1bGl2LWdpdWxpYS5pdCIsImZyaXVsaXZlLWdpdWxpYS5pdCIsImZyaXVsaXZlZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGl2'@;
put 'ZW5lemlhZ2l1bGlhLml0IiwiZnJpdWxpdmdpdWxpYS5pdCIsImZ2Zy5pdCIsImxhei5pdCIsImxhemlvLml0IiwibGlnLml0IiwibGlndXJpYS5pdCIsImxvbS5pdCIsImxvbWJhcmRpYS5pdCIsImxvbWJhcmR5Lml0IiwibHVjYW5pYS5pdCIsIm1hci5pdCIsIm1hcmNoZS5pdCIsIm1vbC5p'@;
put 'dCIsIm1vbGlzZS5pdCIsInBpZWRtb250Lml0IiwicGllbW9udGUuaXQiLCJwbW4uaXQiLCJwdWcuaXQiLCJwdWdsaWEuaXQiLCJzYXIuaXQiLCJzYXJkZWduYS5pdCIsInNhcmRpbmlhLml0Iiwic2ljLml0Iiwic2ljaWxpYS5pdCIsInNpY2lseS5pdCIsInRhYS5pdCIsInRvcy5pdCIsInRv'@;
put 'c2NhbmEuaXQiLCJ0cmVudGluLXN1ZC10aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbi1zdWR0aXJvbC5pdCIsInRyZW50aW4tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWQtdGlyb2wuaXQiLCJ0cmVudGluLXN1ZWR0aXJvbC5pdCIsInRyZW50aW5vLWEt'@;
put 'YWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10'@;
put 'aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0IiwidHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm8uaXQiLCJ0cmVudGlub2EtYWRpZ2UuaXQiLCJ0cmVudGlub2FhZGlnZS5pdCIsInRy'@;
put 'ZW50aW5vYWx0by1hZGlnZS5pdCIsInRyZW50aW5vYWx0b2FkaWdlLml0IiwidHJlbnRpbm9zLXRpcm9sLml0IiwidHJlbnRpbm9zdGlyb2wuaXQiLCJ0cmVudGlub3N1ZC10aXJvbC5pdCIsInRyZW50aW5vc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbm9zdWR0aXJvbC5pdCIsInRyZW50aW5v'@;
put 'c1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWQtdGlyb2wuaXQiLCJ0cmVudGlub3N1ZWR0aXJvbC5pdCIsInRyZW50aW5zdWQtdGlyb2wuaXQiLCJ0cmVudGluc1x4ZmNkLXRpcm9sLml0IiwidHJlbnRpbnN1ZHRpcm9sLml0IiwidHJlbnRpbnNceGZjZHRpcm9sLml0IiwidHJlbnRpbnN1'@;
put 'ZWQtdGlyb2wuaXQiLCJ0cmVudGluc3VlZHRpcm9sLml0IiwidHVzY2FueS5pdCIsInVtYi5pdCIsInVtYnJpYS5pdCIsInZhbC1kLWFvc3RhLml0IiwidmFsLWRhb3N0YS5pdCIsInZhbGQtYW9zdGEuaXQiLCJ2YWxkYW9zdGEuaXQiLCJ2YWxsZS1hb3N0YS5pdCIsInZhbGxlLWQtYW9zdGEu'@;
put 'aXQiLCJ2YWxsZS1kYW9zdGEuaXQiLCJ2YWxsZWFvc3RhLml0IiwidmFsbGVkLWFvc3RhLml0IiwidmFsbGVkYW9zdGEuaXQiLCJ2YWxsZWUtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtYW9zdGUuaXQiLCJ2YWxsZWUtZC1hb3N0ZS5pdCIsInZhbGxceGU5ZS1kLWFvc3RlLml0IiwidmFsbGVlYW9z'@;
put 'dGUuaXQiLCJ2YWxsXHhlOWVhb3N0ZS5pdCIsInZhbGxlZWRhb3N0ZS5pdCIsInZhbGxceGU5ZWRhb3N0ZS5pdCIsInZhby5pdCIsInZkYS5pdCIsInZlbi5pdCIsInZlbmV0by5pdCIsImFnLml0IiwiYWdyaWdlbnRvLml0IiwiYWwuaXQiLCJhbGVzc2FuZHJpYS5pdCIsImFsdG8tYWRpZ2Uu'@;
put 'aXQiLCJhbHRvYWRpZ2UuaXQiLCJhbi5pdCIsImFuY29uYS5pdCIsImFuZHJpYS1iYXJsZXR0YS10cmFuaS5pdCIsImFuZHJpYS10cmFuaS1iYXJsZXR0YS5pdCIsImFuZHJpYWJhcmxldHRhdHJhbmkuaXQiLCJhbmRyaWF0cmFuaWJhcmxldHRhLml0IiwiYW8uaXQiLCJhb3N0YS5pdCIsImFv'@;
put 'c3RlLml0IiwiYXAuaXQiLCJhcS5pdCIsImFxdWlsYS5pdCIsImFyLml0IiwiYXJlenpvLml0IiwiYXNjb2xpLXBpY2Vuby5pdCIsImFzY29saXBpY2Vuby5pdCIsImFzdGkuaXQiLCJhdC5pdCIsImF2Lml0IiwiYXZlbGxpbm8uaXQiLCJiYS5pdCIsImJhbHNhbi1zdWR0aXJvbC5pdCIsImJh'@;
put 'bHNhbi1zXHhmY2R0aXJvbC5pdCIsImJhbHNhbi1zdWVkdGlyb2wuaXQiLCJiYWxzYW4uaXQiLCJiYXJpLml0IiwiYmFybGV0dGEtdHJhbmktYW5kcmlhLml0IiwiYmFybGV0dGF0cmFuaWFuZHJpYS5pdCIsImJlbGx1bm8uaXQiLCJiZW5ldmVudG8uaXQiLCJiZXJnYW1vLml0IiwiYmcuaXQi'@;
put 'LCJiaS5pdCIsImJpZWxsYS5pdCIsImJsLml0IiwiYm4uaXQiLCJiby5pdCIsImJvbG9nbmEuaXQiLCJib2x6YW5vLWFsdG9hZGlnZS5pdCIsImJvbHphbm8uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYm96ZW4u'@;
put 'aXQiLCJici5pdCIsImJyZXNjaWEuaXQiLCJicmluZGlzaS5pdCIsImJzLml0IiwiYnQuaXQiLCJidWxzYW4tc3VkdGlyb2wuaXQiLCJidWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJidWxzYW4tc3VlZHRpcm9sLml0IiwiYnVsc2FuLml0IiwiYnouaXQiLCJjYS5pdCIsImNhZ2xpYXJpLml0Iiwi'@;
put 'Y2FsdGFuaXNzZXR0YS5pdCIsImNhbXBpZGFuby1tZWRpby5pdCIsImNhbXBpZGFub21lZGlvLml0IiwiY2FtcG9iYXNzby5pdCIsImNhcmJvbmlhLWlnbGVzaWFzLml0IiwiY2FyYm9uaWFpZ2xlc2lhcy5pdCIsImNhcnJhcmEtbWFzc2EuaXQiLCJjYXJyYXJhbWFzc2EuaXQiLCJjYXNlcnRh'@;
put 'Lml0IiwiY2F0YW5pYS5pdCIsImNhdGFuemFyby5pdCIsImNiLml0IiwiY2UuaXQiLCJjZXNlbmEtZm9ybGkuaXQiLCJjZXNlbmEtZm9ybFx4ZWMuaXQiLCJjZXNlbmFmb3JsaS5pdCIsImNlc2VuYWZvcmxceGVjLml0IiwiY2guaXQiLCJjaGlldGkuaXQiLCJjaS5pdCIsImNsLml0IiwiY24u'@;
put 'aXQiLCJjby5pdCIsImNvbW8uaXQiLCJjb3NlbnphLml0IiwiY3IuaXQiLCJjcmVtb25hLml0IiwiY3JvdG9uZS5pdCIsImNzLml0IiwiY3QuaXQiLCJjdW5lby5pdCIsImN6Lml0IiwiZGVsbC1vZ2xpYXN0cmEuaXQiLCJkZWxsb2dsaWFzdHJhLml0IiwiZW4uaXQiLCJlbm5hLml0IiwiZmMu'@;
put 'aXQiLCJmZS5pdCIsImZlcm1vLml0IiwiZmVycmFyYS5pdCIsImZnLml0IiwiZmkuaXQiLCJmaXJlbnplLml0IiwiZmxvcmVuY2UuaXQiLCJmbS5pdCIsImZvZ2dpYS5pdCIsImZvcmxpLWNlc2VuYS5pdCIsImZvcmxceGVjLWNlc2VuYS5pdCIsImZvcmxpY2VzZW5hLml0IiwiZm9ybFx4ZWNj'@;
put 'ZXNlbmEuaXQiLCJmci5pdCIsImZyb3Npbm9uZS5pdCIsImdlLml0IiwiZ2Vub2EuaXQiLCJnZW5vdmEuaXQiLCJnby5pdCIsImdvcml6aWEuaXQiLCJnci5pdCIsImdyb3NzZXRvLml0IiwiaWdsZXNpYXMtY2FyYm9uaWEuaXQiLCJpZ2xlc2lhc2NhcmJvbmlhLml0IiwiaW0uaXQiLCJpbXBl'@;
put 'cmlhLml0IiwiaXMuaXQiLCJpc2VybmlhLml0Iiwia3IuaXQiLCJsYS1zcGV6aWEuaXQiLCJsYXF1aWxhLml0IiwibGFzcGV6aWEuaXQiLCJsYXRpbmEuaXQiLCJsYy5pdCIsImxlLml0IiwibGVjY2UuaXQiLCJsZWNjby5pdCIsImxpLml0IiwibGl2b3Juby5pdCIsImxvLml0IiwibG9kaS5p'@;
put 'dCIsImx0Lml0IiwibHUuaXQiLCJsdWNjYS5pdCIsIm1hY2VyYXRhLml0IiwibWFudG92YS5pdCIsIm1hc3NhLWNhcnJhcmEuaXQiLCJtYXNzYWNhcnJhcmEuaXQiLCJtYXRlcmEuaXQiLCJtYi5pdCIsIm1jLml0IiwibWUuaXQiLCJtZWRpby1jYW1waWRhbm8uaXQiLCJtZWRpb2NhbXBpZGFu'@;
put 'by5pdCIsIm1lc3NpbmEuaXQiLCJtaS5pdCIsIm1pbGFuLml0IiwibWlsYW5vLml0IiwibW4uaXQiLCJtby5pdCIsIm1vZGVuYS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YS5pdCIsIm1vbnphYnJpYW56YS5pdCIsIm1vbnphZWJyaWFu'@;
put 'emEuaXQiLCJtb256YWVkZWxsYWJyaWFuemEuaXQiLCJtcy5pdCIsIm10Lml0IiwibmEuaXQiLCJuYXBsZXMuaXQiLCJuYXBvbGkuaXQiLCJuby5pdCIsIm5vdmFyYS5pdCIsIm51Lml0IiwibnVvcm8uaXQiLCJvZy5pdCIsIm9nbGlhc3RyYS5pdCIsIm9sYmlhLXRlbXBpby5pdCIsIm9sYmlh'@;
put 'dGVtcGlvLml0Iiwib3IuaXQiLCJvcmlzdGFuby5pdCIsIm90Lml0IiwicGEuaXQiLCJwYWRvdmEuaXQiLCJwYWR1YS5pdCIsInBhbGVybW8uaXQiLCJwYXJtYS5pdCIsInBhdmlhLml0IiwicGMuaXQiLCJwZC5pdCIsInBlLml0IiwicGVydWdpYS5pdCIsInBlc2Fyby11cmJpbm8uaXQiLCJw'@;
put 'ZXNhcm91cmJpbm8uaXQiLCJwZXNjYXJhLml0IiwicGcuaXQiLCJwaS5pdCIsInBpYWNlbnphLml0IiwicGlzYS5pdCIsInBpc3RvaWEuaXQiLCJwbi5pdCIsInBvLml0IiwicG9yZGVub25lLml0IiwicG90ZW56YS5pdCIsInByLml0IiwicHJhdG8uaXQiLCJwdC5pdCIsInB1Lml0IiwicHYu'@;
put 'aXQiLCJwei5pdCIsInJhLml0IiwicmFndXNhLml0IiwicmF2ZW5uYS5pdCIsInJjLml0IiwicmUuaXQiLCJyZWdnaW8tY2FsYWJyaWEuaXQiLCJyZWdnaW8tZW1pbGlhLml0IiwicmVnZ2lvY2FsYWJyaWEuaXQiLCJyZWdnaW9lbWlsaWEuaXQiLCJyZy5pdCIsInJpLml0IiwicmlldGkuaXQi'@;
put 'LCJyaW1pbmkuaXQiLCJybS5pdCIsInJuLml0Iiwicm8uaXQiLCJyb21hLml0Iiwicm9tZS5pdCIsInJvdmlnby5pdCIsInNhLml0Iiwic2FsZXJuby5pdCIsInNhc3NhcmkuaXQiLCJzYXZvbmEuaXQiLCJzaS5pdCIsInNpZW5hLml0Iiwic2lyYWN1c2EuaXQiLCJzby5pdCIsInNvbmRyaW8u'@;
put 'aXQiLCJzcC5pdCIsInNyLml0Iiwic3MuaXQiLCJzdWVkdGlyb2wuaXQiLCJzXHhmY2R0aXJvbC5pdCIsInN2Lml0IiwidGEuaXQiLCJ0YXJhbnRvLml0IiwidGUuaXQiLCJ0ZW1waW8tb2xiaWEuaXQiLCJ0ZW1waW9vbGJpYS5pdCIsInRlcmFtby5pdCIsInRlcm5pLml0IiwidG4uaXQiLCJ0'@;
put 'by5pdCIsInRvcmluby5pdCIsInRwLml0IiwidHIuaXQiLCJ0cmFuaS1hbmRyaWEtYmFybGV0dGEuaXQiLCJ0cmFuaS1iYXJsZXR0YS1hbmRyaWEuaXQiLCJ0cmFuaWFuZHJpYWJhcmxldHRhLml0IiwidHJhbmliYXJsZXR0YWFuZHJpYS5pdCIsInRyYXBhbmkuaXQiLCJ0cmVudG8uaXQiLCJ0'@;
put 'cmV2aXNvLml0IiwidHJpZXN0ZS5pdCIsInRzLml0IiwidHVyaW4uaXQiLCJ0di5pdCIsInVkLml0IiwidWRpbmUuaXQiLCJ1cmJpbm8tcGVzYXJvLml0IiwidXJiaW5vcGVzYXJvLml0IiwidmEuaXQiLCJ2YXJlc2UuaXQiLCJ2Yi5pdCIsInZjLml0IiwidmUuaXQiLCJ2ZW5lemlhLml0Iiwi'@;
put 'dmVuaWNlLml0IiwidmVyYmFuaWEuaXQiLCJ2ZXJjZWxsaS5pdCIsInZlcm9uYS5pdCIsInZpLml0Iiwidmliby12YWxlbnRpYS5pdCIsInZpYm92YWxlbnRpYS5pdCIsInZpY2VuemEuaXQiLCJ2aXRlcmJvLml0IiwidnIuaXQiLCJ2cy5pdCIsInZ0Lml0IiwidnYuaXQiLCJqZSIsImNvLmpl'@;
put 'IiwibmV0LmplIiwib3JnLmplIiwiKi5qbSIsImpvIiwiY29tLmpvIiwib3JnLmpvIiwibmV0LmpvIiwiZWR1LmpvIiwic2NoLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmFtZS5qbyIsImpvYnMiLCJqcCIsImFjLmpwIiwiYWQuanAiLCJjby5qcCIsImVkLmpwIiwiZ28uanAiLCJnci5qcCIs'@;
put 'ImxnLmpwIiwibmUuanAiLCJvci5qcCIsImFpY2hpLmpwIiwiYWtpdGEuanAiLCJhb21vcmkuanAiLCJjaGliYS5qcCIsImVoaW1lLmpwIiwiZnVrdWkuanAiLCJmdWt1b2thLmpwIiwiZnVrdXNoaW1hLmpwIiwiZ2lmdS5qcCIsImd1bm1hLmpwIiwiaGlyb3NoaW1hLmpwIiwiaG9ra2FpZG8u'@;
put 'anAiLCJoeW9nby5qcCIsImliYXJha2kuanAiLCJpc2hpa2F3YS5qcCIsIml3YXRlLmpwIiwia2FnYXdhLmpwIiwia2Fnb3NoaW1hLmpwIiwia2FuYWdhd2EuanAiLCJrb2NoaS5qcCIsImt1bWFtb3RvLmpwIiwia3lvdG8uanAiLCJtaWUuanAiLCJtaXlhZ2kuanAiLCJtaXlhemFraS5qcCIs'@;
put 'Im5hZ2Fuby5qcCIsIm5hZ2FzYWtpLmpwIiwibmFyYS5qcCIsIm5paWdhdGEuanAiLCJvaXRhLmpwIiwib2theWFtYS5qcCIsIm9raW5hd2EuanAiLCJvc2FrYS5qcCIsInNhZ2EuanAiLCJzYWl0YW1hLmpwIiwic2hpZ2EuanAiLCJzaGltYW5lLmpwIiwic2hpenVva2EuanAiLCJ0b2NoaWdp'@;
put 'LmpwIiwidG9rdXNoaW1hLmpwIiwidG9reW8uanAiLCJ0b3R0b3JpLmpwIiwidG95YW1hLmpwIiwid2FrYXlhbWEuanAiLCJ5YW1hZ2F0YS5qcCIsInlhbWFndWNoaS5qcCIsInlhbWFuYXNoaS5qcCIsIlx1NjgwM1x1NjcyOC5qcCIsIlx1NjExYlx1NzdlNS5qcCIsIlx1NjExYlx1NWE5Yi5q'@;
put 'cCIsIlx1NTE3NVx1NWVhYi5qcCIsIlx1NzE4YVx1NjcyYy5qcCIsIlx1ODMyOFx1NTdjZS5qcCIsIlx1NTMxN1x1NmQ3N1x1OTA1My5qcCIsIlx1NTM0M1x1ODQ0OS5qcCIsIlx1NTQ4Y1x1NmI0Y1x1NWM3MS5qcCIsIlx1OTU3N1x1NWQwZS5qcCIsIlx1OTU3N1x1OTFjZS5qcCIsIlx1NjVi'@;
put 'MFx1NmY1Zi5qcCIsIlx1OTc1Mlx1NjhlZS5qcCIsIlx1OTc1OVx1NWNhMS5qcCIsIlx1Njc3MVx1NGVhYy5qcCIsIlx1NzdmM1x1NWRkZC5qcCIsIlx1NTdmY1x1NzM4OS5qcCIsIlx1NGUwOVx1OTFjZC5qcCIsIlx1NGVhY1x1OTBmZC5qcCIsIlx1NGY1MFx1OGNjMC5qcCIsIlx1NTkyN1x1'@;
put 'NTIwNi5qcCIsIlx1NTkyN1x1OTYyYS5qcCIsIlx1NTk0OFx1ODI2Zi5qcCIsIlx1NWJhZVx1NTdjZS5qcCIsIlx1NWJhZVx1NWQwZS5qcCIsIlx1NWJjY1x1NWM3MS5qcCIsIlx1NWM3MVx1NTNlMy5qcCIsIlx1NWM3MVx1NWY2Mi5qcCIsIlx1NWM3MVx1NjhhOC5qcCIsIlx1NWNhOVx1NjI0'@;
put 'Yi5qcCIsIlx1NWM5MFx1OTYxYy5qcCIsIlx1NWNhMVx1NWM3MS5qcCIsIlx1NWNmNlx1NjgzOS5qcCIsIlx1NWU4M1x1NWNmNi5qcCIsIlx1NWZiM1x1NWNmNi5qcCIsIlx1NmM5Nlx1N2UwNC5qcCIsIlx1NmVjYlx1OGNjMC5qcCIsIlx1Nzk1ZVx1NTk0OFx1NWRkZC5qcCIsIlx1Nzk4Zlx1'@;
put 'NGU5NS5qcCIsIlx1Nzk4Zlx1NWNhMS5qcCIsIlx1Nzk4Zlx1NWNmNi5qcCIsIlx1NzljYlx1NzUzMC5qcCIsIlx1N2ZhNFx1OTlhYy5qcCIsIlx1OTk5OVx1NWRkZC5qcCIsIlx1OWFkOFx1NzdlNS5qcCIsIlx1OWNlNVx1NTNkNi5qcCIsIlx1OWU3Zlx1NTE1MFx1NWNmNi5qcCIsIioua2F3'@;
put 'YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIqLmtvYmUuanAiLCIqLm5hZ295YS5qcCIsIiouc2FwcG9yby5qcCIsIiouc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lmthd2FzYWtpLmpwIiwiIWNpdHkua2l0YWt5dXNodS5qcCIsIiFjaXR5LmtvYmUuanAiLCIhY2l0eS5u'@;
put 'YWdveWEuanAiLCIhY2l0eS5zYXBwb3JvLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiIWNpdHkueW9rb2hhbWEuanAiLCJhaXNhaS5haWNoaS5qcCIsImFtYS5haWNoaS5qcCIsImFuam8uYWljaGkuanAiLCJhc3VrZS5haWNoaS5qcCIsImNoaXJ5dS5haWNoaS5qcCIsImNoaXRhLmFpY2hpLmpw'@;
put 'IiwiZnVzby5haWNoaS5qcCIsImdhbWFnb3JpLmFpY2hpLmpwIiwiaGFuZGEuYWljaGkuanAiLCJoYXp1LmFpY2hpLmpwIiwiaGVraW5hbi5haWNoaS5qcCIsImhpZ2FzaGl1cmEuYWljaGkuanAiLCJpY2hpbm9taXlhLmFpY2hpLmpwIiwiaW5hemF3YS5haWNoaS5qcCIsImludXlhbWEuYWlj'@;
put 'aGkuanAiLCJpc3NoaWtpLmFpY2hpLmpwIiwiaXdha3VyYS5haWNoaS5qcCIsImthbmllLmFpY2hpLmpwIiwia2FyaXlhLmFpY2hpLmpwIiwia2FzdWdhaS5haWNoaS5qcCIsImtpcmEuYWljaGkuanAiLCJraXlvc3UuYWljaGkuanAiLCJrb21ha2kuYWljaGkuanAiLCJrb25hbi5haWNoaS5q'@;
put 'cCIsImtvdGEuYWljaGkuanAiLCJtaWhhbWEuYWljaGkuanAiLCJtaXlvc2hpLmFpY2hpLmpwIiwibmlzaGlvLmFpY2hpLmpwIiwibmlzc2hpbi5haWNoaS5qcCIsIm9idS5haWNoaS5qcCIsIm9ndWNoaS5haWNoaS5qcCIsIm9oYXJ1LmFpY2hpLmpwIiwib2themFraS5haWNoaS5qcCIsIm93'@;
put 'YXJpYXNhaGkuYWljaGkuanAiLCJzZXRvLmFpY2hpLmpwIiwic2hpa2F0c3UuYWljaGkuanAiLCJzaGluc2hpcm8uYWljaGkuanAiLCJzaGl0YXJhLmFpY2hpLmpwIiwidGFoYXJhLmFpY2hpLmpwIiwidGFrYWhhbWEuYWljaGkuanAiLCJ0b2Jpc2hpbWEuYWljaGkuanAiLCJ0b2VpLmFpY2hp'@;
put 'LmpwIiwidG9nby5haWNoaS5qcCIsInRva2FpLmFpY2hpLmpwIiwidG9rb25hbWUuYWljaGkuanAiLCJ0b3lvYWtlLmFpY2hpLmpwIiwidG95b2hhc2hpLmFpY2hpLmpwIiwidG95b2thd2EuYWljaGkuanAiLCJ0b3lvbmUuYWljaGkuanAiLCJ0b3lvdGEuYWljaGkuanAiLCJ0c3VzaGltYS5h'@;
put 'aWNoaS5qcCIsInlhdG9taS5haWNoaS5qcCIsImFraXRhLmFraXRhLmpwIiwiZGFpc2VuLmFraXRhLmpwIiwiZnVqaXNhdG8uYWtpdGEuanAiLCJnb2pvbWUuYWtpdGEuanAiLCJoYWNoaXJvZ2F0YS5ha2l0YS5qcCIsImhhcHBvdS5ha2l0YS5qcCIsImhpZ2FzaGluYXJ1c2UuYWtpdGEuanAi'@;
put 'LCJob25qby5ha2l0YS5qcCIsImhvbmp5by5ha2l0YS5qcCIsImlrYXdhLmFraXRhLmpwIiwia2FtaWtvYW5pLmFraXRhLmpwIiwia2FtaW9rYS5ha2l0YS5qcCIsImthdGFnYW1pLmFraXRhLmpwIiwia2F6dW5vLmFraXRhLmpwIiwia2l0YWFraXRhLmFraXRhLmpwIiwia29zYWthLmFraXRh'@;
put 'LmpwIiwia3lvd2EuYWtpdGEuanAiLCJtaXNhdG8uYWtpdGEuanAiLCJtaXRhbmUuYWtpdGEuanAiLCJtb3JpeW9zaGkuYWtpdGEuanAiLCJuaWthaG8uYWtpdGEuanAiLCJub3NoaXJvLmFraXRhLmpwIiwib2RhdGUuYWtpdGEuanAiLCJvZ2EuYWtpdGEuanAiLCJvZ2F0YS5ha2l0YS5qcCIs'@;
put 'InNlbWJva3UuYWtpdGEuanAiLCJ5b2tvdGUuYWtpdGEuanAiLCJ5dXJpaG9uam8uYWtpdGEuanAiLCJhb21vcmkuYW9tb3JpLmpwIiwiZ29ub2hlLmFvbW9yaS5qcCIsImhhY2hpbm9oZS5hb21vcmkuanAiLCJoYXNoaWthbWkuYW9tb3JpLmpwIiwiaGlyYW5haS5hb21vcmkuanAiLCJoaXJv'@;
put 'c2FraS5hb21vcmkuanAiLCJpdGF5YW5hZ2kuYW9tb3JpLmpwIiwia3Vyb2lzaGkuYW9tb3JpLmpwIiwibWlzYXdhLmFvbW9yaS5qcCIsIm11dHN1LmFvbW9yaS5qcCIsIm5ha2Fkb21hcmkuYW9tb3JpLmpwIiwibm9oZWppLmFvbW9yaS5qcCIsIm9pcmFzZS5hb21vcmkuanAiLCJvd2FuaS5h'@;
put 'b21vcmkuanAiLCJyb2t1bm9oZS5hb21vcmkuanAiLCJzYW5ub2hlLmFvbW9yaS5qcCIsInNoaWNoaW5vaGUuYW9tb3JpLmpwIiwic2hpbmdvLmFvbW9yaS5qcCIsInRha2tvLmFvbW9yaS5qcCIsInRvd2FkYS5hb21vcmkuanAiLCJ0c3VnYXJ1LmFvbW9yaS5qcCIsInRzdXJ1dGEuYW9tb3Jp'@;
put 'LmpwIiwiYWJpa28uY2hpYmEuanAiLCJhc2FoaS5jaGliYS5qcCIsImNob25hbi5jaGliYS5qcCIsImNob3NlaS5jaGliYS5qcCIsImNob3NoaS5jaGliYS5qcCIsImNodW8uY2hpYmEuanAiLCJmdW5hYmFzaGkuY2hpYmEuanAiLCJmdXR0c3UuY2hpYmEuanAiLCJoYW5hbWlnYXdhLmNoaWJh'@;
put 'LmpwIiwiaWNoaWhhcmEuY2hpYmEuanAiLCJpY2hpa2F3YS5jaGliYS5qcCIsImljaGlub21peWEuY2hpYmEuanAiLCJpbnphaS5jaGliYS5qcCIsImlzdW1pLmNoaWJhLmpwIiwia2FtYWdheWEuY2hpYmEuanAiLCJrYW1vZ2F3YS5jaGliYS5qcCIsImthc2hpd2EuY2hpYmEuanAiLCJrYXRv'@;
put 'cmkuY2hpYmEuanAiLCJrYXRzdXVyYS5jaGliYS5qcCIsImtpbWl0c3UuY2hpYmEuanAiLCJraXNhcmF6dS5jaGliYS5qcCIsImtvemFraS5jaGliYS5qcCIsImt1anVrdXJpLmNoaWJhLmpwIiwia3lvbmFuLmNoaWJhLmpwIiwibWF0c3Vkby5jaGliYS5qcCIsIm1pZG9yaS5jaGliYS5qcCIs'@;
put 'Im1paGFtYS5jaGliYS5qcCIsIm1pbmFtaWJvc28uY2hpYmEuanAiLCJtb2JhcmEuY2hpYmEuanAiLCJtdXRzdXphd2EuY2hpYmEuanAiLCJuYWdhcmEuY2hpYmEuanAiLCJuYWdhcmV5YW1hLmNoaWJhLmpwIiwibmFyYXNoaW5vLmNoaWJhLmpwIiwibmFyaXRhLmNoaWJhLmpwIiwibm9kYS5j'@;
put 'aGliYS5qcCIsIm9hbWlzaGlyYXNhdG8uY2hpYmEuanAiLCJvbWlnYXdhLmNoaWJhLmpwIiwib25qdWt1LmNoaWJhLmpwIiwib3Rha2kuY2hpYmEuanAiLCJzYWthZS5jaGliYS5qcCIsInNha3VyYS5jaGliYS5qcCIsInNoaW1vZnVzYS5jaGliYS5qcCIsInNoaXJha28uY2hpYmEuanAiLCJz'@;
put 'aGlyb2kuY2hpYmEuanAiLCJzaGlzdWkuY2hpYmEuanAiLCJzb2RlZ2F1cmEuY2hpYmEuanAiLCJzb3NhLmNoaWJhLmpwIiwidGFrby5jaGliYS5qcCIsInRhdGV5YW1hLmNoaWJhLmpwIiwidG9nYW5lLmNoaWJhLmpwIiwidG9obm9zaG8uY2hpYmEuanAiLCJ0b21pc2F0by5jaGliYS5qcCIs'@;
put 'InVyYXlhc3UuY2hpYmEuanAiLCJ5YWNoaW1hdGEuY2hpYmEuanAiLCJ5YWNoaXlvLmNoaWJhLmpwIiwieW9rYWljaGliYS5jaGliYS5qcCIsInlva29zaGliYWhpa2FyaS5jaGliYS5qcCIsInlvdHN1a2FpZG8uY2hpYmEuanAiLCJhaW5hbi5laGltZS5qcCIsImhvbmFpLmVoaW1lLmpwIiwi'@;
put 'aWthdGEuZWhpbWUuanAiLCJpbWFiYXJpLmVoaW1lLmpwIiwiaXlvLmVoaW1lLmpwIiwia2FtaWppbWEuZWhpbWUuanAiLCJraWhva3UuZWhpbWUuanAiLCJrdW1ha29nZW4uZWhpbWUuanAiLCJtYXNha2kuZWhpbWUuanAiLCJtYXRzdW5vLmVoaW1lLmpwIiwibWF0c3V5YW1hLmVoaW1lLmpw'@;
put 'IiwibmFtaWthdGEuZWhpbWUuanAiLCJuaWloYW1hLmVoaW1lLmpwIiwib3p1LmVoaW1lLmpwIiwic2Fpam8uZWhpbWUuanAiLCJzZWl5by5laGltZS5qcCIsInNoaWtva3VjaHVvLmVoaW1lLmpwIiwidG9iZS5laGltZS5qcCIsInRvb24uZWhpbWUuanAiLCJ1Y2hpa28uZWhpbWUuanAiLCJ1'@;
put 'd2FqaW1hLmVoaW1lLmpwIiwieWF3YXRhaGFtYS5laGltZS5qcCIsImVjaGl6ZW4uZnVrdWkuanAiLCJlaWhlaWppLmZ1a3VpLmpwIiwiZnVrdWkuZnVrdWkuanAiLCJpa2VkYS5mdWt1aS5qcCIsImthdHN1eWFtYS5mdWt1aS5qcCIsIm1paGFtYS5mdWt1aS5qcCIsIm1pbmFtaWVjaGl6ZW4u'@;
put 'ZnVrdWkuanAiLCJvYmFtYS5mdWt1aS5qcCIsIm9oaS5mdWt1aS5qcCIsIm9uby5mdWt1aS5qcCIsInNhYmFlLmZ1a3VpLmpwIiwic2FrYWkuZnVrdWkuanAiLCJ0YWthaGFtYS5mdWt1aS5qcCIsInRzdXJ1Z2EuZnVrdWkuanAiLCJ3YWthc2EuZnVrdWkuanAiLCJhc2hpeWEuZnVrdW9rYS5q'@;
put 'cCIsImJ1emVuLmZ1a3Vva2EuanAiLCJjaGlrdWdvLmZ1a3Vva2EuanAiLCJjaGlrdWhvLmZ1a3Vva2EuanAiLCJjaGlrdWpvLmZ1a3Vva2EuanAiLCJjaGlrdXNoaW5vLmZ1a3Vva2EuanAiLCJjaGlrdXplbi5mdWt1b2thLmpwIiwiY2h1by5mdWt1b2thLmpwIiwiZGF6YWlmdS5mdWt1b2th'@;
put 'LmpwIiwiZnVrdWNoaS5mdWt1b2thLmpwIiwiaGFrYXRhLmZ1a3Vva2EuanAiLCJoaWdhc2hpLmZ1a3Vva2EuanAiLCJoaXJva2F3YS5mdWt1b2thLmpwIiwiaGlzYXlhbWEuZnVrdW9rYS5qcCIsImlpenVrYS5mdWt1b2thLmpwIiwiaW5hdHN1a2kuZnVrdW9rYS5qcCIsImthaG8uZnVrdW9r'@;
put 'YS5qcCIsImthc3VnYS5mdWt1b2thLmpwIiwia2FzdXlhLmZ1a3Vva2EuanAiLCJrYXdhcmEuZnVrdW9rYS5qcCIsImtlaXNlbi5mdWt1b2thLmpwIiwia29nYS5mdWt1b2thLmpwIiwia3VyYXRlLmZ1a3Vva2EuanAiLCJrdXJvZ2kuZnVrdW9rYS5qcCIsImt1cnVtZS5mdWt1b2thLmpwIiwi'@;
put 'bWluYW1pLmZ1a3Vva2EuanAiLCJtaXlha28uZnVrdW9rYS5qcCIsIm1peWFtYS5mdWt1b2thLmpwIiwibWl5YXdha2EuZnVrdW9rYS5qcCIsIm1penVtYWtpLmZ1a3Vva2EuanAiLCJtdW5ha2F0YS5mdWt1b2thLmpwIiwibmFrYWdhd2EuZnVrdW9rYS5qcCIsIm5ha2FtYS5mdWt1b2thLmpw'@;
put 'IiwibmlzaGkuZnVrdW9rYS5qcCIsIm5vZ2F0YS5mdWt1b2thLmpwIiwib2dvcmkuZnVrdW9rYS5qcCIsIm9rYWdha2kuZnVrdW9rYS5qcCIsIm9rYXdhLmZ1a3Vva2EuanAiLCJva2kuZnVrdW9rYS5qcCIsIm9tdXRhLmZ1a3Vva2EuanAiLCJvbmdhLmZ1a3Vva2EuanAiLCJvbm9qby5mdWt1'@;
put 'b2thLmpwIiwib3RvLmZ1a3Vva2EuanAiLCJzYWlnYXdhLmZ1a3Vva2EuanAiLCJzYXNhZ3VyaS5mdWt1b2thLmpwIiwic2hpbmd1LmZ1a3Vva2EuanAiLCJzaGlueW9zaGl0b21pLmZ1a3Vva2EuanAiLCJzaG9uYWkuZnVrdW9rYS5qcCIsInNvZWRhLmZ1a3Vva2EuanAiLCJzdWUuZnVrdW9r'@;
put 'YS5qcCIsInRhY2hpYXJhaS5mdWt1b2thLmpwIiwidGFnYXdhLmZ1a3Vva2EuanAiLCJ0YWthdGEuZnVrdW9rYS5qcCIsInRvaG8uZnVrdW9rYS5qcCIsInRveW90c3UuZnVrdW9rYS5qcCIsInRzdWlraS5mdWt1b2thLmpwIiwidWtpaGEuZnVrdW9rYS5qcCIsInVtaS5mdWt1b2thLmpwIiwi'@;
put 'dXN1aS5mdWt1b2thLmpwIiwieWFtYWRhLmZ1a3Vva2EuanAiLCJ5YW1lLmZ1a3Vva2EuanAiLCJ5YW5hZ2F3YS5mdWt1b2thLmpwIiwieXVrdWhhc2hpLmZ1a3Vva2EuanAiLCJhaXp1YmFuZ2UuZnVrdXNoaW1hLmpwIiwiYWl6dW1pc2F0by5mdWt1c2hpbWEuanAiLCJhaXp1d2FrYW1hdHN1'@;
put 'LmZ1a3VzaGltYS5qcCIsImFzYWthd2EuZnVrdXNoaW1hLmpwIiwiYmFuZGFpLmZ1a3VzaGltYS5qcCIsImRhdGUuZnVrdXNoaW1hLmpwIiwiZnVrdXNoaW1hLmZ1a3VzaGltYS5qcCIsImZ1cnVkb25vLmZ1a3VzaGltYS5qcCIsImZ1dGFiYS5mdWt1c2hpbWEuanAiLCJoYW5hd2EuZnVrdXNo'@;
put 'aW1hLmpwIiwiaGlnYXNoaS5mdWt1c2hpbWEuanAiLCJoaXJhdGEuZnVrdXNoaW1hLmpwIiwiaGlyb25vLmZ1a3VzaGltYS5qcCIsImlpdGF0ZS5mdWt1c2hpbWEuanAiLCJpbmF3YXNoaXJvLmZ1a3VzaGltYS5qcCIsImlzaGlrYXdhLmZ1a3VzaGltYS5qcCIsIml3YWtpLmZ1a3VzaGltYS5q'@;
put 'cCIsIml6dW1pemFraS5mdWt1c2hpbWEuanAiLCJrYWdhbWlpc2hpLmZ1a3VzaGltYS5qcCIsImthbmV5YW1hLmZ1a3VzaGltYS5qcCIsImthd2FtYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFrYXRhLmZ1a3VzaGltYS5qcCIsImtpdGFzaGlvYmFyYS5mdWt1c2hpbWEuanAiLCJrb29yaS5mdWt1'@;
put 'c2hpbWEuanAiLCJrb3JpeWFtYS5mdWt1c2hpbWEuanAiLCJrdW5pbWkuZnVrdXNoaW1hLmpwIiwibWloYXJ1LmZ1a3VzaGltYS5qcCIsIm1pc2hpbWEuZnVrdXNoaW1hLmpwIiwibmFtaWUuZnVrdXNoaW1hLmpwIiwibmFuZ28uZnVrdXNoaW1hLmpwIiwibmlzaGlhaXp1LmZ1a3VzaGltYS5q'@;
put 'cCIsIm5pc2hpZ28uZnVrdXNoaW1hLmpwIiwib2t1bWEuZnVrdXNoaW1hLmpwIiwib21vdGVnby5mdWt1c2hpbWEuanAiLCJvbm8uZnVrdXNoaW1hLmpwIiwib3RhbWEuZnVrdXNoaW1hLmpwIiwic2FtZWdhd2EuZnVrdXNoaW1hLmpwIiwic2hpbW9nby5mdWt1c2hpbWEuanAiLCJzaGlyYWth'@;
put 'd2EuZnVrdXNoaW1hLmpwIiwic2hvd2EuZnVrdXNoaW1hLmpwIiwic29tYS5mdWt1c2hpbWEuanAiLCJzdWthZ2F3YS5mdWt1c2hpbWEuanAiLCJ0YWlzaGluLmZ1a3VzaGltYS5qcCIsInRhbWFrYXdhLmZ1a3VzaGltYS5qcCIsInRhbmFndXJhLmZ1a3VzaGltYS5qcCIsInRlbmVpLmZ1a3Vz'@;
put 'aGltYS5qcCIsInlhYnVraS5mdWt1c2hpbWEuanAiLCJ5YW1hdG8uZnVrdXNoaW1hLmpwIiwieWFtYXRzdXJpLmZ1a3VzaGltYS5qcCIsInlhbmFpenUuZnVrdXNoaW1hLmpwIiwieXVnYXdhLmZ1a3VzaGltYS5qcCIsImFucGFjaGkuZ2lmdS5qcCIsImVuYS5naWZ1LmpwIiwiZ2lmdS5naWZ1'@;
put 'LmpwIiwiZ2luYW4uZ2lmdS5qcCIsImdvZG8uZ2lmdS5qcCIsImd1am8uZ2lmdS5qcCIsImhhc2hpbWEuZ2lmdS5qcCIsImhpY2hpc28uZ2lmdS5qcCIsImhpZGEuZ2lmdS5qcCIsImhpZ2FzaGlzaGlyYWthd2EuZ2lmdS5qcCIsImliaWdhd2EuZ2lmdS5qcCIsImlrZWRhLmdpZnUuanAiLCJr'@;
put 'YWthbWlnYWhhcmEuZ2lmdS5qcCIsImthbmkuZ2lmdS5qcCIsImthc2FoYXJhLmdpZnUuanAiLCJrYXNhbWF0c3UuZ2lmdS5qcCIsImthd2F1ZS5naWZ1LmpwIiwia2l0YWdhdGEuZ2lmdS5qcCIsIm1pbm8uZ2lmdS5qcCIsIm1pbm9rYW1vLmdpZnUuanAiLCJtaXRha2UuZ2lmdS5qcCIsIm1p'@;
put 'enVuYW1pLmdpZnUuanAiLCJtb3Rvc3UuZ2lmdS5qcCIsIm5ha2F0c3VnYXdhLmdpZnUuanAiLCJvZ2FraS5naWZ1LmpwIiwic2FrYWhvZ2kuZ2lmdS5qcCIsInNla2kuZ2lmdS5qcCIsInNla2lnYWhhcmEuZ2lmdS5qcCIsInNoaXJha2F3YS5naWZ1LmpwIiwidGFqaW1pLmdpZnUuanAiLCJ0'@;
put 'YWtheWFtYS5naWZ1LmpwIiwidGFydWkuZ2lmdS5qcCIsInRva2kuZ2lmdS5qcCIsInRvbWlrYS5naWZ1LmpwIiwid2Fub3VjaGkuZ2lmdS5qcCIsInlhbWFnYXRhLmdpZnUuanAiLCJ5YW90c3UuZ2lmdS5qcCIsInlvcm8uZ2lmdS5qcCIsImFubmFrYS5ndW5tYS5qcCIsImNoaXlvZGEuZ3Vu'@;
put 'bWEuanAiLCJmdWppb2thLmd1bm1hLmpwIiwiaGlnYXNoaWFnYXRzdW1hLmd1bm1hLmpwIiwiaXNlc2FraS5ndW5tYS5qcCIsIml0YWt1cmEuZ3VubWEuanAiLCJrYW5uYS5ndW5tYS5qcCIsImthbnJhLmd1bm1hLmpwIiwia2F0YXNoaW5hLmd1bm1hLmpwIiwia2F3YWJhLmd1bm1hLmpwIiwi'@;
put 'a2lyeXUuZ3VubWEuanAiLCJrdXNhdHN1Lmd1bm1hLmpwIiwibWFlYmFzaGkuZ3VubWEuanAiLCJtZWl3YS5ndW5tYS5qcCIsIm1pZG9yaS5ndW5tYS5qcCIsIm1pbmFrYW1pLmd1bm1hLmpwIiwibmFnYW5vaGFyYS5ndW5tYS5qcCIsIm5ha2Fub2pvLmd1bm1hLmpwIiwibmFubW9rdS5ndW5t'@;
put 'YS5qcCIsIm51bWF0YS5ndW5tYS5qcCIsIm9penVtaS5ndW5tYS5qcCIsIm9yYS5ndW5tYS5qcCIsIm90YS5ndW5tYS5qcCIsInNoaWJ1a2F3YS5ndW5tYS5qcCIsInNoaW1vbml0YS5ndW5tYS5qcCIsInNoaW50by5ndW5tYS5qcCIsInNob3dhLmd1bm1hLmpwIiwidGFrYXNha2kuZ3VubWEu'@;
put 'anAiLCJ0YWtheWFtYS5ndW5tYS5qcCIsInRhbWFtdXJhLmd1bm1hLmpwIiwidGF0ZWJheWFzaGkuZ3VubWEuanAiLCJ0b21pb2thLmd1bm1hLmpwIiwidHN1a2l5b25vLmd1bm1hLmpwIiwidHN1bWFnb2kuZ3VubWEuanAiLCJ1ZW5vLmd1bm1hLmpwIiwieW9zaGlva2EuZ3VubWEuanAiLCJh'@;
put 'c2FtaW5hbWkuaGlyb3NoaW1hLmpwIiwiZGFpd2EuaGlyb3NoaW1hLmpwIiwiZXRhamltYS5oaXJvc2hpbWEuanAiLCJmdWNodS5oaXJvc2hpbWEuanAiLCJmdWt1eWFtYS5oaXJvc2hpbWEuanAiLCJoYXRzdWthaWNoaS5oaXJvc2hpbWEuanAiLCJoaWdhc2hpaGlyb3NoaW1hLmhpcm9zaGlt'@;
put 'YS5qcCIsImhvbmdvLmhpcm9zaGltYS5qcCIsImppbnNla2lrb2dlbi5oaXJvc2hpbWEuanAiLCJrYWl0YS5oaXJvc2hpbWEuanAiLCJrdWkuaGlyb3NoaW1hLmpwIiwia3VtYW5vLmhpcm9zaGltYS5qcCIsImt1cmUuaGlyb3NoaW1hLmpwIiwibWloYXJhLmhpcm9zaGltYS5qcCIsIm1peW9z'@;
put 'aGkuaGlyb3NoaW1hLmpwIiwibmFrYS5oaXJvc2hpbWEuanAiLCJvbm9taWNoaS5oaXJvc2hpbWEuanAiLCJvc2FraWthbWlqaW1hLmhpcm9zaGltYS5qcCIsIm90YWtlLmhpcm9zaGltYS5qcCIsInNha2EuaGlyb3NoaW1hLmpwIiwic2VyYS5oaXJvc2hpbWEuanAiLCJzZXJhbmlzaGkuaGly'@;
put 'b3NoaW1hLmpwIiwic2hpbmljaGkuaGlyb3NoaW1hLmpwIiwic2hvYmFyYS5oaXJvc2hpbWEuanAiLCJ0YWtlaGFyYS5oaXJvc2hpbWEuanAiLCJhYmFzaGlyaS5ob2trYWlkby5qcCIsImFiaXJhLmhva2thaWRvLmpwIiwiYWliZXRzdS5ob2trYWlkby5qcCIsImFrYWJpcmEuaG9ra2FpZG8u'@;
put 'anAiLCJha2tlc2hpLmhva2thaWRvLmpwIiwiYXNhaGlrYXdhLmhva2thaWRvLmpwIiwiYXNoaWJldHN1Lmhva2thaWRvLmpwIiwiYXNob3JvLmhva2thaWRvLmpwIiwiYXNzYWJ1Lmhva2thaWRvLmpwIiwiYXRzdW1hLmhva2thaWRvLmpwIiwiYmliYWkuaG9ra2FpZG8uanAiLCJiaWVpLmhv'@;
put 'a2thaWRvLmpwIiwiYmlmdWthLmhva2thaWRvLmpwIiwiYmlob3JvLmhva2thaWRvLmpwIiwiYmlyYXRvcmkuaG9ra2FpZG8uanAiLCJjaGlwcHViZXRzdS5ob2trYWlkby5qcCIsImNoaXRvc2UuaG9ra2FpZG8uanAiLCJkYXRlLmhva2thaWRvLmpwIiwiZWJldHN1Lmhva2thaWRvLmpwIiwi'@;
put 'ZW1iZXRzdS5ob2trYWlkby5qcCIsImVuaXdhLmhva2thaWRvLmpwIiwiZXJpbW8uaG9ra2FpZG8uanAiLCJlc2FuLmhva2thaWRvLmpwIiwiZXNhc2hpLmhva2thaWRvLmpwIiwiZnVrYWdhd2EuaG9ra2FpZG8uanAiLCJmdWt1c2hpbWEuaG9ra2FpZG8uanAiLCJmdXJhbm8uaG9ra2FpZG8u'@;
put 'anAiLCJmdXJ1YmlyYS5ob2trYWlkby5qcCIsImhhYm9yby5ob2trYWlkby5qcCIsImhha29kYXRlLmhva2thaWRvLmpwIiwiaGFtYXRvbmJldHN1Lmhva2thaWRvLmpwIiwiaGlkYWthLmhva2thaWRvLmpwIiwiaGlnYXNoaWthZ3VyYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYXdhLmhva2th'@;
put 'aWRvLmpwIiwiaGlyb28uaG9ra2FpZG8uanAiLCJob2t1cnl1Lmhva2thaWRvLmpwIiwiaG9rdXRvLmhva2thaWRvLmpwIiwiaG9uYmV0c3UuaG9ra2FpZG8uanAiLCJob3Jva2FuYWkuaG9ra2FpZG8uanAiLCJob3Jvbm9iZS5ob2trYWlkby5qcCIsImlrZWRhLmhva2thaWRvLmpwIiwiaW1h'@;
put 'a2FuZS5ob2trYWlkby5qcCIsImlzaGlrYXJpLmhva2thaWRvLmpwIiwiaXdhbWl6YXdhLmhva2thaWRvLmpwIiwiaXdhbmFpLmhva2thaWRvLmpwIiwia2FtaWZ1cmFuby5ob2trYWlkby5qcCIsImthbWlrYXdhLmhva2thaWRvLmpwIiwia2FtaXNoaWhvcm8uaG9ra2FpZG8uanAiLCJrYW1p'@;
put 'c3VuYWdhd2EuaG9ra2FpZG8uanAiLCJrYW1vZW5haS5ob2trYWlkby5qcCIsImtheWFiZS5ob2trYWlkby5qcCIsImtlbWJ1Y2hpLmhva2thaWRvLmpwIiwia2lrb25haS5ob2trYWlkby5qcCIsImtpbW9iZXRzdS5ob2trYWlkby5qcCIsImtpdGFoaXJvc2hpbWEuaG9ra2FpZG8uanAiLCJr'@;
put 'aXRhbWkuaG9ra2FpZG8uanAiLCJraXlvc2F0by5ob2trYWlkby5qcCIsImtvc2hpbWl6dS5ob2trYWlkby5qcCIsImt1bm5lcHB1Lmhva2thaWRvLmpwIiwia3VyaXlhbWEuaG9ra2FpZG8uanAiLCJrdXJvbWF0c3VuYWkuaG9ra2FpZG8uanAiLCJrdXNoaXJvLmhva2thaWRvLmpwIiwia3V0'@;
put 'Y2hhbi5ob2trYWlkby5qcCIsImt5b3dhLmhva2thaWRvLmpwIiwibWFzaGlrZS5ob2trYWlkby5qcCIsIm1hdHN1bWFlLmhva2thaWRvLmpwIiwibWlrYXNhLmhva2thaWRvLmpwIiwibWluYW1pZnVyYW5vLmhva2thaWRvLmpwIiwibW9tYmV0c3UuaG9ra2FpZG8uanAiLCJtb3NldXNoaS5o'@;
put 'b2trYWlkby5qcCIsIm11a2F3YS5ob2trYWlkby5qcCIsIm11cm9yYW4uaG9ra2FpZG8uanAiLCJuYWllLmhva2thaWRvLmpwIiwibmFrYWdhd2EuaG9ra2FpZG8uanAiLCJuYWthc2F0c3VuYWkuaG9ra2FpZG8uanAiLCJuYWthdG9tYmV0c3UuaG9ra2FpZG8uanAiLCJuYW5hZS5ob2trYWlk'@;
put 'by5qcCIsIm5hbnBvcm8uaG9ra2FpZG8uanAiLCJuYXlvcm8uaG9ra2FpZG8uanAiLCJuZW11cm8uaG9ra2FpZG8uanAiLCJuaWlrYXBwdS5ob2trYWlkby5qcCIsIm5pa2kuaG9ra2FpZG8uanAiLCJuaXNoaW9rb3BwZS5ob2trYWlkby5qcCIsIm5vYm9yaWJldHN1Lmhva2thaWRvLmpwIiwi'@;
put 'bnVtYXRhLmhva2thaWRvLmpwIiwib2JpaGlyby5ob2trYWlkby5qcCIsIm9iaXJhLmhva2thaWRvLmpwIiwib2tldG8uaG9ra2FpZG8uanAiLCJva29wcGUuaG9ra2FpZG8uanAiLCJvdGFydS5ob2trYWlkby5qcCIsIm90b2JlLmhva2thaWRvLmpwIiwib3RvZnVrZS5ob2trYWlkby5qcCIs'@;
put 'Im90b2luZXBwdS5ob2trYWlkby5qcCIsIm91bXUuaG9ra2FpZG8uanAiLCJvem9yYS5ob2trYWlkby5qcCIsInBpcHB1Lmhva2thaWRvLmpwIiwicmFua29zaGkuaG9ra2FpZG8uanAiLCJyZWJ1bi5ob2trYWlkby5qcCIsInJpa3ViZXRzdS5ob2trYWlkby5qcCIsInJpc2hpcmkuaG9ra2Fp'@;
put 'ZG8uanAiLCJyaXNoaXJpZnVqaS5ob2trYWlkby5qcCIsInNhcm9tYS5ob2trYWlkby5qcCIsInNhcnVmdXRzdS5ob2trYWlkby5qcCIsInNoYWtvdGFuLmhva2thaWRvLmpwIiwic2hhcmkuaG9ra2FpZG8uanAiLCJzaGliZWNoYS5ob2trYWlkby5qcCIsInNoaWJldHN1Lmhva2thaWRvLmpw'@;
put 'Iiwic2hpa2FiZS5ob2trYWlkby5qcCIsInNoaWthb2kuaG9ra2FpZG8uanAiLCJzaGltYW1ha2kuaG9ra2FpZG8uanAiLCJzaGltaXp1Lmhva2thaWRvLmpwIiwic2hpbW9rYXdhLmhva2thaWRvLmpwIiwic2hpbnNoaW5vdHN1Lmhva2thaWRvLmpwIiwic2hpbnRva3UuaG9ra2FpZG8uanAi'@;
put 'LCJzaGlyYW51a2EuaG9ra2FpZG8uanAiLCJzaGlyYW9pLmhva2thaWRvLmpwIiwic2hpcml1Y2hpLmhva2thaWRvLmpwIiwic29iZXRzdS5ob2trYWlkby5qcCIsInN1bmFnYXdhLmhva2thaWRvLmpwIiwidGFpa2kuaG9ra2FpZG8uanAiLCJ0YWthc3UuaG9ra2FpZG8uanAiLCJ0YWtpa2F3'@;
put 'YS5ob2trYWlkby5qcCIsInRha2lub3VlLmhva2thaWRvLmpwIiwidGVzaGlrYWdhLmhva2thaWRvLmpwIiwidG9iZXRzdS5ob2trYWlkby5qcCIsInRvaG1hLmhva2thaWRvLmpwIiwidG9tYWtvbWFpLmhva2thaWRvLmpwIiwidG9tYXJpLmhva2thaWRvLmpwIiwidG95YS5ob2trYWlkby5q'@;
put 'cCIsInRveWFrby5ob2trYWlkby5qcCIsInRveW90b21pLmhva2thaWRvLmpwIiwidG95b3VyYS5ob2trYWlkby5qcCIsInRzdWJldHN1Lmhva2thaWRvLmpwIiwidHN1a2lnYXRhLmhva2thaWRvLmpwIiwidXJha2F3YS5ob2trYWlkby5qcCIsInVyYXVzdS5ob2trYWlkby5qcCIsInVyeXUu'@;
put 'aG9ra2FpZG8uanAiLCJ1dGFzaGluYWkuaG9ra2FpZG8uanAiLCJ3YWtrYW5haS5ob2trYWlkby5qcCIsIndhc3NhbXUuaG9ra2FpZG8uanAiLCJ5YWt1bW8uaG9ra2FpZG8uanAiLCJ5b2ljaGkuaG9ra2FpZG8uanAiLCJhaW9pLmh5b2dvLmpwIiwiYWthc2hpLmh5b2dvLmpwIiwiYWtvLmh5'@;
put 'b2dvLmpwIiwiYW1hZ2FzYWtpLmh5b2dvLmpwIiwiYW9nYWtpLmh5b2dvLmpwIiwiYXNhZ28uaHlvZ28uanAiLCJhc2hpeWEuaHlvZ28uanAiLCJhd2FqaS5oeW9nby5qcCIsImZ1a3VzYWtpLmh5b2dvLmpwIiwiZ29zaGlraS5oeW9nby5qcCIsImhhcmltYS5oeW9nby5qcCIsImhpbWVqaS5o'@;
put 'eW9nby5qcCIsImljaGlrYXdhLmh5b2dvLmpwIiwiaW5hZ2F3YS5oeW9nby5qcCIsIml0YW1pLmh5b2dvLmpwIiwia2Frb2dhd2EuaHlvZ28uanAiLCJrYW1pZ29yaS5oeW9nby5qcCIsImthbWlrYXdhLmh5b2dvLmpwIiwia2FzYWkuaHlvZ28uanAiLCJrYXN1Z2EuaHlvZ28uanAiLCJrYXdh'@;
put 'bmlzaGkuaHlvZ28uanAiLCJtaWtpLmh5b2dvLmpwIiwibWluYW1pYXdhamkuaHlvZ28uanAiLCJuaXNoaW5vbWl5YS5oeW9nby5qcCIsIm5pc2hpd2FraS5oeW9nby5qcCIsIm9uby5oeW9nby5qcCIsInNhbmRhLmh5b2dvLmpwIiwic2FubmFuLmh5b2dvLmpwIiwic2FzYXlhbWEuaHlvZ28u'@;
put 'anAiLCJzYXlvLmh5b2dvLmpwIiwic2hpbmd1Lmh5b2dvLmpwIiwic2hpbm9uc2VuLmh5b2dvLmpwIiwic2hpc28uaHlvZ28uanAiLCJzdW1vdG8uaHlvZ28uanAiLCJ0YWlzaGkuaHlvZ28uanAiLCJ0YWthLmh5b2dvLmpwIiwidGFrYXJhenVrYS5oeW9nby5qcCIsInRha2FzYWdvLmh5b2dv'@;
put 'LmpwIiwidGFraW5vLmh5b2dvLmpwIiwidGFtYmEuaHlvZ28uanAiLCJ0YXRzdW5vLmh5b2dvLmpwIiwidG95b29rYS5oeW9nby5qcCIsInlhYnUuaHlvZ28uanAiLCJ5YXNoaXJvLmh5b2dvLmpwIiwieW9rYS5oeW9nby5qcCIsInlva2F3YS5oeW9nby5qcCIsImFtaS5pYmFyYWtpLmpwIiwi'@;
put 'YXNhaGkuaWJhcmFraS5qcCIsImJhbmRvLmliYXJha2kuanAiLCJjaGlrdXNlaS5pYmFyYWtpLmpwIiwiZGFpZ28uaWJhcmFraS5qcCIsImZ1amlzaGlyby5pYmFyYWtpLmpwIiwiaGl0YWNoaS5pYmFyYWtpLmpwIiwiaGl0YWNoaW5ha2EuaWJhcmFraS5qcCIsImhpdGFjaGlvbWl5YS5pYmFy'@;
put 'YWtpLmpwIiwiaGl0YWNoaW90YS5pYmFyYWtpLmpwIiwiaWJhcmFraS5pYmFyYWtpLmpwIiwiaW5hLmliYXJha2kuanAiLCJpbmFzaGlraS5pYmFyYWtpLmpwIiwiaXRha28uaWJhcmFraS5qcCIsIml3YW1hLmliYXJha2kuanAiLCJqb3NvLmliYXJha2kuanAiLCJrYW1pc3UuaWJhcmFraS5q'@;
put 'cCIsImthc2FtYS5pYmFyYWtpLmpwIiwia2FzaGltYS5pYmFyYWtpLmpwIiwia2FzdW1pZ2F1cmEuaWJhcmFraS5qcCIsImtvZ2EuaWJhcmFraS5qcCIsIm1paG8uaWJhcmFraS5qcCIsIm1pdG8uaWJhcmFraS5qcCIsIm1vcml5YS5pYmFyYWtpLmpwIiwibmFrYS5pYmFyYWtpLmpwIiwibmFt'@;
put 'ZWdhdGEuaWJhcmFraS5qcCIsIm9hcmFpLmliYXJha2kuanAiLCJvZ2F3YS5pYmFyYWtpLmpwIiwib21pdGFtYS5pYmFyYWtpLmpwIiwicnl1Z2FzYWtpLmliYXJha2kuanAiLCJzYWthaS5pYmFyYWtpLmpwIiwic2FrdXJhZ2F3YS5pYmFyYWtpLmpwIiwic2hpbW9kYXRlLmliYXJha2kuanAi'@;
put 'LCJzaGltb3RzdW1hLmliYXJha2kuanAiLCJzaGlyb3NhdG8uaWJhcmFraS5qcCIsInNvd2EuaWJhcmFraS5qcCIsInN1aWZ1LmliYXJha2kuanAiLCJ0YWthaGFnaS5pYmFyYWtpLmpwIiwidGFtYXRzdWt1cmkuaWJhcmFraS5qcCIsInRva2FpLmliYXJha2kuanAiLCJ0b21vYmUuaWJhcmFr'@;
put 'aS5qcCIsInRvbmUuaWJhcmFraS5qcCIsInRvcmlkZS5pYmFyYWtpLmpwIiwidHN1Y2hpdXJhLmliYXJha2kuanAiLCJ0c3VrdWJhLmliYXJha2kuanAiLCJ1Y2hpaGFyYS5pYmFyYWtpLmpwIiwidXNoaWt1LmliYXJha2kuanAiLCJ5YWNoaXlvLmliYXJha2kuanAiLCJ5YW1hZ2F0YS5pYmFy'@;
put 'YWtpLmpwIiwieWF3YXJhLmliYXJha2kuanAiLCJ5dWtpLmliYXJha2kuanAiLCJhbmFtaXp1LmlzaGlrYXdhLmpwIiwiaGFrdWkuaXNoaWthd2EuanAiLCJoYWt1c2FuLmlzaGlrYXdhLmpwIiwia2FnYS5pc2hpa2F3YS5qcCIsImthaG9rdS5pc2hpa2F3YS5qcCIsImthbmF6YXdhLmlzaGlr'@;
put 'YXdhLmpwIiwia2F3YWtpdGEuaXNoaWthd2EuanAiLCJrb21hdHN1LmlzaGlrYXdhLmpwIiwibmFrYW5vdG8uaXNoaWthd2EuanAiLCJuYW5hby5pc2hpa2F3YS5qcCIsIm5vbWkuaXNoaWthd2EuanAiLCJub25vaWNoaS5pc2hpa2F3YS5qcCIsIm5vdG8uaXNoaWthd2EuanAiLCJzaGlrYS5p'@;
put 'c2hpa2F3YS5qcCIsInN1enUuaXNoaWthd2EuanAiLCJ0c3ViYXRhLmlzaGlrYXdhLmpwIiwidHN1cnVnaS5pc2hpa2F3YS5qcCIsInVjaGluYWRhLmlzaGlrYXdhLmpwIiwid2FqaW1hLmlzaGlrYXdhLmpwIiwiZnVkYWkuaXdhdGUuanAiLCJmdWppc2F3YS5pd2F0ZS5qcCIsImhhbmFtYWtp'@;
put 'Lml3YXRlLmpwIiwiaGlyYWl6dW1pLml3YXRlLmpwIiwiaGlyb25vLml3YXRlLmpwIiwiaWNoaW5vaGUuaXdhdGUuanAiLCJpY2hpbm9zZWtpLml3YXRlLmpwIiwiaXdhaXp1bWkuaXdhdGUuanAiLCJpd2F0ZS5pd2F0ZS5qcCIsImpvYm9qaS5pd2F0ZS5qcCIsImthbWFpc2hpLml3YXRlLmpw'@;
put 'Iiwia2FuZWdhc2FraS5pd2F0ZS5qcCIsImthcnVtYWkuaXdhdGUuanAiLCJrYXdhaS5pd2F0ZS5qcCIsImtpdGFrYW1pLml3YXRlLmpwIiwia3VqaS5pd2F0ZS5qcCIsImt1bm9oZS5pd2F0ZS5qcCIsImt1enVtYWtpLml3YXRlLmpwIiwibWl5YWtvLml3YXRlLmpwIiwibWl6dXNhd2EuaXdh'@;
put 'dGUuanAiLCJtb3Jpb2thLml3YXRlLmpwIiwibmlub2hlLml3YXRlLmpwIiwibm9kYS5pd2F0ZS5qcCIsIm9mdW5hdG8uaXdhdGUuanAiLCJvc2h1Lml3YXRlLmpwIiwib3RzdWNoaS5pd2F0ZS5qcCIsInJpa3V6ZW50YWthdGEuaXdhdGUuanAiLCJzaGl3YS5pd2F0ZS5qcCIsInNoaXp1a3Vp'@;
put 'c2hpLml3YXRlLmpwIiwic3VtaXRhLml3YXRlLmpwIiwidGFub2hhdGEuaXdhdGUuanAiLCJ0b25vLml3YXRlLmpwIiwieWFoYWJhLml3YXRlLmpwIiwieWFtYWRhLml3YXRlLmpwIiwiYXlhZ2F3YS5rYWdhd2EuanAiLCJoaWdhc2hpa2FnYXdhLmthZ2F3YS5qcCIsImthbm9uamkua2FnYXdh'@;
put 'LmpwIiwia290b2hpcmEua2FnYXdhLmpwIiwibWFubm8ua2FnYXdhLmpwIiwibWFydWdhbWUua2FnYXdhLmpwIiwibWl0b3lvLmthZ2F3YS5qcCIsIm5hb3NoaW1hLmthZ2F3YS5qcCIsInNhbnVraS5rYWdhd2EuanAiLCJ0YWRvdHN1LmthZ2F3YS5qcCIsInRha2FtYXRzdS5rYWdhd2EuanAi'@;
put 'LCJ0b25vc2hvLmthZ2F3YS5qcCIsInVjaGlub21pLmthZ2F3YS5qcCIsInV0YXp1LmthZ2F3YS5qcCIsInplbnRzdWppLmthZ2F3YS5qcCIsImFrdW5lLmthZ29zaGltYS5qcCIsImFtYW1pLmthZ29zaGltYS5qcCIsImhpb2tpLmthZ29zaGltYS5qcCIsImlzYS5rYWdvc2hpbWEuanAiLCJp'@;
put 'c2VuLmthZ29zaGltYS5qcCIsIml6dW1pLmthZ29zaGltYS5qcCIsImthZ29zaGltYS5rYWdvc2hpbWEuanAiLCJrYW5veWEua2Fnb3NoaW1hLmpwIiwia2F3YW5hYmUua2Fnb3NoaW1hLmpwIiwia2lua28ua2Fnb3NoaW1hLmpwIiwia291eWFtYS5rYWdvc2hpbWEuanAiLCJtYWt1cmF6YWtp'@;
put 'LmthZ29zaGltYS5qcCIsIm1hdHN1bW90by5rYWdvc2hpbWEuanAiLCJtaW5hbWl0YW5lLmthZ29zaGltYS5qcCIsIm5ha2F0YW5lLmthZ29zaGltYS5qcCIsIm5pc2hpbm9vbW90ZS5rYWdvc2hpbWEuanAiLCJzYXRzdW1hc2VuZGFpLmthZ29zaGltYS5qcCIsInNvby5rYWdvc2hpbWEuanAi'@;
put 'LCJ0YXJ1bWl6dS5rYWdvc2hpbWEuanAiLCJ5dXN1aS5rYWdvc2hpbWEuanAiLCJhaWthd2Eua2FuYWdhd2EuanAiLCJhdHN1Z2kua2FuYWdhd2EuanAiLCJheWFzZS5rYW5hZ2F3YS5qcCIsImNoaWdhc2FraS5rYW5hZ2F3YS5qcCIsImViaW5hLmthbmFnYXdhLmpwIiwiZnVqaXNhd2Eua2Fu'@;
put 'YWdhd2EuanAiLCJoYWRhbm8ua2FuYWdhd2EuanAiLCJoYWtvbmUua2FuYWdhd2EuanAiLCJoaXJhdHN1a2Eua2FuYWdhd2EuanAiLCJpc2VoYXJhLmthbmFnYXdhLmpwIiwia2Fpc2VpLmthbmFnYXdhLmpwIiwia2FtYWt1cmEua2FuYWdhd2EuanAiLCJraXlva2F3YS5rYW5hZ2F3YS5qcCIs'@;
put 'Im1hdHN1ZGEua2FuYWdhd2EuanAiLCJtaW5hbWlhc2hpZ2FyYS5rYW5hZ2F3YS5qcCIsIm1pdXJhLmthbmFnYXdhLmpwIiwibmFrYWkua2FuYWdhd2EuanAiLCJuaW5vbWl5YS5rYW5hZ2F3YS5qcCIsIm9kYXdhcmEua2FuYWdhd2EuanAiLCJvaS5rYW5hZ2F3YS5qcCIsIm9pc28ua2FuYWdh'@;
put 'd2EuanAiLCJzYWdhbWloYXJhLmthbmFnYXdhLmpwIiwic2FtdWthd2Eua2FuYWdhd2EuanAiLCJ0c3VrdWkua2FuYWdhd2EuanAiLCJ5YW1ha2l0YS5rYW5hZ2F3YS5qcCIsInlhbWF0by5rYW5hZ2F3YS5qcCIsInlva29zdWthLmthbmFnYXdhLmpwIiwieXVnYXdhcmEua2FuYWdhd2EuanAi'@;
put 'LCJ6YW1hLmthbmFnYXdhLmpwIiwienVzaGkua2FuYWdhd2EuanAiLCJha2kua29jaGkuanAiLCJnZWlzZWkua29jaGkuanAiLCJoaWRha2Eua29jaGkuanAiLCJoaWdhc2hpdHN1bm8ua29jaGkuanAiLCJpbm8ua29jaGkuanAiLCJrYWdhbWkua29jaGkuanAiLCJrYW1pLmtvY2hpLmpwIiwi'@;
put 'a2l0YWdhd2Eua29jaGkuanAiLCJrb2NoaS5rb2NoaS5qcCIsIm1paGFyYS5rb2NoaS5qcCIsIm1vdG95YW1hLmtvY2hpLmpwIiwibXVyb3RvLmtvY2hpLmpwIiwibmFoYXJpLmtvY2hpLmpwIiwibmFrYW11cmEua29jaGkuanAiLCJuYW5rb2t1LmtvY2hpLmpwIiwibmlzaGl0b3NhLmtvY2hp'@;
put 'LmpwIiwibml5b2RvZ2F3YS5rb2NoaS5qcCIsIm9jaGkua29jaGkuanAiLCJva2F3YS5rb2NoaS5qcCIsIm90b3lvLmtvY2hpLmpwIiwib3RzdWtpLmtvY2hpLmpwIiwic2FrYXdhLmtvY2hpLmpwIiwic3VrdW1vLmtvY2hpLmpwIiwic3VzYWtpLmtvY2hpLmpwIiwidG9zYS5rb2NoaS5qcCIs'@;
put 'InRvc2FzaGltaXp1LmtvY2hpLmpwIiwidG95by5rb2NoaS5qcCIsInRzdW5vLmtvY2hpLmpwIiwidW1hamkua29jaGkuanAiLCJ5YXN1ZGEua29jaGkuanAiLCJ5dXN1aGFyYS5rb2NoaS5qcCIsImFtYWt1c2Eua3VtYW1vdG8uanAiLCJhcmFvLmt1bWFtb3RvLmpwIiwiYXNvLmt1bWFtb3Rv'@;
put 'LmpwIiwiY2hveW8ua3VtYW1vdG8uanAiLCJneW9rdXRvLmt1bWFtb3RvLmpwIiwia2FtaWFtYWt1c2Eua3VtYW1vdG8uanAiLCJraWt1Y2hpLmt1bWFtb3RvLmpwIiwia3VtYW1vdG8ua3VtYW1vdG8uanAiLCJtYXNoaWtpLmt1bWFtb3RvLmpwIiwibWlmdW5lLmt1bWFtb3RvLmpwIiwibWlu'@;
put 'YW1hdGEua3VtYW1vdG8uanAiLCJtaW5hbWlvZ3VuaS5rdW1hbW90by5qcCIsIm5hZ2FzdS5rdW1hbW90by5qcCIsIm5pc2hpaGFyYS5rdW1hbW90by5qcCIsIm9ndW5pLmt1bWFtb3RvLmpwIiwib3p1Lmt1bWFtb3RvLmpwIiwic3Vtb3RvLmt1bWFtb3RvLmpwIiwidGFrYW1vcmkua3VtYW1v'@;
put 'dG8uanAiLCJ1a2kua3VtYW1vdG8uanAiLCJ1dG8ua3VtYW1vdG8uanAiLCJ5YW1hZ2Eua3VtYW1vdG8uanAiLCJ5YW1hdG8ua3VtYW1vdG8uanAiLCJ5YXRzdXNoaXJvLmt1bWFtb3RvLmpwIiwiYXlhYmUua3lvdG8uanAiLCJmdWt1Y2hpeWFtYS5reW90by5qcCIsImhpZ2FzaGl5YW1hLmt5'@;
put 'b3RvLmpwIiwiaWRlLmt5b3RvLmpwIiwiaW5lLmt5b3RvLmpwIiwiam95by5reW90by5qcCIsImthbWVva2Eua3lvdG8uanAiLCJrYW1vLmt5b3RvLmpwIiwia2l0YS5reW90by5qcCIsImtpenUua3lvdG8uanAiLCJrdW1peWFtYS5reW90by5qcCIsImt5b3RhbWJhLmt5b3RvLmpwIiwia3lv'@;
put 'dGFuYWJlLmt5b3RvLmpwIiwia3lvdGFuZ28ua3lvdG8uanAiLCJtYWl6dXJ1Lmt5b3RvLmpwIiwibWluYW1pLmt5b3RvLmpwIiwibWluYW1peWFtYXNoaXJvLmt5b3RvLmpwIiwibWl5YXp1Lmt5b3RvLmpwIiwibXVrby5reW90by5qcCIsIm5hZ2Fva2FreW8ua3lvdG8uanAiLCJuYWthZ3lv'@;
put 'Lmt5b3RvLmpwIiwibmFudGFuLmt5b3RvLmpwIiwib3lhbWF6YWtpLmt5b3RvLmpwIiwic2FreW8ua3lvdG8uanAiLCJzZWlrYS5reW90by5qcCIsInRhbmFiZS5reW90by5qcCIsInVqaS5reW90by5qcCIsInVqaXRhd2FyYS5reW90by5qcCIsIndhenVrYS5reW90by5qcCIsInlhbWFzaGlu'@;
put 'YS5reW90by5qcCIsInlhd2F0YS5reW90by5qcCIsImFzYWhpLm1pZS5qcCIsImluYWJlLm1pZS5qcCIsImlzZS5taWUuanAiLCJrYW1leWFtYS5taWUuanAiLCJrYXdhZ29lLm1pZS5qcCIsImtpaG8ubWllLmpwIiwia2lzb3Nha2kubWllLmpwIiwia2l3YS5taWUuanAiLCJrb21vbm8ubWll'@;
put 'LmpwIiwia3VtYW5vLm1pZS5qcCIsImt1d2FuYS5taWUuanAiLCJtYXRzdXNha2EubWllLmpwIiwibWVpd2EubWllLmpwIiwibWloYW1hLm1pZS5qcCIsIm1pbmFtaWlzZS5taWUuanAiLCJtaXN1Z2kubWllLmpwIiwibWl5YW1hLm1pZS5qcCIsIm5hYmFyaS5taWUuanAiLCJzaGltYS5taWUu'@;
put 'anAiLCJzdXp1a2EubWllLmpwIiwidGFkby5taWUuanAiLCJ0YWlraS5taWUuanAiLCJ0YWtpLm1pZS5qcCIsInRhbWFraS5taWUuanAiLCJ0b2JhLm1pZS5qcCIsInRzdS5taWUuanAiLCJ1ZG9uby5taWUuanAiLCJ1cmVzaGluby5taWUuanAiLCJ3YXRhcmFpLm1pZS5qcCIsInlva2thaWNo'@;
put 'aS5taWUuanAiLCJmdXJ1a2F3YS5taXlhZ2kuanAiLCJoaWdhc2hpbWF0c3VzaGltYS5taXlhZ2kuanAiLCJpc2hpbm9tYWtpLm1peWFnaS5qcCIsIml3YW51bWEubWl5YWdpLmpwIiwia2FrdWRhLm1peWFnaS5qcCIsImthbWkubWl5YWdpLmpwIiwia2F3YXNha2kubWl5YWdpLmpwIiwibWFy'@;
put 'dW1vcmkubWl5YWdpLmpwIiwibWF0c3VzaGltYS5taXlhZ2kuanAiLCJtaW5hbWlzYW5yaWt1Lm1peWFnaS5qcCIsIm1pc2F0by5taXlhZ2kuanAiLCJtdXJhdGEubWl5YWdpLmpwIiwibmF0b3JpLm1peWFnaS5qcCIsIm9nYXdhcmEubWl5YWdpLmpwIiwib2hpcmEubWl5YWdpLmpwIiwib25h'@;
put 'Z2F3YS5taXlhZ2kuanAiLCJvc2FraS5taXlhZ2kuanAiLCJyaWZ1Lm1peWFnaS5qcCIsInNlbWluZS5taXlhZ2kuanAiLCJzaGliYXRhLm1peWFnaS5qcCIsInNoaWNoaWthc2h1a3UubWl5YWdpLmpwIiwic2hpa2FtYS5taXlhZ2kuanAiLCJzaGlvZ2FtYS5taXlhZ2kuanAiLCJzaGlyb2lz'@;
put 'aGkubWl5YWdpLmpwIiwidGFnYWpvLm1peWFnaS5qcCIsInRhaXdhLm1peWFnaS5qcCIsInRvbWUubWl5YWdpLmpwIiwidG9taXlhLm1peWFnaS5qcCIsIndha3V5YS5taXlhZ2kuanAiLCJ3YXRhcmkubWl5YWdpLmpwIiwieWFtYW1vdG8ubWl5YWdpLmpwIiwiemFvLm1peWFnaS5qcCIsImF5'@;
put 'YS5taXlhemFraS5qcCIsImViaW5vLm1peWF6YWtpLmpwIiwiZ29rYXNlLm1peWF6YWtpLmpwIiwiaHl1Z2EubWl5YXpha2kuanAiLCJrYWRvZ2F3YS5taXlhemFraS5qcCIsImthd2FtaW5hbWkubWl5YXpha2kuanAiLCJraWpvLm1peWF6YWtpLmpwIiwia2l0YWdhd2EubWl5YXpha2kuanAi'@;
put 'LCJraXRha2F0YS5taXlhemFraS5qcCIsImtpdGF1cmEubWl5YXpha2kuanAiLCJrb2JheWFzaGkubWl5YXpha2kuanAiLCJrdW5pdG9taS5taXlhemFraS5qcCIsImt1c2hpbWEubWl5YXpha2kuanAiLCJtaW1hdGEubWl5YXpha2kuanAiLCJtaXlha29ub2pvLm1peWF6YWtpLmpwIiwibWl5'@;
put 'YXpha2kubWl5YXpha2kuanAiLCJtb3JvdHN1a2EubWl5YXpha2kuanAiLCJuaWNoaW5hbi5taXlhemFraS5qcCIsIm5pc2hpbWVyYS5taXlhemFraS5qcCIsIm5vYmVva2EubWl5YXpha2kuanAiLCJzYWl0by5taXlhemFraS5qcCIsInNoaWliYS5taXlhemFraS5qcCIsInNoaW50b21pLm1p'@;
put 'eWF6YWtpLmpwIiwidGFrYWhhcnUubWl5YXpha2kuanAiLCJ0YWthbmFiZS5taXlhemFraS5qcCIsInRha2F6YWtpLm1peWF6YWtpLmpwIiwidHN1bm8ubWl5YXpha2kuanAiLCJhY2hpLm5hZ2Fuby5qcCIsImFnZW1hdHN1Lm5hZ2Fuby5qcCIsImFuYW4ubmFnYW5vLmpwIiwiYW9raS5uYWdh'@;
put 'bm8uanAiLCJhc2FoaS5uYWdhbm8uanAiLCJhenVtaW5vLm5hZ2Fuby5qcCIsImNoaWt1aG9rdS5uYWdhbm8uanAiLCJjaGlrdW1hLm5hZ2Fuby5qcCIsImNoaW5vLm5hZ2Fuby5qcCIsImZ1amltaS5uYWdhbm8uanAiLCJoYWt1YmEubmFnYW5vLmpwIiwiaGFyYS5uYWdhbm8uanAiLCJoaXJh'@;
put 'eWEubmFnYW5vLmpwIiwiaWlkYS5uYWdhbm8uanAiLCJpaWppbWEubmFnYW5vLmpwIiwiaWl5YW1hLm5hZ2Fuby5qcCIsImlpenVuYS5uYWdhbm8uanAiLCJpa2VkYS5uYWdhbm8uanAiLCJpa3VzYWthLm5hZ2Fuby5qcCIsImluYS5uYWdhbm8uanAiLCJrYXJ1aXphd2EubmFnYW5vLmpwIiwi'@;
put 'a2F3YWthbWkubmFnYW5vLmpwIiwia2lzby5uYWdhbm8uanAiLCJraXNvZnVrdXNoaW1hLm5hZ2Fuby5qcCIsImtpdGFhaWtpLm5hZ2Fuby5qcCIsImtvbWFnYW5lLm5hZ2Fuby5qcCIsImtvbW9yby5uYWdhbm8uanAiLCJtYXRzdWthd2EubmFnYW5vLmpwIiwibWF0c3Vtb3RvLm5hZ2Fuby5q'@;
put 'cCIsIm1pYXNhLm5hZ2Fuby5qcCIsIm1pbmFtaWFpa2kubmFnYW5vLmpwIiwibWluYW1pbWFraS5uYWdhbm8uanAiLCJtaW5hbWltaW5vd2EubmFnYW5vLmpwIiwibWlub3dhLm5hZ2Fuby5qcCIsIm1peWFkYS5uYWdhbm8uanAiLCJtaXlvdGEubmFnYW5vLmpwIiwibW9jaGl6dWtpLm5hZ2Fu'@;
put 'by5qcCIsIm5hZ2Fuby5uYWdhbm8uanAiLCJuYWdhd2EubmFnYW5vLmpwIiwibmFnaXNvLm5hZ2Fuby5qcCIsIm5ha2FnYXdhLm5hZ2Fuby5qcCIsIm5ha2Fuby5uYWdhbm8uanAiLCJub3phd2FvbnNlbi5uYWdhbm8uanAiLCJvYnVzZS5uYWdhbm8uanAiLCJvZ2F3YS5uYWdhbm8uanAiLCJv'@;
put 'a2F5YS5uYWdhbm8uanAiLCJvbWFjaGkubmFnYW5vLmpwIiwib21pLm5hZ2Fuby5qcCIsIm9va3V3YS5uYWdhbm8uanAiLCJvb3NoaWthLm5hZ2Fuby5qcCIsIm90YWtpLm5hZ2Fuby5qcCIsIm90YXJpLm5hZ2Fuby5qcCIsInNha2FlLm5hZ2Fuby5qcCIsInNha2FraS5uYWdhbm8uanAiLCJz'@;
put 'YWt1Lm5hZ2Fuby5qcCIsInNha3Voby5uYWdhbm8uanAiLCJzaGltb3N1d2EubmFnYW5vLmpwIiwic2hpbmFub21hY2hpLm5hZ2Fuby5qcCIsInNoaW9qaXJpLm5hZ2Fuby5qcCIsInN1d2EubmFnYW5vLmpwIiwic3V6YWthLm5hZ2Fuby5qcCIsInRha2FnaS5uYWdhbm8uanAiLCJ0YWthbW9y'@;
put 'aS5uYWdhbm8uanAiLCJ0YWtheWFtYS5uYWdhbm8uanAiLCJ0YXRlc2hpbmEubmFnYW5vLmpwIiwidGF0c3Vuby5uYWdhbm8uanAiLCJ0b2dha3VzaGkubmFnYW5vLmpwIiwidG9ndXJhLm5hZ2Fuby5qcCIsInRvbWkubmFnYW5vLmpwIiwidWVkYS5uYWdhbm8uanAiLCJ3YWRhLm5hZ2Fuby5q'@;
put 'cCIsInlhbWFnYXRhLm5hZ2Fuby5qcCIsInlhbWFub3VjaGkubmFnYW5vLmpwIiwieWFzYWthLm5hZ2Fuby5qcCIsInlhc3Vva2EubmFnYW5vLmpwIiwiY2hpaml3YS5uYWdhc2FraS5qcCIsImZ1dHN1Lm5hZ2FzYWtpLmpwIiwiZ290by5uYWdhc2FraS5qcCIsImhhc2FtaS5uYWdhc2FraS5q'@;
put 'cCIsImhpcmFkby5uYWdhc2FraS5qcCIsImlraS5uYWdhc2FraS5qcCIsImlzYWhheWEubmFnYXNha2kuanAiLCJrYXdhdGFuYS5uYWdhc2FraS5qcCIsImt1Y2hpbm90c3UubmFnYXNha2kuanAiLCJtYXRzdXVyYS5uYWdhc2FraS5qcCIsIm5hZ2FzYWtpLm5hZ2FzYWtpLmpwIiwib2JhbWEu'@;
put 'bmFnYXNha2kuanAiLCJvbXVyYS5uYWdhc2FraS5qcCIsIm9zZXRvLm5hZ2FzYWtpLmpwIiwic2Fpa2FpLm5hZ2FzYWtpLmpwIiwic2FzZWJvLm5hZ2FzYWtpLmpwIiwic2VpaGkubmFnYXNha2kuanAiLCJzaGltYWJhcmEubmFnYXNha2kuanAiLCJzaGlua2FtaWdvdG8ubmFnYXNha2kuanAi'@;
put 'LCJ0b2dpdHN1Lm5hZ2FzYWtpLmpwIiwidHN1c2hpbWEubmFnYXNha2kuanAiLCJ1bnplbi5uYWdhc2FraS5qcCIsImFuZG8ubmFyYS5qcCIsImdvc2UubmFyYS5qcCIsImhlZ3VyaS5uYXJhLmpwIiwiaGlnYXNoaXlvc2hpbm8ubmFyYS5qcCIsImlrYXJ1Z2EubmFyYS5qcCIsImlrb21hLm5h'@;
put 'cmEuanAiLCJrYW1pa2l0YXlhbWEubmFyYS5qcCIsImthbm1ha2kubmFyYS5qcCIsImthc2hpYmEubmFyYS5qcCIsImthc2hpaGFyYS5uYXJhLmpwIiwia2F0c3VyYWdpLm5hcmEuanAiLCJrYXdhaS5uYXJhLmpwIiwia2F3YWthbWkubmFyYS5qcCIsImthd2FuaXNoaS5uYXJhLmpwIiwia29y'@;
put 'eW8ubmFyYS5qcCIsImt1cm90YWtpLm5hcmEuanAiLCJtaXRzdWUubmFyYS5qcCIsIm1peWFrZS5uYXJhLmpwIiwibmFyYS5uYXJhLmpwIiwibm9zZWdhd2EubmFyYS5qcCIsIm9qaS5uYXJhLmpwIiwib3VkYS5uYXJhLmpwIiwib3lvZG8ubmFyYS5qcCIsInNha3VyYWkubmFyYS5qcCIsInNh'@;
put 'bmdvLm5hcmEuanAiLCJzaGltb2ljaGkubmFyYS5qcCIsInNoaW1va2l0YXlhbWEubmFyYS5qcCIsInNoaW5qby5uYXJhLmpwIiwic29uaS5uYXJhLmpwIiwidGFrYXRvcmkubmFyYS5qcCIsInRhd2FyYW1vdG8ubmFyYS5qcCIsInRlbmthd2EubmFyYS5qcCIsInRlbnJpLm5hcmEuanAiLCJ1'@;
put 'ZGEubmFyYS5qcCIsInlhbWF0b2tvcml5YW1hLm5hcmEuanAiLCJ5YW1hdG90YWthZGEubmFyYS5qcCIsInlhbWF6b2UubmFyYS5qcCIsInlvc2hpbm8ubmFyYS5qcCIsImFnYS5uaWlnYXRhLmpwIiwiYWdhbm8ubmlpZ2F0YS5qcCIsImdvc2VuLm5paWdhdGEuanAiLCJpdG9pZ2F3YS5uaWln'@;
put 'YXRhLmpwIiwiaXp1bW96YWtpLm5paWdhdGEuanAiLCJqb2V0c3UubmlpZ2F0YS5qcCIsImthbW8ubmlpZ2F0YS5qcCIsImthcml3YS5uaWlnYXRhLmpwIiwia2FzaGl3YXpha2kubmlpZ2F0YS5qcCIsIm1pbmFtaXVvbnVtYS5uaWlnYXRhLmpwIiwibWl0c3VrZS5uaWlnYXRhLmpwIiwibXVp'@;
put 'a2EubmlpZ2F0YS5qcCIsIm11cmFrYW1pLm5paWdhdGEuanAiLCJteW9rby5uaWlnYXRhLmpwIiwibmFnYW9rYS5uaWlnYXRhLmpwIiwibmlpZ2F0YS5uaWlnYXRhLmpwIiwib2ppeWEubmlpZ2F0YS5qcCIsIm9taS5uaWlnYXRhLmpwIiwic2Fkby5uaWlnYXRhLmpwIiwic2Fuam8ubmlpZ2F0'@;
put 'YS5qcCIsInNlaXJvLm5paWdhdGEuanAiLCJzZWlyb3UubmlpZ2F0YS5qcCIsInNla2lrYXdhLm5paWdhdGEuanAiLCJzaGliYXRhLm5paWdhdGEuanAiLCJ0YWdhbWkubmlpZ2F0YS5qcCIsInRhaW5haS5uaWlnYXRhLmpwIiwidG9jaGlvLm5paWdhdGEuanAiLCJ0b2thbWFjaGkubmlpZ2F0'@;
put 'YS5qcCIsInRzdWJhbWUubmlpZ2F0YS5qcCIsInRzdW5hbi5uaWlnYXRhLmpwIiwidW9udW1hLm5paWdhdGEuanAiLCJ5YWhpa28ubmlpZ2F0YS5qcCIsInlvaXRhLm5paWdhdGEuanAiLCJ5dXphd2EubmlpZ2F0YS5qcCIsImJlcHB1Lm9pdGEuanAiLCJidW5nb29uby5vaXRhLmpwIiwiYnVu'@;
put 'Z290YWthZGEub2l0YS5qcCIsImhhc2FtYS5vaXRhLmpwIiwiaGlqaS5vaXRhLmpwIiwiaGltZXNoaW1hLm9pdGEuanAiLCJoaXRhLm9pdGEuanAiLCJrYW1pdHN1ZS5vaXRhLmpwIiwia29rb25vZS5vaXRhLmpwIiwia3VqdS5vaXRhLmpwIiwia3VuaXNha2kub2l0YS5qcCIsImt1c3Uub2l0'@;
put 'YS5qcCIsIm9pdGEub2l0YS5qcCIsInNhaWtpLm9pdGEuanAiLCJ0YWtldGEub2l0YS5qcCIsInRzdWt1bWkub2l0YS5qcCIsInVzYS5vaXRhLmpwIiwidXN1a2kub2l0YS5qcCIsInl1ZnUub2l0YS5qcCIsImFrYWl3YS5va2F5YW1hLmpwIiwiYXNha3VjaGkub2theWFtYS5qcCIsImJpemVu'@;
put 'Lm9rYXlhbWEuanAiLCJoYXlhc2hpbWEub2theWFtYS5qcCIsImliYXJhLm9rYXlhbWEuanAiLCJrYWdhbWluby5va2F5YW1hLmpwIiwia2FzYW9rYS5va2F5YW1hLmpwIiwia2liaWNodW8ub2theWFtYS5qcCIsImt1bWVuYW4ub2theWFtYS5qcCIsImt1cmFzaGlraS5va2F5YW1hLmpwIiwi'@;
put 'bWFuaXdhLm9rYXlhbWEuanAiLCJtaXNha2kub2theWFtYS5qcCIsIm5hZ2kub2theWFtYS5qcCIsIm5paW1pLm9rYXlhbWEuanAiLCJuaXNoaWF3YWt1cmEub2theWFtYS5qcCIsIm9rYXlhbWEub2theWFtYS5qcCIsInNhdG9zaG8ub2theWFtYS5qcCIsInNldG91Y2hpLm9rYXlhbWEuanAi'@;
put 'LCJzaGluam8ub2theWFtYS5qcCIsInNob28ub2theWFtYS5qcCIsInNvamEub2theWFtYS5qcCIsInRha2FoYXNoaS5va2F5YW1hLmpwIiwidGFtYW5vLm9rYXlhbWEuanAiLCJ0c3V5YW1hLm9rYXlhbWEuanAiLCJ3YWtlLm9rYXlhbWEuanAiLCJ5YWthZ2Uub2theWFtYS5qcCIsImFndW5p'@;
put 'Lm9raW5hd2EuanAiLCJnaW5vd2FuLm9raW5hd2EuanAiLCJnaW5vemEub2tpbmF3YS5qcCIsImd1c2hpa2FtaS5va2luYXdhLmpwIiwiaGFlYmFydS5va2luYXdhLmpwIiwiaGlnYXNoaS5va2luYXdhLmpwIiwiaGlyYXJhLm9raW5hd2EuanAiLCJpaGV5YS5va2luYXdhLmpwIiwiaXNoaWdh'@;
put 'a2kub2tpbmF3YS5qcCIsImlzaGlrYXdhLm9raW5hd2EuanAiLCJpdG9tYW4ub2tpbmF3YS5qcCIsIml6ZW5hLm9raW5hd2EuanAiLCJrYWRlbmEub2tpbmF3YS5qcCIsImtpbi5va2luYXdhLmpwIiwia2l0YWRhaXRvLm9raW5hd2EuanAiLCJraXRhbmFrYWd1c3VrdS5va2luYXdhLmpwIiwi'@;
put 'a3VtZWppbWEub2tpbmF3YS5qcCIsImt1bmlnYW1pLm9raW5hd2EuanAiLCJtaW5hbWlkYWl0by5va2luYXdhLmpwIiwibW90b2J1Lm9raW5hd2EuanAiLCJuYWdvLm9raW5hd2EuanAiLCJuYWhhLm9raW5hd2EuanAiLCJuYWthZ3VzdWt1Lm9raW5hd2EuanAiLCJuYWtpamluLm9raW5hd2Eu'@;
put 'anAiLCJuYW5qby5va2luYXdhLmpwIiwibmlzaGloYXJhLm9raW5hd2EuanAiLCJvZ2ltaS5va2luYXdhLmpwIiwib2tpbmF3YS5va2luYXdhLmpwIiwib25uYS5va2luYXdhLmpwIiwic2hpbW9qaS5va2luYXdhLmpwIiwidGFrZXRvbWkub2tpbmF3YS5qcCIsInRhcmFtYS5va2luYXdhLmpw'@;
put 'IiwidG9rYXNoaWtpLm9raW5hd2EuanAiLCJ0b21pZ3VzdWt1Lm9raW5hd2EuanAiLCJ0b25ha2kub2tpbmF3YS5qcCIsInVyYXNvZS5va2luYXdhLmpwIiwidXJ1bWEub2tpbmF3YS5qcCIsInlhZXNlLm9raW5hd2EuanAiLCJ5b21pdGFuLm9raW5hd2EuanAiLCJ5b25hYmFydS5va2luYXdh'@;
put 'LmpwIiwieW9uYWd1bmkub2tpbmF3YS5qcCIsInphbWFtaS5va2luYXdhLmpwIiwiYWJlbm8ub3Nha2EuanAiLCJjaGloYXlhYWthc2FrYS5vc2FrYS5qcCIsImNodW8ub3Nha2EuanAiLCJkYWl0by5vc2FrYS5qcCIsImZ1amlpZGVyYS5vc2FrYS5qcCIsImhhYmlraW5vLm9zYWthLmpwIiwi'@;
put 'aGFubmFuLm9zYWthLmpwIiwiaGlnYXNoaW9zYWthLm9zYWthLmpwIiwiaGlnYXNoaXN1bWl5b3NoaS5vc2FrYS5qcCIsImhpZ2FzaGl5b2RvZ2F3YS5vc2FrYS5qcCIsImhpcmFrYXRhLm9zYWthLmpwIiwiaWJhcmFraS5vc2FrYS5qcCIsImlrZWRhLm9zYWthLmpwIiwiaXp1bWkub3Nha2Eu'@;
put 'anAiLCJpenVtaW90c3Uub3Nha2EuanAiLCJpenVtaXNhbm8ub3Nha2EuanAiLCJrYWRvbWEub3Nha2EuanAiLCJrYWl6dWthLm9zYWthLmpwIiwia2FuYW4ub3Nha2EuanAiLCJrYXNoaXdhcmEub3Nha2EuanAiLCJrYXRhbm8ub3Nha2EuanAiLCJrYXdhY2hpbmFnYW5vLm9zYWthLmpwIiwi'@;
put 'a2lzaGl3YWRhLm9zYWthLmpwIiwia2l0YS5vc2FrYS5qcCIsImt1bWF0b3JpLm9zYWthLmpwIiwibWF0c3ViYXJhLm9zYWthLmpwIiwibWluYXRvLm9zYWthLmpwIiwibWlub2gub3Nha2EuanAiLCJtaXNha2kub3Nha2EuanAiLCJtb3JpZ3VjaGkub3Nha2EuanAiLCJuZXlhZ2F3YS5vc2Fr'@;
put 'YS5qcCIsIm5pc2hpLm9zYWthLmpwIiwibm9zZS5vc2FrYS5qcCIsIm9zYWthc2F5YW1hLm9zYWthLmpwIiwic2FrYWkub3Nha2EuanAiLCJzYXlhbWEub3Nha2EuanAiLCJzZW5uYW4ub3Nha2EuanAiLCJzZXR0c3Uub3Nha2EuanAiLCJzaGlqb25hd2F0ZS5vc2FrYS5qcCIsInNoaW1hbW90'@;
put 'by5vc2FrYS5qcCIsInN1aXRhLm9zYWthLmpwIiwidGFkYW9rYS5vc2FrYS5qcCIsInRhaXNoaS5vc2FrYS5qcCIsInRhamlyaS5vc2FrYS5qcCIsInRha2Fpc2hpLm9zYWthLmpwIiwidGFrYXRzdWtpLm9zYWthLmpwIiwidG9uZGFiYXlhc2hpLm9zYWthLmpwIiwidG95b25ha2Eub3Nha2Eu'@;
put 'anAiLCJ0b3lvbm8ub3Nha2EuanAiLCJ5YW8ub3Nha2EuanAiLCJhcmlha2Uuc2FnYS5qcCIsImFyaXRhLnNhZ2EuanAiLCJmdWt1ZG9taS5zYWdhLmpwIiwiZ2Vua2FpLnNhZ2EuanAiLCJoYW1hdGFtYS5zYWdhLmpwIiwiaGl6ZW4uc2FnYS5qcCIsImltYXJpLnNhZ2EuanAiLCJrYW1pbWlu'@;
put 'ZS5zYWdhLmpwIiwia2FuemFraS5zYWdhLmpwIiwia2FyYXRzdS5zYWdhLmpwIiwia2FzaGltYS5zYWdhLmpwIiwia2l0YWdhdGEuc2FnYS5qcCIsImtpdGFoYXRhLnNhZ2EuanAiLCJraXlhbWEuc2FnYS5qcCIsImtvdWhva3Uuc2FnYS5qcCIsImt5dXJhZ2kuc2FnYS5qcCIsIm5pc2hpYXJp'@;
put 'dGEuc2FnYS5qcCIsIm9naS5zYWdhLmpwIiwib21hY2hpLnNhZ2EuanAiLCJvdWNoaS5zYWdhLmpwIiwic2FnYS5zYWdhLmpwIiwic2hpcm9pc2hpLnNhZ2EuanAiLCJ0YWt1LnNhZ2EuanAiLCJ0YXJhLnNhZ2EuanAiLCJ0b3N1LnNhZ2EuanAiLCJ5b3NoaW5vZ2FyaS5zYWdhLmpwIiwiYXJh'@;
put 'a2F3YS5zYWl0YW1hLmpwIiwiYXNha2Euc2FpdGFtYS5qcCIsImNoaWNoaWJ1LnNhaXRhbWEuanAiLCJmdWppbWkuc2FpdGFtYS5qcCIsImZ1amltaW5vLnNhaXRhbWEuanAiLCJmdWtheWEuc2FpdGFtYS5qcCIsImhhbm5vLnNhaXRhbWEuanAiLCJoYW55dS5zYWl0YW1hLmpwIiwiaGFzdWRh'@;
put 'LnNhaXRhbWEuanAiLCJoYXRvZ2F5YS5zYWl0YW1hLmpwIiwiaGF0b3lhbWEuc2FpdGFtYS5qcCIsImhpZGFrYS5zYWl0YW1hLmpwIiwiaGlnYXNoaWNoaWNoaWJ1LnNhaXRhbWEuanAiLCJoaWdhc2hpbWF0c3V5YW1hLnNhaXRhbWEuanAiLCJob25qby5zYWl0YW1hLmpwIiwiaW5hLnNhaXRh'@;
put 'bWEuanAiLCJpcnVtYS5zYWl0YW1hLmpwIiwiaXdhdHN1a2kuc2FpdGFtYS5qcCIsImthbWlpenVtaS5zYWl0YW1hLmpwIiwia2FtaWthd2Euc2FpdGFtYS5qcCIsImthbWlzYXRvLnNhaXRhbWEuanAiLCJrYXN1a2FiZS5zYWl0YW1hLmpwIiwia2F3YWdvZS5zYWl0YW1hLmpwIiwia2F3YWd1'@;
put 'Y2hpLnNhaXRhbWEuanAiLCJrYXdhamltYS5zYWl0YW1hLmpwIiwia2F6by5zYWl0YW1hLmpwIiwia2l0YW1vdG8uc2FpdGFtYS5qcCIsImtvc2hpZ2F5YS5zYWl0YW1hLmpwIiwia291bm9zdS5zYWl0YW1hLmpwIiwia3VraS5zYWl0YW1hLmpwIiwia3VtYWdheWEuc2FpdGFtYS5qcCIsIm1h'@;
put 'dHN1YnVzaGkuc2FpdGFtYS5qcCIsIm1pbmFuby5zYWl0YW1hLmpwIiwibWlzYXRvLnNhaXRhbWEuanAiLCJtaXlhc2hpcm8uc2FpdGFtYS5qcCIsIm1peW9zaGkuc2FpdGFtYS5qcCIsIm1vcm95YW1hLnNhaXRhbWEuanAiLCJuYWdhdG9yby5zYWl0YW1hLmpwIiwibmFtZWdhd2Euc2FpdGFt'@;
put 'YS5qcCIsIm5paXphLnNhaXRhbWEuanAiLCJvZ2Fuby5zYWl0YW1hLmpwIiwib2dhd2Euc2FpdGFtYS5qcCIsIm9nb3NlLnNhaXRhbWEuanAiLCJva2VnYXdhLnNhaXRhbWEuanAiLCJvbWl5YS5zYWl0YW1hLmpwIiwib3Rha2kuc2FpdGFtYS5qcCIsInJhbnphbi5zYWl0YW1hLmpwIiwicnlv'@;
put 'a2FtaS5zYWl0YW1hLmpwIiwic2FpdGFtYS5zYWl0YW1hLmpwIiwic2FrYWRvLnNhaXRhbWEuanAiLCJzYXR0ZS5zYWl0YW1hLmpwIiwic2F5YW1hLnNhaXRhbWEuanAiLCJzaGlraS5zYWl0YW1hLmpwIiwic2hpcmFva2Euc2FpdGFtYS5qcCIsInNva2Euc2FpdGFtYS5qcCIsInN1Z2l0by5z'@;
put 'YWl0YW1hLmpwIiwidG9kYS5zYWl0YW1hLmpwIiwidG9raWdhd2Euc2FpdGFtYS5qcCIsInRva29yb3phd2Euc2FpdGFtYS5qcCIsInRzdXJ1Z2FzaGltYS5zYWl0YW1hLmpwIiwidXJhd2Euc2FpdGFtYS5qcCIsIndhcmFiaS5zYWl0YW1hLmpwIiwieWFzaGlvLnNhaXRhbWEuanAiLCJ5b2tv'@;
put 'emUuc2FpdGFtYS5qcCIsInlvbm8uc2FpdGFtYS5qcCIsInlvcmlpLnNhaXRhbWEuanAiLCJ5b3NoaWRhLnNhaXRhbWEuanAiLCJ5b3NoaWthd2Euc2FpdGFtYS5qcCIsInlvc2hpbWkuc2FpdGFtYS5qcCIsImFpc2hvLnNoaWdhLmpwIiwiZ2Ftby5zaGlnYS5qcCIsImhpZ2FzaGlvbWkuc2hp'@;
put 'Z2EuanAiLCJoaWtvbmUuc2hpZ2EuanAiLCJrb2thLnNoaWdhLmpwIiwia29uYW4uc2hpZ2EuanAiLCJrb3NlaS5zaGlnYS5qcCIsImtvdG8uc2hpZ2EuanAiLCJrdXNhdHN1LnNoaWdhLmpwIiwibWFpYmFyYS5zaGlnYS5qcCIsIm1vcml5YW1hLnNoaWdhLmpwIiwibmFnYWhhbWEuc2hpZ2Eu'@;
put 'anAiLCJuaXNoaWF6YWkuc2hpZ2EuanAiLCJub3RvZ2F3YS5zaGlnYS5qcCIsIm9taWhhY2hpbWFuLnNoaWdhLmpwIiwib3RzdS5zaGlnYS5qcCIsInJpdHRvLnNoaWdhLmpwIiwicnl1b2guc2hpZ2EuanAiLCJ0YWthc2hpbWEuc2hpZ2EuanAiLCJ0YWthdHN1a2kuc2hpZ2EuanAiLCJ0b3Jh'@;
put 'aGltZS5zaGlnYS5qcCIsInRveW9zYXRvLnNoaWdhLmpwIiwieWFzdS5zaGlnYS5qcCIsImFrYWdpLnNoaW1hbmUuanAiLCJhbWEuc2hpbWFuZS5qcCIsImdvdHN1LnNoaW1hbmUuanAiLCJoYW1hZGEuc2hpbWFuZS5qcCIsImhpZ2FzaGlpenVtby5zaGltYW5lLmpwIiwiaGlrYXdhLnNoaW1h'@;
put 'bmUuanAiLCJoaWtpbWkuc2hpbWFuZS5qcCIsIml6dW1vLnNoaW1hbmUuanAiLCJrYWtpbm9raS5zaGltYW5lLmpwIiwibWFzdWRhLnNoaW1hbmUuanAiLCJtYXRzdWUuc2hpbWFuZS5qcCIsIm1pc2F0by5zaGltYW5lLmpwIiwibmlzaGlub3NoaW1hLnNoaW1hbmUuanAiLCJvaGRhLnNoaW1h'@;
put 'bmUuanAiLCJva2lub3NoaW1hLnNoaW1hbmUuanAiLCJva3VpenVtby5zaGltYW5lLmpwIiwic2hpbWFuZS5zaGltYW5lLmpwIiwidGFtYXl1LnNoaW1hbmUuanAiLCJ0c3V3YW5vLnNoaW1hbmUuanAiLCJ1bm5hbi5zaGltYW5lLmpwIiwieWFrdW1vLnNoaW1hbmUuanAiLCJ5YXN1Z2kuc2hp'@;
put 'bWFuZS5qcCIsInlhdHN1a2Euc2hpbWFuZS5qcCIsImFyYWkuc2hpenVva2EuanAiLCJhdGFtaS5zaGl6dW9rYS5qcCIsImZ1amkuc2hpenVva2EuanAiLCJmdWppZWRhLnNoaXp1b2thLmpwIiwiZnVqaWthd2Euc2hpenVva2EuanAiLCJmdWppbm9taXlhLnNoaXp1b2thLmpwIiwiZnVrdXJv'@;
put 'aS5zaGl6dW9rYS5qcCIsImdvdGVtYmEuc2hpenVva2EuanAiLCJoYWliYXJhLnNoaXp1b2thLmpwIiwiaGFtYW1hdHN1LnNoaXp1b2thLmpwIiwiaGlnYXNoaWl6dS5zaGl6dW9rYS5qcCIsIml0by5zaGl6dW9rYS5qcCIsIml3YXRhLnNoaXp1b2thLmpwIiwiaXp1LnNoaXp1b2thLmpwIiwi'@;
put 'aXp1bm9rdW5pLnNoaXp1b2thLmpwIiwia2FrZWdhd2Euc2hpenVva2EuanAiLCJrYW5uYW1pLnNoaXp1b2thLmpwIiwia2F3YW5laG9uLnNoaXp1b2thLmpwIiwia2F3YXp1LnNoaXp1b2thLmpwIiwia2lrdWdhd2Euc2hpenVva2EuanAiLCJrb3NhaS5zaGl6dW9rYS5qcCIsIm1ha2lub2hh'@;
put 'cmEuc2hpenVva2EuanAiLCJtYXRzdXpha2kuc2hpenVva2EuanAiLCJtaW5hbWlpenUuc2hpenVva2EuanAiLCJtaXNoaW1hLnNoaXp1b2thLmpwIiwibW9yaW1hY2hpLnNoaXp1b2thLmpwIiwibmlzaGlpenUuc2hpenVva2EuanAiLCJudW1henUuc2hpenVva2EuanAiLCJvbWFlemFraS5z'@;
put 'aGl6dW9rYS5qcCIsInNoaW1hZGEuc2hpenVva2EuanAiLCJzaGltaXp1LnNoaXp1b2thLmpwIiwic2hpbW9kYS5zaGl6dW9rYS5qcCIsInNoaXp1b2thLnNoaXp1b2thLmpwIiwic3Vzb25vLnNoaXp1b2thLmpwIiwieWFpenUuc2hpenVva2EuanAiLCJ5b3NoaWRhLnNoaXp1b2thLmpwIiwi'@;
put 'YXNoaWthZ2EudG9jaGlnaS5qcCIsImJhdG8udG9jaGlnaS5qcCIsImhhZ2EudG9jaGlnaS5qcCIsImljaGlrYWkudG9jaGlnaS5qcCIsIml3YWZ1bmUudG9jaGlnaS5qcCIsImthbWlub2thd2EudG9jaGlnaS5qcCIsImthbnVtYS50b2NoaWdpLmpwIiwia2FyYXN1eWFtYS50b2NoaWdpLmpw'@;
put 'Iiwia3Vyb2lzby50b2NoaWdpLmpwIiwibWFzaGlrby50b2NoaWdpLmpwIiwibWlidS50b2NoaWdpLmpwIiwibW9rYS50b2NoaWdpLmpwIiwibW90ZWdpLnRvY2hpZ2kuanAiLCJuYXN1LnRvY2hpZ2kuanAiLCJuYXN1c2hpb2JhcmEudG9jaGlnaS5qcCIsIm5pa2tvLnRvY2hpZ2kuanAiLCJu'@;
put 'aXNoaWthdGEudG9jaGlnaS5qcCIsIm5vZ2kudG9jaGlnaS5qcCIsIm9oaXJhLnRvY2hpZ2kuanAiLCJvaHRhd2FyYS50b2NoaWdpLmpwIiwib3lhbWEudG9jaGlnaS5qcCIsInNha3VyYS50b2NoaWdpLmpwIiwic2Fuby50b2NoaWdpLmpwIiwic2hpbW90c3VrZS50b2NoaWdpLmpwIiwic2hp'@;
put 'b3lhLnRvY2hpZ2kuanAiLCJ0YWthbmV6YXdhLnRvY2hpZ2kuanAiLCJ0b2NoaWdpLnRvY2hpZ2kuanAiLCJ0c3VnYS50b2NoaWdpLmpwIiwidWppaWUudG9jaGlnaS5qcCIsInV0c3Vub21peWEudG9jaGlnaS5qcCIsInlhaXRhLnRvY2hpZ2kuanAiLCJhaXp1bWkudG9rdXNoaW1hLmpwIiwi'@;
put 'YW5hbi50b2t1c2hpbWEuanAiLCJpY2hpYmEudG9rdXNoaW1hLmpwIiwiaXRhbm8udG9rdXNoaW1hLmpwIiwia2FpbmFuLnRva3VzaGltYS5qcCIsImtvbWF0c3VzaGltYS50b2t1c2hpbWEuanAiLCJtYXRzdXNoaWdlLnRva3VzaGltYS5qcCIsIm1pbWEudG9rdXNoaW1hLmpwIiwibWluYW1p'@;
put 'LnRva3VzaGltYS5qcCIsIm1peW9zaGkudG9rdXNoaW1hLmpwIiwibXVnaS50b2t1c2hpbWEuanAiLCJuYWthZ2F3YS50b2t1c2hpbWEuanAiLCJuYXJ1dG8udG9rdXNoaW1hLmpwIiwic2FuYWdvY2hpLnRva3VzaGltYS5qcCIsInNoaXNoaWt1aS50b2t1c2hpbWEuanAiLCJ0b2t1c2hpbWEu'@;
put 'dG9rdXNoaW1hLmpwIiwid2FqaWtpLnRva3VzaGltYS5qcCIsImFkYWNoaS50b2t5by5qcCIsImFraXJ1bm8udG9reW8uanAiLCJha2lzaGltYS50b2t5by5qcCIsImFvZ2FzaGltYS50b2t5by5qcCIsImFyYWthd2EudG9reW8uanAiLCJidW5reW8udG9reW8uanAiLCJjaGl5b2RhLnRva3lv'@;
put 'LmpwIiwiY2hvZnUudG9reW8uanAiLCJjaHVvLnRva3lvLmpwIiwiZWRvZ2F3YS50b2t5by5qcCIsImZ1Y2h1LnRva3lvLmpwIiwiZnVzc2EudG9reW8uanAiLCJoYWNoaWpvLnRva3lvLmpwIiwiaGFjaGlvamkudG9reW8uanAiLCJoYW11cmEudG9reW8uanAiLCJoaWdhc2hpa3VydW1lLnRv'@;
put 'a3lvLmpwIiwiaGlnYXNoaW11cmF5YW1hLnRva3lvLmpwIiwiaGlnYXNoaXlhbWF0by50b2t5by5qcCIsImhpbm8udG9reW8uanAiLCJoaW5vZGUudG9reW8uanAiLCJoaW5vaGFyYS50b2t5by5qcCIsImluYWdpLnRva3lvLmpwIiwiaXRhYmFzaGkudG9reW8uanAiLCJrYXRzdXNoaWthLnRv'@;
put 'a3lvLmpwIiwia2l0YS50b2t5by5qcCIsImtpeW9zZS50b2t5by5qcCIsImtvZGFpcmEudG9reW8uanAiLCJrb2dhbmVpLnRva3lvLmpwIiwia29rdWJ1bmppLnRva3lvLmpwIiwia29tYWUudG9reW8uanAiLCJrb3RvLnRva3lvLmpwIiwia291enVzaGltYS50b2t5by5qcCIsImt1bml0YWNo'@;
put 'aS50b2t5by5qcCIsIm1hY2hpZGEudG9reW8uanAiLCJtZWd1cm8udG9reW8uanAiLCJtaW5hdG8udG9reW8uanAiLCJtaXRha2EudG9reW8uanAiLCJtaXp1aG8udG9reW8uanAiLCJtdXNhc2hpbXVyYXlhbWEudG9reW8uanAiLCJtdXNhc2hpbm8udG9reW8uanAiLCJuYWthbm8udG9reW8u'@;
put 'anAiLCJuZXJpbWEudG9reW8uanAiLCJvZ2FzYXdhcmEudG9reW8uanAiLCJva3V0YW1hLnRva3lvLmpwIiwib21lLnRva3lvLmpwIiwib3NoaW1hLnRva3lvLmpwIiwib3RhLnRva3lvLmpwIiwic2V0YWdheWEudG9reW8uanAiLCJzaGlidXlhLnRva3lvLmpwIiwic2hpbmFnYXdhLnRva3lv'@;
put 'LmpwIiwic2hpbmp1a3UudG9reW8uanAiLCJzdWdpbmFtaS50b2t5by5qcCIsInN1bWlkYS50b2t5by5qcCIsInRhY2hpa2F3YS50b2t5by5qcCIsInRhaXRvLnRva3lvLmpwIiwidGFtYS50b2t5by5qcCIsInRvc2hpbWEudG9reW8uanAiLCJjaGl6dS50b3R0b3JpLmpwIiwiaGluby50b3R0'@;
put 'b3JpLmpwIiwia2F3YWhhcmEudG90dG9yaS5qcCIsImtvZ2UudG90dG9yaS5qcCIsImtvdG91cmEudG90dG9yaS5qcCIsIm1pc2FzYS50b3R0b3JpLmpwIiwibmFuYnUudG90dG9yaS5qcCIsIm5pY2hpbmFuLnRvdHRvcmkuanAiLCJzYWthaW1pbmF0by50b3R0b3JpLmpwIiwidG90dG9yaS50'@;
put 'b3R0b3JpLmpwIiwid2FrYXNhLnRvdHRvcmkuanAiLCJ5YXp1LnRvdHRvcmkuanAiLCJ5b25hZ28udG90dG9yaS5qcCIsImFzYWhpLnRveWFtYS5qcCIsImZ1Y2h1LnRveWFtYS5qcCIsImZ1a3VtaXRzdS50b3lhbWEuanAiLCJmdW5haGFzaGkudG95YW1hLmpwIiwiaGltaS50b3lhbWEuanAi'@;
put 'LCJpbWl6dS50b3lhbWEuanAiLCJpbmFtaS50b3lhbWEuanAiLCJqb2hhbmEudG95YW1hLmpwIiwia2FtaWljaGkudG95YW1hLmpwIiwia3Vyb2JlLnRveWFtYS5qcCIsIm5ha2FuaWlrYXdhLnRveWFtYS5qcCIsIm5hbWVyaWthd2EudG95YW1hLmpwIiwibmFudG8udG95YW1hLmpwIiwibnl1'@;
put 'emVuLnRveWFtYS5qcCIsIm95YWJlLnRveWFtYS5qcCIsInRhaXJhLnRveWFtYS5qcCIsInRha2Fva2EudG95YW1hLmpwIiwidGF0ZXlhbWEudG95YW1hLmpwIiwidG9nYS50b3lhbWEuanAiLCJ0b25hbWkudG95YW1hLmpwIiwidG95YW1hLnRveWFtYS5qcCIsInVuYXp1a2kudG95YW1hLmpw'@;
put 'IiwidW96dS50b3lhbWEuanAiLCJ5YW1hZGEudG95YW1hLmpwIiwiYXJpZGEud2FrYXlhbWEuanAiLCJhcmlkYWdhd2Eud2FrYXlhbWEuanAiLCJnb2JvLndha2F5YW1hLmpwIiwiaGFzaGltb3RvLndha2F5YW1hLmpwIiwiaGlkYWthLndha2F5YW1hLmpwIiwiaGlyb2dhd2Eud2FrYXlhbWEu'@;
put 'anAiLCJpbmFtaS53YWtheWFtYS5qcCIsIml3YWRlLndha2F5YW1hLmpwIiwia2FpbmFuLndha2F5YW1hLmpwIiwia2FtaXRvbmRhLndha2F5YW1hLmpwIiwia2F0c3VyYWdpLndha2F5YW1hLmpwIiwia2ltaW5vLndha2F5YW1hLmpwIiwia2lub2thd2Eud2FrYXlhbWEuanAiLCJraXRheWFt'@;
put 'YS53YWtheWFtYS5qcCIsImtveWEud2FrYXlhbWEuanAiLCJrb3phLndha2F5YW1hLmpwIiwia296YWdhd2Eud2FrYXlhbWEuanAiLCJrdWRveWFtYS53YWtheWFtYS5qcCIsImt1c2hpbW90by53YWtheWFtYS5qcCIsIm1paGFtYS53YWtheWFtYS5qcCIsIm1pc2F0by53YWtheWFtYS5qcCIs'@;
put 'Im5hY2hpa2F0c3V1cmEud2FrYXlhbWEuanAiLCJzaGluZ3Uud2FrYXlhbWEuanAiLCJzaGlyYWhhbWEud2FrYXlhbWEuanAiLCJ0YWlqaS53YWtheWFtYS5qcCIsInRhbmFiZS53YWtheWFtYS5qcCIsIndha2F5YW1hLndha2F5YW1hLmpwIiwieXVhc2Eud2FrYXlhbWEuanAiLCJ5dXJhLndh'@;
put 'a2F5YW1hLmpwIiwiYXNhaGkueWFtYWdhdGEuanAiLCJmdW5hZ2F0YS55YW1hZ2F0YS5qcCIsImhpZ2FzaGluZS55YW1hZ2F0YS5qcCIsImlpZGUueWFtYWdhdGEuanAiLCJrYWhva3UueWFtYWdhdGEuanAiLCJrYW1pbm95YW1hLnlhbWFnYXRhLmpwIiwia2FuZXlhbWEueWFtYWdhdGEuanAi'@;
put 'LCJrYXdhbmlzaGkueWFtYWdhdGEuanAiLCJtYW11cm9nYXdhLnlhbWFnYXRhLmpwIiwibWlrYXdhLnlhbWFnYXRhLmpwIiwibXVyYXlhbWEueWFtYWdhdGEuanAiLCJuYWdhaS55YW1hZ2F0YS5qcCIsIm5ha2F5YW1hLnlhbWFnYXRhLmpwIiwibmFueW8ueWFtYWdhdGEuanAiLCJuaXNoaWth'@;
put 'd2EueWFtYWdhdGEuanAiLCJvYmFuYXphd2EueWFtYWdhdGEuanAiLCJvZS55YW1hZ2F0YS5qcCIsIm9ndW5pLnlhbWFnYXRhLmpwIiwib2hrdXJhLnlhbWFnYXRhLmpwIiwib2lzaGlkYS55YW1hZ2F0YS5qcCIsInNhZ2FlLnlhbWFnYXRhLmpwIiwic2FrYXRhLnlhbWFnYXRhLmpwIiwic2Fr'@;
put 'ZWdhd2EueWFtYWdhdGEuanAiLCJzaGluam8ueWFtYWdhdGEuanAiLCJzaGlyYXRha2EueWFtYWdhdGEuanAiLCJzaG9uYWkueWFtYWdhdGEuanAiLCJ0YWthaGF0YS55YW1hZ2F0YS5qcCIsInRlbmRvLnlhbWFnYXRhLmpwIiwidG96YXdhLnlhbWFnYXRhLmpwIiwidHN1cnVva2EueWFtYWdh'@;
put 'dGEuanAiLCJ5YW1hZ2F0YS55YW1hZ2F0YS5qcCIsInlhbWFub2JlLnlhbWFnYXRhLmpwIiwieW9uZXphd2EueWFtYWdhdGEuanAiLCJ5dXphLnlhbWFnYXRhLmpwIiwiYWJ1LnlhbWFndWNoaS5qcCIsImhhZ2kueWFtYWd1Y2hpLmpwIiwiaGlrYXJpLnlhbWFndWNoaS5qcCIsImhvZnUueWFt'@;
put 'YWd1Y2hpLmpwIiwiaXdha3VuaS55YW1hZ3VjaGkuanAiLCJrdWRhbWF0c3UueWFtYWd1Y2hpLmpwIiwibWl0b3UueWFtYWd1Y2hpLmpwIiwibmFnYXRvLnlhbWFndWNoaS5qcCIsIm9zaGltYS55YW1hZ3VjaGkuanAiLCJzaGltb25vc2VraS55YW1hZ3VjaGkuanAiLCJzaHVuYW4ueWFtYWd1'@;
put 'Y2hpLmpwIiwidGFidXNlLnlhbWFndWNoaS5qcCIsInRva3V5YW1hLnlhbWFndWNoaS5qcCIsInRveW90YS55YW1hZ3VjaGkuanAiLCJ1YmUueWFtYWd1Y2hpLmpwIiwieXV1LnlhbWFndWNoaS5qcCIsImNodW8ueWFtYW5hc2hpLmpwIiwiZG9zaGkueWFtYW5hc2hpLmpwIiwiZnVlZnVraS55'@;
put 'YW1hbmFzaGkuanAiLCJmdWppa2F3YS55YW1hbmFzaGkuanAiLCJmdWppa2F3YWd1Y2hpa28ueWFtYW5hc2hpLmpwIiwiZnVqaXlvc2hpZGEueWFtYW5hc2hpLmpwIiwiaGF5YWthd2EueWFtYW5hc2hpLmpwIiwiaG9rdXRvLnlhbWFuYXNoaS5qcCIsImljaGlrYXdhbWlzYXRvLnlhbWFuYXNo'@;
put 'aS5qcCIsImthaS55YW1hbmFzaGkuanAiLCJrb2Z1LnlhbWFuYXNoaS5qcCIsImtvc2h1LnlhbWFuYXNoaS5qcCIsImtvc3VnZS55YW1hbmFzaGkuanAiLCJtaW5hbWktYWxwcy55YW1hbmFzaGkuanAiLCJtaW5vYnUueWFtYW5hc2hpLmpwIiwibmFrYW1pY2hpLnlhbWFuYXNoaS5qcCIsIm5h'@;
put 'bmJ1LnlhbWFuYXNoaS5qcCIsIm5hcnVzYXdhLnlhbWFuYXNoaS5qcCIsIm5pcmFzYWtpLnlhbWFuYXNoaS5qcCIsIm5pc2hpa2F0c3VyYS55YW1hbmFzaGkuanAiLCJvc2hpbm8ueWFtYW5hc2hpLmpwIiwib3RzdWtpLnlhbWFuYXNoaS5qcCIsInNob3dhLnlhbWFuYXNoaS5qcCIsInRhYmF5'@;
put 'YW1hLnlhbWFuYXNoaS5qcCIsInRzdXJ1LnlhbWFuYXNoaS5qcCIsInVlbm9oYXJhLnlhbWFuYXNoaS5qcCIsInlhbWFuYWtha28ueWFtYW5hc2hpLmpwIiwieWFtYW5hc2hpLnlhbWFuYXNoaS5qcCIsImtlIiwiYWMua2UiLCJjby5rZSIsImdvLmtlIiwiaW5mby5rZSIsIm1lLmtlIiwibW9i'@;
put 'aS5rZSIsIm5lLmtlIiwib3Iua2UiLCJzYy5rZSIsImtnIiwib3JnLmtnIiwibmV0LmtnIiwiY29tLmtnIiwiZWR1LmtnIiwiZ292LmtnIiwibWlsLmtnIiwiKi5raCIsImtpIiwiZWR1LmtpIiwiYml6LmtpIiwibmV0LmtpIiwib3JnLmtpIiwiZ292LmtpIiwiaW5mby5raSIsImNvbS5raSIs'@;
put 'ImttIiwib3JnLmttIiwibm9tLmttIiwiZ292LmttIiwicHJkLmttIiwidG0ua20iLCJlZHUua20iLCJtaWwua20iLCJhc3Mua20iLCJjb20ua20iLCJjb29wLmttIiwiYXNzby5rbSIsInByZXNzZS5rbSIsIm1lZGVjaW4ua20iLCJub3RhaXJlcy5rbSIsInBoYXJtYWNpZW5zLmttIiwidmV0'@;
put 'ZXJpbmFpcmUua20iLCJnb3V2LmttIiwia24iLCJuZXQua24iLCJvcmcua24iLCJlZHUua24iLCJnb3Yua24iLCJrcCIsImNvbS5rcCIsImVkdS5rcCIsImdvdi5rcCIsIm9yZy5rcCIsInJlcC5rcCIsInRyYS5rcCIsImtyIiwiYWMua3IiLCJjby5rciIsImVzLmtyIiwiZ28ua3IiLCJocy5r'@;
put 'ciIsImtnLmtyIiwibWlsLmtyIiwibXMua3IiLCJuZS5rciIsIm9yLmtyIiwicGUua3IiLCJyZS5rciIsInNjLmtyIiwiYnVzYW4ua3IiLCJjaHVuZ2J1ay5rciIsImNodW5nbmFtLmtyIiwiZGFlZ3Uua3IiLCJkYWVqZW9uLmtyIiwiZ2FuZ3dvbi5rciIsImd3YW5nanUua3IiLCJneWVvbmdi'@;
put 'dWsua3IiLCJneWVvbmdnaS5rciIsImd5ZW9uZ25hbS5rciIsImluY2hlb24ua3IiLCJqZWp1LmtyIiwiamVvbmJ1ay5rciIsImplb25uYW0ua3IiLCJzZW91bC5rciIsInVsc2FuLmtyIiwia3ciLCJjb20ua3ciLCJlZHUua3ciLCJlbWIua3ciLCJnb3Yua3ciLCJpbmQua3ciLCJuZXQua3ci'@;
put 'LCJvcmcua3ciLCJreSIsImNvbS5reSIsImVkdS5reSIsIm5ldC5reSIsIm9yZy5reSIsImt6Iiwib3JnLmt6IiwiZWR1Lmt6IiwibmV0Lmt6IiwiZ292Lmt6IiwibWlsLmt6IiwiY29tLmt6IiwibGEiLCJpbnQubGEiLCJuZXQubGEiLCJpbmZvLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwicGVy'@;
put 'LmxhIiwiY29tLmxhIiwib3JnLmxhIiwibGIiLCJjb20ubGIiLCJlZHUubGIiLCJnb3YubGIiLCJuZXQubGIiLCJvcmcubGIiLCJsYyIsImNvbS5sYyIsIm5ldC5sYyIsImNvLmxjIiwib3JnLmxjIiwiZWR1LmxjIiwiZ292LmxjIiwibGkiLCJsayIsImdvdi5sayIsInNjaC5sayIsIm5ldC5s'@;
put 'ayIsImludC5sayIsImNvbS5sayIsIm9yZy5sayIsImVkdS5sayIsIm5nby5sayIsInNvYy5sayIsIndlYi5sayIsImx0ZC5sayIsImFzc24ubGsiLCJncnAubGsiLCJob3RlbC5sayIsImFjLmxrIiwibHIiLCJjb20ubHIiLCJlZHUubHIiLCJnb3YubHIiLCJvcmcubHIiLCJuZXQubHIiLCJs'@;
put 'cyIsImFjLmxzIiwiYml6LmxzIiwiY28ubHMiLCJlZHUubHMiLCJnb3YubHMiLCJpbmZvLmxzIiwibmV0LmxzIiwib3JnLmxzIiwic2MubHMiLCJsdCIsImdvdi5sdCIsImx1IiwibHYiLCJjb20ubHYiLCJlZHUubHYiLCJnb3YubHYiLCJvcmcubHYiLCJtaWwubHYiLCJpZC5sdiIsIm5ldC5s'@;
put 'diIsImFzbi5sdiIsImNvbmYubHYiLCJseSIsImNvbS5seSIsIm5ldC5seSIsImdvdi5seSIsInBsYy5seSIsImVkdS5seSIsInNjaC5seSIsIm1lZC5seSIsIm9yZy5seSIsImlkLmx5IiwibWEiLCJjby5tYSIsIm5ldC5tYSIsImdvdi5tYSIsIm9yZy5tYSIsImFjLm1hIiwicHJlc3MubWEi'@;
put 'LCJtYyIsInRtLm1jIiwiYXNzby5tYyIsIm1kIiwibWUiLCJjby5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsImVkdS5tZSIsImFjLm1lIiwiZ292Lm1lIiwiaXRzLm1lIiwicHJpdi5tZSIsIm1nIiwib3JnLm1nIiwibm9tLm1nIiwiZ292Lm1nIiwicHJkLm1nIiwidG0ubWciLCJlZHUubWciLCJt'@;
put 'aWwubWciLCJjb20ubWciLCJjby5tZyIsIm1oIiwibWlsIiwibWsiLCJjb20ubWsiLCJvcmcubWsiLCJuZXQubWsiLCJlZHUubWsiLCJnb3YubWsiLCJpbmYubWsiLCJuYW1lLm1rIiwibWwiLCJjb20ubWwiLCJlZHUubWwiLCJnb3V2Lm1sIiwiZ292Lm1sIiwibmV0Lm1sIiwib3JnLm1sIiwi'@;
put 'cHJlc3NlLm1sIiwiKi5tbSIsIm1uIiwiZ292Lm1uIiwiZWR1Lm1uIiwib3JnLm1uIiwibW8iLCJjb20ubW8iLCJuZXQubW8iLCJvcmcubW8iLCJlZHUubW8iLCJnb3YubW8iLCJtb2JpIiwibXAiLCJtcSIsIm1yIiwiZ292Lm1yIiwibXMiLCJjb20ubXMiLCJlZHUubXMiLCJnb3YubXMiLCJu'@;
put 'ZXQubXMiLCJvcmcubXMiLCJtdCIsImNvbS5tdCIsImVkdS5tdCIsIm5ldC5tdCIsIm9yZy5tdCIsIm11IiwiY29tLm11IiwibmV0Lm11Iiwib3JnLm11IiwiZ292Lm11IiwiYWMubXUiLCJjby5tdSIsIm9yLm11IiwibXVzZXVtIiwiYWNhZGVteS5tdXNldW0iLCJhZ3JpY3VsdHVyZS5tdXNl'@;
put 'dW0iLCJhaXIubXVzZXVtIiwiYWlyZ3VhcmQubXVzZXVtIiwiYWxhYmFtYS5tdXNldW0iLCJhbGFza2EubXVzZXVtIiwiYW1iZXIubXVzZXVtIiwiYW1idWxhbmNlLm11c2V1bSIsImFtZXJpY2FuLm11c2V1bSIsImFtZXJpY2FuYS5tdXNldW0iLCJhbWVyaWNhbmFudGlxdWVzLm11c2V1bSIs'@;
put 'ImFtZXJpY2FuYXJ0Lm11c2V1bSIsImFtc3RlcmRhbS5tdXNldW0iLCJhbmQubXVzZXVtIiwiYW5uZWZyYW5rLm11c2V1bSIsImFudGhyby5tdXNldW0iLCJhbnRocm9wb2xvZ3kubXVzZXVtIiwiYW50aXF1ZXMubXVzZXVtIiwiYXF1YXJpdW0ubXVzZXVtIiwiYXJib3JldHVtLm11c2V1bSIs'@;
put 'ImFyY2hhZW9sb2dpY2FsLm11c2V1bSIsImFyY2hhZW9sb2d5Lm11c2V1bSIsImFyY2hpdGVjdHVyZS5tdXNldW0iLCJhcnQubXVzZXVtIiwiYXJ0YW5kZGVzaWduLm11c2V1bSIsImFydGNlbnRlci5tdXNldW0iLCJhcnRkZWNvLm11c2V1bSIsImFydGVkdWNhdGlvbi5tdXNldW0iLCJhcnRn'@;
put 'YWxsZXJ5Lm11c2V1bSIsImFydHMubXVzZXVtIiwiYXJ0c2FuZGNyYWZ0cy5tdXNldW0iLCJhc21hdGFydC5tdXNldW0iLCJhc3Nhc3NpbmF0aW9uLm11c2V1bSIsImFzc2lzaS5tdXNldW0iLCJhc3NvY2lhdGlvbi5tdXNldW0iLCJhc3Ryb25vbXkubXVzZXVtIiwiYXRsYW50YS5tdXNldW0i'@;
put 'LCJhdXN0aW4ubXVzZXVtIiwiYXVzdHJhbGlhLm11c2V1bSIsImF1dG9tb3RpdmUubXVzZXVtIiwiYXZpYXRpb24ubXVzZXVtIiwiYXhpcy5tdXNldW0iLCJiYWRham96Lm11c2V1bSIsImJhZ2hkYWQubXVzZXVtIiwiYmFobi5tdXNldW0iLCJiYWxlLm11c2V1bSIsImJhbHRpbW9yZS5tdXNl'@;
put 'dW0iLCJiYXJjZWxvbmEubXVzZXVtIiwiYmFzZWJhbGwubXVzZXVtIiwiYmFzZWwubXVzZXVtIiwiYmF0aHMubXVzZXVtIiwiYmF1ZXJuLm11c2V1bSIsImJlYXV4YXJ0cy5tdXNldW0iLCJiZWVsZGVuZ2VsdWlkLm11c2V1bSIsImJlbGxldnVlLm11c2V1bSIsImJlcmdiYXUubXVzZXVtIiwi'@;
put 'YmVya2VsZXkubXVzZXVtIiwiYmVybGluLm11c2V1bSIsImJlcm4ubXVzZXVtIiwiYmlibGUubXVzZXVtIiwiYmlsYmFvLm11c2V1bSIsImJpbGwubXVzZXVtIiwiYmlyZGFydC5tdXNldW0iLCJiaXJ0aHBsYWNlLm11c2V1bSIsImJvbm4ubXVzZXVtIiwiYm9zdG9uLm11c2V1bSIsImJvdGFu'@;
put 'aWNhbC5tdXNldW0iLCJib3RhbmljYWxnYXJkZW4ubXVzZXVtIiwiYm90YW5pY2dhcmRlbi5tdXNldW0iLCJib3RhbnkubXVzZXVtIiwiYnJhbmR5d2luZXZhbGxleS5tdXNldW0iLCJicmFzaWwubXVzZXVtIiwiYnJpc3RvbC5tdXNldW0iLCJicml0aXNoLm11c2V1bSIsImJyaXRpc2hjb2x1'@;
put 'bWJpYS5tdXNldW0iLCJicm9hZGNhc3QubXVzZXVtIiwiYnJ1bmVsLm11c2V1bSIsImJydXNzZWwubXVzZXVtIiwiYnJ1c3NlbHMubXVzZXVtIiwiYnJ1eGVsbGVzLm11c2V1bSIsImJ1aWxkaW5nLm11c2V1bSIsImJ1cmdob2YubXVzZXVtIiwiYnVzLm11c2V1bSIsImJ1c2hleS5tdXNldW0i'@;
put 'LCJjYWRhcXVlcy5tdXNldW0iLCJjYWxpZm9ybmlhLm11c2V1bSIsImNhbWJyaWRnZS5tdXNldW0iLCJjYW4ubXVzZXVtIiwiY2FuYWRhLm11c2V1bSIsImNhcGVicmV0b24ubXVzZXVtIiwiY2Fycmllci5tdXNldW0iLCJjYXJ0b29uYXJ0Lm11c2V1bSIsImNhc2FkZWxhbW9uZWRhLm11c2V1'@;
put 'bSIsImNhc3RsZS5tdXNldW0iLCJjYXN0cmVzLm11c2V1bSIsImNlbHRpYy5tdXNldW0iLCJjZW50ZXIubXVzZXVtIiwiY2hhdHRhbm9vZ2EubXVzZXVtIiwiY2hlbHRlbmhhbS5tdXNldW0iLCJjaGVzYXBlYWtlYmF5Lm11c2V1bSIsImNoaWNhZ28ubXVzZXVtIiwiY2hpbGRyZW4ubXVzZXVt'@;
put 'IiwiY2hpbGRyZW5zLm11c2V1bSIsImNoaWxkcmVuc2dhcmRlbi5tdXNldW0iLCJjaGlyb3ByYWN0aWMubXVzZXVtIiwiY2hvY29sYXRlLm11c2V1bSIsImNocmlzdGlhbnNidXJnLm11c2V1bSIsImNpbmNpbm5hdGkubXVzZXVtIiwiY2luZW1hLm11c2V1bSIsImNpcmN1cy5tdXNldW0iLCJj'@;
put 'aXZpbGlzYXRpb24ubXVzZXVtIiwiY2l2aWxpemF0aW9uLm11c2V1bSIsImNpdmlsd2FyLm11c2V1bSIsImNsaW50b24ubXVzZXVtIiwiY2xvY2subXVzZXVtIiwiY29hbC5tdXNldW0iLCJjb2FzdGFsZGVmZW5jZS5tdXNldW0iLCJjb2R5Lm11c2V1bSIsImNvbGR3YXIubXVzZXVtIiwiY29s'@;
put 'bGVjdGlvbi5tdXNldW0iLCJjb2xvbmlhbHdpbGxpYW1zYnVyZy5tdXNldW0iLCJjb2xvcmFkb3BsYXRlYXUubXVzZXVtIiwiY29sdW1iaWEubXVzZXVtIiwiY29sdW1idXMubXVzZXVtIiwiY29tbXVuaWNhdGlvbi5tdXNldW0iLCJjb21tdW5pY2F0aW9ucy5tdXNldW0iLCJjb21tdW5pdHku'@;
put 'bXVzZXVtIiwiY29tcHV0ZXIubXVzZXVtIiwiY29tcHV0ZXJoaXN0b3J5Lm11c2V1bSIsImNvbXVuaWNhXHhlN1x4ZjVlcy5tdXNldW0iLCJjb250ZW1wb3JhcnkubXVzZXVtIiwiY29udGVtcG9yYXJ5YXJ0Lm11c2V1bSIsImNvbnZlbnQubXVzZXVtIiwiY29wZW5oYWdlbi5tdXNldW0iLCJj'@;
put 'b3Jwb3JhdGlvbi5tdXNldW0iLCJjb3JyZWlvcy1lLXRlbGVjb211bmljYVx4ZTdceGY1ZXMubXVzZXVtIiwiY29ydmV0dGUubXVzZXVtIiwiY29zdHVtZS5tdXNldW0iLCJjb3VudHJ5ZXN0YXRlLm11c2V1bSIsImNvdW50eS5tdXNldW0iLCJjcmFmdHMubXVzZXVtIiwiY3JhbmJyb29rLm11'@;
put 'c2V1bSIsImNyZWF0aW9uLm11c2V1bSIsImN1bHR1cmFsLm11c2V1bSIsImN1bHR1cmFsY2VudGVyLm11c2V1bSIsImN1bHR1cmUubXVzZXVtIiwiY3liZXIubXVzZXVtIiwiY3ltcnUubXVzZXVtIiwiZGFsaS5tdXNldW0iLCJkYWxsYXMubXVzZXVtIiwiZGF0YWJhc2UubXVzZXVtIiwiZGRy'@;
put 'Lm11c2V1bSIsImRlY29yYXRpdmVhcnRzLm11c2V1bSIsImRlbGF3YXJlLm11c2V1bSIsImRlbG1lbmhvcnN0Lm11c2V1bSIsImRlbm1hcmsubXVzZXVtIiwiZGVwb3QubXVzZXVtIiwiZGVzaWduLm11c2V1bSIsImRldHJvaXQubXVzZXVtIiwiZGlub3NhdXIubXVzZXVtIiwiZGlzY292ZXJ5'@;
put 'Lm11c2V1bSIsImRvbGxzLm11c2V1bSIsImRvbm9zdGlhLm11c2V1bSIsImR1cmhhbS5tdXNldW0iLCJlYXN0YWZyaWNhLm11c2V1bSIsImVhc3Rjb2FzdC5tdXNldW0iLCJlZHVjYXRpb24ubXVzZXVtIiwiZWR1Y2F0aW9uYWwubXVzZXVtIiwiZWd5cHRpYW4ubXVzZXVtIiwiZWlzZW5iYWhu'@;
put 'Lm11c2V1bSIsImVsYnVyZy5tdXNldW0iLCJlbHZlbmRyZWxsLm11c2V1bSIsImVtYnJvaWRlcnkubXVzZXVtIiwiZW5jeWNsb3BlZGljLm11c2V1bSIsImVuZ2xhbmQubXVzZXVtIiwiZW50b21vbG9neS5tdXNldW0iLCJlbnZpcm9ubWVudC5tdXNldW0iLCJlbnZpcm9ubWVudGFsY29uc2Vy'@;
put 'dmF0aW9uLm11c2V1bSIsImVwaWxlcHN5Lm11c2V1bSIsImVzc2V4Lm11c2V1bSIsImVzdGF0ZS5tdXNldW0iLCJldGhub2xvZ3kubXVzZXVtIiwiZXhldGVyLm11c2V1bSIsImV4aGliaXRpb24ubXVzZXVtIiwiZmFtaWx5Lm11c2V1bSIsImZhcm0ubXVzZXVtIiwiZmFybWVxdWlwbWVudC5t'@;
put 'dXNldW0iLCJmYXJtZXJzLm11c2V1bSIsImZhcm1zdGVhZC5tdXNldW0iLCJmaWVsZC5tdXNldW0iLCJmaWd1ZXJlcy5tdXNldW0iLCJmaWxhdGVsaWEubXVzZXVtIiwiZmlsbS5tdXNldW0iLCJmaW5lYXJ0Lm11c2V1bSIsImZpbmVhcnRzLm11c2V1bSIsImZpbmxhbmQubXVzZXVtIiwiZmxh'@;
put 'bmRlcnMubXVzZXVtIiwiZmxvcmlkYS5tdXNldW0iLCJmb3JjZS5tdXNldW0iLCJmb3J0bWlzc291bGEubXVzZXVtIiwiZm9ydHdvcnRoLm11c2V1bSIsImZvdW5kYXRpb24ubXVzZXVtIiwiZnJhbmNhaXNlLm11c2V1bSIsImZyYW5rZnVydC5tdXNldW0iLCJmcmFuemlza2FuZXIubXVzZXVt'@;
put 'IiwiZnJlZW1hc29ucnkubXVzZXVtIiwiZnJlaWJ1cmcubXVzZXVtIiwiZnJpYm91cmcubXVzZXVtIiwiZnJvZy5tdXNldW0iLCJmdW5kYWNpby5tdXNldW0iLCJmdXJuaXR1cmUubXVzZXVtIiwiZ2FsbGVyeS5tdXNldW0iLCJnYXJkZW4ubXVzZXVtIiwiZ2F0ZXdheS5tdXNldW0iLCJnZWVs'@;
put 'dmluY2subXVzZXVtIiwiZ2Vtb2xvZ2ljYWwubXVzZXVtIiwiZ2VvbG9neS5tdXNldW0iLCJnZW9yZ2lhLm11c2V1bSIsImdpZXNzZW4ubXVzZXVtIiwiZ2xhcy5tdXNldW0iLCJnbGFzcy5tdXNldW0iLCJnb3JnZS5tdXNldW0iLCJncmFuZHJhcGlkcy5tdXNldW0iLCJncmF6Lm11c2V1bSIs'@;
put 'Imd1ZXJuc2V5Lm11c2V1bSIsImhhbGxvZmZhbWUubXVzZXVtIiwiaGFtYnVyZy5tdXNldW0iLCJoYW5kc29uLm11c2V1bSIsImhhcnZlc3RjZWxlYnJhdGlvbi5tdXNldW0iLCJoYXdhaWkubXVzZXVtIiwiaGVhbHRoLm11c2V1bSIsImhlaW1hdHVuZHVocmVuLm11c2V1bSIsImhlbGxhcy5t'@;
put 'dXNldW0iLCJoZWxzaW5raS5tdXNldW0iLCJoZW1ieWdkc2ZvcmJ1bmQubXVzZXVtIiwiaGVyaXRhZ2UubXVzZXVtIiwiaGlzdG9pcmUubXVzZXVtIiwiaGlzdG9yaWNhbC5tdXNldW0iLCJoaXN0b3JpY2Fsc29jaWV0eS5tdXNldW0iLCJoaXN0b3JpY2hvdXNlcy5tdXNldW0iLCJoaXN0b3Jp'@;
put 'c2NoLm11c2V1bSIsImhpc3RvcmlzY2hlcy5tdXNldW0iLCJoaXN0b3J5Lm11c2V1bSIsImhpc3RvcnlvZnNjaWVuY2UubXVzZXVtIiwiaG9yb2xvZ3kubXVzZXVtIiwiaG91c2UubXVzZXVtIiwiaHVtYW5pdGllcy5tdXNldW0iLCJpbGx1c3RyYXRpb24ubXVzZXVtIiwiaW1hZ2VhbmRzb3Vu'@;
put 'ZC5tdXNldW0iLCJpbmRpYW4ubXVzZXVtIiwiaW5kaWFuYS5tdXNldW0iLCJpbmRpYW5hcG9saXMubXVzZXVtIiwiaW5kaWFubWFya2V0Lm11c2V1bSIsImludGVsbGlnZW5jZS5tdXNldW0iLCJpbnRlcmFjdGl2ZS5tdXNldW0iLCJpcmFxLm11c2V1bSIsImlyb24ubXVzZXVtIiwiaXNsZW9m'@;
put 'bWFuLm11c2V1bSIsImphbWlzb24ubXVzZXVtIiwiamVmZmVyc29uLm11c2V1bSIsImplcnVzYWxlbS5tdXNldW0iLCJqZXdlbHJ5Lm11c2V1bSIsImpld2lzaC5tdXNldW0iLCJqZXdpc2hhcnQubXVzZXVtIiwiamZrLm11c2V1bSIsImpvdXJuYWxpc20ubXVzZXVtIiwianVkYWljYS5tdXNl'@;
put 'dW0iLCJqdWR5Z2FybGFuZC5tdXNldW0iLCJqdWVkaXNjaGVzLm11c2V1bSIsImp1aWYubXVzZXVtIiwia2FyYXRlLm11c2V1bSIsImthcmlrYXR1ci5tdXNldW0iLCJraWRzLm11c2V1bSIsImtvZWJlbmhhdm4ubXVzZXVtIiwia29lbG4ubXVzZXVtIiwia3Vuc3QubXVzZXVtIiwia3Vuc3Rz'@;
put 'YW1tbHVuZy5tdXNldW0iLCJrdW5zdHVuZGRlc2lnbi5tdXNldW0iLCJsYWJvci5tdXNldW0iLCJsYWJvdXIubXVzZXVtIiwibGFqb2xsYS5tdXNldW0iLCJsYW5jYXNoaXJlLm11c2V1bSIsImxhbmRlcy5tdXNldW0iLCJsYW5zLm11c2V1bSIsImxceGU0bnMubXVzZXVtIiwibGFyc3Nvbi5t'@;
put 'dXNldW0iLCJsZXdpc21pbGxlci5tdXNldW0iLCJsaW5jb2xuLm11c2V1bSIsImxpbnoubXVzZXVtIiwibGl2aW5nLm11c2V1bSIsImxpdmluZ2hpc3RvcnkubXVzZXVtIiwibG9jYWxoaXN0b3J5Lm11c2V1bSIsImxvbmRvbi5tdXNldW0iLCJsb3NhbmdlbGVzLm11c2V1bSIsImxvdXZyZS5t'@;
put 'dXNldW0iLCJsb3lhbGlzdC5tdXNldW0iLCJsdWNlcm5lLm11c2V1bSIsImx1eGVtYm91cmcubXVzZXVtIiwibHV6ZXJuLm11c2V1bSIsIm1hZC5tdXNldW0iLCJtYWRyaWQubXVzZXVtIiwibWFsbG9yY2EubXVzZXVtIiwibWFuY2hlc3Rlci5tdXNldW0iLCJtYW5zaW9uLm11c2V1bSIsIm1h'@;
put 'bnNpb25zLm11c2V1bSIsIm1hbngubXVzZXVtIiwibWFyYnVyZy5tdXNldW0iLCJtYXJpdGltZS5tdXNldW0iLCJtYXJpdGltby5tdXNldW0iLCJtYXJ5bGFuZC5tdXNldW0iLCJtYXJ5bGh1cnN0Lm11c2V1bSIsIm1lZGlhLm11c2V1bSIsIm1lZGljYWwubXVzZXVtIiwibWVkaXppbmhpc3Rv'@;
put 'cmlzY2hlcy5tdXNldW0iLCJtZWVyZXMubXVzZXVtIiwibWVtb3JpYWwubXVzZXVtIiwibWVzYXZlcmRlLm11c2V1bSIsIm1pY2hpZ2FuLm11c2V1bSIsIm1pZGF0bGFudGljLm11c2V1bSIsIm1pbGl0YXJ5Lm11c2V1bSIsIm1pbGwubXVzZXVtIiwibWluZXJzLm11c2V1bSIsIm1pbmluZy5t'@;
put 'dXNldW0iLCJtaW5uZXNvdGEubXVzZXVtIiwibWlzc2lsZS5tdXNldW0iLCJtaXNzb3VsYS5tdXNldW0iLCJtb2Rlcm4ubXVzZXVtIiwibW9tYS5tdXNldW0iLCJtb25leS5tdXNldW0iLCJtb25tb3V0aC5tdXNldW0iLCJtb250aWNlbGxvLm11c2V1bSIsIm1vbnRyZWFsLm11c2V1bSIsIm1v'@;
put 'c2Nvdy5tdXNldW0iLCJtb3RvcmN5Y2xlLm11c2V1bSIsIm11ZW5jaGVuLm11c2V1bSIsIm11ZW5zdGVyLm11c2V1bSIsIm11bGhvdXNlLm11c2V1bSIsIm11bmNpZS5tdXNldW0iLCJtdXNlZXQubXVzZXVtIiwibXVzZXVtY2VudGVyLm11c2V1bSIsIm11c2V1bXZlcmVuaWdpbmcubXVzZXVt'@;
put 'IiwibXVzaWMubXVzZXVtIiwibmF0aW9uYWwubXVzZXVtIiwibmF0aW9uYWxmaXJlYXJtcy5tdXNldW0iLCJuYXRpb25hbGhlcml0YWdlLm11c2V1bSIsIm5hdGl2ZWFtZXJpY2FuLm11c2V1bSIsIm5hdHVyYWxoaXN0b3J5Lm11c2V1bSIsIm5hdHVyYWxoaXN0b3J5bXVzZXVtLm11c2V1bSIs'@;
put 'Im5hdHVyYWxzY2llbmNlcy5tdXNldW0iLCJuYXR1cmUubXVzZXVtIiwibmF0dXJoaXN0b3Jpc2NoZXMubXVzZXVtIiwibmF0dXVyd2V0ZW5zY2hhcHBlbi5tdXNldW0iLCJuYXVtYnVyZy5tdXNldW0iLCJuYXZhbC5tdXNldW0iLCJuZWJyYXNrYS5tdXNldW0iLCJuZXVlcy5tdXNldW0iLCJu'@;
put 'ZXdoYW1wc2hpcmUubXVzZXVtIiwibmV3amVyc2V5Lm11c2V1bSIsIm5ld21leGljby5tdXNldW0iLCJuZXdwb3J0Lm11c2V1bSIsIm5ld3NwYXBlci5tdXNldW0iLCJuZXd5b3JrLm11c2V1bSIsIm5pZXBjZS5tdXNldW0iLCJub3Jmb2xrLm11c2V1bSIsIm5vcnRoLm11c2V1bSIsIm5ydy5t'@;
put 'dXNldW0iLCJueWMubXVzZXVtIiwibnlueS5tdXNldW0iLCJvY2Vhbm9ncmFwaGljLm11c2V1bSIsIm9jZWFub2dyYXBoaXF1ZS5tdXNldW0iLCJvbWFoYS5tdXNldW0iLCJvbmxpbmUubXVzZXVtIiwib250YXJpby5tdXNldW0iLCJvcGVuYWlyLm11c2V1bSIsIm9yZWdvbi5tdXNldW0iLCJv'@;
put 'cmVnb250cmFpbC5tdXNldW0iLCJvdGFnby5tdXNldW0iLCJveGZvcmQubXVzZXVtIiwicGFjaWZpYy5tdXNldW0iLCJwYWRlcmJvcm4ubXVzZXVtIiwicGFsYWNlLm11c2V1bSIsInBhbGVvLm11c2V1bSIsInBhbG1zcHJpbmdzLm11c2V1bSIsInBhbmFtYS5tdXNldW0iLCJwYXJpcy5tdXNl'@;
put 'dW0iLCJwYXNhZGVuYS5tdXNldW0iLCJwaGFybWFjeS5tdXNldW0iLCJwaGlsYWRlbHBoaWEubXVzZXVtIiwicGhpbGFkZWxwaGlhYXJlYS5tdXNldW0iLCJwaGlsYXRlbHkubXVzZXVtIiwicGhvZW5peC5tdXNldW0iLCJwaG90b2dyYXBoeS5tdXNldW0iLCJwaWxvdHMubXVzZXVtIiwicGl0'@;
put 'dHNidXJnaC5tdXNldW0iLCJwbGFuZXRhcml1bS5tdXNldW0iLCJwbGFudGF0aW9uLm11c2V1bSIsInBsYW50cy5tdXNldW0iLCJwbGF6YS5tdXNldW0iLCJwb3J0YWwubXVzZXVtIiwicG9ydGxhbmQubXVzZXVtIiwicG9ydGxsaWdhdC5tdXNldW0iLCJwb3N0cy1hbmQtdGVsZWNvbW11bmlj'@;
put 'YXRpb25zLm11c2V1bSIsInByZXNlcnZhdGlvbi5tdXNldW0iLCJwcmVzaWRpby5tdXNldW0iLCJwcmVzcy5tdXNldW0iLCJwcm9qZWN0Lm11c2V1bSIsInB1YmxpYy5tdXNldW0iLCJwdWJvbC5tdXNldW0iLCJxdWViZWMubXVzZXVtIiwicmFpbHJvYWQubXVzZXVtIiwicmFpbHdheS5tdXNl'@;
put 'dW0iLCJyZXNlYXJjaC5tdXNldW0iLCJyZXNpc3RhbmNlLm11c2V1bSIsInJpb2RlamFuZWlyby5tdXNldW0iLCJyb2NoZXN0ZXIubXVzZXVtIiwicm9ja2FydC5tdXNldW0iLCJyb21hLm11c2V1bSIsInJ1c3NpYS5tdXNldW0iLCJzYWludGxvdWlzLm11c2V1bSIsInNhbGVtLm11c2V1bSIs'@;
put 'InNhbHZhZG9yZGFsaS5tdXNldW0iLCJzYWx6YnVyZy5tdXNldW0iLCJzYW5kaWVnby5tdXNldW0iLCJzYW5mcmFuY2lzY28ubXVzZXVtIiwic2FudGFiYXJiYXJhLm11c2V1bSIsInNhbnRhY3J1ei5tdXNldW0iLCJzYW50YWZlLm11c2V1bSIsInNhc2thdGNoZXdhbi5tdXNldW0iLCJzYXR4'@;
put 'Lm11c2V1bSIsInNhdmFubmFoZ2EubXVzZXVtIiwic2NobGVzaXNjaGVzLm11c2V1bSIsInNjaG9lbmJydW5uLm11c2V1bSIsInNjaG9rb2xhZGVuLm11c2V1bSIsInNjaG9vbC5tdXNldW0iLCJzY2h3ZWl6Lm11c2V1bSIsInNjaWVuY2UubXVzZXVtIiwic2NpZW5jZWFuZGhpc3RvcnkubXVz'@;
put 'ZXVtIiwic2NpZW5jZWFuZGluZHVzdHJ5Lm11c2V1bSIsInNjaWVuY2VjZW50ZXIubXVzZXVtIiwic2NpZW5jZWNlbnRlcnMubXVzZXVtIiwic2NpZW5jZS1maWN0aW9uLm11c2V1bSIsInNjaWVuY2VoaXN0b3J5Lm11c2V1bSIsInNjaWVuY2VzLm11c2V1bSIsInNjaWVuY2VzbmF0dXJlbGxl'@;
put 'cy5tdXNldW0iLCJzY290bGFuZC5tdXNldW0iLCJzZWFwb3J0Lm11c2V1bSIsInNldHRsZW1lbnQubXVzZXVtIiwic2V0dGxlcnMubXVzZXVtIiwic2hlbGwubXVzZXVtIiwic2hlcmJyb29rZS5tdXNldW0iLCJzaWJlbmlrLm11c2V1bSIsInNpbGsubXVzZXVtIiwic2tpLm11c2V1bSIsInNr'@;
put 'b2xlLm11c2V1bSIsInNvY2lldHkubXVzZXVtIiwic29sb2duZS5tdXNldW0iLCJzb3VuZGFuZHZpc2lvbi5tdXNldW0iLCJzb3V0aGNhcm9saW5hLm11c2V1bSIsInNvdXRod2VzdC5tdXNldW0iLCJzcGFjZS5tdXNldW0iLCJzcHkubXVzZXVtIiwic3F1YXJlLm11c2V1bSIsInN0YWR0Lm11'@;
put 'c2V1bSIsInN0YWxiYW5zLm11c2V1bSIsInN0YXJuYmVyZy5tdXNldW0iLCJzdGF0ZS5tdXNldW0iLCJzdGF0ZW9mZGVsYXdhcmUubXVzZXVtIiwic3RhdGlvbi5tdXNldW0iLCJzdGVhbS5tdXNldW0iLCJzdGVpZXJtYXJrLm11c2V1bSIsInN0am9obi5tdXNldW0iLCJzdG9ja2hvbG0ubXVz'@;
put 'ZXVtIiwic3RwZXRlcnNidXJnLm11c2V1bSIsInN0dXR0Z2FydC5tdXNldW0iLCJzdWlzc2UubXVzZXVtIiwic3VyZ2VvbnNoYWxsLm11c2V1bSIsInN1cnJleS5tdXNldW0iLCJzdml6emVyYS5tdXNldW0iLCJzd2VkZW4ubXVzZXVtIiwic3lkbmV5Lm11c2V1bSIsInRhbmsubXVzZXVtIiwi'@;
put 'dGNtLm11c2V1bSIsInRlY2hub2xvZ3kubXVzZXVtIiwidGVsZWtvbW11bmlrYXRpb24ubXVzZXVtIiwidGVsZXZpc2lvbi5tdXNldW0iLCJ0ZXhhcy5tdXNldW0iLCJ0ZXh0aWxlLm11c2V1bSIsInRoZWF0ZXIubXVzZXVtIiwidGltZS5tdXNldW0iLCJ0aW1la2VlcGluZy5tdXNldW0iLCJ0'@;
put 'b3BvbG9neS5tdXNldW0iLCJ0b3Jpbm8ubXVzZXVtIiwidG91Y2gubXVzZXVtIiwidG93bi5tdXNldW0iLCJ0cmFuc3BvcnQubXVzZXVtIiwidHJlZS5tdXNldW0iLCJ0cm9sbGV5Lm11c2V1bSIsInRydXN0Lm11c2V1bSIsInRydXN0ZWUubXVzZXVtIiwidWhyZW4ubXVzZXVtIiwidWxtLm11'@;
put 'c2V1bSIsInVuZGVyc2VhLm11c2V1bSIsInVuaXZlcnNpdHkubXVzZXVtIiwidXNhLm11c2V1bSIsInVzYW50aXF1ZXMubXVzZXVtIiwidXNhcnRzLm11c2V1bSIsInVzY291bnRyeWVzdGF0ZS5tdXNldW0iLCJ1c2N1bHR1cmUubXVzZXVtIiwidXNkZWNvcmF0aXZlYXJ0cy5tdXNldW0iLCJ1'@;
put 'c2dhcmRlbi5tdXNldW0iLCJ1c2hpc3RvcnkubXVzZXVtIiwidXNodWFpYS5tdXNldW0iLCJ1c2xpdmluZ2hpc3RvcnkubXVzZXVtIiwidXRhaC5tdXNldW0iLCJ1dmljLm11c2V1bSIsInZhbGxleS5tdXNldW0iLCJ2YW50YWEubXVzZXVtIiwidmVyc2FpbGxlcy5tdXNldW0iLCJ2aWtpbmcu'@;
put 'bXVzZXVtIiwidmlsbGFnZS5tdXNldW0iLCJ2aXJnaW5pYS5tdXNldW0iLCJ2aXJ0dWFsLm11c2V1bSIsInZpcnR1ZWwubXVzZXVtIiwidmxhYW5kZXJlbi5tdXNldW0iLCJ2b2xrZW5rdW5kZS5tdXNldW0iLCJ3YWxlcy5tdXNldW0iLCJ3YWxsb25pZS5tdXNldW0iLCJ3YXIubXVzZXVtIiwi'@;
put 'd2FzaGluZ3RvbmRjLm11c2V1bSIsIndhdGNoYW5kY2xvY2subXVzZXVtIiwid2F0Y2gtYW5kLWNsb2NrLm11c2V1bSIsIndlc3Rlcm4ubXVzZXVtIiwid2VzdGZhbGVuLm11c2V1bSIsIndoYWxpbmcubXVzZXVtIiwid2lsZGxpZmUubXVzZXVtIiwid2lsbGlhbXNidXJnLm11c2V1bSIsIndp'@;
put 'bmRtaWxsLm11c2V1bSIsIndvcmtzaG9wLm11c2V1bSIsInlvcmsubXVzZXVtIiwieW9ya3NoaXJlLm11c2V1bSIsInlvc2VtaXRlLm11c2V1bSIsInlvdXRoLm11c2V1bSIsInpvb2xvZ2ljYWwubXVzZXVtIiwiem9vbG9neS5tdXNldW0iLCJcdTA1ZDlcdTA1ZThcdTA1ZDVcdTA1ZTlcdTA1'@;
put 'ZGNcdTA1ZDlcdTA1ZGQubXVzZXVtIiwiXHUwNDM4XHUwNDNhXHUwNDNlXHUwNDNjLm11c2V1bSIsIm12IiwiYWVyby5tdiIsImJpei5tdiIsImNvbS5tdiIsImNvb3AubXYiLCJlZHUubXYiLCJnb3YubXYiLCJpbmZvLm12IiwiaW50Lm12IiwibWlsLm12IiwibXVzZXVtLm12IiwibmFtZS5t'@;
put 'diIsIm5ldC5tdiIsIm9yZy5tdiIsInByby5tdiIsIm13IiwiYWMubXciLCJiaXoubXciLCJjby5tdyIsImNvbS5tdyIsImNvb3AubXciLCJlZHUubXciLCJnb3YubXciLCJpbnQubXciLCJtdXNldW0ubXciLCJuZXQubXciLCJvcmcubXciLCJteCIsImNvbS5teCIsIm9yZy5teCIsImdvYi5t'@;
put 'eCIsImVkdS5teCIsIm5ldC5teCIsIm15IiwiYml6Lm15IiwiY29tLm15IiwiZWR1Lm15IiwiZ292Lm15IiwibWlsLm15IiwibmFtZS5teSIsIm5ldC5teSIsIm9yZy5teSIsIm16IiwiYWMubXoiLCJhZHYubXoiLCJjby5teiIsImVkdS5teiIsImdvdi5teiIsIm1pbC5teiIsIm5ldC5teiIs'@;
put 'Im9yZy5teiIsIm5hIiwiaW5mby5uYSIsInByby5uYSIsIm5hbWUubmEiLCJzY2hvb2wubmEiLCJvci5uYSIsImRyLm5hIiwidXMubmEiLCJteC5uYSIsImNhLm5hIiwiaW4ubmEiLCJjYy5uYSIsInR2Lm5hIiwid3MubmEiLCJtb2JpLm5hIiwiY28ubmEiLCJjb20ubmEiLCJvcmcubmEiLCJu'@;
put 'YW1lIiwibmMiLCJhc3NvLm5jIiwibm9tLm5jIiwibmUiLCJuZXQiLCJuZiIsImNvbS5uZiIsIm5ldC5uZiIsInBlci5uZiIsInJlYy5uZiIsIndlYi5uZiIsImFydHMubmYiLCJmaXJtLm5mIiwiaW5mby5uZiIsIm90aGVyLm5mIiwic3RvcmUubmYiLCJuZyIsImNvbS5uZyIsImVkdS5uZyIs'@;
put 'Imdvdi5uZyIsImkubmciLCJtaWwubmciLCJtb2JpLm5nIiwibmFtZS5uZyIsIm5ldC5uZyIsIm9yZy5uZyIsInNjaC5uZyIsIm5pIiwiYWMubmkiLCJiaXoubmkiLCJjby5uaSIsImNvbS5uaSIsImVkdS5uaSIsImdvYi5uaSIsImluLm5pIiwiaW5mby5uaSIsImludC5uaSIsIm1pbC5uaSIs'@;
put 'Im5ldC5uaSIsIm5vbS5uaSIsIm9yZy5uaSIsIndlYi5uaSIsIm5sIiwibm8iLCJmaHMubm8iLCJ2Z3Mubm8iLCJmeWxrZXNiaWJsLm5vIiwiZm9sa2ViaWJsLm5vIiwibXVzZXVtLm5vIiwiaWRyZXR0Lm5vIiwicHJpdi5ubyIsIm1pbC5ubyIsInN0YXQubm8iLCJkZXAubm8iLCJrb21tdW5l'@;
put 'Lm5vIiwiaGVyYWQubm8iLCJhYS5ubyIsImFoLm5vIiwiYnUubm8iLCJmbS5ubyIsImhsLm5vIiwiaG0ubm8iLCJqYW4tbWF5ZW4ubm8iLCJtci5ubyIsIm5sLm5vIiwibnQubm8iLCJvZi5ubyIsIm9sLm5vIiwib3Nsby5ubyIsInJsLm5vIiwic2Yubm8iLCJzdC5ubyIsInN2YWxiYXJkLm5v'@;
put 'IiwidG0ubm8iLCJ0ci5ubyIsInZhLm5vIiwidmYubm8iLCJncy5hYS5ubyIsImdzLmFoLm5vIiwiZ3MuYnUubm8iLCJncy5mbS5ubyIsImdzLmhsLm5vIiwiZ3MuaG0ubm8iLCJncy5qYW4tbWF5ZW4ubm8iLCJncy5tci5ubyIsImdzLm5sLm5vIiwiZ3MubnQubm8iLCJncy5vZi5ubyIsImdz'@;
put 'Lm9sLm5vIiwiZ3Mub3Nsby5ubyIsImdzLnJsLm5vIiwiZ3Muc2Yubm8iLCJncy5zdC5ubyIsImdzLnN2YWxiYXJkLm5vIiwiZ3MudG0ubm8iLCJncy50ci5ubyIsImdzLnZhLm5vIiwiZ3MudmYubm8iLCJha3JlaGFtbi5ubyIsIlx4ZTVrcmVoYW1uLm5vIiwiYWxnYXJkLm5vIiwiXHhlNWxn'@;
put 'XHhlNXJkLm5vIiwiYXJuYS5ubyIsImJydW11bmRkYWwubm8iLCJicnluZS5ubyIsImJyb25ub3lzdW5kLm5vIiwiYnJceGY4bm5ceGY4eXN1bmQubm8iLCJkcm9iYWsubm8iLCJkclx4ZjhiYWsubm8iLCJlZ2Vyc3VuZC5ubyIsImZldHN1bmQubm8iLCJmbG9yby5ubyIsImZsb3JceGY4Lm5v'@;
put 'IiwiZnJlZHJpa3N0YWQubm8iLCJob2trc3VuZC5ubyIsImhvbmVmb3NzLm5vIiwiaFx4ZjhuZWZvc3Mubm8iLCJqZXNzaGVpbS5ubyIsImpvcnBlbGFuZC5ubyIsImpceGY4cnBlbGFuZC5ubyIsImtpcmtlbmVzLm5vIiwia29wZXJ2aWsubm8iLCJrcm9rc3RhZGVsdmEubm8iLCJsYW5nZXZh'@;
put 'Zy5ubyIsImxhbmdldlx4ZTVnLm5vIiwibGVpcnZpay5ubyIsIm1qb25kYWxlbi5ubyIsIm1qXHhmOG5kYWxlbi5ubyIsIm1vLWktcmFuYS5ubyIsIm1vc2pvZW4ubm8iLCJtb3NqXHhmOGVuLm5vIiwibmVzb2RkdGFuZ2VuLm5vIiwib3JrYW5nZXIubm8iLCJvc295cm8ubm8iLCJvc1x4Zjh5'@;
put 'cm8ubm8iLCJyYWhvbHQubm8iLCJyXHhlNWhvbHQubm8iLCJzYW5kbmVzc2pvZW4ubm8iLCJzYW5kbmVzc2pceGY4ZW4ubm8iLCJza2Vkc21va29yc2V0Lm5vIiwic2xhdHR1bS5ubyIsInNwamVsa2F2aWsubm8iLCJzdGF0aGVsbGUubm8iLCJzdGF2ZXJuLm5vIiwic3Rqb3JkYWxzaGFsc2Vu'@;
put 'Lm5vIiwic3RqXHhmOHJkYWxzaGFsc2VuLm5vIiwidGFuYW5nZXIubm8iLCJ0cmFuYnkubm8iLCJ2b3NzZXZhbmdlbi5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJhbC5ubyIsIlx4ZTVsLm5vIiwiYWxlc3VuZC5ubyIsIlx4ZTVsZXN1bmQubm8iLCJhbHN0'@;
put 'YWhhdWcubm8iLCJhbHRhLm5vIiwiXHhlMWx0XHhlMS5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsdmRhbC5ubyIsImFtbGkubm8iLCJceGU1bWxpLm5vIiwiYW1vdC5ubyIsIlx4ZTVtb3Qubm8iLCJhbmRlYnUubm8iLCJhbmRveS5ubyIsImFuZFx4Zjh5Lm5vIiwi'@;
put 'YW5kYXN1b2xvLm5vIiwiYXJkYWwubm8iLCJceGU1cmRhbC5ubyIsImFyZW1hcmsubm8iLCJhcmVuZGFsLm5vIiwiXHhlNXMubm8iLCJhc2VyYWwubm8iLCJceGU1c2VyYWwubm8iLCJhc2tlci5ubyIsImFza2ltLm5vIiwiYXNrdm9sbC5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJh'@;
put 'c25lcy5ubyIsIlx4ZTVzbmVzLm5vIiwiYXVkbmVkYWxuLm5vIiwiYXVrcmEubm8iLCJhdXJlLm5vIiwiYXVybGFuZC5ubyIsImF1cnNrb2ctaG9sYW5kLm5vIiwiYXVyc2tvZy1oXHhmOGxhbmQubm8iLCJhdXN0ZXZvbGwubm8iLCJhdXN0cmhlaW0ubm8iLCJhdmVyb3kubm8iLCJhdmVyXHhm'@;
put 'OHkubm8iLCJiYWxlc3RyYW5kLm5vIiwiYmFsbGFuZ2VuLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbHNmam9yZC5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUxaGNjYXZ1b3RuYS5ubyIsImJhbWJsZS5ubyIsImJhcmR1Lm5vIiwiYmVhcmR1Lm5vIiwiYmVpYXJuLm5v'@;
put 'IiwiYmFqZGRhci5ubyIsImJceGUxamRkYXIubm8iLCJiYWlkYXIubm8iLCJiXHhlMWlkXHhlMXIubm8iLCJiZXJnLm5vIiwiYmVyZ2VuLm5vIiwiYmVybGV2YWcubm8iLCJiZXJsZXZceGU1Zy5ubyIsImJlYXJhbHZhaGtpLm5vIiwiYmVhcmFsdlx4ZTFoa2kubm8iLCJiaW5kYWwubm8iLCJi'@;
put 'aXJrZW5lcy5ubyIsImJqYXJrb3kubm8iLCJiamFya1x4Zjh5Lm5vIiwiYmplcmtyZWltLm5vIiwiYmp1Z24ubm8iLCJib2RvLm5vIiwiYm9kXHhmOC5ubyIsImJhZGFkZGphLm5vIiwiYlx4ZTVkXHhlNWRkalx4ZTUubm8iLCJidWRlamp1Lm5vIiwiYm9rbi5ubyIsImJyZW1hbmdlci5ubyIs'@;
put 'ImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnlnbGFuZC5ubyIsImJ5a2xlLm5vIiwiYmFydW0ubm8iLCJiXHhlNnJ1bS5ubyIsImJvLnRlbGVtYXJrLm5vIiwiYlx4ZjgudGVsZW1hcmsubm8iLCJiby5ub3JkbGFuZC5ubyIsImJceGY4Lm5vcmRsYW5kLm5vIiwiYmlldmF0Lm5v'@;
put 'IiwiYmlldlx4ZTF0Lm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIsImJhdHNmam9yZC5ubyIsImJceGU1dHNmam9yZC5ubyIsImJhaGNhdnVvdG5hLm5vIiwiYlx4ZTFoY2F2dW90bmEubm8iLCJkb3ZyZS5ubyIsImRyYW1tZW4ubm8iLCJkcmFuZ2VkYWwubm8iLCJkeXJveS5ubyIsImR5'@;
put 'clx4Zjh5Lm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImVpZC5ubyIsImVpZGZqb3JkLm5vIiwiZWlkc2Jlcmcubm8iLCJlaWRza29nLm5vIiwiZWlkc3ZvbGwubm8iLCJlaWdlcnN1bmQubm8iLCJlbHZlcnVtLm5vIiwiZW5lYmFray5ubyIsImVuZ2VyZGFsLm5vIiwiZXRuZS5ubyIs'@;
put 'ImV0bmVkYWwubm8iLCJldmVuZXMubm8iLCJldmVuYXNzaS5ubyIsImV2ZW5ceGUxXHUwMTYxXHUwMTYxaS5ubyIsImV2amUtb2ctaG9ybm5lcy5ubyIsImZhcnN1bmQubm8iLCJmYXVza2Uubm8iLCJmdW9zc2tvLm5vIiwiZnVvaXNrdS5ubyIsImZlZGplLm5vIiwiZmV0Lm5vIiwiZmlubm95'@;
put 'Lm5vIiwiZmlublx4Zjh5Lm5vIiwiZml0amFyLm5vIiwiZmphbGVyLm5vIiwiZmplbGwubm8iLCJmbGFrc3RhZC5ubyIsImZsYXRhbmdlci5ubyIsImZsZWtrZWZqb3JkLm5vIiwiZmxlc2Jlcmcubm8iLCJmbG9yYS5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZvbGxkYWwubm8iLCJmb3Jz'@;
put 'YW5kLm5vIiwiZm9zbmVzLm5vIiwiZnJlaS5ubyIsImZyb2duLm5vIiwiZnJvbGFuZC5ubyIsImZyb3N0YS5ubyIsImZyYW5hLm5vIiwiZnJceGU2bmEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVzYS5ubyIsImZ5cmVzZGFsLm5vIiwiZm9yZGUubm8iLCJmXHhmOHJkZS5ubyIs'@;
put 'ImdhbXZpay5ubyIsImdhbmdhdmlpa2Eubm8iLCJnXHhlMVx1MDE0Ymdhdmlpa2Eubm8iLCJnYXVsYXIubm8iLCJnYXVzZGFsLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVza1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdq'@;
put 'ZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRhbmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8i'@;
put 'LCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJoYWRzZWwubm8iLCJoYWxkZW4ubm8iLCJoYWxzYS5ubyIsImhhbWFyLm5vIiwiaGFtYXJveS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhcG1pci5ubyIsImhceGUxcG1pci5ubyIsImhhbW1lcmZlc3Qubm8iLCJoYW1tYXJmZWFzdGEu'@;
put 'bm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYXJhbS5ubyIsImhhcmVpZC5ubyIsImhhcnN0YWQubm8iLCJoYXN2aWsubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiYWFyYm9ydGUubm8iLCJoYXVnZXN1bmQubm8iLCJo'@;
put 'ZW1uZS5ubyIsImhlbW5lcy5ubyIsImhlbXNlZGFsLm5vIiwiaGVyb3kubW9yZS1vZy1yb21zZGFsLm5vIiwiaGVyXHhmOHkubVx4ZjhyZS1vZy1yb21zZGFsLm5vIiwiaGVyb3kubm9yZGxhbmQubm8iLCJoZXJceGY4eS5ub3JkbGFuZC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwubm8iLCJo'@;
put 'amVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8iLCJodXJkYWwubm8iLCJodXJ1bS5ubyIs'@;
put 'Imh2YWxlci5ubyIsImh5bGxlc3RhZC5ubyIsImhhZ2Vib3N0YWQubm8iLCJoXHhlNmdlYm9zdGFkLm5vIiwiaG95YW5nZXIubm8iLCJoXHhmOHlhbmdlci5ubyIsImhveWxhbmRldC5ubyIsImhceGY4eWxhbmRldC5ubyIsImhhLm5vIiwiaFx4ZTUubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJv'@;
put 'eS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5kLm5vIiwiamV2bmFrZXIubm8iLCJqb25kYWwubm8iLCJqb2xzdGVyLm5vIiwialx4Zjhsc3Rlci5ubyIsImthcmFzam9rLm5vIiwia2FyYXNqb2hrYS5ubyIsImtceGUxclx4ZTFcdTAxNjFqb2hrYS5ubyIsImthcmxzb3kubm8iLCJnYWxz'@;
put 'YS5ubyIsImdceGUxbHNceGUxLm5vIiwia2FybW95Lm5vIiwia2FybVx4Zjh5Lm5vIiwia2F1dG9rZWluby5ubyIsImd1b3ZkYWdlYWlkbnUubm8iLCJrbGVwcC5ubyIsImtsYWJ1Lm5vIiwia2xceGU2YnUubm8iLCJrb25nc2Jlcmcubm8iLCJrb25nc3Zpbmdlci5ubyIsImtyYWdlcm8ubm8i'@;
put 'LCJrcmFnZXJceGY4Lm5vIiwia3Jpc3RpYW5zYW5kLm5vIiwia3Jpc3RpYW5zdW5kLm5vIiwia3JvZHNoZXJhZC5ubyIsImtyXHhmOGRzaGVyYWQubm8iLCJrdmFsc3VuZC5ubyIsInJhaGtrZXJhdmp1Lm5vIiwiclx4ZTFoa2tlclx4ZTF2anUubm8iLCJrdmFtLm5vIiwia3ZpbmVzZGFsLm5v'@;
put 'Iiwia3Zpbm5oZXJhZC5ubyIsImt2aXRlc2VpZC5ubyIsImt2aXRzb3kubm8iLCJrdml0c1x4Zjh5Lm5vIiwia3ZhZmpvcmQubm8iLCJrdlx4ZTZmam9yZC5ubyIsImdpZWh0YXZ1b2F0bmEubm8iLCJrdmFuYW5nZW4ubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJuYXZ1b3RuYS5ubyIsIm5ceGUx'@;
put 'dnVvdG5hLm5vIiwia2Fmam9yZC5ubyIsImtceGU1ZmpvcmQubm8iLCJnYWl2dW90bmEubm8iLCJnXHhlMWl2dW90bmEubm8iLCJsYXJ2aWsubm8iLCJsYXZhbmdlbi5ubyIsImxhdmFnaXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsZWJlc2J5Lm5vIiwiZGF2dmVzaWlkYS5u'@;
put 'byIsImxlaWthbmdlci5ubyIsImxlaXJmam9yZC5ubyIsImxla2Eubm8iLCJsZWtzdmlrLm5vIiwibGVudmlrLm5vIiwibGVhbmdhdmlpa2Eubm8iLCJsZWFcdTAxNGJnYXZpaWthLm5vIiwibGVzamEubm8iLCJsZXZhbmdlci5ubyIsImxpZXIubm8iLCJsaWVybmUubm8iLCJsaWxsZWhhbW1l'@;
put 'ci5ubyIsImxpbGxlc2FuZC5ubyIsImxpbmRlc25lcy5ubyIsImxpbmRhcy5ubyIsImxpbmRceGU1cy5ubyIsImxvbS5ubyIsImxvcHBhLm5vIiwibGFocHBpLm5vIiwibFx4ZTFocHBpLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIu'@;
put 'bm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5vIiwiaXZndS5ubyIsImxhcmRhbC5ubyIsImxlcmRhbC5ubyIsImxceGU2cmRhbC5ubyIsImxvZGluZ2VuLm5vIiwibFx4ZjhkaW5nZW4ubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5v'@;
put 'IiwibWFsdmlrLm5vIiwibWFzb3kubm8iLCJtXHhlNXNceGY4eS5ubyIsIm11b3NhdC5ubyIsIm11b3NceGUxdC5ubyIsIm1hbmRhbC5ubyIsIm1hcmtlci5ubyIsIm1hcm5hcmRhbC5ubyIsIm1hc2Zqb3JkZW4ubm8iLCJtZWxhbmQubm8iLCJtZWxkYWwubm8iLCJtZWxodXMubm8iLCJtZWxv'@;
put 'eS5ubyIsIm1lbFx4Zjh5Lm5vIiwibWVyYWtlci5ubyIsIm1lclx4ZTVrZXIubm8iLCJtb2FyZWtlLm5vIiwibW9ceGU1cmVrZS5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIsIm1vZGFsZW4ubm8iLCJtb2R1bS5ubyIsIm1vbGRlLm5vIiwibW9za2VuZXMubm8iLCJtb3Nz'@;
put 'Lm5vIiwibW9zdmlrLm5vIiwibWFsc2Vsdi5ubyIsIm1ceGU1bHNlbHYubm8iLCJtYWxhdHZ1b3BtaS5ubyIsIm1ceGUxbGF0dnVvcG1pLm5vIiwibmFtZGFsc2VpZC5ubyIsImFlanJpZS5ubyIsIm5hbXNvcy5ubyIsIm5hbXNza29nYW4ubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1'@;
put 'XHhlNW1lc2pldnVlbWllLm5vIiwibGFha2VzdnVlbWllLm5vIiwibmFubmVzdGFkLm5vIiwibmFydmlrLm5vIiwibmFydmlpa2Eubm8iLCJuYXVzdGRhbC5ubyIsIm5lZHJlLWVpa2VyLm5vIiwibmVzLmFrZXJzaHVzLm5vIiwibmVzLmJ1c2tlcnVkLm5vIiwibmVzbmEubm8iLCJuZXNvZGRl'@;
put 'bi5ubyIsIm5lc3NlYnkubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsIm5lc3NldC5ubyIsIm5pc3NlZGFsLm5vIiwibml0dGVkYWwubm8iLCJub3JkLWF1cmRhbC5ubyIsIm5vcmQtZnJvbi5ubyIsIm5vcmQtb2RhbC5ubyIsIm5vcmRkYWwubm8iLCJub3Jka2FwcC5ubyIsImRh'@;
put 'dnZlbmphcmdhLm5vIiwiZGF2dmVualx4ZTFyZ2Eubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJub3JlLW9nLXV2ZGFsLm5vIiwibm90b2RkZW4ubm8iLCJuYXJveS5ubyIsIm5ceGU2clx4Zjh5Lm5vIiwibm90dGVyb3kubm8i'@;
put 'LCJuXHhmOHR0ZXJceGY4eS5ubyIsIm9kZGEubm8iLCJva3NuZXMubm8iLCJceGY4a3NuZXMubm8iLCJvcHBkYWwubm8iLCJvcHBlZ2FyZC5ubyIsIm9wcGVnXHhlNXJkLm5vIiwib3JrZGFsLm5vIiwib3JsYW5kLm5vIiwiXHhmOHJsYW5kLm5vIiwib3Jza29nLm5vIiwiXHhmOHJza29nLm5v'@;
put 'Iiwib3JzdGEubm8iLCJceGY4cnN0YS5ubyIsIm9zLmhlZG1hcmsubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJvc2VuLm5vIiwib3N0ZXJveS5ubyIsIm9zdGVyXHhmOHkubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5u'@;
put 'byIsIlx4Zjh2cmUtZWlrZXIubm8iLCJveWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5u'@;
put 'byIsInBvcnNncnVubi5ubyIsInJhZG95Lm5vIiwicmFkXHhmOHkubm8iLCJyYWtrZXN0YWQubm8iLCJyYW5hLm5vIiwicnVvdmF0Lm5vIiwicmFuZGFiZXJnLm5vIiwicmF1bWEubm8iLCJyZW5kYWxlbi5ubyIsInJlbm5lYnUubm8iLCJyZW5uZXNveS5ubyIsInJlbm5lc1x4Zjh5Lm5vIiwi'@;
put 'cmluZGFsLm5vIiwicmluZ2VidS5ubyIsInJpbmdlcmlrZS5ubyIsInJpbmdzYWtlci5ubyIsInJpc3NhLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJvYW4ubm8iLCJyb2xsYWcubm8iLCJyeWdnZS5ubyIsInJhbGluZ2VuLm5vIiwiclx4ZTZsaW5nZW4ubm8iLCJyb2RveS5ubyIs'@;
put 'InJceGY4ZFx4Zjh5Lm5vIiwicm9tc2tvZy5ubyIsInJceGY4bXNrb2cubm8iLCJyb3Jvcy5ubyIsInJceGY4cm9zLm5vIiwicm9zdC5ubyIsInJceGY4c3Qubm8iLCJyb3lrZW4ubm8iLCJyXHhmOHlrZW4ubm8iLCJyb3lydmlrLm5vIiwiclx4Zjh5cnZpay5ubyIsInJhZGUubm8iLCJyXHhl'@;
put 'NWRlLm5vIiwic2FsYW5nZW4ubm8iLCJzaWVsbGFrLm5vIiwic2FsdGRhbC5ubyIsInNhbGF0Lm5vIiwic1x4ZTFsXHhlMXQubm8iLCJzXHhlMWxhdC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlLm1vcmUtb2ctcm9tc2RhbC5ubyIsInNhbmRlLm1ceGY4cmUtb2ctcm9tc2RhbC5ubyIsInNh'@;
put 'bmRlLnZlc3Rmb2xkLm5vIiwic2FuZGVmam9yZC5ubyIsInNhbmRuZXMubm8iLCJzYW5kb3kubm8iLCJzYW5kXHhmOHkubm8iLCJzYXJwc2Jvcmcubm8iLCJzYXVkYS5ubyIsInNhdWhlcmFkLm5vIiwic2VsLm5vIiwic2VsYnUubm8iLCJzZWxqZS5ubyIsInNlbGpvcmQubm8iLCJzaWdkYWwu'@;
put 'bm8iLCJzaWxqYW4ubm8iLCJzaXJkYWwubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraXB0dmV0Lm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tqYWsubm8iLCJza2pceGU1'@;
put 'ay5ubyIsInNrb2RqZS5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2FuaXQubm8iLCJza1x4ZTFuaXQubm8iLCJzbW9sYS5ubyIsInNtXHhmOGxhLm5vIiwic25pbGxmam9yZC5ubyIsInNuYXNhLm5vIiwic25ceGU1c2Eubm8iLCJzbm9hc2Eubm8iLCJzbmFhc2Uubm8i'@;
put 'LCJzblx4ZTVhc2Uubm8iLCJzb2duZGFsLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb25nZGFsZW4ubm8iLCJzb3J0bGFuZC5ubyIsInNweWRlYmVyZy5ubyIsInN0YW5nZS5ubyIsInN0YXZhbmdlci5ubyIsInN0ZWlnZW4ubm8iLCJzdGVpbmtqZXIubm8iLCJz'@;
put 'dGpvcmRhbC5ubyIsInN0alx4ZjhyZGFsLm5vIiwic3Rva2tlLm5vIiwic3Rvci1lbHZkYWwubm8iLCJzdG9yZC5ubyIsInN0b3JkYWwubm8iLCJzdG9yZmpvcmQubm8iLCJvbWFzdnVvdG5hLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRh'@;
put 'bC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsubm8iLCJzeWtreWx2ZW4ubm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29tbmEubm8iLCJzXHhmOG1uYS5ubyIsInNvbmRyZS1sYW5kLm5vIiwic1x4ZjhuZHJlLWxhbmQu'@;
put 'bm8iLCJzb3ItYXVyZGFsLm5vIiwic1x4ZjhyLWF1cmRhbC5ubyIsInNvci1mcm9uLm5vIiwic1x4ZjhyLWZyb24ubm8iLCJzb3Itb2RhbC5ubyIsInNceGY4ci1vZGFsLm5vIiwic29yLXZhcmFuZ2VyLm5vIiwic1x4ZjhyLXZhcmFuZ2VyLm5vIiwibWF0dGEtdmFyamphdC5ubyIsIm1ceGUx'@;
put 'dHRhLXZceGUxcmpqYXQubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVpc2Eubm8iLCJzb3J1bS5ubyIsInNceGY4cnVtLm5vIiwidGFuYS5ubyIsImRlYXRudS5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVs'@;
put 'ZHN1bmQubm8iLCJkaWVsZGRhbnVvcnJpLm5vIiwidGpvbWUubm8iLCJ0alx4ZjhtZS5ubyIsInRva2tlLm5vIiwidG9sZ2Eubm8iLCJ0b3Jza2VuLm5vIiwidHJhbm95Lm5vIiwidHJhblx4Zjh5Lm5vIiwidHJvbXNvLm5vIiwidHJvbXNceGY4Lm5vIiwidHJvbXNhLm5vIiwicm9tc2Eubm8i'@;
put 'LCJ0cm9uZGhlaW0ubm8iLCJ0cm9hbmRpbi5ubyIsInRyeXNpbC5ubyIsInRyYW5hLm5vIiwidHJceGU2bmEubm8iLCJ0cm9nc3RhZC5ubyIsInRyXHhmOGdzdGFkLm5vIiwidHZlZGVzdHJhbmQubm8iLCJ0eWRhbC5ubyIsInR5bnNldC5ubyIsInR5c2Zqb3JkLm5vIiwiZGl2dGFzdnVvZG5h'@;
put 'Lm5vIiwiZGl2dHRhc3Z1b3RuYS5ubyIsInR5c25lcy5ubyIsInR5c3Zhci5ubyIsInR5c3ZceGU2ci5ubyIsInRvbnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ1bGxlbnNha2VyLm5vIiwidWxsZW5zdmFuZy5ubyIsInVsdmlrLm5vIiwidXRzaXJhLm5vIiwidmFkc28ubm8iLCJ2YWRz'@;
put 'XHhmOC5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2ZWZzbi5ubyIs'@;
put 'InZhYXBzdGUubm8iLCJ2ZWdhLm5vIiwidmVnYXJzaGVpLm5vIiwidmVnXHhlNXJzaGVpLm5vIiwidmVubmVzbGEubm8iLCJ2ZXJkYWwubm8iLCJ2ZXJyYW4ubm8iLCJ2ZXN0Ynkubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdv'@;
put 'eS5ubyIsInZlc3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsInZhcm95Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhbi5ubyIsInZceGU1Z2FuLm5vIiwidm9hZ2F0Lm5vIiwi'@;
put 'dmFnc295Lm5vIiwidlx4ZTVnc1x4Zjh5Lm5vIiwidmFnYS5ubyIsInZceGU1Z1x4ZTUubm8iLCJ2YWxlci5vc3Rmb2xkLm5vIiwidlx4ZTVsZXIuXHhmOHN0Zm9sZC5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiKi5ucCIsIm5yIiwiYml6Lm5yIiwiaW5m'@;
put 'by5uciIsImdvdi5uciIsImVkdS5uciIsIm9yZy5uciIsIm5ldC5uciIsImNvbS5uciIsIm51IiwibnoiLCJhYy5ueiIsImNvLm56IiwiY3JpLm56IiwiZ2Vlay5ueiIsImdlbi5ueiIsImdvdnQubnoiLCJoZWFsdGgubnoiLCJpd2kubnoiLCJraXdpLm56IiwibWFvcmkubnoiLCJtaWwubnoi'@;
put 'LCJtXHUwMTAxb3JpLm56IiwibmV0Lm56Iiwib3JnLm56IiwicGFybGlhbWVudC5ueiIsInNjaG9vbC5ueiIsIm9tIiwiY28ub20iLCJjb20ub20iLCJlZHUub20iLCJnb3Yub20iLCJtZWQub20iLCJtdXNldW0ub20iLCJuZXQub20iLCJvcmcub20iLCJwcm8ub20iLCJvbmlvbiIsIm9yZyIs'@;
put 'InBhIiwiYWMucGEiLCJnb2IucGEiLCJjb20ucGEiLCJvcmcucGEiLCJzbGQucGEiLCJlZHUucGEiLCJuZXQucGEiLCJpbmcucGEiLCJhYm8ucGEiLCJtZWQucGEiLCJub20ucGEiLCJwZSIsImVkdS5wZSIsImdvYi5wZSIsIm5vbS5wZSIsIm1pbC5wZSIsIm9yZy5wZSIsImNvbS5wZSIsIm5l'@;
put 'dC5wZSIsInBmIiwiY29tLnBmIiwib3JnLnBmIiwiZWR1LnBmIiwiKi5wZyIsInBoIiwiY29tLnBoIiwibmV0LnBoIiwib3JnLnBoIiwiZ292LnBoIiwiZWR1LnBoIiwibmdvLnBoIiwibWlsLnBoIiwiaS5waCIsInBrIiwiY29tLnBrIiwibmV0LnBrIiwiZWR1LnBrIiwib3JnLnBrIiwiZmFt'@;
put 'LnBrIiwiYml6LnBrIiwid2ViLnBrIiwiZ292LnBrIiwiZ29iLnBrIiwiZ29rLnBrIiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiaW5mby5wayIsInBsIiwiY29tLnBsIiwibmV0LnBsIiwib3JnLnBsIiwiYWlkLnBsIiwiYWdyby5wbCIsImF0bS5wbCIsImF1dG8ucGwiLCJiaXoucGwi'@;
put 'LCJlZHUucGwiLCJnbWluYS5wbCIsImdzbS5wbCIsImluZm8ucGwiLCJtYWlsLnBsIiwibWlhc3RhLnBsIiwibWVkaWEucGwiLCJtaWwucGwiLCJuaWVydWNob21vc2NpLnBsIiwibm9tLnBsIiwicGMucGwiLCJwb3dpYXQucGwiLCJwcml2LnBsIiwicmVhbGVzdGF0ZS5wbCIsInJlbC5wbCIs'@;
put 'InNleC5wbCIsInNob3AucGwiLCJza2xlcC5wbCIsInNvcy5wbCIsInN6a29sYS5wbCIsInRhcmdpLnBsIiwidG0ucGwiLCJ0b3VyaXNtLnBsIiwidHJhdmVsLnBsIiwidHVyeXN0eWthLnBsIiwiZ292LnBsIiwiYXAuZ292LnBsIiwiaWMuZ292LnBsIiwiaXMuZ292LnBsIiwidXMuZ292LnBs'@;
put 'Iiwia21wc3AuZ292LnBsIiwia3Bwc3AuZ292LnBsIiwia3dwc3AuZ292LnBsIiwicHNwLmdvdi5wbCIsIndza3IuZ292LnBsIiwia3dwLmdvdi5wbCIsIm13Lmdvdi5wbCIsInVnLmdvdi5wbCIsInVtLmdvdi5wbCIsInVtaWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1cG93Lmdvdi5wbCIs'@;
put 'InV3Lmdvdi5wbCIsInN0YXJvc3R3by5nb3YucGwiLCJwYS5nb3YucGwiLCJwby5nb3YucGwiLCJwc3NlLmdvdi5wbCIsInB1cC5nb3YucGwiLCJyemd3Lmdvdi5wbCIsInNhLmdvdi5wbCIsInNvLmdvdi5wbCIsInNyLmdvdi5wbCIsIndzYS5nb3YucGwiLCJza28uZ292LnBsIiwidXpzLmdv'@;
put 'di5wbCIsIndpaWguZ292LnBsIiwid2luYi5nb3YucGwiLCJwaW5iLmdvdi5wbCIsIndpb3MuZ292LnBsIiwid2l0ZC5nb3YucGwiLCJ3em1pdXcuZ292LnBsIiwicGl3Lmdvdi5wbCIsIndpdy5nb3YucGwiLCJncml3Lmdvdi5wbCIsIndpZi5nb3YucGwiLCJvdW0uZ292LnBsIiwic2RuLmdv'@;
put 'di5wbCIsInpwLmdvdi5wbCIsInVwcG8uZ292LnBsIiwibXVwLmdvdi5wbCIsInd1b3ouZ292LnBsIiwia29uc3VsYXQuZ292LnBsIiwib2lybS5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJp'@;
put 'YWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRvbS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cu'@;
put 'cGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1nb3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXppbWllcnotZG9sbnkucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1Ynku'@;
put 'cGwiLCJrYXRvd2ljZS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2JyemVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFq'@;
put 'c2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwiLCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8u'@;
put 'cGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJvcG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEu'@;
put 'cGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3J6ZS5wbCIsInBvbW9yc2tpZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwi'@;
put 'LCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNsYXNrLnBsIiwic2x1cHNrLnBsIiwic29zbm93aWVjLnBsIiwic3RhbG93YS13b2xhLnBsIiwic2tvY3pvdy5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3'@;
put 'aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5vYnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6'@;
put 'YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcucGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxl'@;
put 'Yy5wbCIsInBtIiwicG4iLCJnb3YucG4iLCJjby5wbiIsIm9yZy5wbiIsImVkdS5wbiIsIm5ldC5wbiIsInBvc3QiLCJwciIsImNvbS5wciIsIm5ldC5wciIsIm9yZy5wciIsImdvdi5wciIsImVkdS5wciIsImlzbGEucHIiLCJwcm8ucHIiLCJiaXoucHIiLCJpbmZvLnByIiwibmFtZS5wciIs'@;
put 'ImVzdC5wciIsInByb2YucHIiLCJhYy5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwiYmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJlZHUucHMiLCJn'@;
put 'b3YucHMiLCJzZWMucHMiLCJwbG8ucHMiLCJjb20ucHMiLCJvcmcucHMiLCJuZXQucHMiLCJwdCIsIm5ldC5wdCIsImdvdi5wdCIsIm9yZy5wdCIsImVkdS5wdCIsImludC5wdCIsInB1YmwucHQiLCJjb20ucHQiLCJub21lLnB0IiwicHciLCJjby5wdyIsIm5lLnB3Iiwib3IucHciLCJlZC5w'@;
put 'dyIsImdvLnB3IiwiYmVsYXUucHciLCJweSIsImNvbS5weSIsImNvb3AucHkiLCJlZHUucHkiLCJnb3YucHkiLCJtaWwucHkiLCJuZXQucHkiLCJvcmcucHkiLCJxYSIsImNvbS5xYSIsImVkdS5xYSIsImdvdi5xYSIsIm1pbC5xYSIsIm5hbWUucWEiLCJuZXQucWEiLCJvcmcucWEiLCJzY2gu'@;
put 'cWEiLCJyZSIsImFzc28ucmUiLCJjb20ucmUiLCJub20ucmUiLCJybyIsImFydHMucm8iLCJjb20ucm8iLCJmaXJtLnJvIiwiaW5mby5ybyIsIm5vbS5ybyIsIm50LnJvIiwib3JnLnJvIiwicmVjLnJvIiwic3RvcmUucm8iLCJ0bS5ybyIsInd3dy5ybyIsInJzIiwiYWMucnMiLCJjby5ycyIs'@;
put 'ImVkdS5ycyIsImdvdi5ycyIsImluLnJzIiwib3JnLnJzIiwicnUiLCJydyIsImFjLnJ3IiwiY28ucnciLCJjb29wLnJ3IiwiZ292LnJ3IiwibWlsLnJ3IiwibmV0LnJ3Iiwib3JnLnJ3Iiwic2EiLCJjb20uc2EiLCJuZXQuc2EiLCJvcmcuc2EiLCJnb3Yuc2EiLCJtZWQuc2EiLCJwdWIuc2Ei'@;
put 'LCJlZHUuc2EiLCJzY2guc2EiLCJzYiIsImNvbS5zYiIsImVkdS5zYiIsImdvdi5zYiIsIm5ldC5zYiIsIm9yZy5zYiIsInNjIiwiY29tLnNjIiwiZ292LnNjIiwibmV0LnNjIiwib3JnLnNjIiwiZWR1LnNjIiwic2QiLCJjb20uc2QiLCJuZXQuc2QiLCJvcmcuc2QiLCJlZHUuc2QiLCJtZWQu'@;
put 'c2QiLCJ0di5zZCIsImdvdi5zZCIsImluZm8uc2QiLCJzZSIsImEuc2UiLCJhYy5zZSIsImIuc2UiLCJiZC5zZSIsImJyYW5kLnNlIiwiYy5zZSIsImQuc2UiLCJlLnNlIiwiZi5zZSIsImZoLnNlIiwiZmhzay5zZSIsImZodi5zZSIsImcuc2UiLCJoLnNlIiwiaS5zZSIsImsuc2UiLCJrb21m'@;
put 'b3JiLnNlIiwia29tbXVuYWxmb3JidW5kLnNlIiwia29tdnV4LnNlIiwibC5zZSIsImxhbmJpYi5zZSIsIm0uc2UiLCJuLnNlIiwibmF0dXJicnVrc2d5bW4uc2UiLCJvLnNlIiwib3JnLnNlIiwicC5zZSIsInBhcnRpLnNlIiwicHAuc2UiLCJwcmVzcy5zZSIsInIuc2UiLCJzLnNlIiwidC5z'@;
put 'ZSIsInRtLnNlIiwidS5zZSIsIncuc2UiLCJ4LnNlIiwieS5zZSIsInouc2UiLCJzZyIsImNvbS5zZyIsIm5ldC5zZyIsIm9yZy5zZyIsImdvdi5zZyIsImVkdS5zZyIsInBlci5zZyIsInNoIiwiY29tLnNoIiwibmV0LnNoIiwiZ292LnNoIiwib3JnLnNoIiwibWlsLnNoIiwic2kiLCJzaiIs'@;
put 'InNrIiwic2wiLCJjb20uc2wiLCJuZXQuc2wiLCJlZHUuc2wiLCJnb3Yuc2wiLCJvcmcuc2wiLCJzbSIsInNuIiwiYXJ0LnNuIiwiY29tLnNuIiwiZWR1LnNuIiwiZ291di5zbiIsIm9yZy5zbiIsInBlcnNvLnNuIiwidW5pdi5zbiIsInNvIiwiY29tLnNvIiwiZWR1LnNvIiwiZ292LnNvIiwi'@;
put 'bWUuc28iLCJuZXQuc28iLCJvcmcuc28iLCJzciIsInNzIiwiYml6LnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3MiLCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0'@;
put 'IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2IiwiZ29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImVkdS5zeSIsImdvdi5zeSIsIm5ldC5z'@;
put 'eSIsIm1pbC5zeSIsImNvbS5zeSIsIm9yZy5zeSIsInN6IiwiY28uc3oiLCJhYy5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6'@;
put 'LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJvcmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY29tLnRtIiwiY28udG0iLCJv'@;
put 'cmcudG0iLCJuZXQudG0iLCJub20udG0iLCJnb3YudG0iLCJtaWwudG0iLCJlZHUudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImluZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVy'@;
put 'c28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJnb3YudG8iLCJuZXQudG8iLCJvcmcudG8iLCJlZHUudG8iLCJtaWwudG8iLCJ0ciIsImF2LnRyIiwiYmJzLnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJp'@;
put 'bmZvLnRyIiwibWlsLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRyIiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImNvLnR0IiwiY29tLnR0Iiwib3JnLnR0IiwibmV0LnR0'@;
put 'IiwiYml6LnR0IiwiaW5mby50dCIsInByby50dCIsImludC50dCIsImNvb3AudHQiLCJqb2JzLnR0IiwibW9iaS50dCIsInRyYXZlbC50dCIsIm11c2V1bS50dCIsImFlcm8udHQiLCJuYW1lLnR0IiwiZ292LnR0IiwiZWR1LnR0IiwidHYiLCJ0dyIsImVkdS50dyIsImdvdi50dyIsIm1pbC50'@;
put 'dyIsImNvbS50dyIsIm5ldC50dyIsIm9yZy50dyIsImlkdi50dyIsImdhbWUudHciLCJlYml6LnR3IiwiY2x1Yi50dyIsIlx1N2RiMlx1OGRlZi50dyIsIlx1N2Q0NFx1N2U1NC50dyIsIlx1NTU0Nlx1Njk2ZC50dyIsInR6IiwiYWMudHoiLCJjby50eiIsImdvLnR6IiwiaG90ZWwudHoiLCJp'@;
put 'bmZvLnR6IiwibWUudHoiLCJtaWwudHoiLCJtb2JpLnR6IiwibmUudHoiLCJvci50eiIsInNjLnR6IiwidHYudHoiLCJ1YSIsImNvbS51YSIsImVkdS51YSIsImdvdi51YSIsImluLnVhIiwibmV0LnVhIiwib3JnLnVhIiwiY2hlcmthc3N5LnVhIiwiY2hlcmthc3kudWEiLCJjaGVybmlnb3Yu'@;
put 'dWEiLCJjaGVybmloaXYudWEiLCJjaGVybml2dHNpLnVhIiwiY2hlcm5vdnRzeS51YSIsImNrLnVhIiwiY24udWEiLCJjci51YSIsImNyaW1lYS51YSIsImN2LnVhIiwiZG4udWEiLCJkbmVwcm9wZXRyb3Zzay51YSIsImRuaXByb3BldHJvdnNrLnVhIiwiZG9uZXRzay51YSIsImRwLnVhIiwi'@;
put 'aWYudWEiLCJpdmFuby1mcmFua2l2c2sudWEiLCJraC51YSIsImtoYXJraXYudWEiLCJraGFya292LnVhIiwia2hlcnNvbi51YSIsImtobWVsbml0c2tpeS51YSIsImtobWVsbnl0c2t5aS51YSIsImtpZXYudWEiLCJraXJvdm9ncmFkLnVhIiwia20udWEiLCJrci51YSIsImtyeW0udWEiLCJr'@;
put 'cy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVhIiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHV0c2sudWEiLCJsdi51YSIsImx2aXYudWEiLCJtay51YSIsIm15a29sYWl2LnVhIiwibmlrb2xhZXYudWEiLCJvZC51YSIsIm9kZXNhLnVhIiwib2Rlc3NhLnVhIiwicGwudWEiLCJwb2x0YXZh'@;
put 'LnVhIiwicml2bmUudWEiLCJyb3Zuby51YSIsInJ2LnVhIiwic2IudWEiLCJzZWJhc3RvcG9sLnVhIiwic2V2YXN0b3BvbC51YSIsInNtLnVhIiwic3VteS51YSIsInRlLnVhIiwidGVybm9waWwudWEiLCJ1ei51YSIsInV6aGdvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIs'@;
put 'InZuLnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInphcG9yaXpoemhlLnVhIiwiemFwb3Jpemh6aGlhLnVhIiwiemhpdG9taXIudWEiLCJ6aHl0b215ci51YSIsInpwLnVhIiwienQudWEiLCJ1ZyIsImNvLnVnIiwib3IudWciLCJhYy51ZyIsInNjLnVnIiwiZ28udWciLCJuZS51ZyIsImNv'@;
put 'bS51ZyIsIm9yZy51ZyIsInVrIiwiYWMudWsiLCJjby51ayIsImdvdi51ayIsImx0ZC51ayIsIm1lLnVrIiwibmV0LnVrIiwibmhzLnVrIiwib3JnLnVrIiwicGxjLnVrIiwicG9saWNlLnVrIiwiKi5zY2gudWsiLCJ1cyIsImRuaS51cyIsImZlZC51cyIsImlzYS51cyIsImtpZHMudXMiLCJu'@;
put 'c24udXMiLCJhay51cyIsImFsLnVzIiwiYXIudXMiLCJhcy51cyIsImF6LnVzIiwiY2EudXMiLCJjby51cyIsImN0LnVzIiwiZGMudXMiLCJkZS51cyIsImZsLnVzIiwiZ2EudXMiLCJndS51cyIsImhpLnVzIiwiaWEudXMiLCJpZC51cyIsImlsLnVzIiwiaW4udXMiLCJrcy51cyIsImt5LnVz'@;
put 'IiwibGEudXMiLCJtYS51cyIsIm1kLnVzIiwibWUudXMiLCJtaS51cyIsIm1uLnVzIiwibW8udXMiLCJtcy51cyIsIm10LnVzIiwibmMudXMiLCJuZC51cyIsIm5lLnVzIiwibmgudXMiLCJuai51cyIsIm5tLnVzIiwibnYudXMiLCJueS51cyIsIm9oLnVzIiwib2sudXMiLCJvci51cyIsInBh'@;
put 'LnVzIiwicHIudXMiLCJyaS51cyIsInNjLnVzIiwic2QudXMiLCJ0bi51cyIsInR4LnVzIiwidXQudXMiLCJ2aS51cyIsInZ0LnVzIiwidmEudXMiLCJ3YS51cyIsIndpLnVzIiwid3YudXMiLCJ3eS51cyIsImsxMi5hay51cyIsImsxMi5hbC51cyIsImsxMi5hci51cyIsImsxMi5hcy51cyIs'@;
put 'ImsxMi5hei51cyIsImsxMi5jYS51cyIsImsxMi5jby51cyIsImsxMi5jdC51cyIsImsxMi5kYy51cyIsImsxMi5kZS51cyIsImsxMi5mbC51cyIsImsxMi5nYS51cyIsImsxMi5ndS51cyIsImsxMi5pYS51cyIsImsxMi5pZC51cyIsImsxMi5pbC51cyIsImsxMi5pbi51cyIsImsxMi5rcy51'@;
put 'cyIsImsxMi5reS51cyIsImsxMi5sYS51cyIsImsxMi5tYS51cyIsImsxMi5tZC51cyIsImsxMi5tZS51cyIsImsxMi5taS51cyIsImsxMi5tbi51cyIsImsxMi5tby51cyIsImsxMi5tcy51cyIsImsxMi5tdC51cyIsImsxMi5uYy51cyIsImsxMi5uZS51cyIsImsxMi5uaC51cyIsImsxMi5u'@;
put 'ai51cyIsImsxMi5ubS51cyIsImsxMi5udi51cyIsImsxMi5ueS51cyIsImsxMi5vaC51cyIsImsxMi5vay51cyIsImsxMi5vci51cyIsImsxMi5wYS51cyIsImsxMi5wci51cyIsImsxMi5zYy51cyIsImsxMi50bi51cyIsImsxMi50eC51cyIsImsxMi51dC51cyIsImsxMi52aS51cyIsImsx'@;
put 'Mi52dC51cyIsImsxMi52YS51cyIsImsxMi53YS51cyIsImsxMi53aS51cyIsImsxMi53eS51cyIsImNjLmFrLnVzIiwiY2MuYWwudXMiLCJjYy5hci51cyIsImNjLmFzLnVzIiwiY2MuYXoudXMiLCJjYy5jYS51cyIsImNjLmNvLnVzIiwiY2MuY3QudXMiLCJjYy5kYy51cyIsImNjLmRlLnVz'@;
put 'IiwiY2MuZmwudXMiLCJjYy5nYS51cyIsImNjLmd1LnVzIiwiY2MuaGkudXMiLCJjYy5pYS51cyIsImNjLmlkLnVzIiwiY2MuaWwudXMiLCJjYy5pbi51cyIsImNjLmtzLnVzIiwiY2Mua3kudXMiLCJjYy5sYS51cyIsImNjLm1hLnVzIiwiY2MubWQudXMiLCJjYy5tZS51cyIsImNjLm1pLnVz'@;
put 'IiwiY2MubW4udXMiLCJjYy5tby51cyIsImNjLm1zLnVzIiwiY2MubXQudXMiLCJjYy5uYy51cyIsImNjLm5kLnVzIiwiY2MubmUudXMiLCJjYy5uaC51cyIsImNjLm5qLnVzIiwiY2Mubm0udXMiLCJjYy5udi51cyIsImNjLm55LnVzIiwiY2Mub2gudXMiLCJjYy5vay51cyIsImNjLm9yLnVz'@;
put 'IiwiY2MucGEudXMiLCJjYy5wci51cyIsImNjLnJpLnVzIiwiY2Muc2MudXMiLCJjYy5zZC51cyIsImNjLnRuLnVzIiwiY2MudHgudXMiLCJjYy51dC51cyIsImNjLnZpLnVzIiwiY2MudnQudXMiLCJjYy52YS51cyIsImNjLndhLnVzIiwiY2Mud2kudXMiLCJjYy53di51cyIsImNjLnd5LnVz'@;
put 'IiwibGliLmFrLnVzIiwibGliLmFsLnVzIiwibGliLmFyLnVzIiwibGliLmFzLnVzIiwibGliLmF6LnVzIiwibGliLmNhLnVzIiwibGliLmNvLnVzIiwibGliLmN0LnVzIiwibGliLmRjLnVzIiwibGliLmZsLnVzIiwibGliLmdhLnVzIiwibGliLmd1LnVzIiwibGliLmhpLnVzIiwibGliLmlh'@;
put 'LnVzIiwibGliLmlkLnVzIiwibGliLmlsLnVzIiwibGliLmluLnVzIiwibGliLmtzLnVzIiwibGliLmt5LnVzIiwibGliLmxhLnVzIiwibGliLm1hLnVzIiwibGliLm1kLnVzIiwibGliLm1lLnVzIiwibGliLm1pLnVzIiwibGliLm1uLnVzIiwibGliLm1vLnVzIiwibGliLm1zLnVzIiwibGli'@;
put 'Lm10LnVzIiwibGliLm5jLnVzIiwibGliLm5kLnVzIiwibGliLm5lLnVzIiwibGliLm5oLnVzIiwibGliLm5qLnVzIiwibGliLm5tLnVzIiwibGliLm52LnVzIiwibGliLm55LnVzIiwibGliLm9oLnVzIiwibGliLm9rLnVzIiwibGliLm9yLnVzIiwibGliLnBhLnVzIiwibGliLnByLnVzIiwi'@;
put 'bGliLnJpLnVzIiwibGliLnNjLnVzIiwibGliLnNkLnVzIiwibGliLnRuLnVzIiwibGliLnR4LnVzIiwibGliLnV0LnVzIiwibGliLnZpLnVzIiwibGliLnZ0LnVzIiwibGliLnZhLnVzIiwibGliLndhLnVzIiwibGliLndpLnVzIiwibGliLnd5LnVzIiwicHZ0LmsxMi5tYS51cyIsImNodHIu'@;
put 'azEyLm1hLnVzIiwicGFyb2NoLmsxMi5tYS51cyIsImFubi1hcmJvci5taS51cyIsImNvZy5taS51cyIsImRzdC5taS51cyIsImVhdG9uLm1pLnVzIiwiZ2VuLm1pLnVzIiwibXVzLm1pLnVzIiwidGVjLm1pLnVzIiwid2FzaHRlbmF3Lm1pLnVzIiwidXkiLCJjb20udXkiLCJlZHUudXkiLCJn'@;
put 'dWIudXkiLCJtaWwudXkiLCJuZXQudXkiLCJvcmcudXkiLCJ1eiIsImNvLnV6IiwiY29tLnV6IiwibmV0LnV6Iiwib3JnLnV6IiwidmEiLCJ2YyIsImNvbS52YyIsIm5ldC52YyIsIm9yZy52YyIsImdvdi52YyIsIm1pbC52YyIsImVkdS52YyIsInZlIiwiYXJ0cy52ZSIsImJpYi52ZSIsImNv'@;
put 'LnZlIiwiY29tLnZlIiwiZTEyLnZlIiwiZWR1LnZlIiwiZmlybS52ZSIsImdvYi52ZSIsImdvdi52ZSIsImluZm8udmUiLCJpbnQudmUiLCJtaWwudmUiLCJuZXQudmUiLCJub20udmUiLCJvcmcudmUiLCJyYXIudmUiLCJyZWMudmUiLCJzdG9yZS52ZSIsInRlYy52ZSIsIndlYi52ZSIsInZn'@;
put 'IiwidmkiLCJjby52aSIsImNvbS52aSIsImsxMi52aSIsIm5ldC52aSIsIm9yZy52aSIsInZuIiwiY29tLnZuIiwibmV0LnZuIiwib3JnLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaW50LnZuIiwiYWMudm4iLCJiaXoudm4iLCJpbmZvLnZuIiwibmFtZS52biIsInByby52biIsImhlYWx0aC52'@;
put 'biIsInZ1IiwiY29tLnZ1IiwiZWR1LnZ1IiwibmV0LnZ1Iiwib3JnLnZ1Iiwid2YiLCJ3cyIsImNvbS53cyIsIm5ldC53cyIsIm9yZy53cyIsImdvdi53cyIsImVkdS53cyIsInl0IiwiXHUwNjI3XHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjI3XHUwNjJhIiwiXHUwNTcwXHUwNTYxXHUwNTc1Iiwi'@;
put 'XHUwOWFjXHUwOWJlXHUwOTgyXHUwOWIyXHUwOWJlIiwiXHUwNDMxXHUwNDMzIiwiXHUwNjI3XHUwNjQ0XHUwNjI4XHUwNjJkXHUwNjMxXHUwNjRhXHUwNjQ2IiwiXHUwNDMxXHUwNDM1XHUwNDNiIiwiXHU0ZTJkXHU1NmZkIiwiXHU0ZTJkXHU1NzBiIiwiXHUwNjI3XHUwNjQ0XHUwNjJjXHUw'@;
put 'NjMyXHUwNjI3XHUwNjI2XHUwNjMxIiwiXHUwNjQ1XHUwNjM1XHUwNjMxIiwiXHUwNDM1XHUwNDRlIiwiXHUwM2I1XHUwM2M1IiwiXHUwNjQ1XHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjJhXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI3IiwiXHUxMGQyXHUxMGQ0IiwiXHUwM2I1XHUwM2JiIiwiXHU5'@;
put 'OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjU1OVx1ODBiMi5cdTk5OTlcdTZlMmYiLCJcdTY1M2ZcdTVlOWMuXHU5OTk5XHU2ZTJmIiwiXHU1MDBiXHU0ZWJhLlx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTdkNDRcdTdlNTQu'@;
put 'XHU5OTk5XHU2ZTJmIiwiXHUwY2FkXHUwY2JlXHUwY2IwXHUwY2E0IiwiXHUwYjJkXHUwYjNlXHUwYjMwXHUwYjI0IiwiXHUwOWFkXHUwOWJlXHUwOWYwXHUwOWE0IiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0XHUwOTJlXHUwOTRkIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTRiXHUwOTI0'@;
put 'IiwiXHUwNjgwXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwZDJkXHUwZDNlXHUwZDMwXHUwZDI0XHUwZDAyIiwiXHUwOTJkXHUwOTNlXHUwOTMwXHUwOTI0IiwiXHUwNjI4XHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwNjI4XHUwNmJlXHUwNjI3XHUwNjMxXHUwNjJhIiwiXHUwYzJkXHUwYzNlXHUw'@;
put 'YzMwXHUwYzI0XHUwYzRkIiwiXHUwYWFkXHUwYWJlXHUwYWIwXHUwYWE0IiwiXHUwYTJkXHUwYTNlXHUwYTMwXHUwYTI0IiwiXHUwOWFkXHUwOWJlXHUwOWIwXHUwOWE0IiwiXHUwYjg3XHUwYmE4XHUwYmNkXHUwYmE0XHUwYmJmXHUwYmFmXHUwYmJlIiwiXHUwNjI3XHUwNmNjXHUwNjMxXHUw'@;
put 'NjI3XHUwNjQ2IiwiXHUwNjI3XHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjM5XHUwNjMxXHUwNjI3XHUwNjQyIiwiXHUwNjI3XHUwNjQ0XHUwNjI3XHUwNjMxXHUwNjJmXHUwNjQ2IiwiXHVkNTVjXHVhZDZkIiwiXHUwNDliXHUwNDMwXHUwNDM3IiwiXHUwZWE1XHUwZWIyXHUwZWE3'@;
put 'IiwiXHUwZGJkXHUwZDgyXHUwZDlhXHUwZGNmIiwiXHUwYjg3XHUwYmIyXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmM4IiwiXHUwNjI3XHUwNjQ0XHUwNjQ1XHUwNjNhXHUwNjMxXHUwNjI4IiwiXHUwNDNjXHUwNDNhXHUwNDM0IiwiXHUwNDNjXHUwNDNlXHUwNDNkIiwiXHU2ZmIzXHU5NTgwIiwi'@;
put 'XHU2ZmIzXHU5NWU4IiwiXHUwNjQ1XHUwNjQ0XHUwNjRhXHUwNjMzXHUwNjRhXHUwNjI3IiwiXHUwNjM5XHUwNjQ1XHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNmE5XHUwNjMzXHUwNjJhXHUwNjI3XHUwNjQ2IiwiXHUwNjdlXHUwNjI3XHUwNjQzXHUwNjMzXHUwNjJhXHUwNjI3XHUw'@;
put 'NjQ2IiwiXHUwNjQxXHUwNjQ0XHUwNjMzXHUwNjM3XHUwNjRhXHUwNjQ2IiwiXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQ0MFx1MDQzMy5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0MzFcdTA0NDAuXHUwNDQx'@;
put 'XHUwNDQwXHUwNDMxIiwiXHUwNDNlXHUwNDM0Llx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDQwXHUwNDQ0IiwiXHUwNjQyXHUwNjM3XHUwNjMxIiwiXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNjI5IiwiXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjM5XHUwNjQ4XHUwNjJmXHUwNmNjXHUwNmMzIiwiXHUwNjI3XHUwNjQ0XHUwNjMz'@;
put 'XHUwNjM5XHUwNjQ4XHUwNjJmXHUwNjRhXHUwNjQ3IiwiXHUwNjMzXHUwNjQ4XHUwNjJmXHUwNjI3XHUwNjQ2IiwiXHU2NWIwXHU1MmEwXHU1NzYxIiwiXHUwYjlhXHUwYmJmXHUwYjk5XHUwYmNkXHUwYjk1XHUwYmFhXHUwYmNkXHUwYmFhXHUwYmMyXHUwYmIwXHUwYmNkIiwiXHUwNjMzXHUw'@;
put 'NjQ4XHUwNjMxXHUwNjRhXHUwNjI5IiwiXHUwNjMzXHUwNjQ4XHUwNjMxXHUwNjRhXHUwNjI3IiwiXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUxOFx1MGUzOFx1MGUyM1x1MGUwMVx1MGUzNFx1MGUw'@;
put 'OC5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE3XHUwZTJiXHUwZTMyXHUwZTIzLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdc'@;
put 'dTBlMjIiLCJcdTBlMmRcdTBlMDdcdTBlMDRcdTBlNGNcdTBlMDFcdTBlMjMuXHUwZTQ0XHUwZTE3XHUwZTIyIiwiXHUwNjJhXHUwNjQ4XHUwNjQ2XHUwNjMzIiwiXHU1M2YwXHU3MDYzIiwiXHU1M2YwXHU2ZTdlIiwiXHU4MWZhXHU3MDYzIiwiXHUwNDQzXHUwNDNhXHUwNDQwIiwiXHUwNjI3'@;
put 'XHUwNjQ0XHUwNjRhXHUwNjQ1XHUwNjQ2IiwieHh4IiwieWUiLCJjb20ueWUiLCJlZHUueWUiLCJnb3YueWUiLCJuZXQueWUiLCJtaWwueWUiLCJvcmcueWUiLCJhYy56YSIsImFncmljLnphIiwiYWx0LnphIiwiY28uemEiLCJlZHUuemEiLCJnb3YuemEiLCJncm9uZGFyLnphIiwibGF3Lnph'@;
put 'IiwibWlsLnphIiwibmV0LnphIiwibmdvLnphIiwibmljLnphIiwibmlzLnphIiwibm9tLnphIiwib3JnLnphIiwic2Nob29sLnphIiwidG0uemEiLCJ3ZWIuemEiLCJ6bSIsImFjLnptIiwiYml6LnptIiwiY28uem0iLCJjb20uem0iLCJlZHUuem0iLCJnb3Yuem0iLCJpbmZvLnptIiwibWls'@;
put 'LnptIiwibmV0LnptIiwib3JnLnptIiwic2NoLnptIiwienciLCJhYy56dyIsImNvLnp3IiwiZ292Lnp3IiwibWlsLnp3Iiwib3JnLnp3IiwiYWFhIiwiYWFycCIsImFiYXJ0aCIsImFiYiIsImFiYm90dCIsImFiYnZpZSIsImFiYyIsImFibGUiLCJhYm9nYWRvIiwiYWJ1ZGhhYmkiLCJhY2Fk'@;
put 'ZW15IiwiYWNjZW50dXJlIiwiYWNjb3VudGFudCIsImFjY291bnRhbnRzIiwiYWNvIiwiYWN0b3IiLCJhZGFjIiwiYWRzIiwiYWR1bHQiLCJhZWciLCJhZXRuYSIsImFmbCIsImFmcmljYSIsImFnYWtoYW4iLCJhZ2VuY3kiLCJhaWciLCJhaXJidXMiLCJhaXJmb3JjZSIsImFpcnRlbCIsImFr'@;
put 'ZG4iLCJhbGZhcm9tZW8iLCJhbGliYWJhIiwiYWxpcGF5IiwiYWxsZmluYW56IiwiYWxsc3RhdGUiLCJhbGx5IiwiYWxzYWNlIiwiYWxzdG9tIiwiYW1hem9uIiwiYW1lcmljYW5leHByZXNzIiwiYW1lcmljYW5mYW1pbHkiLCJhbWV4IiwiYW1mYW0iLCJhbWljYSIsImFtc3RlcmRhbSIsImFu'@;
put 'YWx5dGljcyIsImFuZHJvaWQiLCJhbnF1YW4iLCJhbnoiLCJhb2wiLCJhcGFydG1lbnRzIiwiYXBwIiwiYXBwbGUiLCJhcXVhcmVsbGUiLCJhcmFiIiwiYXJhbWNvIiwiYXJjaGkiLCJhcm15IiwiYXJ0IiwiYXJ0ZSIsImFzZGEiLCJhc3NvY2lhdGVzIiwiYXRobGV0YSIsImF0dG9ybmV5Iiwi'@;
put 'YXVjdGlvbiIsImF1ZGkiLCJhdWRpYmxlIiwiYXVkaW8iLCJhdXNwb3N0IiwiYXV0aG9yIiwiYXV0byIsImF1dG9zIiwiYXZpYW5jYSIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmFuYXJlcHVibGljIiwiYmFuZCIsImJhbmsiLCJiYXIiLCJiYXJj'@;
put 'ZWxvbmEiLCJiYXJjbGF5Y2FyZCIsImJhcmNsYXlzIiwiYmFyZWZvb3QiLCJiYXJnYWlucyIsImJhc2ViYWxsIiwiYmFza2V0YmFsbCIsImJhdWhhdXMiLCJiYXllcm4iLCJiYmMiLCJiYnQiLCJiYnZhIiwiYmNnIiwiYmNuIiwiYmVhdHMiLCJiZWF1dHkiLCJiZWVyIiwiYmVudGxleSIsImJl'@;
put 'cmxpbiIsImJlc3QiLCJiZXN0YnV5IiwiYmV0IiwiYmhhcnRpIiwiYmlibGUiLCJiaWQiLCJiaWtlIiwiYmluZyIsImJpbmdvIiwiYmlvIiwiYmxhY2siLCJibGFja2ZyaWRheSIsImJsb2NrYnVzdGVyIiwiYmxvZyIsImJsb29tYmVyZyIsImJsdWUiLCJibXMiLCJibXciLCJibnBwYXJpYmFz'@;
put 'IiwiYm9hdHMiLCJib2VocmluZ2VyIiwiYm9mYSIsImJvbSIsImJvbmQiLCJib28iLCJib29rIiwiYm9va2luZyIsImJvc2NoIiwiYm9zdGlrIiwiYm9zdG9uIiwiYm90IiwiYm91dGlxdWUiLCJib3giLCJicmFkZXNjbyIsImJyaWRnZXN0b25lIiwiYnJvYWR3YXkiLCJicm9rZXIiLCJicm90'@;
put 'aGVyIiwiYnJ1c3NlbHMiLCJidWdhdHRpIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2FuY2VycmVzZWFyY2giLCJjYW5vbiIsImNh'@;
put 'cGV0b3duIiwiY2FwaXRhbCIsImNhcGl0YWxvbmUiLCJjYXIiLCJjYXJhdmFuIiwiY2FyZHMiLCJjYXJlIiwiY2FyZWVyIiwiY2FyZWVycyIsImNhcnMiLCJjYXNhIiwiY2FzZSIsImNhc2giLCJjYXNpbm8iLCJjYXRlcmluZyIsImNhdGhvbGljIiwiY2JhIiwiY2JuIiwiY2JyZSIsImNicyIs'@;
put 'ImNlbnRlciIsImNlbyIsImNlcm4iLCJjZmEiLCJjZmQiLCJjaGFuZWwiLCJjaGFubmVsIiwiY2hhcml0eSIsImNoYXNlIiwiY2hhdCIsImNoZWFwIiwiY2hpbnRhaSIsImNocmlzdG1hcyIsImNocm9tZSIsImNodXJjaCIsImNpcHJpYW5pIiwiY2lyY2xlIiwiY2lzY28iLCJjaXRhZGVsIiwi'@;
put 'Y2l0aSIsImNpdGljIiwiY2l0eSIsImNpdHllYXRzIiwiY2xhaW1zIiwiY2xlYW5pbmciLCJjbGljayIsImNsaW5pYyIsImNsaW5pcXVlIiwiY2xvdGhpbmciLCJjbG91ZCIsImNsdWIiLCJjbHVibWVkIiwiY29hY2giLCJjb2RlcyIsImNvZmZlZSIsImNvbGxlZ2UiLCJjb2xvZ25lIiwiY29t'@;
put 'Y2FzdCIsImNvbW1iYW5rIiwiY29tbXVuaXR5IiwiY29tcGFueSIsImNvbXBhcmUiLCJjb21wdXRlciIsImNvbXNlYyIsImNvbmRvcyIsImNvbnN0cnVjdGlvbiIsImNvbnN1bHRpbmciLCJjb250YWN0IiwiY29udHJhY3RvcnMiLCJjb29raW5nIiwiY29va2luZ2NoYW5uZWwiLCJjb29sIiwi'@;
put 'Y29yc2ljYSIsImNvdW50cnkiLCJjb3Vwb24iLCJjb3Vwb25zIiwiY291cnNlcyIsImNwYSIsImNyZWRpdCIsImNyZWRpdGNhcmQiLCJjcmVkaXR1bmlvbiIsImNyaWNrZXQiLCJjcm93biIsImNycyIsImNydWlzZSIsImNydWlzZXMiLCJjdWlzaW5lbGxhIiwiY3ltcnUiLCJjeW91IiwiZGFi'@;
put 'dXIiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwiLCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRp'@;
put 'c3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVjdG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3du'@;
put 'bG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgiLCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVy'@;
put 'cHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldGlzYWxhdCIsImV1cm92aXNpb24iLCJldXMiLCJldmVudHMiLCJleGNoYW5nZSIsImV4cGVydCIsImV4cG9zZWQiLCJleHByZXNzIiwiZXh0cmFzcGFjZSIsImZhZ2UiLCJmYWls'@;
put 'IiwiZmFpcndpbmRzIiwiZmFpdGgiLCJmYW1pbHkiLCJmYW4iLCJmYW5zIiwiZmFybSIsImZhcm1lcnMiLCJmYXNoaW9uIiwiZmFzdCIsImZlZGV4IiwiZmVlZGJhY2siLCJmZXJyYXJpIiwiZmVycmVybyIsImZpYXQiLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNl'@;
put 'IiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb29kbmV0d29yayIsImZvb3RiYWxs'@;
put 'IiwiZm9yZCIsImZvcmV4IiwiZm9yc2FsZSIsImZvcnVtIiwiZm91bmRhdGlvbiIsImZveCIsImZyZWUiLCJmcmVzZW5pdXMiLCJmcmwiLCJmcm9nYW5zIiwiZnJvbnRkb29yIiwiZnJvbnRpZXIiLCJmdHIiLCJmdWppdHN1IiwiZnVuIiwiZnVuZCIsImZ1cm5pdHVyZSIsImZ1dGJvbCIsImZ5'@;
put 'aSIsImdhbCIsImdhbGxlcnkiLCJnYWxsbyIsImdhbGx1cCIsImdhbWUiLCJnYW1lcyIsImdhcCIsImdhcmRlbiIsImdheSIsImdiaXoiLCJnZG4iLCJnZWEiLCJnZW50IiwiZ2VudGluZyIsImdlb3JnZSIsImdnZWUiLCJnaWZ0IiwiZ2lmdHMiLCJnaXZlcyIsImdpdmluZyIsImdsYXNzIiwi'@;
put 'Z2xlIiwiZ2xvYmFsIiwiZ2xvYm8iLCJnbWFpbCIsImdtYmgiLCJnbW8iLCJnbXgiLCJnb2RhZGR5IiwiZ29sZCIsImdvbGRwb2ludCIsImdvbGYiLCJnb28iLCJnb29keWVhciIsImdvb2ciLCJnb29nbGUiLCJnb3AiLCJnb3QiLCJncmFpbmdlciIsImdyYXBoaWNzIiwiZ3JhdGlzIiwiZ3Jl'@;
put 'ZW4iLCJncmlwZSIsImdyb2NlcnkiLCJncm91cCIsImd1YXJkaWFuIiwiZ3VjY2kiLCJndWdlIiwiZ3VpZGUiLCJndWl0YXJzIiwiZ3VydSIsImhhaXIiLCJoYW1idXJnIiwiaGFuZ291dCIsImhhdXMiLCJoYm8iLCJoZGZjIiwiaGRmY2JhbmsiLCJoZWFsdGgiLCJoZWFsdGhjYXJlIiwiaGVs'@;
put 'cCIsImhlbHNpbmtpIiwiaGVyZSIsImhlcm1lcyIsImhndHYiLCJoaXBob3AiLCJoaXNhbWl0c3UiLCJoaXRhY2hpIiwiaGl2IiwiaGt0IiwiaG9ja2V5IiwiaG9sZGluZ3MiLCJob2xpZGF5IiwiaG9tZWRlcG90IiwiaG9tZWdvb2RzIiwiaG9tZXMiLCJob21lc2Vuc2UiLCJob25kYSIsImhv'@;
put 'cnNlIiwiaG9zcGl0YWwiLCJob3N0IiwiaG9zdGluZyIsImhvdCIsImhvdGVsZXMiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUiLCJpZm0iLCJpa2FubyIsImlt'@;
put 'YW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIsImlwaXJhbmdhIiwiaXJpc2gi'@;
put 'LCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpwcnMiLCJqdWVnb3MiLCJqdW5p'@;
put 'cGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGVyIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIiLCJrcG1nIiwi'@;
put 'a3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5jaWEiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3'@;
put 'eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJs'@;
put 'aW5kZSIsImxpbmsiLCJsaXBzeSIsImxpdmUiLCJsaXZpbmciLCJsbGMiLCJsbHAiLCJsb2FuIiwibG9hbnMiLCJsb2NrZXIiLCJsb2N1cyIsImxvZnQiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5k'@;
put 'YmVjayIsImx1eGUiLCJsdXh1cnkiLCJtYWN5cyIsIm1hZHJpZCIsIm1haWYiLCJtYWlzb24iLCJtYWtldXAiLCJtYW4iLCJtYW5hZ2VtZW50IiwibWFuZ28iLCJtYXAiLCJtYXJrZXQiLCJtYXJrZXRpbmciLCJtYXJrZXRzIiwibWFycmlvdHQiLCJtYXJzaGFsbHMiLCJtYXNlcmF0aSIsIm1h'@;
put 'dHRlbCIsIm1iYSIsIm1ja2luc2V5IiwibWVkIiwibWVkaWEiLCJtZWV0IiwibWVsYm91cm5lIiwibWVtZSIsIm1lbW9yaWFsIiwibWVuIiwibWVudSIsIm1lcmNrbXNkIiwibWlhbWkiLCJtaWNyb3NvZnQiLCJtaW5pIiwibWludCIsIm1pdCIsIm1pdHN1YmlzaGkiLCJtbGIiLCJtbHMiLCJt'@;
put 'bWEiLCJtb2JpbGUiLCJtb2RhIiwibW9lIiwibW9pIiwibW9tIiwibW9uYXNoIiwibW9uZXkiLCJtb25zdGVyIiwibW9ybW9uIiwibW9ydGdhZ2UiLCJtb3Njb3ciLCJtb3RvIiwibW90b3JjeWNsZXMiLCJtb3YiLCJtb3ZpZSIsIm1zZCIsIm10biIsIm10ciIsIm11c2ljIiwibXV0dWFsIiwi'@;
put 'bmFiIiwibmFnb3lhIiwibmF0dXJhIiwibmF2eSIsIm5iYSIsIm5lYyIsIm5ldGJhbmsiLCJuZXRmbGl4IiwibmV0d29yayIsIm5ldXN0YXIiLCJuZXciLCJuZXdzIiwibmV4dCIsIm5leHRkaXJlY3QiLCJuZXh1cyIsIm5mbCIsIm5nbyIsIm5oayIsIm5pY28iLCJuaWtlIiwibmlrb24iLCJu'@;
put 'aW5qYSIsIm5pc3NhbiIsIm5pc3NheSIsIm5va2lhIiwibm9ydGh3ZXN0ZXJubXV0dWFsIiwibm9ydG9uIiwibm93Iiwibm93cnV6Iiwibm93dHYiLCJucmEiLCJucnciLCJudHQiLCJueWMiLCJvYmkiLCJvYnNlcnZlciIsIm9mZmljZSIsIm9raW5hd2EiLCJvbGF5YW4iLCJvbGF5YW5ncm91'@;
put 'cCIsIm9sZG5hdnkiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xlIiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBh'@;
put 'cnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXNzYWdlbnMiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQiLCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBp'@;
put 'Y3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1iaW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIs'@;
put 'InByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlv'@;
put 'IiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhhYiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQi'@;
put 'LCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNvaCIsInJpbCIsInJpbyIsInJpcCIsInJvY2hlciIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5Iiwi'@;
put 'cnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3VuZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNh'@;
put 'eG8iLCJzYmkiLCJzYnMiLCJzY2EiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNlIiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJz'@;
put 'ZW5lciIsInNlcnZpY2VzIiwic2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGF3Iiwic2hlbGwiLCJzaGlhIiwic2hpa3NoYSIsInNob2VzIiwic2hvcCIsInNob3BwaW5nIiwic2hvdWppIiwic2hvdyIsInNob3d0aW1lIiwic2ls'@;
put 'ayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwic29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnki'@;
put 'LCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3JhZ2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwi'@;
put 'c3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFsayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRh'@;
put 'ciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRpY2tldHMiLCJ0aWVuZGEiLCJ0aWZmYW55IiwidGlwcyIsInRpcmVz'@;
put 'IiwidGlyb2wiLCJ0am1heHgiLCJ0angiLCJ0a21heHgiLCJ0bWFsbCIsInRvZGF5IiwidG9reW8iLCJ0b29scyIsInRvcCIsInRvcmF5IiwidG9zaGliYSIsInRvdGFsIiwidG91cnMiLCJ0b3duIiwidG95b3RhIiwidG95cyIsInRyYWRlIiwidHJhZGluZyIsInRyYWluaW5nIiwidHJhdmVs'@;
put 'IiwidHJhdmVsY2hhbm5lbCIsInRyYXZlbGVycyIsInRyYXZlbGVyc2luc3VyYW5jZSIsInRydXN0IiwidHJ2IiwidHViZSIsInR1aSIsInR1bmVzIiwidHVzaHUiLCJ0dnMiLCJ1YmFuayIsInVicyIsInVuaWNvbSIsInVuaXZlcnNpdHkiLCJ1bm8iLCJ1b2wiLCJ1cHMiLCJ2YWNhdGlvbnMi'@;
put 'LCJ2YW5hIiwidmFuZ3VhcmQiLCJ2ZWdhcyIsInZlbnR1cmVzIiwidmVyaXNpZ24iLCJ2ZXJzaWNoZXJ1bmciLCJ2ZXQiLCJ2aWFqZXMiLCJ2aWRlbyIsInZpZyIsInZpa2luZyIsInZpbGxhcyIsInZpbiIsInZpcCIsInZpcmdpbiIsInZpc2EiLCJ2aXNpb24iLCJ2aXZhIiwidml2byIsInZs'@;
put 'YWFuZGVyZW4iLCJ2b2RrYSIsInZvbGtzd2FnZW4iLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwidnVlbG9zIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5u'@;
put 'ZWwiLCJ3ZWJjYW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3Jr'@;
put 'Iiwid29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhmaW5pdHkiLCJ4aWh1YW4iLCJ4aW4iLCJcdTA5MTVcdTA5NDlcdTA5MmUiLCJcdTMwYmJcdTMwZmNcdTMwZWIiLCJcdTRmNWJcdTVjNzEiLCJcdTYxNDhcdTU1ODQiLCJcdTk2YzZcdTU2ZTIiLCJc'@;
put 'dTU3MjhcdTdlYmYiLCJcdTcwYjlcdTc3MGIiLCJcdTBlMDRcdTBlMmRcdTBlMjEiLCJcdTUxNmJcdTUzNjYiLCJcdTA2NDVcdTA2NDhcdTA2NDJcdTA2MzkiLCJcdTUxNmNcdTc2Y2EiLCJcdTUxNmNcdTUzZjgiLCJcdTk5OTlcdTY4M2NcdTkxY2NcdTYyYzkiLCJcdTdmNTFcdTdhZDkiLCJc'@;
put 'dTc5ZmJcdTUyYTgiLCJcdTYyMTFcdTcyMzFcdTRmNjAiLCJcdTA0M2NcdTA0M2VcdTA0NDFcdTA0M2FcdTA0MzJcdTA0MzAiLCJcdTA0M2FcdTA0MzBcdTA0NDJcdTA0M2VcdTA0M2JcdTA0MzhcdTA0M2EiLCJcdTA0M2VcdTA0M2RcdTA0M2JcdTA0MzBcdTA0MzlcdTA0M2QiLCJcdTA0NDFc'@;
put 'dTA0MzBcdTA0MzlcdTA0NDIiLCJcdTgwNTRcdTkwMWEiLCJcdTA1ZTdcdTA1ZDVcdTA1ZGQiLCJcdTY1ZjZcdTVjMWEiLCJcdTVmYWVcdTUzNWEiLCJcdTZkZTFcdTlhNmNcdTk1MjEiLCJcdTMwZDVcdTMwYTFcdTMwYzNcdTMwYjdcdTMwZTdcdTMwZjMiLCJcdTA0M2VcdTA0NDBcdTA0MzMi'@;
put 'LCJcdTA5MjhcdTA5NDdcdTA5MWYiLCJcdTMwYjlcdTMwYzhcdTMwYTIiLCJcdTMwYTJcdTMwZGVcdTMwYmVcdTMwZjMiLCJcdWMwYmNcdWMxMzEiLCJcdTU1NDZcdTY4MDciLCJcdTU1NDZcdTVlOTciLCJcdTU1NDZcdTU3Y2UiLCJcdTA0MzRcdTA0MzVcdTA0NDJcdTA0MzgiLCJcdTMwZGRc'@;
put 'dTMwYTRcdTMwZjNcdTMwYzgiLCJcdTY1YjBcdTk1ZmIiLCJcdTViYjZcdTk2ZmIiLCJcdTA2NDNcdTA2NDhcdTA2NDUiLCJcdTRlMmRcdTY1ODdcdTdmNTEiLCJcdTRlMmRcdTRmZTEiLCJcdTVhMzFcdTRlNTAiLCJcdThjMzdcdTZiNGMiLCJcdTk2ZmJcdThhMGFcdTc2YzhcdTc5ZDEiLCJc'@;
put 'dThkMmRcdTcyNjkiLCJcdTMwYWZcdTMwZTlcdTMwYTZcdTMwYzkiLCJcdTkwMWFcdThjYTkiLCJcdTdmNTFcdTVlOTciLCJcdTA5MzhcdTA5MDJcdTA5MTdcdTA5MjBcdTA5MjgiLCJcdTk5MTBcdTUzODUiLCJcdTdmNTFcdTdlZGMiLCJcdTA0M2FcdTA0M2VcdTA0M2MiLCJcdTRlOWFcdTlh'@;
put 'NmNcdTkwMGEiLCJcdThiZmFcdTU3ZmFcdTRlOWEiLCJcdTk4ZGZcdTU0YzEiLCJcdTk4ZGVcdTUyMjlcdTZkNjYiLCJcdTYyNGJcdTY3M2EiLCJcdTA2MjdcdTA2MzFcdTA2MjdcdTA2NDVcdTA2NDNcdTA2NDgiLCJcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDRcdTA2NGFcdTA2MjdcdTA2NDYi'@;
put 'LCJcdTA2MjdcdTA2MmFcdTA2MzVcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MmEiLCJcdTA2MjhcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2MjdcdTA2MjhcdTA2NDhcdTA2MzhcdTA2MjhcdTA2NGEiLCJcdTA2NDNcdTA2MjdcdTA2MmJcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDMiLCJc'@;
put 'dTA2NDdcdTA2NDVcdTA2MzFcdTA2MjdcdTA2NDciLCJcdWIyZjdcdWNlZjQiLCJcdTY1M2ZcdTVlOWMiLCJcdTA2MzRcdTA2MjhcdTA2NDNcdTA2MjkiLCJcdTA2MjhcdTA2NGFcdTA2MmFcdTA2NDMiLCJcdTA2MzlcdTA2MzFcdTA2MjgiLCJcdTY3M2FcdTY3ODQiLCJcdTdlYzRcdTdlYzdc'@;
put 'dTY3M2FcdTY3ODQiLCJcdTUwNjVcdTVlYjciLCJcdTYyZGJcdTgwNTgiLCJcdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTU5MjdcdTYyZmYiLCJcdTMwN2ZcdTMwOTNcdTMwNmEiLCJcdTMwYjBcdTMwZmNcdTMwYjBcdTMwZWIiLCJcdTRlMTZcdTc1NGMiLCJcdTY2ZjhcdTdjNGQiLCJcdTdmNTFc'@;
put 'dTU3NDAiLCJcdWIyZjdcdWIxMzciLCJcdTMwYjNcdTMwZTAiLCJcdTU5MjlcdTRlM2JcdTY1NTkiLCJcdTZlMzhcdTYyMGYiLCJ2ZXJtXHhmNmdlbnNiZXJhdGVyIiwidmVybVx4ZjZnZW5zYmVyYXR1bmciLCJcdTRmMDFcdTRlMWEiLCJcdTRmZTFcdTYwNmYiLCJcdTU2MDlcdTkxY2NcdTU5'@;
put 'MjdcdTkxNTJcdTVlOTciLCJcdTU2MDlcdTkxY2MiLCJcdTVlN2ZcdTRlMWMiLCJcdTY1M2ZcdTUyYTEiLCJ4eXoiLCJ5YWNodHMiLCJ5YWhvbyIsInlhbWF4dW4iLCJ5YW5kZXgiLCJ5b2RvYmFzaGkiLCJ5b2dhIiwieW9rb2hhbWEiLCJ5b3UiLCJ5b3V0dWJlIiwieXVuIiwiemFwcG9zIiwi'@;
put 'emFyYSIsInplcm8iLCJ6aXAiLCJ6b25lIiwienVlcmljaCIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiZ3JhcGhveC51cyIsIiouZGV2Y2RuYWNjZXNzby5jb20iLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiaGx4LmxpdmUiLCJh'@;
put 'ZG9iZWFlbWNsb3VkLm5ldCIsImhseC5wYWdlIiwiaGx4My5wYWdlIiwiYmVlcC5wbCIsImFpcmtpdGFwcHMuY29tIiwiYWlya2l0YXBwcy1hdS5jb20iLCJhaXJraXRhcHBzLmV1IiwiYWl2ZW5jbG91ZC5jb20iLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdv'@;
put 'cmsiLCJrYXNzZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsImNsb3VkZnJvbnQubmV0IiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20iLCIqLmNvbXB1dGUtMS5hbWF6b25hd3MuY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCJ1cy1lYXN0LTEu'@;
put 'YW1hem9uYXdzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0xLmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTIuZWxh'@;
put 'c3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMy5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLXNvdXRoZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29t'@;
put 'IiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtd2VzdC0zLmVsYXN0aWNiZWFuc3Rh'@;
put 'bGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LXdlc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLXdlc3QtMS5lbGFzdGljYmVh'@;
put 'bnN0YWxrLmNvbSIsInVzLXdlc3QtMi5lbGFzdGljYmVhbnN0YWxrLmNvbSIsIiouZWxiLmFtYXpvbmF3cy5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiYXdzZ2xvYmFsYWNjZWxlcmF0b3IuY29tIiwiczMuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3'@;
put 'cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1jYS1jZW50cmFsLTEuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLWV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMtZXh0ZXJuYWwtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11'@;
put 'cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy13ZXN0LTIuYW1h'@;
put 'em9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmV1LWNlbnRyYWwtMS5hbWF6b25h'@;
put 'd3MuY29tIiwiczMuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0'@;
put 'LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmNhLWNl'@;
put 'bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LXdlc3Qt'@;
put 'My5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS11cy1lYXN0LTEuYW1hem9uYXdz'@;
put 'LmNvbSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwi'@;
put 'czMtd2Vic2l0ZS1hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJz'@;
put 'aXRlLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtd2Vz'@;
put 'dC0zLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidDNsM3AwcnQubmV0IiwidGVsZS5hbXVuZS5vcmciLCJhcGlnZWUuaW8iLCJzaWlpdGVzLmNvbSIsImFwcHNwYWNlaG9zdGVkLmNvbSIsImFwcHNwYWNldXNlcmNvbnRlbnQuY29tIiwiYXBw'@;
put 'dWRvLm5ldCIsIm9uLWFwdGlibGUuY29tIiwidXNlci5hc2VpbmV0Lm5lLmpwIiwiZ3YudmMiLCJkLmd2LnZjIiwidXNlci5wYXJ0eS5ldXMiLCJwaW1pZW50YS5vcmciLCJwb2l2cm9uLm9yZyIsInBvdGFnZXIub3JnIiwic3dlZXRwZXBwZXIub3JnIiwibXlhc3VzdG9yLmNvbSIsImNkbi5w'@;
put 'cm9kLmF0bGFzc2lhbi1kZXYubmV0IiwidHJhbnNsYXRlZC5wYWdlIiwibXlmcml0ei5uZXQiLCJvbmF2c3RhY2submV0IiwiKi5hd2Rldi5jYSIsIiouYWR2aXNvci53cyIsImVjb21tZXJjZS1zaG9wLnBsIiwiYi1kYXRhLmlvIiwiYmFja3BsYW5lYXBwLmlvIiwiYmFsZW5hLWRldmljZXMu'@;
put 'Y29tIiwicnMuYmEiLCIqLmJhbnphaS5jbG91ZCIsImFwcC5iYW56YWljbG91ZC5pbyIsIiouYmFja3lhcmRzLmJhbnphaWNsb3VkLmlvIiwiYmFzZS5lYyIsIm9mZmljaWFsLmVjIiwiYnV5c2hvcC5qcCIsImZhc2hpb25zdG9yZS5qcCIsImhhbmRjcmFmdGVkLmpwIiwia2F3YWlpc2hvcC5q'@;
put 'cCIsInN1cGVyc2FsZS5qcCIsInRoZXNob3AuanAiLCJzaG9wc2VsZWN0Lm5ldCIsImJhc2Uuc2hvcCIsIiouYmVnZXQuYXBwIiwiYmV0YWluYWJveC5jb20iLCJibnIubGEiLCJiaXRidWNrZXQuaW8iLCJibGFja2JhdWRjZG4ubmV0Iiwib2YuamUiLCJibHVlYml0ZS5pbyIsImJvb21sYS5u'@;
put 'ZXQiLCJib3V0aXIuY29tIiwiYm94ZnVzZS5pbyIsInNxdWFyZTcuY2giLCJicGxhY2VkLmNvbSIsImJwbGFjZWQuZGUiLCJzcXVhcmU3LmRlIiwiYnBsYWNlZC5uZXQiLCJzcXVhcmU3Lm5ldCIsInNob3AuYnJlbmRseS5ycyIsImJyb3dzZXJzYWZldHltYXJrLmlvIiwidWswLmJpZ3YuaW8i'@;
put 'LCJkaC5ieXRlbWFyay5jby51ayIsInZtLmJ5dGVtYXJrLmNvLnVrIiwiY2FmanMuY29tIiwibXljZC5ldSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUubXAiLCJhZS5vcmciLCJici5jb20iLCJjbi5jb20iLCJjb20uZGUiLCJjb20uc2UiLCJkZS5jb20iLCJl'@;
put 'dS5jb20iLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJqcG4uY29tIiwibWV4LmNvbSIsInJ1LmNvbSIsInNhLmNvbSIsInNlLm5ldCIsInVrLmNvbSIsInVrLm5ldCIsInVzLmNvbSIsInphLmJ6IiwiemEuY29tIiwiYXIuY29tIiwiaHUuY29tIiwia3IuY29tIiwibm8uY29tIiwicWMu'@;
put 'Y29tIiwidXkuY29tIiwiYWZyaWNhLmNvbSIsImdyLmNvbSIsImluLm5ldCIsIndlYi5pbiIsInVzLm9yZyIsImNvLmNvbSIsImF1cy5iYXNrZXRiYWxsIiwibnouYmFza2V0YmFsbCIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJjLmxhIiwiY2VydG1nci5vcmciLCJjeC51YSIsImRpc2NvdXJz'@;
put 'ZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xldmVyYXBwcy5pbyIsImNsZXJrLmFwcCIsImNsZXJrc3RhZ2UuYXBwIiwiKi5sY2wuZGV2IiwiKi5sY2xzdGFnZS5kZXYiLCIqLnN0Zy5kZXYiLCIqLnN0Z3N0YWdlLmRldiIsImNsaWNrcmlzaW5nLm5ldCIsImM2Ni5tZSIsImNsb3VkNjYu'@;
put 'd3MiLCJjbG91ZDY2LnpvbmUiLCJqZGV2Y2xvdWQuY29tIiwid3BkZXZjbG91ZC5jb20iLCJjbG91ZGFjY2Vzcy5ob3N0IiwiZnJlZXNpdGUuaG9zdCIsImNsb3VkYWNjZXNzLm5ldCIsImNsb3VkY29udHJvbGxlZC5jb20iLCJjbG91ZGNvbnRyb2xhcHAuY29tIiwiKi5jbG91ZGVyYS5zaXRl'@;
put 'IiwicGFnZXMuZGV2IiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJ3b3JrZXJzLmRldiIsInduZXh0LmFwcCIsImNvLmNhIiwiKi5vdGFwLmNvIiwiY28uY3oiLCJjLmNkbjc3Lm9yZyIsImNkbjc3LXNzbC5uZXQiLCJyLmNkbjc3Lm5ldCIsInJzYy5jZG43Ny5vcmciLCJzc2wub3JpZ2luLmNkbjc3'@;
put 'LXNlY3VyZS5vcmciLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJpeiIsImNsb3VkbnMuY2x1YiIsImNsb3VkbnMuY2MiLCJjbG91ZG5zLmV1IiwiY2xvdWRucy5pbiIsImNsb3VkbnMuaW5mbyIsImNsb3VkbnMub3JnIiwiY2xvdWRucy5wcm8iLCJjbG91ZG5zLnB3IiwiY2xvdWRucy51cyIs'@;
put 'ImNucHkuZ2RuIiwiY29kZWJlcmcucGFnZSIsImNvLm5sIiwiY28ubm8iLCJ3ZWJob3N0aW5nLmJlIiwiaG9zdGluZy1jbHVzdGVyLm5sIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkeW5hbWlzY2hlcy1k'@;
put 'bnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1kbnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJyZWFsbS5jeiIsIiouY3J5cHRvbm9taWMubmV0IiwiY3VwY2Fr'@;
put 'ZS5pcyIsImN1cnYuZGV2IiwiKi5jdXN0b21lci1vY2kuY29tIiwiKi5vY2kuY3VzdG9tZXItb2NpLmNvbSIsIioub2NwLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcy5jdXN0b21lci1vY2kuY29tIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRlIiwiZm53ay5zaXRlIiwiZm9saW9uZXR3b3JrLnNp'@;
put 'dGUiLCJwbGF0Zm9ybTAuYXBwIiwiZGFwbGllLm1lIiwibG9jYWxob3N0LmRhcGxpZS5tZSIsImRhdHRvbG9jYWwuY29tIiwiZGF0dG9yZWxheS5jb20iLCJkYXR0b3dlYi5jb20iLCJteWRhdHRvLmNvbSIsImRhdHRvbG9jYWwubmV0IiwibXlkYXR0by5uZXQiLCJiaXouZGsiLCJjby5kayIs'@;
put 'ImZpcm0uZGsiLCJyZWcuZGsiLCJzdG9yZS5kayIsImR5bmRucy5kYXBwbm9kZS5pbyIsIiouZGFwcHMuZWFydGgiLCIqLmJ6ei5kYXBwcy5lYXJ0aCIsImJ1aWx0d2l0aGRhcmsuY29tIiwiZGVtby5kYXRhZGV0ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNr'@;
put 'Lm1lIiwiZGRuczUuY29tIiwiZGViaWFuLm5ldCIsImRlbm8uZGV2IiwiZGVuby1zdGFnaW5nLmRldiIsImRlZHluLmlvIiwiZGV0YS5hcHAiLCJkZXRhLmRldiIsIioucnNzLm15LmlkIiwiKi5kaWhlci5zb2x1dGlvbnMiLCJkaXNjb3Jkc2F5cy5jb20iLCJkaXNjb3Jkc2V6LmNvbSIsImpv'@;
put 'emkuYml6IiwiZG5zaG9tZS5kZSIsIm9ubGluZS50aCIsInNob3AudGgiLCJkcmF5ZGRucy5jb20iLCJzaG9wYXJlbmEucGwiLCJkcmVhbWhvc3RlcnMuY29tIiwibXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiYmlwLnNoIiwiYml0YnJpZGdlLm5ldCIs'@;
put 'ImR5LmZpIiwidHVuay5vcmciLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwiZHluZG5zLW9mZmljZS5j'@;
put 'b20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJkeW5kbnMuYml6IiwiZHluZG5zLmluZm8iLCJkeW5kbnMub3JnIiwiZHluZG5zLnR2'@;
put 'IiwiYXQtYmFuZC1jYW1wLm5ldCIsImF0aC5jeCIsImJhcnJlbC1vZi1rbm93bGVkZ2UuaW5mbyIsImJhcnJlbGwtb2Yta25vd2xlZGdlLmluZm8iLCJiZXR0ZXItdGhhbi50diIsImJsb2dkbnMuY29tIiwiYmxvZ2Rucy5uZXQiLCJibG9nZG5zLm9yZyIsImJsb2dzaXRlLm9yZyIsImJvbGRs'@;
put 'eWdvaW5nbm93aGVyZS5vcmciLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImNlY2hpcmUuY29tIiwiZG5zYWxpYXMuY29tIiwiZG5zYWxpYXMubmV0IiwiZG5zYWxpYXMub3JnIiwiZG5zZG9qby5jb20iLCJkbnNkb2pvLm5ldCIsImRuc2Rvam8ub3JnIiwiZG9lcy1pdC5uZXQi'@;
put 'LCJkb2VzbnRleGlzdC5jb20iLCJkb2VzbnRleGlzdC5vcmciLCJkb250ZXhpc3QuY29tIiwiZG9udGV4aXN0Lm5ldCIsImRvbnRleGlzdC5vcmciLCJkb29tZG5zLmNvbSIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bi1vLXNhdXIuY29tIiwiZHluYWxpYXMuY29tIiwiZHluYWxp'@;
put 'YXMubmV0IiwiZHluYWxpYXMub3JnIiwiZHluYXRob21lLm5ldCIsImR5bmRucy53cyIsImVuZG9maW50ZXJuZXQubmV0IiwiZW5kb2ZpbnRlcm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImVzdC1hLWxhLW1haXNvbi5jb20iLCJlc3QtYS1sYS1tYXNpb24uY29tIiwiZXN0LWxl'@;
put 'LXBhdHJvbi5jb20iLCJlc3QtbW9uLWJsb2d1ZXVyLmNvbSIsImZvci1iZXR0ZXIuYml6IiwiZm9yLW1vcmUuYml6IiwiZm9yLW91ci5pbmZvIiwiZm9yLXNvbWUuYml6IiwiZm9yLXRoZS5iaXoiLCJmb3Jnb3QuaGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJmcm9tLWFrLmNvbSIsImZy'@;
put 'b20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWF6Lm5ldCIsImZyb20tY2EuY29tIiwiZnJvbS1jby5uZXQiLCJmcm9tLWN0LmNvbSIsImZyb20tZGMuY29tIiwiZnJvbS1kZS5jb20iLCJmcm9tLWZsLmNvbSIsImZyb20tZ2EuY29tIiwiZnJvbS1oaS5jb20iLCJmcm9tLWlhLmNvbSIs'@;
put 'ImZyb20taWQuY29tIiwiZnJvbS1pbC5jb20iLCJmcm9tLWluLmNvbSIsImZyb20ta3MuY29tIiwiZnJvbS1reS5jb20iLCJmcm9tLWxhLm5ldCIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1lLm9yZyIsImZyb20tbWkuY29tIiwiZnJvbS1tbi5jb20iLCJmcm9tLW1vLmNv'@;
put 'bSIsImZyb20tbXMuY29tIiwiZnJvbS1tdC5jb20iLCJmcm9tLW5jLmNvbSIsImZyb20tbmQuY29tIiwiZnJvbS1uZS5jb20iLCJmcm9tLW5oLmNvbSIsImZyb20tbmouY29tIiwiZnJvbS1ubS5jb20iLCJmcm9tLW52LmNvbSIsImZyb20tbnkubmV0IiwiZnJvbS1vaC5jb20iLCJmcm9tLW9r'@;
put 'LmNvbSIsImZyb20tb3IuY29tIiwiZnJvbS1wYS5jb20iLCJmcm9tLXByLmNvbSIsImZyb20tcmkuY29tIiwiZnJvbS1zYy5jb20iLCJmcm9tLXNkLmNvbSIsImZyb20tdG4uY29tIiwiZnJvbS10eC5jb20iLCJmcm9tLXV0LmNvbSIsImZyb20tdmEuY29tIiwiZnJvbS12dC5jb20iLCJmcm9t'@;
put 'LXdhLmNvbSIsImZyb20td2kuY29tIiwiZnJvbS13di5jb20iLCJmcm9tLXd5LmNvbSIsImZ0cGFjY2Vzcy5jYyIsImZ1ZXR0ZXJ0ZGFzbmV0ei5kZSIsImdhbWUtaG9zdC5vcmciLCJnYW1lLXNlcnZlci5jYyIsImdldG15aXAuY29tIiwiZ2V0cy1pdC5uZXQiLCJnby5keW5kbnMub3JnIiwi'@;
put 'Z290ZG5zLmNvbSIsImdvdGRucy5vcmciLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhhbS1yYWRpby1vcC5uZXQiLCJoZXJlLWZvci1tb3JlLmluZm8iLCJob2JieS1zaXRlLmNvbSIsImhvYmJ5LXNpdGUub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiaG9tZWRucy5vcmci'@;
put 'LCJob21lZnRwLm5ldCIsImhvbWVmdHAub3JnIiwiaG9tZWlwLm5ldCIsImhvbWVsaW51eC5jb20iLCJob21lbGludXgubmV0IiwiaG9tZWxpbnV4Lm9yZyIsImhvbWV1bml4LmNvbSIsImhvbWV1bml4Lm5ldCIsImhvbWV1bml4Lm9yZyIsImlhbWFsbGFtYS5jb20iLCJpbi10aGUtYmFuZC5u'@;
put 'ZXQiLCJpcy1hLWFuYXJjaGlzdC5jb20iLCJpcy1hLWJsb2dnZXIuY29tIiwiaXMtYS1ib29ra2VlcGVyLmNvbSIsImlzLWEtYnJ1aW5zZmFuLm9yZyIsImlzLWEtYnVsbHMtZmFuLmNvbSIsImlzLWEtY2FuZGlkYXRlLm9yZyIsImlzLWEtY2F0ZXJlci5jb20iLCJpcy1hLWNlbHRpY3NmYW4u'@;
put 'b3JnIiwiaXMtYS1jaGVmLmNvbSIsImlzLWEtY2hlZi5uZXQiLCJpcy1hLWNoZWYub3JnIiwiaXMtYS1jb25zZXJ2YXRpdmUuY29tIiwiaXMtYS1jcGEuY29tIiwiaXMtYS1jdWJpY2xlLXNsYXZlLmNvbSIsImlzLWEtZGVtb2NyYXQuY29tIiwiaXMtYS1kZXNpZ25lci5jb20iLCJpcy1hLWRv'@;
put 'Y3Rvci5jb20iLCJpcy1hLWZpbmFuY2lhbGFkdmlzb3IuY29tIiwiaXMtYS1nZWVrLmNvbSIsImlzLWEtZ2Vlay5uZXQiLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5jb20iLCJpcy1h'@;
put 'LWtuaWdodC5vcmciLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtbGxhbWEuY29tIiwiaXMtYS1tdXNpY2lhbi5jb20iLCJpcy1hLW5hc2Nh'@;
put 'cmZhbi5jb20iLCJpcy1hLW51cnNlLmNvbSIsImlzLWEtcGFpbnRlci5jb20iLCJpcy1hLXBhdHNmYW4ub3JnIiwiaXMtYS1wZXJzb25hbHRyYWluZXIuY29tIiwiaXMtYS1waG90b2dyYXBoZXIuY29tIiwiaXMtYS1wbGF5ZXIuY29tIiwiaXMtYS1yZXB1YmxpY2FuLmNvbSIsImlzLWEtcm9j'@;
put 'a3N0YXIuY29tIiwiaXMtYS1zb2NpYWxpc3QuY29tIiwiaXMtYS1zb3hmYW4ub3JnIiwiaXMtYS1zdHVkZW50LmNvbSIsImlzLWEtdGVhY2hlci5jb20iLCJpcy1hLXRlY2hpZS5jb20iLCJpcy1hLXRoZXJhcGlzdC5jb20iLCJpcy1hbi1hY2NvdW50YW50LmNvbSIsImlzLWFuLWFjdG9yLmNv'@;
put 'bSIsImlzLWFuLWFjdHJlc3MuY29tIiwiaXMtYW4tYW5hcmNoaXN0LmNvbSIsImlzLWFuLWFydGlzdC5jb20iLCJpcy1hbi1lbmdpbmVlci5jb20iLCJpcy1hbi1lbnRlcnRhaW5lci5jb20iLCJpcy1ieS51cyIsImlzLWNlcnRpZmllZC5jb20iLCJpcy1mb3VuZC5vcmciLCJpcy1nb25lLmNv'@;
put 'bSIsImlzLWludG8tYW5pbWUuY29tIiwiaXMtaW50by1jYXJzLmNvbSIsImlzLWludG8tY2FydG9vbnMuY29tIiwiaXMtaW50by1nYW1lcy5jb20iLCJpcy1sZWV0LmNvbSIsImlzLWxvc3Qub3JnIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zYXZlZC5vcmciLCJpcy1zbGljay5jb20i'@;
put 'LCJpcy11YmVybGVldC5jb20iLCJpcy12ZXJ5LWJhZC5vcmciLCJpcy12ZXJ5LWV2aWwub3JnIiwiaXMtdmVyeS1nb29kLm9yZyIsImlzLXZlcnktbmljZS5vcmciLCJpcy12ZXJ5LXN3ZWV0Lm9yZyIsImlzLXdpdGgtdGhlYmFuZC5jb20iLCJpc2EtZ2Vlay5jb20iLCJpc2EtZ2Vlay5uZXQi'@;
put 'LCJpc2EtZ2Vlay5vcmciLCJpc2EtaG9ja2V5bnV0LmNvbSIsImlzc21hcnRlcnRoYW55b3UuY29tIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJraWNrcy1hc3MubmV0Iiwia2lja3MtYXNzLm9yZyIsImtub3dzaXRhbGwuaW5mbyIsImxhbmQtNC1zYWxlLnVzIiwibGVidGltbmV0'@;
put 'ei5kZSIsImxlaXR1bmdzZW4uZGUiLCJsaWtlcy1waWUuY29tIiwibGlrZXNjYW5keS5jb20iLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJtaXNjb25mdXNlZC5vcmciLCJteXBldHMud3MiLCJteXBob3Rvcy5jYyIsIm5lYXQtdXJsLmNvbSIsIm9mZmljZS1vbi10aGUubmV0Iiwib24tdGhl'@;
put 'LXdlYi50diIsInBvZHpvbmUubmV0IiwicG9kem9uZS5vcmciLCJyZWFkbXlibG9nLm9yZyIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2NyYXBwZXItc2l0ZS5uZXQiLCJzY3JhcHBpbmcuY2MiLCJzZWxmaXAuYml6Iiwic2VsZmlwLmNvbSIsInNlbGZpcC5pbmZvIiwic2VsZmlwLm5ldCIs'@;
put 'InNlbGZpcC5vcmciLCJzZWxscy1mb3ItbGVzcy5jb20iLCJzZWxscy1mb3ItdS5jb20iLCJzZWxscy1pdC5uZXQiLCJzZWxsc3lvdXJob21lLm9yZyIsInNlcnZlYmJzLmNvbSIsInNlcnZlYmJzLm5ldCIsInNlcnZlYmJzLm9yZyIsInNlcnZlZnRwLm5ldCIsInNlcnZlZnRwLm9yZyIsInNl'@;
put 'cnZlZ2FtZS5vcmciLCJzaGFja25ldC5udSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJzdHVmZi00LXNhbGUub3JnIiwic3R1ZmYtNC1zYWxlLnVzIiwidGVhY2hlcy15b2dhLmNvbSIsInRocnVoZXJlLm5ldCIsInRyYWV1bXRnZXJhZGUuZGUiLCJ3ZWJob3AuYml6'@;
put 'Iiwid2ViaG9wLmluZm8iLCJ3ZWJob3AubmV0Iiwid2ViaG9wLm9yZyIsIndvcnNlLXRoYW4udHYiLCJ3cml0ZXN0aGlzYmxvZy5jb20iLCJkZG5zcy5kZSIsImR5bi5kZG5zcy5kZSIsImR5bmRucy5kZG5zcy5kZSIsImR5bmRuczEuZGUiLCJkeW4taXAyNC5kZSIsImhvbWUtd2Vic2VydmVy'@;
put 'LmRlIiwiZHluLmhvbWUtd2Vic2VydmVyLmRlIiwibXlob21lLXNlcnZlci5kZSIsImRkbnNzLm9yZyIsImRlZmluaW1hLm5ldCIsImRlZmluaW1hLmlvIiwib25kaWdpdGFsb2NlYW4uYXBwIiwiKi5kaWdpdGFsb2NlYW5zcGFjZXMuY29tIiwiYmNpLmRuc3RyYWNlLnBybyIsImRkbnNmcmVl'@;
put 'LmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNvbSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRu'@;
put 'cy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJlY3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiYmxvZ3NpdGUueHl6IiwiZHludjYubmV0IiwiZTQuY3oiLCJlZXJvLm9ubGluZSIsImVlcm8tc3RhZ2Uub25saW5lIiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290'@;
put 'LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsIm9ucmVkLm9uZSIsInN0YWdpbmcub25yZWQub25lIiwiZXUuZW5jb3dheS5jbG91ZCIsImV1Lm9yZyIsImFsLmV1Lm9yZyIsImFzc28uZXUub3JnIiwiYXQuZXUub3Jn'@;
put 'IiwiYXUuZXUub3JnIiwiYmUuZXUub3JnIiwiYmcuZXUub3JnIiwiY2EuZXUub3JnIiwiY2QuZXUub3JnIiwiY2guZXUub3JnIiwiY24uZXUub3JnIiwiY3kuZXUub3JnIiwiY3ouZXUub3JnIiwiZGUuZXUub3JnIiwiZGsuZXUub3JnIiwiZWR1LmV1Lm9yZyIsImVlLmV1Lm9yZyIsImVzLmV1'@;
put 'Lm9yZyIsImZpLmV1Lm9yZyIsImZyLmV1Lm9yZyIsImdyLmV1Lm9yZyIsImhyLmV1Lm9yZyIsImh1LmV1Lm9yZyIsImllLmV1Lm9yZyIsImlsLmV1Lm9yZyIsImluLmV1Lm9yZyIsImludC5ldS5vcmciLCJpcy5ldS5vcmciLCJpdC5ldS5vcmciLCJqcC5ldS5vcmciLCJrci5ldS5vcmciLCJs'@;
put 'dC5ldS5vcmciLCJsdS5ldS5vcmciLCJsdi5ldS5vcmciLCJtYy5ldS5vcmciLCJtZS5ldS5vcmciLCJtay5ldS5vcmciLCJtdC5ldS5vcmciLCJteS5ldS5vcmciLCJuZXQuZXUub3JnIiwibmcuZXUub3JnIiwibmwuZXUub3JnIiwibm8uZXUub3JnIiwibnouZXUub3JnIiwicGFyaXMuZXUu'@;
put 'b3JnIiwicGwuZXUub3JnIiwicHQuZXUub3JnIiwicS1hLmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2Rl'@;
put 'LmNvbSIsImV1LTIuZXZlbm5vZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwidHdtYWlsLmNjIiwidHdtYWls'@;
put 'Lm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJvbmZhYnJpY2EuY29tIiwiYXBwcy5mYnNieC5jb20iLCJydS5uZXQiLCJhZHlnZXlhLnJ1IiwiYmFzaGtpcmlhLnJ1IiwiYmlyLnJ1IiwiY2JnLnJ1IiwiY29tLnJ1IiwiZGFnZXN0YW4ucnUiLCJncm96bnku'@;
put 'cnUiLCJrYWxteWtpYS5ydSIsImt1c3RhbmFpLnJ1IiwibWFyaW5lLnJ1IiwibW9yZG92aWEucnUiLCJtc2sucnUiLCJteXRpcy5ydSIsIm5hbGNoaWsucnUiLCJub3YucnUiLCJweWF0aWdvcnNrLnJ1Iiwic3BiLnJ1IiwidmxhZGlrYXZrYXoucnUiLCJ2bGFkaW1pci5ydSIsImFia2hhemlh'@;
put 'LnN1IiwiYWR5Z2V5YS5zdSIsImFrdHl1Ymluc2suc3UiLCJhcmtoYW5nZWxzay5zdSIsImFybWVuaWEuc3UiLCJhc2hnYWJhZC5zdSIsImF6ZXJiYWlqYW4uc3UiLCJiYWxhc2hvdi5zdSIsImJhc2hraXJpYS5zdSIsImJyeWFuc2suc3UiLCJidWtoYXJhLnN1IiwiY2hpbWtlbnQuc3UiLCJk'@;
put 'YWdlc3Rhbi5zdSIsImVhc3Qta2F6YWtoc3Rhbi5zdSIsImV4bmV0LnN1IiwiZ2VvcmdpYS5zdSIsImdyb3pueS5zdSIsIml2YW5vdm8uc3UiLCJqYW1ieWwuc3UiLCJrYWxteWtpYS5zdSIsImthbHVnYS5zdSIsImthcmFjb2wuc3UiLCJrYXJhZ2FuZGEuc3UiLCJrYXJlbGlhLnN1Iiwia2hh'@;
put 'a2Fzc2lhLnN1Iiwia3Jhc25vZGFyLnN1Iiwia3VyZ2FuLnN1Iiwia3VzdGFuYWkuc3UiLCJsZW51Zy5zdSIsIm1hbmd5c2hsYWsuc3UiLCJtb3Jkb3ZpYS5zdSIsIm1zay5zdSIsIm11cm1hbnNrLnN1IiwibmFsY2hpay5zdSIsIm5hdm9pLnN1Iiwibm9ydGgta2F6YWtoc3Rhbi5zdSIsIm5v'@;
put 'di5zdSIsIm9ibmluc2suc3UiLCJwZW56YS5zdSIsInBva3JvdnNrLnN1Iiwic29jaGkuc3UiLCJzcGIuc3UiLCJ0YXNoa2VudC5zdSIsInRlcm1lei5zdSIsInRvZ2xpYXR0aS5zdSIsInRyb2l0c2suc3UiLCJ0c2VsaW5vZ3JhZC5zdSIsInR1bGEuc3UiLCJ0dXZhLnN1IiwidmxhZGlrYXZr'@;
put 'YXouc3UiLCJ2bGFkaW1pci5zdSIsInZvbG9nZGEuc3UiLCJjaGFubmVsc2R2ci5uZXQiLCJ1LmNoYW5uZWxzZHZyLm5ldCIsImVkZ2Vjb21wdXRlLmFwcCIsImZhc3RseS10ZXJyYXJpdW0uY29tIiwiZmFzdGx5bGIubmV0IiwibWFwLmZhc3RseWxiLm5ldCIsImZyZWV0bHMuZmFzdGx5Lm5l'@;
put 'dCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJnbG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0dnBzLXNlcnZlci5jb20iLCJmYXN0dnBzLmhvc3QiLCJt'@;
put 'eWZhc3QuaG9zdCIsImZhc3R2cHMuc2l0ZSIsIm15ZmFzdC5zcGFjZSIsImZlZG9yYWluZnJhY2xvdWQub3JnIiwiZmVkb3JhcGVvcGxlLm9yZyIsImNsb3VkLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLmZlZG9yYXByb2plY3Qub3JnIiwiYXBwLm9zLnN0Zy5mZWRvcmFwcm9qZWN0Lm9y'@;
put 'ZyIsImNvbm4udWsiLCJjb3Byby51ayIsImhvc3AudWsiLCJteWRvYmlzcy5jb20iLCJmaC1tdWVuc3Rlci5pbyIsImZpbGVnZWFyLm1lIiwiZmlsZWdlYXItYXUubWUiLCJmaWxlZ2Vhci1kZS5tZSIsImZpbGVnZWFyLWdiLm1lIiwiZmlsZWdlYXItaWUubWUiLCJmaWxlZ2Vhci1qcC5tZSIs'@;
put 'ImZpbGVnZWFyLXNnLm1lIiwiZmlyZWJhc2VhcHAuY29tIiwiZmlyZXdlYi5hcHAiLCJmbGFwLmlkIiwib25mbGFzaGRyaXZlLmFwcCIsImZsZHJ2LmNvbSIsImZseS5kZXYiLCJlZGdlYXBwLm5ldCIsInNody5pbyIsImZseW5uaG9zdGluZy5uZXQiLCJmb3JnZWJsb2Nrcy5jb20iLCJpZC5m'@;
put 'b3JnZXJvY2suaW8iLCJmcmFtZXIuYXBwIiwiZnJhbWVyY2FudmFzLmNvbSIsIiouZnJ1c2t5LmRlIiwicmF2cGFnZS5jby5pbCIsIjBlLnZjIiwiZnJlZWJveC1vcy5jb20iLCJmcmVlYm94b3MuY29tIiwiZmJ4LW9zLmZyIiwiZmJ4b3MuZnIiLCJmcmVlYm94LW9zLmZyIiwiZnJlZWJveG9z'@;
put 'LmZyIiwiZnJlZWRlc2t0b3Aub3JnIiwiZnJlZW15aXAuY29tIiwid2llbi5mdW5rZmV1ZXIuYXQiLCIqLmZ1dHVyZWNtcy5hdCIsIiouZXguZnV0dXJlY21zLmF0IiwiKi5pbi5mdXR1cmVjbXMuYXQiLCJmdXR1cmVob3N0aW5nLmF0IiwiZnV0dXJlbWFpbGluZy5hdCIsIiouZXgub3J0c2lu'@;
put 'Zm8uYXQiLCIqLmt1bmRlbi5vcnRzaW5mby5hdCIsIiouc3RhdGljcy5jbG91ZCIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2'@;
put 'aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsiLCJyb3lhbC1jb21taXNzaW9uLnVrIiwiY2FtcGFpZ24uZ292LnVrIiwic2VydmljZS5nb3YudWsiLCJhcGkuZ292LnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwi'@;
put 'bGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImdob3N0LmlvIiwiZ3NqLmJ6IiwiZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwiZ2l0aHVicHJldmlldy5kZXYiLCJnaXRodWIuaW8iLCJnaXRsYWIuaW8iLCJnaXRhcHAuc2kiLCJnaXRwYWdlLnNpIiwiZ2xpdGNoLm1lIiwibm9nLmNvbW11bml0eSIs'@;
put 'ImNvLnJvIiwic2hvcC5ybyIsImxvbGlwb3AuaW8iLCJhbmdyeS5qcCIsImJhYnlibHVlLmpwIiwiYmFieW1pbGsuanAiLCJiYWNrZHJvcC5qcCIsImJhbWJpbmEuanAiLCJiaXR0ZXIuanAiLCJibHVzaC5qcCIsImJvby5qcCIsImJveS5qcCIsImJveWZyaWVuZC5qcCIsImJ1dC5qcCIsImNh'@;
put 'bmR5cG9wLmpwIiwiY2Fwb28uanAiLCJjYXRmb29kLmpwIiwiY2hlYXAuanAiLCJjaGljYXBwYS5qcCIsImNoaWxsb3V0LmpwIiwiY2hpcHMuanAiLCJjaG93ZGVyLmpwIiwiY2h1LmpwIiwiY2lhby5qcCIsImNvY290dGUuanAiLCJjb29sYmxvZy5qcCIsImNyYW5reS5qcCIsImN1dGVnaXJs'@;
put 'LmpwIiwiZGFhLmpwIiwiZGVjYS5qcCIsImRlY2kuanAiLCJkaWdpY2suanAiLCJlZ29pc20uanAiLCJmYWtlZnVyLmpwIiwiZmVtLmpwIiwiZmxpZXIuanAiLCJmbG9wcHkuanAiLCJmb29sLmpwIiwiZnJlbmNoa2lzcy5qcCIsImdpcmxmcmllbmQuanAiLCJnaXJseS5qcCIsImdsb29teS5q'@;
put 'cCIsImdvbm5hLmpwIiwiZ3JlYXRlci5qcCIsImhhY2NhLmpwIiwiaGVhdnkuanAiLCJoZXIuanAiLCJoaWhvLmpwIiwiaGlwcHkuanAiLCJob2x5LmpwIiwiaHVuZ3J5LmpwIiwiaWN1cnVzLmpwIiwiaXRpZ28uanAiLCJqZWxseWJlYW4uanAiLCJraWtpcmFyYS5qcCIsImtpbGwuanAiLCJr'@;
put 'aWxvLmpwIiwia3Vyb24uanAiLCJsaXR0bGVzdGFyLmpwIiwibG9saXBvcG1jLmpwIiwibG9saXRhcHVuay5qcCIsImxvbW8uanAiLCJsb3ZlcG9wLmpwIiwibG92ZXNpY2suanAiLCJtYWluLmpwIiwibW9kcy5qcCIsIm1vbmQuanAiLCJtb25nb2xpYW4uanAiLCJtb28uanAiLCJuYW1hc3Rl'@;
put 'LmpwIiwibmlraXRhLmpwIiwibm9idXNoaS5qcCIsIm5vb3IuanAiLCJvb3BzLmpwIiwicGFyYWxsZWwuanAiLCJwYXJhc2l0ZS5qcCIsInBlY29yaS5qcCIsInBlZXdlZS5qcCIsInBlbm5lLmpwIiwicGVwcGVyLmpwIiwicGVybWEuanAiLCJwaWdib2F0LmpwIiwicGlub2tvLmpwIiwicHVu'@;
put 'eXUuanAiLCJwdXB1LmpwIiwicHVzc3ljYXQuanAiLCJweWEuanAiLCJyYWluZHJvcC5qcCIsInJlYWR5bWFkZS5qcCIsInNhZGlzdC5qcCIsInNjaG9vbGJ1cy5qcCIsInNlY3JldC5qcCIsInN0YWJhLmpwIiwic3RyaXBwZXIuanAiLCJzdWIuanAiLCJzdW5ueWRheS5qcCIsInRoaWNrLmpw'@;
put 'IiwidG9ua290c3UuanAiLCJ1bmRlci5qcCIsInVwcGVyLmpwIiwidmVsdmV0LmpwIiwidmVyc2UuanAiLCJ2ZXJzdXMuanAiLCJ2aXZpYW4uanAiLCJ3YXRzb24uanAiLCJ3ZWJsaWtlLmpwIiwid2hpdGVzbm93LmpwIiwiem9tYmllLmpwIiwiaGV0ZW1sLm5ldCIsImNsb3VkYXBwcy5kaWdp'@;
put 'dGFsIiwibG9uZG9uLmNsb3VkYXBwcy5kaWdpdGFsIiwicHltbnQudWsiLCJob21lb2ZmaWNlLmdvdi51ayIsInJvLmltIiwiZ29pcC5kZSIsInJ1bi5hcHAiLCJhLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiY29kZXNw'@;
put 'b3QuY29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJwdWJsaXNocHJveHkuY29tIiwid2l0aGdvb2dsZS5jb20iLCJ3aXRoeW91dHViZS5jb20iLCIqLmdhdGV3YXkuZGV2IiwiY2xvdWQuZ29vZyIsInRyYW5zbGF0ZS5nb29n'@;
put 'IiwiKi51c2VyY29udGVudC5nb29nIiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3QuYWUiLCJibG9nc3BvdC5hbCIsImJsb2dzcG90LmFtIiwiYmxvZ3Nwb3QuYmEiLCJibG9nc3BvdC5iZSIsImJsb2dzcG90LmJnIiwiYmxvZ3Nwb3QuYmoiLCJibG9nc3BvdC5jYSIsImJsb2dzcG90'@;
put 'LmNmIiwiYmxvZ3Nwb3QuY2giLCJibG9nc3BvdC5jbCIsImJsb2dzcG90LmNvLmF0IiwiYmxvZ3Nwb3QuY28uaWQiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmNvLmtlIiwiYmxvZ3Nwb3QuY28ubnoiLCJibG9nc3BvdC5jby51ayIsImJsb2dzcG90LmNvLnphIiwiYmxvZ3Nwb3QuY29t'@;
put 'IiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY29tLmF1IiwiYmxvZ3Nwb3QuY29tLmJyIiwiYmxvZ3Nwb3QuY29tLmJ5IiwiYmxvZ3Nwb3QuY29tLmNvIiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY29tLmVlIiwiYmxvZ3Nwb3QuY29tLmVnIiwiYmxvZ3Nwb3QuY29tLmVzIiwi'@;
put 'YmxvZ3Nwb3QuY29tLm10IiwiYmxvZ3Nwb3QuY29tLm5nIiwiYmxvZ3Nwb3QuY29tLnRyIiwiYmxvZ3Nwb3QuY29tLnV5IiwiYmxvZ3Nwb3QuY3YiLCJibG9nc3BvdC5jeiIsImJsb2dzcG90LmRlIiwiYmxvZ3Nwb3QuZGsiLCJibG9nc3BvdC5maSIsImJsb2dzcG90LmZyIiwiYmxvZ3Nwb3Qu'@;
put 'Z3IiLCJibG9nc3BvdC5oayIsImJsb2dzcG90LmhyIiwiYmxvZ3Nwb3QuaHUiLCJibG9nc3BvdC5pZSIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3Qua3IiLCJibG9nc3BvdC5saSIsImJsb2dzcG90Lmx0IiwiYmxvZ3Nw'@;
put 'b3QubHUiLCJibG9nc3BvdC5tZCIsImJsb2dzcG90Lm1rIiwiYmxvZ3Nwb3QubXIiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LnBlIiwiYmxvZ3Nwb3QucHQiLCJibG9nc3BvdC5xYSIsImJsb2dzcG90LnJlIiwiYmxv'@;
put 'Z3Nwb3Qucm8iLCJibG9nc3BvdC5ycyIsImJsb2dzcG90LnJ1IiwiYmxvZ3Nwb3Quc2UiLCJibG9nc3BvdC5zZyIsImJsb2dzcG90LnNpIiwiYmxvZ3Nwb3Quc2siLCJibG9nc3BvdC5zbiIsImJsb2dzcG90LnRkIiwiYmxvZ3Nwb3QudHciLCJibG9nc3BvdC51ZyIsImJsb2dzcG90LnZuIiwi'@;
put 'Z291cGlsZS5mciIsImdvdi5ubCIsImF3c21wcGwuY29tIiwiZ1x4ZmNuc3RpZ2Jlc3RlbGxlbi5kZSIsImdceGZjbnN0aWdsaWVmZXJuLmRlIiwiZmluLmNpIiwiZnJlZS5ociIsImNhYS5saSIsInVhLnJzIiwiY29uZi5zZSIsImhzLnpvbmUiLCJocy5ydW4iLCJoYXNoYmFuZy5zaCIsImhh'@;
put 'c3VyYS5hcHAiLCJoYXN1cmEtYXBwLmlvIiwicGFnZXMuaXQuaHMtaGVpbGJyb25uLmRlIiwiaGVwZm9yZ2Uub3JnIiwiaGVyb2t1YXBwLmNvbSIsImhlcm9rdXNzbC5jb20iLCJyYXZlbmRiLmNsb3VkIiwibXlyYXZlbmRiLmNvbSIsInJhdmVuZGIuY29tbXVuaXR5IiwicmF2ZW5kYi5tZSIs'@;
put 'ImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVwLnBsIiwic2VjYWFzLmhrIiwiaG9wbGl4LnNob3AiLCJvcnguYml6IiwiYml6LmdsIiwiY29sLm5nIiwiZmlybS5uZyIsImdlbi5uZyIsImx0ZC5uZyIsIm5nby5uZyIsImVkdS5zY290Iiwic2NoLnNvIiwiaG9zdHlo'@;
put 'b3N0aW5nLmlvIiwiaFx4ZTRra2luZW4uZmkiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQiLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJpbXBlcnRyaXhjZG4uY29tIiwiaW1wZXJ0cml4LmNvbSIsInNtdXNoY2RuLmNvbSIsIndwaG9zdGVkbWFpbC5jb20i'@;
put 'LCJ3cG11Y2RuLmNvbSIsInRlbXB1cmwuaG9zdCIsIndwbXVkZXYuaG9zdCIsImR5bi1iZXJsaW4uZGUiLCJpbi1iZXJsaW4uZGUiLCJpbi1icmIuZGUiLCJpbi1idXR0ZXIuZGUiLCJpbi1kc2wuZGUiLCJpbi1kc2wubmV0IiwiaW4tZHNsLm9yZyIsImluLXZwbi5kZSIsImluLXZwbi5uZXQi'@;
put 'LCJpbi12cG4ub3JnIiwiYml6LmF0IiwiaW5mby5hdCIsImluZm8uY3giLCJhYy5sZWcuYnIiLCJhbC5sZWcuYnIiLCJhbS5sZWcuYnIiLCJhcC5sZWcuYnIiLCJiYS5sZWcuYnIiLCJjZS5sZWcuYnIiLCJkZi5sZWcuYnIiLCJlcy5sZWcuYnIiLCJnby5sZWcuYnIiLCJtYS5sZWcuYnIiLCJt'@;
put 'Zy5sZWcuYnIiLCJtcy5sZWcuYnIiLCJtdC5sZWcuYnIiLCJwYS5sZWcuYnIiLCJwYi5sZWcuYnIiLCJwZS5sZWcuYnIiLCJwaS5sZWcuYnIiLCJwci5sZWcuYnIiLCJyai5sZWcuYnIiLCJybi5sZWcuYnIiLCJyby5sZWcuYnIiLCJyci5sZWcuYnIiLCJycy5sZWcuYnIiLCJzYy5sZWcuYnIi'@;
put 'LCJzZS5sZWcuYnIiLCJzcC5sZWcuYnIiLCJ0by5sZWcuYnIiLCJwaXhvbGluby5jb20iLCJuYTR1LnJ1IiwiaW9wc3lzLnNlIiwiaXBpZm9ueS5uZXQiLCJpc2VydnNjaHVsZS5kZSIsIm1laW4taXNlcnYuZGUiLCJzY2h1bHBsYXR0Zm9ybS5kZSIsInNjaHVsc2VydmVyLmRlIiwidGVzdC1p'@;
put 'c2Vydi5kZSIsImlzZXJ2LmRldiIsImlvYmIubmV0IiwibWVsLmNsb3VkbGV0cy5jb20uYXUiLCJjbG91ZC5pbnRlcmhvc3Rzb2x1dGlvbnMuYmUiLCJ1c2Vycy5zY2FsZS52aXJ0dWFsY2xvdWQuY29tLmJyIiwibXljbG91ZC5ieSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93'@;
put 'LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQi'@;
put 'LCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUu'@;
put 'dHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiYW1zY29tcHV0ZS5jb20iLCJjbGlja2V0Y2xvdWQuY29tIiwiZG9wYWFzLmNvbSIsImhpZG9yYS5jb20iLCJwYWFzLmhvc3RlZC1ieS1wcmV2aWRlci5jb20iLCJyYWctY2xvdWQuaG9zdGV1ci5jb20iLCJyYWctY2xvdWQtY2guaG9z'@;
put 'dGV1ci5jb20iLCJqY2xvdWQuaWstc2VydmVyLmNvbSIsImpjbG91ZC12ZXItanBjLmlrLXNlcnZlci5jb20iLCJkZW1vLmplbGFzdGljLmNvbSIsImtpbGF0aXJvbi5jb20iLCJwYWFzLm1hc3NpdmVncmlkLmNvbSIsImplZC53YWZhaWNsb3VkLmNvbSIsImxvbi53YWZhaWNsb3VkLmNvbSIs'@;
put 'InJ5ZC53YWZhaWNsb3VkLmNvbSIsImouc2NhbGVmb3JjZS5jb20uY3kiLCJqZWxhc3RpYy5kb2dhZG8uZXUiLCJmaS5jbG91ZHBsYXRmb3JtLmZpIiwiZGVtby5kYXRhY2VudGVyLmZpIiwicGFhcy5kYXRhY2VudGVyLmZpIiwiamVsZS5ob3N0IiwibWlyY2xvdWQuaG9zdCIsInBhYXMuYmVl'@;
put 'Ynl0ZS5pbyIsInNla2QxLmJlZWJ5dGVhcHAuaW8iLCJqZWxlLmlvIiwiY2xvdWQtZnIxLnVuaXNwYWNlLmlvIiwiamMubmVlbi5pdCIsImNsb3VkLmplbGFzdGljLm9wZW4udGltLml0IiwiamNsb3VkLmt6IiwidXBhYXMua2F6dGVsZXBvcnQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZyYTEt'@;
put 'ZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZhc3RzdGFja3MubmV0IiwiZnItMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsImxvbi0xLnBh'@;
put 'YXMubWFzc2l2ZWdyaWQubmV0IiwibG9uLTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJueS0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMi5wYWFzLm1hc3NpdmVncmlkLm5ldCIsInNnLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJqZWxhc3RpYy5zYXZlaW5jbG91ZC5uZXQiLCJub3Jk'@;
put 'ZXN0ZS1pZGMuc2F2ZWluY2xvdWQubmV0Iiwiai5zY2FsZWZvcmNlLm5ldCIsImplbGFzdGljLnRzdWthZXJ1Lm5ldCIsInNkc2Nsb3VkLnBsIiwidW5pY2xvdWQucGwiLCJtaXJjbG91ZC5ydSIsImplbGFzdGljLnJlZ3J1aG9zdGluZy5ydSIsImVuc2NhbGVkLnNnIiwiamVsZS5zaXRlIiwi'@;
put 'amVsYXN0aWMudGVhbSIsIm9yYW5nZWNsb3VkLnRuIiwiai5sYXllcnNoaWZ0LmNvLnVrIiwicGh4LmVuc2NhbGVkLnVzIiwibWlyY2xvdWQudXMiLCJteWppbm8ucnUiLCIqLmhvc3RpbmcubXlqaW5vLnJ1IiwiKi5sYW5kaW5nLm15amluby5ydSIsIiouc3BlY3RydW0ubXlqaW5vLnJ1Iiwi'@;
put 'Ki52cHMubXlqaW5vLnJ1Iiwiam90ZWx1bHUuY2xvdWQiLCIqLnRyaXRvbi56b25lIiwiKi5jbnMuam95ZW50LmNvbSIsImpzLm9yZyIsImthYXMuZ2ciLCJraHBsYXkubmwiLCJrdGlzdG9yeS5jb20iLCJrYXBzaS5maSIsImtleW1hY2hpbmUuZGUiLCJraW5naG9zdC5uZXQiLCJ1bmk1Lm5l'@;
put 'dCIsImtuaWdodHBvaW50LnN5c3RlbXMiLCJrb29iaW4uZXZlbnRzIiwib3lhLnRvIiwia3VsZXV2ZW4uY2xvdWQiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwiY28ua3JkIiwiZWR1LmtyZCIsImtyZWxsaWFuLm5ldCIsIndlYnRoaW5ncy5pbyIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZl'@;
put 'ci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29tIiwibGVsdXguc2l0ZSIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28u'@;
put 'dGVjaG5vbG9neSIsImFwcC5sbXBtLmNvbSIsImxpbmt5YXJkLmNsb3VkIiwibGlua3lhcmQtY2xvdWQuY2giLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndl'@;
put 'LmJzIiwiKi51c2VyLmxvY2FsY2VydC5kZXYiLCJsb2NhbHpvbmUueHl6IiwibG9naW5saW5lLmFwcCIsImxvZ2lubGluZS5kZXYiLCJsb2dpbmxpbmUuaW8iLCJsb2dpbmxpbmUuc2VydmljZXMiLCJsb2dpbmxpbmUuc2l0ZSIsInNlcnZlcnMucnVuIiwibG9obXVzLm1lIiwia3Jhc25pay5w'@;
put 'bCIsImxlY3puYS5wbCIsImx1YmFydG93LnBsIiwibHVibGluLnBsIiwicG9uaWF0b3dhLnBsIiwic3dpZG5pay5wbCIsImdsdWcub3JnLnVrIiwibHVnLm9yZy51ayIsImx1Z3Mub3JnLnVrIiwiYmFyc3kuYmciLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiYmFyc3ljZW50'@;
put 'ZXIuY29tIiwiYmFyc3lvbmxpbmUuY29tIiwiYmFyc3kuY2x1YiIsImJhcnN5LmRlIiwiYmFyc3kuZXUiLCJiYXJzeS5pbiIsImJhcnN5LmluZm8iLCJiYXJzeS5pbyIsImJhcnN5Lm1lIiwiYmFyc3kubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJz'@;
put 'eS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3VwcG9ydCIsImJhcnN5LnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsIm1heWZpcnN0LmluZm8iLCJtYXlmaXJzdC5vcmciLCJoYi5jbGRtYWlsLnJ1Iiwi'@;
put 'Y24udnUiLCJtYXplcGxheS5jb20iLCJtY3BlLm1lIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsIm1jcHJlLnJ1IiwidnBzLm1jZGlyLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtaW5pc2VydmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5h'@;
put 'cHAiLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFwcC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmV3'@;
put 'ZWJzaXRlcy5uZXQiLCJhenVyZS1tb2JpbGUubmV0IiwiY2xvdWRhcHAubmV0IiwiYXp1cmVzdGF0aWNhcHBzLm5ldCIsIjEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImNlbnRyYWx1cy5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdGFzaWEuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImVhc3R1czIu'@;
put 'YXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3RldXJvcGUuYXp1cmVzdGF0aWNhcHBzLm5ldCIsIndlc3R1czIuYXp1cmVzdGF0aWNhcHBzLm5ldCIsImNzeC5jYyIsIm1pbnRlcmUuc2l0ZSIsImZvcnRlLmlkIiwibW96aWxsYS1pb3Qub3JnIiwiYm1vYXR0YWNobWVudHMub3JnIiwibmV0LnJ1'@;
put 'Iiwib3JnLnJ1IiwicHAucnUiLCJob3N0ZWRwaS5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJmZW50aWdlci5teXRoaWMtYmVhc3RzLmNvbSIsImx5bngubXl0aGljLWJlYXN0cy5jb20iLCJvY2Vsb3QubXl0aGljLWJlYXN0'@;
put 'cy5jb20iLCJvbmNpbGxhLm15dGhpYy1iZWFzdHMuY29tIiwib256YS5teXRoaWMtYmVhc3RzLmNvbSIsInNwaGlueC5teXRoaWMtYmVhc3RzLmNvbSIsInZzLm15dGhpYy1iZWFzdHMuY29tIiwieC5teXRoaWMtYmVhc3RzLmNvbSIsInlhbGkubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0LnJl'@;
put 'dHJvc251Yi5jby51ayIsInVpLm5hYnUuY2FzYSIsInBvbnkuY2x1YiIsIm9mLmZhc2hpb24iLCJpbi5sb25kb24iLCJvZi5sb25kb24iLCJmcm9tLm1hcmtldGluZyIsIndpdGgubWFya2V0aW5nIiwiZm9yLm1lbiIsInJlcGFpci5tZW4iLCJhbmQubW9tIiwiZm9yLm1vbSIsImZvci5vbmUi'@;
put 'LCJ1bmRlci5vbmUiLCJmb3Iuc2FsZSIsInRoYXQud2luIiwiZnJvbS53b3JrIiwidG8ud29yayIsImNsb3VkLm5vc3BhbXByb3h5LmNvbSIsIm5ldGxpZnkuYXBwIiwiNHUuY29tIiwibmdyb2suaW8iLCJuaC1zZXJ2LmNvLnVrIiwibmZzaG9zdC5jb20iLCIqLmRldmVsb3Blci5hcHAiLCJu'@;
put 'b29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5ydW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsImRuc2tpbmcuY2giLCJteXBpLmNvIiwibjR0LmNvIiwiMDAxd3d3LmNvbSIsImRkbnNsaXZlLmNv'@;
put 'bSIsIm15aXBob3N0LmNvbSIsImZvcnVtei5pbmZvIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwic291bmRjYXN0Lm1lIiwidGNwNC5tZSIsImRuc3VwLm5ldCIsImhpY2FtLm5ldCIsIm5vdy1kbnMubmV0Iiwib3duaXAubmV0IiwidnBuZG5zLm5ldCIsImR5bnNlcnYub3JnIiwi'@;
put 'bm93LWRucy5vcmciLCJ4NDQzLnB3Iiwibm93LWRucy50b3AiLCJudGRsbC50b3AiLCJmcmVlZGRucy51cyIsImNyYWZ0aW5nLnh5eiIsInphcHRvLnh5eiIsIm5zdXBkYXRlLmluZm8iLCJuZXJkcG9sLm92aCIsImJsb2dzeXRlLmNvbSIsImJyYXNpbGlhLm1lIiwiY2FibGUtbW9kZW0ub3Jn'@;
put 'IiwiY2lzY29mcmVhay5jb20iLCJjb2xsZWdlZmFuLm9yZyIsImNvdWNocG90YXRvZnJpZXMub3JnIiwiZGFtbnNlcnZlci5jb20iLCJkZG5zLm1lIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zZm9yLm1lIiwiZG5zaXNraW5reS5jb20iLCJkdnJjYW0uaW5mbyIsImR5bm5zLmNvbSIsImVhdGlu'@;
put 'Zy1vcmdhbmljLm5ldCIsImZhbnRhc3lsZWFndWUuY2MiLCJnZWVrZ2FsYXh5LmNvbSIsImdvbGZmYW4udXMiLCJoZWFsdGgtY2FyZXJlZm9ybS5jb20iLCJob21lc2VjdXJpdHltYWMuY29tIiwiaG9tZXNlY3VyaXR5cGMuY29tIiwiaG9wdG8ubWUiLCJpbG92ZWNvbGxlZ2UuaW5mbyIsImxv'@;
put 'Z2ludG8ubWUiLCJtbGJmYW4ub3JnIiwibW1hZmFuLmJpeiIsIm15YWN0aXZlZGlyZWN0b3J5LmNvbSIsIm15ZGlzc2VudC5uZXQiLCJteWVmZmVjdC5uZXQiLCJteW1lZGlhcGMubmV0IiwibXlwc3gubmV0IiwibXlzZWN1cml0eWNhbWVyYS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLm5ldCIs'@;
put 'Im15c2VjdXJpdHljYW1lcmEub3JnIiwibmV0LWZyZWFrcy5jb20iLCJuZmxmYW4ub3JnIiwibmhsZmFuLm5ldCIsIm5vLWlwLmNhIiwibm8taXAuY28udWsiLCJuby1pcC5uZXQiLCJub2lwLnVzIiwib250aGV3aWZpLmNvbSIsInBnYWZhbi5uZXQiLCJwb2ludDJ0aGlzLmNvbSIsInBvaW50'@;
put 'dG8udXMiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicXVpY2tzeXRlcy5jb20iLCJyZWFkLWJvb2tzLm9yZyIsInNlY3VyaXR5dGFjdGljcy5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlaHVtb3VyLmNvbSIsInNlcnZlcDJwLmNvbSIsInNlcnZlc2FyY2FzbS5jb20i'@;
put 'LCJzdHVmZnRvcmVhZC5jb20iLCJ1ZmNmYW4ub3JnIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiM3V0aWxpdGllcy5jb20iLCJib3VuY2VtZS5uZXQiLCJkZG5zLm5ldCIsImRkbnNraW5nLmNvbSIsImdvdGRucy5jaCIsImhvcHRvLm9yZyIsIm15ZnRwLmJpeiIs'@;
put 'Im15ZnRwLm9yZyIsIm15dm5jLmNvbSIsIm5vLWlwLmJpeiIsIm5vLWlwLmluZm8iLCJuby1pcC5vcmciLCJub2lwLm1lIiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJlZXIuY29tIiwic2VydmVibG9nLm5ldCIsInNlcnZlY291bnRlcnN0cmlrZS5jb20iLCJzZXJ2ZWZ0cC5jb20iLCJzZXJ2'@;
put 'ZWdhbWUuY29tIiwic2VydmVoYWxmbGlmZS5jb20iLCJzZXJ2ZWh0dHAuY29tIiwic2VydmVpcmMuY29tIiwic2VydmVtaW5lY3JhZnQubmV0Iiwic2VydmVtcDMuY29tIiwic2VydmVwaWNzLmNvbSIsInNlcnZlcXVha2UuY29tIiwic3l0ZXMubmV0Iiwid2ViaG9wLm1lIiwiemFwdG8ub3Jn'@;
put 'Iiwic3RhZ2Uubm9kZWFydC5pbyIsInBjbG91ZC5ob3N0IiwibnljLm1uIiwic3RhdGljLm9ic2VydmFibGV1c2VyY29udGVudC5jb20iLCJjeWEuZ2ciLCJvbWcubG9sIiwiY2xvdWR5Y2x1c3Rlci5uZXQiLCJvbW5pd2Uuc2l0ZSIsInNlcnZpY2Uub25lIiwibmlkLmlvIiwib3BlbnNvY2lh'@;
put 'bC5zaXRlIiwib3BlbmNyYWZ0Lmhvc3RpbmciLCJvcnNpdGVzLmNvbSIsIm9wZXJhdW5pdGUuY29tIiwidGVjaC5vcmFuZ2UiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLndlYnBhYXMu'@;
put 'b3ZoLm5ldCIsIiouaG9zdGluZy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5vd28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZWZyb250YXBwLmNvbSIsInBhZ2V4bC5jb20iLCIqLnBheXdoaXJsLmNvbSIsImJhcjAubmV0IiwiYmFyMS5u'@;
put 'ZXQiLCJiYXIyLm5ldCIsInJkdi50byIsImFydC5wbCIsImdsaXdpY2UucGwiLCJrcmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJwYW50aGVvbnNpdGUuaW8iLCJnb3RwYW50aGVvbi5jb20iLCJteXBlcC5saW5rIiwicGVyc3BlY3RhLmNsb3VkIiwibGsz'@;
put 'LnJ1Iiwib24td2ViLmZyIiwiYmMucGxhdGZvcm0uc2giLCJlbnQucGxhdGZvcm0uc2giLCJldS5wbGF0Zm9ybS5zaCIsInVzLnBsYXRmb3JtLnNoIiwiKi5wbGF0Zm9ybXNoLnNpdGUiLCIqLnRzdC5zaXRlIiwicGxhdHRlci1hcHAuY29tIiwicGxhdHRlci1hcHAuZGV2IiwicGxhdHRlcnAu'@;
put 'dXMiLCJwZG5zLnBhZ2UiLCJwbGVzay5wYWdlIiwicGxlc2tucy5jb20iLCJkeW41My5pbyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVhbGlmeW1lLnRvZGF5IiwieGVuLnBy'@;
put 'Z21yLmNvbSIsInByaXYuYXQiLCJwcnZjeS5wYWdlIiwiKi5kd2ViLmxpbmsiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29t'@;
put 'IiwicW90by5pbyIsInF1YWxpZmlvYXBwLmNvbSIsInFidXNlci5jb20iLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJpbnN0YW5jZXMuc3Bhd24uY2MiLCJpbnN0YW50Y2xvdWQuY24iLCJyYXMucnUiLCJxYTIuY29tIiwicWN4LmlvIiwiKi5zeXMucWN4LmlvIiwiZGV2LW15cW5hcGNsb3VkLmNv'@;
put 'bSIsImFscGhhLW15cW5hcGNsb3VkLmNvbSIsIm15cW5hcGNsb3VkLmNvbSIsIioucXVpcGVsZW1lbnRzLmNvbSIsInZhcG9yLmNsb3VkIiwidmFwb3JjbG91ZC5pbyIsInJhY2ttYXplLmNvbSIsInJhY2ttYXplLm5ldCIsImcudmJycGxzYnguaW8iLCIqLm9uLWszcy5pbyIsIioub24tcmFu'@;
put 'Y2hlci5jbG91ZCIsIioub24tcmlvLmlvIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNsb3VkLmNvbSIsImFwcC5yZW5kZXIuY29tIiwib25yZW5kZXIuY29tIiwicmVwbC5jbyIsImlkLnJlcGwuY28iLCJyZXBsLnJ1biIsInJlc2luZGV2aWNlLmlvIiwiZGV2aWNlcy5yZXNpbnN0YWdpbmcuaW8i'@;
put 'LCJoemMuaW8iLCJ3ZWxsYmVpbmd6b25lLmV1Iiwid2VsbGJlaW5nem9uZS5jby51ayIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2NreS5wYWdlIiwiXHUwNDMxXHUwNDM4XHUwNDM3Llx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzYVx1'@;
put 'MDQzZVx1MDQzYy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0NDBcdTA0NGJcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNjXHUwNDM4XHUwNDQwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQ0MVx1MDQzYS5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2Vc'@;
put 'dTA0NDBcdTA0MzMuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDMwXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDMwLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzZVx1MDQ0N1x1MDQzOC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2ZcdTA0MzEuXHUwNDQwXHUw'@;
put 'NDQzXHUwNDQxIiwiXHUwNDRmLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIiouYnVpbGRlci5jb2RlLmNvbSIsIiouZGV2LWJ1aWxkZXIuY29kZS5jb20iLCIqLnN0Zy1idWlsZGVyLmNvZGUuY29tIiwic2FuZGNhdHMuaW8iLCJsb2dvaXAuZGUiLCJsb2dvaXAuY29tIiwiZnItcGFyLTEuYmFyZW1l'@;
put 'dGFsLnNjdy5jbG91ZCIsImZyLXBhci0yLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJubC1hbXMtMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJmdW5jdGlvbnMuZm5jLmZyLXBhci5zY3cuY2xvdWQiLCJrOHMuZnItcGFyLnNjdy5jbG91ZCIsIm5vZGVzLms4'@;
put 'cy5mci1wYXIuc2N3LmNsb3VkIiwiczMuZnItcGFyLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUuZnItcGFyLnNjdy5jbG91ZCIsIndobS5mci1wYXIuc2N3LmNsb3VkIiwicHJpdi5pbnN0YW5jZXMuc2N3LmNsb3VkIiwicHViLmluc3RhbmNlcy5zY3cuY2xvdWQiLCJrOHMuc2N3LmNsb3VkIiwi'@;
put 'azhzLm5sLWFtcy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMubmwtYW1zLnNjdy5jbG91ZCIsInMzLm5sLWFtcy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLm5sLWFtcy5zY3cuY2xvdWQiLCJ3aG0ubmwtYW1zLnNjdy5jbG91ZCIsIms4cy5wbC13YXcuc2N3LmNsb3VkIiwibm9kZXMuazhzLnBsLXdh'@;
put 'dy5zY3cuY2xvdWQiLCJzMy5wbC13YXcuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5wbC13YXcuc2N3LmNsb3VkIiwic2NhbGVib29rLnNjdy5jbG91ZCIsInNtYXJ0bGFiZWxpbmcuc2N3LmNsb3VkIiwiZGVkaWJveC5mciIsInNjaG9rb2tla3MubmV0IiwiZ292LnNjb3QiLCJzZXJ2aWNlLmdv'@;
put 'di5zY290Iiwic2NyeXNlYy5jb20iLCJmaXJld2FsbC1nYXRld2F5LmNvbSIsImZpcmV3YWxsLWdhdGV3YXkuZGUiLCJteS1nYXRld2F5LmRlIiwibXktcm91dGVyLmRlIiwic3BkbnMuZGUiLCJzcGRucy5ldSIsImZpcmV3YWxsLWdhdGV3YXkubmV0IiwibXktZmlyZXdhbGwub3JnIiwibXlm'@;
put 'aXJld2FsbC5vcmciLCJzcGRucy5vcmciLCJzZWlkYXQubmV0Iiwic2VsbGZ5LnN0b3JlIiwic2Vuc2VlcmluZy5uZXQiLCJtaW5pc2l0ZS5tcyIsIm1hZ25ldC5wYWdlIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsInNoaWZ0Y3J5cHRvLmRldiIsInNoaWZ0Y3J5cHRvLmlvIiwic2hpZnRl'@;
put 'ZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnN0b3JlIiwibW8tc2llbWVucy5pbyIsIjFrYXBwLmNvbSIsImFwcGNoaXppLmNvbSIsImFwcGxpbnppLmNvbSIsInNpbmFhcHAuY29tIiwidmlwc2luYWFwcC5jb20i'@;
put 'LCJzaXRlbGVhZi5uZXQiLCJib3VudHktZnVsbC5jb20iLCJhbHBoYS5ib3VudHktZnVsbC5jb20iLCJiZXRhLmJvdW50eS1mdWxsLmNvbSIsInNtYWxsLXdlYi5vcmciLCJ2cDQubWUiLCJ0cnktc25vd3Bsb3cuY29tIiwic3JodC5zaXRlIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwibXVz'@;
put 'aWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwic3RhdGljLmxhbmQiLCJkZXYuc3RhdGljLmxhbmQiLCJzaXRlcy5zdGF0aWMubGFuZCIsInN0b3JlYmFzZS5zdG9yZSIsInZwcy1ob3N0Lm5ldCIsImF0bC5qZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJuanMuamVsYXN0aWMudnBzLWhvc3QubmV0'@;
put 'IiwicmljLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsInBsYXlzdGF0aW9uLWNsb3VkLmNvbSIsImFwcHMubGFpci5pbyIsIiouc3RvbG9zLmlvIiwic3BhY2VraXQuaW8iLCJjdXN0b21lci5zcGVlZHBhcnRuZXIuZGUiLCJteXNwcmVhZHNob3AuYXQiLCJteXNwcmVhZHNob3AuY29tLmF1Iiwi'@;
put 'bXlzcHJlYWRzaG9wLmJlIiwibXlzcHJlYWRzaG9wLmNhIiwibXlzcHJlYWRzaG9wLmNoIiwibXlzcHJlYWRzaG9wLmNvbSIsIm15c3ByZWFkc2hvcC5kZSIsIm15c3ByZWFkc2hvcC5kayIsIm15c3ByZWFkc2hvcC5lcyIsIm15c3ByZWFkc2hvcC5maSIsIm15c3ByZWFkc2hvcC5mciIsIm15'@;
put 'c3ByZWFkc2hvcC5pZSIsIm15c3ByZWFkc2hvcC5pdCIsIm15c3ByZWFkc2hvcC5uZXQiLCJteXNwcmVhZHNob3AubmwiLCJteXNwcmVhZHNob3Aubm8iLCJteXNwcmVhZHNob3AucGwiLCJteXNwcmVhZHNob3Auc2UiLCJteXNwcmVhZHNob3AuY28udWsiLCJhcGkuc3RkbGliLmNvbSIsInN0'@;
put 'b3JqLmZhcm0iLCJ1dHdlbnRlLmlvIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInRlbXAtZG5zLmNvbSIsInN1cGFiYXNlLmNvIiwic3VwYWJhc2UuaW4iLCJzdXBhYmFzZS5uZXQiLCJzdS5wYWJhLnNlIiwiKi5zNXkuaW8iLCIqLnNlbnNpb3NpdGUuY2xvdWQiLCJzeW5jbG91'@;
put 'ZC5pdCIsImRzY2xvdWQuYml6IiwiZGlyZWN0LnF1aWNrY29ubmVjdC5jbiIsImRzbXluYXMuY29tIiwiZmFtaWx5ZHMuY29tIiwiZGlza3N0YXRpb24ubWUiLCJkc2Nsb3VkLm1lIiwiaTIzNC5tZSIsIm15ZHMubWUiLCJzeW5vbG9neS5tZSIsImRzY2xvdWQubW9iaSIsImRzbXluYXMubmV0'@;
put 'IiwiZmFtaWx5ZHMubmV0IiwiZHNteW5hcy5vcmciLCJmYW1pbHlkcy5vcmciLCJ2cG5wbHVzLnRvIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInRhYml0b3JkZXIuY28uaWwiLCJ0YWlmdW4tZG5zLmRlIiwiYmV0YS50YWlsc2NhbGUubmV0IiwidHMubmV0IiwiZ2RhLnBsIiwiZ2RhbnNr'@;
put 'LnBsIiwiZ2R5bmlhLnBsIiwibWVkLnBsIiwic29wb3QucGwiLCJzaXRlLnRiLWhvc3RpbmcuY29tIiwiZWR1Z2l0LmlvIiwiczMudGVja2lkcy5vcmciLCJ0ZWxlYml0LmFwcCIsInRlbGViaXQuaW8iLCIqLnRlbGViaXQueHl6IiwiZ3dpZGRsZS5jby51ayIsIiouZmlyZW5ldC5jaCIsIiou'@;
put 'c3ZjLmZpcmVuZXQuY2giLCJyZXNlcnZkLmNvbSIsInRoaW5nZHVzdGRhdGEuY29tIiwiY3VzdC5kZXYudGhpbmdkdXN0LmlvIiwiY3VzdC5kaXNyZWMudGhpbmdkdXN0LmlvIiwiY3VzdC5wcm9kLnRoaW5nZHVzdC5pbyIsImN1c3QudGVzdGluZy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRl'@;
put 'di50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLmRpc3JlYy50aGluZ2R1c3QuaW8iLCJyZXNlcnZkLnRlc3RpbmcudGhpbmdkdXN0LmlvIiwidGlja2V0cy5pbyIsImFydm8ubmV0d29yayIsImF6aW11dGgubmV0d29yayIsInRsb24ubmV0d29yayIsInRvcnByb2plY3QubmV0IiwicGFnZXMudG9y'@;
put 'cHJvamVjdC5uZXQiLCJibG94Y21zLmNvbSIsInRvd25uZXdzLXN0YWdpbmcuY29tIiwidGJpdHMubWUiLCIxMmhwLmF0IiwiMml4LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5j'@;
put 'bG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVzIiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1'@;
put 'IiwiKi50cmFuc3VybC5ubCIsInNpdGUudHJhbnNpcC5tZSIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0aW9uLm9yZyIsImRyYXktZG5zLmRlIiwiZHJheWRucy5kZSIsImR5bi12cG4uZGUiLCJkeW52cG4uZGUiLCJtZWluLXZpZ29yLmRl'@;
put 'IiwibXktdmlnb3IuZGUiLCJteS13YW4uZGUiLCJzeW5vLWRzLmRlIiwic3lub2xvZ3ktZGlza3N0YXRpb24uZGUiLCJzeW5vbG9neS1kcy5kZSIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwidWJlci5zcGFjZSIsIioudWJlcnNwYWNlLmRlIiwiaGsuY29tIiwiaGsub3Jn'@;
put 'IiwibHRkLmhrIiwiaW5jLmhrIiwibmFtZS5wbSIsInNjaC50ZiIsImJpei53ZiIsInNjaC53ZiIsIm9yZy55dCIsInZpcnR1YWx1c2VyLmRlIiwidmlydHVhbC11c2VyLmRlIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJsaWIuZGUudXMiLCIyMDM4LmlvIiwi'@;
put 'dmVyY2VsLmFwcCIsInZlcmNlbC5kZXYiLCJub3cuc2giLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwibmVrby5hbSIsIm55YWEuYW0iLCJiZS5heCIsImNhdC5heCIsImVzLmF4IiwiZXUuYXgiLCJnZy5heCIsIm1jLmF4IiwidXMuYXgiLCJ4'@;
put 'eS5heCIsIm5sLmNpIiwieHguZ2wiLCJhcHAuZ3AiLCJibG9nLmd0IiwiZGUuZ3QiLCJ0by5ndCIsImJlLmd5IiwiY2MuaG4iLCJibG9nLmtnIiwiaW8ua2ciLCJqcC5rZyIsInR2LmtnIiwidWsua2ciLCJ1cy5rZyIsImRlLmxzIiwiYXQubWQiLCJkZS5tZCIsImpwLm1kIiwidG8ubWQiLCJp'@;
put 'bmRpZS5wb3JuIiwidnhsLnNoIiwiY2gudGMiLCJtZS50YyIsIndlLnRjIiwibnlhbi50byIsImF0LnZnIiwiYmxvZy52dSIsImRldi52dSIsIm1lLnZ1Iiwidi51YSIsIioudnVsdHJvYmplY3RzLmNvbSIsIndhZmZsZWNlbGwuY29tIiwiKi53ZWJoYXJlLmRldiIsInJlc2VydmUtb25saW5l'@;
put 'Lm5ldCIsInJlc2VydmUtb25saW5lLmNvbSIsImJvb2tvbmxpbmUuYXBwIiwiaG90ZWx3aXRoZmxpZ2h0LmNvbSIsIndlZGVwbG95LmlvIiwid2VkZXBsb3kubWUiLCJ3ZWRlcGxveS5zaCIsInJlbW90ZXdkLmNvbSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsIndtZmxhYnMub3JnIiwidG9vbGZv'@;
put 'cmdlLm9yZyIsIndtY2xvdWQub3JnIiwicGFuZWwuZ2ciLCJkYWVtb24ucGFuZWwuZ2ciLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRlIiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXBy'@;
put 'by5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5lcG93ZXJlZC5jb20iLCJ3aXhzaXRlLmNvbSIsImVkaXRvcnguaW8i'@;
put 'LCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUueWFuZGV4Y2xvdWQu'@;
put 'bmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInliby5mYWl0aCIsInlvbWJvLm1lIiwiaG9tZWxpbmsub25lIiwieWJvLnBhcnR5IiwieWJvLnJldmlldyIsInliby5zY2llbmNlIiwieWJvLnRyYWRlIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5l'@;
put 'dCIsInphLm9yZyIsImJzcy5kZXNpZ24iLCJiYXNpY3NlcnZlci5pbyIsInZpcnR1YWxzZXJ2ZXIuaW8iLCJlbnRlcnByaXNlY2xvdWQubnUiXScpfX0sbT17fTtmdW5jdGlvbiBYKHcpe3ZhciBBPW1bd107aWYodm9pZCAwIT09QSlyZXR1cm4gQS5leHBvcnRzO3ZhciBEPW1bd109e2lkOncs'@;
put 'bG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBiW3ddLmNhbGwoRC5leHBvcnRzLEQsRC5leHBvcnRzLFgpLEQubG9hZGVkPSEwLEQuZXhwb3J0c31yZXR1cm4gWC5kPSh3LEEpPT57Zm9yKHZhciBEIGluIEEpWC5vKEEsRCkmJiFYLm8odyxEKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHcs'@;
put 'RCx7ZW51bWVyYWJsZTohMCxnZXQ6QVtEXX0pfSxYLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9m'@;
put 'IHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxYLm89KHcsQSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3LEEpLFgucj13PT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsU3ltYm9sLnRvU3RyaW5n'@;
put 'VGFnLHt2YWx1ZToiTW9kdWxlIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sWC5ubWQ9dz0+KHcucGF0aHM9W10sdy5jaGlsZHJlbnx8KHcuY2hpbGRyZW49W10pLHcpLFgoMzYwNyl9KSgpfSw1OTQ4OmZ1bmN0aW9uKCRlLFNlLFIpeyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgZWU9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEQpe3JldHVybiBEJiZELl9fZXNNb2R1bGU/RDp7ZGVmYXVsdDpEfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KFNlLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxTZS5pc1NwZWNpYWxNaXNzaW5nPVNl'@;
put 'LmNob2ljZVZhbGlkYXRvcj1TZS5jb25maXJtYXRpb25WYWxpZGF0b3I9U2UudXJsVmFsaWRhdG9yPXZvaWQgMDt2YXIgYj1lZShSKDEyOTU0KSk7U2UudXJsVmFsaWRhdG9yPWZ1bmN0aW9uKEQsUCl7cmV0dXJuISFiLmRlZmF1bHQuaXNIdHRwVXJpKEQpfHwhIWIuZGVmYXVsdC5pc0h0dHBz'@;
put 'VXJpKEQpfHwiIj09PUR8fFB9LFNlLmNvbmZpcm1hdGlvblZhbGlkYXRvcj1mdW5jdGlvbihEKXtyZXR1cm4hMD09PUR8fCExPT09RH0sU2UuY2hvaWNlVmFsaWRhdG9yPWZ1bmN0aW9uKEQsUCxVKXtyZXR1cm4gRD4wJiZEPD1QfHxVfSxTZS5pc1NwZWNpYWxNaXNzaW5nPWZ1bmN0aW9uKEQp'@;
put 'e3JldHVybigic3RyaW5nIiE9dHlwZW9mIER8fCFELmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17MX0kIiwiaSIpLnRlc3QoRCl9fSwxMzI0NzooJGUsU2UpPT57InVzZSBzdHJpY3QiO3ZhciBiO1NlLlk9dm9pZCAwLChiPVNlLll8fChTZS5ZPXt9KSkuU2Fz'@;
put 'Vml5YT0iU0FTVklZQSIsYi5TYXM5PSJTQVM5IixiLlNhc2pzPSJTQVNKUyJ9LDI1MDAxOigkZSxTZSk9PnsidXNlIHN0cmljdCI7U2UuQz12b2lkIDAsU2UuQz1mdW5jdGlvbihiLG0sWCl7aWYodm9pZCAwPT09bSYmKG09MSksdm9pZCAwPT09WCYmKFg9MTA5OTUxMTYyNzc3NiksMD09PWIp'@;
put 'cmV0dXJuIjAgQiI7Yj1iPlg/WDpiO3ZhciBEPW08MD8wOm0sUD1NYXRoLmZsb29yKE1hdGgubG9nKGIpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oYi9NYXRoLnBvdygxMDI0LFApKS50b0ZpeGVkKEQpKyIgIitbIkIiLCJLQiIsIk1CIiwiR0IiLCJUQiJdW1BdfX0sNDI5MjQ6ZnVuY3Rpb24o'@;
put 'JGUpe3ZhciBTZT17dmVyc2lvbjoiMS4xNS4wIn07U2VbNDM3XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx'@;
put 'ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhl'@;
put 'Y1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1'@;
put 'MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNc'@;
put 'dTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1'@;
put 'MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsZWU9W10sYj17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYm'@;
put 'KGJbUi5jaGFyQXQobSldPW0pLGVlW21dPVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzYyMF09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1'@;
put 'XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUw'@;
put 'XHUwMTA1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTA3XHhjNFx1MDEwNFx1MDExOFx1MDExOVx1MDE0Mlx4ZjRceGY2XHUwMTA2XHhmYlx4ZjlcdTAxNWFceGQ2XHhkY1x4YTJcdTAxNDFceGE1XHUwMTViXHUwMTkyXHUwMTc5XHUwMTdiXHhmM1x4ZDNcdTAxNDRcdTAxNDNcdTAxN2Fc'@;
put 'dTAxN2NceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAw'@;
put 'XHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUw'@;
put 'M2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1'@;
put 'MjVhMFx4YTAiLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVs3MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPSJcMFx4MDFceDAyXHgw'@;
put 'M1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxd'@;
put 'Xl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1'@;
put 'MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjMlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5'@;
put 'MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1'@;
put 'MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNhY1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNj'@;
put 'ZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsZWU9W10sYj17fSxtPTA7MjU2IT1tOysrbSk2NTUz'@;
put 'MyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQobSldPW0pLGVlW21dPVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzg1MF09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgx'@;
put 'MFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhj'@;
put 'N1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4'@;
put 'YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1'@;
put 'NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhkYVx4ZGJceGQ5XHhmZFx4'@;
put 'ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQo'@;
put 'bSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbODUyXT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4'@;
put 'MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUx'@;
put 'XHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNceGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3'@;
put 'YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1'@;
put 'NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwMTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUw'@;
put 'MTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1MDE1OVx1MjVhMFx4YTAiLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMh'@;
put 'PT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVs4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc'@;
put 'eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4Yzdc'@;
put 'eGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAx'@;
put 'MWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUy'@;
put 'NTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRi'@;
put 'XHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsZWU9W10sYj17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQobSldPW0pLGVlW21d'@;
put 'PVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzg2MV09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFi'@;
put 'XHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQw'@;
put 'XHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUyMGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUy'@;
put 'NTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw'@;
put 'XHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThc'@;
put 'dTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2Rl'@;
put 'QXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVs4NjVdPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNc'@;
put 'eDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJc'@;
put 'eGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNceGJk'@;
put 'XHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1'@;
put 'YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAz'@;
put 'YTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixlZT1bXSxiPXt9LG09'@;
put 'MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxu'@;
put 'XHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0'@;
put 'dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0Mjhc'@;
put 'dTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1'@;
put 'MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1Njdc'@;
put 'dTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0'@;
put 'NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0p'@;
put 'JiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbODc0XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4'@;
put 'MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFh'@;
put 'XHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUw'@;
put 'ZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUx'@;
put 'XHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5j'@;
put 'aGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbODk1XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFj'@;
put 'XHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTAxMGNceGZjXHhlOVx1MDEwZlx4ZTRcdTAxMGVcdTAxNjRcdTAxMGRcdTAxMWJcdTAx'@;
put 'MWFcdTAxMzlceGNkXHUwMTNlXHUwMWVhXHhjNFx4YzFceGM5XHUwMTdlXHUwMTdkXHhmNFx4ZjZceGQzXHUwMTZmXHhkYVx4ZmRceGQ2XHhkY1x1MDE2MFx1MDEzZFx4ZGRcdTAxNThcdTAxNjVceGUxXHhlZFx4ZjNceGZhXHUwMTQ4XHUwMTQ3XHUwMTZlXHhkNFx1MDE2MVx1MDE1OVx1MDE1'@;
put 'NVx1MDE1NFx4YmNceGE3XHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1'@;
put 'NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUw'@;
put 'M2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsZWU9W10s'@;
put 'Yj17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQobSldPW0pLGVlW21dPVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzkzMl09ZnVuY3Rpb24oKXt2YXIgbSxSPVtdLGVlPXt9LGI9W107Zm9yKGJbMF09IlwwXHgwMVx4'@;
put 'MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZ'@;
put 'WltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjYxXHVmZjYyXHVmZjYzXHVmZjY0XHVmZjY1XHVmZjY2XHVmZjY3XHVmZjY4XHVmZjY5XHVmZjZhXHVmZjZiXHVmZjZjXHVmZjZkXHVmZjZlXHVmZjZm'@;
put 'XHVmZjcwXHVmZjcxXHVmZjcyXHVmZjczXHVmZjc0XHVmZjc1XHVmZjc2XHVmZjc3XHVmZjc4XHVmZjc5XHVmZjdhXHVmZjdiXHVmZjdjXHVmZjdkXHVmZjdlXHVmZjdmXHVmZjgwXHVmZjgxXHVmZjgyXHVmZjgzXHVmZjg0XHVmZjg1XHVmZjg2XHVmZjg3XHVmZjg4XHVmZjg5XHVmZjhhXHVm'@;
put 'ZjhiXHVmZjhjXHVmZjhkXHVmZjhlXHVmZjhmXHVmZjkwXHVmZjkxXHVmZjkyXHVmZjkzXHVmZjk0XHVmZjk1XHVmZjk2XHVmZjk3XHVmZjk4XHVmZjk5XHVmZjlhXHVmZjliXHVmZjljXHVmZjlkXHVmZjllXHVmZjlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPWJbMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMF1bbV1dPTArbSxSWzArbV09YlswXVttXSk7Zm9yKGJbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUz'@;
put 'MDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIwMTBcdWZm'@;
put 'MGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDhcdTMwMDlcdTMwMGFcdTMwMGJcdTMwMGNcdTMwMGRcdTMwMGVcdTMwMGZcdTMwMTBc'@;
put 'dTMwMTFcdWZmMGJcdWZmMGRceGIxXHhkN1x1ZmZmZFx4ZjdcdWZmMWRcdTIyNjBcdWZmMWNcdWZmMWVcdTIyNjZcdTIyNjdcdTIyMWVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZmU1XHVmZjA0XHVmZmUwXHVmZmUxXHVmZjA1XHVmZjAzXHVmZjA2XHVmZjBh'@;
put 'XHVmZjIwXHhhN1x1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjAzYlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyN1x1MjIyOFx1ZmZlMlx1MjFkMlx1MjFkNFx1MjIwMFx1'@;
put 'MjIwM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjEyYlx1MjAzMFx1MjY2Zlx1MjY2ZFx1MjY2YVx1MjAyMFx1MjAyMVx4YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1ZWZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMjldLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT1iWzEyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTI5XVttXV09MzMwMjQrbSxSWzMzMDI0K21dPWJbMTI5XVttXSk7Zm9yKGJbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNh'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVm'@;
put 'ZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUy'@;
put 'XHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUz'@;
put 'MDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5'@;
put 'XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJb'@;
put 'MTMwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzMF1bbV1dPTMzMjgwK20sUlszMzI4MCttXT1iWzEzMF1bbV0pO2ZvcihiWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBh'@;
put 'MVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1'@;
put 'MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBk'@;
put 'OFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1ZmZmZFx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1'@;
put 'MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNh'@;
put 'MFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1'@;
put 'MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT1iWzEzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzFdW21dXT0zMzUzNittLFJbMzM1MzYrbV09YlsxMzFdW21dKTtmb3IoYlsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0Mjhc'@;
put 'dTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0'@;
put 'MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdWZmZmRcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVc'@;
put 'dTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1'@;
put 'MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTMyXVttXV09MzM3OTIrbSxSWzMzNzkyK21dPWJbMTMyXVttXSk7Zm9yKGJbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYz'@;
put 'XHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUz'@;
put 'MzhmXHUzM2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdk'@;
put 'XHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTM1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzNV1bbV1dPTM0NTYwK20sUlszNDU2MCttXT1iWzEzNV1bbV0pO2ZvcihiWzEzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU5Y1x1NTUxNlx1NWEwM1x1OTYzZlx1NTRjMFx1NjExYlx1NjMyOFx1NTlmNlx1OTAyMlx1'@;
put 'ODQ3NVx1ODMxY1x1N2E1MFx1NjBhYVx1NjNlMVx1NmUyNVx1NjVlZFx1ODQ2Nlx1ODJhNlx1OWJmNVx1Njg5M1x1NTcyN1x1NjVhMVx1NjI3MVx1NWI5Ylx1NTlkMFx1ODY3Ylx1OThmNFx1N2Q2Mlx1N2RiZVx1OWI4ZVx1NjIxNlx1N2M5Zlx1ODhiN1x1NWI4OVx1NWViNVx1NjMwOVx1NjY5'@;
put 'N1x1Njg0OFx1OTVjN1x1OTc4ZFx1Njc0Zlx1NGVlNVx1NGYwYVx1NGY0ZFx1NGY5ZFx1NTA0OVx1NTZmMlx1NTkzN1x1NTlkNFx1NWEwMVx1NWMwOVx1NjBkZlx1NjEwZlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBiYVx1NzU0Zlx1NzU3MFx1NzlmYlx1N2RhZFx1N2RlZlx1ODBjM1x1ODQwZVx1'@;
put 'ODg2M1x1OGIwMlx1OTA1NVx1OTA3YVx1NTMzYlx1NGU5NVx1NGVhNVx1NTdkZlx1ODBiMlx1OTBjMVx1NzhlZlx1NGUwMFx1NThmMVx1NmVhMlx1OTAzOFx1N2EzMlx1ODMyOFx1ODI4Ylx1OWMyZlx1NTE0MVx1NTM3MFx1NTRiZFx1NTRlMVx1NTZlMFx1NTlmYlx1NWYxNVx1OThmMlx1NmRl'@;
put 'Ylx1ODBlNFx1ODUyZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTM2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzZdW21dXT0zNDgxNittLFJbMzQ4MTYrbV09YlsxMzZdW21dKTtmb3IoYlsxMzddPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1'@;
put 'MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVcdTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVc'@;
put 'dTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTkyZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODZcdWZmZmRcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcw'@;
put 'OGVcdTcxMTRcdTcxNTlcdTcxZDVcdTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFc'@;
put 'dTg5NTZcdTlkMmNcdTlkMGVcdTllYzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUy'@;
put 'YTBcdTUzZWZcdTU2MDlcdTU5MGZcdTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2Mjlc'@;
put 'dThjYThcdThmZTZcdTkwNGVcdTk3MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYw'@;
put 'NjJcdTYxZDBcdTYyMTJcdTYyZDBcdTY1MzlcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzN11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTM3XVttXV09MzUwNzIrbSxSWzM1MDcyK21dPWJbMTM3XVttXSk7Zm9yKGJb'@;
put 'MTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1'@;
put 'YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3Mzcy'@;
put 'XHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2'@;
put 'ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdl'@;
put 'XHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2'@;
put 'ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4'@;
put 'XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2'@;
put 'M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTM4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzOF1bbV1dPTM1MzI4K20sUlszNTMyOCttXT1iWzEz'@;
put 'OF1bbV0pO2ZvcihiWzEzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE1Zlx1NWUzMFx1NmJjNVx1NmMxN1x1NmM3ZFx1NzU3Zlx1Nzk0OFx1NWI2M1x1N2EwMFx1N2QwMFx1NWZiZFx1ODk4Zlx1OGExOFx1OGNiNFx1OGQ3N1x1'@;
put 'OGVjY1x1OGYxZFx1OThlMlx1OWEwZVx1OWIzY1x1NGU4MFx1NTA3ZFx1NTEwMFx1NTk5M1x1NWI5Y1x1NjIyZlx1NjI4MFx1NjRlY1x1NmIzYVx1NzJhMFx1NzU5MVx1Nzk0N1x1N2ZhOVx1ODdmYlx1OGFiY1x1OGI3MFx1NjNhY1x1ODNjYVx1OTdhMFx1NTQwOVx1NTQwM1x1NTVhYlx1Njg1'@;
put 'NFx1NmE1OFx1OGE3MFx1NzgyN1x1Njc3NVx1OWVjZFx1NTM3NFx1NWJhMlx1ODExYVx1ODY1MFx1OTAwNlx1NGUxOFx1NGU0NVx1NGVjN1x1NGYxMVx1NTNjYVx1NTQzOFx1NWJhZVx1NWYxM1x1NjAyNVx1NjU1MVx1ZmZmZFx1NjczZFx1NmM0Mlx1NmM3Mlx1NmNlM1x1NzA3OFx1NzQwM1x1'@;
put 'N2E3Nlx1N2FhZVx1N2IwOFx1N2QxYVx1N2NmZVx1N2Q2Nlx1NjVlN1x1NzI1Ylx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjJlMFx1NjMxOVx1NmUyMFx1ODY1YVx1OGEzMVx1OGRkZFx1OTJmOFx1NmYwMVx1NzlhNlx1OWI1YVx1NGVhOFx1NGVhYlx1NGVhY1x1NGY5Ylx1NGZhMFx1NTBk'@;
put 'MVx1NTE0N1x1N2FmNlx1NTE3MVx1NTFmNlx1NTM1NFx1NTMyMVx1NTM3Zlx1NTNlYlx1NTVhY1x1NTg4M1x1NWNlMVx1NWYzN1x1NWY0YVx1NjAyZlx1NjA1MFx1NjA2ZFx1NjMxZlx1NjU1OVx1NmE0Ylx1NmNjMVx1NzJjMlx1NzJlZFx1NzdlZlx1ODBmOFx1ODEwNVx1ODIwOFx1ODU0ZVx1'@;
put 'OTBmN1x1OTNlMVx1OTdmZlx1OTk1N1x1OWE1YVx1NGVmMFx1NTFkZFx1NWMyZFx1NjY4MVx1Njk2ZFx1NWM0MFx1NjZmMlx1Njk3NVx1NzM4OVx1Njg1MFx1N2M4MVx1NTBjNVx1NTJlNFx1NTc0N1x1NWRmZVx1OTMyNlx1NjVhNFx1NmIyM1x1NmIzZFx1NzQzNFx1Nzk4MVx1NzliZFx1N2I0'@;
put 'Ylx1N2RjYVx1ODJiOVx1ODNjY1x1ODg3Zlx1ODk1Zlx1OGIzOVx1OGZkMVx1OTFkMVx1NTQxZlx1OTI4MFx1NGU1ZFx1NTAzNlx1NTNlNVx1NTMzYVx1NzJkN1x1NzM5Nlx1NzdlOVx1ODJlNlx1OGVhZlx1OTljNlx1OTljOFx1OTlkMlx1NTE3N1x1NjExYVx1ODY1ZVx1NTViMFx1N2E3YVx1'@;
put 'NTA3Nlx1NWJkM1x1OTA0N1x1OTY4NVx1NGUzMlx1NmFkYlx1OTFlN1x1NWM1MVx1NWM0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTM5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzldW21dXT0zNTU4NCttLFJb'@;
put 'MzU1ODQrbV09YlsxMzldW21dKTtmb3IoYlsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNc'@;
put 'dTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUyMTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1'@;
put 'NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFcdTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZThcdWZmZmRcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBc'@;
put 'dTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRlZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5'@;
put 'MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlcdThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRc'@;
put 'dTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThh'@;
put 'ODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2VcdTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2Nc'@;
put 'dTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTFcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQwXVtt'@;
put 'XV09MzU4NDArbSxSWzM1ODQwK21dPWJbMTQwXVttXSk7Zm9yKGJbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3'@;
put 'XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3'@;
put 'Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5'@;
put 'XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3'@;
put 'MmRiXHU4ZmJjXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2Zi'@;
put 'XHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3'@;
put 'ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNl'@;
put 'XHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDFdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihlZVtiWzE0MV1bbV1dPTM2MDk2K20sUlszNjA5NittXT1iWzE0MV1bbV0pO2ZvcihiWzE0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJkZlx1NjJmNlx1NjRhZVx1NjRlNlx1NjcyZFx1NmJiYVx1ODVhOVx1OTZkMVx1NzY5'@;
put 'MFx1OWJkNlx1NjM0Y1x1OTMwNlx1OWJhYlx1NzZiZlx1NjY1Mlx1NGUwOVx1NTA5OFx1NTNjMlx1NWM3MVx1NjBlOFx1NjQ5Mlx1NjU2M1x1Njg1Zlx1NzFlNlx1NzNjYVx1NzUyM1x1N2I5N1x1N2U4Mlx1ODY5NVx1OGI4M1x1OGNkYlx1OTE3OFx1OTkxMFx1NjVhY1x1NjZhYlx1NmI4Ylx1'@;
put 'NGVkNVx1NGVkNFx1NGYzYVx1NGY3Zlx1NTIzYVx1NTNmOFx1NTNmMlx1NTVlM1x1NTZkYlx1NThlYlx1NTljYlx1NTljOVx1NTlmZlx1NWI1MFx1NWM0ZFx1NWUwMlx1NWUyYlx1NWZkN1x1NjAxZFx1NjMwN1x1NjUyZlx1NWI1Y1x1NjVhZlx1NjViZFx1NjVlOFx1Njc5ZFx1NmI2Mlx1ZmZm'@;
put 'ZFx1NmI3Ylx1NmMwZlx1NzM0NVx1Nzk0OVx1NzljMVx1N2NmOFx1N2QxOVx1N2QyYlx1ODBhMlx1ODEwMlx1ODFmM1x1ODk5Nlx1OGE1ZVx1OGE2OVx1OGE2Nlx1OGE4Y1x1OGFlZVx1OGNjN1x1OGNkY1x1OTZjY1x1OThmY1x1NmI2Zlx1NGU4Ylx1NGYzY1x1NGY4ZFx1NTE1MFx1NWI1N1x1'@;
put 'NWJmYVx1NjE0OFx1NjMwMVx1NjY0Mlx1NmIyMVx1NmVjYlx1NmNiYlx1NzIzZVx1NzRiZFx1NzVkNFx1NzhjMVx1NzkzYVx1ODAwY1x1ODAzM1x1ODFlYVx1ODQ5NFx1OGY5ZVx1NmM1MFx1OWU3Zlx1NWYwZlx1OGI1OFx1OWQyYlx1N2FmYVx1OGVmOFx1NWI4ZFx1OTZlYlx1NGUwM1x1NTNm'@;
put 'MVx1NTdmN1x1NTkzMVx1NWFjOVx1NWJhNFx1NjA4OVx1NmU3Zlx1NmYwNlx1NzViZVx1OGNlYVx1NWI5Zlx1ODUwMFx1N2JlMFx1NTA3Mlx1NjdmNFx1ODI5ZFx1NWM2MVx1ODU0YVx1N2UxZVx1ODIwZVx1NTE5OVx1NWMwNFx1NjM2OFx1OGQ2Nlx1NjU5Y1x1NzE2ZVx1NzkzZVx1N2QxN1x1'@;
put 'ODAwNVx1OGIxZFx1OGVjYVx1OTA2ZVx1ODZjN1x1OTBhYVx1NTAxZlx1NTJmYVx1NWMzYVx1Njc1M1x1NzA3Y1x1NzIzNVx1OTE0Y1x1OTFjOFx1OTMyYlx1ODJlNVx1NWJjMlx1NWYzMVx1NjBmOVx1NGUzYlx1NTNkNlx1NWI4OFx1NjI0Ylx1NjczMVx1NmI4YVx1NzJlOVx1NzNlMFx1N2Ey'@;
put 'ZVx1ODE2Ylx1OGRhM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNkN1x1NTQ2YVx1NWJmZlx1NjM4OFx1NmEzOVx1N2RhY1x1OTcwMFx1NTZkYVx1NTNjZVx1NTQ2OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQyXVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoZWVbYlsxNDJdW21dXT0zNjM1MittLFJbMzYzNTIrbV09YlsxNDJdW21dKTtmb3IoYlsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZk'@;
put 'MzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZcdTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJc'@;
put 'dTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdhZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZi'@;
put 'ODlcdTZkZjNcdWZmZmRcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJcdTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZc'@;
put 'dTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVjMGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYy'@;
put 'ODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1YzdcdTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdc'@;
put 'dTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRlMGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4'@;
put 'Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDNdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT1iWzE0M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQzXVttXV09MzY2MDgrbSxSWzM2NjA4K21dPWJbMTQzXVttXSk7Zm9yKGJbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3'@;
put 'ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVl'@;
put 'XHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5'@;
put 'ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4'@;
put 'XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2'@;
put 'ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2Nzkw'@;
put 'XHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1'@;
put 'YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ0XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09YlsxNDRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0NF1bbV1dPTM2ODY0K20sUlszNjg2NCttXT1iWzE0NF1bbV0pO2ZvcihiWzE0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U0YVx1N2ZhOFx1'@;
put 'ODE3YVx1ODIxYlx1ODIzOVx1ODVhNlx1OGE2ZVx1OGNjZVx1OGRmNVx1OTA3OFx1OTA3N1x1OTJhZFx1OTI5MVx1OTU4M1x1OWJhZVx1NTI0ZFx1NTU4NFx1NmYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N2U1NVx1ODFiM1x1N2NjZVx1NTY0Y1x1NTg1MVx1NWNhOFx1NjNhYVx1NjZmZVx1NjZm'@;
put 'ZFx1Njk1YVx1NzJkOVx1NzU4Zlx1NzU4ZVx1NzkwZVx1Nzk1Nlx1NzlkZlx1N2M5N1x1N2QyMFx1N2Q0NFx1ODYwN1x1OGEzNFx1OTYzYlx1OTA2MVx1OWYyMFx1NTBlN1x1NTI3NVx1NTNjY1x1NTNlMlx1NTAwOVx1NTVhYVx1NThlZVx1NTk0Zlx1NzIzZFx1NWI4Ylx1NWM2NFx1NTMxZFx1'@;
put 'NjBlM1x1NjBmM1x1NjM1Y1x1NjM4M1x1NjMzZlx1NjNiYlx1ZmZmZFx1NjRjZFx1NjVlOVx1NjZmOVx1NWRlM1x1NjljZFx1NjlmZFx1NmYxNVx1NzFlNVx1NGU4OVx1NzVlOVx1NzZmOFx1N2E5M1x1N2NkZlx1N2RjZlx1N2Q5Y1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Y1x1ODRiY1x1ODVm'@;
put 'Ylx1ODhjNVx1OGQ3MFx1OTAwMVx1OTA2ZFx1OTM5N1x1OTcxY1x1OWExMlx1NTBjZlx1NTg5N1x1NjE4ZVx1ODFkM1x1ODUzNVx1OGQwOFx1OTAyMFx1NGZjM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Zlx1NjM0OVx1Njc1Zlx1NmUyY1x1OGRiM1x1OTAxZlx1NGZkN1x1NWM1ZVx1OGNjYVx1'@;
put 'NjVjZlx1N2Q5YVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNjM1x1NWI1OFx1NWI2Ylx1NWMwYVx1NjQwZFx1Njc1MVx1OTA1Y1x1NGVkNlx1NTkxYVx1NTkyYVx1NmM3MFx1OGE1MVx1NTUzZVx1NTgxNVx1NTlhNVx1NjBmMFx1NjI1M1x1NjdjMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTljNFx1OWEy'@;
put 'OFx1NGY1M1x1NTgwNlx1NWJmZVx1ODAxMFx1NWNiMVx1NWUyZlx1NWY4NVx1NjAyMFx1NjE0Ylx1NjIzNFx1NjZmZlx1NmNmMFx1NmVkZVx1ODBjZVx1ODE3Zlx1ODJkNFx1ODg4Ylx1OGNiOFx1OTAwMFx1OTAyZVx1OTY4YVx1OWVkYlx1OWJkYlx1NGVlM1x1NTNmMFx1NTkyN1x1N2IyY1x1'@;
put 'OTE4ZFx1OTg0Y1x1OWRmOVx1NmVkZFx1NzAyN1x1NTM1M1x1NTU0NFx1NWI4NVx1NjI1OFx1NjI5ZVx1NjJkM1x1NmNhMlx1NmZlZlx1NzQyMlx1OGExN1x1OTQzOFx1NmZjMVx1OGFmZVx1ODMzOFx1NTFlN1x1ODZmOFx1NTNlYVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT1iWzE0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDVdW21dXT0zNzEyMCttLFJbMzcxMjArbV09YlsxNDVdW21dKTtmb3IoYlsxNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTUzZTlcdTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdh'@;
put 'ZWZcdTdiYWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRc'@;
put 'dTg3MThcdTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzRcdWZmZmRcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTky'@;
put 'ZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2Fc'@;
put 'dTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1'@;
put 'ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNc'@;
put 'dThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9YlsxNDZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ2XVttXV09MzczNzYrbSxSWzM3Mzc2K21dPWJbMTQ2XVttXSk7Zm9yKGJbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2'@;
put 'ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRk'@;
put 'XHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3'@;
put 'NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMw'@;
put 'XHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4'@;
put 'YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVh'@;
put 'XHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0N11bbV1dPTM3NjMyK20sUlszNzYzMittXT1iWzE0N11bbV0pO2ZvcihiWzE0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk4Mlx1NWMzZlx1OTdlZVx1NGVmYlx1NTk4YVx1NWZjZFx1OGE4ZFx1NmZlMVx1NzliMFx1Nzk2Mlx1NWJlN1x1ODQ3MVx1NzMyYlx1NzFiMVx1NWU3NFx1NWZmNVx1NjM3Ylx1NjQ5YVx1NzFjM1x1N2M5OFx1NGU0M1x1NWVmY1x1NGU0Ylx1'@;
put 'NTdkY1x1NTZhMlx1NjBhOVx1NmZjM1x1N2QwZFx1ODBmZFx1ODEzM1x1ODFiZlx1OGZiMlx1ODk5N1x1ODZhNFx1NWRmNFx1NjI4YVx1NjRhZFx1ODk4N1x1Njc3N1x1NmNlMlx1NmQzZVx1NzQzNlx1NzgzNFx1NWE0Nlx1N2Y3NVx1ODJhZFx1OTlhY1x1NGZmM1x1NWVjM1x1NjJkZFx1NjM5'@;
put 'Mlx1NjU1N1x1Njc2Zlx1NzZjM1x1NzI0Y1x1ODBjY1x1ODBiYVx1OGYyOVx1OTE0ZFx1NTAwZFx1NTdmOVx1NWE5Mlx1Njg4NVx1ZmZmZFx1Njk3M1x1NzE2NFx1NzJmZFx1OGNiN1x1NThmMlx1OGNlMFx1OTY2YVx1OTAxOVx1ODc3Zlx1NzllNFx1NzdlN1x1ODQyOVx1NGYyZlx1NTI2NVx1'@;
put 'NTM1YVx1NjJjZFx1NjdjZlx1NmNjYVx1NzY3ZFx1N2I5NFx1N2M5NVx1ODIzNlx1ODU4NFx1OGZlYlx1NjZkZFx1NmYyMFx1NzIwNlx1N2UxYlx1ODNhYlx1OTljMVx1OWVhNlx1NTFmZFx1N2JiMVx1Nzg3Mlx1N2JiOFx1ODA4N1x1N2I0OFx1NmFlOFx1NWU2MVx1ODA4Y1x1NzU1MVx1NzU2'@;
put 'MFx1NTE2Ylx1OTI2Mlx1NmU4Y1x1NzY3YVx1OTE5N1x1OWFlYVx1NGYxMFx1N2Y3MFx1NjI5Y1x1N2I0Zlx1OTVhNVx1OWNlOVx1NTY3YVx1NTg1OVx1ODZlNFx1OTZiY1x1NGYzNFx1NTIyNFx1NTM0YVx1NTNjZFx1NTNkYlx1NWUwNlx1NjQyY1x1NjU5MVx1Njc3Zlx1NmMzZVx1NmM0ZVx1'@;
put 'NzI0OFx1NzJhZlx1NzNlZFx1NzU1NFx1N2U0MVx1ODIyY1x1ODVlOVx1OGNhOVx1N2JjNFx1OTFjNlx1NzE2OVx1OTgxMlx1OThlZlx1NjMzZFx1NjY2OVx1NzU2YVx1NzZlNFx1NzhkMFx1ODU0M1x1ODZlZVx1NTMyYVx1NTM1MVx1NTQyNlx1NTk4M1x1NWU4N1x1NWY3Y1x1NjBiMlx1NjI0'@;
put 'OVx1NjI3OVx1NjJhYlx1NjU5MFx1NmJkNFx1NmNjY1x1NzViMlx1NzZhZVx1Nzg5MVx1NzlkOFx1N2RjYlx1N2Y3N1x1ODBhNVx1ODhhYlx1OGFiOVx1OGNiYlx1OTA3Zlx1OTc1ZVx1OThkYlx1NmEwYlx1N2MzOFx1NTA5OVx1NWMzZVx1NWZhZVx1Njc4N1x1NmJkOFx1NzQzNVx1NzcwOVx1'@;
put 'N2Y4ZVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDhdW21dXT0zNzg4OCttLFJbMzc4ODgrbV09YlsxNDhdW21dKTtmb3IoYlsxNDldPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmM2JcdTY3Y2FcdTdhMTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNc'@;
put 'dTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVcdThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4'@;
put 'M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUxYThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzdcdWZmZmRcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRc'@;
put 'dTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFcdTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRl'@;
put 'Y2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYyNmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlc'@;
put 'dTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVcdTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3'@;
put 'MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdc'@;
put 'dTY1M2VcdTY1YjlcdTY3MGJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ5XVttXV09MzgxNDQrbSxSWzM4MTQ0K21dPWJbMTQ5XVttXSk7Zm9yKGJbMTUwXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRm'@;
put 'XHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1'@;
put 'OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5'@;
put 'XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3'@;
put 'Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3'@;
put 'XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1'@;
put 'MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFl'@;
put 'XHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTUwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1MF1bbV1dPTM4NDAwK20sUlszODQwMCttXT1iWzE1MF1bbV0pO2Zv'@;
put 'cihiWzE1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFlZFx1OGYzOFx1NTUyZlx1NGY1MVx1NTEyYVx1NTJjN1x1NTNjYlx1NWJhNVx1NWU3ZFx1NjBhMFx1NjE4Mlx1NjNkNlx1NjcwOVx1NjdkYVx1NmU2N1x1NmQ4Y1x1NzMz'@;
put 'Nlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhkNVx1OGE5OFx1OTA0YVx1OTA5MVx1OTBmNVx1OTZjNFx1ODc4ZFx1NTkxNVx1NGU4OFx1NGY1OVx1NGUwZVx1OGE4OVx1OGYzZlx1OTgxMFx1NTBhZFx1NWU3Y1x1NTk5Nlx1NWJiOVx1NWViOFx1NjNkYVx1NjNmYVx1NjRjMVx1NjZkY1x1Njk0YVx1'@;
put 'NjlkOFx1NmQwYlx1NmViNlx1NzE5NFx1NzUyOFx1N2FhZlx1N2Y4YVx1ODAwMFx1ODQ0OVx1ODRjOVx1ODk4MVx1OGIyMVx1OGUwYVx1OTA2NVx1OTY3ZFx1OTkwYVx1NjE3ZVx1NjI5MVx1NmIzMlx1ZmZmZFx1NmM4M1x1NmQ3NFx1N2ZjY1x1N2ZmY1x1NmRjMFx1N2Y4NVx1ODdiYVx1ODhm'@;
put 'OFx1Njc2NVx1ODNiMVx1OTgzY1x1OTZmN1x1NmQxYlx1N2Q2MVx1ODQzZFx1OTE2YVx1NGU3MVx1NTM3NVx1NWQ1MFx1NmIwNFx1NmZlYlx1ODVjZFx1ODYyZFx1ODlhN1x1NTIyOVx1NTQwZlx1NWM2NVx1Njc0ZVx1NjhhOFx1NzQwNlx1NzQ4M1x1NzVlMlx1ODhjZlx1ODhlMVx1OTFjY1x1'@;
put 'OTZlMlx1OTY3OFx1NWY4Ylx1NzM4N1x1N2FjYlx1ODQ0ZVx1NjNhMFx1NzU2NVx1NTI4OVx1NmQ0MVx1NmU5Y1x1NzQwOVx1NzU1OVx1Nzg2Ylx1N2M5Mlx1OTY4Nlx1N2FkY1x1OWY4ZFx1NGZiNlx1NjE2ZVx1NjVjNVx1ODY1Y1x1NGU4Nlx1NGVhZVx1NTBkYVx1NGUyMVx1NTFjY1x1NWJl'@;
put 'ZVx1NjU5OVx1Njg4MVx1NmRiY1x1NzMxZlx1NzY0Mlx1NzdhZFx1N2ExY1x1N2NlN1x1ODI2Zlx1OGFkMlx1OTA3Y1x1OTFjZlx1OTY3NVx1OTgxOFx1NTI5Ylx1N2RkMVx1NTAyYlx1NTM5OFx1Njc5N1x1NmRjYlx1NzFkMFx1NzQzM1x1ODFlOFx1OGYyYVx1OTZhM1x1OWM1N1x1OWU5Zlx1'@;
put 'NzQ2MFx1NTg0MVx1NmQ5OVx1N2QyZlx1OTg1ZVx1NGVlNFx1NGYzNlx1NGY4Ylx1NTFiN1x1NTJiMVx1NWRiYVx1NjAxY1x1NzNiMlx1NzkzY1x1ODJkM1x1OTIzNFx1OTZiN1x1OTZmNlx1OTcwYVx1OWU5N1x1OWY2Mlx1NjZhNlx1NmI3NFx1NTIxN1x1NTJhM1x1NzBjOFx1ODhjMlx1NWVj'@;
put 'OVx1NjA0Ylx1NjE5MFx1NmYyM1x1NzE0OVx1N2MzZVx1N2RmNFx1ODA2Zlx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTUxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTFdW21dXT0zODY1NittLFJbMzg2NTYrbV09'@;
put 'YlsxNTFdW21dKTtmb3IoYlsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJcdTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3'@;
put 'MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThhZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlc'@;
put 'dTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGNcdTRlMTBc'@;
put 'dTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZcdTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRl'@;
put 'YzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRlZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2Vc'@;
put 'dTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFcdTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUw'@;
put 'NDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUwNzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTUyXVttXV09Mzg5MTIr'@;
put 'bSxSWzM4OTEyK21dPWJbMTUyXVttXSk7Zm9yKGJbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1'@;
put 'MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThm'@;
put 'XHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1'@;
put 'MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4'@;
put 'XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1'@;
put 'MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2Rm'@;
put 'XHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1'@;
put 'NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTUzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1'@;
put 'M11bbV1dPTM5MTY4K20sUlszOTE2OCttXT1iWzE1M11bbV0pO2ZvcihiWzE1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhYlx1NTRjMlx1NTRhNFx1NTRiZVx1NTRiY1x1NTRkOFx1NTRlNVx1NTRlNlx1NTUwZlx1NTUxNFx1'@;
put 'NTRmZFx1NTRlZVx1NTRlZFx1NTRmYVx1NTRlMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Y1x1NTUyZVx1NTU1Y1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1ZFx1NTU5OVx1NTU4MFx1NTRhZlx1NTU4YVx1NTU5Zlx1NTU3Ylx1NTU3ZVx1NTU5OFx1NTU5ZVx1NTVhZVx1NTU3'@;
put 'Y1x1NTU4M1x1NTVhOVx1NTU4N1x1NTVhOFx1NTVkYVx1NTVjNVx1NTVkZlx1NTVjNFx1NTVkY1x1NTVlNFx1NTVkNFx1NTYxNFx1NTVmN1x1NTYxNlx1NTVmZVx1NTVmZFx1NTYxYlx1NTVmOVx1NTY0ZVx1NTY1MFx1NzFkZlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFx1ZmZmZFx1NTY2Ylx1'@;
put 'NTY2NFx1NTYyZlx1NTY2Y1x1NTY2YVx1NTY4Nlx1NTY4MFx1NTY4YVx1NTZhMFx1NTY5NFx1NTY4Zlx1NTZhNVx1NTZhZVx1NTZiNlx1NTZiNFx1NTZjMlx1NTZiY1x1NTZjMVx1NTZjM1x1NTZjMFx1NTZjOFx1NTZjZVx1NTZkMVx1NTZkM1x1NTZkN1x1NTZlZVx1NTZmOVx1NTcwMFx1NTZm'@;
put 'Zlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwYlx1NTcwZFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVjN1x1NTcxY1x1NTcyNlx1NTczN1x1NTczOFx1NTc0ZVx1NTczYlx1NTc0MFx1NTc0Zlx1NTc2OVx1NTdjMFx1NTc4OFx1NTc2MVx1NTc3Zlx1NTc4OVx1NTc5M1x1NTdhMFx1NTdiM1x1NTdhNFx1'@;
put 'NTdhYVx1NTdiMFx1NTdjM1x1NTdjNlx1NTdkNFx1NTdkMlx1NTdkM1x1NTgwYVx1NTdkNlx1NTdlM1x1NTgwYlx1NTgxOVx1NTgxZFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Ylx1NTg3MFx1NmJjMFx1NTg1Mlx1NTgzZFx1NTg3OVx1NTg4NVx1NThiOVx1NTg5Zlx1NThhYlx1NThiYVx1NThk'@;
put 'ZVx1NThiYlx1NThiOFx1NThhZVx1NThjNVx1NThkM1x1NThkMVx1NThkN1x1NThkOVx1NThkOFx1NThlNVx1NThkY1x1NThlNFx1NThkZlx1NThlZlx1NThmYVx1NThmOVx1NThmYlx1NThmY1x1NThmZFx1NTkwMlx1NTkwYVx1NTkxMFx1NTkxYlx1NjhhNlx1NTkyNVx1NTkyY1x1NTkyZFx1'@;
put 'NTkzMlx1NTkzOFx1NTkzZVx1N2FkMlx1NTk1NVx1NTk1MFx1NTk0ZVx1NTk1YVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Y1x1NTk2OVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU0XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoZWVbYlsxNTRdW21dXT0zOTQyNCttLFJbMzk0MjQrbV09YlsxNTRdW21dKTtmb3IoYlsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZc'@;
put 'dTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNcdTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVh'@;
put 'ZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTViNDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODBc'@;
put 'dWZmZmRcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJcdTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVj'@;
put 'MzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVjNzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRc'@;
put 'dTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRcdTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVk'@;
put 'OWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVkZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdc'@;
put 'dTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFcdTVlYzJcdTVlYzhcdTVlZDBcdTVlY2ZcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1NV1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU1XVttXV09Mzk2ODArbSxSWzM5NjgwK21dPWJbMTU1XVttXSk7Zm9yKGJbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUy'@;
put 'XHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1'@;
put 'ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZm'@;
put 'XHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2'@;
put 'MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2'@;
put 'XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2'@;
put 'MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNi'@;
put 'XHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTU2XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09YlsxNTZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1Nl1bbV1dPTM5OTM2K20sUlszOTkzNittXT1iWzE1Nl1bbV0pO2ZvcihiWzE1N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjIxZVx1NjIyMVx1NjIyYVx1NjIy'@;
put 'ZVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0ZVx1NjI1ZVx1NjI2M1x1NjI1Ylx1NjI2MFx1NjI2OFx1NjI3Y1x1NjI4Mlx1NjI4OVx1NjI3ZVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJkNFx1NjI4M1x1NjI5NFx1NjJkN1x1NjJkMVx1NjJiYlx1NjJjZlx1NjJmZlx1NjJjNlx1NjRkNFx1'@;
put 'NjJjOFx1NjJkY1x1NjJjY1x1NjJjYVx1NjJjMlx1NjJjN1x1NjI5Ylx1NjJjOVx1NjMwY1x1NjJlZVx1NjJmMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJlZlx1NjJmNVx1NjM1MFx1NjMzZVx1NjM0ZFx1NjQxY1x1NjM0Zlx1NjM5Nlx1NjM4ZVx1NjM4MFx1NjNhYlx1NjM3Nlx1NjNhM1x1NjM4'@;
put 'Zlx1NjM4OVx1NjM5Zlx1NjNiNVx1NjM2Ylx1ZmZmZFx1NjM2OVx1NjNiZVx1NjNlOVx1NjNjMFx1NjNjNlx1NjNlM1x1NjNjOVx1NjNkMlx1NjNmNlx1NjNjNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxZFx1NjQxN1x1NjQyOFx1NjQwZlx1NjQ2N1x1NjQ2Zlx1'@;
put 'NjQ3Nlx1NjQ0ZVx1NjUyYVx1NjQ5NVx1NjQ5M1x1NjRhNVx1NjRhOVx1NjQ4OFx1NjRiY1x1NjRkYVx1NjRkMlx1NjRjNVx1NjRjN1x1NjRiYlx1NjRkOFx1NjRjMlx1NjRmMVx1NjRlN1x1ODIwOVx1NjRlMFx1NjRlMVx1NjJhY1x1NjRlM1x1NjRlZlx1NjUyY1x1NjRmNlx1NjRmNFx1NjRm'@;
put 'Mlx1NjRmYVx1NjUwMFx1NjRmZFx1NjUxOFx1NjUxY1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyYlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Ylx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0ZFx1NjU1OFx1NjU1ZVx1NjU1ZFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OGI4YVx1'@;
put 'NjU5Ylx1NjU5Zlx1NjVhYlx1NjViN1x1NjVjM1x1NjVjNlx1NjVjMVx1NjVjNFx1NjVjY1x1NjVkMlx1NjVkYlx1NjVkOVx1NjVlMFx1NjVlMVx1NjVmMVx1Njc3Mlx1NjYwYVx1NjYwM1x1NjVmYlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxY1x1NjY0Zlx1NjY0NFx1NjY0OVx1NjY0'@;
put 'MVx1NjY1ZVx1NjY1ZFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Zlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4ZVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5ZFx1NjZjMVx1NjZiOVx1NjZjOVx1NjZiZVx1NjZiY1x1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1N10u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTddW21dXT00MDE5MittLFJbNDAxOTIrbV09YlsxNTddW21dKTtmb3IoYlsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2YzRcdTY2'@;
put 'YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRc'@;
put 'dTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJcdTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4'@;
put 'MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGVcdWZmZmRcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZc'@;
put 'dTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVcdTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5'@;
put 'MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2Vc'@;
put 'dTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJcdTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZh'@;
put 'MGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZhODRcdTZhYTJcdTZhYTNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9YlsxNThdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU4XVttXV09NDA0NDgrbSxSWzQwNDQ4K21dPWJbMTU4XVttXSk7Zm9yKGJbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVl'@;
put 'XHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2'@;
put 'YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4'@;
put 'XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2'@;
put 'ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5'@;
put 'XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJkXHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2'@;
put 'ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPWJbMTU5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1OV1bbV1dPTQwNzA0K20sUls0MDcwNCttXT1iWzE1OV1bbV0pO2ZvcihiWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NmYzZVx1NmYxM1x1NmVmN1x1NmY4Nlx1NmY3YVx1NmY3OFx1NmY4MVx1NmY4MFx1NmY2Zlx1NmY1Ylx1NmZmM1x1NmY2ZFx1NmY4Mlx1NmY3Y1x1NmY1OFx1NmY4ZVx1NmY5MVx1NmZjMlx1NmY2Nlx1NmZiM1x1NmZhM1x1NmZhMVx1NmZhNFx1NmZiOVx1NmZj'@;
put 'Nlx1NmZhYVx1NmZkZlx1NmZkNVx1NmZlY1x1NmZkNFx1NmZkOFx1NmZmMVx1NmZlZVx1NmZkYlx1NzAwOVx1NzAwYlx1NmZmYVx1NzAxMVx1NzAwMVx1NzAwZlx1NmZmZVx1NzAxYlx1NzAxYVx1NmY3NFx1NzAxZFx1NzAxOFx1NzAxZlx1NzAzMFx1NzAzZVx1NzAzMlx1NzA1MVx1NzA2M1x1'@;
put 'NzA5OVx1NzA5Mlx1NzBhZlx1NzBmMVx1NzBhY1x1NzBiOFx1NzBiM1x1NzBhZVx1NzBkZlx1NzBjYlx1NzBkZFx1ZmZmZFx1NzBkOVx1NzEwOVx1NzBmZFx1NzExY1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Y1x1NzE1Nlx1NzE2Y1x1NzE4Zlx1NzFmYlx1NzE4'@;
put 'NFx1NzE5NVx1NzFhOFx1NzFhY1x1NzFkN1x1NzFiOVx1NzFiZVx1NzFkMlx1NzFjOVx1NzFkNFx1NzFjZVx1NzFlMFx1NzFlY1x1NzFlN1x1NzFmNVx1NzFmY1x1NzFmOVx1NzFmZlx1NzIwZFx1NzIxMFx1NzIxYlx1NzIyOFx1NzIyZFx1NzIyY1x1NzIzMFx1NzIzMlx1NzIzYlx1NzIzY1x1'@;
put 'NzIzZlx1NzI0MFx1NzI0Nlx1NzI0Ylx1NzI1OFx1NzI3NFx1NzI3ZVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJhMlx1NzJhN1x1NzJiOVx1NzJiMlx1NzJjM1x1NzJjNlx1NzJjNFx1NzJjZVx1NzJkMlx1NzJlMlx1NzJlMFx1NzJlMVx1NzJmOVx1NzJmN1x1NTAwZlx1NzMx'@;
put 'N1x1NzMwYVx1NzMxY1x1NzMxNlx1NzMxZFx1NzMzNFx1NzMyZlx1NzMyOVx1NzMyNVx1NzMzZVx1NzM0ZVx1NzM0Zlx1OWVkOFx1NzM1N1x1NzM2YVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Ylx1NzM3YVx1NzNjOFx1NzNiM1x1NzNjZVx1NzNiYlx1NzNjMFx1NzNlNVx1NzNlZVx1'@;
put 'NzNkZVx1NzRhMlx1NzQwNVx1NzQ2Zlx1NzQyNVx1NzNmOFx1NzQzMlx1NzQzYVx1NzQ1NVx1NzQzZlx1NzQ1Zlx1NzQ1OVx1NzQ0MVx1NzQ1Y1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2YVx1NzQ3Nlx1NzQ3ZVx1NzQ4Ylx1NzQ5ZVx1NzRhN1x1NzRjYVx1NzRjZlx1NzRkNFx1NzNmMVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjRdW21dXT01NzM0NCttLFJbNTczNDQrbV09YlsyMjRdW21dKTtmb3IoYlsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1'@;
put 'NDRcdTc1NGRcdTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNc'@;
put 'dTc1YjVcdTc1YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmZcdWZmZmRcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2'@;
put 'MjJcdTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZc'@;
put 'dTc2OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3'@;
put 'MWJcdTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFc'@;
put 'dTc3ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4'@;
put 'Y2FcdTc4ZWNcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI1XVttXV09NTc2MDArbSxSWzU3NjAwK21dPWJbMjI1XVttXSk7Zm9yKGJbMjI2XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3'@;
put 'OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5'@;
put 'XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3'@;
put 'YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1'@;
put 'XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3'@;
put 'YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2'@;
put 'XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3'@;
put 'Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyNl1bbV1dPTU3ODU2K20sUls1Nzg1NittXT1iWzIyNl1bbV0pO2ZvcihiWzIyN109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QwMlx1N2QxY1x1N2QxNVx1N2QwYVx1N2Q0NVx1N2Q0Ylx1N2QyZVx1N2QzMlx1N2QzZlx1N2QzNVx1N2Q0Nlx1N2Q3M1x1N2Q1Nlx1N2Q0ZVx1N2Q3Mlx1N2Q2OFx1N2Q2ZVx1N2Q0Zlx1'@;
put 'N2Q2M1x1N2Q5M1x1N2Q4OVx1N2Q1Ylx1N2Q4Zlx1N2Q3ZFx1N2Q5Ylx1N2RiYVx1N2RhZVx1N2RhM1x1N2RiNVx1N2RjN1x1N2RiZFx1N2RhYlx1N2UzZFx1N2RhMlx1N2RhZlx1N2RkY1x1N2RiOFx1N2Q5Zlx1N2RiMFx1N2RkOFx1N2RkZFx1N2RlNFx1N2RkZVx1N2RmYlx1N2RmMlx1N2Rl'@;
put 'MVx1N2UwNVx1N2UwYVx1N2UyM1x1N2UyMVx1N2UxMlx1N2UzMVx1N2UxZlx1N2UwOVx1N2UwYlx1N2UyMlx1N2U0Nlx1N2U2Nlx1N2UzYlx1N2UzNVx1N2UzOVx1N2U0M1x1N2UzN1x1ZmZmZFx1N2UzMlx1N2UzYVx1N2U2N1x1N2U1ZFx1N2U1Nlx1N2U1ZVx1N2U1OVx1N2U1YVx1N2U3OVx1'@;
put 'N2U2YVx1N2U2OVx1N2U3Y1x1N2U3Ylx1N2U4M1x1N2RkNVx1N2U3ZFx1OGZhZVx1N2U3Zlx1N2U4OFx1N2U4OVx1N2U4Y1x1N2U5Mlx1N2U5MFx1N2U5M1x1N2U5NFx1N2U5Nlx1N2U4ZVx1N2U5Ylx1N2U5Y1x1N2YzOFx1N2YzYVx1N2Y0NVx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y1MFx1N2Y1'@;
put 'MVx1N2Y1NVx1N2Y1NFx1N2Y1OFx1N2Y1Zlx1N2Y2MFx1N2Y2OFx1N2Y2OVx1N2Y2N1x1N2Y3OFx1N2Y4Mlx1N2Y4Nlx1N2Y4M1x1N2Y4OFx1N2Y4N1x1N2Y4Y1x1N2Y5NFx1N2Y5ZVx1N2Y5ZFx1N2Y5YVx1N2ZhM1x1N2ZhZlx1N2ZiMlx1N2ZiOVx1N2ZhZVx1N2ZiNlx1N2ZiOFx1OGI3MVx1'@;
put 'N2ZjNVx1N2ZjNlx1N2ZjYVx1N2ZkNVx1N2ZkNFx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZmM1x1N2ZmOVx1OThkY1x1ODAwNlx1ODAwNFx1ODAwYlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxY1x1ODAyMVx1ODAyOFx1ODAzZlx1ODAzYlx1ODA0YVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1YVx1ODA1'@;
put 'Zlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3ZFx1ODA3Zlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Ylx1ODA5M1x1ODA5YVx1ODBhZFx1NTE5MFx1ODBhY1x1ODBkYlx1ODBlNVx1ODBkOVx1ODBkZFx1ODBjNFx1ODBkYVx1ODBkNlx1ODEwOVx1ODBlZlx1'@;
put 'ODBmMVx1ODExYlx1ODEyOVx1ODEyM1x1ODEyZlx1ODE0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjddW21dXT01ODExMittLFJbNTgxMTIrbV09YlsyMjddW21d'@;
put 'KTtmb3IoYlsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJc'@;
put 'dTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgxYmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgx'@;
put 'ZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlcdTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjRcdWZmZmRcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdc'@;
put 'dTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgyZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgz'@;
put 'MzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdcdTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRc'@;
put 'dTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgzZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0'@;
put 'NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2FcdTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNc'@;
put 'dTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDhcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI4XVttXV09NTgzNjgrbSxSWzU4MzY4'@;
put 'K21dPWJbMjI4XVttXSk7Zm9yKGJbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVh'@;
put 'XHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4'@;
put 'NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2'@;
put 'XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4'@;
put 'NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2Qy'@;
put 'XHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4'@;
put 'OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJh'@;
put 'XHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyOV1bbV1dPTU4'@;
put 'NjI0K20sUls1ODYyNCttXT1iWzIyOV1bbV0pO2ZvcihiWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODk2Nlx1ODk2NFx1ODk2ZFx1ODk2YVx1ODk2Zlx1ODk3NFx1ODk3N1x1ODk3ZVx1ODk4M1x1ODk4OFx1ODk4YVx1ODk5'@;
put 'M1x1ODk5OFx1ODlhMVx1ODlhOVx1ODlhNlx1ODlhY1x1ODlhZlx1ODliMlx1ODliYVx1ODliZFx1ODliZlx1ODljMFx1ODlkYVx1ODlkY1x1ODlkZFx1ODllN1x1ODlmNFx1ODlmOFx1OGEwM1x1OGExNlx1OGExMFx1OGEwY1x1OGExYlx1OGExZFx1OGEyNVx1OGEzNlx1OGE0MVx1OGE1Ylx1'@;
put 'OGE1Mlx1OGE0Nlx1OGE0OFx1OGE3Y1x1OGE2ZFx1OGE2Y1x1OGE2Mlx1OGE4NVx1OGE4Mlx1OGE4NFx1OGFhOFx1OGFhMVx1OGE5MVx1OGFhNVx1OGFhNlx1OGE5YVx1OGFhM1x1OGFjNFx1OGFjZFx1OGFjMlx1OGFkYVx1OGFlYlx1OGFmM1x1OGFlN1x1ZmZmZFx1OGFlNFx1OGFmMVx1OGIx'@;
put 'NFx1OGFlMFx1OGFlMlx1OGFmN1x1OGFkZVx1OGFkYlx1OGIwY1x1OGIwN1x1OGIxYVx1OGFlMVx1OGIxNlx1OGIxMFx1OGIxN1x1OGIyMFx1OGIzM1x1OTdhYlx1OGIyNlx1OGIyYlx1OGIzZVx1OGIyOFx1OGI0MVx1OGI0Y1x1OGI0Zlx1OGI0ZVx1OGI0OVx1OGI1Nlx1OGI1Ylx1OGI1YVx1'@;
put 'OGI2Ylx1OGI1Zlx1OGI2Y1x1OGI2Zlx1OGI3NFx1OGI3ZFx1OGI4MFx1OGI4Y1x1OGI4ZVx1OGI5Mlx1OGI5M1x1OGI5Nlx1OGI5OVx1OGI5YVx1OGMzYVx1OGM0MVx1OGMzZlx1OGM0OFx1OGM0Y1x1OGM0ZVx1OGM1MFx1OGM1NVx1OGM2Mlx1OGM2Y1x1OGM3OFx1OGM3YVx1OGM4Mlx1OGM4'@;
put 'OVx1OGM4NVx1OGM4YVx1OGM4ZFx1OGM4ZVx1OGM5NFx1OGM3Y1x1OGM5OFx1NjIxZFx1OGNhZFx1OGNhYVx1OGNiZFx1OGNiMlx1OGNiM1x1OGNhZVx1OGNiNlx1OGNjOFx1OGNjMVx1OGNlNFx1OGNlM1x1OGNkYVx1OGNmZFx1OGNmYVx1OGNmYlx1OGQwNFx1OGQwNVx1OGQwYVx1OGQwN1x1'@;
put 'OGQwZlx1OGQwZFx1OGQxMFx1OWY0ZVx1OGQxM1x1OGNjZFx1OGQxNFx1OGQxNlx1OGQ2N1x1OGQ2ZFx1OGQ3MVx1OGQ3M1x1OGQ4MVx1OGQ5OVx1OGRjMlx1OGRiZVx1OGRiYVx1OGRjZlx1OGRkYVx1OGRkNlx1OGRjY1x1OGRkYlx1OGRjYlx1OGRlYVx1OGRlYlx1OGRkZlx1OGRlM1x1OGRm'@;
put 'Y1x1OGUwOFx1OGUwOVx1OGRmZlx1OGUxZFx1OGUxZVx1OGUxMFx1OGUxZlx1OGU0Mlx1OGUzNVx1OGUzMFx1OGUzNFx1OGU0YVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVb'@;
put 'YlsyMzBdW21dXT01ODg4MCttLFJbNTg4ODArbV09YlsyMzBdW21dKTtmb3IoYlsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThl'@;
put 'NjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNcdThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNc'@;
put 'dThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThmNDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWNcdWZmZmRcdThm'@;
put 'NjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVcdThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZc'@;
put 'dTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkw'@;
put 'YjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlcdTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRc'@;
put 'dTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTkyMmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTky'@;
put 'NGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmVcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzMV1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGVlW2JbMjMxXVttXV09NTkxMzYrbSxSWzU5MTM2K21dPWJbMjMxXVttXSk7Zm9yKGJbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5'@;
put 'MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJi'@;
put 'XHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5'@;
put 'NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRj'@;
put 'XHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4'@;
put 'OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0'@;
put 'XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5'@;
put 'N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09Ylsy'@;
put 'MzJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzMl1bbV1dPTU5MzkyK20sUls1OTM5MittXT1iWzIzMl1bbV0pO2ZvcihiWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg3MVx1OTg3NFx1OTg3M1x1OThhYVx1OThhZlx1'@;
put 'OThiMVx1OThiNlx1OThjNFx1OThjM1x1OThjNlx1OThlOVx1OThlYlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxZFx1OTkxZVx1OTkyNFx1OTkyMFx1OTkyY1x1OTkyZVx1OTkzZFx1OTkzZVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Ylx1OTk1MVx1OTk1'@;
put 'Mlx1OTk0Y1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlhNVx1OTlhZFx1OTlhZVx1OTliY1x1OTlkZlx1OTlkYlx1OTlkZFx1OTlkOFx1OTlkMVx1OTllZFx1OTllZVx1OTlmMVx1OTlmMlx1OTlmYlx1OTlmOFx1OWEwMVx1OWEwZlx1OWEwNVx1OTllMlx1OWExOVx1OWEyYlx1OWEzN1x1OWE0NVx1'@;
put 'OWE0Mlx1OWE0MFx1OWE0M1x1ZmZmZFx1OWEzZVx1OWE1NVx1OWE0ZFx1OWE1Ylx1OWE1N1x1OWE1Zlx1OWE2Mlx1OWE2NVx1OWE2NFx1OWE2OVx1OWE2Ylx1OWE2YVx1OWFhZFx1OWFiMFx1OWFiY1x1OWFjMFx1OWFjZlx1OWFkMVx1OWFkM1x1OWFkNFx1OWFkZVx1OWFkZlx1OWFlMlx1OWFl'@;
put 'M1x1OWFlNlx1OWFlZlx1OWFlYlx1OWFlZVx1OWFmNFx1OWFmMVx1OWFmN1x1OWFmYlx1OWIwNlx1OWIxOFx1OWIxYVx1OWIxZlx1OWIyMlx1OWIyM1x1OWIyNVx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyZVx1OWIyZlx1OWIzMlx1OWI0NFx1OWI0M1x1OWI0Zlx1OWI0ZFx1OWI0ZVx1'@;
put 'OWI1MVx1OWI1OFx1OWI3NFx1OWI5M1x1OWI4M1x1OWI5MVx1OWI5Nlx1OWI5N1x1OWI5Zlx1OWJhMFx1OWJhOFx1OWJiNFx1OWJjMFx1OWJjYVx1OWJiOVx1OWJjNlx1OWJjZlx1OWJkMVx1OWJkMlx1OWJlM1x1OWJlMlx1OWJlNFx1OWJkNFx1OWJlMVx1OWMzYVx1OWJmMlx1OWJmMVx1OWJm'@;
put 'MFx1OWMxNVx1OWMxNFx1OWMwOVx1OWMxM1x1OWMwY1x1OWMwNlx1OWMwOFx1OWMxMlx1OWMwYVx1OWMwNFx1OWMyZVx1OWMxYlx1OWMyNVx1OWMyNFx1OWMyMVx1OWMzMFx1OWM0N1x1OWMzMlx1OWM0Nlx1OWMzZVx1OWM1YVx1OWM2MFx1OWM2N1x1OWM3Nlx1OWM3OFx1OWNlN1x1OWNlY1x1'@;
put 'OWNmMFx1OWQwOVx1OWQwOFx1OWNlYlx1OWQwM1x1OWQwNlx1OWQyYVx1OWQyNlx1OWRhZlx1OWQyM1x1OWQxZlx1OWQ0NFx1OWQxNVx1OWQxMlx1OWQ0MVx1OWQzZlx1OWQzZVx1OWQ0Nlx1OWQ0OFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzM10ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PWJbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzNdW21dXT01OTY0OCttLFJbNTk2NDgrbV09YlsyMzNdW21dKTtmb3IoYlsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNWRcdTlkNWVcdTlkNjRc'@;
put 'dTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlkZWRcdTlkZWZcdTlk'@;
put 'ZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRcdTllZGNcdTllZGVc'@;
put 'dTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWZcdWZmZmRcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlmNWZcdTlmNjBcdTlmNjFcdTlm'@;
put 'NjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9Ylsy'@;
put 'MzRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM0XVttXV09NTk5MDQrbSxSWzU5OTA0K21dPWJbMjM0XVttXSk7Zm9yKGJbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThh'@;
put 'XHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1'@;
put 'MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZm'@;
put 'XHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1'@;
put 'ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYw'@;
put 'XHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2'@;
put 'ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYy'@;
put 'XHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPWJbMjM3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzN11bbV1dPTYwNjcyK20sUls2MDY3MittXT1iWzIzN11bbV0pO2ZvcihiWzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1'@;
put 'Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmEx'@;
put 'ZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ZmZmZFx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1'@;
put 'OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1'@;
put 'OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1'@;
put 'OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1OWFkY1x1OWI3NVx1OWI3'@;
put 'Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzOF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzhdW21dXT02MDkyOCttLFJbNjA5MjgrbV09YlsyMzhdW21dKTtmb3IoYlsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxNzBcdTIxNzFcdTIxNzJcdTIxNzNcdTIxNzRcdTIxNzVcdTIxNzZcdTIxNzdcdTIxNzhcdTIxNzlcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJc'@;
put 'dTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRm'@;
put 'Y2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGFcdWZmZmRcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJc'@;
put 'dTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTVi'@;
put 'ZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBc'@;
put 'dTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3'@;
put 'NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjUwXVttXV09NjRlMyttLFJbNjRlMyttXT1iWzI1MF1bbV0pO2ZvcihiWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ5Nlx1NmRhY1x1NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1'@;
put 'NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMyNFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5'@;
put 'Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1'@;
put 'N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFk'@;
put 'Zlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1'@;
put 'OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3'@;
put 'MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1'@;
put 'OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjUxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNTFdW21dXT02NDI1NittLFJbNjQyNTYrbV09YlsyNTFdW21dKTtmb3IoYlsyNTJdPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNTJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjUyXVttXV09NjQ1MTIrbSxSWzY0NTEyK21dPWJbMjUyXVttXSk7cmV0dXJue2Vu'@;
put 'YzplZSxkZWM6Un19KCksU2VbOTM2XT1mdW5jdGlvbigpe3ZhciBtLFI9W10sZWU9e30sYj1bXTtmb3IoYlswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJc'@;
put 'eDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlswXS5sZW5ndGg7KyttKTY1NTMzIT09YlswXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlswXVttXV09MCttLFJbMCttXT1iWzBdW21dKTtmb3IoYlsx'@;
put 'MjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRl'@;
put 'MzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFcdTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRc'@;
put 'dTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRlN2FcdTRlN2JcdTRlN2NcdTRlN2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRl'@;
put 'YWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlcdTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZc'@;
put 'dTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRmMDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRm'@;
put 'MjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJc'@;
put 'dTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRmNzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRm'@;
put 'OTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMjldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTI5XVttXV09MzMwMjQrbSxSWzMzMDI0K21dPWJbMTI5'@;
put 'XVttXSk7Zm9yKGJbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwXHU0ZmIxXHU0ZmIyXHU0ZmIzXHU0ZmI0XHU0ZmI2XHU0ZmI3XHU0ZmI4XHU0ZmI5XHU0ZmJhXHU0ZmJiXHU0ZmJjXHU0'@;
put 'ZmJkXHU0ZmJlXHU0ZmMwXHU0ZmMxXHU0ZmMyXHU0ZmM2XHU0ZmM3XHU0ZmM4XHU0ZmM5XHU0ZmNiXHU0ZmNjXHU0ZmNkXHU0ZmQyXHU0ZmQzXHU0ZmQ0XHU0ZmQ1XHU0ZmQ2XHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYy'@;
put 'XHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZkXHU0ZmZmXHU1MDAwXHU1MDAxXHU1MDAyXHU1MDAzXHU1MDA0XHU1MDA1XHU1MDA2XHU1MDA3XHU1MDA4XHU1MDA5XHU1MDBhXHVmZmZkXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1'@;
put 'MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmXHU1MDMwXHU1MDMxXHU1MDMyXHU1MDMzXHU1MDM0XHU1MDM1XHU1MDM2XHU1MDM3XHU1MDM4XHU1MDM5XHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQxXHU1MDQy'@;
put 'XHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwXHU1MDUxXHU1MDUyXHU1MDUzXHU1MDU0XHU1MDU2XHU1MDU3XHU1MDU4XHU1MDU5XHU1MDViXHU1MDVkXHU1MDVlXHU1MDVmXHU1MDYwXHU1MDYxXHU1MDYyXHU1MDYzXHU1MDY0XHU1MDY2XHU1MDY3XHU1'@;
put 'MDY4XHU1MDY5XHU1MDZhXHU1MDZiXHU1MDZkXHU1MDZlXHU1MDZmXHU1MDcwXHU1MDcxXHU1MDcyXHU1MDczXHU1MDc0XHU1MDc1XHU1MDc4XHU1MDc5XHU1MDdhXHU1MDdjXHU1MDdkXHU1MDgxXHU1MDgyXHU1MDgzXHU1MDg0XHU1MDg2XHU1MDg3XHU1MDg5XHU1MDhhXHU1MDhiXHU1MDhj'@;
put 'XHU1MDhlXHU1MDhmXHU1MDkwXHU1MDkxXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk1XHU1MDk2XHU1MDk3XHU1MDk4XHU1MDk5XHU1MDlhXHU1MDliXHU1MDljXHU1MDlkXHU1MDllXHU1MDlmXHU1MGEwXHU1MGExXHU1MGEyXHU1MGE0XHU1MGE2XHU1MGFhXHU1MGFiXHU1MGFkXHU1MGFlXHU1'@;
put 'MGFmXHU1MGIwXHU1MGIxXHU1MGIzXHU1MGI0XHU1MGI1XHU1MGI2XHU1MGI3XHU1MGI4XHU1MGI5XHU1MGJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTMwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzMF1bbV1dPTMzMjgwK20sUlsz'@;
put 'MzI4MCttXT1iWzEzMF1bbV0pO2ZvcihiWzEzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTBiZFx1NTBiZVx1NTBiZlx1NTBjMFx1NTBjMVx1NTBjMlx1NTBjM1x1NTBjNFx1NTBjNVx1NTBjNlx1NTBjN1x1NTBjOFx1NTBjOVx1'@;
put 'NTBjYVx1NTBjYlx1NTBjY1x1NTBjZFx1NTBjZVx1NTBkMFx1NTBkMVx1NTBkMlx1NTBkM1x1NTBkNFx1NTBkNVx1NTBkN1x1NTBkOFx1NTBkOVx1NTBkYlx1NTBkY1x1NTBkZFx1NTBkZVx1NTBkZlx1NTBlMFx1NTBlMVx1NTBlMlx1NTBlM1x1NTBlNFx1NTBlNVx1NTBlOFx1NTBlOVx1NTBl'@;
put 'YVx1NTBlYlx1NTBlZlx1NTBmMFx1NTBmMVx1NTBmMlx1NTBmNFx1NTBmNlx1NTBmN1x1NTBmOFx1NTBmOVx1NTBmYVx1NTBmY1x1NTBmZFx1NTBmZVx1NTBmZlx1NTEwMFx1NTEwMVx1NTEwMlx1NTEwM1x1NTEwNFx1NTEwNVx1NTEwOFx1ZmZmZFx1NTEwOVx1NTEwYVx1NTEwY1x1NTEwZFx1'@;
put 'NTEwZVx1NTEwZlx1NTExMFx1NTExMVx1NTExM1x1NTExNFx1NTExNVx1NTExNlx1NTExN1x1NTExOFx1NTExOVx1NTExYVx1NTExYlx1NTExY1x1NTExZFx1NTExZVx1NTExZlx1NTEyMFx1NTEyMlx1NTEyM1x1NTEyNFx1NTEyNVx1NTEyNlx1NTEyN1x1NTEyOFx1NTEyOVx1NTEyYVx1NTEy'@;
put 'Ylx1NTEyY1x1NTEyZFx1NTEyZVx1NTEyZlx1NTEzMFx1NTEzMVx1NTEzMlx1NTEzM1x1NTEzNFx1NTEzNVx1NTEzNlx1NTEzN1x1NTEzOFx1NTEzOVx1NTEzYVx1NTEzYlx1NTEzY1x1NTEzZFx1NTEzZVx1NTE0Mlx1NTE0N1x1NTE0YVx1NTE0Y1x1NTE0ZVx1NTE0Zlx1NTE1MFx1NTE1Mlx1'@;
put 'NTE1M1x1NTE1N1x1NTE1OFx1NTE1OVx1NTE1Ylx1NTE1ZFx1NTE1ZVx1NTE1Zlx1NTE2MFx1NTE2MVx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4N1x1NTE4YVx1NTE4Ylx1NTE4'@;
put 'ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNlx1NTFhN1x1NTFhOFx1NTFhOVx1NTFhYVx1NTFhZFx1NTFhZVx1NTFiNFx1NTFiOFx1NTFiOVx1NTFiYVx1NTFiZVx1NTFiZlx1NTFjMVx1NTFjMlx1'@;
put 'NTFjM1x1NTFjNVx1NTFjOFx1NTFjYVx1NTFjZFx1NTFjZVx1NTFkMFx1NTFkMlx1NTFkM1x1NTFkNFx1NTFkNVx1NTFkNlx1NTFkN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTMxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzFdW21d'@;
put 'XT0zMzUzNittLFJbMzM1MzYrbV09YlsxMzFdW21dKTtmb3IoYlsxMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdc'@;
put 'dTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdcdTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUy'@;
put 'MjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUyM2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFc'@;
put 'dTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUy'@;
put 'ODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUyOGFcdTUyOGJcdTUyOGNcdTUyOGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZc'@;
put 'dTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYjlcdTUyYmFcdTUyYmJcdTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUy'@;
put 'ZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUyZGVcdTUyZTBcdTUyZTFcdTUyZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZc'@;
put 'dTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzMl1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGVlW2JbMTMyXVttXV09MzM3OTIrbSxSWzMzNzkyK21dPWJbMTMyXVttXSk7Zm9yKGJbMTMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzExXHU1MzEyXHU1MzEzXHU1MzE0XHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFm'@;
put 'XHU1MzIyXHU1MzI0XHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzJmXHU1MzMwXHU1MzMxXHU1MzMyXHU1MzMzXHU1MzM0XHU1MzM1XHU1MzM2XHU1MzM3XHU1MzM4XHU1MzNjXHU1MzNkXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRiXHU1MzRjXHU1'@;
put 'MzRkXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzViXHU1MzVkXHU1MzY1XHU1MzY4XHU1MzZhXHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdiXHU1MzdjXHU1MzdkXHU1MzdlXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhhXHU1MzhlXHU1MzhmXHVmZmZk'@;
put 'XHU1MzkwXHU1MzkxXHU1MzkyXHU1MzkzXHU1Mzk0XHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2FmXHU1M2IwXHU1M2IxXHU1M2IyXHU1M2IzXHU1M2I0XHU1M2I1XHU1M2I3XHU1'@;
put 'M2I4XHU1M2I5XHU1M2JhXHU1M2JjXHU1M2JkXHU1M2JlXHU1M2MwXHU1M2MzXHU1M2M0XHU1M2M1XHU1M2M2XHU1M2M3XHU1M2NlXHU1M2NmXHU1M2QwXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RjXHU1M2RkXHU1M2RlXHU1M2UxXHU1M2UyXHU1M2U3XHU1M2Y0XHU1M2ZhXHU1M2Zl'@;
put 'XHU1M2ZmXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBiXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFhXHU1NDFjXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJhXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNhXHU1NDNkXHU1NDNmXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1'@;
put 'NDQ5XHU1NDRjXHU1NDRkXHU1NDRlXHU1NDRmXHU1NDUxXHU1NDVhXHU1NDVkXHU1NDVlXHU1NDVmXHU1NDYwXHU1NDYxXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5XHU1NDZhXHU1NDZiXHU1NDZjXHU1NDZkXHU1NDZlXHU1NDZmXHU1NDcwXHU1NDc0XHU1NDc5XHU1NDdhXHU1NDdlXHU1NDdm'@;
put 'XHU1NDgxXHU1NDgzXHU1NDg1XHU1NDg3XHU1NDg4XHU1NDg5XHU1NDhhXHU1NDhkXHU1NDkxXHU1NDkzXHU1NDk3XHU1NDk4XHU1NDljXHU1NDllXHU1NDlmXHU1NGEwXHU1NGExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTMzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzNdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihlZVtiWzEzM11bbV1dPTM0MDQ4K20sUlszNDA0OCttXT1iWzEzM11bbV0pO2ZvcihiWzEzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTRhMlx1NTRhNVx1NTRhZVx1NTRiMFx1NTRiMlx1NTRiNVx1NTRi'@;
put 'Nlx1NTRiN1x1NTRiOVx1NTRiYVx1NTRiY1x1NTRiZVx1NTRjM1x1NTRjNVx1NTRjYVx1NTRjYlx1NTRkNlx1NTRkOFx1NTRkYlx1NTRlMFx1NTRlMVx1NTRlMlx1NTRlM1x1NTRlNFx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNFx1NTRmNVx1NTRmNlx1NTRmN1x1NTRmOFx1'@;
put 'NTRmOVx1NTRmYlx1NTRmZVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwYVx1NTUwYlx1NTUwY1x1NTUwZFx1NTUwZVx1NTUxMlx1NTUxM1x1NTUxNVx1NTUxNlx1NTUxN1x1NTUxOFx1NTUxOVx1NTUxYVx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUyMVx1NTUy'@;
put 'NVx1NTUyNlx1ZmZmZFx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0Ylx1NTU0Y1x1NTU0ZFx1NTU0ZVx1NTU0Zlx1NTU1MVx1NTU1Mlx1'@;
put 'NTU1M1x1NTU1NFx1NTU1N1x1NTU1OFx1NTU1OVx1NTU1YVx1NTU1Ylx1NTU1ZFx1NTU1ZVx1NTU1Zlx1NTU2MFx1NTU2Mlx1NTU2M1x1NTU2OFx1NTU2OVx1NTU2Ylx1NTU2Zlx1NTU3MFx1NTU3MVx1NTU3Mlx1NTU3M1x1NTU3NFx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4'@;
put 'Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMFx1NTVhMVx1NTVhMlx1NTVhM1x1NTVhNFx1NTVhNVx1NTVhNlx1NTVhOFx1NTVhOVx1NTVhYVx1NTVhYlx1NTVhY1x1NTVhZFx1NTVhZVx1NTVhZlx1'@;
put 'NTViMFx1NTViMlx1NTViNFx1NTViNlx1NTViOFx1NTViYVx1NTViY1x1NTViZlx1NTVjMFx1NTVjMVx1NTVjMlx1NTVjM1x1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkN1x1NTVkOFx1NTVkOVx1NTVkYVx1NTVkYlx1NTVkZVx1NTVl'@;
put 'MFx1NTVlMlx1NTVlN1x1NTVlOVx1NTVlZFx1NTVlZVx1NTVmMFx1NTVmMVx1NTVmNFx1NTVmNlx1NTVmOFx1NTVmOVx1NTVmYVx1NTVmYlx1NTVmY1x1NTVmZlx1NTYwMlx1NTYwM1x1NTYwNFx1NTYwNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzNF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PWJbMTM0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzRdW21dXT0zNDMwNCttLFJbMzQzMDQrbV09YlsxMzRdW21dKTtmb3IoYlsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2'@;
put 'MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlcdTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2Mzdc'@;
put 'dTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2'@;
put 'NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNc'@;
put 'dTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2'@;
put 'YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVcdTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNc'@;
put 'dTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2'@;
put 'ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNcdTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzVdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT1iWzEzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTM1XVttXV09MzQ1NjArbSxSWzM0NTYwK21dPWJbMTM1XVttXSk7Zm9yKGJbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzEyXHU1NzEzXHU1'@;
put 'NzE0XHU1NzE1XHU1NzE2XHU1NzE3XHU1NzE4XHU1NzE5XHU1NzFhXHU1NzFiXHU1NzFkXHU1NzFlXHU1NzIwXHU1NzIxXHU1NzIyXHU1NzI0XHU1NzI1XHU1NzI2XHU1NzI3XHU1NzJiXHU1NzMxXHU1NzMyXHU1NzM0XHU1NzM1XHU1NzM2XHU1NzM3XHU1NzM4XHU1NzNjXHU1NzNkXHU1NzNm'@;
put 'XHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyXHU1NzUzXHU1NzU0XHU1NzU1XHU1NzU2XHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZjXHU1NzZlXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1'@;
put 'Nzc5XHU1NzdhXHU1NzdkXHU1NzdlXHU1NzdmXHU1NzgwXHVmZmZkXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhhXHU1NzhkXHU1NzhlXHU1NzhmXHU1NzkwXHU1NzkxXHU1Nzk0XHU1Nzk1XHU1Nzk2XHU1Nzk3XHU1Nzk4XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1Nzlm'@;
put 'XHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5XHU1N2JhXHU1N2JiXHU1N2JjXHU1N2JkXHU1N2JlXHU1N2JmXHU1N2MwXHU1N2MxXHU1N2M0XHU1N2M1XHU1N2M2XHU1N2M3XHU1N2M4XHU1N2M5XHU1N2NhXHU1'@;
put 'N2NjXHU1N2NkXHU1N2QwXHU1N2QxXHU1N2QzXHU1N2Q2XHU1N2Q3XHU1N2RiXHU1N2RjXHU1N2RlXHU1N2UxXHU1N2UyXHU1N2UzXHU1N2U1XHU1N2U2XHU1N2U3XHU1N2U4XHU1N2U5XHU1N2VhXHU1N2ViXHU1N2VjXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1N2YzXHU1N2Y1XHU1N2Y2'@;
put 'XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFjXHU1ODFkXHU1ODFmXHU1'@;
put 'ODIyXHU1ODIzXHU1ODI1XHU1ODI2XHU1ODI3XHU1ODI4XHU1ODI5XHU1ODJiXHU1ODJjXHU1ODJkXHU1ODJlXHU1ODJmXHU1ODMxXHU1ODMyXHU1ODMzXHU1ODM0XHU1ODM2XHU1ODM3XHU1ODM4XHU1ODM5XHU1ODNhXHU1ODNiXHU1ODNjXHU1ODNkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PWJbMTM2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzNl1bbV1dPTM0ODE2K20sUlszNDgxNittXT1iWzEzNl1bbV0pO2ZvcihiWzEzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NTgzZVx1NTgzZlx1NTg0MFx1NTg0MVx1NTg0Mlx1NTg0M1x1NTg0NVx1NTg0Nlx1NTg0N1x1NTg0OFx1NTg0OVx1NTg0YVx1NTg0Ylx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1OVx1NTg1YVx1NTg1Ylx1NTg1Y1x1NTg1ZFx1NTg1Zlx1NTg2'@;
put 'MFx1NTg2MVx1NTg2Mlx1NTg2M1x1NTg2NFx1NTg2Nlx1NTg2N1x1NTg2OFx1NTg2OVx1NTg2YVx1NTg2ZFx1NTg2ZVx1NTg2Zlx1NTg3MFx1NTg3MVx1NTg3Mlx1NTg3M1x1NTg3NFx1NTg3NVx1NTg3Nlx1NTg3N1x1NTg3OFx1NTg3OVx1NTg3YVx1NTg3Ylx1NTg3Y1x1NTg3ZFx1NTg3Zlx1'@;
put 'NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4Y1x1ZmZmZFx1NTg4ZFx1NTg4ZVx1NTg4Zlx1NTg5MFx1NTg5MVx1NTg5NFx1NTg5NVx1NTg5Nlx1NTg5N1x1NTg5OFx1NTg5Ylx1NTg5Y1x1NTg5ZFx1NThhMFx1NThhMVx1NThhMlx1NThhM1x1NThhNFx1NThh'@;
put 'NVx1NThhNlx1NThhN1x1NThhYVx1NThhYlx1NThhY1x1NThhZFx1NThhZVx1NThhZlx1NThiMFx1NThiMVx1NThiMlx1NThiM1x1NThiNFx1NThiNVx1NThiNlx1NThiN1x1NThiOFx1NThiOVx1NThiYVx1NThiYlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1'@;
put 'NThjNlx1NThjN1x1NThjOFx1NThjOVx1NThjYVx1NThjYlx1NThjY1x1NThjZFx1NThjZVx1NThjZlx1NThkMFx1NThkMlx1NThkM1x1NThkNFx1NThkNlx1NThkN1x1NThkOFx1NThkOVx1NThkYVx1NThkYlx1NThkY1x1NThkZFx1NThkZVx1NThkZlx1NThlMFx1NThlMVx1NThlMlx1NThl'@;
put 'M1x1NThlNVx1NThlNlx1NThlN1x1NThlOFx1NThlOVx1NThlYVx1NThlZFx1NThlZlx1NThmMVx1NThmMlx1NThmNFx1NThmNVx1NThmN1x1NThmOFx1NThmYVx1NThmYlx1NThmY1x1NThmZFx1NThmZVx1NThmZlx1NTkwMFx1NTkwMVx1NTkwM1x1NTkwNVx1NTkwNlx1NTkwOFx1NTkwOVx1'@;
put 'NTkwYVx1NTkwYlx1NTkwY1x1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYlx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT1iWzEzN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTM3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzddW21dXT0zNTA3MittLFJbMzUwNzIrbV09YlsxMzddW21dKTtmb3IoYlsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFcdTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5'@;
put 'NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVc'@;
put 'dTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZcdWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5'@;
put 'YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRc'@;
put 'dTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5ZjdcdTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVh'@;
put 'MTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVhMjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2Vc'@;
put 'dTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNcdTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVh'@;
put 'NjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTM4XVttXV09MzUzMjgrbSxSWzM1MzI4K21dPWJbMTM4XVttXSk7Zm9yKGJbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTYxXHU1YTYzXHU1YTY0XHU1YTY1XHU1YTY2XHU1YTY4XHU1YTY5XHU1YTZiXHU1YTZjXHU1YTZkXHU1YTZlXHU1YTZmXHU1YTcwXHU1YTcxXHU1YTcyXHU1YTczXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwXHU1'@;
put 'YTgxXHU1YTgyXHU1YTgzXHU1YTg0XHU1YTg1XHU1YTg2XHU1YTg3XHU1YTg4XHU1YTg5XHU1YThhXHU1YThiXHU1YThjXHU1YThkXHU1YThlXHU1YThmXHU1YTkwXHU1YTkxXHU1YTkzXHU1YTk0XHU1YTk1XHU1YTk2XHU1YTk3XHU1YTk4XHU1YTk5XHU1YTljXHU1YTlkXHU1YTllXHU1YTlm'@;
put 'XHU1YWEwXHU1YWExXHU1YWEyXHU1YWEzXHU1YWE0XHU1YWE1XHU1YWE2XHU1YWE3XHU1YWE4XHU1YWE5XHU1YWFiXHU1YWFjXHVmZmZkXHU1YWFkXHU1YWFlXHU1YWFmXHU1YWIwXHU1YWIxXHU1YWI0XHU1YWI2XHU1YWI3XHU1YWI5XHU1YWJhXHU1YWJiXHU1YWJjXHU1YWJkXHU1YWJmXHU1'@;
put 'YWMwXHU1YWMzXHU1YWM0XHU1YWM1XHU1YWM2XHU1YWM3XHU1YWM4XHU1YWNhXHU1YWNiXHU1YWNkXHU1YWNlXHU1YWNmXHU1YWQwXHU1YWQxXHU1YWQzXHU1YWQ1XHU1YWQ3XHU1YWQ5XHU1YWRhXHU1YWRiXHU1YWRkXHU1YWRlXHU1YWRmXHU1YWUyXHU1YWU0XHU1YWU1XHU1YWU3XHU1YWU4'@;
put 'XHU1YWVhXHU1YWVjXHU1YWVkXHU1YWVlXHU1YWVmXHU1YWYwXHU1YWYyXHU1YWYzXHU1YWY0XHU1YWY1XHU1YWY2XHU1YWY3XHU1YWY4XHU1YWY5XHU1YWZhXHU1YWZiXHU1YWZjXHU1YWZkXHU1YWZlXHU1YWZmXHU1YjAwXHU1YjAxXHU1YjAyXHU1YjAzXHU1YjA0XHU1YjA1XHU1YjA2XHU1'@;
put 'YjA3XHU1YjA4XHU1YjBhXHU1YjBiXHU1YjBjXHU1YjBkXHU1YjBlXHU1YjBmXHU1YjEwXHU1YjExXHU1YjEyXHU1YjEzXHU1YjE0XHU1YjE1XHU1YjE4XHU1YjE5XHU1YjFhXHU1YjFiXHU1YjFjXHU1YjFkXHU1YjFlXHU1YjFmXHU1YjIwXHU1YjIxXHU1YjIyXHU1YjIzXHU1YjI0XHU1YjI1'@;
put 'XHU1YjI2XHU1YjI3XHU1YjI4XHU1YjI5XHU1YjJhXHU1YjJiXHU1YjJjXHU1YjJkXHU1YjJlXHU1YjJmXHU1YjMwXHU1YjMxXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4XHU1YjM5XHU1YjNhXHU1YjNiXHU1YjNjXHU1YjNkXHU1YjNlXHU1YjNmXHU1YjQxXHU1YjQyXHU1YjQzXHU1YjQ0XHU1'@;
put 'YjQ1XHU1YjQ2XHU1YjQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTM5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzOV1bbV1dPTM1NTg0K20sUlszNTU4NCttXT1iWzEzOV1bbV0pO2ZvcihiWzE0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI0OFx1NWI0OVx1NWI0YVx1NWI0Ylx1NWI0Y1x1NWI0ZFx1NWI0ZVx1NWI0Zlx1NWI1Mlx1NWI1Nlx1NWI1ZVx1NWI2MFx1NWI2MVx1NWI2N1x1NWI2OFx1NWI2Ylx1NWI2ZFx1NWI2ZVx1NWI2Zlx1NWI3Mlx1NWI3NFx1'@;
put 'NWI3Nlx1NWI3N1x1NWI3OFx1NWI3OVx1NWI3Ylx1NWI3Y1x1NWI3ZVx1NWI3Zlx1NWI4Mlx1NWI4Nlx1NWI4YVx1NWI4ZFx1NWI4ZVx1NWI5MFx1NWI5MVx1NWI5Mlx1NWI5NFx1NWI5Nlx1NWI5Zlx1NWJhN1x1NWJhOFx1NWJhOVx1NWJhY1x1NWJhZFx1NWJhZVx1NWJhZlx1NWJiMVx1NWJi'@;
put 'Mlx1NWJiN1x1NWJiYVx1NWJiYlx1NWJiY1x1NWJjMFx1NWJjMVx1NWJjM1x1NWJjOFx1NWJjOVx1NWJjYVx1NWJjYlx1NWJjZFx1NWJjZVx1NWJjZlx1ZmZmZFx1NWJkMVx1NWJkNFx1NWJkNVx1NWJkNlx1NWJkN1x1NWJkOFx1NWJkOVx1NWJkYVx1NWJkYlx1NWJkY1x1NWJlMFx1NWJlMlx1'@;
put 'NWJlM1x1NWJlNlx1NWJlN1x1NWJlOVx1NWJlYVx1NWJlYlx1NWJlY1x1NWJlZFx1NWJlZlx1NWJmMVx1NWJmMlx1NWJmM1x1NWJmNFx1NWJmNVx1NWJmNlx1NWJmN1x1NWJmZFx1NWJmZVx1NWMwMFx1NWMwMlx1NWMwM1x1NWMwNVx1NWMwN1x1NWMwOFx1NWMwYlx1NWMwY1x1NWMwZFx1NWMw'@;
put 'ZVx1NWMxMFx1NWMxMlx1NWMxM1x1NWMxN1x1NWMxOVx1NWMxYlx1NWMxZVx1NWMxZlx1NWMyMFx1NWMyMVx1NWMyM1x1NWMyNlx1NWMyOFx1NWMyOVx1NWMyYVx1NWMyYlx1NWMyZFx1NWMyZVx1NWMyZlx1NWMzMFx1NWMzMlx1NWMzM1x1NWMzNVx1NWMzNlx1NWMzN1x1NWM0M1x1NWM0NFx1'@;
put 'NWM0Nlx1NWM0N1x1NWM0Y1x1NWM0ZFx1NWM1Mlx1NWM1M1x1NWM1NFx1NWM1Nlx1NWM1N1x1NWM1OFx1NWM1YVx1NWM1Ylx1NWM1Y1x1NWM1ZFx1NWM1Zlx1NWM2Mlx1NWM2NFx1NWM2N1x1NWM2OFx1NWM2OVx1NWM2YVx1NWM2Ylx1NWM2Y1x1NWM2ZFx1NWM3MFx1NWM3Mlx1NWM3M1x1NWM3'@;
put 'NFx1NWM3NVx1NWM3Nlx1NWM3N1x1NWM3OFx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4M1x1NWM4NFx1NWM4NVx1NWM4Nlx1NWM4N1x1NWM4OVx1NWM4YVx1NWM4Ylx1NWM4ZVx1NWM4Zlx1NWM5Mlx1NWM5M1x1NWM5NVx1NWM5ZFx1NWM5ZVx1NWM5Zlx1NWNhMFx1NWNhMVx1'@;
put 'NWNhNFx1NWNhNVx1NWNhNlx1NWNhN1x1NWNhOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDBdW21dXT0zNTg0MCttLFJbMzU4NDArbV09YlsxNDBdW21dKTtmb3IoYlsxNDFdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVcdTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhc'@;
put 'dTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVjZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVj'@;
put 'ZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlcdTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZc'@;
put 'dTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVk'@;
put 'MzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJcdTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdc'@;
put 'dTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVkNjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVk'@;
put 'N2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZcdTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdc'@;
put 'dTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQxXVttXV09MzYwOTYrbSxSWzM2MDk2K21dPWJbMTQxXVttXSk7Zm9y'@;
put 'KGJbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGExXHU1ZGEyXHU1ZGEzXHU1ZGE0XHU1ZGE1XHU1ZGE2XHU1ZGE3XHU1ZGE4XHU1ZGE5XHU1ZGFhXHU1ZGFiXHU1ZGFjXHU1ZGFkXHU1ZGFlXHU1ZGFmXHU1ZGIwXHU1ZGIx'@;
put 'XHU1ZGIyXHU1ZGIzXHU1ZGI0XHU1ZGI1XHU1ZGI2XHU1ZGI4XHU1ZGI5XHU1ZGJhXHU1ZGJiXHU1ZGJjXHU1ZGJkXHU1ZGJlXHU1ZGJmXHU1ZGMwXHU1ZGMxXHU1ZGMyXHU1ZGMzXHU1ZGM0XHU1ZGM2XHU1ZGM3XHU1ZGM4XHU1ZGM5XHU1ZGNhXHU1ZGNiXHU1ZGNjXHU1ZGNlXHU1ZGNmXHU1'@;
put 'ZGQwXHU1ZGQxXHU1ZGQyXHU1ZGQzXHU1ZGQ0XHU1ZGQ1XHU1ZGQ2XHU1ZGQ3XHU1ZGQ4XHU1ZGQ5XHU1ZGRhXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkXHVmZmZkXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4XHU1ZGY5XHU1ZGZhXHU1ZGZiXHU1ZGZj'@;
put 'XHU1ZGZmXHU1ZTAwXHU1ZTA0XHU1ZTA3XHU1ZTA5XHU1ZTBhXHU1ZTBiXHU1ZTBkXHU1ZTBlXHU1ZTEyXHU1ZTEzXHU1ZTE3XHU1ZTFlXHU1ZTFmXHU1ZTIwXHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTI0XHU1ZTI1XHU1ZTI4XHU1ZTI5XHU1ZTJhXHU1ZTJiXHU1ZTJjXHU1ZTJmXHU1ZTMwXHU1'@;
put 'ZTMyXHU1ZTMzXHU1ZTM0XHU1ZTM1XHU1ZTM2XHU1ZTM5XHU1ZTNhXHU1ZTNlXHU1ZTNmXHU1ZTQwXHU1ZTQxXHU1ZTQzXHU1ZTQ2XHU1ZTQ3XHU1ZTQ4XHU1ZTQ5XHU1ZTRhXHU1ZTRiXHU1ZTRkXHU1ZTRlXHU1ZTRmXHU1ZTUwXHU1ZTUxXHU1ZTUyXHU1ZTUzXHU1ZTU2XHU1ZTU3XHU1ZTU4'@;
put 'XHU1ZTU5XHU1ZTVhXHU1ZTVjXHU1ZTVkXHU1ZTVmXHU1ZTYwXHU1ZTYzXHU1ZTY0XHU1ZTY1XHU1ZTY2XHU1ZTY3XHU1ZTY4XHU1ZTY5XHU1ZTZhXHU1ZTZiXHU1ZTZjXHU1ZTZkXHU1ZTZlXHU1ZTZmXHU1ZTcwXHU1ZTcxXHU1ZTc1XHU1ZTc3XHU1ZTc5XHU1ZTdlXHU1ZTgxXHU1ZTgyXHU1'@;
put 'ZTgzXHU1ZTg1XHU1ZTg4XHU1ZTg5XHU1ZThjXHU1ZThkXHU1ZThlXHU1ZTkyXHU1ZTk4XHU1ZTliXHU1ZTlkXHU1ZWExXHU1ZWEyXHU1ZWEzXHU1ZWE0XHU1ZWE4XHU1ZWE5XHU1ZWFhXHU1ZWFiXHU1ZWFjXHU1ZWFlXHU1ZWFmXHU1ZWIwXHU1ZWIxXHU1ZWIyXHU1ZWI0XHU1ZWJhXHU1ZWJi'@;
put 'XHU1ZWJjXHU1ZWJkXHU1ZWJmXHU1ZWMwXHU1ZWMxXHU1ZWMyXHU1ZWMzXHU1ZWM0XHU1ZWM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0Ml1bbV1dPTM2MzUyK20sUlszNjM1MittXT1i'@;
put 'WzE0Ml1bbV0pO2ZvcihiWzE0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWVjNlx1NWVjN1x1NWVjOFx1NWVjYlx1NWVjY1x1NWVjZFx1NWVjZVx1NWVjZlx1NWVkMFx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVk'@;
put 'YVx1NWVkY1x1NWVkZFx1NWVkZVx1NWVkZlx1NWVlMFx1NWVlMVx1NWVlMlx1NWVlM1x1NWVlNFx1NWVlNVx1NWVlNlx1NWVlN1x1NWVlOVx1NWVlYlx1NWVlY1x1NWVlZFx1NWVlZVx1NWVlZlx1NWVmMFx1NWVmMVx1NWVmMlx1NWVmM1x1NWVmNVx1NWVmOFx1NWVmOVx1NWVmYlx1NWVmY1x1'@;
put 'NWVmZFx1NWYwNVx1NWYwNlx1NWYwN1x1NWYwOVx1NWYwY1x1NWYwZFx1NWYwZVx1NWYxMFx1NWYxMlx1NWYxNFx1NWYxNlx1NWYxOVx1NWYxYVx1NWYxY1x1NWYxZFx1NWYxZVx1NWYyMVx1NWYyMlx1NWYyM1x1NWYyNFx1ZmZmZFx1NWYyOFx1NWYyYlx1NWYyY1x1NWYyZVx1NWYzMFx1NWYz'@;
put 'Mlx1NWYzM1x1NWYzNFx1NWYzNVx1NWYzNlx1NWYzN1x1NWYzOFx1NWYzYlx1NWYzZFx1NWYzZVx1NWYzZlx1NWY0MVx1NWY0Mlx1NWY0M1x1NWY0NFx1NWY0NVx1NWY0Nlx1NWY0N1x1NWY0OFx1NWY0OVx1NWY0YVx1NWY0Ylx1NWY0Y1x1NWY0ZFx1NWY0ZVx1NWY0Zlx1NWY1MVx1NWY1NFx1'@;
put 'NWY1OVx1NWY1YVx1NWY1Ylx1NWY1Y1x1NWY1ZVx1NWY1Zlx1NWY2MFx1NWY2M1x1NWY2NVx1NWY2N1x1NWY2OFx1NWY2Ylx1NWY2ZVx1NWY2Zlx1NWY3Mlx1NWY3NFx1NWY3NVx1NWY3Nlx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY3Zlx1NWY4M1x1NWY4Nlx1NWY4ZFx1NWY4ZVx1NWY4'@;
put 'Zlx1NWY5MVx1NWY5M1x1NWY5NFx1NWY5Nlx1NWY5YVx1NWY5Ylx1NWY5ZFx1NWY5ZVx1NWY5Zlx1NWZhMFx1NWZhMlx1NWZhM1x1NWZhNFx1NWZhNVx1NWZhNlx1NWZhN1x1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiMlx1NWZiM1x1NWZiNFx1NWZiNlx1NWZiOFx1'@;
put 'NWZiOVx1NWZiYVx1NWZiYlx1NWZiZVx1NWZiZlx1NWZjMFx1NWZjMVx1NWZjMlx1NWZjN1x1NWZjOFx1NWZjYVx1NWZjYlx1NWZjZVx1NWZkM1x1NWZkNFx1NWZkNVx1NWZkYVx1NWZkYlx1NWZkY1x1NWZkZVx1NWZkZlx1NWZlMlx1NWZlM1x1NWZlNVx1NWZlNlx1NWZlOFx1NWZlOVx1NWZl'@;
put 'Y1x1NWZlZlx1NWZmMFx1NWZmMlx1NWZmM1x1NWZmNFx1NWZmNlx1NWZmN1x1NWZmOVx1NWZmYVx1NWZmY1x1NjAwN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDNdW21dXT0zNjYwOCtt'@;
put 'LFJbMzY2MDgrbV09YlsxNDNdW21dKTtmb3IoYlsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYw'@;
put 'MjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYwMzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVc'@;
put 'dTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYw'@;
put 'ODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZc'@;
put 'dTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRcdTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYw'@;
put 'ZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNc'@;
put 'dTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYx'@;
put 'MzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYxNDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ0'@;
put 'XVttXV09MzY4NjQrbSxSWzM2ODY0K21dPWJbMTQ0XVttXSk7Zm9yKGJbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTQ3XHU2MTQ5XHU2MTRiXHU2MTRkXHU2MTRmXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XHU2'@;
put 'MTU3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTViXHU2MTVjXHU2MTVlXHU2MTVmXHU2MTYwXHU2MTYxXHU2MTYzXHU2MTY0XHU2MTY1XHU2MTY2XHU2MTY5XHU2MTZhXHU2MTZiXHU2MTZjXHU2MTZkXHU2MTZlXHU2MTZmXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4XHU2MTc5'@;
put 'XHU2MTdhXHU2MTdiXHU2MTdjXHU2MTdkXHU2MTdlXHU2MTdmXHU2MTgwXHU2MTgxXHU2MTgyXHU2MTgzXHU2MTg0XHU2MTg1XHU2MTg2XHU2MTg3XHU2MTg4XHU2MTg5XHU2MThhXHU2MThjXHU2MThkXHU2MThmXHU2MTkwXHU2MTkxXHU2MTkyXHU2MTkzXHU2MTk1XHVmZmZkXHU2MTk2XHU2'@;
put 'MTk3XHU2MTk4XHU2MTk5XHU2MTlhXHU2MTliXHU2MTljXHU2MTllXHU2MTlmXHU2MWEwXHU2MWExXHU2MWEyXHU2MWEzXHU2MWE0XHU2MWE1XHU2MWE2XHU2MWFhXHU2MWFiXHU2MWFkXHU2MWFlXHU2MWFmXHU2MWIwXHU2MWIxXHU2MWIyXHU2MWIzXHU2MWI0XHU2MWI1XHU2MWI2XHU2MWI4'@;
put 'XHU2MWI5XHU2MWJhXHU2MWJiXHU2MWJjXHU2MWJkXHU2MWJmXHU2MWMwXHU2MWMxXHU2MWMzXHU2MWM0XHU2MWM1XHU2MWM2XHU2MWM3XHU2MWM5XHU2MWNjXHU2MWNkXHU2MWNlXHU2MWNmXHU2MWQwXHU2MWQzXHU2MWQ1XHU2MWQ2XHU2MWQ3XHU2MWQ4XHU2MWQ5XHU2MWRhXHU2MWRiXHU2'@;
put 'MWRjXHU2MWRkXHU2MWRlXHU2MWRmXHU2MWUwXHU2MWUxXHU2MWUyXHU2MWUzXHU2MWU0XHU2MWU1XHU2MWU3XHU2MWU4XHU2MWU5XHU2MWVhXHU2MWViXHU2MWVjXHU2MWVkXHU2MWVlXHU2MWVmXHU2MWYwXHU2MWYxXHU2MWYyXHU2MWYzXHU2MWY0XHU2MWY2XHU2MWY3XHU2MWY4XHU2MWY5'@;
put 'XHU2MWZhXHU2MWZiXHU2MWZjXHU2MWZkXHU2MWZlXHU2MjAwXHU2MjAxXHU2MjAyXHU2MjAzXHU2MjA0XHU2MjA1XHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2'@;
put 'MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4XHU2MjM5XHU2MjNhXHU2MjNiXHU2MjNjXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDVdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzE0NV1bbV1dPTM3MTIwK20sUlszNzEyMCttXT1iWzE0NV1bbV0pO2ZvcihiWzE0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjI0Zlx1NjI1MFx1NjI1NVx1NjI1Nlx1NjI1N1x1NjI1OVx1NjI1YVx1NjI1Y1x1'@;
put 'NjI1ZFx1NjI1ZVx1NjI1Zlx1NjI2MFx1NjI2MVx1NjI2Mlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4Ylx1NjI4Y1x1NjI4'@;
put 'ZFx1NjI4ZVx1NjI4Zlx1NjI5MFx1NjI5NFx1NjI5OVx1NjI5Y1x1NjI5ZFx1NjI5ZVx1NjJhM1x1NjJhNlx1NjJhN1x1NjJhOVx1NjJhYVx1NjJhZFx1NjJhZVx1NjJhZlx1NjJiMFx1NjJiMlx1NjJiM1x1NjJiNFx1NjJiNlx1NjJiN1x1NjJiOFx1NjJiYVx1NjJiZVx1NjJjMFx1NjJjMVx1'@;
put 'ZmZmZFx1NjJjM1x1NjJjYlx1NjJjZlx1NjJkMVx1NjJkNVx1NjJkZFx1NjJkZVx1NjJlMFx1NjJlMVx1NjJlNFx1NjJlYVx1NjJlYlx1NjJmMFx1NjJmMlx1NjJmNVx1NjJmOFx1NjJmOVx1NjJmYVx1NjJmYlx1NjMwMFx1NjMwM1x1NjMwNFx1NjMwNVx1NjMwNlx1NjMwYVx1NjMwYlx1NjMw'@;
put 'Y1x1NjMwZFx1NjMwZlx1NjMxMFx1NjMxMlx1NjMxM1x1NjMxNFx1NjMxNVx1NjMxN1x1NjMxOFx1NjMxOVx1NjMxY1x1NjMyNlx1NjMyN1x1NjMyOVx1NjMyY1x1NjMyZFx1NjMyZVx1NjMzMFx1NjMzMVx1NjMzM1x1NjMzNFx1NjMzNVx1NjMzNlx1NjMzN1x1NjMzOFx1NjMzYlx1NjMzY1x1'@;
put 'NjMzZVx1NjMzZlx1NjM0MFx1NjM0MVx1NjM0NFx1NjM0N1x1NjM0OFx1NjM0YVx1NjM1MVx1NjM1Mlx1NjM1M1x1NjM1NFx1NjM1Nlx1NjM1N1x1NjM1OFx1NjM1OVx1NjM1YVx1NjM1Ylx1NjM1Y1x1NjM1ZFx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2'@;
put 'Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVx1NjM5YVx1NjM5Ylx1'@;
put 'NjM5Y1x1NjM5ZFx1NjM5ZVx1NjM5Zlx1NjNhMVx1NjNhNFx1NjNhNlx1NjNhYlx1NjNhZlx1NjNiMVx1NjNiMlx1NjNiNVx1NjNiNlx1NjNiOVx1NjNiYlx1NjNiZFx1NjNiZlx1NjNjMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ2XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDZdW21dXT0zNzM3NittLFJbMzczNzYrbV09YlsxNDZdW21dKTtmb3IoYlsxNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhc'@;
put 'dTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYzZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYz'@;
put 'ZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdcdTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJc'@;
put 'dTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0'@;
put 'NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVc'@;
put 'dTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0'@;
put 'OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJcdTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRc'@;
put 'dTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDddLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzE0N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ3XVttXV09Mzc2MzIrbSxSWzM3NjMyK21dPWJbMTQ3XVttXSk7Zm9yKGJbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NGRiXHU2NGRjXHU2NGRkXHU2NGRm'@;
put 'XHU2NGUwXHU2NGUxXHU2NGUzXHU2NGU1XHU2NGU3XHU2NGU4XHU2NGU5XHU2NGVhXHU2NGViXHU2NGVjXHU2NGVkXHU2NGVlXHU2NGVmXHU2NGYwXHU2NGYxXHU2NGYyXHU2NGYzXHU2NGY0XHU2NGY1XHU2NGY2XHU2NGY3XHU2NGY4XHU2NGY5XHU2NGZhXHU2NGZiXHU2NGZjXHU2NGZkXHU2'@;
put 'NGZlXHU2NGZmXHU2NTAxXHU2NTAyXHU2NTAzXHU2NTA0XHU2NTA1XHU2NTA2XHU2NTA3XHU2NTA4XHU2NTBhXHU2NTBiXHU2NTBjXHU2NTBkXHU2NTBlXHU2NTBmXHU2NTEwXHU2NTExXHU2NTEzXHU2NTE0XHU2NTE1XHU2NTE2XHU2NTE3XHU2NTE5XHU2NTFhXHU2NTFiXHU2NTFjXHU2NTFk'@;
put 'XHU2NTFlXHU2NTFmXHU2NTIwXHU2NTIxXHVmZmZkXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2XHU2NTI3XHU2NTI4XHU2NTI5XHU2NTJhXHU2NTJjXHU2NTJkXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNhXHU2NTNjXHU2NTNkXHU2NTQwXHU2NTQxXHU2NTQyXHU2NTQzXHU2'@;
put 'NTQ0XHU2NTQ2XHU2NTQ3XHU2NTRhXHU2NTRiXHU2NTRkXHU2NTRlXHU2NTUwXHU2NTUyXHU2NTUzXHU2NTU0XHU2NTU3XHU2NTU4XHU2NTVhXHU2NTVjXHU2NTVmXHU2NTYwXHU2NTYxXHU2NTY0XHU2NTY1XHU2NTY3XHU2NTY4XHU2NTY5XHU2NTZhXHU2NTZkXHU2NTZlXHU2NTZmXHU2NTcx'@;
put 'XHU2NTczXHU2NTc1XHU2NTc2XHU2NTc4XHU2NTc5XHU2NTdhXHU2NTdiXHU2NTdjXHU2NTdkXHU2NTdlXHU2NTdmXHU2NTgwXHU2NTgxXHU2NTgyXHU2NTgzXHU2NTg0XHU2NTg1XHU2NTg2XHU2NTg4XHU2NTg5XHU2NThhXHU2NThkXHU2NThlXHU2NThmXHU2NTkyXHU2NTk0XHU2NTk1XHU2'@;
put 'NTk2XHU2NTk4XHU2NTlhXHU2NTlkXHU2NTllXHU2NWEwXHU2NWEyXHU2NWEzXHU2NWE2XHU2NWE4XHU2NWFhXHU2NWFjXHU2NWFlXHU2NWIxXHU2NWIyXHU2NWIzXHU2NWI0XHU2NWI1XHU2NWI2XHU2NWI3XHU2NWI4XHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3'@;
put 'XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4XHU2NWQ5XHU2NWRhXHU2NWRiXHU2NWRjXHU2NWRkXHU2NWRlXHU2NWRmXHU2NWUxXHU2NWUzXHU2NWU0XHU2NWVhXHU2NWViXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ4XS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsxNDhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0OF1bbV1dPTM3ODg4K20sUlszNzg4OCttXT1iWzE0OF1bbV0pO2ZvcihiWzE0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjVmMlx1NjVm'@;
put 'M1x1NjVmNFx1NjVmNVx1NjVmOFx1NjVmOVx1NjVmYlx1NjVmY1x1NjVmZFx1NjVmZVx1NjVmZlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1'@;
put 'NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzN1x1NjYzOFx1NjYzOVx1NjYzYVx1NjYzYlx1NjYzZFx1NjYzZlx1NjY0MFx1NjY0Mlx1NjY0NFx1NjY0NVx1NjY0Nlx1NjY0N1x1NjY0OFx1NjY0'@;
put 'OVx1NjY0YVx1NjY0ZFx1NjY0ZVx1NjY1MFx1NjY1MVx1NjY1OFx1ZmZmZFx1NjY1OVx1NjY1Ylx1NjY1Y1x1NjY1ZFx1NjY1ZVx1NjY2MFx1NjY2Mlx1NjY2M1x1NjY2NVx1NjY2N1x1NjY2OVx1NjY2YVx1NjY2Ylx1NjY2Y1x1NjY2ZFx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1'@;
put 'NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OFx1NjY5OVx1NjY5YVx1NjY5Ylx1NjY5Y1x1NjY5'@;
put 'ZVx1NjY5Zlx1NjZhMFx1NjZhMVx1NjZhMlx1NjZhM1x1NjZhNFx1NjZhNVx1NjZhNlx1NjZhOVx1NjZhYVx1NjZhYlx1NjZhY1x1NjZhZFx1NjZhZlx1NjZiMFx1NjZiMVx1NjZiMlx1NjZiM1x1NjZiNVx1NjZiNlx1NjZiN1x1NjZiOFx1NjZiYVx1NjZiYlx1NjZiY1x1NjZiZFx1NjZiZlx1'@;
put 'NjZjMFx1NjZjMVx1NjZjMlx1NjZjM1x1NjZjNFx1NjZjNVx1NjZjNlx1NjZjN1x1NjZjOFx1NjZjOVx1NjZjYVx1NjZjYlx1NjZjY1x1NjZjZFx1NjZjZVx1NjZjZlx1NjZkMFx1NjZkMVx1NjZkMlx1NjZkM1x1NjZkNFx1NjZkNVx1NjZkNlx1NjZkN1x1NjZkOFx1NjZkYVx1NjZkZVx1NjZk'@;
put 'Zlx1NjZlMFx1NjZlMVx1NjZlMlx1NjZlM1x1NjZlNFx1NjZlNVx1NjZlN1x1NjZlOFx1NjZlYVx1NjZlYlx1NjZlY1x1NjZlZFx1NjZlZVx1NjZlZlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwM1x1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT1iWzE0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDldW21dXT0zODE0NCttLFJbMzgxNDQrbV09YlsxNDldW21dKTtmb3IoYlsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJc'@;
put 'dTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVcdTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3'@;
put 'NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJc'@;
put 'dTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3'@;
put 'YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3Zjhc'@;
put 'dTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4'@;
put 'MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9YlsxNTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTUwXVttXV09Mzg0MDArbSxSWzM4NDAwK21dPWJbMTUwXVttXSk7Zm9yKGJbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU2ODVjXHU2ODVkXHU2ODVlXHU2ODVmXHU2ODZhXHU2ODZjXHU2ODZkXHU2ODZlXHU2ODZmXHU2ODcwXHU2ODcxXHU2ODcyXHU2ODczXHU2ODc1XHU2ODc4XHU2ODc5XHU2ODdhXHU2ODdiXHU2ODdjXHU2ODdkXHU2ODdlXHU2ODdmXHU2ODgwXHU2ODgyXHU2ODg0'@;
put 'XHU2ODg3XHU2ODg4XHU2ODg5XHU2ODhhXHU2ODhiXHU2ODhjXHU2ODhkXHU2ODhlXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XHU2ODk5XHU2ODlhXHU2ODliXHU2ODljXHU2ODlkXHU2ODllXHU2ODlmXHU2OGEwXHU2OGExXHU2OGEzXHU2OGE0XHU2OGE1XHU2'@;
put 'OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4XHVmZmZkXHU2OGI5XHU2OGJhXHU2OGJiXHU2OGJjXHU2OGJkXHU2OGJlXHU2OGJmXHU2OGMxXHU2OGMzXHU2OGM0XHU2OGM1XHU2OGM2XHU2OGM3XHU2OGM4XHU2OGNhXHU2OGNj'@;
put 'XHU2OGNlXHU2OGNmXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ0XHU2OGQ2XHU2OGQ3XHU2OGQ5XHU2OGRiXHU2OGRjXHU2OGRkXHU2OGRlXHU2OGRmXHU2OGUxXHU2OGUyXHU2OGU0XHU2OGU1XHU2OGU2XHU2OGU3XHU2OGU4XHU2OGU5XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGVmXHU2'@;
put 'OGYyXHU2OGYzXHU2OGY0XHU2OGY2XHU2OGY3XHU2OGY4XHU2OGZiXHU2OGZkXHU2OGZlXHU2OGZmXHU2OTAwXHU2OTAyXHU2OTAzXHU2OTA0XHU2OTA2XHU2OTA3XHU2OTA4XHU2OTA5XHU2OTBhXHU2OTBjXHU2OTBmXHU2OTExXHU2OTEzXHU2OTE0XHU2OTE1XHU2OTE2XHU2OTE3XHU2OTE4'@;
put 'XHU2OTE5XHU2OTFhXHU2OTFiXHU2OTFjXHU2OTFkXHU2OTFlXHU2OTIxXHU2OTIyXHU2OTIzXHU2OTI1XHU2OTI2XHU2OTI3XHU2OTI4XHU2OTI5XHU2OTJhXHU2OTJiXHU2OTJjXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2'@;
put 'OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQzXHU2OTQ0XHU2OTQ1XHU2OTQ2XHU2OTQ3XHU2OTQ4XHU2OTQ5XHU2OTRhXHU2OTRiXHU2OTRjXHU2OTRkXHU2OTRlXHU2OTRmXHU2OTUwXHU2OTUxXHU2OTUyXHU2OTUzXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVj'@;
put 'XHU2OTVmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTUxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1MV1bbV1dPTM4NjU2K20sUlszODY1NittXT1iWzE1MV1bbV0pO2ZvcihiWzE1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Njk2MVx1Njk2Mlx1Njk2NFx1Njk2NVx1Njk2N1x1Njk2OFx1Njk2OVx1Njk2YVx1Njk2Y1x1Njk2ZFx1Njk2Zlx1Njk3MFx1Njk3Mlx1Njk3M1x1Njk3NFx1Njk3NVx1Njk3Nlx1Njk3YVx1Njk3Ylx1Njk3ZFx1Njk3ZVx1Njk3Zlx1Njk4'@;
put 'MVx1Njk4M1x1Njk4NVx1Njk4YVx1Njk4Ylx1Njk4Y1x1Njk4ZVx1Njk4Zlx1Njk5MFx1Njk5MVx1Njk5Mlx1Njk5M1x1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZFx1Njk5ZVx1Njk5Zlx1NjlhMFx1NjlhMVx1NjlhMlx1NjlhM1x1NjlhNFx1NjlhNVx1NjlhNlx1NjlhOVx1NjlhYVx1'@;
put 'NjlhY1x1NjlhZVx1NjlhZlx1NjliMFx1NjliMlx1NjliM1x1NjliNVx1NjliNlx1NjliOFx1NjliOVx1NjliYVx1NjliY1x1NjliZFx1ZmZmZFx1NjliZVx1NjliZlx1NjljMFx1NjljMlx1NjljM1x1NjljNFx1NjljNVx1NjljNlx1NjljN1x1NjljOFx1NjljOVx1NjljYlx1NjljZFx1Njlj'@;
put 'Zlx1NjlkMVx1NjlkMlx1NjlkM1x1NjlkNVx1NjlkNlx1NjlkN1x1NjlkOFx1NjlkOVx1NjlkYVx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMVx1NjllMlx1NjllM1x1NjllNFx1NjllNVx1NjllNlx1NjllN1x1NjllOFx1NjllOVx1NjllYVx1NjllYlx1NjllY1x1NjllZVx1NjllZlx1NjlmMFx1'@;
put 'NjlmMVx1NjlmM1x1NjlmNFx1NjlmNVx1NjlmNlx1NjlmN1x1NjlmOFx1NjlmOVx1NjlmYVx1NjlmYlx1NjlmY1x1NjlmZVx1NmEwMFx1NmEwMVx1NmEwMlx1NmEwM1x1NmEwNFx1NmEwNVx1NmEwNlx1NmEwN1x1NmEwOFx1NmEwOVx1NmEwYlx1NmEwY1x1NmEwZFx1NmEwZVx1NmEwZlx1NmEx'@;
put 'MFx1NmExMVx1NmExMlx1NmExM1x1NmExNFx1NmExNVx1NmExNlx1NmExOVx1NmExYVx1NmExYlx1NmExY1x1NmExZFx1NmExZVx1NmEyMFx1NmEyMlx1NmEyM1x1NmEyNFx1NmEyNVx1NmEyNlx1NmEyN1x1NmEyOVx1NmEyYlx1NmEyY1x1NmEyZFx1NmEyZVx1NmEzMFx1NmEzMlx1NmEzM1x1'@;
put 'NmEzNFx1NmEzNlx1NmEzN1x1NmEzOFx1NmEzOVx1NmEzYVx1NmEzYlx1NmEzY1x1NmEzZlx1NmE0MFx1NmE0MVx1NmE0Mlx1NmE0M1x1NmE0NVx1NmE0Nlx1NmE0OFx1NmE0OVx1NmE0YVx1NmE0Ylx1NmE0Y1x1NmE0ZFx1NmE0ZVx1NmE0Zlx1NmE1MVx1NmE1Mlx1NmE1M1x1NmE1NFx1NmE1'@;
put 'NVx1NmE1Nlx1NmE1N1x1NmE1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTUyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTJdW21dXT0zODkxMittLFJbMzg5MTIrbV09YlsxNTJdW21dKTtmb3IoYlsxNTNdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZhNjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZh'@;
put 'NzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJcdTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVc'@;
put 'dTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZhYTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZh'@;
put 'YjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFcdTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBc'@;
put 'dTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZhZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZh'@;
put 'ZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhcdTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdc'@;
put 'dTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZiMTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZi'@;
put 'MjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTUzXVttXV09MzkxNjgrbSxSWzM5MTY4K21dPWJbMTUzXVttXSk7Zm9yKGJbMTU0XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YjJmXHU2YjMwXHU2YjMxXHU2YjMzXHU2YjM0XHU2YjM1XHU2YjM2XHU2YjM4XHU2YjNiXHU2YjNjXHU2YjNkXHU2YjNmXHU2YjQwXHU2YjQxXHU2YjQyXHU2YjQ0XHU2YjQ1XHU2YjQ4XHU2'@;
put 'YjRhXHU2YjRiXHU2YjRkXHU2YjRlXHU2YjRmXHU2YjUwXHU2YjUxXHU2YjUyXHU2YjUzXHU2YjU0XHU2YjU1XHU2YjU2XHU2YjU3XHU2YjU4XHU2YjVhXHU2YjViXHU2YjVjXHU2YjVkXHU2YjVlXHU2YjVmXHU2YjYwXHU2YjYxXHU2YjY4XHU2YjY5XHU2YjZiXHU2YjZjXHU2YjZkXHU2YjZl'@;
put 'XHU2YjZmXHU2YjcwXHU2YjcxXHU2YjcyXHU2YjczXHU2Yjc0XHU2Yjc1XHU2Yjc2XHU2Yjc3XHU2Yjc4XHU2YjdhXHU2YjdkXHU2YjdlXHU2YjdmXHU2YjgwXHU2Yjg1XHU2Yjg4XHVmZmZkXHU2YjhjXHU2YjhlXHU2YjhmXHU2YjkwXHU2YjkxXHU2Yjk0XHU2Yjk1XHU2Yjk3XHU2Yjk4XHU2'@;
put 'Yjk5XHU2YjljXHU2YjlkXHU2YjllXHU2YjlmXHU2YmEwXHU2YmEyXHU2YmEzXHU2YmE0XHU2YmE1XHU2YmE2XHU2YmE3XHU2YmE4XHU2YmE5XHU2YmFiXHU2YmFjXHU2YmFkXHU2YmFlXHU2YmFmXHU2YmIwXHU2YmIxXHU2YmIyXHU2YmI2XHU2YmI4XHU2YmI5XHU2YmJhXHU2YmJiXHU2YmJj'@;
put 'XHU2YmJkXHU2YmJlXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2XHU2YmM3XHU2YmM4XHU2YmM5XHU2YmNhXHU2YmNjXHU2YmNlXHU2YmQwXHU2YmQxXHU2YmQ4XHU2YmRhXHU2YmRjXHU2YmRkXHU2YmRlXHU2YmRmXHU2YmUwXHU2YmUyXHU2YmUzXHU2YmU0XHU2YmU1XHU2YmU2XHU2YmU3XHU2'@;
put 'YmU4XHU2YmU5XHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlXHU2YmZmXHU2YzAwXHU2YzAxXHU2YzAyXHU2YzAzXHU2YzA0XHU2YzA4XHU2YzA5XHU2YzBhXHU2YzBiXHU2YzBjXHU2YzBl'@;
put 'XHU2YzEyXHU2YzE3XHU2YzFjXHU2YzFkXHU2YzFlXHU2YzIwXHU2YzIzXHU2YzI1XHU2YzJiXHU2YzJjXHU2YzJkXHU2YzMxXHU2YzMzXHU2YzM2XHU2YzM3XHU2YzM5XHU2YzNhXHU2YzNiXHU2YzNjXHU2YzNlXHU2YzNmXHU2YzQzXHU2YzQ0XHU2YzQ1XHU2YzQ4XHU2YzRiXHU2YzRjXHU2'@;
put 'YzRkXHU2YzRlXHU2YzRmXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTU0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1NF1bbV1dPTM5NDI0K20sUlszOTQyNCttXT1iWzE1NF1bbV0p'@;
put 'O2ZvcihiWzE1NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM1OVx1NmM1YVx1NmM2Mlx1NmM2M1x1NmM2NVx1NmM2Nlx1NmM2N1x1NmM2Ylx1NmM2Y1x1NmM2ZFx1NmM2ZVx1NmM2Zlx1NmM3MVx1NmM3M1x1NmM3NVx1NmM3N1x1'@;
put 'NmM3OFx1NmM3YVx1NmM3Ylx1NmM3Y1x1NmM3Zlx1NmM4MFx1NmM4NFx1NmM4N1x1NmM4YVx1NmM4Ylx1NmM4ZFx1NmM4ZVx1NmM5MVx1NmM5Mlx1NmM5NVx1NmM5Nlx1NmM5N1x1NmM5OFx1NmM5YVx1NmM5Y1x1NmM5ZFx1NmM5ZVx1NmNhMFx1NmNhMlx1NmNhOFx1NmNhY1x1NmNhZlx1NmNi'@;
put 'MFx1NmNiNFx1NmNiNVx1NmNiNlx1NmNiN1x1NmNiYVx1NmNjMFx1NmNjMVx1NmNjMlx1NmNjM1x1NmNjNlx1NmNjN1x1NmNjOFx1NmNjYlx1NmNjZFx1NmNjZVx1NmNjZlx1NmNkMVx1NmNkMlx1NmNkOFx1ZmZmZFx1NmNkOVx1NmNkYVx1NmNkY1x1NmNkZFx1NmNkZlx1NmNlNFx1NmNlNlx1'@;
put 'NmNlN1x1NmNlOVx1NmNlY1x1NmNlZFx1NmNmMlx1NmNmNFx1NmNmOVx1NmNmZlx1NmQwMFx1NmQwMlx1NmQwM1x1NmQwNVx1NmQwNlx1NmQwOFx1NmQwOVx1NmQwYVx1NmQwZFx1NmQwZlx1NmQxMFx1NmQxMVx1NmQxM1x1NmQxNFx1NmQxNVx1NmQxNlx1NmQxOFx1NmQxY1x1NmQxZFx1NmQx'@;
put 'Zlx1NmQyMFx1NmQyMVx1NmQyMlx1NmQyM1x1NmQyNFx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1'@;
put 'NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3YVx1NmQ3Ylx1NmQ3ZFx1NmQ3ZVx1NmQ3Zlx1NmQ4MFx1NmQ4MVx1NmQ4'@;
put 'M1x1NmQ4NFx1NmQ4Nlx1NmQ4N1x1NmQ4YVx1NmQ4Ylx1NmQ4ZFx1NmQ4Zlx1NmQ5MFx1NmQ5Mlx1NmQ5Nlx1NmQ5N1x1NmQ5OFx1NmQ5OVx1NmQ5YVx1NmQ5Y1x1NmRhMlx1NmRhNVx1NmRhY1x1NmRhZFx1NmRiMFx1NmRiMVx1NmRiM1x1NmRiNFx1NmRiNlx1NmRiN1x1NmRiOVx1NmRiYVx1'@;
put 'NmRiYlx1NmRiY1x1NmRiZFx1NmRiZVx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTVdW21dXT0zOTY4MCttLFJbMzk2ODAr'@;
put 'bV09YlsxNTVdW21dKTtmb3IoYlsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJc'@;
put 'dTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZcdTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZl'@;
put 'MGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZlMjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2Nc'@;
put 'dTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJcdTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZl'@;
put 'NjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZlNzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFc'@;
put 'dTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRcdTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZl'@;
put 'YTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhc'@;
put 'dTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU2XVttXV09Mzk5'@;
put 'MzYrbSxSWzM5OTM2K21dPWJbMTU2XVttXSk7Zm9yKGJbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWYwXHU2ZWYxXHU2ZWYyXHU2ZWYzXHU2ZWY1XHU2ZWY2XHU2ZWY3XHU2ZWY4XHU2ZWZhXHU2ZWZiXHU2ZWZjXHU2ZWZk'@;
put 'XHU2ZWZlXHU2ZWZmXHU2ZjAwXHU2ZjAxXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhXHU2ZjBiXHU2ZjBjXHU2ZjBkXHU2ZjBlXHU2ZjEwXHU2ZjExXHU2ZjEyXHU2ZjE2XHU2ZjE3XHU2ZjE4XHU2ZjE5XHU2ZjFhXHU2ZjFiXHU2ZjFjXHU2ZjFkXHU2ZjFlXHU2ZjFmXHU2'@;
put 'ZjIxXHU2ZjIyXHU2ZjIzXHU2ZjI1XHU2ZjI2XHU2ZjI3XHU2ZjI4XHU2ZjJjXHU2ZjJlXHU2ZjMwXHU2ZjMyXHU2ZjM0XHU2ZjM1XHU2ZjM3XHU2ZjM4XHU2ZjM5XHU2ZjNhXHU2ZjNiXHU2ZjNjXHU2ZjNkXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyXHVmZmZkXHU2ZjQzXHU2ZjQ0XHU2ZjQ1'@;
put 'XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlXHU2ZjRmXHU2ZjUwXHU2ZjUxXHU2ZjUyXHU2ZjUzXHU2ZjU0XHU2ZjU1XHU2ZjU2XHU2ZjU3XHU2ZjU5XHU2ZjVhXHU2ZjViXHU2ZjVkXHU2ZjVmXHU2ZjYwXHU2ZjYxXHU2ZjYzXHU2ZjY0XHU2ZjY1XHU2ZjY3XHU2ZjY4XHU2ZjY5XHU2'@;
put 'ZjZhXHU2ZjZiXHU2ZjZjXHU2ZjZmXHU2ZjcwXHU2ZjcxXHU2ZjczXHU2Zjc1XHU2Zjc2XHU2Zjc3XHU2Zjc5XHU2ZjdiXHU2ZjdkXHU2ZjdlXHU2ZjdmXHU2ZjgwXHU2ZjgxXHU2ZjgyXHU2ZjgzXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmXHU2ZjkwXHU2ZjkxXHU2Zjky'@;
put 'XHU2ZjkzXHU2Zjk0XHU2Zjk1XHU2Zjk2XHU2Zjk3XHU2Zjk4XHU2Zjk5XHU2ZjlhXHU2ZjliXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyXHU2ZmEzXHU2ZmE0XHU2ZmE1XHU2ZmE2XHU2ZmE4XHU2ZmE5XHU2ZmFhXHU2ZmFiXHU2ZmFjXHU2ZmFkXHU2ZmFlXHU2ZmFmXHU2ZmIwXHU2'@;
put 'ZmIxXHU2ZmIyXHU2ZmI0XHU2ZmI1XHU2ZmI3XHU2ZmI4XHU2ZmJhXHU2ZmJiXHU2ZmJjXHU2ZmJkXHU2ZmJlXHU2ZmJmXHU2ZmMxXHU2ZmMzXHU2ZmM0XHU2ZmM1XHU2ZmM2XHU2ZmM3XHU2ZmM4XHU2ZmNhXHU2ZmNiXHU2ZmNjXHU2ZmNkXHU2ZmNlXHU2ZmNmXHU2ZmQwXHU2ZmQzXHU2ZmQ0'@;
put 'XHU2ZmQ1XHU2ZmQ2XHU2ZmQ3XHU2ZmQ4XHU2ZmQ5XHU2ZmRhXHU2ZmRiXHU2ZmRjXHU2ZmRkXHU2ZmRmXHU2ZmUyXHU2ZmUzXHU2ZmU0XHU2ZmU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTU3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTddW21dLmNoYXJDb2RlQXQoMCkmJihlZVti'@;
put 'WzE1N11bbV1dPTQwMTkyK20sUls0MDE5MittXT1iWzE1N11bbV0pO2ZvcihiWzE1OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZlNlx1NmZlN1x1NmZlOFx1NmZlOVx1NmZlYVx1NmZlYlx1NmZlY1x1NmZlZFx1NmZmMFx1NmZm'@;
put 'MVx1NmZmMlx1NmZmM1x1NmZmNFx1NmZmNVx1NmZmNlx1NmZmN1x1NmZmOFx1NmZmOVx1NmZmYVx1NmZmYlx1NmZmY1x1NmZmZFx1NmZmZVx1NmZmZlx1NzAwMFx1NzAwMVx1NzAwMlx1NzAwM1x1NzAwNFx1NzAwNVx1NzAwNlx1NzAwN1x1NzAwOFx1NzAwOVx1NzAwYVx1NzAwYlx1NzAwY1x1'@;
put 'NzAwZFx1NzAwZVx1NzAwZlx1NzAxMFx1NzAxMlx1NzAxM1x1NzAxNFx1NzAxNVx1NzAxNlx1NzAxN1x1NzAxOFx1NzAxOVx1NzAxY1x1NzAxZFx1NzAxZVx1NzAxZlx1NzAyMFx1NzAyMVx1NzAyMlx1NzAyNFx1NzAyNVx1NzAyNlx1NzAyN1x1NzAyOFx1NzAyOVx1NzAyYVx1ZmZmZFx1NzAy'@;
put 'Ylx1NzAyY1x1NzAyZFx1NzAyZVx1NzAyZlx1NzAzMFx1NzAzMVx1NzAzMlx1NzAzM1x1NzAzNFx1NzAzNlx1NzAzN1x1NzAzOFx1NzAzYVx1NzAzYlx1NzAzY1x1NzAzZFx1NzAzZVx1NzAzZlx1NzA0MFx1NzA0MVx1NzA0Mlx1NzA0M1x1NzA0NFx1NzA0NVx1NzA0Nlx1NzA0N1x1NzA0OFx1'@;
put 'NzA0OVx1NzA0YVx1NzA0Ylx1NzA0ZFx1NzA0ZVx1NzA1MFx1NzA1MVx1NzA1Mlx1NzA1M1x1NzA1NFx1NzA1NVx1NzA1Nlx1NzA1N1x1NzA1OFx1NzA1OVx1NzA1YVx1NzA1Ylx1NzA1Y1x1NzA1ZFx1NzA1Zlx1NzA2MFx1NzA2MVx1NzA2Mlx1NzA2M1x1NzA2NFx1NzA2NVx1NzA2Nlx1NzA2'@;
put 'N1x1NzA2OFx1NzA2OVx1NzA2YVx1NzA2ZVx1NzA3MVx1NzA3Mlx1NzA3M1x1NzA3NFx1NzA3N1x1NzA3OVx1NzA3YVx1NzA3Ylx1NzA3ZFx1NzA4MVx1NzA4Mlx1NzA4M1x1NzA4NFx1NzA4Nlx1NzA4N1x1NzA4OFx1NzA4Ylx1NzA4Y1x1NzA4ZFx1NzA4Zlx1NzA5MFx1NzA5MVx1NzA5M1x1'@;
put 'NzA5N1x1NzA5OFx1NzA5YVx1NzA5Ylx1NzA5ZVx1NzA5Zlx1NzBhMFx1NzBhMVx1NzBhMlx1NzBhM1x1NzBhNFx1NzBhNVx1NzBhNlx1NzBhN1x1NzBhOFx1NzBhOVx1NzBhYVx1NzBiMFx1NzBiMlx1NzBiNFx1NzBiNVx1NzBiNlx1NzBiYVx1NzBiZVx1NzBiZlx1NzBjNFx1NzBjNVx1NzBj'@;
put 'Nlx1NzBjN1x1NzBjOVx1NzBjYlx1NzBjY1x1NzBjZFx1NzBjZVx1NzBjZlx1NzBkMFx1NzBkMVx1NzBkMlx1NzBkM1x1NzBkNFx1NzBkNVx1NzBkNlx1NzBkN1x1NzBkYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU4XVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoZWVbYlsxNThdW21dXT00MDQ0OCttLFJbNDA0NDgrbV09YlsxNThdW21dKTtmb3IoYlsxNTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcw'@;
put 'ZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJcdTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRc'@;
put 'dTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcxMjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcx'@;
put 'MzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlcdTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFcdTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNc'@;
put 'dTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcxNTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcxNjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcx'@;
put 'NzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBcdTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNc'@;
put 'dTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcxYTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcxYWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcx'@;
put 'YmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVcdTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2RcdTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1'@;
put 'OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU5XVttXV09NDA3MDQrbSxSWzQwNzA0K21dPWJbMTU5XVttXSk7Zm9yKGJbMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MWQ2XHU3MWQ3XHU3MWQ4XHU3MWQ5XHU3MWRhXHU3'@;
put 'MWRiXHU3MWRjXHU3MWRkXHU3MWRlXHU3MWRmXHU3MWUxXHU3MWUyXHU3MWUzXHU3MWU0XHU3MWU2XHU3MWU4XHU3MWU5XHU3MWVhXHU3MWViXHU3MWVjXHU3MWVkXHU3MWVmXHU3MWYwXHU3MWYxXHU3MWYyXHU3MWYzXHU3MWY0XHU3MWY1XHU3MWY2XHU3MWY3XHU3MWY4XHU3MWZhXHU3MWZi'@;
put 'XHU3MWZjXHU3MWZkXHU3MWZlXHU3MWZmXHU3MjAwXHU3MjAxXHU3MjAyXHU3MjAzXHU3MjA0XHU3MjA1XHU3MjA3XHU3MjA4XHU3MjA5XHU3MjBhXHU3MjBiXHU3MjBjXHU3MjBkXHU3MjBlXHU3MjBmXHU3MjEwXHU3MjExXHU3MjEyXHU3MjEzXHU3MjE0XHU3MjE1XHU3MjE2XHU3MjE3XHU3'@;
put 'MjE4XHU3MjE5XHU3MjFhXHVmZmZkXHU3MjFiXHU3MjFjXHU3MjFlXHU3MjFmXHU3MjIwXHU3MjIxXHU3MjIyXHU3MjIzXHU3MjI0XHU3MjI1XHU3MjI2XHU3MjI3XHU3MjI5XHU3MjJiXHU3MjJkXHU3MjJlXHU3MjJmXHU3MjMyXHU3MjMzXHU3MjM0XHU3MjNhXHU3MjNjXHU3MjNlXHU3MjQw'@;
put 'XHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ0XHU3MjQ1XHU3MjQ2XHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVhXHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3'@;
put 'MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1XHU3Mjg2XHU3Mjg3XHU3Mjg4XHU3Mjg5XHU3MjhjXHU3MjhlXHU3MjkwXHU3MjkxXHU3MjkzXHU3Mjk0XHU3Mjk1XHU3Mjk2'@;
put 'XHU3Mjk3XHU3Mjk4XHU3Mjk5XHU3MjlhXHU3MjliXHU3MjljXHU3MjlkXHU3MjllXHU3MmEwXHU3MmExXHU3MmEyXHU3MmEzXHU3MmE0XHU3MmE1XHU3MmE2XHU3MmE3XHU3MmE4XHU3MmE5XHU3MmFhXHU3MmFiXHU3MmFlXHU3MmIxXHU3MmIyXHU3MmIzXHU3MmI1XHU3MmJhXHU3MmJiXHU3'@;
put 'MmJjXHU3MmJkXHU3MmJlXHU3MmJmXHU3MmMwXHU3MmM1XHU3MmM2XHU3MmM3XHU3MmM5XHU3MmNhXHU3MmNiXHU3MmNjXHU3MmNmXHU3MmQxXHU3MmQzXHU3MmQ0XHU3MmQ1XHU3MmQ2XHU3MmQ4XHU3MmRhXHU3MmRiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTYwXS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09YlsxNjBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2MF1bbV1dPTQwOTYwK20sUls0MDk2MCttXT1iWzE2MF1bbV0pO2ZvcihiWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk'@;
put 'XHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUy'@;
put 'MjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZm'@;
put 'ZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTYxXS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09YlsxNjFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2MV1bbV1dPTQxMjE2K20sUls0MTIxNittXT1iWzE2MV1bbV0pO2ZvcihiWzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4'@;
put 'OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1'@;
put 'MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIy'@;
put 'M1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2Ml0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PWJbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjJdW21dXT00MTQ3MittLFJbNDE0NzIrbV09YlsxNjJdW21dKTtmb3IoYlsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmMDFcdWZmMDJcdWZmMDNcdWZmZTVcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZm'@;
put 'MGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZmMWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFc'@;
put 'dWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmM2NcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZm'@;
put 'NDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9YlsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTYzXVttXV09NDE3MjgrbSxSWzQxNzI4K21dPWJbMTYzXVttXSk7Zm9yKGJbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUz'@;
put 'MDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4'@;
put 'XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUz'@;
put 'MDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPWJbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2NF1bbV1dPTQxOTg0K20sUls0MTk4NCttXT1iWzE2NF1bbV0pO2ZvcihiWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1'@;
put 'MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBiOVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBj'@;
put 'Nlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1'@;
put 'MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBmMFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjVdW21dXT00MjI0MCttLFJbNDIyNDArbV09YlsxNjVdW21dKTtmb3IoYlsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThc'@;
put 'dTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzYjFcdTAzYjJcdTAzYjNcdTAz'@;
put 'YjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFcdTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZlMzVcdWZlMzZcdWZlMzlcdWZlM2FcdWZlM2ZcdWZlNDBcdWZlM2RcdWZlM2VcdWZlNDFcdWZlNDJcdWZlNDNcdWZlNDRcdWZmZmRcdWZmZmRcdWZlM2JcdWZlM2NcdWZlMzdcdWZlMzhcdWZlMzFcdWZmZmRcdWZlMzNcdWZlMzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY2XVttXV09NDI0OTYrbSxSWzQyNDk2K21dPWJbMTY2XVttXSk7Zm9yKGJbMTY3XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1'@;
put 'XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNi'@;
put 'XHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2N11bbV1dPTQyNzUyK20sUls0Mjc1MittXT1iWzE2N11bbV0pO2ZvcihiWzE2OF09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1'@;
put 'MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2'@;
put 'OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1'@;
put 'MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUw'@;
put 'MTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhcdTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzEx'@;
put 'Zlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjhdW21dXT00MzAwOCttLFJbNDMwMDgrbV09YlsxNjhdW21dKTtmb3IoYlsxNjldPSJcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTMyYTNcdTMzOGVcdTMzOGZcdTMzOWNcdTMzOWRcdTMzOWVcdTMzYTFcdTMzYzRcdTMzY2VcdTMzZDFcdTMzZDJc'@;
put 'dTMzZDVcdWZlMzBcdWZmZTJcdWZmZTRcdWZmZmRcdTIxMjFcdTMyMzFcdWZmZmRcdTIwMTBcdWZmZmRcdWZmZmRcdWZmZmRcdTMwZmNcdTMwOWJcdTMwOWNcdTMwZmRcdTMwZmVcdTMwMDZcdTMwOWRcdTMwOWVcdWZlNDlcdWZlNGFcdWZlNGJcdWZlNGNcdWZlNGRcdWZlNGVcdWZlNGZcdWZl'@;
put 'NTBcdWZlNTFcdWZlNTJcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZlNTlcdWZlNWFcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdWZlNWZcdWZlNjBcdWZlNjFcdWZmZmRcdWZlNjJcdWZlNjNcdWZlNjRcdWZlNjVcdWZlNjZcdWZlNjhcdWZlNjlcdWZlNmFcdWZlNmJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI1MDBcdTI1MDFcdTI1'@;
put 'MDJcdTI1MDNcdTI1MDRcdTI1MDVcdTI1MDZcdTI1MDdcdTI1MDhcdTI1MDlcdTI1MGFcdTI1MGJcdTI1MGNcdTI1MGRcdTI1MGVcdTI1MGZcdTI1MTBcdTI1MTFcdTI1MTJcdTI1MTNcdTI1MTRcdTI1MTVcdTI1MTZcdTI1MTdcdTI1MThcdTI1MTlcdTI1MWFcdTI1MWJcdTI1MWNcdTI1MWRc'@;
put 'dTI1MWVcdTI1MWZcdTI1MjBcdTI1MjFcdTI1MjJcdTI1MjNcdTI1MjRcdTI1MjVcdTI1MjZcdTI1MjdcdTI1MjhcdTI1MjlcdTI1MmFcdTI1MmJcdTI1MmNcdTI1MmRcdTI1MmVcdTI1MmZcdTI1MzBcdTI1MzFcdTI1MzJcdTI1MzNcdTI1MzRcdTI1MzVcdTI1MzZcdTI1MzdcdTI1MzhcdTI1'@;
put 'MzlcdTI1M2FcdTI1M2JcdTI1M2NcdTI1M2RcdTI1M2VcdTI1M2ZcdTI1NDBcdTI1NDFcdTI1NDJcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdTI1NGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY5XVttXV09NDMyNjQrbSxSWzQzMjY0K21dPWJbMTY5XVttXSk7Zm9yKGJbMTcw'@;
put 'XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmRjXHU3MmRkXHU3MmRmXHU3MmUyXHU3MmUzXHU3MmU0XHU3MmU1XHU3MmU2XHU3MmU3XHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAw'@;
put 'XHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA2XHU3MzA3XHU3MzA4XHU3MzA5XHU3MzBiXHU3MzBjXHU3MzBkXHU3MzBmXHU3MzEwXHU3MzExXHU3MzEyXHU3MzE0XHU3MzE4XHU3MzE5XHU3MzFhXHU3MzFmXHU3MzIwXHU3MzIzXHU3MzI0XHU3MzI2XHU3MzI3XHU3MzI4XHU3MzJkXHU3MzJmXHU3'@;
put 'MzMwXHU3MzMyXHU3MzMzXHU3MzM1XHU3MzM2XHU3MzNhXHU3MzNiXHU3MzNjXHU3MzNkXHU3MzQwXHU3MzQxXHU3MzQyXHU3MzQzXHU3MzQ0XHU3MzQ1XHU3MzQ2XHU3MzQ3XHU3MzQ4XHVmZmZkXHU3MzQ5XHU3MzRhXHU3MzRiXHU3MzRjXHU3MzRlXHU3MzRmXHU3MzUxXHU3MzUzXHU3MzU0'@;
put 'XHU3MzU1XHU3MzU2XHU3MzU4XHU3MzU5XHU3MzVhXHU3MzViXHU3MzVjXHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYxXHU3MzYyXHU3MzYzXHU3MzY0XHU3MzY1XHU3MzY2XHU3MzY3XHU3MzY4XHU3MzY5XHU3MzZhXHU3MzZiXHU3MzZlXHU3MzcwXHU3MzcxXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTcwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3MF1bbV1dPTQzNTIwK20sUls0MzUyMCttXT1iWzE3MF1b'@;
put 'bV0pO2ZvcihiWzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4'@;
put 'Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1'@;
put 'NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjM1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNk'@;
put 'NVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTcxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzFdW21dXT00Mzc3NittLFJbNDM3'@;
put 'NzYrbV09YlsxNzFdW21dKTtmb3IoYlsxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczZjhcdTczZjlcdTczZmFcdTczZmJcdTczZmNcdTczZmRcdTczZmVcdTczZmZcdTc0MDBcdTc0MDFcdTc0MDJcdTc0MDRcdTc0MDdcdTc0'@;
put 'MDhcdTc0MGJcdTc0MGNcdTc0MGRcdTc0MGVcdTc0MTFcdTc0MTJcdTc0MTNcdTc0MTRcdTc0MTVcdTc0MTZcdTc0MTdcdTc0MThcdTc0MTlcdTc0MWNcdTc0MWRcdTc0MWVcdTc0MWZcdTc0MjBcdTc0MjFcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFc'@;
put 'dTc0MzJcdTc0MzdcdTc0MzhcdTc0MzlcdTc0M2FcdTc0M2JcdTc0M2RcdTc0M2VcdTc0M2ZcdTc0NDBcdTc0NDJcdTc0NDNcdTc0NDRcdTc0NDVcdTc0NDZcdTc0NDdcdTc0NDhcdTc0NDlcdTc0NGFcdTc0NGJcdTc0NGNcdTc0NGRcdWZmZmRcdTc0NGVcdTc0NGZcdTc0NTBcdTc0NTFcdTc0'@;
put 'NTJcdTc0NTNcdTc0NTRcdTc0NTZcdTc0NThcdTc0NWRcdTc0NjBcdTc0NjFcdTc0NjJcdTc0NjNcdTc0NjRcdTc0NjVcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NjlcdTc0NmFcdTc0NmJcdTc0NmNcdTc0NmVcdTc0NmZcdTc0NzFcdTc0NzJcdTc0NzNcdTc0NzRcdTc0NzVcdTc0NzhcdTc0Nzlc'@;
put 'dTc0N2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTcyXVttXV09'@;
put 'NDQwMzIrbSxSWzQ0MDMyK21dPWJbMTcyXVttXSk7Zm9yKGJbMTczXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdiXHU3NDdjXHU3NDdkXHU3NDdmXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhhXHU3'@;
put 'NDhjXHU3NDhkXHU3NDhmXHU3NDkxXHU3NDkyXHU3NDkzXHU3NDk0XHU3NDk1XHU3NDk2XHU3NDk3XHU3NDk4XHU3NDk5XHU3NDlhXHU3NDliXHU3NDlkXHU3NDlmXHU3NGEwXHU3NGExXHU3NGEyXHU3NGEzXHU3NGE0XHU3NGE1XHU3NGE2XHU3NGFhXHU3NGFiXHU3NGFjXHU3NGFkXHU3NGFl'@;
put 'XHU3NGFmXHU3NGIwXHU3NGIxXHU3NGIyXHU3NGIzXHU3NGI0XHU3NGI1XHU3NGI2XHU3NGI3XHU3NGI4XHU3NGI5XHU3NGJiXHU3NGJjXHU3NGJkXHU3NGJlXHU3NGJmXHU3NGMwXHU3NGMxXHU3NGMyXHU3NGMzXHU3NGM0XHU3NGM1XHU3NGM2XHU3NGM3XHVmZmZkXHU3NGM4XHU3NGM5XHU3'@;
put 'NGNhXHU3NGNiXHU3NGNjXHU3NGNkXHU3NGNlXHU3NGNmXHU3NGQwXHU3NGQxXHU3NGQzXHU3NGQ0XHU3NGQ1XHU3NGQ2XHU3NGQ3XHU3NGQ4XHU3NGQ5XHU3NGRhXHU3NGRiXHU3NGRkXHU3NGRmXHU3NGUxXHU3NGU1XHU3NGU3XHU3NGU4XHU3NGU5XHU3NGVhXHU3NGViXHU3NGVjXHU3NGVk'@;
put 'XHU3NGYwXHU3NGYxXHU3NGYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTczXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzNdW21dLmNoYXJDb2RlQXQoMCkmJihl'@;
put 'ZVtiWzE3M11bbV1dPTQ0Mjg4K20sUls0NDI4OCttXT1iWzE3M11bbV0pO2ZvcihiWzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1'@;
put 'NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUy'@;
put 'Nlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1'@;
put 'NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4'@;
put 'MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc0XVttXS5jaGFy'@;
put 'Q29kZUF0KDApJiYoZWVbYlsxNzRdW21dXT00NDU0NCttLFJbNDQ1NDQrbV09YlsxNzRdW21dKTtmb3IoYlsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1ODhcdTc1ODlcdTc1OGFcdTc1OGNcdTc1OGRcdTc1OGVcdTc1OTBc'@;
put 'dTc1OTNcdTc1OTVcdTc1OThcdTc1OWJcdTc1OWNcdTc1OWVcdTc1YTJcdTc1YTZcdTc1YTdcdTc1YThcdTc1YTlcdTc1YWFcdTc1YWRcdTc1YjZcdTc1YjdcdTc1YmFcdTc1YmJcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzZcdTc1Y2JcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDBcdTc1ZDFcdTc1'@;
put 'ZDNcdTc1ZDdcdTc1ZDlcdTc1ZGFcdTc1ZGNcdTc1ZGRcdTc1ZGZcdTc1ZTBcdTc1ZTFcdTc1ZTVcdTc1ZTlcdTc1ZWNcdTc1ZWRcdTc1ZWVcdTc1ZWZcdTc1ZjJcdTc1ZjNcdTc1ZjVcdTc1ZjZcdTc1ZjdcdTc1ZjhcdTc1ZmFcdTc1ZmJcdTc1ZmRcdTc1ZmVcdTc2MDJcdTc2MDRcdTc2MDZc'@;
put 'dTc2MDdcdWZmZmRcdTc2MDhcdTc2MDlcdTc2MGJcdTc2MGRcdTc2MGVcdTc2MGZcdTc2MTFcdTc2MTJcdTc2MTNcdTc2MTRcdTc2MTZcdTc2MWFcdTc2MWNcdTc2MWRcdTc2MWVcdTc2MjFcdTc2MjNcdTc2MjdcdTc2MjhcdTc2MmNcdTc2MmVcdTc2MmZcdTc2MzFcdTc2MzJcdTc2MzZcdTc2'@;
put 'MzdcdTc2MzlcdTc2M2FcdTc2M2JcdTc2M2RcdTc2NDFcdTc2NDJcdTc2NDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzVdLmxlbmd0aDsrK20pNjU1MzMhPT1i'@;
put 'WzE3NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc1XVttXV09NDQ4MDArbSxSWzQ0ODAwK21dPWJbMTc1XVttXSk7Zm9yKGJbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjQ1XHU3NjQ2XHU3NjQ3XHU3NjQ4XHU3NjQ5'@;
put 'XHU3NjRhXHU3NjRiXHU3NjRlXHU3NjRmXHU3NjUwXHU3NjUxXHU3NjUyXHU3NjUzXHU3NjU1XHU3NjU3XHU3NjU4XHU3NjU5XHU3NjVhXHU3NjViXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XHU3NjY1XHU3NjY2XHU3NjY3XHU3NjY4XHU3NjY5XHU3NjZhXHU3NjZjXHU3'@;
put 'NjZkXHU3NjZlXHU3NjcwXHU3NjcxXHU3NjcyXHU3NjczXHU3Njc0XHU3Njc1XHU3Njc2XHU3Njc3XHU3Njc5XHU3NjdhXHU3NjdjXHU3NjdmXHU3NjgwXHU3NjgxXHU3NjgzXHU3Njg1XHU3Njg5XHU3NjhhXHU3NjhjXHU3NjhkXHU3NjhmXHU3NjkwXHU3NjkyXHU3Njk0XHU3Njk1XHU3Njk3'@;
put 'XHU3Njk4XHU3NjlhXHU3NjliXHVmZmZkXHU3NjljXHU3NjlkXHU3NjllXHU3NjlmXHU3NmEwXHU3NmExXHU3NmEyXHU3NmEzXHU3NmE1XHU3NmE2XHU3NmE3XHU3NmE4XHU3NmE5XHU3NmFhXHU3NmFiXHU3NmFjXHU3NmFkXHU3NmFmXHU3NmIwXHU3NmIzXHU3NmI1XHU3NmI2XHU3NmI3XHU3'@;
put 'NmI4XHU3NmI5XHU3NmJhXHU3NmJiXHU3NmJjXHU3NmJkXHU3NmJlXHU3NmMwXHU3NmMxXHU3NmMzXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5'@;
put 'XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFlXHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2'@;
put 'MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0'@;
put 'XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc2XS5sZW5ndGg7'@;
put 'KyttKTY1NTMzIT09YlsxNzZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3Nl1bbV1dPTQ1MDU2K20sUls0NTA1NittXT1iWzE3Nl1bbV0pO2ZvcihiWzE3N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZj'@;
put 'OVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1'@;
put 'NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1NzcxM1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1Nzcy'@;
put 'M1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1'@;
put 'Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1'@;
put 'MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1'@;
put 'NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZh'@;
put 'OVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1i'@;
put 'WzE3N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzddW21dXT00NTMxMittLFJbNDUzMTIrbV09YlsxNzddW21dKTtmb3IoYlsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3'@;
put 'NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3NmRcdTc3NmVcdTc3NmZcdTc3NzBcdTc3NzFcdTc3NzJcdTc3NzNcdTc3NzRcdTc3NzVcdTc3NzZcdTc3NzdcdTc3NzhcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODZcdTc3ODdc'@;
put 'dTc3ODhcdTc3ODlcdTc3OGFcdTc3OGJcdTc3OGZcdTc3OTBcdTc3OTNcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OTdcdTc3OThcdTc3OTlcdTc3OWFcdTc3OWJcdTc3OWNcdTc3OWRcdTc3OWVcdTc3YTFcdTc3YTNcdTc3YTRcdTc3YTZcdTc3YThcdTc3YWJcdTc3YWRcdTc3YWVcdTc3YWZcdTc3'@;
put 'YjFcdTc3YjJcdTc3YjRcdTc3YjZcdTc3YjdcdTc3YjhcdTc3YjlcdTc3YmFcdWZmZmRcdTc3YmNcdTc3YmVcdTc3YzBcdTc3YzFcdTc3YzJcdTc3YzNcdTc3YzRcdTc3YzVcdTc3YzZcdTc3YzdcdTc3YzhcdTc3YzlcdTc3Y2FcdTc3Y2JcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3ZDBcdTc3ZDFc'@;
put 'dTc3ZDJcdTc3ZDNcdTc3ZDRcdTc3ZDVcdTc3ZDZcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGRcdTc3ZGVcdTc3ZGZcdTc3ZTBcdTc3ZTFcdTc3ZTRcdTc1YzVcdTVlNzZcdTczYmJcdTgzZTBcdTY0YWRcdTYyZThcdTk0YjVcdTZjZTJcdTUzNWFcdTUyYzNcdTY0MGZcdTk0YzJcdTdiOTRcdTRm'@;
put 'MmZcdTVlMWJcdTgyMzZcdTgxMTZcdTgxOGFcdTZlMjRcdTZjY2FcdTlhNzNcdTYzNTVcdTUzNWNcdTU0ZmFcdTg4NjVcdTU3ZTBcdTRlMGRcdTVlMDNcdTZiNjVcdTdjM2ZcdTkwZThcdTYwMTZcdTY0ZTZcdTczMWNcdTg4YzFcdTY3NTBcdTYyNGRcdThkMjJcdTc3NmNcdThlMjlcdTkxYzdc'@;
put 'dTVmNjlcdTgzZGNcdTg1MjFcdTk5MTBcdTUzYzJcdTg2OTVcdTZiOGJcdTYwZWRcdTYwZThcdTcwN2ZcdTgyY2RcdTgyMzFcdTRlZDNcdTZjYTdcdTg1Y2ZcdTY0Y2RcdTdjZDlcdTY5ZmRcdTY2ZjlcdTgzNDlcdTUzOTVcdTdiNTZcdTRmYTdcdTUxOGNcdTZkNGJcdTVjNDJcdThlNmRcdTYz'@;
put 'ZDJcdTUzYzlcdTgzMmNcdTgzMzZcdTY3ZTVcdTc4YjRcdTY0M2RcdTViZGZcdTVjOTRcdTVkZWVcdThiZTdcdTYyYzZcdTY3ZjRcdThjN2FcdTY0MDBcdTYzYmFcdTg3NDlcdTk5OGJcdThjMTdcdTdmMjBcdTk0ZjJcdTRlYTdcdTk2MTBcdTk4YTRcdTY2MGNcdTczMTZcdWZmZmQiLnNwbGl0'@;
put 'KCIiKSxtPTA7bSE9YlsxNzhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc4XVttXV09NDU1NjgrbSxSWzQ1NTY4K21dPWJbMTc4XVttXSk7Zm9yKGJbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHU3N2U2XHU3N2U4XHU3N2VhXHU3N2VmXHU3N2YwXHU3N2YxXHU3N2YyXHU3N2Y0XHU3N2Y1XHU3N2Y3XHU3N2Y5XHU3N2ZhXHU3N2ZiXHU3N2ZjXHU3ODAzXHU3ODA0XHU3ODA1XHU3ODA2XHU3ODA3XHU3ODA4XHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEz'@;
put 'XHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3'@;
put 'ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVhXHVmZmZkXHU3ODViXHU3ODVjXHU3ODVlXHU3ODVmXHU3ODYwXHU3ODYxXHU3ODYyXHU3ODYzXHU3ODY0XHU3ODY1XHU3ODY2XHU3ODY3XHU3ODY4XHU3ODY5XHU3ODZmXHU3ODcwXHU3ODcx'@;
put 'XHU3ODcyXHU3ODczXHU3ODc0XHU3ODc1XHU3ODc2XHU3ODc4XHU3ODc5XHU3ODdhXHU3ODdiXHU3ODdkXHU3ODdlXHU3ODdmXHU3ODgwXHU3ODgxXHU3ODgyXHU3ODgzXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4'@;
put 'ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2Nl'@;
put 'XHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3'@;
put 'MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZjXHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVh'@;
put 'XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3OV1bbV1dPTQ1ODI0K20sUls0NTgyNCttXT1iWzE3OV1bbV0pO2ZvcihiWzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1Nzhh'@;
put 'Y1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1NzhjNlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1'@;
put 'NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1Nzhm'@;
put 'Nlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1NzkwYlx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1'@;
put 'NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1Nzhj'@;
put 'MVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1'@;
put 'NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4'@;
put 'Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTgwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODBdW21dXT00NjA4MCttLFJbNDYwODArbV09YlsxODBdW21dKTtmb3IoYlsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MGRcdTc5MGVcdTc5MGZcdTc5MTBcdTc5MTFcdTc5MTJcdTc5MTRcdTc5MTVcdTc5MTZcdTc5MTdcdTc5MThcdTc5MTlcdTc5MWFcdTc5MWJcdTc5MWNcdTc5MWRcdTc5MWZcdTc5MjBcdTc5MjFcdTc5MjJcdTc5MjNcdTc5'@;
put 'MjVcdTc5MjZcdTc5MjdcdTc5MjhcdTc5MjlcdTc5MmFcdTc5MmJcdTc5MmNcdTc5MmRcdTc5MmVcdTc5MmZcdTc5MzBcdTc5MzFcdTc5MzJcdTc5MzNcdTc5MzVcdTc5MzZcdTc5MzdcdTc5MzhcdTc5MzlcdTc5M2RcdTc5M2ZcdTc5NDJcdTc5NDNcdTc5NDRcdTc5NDVcdTc5NDdcdTc5NGFc'@;
put 'dTc5NGJcdTc5NGNcdTc5NGRcdTc5NGVcdTc5NGZcdTc5NTBcdTc5NTFcdTc5NTJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcdWZmZmRcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NmFcdTc5NmJcdTc5NmNcdTc5NmVcdTc5NzBcdTc5NzFcdTc5NzJcdTc5NzNcdTc5NzRcdTc5'@;
put 'NzVcdTc5NzZcdTc5NzlcdTc5N2JcdTc5N2NcdTc5N2RcdTc5N2VcdTc5N2ZcdTc5ODJcdTc5ODNcdTc5ODZcdTc5ODdcdTc5ODhcdTc5ODlcdTc5OGJcdTc5OGNcdTc5OGRcdTc5OGVcdTc5OTBcdTc5OTFcdTc5OTJcdTYwMjBcdTgwM2RcdTYyYzVcdTRlMzlcdTUzNTVcdTkwZjhcdTYzYjhc'@;
put 'dTgwYzZcdTY1ZTZcdTZjMmVcdTRmNDZcdTYwZWVcdTZkZTFcdThiZGVcdTVmMzlcdTg2Y2JcdTVmNTNcdTYzMjFcdTUxNWFcdTgzNjFcdTY4NjNcdTUyMDBcdTYzNjNcdThlNDhcdTUwMTJcdTVjOWJcdTc5NzdcdTViZmNcdTUyMzBcdTdhM2JcdTYwYmNcdTkwNTNcdTc2ZDdcdTVmYjdcdTVm'@;
put 'OTdcdTc2ODRcdThlNmNcdTcwNmZcdTc2N2JcdTdiNDlcdTc3YWFcdTUxZjNcdTkwOTNcdTU4MjRcdTRmNGVcdTZlZjRcdThmZWFcdTY1NGNcdTdiMWJcdTcyYzRcdTZkYTRcdTdmZGZcdTVhZTFcdTYyYjVcdTVlOTVcdTU3MzBcdTg0ODJcdTdiMmNcdTVlMWRcdTVmMWZcdTkwMTJcdTdmMTRc'@;
put 'dTk4YTBcdTYzODJcdTZlYzdcdTc4OThcdTcwYjlcdTUxNzhcdTk3NWJcdTU3YWJcdTc1MzVcdTRmNDNcdTc1MzhcdTVlOTdcdTYwZTZcdTU5NjBcdTZkYzBcdTZiYmZcdTc4ODlcdTUzZmNcdTk2ZDVcdTUxY2JcdTUyMDFcdTYzODlcdTU0MGFcdTk0OTNcdThjMDNcdThkY2NcdTcyMzlcdTc4'@;
put 'OWZcdTg3NzZcdThmZWRcdThjMGRcdTUzZTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTgxXVttXV09NDYzMzYrbSxSWzQ2MzM2K21dPWJbMTgxXVttXSk7Zm9yKGJbMTgyXT0iXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk3XHU3OTk4XHU3OTk5XHU3OTliXHU3OTljXHU3OTlkXHU3OTllXHU3OTlmXHU3OWEwXHU3OWExXHU3OWEyXHU3OWEzXHU3OWE0XHU3OWE1XHU3OWE2XHU3'@;
put 'OWE4XHU3OWE5XHU3OWFhXHU3OWFiXHU3OWFjXHU3OWFkXHU3OWFlXHU3OWFmXHU3OWIwXHU3OWIxXHU3OWIyXHU3OWI0XHU3OWI1XHU3OWI2XHU3OWI3XHU3OWI4XHU3OWJjXHU3OWJmXHU3OWMyXHU3OWM0XHU3OWM1XHU3OWM3XHU3OWM4XHU3OWNhXHU3OWNjXHU3OWNlXHU3OWNmXHU3OWQw'@;
put 'XHU3OWQzXHU3OWQ0XHU3OWQ2XHU3OWQ3XHU3OWQ5XHU3OWRhXHU3OWRiXHU3OWRjXHU3OWRkXHU3OWRlXHU3OWUwXHU3OWUxXHU3OWUyXHU3OWU1XHU3OWU4XHU3OWVhXHVmZmZkXHU3OWVjXHU3OWVlXHU3OWYxXHU3OWYyXHU3OWYzXHU3OWY0XHU3OWY1XHU3OWY2XHU3OWY3XHU3OWY5XHU3'@;
put 'OWZhXHU3OWZjXHU3OWZlXHU3OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmXHU3YTEwXHU3YTExXHU3YTEyXHU3YTEzXHU3YTE1XHU3YTE2XHU3YTE4XHU3YTE5XHU3YTFiXHU3YTFjXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2'@;
put 'XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYzXHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4'@;
put 'YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZl'@;
put 'XHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4'@;
put 'MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTgyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4Ml1bbV1dPTQ2NTkyK20sUls0NjU5MittXT1iWzE4Ml1bbV0pO2Zvcihi'@;
put 'WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1'@;
put 'N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1'@;
put 'NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1'@;
put 'N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1'@;
put 'YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1'@;
put 'NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3'@;
put 'ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1'@;
put 'NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTgzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODNdW21dXT00Njg0OCttLFJbNDY4NDgrbV09Ylsx'@;
put 'ODNdW21dKTtmb3IoYlsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhYTNcdTdhYTRcdTdhYTdcdTdhYTlcdTdhYWFcdTdhYWJcdTdhYWVcdTdhYWZcdTdhYjBcdTdhYjFcdTdhYjJcdTdhYjRcdTdhYjVcdTdhYjZcdTdhYjdc'@;
put 'dTdhYjhcdTdhYjlcdTdhYmFcdTdhYmJcdTdhYmNcdTdhYmRcdTdhYmVcdTdhYzBcdTdhYzFcdTdhYzJcdTdhYzNcdTdhYzRcdTdhYzVcdTdhYzZcdTdhYzdcdTdhYzhcdTdhYzlcdTdhY2FcdTdhY2NcdTdhY2RcdTdhY2VcdTdhY2ZcdTdhZDBcdTdhZDFcdTdhZDJcdTdhZDNcdTdhZDRcdTdh'@;
put 'ZDVcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJcdTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTdcdTdhZThcdTdhZTlcdTdhZWFcdTdhZWJcdTdhZWNcdTdhZWVcdTdhZjBcdTdhZjFcdTdhZjJcdTdhZjNcdWZmZmRcdTdhZjRcdTdhZjVcdTdhZjZcdTdhZjdcdTdhZjhcdTdhZmJc'@;
put 'dTdhZmNcdTdhZmVcdTdiMDBcdTdiMDFcdTdiMDJcdTdiMDVcdTdiMDdcdTdiMDlcdTdiMGNcdTdiMGRcdTdiMGVcdTdiMTBcdTdiMTJcdTdiMTNcdTdiMTZcdTdiMTdcdTdiMThcdTdiMWFcdTdiMWNcdTdiMWRcdTdiMWZcdTdiMjFcdTdiMjJcdTdiMjNcdTdiMjdcdTdiMjlcdTdiMmRcdTZk'@;
put 'NmVcdTZkYWFcdTc5OGZcdTg4YjFcdTVmMTdcdTc1MmJcdTYyOWFcdThmODVcdTRmZWZcdTkxZGNcdTY1YTdcdTgxMmZcdTgxNTFcdTVlOWNcdTgxNTBcdThkNzRcdTUyNmZcdTg5ODZcdThkNGJcdTU5MGRcdTUwODVcdTRlZDhcdTk2MWNcdTcyMzZcdTgxNzlcdThkMWZcdTViY2NcdThiYTNc'@;
put 'dTk2NDRcdTU5ODdcdTdmMWFcdTU0OTBcdTU2NzZcdTU2MGVcdThiZTVcdTY1MzlcdTY5ODJcdTk0OTlcdTc2ZDZcdTZlODlcdTVlNzJcdTc1MThcdTY3NDZcdTY3ZDFcdTdhZmZcdTgwOWRcdThkNzZcdTYxMWZcdTc5YzZcdTY1NjJcdThkNjNcdTUxODhcdTUyMWFcdTk0YTJcdTdmMzhcdTgw'@;
put 'OWJcdTdlYjJcdTVjOTdcdTZlMmZcdTY3NjBcdTdiZDlcdTc2OGJcdTlhZDhcdTgxOGZcdTdmOTRcdTdjZDVcdTY0MWVcdTk1NTBcdTdhM2ZcdTU0NGFcdTU0ZTVcdTZiNGNcdTY0MDFcdTYyMDhcdTllM2RcdTgwZjNcdTc1OTlcdTUyNzJcdTk3NjlcdTg0NWJcdTY4M2NcdTg2ZTRcdTk2MDFc'@;
put 'dTk2OTRcdTk0ZWNcdTRlMmFcdTU0MDRcdTdlZDlcdTY4MzlcdThkZGZcdTgwMTVcdTY2ZjRcdTVlOWFcdTdmYjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg0XVttXV09NDcxMDQrbSxS'@;
put 'WzQ3MTA0K21dPWJbMTg0XVttXSk7Zm9yKGJbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmXHU3YjQwXHU3YjQx'@;
put 'XHU3YjQyXHU3YjQzXHU3YjQ0XHU3YjQ2XHU3YjQ4XHU3YjRhXHU3YjRkXHU3YjRlXHU3YjUzXHU3YjU1XHU3YjU3XHU3YjU5XHU3YjVjXHU3YjVlXHU3YjVmXHU3YjYxXHU3YjYzXHU3YjY0XHU3YjY1XHU3YjY2XHU3YjY3XHU3YjY4XHU3YjY5XHU3YjZhXHU3YjZiXHU3YjZjXHU3YjZkXHU3'@;
put 'YjZmXHU3YjcwXHU3YjczXHU3Yjc0XHU3Yjc2XHU3Yjc4XHU3YjdhXHU3YjdjXHU3YjdkXHU3YjdmXHU3YjgxXHU3YjgyXHU3YjgzXHU3Yjg0XHU3Yjg2XHU3Yjg3XHU3Yjg4XHU3Yjg5XHU3YjhhXHU3YjhiXHU3YjhjXHU3YjhlXHU3YjhmXHVmZmZkXHU3YjkxXHU3YjkyXHU3YjkzXHU3Yjk2'@;
put 'XHU3Yjk4XHU3Yjk5XHU3YjlhXHU3YjliXHU3YjllXHU3YjlmXHU3YmEwXHU3YmEzXHU3YmE0XHU3YmE1XHU3YmFlXHU3YmFmXHU3YmIwXHU3YmIyXHU3YmIzXHU3YmI1XHU3YmI2XHU3YmI3XHU3YmI5XHU3YmJhXHU3YmJiXHU3YmJjXHU3YmJkXHU3YmJlXHU3YmJmXHU3YmMwXHU3YmMyXHU3'@;
put 'YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZkXHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJk'@;
put 'XHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2'@;
put 'MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUwXHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2Rj'@;
put 'XHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4NV1b'@;
put 'bV1dPTQ3MzYwK20sUls0NzM2MCttXT1iWzE4NV1bbV0pO2ZvcihiWzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2Jk'@;
put 'NFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2JlZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1'@;
put 'N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2Mx'@;
put 'Ylx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2MzMVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1'@;
put 'N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEw'@;
put 'YVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNjZlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1'@;
put 'NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMz'@;
put 'NFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg2XVttXS5jaGFyQ29kZUF0KDAp'@;
put 'JiYoZWVbYlsxODZdW21dXT00NzYxNittLFJbNDc2MTYrbV09YlsxODZdW21dKTtmb3IoYlsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjNDNcdTdjNDRcdTdjNDVcdTdjNDZcdTdjNDdcdTdjNDhcdTdjNDlcdTdjNGFcdTdj'@;
put 'NGJcdTdjNGNcdTdjNGVcdTdjNGZcdTdjNTBcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTRcdTdjNTVcdTdjNTZcdTdjNTdcdTdjNThcdTdjNTlcdTdjNWFcdTdjNWJcdTdjNWNcdTdjNWRcdTdjNWVcdTdjNWZcdTdjNjBcdTdjNjFcdTdjNjJcdTdjNjNcdTdjNjRcdTdjNjVcdTdjNjZcdTdjNjdc'@;
put 'dTdjNjhcdTdjNjlcdTdjNmFcdTdjNmJcdTdjNmNcdTdjNmRcdTdjNmVcdTdjNmZcdTdjNzBcdTdjNzFcdTdjNzJcdTdjNzVcdTdjNzZcdTdjNzdcdTdjNzhcdTdjNzlcdTdjN2FcdTdjN2VcdTdjN2ZcdTdjODBcdTdjODFcdTdjODJcdTdjODNcdTdjODRcdTdjODVcdTdjODZcdTdjODdcdWZm'@;
put 'ZmRcdTdjODhcdTdjOGFcdTdjOGJcdTdjOGNcdTdjOGRcdTdjOGVcdTdjOGZcdTdjOTBcdTdjOTNcdTdjOTRcdTdjOTZcdTdjOTlcdTdjOWFcdTdjOWJcdTdjYTBcdTdjYTFcdTdjYTNcdTdjYTZcdTdjYTdcdTdjYThcdTdjYTlcdTdjYWJcdTdjYWNcdTdjYWRcdTdjYWZcdTdjYjBcdTdjYjRc'@;
put 'dTdjYjVcdTdjYjZcdTdjYjdcdTdjYjhcdTdjYmFcdTdjYmJcdTVmMjdcdTg2NGVcdTU1MmNcdTYyYTRcdTRlOTJcdTZjYWFcdTYyMzdcdTgyYjFcdTU0ZDdcdTUzNGVcdTczM2VcdTZlZDFcdTc1M2JcdTUyMTJcdTUzMTZcdThiZGRcdTY5ZDBcdTVmOGFcdTYwMDBcdTZkZWVcdTU3NGZcdTZi'@;
put 'MjJcdTczYWZcdTY4NTNcdThmZDhcdTdmMTNcdTYzNjJcdTYwYTNcdTU1MjRcdTc1ZWFcdThjNjJcdTcxMTVcdTZkYTNcdTViYTZcdTVlN2JcdTgzNTJcdTYxNGNcdTllYzRcdTc4ZmFcdTg3NTdcdTdjMjdcdTc2ODdcdTUxZjBcdTYwZjZcdTcxNGNcdTY2NDNcdTVlNGNcdTYwNGRcdThjMGVc'@;
put 'dTcwNzBcdTYzMjVcdThmODlcdTVmYmRcdTYwNjJcdTg2ZDRcdTU2ZGVcdTZiYzFcdTYwOTRcdTYxNjdcdTUzNDlcdTYwZTBcdTY2NjZcdThkM2ZcdTc5ZmRcdTRmMWFcdTcwZTlcdTZjNDdcdThiYjNcdThiZjJcdTdlZDhcdTgzNjRcdTY2MGZcdTVhNWFcdTliNDJcdTZkNTFcdTZkZjdcdThj'@;
put 'NDFcdTZkM2JcdTRmMTlcdTcwNmJcdTgzYjdcdTYyMTZcdTYwZDFcdTk3MGRcdThkMjdcdTc5NzhcdTUxZmJcdTU3M2VcdTU3ZmFcdTY3M2FcdTc1NzhcdTdhM2RcdTc5ZWZcdTdiOTVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4N11bbV0u'@;
put 'Y2hhckNvZGVBdCgwKSYmKGVlW2JbMTg3XVttXV09NDc4NzIrbSxSWzQ3ODcyK21dPWJbMTg3XVttXSk7Zm9yKGJbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3'@;
put 'Y2M5XHU3Y2NiXHU3Y2NlXHU3Y2NmXHU3Y2QwXHU3Y2QxXHU3Y2QyXHU3Y2QzXHU3Y2Q0XHU3Y2Q4XHU3Y2RhXHU3Y2RiXHU3Y2RkXHU3Y2RlXHU3Y2UxXHU3Y2UyXHU3Y2UzXHU3Y2U0XHU3Y2U1XHU3Y2U2XHU3Y2U3XHU3Y2U5XHU3Y2VhXHU3Y2ViXHU3Y2VjXHU3Y2VkXHU3Y2VlXHU3Y2Yw'@;
put 'XHU3Y2YxXHU3Y2YyXHU3Y2YzXHU3Y2Y0XHU3Y2Y1XHU3Y2Y2XHU3Y2Y3XHU3Y2Y5XHU3Y2ZhXHU3Y2ZjXHU3Y2ZkXHU3Y2ZlXHU3Y2ZmXHU3ZDAwXHU3ZDAxXHU3ZDAyXHU3ZDAzXHU3ZDA0XHU3ZDA1XHU3ZDA2XHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBiXHU3ZDBjXHU3ZDBkXHU3ZDBlXHU3'@;
put 'ZDBmXHU3ZDEwXHVmZmZkXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE0XHU3ZDE1XHU3ZDE2XHU3ZDE3XHU3ZDE4XHU3ZDE5XHU3ZDFhXHU3ZDFiXHU3ZDFjXHU3ZDFkXHU3ZDFlXHU3ZDFmXHU3ZDIxXHU3ZDIzXHU3ZDI0XHU3ZDI1XHU3ZDI2XHU3ZDI4XHU3ZDI5XHU3ZDJhXHU3ZDJjXHU3ZDJk'@;
put 'XHU3ZDJlXHU3ZDMwXHU3ZDMxXHU3ZDMyXHU3ZDMzXHU3ZDM0XHU3ZDM1XHU3ZDM2XHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1'@;
put 'MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3'@;
put 'XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4'@;
put 'MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg4XS5sZW5ndGg7KyttKTY1NTMz'@;
put 'IT09YlsxODhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4OF1bbV1dPTQ4MTI4K20sUls0ODEyOCttXT1iWzE4OF1bbV0pO2ZvcihiWzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1'@;
put 'N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1'@;
put 'Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1'@;
put 'N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4'@;
put 'ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1'@;
put 'OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZhNVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3'@;
put 'NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1'@;
put 'NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4OV0ubGVu'@;
put 'Z3RoOysrbSk2NTUzMyE9PWJbMTg5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODldW21dXT00ODM4NCttLFJbNDgzODQrbV09YlsxODldW21dKTtmb3IoYlsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkOTlcdTdkOWFc'@;
put 'dTdkOWJcdTdkOWNcdTdkOWRcdTdkOWVcdTdkOWZcdTdkYTBcdTdkYTFcdTdkYTJcdTdkYTNcdTdkYTRcdTdkYTVcdTdkYTdcdTdkYThcdTdkYTlcdTdkYWFcdTdkYWJcdTdkYWNcdTdkYWRcdTdkYWZcdTdkYjBcdTdkYjFcdTdkYjJcdTdkYjNcdTdkYjRcdTdkYjVcdTdkYjZcdTdkYjdcdTdk'@;
put 'YjhcdTdkYjlcdTdkYmFcdTdkYmJcdTdkYmNcdTdkYmRcdTdkYmVcdTdkYmZcdTdkYzBcdTdkYzFcdTdkYzJcdTdkYzNcdTdkYzRcdTdkYzVcdTdkYzZcdTdkYzdcdTdkYzhcdTdkYzlcdTdkY2FcdTdkY2JcdTdkY2NcdTdkY2RcdTdkY2VcdTdkY2ZcdTdkZDBcdTdkZDFcdTdkZDJcdTdkZDNc'@;
put 'dTdkZDRcdTdkZDVcdTdkZDZcdTdkZDdcdTdkZDhcdTdkZDlcdWZmZmRcdTdkZGFcdTdkZGJcdTdkZGNcdTdkZGRcdTdkZGVcdTdkZGZcdTdkZTBcdTdkZTFcdTdkZTJcdTdkZTNcdTdkZTRcdTdkZTVcdTdkZTZcdTdkZTdcdTdkZThcdTdkZTlcdTdkZWFcdTdkZWJcdTdkZWNcdTdkZWRcdTdk'@;
put 'ZWVcdTdkZWZcdTdkZjBcdTdkZjFcdTdkZjJcdTdkZjNcdTdkZjRcdTdkZjVcdTdkZjZcdTdkZjdcdTdkZjhcdTdkZjlcdTdkZmFcdTVjM2RcdTUyYjJcdTgzNDZcdTUxNjJcdTgzMGVcdTc3NWJcdTY2NzZcdTljYjhcdTRlYWNcdTYwY2FcdTdjYmVcdTdjYjNcdTdlY2ZcdTRlOTVcdThiNjZc'@;
put 'dTY2NmZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NmNcdTk1NWNcdTVmODRcdTc1YzlcdTk3NTZcdTdhZGZcdTdhZGVcdTUxYzBcdTcwYWZcdTdhOThcdTYzZWFcdTdhNzZcdTdlYTBcdTczOTZcdTk3ZWRcdTRlNDVcdTcwNzhcdTRlNWRcdTkxNTJcdTUzYTlcdTY1NTFcdTY1ZTdcdTgxZmNcdTgy'@;
put 'MDVcdTU0OGVcdTVjMzFcdTc1OWFcdTk3YTBcdTYyZDhcdTcyZDlcdTc1YmRcdTVjNDVcdTlhNzlcdTgzY2FcdTVjNDBcdTU0ODBcdTc3ZTlcdTRlM2VcdTZjYWVcdTgwNWFcdTYyZDJcdTYzNmVcdTVkZThcdTUxNzdcdThkZGRcdThlMWVcdTk1MmZcdTRmZjFcdTUzZTVcdTYwZTdcdTcwYWNc'@;
put 'dTUyNjdcdTYzNTBcdTllNDNcdTVhMWZcdTUwMjZcdTc3MzdcdTUzNzdcdTdlZTJcdTY0ODVcdTY1MmJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5YzlcdTUxYjNcdThiYzBcdTdlZGRcdTU3NDdcdTgzY2NcdTk0YTdcdTUxOWJcdTU0MWJcdTVjZmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7'@;
put 'bSE9YlsxOTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTkwXVttXV09NDg2NDArbSxSWzQ4NjQwK21dPWJbMTkwXVttXSk7Zm9yKGJbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHU3ZGZiXHU3ZGZjXHU3ZGZkXHU3ZGZlXHU3ZGZmXHU3ZTAwXHU3ZTAxXHU3ZTAyXHU3ZTAzXHU3ZTA0XHU3ZTA1XHU3ZTA2XHU3ZTA3XHU3ZTA4XHU3ZTA5XHU3ZTBhXHU3ZTBiXHU3ZTBjXHU3ZTBkXHU3ZTBlXHU3ZTBmXHU3ZTEwXHU3ZTExXHU3ZTEyXHU3ZTEzXHU3ZTE0XHU3ZTE1XHU3'@;
put 'ZTE2XHU3ZTE3XHU3ZTE4XHU3ZTE5XHU3ZTFhXHU3ZTFiXHU3ZTFjXHU3ZTFkXHU3ZTFlXHU3ZTFmXHU3ZTIwXHU3ZTIxXHU3ZTIyXHU3ZTIzXHU3ZTI0XHU3ZTI1XHU3ZTI2XHU3ZTI3XHU3ZTI4XHU3ZTI5XHU3ZTJhXHU3ZTJiXHU3ZTJjXHU3ZTJkXHU3ZTJlXHU3ZTJmXHU3ZTMwXHU3ZTMx'@;
put 'XHU3ZTMyXHU3ZTMzXHU3ZTM0XHU3ZTM1XHU3ZTM2XHU3ZTM3XHU3ZTM4XHU3ZTM5XHVmZmZkXHU3ZTNhXHU3ZTNjXHU3ZTNkXHU3ZTNlXHU3ZTNmXHU3ZTQwXHU3ZTQyXHU3ZTQzXHU3ZTQ0XHU3ZTQ1XHU3ZTQ2XHU3ZTQ4XHU3ZTQ5XHU3ZTRhXHU3ZTRiXHU3ZTRjXHU3ZTRkXHU3ZTRlXHU3'@;
put 'ZTRmXHU3ZTUwXHU3ZTUxXHU3ZTUyXHU3ZTUzXHU3ZTU0XHU3ZTU1XHU3ZTU2XHU3ZTU3XHU3ZTU4XHU3ZTU5XHU3ZTVhXHU3ZTViXHU3ZTVjXHU3ZTVkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVm'@;
put 'XHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1'@;
put 'M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDczXHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4'@;
put 'XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5z'@;
put 'cGxpdCgiIiksbT0wO20hPWJbMTkxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5MV1bbV1dPTQ4ODk2K20sUls0ODg5NittXT1iWzE5MV1bbV0pO2ZvcihiWzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1'@;
put 'N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5'@;
put 'M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2VmOVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1'@;
put 'N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYx'@;
put 'NFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMzMFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1'@;
put 'NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1Njhm'@;
put 'MVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1NjgxN1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1'@;
put 'NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTJdW21dXT00OTE1MittLFJbNDkxNTIrbV09YlsxOTJdW21dKTtmb3IoYlsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNTZcdTdmNTlcdTdmNWJcdTdmNWNcdTdmNWRcdTdmNWVcdTdmNjBcdTdmNjNcdTdmNjRcdTdmNjVcdTdmNjZcdTdmNjdcdTdmNmJcdTdmNmNcdTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2Fc'@;
put 'dTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODJcdTdmODNcdTdmODRcdTdmODVcdTdmODZcdTdmODdcdTdmODhcdTdmODlcdTdmOGJcdTdmOGRcdTdmOGZcdTdmOTBcdTdmOTFcdTdmOTJcdTdmOTNcdTdmOTVcdTdmOTZcdTdmOTdcdTdmOThcdTdmOTlcdTdmOWJcdTdmOWNcdTdm'@;
put 'YTBcdTdmYTJcdTdmYTNcdTdmYTVcdTdmYTZcdTdmYThcdTdmYTlcdTdmYWFcdTdmYWJcdTdmYWNcdTdmYWRcdTdmYWVcdTdmYjFcdWZmZmRcdTdmYjNcdTdmYjRcdTdmYjVcdTdmYjZcdTdmYjdcdTdmYmFcdTdmYmJcdTdmYmVcdTdmYzBcdTdmYzJcdTdmYzNcdTdmYzRcdTdmYzZcdTdmYzdc'@;
put 'dTdmYzhcdTdmYzlcdTdmY2JcdTdmY2RcdTdmY2ZcdTdmZDBcdTdmZDFcdTdmZDJcdTdmZDNcdTdmZDZcdTdmZDdcdTdmZDlcdTdmZGFcdTdmZGJcdTdmZGNcdTdmZGRcdTdmZGVcdTdmZTJcdTdmZTNcdTc1ZTJcdTdhY2JcdTdjOTJcdTZjYTVcdTk2YjZcdTUyOWJcdTc0ODNcdTU0ZTlcdTRm'@;
put 'ZTlcdTgwNTRcdTgzYjJcdThmZGVcdTk1NzBcdTVlYzlcdTYwMWNcdTZkOWZcdTVlMThcdTY1NWJcdTgxMzhcdTk0ZmVcdTYwNGJcdTcwYmNcdTdlYzNcdTdjYWVcdTUxYzlcdTY4ODFcdTdjYjFcdTgyNmZcdTRlMjRcdThmODZcdTkxY2ZcdTY2N2VcdTRlYWVcdThjMDVcdTY0YTlcdTgwNGFc'@;
put 'dTUwZGFcdTc1OTdcdTcxY2VcdTViZTVcdThmYmRcdTZmNjZcdTRlODZcdTY0ODJcdTk1NjNcdTVlZDZcdTY1OTlcdTUyMTdcdTg4YzJcdTcwYzhcdTUyYTNcdTczMGVcdTc0MzNcdTY3OTdcdTc4ZjdcdTk3MTZcdTRlMzRcdTkwYmJcdTljZGVcdTZkY2JcdTUxZGJcdThkNDFcdTU0MWRcdTYy'@;
put 'Y2VcdTczYjJcdTgzZjFcdTk2ZjZcdTlmODRcdTk0YzNcdTRmMzZcdTdmOWFcdTUxY2NcdTcwNzVcdTk2NzVcdTVjYWRcdTk4ODZcdTUzZTZcdTRlZTRcdTZlOWNcdTc0MDlcdTY5YjRcdTc4NmJcdTk5OGZcdTc1NTlcdTUyMThcdTc2MjRcdTZkNDFcdTY3ZjNcdTUxNmRcdTlmOTlcdTgwNGJc'@;
put 'dTU0OTlcdTdiM2NcdTdhYmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTkzXVttXV09NDk0MDgrbSxSWzQ5NDA4K21dPWJbMTkzXVttXSk7Zm9yKGJbMTk0XT0iXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZmU0XHU3ZmU3XHU3ZmU4XHU3ZmVhXHU3ZmViXHU3ZmVjXHU3ZmVkXHU3ZmVmXHU3ZmYyXHU3ZmY0XHU3ZmY1XHU3ZmY2XHU3ZmY3XHU3ZmY4XHU3ZmY5XHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDAyXHU4MDA3'@;
put 'XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiXHU4MDJjXHU4MDJkXHU4MDJlXHU4MDJmXHU4MDMwXHU4MDMyXHU4MDM0XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4'@;
put 'MDQwXHU4MDQxXHU4MDQ0XHU4MDQ1XHU4MDQ3XHU4MDQ4XHU4MDQ5XHU4MDRlXHU4MDRmXHU4MDUwXHU4MDUxXHU4MDUzXHU4MDU1XHU4MDU2XHU4MDU3XHVmZmZkXHU4MDU5XHU4MDViXHU4MDVjXHU4MDVkXHU4MDVlXHU4MDVmXHU4MDYwXHU4MDYxXHU4MDYyXHU4MDYzXHU4MDY0XHU4MDY1'@;
put 'XHU4MDY2XHU4MDY3XHU4MDY4XHU4MDZiXHU4MDZjXHU4MDZkXHU4MDZlXHU4MDZmXHU4MDcwXHU4MDcyXHU4MDczXHU4MDc0XHU4MDc1XHU4MDc2XHU4MDc3XHU4MDc4XHU4MDc5XHU4MDdhXHU4MDdiXHU4MDdjXHU4MDdkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2'@;
put 'NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEz'@;
put 'XHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZmXHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3'@;
put 'ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVl'@;
put 'XHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5NF1bbV1dPTQ5NjY0K20sUls0OTY2NCttXT1iWzE5NF1bbV0pO2ZvcihiWzE5NV09Ilx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBh'@;
put 'Nlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1'@;
put 'ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEy'@;
put 'MVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1'@;
put 'NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4'@;
put 'ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1'@;
put 'NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUxMVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYw'@;
put 'ZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTVdW21dXT00OTkyMCttLFJbNDk5MjArbV09YlsxOTVdW21dKTtm'@;
put 'b3IoYlsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDBcdTgxNDFcdTgxNDJcdTgxNDNcdTgxNDRcdTgxNDVcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWJcdTgx'@;
put 'NWNcdTgxNWRcdTgxNWVcdTgxNWZcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNmFcdTgxNmJcdTgxNmNcdTgxNmZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODNcdTgxODRcdTgxODVcdTgxODZcdTgxODdcdTgxODlcdTgxOGJc'@;
put 'dTgxOGNcdTgxOGRcdTgxOGVcdTgxOTBcdTgxOTJcdTgxOTNcdTgxOTRcdTgxOTVcdTgxOTZcdTgxOTdcdTgxOTlcdTgxOWFcdTgxOWVcdTgxOWZcdTgxYTBcdTgxYTFcdTgxYTJcdTgxYTRcdTgxYTVcdWZmZmRcdTgxYTdcdTgxYTlcdTgxYWJcdTgxYWNcdTgxYWRcdTgxYWVcdTgxYWZcdTgx'@;
put 'YjBcdTgxYjFcdTgxYjJcdTgxYjRcdTgxYjVcdTgxYjZcdTgxYjdcdTgxYjhcdTgxYjlcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2RcdTgxY2VcdTgxY2ZcdTgxZDBcdTgxZDFcdTgxZDJcdTgxZDNcdTY0NzlcdTg2MTFc'@;
put 'dTZhMjFcdTgxOWNcdTc4ZThcdTY0NjlcdTliNTRcdTYyYjlcdTY3MmJcdTgzYWJcdTU4YThcdTllZDhcdTZjYWJcdTZmMjBcdTViZGVcdTk2NGNcdThjMGJcdTcyNWZcdTY3ZDBcdTYyYzdcdTcyNjFcdTRlYTlcdTU5YzZcdTZiY2RcdTU4OTNcdTY2YWVcdTVlNTVcdTUyZGZcdTYxNTVcdTY3'@;
put 'MjhcdTc2ZWVcdTc3NjZcdTcyNjdcdTdhNDZcdTYyZmZcdTU0ZWFcdTU0NTBcdTk0YTBcdTkwYTNcdTVhMWNcdTdlYjNcdTZjMTZcdTRlNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2YmVcdTU2Y2FcdTYzMjBcdTgxMTFcdTYwN2NcdTk1ZjlcdTZkZDZcdTU0NjJcdTk5ODFc'@;
put 'dTUxODVcdTVhZTlcdTgwZmRcdTU5YWVcdTk3MTNcdTUwMmFcdTZjZTVcdTVjM2NcdTYyZGZcdTRmNjBcdTUzM2ZcdTgxN2JcdTkwMDZcdTZlYmFcdTg1MmJcdTYyYzhcdTVlNzRcdTc4YmVcdTY0YjVcdTYzN2JcdTVmZjVcdTVhMThcdTkxN2ZcdTllMWZcdTVjM2ZcdTYzNGZcdTgwNDJcdTVi'@;
put 'N2RcdTU1NmVcdTk1NGFcdTk1NGRcdTZkODVcdTYwYThcdTY3ZTBcdTcyZGVcdTUxZGRcdTViODFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk2XVttXV09NTAxNzYrbSxSWzUwMTc2K21d'@;
put 'PWJbMTk2XVttXSk7Zm9yKGJbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWQ0XHU4MWQ1XHU4MWQ2XHU4MWQ3XHU4MWQ4XHU4MWQ5XHU4MWRhXHU4MWRiXHU4MWRjXHU4MWRkXHU4MWRlXHU4MWRmXHU4MWUwXHU4MWUxXHU4'@;
put 'MWUyXHU4MWU0XHU4MWU1XHU4MWU2XHU4MWU4XHU4MWU5XHU4MWViXHU4MWVlXHU4MWVmXHU4MWYwXHU4MWYxXHU4MWYyXHU4MWY1XHU4MWY2XHU4MWY3XHU4MWY4XHU4MWY5XHU4MWZhXHU4MWZkXHU4MWZmXHU4MjAzXHU4MjA3XHU4MjA4XHU4MjA5XHU4MjBhXHU4MjBiXHU4MjBlXHU4MjBm'@;
put 'XHU4MjExXHU4MjEzXHU4MjE1XHU4MjE2XHU4MjE3XHU4MjE4XHU4MjE5XHU4MjFhXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmXHVmZmZkXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4'@;
put 'MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUwXHU4MjUxXHU4MjUyXHU4MjUzXHU4MjU0XHU4MjU1XHU4MjU2XHU4MjU3XHU4MjU5XHU4MjViXHU4MjVjXHU4MjVkXHU4MjVlXHU4MjYwXHU4MjYxXHU4MjYyXHU4MjYzXHU4MjY0XHU4MjY1XHU4MjY2XHU4MjY3XHU4MjY5'@;
put 'XHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1'@;
put 'MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRjXHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2Mjli'@;
put 'XHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2'@;
put 'NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5N11bbV1dPTUwNDMy'@;
put 'K20sUls1MDQzMittXT1iWzE5N11bbV0pO2ZvcihiWzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1'@;
put 'ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJj'@;
put 'Mlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1'@;
put 'ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMz'@;
put 'N1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1'@;
put 'NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2'@;
put 'ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQwZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1'@;
put 'NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsx'@;
put 'OThdW21dXT01MDY4OCttLFJbNTA2ODgrbV09YlsxOThdW21dKTtmb3IoYlsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGFcdTgzNGJcdTgzNGNc'@;
put 'dTgzNGRcdTgzNGVcdTgzNTNcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNThcdTgzNTlcdTgzNWRcdTgzNjJcdTgzNzBcdTgzNzFcdTgzNzJcdTgzNzNcdTgzNzRcdTgzNzVcdTgzNzZcdTgzNzlcdTgzN2FcdTgzN2VcdTgzN2ZcdTgzODBcdTgzODFcdTgzODJcdTgzODNcdTgzODRcdTgzODdcdTgz'@;
put 'ODhcdTgzOGFcdTgzOGJcdTgzOGNcdTgzOGRcdTgzOGZcdTgzOTBcdTgzOTFcdTgzOTRcdTgzOTVcdTgzOTZcdTgzOTdcdTgzOTlcdTgzOWFcdTgzOWRcdTgzOWZcdTgzYTFcdTgzYTJcdTgzYTNcdTgzYTRcdTgzYTVcdTgzYTZcdTgzYTdcdTgzYWNcdTgzYWRcdTgzYWVcdWZmZmRcdTgzYWZc'@;
put 'dTgzYjVcdTgzYmJcdTgzYmVcdTgzYmZcdTgzYzJcdTgzYzNcdTgzYzRcdTgzYzZcdTgzYzhcdTgzYzlcdTgzY2JcdTgzY2RcdTgzY2VcdTgzZDBcdTgzZDFcdTgzZDJcdTgzZDNcdTgzZDVcdTgzZDdcdTgzZDlcdTgzZGFcdTgzZGJcdTgzZGVcdTgzZTJcdTgzZTNcdTgzZTRcdTgzZTZcdTgz'@;
put 'ZTdcdTgzZThcdTgzZWJcdTgzZWNcdTgzZWRcdTYwNzBcdTZkM2RcdTcyNzVcdTYyNjZcdTk0OGVcdTk0YzVcdTUzNDNcdThmYzFcdTdiN2VcdTRlZGZcdThjMjZcdTRlN2VcdTllZDRcdTk0YjFcdTk0YjNcdTUyNGRcdTZmNWNcdTkwNjNcdTZkNDVcdThjMzRcdTU4MTFcdTVkNGNcdTZiMjBc'@;
put 'dTZiNDlcdTY3YWFcdTU0NWJcdTgxNTRcdTdmOGNcdTU4OTlcdTg1MzdcdTVmM2FcdTYyYTJcdTZhNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3YTdcdTRlNTRcdTRmYThcdTVkZTdcdTk3OThcdTY0YWNcdTdmZDhcdTVjZWRcdTRmY2ZcdTdhOGRcdTUyMDdcdTgzMDRcdTRlMTRcdTYw'@;
put 'MmZcdTdhODNcdTk0YTZcdTRmYjVcdTRlYjJcdTc5ZTZcdTc0MzRcdTUyZTRcdTgyYjlcdTY0ZDJcdTc5YmRcdTViZGRcdTZjODFcdTk3NTJcdThmN2JcdTZjMjJcdTUwM2VcdTUzN2ZcdTZlMDVcdTY0Y2VcdTY2NzRcdTZjMzBcdTYwYzVcdTk4NzdcdThiZjdcdTVlODZcdTc0M2NcdTdhNzdc'@;
put 'dTc5Y2JcdTRlMThcdTkwYjFcdTc0MDNcdTZjNDJcdTU2ZGFcdTkxNGJcdTZjYzVcdThkOGJcdTUzM2FcdTg2YzZcdTY2ZjJcdThlYWZcdTVjNDhcdTlhNzFcdTZlMjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5OV1bbV0uY2hhckNvZGVB'@;
put 'dCgwKSYmKGVlW2JbMTk5XVttXV09NTA5NDQrbSxSWzUwOTQ0K21dPWJbMTk5XVttXSk7Zm9yKGJbMjAwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4M2VlXHU4M2VmXHU4M2YzXHU4M2Y0XHU4M2Y1XHU4M2Y2XHU4M2Y3XHU4M2Zh'@;
put 'XHU4M2ZiXHU4M2ZjXHU4M2ZlXHU4M2ZmXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBhXHU4NDEwXHU4NDEyXHU4NDEzXHU4NDE0XHU4NDE1XHU4NDE2XHU4NDE3XHU4NDE5XHU4NDFhXHU4NDFiXHU4NDFlXHU4NDFmXHU4NDIwXHU4NDIxXHU4NDIyXHU4NDIzXHU4'@;
put 'NDI5XHU4NDJhXHU4NDJiXHU4NDJjXHU4NDJkXHU4NDJlXHU4NDJmXHU4NDMwXHU4NDMyXHU4NDMzXHU4NDM0XHU4NDM1XHU4NDM2XHU4NDM3XHU4NDM5XHU4NDNhXHU4NDNiXHU4NDNlXHU4NDNmXHU4NDQwXHU4NDQxXHU4NDQyXHU4NDQzXHU4NDQ0XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDQ5'@;
put 'XHVmZmZkXHU4NDRhXHU4NDRiXHU4NDRjXHU4NDRkXHU4NDRlXHU4NDRmXHU4NDUwXHU4NDUyXHU4NDUzXHU4NDU0XHU4NDU1XHU4NDU2XHU4NDU4XHU4NDVkXHU4NDVlXHU4NDVmXHU4NDYwXHU4NDYyXHU4NDY0XHU4NDY1XHU4NDY2XHU4NDY3XHU4NDY4XHU4NDZhXHU4NDZlXHU4NDZmXHU4'@;
put 'NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRh'@;
put 'XHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1'@;
put 'OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1'@;
put 'XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEyXHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjAwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDBd'@;
put 'W21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwMF1bbV1dPTUxMjAwK20sUls1MTIwMCttXT1iWzIwMF1bbV0pO2ZvcihiWzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4'@;
put 'M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1'@;
put 'ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRk'@;
put 'NFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1'@;
put 'ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRhOVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5'@;
put 'OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1'@;
put 'NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUz'@;
put 'M1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwMV0ubGVuZ3RoOysrbSk2'@;
put 'NTUzMyE9PWJbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDFdW21dXT01MTQ1NittLFJbNTE0NTYrbV09YlsyMDFdW21dKTtmb3IoYlsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MDNcdTg1MDRcdTg1MDVcdTg1'@;
put 'MDZcdTg1MDdcdTg1MDhcdTg1MDlcdTg1MGFcdTg1MGJcdTg1MGRcdTg1MGVcdTg1MGZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MWJcdTg1MWNcdTg1MWRcdTg1MWVcdTg1MjBcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjZcdTg1MjdcdTg1Mjhc'@;
put 'dTg1MjlcdTg1MmFcdTg1MmRcdTg1MmVcdTg1MmZcdTg1MzBcdTg1MzFcdTg1MzJcdTg1MzNcdTg1MzRcdTg1MzVcdTg1MzZcdTg1M2VcdTg1M2ZcdTg1NDBcdTg1NDFcdTg1NDJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NGJcdTg1NGNcdTg1NGRcdTg1NGVcdTg1NGZcdTg1NTBcdTg1'@;
put 'NTFcdTg1NTJcdTg1NTNcdTg1NTRcdTg1NTVcdWZmZmRcdTg1NTdcdTg1NThcdTg1NWFcdTg1NWJcdTg1NWNcdTg1NWRcdTg1NWZcdTg1NjBcdTg1NjFcdTg1NjJcdTg1NjNcdTg1NjVcdTg1NjZcdTg1NjdcdTg1NjlcdTg1NmFcdTg1NmJcdTg1NmNcdTg1NmRcdTg1NmVcdTg1NmZcdTg1NzBc'@;
put 'dTg1NzFcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFcdTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1'@;
put 'ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRc'@;
put 'dTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZcdTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1'@;
put 'OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlmMjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDJd'@;
put 'Lmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjAyXVttXV09NTE3MTIrbSxSWzUxNzEyK21dPWJbMjAyXVttXSk7Zm9yKGJbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTgyXHU4'@;
put 'NTgzXHU4NTg2XHU4NTg4XHU4NTg5XHU4NThhXHU4NThiXHU4NThjXHU4NThkXHU4NThlXHU4NTkwXHU4NTkxXHU4NTkyXHU4NTkzXHU4NTk0XHU4NTk1XHU4NTk2XHU4NTk3XHU4NTk4XHU4NTk5XHU4NTlhXHU4NTlkXHU4NTllXHU4NTlmXHU4NWEwXHU4NWExXHU4NWEyXHU4NWEzXHU4NWE1'@;
put 'XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4NWFjXHU4NWFkXHU4NWIxXHU4NWIyXHU4NWIzXHU4NWI0XHU4NWI1XHU4NWI2XHU4NWI4XHU4NWJhXHU4NWJiXHU4NWJjXHU4NWJkXHU4NWJlXHU4NWJmXHU4NWMwXHU4NWMyXHU4NWMzXHU4NWM0XHU4NWM1XHU4NWM2XHU4NWM3XHU4NWM4XHU4'@;
put 'NWNhXHU4NWNiXHU4NWNjXHU4NWNkXHU4NWNlXHU4NWQxXHU4NWQyXHVmZmZkXHU4NWQ0XHU4NWQ2XHU4NWQ3XHU4NWQ4XHU4NWQ5XHU4NWRhXHU4NWRiXHU4NWRkXHU4NWRlXHU4NWRmXHU4NWUwXHU4NWUxXHU4NWUyXHU4NWUzXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhXHU4NWVi'@;
put 'XHU4NWVjXHU4NWVkXHU4NWVlXHU4NWVmXHU4NWYwXHU4NWYxXHU4NWYyXHU4NWYzXHU4NWY0XHU4NWY1XHU4NWY2XHU4NWY3XHU4NWY4XHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3'@;
put 'NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4'@;
put 'XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5'@;
put 'NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiks'@;
put 'bT0wO20hPWJbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwM11bbV1dPTUxOTY4K20sUls1MTk2OCttXT1iWzIwM11bbV0pO2ZvcihiWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYx'@;
put 'OFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYyZlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1'@;
put 'ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1'@;
put 'OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJkNFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1'@;
put 'NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAx'@;
put 'OFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1NjhhZlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1'@;
put 'NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZm'@;
put 'ZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDRdW21dXT01MjIyNCttLFJbNTIyMjQrbV09YlsyMDRdW21dKTtmb3IoYlsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTg2NmRcdTg2NmZcdTg2NzBcdTg2NzJcdTg2NzNcdTg2NzRcdTg2NzVcdTg2NzZcdTg2NzdcdTg2NzhcdTg2ODNcdTg2ODRcdTg2ODVcdTg2ODZcdTg2ODdcdTg2ODhcdTg2ODlcdTg2OGVcdTg2OGZcdTg2OTBcdTg2OTFcdTg2OTJcdTg2OTRcdTg2OTZcdTg2'@;
put 'OTdcdTg2OThcdTg2OTlcdTg2OWFcdTg2OWJcdTg2OWVcdTg2OWZcdTg2YTBcdTg2YTFcdTg2YTJcdTg2YTVcdTg2YTZcdTg2YWJcdTg2YWRcdTg2YWVcdTg2YjJcdTg2YjNcdTg2YjdcdTg2YjhcdTg2YjlcdTg2YmJcdTg2YmNcdTg2YmRcdTg2YmVcdTg2YmZcdTg2YzFcdTg2YzJcdTg2YzNc'@;
put 'dTg2YzVcdTg2YzhcdTg2Y2NcdTg2Y2RcdTg2ZDJcdTg2ZDNcdTg2ZDVcdTg2ZDZcdTg2ZDdcdTg2ZGFcdTg2ZGNcdWZmZmRcdTg2ZGRcdTg2ZTBcdTg2ZTFcdTg2ZTJcdTg2ZTNcdTg2ZTVcdTg2ZTZcdTg2ZTdcdTg2ZThcdTg2ZWFcdTg2ZWJcdTg2ZWNcdTg2ZWZcdTg2ZjVcdTg2ZjZcdTg2'@;
put 'ZjdcdTg2ZmFcdTg2ZmJcdTg2ZmNcdTg2ZmRcdTg2ZmZcdTg3MDFcdTg3MDRcdTg3MDVcdTg3MDZcdTg3MGJcdTg3MGNcdTg3MGVcdTg3MGZcdTg3MTBcdTg3MTFcdTg3MTRcdTg3MTZcdTZjNDBcdTVlZjdcdTUwNWNcdTRlYWRcdTVlYWRcdTYzM2FcdTgyNDdcdTkwMWFcdTY4NTBcdTkxNmVc'@;
put 'dTc3YjNcdTU0MGNcdTk0ZGNcdTVmNjRcdTdhZTVcdTY4NzZcdTYzNDVcdTdiNTJcdTdlZGZcdTc1ZGJcdTUwNzdcdTYyOTVcdTU5MzRcdTkwMGZcdTUxZjhcdTc5YzNcdTdhODFcdTU2ZmVcdTVmOTJcdTkwMTRcdTZkODJcdTVjNjBcdTU3MWZcdTU0MTBcdTUxNTRcdTZlNGRcdTU2ZTJcdTYz'@;
put 'YThcdTk4OTNcdTgxN2ZcdTg3MTVcdTg5MmFcdTkwMDBcdTU0MWVcdTVjNmZcdTgxYzBcdTYyZDZcdTYyNThcdTgxMzFcdTllMzVcdTk2NDBcdTlhNmVcdTlhN2NcdTY5MmRcdTU5YTVcdTYyZDNcdTU1M2VcdTYzMTZcdTU0YzdcdTg2ZDlcdTZkM2NcdTVhMDNcdTc0ZTZcdTg4OWNcdTZiNmFc'@;
put 'dTU5MTZcdThjNGNcdTVmMmZcdTZlN2VcdTczYTlcdTk4N2RcdTRlMzhcdTcwZjdcdTViOGNcdTc4OTdcdTYzM2RcdTY2NWFcdTc2OTZcdTYwY2JcdTViOWJcdTVhNDlcdTRlMDdcdTgxNTVcdTZjNmFcdTczOGJcdTRlYTFcdTY3ODlcdTdmNTFcdTVmODBcdTY1ZmFcdTY3MWJcdTVmZDhcdTU5'@;
put 'ODRcdTVhMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA1XVttXV09NTI0ODArbSxSWzUyNDgwK21dPWJbMjA1XVttXSk7Zm9yKGJbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJkXHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4'@;
put 'NzNjXHU4NzNkXHU4NzQwXHU4NzQxXHU4NzQyXHU4NzQzXHU4NzQ0XHU4NzQ1XHU4NzQ2XHU4NzRhXHU4NzRiXHU4NzRkXHU4NzRmXHU4NzUwXHU4NzUxXHU4NzUyXHU4NzU0XHU4NzU1XHU4NzU2XHU4NzU4XHU4NzVhXHU4NzViXHU4NzVjXHU4NzVkXHU4NzVlXHU4NzVmXHU4NzYxXHU4NzYy'@;
put 'XHU4NzY2XHU4NzY3XHU4NzY4XHU4NzY5XHU4NzZhXHU4NzZiXHU4NzZjXHU4NzZkXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XHVmZmZkXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4'@;
put 'NzhlXHU4NzhmXHU4NzkwXHU4NzkxXHU4NzkyXHU4Nzk0XHU4Nzk1XHU4Nzk2XHU4Nzk4XHU4Nzk5XHU4NzlhXHU4NzliXHU4NzljXHU4NzlkXHU4NzllXHU4N2EwXHU4N2ExXHU4N2EyXHU4N2EzXHU4N2E0XHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJm'@;
put 'XHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2'@;
put 'NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4Mjlj'@;
put 'XHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1'@;
put 'NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwNl1bbV1dPTUyNzM2K20sUls1MjczNittXT1iWzIwNl1bbV0pO2ZvcihiWzIwN109Ilx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1'@;
put 'ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1ODdkZlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdl'@;
put 'N1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1'@;
put 'ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1ODgyM1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkx'@;
put 'NVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1'@;
put 'NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMyZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3'@;
put 'N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1'@;
put 'NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDddW21dXT01Mjk5MittLFJbNTI5OTIrbV09YlsyMDddW21dKTtmb3IoYlsyMDhd'@;
put 'PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjRcdTg4MjVcdTg4MjZcdTg4MjdcdTg4MjhcdTg4MjlcdTg4MmFcdTg4MmJcdTg4MmNcdTg4MmRcdTg4MmVcdTg4MmZcdTg4MzBcdTg4MzFcdTg4MzNcdTg4MzRcdTg4MzVcdTg4MzZc'@;
put 'dTg4MzdcdTg4MzhcdTg4M2FcdTg4M2JcdTg4M2RcdTg4M2VcdTg4M2ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcdTg4NDdcdTg4NDhcdTg4NDlcdTg4NGFcdTg4NGJcdTg4NGVcdTg4NGZcdTg4NTBcdTg4NTFcdTg4NTJcdTg4NTNcdTg4NTVcdTg4NTZcdTg4NThcdTg4NWFcdTg4NWJcdTg4'@;
put 'NWNcdTg4NWRcdTg4NWVcdTg4NWZcdTg4NjBcdTg4NjZcdTg4NjdcdTg4NmFcdTg4NmRcdTg4NmZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N2FcdWZmZmRcdTg4N2JcdTg4N2NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OGFcdTg4OGNc'@;
put 'dTg4OGVcdTg4OGZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTdcdTg4OThcdTg4OTlcdTg4OWFcdTg4OWJcdTg4OWRcdTg4OWVcdTg4OWZcdTg4YTBcdTg4YTFcdTg4YTNcdTg4YTVcdTg4YTZcdTg4YTdcdTg4YThcdTg4YTlcdTg4YWFcdTVjMGZcdTViNWRcdTY4MjFcdTgw'@;
put 'OTZcdTU1NzhcdTdiMTFcdTY1NDhcdTY5NTRcdTRlOWJcdTZiNDdcdTg3NGVcdTk3OGJcdTUzNGZcdTYzMWZcdTY0M2FcdTkwYWFcdTY1OWNcdTgwYzFcdThjMTBcdTUxOTlcdTY4YjBcdTUzNzhcdTg3ZjlcdTYxYzhcdTZjYzRcdTZjZmJcdThjMjJcdTVjNTFcdTg1YWFcdTgyYWZcdTk1MGNc'@;
put 'dTZiMjNcdThmOWJcdTY1YjBcdTVmZmJcdTVmYzNcdTRmZTFcdTg4NDVcdTY2MWZcdTgxNjVcdTczMjlcdTYwZmFcdTUxNzRcdTUyMTFcdTU3OGJcdTVmNjJcdTkwYTJcdTg4NGNcdTkxOTJcdTVlNzhcdTY3NGZcdTYwMjdcdTU5ZDNcdTUxNDRcdTUxZjZcdTgwZjhcdTUzMDhcdTZjNzlcdTk2'@;
put 'YzRcdTcxOGFcdTRmMTFcdTRmZWVcdTdmOWVcdTY3M2RcdTU1YzVcdTk1MDhcdTc5YzBcdTg4OTZcdTdlZTNcdTU4OWZcdTYyMGNcdTk3MDBcdTg2NWFcdTU2MThcdTk4N2JcdTVmOTBcdThiYjhcdTg0YzRcdTkxNTdcdTUzZDlcdTY1ZWRcdTVlOGZcdTc1NWNcdTYwNjRcdTdkNmVcdTVhN2Zc'@;
put 'dTdlZWFcdTdlZWRcdThmNjlcdTU1YTdcdTViYTNcdTYwYWNcdTY1Y2JcdTczODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA4XVttXV09NTMyNDgrbSxSWzUzMjQ4K21dPWJbMjA4XVtt'@;
put 'XSk7Zm9yKGJbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OGFjXHU4OGFlXHU4OGFmXHU4OGIwXHU4OGIyXHU4OGIzXHU4OGI0XHU4OGI1XHU4OGI2XHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJm'@;
put 'XHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2XHU4OGQ3XHU4OGRhXHU4OGRiXHU4OGRjXHU4OGRkXHU4OGRlXHU4OGUwXHU4OGUxXHU4OGU2XHU4OGU3XHU4OGU5XHU4OGVhXHU4OGViXHU4'@;
put 'OGVjXHU4OGVkXHU4OGVlXHU4OGVmXHU4OGYyXHU4OGY1XHU4OGY2XHU4OGY3XHU4OGZhXHU4OGZiXHU4OGZkXHU4OGZmXHU4OTAwXHU4OTAxXHU4OTAzXHU4OTA0XHU4OTA1XHU4OTA2XHU4OTA3XHU4OTA4XHVmZmZkXHU4OTA5XHU4OTBiXHU4OTBjXHU4OTBkXHU4OTBlXHU4OTBmXHU4OTEx'@;
put 'XHU4OTE0XHU4OTE1XHU4OTE2XHU4OTE3XHU4OTE4XHU4OTFjXHU4OTFkXHU4OTFlXHU4OTFmXHU4OTIwXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3'@;
put 'NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQw'@;
put 'XHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1'@;
put 'OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMz'@;
put 'XHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwOV1bbV1dPTUzNTA0K20sUls1MzUw'@;
put 'NCttXT1iWzIwOV1bbV0pO2ZvcihiWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1ODkzZlx1ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0'@;
put 'N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk1ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1'@;
put 'ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4'@;
put 'NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5YVx1ODk5Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1'@;
put 'ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUw'@;
put 'MFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1'@;
put 'NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZl'@;
put 'MFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTBdW21dXT01'@;
put 'Mzc2MCttLFJbNTM3NjArbV09YlsyMTBdW21dKTtmb3IoYlsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5YTJcdTg5YTNcdTg5YTRcdTg5YTVcdTg5YTZcdTg5YTdcdTg5YThcdTg5YTlcdTg5YWFcdTg5YWJcdTg5YWNcdTg5'@;
put 'YWRcdTg5YWVcdTg5YWZcdTg5YjBcdTg5YjFcdTg5YjJcdTg5YjNcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YjhcdTg5YjlcdTg5YmFcdTg5YmJcdTg5YmNcdTg5YmRcdTg5YmVcdTg5YmZcdTg5YzBcdTg5YzNcdTg5Y2RcdTg5ZDNcdTg5ZDRcdTg5ZDVcdTg5ZDdcdTg5ZDhcdTg5ZDlc'@;
put 'dTg5ZGJcdTg5ZGRcdTg5ZGZcdTg5ZTBcdTg5ZTFcdTg5ZTJcdTg5ZTRcdTg5ZTdcdTg5ZThcdTg5ZTlcdTg5ZWFcdTg5ZWNcdTg5ZWRcdTg5ZWVcdTg5ZjBcdTg5ZjFcdTg5ZjJcdTg5ZjRcdTg5ZjVcdTg5ZjZcdTg5ZjdcdTg5ZjhcdTg5ZjlcdTg5ZmFcdWZmZmRcdTg5ZmJcdTg5ZmNcdTg5'@;
put 'ZmRcdTg5ZmVcdTg5ZmZcdThhMDFcdThhMDJcdThhMDNcdThhMDRcdThhMDVcdThhMDZcdThhMDhcdThhMDlcdThhMGFcdThhMGJcdThhMGNcdThhMGRcdThhMGVcdThhMGZcdThhMTBcdThhMTFcdThhMTJcdThhMTNcdThhMTRcdThhMTVcdThhMTZcdThhMTdcdThhMThcdThhMTlcdThhMWFc'@;
put 'dThhMWJcdThhMWNcdThhMWRcdTUzNzBcdTgyZjFcdTZhMzFcdTVhNzRcdTllNzBcdTVlOTRcdTdmMjhcdTgzYjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThmY2VcdThkNjJcdTc2YzhcdTVmNzFcdTk4OTZcdTc4NmNcdTY2MjBcdTU0ZGZcdTYyZTVcdTRmNjNcdTgxYzNcdTc1YzhcdTVl'@;
put 'YjhcdTk2Y2RcdThlMGFcdTg2ZjlcdTU0OGZcdTZjZjNcdTZkOGNcdTZjMzhcdTYwN2ZcdTUyYzdcdTc1MjhcdTVlN2RcdTRmMThcdTYwYTBcdTVmZTdcdTVjMjRcdTc1MzFcdTkwYWVcdTk0YzBcdTcyYjlcdTZjYjlcdTZlMzhcdTkxNDlcdTY3MDlcdTUzY2JcdTUzZjNcdTRmNTFcdTkxYzlc'@;
put 'dThiZjFcdTUzYzhcdTVlN2NcdThmYzJcdTZkZTRcdTRlOGVcdTc2YzJcdTY5ODZcdTg2NWVcdTYxMWFcdTgyMDZcdTRmNTlcdTRmZGVcdTkwM2VcdTljN2NcdTYxMDlcdTZlMWRcdTZlMTRcdTk2ODVcdTRlODhcdTVhMzFcdTk2ZThcdTRlMGVcdTVjN2ZcdTc5YjlcdTViODdcdThiZWRcdTdm'@;
put 'YmRcdTczODlcdTU3ZGZcdTgyOGJcdTkwYzFcdTU0MDFcdTkwNDdcdTU1YmJcdTVjZWFcdTVmYTFcdTYxMDhcdTZiMzJcdTcyZjFcdTgwYjJcdThhODlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGVl'@;
put 'W2JbMjExXVttXV09NTQwMTYrbSxSWzU0MDE2K21dPWJbMjExXVttXSk7Zm9yKGJbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YTFlXHU4YTFmXHU4YTIwXHU4YTIxXHU4YTIyXHU4YTIzXHU4YTI0XHU4YTI1XHU4YTI2XHU4'@;
put 'YTI3XHU4YTI4XHU4YTI5XHU4YTJhXHU4YTJiXHU4YTJjXHU4YTJkXHU4YTJlXHU4YTJmXHU4YTMwXHU4YTMxXHU4YTMyXHU4YTMzXHU4YTM0XHU4YTM1XHU4YTM2XHU4YTM3XHU4YTM4XHU4YTM5XHU4YTNhXHU4YTNiXHU4YTNjXHU4YTNkXHU4YTNmXHU4YTQwXHU4YTQxXHU4YTQyXHU4YTQz'@;
put 'XHU4YTQ0XHU4YTQ1XHU4YTQ2XHU4YTQ3XHU4YTQ5XHU4YTRhXHU4YTRiXHU4YTRjXHU4YTRkXHU4YTRlXHU4YTRmXHU4YTUwXHU4YTUxXHU4YTUyXHU4YTUzXHU4YTU0XHU4YTU1XHU4YTU2XHU4YTU3XHU4YTU4XHU4YTU5XHU4YTVhXHU4YTViXHU4YTVjXHU4YTVkXHU4YTVlXHVmZmZkXHU4'@;
put 'YTVmXHU4YTYwXHU4YTYxXHU4YTYyXHU4YTYzXHU4YTY0XHU4YTY1XHU4YTY2XHU4YTY3XHU4YTY4XHU4YTY5XHU4YTZhXHU4YTZiXHU4YTZjXHU4YTZkXHU4YTZlXHU4YTZmXHU4YTcwXHU4YTcxXHU4YTcyXHU4YTczXHU4YTc0XHU4YTc1XHU4YTc2XHU4YTc3XHU4YTc4XHU4YTdhXHU4YTdi'@;
put 'XHU4YTdjXHU4YTdkXHU4YTdlXHU4YTdmXHU4YTgwXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBhXHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4'@;
put 'MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4'@;
put 'XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQzXHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3'@;
put 'MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTJdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihlZVtiWzIxMl1bbV1dPTU0MjcyK20sUls1NDI3MittXT1iWzIxMl1bbV0pO2ZvcihiWzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4MVx1OGE4Mlx1OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1'@;
put 'OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1OGFhMFx1OGFhMVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFh'@;
put 'Nlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFiYlx1OGFiY1x1OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1'@;
put 'OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkNlx1OGFkN1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFk'@;
put 'Y1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1'@;
put 'NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQyNlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJk'@;
put 'Ylx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1'@;
put 'NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PWJb'@;
put 'MjEzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTNdW21dXT01NDUyOCttLFJbNTQ1MjgrbV09YlsyMTNdW21dKTtmb3IoYlsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTRcdThhZTVcdThhZTZcdThhZTdcdThhZThc'@;
put 'dThhZTlcdThhZWFcdThhZWJcdThhZWNcdThhZWRcdThhZWVcdThhZWZcdThhZjBcdThhZjFcdThhZjJcdThhZjNcdThhZjRcdThhZjVcdThhZjZcdThhZjdcdThhZjhcdThhZjlcdThhZmFcdThhZmJcdThhZmNcdThhZmRcdThhZmVcdThhZmZcdThiMDBcdThiMDFcdThiMDJcdThiMDNcdThi'@;
put 'MDRcdThiMDVcdThiMDZcdThiMDhcdThiMDlcdThiMGFcdThiMGJcdThiMGNcdThiMGRcdThiMGVcdThiMGZcdThiMTBcdThiMTFcdThiMTJcdThiMTNcdThiMTRcdThiMTVcdThiMTZcdThiMTdcdThiMThcdThiMTlcdThiMWFcdThiMWJcdThiMWNcdThiMWRcdThiMWVcdThiMWZcdThiMjBc'@;
put 'dThiMjFcdThiMjJcdThiMjNcdWZmZmRcdThiMjRcdThiMjVcdThiMjdcdThiMjhcdThiMjlcdThiMmFcdThiMmJcdThiMmNcdThiMmRcdThiMmVcdThiMmZcdThiMzBcdThiMzFcdThiMzJcdThiMzNcdThiMzRcdThiMzVcdThiMzZcdThiMzdcdThiMzhcdThiMzlcdThiM2FcdThiM2JcdThi'@;
put 'M2NcdThiM2RcdThiM2VcdThiM2ZcdThiNDBcdThiNDFcdThiNDJcdThiNDNcdThiNDRcdThiNDVcdTVlMjdcdTc1YzdcdTkwZDFcdThiYzFcdTgyOWRcdTY3OWRcdTY1MmZcdTU0MzFcdTg3MThcdTc3ZTVcdTgwYTJcdTgxMDJcdTZjNDFcdTRlNGJcdTdlYzdcdTgwNGNcdTc2ZjRcdTY5MGRc'@;
put 'dTZiOTZcdTYyNjdcdTUwM2NcdTRmODRcdTU3NDBcdTYzMDdcdTZiNjJcdThkYmVcdTUzZWFcdTY1ZThcdTdlYjhcdTVmZDdcdTYzMWFcdTYzYjdcdTgxZjNcdTgxZjRcdTdmNmVcdTVlMWNcdTVjZDlcdTUyMzZcdTY2N2FcdTc5ZTlcdTdhMWFcdThkMjhcdTcwOTlcdTc1ZDRcdTZlZGVcdTZj'@;
put 'YmJcdTdhOTJcdTRlMmRcdTc2YzVcdTVmZTBcdTk0OWZcdTg4NzdcdTdlYzhcdTc5Y2RcdTgwYmZcdTkxY2RcdTRlZjJcdTRmMTdcdTgyMWZcdTU0NjhcdTVkZGVcdTZkMzJcdThiY2NcdTdjYTVcdThmNzRcdTgwOThcdTVlMWFcdTU0OTJcdTc2YjFcdTViOTlcdTY2M2NcdTlhYTRcdTczZTBc'@;
put 'dTY4MmFcdTg2ZGJcdTY3MzFcdTczMmFcdThiZjhcdThiZGJcdTkwMTBcdTdhZjlcdTcwZGJcdTcxNmVcdTYyYzRcdTc3YTlcdTU2MzFcdTRlM2JcdTg0NTdcdTY3ZjFcdTUyYTlcdTg2YzBcdThkMmVcdTk0ZjhcdTdiNTFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTRdLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT1iWzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE0XVttXV09NTQ3ODQrbSxSWzU0Nzg0K21dPWJbMjE0XVttXSk7Zm9yKGJbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YjQ2XHU4YjQ3XHU4YjQ4'@;
put 'XHU4YjQ5XHU4YjRhXHU4YjRiXHU4YjRjXHU4YjRkXHU4YjRlXHU4YjRmXHU4YjUwXHU4YjUxXHU4YjUyXHU4YjUzXHU4YjU0XHU4YjU1XHU4YjU2XHU4YjU3XHU4YjU4XHU4YjU5XHU4YjVhXHU4YjViXHU4YjVjXHU4YjVkXHU4YjVlXHU4YjVmXHU4YjYwXHU4YjYxXHU4YjYyXHU4YjYzXHU4'@;
put 'YjY0XHU4YjY1XHU4YjY3XHU4YjY4XHU4YjY5XHU4YjZhXHU4YjZiXHU4YjZkXHU4YjZlXHU4YjZmXHU4YjcwXHU4YjcxXHU4YjcyXHU4YjczXHU4Yjc0XHU4Yjc1XHU4Yjc2XHU4Yjc3XHU4Yjc4XHU4Yjc5XHU4YjdhXHU4YjdiXHU4YjdjXHU4YjdkXHU4YjdlXHU4YjdmXHU4YjgwXHU4Yjgx'@;
put 'XHU4YjgyXHU4YjgzXHU4Yjg0XHU4Yjg1XHU4Yjg2XHVmZmZkXHU4Yjg3XHU4Yjg4XHU4Yjg5XHU4YjhhXHU4YjhiXHU4YjhjXHU4YjhkXHU4YjhlXHU4YjhmXHU4YjkwXHU4YjkxXHU4YjkyXHU4YjkzXHU4Yjk0XHU4Yjk1XHU4Yjk2XHU4Yjk3XHU4Yjk4XHU4Yjk5XHU4YjlhXHU4YjliXHU4'@;
put 'YjljXHU4YjlkXHU4YjllXHU4YjlmXHU4YmFjXHU4YmIxXHU4YmJiXHU4YmM3XHU4YmQwXHU4YmVhXHU4YzA5XHU4YzFlXHU0ZjRmXHU2Y2U4XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1'@;
put 'XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2'@;
put 'ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJhXHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1'@;
put 'XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJb'@;
put 'MjE1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxNV1bbV1dPTU1MDQwK20sUls1NTA0MCttXT1iWzIxNV1bbV0pO2ZvcihiWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMz'@;
put 'OFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1Mlx1OGM1M1x1OGM1NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1'@;
put 'OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1OGM3NVx1OGM3Nlx1OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3'@;
put 'ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OVx1OGM5YVx1OGM5Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1'@;
put 'OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1Nzli'@;
put 'YVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1'@;
put 'NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5'@;
put 'MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT1iWzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTZdW21dXT01NTI5NittLFJbNTUyOTYrbV09YlsyMTZdW21dKTtmb3IoYlsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdThjYWVcdThjYWZcdThjYjBcdThjYjFcdThjYjJcdThjYjNcdThjYjRcdThjYjVcdThjYjZcdThjYjdcdThjYjhcdThjYjlcdThjYmFcdThjYmJcdThjYmNcdThjYmRcdThjYmVcdThjYmZcdThjYzBcdThjYzFcdThjYzJcdThjYzNcdThjYzRcdThjYzVcdThjYzZcdThjYzdc'@;
put 'dThjYzhcdThjYzlcdThjY2FcdThjY2JcdThjY2NcdThjY2RcdThjY2VcdThjY2ZcdThjZDBcdThjZDFcdThjZDJcdThjZDNcdThjZDRcdThjZDVcdThjZDZcdThjZDdcdThjZDhcdThjZDlcdThjZGFcdThjZGJcdThjZGNcdThjZGRcdThjZGVcdThjZGZcdThjZTBcdThjZTFcdThjZTJcdThj'@;
put 'ZTNcdThjZTRcdThjZTVcdThjZTZcdThjZTdcdThjZThcdThjZTlcdThjZWFcdThjZWJcdThjZWNcdWZmZmRcdThjZWRcdThjZWVcdThjZWZcdThjZjBcdThjZjFcdThjZjJcdThjZjNcdThjZjRcdThjZjVcdThjZjZcdThjZjdcdThjZjhcdThjZjlcdThjZmFcdThjZmJcdThjZmNcdThjZmRc'@;
put 'dThjZmVcdThjZmZcdThkMDBcdThkMDFcdThkMDJcdThkMDNcdThkMDRcdThkMDVcdThkMDZcdThkMDdcdThkMDhcdThkMDlcdThkMGFcdThkMGJcdThkMGNcdThkMGRcdTRmNWZcdTRmNTdcdTRmMzJcdTRmM2RcdTRmNzZcdTRmNzRcdTRmOTFcdTRmODlcdTRmODNcdTRmOGZcdTRmN2VcdTRm'@;
put 'N2JcdTRmYWFcdTRmN2NcdTRmYWNcdTRmOTRcdTRmZTZcdTRmZThcdTRmZWFcdTRmYzVcdTRmZGFcdTRmZTNcdTRmZGNcdTRmZDFcdTRmZGZcdTRmZjhcdTUwMjlcdTUwNGNcdTRmZjNcdTUwMmNcdTUwMGZcdTUwMmVcdTUwMmRcdTRmZmVcdTUwMWNcdTUwMGNcdTUwMjVcdTUwMjhcdTUwN2Vc'@;
put 'dTUwNDNcdTUwNTVcdTUwNDhcdTUwNGVcdTUwNmNcdTUwN2JcdTUwYTVcdTUwYTdcdTUwYTlcdTUwYmFcdTUwZDZcdTUxMDZcdTUwZWRcdTUwZWNcdTUwZTZcdTUwZWVcdTUxMDdcdTUxMGJcdTRlZGRcdTZjM2RcdTRmNThcdTRmNjVcdTRmY2VcdTlmYTBcdTZjNDZcdTdjNzRcdTUxNmVcdTVk'@;
put 'ZmRcdTllYzlcdTk5OThcdTUxODFcdTU5MTRcdTUyZjlcdTUzMGRcdThhMDdcdTUzMTBcdTUxZWJcdTU5MTlcdTUxNTVcdTRlYTBcdTUxNTZcdTRlYjNcdTg4NmVcdTg4YTRcdTRlYjVcdTgxMTRcdTg4ZDJcdTc5ODBcdTViMzRcdTg4MDNcdTdmYjhcdTUxYWJcdTUxYjFcdTUxYmRcdTUxYmNc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxN11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE3XVttXV09NTU1NTIrbSxSWzU1NTUyK21dPWJbMjE3XVttXSk7Zm9yKGJbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDBlXHU4ZDBmXHU4ZDEwXHU4ZDExXHU4ZDEyXHU4ZDEzXHU4ZDE0XHU4ZDE1XHU4ZDE2XHU4ZDE3XHU4ZDE4XHU4ZDE5XHU4ZDFhXHU4ZDFiXHU4ZDFjXHU4ZDIwXHU4ZDUxXHU4ZDUyXHU4ZDU3XHU4ZDVmXHU4ZDY1XHU4ZDY4XHU4ZDY5XHU4ZDZh'@;
put 'XHU4ZDZjXHU4ZDZlXHU4ZDZmXHU4ZDcxXHU4ZDcyXHU4ZDc4XHU4ZDc5XHU4ZDdhXHU4ZDdiXHU4ZDdjXHU4ZDdkXHU4ZDdlXHU4ZDdmXHU4ZDgwXHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjXHU4ZDhkXHU4ZDhlXHU4ZDhmXHU4ZDkwXHU4ZDkyXHU4ZDkzXHU4'@;
put 'ZDk1XHU4ZDk2XHU4ZDk3XHU4ZDk4XHU4ZDk5XHU4ZDlhXHU4ZDliXHU4ZDljXHU4ZDlkXHU4ZDllXHU4ZGEwXHU4ZGExXHVmZmZkXHU4ZGEyXHU4ZGE0XHU4ZGE1XHU4ZGE2XHU4ZGE3XHU4ZGE4XHU4ZGE5XHU4ZGFhXHU4ZGFiXHU4ZGFjXHU4ZGFkXHU4ZGFlXHU4ZGFmXHU4ZGIwXHU4ZGIy'@;
put 'XHU4ZGI2XHU4ZGI3XHU4ZGI5XHU4ZGJiXHU4ZGJkXHU4ZGMwXHU4ZGMxXHU4ZGMyXHU4ZGM1XHU4ZGM3XHU4ZGM4XHU4ZGM5XHU4ZGNhXHU4ZGNkXHU4ZGQwXHU4ZGQyXHU4ZGQzXHU4ZGQ0XHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4'@;
put 'YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAy'@;
put 'XHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFmXHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1'@;
put 'MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIz'@;
put 'XHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMThdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxOF1bbV1dPTU1ODA4K20sUls1NTgwOCttXT1iWzIxOF1bbV0pO2ZvcihiWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUw'@;
put 'MFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUxYlx1OGUxY1x1OGUyMFx1OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1'@;
put 'OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1'@;
put 'Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1'@;
put 'OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJhZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJk'@;
put 'Nlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1'@;
put 'NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdkYVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdm'@;
put 'NFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTldW21dXT01NjA2NCttLFJbNTYwNjQrbV09YlsyMTldW21dKTtmb3IoYlsyMjBdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNzNcdThlNzVcdThlNzdcdThlNzhcdThlNzlcdThlN2FcdThlN2JcdThlN2RcdThlN2VcdThlODBcdThlODJcdThlODNcdThlODRcdThlODZcdThlODhcdThlODlcdThlOGFcdThlOGJcdThlOGNcdThl'@;
put 'OGRcdThlOGVcdThlOTFcdThlOTJcdThlOTNcdThlOTVcdThlOTZcdThlOTdcdThlOThcdThlOTlcdThlOWFcdThlOWJcdThlOWRcdThlOWZcdThlYTBcdThlYTFcdThlYTJcdThlYTNcdThlYTRcdThlYTVcdThlYTZcdThlYTdcdThlYThcdThlYTlcdThlYWFcdThlYWRcdThlYWVcdThlYjBc'@;
put 'dThlYjFcdThlYjNcdThlYjRcdThlYjVcdThlYjZcdThlYjdcdThlYjhcdThlYjlcdThlYmJcdThlYmNcdThlYmRcdThlYmVcdThlYmZcdThlYzBcdThlYzFcdThlYzJcdWZmZmRcdThlYzNcdThlYzRcdThlYzVcdThlYzZcdThlYzdcdThlYzhcdThlYzlcdThlY2FcdThlY2JcdThlY2NcdThl'@;
put 'Y2RcdThlY2ZcdThlZDBcdThlZDFcdThlZDJcdThlZDNcdThlZDRcdThlZDVcdThlZDZcdThlZDdcdThlZDhcdThlZDlcdThlZGFcdThlZGJcdThlZGNcdThlZGRcdThlZGVcdThlZGZcdThlZTBcdThlZTFcdThlZTJcdThlZTNcdThlZTRcdTU4MGJcdTU4MGRcdTU3ZmRcdTU3ZWRcdTU4MDBc'@;
put 'dTU4MWVcdTU4MTlcdTU4NDRcdTU4MjBcdTU4NjVcdTU4NmNcdTU4ODFcdTU4ODlcdTU4OWFcdTU4ODBcdTk5YThcdTlmMTlcdTYxZmZcdTgyNzlcdTgyN2RcdTgyN2ZcdTgyOGZcdTgyOGFcdTgyYThcdTgyODRcdTgyOGVcdTgyOTFcdTgyOTdcdTgyOTlcdTgyYWJcdTgyYjhcdTgyYmVcdTgy'@;
put 'YjBcdTgyYzhcdTgyY2FcdTgyZTNcdTgyOThcdTgyYjdcdTgyYWVcdTgyY2JcdTgyY2NcdTgyYzFcdTgyYTlcdTgyYjRcdTgyYTFcdTgyYWFcdTgyOWZcdTgyYzRcdTgyY2VcdTgyYTRcdTgyZTFcdTgzMDlcdTgyZjdcdTgyZTRcdTgzMGZcdTgzMDdcdTgyZGNcdTgyZjRcdTgyZDJcdTgyZDhc'@;
put 'dTgzMGNcdTgyZmJcdTgyZDNcdTgzMTFcdTgzMWFcdTgzMDZcdTgzMTRcdTgzMTVcdTgyZTBcdTgyZDVcdTgzMWNcdTgzNTFcdTgzNWJcdTgzNWNcdTgzMDhcdTgzOTJcdTgzM2NcdTgzMzRcdTgzMzFcdTgzOWJcdTgzNWVcdTgzMmZcdTgzNGZcdTgzNDdcdTgzNDNcdTgzNWZcdTgzNDBcdTgz'@;
put 'MTdcdTgzNjBcdTgzMmRcdTgzM2FcdTgzMzNcdTgzNjZcdTgzNjVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIwXVttXV09NTYzMjArbSxSWzU2MzIwK21dPWJbMjIwXVttXSk7Zm9yKGJb'@;
put 'MjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZWU1XHU4ZWU2XHU4ZWU3XHU4ZWU4XHU4ZWU5XHU4ZWVhXHU4ZWViXHU4ZWVjXHU4ZWVkXHU4ZWVlXHU4ZWVmXHU4ZWYwXHU4ZWYxXHU4ZWYyXHU4ZWYzXHU4ZWY0XHU4ZWY1XHU4'@;
put 'ZWY2XHU4ZWY3XHU4ZWY4XHU4ZWY5XHU4ZWZhXHU4ZWZiXHU4ZWZjXHU4ZWZkXHU4ZWZlXHU4ZWZmXHU4ZjAwXHU4ZjAxXHU4ZjAyXHU4ZjAzXHU4ZjA0XHU4ZjA1XHU4ZjA2XHU4ZjA3XHU4ZjA4XHU4ZjA5XHU4ZjBhXHU4ZjBiXHU4ZjBjXHU4ZjBkXHU4ZjBlXHU4ZjBmXHU4ZjEwXHU4ZjEx'@;
put 'XHU4ZjEyXHU4ZjEzXHU4ZjE0XHU4ZjE1XHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjE5XHU4ZjFhXHU4ZjFiXHU4ZjFjXHU4ZjFkXHU4ZjFlXHU4ZjFmXHU4ZjIwXHU4ZjIxXHU4ZjIyXHU4ZjIzXHVmZmZkXHU4ZjI0XHU4ZjI1XHU4ZjI2XHU4ZjI3XHU4ZjI4XHU4ZjI5XHU4ZjJhXHU4ZjJiXHU4'@;
put 'ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjJmXHU4ZjMwXHU4ZjMxXHU4ZjMyXHU4ZjMzXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjM4XHU4ZjM5XHU4ZjNhXHU4ZjNiXHU4ZjNjXHU4ZjNkXHU4ZjNlXHU4ZjNmXHU4ZjQwXHU4ZjQxXHU4ZjQyXHU4ZjQzXHU4ZjQ0XHU4MzY4XHU4MzFiXHU4MzY5'@;
put 'XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4'@;
put 'M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDcz'@;
put 'XHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4'@;
put 'NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyMV1bbV1dPTU2NTc2K20sUls1NjU3NittXT1iWzIy'@;
put 'MV1bbV0pO2ZvcihiWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0ZFx1OGY0ZVx1OGY0Zlx1OGY1MFx1OGY1MVx1OGY1Mlx1OGY1M1x1'@;
put 'OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1OGZhMVx1OGZhMlx1OGZhNFx1OGZh'@;
put 'NVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZmZFx1OGZjOVx1OGZjYVx1OGZjYlx1OGZjY1x1OGZjZFx1OGZjZlx1'@;
put 'OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1OTAxM1x1OTAxNVx1OTAxOFx1ODU1'@;
put 'Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODViMFx1ODVkM1x1ODVjMVx1ODVkY1x1'@;
put 'ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1NjJkYVx1NjJkN1x1NjJlZVx1NjMy'@;
put 'Mlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1'@;
put 'NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjJdW21dXT01NjgzMittLFJb'@;
put 'NTY4MzIrbV09YlsyMjJdW21dKTtmb3IoYlsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwMTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjdcdTkwMjhcdTkwMjlcdTkwMmFcdTkwMmJcdTkwMmNcdTkwMzBcdTkwMzFc'@;
put 'dTkwMzJcdTkwMzNcdTkwMzRcdTkwMzdcdTkwMzlcdTkwM2FcdTkwM2RcdTkwM2ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcdTkwNDlcdTkwNGFcdTkwNGJcdTkwNGNcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWNcdTkwNWRcdTkwNWVcdTkwNWZcdTkw'@;
put 'NjBcdTkwNjFcdTkwNjRcdTkwNjZcdTkwNjdcdTkwNjlcdTkwNmFcdTkwNmJcdTkwNmNcdTkwNmZcdTkwNzBcdTkwNzFcdTkwNzJcdTkwNzNcdTkwNzZcdTkwNzdcdTkwNzhcdTkwNzlcdTkwN2FcdTkwN2JcdTkwN2NcdTkwN2VcdTkwODFcdWZmZmRcdTkwODRcdTkwODVcdTkwODZcdTkwODdc'@;
put 'dTkwODlcdTkwOGFcdTkwOGNcdTkwOGRcdTkwOGVcdTkwOGZcdTkwOTBcdTkwOTJcdTkwOTRcdTkwOTZcdTkwOThcdTkwOWFcdTkwOWNcdTkwOWVcdTkwOWZcdTkwYTBcdTkwYTRcdTkwYTVcdTkwYTdcdTkwYThcdTkwYTlcdTkwYWJcdTkwYWRcdTkwYjJcdTkwYjdcdTkwYmNcdTkwYmRcdTkw'@;
put 'YmZcdTkwYzBcdTY0N2FcdTY0YjdcdTY0YjhcdTY0OTlcdTY0YmFcdTY0YzBcdTY0ZDBcdTY0ZDdcdTY0ZTRcdTY0ZTJcdTY1MDlcdTY1MjVcdTY1MmVcdTVmMGJcdTVmZDJcdTc1MTlcdTVmMTFcdTUzNWZcdTUzZjFcdTUzZmRcdTUzZTlcdTUzZThcdTUzZmJcdTU0MTJcdTU0MTZcdTU0MDZc'@;
put 'dTU0NGJcdTU0NTJcdTU0NTNcdTU0NTRcdTU0NTZcdTU0NDNcdTU0MjFcdTU0NTdcdTU0NTlcdTU0MjNcdTU0MzJcdTU0ODJcdTU0OTRcdTU0NzdcdTU0NzFcdTU0NjRcdTU0OWFcdTU0OWJcdTU0ODRcdTU0NzZcdTU0NjZcdTU0OWRcdTU0ZDBcdTU0YWRcdTU0YzJcdTU0YjRcdTU0ZDJcdTU0'@;
put 'YTdcdTU0YTZcdTU0ZDNcdTU0ZDRcdTU0NzJcdTU0YTNcdTU0ZDVcdTU0YmJcdTU0YmZcdTU0Y2NcdTU0ZDlcdTU0ZGFcdTU0ZGNcdTU0YTlcdTU0YWFcdTU0YTRcdTU0ZGRcdTU0Y2ZcdTU0ZGVcdTU1MWJcdTU0ZTdcdTU1MjBcdTU0ZmRcdTU1MTRcdTU0ZjNcdTU1MjJcdTU1MjNcdTU1MGZc'@;
put 'dTU1MTFcdTU1MjdcdTU1MmFcdTU1NjdcdTU1OGZcdTU1YjVcdTU1NDlcdTU1NmRcdTU1NDFcdTU1NTVcdTU1M2ZcdTU1NTBcdTU1M2NcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIzXVtt'@;
put 'XV09NTcwODgrbSxSWzU3MDg4K21dPWJbMjIzXVttXSk7Zm9yKGJbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGMyXHU5MGMzXHU5MGM2XHU5MGM4XHU5MGM5XHU5MGNiXHU5MGNjXHU5MGNkXHU5MGQyXHU5MGQ0XHU5MGQ1'@;
put 'XHU5MGQ2XHU5MGQ4XHU5MGQ5XHU5MGRhXHU5MGRlXHU5MGRmXHU5MGUwXHU5MGUzXHU5MGU0XHU5MGU1XHU5MGU5XHU5MGVhXHU5MGVjXHU5MGVlXHU5MGYwXHU5MGYxXHU5MGYyXHU5MGYzXHU5MGY1XHU5MGY2XHU5MGY3XHU5MGY5XHU5MGZhXHU5MGZiXHU5MGZjXHU5MGZmXHU5MTAwXHU5'@;
put 'MTAxXHU5MTAzXHU5MTA1XHU5MTA2XHU5MTA3XHU5MTA4XHU5MTA5XHU5MTBhXHU5MTBiXHU5MTBjXHU5MTBkXHU5MTBlXHU5MTBmXHU5MTEwXHU5MTExXHU5MTEyXHU5MTEzXHU5MTE0XHU5MTE1XHU5MTE2XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFiXHU5MTFjXHVmZmZkXHU5MTFkXHU5MTFm'@;
put 'XHU5MTIwXHU5MTIxXHU5MTI0XHU5MTI1XHU5MTI2XHU5MTI3XHU5MTI4XHU5MTI5XHU5MTJhXHU5MTJiXHU5MTJjXHU5MTJkXHU5MTJlXHU5MTMwXHU5MTMyXHU5MTMzXHU5MTM0XHU5MTM1XHU5MTM2XHU5MTM3XHU5MTM4XHU5MTNhXHU5MTNiXHU5MTNjXHU5MTNkXHU5MTNlXHU5MTNmXHU5'@;
put 'MTQwXHU5MTQxXHU5MTQyXHU5MTQ0XHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0'@;
put 'XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYyXHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1'@;
put 'NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUx'@;
put 'XHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjRdW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihlZVtiWzIyNF1bbV1dPTU3MzQ0K20sUls1NzM0NCttXT1iWzIyNF1bbV0pO2ZvcihiWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1'@;
put 'OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5M1x1OTE5NFx1OTE5NVx1'@;
put 'OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYlx1ZmZm'@;
put 'ZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1OTFkOVx1OTFkYVx1OTFkYlx1OTFkZFx1OTFkZVx1OTFkZlx1'@;
put 'OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNhMlx1NWNiZFx1NWNhY1x1NWNh'@;
put 'Ylx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1'@;
put 'NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2MVx1NzJhZFx1NzJiMFx1NzJi'@;
put 'NFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI1XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoZWVbYlsyMjVdW21dXT01NzYwMCttLFJbNTc2MDArbV09YlsyMjVdW21dKTtmb3IoYlsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZTZcdTkxZTdcdTkxZThcdTkxZTlcdTkxZWFcdTkxZWJcdTkx'@;
put 'ZWNcdTkxZWRcdTkxZWVcdTkxZWZcdTkxZjBcdTkxZjFcdTkxZjJcdTkxZjNcdTkxZjRcdTkxZjVcdTkxZjZcdTkxZjdcdTkxZjhcdTkxZjlcdTkxZmFcdTkxZmJcdTkxZmNcdTkxZmRcdTkxZmVcdTkxZmZcdTkyMDBcdTkyMDFcdTkyMDJcdTkyMDNcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdc'@;
put 'dTkyMDhcdTkyMDlcdTkyMGFcdTkyMGJcdTkyMGNcdTkyMGRcdTkyMGVcdTkyMGZcdTkyMTBcdTkyMTFcdTkyMTJcdTkyMTNcdTkyMTRcdTkyMTVcdTkyMTZcdTkyMTdcdTkyMThcdTkyMTlcdTkyMWFcdTkyMWJcdTkyMWNcdTkyMWRcdTkyMWVcdTkyMWZcdTkyMjBcdTkyMjFcdTkyMjJcdTky'@;
put 'MjNcdTkyMjRcdWZmZmRcdTkyMjVcdTkyMjZcdTkyMjdcdTkyMjhcdTkyMjlcdTkyMmFcdTkyMmJcdTkyMmNcdTkyMmRcdTkyMmVcdTkyMmZcdTkyMzBcdTkyMzFcdTkyMzJcdTkyMzNcdTkyMzRcdTkyMzVcdTkyMzZcdTkyMzdcdTkyMzhcdTkyMzlcdTkyM2FcdTkyM2JcdTkyM2NcdTkyM2Rc'@;
put 'dTkyM2VcdTkyM2ZcdTkyNDBcdTkyNDFcdTkyNDJcdTkyNDNcdTkyNDRcdTkyNDVcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTczNTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTcz'@;
put 'NmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcdTk5NjhcdTk5NjlcdTk5NmFcdTk5NmJcdTk5NmNcdTk5NzRcdTk5NzdcdTk5N2RcdTk5ODBcdTk5ODRcdTk5ODdcdTk5OGFcdTk5OGRcdTk5OTBcdTk5OTFcdTk5OTNcdTk5OTRcdTk5OTVcdTVlODBc'@;
put 'dTVlOTFcdTVlOGJcdTVlOTZcdTVlYTVcdTVlYTBcdTVlYjlcdTVlYjVcdTVlYmVcdTVlYjNcdThkNTNcdTVlZDJcdTVlZDFcdTVlZGJcdTVlZThcdTVlZWFcdTgxYmFcdTVmYzRcdTVmYzlcdTVmZDZcdTVmY2ZcdTYwMDNcdTVmZWVcdTYwMDRcdTVmZTFcdTVmZTRcdTVmZmVcdTYwMDVcdTYw'@;
put 'MDZcdTVmZWFcdTVmZWRcdTVmZjhcdTYwMTlcdTYwMzVcdTYwMjZcdTYwMWJcdTYwMGZcdTYwMGRcdTYwMjlcdTYwMmJcdTYwMGFcdTYwM2ZcdTYwMjFcdTYwNzhcdTYwNzlcdTYwN2JcdTYwN2FcdTYwNDJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjZdLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT1iWzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI2XVttXV09NTc4NTYrbSxSWzU3ODU2K21dPWJbMjI2XVttXSk7Zm9yKGJbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MjQ2XHU5MjQ3XHU5MjQ4XHU5MjQ5XHU5'@;
put 'MjRhXHU5MjRiXHU5MjRjXHU5MjRkXHU5MjRlXHU5MjRmXHU5MjUwXHU5MjUxXHU5MjUyXHU5MjUzXHU5MjU0XHU5MjU1XHU5MjU2XHU5MjU3XHU5MjU4XHU5MjU5XHU5MjVhXHU5MjViXHU5MjVjXHU5MjVkXHU5MjVlXHU5MjVmXHU5MjYwXHU5MjYxXHU5MjYyXHU5MjYzXHU5MjY0XHU5MjY1'@;
put 'XHU5MjY2XHU5MjY3XHU5MjY4XHU5MjY5XHU5MjZhXHU5MjZiXHU5MjZjXHU5MjZkXHU5MjZlXHU5MjZmXHU5MjcwXHU5MjcxXHU5MjcyXHU5MjczXHU5Mjc1XHU5Mjc2XHU5Mjc3XHU5Mjc4XHU5Mjc5XHU5MjdhXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdlXHU5MjdmXHU5MjgwXHU5MjgxXHU5'@;
put 'MjgyXHU5MjgzXHU5Mjg0XHU5Mjg1XHVmZmZkXHU5Mjg2XHU5Mjg3XHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhiXHU5MjhjXHU5MjhkXHU5MjhmXHU5MjkwXHU5MjkxXHU5MjkyXHU5MjkzXHU5Mjk0XHU5Mjk1XHU5Mjk2XHU5Mjk3XHU5Mjk4XHU5Mjk5XHU5MjlhXHU5MjliXHU5MjljXHU5Mjlk'@;
put 'XHU5MjllXHU5MjlmXHU5MmEwXHU5MmExXHU5MmEyXHU5MmEzXHU5MmE0XHU5MmE1XHU5MmE2XHU5MmE3XHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2'@;
put 'MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAz'@;
put 'XHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2'@;
put 'YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI3XS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09YlsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyN11bbV1dPTU4MTEyK20sUls1ODExMittXT1iWzIyN11bbV0pO2ZvcihiWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTJhOFx1OTJhOVx1'@;
put 'OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1OTJjNFx1OTJjNVx1OTJj'@;
put 'Nlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJlMFx1OTJlMVx1OTJlMlx1'@;
put 'OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1OTJmYlx1OTJmY1x1OTJm'@;
put 'ZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQzNVx1NmQxYVx1NmQ0Zlx1'@;
put 'NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1NmUxNlx1NmRhYlx1NmUw'@;
put 'Y1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVkN1x1NmViNFx1NmVjZlx1'@;
put 'NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT1iWzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjhdW21dXT01ODM2OCttLFJbNTgzNjgrbV09YlsyMjhdW21dKTtmb3IoYlsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTkzMGFcdTkzMGJcdTkzMGNcdTkzMGRcdTkzMGVcdTkzMGZcdTkzMTBcdTkzMTFcdTkzMTJcdTkzMTNcdTkzMTRcdTkzMTVcdTkzMTZcdTkzMTdcdTkzMThcdTkzMTlcdTkzMWFcdTkzMWJcdTkzMWNcdTkzMWRcdTkzMWVcdTkzMWZcdTkzMjBcdTkzMjFcdTkzMjJcdTkzMjNcdTkzMjRcdTkz'@;
put 'MjVcdTkzMjZcdTkzMjdcdTkzMjhcdTkzMjlcdTkzMmFcdTkzMmJcdTkzMmNcdTkzMmRcdTkzMmVcdTkzMmZcdTkzMzBcdTkzMzFcdTkzMzJcdTkzMzNcdTkzMzRcdTkzMzVcdTkzMzZcdTkzMzdcdTkzMzhcdTkzMzlcdTkzM2FcdTkzM2JcdTkzM2NcdTkzM2RcdTkzM2ZcdTkzNDBcdTkzNDFc'@;
put 'dTkzNDJcdTkzNDNcdTkzNDRcdTkzNDVcdTkzNDZcdTkzNDdcdTkzNDhcdTkzNDlcdWZmZmRcdTkzNGFcdTkzNGJcdTkzNGNcdTkzNGRcdTkzNGVcdTkzNGZcdTkzNTBcdTkzNTFcdTkzNTJcdTkzNTNcdTkzNTRcdTkzNTVcdTkzNTZcdTkzNTdcdTkzNThcdTkzNTlcdTkzNWFcdTkzNWJcdTkz'@;
put 'NWNcdTkzNWRcdTkzNWVcdTkzNWZcdTkzNjBcdTkzNjFcdTkzNjJcdTkzNjNcdTkzNjRcdTkzNjVcdTkzNjZcdTkzNjdcdTkzNjhcdTkzNjlcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFcdTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJc'@;
put 'dTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThmZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThm'@;
put 'ZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNc'@;
put 'dTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9YlsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI5XVttXV09NTg2MjQrbSxSWzU4NjI0K21dPWJbMjI5XVttXSk7Zm9yKGJbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU5MzZjXHU5MzZkXHU5MzZlXHU5MzZmXHU5MzcwXHU5MzcxXHU5MzcyXHU5MzczXHU5Mzc0XHU5Mzc1XHU5Mzc2XHU5Mzc3XHU5Mzc4XHU5Mzc5XHU5MzdhXHU5MzdiXHU5MzdjXHU5MzdkXHU5MzdlXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5MzgzXHU5Mzg0XHU5'@;
put 'Mzg1XHU5Mzg2XHU5Mzg3XHU5Mzg4XHU5Mzg5XHU5MzhhXHU5MzhiXHU5MzhjXHU5MzhkXHU5MzhlXHU5MzkwXHU5MzkxXHU5MzkyXHU5MzkzXHU5Mzk0XHU5Mzk1XHU5Mzk2XHU5Mzk3XHU5Mzk4XHU5Mzk5XHU5MzlhXHU5MzliXHU5MzljXHU5MzlkXHU5MzllXHU5MzlmXHU5M2EwXHU5M2Ex'@;
put 'XHU5M2EyXHU5M2EzXHU5M2E0XHU5M2E1XHU5M2E2XHU5M2E3XHU5M2E4XHU5M2E5XHU5M2FhXHU5M2FiXHVmZmZkXHU5M2FjXHU5M2FkXHU5M2FlXHU5M2FmXHU5M2IwXHU5M2IxXHU5M2IyXHU5M2IzXHU5M2I0XHU5M2I1XHU5M2I2XHU5M2I3XHU5M2I4XHU5M2I5XHU5M2JhXHU5M2JiXHU5'@;
put 'M2JjXHU5M2JkXHU5M2JlXHU5M2JmXHU5M2MwXHU5M2MxXHU5M2MyXHU5M2MzXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M4XHU5M2M5XHU5M2NiXHU5M2NjXHU5M2NkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1'@;
put 'XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRhXHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1'@;
put 'YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4'@;
put 'XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlkXHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3'@;
put 'ZWE5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzMF1bbV1dPTU4ODgwK20sUls1ODg4MCttXT1iWzIzMF1bbV0pO2ZvcihiWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1OTNlNFx1OTNlNVx1'@;
put 'OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNmZlx1OTQwMFx1OTQw'@;
put 'MVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1OTQxYVx1OTQxYlx1'@;
put 'OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2Vj'@;
put 'Y1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1'@;
put 'N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUzZVx1OTA5NVx1NzM4'@;
put 'ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1NzQyNVx1NzQyOFx1'@;
put 'NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjMxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzFdW21dXT01OTEzNittLFJbNTkxMzYrbV09YlsyMzFdW21dKTtmb3IoYlsyMzJdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MmZcdTk0MzBcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0MzVcdTk0MzZcdTk0MzdcdTk0MzhcdTk0MzlcdTk0M2FcdTk0M2JcdTk0M2NcdTk0M2RcdTk0M2ZcdTk0NDBcdTk0NDFcdTk0NDJcdTk0NDNcdTk0NDRc'@;
put 'dTk0NDVcdTk0NDZcdTk0NDdcdTk0NDhcdTk0NDlcdTk0NGFcdTk0NGJcdTk0NGNcdTk0NGRcdTk0NGVcdTk0NGZcdTk0NTBcdTk0NTFcdTk0NTJcdTk0NTNcdTk0NTRcdTk0NTVcdTk0NTZcdTk0NTdcdTk0NThcdTk0NTlcdTk0NWFcdTk0NWJcdTk0NWNcdTk0NWRcdTk0NWVcdTk0NWZcdTk0'@;
put 'NjBcdTk0NjFcdTk0NjJcdTk0NjNcdTk0NjRcdTk0NjVcdTk0NjZcdTk0NjdcdTk0NjhcdTk0NjlcdTk0NmFcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmZcdWZmZmRcdTk0NzBcdTk0NzFcdTk0NzJcdTk0NzNcdTk0NzRcdTk0NzVcdTk0NzZcdTk0NzdcdTk0NzhcdTk0NzlcdTk0N2FcdTk0N2Jc'@;
put 'dTk0N2NcdTk0N2RcdTk0N2VcdTk0N2ZcdTk0ODBcdTk0ODFcdTk0ODJcdTk0ODNcdTk0ODRcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0'@;
put 'NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFc'@;
put 'dTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJcdTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3'@;
put 'YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJc'@;
put 'dTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjMyXVttXV09NTkzOTIrbSxSWzU5MzkyK21dPWJbMjMyXVttXSk7Zm9yKGJbMjMzXT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NTI3XHU5NTMzXHU5NTNkXHU5NTQzXHU5NTQ4XHU5NTRiXHU5NTU1XHU5NTVhXHU5NTYwXHU5NTZlXHU5NTc0XHU5NTc1XHU5NTc3XHU5NTc4XHU5NTc5XHU5NTdhXHU5NTdiXHU5NTdjXHU5NTdk'@;
put 'XHU5NTdlXHU5NTgwXHU5NTgxXHU5NTgyXHU5NTgzXHU5NTg0XHU5NTg1XHU5NTg2XHU5NTg3XHU5NTg4XHU5NTg5XHU5NThhXHU5NThiXHU5NThjXHU5NThkXHU5NThlXHU5NThmXHU5NTkwXHU5NTkxXHU5NTkyXHU5NTkzXHU5NTk0XHU5NTk1XHU5NTk2XHU5NTk3XHU5NTk4XHU5NTk5XHU5'@;
put 'NTlhXHU5NTliXHU5NTljXHU5NTlkXHU5NTllXHU5NTlmXHU5NWEwXHU5NWExXHU5NWEyXHU5NWEzXHU5NWE0XHU5NWE1XHU5NWE2XHU5NWE3XHU5NWE4XHU5NWE5XHU5NWFhXHVmZmZkXHU5NWFiXHU5NWFjXHU5NWFkXHU5NWFlXHU5NWFmXHU5NWIwXHU5NWIxXHU5NWIyXHU5NWIzXHU5NWI0'@;
put 'XHU5NWI1XHU5NWI2XHU5NWI3XHU5NWI4XHU5NWI5XHU5NWJhXHU5NWJiXHU5NWJjXHU5NWJkXHU5NWJlXHU5NWJmXHU5NWMwXHU5NWMxXHU5NWMyXHU5NWMzXHU5NWM0XHU5NWM1XHU5NWM2XHU5NWM3XHU5NWM4XHU5NWM5XHU5NWNhXHU5NWNiXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2'@;
put 'OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0'@;
put 'XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2'@;
put 'YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFhXHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4Zjdh'@;
put 'XHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzM11bbV1dPTU5NjQ4K20sUls1OTY0OCttXT1iWzIzM11bbV0pO2Zv'@;
put 'cihiWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1OTVkYlx1OTVk'@;
put 'Y1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYyOVx1OTYyYlx1'@;
put 'OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1OTY2MFx1OTY2'@;
put 'M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4ZFx1OGY4ZVx1'@;
put 'OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1Njc3Mlx1NjYw'@;
put 'M1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZlNlx1NjZlOVx1'@;
put 'OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1NzI2Zlx1NzI3'@;
put 'ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzRdW21dXT01OTkwNCttLFJbNTk5MDQrbV09'@;
put 'YlsyMzRdW21dKTtmb3IoYlsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWRcdTk2OWVcdTk2OWZcdTk2YTBcdTk2YTFcdTk2'@;
put 'YTJcdTk2YTNcdTk2YTRcdTk2YTVcdTk2YTZcdTk2YThcdTk2YTlcdTk2YWFcdTk2YWJcdTk2YWNcdTk2YWRcdTk2YWVcdTk2YWZcdTk2YjFcdTk2YjJcdTk2YjRcdTk2YjVcdTk2YjdcdTk2YjhcdTk2YmFcdTk2YmJcdTk2YmZcdTk2YzJcdTk2YzNcdTk2YzhcdTk2Y2FcdTk2Y2JcdTk2ZDBc'@;
put 'dTk2ZDFcdTk2ZDNcdTk2ZDRcdTk2ZDZcdTk2ZDdcdTk2ZDhcdTk2ZDlcdTk2ZGFcdTk2ZGJcdTk2ZGNcdTk2ZGRcdTk2ZGVcdTk2ZGZcdTk2ZTFcdTk2ZTJcdTk2ZTNcdTk2ZTRcdTk2ZTVcdTk2ZTZcdTk2ZTdcdTk2ZWJcdWZmZmRcdTk2ZWNcdTk2ZWRcdTk2ZWVcdTk2ZjBcdTk2ZjFcdTk2'@;
put 'ZjJcdTk2ZjRcdTk2ZjVcdTk2ZjhcdTk2ZmFcdTk2ZmJcdTk2ZmNcdTk2ZmRcdTk2ZmZcdTk3MDJcdTk3MDNcdTk3MDVcdTk3MGFcdTk3MGJcdTk3MGNcdTk3MTBcdTk3MTFcdTk3MTJcdTk3MTRcdTk3MTVcdTk3MTdcdTk3MThcdTk3MTlcdTk3MWFcdTk3MWJcdTk3MWRcdTk3MWZcdTk3MjBc'@;
put 'dTY0M2ZcdTY0ZDhcdTgwMDRcdTZiZWFcdTZiZjNcdTZiZmRcdTZiZjVcdTZiZjlcdTZjMDVcdTZjMDdcdTZjMDZcdTZjMGRcdTZjMTVcdTZjMThcdTZjMTlcdTZjMWFcdTZjMjFcdTZjMjlcdTZjMjRcdTZjMmFcdTZjMzJcdTY1MzVcdTY1NTVcdTY1NmJcdTcyNGRcdTcyNTJcdTcyNTZcdTcy'@;
put 'MzBcdTg2NjJcdTUyMTZcdTgwOWZcdTgwOWNcdTgwOTNcdTgwYmNcdTY3MGFcdTgwYmRcdTgwYjFcdTgwYWJcdTgwYWRcdTgwYjRcdTgwYjdcdTgwZTdcdTgwZThcdTgwZTlcdTgwZWFcdTgwZGJcdTgwYzJcdTgwYzRcdTgwZDlcdTgwY2RcdTgwZDdcdTY3MTBcdTgwZGRcdTgwZWJcdTgwZjFc'@;
put 'dTgwZjRcdTgwZWRcdTgxMGRcdTgxMGVcdTgwZjJcdTgwZmNcdTY3MTVcdTgxMTJcdThjNWFcdTgxMzZcdTgxMWVcdTgxMmNcdTgxMThcdTgxMzJcdTgxNDhcdTgxNGNcdTgxNTNcdTgxNzRcdTgxNTlcdTgxNWFcdTgxNzFcdTgxNjBcdTgxNjlcdTgxN2NcdTgxN2RcdTgxNmRcdTgxNjdcdTU4'@;
put 'NGRcdTVhYjVcdTgxODhcdTgxODJcdTgxOTFcdTZlZDVcdTgxYTNcdTgxYWFcdTgxY2NcdTY3MjZcdTgxY2FcdTgxYmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM1XVttXV09NjAxNjAr'@;
put 'bSxSWzYwMTYwK21dPWJbMjM1XVttXSk7Zm9yKGJbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI0XHU5NzI1XHU5NzI2XHU5NzI3XHU5NzI4XHU5NzI5XHU5NzJiXHU5NzJjXHU5NzJlXHU5'@;
put 'NzJmXHU5NzMxXHU5NzMzXHU5NzM0XHU5NzM1XHU5NzM2XHU5NzM3XHU5NzNhXHU5NzNiXHU5NzNjXHU5NzNkXHU5NzNmXHU5NzQwXHU5NzQxXHU5NzQyXHU5NzQzXHU5NzQ0XHU5NzQ1XHU5NzQ2XHU5NzQ3XHU5NzQ4XHU5NzQ5XHU5NzRhXHU5NzRiXHU5NzRjXHU5NzRkXHU5NzRlXHU5NzRm'@;
put 'XHU5NzUwXHU5NzUxXHU5NzU0XHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzVjXHU5NzVkXHU5NzVmXHU5NzYzXHU5NzY0XHU5NzY2XHU5NzY3XHU5NzY4XHU5NzZhXHU5NzZiXHU5NzZjXHU5NzZkXHU5NzZlXHU5NzZmXHU5NzcwXHU5NzcxXHVmZmZkXHU5NzcyXHU5Nzc1XHU5Nzc3XHU5'@;
put 'Nzc4XHU5Nzc5XHU5NzdhXHU5NzdiXHU5NzdkXHU5NzdlXHU5NzdmXHU5NzgwXHU5NzgxXHU5NzgyXHU5NzgzXHU5Nzg0XHU5Nzg2XHU5Nzg3XHU5Nzg4XHU5Nzg5XHU5NzhhXHU5NzhjXHU5NzhlXHU5NzhmXHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5Nzli'@;
put 'XHU5NzljXHU5NzlkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIzXHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2'@;
put 'NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdh'@;
put 'XHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNkXHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3'@;
put 'OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIz'@;
put 'Nl1bbV1dPTYwNDE2K20sUls2MDQxNittXT1iWzIzNl1bbV0pO2ZvcihiWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1OTdhOVx1'@;
put 'OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdjOVx1OTdj'@;
put 'YVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1OTdlNFx1'@;
put 'OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgwOVx1OTgw'@;
put 'YVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1NzdmOFx1'@;
put 'NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2YVx1Nzg5'@;
put 'Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1NzcwZFx1'@;
put 'NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM3XVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoZWVbYlsyMzddW21dXT02MDY3MittLFJbNjA2NzIrbV09YlsyMzddW21dKTtmb3IoYlsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4MGZcdTk4MTBcdTk4MTFcdTk4MTJcdTk4MTNcdTk4MTRcdTk4MTVcdTk4MTZc'@;
put 'dTk4MTdcdTk4MThcdTk4MTlcdTk4MWFcdTk4MWJcdTk4MWNcdTk4MWRcdTk4MWVcdTk4MWZcdTk4MjBcdTk4MjFcdTk4MjJcdTk4MjNcdTk4MjRcdTk4MjVcdTk4MjZcdTk4MjdcdTk4MjhcdTk4MjlcdTk4MmFcdTk4MmJcdTk4MmNcdTk4MmRcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzFcdTk4'@;
put 'MzJcdTk4MzNcdTk4MzRcdTk4MzVcdTk4MzZcdTk4MzdcdTk4MzhcdTk4MzlcdTk4M2FcdTk4M2JcdTk4M2NcdTk4M2RcdTk4M2VcdTk4M2ZcdTk4NDBcdTk4NDFcdTk4NDJcdTk4NDNcdTk4NDRcdTk4NDVcdTk4NDZcdTk4NDdcdTk4NDhcdTk4NDlcdTk4NGFcdTk4NGJcdTk4NGNcdTk4NGRc'@;
put 'dWZmZmRcdTk4NGVcdTk4NGZcdTk4NTBcdTk4NTFcdTk4NTJcdTk4NTNcdTk4NTRcdTk4NTVcdTk4NTZcdTk4NTdcdTk4NThcdTk4NTlcdTk4NWFcdTk4NWJcdTk4NWNcdTk4NWRcdTk4NWVcdTk4NWZcdTk4NjBcdTk4NjFcdTk4NjJcdTk4NjNcdTk4NjRcdTk4NjVcdTk4NjZcdTk4NjdcdTk4'@;
put 'NjhcdTk4NjlcdTk4NmFcdTk4NmJcdTk4NmNcdTk4NmRcdTk4NmVcdTc3NjJcdTc3NjVcdTc3N2ZcdTc3OGRcdTc3N2RcdTc3ODBcdTc3OGNcdTc3OTFcdTc3OWZcdTc3YTBcdTc3YjBcdTc3YjVcdTc3YmRcdTc1M2FcdTc1NDBcdTc1NGVcdTc1NGJcdTc1NDhcdTc1NWJcdTc1NzJcdTc1Nzlc'@;
put 'dTc1ODNcdTdmNThcdTdmNjFcdTdmNWZcdThhNDhcdTdmNjhcdTdmNzRcdTdmNzFcdTdmNzlcdTdmODFcdTdmN2VcdTc2Y2RcdTc2ZTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OGJcdTk0OGFcdTk0OGNcdTk0OGRcdTk0OGZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OWFcdTk0'@;
put 'OWJcdTk0OWNcdTk0YTNcdTk0YTRcdTk0YWJcdTk0YWFcdTk0YWRcdTk0YWNcdTk0YWZcdTk0YjBcdTk0YjJcdTk0YjRcdTk0YjZcdTk0YjdcdTk0YjhcdTk0YjlcdTk0YmFcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzhcdTk0YzlcdTk0Y2FcdTk0Y2JcdTk0Y2NcdTk0Y2RcdTk0Y2Vc'@;
put 'dTk0ZDBcdTk0ZDFcdTk0ZDJcdTk0ZDVcdTk0ZDZcdTk0ZDdcdTk0ZDlcdTk0ZDhcdTk0ZGJcdTk0ZGVcdTk0ZGZcdTk0ZTBcdTk0ZTJcdTk0ZTRcdTk0ZTVcdTk0ZTdcdTk0ZThcdTk0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzOF1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM4XVttXV09NjA5MjgrbSxSWzYwOTI4K21dPWJbMjM4XVttXSk7Zm9yKGJbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODZmXHU5ODcwXHU5ODcxXHU5ODcyXHU5ODczXHU5ODc0'@;
put 'XHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4XHU5OGE5XHU5OGFhXHU5OGFiXHU5OGFjXHU5OGFkXHU5OGFlXHU5OGFmXHU5OGIwXHU5OGIxXHU5OGIyXHU5OGIzXHU5OGI0XHU5OGI1XHU5OGI2XHU5OGI3XHU5OGI4XHU5OGI5XHU5OGJhXHU5OGJiXHU5OGJjXHU5'@;
put 'OGJkXHU5OGJlXHU5OGJmXHU5OGMwXHU5OGMxXHU5OGMyXHU5OGMzXHU5OGM0XHU5OGM1XHU5OGM2XHU5OGM3XHU5OGM4XHU5OGM5XHU5OGNhXHU5OGNiXHU5OGNjXHU5OGNkXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRiXHU5OGRjXHU5OGRkXHU5OGUwXHU5OGUxXHU5OGUy'@;
put 'XHU5OGUzXHU5OGU0XHVmZmZkXHU5OGU1XHU5OGU2XHU5OGU5XHU5OGVhXHU5OGViXHU5OGVjXHU5OGVkXHU5OGVlXHU5OGVmXHU5OGYwXHU5OGYxXHU5OGYyXHU5OGYzXHU5OGY0XHU5OGY1XHU5OGY2XHU5OGY3XHU5OGY4XHU5OGY5XHU5OGZhXHU5OGZiXHU5OGZjXHU5OGZkXHU5OGZlXHU5'@;
put 'OGZmXHU5OTAwXHU5OTAxXHU5OTAyXHU5OTAzXHU5OTA0XHU5OTA1XHU5OTA2XHU5OTA3XHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBk'@;
put 'XHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5'@;
put 'NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVmXHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZh'@;
put 'XHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM5XS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09YlsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzOV1bbV1dPTYxMTg0K20sUls2MTE4NCttXT1iWzIzOV1bbV0pO2ZvcihiWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1OTkw'@;
put 'Ylx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTkyOFx1'@;
put 'OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1OTk0'@;
put 'NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2MVx1'@;
put 'OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUy'@;
put 'OFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1Ylx1'@;
put 'OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1NzVj'@;
put 'Mlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0MF0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDBdW21dXT02MTQ0MCttLFJbNjE0NDArbV09YlsyNDBdW21dKTtmb3IoYlsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5OGNcdTk5'@;
put 'OGVcdTk5OWFcdTk5OWJcdTk5OWNcdTk5OWRcdTk5OWVcdTk5OWZcdTk5YTBcdTk5YTFcdTk5YTJcdTk5YTNcdTk5YTRcdTk5YTZcdTk5YTdcdTk5YTlcdTk5YWFcdTk5YWJcdTk5YWNcdTk5YWRcdTk5YWVcdTk5YWZcdTk5YjBcdTk5YjFcdTk5YjJcdTk5YjNcdTk5YjRcdTk5YjVcdTk5YjZc'@;
put 'dTk5YjdcdTk5YjhcdTk5YjlcdTk5YmFcdTk5YmJcdTk5YmNcdTk5YmRcdTk5YmVcdTk5YmZcdTk5YzBcdTk5YzFcdTk5YzJcdTk5YzNcdTk5YzRcdTk5YzVcdTk5YzZcdTk5YzdcdTk5YzhcdTk5YzlcdTk5Y2FcdTk5Y2JcdTk5Y2NcdTk5Y2RcdTk5Y2VcdTk5Y2ZcdTk5ZDBcdTk5ZDFcdTk5'@;
put 'ZDJcdTk5ZDNcdTk5ZDRcdTk5ZDVcdTk5ZDZcdTk5ZDdcdTk5ZDhcdWZmZmRcdTk5ZDlcdTk5ZGFcdTk5ZGJcdTk5ZGNcdTk5ZGRcdTk5ZGVcdTk5ZGZcdTk5ZTBcdTk5ZTFcdTk5ZTJcdTk5ZTNcdTk5ZTRcdTk5ZTVcdTk5ZTZcdTk5ZTdcdTk5ZThcdTk5ZTlcdTk5ZWFcdTk5ZWJcdTk5ZWNc'@;
put 'dTk5ZWRcdTk5ZWVcdTk5ZWZcdTk5ZjBcdTk5ZjFcdTk5ZjJcdTk5ZjNcdTk5ZjRcdTk5ZjVcdTk5ZjZcdTk5ZjdcdTk5ZjhcdTk5ZjlcdTc2MWJcdTc2M2NcdTc2MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2'@;
put 'NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNcdTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4Yjdc'@;
put 'dTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3'@;
put 'ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNcdTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODNcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9YlsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQxXVttXV09NjE2OTYrbSxSWzYxNjk2K21dPWJbMjQxXVttXSk7Zm9yKGJbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5OWZhXHU5OWZiXHU5OWZjXHU5OWZkXHU5OWZlXHU5OWZmXHU5YTAwXHU5YTAxXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTA1XHU5YTA2XHU5YTA3XHU5YTA4XHU5YTA5XHU5YTBhXHU5YTBiXHU5YTBjXHU5YTBkXHU5YTBlXHU5YTBmXHU5YTEwXHU5YTExXHU5YTEyXHU5YTEzXHU5YTE0'@;
put 'XHU5YTE1XHU5YTE2XHU5YTE3XHU5YTE4XHU5YTE5XHU5YTFhXHU5YTFiXHU5YTFjXHU5YTFkXHU5YTFlXHU5YTFmXHU5YTIwXHU5YTIxXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI1XHU5YTI2XHU5YTI3XHU5YTI4XHU5YTI5XHU5YTJhXHU5YTJiXHU5YTJjXHU5YTJkXHU5YTJlXHU5YTJmXHU5'@;
put 'YTMwXHU5YTMxXHU5YTMyXHU5YTMzXHU5YTM0XHU5YTM1XHU5YTM2XHU5YTM3XHU5YTM4XHVmZmZkXHU5YTM5XHU5YTNhXHU5YTNiXHU5YTNjXHU5YTNkXHU5YTNlXHU5YTNmXHU5YTQwXHU5YTQxXHU5YTQyXHU5YTQzXHU5YTQ0XHU5YTQ1XHU5YTQ2XHU5YTQ3XHU5YTQ4XHU5YTQ5XHU5YTRh'@;
put 'XHU5YTRiXHU5YTRjXHU5YTRkXHU5YTRlXHU5YTRmXHU5YTUwXHU5YTUxXHU5YTUyXHU5YTUzXHU5YTU0XHU5YTU1XHU5YTU2XHU5YTU3XHU5YTU4XHU5YTU5XHU5ODg5XHU5ODhjXHU5ODhkXHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5'@;
put 'OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5'@;
put 'XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4'@;
put 'NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPWJbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0Ml1bbV1dPTYxOTUyK20sUls2MTk1MittXT1iWzI0Ml1bbV0pO2ZvcihiWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5'@;
put 'NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1'@;
put 'OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFm'@;
put 'Mlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1'@;
put 'ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2Iw'@;
put 'M1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1'@;
put 'N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2Mx'@;
put 'Nlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDNdW21dXT02MjIwOCttLFJbNjIyMDgrbV09YlsyNDNdW21dKTtmb3IoYlsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliMDdcdTliMDlcdTliMGFcdTliMGJcdTliMGNcdTliMGRcdTliMGVcdTliMTBcdTliMTFcdTliMTJcdTliMTRcdTliMTVcdTliMTZcdTliMTdcdTliMThcdTliMTlcdTliMWFcdTliMWJcdTliMWNcdTliMWRcdTliMWVcdTliMjBcdTli'@;
put 'MjFcdTliMjJcdTliMjRcdTliMjVcdTliMjZcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmJcdTliMmNcdTliMmRcdTliMmVcdTliMzBcdTliMzFcdTliMzNcdTliMzRcdTliMzVcdTliMzZcdTliMzdcdTliMzhcdTliMzlcdTliM2FcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZc'@;
put 'dTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTVcdTliNTZcdTliNTdcdTliNThcdTliNTlcdTliNWFcdWZmZmRcdTliNWJcdTliNWNcdTliNWRcdTliNWVcdTliNWZcdTliNjBcdTliNjFcdTliNjJcdTliNjNcdTliNjRcdTliNjVcdTliNjZcdTliNjdcdTli'@;
put 'NjhcdTliNjlcdTliNmFcdTliNmJcdTliNmNcdTliNmRcdTliNmVcdTliNmZcdTliNzBcdTliNzFcdTliNzJcdTliNzNcdTliNzRcdTliNzVcdTliNzZcdTliNzdcdTliNzhcdTliNzlcdTliN2FcdTliN2JcdTdjMWZcdTdjMmFcdTdjMjZcdTdjMzhcdTdjNDFcdTdjNDBcdTgxZmVcdTgyMDFc'@;
put 'dTgyMDJcdTgyMDRcdTgxZWNcdTg4NDRcdTgyMjFcdTgyMjJcdTgyMjNcdTgyMmRcdTgyMmZcdTgyMjhcdTgyMmJcdTgyMzhcdTgyM2JcdTgyMzNcdTgyMzRcdTgyM2VcdTgyNDRcdTgyNDlcdTgyNGJcdTgyNGZcdTgyNWFcdTgyNWZcdTgyNjhcdTg4N2VcdTg4ODVcdTg4ODhcdTg4ZDhcdTg4'@;
put 'ZGZcdTg5NWVcdTdmOWRcdTdmOWZcdTdmYTdcdTdmYWZcdTdmYjBcdTdmYjJcdTdjN2NcdTY1NDlcdTdjOTFcdTdjOWRcdTdjOWNcdTdjOWVcdTdjYTJcdTdjYjJcdTdjYmNcdTdjYmRcdTdjYzFcdTdjYzdcdTdjY2NcdTdjY2RcdTdjYzhcdTdjYzVcdTdjZDdcdTdjZThcdTgyNmVcdTY2YThc'@;
put 'dTdmYmZcdTdmY2VcdTdmZDVcdTdmZTVcdTdmZTFcdTdmZTZcdTdmZTlcdTdmZWVcdTdmZjNcdTdjZjhcdTdkNzdcdTdkYTZcdTdkYWVcdTdlNDdcdTdlOWJcdTllYjhcdTllYjRcdThkNzNcdThkODRcdThkOTRcdThkOTFcdThkYjFcdThkNjdcdThkNmRcdThjNDdcdThjNDlcdTkxNGFcdTkx'@;
put 'NTBcdTkxNGVcdTkxNGZcdTkxNjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ0XVttXV09NjI0NjQrbSxSWzYyNDY0K21dPWJbMjQ0XVttXSk7Zm9yKGJbMjQ1XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdjXHU5YjdkXHU5YjdlXHU5YjdmXHU5YjgwXHU5YjgxXHU5YjgyXHU5YjgzXHU5Yjg0XHU5Yjg1XHU5Yjg2XHU5Yjg3XHU5Yjg4XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhjXHU5YjhkXHU5YjhlXHU5YjhmXHU5'@;
put 'YjkwXHU5YjkxXHU5YjkyXHU5YjkzXHU5Yjk0XHU5Yjk1XHU5Yjk2XHU5Yjk3XHU5Yjk4XHU5Yjk5XHU5YjlhXHU5YjliXHU5YjljXHU5YjlkXHU5YjllXHU5YjlmXHU5YmEwXHU5YmExXHU5YmEyXHU5YmEzXHU5YmE0XHU5YmE1XHU5YmE2XHU5YmE3XHU5YmE4XHU5YmE5XHU5YmFhXHU5YmFi'@;
put 'XHU5YmFjXHU5YmFkXHU5YmFlXHU5YmFmXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmIzXHU5YmI0XHU5YmI1XHU5YmI2XHU5YmI3XHU5YmI4XHU5YmI5XHU5YmJhXHVmZmZkXHU5YmJiXHU5YmJjXHU5YmJkXHU5YmJlXHU5YmJmXHU5YmMwXHU5YmMxXHU5YmMyXHU5YmMzXHU5YmM0XHU5YmM1XHU5'@;
put 'YmM2XHU5YmM3XHU5YmM4XHU5YmM5XHU5YmNhXHU5YmNiXHU5YmNjXHU5YmNkXHU5YmNlXHU5YmNmXHU5YmQwXHU5YmQxXHU5YmQyXHU5YmQzXHU5YmQ0XHU5YmQ1XHU5YmQ2XHU5YmQ3XHU5YmQ4XHU5YmQ5XHU5YmRhXHU5YmRiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdk'@;
put 'XHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4'@;
put 'ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNh'@;
put 'XHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4'@;
put 'Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0NV1bbV1dPTYyNzIwK20sUls2MjcyMCttXT1iWzI0NV1bbV0pO2ZvcihiWzI0Nl09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1'@;
put 'OWJlZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMw'@;
put 'OVx1OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1'@;
put 'OWMyNFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEz'@;
put 'ZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1'@;
put 'OTZiY1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5'@;
put 'NFx1OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1'@;
put 'OWNiY1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDZdW21dXT02Mjk3NittLFJbNjI5NzYrbV09YlsyNDZdW21d'@;
put 'KTtmb3IoYlsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTljM2NcdTljM2RcdTljM2VcdTljM2ZcdTljNDBcdTljNDFcdTljNDJcdTljNDNcdTljNDRcdTljNDVcdTljNDZcdTljNDdcdTljNDhcdTljNDlcdTljNGFcdTljNGJc'@;
put 'dTljNGNcdTljNGRcdTljNGVcdTljNGZcdTljNTBcdTljNTFcdTljNTJcdTljNTNcdTljNTRcdTljNTVcdTljNTZcdTljNTdcdTljNThcdTljNTlcdTljNWFcdTljNWJcdTljNWNcdTljNWRcdTljNWVcdTljNWZcdTljNjBcdTljNjFcdTljNjJcdTljNjNcdTljNjRcdTljNjVcdTljNjZcdTlj'@;
put 'NjdcdTljNjhcdTljNjlcdTljNmFcdTljNmJcdTljNmNcdTljNmRcdTljNmVcdTljNmZcdTljNzBcdTljNzFcdTljNzJcdTljNzNcdTljNzRcdTljNzVcdTljNzZcdTljNzdcdTljNzhcdTljNzlcdTljN2FcdWZmZmRcdTljN2JcdTljN2RcdTljN2VcdTljODBcdTljODNcdTljODRcdTljODlc'@;
put 'dTljOGFcdTljOGNcdTljOGZcdTljOTNcdTljOTZcdTljOTdcdTljOThcdTljOTlcdTljOWRcdTljYWFcdTljYWNcdTljYWZcdTljYjlcdTljYmVcdTljYmZcdTljYzBcdTljYzFcdTljYzJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2NcdTlj'@;
put 'Y2RcdTljY2VcdTljY2ZcdTljZDBcdTljZDNcdTljZDRcdTljZDVcdTljZDdcdTljZDhcdTljZDlcdTljZGNcdTljZGRcdTljZGZcdTljZTJcdTk3N2NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3YWZcdTk3YWJcdTk3YTNcdTk3YjJcdTk3YjRcdTlhYjFcdTlhYjBcdTlhYjdcdTllNThc'@;
put 'dTlhYjZcdTlhYmFcdTlhYmNcdTlhYzFcdTlhYzBcdTlhYzVcdTlhYzJcdTlhY2JcdTlhY2NcdTlhZDFcdTliNDVcdTliNDNcdTliNDdcdTliNDlcdTliNDhcdTliNGRcdTliNTFcdTk4ZThcdTk5MGRcdTk5MmVcdTk5NTVcdTk5NTRcdTlhZGZcdTlhZTFcdTlhZTZcdTlhZWZcdTlhZWJcdTlh'@;
put 'ZmJcdTlhZWRcdTlhZjlcdTliMDhcdTliMGZcdTliMTNcdTliMWZcdTliMjNcdTllYmRcdTllYmVcdTdlM2JcdTllODJcdTllODdcdTllODhcdTllOGJcdTllOTJcdTkzZDZcdTllOWRcdTllOWZcdTllZGJcdTllZGNcdTllZGRcdTllZTBcdTllZGZcdTllZTJcdTllZTlcdTllZTdcdTllZTVc'@;
put 'dTllZWFcdTllZWZcdTlmMjJcdTlmMmNcdTlmMmZcdTlmMzlcdTlmMzdcdTlmM2RcdTlmM2VcdTlmNDRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ3XVttXV09NjMyMzIrbSxSWzYzMjMy'@;
put 'K21dPWJbMjQ3XVttXSk7Zm9yKGJbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2UzXHU5Y2U0XHU5Y2U1XHU5Y2U2XHU5Y2U3XHU5Y2U4XHU5Y2U5XHU5Y2VhXHU5Y2ViXHU5Y2VjXHU5Y2VkXHU5Y2VlXHU5Y2VmXHU5Y2Yw'@;
put 'XHU5Y2YxXHU5Y2YyXHU5Y2YzXHU5Y2Y0XHU5Y2Y1XHU5Y2Y2XHU5Y2Y3XHU5Y2Y4XHU5Y2Y5XHU5Y2ZhXHU5Y2ZiXHU5Y2ZjXHU5Y2ZkXHU5Y2ZlXHU5Y2ZmXHU5ZDAwXHU5ZDAxXHU5ZDAyXHU5ZDAzXHU5ZDA0XHU5ZDA1XHU5ZDA2XHU5ZDA3XHU5ZDA4XHU5ZDA5XHU5ZDBhXHU5ZDBiXHU5'@;
put 'ZDBjXHU5ZDBkXHU5ZDBlXHU5ZDBmXHU5ZDEwXHU5ZDExXHU5ZDEyXHU5ZDEzXHU5ZDE0XHU5ZDE1XHU5ZDE2XHU5ZDE3XHU5ZDE4XHU5ZDE5XHU5ZDFhXHU5ZDFiXHU5ZDFjXHU5ZDFkXHU5ZDFlXHU5ZDFmXHU5ZDIwXHU5ZDIxXHVmZmZkXHU5ZDIyXHU5ZDIzXHU5ZDI0XHU5ZDI1XHU5ZDI2'@;
put 'XHU5ZDI3XHU5ZDI4XHU5ZDI5XHU5ZDJhXHU5ZDJiXHU5ZDJjXHU5ZDJkXHU5ZDJlXHU5ZDJmXHU5ZDMwXHU5ZDMxXHU5ZDMyXHU5ZDMzXHU5ZDM0XHU5ZDM1XHU5ZDM2XHU5ZDM3XHU5ZDM4XHU5ZDM5XHU5ZDNhXHU5ZDNiXHU5ZDNjXHU5ZDNkXHU5ZDNlXHU5ZDNmXHU5ZDQwXHU5ZDQxXHU5'@;
put 'ZDQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0OF1bbV1dPTYz'@;
put 'NDg4K20sUls2MzQ4OCttXT1iWzI0OF1bbV0pO2ZvcihiWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0'@;
put 'ZVx1OWQ0Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1'@;
put 'OWQ2YVx1OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4'@;
put 'NFx1OWQ4NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1'@;
put 'OWRhMFx1OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVb'@;
put 'YlsyNDldW21dXT02Mzc0NCttLFJbNjM3NDQrbV09YlsyNDldW21dKTtmb3IoYlsyNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTNcdTlkYTRcdTlkYTVcdTlkYTZcdTlkYTdcdTlkYThcdTlkYTlcdTlkYWFcdTlkYWJcdTlk'@;
put 'YWNcdTlkYWRcdTlkYWVcdTlkYWZcdTlkYjBcdTlkYjFcdTlkYjJcdTlkYjNcdTlkYjRcdTlkYjVcdTlkYjZcdTlkYjdcdTlkYjhcdTlkYjlcdTlkYmFcdTlkYmJcdTlkYmNcdTlkYmRcdTlkYmVcdTlkYmZcdTlkYzBcdTlkYzFcdTlkYzJcdTlkYzNcdTlkYzRcdTlkYzVcdTlkYzZcdTlkYzdc'@;
put 'dTlkYzhcdTlkYzlcdTlkY2FcdTlkY2JcdTlkY2NcdTlkY2RcdTlkY2VcdTlkY2ZcdTlkZDBcdTlkZDFcdTlkZDJcdTlkZDNcdTlkZDRcdTlkZDVcdTlkZDZcdTlkZDdcdTlkZDhcdTlkZDlcdTlkZGFcdTlkZGJcdTlkZGNcdTlkZGRcdTlkZGVcdTlkZGZcdTlkZTBcdTlkZTFcdWZmZmRcdTlk'@;
put 'ZTJcdTlkZTNcdTlkZTRcdTlkZTVcdTlkZTZcdTlkZTdcdTlkZThcdTlkZTlcdTlkZWFcdTlkZWJcdTlkZWNcdTlkZWRcdTlkZWVcdTlkZWZcdTlkZjBcdTlkZjFcdTlkZjJcdTlkZjNcdTlkZjRcdTlkZjVcdTlkZjZcdTlkZjdcdTlkZjhcdTlkZjlcdTlkZmFcdTlkZmJcdTlkZmNcdTlkZmRc'@;
put 'dTlkZmVcdTlkZmZcdTllMDBcdTllMDFcdTllMDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI1MF1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGVlW2JbMjUwXVttXV09NjRlMyttLFJbNjRlMyttXT1iWzI1MF1bbV0pO2ZvcihiWzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWUwM1x1OWUwNFx1OWUwNVx1OWUwNlx1OWUwN1x1OWUwOFx1OWUwOVx1OWUw'@;
put 'YVx1OWUwYlx1OWUwY1x1OWUwZFx1OWUwZVx1OWUwZlx1OWUxMFx1OWUxMVx1OWUxMlx1OWUxM1x1OWUxNFx1OWUxNVx1OWUxNlx1OWUxN1x1OWUxOFx1OWUxOVx1OWUxYVx1OWUxYlx1OWUxY1x1OWUxZFx1OWUxZVx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1'@;
put 'OWU0MFx1OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NFx1OWU3NVx1OWU3Nlx1OWU3N1x1OWU3OFx1OWU3OVx1OWU3YVx1OWU3Ylx1OWU3Y1x1OWU3ZFx1OWU4'@;
put 'MFx1ZmZmZFx1OWU4MVx1OWU4M1x1OWU4NFx1OWU4NVx1OWU4Nlx1OWU4OVx1OWU4YVx1OWU4Y1x1OWU4ZFx1OWU4ZVx1OWU4Zlx1OWU5MFx1OWU5MVx1OWU5NFx1OWU5NVx1OWU5Nlx1OWU5N1x1OWU5OFx1OWU5OVx1OWU5YVx1OWU5Ylx1OWU5Y1x1OWU5ZVx1OWVhMFx1OWVhMVx1OWVhMlx1'@;
put 'OWVhM1x1OWVhNFx1OWVhNVx1OWVhN1x1OWVhOFx1OWVhOVx1OWVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI1MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjUx'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNTFdW21dXT02NDI1NittLFJbNjQyNTYrbV09YlsyNTFdW21dKTtmb3IoYlsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTll'@;
put 'YjBcdTllYjFcdTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdc'@;
put 'dTllZDlcdTllZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhcdTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlm'@;
put 'MDNcdTlmMDRcdTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlmMWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZc'@;
put 'dTlmMjdcdTlmMjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNTJdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT1iWzI1Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjUyXVttXV09NjQ1MTIrbSxSWzY0NTEyK21dPWJbMjUyXVttXSk7Zm9yKGJbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjMyXHU5ZjMzXHU5ZjM0XHU5'@;
put 'ZjM1XHU5ZjM2XHU5ZjM4XHU5ZjNhXHU5ZjNjXHU5ZjNmXHU5ZjQwXHU5ZjQxXHU5ZjQyXHU5ZjQzXHU5ZjQ1XHU5ZjQ2XHU5ZjQ3XHU5ZjQ4XHU5ZjQ5XHU5ZjRhXHU5ZjRiXHU5ZjRjXHU5ZjRkXHU5ZjRlXHU5ZjRmXHU5ZjUyXHU5ZjUzXHU5ZjU0XHU5ZjU1XHU5ZjU2XHU5ZjU3XHU5ZjU4'@;
put 'XHU5ZjU5XHU5ZjVhXHU5ZjViXHU5ZjVjXHU5ZjVkXHU5ZjVlXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjYyXHU5ZjYzXHU5ZjY0XHU5ZjY1XHU5ZjY2XHU5ZjY3XHU5ZjY4XHU5ZjY5XHU5ZjZhXHU5ZjZiXHU5ZjZjXHU5ZjZkXHU5ZjZlXHU5ZjZmXHU5ZjcwXHU5ZjcxXHU5ZjcyXHU5ZjczXHU5'@;
put 'Zjc0XHU5Zjc1XHU5Zjc2XHU5Zjc3XHU5Zjc4XHVmZmZkXHU5Zjc5XHU5ZjdhXHU5ZjdiXHU5ZjdjXHU5ZjdkXHU5ZjdlXHU5ZjgxXHU5ZjgyXHU5ZjhkXHU5ZjhlXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5ZjkzXHU5Zjk0XHU5Zjk1XHU5Zjk2XHU5Zjk3XHU5Zjk4XHU5ZjljXHU5Zjlk'@;
put 'XHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE0XHU5ZmE1XHVmOTJjXHVmOTc5XHVmOTk1XHVmOWU3XHVmOWYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjUz'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNTNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI1M11bbV1dPTY0NzY4K20sUls2NDc2OCttXT1iWzI1M11bbV0pO2ZvcihiWzI1NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmEwY1x1'@;
put 'ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT1iWzI1NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjU0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNTRdW21dXT02NTAyNCttLFJbNjUwMjQrbV09YlsyNTRdW21dKTtyZXR1cm57ZW5jOmVlLGRlYzpSfX0oKSxTZVs5NDldPWZ1bmN0aW9uKCl7dmFyIG0sUj1bXSxlZT17fSxi'@;
put 'PVtdO2ZvcihiWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJD'@;
put 'REVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzBdW21dXT0wK20sUlswK21dPWJbMF1bbV0pO2ZvcihiWzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1YWMwMlx1YWMwM1x1YWMwNVx1YWMwNlx1YWMwYlx1YWMwY1x1YWMwZFx1YWMwZVx1YWMwZlx1YWMxOFx1YWMxZVx1YWMxZlx1YWMyMVx1YWMyMlx1YWMyM1x1YWMyNVx1YWMyNlx1YWMyN1x1YWMyOFx1YWMyOVx1YWMyYVx1YWMyYlx1YWMyZVx1YWMzMlx1YWMzM1x1'@;
put 'YWMzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWMzNVx1YWMzNlx1YWMzN1x1YWMzYVx1YWMzYlx1YWMzZFx1YWMzZVx1YWMzZlx1YWM0MVx1YWM0Mlx1YWM0M1x1YWM0NFx1YWM0NVx1YWM0Nlx1YWM0N1x1YWM0OFx1YWM0OVx1YWM0YVx1YWM0Y1x1YWM0ZVx1YWM0'@;
put 'Zlx1YWM1MFx1YWM1MVx1YWM1Mlx1YWM1M1x1YWM1NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWM1Nlx1YWM1N1x1YWM1OVx1YWM1YVx1YWM1Ylx1YWM1ZFx1YWM1ZVx1YWM1Zlx1YWM2MFx1YWM2MVx1YWM2Mlx1YWM2M1x1YWM2NFx1YWM2NVx1YWM2Nlx1YWM2N1x1'@;
put 'YWM2OFx1YWM2OVx1YWM2YVx1YWM2Ylx1YWM2Y1x1YWM2ZFx1YWM2ZVx1YWM2Zlx1YWM3Mlx1YWM3M1x1YWM3NVx1YWM3Nlx1YWM3OVx1YWM3Ylx1YWM3Y1x1YWM3ZFx1YWM3ZVx1YWM3Zlx1YWM4Mlx1YWM4N1x1YWM4OFx1YWM4ZFx1YWM4ZVx1YWM4Zlx1YWM5MVx1YWM5Mlx1YWM5M1x1YWM5'@;
put 'NVx1YWM5Nlx1YWM5N1x1YWM5OFx1YWM5OVx1YWM5YVx1YWM5Ylx1YWM5ZVx1YWNhMlx1YWNhM1x1YWNhNFx1YWNhNVx1YWNhNlx1YWNhN1x1YWNhYlx1YWNhZFx1YWNhZVx1YWNiMVx1YWNiMlx1YWNiM1x1YWNiNFx1YWNiNVx1YWNiNlx1YWNiN1x1YWNiYVx1YWNiZVx1YWNiZlx1YWNjMFx1'@;
put 'YWNjMlx1YWNjM1x1YWNjNVx1YWNjNlx1YWNjN1x1YWNjOVx1YWNjYVx1YWNjYlx1YWNjZFx1YWNjZVx1YWNjZlx1YWNkMFx1YWNkMVx1YWNkMlx1YWNkM1x1YWNkNFx1YWNkNlx1YWNkOFx1YWNkOVx1YWNkYVx1YWNkYlx1YWNkY1x1YWNkZFx1YWNkZVx1YWNkZlx1YWNlMlx1YWNlM1x1YWNl'@;
put 'NVx1YWNlNlx1YWNlOVx1YWNlYlx1YWNlZFx1YWNlZVx1YWNmMlx1YWNmNFx1YWNmN1x1YWNmOFx1YWNmOVx1YWNmYVx1YWNmYlx1YWNmZVx1YWNmZlx1YWQwMVx1YWQwMlx1YWQwM1x1YWQwNVx1YWQwN1x1YWQwOFx1YWQwOVx1YWQwYVx1YWQwYlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxM1x1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEyOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTI5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMjldW21dXT0zMzAyNCttLFJbMzMwMjQrbV09YlsxMjldW21dKTtmb3IoYlsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMTRcdWFkMTVcdWFkMTZcdWFkMTdcdWFkMTlcdWFkMWFcdWFkMWJcdWFkMWRcdWFkMWVcdWFkMWZcdWFkMjFcdWFkMjJcdWFkMjNcdWFkMjRcdWFkMjVcdWFkMjZcdWFkMjdcdWFkMjhcdWFkMmFcdWFkMmJcdWFkMmVcdWFkMmZcdWFkMzBc'@;
put 'dWFkMzFcdWFkMzJcdWFkMzNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2RcdWFkM2VcdWFkM2ZcdWFkNDBcdWFkNDFcdWFkNDJcdWFkNDNcdWFkNDZcdWFkNDhcdWFkNGFcdWFkNGJcdWFkNGNcdWFkNGRcdWFk'@;
put 'NGVcdWFkNGZcdWFkNTFcdWFkNTJcdWFkNTNcdWFkNTVcdWFkNTZcdWFkNTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFkNTlcdWFkNWFcdWFkNWJcdWFkNWNcdWFkNWRcdWFkNWVcdWFkNWZcdWFkNjBcdWFkNjJcdWFkNjRcdWFkNjVcdWFkNjZcdWFkNjdcdWFkNjhc'@;
put 'dWFkNjlcdWFkNmFcdWFkNmJcdWFkNmVcdWFkNmZcdWFkNzFcdWFkNzJcdWFkNzdcdWFkNzhcdWFkNzlcdWFkN2FcdWFkN2VcdWFkODBcdWFkODNcdWFkODRcdWFkODVcdWFkODZcdWFkODdcdWFkOGFcdWFkOGJcdWFkOGRcdWFkOGVcdWFkOGZcdWFkOTFcdWFkOTJcdWFkOTNcdWFkOTRcdWFk'@;
put 'OTVcdWFkOTZcdWFkOTdcdWFkOThcdWFkOTlcdWFkOWFcdWFkOWJcdWFkOWVcdWFkOWZcdWFkYTBcdWFkYTFcdWFkYTJcdWFkYTNcdWFkYTVcdWFkYTZcdWFkYTdcdWFkYThcdWFkYTlcdWFkYWFcdWFkYWJcdWFkYWNcdWFkYWRcdWFkYWVcdWFkYWZcdWFkYjBcdWFkYjFcdWFkYjJcdWFkYjNc'@;
put 'dWFkYjRcdWFkYjVcdWFkYjZcdWFkYjhcdWFkYjlcdWFkYmFcdWFkYmJcdWFkYmNcdWFkYmRcdWFkYmVcdWFkYmZcdWFkYzJcdWFkYzNcdWFkYzVcdWFkYzZcdWFkYzdcdWFkYzlcdWFkY2FcdWFkY2JcdWFkY2NcdWFkY2RcdWFkY2VcdWFkY2ZcdWFkZDJcdWFkZDRcdWFkZDVcdWFkZDZcdWFk'@;
put 'ZDdcdWFkZDhcdWFkZDlcdWFkZGFcdWFkZGJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTVcdWFkZTZcdWFkZTdcdWFkZThcdWFkZTlcdWFkZWFcdWFkZWJcdWFkZWNcdWFkZWRcdWFkZWVcdWFkZWZcdWFkZjBcdWFkZjFcdWFkZjJcdWFkZjNcdWFkZjRcdWFkZjVc'@;
put 'dWFkZjZcdWFkZjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTMwXVttXV09MzMyODArbSxSWzMzMjgwK21dPWJbMTMwXVttXSk7Zm9yKGJbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3'@;
put 'XHVhZTE4XHVhZTE5XHVhZTFhXHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVh'@;
put 'ZTJkXHVhZTJlXHVhZTJmXHVhZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUy'@;
put 'XHVhZTUzXHVhZTU1XHVhZTU3XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVh'@;
put 'ZTdmXHVhZTgwXHVhZTgxXHVhZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlk'@;
put 'XHVhZTllXHVhZTlmXHVhZWEwXHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVh'@;
put 'ZWI5XHVhZWJhXHVhZWJiXHVhZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUx'@;
put 'XHVhZWUyXHVhZWUzXHVhZWU0XHVhZWU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTMxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzMV1bbV1dPTMzNTM2K20sUlszMzUzNittXT1iWzEzMV1bbV0pO2ZvcihiWzEzMl09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZVx1YWVlZlx1YWVmMFx1YWVmMVx1YWVmMlx1YWVmM1x1YWVmNVx1YWVmNlx1YWVmN1x1YWVmOVx1YWVmYVx1YWVmYlx1YWVmZFx1YWVm'@;
put 'ZVx1YWVmZlx1YWYwMFx1YWYwMVx1YWYwMlx1YWYwM1x1YWYwNFx1YWYwNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYwNlx1YWYwOVx1YWYwYVx1YWYwYlx1YWYwY1x1YWYwZVx1YWYwZlx1YWYxMVx1YWYxMlx1YWYxM1x1YWYxNFx1YWYxNVx1YWYxNlx1YWYxN1x1'@;
put 'YWYxOFx1YWYxOVx1YWYxYVx1YWYxYlx1YWYxY1x1YWYxZFx1YWYxZVx1YWYxZlx1YWYyMFx1YWYyMVx1YWYyMlx1YWYyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YWYyNFx1YWYyNVx1YWYyNlx1YWYyN1x1YWYyOFx1YWYyOVx1YWYyYVx1YWYyYlx1YWYyZVx1YWYy'@;
put 'Zlx1YWYzMVx1YWYzM1x1YWYzNVx1YWYzNlx1YWYzN1x1YWYzOFx1YWYzOVx1YWYzYVx1YWYzYlx1YWYzZVx1YWY0MFx1YWY0NFx1YWY0NVx1YWY0Nlx1YWY0N1x1YWY0YVx1YWY0Ylx1YWY0Y1x1YWY0ZFx1YWY0ZVx1YWY0Zlx1YWY1MVx1YWY1Mlx1YWY1M1x1YWY1NFx1YWY1NVx1YWY1Nlx1'@;
put 'YWY1N1x1YWY1OFx1YWY1OVx1YWY1YVx1YWY1Ylx1YWY1ZVx1YWY1Zlx1YWY2MFx1YWY2MVx1YWY2Mlx1YWY2M1x1YWY2Nlx1YWY2N1x1YWY2OFx1YWY2OVx1YWY2YVx1YWY2Ylx1YWY2Y1x1YWY2ZFx1YWY2ZVx1YWY2Zlx1YWY3MFx1YWY3MVx1YWY3Mlx1YWY3M1x1YWY3NFx1YWY3NVx1YWY3'@;
put 'Nlx1YWY3N1x1YWY3OFx1YWY3YVx1YWY3Ylx1YWY3Y1x1YWY3ZFx1YWY3ZVx1YWY3Zlx1YWY4MVx1YWY4Mlx1YWY4M1x1YWY4NVx1YWY4Nlx1YWY4N1x1YWY4OVx1YWY4YVx1YWY4Ylx1YWY4Y1x1YWY4ZFx1YWY4ZVx1YWY4Zlx1YWY5Mlx1YWY5M1x1YWY5NFx1YWY5Nlx1YWY5N1x1YWY5OFx1'@;
put 'YWY5OVx1YWY5YVx1YWY5Ylx1YWY5ZFx1YWY5ZVx1YWY5Zlx1YWZhMFx1YWZhMVx1YWZhMlx1YWZhM1x1YWZhNFx1YWZhNVx1YWZhNlx1YWZhN1x1YWZhOFx1YWZhOVx1YWZhYVx1YWZhYlx1YWZhY1x1YWZhZFx1YWZhZVx1YWZhZlx1YWZiMFx1YWZiMVx1YWZiMlx1YWZiM1x1YWZiNFx1YWZi'@;
put 'NVx1YWZiNlx1YWZiN1x1YWZiYVx1YWZiYlx1YWZiZFx1YWZiZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzMl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTMyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzJdW21dXT0zMzc5MittLFJbMzM3OTIrbV09YlsxMzJdW21dKTtmb3IoYlsx'@;
put 'MzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmYmZcdWFmYzFcdWFmYzJcdWFmYzNcdWFmYzRcdWFmYzVcdWFmYzZcdWFmY2FcdWFmY2NcdWFmY2ZcdWFmZDBcdWFmZDFcdWFmZDJcdWFmZDNcdWFmZDVcdWFmZDZcdWFm'@;
put 'ZDdcdWFmZDhcdWFmZDlcdWFmZGFcdWFmZGJcdWFmZGRcdWFmZGVcdWFmZGZcdWFmZTBcdWFmZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWFmZTJcdWFmZTNcdWFmZTRcdWFmZTVcdWFmZTZcdWFmZTdcdWFmZWFcdWFmZWJcdWFmZWNcdWFmZWRcdWFmZWVcdWFmZWZc'@;
put 'dWFmZjJcdWFmZjNcdWFmZjVcdWFmZjZcdWFmZjdcdWFmZjlcdWFmZmFcdWFmZmJcdWFmZmNcdWFmZmRcdWFmZmVcdWFmZmZcdWIwMDJcdWIwMDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIwMDVcdWIwMDZcdWIwMDdcdWIwMDhcdWIwMDlcdWIwMGFcdWIwMGJcdWIw'@;
put 'MGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTVcdWIwMTZcdWIwMTdcdWIwMThcdWIwMTlcdWIwMWFcdWIwMWJcdWIwMWVcdWIwMWZcdWIwMjBcdWIwMjFcdWIwMjJcdWIwMjNcdWIwMjRcdWIwMjVcdWIwMjZcdWIwMjdcdWIwMjlcdWIwMmFcdWIwMmJcdWIwMmNcdWIwMmRc'@;
put 'dWIwMmVcdWIwMmZcdWIwMzBcdWIwMzFcdWIwMzJcdWIwMzNcdWIwMzRcdWIwMzVcdWIwMzZcdWIwMzdcdWIwMzhcdWIwMzlcdWIwM2FcdWIwM2JcdWIwM2NcdWIwM2RcdWIwM2VcdWIwM2ZcdWIwNDBcdWIwNDFcdWIwNDJcdWIwNDNcdWIwNDZcdWIwNDdcdWIwNDlcdWIwNGJcdWIwNGRcdWIw'@;
put 'NGZcdWIwNTBcdWIwNTFcdWIwNTJcdWIwNTZcdWIwNThcdWIwNWFcdWIwNWJcdWIwNWNcdWIwNWVcdWIwNWZcdWIwNjBcdWIwNjFcdWIwNjJcdWIwNjNcdWIwNjRcdWIwNjVcdWIwNjZcdWIwNjdcdWIwNjhcdWIwNjlcdWIwNmFcdWIwNmJcdWIwNmNcdWIwNmRcdWIwNmVcdWIwNmZcdWIwNzBc'@;
put 'dWIwNzFcdWIwNzJcdWIwNzNcdWIwNzRcdWIwNzVcdWIwNzZcdWIwNzdcdWIwNzhcdWIwNzlcdWIwN2FcdWIwN2JcdWIwN2VcdWIwN2ZcdWIwODFcdWIwODJcdWIwODNcdWIwODVcdWIwODZcdWIwODdcdWIwODhcdWIwODlcdWIwOGFcdWIwOGJcdWIwOGVcdWIwOTBcdWIwOTJcdWIwOTNcdWIw'@;
put 'OTRcdWIwOTVcdWIwOTZcdWIwOTdcdWIwOWJcdWIwOWRcdWIwOWVcdWIwYTNcdWIwYTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzM11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTMzXVttXV09MzQwNDgrbSxSWzM0MDQ4K21dPWJbMTMz'@;
put 'XVttXSk7Zm9yKGJbMTM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHVi'@;
put 'MGMwXHViMGMxXHViMGMyXHViMGMzXHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRl'@;
put 'XHViMGRmXHViMGUxXHViMGUyXHViMGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHVi'@;
put 'MGY2XHViMGY3XHViMGY4XHViMGY5XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFh'@;
put 'XHViMTFlXHViMTFmXHViMTIwXHViMTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHVi'@;
put 'MTQ2XHViMTQ3XHViMTQ5XHViMTRhXHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5'@;
put 'XHViMTZhXHViMTZiXHViMTZjXHViMTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHVi'@;
put 'MThlXHViMThmXHViMTkwXHViMTkxXHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTM0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzEzNF1bbV1dPTM0MzA0K20sUlsz'@;
put 'NDMwNCttXT1iWzEzNF1bbV0pO2ZvcihiWzEzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjE5ZVx1YjE5Zlx1YjFhMFx1YjFhMVx1YjFhMlx1YjFhM1x1YjFhNFx1YjFhNVx1YjFhNlx1YjFhN1x1YjFhOVx1YjFhYVx1'@;
put 'YjFhYlx1YjFhY1x1YjFhZFx1YjFhZVx1YjFhZlx1YjFiMFx1YjFiMVx1YjFiMlx1YjFiM1x1YjFiNFx1YjFiNVx1YjFiNlx1YjFiN1x1YjFiOFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFiOVx1YjFiYVx1YjFiYlx1YjFiY1x1YjFiZFx1YjFiZVx1YjFiZlx1YjFj'@;
put 'MFx1YjFjMVx1YjFjMlx1YjFjM1x1YjFjNFx1YjFjNVx1YjFjNlx1YjFjN1x1YjFjOFx1YjFjOVx1YjFjYVx1YjFjYlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjFkNlx1YjFkN1x1YjFkOFx1'@;
put 'YjFkOVx1YjFkYVx1YjFkYlx1YjFkZVx1YjFlMFx1YjFlMVx1YjFlMlx1YjFlM1x1YjFlNFx1YjFlNVx1YjFlNlx1YjFlN1x1YjFlYVx1YjFlYlx1YjFlZFx1YjFlZVx1YjFlZlx1YjFmMVx1YjFmMlx1YjFmM1x1YjFmNFx1YjFmNVx1YjFmNlx1YjFmN1x1YjFmOFx1YjFmYVx1YjFmY1x1YjFm'@;
put 'ZVx1YjFmZlx1YjIwMFx1YjIwMVx1YjIwMlx1YjIwM1x1YjIwNlx1YjIwN1x1YjIwOVx1YjIwYVx1YjIwZFx1YjIwZVx1YjIwZlx1YjIxMFx1YjIxMVx1YjIxMlx1YjIxM1x1YjIxNlx1YjIxOFx1YjIxYVx1YjIxYlx1YjIxY1x1YjIxZFx1YjIxZVx1YjIxZlx1YjIyMVx1YjIyMlx1YjIyM1x1'@;
put 'YjIyNFx1YjIyNVx1YjIyNlx1YjIyN1x1YjIyOFx1YjIyOVx1YjIyYVx1YjIyYlx1YjIyY1x1YjIyZFx1YjIyZVx1YjIyZlx1YjIzMFx1YjIzMVx1YjIzMlx1YjIzM1x1YjIzNVx1YjIzNlx1YjIzN1x1YjIzOFx1YjIzOVx1YjIzYVx1YjIzYlx1YjIzZFx1YjIzZVx1YjIzZlx1YjI0MFx1YjI0'@;
put 'MVx1YjI0Mlx1YjI0M1x1YjI0NFx1YjI0NVx1YjI0Nlx1YjI0N1x1YjI0OFx1YjI0OVx1YjI0YVx1YjI0Ylx1YjI0Y1x1YjI0ZFx1YjI0ZVx1YjI0Zlx1YjI1MFx1YjI1MVx1YjI1Mlx1YjI1M1x1YjI1NFx1YjI1NVx1YjI1Nlx1YjI1N1x1YjI1OVx1YjI1YVx1YjI1Ylx1YjI1ZFx1YjI1ZVx1'@;
put 'YjI1Zlx1YjI2MVx1YjI2Mlx1YjI2M1x1YjI2NFx1YjI2NVx1YjI2Nlx1YjI2N1x1YjI2YVx1YjI2Ylx1YjI2Y1x1YjI2ZFx1YjI2ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzNV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTM1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzVdW21d'@;
put 'XT0zNDU2MCttLFJbMzQ1NjArbV09YlsxMzVdW21dKTtmb3IoYlsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyNmZcdWIyNzBcdWIyNzFcdWIyNzJcdWIyNzNcdWIyNzZcdWIyNzdcdWIyNzhcdWIyNzlcdWIyN2Fc'@;
put 'dWIyN2JcdWIyN2RcdWIyN2VcdWIyN2ZcdWIyODBcdWIyODFcdWIyODJcdWIyODNcdWIyODZcdWIyODdcdWIyODhcdWIyOGFcdWIyOGJcdWIyOGNcdWIyOGRcdWIyOGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyOGZcdWIyOTJcdWIyOTNcdWIyOTVcdWIyOTZcdWIy'@;
put 'OTdcdWIyOWJcdWIyOWNcdWIyOWRcdWIyOWVcdWIyOWZcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWIyYjhc'@;
put 'dWIyYjlcdWIyYmFcdWIyYmJcdWIyYmNcdWIyYmRcdWIyYmVcdWIyYmZcdWIyYzBcdWIyYzFcdWIyYzJcdWIyYzNcdWIyYzRcdWIyYzVcdWIyYzZcdWIyYzdcdWIyY2FcdWIyY2JcdWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDNcdWIyZDRcdWIyZDVcdWIyZDZcdWIyZDdcdWIyZGFcdWIy'@;
put 'ZGNcdWIyZGVcdWIyZGZcdWIyZTBcdWIyZTFcdWIyZTNcdWIyZTdcdWIyZTlcdWIyZWFcdWIyZjBcdWIyZjFcdWIyZjJcdWIyZjZcdWIyZmNcdWIyZmRcdWIyZmVcdWIzMDJcdWIzMDNcdWIzMDVcdWIzMDZcdWIzMDdcdWIzMDlcdWIzMGFcdWIzMGJcdWIzMGNcdWIzMGRcdWIzMGVcdWIzMGZc'@;
put 'dWIzMTJcdWIzMTZcdWIzMTdcdWIzMThcdWIzMTlcdWIzMWFcdWIzMWJcdWIzMWRcdWIzMWVcdWIzMWZcdWIzMjBcdWIzMjFcdWIzMjJcdWIzMjNcdWIzMjRcdWIzMjVcdWIzMjZcdWIzMjdcdWIzMjhcdWIzMjlcdWIzMmFcdWIzMmJcdWIzMmNcdWIzMmRcdWIzMmVcdWIzMmZcdWIzMzBcdWIz'@;
put 'MzFcdWIzMzJcdWIzMzNcdWIzMzRcdWIzMzVcdWIzMzZcdWIzMzdcdWIzMzhcdWIzMzlcdWIzM2FcdWIzM2JcdWIzM2NcdWIzM2RcdWIzM2VcdWIzM2ZcdWIzNDBcdWIzNDFcdWIzNDJcdWIzNDNcdWIzNDRcdWIzNDVcdWIzNDZcdWIzNDdcdWIzNDhcdWIzNDlcdWIzNGFcdWIzNGJcdWIzNGNc'@;
put 'dWIzNGRcdWIzNGVcdWIzNGZcdWIzNTBcdWIzNTFcdWIzNTJcdWIzNTNcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzEzNl1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGVlW2JbMTM2XVttXV09MzQ4MTYrbSxSWzM0ODE2K21dPWJbMTM2XVttXSk7Zm9yKGJbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzcz'@;
put 'XHViMzc1XHViMzc2XHViMzc3XHViMzc5XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHVi'@;
put 'MzkyXHViMzkzXHViMzk1XHViMzk2XHViMzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHViM2FlXHViM2FmXHViM2IwXHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHVi'@;
put 'M2NkXHViM2NmXHViM2QxXHViM2QyXHViM2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2Yz'@;
put 'XHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHVi'@;
put 'NDExXHViNDEyXHViNDEzXHViNDE0XHViNDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMy'@;
put 'XHViNDMzXHViNDM1XHViNDM2XHViNDM3XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTM3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxMzddW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihlZVtiWzEzN11bbV1dPTM1MDcyK20sUlszNTA3MittXT1iWzEzN11bbV0pO2ZvcihiWzEzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ0NVx1YjQ0Nlx1YjQ0N1x1YjQ0OFx1YjQ0OVx1YjQ0'@;
put 'YVx1YjQ0Ylx1YjQ0Y1x1YjQ0ZFx1YjQ0ZVx1YjQ0Zlx1YjQ1Mlx1YjQ1M1x1YjQ1NVx1YjQ1Nlx1YjQ1N1x1YjQ1OVx1YjQ1YVx1YjQ1Ylx1YjQ1Y1x1YjQ1ZFx1YjQ1ZVx1YjQ1Zlx1YjQ2Mlx1YjQ2NFx1YjQ2Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ2N1x1'@;
put 'YjQ2OFx1YjQ2OVx1YjQ2YVx1YjQ2Ylx1YjQ2ZFx1YjQ2ZVx1YjQ2Zlx1YjQ3MFx1YjQ3MVx1YjQ3Mlx1YjQ3M1x1YjQ3NFx1YjQ3NVx1YjQ3Nlx1YjQ3N1x1YjQ3OFx1YjQ3OVx1YjQ3YVx1YjQ3Ylx1YjQ3Y1x1YjQ3ZFx1YjQ3ZVx1YjQ3Zlx1YjQ4MVx1YjQ4Mlx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjQ4M1x1YjQ4NFx1YjQ4NVx1YjQ4Nlx1YjQ4N1x1YjQ4OVx1YjQ4YVx1YjQ4Ylx1YjQ4Y1x1YjQ4ZFx1YjQ4ZVx1YjQ4Zlx1YjQ5MFx1YjQ5MVx1YjQ5Mlx1YjQ5M1x1YjQ5NFx1YjQ5NVx1YjQ5Nlx1YjQ5N1x1YjQ5OFx1YjQ5OVx1YjQ5YVx1YjQ5Ylx1'@;
put 'YjQ5Y1x1YjQ5ZVx1YjQ5Zlx1YjRhMFx1YjRhMVx1YjRhMlx1YjRhM1x1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZFx1YjRhZVx1YjRhZlx1YjRiMFx1YjRiMVx1YjRiMlx1YjRiM1x1YjRiNFx1YjRiNlx1YjRiOFx1YjRiYVx1YjRiYlx1YjRiY1x1YjRiZFx1YjRi'@;
put 'ZVx1YjRiZlx1YjRjMVx1YjRjMlx1YjRjM1x1YjRjNVx1YjRjNlx1YjRjN1x1YjRjOVx1YjRjYVx1YjRjYlx1YjRjY1x1YjRjZFx1YjRjZVx1YjRjZlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNlx1YjRkN1x1YjRkOFx1YjRkOVx1YjRkYVx1YjRkYlx1YjRkZVx1YjRkZlx1YjRlMVx1'@;
put 'YjRlMlx1YjRlNVx1YjRlN1x1YjRlOFx1YjRlOVx1YjRlYVx1YjRlYlx1YjRlZVx1YjRmMFx1YjRmMlx1YjRmM1x1YjRmNFx1YjRmNVx1YjRmNlx1YjRmN1x1YjRmOVx1YjRmYVx1YjRmYlx1YjRmY1x1YjRmZFx1YjRmZVx1YjRmZlx1YjUwMFx1YjUwMVx1YjUwMlx1YjUwM1x1YjUwNFx1YjUw'@;
put 'NVx1YjUwNlx1YjUwN1x1YjUwOFx1YjUwOVx1YjUwYVx1YjUwYlx1YjUwY1x1YjUwZFx1YjUwZVx1YjUwZlx1YjUxMFx1YjUxMVx1YjUxMlx1YjUxM1x1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzEzOF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PWJbMTM4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxMzhdW21dXT0zNTMyOCttLFJbMzUzMjgrbV09YlsxMzhdW21dKTtmb3IoYlsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1MWVcdWI1MWZcdWI1MjBcdWI1'@;
put 'MjFcdWI1MjJcdWI1MjNcdWI1MjZcdWI1MmJcdWI1MmNcdWI1MmRcdWI1MmVcdWI1MmZcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzlcdWI1M2FcdWI1M2JcdWI1M2NcdWI1M2RcdWI1M2VcdWI1M2ZcdWI1NDJcdWI1NDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWI1NDdcdWI1NDhcdWI1NDlcdWI1NGFcdWI1NGVcdWI1NGZcdWI1NTFcdWI1NTJcdWI1NTNcdWI1NTVcdWI1NTZcdWI1NTdcdWI1NThcdWI1NTlcdWI1NWFcdWI1NWJcdWI1NWVcdWI1NjJcdWI1NjNcdWI1NjRcdWI1NjVcdWI1NjZcdWI1NjdcdWI1NjhcdWI1NjlcdWI1NmFcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI1NmJcdWI1NmNcdWI1NmRcdWI1NmVcdWI1NmZcdWI1NzBcdWI1NzFcdWI1NzJcdWI1NzNcdWI1NzRcdWI1NzVcdWI1NzZcdWI1NzdcdWI1NzhcdWI1NzlcdWI1N2FcdWI1N2JcdWI1N2NcdWI1N2RcdWI1N2VcdWI1N2ZcdWI1ODBc'@;
put 'dWI1ODFcdWI1ODJcdWI1ODNcdWI1ODRcdWI1ODVcdWI1ODZcdWI1ODdcdWI1ODhcdWI1ODlcdWI1OGFcdWI1OGJcdWI1OGNcdWI1OGRcdWI1OGVcdWI1OGZcdWI1OTBcdWI1OTFcdWI1OTJcdWI1OTNcdWI1OTRcdWI1OTVcdWI1OTZcdWI1OTdcdWI1OThcdWI1OTlcdWI1OWFcdWI1OWJcdWI1'@;
put 'OWNcdWI1OWRcdWI1OWVcdWI1OWZcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjZcdWI1YjdcdWI1YjhcdWI1YjlcdWI1YmFcdWI1YmVcdWI1YmZcdWI1YzFcdWI1YzJcdWI1YzNcdWI1YzVcdWI1YzZcdWI1Yzdc'@;
put 'dWI1YzhcdWI1YzlcdWI1Y2FcdWI1Y2JcdWI1Y2VcdWI1ZDJcdWI1ZDNcdWI1ZDRcdWI1ZDVcdWI1ZDZcdWI1ZDdcdWI1ZDlcdWI1ZGFcdWI1ZGJcdWI1ZGNcdWI1ZGRcdWI1ZGVcdWI1ZGZcdWI1ZTBcdWI1ZTFcdWI1ZTJcdWI1ZTNcdWI1ZTRcdWI1ZTVcdWI1ZTZcdWI1ZTdcdWI1ZThcdWI1'@;
put 'ZTlcdWI1ZWFcdWI1ZWJcdWI1ZWRcdWI1ZWVcdWI1ZWZcdWI1ZjBcdWI1ZjFcdWI1ZjJcdWI1ZjNcdWI1ZjRcdWI1ZjVcdWI1ZjZcdWI1ZjdcdWI1ZjhcdWI1ZjlcdWI1ZmFcdWI1ZmJcdWI1ZmNcdWI1ZmRcdWI1ZmVcdWI1ZmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxMzldLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT1iWzEzOV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTM5XVttXV09MzU1ODQrbSxSWzM1NTg0K21dPWJbMTM5XVttXSk7Zm9yKGJbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHVi'@;
put 'NjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHViNjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHVi'@;
put 'NjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRm'@;
put 'XHViNjUwXHViNjUxXHViNjUyXHViNjUzXHViNjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHVi'@;
put 'NjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcxXHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4'@;
put 'XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHViNjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHVi'@;
put 'NmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFlXHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PWJbMTQwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0MF1bbV1dPTM1ODQwK20sUlszNTg0MCttXT1iWzE0MF1bbV0pO2ZvcihiWzE0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1YjZjM1x1YjZjNFx1YjZjNVx1YjZjNlx1YjZjN1x1YjZjOFx1YjZjOVx1YjZjYVx1YjZjYlx1YjZjY1x1YjZjZFx1YjZjZVx1YjZjZlx1YjZkMFx1YjZkMVx1YjZkMlx1YjZkM1x1YjZkNVx1YjZkNlx1YjZkN1x1YjZkOFx1YjZkOVx1YjZkYVx1YjZkYlx1YjZkY1x1YjZkZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZkZVx1YjZkZlx1YjZlMFx1YjZlMVx1YjZlMlx1YjZlM1x1YjZlNFx1YjZlNVx1YjZlNlx1YjZlN1x1YjZlOFx1YjZlOVx1YjZlYVx1YjZlYlx1YjZlY1x1YjZlZFx1YjZlZVx1YjZlZlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1'@;
put 'YjZmNlx1YjZmN1x1YjZmOVx1YjZmYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YjZmYlx1YjZmY1x1YjZmZFx1YjZmZVx1YjZmZlx1YjcwMlx1YjcwM1x1YjcwNFx1YjcwNlx1YjcwN1x1YjcwOFx1YjcwOVx1YjcwYVx1YjcwYlx1YjcwY1x1YjcwZFx1YjcwZVx1Yjcw'@;
put 'Zlx1YjcxMFx1YjcxMVx1YjcxMlx1YjcxM1x1YjcxNFx1YjcxNVx1YjcxNlx1YjcxN1x1YjcxOFx1YjcxOVx1YjcxYVx1YjcxYlx1YjcxY1x1YjcxZFx1YjcxZVx1YjcxZlx1YjcyMFx1YjcyMVx1YjcyMlx1YjcyM1x1YjcyNFx1YjcyNVx1YjcyNlx1YjcyN1x1YjcyYVx1YjcyYlx1YjcyZFx1'@;
put 'YjcyZVx1YjczMVx1YjczMlx1YjczM1x1YjczNFx1YjczNVx1YjczNlx1YjczN1x1YjczYVx1YjczY1x1YjczZFx1YjczZVx1YjczZlx1Yjc0MFx1Yjc0MVx1Yjc0Mlx1Yjc0M1x1Yjc0NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZFx1Yjc0ZVx1Yjc0Zlx1Yjc1MFx1Yjc1'@;
put 'MVx1Yjc1Mlx1Yjc1M1x1Yjc1Nlx1Yjc1N1x1Yjc1OFx1Yjc1OVx1Yjc1YVx1Yjc1Ylx1Yjc1Y1x1Yjc1ZFx1Yjc1ZVx1Yjc1Zlx1Yjc2MVx1Yjc2Mlx1Yjc2M1x1Yjc2NVx1Yjc2Nlx1Yjc2N1x1Yjc2OVx1Yjc2YVx1Yjc2Ylx1Yjc2Y1x1Yjc2ZFx1Yjc2ZVx1Yjc2Zlx1Yjc3Mlx1Yjc3NFx1'@;
put 'Yjc3Nlx1Yjc3N1x1Yjc3OFx1Yjc3OVx1Yjc3YVx1Yjc3Ylx1Yjc3ZVx1Yjc3Zlx1Yjc4MVx1Yjc4Mlx1Yjc4M1x1Yjc4NVx1Yjc4Nlx1Yjc4N1x1Yjc4OFx1Yjc4OVx1Yjc4YVx1Yjc4Ylx1Yjc4ZVx1Yjc5M1x1Yjc5NFx1Yjc5NVx1Yjc5YVx1Yjc5Ylx1Yjc5ZFx1Yjc5ZVx1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT1iWzE0MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDFdW21dXT0zNjA5NittLFJbMzYwOTYrbV09YlsxNDFdW21dKTtmb3IoYlsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWI3OWZcdWI3YTFcdWI3YTJcdWI3YTNcdWI3YTRcdWI3YTVcdWI3YTZcdWI3YTdcdWI3YWFcdWI3YWVcdWI3YWZcdWI3YjBcdWI3YjFcdWI3YjJcdWI3YjNcdWI3YjZcdWI3YjdcdWI3YjlcdWI3YmFcdWI3YmJcdWI3YmNcdWI3YmRcdWI3YmVcdWI3YmZcdWI3'@;
put 'YzBcdWI3YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3YzJcdWI3YzNcdWI3YzRcdWI3YzVcdWI3YzZcdWI3YzhcdWI3Y2FcdWI3Y2JcdWI3Y2NcdWI3Y2RcdWI3Y2VcdWI3Y2ZcdWI3ZDBcdWI3ZDFcdWI3ZDJcdWI3ZDNcdWI3ZDRcdWI3ZDVcdWI3ZDZcdWI3ZDdc'@;
put 'dWI3ZDhcdWI3ZDlcdWI3ZGFcdWI3ZGJcdWI3ZGNcdWI3ZGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWI3ZGVcdWI3ZGZcdWI3ZTBcdWI3ZTFcdWI3ZTJcdWI3ZTNcdWI3ZTRcdWI3ZTVcdWI3ZTZcdWI3ZTdcdWI3ZThcdWI3ZTlcdWI3ZWFcdWI3ZWJcdWI3ZWVcdWI3'@;
put 'ZWZcdWI3ZjFcdWI3ZjJcdWI3ZjNcdWI3ZjVcdWI3ZjZcdWI3ZjdcdWI3ZjhcdWI3ZjlcdWI3ZmFcdWI3ZmJcdWI3ZmVcdWI4MDJcdWI4MDNcdWI4MDRcdWI4MDVcdWI4MDZcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTFcdWI4MTJcdWI4MTNcdWI4MTRcdWI4MTVcdWI4MTZc'@;
put 'dWI4MTdcdWI4MWFcdWI4MWNcdWI4MWVcdWI4MWZcdWI4MjBcdWI4MjFcdWI4MjJcdWI4MjNcdWI4MjZcdWI4MjdcdWI4MjlcdWI4MmFcdWI4MmJcdWI4MmRcdWI4MmVcdWI4MmZcdWI4MzBcdWI4MzFcdWI4MzJcdWI4MzNcdWI4MzZcdWI4M2FcdWI4M2JcdWI4M2NcdWI4M2RcdWI4M2VcdWI4'@;
put 'M2ZcdWI4NDFcdWI4NDJcdWI4NDNcdWI4NDVcdWI4NDZcdWI4NDdcdWI4NDhcdWI4NDlcdWI4NGFcdWI4NGJcdWI4NGNcdWI4NGRcdWI4NGVcdWI4NGZcdWI4NTBcdWI4NTJcdWI4NTRcdWI4NTVcdWI4NTZcdWI4NTdcdWI4NThcdWI4NTlcdWI4NWFcdWI4NWJcdWI4NWVcdWI4NWZcdWI4NjFc'@;
put 'dWI4NjJcdWI4NjNcdWI4NjVcdWI4NjZcdWI4NjdcdWI4NjhcdWI4NjlcdWI4NmFcdWI4NmJcdWI4NmVcdWI4NzBcdWI4NzJcdWI4NzNcdWI4NzRcdWI4NzVcdWI4NzZcdWI4NzdcdWI4NzlcdWI4N2FcdWI4N2JcdWI4N2RcdWI4N2VcdWI4N2ZcdWI4ODBcdWI4ODFcdWI4ODJcdWI4ODNcdWI4'@;
put 'ODRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQyXVttXV09MzYzNTIrbSxSWzM2MzUyK21dPWJbMTQyXVttXSk7Zm9yKGJbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHVi'@;
put 'ODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIz'@;
put 'XHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJhXHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHVi'@;
put 'OGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHViOGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0'@;
put 'XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZjXHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHVi'@;
put 'OTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHViOTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMy'@;
put 'XHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHVi'@;
put 'OTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0M11bbV1dPTM2NjA4K20sUlszNjYwOCttXT1iWzE0M11bbV0pO2ZvcihiWzE0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk1YVx1Yjk1Ylx1Yjk1ZFx1Yjk1ZVx1Yjk1Zlx1Yjk2MVx1Yjk2Mlx1Yjk2M1x1Yjk2NFx1Yjk2NVx1Yjk2Nlx1Yjk2N1x1Yjk2YVx1Yjk2Y1x1Yjk2ZVx1Yjk2Zlx1Yjk3MFx1Yjk3MVx1Yjk3Mlx1Yjk3M1x1'@;
put 'Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3Ylx1Yjk3ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk3ZVx1Yjk3Zlx1Yjk4MFx1Yjk4MVx1Yjk4Mlx1Yjk4M1x1Yjk4Nlx1Yjk4OFx1Yjk4Ylx1Yjk4Y1x1Yjk4Zlx1Yjk5MFx1Yjk5MVx1Yjk5Mlx1Yjk5M1x1Yjk5'@;
put 'NFx1Yjk5NVx1Yjk5Nlx1Yjk5N1x1Yjk5OFx1Yjk5OVx1Yjk5YVx1Yjk5Ylx1Yjk5Y1x1Yjk5ZFx1Yjk5ZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Yjk5Zlx1YjlhMFx1YjlhMVx1YjlhMlx1YjlhM1x1YjlhNFx1YjlhNVx1YjlhNlx1YjlhN1x1YjlhOFx1YjlhOVx1'@;
put 'YjlhYVx1YjlhYlx1YjlhZVx1YjlhZlx1YjliMVx1YjliMlx1YjliM1x1YjliNVx1YjliNlx1YjliN1x1YjliOFx1YjliOVx1YjliYVx1YjliYlx1YjliZVx1YjljMFx1YjljMlx1YjljM1x1YjljNFx1YjljNVx1YjljNlx1YjljN1x1YjljYVx1YjljYlx1YjljZFx1YjlkM1x1YjlkNFx1Yjlk'@;
put 'NVx1YjlkNlx1YjlkN1x1YjlkYVx1YjlkY1x1YjlkZlx1YjllMFx1YjllMlx1YjllNlx1YjllN1x1YjllOVx1YjllYVx1YjllYlx1YjllZFx1YjllZVx1YjllZlx1YjlmMFx1YjlmMVx1YjlmMlx1YjlmM1x1YjlmNlx1YjlmYlx1YjlmY1x1YjlmZFx1YjlmZVx1YjlmZlx1YmEwMlx1YmEwM1x1'@;
put 'YmEwNFx1YmEwNVx1YmEwNlx1YmEwN1x1YmEwOVx1YmEwYVx1YmEwYlx1YmEwY1x1YmEwZFx1YmEwZVx1YmEwZlx1YmExMFx1YmExMVx1YmExMlx1YmExM1x1YmExNFx1YmExNlx1YmExN1x1YmExOFx1YmExOVx1YmExYVx1YmExYlx1YmExY1x1YmExZFx1YmExZVx1YmExZlx1YmEyMFx1YmEy'@;
put 'MVx1YmEyMlx1YmEyM1x1YmEyNFx1YmEyNVx1YmEyNlx1YmEyN1x1YmEyOFx1YmEyOVx1YmEyYVx1YmEyYlx1YmEyY1x1YmEyZFx1YmEyZVx1YmEyZlx1YmEzMFx1YmEzMVx1YmEzMlx1YmEzM1x1YmEzNFx1YmEzNVx1YmEzNlx1YmEzN1x1YmEzYVx1YmEzYlx1YmEzZFx1YmEzZVx1YmEzZlx1'@;
put 'YmE0MVx1YmE0M1x1YmE0NFx1YmE0NVx1YmE0Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDRdW21dXT0zNjg2NCttLFJbMzY4NjQrbV09YlsxNDRdW21dKTtmb3IoYlsxNDVdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNDdcdWJhNGFcdWJhNGNcdWJhNGZcdWJhNTBcdWJhNTFcdWJhNTJcdWJhNTZcdWJhNTdcdWJhNTlcdWJhNWFcdWJhNWJcdWJhNWRcdWJhNWVcdWJhNWZcdWJhNjBcdWJhNjFcdWJhNjJc'@;
put 'dWJhNjNcdWJhNjZcdWJhNmFcdWJhNmJcdWJhNmNcdWJhNmRcdWJhNmVcdWJhNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhNzJcdWJhNzNcdWJhNzVcdWJhNzZcdWJhNzdcdWJhNzlcdWJhN2FcdWJhN2JcdWJhN2NcdWJhN2RcdWJhN2VcdWJhN2ZcdWJhODBcdWJh'@;
put 'ODFcdWJhODJcdWJhODZcdWJhODhcdWJhODlcdWJhOGFcdWJhOGJcdWJhOGRcdWJhOGVcdWJhOGZcdWJhOTBcdWJhOTFcdWJhOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJhOTNcdWJhOTRcdWJhOTVcdWJhOTZcdWJhOTdcdWJhOThcdWJhOTlcdWJhOWFcdWJhOWJc'@;
put 'dWJhOWNcdWJhOWRcdWJhOWVcdWJhOWZcdWJhYTBcdWJhYTFcdWJhYTJcdWJhYTNcdWJhYTRcdWJhYTVcdWJhYTZcdWJhYTdcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjNcdWJhYjRcdWJhYjVcdWJhYjZcdWJhYjdcdWJhYmFcdWJhYmNcdWJhYmVcdWJhYmZcdWJhYzBcdWJh'@;
put 'YzFcdWJhYzJcdWJhYzNcdWJhYzVcdWJhYzZcdWJhYzdcdWJhYzlcdWJhY2FcdWJhY2JcdWJhY2NcdWJhY2RcdWJhY2VcdWJhY2ZcdWJhZDBcdWJhZDFcdWJhZDJcdWJhZDNcdWJhZDRcdWJhZDVcdWJhZDZcdWJhZDdcdWJhZGFcdWJhZGJcdWJhZGNcdWJhZGRcdWJhZGVcdWJhZGZcdWJhZTBc'@;
put 'dWJhZTFcdWJhZTJcdWJhZTNcdWJhZTRcdWJhZTVcdWJhZTZcdWJhZTdcdWJhZThcdWJhZTlcdWJhZWFcdWJhZWJcdWJhZWNcdWJhZWRcdWJhZWVcdWJhZWZcdWJhZjBcdWJhZjFcdWJhZjJcdWJhZjNcdWJhZjRcdWJhZjVcdWJhZjZcdWJhZjdcdWJhZjhcdWJhZjlcdWJhZmFcdWJhZmJcdWJh'@;
put 'ZmRcdWJhZmVcdWJhZmZcdWJiMDFcdWJiMDJcdWJiMDNcdWJiMDVcdWJiMDZcdWJiMDdcdWJiMDhcdWJiMDlcdWJiMGFcdWJiMGJcdWJiMGNcdWJiMGVcdWJiMTBcdWJiMTJcdWJiMTNcdWJiMTRcdWJiMTVcdWJiMTZcdWJiMTdcdWJiMTlcdWJiMWFcdWJiMWJcdWJiMWRcdWJiMWVcdWJiMWZc'@;
put 'dWJiMjFcdWJiMjJcdWJiMjNcdWJiMjRcdWJiMjVcdWJiMjZcdWJiMjdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ1XVttXV09MzcxMjArbSxSWzM3MTIwK21dPWJbMTQ1XVttXSk7Zm9y'@;
put 'KGJbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQx'@;
put 'XHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHViYjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHVi'@;
put 'YjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4'@;
put 'XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHViYjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHVi'@;
put 'Yjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjljXHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2'@;
put 'XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHViYmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHVi'@;
put 'YmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRkXHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYz'@;
put 'XHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHViYmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE0Nl1bbV1dPTM3Mzc2K20sUlszNzM3NittXT1i'@;
put 'WzE0Nl1bbV0pO2ZvcihiWzE0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMwM1x1YmMwNFx1YmMwNVx1YmMwNlx1YmMwN1x1YmMwYVx1YmMwZVx1YmMxMFx1YmMxMlx1YmMxM1x1YmMxOVx1YmMxYVx1YmMyMFx1YmMy'@;
put 'MVx1YmMyMlx1YmMyM1x1YmMyNlx1YmMyOFx1YmMyYVx1YmMyYlx1YmMyY1x1YmMyZVx1YmMyZlx1YmMzMlx1YmMzM1x1YmMzNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmMzNlx1YmMzN1x1YmMzOVx1YmMzYVx1YmMzYlx1YmMzY1x1YmMzZFx1YmMzZVx1YmMzZlx1'@;
put 'YmM0Mlx1YmM0Nlx1YmM0N1x1YmM0OFx1YmM0YVx1YmM0Ylx1YmM0ZVx1YmM0Zlx1YmM1MVx1YmM1Mlx1YmM1M1x1YmM1NFx1YmM1NVx1YmM1Nlx1YmM1N1x1YmM1OFx1YmM1OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZVx1YmM1'@;
put 'Zlx1YmM2MFx1YmM2MVx1YmM2Mlx1YmM2M1x1YmM2NFx1YmM2NVx1YmM2Nlx1YmM2N1x1YmM2OFx1YmM2OVx1YmM2YVx1YmM2Ylx1YmM2Y1x1YmM2ZFx1YmM2ZVx1YmM2Zlx1YmM3MFx1YmM3MVx1YmM3Mlx1YmM3M1x1YmM3NFx1YmM3NVx1YmM3Nlx1YmM3N1x1YmM3OFx1YmM3OVx1YmM3YVx1'@;
put 'YmM3Ylx1YmM3Y1x1YmM3ZFx1YmM3ZVx1YmM3Zlx1YmM4MFx1YmM4MVx1YmM4Mlx1YmM4M1x1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4Zlx1YmM5MFx1YmM5MVx1YmM5Mlx1YmM5M1x1YmM5Nlx1YmM5OFx1YmM5Ylx1YmM5Y1x1YmM5ZFx1YmM5ZVx1YmM5Zlx1YmNhMlx1YmNh'@;
put 'M1x1YmNhNVx1YmNhNlx1YmNhOVx1YmNhYVx1YmNhYlx1YmNhY1x1YmNhZFx1YmNhZVx1YmNhZlx1YmNiMlx1YmNiNlx1YmNiN1x1YmNiOFx1YmNiOVx1YmNiYVx1YmNiYlx1YmNiZVx1YmNiZlx1YmNjMVx1YmNjMlx1YmNjM1x1YmNjNVx1YmNjNlx1YmNjN1x1YmNjOFx1YmNjOVx1YmNjYVx1'@;
put 'YmNjYlx1YmNjY1x1YmNjZVx1YmNkMlx1YmNkM1x1YmNkNFx1YmNkNlx1YmNkN1x1YmNkOVx1YmNkYVx1YmNkYlx1YmNkZFx1YmNkZVx1YmNkZlx1YmNlMFx1YmNlMVx1YmNlMlx1YmNlM1x1YmNlNFx1YmNlNVx1YmNlNlx1YmNlN1x1YmNlOFx1YmNlOVx1YmNlYVx1YmNlYlx1YmNlY1x1YmNl'@;
put 'ZFx1YmNlZVx1YmNlZlx1YmNmMFx1YmNmMVx1YmNmMlx1YmNmM1x1YmNmN1x1YmNmOVx1YmNmYVx1YmNmYlx1YmNmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE0N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTQ3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNDddW21dXT0zNzYzMitt'@;
put 'LFJbMzc2MzIrbV09YlsxNDddW21dKTtmb3IoYlsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJjZmVcdWJjZmZcdWJkMDBcdWJkMDFcdWJkMDJcdWJkMDNcdWJkMDZcdWJkMDhcdWJkMGFcdWJkMGJcdWJkMGNcdWJk'@;
put 'MGRcdWJkMGVcdWJkMGZcdWJkMTFcdWJkMTJcdWJkMTNcdWJkMTVcdWJkMTZcdWJkMTdcdWJkMThcdWJkMTlcdWJkMWFcdWJkMWJcdWJkMWNcdWJkMWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkMWVcdWJkMWZcdWJkMjBcdWJkMjFcdWJkMjJcdWJkMjNcdWJkMjVc'@;
put 'dWJkMjZcdWJkMjdcdWJkMjhcdWJkMjlcdWJkMmFcdWJkMmJcdWJkMmRcdWJkMmVcdWJkMmZcdWJkMzBcdWJkMzFcdWJkMzJcdWJkMzNcdWJkMzRcdWJkMzVcdWJkMzZcdWJkMzdcdWJkMzhcdWJkMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJkM2FcdWJkM2JcdWJk'@;
put 'M2NcdWJkM2RcdWJkM2VcdWJkM2ZcdWJkNDFcdWJkNDJcdWJkNDNcdWJkNDRcdWJkNDVcdWJkNDZcdWJkNDdcdWJkNGFcdWJkNGJcdWJkNGRcdWJkNGVcdWJkNGZcdWJkNTFcdWJkNTJcdWJkNTNcdWJkNTRcdWJkNTVcdWJkNTZcdWJkNTdcdWJkNWFcdWJkNWJcdWJkNWNcdWJkNWRcdWJkNWVc'@;
put 'dWJkNWZcdWJkNjBcdWJkNjFcdWJkNjJcdWJkNjNcdWJkNjVcdWJkNjZcdWJkNjdcdWJkNjlcdWJkNmFcdWJkNmJcdWJkNmNcdWJkNmRcdWJkNmVcdWJkNmZcdWJkNzBcdWJkNzFcdWJkNzJcdWJkNzNcdWJkNzRcdWJkNzVcdWJkNzZcdWJkNzdcdWJkNzhcdWJkNzlcdWJkN2FcdWJkN2JcdWJk'@;
put 'N2NcdWJkN2RcdWJkN2VcdWJkN2ZcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGJcdWJkOGNcdWJkOGRcdWJkOGVcdWJkOGZcdWJkOTJcdWJkOTRcdWJkOTZcdWJkOTdcdWJkOThcdWJkOWJcdWJkOWRcdWJkOWVcdWJkOWZcdWJkYTBcdWJkYTFcdWJkYTJcdWJkYTNcdWJkYTVcdWJkYTZc'@;
put 'dWJkYTdcdWJkYThcdWJkYTlcdWJkYWFcdWJkYWJcdWJkYWNcdWJkYWRcdWJkYWVcdWJkYWZcdWJkYjFcdWJkYjJcdWJkYjNcdWJkYjRcdWJkYjVcdWJkYjZcdWJkYjdcdWJkYjlcdWJkYmFcdWJkYmJcdWJkYmNcdWJkYmRcdWJkYmVcdWJkYmZcdWJkYzBcdWJkYzFcdWJkYzJcdWJkYzNcdWJk'@;
put 'YzRcdWJkYzVcdWJkYzZcdWJkYzdcdWJkYzhcdWJkYzlcdWJkY2FcdWJkY2JcdWJkY2NcdWJkY2RcdWJkY2VcdWJkY2ZcdWJkZDBcdWJkZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNDhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE0OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTQ4'@;
put 'XVttXV09Mzc4ODgrbSxSWzM3ODg4K21dPWJbMTQ4XVttXSk7Zm9yKGJbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHVi'@;
put 'ZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0XHViZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3'@;
put 'XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHViZGZlXHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVi'@;
put 'ZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFhXHViZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMz'@;
put 'XHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHViZTM5XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHVi'@;
put 'ZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgz'@;
put 'XHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHViZThhXHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHVi'@;
put 'ZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFkXHViZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTQ5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNDldW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzE0OV1bbV1dPTM4MTQ0K20sUlszODE0NCttXT1iWzE0OV1bbV0pO2ZvcihiWzE1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmViOFx1YmViOVx1YmViYVx1YmViYlx1YmViY1x1YmViZFx1YmViZVx1'@;
put 'YmViZlx1YmVjMFx1YmVjMVx1YmVjMlx1YmVjM1x1YmVjNFx1YmVjNVx1YmVjNlx1YmVjN1x1YmVjOFx1YmVjOVx1YmVjYVx1YmVjYlx1YmVjY1x1YmVjZFx1YmVjZVx1YmVjZlx1YmVkMlx1YmVkM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YmVkNVx1YmVkNlx1YmVk'@;
put 'OVx1YmVkYVx1YmVkYlx1YmVkY1x1YmVkZFx1YmVkZVx1YmVkZlx1YmVlMVx1YmVlMlx1YmVlNlx1YmVlN1x1YmVlOFx1YmVlOVx1YmVlYVx1YmVlYlx1YmVlZFx1YmVlZVx1YmVlZlx1YmVmMFx1YmVmMVx1YmVmMlx1YmVmM1x1YmVmNFx1YmVmNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1YmVmNlx1YmVmN1x1YmVmOFx1YmVmOVx1YmVmYVx1YmVmYlx1YmVmY1x1YmVmZFx1YmVmZVx1YmVmZlx1YmYwMFx1YmYwMlx1YmYwM1x1YmYwNFx1YmYwNVx1YmYwNlx1YmYwN1x1YmYwYVx1YmYwYlx1YmYwY1x1YmYwZFx1YmYwZVx1YmYwZlx1YmYxMFx1YmYxMVx1YmYx'@;
put 'Mlx1YmYxM1x1YmYxNFx1YmYxNVx1YmYxNlx1YmYxN1x1YmYxYVx1YmYxZVx1YmYxZlx1YmYyMFx1YmYyMVx1YmYyMlx1YmYyM1x1YmYyNFx1YmYyNVx1YmYyNlx1YmYyN1x1YmYyOFx1YmYyOVx1YmYyYVx1YmYyYlx1YmYyY1x1YmYyZFx1YmYyZVx1YmYyZlx1YmYzMFx1YmYzMVx1YmYzMlx1'@;
put 'YmYzM1x1YmYzNFx1YmYzNVx1YmYzNlx1YmYzN1x1YmYzOFx1YmYzOVx1YmYzYVx1YmYzYlx1YmYzY1x1YmYzZFx1YmYzZVx1YmYzZlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OVx1YmY0YVx1YmY0Ylx1YmY0Y1x1YmY0ZFx1YmY0ZVx1YmY0Zlx1YmY1Mlx1YmY1M1x1YmY1'@;
put 'NFx1YmY1Nlx1YmY1N1x1YmY1OFx1YmY1OVx1YmY1YVx1YmY1Ylx1YmY1Y1x1YmY1ZFx1YmY1ZVx1YmY1Zlx1YmY2MFx1YmY2MVx1YmY2Mlx1YmY2M1x1YmY2NFx1YmY2NVx1YmY2Nlx1YmY2N1x1YmY2OFx1YmY2OVx1YmY2YVx1YmY2Ylx1YmY2Y1x1YmY2ZFx1YmY2ZVx1YmY2Zlx1YmY3MFx1'@;
put 'YmY3MVx1YmY3Mlx1YmY3M1x1YmY3NFx1YmY3NVx1YmY3Nlx1YmY3N1x1YmY3OFx1YmY3OVx1YmY3YVx1YmY3Ylx1YmY3Y1x1YmY3ZFx1YmY3ZVx1YmY3Zlx1YmY4MFx1YmY4MVx1YmY4Mlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTUwXVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTBdW21dXT0zODQwMCttLFJbMzg0MDArbV09YlsxNTBdW21dKTtmb3IoYlsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmODNcdWJmODRcdWJmODVcdWJmODZcdWJmODdc'@;
put 'dWJmODhcdWJmODlcdWJmOGFcdWJmOGJcdWJmOGNcdWJmOGRcdWJmOGVcdWJmOGZcdWJmOTBcdWJmOTFcdWJmOTJcdWJmOTNcdWJmOTVcdWJmOTZcdWJmOTdcdWJmOThcdWJmOTlcdWJmOWFcdWJmOWJcdWJmOWNcdWJmOWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJm'@;
put 'OWVcdWJmOWZcdWJmYTBcdWJmYTFcdWJmYTJcdWJmYTNcdWJmYTRcdWJmYTVcdWJmYTZcdWJmYTdcdWJmYThcdWJmYTlcdWJmYWFcdWJmYWJcdWJmYWNcdWJmYWRcdWJmYWVcdWJmYWZcdWJmYjFcdWJmYjJcdWJmYjNcdWJmYjRcdWJmYjVcdWJmYjZcdWJmYjdcdWJmYjhcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWJmYjlcdWJmYmFcdWJmYmJcdWJmYmNcdWJmYmRcdWJmYmVcdWJmYmZcdWJmYzBcdWJmYzFcdWJmYzJcdWJmYzNcdWJmYzRcdWJmYzZcdWJmYzdcdWJmYzhcdWJmYzlcdWJmY2FcdWJmY2JcdWJmY2VcdWJmY2ZcdWJmZDFcdWJmZDJcdWJmZDNcdWJm'@;
put 'ZDVcdWJmZDZcdWJmZDdcdWJmZDhcdWJmZDlcdWJmZGFcdWJmZGJcdWJmZGRcdWJmZGVcdWJmZTBcdWJmZTJcdWJmZTNcdWJmZTRcdWJmZTVcdWJmZTZcdWJmZTdcdWJmZThcdWJmZTlcdWJmZWFcdWJmZWJcdWJmZWNcdWJmZWRcdWJmZWVcdWJmZWZcdWJmZjBcdWJmZjFcdWJmZjJcdWJmZjNc'@;
put 'dWJmZjRcdWJmZjVcdWJmZjZcdWJmZjdcdWJmZjhcdWJmZjlcdWJmZmFcdWJmZmJcdWJmZmNcdWJmZmRcdWJmZmVcdWJmZmZcdWMwMDBcdWMwMDFcdWMwMDJcdWMwMDNcdWMwMDRcdWMwMDVcdWMwMDZcdWMwMDdcdWMwMDhcdWMwMDlcdWMwMGFcdWMwMGJcdWMwMGNcdWMwMGRcdWMwMGVcdWMw'@;
put 'MGZcdWMwMTBcdWMwMTFcdWMwMTJcdWMwMTNcdWMwMTRcdWMwMTVcdWMwMTZcdWMwMTdcdWMwMThcdWMwMTlcdWMwMWFcdWMwMWJcdWMwMWNcdWMwMWRcdWMwMWVcdWMwMWZcdWMwMjBcdWMwMjFcdWMwMjJcdWMwMjNcdWMwMjRcdWMwMjVcdWMwMjZcdWMwMjdcdWMwMjhcdWMwMjlcdWMwMmFc'@;
put 'dWMwMmJcdWMwMmNcdWMwMmRcdWMwMmVcdWMwMmZcdWMwMzBcdWMwMzFcdWMwMzJcdWMwMzNcdWMwMzRcdWMwMzVcdWMwMzZcdWMwMzdcdWMwMzhcdWMwMzlcdWMwM2FcdWMwM2JcdWMwM2RcdWMwM2VcdWMwM2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTFdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzE1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTUxXVttXV09Mzg2NTYrbSxSWzM4NjU2K21dPWJbMTUxXVttXSk7Zm9yKGJbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQy'@;
put 'XHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVjMDQ4XHVjMDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxXHVjMDYyXHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVj'@;
put 'MDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJh'@;
put 'XHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVj'@;
put 'MGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVlXHVjMGVmXHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBi'@;
put 'XHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVjMTEyXHVjMTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTUyXS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsxNTJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1Ml1bbV1dPTM4OTEyK20sUlszODkxMittXT1iWzE1Ml1bbV0pO2ZvcihiWzE1M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzEz'@;
put 'Mlx1YzEzM1x1YzEzNFx1YzEzNVx1YzEzN1x1YzEzYVx1YzEzYlx1YzEzZFx1YzEzZVx1YzEzZlx1YzE0MVx1YzE0Mlx1YzE0M1x1YzE0NFx1YzE0NVx1YzE0Nlx1YzE0N1x1YzE0YVx1YzE0ZVx1YzE0Zlx1YzE1MFx1YzE1MVx1YzE1Mlx1YzE1M1x1YzE1Nlx1YzE1N1x1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZFx1YzE1ZVx1YzE1Zlx1YzE2MFx1YzE2MVx1YzE2Mlx1YzE2M1x1YzE2Nlx1YzE2YVx1YzE2Ylx1YzE2Y1x1YzE2ZFx1YzE2ZVx1YzE2Zlx1YzE3MVx1YzE3Mlx1YzE3M1x1YzE3NVx1YzE3Nlx1YzE3N1x1YzE3'@;
put 'OVx1YzE3YVx1YzE3Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzE3Y1x1YzE3ZFx1YzE3ZVx1YzE3Zlx1YzE4MFx1YzE4MVx1YzE4Mlx1YzE4M1x1YzE4NFx1YzE4Nlx1YzE4N1x1YzE4OFx1YzE4OVx1YzE4YVx1YzE4Ylx1YzE4Zlx1YzE5MVx1YzE5Mlx1YzE5M1x1'@;
put 'YzE5NVx1YzE5N1x1YzE5OFx1YzE5OVx1YzE5YVx1YzE5Ylx1YzE5ZVx1YzFhMFx1YzFhMlx1YzFhM1x1YzFhNFx1YzFhNlx1YzFhN1x1YzFhYVx1YzFhYlx1YzFhZFx1YzFhZVx1YzFhZlx1YzFiMVx1YzFiMlx1YzFiM1x1YzFiNFx1YzFiNVx1YzFiNlx1YzFiN1x1YzFiOFx1YzFiOVx1YzFi'@;
put 'YVx1YzFiYlx1YzFiY1x1YzFiZVx1YzFiZlx1YzFjMFx1YzFjMVx1YzFjMlx1YzFjM1x1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZFx1YzFjZVx1YzFjZlx1YzFkMFx1YzFkMVx1YzFkMlx1YzFkM1x1YzFkNVx1YzFkNlx1YzFkOVx1YzFkYVx1YzFkYlx1YzFkY1x1'@;
put 'YzFkZFx1YzFkZVx1YzFkZlx1YzFlMVx1YzFlMlx1YzFlM1x1YzFlNVx1YzFlNlx1YzFlN1x1YzFlOVx1YzFlYVx1YzFlYlx1YzFlY1x1YzFlZFx1YzFlZVx1YzFlZlx1YzFmMlx1YzFmNFx1YzFmNVx1YzFmNlx1YzFmN1x1YzFmOFx1YzFmOVx1YzFmYVx1YzFmYlx1YzFmZVx1YzFmZlx1YzIw'@;
put 'MVx1YzIwMlx1YzIwM1x1YzIwNVx1YzIwNlx1YzIwN1x1YzIwOFx1YzIwOVx1YzIwYVx1YzIwYlx1YzIwZVx1YzIxMFx1YzIxMlx1YzIxM1x1YzIxNFx1YzIxNVx1YzIxNlx1YzIxN1x1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1YzIyMVx1YzIyMlx1YzIyM1x1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT1iWzE1M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTUzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTNdW21dXT0zOTE2OCttLFJbMzkxNjgrbV09YlsxNTNdW21dKTtmb3IoYlsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWMyMjRcdWMyMjVcdWMyMjZcdWMyMjdcdWMyMmFcdWMyMmNcdWMyMmVcdWMyMzBcdWMyMzNcdWMyMzVcdWMyMzZcdWMyMzdcdWMyMzhcdWMyMzlcdWMyM2FcdWMyM2JcdWMyM2NcdWMyM2RcdWMyM2VcdWMyM2ZcdWMyNDBcdWMyNDFcdWMyNDJcdWMyNDNcdWMyNDRcdWMyNDVc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNDZcdWMyNDdcdWMyNDlcdWMyNGFcdWMyNGJcdWMyNGNcdWMyNGRcdWMyNGVcdWMyNGZcdWMyNTJcdWMyNTNcdWMyNTVcdWMyNTZcdWMyNTdcdWMyNTlcdWMyNWFcdWMyNWJcdWMyNWNcdWMyNWRcdWMyNWVcdWMyNWZcdWMy'@;
put 'NjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWMyNjdcdWMyNjhcdWMyNjlcdWMyNmFcdWMyNmJcdWMyNmVcdWMyNmZcdWMyNzFcdWMyNzJcdWMyNzNcdWMyNzVcdWMyNzZcdWMyNzdcdWMyNzhcdWMyNzlcdWMyN2FcdWMyN2Jc'@;
put 'dWMyN2VcdWMyODBcdWMyODJcdWMyODNcdWMyODRcdWMyODVcdWMyODZcdWMyODdcdWMyOGFcdWMyOGJcdWMyOGNcdWMyOGRcdWMyOGVcdWMyOGZcdWMyOTFcdWMyOTJcdWMyOTNcdWMyOTRcdWMyOTVcdWMyOTZcdWMyOTdcdWMyOTlcdWMyOWFcdWMyOWNcdWMyOWVcdWMyOWZcdWMyYTBcdWMy'@;
put 'YTFcdWMyYTJcdWMyYTNcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWVcdWMyYWZcdWMyYjBcdWMyYjFcdWMyYjJcdWMyYjNcdWMyYjZcdWMyYjhcdWMyYmFcdWMyYmJcdWMyYmNcdWMyYmRcdWMyYmVcdWMyYmZcdWMyYzBcdWMyYzFcdWMyYzJcdWMyYzNcdWMyYzRcdWMyYzVc'@;
put 'dWMyYzZcdWMyYzdcdWMyYzhcdWMyYzlcdWMyY2FcdWMyY2JcdWMyY2NcdWMyY2RcdWMyY2VcdWMyY2ZcdWMyZDBcdWMyZDFcdWMyZDJcdWMyZDNcdWMyZDRcdWMyZDVcdWMyZDZcdWMyZDdcdWMyZDhcdWMyZDlcdWMyZGFcdWMyZGJcdWMyZGVcdWMyZGZcdWMyZTFcdWMyZTJcdWMyZTVcdWMy'@;
put 'ZTZcdWMyZTdcdWMyZThcdWMyZTlcdWMyZWFcdWMyZWVcdWMyZjBcdWMyZjJcdWMyZjNcdWMyZjRcdWMyZjVcdWMyZjdcdWMyZmFcdWMyZmRcdWMyZmVcdWMyZmZcdWMzMDFcdWMzMDJcdWMzMDNcdWMzMDRcdWMzMDVcdWMzMDZcdWMzMDdcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGZcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9YlsxNTRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU0XVttXV09Mzk0MjQrbSxSWzM5NDI0K21dPWJbMTU0XVttXSk7Zm9yKGJbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzExXHVjMzEyXHVjMzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMw'@;
put 'XHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVj'@;
put 'MzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRjXHVjMzRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVj'@;
put 'XHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVjMzYyXHVjMzYzXHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVj'@;
put 'MzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlm'@;
put 'XHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVjM2E1XHVjM2E2XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVj'@;
put 'M2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2MxXHVjM2MyXHVjM2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3'@;
put 'XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTU1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNTVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1NV1bbV1dPTM5NjgwK20sUlszOTY4MCttXT1iWzE1NV1bbV0pO2ZvcihiWzE1Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNkYlx1YzNkZFx1YzNkZVx1YzNlMVx1YzNlM1x1YzNlNFx1YzNlNVx1YzNlNlx1YzNlN1x1YzNlYVx1YzNlYlx1YzNlY1x1YzNlZVx1YzNlZlx1YzNmMFx1YzNmMVx1YzNmMlx1YzNmM1x1YzNmNlx1YzNmN1x1YzNmOVx1YzNm'@;
put 'YVx1YzNmYlx1YzNmY1x1YzNmZFx1YzNmZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzNmZlx1YzQwMFx1YzQwMVx1YzQwMlx1YzQwM1x1YzQwNFx1YzQwNVx1YzQwNlx1YzQwN1x1YzQwOVx1YzQwYVx1YzQwYlx1YzQwY1x1YzQwZFx1YzQwZVx1YzQwZlx1YzQxMVx1'@;
put 'YzQxMlx1YzQxM1x1YzQxNFx1YzQxNVx1YzQxNlx1YzQxN1x1YzQxOFx1YzQxOVx1YzQxYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzQxYlx1YzQxY1x1YzQxZFx1YzQxZVx1YzQxZlx1YzQyMFx1YzQyMVx1YzQyMlx1YzQyM1x1YzQyNVx1YzQyNlx1YzQyN1x1YzQy'@;
put 'OFx1YzQyOVx1YzQyYVx1YzQyYlx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNVx1YzQzNlx1YzQzN1x1YzQzOFx1YzQzOVx1YzQzYVx1YzQzYlx1YzQzZVx1YzQzZlx1YzQ0MFx1YzQ0MVx1YzQ0Mlx1YzQ0M1x1YzQ0NFx1YzQ0NVx1YzQ0Nlx1YzQ0N1x1YzQ0OVx1'@;
put 'YzQ0YVx1YzQ0Ylx1YzQ0Y1x1YzQ0ZFx1YzQ0ZVx1YzQ0Zlx1YzQ1MFx1YzQ1MVx1YzQ1Mlx1YzQ1M1x1YzQ1NFx1YzQ1NVx1YzQ1Nlx1YzQ1N1x1YzQ1OFx1YzQ1OVx1YzQ1YVx1YzQ1Ylx1YzQ1Y1x1YzQ1ZFx1YzQ1ZVx1YzQ1Zlx1YzQ2MFx1YzQ2MVx1YzQ2Mlx1YzQ2M1x1YzQ2Nlx1YzQ2'@;
put 'N1x1YzQ2OVx1YzQ2YVx1YzQ2Ylx1YzQ2ZFx1YzQ2ZVx1YzQ2Zlx1YzQ3MFx1YzQ3MVx1YzQ3Mlx1YzQ3M1x1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YVx1YzQ3Ylx1YzQ3Y1x1YzQ3ZFx1YzQ3ZVx1YzQ3Zlx1YzQ4MVx1YzQ4Mlx1YzQ4M1x1YzQ4NFx1YzQ4NVx1YzQ4Nlx1YzQ4N1x1YzQ4OFx1'@;
put 'YzQ4OVx1YzQ4YVx1YzQ4Ylx1YzQ4Y1x1YzQ4ZFx1YzQ4ZVx1YzQ4Zlx1YzQ5MFx1YzQ5MVx1YzQ5Mlx1YzQ5M1x1YzQ5NVx1YzQ5Nlx1YzQ5N1x1YzQ5OFx1YzQ5OVx1YzQ5YVx1YzQ5Ylx1YzQ5ZFx1YzQ5ZVx1YzQ5Zlx1YzRhMFx1YzRhMVx1YzRhMlx1YzRhM1x1YzRhNFx1YzRhNVx1YzRh'@;
put 'Nlx1YzRhN1x1YzRhOFx1YzRhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTZdW21dXT0zOTkzNittLFJbMzk5MzYrbV09YlsxNTZdW21dKTtmb3IoYlsxNTddPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YWFcdWM0YWJcdWM0YWNcdWM0YWRcdWM0YWVcdWM0YWZcdWM0YjBcdWM0YjFcdWM0YjJcdWM0YjNcdWM0YjRcdWM0YjVcdWM0YjZcdWM0YjdcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmRcdWM0YmVcdWM0'@;
put 'YmZcdWM0YzBcdWM0YzFcdWM0YzJcdWM0YzNcdWM0YzRcdWM0YzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0YzZcdWM0YzdcdWM0YzhcdWM0YzlcdWM0Y2FcdWM0Y2JcdWM0Y2NcdWM0Y2RcdWM0Y2VcdWM0Y2ZcdWM0ZDBcdWM0ZDFcdWM0ZDJcdWM0ZDNcdWM0ZDRc'@;
put 'dWM0ZDVcdWM0ZDZcdWM0ZDdcdWM0ZDhcdWM0ZDlcdWM0ZGFcdWM0ZGJcdWM0ZGNcdWM0ZGRcdWM0ZGVcdWM0ZGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM0ZTBcdWM0ZTFcdWM0ZTJcdWM0ZTNcdWM0ZTRcdWM0ZTVcdWM0ZTZcdWM0ZTdcdWM0ZThcdWM0ZWFcdWM0'@;
put 'ZWJcdWM0ZWNcdWM0ZWRcdWM0ZWVcdWM0ZWZcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0ZmRcdWM0ZmVcdWM1MDJcdWM1MDNcdWM1MDRcdWM1MDVcdWM1MDZcdWM1MDdcdWM1MDhcdWM1MDlcdWM1MGFcdWM1MGJcdWM1MGRcdWM1MGVcdWM1MGZc'@;
put 'dWM1MTFcdWM1MTJcdWM1MTNcdWM1MTVcdWM1MTZcdWM1MTdcdWM1MThcdWM1MTlcdWM1MWFcdWM1MWJcdWM1MWRcdWM1MWVcdWM1MWZcdWM1MjBcdWM1MjFcdWM1MjJcdWM1MjNcdWM1MjRcdWM1MjVcdWM1MjZcdWM1MjdcdWM1MmFcdWM1MmJcdWM1MmRcdWM1MmVcdWM1MmZcdWM1MzFcdWM1'@;
put 'MzJcdWM1MzNcdWM1MzRcdWM1MzVcdWM1MzZcdWM1MzdcdWM1M2FcdWM1M2NcdWM1M2VcdWM1M2ZcdWM1NDBcdWM1NDFcdWM1NDJcdWM1NDNcdWM1NDZcdWM1NDdcdWM1NGJcdWM1NGZcdWM1NTBcdWM1NTFcdWM1NTJcdWM1NTZcdWM1NWFcdWM1NWJcdWM1NWNcdWM1NWZcdWM1NjJcdWM1NjNc'@;
put 'dWM1NjVcdWM1NjZcdWM1NjdcdWM1NjlcdWM1NmFcdWM1NmJcdWM1NmNcdWM1NmRcdWM1NmVcdWM1NmZcdWM1NzJcdWM1NzZcdWM1NzdcdWM1NzhcdWM1NzlcdWM1N2FcdWM1N2JcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1OGFcdWM1'@;
put 'OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNTddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE1N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTU3XVttXV09NDAxOTIrbSxSWzQwMTkyK21dPWJbMTU3XVttXSk7Zm9yKGJbMTU4XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVj'@;
put 'NWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIxXHVjNWIyXHVjNWIzXHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1'@;
put 'XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVjNWRjXHVjNWRkXHVjNWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVj'@;
put 'NWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIy'@;
put 'XHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVjNjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVj'@;
put 'NjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5XHVjNjVhXHVjNjViXHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1'@;
put 'XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVjNjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVj'@;
put 'NjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEyXHVjNmEzXHVjNmE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTU4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNThdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE1OF1bbV1dPTQwNDQ4K20sUls0MDQ0OCttXT1iWzE1OF1bbV0p'@;
put 'O2ZvcihiWzE1OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZhOFx1YzZhYVx1YzZhYlx1YzZhY1x1YzZhZFx1YzZhZVx1YzZhZlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYlx1YzZiY1x1YzZiZFx1'@;
put 'YzZiZVx1YzZiZlx1YzZjMlx1YzZjNFx1YzZjNlx1YzZjN1x1YzZjOFx1YzZjOVx1YzZjYVx1YzZjYlx1YzZjZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZjZlx1YzZkMVx1YzZkMlx1YzZkM1x1YzZkNVx1YzZkNlx1YzZkN1x1YzZkOFx1YzZkOVx1YzZkYVx1YzZk'@;
put 'Ylx1YzZkZVx1YzZkZlx1YzZlMlx1YzZlM1x1YzZlNFx1YzZlNVx1YzZlNlx1YzZlN1x1YzZlYVx1YzZlYlx1YzZlZFx1YzZlZVx1YzZlZlx1YzZmMVx1YzZmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1YzZmM1x1YzZmNFx1YzZmNVx1YzZmNlx1YzZmN1x1YzZmYVx1'@;
put 'YzZmYlx1YzZmY1x1YzZmZVx1YzZmZlx1YzcwMFx1YzcwMVx1YzcwMlx1YzcwM1x1YzcwNlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZFx1YzcwZVx1YzcwZlx1YzcxMFx1YzcxMVx1YzcxMlx1YzcxM1x1YzcxNlx1YzcxOFx1YzcxYVx1YzcxYlx1YzcxY1x1YzcxZFx1YzcxZVx1Yzcx'@;
put 'Zlx1YzcyMlx1YzcyM1x1YzcyNVx1YzcyNlx1YzcyN1x1YzcyOVx1YzcyYVx1YzcyYlx1YzcyY1x1YzcyZFx1YzcyZVx1YzcyZlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0Mlx1Yzc0M1x1Yzc0NVx1Yzc0Nlx1Yzc0N1x1'@;
put 'Yzc0OFx1Yzc0OVx1Yzc0Ylx1Yzc0ZVx1Yzc1MFx1Yzc1OVx1Yzc1YVx1Yzc1Ylx1Yzc1ZFx1Yzc1ZVx1Yzc1Zlx1Yzc2MVx1Yzc2Mlx1Yzc2M1x1Yzc2NFx1Yzc2NVx1Yzc2Nlx1Yzc2N1x1Yzc2OVx1Yzc2YVx1Yzc2Y1x1Yzc2ZFx1Yzc2ZVx1Yzc2Zlx1Yzc3MFx1Yzc3MVx1Yzc3Mlx1Yzc3'@;
put 'M1x1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5Ylx1Yzc5Y1x1Yzc5ZFx1Yzc5ZVx1Yzc5Zlx1YzdhMlx1YzdhN1x1YzdhOFx1YzdhOVx1'@;
put 'YzdhYVx1YzdhYlx1YzdhZVx1YzdhZlx1YzdiMVx1YzdiMlx1YzdiM1x1YzdiNVx1YzdiNlx1YzdiN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE1OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTU5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNTldW21dXT00MDcwNCttLFJbNDA3MDQr'@;
put 'bV09YlsxNTldW21dKTtmb3IoYlsxNjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3YmVcdWM3YzJcdWM3YzNcdWM3YzRcdWM3YzVcdWM3YzZcdWM3YzdcdWM3Y2FcdWM3Y2Jc'@;
put 'dWM3Y2RcdWM3Y2ZcdWM3ZDFcdWM3ZDJcdWM3ZDNcdWM3ZDRcdWM3ZDVcdWM3ZDZcdWM3ZDdcdWM3ZDlcdWM3ZGFcdWM3ZGJcdWM3ZGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZGVcdWM3ZGZcdWM3ZTBcdWM3ZTFcdWM3ZTJcdWM3ZTNcdWM3ZTVcdWM3ZTZcdWM3'@;
put 'ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWRcdWM3ZWVcdWM3ZWZcdWM3ZjBcdWM3ZjFcdWM3ZjJcdWM3ZjNcdWM3ZjRcdWM3ZjVcdWM3ZjZcdWM3ZjdcdWM3ZjhcdWM3ZjlcdWM3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM3ZmJcdWM3ZmNcdWM3ZmRcdWM3ZmVc'@;
put 'dWM3ZmZcdWM4MDJcdWM4MDNcdWM4MDVcdWM4MDZcdWM4MDdcdWM4MDlcdWM4MGJcdWM4MGNcdWM4MGRcdWM4MGVcdWM4MGZcdWM4MTJcdWM4MTRcdWM4MTdcdWM4MThcdWM4MTlcdWM4MWFcdWM4MWJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjVcdWM4MjZcdWM4MjdcdWM4'@;
put 'MjhcdWM4MjlcdWM4MmFcdWM4MmJcdWM4MmVcdWM4MzBcdWM4MzJcdWM4MzNcdWM4MzRcdWM4MzVcdWM4MzZcdWM4MzdcdWM4MzlcdWM4M2FcdWM4M2JcdWM4M2RcdWM4M2VcdWM4M2ZcdWM4NDFcdWM4NDJcdWM4NDNcdWM4NDRcdWM4NDVcdWM4NDZcdWM4NDdcdWM4NGFcdWM4NGJcdWM4NGVc'@;
put 'dWM4NGZcdWM4NTBcdWM4NTFcdWM4NTJcdWM4NTNcdWM4NTVcdWM4NTZcdWM4NTdcdWM4NThcdWM4NTlcdWM4NWFcdWM4NWJcdWM4NWNcdWM4NWRcdWM4NWVcdWM4NWZcdWM4NjBcdWM4NjFcdWM4NjJcdWM4NjNcdWM4NjRcdWM4NjVcdWM4NjZcdWM4NjdcdWM4NjhcdWM4NjlcdWM4NmFcdWM4'@;
put 'NmJcdWM4NmNcdWM4NmRcdWM4NmVcdWM4NmZcdWM4NzJcdWM4NzNcdWM4NzVcdWM4NzZcdWM4NzdcdWM4NzlcdWM4N2JcdWM4N2NcdWM4N2RcdWM4N2VcdWM4N2ZcdWM4ODJcdWM4ODRcdWM4ODhcdWM4ODlcdWM4OGFcdWM4OGVcdWM4OGZcdWM4OTBcdWM4OTFcdWM4OTJcdWM4OTNcdWM4OTVc'@;
put 'dWM4OTZcdWM4OTdcdWM4OThcdWM4OTlcdWM4OWFcdWM4OWJcdWM4OWNcdWM4OWVcdWM4YTBcdWM4YTJcdWM4YTNcdWM4YTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTYwXVttXV09NDA5'@;
put 'NjArbSxSWzQwOTYwK21dPWJbMTYwXVttXSk7Zm9yKGJbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVjOGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIw'@;
put 'XHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVjOGI2XHVjOGI3XHVjOGI4XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVj'@;
put 'OGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQwXHVjOGQxXHVjOGQyXHVjOGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3'@;
put 'XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVjOGVkXHVjOGVlXHVjOGVmXHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVj'@;
put 'OTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBl'@;
put 'XHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdc'@;
put 'dTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIy'@;
put 'MmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTYxXVttXV09NDEyMTYr'@;
put 'bSxSWzQxMjE2K21dPWJbMTYxXVttXSk7Zm9yKGJbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTEwXHVjOTEyXHVjOTEzXHVjOTE0XHVjOTE1XHVjOTE2XHVjOTE3XHVjOTE5XHVjOTFhXHVjOTFiXHVjOTFjXHVj'@;
put 'OTFkXHVjOTFlXHVjOTFmXHVjOTIwXHVjOTIxXHVjOTIyXHVjOTIzXHVjOTI0XHVjOTI1XHVjOTI2XHVjOTI3XHVjOTI4XHVjOTI5XHVjOTJhXHVjOTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTJkXHVjOTJlXHVjOTJmXHVjOTMwXHVjOTMxXHVjOTMyXHVjOTMz'@;
put 'XHVjOTM1XHVjOTM2XHVjOTM3XHVjOTM4XHVjOTM5XHVjOTNhXHVjOTNiXHVjOTNjXHVjOTNkXHVjOTNlXHVjOTNmXHVjOTQwXHVjOTQxXHVjOTQyXHVjOTQzXHVjOTQ0XHVjOTQ1XHVjOTQ2XHVjOTQ3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTQ4XHVjOTQ5XHVj'@;
put 'OTRhXHVjOTRiXHVjOTRjXHVjOTRkXHVjOTRlXHVjOTRmXHVjOTUyXHVjOTUzXHVjOTU1XHVjOTU2XHVjOTU3XHVjOTU5XHVjOTVhXHVjOTViXHVjOTVjXHVjOTVkXHVjOTVlXHVjOTVmXHVjOTYyXHVjOTY0XHVjOTY1XHVjOTY2XHVjOTY3XHVjOTY4XHVjOTY5XHVjOTZhXHVjOTZiXHVjOTZk'@;
put 'XHVjOTZlXHVjOTZmXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzXHhiNFx1ZmY1ZVx1MDJjN1x1MDJkOFx1MDJkZFx1MDJkYVx1MDJkOVx4YjhcdTAyZGJceGExXHhiZlx1MDJkMFx1MjIyZVx1MjIxMVx1MjIwZlx4YTRcdTIxMDlcdTIwMzBcdTI1YzFcdTI1YzBcdTI1YjdcdTI1YjZcdTI2NjRc'@;
put 'dTI2NjBcdTI2NjFcdTI2NjVcdTI2NjdcdTI2NjNcdTIyOTlcdTI1YzhcdTI1YTNcdTI1ZDBcdTI1ZDFcdTI1OTJcdTI1YTRcdTI1YTVcdTI1YThcdTI1YTdcdTI1YTZcdTI1YTlcdTI2NjhcdTI2MGZcdTI2MGVcdTI2MWNcdTI2MWVceGI2XHUyMDIwXHUyMDIxXHUyMTk1XHUyMTk3XHUyMTk5'@;
put 'XHUyMTk2XHUyMTk4XHUyNjZkXHUyNjY5XHUyNjZhXHUyNjZjXHUzMjdmXHUzMjFjXHUyMTE2XHUzM2M3XHUyMTIyXHUzM2MyXHUzM2Q4XHUyMTIxXHUyMGFjXHhhZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTYyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjJdW21dXT00MTQ3Mitt'@;
put 'LFJbNDE0NzIrbV09YlsxNjJdW21dKTtmb3IoYlsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NzFcdWM5NzJcdWM5NzNcdWM5NzVcdWM5NzZcdWM5NzdcdWM5NzhcdWM5NzlcdWM5N2FcdWM5N2JcdWM5N2RcdWM5'@;
put 'N2VcdWM5N2ZcdWM5ODBcdWM5ODFcdWM5ODJcdWM5ODNcdWM5ODRcdWM5ODVcdWM5ODZcdWM5ODdcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5OTFcdWM5OTJcdWM5OTNcdWM5OTRcdWM5OTVcdWM5OTZcdWM5OTdc'@;
put 'dWM5OWFcdWM5OWNcdWM5OWVcdWM5OWZcdWM5YTBcdWM5YTFcdWM5YTJcdWM5YTNcdWM5YTRcdWM5YTVcdWM5YTZcdWM5YTdcdWM5YThcdWM5YTlcdWM5YWFcdWM5YWJcdWM5YWNcdWM5YWRcdWM5YWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5YWZcdWM5YjBcdWM5'@;
put 'YjFcdWM5YjJcdWM5YjNcdWM5YjRcdWM5YjVcdWM5YjZcdWM5YjdcdWM5YjhcdWM5YjlcdWM5YmFcdWM5YmJcdWM5YmNcdWM5YmRcdWM5YmVcdWM5YmZcdWM5YzJcdWM5YzNcdWM5YzVcdWM5YzZcdWM5YzlcdWM5Y2JcdWM5Y2NcdWM5Y2RcdWM5Y2VcdWM5Y2ZcdWM5ZDJcdWM5ZDRcdWM5ZDdc'@;
put 'dWM5ZDhcdWM5ZGJcdWZmMDFcdWZmMDJcdWZmMDNcdWZmMDRcdWZmMDVcdWZmMDZcdWZmMDdcdWZmMDhcdWZmMDlcdWZmMGFcdWZmMGJcdWZmMGNcdWZmMGRcdWZmMGVcdWZmMGZcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdWZm'@;
put 'MWFcdWZmMWJcdWZmMWNcdWZmMWRcdWZmMWVcdWZmMWZcdWZmMjBcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdcdWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVc'@;
put 'dWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmM2JcdWZmZTZcdWZmM2RcdWZmM2VcdWZmM2ZcdWZmNDBcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZmNDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZm'@;
put 'NTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdWZmNWJcdWZmNWNcdWZmNWRcdWZmZTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTYz'@;
put 'XVttXV09NDE3MjgrbSxSWzQxNzI4K21dPWJbMTYzXVttXSk7Zm9yKGJbMTY0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVj'@;
put 'OWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1XHVjOWY2XHVjOWY3XHVjOWZhXHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBl'@;
put 'XHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVjYTE1XHVjYTE2XHVjYTE3XHVjYTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj'@;
put 'YTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJjXHVjYTJkXHVjYTJlXHVjYTJmXHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQy'@;
put 'XHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUzMTMyXHUzMTMzXHUzMTM0XHUzMTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUz'@;
put 'MTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRkXHUzMTRlXHUzMTRmXHUzMTUwXHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYz'@;
put 'XHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUzMTY5XHUzMTZhXHUzMTZiXHUzMTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUz'@;
put 'MTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0XHUzMTg1XHUzMTg2XHUzMTg3XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjRdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzE2NF1bbV1dPTQxOTg0K20sUls0MTk4NCttXT1iWzE2NF1bbV0pO2ZvcihiWzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E0N1x1Y2E0OFx1Y2E0OVx1Y2E0YVx1Y2E0Ylx1Y2E0ZVx1Y2E0Zlx1'@;
put 'Y2E1MVx1Y2E1Mlx1Y2E1M1x1Y2E1NVx1Y2E1Nlx1Y2E1N1x1Y2E1OFx1Y2E1OVx1Y2E1YVx1Y2E1Ylx1Y2E1ZVx1Y2E2Mlx1Y2E2M1x1Y2E2NFx1Y2E2NVx1Y2E2Nlx1Y2E2N1x1Y2E2OVx1Y2E2YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2E2Ylx1Y2E2Y1x1Y2E2'@;
put 'ZFx1Y2E2ZVx1Y2E2Zlx1Y2E3MFx1Y2E3MVx1Y2E3Mlx1Y2E3M1x1Y2E3NFx1Y2E3NVx1Y2E3Nlx1Y2E3N1x1Y2E3OFx1Y2E3OVx1Y2E3YVx1Y2E3Ylx1Y2E3Y1x1Y2E3ZVx1Y2E3Zlx1Y2E4MFx1Y2E4MVx1Y2E4Mlx1Y2E4M1x1Y2E4NVx1Y2E4Nlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Y2E4N1x1Y2E4OFx1Y2E4OVx1Y2E4YVx1Y2E4Ylx1Y2E4Y1x1Y2E4ZFx1Y2E4ZVx1Y2E4Zlx1Y2E5MFx1Y2E5MVx1Y2E5Mlx1Y2E5M1x1Y2E5NFx1Y2E5NVx1Y2E5Nlx1Y2E5N1x1Y2E5OVx1Y2E5YVx1Y2E5Ylx1Y2E5Y1x1Y2E5ZFx1Y2E5ZVx1Y2E5Zlx1Y2FhMFx1Y2Fh'@;
put 'MVx1Y2FhMlx1Y2FhM1x1Y2FhNFx1Y2FhNVx1Y2FhNlx1Y2FhN1x1MjE3MFx1MjE3MVx1MjE3Mlx1MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2NVx1'@;
put 'MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNh'@;
put 'MVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1'@;
put 'MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY1XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjVdW21dXT00MjI0MCttLFJbNDIyNDArbV09YlsxNjVdW21dKTtmb3IoYlsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhYThcdWNhYTlcdWNhYWFcdWNhYWJcdWNhYWNc'@;
put 'dWNhYWRcdWNhYWVcdWNhYWZcdWNhYjBcdWNhYjFcdWNhYjJcdWNhYjNcdWNhYjRcdWNhYjVcdWNhYjZcdWNhYjdcdWNhYjhcdWNhYjlcdWNhYmFcdWNhYmJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNh'@;
put 'YzZcdWNhYzdcdWNhYzhcdWNhYzlcdWNhY2FcdWNhY2JcdWNhY2VcdWNhZDBcdWNhZDJcdWNhZDRcdWNhZDVcdWNhZDZcdWNhZDdcdWNhZGFcdWNhZGJcdWNhZGNcdWNhZGRcdWNhZGVcdWNhZGZcdWNhZTFcdWNhZTJcdWNhZTNcdWNhZTRcdWNhZTVcdWNhZTZcdWNhZTdcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNhZThcdWNhZTlcdWNhZWFcdWNhZWJcdWNhZWRcdWNhZWVcdWNhZWZcdWNhZjBcdWNhZjFcdWNhZjJcdWNhZjNcdWNhZjVcdWNhZjZcdWNhZjdcdWNhZjhcdWNhZjlcdWNhZmFcdWNhZmJcdWNhZmNcdWNhZmRcdWNhZmVcdWNhZmZcdWNiMDBcdWNi'@;
put 'MDFcdWNiMDJcdWNiMDNcdWNiMDRcdWNiMDVcdWNiMDZcdWNiMDdcdWNiMDlcdWNiMGFcdTI1MDBcdTI1MDJcdTI1MGNcdTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNc'@;
put 'dTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MWFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MGVcdTI1MGRcdTI1MWVcdTI1MWZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1'@;
put 'MjlcdTI1MmFcdTI1MmRcdTI1MmVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M2FcdTI1M2RcdTI1M2VcdTI1NDBcdTI1NDFcdTI1NDNcdTI1NDRcdTI1NDVcdTI1NDZcdTI1NDdcdTI1NDhcdTI1NDlcdTI1NGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjZdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzE2Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY2XVttXV09NDI0OTYrbSxSWzQyNDk2K21dPWJbMTY2XVttXSk7Zm9yKGJbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBk'@;
put 'XHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVjYjJlXHVjYjJmXHVjYjMwXHVjYjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVj'@;
put 'YjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVjYjY4XHVjYjY5XHVjYjZhXHVjYjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlm'@;
put 'XHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUz'@;
put 'Mzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUzM2JmXHUzMzkwXHUzMzkxXHUzMzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2Fj'@;
put 'XHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY3XS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsxNjddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2N11bbV1dPTQyNzUyK20sUls0Mjc1MittXT1iWzE2N11bbV0pO2ZvcihiWzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I2'@;
put 'ZFx1Y2I2ZVx1Y2I2Zlx1Y2I3MFx1Y2I3MVx1Y2I3Mlx1Y2I3M1x1Y2I3NFx1Y2I3NVx1Y2I3Nlx1Y2I3N1x1Y2I3YVx1Y2I3Ylx1Y2I3Y1x1Y2I3ZFx1Y2I3ZVx1Y2I3Zlx1Y2I4MFx1Y2I4MVx1Y2I4Mlx1Y2I4M1x1Y2I4NFx1Y2I4NVx1Y2I4Nlx1Y2I4N1x1Y2I4OFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2I4OVx1Y2I4YVx1Y2I4Ylx1Y2I4Y1x1Y2I4ZFx1Y2I4ZVx1Y2I4Zlx1Y2I5MFx1Y2I5MVx1Y2I5Mlx1Y2I5M1x1Y2I5NFx1Y2I5NVx1Y2I5Nlx1Y2I5N1x1Y2I5OFx1Y2I5OVx1Y2I5YVx1Y2I5Ylx1Y2I5ZFx1Y2I5ZVx1Y2I5Zlx1Y2JhMFx1Y2Jh'@;
put 'MVx1Y2JhMlx1Y2JhM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2JhNFx1Y2JhNVx1Y2JhNlx1Y2JhN1x1Y2JhOFx1Y2JhOVx1Y2JhYVx1Y2JhYlx1Y2JhY1x1Y2JhZFx1Y2JhZVx1Y2JhZlx1Y2JiMFx1Y2JiMVx1Y2JiMlx1Y2JiM1x1Y2JiNFx1Y2JiNVx1Y2JiNlx1'@;
put 'Y2JiN1x1Y2JiOVx1Y2JiYVx1Y2JiYlx1Y2JiY1x1Y2JiZFx1Y2JiZVx1Y2JiZlx1Y2JjMFx1Y2JjMVx1Y2JjMlx1Y2JjM1x1Y2JjNFx4YzZceGQwXHhhYVx1MDEyNlx1ZmZmZFx1MDEzMlx1ZmZmZFx1MDEzZlx1MDE0MVx4ZDhcdTAxNTJceGJhXHhkZVx1MDE2Nlx1MDE0YVx1ZmZmZFx1MzI2'@;
put 'MFx1MzI2MVx1MzI2Mlx1MzI2M1x1MzI2NFx1MzI2NVx1MzI2Nlx1MzI2N1x1MzI2OFx1MzI2OVx1MzI2YVx1MzI2Ylx1MzI2Y1x1MzI2ZFx1MzI2ZVx1MzI2Zlx1MzI3MFx1MzI3MVx1MzI3Mlx1MzI3M1x1MzI3NFx1MzI3NVx1MzI3Nlx1MzI3N1x1MzI3OFx1MzI3OVx1MzI3YVx1MzI3Ylx1'@;
put 'MjRkMFx1MjRkMVx1MjRkMlx1MjRkM1x1MjRkNFx1MjRkNVx1MjRkNlx1MjRkN1x1MjRkOFx1MjRkOVx1MjRkYVx1MjRkYlx1MjRkY1x1MjRkZFx1MjRkZVx1MjRkZlx1MjRlMFx1MjRlMVx1MjRlMlx1MjRlM1x1MjRlNFx1MjRlNVx1MjRlNlx1MjRlN1x1MjRlOFx1MjRlOVx1MjQ2MFx1MjQ2'@;
put 'MVx1MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1MjQ2YVx1MjQ2Ylx1MjQ2Y1x1MjQ2ZFx1MjQ2ZVx4YmRcdTIxNTNcdTIxNTRceGJjXHhiZVx1MjE1Ylx1MjE1Y1x1MjE1ZFx1MjE1ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2OF0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PWJbMTY4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjhdW21dXT00MzAwOCttLFJbNDMwMDgrbV09YlsxNjhdW21dKTtmb3IoYlsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiYzVcdWNi'@;
put 'YzZcdWNiYzdcdWNiYzhcdWNiYzlcdWNiY2FcdWNiY2JcdWNiY2NcdWNiY2RcdWNiY2VcdWNiY2ZcdWNiZDBcdWNiZDFcdWNiZDJcdWNiZDNcdWNiZDVcdWNiZDZcdWNiZDdcdWNiZDhcdWNiZDlcdWNiZGFcdWNiZGJcdWNiZGNcdWNiZGRcdWNiZGVcdWNiZGZcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWNiZTBcdWNiZTFcdWNiZTJcdWNiZTNcdWNiZTVcdWNiZTZcdWNiZThcdWNiZWFcdWNiZWJcdWNiZWNcdWNiZWRcdWNiZWVcdWNiZWZcdWNiZjBcdWNiZjFcdWNiZjJcdWNiZjNcdWNiZjRcdWNiZjVcdWNiZjZcdWNiZjdcdWNiZjhcdWNiZjlcdWNiZmFcdWNi'@;
put 'ZmJcdWNiZmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNiZmRcdWNiZmVcdWNiZmZcdWNjMDBcdWNjMDFcdWNjMDJcdWNjMDNcdWNjMDRcdWNjMDVcdWNjMDZcdWNjMDdcdWNjMDhcdWNjMDlcdWNjMGFcdWNjMGJcdWNjMGVcdWNjMGZcdWNjMTFcdWNjMTJcdWNjMTNc'@;
put 'dWNjMTVcdWNjMTZcdWNjMTdcdWNjMThcdWNjMTlcdWNjMWFcdWNjMWJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMFx1'@;
put 'MzIwMVx1MzIwMlx1MzIwM1x1MzIwNFx1MzIwNVx1MzIwNlx1MzIwN1x1MzIwOFx1MzIwOVx1MzIwYVx1MzIwYlx1MzIwY1x1MzIwZFx1MzIwZVx1MzIwZlx1MzIxMFx1MzIxMVx1MzIxMlx1MzIxM1x1MzIxNFx1MzIxNVx1MzIxNlx1MzIxN1x1MzIxOFx1MzIxOVx1MzIxYVx1MzIxYlx1MjQ5'@;
put 'Y1x1MjQ5ZFx1MjQ5ZVx1MjQ5Zlx1MjRhMFx1MjRhMVx1MjRhMlx1MjRhM1x1MjRhNFx1MjRhNVx1MjRhNlx1MjRhN1x1MjRhOFx1MjRhOVx1MjRhYVx1MjRhYlx1MjRhY1x1MjRhZFx1MjRhZVx1MjRhZlx1MjRiMFx1MjRiMVx1MjRiMlx1MjRiM1x1MjRiNFx1MjRiNVx1MjQ3NFx1MjQ3NVx1'@;
put 'MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2OV0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PWJbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjldW21dXT00MzI2NCttLFJbNDMyNjQrbV09YlsxNjldW21dKTtmb3IoYlsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZc'@;
put 'dWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNjMzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFcdWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFc'@;
put 'dWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNjNzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNj'@;
put 'ODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFcdWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBc'@;
put 'dTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMwNWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMw'@;
put 'NmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVcdTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdc'@;
put 'dTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMwOTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9Ylsx'@;
put 'NzBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTcwXVttXV09NDM1MjArbSxSWzQzNTIwK21dPWJbMTcwXVttXSk7Zm9yKGJbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVjYzk0XHVjYzk1XHVjYzk2XHVjYzk3XHVjYzlhXHVjYzliXHVjYzlkXHVjYzllXHVjYzlmXHVjY2ExXHVjY2EyXHVjY2EzXHVjY2E0XHVjY2E1XHVjY2E2XHVjY2E3XHVjY2FhXHVjY2FlXHVjY2FmXHVjY2IwXHVjY2IxXHVjY2IyXHVjY2IzXHVjY2I2XHVjY2I3XHVjY2I5XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2JhXHVjY2JiXHVjY2JkXHVjY2JlXHVjY2JmXHVjY2MwXHVjY2MxXHVjY2MyXHVjY2MzXHVjY2M2XHVjY2M4XHVjY2NhXHVjY2NiXHVjY2NjXHVjY2NkXHVjY2NlXHVjY2NmXHVjY2QxXHVjY2QyXHVjY2QzXHVjY2Q1XHVjY2Q2XHVjY2Q3'@;
put 'XHVjY2Q4XHVjY2Q5XHVjY2RhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjY2RiXHVjY2RjXHVjY2RkXHVjY2RlXHVjY2RmXHVjY2UwXHVjY2UxXHVjY2UyXHVjY2UzXHVjY2U1XHVjY2U2XHVjY2U3XHVjY2U4XHVjY2U5XHVjY2VhXHVjY2ViXHVjY2VkXHVjY2VlXHVj'@;
put 'Y2VmXHVjY2YxXHVjY2YyXHVjY2YzXHVjY2Y0XHVjY2Y1XHVjY2Y2XHVjY2Y3XHVjY2Y4XHVjY2Y5XHVjY2ZhXHVjY2ZiXHVjY2ZjXHVjY2ZkXHUzMGExXHUzMGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFl'@;
put 'XHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUz'@;
put 'MGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1'@;
put 'XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPWJbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3MV1bbV1dPTQzNzc2K20sUls0Mzc3NittXT1iWzE3MV1bbV0pO2ZvcihiWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMlx1Y2QwM1x1Y2QwNFx1Y2QwNVx1Y2QwNlx1Y2QwN1x1Y2QwYVx1Y2QwYlx1Y2QwZFx1Y2QwZVx1Y2QwZlx1Y2QxMVx1Y2QxMlx1Y2QxM1x1Y2QxNFx1Y2QxNVx1Y2QxNlx1Y2QxN1x1Y2QxYVx1Y2QxY1x1Y2QxZVx1Y2QxZlx1'@;
put 'Y2QyMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QyMVx1Y2QyMlx1Y2QyM1x1Y2QyNVx1Y2QyNlx1Y2QyN1x1Y2QyOVx1Y2QyYVx1Y2QyYlx1Y2QyZFx1Y2QyZVx1Y2QyZlx1Y2QzMFx1Y2QzMVx1Y2QzMlx1Y2QzM1x1Y2QzNFx1Y2QzNVx1Y2QzNlx1Y2QzN1x1Y2Qz'@;
put 'OFx1Y2QzYVx1Y2QzYlx1Y2QzY1x1Y2QzZFx1Y2QzZVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2QzZlx1Y2Q0MFx1Y2Q0MVx1Y2Q0Mlx1Y2Q0M1x1Y2Q0NFx1Y2Q0NVx1Y2Q0Nlx1Y2Q0N1x1Y2Q0OFx1Y2Q0OVx1Y2Q0YVx1Y2Q0Ylx1Y2Q0Y1x1Y2Q0ZFx1Y2Q0ZVx1'@;
put 'Y2Q0Zlx1Y2Q1MFx1Y2Q1MVx1Y2Q1Mlx1Y2Q1M1x1Y2Q1NFx1Y2Q1NVx1Y2Q1Nlx1Y2Q1N1x1Y2Q1OFx1Y2Q1OVx1Y2Q1YVx1Y2Q1Ylx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQx'@;
put 'YVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0'@;
put 'MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzJdW21dXT00NDAzMittLFJbNDQwMzIrbV09YlsxNzJdW21dKTtmb3IoYlsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNkNjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2Rc'@;
put 'dWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFcdWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNk'@;
put 'OTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJc'@;
put 'dWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNcdWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTczXVttXV09NDQyODgrbSxSWzQ0Mjg4K21dPWJbMTczXVttXSk7Zm9yKGJbMTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGM2XHVjZGM3XHVjZGM4XHVjZGM5XHVjZGNhXHVjZGNiXHVjZGNkXHVjZGNlXHVjZGNmXHVjZGQxXHVjZGQyXHVjZGQzXHVjZGQ0XHVjZGQ1XHVjZGQ2XHVjZGQ3XHVjZGQ4XHVjZGQ5XHVjZGRhXHVjZGRiXHVjZGRj'@;
put 'XHVjZGRkXHVjZGRlXHVjZGRmXHVjZGUwXHVjZGUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZGUyXHVjZGUzXHVjZGU0XHVjZGU1XHVjZGU2XHVjZGU3XHVjZGU5XHVjZGVhXHVjZGViXHVjZGVkXHVjZGVlXHVjZGVmXHVjZGYxXHVjZGYyXHVjZGYzXHVjZGY0XHVj'@;
put 'ZGY1XHVjZGY2XHVjZGY3XHVjZGZhXHVjZGZjXHVjZGZlXHVjZGZmXHVjZTAwXHVjZTAxXHVjZTAyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZTAzXHVjZTA1XHVjZTA2XHVjZTA3XHVjZTA5XHVjZTBhXHVjZTBiXHVjZTBkXHVjZTBlXHVjZTBmXHVjZTEwXHVjZTEx'@;
put 'XHVjZTEyXHVjZTEzXHVjZTE1XHVjZTE2XHVjZTE3XHVjZTE4XHVjZTFhXHVjZTFiXHVjZTFjXHVjZTFkXHVjZTFlXHVjZTFmXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3NF1bbV1dPTQ0NTQ0K20sUls0NDU0NCttXT1iWzE3NF1bbV0pO2ZvcihiWzE3NV09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2UyY1x1Y2UyZFx1Y2UyZVx1Y2UyZlx1Y2UzMlx1Y2UzNFx1Y2UzNlx1Y2UzN1x1Y2UzOFx1Y2UzOVx1Y2UzYVx1Y2UzYlx1Y2UzY1x1Y2UzZFx1Y2UzZVx1Y2UzZlx1Y2U0MFx1Y2U0MVx1Y2U0'@;
put 'Mlx1Y2U0M1x1Y2U0NFx1Y2U0NVx1Y2U0Nlx1Y2U0N1x1Y2U0OFx1Y2U0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U0YVx1Y2U0Ylx1Y2U0Y1x1Y2U0ZFx1Y2U0ZVx1Y2U0Zlx1Y2U1MFx1Y2U1MVx1Y2U1Mlx1Y2U1M1x1Y2U1NFx1Y2U1NVx1Y2U1Nlx1Y2U1N1x1'@;
put 'Y2U1YVx1Y2U1Ylx1Y2U1ZFx1Y2U1ZVx1Y2U2Mlx1Y2U2M1x1Y2U2NFx1Y2U2NVx1Y2U2Nlx1Y2U2N1x1Y2U2YVx1Y2U2Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2U2ZVx1Y2U2Zlx1Y2U3MFx1Y2U3MVx1Y2U3Mlx1Y2U3M1x1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3'@;
put 'YVx1Y2U3Ylx1Y2U3ZFx1Y2U3ZVx1Y2U3Zlx1Y2U4MFx1Y2U4MVx1Y2U4Mlx1Y2U4M1x1Y2U4Nlx1Y2U4OFx1Y2U4YVx1Y2U4Ylx1Y2U4Y1x1Y2U4ZFx1Y2U4ZVx1Y2U4Zlx1Y2U5Mlx1Y2U5M1x1Y2U5NVx1Y2U5Nlx1Y2U5N1x1Y2U5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzVdW21dXT00NDgwMCttLFJbNDQ4MDArbV09YlsxNzVdW21dKTtmb3IoYlsx'@;
put 'NzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNl'@;
put 'YjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdc'@;
put 'dWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNlZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNl'@;
put 'ZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRc'@;
put 'dWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFjMTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFj'@;
put 'NDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhcdWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBc'@;
put 'dWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFjYmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFj'@;
put 'ZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc2XVttXV09NDUwNTYrbSxSWzQ1MDU2K21dPWJbMTc2'@;
put 'XVttXSk7Zm9yKGJbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjAyXHVjZjAzXHVjZjA1XHVjZjA2XHVjZjA3XHVjZjA5XHVjZjBhXHVjZjBiXHVjZjBjXHVjZjBkXHVjZjBlXHVjZjBmXHVjZjEyXHVjZjE0XHVj'@;
put 'ZjE2XHVjZjE3XHVjZjE4XHVjZjE5XHVjZjFhXHVjZjFiXHVjZjFkXHVjZjFlXHVjZjFmXHVjZjIxXHVjZjIyXHVjZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjI1XHVjZjI2XHVjZjI3XHVjZjI4XHVjZjI5XHVjZjJhXHVjZjJiXHVjZjJlXHVjZjMyXHVjZjMz'@;
put 'XHVjZjM0XHVjZjM1XHVjZjM2XHVjZjM3XHVjZjM5XHVjZjNhXHVjZjNiXHVjZjNjXHVjZjNkXHVjZjNlXHVjZjNmXHVjZjQwXHVjZjQxXHVjZjQyXHVjZjQzXHVjZjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjZjQ1XHVjZjQ2XHVjZjQ3XHVjZjQ4XHVjZjQ5XHVj'@;
put 'ZjRhXHVjZjRiXHVjZjRjXHVjZjRkXHVjZjRlXHVjZjRmXHVjZjUwXHVjZjUxXHVjZjUyXHVjZjUzXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkXHVjZjVlXHVjZjVmXHVjZjYwXHVjZjYxXHVjZjYyXHVjZjYzXHVjZjY2XHVjZjY4XHVjZjZhXHVjZjZiXHVjZjZjXHVhZDBj'@;
put 'XHVhZDBkXHVhZDBmXHVhZDExXHVhZDE4XHVhZDFjXHVhZDIwXHVhZDI5XHVhZDJjXHVhZDJkXHVhZDM0XHVhZDM1XHVhZDM4XHVhZDNjXHVhZDQ0XHVhZDQ1XHVhZDQ3XHVhZDQ5XHVhZDUwXHVhZDU0XHVhZDU4XHVhZDYxXHVhZDYzXHVhZDZjXHVhZDZkXHVhZDcwXHVhZDczXHVhZDc0XHVh'@;
put 'ZDc1XHVhZDc2XHVhZDdiXHVhZDdjXHVhZDdkXHVhZDdmXHVhZDgxXHVhZDgyXHVhZDg4XHVhZDg5XHVhZDhjXHVhZDkwXHVhZDljXHVhZDlkXHVhZGE0XHVhZGI3XHVhZGMwXHVhZGMxXHVhZGM0XHVhZGM4XHVhZGQwXHVhZGQxXHVhZGQzXHVhZGRjXHVhZGUwXHVhZGU0XHVhZGY4XHVhZGY5'@;
put 'XHVhZGZjXHVhZGZmXHVhZTAwXHVhZTAxXHVhZTA4XHVhZTA5XHVhZTBiXHVhZTBkXHVhZTE0XHVhZTMwXHVhZTMxXHVhZTM0XHVhZTM3XHVhZTM4XHVhZTNhXHVhZTQwXHVhZTQxXHVhZTQzXHVhZTQ1XHVhZTQ2XHVhZTRhXHVhZTRjXHVhZTRkXHVhZTRlXHVhZTUwXHVhZTU0XHVhZTU2XHVh'@;
put 'ZTVjXHVhZTVkXHVhZTVmXHVhZTYwXHVhZTYxXHVhZTY1XHVhZTY4XHVhZTY5XHVhZTZjXHVhZTcwXHVhZTc4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3N11bbV1dPTQ1MzEyK20sUls0'@;
put 'NTMxMittXT1iWzE3N11bbV0pO2ZvcihiWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y2ZFx1Y2Y2ZVx1Y2Y2Zlx1Y2Y3Mlx1Y2Y3M1x1Y2Y3NVx1Y2Y3Nlx1Y2Y3N1x1Y2Y3OVx1Y2Y3YVx1Y2Y3Ylx1Y2Y3Y1x1'@;
put 'Y2Y3ZFx1Y2Y3ZVx1Y2Y3Zlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4M1x1Y2Y4NFx1Y2Y4Nlx1Y2Y4N1x1Y2Y4OFx1Y2Y4OVx1Y2Y4YVx1Y2Y4Ylx1Y2Y4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2Y4ZVx1Y2Y4Zlx1Y2Y5MFx1Y2Y5MVx1Y2Y5Mlx1Y2Y5M1x1Y2Y5NFx1Y2Y5'@;
put 'NVx1Y2Y5Nlx1Y2Y5N1x1Y2Y5OFx1Y2Y5OVx1Y2Y5YVx1Y2Y5Ylx1Y2Y5Y1x1Y2Y5ZFx1Y2Y5ZVx1Y2Y5Zlx1Y2ZhMFx1Y2ZhMlx1Y2ZhM1x1Y2ZhNFx1Y2ZhNVx1Y2ZhNlx1Y2ZhN1x1Y2ZhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Y2ZhYVx1Y2ZhYlx1Y2ZhY1x1'@;
put 'Y2ZhZFx1Y2ZhZVx1Y2ZhZlx1Y2ZiMVx1Y2ZiMlx1Y2ZiM1x1Y2ZiNFx1Y2ZiNVx1Y2ZiNlx1Y2ZiN1x1Y2ZiOFx1Y2ZiOVx1Y2ZiYVx1Y2ZiYlx1Y2ZiY1x1Y2ZiZFx1Y2ZiZVx1Y2ZiZlx1Y2ZjMFx1Y2ZjMVx1Y2ZjMlx1Y2ZjM1x1Y2ZjNVx1Y2ZjNlx1Y2ZjN1x1Y2ZjOFx1Y2ZjOVx1Y2Zj'@;
put 'YVx1Y2ZjYlx1YWU3OVx1YWU3Ylx1YWU3Y1x1YWU3ZFx1YWU4NFx1YWU4NVx1YWU4Y1x1YWViY1x1YWViZFx1YWViZVx1YWVjMFx1YWVjNFx1YWVjY1x1YWVjZFx1YWVjZlx1YWVkMFx1YWVkMVx1YWVkOFx1YWVkOVx1YWVkY1x1YWVlOFx1YWVlYlx1YWVlZFx1YWVmNFx1YWVmOFx1YWVmY1x1'@;
put 'YWYwN1x1YWYwOFx1YWYwZFx1YWYxMFx1YWYyY1x1YWYyZFx1YWYzMFx1YWYzMlx1YWYzNFx1YWYzY1x1YWYzZFx1YWYzZlx1YWY0MVx1YWY0Mlx1YWY0M1x1YWY0OFx1YWY0OVx1YWY1MFx1YWY1Y1x1YWY1ZFx1YWY2NFx1YWY2NVx1YWY3OVx1YWY4MFx1YWY4NFx1YWY4OFx1YWY5MFx1YWY5'@;
put 'MVx1YWY5NVx1YWY5Y1x1YWZiOFx1YWZiOVx1YWZiY1x1YWZjMFx1YWZjN1x1YWZjOFx1YWZjOVx1YWZjYlx1YWZjZFx1YWZjZVx1YWZkNFx1YWZkY1x1YWZlOFx1YWZlOVx1YWZmMFx1YWZmMVx1YWZmNFx1YWZmOFx1YjAwMFx1YjAwMVx1YjAwNFx1YjAwY1x1YjAxMFx1YjAxNFx1YjAxY1x1'@;
put 'YjAxZFx1YjAyOFx1YjA0NFx1YjA0NVx1YjA0OFx1YjA0YVx1YjA0Y1x1YjA0ZVx1YjA1M1x1YjA1NFx1YjA1NVx1YjA1N1x1YjA1OVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzhdW21d'@;
put 'XT00NTU2OCttLFJbNDU1NjgrbV09YlsxNzhdW21dKTtmb3IoYlsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVc'@;
put 'dWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJcdWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNm'@;
put 'ZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNmZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJc'@;
put 'dWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdcdWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQw'@;
put 'MjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIwOGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZc'@;
put 'dWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlcdWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIx'@;
put 'MWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIxMzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJc'@;
put 'dWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2NcdWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3OV1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGVlW2JbMTc5XVttXV09NDU4MjQrbSxSWzQ1ODI0K21dPWJbMTc5XVttXSk7Zm9yKGJbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDJlXHVkMDJmXHVkMDMwXHVkMDMxXHVkMDMyXHVkMDMzXHVkMDM2XHVkMDM3'@;
put 'XHVkMDM5XHVkMDNhXHVkMDNiXHVkMDNkXHVkMDNlXHVkMDNmXHVkMDQwXHVkMDQxXHVkMDQyXHVkMDQzXHVkMDQ2XHVkMDQ4XHVkMDRhXHVkMDRiXHVkMDRjXHVkMDRkXHVkMDRlXHVkMDRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMDUxXHVkMDUyXHVkMDUzXHVk'@;
put 'MDU1XHVkMDU2XHVkMDU3XHVkMDU5XHVkMDVhXHVkMDViXHVkMDVjXHVkMDVkXHVkMDVlXHVkMDVmXHVkMDYxXHVkMDYyXHVkMDYzXHVkMDY0XHVkMDY1XHVkMDY2XHVkMDY3XHVkMDY4XHVkMDY5XHVkMDZhXHVkMDZiXHVkMDZlXHVkMDZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVkMDcxXHVkMDcyXHVkMDczXHVkMDc1XHVkMDc2XHVkMDc3XHVkMDc4XHVkMDc5XHVkMDdhXHVkMDdiXHVkMDdlXHVkMDdmXHVkMDgwXHVkMDgyXHVkMDgzXHVkMDg0XHVkMDg1XHVkMDg2XHVkMDg3XHVkMDg4XHVkMDg5XHVkMDhhXHVkMDhiXHVkMDhjXHVkMDhkXHVkMDhlXHVk'@;
put 'MDhmXHVkMDkwXHVkMDkxXHVkMDkyXHVkMDkzXHVkMDk0XHViMWRmXHViMWU4XHViMWU5XHViMWVjXHViMWYwXHViMWY5XHViMWZiXHViMWZkXHViMjA0XHViMjA1XHViMjA4XHViMjBiXHViMjBjXHViMjE0XHViMjE1XHViMjE3XHViMjE5XHViMjIwXHViMjM0XHViMjNjXHViMjU4XHViMjVj'@;
put 'XHViMjYwXHViMjY4XHViMjY5XHViMjc0XHViMjc1XHViMjdjXHViMjg0XHViMjg1XHViMjg5XHViMjkwXHViMjkxXHViMjk0XHViMjk4XHViMjk5XHViMjlhXHViMmEwXHViMmExXHViMmEzXHViMmE1XHViMmE2XHViMmFhXHViMmFjXHViMmIwXHViMmI0XHViMmM4XHViMmM5XHViMmNjXHVi'@;
put 'MmQwXHViMmQyXHViMmQ4XHViMmQ5XHViMmRiXHViMmRkXHViMmUyXHViMmU0XHViMmU1XHViMmU2XHViMmU4XHViMmViXHViMmVjXHViMmVkXHViMmVlXHViMmVmXHViMmYzXHViMmY0XHViMmY1XHViMmY3XHViMmY4XHViMmY5XHViMmZhXHViMmZiXHViMmZmXHViMzAwXHViMzAxXHViMzA0'@;
put 'XHViMzA4XHViMzEwXHViMzExXHViMzEzXHViMzE0XHViMzE1XHViMzFjXHViMzU0XHViMzU1XHViMzU2XHViMzU4XHViMzViXHViMzVjXHViMzVlXHViMzVmXHViMzY0XHViMzY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTgwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODBdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihlZVtiWzE4MF1bbV1dPTQ2MDgwK20sUls0NjA4MCttXT1iWzE4MF1bbV0pO2ZvcihiWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDA5NVx1ZDA5Nlx1ZDA5N1x1ZDA5OFx1ZDA5OVx1ZDA5'@;
put 'YVx1ZDA5Ylx1ZDA5Y1x1ZDA5ZFx1ZDA5ZVx1ZDA5Zlx1ZDBhMFx1ZDBhMVx1ZDBhMlx1ZDBhM1x1ZDBhNlx1ZDBhN1x1ZDBhOVx1ZDBhYVx1ZDBhYlx1ZDBhZFx1ZDBhZVx1ZDBhZlx1ZDBiMFx1ZDBiMVx1ZDBiMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBiM1x1'@;
put 'ZDBiNlx1ZDBiOFx1ZDBiYVx1ZDBiYlx1ZDBiY1x1ZDBiZFx1ZDBiZVx1ZDBiZlx1ZDBjMlx1ZDBjM1x1ZDBjNVx1ZDBjNlx1ZDBjN1x1ZDBjYVx1ZDBjYlx1ZDBjY1x1ZDBjZFx1ZDBjZVx1ZDBjZlx1ZDBkMlx1ZDBkNlx1ZDBkN1x1ZDBkOFx1ZDBkOVx1ZDBkYVx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNVx1ZDBlNlx1ZDBlN1x1ZDBlOFx1ZDBlOVx1ZDBlYVx1ZDBlYlx1ZDBlZVx1ZDBmMlx1ZDBmM1x1ZDBmNFx1ZDBmNVx1ZDBmNlx1ZDBmN1x1ZDBmOVx1ZDBmYVx1ZDBmYlx1ZDBmY1x1'@;
put 'ZDBmZFx1ZDBmZVx1ZDBmZlx1ZDEwMFx1ZDEwMVx1ZDEwMlx1ZDEwM1x1ZDEwNFx1YjM2N1x1YjM2OVx1YjM2Ylx1YjM2ZVx1YjM3MFx1YjM3MVx1YjM3NFx1YjM3OFx1YjM4MFx1YjM4MVx1YjM4M1x1YjM4NFx1YjM4NVx1YjM4Y1x1YjM5MFx1YjM5NFx1YjNhMFx1YjNhMVx1YjNhOFx1YjNh'@;
put 'Y1x1YjNjNFx1YjNjNVx1YjNjOFx1YjNjYlx1YjNjY1x1YjNjZVx1YjNkMFx1YjNkNFx1YjNkNVx1YjNkN1x1YjNkOVx1YjNkYlx1YjNkZFx1YjNlMFx1YjNlNFx1YjNlOFx1YjNmY1x1YjQxMFx1YjQxOFx1YjQxY1x1YjQyMFx1YjQyOFx1YjQyOVx1YjQyYlx1YjQzNFx1YjQ1MFx1YjQ1MVx1'@;
put 'YjQ1NFx1YjQ1OFx1YjQ2MFx1YjQ2MVx1YjQ2M1x1YjQ2NVx1YjQ2Y1x1YjQ4MFx1YjQ4OFx1YjQ5ZFx1YjRhNFx1YjRhOFx1YjRhY1x1YjRiNVx1YjRiN1x1YjRiOVx1YjRjMFx1YjRjNFx1YjRjOFx1YjRkMFx1YjRkNVx1YjRkY1x1YjRkZFx1YjRlMFx1YjRlM1x1YjRlNFx1YjRlNlx1YjRl'@;
put 'Y1x1YjRlZFx1YjRlZlx1YjRmMVx1YjRmOFx1YjUxNFx1YjUxNVx1YjUxOFx1YjUxYlx1YjUxY1x1YjUyNFx1YjUyNVx1YjUyN1x1YjUyOFx1YjUyOVx1YjUyYVx1YjUzMFx1YjUzMVx1YjUzNFx1YjUzOFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PWJbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODFdW21dXT00NjMzNittLFJbNDYzMzYrbV09YlsxODFdW21dKTtmb3IoYlsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQx'@;
put 'MDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRcdWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQxMmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlcdWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBc'@;
put 'dWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1'@;
put 'YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRcdWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRc'@;
put 'dWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3'@;
put 'NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2RcdWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODJdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT1iWzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTgyXVttXV09NDY1OTIrbSxSWzQ2NTkyK21dPWJbMTgyXVttXSk7Zm9yKGJbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMTZlXHVk'@;
put 'MTZmXHVkMTcwXHVkMTcxXHVkMTcyXHVkMTczXHVkMTc0XHVkMTc1XHVkMTc2XHVkMTc3XHVkMTc4XHVkMTc5XHVkMTdhXHVkMTdiXHVkMTdkXHVkMTdlXHVkMTdmXHVkMTgwXHVkMTgxXHVkMTgyXHVkMTgzXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVkMThiXHVkMThjXHVkMThkXHVkMThlXHVkMThmXHVkMTkwXHVkMTkxXHVkMTkyXHVkMTkzXHVkMTk0XHVkMTk1XHVkMTk2XHVkMTk3XHVkMTk4XHVkMTk5XHVkMTlhXHVkMTliXHVkMTljXHVkMTlkXHVkMTllXHVkMTlmXHVkMWEyXHVkMWEzXHVkMWE1XHVk'@;
put 'MWE2XHVkMWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMWE5XHVkMWFhXHVkMWFiXHVkMWFjXHVkMWFkXHVkMWFlXHVkMWFmXHVkMWIyXHVkMWI0XHVkMWI2XHVkMWI3XHVkMWI4XHVkMWI5XHVkMWJiXHVkMWJkXHVkMWJlXHVkMWJmXHVkMWMxXHVkMWMyXHVkMWMz'@;
put 'XHVkMWM0XHVkMWM1XHVkMWM2XHVkMWM3XHVkMWM4XHVkMWM5XHVkMWNhXHVkMWNiXHVkMWNjXHVkMWNkXHVkMWNlXHVkMWNmXHViNzk4XHViNzk5XHViNzljXHViN2EwXHViN2E4XHViN2E5XHViN2FiXHViN2FjXHViN2FkXHViN2I0XHViN2I1XHViN2I4XHViN2M3XHViN2M5XHViN2VjXHVi'@;
put 'N2VkXHViN2YwXHViN2Y0XHViN2ZjXHViN2ZkXHViN2ZmXHViODAwXHViODAxXHViODA3XHViODA4XHViODA5XHViODBjXHViODEwXHViODE4XHViODE5XHViODFiXHViODFkXHViODI0XHViODI1XHViODI4XHViODJjXHViODM0XHViODM1XHViODM3XHViODM4XHViODM5XHViODQwXHViODQ0'@;
put 'XHViODUxXHViODUzXHViODVjXHViODVkXHViODYwXHViODY0XHViODZjXHViODZkXHViODZmXHViODcxXHViODc4XHViODdjXHViODhkXHViOGE4XHViOGIwXHViOGI0XHViOGI4XHViOGMwXHViOGMxXHViOGMzXHViOGM1XHViOGNjXHViOGQwXHViOGQ0XHViOGRkXHViOGRmXHViOGUxXHVi'@;
put 'OGU4XHViOGU5XHViOGVjXHViOGYwXHViOGY4XHViOGY5XHViOGZiXHViOGZkXHViOTA0XHViOTE4XHViOTIwXHViOTNjXHViOTNkXHViOTQwXHViOTQ0XHViOTRjXHViOTRmXHViOTUxXHViOTU4XHViOTU5XHViOTVjXHViOTYwXHViOTY4XHViOTY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PWJbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4M11bbV1dPTQ2ODQ4K20sUls0Njg0OCttXT1iWzE4M11bbV0pO2ZvcihiWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZDFkMFx1ZDFkMVx1ZDFkMlx1ZDFkM1x1ZDFkNFx1ZDFkNVx1ZDFkNlx1ZDFkN1x1ZDFkOVx1ZDFkYVx1ZDFkYlx1ZDFkY1x1ZDFkZFx1ZDFkZVx1ZDFkZlx1ZDFlMFx1ZDFlMVx1ZDFlMlx1ZDFlM1x1ZDFlNFx1ZDFlNVx1ZDFlNlx1ZDFlN1x1ZDFlOFx1ZDFlOVx1ZDFlYVx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDFlYlx1ZDFlY1x1ZDFlZFx1ZDFlZVx1ZDFlZlx1ZDFmMFx1ZDFmMVx1ZDFmMlx1ZDFmM1x1ZDFmNVx1ZDFmNlx1ZDFmN1x1ZDFmOVx1ZDFmYVx1ZDFmYlx1ZDFmY1x1ZDFmZFx1ZDFmZVx1ZDFmZlx1ZDIwMFx1ZDIwMVx1ZDIwMlx1'@;
put 'ZDIwM1x1ZDIwNFx1ZDIwNVx1ZDIwNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDIwOFx1ZDIwYVx1ZDIwYlx1ZDIwY1x1ZDIwZFx1ZDIwZVx1ZDIwZlx1ZDIxMVx1ZDIxMlx1ZDIxM1x1ZDIxNFx1ZDIxNVx1ZDIxNlx1ZDIxN1x1ZDIxOFx1ZDIxOVx1ZDIxYVx1ZDIx'@;
put 'Ylx1ZDIxY1x1ZDIxZFx1ZDIxZVx1ZDIxZlx1ZDIyMFx1ZDIyMVx1ZDIyMlx1ZDIyM1x1ZDIyNFx1ZDIyNVx1ZDIyNlx1ZDIyN1x1ZDIyOFx1ZDIyOVx1Yjk2Ylx1Yjk2ZFx1Yjk3NFx1Yjk3NVx1Yjk3OFx1Yjk3Y1x1Yjk4NFx1Yjk4NVx1Yjk4N1x1Yjk4OVx1Yjk4YVx1Yjk4ZFx1Yjk4ZVx1'@;
put 'YjlhY1x1YjlhZFx1YjliMFx1YjliNFx1YjliY1x1YjliZFx1YjliZlx1YjljMVx1YjljOFx1YjljOVx1YjljY1x1YjljZVx1YjljZlx1YjlkMFx1YjlkMVx1YjlkMlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1Yjlm'@;
put 'NFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1YjlmYVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1'@;
put 'YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmY1x1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT1iWzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODRdW21dXT00NzEwNCttLFJbNDcxMDQrbV09YlsxODRdW21dKTtmb3IoYlsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZcdWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQy'@;
put 'NGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQyNTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFc'@;
put 'dWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQy'@;
put 'NzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQyODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRc'@;
put 'dWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRcdWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJi'@;
put 'YzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJjMDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZc'@;
put 'dWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJj'@;
put 'OTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg1XVttXV09NDczNjArbSxSWzQ3MzYwK21dPWJbMTg1XVttXSk7Zm9yKGJbMTg2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjhkXHVkMjhlXHVkMjhmXHVkMjkyXHVkMjkzXHVkMjk0XHVkMjk2XHVkMjk3XHVkMjk4XHVkMjk5XHVkMjlhXHVkMjliXHVkMjlkXHVkMjllXHVkMjlmXHVkMmExXHVkMmEyXHVkMmEzXHVkMmE1XHVkMmE2XHVkMmE3XHVkMmE4XHVk'@;
put 'MmE5XHVkMmFhXHVkMmFiXHVkMmFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyXHVkMmIzXHVkMmI0XHVkMmI1XHVkMmI2XHVkMmI3XHVkMmJhXHVkMmJiXHVkMmJkXHVkMmJlXHVkMmMxXHVkMmMzXHVkMmM0XHVkMmM1XHVkMmM2'@;
put 'XHVkMmM3XHVkMmNhXHVkMmNjXHVkMmNkXHVkMmNlXHVkMmNmXHVkMmQwXHVkMmQxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5XHVkMmRhXHVkMmRiXHVkMmRkXHVkMmRlXHVkMmRmXHVkMmUwXHVkMmUxXHVk'@;
put 'MmUyXHVkMmUzXHVkMmU2XHVkMmU3XHVkMmU4XHVkMmU5XHVkMmVhXHVkMmViXHVkMmVjXHVkMmVkXHVkMmVlXHVkMmVmXHVkMmYyXHVkMmYzXHVkMmY1XHVkMmY2XHVkMmY3XHVkMmY5XHVkMmZhXHViYzk5XHViYzlhXHViY2EwXHViY2ExXHViY2E0XHViY2E3XHViY2E4XHViY2IwXHViY2Ix'@;
put 'XHViY2IzXHViY2I0XHViY2I1XHViY2JjXHViY2JkXHViY2MwXHViY2M0XHViY2NkXHViY2NmXHViY2QwXHViY2QxXHViY2Q1XHViY2Q4XHViY2RjXHViY2Y0XHViY2Y1XHViY2Y2XHViY2Y4XHViY2ZjXHViZDA0XHViZDA1XHViZDA3XHViZDA5XHViZDEwXHViZDE0XHViZDI0XHViZDJjXHVi'@;
put 'ZDQwXHViZDQ4XHViZDQ5XHViZDRjXHViZDUwXHViZDU4XHViZDU5XHViZDY0XHViZDY4XHViZDgwXHViZDgxXHViZDg0XHViZDg3XHViZDg4XHViZDg5XHViZDhhXHViZDkwXHViZDkxXHViZDkzXHViZDk1XHViZDk5XHViZDlhXHViZDljXHViZGE0XHViZGIwXHViZGI4XHViZGQ0XHViZGQ1'@;
put 'XHViZGQ4XHViZGRjXHViZGU5XHViZGYwXHViZGY0XHViZGY4XHViZTAwXHViZTAzXHViZTA1XHViZTBjXHViZTBkXHViZTEwXHViZTE0XHViZTFjXHViZTFkXHViZTFmXHViZTQ0XHViZTQ1XHViZTQ4XHViZTRjXHViZTRlXHViZTU0XHViZTU1XHViZTU3XHViZTU5XHViZTVhXHViZTViXHVi'@;
put 'ZTYwXHViZTYxXHViZTY0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4Nl1bbV1dPTQ3NjE2K20sUls0NzYxNittXT1iWzE4Nl1bbV0pO2ZvcihiWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDJmYlx1ZDJmY1x1ZDJmZFx1ZDJmZVx1ZDJmZlx1ZDMwMlx1ZDMwNFx1ZDMwNlx1ZDMwN1x1ZDMwOFx1ZDMwOVx1ZDMwYVx1ZDMwYlx1ZDMwZlx1ZDMxMVx1ZDMxMlx1ZDMxM1x1ZDMxNVx1ZDMxN1x1ZDMxOFx1'@;
put 'ZDMxOVx1ZDMxYVx1ZDMxYlx1ZDMxZVx1ZDMyMlx1ZDMyM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMVx1ZDMzMlx1ZDMzM1x1ZDMzNFx1ZDMzNVx1ZDMzNlx1ZDMzN1x1ZDMz'@;
put 'YVx1ZDMzZVx1ZDMzZlx1ZDM0MFx1ZDM0MVx1ZDM0Mlx1ZDM0M1x1ZDM0Nlx1ZDM0N1x1ZDM0OFx1ZDM0OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDM0YVx1ZDM0Ylx1ZDM0Y1x1ZDM0ZFx1ZDM0ZVx1ZDM0Zlx1ZDM1MFx1ZDM1MVx1ZDM1Mlx1ZDM1M1x1ZDM1NFx1'@;
put 'ZDM1NVx1ZDM1Nlx1ZDM1N1x1ZDM1OFx1ZDM1OVx1ZDM1YVx1ZDM1Ylx1ZDM1Y1x1ZDM1ZFx1ZDM1ZVx1ZDM1Zlx1ZDM2MFx1ZDM2MVx1ZDM2Mlx1ZDM2M1x1ZDM2NFx1ZDM2NVx1ZDM2Nlx1ZDM2N1x1ZDM2OFx1ZDM2OVx1YmU2OFx1YmU2YVx1YmU3MFx1YmU3MVx1YmU3M1x1YmU3NFx1YmU3'@;
put 'NVx1YmU3Ylx1YmU3Y1x1YmU3ZFx1YmU4MFx1YmU4NFx1YmU4Y1x1YmU4ZFx1YmU4Zlx1YmU5MFx1YmU5MVx1YmU5OFx1YmU5OVx1YmVhOFx1YmVkMFx1YmVkMVx1YmVkNFx1YmVkN1x1YmVkOFx1YmVlMFx1YmVlM1x1YmVlNFx1YmVlNVx1YmVlY1x1YmYwMVx1YmYwOFx1YmYwOVx1YmYxOFx1'@;
put 'YmYxOVx1YmYxYlx1YmYxY1x1YmYxZFx1YmY0MFx1YmY0MVx1YmY0NFx1YmY0OFx1YmY1MFx1YmY1MVx1YmY1NVx1YmY5NFx1YmZiMFx1YmZjNVx1YmZjY1x1YmZjZFx1YmZkMFx1YmZkNFx1YmZkY1x1YmZkZlx1YmZlMVx1YzAzY1x1YzA1MVx1YzA1OFx1YzA1Y1x1YzA2MFx1YzA2OFx1YzA2'@;
put 'OVx1YzA5MFx1YzA5MVx1YzA5NFx1YzA5OFx1YzBhMFx1YzBhMVx1YzBhM1x1YzBhNVx1YzBhY1x1YzBhZFx1YzBhZlx1YzBiMFx1YzBiM1x1YzBiNFx1YzBiNVx1YzBiNlx1YzBiY1x1YzBiZFx1YzBiZlx1YzBjMFx1YzBjMVx1YzBjNVx1YzBjOFx1YzBjOVx1YzBjY1x1YzBkMFx1YzBkOFx1'@;
put 'YzBkOVx1YzBkYlx1YzBkY1x1YzBkZFx1YzBlNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODddW21dXT00Nzg3MittLFJbNDc4NzIrbV09YlsxODddW21dKTtmb3IoYlsxODhdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNcdWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2Jc'@;
put 'dWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQz'@;
put 'OWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlc'@;
put 'dWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQzY2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMw'@;
put 'ZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBcdWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhc'@;
put 'dWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMxNjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMx'@;
put 'YTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBcdWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlc'@;
put 'dWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg4XVttXV09NDgxMjgrbSxSWzQ4MTI4K21dPWJbMTg4XVttXSk7Zm9y'@;
put 'KGJbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Q3XHVkM2Q5XHVkM2RhXHVkM2RiXHVkM2RjXHVkM2RkXHVkM2RlXHVkM2RmXHVkM2UwXHVkM2UyXHVkM2U0XHVkM2U1XHVkM2U2XHVkM2U3XHVkM2U4XHVkM2U5'@;
put 'XHVkM2VhXHVkM2ViXHVkM2VlXHVkM2VmXHVkM2YxXHVkM2YyXHVkM2YzXHVkM2Y1XHVkM2Y2XHVkM2Y3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkM2Y4XHVkM2Y5XHVkM2ZhXHVkM2ZiXHVkM2ZlXHVkNDAwXHVkNDAyXHVkNDAzXHVkNDA0XHVkNDA1XHVkNDA2XHVk'@;
put 'NDA3XHVkNDA5XHVkNDBhXHVkNDBiXHVkNDBjXHVkNDBkXHVkNDBlXHVkNDBmXHVkNDEwXHVkNDExXHVkNDEyXHVkNDEzXHVkNDE0XHVkNDE1XHVkNDE2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNDE3XHVkNDE4XHVkNDE5XHVkNDFhXHVkNDFiXHVkNDFjXHVkNDFl'@;
put 'XHVkNDFmXHVkNDIwXHVkNDIxXHVkNDIyXHVkNDIzXHVkNDI0XHVkNDI1XHVkNDI2XHVkNDI3XHVkNDI4XHVkNDI5XHVkNDJhXHVkNDJiXHVkNDJjXHVkNDJkXHVkNDJlXHVkNDJmXHVkNDMwXHVkNDMxXHVkNDMyXHVkNDMzXHVkNDM0XHVkNDM1XHVkNDM2XHVkNDM3XHVjMjJmXHVjMjMxXHVj'@;
put 'MjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVjMmE4XHVjMmFjXHVjMmFk'@;
put 'XHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEzXHVjMzE0XHVjMzE1XHVj'@;
put 'MzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVjM2UyXHVjM2U4XHVjM2U5'@;
put 'XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4OV1bbV1dPTQ4Mzg0K20sUls0ODM4NCttXT1i'@;
put 'WzE4OV1bbV0pO2ZvcihiWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQzOFx1ZDQzOVx1ZDQzYVx1ZDQzYlx1ZDQzY1x1ZDQzZFx1ZDQzZVx1ZDQzZlx1ZDQ0MVx1ZDQ0Mlx1ZDQ0M1x1ZDQ0NVx1ZDQ0Nlx1ZDQ0'@;
put 'N1x1ZDQ0OFx1ZDQ0OVx1ZDQ0YVx1ZDQ0Ylx1ZDQ0Y1x1ZDQ0ZFx1ZDQ0ZVx1ZDQ0Zlx1ZDQ1MFx1ZDQ1MVx1ZDQ1Mlx1ZDQ1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ1NFx1ZDQ1NVx1ZDQ1Nlx1ZDQ1N1x1ZDQ1OFx1ZDQ1OVx1ZDQ1YVx1ZDQ1Ylx1ZDQ1ZFx1'@;
put 'ZDQ1ZVx1ZDQ1Zlx1ZDQ2MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NVx1ZDQ2Nlx1ZDQ2N1x1ZDQ2OFx1ZDQ2OVx1ZDQ2YVx1ZDQ2Ylx1ZDQ2Y1x1ZDQ2ZVx1ZDQ3MFx1ZDQ3MVx1ZDQ3Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQ3M1x1ZDQ3NFx1ZDQ3NVx1ZDQ3Nlx1ZDQ3'@;
put 'N1x1ZDQ3YVx1ZDQ3Ylx1ZDQ3ZFx1ZDQ3ZVx1ZDQ4MVx1ZDQ4M1x1ZDQ4NFx1ZDQ4NVx1ZDQ4Nlx1ZDQ4N1x1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZVx1ZDQ4Zlx1ZDQ5MFx1ZDQ5MVx1ZDQ5Mlx1ZDQ5M1x1ZDQ5NVx1ZDQ5Nlx1ZDQ5N1x1ZDQ5OFx1ZDQ5OVx1ZDQ5YVx1ZDQ5Ylx1ZDQ5Y1x1ZDQ5ZFx1'@;
put 'YzQzNFx1YzQzY1x1YzQzZFx1YzQ0OFx1YzQ2NFx1YzQ2NVx1YzQ2OFx1YzQ2Y1x1YzQ3NFx1YzQ3NVx1YzQ3OVx1YzQ4MFx1YzQ5NFx1YzQ5Y1x1YzRiOFx1YzRiY1x1YzRlOVx1YzRmMFx1YzRmMVx1YzRmNFx1YzRmOFx1YzRmYVx1YzRmZlx1YzUwMFx1YzUwMVx1YzUwY1x1YzUxMFx1YzUx'@;
put 'NFx1YzUxY1x1YzUyOFx1YzUyOVx1YzUyY1x1YzUzMFx1YzUzOFx1YzUzOVx1YzUzYlx1YzUzZFx1YzU0NFx1YzU0NVx1YzU0OFx1YzU0OVx1YzU0YVx1YzU0Y1x1YzU0ZFx1YzU0ZVx1YzU1M1x1YzU1NFx1YzU1NVx1YzU1N1x1YzU1OFx1YzU1OVx1YzU1ZFx1YzU1ZVx1YzU2MFx1YzU2MVx1'@;
put 'YzU2NFx1YzU2OFx1YzU3MFx1YzU3MVx1YzU3M1x1YzU3NFx1YzU3NVx1YzU3Y1x1YzU3ZFx1YzU4MFx1YzU4NFx1YzU4N1x1YzU4Y1x1YzU4ZFx1YzU4Zlx1YzU5MVx1YzU5NVx1YzU5N1x1YzU5OFx1YzU5Y1x1YzVhMFx1YzVhOVx1YzViNFx1YzViNVx1YzViOFx1YzViOVx1YzViYlx1YzVi'@;
put 'Y1x1YzViZFx1YzViZVx1YzVjNFx1YzVjNVx1YzVjNlx1YzVjN1x1YzVjOFx1YzVjOVx1YzVjYVx1YzVjY1x1YzVjZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTBdW21dXT00ODY0MCtt'@;
put 'LFJbNDg2NDArbV09YlsxOTBdW21dKTtmb3IoYlsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0'@;
put 'YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZc'@;
put 'dWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2RcdWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0'@;
put 'ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0Zjlc'@;
put 'dWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVcdWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2'@;
put 'MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVc'@;
put 'dWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJcdWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2'@;
put 'YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2ZThcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTkx'@;
put 'XVttXV09NDg4OTYrbSxSWzQ4ODk2K21dPWJbMTkxXVttXSk7Zm9yKGJbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNGZlXHVkNGZmXHVkNTAwXHVkNTAxXHVkNTAyXHVkNTAzXHVkNTA1XHVkNTA2XHVkNTA3XHVk'@;
put 'NTA5XHVkNTBhXHVkNTBiXHVkNTBkXHVkNTBlXHVkNTBmXHVkNTEwXHVkNTExXHVkNTEyXHVkNTEzXHVkNTE2XHVkNTE4XHVkNTE5XHVkNTFhXHVkNTFiXHVkNTFjXHVkNTFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNTFlXHVkNTFmXHVkNTIwXHVkNTIxXHVkNTIy'@;
put 'XHVkNTIzXHVkNTI0XHVkNTI1XHVkNTI2XHVkNTI3XHVkNTI4XHVkNTI5XHVkNTJhXHVkNTJiXHVkNTJjXHVkNTJkXHVkNTJlXHVkNTJmXHVkNTMwXHVkNTMxXHVkNTMyXHVkNTMzXHVkNTM0XHVkNTM1XHVkNTM2XHVkNTM3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVk'@;
put 'NTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1XHVkNTQ2XHVkNTQ3XHVkNTQ4XHVkNTQ5XHVkNTRhXHVkNTRiXHVkNTRlXHVkNTUwXHVkNTUyXHVkNTUzXHVkNTU0XHVkNTU1XHVkNTU2XHVkNTU3XHVkNTVhXHVkNTViXHVkNTVkXHVkNTVl'@;
put 'XHVkNTVmXHVkNTYxXHVkNTYyXHVkNTYzXHVjNmU5XHVjNmVjXHVjNmYwXHVjNmY4XHVjNmY5XHVjNmZkXHVjNzA0XHVjNzA1XHVjNzA4XHVjNzBjXHVjNzE0XHVjNzE1XHVjNzE3XHVjNzE5XHVjNzIwXHVjNzIxXHVjNzI0XHVjNzI4XHVjNzMwXHVjNzMxXHVjNzMzXHVjNzM1XHVjNzM3XHVj'@;
put 'NzNjXHVjNzNkXHVjNzQwXHVjNzQ0XHVjNzRhXHVjNzRjXHVjNzRkXHVjNzRmXHVjNzUxXHVjNzUyXHVjNzUzXHVjNzU0XHVjNzU1XHVjNzU2XHVjNzU3XHVjNzU4XHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0'@;
put 'XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhhXHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVj'@;
put 'N2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVjN2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTkyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTJdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzE5Ml1bbV1dPTQ5MTUyK20sUls0OTE1MittXT1iWzE5Ml1bbV0pO2ZvcihiWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU2NFx1ZDU2Nlx1ZDU2N1x1ZDU2YVx1ZDU2Y1x1ZDU2ZVx1ZDU2Zlx1'@;
put 'ZDU3MFx1ZDU3MVx1ZDU3Mlx1ZDU3M1x1ZDU3Nlx1ZDU3N1x1ZDU3OVx1ZDU3YVx1ZDU3Ylx1ZDU3ZFx1ZDU3ZVx1ZDU3Zlx1ZDU4MFx1ZDU4MVx1ZDU4Mlx1ZDU4M1x1ZDU4Nlx1ZDU4YVx1ZDU4Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDU4Y1x1ZDU4ZFx1ZDU4'@;
put 'ZVx1ZDU4Zlx1ZDU5MVx1ZDU5Mlx1ZDU5M1x1ZDU5NFx1ZDU5NVx1ZDU5Nlx1ZDU5N1x1ZDU5OFx1ZDU5OVx1ZDU5YVx1ZDU5Ylx1ZDU5Y1x1ZDU5ZFx1ZDU5ZVx1ZDU5Zlx1ZDVhMFx1ZDVhMVx1ZDVhMlx1ZDVhM1x1ZDVhNFx1ZDVhNlx1ZDVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZDVhOFx1ZDVhOVx1ZDVhYVx1ZDVhYlx1ZDVhY1x1ZDVhZFx1ZDVhZVx1ZDVhZlx1ZDViMFx1ZDViMVx1ZDViMlx1ZDViM1x1ZDViNFx1ZDViNVx1ZDViNlx1ZDViN1x1ZDViOFx1ZDViOVx1ZDViYVx1ZDViYlx1ZDViY1x1ZDViZFx1ZDViZVx1ZDViZlx1ZDVjMFx1ZDVj'@;
put 'MVx1ZDVjMlx1ZDVjM1x1ZDVjNFx1ZDVjNVx1ZDVjNlx1ZDVjN1x1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1YzgyZlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1'@;
put 'Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1Yzhk'@;
put 'OVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1'@;
put 'Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkzXVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTNdW21dXT00OTQwOCttLFJbNDk0MDgrbV09YlsxOTNdW21dKTtmb3IoYlsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2Zc'@;
put 'dWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1'@;
put 'ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZcdWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJcdWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2'@;
put 'MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZcdWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBc'@;
put 'dWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNh'@;
put 'Y2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRc'@;
put 'dWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTRdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk0XVttXV09NDk2NjQrbSxSWzQ5NjY0K21dPWJbMTk0XVttXSk7Zm9yKGJbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjNkXHVkNjNlXHVkNjNm'@;
put 'XHVkNjQxXHVkNjQyXHVkNjQzXHVkNjQ0XHVkNjQ2XHVkNjQ3XHVkNjRhXHVkNjRjXHVkNjRlXHVkNjRmXHVkNjUwXHVkNjUyXHVkNjUzXHVkNjU2XHVkNjU3XHVkNjU5XHVkNjVhXHVkNjViXHVkNjVkXHVkNjVlXHVkNjVmXHVkNjYwXHVkNjYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVkNjYyXHVkNjYzXHVkNjY0XHVkNjY1XHVkNjY2XHVkNjY4XHVkNjZhXHVkNjZiXHVkNjZjXHVkNjZkXHVkNjZlXHVkNjZmXHVkNjcyXHVkNjczXHVkNjc1XHVkNjc2XHVkNjc3XHVkNjc4XHVkNjc5XHVkNjdhXHVkNjdiXHVkNjdjXHVkNjdkXHVkNjdlXHVkNjdmXHVkNjgw'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNjgxXHVkNjgyXHVkNjg0XHVkNjg2XHVkNjg3XHVkNjg4XHVkNjg5XHVkNjhhXHVkNjhiXHVkNjhlXHVkNjhmXHVkNjkxXHVkNjkyXHVkNjkzXHVkNjk1XHVkNjk2XHVkNjk3XHVkNjk4XHVkNjk5XHVkNjlhXHVkNjliXHVk'@;
put 'NjljXHVkNjllXHVkNmEwXHVkNmEyXHVkNmEzXHVkNmE0XHVkNmE1XHVkNmE2XHVkNmE3XHVkNmE5XHVkNmFhXHVjYzNjXHVjYzNkXHVjYzNlXHVjYzQ0XHVjYzQ1XHVjYzQ4XHVjYzRjXHVjYzU0XHVjYzU1XHVjYzU3XHVjYzU4XHVjYzU5XHVjYzYwXHVjYzY0XHVjYzY2XHVjYzY4XHVjYzcw'@;
put 'XHVjYzc1XHVjYzk4XHVjYzk5XHVjYzljXHVjY2EwXHVjY2E4XHVjY2E5XHVjY2FiXHVjY2FjXHVjY2FkXHVjY2I0XHVjY2I1XHVjY2I4XHVjY2JjXHVjY2M0XHVjY2M1XHVjY2M3XHVjY2M5XHVjY2QwXHVjY2Q0XHVjY2U0XHVjY2VjXHVjY2YwXHVjZDAxXHVjZDA4XHVjZDA5XHVjZDBjXHVj'@;
put 'ZDEwXHVjZDE4XHVjZDE5XHVjZDFiXHVjZDFkXHVjZDI0XHVjZDI4XHVjZDJjXHVjZDM5XHVjZDVjXHVjZDYwXHVjZDY0XHVjZDZjXHVjZDZkXHVjZDZmXHVjZDcxXHVjZDc4XHVjZDg4XHVjZDk0XHVjZDk1XHVjZDk4XHVjZDljXHVjZGE0XHVjZGE1XHVjZGE3XHVjZGE5XHVjZGIwXHVjZGM0'@;
put 'XHVjZGNjXHVjZGQwXHVjZGU4XHVjZGVjXHVjZGYwXHVjZGY4XHVjZGY5XHVjZGZiXHVjZGZkXHVjZTA0XHVjZTA4XHVjZTBjXHVjZTE0XHVjZTE5XHVjZTIwXHVjZTIxXHVjZTI0XHVjZTI4XHVjZTMwXHVjZTMxXHVjZTMzXHVjZTM1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk1XS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5NV1bbV1dPTQ5OTIwK20sUls0OTkyMCttXT1iWzE5NV1bbV0pO2ZvcihiWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZh'@;
put 'Ylx1ZDZhZFx1ZDZhZVx1ZDZhZlx1ZDZiMVx1ZDZiMlx1ZDZiM1x1ZDZiNFx1ZDZiNVx1ZDZiNlx1ZDZiN1x1ZDZiOFx1ZDZiYVx1ZDZiY1x1ZDZiZFx1ZDZiZVx1ZDZiZlx1ZDZjMFx1ZDZjMVx1ZDZjMlx1ZDZjM1x1ZDZjNlx1ZDZjN1x1ZDZjOVx1ZDZjYVx1ZDZjYlx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZjZFx1ZDZjZVx1ZDZjZlx1ZDZkMFx1ZDZkMlx1ZDZkM1x1ZDZkNVx1ZDZkNlx1ZDZkOFx1ZDZkYVx1ZDZkYlx1ZDZkY1x1ZDZkZFx1ZDZkZVx1ZDZkZlx1ZDZlMVx1ZDZlMlx1ZDZlM1x1ZDZlNVx1ZDZlNlx1ZDZlN1x1ZDZlOVx1ZDZlYVx1ZDZl'@;
put 'Ylx1ZDZlY1x1ZDZlZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNlx1ZDZmN1x1ZDZmOFx1ZDZmOVx1ZDZmYVx1ZDZmYlx1ZDZmZVx1ZDZmZlx1ZDcwMVx1ZDcwMlx1ZDcwM1x1ZDcwNVx1ZDcwNlx1'@;
put 'ZDcwN1x1ZDcwOFx1ZDcwOVx1ZDcwYVx1ZDcwYlx1ZDcwY1x1ZDcwZFx1ZDcwZVx1ZDcwZlx1ZDcxMFx1ZDcxMlx1ZDcxM1x1ZDcxNFx1Y2U1OFx1Y2U1OVx1Y2U1Y1x1Y2U1Zlx1Y2U2MFx1Y2U2MVx1Y2U2OFx1Y2U2OVx1Y2U2Ylx1Y2U2ZFx1Y2U3NFx1Y2U3NVx1Y2U3OFx1Y2U3Y1x1Y2U4'@;
put 'NFx1Y2U4NVx1Y2U4N1x1Y2U4OVx1Y2U5MFx1Y2U5MVx1Y2U5NFx1Y2U5OFx1Y2VhMFx1Y2VhMVx1Y2VhM1x1Y2VhNFx1Y2VhNVx1Y2VhY1x1Y2VhZFx1Y2VjMVx1Y2VlNFx1Y2VlNVx1Y2VlOFx1Y2VlYlx1Y2VlY1x1Y2VmNFx1Y2VmNVx1Y2VmN1x1Y2VmOFx1Y2VmOVx1Y2YwMFx1Y2YwMVx1'@;
put 'Y2YwNFx1Y2YwOFx1Y2YxMFx1Y2YxMVx1Y2YxM1x1Y2YxNVx1Y2YxY1x1Y2YyMFx1Y2YyNFx1Y2YyY1x1Y2YyZFx1Y2YyZlx1Y2YzMFx1Y2YzMVx1Y2YzOFx1Y2Y1NFx1Y2Y1NVx1Y2Y1OFx1Y2Y1Y1x1Y2Y2NFx1Y2Y2NVx1Y2Y2N1x1Y2Y2OVx1Y2Y3MFx1Y2Y3MVx1Y2Y3NFx1Y2Y3OFx1Y2Y4'@;
put 'MFx1Y2Y4NVx1Y2Y4Y1x1Y2ZhMVx1Y2ZhOFx1Y2ZiMFx1Y2ZjNFx1Y2ZlMFx1Y2ZlMVx1Y2ZlNFx1Y2ZlOFx1Y2ZmMFx1Y2ZmMVx1Y2ZmM1x1Y2ZmNVx1Y2ZmY1x1ZDAwMFx1ZDAwNFx1ZDAxMVx1ZDAxOFx1ZDAyZFx1ZDAzNFx1ZDAzNVx1ZDAzOFx1ZDAzY1x1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT1iWzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTZdW21dXT01MDE3NittLFJbNTAxNzYrbV09YlsxOTZdW21dKTtmb3IoYlsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3Mzlc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJcdWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3'@;
put 'NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3Nzdc'@;
put 'dWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQw'@;
put 'N2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZc'@;
put 'dWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQx'@;
put 'YTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9YlsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk3XVttXV09NTA0MzIrbSxSWzUwNDMyK21dPWJbMTk3XVttXSk7Zm9yKGJbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkNzhkXHVkNzhlXHVkNzhmXHVkNzkxXHVkNzkyXHVkNzkzXHVkNzk0XHVkNzk1XHVkNzk2XHVkNzk3XHVkNzlhXHVkNzljXHVkNzllXHVkNzlmXHVkN2EwXHVkN2ExXHVkN2EyXHVkN2EzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVk'@;
put 'MmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRjXHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBl'@;
put 'XHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVkMzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVk'@;
put 'MzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2Zm'@;
put 'XHVkNDAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5OF1bbV1dPTUwNjg4K20sUls1MDY4OCttXT1iWzE5OF1bbV0pO2ZvcihiWzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZDQwOFx1ZDQxZFx1ZDQ0MFx1ZDQ0NFx1ZDQ1Y1x1ZDQ2MFx1ZDQ2NFx1ZDQ2ZFx1'@;
put 'ZDQ2Zlx1ZDQ3OFx1ZDQ3OVx1ZDQ3Y1x1ZDQ3Zlx1ZDQ4MFx1ZDQ4Mlx1ZDQ4OFx1ZDQ4OVx1ZDQ4Ylx1ZDQ4ZFx1ZDQ5NFx1ZDRhOVx1ZDRjY1x1ZDRkMFx1ZDRkNFx1ZDRkY1x1ZDRkZlx1ZDRlOFx1ZDRlY1x1ZDRmMFx1ZDRmOFx1ZDRmYlx1ZDRmZFx1ZDUwNFx1ZDUwOFx1ZDUwY1x1ZDUx'@;
put 'NFx1ZDUxNVx1ZDUxN1x1ZDUzY1x1ZDUzZFx1ZDU0MFx1ZDU0NFx1ZDU0Y1x1ZDU0ZFx1ZDU0Zlx1ZDU1MVx1ZDU1OFx1ZDU1OVx1ZDU1Y1x1ZDU2MFx1ZDU2NVx1ZDU2OFx1ZDU2OVx1ZDU2Ylx1ZDU2ZFx1ZDU3NFx1ZDU3NVx1ZDU3OFx1ZDU3Y1x1ZDU4NFx1ZDU4NVx1ZDU4N1x1ZDU4OFx1'@;
put 'ZDU4OVx1ZDU5MFx1ZDVhNVx1ZDVjOFx1ZDVjOVx1ZDVjY1x1ZDVkMFx1ZDVkMlx1ZDVkOFx1ZDVkOVx1ZDVkYlx1ZDVkZFx1ZDVlNFx1ZDVlNVx1ZDVlOFx1ZDVlY1x1ZDVmNFx1ZDVmNVx1ZDVmN1x1ZDVmOVx1ZDYwMFx1ZDYwMVx1ZDYwNFx1ZDYwOFx1ZDYxMFx1ZDYxMVx1ZDYxM1x1ZDYx'@;
put 'NFx1ZDYxNVx1ZDYxY1x1ZDYyMFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTldW21dXT01MDk0NCttLFJbNTA5NDQrbV09YlsxOTldW21dKTtmb3IoYlsyMDBdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBc'@;
put 'dWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2'@;
put 'YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVcdWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRc'@;
put 'dWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3'@;
put 'OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjAwXVttXV09NTEyMDArbSxSWzUxMjAwK21dPWJbMjAwXVttXSk7Zm9yKGJbMjAyXT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5'@;
put 'XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1'@;
put 'NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIx'@;
put 'XHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3'@;
put 'NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwMl1bbV1dPTUxNzEyK20sUls1MTcxMittXT1iWzIwMl1bbV0p'@;
put 'O2ZvcihiWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTMyM1x1NWNh'@;
put 'Y1x1NzUzMlx1ODBkYlx1OTI0MFx1OTU5OFx1NTI1Ylx1NTgwOFx1NTlkY1x1NWNhMVx1NWQxN1x1NWViN1x1NWYzYVx1NWY0YVx1NjE3N1x1NmM1Zlx1NzU3YVx1NzU4Nlx1N2NlMFx1N2Q3M1x1N2RiMVx1N2Y4Y1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OGIxYlx1OTJmY1x1OTY0ZFx1'@;
put 'OWM0N1x1NGVjYlx1NGVmN1x1NTAwYlx1NTFmMVx1NTg0Zlx1NjEzN1x1NjEzZVx1NjE2OFx1NjUzOVx1NjllYVx1NmYxMVx1NzVhNVx1NzY4Nlx1NzZkNlx1N2I4N1x1ODJhNVx1ODRjYlx1ZjkwMFx1OTNhN1x1OTU4Ylx1NTU4MFx1NWJhMlx1NTc1MVx1ZjkwMVx1N2NiM1x1N2ZiOVx1OTFi'@;
put 'NVx1NTAyOFx1NTNiYlx1NWM0NVx1NWRlOFx1NjJkMlx1NjM2ZVx1NjRkYVx1NjRlN1x1NmUyMFx1NzBhY1x1Nzk1Ylx1OGRkZFx1OGUxZVx1ZjkwMlx1OTA3ZFx1OTI0NVx1OTJmOFx1NGU3ZVx1NGVmNlx1NTA2NVx1NWRmZVx1NWVmYVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OGU0N1x1'@;
put 'OTM3NVx1OWEyYlx1NGU1ZVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4ZFx1NTI5Mlx1NmFhMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDNdW21dXT01MTk2OCttLFJbNTE5Njgr'@;
put 'bV09YlsyMDNdW21dKTtmb3IoYlsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFc'@;
put 'dTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVcdTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1'@;
put 'NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdhZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4Mzhc'@;
put 'dTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA0XVttXV09NTIy'@;
put 'MjQrbSxSWzUyMjI0K21dPWJbMjA0XVttXSk7Zm9yKGJbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3'@;
put 'XHU2NTQ1XHU2NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5'@;
put 'ZjEzXHU1NGVkXHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUw'@;
put 'XHU2MDZkXHU2MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVti'@;
put 'WzIwNV1bbV1dPTUyNDgwK20sUls1MjQ4MCttXT1iWzIwNV1bbV0pO2ZvcihiWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzlkMVx1ODNkM1x1OGE4N1x1OGFiMlx1OGRlOFx1OTA0ZVx1OTM0Ylx1OTg0Nlx1NWVkM1x1NjllOFx1ODVmZlx1OTBlZFx1ZjkwNVx1NTFhMFx1NWI5OFx1NWJlY1x1NjE2M1x1NjhmYVx1NmIzZVx1NzA0Y1x1NzQyZlx1NzRkOFx1N2Jh'@;
put 'MVx1N2Y1MFx1ODNjNVx1ODljMFx1OGNhYlx1OTVkY1x1OTkyOFx1NTIyZVx1NjA1ZFx1NjJlY1x1OTAwMlx1NGY4YVx1NTE0OVx1NTMyMVx1NThkOVx1NWVlM1x1NjZlMFx1NmQzOFx1NzA5YVx1NzJjMlx1NzNkNlx1N2I1MFx1ODBmMVx1OTQ1Ylx1NTM2Nlx1NjM5Ylx1N2Y2Ylx1NGU1Nlx1'@;
put 'NTA4MFx1NTg0YVx1NThkZVx1NjAyYVx1NjEyN1x1NjJkMFx1NjlkMFx1OWI0MVx1NWI4Zlx1N2QxOFx1ODBiMVx1OGY1Zlx1NGVhNFx1NTBkMVx1NTRhY1x1NTVhY1x1NWIwY1x1NWRhMFx1NWRlN1x1NjUyYVx1NjU0ZVx1NjgyMVx1NmE0Ylx1NzJlMVx1NzY4ZVx1NzdlZlx1N2Q1ZVx1N2Zm'@;
put 'OVx1ODFhMFx1ODU0ZVx1ODZkZlx1OGYwM1x1OGY0ZVx1OTBjYVx1OTkwM1x1OWE1NVx1OWJhYlx1NGUxOFx1NGU0NVx1NGU1ZFx1NGVjN1x1NGZmMVx1NTE3N1x1NTJmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA2XVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoZWVbYlsyMDZdW21dXT01MjczNittLFJbNTI3MzYrbV09YlsyMDZdW21dKTtmb3IoYlsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVkODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZl'@;
put 'OWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNcdThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJc'@;
put 'dTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTViYWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYz'@;
put 'NzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZcdTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIw'@;
put 'N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA3XVttXV09NTI5OTIrbSxSWzUyOTkyK21dPWJbMjA3XVttXSk7Zm9yKGJbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1'@;
put 'NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRiXHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQx'@;
put 'XHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0'@;
put 'ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA4XS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09YlsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwOF1bbV1dPTUzMjQ4K20sUls1MzI0OCttXT1iWzIwOF1bbV0pO2ZvcihiWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjcxZVx1NjcxZlx1Njc1ZVx1NjhjYlx1NjhjNFx1NmE1Zlx1NmIzYVx1NmMyM1x1NmM3ZFx1NmM4Mlx1NmRjN1x1NzM5OFx1NzQyNlx1NzQyYVx1NzQ4Mlx1NzRhM1x1'@;
put 'NzU3OFx1NzU3Zlx1Nzg4MVx1NzhlZlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3YVx1N2I5NVx1N2QwMFx1N2RiYVx1N2Y4OFx1ODAwNlx1ODAyZFx1ODA4Y1x1OGExOFx1OGI0Zlx1OGM0OFx1OGQ3N1x1OTMyMVx1OTMyNFx1OThlMlx1OTk1MVx1OWEwZVx1OWEwZlx1OWE2NVx1OWU5Mlx1N2Rj'@;
put 'YVx1NGY3Nlx1NTQwOVx1NjJlZVx1Njg1NFx1OTFkMVx1NTVhYlx1NTEzYVx1ZjkwYlx1ZjkwY1x1NWExY1x1NjFlNlx1ZjkwZFx1NjJjZlx1NjJmZlx1ZjkwZVx1ZjkwZlx1ZjkxMFx1ZjkxMVx1ZjkxMlx1ZjkxM1x1OTBhM1x1ZjkxNFx1ZjkxNVx1ZjkxNlx1ZjkxN1x1ZjkxOFx1OGFmZVx1'@;
put 'ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1ZjkyMlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIw'@;
put 'OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDldW21dXT01MzUwNCttLFJbNTM1MDQrbV09YlsyMDldW21dKTtmb3IoYlsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdc'@;
put 'dTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZcdTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5'@;
put 'MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJc'@;
put 'dWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdcdTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9YlsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjEwXVttXV09NTM3NjArbSxSWzUzNzYwK21dPWJbMjEwXVttXSk7Zm9yKGJbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRk'@;
put 'XHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4'@;
put 'YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0'@;
put 'XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjExXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxMV1bbV1dPTU0MDE2K20sUls1NDAxNittXT1iWzIxMV1bbV0pO2ZvcihiWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjhmOVx1NmFjMlx1NmRkOFx1NmUyMVx1NmVkNFx1NmZlNFx1NzFmZVx1NzZkY1x1Nzc3OVx1Nzli'@;
put 'MVx1N2EzYlx1ODQwNFx1ODlhOVx1OGNlZFx1OGRmM1x1OGU0OFx1OTAwM1x1OTAxNFx1OTA1M1x1OTBmZFx1OTM0ZFx1OTY3Nlx1OTdkY1x1NmJkMlx1NzAwNlx1NzI1OFx1NzJhMlx1NzM2OFx1Nzc2M1x1NzliZlx1N2JlNFx1N2U5Ylx1OGI4MFx1NThhOVx1NjBjN1x1NjU2Nlx1NjVmZFx1'@;
put 'NjZiZVx1NmM4Y1x1NzExZVx1NzFjOVx1OGM1YVx1OTgxM1x1NGU2ZFx1N2E4MVx1NGVkZFx1NTFhY1x1NTFjZFx1NTJkNVx1NTQwY1x1NjFhN1x1Njc3MVx1Njg1MFx1NjhkZlx1NmQxZVx1NmY3Y1x1NzViY1x1NzdiM1x1N2FlNVx1ODBmNFx1ODQ2M1x1OTI4NVx1NTE1Y1x1NjU5N1x1Njc1'@;
put 'Y1x1Njc5M1x1NzVkOFx1N2FjN1x1ODM3M1x1Zjk1YVx1OGM0Nlx1OTAxN1x1OTgyZFx1NWM2Zlx1ODFjMFx1ODI5YVx1OTA0MVx1OTA2Zlx1OTIwZFx1NWY5N1x1NWQ5ZFx1NmE1OVx1NzFjOFx1NzY3Ylx1N2I0OVx1ODVlNFx1OGIwNFx1OTEyN1x1OWEzMFx1NTU4N1x1NjFmNlx1Zjk1Ylx1'@;
put 'NzY2OVx1N2Y4NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTJdW21dXT01NDI3MittLFJbNTQyNzIrbV09YlsyMTJdW21dKTtmb3IoYlsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTcz'@;
put 'ZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNcdTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlc'@;
put 'dTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThh'@;
put 'ZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRcdTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJc'@;
put 'dTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjEzXVttXV09NTQ1MjgrbSxSWzU0NTI4K21dPWJbMjEzXVttXSk7Zm9yKGJbMjE0XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4'@;
put 'ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFl'@;
put 'XHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVlXHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5'@;
put 'ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2'@;
put 'XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxNF1bbV1dPTU0Nzg0K20sUls1NDc4NCttXT1iWzIxNF1bbV0pO2ZvcihiWzIx'@;
put 'NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTA3Y1x1OWIyN1x1OWY4ZFx1'@;
put 'NThkOFx1NWE0MVx1NWM2Mlx1NmExM1x1NmRkYVx1NmYwZlx1NzYzYlx1N2QyZlx1N2UzN1x1ODUxZVx1ODkzOFx1OTNlNFx1OTY0Ylx1NTI4OVx1NjVkMlx1NjdmM1x1NjliNFx1NmQ0MVx1NmU5Y1x1NzAwZlx1NzQwOVx1NzQ2MFx1NzU1OVx1NzYyNFx1Nzg2Ylx1OGIyY1x1OTg1ZVx1NTE2'@;
put 'ZFx1NjIyZVx1OTY3OFx1NGY5Nlx1NTAyYlx1NWQxOVx1NmRlYVx1N2RiOFx1OGYyYVx1NWY4Ylx1NjE0NFx1NjgxN1x1Zjk2MVx1OTY4Nlx1NTJkMlx1ODA4Ylx1NTFkY1x1NTFjY1x1Njk1ZVx1N2ExY1x1N2RiZVx1ODNmMVx1OTY3NVx1NGZkYVx1NTIyOVx1NTM5OFx1NTQwZlx1NTUwZVx1'@;
put 'NWM2NVx1NjBhN1x1Njc0ZVx1NjhhOFx1NmQ2Y1x1NzI4MVx1NzJmOFx1NzQwNlx1NzQ4M1x1Zjk2Mlx1NzVlMlx1N2M2Y1x1N2Y3OVx1N2ZiOFx1ODM4OVx1ODhjZlx1ODhlMVx1OTFjY1x1OTFkMFx1OTZlMlx1OWJjOVx1NTQxZFx1NmY3ZVx1NzFkMFx1NzQ5OFx1ODVmYVx1OGVhYVx1OTZh'@;
put 'M1x1OWM1N1x1OWU5Zlx1Njc5N1x1NmRjYlx1NzQzM1x1ODFlOFx1OTcxNlx1NzgyY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTVdW21dXT01NTA0MCttLFJbNTUwNDArbV09YlsyMTVd'@;
put 'W21dKTtmb3IoYlsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2Jc'@;
put 'dTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdcdTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcw'@;
put 'NjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVmZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2Jc'@;
put 'dTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBcdTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUx'@;
put 'OTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxNl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE2XVttXV09NTUyOTYrbSxSWzU1'@;
put 'Mjk2K21dPWJbMjE2XVttXSk7Zm9yKGJbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2'@;
put 'N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZm'@;
put 'XHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4'@;
put 'MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBlXHU1NDNiXHU1NTRmXHU2NTg3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxN11bbV1d'@;
put 'PTU1NTUyK20sUls1NTU1MittXT1iWzIxN11bbV0pO2ZvcihiWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmM3Nlx1N2QwYVx1N2QwYlx1ODA1ZVx1ODY4YVx1OTU4MFx1OTZlZlx1NTJmZlx1NmM5NVx1NzI2OVx1NTQ3M1x1NWE5YVx1NWMzZVx1NWQ0Ylx1NWY0Y1x1NWZhZVx1NjcyYVx1NjhiNlx1Njk2M1x1NmUzY1x1NmU0NFx1NzcwOVx1N2M3M1x1N2Y4ZVx1'@;
put 'ODU4N1x1OGIwZVx1OGZmN1x1OTc2MVx1OWVmNFx1NWNiN1x1NjBiNlx1NjEwZFx1NjFhYlx1NjU0Zlx1NjVmYlx1NjVmY1x1NmMxMVx1NmNlZlx1NzM5Zlx1NzNjOVx1N2RlMVx1OTU5NFx1NWJjNlx1ODcxY1x1OGIxMFx1NTI1ZFx1NTM1YVx1NjJjZFx1NjQwZlx1NjRiMlx1NjczNFx1NmEz'@;
put 'OFx1NmNjYVx1NzNjMFx1NzQ5ZVx1N2I5NFx1N2M5NVx1N2UxYlx1ODE4YVx1ODIzNlx1ODU4NFx1OGZlYlx1OTZmOVx1OTljMVx1NGYzNFx1NTM0YVx1NTNjZFx1NTNkYlx1NjJjY1x1NjQyY1x1NjUwMFx1NjU5MVx1NjljM1x1NmNlZVx1NmY1OFx1NzNlZFx1NzU1NFx1NzYyMlx1NzZlNFx1'@;
put 'NzZmY1x1NzhkMFx1NzhmYlx1NzkyY1x1N2Q0Nlx1ODIyY1x1ODdlMFx1OGZkNFx1OTgxMlx1OThlZlx1NTJjM1x1NjJkNFx1NjRhNVx1NmUyNFx1NmY1MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxOF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE4XVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'ZWVbYlsyMThdW21dXT01NTgwOCttLFJbNTU4MDgrbV09YlsyMThdW21dKTtmb3IoYlsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdcdTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVc'@;
put 'dTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYyZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5'@;
put 'MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFcdWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFc'@;
put 'dTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxOV1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGVlW2JbMjE5XVttXV09NTYwNjQrbSxSWzU2MDY0K21dPWJbMjE5XVttXSk7Zm9yKGJbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3'@;
put 'XHU2NjFlXHU2NjNhXHU2N2M0XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4'@;
put 'ZjE0XHU0ZjBmXHU1MGQ1XHU1MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZk'@;
put 'XHU3MWEyXHU3NDJiXHU3ZTJiXHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjIwXS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'YlsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyMF1bbV1dPTU2MzIwK20sUls1NjMyMCttXT1iWzIyMF1bbV0pO2ZvcihiWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWI1YVx1NWI3NVx1NWJjY1x1NWU5Y1x1Zjk2Nlx1NjI3Nlx1NjU3N1x1NjVhN1x1NmQ2ZVx1NmVhNVx1NzIzNlx1N2IyNlx1N2MzZlx1N2YzNlx1ODE1MFx1ODE1MVx1ODE5YVx1ODI0'@;
put 'MFx1ODI5OVx1ODNhOVx1OGEwM1x1OGNhMFx1OGNlNlx1OGNmYlx1OGQ3NFx1OGRiYVx1OTBlOFx1OTFkY1x1OTYxY1x1OTY0NFx1OTlkOVx1OWNlN1x1NTMxN1x1NTIwNlx1NTQyOVx1NTY3NFx1NThiM1x1NTk1NFx1NTk2ZVx1NWZmZlx1NjFhNFx1NjI2ZVx1NjYxMFx1NmM3ZVx1NzExYVx1'@;
put 'NzZjNlx1N2M4OVx1N2NkZVx1N2QxYlx1ODJhY1x1OGNjMVx1OTZmMFx1Zjk2N1x1NGY1Ylx1NWYxN1x1NWY3Zlx1NjJjMlx1NWQyOVx1NjcwYlx1NjhkYVx1Nzg3Y1x1N2U0M1x1OWQ2Y1x1NGUxNVx1NTA5OVx1NTMxNVx1NTMyYVx1NTM1MVx1NTk4M1x1NWE2Mlx1NWU4N1x1NjBiMlx1NjE4'@;
put 'YVx1NjI0OVx1NjI3OVx1NjU5MFx1Njc4N1x1NjlhN1x1NmJkNFx1NmJkNlx1NmJkN1x1NmJkOFx1NmNiOFx1Zjk2OFx1NzQzNVx1NzVmYVx1NzgxMlx1Nzg5MVx1NzlkNVx1NzlkOFx1N2M4M1x1N2RjYlx1N2ZlMVx1ODBhNVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyMV0ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PWJbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjFdW21dXT01NjU3NittLFJbNTY1NzYrbV09YlsyMjFdW21dKTtmb3IoYlsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlcdThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1'@;
put 'OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRlZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNc'@;
put 'dTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2JcdTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5'@;
put 'YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'YlsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIyXVttXV09NTY4MzIrbSxSWzU2ODMyK21dPWJbMjIyXVttXSk7Zm9yKGJbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDljXHU5MTc4XHU5NzMwXHU0ZTc3XHU2'@;
put 'NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1YzE5XHU1Y2UwXHU1ZTM4XHU1ZThh'@;
put 'XHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZjXHU3YTYxXHU3ZDIyXHU4MjcyXHU3'@;
put 'MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3ZGQ2XHU3ZjcyXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPWJbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyM11bbV1dPTU3MDg4K20sUls1NzA4OCttXT1iWzIyM11bbV0pO2ZvcihiWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODBlNVx1ODIxMlx1ODVhZlx1ODk3Zlx1OGE5M1x1OTAxZFx1OTJlNFx1OWVjZFx1OWYyMFx1NTkxNVx1NTk2ZFx1'@;
put 'NWUyZFx1NjBkY1x1NjYxNFx1NjY3M1x1Njc5MFx1NmM1MFx1NmRjNVx1NmY1Zlx1NzdmM1x1NzhhOVx1ODRjNlx1OTFjYlx1OTMyYlx1NGVkOVx1NTBjYVx1NTE0OFx1NTU4NFx1NWIwYlx1NWJhM1x1NjI0N1x1NjU3ZVx1NjVjYlx1NmUzMlx1NzE3ZFx1NzQwMVx1NzQ0NFx1NzQ4N1x1NzRi'@;
put 'Zlx1NzY2Y1x1NzlhYVx1N2RkYVx1N2U1NVx1N2ZhOFx1ODE3YVx1ODFiM1x1ODIzOVx1ODYxYVx1ODdlY1x1OGE3NVx1OGRlM1x1OTA3OFx1OTI5MVx1OTQyNVx1OTk0ZFx1OWJhZVx1NTM2OFx1NWM1MVx1Njk1NFx1NmNjNFx1NmQyOVx1NmUyYlx1ODIwY1x1ODU5Ylx1ODkzYlx1OGEyZFx1'@;
put 'OGFhYVx1OTZlYVx1OWY2N1x1NTI2MVx1NjZiOVx1NmJiMlx1N2U5Nlx1ODdmZVx1OGQwZFx1OTU4M1x1OTY1ZFx1NjUxZFx1NmQ4OVx1NzFlZVx1Zjk2ZVx1NTdjZVx1NTlkM1x1NWJhY1x1NjAyN1x1NjBmYVx1NjIxMFx1NjYxZlx1NjY1Zlx1NzMyOVx1NzNmOVx1NzZkYlx1NzcwMVx1N2I2'@;
put 'Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjRdW21dXT01NzM0NCttLFJbNTczNDQrbV09YlsyMjRdW21dKTtmb3IoYlsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdc'@;
put 'dTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZkODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdi'@;
put 'MTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFcdTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBc'@;
put 'dTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRmZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVj'@;
put 'YzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI1XVttXV09NTc2MDArbSxSWzU3NjAwK21dPWJbMjI1XVttXSk7Zm9yKGJbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5'@;
put 'XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4'@;
put 'ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUx'@;
put 'XHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4'@;
put 'ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyNl1bbV1dPTU3ODU2K20sUls1Nzg1NittXT1iWzIyNl1bbV0pO2ZvcihiWzIyN109Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQ2OVx1NzQ1Zlx1ODE5ZFx1ODc2OFx1NmZk'@;
put 'NVx1NjJmZVx1N2ZkMlx1ODkzNlx1ODk3Mlx1NGUxZVx1NGU1OFx1NTBlN1x1NTJkZFx1NTM0N1x1NjI3Zlx1NjYwN1x1N2U2OVx1ODgwNVx1OTY1ZVx1NGY4ZFx1NTMxOVx1NTYzNlx1NTljYlx1NWFhNFx1NWMzOFx1NWM0ZVx1NWM0ZFx1NWUwMlx1NWYxMVx1NjA0M1x1NjViZFx1NjYyZlx1'@;
put 'NjY0Mlx1NjdiZVx1NjdmNFx1NzMxY1x1NzdlMlx1NzkzYVx1N2ZjNVx1ODQ5NFx1ODRjZFx1ODk5Nlx1OGE2Nlx1OGE2OVx1OGFlMVx1OGM1NVx1OGM3YVx1NTdmNFx1NWJkNFx1NWYwZlx1NjA2Zlx1NjJlZFx1NjkwZFx1NmI5Nlx1NmU1Y1x1NzE4NFx1N2JkMlx1ODc1NVx1OGI1OFx1OGVm'@;
put 'ZVx1OThkZlx1OThmZVx1NGYzOFx1NGY4MVx1NGZlMVx1NTQ3Ylx1NWEyMFx1NWJiOFx1NjEzY1x1NjViMFx1NjY2OFx1NzFmY1x1NzUzM1x1Nzk1ZVx1N2QzM1x1ODE0ZVx1ODFlM1x1ODM5OFx1ODVhYVx1ODVjZVx1ODcwM1x1OGEwYVx1OGVhYlx1OGY5Ylx1Zjk3MVx1OGZjNVx1NTkzMVx1'@;
put 'NWJhNFx1NWJlNlx1NjA4OVx1NWJlOVx1NWMwYlx1NWZjM1x1NmM4MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjddW21dXT01ODExMittLFJbNTgxMTIrbV09YlsyMjddW21dKTtmb3Io'@;
put 'YlsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcw'@;
put 'MGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFc'@;
put 'dTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2NcdTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1'@;
put 'MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUzOTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2Vc'@;
put 'dTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI4XVttXV09NTgzNjgrbSxSWzU4MzY4K21dPWJb'@;
put 'MjI4XVttXSk7Zm9yKGJbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2'@;
put 'YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5'@;
put 'XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBiXHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1'@;
put 'NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5'@;
put 'XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyOV1bbV1dPTU4NjI0K20s'@;
put 'Uls1ODYyNCttXT1iWzIyOV1bbV0pO2ZvcihiWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1Zjk4M1x1NmI1Zlx1NmM1ZFx1Zjk4NFx1NzRiNVx1NzkxNlx1Zjk4NVx1ODIwN1x1ODI0NVx1ODMzOVx1OGYzZlx1OGY1ZFx1Zjk4Nlx1OTkxOFx1Zjk4N1x1Zjk4OFx1Zjk4OVx1NGVhNlx1Zjk4YVx1NTdkZlx1NWY3OVx1NjYxM1x1Zjk4Ylx1Zjk4Y1x1NzVhYlx1N2U3'@;
put 'OVx1OGI2Zlx1Zjk4ZFx1OTAwNlx1OWE1Ylx1NTZhNVx1NTgyN1x1NTlmOFx1NWExZlx1NWJiNFx1Zjk4ZVx1NWVmNlx1Zjk4Zlx1Zjk5MFx1NjM1MFx1NjMzYlx1Zjk5MVx1NjkzZFx1NmM4N1x1NmNiZlx1NmQ4ZVx1NmQ5M1x1NmRmNVx1NmYxNFx1Zjk5Mlx1NzBkZlx1NzEzNlx1NzE1OVx1'@;
put 'Zjk5M1x1NzFjM1x1NzFkNVx1Zjk5NFx1Nzg0Zlx1Nzg2Zlx1Zjk5NVx1N2I3NVx1N2RlM1x1Zjk5Nlx1N2UyZlx1Zjk5N1x1ODg0ZFx1OGVkZlx1Zjk5OFx1Zjk5OVx1Zjk5YVx1OTI1Ylx1Zjk5Ylx1OWNmNlx1Zjk5Y1x1Zjk5ZFx1Zjk5ZVx1NjA4NVx1NmQ4NVx1Zjk5Zlx1NzFiMVx1Zjlh'@;
put 'MFx1ZjlhMVx1OTViMVx1NTNhZFx1ZjlhMlx1ZjlhM1x1ZjlhNFx1NjdkM1x1ZjlhNVx1NzA4ZVx1NzEzMFx1NzQzMFx1ODI3Nlx1ODJkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzBd'@;
put 'W21dXT01ODg4MCttLFJbNTg4ODArbV09YlsyMzBdW21dKTtmb3IoYlsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZm'@;
put 'NDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFcdTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVc'@;
put 'dTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0'@;
put 'MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzMV1bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGVlW2JbMjMxXVttXV09NTkxMzYrbSxSWzU5MTM2K21dPWJbMjMxXVttXSk7Zm9yKGJbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2'@;
put 'NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMxXHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmVi'@;
put 'XHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1'@;
put 'OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJkXHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzJdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzMl1bbV1dPTU5MzkyK20sUls1OTM5MittXT1iWzIzMl1bbV0pO2ZvcihiWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E4OFx1N2FhZlx1N2U0N1x1N2U1ZVx1ODAwMFx1ODE3MFx1ZjljMlx1ODdlZlx1ODk4MVx1OGIyMFx1OTA1OVx1ZjljM1x1OTA4MFx1OTk1Mlx1NjE3ZVx1NmIzMlx1NmQ3NFx1N2UxZlx1ODkyNVx1'@;
put 'OGZiMVx1NGZkMVx1NTBhZFx1NTE5N1x1NTJjN1x1NTdjN1x1NTg4OVx1NWJiOVx1NWViOFx1NjE0Mlx1Njk5NVx1NmQ4Y1x1NmU2N1x1NmViNlx1NzE5NFx1NzQ2Mlx1NzUyOFx1NzUyY1x1ODA3M1x1ODMzOFx1ODRjOVx1OGUwYVx1OTM5NFx1OTNkZVx1ZjljNFx1NGU4ZVx1NGY1MVx1NTA3'@;
put 'Nlx1NTEyYVx1NTNjOFx1NTNjYlx1NTNmM1x1NWI4N1x1NWJkM1x1NWMyNFx1NjExYVx1NjE4Mlx1NjVmNFx1NzI1Ylx1NzM5N1x1NzQ0MFx1NzZjMlx1Nzk1MFx1Nzk5MVx1NzliOVx1N2QwNlx1N2ZiZFx1ODI4Ylx1ODVkNVx1ODY1ZVx1OGZjMlx1OTA0N1x1OTBmNVx1OTFlYVx1OTY4NVx1'@;
put 'OTZlOFx1OTZlOVx1NTJkNlx1NWY2N1x1NjVlZFx1NjYzMVx1NjgyZlx1NzE1Y1x1N2EzNlx1OTBjMVx1OTgwYVx1NGU5MVx1ZjljNVx1NmE1Mlx1NmI5ZVx1NmY5MFx1NzE4OVx1ODAxOFx1ODJiOFx1ODU1M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzM10ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PWJbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzNdW21dXT01OTY0OCttLFJbNTk2NDgrbV09YlsyMzNdW21dKTtmb3IoYlsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUxNDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRc'@;
put 'dTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhcdThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5'@;
put 'ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRlNzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2Fc'@;
put 'dTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2FcdTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzRdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT1iWzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM0XVttXV09NTk5MDQrbSxSWzU5OTA0K21dPWJbMjM0XVttXSk7Zm9yKGJbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4XHU4OGQ1XHU4YTk4'@;
put 'XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3M2E3XHU4MGU0XHU4'@;
put 'ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5NjcwXHU5N2YzXHU5OGVl'@;
put 'XHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPWJbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzNV1bbV1dPTYwMTYwK20sUls2MDE2MCttXT1iWzIzNV1bbV0pO2ZvcihiWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI3MFx1OTFhYlx1NGU4Y1x1NGVlNVx1NGYwYVx1ZjlkZFx1ZjlkZVx1NTkzN1x1NTllOFx1ZjlkZlx1NWRmMlx1NWYxYlx1NWY1'@;
put 'Ylx1NjAyMVx1ZjllMFx1ZjllMVx1ZjllMlx1ZjllM1x1NzIzZVx1NzNlNVx1ZjllNFx1NzU3MFx1NzVjZFx1ZjllNVx1NzlmYlx1ZjllNlx1ODAwY1x1ODAzM1x1ODA4NFx1ODJlMVx1ODM1MVx1ZjllN1x1ZjllOFx1OGNiZFx1OGNiM1x1OTA4N1x1ZjllOVx1ZjllYVx1OThmNFx1OTkwY1x1'@;
put 'ZjllYlx1ZjllY1x1NzAzN1x1NzZjYVx1N2ZjYVx1N2ZjY1x1N2ZmY1x1OGIxYVx1NGViYVx1NGVjMVx1NTIwM1x1NTM3MFx1ZjllZFx1NTRiZFx1NTZlMFx1NTlmYlx1NWJjNVx1NWYxNVx1NWZjZFx1NmU2ZVx1ZjllZVx1ZjllZlx1N2Q2YVx1ODMzNVx1ZjlmMFx1ODY5M1x1OGE4ZFx1Zjlm'@;
put 'MVx1OTc2ZFx1OTc3N1x1ZjlmMlx1ZjlmM1x1NGUwMFx1NGY1YVx1NGY3ZVx1NThmOVx1NjVlNVx1NmVhMlx1OTAzOFx1OTNiMFx1OTliOVx1NGVmYlx1NThlY1x1NTk4YVx1NTlkOVx1NjA0MVx1ZjlmNFx1ZjlmNVx1N2ExNFx1ZjlmNlx1ODM0Zlx1OGNjM1x1NTE2NVx1NTM0NFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT1iWzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzZdW21dXT02MDQxNittLFJbNjA0MTYrbV09YlsyMzZdW21dKTtmb3IoYlsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRlY2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5'@;
put 'YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVcdThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2Mjhc'@;
put 'dTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRlMDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVj'@;
put 'MDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFcdTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNc'@;
put 'dTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM3XVttXV09NjA2NzIrbSxSWzYwNjcyK21dPWJbMjM3XVttXSk7Zm9yKGJbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2'@;
put 'ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJh'@;
put 'XHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3'@;
put 'ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEz'@;
put 'XHU2YmJmXHU2YzA4XHU2ZmIxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzOF1bbV1dPTYwOTI4K20sUls2MDkyOCttXT1iWzIzOF1bbV0pO2ZvcihiWzIzOV09Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0ZVx1NzQyMFx1NzUzMFx1NzUzOFx1NzU1MVx1NzY3Mlx1'@;
put 'N2I0Y1x1N2I4Ylx1N2JhZFx1N2JjNlx1N2U4Zlx1OGE2ZVx1OGYzZVx1OGY0OVx1OTIzZlx1OTI5M1x1OTMyMlx1OTQyYlx1OTZmYlx1OTg1YVx1OTg2Ylx1OTkxZVx1NTIwN1x1NjIyYVx1NjI5OFx1NmQ1OVx1NzY2NFx1N2FjYVx1N2JjMFx1N2Q3Nlx1NTM2MFx1NWNiZVx1NWU5N1x1NmYz'@;
put 'OFx1NzBiOVx1N2M5OFx1OTcxMVx1OWI4ZVx1OWVkZVx1NjNhNVx1NjQ3YVx1ODc3Nlx1NGUwMVx1NGU5NVx1NGVhZFx1NTA1Y1x1NTA3NVx1NTQ0OFx1NTljM1x1NWI5YVx1NWU0MFx1NWVhZFx1NWVmN1x1NWY4MVx1NjBjNVx1NjMzYVx1NjUzZlx1NjU3NFx1NjVjY1x1NjY3Nlx1NjY3OFx1'@;
put 'NjdmZVx1Njk2OFx1NmE4OVx1NmI2M1x1NmM0MFx1NmRjMFx1NmRlOFx1NmUxZlx1NmU1ZVx1NzAxZVx1NzBhMVx1NzM4ZVx1NzNmZFx1NzUzYVx1Nzc1Ylx1Nzg4N1x1Nzk4ZVx1N2EwYlx1N2E3ZFx1N2NiZVx1N2Q4ZVx1ODI0N1x1OGEwMlx1OGFlYVx1OGM5ZVx1OTEyZFx1OTE0YVx1OTFk'@;
put 'OFx1OTI2Nlx1OTJjY1x1OTMyMFx1OTcwNlx1OTc1Nlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzldW21dXT02MTE4NCttLFJbNjExODQrbV09YlsyMzldW21dKTtmb3IoYlsyNDBdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZc'@;
put 'dTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNcdTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVm'@;
put 'MTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBc'@;
put 'dTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlcdTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4'@;
put 'ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQwXVttXV09NjE0NDArbSxSWzYxNDQwK21dPWJbMjQwXVttXSk7'@;
put 'Zm9yKGJbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTJhXHU4ZTM1'@;
put 'XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2'@;
put 'ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVm'@;
put 'XHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2'@;
put 'MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0MV1bbV1dPTYxNjk2K20sUls2MTY5Nitt'@;
put 'XT1iWzI0MV1bbV0pO2ZvcihiWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1NTRhYlx1NTczMFx1NTc0MFx1NWZkN1x1NjMwMVx1NjMwN1x1NjQ2Zlx1NjUyZlx1NjVlOFx1NjY3YVx1Njc5ZFx1NjdiM1x1NmI2Mlx1NmM2MFx1NmM5YVx1NmYyY1x1NzdlNVx1NzgyNVx1Nzk0OVx1Nzk1N1x1N2QxOVx1ODBhMlx1ODEwMlx1ODFmM1x1ODI5ZFx1ODJiN1x1ODcxOFx1'@;
put 'OGE4Y1x1ZjlmY1x1OGQwNFx1OGRiZVx1OTA3Mlx1NzZmNFx1N2ExOVx1N2EzN1x1N2U1NFx1ODA3N1x1NTUwN1x1NTVkNFx1NTg3NVx1NjMyZlx1NjQyMlx1NjY0OVx1NjY0Ylx1Njg2ZFx1Njk5Ylx1NmI4NFx1NmQyNVx1NmViMVx1NzNjZFx1NzQ2OFx1NzRhMVx1NzU1Ylx1NzViOVx1NzZl'@;
put 'MVx1NzcxZVx1Nzc4Ylx1NzllNlx1N2UwOVx1N2UxZFx1ODFmYlx1ODUyZlx1ODg5N1x1OGEzYVx1OGNkMVx1OGVlYlx1OGZiMFx1OTAzMlx1OTNhZFx1OTY2M1x1OTY3M1x1OTcwN1x1NGY4NFx1NTNmMVx1NTllYVx1NWFjOVx1NWUxOVx1Njg0ZVx1NzRjNlx1NzViZVx1NzllOVx1N2E5Mlx1'@;
put 'ODFhM1x1ODZlZFx1OGNlYVx1OGRjY1x1OGZlZFx1NjU5Zlx1NjcxNVx1ZjlmZFx1NTdmN1x1NmY1N1x1N2RkZFx1OGYyZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDJdW21dXT02MTk1'@;
put 'MittLFJbNjE5NTIrbV09YlsyNDJdW21dKTtmb3IoYlsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2FcdTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZc'@;
put 'dTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdkMmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYx'@;
put 'ZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFcdTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVc'@;
put 'dTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2Jb'@;
put 'MjQzXVttXV09NjIyMDgrbSxSWzYyMjA4K21dPWJbMjQzXVttXSk7Zm9yKGJbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Y2FjXHU1MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4'@;
put 'XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1'@;
put 'YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAw'@;
put 'XHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDRdW21dLmNoYXJDb2Rl'@;
put 'QXQoMCkmJihlZVtiWzI0NF1bbV1dPTYyNDY0K20sUls2MjQ2NCttXT1iWzI0NF1bbV0pO2ZvcihiWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkxMlx1Njk1YVx1NmEzNVx1NzA5Mlx1NzEyNlx1Nzg1ZFx1NzkwMVx1NzkwZVx1NzlkMlx1N2EwZFx1ODA5Nlx1ODI3OFx1ODJkNVx1ODM0OVx1ODU0OVx1OGM4Mlx1OGQ4NVx1OTE2Mlx1OTE4Ylx1OTFhZVx1NGZj'@;
put 'M1x1NTZkMVx1NzFlZFx1NzdkN1x1ODcwMFx1ODlmOFx1NWJmOFx1NWZkNlx1Njc1MVx1OTBhOFx1NTNlMlx1NTg1YVx1NWJmNVx1NjBhNFx1NjE4MVx1NjQ2MFx1N2UzZFx1ODA3MFx1ODUyNVx1OTI4M1x1NjRhZVx1NTBhY1x1NWQxNFx1NjcwMFx1NTg5Y1x1NjJiZFx1NjNhOFx1NjkwZVx1'@;
put 'Njk3OFx1NmExZVx1NmU2Ylx1NzZiYVx1NzljYlx1ODJiYlx1ODQyOVx1OGFjZlx1OGRhOFx1OGZmZFx1OTExMlx1OTE0Ylx1OTE5Y1x1OTMxMFx1OTMxOFx1OTM5YVx1OTZkYlx1OWEzNlx1OWMwZFx1NGUxMVx1NzU1Y1x1Nzk1ZFx1N2FmYVx1N2I1MVx1N2JjOVx1N2UyZVx1ODRjNFx1OGU1'@;
put 'OVx1OGU3NFx1OGVmOFx1OTAxMFx1NjYyNVx1NjkzZlx1NzQ0M1x1NTFmYVx1NjcyZVx1OWVkY1x1NTE0NVx1NWZlMFx1NmM5Nlx1ODdmMlx1ODg1ZFx1ODg3N1x1NjBiNFx1ODFiNVx1ODQwM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ1'@;
put 'XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDVdW21dXT02MjcyMCttLFJbNjI3MjArbV09YlsyNDVdW21dKTtmb3IoYlsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlcdTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYw'@;
put 'ZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdc'@;
put 'dTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2VcdTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3'@;
put 'MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDZdLmxlbmd0aDsrK20p'@;
put 'NjU1MzMhPT1iWzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ2XVttXV09NjI5NzYrbSxSWzYyOTc2K21dPWJbMjQ2XVttXSk7Zm9yKGJbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNkXHU4'@;
put 'Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2NTA0'@;
put 'XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYxXHU1'@;
put 'YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ3'@;
put 'XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0N11bbV1dPTYzMjMyK20sUls2MzIzMittXT1iWzI0N11bbV0pO2ZvcihiWzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTYyYVx1NTE2Ylx1NTNlZFx1NjM0Y1x1NGY2OVx1NTUwNFx1NjA5Nlx1NjU1N1x1NmM5Ylx1NmQ3Zlx1NzI0Y1x1NzJmZFx1N2ExN1x1ODk4N1x1'@;
put 'OGM5ZFx1NWY2ZFx1NmY4ZVx1NzBmOVx1ODFhOFx1NjEwZVx1NGZiZlx1NTA0Zlx1NjI0MVx1NzI0N1x1N2JjN1x1N2RlOFx1N2ZlOVx1OTA0ZFx1OTdhZFx1OWExOVx1OGNiNlx1NTc2YVx1NWU3M1x1NjdiMFx1ODQwZFx1OGE1NVx1NTQyMFx1NWIxNlx1NWU2M1x1NWVlMlx1NWYwYVx1NjU4'@;
put 'M1x1ODBiYVx1ODUzZFx1OTU4OVx1OTY1Ylx1NGY0OFx1NTMwNVx1NTMwZFx1NTMwZlx1NTQ4Nlx1NTRmYVx1NTcwM1x1NWUwM1x1NjAxNlx1NjI5Ylx1NjJiMVx1NjM1NVx1ZmEwNlx1NmNlMVx1NmQ2Nlx1NzViMVx1NzgzMlx1ODBkZVx1ODEyZlx1ODJkZVx1ODQ2MVx1ODRiMlx1ODg4ZFx1'@;
put 'ODkxMlx1OTAwYlx1OTJlYVx1OThmZFx1OWI5MVx1NWU0NVx1NjZiNFx1NjZkZFx1NzAxMVx1NzIwNlx1ZmEwN1x1NGZmNVx1NTI3ZFx1NWY2YVx1NjE1M1x1Njc1M1x1NmExOVx1NmYwMlx1NzRlMlx1Nzk2OFx1ODg2OFx1OGM3OVx1OThjN1x1OThjNFx1OWE0M1x1ZmZmZCIuc3BsaXQoIiIp'@;
put 'LG09MDttIT1iWzI0OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDhdW21dXT02MzQ4OCttLFJbNjM0ODgrbV09YlsyNDhdW21dKTtmb3IoYlsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVcdTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJc'@;
put 'dTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgzNzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTlj'@;
put 'MTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRcdTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJc'@;
put 'dTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZjODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZm'@;
put 'ZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ5XVttXV09NjM3NDQrbSxSWzYzNzQ0K21dPWJbMjQ5XVttXSk7Zm9yKGJbMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmYTA4XHVmYTA5XHU5ODA1XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIz'@;
put 'XHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1'@;
put 'NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2ViXHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQz'@;
put 'XHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1'@;
put 'MjExXHU1NzhiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjUwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNTBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI1MF1bbV1dPTY0ZTMrbSxSWzY0ZTMrbV09YlsyNTBdW21dKTtmb3IoYlsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmNjJcdTZjYzJcdTZlY2VcdTcwMDVcdTcwNTBcdTcwYWZcdTcxOTJcdTczZTlc'@;
put 'dTc0NjlcdTgzNGFcdTg3YTJcdTg4NjFcdTkwMDhcdTkwYTJcdTkzYTNcdTk5YThcdTUxNmVcdTVmNTdcdTYwZTBcdTYxNjdcdTY2YjNcdTg1NTlcdThlNGFcdTkxYWZcdTk3OGJcdTRlNGVcdTRlOTJcdTU0N2NcdTU4ZDVcdTU4ZmFcdTU5N2RcdTVjYjVcdTVmMjdcdTYyMzZcdTYyNDhcdTY2'@;
put 'MGFcdTY2NjdcdTZiZWJcdTZkNjlcdTZkY2ZcdTZlNTZcdTZlZjhcdTZmOTRcdTZmZTBcdTZmZTlcdTcwNWRcdTcyZDBcdTc0MjVcdTc0NWFcdTc0ZTBcdTc2OTNcdTc5NWNcdTdjY2FcdTdlMWVcdTgwZTFcdTgyYTZcdTg0NmJcdTg0YmZcdTg2NGVcdTg2NWZcdTg3NzRcdThiNzdcdThjNmFc'@;
put 'dTkzYWNcdTk4MDBcdTk4NjVcdTYwZDFcdTYyMTZcdTkxNzdcdTVhNWFcdTY2MGZcdTZkZjdcdTZlM2VcdTc0M2ZcdTliNDJcdTVmZmRcdTYwZGFcdTdiMGZcdTU0YzRcdTVmMThcdTZjNWVcdTZjZDNcdTZkMmFcdTcwZDhcdTdkMDVcdTg2NzlcdThhMGNcdTlkM2JcdTUzMTZcdTU0OGNcdTVi'@;
put 'MDVcdTZhM2FcdTcwNmJcdTc1NzVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNTFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI1MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjUxXVttXV09NjQyNTYrbSxSWzY0MjU2K21dPWJbMjUxXVttXSk7Zm9yKGJbMjUyXT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OThkXHU3OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQx'@;
put 'XHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3'@;
put 'MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJm'@;
put 'XHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2'@;
put 'NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjUyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNTJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI1Ml1bbV1dPTY0NTEyK20sUls2NDUxMittXT1iWzI1Ml1bbV0pO2ZvcihiWzI1M109'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzIzYlx1ODBiNFx1OTE3NVx1OWE0'@;
put 'ZFx1NGZhZlx1NTAxOVx1NTM5YVx1NTQwZVx1NTQzY1x1NTU4OVx1NTVjNVx1NWUzZlx1NWY4Y1x1NjczZFx1NzE2Nlx1NzNkZFx1OTAwNVx1NTJkYlx1NTJmM1x1NTg2NFx1NThjZVx1NzEwNFx1NzE4Zlx1NzFmYlx1ODViMFx1OGExM1x1NjY4OFx1ODVhOFx1NTVhN1x1NjY4NFx1NzE0YVx1'@;
put 'ODQzMVx1NTM0OVx1NTU5OVx1NmJjMVx1NWY1OVx1NWZiZFx1NjNlZVx1NjY4OVx1NzE0N1x1OGFmMVx1OGYxZFx1OWViZVx1NGYxMVx1NjQzYVx1NzBjYlx1NzU2Nlx1ODY2N1x1NjA2NFx1OGI0ZVx1OWRmOFx1NTE0N1x1NTFmNlx1NTMwOFx1NmQzNlx1ODBmOFx1OWVkMVx1NjYxNVx1NmIy'@;
put 'M1x1NzA5OFx1NzVkNVx1NTQwM1x1NWM3OVx1N2QwN1x1OGExNlx1NmIyMFx1NmIzZFx1NmI0Nlx1NTQzOFx1NjA3MFx1NmQzZFx1N2ZkNVx1ODIwOFx1NTBkNlx1NTFkZVx1NTU5Y1x1NTY2Ylx1NTZjZFx1NTllY1x1NWIwOVx1NWUwY1x1NjE5OVx1NjE5OFx1NjIzMVx1NjY1ZVx1NjZlNlx1'@;
put 'NzE5OVx1NzFiOVx1NzFiYVx1NzJhN1x1NzlhN1x1N2EwMFx1N2ZiMlx1OGE3MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI1M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjUzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNTNdW21dXT02NDc2OCttLFJbNjQ3NjgrbV09YlsyNTNdW21d'@;
put 'KTtyZXR1cm57ZW5jOmVlLGRlYzpSfX0oKSxTZVs5NTBdPWZ1bmN0aW9uKCl7dmFyIG0sUj1bXSxlZT17fSxiPVtdO2ZvcihiWzBdPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4'@;
put 'MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzBdW21dXT0wK20sUlswK21dPWJbMF1b'@;
put 'bV0pO2ZvcihiWzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1'@;
put 'Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlcdWZlM2FcdTMwMTBcdTMwMTFcdWZl'@;
put 'M2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZlNWJcdWZl'@;
put 'NWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUy'@;
put 'NWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYxZFx1MjI2Nlx1MjI2N1x1MjI2MFx1'@;
put 'MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1MjI5OVx1MjE5MVx1MjE5M1x1MjE5'@;
put 'MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjFdW21dXT00MTIxNittLFJbNDEyMTYrbV09YlsxNjFd'@;
put 'W21dKTtmb3IoYlsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmM2NcdTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMz'@;
put 'ZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVkXHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxXHUyNTgyXHUyNTgzXHUyNTg0XHUyNTg1XHUyNTg2XHUyNTg3XHUyNTg4XHUyNThmXHUy'@;
put 'NThlXHUyNThkXHUyNThjXHUyNThiXHUyNThhXHUyNTg5XHUyNTNjXHUyNTM0XHUyNTJjXHUyNTI0XHUyNTFjXHUyNTk0XHUyNTAwXHUyNTAyXHUyNTk1XHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTZlXHUy'@;
put 'NTcwXHUyNTZmXHUyNTUwXHUyNTVlXHUyNTZhXHUyNTYxXHUyNWUyXHUyNWUzXHUyNWU1XHUyNWU0XHUyNTcxXHUyNTcyXHUyNTczXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0'@;
put 'XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUzMDIxXHUzMDIyXHUzMDIzXHUzMDI0XHUzMDI1XHUzMDI2XHUzMDI3XHUzMDI4XHUzMDI5XHU1MzQxXHU1MzQ0XHU1MzQ1XHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVm'@;
put 'ZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRj'@;
put 'XHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTYyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2Ml1bbV1dPTQxNDcyK20sUls0MTQ3'@;
put 'MittXT1iWzE2Ml1bbV0pO2ZvcihiWzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5'@;
put 'YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1'@;
put 'MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1MzExMFx1MzExMVx1MzExMlx1MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1MDJk'@;
put 'OVx1MDJjOVx1MDJjYVx1MDJjN1x1MDJjYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjBhY1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTYzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjNdW21dXT00'@;
put 'MTcyOCttLFJbNDE3MjgrbV09YlsxNjNdW21dKTtmb3IoYlsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRlYmFcdTUxM2ZcdTUxNjVcdTUx'@;
put 'NmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFcdTUzNDNcdTUzYzlcdTUzZTNc'@;
put 'dTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRlY2JcdTRlYzRcdTUxNDNcdTUx'@;
put 'NDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5MjlcdTU5MmJcdTU5MmFcdTU5MmRc'@;
put 'dTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZiMjBcdTZiNjJcdTZiNzlcdTZi'@;
put 'Y2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVl'@;
put 'W2JbMTY0XVttXV09NDE5ODQrbSxSWzQxOTg0K21dPWJbMTY0XVttXSk7Zm9yKGJbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTE2XHU0ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0'@;
put 'ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1MjlmXHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYx'@;
put 'XHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2XHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBhXHU2MjUzXHU2MjU0XHU2MjUyXHU2'@;
put 'MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3NTI5XHU3NTMwXHU3NTMxXHU3NTMy'@;
put 'XHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0'@;
put 'ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjVdW21dLmNoYXJD'@;
put 'b2RlQXQoMCkmJihlZVtiWzE2NV1bbV1dPTQyMjQwK20sUls0MjI0MCttXT1iWzE2NV1bbV0pO2ZvcihiWzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTE3MVx1NTE4ZFx1NTFiMFx1NTIxN1x1NTIxMVx1NTIxMlx1NTIwZVx1'@;
put 'NTIxNlx1NTJhM1x1NTMwOFx1NTMyMVx1NTMyMFx1NTM3MFx1NTM3MVx1NTQwOVx1NTQwZlx1NTQwY1x1NTQwYVx1NTQxMFx1NTQwMVx1NTQwYlx1NTQwNFx1NTQxMVx1NTQwZFx1NTQwOFx1NTQwM1x1NTQwZVx1NTQwNlx1NTQxMlx1NTZlMFx1NTZkZVx1NTZkZFx1NTczM1x1NTczMFx1NTcy'@;
put 'OFx1NTcyZFx1NTcyY1x1NTcyZlx1NTcyOVx1NTkxOVx1NTkxYVx1NTkzN1x1NTkzOFx1NTk4NFx1NTk3OFx1NTk4M1x1NTk3ZFx1NTk3OVx1NTk4Mlx1NTk4MVx1NWI1N1x1NWI1OFx1NWI4N1x1NWI4OFx1NWI4NVx1NWI4OVx1NWJmYVx1NWMxNlx1NWM3OVx1NWRkZVx1NWUwNlx1NWU3Nlx1'@;
put 'NWU3NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWYwZlx1NWYxYlx1NWZkOVx1NWZkNlx1NjIwZVx1NjIwY1x1NjIwZFx1NjIxMFx1NjI2M1x1NjI1Ylx1NjI1OFx1NjUzNlx1NjVlOVx1NjVlOFx1NjVlY1x1NjVlZFx1NjZmMlx1NjZmM1x1NjcwOVx1NjczZFx1'@;
put 'NjczNFx1NjczMVx1NjczNVx1NmIyMVx1NmI2NFx1NmI3Ylx1NmMxNlx1NmM1ZFx1NmM1N1x1NmM1OVx1NmM1Zlx1NmM2MFx1NmM1MFx1NmM1NVx1NmM2MVx1NmM1Ylx1NmM0ZFx1NmM0ZVx1NzA3MFx1NzI1Zlx1NzI1ZFx1NzY3ZVx1N2FmOVx1N2M3M1x1N2NmOFx1N2YzNlx1N2Y4YVx1N2Zi'@;
put 'ZFx1ODAwMVx1ODAwM1x1ODAwY1x1ODAxMlx1ODAzM1x1ODA3Zlx1ODA4OVx1ODA4Ylx1ODA4Y1x1ODFlM1x1ODFlYVx1ODFmM1x1ODFmY1x1ODIwY1x1ODIxYlx1ODIxZlx1ODI2ZVx1ODI3Mlx1ODI3ZVx1ODY2Ylx1ODg0MFx1ODg0Y1x1ODg2M1x1ODk3Zlx1OTYyMVx1NGUzMlx1NGVhOFx1'@;
put 'NGY0ZFx1NGY0Zlx1NGY0N1x1NGY1N1x1NGY1ZVx1NGYzNFx1NGY1Ylx1NGY1NVx1NGYzMFx1NGY1MFx1NGY1MVx1NGYzZFx1NGYzYVx1NGYzOFx1NGY0M1x1NGY1NFx1NGYzY1x1NGY0Nlx1NGY2M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJb'@;
put 'MTY2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjZdW21dXT00MjQ5NittLFJbNDI0OTYrbV09YlsxNjZdW21dKTtmb3IoYlsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRmMmZcdTRmNGVcdTRmMzZc'@;
put 'dTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVcdTU0M2VcdTU0MjZcdTU0'@;
put 'NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2ZTRcdTU2ZWJcdTU3NGFc'@;
put 'dTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5OGRcdTU5YTRcdTU5OTNc'@;
put 'dTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRcdTVmMWZcdTVmNjRcdTVm'@;
put 'NjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNmZcdTYyOThc'@;
put 'dTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjddLmxlbmd0aDsr'@;
put 'K20pNjU1MzMhPT1iWzE2N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY3XVttXV09NDI3NTIrbSxSWzQyNzUyK21dPWJbMTY3XVttXSk7Zm9yKGJbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzUzXHU2NzU3XHU2YjY1'@;
put 'XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2'@;
put 'YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4'@;
put 'XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MjhiXHU4MjhkXHU4OThiXHU4OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIw'@;
put 'XHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJlXHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0'@;
put 'ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZk'@;
put 'XHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJb'@;
put 'MTY4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2OF1bbV1dPTQzMDA4K20sUls0MzAwOCttXT1iWzE2OF1bbV0pO2ZvcihiWzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTQ5'@;
put 'Nlx1NTQ3OFx1NTQ5NVx1NTQ4MFx1NTQ3Ylx1NTQ3N1x1NTQ4NFx1NTQ5Mlx1NTQ4Nlx1NTQ3Y1x1NTQ5MFx1NTQ3MVx1NTQ3Nlx1NTQ4Y1x1NTQ5YVx1NTQ2Mlx1NTQ2OFx1NTQ4Ylx1NTQ3ZFx1NTQ4ZVx1NTZmYVx1NTc4M1x1NTc3N1x1NTc2YVx1NTc2OVx1NTc2MVx1NTc2Nlx1NTc2NFx1'@;
put 'NTc3Y1x1NTkxY1x1NTk0OVx1NTk0N1x1NTk0OFx1NTk0NFx1NTk1NFx1NTliZVx1NTliYlx1NTlkNFx1NTliOVx1NTlhZVx1NTlkMVx1NTljNlx1NTlkMFx1NTljZFx1NTljYlx1NTlkM1x1NTljYVx1NTlhZlx1NTliM1x1NTlkMlx1NTljNVx1NWI1Zlx1NWI2NFx1NWI2M1x1NWI5N1x1NWI5'@;
put 'YVx1NWI5OFx1NWI5Y1x1NWI5OVx1NWI5Ylx1NWMxYVx1NWM0OFx1NWM0NVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWM0Nlx1NWNiN1x1NWNhMVx1NWNiOFx1NWNhOVx1NWNhYlx1NWNiMVx1NWNiM1x1NWUxOFx1NWUxYVx1NWUxNlx1NWUxNVx1NWUxYlx1NWUx'@;
put 'MVx1NWU3OFx1NWU5YVx1NWU5N1x1NWU5Y1x1NWU5NVx1NWU5Nlx1NWVmNlx1NWYyNlx1NWYyN1x1NWYyOVx1NWY4MFx1NWY4MVx1NWY3Zlx1NWY3Y1x1NWZkZFx1NWZlMFx1NWZmZFx1NWZmNVx1NWZmZlx1NjAwZlx1NjAxNFx1NjAyZlx1NjAzNVx1NjAxNlx1NjAyYVx1NjAxNVx1NjAyMVx1'@;
put 'NjAyN1x1NjAyOVx1NjAyYlx1NjAxYlx1NjIxNlx1NjIxNVx1NjIzZlx1NjIzZVx1NjI0MFx1NjI3Zlx1NjJjOVx1NjJjY1x1NjJjNFx1NjJiZlx1NjJjMlx1NjJiOVx1NjJkMlx1NjJkYlx1NjJhYlx1NjJkM1x1NjJkNFx1NjJjYlx1NjJjOFx1NjJhOFx1NjJiZFx1NjJiY1x1NjJkMFx1NjJk'@;
put 'OVx1NjJjN1x1NjJjZFx1NjJiNVx1NjJkYVx1NjJiMVx1NjJkOFx1NjJkNlx1NjJkN1x1NjJjNlx1NjJhY1x1NjJjZVx1NjUzZVx1NjVhN1x1NjViY1x1NjVmYVx1NjYxNFx1NjYxM1x1NjYwY1x1NjYwNlx1NjYwMlx1NjYwZVx1NjYwMFx1NjYwZlx1NjYxNVx1NjYwYVx1ZmZmZCIuc3BsaXQo'@;
put 'IiIpLG09MDttIT1iWzE2OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjldW21dXT00MzI2NCttLFJbNDMyNjQrbV09YlsxNjldW21dKTtmb3IoYlsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFcdTY3NzJcdTZiMjNc'@;
put 'dTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZjYzVcdTZjZjFcdTZj'@;
put 'YmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcy'@;
put 'YzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2FcdTdhNzlcdTdhZmFc'@;
put 'dTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgyYjFcdTgyYWNcdTgy'@;
put 'YTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2ZcdTk2M2JcdTk2NDRc'@;
put 'dWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTcwXVttXV09NDM1MjArbSxSWzQzNTIwK21dPWJbMTcwXVttXSk7Zm9yKGJbMTcxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQw'@;
put 'XHU0ZmM0XHU0ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1'@;
put 'NGMwXHU1NGE4XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1'@;
put 'NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEz'@;
put 'XHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRlXHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1'@;
put 'ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3'@;
put 'XHU2MmYxXHU2MmY3XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTcxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3MV1bbV1dPTQzNzc2K20sUls0Mzc3NittXT1iWzE3MV1bbV0pO2ZvcihiWzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlZlx1NjJlY1x1NjJmZVx1NjJmNFx1NjMxMVx1NjMwMlx1NjUzZlx1NjU0NVx1NjVhYlx1NjViZFx1NjVlMlx1NjYyNVx1NjYyZFx1NjYyMFx1NjYyN1x1NjYyZlx1NjYxZlx1NjYyOFx1NjYzMVx1NjYyNFx1NjZmN1x1Njdm'@;
put 'Zlx1NjdkM1x1NjdmMVx1NjdkNFx1NjdkMFx1NjdlY1x1NjdiNlx1NjdhZlx1NjdmNVx1NjdlOVx1NjdlZlx1NjdjNFx1NjdkMVx1NjdiNFx1NjdkYVx1NjdlNVx1NjdiOFx1NjdjZlx1NjdkZVx1NjdmM1x1NjdiMFx1NjdkOVx1NjdlMlx1NjdkZFx1NjdkMlx1NmI2YVx1NmI4M1x1NmI4Nlx1'@;
put 'NmJiNVx1NmJkMlx1NmJkN1x1NmMxZlx1NmNjOVx1NmQwYlx1NmQzMlx1NmQyYVx1NmQ0MVx1NmQyNVx1NmQwY1x1NmQzMVx1NmQxZVx1NmQxN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQzYlx1NmQzZFx1NmQzZVx1NmQzNlx1NmQxYlx1NmNmNVx1NmQzOVx1'@;
put 'NmQyN1x1NmQzOFx1NmQyOVx1NmQyZVx1NmQzNVx1NmQwZVx1NmQyYlx1NzBhYlx1NzBiYVx1NzBiM1x1NzBhY1x1NzBhZlx1NzBhZFx1NzBiOFx1NzBhZVx1NzBhNFx1NzIzMFx1NzI3Mlx1NzI2Zlx1NzI3NFx1NzJlOVx1NzJlMFx1NzJlMVx1NzNiN1x1NzNjYVx1NzNiYlx1NzNiMlx1NzNj'@;
put 'ZFx1NzNjMFx1NzNiM1x1NzUxYVx1NzUyZFx1NzU0Zlx1NzU0Y1x1NzU0ZVx1NzU0Ylx1NzVhYlx1NzVhNFx1NzVhNVx1NzVhMlx1NzVhM1x1NzY3OFx1NzY4Nlx1NzY4N1x1NzY4OFx1NzZjOFx1NzZjNlx1NzZjM1x1NzZjNVx1NzcwMVx1NzZmOVx1NzZmOFx1NzcwOVx1NzcwYlx1NzZmZVx1'@;
put 'NzZmY1x1NzcwN1x1NzdkY1x1NzgwMlx1NzgxNFx1NzgwY1x1NzgwZFx1Nzk0Nlx1Nzk0OVx1Nzk0OFx1Nzk0N1x1NzliOVx1NzliYVx1NzlkMVx1NzlkMlx1NzljYlx1N2E3Zlx1N2E4MVx1N2FmZlx1N2FmZFx1N2M3ZFx1N2QwMlx1N2QwNVx1N2QwMFx1N2QwOVx1N2QwN1x1N2QwNFx1N2Qw'@;
put 'Nlx1N2YzOFx1N2Y4ZVx1N2ZiZlx1ODAwNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTcyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzJdW21dXT00NDAzMittLFJbNDQwMzIrbV09YlsxNzJdW21dKTtmb3IoYlsxNzNdPSJcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJcdTgyZTdcdTgz'@;
put 'MDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4NmJcdTg5ODFc'@;
put 'dTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThmZThcdTkwY2Fc'@;
put 'dTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRcdTUwMjNcdTRm'@;
put 'ZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUwMmJcdTUwMDlc'@;
put 'dTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZcdTU0ZmFcdTU1'@;
put 'MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTczXVttXV09NDQyODgrbSxSWzQ0Mjg4K21dPWJbMTczXVttXSk7Zm9yKGJb'@;
put 'MTc0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2NiXHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1'@;
put 'YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2Zk'@;
put 'XHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDYzXHU2MDY1XHU2MDUw'@;
put 'XHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2MzNhXHU2MzUwXHU2MzNkXHU2'@;
put 'MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4XHU2ODQ2XHU2ODUzXHU2ODM5'@;
put 'XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2YzI2XHU2YzI0XHU2Y2YwXHU2'@;
put 'ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3NF1bbV1dPTQ0NTQ0K20sUls0NDU0NCttXT1iWzE3'@;
put 'NF1bbV0pO2ZvcihiWzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ2Y1x1NmQ4OVx1NmQ2ZVx1NmQ1YVx1NmQ3NFx1NmQ2OVx1NmQ4Y1x1NmQ4YVx1NmQ3OVx1NmQ4NVx1NmQ2NVx1NmQ5NFx1NzBjYVx1NzBkOFx1NzBlNFx1'@;
put 'NzBkOVx1NzBjOFx1NzBjZlx1NzIzOVx1NzI3OVx1NzJmY1x1NzJmOVx1NzJmZFx1NzJmOFx1NzJmN1x1NzM4Nlx1NzNlZFx1NzQwOVx1NzNlZVx1NzNlMFx1NzNlYVx1NzNkZVx1NzU1NFx1NzU1ZFx1NzU1Y1x1NzU1YVx1NzU1OVx1NzViZVx1NzVjNVx1NzVjN1x1NzViMlx1NzViM1x1NzVi'@;
put 'ZFx1NzViY1x1NzViOVx1NzVjMlx1NzViOFx1NzY4Ylx1NzZiMFx1NzZjYVx1NzZjZFx1NzZjZVx1NzcyOVx1NzcxZlx1NzcyMFx1NzcyOFx1NzdlOVx1NzgzMFx1NzgyN1x1NzgzOFx1NzgxZFx1NzgzNFx1NzgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzgy'@;
put 'NVx1NzgyZFx1NzgyMFx1NzgxZlx1NzgzMlx1Nzk1NVx1Nzk1MFx1Nzk2MFx1Nzk1Zlx1Nzk1Nlx1Nzk1ZVx1Nzk1ZFx1Nzk1N1x1Nzk1YVx1NzllNFx1NzllM1x1NzllN1x1NzlkZlx1NzllNlx1NzllOVx1NzlkOFx1N2E4NFx1N2E4OFx1N2FkOVx1N2IwNlx1N2IxMVx1N2M4OVx1N2QyMVx1'@;
put 'N2QxN1x1N2QwYlx1N2QwYVx1N2QyMFx1N2QyMlx1N2QxNFx1N2QxMFx1N2QxNVx1N2QxYVx1N2QxY1x1N2QwZFx1N2QxOVx1N2QxYlx1N2YzYVx1N2Y1Zlx1N2Y5NFx1N2ZjNVx1N2ZjMVx1ODAwNlx1ODAxOFx1ODAxNVx1ODAxOVx1ODAxN1x1ODAzZFx1ODAzZlx1ODBmMVx1ODEwMlx1ODBm'@;
put 'MFx1ODEwNVx1ODBlZFx1ODBmNFx1ODEwNlx1ODBmOFx1ODBmM1x1ODEwOFx1ODBmZFx1ODEwYVx1ODBmY1x1ODBlZlx1ODFlZFx1ODFlY1x1ODIwMFx1ODIxMFx1ODIyYVx1ODIyYlx1ODIyOFx1ODIyY1x1ODJiYlx1ODMyYlx1ODM1Mlx1ODM1NFx1ODM0YVx1ODMzOFx1ODM1MFx1ODM0OVx1'@;
put 'ODMzNVx1ODMzNFx1ODM0Zlx1ODMzMlx1ODMzOVx1ODMzNlx1ODMxN1x1ODM0MFx1ODMzMVx1ODMyOFx1ODM0M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzVdW21dXT00NDgwMCttLFJb'@;
put 'NDQ4MDArbV09YlsxNzVdW21dKTtmb3IoYlsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJc'@;
put 'dTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThmZjdcdTkw'@;
put 'MDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVcdTUwNTVc'@;
put 'dTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1NjZcdTU1'@;
put 'NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBcdTU3ZTRc'@;
put 'dTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc2XVtt'@;
put 'XV09NDUwNTYrbSxSWzQ1MDU2K21dPWJbMTc2XVttXSk7Zm9yKGJbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJm'@;
put 'XHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFiXHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1'@;
put 'ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4'@;
put 'XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2'@;
put 'NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVlXHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3'@;
put 'XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzddW21dLmNoYXJDb2RlQXQoMCkm'@;
put 'JihlZVtiWzE3N11bbV1dPTQ1MzEyK20sUls0NTMxMittXT1iWzE3N11bbV0pO2ZvcihiWzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmJlYlx1NmJlY1x1NmMyYlx1NmQ4ZVx1NmRiY1x1NmRmM1x1NmRkOVx1NmRiMlx1NmRl'@;
put 'MVx1NmRjY1x1NmRlNFx1NmRmYlx1NmRmYVx1NmUwNVx1NmRjN1x1NmRjYlx1NmRhZlx1NmRkMVx1NmRhZVx1NmRkZVx1NmRmOVx1NmRiOFx1NmRmN1x1NmRmNVx1NmRjNVx1NmRkMlx1NmUxYVx1NmRiNVx1NmRkYVx1NmRlYlx1NmRkOFx1NmRlYVx1NmRmMVx1NmRlZVx1NmRlOFx1NmRjNlx1'@;
put 'NmRjNFx1NmRhYVx1NmRlY1x1NmRiZlx1NmRlNlx1NzBmOVx1NzEwOVx1NzEwYVx1NzBmZFx1NzBlZlx1NzIzZFx1NzI3ZFx1NzI4MVx1NzMxY1x1NzMxYlx1NzMxNlx1NzMxM1x1NzMxOVx1NzM4N1x1NzQwNVx1NzQwYVx1NzQwM1x1NzQwNlx1NzNmZVx1NzQwZFx1NzRlMFx1NzRmNlx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRmN1x1NzUxY1x1NzUyMlx1NzU2NVx1NzU2Nlx1NzU2Mlx1NzU3MFx1NzU4Zlx1NzVkNFx1NzVkNVx1NzViNVx1NzVjYVx1NzVjZFx1NzY4ZVx1NzZkNFx1NzZkMlx1NzZkYlx1NzczN1x1NzczZVx1NzczY1x1NzczNlx1Nzcz'@;
put 'OFx1NzczYVx1Nzg2Ylx1Nzg0M1x1Nzg0ZVx1Nzk2NVx1Nzk2OFx1Nzk2ZFx1NzlmYlx1N2E5Mlx1N2E5NVx1N2IyMFx1N2IyOFx1N2IxYlx1N2IyY1x1N2IyNlx1N2IxOVx1N2IxZVx1N2IyZVx1N2M5Mlx1N2M5N1x1N2M5NVx1N2Q0Nlx1N2Q0M1x1N2Q3MVx1N2QyZVx1N2QzOVx1N2QzY1x1'@;
put 'N2Q0MFx1N2QzMFx1N2QzM1x1N2Q0NFx1N2QyZlx1N2Q0Mlx1N2QzMlx1N2QzMVx1N2YzZFx1N2Y5ZVx1N2Y5YVx1N2ZjY1x1N2ZjZVx1N2ZkMlx1ODAxY1x1ODA0YVx1ODA0Nlx1ODEyZlx1ODExNlx1ODEyM1x1ODEyYlx1ODEyOVx1ODEzMFx1ODEyNFx1ODIwMlx1ODIzNVx1ODIzN1x1ODIz'@;
put 'Nlx1ODIzOVx1ODM4ZVx1ODM5ZVx1ODM5OFx1ODM3OFx1ODNhMlx1ODM5Nlx1ODNiZFx1ODNhYlx1ODM5Mlx1ODM4YVx1ODM5M1x1ODM4OVx1ODNhMFx1ODM3N1x1ODM3Ylx1ODM3Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc4XVttXS5j'@;
put 'aGFyQ29kZUF0KDApJiYoZWVbYlsxNzhdW21dXT00NTU2OCttLFJbNDU1NjgrbV09YlsxNzhdW21dKTtmb3IoYlsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBcdTg2'@;
put 'YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThjNDlc'@;
put 'dThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZcdTkw'@;
put 'MWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2'@;
put 'NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUyNzRc'@;
put 'dTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFcdTU1'@;
put 'YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzldLmxlbmd0aDsrK20pNjU1MzMh'@;
put 'PT1iWzE3OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc5XVttXV09NDU4MjQrbSxSWzQ1ODI0K21dPWJbMTc5XVttXSk7Zm9yKGJbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1'@;
put 'YTliXHU1YWE3XHU1YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5'@;
put 'XHU1ZmFhXHU1ZmE4XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2'@;
put 'M2U5XHU2M2M5XHU2M2M2XHU2M2NkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2'@;
put 'NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5'@;
put 'XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2'@;
put 'ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTViXHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTgwXS5sZW5n'@;
put 'dGg7KyttKTY1NTMzIT09YlsxODBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4MF1bbV1dPTQ2MDgwK20sUls0NjA4MCttXT1iWzE4MF1bbV0pO2ZvcihiWzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmU4OVx1NmUxOVx1'@;
put 'NmU0ZVx1NmU2M1x1NmU0NFx1NmU3Mlx1NmU2OVx1NmU1Zlx1NzExOVx1NzExYVx1NzEyNlx1NzEzMFx1NzEyMVx1NzEzNlx1NzE2ZVx1NzExY1x1NzI0Y1x1NzI4NFx1NzI4MFx1NzMzNlx1NzMyNVx1NzMzNFx1NzMyOVx1NzQzYVx1NzQyYVx1NzQzM1x1NzQyMlx1NzQyNVx1NzQzNVx1NzQz'@;
put 'Nlx1NzQzNFx1NzQyZlx1NzQxYlx1NzQyNlx1NzQyOFx1NzUyNVx1NzUyNlx1NzU2Ylx1NzU2YVx1NzVlMlx1NzVkYlx1NzVlM1x1NzVkOVx1NzVkOFx1NzVkZVx1NzVlMFx1NzY3Ylx1NzY3Y1x1NzY5Nlx1NzY5M1x1NzZiNFx1NzZkY1x1Nzc0Zlx1NzdlZFx1Nzg1ZFx1Nzg2Y1x1Nzg2Zlx1'@;
put 'N2EwZFx1N2EwOFx1N2EwYlx1N2EwNVx1N2EwMFx1N2E5OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2E5N1x1N2E5Nlx1N2FlNVx1N2FlM1x1N2I0OVx1N2I1Nlx1N2I0Nlx1N2I1MFx1N2I1Mlx1N2I1NFx1N2I0ZFx1N2I0Ylx1N2I0Zlx1N2I1MVx1N2M5Zlx1'@;
put 'N2NhNVx1N2Q1ZVx1N2Q1MFx1N2Q2OFx1N2Q1NVx1N2QyYlx1N2Q2ZVx1N2Q3Mlx1N2Q2MVx1N2Q2Nlx1N2Q2Mlx1N2Q3MFx1N2Q3M1x1NTU4NFx1N2ZkNFx1N2ZkNVx1ODAwYlx1ODA1Mlx1ODA4NVx1ODE1NVx1ODE1NFx1ODE0Ylx1ODE1MVx1ODE0ZVx1ODEzOVx1ODE0Nlx1ODEzZVx1ODE0'@;
put 'Y1x1ODE1M1x1ODE3NFx1ODIxMlx1ODIxY1x1ODNlOVx1ODQwM1x1ODNmOFx1ODQwZFx1ODNlMFx1ODNjNVx1ODQwYlx1ODNjMVx1ODNlZlx1ODNmMVx1ODNmNFx1ODQ1N1x1ODQwYVx1ODNmMFx1ODQwY1x1ODNjY1x1ODNmZFx1ODNmMlx1ODNjYVx1ODQzOFx1ODQwZVx1ODQwNFx1ODNkY1x1'@;
put 'ODQwN1x1ODNkNFx1ODNkZlx1ODY1Ylx1ODZkZlx1ODZkOVx1ODZlZFx1ODZkNFx1ODZkYlx1ODZlNFx1ODZkMFx1ODZkZVx1ODg1N1x1ODhjMVx1ODhjMlx1ODhiMVx1ODk4M1x1ODk5Nlx1OGEzYlx1OGE2MFx1OGE1NVx1OGE1ZVx1OGEzY1x1OGE0MVx1ZmZmZCIuc3BsaXQoIiIpLG09MDtt'@;
put 'IT1iWzE4MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTgxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODFdW21dXT00NjMzNittLFJbNDYzMzYrbV09YlsxODFdW21dKTtmb3IoYlsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThk'@;
put 'Y2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVc'@;
put 'dTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFc'@;
put 'dTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUw'@;
put 'YmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFc'@;
put 'dTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNw'@;
put 'bGl0KCIiKSxtPTA7bSE9YlsxODJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTgyXVttXV09NDY1OTIrbSxSWzQ2NTkyK21dPWJbMTgyXVttXSk7Zm9yKGJbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2'@;
put 'MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3'@;
put 'XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2OTY4XHU2OTZiXHU2OTVl'@;
put 'XHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJhXHU2ZWFiXHU2ZWQxXHU2'@;
put 'ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3MzQ1XHU3MzNmXHU3MzNl'@;
put 'XHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZiXHU3NzY2XHU3NzVlXHU3'@;
put 'NzYzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTgzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4M11bbV1dPTQ2ODQ4K20sUls0Njg0OCttXT1iWzE4M11bbV0pO2ZvcihiWzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc3OVx1Nzc2YVx1Nzc2Y1x1Nzc1Y1x1Nzc2NVx1Nzc2OFx1Nzc2Mlx1NzdlZVx1Nzg4ZVx1NzhiMFx1Nzg5N1x1Nzg5OFx1Nzg4Y1x1Nzg4OVx1Nzg3Y1x1Nzg5MVx1Nzg5M1x1Nzg3Zlx1Nzk3YVx1Nzk3Zlx1Nzk4MVx1ODQyY1x1NzliZFx1'@;
put 'N2ExY1x1N2ExYVx1N2EyMFx1N2ExNFx1N2ExZlx1N2ExZVx1N2E5Zlx1N2FhMFx1N2I3N1x1N2JjMFx1N2I2MFx1N2I2ZVx1N2I2N1x1N2NiMVx1N2NiM1x1N2NiNVx1N2Q5M1x1N2Q3OVx1N2Q5MVx1N2Q4MVx1N2Q4Zlx1N2Q1Ylx1N2Y2ZVx1N2Y2OVx1N2Y2YVx1N2Y3Mlx1N2ZhOVx1N2Zh'@;
put 'OFx1N2ZhNFx1ODA1Nlx1ODA1OFx1ODA4Nlx1ODA4NFx1ODE3MVx1ODE3MFx1ODE3OFx1ODE2NVx1ODE2ZVx1ODE3M1x1ODE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE3OVx1ODE3YVx1ODE2Nlx1ODIwNVx1ODI0N1x1ODQ4Mlx1ODQ3N1x1ODQzZFx1ODQz'@;
put 'MVx1ODQ3NVx1ODQ2Nlx1ODQ2Ylx1ODQ0OVx1ODQ2Y1x1ODQ1Ylx1ODQzY1x1ODQzNVx1ODQ2MVx1ODQ2M1x1ODQ2OVx1ODQ2ZFx1ODQ0Nlx1ODY1ZVx1ODY1Y1x1ODY1Zlx1ODZmOVx1ODcxM1x1ODcwOFx1ODcwN1x1ODcwMFx1ODZmZVx1ODZmYlx1ODcwMlx1ODcwM1x1ODcwNlx1ODcwYVx1'@;
put 'ODg1OVx1ODhkZlx1ODhkNFx1ODhkOVx1ODhkY1x1ODhkOFx1ODhkZFx1ODhlMVx1ODhjYVx1ODhkNVx1ODhkMlx1ODk5Y1x1ODllM1x1OGE2Ylx1OGE3Mlx1OGE3M1x1OGE2Nlx1OGE2OVx1OGE3MFx1OGE4N1x1OGE3Y1x1OGE2M1x1OGFhMFx1OGE3MVx1OGE4NVx1OGE2ZFx1OGE2Mlx1OGE2'@;
put 'ZVx1OGE2Y1x1OGE3OVx1OGE3Ylx1OGEzZVx1OGE2OFx1OGM2Mlx1OGM4YVx1OGM4OVx1OGNjYVx1OGNjN1x1OGNjOFx1OGNjNFx1OGNiMlx1OGNjM1x1OGNjMlx1OGNjNVx1OGRlMVx1OGRkZlx1OGRlOFx1OGRlZlx1OGRmM1x1OGRmYVx1OGRlYVx1OGRlNFx1OGRlNlx1OGViMlx1OGYwM1x1'@;
put 'OGYwOVx1OGVmZVx1OGYwYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODRdW21dXT00NzEwNCttLFJbNDcxMDQrbV09YlsxODRdW21dKTtmb3IoYlsxODVdPSJcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFc'@;
put 'dTkxNjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2'@;
put 'ZjdcdTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTlj'@;
put 'ZTlcdTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRc'@;
put 'dTU2MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVh'@;
put 'ZTFcdTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZc'@;
put 'dTVmMGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg1XVttXV09NDczNjArbSxSWzQ3MzYwK21dPWJbMTg1XVttXSk7Zm9yKGJbMTg2XT0iXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MTNmXHU2MTRiXHU2MTc3XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3'@;
put 'XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2'@;
put 'OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNlXHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2'@;
put 'ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcw'@;
put 'XHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlmXHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3'@;
put 'YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEy'@;
put 'XHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4Nl1bbV1dPTQ3NjE2K20sUls0NzYxNittXT1iWzE4Nl1bbV0pO2Zv'@;
put 'cihiWzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y3MFx1N2ZlMFx1N2ZlMVx1N2ZkZlx1ODA1ZVx1ODA1YVx1ODA4N1x1ODE1MFx1ODE4MFx1ODE4Zlx1ODE4OFx1ODE4YVx1ODE3Zlx1ODE4Mlx1ODFlN1x1ODFmYVx1ODIw'@;
put 'N1x1ODIxNFx1ODIxZVx1ODI0Ylx1ODRjOVx1ODRiZlx1ODRjNlx1ODRjNFx1ODQ5OVx1ODQ5ZVx1ODRiMlx1ODQ5Y1x1ODRjYlx1ODRiOFx1ODRjMFx1ODRkM1x1ODQ5MFx1ODRiY1x1ODRkMVx1ODRjYVx1ODczZlx1ODcxY1x1ODczYlx1ODcyMlx1ODcyNVx1ODczNFx1ODcxOFx1ODc1NVx1'@;
put 'ODczN1x1ODcyOVx1ODhmM1x1ODkwMlx1ODhmNFx1ODhmOVx1ODhmOFx1ODhmZFx1ODhlOFx1ODkxYVx1ODhlZlx1OGFhNlx1OGE4Y1x1OGE5ZVx1OGFhM1x1OGE4ZFx1OGFhMVx1OGE5M1x1OGFhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGFhYVx1OGFhNVx1'@;
put 'OGFhOFx1OGE5OFx1OGE5MVx1OGE5YVx1OGFhN1x1OGM2YVx1OGM4ZFx1OGM4Y1x1OGNkM1x1OGNkMVx1OGNkMlx1OGQ2Ylx1OGQ5OVx1OGQ5NVx1OGRmY1x1OGYxNFx1OGYxMlx1OGYxNVx1OGYxM1x1OGZhM1x1OTA2MFx1OTA1OFx1OTA1Y1x1OTA2M1x1OTA1OVx1OTA1ZVx1OTA2Mlx1OTA1'@;
put 'ZFx1OTA1Ylx1OTExOVx1OTExOFx1OTExZVx1OTE3NVx1OTE3OFx1OTE3N1x1OTE3NFx1OTI3OFx1OTI4MFx1OTI4NVx1OTI5OFx1OTI5Nlx1OTI3Ylx1OTI5M1x1OTI5Y1x1OTJhOFx1OTI3Y1x1OTI5MVx1OTVhMVx1OTVhOFx1OTVhOVx1OTVhM1x1OTVhNVx1OTVhNFx1OTY5OVx1OTY5Y1x1'@;
put 'OTY5Ylx1OTZjY1x1OTZkMlx1OTcwMFx1OTc3Y1x1OTc4NVx1OTdmNlx1OTgxN1x1OTgxOFx1OThhZlx1OThiMVx1OTkwM1x1OTkwNVx1OTkwY1x1OTkwOVx1OTljMVx1OWFhZlx1OWFiMFx1OWFlNlx1OWI0MVx1OWI0Mlx1OWNmNFx1OWNmNlx1OWNmM1x1OWViY1x1OWYzYlx1OWY0YVx1NTEw'@;
put 'NFx1NTEwMFx1NTBmYlx1NTBmNVx1NTBmOVx1NTEwMlx1NTEwOFx1NTEwOVx1NTEwNVx1NTFkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODddW21dXT00Nzg3MittLFJbNDc4NzIrbV09'@;
put 'YlsxODddW21dKTtmb3IoYlsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2'@;
put 'NTNcdTU2NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVc'@;
put 'dTVkOWRcdTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dTYxN2NcdTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0'@;
put 'YWVcdTY0YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVc'@;
put 'dTY5ZWRcdTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZm'@;
put 'NWZcdTcxOWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg4XVttXV09NDgxMjgr'@;
put 'bSxSWzQ4MTI4K21dPWJbMTg4XVttXSk7Zm9yKGJbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3'@;
put 'NmU0XHU3NzhlXHU3Nzg3XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3'@;
put 'XHU3YmMxXHU3YmEwXHU3YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlkXHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4'@;
put 'Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJm'@;
put 'XHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRjXHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4'@;
put 'ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4'@;
put 'OV1bbV1dPTQ4Mzg0K20sUls0ODM4NCttXT1iWzE4OV1bbV0pO2ZvcihiWzE5MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGYyNVx1OTA2OVx1OTA2ZVx1OTA2OFx1OTA2ZFx1OTA3N1x1OTEzMFx1OTEyZFx1OTEyN1x1OTEzMVx1'@;
put 'OTE4N1x1OTE4OVx1OTE4Ylx1OTE4M1x1OTJjNVx1OTJiYlx1OTJiN1x1OTJlYVx1OTJhY1x1OTJlNFx1OTJjMVx1OTJiM1x1OTJiY1x1OTJkMlx1OTJjN1x1OTJmMFx1OTJiMlx1OTVhZFx1OTViMVx1OTcwNFx1OTcwNlx1OTcwN1x1OTcwOVx1OTc2MFx1OTc4ZFx1OTc4Ylx1OTc4Zlx1OTgy'@;
put 'MVx1OTgyYlx1OTgxY1x1OThiM1x1OTkwYVx1OTkxM1x1OTkxMlx1OTkxOFx1OTlkZFx1OTlkMFx1OTlkZlx1OTlkYlx1OTlkMVx1OTlkNVx1OTlkMlx1OTlkOVx1OWFiN1x1OWFlZVx1OWFlZlx1OWIyN1x1OWI0NVx1OWI0NFx1OWI3N1x1OWI2Zlx1OWQwNlx1OWQwOVx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQwM1x1OWVhOVx1OWViZVx1OWVjZVx1NThhOFx1OWY1Mlx1NTExMlx1NTExOFx1NTExNFx1NTExMFx1NTExNVx1NTE4MFx1NTFhYVx1NTFkZFx1NTI5MVx1NTI5M1x1NTJmM1x1NTY1OVx1NTY2Ylx1NTY3OVx1NTY2OVx1NTY2NFx1NTY3OFx1'@;
put 'NTY2YVx1NTY2OFx1NTY2NVx1NTY3MVx1NTY2Zlx1NTY2Y1x1NTY2Mlx1NTY3Nlx1NThjMVx1NThiZVx1NThjN1x1NThjNVx1NTk2ZVx1NWIxZFx1NWIzNFx1NWI3OFx1NWJmMFx1NWMwZVx1NWY0YVx1NjFiMlx1NjE5MVx1NjFhOVx1NjE4YVx1NjFjZFx1NjFiNlx1NjFiZVx1NjFjYVx1NjFj'@;
put 'OFx1NjIzMFx1NjRjNVx1NjRjMVx1NjRjYlx1NjRiYlx1NjRiY1x1NjRkYVx1NjRjNFx1NjRjN1x1NjRjMlx1NjRjZFx1NjRiZlx1NjRkMlx1NjRkNFx1NjRiZVx1NjU3NFx1NjZjNlx1NjZjOVx1NjZiOVx1NjZjNFx1NjZjN1x1NjZiOFx1NmEzZFx1NmEzOFx1NmEzYVx1NmE1OVx1NmE2Ylx1'@;
put 'NmE1OFx1NmEzOVx1NmE0NFx1NmE2Mlx1NmE2MVx1NmE0Ylx1NmE0N1x1NmEzNVx1NmE1Zlx1NmE0OFx1NmI1OVx1NmI3N1x1NmMwNVx1NmZjMlx1NmZiMVx1NmZhMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkwXVttXS5jaGFyQ29kZUF0'@;
put 'KDApJiYoZWVbYlsxOTBdW21dXT00ODY0MCttLFJbNDg2NDArbV09YlsxOTBdW21dKTtmb3IoYlsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZc'@;
put 'dTZmYTZcdTZmYTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2'@;
put 'ZTdcdTc2ZTVcdTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlc'@;
put 'dTg1NGFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThi'@;
put 'MDBcdThhZGNcdThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZc'@;
put 'dTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5MV1b'@;
put 'bV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTkxXVttXV09NDg4OTYrbSxSWzQ4ODk2K21dPWJbMTkxXVttXSk7Zm9yKGJbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5'@;
put 'XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5'@;
put 'OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1Njkw'@;
put 'XHU1Njg1XHU1Njg3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRjXHU1ZmJkXHU2MWM5'@;
put 'XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2YWRiXHU2YWEzXHU2'@;
put 'YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVlXHU3MWU2XHU3MWU1'@;
put 'XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTkyXS5sZW5ndGg7KyttKTY1'@;
put 'NTMzIT09YlsxOTJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5Ml1bbV1dPTQ5MTUyK20sUls0OTE1MittXT1iWzE5Ml1bbV0pO2ZvcihiWzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdhN1x1NzdhZFx1NzdlZlx1Nzhm'@;
put 'N1x1NzhmYVx1NzhmNFx1NzhlZlx1NzkwMVx1NzlhN1x1NzlhYVx1N2E1N1x1N2FiZlx1N2MwN1x1N2MwZFx1N2JmZVx1N2JmN1x1N2MwY1x1N2JlMFx1N2NlMFx1N2NkY1x1N2NkZVx1N2NlMlx1N2NkZlx1N2NkOVx1N2NkZFx1N2UyZVx1N2UzZVx1N2U0Nlx1N2UzN1x1N2UzMlx1N2U0M1x1'@;
put 'N2UyYlx1N2UzZFx1N2UzMVx1N2U0NVx1N2U0MVx1N2UzNFx1N2UzOVx1N2U0OFx1N2UzNVx1N2UzZlx1N2UyZlx1N2Y0NFx1N2ZmM1x1N2ZmY1x1ODA3MVx1ODA3Mlx1ODA3MFx1ODA2Zlx1ODA3M1x1ODFjNlx1ODFjM1x1ODFiYVx1ODFjMlx1ODFjMFx1ODFiZlx1ODFiZFx1ODFjOVx1ODFi'@;
put 'ZVx1ODFlOFx1ODIwOVx1ODI3MVx1ODVhYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4NFx1ODU3ZVx1ODU5Y1x1ODU5MVx1ODU5NFx1ODVhZlx1ODU5Ylx1ODU4N1x1ODVhOFx1ODU4YVx1ODY2N1x1ODdjMFx1ODdkMVx1ODdiM1x1ODdkMlx1ODdjNlx1ODdh'@;
put 'Ylx1ODdiYlx1ODdiYVx1ODdjOFx1ODdjYlx1ODkzYlx1ODkzNlx1ODk0NFx1ODkzOFx1ODkzZFx1ODlhY1x1OGIwZVx1OGIxN1x1OGIxOVx1OGIxYlx1OGIwYVx1OGIyMFx1OGIxZFx1OGIwNFx1OGIxMFx1OGM0MVx1OGMzZlx1OGM3M1x1OGNmYVx1OGNmZFx1OGNmY1x1OGNmOFx1OGNmYlx1'@;
put 'OGRhOFx1OGU0OVx1OGU0Ylx1OGU0OFx1OGU0YVx1OGY0NFx1OGYzZVx1OGY0Mlx1OGY0NVx1OGYzZlx1OTA3Zlx1OTA3ZFx1OTA4NFx1OTA4MVx1OTA4Mlx1OTA4MFx1OTEzOVx1OTFhM1x1OTE5ZVx1OTE5Y1x1OTM0ZFx1OTM4Mlx1OTMyOFx1OTM3NVx1OTM0YVx1OTM2NVx1OTM0Ylx1OTMx'@;
put 'OFx1OTM3ZVx1OTM2Y1x1OTM1Ylx1OTM3MFx1OTM1YVx1OTM1NFx1OTVjYVx1OTVjYlx1OTVjY1x1OTVjOFx1OTVjNlx1OTZiMVx1OTZiOFx1OTZkNlx1OTcxY1x1OTcxZVx1OTdhMFx1OTdkM1x1OTg0Nlx1OThiNlx1OTkzNVx1OWEwMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5M10u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTNdW21dXT00OTQwOCttLFJbNDk0MDgrbV09YlsxOTNdW21dKTtmb3IoYlsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTli'@;
put 'YWVcdTliYWJcdTliYWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFc'@;
put 'dTY0ZmJcdTY0ZjdcdTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTcz'@;
put 'NzdcdTczNzVcdTc0YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdj'@;
put 'MmFcdTdjMWVcdTdjMjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1Yjlc'@;
put 'dTg1YTZcdTg3ZWZcdTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkx'@;
put 'YWNcdTkxZDBcdTkzOTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxt'@;
put 'PTA7bSE9YlsxOTRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk0XVttXV09NDk2NjQrbSxSWzQ5NjY0K21dPWJbMTk0XVttXSk7Zm9yKGJbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVk'@;
put 'XHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVjXHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3'@;
put 'MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzdhXHU3NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3'@;
put 'YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBk'@;
put 'XHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5'@;
put 'MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlXHVmZmZk'@;
put 'Ii5zcGxpdCgiIiksbT0wO20hPWJbMTk1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5NV1bbV1dPTQ5OTIwK20sUls0OTkyMCttXT1iWzE5NV1bbV0pO2ZvcihiWzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg1OFx1OTg1Ylx1OThiY1x1OTk0NVx1OTk0OVx1OWExNlx1OWExOVx1OWIwZFx1OWJlOFx1OWJlN1x1OWJkNlx1OWJkYlx1OWQ4OVx1OWQ2MVx1OWQ3Mlx1OWQ2YVx1OWQ2Y1x1OWU5Mlx1OWU5N1x1OWU5M1x1OWViNFx1NTJmOFx1NTZhOFx1NTZiN1x1NTZi'@;
put 'Nlx1NTZiNFx1NTZiY1x1NThlNFx1NWI0MFx1NWI0M1x1NWI3ZFx1NWJmNlx1NWRjOVx1NjFmOFx1NjFmYVx1NjUxOFx1NjUxNFx1NjUxOVx1NjZlNlx1NjcyN1x1NmFlY1x1NzAzZVx1NzAzMFx1NzAzMlx1NzIxMFx1NzM3Ylx1NzRjZlx1NzY2Mlx1NzY2NVx1NzkyNlx1NzkyYVx1NzkyY1x1'@;
put 'NzkyYlx1N2FjN1x1N2FmNlx1N2M0Y1x1N2M0M1x1N2M0ZFx1N2NlZlx1N2NmMFx1OGZhZVx1N2U3ZFx1N2U3Y1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U4Mlx1N2Y0Y1x1ODAwMFx1ODFkYVx1ODI2Nlx1ODVmYlx1ODVmOVx1ODYxMVx1ODVmYVx1ODYwNlx1'@;
put 'ODYwYlx1ODYwN1x1ODYwYVx1ODgxNFx1ODgxNVx1ODk2NFx1ODliYVx1ODlmOFx1OGI3MFx1OGI2Y1x1OGI2Nlx1OGI2Zlx1OGI1Zlx1OGI2Ylx1OGQwZlx1OGQwZFx1OGU4OVx1OGU4MVx1OGU4NVx1OGU4Mlx1OTFiNFx1OTFjYlx1OTQxOFx1OTQwM1x1OTNmZFx1OTVlMVx1OTczMFx1OThj'@;
put 'NFx1OTk1Mlx1OTk1MVx1OTlhOFx1OWEyYlx1OWEzMFx1OWEzN1x1OWEzNVx1OWMxM1x1OWMwZFx1OWU3OVx1OWViNVx1OWVlOFx1OWYyZlx1OWY1Zlx1OWY2M1x1OWY2MVx1NTEzN1x1NTEzOFx1NTZjMVx1NTZjMFx1NTZjMlx1NTkxNFx1NWM2Y1x1NWRjZFx1NjFmY1x1NjFmZVx1NjUxZFx1'@;
put 'NjUxY1x1NjU5NVx1NjZlOVx1NmFmYlx1NmIwNFx1NmFmYVx1NmJiMlx1NzA0Y1x1NzIxYlx1NzJhN1x1NzRkNlx1NzRkNFx1NzY2OVx1NzdkM1x1N2M1MFx1N2U4Zlx1N2U4Y1x1N2ZiY1x1ODYxN1x1ODYyZFx1ODYxYVx1ODgyM1x1ODgyMlx1ODgyMVx1ODgxZlx1ODk2YVx1ODk2Y1x1ODli'@;
put 'ZFx1OGI3NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTZdW21dXT01MDE3NittLFJbNTAxNzYrbV09YlsxOTZdW21dKTtmb3IoYlsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4'@;
put 'NjVcdTk5NTdcdTlhNDVcdTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRc'@;
put 'dTVkZDJcdTVmNGVcdTYxZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZc'@;
put 'dTg5ZmNcdThiODBcdThkMTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlm'@;
put 'MzRcdTlmNmNcdTlmNmFcdTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNc'@;
put 'dTk0NjBcdTk0NjRcdTk3NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4'@;
put 'MzlcdTg4NjJcdThiOTNcdThiOTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk3XVttXV09NTA0MzIrbSxSWzUwNDMyK21dPWJbMTk3XVttXSk7Zm9yKGJbMTk4XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5'@;
put 'ZjcyXHU1ZWYzXHU2YjE2XHU3MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1'@;
put 'XHU5NDdkXHU5NDdlXHU5NDdjXHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOThdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5OF1bbV1dPTUwNjg4K20sUls1MDY4OCttXT1iWzE5OF1bbV0pO2ZvcihiWzIwMV09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGU0Mlx1NGU1Y1x1NTFmNVx1NTMxYVx1NTM4Mlx1NGUwN1x1NGUwY1x1NGU0N1x1NGU4ZFx1NTZkN1x1ZmEwY1x1NWM2ZVx1NWY3M1x1NGUwZlx1NTE4N1x1NGUwZVx1NGUyZVx1NGU5M1x1'@;
put 'NGVjMlx1NGVjOVx1NGVjOFx1NTE5OFx1NTJmY1x1NTM2Y1x1NTNiOVx1NTcyMFx1NTkwM1x1NTkyY1x1NWMxMFx1NWRmZlx1NjVlMVx1NmJiM1x1NmJjY1x1NmMxNFx1NzIzZlx1NGUzMVx1NGUzY1x1NGVlOFx1NGVkY1x1NGVlOVx1NGVlMVx1NGVkZFx1NGVkYVx1NTIwY1x1NTMxY1x1NTM0'@;
put 'Y1x1NTcyMlx1NTcyM1x1NTkxN1x1NTkyZlx1NWI4MVx1NWI4NFx1NWMxMlx1NWMzYlx1NWM3NFx1NWM3M1x1NWUwNFx1NWU4MFx1NWU4Mlx1NWZjOVx1NjIwOVx1NjI1MFx1NmMxNVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmMzNlx1NmM0M1x1NmMzZlx1NmMz'@;
put 'Ylx1NzJhZVx1NzJiMFx1NzM4YVx1NzliOFx1ODA4YVx1OTYxZVx1NGYwZVx1NGYxOFx1NGYyY1x1NGVmNVx1NGYxNFx1NGVmMVx1NGYwMFx1NGVmN1x1NGYwOFx1NGYxZFx1NGYwMlx1NGYwNVx1NGYyMlx1NGYxM1x1NGYwNFx1NGVmNFx1NGYxMlx1NTFiMVx1NTIxM1x1NTIwOVx1NTIxMFx1'@;
put 'NTJhNlx1NTMyMlx1NTMxZlx1NTM0ZFx1NTM4YVx1NTQwN1x1NTZlMVx1NTZkZlx1NTcyZVx1NTcyYVx1NTczNFx1NTkzY1x1NTk4MFx1NTk3Y1x1NTk4NVx1NTk3Ylx1NTk3ZVx1NTk3N1x1NTk3Zlx1NWI1Nlx1NWMxNVx1NWMyNVx1NWM3Y1x1NWM3YVx1NWM3Ylx1NWM3ZVx1NWRkZlx1NWU3'@;
put 'NVx1NWU4NFx1NWYwMlx1NWYxYVx1NWY3NFx1NWZkNVx1NWZkNFx1NWZjZlx1NjI1Y1x1NjI1ZVx1NjI2NFx1NjI2MVx1NjI2Nlx1NjI2Mlx1NjI1OVx1NjI2MFx1NjI1YVx1NjI2NVx1NjVlZlx1NjVlZVx1NjczZVx1NjczOVx1NjczOFx1NjczYlx1NjczYVx1NjczZlx1NjczY1x1NjczM1x1'@;
put 'NmMxOFx1NmM0Nlx1NmM1Mlx1NmM1Y1x1NmM0Zlx1NmM0YVx1NmM1NFx1NmM0Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwMV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjAxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDFdW21dXT01MTQ1NittLFJbNTE0NTYrbV09YlsyMDFdW21d'@;
put 'KTtmb3IoYlsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRc'@;
put 'dTg5N2VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUx'@;
put 'YjlcdTUyMWNcdTUyMWVcdTUyMjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0'@;
put 'NGZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJc'@;
put 'dTVjMjhcdTVjMmFcdTVjOGRcdTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVm'@;
put 'ZWRcdTVmZThcdTVmZWVcdTVmZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2Rc'@;
put 'dTYyNzJcdTYyNzRcdTY1MzdcdTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjAyXVttXV09NTE3MTIrbSxSWzUxNzEy'@;
put 'K21dPWJbMjAyXVttXSk7Zm9yKGJbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZi'@;
put 'XHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3'@;
put 'Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0'@;
put 'XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0ZjllXHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1'@;
put 'MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZm'@;
put 'XHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjAzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwM11bbV1dPTUx'@;
put 'OTY4K20sUls1MTk2OCttXT1iWzIwM11bbV0pO2ZvcihiWzIwNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTc2OFx1NTc3ZFx1NTkwY1x1NTk0NVx1NTliNVx1NTliYVx1NTljZlx1NTljZVx1NTliMlx1NTljY1x1NTljMVx1NTli'@;
put 'Nlx1NTliY1x1NTljM1x1NTlkNlx1NTliMVx1NTliZFx1NTljMFx1NTljOFx1NTliNFx1NTljN1x1NWI2Mlx1NWI2NVx1NWI5M1x1NWI5NVx1NWM0NFx1NWM0N1x1NWNhZVx1NWNhNFx1NWNhMFx1NWNiNVx1NWNhZlx1NWNhOFx1NWNhY1x1NWM5Zlx1NWNhM1x1NWNhZFx1NWNhMlx1NWNhYVx1'@;
put 'NWNhN1x1NWM5ZFx1NWNhNVx1NWNiNlx1NWNiMFx1NWNhNlx1NWUxN1x1NWUxNFx1NWUxOVx1NWYyOFx1NWYyMlx1NWYyM1x1NWYyNFx1NWY1NFx1NWY4Mlx1NWY3ZVx1NWY3ZFx1NWZkZVx1NWZlNVx1NjAyZFx1NjAyNlx1NjAxOVx1NjAzMlx1NjAwYlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NjAzNFx1NjAwYVx1NjAxN1x1NjAzM1x1NjAxYVx1NjAxZVx1NjAyY1x1NjAyMlx1NjAwZFx1NjAxMFx1NjAyZVx1NjAxM1x1NjAxMVx1NjAwY1x1NjAwOVx1NjAxY1x1NjIxNFx1NjIzZFx1NjJhZFx1NjJiNFx1NjJkMVx1NjJiZVx1NjJhYVx1NjJiNlx1NjJj'@;
put 'YVx1NjJhZVx1NjJiM1x1NjJhZlx1NjJiYlx1NjJhOVx1NjJiMFx1NjJiOFx1NjUzZFx1NjVhOFx1NjViYlx1NjYwOVx1NjVmY1x1NjYwNFx1NjYxMlx1NjYwOFx1NjVmYlx1NjYwM1x1NjYwYlx1NjYwZFx1NjYwNVx1NjVmZFx1NjYxMVx1NjYxMFx1NjZmNlx1NjcwYVx1Njc4NVx1Njc2Y1x1'@;
put 'Njc4ZVx1Njc5Mlx1Njc3Nlx1Njc3Ylx1Njc5OFx1Njc4Nlx1Njc4NFx1Njc3NFx1Njc4ZFx1Njc4Y1x1Njc3YVx1Njc5Zlx1Njc5MVx1Njc5OVx1Njc4M1x1Njc3ZFx1Njc4MVx1Njc3OFx1Njc3OVx1Njc5NFx1NmIyNVx1NmI4MFx1NmI3ZVx1NmJkZVx1NmMxZFx1NmM5M1x1NmNlY1x1NmNl'@;
put 'Ylx1NmNlZVx1NmNkOVx1NmNiNlx1NmNkNFx1NmNhZFx1NmNlN1x1NmNiN1x1NmNkMFx1NmNjMlx1NmNiYVx1NmNjM1x1NmNjNlx1NmNlZFx1NmNmMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVb'@;
put 'YlsyMDRdW21dXT01MjIyNCttLFJbNTIyMjQrbV09YlsyMDRdW21dKTtmb3IoYlsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZj'@;
put 'Y2RcdTZjYzdcdTZjYjBcdTZjZjlcdTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2Nc'@;
put 'dTcyZDFcdTczYTRcdTczYTFcdTczYWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgy'@;
put 'OWJcdTgyYjVcdTgyYTdcdTgyYWVcdTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdc'@;
put 'dTkwYjJcdTkwYjRcdTkwYWZcdTkwYjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRm'@;
put 'YjlcdTRmZWNcdTUyNDRcdTUyNDlcdTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwNV1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGVlW2JbMjA1XVttXV09NTI0ODArbSxSWzUyNDgwK21dPWJbMjA1XVttXSk7Zm9yKGJbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2XHU1NGM1XHU1'@;
put 'NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1OTUzXHU1OWUx'@;
put 'XHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3XHU1Y2NiXHU1'@;
put 'Y2RiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1'@;
put 'ZWIwXHU1ZWE0XHU1ZWEyXHU1ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2'@;
put 'XHU2MDZlXHU2MjQyXHU2MjQzXHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2'@;
put 'NjIxXHU2NjMyXHU2NjM1XHU2NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA2XS5sZW5ndGg7KyttKTY1NTMzIT09Ylsy'@;
put 'MDZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwNl1bbV1dPTUyNzM2K20sUls1MjczNittXT1iWzIwNl1bbV0pO2ZvcihiWzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjdkY1x1NjdiYlx1NjdmOFx1NjdkOFx1NjdjMFx1'@;
put 'NjdiN1x1NjdjNVx1NjdlYlx1NjdlNFx1NjdkZlx1NjdiNVx1NjdjZFx1NjdiM1x1NjdmN1x1NjdmNlx1NjdlZVx1NjdlM1x1NjdjMlx1NjdiOVx1NjdjZVx1NjdlN1x1NjdmMFx1NjdiMlx1NjdmY1x1NjdjNlx1NjdlZFx1NjdjY1x1NjdhZVx1NjdlNlx1NjdkYlx1NjdmYVx1NjdjOVx1Njdj'@;
put 'YVx1NjdjM1x1NjdlYVx1NjdjYlx1NmIyOFx1NmI4Mlx1NmI4NFx1NmJiNlx1NmJkNlx1NmJkOFx1NmJlMFx1NmMyMFx1NmMyMVx1NmQyOFx1NmQzNFx1NmQyZFx1NmQxZlx1NmQzY1x1NmQzZlx1NmQxMlx1NmQwYVx1NmNkYVx1NmQzM1x1NmQwNFx1NmQxOVx1NmQzYVx1NmQxYVx1NmQxMVx1'@;
put 'NmQwMFx1NmQxZFx1NmQ0Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQwMVx1NmQxOFx1NmQzN1x1NmQwM1x1NmQwZlx1NmQ0MFx1NmQwN1x1NmQyMFx1NmQyY1x1NmQwOFx1NmQyMlx1NmQwOVx1NmQxMFx1NzBiN1x1NzA5Zlx1NzBiZVx1NzBiMVx1NzBiMFx1'@;
put 'NzBhMVx1NzBiNFx1NzBiNVx1NzBhOVx1NzI0MVx1NzI0OVx1NzI0YVx1NzI2Y1x1NzI3MFx1NzI3M1x1NzI2ZVx1NzJjYVx1NzJlNFx1NzJlOFx1NzJlYlx1NzJkZlx1NzJlYVx1NzJlNlx1NzJlM1x1NzM4NVx1NzNjY1x1NzNjMlx1NzNjOFx1NzNjNVx1NzNiOVx1NzNiNlx1NzNiNVx1NzNi'@;
put 'NFx1NzNlYlx1NzNiZlx1NzNjN1x1NzNiZVx1NzNjM1x1NzNjNlx1NzNiOFx1NzNjYlx1NzRlY1x1NzRlZVx1NzUyZVx1NzU0N1x1NzU0OFx1NzVhN1x1NzVhYVx1NzY3OVx1NzZjNFx1NzcwOFx1NzcwM1x1NzcwNFx1NzcwNVx1NzcwYVx1NzZmN1x1NzZmYlx1NzZmYVx1NzdlN1x1NzdlOFx1'@;
put 'NzgwNlx1NzgxMVx1NzgxMlx1NzgwNVx1NzgxMFx1NzgwZlx1NzgwZVx1NzgwOVx1NzgwM1x1NzgxM1x1Nzk0YVx1Nzk0Y1x1Nzk0Ylx1Nzk0NVx1Nzk0NFx1NzlkNVx1NzljZFx1NzljZlx1NzlkNlx1NzljZVx1N2E4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwN10ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PWJbMjA3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDddW21dXT01Mjk5MittLFJbNTI5OTIrbV09YlsyMDddW21dKTtmb3IoYlsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBc'@;
put 'dTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlcdTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgw'@;
put 'ZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgwZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVc'@;
put 'dTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBcdTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRc'@;
put 'dThhMDdcdThkNzJcdThmZTNcdThmZTFcdThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUw'@;
put 'MjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRmZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFc'@;
put 'dTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVcdTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9Ylsy'@;
put 'MDhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA4XVttXV09NTMyNDgrbSxSWzUzMjQ4K21dPWJbMjA4XVttXSk7Zm9yKGJbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBh'@;
put 'XHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2JjXHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1'@;
put 'YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFh'@;
put 'XHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgzXHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhl'@;
put 'XHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2'@;
put 'MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRiXHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJi'@;
put 'XHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4MDgyXHU2Yjg4XHU2YmU2XHU2YmU0XHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPWJbMjA5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwOV1bbV1dPTUzNTA0K20sUls1MzUwNCttXT1iWzIwOV1bbV0pO2ZvcihiWzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NmJlOFx1NmJlM1x1NmJlMlx1NmJlN1x1NmMyNVx1NmQ3YVx1NmQ2M1x1NmQ2NFx1NmQ3Nlx1NmQwZFx1NmQ2MVx1NmQ5Mlx1NmQ1OFx1NmQ2Mlx1NmQ2ZFx1NmQ2Zlx1NmQ5MVx1NmQ4ZFx1NmRlZlx1NmQ3Zlx1NmQ4Nlx1NmQ1ZVx1NmQ2N1x1NmQ2MFx1NmQ5N1x1NmQ3MFx1'@;
put 'NmQ3Y1x1NmQ1Zlx1NmQ4Mlx1NmQ5OFx1NmQyZlx1NmQ2OFx1NmQ4Ylx1NmQ3ZVx1NmQ4MFx1NmQ4NFx1NmQxNlx1NmQ4M1x1NmQ3Ylx1NmQ3ZFx1NmQ3NVx1NmQ5MFx1NzBkY1x1NzBkM1x1NzBkMVx1NzBkZFx1NzBjYlx1N2YzOVx1NzBlMlx1NzBkN1x1NzBkMlx1NzBkZVx1NzBlMFx1NzBk'@;
put 'NFx1NzBjZFx1NzBjNVx1NzBjNlx1NzBjN1x1NzBkYVx1NzBjZVx1NzBlMVx1NzI0Mlx1NzI3OFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzI3N1x1NzI3Nlx1NzMwMFx1NzJmYVx1NzJmNFx1NzJmZVx1NzJmNlx1NzJmM1x1NzJmYlx1NzMwMVx1NzNkM1x1NzNk'@;
put 'OVx1NzNlNVx1NzNkNlx1NzNiY1x1NzNlN1x1NzNlM1x1NzNlOVx1NzNkY1x1NzNkMlx1NzNkYlx1NzNkNFx1NzNkZFx1NzNkYVx1NzNkN1x1NzNkOFx1NzNlOFx1NzRkZVx1NzRkZlx1NzRmNFx1NzRmNVx1NzUyMVx1NzU1Ylx1NzU1Zlx1NzViMFx1NzVjMVx1NzViYlx1NzVjNFx1NzVjMFx1'@;
put 'NzViZlx1NzViNlx1NzViYVx1NzY4YVx1NzZjOVx1NzcxZFx1NzcxYlx1NzcxMFx1NzcxM1x1NzcxMlx1NzcyM1x1NzcxMVx1NzcxNVx1NzcxOVx1NzcxYVx1NzcyMlx1NzcyN1x1NzgyM1x1NzgyY1x1NzgyMlx1NzgzNVx1NzgyZlx1NzgyOFx1NzgyZVx1NzgyYlx1NzgyMVx1NzgyOVx1Nzgz'@;
put 'M1x1NzgyYVx1NzgzMVx1Nzk1NFx1Nzk1Ylx1Nzk0Zlx1Nzk1Y1x1Nzk1M1x1Nzk1Mlx1Nzk1MVx1NzllYlx1NzllY1x1NzllMFx1NzllZVx1NzllZFx1NzllYVx1NzlkY1x1NzlkZVx1NzlkZFx1N2E4Nlx1N2E4OVx1N2E4NVx1N2E4Ylx1N2E4Y1x1N2E4YVx1N2E4N1x1N2FkOFx1N2IxMFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjEwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTBdW21dXT01Mzc2MCttLFJbNTM3NjArbV09YlsyMTBdW21dKTtmb3IoYlsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRcdTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZc'@;
put 'dTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdmNjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgz'@;
put 'MzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgz'@;
put 'MjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVc'@;
put 'dTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThj'@;
put 'YTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVcdThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNc'@;
put 'dTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxMV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjExXVttXV09NTQwMTYrbSxSWzU0MDE2K21dPWJbMjExXVttXSk7Zm9yKGJbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MTRlXHU5MTRmXHU5MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4'@;
put 'XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVmXHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1'@;
put 'NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1'@;
put 'NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2VkXHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2Zj'@;
put 'XHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1'@;
put 'YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUxXHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4'@;
put 'XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjEyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxMl1bbV1dPTU0MjcyK20sUls1NDI3MittXT1iWzIxMl1bbV0pO2ZvcihiWzIxM109Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWQzMFx1NWQxMlx1NWQyM1x1NWQxZlx1NWQyZVx1NWUzZVx1NWUzNFx1NWViMVx1NWViNFx1NWViOVx1NWViMlx1NWViM1x1NWYzNlx1NWYzOFx1NWY5Ylx1NWY5Nlx1NWY5Zlx1NjA4YVx1NjA5MFx1NjA4'@;
put 'Nlx1NjBiZVx1NjBiMFx1NjBiYVx1NjBkM1x1NjBkNFx1NjBjZlx1NjBlNFx1NjBkOVx1NjBkZFx1NjBjOFx1NjBiMVx1NjBkYlx1NjBiN1x1NjBjYVx1NjBiZlx1NjBjM1x1NjBjZFx1NjBjMFx1NjMzMlx1NjM2NVx1NjM4YVx1NjM4Mlx1NjM3ZFx1NjNiZFx1NjM5ZVx1NjNhZFx1NjM5ZFx1'@;
put 'NjM5N1x1NjNhYlx1NjM4ZVx1NjM2Zlx1NjM4N1x1NjM5MFx1NjM2ZVx1NjNhZlx1NjM3NVx1NjM5Y1x1NjM2ZFx1NjNhZVx1NjM3Y1x1NjNhNFx1NjMzYlx1NjM5Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjM3OFx1NjM4NVx1NjM4MVx1NjM5MVx1NjM4ZFx1'@;
put 'NjM3MFx1NjU1M1x1NjVjZFx1NjY2NVx1NjY2MVx1NjY1Ylx1NjY1OVx1NjY1Y1x1NjY2Mlx1NjcxOFx1Njg3OVx1Njg4N1x1Njg5MFx1Njg5Y1x1Njg2ZFx1Njg2ZVx1NjhhZVx1NjhhYlx1Njk1Nlx1Njg2Zlx1NjhhM1x1NjhhY1x1NjhhOVx1Njg3NVx1Njg3NFx1NjhiMlx1Njg4Zlx1Njg3'@;
put 'N1x1Njg5Mlx1Njg3Y1x1Njg2Ylx1Njg3Mlx1NjhhYVx1Njg4MFx1Njg3MVx1Njg3ZVx1Njg5Ylx1Njg5Nlx1Njg4Ylx1NjhhMFx1Njg4OVx1NjhhNFx1Njg3OFx1Njg3Ylx1Njg5MVx1Njg4Y1x1Njg4YVx1Njg3ZFx1NmIzNlx1NmIzM1x1NmIzN1x1NmIzOFx1NmI5MVx1NmI4Zlx1NmI4ZFx1'@;
put 'NmI4ZVx1NmI4Y1x1NmMyYVx1NmRjMFx1NmRhYlx1NmRiNFx1NmRiM1x1NmU3NFx1NmRhY1x1NmRlOVx1NmRlMlx1NmRiN1x1NmRmNlx1NmRkNFx1NmUwMFx1NmRjOFx1NmRlMFx1NmRkZlx1NmRkNlx1NmRiZVx1NmRlNVx1NmRkY1x1NmRkZFx1NmRkYlx1NmRmNFx1NmRjYVx1NmRiZFx1NmRl'@;
put 'ZFx1NmRmMFx1NmRiYVx1NmRkNVx1NmRjMlx1NmRjZlx1NmRjOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxM10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjEzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTNdW21dXT01NDUyOCttLFJbNTQ1MjgrbV09YlsyMTNdW21dKTtmb3IoYlsy'@;
put 'MTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcx'@;
put 'MTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhc'@;
put 'dTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdcdTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFc'@;
put 'dTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3MzlcdTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5'@;
put 'NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJc'@;
put 'dTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThcdTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdm'@;
put 'Y2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdmYzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE0XVttXV09NTQ3ODQrbSxSWzU0Nzg0K21dPWJbMjE0'@;
put 'XVttXSk7Zm9yKGJbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4MTE1XHU4'@;
put 'MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4MzgzXHU4Mzhj'@;
put 'XHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NmMy'@;
put 'XHU4NmMxXHU4NmM1XHU4NmJhXHU4NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4'@;
put 'ODk5XHU4ODliXHU4ODk3XHU4OGE0XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5'@;
put 'XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5'@;
put 'MTVhXHU5MTUzXHU5MTU1XHU5MWVjXHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxNV1bbV1dPTU1MDQwK20sUls1'@;
put 'NTA0MCttXT1iWzIxNV1bbV0pO2ZvcihiWzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlYlx1OTFmN1x1OTFlOFx1OTFlZVx1OTU3YVx1OTU4Nlx1OTU4OFx1OTY3Y1x1OTY2ZFx1OTY2Ylx1OTY3MVx1OTY2Zlx1OTZiZlx1'@;
put 'OTc2YVx1OTgwNFx1OThlNVx1OTk5N1x1NTA5Ylx1NTA5NVx1NTA5NFx1NTA5ZVx1NTA4Ylx1NTBhM1x1NTA4M1x1NTA4Y1x1NTA4ZVx1NTA5ZFx1NTA2OFx1NTA5Y1x1NTA5Mlx1NTA4Mlx1NTA4N1x1NTE1Zlx1NTFkNFx1NTMxMlx1NTMxMVx1NTNhNFx1NTNhN1x1NTU5MVx1NTVhOFx1NTVh'@;
put 'NVx1NTVhZFx1NTU3N1x1NTY0NVx1NTVhMlx1NTU5M1x1NTU4OFx1NTU4Zlx1NTViNVx1NTU4MVx1NTVhM1x1NTU5Mlx1NTVhNFx1NTU3ZFx1NTU4Y1x1NTVhNlx1NTU3Zlx1NTU5NVx1NTVhMVx1NTU4ZVx1NTcwY1x1NTgyOVx1NTgzN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NTgxOVx1NTgxZVx1NTgyN1x1NTgyM1x1NTgyOFx1NTdmNVx1NTg0OFx1NTgyNVx1NTgxY1x1NTgxYlx1NTgzM1x1NTgzZlx1NTgzNlx1NTgyZVx1NTgzOVx1NTgzOFx1NTgyZFx1NTgyY1x1NTgzYlx1NTk2MVx1NWFhZlx1NWE5NFx1NWE5Zlx1NWE3YVx1NWFhMlx1NWE5ZVx1'@;
put 'NWE3OFx1NWFhNlx1NWE3Y1x1NWFhNVx1NWFhY1x1NWE5NVx1NWFhZVx1NWEzN1x1NWE4NFx1NWE4YVx1NWE5N1x1NWE4M1x1NWE4Ylx1NWFhOVx1NWE3Ylx1NWE3ZFx1NWE4Y1x1NWE5Y1x1NWE4Zlx1NWE5M1x1NWE5ZFx1NWJlYVx1NWJjZFx1NWJjYlx1NWJkNFx1NWJkMVx1NWJjYVx1NWJj'@;
put 'ZVx1NWMwY1x1NWMzMFx1NWQzN1x1NWQ0M1x1NWQ2Ylx1NWQ0MVx1NWQ0Ylx1NWQzZlx1NWQzNVx1NWQ1MVx1NWQ0ZVx1NWQ1NVx1NWQzM1x1NWQzYVx1NWQ1Mlx1NWQzZFx1NWQzMVx1NWQ1OVx1NWQ0Mlx1NWQzOVx1NWQ0OVx1NWQzOFx1NWQzY1x1NWQzMlx1NWQzNlx1NWQ0MFx1NWQ0NVx1'@;
put 'NWU0NFx1NWU0MVx1NWY1OFx1NWZhNlx1NWZhNVx1NWZhYlx1NjBjOVx1NjBiOVx1NjBjY1x1NjBlMlx1NjBjZVx1NjBjNFx1NjExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTZdW21d'@;
put 'XT01NTI5NittLFJbNTUyOTYrbV09YlsyMTZdW21dKTtmb3IoYlsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNc'@;
put 'dTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYxMGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYz'@;
put 'ZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdcdTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNcdTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNc'@;
put 'dTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5'@;
put 'MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4YzdcdTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVc'@;
put 'dTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZlNzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxN11bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGVlW2JbMjE3XVttXV09NTU1NTIrbSxSWzU1NTUyK21dPWJbMjE3XVttXSk7Zm9yKGJbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5'@;
put 'XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3'@;
put 'MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJkXHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2XHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3'@;
put 'XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZlXHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3'@;
put 'OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYz'@;
put 'XHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMThdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihlZVtiWzIxOF1bbV1dPTU1ODA4K20sUls1NTgwOCttXT1iWzIxOF1bbV0pO2ZvcihiWzIxOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y2Nlx1N2ZhMlx1N2ZhMFx1N2ZhMVx1N2ZkN1x1ODA1MVx1ODA0'@;
put 'Zlx1ODA1MFx1ODBmZVx1ODBkNFx1ODE0M1x1ODE0YVx1ODE1Mlx1ODE0Zlx1ODE0N1x1ODEzZFx1ODE0ZFx1ODEzYVx1ODFlNlx1ODFlZVx1ODFmN1x1ODFmOFx1ODFmOVx1ODIwNFx1ODIzY1x1ODIzZFx1ODIzZlx1ODI3NVx1ODMzYlx1ODNjZlx1ODNmOVx1ODQyM1x1ODNjMFx1ODNlOFx1'@;
put 'ODQxMlx1ODNlN1x1ODNlNFx1ODNmY1x1ODNmNlx1ODQxMFx1ODNjNlx1ODNjOFx1ODNlYlx1ODNlM1x1ODNiZlx1ODQwMVx1ODNkZFx1ODNlNVx1ODNkOFx1ODNmZlx1ODNlMVx1ODNjYlx1ODNjZVx1ODNkNlx1ODNmNVx1ODNjOVx1ODQwOVx1ODQwZlx1ODNkZVx1ODQxMVx1ODQwNlx1ODNj'@;
put 'Mlx1ODNmM1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNkNVx1ODNmYVx1ODNjN1x1ODNkMVx1ODNlYVx1ODQxM1x1ODNjM1x1ODNlY1x1ODNlZVx1ODNjNFx1ODNmYlx1ODNkN1x1ODNlMlx1ODQxYlx1ODNkYlx1ODNmZVx1ODZkOFx1ODZlMlx1ODZlNlx1ODZk'@;
put 'M1x1ODZlM1x1ODZkYVx1ODZlYVx1ODZkZFx1ODZlYlx1ODZkY1x1ODZlY1x1ODZlOVx1ODZkN1x1ODZlOFx1ODZkMVx1ODg0OFx1ODg1Nlx1ODg1NVx1ODhiYVx1ODhkN1x1ODhiOVx1ODhiOFx1ODhjMFx1ODhiZVx1ODhiNlx1ODhiY1x1ODhiN1x1ODhiZFx1ODhiMlx1ODkwMVx1ODhjOVx1'@;
put 'ODk5NVx1ODk5OFx1ODk5N1x1ODlkZFx1ODlkYVx1ODlkYlx1OGE0ZVx1OGE0ZFx1OGEzOVx1OGE1OVx1OGE0MFx1OGE1N1x1OGE1OFx1OGE0NFx1OGE0NVx1OGE1Mlx1OGE0OFx1OGE1MVx1OGE0YVx1OGE0Y1x1OGE0Zlx1OGM1Zlx1OGM4MVx1OGM4MFx1OGNiYVx1OGNiZVx1OGNiMFx1OGNi'@;
put 'OVx1OGNiNVx1OGQ4NFx1OGQ4MFx1OGQ4OVx1OGRkOFx1OGRkM1x1OGRjZFx1OGRjN1x1OGRkNlx1OGRkY1x1OGRjZlx1OGRkNVx1OGRkOVx1OGRjOFx1OGRkN1x1OGRjNVx1OGVlZlx1OGVmN1x1OGVmYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxOV0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PWJbMjE5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTldW21dXT01NjA2NCttLFJbNTYwNjQrbV09YlsyMTldW21dKTtmb3IoYlsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThl'@;
put 'ZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThlZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZc'@;
put 'dTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNcdTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1'@;
put 'OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRl'@;
put 'ODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUwYzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBc'@;
put 'dTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRcdTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4'@;
put 'NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjBdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT1iWzIyMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIwXVttXV09NTYzMjArbSxSWzU2MzIwK21dPWJbMjIwXVttXSk7Zm9yKGJbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YWI3XHU1YWMwXHU1'@;
put 'YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1'@;
put 'XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2'@;
put 'M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDMzXHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2'@;
put 'NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4'@;
put 'XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2'@;
put 'OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PWJbMjIxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyMV1bbV1dPTU2NTc2K20sUls1NjU3NittXT1iWzIyMV1bbV0pO2ZvcihiWzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NmJmOVx1NmJmN1x1NmJmOFx1NmU5Ylx1NmVkNlx1NmVjOFx1NmU4Zlx1NmVjMFx1NmU5Zlx1NmU5M1x1NmU5NFx1NmVhMFx1NmViMVx1NmViOVx1NmVjNlx1NmVkMlx1NmViZFx1NmVjMVx1NmU5ZVx1NmVjOVx1NmViN1x1NmViMFx1NmVjZFx1NmVhNlx1NmVjZlx1NmViMlx1NmViZVx1NmVj'@;
put 'M1x1NmVkY1x1NmVkOFx1NmU5OVx1NmU5Mlx1NmU4ZVx1NmU4ZFx1NmVhNFx1NmVhMVx1NmViZlx1NmViM1x1NmVkMFx1NmVjYVx1NmU5N1x1NmVhZVx1NmVhM1x1NzE0N1x1NzE1NFx1NzE1Mlx1NzE2M1x1NzE2MFx1NzE0MVx1NzE1ZFx1NzE2Mlx1NzE3Mlx1NzE3OFx1NzE2YVx1NzE2MVx1'@;
put 'NzE0Mlx1NzE1OFx1NzE0M1x1NzE0Ylx1NzE3MFx1NzE1Zlx1NzE1MFx1NzE1M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzE0NFx1NzE0ZFx1NzE1YVx1NzI0Zlx1NzI4ZFx1NzI4Y1x1NzI5MVx1NzI5MFx1NzI4ZVx1NzMzY1x1NzM0Mlx1NzMzYlx1NzMzYVx1'@;
put 'NzM0MFx1NzM0YVx1NzM0OVx1NzQ0NFx1NzQ0YVx1NzQ0Ylx1NzQ1Mlx1NzQ1MVx1NzQ1N1x1NzQ0MFx1NzQ0Zlx1NzQ1MFx1NzQ0ZVx1NzQ0Mlx1NzQ0Nlx1NzQ0ZFx1NzQ1NFx1NzRlMVx1NzRmZlx1NzRmZVx1NzRmZFx1NzUxZFx1NzU3OVx1NzU3N1x1Njk4M1x1NzVlZlx1NzYwZlx1NzYw'@;
put 'M1x1NzVmN1x1NzVmZVx1NzVmY1x1NzVmOVx1NzVmOFx1NzYxMFx1NzVmYlx1NzVmNlx1NzVlZFx1NzVmNVx1NzVmZFx1NzY5OVx1NzZiNVx1NzZkZFx1Nzc1NVx1Nzc1Zlx1Nzc2MFx1Nzc1Mlx1Nzc1Nlx1Nzc1YVx1Nzc2OVx1Nzc2N1x1Nzc1NFx1Nzc1OVx1Nzc2ZFx1NzdlMFx1Nzg4N1x1'@;
put 'Nzg5YVx1Nzg5NFx1Nzg4Zlx1Nzg4NFx1Nzg5NVx1Nzg4NVx1Nzg4Nlx1NzhhMVx1Nzg4M1x1Nzg3OVx1Nzg5OVx1Nzg4MFx1Nzg5Nlx1Nzg3Ylx1Nzk3Y1x1Nzk4Mlx1Nzk3ZFx1Nzk3OVx1N2ExMVx1N2ExOFx1N2ExOVx1N2ExMlx1N2ExN1x1N2ExNVx1N2EyMlx1N2ExM1x1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT1iWzIyMl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjIyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjJdW21dXT01NjgzMittLFJbNTY4MzIrbV09YlsyMjJdW21dKTtmb3IoYlsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdhOWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdk'@;
put 'ODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2JcdTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdc'@;
put 'dTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZc'@;
put 'dTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0'@;
put 'MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZcdTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJc'@;
put 'dTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5'@;
put 'ZTRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyM11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIzXVttXV09NTcwODgrbSxSWzU3MDg4K21dPWJbMjIzXVttXSk7Zm9yKGJbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0XHU4'@;
put 'YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4ZGVi'@;
put 'XHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0'@;
put 'XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZmXHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5'@;
put 'MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBl'@;
put 'XHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFmXHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1'@;
put 'MGVmXHU1MGUzXHU1MGUwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyNF1bbV1dPTU3MzQ0K20sUls1NzM0NCttXT1iWzIyNF1bbV0pO2ZvcihiWzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFkOFx1NTI4MFx1NTI4MVx1NTJlOVx1NTJlYlx1NTMzMFx1NTNhY1x1NTYyN1x1NTYxNVx1NTYwY1x1NTYxMlx1NTVmY1x1NTYwZlx1NTYxY1x1NTYwMVx1NTYxM1x1NTYwMlx1NTVmYVx1NTYxZFx1NTYwNFx1NTVmZlx1'@;
put 'NTVmOVx1NTg4OVx1NTg3Y1x1NTg5MFx1NTg5OFx1NTg4Nlx1NTg4MVx1NTg3Zlx1NTg3NFx1NTg4Ylx1NTg3YVx1NTg4N1x1NTg5MVx1NTg4ZVx1NTg3Nlx1NTg4Mlx1NTg4OFx1NTg3Ylx1NTg5NFx1NTg4Zlx1NThmZVx1NTk2Ylx1NWFkY1x1NWFlZVx1NWFlNVx1NWFkNVx1NWFlYVx1NWFk'@;
put 'YVx1NWFlZFx1NWFlYlx1NWFmM1x1NWFlMlx1NWFlMFx1NWFkYlx1NWFlY1x1NWFkZVx1NWFkZFx1NWFkOVx1NWFlOFx1NWFkZlx1NWI3N1x1NWJlMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWJlM1x1NWM2M1x1NWQ4Mlx1NWQ4MFx1NWQ3ZFx1NWQ4Nlx1NWQ3'@;
put 'YVx1NWQ4MVx1NWQ3N1x1NWQ4YVx1NWQ4OVx1NWQ4OFx1NWQ3ZVx1NWQ3Y1x1NWQ4ZFx1NWQ3OVx1NWQ3Zlx1NWU1OFx1NWU1OVx1NWU1M1x1NWVkOFx1NWVkMVx1NWVkN1x1NWVjZVx1NWVkY1x1NWVkNVx1NWVkOVx1NWVkMlx1NWVkNFx1NWY0NFx1NWY0M1x1NWY2Zlx1NWZiNlx1NjEyY1x1'@;
put 'NjEyOFx1NjE0MVx1NjE1ZVx1NjE3MVx1NjE3M1x1NjE1Mlx1NjE1M1x1NjE3Mlx1NjE2Y1x1NjE4MFx1NjE3NFx1NjE1NFx1NjE3YVx1NjE1Ylx1NjE2NVx1NjEzYlx1NjE2YVx1NjE2MVx1NjE1Nlx1NjIyOVx1NjIyN1x1NjIyYlx1NjQyYlx1NjQ0ZFx1NjQ1Ylx1NjQ1ZFx1NjQ3NFx1NjQ3'@;
put 'Nlx1NjQ3Mlx1NjQ3M1x1NjQ3ZFx1NjQ3NVx1NjQ2Nlx1NjRhNlx1NjQ0ZVx1NjQ4Mlx1NjQ1ZVx1NjQ1Y1x1NjQ0Ylx1NjQ1M1x1NjQ2MFx1NjQ1MFx1NjQ3Zlx1NjQzZlx1NjQ2Y1x1NjQ2Ylx1NjQ1OVx1NjQ2NVx1NjQ3N1x1NjU3M1x1NjVhMFx1NjZhMVx1NjZhMFx1NjY5Zlx1NjcwNVx1'@;
put 'NjcwNFx1NjcyMlx1NjliMVx1NjliNlx1NjljOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyNV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjVdW21dXT01NzYwMCttLFJbNTc2MDArbV09YlsyMjVdW21dKTtmb3IoYlsyMjZdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRc'@;
put 'dTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFcdTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZl'@;
put 'ZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZmMDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZm'@;
put 'MmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZmMGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZc'@;
put 'dTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2'@;
put 'MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRc'@;
put 'dTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyNl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI2XVttXV09NTc4NTYrbSxSWzU3ODU2K21dPWJbMjI2XVttXSk7Zm9y'@;
put 'KGJbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3Yjhh'@;
put 'XHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3'@;
put 'ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3ZmRlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDI0XHU4MDVkXHU4'@;
put 'MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNkXHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlk'@;
put 'XHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4'@;
put 'NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3'@;
put 'XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyN11bbV1dPTU4MTEyK20sUls1ODExMittXT1i'@;
put 'WzIyN11bbV0pO2ZvcihiWzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhmMFx1ODhlY1x1ODhlYlx1ODk5ZFx1ODlhMVx1ODk5Zlx1ODk5ZVx1ODllOVx1ODllYlx1ODllOFx1OGFhYlx1OGE5OVx1OGE4Ylx1OGE5Mlx1OGE4'@;
put 'Zlx1OGE5Nlx1OGMzZFx1OGM2OFx1OGM2OVx1OGNkNVx1OGNjZlx1OGNkN1x1OGQ5Nlx1OGUwOVx1OGUwMlx1OGRmZlx1OGUwZFx1OGRmZFx1OGUwYVx1OGUwM1x1OGUwN1x1OGUwNlx1OGUwNVx1OGRmZVx1OGUwMFx1OGUwNFx1OGYxMFx1OGYxMVx1OGYwZVx1OGYwZFx1OTEyM1x1OTExY1x1'@;
put 'OTEyMFx1OTEyMlx1OTExZlx1OTExZFx1OTExYVx1OTEyNFx1OTEyMVx1OTExYlx1OTE3YVx1OTE3Mlx1OTE3OVx1OTE3M1x1OTJhNVx1OTJhNFx1OTI3Nlx1OTI5Ylx1OTI3YVx1OTJhMFx1OTI5NFx1OTJhYVx1OTI4ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'OTJhNlx1OTI5YVx1OTJhYlx1OTI3OVx1OTI5N1x1OTI3Zlx1OTJhM1x1OTJlZVx1OTI4ZVx1OTI4Mlx1OTI5NVx1OTJhMlx1OTI3ZFx1OTI4OFx1OTJhMVx1OTI4YVx1OTI4Nlx1OTI4Y1x1OTI5OVx1OTJhN1x1OTI3ZVx1OTI4N1x1OTJhOVx1OTI5ZFx1OTI4Ylx1OTIyZFx1OTY5ZVx1OTZh'@;
put 'MVx1OTZmZlx1OTc1OFx1OTc3ZFx1OTc3YVx1OTc3ZVx1OTc4M1x1OTc4MFx1OTc4Mlx1OTc3Ylx1OTc4NFx1OTc4MVx1OTc3Zlx1OTdjZVx1OTdjZFx1OTgxNlx1OThhZFx1OThhZVx1OTkwMlx1OTkwMFx1OTkwN1x1OTk5ZFx1OTk5Y1x1OTljM1x1OTliOVx1OTliYlx1OTliYVx1OTljMlx1'@;
put 'OTliZFx1OTljN1x1OWFiMVx1OWFlM1x1OWFlN1x1OWIzZVx1OWIzZlx1OWI2MFx1OWI2MVx1OWI1Zlx1OWNmMVx1OWNmMlx1OWNmNVx1OWVhN1x1NTBmZlx1NTEwM1x1NTEzMFx1NTBmOFx1NTEwNlx1NTEwN1x1NTBmNlx1NTBmZVx1NTEwYlx1NTEwY1x1NTBmZFx1NTEwYVx1NTI4Ylx1NTI4'@;
put 'Y1x1NTJmMVx1NTJlZlx1NTY0OFx1NTY0Mlx1NTY0Y1x1NTYzNVx1NTY0MVx1NTY0YVx1NTY0OVx1NTY0Nlx1NTY1OFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyOF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjhdW21dXT01ODM2OCtt'@;
put 'LFJbNTgzNjgrbV09YlsyMjhdW21dKTtmb3IoYlsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4'@;
put 'YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZcdTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNc'@;
put 'dTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVlNWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYxOTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0'@;
put 'NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJcdTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJc'@;
put 'dTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZi'@;
put 'YTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJcdTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyOV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI5'@;
put 'XVttXV09NTg2MjQrbSxSWzU4NjI0K21dPWJbMjI5XVttXSk7Zm9yKGJbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2'@;
put 'ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIw'@;
put 'XHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWExXHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5XHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3'@;
put 'NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNlXHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIy'@;
put 'XHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3'@;
put 'ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3XHU4MWEzXHU4MTlmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzBdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzIzMF1bbV1dPTU4ODgwK20sUls1ODg4MCttXT1iWzIzMF1bbV0pO2ZvcihiWzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE5ZVx1ODE5NVx1ODFhMlx1ODE5OVx1ODE5N1x1ODIxNlx1ODI0Zlx1ODI1M1x1'@;
put 'ODI1Mlx1ODI1MFx1ODI0ZVx1ODI1MVx1ODUyNFx1ODUzYlx1ODUwZlx1ODUwMFx1ODUyOVx1ODUwZVx1ODUwOVx1ODUwZFx1ODUxZlx1ODUwYVx1ODUyN1x1ODUxY1x1ODRmYlx1ODUyYlx1ODRmYVx1ODUwOFx1ODUwY1x1ODRmNFx1ODUyYVx1ODRmMlx1ODUxNVx1ODRmN1x1ODRlYlx1ODRm'@;
put 'M1x1ODRmY1x1ODUxMlx1ODRlYVx1ODRlOVx1ODUxNlx1ODRmZVx1ODUyOFx1ODUxZFx1ODUyZVx1ODUwMlx1ODRmZFx1ODUxZVx1ODRmNlx1ODUzMVx1ODUyNlx1ODRlN1x1ODRlOFx1ODRmMFx1ODRlZlx1ODRmOVx1ODUxOFx1ODUyMFx1ODUzMFx1ODUwYlx1ODUxOVx1ODUyZlx1ODY2Mlx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODc1Nlx1ODc2M1x1ODc2NFx1ODc3N1x1ODdlMVx1ODc3M1x1ODc1OFx1ODc1NFx1ODc1Ylx1ODc1Mlx1ODc2MVx1ODc1YVx1ODc1MVx1ODc1ZVx1ODc2ZFx1ODc2YVx1ODc1MFx1ODc0ZVx1ODc1Zlx1ODc1ZFx1ODc2Zlx1'@;
put 'ODc2Y1x1ODc3YVx1ODc2ZVx1ODc1Y1x1ODc2NVx1ODc0Zlx1ODc3Ylx1ODc3NVx1ODc2Mlx1ODc2N1x1ODc2OVx1ODg1YVx1ODkwNVx1ODkwY1x1ODkxNFx1ODkwYlx1ODkxN1x1ODkxOFx1ODkxOVx1ODkwNlx1ODkxNlx1ODkxMVx1ODkwZVx1ODkwOVx1ODlhMlx1ODlhNFx1ODlhM1x1ODll'@;
put 'ZFx1ODlmMFx1ODllY1x1OGFjZlx1OGFjNlx1OGFiOFx1OGFkM1x1OGFkMVx1OGFkNFx1OGFkNVx1OGFiYlx1OGFkN1x1OGFiZVx1OGFjMFx1OGFjNVx1OGFkOFx1OGFjM1x1OGFiYVx1OGFiZFx1OGFkOVx1OGMzZVx1OGM0ZFx1OGM4Zlx1OGNlNVx1OGNkZlx1OGNkOVx1OGNlOFx1OGNkYVx1'@;
put 'OGNkZFx1OGNlN1x1OGRhMFx1OGQ5Y1x1OGRhMVx1OGQ5Ylx1OGUyMFx1OGUyM1x1OGUyNVx1OGUyNFx1OGUyZVx1OGUxNVx1OGUxYlx1OGUxNlx1OGUxMVx1OGUxOVx1OGUyNlx1OGUyN1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzMV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjMxXVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzFdW21dXT01OTEzNittLFJbNTkxMzYrbV09YlsyMzFdW21dKTtmb3IoYlsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdc'@;
put 'dThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZcdThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkx'@;
put 'ODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTkyZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdc'@;
put 'dTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhc'@;
put 'dTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5'@;
put 'Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlhZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBc'@;
put 'dTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZcdTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzJdLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzIzMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjMyXVttXV09NTkzOTIrbSxSWzU5MzkyK21dPWJbMjMyXVttXSk7Zm9yKGJbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZk'@;
put 'XHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1'@;
put 'ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0'@;
put 'XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdj'@;
put 'XHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2'@;
put 'YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUwXHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2'@;
put 'XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMzXS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsyMzNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzM11bbV1dPTU5NjQ4K20sUls1OTY0OCttXT1iWzIzM11bbV0pO2ZvcihiWzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmZhMlx1NmZj'@;
put 'OVx1NmZhYlx1NmZjZFx1NmZhZlx1NmZiMlx1NmZiMFx1NzFjNVx1NzFjMlx1NzFiZlx1NzFiOFx1NzFkNlx1NzFjMFx1NzFjMVx1NzFjYlx1NzFkNFx1NzFjYVx1NzFjN1x1NzFjZlx1NzFiZFx1NzFkOFx1NzFiY1x1NzFjNlx1NzFkYVx1NzFkYlx1NzI5ZFx1NzI5ZVx1NzM2OVx1NzM2Nlx1'@;
put 'NzM2N1x1NzM2Y1x1NzM2NVx1NzM2Ylx1NzM2YVx1NzQ3Zlx1NzQ5YVx1NzRhMFx1NzQ5NFx1NzQ5Mlx1NzQ5NVx1NzRhMVx1NzUwYlx1NzU4MFx1NzYyZlx1NzYyZFx1NzYzMVx1NzYzZFx1NzYzM1x1NzYzY1x1NzYzNVx1NzYzMlx1NzYzMFx1NzZiYlx1NzZlNlx1Nzc5YVx1Nzc5ZFx1Nzdh'@;
put 'MVx1Nzc5Y1x1Nzc5Ylx1NzdhMlx1NzdhM1x1Nzc5NVx1Nzc5OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc5N1x1NzhkZFx1NzhlOVx1NzhlNVx1NzhlYVx1NzhkZVx1NzhlM1x1NzhkYlx1NzhlMVx1NzhlMlx1NzhlZFx1NzhkZlx1NzhlMFx1NzlhNFx1N2E0'@;
put 'NFx1N2E0OFx1N2E0N1x1N2FiNlx1N2FiOFx1N2FiNVx1N2FiMVx1N2FiN1x1N2JkZVx1N2JlM1x1N2JlN1x1N2JkZFx1N2JkNVx1N2JlNVx1N2JkYVx1N2JlOFx1N2JmOVx1N2JkNFx1N2JlYVx1N2JlMlx1N2JkY1x1N2JlYlx1N2JkOFx1N2JkZlx1N2NkMlx1N2NkNFx1N2NkN1x1N2NkMFx1'@;
put 'N2NkMVx1N2UxMlx1N2UyMVx1N2UxN1x1N2UwY1x1N2UxZlx1N2UyMFx1N2UxM1x1N2UwZVx1N2UxY1x1N2UxNVx1N2UxYVx1N2UyMlx1N2UwYlx1N2UwZlx1N2UxNlx1N2UwZFx1N2UxNFx1N2UyNVx1N2UyNFx1N2Y0M1x1N2Y3Ylx1N2Y3Y1x1N2Y3YVx1N2ZiMVx1N2ZlZlx1ODAyYVx1ODAy'@;
put 'OVx1ODA2Y1x1ODFiMVx1ODFhNlx1ODFhZVx1ODFiOVx1ODFiNVx1ODFhYlx1ODFiMFx1ODFhY1x1ODFiNFx1ODFiMlx1ODFiN1x1ODFhN1x1ODFmMlx1ODI1NVx1ODI1Nlx1ODI1N1x1ODU1Nlx1ODU0NVx1ODU2Ylx1ODU0ZFx1ODU1M1x1ODU2MVx1ODU1OFx1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT1iWzIzNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzRdW21dXT01OTkwNCttLFJbNTk5MDQrbV09YlsyMzRdW21dKTtmb3IoYlsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRc'@;
put 'dTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5'@;
put 'MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThh'@;
put 'ZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVcdThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRc'@;
put 'dThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkwNzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkz'@;
put 'MzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVcdTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9YlsyMzVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM1XVttXV09NjAxNjArbSxSWzYwMTYwK21dPWJbMjM1XVttXSk7Zm9yKGJbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4'@;
put 'XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5'@;
put 'Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFlXHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5'@;
put 'ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1Njdl'@;
put 'XHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJlXHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2'@;
put 'MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkz'@;
put 'XHU2YThlXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzNl1bbV1dPTYwNDE2K20sUls2MDQxNittXT1iWzIzNl1bbV0pO2ZvcihiWzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmE5NVx1NmE4M1x1NmFhOFx1NmFhNFx1NmE5MVx1NmE3Zlx1NmFhNlx1NmE5YVx1NmE4NVx1NmE4Y1x1NmE5Mlx1NmI1Ylx1NmJhZFx1NmMwOVx1NmZjY1x1NmZhOVx1NmZmNFx1NmZkNFx1NmZlM1x1NmZkY1x1NmZlZFx1NmZlN1x1NmZl'@;
put 'Nlx1NmZkZVx1NmZmMlx1NmZkZFx1NmZlMlx1NmZlOFx1NzFlMVx1NzFmMVx1NzFlOFx1NzFmMlx1NzFlNFx1NzFmMFx1NzFlMlx1NzM3M1x1NzM2ZVx1NzM2Zlx1NzQ5N1x1NzRiMlx1NzRhYlx1NzQ5MFx1NzRhYVx1NzRhZFx1NzRiMVx1NzRhNVx1NzRhZlx1NzUxMFx1NzUxMVx1NzUxMlx1'@;
put 'NzUwZlx1NzU4NFx1NzY0M1x1NzY0OFx1NzY0OVx1NzY0N1x1NzZhNFx1NzZlOVx1NzdiNVx1NzdhYlx1NzdiMlx1NzdiN1x1NzdiNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdiNFx1NzdiMVx1NzdhOFx1NzdmMFx1NzhmM1x1NzhmZFx1NzkwMlx1NzhmYlx1'@;
put 'NzhmY1x1NzhmMlx1NzkwNVx1NzhmOVx1NzhmZVx1NzkwNFx1NzlhYlx1NzlhOFx1N2E1Y1x1N2E1Ylx1N2E1Nlx1N2E1OFx1N2E1NFx1N2E1YVx1N2FiZVx1N2FjMFx1N2FjMVx1N2MwNVx1N2MwZlx1N2JmMlx1N2MwMFx1N2JmZlx1N2JmYlx1N2MwZVx1N2JmNFx1N2MwYlx1N2JmM1x1N2Mw'@;
put 'Mlx1N2MwOVx1N2MwM1x1N2MwMVx1N2JmOFx1N2JmZFx1N2MwNlx1N2JmMFx1N2JmMVx1N2MxMFx1N2MwYVx1N2NlOFx1N2UyZFx1N2UzY1x1N2U0Mlx1N2UzM1x1OTg0OFx1N2UzOFx1N2UyYVx1N2U0OVx1N2U0MFx1N2U0N1x1N2UyOVx1N2U0Y1x1N2UzMFx1N2UzYlx1N2UzNlx1N2U0NFx1'@;
put 'N2UzYVx1N2Y0NVx1N2Y3Zlx1N2Y3ZVx1N2Y3ZFx1N2ZmNFx1N2ZmMlx1ODAyY1x1ODFiYlx1ODFjNFx1ODFjY1x1ODFjYVx1ODFjNVx1ODFjN1x1ODFiY1x1ODFlOVx1ODI1Ylx1ODI1YVx1ODI1Y1x1ODU4M1x1ODU4MFx1ODU4Zlx1ODVhN1x1ODU5NVx1ODVhMFx1ODU4Ylx1ODVhM1x1ODU3'@;
put 'Ylx1ODVhNFx1ODU5YVx1ODU5ZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzddW21dXT02MDY3MittLFJbNjA2NzIrbV09YlsyMzddW21dKTtmb3IoYlsyMzhdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NzdcdTg1N2NcdTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1'@;
put 'OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVc'@;
put 'dTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJc'@;
put 'dThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNcdThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkw'@;
put 'ODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkxOWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNc'@;
put 'dTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2JcdTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3'@;
put 'MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM4XVttXV09NjA5MjgrbSxSWzYwOTI4K21dPWJbMjM4XVttXSk7Zm9yKGJbMjM5XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5'@;
put 'OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5Yjli'@;
put 'XHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNl'@;
put 'XHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1'@;
put 'OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRi'@;
put 'XHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2'@;
put 'ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzOV1bbV1dPTYxMTg0K20sUls2MTE4NCttXT1iWzIzOV1bbV0p'@;
put 'O2ZvcihiWzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzRiOFx1NzRjMFx1NzRiNVx1NzRjMVx1NzRiZVx1NzRiNlx1NzRiYlx1NzRjMlx1NzUxNFx1NzUxM1x1NzY1Y1x1NzY2NFx1NzY1OVx1NzY1MFx1NzY1M1x1NzY1N1x1'@;
put 'NzY1YVx1NzZhNlx1NzZiZFx1NzZlY1x1NzdjMlx1NzdiYVx1NzhmZlx1NzkwY1x1NzkxM1x1NzkxNFx1NzkwOVx1NzkxMFx1NzkxMlx1NzkxMVx1NzlhZFx1NzlhY1x1N2E1Zlx1N2MxY1x1N2MyOVx1N2MxOVx1N2MyMFx1N2MxZlx1N2MyZFx1N2MxZFx1N2MyNlx1N2MyOFx1N2MyMlx1N2My'@;
put 'NVx1N2MzMFx1N2U1Y1x1N2U1MFx1N2U1Nlx1N2U2M1x1N2U1OFx1N2U2Mlx1N2U1Zlx1N2U1MVx1N2U2MFx1N2U1N1x1N2U1M1x1N2ZiNVx1N2ZiM1x1N2ZmN1x1N2ZmOFx1ODA3NVx1ODFkMVx1ODFkMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkMFx1ODI1'@;
put 'Zlx1ODI1ZVx1ODViNFx1ODVjNlx1ODVjMFx1ODVjM1x1ODVjMlx1ODViM1x1ODViNVx1ODViZFx1ODVjN1x1ODVjNFx1ODViZlx1ODVjYlx1ODVjZVx1ODVjOFx1ODVjNVx1ODViMVx1ODViNlx1ODVkMlx1ODYyNFx1ODViOFx1ODViN1x1ODViZVx1ODY2OVx1ODdlN1x1ODdlNlx1ODdlMlx1'@;
put 'ODdkYlx1ODdlYlx1ODdlYVx1ODdlNVx1ODdkZlx1ODdmM1x1ODdlNFx1ODdkNFx1ODdkY1x1ODdkM1x1ODdlZFx1ODdkOFx1ODdlM1x1ODdhNFx1ODdkN1x1ODdkOVx1ODgwMVx1ODdmNFx1ODdlOFx1ODdkZFx1ODk1M1x1ODk0Ylx1ODk0Zlx1ODk0Y1x1ODk0Nlx1ODk1MFx1ODk1MVx1ODk0'@;
put 'OVx1OGIyYVx1OGIyN1x1OGIyM1x1OGIzM1x1OGIzMFx1OGIzNVx1OGI0N1x1OGIyZlx1OGIzY1x1OGIzZVx1OGIzMVx1OGIyNVx1OGIzN1x1OGIyNlx1OGIzNlx1OGIyZVx1OGIyNFx1OGIzYlx1OGIzZFx1OGIzYVx1OGM0Mlx1OGM3NVx1OGM5OVx1OGM5OFx1OGM5N1x1OGNmZVx1OGQwNFx1'@;
put 'OGQwMlx1OGQwMFx1OGU1Y1x1OGU2Mlx1OGU2MFx1OGU1N1x1OGU1Nlx1OGU1ZVx1OGU2NVx1OGU2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0MF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDBdW21dXT02MTQ0MCttLFJbNjE0NDAr'@;
put 'bV09YlsyNDBdW21dKTtmb3IoYlsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2Vc'@;
put 'dTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkzOWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkz'@;
put 'YjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJcdTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhc'@;
put 'dTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTliYzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlk'@;
put 'NGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZcdTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZc'@;
put 'dTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTViM2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0MV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQxXVttXV09NjE2'@;
put 'OTYrbSxSWzYxNjk2K21dPWJbMjQxXVttXSk7Zm9yKGJbMjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRl'@;
put 'XHU2YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3'@;
put 'MDFjXHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU3OTIxXHU3OTFjXHU3OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRi'@;
put 'XHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZkXHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4'@;
put 'NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVk'@;
put 'XHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVti'@;
put 'WzI0Ml1bbV1dPTYxOTUyK20sUls2MTk1MittXT1iWzI0Ml1bbV0pO2ZvcihiWzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGI1MVx1OGI0Mlx1OGI1Mlx1OGI1N1x1OGM0M1x1OGM3N1x1OGM3Nlx1OGM5YVx1OGQwNlx1OGQw'@;
put 'N1x1OGQwOVx1OGRhY1x1OGRhYVx1OGRhZFx1OGRhYlx1OGU2ZFx1OGU3OFx1OGU3M1x1OGU2YVx1OGU2Zlx1OGU3Ylx1OGVjMlx1OGY1Mlx1OGY1MVx1OGY0Zlx1OGY1MFx1OGY1M1x1OGZiNFx1OTE0MFx1OTEzZlx1OTFiMFx1OTFhZFx1OTNkZVx1OTNjN1x1OTNjZlx1OTNjMlx1OTNkYVx1'@;
put 'OTNkMFx1OTNmOVx1OTNlY1x1OTNjY1x1OTNkOVx1OTNhOVx1OTNlNlx1OTNjYVx1OTNkNFx1OTNlZVx1OTNlM1x1OTNkNVx1OTNjNFx1OTNjZVx1OTNjMFx1OTNkMlx1OTNlN1x1OTU3ZFx1OTVkYVx1OTVkYlx1OTZlMVx1OTcyOVx1OTcyYlx1OTcyY1x1OTcyOFx1OTcyNlx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTdiM1x1OTdiN1x1OTdiNlx1OTdkZFx1OTdkZVx1OTdkZlx1OTg1Y1x1OTg1OVx1OTg1ZFx1OTg1N1x1OThiZlx1OThiZFx1OThiYlx1OThiZVx1OTk0OFx1OTk0N1x1OTk0M1x1OTlhNlx1OTlhN1x1OWExYVx1OWExNVx1OWEyNVx1OWEx'@;
put 'ZFx1OWEyNFx1OWExYlx1OWEyMlx1OWEyMFx1OWEyN1x1OWEyM1x1OWExZVx1OWExY1x1OWExNFx1OWFjMlx1OWIwYlx1OWIwYVx1OWIwZVx1OWIwY1x1OWIzN1x1OWJlYVx1OWJlYlx1OWJlMFx1OWJkZVx1OWJlNFx1OWJlNlx1OWJlMlx1OWJmMFx1OWJkNFx1OWJkN1x1OWJlY1x1OWJkY1x1'@;
put 'OWJkOVx1OWJlNVx1OWJkNVx1OWJlMVx1OWJkYVx1OWQ3N1x1OWQ4MVx1OWQ4YVx1OWQ4NFx1OWQ4OFx1OWQ3MVx1OWQ4MFx1OWQ3OFx1OWQ4Nlx1OWQ4Ylx1OWQ4Y1x1OWQ3ZFx1OWQ2Ylx1OWQ3NFx1OWQ3NVx1OWQ3MFx1OWQ2OVx1OWQ4NVx1OWQ3M1x1OWQ3Ylx1OWQ4Mlx1OWQ2Zlx1OWQ3'@;
put 'OVx1OWQ3Zlx1OWQ4N1x1OWQ2OFx1OWU5NFx1OWU5MVx1OWVjMFx1OWVmY1x1OWYyZFx1OWY0MFx1OWY0MVx1OWY0ZFx1OWY1Nlx1OWY1N1x1OWY1OFx1NTMzN1x1NTZiMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0M10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQzXVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoZWVbYlsyNDNdW21dXT02MjIwOCttLFJbNjIyMDgrbV09YlsyNDNdW21dKTtmb3IoYlsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVl'@;
put 'ZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhc'@;
put 'dTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThcdTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5'@;
put 'MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNcdTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgy'@;
put 'MGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRc'@;
put 'dThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlcdThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0'@;
put 'MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0'@;
put 'NF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ0XVttXV09NjI0NjQrbSxSWzYyNDY0K21dPWJbMjQ0XVttXSk7Zm9yKGJbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5'@;
put 'NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5'@;
put 'XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5'@;
put 'ZDk4XHU5ZDkwXHU5ZDliXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5'@;
put 'ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNmXHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAy'@;
put 'XHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3'@;
put 'ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ1XS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09YlsyNDVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0NV1bbV1dPTYyNzIwK20sUls2MjcyMCttXT1iWzI0NV1bbV0pO2ZvcihiWzI0Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyOVx1ODgxZFx1ODgxYlx1'@;
put 'ODgyMFx1ODgyNFx1ODgxY1x1ODgyYlx1ODg0YVx1ODk2ZFx1ODk2OVx1ODk2ZVx1ODk2Ylx1ODlmYVx1OGI3OVx1OGI3OFx1OGI0NVx1OGI3YVx1OGI3Ylx1OGQxMFx1OGQxNFx1OGRhZlx1OGU4ZVx1OGU4Y1x1OGY1ZVx1OGY1Ylx1OGY1ZFx1OTE0Nlx1OTE0NFx1OTE0NVx1OTFiOVx1OTQz'@;
put 'Zlx1OTQzYlx1OTQzNlx1OTQyOVx1OTQzZFx1OTQzY1x1OTQzMFx1OTQzOVx1OTQyYVx1OTQzN1x1OTQyY1x1OTQ0MFx1OTQzMVx1OTVlNVx1OTVlNFx1OTVlM1x1OTczNVx1OTczYVx1OTdiZlx1OTdlMVx1OTg2NFx1OThjOVx1OThjNlx1OThjMFx1OTk1OFx1OTk1Nlx1OWEzOVx1OWEzZFx1'@;
put 'OWE0Nlx1OWE0NFx1OWE0Mlx1OWE0MVx1OWEzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWEzZlx1OWFjZFx1OWIxNVx1OWIxN1x1OWIxOFx1OWIxNlx1OWIzYVx1OWI1Mlx1OWMyYlx1OWMxZFx1OWMxY1x1OWMyY1x1OWMyM1x1OWMyOFx1OWMyOVx1OWMyNFx1'@;
put 'OWMyMVx1OWRiN1x1OWRiNlx1OWRiY1x1OWRjMVx1OWRjN1x1OWRjYVx1OWRjZlx1OWRiZVx1OWRjNVx1OWRjM1x1OWRiYlx1OWRiNVx1OWRjZVx1OWRiOVx1OWRiYVx1OWRhY1x1OWRjOFx1OWRiMVx1OWRhZFx1OWRjY1x1OWRiM1x1OWRjZFx1OWRiMlx1OWU3YVx1OWU5Y1x1OWVlYlx1OWVl'@;
put 'ZVx1OWVlZFx1OWYxYlx1OWYxOFx1OWYxYVx1OWYzMVx1OWY0ZVx1OWY2NVx1OWY2NFx1OWY5Mlx1NGViOVx1NTZjNlx1NTZjNVx1NTZjYlx1NTk3MVx1NWI0Ylx1NWI0Y1x1NWRkNVx1NWRkMVx1NWVmMlx1NjUyMVx1NjUyMFx1NjUyNlx1NjUyMlx1NmIwYlx1NmIwOFx1NmIwOVx1NmMwZFx1'@;
put 'NzA1NVx1NzA1Nlx1NzA1N1x1NzA1Mlx1NzIxZVx1NzIxZlx1NzJhOVx1NzM3Zlx1NzRkOFx1NzRkNVx1NzRkOVx1NzRkN1x1NzY2ZFx1NzZhZFx1NzkzNVx1NzliNFx1N2E3MFx1N2E3MVx1N2M1N1x1N2M1Y1x1N2M1OVx1N2M1Ylx1N2M1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0'@;
put 'Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDZdW21dXT02Mjk3NittLFJbNjI5NzYrbV09YlsyNDZdW21dKTtmb3IoYlsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRc'@;
put 'dTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThk'@;
put 'MTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdcdTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJc'@;
put 'dTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlc'@;
put 'dTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlkZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlm'@;
put 'MzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJcdTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFc'@;
put 'dTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9YlsyNDddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ3XVttXV09NjMyMzIrbSxSWzYzMjMyK21dPWJbMjQ3XVttXSk7Zm9yKGJbMjQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYzXHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5'@;
put 'YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQw'@;
put 'XHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEz'@;
put 'XHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5'@;
put 'MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYzXHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAx'@;
put 'XHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0OF1bbV1dPTYzNDg4K20sUls2MzQ4OCttXT1iWzI0OF1bbV0pO2ZvcihiWzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U5OFx1N2U5Ylx1N2U5OVx1ODFlMFx1ODFlMVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODk3OVx1ODk3YVx1ODk3Y1x1ODk3Ylx1ODlmZlx1OGI5OFx1OGI5OVx1OGVhNVx1OGVhNFx1OGVhM1x1OTQ2ZVx1OTQ2ZFx1OTQ2Zlx1OTQ3MVx1OTQ3M1x1OTc0OVx1'@;
put 'OTg3Mlx1OTk1Zlx1OWM2OFx1OWM2ZVx1OWM2ZFx1OWUwYlx1OWUwZFx1OWUxMFx1OWUwZlx1OWUxMlx1OWUxMVx1OWVhMVx1OWVmNVx1OWYwOVx1OWY0N1x1OWY3OFx1OWY3Ylx1OWY3YVx1OWY3OVx1NTcxZVx1NzA2Nlx1N2M2Zlx1ODgzY1x1OGRiMlx1OGVhNlx1OTFjM1x1OTQ3NFx1OTQ3'@;
put 'OFx1OTQ3Nlx1OTQ3NVx1OWE2MFx1OWM3NFx1OWM3M1x1OWM3MVx1OWM3NVx1OWUxNFx1OWUxM1x1OWVmNlx1OWYwYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWZhNFx1NzA2OFx1NzA2NVx1N2NmN1x1ODY2YVx1ODgzZVx1ODgzZFx1ODgzZlx1OGI5ZVx1OGM5'@;
put 'Y1x1OGVhOVx1OGVjOVx1OTc0Ylx1OTg3M1x1OTg3NFx1OThjY1x1OTk2MVx1OTlhYlx1OWE2NFx1OWE2Nlx1OWE2N1x1OWIyNFx1OWUxNVx1OWUxN1x1OWY0OFx1NjIwN1x1NmIxZVx1NzIyN1x1ODY0Y1x1OGVhOFx1OTQ4Mlx1OTQ4MFx1OTQ4MVx1OWE2OVx1OWE2OFx1OWIyZVx1OWUxOVx1'@;
put 'NzIyOVx1ODY0Ylx1OGI5Zlx1OTQ4M1x1OWM3OVx1OWViN1x1NzY3NVx1OWE2Ylx1OWM3YVx1OWUxZFx1NzA2OVx1NzA2YVx1OWVhNFx1OWY3ZVx1OWY0OVx1OWY5OFx1Nzg4MVx1OTJiOVx1ODhjZlx1NThiYlx1NjA1Mlx1N2NhN1x1NWFmYVx1MjU1NFx1MjU2Nlx1MjU1N1x1MjU2MFx1MjU2'@;
put 'Y1x1MjU2M1x1MjU1YVx1MjU2OVx1MjU1ZFx1MjU1Mlx1MjU2NFx1MjU1NVx1MjU1ZVx1MjU2YVx1MjU2MVx1MjU1OFx1MjU2N1x1MjU1Ylx1MjU1M1x1MjU2NVx1MjU1Nlx1MjU1Zlx1MjU2Ylx1MjU2Mlx1MjU1OVx1MjU2OFx1MjU1Y1x1MjU1MVx1MjU1MFx1MjU2ZFx1MjU2ZVx1MjU3MFx1'@;
put 'MjU2Zlx1MjU5M1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQ5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDldW21dXT02Mzc0NCttLFJbNjM3NDQrbV09YlsyNDldW21dKTtyZXR1cm57ZW5jOmVlLGRlYzpSfX0oKSxTZVsxMjUwXT1m'@;
put 'dW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8'@;
put 'PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNWFcdTAxNjRcdTAxN2RcdTAx'@;
put 'NzlcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNWJcdTAxNjVcdTAxN2VcdTAxN2FceGEwXHUwMmM3XHUwMmQ4XHUwMTQxXHhhNFx1MDEwNFx4YTZceGE3XHhhOFx4YTlcdTAxNWVceGFiXHhhY1x4YWRc'@;
put 'eGFlXHUwMTdiXHhiMFx4YjFcdTAyZGJcdTAxNDJceGI0XHhiNVx4YjZceGI3XHhiOFx1MDEwNVx1MDE1Zlx4YmJcdTAxM2RcdTAyZGRcdTAxM2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1'@;
put 'MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJceGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZc'@;
put 'dTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5IixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFy'@;
put 'QXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4'@;
put 'MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFj'@;
put 'XHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRc'@;
put 'dTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZcdTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0'@;
put 'XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUw'@;
put 'NDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRi'@;
put 'XHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMTI1Ml09ZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN'@;
put 'Tk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUy'@;
put 'MDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0'@;
put 'XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRc'@;
put 'eGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1'@;
put 'NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMTI1M109ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBm'@;
put 'XHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdm'@;
put 'XHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHVmZmZkXHUy'@;
put 'MDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx1MDM4NVx1MDM4Nlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdWZmZmRceGFiXHhhY1x4YWRceGFlXHUyMDE1XHhiMFx4YjFceGIyXHhiM1x1MDM4NFx4YjVceGI2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJk'@;
put 'XHUwMzhlXHUwMzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUw'@;
put 'M2E5XHUwM2FhXHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0'@;
put 'XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2Vu'@;
put 'YzpiLGRlYzplZX19KCksU2VbMTI1NF09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIj'@;
put 'JCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUy'@;
put 'MDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4'@;
put 'YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJc'@;
put 'eGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZh'@;
put 'XHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMTI1NV09ZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN'@;
put 'Tk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUy'@;
put 'MDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhhM1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4'@;
put 'YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1MDViOFx1MDViOVx1ZmZmZFx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVj'@;
put 'M1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1'@;
put 'MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1ZmZmZCIsZWU9W10sYj17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQo'@;
put 'bSldPW0pLGVlW21dPVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzEyNTZdPWZ1bmN0aW9uKCl7Zm9yKHZhciBSPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgx'@;
put 'OFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1MDY3ZVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAy'@;
put 'Nlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDY3OVx1MjAzOVx1MDE1Mlx1MDY4Nlx1MDY5OFx1MDY4OFx1MDZhZlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDZhOVx1MjEyMlx1MDY5MVx1MjAzYVx1MDE1M1x1MjAwY1x1MjAwZFx1MDZiYVx4YTBcdTA2'@;
put 'MGNceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx1MDZiZVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx1MDYxYlx4YmJceGJjXHhiZFx4YmVcdTA2MWZcdTA2YzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVc'@;
put 'dTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZceGQ3XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNhXHUwNjQwXHUwNjQxXHUwNjQyXHUwNjQzXHhlMFx1MDY0NFx4'@;
put 'ZTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDY0OVx1MDY0YVx4ZWVceGVmXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHhmNFx1MDY0Zlx1MDY1MFx4ZjdcdTA2NTFceGY5XHUwNjUyXHhmYlx4ZmNcdTIwMGVcdTIwMGZcdTA2ZDIiLGVlPVtdLGI9e30s'@;
put 'bT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJc'@;
put 'dFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3Bx'@;
put 'cnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRceGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1'@;
put 'MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhi'@;
put 'ZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUwMTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4'@;
put 'ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1'@;
put 'Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVsxMjU4XT1mdW5jdGlvbigpe2Zv'@;
put 'cih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdI'@;
put 'SUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIw'@;
put 'MThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhi'@;
put 'M1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2VceGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4'@;
put 'ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYzXHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJc'@;
put 'eGZmIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMWU0XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0'@;
put 'XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFi'@;
put 'Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAy'@;
put 'MFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIy'@;
put 'MWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUy'@;
put 'MDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGVlPVtdLGI9e30sbT0wOzI1NiE9'@;
put 'bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVsxMDAwNl09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZc'@;
put 'clx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5'@;
put 'ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0'@;
put 'XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNh'@;
put 'Y1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2Fm'@;
put 'XHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUw'@;
put 'M2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIixlZT1bXSxiPXt9LG09MDsyNTYhPW07KyttKTY1NTMzIT09Ui5jaGFyQ29kZUF0KG0pJiYoYltSLmNoYXJBdChtKV09bSksZWVbbV09Ui5jaGFyQXQobSk7cmV0dXJue2VuYzpiLGRlYzplZX19KCksU2VbMTAwMDddPWZ1'@;
put 'bmN0aW9uKCl7Zm9yKHZhciBSPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9'@;
put 'Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQx'@;
put 'Zlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHUwNDA2XHhhZVx4YTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIy'@;
put 'NjBcdTA0MDNcdTA0NTNcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUwNDU2XHhiNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwYVx1MDQ1YVx1MDQ1OFx1MDQwNVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBc'@;
put 'dTA0MGJcdTA0NWJcdTA0MGNcdTA0NWNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyMDFlXHUwNDBlXHUwNDVlXHUwNDBmXHUwNDVmXHUyMTE2XHUwNDAxXHUwNDUxXHUwNDRmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2'@;
put 'XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHhhNCIsZWU9W10sYj17fSxtPTA7'@;
put 'MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQobSldPW0pLGVlW21dPVIuY2hhckF0KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzEwMDA4XT1mdW5jdGlvbigpe3ZhciBtLFI9W10sZWU9e30sYj1bXTtmb3IoYlswXT0iXDBceDAxXHgwMlx4MDNc'@;
put 'eDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5f'@;
put 'YGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVj'@;
put 'XHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZiXHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksbT0wO20hPWJbMF0u'@;
put 'bGVuZ3RoOysrbSk2NTUzMyE9PWJbMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMF1bbV1dPTArbSxSWzArbV09YlswXVttXSk7Zm9yKGJbMTYxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDAwXHUzMDAxXHUzMDAyXHUzMGZiXHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNVx1ZmY1ZVx1ZmZmZFx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1'@;
put 'MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAxMVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIy'@;
put 'NVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUx'@;
put 'XHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2MV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PWJbMTYxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjFdW21dXT00MTIxNittLFJbNDEyMTYrbV09YlsxNjFdW21dKTtmb3IoYlsxNjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTI0ODhc'@;
put 'dTI0ODlcdTI0OGFcdTI0OGJcdTI0OGNcdTI0OGRcdTI0OGVcdTI0OGZcdTI0OTBcdTI0OTFcdTI0OTJcdTI0OTNcdTI0OTRcdTI0OTVcdTI0OTZcdTI0OTdcdTI0OThcdTI0OTlcdTI0OWFcdTI0OWJcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0'@;
put 'N2NcdTI0N2RcdTI0N2VcdTI0N2ZcdTI0ODBcdTI0ODFcdTI0ODJcdTI0ODNcdTI0ODRcdTI0ODVcdTI0ODZcdTI0ODdcdTI0NjBcdTI0NjFcdTI0NjJcdTI0NjNcdTI0NjRcdTI0NjVcdTI0NjZcdTI0NjdcdTI0NjhcdTI0NjlcdWZmZmRcdWZmZmRcdTMyMjBcdTMyMjFcdTMyMjJcdTMyMjNc'@;
put 'dTMyMjRcdTMyMjVcdTMyMjZcdTMyMjdcdTMyMjhcdTMyMjlcdWZmZmRcdWZmZmRcdTIxNjBcdTIxNjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTIxNmFcdTIxNmJcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjJdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT1iWzE2Ml1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTYyXVttXV09NDE0NzIrbSxSWzQxNDcyK21dPWJbMTYyXVttXSk7Zm9yKGJbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBm'@;
put 'XHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVm'@;
put 'ZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2'@;
put 'XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPWJbMTYzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2M11bbV1dPTQxNzI4K20sUls0MTcyOCttXT1iWzE2M11bbV0pO2ZvcihiWzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0'@;
put 'ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1'@;
put 'MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4'@;
put 'NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu'@;
put 'c3BsaXQoIiIpLG09MDttIT1iWzE2NF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjRdW21dXT00MTk4NCttLFJbNDE5ODQrbV09YlsxNjRdW21dKTtmb3IoYlsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMw'@;
put 'YWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMwYjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZc'@;
put 'dTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNcdTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMw'@;
put 'ZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMwZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY1XVttXV09NDIyNDArbSxSWzQyMjQwK21dPWJbMTY1XVttXSk7Zm9yKGJbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUw'@;
put 'Mzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0'@;
put 'XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2Nl1bbV1dPTQyNDk2K20sUls0MjQ5NittXT1iWzE2Nl1bbV0pO2ZvcihiWzE2N109Ilx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1'@;
put 'MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1'@;
put 'MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE2N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTY3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNjddW21dXT00Mjc1MittLFJbNDI3NTIrbV09YlsxNjddW21dKTtmb3IoYlsxNjhdPSJc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDEx'@;
put 'M1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZc'@;
put 'dTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMxMjdcdTMxMjhcdTMxMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNjhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE2OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTY4XVttXV09NDMwMDgrbSxSWzQzMDA4K21dPWJbMTY4XVttXSk7Zm9yKGJbMTY5XT0iXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAy'@;
put 'XHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUy'@;
put 'NTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUyNTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5'@;
put 'XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTY5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNjldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE2OV1bbV1dPTQzMjY0K20sUls0MzI2NCttXT1iWzE2OV1bbV0pO2ZvcihiWzE3Nl09'@;
put 'Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTU0YVx1OTYzZlx1NTdjM1x1NjMy'@;
put 'OFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1'@;
put 'ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3'@;
put 'MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1'@;
put 'OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3Nl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxNzZdW21dXT00NTA1NittLFJbNDUwNTYrbV09YlsxNzZdW21d'@;
put 'KTtmb3IoYlsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTk2'@;
put 'ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRcdTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZc'@;
put 'dTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVlMDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThm'@;
put 'OWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4NjhcdTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJc'@;
put 'dTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxNzddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE3N11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTc3XVttXV09NDUzMTIrbSxSWzQ1MzEy'@;
put 'K21dPWJbMTc3XVttXSk7Zm9yKGJbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTczXHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBk'@;
put 'XHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2'@;
put 'Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRmXHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4Yzdh'@;
put 'XHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTc4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxNzhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE3OF1bbV1dPTQ1'@;
put 'NTY4K20sUls0NTU2OCttXT1iWzE3OF1bbV0pO2ZvcihiWzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3'@;
put 'Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1'@;
put 'NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVj'@;
put 'N1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE3OV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTc5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVb'@;
put 'YlsxNzldW21dXT00NTgyNCttLFJbNDU4MjQrbV09YlsxNzldW21dKTtmb3IoYlsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYz'@;
put 'NzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFcdTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZc'@;
put 'dTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0'@;
put 'MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJcdTVmODVcdTkwMmVcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4MF1bbV0uY2hhckNv'@;
put 'ZGVBdCgwKSYmKGVlW2JbMTgwXVttXV09NDYwODArbSxSWzQ2MDgwK21dPWJbMTgwXVttXSk7Zm9yKGJbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2'@;
put 'ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRj'@;
put 'XHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2FiXHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1'@;
put 'OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTgxXS5sZW5ndGg7KyttKTY1NTMzIT09Ylsx'@;
put 'ODFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4MV1bbV1dPTQ2MzM2K20sUls0NjMzNittXT1iWzE4MV1bbV0pO2ZvcihiWzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1'@;
put 'NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJi'@;
put 'NVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1'@;
put 'ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4Ml0ubGVuZ3RoOysr'@;
put 'bSk2NTUzMyE9PWJbMTgyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODJdW21dXT00NjU5MittLFJbNDY1OTIrbV09YlsxODJdW21dKTtmb3IoYlsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMzBcdTUzZDFcdTdmNWFcdTdiNGZcdTRmMTBcdTRlNGZcdTk2MDBcdTZjZDVcdTczZDBcdTg1ZTlcdTVlMDZcdTc1NmFcdTdmZmJcdTZhMGFcdTc3ZmVcdTk0OTJc'@;
put 'dTdlNDFcdTUxZTFcdTcwZTZcdTUzY2RcdThmZDRcdTgzMDNcdThkMjlcdTcyYWZcdTk5NmRcdTZjZGJcdTU3NGFcdTgyYjNcdTY1YjlcdTgwYWFcdTYyM2ZcdTk2MzJcdTU5YThcdTRlZmZcdThiYmZcdTdlYmFcdTY1M2VcdTgzZjJcdTk3NWVcdTU1NjFcdTk4ZGVcdTgwYTVcdTUzMmFcdThi'@;
put 'ZmRcdTU0MjBcdTgwYmFcdTVlOWZcdTZjYjhcdThkMzlcdTgyYWNcdTkxNWFcdTU0MjlcdTZjMWJcdTUyMDZcdTdlYjdcdTU3NWZcdTcxMWFcdTZjN2VcdTdjODlcdTU5NGJcdTRlZmRcdTVmZmZcdTYxMjRcdTdjYWFcdTRlMzBcdTVjMDFcdTY3YWJcdTg3MDJcdTVjZjBcdTk1MGJcdTk4Y2Vc'@;
put 'dTc1YWZcdTcwZmRcdTkwMjJcdTUxYWZcdTdmMWRcdThiYmRcdTU5NDlcdTUxZTRcdTRmNWJcdTU0MjZcdTU5MmJcdTY1NzdcdTgwYTRcdTViNzVcdTYyNzZcdTYyYzJcdThmOTBcdTVlNDVcdTZjMWZcdTdiMjZcdTRmMGZcdTRmZDhcdTY3MGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9Ylsx'@;
put 'ODNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4M11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTgzXVttXV09NDY4NDgrbSxSWzQ2ODQ4K21dPWJbMTgzXVttXSk7Zm9yKGJbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTlj'@;
put 'XHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3'@;
put 'NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNm'@;
put 'XHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgi'@;
put 'IiksbT0wO20hPWJbMTg0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4NF1bbV1dPTQ3MTA0K20sUls0NzEwNCttXT1iWzE4NF1bbV0pO2ZvcihiWzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJh'@;
put 'Ylx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1'@;
put 'OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZmYVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3'@;
put 'Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1'@;
put 'ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4NV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODVdW21dXT00NzM2MCttLFJbNDczNjArbV09YlsxODVdW21dKTtmb3IoYlsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkw'@;
put 'YWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVcdTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdc'@;
put 'dTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZh'@;
put 'MmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2ZcdTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBc'@;
put 'dTdjY2FcdTZlNTZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg2XVttXV09NDc2MTYrbSxSWzQ3NjE2K21dPWJbMTg2XVttXSk7Zm9yKGJbMTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4'@;
put 'MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdi'@;
put 'XHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4'@;
put 'ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNh'@;
put 'XHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTg3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxODddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE4N11bbV1dPTQ3ODcyK20sUls0Nzg3MittXT1iWzE4N11bbV0pO2ZvcihiWzE4OF09Ilx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1'@;
put 'OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0'@;
put 'Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJhMVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1'@;
put 'OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3'@;
put 'NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2JhZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE4OF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTg4XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxODhdW21dXT00ODEyOCttLFJbNDgxMjgrbV09YlsxODhdW21dKTtmb3IoYlsx'@;
put 'ODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwNjVcdTgyMzBcdTUyNTFc'@;
put 'dTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVh'@;
put 'MDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJc'@;
put 'dTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRl'@;
put 'YzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxODldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE4OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTg5XVttXV09NDgzODQrbSxSWzQ4Mzg0K21dPWJbMTg5'@;
put 'XVttXSk7Zm9yKGJbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNk'@;
put 'XHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3'@;
put 'YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5'@;
put 'XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3'@;
put 'MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTkwXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5MF1bbV1dPTQ4NjQwK20sUls0'@;
put 'ODY0MCttXT1iWzE5MF1bbV0pO2ZvcihiWzE5MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1'@;
put 'NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1'@;
put 'MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1'@;
put 'Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTkxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTFdW21d'@;
put 'XT00ODg5NittLFJbNDg4OTYrbV09YlsxOTFdW21dKTtmb3IoYlsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ODhcdTYxMjdcdTZlODNcdTU3NjRcdTY2MDZcdTYzNDZcdTU2ZjBcdTYyZWNcdTYyNjlcdTVlZDNcdTk2MTRcdTU3ODNcdTYyYzlcdTU1ODdcdTg3MjFcdTgxNGFcdThmYTNcdTU1NjZcdTgzYjFcdTY3NjVcdThkNTZcdTg0ZGRcdTVhNmFcdTY4MGZc'@;
put 'dTYyZTZcdTdiZWVcdTk2MTFcdTUxNzBcdTZmOWNcdThjMzBcdTYzZmRcdTg5YzhcdTYxZDJcdTdmMDZcdTcwYzJcdTZlZTVcdTc0MDVcdTY5OTRcdTcyZmNcdTVlY2FcdTkwY2VcdTY3MTdcdTZkNmFcdTYzNWVcdTUyYjNcdTcyNjJcdTgwMDFcdTRmNmNcdTU5ZTVcdTkxNmFcdTcwZDlcdTZk'@;
put 'OWRcdTUyZDJcdTRlNTBcdTk2ZjdcdTk1NmRcdTg1N2VcdTc4Y2FcdTdkMmZcdTUxMjFcdTU3OTJcdTY0YzJcdTgwOGJcdTdjN2JcdTZjZWFcdTY4ZjFcdTY5NWVcdTUxYjdcdTUzOThcdTY4YThcdTcyODFcdTllY2VcdTdiZjFcdTcyZjhcdTc5YmJcdTZmMTNcdTc0MDZcdTY3NGVcdTkxY2Nc'@;
put 'dTljYTRcdTc5M2NcdTgzODlcdTgzNTRcdTU0MGZcdTY4MTdcdTRlM2RcdTUzODlcdTUyYjFcdTc4M2VcdTUzODZcdTUyMjlcdTUwODhcdTRmOGJcdTRmZDBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5Ml1bbV0uY2hhckNvZGVBdCgwKSYm'@;
put 'KGVlW2JbMTkyXVttXV09NDkxNTIrbSxSWzQ5MTUyK21dPWJbMTkyXVttXSk7Zm9yKGJbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4MTM4XHU5NGZlXHU2MDRiXHU3MGJj'@;
put 'XHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2XHU2NTk5XHU1MjE3XHU4OGMyXHU3'@;
put 'MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5Njc1XHU1Y2FkXHU5ODg2XHU1M2U2'@;
put 'XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTkzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTNdW21dLmNo'@;
put 'YXJDb2RlQXQoMCkmJihlZVtiWzE5M11bbV1dPTQ5NDA4K20sUls0OTQwOCttXT1iWzE5M11bbV0pO2ZvcihiWzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5'@;
put 'M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1'@;
put 'NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1Nzgw'@;
put 'MVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzE5NF0ubGVuZ3RoOysrbSk2NTUzMyE9'@;
put 'PWJbMTk0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTRdW21dXT00OTY2NCttLFJbNDk2NjQrbV09YlsxOTRdW21dKTtmb3IoYlsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjMjlcdTgyOTJcdTgzMmJcdTc2ZjJcdTZjMTNcdTVmZDlcdTgzYmRcdTczMmJcdTgzMDVcdTk1MWFcdTZiZGJcdTc3ZGJcdTk0YzZcdTUzNmZcdTgzMDJcdTUxOTJcdTVlM2RcdThj'@;
put 'OGNcdThkMzhcdTRlNDhcdTczYWJcdTY3OWFcdTY4ODVcdTkxNzZcdTk3MDlcdTcxNjRcdTZjYTFcdTc3MDlcdTVhOTJcdTk1NDFcdTZiY2ZcdTdmOGVcdTY2MjdcdTViZDBcdTU5YjlcdTVhOWFcdTk1ZThcdTk1ZjdcdTRlZWNcdTg0MGNcdTg0OTlcdTZhYWNcdTc2ZGZcdTk1MzBcdTczMWJc'@;
put 'dTY4YTZcdTViNWZcdTc3MmZcdTkxOWFcdTk3NjFcdTdjZGNcdThmZjdcdThjMWNcdTVmMjVcdTdjNzNcdTc5ZDhcdTg5YzVcdTZjY2NcdTg3MWNcdTViYzZcdTVlNDJcdTY4YzlcdTc3MjBcdTdlZjVcdTUxOTVcdTUxNGRcdTUyYzlcdTVhMjlcdTdmMDVcdTk3NjJcdTgyZDdcdTYzY2ZcdTc3'@;
put 'ODRcdTg1ZDBcdTc5ZDJcdTZlM2FcdTVlOTlcdTU5OTlcdTg1MTFcdTcwNmRcdTZjMTFcdTYyYmZcdTc2YmZcdTY1NGZcdTYwYWZcdTk1ZmRcdTY2MGVcdTg3OWZcdTllMjNcdTk0ZWRcdTU0MGRcdTU0N2RcdThjMmNcdTY0NzhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOTVdLmxlbmd0'@;
put 'aDsrK20pNjU1MzMhPT1iWzE5NV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk1XVttXV09NDk5MjArbSxSWzQ5OTIwK21dPWJbMTk1XVttXSk7Zm9yKGJbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2Y2FiXHU2ZjIwXHU1YmRlXHU5'@;
put 'NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFjXHU3ZWIzXHU2YzE2XHU0ZTQz'@;
put 'XHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1MzNmXHU4MTdiXHU5MDA2XHU2'@;
put 'ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20h'@;
put 'PWJbMTk2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5Nl1bbV1dPTUwMTc2K20sUls1MDE3NittXT1iWzE5Nl1bbV0pO2ZvcihiWzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1'@;
put 'NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQz'@;
put 'ZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1'@;
put 'NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3Bs'@;
put 'aXQoIiIpLG09MDttIT1iWzE5N10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMTk3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsxOTddW21dXT01MDQzMittLFJbNTA0MzIrbV09YlsxOTddW21dKTtmb3IoYlsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1NjRcdTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZc'@;
put 'dTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVlNzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTli'@;
put 'NDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRcdTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJc'@;
put 'dTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYz'@;
put 'OTBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsxOThdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzE5OF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMTk4XVttXV09NTA2ODgrbSxSWzUwNjg4K21dPWJbMTk4XVttXSk7Zm9yKGJbMTk5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3Yjdl'@;
put 'XHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2'@;
put 'ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUy'@;
put 'XHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1'@;
put 'YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMTk5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsxOTldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzE5OV1bbV1dPTUwOTQ0K20sUls1MDk0NCttXT1iWzE5OV1bbV0pO2ZvcihiWzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThh'@;
put 'N1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJhY1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1'@;
put 'OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2Vk'@;
put 'Mlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTExMlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1'@;
put 'OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjAwXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDBdW21dXT01MTIwMCttLFJbNTEyMDArbV09YlsyMDBdW21dKTtmb3IoYlsyMDFdPSJcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRl'@;
put 'MjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJcdTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJc'@;
put 'dTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZjNTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdl'@;
put 'Y2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZcdTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVc'@;
put 'dTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdlZjNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwMV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjAxXVttXV09NTE0NTYrbSxSWzUxNDU2K21dPWJbMjAxXVttXSk7Zm9y'@;
put 'KGJbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzAxXHU3NmRiXHU1'@;
put 'MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNiXHU1ZjBmXHU3OTNh'@;
put 'XHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1Yjg4XHU1YmZmXHU2'@;
put 'Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIwXHU1YzVlXHU2NzJm'@;
put 'XHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjAyXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwMl1bbV1dPTUxNzEyK20sUls1MTcxMittXT1i'@;
put 'WzIwMl1bbV0pO2ZvcihiWzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1NjgxM1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAx'@;
put 'ZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1'@;
put 'N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJjOVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1Njhh'@;
put 'ZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwM10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjAzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDNdW21dXT01MTk2OCtt'@;
put 'LFJbNTE5NjgrbV09YlsyMDNdW21dKTtmb3IoYlsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdTczNmRcdTYzMWVcdThlNGJcdThlMGZcdTgwY2VcdTgyZDRcdTYyYWNcdTUzZjBcdTZjZjBcdTkxNWVcdTU5MmFcdTYwMDFcdTZjNzBcdTU3NGRcdTY0NGFcdThkMmFcdTc2MmJcdTZlZTlcdTU3NWJcdTZhODBcdTc1ZjBcdTZmNmRcdThjMmRcdThjMDhcdTU3NjZcdTZi'@;
put 'ZWZcdTg4OTJcdTc4YjNcdTYzYTJcdTUzZjlcdTcwYWRcdTZjNjRcdTU4NThcdTY0MmFcdTU4MDJcdTY4ZTBcdTgxOWJcdTU1MTBcdTdjZDZcdTUwMThcdThlYmFcdTZkY2NcdThkOWZcdTcwZWJcdTYzOGZcdTZkOWJcdTZlZDRcdTdlZTZcdTg0MDRcdTY4NDNcdTkwMDNcdTZkZDhcdTk2NzZc'@;
put 'dThiYThcdTU5NTdcdTcyNzlcdTg1ZTRcdTgxN2VcdTc1YmNcdThhOGFcdTY4YWZcdTUyNTRcdThlMjJcdTk1MTFcdTYzZDBcdTk4OThcdThlNDRcdTU1N2NcdTRmNTNcdTY2ZmZcdTU2OGZcdTYwZDVcdTZkOTVcdTUyNDNcdTVjNDlcdTU5MjlcdTZkZmJcdTU4NmJcdTc1MzBcdTc1MWNcdTYw'@;
put 'NmNcdTgyMTRcdTgxNDZcdTYzMTFcdTY3NjFcdThmZTJcdTc3M2FcdThkZjNcdThkMzRcdTk0YzFcdTVlMTZcdTUzODVcdTU0MmNcdTcwYzNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIwNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA0'@;
put 'XVttXV09NTIyMjQrbSxSWzUyMjI0K21dPWJbMjA0XVttXSk7Zm9yKGJbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5'@;
put 'MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQw'@;
put 'XHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2'@;
put 'MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMDVdW21dLmNoYXJDb2RlQXQo'@;
put 'MCkmJihlZVtiWzIwNV1bbV1dPTUyNDgwK20sUls1MjQ4MCttXT1iWzIwNV1bbV0pO2ZvcihiWzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NWRjZFx1NWZhZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1'@;
put 'NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5'@;
put 'ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRhOFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1'@;
put 'OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIwNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA2XVtt'@;
put 'XS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDZdW21dXT01MjczNittLFJbNTI3MzYrbV09YlsyMDZdW21dKTtmb3IoYlsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMDBcdTYwNmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNc'@;
put 'dTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZcdTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgy'@;
put 'MzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgxN2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZc'@;
put 'dTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0MjdcdTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMDddLmxlbmd0aDsrK20pNjU1'@;
put 'MzMhPT1iWzIwN11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjA3XVttXV09NTI5OTIrbSxSWzUyOTkyK21dPWJbMjA3XVttXSk7Zm9yKGJbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFhXHU2NTlj'@;
put 'XHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1MjExXHU1'@;
put 'NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBjXHU5NzAw'@;
put 'XHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjA4XS5s'@;
put 'ZW5ndGg7KyttKTY1NTMzIT09YlsyMDhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIwOF1bbV1dPTUzMjQ4K20sUls1MzI0OCttXT1iWzIwOF1bbV0pO2ZvcihiWzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJl'@;
put 'Mlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1'@;
put 'OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVmNlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEz'@;
put 'MFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLG09'@;
put 'MDttIT1iWzIwOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjA5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMDldW21dXT01MzUwNCttLFJbNTM1MDQrbV09YlsyMDldW21dKTtmb3IoYlsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0NDdcdTVjMjdcdTkwNjVcdTdhOTFcdThjMjNcdTU5ZGFcdTU0YWNcdTgyMDBcdTgzNmZcdTg5ODFcdTgwMDBcdTY5MzBcdTU2'@;
put 'NGVcdTgwMzZcdTcyMzdcdTkxY2VcdTUxYjZcdTRlNWZcdTk4NzVcdTYzOTZcdTRlMWFcdTUzZjZcdTY2ZjNcdTgxNGJcdTU5MWNcdTZkYjJcdTRlMDBcdTU4ZjlcdTUzM2JcdTYzZDZcdTk0ZjFcdTRmOWRcdTRmMGFcdTg4NjNcdTk4OTBcdTU5MzdcdTkwNTdcdTc5ZmJcdTRlZWFcdTgwZjBc'@;
put 'dTc1OTFcdTZjODJcdTViOWNcdTU5ZThcdTVmNWRcdTY5MDVcdTg2ODFcdTUwMWFcdTVkZjJcdTRlNTlcdTc3ZTNcdTRlZTVcdTgyN2FcdTYyOTFcdTY2MTNcdTkwOTFcdTVjNzlcdTRlYmZcdTVmNzlcdTgxYzZcdTkwMzhcdTgwODRcdTc1YWJcdTRlYTZcdTg4ZDRcdTYxMGZcdTZiYzVcdTVm'@;
put 'YzZcdTRlNDlcdTc2Y2FcdTZlYTJcdThiZTNcdThiYWVcdThjMGFcdThiZDFcdTVmMDJcdTdmZmNcdTdmY2NcdTdlY2VcdTgzMzVcdTgzNmJcdTU2ZTBcdTZiYjdcdTk3ZjNcdTk2MzRcdTU5ZmJcdTU0MWZcdTk0ZjZcdTZkZWJcdTViYzVcdTk5NmVcdTVjMzlcdTVmMTVcdTk2OTBcdWZmZmQi'@;
put 'LnNwbGl0KCIiKSxtPTA7bSE9YlsyMTBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxMF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjEwXVttXV09NTM3NjArbSxSWzUzNzYwK21dPWJbMjEwXVttXSk7Zm9yKGJbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1XHU4'@;
put 'MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2MGEw'@;
put 'XHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRlXHU5'@;
put 'MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4MGIy'@;
put 'XHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjExXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxMV1bbV1dPTU0MDE2K20sUls1NDAxNittXT1iWzIxMV1bbV0pO2ZvcihiWzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1'@;
put 'NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYw'@;
put 'NVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1'@;
put 'ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTVi'@;
put 'M1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxMl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjEyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTJdW21dXT01NDI3MittLFJbNTQyNzIrbV09YlsyMTJdW21dKTtmb3IoYlsyMTNdPSJcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0ZTFcdTk1ZjhcdTc3MjhcdTY4MDVcdTY5YThcdTU0OGJc'@;
put 'dTRlNGRcdTcwYjhcdThiYzhcdTY0NThcdTY1OGJcdTViODVcdTdhODRcdTUwM2FcdTViZThcdTc3YmJcdTZiZTFcdThhNzlcdTdjOThcdTZjYmVcdTc2Y2ZcdTY1YTlcdThmOTdcdTVkMmRcdTVjNTVcdTg2MzhcdTY4MDhcdTUzNjBcdTYyMThcdTdhZDlcdTZlNWJcdTdlZmRcdTZhMWZcdTdh'@;
put 'ZTBcdTVmNzBcdTZmMzNcdTVmMjBcdTYzOGNcdTZkYThcdTY3NTZcdTRlMDhcdTVlMTBcdThkMjZcdTRlZDdcdTgwYzBcdTc2MzRcdTk2OWNcdTYyZGJcdTY2MmRcdTYyN2VcdTZjYmNcdThkNzVcdTcxNjdcdTdmNjlcdTUxNDZcdTgwODdcdTUzZWNcdTkwNmVcdTYyOThcdTU0ZjJcdTg2ZjBc'@;
put 'dThmOTlcdTgwMDVcdTk1MTdcdTg1MTdcdThmZDlcdTZkNTlcdTczY2RcdTY1OWZcdTc3MWZcdTc1MDRcdTc4MjdcdTgxZmJcdThkMWVcdTk0ODhcdTRmYTZcdTY3OTVcdTc1YjlcdThiY2FcdTk3MDdcdTYzMmZcdTk1NDdcdTk2MzVcdTg0YjhcdTYzMjNcdTc3NDFcdTVmODFcdTcyZjBcdTRl'@;
put 'ODlcdTYwMTRcdTY1NzRcdTYyZWZcdTZiNjNcdTY1M2ZcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxM11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjEzXVttXV09NTQ1MjgrbSxSWzU0NTI4K21dPWJbMjEzXVttXSk7Zm9yKGJbMjE0XT0i'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMx'@;
put 'XHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2'@;
put 'M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFm'@;
put 'XHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0'@;
put 'ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTRdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIxNF1bbV1dPTU0Nzg0K20sUls1NDc4NCttXT1iWzIxNF1bbV0p'@;
put 'O2ZvcihiWzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NGY0Zlx1NmNl'@;
put 'OFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1'@;
put 'NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUy'@;
put 'YVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1'@;
put 'NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxNV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMTVdW21dXT01NTA0MCttLFJbNTUwNDAr'@;
put 'bV09YlsyMTVdW21dKTtmb3IoYlsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdTRlOGRcdTRlMGNcdTUxNDBcdTRlMTBcdTVlZmZcdTUzNDVcdTRlMTVcdTRlOThcdTRlMWVcdTliMzJcdTViNmNcdTU2NjlcdTRlMjhcdTc5YmFcdTRlM2ZcdTUzMTVcdTRlNDdcdTU5MmRcdTcyM2JcdTUzNmVcdTZjMTBcdTU2ZGZcdTgwZTRcdTk5OTdcdTZiZDNcdTc3N2VcdTlmMTdc'@;
put 'dTRlMzZcdTRlOWZcdTlmMTBcdTRlNWNcdTRlNjlcdTRlOTNcdTgyODhcdTViNWJcdTU1NmNcdTU2MGZcdTRlYzRcdTUzOGRcdTUzOWRcdTUzYTNcdTUzYTVcdTUzYWVcdTk3NjVcdThkNWRcdTUzMWFcdTUzZjVcdTUzMjZcdTUzMmVcdTUzM2VcdThkNWNcdTUzNjZcdTUzNjNcdTUyMDJcdTUy'@;
put 'MDhcdTUyMGVcdTUyMmRcdTUyMzNcdTUyM2ZcdTUyNDBcdTUyNGNcdTUyNWVcdTUyNjFcdTUyNWNcdTg0YWZcdTUyN2RcdTUyODJcdTUyODFcdTUyOTBcdTUyOTNcdTUxODJcdTdmNTRcdTRlYmJcdTRlYzNcdTRlYzlcdTRlYzJcdTRlZThcdTRlZTFcdTRlZWJcdTRlZGVcdTRmMWJcdTRlZjNc'@;
put 'dTRmMjJcdTRmNjRcdTRlZjVcdTRmMjVcdTRmMjdcdTRmMDlcdTRmMmJcdTRmNWVcdTRmNjdcdTY1MzhcdTRmNWFcdTRmNWRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTZdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIxNl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE2XVttXV09NTUy'@;
put 'OTYrbSxSWzU1Mjk2K21dPWJbMjE2XVttXSk7Zm9yKGJbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRm'@;
put 'XHU0ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1'@;
put 'MGVjXHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2'@;
put 'XHU0ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjE3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMTddW21dLmNoYXJDb2RlQXQoMCkmJihlZVti'@;
put 'WzIxN11bbV1dPTU1NTUyK20sUls1NTU1MittXT1iWzIxN11bbV0pO2ZvcihiWzIxOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJk'@;
put 'Y1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1'@;
put 'OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2'@;
put 'Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIxOF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjE4XVttXS5jaGFyQ29k'@;
put 'ZUF0KDApJiYoZWVbYlsyMThdW21dXT01NTgwOCttLFJbNTU4MDgrbV09YlsyMThdW21dKTtmb3IoYlsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVcdTkx'@;
put 'MjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3NGNc'@;
put 'dTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRcdTU3'@;
put 'YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGRcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMTldLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIx'@;
put 'OV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjE5XVttXV09NTYwNjQrbSxSWzU2MDY0K21dPWJbMjE5XVttXSk7Zm9yKGJbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4'@;
put 'Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFh'@;
put 'XHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4'@;
put 'MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjIwXS5sZW5ndGg7Kytt'@;
put 'KTY1NTMzIT09YlsyMjBdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyMF1bbV1dPTU2MzIwK20sUls1NjMyMCttXT1iWzIyMF1bbV0pO2ZvcihiWzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1'@;
put 'ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNiY1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQw'@;
put 'Zlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1'@;
put 'ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRhMVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIy'@;
put 'MV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjIxXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjFdW21dXT01NjU3NittLFJbNTY1NzYrbV09YlsyMjFdW21dKTtmb3IoYlsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2Jc'@;
put 'dTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5'@;
put 'NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFc'@;
put 'dTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTZcdWZmZmQiLnNwbGl0KCIi'@;
put 'KSxtPTA7bSE9YlsyMjJdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyMl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjIyXVttXV09NTY4MzIrbSxSWzU2ODMyK21dPWJbMjIyXVttXSk7Zm9yKGJbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1'@;
put 'XHU2NTJlXHU1ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1'@;
put 'NDc3XHU1NDcxXHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5'@;
put 'XHU1NGFhXHU1NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVm'@;
put 'ZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjIzXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjNdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyM11bbV1dPTU3MDg4K20sUls1NzA4OCttXT1iWzIyM11bbV0pO2ZvcihiWzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVk'@;
put 'Mlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVkZlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1'@;
put 'NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0'@;
put 'Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZkNFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1'@;
put 'NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyNF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI0XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjRdW21dXT01NzM0NCttLFJbNTczNDQrbV09YlsyMjRdW21dKTtmb3IoYlsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFcdTVjOGNcdTVj'@;
put 'N2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVkMjdcdTVkMjZc'@;
put 'dTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdcdTVmODJcdTVm'@;
put 'ODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcyZjRcdTcyZjdc'@;
put 'dTczMDFcdTcyZjNcdTczMDNcdTcyZmFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjVdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyNV1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI1XVttXV09NTc2MDArbSxSWzU3NjAwK21dPWJbMjI1XVttXSk7Zm9yKGJbMjI2XT0iXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3'@;
put 'MzFlXHU3MzFkXHU3MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZj'@;
put 'XHU5OTc0XHU5OTc3XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1'@;
put 'ZWU4XHU1ZWVhXHU4MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNm'@;
put 'XHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI2XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjZdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyNl1bbV1dPTU3ODU2K20sUls1Nzg1NittXT1iWzIyNl1bbV0pO2ZvcihiWzIy'@;
put 'N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjA2YVx1NjA3ZFx1NjA5Nlx1'@;
put 'NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBkOFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFh'@;
put 'N1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1'@;
put 'OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNl'@;
put 'MFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIyN10ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjI3XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMjddW21dXT01ODExMittLFJbNTgxMTIrbV09YlsyMjdd'@;
put 'W21dKTtmb3IoYlsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMzlc'@;
put 'dTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2NcdTZk'@;
put 'NjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZlNDRc'@;
put 'dTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRcdTZm'@;
put 'MmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDFcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMjhdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIyOF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjI4XVttXV09NTgzNjgrbSxSWzU4'@;
put 'MzY4K21dPWJbMjI4XVttXSk7Zm9yKGJbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHU2ZmM5XHU2ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1'@;
put 'YmU0XHU1YmVlXHU4OTMwXHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJm'@;
put 'XHU5MDQ0XHU5MDUxXHU5MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1'@;
put 'ZjJhXHU1ZjI5XHU1ZjJkXHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjI5XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMjldW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIyOV1bbV1d'@;
put 'PTU4NjI0K20sUls1ODYyNCttXT1iWzIyOV1bbV0pO2ZvcihiWzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlkN1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1'@;
put 'NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIx'@;
put 'Nlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1'@;
put 'OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzMF0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjMwXVttXS5jaGFyQ29kZUF0KDApJiYo'@;
put 'ZWVbYlsyMzBdW21dXT01ODg4MCttLFJbNTg4ODArbV09YlsyMzBdW21dKTtmb3IoYlsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlYWRcdTdlYjBcdTdlYmVcdTdlYzBcdTdlYzFcdTdlYzJcdTdlYzlcdTdlY2JcdTdlY2NcdTdlZDBcdTdlZDRcdTdlZDdcdTdlZGJcdTdlZTBcdTdlZTFcdTdlZThcdTdlZWJcdTdlZWVcdTdlZWZcdTdlZjFcdTdlZjJcdTdmMGRc'@;
put 'dTdlZjZcdTdlZmFcdTdlZmJcdTdlZmVcdTdmMDFcdTdmMDJcdTdmMDNcdTdmMDdcdTdmMDhcdTdmMGJcdTdmMGNcdTdmMGZcdTdmMTFcdTdmMTJcdTdmMTdcdTdmMTlcdTdmMWNcdTdmMWJcdTdmMWZcdTdmMjFcdTdmMjJcdTdmMjNcdTdmMjRcdTdmMjVcdTdmMjZcdTdmMjdcdTdmMmFcdTdm'@;
put 'MmJcdTdmMmNcdTdmMmRcdTdmMmZcdTdmMzBcdTdmMzFcdTdmMzJcdTdmMzNcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVc'@;
put 'dTczZDlcdTk4N2NcdTc0MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmNcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzFdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzMV1bbV0uY2hh'@;
put 'ckNvZGVBdCgwKSYmKGVlW2JbMjMxXVttXV09NTkxMzYrbSxSWzU5MTM2K21dPWJbMjMxXVttXSk7Zm9yKGJbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkw'@;
put 'XHU3NGE3XHU3NGQyXHU3NGJhXHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2'@;
put 'ODBhXHU2N2U5XHU2N2IwXHU2ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2'@;
put 'XHU2ODQxXHU2ODY3XHU2ODQwXHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjMyXS5sZW5ndGg7KyttKTY1NTMzIT09'@;
put 'YlsyMzJdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzMl1bbV1dPTU5MzkyK20sUls1OTM5MittXT1iWzIzMl1bbV0pO2ZvcihiWzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1Njkz'@;
put 'NFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1'@;
put 'NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5'@;
put 'YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzM10ubGVuZ3Ro'@;
put 'OysrbSk2NTUzMyE9PWJbMjMzXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzNdW21dXT01OTY0OCttLFJbNTk2NDgrbV09YlsyMzNdW21dKTtmb3IoYlsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgx'@;
put 'ZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFc'@;
put 'dTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVcdTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThk'@;
put 'NTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcyOWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjBcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9'@;
put 'YlsyMzRdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzNF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM0XVttXV09NTk5MDQrbSxSWzU5OTA0K21dPWJbMjM0XVttXSk7Zm9yKGJbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2'@;
put 'YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3'@;
put 'XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4'@;
put 'MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxp'@;
put 'dCgiIiksbT0wO20hPWJbMjM1XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzVdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzNV1bbV1dPTYwMTYwK20sUls2MDE2MCttXT1iWzIzNV1bbV0pO2ZvcihiWzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1'@;
put 'OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBl'@;
put 'OFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1'@;
put 'NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZk'@;
put 'MFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzNl0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM2XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzZdW21dXT02MDQxNittLFJbNjA0MTYrbV09YlsyMzZdW21dKTtmb3IoYlsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwM2NcdTYwNWRcdTYwNWFcdTYwNjdcdTYwNDFcdTYwNTlcdTYwNjNcdTYwYWJcdTYxMDZc'@;
put 'dTYxMGRcdTYxNWRcdTYxYTlcdTYxOWRcdTYxY2JcdTYxZDFcdTYyMDZcdTgwODBcdTgwN2ZcdTZjOTNcdTZjZjZcdTZkZmNcdTc3ZjZcdTc3ZjhcdTc4MDBcdTc4MDlcdTc4MTdcdTc4MThcdTc4MTFcdTY1YWJcdTc4MmRcdTc4MWNcdTc4MWRcdTc4MzlcdTc4M2FcdTc4M2JcdTc4MWZcdTc4'@;
put 'M2NcdTc4MjVcdTc4MmNcdTc4MjNcdTc4MjlcdTc4NGVcdTc4NmRcdTc4NTZcdTc4NTdcdTc4MjZcdTc4NTBcdTc4NDdcdTc4NGNcdTc4NmFcdTc4OWJcdTc4OTNcdTc4OWFcdTc4ODdcdTc4OWNcdTc4YTFcdTc4YTNcdTc4YjJcdTc4YjlcdTc4YTVcdTc4ZDRcdTc4ZDlcdTc4YzlcdTc4ZWNc'@;
put 'dTc4ZjJcdTc5MDVcdTc4ZjRcdTc5MTNcdTc5MjRcdTc5MWVcdTc5MzRcdTlmOWJcdTllZjlcdTllZmJcdTllZmNcdTc2ZjFcdTc3MDRcdTc3MGRcdTc2ZjlcdTc3MDdcdTc3MDhcdTc3MWFcdTc3MjJcdTc3MTlcdTc3MmRcdTc3MjZcdTc3MzVcdTc3MzhcdTc3NTBcdTc3NTFcdTc3NDdcdTc3'@;
put 'NDNcdTc3NWFcdTc3NjhcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyMzddLmxlbmd0aDsrK20pNjU1MzMhPT1iWzIzN11bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjM3XVttXV09NjA2NzIrbSxSWzYwNjcyK21dPWJbMjM3XVttXSk7Zm9yKGJbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3Nzhj'@;
put 'XHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4'@;
put 'ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3'@;
put 'XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJjXHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5'@;
put 'NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5NGVhXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjM4XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyMzhdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzIzOF1bbV1dPTYwOTI4K20sUls2MDkyOCttXT1iWzIzOF1bbV0pO2ZvcihiWzIzOV09Ilx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRm'@;
put 'M1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1'@;
put 'OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1'@;
put 'OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1'@;
put 'NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzIzOV0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjM5XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyMzldW21dXT02MTE4NCttLFJbNjExODQrbV09YlsyMzldW21dKTtmb3Io'@;
put 'YlsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMzlcdTdhMzdcdTdh'@;
put 'NTFcdTllY2ZcdTk5YTVcdTdhNzBcdTc2ODhcdTc2OGVcdTc2OTNcdTc2OTlcdTc2YTRcdTc0ZGVcdTc0ZTBcdTc1MmNcdTllMjBcdTllMjJcdTllMjhcdTllMjlcdTllMmFcdTllMmJcdTllMmNcdTllMzJcdTllMzFcdTllMzZcdTllMzhcdTllMzdcdTllMzlcdTllM2FcdTllM2VcdTllNDFc'@;
put 'dTllNDJcdTllNDRcdTllNDZcdTllNDdcdTllNDhcdTllNDlcdTllNGJcdTllNGNcdTllNGVcdTllNTFcdTllNTVcdTllNTdcdTllNWFcdTllNWJcdTllNWNcdTllNWVcdTllNjNcdTllNjZcdTllNjdcdTllNjhcdTllNjlcdTllNmFcdTllNmJcdTllNmNcdTllNzFcdTllNmRcdTllNzNcdTc1'@;
put 'OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1ZmNcdTc1ZmZcdTc2MTBc'@;
put 'dTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTlcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDBdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0MF1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQwXVttXV09NjE0NDArbSxSWzYxNDQwK21dPWJb'@;
put 'MjQwXVttXSk7Zm9yKGJbMjQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3'@;
put 'NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQwXHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2'@;
put 'XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4'@;
put 'OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBi'@;
put 'XHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQxXS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDFdW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0MV1bbV1dPTYxNjk2K20s'@;
put 'Uls2MTY5NittXT1iWzI0MV1bbV0pO2ZvcihiWzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5'@;
put 'ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZjOVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1'@;
put 'ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3'@;
put 'MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0Ml0ubGVuZ3RoOysrbSk2NTUzMyE9PWJbMjQyXVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDJd'@;
put 'W21dXT02MTk1MittLFJbNjE5NTIrbV09YlsyNDJdW21dKTtmb3IoYlsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3YzZcdTg3ODhcdTg3ODVcdTg3YWRcdTg3OTdcdTg3ODNcdTg3YWJcdTg3ZTVcdTg3YWNcdTg3YjVcdTg3YjNcdTg3Y2JcdTg3ZDNcdTg3YmRcdTg3ZDFcdTg3YzBcdTg3Y2FcdTg3ZGJcdTg3ZWFcdTg3ZTBcdTg3ZWVcdTg4MTZcdTg4MTNcdTg3'@;
put 'ZmVcdTg4MGFcdTg4MWJcdTg4MjFcdTg4MzlcdTg4M2NcdTdmMzZcdTdmNDJcdTdmNDRcdTdmNDVcdTgyMTBcdTdhZmFcdTdhZmRcdTdiMDhcdTdiMDNcdTdiMDRcdTdiMTVcdTdiMGFcdTdiMmJcdTdiMGZcdTdiNDdcdTdiMzhcdTdiMmFcdTdiMTlcdTdiMmVcdTdiMzFcdTdiMjBcdTdiMjVc'@;
put 'dTdiMjRcdTdiMzNcdTdiM2VcdTdiMWVcdTdiNThcdTdiNWFcdTdiNDVcdTdiNzVcdTdiNGNcdTdiNWRcdTdiNjBcdTdiNmVcdTdiN2JcdTdiNjJcdTdiNzJcdTdiNzFcdTdiOTBcdTdiYTZcdTdiYTdcdTdiYjhcdTdiYWNcdTdiOWRcdTdiYThcdTdiODVcdTdiYWFcdTdiOWNcdTdiYTJcdTdi'@;
put 'YWJcdTdiYjRcdTdiZDFcdTdiYzFcdTdiY2NcdTdiZGRcdTdiZGFcdTdiZTVcdTdiZTZcdTdiZWFcdTdjMGNcdTdiZmVcdTdiZmNcdTdjMGZcdTdjMTZcdTdjMGJcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDNdLmxlbmd0aDsrK20pNjU1MzMhPT1iWzI0M11bbV0uY2hhckNvZGVBdCgw'@;
put 'KSYmKGVlW2JbMjQzXVttXV09NjIyMDgrbSxSWzYyMjA4K21dPWJbMjQzXVttXSk7Zm9yKGJbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4'@;
put 'MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3Yzll'@;
put 'XHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2MxXHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3'@;
put 'ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksbT0wO20hPWJbMjQ0XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDRdW21d'@;
put 'LmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0NF1bbV1dPTYyNDY0K20sUls2MjQ2NCttXT1iWzI0NF1bbV0pO2ZvcihiWzI0NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1'@;
put 'ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm'@;
put 'ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1'@;
put 'OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRm'@;
put 'OFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1'@;
put 'OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLG09MDttIT1iWzI0NV0ubGVuZ3RoOysrbSk2NTUz'@;
put 'MyE9PWJbMjQ1XVttXS5jaGFyQ29kZUF0KDApJiYoZWVbYlsyNDVdW21dXT02MjcyMCttLFJbNjI3MjArbV09YlsyNDVdW21dKTtmb3IoYlsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc'@;
put 'dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm'@;
put 'ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTVcdTg5ZWJcdTg5ZWZcdThhM2VcdThiMjZcdTk3NTNcdTk2ZTlcdTk2ZjNcdTk2ZWZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MGZcdTk3MGVcdTk3MmFcdTk3MmRcdTk3MzBc'@;
put 'dTk3M2VcdTlmODBcdTlmODNcdTlmODVcdTlmODZcdTlmODdcdTlmODhcdTlmODlcdTlmOGFcdTlmOGNcdTllZmVcdTlmMGJcdTlmMGRcdTk2YjlcdTk2YmNcdTk2YmRcdTk2Y2VcdTk2ZDJcdTc3YmZcdTk2ZTBcdTkyOGVcdTkyYWVcdTkyYzhcdTkzM2VcdTkzNmFcdTkzY2FcdTkzOGZcdTk0'@;
put 'M2VcdTk0NmJcdTljN2ZcdTljODJcdTljODVcdTljODZcdTljODdcdTljODhcdTdhMjNcdTljOGJcdTljOGVcdTljOTBcdTljOTFcdTljOTJcdTljOTRcdTljOTVcdTljOWFcdTljOWJcdTljOWVcdTljOWZcdTljYTBcdTljYTFcdTljYTJcdTljYTNcdTljYTVcdTljYTZcdTljYTdcdTljYThc'@;
put 'dTljYTlcdTljYWJcdTljYWRcdTljYWVcdTljYjBcdTljYjFcdTljYjJcdTljYjNcdTljYjRcdTljYjVcdTljYjZcdTljYjdcdTljYmFcdTljYmJcdTljYmNcdTljYmRcdTljYzRcdTljYzVcdTljYzZcdTljYzdcdTljY2FcdTljY2JcdWZmZmQiLnNwbGl0KCIiKSxtPTA7bSE9YlsyNDZdLmxl'@;
put 'bmd0aDsrK20pNjU1MzMhPT1iWzI0Nl1bbV0uY2hhckNvZGVBdCgwKSYmKGVlW2JbMjQ2XVttXV09NjI5NzYrbSxSWzYyOTc2K21dPWJbMjQ2XVttXSk7Zm9yKGJbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk'@;
put 'XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm'@;
put 'ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2Uy'@;
put 'XHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5'@;
put 'YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBkXHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4'@;
put 'XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksbT0w'@;
put 'O20hPWJbMjQ3XS5sZW5ndGg7KyttKTY1NTMzIT09YlsyNDddW21dLmNoYXJDb2RlQXQoMCkmJihlZVtiWzI0N11bbV1dPTYzMjMyK20sUls2MzIzMittXT1iWzI0N11bbV0pO3JldHVybntlbmM6ZWUsZGVjOlJ9fSgpLFNlWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgw'@;
put 'Mlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla'@;
put 'W1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4'@;
put 'ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUy'@;
put 'MjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIw'@;
put 'MThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2'@;
put 'ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsZWU9W10sYj17fSxtPTA7MjU2IT1tOysrbSk2NTUzMyE9PVIuY2hhckNvZGVBdChtKSYmKGJbUi5jaGFyQXQobSldPW0pLGVlW21dPVIuY2hhckF0'@;
put 'KG0pO3JldHVybntlbmM6YixkZWM6ZWV9fSgpLFNlWzEwMDc5XT1mdW5jdGlvbigpe2Zvcih2YXIgUj0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgx'@;
put 'ZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhl'@;
put 'N1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1'@;
put 'XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUy'@;
put 'MDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRj'@;
put 'XHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVsxMDA4'@;
put 'MV09ZnVuY3Rpb24oKXtmb3IodmFyIFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4'@;
put 'OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGViXHhlZFx4ZWNceGVlXHhlZlx4'@;
put 'ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBc'@;
put 'dTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTAx'@;
put 'MWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJk'@;
put 'YVx4YjhcdTAyZGRcdTAyZGJcdTAyYzciLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1cm57ZW5jOmIsZGVjOmVlfX0oKSxTZVsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFy'@;
put 'IFI9IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xN'@;
put 'Tk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5'@;
put 'Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0'@;
put 'XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRc'@;
put 'eGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLGVlPVtdLGI9e30sbT0wOzI1NiE9bTsrK20pNjU1MzMhPT1SLmNoYXJDb2RlQXQobSkmJihiW1IuY2hhckF0KG0pXT1tKSxlZVttXT1SLmNoYXJBdChtKTtyZXR1'@;
put 'cm57ZW5jOmIsZGVjOmVlfX0oKSwkZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSImJigkZS5leHBvcnRzPVNlKSxmdW5jdGlvbihSLGVlKXsidXNlIHN0cmljdCI7aWYodHlwZW9mIFNlPiJ1Iil7dmFyIGI9U2U7JGUuZXhwb3J0cyYmdHlwZW9mIERPX05PVF9F'@;
put 'WFBPUlRfQ09ERVBBR0U+InUiPyRlLmV4cG9ydHM9ZWUoYik6Ui5jcHRhYmxlPWVlKGIpfWVsc2UgU2U9ZWUoU2UpfSh0aGlzLGZ1bmN0aW9uKFIpeyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9ezEyMDA6InV0ZjE2bGUiLDEyMDE6InV0ZjE2YmUiLDEyZTM6InV0ZjMybGUiLDEyMDAxOiJ1dGYzMmJl'@;
put 'IiwxNjk2OToidXRmNjRsZSIsMjAxMjc6ImFzY2lpIiw2NWUzOiJ1dGY3Iiw2NTAwMToidXRmOCJ9LGI9Wzg3NCwxMjUwLDEyNTEsMTI1MiwxMjUzLDEyNTQsMTI1NSwxMjU2LDFlNF0sbT1bOTMyLDkzNiw5NDksOTUwXSxYPVs2NTAwMV0sdz17fSxBPXt9LEQ9e30sUD17fSxVPWZ1bmN0aW9u'@;
put 'KHgpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHgpfSxJPWZ1bmN0aW9uKHgpe3JldHVybiB4LmNoYXJDb2RlQXQoMCl9LEU9dHlwZW9mIEJ1ZmZlcjwidSIsaz1mdW5jdGlvbigpe307aWYoRSl7dmFyIEI9IUJ1ZmZlci5mcm9tO2lmKCFCKXRyeXtCdWZmZXIuZnJvbSgiZm9vIiwidXRm'@;
put 'OCIpfWNhdGNoe0I9ITB9az1CP2Z1bmN0aW9uKFMseCl7cmV0dXJuIHg/bmV3IEJ1ZmZlcihTLHgpOm5ldyBCdWZmZXIoUyl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oUyl7cmV0dXJuIG5ldyBCdWZm'@;
put 'ZXIoUyl9KTt2YXIgTj0xMDI0LFY9QnVmZmVyLmFsbG9jVW5zYWZlKE4pLFc9ZnVuY3Rpb24oeCl7dmFyIF89ZnVuY3Rpb24oeCl7Zm9yKHZhciBfPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNikscD0wO3A8NjU1MzY7KytwKV9bcF09MDtmb3IodmFyIEM9T2JqZWN0LmtleXMoeCksSz1DLmxl'@;
put 'bmd0aCxuZT0wLHVlPUNbbmVdO25lPEs7KytuZSkodWU9Q1tuZV0pJiYoX1t1ZS5jaGFyQ29kZUF0KDApXT14W3VlXSk7cmV0dXJuIF99KFJbeF0uZW5jKTtyZXR1cm4gZnVuY3Rpb24oQyxLKXt2YXIgdWUsbmU9Qy5sZW5ndGgsaGU9MCx4ZT0wLE9lPTAsSGU9MDtpZigic3RyaW5nIj09dHlw'@;
put 'ZW9mIEMpZm9yKHVlPUJ1ZmZlci5hbGxvY1Vuc2FmZShuZSksaGU9MDtoZTxuZTsrK2hlKXVlW2hlXT1fW0MuY2hhckNvZGVBdChoZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEMpKXtmb3IodWU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqbmUpLHhlPTAsaGU9MDtoZTxuZTsrK2hlKShPZT1D'@;
put 'W2hlXSk8MTI4P3VlW3hlKytdPV9bT2VdOk9lPDIyND8odWVbeGUrK109X1soKDMxJk9lKTw8NikrKDYzJkNbaGUrMV0pXSwrK2hlKTpPZTwyNDA/KHVlW3hlKytdPV9bKCgxNSZPZSk8PDEyKSsoKDYzJkNbaGUrMV0pPDw2KSsoNjMmQ1toZSsyXSldLGhlKz0yKTooSGU9KCg3Jk9lKTw8MTgp'@;
put 'KygoNjMmQ1toZSsxXSk8PDEyKSsoKDYzJkNbaGUrMl0pPDw2KSsoNjMmQ1toZSszXSksaGUrPTMsSGU8NjU1MzY/dWVbeGUrK109X1tIZV06KHVlW3hlKytdPV9bNTUyOTYrKChIZS09NjU1MzYpPj4xMCYxMDIzKV0sdWVbeGUrK109X1s1NjMyMCsoMTAyMyZIZSldKSk7dWU9dWUuc2xpY2Uo'@;
put 'MCx4ZSl9ZWxzZSBmb3IodWU9QnVmZmVyLmFsbG9jVW5zYWZlKG5lKSxoZT0wO2hlPG5lOysraGUpdWVbaGVdPV9bQ1toZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIEsmJiJidWYiIT09Sz8iYXJyIiE9PUs/dWUudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwodWUpOnVlfX0sej1m'@;
put 'dW5jdGlvbih4KXt2YXIgXz1SW3hdLmRlYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEM9MCxLPSIiO2ZvcihDPTA7QzxfLmxlbmd0aDsrK0MpaWYoSz1fW0NdKXt2YXIgbmU9Sy5jaGFyQ29kZUF0KDApO3BbMipDXT0yNTUmbmUscFsyKkMrMV09bmU+Pjh9cmV0dXJuIGZ1bmN0aW9u'@;
put 'KGhlKXt2YXIgeGU9aGUubGVuZ3RoLE9lPTAsSGU9MDtpZigyKnhlPk4mJihOPTIqeGUsVj1CdWZmZXIuYWxsb2NVbnNhZmUoTikpLEJ1ZmZlci5pc0J1ZmZlcihoZSkpZm9yKE9lPTA7T2U8eGU7T2UrKylWWzIqT2VdPXBbSGU9MipoZVtPZV1dLFZbMipPZSsxXT1wW0hlKzFdO2Vsc2UgaWYo'@;
put 'InN0cmluZyI9PXR5cGVvZiBoZSlmb3IoT2U9MDtPZTx4ZTtPZSsrKUhlPTIqaGUuY2hhckNvZGVBdChPZSksVlsyKk9lXT1wW0hlXSxWWzIqT2UrMV09cFtIZSsxXTtlbHNlIGZvcihPZT0wO09lPHhlO09lKyspVlsyKk9lXT1wW0hlPTIqaGVbT2VdXSxWWzIqT2UrMV09cFtIZSsxXTtyZXR1'@;
put 'cm4gVi5zbGljZSgwLDIqeGUpLnRvU3RyaW5nKCJ1Y3MyIil9fSxxPWZ1bmN0aW9uKHgpe2Zvcih2YXIgXz1SW3hdLmVuYyxwPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEM9MDtDPDEzMTA3MjsrK0MpcFtDXT0wO2Zvcih2YXIgSz1PYmplY3Qua2V5cyhfKSxuZT0wLHVlPUtbbmVdO25l'@;
put 'PEsubGVuZ3RoOysrbmUpaWYodWU9S1tuZV0pe3ZhciBoZT11ZS5jaGFyQ29kZUF0KDApO3BbMipoZV09MjU1Jl9bdWVdLHBbMipoZSsxXT1fW3VlXT4+OH1yZXR1cm4gZnVuY3Rpb24oT2UsSGUpe3ZhciBFZT1PZS5sZW5ndGgsTGU9QnVmZmVyLmFsbG9jVW5zYWZlKDIqRWUpLE5lPTAsS2U9'@;
put 'MCxVZT0wLFhlPTAsYXQ9MDtpZigic3RyaW5nIj09dHlwZW9mIE9lKXtmb3IoTmU9WGU9MDtOZTxFZTsrK05lKUtlPTIqT2UuY2hhckNvZGVBdChOZSksTGVbWGUrK109cFtLZSsxXXx8cFtLZV0scFtLZSsxXT4wJiYoTGVbWGUrK109cFtLZV0pO0xlPUxlLnNsaWNlKDAsWGUpfWVsc2UgaWYo'@;
put 'QnVmZmVyLmlzQnVmZmVyKE9lKSl7Zm9yKE5lPVhlPTA7TmU8RWU7KytOZSkoYXQ9T2VbTmVdKTwxMjg/S2U9YXQ6YXQ8MjI0PyhLZT0oKDMxJmF0KTw8NikrKDYzJk9lW05lKzFdKSwrK05lKTphdDwyNDA/KEtlPSgoMTUmYXQpPDwxMikrKCg2MyZPZVtOZSsxXSk8PDYpKyg2MyZPZVtOZSsy'@;
put 'XSksTmUrPTIpOihLZT0oKDcmYXQpPDwxOCkrKCg2MyZPZVtOZSsxXSk8PDEyKSsoKDYzJk9lW05lKzJdKTw8NikrKDYzJk9lW05lKzNdKSxOZSs9MyksS2U8NjU1MzY/KExlW1hlKytdPXBbMSsoS2UqPTIpXXx8cFtLZV0scFtLZSsxXT4wJiYoTGVbWGUrK109cFtLZV0pKTooTGVbWGUrK109'@;
put 'cFsxKyhLZT0yKig1NTI5NisoKFVlPUtlLTY1NTM2KT4+MTAmMTAyMykpKV18fHBbS2VdLHBbS2UrMV0+MCYmKExlW1hlKytdPXBbS2VdKSxMZVtYZSsrXT1wWzErKEtlPTIqKDU2MzIwKygxMDIzJlVlKSkpXXx8cFtLZV0scFtLZSsxXT4wJiYoTGVbWGUrK109cFtLZV0pKTtMZT1MZS5zbGlj'@;
put 'ZSgwLFhlKX1lbHNlIGZvcihOZT1YZT0wO05lPEVlO05lKyspS2U9MipPZVtOZV0uY2hhckNvZGVBdCgwKSxMZVtYZSsrXT1wW0tlKzFdfHxwW0tlXSxwW0tlKzFdPjAmJihMZVtYZSsrXT1wW0tlXSk7cmV0dXJuIEhlJiYiYnVmIiE9PUhlPyJhcnIiIT09SGU/TGUudG9TdHJpbmcoImJpbmFy'@;
put 'eSIpOltdLnNsaWNlLmNhbGwoTGUpOkxlfX0sUT1mdW5jdGlvbih4KXt2YXIgSyxfPVJbeF0uZGVjLHA9QnVmZmVyLmFsbG9jVW5zYWZlKDEzMTA3MiksQz0wLG5lPTAsdWU9MCxoZT0wO2ZvcihoZT0wO2hlPDY1NTM2OysraGUpcFsyKmhlXT0yNTUscFsyKmhlKzFdPTI1Mztmb3IoQz0wO0M8'@;
put 'Xy5sZW5ndGg7KytDKShLPV9bQ10pJiYobmU9Sy5jaGFyQ29kZUF0KDApLHBbdWU9MipDXT0yNTUmbmUscFt1ZSsxXT1uZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKE9lKXt2YXIgSGU9T2UubGVuZ3RoLEVlPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKkhlKSxMZT0wLE5lPTAsS2U9MDtpZihCdWZmZXIu'@;
put 'aXNCdWZmZXIoT2UpKWZvcihMZT0wO0xlPEhlO0xlKyspMjU1PT09cFtOZT0yKk9lW0xlXV0mJjI1Mz09PXBbTmUrMV0mJihOZT0yKigoT2VbTGVdPDw4KStPZVtMZSsxXSksKytMZSksRWVbS2UrK109cFtOZV0sRWVbS2UrK109cFtOZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgT2Up'@;
put 'Zm9yKExlPTA7TGU8SGU7TGUrKylOZT0yKk9lLmNoYXJDb2RlQXQoTGUpLDI1NT09PXBbTmVdJiYyNTM9PT1wW05lKzFdJiYoTmU9MiooKE9lLmNoYXJDb2RlQXQoTGUpPDw4KStPZS5jaGFyQ29kZUF0KExlKzEpKSwrK0xlKSxFZVtLZSsrXT1wW05lXSxFZVtLZSsrXT1wW05lKzFdO2Vsc2Ug'@;
put 'Zm9yKExlPTA7TGU8SGU7TGUrKykyNTU9PT1wW05lPTIqT2VbTGVdXSYmMjUzPT09cFtOZSsxXSYmKE5lPTIqKChPZVtMZV08PDgpK09lW0xlKzFdKSwrK0xlKSxFZVtLZSsrXT1wW05lXSxFZVtLZSsrXT1wW05lKzFdO3JldHVybiBFZS5zbGljZSgwLEtlKS50b1N0cmluZygidWNzMiIpfX07'@;
put 'd1s2NTAwMV09ZnVuY3Rpb24gUyh4KXtpZigic3RyaW5nIj09dHlwZW9mIHgpcmV0dXJuIFMoeC5zcGxpdCgiIikubWFwKEkpKTt2YXIgXz14Lmxlbmd0aCxwPTAsQz0wOzQqXz5OJiYoTj00Kl8sVj1CdWZmZXIuYWxsb2NVbnNhZmUoTikpO3ZhciBLPTA7Xz49MyYmMjM5PT14WzBdJiYxODc9'@;
put 'PXhbMV0mJjE5MT09eFsyXSYmKEs9Myk7Zm9yKHZhciBuZT0xLHVlPTAsaGU9MDtLPF87Sys9bmUpbmU9MSwoaGU9eFtLXSk8MTI4P3A9aGU6aGU8MjI0PyhwPTY0KigzMSZoZSkrKDYzJnhbSysxXSksbmU9Mik6aGU8MjQwPyhwPSgoMTUmaGUpPDwxMikrNjQqKDYzJnhbSysxXSkrKDYzJnhb'@;
put 'SysyXSksbmU9Myk6KHA9MjYyMTQ0Kig3JmhlKSsoKDYzJnhbSysxXSk8PDEyKSs2NCooNjMmeFtLKzJdKSsoNjMmeFtLKzNdKSxuZT00KSxwPDY1NTM2PyhWW3VlKytdPTI1NSZwLFZbdWUrK109cD4+OCk6KEM9NTUyOTYrKChwLT02NTUzNik+PjEwJjEwMjMpLHA9NTYzMjArKDEwMjMmcCks'@;
put 'Vlt1ZSsrXT0yNTUmQyxWW3VlKytdPUM+Pj44LFZbdWUrK109MjU1JnAsVlt1ZSsrXT1wPj4+OCYyNTUpO3JldHVybiBWLnNsaWNlKDAsdWUpLnRvU3RyaW5nKCJ1Y3MyIil9LEFbNjUwMDFdPWZ1bmN0aW9uKHgsXyl7aWYoRSYmQnVmZmVyLmlzQnVmZmVyKHgpKXJldHVybiBfJiYiYnVmIiE9'@;
put 'PV8/ImFyciIhPT1fP3gudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoeCk6eDt2YXIgcD14Lmxlbmd0aCxDPTAsSz0wLG5lPTAsdWU9InN0cmluZyI9PXR5cGVvZiB4OzQqcD5OJiYoTj00KnAsVj1CdWZmZXIuYWxsb2NVbnNhZmUoTikpO2Zvcih2YXIgaGU9MDtoZTxwOysraGUp'@;
put 'KEM9dWU/eC5jaGFyQ29kZUF0KGhlKTp4W2hlXS5jaGFyQ29kZUF0KDApKTw9MTI3P1ZbbmUrK109QzpDPD0yMDQ3PyhWW25lKytdPTE5MisoQz4+NiksVltuZSsrXT0xMjgrKDYzJkMpKTpDPj01NTI5NiYmQzw9NTczNDM/KEMtPTU1Mjk2LCsraGUsSz0odWU/eC5jaGFyQ29kZUF0KGhlKTp4'@;
put 'W2hlXS5jaGFyQ29kZUF0KDApKS01NjMyMCsoQzw8MTApLFZbbmUrK109MjQwKyhLPj4+MTgmNyksVltuZSsrXT0xNDQrKEs+Pj4xMiY2MyksVltuZSsrXT0xMjgrKEs+Pj42JjYzKSxWW25lKytdPTEyOCsoNjMmSykpOihWW25lKytdPTIyNCsoQz4+MTIpLFZbbmUrK109MTI4KyhDPj42JjYz'@;
put 'KSxWW25lKytdPTEyOCsoNjMmQykpO3JldHVybiBfJiYiYnVmIiE9PV8/ImFyciIhPT1fP1Yuc2xpY2UoMCxuZSkudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoViwwLG5lKTpWLnNsaWNlKDAsbmUpfX12YXIgdGU9ZnVuY3Rpb24oKXtpZihFKXtpZihEW2JbMF1dKXJldHVybjt2'@;
put 'YXIgeD0wLF89MDtmb3IoeD0wO3g8Yi5sZW5ndGg7Kyt4KVJbXz1iW3hdXSYmKERbX109eihfKSxQW19dPVcoXykpO2Zvcih4PTA7eDxtLmxlbmd0aDsrK3gpUltfPW1beF1dJiYoRFtfXT1RKF8pLFBbX109cShfKSk7Zm9yKHg9MDt4PFgubGVuZ3RoOysreCl3W189WFt4XV0mJihEW19dPXdb'@;
put 'X10pLEFbX10mJihQW19dPUFbX10pfX0sYWU9ZnVuY3Rpb24oUyx4KXtyZXR1cm4iIn0sc2U9ZnVuY3Rpb24oeCl7ZGVsZXRlIERbeF0sZGVsZXRlIFBbeF19LGxlPXtlbmNhY2hlOnRlLGRlY2FjaGU6ZnVuY3Rpb24oKXtpZihFKXtpZighRFtiWzBdXSlyZXR1cm47Yi5mb3JFYWNoKHNlKSxt'@;
put 'LmZvckVhY2goc2UpLFguZm9yRWFjaChzZSl9eT1hZSxMPTB9LHNiY3M6YixkYmNzOm19O3RlKCk7dmFyIGNlPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIix5PWFlLEw9MDtyZXR1cm4gUi51dGlscz17ZGVjb2RlOmZ1'@;
put 'bmN0aW9uIFMoeCxfKXt2YXIgcDtpZihwPURbeF0pcmV0dXJuIHAoXyk7aWYoInN0cmluZyI9PXR5cGVvZiBfKXJldHVybiBTKHgsXy5zcGxpdCgiIikubWFwKEkpKTt2YXIgTGUsQz1fLmxlbmd0aCxLPW5ldyBBcnJheShDKSxuZT0iIix1ZT0wLGhlPTAseGU9MSxPZT0wLEhlPTAsRWU9Ult4'@;
put 'XSxOZT0iIjtpZihFZSYmKExlPUVlLmRlYykpZm9yKGhlPTA7aGU8QztoZSs9eGUpe2lmKHhlPTIsKG5lPUxlWyhfW2hlXTw8OCkrX1toZSsxXV0pfHwoeGU9MSxuZT1MZVtfW2hlXV0pLCFuZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBjb2RlOiAiK19baGVdKyIgIitfW2hlK3hl'@;
put 'LTFdKyIgIitoZSsiICIreGUrIiAiK0xlW19baGVdXSk7S1tPZSsrXT1uZX1lbHNle2lmKCEoTmU9ZWVbeF0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK3gpO3N3aXRjaChOZSl7Y2FzZSJ1dGY4Ijpmb3IoQz49MyYmMjM5PT1fWzBdJiYxODc9PV9bMV0mJjE5MT09X1sy'@;
put 'XSYmKGhlPTMpO2hlPEM7aGUrPXhlKXhlPTEsX1toZV08MTI4P3VlPV9baGVdOl9baGVdPDIyND8odWU9NjQqKDMxJl9baGVdKSsoNjMmX1toZSsxXSkseGU9Mik6X1toZV08MjQwPyh1ZT0oKDE1Jl9baGVdKTw8MTIpKzY0Kig2MyZfW2hlKzFdKSsoNjMmX1toZSsyXSkseGU9Myk6KHVlPTI2'@;
put 'MjE0NCooNyZfW2hlXSkrKCg2MyZfW2hlKzFdKTw8MTIpKzY0Kig2MyZfW2hlKzJdKSsoNjMmX1toZSszXSkseGU9NCksdWU8NjU1MzZ8fChIZT01NTI5NisoKHVlLT02NTUzNik+PjEwJjEwMjMpLHVlPTU2MzIwKygxMDIzJnVlKSxLW09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoSGUpKSxL'@;
put 'W09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUodWUpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEUmJkJ1ZmZlci5pc0J1ZmZlcihfKSlyZXR1cm4gXy50b1N0cmluZyhOZSk7Zm9yKGhlPTA7aGU8QztoZSsrKUtbaGVdPVN0cmluZy5mcm9tQ2hhckNvZGUoX1toZV0pO09lPUM7YnJlYWs7Y2FzZSJ1'@;
put 'dGYxNmxlIjppZihDPj0yJiYyNTU9PV9bMF0mJjI1ND09X1sxXSYmKGhlPTIpLEUmJkJ1ZmZlci5pc0J1ZmZlcihfKSlyZXR1cm4gXy50b1N0cmluZyhOZSk7Zm9yKHhlPTI7aGUrMTxDO2hlKz14ZSlLW09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKF9baGUrMV08PDgpK19baGVdKTticmVh'@;
put 'aztjYXNlInV0ZjE2YmUiOmZvcihDPj0yJiYyNTQ9PV9bMF0mJjI1NT09X1sxXSYmKGhlPTIpLHhlPTI7aGUrMTxDO2hlKz14ZSlLW09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoKF9baGVdPDw4KStfW2hlKzFdKTticmVhaztjYXNlInV0ZjMybGUiOmZvcihDPj00JiYyNTU9PV9bMF0mJjI1'@;
put 'ND09X1sxXSYmMD09PV9bMl0mJjA9PT1fWzNdJiYoaGU9NCkseGU9NDtoZTxDO2hlKz14ZSkodWU9KF9baGUrM108PDI0KSsoX1toZSsyXTw8MTYpKyhfW2hlKzFdPDw4KStfW2hlXSk+NjU1MzU/KHVlLT02NTUzNixLW09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHVlPj4xMCYx'@;
put 'MDIzKSksS1tPZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU2MzIwKygxMDIzJnVlKSkpOktbT2UrK109U3RyaW5nLmZyb21DaGFyQ29kZSh1ZSk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3IoQz49NCYmMjU1PT1fWzNdJiYyNTQ9PV9bMl0mJjA9PT1fWzFdJiYwPT09X1swXSYmKGhlPTQpLHhl'@;
put 'PTQ7aGU8QztoZSs9eGUpKHVlPShfW2hlXTw8MjQpKyhfW2hlKzFdPDwxNikrKF9baGUrMl08PDgpK19baGUrM10pPjY1NTM1Pyh1ZS09NjU1MzYsS1tPZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2Kyh1ZT4+MTAmMTAyMykpLEtbT2UrK109U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMy'@;
put 'MCsoMTAyMyZ1ZSkpKTpLW09lKytdPVN0cmluZy5mcm9tQ2hhckNvZGUodWUpO2JyZWFrO2Nhc2UidXRmNyI6Zm9yKEM+PTQmJjQzPT1fWzBdJiY0Nz09X1sxXSYmMTE4PT1fWzJdJiYoQz49NSYmNTY9PV9bM10mJjQ1PT1fWzRdP2hlPTU6KDU2PT1fWzNdfHw1Nz09X1szXXx8NDM9PV9bM118'@;
put 'fDQ3PT1fWzNdKSYmKGhlPTQpKTtoZTxDO2hlKz14ZSlpZig0Mz09PV9baGVdKWlmKHhlPTEsNDUhPT1fW2hlKzFdKXtmb3IoO1N0cmluZy5mcm9tQ2hhckNvZGUoX1toZSt4ZV0pLm1hdGNoKC9bQS1aYS16MC05K1wvXS8pOyl4ZSsrO3ZhciBLZT0wOzQ1PT09X1toZSt4ZV0mJigrK3hlLEtl'@;
put 'PTEpO2Zvcih2YXIgVWU9W10sWGU9IiIsRGU9MCxSZT0wLGV0PTAsbnQ9MCxHZT0xO0dlPHhlLUtlJiYoRGU9Y2UuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKF9baGUrR2UrK10pKSxSZT1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoX1toZStHZSsrXSkpLFVlLnB1c2goRGU8'@;
put 'PDJ8UmU+PjQpLC0xIT09KGV0PWNlLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShfW2hlK0dlKytdKSkpJiYoVWUucHVzaCgoMTUmUmUpPDw0fGV0Pj4yKSwtMSE9PShudD1jZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoX1toZStHZSsrXSkpKSkpOyludDw2NCYmVWUucHVzaCgo'@;
put 'MyZldCk8PDZ8bnQpO2ZvcihYZT1TKDEyMDEsVWUpLEdlPTA7R2U8WGUubGVuZ3RoOysrR2UpS1tPZSsrXT1YZS5jaGFyQXQoR2UpfWVsc2UgeGU9MixLW09lKytdPSIrIjtlbHNlIHhlPTEsS1tPZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKF9baGVdKTticmVhaztkZWZhdWx0OnRocm93IG5l'@;
put 'dyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIreCsiICIrZWVbeF0pfX1yZXR1cm4gSy5zbGljZSgwLE9lKS5qb2luKCIiKX0sZW5jb2RlOmZ1bmN0aW9uIFMoeCxfLHApe2lmKHg9PT1MJiZ5KXJldHVybiB5KF8scCk7aWYoUFt4XSlyZXR1cm4oeT1QW0w9eF0pKF8scCk7RSYmQnVmZmVy'@;
put 'LmlzQnVmZmVyKF8pJiYoXz1fLnRvU3RyaW5nKCJ1dGY4IikpO3ZhciBIZSxDPV8ubGVuZ3RoLEs9RT9CdWZmZXIuYWxsb2NVbnNhZmUoNCpDKTpbXSxuZT0wLHVlPTAsaGU9MCx4ZT0wLE9lPVJbeF0sRWU9IiIsTGU9InN0cmluZyI9PXR5cGVvZiBfO2lmKE9lJiYoSGU9T2UuZW5jKSlmb3Io'@;
put 'dWU9MDt1ZTxDOysrdWUsKytoZSkobmU9SGVbTGU/Xy5jaGFyQXQodWUpOl9bdWVdXSk+MjU1PyhLW2hlXT1uZT4+OCxLWysraGVdPTI1NSZuZSk6S1toZV09MjU1Jm5lO2Vsc2V7aWYoIShFZT1lZVt4XSkpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgQ1A6ICIreCk7c3dpdGNoKEVl'@;
put 'KXtjYXNlInV0ZjgiOmlmKEUmJkxlKXtoZT0oSz1rKF8sRWUpKS5sZW5ndGg7YnJlYWt9Zm9yKHVlPTA7dWU8QzsrK3VlLCsraGUpKG5lPUxlP18uY2hhckNvZGVBdCh1ZSk6X1t1ZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9LW2hlXT1uZTpuZTw9MjA0Nz8oS1toZV09MTkyKyhuZT4+NiksS1sr'@;
put 'K2hlXT0xMjgrKDYzJm5lKSk6bmU+PTU1Mjk2JiZuZTw9NTczNDM/KG5lLT01NTI5Nix4ZT0oTGU/Xy5jaGFyQ29kZUF0KCsrdWUpOl9bKyt1ZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKG5lPDwxMCksS1toZV09MjQwKyh4ZT4+PjE4JjcpLEtbKytoZV09MTQ0Kyh4ZT4+PjEyJjYzKSxLWysr'@;
put 'aGVdPTEyOCsoeGU+Pj42JjYzKSxLWysraGVdPTEyOCsoNjMmeGUpKTooS1toZV09MjI0KyhuZT4+MTIpLEtbKytoZV09MTI4KyhuZT4+NiY2MyksS1srK2hlXT0xMjgrKDYzJm5lKSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoRSYmInN0cmluZyI9PXR5cGVvZiBfKXtoZT0oSz1rKF8sRWUpKS5s'@;
put 'ZW5ndGg7YnJlYWt9Zm9yKHVlPTA7dWU8QzsrK3VlLCsraGUpe2lmKCEoKG5lPUxlP18uY2hhckNvZGVBdCh1ZSk6X1t1ZV0uY2hhckNvZGVBdCgwKSk8PTEyNykpdGhyb3cgbmV3IEVycm9yKCJiYWQgYXNjaWkgIituZSk7S1toZV09bmV9YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihFJiYic3Ry'@;
put 'aW5nIj09dHlwZW9mIF8pe2hlPShLPWsoXyxFZSkpLmxlbmd0aDticmVha31mb3IodWU9MDt1ZTxDOysrdWUpbmU9TGU/Xy5jaGFyQ29kZUF0KHVlKTpfW3VlXS5jaGFyQ29kZUF0KDApLEtbaGUrK109MjU1Jm5lLEtbaGUrK109bmU+Pjg7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpmb3IodWU9MDt1'@;
put 'ZTxDOysrdWUpbmU9TGU/Xy5jaGFyQ29kZUF0KHVlKTpfW3VlXS5jaGFyQ29kZUF0KDApLEtbaGUrK109bmU+PjgsS1toZSsrXT0yNTUmbmU7YnJlYWs7Y2FzZSJ1dGYzMmxlIjpmb3IodWU9MDt1ZTxDOysrdWUpKG5lPUxlP18uY2hhckNvZGVBdCh1ZSk6X1t1ZV0uY2hhckNvZGVBdCgwKSk+'@;
put 'PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoX1srK3VlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksS1toZSsrXT0yNTUmbmUsS1toZSsrXT0yNTUmKG5lPj49OCksS1toZSsrXT0yNTUmKG5lPj49OCksS1toZSsrXT0yNTUmKG5lPj49OCk7YnJlYWs7Y2FzZSJ1'@;
put 'dGYzMmJlIjpmb3IodWU9MDt1ZTxDOysrdWUpKG5lPUxlP18uY2hhckNvZGVBdCh1ZSk6X1t1ZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZuZTw9NTczNDMmJihuZT02NTUzNisobmUtNTUyOTY8PDEwKSsoX1srK3VlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSksS1toZSszXT0yNTUmbmUsS1to'@;
put 'ZSsyXT0yNTUmKG5lPj49OCksS1toZSsxXT0yNTUmKG5lPj49OCksS1toZV09MjU1JihuZT4+PTgpLGhlKz00O2JyZWFrO2Nhc2UidXRmNyI6Zm9yKHVlPTA7dWU8Qzt1ZSsrKXt2YXIgTmU9TGU/Xy5jaGFyQXQodWUpOl9bdWVdLmNoYXJBdCgwKTtpZigiKyIhPT1OZSlpZigiQUJDREVGR0hJ'@;
put 'SktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknKCksLS4vOj8iLmluZGV4T2YoTmUpPi0xKUtbaGUrK109TmUuY2hhckNvZGVBdCgwKTtlbHNle3ZhciBLZT1TKDEyMDEsTmUpO0tbaGUrK109NDMsS1toZSsrXT1jZS5jaGFyQ29kZUF0KEtlWzBd'@;
put 'Pj4yKSxLW2hlKytdPWNlLmNoYXJDb2RlQXQoKCgzJktlWzBdKTw8NCkrKChLZVsxXXx8MCk+PjQpKSxLW2hlKytdPWNlLmNoYXJDb2RlQXQoKCgxNSZLZVsxXSk8PDIpKygoS2VbMl18fDApPj42KSksS1toZSsrXT00NX1lbHNlIEtbaGUrK109NDMsS1toZSsrXT00NX1icmVhaztkZWZhdWx0'@;
put 'OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIreCsiICIrZWVbeF0pfX1yZXR1cm4gSz1LLnNsaWNlKDAsaGUpLEU/cCYmImJ1ZiIhPT1wPyJhcnIiIT09cD9LLnRvU3RyaW5nKCJiaW5hcnkiKTpbXS5zbGljZS5jYWxsKEspOks6InN0ciI9PXA/Sy5tYXAoVSkuam9pbigi'@;
put 'Iik6S30saGFzY3A6ZnVuY3Rpb24oeCl7cmV0dXJuISghUlt4XSYmIWVlW3hdKX0sbWFnaWM6ZWUsY2FjaGU6bGV9LFJ9KX0sMzE3OTooJGUsU2UpPT57dmFyIFIsZWUsYjshZnVuY3Rpb24obSl7aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKSRlLmV4cG9ydHM9bSgpO2Vsc2Ug'@;
put 'aWYodHlwZW9mIERPX05PVF9FWFBPUlRfSlNaSVA+InUiKUpTWmlwU3luYz1tKCksZWU9W10sdm9pZCAwIT09KGI9ImZ1bmN0aW9uIj09dHlwZW9mKFI9bSk/Ui5hcHBseShTZSxlZSk6UikmJigkZS5leHBvcnRzPWIpO2Vsc2V7dmFyIFg7dHlwZW9mIGdsb2JhbFRoaXM8InUiP1g9Z2xvYmFs'@;
put 'VGhpczp0eXBlb2Ygd2luZG93PCJ1Ij9YPXdpbmRvdzp0eXBlb2YgZ2xvYmFsPCJ1Ij9YPWdsb2JhbDp0eXBlb2YgJDwidSImJiQuZ2xvYmFsP1g9JC5nbG9iYWw6dHlwZW9mIHNlbGY8InUiJiYoWD1zZWxmKSxYLkpTWmlwU3luYz1tKCl9fShmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbiBB'@;
put 'KEQsUCxVKXtmdW5jdGlvbiBJKEIsTil7aWYoIVBbQl0pe2lmKCFEW0JdKXtpZihFKXJldHVybiBFKEIsITApO3Rocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgbW9kdWxlICciK0IrIiciKX12YXIgWj1QW0JdPXtleHBvcnRzOnt9fTtEW0JdWzBdLmNhbGwoWi5leHBvcnRzLGZ1bmN0aW9u'@;
put 'KFcpe3JldHVybiBJKERbQl1bMV1bV118fFcpfSxaLFouZXhwb3J0cyxBLEQsUCxVKX1yZXR1cm4gUFtCXS5leHBvcnRzfWZvcih2YXIgRT12b2lkIDAsaz0wO2s8VS5sZW5ndGg7aysrKUkoVVtrXSk7cmV0dXJuIEl9KHsxOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPSJB'@;
put 'QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSI7UC5lbmNvZGU9ZnVuY3Rpb24oSSxFKXtmb3IodmFyIEIsTixWLFosVyx6LHEsaz0iIixRPTA7UTxJLmxlbmd0aDspWj0oQj1JLmNoYXJDb2RlQXQoUSsrKSk+PjIsVz0oMyZC'@;
put 'KTw8NHwoTj1JLmNoYXJDb2RlQXQoUSsrKSk+PjQsej0oMTUmTik8PDJ8KFY9SS5jaGFyQ29kZUF0KFErKykpPj42LHE9NjMmVixpc05hTihOKT96PXE9NjQ6aXNOYU4oVikmJihxPTY0KSxrPWsrVS5jaGFyQXQoWikrVS5jaGFyQXQoVykrVS5jaGFyQXQoeikrVS5jaGFyQXQocSk7cmV0dXJu'@;
put 'IGt9LFAuZGVjb2RlPWZ1bmN0aW9uKEksRSl7dmFyIE4sVixaLFcseixxLGs9IiIsUT0wO2ZvcihJPUkucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO1E8SS5sZW5ndGg7KVo9VS5pbmRleE9mKEkuY2hhckF0KFErKykpLE49KDE1JihXPVUuaW5kZXhPZihJLmNoYXJBdChRKysp'@;
put 'KSkpPDw0fCh6PVUuaW5kZXhPZihJLmNoYXJBdChRKyspKSk+PjIsVj0oMyZ6KTw8NnwocT1VLmluZGV4T2YoSS5jaGFyQXQoUSsrKSkpLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoWjw8MnxXPj40KSw2NCE9eiYmKGsrPVN0cmluZy5mcm9tQ2hhckNvZGUoTikpLDY0IT1xJiYoays9U3RyaW5n'@;
put 'LmZyb21DaGFyQ29kZShWKSk7cmV0dXJuIGt9fSx7fV0sMjpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBVKCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5jb21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGws'@;
put 'dGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfVUucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9fSxELmV4cG9ydHM9VX0se31dLDM6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0'@;
put 'cmljdCI7UC5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKFUpe3JldHVybiBVfSx1bmNvbXByZXNzOmZ1bmN0aW9uKFUpe3JldHVybiBVfSxjb21wcmVzc0lucHV0VHlwZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sUC5ERUZMQVRFPUEoIi4vZmxhdGUiKX0s'@;
put 'eyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT1BKCIuL3V0aWxzIiksST1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgz'@;
put 'MjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwx'@;
put 'Njg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAx'@;
put 'MDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2'@;
put 'MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1Mywz'@;
put 'OTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2'@;
put 'MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQz'@;
put 'MTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDks'@;
put 'NTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4'@;
put 'NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0'@;
put 'LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0'@;
put 'MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4'@;
put 'NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAz'@;
put 'MCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3'@;
put 'MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4'@;
put 'OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5Nywz'@;
put 'MTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUx'@;
put 'NjcxMTddO0QuZXhwb3J0cz1mdW5jdGlvbihrLEIpe2lmKHR5cGVvZiBrPiJ1Inx8IWsubGVuZ3RoKXJldHVybiAwO3ZhciBOPSJzdHJpbmciIT09VS5nZXRUeXBlT2Yoayk7dHlwZW9mIEI+InUiJiYoQj0wKTt2YXIgVz0wO0I9fkI7Zm9yKHZhciB6PTAscT1rLmxlbmd0aDt6PHE7eisrKVc9'@;
put 'Tj9rW3pdOmsuY2hhckNvZGVBdCh6KSxCPUI+Pj44XklbMjU1JihCXlcpXTtyZXR1cm5+Qn19LHsiLi91dGlscyI6MjF9XSw1OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vdXRpbHMiKTtmdW5jdGlvbiBJKEUpe3RoaXMuZGF0YT1udWxsLHRoaXMubGVuZ3RoPTAs'@;
put 'dGhpcy5pbmRleD0wfUkucHJvdG90eXBlPXtjaGVja09mZnNldDpmdW5jdGlvbihFKXt0aGlzLmNoZWNrSW5kZXgodGhpcy5pbmRleCtFKX0sY2hlY2tJbmRleDpmdW5jdGlvbihFKXtpZih0aGlzLmxlbmd0aDxFfHxFPDApdGhyb3cgbmV3IEVycm9yKCJFbmQgb2YgZGF0YSByZWFjaGVkIChk'@;
put 'YXRhIGxlbmd0aCA9ICIrdGhpcy5sZW5ndGgrIiwgYXNrZWQgaW5kZXggPSAiK0UrIikuIENvcnJ1cHRlZCB6aXAgPyIpfSxzZXRJbmRleDpmdW5jdGlvbihFKXt0aGlzLmNoZWNrSW5kZXgoRSksdGhpcy5pbmRleD1FfSxza2lwOmZ1bmN0aW9uKEUpe3RoaXMuc2V0SW5kZXgodGhpcy5pbmRl'@;
put 'eCtFKX0sYnl0ZUF0OmZ1bmN0aW9uKEUpe30scmVhZEludDpmdW5jdGlvbihFKXt2YXIgQixrPTA7Zm9yKHRoaXMuY2hlY2tPZmZzZXQoRSksQj10aGlzLmluZGV4K0UtMTtCPj10aGlzLmluZGV4O0ItLSlrPShrPDw4KSt0aGlzLmJ5dGVBdChCKTtyZXR1cm4gdGhpcy5pbmRleCs9RSxrfSxy'@;
put 'ZWFkU3RyaW5nOmZ1bmN0aW9uKEUpe3JldHVybiBVLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMucmVhZERhdGEoRSkpfSxyZWFkRGF0YTpmdW5jdGlvbihFKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKEUpe30scmVhZERhdGU6ZnVuY3Rpb24oKXt2YXIgRT10aGlzLnJlYWRJ'@;
put 'bnQoNCk7cmV0dXJuIG5ldyBEYXRlKDE5ODArKEU+PjI1JjEyNyksKEU+PjIxJjE1KS0xLEU+PjE2JjMxLEU+PjExJjMxLEU+PjUmNjMsKDMxJkUpPDwxKX19LEQuZXhwb3J0cz1JfSx7Ii4vdXRpbHMiOjIxfV0sNjpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0IjtQLmJhc2U2ND0hMSxQ'@;
put 'LmJpbmFyeT0hMSxQLmRpcj0hMSxQLmNyZWF0ZUZvbGRlcnM9ITEsUC5kYXRlPW51bGwsUC5jb21wcmVzc2lvbj1udWxsLFAuY29tbWVudD1udWxsfSx7fV0sNzpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT1BKCIuL3V0aWxzIik7UC5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9u'@;
put 'KEkpe3JldHVybiBVLnN0cmluZzJiaW5hcnkoSSl9LFAuc3RyaW5nMlVpbnQ4QXJyYXk9ZnVuY3Rpb24oSSl7cmV0dXJuIFUudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEkpfSxQLnVpbnQ4QXJyYXkyU3RyaW5nPWZ1bmN0aW9uKEkpe3JldHVybiBVLnRyYW5zZm9ybVRvKCJzdHJpbmciLEkp'@;
put 'fSxQLnN0cmluZzJCbG9iPWZ1bmN0aW9uKEkpe3ZhciBFPVUudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixJKTtyZXR1cm4gVS5hcnJheUJ1ZmZlcjJCbG9iKEUpfSxQLmFycmF5QnVmZmVyMkJsb2I9ZnVuY3Rpb24oSSl7cmV0dXJuIFUuYXJyYXlCdWZmZXIyQmxvYihJKX0sUC50cmFuc2Zv'@;
put 'cm1Ubz1mdW5jdGlvbihJLEUpe3JldHVybiBVLnRyYW5zZm9ybVRvKEksRSl9LFAuZ2V0VHlwZU9mPWZ1bmN0aW9uKEkpe3JldHVybiBVLmdldFR5cGVPZihJKX0sUC5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIFUuY2hlY2tTdXBwb3J0KEkpfSxQLk1BWF9WQUxVRV8xNkJJVFM9'@;
put 'VS5NQVhfVkFMVUVfMTZCSVRTLFAuTUFYX1ZBTFVFXzMyQklUUz1VLk1BWF9WQUxVRV8zMkJJVFMsUC5wcmV0dHk9ZnVuY3Rpb24oSSl7cmV0dXJuIFUucHJldHR5KEkpfSxQLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihJKXtyZXR1cm4gVS5maW5kQ29tcHJlc3Npb24oSSl9LFAuaXNSZWdF'@;
put 'eHA9ZnVuY3Rpb24oSSl7cmV0dXJuIFUuaXNSZWdFeHAoSSl9fSx7Ii4vdXRpbHMiOjIxfV0sODpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT10eXBlb2YgVWludDhBcnJheTwidSImJnR5cGVvZiBVaW50MTZBcnJheTwidSImJnR5cGVvZiBVaW50MzJBcnJheTwidSIsST1B'@;
put 'KCJwYWtvIik7UC51bmNvbXByZXNzSW5wdXRUeXBlPVU/InVpbnQ4YXJyYXkiOiJhcnJheSIsUC5jb21wcmVzc0lucHV0VHlwZT1VPyJ1aW50OGFycmF5IjoiYXJyYXkiLFAubWFnaWM9IlxiXDAiLFAuY29tcHJlc3M9ZnVuY3Rpb24oRSl7cmV0dXJuIEkuZGVmbGF0ZVJhdyhFKX0sUC51bmNv'@;
put 'bXByZXNzPWZ1bmN0aW9uKEUpe3JldHVybiBJLmluZmxhdGVSYXcoRSl9fSx7cGFrbzoyNH1dLDk6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7dmFyIFU9QSgiLi9iYXNlNjQiKTtmdW5jdGlvbiBJKEUsayl7aWYoISh0aGlzIGluc3RhbmNlb2YgSSkpcmV0dXJuIG5ldyBJKEUsayk7'@;
put 'dGhpcy5maWxlcz17fSx0aGlzLmNvbW1lbnQ9bnVsbCx0aGlzLnJvb3Q9IiIsRSYmdGhpcy5sb2FkKEUsayksdGhpcy5jbG9uZT1mdW5jdGlvbigpe3ZhciBCPW5ldyBJO2Zvcih2YXIgTiBpbiB0aGlzKSJmdW5jdGlvbiIhPXR5cGVvZiB0aGlzW05dJiYoQltOXT10aGlzW05dKTtyZXR1cm4g'@;
put 'Qn19KEkucHJvdG90eXBlPUEoIi4vb2JqZWN0IikpLmxvYWQ9QSgiLi9sb2FkIiksSS5zdXBwb3J0PUEoIi4vc3VwcG9ydCIpLEkuZGVmYXVsdHM9QSgiLi9kZWZhdWx0cyIpLEkudXRpbHM9QSgiLi9kZXByZWNhdGVkUHVibGljVXRpbHMiKSxJLmJhc2U2ND17ZW5jb2RlOmZ1bmN0aW9uKEUp'@;
put 'e3JldHVybiBVLmVuY29kZShFKX0sZGVjb2RlOmZ1bmN0aW9uKEUpe3JldHVybiBVLmRlY29kZShFKX19LEkuY29tcHJlc3Npb25zPUEoIi4vY29tcHJlc3Npb25zIiksRC5leHBvcnRzPUl9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3Npb25zIjozLCIuL2RlZmF1bHRzIjo2LCIuL2RlcHJl'@;
put 'Y2F0ZWRQdWJsaWNVdGlscyI6NywiLi9sb2FkIjoxMCwiLi9vYmplY3QiOjEzLCIuL3N1cHBvcnQiOjE3fV0sMTA6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7dmFyIFU9QSgiLi9iYXNlNjQiKSxJPUEoIi4vemlwRW50cmllcyIpO0QuZXhwb3J0cz1mdW5jdGlvbihFLGspe3ZhciBC'@;
put 'LE4sVixaO2Zvcigoaz1rfHx7fSkuYmFzZTY0JiYoRT1VLmRlY29kZShFKSksQj0oTj1uZXcgSShFLGspKS5maWxlcyxWPTA7VjxCLmxlbmd0aDtWKyspdGhpcy5maWxlKChaPUJbVl0pLmZpbGVOYW1lLFouZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEw'@;
put 'LGRhdGU6Wi5kYXRlLGRpcjpaLmRpcixjb21tZW50OlouZmlsZUNvbW1lbnQubGVuZ3RoP1ouZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOmsuY3JlYXRlRm9sZGVyc30pO3JldHVybiBOLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PU4uemlwQ29tbWVudCksdGhpc319'@;
put 'LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oQSxELFApeyhmdW5jdGlvbihVKXsidXNlIHN0cmljdCI7dmFyIEk9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBVPCJ1Iil7dmFyIEU9IVUuZnJvbTtpZighRSl0cnl7VS5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0'@;
put 'Y2h7RT0hMH1JPUU/ZnVuY3Rpb24oayxCKXtyZXR1cm4gQj9uZXcgVShrLEIpOm5ldyBVKGspfTpVLmZyb20uYmluZChVKSxVLmFsbG9jfHwoVS5hbGxvYz1mdW5jdGlvbihrKXtyZXR1cm4gbmV3IFUoayl9KX1ELmV4cG9ydHM9ZnVuY3Rpb24oayxCKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9m'@;
put 'IGs/VS5hbGxvYyhrKTpJKGssQil9LEQuZXhwb3J0cy50ZXN0PWZ1bmN0aW9uKGspe3JldHVybiBVLmlzQnVmZmVyKGspfX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDEyOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4v'@;
put 'dWludDhBcnJheVJlYWRlciIpO2Z1bmN0aW9uIEkoRSl7dGhpcy5kYXRhPUUsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTB9KEkucHJvdG90eXBlPW5ldyBVKS5yZWFkRGF0YT1mdW5jdGlvbihFKXt0aGlzLmNoZWNrT2Zmc2V0KEUpO3ZhciBrPXRoaXMuZGF0YS5z'@;
put 'bGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrRSk7cmV0dXJuIHRoaXMuaW5kZXgrPUUsa30sRC5leHBvcnRzPUl9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vc3VwcG9ydCIpLEk9QSgiLi91dGlscyIpLEU9'@;
put 'QSgiLi9jcmMzMiIpLGs9QSgiLi9zaWduYXR1cmUiKSxCPUEoIi4vZGVmYXVsdHMiKSxOPUEoIi4vYmFzZTY0IiksVj1BKCIuL2NvbXByZXNzaW9ucyIpLFo9QSgiLi9jb21wcmVzc2VkT2JqZWN0IiksVz1BKCIuL25vZGVCdWZmZXIiKSx6PUEoIi4vdXRmOCIpLHE9QSgiLi9zdHJpbmdXcml0'@;
put 'ZXIiKSxRPUEoIi4vdWludDhBcnJheVdyaXRlciIpLHRlPWZ1bmN0aW9uKHgpe2lmKHguX2RhdGEgaW5zdGFuY2VvZiBaJiYoeC5fZGF0YT14Ll9kYXRhLmdldENvbnRlbnQoKSx4Lm9wdGlvbnMuYmluYXJ5PSEwLHgub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09SS5nZXRUeXBl'@;
put 'T2YoeC5fZGF0YSkpKXt2YXIgXz14Ll9kYXRhO3guX2RhdGE9bmV3IFVpbnQ4QXJyYXkoXy5sZW5ndGgpLDAhPT1fLmxlbmd0aCYmeC5fZGF0YS5zZXQoXywwKX1yZXR1cm4geC5fZGF0YX0sYWU9ZnVuY3Rpb24oeCl7dmFyIF89dGUoeCk7cmV0dXJuInN0cmluZyI9PT1JLmdldFR5cGVPZihf'@;
put 'KT8heC5vcHRpb25zLmJpbmFyeSYmVS5ub2RlYnVmZmVyP1coXywidXRmLTgiKTp4LmFzQmluYXJ5KCk6X30sc2U9ZnVuY3Rpb24oeCl7dmFyIF89dGUodGhpcyk7cmV0dXJuIG51bGw9PT1ffHx0eXBlb2YgXz4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihfPU4uZGVjb2RlKF8pKSxf'@;
put 'PXgmJnRoaXMub3B0aW9ucy5iaW5hcnk/Uy51dGY4ZGVjb2RlKF8pOkkudHJhbnNmb3JtVG8oInN0cmluZyIsXyksIXgmJiF0aGlzLm9wdGlvbnMuYmluYXJ5JiYoXz1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLFMudXRmOGVuY29kZShfKSkpLF8pfSxkZT1mdW5jdGlvbih4LF8scCl7dGhpcy5u'@;
put 'YW1lPXgsdGhpcy5kaXI9cC5kaXIsdGhpcy5kYXRlPXAuZGF0ZSx0aGlzLmNvbW1lbnQ9cC5jb21tZW50LHRoaXMuX2RhdGE9Xyx0aGlzLm9wdGlvbnM9cCx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjpwLmRpcixkYXRlOnAuZGF0ZX19O2RlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHNlLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIHNlLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3ZhciB4PWFlKHRoaXMpO3JldHVybiBJLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIix4KX0sYXNVaW50OEFycmF5OmZ1'@;
put 'bmN0aW9uKCl7dmFyIHg9YWUodGhpcyk7cmV0dXJuIEkudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHgpfSxhc0FycmF5QnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIGxlPWZ1bmN0aW9uKHgsXyl7dmFyIEMscD0iIjtmb3IoQz0wO0M8'@;
put 'XztDKyspcCs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmeCkseD4+Pj04O3JldHVybiBwfSxjZT1mdW5jdGlvbigpe3ZhciBfLHAseD17fTtmb3IoXz0wO188YXJndW1lbnRzLmxlbmd0aDtfKyspZm9yKHAgaW4gYXJndW1lbnRzW19dKWFyZ3VtZW50c1tfXS5oYXNPd25Qcm9wZXJ0eShwKSYm'@;
put 'dHlwZW9mIHhbcF0+InUiJiYoeFtwXT1hcmd1bWVudHNbX11bcF0pO3JldHVybiB4fSx5PWZ1bmN0aW9uKHgsXyxwKXt2YXIgSyxDPUkuZ2V0VHlwZU9mKF8pO2lmKHA9ZnVuY3Rpb24oeCl7cmV0dXJuITA9PT0oeD14fHx7fSkuYmFzZTY0JiZudWxsPT14LmJpbmFyeSYmKHguYmluYXJ5PSEw'@;
put 'KSwoeD1jZSh4LEIpKS5kYXRlPXguZGF0ZXx8bmV3IERhdGUsbnVsbCE9PXguY29tcHJlc3Npb24mJih4LmNvbXByZXNzaW9uPXguY29tcHJlc3Npb24udG9VcHBlckNhc2UoKSkseH0ocCkscC5jcmVhdGVGb2xkZXJzJiYoSz1MKHgpKSYmSC5jYWxsKHRoaXMsSywhMCkscC5kaXJ8fG51bGw9'@;
put 'PT1ffHx0eXBlb2YgXz4idSIpcC5iYXNlNjQ9ITEscC5iaW5hcnk9ITEsXz1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT1DKXAuYmluYXJ5JiYhcC5iYXNlNjQmJiEwIT09cC5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJihfPUkuc3RyaW5nMmJpbmFyeShfKSk7ZWxzZXtpZihwLmJhc2U2ND0hMSxw'@;
put 'LmJpbmFyeT0hMCwhKEN8fF8gaW5zdGFuY2VvZiBaKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK3grIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0ICEiKTsiYXJyYXlidWZmZXIiPT09QyYmKF89SS50cmFuc2Zvcm1UbygidWludDhhcnJheSIsXykpfXZhciBuZT1uZXcg'@;
put 'ZGUoeCxfLHApO3JldHVybiB0aGlzLmZpbGVzW3hdPW5lLG5lfSxMPWZ1bmN0aW9uKHgpeyIvIj09eC5zbGljZSgtMSkmJih4PXguc3Vic3RyaW5nKDAseC5sZW5ndGgtMSkpO3ZhciBfPXgubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gXz4wP3guc3Vic3RyaW5nKDAsXyk6IiJ9LEg9ZnVuY3Rp'@;
put 'b24oeCxfKXtyZXR1cm4iLyIhPXguc2xpY2UoLTEpJiYoeCs9Ii8iKSxfPXR5cGVvZiBfPCJ1IiYmXyx0aGlzLmZpbGVzW3hdfHx5LmNhbGwodGhpcyx4LG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOl99KSx0aGlzLmZpbGVzW3hdfSxqPWZ1bmN0aW9uKHgsXyl7dmFyIEMscD1uZXcgWjty'@;
put 'ZXR1cm4geC5fZGF0YSBpbnN0YW5jZW9mIFo/KHAudW5jb21wcmVzc2VkU2l6ZT14Ll9kYXRhLnVuY29tcHJlc3NlZFNpemUscC5jcmMzMj14Ll9kYXRhLmNyYzMyLDA9PT1wLnVuY29tcHJlc3NlZFNpemV8fHguZGlyPyhfPVYuU1RPUkUscC5jb21wcmVzc2VkQ29udGVudD0iIixwLmNyYzMy'@;
put 'PTApOnguX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1fLm1hZ2ljP3AuY29tcHJlc3NlZENvbnRlbnQ9eC5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOihDPXguX2RhdGEuZ2V0Q29udGVudCgpLHAuY29tcHJlc3NlZENvbnRlbnQ9Xy5jb21wcmVzcyhJLnRyYW5zZm9ybVRvKF8uY29t'@;
put 'cHJlc3NJbnB1dFR5cGUsQykpKSk6KCghKEM9YWUoeCkpfHwwPT09Qy5sZW5ndGh8fHguZGlyKSYmKF89Vi5TVE9SRSxDPSIiKSxwLnVuY29tcHJlc3NlZFNpemU9Qy5sZW5ndGgscC5jcmMzMj1FKEMpLHAuY29tcHJlc3NlZENvbnRlbnQ9Xy5jb21wcmVzcyhJLnRyYW5zZm9ybVRvKF8uY29t'@;
put 'cHJlc3NJbnB1dFR5cGUsQykpKSxwLmNvbXByZXNzZWRTaXplPXAuY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLHAuY29tcHJlc3Npb25NZXRob2Q9Xy5tYWdpYyxwfSxnPWZ1bmN0aW9uKHgsXyxwLEMpe3ZhciBFZSxMZSxYZSxhdCxuZT1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLHoudXRmOGVu'@;
put 'Y29kZShfLm5hbWUpKSx1ZT1fLmNvbW1lbnR8fCIiLGhlPUkudHJhbnNmb3JtVG8oInN0cmluZyIsei51dGY4ZW5jb2RlKHVlKSkseGU9bmUubGVuZ3RoIT09Xy5uYW1lLmxlbmd0aCxPZT1oZS5sZW5ndGghPT11ZS5sZW5ndGgsSGU9Xy5vcHRpb25zLE5lPSIiLEtlPSIiLFVlPSIiO1hlPV8u'@;
put 'X2luaXRpYWxNZXRhZGF0YS5kaXIhPT1fLmRpcj9fLmRpcjpIZS5kaXIsRWU9KGF0PV8uX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09Xy5kYXRlP18uZGF0ZTpIZS5kYXRlKS5nZXRIb3VycygpLEVlPDw9NixFZXw9YXQuZ2V0TWludXRlcygpLEVlPDw9NSxFZXw9YXQuZ2V0U2Vjb25kcygpLzIs'@;
put 'TGU9YXQuZ2V0RnVsbFllYXIoKS0xOTgwLExlPDw9NCxMZXw9YXQuZ2V0TW9udGgoKSsxLExlPDw9NSxMZXw9YXQuZ2V0RGF0ZSgpLHhlJiYoS2U9bGUoMSwxKStsZShFKG5lKSw0KStuZSxOZSs9InVwIitsZShLZS5sZW5ndGgsMikrS2UpLE9lJiYoVWU9bGUoMSwxKStsZSh0aGlzLmNyYzMy'@;
put 'KGhlKSw0KStoZSxOZSs9InVjIitsZShVZS5sZW5ndGgsMikrVWUpO3ZhciBGZT0iIjtyZXR1cm4gRmUrPSJcblwwIixGZSs9eGV8fE9lPyJcMFxiIjoiXDBcMCIsRmUrPXAuY29tcHJlc3Npb25NZXRob2QsRmUrPWxlKEVlLDIpLEZlKz1sZShMZSwyKSxGZSs9bGUocC5jcmMzMiw0KSxGZSs9'@;
put 'bGUocC5jb21wcmVzc2VkU2l6ZSw0KSxGZSs9bGUocC51bmNvbXByZXNzZWRTaXplLDQpLEZlKz1sZShuZS5sZW5ndGgsMiksRmUrPWxlKE5lLmxlbmd0aCwyKSx7ZmlsZVJlY29yZDprLkxPQ0FMX0ZJTEVfSEVBREVSK0ZlK25lK05lLGRpclJlY29yZDprLkNFTlRSQUxfRklMRV9IRUFERVIr'@;
put 'Ilx4MTRcMCIrRmUrbGUoaGUubGVuZ3RoLDIpKyJcMFwwXDBcMCIrKCEwPT09WGU/Ilx4MTBcMFwwXDAiOiJcMFwwXDBcMCIpK2xlKEMsNCkrbmUrTmUraGUsY29tcHJlc3NlZE9iamVjdDpwfX0sUz17bG9hZDpmdW5jdGlvbih4LF8pe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMg'@;
put 'bm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24oeCl7dmFyIHAsQyxLLG5lLF89W107Zm9yKHAgaW4gdGhpcy5maWxlcyl0aGlzLmZpbGVzLmhhc093blByb3BlcnR5KHApJiYobmU9bmV3IGRlKChLPXRoaXMuZmlsZXNb'@;
put 'cF0pLm5hbWUsSy5fZGF0YSxjZShLLm9wdGlvbnMpKSxDPXAuc2xpY2UodGhpcy5yb290Lmxlbmd0aCxwLmxlbmd0aCkscC5zbGljZSgwLHRoaXMucm9vdC5sZW5ndGgpPT09dGhpcy5yb290JiZ4KEMsbmUpJiZfLnB1c2gobmUpKTtyZXR1cm4gX30sZmlsZTpmdW5jdGlvbih4LF8scCl7aWYo'@;
put 'MT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKEkuaXNSZWdFeHAoeCkpe3ZhciBDPXg7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEssbmUpe3JldHVybiFuZS5kaXImJkMudGVzdChLKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihLLG5lKXtyZXR1cm4hbmUuZGlyJiZLPT09eH0p'@;
put 'WzBdfHxudWxsfXJldHVybiB5LmNhbGwodGhpcyx4PXRoaXMucm9vdCt4LF8scCksdGhpc30sZm9sZGVyOmZ1bmN0aW9uKHgpe2lmKCF4KXJldHVybiB0aGlzO2lmKEkuaXNSZWdFeHAoeCkpcmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKEssbmUpe3JldHVybiBuZS5kaXImJngudGVzdChL'@;
put 'KX0pO3ZhciBwPUguY2FsbCh0aGlzLHRoaXMucm9vdCt4KSxDPXRoaXMuY2xvbmUoKTtyZXR1cm4gQy5yb290PXAubmFtZSxDfSxyZW1vdmU6ZnVuY3Rpb24oeCl7dmFyIF89dGhpcy5maWxlc1t4PXRoaXMucm9vdCt4XTtpZihffHwoIi8iIT14LnNsaWNlKC0xKSYmKHgrPSIvIiksXz10aGlz'@;
put 'LmZpbGVzW3hdKSxfJiYhXy5kaXIpZGVsZXRlIHRoaXMuZmlsZXNbeF07ZWxzZSBmb3IodmFyIHA9dGhpcy5maWx0ZXIoZnVuY3Rpb24oSyxuZSl7cmV0dXJuIG5lLm5hbWUuc2xpY2UoMCx4Lmxlbmd0aCk9PT14fSksQz0wO0M8cC5sZW5ndGg7QysrKWRlbGV0ZSB0aGlzLmZpbGVzW3BbQ10u'@;
put 'bmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKHgpe3g9Y2UoeHx8e30se2Jhc2U2NDohMCxjb21wcmVzc2lvbjoiU1RPUkUiLHR5cGU6ImJhc2U2NCIsY29tbWVudDpudWxsfSksSS5jaGVja1N1cHBvcnQoeC50eXBlKTt2YXIgSyxuZSxOZSxfPVtdLHA9MCxDPTAsdWU9SS50'@;
put 'cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoeC5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciBoZSBpbiB0aGlzLmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkoaGUpKXt2YXIgeGU9dGhpcy5maWxlc1toZV0sT2U9eGUub3B0aW9ucy5jb21w'@;
put 'cmVzc2lvbnx8eC5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLEhlPVZbT2VdO2lmKCFIZSl0aHJvdyBuZXcgRXJyb3IoT2UrIiBpcyBub3QgYSB2YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciBFZT1qLmNhbGwodGhpcyx4ZSxIZSksTGU9Zy5jYWxsKHRoaXMsaGUseGUsRWUscCk7'@;
put 'cCs9TGUuZmlsZVJlY29yZC5sZW5ndGgrRWUuY29tcHJlc3NlZFNpemUsQys9TGUuZGlyUmVjb3JkLmxlbmd0aCxfLnB1c2goTGUpfU5lPWsuQ0VOVFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrbGUoXy5sZW5ndGgsMikrbGUoXy5sZW5ndGgsMikrbGUoQyw0KStsZShwLDQpK2xlKHVl'@;
put 'Lmxlbmd0aCwyKSt1ZTt2YXIgS2U9eC50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKEs9InVpbnQ4YXJyYXkiPT09S2V8fCJhcnJheWJ1ZmZlciI9PT1LZXx8ImJsb2IiPT09S2V8fCJub2RlYnVmZmVyIj09PUtlP25ldyBRKHArQytOZS5sZW5ndGgpOm5ldyBxKHArQytOZS5sZW5ndGgpLG5lPTA7'@;
put 'bmU8Xy5sZW5ndGg7bmUrKylLLmFwcGVuZChfW25lXS5maWxlUmVjb3JkKSxLLmFwcGVuZChfW25lXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IobmU9MDtuZTxfLmxlbmd0aDtuZSsrKUsuYXBwZW5kKF9bbmVdLmRpclJlY29yZCk7Sy5hcHBlbmQoTmUpO3ZhciBV'@;
put 'ZT1LLmZpbmFsaXplKCk7c3dpdGNoKHgudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIEkudHJhbnNmb3JtVG8oeC50eXBlLnRvTG93ZXJDYXNlKCksVWUpO2Nhc2UiYmxvYiI6cmV0dXJuIEkuYXJy'@;
put 'YXlCdWZmZXIyQmxvYihJLnRyYW5zZm9ybVRvKCJhcnJheWJ1ZmZlciIsVWUpKTtjYXNlImJhc2U2NCI6cmV0dXJuIHguYmFzZTY0P04uZW5jb2RlKFVlKTpVZTtkZWZhdWx0OnJldHVybiBVZX19LGNyYzMyOmZ1bmN0aW9uKHgsXyl7cmV0dXJuIEUoeCxfKX0sdXRmOGVuY29kZTpmdW5jdGlv'@;
put 'bih4KXtyZXR1cm4gSS50cmFuc2Zvcm1Ubygic3RyaW5nIix6LnV0ZjhlbmNvZGUoeCkpfSx1dGY4ZGVjb2RlOmZ1bmN0aW9uKHgpe3JldHVybiB6LnV0ZjhkZWNvZGUoeCl9fTtELmV4cG9ydHM9U30seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL2NvbXByZXNzaW9u'@;
put 'cyI6MywiLi9jcmMzMiI6NCwiLi9kZWZhdWx0cyI6NiwiLi9ub2RlQnVmZmVyIjoxMSwiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1dyaXRlciI6MTYsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVdyaXRlciI6MTksIi4vdXRmOCI6MjAsIi4vdXRpbHMiOjIxfV0sMTQ6W2Z1bmN0aW9u'@;
put 'KEEsRCxQKXsidXNlIHN0cmljdCI7UC5MT0NBTF9GSUxFX0hFQURFUj0iUEtceDAzXHgwNCIsUC5DRU5UUkFMX0ZJTEVfSEVBREVSPSJQS1x4MDFceDAyIixQLkNFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA1XHgwNiIsUC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SPSJQS1x4'@;
put 'MDZceDA3IixQLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORD0iUEtceDA2XHgwNiIsUC5EQVRBX0RFU0NSSVBUT1I9IlBLXHgwN1xiIn0se31dLDE1OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vZGF0YVJlYWRlciIpLEk9QSgiLi91dGlscyIpO2Z1bmN0aW9u'@;
put 'IEUoayxCKXt0aGlzLmRhdGE9ayxCfHwodGhpcy5kYXRhPUkuc3RyaW5nMmJpbmFyeSh0aGlzLmRhdGEpKSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oRS5wcm90b3R5cGU9bmV3IFUpLmJ5dGVBdD1mdW5jdGlvbihrKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJD'@;
put 'b2RlQXQoayl9LEUucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGspe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2Yoayl9LEUucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGspe3RoaXMuY2hlY2tPZmZzZXQoayk7dmFyIEI9dGhpcy5kYXRhLnNsaWNlKHRo'@;
put 'aXMuaW5kZXgsdGhpcy5pbmRleCtrKTtyZXR1cm4gdGhpcy5pbmRleCs9ayxCfSxELmV4cG9ydHM9RX0seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7dmFyIFU9QSgiLi91dGlscyIpLEk9ZnVuY3Rpb24oKXt0aGlzLmRh'@;
put 'dGE9W119O0kucHJvdG90eXBlPXthcHBlbmQ6ZnVuY3Rpb24oRSl7RT1VLnRyYW5zZm9ybVRvKCJzdHJpbmciLEUpLHRoaXMuZGF0YS5wdXNoKEUpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGEuam9pbigiIil9fSxELmV4cG9ydHM9SX0seyIuL3V0aWxzIjoyMX1dLDE3'@;
put 'OltmdW5jdGlvbihBLEQsUCl7KGZ1bmN0aW9uKFUpeyJ1c2Ugc3RyaWN0IjtpZihQLmJhc2U2ND0hMCxQLmFycmF5PSEwLFAuc3RyaW5nPSEwLFAuYXJyYXlidWZmZXI9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiLFAubm9kZWJ1ZmZlcj10eXBlb2YgVTwi'@;
put 'dSIsUC51aW50OGFycmF5PXR5cGVvZiBVaW50OEFycmF5PCJ1Iix0eXBlb2YgQXJyYXlCdWZmZXI+InUiKVAuYmxvYj0hMTtlbHNle3ZhciBJPW5ldyBBcnJheUJ1ZmZlcigwKTt0cnl7UC5ibG9iPTA9PT1uZXcgQmxvYihbSV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KS5zaXplfWNhdGNo'@;
put 'e3RyeXt2YXIgaz1uZXcod2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIpO2suYXBwZW5kKEkpLFAuYmxvYj0wPT09ay5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKS5zaXplfWNh'@;
put 'dGNoe1AuYmxvYj0hMX19fX0pLmNhbGwodGhpcyx0eXBlb2YgQnVmZmVyPCJ1Ij9CdWZmZXI6dm9pZCAwKX0se31dLDE4OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vZGF0YVJlYWRlciIpO2Z1bmN0aW9uIEkoRSl7RSYmKHRoaXMuZGF0YT1FLHRoaXMubGVuZ3Ro'@;
put 'PXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wKX0oSS5wcm90b3R5cGU9bmV3IFUpLmJ5dGVBdD1mdW5jdGlvbihFKXtyZXR1cm4gdGhpcy5kYXRhW0VdfSxJLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihFKXtmb3IodmFyIGs9RS5jaGFyQ29kZUF0KDApLEI9'@;
put 'RS5jaGFyQ29kZUF0KDEpLE49RS5jaGFyQ29kZUF0KDIpLFY9RS5jaGFyQ29kZUF0KDMpLFo9dGhpcy5sZW5ndGgtNDtaPj0wOy0tWilpZih0aGlzLmRhdGFbWl09PT1rJiZ0aGlzLmRhdGFbWisxXT09PUImJnRoaXMuZGF0YVtaKzJdPT09TiYmdGhpcy5kYXRhW1orM109PT1WKXJldHVybiBa'@;
put 'O3JldHVybi0xfSxJLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihFKXtpZih0aGlzLmNoZWNrT2Zmc2V0KEUpLDA9PT1FKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgaz10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K0UpO3JldHVybiB0aGlzLmluZGV4'@;
put 'Kz1FLGt9LEQuZXhwb3J0cz1JfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vdXRpbHMiKSxJPWZ1bmN0aW9uKEUpe3RoaXMuZGF0YT1uZXcgVWludDhBcnJheShFKSx0aGlzLmluZGV4PTB9O0kucHJvdG90eXBlPXthcHBl'@;
put 'bmQ6ZnVuY3Rpb24oRSl7MCE9PUUubGVuZ3RoJiYoRT1VLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixFKSx0aGlzLmRhdGEuc2V0KEUsdGhpcy5pbmRleCksdGhpcy5pbmRleCs9RS5sZW5ndGgpfSxmaW5hbGl6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGF9fSxELmV4cG9ydHM9SX0s'@;
put 'eyIuL3V0aWxzIjoyMX1dLDIwOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO2Zvcih2YXIgVT1BKCIuL3V0aWxzIiksST1BKCIuL3N1cHBvcnQiKSxFPUEoIi4vbm9kZUJ1ZmZlciIpLGs9bmV3IEFycmF5KDI1NiksQj0wO0I8MjU2O0IrKylrW0JdPUI+PTI1Mj82OkI+PTI0OD81OkI+'@;
put 'PTI0MD80OkI+PTIyND8zOkI+PTE5Mj8yOjE7a1syNTRdPWtbMjU0XT0xO3ZhciBWPWZ1bmN0aW9uKFcseil7dmFyIHE7Zm9yKCh6PXp8fFcubGVuZ3RoKT5XLmxlbmd0aCYmKHo9Vy5sZW5ndGgpLHE9ei0xO3E+PTAmJjEyOD09KDE5MiZXW3FdKTspcS0tO3JldHVybiBxPDB8fDA9PT1xP3o6'@;
put 'cStrW1dbcV1dPno/cTp6fSxaPWZ1bmN0aW9uKFcpe3ZhciBxLFEsdGUsYWUsc2U9Vy5sZW5ndGgsZGU9bmV3IEFycmF5KDIqc2UpO2ZvcihRPTAscT0wO3E8c2U7KWlmKCh0ZT1XW3ErK10pPDEyOClkZVtRKytdPXRlO2Vsc2UgaWYoKGFlPWtbdGVdKT40KWRlW1ErK109NjU1MzMscSs9YWUt'@;
put 'MTtlbHNle2Zvcih0ZSY9Mj09PWFlPzMxOjM9PT1hZT8xNTo3O2FlPjEmJnE8c2U7KXRlPXRlPDw2fDYzJldbcSsrXSxhZS0tO2FlPjE/ZGVbUSsrXT02NTUzMzp0ZTw2NTUzNj9kZVtRKytdPXRlOihkZVtRKytdPTU1Mjk2fCh0ZS09NjU1MzYpPj4xMCYxMDIzLGRlW1ErK109NTYzMjB8MTAy'@;
put 'MyZ0ZSl9cmV0dXJuIGRlLmxlbmd0aCE9PVEmJihkZS5zdWJhcnJheT9kZT1kZS5zdWJhcnJheSgwLFEpOmRlLmxlbmd0aD1RKSxVLmFwcGx5RnJvbUNoYXJDb2RlKGRlKX07UC51dGY4ZW5jb2RlPWZ1bmN0aW9uKHope3JldHVybiBJLm5vZGVidWZmZXI/RSh6LCJ1dGYtOCIpOmZ1bmN0aW9u'@;
put 'KFcpe3ZhciB6LHEsUSx0ZSxhZSxzZT1XLmxlbmd0aCxkZT0wO2Zvcih0ZT0wO3RlPHNlO3RlKyspNTUyOTY9PSg2NDUxMiYocT1XLmNoYXJDb2RlQXQodGUpKSkmJnRlKzE8c2UmJjU2MzIwPT0oNjQ1MTImKFE9Vy5jaGFyQ29kZUF0KHRlKzEpKSkmJihxPTY1NTM2KyhxLTU1Mjk2PDwxMCkr'@;
put 'KFEtNTYzMjApLHRlKyspLGRlKz1xPDEyOD8xOnE8MjA0OD8yOnE8NjU1MzY/Mzo0O2Zvcih6PUkudWludDhhcnJheT9uZXcgVWludDhBcnJheShkZSk6bmV3IEFycmF5KGRlKSxhZT0wLHRlPTA7YWU8ZGU7dGUrKyk1NTI5Nj09KDY0NTEyJihxPVcuY2hhckNvZGVBdCh0ZSkpKSYmdGUrMTxz'@;
put 'ZSYmNTYzMjA9PSg2NDUxMiYoUT1XLmNoYXJDb2RlQXQodGUrMSkpKSYmKHE9NjU1MzYrKHEtNTUyOTY8PDEwKSsoUS01NjMyMCksdGUrKykscTwxMjg/elthZSsrXT1xOnE8MjA0OD8oelthZSsrXT0xOTJ8cT4+PjYselthZSsrXT0xMjh8NjMmcSk6cTw2NTUzNj8oelthZSsrXT0yMjR8cT4+'@;
put 'PjEyLHpbYWUrK109MTI4fHE+Pj42JjYzLHpbYWUrK109MTI4fDYzJnEpOih6W2FlKytdPTI0MHxxPj4+MTgselthZSsrXT0xMjh8cT4+PjEyJjYzLHpbYWUrK109MTI4fHE+Pj42JjYzLHpbYWUrK109MTI4fDYzJnEpO3JldHVybiB6fSh6KX0sUC51dGY4ZGVjb2RlPWZ1bmN0aW9uKHope2lm'@;
put 'KEkubm9kZWJ1ZmZlcilyZXR1cm4gVS50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIseikudG9TdHJpbmcoInV0Zi04Iik7Zm9yKHZhciBxPVtdLFE9MCx0ZT0oej1VLnRyYW5zZm9ybVRvKEkudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5Iix6KSkubGVuZ3RoO1E8dGU7KXt2YXIgc2U9'@;
put 'Vih6LE1hdGgubWluKFErNjU1MzYsdGUpKTtxLnB1c2goWihJLnVpbnQ4YXJyYXk/ei5zdWJhcnJheShRLHNlKTp6LnNsaWNlKFEsc2UpKSksUT1zZX1yZXR1cm4gcS5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rp'@;
put 'b24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT1BKCIuL3N1cHBvcnQiKSxJPUEoIi4vY29tcHJlc3Npb25zIiksRT1BKCIuL25vZGVCdWZmZXIiKTtmdW5jdGlvbiBrKFcpe3JldHVybiBXfWZ1bmN0aW9uIEIoVyx6KXtmb3IodmFyIHE9MDtxPFcubGVuZ3RoOysrcSl6W3FdPTI1NSZXLmNo'@;
put 'YXJDb2RlQXQocSk7cmV0dXJuIHp9ZnVuY3Rpb24gTihXKXt2YXIgej02NTUzNixxPVtdLFE9Vy5sZW5ndGgsdGU9UC5nZXRUeXBlT2YoVyksYWU9MCxzZT0hMDt0cnl7c3dpdGNoKHRlKXtjYXNlInVpbnQ4YXJyYXkiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhB'@;
put 'cnJheSgwKSk7YnJlYWs7Y2FzZSJub2RlYnVmZmVyIjpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsRSgwKSl9fWNhdGNoe3NlPSExfWlmKCFzZSl7Zm9yKHZhciBkZT0iIixsZT0wO2xlPFcubGVuZ3RoO2xlKyspZGUrPVN0cmluZy5mcm9tQ2hhckNvZGUoV1tsZV0pO3JldHVybiBk'@;
put 'ZX1mb3IoO2FlPFEmJno+MTspdHJ5e3EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PXRlfHwibm9kZWJ1ZmZlciI9PT10ZT9XLnNsaWNlKGFlLE1hdGgubWluKGFlK3osUSkpOlcuc3ViYXJyYXkoYWUsTWF0aC5taW4oYWUreixRKSkpKSxhZSs9en1jYXRj'@;
put 'aHt6PU1hdGguZmxvb3Ioei8yKX1yZXR1cm4gcS5qb2luKCIiKX1mdW5jdGlvbiBWKFcseil7Zm9yKHZhciBxPTA7cTxXLmxlbmd0aDtxKyspeltxXT1XW3FdO3JldHVybiB6fVAuc3RyaW5nMmJpbmFyeT1mdW5jdGlvbihXKXtmb3IodmFyIHo9IiIscT0wO3E8Vy5sZW5ndGg7cSsrKXorPVN0'@;
put 'cmluZy5mcm9tQ2hhckNvZGUoMjU1JlcuY2hhckNvZGVBdChxKSk7cmV0dXJuIHp9LFAuYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihXKXtQLmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJsb2IoW1ddLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSl9Y2F0Y2h7dHJ5e3Zh'@;
put 'ciBxPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JCdWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7cmV0dXJuIHEuYXBwZW5kKFcpLHEuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIil9Y2F0Y2h7dGhyb3cgbmV3IEVy'@;
put 'cm9yKCJCdWcgOiBjYW4ndCBjb25zdHJ1Y3QgdGhlIEJsb2IuIil9fX0sUC5hcHBseUZyb21DaGFyQ29kZT1OO3ZhciBaPXt9O1ouc3RyaW5nPXtzdHJpbmc6ayxhcnJheTpmdW5jdGlvbihXKXtyZXR1cm4gQihXLG5ldyBBcnJheShXLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihX'@;
put 'KXtyZXR1cm4gWi5zdHJpbmcudWludDhhcnJheShXKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oVyl7cmV0dXJuIEIoVyxuZXcgVWludDhBcnJheShXLmxlbmd0aCkpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKFcpe3JldHVybiBCKFcsRShXLmxlbmd0aCkpfX0sWi5hcnJheT17c3RyaW5n'@;
put 'Ok4sYXJyYXk6ayxhcnJheWJ1ZmZlcjpmdW5jdGlvbihXKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoVykuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiBuZXcgVWludDhBcnJheShXKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihXKXtyZXR1cm4gRShXKX19LFouYXJyYXlidWZm'@;
put 'ZXI9e3N0cmluZzpmdW5jdGlvbihXKXtyZXR1cm4gTihuZXcgVWludDhBcnJheShXKSl9LGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiBWKG5ldyBVaW50OEFycmF5KFcpLG5ldyBBcnJheShXLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6ayx1aW50OGFycmF5OmZ1bmN0aW9uKFcpe3JldHVy'@;
put 'biBuZXcgVWludDhBcnJheShXKX0sbm9kZWJ1ZmZlcjpmdW5jdGlvbihXKXtyZXR1cm4gRShuZXcgVWludDhBcnJheShXKSl9fSxaLnVpbnQ4YXJyYXk9e3N0cmluZzpOLGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiBWKFcsbmV3IEFycmF5KFcubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0'@;
put 'aW9uKFcpe3JldHVybiBXLmJ1ZmZlcn0sdWludDhhcnJheTprLG5vZGVidWZmZXI6ZnVuY3Rpb24oVyl7cmV0dXJuIEUoVyl9fSxaLm5vZGVidWZmZXI9e3N0cmluZzpOLGFycmF5OmZ1bmN0aW9uKFcpe3JldHVybiBWKFcsbmV3IEFycmF5KFcubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0'@;
put 'aW9uKFcpe3JldHVybiBaLm5vZGVidWZmZXIudWludDhhcnJheShXKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oVyl7cmV0dXJuIFYoVyxuZXcgVWludDhBcnJheShXLmxlbmd0aCkpfSxub2RlYnVmZmVyOmt9LFAudHJhbnNmb3JtVG89ZnVuY3Rpb24oVyx6KXtpZih6fHwoej0iIiks'@;
put 'IVcpcmV0dXJuIHo7UC5jaGVja1N1cHBvcnQoVyk7dmFyIHE9UC5nZXRUeXBlT2Yoeik7cmV0dXJuIFpbcV1bV10oeil9LFAuZ2V0VHlwZU9mPWZ1bmN0aW9uKFcpe3JldHVybiJzdHJpbmciPT10eXBlb2YgVz8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50'@;
put 'b1N0cmluZy5jYWxsKFcpPyJhcnJheSI6VS5ub2RlYnVmZmVyJiZFLnRlc3QoVyk/Im5vZGVidWZmZXIiOlUudWludDhhcnJheSYmVyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOlUuYXJyYXlidWZmZXImJlcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIi'@;
put 'OnZvaWQgMH0sUC5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oVyl7aWYoIVVbVy50b0xvd2VyQ2FzZSgpXSl0aHJvdyBuZXcgRXJyb3IoVysiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyIil9LFAuTUFYX1ZBTFVFXzE2QklUUz02NTUzNSxQLk1BWF9WQUxVRV8zMkJJVFM9LTEsUC5w'@;
put 'cmV0dHk9ZnVuY3Rpb24oVyl7dmFyIHEsUSx6PSIiO2ZvcihRPTA7UTwoV3x8IiIpLmxlbmd0aDtRKyspeis9IlxceCIrKChxPVcuY2hhckNvZGVBdChRKSk8MTY/IjAiOiIiKStxLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiB6fSxQLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlv'@;
put 'bihXKXtmb3IodmFyIHogaW4gSSlpZihJLmhhc093blByb3BlcnR5KHopJiZJW3pdLm1hZ2ljPT09VylyZXR1cm4gSVt6XTtyZXR1cm4gbnVsbH0sUC5pc1JlZ0V4cD1mdW5jdGlvbihXKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChX'@;
put 'KX19LHsiLi9jb21wcmVzc2lvbnMiOjMsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc3VwcG9ydCI6MTd9XSwyMjpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT1BKCIuL3N0cmluZ1JlYWRlciIpLEk9QSgiLi9ub2RlQnVmZmVyUmVhZGVyIiksRT1BKCIuL3VpbnQ4QXJyYXlSZWFk'@;
put 'ZXIiKSxrPUEoIi4vdXRpbHMiKSxCPUEoIi4vc2lnbmF0dXJlIiksTj1BKCIuL3ppcEVudHJ5IiksVj1BKCIuL3N1cHBvcnQiKSxaPUEoIi4vb2JqZWN0Iik7ZnVuY3Rpb24gVyh6LHEpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1xLHomJnRoaXMubG9hZCh6KX1XLnByb3RvdHlw'@;
put 'ZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oeil7dmFyIHE9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihxIT09eil0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIray5wcmV0dHkocSkrIiwgZXhwZWN0ZWQgIitrLnBy'@;
put 'ZXR0eSh6KSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhp'@;
put 'c0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRo'@;
put 'aXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PVoudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2'@;
put 'NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhp'@;
put 'cy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jk'@;
put 'cz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBRLHRlLGFlLHo9dGhpcy56'@;
put 'aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDx6OylRPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGU9dGhpcy5yZWFkZXIucmVhZEludCg0KSxhZT10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRlKSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGFbUV09e2lkOlEsbGVuZ3RoOnRlLHZhbHVlOmFlfX0s'@;
put 'cmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQo'@;
put 'OCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciB6LHE7Zm9yKHo9MDt6PHRoaXMu'@;
put 'ZmlsZXMubGVuZ3RoO3orKyl0aGlzLnJlYWRlci5zZXRJbmRleCgocT10aGlzLmZpbGVzW3pdKS5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShCLkxPQ0FMX0ZJTEVfSEVBREVSKSxxLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLHEuaGFuZGxlVVRGOCgpfSxyZWFk'@;
put 'Q2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciB6O2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1CLkNFTlRSQUxfRklMRV9IRUFERVI7KSh6PW5ldyBOKHt6aXA2NDp0aGlzLnppcDY0fSx0aGlzLmxvYWRP'@;
put 'cHRpb25zKSkucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goeil9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgej10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShCLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT16KXRocm93'@;
put 'IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgoeiksdGhpcy5jaGVja1NpZ25hdHVyZShCLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwo'@;
put 'KSx0aGlzLmRpc2tOdW1iZXI9PT1rLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1rLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09ay5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNv'@;
put 'cmRzPT09ay5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09ay5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1rLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsLTE9PT0oej10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25h'@;
put 'dHVyZShCLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KHopLHRoaXMuY2hlY2tT'@;
put 'aWduYXR1cmUoQi5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVy'@;
put 'ZShCLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbih6KXt2YXIgcT1rLmdldFR5cGVPZih6KTt0aGlzLnJlYWRlcj0ic3RyaW5nIiE9PXF8fFYudWludDhhcnJheT8ibm9kZWJ1ZmZl'@;
put 'ciI9PT1xP25ldyBJKHopOm5ldyBFKGsudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLHopKTpuZXcgVSh6LHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5jdGlvbih6KXt0aGlzLnByZXBhcmVSZWFkZXIoeiksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCks'@;
put 'dGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LEQuZXhwb3J0cz1XfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJl'@;
put 'YWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vc3RyaW5nUmVhZGVyIiksST1BKCIuL3V0aWxzIiksRT1BKCIuL2NvbXByZXNzZWRPYmplY3QiKSxrPUEoIi4vb2JqZWN0Iik7ZnVuY3Rpb24g'@;
put 'QihOLFYpe3RoaXMub3B0aW9ucz1OLHRoaXMubG9hZE9wdGlvbnM9Vn1CLnByb3RvdHlwZT17aXNFbmNyeXB0ZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMuYml0RmxhZyl9LHVzZVVURjg6ZnVuY3Rpb24oKXtyZXR1cm4hKDIwNDgmfnRoaXMuYml0RmxhZyl9LHByZXBhcmVDb21wcmVz'@;
put 'c2VkQ29udGVudDpmdW5jdGlvbihOLFYsWil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIFc9Ti5pbmRleDtOLnNldEluZGV4KFYpO3ZhciB6PU4ucmVhZERhdGEoWik7cmV0dXJuIE4uc2V0SW5kZXgoVyksen19LHByZXBhcmVDb250ZW50OmZ1bmN0aW9uKE4sVixaLFcseil7cmV0dXJuIGZ1bmN0'@;
put 'aW9uKCl7dmFyIHE9SS50cmFuc2Zvcm1UbyhXLnVuY29tcHJlc3NJbnB1dFR5cGUsdGhpcy5nZXRDb21wcmVzc2VkQ29udGVudCgpKSxRPVcudW5jb21wcmVzcyhxKTtpZihRLmxlbmd0aCE9PXopdGhyb3cgbmV3IEVycm9yKCJCdWcgOiB1bmNvbXByZXNzZWQgZGF0YSBzaXplIG1pc21hdGNo'@;
put 'Iik7cmV0dXJuIFF9fSxyZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKE4pe3ZhciBWLFo7aWYoTi5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPU4ucmVhZEludCgyKSxaPU4ucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPU4ucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxOLnNraXAo'@;
put 'WiksLTE9PXRoaXMuY29tcHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNp'@;
put 'emUgPT0gLTEgfHwgdW5jb21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KFY9SS5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uICIrSS5wcmV0dHkodGhpcy5jb21wcmVzc2lv'@;
put 'bk1ldGhvZCkrIiB1bmtub3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIpIik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IEUsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNzZWRT'@;
put 'aXplPXRoaXMudW5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhpcy5w'@;
put 'cmVwYXJlQ29tcHJlc3NlZENvbnRlbnQoTixOLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsViksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KE4sTi5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFYsdGhpcy51bmNvbXByZXNzZWRTaXplKSx0aGlz'@;
put 'LmxvYWRPcHRpb25zLmNoZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1JLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksay5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkhPT10aGlzLmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRl'@;
put 'ZCB6aXAgOiBDUkMzMiBtaXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oTil7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PU4ucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Ti5yZWFkSW50KDIpLHRoaXMuYml0RmxhZz1OLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lv'@;
put 'bk1ldGhvZD1OLnJlYWRTdHJpbmcoMiksdGhpcy5kYXRlPU4ucmVhZERhdGUoKSx0aGlzLmNyYzMyPU4ucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPU4ucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Ti5yZWFkSW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Ti5yZWFk'@;
put 'SW50KDIpLHRoaXMuZXh0cmFGaWVsZHNMZW5ndGg9Ti5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Ti5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PU4ucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9Ti5yZWFkSW50KDIpLHRoaXMuZXh0ZXJu'@;
put 'YWxGaWxlQXR0cmlidXRlcz1OLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1OLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpO3RoaXMuZmlsZU5hbWU9Ti5yZWFkU3RyaW5nKHRo'@;
put 'aXMuZmlsZU5hbWVMZW5ndGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKE4pLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoTiksdGhpcy5maWxlQ29tbWVudD1OLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0aCksdGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1'@;
put 'dGVzKX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oTil7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIFY9bmV3IFUodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRT'@;
put 'aXplPVYucmVhZEludCg4KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PUkuTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9Vi5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1W'@;
put 'LnJlYWRJbnQoOCkpLHRoaXMuZGlza051bWJlclN0YXJ0PT09SS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9Vi5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihOKXt2YXIgWixXLHosVj1OLmluZGV4O2Zvcih0aGlzLmV4dHJhRmllbGRzPXRo'@;
put 'aXMuZXh0cmFGaWVsZHN8fHt9O04uaW5kZXg8Vit0aGlzLmV4dHJhRmllbGRzTGVuZ3RoOylaPU4ucmVhZEludCgyKSxXPU4ucmVhZEludCgyKSx6PU4ucmVhZFN0cmluZyhXKSx0aGlzLmV4dHJhRmllbGRzW1pdPXtpZDpaLGxlbmd0aDpXLHZhbHVlOnp9fSxoYW5kbGVVVEY4OmZ1bmN0aW9u'@;
put 'KCl7aWYodGhpcy51c2VVVEY4KCkpdGhpcy5maWxlTmFtZT1rLnV0ZjhkZWNvZGUodGhpcy5maWxlTmFtZSksdGhpcy5maWxlQ29tbWVudD1rLnV0ZjhkZWNvZGUodGhpcy5maWxlQ29tbWVudCk7ZWxzZXt2YXIgTj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGgoKTtudWxsIT09TiYm'@;
put 'KHRoaXMuZmlsZU5hbWU9Tik7dmFyIFY9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50KCk7bnVsbCE9PVYmJih0aGlzLmZpbGVDb21tZW50PVYpfX0sZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aDpmdW5jdGlvbigpe3ZhciBOPXRoaXMuZXh0cmFGaWVsZHNbMjg3ODldO2lmKE4p'@;
put 'e3ZhciBWPW5ldyBVKE4udmFsdWUpO3JldHVybiAxIT09Vi5yZWFkSW50KDEpfHxrLmNyYzMyKHRoaXMuZmlsZU5hbWUpIT09Vi5yZWFkSW50KDQpP251bGw6ay51dGY4ZGVjb2RlKFYucmVhZFN0cmluZyhOLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNv'@;
put 'bW1lbnQ6ZnVuY3Rpb24oKXt2YXIgTj10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihOKXt2YXIgVj1uZXcgVShOLnZhbHVlKTtyZXR1cm4gMSE9PVYucmVhZEludCgxKXx8ay5jcmMzMih0aGlzLmZpbGVDb21tZW50KSE9PVYucmVhZEludCg0KT9udWxsOmsudXRmOGRlY29kZShWLnJlYWRT'@;
put 'dHJpbmcoTi5sZW5ndGgtNSkpfXJldHVybiBudWxsfX0sRC5leHBvcnRzPUJ9LHsiLi9jb21wcmVzc2VkT2JqZWN0IjoyLCIuL29iamVjdCI6MTMsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi91dGlscyI6MjF9XSwyNDpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgQj17fTsoMCxB'@;
put 'KCIuL2xpYi91dGlscy9jb21tb24iKS5hc3NpZ24pKEIsQSgiLi9saWIvZGVmbGF0ZSIpLEEoIi4vbGliL2luZmxhdGUiKSxBKCIuL2xpYi96bGliL2NvbnN0YW50cyIpKSxELmV4cG9ydHM9Qn0seyIuL2xpYi9kZWZsYXRlIjoyNSwiLi9saWIvaW5mbGF0ZSI6MjYsIi4vbGliL3V0aWxzL2Nv'@;
put 'bW1vbiI6MjcsIi4vbGliL3psaWIvY29uc3RhbnRzIjozMH1dLDI1OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vemxpYi9kZWZsYXRlLmpzIiksST1BKCIuL3V0aWxzL2NvbW1vbiIpLEU9QSgiLi91dGlscy9zdHJpbmdzIiksaz1BKCIuL3psaWIvbWVzc2FnZXMi'@;
put 'KSxCPUEoIi4vemxpYi96c3RyZWFtIiksdGU9ZnVuY3Rpb24obGUpe3RoaXMub3B0aW9ucz1JLmFzc2lnbih7bGV2ZWw6LTEsbWV0aG9kOjgsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTowLHRvOiIifSxsZXx8e30pO3ZhciBjZT10aGlzLm9wdGlv'@;
put 'bnM7Y2UucmF3JiZjZS53aW5kb3dCaXRzPjA/Y2Uud2luZG93Qml0cz0tY2Uud2luZG93Qml0czpjZS5nemlwJiZjZS53aW5kb3dCaXRzPjAmJmNlLndpbmRvd0JpdHM8MTYmJihjZS53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1'@;
put 'bmtzPVtdLHRoaXMuc3RybT1uZXcgQix0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIEc9VS5kZWZsYXRlSW5pdDIodGhpcy5zdHJtLGNlLmxldmVsLGNlLm1ldGhvZCxjZS53aW5kb3dCaXRzLGNlLm1lbUxldmVsLGNlLnN0cmF0ZWd5KTtpZigwIT09Ryl0aHJvdyBuZXcgRXJyb3Ioa1tHXSk7'@;
put 'Y2UuaGVhZGVyJiZVLmRlZmxhdGVTZXRIZWFkZXIodGhpcy5zdHJtLGNlLmhlYWRlcil9O2Z1bmN0aW9uIGFlKGxlLGNlKXt2YXIgRz1uZXcgdGUoY2UpO2lmKEcucHVzaChsZSwhMCksRy5lcnIpdGhyb3cgRy5tc2c7cmV0dXJuIEcucmVzdWx0fXRlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9u'@;
put 'KGxlLGNlKXt2YXIgTCxILEc9dGhpcy5zdHJtLHk9dGhpcy5vcHRpb25zLmNodW5rU2l6ZTtpZih0aGlzLmVuZGVkKXJldHVybiExO0g9Y2U9PT1+fmNlP2NlOiEwPT09Y2U/NDowLEcuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBsZT9FLnN0cmluZzJidWYobGUpOmxlLEcubmV4dF9pbj0wLEcu'@;
put 'YXZhaWxfaW49Ry5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PUcuYXZhaWxfb3V0JiYoRy5vdXRwdXQ9bmV3IEkuQnVmOCh5KSxHLm5leHRfb3V0PTAsRy5hdmFpbF9vdXQ9eSksMSE9PShMPVUuZGVmbGF0ZShHLEgpKSYmMCE9PUwpcmV0dXJuIHRoaXMub25FbmQoTCksdGhpcy5lbmRlZD0hMCwh'@;
put 'MTsoMD09PUcuYXZhaWxfb3V0fHwwPT09Ry5hdmFpbF9pbiYmND09PUgpJiZ0aGlzLm9uRGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9FLmJ1ZjJiaW5zdHJpbmcoSS5zaHJpbmtCdWYoRy5vdXRwdXQsRy5uZXh0X291dCkpOkkuc2hyaW5rQnVmKEcub3V0cHV0LEcubmV4dF9vdXQp'@;
put 'KX13aGlsZSgoRy5hdmFpbF9pbj4wfHwwPT09Ry5hdmFpbF9vdXQpJiYxIT09TCk7cmV0dXJuIDQhPT1IfHwoTD1VLmRlZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKEwpLHRoaXMuZW5kZWQ9ITAsMD09PUwpfSx0ZS5wcm90b3R5cGUub25EYXRhPWZ1bmN0aW9uKGxlKXt0aGlzLmNo'@;
put 'dW5rcy5wdXNoKGxlKX0sdGUucHJvdG90eXBlLm9uRW5kPWZ1bmN0aW9uKGxlKXswPT09bGUmJih0aGlzLnJlc3VsdD0ic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLmNodW5rcy5qb2luKCIiKTpJLmZsYXR0ZW5DaHVua3ModGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlz'@;
put 'LmVycj1sZSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxQLkRlZmxhdGU9dGUsUC5kZWZsYXRlPWFlLFAuZGVmbGF0ZVJhdz1mdW5jdGlvbiBzZShsZSxjZSl7cmV0dXJuKGNlPWNlfHx7fSkucmF3PSEwLGFlKGxlLGNlKX0sUC5nemlwPWZ1bmN0aW9uIGRlKGxlLGNlKXtyZXR1cm4oY2U9Y2V8'@;
put 'fHt9KS5nemlwPSEwLGFlKGxlLGNlKX19LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3Qi'@;
put 'O3ZhciBVPUEoIi4vemxpYi9pbmZsYXRlLmpzIiksST1BKCIuL3V0aWxzL2NvbW1vbiIpLEU9QSgiLi91dGlscy9zdHJpbmdzIiksaz1BKCIuL3psaWIvY29uc3RhbnRzIiksQj1BKCIuL3psaWIvbWVzc2FnZXMiKSxOPUEoIi4vemxpYi96c3RyZWFtIiksVj1BKCIuL3psaWIvZ3poZWFkZXIi'@;
put 'KSxaPWZ1bmN0aW9uKHEpe3RoaXMub3B0aW9ucz1JLmFzc2lnbih7Y2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MCx0bzoiIn0scXx8e30pO3ZhciBRPXRoaXMub3B0aW9ucztRLnJhdyYmUS53aW5kb3dCaXRzPj0wJiZRLndpbmRvd0JpdHM8MTYmJihRLndpbmRvd0JpdHM9LVEud2luZG93'@;
put 'Qml0cywwPT09US53aW5kb3dCaXRzJiYoUS53aW5kb3dCaXRzPS0xNSkpLFEud2luZG93Qml0cz49MCYmUS53aW5kb3dCaXRzPDE2JiYhKHEmJnEud2luZG93Qml0cykmJihRLndpbmRvd0JpdHMrPTMyKSxRLndpbmRvd0JpdHM+MTUmJlEud2luZG93Qml0czw0OCYmKDE1JlEud2luZG93Qml0'@;
put 'c3x8KFEud2luZG93Qml0c3w9MTUpKSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBOLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgdGU9VS5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLFEud2luZG93Qml0cyk7aWYodGUh'@;
put 'PT1rLlpfT0spdGhyb3cgbmV3IEVycm9yKEJbdGVdKTt0aGlzLmhlYWRlcj1uZXcgVixVLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gVyhxLFEpe3ZhciB0ZT1uZXcgWihRKTtpZih0ZS5wdXNoKHEsITApLHRlLmVycil0aHJvdyB0ZS5tc2c7cmV0'@;
put 'dXJuIHRlLnJlc3VsdH1aLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHEsUSl7dmFyIHNlLGRlLGxlLGNlLEcsdGU9dGhpcy5zdHJtLGFlPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtkZT1RPT09fn5RP1E6ITA9PT1RP2suWl9GSU5JU0g6ay5aX05PX0ZM'@;
put 'VVNILHRlLmlucHV0PSJzdHJpbmciPT10eXBlb2YgcT9FLmJpbnN0cmluZzJidWYocSk6cSx0ZS5uZXh0X2luPTAsdGUuYXZhaWxfaW49dGUuaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT10ZS5hdmFpbF9vdXQmJih0ZS5vdXRwdXQ9bmV3IEkuQnVmOChhZSksdGUubmV4dF9vdXQ9MCx0ZS5hdmFp'@;
put 'bF9vdXQ9YWUpLChzZT1VLmluZmxhdGUodGUsay5aX05PX0ZMVVNIKSkhPT1rLlpfU1RSRUFNX0VORCYmc2UhPT1rLlpfT0spcmV0dXJuIHRoaXMub25FbmQoc2UpLHRoaXMuZW5kZWQ9ITAsITE7dGUubmV4dF9vdXQmJigwPT09dGUuYXZhaWxfb3V0fHxzZT09PWsuWl9TVFJFQU1fRU5EfHww'@;
put 'PT09dGUuYXZhaWxfaW4mJmRlPT09ay5aX0ZJTklTSCkmJigic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz8obGU9RS51dGY4Ym9yZGVyKHRlLm91dHB1dCx0ZS5uZXh0X291dCksY2U9dGUubmV4dF9vdXQtbGUsRz1FLmJ1ZjJzdHJpbmcodGUub3V0cHV0LGxlKSx0ZS5uZXh0X291dD1jZSx0'@;
put 'ZS5hdmFpbF9vdXQ9YWUtY2UsY2UmJkkuYXJyYXlTZXQodGUub3V0cHV0LHRlLm91dHB1dCxsZSxjZSwwKSx0aGlzLm9uRGF0YShHKSk6dGhpcy5vbkRhdGEoSS5zaHJpbmtCdWYodGUub3V0cHV0LHRlLm5leHRfb3V0KSkpfXdoaWxlKHRlLmF2YWlsX2luPjAmJnNlIT09ay5aX1NUUkVBTV9F'@;
put 'TkQpO3JldHVybiBzZT09PWsuWl9TVFJFQU1fRU5EJiYoZGU9ay5aX0ZJTklTSCksZGUhPT1rLlpfRklOSVNIfHwoc2U9VS5pbmZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChzZSksdGhpcy5lbmRlZD0hMCxzZT09PWsuWl9PSyl9LFoucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihx'@;
put 'KXt0aGlzLmNodW5rcy5wdXNoKHEpfSxaLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihxKXtxPT09ay5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6SS5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVu'@;
put 'a3M9W10sdGhpcy5lcnI9cSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxQLkluZmxhdGU9WixQLmluZmxhdGU9VyxQLmluZmxhdGVSYXc9ZnVuY3Rpb24geihxLFEpe3JldHVybihRPVF8fHt9KS5yYXc9ITAsVyhxLFEpfSxQLnVuZ3ppcD1XfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGls'@;
put 'cy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7dmFyIFU9dHlw'@;
put 'ZW9mIFVpbnQ4QXJyYXk8InUiJiZ0eXBlb2YgVWludDE2QXJyYXk8InUiJiZ0eXBlb2YgSW50MzJBcnJheTwidSI7UC5hc3NpZ249ZnVuY3Rpb24oayl7Zm9yKHZhciBCPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtCLmxlbmd0aDspe3ZhciBOPUIuc2hpZnQoKTtp'@;
put 'ZihOKXtpZigib2JqZWN0IiE9dHlwZW9mIE4pdGhyb3cgbmV3IFR5cGVFcnJvcihOKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIFYgaW4gTilOLmhhc093blByb3BlcnR5KFYpJiYoa1tWXT1OW1ZdKX19cmV0dXJuIGt9LFAuc2hyaW5rQnVmPWZ1bmN0aW9uKGssQil7cmV0dXJuIGsu'@;
put 'bGVuZ3RoPT09Qj9rOmsuc3ViYXJyYXk/ay5zdWJhcnJheSgwLEIpOihrLmxlbmd0aD1CLGspfTt2YXIgST17YXJyYXlTZXQ6ZnVuY3Rpb24oayxCLE4sVixaKXtpZihCLnN1YmFycmF5JiZrLnN1YmFycmF5KWsuc2V0KEIuc3ViYXJyYXkoTixOK1YpLFopO2Vsc2UgZm9yKHZhciBXPTA7VzxW'@;
put 'O1crKylrW1orV109QltOK1ddfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKGspe3ZhciBCLE4sVixaLFcsejtmb3IoVj0wLEI9MCxOPWsubGVuZ3RoO0I8TjtCKyspVis9a1tCXS5sZW5ndGg7Zm9yKHo9bmV3IFVpbnQ4QXJyYXkoViksWj0wLEI9MCxOPWsubGVuZ3RoO0I8TjtCKyspei5zZXQo'@;
put 'Vz1rW0JdLFopLForPVcubGVuZ3RoO3JldHVybiB6fX0sRT17YXJyYXlTZXQ6ZnVuY3Rpb24oayxCLE4sVixaKXtmb3IodmFyIFc9MDtXPFY7VysrKWtbWitXXT1CW04rV119LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oayl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGspfX07UC5zZXRUeXBl'@;
put 'ZD1mdW5jdGlvbihrKXtrPyhQLkJ1Zjg9VWludDhBcnJheSxQLkJ1ZjE2PVVpbnQxNkFycmF5LFAuQnVmMzI9SW50MzJBcnJheSxQLmFzc2lnbihQLEkpKTooUC5CdWY4PUFycmF5LFAuQnVmMTY9QXJyYXksUC5CdWYzMj1BcnJheSxQLmFzc2lnbihQLEUpKX0sUC5zZXRUeXBlZChVKX0se31d'@;
put 'LDI4OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4vY29tbW9uIiksST0hMCxFPSEwO3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsWzBdKX1jYXRjaHtJPSExfXRyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXko'@;
put 'MSkpfWNhdGNoe0U9ITF9Zm9yKHZhciBrPW5ldyBVLkJ1ZjgoMjU2KSxCPTA7QjwyNTY7QisrKWtbQl09Qj49MjUyPzY6Qj49MjQ4PzU6Qj49MjQwPzQ6Qj49MjI0PzM6Qj49MTkyPzI6MTtmdW5jdGlvbiBOKFYsWil7aWYoWjw2NTUzNyYmKFYuc3ViYXJyYXkmJkV8fCFWLnN1YmFycmF5JiZJ'@;
put 'KSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFUuc2hyaW5rQnVmKFYsWikpO2Zvcih2YXIgVz0iIix6PTA7ejxaO3orKylXKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFZbel0pO3JldHVybiBXfWtbMjU0XT1rWzI1NF09MSxQLnN0cmluZzJidWY9ZnVuY3Rpb24oVil7dmFy'@;
put 'IFosVyx6LHEsUSx0ZT1WLmxlbmd0aCxhZT0wO2ZvcihxPTA7cTx0ZTtxKyspNTUyOTY9PSg2NDUxMiYoVz1WLmNoYXJDb2RlQXQocSkpKSYmcSsxPHRlJiY1NjMyMD09KDY0NTEyJih6PVYuY2hhckNvZGVBdChxKzEpKSkmJihXPTY1NTM2KyhXLTU1Mjk2PDwxMCkrKHotNTYzMjApLHErKyks'@;
put 'YWUrPVc8MTI4PzE6VzwyMDQ4PzI6Vzw2NTUzNj8zOjQ7Zm9yKFo9bmV3IFUuQnVmOChhZSksUT0wLHE9MDtRPGFlO3ErKyk1NTI5Nj09KDY0NTEyJihXPVYuY2hhckNvZGVBdChxKSkpJiZxKzE8dGUmJjU2MzIwPT0oNjQ1MTImKHo9Vi5jaGFyQ29kZUF0KHErMSkpKSYmKFc9NjU1MzYrKFct'@;
put 'NTUyOTY8PDEwKSsoei01NjMyMCkscSsrKSxXPDEyOD9aW1ErK109VzpXPDIwNDg/KFpbUSsrXT0xOTJ8Vz4+PjYsWltRKytdPTEyOHw2MyZXKTpXPDY1NTM2PyhaW1ErK109MjI0fFc+Pj4xMixaW1ErK109MTI4fFc+Pj42JjYzLFpbUSsrXT0xMjh8NjMmVyk6KFpbUSsrXT0yNDB8Vz4+PjE4'@;
put 'LFpbUSsrXT0xMjh8Vz4+PjEyJjYzLFpbUSsrXT0xMjh8Vz4+PjYmNjMsWltRKytdPTEyOHw2MyZXKTtyZXR1cm4gWn0sUC5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKFYpe3JldHVybiBOKFYsVi5sZW5ndGgpfSxQLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oVil7Zm9yKHZhciBaPW5ldyBVLkJ1'@;
put 'ZjgoVi5sZW5ndGgpLFc9MCx6PVoubGVuZ3RoO1c8ejtXKyspWltXXT1WLmNoYXJDb2RlQXQoVyk7cmV0dXJuIFp9LFAuYnVmMnN0cmluZz1mdW5jdGlvbihWLFope3ZhciBXLHoscSxRLHRlPVp8fFYubGVuZ3RoLGFlPW5ldyBBcnJheSgyKnRlKTtmb3Ioej0wLFc9MDtXPHRlOylpZigocT1W'@;
put 'W1crK10pPDEyOClhZVt6KytdPXE7ZWxzZSBpZigoUT1rW3FdKT40KWFlW3orK109NjU1MzMsVys9US0xO2Vsc2V7Zm9yKHEmPTI9PT1RPzMxOjM9PT1RPzE1Ojc7UT4xJiZXPHRlOylxPXE8PDZ8NjMmVltXKytdLFEtLTtRPjE/YWVbeisrXT02NTUzMzpxPDY1NTM2P2FlW3orK109cTooYWVb'@;
put 'eisrXT01NTI5NnwocS09NjU1MzYpPj4xMCYxMDIzLGFlW3orK109NTYzMjB8MTAyMyZxKX1yZXR1cm4gTihhZSx6KX0sUC51dGY4Ym9yZGVyPWZ1bmN0aW9uKFYsWil7dmFyIFc7Zm9yKChaPVp8fFYubGVuZ3RoKT5WLmxlbmd0aCYmKFo9Vi5sZW5ndGgpLFc9Wi0xO1c+PTAmJjEyOD09KDE5'@;
put 'MiZWW1ddKTspVy0tO3JldHVybiBXPDB8fDA9PT1XP1o6VytrW1ZbV11dPlo/VzpafX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0IjtELmV4cG9ydHM9ZnVuY3Rpb24gVShJLEUsayxCKXtmb3IodmFyIE49NjU1MzUmSSxWPUk+Pj4xNiY2NTUzNSxa'@;
put 'PTA7MCE9PWs7KXtrLT1aPWs+MmUzPzJlMzprO2Rve1Y9VisoTj1OK0VbQisrXXwwKXwwfXdoaWxlKC0tWik7TiU9NjU1MjEsViU9NjU1MjF9cmV0dXJuIE58Vjw8MTZ9fSx7fV0sMzA6W2Z1bmN0aW9uKEEsRCxQKXtELmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxa'@;
put 'X1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01Q'@;
put 'UkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5L'@;
put 'Tk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSwzMTpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgST1mdW5jdGlvbiBVKCl7Zm9yKHZhciBrLEI9W10sTj0wO048MjU2O04rKyl7az1OO2Zvcih2YXIgVj0wO1Y8ODtWKyspaz0xJms/Mzk4ODI5MjM4NF5rPj4+MTprPj4+MTtCW05d'@;
put 'PWt9cmV0dXJuIEJ9KCk7RC5leHBvcnRzPWZ1bmN0aW9uIEUoayxCLE4sVil7dmFyIFo9SSxXPVYrTjtrPX5rO2Zvcih2YXIgej1WO3o8Vzt6Kyspaz1rPj4+OF5aWzI1NSYoa15CW3pdKV07cmV0dXJufmt9fSx7fV0sMzI6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7dmFyIFU9QSgi'@;
put 'Li4vdXRpbHMvY29tbW9uIiksST1BKCIuL3RyZWVzIiksRT1BKCIuL2FkbGVyMzIiKSxrPUEoIi4vY3JjMzIiKSxCPUEoIi4vbWVzc2FnZXMiKSxOPTAscT0wLHRlPS0yLEg9MixqPTgsQz0yODYsSz0zMCxuZT0xOSx1ZT0yKkMrMSxoZT0xNSx4ZT0zLE9lPTI1OCxIZT1PZSt4ZSsxLExlPTQy'@;
put 'LGF0PTExMztmdW5jdGlvbiBHZShydCxFdCl7cmV0dXJuIHJ0Lm1zZz1CW0V0XSxFdH1mdW5jdGlvbiBkdChydCl7cmV0dXJuKHJ0PDwxKS0ocnQ+ND85OjApfWZ1bmN0aW9uIFRlKHJ0KXtmb3IodmFyIEV0PXJ0Lmxlbmd0aDstLUV0Pj0wOylydFtFdF09MH1mdW5jdGlvbiBBZShydCl7dmFy'@;
put 'IEV0PXJ0LnN0YXRlLFF0PUV0LnBlbmRpbmc7UXQ+cnQuYXZhaWxfb3V0JiYoUXQ9cnQuYXZhaWxfb3V0KSwwIT09UXQmJihVLmFycmF5U2V0KHJ0Lm91dHB1dCxFdC5wZW5kaW5nX2J1ZixFdC5wZW5kaW5nX291dCxRdCxydC5uZXh0X291dCkscnQubmV4dF9vdXQrPVF0LEV0LnBlbmRpbmdf'@;
put 'b3V0Kz1RdCxydC50b3RhbF9vdXQrPVF0LHJ0LmF2YWlsX291dC09UXQsRXQucGVuZGluZy09UXQsMD09PUV0LnBlbmRpbmcmJihFdC5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gQmUocnQsRXQpe0kuX3RyX2ZsdXNoX2Jsb2NrKHJ0LHJ0LmJsb2NrX3N0YXJ0Pj0wP3J0LmJsb2NrX3N0YXJ0'@;
put 'Oi0xLHJ0LnN0cnN0YXJ0LXJ0LmJsb2NrX3N0YXJ0LEV0KSxydC5ibG9ja19zdGFydD1ydC5zdHJzdGFydCxBZShydC5zdHJtKX1mdW5jdGlvbiBvdChydCxFdCl7cnQucGVuZGluZ19idWZbcnQucGVuZGluZysrXT1FdH1mdW5jdGlvbiBsdChydCxFdCl7cnQucGVuZGluZ19idWZbcnQucGVu'@;
put 'ZGluZysrXT1FdD4+PjgmMjU1LHJ0LnBlbmRpbmdfYnVmW3J0LnBlbmRpbmcrK109MjU1JkV0fWZ1bmN0aW9uIEN0KHJ0LEV0LFF0LFR0KXt2YXIgbXQ9cnQuYXZhaWxfaW47cmV0dXJuIG10PlR0JiYobXQ9VHQpLDA9PT1tdD8wOihydC5hdmFpbF9pbi09bXQsVS5hcnJheVNldChFdCxydC5p'@;
put 'bnB1dCxydC5uZXh0X2luLG10LFF0KSwxPT09cnQuc3RhdGUud3JhcD9ydC5hZGxlcj1FKHJ0LmFkbGVyLEV0LG10LFF0KToyPT09cnQuc3RhdGUud3JhcCYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsRXQsbXQsUXQpKSxydC5uZXh0X2luKz1tdCxydC50b3RhbF9pbis9bXQsbXQpfWZ1bmN0aW9u'@;
put 'IEZ0KHJ0LEV0KXt2YXIgbXQsR3QsUXQ9cnQubWF4X2NoYWluX2xlbmd0aCxUdD1ydC5zdHJzdGFydCxrbj1ydC5wcmV2X2xlbmd0aCxCdD1ydC5uaWNlX21hdGNoLGJuPXJ0LnN0cnN0YXJ0PnJ0Lndfc2l6ZS1IZT9ydC5zdHJzdGFydC0ocnQud19zaXplLUhlKTowLENuPXJ0LndpbmRvdyxl'@;
put 'bj1ydC53X21hc2ssUG49cnQucHJldix3bj1ydC5zdHJzdGFydCtPZSwkdD1DbltUdCtrbi0xXSxXbj1DbltUdCtrbl07cnQucHJldl9sZW5ndGg+PXJ0Lmdvb2RfbWF0Y2gmJihRdD4+PTIpLEJ0PnJ0Lmxvb2thaGVhZCYmKEJ0PXJ0Lmxvb2thaGVhZCk7ZG97aWYoQ25bKG10PUV0KStrbl09'@;
put 'PT1XbiYmQ25bbXQra24tMV09PT0kdCYmQ25bbXRdPT09Q25bVHRdJiZDblsrK210XT09PUNuW1R0KzFdKXtUdCs9MixtdCsrO2Rve313aGlsZShDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRd'@;
put 'JiZDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRdJiZDblsrK1R0XT09PUNuWysrbXRdJiZUdDx3bik7aWYoR3Q9T2UtKHduLVR0KSxUdD13bi1PZSxHdD5rbil7aWYocnQubWF0Y2hfc3RhcnQ9RXQsa249R3QsR3Q+PUJ0KWJyZWFr'@;
put 'OyR0PUNuW1R0K2tuLTFdLFduPUNuW1R0K2tuXX19fXdoaWxlKChFdD1QbltFdCZlbl0pPmJuJiYwIT0tLVF0KTtyZXR1cm4ga248PXJ0Lmxvb2thaGVhZD9rbjpydC5sb29rYWhlYWR9ZnVuY3Rpb24gUnQocnQpe3ZhciBRdCxUdCxtdCxHdCxrbixFdD1ydC53X3NpemU7ZG97aWYoR3Q9cnQu'@;
put 'd2luZG93X3NpemUtcnQubG9va2FoZWFkLXJ0LnN0cnN0YXJ0LHJ0LnN0cnN0YXJ0Pj1FdCsoRXQtSGUpKXtVLmFycmF5U2V0KHJ0LndpbmRvdyxydC53aW5kb3csRXQsRXQsMCkscnQubWF0Y2hfc3RhcnQtPUV0LHJ0LnN0cnN0YXJ0LT1FdCxydC5ibG9ja19zdGFydC09RXQsUXQ9VHQ9cnQu'@;
put 'aGFzaF9zaXplO2Rve210PXJ0LmhlYWRbLS1RdF0scnQuaGVhZFtRdF09bXQ+PUV0P210LUV0OjB9d2hpbGUoLS1UdCk7UXQ9VHQ9RXQ7ZG97bXQ9cnQucHJldlstLVF0XSxydC5wcmV2W1F0XT1tdD49RXQ/bXQtRXQ6MH13aGlsZSgtLVR0KTtHdCs9RXR9aWYoMD09PXJ0LnN0cm0uYXZhaWxf'@;
put 'aW4pYnJlYWs7aWYoVHQ9Q3QocnQuc3RybSxydC53aW5kb3cscnQuc3Ryc3RhcnQrcnQubG9va2FoZWFkLEd0KSxydC5sb29rYWhlYWQrPVR0LHJ0Lmxvb2thaGVhZCtydC5pbnNlcnQ+PXhlKWZvcihydC5pbnNfaD1ydC53aW5kb3dba249cnQuc3Ryc3RhcnQtcnQuaW5zZXJ0XSxydC5pbnNf'@;
put 'aD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W2tuKzFdKSZydC5oYXNoX21hc2s7cnQuaW5zZXJ0JiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1trbit4ZS0xXSkmcnQuaGFzaF9tYXNrLHJ0LnByZXZba24mcnQud19tYXNrXT1ydC5oZWFk'@;
put 'W3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1rbixrbisrLHJ0Lmluc2VydC0tLCEocnQubG9va2FoZWFkK3J0Lmluc2VydDx4ZSkpOyk7fXdoaWxlKHJ0Lmxvb2thaGVhZDxIZSYmMCE9PXJ0LnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIFNuKHJ0LEV0KXtmb3IodmFyIFF0LFR0Ozspe2lm'@;
put 'KHJ0Lmxvb2thaGVhZDxIZSl7aWYoUnQocnQpLHJ0Lmxvb2thaGVhZDxIZSYmRXQ9PT1OKXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9aWYoUXQ9MCxydC5sb29rYWhlYWQ+PXhlJiYocnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJz'@;
put 'dGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5oZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydCksMCE9PVF0JiZydC5zdHJzdGFydC1RdDw9cnQud19zaXplLUhlJiYocnQubWF0Y2hfbGVuZ3RoPUZ0'@;
put 'KHJ0LFF0KSkscnQubWF0Y2hfbGVuZ3RoPj14ZSlpZihUdD1JLl90cl90YWxseShydCxydC5zdHJzdGFydC1ydC5tYXRjaF9zdGFydCxydC5tYXRjaF9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aDw9cnQubWF4X2xhenlfbWF0Y2gmJnJ0'@;
put 'Lmxvb2thaGVhZD49eGUpe3J0Lm1hdGNoX2xlbmd0aC0tO2Rve3J0LnN0cnN0YXJ0KysscnQuaW5zX2g9KHJ0Lmluc19oPDxydC5oYXNoX3NoaWZ0XnJ0LndpbmRvd1tydC5zdHJzdGFydCt4ZS0xXSkmcnQuaGFzaF9tYXNrLFF0PXJ0LnByZXZbcnQuc3Ryc3RhcnQmcnQud19tYXNrXT1ydC5o'@;
put 'ZWFkW3J0Lmluc19oXSxydC5oZWFkW3J0Lmluc19oXT1ydC5zdHJzdGFydH13aGlsZSgwIT0tLXJ0Lm1hdGNoX2xlbmd0aCk7cnQuc3Ryc3RhcnQrK31lbHNlIHJ0LnN0cnN0YXJ0Kz1ydC5tYXRjaF9sZW5ndGgscnQubWF0Y2hfbGVuZ3RoPTAscnQuaW5zX2g9cnQud2luZG93W3J0LnN0cnN0'@;
put 'YXJ0XSxydC5pbnNfaD0ocnQuaW5zX2g8PHJ0Lmhhc2hfc2hpZnRecnQud2luZG93W3J0LnN0cnN0YXJ0KzFdKSZydC5oYXNoX21hc2s7ZWxzZSBUdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0Kys7aWYoVHQmJihC'@;
put 'ZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PXJ0LnN0cnN0YXJ0PHhlLTE/cnQuc3Ryc3RhcnQ6eGUtMSw0PT09RXQ/KEJlKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKEJlKHJ0LCExKSwwPT09'@;
put 'cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn1mdW5jdGlvbiB6dChydCxFdCl7Zm9yKHZhciBRdCxUdCxtdDs7KXtpZihydC5sb29rYWhlYWQ8SGUpe2lmKFJ0KHJ0KSxydC5sb29rYWhlYWQ8SGUmJkV0PT09TilyZXR1cm4gMTtpZigwPT09cnQubG9va2FoZWFkKWJyZWFrfWlmKFF0PTAscnQubG9v'@;
put 'a2FoZWFkPj14ZSYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVhZFtydC5pbnNfaF09cnQuc3Ry'@;
put 'c3RhcnQpLHJ0LnByZXZfbGVuZ3RoPXJ0Lm1hdGNoX2xlbmd0aCxydC5wcmV2X21hdGNoPXJ0Lm1hdGNoX3N0YXJ0LHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLDAhPT1RdCYmcnQucHJldl9sZW5ndGg8cnQubWF4X2xhenlfbWF0Y2gmJnJ0LnN0cnN0YXJ0LVF0PD1ydC53X3NpemUtSGUmJihydC5t'@;
put 'YXRjaF9sZW5ndGg9RnQocnQsUXQpLHJ0Lm1hdGNoX2xlbmd0aDw9NSYmKDE9PT1ydC5zdHJhdGVneXx8cnQubWF0Y2hfbGVuZ3RoPT09eGUmJnJ0LnN0cnN0YXJ0LXJ0Lm1hdGNoX3N0YXJ0PjQwOTYpJiYocnQubWF0Y2hfbGVuZ3RoPXhlLTEpKSxydC5wcmV2X2xlbmd0aD49eGUmJnJ0Lm1h'@;
put 'dGNoX2xlbmd0aDw9cnQucHJldl9sZW5ndGgpe210PXJ0LnN0cnN0YXJ0K3J0Lmxvb2thaGVhZC14ZSxUdD1JLl90cl90YWxseShydCxydC5zdHJzdGFydC0xLXJ0LnByZXZfbWF0Y2gscnQucHJldl9sZW5ndGgteGUpLHJ0Lmxvb2thaGVhZC09cnQucHJldl9sZW5ndGgtMSxydC5wcmV2X2xl'@;
put 'bmd0aC09Mjtkb3srK3J0LnN0cnN0YXJ0PD1tdCYmKHJ0Lmluc19oPShydC5pbnNfaDw8cnQuaGFzaF9zaGlmdF5ydC53aW5kb3dbcnQuc3Ryc3RhcnQreGUtMV0pJnJ0Lmhhc2hfbWFzayxRdD1ydC5wcmV2W3J0LnN0cnN0YXJ0JnJ0LndfbWFza109cnQuaGVhZFtydC5pbnNfaF0scnQuaGVh'@;
put 'ZFtydC5pbnNfaF09cnQuc3Ryc3RhcnQpfXdoaWxlKDAhPS0tcnQucHJldl9sZW5ndGgpO2lmKHJ0Lm1hdGNoX2F2YWlsYWJsZT0wLHJ0Lm1hdGNoX2xlbmd0aD14ZS0xLHJ0LnN0cnN0YXJ0KyssVHQmJihCZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlm'@;
put 'KHJ0Lm1hdGNoX2F2YWlsYWJsZSl7aWYoKFR0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0LTFdKSkmJkJlKHJ0LCExKSxydC5zdHJzdGFydCsrLHJ0Lmxvb2thaGVhZC0tLDA9PT1ydC5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIHJ0Lm1hdGNoX2F2YWlsYWJs'@;
put 'ZT0xLHJ0LnN0cnN0YXJ0KysscnQubG9va2FoZWFkLS19cmV0dXJuIHJ0Lm1hdGNoX2F2YWlsYWJsZSYmKFR0PUkuX3RyX3RhbGx5KHJ0LDAscnQud2luZG93W3J0LnN0cnN0YXJ0LTFdKSxydC5tYXRjaF9hdmFpbGFibGU9MCkscnQuaW5zZXJ0PXJ0LnN0cnN0YXJ0PHhlLTE/cnQuc3Ryc3Rh'@;
put 'cnQ6eGUtMSw0PT09RXQ/KEJlKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKEJlKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpPzE6Mn12YXIgWm4sdG49ZnVuY3Rpb24ocnQsRXQsUXQsVHQsbXQpe3RoaXMuZ29vZF9sZW5ndGg9cnQsdGhpcy5t'@;
put 'YXhfbGF6eT1FdCx0aGlzLm5pY2VfbGVuZ3RoPVF0LHRoaXMubWF4X2NoYWluPVR0LHRoaXMuZnVuYz1tdH07ZnVuY3Rpb24gcHQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdf'@;
put 'b3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1qLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2lu'@;
put 'ZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhp'@;
put 'cy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVs'@;
put 'PTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBVLkJ1ZjE2KDIqdWUpLHRoaXMuZHluX2R0cmVlPW5ldyBVLkJ1ZjE2KDIqKDIqSysxKSksdGhpcy5ibF90cmVlPW5ldyBVLkJ1ZjE2KDIqKDIqbmUrMSkpLFRl'@;
put 'KHRoaXMuZHluX2x0cmVlKSxUZSh0aGlzLmR5bl9kdHJlZSksVGUodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgVS5CdWYxNihoZSsxKSx0aGlzLmhlYXA9bmV3IFUuQnVmMTYoMipDKzEp'@;
put 'LFRlKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBVLkJ1ZjE2KDIqQysxKSxUZSh0aGlzLmRlcHRoKSx0aGlzLmxfYnVmPTAsdGhpcy5saXRfYnVmc2l6ZT0wLHRoaXMubGFzdF9saXQ9MCx0aGlzLmRfYnVmPTAsdGhpcy5vcHRfbGVu'@;
put 'PTAsdGhpcy5zdGF0aWNfbGVuPTAsdGhpcy5tYXRjaGVzPTAsdGhpcy5pbnNlcnQ9MCx0aGlzLmJpX2J1Zj0wLHRoaXMuYmlfdmFsaWQ9MH1mdW5jdGlvbiBmbihydCl7dmFyIEV0O3JldHVybiBydCYmcnQuc3RhdGU/KHJ0LnRvdGFsX2luPXJ0LnRvdGFsX291dD0wLHJ0LmRhdGFfdHlwZT1I'@;
put 'LChFdD1ydC5zdGF0ZSkucGVuZGluZz0wLEV0LnBlbmRpbmdfb3V0PTAsRXQud3JhcDwwJiYoRXQud3JhcD0tRXQud3JhcCksRXQuc3RhdHVzPUV0LndyYXA/TGU6YXQscnQuYWRsZXI9Mj09PUV0LndyYXA/MDoxLEV0Lmxhc3RfZmx1c2g9TixJLl90cl9pbml0KEV0KSxxKTpHZShydCx0ZSl9'@;
put 'ZnVuY3Rpb24gZG4ocnQpe3ZhciBFdD1mbihydCk7cmV0dXJuIEV0PT09cSYmZnVuY3Rpb24gT24ocnQpe3J0LndpbmRvd19zaXplPTIqcnQud19zaXplLFRlKHJ0LmhlYWQpLHJ0Lm1heF9sYXp5X21hdGNoPVpuW3J0LmxldmVsXS5tYXhfbGF6eSxydC5nb29kX21hdGNoPVpuW3J0LmxldmVs'@;
put 'XS5nb29kX2xlbmd0aCxydC5uaWNlX21hdGNoPVpuW3J0LmxldmVsXS5uaWNlX2xlbmd0aCxydC5tYXhfY2hhaW5fbGVuZ3RoPVpuW3J0LmxldmVsXS5tYXhfY2hhaW4scnQuc3Ryc3RhcnQ9MCxydC5ibG9ja19zdGFydD0wLHJ0Lmxvb2thaGVhZD0wLHJ0Lmluc2VydD0wLHJ0Lm1hdGNoX2xl'@;
put 'bmd0aD1ydC5wcmV2X2xlbmd0aD14ZS0xLHJ0Lm1hdGNoX2F2YWlsYWJsZT0wLHJ0Lmluc19oPTB9KHJ0LnN0YXRlKSxFdH1mdW5jdGlvbiBZdChydCxFdCxRdCxUdCxtdCxHdCl7aWYoIXJ0KXJldHVybiB0ZTt2YXIga249MTtpZigtMT09PUV0JiYoRXQ9NiksVHQ8MD8oa249MCxUdD0tVHQp'@;
put 'OlR0PjE1JiYoa249MixUdC09MTYpLG10PDF8fG10Pjl8fFF0IT09anx8VHQ8OHx8VHQ+MTV8fEV0PDB8fEV0Pjl8fEd0PDB8fEd0PjQpcmV0dXJuIEdlKHJ0LHRlKTs4PT09VHQmJihUdD05KTt2YXIgQnQ9bmV3IHB0O3JldHVybiBydC5zdGF0ZT1CdCxCdC5zdHJtPXJ0LEJ0LndyYXA9a24s'@;
put 'QnQuZ3poZWFkPW51bGwsQnQud19iaXRzPVR0LEJ0Lndfc2l6ZT0xPDxCdC53X2JpdHMsQnQud19tYXNrPUJ0Lndfc2l6ZS0xLEJ0Lmhhc2hfYml0cz1tdCs3LEJ0Lmhhc2hfc2l6ZT0xPDxCdC5oYXNoX2JpdHMsQnQuaGFzaF9tYXNrPUJ0Lmhhc2hfc2l6ZS0xLEJ0Lmhhc2hfc2hpZnQ9fn4o'@;
put 'KEJ0Lmhhc2hfYml0cyt4ZS0xKS94ZSksQnQud2luZG93PW5ldyBVLkJ1ZjgoMipCdC53X3NpemUpLEJ0LmhlYWQ9bmV3IFUuQnVmMTYoQnQuaGFzaF9zaXplKSxCdC5wcmV2PW5ldyBVLkJ1ZjE2KEJ0Lndfc2l6ZSksQnQubGl0X2J1ZnNpemU9MTw8bXQrNixCdC5wZW5kaW5nX2J1Zl9zaXpl'@;
put 'PTQqQnQubGl0X2J1ZnNpemUsQnQucGVuZGluZ19idWY9bmV3IFUuQnVmOChCdC5wZW5kaW5nX2J1Zl9zaXplKSxCdC5kX2J1Zj1CdC5saXRfYnVmc2l6ZT4+MSxCdC5sX2J1Zj0zKkJ0LmxpdF9idWZzaXplLEJ0LmxldmVsPUV0LEJ0LnN0cmF0ZWd5PUd0LEJ0Lm1ldGhvZD1RdCxkbihydCl9'@;
put 'Wm49W25ldyB0bigwLDAsMCwwLGZ1bmN0aW9uIFh0KHJ0LEV0KXt2YXIgUXQ9NjU1MzU7Zm9yKFF0PnJ0LnBlbmRpbmdfYnVmX3NpemUtNSYmKFF0PXJ0LnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYocnQubG9va2FoZWFkPD0xKXtpZihSdChydCksMD09PXJ0Lmxvb2thaGVhZCYmRXQ9PT1O'@;
put 'KXJldHVybiAxO2lmKDA9PT1ydC5sb29rYWhlYWQpYnJlYWt9cnQuc3Ryc3RhcnQrPXJ0Lmxvb2thaGVhZCxydC5sb29rYWhlYWQ9MDt2YXIgVHQ9cnQuYmxvY2tfc3RhcnQrUXQ7aWYoKDA9PT1ydC5zdHJzdGFydHx8cnQuc3Ryc3RhcnQ+PVR0KSYmKHJ0Lmxvb2thaGVhZD1ydC5zdHJzdGFy'@;
put 'dC1UdCxydC5zdHJzdGFydD1UdCxCZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KXx8cnQuc3Ryc3RhcnQtcnQuYmxvY2tfc3RhcnQ+PXJ0Lndfc2l6ZS1IZSYmKEJlKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09RXQ/'@;
put 'KEJlKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KToocnQuc3Ryc3RhcnQ+cnQuYmxvY2tfc3RhcnQmJkJlKHJ0LCExKSwxKX0pLG5ldyB0big0LDQsOCw0LFNuKSxuZXcgdG4oNCw1LDE2LDgsU24pLG5ldyB0big0LDYsMzIsMzIsU24pLG5ldyB0big0LDQsMTYsMTYsenQpLG5l'@;
put 'dyB0big4LDE2LDMyLDMyLHp0KSxuZXcgdG4oOCwxNiwxMjgsMTI4LHp0KSxuZXcgdG4oOCwzMiwxMjgsMjU2LHp0KSxuZXcgdG4oMzIsMTI4LDI1OCwxMDI0LHp0KSxuZXcgdG4oMzIsMjU4LDI1OCw0MDk2LHp0KV0sUC5kZWZsYXRlSW5pdD1mdW5jdGlvbiBfdChydCxFdCl7cmV0dXJuIFl0'@;
put 'KHJ0LEV0LGosMTUsOCwwKX0sUC5kZWZsYXRlSW5pdDI9WXQsUC5kZWZsYXRlUmVzZXQ9ZG4sUC5kZWZsYXRlUmVzZXRLZWVwPWZuLFAuZGVmbGF0ZVNldEhlYWRlcj1mdW5jdGlvbiBNdChydCxFdCl7cmV0dXJuIHJ0JiZydC5zdGF0ZSYmMj09PXJ0LnN0YXRlLndyYXA/KHJ0LnN0YXRlLmd6'@;
put 'aGVhZD1FdCxxKTp0ZX0sUC5kZWZsYXRlPWZ1bmN0aW9uIGp0KHJ0LEV0KXt2YXIgUXQsVHQsbXQsR3Q7aWYoIXJ0fHwhcnQuc3RhdGV8fEV0PjV8fEV0PDApcmV0dXJuIHJ0P0dlKHJ0LHRlKTp0ZTtpZihUdD1ydC5zdGF0ZSwhcnQub3V0cHV0fHwhcnQuaW5wdXQmJjAhPT1ydC5hdmFpbF9p'@;
put 'bnx8NjY2PT09VHQuc3RhdHVzJiY0IT09RXQpcmV0dXJuIEdlKHJ0LDA9PT1ydC5hdmFpbF9vdXQ/LTU6dGUpO2lmKFR0LnN0cm09cnQsUXQ9VHQubGFzdF9mbHVzaCxUdC5sYXN0X2ZsdXNoPUV0LFR0LnN0YXR1cz09PUxlKWlmKDI9PT1UdC53cmFwKXJ0LmFkbGVyPTAsb3QoVHQsMzEpLG90'@;
put 'KFR0LDEzOSksb3QoVHQsOCksVHQuZ3poZWFkPyhvdChUdCwoVHQuZ3poZWFkLnRleHQ/MTowKSsoVHQuZ3poZWFkLmhjcmM/MjowKSsoVHQuZ3poZWFkLmV4dHJhPzQ6MCkrKFR0Lmd6aGVhZC5uYW1lPzg6MCkrKFR0Lmd6aGVhZC5jb21tZW50PzE2OjApKSxvdChUdCwyNTUmVHQuZ3poZWFk'@;
put 'LnRpbWUpLG90KFR0LFR0Lmd6aGVhZC50aW1lPj44JjI1NSksb3QoVHQsVHQuZ3poZWFkLnRpbWU+PjE2JjI1NSksb3QoVHQsVHQuZ3poZWFkLnRpbWU+PjI0JjI1NSksb3QoVHQsOT09PVR0LmxldmVsPzI6VHQuc3RyYXRlZ3k+PTJ8fFR0LmxldmVsPDI/NDowKSxvdChUdCwyNTUmVHQuZ3po'@;
put 'ZWFkLm9zKSxUdC5nemhlYWQuZXh0cmEmJlR0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihvdChUdCwyNTUmVHQuZ3poZWFkLmV4dHJhLmxlbmd0aCksb3QoVHQsVHQuZ3poZWFkLmV4dHJhLmxlbmd0aD4+OCYyNTUpKSxUdC5nemhlYWQuaGNyYyYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsVHQucGVu'@;
put 'ZGluZ19idWYsVHQucGVuZGluZywwKSksVHQuZ3ppbmRleD0wLFR0LnN0YXR1cz02OSk6KG90KFR0LDApLG90KFR0LDApLG90KFR0LDApLG90KFR0LDApLG90KFR0LDApLG90KFR0LDk9PT1UdC5sZXZlbD8yOlR0LnN0cmF0ZWd5Pj0yfHxUdC5sZXZlbDwyPzQ6MCksb3QoVHQsMyksVHQuc3Rh'@;
put 'dHVzPWF0KTtlbHNle3ZhciBrbj1qKyhUdC53X2JpdHMtODw8NCk8PDg7a258PShUdC5zdHJhdGVneT49Mnx8VHQubGV2ZWw8Mj8wOlR0LmxldmVsPDY/MTo2PT09VHQubGV2ZWw/MjozKTw8NiwwIT09VHQuc3Ryc3RhcnQmJihrbnw9MzIpLGtuKz0zMS1rbiUzMSxUdC5zdGF0dXM9YXQsbHQo'@;
put 'VHQsa24pLDAhPT1UdC5zdHJzdGFydCYmKGx0KFR0LHJ0LmFkbGVyPj4+MTYpLGx0KFR0LDY1NTM1JnJ0LmFkbGVyKSkscnQuYWRsZXI9MX1pZig2OT09PVR0LnN0YXR1cylpZihUdC5nemhlYWQuZXh0cmEpe2ZvcihtdD1UdC5wZW5kaW5nO1R0Lmd6aW5kZXg8KDY1NTM1JlR0Lmd6aGVhZC5l'@;
put 'eHRyYS5sZW5ndGgpJiYoVHQucGVuZGluZyE9PVR0LnBlbmRpbmdfYnVmX3NpemV8fChUdC5nemhlYWQuaGNyYyYmVHQucGVuZGluZz5tdCYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsVHQucGVuZGluZ19idWYsVHQucGVuZGluZy1tdCxtdCkpLEFlKHJ0KSxtdD1UdC5wZW5kaW5nLFR0LnBlbmRp'@;
put 'bmchPT1UdC5wZW5kaW5nX2J1Zl9zaXplKSk7KW90KFR0LDI1NSZUdC5nemhlYWQuZXh0cmFbVHQuZ3ppbmRleF0pLFR0Lmd6aW5kZXgrKztUdC5nemhlYWQuaGNyYyYmVHQucGVuZGluZz5tdCYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsVHQucGVuZGluZ19idWYsVHQucGVuZGluZy1tdCxtdCkp'@;
put 'LFR0Lmd6aW5kZXg9PT1UdC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoVHQuZ3ppbmRleD0wLFR0LnN0YXR1cz03Myl9ZWxzZSBUdC5zdGF0dXM9NzM7aWYoNzM9PT1UdC5zdGF0dXMpaWYoVHQuZ3poZWFkLm5hbWUpe210PVR0LnBlbmRpbmc7ZG97aWYoVHQucGVuZGluZz09PVR0LnBlbmRpbmdf'@;
put 'YnVmX3NpemUmJihUdC5nemhlYWQuaGNyYyYmVHQucGVuZGluZz5tdCYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsVHQucGVuZGluZ19idWYsVHQucGVuZGluZy1tdCxtdCkpLEFlKHJ0KSxtdD1UdC5wZW5kaW5nLFR0LnBlbmRpbmc9PT1UdC5wZW5kaW5nX2J1Zl9zaXplKSl7R3Q9MTticmVha31H'@;
put 'dD1UdC5nemluZGV4PFR0Lmd6aGVhZC5uYW1lLmxlbmd0aD8yNTUmVHQuZ3poZWFkLm5hbWUuY2hhckNvZGVBdChUdC5nemluZGV4KyspOjAsb3QoVHQsR3QpfXdoaWxlKDAhPT1HdCk7VHQuZ3poZWFkLmhjcmMmJlR0LnBlbmRpbmc+bXQmJihydC5hZGxlcj1rKHJ0LmFkbGVyLFR0LnBlbmRp'@;
put 'bmdfYnVmLFR0LnBlbmRpbmctbXQsbXQpKSwwPT09R3QmJihUdC5nemluZGV4PTAsVHQuc3RhdHVzPTkxKX1lbHNlIFR0LnN0YXR1cz05MTtpZig5MT09PVR0LnN0YXR1cylpZihUdC5nemhlYWQuY29tbWVudCl7bXQ9VHQucGVuZGluZztkb3tpZihUdC5wZW5kaW5nPT09VHQucGVuZGluZ19i'@;
put 'dWZfc2l6ZSYmKFR0Lmd6aGVhZC5oY3JjJiZUdC5wZW5kaW5nPm10JiYocnQuYWRsZXI9ayhydC5hZGxlcixUdC5wZW5kaW5nX2J1ZixUdC5wZW5kaW5nLW10LG10KSksQWUocnQpLG10PVR0LnBlbmRpbmcsVHQucGVuZGluZz09PVR0LnBlbmRpbmdfYnVmX3NpemUpKXtHdD0xO2JyZWFrfUd0'@;
put 'PVR0Lmd6aW5kZXg8VHQuZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZUdC5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KFR0Lmd6aW5kZXgrKyk6MCxvdChUdCxHdCl9d2hpbGUoMCE9PUd0KTtUdC5nemhlYWQuaGNyYyYmVHQucGVuZGluZz5tdCYmKHJ0LmFkbGVyPWsocnQuYWRsZXIsVHQu'@;
put 'cGVuZGluZ19idWYsVHQucGVuZGluZy1tdCxtdCkpLDA9PT1HdCYmKFR0LnN0YXR1cz0xMDMpfWVsc2UgVHQuc3RhdHVzPTEwMztpZigxMDM9PT1UdC5zdGF0dXMmJihUdC5nemhlYWQuaGNyYz8oVHQucGVuZGluZysyPlR0LnBlbmRpbmdfYnVmX3NpemUmJkFlKHJ0KSxUdC5wZW5kaW5nKzI8'@;
put 'PVR0LnBlbmRpbmdfYnVmX3NpemUmJihvdChUdCwyNTUmcnQuYWRsZXIpLG90KFR0LHJ0LmFkbGVyPj44JjI1NSkscnQuYWRsZXI9MCxUdC5zdGF0dXM9YXQpKTpUdC5zdGF0dXM9YXQpLDAhPT1UdC5wZW5kaW5nKXtpZihBZShydCksMD09PXJ0LmF2YWlsX291dClyZXR1cm4gVHQubGFzdF9m'@;
put 'bHVzaD0tMSxxfWVsc2UgaWYoMD09PXJ0LmF2YWlsX2luJiZkdChFdCk8PWR0KFF0KSYmNCE9PUV0KXJldHVybiBHZShydCwtNSk7aWYoNjY2PT09VHQuc3RhdHVzJiYwIT09cnQuYXZhaWxfaW4pcmV0dXJuIEdlKHJ0LC01KTtpZigwIT09cnQuYXZhaWxfaW58fDAhPT1UdC5sb29rYWhlYWR8'@;
put 'fEV0IT09TiYmNjY2IT09VHQuc3RhdHVzKXt2YXIgYm49Mj09PVR0LnN0cmF0ZWd5P2Z1bmN0aW9uIEJuKHJ0LEV0KXtmb3IodmFyIFF0Ozspe2lmKDA9PT1ydC5sb29rYWhlYWQmJihSdChydCksMD09PXJ0Lmxvb2thaGVhZCkpe2lmKEV0PT09TilyZXR1cm4gMTticmVha31pZihydC5tYXRj'@;
put 'aF9sZW5ndGg9MCxRdD1JLl90cl90YWxseShydCwwLHJ0LndpbmRvd1tydC5zdHJzdGFydF0pLHJ0Lmxvb2thaGVhZC0tLHJ0LnN0cnN0YXJ0KyssUXQmJihCZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gcnQuaW5zZXJ0PTAsND09PUV0PyhCZShydCwh'@;
put 'MCksMD09PXJ0LnN0cm0uYXZhaWxfb3V0PzM6NCk6cnQubGFzdF9saXQmJihCZShydCwhMSksMD09PXJ0LnN0cm0uYXZhaWxfb3V0KT8xOjJ9KFR0LEV0KTozPT09VHQuc3RyYXRlZ3k/ZnVuY3Rpb24gdm4ocnQsRXQpe2Zvcih2YXIgUXQsVHQsbXQsR3Qsa249cnQud2luZG93Ozspe2lmKHJ0'@;
put 'Lmxvb2thaGVhZDw9T2Upe2lmKFJ0KHJ0KSxydC5sb29rYWhlYWQ8PU9lJiZFdD09PU4pcmV0dXJuIDE7aWYoMD09PXJ0Lmxvb2thaGVhZClicmVha31pZihydC5tYXRjaF9sZW5ndGg9MCxydC5sb29rYWhlYWQ+PXhlJiZydC5zdHJzdGFydD4wJiYoVHQ9a25bbXQ9cnQuc3Ryc3RhcnQtMV0p'@;
put 'PT09a25bKyttdF0mJlR0PT09a25bKyttdF0mJlR0PT09a25bKyttdF0pe0d0PXJ0LnN0cnN0YXJ0K09lO2Rve313aGlsZShUdD09PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZUdD09'@;
put 'PWtuWysrbXRdJiZUdD09PWtuWysrbXRdJiZtdDxHdCk7cnQubWF0Y2hfbGVuZ3RoPU9lLShHdC1tdCkscnQubWF0Y2hfbGVuZ3RoPnJ0Lmxvb2thaGVhZCYmKHJ0Lm1hdGNoX2xlbmd0aD1ydC5sb29rYWhlYWQpfWlmKHJ0Lm1hdGNoX2xlbmd0aD49eGU/KFF0PUkuX3RyX3RhbGx5KHJ0LDEs'@;
put 'cnQubWF0Y2hfbGVuZ3RoLXhlKSxydC5sb29rYWhlYWQtPXJ0Lm1hdGNoX2xlbmd0aCxydC5zdHJzdGFydCs9cnQubWF0Y2hfbGVuZ3RoLHJ0Lm1hdGNoX2xlbmd0aD0wKTooUXQ9SS5fdHJfdGFsbHkocnQsMCxydC53aW5kb3dbcnQuc3Ryc3RhcnRdKSxydC5sb29rYWhlYWQtLSxydC5zdHJz'@;
put 'dGFydCsrKSxRdCYmKEJlKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBydC5pbnNlcnQ9MCw0PT09RXQ/KEJlKHJ0LCEwKSwwPT09cnQuc3RybS5hdmFpbF9vdXQ/Mzo0KTpydC5sYXN0X2xpdCYmKEJlKHJ0LCExKSwwPT09cnQuc3RybS5hdmFpbF9vdXQp'@;
put 'PzE6Mn0oVHQsRXQpOlpuW1R0LmxldmVsXS5mdW5jKFR0LEV0KTtpZigoMz09PWJufHw0PT09Ym4pJiYoVHQuc3RhdHVzPTY2NiksMT09PWJufHwzPT09Ym4pcmV0dXJuIDA9PT1ydC5hdmFpbF9vdXQmJihUdC5sYXN0X2ZsdXNoPS0xKSxxO2lmKDI9PT1ibiYmKDE9PT1FdD9JLl90cl9hbGln'@;
put 'bihUdCk6NSE9PUV0JiYoSS5fdHJfc3RvcmVkX2Jsb2NrKFR0LDAsMCwhMSksMz09PUV0JiYoVGUoVHQuaGVhZCksMD09PVR0Lmxvb2thaGVhZCYmKFR0LnN0cnN0YXJ0PTAsVHQuYmxvY2tfc3RhcnQ9MCxUdC5pbnNlcnQ9MCkpKSxBZShydCksMD09PXJ0LmF2YWlsX291dCkpcmV0dXJuIFR0'@;
put 'Lmxhc3RfZmx1c2g9LTEscX1yZXR1cm4gNCE9PUV0P3E6VHQud3JhcDw9MD8xOigyPT09VHQud3JhcD8ob3QoVHQsMjU1JnJ0LmFkbGVyKSxvdChUdCxydC5hZGxlcj4+OCYyNTUpLG90KFR0LHJ0LmFkbGVyPj4xNiYyNTUpLG90KFR0LHJ0LmFkbGVyPj4yNCYyNTUpLG90KFR0LDI1NSZydC50'@;
put 'b3RhbF9pbiksb3QoVHQscnQudG90YWxfaW4+PjgmMjU1KSxvdChUdCxydC50b3RhbF9pbj4+MTYmMjU1KSxvdChUdCxydC50b3RhbF9pbj4+MjQmMjU1KSk6KGx0KFR0LHJ0LmFkbGVyPj4+MTYpLGx0KFR0LDY1NTM1JnJ0LmFkbGVyKSksQWUocnQpLFR0LndyYXA+MCYmKFR0LndyYXA9LVR0'@;
put 'LndyYXApLDAhPT1UdC5wZW5kaW5nP3E6MSl9LFAuZGVmbGF0ZUVuZD1mdW5jdGlvbiBwbihydCl7dmFyIEV0O3JldHVybiBydCYmcnQuc3RhdGU/KEV0PXJ0LnN0YXRlLnN0YXR1cykhPT1MZSYmNjkhPT1FdCYmNzMhPT1FdCYmOTEhPT1FdCYmMTAzIT09RXQmJkV0IT09YXQmJjY2NiE9PUV0'@;
put 'P0dlKHJ0LHRlKToocnQuc3RhdGU9bnVsbCxFdD09PWF0P0dlKHJ0LC0zKTpxKTp0ZX0sUC5kZWZsYXRlSW5mbz0icGFrbyBkZWZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vbWVzc2FnZXMi'@;
put 'OjM3LCIuL3RyZWVzIjozOH1dLDMzOltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO0QuZXhwb3J0cz1mdW5jdGlvbiBVKCl7dGhpcy50ZXh0PTAsdGhpcy50aW1lPTAsdGhpcy54ZmxhZ3M9MCx0aGlzLm9zPTAsdGhpcy5leHRyYT1udWxsLHRoaXMuZXh0cmFfbGVuPTAsdGhpcy5uYW1l'@;
put 'PSIiLHRoaXMuY29tbWVudD0iIix0aGlzLmhjcmM9MCx0aGlzLmRvbmU9ITF9fSx7fV0sMzQ6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7RC5leHBvcnRzPWZ1bmN0aW9uKGssQil7dmFyIE4sVixaLFcseixxLFEsdGUsYWUsc2UsZGUsbGUsY2UsRyx5LEwsSCxqLGcsUyx4LF8scCxD'@;
put 'LEs7Qz1rLmlucHV0LFo9KFY9ay5uZXh0X2luKSsoay5hdmFpbF9pbi01KSxLPWsub3V0cHV0LHo9KFc9ay5uZXh0X291dCktKEItay5hdmFpbF9vdXQpLHE9Vysoay5hdmFpbF9vdXQtMjU3KSxRPShOPWsuc3RhdGUpLmRtYXgsdGU9Ti53c2l6ZSxhZT1OLndoYXZlLHNlPU4ud25leHQsZGU9'@;
put 'Ti53aW5kb3csbGU9Ti5ob2xkLGNlPU4uYml0cyxHPU4ubGVuY29kZSx5PU4uZGlzdGNvZGUsTD0oMTw8Ti5sZW5iaXRzKS0xLEg9KDE8PE4uZGlzdGJpdHMpLTE7ZTpkb3tjZTwxNSYmKGxlKz1DW1YrK108PGNlLGxlKz1DW1YrK108PChjZSs9OCksY2UrPTgpLGo9R1tsZSZMXTt0OmZvcig7'@;
put 'Oyl7aWYobGU+Pj49Zz1qPj4+MjQsY2UtPWcsMD09KGc9aj4+PjE2JjI1NSkpS1tXKytdPTY1NTM1Jmo7ZWxzZXtpZighKDE2JmcpKXtpZig2NCZnKXtpZigzMiZnKXtOLm1vZGU9MTI7YnJlYWsgZX1rLm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlIixOLm1vZGU9MzA7YnJlYWsg'@;
put 'ZX1qPUdbKDY1NTM1JmopKyhsZSYoMTw8ZyktMSldO2NvbnRpbnVlIHR9Zm9yKFM9NjU1MzUmaiwoZyY9MTUpJiYoY2U8ZyYmKGxlKz1DW1YrK108PGNlLGNlKz04KSxTKz1sZSYoMTw8ZyktMSxsZT4+Pj1nLGNlLT1nKSxjZTwxNSYmKGxlKz1DW1YrK108PGNlLGxlKz1DW1YrK108PChjZSs9'@;
put 'OCksY2UrPTgpLGo9eVtsZSZIXTs7KXtpZihsZT4+Pj1nPWo+Pj4yNCxjZS09ZywxNiYoZz1qPj4+MTYmMjU1KSl7aWYoeD02NTUzNSZqLGNlPChnJj0xNSkmJihsZSs9Q1tWKytdPDxjZSwoY2UrPTgpPGcmJihsZSs9Q1tWKytdPDxjZSxjZSs9OCkpLCh4Kz1sZSYoMTw8ZyktMSk+USl7ay5t'@;
put 'c2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixOLm1vZGU9MzA7YnJlYWsgZX1pZihsZT4+Pj1nLGNlLT1nLHg+KGc9Vy16KSl7aWYoKGc9eC1nKT5hZSYmTi5zYW5lKXtrLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLE4ubW9kZT0zMDticmVhayBlfWlmKF89'@;
put 'MCxwPWRlLDA9PT1zZSl7aWYoXys9dGUtZyxnPFMpe1MtPWc7ZG97S1tXKytdPWRlW18rK119d2hpbGUoLS1nKTtfPVcteCxwPUt9fWVsc2UgaWYoc2U8Zyl7aWYoXys9dGUrc2UtZywoZy09c2UpPFMpe1MtPWc7ZG97S1tXKytdPWRlW18rK119d2hpbGUoLS1nKTtpZihfPTAsc2U8Uyl7Uy09'@;
put 'Zz1zZTtkb3tLW1crK109ZGVbXysrXX13aGlsZSgtLWcpO189Vy14LHA9S319fWVsc2UgaWYoXys9c2UtZyxnPFMpe1MtPWc7ZG97S1tXKytdPWRlW18rK119d2hpbGUoLS1nKTtfPVcteCxwPUt9Zm9yKDtTPjI7KUtbVysrXT1wW18rK10sS1tXKytdPXBbXysrXSxLW1crK109cFtfKytdLFMt'@;
put 'PTM7UyYmKEtbVysrXT1wW18rK10sUz4xJiYoS1tXKytdPXBbXysrXSkpfWVsc2V7Xz1XLXg7ZG97S1tXKytdPUtbXysrXSxLW1crK109S1tfKytdLEtbVysrXT1LW18rK10sUy09M313aGlsZShTPjIpO1MmJihLW1crK109S1tfKytdLFM+MSYmKEtbVysrXT1LW18rK10pKX1icmVha31pZig2'@;
put 'NCZnKXtrLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixOLm1vZGU9MzA7YnJlYWsgZX1qPXlbKDY1NTM1JmopKyhsZSYoMTw8ZyktMSldfX1icmVha319d2hpbGUoVjxaJiZXPHEpO2xlJj0oMTw8KGNlLT0oUz1jZT4+Myk8PDMpKS0xLGsubmV4dF9pbj1WLT1TLGsubmV4dF9vdXQ9Vyxr'@;
put 'LmF2YWlsX2luPVY8Wj9aLVYrNTo1LShWLVopLGsuYXZhaWxfb3V0PVc8cT9xLVcrMjU3OjI1Ny0oVy1xKSxOLmhvbGQ9bGUsTi5iaXRzPWNlfX0se31dLDM1OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4uL3V0aWxzL2NvbW1vbiIpLEk9QSgiLi9hZGxlcjMyIiks'@;
put 'RT1BKCIuL2NyYzMyIiksaz1BKCIuL2luZmZhc3QiKSxCPUEoIi4vaW5mdHJlZXMiKSxRPTAsc2U9LTIseT0xLFRlPTg1MixBZT01OTI7ZnVuY3Rpb24gbHQoTXQpe3JldHVybihNdD4+PjI0JjI1NSkrKE10Pj4+OCY2NTI4MCkrKCg2NTI4MCZNdCk8PDgpKygoMjU1Jk10KTw8MjQpfWZ1bmN0'@;
put 'aW9uIEN0KCl7dGhpcy5tb2RlPTAsdGhpcy5sYXN0PSExLHRoaXMud3JhcD0wLHRoaXMuaGF2ZWRpY3Q9ITEsdGhpcy5mbGFncz0wLHRoaXMuZG1heD0wLHRoaXMuY2hlY2s9MCx0aGlzLnRvdGFsPTAsdGhpcy5oZWFkPW51bGwsdGhpcy53Yml0cz0wLHRoaXMud3NpemU9MCx0aGlzLndoYXZl'@;
put 'PTAsdGhpcy53bmV4dD0wLHRoaXMud2luZG93PW51bGwsdGhpcy5ob2xkPTAsdGhpcy5iaXRzPTAsdGhpcy5sZW5ndGg9MCx0aGlzLm9mZnNldD0wLHRoaXMuZXh0cmE9MCx0aGlzLmxlbmNvZGU9bnVsbCx0aGlzLmRpc3Rjb2RlPW51bGwsdGhpcy5sZW5iaXRzPTAsdGhpcy5kaXN0Yml0cz0w'@;
put 'LHRoaXMubmNvZGU9MCx0aGlzLm5sZW49MCx0aGlzLm5kaXN0PTAsdGhpcy5oYXZlPTAsdGhpcy5uZXh0PW51bGwsdGhpcy5sZW5zPW5ldyBVLkJ1ZjE2KDMyMCksdGhpcy53b3JrPW5ldyBVLkJ1ZjE2KDI4OCksdGhpcy5sZW5keW49bnVsbCx0aGlzLmRpc3RkeW49bnVsbCx0aGlzLnNhbmU9'@;
put 'MCx0aGlzLmJhY2s9MCx0aGlzLndhcz0wfWZ1bmN0aW9uIEZ0KE10KXt2YXIgWXQ7cmV0dXJuIE10JiZNdC5zdGF0ZT8oTXQudG90YWxfaW49TXQudG90YWxfb3V0PShZdD1NdC5zdGF0ZSkudG90YWw9MCxNdC5tc2c9IiIsWXQud3JhcCYmKE10LmFkbGVyPTEmWXQud3JhcCksWXQubW9kZT15'@;
put 'LFl0Lmxhc3Q9MCxZdC5oYXZlZGljdD0wLFl0LmRtYXg9MzI3NjgsWXQuaGVhZD1udWxsLFl0LmhvbGQ9MCxZdC5iaXRzPTAsWXQubGVuY29kZT1ZdC5sZW5keW49bmV3IFUuQnVmMzIoVGUpLFl0LmRpc3Rjb2RlPVl0LmRpc3RkeW49bmV3IFUuQnVmMzIoQWUpLFl0LnNhbmU9MSxZdC5iYWNr'@;
put 'PS0xLFEpOnNlfWZ1bmN0aW9uIFJ0KE10KXt2YXIgWXQ7cmV0dXJuIE10JiZNdC5zdGF0ZT8oKFl0PU10LnN0YXRlKS53c2l6ZT0wLFl0LndoYXZlPTAsWXQud25leHQ9MCxGdChNdCkpOnNlfWZ1bmN0aW9uIFh0KE10LFl0KXt2YXIgX3QsanQ7cmV0dXJuIU10fHwhTXQuc3RhdGV8fChqdD1N'@;
put 'dC5zdGF0ZSxZdDwwPyhfdD0wLFl0PS1ZdCk6KF90PTErKFl0Pj40KSxZdDw0OCYmKFl0Jj0xNSkpLFl0JiYoWXQ8OHx8WXQ+MTUpKT9zZToobnVsbCE9PWp0LndpbmRvdyYmanQud2JpdHMhPT1ZdCYmKGp0LndpbmRvdz1udWxsKSxqdC53cmFwPV90LGp0LndiaXRzPVl0LFJ0KE10KSl9ZnVu'@;
put 'Y3Rpb24gU24oTXQsWXQpe3ZhciBfdCxqdDtyZXR1cm4gTXQ/KGp0PW5ldyBDdCxNdC5zdGF0ZT1qdCxqdC53aW5kb3c9bnVsbCwoX3Q9WHQoTXQsWXQpKSE9PVEmJihNdC5zdGF0ZT1udWxsKSxfdCk6c2V9dmFyIEJuLHRuLHZuPSEwO2Z1bmN0aW9uIFpuKE10KXtpZih2bil7dmFyIFl0O2Zv'@;
put 'cihCbj1uZXcgVS5CdWYzMig1MTIpLHRuPW5ldyBVLkJ1ZjMyKDMyKSxZdD0wO1l0PDE0NDspTXQubGVuc1tZdCsrXT04O2Zvcig7WXQ8MjU2OylNdC5sZW5zW1l0KytdPTk7Zm9yKDtZdDwyODA7KU10LmxlbnNbWXQrK109Nztmb3IoO1l0PDI4ODspTXQubGVuc1tZdCsrXT04O2ZvcihCKDEs'@;
put 'TXQubGVucywwLDI4OCxCbiwwLE10Lndvcmsse2JpdHM6OX0pLFl0PTA7WXQ8MzI7KU10LmxlbnNbWXQrK109NTtCKDIsTXQubGVucywwLDMyLHRuLDAsTXQud29yayx7Yml0czo1fSksdm49ITF9TXQubGVuY29kZT1CbixNdC5sZW5iaXRzPTksTXQuZGlzdGNvZGU9dG4sTXQuZGlzdGJpdHM9'@;
put 'NX1QLmluZmxhdGVSZXNldD1SdCxQLmluZmxhdGVSZXNldDI9WHQsUC5pbmZsYXRlUmVzZXRLZWVwPUZ0LFAuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24genQoTXQpe3JldHVybiBTbihNdCwxNSl9LFAuaW5mbGF0ZUluaXQyPVNuLFAuaW5mbGF0ZT1mdW5jdGlvbiBwdChNdCxZdCl7dmFyIF90LGp0'@;
put 'LHBuLHJ0LEV0LFF0LFR0LG10LEd0LGtuLEJ0LGJuLENuLGVuLHduLCR0LFduLGNpLGxuLG5uLHVpLEFyLHlpLCRyLFBuPTAsbXI9bmV3IFUuQnVmOCg0KSxKaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV07aWYoIU10fHwhTXQuc3RhdGV8fCFNdC5v'@;
put 'dXRwdXR8fCFNdC5pbnB1dCYmMCE9PU10LmF2YWlsX2luKXJldHVybiBzZTsxMj09PShfdD1NdC5zdGF0ZSkubW9kZSYmKF90Lm1vZGU9MTMpLEV0PU10Lm5leHRfb3V0LHBuPU10Lm91dHB1dCxydD1NdC5uZXh0X2luLGp0PU10LmlucHV0LG10PV90LmhvbGQsR3Q9X3QuYml0cyxrbj1RdD1N'@;
put 'dC5hdmFpbF9pbixCdD1UdD1NdC5hdmFpbF9vdXQsQXI9UTtlOmZvcig7Oylzd2l0Y2goX3QubW9kZSl7Y2FzZSB5OmlmKDA9PT1fdC53cmFwKXtfdC5tb2RlPTEzO2JyZWFrfWZvcig7R3Q8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLG10Kz1qdFtydCsrXTw8R3QsR3QrPTh9aWYoMiZf'@;
put 'dC53cmFwJiYzNTYxNT09PW10KXtfdC5jaGVjaz0wLG1yWzBdPTI1NSZtdCxtclsxXT1tdD4+PjgmMjU1LF90LmNoZWNrPUUoX3QuY2hlY2ssbXIsMiwwKSxtdD0wLEd0PTAsX3QubW9kZT0yO2JyZWFrfWlmKF90LmZsYWdzPTAsX3QuaGVhZCYmKF90LmhlYWQuZG9uZT0hMSksISgxJl90Lndy'@;
put 'YXApfHwoKCgyNTUmbXQpPDw4KSsobXQ+PjgpKSUzMSl7TXQubXNnPSJpbmNvcnJlY3QgaGVhZGVyIGNoZWNrIixfdC5tb2RlPTMwO2JyZWFrfWlmKDghPSgxNSZtdCkpe010Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9aWYoR3QtPTQsdWk9OCso'@;
put 'MTUmKG10Pj4+PTQpKSwwPT09X3Qud2JpdHMpX3Qud2JpdHM9dWk7ZWxzZSBpZih1aT5fdC53Yml0cyl7TXQubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixfdC5tb2RlPTMwO2JyZWFrfV90LmRtYXg9MTw8dWksTXQuYWRsZXI9X3QuY2hlY2s9MSxfdC5tb2RlPTUxMiZtdD8xMDoxMixtdD0w'@;
put 'LEd0PTA7YnJlYWs7Y2FzZSAyOmZvcig7R3Q8MTY7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLG10Kz1qdFtydCsrXTw8R3QsR3QrPTh9aWYoX3QuZmxhZ3M9bXQsOCE9KDI1NSZfdC5mbGFncykpe010Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLF90Lm1vZGU9MzA7YnJlYWt9'@;
put 'aWYoNTczNDQmX3QuZmxhZ3Mpe010Lm1zZz0idW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhlYWQmJihfdC5oZWFkLnRleHQ9bXQ+PjgmMSksNTEyJl90LmZsYWdzJiYobXJbMF09MjU1Jm10LG1yWzFdPW10Pj4+OCYyNTUsX3QuY2hlY2s9RShfdC5jaGVj'@;
put 'ayxtciwyLDApKSxtdD0wLEd0PTAsX3QubW9kZT0zO2Nhc2UgMzpmb3IoO0d0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fV90LmhlYWQmJihfdC5oZWFkLnRpbWU9bXQpLDUxMiZfdC5mbGFncyYmKG1yWzBdPTI1NSZtdCxtclsxXT1tdD4+Pjgm'@;
put 'MjU1LG1yWzJdPW10Pj4+MTYmMjU1LG1yWzNdPW10Pj4+MjQmMjU1LF90LmNoZWNrPUUoX3QuY2hlY2ssbXIsNCwwKSksbXQ9MCxHdD0wLF90Lm1vZGU9NDtjYXNlIDQ6Zm9yKDtHdDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1fdC5oZWFkJiYo'@;
put 'X3QuaGVhZC54ZmxhZ3M9MjU1Jm10LF90LmhlYWQub3M9bXQ+PjgpLDUxMiZfdC5mbGFncyYmKG1yWzBdPTI1NSZtdCxtclsxXT1tdD4+PjgmMjU1LF90LmNoZWNrPUUoX3QuY2hlY2ssbXIsMiwwKSksbXQ9MCxHdD0wLF90Lm1vZGU9NTtjYXNlIDU6aWYoMTAyNCZfdC5mbGFncyl7Zm9yKDtH'@;
put 'dDwxNjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1fdC5sZW5ndGg9bXQsX3QuaGVhZCYmKF90LmhlYWQuZXh0cmFfbGVuPW10KSw1MTImX3QuZmxhZ3MmJihtclswXT0yNTUmbXQsbXJbMV09bXQ+Pj44JjI1NSxfdC5jaGVjaz1FKF90LmNoZWNrLG1y'@;
put 'LDIsMCkpLG10PTAsR3Q9MH1lbHNlIF90LmhlYWQmJihfdC5oZWFkLmV4dHJhPW51bGwpO190Lm1vZGU9NjtjYXNlIDY6aWYoMTAyNCZfdC5mbGFncyYmKChibj1fdC5sZW5ndGgpPlF0JiYoYm49UXQpLGJuJiYoX3QuaGVhZCYmKHVpPV90LmhlYWQuZXh0cmFfbGVuLV90Lmxlbmd0aCxfdC5o'@;
put 'ZWFkLmV4dHJhfHwoX3QuaGVhZC5leHRyYT1uZXcgQXJyYXkoX3QuaGVhZC5leHRyYV9sZW4pKSxVLmFycmF5U2V0KF90LmhlYWQuZXh0cmEsanQscnQsYm4sdWkpKSw1MTImX3QuZmxhZ3MmJihfdC5jaGVjaz1FKF90LmNoZWNrLGp0LGJuLHJ0KSksUXQtPWJuLHJ0Kz1ibixfdC5sZW5ndGgt'@;
put 'PWJuKSxfdC5sZW5ndGgpKWJyZWFrIGU7X3QubGVuZ3RoPTAsX3QubW9kZT03O2Nhc2UgNzppZigyMDQ4Jl90LmZsYWdzKXtpZigwPT09UXQpYnJlYWsgZTtibj0wO2Rve3VpPWp0W3J0K2JuKytdLF90LmhlYWQmJnVpJiZfdC5sZW5ndGg8NjU1MzYmJihfdC5oZWFkLm5hbWUrPVN0cmluZy5m'@;
put 'cm9tQ2hhckNvZGUodWkpKX13aGlsZSh1aSYmYm48UXQpO2lmKDUxMiZfdC5mbGFncyYmKF90LmNoZWNrPUUoX3QuY2hlY2ssanQsYm4scnQpKSxRdC09Ym4scnQrPWJuLHVpKWJyZWFrIGV9ZWxzZSBfdC5oZWFkJiYoX3QuaGVhZC5uYW1lPW51bGwpO190Lmxlbmd0aD0wLF90Lm1vZGU9ODtj'@;
put 'YXNlIDg6aWYoNDA5NiZfdC5mbGFncyl7aWYoMD09PVF0KWJyZWFrIGU7Ym49MDtkb3t1aT1qdFtydCtibisrXSxfdC5oZWFkJiZ1aSYmX3QubGVuZ3RoPDY1NTM2JiYoX3QuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHVpKSl9d2hpbGUodWkmJmJuPFF0KTtpZig1MTImX3Qu'@;
put 'ZmxhZ3MmJihfdC5jaGVjaz1FKF90LmNoZWNrLGp0LGJuLHJ0KSksUXQtPWJuLHJ0Kz1ibix1aSlicmVhayBlfWVsc2UgX3QuaGVhZCYmKF90LmhlYWQuY29tbWVudD1udWxsKTtfdC5tb2RlPTk7Y2FzZSA5OmlmKDUxMiZfdC5mbGFncyl7Zm9yKDtHdDwxNjspe2lmKDA9PT1RdClicmVhayBl'@;
put 'O1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1pZihtdCE9PSg2NTUzNSZfdC5jaGVjaykpe010Lm1zZz0iaGVhZGVyIGNyYyBtaXNtYXRjaCIsX3QubW9kZT0zMDticmVha31tdD0wLEd0PTB9X3QuaGVhZCYmKF90LmhlYWQuaGNyYz1fdC5mbGFncz4+OSYxLF90LmhlYWQuZG9uZT0hMCks'@;
put 'TXQuYWRsZXI9X3QuY2hlY2s9MCxfdC5tb2RlPTEyO2JyZWFrO2Nhc2UgMTA6Zm9yKDtHdDwzMjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1NdC5hZGxlcj1fdC5jaGVjaz1sdChtdCksbXQ9MCxHdD0wLF90Lm1vZGU9MTE7Y2FzZSAxMTppZigwPT09'@;
put 'X3QuaGF2ZWRpY3QpcmV0dXJuIE10Lm5leHRfb3V0PUV0LE10LmF2YWlsX291dD1UdCxNdC5uZXh0X2luPXJ0LE10LmF2YWlsX2luPVF0LF90LmhvbGQ9bXQsX3QuYml0cz1HdCwyO010LmFkbGVyPV90LmNoZWNrPTEsX3QubW9kZT0xMjtjYXNlIDEyOmlmKDU9PT1ZdHx8Nj09PVl0KWJyZWFr'@;
put 'IGU7Y2FzZSAxMzppZihfdC5sYXN0KXttdD4+Pj03Jkd0LEd0LT03Jkd0LF90Lm1vZGU9Mjc7YnJlYWt9Zm9yKDtHdDwzOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fXN3aXRjaChfdC5sYXN0PTEmbXQsR3QtPTEsMyYobXQ+Pj49MSkpe2Nhc2UgMDpf'@;
put 'dC5tb2RlPTE0O2JyZWFrO2Nhc2UgMTppZihabihfdCksX3QubW9kZT0yMCw2PT09WXQpe210Pj4+PTIsR3QtPTI7YnJlYWsgZX1icmVhaztjYXNlIDI6X3QubW9kZT0xNzticmVhaztjYXNlIDM6TXQubXNnPSJpbnZhbGlkIGJsb2NrIHR5cGUiLF90Lm1vZGU9MzB9bXQ+Pj49MixHdC09Mjti'@;
put 'cmVhaztjYXNlIDE0OmZvcihtdD4+Pj03Jkd0LEd0LT03Jkd0O0d0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fWlmKCg2NTUzNSZtdCkhPShtdD4+PjE2XjY1NTM1KSl7TXQubXNnPSJpbnZhbGlkIHN0b3JlZCBibG9jayBsZW5ndGhzIixfdC5t'@;
put 'b2RlPTMwO2JyZWFrfWlmKF90Lmxlbmd0aD02NTUzNSZtdCxtdD0wLEd0PTAsX3QubW9kZT0xNSw2PT09WXQpYnJlYWsgZTtjYXNlIDE1Ol90Lm1vZGU9MTY7Y2FzZSAxNjppZihibj1fdC5sZW5ndGgpe2lmKGJuPlF0JiYoYm49UXQpLGJuPlR0JiYoYm49VHQpLDA9PT1ibilicmVhayBlO1Uu'@;
put 'YXJyYXlTZXQocG4sanQscnQsYm4sRXQpLFF0LT1ibixydCs9Ym4sVHQtPWJuLEV0Kz1ibixfdC5sZW5ndGgtPWJuO2JyZWFrfV90Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxNzpmb3IoO0d0PDE0Oyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fWlmKF90Lm5s'@;
put 'ZW49MjU3KygzMSZtdCksR3QtPTUsX3QubmRpc3Q9MSsoMzEmKG10Pj4+PTUpKSxHdC09NSxfdC5uY29kZT00KygxNSYobXQ+Pj49NSkpLG10Pj4+PTQsR3QtPTQsX3Qubmxlbj4yODZ8fF90Lm5kaXN0PjMwKXtNdC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixf'@;
put 'dC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE4O2Nhc2UgMTg6Zm9yKDtfdC5oYXZlPF90Lm5jb2RlOyl7Zm9yKDtHdDwzOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fV90LmxlbnNbSmlbX3QuaGF2ZSsrXV09NyZtdCxtdD4+Pj0zLEd0'@;
put 'LT0zfWZvcig7X3QuaGF2ZTwxOTspX3QubGVuc1tKaVtfdC5oYXZlKytdXT0wO2lmKF90LmxlbmNvZGU9X3QubGVuZHluLF90LmxlbmJpdHM9NyxBcj1CKDAsX3QubGVucywwLDE5LF90LmxlbmNvZGUsMCxfdC53b3JrLHlpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPXlpLmJpdHMs'@;
put 'QXIpe010Lm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfV90LmhhdmU9MCxfdC5tb2RlPTE5O2Nhc2UgMTk6Zm9yKDtfdC5oYXZlPF90Lm5sZW4rX3QubmRpc3Q7KXtmb3IoOyR0PShQbj1fdC5sZW5jb2RlW210JigxPDxfdC5sZW5iaXRzKS0xXSk+Pj4x'@;
put 'NiYyNTUsV249NjU1MzUmUG4sISgod249UG4+Pj4yNCk8PUd0KTspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1pZihXbjwxNiltdD4+Pj13bixHdC09d24sX3QubGVuc1tfdC5oYXZlKytdPVduO2Vsc2V7aWYoMTY9PT1Xbil7Zm9yKCRyPXduKzI7R3Q8'@;
put 'JHI7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLG10Kz1qdFtydCsrXTw8R3QsR3QrPTh9aWYobXQ+Pj49d24sR3QtPXduLDA9PT1fdC5oYXZlKXtNdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLF90Lm1vZGU9MzA7YnJlYWt9dWk9X3QubGVuc1tfdC5oYXZlLTFdLGJuPTMrKDMm'@;
put 'bXQpLG10Pj4+PTIsR3QtPTJ9ZWxzZSBpZigxNz09PVduKXtmb3IoJHI9d24rMztHdDwkcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1HdC09d24sdWk9MCxibj0zKyg3JihtdD4+Pj13bikpLG10Pj4+PTMsR3QtPTN9ZWxzZXtmb3IoJHI9d24rNztH'@;
put 'dDwkcjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXQrPWp0W3J0KytdPDxHdCxHdCs9OH1HdC09d24sdWk9MCxibj0xMSsoMTI3JihtdD4+Pj13bikpLG10Pj4+PTcsR3QtPTd9aWYoX3QuaGF2ZStibj5fdC5ubGVuK190Lm5kaXN0KXtNdC5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBl'@;
put 'YXQiLF90Lm1vZGU9MzA7YnJlYWt9Zm9yKDtibi0tOylfdC5sZW5zW190LmhhdmUrK109dWl9fWlmKDMwPT09X3QubW9kZSlicmVhaztpZigwPT09X3QubGVuc1syNTZdKXtNdC5tc2c9ImludmFsaWQgY29kZSAtLSBtaXNzaW5nIGVuZC1vZi1ibG9jayIsX3QubW9kZT0zMDticmVha31pZihf'@;
put 'dC5sZW5iaXRzPTksQXI9QigxLF90LmxlbnMsMCxfdC5ubGVuLF90LmxlbmNvZGUsMCxfdC53b3JrLHlpPXtiaXRzOl90LmxlbmJpdHN9KSxfdC5sZW5iaXRzPXlpLmJpdHMsQXIpe010Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aHMgc2V0IixfdC5tb2RlPTMwO2JyZWFrfWlmKF90LmRp'@;
put 'c3RiaXRzPTYsX3QuZGlzdGNvZGU9X3QuZGlzdGR5bixBcj1CKDIsX3QubGVucyxfdC5ubGVuLF90Lm5kaXN0LF90LmRpc3Rjb2RlLDAsX3Qud29yayx5aT17Yml0czpfdC5kaXN0Yml0c30pLF90LmRpc3RiaXRzPXlpLmJpdHMsQXIpe010Lm1zZz0iaW52YWxpZCBkaXN0YW5jZXMgc2V0Iixf'@;
put 'dC5tb2RlPTMwO2JyZWFrfWlmKF90Lm1vZGU9MjAsNj09PVl0KWJyZWFrIGU7Y2FzZSAyMDpfdC5tb2RlPTIxO2Nhc2UgMjE6aWYoUXQ+PTYmJlR0Pj0yNTgpe010Lm5leHRfb3V0PUV0LE10LmF2YWlsX291dD1UdCxNdC5uZXh0X2luPXJ0LE10LmF2YWlsX2luPVF0LF90LmhvbGQ9bXQsX3Qu'@;
put 'Yml0cz1HdCxrKE10LEJ0KSxFdD1NdC5uZXh0X291dCxwbj1NdC5vdXRwdXQsVHQ9TXQuYXZhaWxfb3V0LHJ0PU10Lm5leHRfaW4sanQ9TXQuaW5wdXQsUXQ9TXQuYXZhaWxfaW4sbXQ9X3QuaG9sZCxHdD1fdC5iaXRzLDEyPT09X3QubW9kZSYmKF90LmJhY2s9LTEpO2JyZWFrfWZvcihfdC5i'@;
put 'YWNrPTA7JHQ9KFBuPV90LmxlbmNvZGVbbXQmKDE8PF90LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxXbj02NTUzNSZQbiwhKCh3bj1Qbj4+PjI0KTw9R3QpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fWlmKCR0JiYhKDI0MCYkdCkpe2ZvcihjaT13bixs'@;
put 'bj0kdCxubj1XbjskdD0oUG49X3QubGVuY29kZVtubisoKG10JigxPDxjaStsbiktMSk+PmNpKV0pPj4+MTYmMjU1LFduPTY1NTM1JlBuLCEoY2krKHduPVBuPj4+MjQpPD1HdCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLG10Kz1qdFtydCsrXTw8R3QsR3QrPTh9bXQ+Pj49Y2ksR3QtPWNp'@;
put 'LF90LmJhY2srPWNpfWlmKG10Pj4+PXduLEd0LT13bixfdC5iYWNrKz13bixfdC5sZW5ndGg9V24sMD09PSR0KXtfdC5tb2RlPTI2O2JyZWFrfWlmKDMyJiR0KXtfdC5iYWNrPS0xLF90Lm1vZGU9MTI7YnJlYWt9aWYoNjQmJHQpe010Lm1zZz0iaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2Rl'@;
put 'IixfdC5tb2RlPTMwO2JyZWFrfV90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjI7Y2FzZSAyMjppZihfdC5leHRyYSl7Zm9yKCRyPV90LmV4dHJhO0d0PCRyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fV90Lmxlbmd0aCs9bXQmKDE8PF90LmV4dHJhKS0x'@;
put 'LG10Pj4+PV90LmV4dHJhLEd0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1fdC53YXM9X3QubGVuZ3RoLF90Lm1vZGU9MjM7Y2FzZSAyMzpmb3IoOyR0PShQbj1fdC5kaXN0Y29kZVttdCYoMTw8X3QuZGlzdGJpdHMpLTFdKT4+PjE2JjI1NSxXbj02NTUzNSZQbiwhKCh3bj1Qbj4+PjI0'@;
put 'KTw9R3QpOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fWlmKCEoMjQwJiR0KSl7Zm9yKGNpPXduLGxuPSR0LG5uPVduOyR0PShQbj1fdC5kaXN0Y29kZVtubisoKG10JigxPDxjaStsbiktMSk+PmNpKV0pPj4+MTYmMjU1LFduPTY1NTM1JlBuLCEoY2kr'@;
put 'KHduPVBuPj4+MjQpPD1HdCk7KXtpZigwPT09UXQpYnJlYWsgZTtRdC0tLG10Kz1qdFtydCsrXTw8R3QsR3QrPTh9bXQ+Pj49Y2ksR3QtPWNpLF90LmJhY2srPWNpfWlmKG10Pj4+PXduLEd0LT13bixfdC5iYWNrKz13biw2NCYkdCl7TXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLF90'@;
put 'Lm1vZGU9MzA7YnJlYWt9X3Qub2Zmc2V0PVduLF90LmV4dHJhPTE1JiR0LF90Lm1vZGU9MjQ7Y2FzZSAyNDppZihfdC5leHRyYSl7Zm9yKCRyPV90LmV4dHJhO0d0PCRyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fV90Lm9mZnNldCs9bXQmKDE8PF90'@;
put 'LmV4dHJhKS0xLG10Pj4+PV90LmV4dHJhLEd0LT1fdC5leHRyYSxfdC5iYWNrKz1fdC5leHRyYX1pZihfdC5vZmZzZXQ+X3QuZG1heCl7TXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsX3QubW9kZT0zMDticmVha31fdC5tb2RlPTI1O2Nhc2UgMjU6aWYoMD09PVR0KWJy'@;
put 'ZWFrIGU7aWYoX3Qub2Zmc2V0Pihibj1CdC1UdCkpe2lmKChibj1fdC5vZmZzZXQtYm4pPl90LndoYXZlJiZfdC5zYW5lKXtNdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixfdC5tb2RlPTMwO2JyZWFrfUNuPWJuPl90LnduZXh0P190LndzaXplLShibi09X3Qud25leHQp'@;
put 'Ol90LnduZXh0LWJuLGJuPl90Lmxlbmd0aCYmKGJuPV90Lmxlbmd0aCksZW49X3Qud2luZG93fWVsc2UgZW49cG4sQ249RXQtX3Qub2Zmc2V0LGJuPV90Lmxlbmd0aDtibj5UdCYmKGJuPVR0KSxUdC09Ym4sX3QubGVuZ3RoLT1ibjtkb3twbltFdCsrXT1lbltDbisrXX13aGlsZSgtLWJuKTsw'@;
put 'PT09X3QubGVuZ3RoJiYoX3QubW9kZT0yMSk7YnJlYWs7Y2FzZSAyNjppZigwPT09VHQpYnJlYWsgZTtwbltFdCsrXT1fdC5sZW5ndGgsVHQtLSxfdC5tb2RlPTIxO2JyZWFrO2Nhc2UgMjc6aWYoX3Qud3JhcCl7Zm9yKDtHdDwzMjspe2lmKDA9PT1RdClicmVhayBlO1F0LS0sbXR8PWp0W3J0'@;
put 'KytdPDxHdCxHdCs9OH1pZihNdC50b3RhbF9vdXQrPUJ0LT1UdCxfdC50b3RhbCs9QnQsQnQmJihNdC5hZGxlcj1fdC5jaGVjaz1fdC5mbGFncz9FKF90LmNoZWNrLHBuLEJ0LEV0LUJ0KTpJKF90LmNoZWNrLHBuLEJ0LEV0LUJ0KSksQnQ9VHQsKF90LmZsYWdzP210Omx0KG10KSkhPT1fdC5j'@;
put 'aGVjayl7TXQubXNnPSJpbmNvcnJlY3QgZGF0YSBjaGVjayIsX3QubW9kZT0zMDticmVha31tdD0wLEd0PTB9X3QubW9kZT0yODtjYXNlIDI4OmlmKF90LndyYXAmJl90LmZsYWdzKXtmb3IoO0d0PDMyOyl7aWYoMD09PVF0KWJyZWFrIGU7UXQtLSxtdCs9anRbcnQrK108PEd0LEd0Kz04fWlm'@;
put 'KG10IT09KDQyOTQ5NjcyOTUmX3QudG90YWwpKXtNdC5tc2c9ImluY29ycmVjdCBsZW5ndGggY2hlY2siLF90Lm1vZGU9MzA7YnJlYWt9bXQ9MCxHdD0wfV90Lm1vZGU9Mjk7Y2FzZSAyOTpBcj0xO2JyZWFrIGU7Y2FzZSAzMDpBcj0tMzticmVhayBlO2Nhc2UgMzE6cmV0dXJuLTQ7ZGVmYXVs'@;
put 'dDpyZXR1cm4gc2V9cmV0dXJuIE10Lm5leHRfb3V0PUV0LE10LmF2YWlsX291dD1UdCxNdC5uZXh0X2luPXJ0LE10LmF2YWlsX2luPVF0LF90LmhvbGQ9bXQsX3QuYml0cz1HdCwoX3Qud3NpemV8fEJ0IT09TXQuYXZhaWxfb3V0JiZfdC5tb2RlPDMwJiYoX3QubW9kZTwyN3x8NCE9PVl0KSkm'@;
put 'JmZ1bmN0aW9uIE9uKE10LFl0LF90LGp0KXt2YXIgcG4scnQ9TXQuc3RhdGU7cmV0dXJuIG51bGw9PT1ydC53aW5kb3cmJihydC53c2l6ZT0xPDxydC53Yml0cyxydC53bmV4dD0wLHJ0LndoYXZlPTAscnQud2luZG93PW5ldyBVLkJ1ZjgocnQud3NpemUpKSxqdD49cnQud3NpemU/KFUuYXJy'@;
put 'YXlTZXQocnQud2luZG93LFl0LF90LXJ0LndzaXplLHJ0LndzaXplLDApLHJ0LnduZXh0PTAscnQud2hhdmU9cnQud3NpemUpOigocG49cnQud3NpemUtcnQud25leHQpPmp0JiYocG49anQpLFUuYXJyYXlTZXQocnQud2luZG93LFl0LF90LWp0LHBuLHJ0LnduZXh0KSwoanQtPXBuKT8oVS5h'@;
put 'cnJheVNldChydC53aW5kb3csWXQsX3QtanQsanQsMCkscnQud25leHQ9anQscnQud2hhdmU9cnQud3NpemUpOihydC53bmV4dCs9cG4scnQud25leHQ9PT1ydC53c2l6ZSYmKHJ0LnduZXh0PTApLHJ0LndoYXZlPHJ0LndzaXplJiYocnQud2hhdmUrPXBuKSkpLDB9KE10LE10Lm91dHB1dCxN'@;
put 'dC5uZXh0X291dCxCdC1NdC5hdmFpbF9vdXQpPyhfdC5tb2RlPTMxLC00KTooQnQtPU10LmF2YWlsX291dCxNdC50b3RhbF9pbis9a24tPU10LmF2YWlsX2luLE10LnRvdGFsX291dCs9QnQsX3QudG90YWwrPUJ0LF90LndyYXAmJkJ0JiYoTXQuYWRsZXI9X3QuY2hlY2s9X3QuZmxhZ3M/RShf'@;
put 'dC5jaGVjayxwbixCdCxNdC5uZXh0X291dC1CdCk6SShfdC5jaGVjayxwbixCdCxNdC5uZXh0X291dC1CdCkpLE10LmRhdGFfdHlwZT1fdC5iaXRzKyhfdC5sYXN0PzY0OjApKygxMj09PV90Lm1vZGU/MTI4OjApKygyMD09PV90Lm1vZGV8fDE1PT09X3QubW9kZT8yNTY6MCksKDA9PT1rbiYm'@;
put 'MD09PUJ0fHw0PT09WXQpJiZBcj09PVEmJihBcj0tNSksQXIpfSxQLmluZmxhdGVFbmQ9ZnVuY3Rpb24gZm4oTXQpe2lmKCFNdHx8IU10LnN0YXRlKXJldHVybiBzZTt2YXIgWXQ9TXQuc3RhdGU7cmV0dXJuIFl0LndpbmRvdyYmKFl0LndpbmRvdz1udWxsKSxNdC5zdGF0ZT1udWxsLFF9LFAu'@;
put 'aW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbiBkbihNdCxZdCl7dmFyIF90O3JldHVybiBNdCYmTXQuc3RhdGUmJjImKF90PU10LnN0YXRlKS53cmFwPyhfdC5oZWFkPVl0LFl0LmRvbmU9ITEsUSk6c2V9LFAuaW5mbGF0ZUluZm89InBha28gaW5mbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCki'@;
put 'fSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL2luZmZhc3QiOjM0LCIuL2luZnRyZWVzIjozNn1dLDM2OltmdW5jdGlvbihBLEQsUCl7InVzZSBzdHJpY3QiO3ZhciBVPUEoIi4uL3V0aWxzL2NvbW1vbiIpLFo9WzMsNCw1LDYsNyw4LDksMTAs'@;
put 'MTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNTgsMCwwXSxXPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3'@;
put 'Miw3OF0sej1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkzLDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scT1bMTYsMTYsMTYsMTYsMTcsMTcsMTgsMTgsMTksMTksMjAsMjAs'@;
put 'MjEsMjEsMjIsMjIsMjMsMjMsMjQsMjQsMjUsMjUsMjYsMjYsMjcsMjcsMjgsMjgsMjksMjksNjQsNjRdO0QuZXhwb3J0cz1mdW5jdGlvbih0ZSxhZSxzZSxkZSxsZSxjZSxHLHkpe3ZhciB1ZSxoZSx4ZSxPZSxIZSxOZSxGZSxDZSxEZSxMPXkuYml0cyxIPTAsaj0wLGc9MCxTPTAseD0wLF89'@;
put 'MCxwPTAsQz0wLEs9MCxuZT0wLEVlPW51bGwsTGU9MCxLZT1uZXcgVS5CdWYxNigxNiksVWU9bmV3IFUuQnVmMTYoMTYpLFhlPW51bGwsYXQ9MDtmb3IoSD0wO0g8PTE1O0grKylLZVtIXT0wO2ZvcihqPTA7ajxkZTtqKyspS2VbYWVbc2Ural1dKys7Zm9yKHg9TCxTPTE1O1M+PTEmJjA9PT1L'@;
put 'ZVtTXTtTLS0pO2lmKHg+UyYmKHg9UyksMD09PVMpcmV0dXJuIGxlW2NlKytdPTIwOTcxNTIwLGxlW2NlKytdPTIwOTcxNTIwLHkuYml0cz0xLDA7Zm9yKGc9MTtnPFMmJjA9PT1LZVtnXTtnKyspO2Zvcih4PGcmJih4PWcpLEM9MSxIPTE7SDw9MTU7SCsrKWlmKEM8PD0xLChDLT1LZVtIXSk8'@;
put 'MClyZXR1cm4tMTtpZihDPjAmJigwPT09dGV8fDEhPT1TKSlyZXR1cm4tMTtmb3IoVWVbMV09MCxIPTE7SDwxNTtIKyspVWVbSCsxXT1VZVtIXStLZVtIXTtmb3Ioaj0wO2o8ZGU7aisrKTAhPT1hZVtzZStqXSYmKEdbVWVbYWVbc2Ural1dKytdPWopO2lmKDA9PT10ZT8oRWU9WGU9RyxOZT0x'@;
put 'OSk6MT09PXRlPyhFZT1aLExlLT0yNTcsWGU9VyxhdC09MjU3LE5lPTI1Nik6KEVlPXosWGU9cSxOZT0tMSksbmU9MCxqPTAsSD1nLEhlPWNlLF89eCxwPTAseGU9LTEsT2U9KEs9MTw8eCktMSwxPT09dGUmJks+ODUyfHwyPT09dGUmJks+NTkyKXJldHVybiAxO2Zvcig7Oyl7RmU9SC1wLEdb'@;
put 'al08TmU/KENlPTAsRGU9R1tqXSk6R1tqXT5OZT8oQ2U9WGVbYXQrR1tqXV0sRGU9RWVbTGUrR1tqXV0pOihDZT05NixEZT0wKSx1ZT0xPDxILXAsZz1oZT0xPDxfO2Rve2xlW0hlKyhuZT4+cCkrKGhlLT11ZSldPUZlPDwyNHxDZTw8MTZ8RGV9d2hpbGUoMCE9PWhlKTtmb3IodWU9MTw8SC0x'@;
put 'O25lJnVlOyl1ZT4+PTE7aWYoMCE9PXVlPyhuZSY9dWUtMSxuZSs9dWUpOm5lPTAsaisrLDA9PS0tS2VbSF0pe2lmKEg9PT1TKWJyZWFrO0g9YWVbc2UrR1tqXV19aWYoSD54JiYobmUmT2UpIT09eGUpe2ZvcigwPT09cCYmKHA9eCksSGUrPWcsQz0xPDwoXz1ILXApO18rcDxTJiYhKChDLT1L'@;
put 'ZVtfK3BdKTw9MCk7KV8rKyxDPDw9MTtpZihLKz0xPDxfLDE9PT10ZSYmSz44NTJ8fDI9PT10ZSYmSz41OTIpcmV0dXJuIDE7bGVbeGU9bmUmT2VdPXg8PDI0fF88PDE2fEhlLWNlfX1yZXR1cm4gMCE9PW5lJiYobGVbSGUrbmVdPUgtcDw8MjR8NjQ8PDE2KSx5LmJpdHM9eCwwfX0seyIuLi91'@;
put 'dGlscy9jb21tb24iOjI3fV0sMzc6W2Z1bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7RC5leHBvcnRzPXsyOiJuZWVkIGRpY3Rpb25hcnkiLDE6InN0cmVhbSBlbmQiLDA6IiIsIi0xIjoiZmlsZSBlcnJvciIsIi0yIjoic3RyZWFtIGVycm9yIiwiLTMiOiJkYXRhIGVycm9yIiwiLTQiOiJp'@;
put 'bnN1ZmZpY2llbnQgbWVtb3J5IiwiLTUiOiJidWZmZXIgZXJyb3IiLCItNiI6ImluY29tcGF0aWJsZSB2ZXJzaW9uIn19LHt9XSwzODpbZnVuY3Rpb24oQSxELFApeyJ1c2Ugc3RyaWN0Ijt2YXIgVT1BKCIuLi91dGlscy9jb21tb24iKTtmdW5jdGlvbiBOKHB0KXtmb3IodmFyIGZuPXB0Lmxl'@;
put 'bmd0aDstLWZuPj0wOylwdFtmbl09MH12YXIgY2U9MTUsRz0xNixTPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLHg9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIs'@;
put 'MTMsMTNdLF89WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLHA9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLEs9bmV3IEFycmF5KDU3Nik7TihLKTt2YXIgbmU9bmV3IEFycmF5KDYwKTtOKG5lKTt2YXIgdWU9bmV3IEFycmF5'@;
put 'KDUxMik7Tih1ZSk7dmFyIGhlPW5ldyBBcnJheSgyNTYpO04oaGUpO3ZhciB4ZT1uZXcgQXJyYXkoMjkpO04oeGUpO3ZhciBPZT1uZXcgQXJyYXkoMzApO04oT2UpO3ZhciBFZSxMZSxOZSxIZT1mdW5jdGlvbihwdCxmbixkbixNdCxZdCl7dGhpcy5zdGF0aWNfdHJlZT1wdCx0aGlzLmV4dHJh'@;
put 'X2JpdHM9Zm4sdGhpcy5leHRyYV9iYXNlPWRuLHRoaXMuZWxlbXM9TXQsdGhpcy5tYXhfbGVuZ3RoPVl0LHRoaXMuaGFzX3N0cmVlPXB0JiZwdC5sZW5ndGh9LEtlPWZ1bmN0aW9uKHB0LGZuKXt0aGlzLmR5bl90cmVlPXB0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1mbn07ZnVu'@;
put 'Y3Rpb24gVWUocHQpe3JldHVybiBwdDwyNTY/dWVbcHRdOnVlWzI1NisocHQ+Pj43KV19ZnVuY3Rpb24gWGUocHQsZm4pe3B0LnBlbmRpbmdfYnVmW3B0LnBlbmRpbmcrK109MjU1JmZuLHB0LnBlbmRpbmdfYnVmW3B0LnBlbmRpbmcrK109Zm4+Pj44JjI1NX1mdW5jdGlvbiBhdChwdCxmbixk'@;
put 'bil7cHQuYmlfdmFsaWQ+Ry1kbj8ocHQuYmlfYnVmfD1mbjw8cHQuYmlfdmFsaWQmNjU1MzUsWGUocHQscHQuYmlfYnVmKSxwdC5iaV9idWY9Zm4+PkctcHQuYmlfdmFsaWQscHQuYmlfdmFsaWQrPWRuLUcpOihwdC5iaV9idWZ8PWZuPDxwdC5iaV92YWxpZCY2NTUzNSxwdC5iaV92YWxpZCs9'@;
put 'ZG4pfWZ1bmN0aW9uIEZlKHB0LGZuLGRuKXthdChwdCxkblsyKmZuXSxkblsyKmZuKzFdKX1mdW5jdGlvbiBDZShwdCxmbil7dmFyIGRuPTA7ZG97ZG58PTEmcHQscHQ+Pj49MSxkbjw8PTF9d2hpbGUoLS1mbj4wKTtyZXR1cm4gZG4+Pj4xfWZ1bmN0aW9uIGV0KHB0LGZuLGRuKXt2YXIgX3Qs'@;
put 'anQsTXQ9bmV3IEFycmF5KGNlKzEpLFl0PTA7Zm9yKF90PTE7X3Q8PWNlO190KyspTXRbX3RdPVl0PVl0K2RuW190LTFdPDwxO2ZvcihqdD0wO2p0PD1mbjtqdCsrKXt2YXIgcG49cHRbMipqdCsxXTswIT09cG4mJihwdFsyKmp0XT1DZShNdFtwbl0rKyxwbikpfX1mdW5jdGlvbiBHZShwdCl7'@;
put 'dmFyIGZuO2Zvcihmbj0wO2ZuPDI4NjtmbisrKXB0LmR5bl9sdHJlZVsyKmZuXT0wO2Zvcihmbj0wO2ZuPDMwO2ZuKyspcHQuZHluX2R0cmVlWzIqZm5dPTA7Zm9yKGZuPTA7Zm48MTk7Zm4rKylwdC5ibF90cmVlWzIqZm5dPTA7cHQuZHluX2x0cmVlWzUxMl09MSxwdC5vcHRfbGVuPXB0LnN0'@;
put 'YXRpY19sZW49MCxwdC5sYXN0X2xpdD1wdC5tYXRjaGVzPTB9ZnVuY3Rpb24gZHQocHQpe3B0LmJpX3ZhbGlkPjg/WGUocHQscHQuYmlfYnVmKTpwdC5iaV92YWxpZD4wJiYocHQucGVuZGluZ19idWZbcHQucGVuZGluZysrXT1wdC5iaV9idWYpLHB0LmJpX2J1Zj0wLHB0LmJpX3ZhbGlkPTB9'@;
put 'ZnVuY3Rpb24gQWUocHQsZm4sZG4sTXQpe3ZhciBZdD0yKmZuLF90PTIqZG47cmV0dXJuIHB0W1l0XTxwdFtfdF18fHB0W1l0XT09PXB0W190XSYmTXRbZm5dPD1NdFtkbl19ZnVuY3Rpb24gQmUocHQsZm4sZG4pe2Zvcih2YXIgTXQ9cHQuaGVhcFtkbl0sWXQ9ZG48PDE7WXQ8PXB0LmhlYXBf'@;
put 'bGVuJiYoWXQ8cHQuaGVhcF9sZW4mJkFlKGZuLHB0LmhlYXBbWXQrMV0scHQuaGVhcFtZdF0scHQuZGVwdGgpJiZZdCsrLCFBZShmbixNdCxwdC5oZWFwW1l0XSxwdC5kZXB0aCkpOylwdC5oZWFwW2RuXT1wdC5oZWFwW1l0XSxkbj1ZdCxZdDw8PTE7cHQuaGVhcFtkbl09TXR9ZnVuY3Rpb24g'@;
put 'b3QocHQsZm4sZG4pe3ZhciBNdCxZdCxqdCxwbixfdD0wO2lmKDAhPT1wdC5sYXN0X2xpdClkb3tNdD1wdC5wZW5kaW5nX2J1ZltwdC5kX2J1ZisyKl90XTw8OHxwdC5wZW5kaW5nX2J1ZltwdC5kX2J1ZisyKl90KzFdLFl0PXB0LnBlbmRpbmdfYnVmW3B0LmxfYnVmK190XSxfdCsrLDA9PT1N'@;
put 'dD9GZShwdCxZdCxmbik6KEZlKHB0LChqdD1oZVtZdF0pKzI1NisxLGZuKSwwIT09KHBuPVNbanRdKSYmYXQocHQsWXQtPXhlW2p0XSxwbiksRmUocHQsanQ9VWUoLS1NdCksZG4pLDAhPT0ocG49eFtqdF0pJiZhdChwdCxNdC09T2VbanRdLHBuKSl9d2hpbGUoX3Q8cHQubGFzdF9saXQpO0Zl'@;
put 'KHB0LDI1Nixmbil9ZnVuY3Rpb24gbHQocHQsZm4pe3ZhciBqdCxwbixFdCxkbj1mbi5keW5fdHJlZSxNdD1mbi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsWXQ9Zm4uc3RhdF9kZXNjLmhhc19zdHJlZSxfdD1mbi5zdGF0X2Rlc2MuZWxlbXMscnQ9LTE7Zm9yKHB0LmhlYXBfbGVuPTAscHQuaGVh'@;
put 'cF9tYXg9NTczLGp0PTA7anQ8X3Q7anQrKykwIT09ZG5bMipqdF0/KHB0LmhlYXBbKytwdC5oZWFwX2xlbl09cnQ9anQscHQuZGVwdGhbanRdPTApOmRuWzIqanQrMV09MDtmb3IoO3B0LmhlYXBfbGVuPDI7KWRuWzIqKEV0PXB0LmhlYXBbKytwdC5oZWFwX2xlbl09cnQ8Mj8rK3J0OjApXT0x'@;
put 'LHB0LmRlcHRoW0V0XT0wLHB0Lm9wdF9sZW4tLSxZdCYmKHB0LnN0YXRpY19sZW4tPU10WzIqRXQrMV0pO2Zvcihmbi5tYXhfY29kZT1ydCxqdD1wdC5oZWFwX2xlbj4+MTtqdD49MTtqdC0tKUJlKHB0LGRuLGp0KTtFdD1fdDtkb3tqdD1wdC5oZWFwWzFdLHB0LmhlYXBbMV09cHQuaGVhcFtw'@;
put 'dC5oZWFwX2xlbi0tXSxCZShwdCxkbiwxKSxwbj1wdC5oZWFwWzFdLHB0LmhlYXBbLS1wdC5oZWFwX21heF09anQscHQuaGVhcFstLXB0LmhlYXBfbWF4XT1wbixkblsyKkV0XT1kblsyKmp0XStkblsyKnBuXSxwdC5kZXB0aFtFdF09KHB0LmRlcHRoW2p0XT49cHQuZGVwdGhbcG5dP3B0LmRl'@;
put 'cHRoW2p0XTpwdC5kZXB0aFtwbl0pKzEsZG5bMipqdCsxXT1kblsyKnBuKzFdPUV0LHB0LmhlYXBbMV09RXQrKyxCZShwdCxkbiwxKX13aGlsZShwdC5oZWFwX2xlbj49Mik7cHQuaGVhcFstLXB0LmhlYXBfbWF4XT1wdC5oZWFwWzFdLGZ1bmN0aW9uIFJlKHB0LGZuKXt2YXIgRXQsUXQsVHQs'@;
put 'bXQsR3Qsa24sZG49Zm4uZHluX3RyZWUsTXQ9Zm4ubWF4X2NvZGUsWXQ9Zm4uc3RhdF9kZXNjLnN0YXRpY190cmVlLF90PWZuLnN0YXRfZGVzYy5oYXNfc3RyZWUsanQ9Zm4uc3RhdF9kZXNjLmV4dHJhX2JpdHMscG49Zm4uc3RhdF9kZXNjLmV4dHJhX2Jhc2UscnQ9Zm4uc3RhdF9kZXNjLm1h'@;
put 'eF9sZW5ndGgsQnQ9MDtmb3IobXQ9MDttdDw9Y2U7bXQrKylwdC5ibF9jb3VudFttdF09MDtmb3IoZG5bMipwdC5oZWFwW3B0LmhlYXBfbWF4XSsxXT0wLEV0PXB0LmhlYXBfbWF4KzE7RXQ8NTczO0V0KyspKG10PWRuWzIqZG5bMiooUXQ9cHQuaGVhcFtFdF0pKzFdKzFdKzEpPnJ0JiYobXQ9'@;
put 'cnQsQnQrKyksZG5bMipRdCsxXT1tdCwhKFF0Pk10KSYmKHB0LmJsX2NvdW50W210XSsrLEd0PTAsUXQ+PXBuJiYoR3Q9anRbUXQtcG5dKSxwdC5vcHRfbGVuKz0oa249ZG5bMipRdF0pKihtdCtHdCksX3QmJihwdC5zdGF0aWNfbGVuKz1rbiooWXRbMipRdCsxXStHdCkpKTtpZigwIT09QnQp'@;
put 'e2Rve2ZvcihtdD1ydC0xOzA9PT1wdC5ibF9jb3VudFttdF07KW10LS07cHQuYmxfY291bnRbbXRdLS0scHQuYmxfY291bnRbbXQrMV0rPTIscHQuYmxfY291bnRbcnRdLS0sQnQtPTJ9d2hpbGUoQnQ+MCk7Zm9yKG10PXJ0OzAhPT1tdDttdC0tKWZvcihRdD1wdC5ibF9jb3VudFttdF07MCE9'@;
put 'PVF0OykhKChUdD1wdC5oZWFwWy0tRXRdKT5NdCkmJihkblsyKlR0KzFdIT09bXQmJihwdC5vcHRfbGVuKz0obXQtZG5bMipUdCsxXSkqZG5bMipUdF0sZG5bMipUdCsxXT1tdCksUXQtLSl9fShwdCxmbiksZXQoZG4scnQscHQuYmxfY291bnQpfWZ1bmN0aW9uIEN0KHB0LGZuLGRuKXt2YXIg'@;
put 'TXQsX3QsWXQ9LTEsanQ9Zm5bMV0scG49MCxydD03LEV0PTQ7Zm9yKDA9PT1qdCYmKHJ0PTEzOCxFdD0zKSxmblsyKihkbisxKSsxXT02NTUzNSxNdD0wO010PD1kbjtNdCsrKV90PWp0LGp0PWZuWzIqKE10KzEpKzFdLCEoKytwbjxydCYmX3Q9PT1qdCkmJihwbjxFdD9wdC5ibF90cmVlWzIq'@;
put 'X3RdKz1wbjowIT09X3Q/KF90IT09WXQmJnB0LmJsX3RyZWVbMipfdF0rKyxwdC5ibF90cmVlWzMyXSsrKTpwbjw9MTA/cHQuYmxfdHJlZVszNF0rKzpwdC5ibF90cmVlWzM2XSsrLHBuPTAsWXQ9X3QsMD09PWp0PyhydD0xMzgsRXQ9Myk6X3Q9PT1qdD8ocnQ9NixFdD0zKToocnQ9NyxFdD00'@;
put 'KSl9ZnVuY3Rpb24gRnQocHQsZm4sZG4pe3ZhciBNdCxfdCxZdD0tMSxqdD1mblsxXSxwbj0wLHJ0PTcsRXQ9NDtmb3IoMD09PWp0JiYocnQ9MTM4LEV0PTMpLE10PTA7TXQ8PWRuO010KyspaWYoX3Q9anQsanQ9Zm5bMiooTXQrMSkrMV0sISgrK3BuPHJ0JiZfdD09PWp0KSl7aWYocG48RXQp'@;
put 'ZG97RmUocHQsX3QscHQuYmxfdHJlZSl9d2hpbGUoMCE9LS1wbik7ZWxzZSAwIT09X3Q/KF90IT09WXQmJihGZShwdCxfdCxwdC5ibF90cmVlKSxwbi0tKSxGZShwdCwxNixwdC5ibF90cmVlKSxhdChwdCxwbi0zLDIpKTpwbjw9MTA/KEZlKHB0LDE3LHB0LmJsX3RyZWUpLGF0KHB0LHBuLTMs'@;
put 'MykpOihGZShwdCwxOCxwdC5ibF90cmVlKSxhdChwdCxwbi0xMSw3KSk7cG49MCxZdD1fdCwwPT09anQ/KHJ0PTEzOCxFdD0zKTpfdD09PWp0PyhydD02LEV0PTMpOihydD03LEV0PTQpfX12YXIgenQ9ITE7ZnVuY3Rpb24gQm4ocHQsZm4sZG4sTXQpe2F0KHB0LDArKE10PzE6MCksMyksZnVu'@;
put 'Y3Rpb24gVGUocHQsZm4sZG4sTXQpe2R0KHB0KSxNdCYmKFhlKHB0LGRuKSxYZShwdCx+ZG4pKSxVLmFycmF5U2V0KHB0LnBlbmRpbmdfYnVmLHB0LndpbmRvdyxmbixkbixwdC5wZW5kaW5nKSxwdC5wZW5kaW5nKz1kbn0ocHQsZm4sZG4sITApfVAuX3RyX2luaXQ9ZnVuY3Rpb24gdm4ocHQp'@;
put 'e3p0fHwoZnVuY3Rpb24gbnQoKXt2YXIgcHQsZm4sZG4sTXQsWXQsX3Q9bmV3IEFycmF5KGNlKzEpO2Zvcihkbj0wLE10PTA7TXQ8Mjg7TXQrKylmb3IoeGVbTXRdPWRuLHB0PTA7cHQ8MTw8U1tNdF07cHQrKyloZVtkbisrXT1NdDtmb3IoaGVbZG4tMV09TXQsWXQ9MCxNdD0wO010PDE2O010'@;
put 'KyspZm9yKE9lW010XT1ZdCxwdD0wO3B0PDE8PHhbTXRdO3B0KyspdWVbWXQrK109TXQ7Zm9yKFl0Pj49NztNdDwzMDtNdCsrKWZvcihPZVtNdF09WXQ8PDcscHQ9MDtwdDwxPDx4W010XS03O3B0KyspdWVbMjU2K1l0KytdPU10O2Zvcihmbj0wO2ZuPD1jZTtmbisrKV90W2ZuXT0wO2Zvcihw'@;
put 'dD0wO3B0PD0xNDM7KUtbMipwdCsxXT04LHB0KyssX3RbOF0rKztmb3IoO3B0PD0yNTU7KUtbMipwdCsxXT05LHB0KyssX3RbOV0rKztmb3IoO3B0PD0yNzk7KUtbMipwdCsxXT03LHB0KyssX3RbN10rKztmb3IoO3B0PD0yODc7KUtbMipwdCsxXT04LHB0KyssX3RbOF0rKztmb3IoZXQoSywy'@;
put 'ODcsX3QpLHB0PTA7cHQ8MzA7cHQrKyluZVsyKnB0KzFdPTUsbmVbMipwdF09Q2UocHQsNSk7RWU9bmV3IEhlKEssUywyNTcsMjg2LGNlKSxMZT1uZXcgSGUobmUseCwwLDMwLGNlKSxOZT1uZXcgSGUobmV3IEFycmF5KDApLF8sMCwxOSw3KX0oKSx6dD0hMCkscHQubF9kZXNjPW5ldyBLZShw'@;
put 'dC5keW5fbHRyZWUsRWUpLHB0LmRfZGVzYz1uZXcgS2UocHQuZHluX2R0cmVlLExlKSxwdC5ibF9kZXNjPW5ldyBLZShwdC5ibF90cmVlLE5lKSxwdC5iaV9idWY9MCxwdC5iaV92YWxpZD0wLEdlKHB0KX0sUC5fdHJfc3RvcmVkX2Jsb2NrPUJuLFAuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9u'@;
put 'IFpuKHB0LGZuLGRuLE10KXt2YXIgWXQsX3QsanQ9MDtwdC5sZXZlbD4wPygyPT09cHQuc3RybS5kYXRhX3R5cGUmJihwdC5zdHJtLmRhdGFfdHlwZT1mdW5jdGlvbiBTbihwdCl7dmFyIGRuLGZuPTQwOTM2MjQ0NDc7Zm9yKGRuPTA7ZG48PTMxO2RuKyssZm4+Pj49MSlpZigxJmZuJiYwIT09'@;
put 'cHQuZHluX2x0cmVlWzIqZG5dKXJldHVybiAwO2lmKDAhPT1wdC5keW5fbHRyZWVbMThdfHwwIT09cHQuZHluX2x0cmVlWzIwXXx8MCE9PXB0LmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKGRuPTMyO2RuPDI1NjtkbisrKWlmKDAhPT1wdC5keW5fbHRyZWVbMipkbl0pcmV0dXJuIDE7cmV0'@;
put 'dXJuIDB9KHB0KSksbHQocHQscHQubF9kZXNjKSxsdChwdCxwdC5kX2Rlc2MpLGp0PWZ1bmN0aW9uIFJ0KHB0KXt2YXIgZm47Zm9yKEN0KHB0LHB0LmR5bl9sdHJlZSxwdC5sX2Rlc2MubWF4X2NvZGUpLEN0KHB0LHB0LmR5bl9kdHJlZSxwdC5kX2Rlc2MubWF4X2NvZGUpLGx0KHB0LHB0LmJs'@;
put 'X2Rlc2MpLGZuPTE4O2ZuPj0zJiYwPT09cHQuYmxfdHJlZVsyKnBbZm5dKzFdO2ZuLS0pO3JldHVybiBwdC5vcHRfbGVuKz0zKihmbisxKSs1KzUrNCxmbn0ocHQpLChfdD1wdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oWXQ9cHQub3B0X2xlbiszKzc+Pj4zKSYmKFl0PV90KSk6WXQ9X3Q9ZG4r'@;
put 'NSxkbis0PD1ZdCYmLTEhPT1mbj9CbihwdCxmbixkbixNdCk6ND09PXB0LnN0cmF0ZWd5fHxfdD09PVl0PyhhdChwdCwyKyhNdD8xOjApLDMpLG90KHB0LEssbmUpKTooYXQocHQsNCsoTXQ/MTowKSwzKSxmdW5jdGlvbiBYdChwdCxmbixkbixNdCl7dmFyIFl0O2ZvcihhdChwdCxmbi0yNTcs'@;
put 'NSksYXQocHQsZG4tMSw1KSxhdChwdCxNdC00LDQpLFl0PTA7WXQ8TXQ7WXQrKylhdChwdCxwdC5ibF90cmVlWzIqcFtZdF0rMV0sMyk7RnQocHQscHQuZHluX2x0cmVlLGZuLTEpLEZ0KHB0LHB0LmR5bl9kdHJlZSxkbi0xKX0ocHQscHQubF9kZXNjLm1heF9jb2RlKzEscHQuZF9kZXNjLm1h'@;
put 'eF9jb2RlKzEsanQrMSksb3QocHQscHQuZHluX2x0cmVlLHB0LmR5bl9kdHJlZSkpLEdlKHB0KSxNdCYmZHQocHQpfSxQLl90cl90YWxseT1mdW5jdGlvbiBPbihwdCxmbixkbil7cmV0dXJuIHB0LnBlbmRpbmdfYnVmW3B0LmRfYnVmKzIqcHQubGFzdF9saXRdPWZuPj4+OCYyNTUscHQucGVu'@;
put 'ZGluZ19idWZbcHQuZF9idWYrMipwdC5sYXN0X2xpdCsxXT0yNTUmZm4scHQucGVuZGluZ19idWZbcHQubF9idWYrcHQubGFzdF9saXRdPTI1NSZkbixwdC5sYXN0X2xpdCsrLDA9PT1mbj9wdC5keW5fbHRyZWVbMipkbl0rKzoocHQubWF0Y2hlcysrLGZuLS0scHQuZHluX2x0cmVlWzIqKGhl'@;
put 'W2RuXSsyNTYrMSldKysscHQuZHluX2R0cmVlWzIqVWUoZm4pXSsrKSxwdC5sYXN0X2xpdD09PXB0LmxpdF9idWZzaXplLTF9LFAuX3RyX2FsaWduPWZ1bmN0aW9uIHRuKHB0KXthdChwdCwyLDMpLEZlKHB0LDI1NixLKSxmdW5jdGlvbiBEZShwdCl7MTY9PT1wdC5iaV92YWxpZD8oWGUocHQs'@;
put 'cHQuYmlfYnVmKSxwdC5iaV9idWY9MCxwdC5iaV92YWxpZD0wKTpwdC5iaV92YWxpZD49OCYmKHB0LnBlbmRpbmdfYnVmW3B0LnBlbmRpbmcrK109MjU1JnB0LmJpX2J1ZixwdC5iaV9idWY+Pj04LHB0LmJpX3ZhbGlkLT04KX0ocHQpfX0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1'@;
put 'bmN0aW9uKEEsRCxQKXsidXNlIHN0cmljdCI7RC5leHBvcnRzPWZ1bmN0aW9uIFUoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRo'@;
put 'aXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfX0se31dfSx7fSxbOV0pKDkpfSl9LDYzNTc4OigkZSxTZSxSKT0+eyFmdW5jdGlvbiBiKHcpe3cudmVyc2lvbj0iMS4yMDIxMTEyMi4xIjt2YXIgQT0xMjAwLEQ9'@;
put 'MTI1Mjt0eXBlb2YgY3B0YWJsZT4idSImJih0eXBlb2YgZ2xvYmFsPCJ1Ij9nbG9iYWwuY3B0YWJsZT1SKDQyOTI0KTp0eXBlb2Ygd2luZG93PCJ1IiYmKHdpbmRvdy5jcHRhYmxlPVIoNDI5MjQpKSk7Zm9yKHZhciBQPVs4NzQsOTMyLDkzNiw5NDksOTUwLDFlNF0sVT0wO1U8PTg7KytVKVAu'@;
put 'cHVzaCgxMjUwK1UpO3ZhciBJPXswOjEyNTIsMTo2NTAwMSwyOjY1MDAxLDc3OjFlNCwxMjg6OTMyLDEyOTo5NDksMTMwOjEzNjEsMTM0OjkzNiwxMzY6OTUwLDE2MToxMjUzLDE2MjoxMjU0LDE2MzoxMjU4LDE3NzoxMjU1LDE3ODoxMjU2LDE4NjoxMjU3LDIwNDoxMjUxLDIyMjo4NzQsMjM4'@;
put 'OjEyNTAsMjU1OjEyNTIsNjk6Njk2OX0sRT1mdW5jdGlvbihNKXstMSE9UC5pbmRleE9mKE0pJiYoRD1JWzBdPU0pfSxCPWZ1bmN0aW9uKE0pe0E9TSxFKE0pfTtmdW5jdGlvbiBOKCl7QigxMjAwKSxmdW5jdGlvbiBrKCl7RSgxMjUyKX0oKX1mdW5jdGlvbiBWKE0pe2Zvcih2YXIgRj1bXSxP'@;
put 'PTAsSj1NLmxlbmd0aDtPPEo7KytPKUZbT109TS5jaGFyQ29kZUF0KE8pO3JldHVybiBGfXZhciB6PWZ1bmN0aW9uKE0pe3ZhciBGPU0uY2hhckNvZGVBdCgwKSxPPU0uY2hhckNvZGVBdCgxKTtyZXR1cm4gMjU1PT1GJiYyNTQ9PU8/ZnVuY3Rpb24gWihNKXtmb3IodmFyIEY9W10sTz0wO088'@;
put 'TS5sZW5ndGg+PjE7KytPKUZbT109U3RyaW5nLmZyb21DaGFyQ29kZShNLmNoYXJDb2RlQXQoMipPKSsoTS5jaGFyQ29kZUF0KDIqTysxKTw8OCkpO3JldHVybiBGLmpvaW4oIiIpfShNLnNsaWNlKDIpKToyNTQ9PUYmJjI1NT09Tz9mdW5jdGlvbiBXKE0pe2Zvcih2YXIgRj1bXSxPPTA7TzxN'@;
put 'Lmxlbmd0aD4+MTsrK08pRltPXT1TdHJpbmcuZnJvbUNoYXJDb2RlKE0uY2hhckNvZGVBdCgyKk8rMSkrKE0uY2hhckNvZGVBdCgyKk8pPDw4KSk7cmV0dXJuIEYuam9pbigiIil9KE0uc2xpY2UoMikpOjY1Mjc5PT1GP00uc2xpY2UoMSk6TX0scT1mdW5jdGlvbihGKXtyZXR1cm4gU3RyaW5n'@;
put 'LmZyb21DaGFyQ29kZShGKX0sUT1mdW5jdGlvbihGKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShGKX07dHlwZW9mIGNwdGFibGU8InUiJiYoQj1mdW5jdGlvbihNKXtBPU0sRShNKX0sej1mdW5jdGlvbihNKXtyZXR1cm4gMjU1PT09TS5jaGFyQ29kZUF0KDApJiYyNTQ9PT1NLmNoYXJD'@;
put 'b2RlQXQoMSk/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxWKE0uc2xpY2UoMikpKTpNfSxxPWZ1bmN0aW9uKEYpe3JldHVybiAxMjAwPT09QT9TdHJpbmcuZnJvbUNoYXJDb2RlKEYpOmNwdGFibGUudXRpbHMuZGVjb2RlKEEsWzI1NSZGLEY+PjhdKVswXX0sUT1mdW5jdGlvbihGKXtyZXR1'@;
put 'cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoRCxbRl0pWzBdfSk7dmFyIHRlPW51bGwsc2U9ZnVuY3Rpb24oKXt2YXIgRj0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3JldHVybntlbmNvZGU6ZnVuY3Rpb24oTyl7Zm9y'@;
put 'KHZhciBKPSIiLGllPTAscGU9MCx5ZT0wLHZlPTAsTWU9MCxqZT0wLFllPTAscWU9MDtxZTxPLmxlbmd0aDspdmU9KGllPU8uY2hhckNvZGVBdChxZSsrKSk+PjIsTWU9KDMmaWUpPDw0fChwZT1PLmNoYXJDb2RlQXQocWUrKykpPj40LGplPSgxNSZwZSk8PDJ8KHllPU8uY2hhckNvZGVBdChx'@;
put 'ZSsrKSk+PjYsWWU9NjMmeWUsaXNOYU4ocGUpP2plPVllPTY0OmlzTmFOKHllKSYmKFllPTY0KSxKKz1GLmNoYXJBdCh2ZSkrRi5jaGFyQXQoTWUpK0YuY2hhckF0KGplKStGLmNoYXJBdChZZSk7cmV0dXJuIEp9LGRlY29kZTpmdW5jdGlvbihKKXt2YXIgaWU9IiIsTWU9MCxqZT0wLFllPTAs'@;
put 'cWU9MDtKPUoucmVwbGFjZSgvW15cd1wrXC9cPV0vZywiIik7Zm9yKHZhciBpdD0wO2l0PEoubGVuZ3RoOylNZT1GLmluZGV4T2YoSi5jaGFyQXQoaXQrKykpLGplPUYuaW5kZXhPZihKLmNoYXJBdChpdCsrKSksaWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoTWU8PDJ8amU+PjQpLDY0IT09KFll'@;
put 'PUYuaW5kZXhPZihKLmNoYXJBdChpdCsrKSkpJiYoaWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JmplKTw8NHxZZT4+MikpLDY0IT09KHFlPUYuaW5kZXhPZihKLmNoYXJBdChpdCsrKSkpJiYoaWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMmWWUpPDw2fHFlKSk7cmV0dXJuIGllfX19KCks'@;
put 'ZGU9dHlwZW9mIEJ1ZmZlcjwidSImJnR5cGVvZiBwcm9jZXNzPCJ1IiYmdHlwZW9mIHByb2Nlc3MudmVyc2lvbnM8InUiJiYhIXByb2Nlc3MudmVyc2lvbnMubm9kZSxsZT1mdW5jdGlvbigpe307aWYodHlwZW9mIEJ1ZmZlcjwidSIpe3ZhciBjZT0hQnVmZmVyLmZyb207aWYoIWNlKXRyeXtC'@;
put 'dWZmZXIuZnJvbSgiZm9vIiwidXRmOCIpfWNhdGNoe2NlPSEwfWxlPWNlP2Z1bmN0aW9uKE0sRil7cmV0dXJuIEY/bmV3IEJ1ZmZlcihNLEYpOm5ldyBCdWZmZXIoTSl9OkJ1ZmZlci5mcm9tLmJpbmQoQnVmZmVyKSxCdWZmZXIuYWxsb2N8fChCdWZmZXIuYWxsb2M9ZnVuY3Rpb24oTSl7cmV0'@;
put 'dXJuIG5ldyBCdWZmZXIoTSl9KSxCdWZmZXIuYWxsb2NVbnNhZmV8fChCdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oTSl7cmV0dXJuIG5ldyBCdWZmZXIoTSl9KX1mdW5jdGlvbiBHKE0pe3JldHVybiBkZT9CdWZmZXIuYWxsb2MoTSk6bmV3IEFycmF5KE0pfWZ1bmN0aW9uIHkoTSl7cmV0'@;
put 'dXJuIGRlP0J1ZmZlci5hbGxvY1Vuc2FmZShNKTpuZXcgQXJyYXkoTSl9dmFyIEw9ZnVuY3Rpb24oRil7cmV0dXJuIGRlP2xlKEYsImJpbmFyeSIpOkYuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihPKXtyZXR1cm4gMjU1Jk8uY2hhckNvZGVBdCgwKX0pfTtmdW5jdGlvbiBIKE0pe2lmKHR5cGVv'@;
put 'ZiBBcnJheUJ1ZmZlcj4idSIpcmV0dXJuIEwoTSk7Zm9yKHZhciBGPW5ldyBBcnJheUJ1ZmZlcihNLmxlbmd0aCksTz1uZXcgVWludDhBcnJheShGKSxKPTA7SiE9TS5sZW5ndGg7KytKKU9bSl09MjU1Jk0uY2hhckNvZGVBdChKKTtyZXR1cm4gRn1mdW5jdGlvbiBqKE0pe2lmKEFycmF5Lmlz'@;
put 'QXJyYXkoTSkpcmV0dXJuIE0ubWFwKGZ1bmN0aW9uKEope3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKEopfSkuam9pbigiIik7Zm9yKHZhciBGPVtdLE89MDtPPE0ubGVuZ3RoOysrTylGW09dPVN0cmluZy5mcm9tQ2hhckNvZGUoTVtPXSk7cmV0dXJuIEYuam9pbigiIil9ZnVuY3Rpb24g'@;
put 'UyhNKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQiKTtpZihNIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpcmV0dXJuIFMobmV3IFVpbnQ4QXJyYXkoTSkpO2Zvcih2YXIgRj1uZXcgQXJyYXkoTS5sZW5ndGgpLE89MDtPPE0ubGVuZ3RoOysr'@;
put 'TylGW09dPU1bT107cmV0dXJuIEZ9dmFyIHg9ZnVuY3Rpb24oTSl7dmFyIEY9W107cmV0dXJuIE0uZm9yRWFjaChmdW5jdGlvbihPKXtBcnJheS5pc0FycmF5KE8pP0Y9Ri5jb25jYXQoTyk6KHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fHR5cGVvZiBB'@;
put 'cnJheUJ1ZmZlcjwidSImJk8gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikmJihGPUYuY29uY2F0KFMoTykpKX0pLEZ9LF89L1x1MDAwMC9nLHA9L1tcdTAwMDEtXHUwMDA2XS9nLEM9e30sSz1mdW5jdGlvbihGKXtmdW5jdGlvbiBPKEt0KXtmb3IodmFyIG1uPSIiLEZuPUt0Lmxlbmd0aC0xO0Zu'@;
put 'Pj0wOyltbis9S3QuY2hhckF0KEZuLS0pO3JldHVybiBtbn1mdW5jdGlvbiBKKEt0LG1uKXtmb3IodmFyIEZuPSIiO0ZuLmxlbmd0aDxtbjspRm4rPUt0O3JldHVybiBGbn1mdW5jdGlvbiBpZShLdCxtbil7dmFyIEZuPSIiK0t0O3JldHVybiBGbi5sZW5ndGg+PW1uP0ZuOkooIjAiLG1uLUZu'@;
put 'Lmxlbmd0aCkrRm59ZnVuY3Rpb24gcGUoS3QsbW4pe3ZhciBGbj0iIitLdDtyZXR1cm4gRm4ubGVuZ3RoPj1tbj9GbjpKKCIgIixtbi1Gbi5sZW5ndGgpK0ZufWZ1bmN0aW9uIHllKEt0LG1uKXt2YXIgRm49IiIrS3Q7cmV0dXJuIEZuLmxlbmd0aD49bW4/Rm46Rm4rSigiICIsbW4tRm4ubGVu'@;
put 'Z3RoKX1GLnZlcnNpb249IjEuMjAyMTA3MjYuMSI7dmFyIGplPU1hdGgucG93KDIsMzIpO2Z1bmN0aW9uIFllKEt0LG1uKXtyZXR1cm4gS3Q+amV8fEt0PC1qZT9mdW5jdGlvbiB2ZShLdCxtbil7dmFyIEZuPSIiK01hdGgucm91bmQoS3QpO3JldHVybiBGbi5sZW5ndGg+PW1uP0ZuOkooIjAi'@;
put 'LG1uLUZuLmxlbmd0aCkrRm59KEt0LG1uKTpmdW5jdGlvbiBNZShLdCxtbil7dmFyIEZuPSIiK0t0O3JldHVybiBGbi5sZW5ndGg+PW1uP0ZuOkooIjAiLG1uLUZuLmxlbmd0aCkrRm59KE1hdGgucm91bmQoS3QpLG1uKX1mdW5jdGlvbiBxZShLdCxtbil7cmV0dXJuIEt0Lmxlbmd0aD49Nyso'@;
put 'bW49bW58fDApJiYxMDM9PSgzMnxLdC5jaGFyQ29kZUF0KG1uKSkmJjEwMT09KDMyfEt0LmNoYXJDb2RlQXQobW4rMSkpJiYxMTA9PSgzMnxLdC5jaGFyQ29kZUF0KG1uKzIpKSYmMTAxPT0oMzJ8S3QuY2hhckNvZGVBdChtbiszKSkmJjExND09KDMyfEt0LmNoYXJDb2RlQXQobW4rNCkpJiY5'@;
put 'Nz09KDMyfEt0LmNoYXJDb2RlQXQobW4rNSkpJiYxMDg9PSgzMnxLdC5jaGFyQ29kZUF0KG1uKzYpKX1mdW5jdGlvbiBpdChLdCl7Zm9yKHZhciBtbj1bXSxGbj1PYmplY3Qua2V5cyhLdCksSnI9MDtKciE9PUZuLmxlbmd0aDsrK0pyKW1uW0t0W0ZuW0pyXV1dPUZuW0pyXTtyZXR1cm4gbW59'@;
put 'dmFyIGh0PVtbIlN1biIsIlN1bmRheSJdLFsiTW9uIiwiTW9uZGF5Il0sWyJUdWUiLCJUdWVzZGF5Il0sWyJXZWQiLCJXZWRuZXNkYXkiXSxbIlRodSIsIlRodXJzZGF5Il0sWyJGcmkiLCJGcmlkYXkiXSxbIlNhdCIsIlNhdHVyZGF5Il1dLGt0PVtbIkoiLCJKYW4iLCJKYW51YXJ5Il0sWyJG'@;
put 'IiwiRmViIiwiRmVicnVhcnkiXSxbIk0iLCJNYXIiLCJNYXJjaCJdLFsiQSIsIkFwciIsIkFwcmlsIl0sWyJNIiwiTWF5IiwiTWF5Il0sWyJKIiwiSnVuIiwiSnVuZSJdLFsiSiIsIkp1bCIsIkp1bHkiXSxbIkEiLCJBdWciLCJBdWd1c3QiXSxbIlMiLCJTZXAiLCJTZXB0ZW1iZXIiXSxbIk8i'@;
put 'LCJPY3QiLCJPY3RvYmVyIl0sWyJOIiwiTm92IiwiTm92ZW1iZXIiXSxbIkQiLCJEZWMiLCJEZWNlbWJlciJdXTtmdW5jdGlvbiB1dChLdCl7S3RbMF09IkdlbmVyYWwiLEt0WzFdPSIwIixLdFsyXT0iMC4wMCIsS3RbM109IiMsIyMwIixLdFs0XT0iIywjIzAuMDAiLEt0WzldPSIwJSIsS3Rb'@;
put 'MTBdPSIwLjAwJSIsS3RbMTFdPSIwLjAwRSswMCIsS3RbMTJdPSIjID8vPyIsS3RbMTNdPSIjID8/Lz8/IixLdFsxNF09Im0vZC95eSIsS3RbMTVdPSJkLW1tbS15eSIsS3RbMTZdPSJkLW1tbSIsS3RbMTddPSJtbW0teXkiLEt0WzE4XT0iaDptbSBBTS9QTSIsS3RbMTldPSJoOm1tOnNzIEFN'@;
put 'L1BNIixLdFsyMF09Img6bW0iLEt0WzIxXT0iaDptbTpzcyIsS3RbMjJdPSJtL2QveXkgaDptbSIsS3RbMzddPSIjLCMjMCA7KCMsIyMwKSIsS3RbMzhdPSIjLCMjMCA7W1JlZF0oIywjIzApIixLdFszOV09IiMsIyMwLjAwOygjLCMjMC4wMCkiLEt0WzQwXT0iIywjIzAuMDA7W1JlZF0oIywj'@;
put 'IzAuMDApIixLdFs0NV09Im1tOnNzIixLdFs0Nl09IltoXTptbTpzcyIsS3RbNDddPSJtbXNzLjAiLEt0WzQ4XT0iIyMwLjBFKzAiLEt0WzQ5XT0iQCIsS3RbNTZdPSciXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCAiaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIgIicsVG4oS3QpfXZh'@;
put 'ciB2dD17fTt1dCh2dCk7dmFyIFB0PVtdLER0PTA7Zm9yKER0PTU7RHQ8PTg7KytEdClQdFtEdF09MzIrRHQ7Zm9yKER0PTIzO0R0PD0yNjsrK0R0KVB0W0R0XT0wO2ZvcihEdD0yNztEdDw9MzE7KytEdClQdFtEdF09MTQ7Zm9yKER0PTUwO0R0PD01ODsrK0R0KVB0W0R0XT0xNDtmb3IoRHQ9'@;
put 'NTk7RHQ8PTYyOysrRHQpUHRbRHRdPUR0LTU4O2ZvcihEdD02NztEdDw9Njg7KytEdClQdFtEdF09RHQtNTg7Zm9yKER0PTcyO0R0PD03NTsrK0R0KVB0W0R0XT1EdC01ODtmb3IoRHQ9Njc7RHQ8PTY4OysrRHQpUHRbRHRdPUR0LTU3O2ZvcihEdD03NjtEdDw9Nzg7KytEdClQdFtEdF09RHQt'@;
put 'NTY7Zm9yKER0PTc5O0R0PD04MTsrK0R0KVB0W0R0XT1EdC0zNDt2YXIgQXQ9W107ZnVuY3Rpb24gWnQoS3QsbW4sRm4pe2Zvcih2YXIgSnI9S3Q8MD8tMToxLFhuPUt0KkpyLGhpPTAsY3I9MSxmaT0wLHdvPTEsbWk9MCxZaT0wLGxpPU1hdGguZmxvb3IoWG4pO21pPG1uJiYoZmk9KGxpPU1h'@;
put 'dGguZmxvb3IoWG4pKSpjcitoaSxZaT1saSptaSt3bywhKFhuLWxpPDVlLTgpKTspWG49MS8oWG4tbGkpLGhpPWNyLGNyPWZpLHdvPW1pLG1pPVlpO2lmKFlpPm1uJiYobWk+bW4/KFlpPXdvLGZpPWhpKTooWWk9bWksZmk9Y3IpKSwhRm4pcmV0dXJuWzAsSnIqZmksWWldO3ZhciBFcz1NYXRo'@;
put 'LmZsb29yKEpyKmZpL1lpKTtyZXR1cm5bRXMsSnIqZmktRXMqWWksWWldfWZ1bmN0aW9uIGduKEt0LG1uLEZuKXtpZihLdD4yOTU4NDY1fHxLdDwwKXJldHVybiBudWxsO3ZhciBKcj0wfEt0LFhuPU1hdGguZmxvb3IoODY0MDAqKEt0LUpyKSksaGk9MCxjcj1bXSxmaT17RDpKcixUOlhuLHU6'@;
put 'ODY0MDAqKEt0LUpyKS1Ybix5OjAsbTowLGQ6MCxIOjAsTTowLFM6MCxxOjB9O2lmKE1hdGguYWJzKGZpLnUpPDFlLTYmJihmaS51PTApLG1uJiZtbi5kYXRlMTkwNCYmKEpyKz0xNDYyKSxmaS51Pi45OTk5JiYoZmkudT0wLDg2NDAwPT0rK1huJiYoZmkuVD1Ybj0wLCsrSnIsKytmaS5EKSks'@;
put 'NjA9PT1Kciljcj1Gbj9bMTMxNywxMCwyOV06WzE5MDAsMiwyOV0saGk9MztlbHNlIGlmKDA9PT1Kciljcj1Gbj9bMTMxNyw4LDI5XTpbMTkwMCwxLDBdLGhpPTY7ZWxzZXtKcj42MCYmLS1Kcjt2YXIgd289bmV3IERhdGUoMTkwMCwwLDEpO3dvLnNldERhdGUod28uZ2V0RGF0ZSgpK0pyLTEp'@;
put 'LGNyPVt3by5nZXRGdWxsWWVhcigpLHdvLmdldE1vbnRoKCkrMSx3by5nZXREYXRlKCldLGhpPXdvLmdldERheSgpLEpyPDYwJiYoaGk9KGhpKzYpJTcpLEZuJiYoaGk9ZnVuY3Rpb24gUm8oS3QsbW4pe21uWzBdLT01ODE7dmFyIEZuPUt0LmdldERheSgpO3JldHVybiBLdDw2MCYmKEZuPShG'@;
put 'bis2KSU3KSxGbn0od28sY3IpKX1yZXR1cm4gZmkueT1jclswXSxmaS5tPWNyWzFdLGZpLmQ9Y3JbMl0sZmkuUz1YbiU2MCxYbj1NYXRoLmZsb29yKFhuLzYwKSxmaS5NPVhuJTYwLFhuPU1hdGguZmxvb3IoWG4vNjApLGZpLkg9WG4sZmkucT1oaSxmaX1BdFs1XT1BdFs2M109JyIkIiMsIyMw'@;
put 'Xyk7XFwoIiQiIywjIzBcXCknLEF0WzZdPUF0WzY0XT0nIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyxBdFs3XT1BdFs2NV09JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLEF0WzhdPUF0WzY2XT0nIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxB'@;
put 'dFs0MV09J18oKiAjLCMjMF8pO18oKiBcXCgjLCMjMFxcKTtfKCogIi0iXyk7XyhAXyknLEF0WzQyXT0nXygiJCIqICMsIyMwXyk7XygiJCIqIFxcKCMsIyMwXFwpO18oIiQiKiAiLSJfKTtfKEBfKScsQXRbNDNdPSdfKCogIywjIzAuMDBfKTtfKCogXFwoIywjIzAuMDBcXCk7XygqICItIj8/'@;
put 'Xyk7XyhAXyknLEF0WzQ0XT0nXygiJCIqICMsIyMwLjAwXyk7XygiJCIqIFxcKCMsIyMwLjAwXFwpO18oIiQiKiAiLSI/P18pO18oQF8pJyxGLnBhcnNlX2RhdGVfY29kZT1nbjt2YXIgcW49bmV3IERhdGUoMTg5OSwxMSwzMSwwLDAsMCksdW49cW4uZ2V0VGltZSgpLEpuPW5ldyBEYXRlKDE5'@;
put 'MDAsMiwxLDAsMCwwKTtmdW5jdGlvbiBZbihLdCxtbil7dmFyIEZuPUt0LmdldFRpbWUoKTtyZXR1cm4gbW4/Rm4tPTEyNjIzMDRlNTpLdD49Sm4mJihGbis9ODY0ZTUpLChGbi0odW4rNmU0KihLdC5nZXRUaW1lem9uZU9mZnNldCgpLXFuLmdldFRpbWV6b25lT2Zmc2V0KCkpKSkvODY0ZTV9'@;
put 'dmFyIExuPSIiLHRyPXsiZW4tdXMiOnt5OiJ5IixkOiJkIiwiLCI6IiwiLCIuIjoiLiIsZGF0ZToiXy8ifSwiZGUtZGUiOnt5OiJqIixkOiJ0IiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy4ifSwiaXQtaXQiOnt5OiJ5IixkOiJkIiwiLCI6Ii4iLCIuIjoiLCIsZGF0ZToiXy8ifX0scnI9dHJb'@;
put 'TG4udG9Mb3dlckNhc2UoKV18fHRyWyJlbi11cyJdLFVuPWl0KHJyKSxYcj0iJCIscGk9IiIsZGk9IiwiLF9yPSIuIixBbj0iLyI7ZnVuY3Rpb24gVG4oS3Qpe3N3aXRjaCgoTG58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpLdFsyN109IlskLTQwNF1lL20vZCIsS3RbMjhdPSdb'@;
put 'JC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naGgiXHU2NjQyIm1tIlx1NTIw'@;
put 'NiInLEt0WzMzXT0naGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzM1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiIn'@;
put 'LEt0WzM2XT0iWyQtNDA0XWUvbS9kIixLdFs1MF09IlskLTQwNF1lL20vZCIsS3RbNTFdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1Ml09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiInLEt0WzUzXT0nXHU0ZTBhXHU1MzQ4'@;
put 'L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU0XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTVdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0'@;
put 'OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxLdFs1N109IlskLTQwNF1lL20vZCIsS3RbNThdPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJzticmVhaztjYXNlInpoLWNuIjpLdFsyN109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3Rb'@;
put 'MjhdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzI5XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMF09J20iLSJkIi0ieXknLEt0WzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszMl09J2giXHU2NWY2Im1tIlx1NTIwNiInLEt0WzMzXT0naCJcdTY1ZjYibW0iXHU1'@;
put 'MjA2InNzIlx1NzlkMiInLEt0WzM0XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzM2XT0neXl5eSJcdTVlNzQibSJcdTY3MDgi'@;
put 'JyxLdFs1MF09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTFdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU1XT0nXHU0ZTBhXHU1'@;
put 'MzQ4L1x1NGUwYlx1NTM0OCBoIlx1NjVmNiJtbSJcdTUyMDYiJyxLdFs1Nl09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2InNzIlx1NzlkMiInLEt0WzU3XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1OF09J20iXHU2NzA4ImQiXHU2NWU1Iic7YnJl'@;
put 'YWs7Y2FzZSJqYS1qcCI6S3RbMjddPSdbJC00MTFdZ2UiLiJtIi4iZCcsS3RbMjhdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFsyOV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMwXT0nbSIvImQiLyJ5eScsS3RbMzFdPSd5'@;
put 'eXl5Ilx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzMyXT0naCJcdTY2NDIibW0iXHU1MjA2IicsS3RbMzNdPSdoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsS3RbMzRdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLEt0WzM1XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFszNl09'@;
put 'J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MF09J1skLTQxMV1nZSIuIm0iLiJkJyxLdFs1MV09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzUyXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxLdFs1M109J20iXHU2NzA4ImQiXHU2NWU1IicsS3RbNTRdPSdbJC00'@;
put 'MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxLdFs1NV09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsS3RbNTZdPSdtIlx1NjcwOCJkIlx1NjVlNSInLEt0WzU3XT0nWyQtNDExXWdlIi4ibSIuImQnLEt0WzU4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1'@;
put 'Iic7YnJlYWs7Y2FzZSJrby1rciI6S3RbMjddPSd5eXl5Ilx1NWU3NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFsyOF09Im1tLWRkIixLdFsyOV09Im1tLWRkIixLdFszMF09Im1tLWRkLXl5IixLdFszMV09J3l5eXkiXHViMTQ0IiBtbSJcdWM2ZDQiIGRkIlx1Yzc3YyInLEt0WzMyXT0n'@;
put 'aCJcdWMyZGMiIG1tIlx1YmQ4NCInLEt0WzMzXT0naCJcdWMyZGMiIG1tIlx1YmQ4NCIgc3MiXHVjZDA4IicsS3RbMzRdPSJ5eXl5LW1tLWRkIixLdFszNV09Inl5eXktbW0tZGQiLEt0WzM2XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsS3RbNTBdPSd5eXl5Ilx1NWU3'@;
put 'NCIgbW0iXHU2NzA4IiBkZCJcdTY1ZTUiJyxLdFs1MV09Im1tLWRkIixLdFs1Ml09Inl5eXktbW0tZGQiLEt0WzUzXT0ieXl5eS1tbS1kZCIsS3RbNTRdPSJtbS1kZCIsS3RbNTVdPSJ5eXl5LW1tLWRkIixLdFs1Nl09Inl5eXktbW0tZGQiLEt0WzU3XT0neXl5eSJcdTVlNzQiIG1tIlx1Njcw'@;
put 'OCIgZGQiXHU2NWU1IicsS3RbNThdPSJtbS1kZCI7YnJlYWs7Y2FzZSJ0aC10aCI6S3RbNTldPScidCIwJyxLdFs2MF09JyJ0IjAuMDAnLEt0WzYxXT0nInQiIywjIzAnLEt0WzYyXT0nInQiIywjIzAuMDAnLEt0WzY3XT0idDAlIixLdFs2OF09InQwLjAwJSIsS3RbNjldPSJ0IyA/Lz8iLEt0'@;
put 'WzcwXT0idCMgPz8vPz8iLEt0WzcxXT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiJyxLdFs3Ml09J1x1MGUyNyItIlx1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsS3RbNzNdPSdcdTBlMjciLSJcdTBlMTRcdTBlMTRcdTBlMTQnLEt0Wzc0XT0n'@;
put 'XHUwZTE0XHUwZTE0XHUwZTE0Ii0iXHUwZTFiXHUwZTFiJyxLdFs3NV09J1x1MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzZdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc3XT0nXHUwZTI3Ii8iXHUwZTE0Ii8iXHUwZTFiXHUwZTFiXHUwZTFiXHUwZTFiIFx1'@;
put 'MGUwYSI6Ilx1MGUxOVx1MGUxOScsS3RbNzhdPSdcdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0Wzc5XT0nW1x1MGUwYV1cdTBlMTlcdTBlMTkiOiJcdTBlMTdcdTBlMTcnLEt0WzgwXT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3LjAnLEt0WzgxXT0iZC9tL2JiIn19Ri5fZ2Vu'@;
put 'ZXJhbF9pbnQ9ZnVuY3Rpb24gU2koS3Qpe3JldHVybiBLdC50b1N0cmluZygxMCl9O3ZhciBacj1mdW5jdGlvbigpe3ZhciBtbj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKykkLztmdW5jdGlvbiBGbihtaSl7cmV0dXJuLTE9PW1pLmluZGV4T2YoIi4iKT9taTptaS5yZXBsYWNlKG1uLCIkMSIp'@;
put 'fXZhciBKcj0vKD86XC4wKnwoXC5cZCpbMS05XSkwKylbRWVdLyxYbj0vKEVbKy1dKShcZCkkLztyZXR1cm4gZnVuY3Rpb24oWWkpe3ZhciBsaT1mdW5jdGlvbiB3byhtaSl7dmFyIGxpLFlpPU1hdGguZmxvb3IoTWF0aC5sb2coTWF0aC5hYnMobWkpKSpNYXRoLkxPRzEwRSk7cmV0dXJuIGxp'@;
put 'PVlpPj0tNCYmWWk8PS0xP21pLnRvUHJlY2lzaW9uKDEwK1lpKTpNYXRoLmFicyhZaSk8PTk/ZnVuY3Rpb24gY3IobWkpe3ZhciBZaT1taTwwPzEyOjExLGxpPUZuKG1pLnRvRml4ZWQoMTIpKTtyZXR1cm4gbGkubGVuZ3RoPD1ZaXx8KGxpPW1pLnRvUHJlY2lzaW9uKDEwKSkubGVuZ3RoPD1Z'@;
put 'aT9saTptaS50b0V4cG9uZW50aWFsKDUpfShtaSk6MTA9PT1ZaT9taS50b0ZpeGVkKDEwKS5zdWJzdHIoMCwxMik6ZnVuY3Rpb24gZmkobWkpe3ZhciBZaT1GbihtaS50b0ZpeGVkKDExKSk7cmV0dXJuIFlpLmxlbmd0aD4obWk8MD8xMjoxMSl8fCIwIj09PVlpfHwiLTAiPT09WWk/bWkudG9Q'@;
put 'cmVjaXNpb24oNik6WWl9KG1pKSxGbihmdW5jdGlvbiBoaShtaSl7cmV0dXJuLTE9PW1pLmluZGV4T2YoIkUiKT9taTptaS5yZXBsYWNlKEpyLCIkMUUiKS5yZXBsYWNlKFhuLCIkMTAkMiIpfShsaS50b1VwcGVyQ2FzZSgpKSl9KFlpKTtyZXR1cm4iLCI9PT1kaSYmIi4iPT09X3I/bGk6bGku'@;
put 'cmVwbGFjZSgvWywuXS9nLGZ1bmN0aW9uKEVzKXtyZXR1cm4iLCI9PUVzP2RpOl9yfSl9fSgpO2Z1bmN0aW9uIFVpKEt0LG1uKXtzd2l0Y2godHlwZW9mIEt0KXtjYXNlInN0cmluZyI6cmV0dXJuIEt0O2Nhc2UiYm9vbGVhbiI6cmV0dXJuIEt0PyJUUlVFIjoiRkFMU0UiO2Nhc2UibnVtYmVy'@;
put 'IjpyZXR1cm4oMHxLdCk9PT1LdD9LdC50b1N0cmluZygxMCk6WnIoS3QpO2Nhc2UidW5kZWZpbmVkIjpyZXR1cm4iIjtjYXNlIm9iamVjdCI6aWYobnVsbD09S3QpcmV0dXJuIiI7aWYoS3QgaW5zdGFuY2VvZiBEYXRlKXJldHVybiB5YygxNCxZbihLdCxtbiYmbW4uZGF0ZTE5MDQpLG1uKX10'@;
put 'aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIHZhbHVlIGluIEdlbmVyYWwgZm9ybWF0OiAiK0t0KX1GLl9nZW5lcmFsX251bT1acixGLl9nZW5lcmFsPVVpO3ZhciBGaT0iXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5Ii5zcGxp'@;
put 'dCgiIik7ZnVuY3Rpb24gb3MoS3QsbW4sRm4sSnIpe3ZhciB3byxYbj0iIixoaT0wLGNyPTAsZmk9Rm4ueSxtaT0wO3N3aXRjaChLdCl7Y2FzZSA5ODpmaT1Gbi55KzU0MztjYXNlIDEyMTpzd2l0Y2gobW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOndvPWZpJTEwMCxtaT0yO2JyZWFrO2RlZmF1'@;
put 'bHQ6d289ZmklMWU0LG1pPTR9YnJlYWs7Y2FzZSAxMDk6c3dpdGNoKG1uLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp3bz1Gbi5tLG1pPW1uLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGt0W0ZuLm0tMV1bMV07Y2FzZSA1OnJldHVybiBrdFtGbi5tLTFdWzBdO2RlZmF1bHQ6cmV0dXJuIGt0'@;
put 'W0ZuLm0tMV1bMl19YnJlYWs7Y2FzZSAxMDA6c3dpdGNoKG1uLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp3bz1Gbi5kLG1pPW1uLmxlbmd0aDticmVhaztjYXNlIDM6cmV0dXJuIGh0W0ZuLnFdWzBdO2RlZmF1bHQ6cmV0dXJuIGh0W0ZuLnFdWzFdfWJyZWFrO2Nhc2UgMTA0OnN3aXRjaChtbi5s'@;
put 'ZW5ndGgpe2Nhc2UgMTpjYXNlIDI6d289MSsoRm4uSCsxMSklMTIsbWk9bW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGhvdXIgZm9ybWF0OiAiK21ufWJyZWFrO2Nhc2UgNzI6c3dpdGNoKG1uLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp3bz1Gbi5ILG1pPW1uLmxlbmd0aDticmVh'@;
put 'aztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1hdDogIittbn1icmVhaztjYXNlIDc3OnN3aXRjaChtbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6d289Rm4uTSxtaT1tbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgbWludXRlIGZvcm1hdDogIittbn1icmVhaztjYXNlIDExNTpp'@;
put 'ZigicyIhPW1uJiYic3MiIT1tbiYmIi4wIiE9bW4mJiIuMDAiIT1tbiYmIi4wMDAiIT1tbil0aHJvdyJiYWQgc2Vjb25kIGZvcm1hdDogIittbjtyZXR1cm4gMCE9PUZuLnV8fCJzIiE9bW4mJiJzcyIhPW1uPyhjcj1Kcj49Mj8zPT09SnI/MWUzOjEwMDoxPT09SnI/MTA6MSwoaGk9TWF0aC5y'@;
put 'b3VuZChjciooRm4uUytGbi51KSkpPj02MCpjciYmKGhpPTApLCJzIj09PW1uPzA9PT1oaT8iMCI6IiIraGkvY3I6KFhuPWllKGhpLDIrSnIpLCJzcyI9PT1tbj9Ybi5zdWJzdHIoMCwyKToiLiIrWG4uc3Vic3RyKDIsbW4ubGVuZ3RoLTEpKSk6aWUoRm4uUyxtbi5sZW5ndGgpO2Nhc2UgOTA6'@;
put 'c3dpdGNoKG1uKXtjYXNlIltoXSI6Y2FzZSJbaGhdIjpjYXNlIltcdTBlMGFdIjpjYXNlIltcdTBlMGFcdTBlMGFdIjp3bz0yNCpGbi5EK0ZuLkg7YnJlYWs7Y2FzZSJbbV0iOmNhc2UiW21tXSI6Y2FzZSJbXHUwZTE5XSI6Y2FzZSJbXHUwZTE5XHUwZTE5XSI6d289NjAqKDI0KkZuLkQrRm4u'@;
put 'SCkrRm4uTTticmVhaztjYXNlIltzXSI6Y2FzZSJbc3NdIjpjYXNlIltcdTBlMTddIjpjYXNlIltcdTBlMTdcdTBlMTddIjp3bz02MCooNjAqKDI0KkZuLkQrRm4uSCkrRm4uTSkrTWF0aC5yb3VuZChGbi5TK0ZuLnUpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFic3RpbWUgZm9ybWF0OiAi'@;
put 'K21ufW1pPTM9PT1tbi5sZW5ndGg/MToyO2JyZWFrO2Nhc2UgMTAxOndvPWZpLG1pPTE7YnJlYWs7Y2FzZSAzNjIzOndvPUZuLmQsbWk9bW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwNDpzd2l0Y2gobW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOndvPUZuLm0sbWk9bW4ubGVuZ3RoO2JyZWFrO2Nh'@;
put 'c2UgMzpyZXR1cm4ga3RbRm4ubS0xXVsxXTtjYXNlIDU6cmV0dXJuIGt0W0ZuLm0tMV1bMF07ZGVmYXVsdDpyZXR1cm4ga3RbRm4ubS0xXVsyXX1icmVhaztjYXNlIDM2MTE6c3dpdGNoKGZpPUZuLnkrNTQzLG1uLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjp3bz1maSUxMDAsbWk9MjticmVhaztk'@;
put 'ZWZhdWx0OndvPWZpJTFlNCxtaT00fWJyZWFrO2Nhc2UgMzU5NDp3bz1Gbi5ILG1pPW1uLmxlbmd0aDticmVhaztjYXNlIDM2MDk6d289Rm4uTSxtaT1tbi5sZW5ndGg7YnJlYWs7Y2FzZSAzNjA3OndvPUZuLlMsbWk9bW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3cgS3QudG9TdHJpbmco'@;
put 'MTYpfXZhciBZaT1taT4wP2llKHdvLG1pKToiIjtyZXR1cm4oOTA9PUt0P21uLmNoYXJDb2RlQXQoMSk8MzU4NDpLdDwzNTg0KT9ZaTpZaS5yZXBsYWNlKC9bMC05XS9nLGZ1bmN0aW9uKGxpKXtyZXR1cm4gRmlbK2xpXX0pfWZ1bmN0aW9uIGxvKEt0KXtpZihLdC5sZW5ndGg8PTMpcmV0dXJu'@;
put 'IEt0O2Zvcih2YXIgRm49S3QubGVuZ3RoJTMsSnI9S3Quc3Vic3RyKDAsRm4pO0ZuIT1LdC5sZW5ndGg7Rm4rPTMpSnIrPShKci5sZW5ndGg+MD8iLCI6IiIpK0t0LnN1YnN0cihGbiwzKTtyZXR1cm4gSnJ9dmFyIEZvPWZ1bmN0aW9uKCl7dmFyIG1uPS8lL2c7ZnVuY3Rpb24gWG4oYW4sVXQp'@;
put 'e3ZhciBxdCxobj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVV0KXJldHVybiIwLjBFKzAiO2lmKFV0PDApcmV0dXJuIi0iK1huKGFuLC1VdCk7dmFyIEluPWFuLmluZGV4T2YoIi4iKTstMT09PUluJiYoSW49YW4u'@;
put 'aW5kZXhPZigiRSIpKTt2YXIgaXI9TWF0aC5mbG9vcihNYXRoLmxvZyhVdCkqTWF0aC5MT0cxMEUpJUluO2lmKGlyPDAmJihpcis9SW4pLC0xPT09KHF0PShVdC9NYXRoLnBvdygxMCxpcikpLnRvUHJlY2lzaW9uKGhuKzErKEluK2lyKSVJbikpLmluZGV4T2YoImUiKSl7dmFyIFNyPU1hdGgu'@;
put 'Zmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKTtmb3IoLTE9PT1xdC5pbmRleE9mKCIuIik/cXQ9cXQuY2hhckF0KDApKyIuIitxdC5zdWJzdHIoMSkrIkUrIisoU3ItcXQubGVuZ3RoK2lyKTpxdCs9IkUrIisoU3ItaXIpOyIwLiI9PT1xdC5zdWJzdHIoMCwyKTspcXQ9KHF0PXF0LmNo'@;
put 'YXJBdCgwKStxdC5zdWJzdHIoMixJbikrIi4iK3F0LnN1YnN0cigyK0luKSkucmVwbGFjZSgvXjArKFsxLTldKS8sIiQxIikucmVwbGFjZSgvXjArXC4vLCIwLiIpO3F0PXF0LnJlcGxhY2UoL1wrLS8sIi0iKX1xdD1xdC5yZXBsYWNlKC9eKFsrLV0/KShcZCopXC4oXGQqKVtFZV0vLGZ1bmN0'@;
put 'aW9uKEZyLFJyLEVpLGJpKXtyZXR1cm4gUnIrRWkrYmkuc3Vic3RyKDAsKEluK2lyKSVJbikrIi4iK2JpLnN1YnN0cihpcikrIkUifSl9ZWxzZSBxdD1VdC50b0V4cG9uZW50aWFsKGhuKTtyZXR1cm4gYW4ubWF0Y2goL0VcKzAwJC8pJiZxdC5tYXRjaCgvZVsrLV1cZCQvKSYmKHF0PXF0LnN1'@;
put 'YnN0cigwLHF0Lmxlbmd0aC0xKSsiMCIrcXQuY2hhckF0KHF0Lmxlbmd0aC0xKSksYW4ubWF0Y2goL0VcLS8pJiZxdC5tYXRjaCgvZVwrLykmJihxdD1xdC5yZXBsYWNlKC9lXCsvLCJlIikpLHF0LnJlcGxhY2UoImUiLCJFIil9dmFyIGhpPS8jIChcPyspKCA/KVwvKCA/KShcZCspLyx3bz0v'@;
put 'XiMqMCpcLihbMCNdKykvLG1pPS9cKS4qWzAjXS8sWWk9L1woIyMjXCkgIyMjXFw/LSMjIyMvO2Z1bmN0aW9uIGxpKGFuKXtmb3IodmFyIHF0LFV0PSIiLGhuPTA7aG4hPWFuLmxlbmd0aDsrK2huKXN3aXRjaChxdD1hbi5jaGFyQ29kZUF0KGhuKSl7Y2FzZSAzNTpicmVhaztjYXNlIDYzOlV0'@;
put 'Kz0iICI7YnJlYWs7Y2FzZSA0ODpVdCs9IjAiO2JyZWFrO2RlZmF1bHQ6VXQrPVN0cmluZy5mcm9tQ2hhckNvZGUocXQpfXJldHVybiBVdH1mdW5jdGlvbiBFcyhhbixVdCl7dmFyIHF0PU1hdGgucG93KDEwLFV0KTtyZXR1cm4iIitNYXRoLnJvdW5kKGFuKnF0KS9xdH1mdW5jdGlvbiBncyhh'@;
put 'bixVdCl7aWYoVXQ+MTEpcmV0dXJuIGdzKGFuLDExKSpNYXRoLnBvdygxMCxVdC0xMSk7dmFyIHF0PWFuLU1hdGguZmxvb3IoYW4pLGhuPU1hdGgucG93KDEwLFV0KTtyZXR1cm4gVXQ8KCIiK01hdGgucm91bmQocXQqaG4pKS5sZW5ndGg/MDpNYXRoLnJvdW5kKHF0KmhuKX1mdW5jdGlvbiBU'@;
put 'YShhbixVdCxxdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVXQubWF0Y2gobWkpKXt2YXIgaG49VXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHF0Pj0wP1RhKCJuIixobixxdCk6IigiK1RhKCJuIixobiwtcXQpKyIp'@;
put 'In1pZig0ND09PVV0LmNoYXJDb2RlQXQoVXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBKcihhbixVdCxxdCl7Zm9yKHZhciBobj1VdC5sZW5ndGgtMTs0ND09PVV0LmNoYXJDb2RlQXQoaG4tMSk7KS0taG47cmV0dXJuIEZvKGFuLFV0LnN1YnN0cigwLGhuKSxxdC9NYXRoLnBvdygxMCwz'@;
put 'KihVdC5sZW5ndGgtaG4pKSl9KGFuLFV0LHF0KTtpZigtMSE9PVV0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24gRm4oYW4sVXQscXQpe3ZhciBobj1VdC5yZXBsYWNlKG1uLCIiKSxJbj1VdC5sZW5ndGgtaG4ubGVuZ3RoO3JldHVybiBGbyhhbixobixxdCpNYXRoLnBvdygxMCwyKklu'@;
put 'KSkrSigiJSIsSW4pfShhbixVdCxxdCk7aWYoLTEhPT1VdC5pbmRleE9mKCJFIikpcmV0dXJuIFhuKFV0LHF0KTtpZigzNj09PVV0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK1RhKGFuLFV0LnN1YnN0cigiICI9PVV0LmNoYXJBdCgxKT8yOjEpLHF0KTt2YXIgSW4saXIsU3IsRnIsUnI9TWF0'@;
put 'aC5hYnMocXQpLEVpPXF0PDA/Ii0iOiIiO2lmKFV0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBFaStZZShScixVdC5sZW5ndGgpO2lmKFV0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIjAiPT09KEluPVllKHF0LDApKSYmKEluPSIiKSxJbi5sZW5ndGg+VXQubGVuZ3RoP0luOmxpKFV0LnN1YnN0'@;
put 'cigwLFV0Lmxlbmd0aC1Jbi5sZW5ndGgpKStJbjtpZihpcj1VdC5tYXRjaChoaSkpcmV0dXJuIGZ1bmN0aW9uIGNyKGFuLFV0LHF0KXt2YXIgaG49cGFyc2VJbnQoYW5bNF0sMTApLEluPU1hdGgucm91bmQoVXQqaG4pLGlyPU1hdGguZmxvb3IoSW4vaG4pLFNyPUluLWlyKmhuLEZyPWhuO3Jl'@;
put 'dHVybiBxdCsoMD09PWlyPyIiOiIiK2lyKSsiICIrKDA9PT1Tcj9KKCIgIixhblsxXS5sZW5ndGgrMSthbls0XS5sZW5ndGgpOnBlKFNyLGFuWzFdLmxlbmd0aCkrYW5bMl0rIi8iK2FuWzNdK2llKEZyLGFuWzRdLmxlbmd0aCkpfShpcixScixFaSk7aWYoVXQubWF0Y2goL14jKzArJC8pKXJl'@;
put 'dHVybiBFaStZZShScixVdC5sZW5ndGgtVXQuaW5kZXhPZigiMCIpKTtpZihpcj1VdC5tYXRjaCh3bykpcmV0dXJuIEluPUVzKHF0LGlyWzFdLmxlbmd0aCkucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrbGkoaXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitsaShpclsxXSkpLnJlcGxhY2Uo'@;
put 'L1wuKFxkKikkLyxmdW5jdGlvbihYbyxWcyl7cmV0dXJuIi4iK1ZzK0ooIjAiLGxpKGlyWzFdKS5sZW5ndGgtVnMubGVuZ3RoKX0pLC0xIT09VXQuaW5kZXhPZigiMC4iKT9JbjpJbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFV0PVV0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaXI9VXQu'@;
put 'bWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBFaStFcyhScixpclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLGlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoaXI9VXQubWF0Y2go'@;
put 'L14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEVpK2xvKFllKFJyLDApKTtpZihpcj1VdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gcXQ8MD8iLSIrVGEoYW4sVXQsLXF0KTpsbygiIisoTWF0aC5mbG9vcihxdCkrZnVuY3Rpb24gRWEoYW4sVXQpe3JldHVybiBVdDwoIiIr'@;
put 'TWF0aC5yb3VuZCgoYW4tTWF0aC5mbG9vcihhbikpKk1hdGgucG93KDEwLFV0KSkpLmxlbmd0aD8xOjB9KHF0LGlyWzFdLmxlbmd0aCkpKSsiLiIraWUoZ3MocXQsaXJbMV0ubGVuZ3RoKSxpclsxXS5sZW5ndGgpO2lmKGlyPVV0Lm1hdGNoKC9eIywjKiwjMC8pKXJldHVybiBUYShhbixVdC5y'@;
put 'ZXBsYWNlKC9eIywjKiwvLCIiKSxxdCk7aWYoaXI9VXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIEluPU8oVGEoYW4sVXQucmVwbGFjZSgvW1xcLV0vZywiIikscXQpKSxTcj0wLE8oTyhVdC5yZXBsYWNlKC9cXC9nLCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0'@;
put 'aW9uKFhvKXtyZXR1cm4gU3I8SW4ubGVuZ3RoP0luLmNoYXJBdChTcisrKToiMCI9PT1Ybz8iMCI6IiJ9KSk7aWYoVXQubWF0Y2goWWkpKXJldHVybiIoIisoSW49VGEoYW4sIiMjIyMjIyMjIyMiLHF0KSkuc3Vic3RyKDAsMykrIikgIitJbi5zdWJzdHIoMywzKSsiLSIrSW4uc3Vic3RyKDYp'@;
put 'O3ZhciBiaT0iIjtpZihpcj1VdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIFNyPU1hdGgubWluKGlyWzRdLmxlbmd0aCw3KSxGcj1adChScixNYXRoLnBvdygxMCxTciktMSwhMSksSW49IiIrRWksIiAiPT0oYmk9Rm8oIm4iLGlyWzFdLEZyWzFdKSkuY2hh'@;
put 'ckF0KGJpLmxlbmd0aC0xKSYmKGJpPWJpLnN1YnN0cigwLGJpLmxlbmd0aC0xKSsiMCIpLEluKz1iaStpclsyXSsiLyIraXJbM10sKGJpPXllKEZyWzJdLFNyKSkubGVuZ3RoPGlyWzRdLmxlbmd0aCYmKGJpPWxpKGlyWzRdLnN1YnN0cihpcls0XS5sZW5ndGgtYmkubGVuZ3RoKSkrYmkpLElu'@;
put 'Kz1iaTtpZihpcj1VdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4gU3I9TWF0aC5taW4oTWF0aC5tYXgoaXJbMV0ubGVuZ3RoLGlyWzRdLmxlbmd0aCksNyksRWkrKChGcj1adChScixNYXRoLnBvdygxMCxTciktMSwhMCkpWzBdfHwoRnJbMV0/IiI6IjAi'@;
put 'KSkrIiAiKyhGclsxXT9wZShGclsxXSxTcikraXJbMl0rIi8iK2lyWzNdK3llKEZyWzJdLFNyKTpKKCIgIiwyKlNyKzEraXJbMl0ubGVuZ3RoK2lyWzNdLmxlbmd0aCkpO2lmKGlyPVV0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBJbj1ZZShxdCwwKSxVdC5sZW5ndGg8PUluLmxlbmd0aD9J'@;
put 'bjpsaShVdC5zdWJzdHIoMCxVdC5sZW5ndGgtSW4ubGVuZ3RoKSkrSW47aWYoaXI9VXQubWF0Y2goL14oWyMwP10rKVwuKFsjMF0rKSQvKSl7SW49IiIrcXQudG9GaXhlZChNYXRoLm1pbihpclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFNyPUluLmluZGV4T2Yo'@;
put 'Ii4iKTt2YXIgVG89VXQuaW5kZXhPZigiLiIpLVNyLHZvPVV0Lmxlbmd0aC1Jbi5sZW5ndGgtVG87cmV0dXJuIGxpKFV0LnN1YnN0cigwLFRvKStJbitVdC5zdWJzdHIoVXQubGVuZ3RoLXZvKSl9aWYoaXI9VXQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBTcj1ncyhxdCxp'@;
put 'clsxXS5sZW5ndGgpLHF0PDA/Ii0iK1RhKGFuLFV0LC1xdCk6bG8oZnVuY3Rpb24gYmMoYW4pe3JldHVybiBhbjwyMTQ3NDgzNjQ3JiZhbj4tMjE0NzQ4MzY0OD8iIisoYW4+PTA/MHxhbjphbi0xfDApOiIiK01hdGguZmxvb3IoYW4pfShxdCkpLnJlcGxhY2UoL15cZCxcZHszfSQvLCIwJCYi'@;
put 'KS5yZXBsYWNlKC9eXGQqJC8sZnVuY3Rpb24oWG8pe3JldHVybiIwMCwiKyhYby5sZW5ndGg8Mz9pZSgwLDMtWG8ubGVuZ3RoKToiIikrWG99KSsiLiIraWUoU3IsaXJbMV0ubGVuZ3RoKTtzd2l0Y2goVXQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIFRhKGFuLCIjLCMjMC4wMCIscXQpO2Nh'@;
put 'c2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciB6aT1sbyhZZShSciwwKSk7cmV0dXJuIjAiIT09emk/RWkremk6IiI7Y2FzZSIjIyMsIyMjLjAwIjpyZXR1cm4gVGEoYW4sIiMjIywjIzAuMDAiLHF0KS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJl'@;
put 'dHVybiBUYShhbiwiIywjIzAuMDAiLHF0KS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1V0KyJ8Iil9ZnVuY3Rpb24gcm4oYW4sVXQpe3ZhciBxdCxobj1hbi5pbmRleE9mKCJFIiktYW4uaW5kZXhPZigiLiIpLTE7aWYoYW4ubWF0'@;
put 'Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVV0KXJldHVybiIwLjBFKzAiO2lmKFV0PDApcmV0dXJuIi0iK3JuKGFuLC1VdCk7dmFyIEluPWFuLmluZGV4T2YoIi4iKTstMT09PUluJiYoSW49YW4uaW5kZXhPZigiRSIpKTt2YXIgaXI9TWF0aC5mbG9vcihNYXRoLmxvZyhVdCkqTWF0aC5MT0cx'@;
put 'MEUpJUluO2lmKGlyPDAmJihpcis9SW4pLCEocXQ9KFV0L01hdGgucG93KDEwLGlyKSkudG9QcmVjaXNpb24oaG4rMSsoSW4raXIpJUluKSkubWF0Y2goL1tFZV0vKSl7dmFyIFNyPU1hdGguZmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKTstMT09PXF0LmluZGV4T2YoIi4iKT9xdD1x'@;
put 'dC5jaGFyQXQoMCkrIi4iK3F0LnN1YnN0cigxKSsiRSsiKyhTci1xdC5sZW5ndGgraXIpOnF0Kz0iRSsiKyhTci1pcikscXQ9cXQucmVwbGFjZSgvXCstLywiLSIpfXF0PXF0LnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24oRnIsUnIsRWksYmkpe3JldHVybiBS'@;
put 'citFaStiaS5zdWJzdHIoMCwoSW4raXIpJUluKSsiLiIrYmkuc3Vic3RyKGlyKSsiRSJ9KX1lbHNlIHF0PVV0LnRvRXhwb25lbnRpYWwoaG4pO3JldHVybiBhbi5tYXRjaCgvRVwrMDAkLykmJnF0Lm1hdGNoKC9lWystXVxkJC8pJiYocXQ9cXQuc3Vic3RyKDAscXQubGVuZ3RoLTEpKyIwIitx'@;
put 'dC5jaGFyQXQocXQubGVuZ3RoLTEpKSxhbi5tYXRjaCgvRVwtLykmJnF0Lm1hdGNoKC9lXCsvKSYmKHF0PXF0LnJlcGxhY2UoL2VcKy8sImUiKSkscXQucmVwbGFjZSgiZSIsIkUiKX1mdW5jdGlvbiB5bihhbixVdCxxdCl7aWYoNDA9PT1hbi5jaGFyQ29kZUF0KDApJiYhVXQubWF0Y2gobWkp'@;
put 'KXt2YXIgaG49VXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIHF0Pj0wP3luKCJuIixobixxdCk6IigiK3luKCJuIixobiwtcXQpKyIpIn1pZig0ND09PVV0LmNoYXJDb2RlQXQoVXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlv'@;
put 'biBZaChhbixVdCxxdCl7Zm9yKHZhciBobj1VdC5sZW5ndGgtMTs0ND09PVV0LmNoYXJDb2RlQXQoaG4tMSk7KS0taG47cmV0dXJuIEZvKGFuLFV0LnN1YnN0cigwLGhuKSxxdC9NYXRoLnBvdygxMCwzKihVdC5sZW5ndGgtaG4pKSl9KGFuLFV0LHF0KTtpZigtMSE9PVV0LmluZGV4T2YoIiUi'@;
put 'KSlyZXR1cm4gZnVuY3Rpb24gczEoYW4sVXQscXQpe3ZhciBobj1VdC5yZXBsYWNlKG1uLCIiKSxJbj1VdC5sZW5ndGgtaG4ubGVuZ3RoO3JldHVybiBGbyhhbixobixxdCpNYXRoLnBvdygxMCwyKkluKSkrSigiJSIsSW4pfShhbixVdCxxdCk7aWYoLTEhPT1VdC5pbmRleE9mKCJFIikpcmV0'@;
put 'dXJuIHJuKFV0LHF0KTtpZigzNj09PVV0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK3luKGFuLFV0LnN1YnN0cigiICI9PVV0LmNoYXJBdCgxKT8yOjEpLHF0KTt2YXIgSW4saXIsU3IsRnIsUnI9TWF0aC5hYnMocXQpLEVpPXF0PDA/Ii0iOiIiO2lmKFV0Lm1hdGNoKC9eMDArJC8pKXJldHVy'@;
put 'biBFaStpZShScixVdC5sZW5ndGgpO2lmKFV0Lm1hdGNoKC9eWyM/XSskLykpcmV0dXJuIEluPSIiK3F0LDA9PT1xdCYmKEluPSIiKSxJbi5sZW5ndGg+VXQubGVuZ3RoP0luOmxpKFV0LnN1YnN0cigwLFV0Lmxlbmd0aC1Jbi5sZW5ndGgpKStJbjtpZihpcj1VdC5tYXRjaChoaSkpcmV0dXJu'@;
put 'IGZ1bmN0aW9uIGZpKGFuLFV0LHF0KXtyZXR1cm4gcXQrKDA9PT1VdD8iIjoiIitVdCkrSigiICIsYW5bMV0ubGVuZ3RoKzIrYW5bNF0ubGVuZ3RoKX0oaXIsUnIsRWkpO2lmKFV0Lm1hdGNoKC9eIyswKyQvKSlyZXR1cm4gRWkraWUoUnIsVXQubGVuZ3RoLVV0LmluZGV4T2YoIjAiKSk7aWYo'@;
put 'aXI9VXQubWF0Y2god28pKXJldHVybiBJbj0oSW49KCIiK3F0KS5yZXBsYWNlKC9eKFteXC5dKykkLywiJDEuIitsaShpclsxXSkpLnJlcGxhY2UoL1wuJC8sIi4iK2xpKGlyWzFdKSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihYbyxWcyl7cmV0dXJuIi4iK1ZzK0ooIjAiLGxpKGly'@;
put 'WzFdKS5sZW5ndGgtVnMubGVuZ3RoKX0pLC0xIT09VXQuaW5kZXhPZigiMC4iKT9JbjpJbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFV0PVV0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksaXI9VXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBFaSsoIiIrUnIpLnJlcGxhY2UoL1wu'@;
put 'KFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxhY2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLGlyWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYoaXI9VXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEVpK2xvKCIiK1JyKTtpZihpcj1VdC5tYXRjaCgvXiMsIyMw'@;
put 'XC4oWyMwXSowKSQvKSlyZXR1cm4gcXQ8MD8iLSIreW4oYW4sVXQsLXF0KTpsbygiIitxdCkrIi4iK0ooIjAiLGlyWzFdLmxlbmd0aCk7aWYoaXI9VXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIHluKGFuLFV0LnJlcGxhY2UoL14jLCMqLC8sIiIpLHF0KTtpZihpcj1VdC5tYXRjaCgvXihb'@;
put 'MCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gSW49Tyh5bihhbixVdC5yZXBsYWNlKC9bXFwtXS9nLCIiKSxxdCkpLFNyPTAsTyhPKFV0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oWG8pe3JldHVybiBTcjxJbi5sZW5ndGg/SW4uY2hhckF0KFNyKysp'@;
put 'OiIwIj09PVhvPyIwIjoiIn0pKTtpZihVdC5tYXRjaChZaSkpcmV0dXJuIigiKyhJbj15bihhbiwiIyMjIyMjIyMjIyIscXQpKS5zdWJzdHIoMCwzKSsiKSAiK0luLnN1YnN0cigzLDMpKyItIitJbi5zdWJzdHIoNik7dmFyIGJpPSIiO2lmKGlyPVV0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8o'@;
put 'ID8pKFsjMD9dKykvKSlyZXR1cm4gU3I9TWF0aC5taW4oaXJbNF0ubGVuZ3RoLDcpLEZyPVp0KFJyLE1hdGgucG93KDEwLFNyKS0xLCExKSxJbj0iIitFaSwiICI9PShiaT1GbygibiIsaXJbMV0sRnJbMV0pKS5jaGFyQXQoYmkubGVuZ3RoLTEpJiYoYmk9Ymkuc3Vic3RyKDAsYmkubGVuZ3Ro'@;
put 'LTEpKyIwIiksSW4rPWJpK2lyWzJdKyIvIitpclszXSwoYmk9eWUoRnJbMl0sU3IpKS5sZW5ndGg8aXJbNF0ubGVuZ3RoJiYoYmk9bGkoaXJbNF0uc3Vic3RyKGlyWzRdLmxlbmd0aC1iaS5sZW5ndGgpKStiaSksSW4rPWJpO2lmKGlyPVV0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPyko'@;
put 'WyMwP10rKS8pKXJldHVybiBTcj1NYXRoLm1pbihNYXRoLm1heChpclsxXS5sZW5ndGgsaXJbNF0ubGVuZ3RoKSw3KSxFaSsoKEZyPVp0KFJyLE1hdGgucG93KDEwLFNyKS0xLCEwKSlbMF18fChGclsxXT8iIjoiMCIpKSsiICIrKEZyWzFdP3BlKEZyWzFdLFNyKStpclsyXSsiLyIraXJbM10r'@;
put 'eWUoRnJbMl0sU3IpOkooIiAiLDIqU3IrMStpclsyXS5sZW5ndGgraXJbM10ubGVuZ3RoKSk7aWYoaXI9VXQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIFV0Lmxlbmd0aDw9KEluPSIiK3F0KS5sZW5ndGg/SW46bGkoVXQuc3Vic3RyKDAsVXQubGVuZ3RoLUluLmxlbmd0aCkpK0luO2lmKGly'@;
put 'PVV0Lm1hdGNoKC9eKFsjMF0rKVwuKFsjMF0rKSQvKSl7SW49IiIrcXQudG9GaXhlZChNYXRoLm1pbihpclsyXS5sZW5ndGgsMTApKS5yZXBsYWNlKC8oW14wXSkwKyQvLCIkMSIpLFNyPUluLmluZGV4T2YoIi4iKTt2YXIgVG89VXQuaW5kZXhPZigiLiIpLVNyLHZvPVV0Lmxlbmd0aC1Jbi5s'@;
put 'ZW5ndGgtVG87cmV0dXJuIGxpKFV0LnN1YnN0cigwLFRvKStJbitVdC5zdWJzdHIoVXQubGVuZ3RoLXZvKSl9aWYoaXI9VXQubWF0Y2goL14wMCwwMDBcLihbIzBdKjApJC8pKXJldHVybiBxdDwwPyItIit5bihhbixVdCwtcXQpOmxvKCIiK3F0KS5yZXBsYWNlKC9eXGQsXGR7M30kLywiMCQm'@;
put 'IikucmVwbGFjZSgvXlxkKiQvLGZ1bmN0aW9uKFhvKXtyZXR1cm4iMDAsIisoWG8ubGVuZ3RoPDM/aWUoMCwzLVhvLmxlbmd0aCk6IiIpK1hvfSkrIi4iK2llKDAsaXJbMV0ubGVuZ3RoKTt2YXIgemk9bG8oIiIrUnIpO3N3aXRjaChVdCl7Y2FzZSIjIyMsIyMjIjpjYXNlIiMjLCMjIyI6Y2Fz'@;
put 'ZSIjLCMjIyI6cmV0dXJuIjAiIT09emk/RWkremk6IiI7Y2FzZSIjLCMwMCI6cmV0dXJuIjAwIiE9PSh6aT1pZSh6aSwyKSk/RWkremk6IiI7ZGVmYXVsdDppZihVdC5tYXRjaCgvXC5bMCM/XSokLykpcmV0dXJuIHluKGFuLFV0LnNsaWNlKDAsVXQubGFzdEluZGV4T2YoIi4iKSkscXQpK2xp'@;
put 'KFV0LnNsaWNlKFV0Lmxhc3RJbmRleE9mKCIuIikpKX10aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIGZvcm1hdCB8IitVdCsifCIpfXJldHVybiBmdW5jdGlvbihVdCxxdCxobil7cmV0dXJuIjAsMCI9PXF0JiYocXQ9IiMsIzAwIiksKDB8aG4pPT09aG4/eW4oVXQscXQsaG4pOlRhKFV0'@;
put 'LHF0LGhuKX19KCk7ZnVuY3Rpb24geG8oS3Qpe2Zvcih2YXIgbW49W10sRm49ITEsSnI9MCxYbj0wO0pyPEt0Lmxlbmd0aDsrK0pyKXN3aXRjaChLdC5jaGFyQ29kZUF0KEpyKSl7Y2FzZSAzNDpGbj0hRm47YnJlYWs7Y2FzZSA5NTpjYXNlIDQyOmNhc2UgOTI6KytKcjticmVhaztjYXNlIDU5'@;
put 'Om1uW21uLmxlbmd0aF09S3Quc3Vic3RyKFhuLEpyLVhuKSxYbj1KcisxfWlmKG1uW21uLmxlbmd0aF09S3Quc3Vic3RyKFhuKSwhMD09PUZuKXRocm93IG5ldyBFcnJvcigiRm9ybWF0IHwiK0t0KyJ8IHVudGVybWluYXRlZCBzdHJpbmcgIik7cmV0dXJuIG1ufUYuX3NwbGl0PXhvO3ZhciB2'@;
put 'aT0vXFtbSGhNbVNzXHUwRTBBXHUwRTE5XHUwRTE3XSpcXS87ZnVuY3Rpb24gQnMoS3Qpe2Zvcih2YXIgbW49MCxGbj0iIixKcj0iIjttbjxLdC5sZW5ndGg7KXN3aXRjaChGbj1LdC5jaGFyQXQobW4pKXtjYXNlIkciOnFlKEt0LG1uKSYmKG1uKz02KSxtbisrO2JyZWFrO2Nhc2UnIic6Zm9y'@;
put 'KDszNCE9PUt0LmNoYXJDb2RlQXQoKyttbikmJm1uPEt0Lmxlbmd0aDspOysrbW47YnJlYWs7Y2FzZSJcXCI6Y2FzZSJfIjptbis9MjticmVhaztjYXNlIkAiOisrbW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOmlmKCIxIj09PUt0LmNoYXJBdChtbisxKXx8IjIiPT09S3QuY2hhckF0KG1uKzEp'@;
put 'KXJldHVybiEwO2Nhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOmNhc2UibSI6Y2FzZSJkIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6cmV0dXJuITA7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjppZigiQS9QIj09PUt0'@;
put 'LnN1YnN0cihtbiwzKS50b1VwcGVyQ2FzZSgpfHwiQU0vUE0iPT09S3Quc3Vic3RyKG1uLDUpLnRvVXBwZXJDYXNlKCl8fCJcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4Ij09PUt0LnN1YnN0cihtbiw1KS50b1VwcGVyQ2FzZSgpKXJldHVybiEwOysrbW47YnJlYWs7Y2FzZSJbIjpmb3IoSnI9'@;
put 'Rm47Il0iIT09S3QuY2hhckF0KG1uKyspJiZtbjxLdC5sZW5ndGg7KUpyKz1LdC5jaGFyQXQobW4pO2lmKEpyLm1hdGNoKHZpKSlyZXR1cm4hMDticmVhaztjYXNlIi4iOmNhc2UiMCI6Y2FzZSIjIjpmb3IoO21uPEt0Lmxlbmd0aCYmKCIwIz8uLEUrLSUiLmluZGV4T2YoRm49S3QuY2hhckF0'@;
put 'KCsrbW4pKT4tMXx8IlxcIj09Rm4mJiItIj09S3QuY2hhckF0KG1uKzEpJiYiMCMiLmluZGV4T2YoS3QuY2hhckF0KG1uKzIpKT4tMSk7KTticmVhaztjYXNlIj8iOmZvcig7S3QuY2hhckF0KCsrbW4pPT09Rm47KTticmVhaztjYXNlIioiOisrbW4sKCIgIj09S3QuY2hhckF0KG1uKXx8Iioi'@;
put 'PT1LdC5jaGFyQXQobW4pKSYmKyttbjticmVhaztjYXNlIigiOmNhc2UiKSI6KyttbjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoO21uPEt0Lmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4'@;
put 'T2YoS3QuY2hhckF0KCsrbW4pKT4tMTspO2JyZWFrO2RlZmF1bHQ6Kyttbn1yZXR1cm4hMX1mdW5jdGlvbiBFbihLdCxtbixGbixKcil7Zm9yKHZhciBtaSxZaSxsaSxYbj1bXSxoaT0iIixjcj0wLGZpPSIiLHdvPSJ0IixFcz0iSCI7Y3I8S3QubGVuZ3RoOylzd2l0Y2goZmk9S3QuY2hhckF0'@;
put 'KGNyKSl7Y2FzZSJHIjppZighcWUoS3QsY3IpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK2ZpKyIgaW4gIitLdCk7WG5bWG4ubGVuZ3RoXT17dDoiRyIsdjoiR2VuZXJhbCJ9LGNyKz03O2JyZWFrO2Nhc2UnIic6Zm9yKGhpPSIiOzM0IT09KGxpPUt0LmNoYXJD'@;
put 'b2RlQXQoKytjcikpJiZjcjxLdC5sZW5ndGg7KWhpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxpKTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OmhpfSwrK2NyO2JyZWFrO2Nhc2UiXFwiOnZhciBncz1LdC5jaGFyQXQoKytjcik7WG5bWG4ubGVuZ3RoXT17dDoiKCI9PT1nc3x8IikiPT09Z3M/Z3M6'@;
put 'InQiLHY6Z3N9LCsrY3I7YnJlYWs7Y2FzZSJfIjpYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OiIgIn0sY3IrPTI7YnJlYWs7Y2FzZSJAIjpYbltYbi5sZW5ndGhdPXt0OiJUIix2Om1ufSwrK2NyO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1LdC5jaGFyQXQoY3IrMSl8fCIyIj09PUt0'@;
put 'LmNoYXJBdChjcisxKSl7aWYobnVsbD09bWkmJm51bGw9PShtaT1nbihtbixGbiwiMiI9PT1LdC5jaGFyQXQoY3IrMSkpKSlyZXR1cm4iIjtYbltYbi5sZW5ndGhdPXt0OiJYIix2Okt0LnN1YnN0cihjciwyKX0sd289ZmksY3IrPTI7YnJlYWt9Y2FzZSJNIjpjYXNlIkQiOmNhc2UiWSI6Y2Fz'@;
put 'ZSJIIjpjYXNlIlMiOmNhc2UiRSI6Zmk9ZmkudG9Mb3dlckNhc2UoKTtjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiXHUwZTI3IjpjYXNlIlx1MGUxNCI6Y2FzZSJcdTBlMWIiOmNhc2UiXHUwZTBhIjpjYXNlIlx1MGUxOSI6Y2Fz'@;
put 'ZSJcdTBlMTciOmlmKG1uPDB8fG51bGw9PW1pJiZudWxsPT0obWk9Z24obW4sRm4pKSlyZXR1cm4iIjtmb3IoaGk9Zmk7KytjcjxLdC5sZW5ndGgmJkt0LmNoYXJBdChjcikudG9Mb3dlckNhc2UoKT09PWZpOyloaSs9Zmk7Im0iPT09ZmkmJiJoIj09PXdvLnRvTG93ZXJDYXNlKCkmJihmaT0i'@;
put 'TSIpLCJoIj09PWZpJiYoZmk9RXMpLFhuW1huLmxlbmd0aF09e3Q6ZmksdjpoaX0sd289Zmk7YnJlYWs7Y2FzZSJBIjpjYXNlImEiOmNhc2UiXHU0ZTBhIjp2YXIgYmM9e3Q6ZmksdjpmaX07aWYobnVsbD09bWkmJihtaT1nbihtbixGbikpLCJBL1AiPT09S3Quc3Vic3RyKGNyLDMpLnRvVXBw'@;
put 'ZXJDYXNlKCk/KG51bGwhPW1pJiYoYmMudj1taS5IPj0xMj8iUCI6IkEiKSxiYy50PSJUIixFcz0iaCIsY3IrPTMpOiJBTS9QTSI9PT1LdC5zdWJzdHIoY3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9bWkmJihiYy52PW1pLkg+PTEyPyJQTSI6IkFNIiksYmMudD0iVCIsY3IrPTUsRXM9Imgi'@;
put 'KToiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9PT1LdC5zdWJzdHIoY3IsNSkudG9VcHBlckNhc2UoKT8obnVsbCE9bWkmJihiYy52PW1pLkg+PTEyPyJcdTRlMGJcdTUzNDgiOiJcdTRlMGFcdTUzNDgiKSxiYy50PSJUIixjcis9NSxFcz0iaCIpOihiYy50PSJ0IiwrK2NyKSxudWxsPT1t'@;
put 'aSYmIlQiPT09YmMudClyZXR1cm4iIjtYbltYbi5sZW5ndGhdPWJjLHdvPWZpO2JyZWFrO2Nhc2UiWyI6Zm9yKGhpPWZpOyJdIiE9PUt0LmNoYXJBdChjcisrKSYmY3I8S3QubGVuZ3RoOyloaSs9S3QuY2hhckF0KGNyKTtpZigiXSIhPT1oaS5zbGljZSgtMSkpdGhyb3cndW50ZXJtaW5hdGVk'@;
put 'ICJbIiBibG9jazogfCcraGkrInwiO2lmKGhpLm1hdGNoKHZpKSl7aWYobnVsbD09bWkmJm51bGw9PShtaT1nbihtbixGbikpKXJldHVybiIiO1huW1huLmxlbmd0aF09e3Q6IloiLHY6aGkudG9Mb3dlckNhc2UoKX0sd289aGkuY2hhckF0KDEpfWVsc2UgaGkuaW5kZXhPZigiJCIpPi0xJiYo'@;
put 'aGk9KGhpLm1hdGNoKC9cJChbXi1cW1xdXSopLyl8fFtdKVsxXXx8IiQiLEJzKEt0KXx8KFhuW1huLmxlbmd0aF09e3Q6InQiLHY6aGl9KSk7YnJlYWs7Y2FzZSIuIjppZihudWxsIT1taSl7Zm9yKGhpPWZpOysrY3I8S3QubGVuZ3RoJiYiMCI9PT0oZmk9S3QuY2hhckF0KGNyKSk7KWhpKz1m'@;
put 'aTtYbltYbi5sZW5ndGhdPXt0OiJzIix2OmhpfTticmVha31jYXNlIjAiOmNhc2UiIyI6Zm9yKGhpPWZpOysrY3I8S3QubGVuZ3RoJiYiMCM/LixFKy0lIi5pbmRleE9mKGZpPUt0LmNoYXJBdChjcikpPi0xOyloaSs9Zmk7WG5bWG4ubGVuZ3RoXT17dDoibiIsdjpoaX07YnJlYWs7Y2FzZSI/'@;
put 'Ijpmb3IoaGk9Zmk7S3QuY2hhckF0KCsrY3IpPT09Zmk7KWhpKz1maTtYbltYbi5sZW5ndGhdPXt0OmZpLHY6aGl9LHdvPWZpO2JyZWFrO2Nhc2UiKiI6KytjciwoIiAiPT1LdC5jaGFyQXQoY3IpfHwiKiI9PUt0LmNoYXJBdChjcikpJiYrK2NyO2JyZWFrO2Nhc2UiKCI6Y2FzZSIpIjpYbltY'@;
put 'bi5sZW5ndGhdPXt0OjE9PT1Kcj8idCI6ZmksdjpmaX0sKytjcjticmVhaztjYXNlIjEiOmNhc2UiMiI6Y2FzZSIzIjpjYXNlIjQiOmNhc2UiNSI6Y2FzZSI2IjpjYXNlIjciOmNhc2UiOCI6Y2FzZSI5Ijpmb3IoaGk9Zmk7Y3I8S3QubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihLdC5j'@;
put 'aGFyQXQoKytjcikpPi0xOyloaSs9S3QuY2hhckF0KGNyKTtYbltYbi5sZW5ndGhdPXt0OiJEIix2OmhpfTticmVhaztjYXNlIiAiOlhuW1huLmxlbmd0aF09e3Q6ZmksdjpmaX0sKytjcjticmVhaztjYXNlIiQiOlhuW1huLmxlbmd0aF09e3Q6InQiLHY6WHJ9LCsrY3I7YnJlYWs7Y2FzZSIv'@;
put 'IjpYbltYbi5sZW5ndGhdPVhuLmxlbmd0aD4wJiZCcyhYbltYbi5sZW5ndGgtMV0udik/e3Q6InQiLHY6QW59Ont0OiJ0Iix2OiIvIn0sKytjcjticmVhaztkZWZhdWx0OmlmKC0xPT09IiwkLSsvKCk6IV4mJ357fTw+PVx1MjBhY2FjZmlqa2xvcHFydHV2d3h6UCIuaW5kZXhPZihmaSkpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyICIrZmkrIiBpbiAiK0t0KTtYbltYbi5sZW5ndGhdPXt0OiJ0Iix2OmZpfSwrK2NyfXZhciBzMSxUYT0wLFloPTA7Zm9yKGNyPVhuLmxlbmd0aC0xLHdvPSJ0Ijtjcj49MDstLWNyKXN3aXRjaChYbltjcl0udCl7Y2FzZSJoIjpj'@;
put 'YXNlIkgiOlhuW2NyXS50PUVzLHdvPSJoIixUYTwxJiYoVGE9MSk7YnJlYWs7Y2FzZSJzIjooczE9WG5bY3JdLnYubWF0Y2goL1wuMCskLykpJiYoWWg9TWF0aC5tYXgoWWgsczFbMF0ubGVuZ3RoLTEpKSxUYTwzJiYoVGE9Myk7Y2FzZSJkIjpjYXNlInkiOmNhc2UiTSI6Y2FzZSJlIjp3bz1Y'@;
put 'bltjcl0udDticmVhaztjYXNlIm0iOiJzIj09PXdvJiYoWG5bY3JdLnQ9Ik0iLFRhPDImJihUYT0yKSk7YnJlYWs7Y2FzZSJYIjpicmVhaztjYXNlIloiOlRhPDEmJlhuW2NyXS52Lm1hdGNoKC9bSGhdLykmJihUYT0xKSxUYTwyJiZYbltjcl0udi5tYXRjaCgvW01tXS8pJiYoVGE9MiksVGE8'@;
put 'MyYmWG5bY3JdLnYubWF0Y2goL1tTc10vKSYmKFRhPTMpfXN3aXRjaChUYSl7Y2FzZSAwOmJyZWFrO2Nhc2UgMTptaS51Pj0uNSYmKG1pLnU9MCwrK21pLlMpLG1pLlM+PTYwJiYobWkuUz0wLCsrbWkuTSksbWkuTT49NjAmJihtaS5NPTAsKyttaS5IKTticmVhaztjYXNlIDI6bWkudT49LjUm'@;
put 'JihtaS51PTAsKyttaS5TKSxtaS5TPj02MCYmKG1pLlM9MCwrK21pLk0pfXZhciB5bixybj0iIjtmb3IoY3I9MDtjcjxYbi5sZW5ndGg7Kytjcilzd2l0Y2goWG5bY3JdLnQpe2Nhc2UidCI6Y2FzZSJUIjpjYXNlIiAiOmNhc2UiRCI6YnJlYWs7Y2FzZSJYIjpYbltjcl0udj0iIixYbltjcl0u'@;
put 'dD0iOyI7YnJlYWs7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJoIjpjYXNlIkgiOmNhc2UiTSI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiYiI6Y2FzZSJaIjpjYXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUw'@;
put 'ZTE3IjpYbltjcl0udj1vcyhYbltjcl0udC5jaGFyQ29kZUF0KDApLFhuW2NyXS52LG1pLFloKSxYbltjcl0udD0idCI7YnJlYWs7Y2FzZSJuIjpjYXNlIj8iOmZvcih5bj1jcisxO251bGwhPVhuW3luXSYmKCI/Ij09PShmaT1Yblt5bl0udCl8fCJEIj09PWZpfHwoIiAiPT09Zml8fCJ0Ij09'@;
put 'PWZpKSYmbnVsbCE9WG5beW4rMV0mJigiPyI9PT1Yblt5bisxXS50fHwidCI9PT1Yblt5bisxXS50JiYiLyI9PT1Yblt5bisxXS52KXx8IigiPT09WG5bY3JdLnQmJigiICI9PT1maXx8Im4iPT09Zml8fCIpIj09PWZpKXx8InQiPT09ZmkmJigiLyI9PT1Yblt5bl0udnx8IiAiPT09WG5beW5d'@;
put 'LnYmJm51bGwhPVhuW3luKzFdJiYiPyI9PVhuW3luKzFdLnQpKTspWG5bY3JdLnYrPVhuW3luXS52LFhuW3luXT17djoiIix0OiI7In0sKyt5bjtybis9WG5bY3JdLnYsY3I9eW4tMTticmVhaztjYXNlIkciOlhuW2NyXS50PSJ0IixYbltjcl0udj1VaShtbixGbil9dmFyIFV0LHF0LGFuPSIi'@;
put 'O2lmKHJuLmxlbmd0aD4wKXs0MD09cm4uY2hhckNvZGVBdCgwKT8oVXQ9bW48MCYmNDU9PT1ybi5jaGFyQ29kZUF0KDApPy1tbjptbixxdD1GbygibiIscm4sVXQpKToocXQ9Rm8oIm4iLHJuLFV0PW1uPDAmJkpyPjE/LW1uOm1uKSxVdDwwJiZYblswXSYmInQiPT1YblswXS50JiYocXQ9cXQu'@;
put 'c3Vic3RyKDEpLFhuWzBdLnY9Ii0iK1huWzBdLnYpKSx5bj0ocXQ9cXQucmVwbGFjZSgvWyxcLl0vZyxmdW5jdGlvbihTcil7cmV0dXJuIi4iPT1Tcj9fcjpkaX0pKS5sZW5ndGgtMTt2YXIgaG49WG4ubGVuZ3RoO2Zvcihjcj0wO2NyPFhuLmxlbmd0aDsrK2NyKWlmKG51bGwhPVhuW2NyXSYm'@;
put 'InQiIT1Ybltjcl0udCYmWG5bY3JdLnYuaW5kZXhPZigiLiIpPi0xKXtobj1jcjticmVha312YXIgSW49WG4ubGVuZ3RoO2lmKGhuPT09WG4ubGVuZ3RoJiYtMT09PXF0LmluZGV4T2YoIkUiKSl7Zm9yKGNyPVhuLmxlbmd0aC0xO2NyPj0wOy0tY3IpbnVsbD09WG5bY3JdfHwtMT09PSJuPyIu'@;
put 'aW5kZXhPZihYbltjcl0udCl8fCh5bj49WG5bY3JdLnYubGVuZ3RoLTE/WG5bY3JdLnY9cXQuc3Vic3RyKDErKHluLT1Ybltjcl0udi5sZW5ndGgpLFhuW2NyXS52Lmxlbmd0aCk6eW48MD9Ybltjcl0udj0iIjooWG5bY3JdLnY9cXQuc3Vic3RyKDAseW4rMSkseW49LTEpLFhuW2NyXS50PSJ0'@;
put 'IixJbj1jcik7eW4+PTAmJkluPFhuLmxlbmd0aCYmKFhuW0luXS52PXF0LnN1YnN0cigwLHluKzEpK1huW0luXS52KX1lbHNlIGlmKGhuIT09WG4ubGVuZ3RoJiYtMT09PXF0LmluZGV4T2YoIkUiKSl7Zm9yKHluPXF0LmluZGV4T2YoX3IpLTEsY3I9aG47Y3I+PTA7LS1jcilpZihudWxsIT1Y'@;
put 'bltjcl0mJi0xIT09Im4/Ii5pbmRleE9mKFhuW2NyXS50KSl7Zm9yKFlpPVhuW2NyXS52LmluZGV4T2YoIi4iKT4tMSYmY3I9PT1obj9Ybltjcl0udi5pbmRleE9mKCIuIiktMTpYbltjcl0udi5sZW5ndGgtMSxhbj1Ybltjcl0udi5zdWJzdHIoWWkrMSk7WWk+PTA7LS1ZaSl5bj49MCYmKCIw'@;
put 'Ij09PVhuW2NyXS52LmNoYXJBdChZaSl8fCIjIj09PVhuW2NyXS52LmNoYXJBdChZaSkpJiYoYW49cXQuY2hhckF0KHluLS0pK2FuKTtYbltjcl0udj1hbixYbltjcl0udD0idCIsSW49Y3J9Zm9yKHluPj0wJiZJbjxYbi5sZW5ndGgmJihYbltJbl0udj1xdC5zdWJzdHIoMCx5bisxKStYbltJ'@;
put 'bl0udikseW49cXQuaW5kZXhPZihfcikrMSxjcj1objtjcjxYbi5sZW5ndGg7KytjcilpZihudWxsIT1Ybltjcl0mJigtMSE9PSJuPygiLmluZGV4T2YoWG5bY3JdLnQpfHxjcj09PWhuKSl7Zm9yKFlpPVhuW2NyXS52LmluZGV4T2YoX3IpPi0xJiZjcj09PWhuP1huW2NyXS52LmluZGV4T2Yo'@;
put 'X3IpKzE6MCxhbj1Ybltjcl0udi5zdWJzdHIoMCxZaSk7WWk8WG5bY3JdLnYubGVuZ3RoOysrWWkpeW48cXQubGVuZ3RoJiYoYW4rPXF0LmNoYXJBdCh5bisrKSk7WG5bY3JdLnY9YW4sWG5bY3JdLnQ9InQiLEluPWNyfX19Zm9yKGNyPTA7Y3I8WG4ubGVuZ3RoOysrY3IpbnVsbCE9WG5bY3Jd'@;
put 'JiYibj8iLmluZGV4T2YoWG5bY3JdLnQpPi0xJiYoWG5bY3JdLnY9Rm8oWG5bY3JdLnQsWG5bY3JdLnYsVXQ9SnI+MSYmbW48MCYmY3I+MCYmIi0iPT09WG5bY3ItMV0udj8tbW46bW4pLnJlcGxhY2UoL1wuL2csX3IpLnJlcGxhY2UoLywvLGRpKSxYbltjcl0udD0idCIpO3ZhciBpcj0iIjtm'@;
put 'b3IoY3I9MDtjciE9PVhuLmxlbmd0aDsrK2NyKW51bGwhPVhuW2NyXSYmKGlyKz1Ybltjcl0udik7cmV0dXJuIGlyfUYuaXNfZGF0ZT1CcyxGLl9ldmFsPUVuO3ZhciBocj0vXFtbPTw+XS8sbmw9L1xbKD18Pls9XT98PFs+PV0/KSgtP1xkKyg/OlwuXGQqKT8pXF0vO2Z1bmN0aW9uIFlhKEt0'@;
put 'LG1uKXtpZihudWxsPT1tbilyZXR1cm4hMTt2YXIgRm49cGFyc2VGbG9hdChtblsyXSk7c3dpdGNoKG1uWzFdKXtjYXNlIj0iOmlmKEt0PT1GbilyZXR1cm4hMDticmVhaztjYXNlIj4iOmlmKEt0PkZuKXJldHVybiEwO2JyZWFrO2Nhc2UiPCI6aWYoS3Q8Rm4pcmV0dXJuITA7YnJlYWs7Y2Fz'@;
put 'ZSI8PiI6aWYoS3QhPUZuKXJldHVybiEwO2JyZWFrO2Nhc2UiPj0iOmlmKEt0Pj1GbilyZXR1cm4hMDticmVhaztjYXNlIjw9IjppZihLdDw9Rm4pcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24geWMoS3QsbW4sRm4pe251bGw9PUZuJiYoRm49e30pO3ZhciBKcj0iIjtzd2l0Y2godHlwZW9m'@;
put 'IEt0KXtjYXNlInN0cmluZyI6SnI9Im0vZC95eSI9PUt0JiZGbi5kYXRlTkY/Rm4uZGF0ZU5GOkt0O2JyZWFrO2Nhc2UibnVtYmVyIjpudWxsPT0oSnI9MTQ9PUt0JiZGbi5kYXRlTkY/Rm4uZGF0ZU5GOihudWxsIT1Gbi50YWJsZT9Gbi50YWJsZTp2dClbS3RdKSYmKEpyPUZuLnRhYmxlJiZG'@;
put 'bi50YWJsZVtQdFtLdF1dfHx2dFtQdFtLdF1dKSxudWxsPT1KciYmKEpyPUF0W0t0XXx8IkdlbmVyYWwiKX1pZihxZShKciwwKSlyZXR1cm4gVWkobW4sRm4pO21uIGluc3RhbmNlb2YgRGF0ZSYmKG1uPVluKG1uLEZuLmRhdGUxOTA0KSk7dmFyIFhuPWZ1bmN0aW9uIHphKEt0LG1uKXt2YXIg'@;
put 'Rm49eG8oS3QpLEpyPUZuLmxlbmd0aCxYbj1GbltKci0xXS5pbmRleE9mKCJAIik7aWYoSnI8NCYmWG4+LTEmJi0tSnIsRm4ubGVuZ3RoPjQpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgZmluZCByaWdodCBmb3JtYXQgZm9yIHwiK0ZuLmpvaW4oInwiKSsifCIpO2lmKCJudW1iZXIiIT10eXBl'@;
put 'b2YgbW4pcmV0dXJuWzQsND09PUZuLmxlbmd0aHx8WG4+LTE/Rm5bRm4ubGVuZ3RoLTFdOiJAIl07c3dpdGNoKEZuLmxlbmd0aCl7Y2FzZSAxOkZuPVhuPi0xP1siR2VuZXJhbCIsIkdlbmVyYWwiLCJHZW5lcmFsIixGblswXV06W0ZuWzBdLEZuWzBdLEZuWzBdLCJAIl07YnJlYWs7Y2FzZSAy'@;
put 'OkZuPVhuPi0xP1tGblswXSxGblswXSxGblswXSxGblsxXV06W0ZuWzBdLEZuWzFdLEZuWzBdLCJAIl07YnJlYWs7Y2FzZSAzOkZuPVhuPi0xP1tGblswXSxGblsxXSxGblswXSxGblsyXV06W0ZuWzBdLEZuWzFdLEZuWzJdLCJAIl19dmFyIGhpPW1uPjA/Rm5bMF06bW48MD9GblsxXTpGblsy'@;
put 'XTtpZigtMT09PUZuWzBdLmluZGV4T2YoIlsiKSYmLTE9PT1GblsxXS5pbmRleE9mKCJbIikpcmV0dXJuW0pyLGhpXTtpZihudWxsIT1GblswXS5tYXRjaChocil8fG51bGwhPUZuWzFdLm1hdGNoKGhyKSl7dmFyIGNyPUZuWzBdLm1hdGNoKG5sKSxmaT1GblsxXS5tYXRjaChubCk7cmV0dXJu'@;
put 'IFlhKG1uLGNyKT9bSnIsRm5bMF1dOllhKG1uLGZpKT9bSnIsRm5bMV1dOltKcixGbltudWxsIT1jciYmbnVsbCE9Zmk/MjoxXV19cmV0dXJuW0pyLGhpXX0oSnIsbW4pO2lmKHFlKFhuWzFdKSlyZXR1cm4gVWkobW4sRm4pO2lmKCEwPT09bW4pbW49IlRSVUUiO2Vsc2UgaWYoITE9PT1tbilt'@;
put 'bj0iRkFMU0UiO2Vsc2UgaWYoIiI9PT1tbnx8bnVsbD09bW4pcmV0dXJuIiI7cmV0dXJuIEVuKFhuWzFdLG1uLEZuLFhuWzBdKX1mdW5jdGlvbiBrYShLdCxtbil7aWYoIm51bWJlciIhPXR5cGVvZiBtbil7bW49K21ufHwtMTtmb3IodmFyIEZuPTA7Rm48MzkyOysrRm4paWYobnVsbCE9dnRb'@;
put 'Rm5dKXtpZih2dFtGbl09PUt0KXttbj1GbjticmVha319ZWxzZSBtbjwwJiYobW49Rm4pO21uPDAmJihtbj0zOTEpfXJldHVybiB2dFttbl09S3QsbW59Ri5sb2FkPWthLEYuX3RhYmxlPXZ0LEYuZ2V0X3RhYmxlPWZ1bmN0aW9uKCl7cmV0dXJuIHZ0fSxGLmxvYWRfdGFibGU9ZnVuY3Rpb24o'@;
put 'bW4pe2Zvcih2YXIgRm49MDszOTIhPUZuOysrRm4pdm9pZCAwIT09bW5bRm5dJiZrYShtbltGbl0sRm4pfSxGLmluaXRfdGFibGU9dXQsRi5mb3JtYXQ9eWMsRi5nZXRsb2NhbGU9ZnVuY3Rpb24gTXIoKXtyZXR1cm4gTG58fCJlbi1VUyJ9LEYuc2V0bG9jYWxlPWZ1bmN0aW9uIG9yKEt0KXtp'@;
put 'ZihmdW5jdGlvbiBDcihLdCl7dmFyIG1uPTA7c3dpdGNoKChMbnx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiemgtdHciOmNhc2UiemgtY24iOmNhc2UiamEtanAiOmNhc2Uia28ta3IiOmZvcihtbj0yNzttbjw9MzY7KyttbilkZWxldGUgS3RbbW5dO2Zvcihtbj01MDttbjw9NTg7Kyttbilk'@;
put 'ZWxldGUgS3RbbW5dO2JyZWFrO2Nhc2UidGgtdGgiOmZvcihtbj01OTttbjw9NjI7KyttbilkZWxldGUgS3RbbW5dO2Zvcihtbj02Nzttbjw9ODE7KyttbilkZWxldGUgS3RbbW5dfX0odnQpLExuPUt0LFRuKHZ0KSx0eXBlb2YgSW50bDwidSIpe3ZhciBtbj1JbnRsLkRhdGVUaW1lRm9ybWF0'@;
put 'KEt0KTtpZihtbi5mb3JtYXRUb1BhcnRzKXtmb3IodmFyIEZuPW1uLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUsMCwwLDApKSxKcj0wO0pyPDc7KytKcilodFtKcl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7d2Vla2RheToibG9uZyJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBE'@;
put 'YXRlKDIwMjAsMCw1K0pyLDAsMCwwKSlbMF0udmFsdWUsaHRbSnJdWzBdPUludGwuRGF0ZVRpbWVGb3JtYXQoS3Qse3dlZWtkYXk6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCwwLDUrSnIsMCwwLDApKVswXS52YWx1ZTtmb3IodmFyIFhuPTA7WG48MTI7KytYbilrdFtY'@;
put 'bl1bMl09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLFhuLDIsMCwwLDApKVswXS52YWx1ZSxrdFtYbl1bMV09SW50bC5EYXRlVGltZUZvcm1hdChLdCx7bW9udGg6InNob3J0In0pLmZvcm1hdFRvUGFydHMobmV3IERh'@;
put 'dGUoMjAyMCxYbiwyLDAsMCwwKSlbMF0udmFsdWUsa3RbWG5dWzBdPWt0W1huXVsxXS5zbGljZSgwLDEpO2Zvcih2YXIgaGk9IiIsY3I9MDtjcjxGbi5sZW5ndGg7Kytjcil7dmFyIGZpPUZuW2NyXS52YWx1ZTtzd2l0Y2goRm5bY3JdLnR5cGUpe2Nhc2UieWVhciI6aGkrPTI9PWZpLmxlbmd0'@;
put 'aD8ieXkiOiJ5eXl5IjticmVhaztjYXNlIm1vbnRoIjpoaSs9IjEiPT1maT8ibSI6IjAxIj09Zmk/Im1tIjpmaT09a3RbMF1bMV0/Im1tbSI6Zmk9PWt0WzBdWzJdPyJtbW1tIjpmaT09a3RbMF1bMF0/Im1tbW1tIjoibW0iO2JyZWFrO2Nhc2UiZGF5IjpoaSs9IjUiPT1maT8iZCI6IjA1Ij09'@;
put 'Zmk/ImRkIjpmaT09aHRbMF1bMF0/ImRkZCI6Zmk9PWh0WzBdWzFdPyJkZGRkIjoiZGQiO2JyZWFrO2Nhc2UibGl0ZXJhbCI6aGkrPWZpLnJlcGxhY2UoLy4vZywiXFwkJiIpLDE9PWZpLmxlbmd0aCYmKEFuPWZpKX19KEt0Lm1hdGNoKC9lbi9pKSYmS3QubWF0Y2goL3VzL2kpfHwhS3QpJiYo'@;
put 'aGk9Im0vZC95eSIpLHZ0WzE0XT1oaX1lbHNlImphLWpwIj09S3QudG9Mb3dlckNhc2UoKSYmKHZ0WzE0XT0ieXl5eVxcL21cXC9kIik7dmFyIHdvPUludGwuTnVtYmVyRm9ybWF0KEt0LHt9KS5mb3JtYXQoMTIzNDU2Ny44OSk7d28mJihkaT0od28ubWF0Y2goLzEoLiopMi8pfHxbXSlbMV0s'@;
put 'X3I9KHdvLm1hdGNoKC83KC4qKTgvKXx8W10pWzFdKX10cltLdC50b0xvd2VyQ2FzZSgpXXx8KHRyW0t0LnRvTG93ZXJDYXNlKCldPXsiLiI6X3IsIiwiOmRpfSksVW49aXQocnI9dHJbS3QudG9Mb3dlckNhc2UoKV18fHRyWyJlbi11cyJdKX0sRi5ub3JtYWxpemU9ZnVuY3Rpb24gbXMoS3Qp'@;
put 'e2Zvcih2YXIgbW49MCxGbj0wLEpyPSIiLFhuPSIiLGhpPSIiLGNyPXJyLnl8fCJ5IixmaT1jci50b1VwcGVyQ2FzZSgpLHdvPXJyLmR8fCJkIixtaT13by50b1VwcGVyQ2FzZSgpLFlpPXJyWyIuIl0sbGk9cnJbIiwiXSxFcz0iMCM/RSstJSIrcnJbIiwiXStZaTttbjxLdC5sZW5ndGg7KXN3'@;
put 'aXRjaChKcj1LdC5jaGFyQXQobW4pKXtjYXNlIkciOm1uKyssaGkrPUpyO2JyZWFrO2Nhc2UnIic6Zm9yKGhpKz1KcjszNCE9PShGbj1LdC5jaGFyQ29kZUF0KCsrbW4pKSYmbW48S3QubGVuZ3RoOyloaSs9U3RyaW5nLmZyb21DaGFyQ29kZShGbik7aGkrPSciJywrK21uO2JyZWFrO2Nhc2Ui'@;
put 'XFwiOmNhc2UiXyI6aGkrPUt0LnNsaWNlKG1uLG1uKzIpLG1uKz0yO2JyZWFrO2Nhc2UiQCI6aGkrPUpyLCsrbW47YnJlYWs7Y2FzZSJCIjpjYXNlImIiOisrbW4saGkrPUpyO2JyZWFrO2Nhc2UgY3I6Y2FzZSBmaTpjYXNlIHdvOmNhc2UgbWk6aGkrPVVuW0pyLnRvTG93ZXJDYXNlKCldLCsr'@;
put 'bW47YnJlYWs7Y2FzZSJNIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiaCI6Y2FzZSJzIjpjYXNlImUiOmNhc2UiZyI6Y2FzZSJBIjpjYXNlImEiOmhpKz1KciwrK21uO2JyZWFrO2Nhc2UiWyI6Zm9yKFhuPUpyOyJdIiE9PUt0LmNoYXJBdChtbisrKSYmbW48S3QubGVu'@;
put 'Z3RoOylYbis9S3QuY2hhckF0KG1uKTtoaSs9WG47YnJlYWs7Y2FzZSBsaTpoaSs9JyInK0pyKyciJywrK21uO2JyZWFrO2Nhc2UgWWk6aWYoIShtbjxLdC5sZW5ndGgmJihFcy5pbmRleE9mKEpyPUt0LmNoYXJBdCgrK21uKSk+LTF8fCJcXCI9PUpyJiYiLSI9PUt0LmNoYXJBdChtbisxKSYm'@;
put 'IjAjIi5pbmRleE9mKEt0LmNoYXJBdChtbisyKSk+LTEpKSl7aGkrPSciJytZaSsnIic7YnJlYWt9SnI9WWksLS1tbjtjYXNlIjAiOmNhc2UiIyI6Zm9yKGhpKz1VbltKci50b0xvd2VyQ2FzZSgpXXx8SnI7bW48S3QubGVuZ3RoJiYoRXMuaW5kZXhPZihKcj1LdC5jaGFyQXQoKyttbikpPi0x'@;
put 'fHwiXFwiPT1KciYmIi0iPT1LdC5jaGFyQXQobW4rMSkmJiIwIyIuaW5kZXhPZihLdC5jaGFyQXQobW4rMikpPi0xKTspaGkrPVVuW0pyLnRvTG93ZXJDYXNlKCldfHxKcjticmVhaztjYXNlIj8iOmZvcihoaSs9SnI7S3QuY2hhckF0KCsrbW4pPT09SnI7KWhpKz1KcjticmVhaztjYXNlIioi'@;
put 'OmhpKz1KciwrK21uLCgiICI9PUt0LmNoYXJBdChtbil8fCIqIj09S3QuY2hhckF0KG1uKSkmJihoaSs9S3QuY2hhckF0KG1uKSwrK21uKTticmVhaztjYXNlIigiOmNhc2UiKSI6aGkrPUpyLCsrbW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2Ui'@;
put 'NiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKGhpKz1KcjttbjxLdC5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKEt0LmNoYXJBdCgrK21uKSk+LTE7KWhpKz1LdC5jaGFyQXQobW4pO2JyZWFrO2RlZmF1bHQ6aGkrPUpyLCsrbW59cmV0dXJuIGhpfSxGLmdldGN1cnJlbmN5PWZ1'@;
put 'bmN0aW9uIE9pKCl7cmV0dXJuIHBpfHwiVVNEIn0sRi5zZXRjdXJyZW5jeT1mdW5jdGlvbiBOaShLdCl7cGk9S3QsWHI9dHlwZW9mIEludGw8InUiP0ludGwuTnVtYmVyRm9ybWF0KExuLHtzdHlsZToiY3VycmVuY3kiLGN1cnJlbmN5RGlzcGxheToic3ltYm9sIixjdXJyZW5jeTpLdH0pLmZv'@;
put 'cm1hdCgwKS5yZXBsYWNlKC9bMFwuXCxcc10vZywiIik6IiQifX07SyhDKTt2YXIgRWUsbmU9eyJHZW5lcmFsIE51bWJlciI6IkdlbmVyYWwiLCJHZW5lcmFsIERhdGUiOkMuX3RhYmxlWzIyXSwiTG9uZyBEYXRlIjoiZGRkZCwgbW1tbSBkZCwgeXl5eSIsIk1lZGl1bSBEYXRlIjpDLl90YWJs'@;
put 'ZVsxNV0sIlNob3J0IERhdGUiOkMuX3RhYmxlWzE0XSwiTG9uZyBUaW1lIjpDLl90YWJsZVsxOV0sIk1lZGl1bSBUaW1lIjpDLl90YWJsZVsxOF0sIlNob3J0IFRpbWUiOkMuX3RhYmxlWzIwXSxDdXJyZW5jeTonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJyxGaXhlZDpD'@;
put 'Ll90YWJsZVsyXSxTdGFuZGFyZDpDLl90YWJsZVs0XSxQZXJjZW50OkMuX3RhYmxlWzEwXSxTY2llbnRpZmljOkMuX3RhYmxlWzExXSwiWWVzL05vIjonIlllcyI7IlllcyI7Ik5vIjtAJywiVHJ1ZS9GYWxzZSI6JyJUcnVlIjsiVHJ1ZSI7IkZhbHNlIjtAJywiT24vT2ZmIjonIlllcyI7Illl'@;
put 'cyI7Ik5vIjtAJ30sdWU9ezU6JyIkIiMsIyMwXyk7XFwoIiQiIywjIzBcXCknLDY6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNzonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsODonIiQiIywjIzAuMDBfKTtbUmVkXVxcKCIkIiMsIyMwLjAwXFwpJywyMzoiR2Vu'@;
put 'ZXJhbCIsMjQ6IkdlbmVyYWwiLDI1OiJHZW5lcmFsIiwyNjoiR2VuZXJhbCIsMjc6Im0vZC95eSIsMjg6Im0vZC95eSIsMjk6Im0vZC95eSIsMzA6Im0vZC95eSIsMzE6Im0vZC95eSIsMzI6Img6bW06c3MiLDMzOiJoOm1tOnNzIiwzNDoiaDptbTpzcyIsMzU6Img6bW06c3MiLDM2OiJtL2Qv'@;
put 'eXkiLDQxOidfKCogIywjIzBfKTtfKCogKCMsIyMwKTtfKCogIi0iXyk7XyhAXyknLDQyOidfKCIkIiogIywjIzBfKTtfKCIkIiogKCMsIyMwKTtfKCIkIiogIi0iXyk7XyhAXyknLDQzOidfKCogIywjIzAuMDBfKTtfKCogKCMsIyMwLjAwKTtfKCogIi0iPz9fKTtfKEBfKScsNDQ6J18oIiQi'@;
put 'KiAjLCMjMC4wMF8pO18oIiQiKiAoIywjIzAuMDApO18oIiQiKiAiLSI/P18pO18oQF8pJyw1MDoibS9kL3l5Iiw1MToibS9kL3l5Iiw1MjoibS9kL3l5Iiw1MzoibS9kL3l5Iiw1NDoibS9kL3l5Iiw1NToibS9kL3l5Iiw1NjoibS9kL3l5Iiw1NzoibS9kL3l5Iiw1ODoibS9kL3l5Iiw1OToi'@;
put 'MCIsNjA6IjAuMDAiLDYxOiIjLCMjMCIsNjI6IiMsIyMwLjAwIiw2MzonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjQ6JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsNjU6JyIkIiMsIyMwLjAwXyk7XFwoIiQiIywjIzAuMDBcXCknLDY2OiciJCIjLCMjMC4wMF8pO1tSZWRd'@;
put 'XFwoIiQiIywjIzAuMDBcXCknLDY3OiIwJSIsNjg6IjAuMDAlIiw2OToiIyA/Lz8iLDcwOiIjID8/Lz8/Iiw3MToibS9kL3l5Iiw3MjoibS9kL3l5Iiw3MzoiZC1tbW0teXkiLDc0OiJkLW1tbSIsNzU6Im1tbS15eSIsNzY6Img6bW0iLDc3OiJoOm1tOnNzIiw3ODoibS9kL3l5IGg6bW0iLDc5'@;
put 'OiJtbTpzcyIsODA6IltoXTptbTpzcyIsODE6Im1tc3MuMCJ9LGhlPS9bZERdK3xbbU1dK3xbeVllRV0rfFtIaF0rfFtTc10rL2c7IWZ1bmN0aW9uKE0pe00udmVyc2lvbj0iMS4yLjAiO3ZhciBPPWZ1bmN0aW9uIEYoKXtmb3IodmFyIHZlPTAsTWU9bmV3IEFycmF5KDI1NiksamU9MDsyNTYh'@;
put 'PWplOysramUpTWVbamVdPXZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPTEmKHZlPWplKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+'@;
put 'MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MSk/LTMwNjY3NDkxMl52ZT4+PjE6dmU+Pj4xKT8tMzA2Njc0OTEyXnZlPj4+MTp2ZT4+PjEpPy0zMDY2NzQ5MTJedmU+Pj4xOnZlPj4+MTtyZXR1cm4gdHlwZW9mIEludDMyQXJyYXk8InUiP25ldyBJbnQzMkFycmF5KE1lKTpNZX0o'@;
put 'KTtNLnRhYmxlPU8sTS5ic3RyPWZ1bmN0aW9uIEoodmUsTWUpe2Zvcih2YXIgamU9fk1lLFllPXZlLmxlbmd0aC0xLHFlPTA7cWU8WWU7KWplPShqZT1qZT4+PjheT1syNTUmKGplXnZlLmNoYXJDb2RlQXQocWUrKykpXSk+Pj44Xk9bMjU1JihqZV52ZS5jaGFyQ29kZUF0KHFlKyspKV07cmV0'@;
put 'dXJuIHFlPT09WWUmJihqZT1qZT4+PjheT1syNTUmKGplXnZlLmNoYXJDb2RlQXQocWUpKV0pLH5qZX0sTS5idWY9ZnVuY3Rpb24gaWUodmUsTWUpe2lmKHZlLmxlbmd0aD4xZTQpcmV0dXJuIGZ1bmN0aW9uIHBlKHZlLE1lKXtmb3IodmFyIGplPX5NZSxZZT12ZS5sZW5ndGgtNyxxZT0wO3Fl'@;
put 'PFllOylqZT0oamU9KGplPShqZT0oamU9KGplPShqZT0oamU9amU+Pj44Xk9bMjU1JihqZV52ZVtxZSsrXSldKT4+PjheT1syNTUmKGplXnZlW3FlKytdKV0pPj4+OF5PWzI1NSYoamVedmVbcWUrK10pXSk+Pj44Xk9bMjU1JihqZV52ZVtxZSsrXSldKT4+PjheT1syNTUmKGplXnZlW3FlKytd'@;
put 'KV0pPj4+OF5PWzI1NSYoamVedmVbcWUrK10pXSk+Pj44Xk9bMjU1JihqZV52ZVtxZSsrXSldKT4+PjheT1syNTUmKGplXnZlW3FlKytdKV07Zm9yKDtxZTxZZSs3OylqZT1qZT4+PjheT1syNTUmKGplXnZlW3FlKytdKV07cmV0dXJufmplfSh2ZSxNZSk7Zm9yKHZhciBqZT1+TWUsWWU9dmUu'@;
put 'bGVuZ3RoLTMscWU9MDtxZTxZZTspamU9KGplPShqZT0oamU9amU+Pj44Xk9bMjU1JihqZV52ZVtxZSsrXSldKT4+PjheT1syNTUmKGplXnZlW3FlKytdKV0pPj4+OF5PWzI1NSYoamVedmVbcWUrK10pXSk+Pj44Xk9bMjU1JihqZV52ZVtxZSsrXSldO2Zvcig7cWU8WWUrMzspamU9amU+Pj44'@;
put 'Xk9bMjU1JihqZV52ZVtxZSsrXSldO3JldHVybn5qZX0sTS5zdHI9ZnVuY3Rpb24geWUodmUsTWUpe2Zvcih2YXIgaXQsaHQsamU9fk1lLFllPTAscWU9dmUubGVuZ3RoO1llPHFlOykoaXQ9dmUuY2hhckNvZGVBdChZZSsrKSk8MTI4P2plPWplPj4+OF5PWzI1NSYoamVeaXQpXTppdDwyMDQ4'@;
put 'P2plPShqZT1qZT4+PjheT1syNTUmKGplXigxOTJ8aXQ+PjYmMzEpKV0pPj4+OF5PWzI1NSYoamVeKDEyOHw2MyZpdCkpXTppdD49NTUyOTYmJml0PDU3MzQ0PyhpdD02NCsoMTAyMyZpdCksaHQ9MTAyMyZ2ZS5jaGFyQ29kZUF0KFllKyspLGplPShqZT0oamU9KGplPWplPj4+OF5PWzI1NSYo'@;
put 'amVeKDI0MHxpdD4+OCY3KSldKT4+PjheT1syNTUmKGplXigxMjh8aXQ+PjImNjMpKV0pPj4+OF5PWzI1NSYoamVeKDEyOHxodD4+NiYxNXwoMyZpdCk8PDQpKV0pPj4+OF5PWzI1NSYoamVeKDEyOHw2MyZodCkpXSk6amU9KGplPShqZT1qZT4+PjheT1syNTUmKGplXigyMjR8aXQ+PjEyJjE1'@;
put 'KSldKT4+PjheT1syNTUmKGplXigxMjh8aXQ+PjYmNjMpKV0pPj4+OF5PWzI1NSYoamVeKDEyOHw2MyZpdCkpXTtyZXR1cm5+amV9fShFZT17fSk7dmFyIE5lLExlPWZ1bmN0aW9uKCl7dmFyIE1lLEY9e307ZnVuY3Rpb24gSihybil7aWYoIi8iPT1ybi5jaGFyQXQocm4ubGVuZ3RoLTEpKXJl'@;
put 'dHVybi0xPT09cm4uc2xpY2UoMCwtMSkuaW5kZXhPZigiLyIpP3JuOkoocm4uc2xpY2UoMCwtMSkpO3ZhciB5bj1ybi5sYXN0SW5kZXhPZigiLyIpO3JldHVybi0xPT09eW4/cm46cm4uc2xpY2UoMCx5bisxKX1mdW5jdGlvbiBpZShybil7aWYoIi8iPT1ybi5jaGFyQXQocm4ubGVuZ3RoLTEp'@;
put 'KXJldHVybiBpZShybi5zbGljZSgwLC0xKSk7dmFyIHluPXJuLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuLTE9PT15bj9ybjpybi5zbGljZSh5bisxKX1mdW5jdGlvbiBwZShybix5bil7InN0cmluZyI9PXR5cGVvZiB5biYmKHluPW5ldyBEYXRlKHluKSk7dmFyIGFuPXluLmdldEhvdXJzKCk7'@;
put 'YW49KGFuPWFuPDw2fHluLmdldE1pbnV0ZXMoKSk8PDV8eW4uZ2V0U2Vjb25kcygpPj4+MSxybi53cml0ZV9zaGlmdCgyLGFuKTt2YXIgVXQ9eW4uZ2V0RnVsbFllYXIoKS0xOTgwO1V0PShVdD1VdDw8NHx5bi5nZXRNb250aCgpKzEpPDw1fHluLmdldERhdGUoKSxybi53cml0ZV9zaGlmdCgy'@;
put 'LFV0KX1mdW5jdGlvbiB2ZShybil7WnMocm4sMCk7Zm9yKHZhciB5bj17fSxhbj0wO3JuLmw8PXJuLmxlbmd0aC00Oyl7dmFyIFV0PXJuLnJlYWRfc2hpZnQoMikscXQ9cm4ucmVhZF9zaGlmdCgyKSxobj1ybi5sK3F0LEluPXt9OzIxNTg5PT09VXQmJigxJihhbj1ybi5yZWFkX3NoaWZ0KDEp'@;
put 'KSYmKEluLm10aW1lPXJuLnJlYWRfc2hpZnQoNCkpLHF0PjUmJigyJmFuJiYoSW4uYXRpbWU9cm4ucmVhZF9zaGlmdCg0KSksNCZhbiYmKEluLmN0aW1lPXJuLnJlYWRfc2hpZnQoNCkpKSxJbi5tdGltZSYmKEluLm10PW5ldyBEYXRlKDFlMypJbi5tdGltZSkpKSxybi5sPWhuLHluW1V0XT1J'@;
put 'bn1yZXR1cm4geW59ZnVuY3Rpb24gamUoKXtyZXR1cm4gTWV8fChNZT1SKDgzMzM3KSl9ZnVuY3Rpb24gWWUocm4seW4pe2lmKDgwPT1yblswXSYmNzU9PXJuWzFdKXJldHVybiBsaShybix5bik7aWYocm4ubGVuZ3RoPDUxMil0aHJvdyBuZXcgRXJyb3IoIkNGQiBmaWxlIHNpemUgIitybi5s'@;
put 'ZW5ndGgrIiA8IDUxMiIpO3ZhciBhbixxdCxobixJbixpcixTcixVdD01MTIsRnI9W10sUnI9cm4uc2xpY2UoMCw1MTIpO1pzKFJyLDApO3ZhciBFaT1mdW5jdGlvbiBxZShybil7aWYoODA9PXJuW3JuLmxdJiY3NT09cm5bcm4ubCsxXSlyZXR1cm5bMCwwXTtybi5jaGsoWHIsIkhlYWRlciBT'@;
put 'aWduYXR1cmU6ICIpLHJuLmwrPTE2O3ZhciB5bj1ybi5yZWFkX3NoaWZ0KDIsInUiKTtyZXR1cm5bcm4ucmVhZF9zaGlmdCgyLCJ1IikseW5dfShScik7c3dpdGNoKGFuPUVpWzBdKXtjYXNlIDM6VXQ9NTEyO2JyZWFrO2Nhc2UgNDpVdD00MDk2O2JyZWFrO2Nhc2UgMDppZigwPT1FaVsxXSly'@;
put 'ZXR1cm4gbGkocm4seW4pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJNYWpvciBWZXJzaW9uOiBFeHBlY3RlZCAzIG9yIDQgc2F3ICIrYW4pfTUxMiE9PVV0JiZacyhScj1ybi5zbGljZSgwLFV0KSwyOCk7dmFyIGJpPXJuLnNsaWNlKDAsVXQpOyFmdW5jdGlvbiBpdChybix5bil7dmFyIGFu'@;
put 'O3N3aXRjaChybi5sKz0yLGFuPXJuLnJlYWRfc2hpZnQoMikpe2Nhc2UgOTppZigzIT15bil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBzYXcgIithbik7YnJlYWs7Y2FzZSAxMjppZig0IT15bil0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0'@;
put 'ZWQgMTIgc2F3ICIrYW4pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJTZWN0b3IgU2hpZnQ6IEV4cGVjdGVkIDkgb3IgMTIgc2F3ICIrYW4pfXJuLmNoaygiMDYwMCIsIk1pbmkgU2VjdG9yIFNoaWZ0OiAiKSxybi5jaGsoIjAwMDAwMDAwMDAwMCIsIlJlc2VydmVkOiAiKX0oUnIs'@;
put 'YW4pO3ZhciBUbz1Sci5yZWFkX3NoaWZ0KDQsImkiKTtpZigzPT09YW4mJjAhPT1Ubyl0aHJvdyBuZXcgRXJyb3IoIiMgRGlyZWN0b3J5IFNlY3RvcnM6IEV4cGVjdGVkIDAgc2F3ICIrVG8pO1JyLmwrPTQsSW49UnIucmVhZF9zaGlmdCg0LCJpIiksUnIubCs9NCxSci5jaGsoIjAwMTAwMDAw'@;
put 'IiwiTWluaSBTdHJlYW0gQ3V0b2ZmIFNpemU6ICIpLGlyPVJyLnJlYWRfc2hpZnQoNCwiaSIpLHF0PVJyLnJlYWRfc2hpZnQoNCwiaSIpLFNyPVJyLnJlYWRfc2hpZnQoNCwiaSIpLGhuPVJyLnJlYWRfc2hpZnQoNCwiaSIpO2Zvcih2YXIgdm89LTEsemk9MDt6aTwxMDkmJiEoKHZvPVJyLnJl'@;
put 'YWRfc2hpZnQoNCwiaSIpKTwwKTsrK3ppKUZyW3ppXT12bzt2YXIgWG89ZnVuY3Rpb24gaHQocm4seW4pe2Zvcih2YXIgYW49TWF0aC5jZWlsKHJuLmxlbmd0aC95biktMSxVdD1bXSxxdD0xO3F0PGFuOysrcXQpVXRbcXQtMV09cm4uc2xpY2UocXQqeW4sKHF0KzEpKnluKTtyZXR1cm4gVXRb'@;
put 'YW4tMV09cm4uc2xpY2UoYW4qeW4pLFV0fShybixVdCk7dnQoU3IsaG4sWG8sVXQsRnIpO3ZhciBWcz1mdW5jdGlvbiBEdChybix5bixhbixVdCl7dmFyIHF0PXJuLmxlbmd0aCxobj1bXSxJbj1bXSxpcj1bXSxTcj1bXSxGcj1VdC0xLFJyPTAsRWk9MCxiaT0wLFRvPTA7Zm9yKFJyPTA7UnI8'@;
put 'cXQ7KytScilpZihpcj1bXSwoYmk9UnIreW4pPj1xdCYmKGJpLT1xdCksIUluW2JpXSl7U3I9W107dmFyIHZvPVtdO2ZvcihFaT1iaTtFaT49MDspe3ZvW0VpXT0hMCxJbltFaV09ITAsaXJbaXIubGVuZ3RoXT1FaSxTci5wdXNoKHJuW0VpXSk7dmFyIHppPWFuW01hdGguZmxvb3IoNCpFaS9V'@;
put 'dCldO2lmKFV0PDQrKFRvPTQqRWkmRnIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrRWkrIiA0ICIrVXQpO2lmKCFyblt6aV18fHZvW0VpPUtpKHJuW3ppXSxUbyldKWJyZWFrfWhuW2JpXT17bm9kZXM6aXIsZGF0YTpYYyhbU3JdKX19cmV0dXJuIGhufShYbyxJ'@;
put 'bixGcixVdCk7VnNbSW5dLm5hbWU9IiFEaXJlY3RvcnkiLHF0PjAmJmlyIT09VW4mJihWc1tpcl0ubmFtZT0iIU1pbmlGQVQiKSxWc1tGclswXV0ubmFtZT0iIUZBVCIsVnMuZmF0X2FkZHJzPUZyLFZzLnNzej1VdDt2YXIgaXU9W10sUXU9W10sajU9W107KGZ1bmN0aW9uIEF0KHJuLHluLGFu'@;
put 'LFV0LHF0LGhuLEluLGlyKXtmb3IodmFyIFRvLFNyPTAsRnI9VXQubGVuZ3RoPzI6MCxScj15bltybl0uZGF0YSxFaT0wLGJpPTA7RWk8UnIubGVuZ3RoO0VpKz0xMjgpe3ZhciB2bz1Sci5zbGljZShFaSxFaSsxMjgpO1pzKHZvLDY0KSxiaT12by5yZWFkX3NoaWZ0KDIpLFRvPVZhKHZvLDAs'@;
put 'YmktRnIpLFV0LnB1c2goVG8pO3ZhciB6aT17bmFtZTpUbyx0eXBlOnZvLnJlYWRfc2hpZnQoMSksY29sb3I6dm8ucmVhZF9zaGlmdCgxKSxMOnZvLnJlYWRfc2hpZnQoNCwiaSIpLFI6dm8ucmVhZF9zaGlmdCg0LCJpIiksQzp2by5yZWFkX3NoaWZ0KDQsImkiKSxjbHNpZDp2by5yZWFkX3No'@;
put 'aWZ0KDE2KSxzdGF0ZTp2by5yZWFkX3NoaWZ0KDQsImkiKSxzdGFydDowLHNpemU6MH07MCE9PXZvLnJlYWRfc2hpZnQoMikrdm8ucmVhZF9zaGlmdCgyKSt2by5yZWFkX3NoaWZ0KDIpK3ZvLnJlYWRfc2hpZnQoMikmJih6aS5jdD1adCh2byx2by5sLTgpKSwwIT09dm8ucmVhZF9zaGlmdCgy'@;
put 'KSt2by5yZWFkX3NoaWZ0KDIpK3ZvLnJlYWRfc2hpZnQoMikrdm8ucmVhZF9zaGlmdCgyKSYmKHppLm10PVp0KHZvLHZvLmwtOCkpLHppLnN0YXJ0PXZvLnJlYWRfc2hpZnQoNCwiaSIpLHppLnNpemU9dm8ucmVhZF9zaGlmdCg0LCJpIiksemkuc2l6ZTwwJiZ6aS5zdGFydDwwJiYoemkuc2l6'@;
put 'ZT16aS50eXBlPTAsemkuc3RhcnQ9VW4semkubmFtZT0iIiksNT09PXppLnR5cGU/KFNyPXppLnN0YXJ0LHF0PjAmJlNyIT09VW4mJih5bltTcl0ubmFtZT0iIVN0cmVhbURhdGEiKSk6emkuc2l6ZT49NDA5Nj8oemkuc3RvcmFnZT0iZmF0Iix2b2lkIDA9PT15blt6aS5zdGFydF0mJih5blt6'@;
put 'aS5zdGFydF09UHQoYW4semkuc3RhcnQseW4uZmF0X2FkZHJzLHluLnNzeikpLHluW3ppLnN0YXJ0XS5uYW1lPXppLm5hbWUsemkuY29udGVudD15blt6aS5zdGFydF0uZGF0YS5zbGljZSgwLHppLnNpemUpKTooemkuc3RvcmFnZT0ibWluaWZhdCIsemkuc2l6ZTwwP3ppLnNpemU9MDpTciE9'@;
put 'PVVuJiZ6aS5zdGFydCE9PVVuJiZ5bltTcl0mJih6aS5jb250ZW50PXV0KHppLHluW1NyXS5kYXRhLCh5bltpcl18fHt9KS5kYXRhKSkpLHppLmNvbnRlbnQmJlpzKHppLmNvbnRlbnQsMCksaG5bVG9dPXppLEluLnB1c2goemkpfX0pKEluLFZzLFhvLGl1LHF0LHt9LFF1LGlyKSxmdW5jdGlv'@;
put 'biBrdChybix5bixhbil7Zm9yKHZhciBVdD0wLHF0PTAsaG49MCxJbj0wLGlyPTAsU3I9YW4ubGVuZ3RoLEZyPVtdLFJyPVtdO1V0PFNyOysrVXQpRnJbVXRdPVJyW1V0XT1VdCx5bltVdF09YW5bVXRdO2Zvcig7aXI8UnIubGVuZ3RoOysraXIpcXQ9cm5bVXQ9UnJbaXJdXS5MLGhuPXJuW1V0'@;
put 'XS5SLEluPXJuW1V0XS5DLEZyW1V0XT09PVV0JiYoLTEhPT1xdCYmRnJbcXRdIT09cXQmJihGcltVdF09RnJbcXRdKSwtMSE9PWhuJiZGcltobl0hPT1obiYmKEZyW1V0XT1Gcltobl0pKSwtMSE9PUluJiYoRnJbSW5dPVV0KSwtMSE9PXF0JiZVdCE9RnJbVXRdJiYoRnJbcXRdPUZyW1V0XSxS'@;
put 'ci5sYXN0SW5kZXhPZihxdCk8aXImJlJyLnB1c2gocXQpKSwtMSE9PWhuJiZVdCE9RnJbVXRdJiYoRnJbaG5dPUZyW1V0XSxSci5sYXN0SW5kZXhPZihobik8aXImJlJyLnB1c2goaG4pKTtmb3IoVXQ9MTtVdDxTcjsrK1V0KUZyW1V0XT09PVV0JiYoLTEhPT1obiYmRnJbaG5dIT09aG4/RnJb'@;
put 'VXRdPUZyW2huXTotMSE9PXF0JiZGcltxdF0hPT1xdCYmKEZyW1V0XT1GcltxdF0pKTtmb3IoVXQ9MTtVdDxTcjsrK1V0KWlmKDAhPT1ybltVdF0udHlwZSl7aWYoKGlyPVV0KSE9RnJbaXJdKWRve3luW1V0XT15bltpcj1Gcltpcl1dKyIvIit5bltVdF19d2hpbGUoMCE9PWlyJiYtMSE9PUZy'@;
put 'W2lyXSYmaXIhPUZyW2lyXSk7RnJbVXRdPS0xfWZvcih5blswXSs9Ii8iLFV0PTE7VXQ8U3I7KytVdCkyIT09cm5bVXRdLnR5cGUmJih5bltVdF0rPSIvIil9KFF1LGo1LGl1KSxpdS5zaGlmdCgpO3ZhciBTND17RmlsZUluZGV4OlF1LEZ1bGxQYXRoczpqNX07cmV0dXJuIHluJiZ5bi5yYXcm'@;
put 'JihTNC5yYXc9e2hlYWRlcjpiaSxzZWN0b3JzOlhvfSksUzR9ZnVuY3Rpb24gdXQocm4seW4sYW4pe2Zvcih2YXIgcXQ9cm4uc2l6ZSxobj1bXSxJbj1ybi5zdGFydDthbiYmcXQ+MCYmSW4+PTA7KWhuLnB1c2goeW4uc2xpY2UoSW4qcnIsSW4qcnIrcnIpKSxxdC09cnIsSW49S2koYW4sNCpJ'@;
put 'bik7cmV0dXJuIDA9PT1obi5sZW5ndGg/Z3IoMCk6eChobikuc2xpY2UoMCxybi5zaXplKX1mdW5jdGlvbiB2dChybix5bixhbixVdCxxdCl7dmFyIGhuPVVuO2lmKHJuPT09VW4pe2lmKDAhPT15bil0aHJvdyBuZXcgRXJyb3IoIkRJRkFUIGNoYWluIHNob3J0ZXIgdGhhbiBleHBlY3RlZCIp'@;
put 'fWVsc2UgaWYoLTEhPT1ybil7dmFyIEluPWFuW3JuXSxpcj0oVXQ+Pj4yKS0xO2lmKCFJbilyZXR1cm47Zm9yKHZhciBTcj0wO1NyPGlyJiYoaG49S2koSW4sNCpTcikpIT09VW47KytTcilxdC5wdXNoKGhuKTt2dChLaShJbixVdC00KSx5bi0xLGFuLFV0LHF0KX19ZnVuY3Rpb24gUHQocm4s'@;
put 'eW4sYW4sVXQscXQpe3ZhciBobj1bXSxJbj1bXTtxdHx8KHF0PVtdKTt2YXIgaXI9VXQtMSxTcj0wLEZyPTA7Zm9yKFNyPXluO1NyPj0wOyl7cXRbU3JdPSEwLGhuW2huLmxlbmd0aF09U3IsSW4ucHVzaChybltTcl0pO3ZhciBScj1hbltNYXRoLmZsb29yKDQqU3IvVXQpXTtpZihVdDw0KyhG'@;
put 'cj00KlNyJmlyKSl0aHJvdyBuZXcgRXJyb3IoIkZBVCBib3VuZGFyeSBjcm9zc2VkOiAiK1NyKyIgNCAiK1V0KTtpZighcm5bUnJdKWJyZWFrO1NyPUtpKHJuW1JyXSxGcil9cmV0dXJue25vZGVzOmhuLGRhdGE6WGMoW0luXSl9fWZ1bmN0aW9uIFp0KHJuLHluKXtyZXR1cm4gbmV3IERhdGUo'@;
put 'MWUzKihhbChybix5bis0KS8xZTcqTWF0aC5wb3coMiwzMikrYWwocm4seW4pLzFlNy0xMTY0NDQ3MzYwMCkpfWZ1bmN0aW9uIHVuKHJuLHluKXt2YXIgYW49eW58fHt9LFV0PWFuLnJvb3R8fCJSb290IEVudHJ5IjtpZihybi5GdWxsUGF0aHN8fChybi5GdWxsUGF0aHM9W10pLHJuLkZpbGVJ'@;
put 'bmRleHx8KHJuLkZpbGVJbmRleD1bXSkscm4uRnVsbFBhdGhzLmxlbmd0aCE9PXJuLkZpbGVJbmRleC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJpbmNvbnNpc3RlbnQgQ0ZCIHN0cnVjdHVyZSIpOzA9PT1ybi5GdWxsUGF0aHMubGVuZ3RoJiYocm4uRnVsbFBhdGhzWzBdPVV0KyIvIixybi5G'@;
put 'aWxlSW5kZXhbMF09e25hbWU6VXQsdHlwZTo1fSksYW4uQ0xTSUQmJihybi5GaWxlSW5kZXhbMF0uY2xzaWQ9YW4uQ0xTSUQpLGZ1bmN0aW9uIEpuKHJuKXt2YXIgeW49Ilx4MDFTaDMzdEo1IjtpZighTGUuZmluZChybiwiLyIreW4pKXt2YXIgYW49Z3IoNCk7YW5bMF09NTUsYW5bMV09YW5b'@;
put 'M109NTAsYW5bMl09NTQscm4uRmlsZUluZGV4LnB1c2goe25hbWU6eW4sdHlwZToyLGNvbnRlbnQ6YW4sc2l6ZTo0LEw6NjksUjo2OSxDOjY5fSkscm4uRnVsbFBhdGhzLnB1c2gocm4uRnVsbFBhdGhzWzBdK3luKSxZbihybil9fShybil9ZnVuY3Rpb24gWW4ocm4seW4pe3VuKHJuKTtmb3Io'@;
put 'dmFyIGFuPSExLFV0PSExLHF0PXJuLkZ1bGxQYXRocy5sZW5ndGgtMTtxdD49MDstLXF0KXt2YXIgaG49cm4uRmlsZUluZGV4W3F0XTtzd2l0Y2goaG4udHlwZSl7Y2FzZSAwOlV0P2FuPSEwOihybi5GaWxlSW5kZXgucG9wKCkscm4uRnVsbFBhdGhzLnBvcCgpKTticmVhaztjYXNlIDE6Y2Fz'@;
put 'ZSAyOmNhc2UgNTpVdD0hMCxpc05hTihobi5SKmhuLkwqaG4uQykmJihhbj0hMCksaG4uUj4tMSYmaG4uTD4tMSYmaG4uUj09aG4uTCYmKGFuPSEwKTticmVhaztkZWZhdWx0OmFuPSEwfX1pZihhbnx8eW4pe3ZhciBJbj1uZXcgRGF0ZSgxOTg3LDEsMTkpLGlyPTAsU3I9W107Zm9yKHF0PTA7'@;
put 'cXQ8cm4uRnVsbFBhdGhzLmxlbmd0aDsrK3F0KTAhPT1ybi5GaWxlSW5kZXhbcXRdLnR5cGUmJlNyLnB1c2goW3JuLkZ1bGxQYXRoc1txdF0scm4uRmlsZUluZGV4W3F0XV0pO2ZvcihxdD0wO3F0PFNyLmxlbmd0aDsrK3F0KXt2YXIgRnI9SihTcltxdF1bMF0pO2ZvcihVdD0hMSxpcj0wO2ly'@;
put 'PFNyLmxlbmd0aDsrK2lyKVNyW2lyXVswXT09PUZyJiYoVXQ9ITApO1V0fHxTci5wdXNoKFtGcix7bmFtZTppZShGcikucmVwbGFjZSgiLyIsIiIpLHR5cGU6MSxjbHNpZDpPaSxjdDpJbixtdDpJbixjb250ZW50Om51bGx9XSl9Zm9yKFNyLnNvcnQoZnVuY3Rpb24oYmksVG8pe3JldHVybiBm'@;
put 'dW5jdGlvbiBPKHJuLHluKXtmb3IodmFyIGFuPXJuLnNwbGl0KCIvIiksVXQ9eW4uc3BsaXQoIi8iKSxxdD0wLGhuPTAsSW49TWF0aC5taW4oYW4ubGVuZ3RoLFV0Lmxlbmd0aCk7cXQ8SW47KytxdCl7aWYoaG49YW5bcXRdLmxlbmd0aC1VdFtxdF0ubGVuZ3RoKXJldHVybiBobjtpZihhbltx'@;
put 'dF0hPVV0W3F0XSlyZXR1cm4gYW5bcXRdPFV0W3F0XT8tMToxfXJldHVybiBhbi5sZW5ndGgtVXQubGVuZ3RofShiaVswXSxUb1swXSl9KSxybi5GdWxsUGF0aHM9W10scm4uRmlsZUluZGV4PVtdLHF0PTA7cXQ8U3IubGVuZ3RoOysrcXQpcm4uRnVsbFBhdGhzW3F0XT1TcltxdF1bMF0scm4u'@;
put 'RmlsZUluZGV4W3F0XT1TcltxdF1bMV07Zm9yKHF0PTA7cXQ8U3IubGVuZ3RoOysrcXQpe3ZhciBScj1ybi5GaWxlSW5kZXhbcXRdLEVpPXJuLkZ1bGxQYXRoc1txdF07aWYoUnIubmFtZT1pZShFaSkucmVwbGFjZSgiLyIsIiIpLFJyLkw9UnIuUj1Sci5DPS0oUnIuY29sb3I9MSksUnIuc2l6'@;
put 'ZT1Sci5jb250ZW50P1JyLmNvbnRlbnQubGVuZ3RoOjAsUnIuc3RhcnQ9MCxSci5jbHNpZD1Sci5jbHNpZHx8T2ksMD09PXF0KVJyLkM9U3IubGVuZ3RoPjE/MTotMSxSci5zaXplPTAsUnIudHlwZT01O2Vsc2UgaWYoIi8iPT1FaS5zbGljZSgtMSkpe2Zvcihpcj1xdCsxO2lyPFNyLmxlbmd0'@;
put 'aCYmSihybi5GdWxsUGF0aHNbaXJdKSE9RWk7Kytpcik7Zm9yKFJyLkM9aXI+PVNyLmxlbmd0aD8tMTppcixpcj1xdCsxO2lyPFNyLmxlbmd0aCYmSihybi5GdWxsUGF0aHNbaXJdKSE9SihFaSk7Kytpcik7UnIuUj1pcj49U3IubGVuZ3RoPy0xOmlyLFJyLnR5cGU9MX1lbHNlIEoocm4uRnVs'@;
put 'bFBhdGhzW3F0KzFdfHwiIik9PUooRWkpJiYoUnIuUj1xdCsxKSxSci50eXBlPTJ9fX1mdW5jdGlvbiBMbihybix5bil7dmFyIGFuPXlufHx7fTtpZihZbihybiksInppcCI9PWFuLmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBncyhybix5bil7dmFyIGFuPXlufHx7fSxVdD1bXSxxdD1bXSxo'@;
put 'bj1ncigxKSxJbj1hbi5jb21wcmVzc2lvbj84OjAsaXI9MCxGcj0wLFJyPTAsRWk9MCxiaT0wLFRvPXJuLkZ1bGxQYXRoc1swXSx2bz1Ubyx6aT1ybi5GaWxlSW5kZXhbMF0sWG89W10sVnM9MDtmb3IoRnI9MTtGcjxybi5GdWxsUGF0aHMubGVuZ3RoOysrRnIpaWYodm89cm4uRnVsbFBhdGhz'@;
put 'W0ZyXS5zbGljZShUby5sZW5ndGgpLCh6aT1ybi5GaWxlSW5kZXhbRnJdKS5zaXplJiZ6aS5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT12byl7dmFyIEp1PUVpLGl1PWdyKHZvLmxlbmd0aCk7Zm9yKFJyPTA7UnI8dm8ubGVuZ3RoOysrUnIpaXUud3JpdGVfc2hpZnQoMSwxMjcmdm8uY2hhckNv'@;
put 'ZGVBdChScikpO2l1PWl1LnNsaWNlKDAsaXUubCksWG9bYmldPUVlLmJ1Zih6aS5jb250ZW50LDApO3ZhciBRdT16aS5jb250ZW50Ozg9PUluJiYoUXU9Q3IoUXUpKSwoaG49Z3IoMzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxobi53cml0ZV9zaGlmdCgyLDIwKSxobi53cml0ZV9zaGlm'@;
put 'dCgyLGlyKSxobi53cml0ZV9zaGlmdCgyLEluKSx6aS5tdD9wZShobix6aS5tdCk6aG4ud3JpdGVfc2hpZnQoNCwwKSxobi53cml0ZV9zaGlmdCgtNCw4JmlyPzA6WG9bYmldKSxobi53cml0ZV9zaGlmdCg0LDgmaXI/MDpRdS5sZW5ndGgpLGhuLndyaXRlX3NoaWZ0KDQsOCZpcj8wOnppLmNv'@;
put 'bnRlbnQubGVuZ3RoKSxobi53cml0ZV9zaGlmdCgyLGl1Lmxlbmd0aCksaG4ud3JpdGVfc2hpZnQoMiwwKSxFaSs9aG4ubGVuZ3RoLFV0LnB1c2goaG4pLEVpKz1pdS5sZW5ndGgsVXQucHVzaChpdSksRWkrPVF1Lmxlbmd0aCxVdC5wdXNoKFF1KSw4JmlyJiYoKGhuPWdyKDEyKSkud3JpdGVf'@;
put 'c2hpZnQoLTQsWG9bYmldKSxobi53cml0ZV9zaGlmdCg0LFF1Lmxlbmd0aCksaG4ud3JpdGVfc2hpZnQoNCx6aS5jb250ZW50Lmxlbmd0aCksRWkrPWhuLmwsVXQucHVzaChobikpLChobj1ncig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLGhuLndyaXRlX3NoaWZ0KDIsMCksaG4ud3Jp'@;
put 'dGVfc2hpZnQoMiwyMCksaG4ud3JpdGVfc2hpZnQoMixpciksaG4ud3JpdGVfc2hpZnQoMixJbiksaG4ud3JpdGVfc2hpZnQoNCwwKSxobi53cml0ZV9zaGlmdCgtNCxYb1tiaV0pLGhuLndyaXRlX3NoaWZ0KDQsUXUubGVuZ3RoKSxobi53cml0ZV9zaGlmdCg0LHppLmNvbnRlbnQubGVuZ3Ro'@;
put 'KSxobi53cml0ZV9zaGlmdCgyLGl1Lmxlbmd0aCksaG4ud3JpdGVfc2hpZnQoMiwwKSxobi53cml0ZV9zaGlmdCgyLDApLGhuLndyaXRlX3NoaWZ0KDIsMCksaG4ud3JpdGVfc2hpZnQoMiwwKSxobi53cml0ZV9zaGlmdCg0LDApLGhuLndyaXRlX3NoaWZ0KDQsSnUpLFZzKz1obi5sLHF0LnB1'@;
put 'c2goaG4pLFZzKz1pdS5sZW5ndGgscXQucHVzaChpdSksKytiaX1yZXR1cm4oaG49Z3IoMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NiksaG4ud3JpdGVfc2hpZnQoMiwwKSxobi53cml0ZV9zaGlmdCgyLDApLGhuLndyaXRlX3NoaWZ0KDIsYmkpLGhuLndyaXRlX3NoaWZ0KDIsYmkpLGhu'@;
put 'LndyaXRlX3NoaWZ0KDQsVnMpLGhuLndyaXRlX3NoaWZ0KDQsRWkpLGhuLndyaXRlX3NoaWZ0KDIsMCkseChbeChVdCkseChxdCksaG5dKX0ocm4sYW4pO3ZhciBVdD1mdW5jdGlvbihUbyl7Zm9yKHZhciB2bz0wLHppPTAsWG89MDtYbzxUby5GaWxlSW5kZXgubGVuZ3RoOysrWG8pe3ZhciBW'@;
put 'cz1Uby5GaWxlSW5kZXhbWG9dO2lmKFZzLmNvbnRlbnQpe3ZhciBKdT1Wcy5jb250ZW50Lmxlbmd0aDtKdT4wJiYoSnU8NDA5Nj92bys9SnUrNjM+PjY6emkrPUp1KzUxMT4+OSl9fWZvcih2YXIgaXU9VG8uRnVsbFBhdGhzLmxlbmd0aCszPj4yLGo1PXZvKzEyNz4+NyxTND0odm8rNz4+Mykr'@;
put 'emkraXUrajUseDQ9UzQrMTI3Pj43LFBlPXg0PD0xMDk/MDpNYXRoLmNlaWwoKHg0LTEwOSkvMTI3KTtTNCt4NCtQZSsxMjc+Pjc+eDQ7KVBlPSsreDQ8PTEwOT8wOk1hdGguY2VpbCgoeDQtMTA5KS8xMjcpO3ZhciAkMT1bMSxQZSx4NCxqNSxpdSx6aSx2bywwXTtyZXR1cm4gVG8uRmlsZUlu'@;
put 'ZGV4WzBdLnNpemU9dm88PDYsJDFbN109KFRvLkZpbGVJbmRleFswXS5zdGFydD0kMVswXSskMVsxXSskMVsyXSskMVszXSskMVs0XSskMVs1XSkrKCQxWzZdKzc+PjMpLCQxfShybikscXQ9Z3IoVXRbN108PDkpLGhuPTAsSW49MDtmb3IoaG49MDtobjw4OysraG4pcXQud3JpdGVfc2hpZnQo'@;
put 'MSxwaVtobl0pO2Zvcihobj0wO2huPDg7KytobilxdC53cml0ZV9zaGlmdCgyLDApO2ZvcihxdC53cml0ZV9zaGlmdCgyLDYyKSxxdC53cml0ZV9zaGlmdCgyLDMpLHF0LndyaXRlX3NoaWZ0KDIsNjU1MzQpLHF0LndyaXRlX3NoaWZ0KDIsOSkscXQud3JpdGVfc2hpZnQoMiw2KSxobj0wO2hu'@;
put 'PDM7KytobilxdC53cml0ZV9zaGlmdCgyLDApO2ZvcihxdC53cml0ZV9zaGlmdCg0LDApLHF0LndyaXRlX3NoaWZ0KDQsVXRbMl0pLHF0LndyaXRlX3NoaWZ0KDQsVXRbMF0rVXRbMV0rVXRbMl0rVXRbM10tMSkscXQud3JpdGVfc2hpZnQoNCwwKSxxdC53cml0ZV9zaGlmdCg0LDQwOTYpLHF0'@;
put 'LndyaXRlX3NoaWZ0KDQsVXRbM10/VXRbMF0rVXRbMV0rVXRbMl0tMTpVbikscXQud3JpdGVfc2hpZnQoNCxVdFszXSkscXQud3JpdGVfc2hpZnQoLTQsVXRbMV0/VXRbMF0tMTpVbikscXQud3JpdGVfc2hpZnQoNCxVdFsxXSksaG49MDtobjwxMDk7KytobilxdC53cml0ZV9zaGlmdCgtNCxo'@;
put 'bjxVdFsyXT9VdFsxXStobjotMSk7aWYoVXRbMV0pZm9yKEluPTA7SW48VXRbMV07KytJbil7Zm9yKDtobjwyMzYrMTI3KkluOysraG4pcXQud3JpdGVfc2hpZnQoLTQsaG48VXRbMl0/VXRbMV0raG46LTEpO3F0LndyaXRlX3NoaWZ0KC00LEluPT09VXRbMV0tMT9VbjpJbisxKX12YXIgaXI9'@;
put 'ZnVuY3Rpb24oVG8pe2ZvcihJbis9VG87aG48SW4tMTsrK2huKXF0LndyaXRlX3NoaWZ0KC00LGhuKzEpO1RvJiYoKytobixxdC53cml0ZV9zaGlmdCgtNCxVbikpfTtmb3IoSW49aG49MCxJbis9VXRbMV07aG48SW47KytobilxdC53cml0ZV9zaGlmdCgtNCxOaS5ESUZTRUNUKTtmb3IoSW4r'@;
put 'PVV0WzJdO2huPEluOysraG4pcXQud3JpdGVfc2hpZnQoLTQsTmkuRkFUU0VDVCk7aXIoVXRbM10pLGlyKFV0WzRdKTtmb3IodmFyIFNyPTAsRnI9MCxScj1ybi5GaWxlSW5kZXhbMF07U3I8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK1NyKShScj1ybi5GaWxlSW5kZXhbU3JdKS5jb250ZW50JiYh'@;
put 'KChGcj1Sci5jb250ZW50Lmxlbmd0aCk8NDA5NikmJihSci5zdGFydD1JbixpcihGcis1MTE+PjkpKTtmb3IoaXIoVXRbNl0rNz4+Myk7NTExJnF0Lmw7KXF0LndyaXRlX3NoaWZ0KC00LE5pLkVORE9GQ0hBSU4pO2ZvcihJbj1obj0wLFNyPTA7U3I8cm4uRmlsZUluZGV4Lmxlbmd0aDsrK1Ny'@;
put 'KShScj1ybi5GaWxlSW5kZXhbU3JdKS5jb250ZW50JiYoRnI9UnIuY29udGVudC5sZW5ndGgpJiYhKEZyPj00MDk2KSYmKFJyLnN0YXJ0PUluLGlyKEZyKzYzPj42KSk7Zm9yKDs1MTEmcXQubDspcXQud3JpdGVfc2hpZnQoLTQsTmkuRU5ET0ZDSEFJTik7Zm9yKGhuPTA7aG48VXRbNF08PDI7'@;
put 'Kytobil7dmFyIEVpPXJuLkZ1bGxQYXRoc1tobl07aWYoRWkmJjAhPT1FaS5sZW5ndGgpe1JyPXJuLkZpbGVJbmRleFtobl0sMD09PWhuJiYoUnIuc3RhcnQ9UnIuc2l6ZT9Sci5zdGFydC0xOlVuKTt2YXIgYmk9MD09PWhuJiZhbi5yb290fHxSci5uYW1lO2lmKEZyPTIqKGJpLmxlbmd0aCsx'@;
put 'KSxxdC53cml0ZV9zaGlmdCg2NCxiaSwidXRmMTZsZSIpLHF0LndyaXRlX3NoaWZ0KDIsRnIpLHF0LndyaXRlX3NoaWZ0KDEsUnIudHlwZSkscXQud3JpdGVfc2hpZnQoMSxSci5jb2xvcikscXQud3JpdGVfc2hpZnQoLTQsUnIuTCkscXQud3JpdGVfc2hpZnQoLTQsUnIuUikscXQud3JpdGVf'@;
put 'c2hpZnQoLTQsUnIuQyksUnIuY2xzaWQpcXQud3JpdGVfc2hpZnQoMTYsUnIuY2xzaWQsImhleCIpO2Vsc2UgZm9yKFNyPTA7U3I8NDsrK1NyKXF0LndyaXRlX3NoaWZ0KDQsMCk7cXQud3JpdGVfc2hpZnQoNCxSci5zdGF0ZXx8MCkscXQud3JpdGVfc2hpZnQoNCwwKSxxdC53cml0ZV9zaGlm'@;
put 'dCg0LDApLHF0LndyaXRlX3NoaWZ0KDQsMCkscXQud3JpdGVfc2hpZnQoNCwwKSxxdC53cml0ZV9zaGlmdCg0LFJyLnN0YXJ0KSxxdC53cml0ZV9zaGlmdCg0LFJyLnNpemUpLHF0LndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoU3I9MDtTcjwxNzsrK1NyKXF0LndyaXRlX3NoaWZ0KDQsMCk7'@;
put 'Zm9yKFNyPTA7U3I8MzsrK1NyKXF0LndyaXRlX3NoaWZ0KDQsLTEpO2ZvcihTcj0wO1NyPDEyOysrU3IpcXQud3JpdGVfc2hpZnQoNCwwKX19Zm9yKGhuPTE7aG48cm4uRmlsZUluZGV4Lmxlbmd0aDsrK2huKWlmKChScj1ybi5GaWxlSW5kZXhbaG5dKS5zaXplPj00MDk2KXtmb3IocXQubD1S'@;
put 'ci5zdGFydCsxPDw5LFNyPTA7U3I8UnIuc2l6ZTsrK1NyKXF0LndyaXRlX3NoaWZ0KDEsUnIuY29udGVudFtTcl0pO2Zvcig7NTExJlNyOysrU3IpcXQud3JpdGVfc2hpZnQoMSwwKX1mb3IoaG49MTtobjxybi5GaWxlSW5kZXgubGVuZ3RoOysraG4paWYoKFJyPXJuLkZpbGVJbmRleFtobl0p'@;
put 'LnNpemU+MCYmUnIuc2l6ZTw0MDk2KXtmb3IoU3I9MDtTcjxSci5zaXplOysrU3IpcXQud3JpdGVfc2hpZnQoMSxSci5jb250ZW50W1NyXSk7Zm9yKDs2MyZTcjsrK1NyKXF0LndyaXRlX3NoaWZ0KDEsMCl9Zm9yKDtxdC5sPHF0Lmxlbmd0aDspcXQud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4g'@;
put 'cXR9Ri52ZXJzaW9uPSIxLjEuNCI7dmFyIE1yLHJyPTY0LFVuPS0yLFhyPSJkMGNmMTFlMGExYjExYWUxIixwaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLE9pPSIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsTmk9e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxG'@;
put 'QVRTRUNUOi0zLEVORE9GQ0hBSU46VW4sRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpYcixIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RSRUFNOi0xLEhFQURFUl9DTFNJRDpPaSxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0i'@;
put 'LCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24gX3Iocm4pe2Zvcih2YXIgeW49bmV3IEFycmF5KHJuLmxlbmd0aCksYW49MDthbjxybi5sZW5ndGg7Kythbil5blthbl09U3RyaW5nLmZyb21DaGFyQ29kZShyblthbl0pO3JldHVybiB5bi5qb2luKCIiKX1mdW5jdGlv'@;
put 'biBDcihybil7cmV0dXJuIE1yP01yLmRlZmxhdGVSYXdTeW5jKHJuKTp6YShybil9Zm9yKHZhciBybix5bixTaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEzLDIsMTQsMSwxNV0sWnI9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMs'@;
put 'NTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLFVpPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLEZpPXR5cGVv'@;
put 'ZiBVaW50OEFycmF5PCJ1Iixvcz1GaT9uZXcgVWludDhBcnJheSgyNTYpOltdLGxvPTA7bG88MjU2OysrbG8pb3NbbG9dPSh2b2lkIDAsMjU1JigoeW49MTM5NTM2Jigocm49bG8pPDwxfHJuPDwxMSl8NTU4MTQ0Jihybjw8NXxybjw8MTUpKT4+MTZ8eW4+Pjh8eW4pKTtmdW5jdGlvbiBGbyhy'@;
put 'bix5bil7dmFyIGFuPW9zWzI1NSZybl07cmV0dXJuIHluPD04P2FuPj4+OC15bjooYW49YW48PDh8b3Nbcm4+PjgmMjU1XSx5bjw9MTY/YW4+Pj4xNi15bjooYW49YW48PDh8b3Nbcm4+PjE2JjI1NV0pPj4+MjQteW4pfWZ1bmN0aW9uIHhvKHJuLHluKXt2YXIgYW49NyZ5bixVdD15bj4+PjM7'@;
put 'cmV0dXJuKHJuW1V0XXwoYW48PTY/MDpybltVdCsxXTw8OCkpPj4+YW4mM31mdW5jdGlvbiB2aShybix5bil7dmFyIGFuPTcmeW4sVXQ9eW4+Pj4zO3JldHVybihybltVdF18KGFuPD01PzA6cm5bVXQrMV08PDgpKT4+PmFuJjd9ZnVuY3Rpb24gRW4ocm4seW4pe3ZhciBhbj03JnluLFV0PXlu'@;
put 'Pj4+MztyZXR1cm4ocm5bVXRdfChhbjw9Mz8wOnJuW1V0KzFdPDw4KSk+Pj5hbiYzMX1mdW5jdGlvbiBtcyhybix5bil7dmFyIGFuPTcmeW4sVXQ9eW4+Pj4zO3JldHVybihybltVdF18KGFuPD0xPzA6cm5bVXQrMV08PDgpKT4+PmFuJjEyN31mdW5jdGlvbiBocihybix5bixhbil7dmFyIFV0'@;
put 'PTcmeW4scXQ9eW4+Pj4zLEluPXJuW3F0XT4+PlV0O3JldHVybiBhbjw4LVV0fHwoSW58PXJuW3F0KzFdPDw4LVV0LGFuPDE2LVV0KXx8KElufD1ybltxdCsyXTw8MTYtVXQsYW48MjQtVXQpfHwoSW58PXJuW3F0KzNdPDwyNC1VdCksSW4mKDE8PGFuKS0xfWZ1bmN0aW9uIG5sKHJuLHluKXt2'@;
put 'YXIgYW49cm4ubGVuZ3RoLFV0PTIqYW4+eW4/Miphbjp5bis1LHF0PTA7aWYoYW4+PXluKXJldHVybiBybjtpZihkZSl7dmFyIGhuPXkoVXQpO2lmKHJuLmNvcHkpcm4uY29weShobik7ZWxzZSBmb3IoO3F0PHJuLmxlbmd0aDsrK3F0KWhuW3F0XT1ybltxdF07cmV0dXJuIGhufWlmKEZpKXt2'@;
put 'YXIgSW49bmV3IFVpbnQ4QXJyYXkoVXQpO2lmKEluLnNldClJbi5zZXQocm4pO2Vsc2UgZm9yKDtxdDxybi5sZW5ndGg7KytxdClJbltxdF09cm5bcXRdO3JldHVybiBJbn1yZXR1cm4gcm4ubGVuZ3RoPVV0LHJufWZ1bmN0aW9uIFlhKHJuKXtmb3IodmFyIHluPW5ldyBBcnJheShybiksYW49'@;
put 'MDthbjxybjsrK2FuKXluW2FuXT0wO3JldHVybiB5bn12YXIgemE9ZnVuY3Rpb24oKXt2YXIgcm49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oYW4sVXQpe2Zvcih2YXIgcXQ9MDtxdDxhbi5sZW5ndGg7KXt2YXIgaG49TWF0aC5taW4oNjU1MzUsYW4ubGVuZ3RoLXF0KTtmb3IoVXQud3Jp'@;
put 'dGVfc2hpZnQoMSwrKHF0K2huPT1hbi5sZW5ndGgpKSxVdC53cml0ZV9zaGlmdCgyLGhuKSxVdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5obik7aG4tLSA+MDspVXRbVXQubCsrXT1hbltxdCsrXX1yZXR1cm4gVXQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKHluKXt2YXIgYW49Z3IoNTArTWF0aC5m'@;
put 'bG9vcigxLjEqeW4ubGVuZ3RoKSksVXQ9cm4oeW4sYW4pO3JldHVybiBhbi5zbGljZSgwLFV0KX19KCk7ZnVuY3Rpb24geWMocm4seW4sYW4pe3ZhciBVdD0xLHF0PTAsaG49MCxJbj0wLGlyPTAsU3I9cm4ubGVuZ3RoLEZyPUZpP25ldyBVaW50MTZBcnJheSgzMik6WWEoMzIpO2Zvcihobj0w'@;
put 'O2huPDMyOysraG4pRnJbaG5dPTA7Zm9yKGhuPVNyO2huPGFuOysraG4pcm5baG5dPTA7U3I9cm4ubGVuZ3RoO3ZhciBScj1GaT9uZXcgVWludDE2QXJyYXkoU3IpOllhKFNyKTtmb3IoaG49MDtobjxTcjsrK2huKUZyW3F0PXJuW2huXV0rKyxVdDxxdCYmKFV0PXF0KSxScltobl09MDtmb3Io'@;
put 'RnJbMF09MCxobj0xO2huPD1VdDsrK2huKUZyW2huKzE2XT1pcj1pcitGcltobi0xXTw8MTtmb3IoaG49MDtobjxTcjsrK2huKTAhPShpcj1ybltobl0pJiYoUnJbaG5dPUZyW2lyKzE2XSsrKTt2YXIgRWk9MDtmb3IoaG49MDtobjxTcjsrK2huKWlmKDAhPShFaT1ybltobl0pKWZvcihpcj1G'@;
put 'byhScltobl0sVXQpPj5VdC1FaSxJbj0oMTw8VXQrNC1FaSktMTtJbj49MDstLUluKXluW2lyfEluPDxFaV09MTUmRWl8aG48PDQ7cmV0dXJuIFV0fXZhciBrYT1GaT9uZXcgVWludDE2QXJyYXkoNTEyKTpZYSg1MTIpLEt0PUZpP25ldyBVaW50MTZBcnJheSgzMik6WWEoMzIpO2lmKCFGaSl7'@;
put 'Zm9yKHZhciBtbj0wO21uPDUxMjsrK21uKWthW21uXT0wO2Zvcihtbj0wO21uPDMyOysrbW4pS3RbbW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBybj1bXSx5bj0wO3luPDMyO3luKyspcm4ucHVzaCg1KTt5YyhybixLdCwzMik7dmFyIGFuPVtdO2Zvcih5bj0wO3luPD0xNDM7eW4rKylhbi5w'@;
put 'dXNoKDgpO2Zvcig7eW48PTI1NTt5bisrKWFuLnB1c2goOSk7Zm9yKDt5bjw9Mjc5O3luKyspYW4ucHVzaCg3KTtmb3IoO3luPD0yODc7eW4rKylhbi5wdXNoKDgpO3ljKGFuLGthLDI4OCl9KCk7dmFyIEZuPUZpP25ldyBVaW50MTZBcnJheSgzMjc2OCk6WWEoMzI3NjgpLEpyPUZpP25ldyBV'@;
put 'aW50MTZBcnJheSgzMjc2OCk6WWEoMzI3NjgpLFhuPUZpP25ldyBVaW50MTZBcnJheSgxMjgpOllhKDEyOCksaGk9MSxjcj0xO2Z1bmN0aW9uIGZpKHJuLHluKXt2YXIgYW49RW4ocm4seW4pKzI1NyxVdD1Fbihybix5bis9NSkrMSxxdD1mdW5jdGlvbiBCcyhybix5bil7dmFyIGFuPTcmeW4s'@;
put 'VXQ9eW4+Pj4zO3JldHVybihybltVdF18KGFuPD00PzA6cm5bVXQrMV08PDgpKT4+PmFuJjE1fShybix5bis9NSkrNDt5bis9NDtmb3IodmFyIGhuPTAsSW49Rmk/bmV3IFVpbnQ4QXJyYXkoMTkpOllhKDE5KSxpcj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0sU3I9'@;
put 'MSxGcj1GaT9uZXcgVWludDhBcnJheSg4KTpZYSg4KSxScj1GaT9uZXcgVWludDhBcnJheSg4KTpZYSg4KSxFaT1Jbi5sZW5ndGgsYmk9MDtiaTxxdDsrK2JpKUluW1NpW2JpXV09aG49dmkocm4seW4pLFNyPGhuJiYoU3I9aG4pLEZyW2huXSsrLHluKz0zO3ZhciBUbz0wO2ZvcihGclswXT0w'@;
put 'LGJpPTE7Ymk8PVNyOysrYmkpUnJbYmldPVRvPVRvK0ZyW2JpLTFdPDwxO2ZvcihiaT0wO2JpPEVpOysrYmkpMCE9KFRvPUluW2JpXSkmJihpcltiaV09UnJbVG9dKyspO3ZhciB2bz0wO2ZvcihiaT0wO2JpPEVpOysrYmkpaWYoMCE9KHZvPUluW2JpXSkpe1RvPW9zW2lyW2JpXV0+Pjgtdm87'@;
put 'Zm9yKHZhciB6aT0oMTw8Ny12byktMTt6aT49MDstLXppKVhuW1RvfHppPDx2b109NyZ2b3xiaTw8M312YXIgWG89W107Zm9yKFNyPTE7WG8ubGVuZ3RoPGFuK1V0Oylzd2l0Y2goVG89WG5bbXMocm4seW4pXSx5bis9NyZUbyxUbz4+Pj0zKXtjYXNlIDE2OmZvcihobj0zK3hvKHJuLHluKSx5'@;
put 'bis9MixUbz1Yb1tYby5sZW5ndGgtMV07aG4tLSA+MDspWG8ucHVzaChUbyk7YnJlYWs7Y2FzZSAxNzpmb3IoaG49Myt2aShybix5bikseW4rPTM7aG4tLSA+MDspWG8ucHVzaCgwKTticmVhaztjYXNlIDE4OmZvcihobj0xMSttcyhybix5bikseW4rPTc7aG4tLSA+MDspWG8ucHVzaCgwKTti'@;
put 'cmVhaztkZWZhdWx0OlhvLnB1c2goVG8pLFNyPFRvJiYoU3I9VG8pfXZhciBWcz1Yby5zbGljZSgwLGFuKSxKdT1Yby5zbGljZShhbik7Zm9yKGJpPWFuO2JpPDI4NjsrK2JpKVZzW2JpXT0wO2ZvcihiaT1VdDtiaTwzMDsrK2JpKUp1W2JpXT0wO3JldHVybiBoaT15YyhWcyxGbiwyODYpLGNy'@;
put 'PXljKEp1LEpyLDMwKSx5bn1mdW5jdGlvbiBtaShybix5bil7dmFyIFV0PWZ1bmN0aW9uIHdvKHJuLHluKXtpZigzPT1yblswXSYmISgzJnJuWzFdKSlyZXR1cm5bRyh5biksMl07Zm9yKHZhciBhbj0wLFV0PTAscXQ9eSh5bnx8MTw8MTgpLGhuPTAsSW49cXQubGVuZ3RoPj4+MCxpcj0wLFNy'@;
put 'PTA7ISgxJlV0KTspaWYoVXQ9dmkocm4sYW4pLGFuKz0zLFV0Pj4+MSlmb3IoVXQ+Pj4xPT0xPyhpcj05LFNyPTUpOihhbj1maShybixhbiksaXI9aGksU3I9Y3IpLCF5biYmSW48aG4rMzI3NjcmJihJbj0ocXQ9bmwocXQsaG4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciBScj1ocihybixhbixp'@;
put 'ciksRWk9VXQ+Pj4xPT0xP2thW1JyXTpGbltScl07aWYoYW4rPTE1JkVpLChFaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PUVpKWJyZWFrO3ZhciBiaT0oRWktPTI1Nyk8OD8wOkVpLTQ+PjI7Ymk+NSYmKGJpPTApO3ZhciBUbz1obitacltFaV07Ymk+MCYmKFRvKz1ocihybixhbixiaSksYW4r'@;
put 'PWJpKSxScj1ocihybixhbixTciksYW4rPTE1JihFaT1VdD4+PjE9PTE/S3RbUnJdOkpyW1JyXSk7dmFyIHZvPShFaT4+Pj00KTw0PzA6RWktMj4+MSx6aT1VaVtFaV07Zm9yKHZvPjAmJih6aSs9aHIocm4sYW4sdm8pLGFuKz12byksIXluJiZJbjxUbyYmKEluPShxdD1ubChxdCxUbykpLmxl'@;
put 'bmd0aCk7aG48VG87KXF0W2huXT1xdFtobi16aV0sKytobn1lbHNlIHF0W2huKytdPUVpfWVsc2V7NyZhbiYmKGFuKz04LSg3JmFuKSk7dmFyIEZyPXJuW2FuPj4+M118cm5bMSsoYW4+Pj4zKV08PDg7aWYoYW4rPTMyLCF5biYmSW48aG4rRnImJihJbj0ocXQ9bmwocXQsaG4rRnIpKS5sZW5n'@;
put 'dGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBybi5jb3B5KXJuLmNvcHkocXQsaG4sYW4+Pj4zLChhbj4+PjMpK0ZyKSxobis9RnIsYW4rPTgqRnI7ZWxzZSBmb3IoO0ZyLS0gPjA7KXF0W2huKytdPXJuW2FuPj4+M10sYW4rPTh9cmV0dXJuW3luP3F0OnF0LnNsaWNlKDAsaG4pLGFuKzc+Pj4zXX0o'@;
put 'cm4uc2xpY2Uocm4ubHx8MCkseW4pO3JldHVybiBybi5sKz1VdFsxXSxVdFswXX1mdW5jdGlvbiBZaShybix5bil7aWYoIXJuKXRocm93IG5ldyBFcnJvcih5bik7dHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLmVycm9yKHluKX1mdW5jdGlvbiBsaShybix5bil7dmFyIGFuPXJuO1pzKGFu'@;
put 'LDApO3ZhciBobj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07dW4oaG4se3Jvb3Q6eW4ucm9vdH0pO2Zvcih2YXIgSW49YW4ubGVuZ3RoLTQ7KDgwIT1hbltJbl18fDc1IT1hbltJbisxXXx8NSE9YW5bSW4rMl18fDYhPWFuW0luKzNdKSYmSW4+PTA7KS0tSW47YW4ubD1Jbis0LGFuLmwr'@;
put 'PTQ7dmFyIGlyPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9Njt2YXIgU3I9YW4ucmVhZF9zaGlmdCg0KTtmb3IoYW4ubD1TcixJbj0wO0luPGlyOysrSW4pe2FuLmwrPTIwO3ZhciBGcj1hbi5yZWFkX3NoaWZ0KDQpLFJyPWFuLnJlYWRfc2hpZnQoNCksRWk9YW4ucmVhZF9zaGlmdCgyKSxiaT1h'@;
put 'bi5yZWFkX3NoaWZ0KDIpLFRvPWFuLnJlYWRfc2hpZnQoMik7YW4ubCs9ODt2YXIgdm89YW4ucmVhZF9zaGlmdCg0KSx6aT12ZShhbi5zbGljZShhbi5sK0VpLGFuLmwrRWkrYmkpKTthbi5sKz1FaStiaStUbzt2YXIgWG89YW4ubDthbi5sPXZvKzQsRXMoYW4sRnIsUnIsaG4semkpLGFuLmw9'@;
put 'WG99cmV0dXJuIGhufWZ1bmN0aW9uIEVzKHJuLHluLGFuLFV0LHF0KXtybi5sKz0yO3ZhciBobj1ybi5yZWFkX3NoaWZ0KDIpLEluPXJuLnJlYWRfc2hpZnQoMiksaXI9ZnVuY3Rpb24geWUocm4pe3ZhciB5bj02NTUzNSZybi5yZWFkX3NoaWZ0KDIpLGFuPTY1NTM1JnJuLnJlYWRfc2hpZnQo'@;
put 'MiksVXQ9bmV3IERhdGUscXQ9MzEmYW4saG49MTUmKGFuPj4+PTUpO2FuPj4+PTQsVXQuc2V0TWlsbGlzZWNvbmRzKDApLFV0LnNldEZ1bGxZZWFyKGFuKzE5ODApLFV0LnNldE1vbnRoKGhuLTEpLFV0LnNldERhdGUocXQpO3ZhciBJbj0zMSZ5bixpcj02MyYoeW4+Pj49NSk7cmV0dXJuIFV0'@;
put 'LnNldEhvdXJzKHluPj4+PTYpLFV0LnNldE1pbnV0ZXMoaXIpLFV0LnNldFNlY29uZHMoSW48PDEpLFV0fShybik7aWYoODI1NyZobil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciBTcj1ybi5yZWFkX3NoaWZ0KDQpLEZyPXJuLnJlYWRfc2hp'@;
put 'ZnQoNCksUnI9cm4ucmVhZF9zaGlmdCg0KSxFaT1ybi5yZWFkX3NoaWZ0KDIpLGJpPXJuLnJlYWRfc2hpZnQoMiksVG89IiIsdm89MDt2bzxFaTsrK3ZvKVRvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHJuW3JuLmwrK10pO2lmKGJpKXt2YXIgemk9dmUocm4uc2xpY2Uocm4ubCxybi5sK2JpKSk7'@;
put 'KHppWzIxNTg5XXx8e30pLm10JiYoaXI9emlbMjE1ODldLm10KSwoKHF0fHx7fSlbMjE1ODldfHx7fSkubXQmJihpcj1xdFsyMTU4OV0ubXQpfXJuLmwrPWJpO3ZhciBYbz1ybi5zbGljZShybi5sLHJuLmwrRnIpO3N3aXRjaChJbil7Y2FzZSA4OlhvPWZ1bmN0aW9uIFRuKHJuLHluKXtpZigh'@;
put 'TXIpcmV0dXJuIG1pKHJuLHluKTt2YXIgVXQ9bmV3KDAsTXIuSW5mbGF0ZVJhdykscXQ9VXQuX3Byb2Nlc3NDaHVuayhybi5zbGljZShybi5sKSxVdC5fZmluaXNoRmx1c2hGbGFnKTtyZXR1cm4gcm4ubCs9VXQuYnl0ZXNSZWFkLHF0fShybixScik7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1'@;
put 'bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIrSW4pfXZhciBWcz0hMTs4JmhuJiYoMTM0Njk1NzYwPT0oU3I9cm4ucmVhZF9zaGlmdCg0KSkmJihTcj1ybi5yZWFkX3NoaWZ0KDQpLFZzPSEwKSxGcj1ybi5yZWFkX3NoaWZ0KDQpLFJyPXJu'@;
put 'LnJlYWRfc2hpZnQoNCkpLEZyIT15biYmWWkoVnMsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIreW4rIiAhPSAiK0ZyKSxSciE9YW4mJllpKFZzLCJCYWQgdW5jb21wcmVzc2VkIHNpemU6ICIrYW4rIiAhPSAiK1JyKTt2YXIgSnU9RWUuYnVmKFhvLDApOygwfFNyKSE9KDB8SnUpJiZZaShWcywi'@;
put 'QmFkIENSQzMyIGNoZWNrc3VtOiAiK1NyKyIgIT0gIitKdSksYmMoVXQsVG8sWG8se3Vuc2FmZTohMCxtdDppcn0pfWZ1bmN0aW9uIGJjKHJuLHluLGFuLFV0KXt2YXIgcXQ9VXQmJlV0LnVuc2FmZTtxdHx8dW4ocm4pO3ZhciBobj0hcXQmJkxlLmZpbmQocm4seW4pO2lmKCFobil7dmFyIElu'@;
put 'PXJuLkZ1bGxQYXRoc1swXTt5bi5zbGljZSgwLEluLmxlbmd0aCk9PUluP0luPXluOigiLyIhPUluLnNsaWNlKC0xKSYmKEluKz0iLyIpLEluPShJbit5bikucmVwbGFjZSgiLy8iLCIvIikpLGhuPXtuYW1lOmllKHluKSx0eXBlOjJ9LHJuLkZpbGVJbmRleC5wdXNoKGhuKSxybi5GdWxsUGF0'@;
put 'aHMucHVzaChJbikscXR8fExlLnV0aWxzLmNmYl9nYyhybil9cmV0dXJuIGhuLmNvbnRlbnQ9YW4saG4uc2l6ZT1hbj9hbi5sZW5ndGg6MCxVdCYmKFV0LkNMU0lEJiYoaG4uY2xzaWQ9VXQuQ0xTSUQpLFV0Lm10JiYoaG4ubXQ9VXQubXQpLFV0LmN0JiYoaG4uY3Q9VXQuY3QpKSxobn1yZXR1'@;
put 'cm4gRi5maW5kPWZ1bmN0aW9uIHRyKHJuLHluKXt2YXIgYW49cm4uRnVsbFBhdGhzLm1hcChmdW5jdGlvbihTcil7cmV0dXJuIFNyLnRvVXBwZXJDYXNlKCl9KSxVdD1hbi5tYXAoZnVuY3Rpb24oU3Ipe3ZhciBGcj1Tci5zcGxpdCgiLyIpO3JldHVybiBGcltGci5sZW5ndGgtKCIvIj09U3Iu'@;
put 'c2xpY2UoLTEpPzI6MSldfSkscXQ9ITE7NDc9PT15bi5jaGFyQ29kZUF0KDApPyhxdD0hMCx5bj1hblswXS5zbGljZSgwLC0xKSt5bik6cXQ9LTEhPT15bi5pbmRleE9mKCIvIik7dmFyIGhuPXluLnRvVXBwZXJDYXNlKCksSW49ITA9PT1xdD9hbi5pbmRleE9mKGhuKTpVdC5pbmRleE9mKGhu'@;
put 'KTtpZigtMSE9PUluKXJldHVybiBybi5GaWxlSW5kZXhbSW5dO3ZhciBpcj0haG4ubWF0Y2gocCk7Zm9yKGhuPWhuLnJlcGxhY2UoXywiIiksaXImJihobj1obi5yZXBsYWNlKHAsIiEiKSksSW49MDtJbjxhbi5sZW5ndGg7KytJbilpZigoaXI/YW5bSW5dLnJlcGxhY2UocCwiISIpOmFuW0lu'@;
put 'XSkucmVwbGFjZShfLCIiKT09aG58fChpcj9VdFtJbl0ucmVwbGFjZShwLCIhIik6VXRbSW5dKS5yZXBsYWNlKF8sIiIpPT1obilyZXR1cm4gcm4uRmlsZUluZGV4W0luXTtyZXR1cm4gbnVsbH0sRi5yZWFkPWZ1bmN0aW9uIHFuKHJuLHluKXtzd2l0Y2goeW4mJnluLnR5cGV8fCJiYXNlNjQi'@;
put 'KXtjYXNlImZpbGUiOnJldHVybiBmdW5jdGlvbiBnbihybix5bil7cmV0dXJuIGplKCksWWUoTWUucmVhZEZpbGVTeW5jKHJuKSx5bil9KHJuLHluKTtjYXNlImJhc2U2NCI6cmV0dXJuIFllKEwoc2UuZGVjb2RlKHJuKSkseW4pO2Nhc2UiYmluYXJ5IjpyZXR1cm4gWWUoTChybikseW4pfXJl'@;
put 'dHVybiBZZShybix5bil9LEYucGFyc2U9WWUsRi53cml0ZT1mdW5jdGlvbiBBbihybix5bil7dmFyIGFuPUxuKHJuLHluKTtzd2l0Y2goeW4mJnluLnR5cGUpe2Nhc2UiZmlsZSI6cmV0dXJuIGplKCksTWUud3JpdGVGaWxlU3luYyh5bi5maWxlbmFtZSxhbiksYW47Y2FzZSJiaW5hcnkiOnJl'@;
put 'dHVybiBfcihhbik7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUoX3IoYW4pKX1yZXR1cm4gYW59LEYud3JpdGVGaWxlPWZ1bmN0aW9uIGRpKHJuLHluLGFuKXtqZSgpO3ZhciBVdD1Mbihybixhbik7TWUud3JpdGVGaWxlU3luYyh5bixVdCl9LEYudXRpbHM9e2NmYl9uZXc6ZnVuY3Rp'@;
put 'b24gRWEocm4pe3ZhciB5bj17fTtyZXR1cm4gdW4oeW4scm4pLHlufSxjZmJfYWRkOmJjLGNmYl9kZWw6ZnVuY3Rpb24gVGEocm4seW4pe3VuKHJuKTt2YXIgYW49TGUuZmluZChybix5bik7aWYoYW4pZm9yKHZhciBVdD0wO1V0PHJuLkZpbGVJbmRleC5sZW5ndGg7KytVdClpZihybi5GaWxl'@;
put 'SW5kZXhbVXRdPT1hbilyZXR1cm4gcm4uRmlsZUluZGV4LnNwbGljZShVdCwxKSxybi5GdWxsUGF0aHMuc3BsaWNlKFV0LDEpLCEwO3JldHVybiExfSxjZmJfbW92OmZ1bmN0aW9uIFloKHJuLHluLGFuKXt1bihybik7dmFyIFV0PUxlLmZpbmQocm4seW4pO2lmKFV0KWZvcih2YXIgcXQ9MDtx'@;
put 'dDxybi5GaWxlSW5kZXgubGVuZ3RoOysrcXQpaWYocm4uRmlsZUluZGV4W3F0XT09VXQpcmV0dXJuIHJuLkZpbGVJbmRleFtxdF0ubmFtZT1pZShhbikscm4uRnVsbFBhdGhzW3F0XT1hbiwhMDtyZXR1cm4hMX0sY2ZiX2djOmZ1bmN0aW9uIHMxKHJuKXtZbihybiwhMCl9LFJlYWRTaGlmdDpl'@;
put 'aSxDaGVja0ZpZWxkOk1hLHByZXBfYmxvYjpacyxiY29uY2F0OngsdXNlX3psaWI6ZnVuY3Rpb24gb3Iocm4pe3RyeXt2YXIgYW49bmV3KDAscm4uSW5mbGF0ZVJhdyk7aWYoYW4uX3Byb2Nlc3NDaHVuayhuZXcgVWludDhBcnJheShbMywwXSksYW4uX2ZpbmlzaEZsdXNoRmxhZyksIWFuLmJ5'@;
put 'dGVzUmVhZCl0aHJvdyBuZXcgRXJyb3IoInpsaWIgZG9lcyBub3QgZXhwb3NlIGJ5dGVzUmVhZCIpO01yPXJufWNhdGNoKFV0KXtjb25zb2xlLmVycm9yKCJjYW5ub3QgdXNlIG5hdGl2ZSB6bGliOiAiKyhVdC5tZXNzYWdlfHxVdCkpfX0sX2RlZmxhdGVSYXc6emEsX2luZmxhdGVSYXc6bWks'@;
put 'Y29uc3RzOk5pfSxGfSgpO3RyeXtOZT1SKDgzMzM3KX1jYXRjaHt9ZnVuY3Rpb24gS2UoTSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBNP0goTSk6QXJyYXkuaXNBcnJheShNKT9mdW5jdGlvbiBnKE0pe2lmKHR5cGVvZiBVaW50OEFycmF5PiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9y'@;
put 'dGVkIik7cmV0dXJuIG5ldyBVaW50OEFycmF5KE0pfShNKTpNfWZ1bmN0aW9uIFVlKE0sRixPKXtpZih0eXBlb2YgTmU8InUiJiZOZS53cml0ZUZpbGVTeW5jKXJldHVybiBPP05lLndyaXRlRmlsZVN5bmMoTSxGLE8pOk5lLndyaXRlRmlsZVN5bmMoTSxGKTt2YXIgSj0idXRmOCI9PU8/TG8o'@;
put 'Rik6RjtpZih0eXBlb2YgSUVfU2F2ZUZpbGU8InUiKXJldHVybiBJRV9TYXZlRmlsZShKLE0pO2lmKHR5cGVvZiBCbG9iPCJ1Iil7dmFyIGllPW5ldyBCbG9iKFtLZShKKV0se3R5cGU6ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdh'@;
put 'dG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKGllLE0pO2lmKHR5cGVvZiBzYXZlQXM8InUiKXJldHVybiBzYXZlQXMoaWUsTSk7aWYodHlwZW9mIFVSTDwidSImJnR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQmJlVSTC5jcmVhdGVP'@;
put 'YmplY3RVUkwpe3ZhciBwZT1VUkwuY3JlYXRlT2JqZWN0VVJMKGllKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8'@;
put 'InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChwZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOnBlLGZpbGVuYW1lOk0sc2F2ZUFzOiEwfSk7dmFyIHllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT15ZS5kb3du'@;
put 'bG9hZClyZXR1cm4geWUuZG93bmxvYWQ9TSx5ZS5ocmVmPXBlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeWUpLHllLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh5ZSksVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1'@;
put 'bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChwZSl9LDZlNCkscGV9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHZlPUZpbGUoTSk7cmV0dXJuIHZlLm9wZW4oInciKSx2ZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0Fy'@;
put 'cmF5KEYpJiYoRj1qKEYpKSx2ZS53cml0ZShGKSx2ZS5jbG9zZSgpLEZ9Y2F0Y2goTWUpe2lmKCFNZS5tZXNzYWdlfHwhTWUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyBNZX10aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitNKX1mdW5jdGlvbiBhdChNKXtmb3Io'@;
put 'dmFyIEY9T2JqZWN0LmtleXMoTSksTz1bXSxKPTA7SjxGLmxlbmd0aDsrK0opT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0sRltKXSkmJk8ucHVzaChGW0pdKTtyZXR1cm4gT31mdW5jdGlvbiBGZShNLEYpe2Zvcih2YXIgTz1bXSxKPWF0KE0pLGllPTA7aWUhPT1KLmxl'@;
put 'bmd0aDsrK2llKW51bGw9PU9bTVtKW2llXV1bRl1dJiYoT1tNW0pbaWVdXVtGXV09SltpZV0pO3JldHVybiBPfWZ1bmN0aW9uIENlKE0pe2Zvcih2YXIgRj1bXSxPPWF0KE0pLEo9MDtKIT09Ty5sZW5ndGg7KytKKUZbTVtPW0pdXV09T1tKXTtyZXR1cm4gRn1mdW5jdGlvbiBEZShNKXtmb3Io'@;
put 'dmFyIEY9W10sTz1hdChNKSxKPTA7SiE9PU8ubGVuZ3RoOysrSilGW01bT1tKXV1dPXBhcnNlSW50KE9bSl0sMTApO3JldHVybiBGfXZhciBHZSxkdCxldD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCwwKSxudD0wO2Z1bmN0aW9uIFRlKCl7bnQ9ZXQuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRl'@;
put 'KS5nZXRUaW1lem9uZU9mZnNldCgpLWV0LmdldFRpbWV6b25lT2Zmc2V0KCkpLEdlPWZ1bmN0aW9uKEYsTyl7dmFyIEo9Ri5nZXRUaW1lKCk7cmV0dXJuIE8mJihKLT0xMjYzMTY4ZTUpLChKLW50KS84NjRlNX0sZHQ9ZnVuY3Rpb24oRil7dmFyIE89bmV3IERhdGU7cmV0dXJuIE8uc2V0VGlt'@;
put 'ZSgyNCpGKjYwKjYwKjFlMytudCksT319ZnVuY3Rpb24gb3QoTSl7dmFyIEY9MCxPPTAsSj0hMSxpZT1NLm1hdGNoKC9QKFswLTlcLl0rWSk/KFswLTlcLl0rTSk/KFswLTlcLl0rRCk/VChbMC05XC5dK0gpPyhbMC05XC5dK00pPyhbMC05XC5dK1MpPy8pO2lmKCFpZSl0aHJvdyBuZXcgRXJy'@;
put 'b3IoInwiK00rInwgaXMgbm90IGFuIElTTzg2MDEgRHVyYXRpb24iKTtmb3IodmFyIHBlPTE7cGUhPWllLmxlbmd0aDsrK3BlKWlmKGllW3BlXSl7c3dpdGNoKE89MSxwZT4zJiYoSj0hMCksaWVbcGVdLnNsaWNlKGllW3BlXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIraWVbcGVdLnNsaWNlKGllW3BlXS5sZW5ndGgtMSkpO2Nhc2UiRCI6Tyo9MjQ7Y2FzZSJIIjpPKj02MDtjYXNlIk0iOmlmKCFKKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgSVNPIER1cmF0aW9uIEZpZWxkOiBNIik7Tyo9NjB9'@;
put 'Ris9TypwYXJzZUludChpZVtwZV0sMTApfXJldHVybiBGfVRlKCk7dmFyIGx0PW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTihsdC5nZXRGdWxsWWVhcigpKSYmKGx0PW5ldyBEYXRlKCIyLzE5LzE3IikpO3ZhciBDdD0yMDE3PT1sdC5nZXRGdWxsWWVhcigpO2Z1'@;
put 'bmN0aW9uIEZ0KE0sRil7dmFyIE89bmV3IERhdGUoTSk7aWYoQ3QpcmV0dXJuIEY+MD9PLnNldFRpbWUoTy5nZXRUaW1lKCkrNjAqTy5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6RjwwJiZPLnNldFRpbWUoTy5nZXRUaW1lKCktNjAqTy5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksTztpZihN'@;
put 'IGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gTTtpZigxOTE3PT1sdC5nZXRGdWxsWWVhcigpJiYhaXNOYU4oTy5nZXRGdWxsWWVhcigpKSl7dmFyIEo9Ty5nZXRGdWxsWWVhcigpO3JldHVybiBNLmluZGV4T2YoIiIrSik+LTF8fE8uc2V0RnVsbFllYXIoTy5nZXRGdWxsWWVhcigpKzEwMCksT312'@;
put 'YXIgaWU9TS5tYXRjaCgvXGQrL2cpfHxbIjIwMTciLCIyIiwiMTkiLCIwIiwiMCIsIjAiXSxwZT1uZXcgRGF0ZSgraWVbMF0sK2llWzFdLTEsK2llWzJdLCtpZVszXXx8MCwraWVbNF18fDAsK2llWzVdfHwwKTtyZXR1cm4gTS5pbmRleE9mKCJaIik+LTEmJihwZT1uZXcgRGF0ZShwZS5nZXRU'@;
put 'aW1lKCktNjAqcGUuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMpKSxwZX1mdW5jdGlvbiBSdChNKXtmb3IodmFyIEY9IiIsTz0wO08hPU0ubGVuZ3RoOysrTylGKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE1bT10pO3JldHVybiBGfWZ1bmN0aW9uIFh0KE0pe2lmKCJvYmplY3QiIT10eXBlb2YgTXx8'@;
put 'bnVsbD09TSlyZXR1cm4gTTtpZihNIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gbmV3IERhdGUoTS5nZXRUaW1lKCkpO2lmKEFycmF5LmlzQXJyYXkoTSkpcmV0dXJuIGZ1bmN0aW9uIFNuKE0pe2Zvcih2YXIgRj1bXSxPPTA7TzxNLmxlbmd0aDsrK08pe3ZhciBKPU1bT107Im9iamVjdCI9PXR5'@;
put 'cGVvZiBKP0ZbT109WHQoSik6bnVsbCE9SiYmKEZbT109Sil9cmV0dXJuIEZ9KE0pO3ZhciBGPXt9O2Zvcih2YXIgTyBpbiBNKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChNLE8pJiYoRltPXT1YdChNW09dKSk7cmV0dXJuIEZ9ZnVuY3Rpb24genQoTSxGKXtpZigib2Jq'@;
put 'ZWN0IiE9dHlwZW9mIEZ8fG51bGw9PUYpcmV0dXJuIE07Zm9yKHZhciBPIGluIEYpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEYsTykmJihNW09dPVh0KEZbT10pKTtyZXR1cm4gTX1mdW5jdGlvbiB2bihNLEYpe2Zvcih2YXIgTz0iIjtPLmxlbmd0aDxGOylPKz1NO3Jl'@;
put 'dHVybiBPfWZ1bmN0aW9uIEJuKE0pe3ZhciBGPU51bWJlcihNKTtpZighaXNOYU4oRikpcmV0dXJuIGlzRmluaXRlKEYpP0Y6TmFOO2lmKCEvXGQvLnRlc3QoTSkpcmV0dXJuIEY7dmFyIE89MSxKPU0ucmVwbGFjZSgvKFtcZF0pLChbXGRdKS9nLCIkMSQyIikucmVwbGFjZSgvWyRdL2csIiIp'@;
put 'LnJlcGxhY2UoL1slXS9nLGZ1bmN0aW9uKCl7cmV0dXJuIE8qPTEwMCwiIn0pO3JldHVybiBpc05hTihGPU51bWJlcihKKSkmJihKPUoucmVwbGFjZSgvWyhdKC4qKVspXS8sZnVuY3Rpb24oaWUscGUpe3JldHVybiBPPS1PLHBlfSksaXNOYU4oRj1OdW1iZXIoSikpKT9GOkYvT31mdW5jdGlv'@;
put 'biB0bihNKXt2YXIgRj1uZXcgRGF0ZShNKSxPPW5ldyBEYXRlKE5hTiksSj1GLmdldFllYXIoKSxpZT1GLmdldE1vbnRoKCkscGU9Ri5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKHBlKXx8SjwwfHxKPjgwOTk/TzooaWU+MHx8cGU+MSkmJjEwMSE9Snx8TS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9q'@;
put 'YW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYy8pP0Y6TS5tYXRjaCgvW14tMC05OixcL1xcXS8pP086Rn1mdW5jdGlvbiBabihNLEYpe2lmKEYmJkYucmF3KXJldHVybnt0OiJzIix2Ok19O2lmKCFNKXJldHVybnt0OiJ6In07aWYoIlRSVUUiPT09TSlyZXR1'@;
put 'cm57dDoiYiIsdjohMH07aWYoIkZBTFNFIj09PU0pcmV0dXJue3Q6ImIiLHY6ITF9O3ZhciBPPSIiLEo9TnVtYmVyKE0pO2lmKGlzRmluaXRlKEopKXJldHVybnt0OiJuIix2Okp9O2lmKGlzTmFOKEopJiYvXGQvLnRlc3QoTSkpe3ZhciBpZT0xLHBlPU0ucmVwbGFjZSgvKFtcZF0pLChbXGRd'@;
put 'KS9nLGZ1bmN0aW9uKGl0LGh0LGt0KXtyZXR1cm4gT3x8KE89IiMsIyMwIiksaHQra3R9KS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvXC5cZCovLGZ1bmN0aW9uKGl0KXtPfHwoTz0iMCIpLE8rPSIuIjtmb3IodmFyIGh0PTI7aHQ8PWl0Lmxlbmd0aDsrK2h0KU8rPSIwIjtyZXR1cm4g'@;
put 'aXR9KS5yZXBsYWNlKC9bJV0vZyxmdW5jdGlvbigpe3JldHVybiBpZSo9MTAwLE98fChPPSIwIiksTys9IiUiLCIifSk7aWYoIWlzTmFOKEo9TnVtYmVyKHBlKSkpcmV0dXJue3Q6Im4iLHY6Si9pZSx6Ok99O2lmKHBlPXBlLnJlcGxhY2UoL1soXSguKilbKV0vLGZ1bmN0aW9uKGl0LGh0KXty'@;
put 'ZXR1cm4gaWU9LWllLGh0fSksIWlzTmFOKEo9TnVtYmVyKHBlKSkpcmV0dXJue3Q6Im4iLHY6Si9pZSx6OihPfHwiMCIpKyJfKTsoIisoT3x8IjAiKSsiKTtAIn19ZTppZighRnx8IUYucmF3RGF0ZXMpe3ZhciB5ZT1GJiZGLmNlbGxEYXRlcyx2ZT1uZXcgRGF0ZShNKSxqZT12ZS5nZXRZZWFy'@;
put 'KCksWWU9dmUuZ2V0TW9udGgoKSxxZT12ZS5nZXREYXRlKCk7aWYoaXNOYU4ocWUpfHxqZTwwfHxqZT44MDk5KWJyZWFrIGU7aWYoKFllPjB8fHFlPjEpJiYxMDEhPWplKXJldHVybnt0OnllPyJkIjoibiIsdjp5ZT92ZTpHZSh2ZSksejpGLmRhdGVORnx8Qy5fdGFibGVbMTRdfTtpZihNLnRv'@;
put 'TG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLykpcmV0dXJue3Q6eWU/ImQiOiJuIix2OnllP3ZlOkdlKHZlKSx6OkYuZGF0ZU5GfHxDLl90YWJsZVsxNF19O2lmKE0ubWF0Y2goL1teLTAtOTosXC9cXF0vKSlicmVhayBl'@;
put 'O3JldHVybiB2ZX1yZXR1cm57dDoicyIsdjpNfX12YXIgQnQsT249NT09ImFiYWNhYmEiLnNwbGl0KC8oOj9iKS9pKS5sZW5ndGg7ZnVuY3Rpb24gZG4oTSl7cmV0dXJuIG51bGwhPU0mJiFNfWZ1bmN0aW9uIE10KE0pe3JldHVybiBNLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK00uc2xpY2Uo'@;
put 'MSl9ZnVuY3Rpb24gWXQoTSl7cmV0dXJuIE0/TS5kYXRhP3ooTS5kYXRhKTpNLmFzTm9kZUJ1ZmZlciYmZGU/eihNLmFzTm9kZUJ1ZmZlcigpLnRvU3RyaW5nKCJiaW5hcnkiKSk6TS5hc0JpbmFyeT96KE0uYXNCaW5hcnkoKSk6TS5fZGF0YSYmTS5fZGF0YS5nZXRDb250ZW50P3ooUnQoQXJy'@;
put 'YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoTS5fZGF0YS5nZXRDb250ZW50KCksMCkpKTpNLmNvbnRlbnQmJk0udHlwZT96KFJ0KE0uY29udGVudCkpOm51bGw6bnVsbH1mdW5jdGlvbiBfdChNKXtpZighTSlyZXR1cm4gbnVsbDtpZihNLmRhdGEpcmV0dXJuIFYoTS5kYXRhKTtpZihNLmFzTm9k'@;
put 'ZUJ1ZmZlciYmZGUpcmV0dXJuIE0uYXNOb2RlQnVmZmVyKCk7aWYoTS5fZGF0YSYmTS5fZGF0YS5nZXRDb250ZW50KXt2YXIgRj1NLl9kYXRhLmdldENvbnRlbnQoKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/VihGKTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChGKX1yZXR1cm4gTS5j'@;
put 'b250ZW50JiZNLnR5cGU/TS5jb250ZW50Om51bGx9ZnVuY3Rpb24gcG4oTSxGKXtmb3IodmFyIE89TS5GdWxsUGF0aHN8fGF0KE0uZmlsZXMpLEo9Ri50b0xvd2VyQ2FzZSgpLGllPUoucmVwbGFjZSgvXC8vZywiXFwiKSxwZT0wO3BlPE8ubGVuZ3RoOysrcGUpe3ZhciB5ZT1PW3BlXS50b0xv'@;
put 'd2VyQ2FzZSgpO2lmKEo9PXllfHxpZT09eWUpcmV0dXJuIE0uZmlsZXNbT1twZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIHJ0KE0sRil7dmFyIE89cG4oTSxGKTtpZihudWxsPT1PKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK0YrIiBpbiB6aXAiKTtyZXR1cm4gT31mdW5j'@;
put 'dGlvbiBFdChNLEYsTyl7aWYoIU8pcmV0dXJuIGZ1bmN0aW9uIGp0KE0pe3JldHVybiBNJiYiLmJpbiI9PT1NLm5hbWUuc2xpY2UoLTQpP190KE0pOll0KE0pfShydChNLEYpKTtpZighRilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIEV0KE0sRil9Y2F0Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9u'@;
put 'IFF0KE0sRixPKXtpZighTylyZXR1cm4gWXQocnQoTSxGKSk7aWYoIUYpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBRdChNLEYpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBUdChNLEYsTyl7aWYoIU8pcmV0dXJuIF90KHJ0KE0sRikpO2lmKCFGKXJldHVybiBudWxsO3RyeXtyZXR1cm4g'@;
put 'VHQoTSxGKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gR3QoTSxGLE8pe00uRnVsbFBhdGhzP0xlLnV0aWxzLmNmYl9hZGQoTSxGLE8pOk0uZmlsZShGLE8pfWZ1bmN0aW9uIGJuKCl7cmV0dXJuIEJ0P25ldyBCdDpMZS51dGlscy5jZmJfbmV3KCl9ZnVuY3Rpb24gQ24oTSxGKXt2YXIg'@;
put 'TztpZihCdClzd2l0Y2goRi50eXBlKXtjYXNlImJhc2U2NCI6Tz1uZXcgQnQoTSx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOk89bmV3IEJ0KE0se2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjpPPW5ldyBCdChNKTticmVhaztkZWZhdWx0OnRocm93'@;
put 'IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitGLnR5cGUpfWVsc2Ugc3dpdGNoKEYudHlwZSl7Y2FzZSJiYXNlNjQiOk89TGUucmVhZChNLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOk89TGUucmVhZChNLHt0eXBlOiJiaW5hcnkifSk7YnJlYWs7Y2FzZSJidWZm'@;
put 'ZXIiOmNhc2UiYXJyYXkiOk89TGUucmVhZChNLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrRi50eXBlKX1yZXR1cm4gT31mdW5jdGlvbiBlbihNLEYpe2lmKCIvIj09TS5jaGFyQXQoMCkpcmV0dXJuIE0uc2xpY2Uo'@;
put 'MSk7dmFyIE89Ri5zcGxpdCgiLyIpOyIvIiE9Ri5zbGljZSgtMSkmJk8ucG9wKCk7Zm9yKHZhciBKPU0uc3BsaXQoIi8iKTswIT09Si5sZW5ndGg7KXt2YXIgaWU9Si5zaGlmdCgpOyIuLiI9PT1pZT9PLnBvcCgpOiIuIiE9PWllJiZPLnB1c2goaWUpfXJldHVybiBPLmpvaW4oIi8iKX10eXBl'@;
put 'b2YgSlNaaXBTeW5jPCJ1IiYmKEJ0PUpTWmlwU3luYyksJGUuZXhwb3J0cyYmdHlwZW9mIEJ0PiJ1IiYmKEJ0PVIoMzE3OSkpO3ZhciBQbj0nPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PlxyXG4nLHduPS8oPzpbXiJccz8+XC9dKylccyo9'@;
put 'XHMqKCg/OiIpKD86W14iXSo/KSg/OiIpfCg/OicpKD86W14nXSo/KSg/OicpfCg/OlteJyI+XHNdKykpL2csJHQ9LzxbXC9cP10/W2EtekEtWjAtOTpfLV0rKD86XHMrW14iXHM/PlwvXStccyo9XHMqKD86IlteIl0qInwnW14nXSonfFteJyI+XHM9XSspKSpccz9bXC9cP10/Pi9nO1BuLm1h'@;
put 'dGNoKCR0KXx8KCR0PS88W14+XSo+L2cpO3ZhciBXbj0vPFx3KjovLGNpPS88KFwvPylcdys6LztmdW5jdGlvbiBsbihNLEYsTyl7Zm9yKHZhciBKPXt9LGllPTAscGU9MDtpZSE9PU0ubGVuZ3RoJiYzMiE9PShwZT1NLmNoYXJDb2RlQXQoaWUpKSYmMTAhPT1wZSYmMTMhPT1wZTsrK2llKTtp'@;
put 'ZihGfHwoSlswXT1NLnNsaWNlKDAsaWUpKSxpZT09PU0ubGVuZ3RoKXJldHVybiBKO3ZhciB5ZT1NLm1hdGNoKHduKSx2ZT0wLE1lPSIiLGplPTAsWWU9IiIscWU9IiIsaXQ9MTtpZih5ZSlmb3IoamU9MDtqZSE9eWUubGVuZ3RoOysramUpe2ZvcihxZT15ZVtqZV0scGU9MDtwZSE9cWUubGVu'@;
put 'Z3RoJiY2MSE9PXFlLmNoYXJDb2RlQXQocGUpOysrcGUpO2ZvcihZZT1xZS5zbGljZSgwLHBlKS50cmltKCk7MzI9PXFlLmNoYXJDb2RlQXQocGUrMSk7KSsrcGU7Zm9yKGl0PTM0PT0oaWU9cWUuY2hhckNvZGVBdChwZSsxKSl8fDM5PT1pZT8xOjAsTWU9cWUuc2xpY2UocGUrMStpdCxxZS5s'@;
put 'ZW5ndGgtaXQpLHZlPTA7dmUhPVllLmxlbmd0aCYmNTghPT1ZZS5jaGFyQ29kZUF0KHZlKTsrK3ZlKTtpZih2ZT09PVllLmxlbmd0aClZZS5pbmRleE9mKCJfIik+MCYmKFllPVllLnNsaWNlKDAsWWUuaW5kZXhPZigiXyIpKSksSltZZV09TWUsT3x8KEpbWWUudG9Mb3dlckNhc2UoKV09TWUp'@;
put 'O2Vsc2V7dmFyIGh0PSg1PT09dmUmJiJ4bWxucyI9PT1ZZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK1llLnNsaWNlKHZlKzEpO2lmKEpbaHRdJiYiZXh0Ij09WWUuc2xpY2UodmUtMyx2ZSkpY29udGludWU7SltodF09TWUsT3x8KEpbaHQudG9Mb3dlckNhc2UoKV09TWUpfX1yZXR1cm4gSn1m'@;
put 'dW5jdGlvbiBubihNKXtyZXR1cm4gTS5yZXBsYWNlKGNpLCI8JDEiKX12YXIgdWk9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxBcj1DZSh1aSksbXI9ZnVuY3Rpb24oKXt2YXIgTT0vJig/OnF1b3R8YXBvc3xndHxsdHxhbXB8'@;
put 'I3g/KFtcZGEtZkEtRl0rKSk7L2dpLEY9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gTyhKKXt2YXIgaWU9SisiIixwZT1pZS5pbmRleE9mKCI8IVtDREFUQVsiKTtpZigtMT09cGUpcmV0dXJuIGllLnJlcGxhY2UoTSxmdW5jdGlvbih2ZSxNZSl7cmV0dXJuIHVpW3Zl'@;
put 'XXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChNZSx2ZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8dmV9KS5yZXBsYWNlKEYsZnVuY3Rpb24odmUsTWUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KE1lLDE2KSl9KTt2YXIgeWU9aWUuaW5kZXhPZigiXV0+Iik7'@;
put 'cmV0dXJuIE8oaWUuc2xpY2UoMCxwZSkpK2llLnNsaWNlKHBlKzkseWUpK08oaWUuc2xpY2UoeWUrMykpfX0oKSx5aT0vWyY8PiciXS9nLCRyPS9bXHUwMDAwLVx1MDAwOFx1MDAwYi1cdTAwMWZdL2csSmk9L194WzAtOWEtZkEtRl17NH1fL2c7ZnVuY3Rpb24geXIoTSl7cmV0dXJuKE0rIiIp'@;
put 'LnJlcGxhY2UoSmksIl94MDA1RiQmIikucmVwbGFjZSh5aSxmdW5jdGlvbihPKXtyZXR1cm4gQXJbT119KS5yZXBsYWNlKCRyLGZ1bmN0aW9uKE8pe3JldHVybiJfeCIrKCIwMDAiK08uY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC00KSsiXyJ9KX1mdW5jdGlvbiBJaShNKXty'@;
put 'ZXR1cm4geXIoTSkucmVwbGFjZSgvXG4vZywiX3gwMDBhXyIpfWZ1bmN0aW9uIG5vKE0pe3JldHVybiB5cihNKS5yZXBsYWNlKC8gL2csIl94MDAyMF8iKX12YXIgem49L1tcdTAwMDAtXHUwMDFmXS9nO2Z1bmN0aW9uIFppKE0pe3JldHVybihNKyIiKS5yZXBsYWNlKHlpLGZ1bmN0aW9uKE8p'@;
put 'e3JldHVybiBBcltPXX0pLnJlcGxhY2UoL1xuL2csIjxici8+IikucmVwbGFjZSh6bixmdW5jdGlvbihPKXtyZXR1cm4iJiN4IisoIjAwMCIrTy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyI7In0pfWZ1bmN0aW9uIFdpKE0pe3JldHVybihNKyIiKS5yZXBsYWNlKHlp'@;
put 'LGZ1bmN0aW9uKE8pe3JldHVybiBBcltPXX0pLnJlcGxhY2Uoem4sZnVuY3Rpb24oTyl7cmV0dXJuIiYjeCIrTy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpKyI7In0pfXZhciBvbz1mdW5jdGlvbigpe3ZhciBNPS8mIyhcZCspOy9nO2Z1bmN0aW9uIEYoTyxKKXty'@;
put 'ZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChKLDEwKSl9cmV0dXJuIGZ1bmN0aW9uKEope3JldHVybiBKLnJlcGxhY2UoTSxGKX19KCksaG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oRil7cmV0dXJuIEYucmVwbGFjZSgvKFxyXG58W1xyXG5dKS9nLCImIzEwOyIpfX0o'@;
put 'KTtmdW5jdGlvbiBMcihNKXtzd2l0Y2goTSl7Y2FzZSAxOmNhc2UhMDpjYXNlIjEiOmNhc2UidHJ1ZSI6Y2FzZSJUUlVFIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX12YXIgQmk9ZnVuY3Rpb24oRil7Zm9yKHZhciBPPSIiLEo9MCxpZT0wLHBlPTAseWU9MCx2ZT0wLE1lPTA7SjxGLmxl'@;
put 'bmd0aDspKGllPUYuY2hhckNvZGVBdChKKyspKTwxMjg/Tys9U3RyaW5nLmZyb21DaGFyQ29kZShpZSk6KHBlPUYuY2hhckNvZGVBdChKKyspLGllPjE5MSYmaWU8MjI0Pyh2ZT0oMzEmaWUpPDw2LHZlfD02MyZwZSxPKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHZlKSk6KHllPUYuY2hhckNvZGVB'@;
put 'dChKKyspLGllPDI0MD9PKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgxNSZpZSk8PDEyfCg2MyZwZSk8PDZ8NjMmeWUpOihNZT0oKDcmaWUpPDwxOHwoNjMmcGUpPDwxMnwoNjMmeWUpPDw2fDYzJih2ZT1GLmNoYXJDb2RlQXQoSisrKSkpLTY1NTM2LE8rPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUy'@;
put 'OTYrKE1lPj4+MTAmMTAyMykpLE8rPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmTWUpKSkpKTtyZXR1cm4gT30sTG89ZnVuY3Rpb24oTSl7Zm9yKHZhciBGPVtdLE89MCxKPTAsaWU9MDtPPE0ubGVuZ3RoOylzd2l0Y2goSj1NLmNoYXJDb2RlQXQoTysrKSwhMCl7Y2FzZSBKPDEy'@;
put 'ODpGLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShKKSk7YnJlYWs7Y2FzZSBKPDIwNDg6Ri5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTkyKyhKPj42KSkpLEYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmSikpKTticmVhaztjYXNlIEo+PTU1Mjk2JiZKPDU3MzQ0OkotPTU1'@;
put 'Mjk2LGllPU0uY2hhckNvZGVBdChPKyspLTU2MzIwKyhKPDwxMCksRi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhpZT4+MTgmNykpKSxGLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxNDQrKGllPj4xMiY2MykpKSxGLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKGllPj42'@;
put 'JjYzKSkpLEYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmaWUpKSk7YnJlYWs7ZGVmYXVsdDpGLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgyMjQrKEo+PjEyKSkpLEYucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoSj4+NiY2MykpKSxGLnB1c2goU3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZSgxMjgrKDYzJkopKSl9cmV0dXJuIEYuam9pbigiIil9O2lmKGRlKXt2YXIgS289ZnVuY3Rpb24oRil7dmFyIEosaWUsTWUsTz1CdWZmZXIuYWxsb2MoMipGLmxlbmd0aCkscGU9MSx5ZT0wLHZlPTA7Zm9yKGllPTA7aWU8Ri5sZW5ndGg7aWUrPXBlKXBlPTEsKE1lPUYuY2hhckNv'@;
put 'ZGVBdChpZSkpPDEyOD9KPU1lOk1lPDIyND8oSj02NCooMzEmTWUpKyg2MyZGLmNoYXJDb2RlQXQoaWUrMSkpLHBlPTIpOk1lPDI0MD8oSj00MDk2KigxNSZNZSkrNjQqKDYzJkYuY2hhckNvZGVBdChpZSsxKSkrKDYzJkYuY2hhckNvZGVBdChpZSsyKSkscGU9Myk6KHBlPTQsSj0yNjIxNDQq'@;
put 'KDcmTWUpKzQwOTYqKDYzJkYuY2hhckNvZGVBdChpZSsxKSkrNjQqKDYzJkYuY2hhckNvZGVBdChpZSsyKSkrKDYzJkYuY2hhckNvZGVBdChpZSszKSksdmU9NTUyOTYrKChKLT02NTUzNik+Pj4xMCYxMDIzKSxKPTU2MzIwKygxMDIzJkopKSwwIT09dmUmJihPW3llKytdPTI1NSZ2ZSxPW3ll'@;
put 'KytdPXZlPj4+OCx2ZT0wKSxPW3llKytdPUolMjU2LE9beWUrK109Sj4+Pjg7cmV0dXJuIE8uc2xpY2UoMCx5ZSkudG9TdHJpbmcoInVjczIiKX0sZXM9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7QmkoZXMpPT1LbyhlcykmJihCaT1Lbyk7dmFyIERjPWZ1bmN0'@;
put 'aW9uKEYpe3JldHVybiBsZShGLCJiaW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtCaShlcyk9PURjKGVzKSYmKEJpPURjKSxMbz1mdW5jdGlvbihNKXtyZXR1cm4gbGUoTSwidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIE0sdWM9ZnVuY3Rpb24oKXt2YXIgTT17fTtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oTyxKKXt2YXIgaWU9TysifCIrKEp8fCIiKTtyZXR1cm4gTVtpZV0/TVtpZV06TVtpZV09bmV3IFJlZ0V4cCgiPCg/Olxcdys6KT8iK08rJyg/OiB4bWw6c3BhY2U9InByZXNlcnZlIik/KD86W14+XSopPihbXFxzXFxTXSo/KTwvKD86XFx3KzopPycrTysiPiIsSnx8IiIpfX0oKSxJ'@;
put 'bD0oTT1bWyJuYnNwIiwiICJdLFsibWlkZG90IiwiXHhiNyJdLFsicXVvdCIsJyInXSxbImFwb3MiLCInIl0sWyJndCIsIj4iXSxbImx0IiwiPCJdLFsiYW1wIiwiJiJdXS5tYXAoZnVuY3Rpb24oRil7cmV0dXJuW25ldyBSZWdFeHAoIiYiK0ZbMF0rIjsiLCJpZyIpLEZbMV1dfSksZnVuY3Rp'@;
put 'b24oTyl7Zm9yKHZhciBKPU8ucmVwbGFjZSgvXltcdFxuXHIgXSsvLCIiKS5yZXBsYWNlKC9bXHRcblxyIF0rJC8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSsvZywiICIpLnJlcGxhY2UoLzxccypbYkJdW3JSXVxzKlwvPz4vZywiXG4iKS5yZXBsYWNlKC88W14+XSo+L2csIiIpLGllPTA7aWU8'@;
put 'TS5sZW5ndGg7KytpZSlKPUoucmVwbGFjZShNW2llXVswXSxNW2llXVsxXSk7cmV0dXJuIEp9KSxBYz1mdW5jdGlvbigpe3ZhciBNPXt9O3JldHVybiBmdW5jdGlvbihPKXtyZXR1cm4gdm9pZCAwIT09TVtPXT9NW09dOk1bT109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitPKyI+KFtcXHNcXFNd'@;
put 'Kj8pPC8oPzp2dDopPyIrTysiPiIsImciKX19KCksQjA9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csU3M9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBfdShNLEYpe3ZhciBPPWxuKE0pLEo9TS5tYXRjaChBYyhPLmJhc2VUeXBlKSl8fFtdLGllPVtdO2lmKEoubGVuZ3Ro'@;
put 'IT1PLnNpemUpe2lmKEYuV1RGKXRocm93IG5ldyBFcnJvcigidW5leHBlY3RlZCB2ZWN0b3IgbGVuZ3RoICIrSi5sZW5ndGgrIiAhPSAiK08uc2l6ZSk7cmV0dXJuIGllfXJldHVybiBKLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT1wZS5yZXBsYWNlKEIwLCIiKS5tYXRjaChTcyk7eWUm'@;
put 'JmllLnB1c2goe3Y6QmkoeWVbMl0pLHQ6eWVbMV19KX0pLGllfXZhciBFdT0vKF5cc3xccyR8XG4pLztmdW5jdGlvbiBybyhNLEYpe3JldHVybiI8IitNKyhGLm1hdGNoKEV1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4iK0YrIjwvIitNKyI+In1mdW5jdGlvbiB3bChNKXtyZXR1'@;
put 'cm4gYXQoTSkubWFwKGZ1bmN0aW9uKEYpe3JldHVybiIgIitGKyc9IicrTVtGXSsnIid9KS5qb2luKCIiKX1mdW5jdGlvbiBkcihNLEYsTyl7cmV0dXJuIjwiK00rKG51bGwhPU8/d2woTyk6IiIpKyhudWxsIT1GPyhGLm1hdGNoKEV1KT8nIHhtbDpzcGFjZT0icHJlc2VydmUiJzoiIikrIj4i'@;
put 'K0YrIjwvIitNOiIvIikrIj4ifWZ1bmN0aW9uIFV1KE0sRil7dHJ5e3JldHVybiBNLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCovLCIiKX1jYXRjaChPKXtpZihGKXRocm93IE99cmV0dXJuIiJ9dmFyIHgxLGsyLFRpPXtkYzoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8i'@;
put 'LGRjdGVybXM6Imh0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8iLGRjbWl0eXBlOiJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvIixteDoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvbWFjL2V4Y2VsLzIwMDgvbWFpbiIscjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZv'@;
put 'cm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIsc2pzOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3NoZWV0anMvY29yZS1wcm9wZXJ0aWVzIix2dDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj'@;
put 'ZURvY3VtZW50LzIwMDYvZG9jUHJvcHNWVHlwZXMiLHhzaToiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiLHhzZDoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLG1haW46WyJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvc3ByZWFk'@;
put 'c2hlZXRtbC8yMDA2L21haW4iLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9zcHJlYWRzaGVldG1sL21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8yMDA2L21haW4iLCJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9leGNlbC8y'@;
put 'MDA2LzIiXX0sJGE9e286InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOm9mZmljZSIseDoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6ZXhjZWwiLHNzOiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpzcHJlYWRzaGVldCIsZHQ6InV1aWQ6QzJGNDEw'@;
put 'MTAtNjVCMy0xMWQxLUEyOUYtMDBBQTAwQzE0ODgyIixtdjoiaHR0cDovL21hY1ZtbFNjaGVtYVVyaSIsdjoidXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwiLGh0bWw6Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAifSxYYz1mdW5jdGlvbihNKXtmb3IodmFyIEY9W10sSj0w'@;
put 'O0o8TVswXS5sZW5ndGg7KytKKWlmKE1bMF1bSl0pZm9yKHZhciBpZT0wLHBlPU1bMF1bSl0ubGVuZ3RoO2llPHBlO2llKz0xMDI0MClGLnB1c2guYXBwbHkoRixNWzBdW0pdLnNsaWNlKGllLGllKzEwMjQwKSk7cmV0dXJuIEZ9LE1sPVhjLFZhPWZ1bmN0aW9uKE0sRixPKXtmb3IodmFyIEo9'@;
put 'W10saWU9RjtpZTxPO2llKz0yKUoucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKFJjKE0saWUpKSk7cmV0dXJuIEouam9pbigiIikucmVwbGFjZShfLCIiKX0sVWY9VmEsdmg9ZnVuY3Rpb24oTSxGLE8pe2Zvcih2YXIgSj1bXSxpZT1GO2llPEYrTzsrK2llKUoucHVzaCgoIjAiK01baWVdLnRv'@;
put 'U3RyaW5nKDE2KSkuc2xpY2UoLTIpKTtyZXR1cm4gSi5qb2luKCIiKX0sWmY9dmgsVHU9ZnVuY3Rpb24oTSxGLE8pe2Zvcih2YXIgSj1bXSxpZT1GO2llPE87aWUrKylKLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShJYyhNLGllKSkpO3JldHVybiBKLmpvaW4oIiIpfSx4Mj1UdSxiZD1mdW5j'@;
put 'dGlvbihNLEYpe3ZhciBPPWFsKE0sRik7cmV0dXJuIE8+MD9UdShNLEYrNCxGKzQrTy0xKToiIn0sV2Y9YmQsejA9ZnVuY3Rpb24oTSxGKXt2YXIgTz1hbChNLEYpO3JldHVybiBPPjA/VHUoTSxGKzQsRis0K08tMSk6IiJ9LFlsPXowLFNvPWZ1bmN0aW9uKE0sRil7dmFyIE89MiphbChNLEYp'@;
put 'O3JldHVybiBPPjA/VHUoTSxGKzQsRis0K08tMSk6IiJ9LExjPVNvO3gxPWsyPWZ1bmN0aW9uKEYsTyl7dmFyIEo9YWwoRixPKTtyZXR1cm4gSj4wP1ZhKEYsTys0LE8rNCtKKToiIn07dmFyIGxyLGRjLHdkPWZ1bmN0aW9uKE0sRil7dmFyIE89YWwoTSxGKTtyZXR1cm4gTz4wP1R1KE0sRis0'@;
put 'LEYrNCtPKToiIn0sa3A9d2Q7bHI9ZGM9ZnVuY3Rpb24oTSxGKXtyZXR1cm4gZnVuY3Rpb24gcWEoTSxGKXtmb3IodmFyIE89MS0yKihNW0YrN10+Pj43KSxKPSgoMTI3Jk1bRis3XSk8PDQpKyhNW0YrNl0+Pj40JjE1KSxpZT0xNSZNW0YrNl0scGU9NTtwZT49MDstLXBlKWllPTI1NippZStN'@;
put 'W0YrcGVdO3JldHVybiAyMDQ3PT1KPzA9PWllP08qKDEvMCk6TmFOOigwPT1KP0o9LTEwMjI6KEotPTEwMjMsaWUrPU1hdGgucG93KDIsNTIpKSxPKk1hdGgucG93KDIsSi01MikqaWUpfShNLEYpfTt2YXIgX2k9ZnVuY3Rpb24oRil7cmV0dXJuIEFycmF5LmlzQXJyYXkoRil9O2RlJiYoVmE9'@;
put 'ZnVuY3Rpb24oTSxGLE8pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTSk/TS50b1N0cmluZygidXRmMTZsZSIsRixPKS5yZXBsYWNlKF8sIiIpOlVmKE0sRixPKX0sdmg9ZnVuY3Rpb24oTSxGLE8pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTSk/TS50b1N0cmluZygiaGV4IixGLEYrTyk6WmYo'@;
put 'TSxGLE8pfSxiZD1mdW5jdGlvbihGLE8pe2lmKCFCdWZmZXIuaXNCdWZmZXIoRikpcmV0dXJuIFdmKEYsTyk7dmFyIEo9Ri5yZWFkVUludDMyTEUoTyk7cmV0dXJuIEo+MD9GLnRvU3RyaW5nKCJ1dGY4IixPKzQsTys0K0otMSk6IiJ9LHowPWZ1bmN0aW9uKEYsTyl7aWYoIUJ1ZmZlci5pc0J1'@;
put 'ZmZlcihGKSlyZXR1cm4gWWwoRixPKTt2YXIgSj1GLnJlYWRVSW50MzJMRShPKTtyZXR1cm4gSj4wP0YudG9TdHJpbmcoInV0ZjgiLE8rNCxPKzQrSi0xKToiIn0sU289ZnVuY3Rpb24oRixPKXtpZighQnVmZmVyLmlzQnVmZmVyKEYpKXJldHVybiBMYyhGLE8pO3ZhciBKPTIqRi5yZWFkVUlu'@;
put 'dDMyTEUoTyk7cmV0dXJuIEYudG9TdHJpbmcoInV0ZjE2bGUiLE8rNCxPKzQrSi0xKX0seDE9ZnVuY3Rpb24oRixPKXtpZighQnVmZmVyLmlzQnVmZmVyKEYpKXJldHVybiBrMihGLE8pO3ZhciBKPUYucmVhZFVJbnQzMkxFKE8pO3JldHVybiBGLnRvU3RyaW5nKCJ1dGYxNmxlIixPKzQsTys0'@;
put 'K0opfSx3ZD1mdW5jdGlvbihGLE8pe2lmKCFCdWZmZXIuaXNCdWZmZXIoRikpcmV0dXJuIGtwKEYsTyk7dmFyIEo9Ri5yZWFkVUludDMyTEUoTyk7cmV0dXJuIEYudG9TdHJpbmcoInV0ZjgiLE8rNCxPKzQrSil9LFR1PWZ1bmN0aW9uKEYsTyxKKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKEYp'@;
put 'P0YudG9TdHJpbmcoInV0ZjgiLE8sSik6eDIoRixPLEopfSxYYz1mdW5jdGlvbihNKXtyZXR1cm4gTVswXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKE1bMF1bMF0pP0J1ZmZlci5jb25jYXQoTVswXSk6TWwoTSl9LHg9ZnVuY3Rpb24oTSl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihNWzBd'@;
put 'KT9CdWZmZXIuY29uY2F0KE0pOltdLmNvbmNhdC5hcHBseShbXSxNKX0sbHI9ZnVuY3Rpb24oRixPKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKEYpP0YucmVhZERvdWJsZUxFKE8pOmRjKEYsTyl9LF9pPWZ1bmN0aW9uKEYpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoRil8fEFycmF5LmlzQXJy'@;
put 'YXkoRil9KSx0eXBlb2YgY3B0YWJsZTwidSImJihWYT1mdW5jdGlvbihNLEYsTyl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsTS5zbGljZShGLE8pKS5yZXBsYWNlKF8sIiIpfSxUdT1mdW5jdGlvbihNLEYsTyl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLE0u'@;
put 'c2xpY2UoRixPKSl9LGJkPWZ1bmN0aW9uKE0sRil7dmFyIE89YWwoTSxGKTtyZXR1cm4gTz4wP2NwdGFibGUudXRpbHMuZGVjb2RlKEQsTS5zbGljZShGKzQsRis0K08tMSkpOiIifSx6MD1mdW5jdGlvbihNLEYpe3ZhciBPPWFsKE0sRik7cmV0dXJuIE8+MD9jcHRhYmxlLnV0aWxzLmRlY29k'@;
put 'ZShBLE0uc2xpY2UoRis0LEYrNCtPLTEpKToiIn0sU289ZnVuY3Rpb24oTSxGKXt2YXIgTz0yKmFsKE0sRik7cmV0dXJuIE8+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLE0uc2xpY2UoRis0LEYrNCtPLTEpKToiIn0seDE9ZnVuY3Rpb24oTSxGKXt2YXIgTz1hbChNLEYpO3JldHVybiBP'@;
put 'PjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxNLnNsaWNlKEYrNCxGKzQrTykpOiIifSx3ZD1mdW5jdGlvbihNLEYpe3ZhciBPPWFsKE0sRik7cmV0dXJuIE8+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxNLnNsaWNlKEYrNCxGKzQrTykpOiIifSk7dmFyIEljPWZ1bmN0aW9uKE0s'@;
put 'Ril7cmV0dXJuIE1bRl19LFJjPWZ1bmN0aW9uKE0sRil7cmV0dXJuIDI1NipNW0YrMV0rTVtGXX0seWg9ZnVuY3Rpb24oTSxGKXt2YXIgTz0yNTYqTVtGKzFdK01bRl07cmV0dXJuIE88MzI3Njg/TzotMSooNjU1MzUtTysxKX0sYWw9ZnVuY3Rpb24oTSxGKXtyZXR1cm4gTVtGKzNdKigxPDwy'@;
put 'NCkrKE1bRisyXTw8MTYpKyhNW0YrMV08PDgpK01bRl19LEtpPWZ1bmN0aW9uKE0sRil7cmV0dXJuIE1bRiszXTw8MjR8TVtGKzJdPDwxNnxNW0YrMV08PDh8TVtGXX0sJG49ZnVuY3Rpb24oTSxGKXtyZXR1cm4gTVtGXTw8MjR8TVtGKzFdPDwxNnxNW0YrMl08PDh8TVtGKzNdfTtmdW5jdGlv'@;
put 'biBlaShNLEYpe3ZhciBKLGllLHllLHZlLE1lLGplLE89IiIscGU9W107c3dpdGNoKEYpe2Nhc2UiZGJjcyI6aWYoamU9dGhpcy5sLGRlJiZCdWZmZXIuaXNCdWZmZXIodGhpcykpTz10aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrMipNKS50b1N0cmluZygidXRmMTZsZSIpO2Vsc2UgZm9yKE1l'@;
put 'PTA7TWU8TTsrK01lKU8rPVN0cmluZy5mcm9tQ2hhckNvZGUoUmModGhpcyxqZSkpLGplKz0yO00qPTI7YnJlYWs7Y2FzZSJ1dGY4IjpPPVR1KHRoaXMsdGhpcy5sLHRoaXMubCtNKTticmVhaztjYXNlInV0ZjE2bGUiOk89VmEodGhpcyx0aGlzLmwsdGhpcy5sKyhNKj0yKSk7YnJlYWs7Y2Fz'@;
put 'ZSJ3c3RyIjppZighKHR5cGVvZiBjcHRhYmxlPCJ1IikpcmV0dXJuIGVpLmNhbGwodGhpcyxNLCJkYmNzIik7Tz1jcHRhYmxlLnV0aWxzLmRlY29kZShBLHRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKk0pKSxNKj0yO2JyZWFrO2Nhc2UibHBzdHItYW5zaSI6Tz1iZCh0aGlzLHRoaXMubCks'@;
put 'TT00K2FsKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwc3RyLWNwIjpPPXowKHRoaXMsdGhpcy5sKSxNPTQrYWwodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHB3c3RyIjpPPVNvKHRoaXMsdGhpcy5sKSxNPTQrMiphbCh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHA0IjpNPTQrYWwodGhp'@;
put 'cyx0aGlzLmwpLE89eDEodGhpcyx0aGlzLmwpLDImTSYmKE0rPTIpO2JyZWFrO2Nhc2UiOGxwcDQiOk09NCthbCh0aGlzLHRoaXMubCksTz13ZCh0aGlzLHRoaXMubCksMyZNJiYoTSs9NC0oMyZNKSk7YnJlYWs7Y2FzZSJjc3RyIjpmb3IoTT0wLE89IiI7MCE9PSh5ZT1JYyh0aGlzLHRoaXMu'@;
put 'bCtNKyspKTspcGUucHVzaChxKHllKSk7Tz1wZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpmb3IoTT0wLE89IiI7MCE9PSh5ZT1SYyh0aGlzLHRoaXMubCtNKSk7KXBlLnB1c2gocSh5ZSkpLE0rPTI7TSs9MixPPXBlLmpvaW4oIiIpO2JyZWFrO2Nhc2UiZGJjcy1jb250Ijpmb3IoTz0i'@;
put 'IixqZT10aGlzLmwsTWU9MDtNZTxNOysrTWUpe2lmKHRoaXMubGVucyYmLTEhPT10aGlzLmxlbnMuaW5kZXhPZihqZSkpcmV0dXJuIHllPUljKHRoaXMsamUpLHRoaXMubD1qZSsxLHZlPWVpLmNhbGwodGhpcyxNLU1lLHllPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKSxwZS5qb2luKCIiKSt2'@;
put 'ZTtwZS5wdXNoKHEoUmModGhpcyxqZSkpKSxqZSs9Mn1PPXBlLmpvaW4oIiIpLE0qPTI7YnJlYWs7Y2FzZSJjcHN0ciI6aWYodHlwZW9mIGNwdGFibGU8InUiKXtPPWNwdGFibGUudXRpbHMuZGVjb2RlKEEsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sK00pKTticmVha31jYXNlInNiY3MtY29u'@;
put 'dCI6Zm9yKE89IiIsamU9dGhpcy5sLE1lPTA7TWUhPU07KytNZSl7aWYodGhpcy5sZW5zJiYtMSE9PXRoaXMubGVucy5pbmRleE9mKGplKSlyZXR1cm4geWU9SWModGhpcyxqZSksdGhpcy5sPWplKzEsdmU9ZWkuY2FsbCh0aGlzLE0tTWUseWU/ImRiY3MtY29udCI6InNiY3MtY29udCIpLHBl'@;
put 'LmpvaW4oIiIpK3ZlO3BlLnB1c2gocShJYyh0aGlzLGplKSkpLGplKz0xfU89cGUuam9pbigiIik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goTSl7Y2FzZSAxOnJldHVybiBKPUljKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxKO2Nhc2UgMjpyZXR1cm4gSj0oImkiPT09Rj95aDpSYykodGhpcyx0aGlz'@;
put 'LmwpLHRoaXMubCs9MixKO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09RiYmMTI4JnRoaXNbdGhpcy5sKzNdPyhpZT1hbCh0aGlzLHRoaXMubCksdGhpcy5sKz00LGllKTooSj0oTT4wP0tpOiRuKSh0aGlzLHRoaXMubCksdGhpcy5sKz00LEopO2Nhc2UgODpjYXNlLTg6aWYoImYiPT09Rily'@;
put 'ZXR1cm4gaWU9OD09TT9scih0aGlzLHRoaXMubCk6bHIoW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhpcy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwr'@;
put 'PTgsaWU7TT04O2Nhc2UgMTY6Tz12aCh0aGlzLHRoaXMubCxNKX19cmV0dXJuIHRoaXMubCs9TSxPfXZhciBCcj1mdW5jdGlvbihNLEYsTyl7TVtPXT0yNTUmRixNW08rMV09Rj4+PjgmMjU1LE1bTysyXT1GPj4+MTYmMjU1LE1bTyszXT1GPj4+MjQmMjU1fSxFbz1mdW5jdGlvbihNLEYsTyl7'@;
put 'TVtPXT0yNTUmRixNW08rMV09Rj4+OCYyNTUsTVtPKzJdPUY+PjE2JjI1NSxNW08rM109Rj4+MjQmMjU1fSxZcj1mdW5jdGlvbihNLEYsTyl7TVtPXT0yNTUmRixNW08rMV09Rj4+PjgmMjU1fTtmdW5jdGlvbiBsbChNLEYsTyl7dmFyIEo9MCxpZT0wO2lmKCJkYmNzIj09PU8pe2ZvcihpZT0w'@;
put 'O2llIT1GLmxlbmd0aDsrK2llKVlyKHRoaXMsRi5jaGFyQ29kZUF0KGllKSx0aGlzLmwrMippZSk7Sj0yKkYubGVuZ3RofWVsc2UgaWYoInNiY3MiPT09Tyl7aWYodHlwZW9mIGNwdGFibGU8InUiJiY4NzQ9PUQpZm9yKGllPTA7aWUhPUYubGVuZ3RoOysraWUpe3ZhciBwZT1jcHRhYmxlLnV0'@;
put 'aWxzLmVuY29kZShELEYuY2hhckF0KGllKSk7dGhpc1t0aGlzLmwraWVdPXBlWzBdfWVsc2UgZm9yKEY9Ri5yZXBsYWNlKC9bXlx4MDAtXHg3Rl0vZywiXyIpLGllPTA7aWUhPUYubGVuZ3RoOysraWUpdGhpc1t0aGlzLmwraWVdPTI1NSZGLmNoYXJDb2RlQXQoaWUpO0o9Ri5sZW5ndGh9ZWxz'@;
put 'ZXtpZigiaGV4Ij09PU8pe2Zvcig7aWU8TTsrK2llKXRoaXNbdGhpcy5sKytdPXBhcnNlSW50KEYuc2xpY2UoMippZSwyKmllKzIpLDE2KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1PKXt2YXIgeWU9TWF0aC5taW4odGhpcy5sK00sdGhpcy5sZW5ndGgpO2ZvcihpZT0wO2llPE1h'@;
put 'dGgubWluKEYubGVuZ3RoLE0pOysraWUpe3ZhciB2ZT1GLmNoYXJDb2RlQXQoaWUpO3RoaXNbdGhpcy5sKytdPTI1NSZ2ZSx0aGlzW3RoaXMubCsrXT12ZT4+OH1mb3IoO3RoaXMubDx5ZTspdGhpc1t0aGlzLmwrK109MDtyZXR1cm4gdGhpc31zd2l0Y2goTSl7Y2FzZSAxOko9MSx0aGlzW3Ro'@;
put 'aXMubF09MjU1JkY7YnJlYWs7Y2FzZSAyOko9Mix0aGlzW3RoaXMubF09MjU1JkYsdGhpc1t0aGlzLmwrMV09MjU1JihGPj4+PTgpO2JyZWFrO2Nhc2UgMzpKPTMsdGhpc1t0aGlzLmxdPTI1NSZGLHRoaXNbdGhpcy5sKzFdPTI1NSYoRj4+Pj04KSx0aGlzW3RoaXMubCsyXT0yNTUmKEY+Pj49'@;
put 'OCk7YnJlYWs7Y2FzZSA0Oko9NCxCcih0aGlzLEYsdGhpcy5sKTticmVhaztjYXNlIDg6aWYoSj04LCJmIj09PU8peyFmdW5jdGlvbiB4cChNLEYsTyl7dmFyIEo9KEY8MHx8MS9GPT0tMS8wPzE6MCk8PDcsaWU9MCxwZT0wLHllPUo/LUY6Rjtpc0Zpbml0ZSh5ZSk/MD09eWU/aWU9cGU9MDoo'@;
put 'aWU9TWF0aC5mbG9vcihNYXRoLmxvZyh5ZSkvTWF0aC5MTjIpLHBlPXllKk1hdGgucG93KDIsNTItaWUpLGllPD0tMTAyMyYmKCFpc0Zpbml0ZShwZSl8fHBlPE1hdGgucG93KDIsNTIpKT9pZT0tMTAyMjoocGUtPU1hdGgucG93KDIsNTIpLGllKz0xMDIzKSk6KGllPTIwNDcscGU9aXNOYU4o'@;
put 'Rik/MjY5ODU6MCk7Zm9yKHZhciB2ZT0wO3ZlPD01OysrdmUscGUvPTI1NilNW08rdmVdPTI1NSZwZTtNW08rNl09KDE1JmllKTw8NHwxNSZwZSxNW08rN109aWU+PjR8Sn0odGhpcyxGLHRoaXMubCk7YnJlYWt9Y2FzZSAxNjpicmVhaztjYXNlLTQ6Sj00LEVvKHRoaXMsRix0aGlzLmwpfX1y'@;
put 'ZXR1cm4gdGhpcy5sKz1KLHRoaXN9ZnVuY3Rpb24gTWEoTSxGKXt2YXIgTz12aCh0aGlzLHRoaXMubCxNLmxlbmd0aD4+MSk7aWYoTyE9PU0pdGhyb3cgbmV3IEVycm9yKEYrIkV4cGVjdGVkICIrTSsiIHNhdyAiK08pO3RoaXMubCs9TS5sZW5ndGg+PjF9ZnVuY3Rpb24gWnMoTSxGKXtNLmw9'@;
put 'RixNLnJlYWRfc2hpZnQ9ZWksTS5jaGs9TWEsTS53cml0ZV9zaGlmdD1sbH1mdW5jdGlvbiBGcyhNLEYpe00ubCs9Rn1mdW5jdGlvbiBncihNKXt2YXIgRj1HKE0pO3JldHVybiBacyhGLDApLEZ9ZnVuY3Rpb24gdGEoTSxGLE8pe2lmKE0pe3ZhciBKLGllLHBlO1pzKE0sTS5sfHwwKTtmb3Io'@;
put 'dmFyIHllPU0ubGVuZ3RoLHZlPTAsTWU9MDtNLmw8eWU7KXsxMjgmKHZlPU0ucmVhZF9zaGlmdCgxKSkmJih2ZT0oMTI3JnZlKSsoKDEyNyZNLnJlYWRfc2hpZnQoMSkpPDw3KSk7dmFyIGplPXY0W3ZlXXx8djRbNjU1MzVdO2ZvcihwZT0xMjcmKEo9TS5yZWFkX3NoaWZ0KDEpKSxpZT0xO2ll'@;
put 'PDQmJjEyOCZKOysraWUpcGUrPSgxMjcmKEo9TS5yZWFkX3NoaWZ0KDEpKSk8PDcqaWU7TWU9TS5sK3BlO3ZhciBZZT0oamUuZnx8RnMpKE0scGUsTyk7aWYoTS5sPU1lLEYoWWUsamUubix2ZSkpcmV0dXJufX19ZnVuY3Rpb24gUmwoKXt2YXIgTT1bXSxGPWRlPzI1NjoyMDQ4LE89ZnVuY3Rp'@;
put 'b24oamUpe3ZhciBZZT1ncihqZSk7cmV0dXJuIFpzKFllLDApLFllfSxKPU8oRiksaWU9ZnVuY3Rpb24oKXtKJiYoSi5sZW5ndGg+Si5sJiYoKEo9Si5zbGljZSgwLEoubCkpLmw9Si5sZW5ndGgpLEoubGVuZ3RoPjAmJk0ucHVzaChKKSxKPW51bGwpfSxwZT1mdW5jdGlvbihqZSl7cmV0dXJu'@;
put 'IEomJmplPEoubGVuZ3RoLUoubD9KOihpZSgpLEo9TyhNYXRoLm1heChqZSsxLEYpKSl9O3JldHVybntuZXh0OnBlLHB1c2g6ZnVuY3Rpb24oamUpe2llKCksbnVsbD09KEo9amUpLmwmJihKLmw9Si5sZW5ndGgpLHBlKEYpfSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gaWUoKSxYYyhbTV0pfSxf'@;
put 'YnVmczpNfX1mdW5jdGlvbiBnaShNLEYsTyxKKXt2YXIgcGUsaWU9K0YzW0ZdO2lmKCFpc05hTihpZSkpe0p8fChKPXY0W2llXS5wfHwoT3x8W10pLmxlbmd0aHx8MCkscGU9MSsoaWU+PTEyOD8xOjApKzEsSj49MTI4JiYrK3BlLEo+PTE2Mzg0JiYrK3BlLEo+PTIwOTcxNTImJisrcGU7dmFy'@;
put 'IHllPU0ubmV4dChwZSk7aWU8PTEyNz95ZS53cml0ZV9zaGlmdCgxLGllKTooeWUud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZpZSkpLHllLndyaXRlX3NoaWZ0KDEsaWU+PjcpKTtmb3IodmFyIHZlPTA7NCE9dmU7Kyt2ZSl7aWYoIShKPj0xMjgpKXt5ZS53cml0ZV9zaGlmdCgxLEopO2JyZWFr'@;
put 'fXllLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmSikpLEo+Pj03fUo+MCYmX2koTykmJk0ucHVzaChPKX19ZnVuY3Rpb24gY2woTSxGLE8pe3ZhciBKPVh0KE0pO2lmKEYucz8oSi5jUmVsJiYoSi5jKz1GLnMuYyksSi5yUmVsJiYoSi5yKz1GLnMucikpOihKLmNSZWwmJihKLmMrPUYuYyksSi5y'@;
put 'UmVsJiYoSi5yKz1GLnIpKSwhT3x8Ty5iaWZmPDEyKXtmb3IoO0ouYz49MjU2OylKLmMtPTI1Njtmb3IoO0oucj49NjU1MzY7KUouci09NjU1MzZ9cmV0dXJuIEp9ZnVuY3Rpb24gRXAoTSxGLE8pe3ZhciBKPVh0KE0pO3JldHVybiBKLnM9Y2woSi5zLEYucyxPKSxKLmU9Y2woSi5lLEYucyxP'@;
put 'KSxKfWZ1bmN0aW9uIER1KE0sRil7aWYoTS5jUmVsJiZNLmM8MClmb3IoTT1YdChNKTtNLmM8MDspTS5jKz1GPjg/MTYzODQ6MjU2O2lmKE0uclJlbCYmTS5yPDApZm9yKE09WHQoTSk7TS5yPDA7KU0ucis9Rj44PzEwNDg1NzY6Rj41PzY1NTM2OjE2Mzg0O2lmKE0uY1JlbCYmTS5jPj0oRj44'@;
put 'PzE2Mzg0OjI1NikpZm9yKE09WHQoTSk7TS5jPj0oRj44PzE2Mzg0OjI1Nik7KU0uYy09Rj44PzE2Mzg0OjI1NjtpZihNLnJSZWwmJk0ucj49MTA0ODU3Nilmb3IoTT1YdChNKTtNLnI+PTEwNDg1NzY7KU0uci09MTA0ODU3Njt2YXIgTz1EaShNKTtyZXR1cm4hTS5jUmVsJiZudWxsIT1NLmNS'@;
put 'ZWwmJihPPWZ1bmN0aW9uIE02KE0pe3JldHVybiBNLnJlcGxhY2UoL14oW0EtWl0pLywiJCQkMSIpfShPKSksIU0uclJlbCYmbnVsbCE9TS5yUmVsJiYoTz1mdW5jdGlvbiBiaChNKXtyZXR1cm4gTS5yZXBsYWNlKC8oW0EtWl18XikoXGQrKSQvLCIkMSQkJDIiKX0oTykpLE99ZnVuY3Rpb24g'@;
put 'azEoTSxGKXtyZXR1cm4gMCE9TS5zLnJ8fE0ucy5yUmVsfHxNLmUuciE9KEYuYmlmZj49MTI/MTA0ODU3NTpGLmJpZmY+PTg/NjU1MzY6MTYzODQpfHxNLmUuclJlbD8wIT1NLnMuY3x8TS5zLmNSZWx8fE0uZS5jIT0oRi5iaWZmPj0xMj8xNjM4MzoyNTUpfHxNLmUuY1JlbD9EdShNLnMsRi5i'@;
put 'aWZmKSsiOiIrRHUoTS5lLEYuYmlmZik6KE0ucy5yUmVsPyIiOiIkIikrcnMoTS5zLnIpKyI6IisoTS5lLnJSZWw/IiI6IiQiKStycyhNLmUucik6KE0ucy5jUmVsPyIiOiIkIikrZm8oTS5zLmMpKyI6IisoTS5lLmNSZWw/IiI6IiQiKStmbyhNLmUuYyl9dmFyIE1kPXt9O2Z1bmN0aW9uIHZ1'@;
put 'KE0pe3JldHVybiBwYXJzZUludChmdW5jdGlvbiBUcChNKXtyZXR1cm4gTS5yZXBsYWNlKC9cJChcZCspJC8sIiQxIil9KE0pLDEwKS0xfWZ1bmN0aW9uIHJzKE0pe3JldHVybiIiKyhNKzEpfWZ1bmN0aW9uIFlvKE0pe2Zvcih2YXIgRj1mdW5jdGlvbiBUbShNKXtyZXR1cm4gTS5yZXBsYWNl'@;
put 'KC9eXCQoW0EtWl0pLywiJDEiKX0oTSksTz0wLEo9MDtKIT09Ri5sZW5ndGg7KytKKU89MjYqTytGLmNoYXJDb2RlQXQoSiktNjQ7cmV0dXJuIE8tMX1mdW5jdGlvbiBmbyhNKXtpZihNPDApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNvbHVtbiAiK00pO3ZhciBGPSIiO2ZvcigrK007TTtN'@;
put 'PU1hdGguZmxvb3IoKE0tMSkvMjYpKUY9U3RyaW5nLmZyb21DaGFyQ29kZSgoTS0xKSUyNis2NSkrRjtyZXR1cm4gRn1mdW5jdGlvbiBocyhNKXtmb3IodmFyIEY9MCxPPTAsSj0wO0o8TS5sZW5ndGg7KytKKXt2YXIgaWU9TS5jaGFyQ29kZUF0KEopO2llPj00OCYmaWU8PTU3P0Y9MTAqRiso'@;
put 'aWUtNDgpOmllPj02NSYmaWU8PTkwJiYoTz0yNipPKyhpZS02NCkpfXJldHVybntjOk8tMSxyOkYtMX19ZnVuY3Rpb24gRGkoTSl7Zm9yKHZhciBGPU0uYysxLE89IiI7RjtGPShGLTEpLzI2fDApTz1TdHJpbmcuZnJvbUNoYXJDb2RlKChGLTEpJTI2KzY1KStPO3JldHVybiBPKyhNLnIrMSl9'@;
put 'ZnVuY3Rpb24gSHMoTSl7dmFyIEY9TS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PUY/e3M6aHMoTSksZTpocyhNKX06e3M6aHMoTS5zbGljZSgwLEYpKSxlOmhzKE0uc2xpY2UoRisxKSl9fWZ1bmN0aW9uIEFpKE0sRil7cmV0dXJuIHR5cGVvZiBGPiJ1Inx8Im51bWJlciI9PXR5cGVvZiBGP0Fp'@;
put 'KE0ucyxNLmUpOigic3RyaW5nIiE9dHlwZW9mIE0mJihNPURpKE0pKSwic3RyaW5nIiE9dHlwZW9mIEYmJihGPURpKEYpKSxNPT1GP006TSsiOiIrRil9ZnVuY3Rpb24gYm8oTSl7dmFyIEY9SlNPTi5wYXJzZSgneyJzIjp7ImMiOjAsInIiOjB9LCJlIjp7ImMiOjAsInIiOjB9fScpLE89MCxK'@;
put 'PTAsaWU9MCxwZT1NLmxlbmd0aDtmb3IoTz0wO0o8cGUmJiEoKGllPU0uY2hhckNvZGVBdChKKS02NCk8MXx8aWU+MjYpOysrSilPPTI2Kk8raWU7Zm9yKEYucy5jPS0tTyxPPTA7SjxwZSYmISgoaWU9TS5jaGFyQ29kZUF0KEopLTQ4KTwwfHxpZT45KTsrK0opTz0xMCpPK2llO2lmKEYucy5y'@;
put 'PS0tTyxKPT09cGV8fDU4PT09TS5jaGFyQ29kZUF0KCsrSikpcmV0dXJuIEYuZS5jPUYucy5jLEYuZS5yPUYucy5yLEY7Zm9yKE89MDtKIT1wZSYmISgoaWU9TS5jaGFyQ29kZUF0KEopLTY0KTwxfHxpZT4yNik7KytKKU89MjYqTytpZTtmb3IoRi5lLmM9LS1PLE89MDtKIT1wZSYmISgoaWU9'@;
put 'TS5jaGFyQ29kZUF0KEopLTQ4KTwwfHxpZT45KTsrK0opTz0xMCpPK2llO3JldHVybiBGLmUucj0tLU8sRn1mdW5jdGlvbiBFMihNLEYpe3ZhciBPPSJkIj09TS50JiZGIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT1NLnopdHJ5e3JldHVybiBNLnc9Qy5mb3JtYXQoTS56LE8/R2UoRik6Ril9'@;
put 'Y2F0Y2h7fXRyeXtyZXR1cm4gTS53PUMuZm9ybWF0KChNLlhGfHx7fSkubnVtRm10SWR8fChPPzE0OjApLE8/R2UoRik6Ril9Y2F0Y2h7cmV0dXJuIiIrRn19ZnVuY3Rpb24gV3MoTSxGLE8pe3JldHVybiBudWxsPT1NfHxudWxsPT1NLnR8fCJ6Ij09TS50PyIiOnZvaWQgMCE9PU0udz9NLnc6'@;
put 'KCJkIj09TS50JiYhTS56JiZPJiZPLmRhdGVORiYmKE0uej1PLmRhdGVORiksImUiPT1NLnQ/dWxbTS52XXx8TS52OkUyKE0sbnVsbD09Rj9NLnY6RikpfWZ1bmN0aW9uIHAwKE0sRil7dmFyIE89RiYmRi5zaGVldD9GLnNoZWV0OiJTaGVldDEiLEo9e307cmV0dXJuIEpbT109TSx7U2hlZXRO'@;
put 'YW1lczpbT10sU2hlZXRzOkp9fWZ1bmN0aW9uIEUxKE0sRixPKXt2YXIgSj1PfHx7fSxpZT1NP0FycmF5LmlzQXJyYXkoTSk6Si5kZW5zZTtudWxsIT10ZSYmbnVsbD09aWUmJihpZT10ZSk7dmFyIHBlPU18fChpZT9bXTp7fSkseWU9MCx2ZT0wO2lmKHBlJiZudWxsIT1KLm9yaWdpbil7aWYo'@;
put 'Im51bWJlciI9PXR5cGVvZiBKLm9yaWdpbil5ZT1KLm9yaWdpbjtlbHNle3ZhciBNZT0ic3RyaW5nIj09dHlwZW9mIEoub3JpZ2luP2hzKEoub3JpZ2luKTpKLm9yaWdpbjt5ZT1NZS5yLHZlPU1lLmN9cGVbIiFyZWYiXXx8KHBlWyIhcmVmIl09IkExOkExIil9dmFyIGplPXtzOntjOjFlNyxy'@;
put 'OjFlN30sZTp7YzowLHI6MH19O2lmKHBlWyIhcmVmIl0pe3ZhciBZZT1ibyhwZVsiIXJlZiJdKTtqZS5zLmM9WWUucy5jLGplLnMucj1ZZS5zLnIsamUuZS5jPU1hdGgubWF4KGplLmUuYyxZZS5lLmMpLGplLmUucj1NYXRoLm1heChqZS5lLnIsWWUuZS5yKSwtMT09eWUmJihqZS5lLnI9eWU9'@;
put 'WWUuZS5yKzEpfWZvcih2YXIgcWU9MDtxZSE9Ri5sZW5ndGg7KytxZSlpZihGW3FlXSl7aWYoIUFycmF5LmlzQXJyYXkoRltxZV0pKXRocm93IG5ldyBFcnJvcigiYW9hX3RvX3NoZWV0IGV4cGVjdHMgYW4gYXJyYXkgb2YgYXJyYXlzIik7Zm9yKHZhciBpdD0wO2l0IT1GW3FlXS5sZW5ndGg7'@;
put 'KytpdClpZighKHR5cGVvZiBGW3FlXVtpdF0+InUiKSl7dmFyIGh0PXt2OkZbcWVdW2l0XX0sa3Q9eWUrcWUsdXQ9dmUraXQ7aWYoamUucy5yPmt0JiYoamUucy5yPWt0KSxqZS5zLmM+dXQmJihqZS5zLmM9dXQpLGplLmUucjxrdCYmKGplLmUucj1rdCksamUuZS5jPHV0JiYoamUuZS5jPXV0'@;
put 'KSwhRltxZV1baXRdfHwib2JqZWN0IiE9dHlwZW9mIEZbcWVdW2l0XXx8QXJyYXkuaXNBcnJheShGW3FlXVtpdF0pfHxGW3FlXVtpdF1pbnN0YW5jZW9mIERhdGUpaWYoQXJyYXkuaXNBcnJheShodC52KSYmKGh0LmY9RltxZV1baXRdWzFdLGh0LnY9aHQudlswXSksbnVsbD09PWh0LnYpaWYo'@;
put 'aHQuZilodC50PSJuIjtlbHNlIGlmKEoubnVsbEVycm9yKWh0LnQ9ImUiLGh0LnY9MDtlbHNle2lmKCFKLnNoZWV0U3R1YnMpY29udGludWU7aHQudD0ieiJ9ZWxzZSJudW1iZXIiPT10eXBlb2YgaHQudj9odC50PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBodC52P2h0LnQ9ImIiOmh0LnYgaW5z'@;
put 'dGFuY2VvZiBEYXRlPyhodC56PUouZGF0ZU5GfHxDLl90YWJsZVsxNF0sSi5jZWxsRGF0ZXM/KGh0LnQ9ImQiLGh0Lnc9Qy5mb3JtYXQoaHQueixHZShodC52KSkpOihodC50PSJuIixodC52PUdlKGh0LnYpLGh0Lnc9Qy5mb3JtYXQoaHQueixodC52KSkpOmh0LnQ9InMiO2Vsc2UgaHQ9Rltx'@;
put 'ZV1baXRdO2lmKGh0JiZodC5oKXRyeXtodC5SPU51Lmh0bWxfdG9fcnMoaHQuaCksaHQudj0iIjtmb3IodmFyIHZ0PTA7dnQ8aHQuUi5sZW5ndGg7Kyt2dClodC52Kz1odC5SW3Z0XS52fHwiIn1jYXRjaHt9aWYoaWUpcGVba3RdfHwocGVba3RdPVtdKSxwZVtrdF1bdXRdJiZwZVtrdF1bdXRd'@;
put 'LnMmJihodC5zPXBlW2t0XVt1dF0ucykscGVba3RdW3V0XSYmcGVba3RdW3V0XS56JiYoaHQuej1wZVtrdF1bdXRdLnopLHBlW2t0XVt1dF09aHQ7ZWxzZXt2YXIgUHQ9RGkoe2M6dXQscjprdH0pO3BlW1B0XSYmcGVbUHRdLnMmJihodC5zPXBlW1B0XS5zKSxwZVtQdF0mJnBlW1B0XS56JiYo'@;
put 'aHQuej1wZVtQdF0ueikscGVbUHRdPWh0fX19cmV0dXJuIGplLnMuYzwxZTcmJihwZVsiIXJlZiJdPUFpKGplKSkscGV9ZnVuY3Rpb24gd2goTSxGKXtyZXR1cm4gRTEobnVsbCxNLEYpfWZ1bmN0aW9uIHl1KE0sRil7cmV0dXJuIEZ8fChGPWdyKDQpKSxGLndyaXRlX3NoaWZ0KDQsTSksRn1m'@;
put 'dW5jdGlvbiB6bChNKXt2YXIgRj1NLnJlYWRfc2hpZnQoNCk7cmV0dXJuIDA9PT1GPyIiOk0ucmVhZF9zaGlmdChGLCJkYmNzIil9ZnVuY3Rpb24gQ2woTSxGKXt2YXIgTz0hMTtyZXR1cm4gbnVsbD09RiYmKE89ITAsRj1ncig0KzIqTS5sZW5ndGgpKSxGLndyaXRlX3NoaWZ0KDQsTS5sZW5n'@;
put 'dGgpLE0ubGVuZ3RoPjAmJkYud3JpdGVfc2hpZnQoMCxNLCJkYmNzIiksTz9GLnNsaWNlKDAsRi5sKTpGfWZ1bmN0aW9uIEFtKE0pe3JldHVybntpY2g6TS5yZWFkX3NoaWZ0KDIpLGlmbnQ6TS5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBJbyhNLEYpe3ZhciBPPU0ubCxKPU0ucmVhZF9zaGlm'@;
put 'dCgxKSxpZT16bChNKSxwZT1bXSx5ZT17dDppZSxoOmllfTtpZigxJkope2Zvcih2YXIgdmU9TS5yZWFkX3NoaWZ0KDQpLE1lPTA7TWUhPXZlOysrTWUpcGUucHVzaChBbShNKSk7eWUucj1wZX1lbHNlIHllLnI9W3tpY2g6MCxpZm50OjB9XTtyZXR1cm4gTS5sPU8rRix5ZX0hZnVuY3Rpb24o'@;
put 'TSxGKXt2YXIgTztpZih0eXBlb2YgY3J5cHRvQnJvd3NlcmlmeTwidSIpTz1jcnlwdG9Ccm93c2VyaWZ5O2Vsc2UgaWYodHlwZW9mIEY8InUiKU89RjtlbHNlIHRyeXtPPVIoOTE0MjYpfWNhdGNoe089bnVsbH1NLnJjND1mdW5jdGlvbihKLGllKXt2YXIgcGU9bmV3IEFycmF5KDI1NikseWU9'@;
put 'MCx2ZT0wLE1lPTAsamU9MDtmb3IodmU9MDsyNTYhPXZlOysrdmUpcGVbdmVdPXZlO2Zvcih2ZT0wOzI1NiE9dmU7Kyt2ZSlNZT1NZStwZVt2ZV0rSlt2ZSVKLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsamU9cGVbdmVdLHBlW3ZlXT1wZVtNZV0scGVbTWVdPWplO3ZlPU1lPTA7dmFyIFll'@;
put 'PUcoaWUubGVuZ3RoKTtmb3IoeWU9MDt5ZSE9aWUubGVuZ3RoOysreWUpamU9cGVbdmU9dmUrMSYyNTVdLHBlW3ZlXT1wZVtNZT0oTWUrcGVbdmVdKSUyNTZdLHBlW01lXT1qZSxZZVt5ZV09aWVbeWVdXnBlW3BlW3ZlXStwZVtNZV0mMjU1XTtyZXR1cm4gWWV9LE0ubWQ1PWZ1bmN0aW9uKEop'@;
put 'e2lmKCFPKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIE8uY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKEopKS5kaWdlc3QoImhleCIpfX0oTWQsdHlwZW9mIGNyeXB0bzwidSI/Y3J5cHRvOnZvaWQgMCk7dmFyIExtPUlvO2Z1bmN0aW9u'@;
put 'IEF1KE0pe3ZhciBGPU0ucmVhZF9zaGlmdCg0KSxPPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gTys9TS5yZWFkX3NoaWZ0KDEpPDwxNixNLmwrKyx7YzpGLGlTdHlsZVJlZjpPfX1mdW5jdGlvbiBmcihNLEYpe3JldHVybiBudWxsPT1GJiYoRj1ncig4KSksRi53cml0ZV9zaGlmdCgtNCxNLmMp'@;
put 'LEYud3JpdGVfc2hpZnQoMyxNLmlTdHlsZVJlZnx8TS5zKSxGLndyaXRlX3NoaWZ0KDEsMCksRn1mdW5jdGlvbiBVMChNKXt2YXIgRj1NLnJlYWRfc2hpZnQoMik7cmV0dXJuIEYrPU0ucmVhZF9zaGlmdCgxKTw8MTYsTS5sKysse2M6LTEsaVN0eWxlUmVmOkZ9fWZ1bmN0aW9uIFZyKE0sRil7'@;
put 'cmV0dXJuIG51bGw9PUYmJihGPWdyKDQpKSxGLndyaXRlX3NoaWZ0KDMsTS5pU3R5bGVSZWZ8fE0ucyksRi53cml0ZV9zaGlmdCgxLDApLEZ9dmFyIFQyPXpsLEQyPUNsO2Z1bmN0aW9uIGhjKE0pe3ZhciBGPU0ucmVhZF9zaGlmdCg0KTtyZXR1cm4gMD09PUZ8fDQyOTQ5NjcyOTU9PT1GPyIi'@;
put 'Ok0ucmVhZF9zaGlmdChGLCJkYmNzIil9ZnVuY3Rpb24gV3UoTSxGKXt2YXIgTz0hMTtyZXR1cm4gbnVsbD09RiYmKE89ITAsRj1ncigxMjcpKSxGLndyaXRlX3NoaWZ0KDQsTS5sZW5ndGg+MD9NLmxlbmd0aDo0Mjk0OTY3Mjk1KSxNLmxlbmd0aD4wJiZGLndyaXRlX3NoaWZ0KDAsTSwiZGJj'@;
put 'cyIpLE8/Ri5zbGljZSgwLEYubCk6Rn12YXIgVDE9emwsRDE9aGMsS2Y9V3U7ZnVuY3Rpb24gTHUoTSl7dmFyIEY9TS5zbGljZShNLmwsTS5sKzQpLE89MSZGWzBdLEo9MiZGWzBdO00ubCs9NCxGWzBdJj0yNTI7dmFyIGllPTA9PT1KP2xyKFswLDAsMCwwLEZbMF0sRlsxXSxGWzJdLEZbM11d'@;
put 'LDApOktpKEYsMCk+PjI7cmV0dXJuIE8/aWUvMTAwOmllfWZ1bmN0aW9uIERwKE0sRil7bnVsbD09RiYmKEY9Z3IoNCkpO3ZhciBPPTAsSj0wLGllPTEwMCpNO2lmKE09PSgwfE0pJiZNPj0tKDE8PDI5KSYmTTwxPDwyOT9KPTE6aWU9PSgwfGllKSYmaWU+PS0oMTw8MjkpJiZpZTwxPDwyOSYm'@;
put 'KEo9MSxPPTEpLCFKKXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgUmtOdW1iZXIgIitNKTtGLndyaXRlX3NoaWZ0KC00LCgoTz9pZTpNKTw8MikrKE8rMikpfWZ1bmN0aW9uIGJ1KE0pe3ZhciBGPXtzOnt9LGU6e319O3JldHVybiBGLnMucj1NLnJlYWRfc2hpZnQoNCksRi5lLnI9TS5y'@;
put 'ZWFkX3NoaWZ0KDQpLEYucy5jPU0ucmVhZF9zaGlmdCg0KSxGLmUuYz1NLnJlYWRfc2hpZnQoNCksRn12YXIgU2w9YnUsQTE9ZnVuY3Rpb24gTWgoTSxGKXtyZXR1cm4gRnx8KEY9Z3IoMTYpKSxGLndyaXRlX3NoaWZ0KDQsTS5zLnIpLEYud3JpdGVfc2hpZnQoNCxNLmUuciksRi53cml0ZV9z'@;
put 'aGlmdCg0LE0ucy5jKSxGLndyaXRlX3NoaWZ0KDQsTS5lLmMpLEZ9O2Z1bmN0aW9uIGZjKE0pe2Zvcih2YXIgRj1NLnJlYWRfc2hpZnQoNCksTz1bXSxKPTA7SjxGOysrSil7dmFyIGllPVNsKE0pO08ucHVzaChBaShpZSkpfXJldHVybiBPLmpvaW4oIiwiKX1mdW5jdGlvbiBoYShNKXtpZihN'@;
put 'Lmxlbmd0aC1NLmw8OCl0aHJvdyJYTFMgWG51bSBCdWZmZXIgdW5kZXJmbG93IjtyZXR1cm4gTS5yZWFkX3NoaWZ0KDgsImYiKX1mdW5jdGlvbiBlYyhNLEYpe3JldHVybihGfHxncig4KSkud3JpdGVfc2hpZnQoOCxNLCJmIil9ZnVuY3Rpb24gWjAoTSl7dmFyIEY9e30sSj1NLnJlYWRfc2hp'@;
put 'ZnQoMSk+Pj4xLGllPU0ucmVhZF9zaGlmdCgxKSxwZT1NLnJlYWRfc2hpZnQoMiwiaSIpLHllPU0ucmVhZF9zaGlmdCgxKSx2ZT1NLnJlYWRfc2hpZnQoMSksTWU9TS5yZWFkX3NoaWZ0KDEpO3N3aXRjaChNLmwrKyxKKXtjYXNlIDA6Ri5hdXRvPTE7YnJlYWs7Y2FzZSAxOkYuaW5kZXg9aWU7'@;
put 'dmFyIGplPW1jW2llXTtqZSYmKEYucmdiPXQxKGplKSk7YnJlYWs7Y2FzZSAyOkYucmdiPXQxKFt5ZSx2ZSxNZV0pO2JyZWFrO2Nhc2UgMzpGLnRoZW1lPWllfXJldHVybiAwIT1wZSYmKEYudGludD1wZT4wP3BlLzMyNzY3OnBlLzMyNzY4KSxGfWZ1bmN0aW9uIEwxKE0sRil7aWYoRnx8KEY9'@;
put 'Z3IoOCkpLCFNfHxNLmF1dG8pcmV0dXJuIEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDQsMCksRjtudWxsIT1NLmluZGV4PyhGLndyaXRlX3NoaWZ0KDEsMiksRi53cml0ZV9zaGlmdCgxLE0uaW5kZXgpKTpudWxsIT1NLnRoZW1lPyhGLndyaXRlX3NoaWZ0KDEsNiksRi53cml0'@;
put 'ZV9zaGlmdCgxLE0udGhlbWUpKTooRi53cml0ZV9zaGlmdCgxLDUpLEYud3JpdGVfc2hpZnQoMSwwKSk7dmFyIE89TS50aW50fHwwO2lmKE8+MD9PKj0zMjc2NzpPPDAmJihPKj0zMjc2OCksRi53cml0ZV9zaGlmdCgyLE8pLE0ucmdiJiZudWxsPT1NLnRoZW1lKXt2YXIgSj1NLnJnYnx8IkZG'@;
put 'RkZGRiI7Im51bWJlciI9PXR5cGVvZiBKJiYoSj0oIjAwMDAwMCIrSi50b1N0cmluZygxNikpLnNsaWNlKC02KSksRi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEouc2xpY2UoMCwyKSwxNikpLEYud3JpdGVfc2hpZnQoMSxwYXJzZUludChKLnNsaWNlKDIsNCksMTYpKSxGLndyaXRlX3NoaWZ0'@;
put 'KDEscGFyc2VJbnQoSi5zbGljZSg0LDYpLDE2KSksRi53cml0ZV9zaGlmdCgxLDI1NSl9ZWxzZSBGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCgxLDApLEYud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gRn1mdW5jdGlvbiBJbShNKXt2YXIgRj1NLnJlYWRfc2hpZnQoMSk7cmV0dXJu'@;
put 'IE0ubCsrLHtmQm9sZDoxJkYsZkl0YWxpYzoyJkYsZlVuZGVybGluZTo0JkYsZlN0cmlrZW91dDo4JkYsZk91dGxpbmU6MTYmRixmU2hhZG93OjMyJkYsZkNvbmRlbnNlOjY0JkYsZkV4dGVuZDoxMjgmRn19ZnVuY3Rpb24gUm0oTSxGKXt2YXIgSj1NLnJlYWRfc2hpZnQoNCk7c3dpdGNoKEop'@;
put 'e2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVtNLnJlYWRfc2hpZnQoNCldfHwiIn1pZihKPjQwMCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9y'@;
put 'dGVkIENsaXBib2FyZDogIitKLnRvU3RyaW5nKDE2KSk7cmV0dXJuIE0ubC09NCxNLnJlYWRfc2hpZnQoMCwxPT1GPyJscHN0ciI6Imxwd3N0ciIpfXZhciBXMD0yLHhzPTMsT2M9MTIsUW49ODEsT209WzgwLFFuXSxDaD17MTp7bjoiQ29kZVBhZ2UiLHQ6VzB9LDI6e246IkNhdGVnb3J5Iix0'@;
put 'OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDp4c30sNTp7bjoiTGluZUNvdW50Iix0OnhzfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDp4c30sNzp7bjoiU2xpZGVDb3VudCIsdDp4c30sODp7bjoiTm90ZUNvdW50Iix0OnhzfSw5OntuOiJI'@;
put 'aWRkZW5Db3VudCIsdDp4c30sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6eHN9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxPY30sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6ODB9LDE1Ontu'@;
put 'OiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OnhzfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OnhzLHA6InZlcnNpb24i'@;
put 'fSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgz'@;
put 'NjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sTDI9ezE6e246IkNvZGVQYWdlIix0OlcwfSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29tbWVudHMiLHQ6'@;
put 'ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJNb2RpZmllZERh'@;
put 'dGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6eHN9LDE1OntuOiJXb3JkQ291bnQiLHQ6eHN9LDE2OntuOiJDaGFyQ291bnQiLHQ6eHN9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0OnhzfSwyNTU6e30s'@;
put 'MjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sSTI9RmUoQ2gsIm4iKSxPMT1GZShMMiwibiIpLFFmPXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwiLDMyOiJCRSIs'@;
put 'MzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoiVk4iLDg2OiJD'@;
put 'TiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5NzI6IklMIiw5'@;
put 'NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSxMcD1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxpcyIsImxpZ2h0'@;
put 'SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gZTMoTSl7cmV0dXJuIE0ubWFwKGZ1bmN0aW9uKEYpe3JldHVybltGPj4xNiYyNTUsRj4+OCYyNTUs'@;
put 'MjU1JkZdfSl9dmFyIFNoPWUzKFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgzODg3MzYsMzI4'@;
put 'OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5LDEzNDM0ODI4'@;
put 'LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQwMTY2LDMzNTU1'@;
put 'NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxtYz1YdChTaCksUG09ZTMoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcsMTAwMjcyMTIs'@;
put 'MTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMwLDM3NTAyMDEs'@;
put 'MTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSx1bD17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIjTi9BIiw0Mzoi'@;
put 'I0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LGcwPURlKHVsKSx4aD17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmJpbkluZGV4'@;
put 'V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVydGllcyt4bWwi'@;
put 'OiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1s'@;
put 'IjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmN1'@;
put 'c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJhcHBsaWNhdGlv'@;
put 'bi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydHN0'@;
put 'eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9j'@;
put 'dW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLmFjdGl2'@;
put 'ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIsImFwcGxpY2F0'@;
put 'aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRv'@;
put 'Y3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXRNZXRh'@;
put 'ZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZv'@;
put 'cm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3htbCI6InBpdm90'@;
put 'cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC51'@;
put 'c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVh'@;
put 'ZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt'@;
put 'ZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJsZVNpbmdsZUNl'@;
put 'bGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQu'@;
put 'bXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50'@;
put 'LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92ZXJyaWRlK3ht'@;
put 'bCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJhcHBsaWNhdGlv'@;
put 'bi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC52b2xh'@;
put 'dGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1vZGVscyIsImFw'@;
put 'cGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdp'@;
put 'bmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2lu'@;
put 'Z21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5n'@;
put 'bWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJlbHMiLCJhcHBs'@;
put 'aWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LElwPWZ1bmN0aW9uKCl7dmFyIE09e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj'@;
put 'ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVkLm1haW4iLHhs'@;
put 'YW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoiYXBwbGljYXRp'@;
put 'b24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1v'@;
put 'ZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC53b3Jrc2hl'@;
put 'ZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1z'@;
put 'LWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9LG1hY3Jvczp7'@;
put 'eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwu'@;
put 'dGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMt'@;
put 'ZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdENhY2hl'@;
put 'RGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMi'@;
put 'fSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGljYXRpb24vdm5k'@;
put 'Lm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt'@;
put 'ZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gYXQoTSkuZm9yRWFjaChmdW5jdGlvbihGKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihPKXtNW0ZdW09dfHwoTVtGXVtPXT1NW0ZdLnhs'@;
put 'c3gpfSl9KSxhdChNKS5mb3JFYWNoKGZ1bmN0aW9uKEYpe2F0KE1bRl0pLmZvckVhY2goZnVuY3Rpb24oTyl7eGhbTVtGXVtPXV09Rn0pfSksTX0oKSxScD1mdW5jdGlvbiBSZShNKXtmb3IodmFyIEY9W10sTz1hdChNKSxKPTA7SiE9PU8ubGVuZ3RoOysrSiludWxsPT1GW01bT1tKXV1dJiYo'@;
put 'RltNW09bSl1dXT1bXSksRltNW09bSl1dXS5wdXNoKE9bSl0pO3JldHVybiBGfSh4aCk7VGkuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIFBwPWRyKCJUeXBlcyIsbnVsbCx7eG1sbnM6VGkuQ1QsInhtbG5zOnhz'@;
put 'ZCI6VGkueHNkLCJ4bWxuczp4c2kiOlRpLnhzaX0pLEhtPVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz'@;
put 'LW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJdLFsiZW1mIiwi'@;
put 'aW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIsUnAucmVsc1sw'@;
put 'XV1dLm1hcChmdW5jdGlvbihNKXtyZXR1cm4gZHIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjpNWzBdLENvbnRlbnRUeXBlOk1bMV19KX0pLF9vPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9vZmZpY2VE'@;
put 'b2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxh'@;
put 'dGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAw'@;
put 'Ni9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0'@;
put 'cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2NoZW1hcy5vcGVu'@;
put 'eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24ga3IoTSl7dmFyIEY9TS5sYXN0'@;
put 'SW5kZXhPZigiLyIpO3JldHVybiBNLnNsaWNlKDAsRisxKSsiX3JlbHMvIitNLnNsaWNlKEYrMSkrIi5yZWxzIn1mdW5jdGlvbiBHMChNLEYpe3ZhciBPPXsiIWlkIjp7fX07aWYoIU0pcmV0dXJuIE87Ii8iIT09Ri5jaGFyQXQoMCkmJihGPSIvIitGKTt2YXIgSj17fTtyZXR1cm4oTS5tYXRj'@;
put 'aCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXt2YXIgcGU9bG4oaWUpO2lmKCI8UmVsYXRpb25zaGlwIj09PXBlWzBdKXt2YXIgeWU9e307eWUuVHlwZT1wZS5UeXBlLHllLlRhcmdldD1wZS5UYXJnZXQseWUuSWQ9cGUuSWQseWUuVGFyZ2V0TW9kZT1wZS5UYXJnZXRNb2RlO3ZhciB2'@;
put 'ZT0iRXh0ZXJuYWwiPT09cGUuVGFyZ2V0TW9kZT9wZS5UYXJnZXQ6ZW4ocGUuVGFyZ2V0LEYpO09bdmVdPXllLEpbcGUuSWRdPXllfX0pLE9bIiFpZCJdPUosT31UaS5SRUxTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L3JlbGF0aW9uc2hpcHMiO3Zh'@;
put 'ciBQMT1kcigiUmVsYXRpb25zaGlwcyIsbnVsbCx7eG1sbnM6VGkuUkVMU30pO2Z1bmN0aW9uIHNpKE0pe3ZhciBGPVtQbixQMV07cmV0dXJuIGF0KE1bIiFpZCJdKS5mb3JFYWNoKGZ1bmN0aW9uKE8pe0ZbRi5sZW5ndGhdPWRyKCJSZWxhdGlvbnNoaXAiLG51bGwsTVsiIWlkIl1bT10pfSks'@;
put 'Ri5sZW5ndGg+MiYmKEZbRi5sZW5ndGhdPSI8L1JlbGF0aW9uc2hpcHM+IixGWzFdPUZbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEYuam9pbigiIil9dmFyICQwPVtfby5ITElOSyxfby5YUEFUSCxfby5YTUlTU107ZnVuY3Rpb24gdnIoTSxGLE8sSixpZSxwZSl7aWYoaWV8fChpZT17fSksTVsi'@;
put 'IWlkIl18fChNWyIhaWQiXT17fSksRjwwKWZvcihGPTE7TVsiIWlkIl1bInJJZCIrRl07KytGKTtpZihpZS5JZD0icklkIitGLGllLlR5cGU9SixpZS5UYXJnZXQ9TyxwZT9pZS5UYXJnZXRNb2RlPXBlOiQwLmluZGV4T2YoaWUuVHlwZSk+LTEmJihpZS5UYXJnZXRNb2RlPSJFeHRlcm5hbCIp'@;
put 'LE1bIiFpZCJdW2llLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK0YpO3JldHVybiBNWyIhaWQiXVtpZS5JZF09aWUsTVsoIi8iK2llLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPWllLEZ9dmFyIERzPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3Vt'@;
put 'ZW50LnNwcmVhZHNoZWV0IjtmdW5jdGlvbiBPbChNLEYsTyl7cmV0dXJuWycgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSInK00rJyI+XG4nLCcgICAgPHJkZjp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb2ZmaWNlLzEuMi9tZXRhLycrKE98'@;
put 'fCJvZGYiKSsiIyIrRisnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9ZnVuY3Rpb24gcTAoTSxGKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrTSsnIj5cbicsJyAgICA8bnMwOmhhc1BhcnQgeG1sbnM6bnMwPSJodHRwOi8vZG9jcy5v'@;
put 'YXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvcGtnIyIgcmRmOnJlc291cmNlPSInK0YrJyIvPlxuJywiICA8L3JkZjpEZXNjcmlwdGlvbj5cbiJdLmpvaW4oIiIpfXZhciB0Mz1mdW5jdGlvbigpe3ZhciBNPSc8b2ZmaWNlOmRvY3VtZW50LW1ldGEgeG1sbnM6b2ZmaWNlPSJ1cm46'@;
put 'b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiIHhtbG5zOm1ldGE9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWV0YToxLjAiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6eGxpbms9Imh0'@;
put 'dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG9mZmljZTp2ZXJzaW9uPSIxLjIiPjxvZmZpY2U6bWV0YT48bWV0YTpnZW5lcmF0b3I+U2hlZXRKUyAnK3cudmVyc2lvbisiPC9tZXRhOmdlbmVyYXRvcj48L29mZmljZTptZXRhPjwvb2ZmaWNlOmRvY3VtZW50LW1ldGE+IjtyZXR1cm4gZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gTX19KCksSmM9W1siY3A6Y2F0ZWdvcnkiLCJDYXRlZ29yeSJdLFsiY3A6Y29udGVudFN0YXR1cyIsIkNvbnRlbnRTdGF0dXMiXSxbImNwOmtleXdvcmRzIiwiS2V5d29yZHMiXSxbImNwOmxhc3RNb2RpZmllZEJ5IiwiTGFzdEF1dGhvciJdLFsiY3A6bGFzdFByaW50'@;
put 'ZWQiLCJMYXN0UHJpbnRlZCJdLFsiY3A6cmV2aXNpb24iLCJSZXZOdW1iZXIiXSxbImNwOnZlcnNpb24iLCJWZXJzaW9uIl0sWyJkYzpjcmVhdG9yIiwiQXV0aG9yIl0sWyJkYzpkZXNjcmlwdGlvbiIsIkNvbW1lbnRzIl0sWyJkYzppZGVudGlmaWVyIiwiSWRlbnRpZmllciJdLFsiZGM6bGFu'@;
put 'Z3VhZ2UiLCJMYW5ndWFnZSJdLFsiZGM6c3ViamVjdCIsIlN1YmplY3QiXSxbImRjOnRpdGxlIiwiVGl0bGUiXSxbImRjdGVybXM6Y3JlYXRlZCIsIkNyZWF0ZWREYXRlIiwiZGF0ZSJdLFsiZGN0ZXJtczptb2RpZmllZCIsIk1vZGlmaWVkRGF0ZSIsImRhdGUiXV07VGkuQ09SRV9QUk9QUz0i'@;
put 'aHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9tZXRhZGF0YS9jb3JlLXByb3BlcnRpZXMiLF9vLkNPUkVfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvcmVsYXRpb25zaGlwcy9tZXRhZGF0YS9jb3JlLXBy'@;
put 'b3BlcnRpZXMiO3ZhciBSMj1mdW5jdGlvbigpe2Zvcih2YXIgTT1uZXcgQXJyYXkoSmMubGVuZ3RoKSxGPTA7RjxKYy5sZW5ndGg7KytGKXt2YXIgTz1KY1tGXSxKPSIoPzoiK09bMF0uc2xpY2UoMCxPWzBdLmluZGV4T2YoIjoiKSkrIjopIitPWzBdLnNsaWNlKE9bMF0uaW5kZXhPZigiOiIp'@;
put 'KzEpO01bRl09bmV3IFJlZ0V4cCgiPCIrSisiW14+XSo+KFtcXHNcXFNdKj8pPC8iK0orIj4iKX1yZXR1cm4gTX0oKTtmdW5jdGlvbiBGcChNKXt2YXIgRj17fTtNPUJpKE0pO2Zvcih2YXIgTz0wO088SmMubGVuZ3RoOysrTyl7dmFyIEo9SmNbT10saWU9TS5tYXRjaChSMltPXSk7bnVsbCE9'@;
put 'aWUmJmllLmxlbmd0aD4wJiYoRltKWzFdXT1tcihpZVsxXSkpLCJkYXRlIj09PUpbMl0mJkZbSlsxXV0mJihGW0pbMV1dPUZ0KEZbSlsxXV0pKX1yZXR1cm4gRn12YXIgVm09ZHIoImNwOmNvcmVQcm9wZXJ0aWVzIixudWxsLHsieG1sbnM6Y3AiOlRpLkNPUkVfUFJPUFMsInhtbG5zOmRjIjpU'@;
put 'aS5kYywieG1sbnM6ZGN0ZXJtcyI6VGkuZGN0ZXJtcywieG1sbnM6ZGNtaXR5cGUiOlRpLmRjbWl0eXBlLCJ4bWxuczp4c2kiOlRpLnhzaX0pO2Z1bmN0aW9uIEYxKE0sRixPLEosaWUpe251bGwhPWllW01dfHxudWxsPT1GfHwiIj09PUZ8fChpZVtNXT1GLEY9eXIoRiksSltKLmxlbmd0aF09'@;
put 'Tz9kcihNLEYsTyk6cm8oTSxGKSl9dmFyIF8wPVtbIkFwcGxpY2F0aW9uIiwiQXBwbGljYXRpb24iLCJzdHJpbmciXSxbIkFwcFZlcnNpb24iLCJBcHBWZXJzaW9uIiwic3RyaW5nIl0sWyJDb21wYW55IiwiQ29tcGFueSIsInN0cmluZyJdLFsiRG9jU2VjdXJpdHkiLCJEb2NTZWN1cml0eSIs'@;
put 'InN0cmluZyJdLFsiTWFuYWdlciIsIk1hbmFnZXIiLCJzdHJpbmciXSxbIkh5cGVybGlua3NDaGFuZ2VkIiwiSHlwZXJsaW5rc0NoYW5nZWQiLCJib29sIl0sWyJTaGFyZWREb2MiLCJTaGFyZWREb2MiLCJib29sIl0sWyJMaW5rc1VwVG9EYXRlIiwiTGlua3NVcFRvRGF0ZSIsImJvb2wiXSxb'@;
put 'IlNjYWxlQ3JvcCIsIlNjYWxlQ3JvcCIsImJvb2wiXSxbIkhlYWRpbmdQYWlycyIsIkhlYWRpbmdQYWlycyIsInJhdyJdLFsiVGl0bGVzT2ZQYXJ0cyIsIlRpdGxlc09mUGFydHMiLCJyYXciXV07ZnVuY3Rpb24ga2goTSxGLE8sSil7dmFyIGllPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgTSlp'@;
put 'ZT1fdShNLEopO2Vsc2UgZm9yKHZhciBwZT0wO3BlPE0ubGVuZ3RoOysrcGUpaWU9aWUuY29uY2F0KE1bcGVdLm1hcChmdW5jdGlvbihZZSl7cmV0dXJue3Y6WWV9fSkpO3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIEY/X3UoRixKKS5tYXAoZnVuY3Rpb24oWWUpe3JldHVybiBZZS52fSk6Rix2'@;
put 'ZT0wLE1lPTA7aWYoeWUubGVuZ3RoPjApZm9yKHZhciBqZT0wO2plIT09aWUubGVuZ3RoO2plKz0yKXtzd2l0Y2goTWU9K2llW2plKzFdLnYsaWVbamVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUw'@;
put 'NDRiIjpjYXNlIlx1MDYyM1x1MDY0OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBc'@;
put 'dTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFs'@;
put 'Y3VsbyI6Y2FzZSJQbGFuaWxoYXMiOmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjpPLldvcmtzaGVldHM9TWUsTy5TaGVldE5hbWVzPXllLnNsaWNlKHZlLHZlK01lKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3Mg'@;
put 'Y29uIG5vbWJyZSI6Y2FzZSJcdTU0MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOk8uTmFtZWRSYW5nZXM9TWUsTy5EZWZpbmVkTmFtZXM9eWUuc2xpY2UodmUsdmUrTWUpO2JyZWFrO2Nh'@;
put 'c2UiQ2hhcnRzIjpjYXNlIkRpYWdyYW1tZSI6Ty5DaGFydHNoZWV0cz1NZSxPLkNoYXJ0TmFtZXM9eWUuc2xpY2UodmUsdmUrTWUpfXZlKz1NZX19VGkuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9w'@;
put 'ZXJ0aWVzIixfby5FWFRfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIG4zPWRyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpUaS5FWFRfUFJPUFMsInhtbG5z'@;
put 'OnZ0IjpUaS52dH0pO1RpLkNVU1RfUFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixfby5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQv'@;
put 'MjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbS1wcm9wZXJ0aWVzIjt2YXIgcjM9LzxbXj5dKz5bXjxdKi9nLFZwPWRyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpUaS5DVVNUX1BST1BTLCJ4bWxuczp2dCI6VGkudnR9KTt2YXIgaTM9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIs'@;
put 'QXV0aG9yOiJBdXRob3IiLEtleXdvcmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToi'@;
put 'Q3JlYXRlZCIsTW9kaWZpZWREYXRlOiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIs'@;
put 'TGFuZ3VhZ2U6Ikxhbmd1YWdlIn0sbzM9Q2UoaTMpO2Z1bmN0aW9uIEswKE0sRixPKXtNW0Y9bzNbRl18fEZdPU99ZnVuY3Rpb24geGQoTSl7dmFyIEY9TS5yZWFkX3NoaWZ0KDQpLE89TS5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKE8vMWU3Kk1hdGgucG93KDIsMzIpK0Yv'@;
put 'MWU3LTExNjQ0NDczNjAwKSkudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIFFjKE0sRixPKXt2YXIgSj1NLmwsaWU9TS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIik7aWYoTylmb3IoO00ubC1KJjM7KSsrTS5sO3JldHVybiBpZX1mdW5jdGlvbiBPMihNLEYsTyl7'@;
put 'dmFyIEo9TS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpO3JldHVybiBPJiYoTS5sKz00LShKLmxlbmd0aCsxJjMpJjMpLEp9ZnVuY3Rpb24ganAoTSxGLE8pe3JldHVybiAzMT09PUY/TzIoTSk6UWMoTSwwLE8pfWZ1bmN0aW9uIGEzKE0sRixPKXtyZXR1cm4ganAoTSxGLCExPT09Tz8wOjQpfWZ1'@;
put 'bmN0aW9uIGwzKE0pe3ZhciBGPU0ubCxPPU4xKE0sUW4pO3JldHVybiAwPT1NW00ubF0mJjA9PU1bTS5sKzFdJiZNLmwtRiYyJiYoTS5sKz0yKSxbTyxOMShNLHhzKV19ZnVuY3Rpb24gUDIoTSxGKXtmb3IodmFyIE89TS5yZWFkX3NoaWZ0KDQpLEo9e30saWU9MDtpZSE9TzsrK2llKXt2YXIg'@;
put 'cGU9TS5yZWFkX3NoaWZ0KDQpLHllPU0ucmVhZF9zaGlmdCg0KTtKW3BlXT1NLnJlYWRfc2hpZnQoeWUsMTIwMD09PUY/InV0ZjE2bGUiOiJ1dGY4IikucmVwbGFjZShfLCIiKS5yZXBsYWNlKHAsIiEiKSwxMjAwPT09RiYmeWUlMiYmKE0ubCs9Mil9cmV0dXJuIDMmTS5sJiYoTS5sPU0ubD4+'@;
put 'Mzw8MiksSn1mdW5jdGlvbiBldShNKXt2YXIgRj1NLnJlYWRfc2hpZnQoNCksTz1NLnNsaWNlKE0ubCxNLmwrRik7cmV0dXJuIE0ubCs9RiwoMyZGKT4wJiYoTS5sKz00LSgzJkYpJjMpLE99ZnVuY3Rpb24gTjEoTSxGLE8pe3ZhciBpZSxKPU0ucmVhZF9zaGlmdCgyKSxwZT1PfHx7fTtpZihN'@;
put 'LmwrPTIsRiE9PU9jJiZKIT09RiYmLTE9PT1PbS5pbmRleE9mKEYpJiYoNDEyNiE9KDY1NTM0JkYpfHw0MTI2IT0oNjU1MzQmSikpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK0YrIiBzYXcgIitKKTtzd2l0Y2goRj09PU9jP0o6Ril7Y2FzZSAyOnJldHVybiBpZT1NLnJlYWRf'@;
put 'c2hpZnQoMiwiaSIpLHBlLnJhd3x8KE0ubCs9MiksaWU7Y2FzZSAzOnJldHVybiBNLnJlYWRfc2hpZnQoNCwiaSIpO2Nhc2UgMTE6cmV0dXJuIDAhPT1NLnJlYWRfc2hpZnQoNCk7Y2FzZSAxOTpyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpO2Nhc2UgMzA6cmV0dXJuIFFjKE0sMCw0KS5yZXBsYWNl'@;
put 'KF8sIiIpO2Nhc2UgMzE6cmV0dXJuIE8yKE0pO2Nhc2UgNjQ6cmV0dXJuIHhkKE0pO2Nhc2UgNjU6cmV0dXJuIGV1KE0pO2Nhc2UgNzE6cmV0dXJuIGZ1bmN0aW9uIFlwKE0pe3ZhciBGPXt9O3JldHVybiBGLlNpemU9TS5yZWFkX3NoaWZ0KDQpLE0ubCs9Ri5TaXplKzMtKEYuU2l6ZS0xKSU0'@;
put 'LEZ9KE0pO2Nhc2UgODA6cmV0dXJuIGEzKE0sSiwhcGUucmF3KS5yZXBsYWNlKF8sIiIpO2Nhc2UgODE6cmV0dXJuIGZ1bmN0aW9uIEJwKE0sRil7aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJWdFVuYWxpZ25lZFN0cmluZyBtdXN0IGhhdmUgcG9zaXRpdmUgbGVuZ3RoIik7cmV0dXJuIGpwKE0s'@;
put 'RiwwKX0oTSxKKS5yZXBsYWNlKF8sIiIpO2Nhc2UgNDEwODpyZXR1cm4gZnVuY3Rpb24gVW0oTSl7Zm9yKHZhciBGPU0ucmVhZF9zaGlmdCg0KSxPPVtdLEo9MDtKPEYvMjsrK0opTy5wdXNoKGwzKE0pKTtyZXR1cm4gT30oTSk7Y2FzZSA0MTI2OmNhc2UgNDEyNzpyZXR1cm4gNDEyNz09Sj9m'@;
put 'dW5jdGlvbiBrZChNKXtmb3IodmFyIEY9TS5yZWFkX3NoaWZ0KDQpLE89W10sSj0wO0ohPUY7KytKKXt2YXIgaWU9TS5sO09bSl09TS5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoXywiIiksTS5sLWllJjImJihNLmwrPTIpfXJldHVybiBPfShNKTpmdW5jdGlvbiB6bShNKXtmb3Io'@;
put 'dmFyIEY9TS5yZWFkX3NoaWZ0KDQpLE89W10sSj0wO0ohPUY7KytKKU9bSl09TS5yZWFkX3NoaWZ0KDAsImxwc3RyLWNwIikucmVwbGFjZShfLCIiKTtyZXR1cm4gT30oTSk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGVkUHJvcGVydHlWYWx1ZSB1bnJlY29nbml6ZWQgdHlwZSAiK0Yr'@;
put 'IiAiK0opfX1mdW5jdGlvbiBWMShNLEYpe3ZhciBPPWdyKDQpLEo9Z3IoNCk7c3dpdGNoKE8ud3JpdGVfc2hpZnQoNCw4MD09TT8zMTpNKSxNKXtjYXNlIDM6Si53cml0ZV9zaGlmdCgtNCxGKTticmVhaztjYXNlIDU6KEo9Z3IoOCkpLndyaXRlX3NoaWZ0KDgsRiwiZiIpO2JyZWFrO2Nhc2Ug'@;
put 'MTE6Si53cml0ZV9zaGlmdCg0LEY/MTowKTticmVhaztjYXNlIDY0Oko9ZnVuY3Rpb24gZGwoTSl7dmFyIE89KCJzdHJpbmciPT10eXBlb2YgTT9uZXcgRGF0ZShEYXRlLnBhcnNlKE0pKTpNKS5nZXRUaW1lKCkvMWUzKzExNjQ0NDczNjAwLEo9TyVNYXRoLnBvdygyLDMyKSxpZT0oTy1KKS9N'@;
put 'YXRoLnBvdygyLDMyKTtpZSo9MWU3O3ZhciBwZT0oSio9MWU3KS9NYXRoLnBvdygyLDMyKXwwO3BlPjAmJihKJT1NYXRoLnBvdygyLDMyKSxpZSs9cGUpO3ZhciB5ZT1ncig4KTtyZXR1cm4geWUud3JpdGVfc2hpZnQoNCxKKSx5ZS53cml0ZV9zaGlmdCg0LGllKSx5ZX0oRik7YnJlYWs7Y2Fz'@;
put 'ZSAzMTpjYXNlIDgwOmZvcigoSj1ncig0KzIqKEYubGVuZ3RoKzEpKyhGLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LEYubGVuZ3RoKzEpLEoud3JpdGVfc2hpZnQoMCxGLCJkYmNzIik7Si5sIT1KLmxlbmd0aDspSi53cml0ZV9zaGlmdCgxLDApO2JyZWFrO2RlZmF1bHQ6dGhyb3cg'@;
put 'bmV3IEVycm9yKCJUeXBlZFByb3BlcnR5VmFsdWUgdW5yZWNvZ25pemVkIHR5cGUgIitNKyIgIitGKX1yZXR1cm4geChbTyxKXSl9ZnVuY3Rpb24gbmMoTSxGKXt2YXIgTz1NLmwsSj1NLnJlYWRfc2hpZnQoNCksaWU9TS5yZWFkX3NoaWZ0KDQpLHBlPVtdLHllPTAsdmU9MCxNZT0tMSxqZT17'@;
put 'fTtmb3IoeWU9MDt5ZSE9aWU7Kyt5ZSl7dmFyIFllPU0ucmVhZF9zaGlmdCg0KSxxZT1NLnJlYWRfc2hpZnQoNCk7cGVbeWVdPVtZZSxxZStPXX1wZS5zb3J0KGZ1bmN0aW9uKER0LEF0KXtyZXR1cm4gRHRbMV0tQXRbMV19KTt2YXIgaXQ9e307Zm9yKHllPTA7eWUhPWllOysreWUpe2lmKE0u'@;
put 'bCE9PXBlW3llXVsxXSl7dmFyIGh0PSEwO2lmKHllPjAmJkYpc3dpdGNoKEZbcGVbeWUtMV1bMF1dLnQpe2Nhc2UgMjpNLmwrMj09PXBlW3llXVsxXSYmKE0ubCs9MixodD0hMSk7YnJlYWs7Y2FzZSA4MDpjYXNlIDQxMDg6TS5sPD1wZVt5ZV1bMV0mJihNLmw9cGVbeWVdWzFdLGh0PSExKX1p'@;
put 'ZigoIUZ8fDA9PXllKSYmTS5sPD1wZVt5ZV1bMV0mJihodD0hMSxNLmw9cGVbeWVdWzFdKSxodCl0aHJvdyBuZXcgRXJyb3IoIlJlYWQgRXJyb3I6IEV4cGVjdGVkIGFkZHJlc3MgIitwZVt5ZV1bMV0rIiBhdCAiK00ubCsiIDoiK3llKX1pZihGKXt2YXIga3Q9RltwZVt5ZV1bMF1dO2lmKGl0'@;
put 'W2t0Lm5dPU4xKE0sa3QudCx7cmF3OiEwfSksInZlcnNpb24iPT09a3QucCYmKGl0W2t0Lm5dPVN0cmluZyhpdFtrdC5uXT4+MTYpKyIuIisoIjAwMDAiK1N0cmluZyg2NTUzNSZpdFtrdC5uXSkpLnNsaWNlKC00KSksIkNvZGVQYWdlIj09a3Qubilzd2l0Y2goaXRba3Qubl0pe2Nhc2UgMDpp'@;
put 'dFtrdC5uXT0xMjUyO2Nhc2UgODc0OmNhc2UgOTMyOmNhc2UgOTM2OmNhc2UgOTQ5OmNhc2UgOTUwOmNhc2UgMTI1MDpjYXNlIDEyNTE6Y2FzZSAxMjUzOmNhc2UgMTI1NDpjYXNlIDEyNTU6Y2FzZSAxMjU2OmNhc2UgMTI1NzpjYXNlIDEyNTg6Y2FzZSAxZTQ6Y2FzZSAxMjAwOmNhc2UgMTIw'@;
put 'MTpjYXNlIDEyNTI6Y2FzZSA2NWUzOmNhc2UtNTM2OmNhc2UgNjUwMDE6Y2FzZS01MzU6Qih2ZT1pdFtrdC5uXT4+PjAmNjU1MzUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBDb2RlUGFnZTogIitpdFtrdC5uXSl9fWVsc2UgaWYoMT09PXBlW3llXVswXSl7'@;
put 'aWYodmU9aXQuQ29kZVBhZ2U9TjEoTSxXMCksQih2ZSksLTEhPT1NZSl7dmFyIHV0PU0ubDtNLmw9cGVbTWVdWzFdLGplPVAyKE0sdmUpLE0ubD11dH19ZWxzZSBpZigwPT09cGVbeWVdWzBdKXtpZigwPT09dmUpe01lPXllLE0ubD1wZVt5ZSsxXVsxXTtjb250aW51ZX1qZT1QMihNLHZlKX1l'@;
put 'bHNle3ZhciBQdCx2dD1qZVtwZVt5ZV1bMF1dO3N3aXRjaChNW00ubF0pe2Nhc2UgNjU6TS5sKz00LFB0PWV1KE0pO2JyZWFrO2Nhc2UgMzA6Y2FzZSAzMTpNLmwrPTQsUHQ9YTMoTSxNW00ubC00XSkucmVwbGFjZSgvXHUwMDAwKyQvLCIiKTticmVhaztjYXNlIDM6TS5sKz00LFB0PU0ucmVh'@;
put 'ZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSAxOTpNLmwrPTQsUHQ9TS5yZWFkX3NoaWZ0KDQpO2JyZWFrO2Nhc2UgNTpNLmwrPTQsUHQ9TS5yZWFkX3NoaWZ0KDgsImYiKTticmVhaztjYXNlIDExOk0ubCs9NCxQdD1SaShNLDQpO2JyZWFrO2Nhc2UgNjQ6TS5sKz00LFB0PUZ0KHhkKE0pKTti'@;
put 'cmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5wYXJzZWQgdmFsdWU6ICIrTVtNLmxdKX1pdFt2dF09UHR9fXJldHVybiBNLmw9TytKLGl0fXZhciBGMj1bIkNvZGVQYWdlIiwiVGh1bWJuYWlsIiwiX1BJRF9MSU5LQkFTRSIsIl9QSURfSExJTktTIiwiU3lzdGVtSWRlbnRpZmllciIs'@;
put 'IkZNVElEIl0uY29uY2F0KFsiV29ya3NoZWV0cyIsIlNoZWV0TmFtZXMiLCJOYW1lZFJhbmdlcyIsIkRlZmluZWROYW1lcyIsIkNoYXJ0c2hlZXRzIiwiQ2hhcnROYW1lcyJdKTtmdW5jdGlvbiB4bChNKXtzd2l0Y2godHlwZW9mIE0pe2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDExO2Nhc2UibnVt'@;
put 'YmVyIjpyZXR1cm4oMHxNKT09TT8zOjU7Y2FzZSJzdHJpbmciOnJldHVybiAzMTtjYXNlIm9iamVjdCI6aWYoTSBpbnN0YW5jZW9mIERhdGUpcmV0dXJuIDY0fXJldHVybi0xfWZ1bmN0aW9uIGMzKE0sRixPKXt2YXIgSj1ncig4KSxpZT1bXSxwZT1bXSx5ZT04LHZlPTAsTWU9Z3IoOCksamU9'@;
put 'Z3IoOCk7aWYoTWUud3JpdGVfc2hpZnQoNCwyKSxNZS53cml0ZV9zaGlmdCg0LDEyMDApLGplLndyaXRlX3NoaWZ0KDQsMSkscGUucHVzaChNZSksaWUucHVzaChqZSkseWUrPTgrTWUubGVuZ3RoLCFGKXsoamU9Z3IoOCkpLndyaXRlX3NoaWZ0KDQsMCksaWUudW5zaGlmdChqZSk7dmFyIFll'@;
put 'PVtncig0KV07Zm9yKFllWzBdLndyaXRlX3NoaWZ0KDQsTS5sZW5ndGgpLHZlPTA7dmU8TS5sZW5ndGg7Kyt2ZSl7dmFyIHFlPU1bdmVdWzBdO2ZvcigoTWU9Z3IoOCsyKihxZS5sZW5ndGgrMSkrKHFlLmxlbmd0aCUyPzA6MikpKS53cml0ZV9zaGlmdCg0LHZlKzIpLE1lLndyaXRlX3NoaWZ0'@;
put 'KDQscWUubGVuZ3RoKzEpLE1lLndyaXRlX3NoaWZ0KDAscWUsImRiY3MiKTtNZS5sIT1NZS5sZW5ndGg7KU1lLndyaXRlX3NoaWZ0KDEsMCk7WWUucHVzaChNZSl9TWU9eChZZSkscGUudW5zaGlmdChNZSkseWUrPTgrTWUubGVuZ3RofWZvcih2ZT0wO3ZlPE0ubGVuZ3RoOysrdmUpaWYoKCFG'@;
put 'fHxGW01bdmVdWzBdXSkmJiEoRjIuaW5kZXhPZihNW3ZlXVswXSk+LTEpJiZudWxsIT1NW3ZlXVsxXSl7dmFyIGl0PU1bdmVdWzFdLGh0PTA7aWYoRil7dmFyIGt0PU9baHQ9K0ZbTVt2ZV1bMF1dXTtpZigidmVyc2lvbiI9PWt0LnAmJiJzdHJpbmciPT10eXBlb2YgaXQpe3ZhciB1dD1pdC5z'@;
put 'cGxpdCgiLiIpO2l0PSgrdXRbMF08PDE2KSsoK3V0WzFdfHwwKX1NZT1WMShrdC50LGl0KX1lbHNle3ZhciB2dD14bChpdCk7LTE9PXZ0JiYodnQ9MzEsaXQ9U3RyaW5nKGl0KSksTWU9VjEodnQsaXQpfXBlLnB1c2goTWUpLChqZT1ncig4KSkud3JpdGVfc2hpZnQoNCxGP2h0OjIrdmUpLGll'@;
put 'LnB1c2goamUpLHllKz04K01lLmxlbmd0aH12YXIgUHQ9OCoocGUubGVuZ3RoKzEpO2Zvcih2ZT0wO3ZlPHBlLmxlbmd0aDsrK3ZlKWllW3ZlXS53cml0ZV9zaGlmdCg0LFB0KSxQdCs9cGVbdmVdLmxlbmd0aDtyZXR1cm4gSi53cml0ZV9zaGlmdCg0LHllKSxKLndyaXRlX3NoaWZ0KDQscGUu'@;
put 'bGVuZ3RoKSx4KFtKXS5jb25jYXQoaWUpLmNvbmNhdChwZSkpfWZ1bmN0aW9uIHUzKE0sRixPKXt2YXIgSj1NLmNvbnRlbnQ7aWYoIUopcmV0dXJue307WnMoSiwwKTt2YXIgaWUscGUseWUsdmUsTWU9MDtKLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6ICIpLEoucmVhZF9zaGlmdCgyKTt2YXIg'@;
put 'amU9Si5yZWFkX3NoaWZ0KDQpLFllPUoucmVhZF9zaGlmdCgxNik7aWYoWWUhPT1MZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZZZSE9PU8pdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitZZSk7aWYoMSE9PShpZT1KLnJlYWRfc2hpZnQoNCkpJiYyIT09aWUp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgI1NldHM6ICIraWUpO2lmKHBlPUoucmVhZF9zaGlmdCgxNiksdmU9Si5yZWFkX3NoaWZ0KDQpLDE9PT1pZSYmdmUhPT1KLmwpdGhyb3cgbmV3IEVycm9yKCJMZW5ndGggbWlzbWF0Y2g6ICIrdmUrIiAhPT0gIitKLmwpOzI9PT1pZSYmKHll'@;
put 'PUoucmVhZF9zaGlmdCgxNiksTWU9Si5yZWFkX3NoaWZ0KDQpKTt2YXIga3QscWU9bmMoSixGKSxpdD17U3lzdGVtSWRlbnRpZmllcjpqZX07Zm9yKHZhciBodCBpbiBxZSlpdFtodF09cWVbaHRdO2lmKGl0LkZNVElEPXBlLDE9PT1pZSlyZXR1cm4gaXQ7aWYoTWUtSi5sPT0yJiYoSi5sKz0y'@;
put 'KSxKLmwhPT1NZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK0oubCsiICE9PSAiK01lKTt0cnl7a3Q9bmMoSixudWxsKX1jYXRjaHt9Zm9yKGh0IGluIGt0KWl0W2h0XT1rdFtodF07cmV0dXJuIGl0LkZNVElEPVtwZSx5ZV0saXR9ZnVuY3Rpb24gbnIoTSxGLE8sSixp'@;
put 'ZSxwZSl7dmFyIHllPWdyKGllPzY4OjQ4KSx2ZT1beWVdO3llLndyaXRlX3NoaWZ0KDIsNjU1MzQpLHllLndyaXRlX3NoaWZ0KDIsMCkseWUud3JpdGVfc2hpZnQoNCw4NDI0MTI1OTkpLHllLndyaXRlX3NoaWZ0KDE2LExlLnV0aWxzLmNvbnN0cy5IRUFERVJfQ0xTSUQsImhleCIpLHllLndy'@;
put 'aXRlX3NoaWZ0KDQsaWU/MjoxKSx5ZS53cml0ZV9zaGlmdCgxNixGLCJoZXgiKSx5ZS53cml0ZV9zaGlmdCg0LGllPzY4OjQ4KTt2YXIgTWU9YzMoTSxPLEopO2lmKHZlLnB1c2goTWUpLGllKXt2YXIgamU9YzMoaWUsbnVsbCxudWxsKTt5ZS53cml0ZV9zaGlmdCgxNixwZSwiaGV4IikseWUu'@;
put 'd3JpdGVfc2hpZnQoNCw2OCtNZS5sZW5ndGgpLHZlLnB1c2goamUpfXJldHVybiB4KHZlKX1mdW5jdGlvbiBYMChNLEYpe3JldHVybiBNLnJlYWRfc2hpZnQoRiksbnVsbH1mdW5jdGlvbiBSaShNLEYpe3JldHVybiAxPT09TS5yZWFkX3NoaWZ0KEYpfWZ1bmN0aW9uIFhhKE0sRil7cmV0dXJu'@;
put 'IEZ8fChGPWdyKDIpKSxGLndyaXRlX3NoaWZ0KDIsKyEhTSksRn1mdW5jdGlvbiBKYShNKXtyZXR1cm4gTS5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiBabChNLEYpe3JldHVybiBGfHwoRj1ncigyKSksRi53cml0ZV9zaGlmdCgyLE0pLEZ9ZnVuY3Rpb24gRWgoTSxGKXtyZXR1cm4gZnVu'@;
put 'Y3Rpb24gZDMoTSxGLE8pe2Zvcih2YXIgSj1bXSxpZT1NLmwrRjtNLmw8aWU7KUoucHVzaChPKE0saWUtTS5sKSk7aWYoaWUhPT1NLmwpdGhyb3cgbmV3IEVycm9yKCJTbHVycCBlcnJvciIpO3JldHVybiBKfShNLEYsSmEpfWZ1bmN0aW9uIHhpKE0sRixPKXtyZXR1cm4gT3x8KE89Z3IoMikp'@;
put 'LE8ud3JpdGVfc2hpZnQoMSwiZSI9PUY/K006KyEhTSksTy53cml0ZV9zaGlmdCgxLCJlIj09Rj8xOjApLE99ZnVuY3Rpb24gcG8oTSxGLE8pe3ZhciBKPU0ucmVhZF9zaGlmdChPJiZPLmJpZmY+PTEyPzI6MSksaWU9InNiY3MtY29udCIscGU9QTtPJiZPLmJpZmY+PTgmJihBPTEyMDApLE8m'@;
put 'JjghPU8uYmlmZj8xMj09Ty5iaWZmJiYoaWU9IndzdHIiKTpNLnJlYWRfc2hpZnQoMSkmJihpZT0iZGJjcy1jb250IiksTy5iaWZmPj0yJiZPLmJpZmY8PTUmJihpZT0iY3BzdHIiKTt2YXIgdmU9Sj9NLnJlYWRfc2hpZnQoSixpZSk6IiI7cmV0dXJuIEE9cGUsdmV9ZnVuY3Rpb24gUWEoTSl7'@;
put 'dmFyIEY9QTtBPTEyMDA7dmFyIE1lLE89TS5yZWFkX3NoaWZ0KDIpLEo9TS5yZWFkX3NoaWZ0KDEpLGllPTQmSixwZT04JkoseWU9MSsoMSZKKSx2ZT0wLGplPXt9O3BlJiYodmU9TS5yZWFkX3NoaWZ0KDIpKSxpZSYmKE1lPU0ucmVhZF9zaGlmdCg0KSk7dmFyIHFlPTA9PT1PPyIiOk0ucmVh'@;
put 'ZF9zaGlmdChPLDI9PXllPyJkYmNzLWNvbnQiOiJzYmNzLWNvbnQiKTtpZihwZSlmb3IoamUuX1I9W107dmUtLSA+MDspamUuX1IucHVzaCh7aWR4Ok0ucmVhZF9zaGlmdCgyKSxpZm50Ok0ucmVhZF9zaGlmdCgyKX0pO3JldHVybiBpZSYmKE0ubCs9TWUpLGplLnQ9cWUscGV8fChqZS5yPSI8'@;
put 'dD4iK2plLnQrIjwvdD4iKSxBPUYsamV9ZnVuY3Rpb24gbmEoTSxGKXt2YXIgTz1NLlImJk0uUi5sZW5ndGh8fE0ucjtNLnImJihNLlI9V3AoTS5yKSk7dmFyIEo9IiIsaWU9MDtPP00uUi5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtpZSsrLEorPWt0LnZ8fCIifSk6KEo9TS50fHwiIixpZT0xKTt2'@;
put 'YXIgcGU9Z3IoMysoaWU+MT8yOjApKTtwZS53cml0ZV9zaGlmdCgyLEoubGVuZ3RoKSxwZS53cml0ZV9zaGlmdCgxLDF8KGllPjE/ODowKSksaWU+MSYmcGUud3JpdGVfc2hpZnQoMixpZSk7dmFyIHllPWdyKDIqSi5sZW5ndGgpO3llLndyaXRlX3NoaWZ0KDIqSi5sZW5ndGgsSiwidXRmMTZs'@;
put 'ZSIpO3ZhciB2ZT1bcGUseWVdO2lmKE8pe3ZhciBNZT1ncig0Kk0uUi5sZW5ndGgpLGplPTA7dmUucHVzaChNZSk7Zm9yKHZhciBZZT0wO1llPE0uUi5sZW5ndGg7KytZZSl7dmFyIHFlPU0uUltZZV07TWUud3JpdGVfc2hpZnQoMixqZSksamUrPShxZS52fHwiIikubGVuZ3RoO3ZhciBpdD1x'@;
put 'ZS5zP3J1KEYuY2VsbFhmcyxGLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6cWUuc30sRik6MCxodD1GLmNlbGxYZnNbaXRdLmZvbnRJZDtNZS53cml0ZV9zaGlmdCgyLGh0PDQ/aHQ6aHQrMSl9fXJldHVybiB4KHZlKX1mdW5jdGlvbiBqYShNLEYsTyl7aWYoTyl7aWYoTy5iaWZmPj0yJiZP'@;
put 'LmJpZmY8PTUpcmV0dXJuIE0ucmVhZF9zaGlmdChGLCJjcHN0ciIpO2lmKE8uYmlmZj49MTIpcmV0dXJuIE0ucmVhZF9zaGlmdChGLCJkYmNzLWNvbnQiKX12YXIgaWU9TS5yZWFkX3NoaWZ0KDEpO3JldHVybiBNLnJlYWRfc2hpZnQoRiwwPT09aWU/InNiY3MtY29udCI6ImRiY3MtY29udCIp'@;
put 'fWZ1bmN0aW9uIGtsKE0sRixPKXt2YXIgSj1NLnJlYWRfc2hpZnQoTyYmMj09Ty5iaWZmPzE6Mik7cmV0dXJuIDA9PT1KPyhNLmwrKywiIik6amEoTSxKLE8pfWZ1bmN0aW9uIHd1KE0sRixPKXtpZihPLmJpZmY+NSlyZXR1cm4ga2woTSwwLE8pO3ZhciBKPU0ucmVhZF9zaGlmdCgxKTtyZXR1'@;
put 'cm4gMD09PUo/KE0ubCsrLCIiKTpNLnJlYWRfc2hpZnQoSixPLmJpZmY8PTR8fCFNLmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVuY3Rpb24gcmEoTSxGLE8pe3JldHVybiBPfHwoTz1ncigzKzIqTS5sZW5ndGgpKSxPLndyaXRlX3NoaWZ0KDIsTS5sZW5ndGgpLE8ud3JpdGVfc2hpZnQo'@;
put 'MSwxKSxPLndyaXRlX3NoaWZ0KDMxLE0sInV0ZjE2bGUiKSxPfWZ1bmN0aW9uIFRoKE0pe3ZhciBGPU0ucmVhZF9zaGlmdCg0KTtyZXR1cm4gRj4wP00ucmVhZF9zaGlmdChGLCJ1dGYxNmxlIikucmVwbGFjZShfLCIiKToiIn1mdW5jdGlvbiBnYyhNLEYpe0Z8fChGPWdyKDYrMipNLmxlbmd0'@;
put 'aCkpLEYud3JpdGVfc2hpZnQoNCwxK00ubGVuZ3RoKTtmb3IodmFyIE89MDtPPE0ubGVuZ3RoOysrTylGLndyaXRlX3NoaWZ0KDIsTS5jaGFyQ29kZUF0KE8pKTtyZXR1cm4gRi53cml0ZV9zaGlmdCgyLDApLEZ9ZnVuY3Rpb24gRGgoTSl7dmFyIEY9Z3IoNTEyKSxPPTAsSj1NLlRhcmdldDsi'@;
put 'ZmlsZTovLyI9PUouc2xpY2UoMCw3KSYmKEo9Si5zbGljZSg3KSk7dmFyIGllPUouaW5kZXhPZigiIyIpLHBlPWllPi0xPzMxOjIzO3N3aXRjaChKLmNoYXJBdCgwKSl7Y2FzZSIjIjpwZT0yODticmVhaztjYXNlIi4iOnBlJj0tM31GLndyaXRlX3NoaWZ0KDQsMiksRi53cml0ZV9zaGlmdCg0'@;
put 'LHBlKTt2YXIgeWU9WzgsNjgxNTgyNyw2NjE5MjM3LDQ4NDk3ODAsODNdO2ZvcihPPTA7Tzx5ZS5sZW5ndGg7KytPKUYud3JpdGVfc2hpZnQoNCx5ZVtPXSk7aWYoMjg9PXBlKWdjKEo9Si5zbGljZSgxKSxGKTtlbHNlIGlmKDImcGUpe2Zvcih5ZT0iZTAgYzkgZWEgNzkgZjkgYmEgY2UgMTEg'@;
put 'OGMgODIgMDAgYWEgMDAgNGIgYTkgMGIiLnNwbGl0KCIgIiksTz0wO088eWUubGVuZ3RoOysrTylGLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoeWVbT10sMTYpKTt2YXIgdmU9aWU+LTE/Si5zbGljZSgwLGllKTpKO2ZvcihGLndyaXRlX3NoaWZ0KDQsMioodmUubGVuZ3RoKzEpKSxPPTA7Tzx2'@;
put 'ZS5sZW5ndGg7KytPKUYud3JpdGVfc2hpZnQoMix2ZS5jaGFyQ29kZUF0KE8pKTtGLndyaXRlX3NoaWZ0KDIsMCksOCZwZSYmZ2MoaWU+LTE/Si5zbGljZShpZSsxKToiIixGKX1lbHNle2Zvcih5ZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNw'@;
put 'bGl0KCIgIiksTz0wO088eWUubGVuZ3RoOysrTylGLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoeWVbT10sMTYpKTtmb3IodmFyIE1lPTA7Ii4uLyI9PUouc2xpY2UoMypNZSwzKk1lKzMpfHwiLi5cXCI9PUouc2xpY2UoMypNZSwzKk1lKzMpOykrK01lO2ZvcihGLndyaXRlX3NoaWZ0KDIsTWUp'@;
put 'LEYud3JpdGVfc2hpZnQoNCxKLmxlbmd0aC0zKk1lKzEpLE89MDtPPEoubGVuZ3RoLTMqTWU7KytPKUYud3JpdGVfc2hpZnQoMSwyNTUmSi5jaGFyQ29kZUF0KE8rMypNZSkpO2ZvcihGLndyaXRlX3NoaWZ0KDEsMCksRi53cml0ZV9zaGlmdCgyLDY1NTM1KSxGLndyaXRlX3NoaWZ0KDIsNTcw'@;
put 'MDUpLE89MDtPPDY7KytPKUYud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gRi5zbGljZSgwLEYubCl9ZnVuY3Rpb24gajEoTSl7cmV0dXJuW00ucmVhZF9zaGlmdCgxKSxNLnJlYWRfc2hpZnQoMSksTS5yZWFkX3NoaWZ0KDEpLE0ucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gR3UoTSxGKXt2YXIg'@;
put 'Tz1qMShNKTtyZXR1cm4gT1szXT0wLE99ZnVuY3Rpb24gUGMoTSl7cmV0dXJue3I6TS5yZWFkX3NoaWZ0KDIpLGM6TS5yZWFkX3NoaWZ0KDIpLGl4ZmU6TS5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBKMChNLEYsTyxKKXtyZXR1cm4gSnx8KEo9Z3IoNikpLEoud3JpdGVfc2hpZnQoMixNKSxK'@;
put 'LndyaXRlX3NoaWZ0KDIsRiksSi53cml0ZV9zaGlmdCgyLE98fDApLEp9ZnVuY3Rpb24gQjEoTSxGLE8pe3ZhciBKPU8uYmlmZj44PzQ6MjtyZXR1cm5bTS5yZWFkX3NoaWZ0KEopLE0ucmVhZF9zaGlmdChKLCJpIiksTS5yZWFkX3NoaWZ0KEosImkiKV19ZnVuY3Rpb24gem8oTSl7cmV0dXJu'@;
put 'W00ucmVhZF9zaGlmdCgyKSxMdShNKV19ZnVuY3Rpb24gZTEoTSl7dmFyIEY9TS5yZWFkX3NoaWZ0KDIpLE89TS5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOk0ucmVhZF9zaGlmdCgyKSxyOkZ9LGU6e2M6TS5yZWFkX3NoaWZ0KDIpLHI6T319fWZ1bmN0aW9uIE9hKE0sRil7cmV0dXJuIEZ8'@;
put 'fChGPWdyKDgpKSxGLndyaXRlX3NoaWZ0KDIsTS5zLnIpLEYud3JpdGVfc2hpZnQoMixNLmUuciksRi53cml0ZV9zaGlmdCgyLE0ucy5jKSxGLndyaXRlX3NoaWZ0KDIsTS5lLmMpLEZ9ZnVuY3Rpb24gQWgoTSl7dmFyIEY9TS5yZWFkX3NoaWZ0KDIpLE89TS5yZWFkX3NoaWZ0KDIpO3JldHVy'@;
put 'bntzOntjOk0ucmVhZF9zaGlmdCgxKSxyOkZ9LGU6e2M6TS5yZWFkX3NoaWZ0KDEpLHI6T319fXZhciBlbD1BaDtmdW5jdGlvbiBOMihNKXtNLmwrPTQ7dmFyIEY9TS5yZWFkX3NoaWZ0KDIpLE89TS5yZWFkX3NoaWZ0KDIpLEo9TS5yZWFkX3NoaWZ0KDIpO3JldHVybiBNLmwrPTEyLFtPLEYs'@;
put 'Sl19ZnVuY3Rpb24gUGwoTSl7TS5sKz0yLE0ubCs9TS5yZWFkX3NoaWZ0KDIpfXZhciBZMT17MDpQbCw0OlBsLDU6UGwsNjpQbCw3OmZ1bmN0aW9uIGljKE0pe3JldHVybiBNLmwrPTQsTS5jZj1NLnJlYWRfc2hpZnQoMikse319LDg6UGwsOTpQbCwxMDpQbCwxMTpQbCwxMjpQbCwxMzpmdW5j'@;
put 'dGlvbiByYyhNKXt2YXIgRj17fTtyZXR1cm4gTS5sKz00LE0ubCs9MTYsRi5mU2hhcmVkTm90ZT1NLnJlYWRfc2hpZnQoMiksTS5sKz00LEZ9LDE0OlBsLDE1OlBsLDE2OlBsLDE3OlBsLDE4OlBsLDE5OlBsLDIwOlBsLDIxOk4yfTtmdW5jdGlvbiBTYShNLEYpe3ZhciBPPXtCSUZGVmVyOjAs'@;
put 'ZHQ6MH07c3dpdGNoKE8uQklGRlZlcj1NLnJlYWRfc2hpZnQoMiksKEYtPTIpPj0yJiYoTy5kdD1NLnJlYWRfc2hpZnQoMiksTS5sLT0yKSxPLkJJRkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVs'@;
put 'dDppZihGPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIrTy5CSUZGVmVyKX1yZXR1cm4gTS5yZWFkX3NoaWZ0KEYpLE99ZnVuY3Rpb24gTGgoTSxGLE8pe3ZhciBKPTE1MzYsaWU9MTY7c3dpdGNoKE8uYm9va1R5cGUpe2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpicmVh'@;
put 'aztjYXNlImJpZmY1IjpKPTEyODAsaWU9ODticmVhaztjYXNlImJpZmY0IjpKPTQsaWU9NjticmVhaztjYXNlImJpZmYzIjpKPTMsaWU9NjticmVhaztjYXNlImJpZmYyIjpKPTIsaWU9NDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgQklGRiB2ZXJzaW9uIil9'@;
put 'dmFyIHBlPWdyKGllKTtyZXR1cm4gcGUud3JpdGVfc2hpZnQoMixKKSxwZS53cml0ZV9zaGlmdCgyLEYpLGllPjQmJnBlLndyaXRlX3NoaWZ0KDIsMjkyODIpLGllPjYmJnBlLndyaXRlX3NoaWZ0KDIsMTk5NyksaWU+OCYmKHBlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLHBlLndyaXRlX3NoaWZ0'@;
put 'KDIsMSkscGUud3JpdGVfc2hpZnQoMiwxNzk4KSxwZS53cml0ZV9zaGlmdCgyLDApKSxwZX1mdW5jdGlvbiB0dShNLEYpe3ZhciBPPSFGfHxGLmJpZmY+PTg/MjoxLEo9Z3IoOCtPKk0ubmFtZS5sZW5ndGgpO0oud3JpdGVfc2hpZnQoNCxNLnBvcyksSi53cml0ZV9zaGlmdCgxLE0uaHN8fDAp'@;
put 'LEoud3JpdGVfc2hpZnQoMSxNLmR0KSxKLndyaXRlX3NoaWZ0KDEsTS5uYW1lLmxlbmd0aCksRi5iaWZmPj04JiZKLndyaXRlX3NoaWZ0KDEsMSksSi53cml0ZV9zaGlmdChPKk0ubmFtZS5sZW5ndGgsTS5uYW1lLEYuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciBpZT1KLnNsaWNlKDAs'@;
put 'Si5sKTtyZXR1cm4gaWUubD1KLmwsaWV9ZnVuY3Rpb24gX24oTSl7cmV0dXJuIE0ucmVhZF9zaGlmdCg0KSxTbChNKX1mdW5jdGlvbiBMaShNKXtyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpLGZjKE0pfWZ1bmN0aW9uIE5zKE0sRixPKXtyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpLEJJKE0sMCxPKX1m'@;
put 'dW5jdGlvbiBfYyhNLEYsTyl7dmFyIEo9MDtPJiYyPT1PLmJpZmZ8fChKPU0ucmVhZF9zaGlmdCgyKSk7dmFyIGllPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gTyYmMj09Ty5iaWZmJiYoSj0xLShpZT4+MTUpLGllJj0zMjc2NyksW3tVbnN5bmNlZDoxJkosRHlaZXJvOigyJkopPj4xLEV4QXNj'@;
put 'Oig0JkopPj4yLEV4RHNjOig4JkopPj4zfSxpZV19ZnVuY3Rpb24gcUEoTSxGLE8sSil7dmFyIGllPU8mJjU9PU8uYmlmZjtKfHwoSj1ncihpZT8zK0YubGVuZ3RoOjUrMipGLmxlbmd0aCkpLEoud3JpdGVfc2hpZnQoMixNKSxKLndyaXRlX3NoaWZ0KGllPzE6MixGLmxlbmd0aCksaWV8fEou'@;
put 'd3JpdGVfc2hpZnQoMSwxKSxKLndyaXRlX3NoaWZ0KChpZT8xOjIpKkYubGVuZ3RoLEYsaWU/InNiY3MiOiJ1dGYxNmxlIik7dmFyIHBlPUoubGVuZ3RoPkoubD9KLnNsaWNlKDAsSi5sKTpKO3JldHVybiBudWxsPT1wZS5sJiYocGUubD1wZS5sZW5ndGgpLHBlfXZhciBEZD13dTtmdW5jdGlv'@;
put 'biB0XyhNLEYsTyl7dmFyIEo9TS5sK0YsaWU9OCE9Ty5iaWZmJiZPLmJpZmY/Mjo0LHBlPU0ucmVhZF9zaGlmdChpZSkseWU9TS5yZWFkX3NoaWZ0KGllKSx2ZT1NLnJlYWRfc2hpZnQoMiksTWU9TS5yZWFkX3NoaWZ0KDIpO3JldHVybiBNLmw9Six7czp7cjpwZSxjOnZlfSxlOntyOnllLGM6'@;
put 'TWV9fX1mdW5jdGlvbiBVcChNLEYsTyxKKXt2YXIgcGU9IU98fCFPLmJpZmZ8fDg9PU8uYmlmZjtKfHwoSj1ncihPJiY1PT1PLmJpZmY/MTY6MjApKSxKLndyaXRlX3NoaWZ0KDIscGUmJk8uY2VsbFN0eWxlcyYmTS5mb250SWQmJihNLmZvbnRJZDw0P00uZm9udElkOk0uZm9udElkKzEpfHww'@;
put 'KTt2YXIgeWU9MTtNLnByb3RlY3Rpb24mJihNLnByb3RlY3Rpb24uZWRpdGFibGUmJih5ZSY9LTIpLE0ucHJvdGVjdGlvbi5oaWRkZW4mJih5ZXw9MikpLE0uc3R5bGU/KEoud3JpdGVfc2hpZnQoMixNLm51bUZtdElkfHwwKSxKLndyaXRlX3NoaWZ0KDIsNjU1MjR8eWUpKTooSi53cml0ZV9z'@;
put 'aGlmdCgyLE0ubnVtRm10SWR8fDApLEoud3JpdGVfc2hpZnQoMixGPDw0fHllKSk7dmFyIHZlPU0uYWxpZ25tZW50fHx7fTtpZihwZSl7dmFyIE1lPTAsamU9MDt0NC5pbmRleE9mKHZlLmhvcml6b250YWwpPi0xJiYoTWV8PXQ0LmluZGV4T2YodmUuaG9yaXpvbnRhbCkpLHZlLndyYXBUZXh0'@;
put 'JiYoTWV8PTgpLHI1LmluZGV4T2YodmUudmVydGljYWwpPi0xP01lfD1yNS5pbmRleE9mKHZlLnZlcnRpY2FsKTw8NDpudWxsPT12ZS52ZXJ0aWNhbCYmKE1lfD0zMiksSi53cml0ZV9zaGlmdCgxLE1lKSxKLndyaXRlX3NoaWZ0KDEsMCksdmUuc2hyaW5rVG9GaXQmJihqZXw9MTYpLEoud3Jp'@;
put 'dGVfc2hpZnQoMixqZSk7dmFyIFllPW51bGw7bnVsbCE9TS5ib3JkZXJJZCYmKFllPU8uQm9yZGVycyYmTy5Cb3JkZXJzW00uYm9yZGVySWR8fDBdfHx7fSk7dmFyIHFlPTAsaXQ9MCxodD0wO1llJiYobnVsbCE9WWUubGVmdCYmWWUubGVmdC5zdHlsZSYmKHFlfD0oaHQ9cjEuaW5kZXhPZihZ'@;
put 'ZS5sZWZ0LnN0eWxlKSk+LTE/aHQ6MCksbnVsbCE9WWUucmlnaHQmJlllLnJpZ2h0LnN0eWxlJiYocWV8PSgoaHQ9cjEuaW5kZXhPZihZZS5yaWdodC5zdHlsZSkpPi0xP2h0OjApPDw0KSxudWxsIT1ZZS50b3AmJlllLnRvcC5zdHlsZSYmKGl0fD0oaHQ9cjEuaW5kZXhPZihZZS50b3Auc3R5'@;
put 'bGUpKT4tMT9odDowKSxudWxsIT1ZZS5ib3R0b20mJlllLmJvdHRvbS5zdHlsZSYmKGl0fD0oKGh0PXIxLmluZGV4T2YoWWUuYm90dG9tLnN0eWxlKSk+LTE/aHQ6MCk8PDQpKSxKLndyaXRlX3NoaWZ0KDEscWUpLEoud3JpdGVfc2hpZnQoMSxpdCksSi53cml0ZV9zaGlmdCgyLDApLEoud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSxKLndyaXRlX3NoaWZ0KDEsMCk7dmFyIGt0PTAsdXQ9Ty5GaWxscyYmTy5GaWxsc1tNLmZpbGxJZHx8MF18fHt9Oyh1dC5mZ0NvbG9yfHx1dC5iZ0NvbG9yKSYmKGt0fD00KSxKLndyaXRlX3NoaWZ0KDEsa3QpO3ZhciB2dD0wO3Z0fD1DMyh1dC5mZ0NvbG9yLDY1KSx2'@;
put 'dHw9QzModXQuYmdDb2xvciw2NSk8PDcsSi53cml0ZV9zaGlmdCgyLHZ0KX1lbHNlIEoud3JpdGVfc2hpZnQoNCwwKSxKLndyaXRlX3NoaWZ0KDQsMCksSi53cml0ZV9zaGlmdCgyLDApO3JldHVybiBKfWZ1bmN0aW9uIHAzKE0sRixPKXt2YXIgSj1QYyhNKTsoMj09Ty5iaWZmfHw5PT1GKSYm'@;
put 'KytNLmw7dmFyIGllPWZ1bmN0aW9uIENhKE0pe3ZhciBGPU0ucmVhZF9zaGlmdCgxKTtyZXR1cm4gMT09PU0ucmVhZF9zaGlmdCgxKT9GOjE9PT1GfShNKTtyZXR1cm4gSi52YWw9aWUsSi50PSEwPT09aWV8fCExPT09aWU/ImIiOiJlIixKfXZhciBJTT1mdW5jdGlvbiBIMihNLEYsTyl7cmV0'@;
put 'dXJuIDA9PT1GPyIiOnd1KE0sMCxPKX07ZnVuY3Rpb24gaV8oTSxGLE8pe3ZhciBpZSxKPU0ucmVhZF9zaGlmdCgyKSxwZT17ZkJ1aWx0SW46MSZKLGZXYW50QWR2aXNlOko+Pj4xJjEsZldhbnRQaWN0Oko+Pj4yJjEsZk9sZTpKPj4+MyYxLGZPbGVMaW5rOko+Pj40JjEsY2Y6Sj4+PjUmMTAy'@;
put 'MyxmSWNvbjpKPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09Ty5zYmNjaCYmKGllPWZ1bmN0aW9uIGgzKE0sRixPKXtNLmwrPTQ7dmFyIEo9TS5sKyhGLT00KSxpZT1wbyhNLDAsTykscGU9TS5yZWFkX3NoaWZ0KDIpO2lmKHBlIT09KEotPU0ubCkpdGhyb3cgbmV3IEVycm9yKCJNYWxmb3JtZWQg'@;
put 'QWRkaW5VZGY6IHBhZGRpbmcgPSAiK0orIiAhPSAiK3BlKTtyZXR1cm4gTS5sKz1wZSxpZX0oTSxGLTIsTykpLHBlLmJvZHk9aWV8fE0ucmVhZF9zaGlmdChGLTIpLCJzdHJpbmciPT10eXBlb2YgaWUmJihwZS5OYW1lPWllKSxwZX12YXIgUUE9WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwi'@;
put 'X3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1RpdGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hs'@;
put 'bm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gb18oTSxGLE8pe3ZhciBKPU0ubCtGLGllPU0ucmVhZF9zaGlmdCgyKSxwZT1NLnJlYWRfc2hpZnQoMSkseWU9TS5yZWFk'@;
put 'X3NoaWZ0KDEpLHZlPU0ucmVhZF9zaGlmdChPJiYyPT1PLmJpZmY/MToyKSxNZT0wOyghT3x8Ty5iaWZmPj01KSYmKDUhPU8uYmlmZiYmKE0ubCs9MiksTWU9TS5yZWFkX3NoaWZ0KDIpLDU9PU8uYmlmZiYmKE0ubCs9MiksTS5sKz00KTt2YXIgamU9amEoTSx5ZSxPKTszMiZpZSYmKGplPVFB'@;
put 'W2plLmNoYXJDb2RlQXQoMCldKTt2YXIgWWU9Si1NLmw7TyYmMj09Ty5iaWZmJiYtLVllO3ZhciBxZT1KIT1NLmwmJjAhPT12ZSYmWWU+MD9mdW5jdGlvbiBsVyhNLEYsTyxKKXt2YXIgeWUsaWU9TS5sK0YscGU9VzEoTSxKLE8pO3JldHVybiBpZSE9PU0ubCYmKHllPUQzKE0saWUtTS5sLHBl'@;
put 'LE8pKSxbcGUseWVdfShNLFllLE8sdmUpOltdO3JldHVybntjaEtleTpwZSxOYW1lOmplLGl0YWI6TWUscmdjZTpxZX19ZnVuY3Rpb24gUzYoTSxGLE8pe2lmKE8uYmlmZjw4KXJldHVybiBmdW5jdGlvbiBzXyhNLEYsTyl7Mz09TVtNLmwrMV0mJk1bTS5sXSsrO3ZhciBKPXBvKE0sMCxPKTty'@;
put 'ZXR1cm4gMz09Si5jaGFyQ29kZUF0KDApP0ouc2xpY2UoMSk6Sn0oTSwwLE8pO2Zvcih2YXIgSj1bXSxpZT1NLmwrRixwZT1NLnJlYWRfc2hpZnQoTy5iaWZmPjg/NDoyKTswIT1wZS0tOylKLnB1c2goQjEoTSwwLE8pKTtpZihNLmwhPWllKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNo'@;
put 'ZWV0OiAiK00ubCsiICE9ICIraWUpO3JldHVybiBKfWZ1bmN0aW9uIGs2KE0sRixPKXt2YXIgSj1lbChNLDYpO3N3aXRjaChPLmJpZmYpe2Nhc2UgMjpNLmwrKyxGLT03O2JyZWFrO2Nhc2UgMzpjYXNlIDQ6TS5sKz0yLEYtPTg7YnJlYWs7ZGVmYXVsdDpNLmwrPTYsRi09MTJ9cmV0dXJuW0os'@;
put 'ekMoTSxGLE8pXX12YXIgT009W107ZnVuY3Rpb24gckwoTSl7dmFyIEY9Z3IoMjQpLE89aHMoTVswXSk7Ri53cml0ZV9zaGlmdCgyLE8uciksRi53cml0ZV9zaGlmdCgyLE8uciksRi53cml0ZV9zaGlmdCgyLE8uYyksRi53cml0ZV9zaGlmdCgyLE8uYyk7Zm9yKHZhciBKPSJkMCBjOSBlYSA3'@;
put 'OSBmOSBiYSBjZSAxMSA4YyA4MiAwMCBhYSAwMCA0YiBhOSAwYiIuc3BsaXQoIiAiKSxpZT0wO2llPDE2OysraWUpRi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEpbaWVdLDE2KSk7cmV0dXJuIHgoW0YsRGgoTVsxXSldKX1mdW5jdGlvbiBvTChNKXt2YXIgRj1NWzFdLlRvb2x0aXAsTz1ncigx'@;
put 'MCsyKihGLmxlbmd0aCsxKSk7Ty53cml0ZV9zaGlmdCgyLDIwNDgpO3ZhciBKPWhzKE1bMF0pO08ud3JpdGVfc2hpZnQoMixKLnIpLE8ud3JpdGVfc2hpZnQoMixKLnIpLE8ud3JpdGVfc2hpZnQoMixKLmMpLE8ud3JpdGVfc2hpZnQoMixKLmMpO2Zvcih2YXIgaWU9MDtpZTxGLmxlbmd0aDsr'@;
put 'K2llKU8ud3JpdGVfc2hpZnQoMixGLmNoYXJDb2RlQXQoaWUpKTtyZXR1cm4gTy53cml0ZV9zaGlmdCgyLDApLE99ZnVuY3Rpb24gYV8oTSxGLE8pe2lmKCFPLmNlbGxTdHlsZXMpcmV0dXJuIEZzKE0sRik7dmFyIEo9TyYmTy5iaWZmPj0xMj80OjIsaWU9TS5yZWFkX3NoaWZ0KEopLHBlPU0u'@;
put 'cmVhZF9zaGlmdChKKSx5ZT1NLnJlYWRfc2hpZnQoSiksdmU9TS5yZWFkX3NoaWZ0KEopLE1lPU0ucmVhZF9zaGlmdCgyKTsyPT1KJiYoTS5sKz0yKTt2YXIgamU9e3M6aWUsZTpwZSx3OnllLGl4ZmU6dmUsZmxhZ3M6TWV9O3JldHVybihPLmJpZmY+PTV8fCFPLmJpZmYpJiYoamUubGV2ZWw9'@;
put 'TWU+PjgmNyksamV9T01bOF09ZnVuY3Rpb24oTSxGKXt2YXIgTz1NLmwrRjtNLmwrPTEwO3ZhciBKPU0ucmVhZF9zaGlmdCgyKTtNLmwrPTQsTS5sKz0yLE0ubCs9MixNLmwrPTIsTS5sKz00O3ZhciBpZT1NLnJlYWRfc2hpZnQoMSk7cmV0dXJuIE0ubCs9aWUsTS5sPU8se2ZtdDpKfX07dmFy'@;
put 'IFJaPVBjLEZNPUVoLE91PWtsO3ZhciBWMj1mdW5jdGlvbigpe3ZhciBNPXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIs'@;
put 'MTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0MzcsMTM6NDM3LDE0Ojg1MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4'@;
put 'NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4NTAsNjQ6ODUyLDc3OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4'@;
put 'NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sRj1DZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEsMTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3'@;
put 'Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyN30pO2Z1bmN0aW9uIGllKE1lLGplKXt2YXIgWWU9'@;
put 'amV8fHt9O3JldHVybiBZZS5kYXRlTkZ8fChZZS5kYXRlTkY9Inl5eXltbWRkIiksd2goZnVuY3Rpb24gSihNZSxqZSl7dmFyIFllPVtdLHFlPUcoMSk7c3dpdGNoKGplLnR5cGUpe2Nhc2UiYmFzZTY0IjpxZT1MKHNlLmRlY29kZShNZSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpxZT1MKE1lKTti'@;
put 'cmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6cWU9TWV9WnMocWUsMCk7dmFyIGl0PXFlLnJlYWRfc2hpZnQoMSksaHQ9ISEoMTM2Jml0KSxrdD0hMSx1dD0hMTtzd2l0Y2goaXQpe2Nhc2UgMjpjYXNlIDM6Y2FzZSAxMzE6Y2FzZSAxMzk6Y2FzZSAyNDU6YnJlYWs7Y2FzZSA0ODpjYXNl'@;
put 'IDQ5Omt0PSEwLGh0PSEwO2JyZWFrO2Nhc2UgMTQwOnV0PSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5zdXBwb3J0ZWQgVmVyc2lvbjogIitpdC50b1N0cmluZygxNikpfXZhciB2dD0wLFB0PTUyMTsyPT1pdCYmKHZ0PXFlLnJlYWRfc2hpZnQoMikpLHFlLmwrPTMs'@;
put 'MiE9aXQmJih2dD1xZS5yZWFkX3NoaWZ0KDQpKSx2dD4xMDQ4NTc2JiYodnQ9MWU2KSwyIT1pdCYmKFB0PXFlLnJlYWRfc2hpZnQoMikpO3ZhciBEdD1xZS5yZWFkX3NoaWZ0KDIpLEF0PWplLmNvZGVwYWdlfHwxMjUyOzIhPWl0JiYocWUubCs9MTYscWUucmVhZF9zaGlmdCgxKSwwIT09cWVb'@;
put 'cWUubF0mJihBdD1NW3FlW3FlLmxdXSkscWUubCs9MSxxZS5sKz0yKSx1dCYmKHFlLmwrPTM2KTtmb3IodmFyIFp0PVtdLGduPXt9LHFuPU1hdGgubWluKHFlLmxlbmd0aCwyPT1pdD81MjE6UHQtMTAtKGt0PzI2NDowKSksdW49dXQ/MzI6MTE7cWUubDxxbiYmMTMhPXFlW3FlLmxdOylzd2l0'@;
put 'Y2goZ249e30sZ24ubmFtZT1jcHRhYmxlLnV0aWxzLmRlY29kZShBdCxxZS5zbGljZShxZS5sLHFlLmwrdW4pKS5yZXBsYWNlKC9bXHUwMDAwXHJcbl0uKiQvZywiIikscWUubCs9dW4sZ24udHlwZT1TdHJpbmcuZnJvbUNoYXJDb2RlKHFlLnJlYWRfc2hpZnQoMSkpLDIhPWl0JiYhdXQmJihn'@;
put 'bi5vZmZzZXQ9cWUucmVhZF9zaGlmdCg0KSksZ24ubGVuPXFlLnJlYWRfc2hpZnQoMSksMj09aXQmJihnbi5vZmZzZXQ9cWUucmVhZF9zaGlmdCgyKSksZ24uZGVjPXFlLnJlYWRfc2hpZnQoMSksZ24ubmFtZS5sZW5ndGgmJlp0LnB1c2goZ24pLDIhPWl0JiYocWUubCs9dXQ/MTM6MTQpLGdu'@;
put 'LnR5cGUpe2Nhc2UiQiI6KCFrdHx8OCE9Z24ubGVuKSYmamUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitnbi5uYW1lKyI6Iitnbi50eXBlKTticmVhaztjYXNlIkciOmNhc2UiUCI6amUuV1RGJiZjb25zb2xlLmxvZygiU2tpcHBpbmcgIitnbi5uYW1lKyI6Iitnbi50eXBlKTticmVh'@;
put 'aztjYXNlIisiOmNhc2UiMCI6Y2FzZSJAIjpjYXNlIkMiOmNhc2UiRCI6Y2FzZSJGIjpjYXNlIkkiOmNhc2UiTCI6Y2FzZSJNIjpjYXNlIk4iOmNhc2UiTyI6Y2FzZSJUIjpjYXNlIlkiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIEZpZWxkIFR5cGU6ICIrZ24udHlw'@;
put 'ZSl9aWYoMTMhPT1xZVtxZS5sXSYmKHFlLmw9UHQtMSksMTMhPT1xZS5yZWFkX3NoaWZ0KDEpKXRocm93IG5ldyBFcnJvcigiREJGIFRlcm1pbmF0b3Igbm90IGZvdW5kICIrcWUubCsiICIrcWVbcWUubF0pO3FlLmw9UHQ7dmFyIEpuPTAsWW49MDtmb3IoWWVbMF09W10sWW49MDtZbiE9WnQu'@;
put 'bGVuZ3RoOysrWW4pWWVbMF1bWW5dPVp0W1luXS5uYW1lO2Zvcig7dnQtLSA+MDspaWYoNDIhPT1xZVtxZS5sXSlmb3IoKytxZS5sLFllWysrSm5dPVtdLFluPTAsWW49MDtZbiE9WnQubGVuZ3RoOysrWW4pe3ZhciBMbj1xZS5zbGljZShxZS5sLHFlLmwrWnRbWW5dLmxlbik7cWUubCs9WnRb'@;
put 'WW5dLmxlbixacyhMbiwwKTt2YXIgdHI9Y3B0YWJsZS51dGlscy5kZWNvZGUoQXQsTG4pO3N3aXRjaChadFtZbl0udHlwZSl7Y2FzZSJDIjp0ci50cmltKCkubGVuZ3RoJiYoWWVbSm5dW1luXT10ci5yZXBsYWNlKC9ccyskLywiIikpO2JyZWFrO2Nhc2UiRCI6WWVbSm5dW1luXT04PT09dHIu'@;
put 'bGVuZ3RoP25ldyBEYXRlKCt0ci5zbGljZSgwLDQpLCt0ci5zbGljZSg0LDYpLTEsK3RyLnNsaWNlKDYsOCkpOnRyO2JyZWFrO2Nhc2UiRiI6WWVbSm5dW1luXT1wYXJzZUZsb2F0KHRyLnRyaW0oKSk7YnJlYWs7Y2FzZSIrIjpjYXNlIkkiOlllW0puXVtZbl09dXQ/MjE0NzQ4MzY0OF5Mbi5y'@;
put 'ZWFkX3NoaWZ0KC00LCJpIik6TG4ucmVhZF9zaGlmdCg0LCJpIik7YnJlYWs7Y2FzZSJMIjpzd2l0Y2godHIudHJpbSgpLnRvVXBwZXJDYXNlKCkpe2Nhc2UiWSI6Y2FzZSJUIjpZZVtKbl1bWW5dPSEwO2JyZWFrO2Nhc2UiTiI6Y2FzZSJGIjpZZVtKbl1bWW5dPSExO2JyZWFrO2Nhc2UiIjpj'@;
put 'YXNlIj8iOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJEQkYgVW5yZWNvZ25pemVkIEw6fCIrdHIrInwiKX1icmVhaztjYXNlIk0iOmlmKCFodCl0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbmV4cGVjdGVkIE1FTU8gZm9yIHR5cGUgIitpdC50b1N0cmluZygxNikpO1llW0puXVtZbl09'@;
put 'IiMjTUVNTyMjIisodXQ/cGFyc2VJbnQodHIudHJpbSgpLDEwKTpMbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIk4iOih0cj10ci5yZXBsYWNlKC9cdTAwMDAvZywiIikudHJpbSgpKSYmIi4iIT10ciYmKFllW0puXVtZbl09K3RyfHwwKTticmVhaztjYXNlIkAiOlllW0puXVtZbl09bmV3'@;
put 'IERhdGUoTG4ucmVhZF9zaGlmdCgtOCwiZiIpLTYyMTM1NjgzMmU1KTticmVhaztjYXNlIlQiOlllW0puXVtZbl09bmV3IERhdGUoODY0ZTUqKExuLnJlYWRfc2hpZnQoNCktMjQ0MDU4OCkrTG4ucmVhZF9zaGlmdCg0KSk7YnJlYWs7Y2FzZSJZIjpZZVtKbl1bWW5dPUxuLnJlYWRfc2hpZnQo'@;
put 'NCwiaSIpLzFlNDticmVhaztjYXNlIk8iOlllW0puXVtZbl09LUxuLnJlYWRfc2hpZnQoLTgsImYiKTticmVhaztjYXNlIkIiOmlmKGt0JiY4PT1adFtZbl0ubGVuKXtZZVtKbl1bWW5dPUxuLnJlYWRfc2hpZnQoOCwiZiIpO2JyZWFrfWNhc2UiRyI6Y2FzZSJQIjpMbi5sKz1adFtZbl0ubGVu'@;
put 'O2JyZWFrO2Nhc2UiMCI6aWYoIl9OdWxsRmxhZ3MiPT09WnRbWW5dLm5hbWUpYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBkYXRhIHR5cGUgIitadFtZbl0udHlwZSl9fWVsc2UgcWUubCs9RHQ7aWYoMiE9aXQmJnFlLmw8cWUubGVuZ3RoJiYyNiE9cWVb'@;
put 'cWUubCsrXSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBFT0YgTWFya2VyIG1pc3NpbmcgIisocWUubC0xKSsiIG9mICIrcWUubGVuZ3RoKyIgIitxZVtxZS5sLTFdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGplJiZqZS5zaGVldFJvd3MmJihZZT1ZZS5zbGljZSgwLGplLnNoZWV0Um93cykpLFllfShN'@;
put 'ZSxZZSksWWUpfXZhciB5ZT17Qjo4LEM6MjUwLEw6MSxEOjgsIj8iOjAsIiI6MH07cmV0dXJue3ZlcnNpb25zOlsyLDMsNDgsNDksMTMxLDEzOSwxNDAsMjQ1XSx0b193b3JrYm9vazpmdW5jdGlvbiBwZShNZSxqZSl7dHJ5e3JldHVybiBwMChpZShNZSxqZSksamUpfWNhdGNoKFllKXtpZihq'@;
put 'ZSYmamUuV1RGKXRocm93IFllfXJldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LHRvX3NoZWV0OmllLGZyb21fc2hlZXQ6ZnVuY3Rpb24gdmUoTWUsamUpe3ZhciBZZT1qZXx8e307aWYoK1llLmNvZGVwYWdlPj0wJiZCKCtZZS5jb2RlcGFnZSksInN0cmluZyI9PVllLnR5cGUpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBxZT1SbCgpLGl0PVYzKE1lLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksaHQ9aXRbMF0sa3Q9aXQuc2xpY2UoMSksdXQ9MCx2dD0wLFB0PTAsRHQ9MTtmb3IodXQ9MDt1dDxodC5sZW5ndGg7'@;
put 'Kyt1dClpZihudWxsIT11dCl7aWYoKytQdCwibnVtYmVyIj09dHlwZW9mIGh0W3V0XSYmKGh0W3V0XT1odFt1dF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIGh0W3V0XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBuYW1lICIraHRbdXRdKyIgfCIrdHlwZW9m'@;
put 'IGh0W3V0XSsifCIpO2lmKGh0LmluZGV4T2YoaHRbdXRdKSE9PXV0KWZvcih2dD0wO3Z0PDEwMjQ7Kyt2dClpZigtMT09aHQuaW5kZXhPZihodFt1dF0rIl8iK3Z0KSl7aHRbdXRdKz0iXyIrdnQ7YnJlYWt9fXZhciBBdD1ibyhNZVsiIXJlZiJdKSxadD1bXTtmb3IodXQ9MDt1dDw9QXQuZS5j'@;
put 'LUF0LnMuYzsrK3V0KXt2YXIgZ249W107Zm9yKHZ0PTA7dnQ8a3QubGVuZ3RoOysrdnQpbnVsbCE9a3RbdnRdW3V0XSYmZ24ucHVzaChrdFt2dF1bdXRdKTtpZigwIT1nbi5sZW5ndGgmJm51bGwhPWh0W3V0XSl7dmFyIHFuPSIiLHVuPSIiO2Zvcih2dD0wO3Z0PGduLmxlbmd0aDsrK3Z0KXtz'@;
put 'd2l0Y2godHlwZW9mIGduW3Z0XSl7Y2FzZSJudW1iZXIiOnVuPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDp1bj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjp1bj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOnVuPWduW3Z0XWluc3RhbmNlb2YgRGF0ZT8iRCI6IkMifWlmKCJDIj09KHFu'@;
put 'PXFuJiZxbiE9dW4/IkMiOnVuKSlicmVha31EdCs9eWVbcW5dfHwwLFp0W3V0XT1xbn1lbHNlIFp0W3V0XT0iPyJ9dmFyIEpuPXFlLm5leHQoMzIpO2ZvcihKbi53cml0ZV9zaGlmdCg0LDMxODkwMjU3NiksSm4ud3JpdGVfc2hpZnQoNCxrdC5sZW5ndGgpLEpuLndyaXRlX3NoaWZ0KDIsMjk2'@;
put 'KzMyKlB0KSxKbi53cml0ZV9zaGlmdCgyLER0KSx1dD0wO3V0PDQ7Kyt1dClKbi53cml0ZV9zaGlmdCg0LDApO2ZvcihKbi53cml0ZV9zaGlmdCg0LCgrRltEXXx8Myk8PDgpLHV0PTAsdnQ9MDt1dDxodC5sZW5ndGg7Kyt1dClpZihudWxsIT1odFt1dF0pe3ZhciBZbj1xZS5uZXh0KDMyKSxM'@;
put 'bj0oaHRbdXRdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTtZbi53cml0ZV9zaGlmdCgxLExuLCJzYmNzIiksWW4ud3JpdGVfc2hpZnQoMSwiPyI9PVp0W3V0XT8iQyI6WnRbdXRdLCJzYmNzIiksWW4ud3JpdGVfc2hpZnQoNCx2dCksWW4ud3JpdGVf'@;
put 'c2hpZnQoMSx5ZVtadFt1dF1dfHwwKSxZbi53cml0ZV9zaGlmdCgxLDApLFluLndyaXRlX3NoaWZ0KDEsMiksWW4ud3JpdGVfc2hpZnQoNCwwKSxZbi53cml0ZV9zaGlmdCgxLDApLFluLndyaXRlX3NoaWZ0KDQsMCksWW4ud3JpdGVfc2hpZnQoNCwwKSx2dCs9eWVbWnRbdXRdXXx8MH12YXIg'@;
put 'dHI9cWUubmV4dCgyNjQpO2Zvcih0ci53cml0ZV9zaGlmdCg0LDEzKSx1dD0wO3V0PDY1OysrdXQpdHIud3JpdGVfc2hpZnQoNCwwKTtmb3IodXQ9MDt1dDxrdC5sZW5ndGg7Kyt1dCl7dmFyIHJyPXFlLm5leHQoRHQpO2Zvcihyci53cml0ZV9zaGlmdCgxLDApLHZ0PTA7dnQ8aHQubGVuZ3Ro'@;
put 'OysrdnQpaWYobnVsbCE9aHRbdnRdKXN3aXRjaChadFt2dF0pe2Nhc2UiTCI6cnIud3JpdGVfc2hpZnQoMSxudWxsPT1rdFt1dF1bdnRdPzYzOmt0W3V0XVt2dF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6cnIud3JpdGVfc2hpZnQoOCxrdFt1dF1bdnRdfHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpr'@;
put 'dFt1dF1bdnRdPyhyci53cml0ZV9zaGlmdCg0LCgiMDAwMCIra3RbdXRdW3Z0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxyci53cml0ZV9zaGlmdCgyLCgiMDAiKyhrdFt1dF1bdnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwic2JjcyIpLHJyLndyaXRlX3NoaWZ0KDIs'@;
put 'KCIwMCIra3RbdXRdW3Z0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpyci53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciBVbj1TdHJpbmcoa3RbdXRdW3Z0XXx8IiIpO2Zvcihyci53cml0ZV9zaGlmdCgxLFVuLCJzYmNzIiksUHQ9MDtQ'@;
put 'dDwyNTAtVW4ubGVuZ3RoOysrUHQpcnIud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBxZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLHFlLmVuZCgpfX19KCksZl89ZnVuY3Rpb24oKXt2YXIgTT17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhjMiIsREE6MTk1LEhBOiJceGM0IixKQTox'@;
put 'OTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixCVToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJc'@;
put 'eGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFvOiJceGYyIixCbzoiXHhmMyIsQ286Ilx4'@;
put 'ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6'@;
put 'MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6'@;
put 'MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LEY9bmV3IFJlZ0V4cCgiXHgxYk4oIithdChNKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20iKSxPPWZ1bmN0aW9uKGl0LGh0KXt2YXIg'@;
put 'a3Q9TVtodF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBrdD9RKGt0KTprdH0sSj1mdW5jdGlvbihpdCxodCxrdCl7dmFyIHV0PWh0LmNoYXJDb2RlQXQoMCktMzI8PDR8a3QuY2hhckNvZGVBdCgwKS00ODtyZXR1cm4gNTk9PXV0P2l0OlEodXQpfTtmdW5jdGlvbiBwZShpdCxodCl7dmFyIHRy'@;
put 'LGt0PWl0LnNwbGl0KC9bXG5ccl0rLyksdXQ9LTEsdnQ9LTEsUHQ9MCxEdD0wLEF0PVtdLFp0PVtdLGduPW51bGwscW49e30sdW49W10sSm49W10sWW49W10sTG49MDtmb3IoK2h0LmNvZGVwYWdlPj0wJiZCKCtodC5jb2RlcGFnZSk7UHQhPT1rdC5sZW5ndGg7KytQdCl7TG49MDt2YXIgcGks'@;
put 'cnI9a3RbUHRdLnRyaW0oKS5yZXBsYWNlKC9ceDFCKFtceDIwLVx4MkZdKShbXHgzMC1ceDNGXSkvZyxKKS5yZXBsYWNlKEYsTyksVW49cnIucmVwbGFjZSgvOzsvZywiXDAiKS5zcGxpdCgiOyIpLm1hcChmdW5jdGlvbihTaSl7cmV0dXJuIFNpLnJlcGxhY2UoL1x1MDAwMC9nLCI7Iil9KTtp'@;
put 'Zihyci5sZW5ndGg+MClzd2l0Y2goVW5bMF0pe2Nhc2UiSUQiOmNhc2UiRSI6Y2FzZSJCIjpjYXNlIk8iOmNhc2UiVyI6YnJlYWs7Y2FzZSJQIjoiUCI9PVVuWzFdLmNoYXJBdCgwKSYmWnQucHVzaChyci5zbGljZSgzKS5yZXBsYWNlKC87Oy9nLCI7IikpO2JyZWFrO2Nhc2UiQyI6dmFyIE9p'@;
put 'PSExLE5pPSExLGRpPSExLF9yPSExLEFuPS0xLE1yPS0xO2ZvcihEdD0xO0R0PFVuLmxlbmd0aDsrK0R0KXN3aXRjaChVbltEdF0uY2hhckF0KDApKXtjYXNlIkEiOmNhc2UiRyI6YnJlYWs7Y2FzZSJYIjp2dD1wYXJzZUludChVbltEdF0uc2xpY2UoMSkpLTEsTmk9ITA7YnJlYWs7Y2FzZSJZ'@;
put 'Ijpmb3IodXQ9cGFyc2VJbnQoVW5bRHRdLnNsaWNlKDEpKS0xLE5pfHwodnQ9MCksdHI9QXQubGVuZ3RoO3RyPD11dDsrK3RyKUF0W3RyXT1bXTticmVhaztjYXNlIksiOiciJz09PShwaT1VbltEdF0uc2xpY2UoMSkpLmNoYXJBdCgwKT9waT1waS5zbGljZSgxLHBpLmxlbmd0aC0xKToiVFJV'@;
put 'RSI9PT1waT9waT0hMDoiRkFMU0UiPT09cGk/cGk9ITE6aXNOYU4oQm4ocGkpKT9pc05hTih0bihwaSkuZ2V0RGF0ZSgpKXx8KHBpPUZ0KHBpKSk6KHBpPUJuKHBpKSxudWxsIT09Z24mJkMuaXNfZGF0ZShnbikmJihwaT1kdChwaSkpKSx0eXBlb2YgY3B0YWJsZTwidSImJiJzdHJpbmciPT10'@;
put 'eXBlb2YgcGkmJiJzdHJpbmciIT0oaHR8fHt9KS50eXBlJiYoaHR8fHt9KS5jb2RlcGFnZSYmKHBpPWNwdGFibGUudXRpbHMuZGVjb2RlKGh0LmNvZGVwYWdlLHBpKSksT2k9ITA7YnJlYWs7Y2FzZSJFIjpfcj0hMDt2YXIgb3I9bDQoVW5bRHRdLnNsaWNlKDEpLHtyOnV0LGM6dnR9KTtBdFt1'@;
put 'dF1bdnRdPVtBdFt1dF1bdnRdLG9yXTticmVhaztjYXNlIlMiOmRpPSEwLEF0W3V0XVt2dF09W0F0W3V0XVt2dF0sIlM1UyJdO2JyZWFrO2Nhc2UiUiI6QW49cGFyc2VJbnQoVW5bRHRdLnNsaWNlKDEpKS0xO2JyZWFrO2Nhc2UiQyI6TXI9cGFyc2VJbnQoVW5bRHRdLnNsaWNlKDEpKS0xO2Jy'@;
put 'ZWFrO2RlZmF1bHQ6aWYoaHQmJmh0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK3JyKX1pZihPaSYmKEF0W3V0XVt2dF0mJjI9PUF0W3V0XVt2dF0ubGVuZ3RoP0F0W3V0XVt2dF1bMF09cGk6QXRbdXRdW3Z0XT1waSxnbj1udWxsKSxkaSl7aWYoX3IpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBoYXZlIG93biBmb3JtdWxhIik7dmFyIFRuPUFuPi0xJiZBdFtBbl1bTXJdO2lmKCFUbnx8IVRuWzFdKXRocm93IG5ldyBFcnJvcigiU1lMSyBzaGFyZWQgZm9ybXVsYSBjYW5ub3QgZmluZCBiYXNlIik7QXRbdXRdW3Z0XVsxXT1F'@;
put 'QyhUblsxXSx7cjp1dC1BbixjOnZ0LU1yfSl9YnJlYWs7Y2FzZSJGIjp2YXIgQ3I9MDtmb3IoRHQ9MTtEdDxVbi5sZW5ndGg7KytEdClzd2l0Y2goVW5bRHRdLmNoYXJBdCgwKSl7Y2FzZSJYIjp2dD1wYXJzZUludChVbltEdF0uc2xpY2UoMSkpLTEsKytDcjticmVhaztjYXNlIlkiOmZvcih1'@;
put 'dD1wYXJzZUludChVbltEdF0uc2xpY2UoMSkpLTEsdHI9QXQubGVuZ3RoO3RyPD11dDsrK3RyKUF0W3RyXT1bXTticmVhaztjYXNlIk0iOkxuPXBhcnNlSW50KFVuW0R0XS5zbGljZSgxKSkvMjA7YnJlYWs7Y2FzZSJGIjpjYXNlIkciOmNhc2UiUyI6Y2FzZSJEIjpjYXNlIk4iOmJyZWFrO2Nh'@;
put 'c2UiUCI6Z249WnRbcGFyc2VJbnQoVW5bRHRdLnNsaWNlKDEpKV07YnJlYWs7Y2FzZSJXIjpmb3IoWW49VW5bRHRdLnNsaWNlKDEpLnNwbGl0KCIgIiksdHI9cGFyc2VJbnQoWW5bMF0sMTApO3RyPD1wYXJzZUludChZblsxXSwxMCk7Kyt0cilMbj1wYXJzZUludChZblsyXSwxMCksSm5bdHIt'@;
put 'MV09MD09PUxuP3toaWRkZW46ITB9Ont3Y2g6TG59LCR1KEpuW3RyLTFdKTticmVhaztjYXNlIkMiOkpuW3Z0PXBhcnNlSW50KFVuW0R0XS5zbGljZSgxKSktMV18fChKblt2dF09e30pO2JyZWFrO2Nhc2UiUiI6dW5bdXQ9cGFyc2VJbnQoVW5bRHRdLnNsaWNlKDEpKS0xXXx8KHVuW3V0XT17'@;
put 'fSksTG4+MD8odW5bdXRdLmhwdD1Mbix1blt1dF0uaHB4PVoxKExuKSk6MD09PUxuJiYodW5bdXRdLmhpZGRlbj0hMCk7YnJlYWs7ZGVmYXVsdDppZihodCYmaHQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrcnIpfUNyPDEmJihnbj1udWxsKTticmVhaztkZWZhdWx0'@;
put 'OmlmKGh0JiZodC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitycil9fXJldHVybiB1bi5sZW5ndGg+MCYmKHFuWyIhcm93cyJdPXVuKSxKbi5sZW5ndGg+MCYmKHFuWyIhY29scyJdPUpuKSxodCYmaHQuc2hlZXRSb3dzJiYoQXQ9QXQuc2xpY2UoMCxodC5zaGVldFJv'@;
put 'd3MpKSxbQXQscW5dfWZ1bmN0aW9uIHllKGl0LGh0KXt2YXIga3Q9ZnVuY3Rpb24gaWUoaXQsaHQpe3N3aXRjaChodC50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIHBlKHNlLmRlY29kZShpdCksaHQpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gcGUoaXQsaHQpO2Nhc2UiYnVmZmVyIjpyZXR1cm4g'@;
put 'cGUoaXQudG9TdHJpbmcoImJpbmFyeSIpLGh0KTtjYXNlImFycmF5IjpyZXR1cm4gcGUoUnQoaXQpLGh0KX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIraHQudHlwZSl9KGl0LGh0KSx2dD1rdFsxXSxQdD13aChrdFswXSxodCk7cmV0dXJuIGF0KHZ0KS5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKER0KXtQdFtEdF09dnRbRHRdfSksUHR9ZnVuY3Rpb24gTWUoaXQsaHQsa3QsdXQpe3ZhciB2dD0iQztZIisoa3QrMSkrIjtYIisodXQrMSkrIjtLIjtzd2l0Y2goaXQudCl7Y2FzZSJuIjp2dCs9aXQudnx8MCxpdC5mJiYhaXQuRiYmKHZ0Kz0iO0UiK3gzKGl0LmYse3I6a3QsYzp1'@;
put 'dH0pKTticmVhaztjYXNlImIiOnZ0Kz1pdC52PyJUUlVFIjoiRkFMU0UiO2JyZWFrO2Nhc2UiZSI6dnQrPWl0Lnd8fGl0LnY7YnJlYWs7Y2FzZSJkIjp2dCs9JyInKyhpdC53fHxpdC52KSsnIic7YnJlYWs7Y2FzZSJzIjp2dCs9JyInK2l0LnYucmVwbGFjZSgvIi9nLCIiKSsnIid9cmV0dXJu'@;
put 'IHZ0fXJldHVybiBNWyJ8Il09MjU0LHt0b193b3JrYm9vazpmdW5jdGlvbiB2ZShpdCxodCl7cmV0dXJuIHAwKHllKGl0LGh0KSxodCl9LHRvX3NoZWV0OnllLGZyb21fc2hlZXQ6ZnVuY3Rpb24gcWUoaXQsaHQpe3ZhciBQdCxrdD1bIklEO1BTaGVldEpTO047RSJdLHV0PVtdLHZ0PWJvKGl0'@;
put 'WyIhcmVmIl0pLER0PUFycmF5LmlzQXJyYXkoaXQpLEF0PSJcclxuIjtrdC5wdXNoKCJQO1BHZW5lcmFsIiksa3QucHVzaCgiRjtQMDtERzBHODtNMjU1IiksaXRbIiFjb2xzIl0mJmZ1bmN0aW9uIGplKGl0LGh0KXtodC5mb3JFYWNoKGZ1bmN0aW9uKGt0LHV0KXt2YXIgdnQ9IkY7VyIrKHV0'@;
put 'KzEpKyIgIisodXQrMSkrIiAiO2t0LmhpZGRlbj92dCs9IjAiOigibnVtYmVyIj09dHlwZW9mIGt0LndpZHRoJiYha3Qud3B4JiYoa3Qud3B4PXFwKGt0LndpZHRoKSksIm51bWJlciI9PXR5cGVvZiBrdC53cHgmJiFrdC53Y2gmJihrdC53Y2g9S3Aoa3Qud3B4KSksIm51bWJlciI9PXR5cGVv'@;
put 'ZiBrdC53Y2gmJih2dCs9TWF0aC5yb3VuZChrdC53Y2gpKSksIiAiIT12dC5jaGFyQXQodnQubGVuZ3RoLTEpJiZpdC5wdXNoKHZ0KX0pfShrdCxpdFsiIWNvbHMiXSksaXRbIiFyb3dzIl0mJmZ1bmN0aW9uIFllKGl0LGh0KXtodC5mb3JFYWNoKGZ1bmN0aW9uKGt0LHV0KXt2YXIgdnQ9IkY7'@;
put 'IjtrdC5oaWRkZW4/dnQrPSJNMDsiOmt0LmhwdD92dCs9Ik0iKzIwKmt0LmhwdCsiOyI6a3QuaHB4JiYodnQrPSJNIisyMCpZMihrdC5ocHgpKyI7IiksdnQubGVuZ3RoPjImJml0LnB1c2godnQrIlIiKyh1dCsxKSl9KX0oa3QsaXRbIiFyb3dzIl0pLGt0LnB1c2goIkI7WSIrKHZ0LmUuci12'@;
put 'dC5zLnIrMSkrIjtYIisodnQuZS5jLXZ0LnMuYysxKSsiO0QiK1t2dC5zLmMsdnQucy5yLHZ0LmUuYyx2dC5lLnJdLmpvaW4oIiAiKSk7Zm9yKHZhciBadD12dC5zLnI7WnQ8PXZ0LmUucjsrK1p0KWZvcih2YXIgZ249dnQucy5jO2duPD12dC5lLmM7Kytnbil7dmFyIHFuPURpKHtyOlp0LGM6'@;
put 'Z259KTsoUHQ9RHQ/KGl0W1p0XXx8W10pW2duXTppdFtxbl0pJiYobnVsbCE9UHQudnx8UHQuZiYmIVB0LkYpJiZ1dC5wdXNoKE1lKFB0LDAsWnQsZ24pKX1yZXR1cm4ga3Quam9pbihBdCkrQXQrdXQuam9pbihBdCkrQXQrIkUiK0F0fX19KCksRTY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBGKHBl'@;
put 'LHllKXtmb3IodmFyIHZlPXBlLnNwbGl0KCJcbiIpLE1lPS0xLGplPS0xLFllPTAscWU9W107WWUhPT12ZS5sZW5ndGg7KytZZSlpZigiQk9UIiE9PXZlW1llXS50cmltKCkpe2lmKCEoTWU8MCkpe2Zvcih2YXIgaXQ9dmVbWWVdLnRyaW0oKS5zcGxpdCgiLCIpLGh0PWl0WzBdLGt0PWl0WzFd'@;
put 'LHV0PXZlWysrWWVdfHwiIjsxJih1dC5tYXRjaCgvWyJdL2cpfHxbXSkubGVuZ3RoJiZZZTx2ZS5sZW5ndGgtMTspdXQrPSJcbiIrdmVbKytZZV07c3dpdGNoKHV0PXV0LnRyaW0oKSwraHQpe2Nhc2UtMTppZigiQk9UIj09PXV0KXtxZVsrK01lXT1bXSxqZT0wO2NvbnRpbnVlfWlmKCJFT0Qi'@;
put 'IT09dXQpdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgRElGIHNwZWNpYWwgY29tbWFuZCAiK3V0KTticmVhaztjYXNlIDA6cWVbTWVdW2plXT0iVFJVRSI9PT11dHx8IkZBTFNFIiE9PXV0JiYoaXNOYU4oQm4oa3QpKT9pc05hTih0bihrdCkuZ2V0RGF0ZSgpKT9rdDpGdChrdCk6Qm4o'@;
put 'a3QpKSwrK2plO2JyZWFrO2Nhc2UgMToodXQ9KHV0PXV0LnNsaWNlKDEsdXQubGVuZ3RoLTEpKS5yZXBsYWNlKC8iIi9nLCciJykpJiZ1dC5tYXRjaCgvXj0iLioiJC8pJiYodXQ9dXQuc2xpY2UoMiwtMSkpLHFlW01lXVtqZSsrXT0iIiE9PXV0P3V0Om51bGx9aWYoIkVPRCI9PT11dClicmVh'@;
put 'a319ZWxzZSBxZVsrK01lXT1bXSxqZT0wO3JldHVybiB5ZSYmeWUuc2hlZXRSb3dzJiYocWU9cWUuc2xpY2UoMCx5ZS5zaGVldFJvd3MpKSxxZX1mdW5jdGlvbiBPKHBlLHllKXtyZXR1cm4gd2goZnVuY3Rpb24gTShwZSx5ZSl7c3dpdGNoKHllLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4g'@;
put 'RihzZS5kZWNvZGUocGUpLHllKTtjYXNlImJpbmFyeSI6cmV0dXJuIEYocGUseWUpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gRihwZS50b1N0cmluZygiYmluYXJ5IikseWUpO2Nhc2UiYXJyYXkiOnJldHVybiBGKFJ0KHBlKSx5ZSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAi'@;
put 'K3llLnR5cGUpfShwZSx5ZSkseWUpfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBKKHBlLHllKXtyZXR1cm4gcDAoTyhwZSx5ZSkseWUpfSx0b19zaGVldDpPLGZyb21fc2hlZXQ6ZnVuY3Rpb24oKXt2YXIgcGU9ZnVuY3Rpb24oTWUsamUsWWUscWUsaXQpe01lLnB1c2goamUpLE1lLnB1'@;
put 'c2goWWUrIiwiK3FlKSxNZS5wdXNoKCciJytpdC5yZXBsYWNlKC8iL2csJyIiJykrJyInKX0seWU9ZnVuY3Rpb24oTWUsamUsWWUscWUpe01lLnB1c2goamUrIiwiK1llKSxNZS5wdXNoKDE9PWplPyciJytxZS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnFlKX07cmV0dXJuIGZ1bmN0aW9uKE1l'@;
put 'KXt2YXIgcWUsamU9W10sWWU9Ym8oTWVbIiFyZWYiXSksaXQ9QXJyYXkuaXNBcnJheShNZSk7cGUoamUsIlRBQkxFIiwwLDEsInNoZWV0anMiKSxwZShqZSwiVkVDVE9SUyIsMCxZZS5lLnItWWUucy5yKzEsIiIpLHBlKGplLCJUVVBMRVMiLDAsWWUuZS5jLVllLnMuYysxLCIiKSxwZShqZSwi'@;
put 'REFUQSIsMCwwLCIiKTtmb3IodmFyIGh0PVllLnMucjtodDw9WWUuZS5yOysraHQpe3llKGplLC0xLDAsIkJPVCIpO2Zvcih2YXIga3Q9WWUucy5jO2t0PD1ZZS5lLmM7KytrdCl7dmFyIHV0PURpKHtyOmh0LGM6a3R9KTtpZihxZT1pdD8oTWVbaHRdfHxbXSlba3RdOk1lW3V0XSlzd2l0Y2go'@;
put 'cWUudCl7Y2FzZSJuIjp2YXIgdnQ9cWUudzshdnQmJm51bGwhPXFlLnYmJih2dD1xZS52KSxudWxsPT12dD95ZShqZSwxLDAscWUuZiYmIXFlLkY/Ij0iK3FlLmY6IiIpOnllKGplLDAsdnQsIlYiKTticmVhaztjYXNlImIiOnllKGplLDAscWUudj8xOjAscWUudj8iVFJVRSI6IkZBTFNFIik7'@;
put 'YnJlYWs7Y2FzZSJzIjp5ZShqZSwxLDAsaXNOYU4ocWUudik/cWUudjonPSInK3FlLnYrJyInKTticmVhaztjYXNlImQiOnFlLnd8fChxZS53PUMuZm9ybWF0KHFlLnp8fEMuX3RhYmxlWzE0XSxHZShGdChxZS52KSkpKSx5ZShqZSwwLHFlLncsIlYiKTticmVhaztkZWZhdWx0OnllKGplLDEs'@;
put 'MCwiIil9ZWxzZSB5ZShqZSwxLDAsIiIpfX1yZXR1cm4geWUoamUsLTEsMCwiRU9EIiksamUuam9pbigiXHJcbiIpfX0oKX19KCksWG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBNKHFlKXtyZXR1cm4gcWUucmVwbGFjZSgvXFxiL2csIlxcIikucmVwbGFjZSgvXFxjL2csIjoiKS5yZXBsYWNlKC9c'@;
put 'XG4vZywiXG4iKX1mdW5jdGlvbiBGKHFlKXtyZXR1cm4gcWUucmVwbGFjZSgvXFwvZywiXFxiIikucmVwbGFjZSgvOi9nLCJcXGMiKS5yZXBsYWNlKC9cbi9nLCJcXG4iKX1mdW5jdGlvbiBKKHFlLGl0KXtyZXR1cm4gd2goZnVuY3Rpb24gTyhxZSxpdCl7Zm9yKHZhciBodD1xZS5zcGxpdCgi'@;
put 'XG4iKSxrdD0tMSx1dD0tMSx2dD0wLFB0PVtdO3Z0IT09aHQubGVuZ3RoOysrdnQpe3ZhciBEdD1odFt2dF0udHJpbSgpLnNwbGl0KCI6Iik7aWYoImNlbGwiPT09RHRbMF0pe3ZhciBBdD1ocyhEdFsxXSk7aWYoUHQubGVuZ3RoPD1BdC5yKWZvcihrdD1QdC5sZW5ndGg7a3Q8PUF0LnI7Kytr'@;
put 'dClQdFtrdF18fChQdFtrdF09W10pO3N3aXRjaChrdD1BdC5yLHV0PUF0LmMsRHRbMl0pe2Nhc2UidCI6UHRba3RdW3V0XT1NKER0WzNdKTticmVhaztjYXNlInYiOlB0W2t0XVt1dF09K0R0WzNdO2JyZWFrO2Nhc2UidnRmIjp2YXIgWnQ9RHRbRHQubGVuZ3RoLTFdO2Nhc2UidnRjIjpQdFtr'@;
put 'dF1bdXRdPSJubCI9PT1EdFszXT8hIStEdFs0XTorRHRbNF0sInZ0ZiI9PUR0WzJdJiYoUHRba3RdW3V0XT1bUHRba3RdW3V0XSxadF0pfX19cmV0dXJuIGl0JiZpdC5zaGVldFJvd3MmJihQdD1QdC5zbGljZSgwLGl0LnNoZWV0Um93cykpLFB0fShxZSxpdCksaXQpfXZhciBwZT1bInNvY2lh'@;
put 'bGNhbGM6dmVyc2lvbjoxLjUiLCJNSU1FLVZlcnNpb246IDEuMCIsIkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT1Tb2NpYWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSJdLmpvaW4oIlxuIikseWU9WyItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xTYXZl'@;
put 'IiwiQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04Il0uam9pbigiXG4iKSsiXG4iLHZlPVsiIyBTb2NpYWxDYWxjIFNwcmVhZHNoZWV0IENvbnRyb2wgU2F2ZSIsInBhcnQ6c2hlZXQiXS5qb2luKCJcbiIpLE1lPSItLVNvY2lhbENhbGNTcHJlYWRzaGVldENvbnRyb2xT'@;
put 'YXZlLS0iO2Z1bmN0aW9uIGplKHFlKXtpZighcWV8fCFxZVsiIXJlZiJdKXJldHVybiIiO2Zvcih2YXIga3QsaXQ9W10saHQ9W10sdXQ9IiIsdnQ9SHMocWVbIiFyZWYiXSksUHQ9QXJyYXkuaXNBcnJheShxZSksRHQ9dnQucy5yO0R0PD12dC5lLnI7KytEdClmb3IodmFyIEF0PXZ0LnMuYztB'@;
put 'dDw9dnQuZS5jOysrQXQpaWYodXQ9RGkoe3I6RHQsYzpBdH0pLChrdD1QdD8ocWVbRHRdfHxbXSlbQXRdOnFlW3V0XSkmJm51bGwhPWt0LnYmJiJ6IiE9PWt0LnQpe3N3aXRjaChodD1bImNlbGwiLHV0LCJ0Il0sa3QudCl7Y2FzZSJzIjpjYXNlInN0ciI6aHQucHVzaChGKGt0LnYpKTticmVh'@;
put 'aztjYXNlIm4iOmt0LmY/KGh0WzJdPSJ2dGYiLGh0WzNdPSJuIixodFs0XT1rdC52LGh0WzVdPUYoa3QuZikpOihodFsyXT0idiIsaHRbM109a3Qudik7YnJlYWs7Y2FzZSJiIjpodFsyXT0idnQiKyhrdC5mPyJmIjoiYyIpLGh0WzNdPSJubCIsaHRbNF09a3Qudj8iMSI6IjAiLGh0WzVdPUYo'@;
put 'a3QuZnx8KGt0LnY/IlRSVUUiOiJGQUxTRSIpKTticmVhaztjYXNlImQiOnZhciBadD1HZShGdChrdC52KSk7aHRbMl09InZ0YyIsaHRbM109Im5kIixodFs0XT0iIitadCxodFs1XT1rdC53fHxDLmZvcm1hdChrdC56fHxDLl90YWJsZVsxNF0sWnQpO2JyZWFrO2Nhc2UiZSI6Y29udGludWV9'@;
put 'aXQucHVzaChodC5qb2luKCI6IikpfXJldHVybiBpdC5wdXNoKCJzaGVldDpjOiIrKHZ0LmUuYy12dC5zLmMrMSkrIjpyOiIrKHZ0LmUuci12dC5zLnIrMSkrIjp0dmY6MSIpLGl0LnB1c2goInZhbHVlZm9ybWF0OjE6dGV4dC13aWtpIiksaXQuam9pbigiXG4iKX1yZXR1cm57dG9fd29ya2Jv'@;
put 'b2s6ZnVuY3Rpb24gaWUocWUsaXQpe3JldHVybiBwMChKKHFlLGl0KSxpdCl9LHRvX3NoZWV0OkosZnJvbV9zaGVldDpmdW5jdGlvbiBZZShxZSl7cmV0dXJuW3BlLHllLHZlLHllLGplKHFlKSxNZV0uam9pbigiXG4iKX19fSgpLGoyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTShZZSxxZSxpdCxo'@;
put 'dCxrdCl7a3QucmF3P3FlW2l0XVtodF09WWU6IiI9PT1ZZXx8KHFlW2l0XVtodF09Wm4oWWUsa3QpP1puKFllLGt0KS52OlllKX12YXIgTz17NDQ6IiwiLDk6Ilx0Iiw1OToiOyJ9LEo9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIGllKFllKXtmb3IodmFyIHFlPXt9LGl0PSExLGh0PTAsa3Q9'@;
put 'MDtodDxZZS5sZW5ndGg7KytodCkzND09KGt0PVllLmNoYXJDb2RlQXQoaHQpKT9pdD0haXQ6IWl0JiZrdCBpbiBPJiYocWVba3RdPShxZVtrdF18fDApKzEpO2ZvcihodCBpbiBrdD1bXSxxZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocWUsaHQpJiZrdC5wdXNoKFtx'@;
put 'ZVtodF0saHRdKTtpZigha3QubGVuZ3RoKWZvcihodCBpbiBxZT1KKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxZSxodCkmJmt0LnB1c2goW3FlW2h0XSxodF0pO3JldHVybiBrdC5zb3J0KGZ1bmN0aW9uKHV0LHZ0KXtyZXR1cm4gdXRbMF0tdnRbMF18fEpbdXRbMV1d'@;
put 'LUpbdnRbMV1dfSksT1trdC5wb3AoKVsxXV19ZnVuY3Rpb24geWUoWWUscWUpe3JldHVybiFxZXx8IXFlLlBSTnx8InNlcD0iPT1ZZS5zbGljZSgwLDQpfHxZZS5pbmRleE9mKCJcdCIpPj0wfHxZZS5pbmRleE9mKCIsIik+PTB8fFllLmluZGV4T2YoIjsiKT49MD9mdW5jdGlvbiBwZShZZSxx'@;
put 'ZSl7dmFyIGl0PXFlfHx7fSxodD0iIjtudWxsIT10ZSYmbnVsbD09aXQuZGVuc2UmJihpdC5kZW5zZT10ZSk7dmFyIGt0PWl0LmRlbnNlP1tdOnt9LHV0PXtzOntjOjAscjowfSxlOntjOjAscjowfX07InNlcD0iPT1ZZS5zbGljZSgwLDQpPzEzPT1ZZS5jaGFyQ29kZUF0KDUpJiYxMD09WWUu'@;
put 'Y2hhckNvZGVBdCg2KT8oaHQ9WWUuY2hhckF0KDQpLFllPVllLnNsaWNlKDcpKToxMz09WWUuY2hhckNvZGVBdCg1KXx8MTA9PVllLmNoYXJDb2RlQXQoNSk/KGh0PVllLmNoYXJBdCg0KSxZZT1ZZS5zbGljZSg2KSk6aHQ9aWUoWWUuc2xpY2UoMCwxMDI0KSk6aHQ9aWUoWWUuc2xpY2UoMCwx'@;
put 'MDI0KSk7dmFyIHZ0PTAsUHQ9MCxEdD0wLEF0PTAsWnQ9MCxnbj1odC5jaGFyQ29kZUF0KDApLHFuPSExLHVuPTAsSm49WWUuY2hhckNvZGVBdCgwKTtZZT1ZZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBZbj1udWxsIT1pdC5kYXRlTkY/ZnVuY3Rpb24geGUoTSl7dmFyIEY9Im51bWJl'@;
put 'ciI9PXR5cGVvZiBNP0MuX3RhYmxlW01dOk07cmV0dXJuIEY9Ri5yZXBsYWNlKGhlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitGKyIkIil9KGl0LmRhdGVORik6bnVsbDtmdW5jdGlvbiBMbigpe3ZhciB0cj1ZZS5zbGljZShBdCxadCkscnI9e307aWYoJyInPT10ci5jaGFyQXQoMCkmJici'@;
put 'Jz09dHIuY2hhckF0KHRyLmxlbmd0aC0xKSYmKHRyPXRyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PXRyLmxlbmd0aClyci50PSJ6IjtlbHNlIGlmKGl0LnJhdylyci50PSJzIixyci52PXRyO2Vsc2UgaWYoMD09PXRyLnRyaW0oKS5sZW5ndGgpcnIudD0icyIscnIudj10'@;
put 'cjtlbHNlIGlmKDYxPT10ci5jaGFyQ29kZUF0KDApKTM0PT10ci5jaGFyQ29kZUF0KDEpJiYzND09dHIuY2hhckNvZGVBdCh0ci5sZW5ndGgtMSk/KHJyLnQ9InMiLHJyLnY9dHIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiBXWihNKXtyZXR1cm4gMSE9TS5sZW5n'@;
put 'dGh9KHRyKT8ocnIudD0ibiIscnIuZj10ci5zbGljZSgxKSk6KHJyLnQ9InMiLHJyLnY9dHIpO2Vsc2UgaWYoIlRSVUUiPT10cilyci50PSJiIixyci52PSEwO2Vsc2UgaWYoIkZBTFNFIj09dHIpcnIudD0iYiIscnIudj0hMTtlbHNlIGlmKGlzTmFOKER0PUJuKHRyKSkpaWYoIWlzTmFOKHRu'@;
put 'KHRyKS5nZXREYXRlKCkpfHxZbiYmdHIubWF0Y2goWW4pKXtyci56PWl0LmRhdGVORnx8Qy5fdGFibGVbMTRdO3ZhciBVbj0wO1luJiZ0ci5tYXRjaChZbikmJih0cj1mdW5jdGlvbiBPZShNLEYsTyl7dmFyIEo9LTEsaWU9LTEscGU9LTEseWU9LTEsdmU9LTEsTWU9LTE7KEYubWF0Y2goaGUp'@;
put 'fHxbXSkuZm9yRWFjaChmdW5jdGlvbihxZSxpdCl7dmFyIGh0PXBhcnNlSW50KE9baXQrMV0sMTApO3N3aXRjaChxZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpKPWh0O2JyZWFrO2Nhc2UiZCI6cGU9aHQ7YnJlYWs7Y2FzZSJoIjp5ZT1odDticmVhaztjYXNlInMiOk1lPWh0'@;
put 'O2JyZWFrO2Nhc2UibSI6eWU+PTA/dmU9aHQ6aWU9aHR9fSksTWU+PTAmJi0xPT12ZSYmaWU+PTAmJih2ZT1pZSxpZT0tMSk7dmFyIGplPSgiIisoSj49MD9KOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSkpLnNsaWNlKC00KSsiLSIrKCIwMCIrKGllPj0xP2llOjEpKS5zbGljZSgtMikrIi0i'@;
put 'KygiMDAiKyhwZT49MT9wZToxKSkuc2xpY2UoLTIpOzc9PWplLmxlbmd0aCYmKGplPSIwIitqZSksOD09amUubGVuZ3RoJiYoamU9IjIwIitqZSk7dmFyIFllPSgiMDAiKyh5ZT49MD95ZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisodmU+PTA/dmU6MCkpLnNsaWNlKC0yKSsiOiIrKCIwMCIr'@;
put 'KE1lPj0wP01lOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PXllJiYtMT09dmUmJi0xPT1NZT9qZTotMT09SiYmLTE9PWllJiYtMT09cGU/WWU6amUrIlQiK1llfSgwLGl0LmRhdGVORix0ci5tYXRjaChZbil8fFtdKSxVbj0xKSxpdC5jZWxsRGF0ZXM/KHJyLnQ9ImQiLHJyLnY9RnQodHIsVW4p'@;
put 'KToocnIudD0ibiIscnIudj1HZShGdCh0cixVbikpKSwhMSE9PWl0LmNlbGxUZXh0JiYocnIudz1DLmZvcm1hdChyci56LHJyLnYgaW5zdGFuY2VvZiBEYXRlP0dlKHJyLnYpOnJyLnYpKSxpdC5jZWxsTkZ8fGRlbGV0ZSByci56fWVsc2UgcnIudD0icyIscnIudj10cjtlbHNlIHJyLnQ9Im4i'@;
put 'LCExIT09aXQuY2VsbFRleHQmJihyci53PXRyKSxyci52PUR0O2lmKCJ6Ij09cnIudHx8KGl0LmRlbnNlPyhrdFt2dF18fChrdFt2dF09W10pLGt0W3Z0XVtQdF09cnIpOmt0W0RpKHtjOlB0LHI6dnR9KV09cnIpLEpuPVllLmNoYXJDb2RlQXQoQXQ9WnQrMSksdXQuZS5jPFB0JiYodXQuZS5j'@;
put 'PVB0KSx1dC5lLnI8dnQmJih1dC5lLnI9dnQpLHVuPT1nbikrK1B0O2Vsc2UgaWYoUHQ9MCwrK3Z0LGl0LnNoZWV0Um93cyYmaXQuc2hlZXRSb3dzPD12dClyZXR1cm4hMH1lOmZvcig7WnQ8WWUubGVuZ3RoOysrWnQpc3dpdGNoKHVuPVllLmNoYXJDb2RlQXQoWnQpKXtjYXNlIDM0OjM0PT09'@;
put 'Sm4mJihxbj0hcW4pO2JyZWFrO2Nhc2UgZ246Y2FzZSAxMDpjYXNlIDEzOmlmKCFxbiYmTG4oKSlicmVhayBlfXJldHVybiBadC1BdD4wJiZMbigpLGt0WyIhcmVmIl09QWkodXQpLGt0fShZZSxxZSk6d2goZnVuY3Rpb24gRihZZSxxZSl7dmFyIGl0PXFlfHx7fSxodD1bXTtpZighWWV8fDA9'@;
put 'PT1ZZS5sZW5ndGgpcmV0dXJuIGh0O2Zvcih2YXIga3Q9WWUuc3BsaXQoL1tcclxuXS8pLHV0PWt0Lmxlbmd0aC0xO3V0Pj0wJiYwPT09a3RbdXRdLmxlbmd0aDspLS11dDtmb3IodmFyIHZ0PTEwLFB0PTAsRHQ9MDtEdDw9dXQ7KytEdCktMT09KFB0PWt0W0R0XS5pbmRleE9mKCIgIikpP1B0'@;
put 'PWt0W0R0XS5sZW5ndGg6UHQrKyx2dD1NYXRoLm1heCh2dCxQdCk7Zm9yKER0PTA7RHQ8PXV0OysrRHQpe2h0W0R0XT1bXTt2YXIgQXQ9MDtmb3IoTShrdFtEdF0uc2xpY2UoMCx2dCkudHJpbSgpLGh0LER0LEF0LGl0KSxBdD0xO0F0PD0oa3RbRHRdLmxlbmd0aC12dCkvMTArMTsrK0F0KU0o'@;
put 'a3RbRHRdLnNsaWNlKHZ0KzEwKihBdC0xKSx2dCsxMCpBdCkudHJpbSgpLGh0LER0LEF0LGl0KX1yZXR1cm4gaXQuc2hlZXRSb3dzJiYoaHQ9aHQuc2xpY2UoMCxpdC5zaGVldFJvd3MpKSxodH0oWWUscWUpLHFlKX1mdW5jdGlvbiB2ZShZZSxxZSl7dmFyIGl0PSIiLGh0PSJzdHJpbmciPT1x'@;
put 'ZS50eXBlP1swLDAsMCwwXTpNNChZZSxxZSk7c3dpdGNoKHFlLnR5cGUpe2Nhc2UiYmFzZTY0IjppdD1zZS5kZWNvZGUoWWUpO2JyZWFrO2Nhc2UiYmluYXJ5IjpjYXNlInN0cmluZyI6aXQ9WWU7YnJlYWs7Y2FzZSJidWZmZXIiOml0PTY1MDAxPT1xZS5jb2RlcGFnZT9ZZS50b1N0cmluZygi'@;
put 'dXRmOCIpOnFlLmNvZGVwYWdlJiZ0eXBlb2YgY3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUocWUuY29kZXBhZ2UsWWUpOlllLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjppdD1SdChZZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2du'@;
put 'aXplZCB0eXBlICIrcWUudHlwZSl9cmV0dXJuIDIzOT09aHRbMF0mJjE4Nz09aHRbMV0mJjE5MT09aHRbMl0/aXQ9QmkoaXQuc2xpY2UoMykpOiJiaW5hcnkiPT1xZS50eXBlJiZ0eXBlb2YgY3B0YWJsZTwidSImJnFlLmNvZGVwYWdlJiYoaXQ9Y3B0YWJsZS51dGlscy5kZWNvZGUocWUuY29k'@;
put 'ZXBhZ2UsY3B0YWJsZS51dGlscy5lbmNvZGUoMjg1OTEsaXQpKSksInNvY2lhbGNhbGM6dmVyc2lvbjoiPT1pdC5zbGljZSgwLDE5KT9YbS50b19zaGVldCgic3RyaW5nIj09cWUudHlwZT9pdDpCaShpdCkscWUpOnllKGl0LHFlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gTWUoWWUs'@;
put 'cWUpe3JldHVybiBwMCh2ZShZZSxxZSkscWUpfSx0b19zaGVldDp2ZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIGplKFllKXtmb3IodmFyIGh0LHFlPVtdLGl0PWJvKFllWyIhcmVmIl0pLGt0PUFycmF5LmlzQXJyYXkoWWUpLHV0PWl0LnMucjt1dDw9aXQuZS5yOysrdXQpe2Zvcih2YXIgdnQ9W10s'@;
put 'UHQ9aXQucy5jO1B0PD1pdC5lLmM7KytQdCl7dmFyIER0PURpKHtyOnV0LGM6UHR9KTtpZigoaHQ9a3Q/KFllW3V0XXx8W10pW1B0XTpZZVtEdF0pJiZudWxsIT1odC52KXtmb3IodmFyIEF0PShodC53fHwoV3MoaHQpLGh0LncpfHwiIikuc2xpY2UoMCwxMCk7QXQubGVuZ3RoPDEwOylBdCs9'@;
put 'IiAiO3Z0LnB1c2goQXQrKDA9PT1QdD8iICI6IiIpKX1lbHNlIHZ0LnB1c2goIiAgICAgICAgICAiKX1xZS5wdXNoKHZ0LmpvaW4oIiIpKX1yZXR1cm4gcWUuam9pbigiXG4iKX19fSgpLFQ2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gTShBbixNcixvcil7aWYoQW4pe1pzKEFuLEFuLmx8fDApO2Zv'@;
put 'cih2YXIgVG49b3IuRW51bXx8ZGk7QW4ubDxBbi5sZW5ndGg7KXt2YXIgQ3I9QW4ucmVhZF9zaGlmdCgyKSxTaT1UbltDcl18fFRuWzY1NTM1XSxacj1Bbi5yZWFkX3NoaWZ0KDIpLFVpPUFuLmwrWnIsUm89U2kuZiYmU2kuZihBbixacixvcik7aWYoQW4ubD1VaSxNcihSbyxTaSxDcikpcmV0'@;
put 'dXJufX19ZnVuY3Rpb24gTyhBbixNcil7aWYoIUFuKXJldHVybiBBbjt2YXIgb3I9TXJ8fHt9O251bGwhPXRlJiZudWxsPT1vci5kZW5zZSYmKG9yLmRlbnNlPXRlKTt2YXIgVG49b3IuZGVuc2U/W106e30sQ3I9IlNoZWV0MSIsU2k9MCxacj17fSxVaT1bQ3JdLFJvPVtdLEZpPXtzOntyOjAs'@;
put 'YzowfSxlOntyOjAsYzowfX0sb3M9b3Iuc2hlZXRSb3dzfHwwO2lmKDI9PUFuWzJdKW9yLkVudW09ZGksTShBbixmdW5jdGlvbih2aSxCcyxFbil7c3dpdGNoKEVuKXtjYXNlIDA6b3IudmVycz12aSx2aT49NDA5NiYmKG9yLnFwcm89ITApO2JyZWFrO2Nhc2UgNjpGaT12aTticmVhaztjYXNl'@;
put 'IDE1OmNhc2UgNTE6b3IucXByb3x8KHZpWzFdLnY9dmlbMV0udi5zbGljZSgxKSk7Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTY6MTQ9PUVuJiYhKDExMiZ+dmlbMl0pJiYoMTUmdmlbMl0pPjEmJigxNSZ2aVsyXSk8MTUmJih2aVsxXS56PW9yLmRhdGVORnx8Qy5fdGFibGVbMTRdLG9yLmNlbGxE'@;
put 'YXRlcyYmKHZpWzFdLnQ9ImQiLHZpWzFdLnY9ZHQodmlbMV0udikpKTt2YXIgbXM9b3IuZGVuc2U/KFRuW3ZpWzBdLnJdfHxbXSlbdmlbMF0uY106VG5bRGkodmlbMF0pXTtpZihtcyl7bXMudD12aVsxXS50LG1zLnY9dmlbMV0udixudWxsIT12aVsxXS56JiYobXMuej12aVsxXS56KSxudWxs'@;
put 'IT12aVsxXS5mJiYobXMuZj12aVsxXS5mKTticmVha31vci5kZW5zZT8oVG5bdmlbMF0ucl18fChUblt2aVswXS5yXT1bXSksVG5bdmlbMF0ucl1bdmlbMF0uY109dmlbMV0pOlRuW0RpKHZpWzBdKV09dmlbMV19fSxvcik7ZWxzZXtpZigyNiE9QW5bMl0mJjE0IT1BblsyXSl0aHJvdyBuZXcg'@;
put 'RXJyb3IoIlVucmVjb2duaXplZCBMT1RVUyBCT0YgIitBblsyXSk7b3IuRW51bT1fciwxND09QW5bMl0mJihvci5xcHJvPSEwLEFuLmw9MCksTShBbixmdW5jdGlvbih2aSxCcyxFbil7c3dpdGNoKEVuKXtjYXNlIDIyOnZpWzFdLnY9dmlbMV0udi5zbGljZSgxKTtjYXNlIDIzOmNhc2UgMjQ6'@;
put 'Y2FzZSAyNTpjYXNlIDM3OmNhc2UgMzk6Y2FzZSA0MDppZih2aVszXT5TaSYmKFRuWyIhcmVmIl09QWkoRmkpLFpyW0NyXT1UbixUbj1vci5kZW5zZT9bXTp7fSxGaT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19LFVpLnB1c2goQ3I9IlNoZWV0IisoKFNpPXZpWzNdKSsxKSkpLG9zPjAmJnZp'@;
put 'WzBdLnI+PW9zKWJyZWFrO29yLmRlbnNlPyhUblt2aVswXS5yXXx8KFRuW3ZpWzBdLnJdPVtdKSxUblt2aVswXS5yXVt2aVswXS5jXT12aVsxXSk6VG5bRGkodmlbMF0pXT12aVsxXSxGaS5lLmM8dmlbMF0uYyYmKEZpLmUuYz12aVswXS5jKSxGaS5lLnI8dmlbMF0uciYmKEZpLmUucj12aVsw'@;
put 'XS5yKTticmVhaztjYXNlIDI3OnZpWzE0ZTNdJiYoUm9bdmlbMTRlM11bMF1dPXZpWzE0ZTNdWzFdKX19LG9yKX1pZihUblsiIXJlZiJdPUFpKEZpKSxacltDcl09VG4sIVJvLmxlbmd0aClyZXR1cm57U2hlZXROYW1lczpVaSxTaGVldHM6WnJ9O2Zvcih2YXIgbG89e30sRm89W10seG89MDt4'@;
put 'bzxSby5sZW5ndGg7Kyt4bylacltVaVt4b11dJiYoRm8ucHVzaChSb1t4b10pLGxvW1JvW3hvXV09WnJbVWlbeG9dXSk7cmV0dXJue1NoZWV0TmFtZXM6Rm8sU2hlZXRzOmxvfX1mdW5jdGlvbiBqZShBbixNcixvcil7dmFyIFRuPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIG9y'@;
put 'LnFwcm8mJjIwNzY4IT1vci52ZXJzPyhUblswXS5jPUFuLnJlYWRfc2hpZnQoMSksQW4ubCsrLFRuWzBdLnI9QW4ucmVhZF9zaGlmdCgyKSxBbi5sKz0yKTooVG5bMl09QW4ucmVhZF9zaGlmdCgxKSxUblswXS5jPUFuLnJlYWRfc2hpZnQoMiksVG5bMF0ucj1Bbi5yZWFkX3NoaWZ0KDIpKSxU'@;
put 'bn1mdW5jdGlvbiBZZShBbixNcixvcil7dmFyIFRuPUFuLmwrTXIsQ3I9amUoQW4sMCxvcik7aWYoQ3JbMV0udD0icyIsMjA3Njg9PW9yLnZlcnMpe0FuLmwrKzt2YXIgU2k9QW4ucmVhZF9zaGlmdCgxKTtyZXR1cm4gQ3JbMV0udj1Bbi5yZWFkX3NoaWZ0KFNpLCJ1dGY4IiksQ3J9cmV0dXJu'@;
put 'IG9yLnFwcm8mJkFuLmwrKyxDclsxXS52PUFuLnJlYWRfc2hpZnQoVG4tQW4ubCwiY3N0ciIpLENyfWZ1bmN0aW9uIHFlKEFuLE1yLG9yKXt2YXIgVG49Z3IoNytvci5sZW5ndGgpO1RuLndyaXRlX3NoaWZ0KDEsMjU1KSxUbi53cml0ZV9zaGlmdCgyLE1yKSxUbi53cml0ZV9zaGlmdCgyLEFu'@;
put 'KSxUbi53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIENyPTA7Q3I8VG4ubGVuZ3RoOysrQ3Ipe3ZhciBTaT1vci5jaGFyQ29kZUF0KENyKTtUbi53cml0ZV9zaGlmdCgxLFNpPj0xMjg/OTU6U2kpfXJldHVybiBUbi53cml0ZV9zaGlmdCgxLDApLFRufWZ1bmN0aW9uIGh0KEFuLE1yLG9yKXt2'@;
put 'YXIgVG49Z3IoNyk7cmV0dXJuIFRuLndyaXRlX3NoaWZ0KDEsMjU1KSxUbi53cml0ZV9zaGlmdCgyLE1yKSxUbi53cml0ZV9zaGlmdCgyLEFuKSxUbi53cml0ZV9zaGlmdCgyLG9yLCJpIiksVG59ZnVuY3Rpb24gdXQoQW4sTXIsb3Ipe3ZhciBUbj1ncigxMyk7cmV0dXJuIFRuLndyaXRlX3No'@;
put 'aWZ0KDEsMjU1KSxUbi53cml0ZV9zaGlmdCgyLE1yKSxUbi53cml0ZV9zaGlmdCgyLEFuKSxUbi53cml0ZV9zaGlmdCg4LG9yLCJmIiksVG59ZnVuY3Rpb24gUHQoQW4sTXIsb3Ipe3ZhciBUbj0zMjc2OCZNcjtyZXR1cm4gTXI9KFRuP0FuOjApKygoTXImPS0zMjc2OSk+PTgxOTI/TXItMTYz'@;
put 'ODQ6TXIpLChUbj8iIjoiJCIpKyhvcj9mbyhNcik6cnMoTXIpKX12YXIgQXQ9ezUxOlsiRkFMU0UiLDBdLDUyOlsiVFJVRSIsMF0sNzA6WyJMRU4iLDFdLDgwOlsiU1VNIiw2OV0sODE6WyJBVkVSQUdFQSIsNjldLDgyOlsiQ09VTlRBIiw2OV0sODM6WyJNSU5BIiw2OV0sODQ6WyJNQVhBIiw2'@;
put 'OV0sMTExOlsiVCIsMV19LFp0PVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiKyIsIi0iLCIqIiwiLyIsIl4iLCI9IiwiPD4iLCI8PSIsIj49IiwiPCIsIj4iLCIiLCIiLCIiLCIiLCImIiwiIiwiIiwiIiwiIiwiIiwiIiwiIl07ZnVuY3Rpb24gcW4oQW4pe3ZhciBNcj1be2M6MCxyOjB9'@;
put 'LHt0OiJuIix2OjB9LDBdO3JldHVybiBNclswXS5yPUFuLnJlYWRfc2hpZnQoMiksTXJbM109QW5bQW4ubCsrXSxNclswXS5jPUFuW0FuLmwrK10sTXJ9ZnVuY3Rpb24gSm4oQW4sTXIsb3IsVG4pe3ZhciBDcj1ncig2K1RuLmxlbmd0aCk7Q3Iud3JpdGVfc2hpZnQoMixBbiksQ3Iud3JpdGVf'@;
put 'c2hpZnQoMSxvciksQ3Iud3JpdGVfc2hpZnQoMSxNciksQ3Iud3JpdGVfc2hpZnQoMSwzOSk7Zm9yKHZhciBTaT0wO1NpPFRuLmxlbmd0aDsrK1NpKXt2YXIgWnI9VG4uY2hhckNvZGVBdChTaSk7Q3Iud3JpdGVfc2hpZnQoMSxacj49MTI4Pzk1OlpyKX1yZXR1cm4gQ3Iud3JpdGVfc2hpZnQo'@;
put 'MSwwKSxDcn1mdW5jdGlvbiBMbihBbixNcil7dmFyIG9yPXFuKEFuKSxUbj1Bbi5yZWFkX3NoaWZ0KDQpLENyPUFuLnJlYWRfc2hpZnQoNCksU2k9QW4ucmVhZF9zaGlmdCgyKTtpZig2NTUzNT09U2kpcmV0dXJuIDA9PT1UbiYmMzIyMTIyNTQ3Mj09PUNyPyhvclsxXS50PSJlIixvclsxXS52'@;
put 'PTE1KTowPT09VG4mJjM0ODk2NjA5Mjg9PT1Dcj8ob3JbMV0udD0iZSIsb3JbMV0udj00Mik6b3JbMV0udj0wLG9yO3ZhciBacj0zMjc2OCZTaTtyZXR1cm4gU2k9KDMyNzY3JlNpKS0xNjQ0NixvclsxXS52PSgxLTIqWnIpKihDcipNYXRoLnBvdygyLFNpKzMyKStUbipNYXRoLnBvdygyLFNp'@;
put 'KSksb3J9ZnVuY3Rpb24gdHIoQW4sTXIsb3IsVG4pe3ZhciBDcj1ncigxNCk7aWYoQ3Iud3JpdGVfc2hpZnQoMixBbiksQ3Iud3JpdGVfc2hpZnQoMSxvciksQ3Iud3JpdGVfc2hpZnQoMSxNciksMD09VG4pcmV0dXJuIENyLndyaXRlX3NoaWZ0KDQsMCksQ3Iud3JpdGVfc2hpZnQoNCwwKSxD'@;
put 'ci53cml0ZV9zaGlmdCgyLDY1NTM1KSxDcjt2YXIgU2k9MCxacj0wLFJvPTA7cmV0dXJuIFRuPDAmJihTaT0xLFRuPS1UbiksWnI9MHxNYXRoLmxvZzIoVG4pLDIxNDc0ODM2NDgmKFJvPShUbi89TWF0aC5wb3coMixaci0zMSkpPj4+MCl8fCgrK1pyLFJvPShUbi89Mik+Pj4wKSxUbi09Um8s'@;
put 'Um98PTIxNDc0ODM2NDgsUm8+Pj49MCxUbio9TWF0aC5wb3coMiwzMiksQ3Iud3JpdGVfc2hpZnQoNCxUbj4+PjApLENyLndyaXRlX3NoaWZ0KDQsUm8pLENyLndyaXRlX3NoaWZ0KDIsWnIrPTE2MzgzKyhTaT8zMjc2ODowKSksQ3J9ZnVuY3Rpb24gWHIoQW4sTXIpe3ZhciBvcj1xbihBbiks'@;
put 'VG49QW4ucmVhZF9zaGlmdCg4LCJmIik7cmV0dXJuIG9yWzFdLnY9VG4sb3J9ZnVuY3Rpb24gTmkoQW4sTXIpe3ZhciBvcj1ncig1K0FuLmxlbmd0aCk7b3Iud3JpdGVfc2hpZnQoMiwxNGUzKSxvci53cml0ZV9zaGlmdCgyLE1yKTtmb3IodmFyIFRuPTA7VG48QW4ubGVuZ3RoOysrVG4pe3Zh'@;
put 'ciBDcj1Bbi5jaGFyQ29kZUF0KFRuKTtvcltvci5sKytdPUNyPjEyNz85NTpDcn1yZXR1cm4gb3Jbb3IubCsrXT0wLG9yfXZhciBkaT17MDp7bjoiQk9GIixmOkphfSwxOntuOiJFT0YifSwyOntuOiJDQUxDTU9ERSJ9LDM6e246IkNBTENPUkRFUiJ9LDQ6e246IlNQTElUIn0sNTp7bjoiU1lO'@;
put 'QyJ9LDY6e246IlJBTkdFIixmOmZ1bmN0aW9uIHZlKEFuKXt2YXIgTXI9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTtyZXR1cm4gTXIucy5jPUFuLnJlYWRfc2hpZnQoMiksTXIucy5yPUFuLnJlYWRfc2hpZnQoMiksTXIuZS5jPUFuLnJlYWRfc2hpZnQoMiksTXIuZS5yPUFuLnJlYWRfc2hp'@;
put 'ZnQoMiksNjU1MzU9PU1yLnMuYyYmKE1yLnMuYz1Nci5lLmM9TXIucy5yPU1yLmUucj0wKSxNcn19LDc6e246IldJTkRPVzEifSw4OntuOiJDT0xXMSJ9LDk6e246IldJTlRXTyJ9LDEwOntuOiJDT0xXMiJ9LDExOntuOiJOQU1FIn0sMTI6e246IkJMQU5LIn0sMTM6e246IklOVEVHRVIiLGY6'@;
put 'ZnVuY3Rpb24gaXQoQW4sTXIsb3Ipe3ZhciBUbj1qZShBbiwwLG9yKTtyZXR1cm4gVG5bMV0udj1Bbi5yZWFkX3NoaWZ0KDIsImkiKSxUbn19LDE0OntuOiJOVU1CRVIiLGY6ZnVuY3Rpb24ga3QoQW4sTXIsb3Ipe3ZhciBUbj1qZShBbiwwLG9yKTtyZXR1cm4gVG5bMV0udj1Bbi5yZWFkX3No'@;
put 'aWZ0KDgsImYiKSxUbn19LDE1OntuOiJMQUJFTCIsZjpZZX0sMTY6e246IkZPUk1VTEEiLGY6ZnVuY3Rpb24gdnQoQW4sTXIsb3Ipe3ZhciBUbj1Bbi5sK01yLENyPWplKEFuLDAsb3IpO2lmKENyWzFdLnY9QW4ucmVhZF9zaGlmdCg4LCJmIiksb3IucXBybylBbi5sPVRuO2Vsc2V7dmFyIFNp'@;
put 'PUFuLnJlYWRfc2hpZnQoMik7KGZ1bmN0aW9uIGduKEFuLE1yKXtacyhBbiwwKTtmb3IodmFyIG9yPVtdLFRuPTAsQ3I9IiIsU2k9IiI7QW4ubDxBbi5sZW5ndGg7KXt2YXIgWnI9QW5bQW4ubCsrXTtzd2l0Y2goWnIpe2Nhc2UgMDpvci5wdXNoKEFuLnJlYWRfc2hpZnQoOCwiZiIpKTticmVh'@;
put 'aztjYXNlIDE6U2k9UHQoTXJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxDcj1QdChNclswXS5yLEFuLnJlYWRfc2hpZnQoMiksITEpLG9yLnB1c2goU2krQ3IpO2JyZWFrO2Nhc2UgMjp2YXIgVWk9UHQoTXJbMF0uYyxBbi5yZWFkX3NoaWZ0KDIpLCEwKSxSbz1QdChNclswXS5yLEFuLnJl'@;
put 'YWRfc2hpZnQoMiksITEpO1NpPVB0KE1yWzBdLmMsQW4ucmVhZF9zaGlmdCgyKSwhMCksQ3I9UHQoTXJbMF0ucixBbi5yZWFkX3NoaWZ0KDIpLCExKSxvci5wdXNoKFVpK1JvKyI6IitTaStDcik7YnJlYWs7Y2FzZSAzOmlmKEFuLmw8QW4ubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJy'@;
put 'b3IoIldLMSBwcmVtYXR1cmUgZm9ybXVsYSBlbmQiKTticmVhaztjYXNlIDQ6b3IucHVzaCgiKCIrb3IucG9wKCkrIikiKTticmVhaztjYXNlIDU6b3IucHVzaChBbi5yZWFkX3NoaWZ0KDIpKTticmVhaztjYXNlIDY6Zm9yKHZhciBGaT0iIjtacj1BbltBbi5sKytdOylGaSs9U3RyaW5nLmZy'@;
put 'b21DaGFyQ29kZShacik7b3IucHVzaCgnIicrRmkucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSA4Om9yLnB1c2goIi0iK29yLnBvcCgpKTticmVhaztjYXNlIDIzOm9yLnB1c2goIisiK29yLnBvcCgpKTticmVhaztjYXNlIDIyOm9yLnB1c2goIk5PVCgiK29yLnBvcCgpKyIp'@;
put 'Iik7YnJlYWs7Y2FzZSAyMDpjYXNlIDIxOnZhciBvcz1vci5wb3AoKSxsbz1vci5wb3AoKTtvci5wdXNoKFsiQU5EIiwiT1IiXVtaci0yMF0rIigiK2xvKyIsIitvcysiKSIpO2JyZWFrO2RlZmF1bHQ6aWYoWnI8MzImJlp0W1pyXSlvcz1vci5wb3AoKSxsbz1vci5wb3AoKSxvci5wdXNoKGxv'@;
put 'K1p0W1pyXStvcyk7ZWxzZXtpZighQXRbWnJdKXJldHVybiBacjw9Nz9jb25zb2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitaci50b1N0cmluZygxNikpOlpyPD0yND9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgb3AgIitaci50b1N0cmluZygxNikpOlpyPD0zMD9jb25z'@;
put 'b2xlLmVycm9yKCJXSzEgaW52YWxpZCBvcGNvZGUgIitaci50b1N0cmluZygxNikpOlpyPD0xMTU/Y29uc29sZS5lcnJvcigiV0sxIHVuc3VwcG9ydGVkIGZ1bmN0aW9uIG9wY29kZSAiK1pyLnRvU3RyaW5nKDE2KSk6Y29uc29sZS5lcnJvcigiV0sxIHVucmVjb2duaXplZCBvcGNvZGUgIita'@;
put 'ci50b1N0cmluZygxNikpO2lmKDY5PT0oVG49QXRbWnJdWzFdKSYmKFRuPUFuW0FuLmwrK10pLFRuPm9yLmxlbmd0aClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgMHgiK1pyLnRvU3RyaW5nKDE2KSsiOnwiK29yLmpvaW4oInwiKSsifCIpO3ZhciBG'@;
put 'bz1vci5zbGljZSgtVG4pO29yLmxlbmd0aC09VG4sb3IucHVzaChBdFtacl1bMF0rIigiK0ZvLmpvaW4oIiwiKSsiKSIpfX19MT09b3IubGVuZ3RoP01yWzFdLmY9IiIrb3JbMF06Y29uc29sZS5lcnJvcigiV0sxIGJhZCBmb3JtdWxhIHBhcnNlIHwiK29yLmpvaW4oInwiKSsifCIpfSkoQW4u'@;
put 'c2xpY2UoQW4ubCxBbi5sK1NpKSxDciksQW4ubCs9U2l9cmV0dXJuIENyfX0sMjQ6e246IlRBQkxFIn0sMjU6e246Ik9SQU5HRSJ9LDI2OntuOiJQUkFOR0UifSwyNzp7bjoiU1JBTkdFIn0sMjg6e246IkZSQU5HRSJ9LDI5OntuOiJLUkFOR0UxIn0sMzI6e246IkhSQU5HRSJ9LDM1OntuOiJL'@;
put 'UkFOR0UyIn0sMzY6e246IlBST1RFQyJ9LDM3OntuOiJGT09URVIifSwzODp7bjoiSEVBREVSIn0sMzk6e246IlNFVFVQIn0sNDA6e246Ik1BUkdJTlMifSw0MTp7bjoiTEFCRUxGTVQifSw0Mjp7bjoiVElUTEVTIn0sNDM6e246IlNIRUVUSlMifSw0NTp7bjoiR1JBUEgifSw0Njp7bjoiTkdS'@;
put 'QVBIIn0sNDc6e246IkNBTENDT1VOVCJ9LDQ4OntuOiJVTkZPUk1BVFRFRCJ9LDQ5OntuOiJDVVJTT1JXMTIifSw1MDp7bjoiV0lORE9XIn0sNTE6e246IlNUUklORyIsZjpZZX0sNTU6e246IlBBU1NXT1JEIn0sNTY6e246IkxPQ0tFRCJ9LDYwOntuOiJRVUVSWSJ9LDYxOntuOiJRVUVSWU5B'@;
put 'TUUifSw2Mjp7bjoiUFJJTlQifSw2Mzp7bjoiUFJJTlROQU1FIn0sNjQ6e246IkdSQVBIMiJ9LDY1OntuOiJHUkFQSE5BTUUifSw2Njp7bjoiWk9PTSJ9LDY3OntuOiJTWU1TUExJVCJ9LDY4OntuOiJOU1JPV1MifSw2OTp7bjoiTlNDT0xTIn0sNzA6e246IlJVTEVSIn0sNzE6e246Ik5OQU1F'@;
put 'In0sNzI6e246IkFDT01NIn0sNzM6e246IkFNQUNSTyJ9LDc0OntuOiJQQVJTRSJ9LDEwMjp7bjoiUFJBTkdFUz8/In0sMTAzOntuOiJSUkFOR0VTPz8ifSwxMDQ6e246IkZOQU1FPz8ifSwxMDU6e246Ik1SQU5HRVM/PyJ9LDY1NTM1OntuOiIifX0sX3I9ezA6e246IkJPRiJ9LDE6e246IkVP'@;
put 'RiJ9LDI6e246IlBBU1NXT1JEIn0sMzp7bjoiQ0FMQ1NFVCJ9LDQ6e246IldJTkRPV1NFVCJ9LDU6e246IlNIRUVUQ0VMTFBUUiJ9LDY6e246IlNIRUVUTEFZT1VUIn0sNzp7bjoiQ09MVU1OV0lEVEgifSw4OntuOiJISURERU5DT0xVTU4ifSw5OntuOiJVU0VSUkFOR0UifSwxMDp7bjoiU1lT'@;
put 'VEVNUkFOR0UifSwxMTp7bjoiWkVST0ZPUkNFIn0sMTI6e246IlNPUlRLRVlESVIifSwxMzp7bjoiRklMRVNFQUwifSwxNDp7bjoiREFUQUZJTExOVU1TIn0sMTU6e246IlBSSU5UTUFJTiJ9LDE2OntuOiJQUklOVFNUUklORyJ9LDE3OntuOiJHUkFQSE1BSU4ifSwxODp7bjoiR1JBUEhTVFJJ'@;
put 'TkcifSwxOTp7bjoiPz8ifSwyMDp7bjoiRVJSQ0VMTCJ9LDIxOntuOiJOQUNFTEwifSwyMjp7bjoiTEFCRUwxNiIsZjpmdW5jdGlvbiB1bihBbixNcil7dmFyIG9yPXFuKEFuKTtyZXR1cm4gb3JbMV0udD0icyIsb3JbMV0udj1Bbi5yZWFkX3NoaWZ0KE1yLTQsImNzdHIiKSxvcn19LDIzOntu'@;
put 'OiJOVU1CRVIxNyIsZjpMbn0sMjQ6e246Ik5VTUJFUjE4IixmOmZ1bmN0aW9uIFluKEFuLE1yKXt2YXIgb3I9cW4oQW4pO29yWzFdLnY9QW4ucmVhZF9zaGlmdCgyKTt2YXIgVG49b3JbMV0udj4+MTtpZigxJm9yWzFdLnYpc3dpdGNoKDcmVG4pe2Nhc2UgMDpUbj01ZTMqKFRuPj4zKTticmVh'@;
put 'aztjYXNlIDE6VG49NTAwKihUbj4+Myk7YnJlYWs7Y2FzZSAyOlRuPShUbj4+MykvMjA7YnJlYWs7Y2FzZSAzOlRuPShUbj4+MykvMjAwO2JyZWFrO2Nhc2UgNDpUbj0oVG4+PjMpLzJlMzticmVhaztjYXNlIDU6VG49KFRuPj4zKS8yZTQ7YnJlYWs7Y2FzZSA2OlRuPShUbj4+MykvMTY7YnJl'@;
put 'YWs7Y2FzZSA3OlRuPShUbj4+MykvNjR9cmV0dXJuIG9yWzFdLnY9VG4sb3J9fSwyNTp7bjoiRk9STVVMQTE5IixmOmZ1bmN0aW9uIHJyKEFuLE1yKXt2YXIgb3I9TG4oQW4pO3JldHVybiBBbi5sKz1Nci0xNCxvcn19LDI2OntuOiJGT1JNVUxBMUEifSwyNzp7bjoiWEZPUk1BVCIsZjpmdW5j'@;
put 'dGlvbiBPaShBbixNcil7Zm9yKHZhciBvcj17fSxUbj1Bbi5sK01yO0FuLmw8VG47KXt2YXIgQ3I9QW4ucmVhZF9zaGlmdCgyKTtpZigxNGUzPT1Dcil7Zm9yKG9yW0NyXT1bMCwiIl0sb3JbQ3JdWzBdPUFuLnJlYWRfc2hpZnQoMik7QW5bQW4ubF07KW9yW0NyXVsxXSs9U3RyaW5nLmZyb21D'@;
put 'aGFyQ29kZShBbltBbi5sXSksQW4ubCsrO0FuLmwrK319cmV0dXJuIG9yfX0sMjg6e246IkRUTEFCRUxNSVNDIn0sMjk6e246IkRUTEFCRUxDRUxMIn0sMzA6e246IkdSQVBIV0lORE9XIn0sMzE6e246IkNQQSJ9LDMyOntuOiJMUExBVVRPIn0sMzM6e246IlFVRVJZIn0sMzQ6e246IkhJRERF'@;
put 'TlNIRUVUIn0sMzU6e246Ij8/In0sMzc6e246Ik5VTUJFUjI1IixmOmZ1bmN0aW9uIFVuKEFuLE1yKXt2YXIgb3I9cW4oQW4pLFRuPUFuLnJlYWRfc2hpZnQoNCk7cmV0dXJuIG9yWzFdLnY9VG4+PjYsb3J9fSwzODp7bjoiPz8ifSwzOTp7bjoiTlVNQkVSMjciLGY6WHJ9LDQwOntuOiJGT1JN'@;
put 'VUxBMjgiLGY6ZnVuY3Rpb24gcGkoQW4sTXIpe3ZhciBvcj1YcihBbik7cmV0dXJuIEFuLmwrPU1yLTEwLG9yfX0sMTQyOntuOiI/PyJ9LDE0Nzp7bjoiPz8ifSwxNTA6e246Ij8/In0sMTUxOntuOiI/PyJ9LDE1Mjp7bjoiPz8ifSwxNTM6e246Ij8/In0sMTU0OntuOiI/PyJ9LDE1NTp7bjoi'@;
put 'Pz8ifSwxNTY6e246Ij8/In0sMTYzOntuOiI/PyJ9LDE3NDp7bjoiPz8ifSwxNzU6e246Ij8/In0sMTc2OntuOiI/PyJ9LDE3Nzp7bjoiPz8ifSwxODQ6e246Ij8/In0sMTg1OntuOiI/PyJ9LDE4Njp7bjoiPz8ifSwxODc6e246Ij8/In0sMTg4OntuOiI/PyJ9LDE5NTp7bjoiPz8ifSwyMDE6'@;
put 'e246Ij8/In0sMjA1OntuOiI/PyJ9LDIwNjp7bjoiPz8ifSwyMDc6e246Ij8/In0sMjA4OntuOiI/PyJ9LDI1Njp7bjoiPz8ifSwyNTk6e246Ij8/In0sMjYwOntuOiI/PyJ9LDI2MTp7bjoiPz8ifSwyNjI6e246Ij8/In0sMjYzOntuOiI/PyJ9LDI2NTp7bjoiPz8ifSwyNjY6e246Ij8/In0s'@;
put 'MjY3OntuOiI/PyJ9LDI2ODp7bjoiPz8ifSwyNzA6e246Ij8/In0sMjcxOntuOiI/PyJ9LDM4NDp7bjoiPz8ifSwzODk6e246Ij8/In0sMzkwOntuOiI/PyJ9LDM5Mzp7bjoiPz8ifSwzOTY6e246Ij8/In0sNTEyOntuOiI/PyJ9LDUxNDp7bjoiPz8ifSw1MTM6e246Ij8/In0sNTE2OntuOiI/'@;
put 'PyJ9LDUxNzp7bjoiPz8ifSw2NDA6e246Ij8/In0sNjQxOntuOiI/PyJ9LDY0Mjp7bjoiPz8ifSw2NDM6e246Ij8/In0sNjQ0OntuOiI/PyJ9LDY0NTp7bjoiPz8ifSw2NDY6e246Ij8/In0sNjQ3OntuOiI/PyJ9LDY0ODp7bjoiPz8ifSw2NTg6e246Ij8/In0sNjU5OntuOiI/PyJ9LDY2MDp7'@;
put 'bjoiPz8ifSw2NjE6e246Ij8/In0sNjYyOntuOiI/PyJ9LDY2NTp7bjoiPz8ifSw2NjY6e246Ij8/In0sNzY4OntuOiI/PyJ9LDc3Mjp7bjoiPz8ifSwxNjAwOntuOiI/PyJ9LDE2MDI6e246Ij8/In0sMTc5Mzp7bjoiPz8ifSwxNzk0OntuOiI/PyJ9LDE3OTU6e246Ij8/In0sMTc5Njp7bjoi'@;
put 'Pz8ifSwxOTIwOntuOiI/PyJ9LDIwNDg6e246Ij8/In0sMjA0OTp7bjoiPz8ifSwyMDUyOntuOiI/PyJ9LDI2ODg6e246Ij8/In0sMTA5OTg6e246Ij8/In0sMTI4NDk6e246Ij8/In0sMjgyMzM6e246Ij8/In0sMjg0ODQ6e246Ij8/In0sNjU1MzU6e246IiJ9fTtyZXR1cm57c2hlZXRfdG9f'@;
put 'd2sxOmZ1bmN0aW9uIEooQW4sTXIpe3ZhciBvcj1Ncnx8e307aWYoK29yLmNvZGVwYWdlPj0wJiZCKCtvci5jb2RlcGFnZSksInN0cmluZyI9PW9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0sxIHRvIEpTIHN0cmluZyIpO3ZhciBUbj1SbCgpLENyPWJvKEFuWyIhcmVm'@;
put 'Il0pLFNpPUFycmF5LmlzQXJyYXkoQW4pLFpyPVtdO2tpKFRuLDAsZnVuY3Rpb24gcGUoQW4pe3ZhciBNcj1ncigyKTtyZXR1cm4gTXIud3JpdGVfc2hpZnQoMixBbiksTXJ9KDEwMzApKSxraShUbiw2LGZ1bmN0aW9uIE1lKEFuKXt2YXIgTXI9Z3IoOCk7cmV0dXJuIE1yLndyaXRlX3NoaWZ0'@;
put 'KDIsQW4ucy5jKSxNci53cml0ZV9zaGlmdCgyLEFuLnMuciksTXIud3JpdGVfc2hpZnQoMixBbi5lLmMpLE1yLndyaXRlX3NoaWZ0KDIsQW4uZS5yKSxNcn0oQ3IpKTtmb3IodmFyIFVpPUNyLnMucjtVaTw9Q3IuZS5yOysrVWkpZm9yKHZhciBSbz1ycyhVaSksRmk9Q3Iucy5jO0ZpPD1Dci5l'@;
put 'LmM7KytGaSl7VWk9PT1Dci5zLnImJihacltGaV09Zm8oRmkpKTt2YXIgbG89U2k/KEFuW1VpXXx8W10pW0ZpXTpBbltacltGaV0rUm9dO2xvJiYieiIhPWxvLnQmJigibiI9PWxvLnQ/KDB8bG8udik9PWxvLnYmJmxvLnY+PS0zMjc2OCYmbG8udjw9MzI3Njc/a2koVG4sMTMsaHQoVWksRmks'@;
put 'bG8udikpOmtpKFRuLDE0LHV0KFVpLEZpLGxvLnYpKTpraShUbiwxNSxxZShVaSxGaSxXcyhsbykuc2xpY2UoMCwyMzkpKSkpfXJldHVybiBraShUbiwxKSxUbi5lbmQoKX0sYm9va190b193azM6ZnVuY3Rpb24gaWUoQW4sTXIpe3ZhciBvcj1Ncnx8e307aWYoK29yLmNvZGVwYWdlPj0wJiZC'@;
put 'KCtvci5jb2RlcGFnZSksInN0cmluZyI9PW9yLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgV0szIHRvIEpTIHN0cmluZyIpO3ZhciBUbj1SbCgpO2tpKFRuLDAsZnVuY3Rpb24geWUoQW4pe3ZhciBNcj1ncigyNik7TXIud3JpdGVfc2hpZnQoMiw0MDk2KSxNci53cml0ZV9z'@;
put 'aGlmdCgyLDQpLE1yLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBvcj0wLFRuPTAsQ3I9MCxTaT0wO1NpPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrU2kpe3ZhciBVaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1tTaV1dO2lmKFVpJiZVaVsiIXJlZiJdKXsrK0NyO3ZhciBSbz1IcyhVaVsiIXJl'@;
put 'ZiJdKTtvcjxSby5lLnImJihvcj1Sby5lLnIpLFRuPFJvLmUuYyYmKFRuPVJvLmUuYyl9fXJldHVybiBNci53cml0ZV9zaGlmdCgyLG9yKSxNci53cml0ZV9zaGlmdCgxLENyKSxNci53cml0ZV9zaGlmdCgxLFRuKSxNci53cml0ZV9zaGlmdCgyLDApLE1yLndyaXRlX3NoaWZ0KDIsMCksTXIu'@;
put 'd3JpdGVfc2hpZnQoMSwxKSxNci53cml0ZV9zaGlmdCgxLDIpLE1yLndyaXRlX3NoaWZ0KDQsMCksTXIud3JpdGVfc2hpZnQoNCwwKSxNcn0oQW4pKTtmb3IodmFyIENyPTAsU2k9MDtDcjxBbi5TaGVldE5hbWVzLmxlbmd0aDsrK0NyKShBbi5TaGVldHNbQW4uU2hlZXROYW1lc1tDcl1dfHx7'@;
put 'fSlbIiFyZWYiXSYma2koVG4sMjcsTmkoQW4uU2hlZXROYW1lc1tDcl0sU2krKykpO3ZhciBacj0wO2ZvcihDcj0wO0NyPEFuLlNoZWV0TmFtZXMubGVuZ3RoOysrQ3Ipe3ZhciBVaT1Bbi5TaGVldHNbQW4uU2hlZXROYW1lc1tDcl1dO2lmKFVpJiZVaVsiIXJlZiJdKXtmb3IodmFyIFJvPWJv'@;
put 'KFVpWyIhcmVmIl0pLEZpPUFycmF5LmlzQXJyYXkoVWkpLG9zPVtdLGxvPVJvLnMucjtsbzw9Um8uZS5yOysrbG8pZm9yKHZhciBGbz1ycyhsbykseG89Um8ucy5jO3hvPD1Sby5lLmM7Kyt4byl7bG89PT1Sby5zLnImJihvc1t4b109Zm8oeG8pKTt2YXIgQnM9Rmk/KFVpW2xvXXx8W10pW3hv'@;
put 'XTpVaVtvc1t4b10rRm9dO0JzJiYieiIhPUJzLnQmJigibiI9PUJzLnQ/a2koVG4sMjMsdHIobG8seG8sWnIsQnMudikpOmtpKFRuLDIyLEpuKGxvLHhvLFpyLFdzKEJzKS5zbGljZSgwLDIzOSkpKSl9Kytacn19cmV0dXJuIGtpKFRuLDEpLFRuLmVuZCgpfSx0b193b3JrYm9vazpmdW5jdGlv'@;
put 'biBGKEFuLE1yKXtzd2l0Y2goTXIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBPKEwoc2UuZGVjb2RlKEFuKSksTXIpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTyhMKEFuKSxNcik7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybiBPKEFuLE1yKX10aHJvdyJVbnN1cHBvcnRlZCB0eXBl'@;
put 'ICIrTXIudHlwZX19fSgpLFdwPWZ1bmN0aW9uKCl7dmFyIE09dWMoInQiKSxGPXVjKCJyUHIiKTtmdW5jdGlvbiBPKHBlKXt2YXIgeWU9cGUubWF0Y2goTSk7aWYoIXllKXJldHVybnt0OiJzIix2OiIifTt2YXIgdmU9e3Q6InMiLHY6bXIoeWVbMV0pfSxNZT1wZS5tYXRjaChGKTtyZXR1cm4g'@;
put 'TWUmJih2ZS5zPWZ1bmN0aW9uIGpNKE0pe3ZhciBGPXt9LE89TS5tYXRjaCgkdCksSj0wLGllPSExO2lmKE8pZm9yKDtKIT1PLmxlbmd0aDsrK0ope3ZhciBwZT1sbihPW0pdKTtzd2l0Y2gocGVbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNhc2UiPGV4dGVuZCI6'@;
put 'YnJlYWs7Y2FzZSI8c2hhZG93IjppZighcGUudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpGLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PXBlLnZhbClicmVhaztGLmNwPUlbcGFyc2VJbnQocGUudmFs'@;
put 'LDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIXBlLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpGLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpGLm5hbWU9cGUudmFsO2JyZWFrO2Nhc2UiPHN6IjpGLnN6'@;
put 'PXBlLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFwZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOkYuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFwZS52YWwpYnJlYWs7c3dpdGNoKHBlLnZhbCl7Y2FzZSJkb3Vi'@;
put 'bGUiOkYudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpGLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOkYudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOkYudW5kZXJsaW5lfHwoRi51bmRlcmxpbmU9MSk7YnJlYWs7Y2Fz'@;
put 'ZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PXBlLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpGLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09cGUudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOkYuaXRhbGljPTE7YnJlYWs7'@;
put 'Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6cGUucmdiJiYoRi5jb2xvcj17cmdiOjg9PXBlLnJnYi5sZW5ndGg/cGUucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK3BlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpGLmZhbWlseT1wZS52YWw7YnJlYWs7Y2FzZSI8'@;
put 'dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihGLnZhbGlnbj1wZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZXh0IjppZT0hMDti'@;
put 'cmVhaztjYXNlIjwvZXh0PiI6aWU9ITE7YnJlYWs7ZGVmYXVsdDppZig0NyE9PXBlWzBdLmNoYXJDb2RlQXQoMSkmJiFpZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK3BlWzBdKX19cmV0dXJuIEZ9KE1lWzFdKSksdmV9dmFyIEo9LzwoPzpcdys6KT9yPi9n'@;
put 'LGllPS88XC8oPzpcdys6KT9yPi87cmV0dXJuIGZ1bmN0aW9uKHllKXtyZXR1cm4geWUucmVwbGFjZShKLCIiKS5zcGxpdChpZSkubWFwKE8pLmZpbHRlcihmdW5jdGlvbih2ZSl7cmV0dXJuIHZlLnZ9KX19KCksZEw9ezE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlLWFjY291bnRp'@;
put 'bmciLDM0OiJkb3VibGUtYWNjb3VudGluZyJ9LEZjPWZ1bmN0aW9uKCl7dmFyIEY9LyhcclxufFxuKS9nO2Z1bmN0aW9uIEooaWUpe3ZhciBwZT1bW10saWUudixbXV07cmV0dXJuIGllLnY/KGllLnMmJmZ1bmN0aW9uIE8oaWUscGUseWUpe3ZhciB2ZT1bXTtpZS51bmRlcmxpbmUmJnZlLnB1'@;
put 'c2goInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyIpLGllLnVuZGVybGluZT4xJiZ2ZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK2RMW2llLnVuZGVybGluZV0rIjsiKSxpZS5zeiYmdmUucHVzaCgiZm9udC1zaXplOiIraWUuc3orInB0OyIpLGllLm91dGxpbmUmJnZlLnB1c2go'@;
put 'InRleHQtZWZmZWN0OiBvdXRsaW5lOyIpLGllLnNoYWRvdyYmdmUucHVzaCgidGV4dC1zaGFkb3c6IGF1dG87IiksaWUuY29sb3ImJmllLmNvbG9yLnJnYiYmdmUucHVzaCgiY29sb3I6ICMiK1B1KGllLmNvbG9yLnJnYikrIjsiKSxwZS5wdXNoKCc8c3BhbiBzdHlsZT0iJyt2ZS5qb2luKCIi'@;
put 'KSsnIj4nKSxpZS5ib2xkJiYocGUucHVzaCgiPGI+IikseWUucHVzaCgiPC9iPiIpKSxpZS5pdGFsaWMmJihwZS5wdXNoKCI8aT4iKSx5ZS5wdXNoKCI8L2k+IikpLGllLnN0cmlrZSYmKHBlLnB1c2goIjxzPiIpLHllLnB1c2goIjwvcz4iKSk7dmFyIE1lPWllLnZhbGlnbnx8IiI7InN1cGVy'@;
put 'c2NyaXB0Ij09TWV8fCJzdXBlciI9PU1lP01lPSJzdXAiOiJzdWJzY3JpcHQiPT1NZSYmKE1lPSJzdWIiKSwiIiE9TWUmJihwZS5wdXNoKCI8IitNZSsiPiIpLHllLnB1c2goIjwvIitNZSsiPiIpKSx5ZS5wdXNoKCI8L3NwYW4+Iil9KGllLnMscGVbMF0scGVbMl0pLHBlWzBdLmpvaW4oIiIp'@;
put 'K3BlWzFdLnJlcGxhY2UoRiwiPGJyLz4iKStwZVsyXS5qb2luKCIiKSk6IiJ9cmV0dXJuIGZ1bmN0aW9uKHBlKXtyZXR1cm4gcGUubWFwKEopLmpvaW4oIiIpfX0oKTtmdW5jdGlvbiBhYShNKXtyZXR1cm4gTS5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIGZ1bmN0aW9uIGczKE0pe3ZhciBGPSIi'@;
put 'LE89W107cmV0dXJuIE0ucyYmKE0ucy5ib2xkJiZPLnB1c2goIjxiLz4iKSxNLnMuaXRhbGljJiZPLnB1c2goIjxpLz4iKSxNLnMuc3RyaWtlJiZPLnB1c2goIjxzdHJpa2UvPiIpLE0ucy51bmRlcmxpbmUmJk8ucHVzaCgnPHUgdmFsPSInKyhRcFtNLnMudW5kZXJsaW5lXXx8InNpbmdsZSIp'@;
put 'KyciLz4nKSxNLnMuY29sb3ImJk8ucHVzaChvMShNLnMuY29sb3IpKSxNLnMuc3omJk8ucHVzaCgnPHN6IHZhbD0iJytNLnMuc3orJyIvPicpLE0ucy5uYW1lJiZPLnB1c2goJzxyRm9udCB2YWw9IicrTS5zLm5hbWUrJyIvPicpLCgic3VwZXIiPT1NLnMudmFsaWdufHwic3ViIj09TS5zLnZh'@;
put 'bGlnbikmJk8ucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrTS5zLnZhbGlnbisnc2NyaXB0Ii8+JykpLE8ubGVuZ3RoJiYoRis9IjxyUHI+IitPLmpvaW4oIiIpKyI8L3JQcj4iKSwiPHI+IisoRis9ZHIoInQiLHlyKE0udiksbnVsbCkpKyI8L3I+In0oTyl9KS5qb2luKCIiKX12YXIgaEw9Lzwo'@;
put 'Pzpcdys6KT90W14+XSo+KFtePF0qKTxcLyg/Olx3KzopP3Q+L2csZkw9LzwoPzpcdys6KT9yXGJbXj5dKj4vLHBMPS88KD86XHcrOik/clBoLio/PihbXHNcU10qPyk8XC8oPzpcdys6KT9yUGg+L2c7ZnVuY3Rpb24gcF8oTSxGKXt2YXIgTz0hRnx8Ri5jZWxsSFRNTCxKPXt9O3JldHVybiBN'@;
put 'PyhNLm1hdGNoKC9eXHMqPCg/Olx3KzopP3RbXj5dKj4vKT8oSi50PW1yKEJpKE0uc2xpY2UoTS5pbmRleE9mKCI+IikrMSkuc3BsaXQoLzxcLyg/Olx3KzopP3Q+LylbMF18fCIiKSksSi5yPUJpKE0pLE8mJihKLmg9WmkoSi50KSkpOk0ubWF0Y2goZkwpJiYoSi5yPUJpKE0pLEoudD1tcihC'@;
put 'aSgoTS5yZXBsYWNlKHBMLCIiKS5tYXRjaChoTCl8fFtdKS5qb2luKCIiKS5yZXBsYWNlKCR0LCIiKSkpLEouUj1XcChKLnIpLE8mJihKLmg9RmMoSi5SKSkpLEopOnt0OiIifX12YXIgQk09LzwoPzpcdys6KT9zc3QoW14+XSopPihbXHNcU10qKTxcLyg/Olx3KzopP3NzdD4vLFlNPS88KD86'@;
put 'XHcrOik/KD86c2l8c3N0SXRlbSk+L2csSm09LzxcLyg/Olx3KzopPyg/OnNpfHNzdEl0ZW0pPi87X28uU1NUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3NoYXJlZFN0cmluZ3MiO3ZhciBtTD0vXlxzfFxzJHxb'@;
put 'XHRcblxyXS87ZnVuY3Rpb24gRDYoTSxGKXtpZighRi5ib29rU1NUKXJldHVybiIiO3ZhciBPPVtQbl07T1tPLmxlbmd0aF09ZHIoInNzdCIsbnVsbCx7eG1sbnM6VGkubWFpblswXSxjb3VudDpNLkNvdW50LHVuaXF1ZUNvdW50Ok0uVW5pcXVlfSk7Zm9yKHZhciBKPTA7SiE9TS5sZW5ndGg7'@;
put 'KytKKWlmKG51bGwhPU1bSl0pe3ZhciBpZT1NW0pdLHBlPSI8c2k+IjtpZS5yP3BlKz1pZS5yOihwZSs9Ijx0IixpZS50fHwoaWUudD0iIiksaWUudC5tYXRjaChtTCkmJihwZSs9JyB4bWw6c3BhY2U9InByZXNlcnZlIicpLHBlKz0iPiIreXIoaWUudCkrIjwvdD4iKSxPW08ubGVuZ3RoXT1w'@;
put 'ZSs9Ijwvc2k+In1yZXR1cm4gTy5sZW5ndGg+MiYmKE9bTy5sZW5ndGhdPSI8L3NzdD4iLE9bMV09T1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksTy5qb2luKCIiKX12YXIgek09ZnVuY3Rpb24gQ2QoTSxGLE8pe3ZhciBKPTEzKzQqTS50Lmxlbmd0aCxpZT1NLlImJk0uUi5sZW5ndGh8fE0ucjtN'@;
put 'LnImJihNLlI9V3AoTS5yKSksaWUmJihKKz00KzQqTS5SLmxlbmd0aCk7dmFyIHBlPSExO2lmKG51bGw9PU8mJihwZT0hMCxPPWdyKEopKSxPLndyaXRlX3NoaWZ0KDEsaWU/MTowKSxDbChNLnQsTyksaWUpe08ud3JpdGVfc2hpZnQoNCxNLlIubGVuZ3RoKTtmb3IodmFyIHllPTAsdmU9MDt2'@;
put 'ZTxNLlIubGVuZ3RoOysrdmUpe3ZhciBNZT1NLlJbdmVdO08ud3JpdGVfc2hpZnQoMix5ZSkseWUrPShNZS52fHwiIikubGVuZ3RoO3ZhciBqZT1NZS5zP3J1KEYuY2VsbFhmcyxGLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6TWUuc30sRik6MDtPLndyaXRlX3NoaWZ0KDIsRi5jZWxsWGZz'@;
put 'W2plXS5mb250SWQpfX1yZXR1cm4gcGU/Ty5zbGljZSgwLE8ubCk6T307ZnVuY3Rpb24gVU0oTSxGKXt2YXIgTz1SbCgpO2dpKE8sIkJydEJlZ2luU3N0IixmdW5jdGlvbiBtXyhNLEYpe3JldHVybiBGfHwoRj1ncig4KSksRi53cml0ZV9zaGlmdCg0LE0uQ291bnQpLEYud3JpdGVfc2hpZnQo'@;
put 'NCxNLlVuaXF1ZSksRn0oTSkpO2Zvcih2YXIgSj0wO0o8TS5sZW5ndGg7KytKKWdpKE8sIkJydFNTVEl0ZW0iLHpNKE1bSl0sRikpO3JldHVybiBnaShPLCJCcnRFbmRTc3QiKSxPLmVuZCgpfWZ1bmN0aW9uIF8zKE0pe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGls'@;
put 'cy5lbmNvZGUoRCxNKTtmb3IodmFyIEY9W10sTz1NLnNwbGl0KCIiKSxKPTA7SjxPLmxlbmd0aDsrK0opRltKXT1PW0pdLmNoYXJDb2RlQXQoMCk7cmV0dXJuIEZ9ZnVuY3Rpb24gYjAoTSxGKXt2YXIgTz17fTtyZXR1cm4gTy5NYWpvcj1NLnJlYWRfc2hpZnQoMiksTy5NaW5vcj1NLnJlYWRf'@;
put 'c2hpZnQoMiksRj49NCYmKE0ubCs9Ri00KSxPfWZ1bmN0aW9uIGdfKE0pe2Zvcih2YXIgRj1NLnJlYWRfc2hpZnQoNCksTz1NLmwrRi00LEo9e30saWU9TS5yZWFkX3NoaWZ0KDQpLHBlPVtdO2llLS0gPjA7KXBlLnB1c2goe3Q6TS5yZWFkX3NoaWZ0KDQpLHY6TS5yZWFkX3NoaWZ0KDAsImxw'@;
put 'cDQiKX0pO2lmKEoubmFtZT1NLnJlYWRfc2hpZnQoMCwibHBwNCIpLEouY29tcHM9cGUsTS5sIT1PKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGFTcGFjZU1hcEVudHJ5OiAiK00ubCsiICE9ICIrTyk7cmV0dXJuIEp9ZnVuY3Rpb24gd0woTSxGKXt2YXIgTz1NLmwrRixKPXt9O0ouRmxhZ3M9'@;
put 'NjMmTS5yZWFkX3NoaWZ0KDQpLE0ubCs9NCxKLkFsZ0lEPU0ucmVhZF9zaGlmdCg0KTt2YXIgaWU9ITE7c3dpdGNoKEouQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OmllPTM2PT1KLkZsYWdzO2JyZWFrO2Nhc2UgMjY2MjU6aWU9ND09KDUyJkouRmxhZ3MpO2JyZWFr'@;
put 'O2Nhc2UgMDppZT0xNj09Si5GbGFnc3x8ND09Si5GbGFnc3x8MzY9PUouRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrSi5BbGdJRH1pZighaWUpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uIEZsYWdzL0FsZ0lEIG1pc21h'@;
put 'dGNoIik7cmV0dXJuIEouQWxnSURIYXNoPU0ucmVhZF9zaGlmdCg0KSxKLktleVNpemU9TS5yZWFkX3NoaWZ0KDQpLEouUHJvdmlkZXJUeXBlPU0ucmVhZF9zaGlmdCg0KSxNLmwrPTgsSi5DU1BOYW1lPU0ucmVhZF9zaGlmdChPLU0ubD4+MSwidXRmMTZsZSIpLE0ubD1PLEp9ZnVuY3Rpb24g'@;
put 'STYoTSxGKXt2YXIgTz17fSxKPU0ubCtGO3JldHVybiBNLmwrPTQsTy5TYWx0PU0uc2xpY2UoTS5sLE0ubCsxNiksTS5sKz0xNixPLlZlcmlmaWVyPU0uc2xpY2UoTS5sLE0ubCsxNiksTS5sKz0xNixNLnJlYWRfc2hpZnQoNCksTy5WZXJpZmllckhhc2g9TS5zbGljZShNLmwsSiksTS5sPUos'@;
put 'T31mdW5jdGlvbiBNTChNKXtpZigzNiE9KDYzJk0ucmVhZF9zaGlmdCg0KSkpdGhyb3cgbmV3IEVycm9yKCJFbmNyeXB0aW9uSW5mbyBtaXNtYXRjaCIpO3ZhciBPPU0ucmVhZF9zaGlmdCg0KTtyZXR1cm57dDoiU3RkIixoOndMKE0sTyksdjpJNihNLE0ubGVuZ3RoLU0ubCl9fWZ1bmN0aW9u'@;
put 'IGU1KCl7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZDogRUNNQS0zNzYgRXh0ZW5zaWJsZSIpfWZ1bmN0aW9uIF9fKE0pe3ZhciBGPVsic2FsdFNpemUiLCJibG9ja1NpemUiLCJrZXlCaXRzIiwiaGFzaFNpemUiLCJjaXBoZXJBbGdvcml0aG0iLCJjaXBoZXJD'@;
put 'aGFpbmluZyIsImhhc2hBbGdvcml0aG0iLCJzYWx0VmFsdWUiXTtNLmwrPTQ7dmFyIE89TS5yZWFkX3NoaWZ0KE0ubGVuZ3RoLU0ubCwidXRmOCIpLEo9e307cmV0dXJuIE8ucmVwbGFjZSgkdCxmdW5jdGlvbihwZSl7dmFyIHllPWxuKHBlKTtzd2l0Y2gobm4oeWVbMF0pKXtjYXNlIjw/eG1s'@;
put 'IjpjYXNlIjxlbmNyeXB0aW9uIjpjYXNlIjwvZW5jcnlwdGlvbj4iOmNhc2UiPC9rZXlFbmNyeXB0b3JzPiI6Y2FzZSI8L2tleUVuY3J5cHRvcj4iOmJyZWFrO2Nhc2UiPGtleURhdGEiOkYuZm9yRWFjaChmdW5jdGlvbih2ZSl7Slt2ZV09eWVbdmVdfSk7YnJlYWs7Y2FzZSI8ZGF0YUludGVn'@;
put 'cml0eSI6Si5lbmNyeXB0ZWRIbWFjS2V5PXllLmVuY3J5cHRlZEhtYWNLZXksSi5lbmNyeXB0ZWRIbWFjVmFsdWU9eWUuZW5jcnlwdGVkSG1hY1ZhbHVlO2JyZWFrO2Nhc2UiPGtleUVuY3J5cHRvcnM+IjpjYXNlIjxrZXlFbmNyeXB0b3JzIjpKLmVuY3M9W107YnJlYWs7Y2FzZSI8a2V5RW5j'@;
put 'cnlwdG9yIjpKLnVyaT15ZS51cmk7YnJlYWs7Y2FzZSI8ZW5jcnlwdGVkS2V5IjpKLmVuY3MucHVzaCh5ZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyB5ZVswXX19KSxKfWZ1bmN0aW9uIE82KE0pe3ZhciBPLHBlLEY9MCxKPV8zKE0pLGllPUoubGVuZ3RoKzE7Zm9yKChPPUcoaWUpKVswXT1KLmxl'@;
put 'bmd0aCxwZT0xO3BlIT1pZTsrK3BlKU9bcGVdPUpbcGUtMV07Zm9yKHBlPWllLTE7cGU+PTA7LS1wZSlGPSgoMTYzODQmRj8xOjApfEY8PDEmMzI3NjcpXk9bcGVdO3JldHVybiA1MjgxMV5GfXZhciB2Xz1mdW5jdGlvbigpe3ZhciBNPVsxODcsMjU1LDI1NSwxODYsMjU1LDI1NSwxODUsMTI4'@;
put 'LDAsMTkwLDE1LDAsMTkxLDE1LDBdLEY9WzU3ODQwLDc0MzksNTIzODAsMzM5ODQsNDM2NCwzNjAwLDYxOTAyLDEyNjA2LDYyNTgsNTc2NTcsNTQyODcsMzQwNDEsMTAyNTIsNDMzNzAsMjAxNjNdLE89WzQ0Nzk2LDE5OTI5LDM5ODU4LDEwMDUzLDIwMTA2LDQwMjEyLDEwNzYxLDMxNTg1LDYz'@;
put 'MTcwLDY0OTMzLDYwMjY3LDUwOTM1LDQwMzk5LDExMTk5LDE3NzYzLDM1NTI2LDE0NTMsMjkwNiw1ODEyLDExNjI0LDIzMjQ4LDg4NSwxNzcwLDM1NDAsNzA4MCwxNDE2MCwyODMyMCw1NjY0MCw1NTM2OSw0MTEzOSwyMDgwNyw0MTYxNCwyMTgyMSw0MzY0MiwxNzYyMSwyODQ4NSw1Njk3MCw0'@;
put 'NDM0MSwxOTAxOSwzODAzOCwxNDYwNSwyOTIxMCw2MDE5NSw1MDc5MSw0MDE3NSwxMDc1MSwyMTUwMiw0MzAwNCwyNDUzNywxODM4NywzNjc3NCwzOTQ5LDc4OTgsMTU3OTYsMzE1OTIsNjMxODQsNDcyMDEsMjQ4MDMsNDk2MDYsMzc4MDUsMTQyMDMsMjg0MDYsNTY4MTIsMTc4MjQsMzU2NDgs'@;
put 'MTY5NywzMzk0LDY3ODgsMTM1NzYsMjcxNTIsNDM2MDEsMTc1MzksMzUwNzgsNTU3LDExMTQsMjIyOCw0NDU2LDMwMzg4LDYwNzc2LDUxOTUzLDM0MjQzLDcwNzksMTQxNTgsMjgzMTYsMTQxMjgsMjgyNTYsNTY1MTIsNDM0MjUsMTcyNTEsMzQ1MDIsNzU5NywxMzEwNSwyNjIxMCw1MjQyMCwz'@;
put 'NTI0MSw4ODMsMTc2NiwzNTMyLDQxMjksODI1OCwxNjUxNiwzMzAzMiw0NjU3LDkzMTQsMTg2MjhdLGllPWZ1bmN0aW9uKHllLHZlKXtyZXR1cm4gZnVuY3Rpb24oeWUpe3JldHVybiAyNTUmKHllPj4xfHllPDw3KX0oeWVedmUpfTtyZXR1cm4gZnVuY3Rpb24odmUpe2Zvcih2YXIgTWU9XzMo'@;
put 'dmUpLGplPWZ1bmN0aW9uKHllKXtmb3IodmFyIHZlPUZbeWUubGVuZ3RoLTFdLE1lPTEwNCxqZT15ZS5sZW5ndGgtMTtqZT49MDstLWplKWZvcih2YXIgWWU9eWVbamVdLHFlPTA7NyE9cWU7KytxZSk2NCZZZSYmKHZlXj1PW01lXSksWWUqPTIsLS1NZTtyZXR1cm4gdmV9KE1lKSxZZT1NZS5s'@;
put 'ZW5ndGgscWU9RygxNiksaXQ9MDsxNiE9aXQ7KytpdClxZVtpdF09MDt2YXIgdXQ7Zm9yKCEoMSZ+WWUpJiYocWVbWWVdPWllKE1bMF0samU+PjgpLHFlWy0tWWVdPWllKE1lW01lLmxlbmd0aC0xXSwyNTUmamUpKTtZZT4wOylxZVstLVllXT1pZShNZVtZZV0samU+PjgpLHFlWy0tWWVdPWll'@;
put 'KE1lW1llXSwyNTUmamUpO2ZvcihZZT0xNSx1dD0xNS1NZS5sZW5ndGg7dXQ+MDspcWVbWWVdPWllKE1bdXRdLGplPj44KSwtLXV0LHFlWy0tWWVdPWllKE1lW1llXSwyNTUmamUpLC0tWWUsLS11dDtyZXR1cm4gcWV9fSgpO3ZhciBGNj1mdW5jdGlvbigpe2Z1bmN0aW9uIE0oaWUscGUpe3N3'@;
put 'aXRjaChwZS50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIEYoc2UuZGVjb2RlKGllKSxwZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBGKGllLHBlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIEYoaWUudG9TdHJpbmcoImJpbmFyeSIpLHBlKTtjYXNlImFycmF5IjpyZXR1cm4gRihSdChpZSkscGUpfXRo'@;
put 'cm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitwZS50eXBlKX1mdW5jdGlvbiBGKGllLHBlKXt2YXIgdmU9KHBlfHx7fSkuZGVuc2U/W106e307aWYoIWllLm1hdGNoKC9cXHRyb3dkLykpdGhyb3cgbmV3IEVycm9yKCJSVEYgbWlzc2luZyB0YWJsZSIpO3JldHVybiB2ZVsiIXJl'@;
put 'ZiJdPUFpKHtzOntjOjAscjowfSxlOntjOjAscjowfX0pLHZlfXJldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBPKGllLHBlKXtyZXR1cm4gcDAoTShpZSxwZSkscGUpfSx0b19zaGVldDpNLGZyb21fc2hlZXQ6ZnVuY3Rpb24gSihpZSl7Zm9yKHZhciB2ZSxwZT1bIntcXHJ0ZjFcXGFuc2ki'@;
put 'XSx5ZT1ibyhpZVsiIXJlZiJdKSxNZT1BcnJheS5pc0FycmF5KGllKSxqZT15ZS5zLnI7amU8PXllLmUucjsrK2plKXtwZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBZZT15ZS5zLmM7WWU8PXllLmUuYzsrK1llKXBlLnB1c2goIlxcY2VsbHgiKyhZZSsxKSk7Zm9yKHBl'@;
put 'LnB1c2goIlxccGFyZFxcaW50YmwiKSxZZT15ZS5zLmM7WWU8PXllLmUuYzsrK1llKXt2YXIgcWU9RGkoe3I6amUsYzpZZX0pOyh2ZT1NZT8oaWVbamVdfHxbXSlbWWVdOmllW3FlXSkmJihudWxsIT12ZS52fHx2ZS5mJiYhdmUuRikmJihwZS5wdXNoKCIgIisodmUud3x8KFdzKHZlKSx2ZS53'@;
put 'KSkpLHBlLnB1c2goIlxcY2VsbCIpKX1wZS5wdXNoKCJcXHBhcmRcXGludGJsXFxyb3ciKX1yZXR1cm4gcGUuam9pbigiIikrIn0ifX19KCk7ZnVuY3Rpb24gR3AoTSl7dmFyIEY9TS5zbGljZSgiIyI9PT1NWzBdPzE6MCkuc2xpY2UoMCw2KTtyZXR1cm5bcGFyc2VJbnQoRi5zbGljZSgwLDIp'@;
put 'LDE2KSxwYXJzZUludChGLnNsaWNlKDIsNCksMTYpLHBhcnNlSW50KEYuc2xpY2UoNCw2KSwxNildfWZ1bmN0aW9uIHQxKE0pe2Zvcih2YXIgRj0wLE89MTszIT1GOysrRilPPTI1NipPKyhNW0ZdPjI1NT8yNTU6TVtGXTwwPzA6TVtGXSk7cmV0dXJuIE8udG9TdHJpbmcoMTYpLnRvVXBwZXJD'@;
put 'YXNlKCkuc2xpY2UoMSl9ZnVuY3Rpb24gVTEoTSxGKXtpZihudWxsPT1NKXJldHVybiBudWxsIT1GO2lmKG51bGw9PUYpcmV0dXJuITA7aWYoMT09TS5hdXRvJiYxPT1GLmF1dG8pcmV0dXJuITE7aWYoISFNLmF1dG8hPSEhRi5hdXRvfHxudWxsPT1NLnRoZW1lIT0obnVsbD09Ri50aGVtZSkp'@;
put 'cmV0dXJuITA7aWYobnVsbCE9TS50aGVtZSlyZXR1cm4gTS50aGVtZSE9Ri50aGVtZXx8TS50aW50IT1GLnRpbnQ7aWYobnVsbD09TS5yZ2ImJm51bGw9PUYucmdiKXJldHVybiExO3ZhciBPPU0ucmdiOyJudW1iZXIiPT10eXBlb2YgTyYmKE89Ty50b1N0cmluZygxNikpLE89Ty5zbGljZSgt'@;
put 'Nik7dmFyIEo9Ri5yZ2I7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBKJiYoSj1KLnRvU3RyaW5nKDE2KSksSj1KLnNsaWNlKC02KSxPLnRvTG93ZXJDYXNlKCkhPUoudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBXTShNLEYpe3JldHVybiBudWxsPT1NP251bGwhPUY6bnVsbD09Rj9udWxsIT1NOk0u'@;
put 'c3R5bGUhPUYuc3R5bGV8fFUxKE0uY29sb3IsRi5jb2xvcil9ZnVuY3Rpb24gJHAoTSxGKXtpZigwPT09RilyZXR1cm4gTTt2YXIgTz1mdW5jdGlvbiB4TChNKXt2YXIgRj1NWzBdLzI1NSxPPU1bMV0vMjU1LEo9TVsyXS8yNTUsaWU9TWF0aC5tYXgoRixPLEopLHBlPU1hdGgubWluKEYsTyxK'@;
put 'KSx5ZT1pZS1wZTtpZigwPT09eWUpcmV0dXJuWzAsMCxGXTt2YXIgTWUsdmU9MCxqZT1pZStwZTtzd2l0Y2goTWU9eWUvKGplPjE/Mi1qZTpqZSksaWUpe2Nhc2UgRjp2ZT0oKE8tSikveWUrNiklNjticmVhaztjYXNlIE86dmU9KEotRikveWUrMjticmVhaztjYXNlIEo6dmU9KEYtTykveWUr'@;
put 'NH1yZXR1cm5bdmUvNixNZSxqZS8yXX0oR3AoTSkpO3JldHVybiBPWzJdPUY8MD9PWzJdKigxK0YpOjEtKDEtT1syXSkqKDEtRiksdDEoZnVuY3Rpb24gWk0oTSl7dmFyIE1lLE89TVsxXSxKPU1bMl0saWU9MipPKihKPC41P0o6MS1KKSxwZT1KLWllLzIseWU9W3BlLHBlLHBlXSx2ZT02Kk1b'@;
put 'MF07aWYoMCE9PU8pc3dpdGNoKDB8dmUpe2Nhc2UgMDpjYXNlIDY6TWU9aWUqdmUseWVbMF0rPWllLHllWzFdKz1NZTticmVhaztjYXNlIDE6eWVbMF0rPU1lPWllKigyLXZlKSx5ZVsxXSs9aWU7YnJlYWs7Y2FzZSAyOk1lPWllKih2ZS0yKSx5ZVsxXSs9aWUseWVbMl0rPU1lO2JyZWFrO2Nh'@;
put 'c2UgMzp5ZVsxXSs9TWU9aWUqKDQtdmUpLHllWzJdKz1pZTticmVhaztjYXNlIDQ6TWU9aWUqKHZlLTQpLHllWzJdKz1pZSx5ZVswXSs9TWU7YnJlYWs7Y2FzZSA1OnllWzJdKz1NZT1pZSooNi12ZSkseWVbMF0rPWllfWZvcih2YXIgamU9MDszIT1qZTsrK2plKXllW2plXT1NYXRoLnJvdW5k'@;
put 'KDI1NSp5ZVtqZV0pO3JldHVybiB5ZX0oTykpfXZhciBHTT02LEhsPUdNO2Z1bmN0aW9uIHFwKE0pe3JldHVybiBNYXRoLmZsb29yKChNK01hdGgucm91bmQoMTI4L0hsKS8yNTYpKkhsKX1mdW5jdGlvbiBLcChNKXtyZXR1cm4gTWF0aC5mbG9vcigoTS01KS9IbCoxMDArLjUpLzEwMH1mdW5j'@;
put 'dGlvbiBQaChNKXtyZXR1cm4gTWF0aC5yb3VuZCgoTSpIbCs1KS9IbCoyNTYpLzI1Nn1mdW5jdGlvbiAkdShNKXtNLmJlc3RGaXQmJmRlbGV0ZSBNLmJlc3RGaXQsTS53aWR0aD8oTS53cHg9cXAoTS53aWR0aCksTS53Y2g9S3AoTS53cHgpLE0uTURXPUhsKTpNLndweD8oTS53Y2g9S3AoTS53'@;
put 'cHgpLE0ud2lkdGg9UGgoTS53Y2gpLE0uTURXPUhsKToibnVtYmVyIj09dHlwZW9mIE0ud2NoJiYoTS53aWR0aD1QaChNLndjaCksTS53cHg9cXAoTS53aWR0aCksTS5NRFc9SGwpLE0uY3VzdG9tV2lkdGgmJmRlbGV0ZSBNLmN1c3RvbVdpZHRofXZhciBpYT05NixGaD1pYTtmdW5jdGlvbiBZ'@;
put 'MihNKXtyZXR1cm4gNzIqTS9GaH1mdW5jdGlvbiBaMShNKXtyZXR1cm4gTSpGaC83Mn1mdW5jdGlvbiBIaChNKXtGaD1NPXtvc3g6NzIsd2luOjk2LHdpbjEwMDo5Nix3aW4xMjU6MTIwLHdpbjE1MDoxNDR9W01dfHxNfHxpYSxNXz1KcFtNXX1mdW5jdGlvbiBONihNKXtNLmhweD9NLmhwdD1Z'@;
put 'MihNLmhweCk6TS5ocHQmJihNLmhweD1aMShNLmhwdCkpfXZhciBiXz17Tm9uZToibm9uZSIsU29saWQ6InNvbGlkIixHcmF5NTA6Im1lZGl1bUdyYXkiLEdyYXk3NToiZGFya0dyYXkiLEdyYXkyNToibGlnaHRHcmF5IixIb3J6U3RyaXBlOiJkYXJrSG9yaXpvbnRhbCIsVmVydFN0cmlwZToi'@;
put 'ZGFya1ZlcnRpY2FsIixSZXZlcnNlRGlhZ1N0cmlwZToiZGFya0Rvd24iLERpYWdTdHJpcGU6ImRhcmtVcCIsRGlhZ0Nyb3NzOiJkYXJrR3JpZCIsVGhpY2tEaWFnQ3Jvc3M6ImRhcmtUcmVsbGlzIixUaGluSG9yelN0cmlwZToibGlnaHRIb3Jpem9udGFsIixUaGluVmVydFN0cmlwZToibGln'@;
put 'aHRWZXJ0aWNhbCIsVGhpblJldmVyc2VEaWFnU3RyaXBlOiJsaWdodERvd24iLFRoaW5Ib3J6Q3Jvc3M6ImxpZ2h0R3JpZCJ9LHdfPUNlKGJfKSx0NT17b3JhbmdlOjE2NzUzOTIwLGJsYWNrOjAsbmF2eToxMjgsYmx1ZToyNTUsZ3JlZW46MzI3NjgsdGVhbDozMjg5NixsaW1lOjY1MjgwLGFx'@;
put 'dWE6NjU1MzUsc2lsdmVyOjEyNjMyMjU2LG1hcm9vbjo4Mzg4NjA4LHB1cnBsZTo4Mzg4NzM2LG9saXZlOjg0MjEzNzYsZ3JheTo4NDIxNTA0LHJlZDoxNjcxMTY4MCxmdWNoc2lhOjE2NzExOTM1LHllbGxvdzoxNjc3Njk2MCx3aGl0ZToxNjc3NzIxNX07ZnVuY3Rpb24gWHAoTSxGKXtpZihN'@;
put 'LnJlcGxhY2UoIiMiLCIiKS5tYXRjaCgvXlswLTlhLWZBLUZdezZ9JC8pKXJldHVybiBwYXJzZUludChNLnJlcGxhY2UoIiMiLCIiKSwxNik7aWYodDVbTV0pcmV0dXJuIHQ1W01dO3ZhciBPPU0ubWF0Y2goL3JnYlwoXHMqKFxkKilccyosXHMqKFxkKilccyosXHMqKFxkKilccypcKS8pO2lm'@;
put 'KE8pcmV0dXJuKCtPWzFdPDwxNikrKCtPWzJdPDw4KSsgK09bM107aWYoTz1NLm1hdGNoKC9yZ2JhXChccyooXGQqKVxzKixccyooXGQqKVxzKixccyooXGQqKVxzKihcZCopLykpcmV0dXJuIDAhPShPWzRdJiZPWzRdLmxlbmd0aD4wJiYrT1s0XXx8MCl8fCtPWzFdPjB8fCtPWzJdPjB8fCtP'@;
put 'WzNdPjA/KCtPWzFdPDwxNikrKCtPWzJdPDw4KSsgK09bM106Rj8tMToxNjc3NzIxNTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSFRNTCBjb2xvciAiK00pfXZhciBKcD17fTtmdW5jdGlvbiBWNihNKXtNPU18fDk2O3ZhciBGPXtDYWxpYnJpOltdLEFyaWFsOltdLCJTcGFya2Fzc2UgUmci'@;
put 'OltdLFx1NWI4Ylx1NGY1MzpbXSxcdTZlMzhcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWY6W10sIkNlbnR1cnkgR290aGljIjpbXX07cmV0dXJuIEYuQ2FsaWJyaVsxMV09NyxGLkNhbGlicmlbMTJdPXs3Mjo2LDk2OjgsMTIwOjEwLDE0NDoxMn1bTV18fDgsRi5DYWxpYnJpWzEzXT0xMCxGLkNh'@;
put 'bGlicmlbMTRdPTExLEYuQ2FsaWJyaVsxNl09MTIsRi5DYWxpYnJpWzE4XT0xNCxGLkNhbGlicmlbMjBdPTE2LEYuXHU1YjhiXHU0ZjUzWzExXT04LEYuXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmWzExXT04LEZbIlNwYXJrYXNzZSBSZyJdWzExXT03LEYuQXJpYWxbMTBdPTcsRlsi'@;
put 'Q2VudHVyeSBHb3RoaWMiXVsxMl09OSxGfUpwWzcyXT1WNig3MiksSnBbOTZdPVY2KDk2KSxKcFsxMjBdPVY2KDEyMCksSnBbMTQ0XT1WNigxNDQpO3ZhciBNXz1KcFs5Nl07ZnVuY3Rpb24gQ18oTSl7cmV0dXJuKE1fW00ubmFtZXx8TS5Gb250TmFtZV18fFtdKVtNLnN6fHxNLlNpemVdfWZ1'@;
put 'bmN0aW9uIHkzKE0pe2lmKE0pe3ZhciBGPUNfKE0pO2lmKEYpcmV0dXJuIEhsPUZ9cmV0dXJuIEhsPTZ9ZnVuY3Rpb24gU18oTSxGLE8pe3JldHVybiB0MShmdW5jdGlvbiAkTShNLEYsTyl7cmV0dXJuW01hdGgucm91bmQoRlswXSpPK01bMF0qKDEtTykpLE1hdGgucm91bmQoRlsxXSpPK01b'@;
put 'MV0qKDEtTykpLE1hdGgucm91bmQoRlsyXSpPK01bMl0qKDEtTykpXX0oR3AoIm51bWJlciI9PXR5cGVvZiBNLnJnYj8oIjAwMDAwIitNLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOk0ucmdiKSxHcCgibnVtYmVyIj09dHlwZW9mIEYucmdiPygiMDAwMDAiK0YudG9TdHJpbmcoMTYpKS5zbGlj'@;
put 'ZSgtNik6Ri5yZ2IpLE8pKX1mdW5jdGlvbiBqNihNLEYsTyl7aWYoTylzd2l0Y2goK00pe2Nhc2UgNjQ6TT02NTticmVhaztjYXNlIDY1Ok09NjR9dmFyIEo9RiYmRlsrTV18fG1jWytNXXx8UG1bK00tMjAwXTtpZig4MT09K00mJihKPW1jWzFdKSxKfHwoSj1tY1sxXSksIUopdGhyb3cgbmV3'@;
put 'IEVycm9yKCJiYWQgSUNWIGluZGV4ICIrTSk7cmV0dXJuIHQxKEopfWZ1bmN0aW9uIHFNKE0sRixPKXt2YXIgSj17fTtyZXR1cm4gbnVsbCE9TS5pbmRleGVkJiYoSi5pbmRleD1wYXJzZUludChNLmluZGV4ZWQsMTApLEoucmdiPWo2KEouaW5kZXgsRi5JbmRleGVkKSksbnVsbCE9TS50aGVt'@;
put 'ZSYmKEoudGhlbWU9cGFyc2VJbnQoTS50aGVtZSwxMCkpLG51bGwhPU0udGludCYmKEoudGludD1wYXJzZUZsb2F0KE0udGludCkpLG51bGwhPU0ucmdiJiYoSi5yZ2I9TS5yZ2Iuc2xpY2UoLTYpKSxudWxsIT1KLnRoZW1lJiYhSi5yZ2ImJk8udGhlbWVFbGVtZW50cyYmKEoucmdiPSRwKE8u'@;
put 'dGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbSi50aGVtZV0ucmdiLEoudGludHx8MCksSi5yYXdfcmdiPU8udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbSi50aGVtZV0ucmdiKSxKfWZ1bmN0aW9uIHhfKE0sRixPLEope0YuQm9yZGVycz1bXTt2YXIgaWU9e30scGU9e30seWU9ITE7KE1bMF0ubWF0'@;
put 'Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIE1lPWxuKHZlKTtzd2l0Y2gobm4oTWVbMF0pKXtjYXNlIjxib3JkZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJp'@;
put 'Z2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFs'@;
put 'PiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+IjpjYXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+'@;
put 'IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6aWU9e30sTWUuZGlhZ29uYWxVcCYmKGll'@;
put 'LmRpYWdvbmFsVXA9THIoTWUuZGlhZ29uYWxVcCkpLE1lLmRpYWdvbmFsRG93biYmKGllLmRpYWdvbmFsRG93bj1McihNZS5kaWFnb25hbERvd24pKSxGLkJvcmRlcnMucHVzaChpZSk7YnJlYWs7Y2FzZSI8bGVmdCI6Y2FzZSI8bGVmdD4iOnBlPWllLmxlZnQ9e30sTWUuc3R5bGUmJihwZS5z'@;
put 'dHlsZT1NZS5zdHlsZSk7YnJlYWs7Y2FzZSI8cmlnaHQiOmNhc2UiPHJpZ2h0PiI6cGU9aWUucmlnaHQ9e30sTWUuc3R5bGUmJihwZS5zdHlsZT1NZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjpwZT1pZS50b3A9e30sTWUuc3R5bGUmJihwZS5zdHlsZT1NZS5zdHlsZSk7'@;
put 'YnJlYWs7Y2FzZSI8Ym90dG9tIjpjYXNlIjxib3R0b20+IjpwZT1pZS5ib3R0b209e30sTWUuc3R5bGUmJihwZS5zdHlsZT1NZS5zdHlsZSk7YnJlYWs7Y2FzZSI8L2RpYWdvbmFsPiI6aWUuZGlhZ29uYWw9cGUscGU9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjppZS5ob3Jpem9udGFs'@;
put 'PXBlLHBlPXt9O2JyZWFrO2Nhc2UiPC92ZXJ0aWNhbD4iOmllLnZlcnRpY2FsPXBlLHBlPXt9O2JyZWFrO2Nhc2UiPGNvbG9yIjpjYXNlIjxjb2xvcj4iOnBlLmNvbG9yfHwocGUuY29sb3I9e30pLE1lLmF1dG8mJihwZS5jb2xvci5hdXRvPUxyKE1lLmF1dG8pKSxudWxsIT1NZS5yZ2I/cGUu'@;
put 'Y29sb3IucmdiPU1lLnJnYi5zbGljZSgtNik6TWUuaW5kZXhlZD8ocGUuY29sb3IuaW5kZXg9cGFyc2VJbnQoTWUuaW5kZXhlZCwxMCkscGUuY29sb3IucmdiPWo2KHBlLmNvbG9yLmluZGV4LEYuSW5kZXhlZCwhMSkpOk1lLnRoZW1lJiYocGUuY29sb3IudGhlbWU9cGFyc2VJbnQoTWUudGhl'@;
put 'bWUsMTApLE1lLnRpbnQmJihwZS5jb2xvci50aW50PXBhcnNlRmxvYXQoTWUudGludCkpLE1lLnRoZW1lJiZPLnRoZW1lRWxlbWVudHMmJk8udGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihwZS5jb2xvci5yZ2I9JHAoTy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtwZS5jb2xvci50aGVtZV0u'@;
put 'cmdiLHBlLmNvbG9yLnRpbnR8fDApKSksIU1lLmF1dG8mJm51bGw9PU1lLnJnYiYmIU1lLmluZGV4ZWQmJmRlbGV0ZSBwZS5jb2xvcjticmVhaztjYXNlIjxleHQiOnllPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp5ZT0hMTticmVhaztkZWZhdWx0OmlmKEomJkouV1RGJiYheWUpdGhyb3cgbmV3'@;
put 'IEVycm9yKCJ1bnJlY29nbml6ZWQgIitNZVswXSsiIGluIGJvcmRlcnMiKX19KX1mdW5jdGlvbiBiMyhNLEYpe3ZhciBPPVsiPCIrRl07cmV0dXJuIE0mJk0uc3R5bGU/KE8ucHVzaCgnIHN0eWxlPSInK00uc3R5bGUrJyInKSxNLmNvbG9yPyhPLnB1c2goIj4iKSxPLnB1c2gobzEoTS5jb2xv'@;
put 'ciwhMCkpLE8uam9pbigiIikrIjwvIitGKyI+Iik6Ty5qb2luKCIiKSsiLz4iKTpPWzBdKyIvPiJ9ZnVuY3Rpb24ga0woTSxGLE8sSil7Ri5GaWxscz1bXTt2YXIgaWU9e30scGU9e30seWU9ITEsdmU9ITE7KE1bMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihNZSl7dmFyIGpl'@;
put 'PWxuKE1lKTtzd2l0Y2gobm4oamVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2UiPC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdD'@;
put 'b2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Ri5GaWxscy5wdXNoKGllPXt9KTticmVh'@;
put 'aztjYXNlIjxncmFkaWVudEZpbGw+IjppZS5zdG9wcz1bXTticmVhaztjYXNlIjxncmFkaWVudEZpbGwiOmllLnN0b3BzPVtdLGplLmRlZ3JlZSYmKGllLmFuZ2xlPStqZS5kZWdyZWUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsIjpjYXNlIjxwYXR0ZXJuRmlsbD4iOmplLnBhdHRlcm5UeXBl'@;
put 'JiYoaWUucGF0dGVyblR5cGU9amUucGF0dGVyblR5cGUpO2JyZWFrO2Nhc2UiPHBhdHRlcm5GaWxsLz4iOmNhc2UiPC9wYXR0ZXJuRmlsbD4iOmlmKHllKXRocm93IG5ldyBFcnJvcigiYmFkIHN0b3AiKTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8YmdDb2xvciI6Y2FzZSI8ZmdDb2xvciI6'@;
put 'dmFyIFllPW5uKGplWzBdKS5zbGljZSgxKTsiY29sb3IiIT1ZZSYmIWllW1llXSYmKGllW1llXT17fSk7dmFyIHFlPXllP3BlOmllW1llXTtudWxsIT1qZS5pbmRleGVkJiYocWUuaW5kZXg9cGFyc2VJbnQoamUuaW5kZXhlZCwxMCkscWUucmdiPWo2KHFlLmluZGV4LEYuSW5kZXhlZCkpLG51'@;
put 'bGwhPWplLnRoZW1lJiYocWUudGhlbWU9cGFyc2VJbnQoamUudGhlbWUsMTApKSxudWxsIT1qZS50aW50JiYocWUudGludD1wYXJzZUZsb2F0KGplLnRpbnQpKSxudWxsIT1qZS5yZ2ImJihxZS5yZ2I9amUucmdiLnNsaWNlKC02KSksbnVsbCE9amUuYXV0byYmZGVsZXRlIGllW1llXSxudWxs'@;
put 'IT1xZS50aGVtZSYmIXFlLnJnYiYmTy50aGVtZUVsZW1lbnRzJiYocWUucmdiPSRwKE8udGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbcWUudGhlbWVdLnJnYixxZS50aW50fHwwKSxKLldURiYmKHFlLnJhd19yZ2I9Ty50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtxZS50aGVtZV0ucmdiKSk7YnJl'@;
put 'YWs7Y2FzZSI8c3RvcD4iOnllPSEwLHBlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOnllPSEwLHBlPXt9LG51bGwhPWplLnBvc2l0aW9uJiYocGUudj1wYXJzZUZsb2F0KGplLnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+Ijp5ZT0hMSxpZS5zdG9wcy5wdXNoKHBlKTticmVhaztjYXNlIjxl'@;
put 'eHQiOnZlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp2ZT0hMTticmVhaztkZWZhdWx0OmlmKEomJkouV1RGJiYhdmUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitqZVswXSsiIGluIGZpbGxzIil9fSl9ZnVuY3Rpb24gRUwoTSxGLE8sSil7Ri5Gb250cz1bXTt2YXIgaWU9e30scGU9'@;
put 'ITE7KE1bMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih5ZSl7dmFyIHZlPWxuKHllKTtzd2l0Y2gobm4odmVbMF0pKXtjYXNlIjxmb250cyI6Y2FzZSI8Zm9udHM+IjpjYXNlIjwvZm9udHM+IjpicmVhaztjYXNlIjxmb250IjpjYXNlIjxmb250PiI6aWYoIi8+IiE9eWUuc2xp'@;
put 'Y2UoLTIpKWJyZWFrO2Nhc2UiPC9mb250PiI6Y2FzZSI8Zm9udC8+IjpGLkZvbnRzLnB1c2goaWUpLGllPXt9O2JyZWFrO2Nhc2UiPG5hbWUiOnZlLnZhbCYmKGllLm5hbWU9QmkodmUudmFsKSk7YnJlYWs7Y2FzZSI8bmFtZS8+IjpjYXNlIjwvbmFtZT4iOmJyZWFrO2Nhc2UiPGIiOmllLmJv'@;
put 'bGQ9dmUudmFsP0xyKHZlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjppZS5ib2xkPTE7YnJlYWs7Y2FzZSI8L2I+IjpicmVhaztjYXNlIjxpIjppZS5pdGFsaWM9dmUudmFsP0xyKHZlLnZhbCk6MTticmVhaztjYXNlIjxpLz4iOmNhc2UiPGk+IjppZS5pdGFsaWM9MTticmVh'@;
put 'aztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaCh2ZS52YWwpe2Nhc2Uibm9uZSI6aWUudW5kZXJsaW5lPTA7YnJlYWs7Y2FzZSJzaW5nbGUiOmllLnVuZGVybGluZT0xO2JyZWFrO2Nhc2UiZG91YmxlIjppZS51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmci'@;
put 'OmllLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOmllLnVuZGVybGluZT0zNH1icmVhaztjYXNlIjx1Lz4iOmNhc2UiPHU+IjppZS51bmRlcmxpbmU9MTticmVhaztjYXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6aWUuc3RyaWtlPXZlLnZhbD9Mcih2ZS52'@;
put 'YWwpOjE7YnJlYWs7Y2FzZSI8c3RyaWtlLz4iOmllLnN0cmlrZT0xO2JyZWFrO2Nhc2UiPG91dGxpbmUiOmllLm91dGxpbmU9dmUudmFsP0xyKHZlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4iOmllLm91dGxpbmU9MTticmVhaztjYXNlIjxzaGFkb3ciOmllLnNoYWRvdz12ZS52YWw/'@;
put 'THIodmUudmFsKToxO2JyZWFrO2Nhc2UiPHNoYWRvdy8+IjppZS5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6aWUuY29uZGVuc2U9dmUudmFsP0xyKHZlLnZhbCk6MTticmVhaztjYXNlIjxjb25kZW5zZS8+IjppZS5jb25kZW5zZT0xO2JyZWFrO2Nhc2UiPGV4dGVuZCI6aWUuZXh0'@;
put 'ZW5kPXZlLnZhbD9Mcih2ZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOmllLmV4dGVuZD0xO2JyZWFrO2Nhc2UiPHN6Ijp2ZS52YWwmJihpZS5zej0rdmUudmFsKTticmVhaztjYXNlIjxzei8+IjpjYXNlIjwvc3o+IjpicmVhaztjYXNlIjx2ZXJ0QWxpZ24iOiJub25lIiE9KHZlLnZh'@;
put 'bHx8Im5vbmUiKSYmKGllLnZhbGlnbj12ZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5Ijp2ZS52YWwmJihpZS5mYW1pbHk9cGFyc2VJbnQodmUudmFsLDEwKSk7YnJlYWs7Y2Fz'@;
put 'ZSI8ZmFtaWx5Lz4iOmNhc2UiPC9mYW1pbHk+IjpicmVhaztjYXNlIjxzY2hlbWUiOnZlLnZhbCYmKGllLnNjaGVtZT12ZS52YWwpO2JyZWFrO2Nhc2UiPHNjaGVtZS8+IjpjYXNlIjwvc2NoZW1lPiI6YnJlYWs7Y2FzZSI8Y2hhcnNldCI6aWYoIjEiPT12ZS52YWwpYnJlYWs7dmUuY29kZXBh'@;
put 'Z2U9SVtwYXJzZUludCh2ZS52YWwsMTApXTticmVhaztjYXNlIjxjb2xvciI6aWUuY29sb3J8fChpZS5jb2xvcj17fSksdmUuYXV0byYmKGllLmNvbG9yLmF1dG89THIodmUuYXV0bykpLHZlLnJnYj9pZS5jb2xvci5yZ2I9dmUucmdiLnNsaWNlKC02KTp2ZS5pbmRleGVkPyhpZS5jb2xvci5p'@;
put 'bmRleD1wYXJzZUludCh2ZS5pbmRleGVkLDEwKSxpZS5jb2xvci5yZ2I9ajYoaWUuY29sb3IuaW5kZXgsRi5JbmRleGVkKSk6dmUudGhlbWUmJihpZS5jb2xvci50aGVtZT1wYXJzZUludCh2ZS50aGVtZSwxMCksdmUudGludCYmKGllLmNvbG9yLnRpbnQ9cGFyc2VGbG9hdCh2ZS50aW50KSks'@;
put 'dmUudGhlbWUmJk8udGhlbWVFbGVtZW50cyYmTy50aGVtZUVsZW1lbnRzLmNsclNjaGVtZSYmKGllLmNvbG9yLnJnYj0kcChPLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2llLmNvbG9yLnRoZW1lXS5yZ2IsaWUuY29sb3IudGludHx8MCkpKTticmVhaztjYXNlIjxjb2xvci8+IjpjYXNlIjwv'@;
put 'Y29sb3I+IjpicmVhaztjYXNlIjxBbHRlcm5hdGVDb250ZW50IjpwZT0hMDticmVhaztjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOnBlPSExO2JyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2Fz'@;
put 'ZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoSiYmSi5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gZm9udHMiKX19KX12YXIgUXA9ezA6Im5vbmUiLDE6InNpbmdsZSIsMjoiZG91YmxlIiwzMzoic2luZ2xlQWNjb3VudGluZyIsMzQ6'@;
put 'ImRvdWJsZUFjY291bnRpbmcifSx6Mj1bIm51bUZtdElkIiwiZmlsbElkIiwiZm9udElkIiwiYm9yZGVySWQiLCJ4ZklkIl0sVTI9WyJhcHBseUFsaWdubWVudCIsImFwcGx5Qm9yZGVyIiwiYXBwbHlGaWxsIiwiYXBwbHlGb250IiwiYXBwbHlOdW1iZXJGb3JtYXQiLCJhcHBseVByb3RlY3Rp'@;
put 'b24iLCJwaXZvdEJ1dHRvbiIsInF1b3RlUHJlZml4Il0sdzM9ZnVuY3Rpb24oKXt2YXIgTT0vPCg/Olx3KzopP2ZvbnQoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udD4vLEY9LzwoPzpcdys6KT9udW1GbXQoW14+XSopXC8+LyxPPS88KD86XHcrOik/ZmlsbChbXj5dKik+W1xTXHNd'@;
put 'Kj88XC8oPzpcdys6KT9maWxsPi8saWU9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHZlLE1lLGplLFllKXt2YXIgaHQsa3QscWU9e30saXQ9e307cmV0dXJuKGh0PXZlLm1hdGNoKE0pKSYmKEVMKGh0LHFlLGpl'@;
put 'LFllKSwocWUuRm9udHN8fFtdKVswXSYmenQoaXQscWUuRm9udHNbMF0pKSwoaHQ9dmUubWF0Y2goRikpJiYoa3Q9bG4oQmkoaHRbMF0pKSxpdC56PWt0LmZvcm1hdENvZGU/bXIoa3QuZm9ybWF0Q29kZSk6KE1lLk51bWJlckZtdHx8W10pWytrdC5udW1GbXRJZF18fCJHZW5lcmFsIiksKGh0'@;
put 'PXZlLm1hdGNoKE8pKSYmKGtMKGh0LHFlLGplLFllKSwocWUuRmlsbHN8fFtdKVswXSYmenQoaXQscWUuRmlsbHNbMF0pKSwoaHQ9dmUubWF0Y2goaWUpKSYmKHhfKGh0LHFlLGplLFllKSwocWUuQm9yZGVyc3x8W10pWzBdJiZ6dChpdCxxZS5Cb3JkZXJzWzBdKSksaXR9fSgpLCRpPS88KD86'@;
put 'XHcrOik/ZHhmPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmPi9nLElyPS88KD86XHcrOik/dGFibGVTdHlsZVxiLio/PltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZT4vZzt2YXIgZUM9ZnVuY3Rpb24oKXt2YXIgRj0vPCg/Olx3KzopP251bUZtdHMoW14+XSopPltcU1xzXSo/PFwvKD86'@;
put 'XHcrOik/bnVtRm10cz4vLE89LzwoPzpcdys6KT9jZWxsU3R5bGVYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlWGZzPi8sSj0vPCg/Olx3KzopP2NlbGxTdHlsZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFN0eWxlcz4vLGllPS88KD86XHcrOik/Y2Vs'@;
put 'bFhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsWGZzPi8scGU9LzwoPzpcdys6KT9maWxscyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9maWxscz4vLHllPS88KD86XHcrOik/Zm9udHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Zm9udHM+Lyx2ZT0vPCg/Olx3Kzop'@;
put 'P2JvcmRlcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVycz4vLE1lPS88KD86XHcrOik/aW5kZXhlZENvbG9ycyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9pbmRleGVkQ29sb3JzPi8samU9LzwoPzpcdys6KT90YWJsZVN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpc'@;
put 'dys6KT90YWJsZVN0eWxlcz4vLFllPS88KD86XHcrOik/ZHhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9keGZzPi87cmV0dXJuIGZ1bmN0aW9uKGl0LGh0LGt0KXt2YXIgdnQsdXQ9e307cmV0dXJuIGl0PygodnQ9KGl0PWl0LnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIi'@;
put 'KS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIikpLm1hdGNoKE1lKSkmJmZ1bmN0aW9uIFRMKE0sRixPKXtGLkluZGV4ZWR8fChGLkluZGV4ZWQ9W10pO3ZhciBKPSExOyhNWzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBwZT1sbihp'@;
put 'ZSk7c3dpdGNoKG5uKHBlWzBdKSl7Y2FzZSI8aW5kZXhlZENvbG9ycz4iOmNhc2UiPGluZGV4ZWRDb2xvcnMiOmNhc2UiPGluZGV4ZWRDb2xvcnMvPiI6Y2FzZSI8L2luZGV4ZWRDb2xvcnM+IjpjYXNlIjwvcmdiQ29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9l'@;
put 'eHRMc3Q+IjpicmVhaztjYXNlIjxyZ2JDb2xvciI6ZGVsZXRlIHBlWzBdO3ZhciB5ZT1wYXJzZUludChwZS5yZ2Iuc2xpY2UoLTYpLDE2KTtGLkluZGV4ZWQucHVzaChbeWU+PjE2JjI1NSx5ZT4+OCYyNTUsMjU1JnllXSk7YnJlYWs7Y2FzZSI8ZXh0IjpKPSEwO2JyZWFrO2Nhc2UiPC9leHQ+'@;
put 'IjpKPSExO2JyZWFrO2RlZmF1bHQ6aWYoTyYmTy5XVEYmJiFKKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KHZ0LHV0LGt0KSwodnQ9aXQubWF0Y2goRikpJiZmdW5jdGlvbiBYTShNLEYsTyl7Ri5OdW1iZXJGbXQ9W107Zm9yKHZh'@;
put 'ciBKPWF0KEMuX3RhYmxlKSxpZT0wO2llPEoubGVuZ3RoOysraWUpRi5OdW1iZXJGbXRbSltpZV1dPUMuX3RhYmxlW0pbaWVdXTt2YXIgcGU9TVswXS5tYXRjaCgkdCk7aWYocGUpZm9yKGllPTA7aWU8cGUubGVuZ3RoOysraWUpe3ZhciB5ZT1sbihwZVtpZV0pO3N3aXRjaChubih5ZVswXSkp'@;
put 'e2Nhc2UiPG51bUZtdHMiOmNhc2UiPC9udW1GbXRzPiI6Y2FzZSI8bnVtRm10cy8+IjpjYXNlIjxudW1GbXRzPiI6Y2FzZSI8L251bUZtdD4iOmJyZWFrO2Nhc2UiPG51bUZtdCI6dmFyIHZlPW1yKEJpKHllLmZvcm1hdENvZGUpKSxNZT1wYXJzZUludCh5ZS5udW1GbXRJZCwxMCk7aWYoRi5O'@;
put 'dW1iZXJGbXRbTWVdPXZlLE1lPjApe2lmKE1lPjM5Mil7Zm9yKE1lPTM5MjtNZT42MCYmbnVsbCE9Ri5OdW1iZXJGbXRbTWVdOy0tTWUpO0YuTnVtYmVyRm10W01lXT12ZX1DLmxvYWQodmUsTWUpfWJyZWFrO2RlZmF1bHQ6aWYoTy5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQg'@;
put 'Iit5ZVswXSsiIGluIG51bUZtdHMiKX19fSh2dCx1dCxrdCksKHZ0PWl0Lm1hdGNoKHllKSkmJkVMKHZ0LHV0LGh0LGt0KSwodnQ9aXQubWF0Y2gocGUpKSYma0wodnQsdXQsaHQsa3QpLCh2dD1pdC5tYXRjaCh2ZSkpJiZ4Xyh2dCx1dCxodCxrdCksKHZ0PWl0Lm1hdGNoKE8pKSYmZnVuY3Rp'@;
put 'b24gSFooTSxGLE8pe0YuQ2VsbFN0eWxlWGY9W107dmFyIEosaWU9ITE7KE1bMF0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPWxuKHBlKSx2ZT0wO3N3aXRjaChubih5ZVswXSkpe2Nhc2UiPGNlbGxTdHlsZVhmcyI6Y2FzZSI8Y2VsbFN0eWxlWGZzPiI6Y2Fz'@;
put 'ZSI8Y2VsbFN0eWxlWGZzLz4iOmNhc2UiPC9jZWxsU3R5bGVYZnM+IjpjYXNlIjwveGY+IjpjYXNlIjwvYWxpZ25tZW50PiI6Y2FzZSI8L3Byb3RlY3Rpb24+IjpjYXNlIjxwcm90ZWN0aW9uLz4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nh'@;
put 'c2UiPHhmIjpjYXNlIjx4Zi8+Ijpmb3IoZGVsZXRlKEo9eWUpWzBdLHZlPTA7dmU8ejIubGVuZ3RoOysrdmUpSlt6Mlt2ZV1dJiYoSlt6Mlt2ZV1dPXBhcnNlSW50KEpbejJbdmVdXSwxMCkpO2Zvcih2ZT0wO3ZlPFUyLmxlbmd0aDsrK3ZlKUpbVTJbdmVdXSYmKEpbVTJbdmVdXT1McihKW1Uy'@;
put 'W3ZlXV0pKTtpZihGLk51bWJlckZtdCYmSi5udW1GbXRJZD4zOTIpZm9yKHZlPTM5Mjt2ZT42MDstLXZlKWlmKEYuTnVtYmVyRm10W0oubnVtRm10SWRdPT1GLk51bWJlckZtdFt2ZV0pe0oubnVtRm10SWQ9dmU7YnJlYWt9Ri5DZWxsU3R5bGVYZi5wdXNoKEopO2JyZWFrO2Nhc2UiPGFsaWdu'@;
put 'bWVudCI6Y2FzZSI8YWxpZ25tZW50Lz4iOnZhciBNZT17fTt5ZS52ZXJ0aWNhbCYmKE1lLnZlcnRpY2FsPXllLnZlcnRpY2FsKSx5ZS5ob3Jpem9udGFsJiYoTWUuaG9yaXpvbnRhbD15ZS5ob3Jpem9udGFsKSxudWxsIT15ZS50ZXh0Um90YXRpb24mJihNZS50ZXh0Um90YXRpb249eWUudGV4'@;
put 'dFJvdGF0aW9uKSx5ZS5pbmRlbnQmJihNZS5pbmRlbnQ9eWUuaW5kZW50KSx5ZS53cmFwVGV4dCYmKE1lLndyYXBUZXh0PXllLndyYXBUZXh0KSx5ZS5zaHJpbmtUb0ZpdCYmKE1lLnNocmlua1RvRml0PUxyKHllLnNocmlua1RvRml0KSksSi5hbGlnbm1lbnQ9TWU7YnJlYWs7Y2FzZSI8cHJv'@;
put 'dGVjdGlvbiI6Si5wcm90ZWN0aW9uPXt9LExyKHllLmhpZGRlbikmJihKLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT15ZS5sb2NrZWQmJihKLnByb3RlY3Rpb24uZWRpdGFibGU9IUxyKHllLmxvY2tlZCkpO2JyZWFrO2Nhc2UiPGV4dCI6aWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmll'@;
put 'PSExO2JyZWFrO2RlZmF1bHQ6aWYoTyYmTy5XVEYmJiFpZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3llWzBdKyIgaW4gY2VsbFN0eWxlWGZzIil9fSl9KHZ0LHV0LGt0KSwodnQ9aXQubWF0Y2goSikpJiZmdW5jdGlvbiBWWihNLEYsTyl7Ri5DZWxsU3R5bGVYZnx8KEYuQ2Vs'@;
put 'bFN0eWxlWGY9W10pO3ZhciBKPSExOyhNWzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBwZT1sbihpZSk7c3dpdGNoKG5uKHBlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlcyI6Y2FzZSI8Y2VsbFN0eWxlcz4iOmNhc2UiPGNlbGxTdHlsZXMvPiI6Y2FzZSI8L2NlbGxT'@;
put 'dHlsZXM+IjpjYXNlIjwveGY+IjpjYXNlIjwvY2VsbFN0eWxlPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Y2VsbFN0eWxlIjpjYXNlIjxjZWxsU3R5bGUvPiI6ZGVsZXRlIHBlWzBdO3ZhciB5ZT0rcGUueGZJZDtpZihGLkNlbGxT'@;
put 'dHlsZVhmW3llXSlGLkNlbGxTdHlsZVhmW3llXS5zdHlsZT1CaShwZS5uYW1lKTtlbHNlIGlmKCFwZS5idWlsdGluSWQpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCBDZWxsU3R5bGUgIit5ZSk7YnJlYWs7Y2FzZSI8ZXh0IjpKPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpKPSExO2Jy'@;
put 'ZWFrO2RlZmF1bHQ6aWYoTyYmTy5XVEYmJiFKKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrcGVbMF0rIiBpbiBjZWxsU3R5bGVzIil9fSl9KHZ0LHV0LGt0KSwodnQ9aXQubWF0Y2goaWUpKSYmZnVuY3Rpb24gSk0oTSxGLE8pe0YuQ2VsbFhmPVtdO3ZhciBKLGllPSExOyhNWzBd'@;
put 'Lm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT1sbihwZSksdmU9MDtzd2l0Y2gobm4oeWVbMF0pKXtjYXNlIjxjZWxsWGZzIjpjYXNlIjxjZWxsWGZzPiI6Y2FzZSI8Y2VsbFhmcy8+IjpjYXNlIjwvY2VsbFhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1l'@;
put 'bnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoSj15ZSlbMF0sdmU9MDt2ZTx6Mi5sZW5ndGg7Kyt2ZSlKW3oy'@;
put 'W3ZlXV0mJihKW3oyW3ZlXV09cGFyc2VJbnQoSlt6Mlt2ZV1dLDEwKSk7Zm9yKHZlPTA7dmU8VTIubGVuZ3RoOysrdmUpSltVMlt2ZV1dJiYoSltVMlt2ZV1dPUxyKEpbVTJbdmVdXSkpO2lmKEYuTnVtYmVyRm10JiZKLm51bUZtdElkPjM5Milmb3IodmU9MzkyO3ZlPjYwOy0tdmUpaWYoRi5O'@;
put 'dW1iZXJGbXRbSi5udW1GbXRJZF09PUYuTnVtYmVyRm10W3ZlXSl7Si5udW1GbXRJZD12ZTticmVha31GLkNlbGxTdHlsZVhmJiZKLnhmSWQmJkYuQ2VsbFN0eWxlWGZbSi54ZklkXSYmRi5DZWxsU3R5bGVYZltKLnhmSWRdLnN0eWxlJiYoSi5zdHlsZT1GLkNlbGxTdHlsZVhmW0oueGZJZF0u'@;
put 'c3R5bGUpLEYuQ2VsbFhmLnB1c2goSik7YnJlYWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIE1lPXt9O3llLnZlcnRpY2FsJiYoTWUudmVydGljYWw9eWUudmVydGljYWwpLHllLmhvcml6b250YWwmJihNZS5ob3Jpem9udGFsPXllLmhvcml6b250YWwpLG51bGwh'@;
put 'PXllLnRleHRSb3RhdGlvbiYmKE1lLnRleHRSb3RhdGlvbj15ZS50ZXh0Um90YXRpb24pLHllLmluZGVudCYmKE1lLmluZGVudD15ZS5pbmRlbnQpLHllLndyYXBUZXh0JiYoTWUud3JhcFRleHQ9THIoeWUud3JhcFRleHQpKSx5ZS5zaHJpbmtUb0ZpdCYmKE1lLnNocmlua1RvRml0PUxyKHll'@;
put 'LnNocmlua1RvRml0KSksSi5hbGlnbm1lbnQ9TWU7YnJlYWs7Y2FzZSI8cHJvdGVjdGlvbiI6Si5wcm90ZWN0aW9uPXt9LExyKHllLmhpZGRlbikmJihKLnByb3RlY3Rpb24uaGlkZGVuPSEwKSxudWxsIT15ZS5sb2NrZWQmJihKLnByb3RlY3Rpb24uZWRpdGFibGU9IUxyKHllLmxvY2tlZCkp'@;
put 'O2JyZWFrO2Nhc2UiPEFsdGVybmF0ZUNvbnRlbnQiOmNhc2UiPGV4dCI6aWU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpjYXNlIjwvZXh0PiI6aWU9ITE7YnJlYWs7ZGVmYXVsdDppZihPJiZPLldURiYmIWllKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVb'@;
put 'MF0rIiBpbiBjZWxsWGZzIil9fSl9KHZ0LHV0LGt0KSwodnQ9aXQubWF0Y2goWWUpKSYmZnVuY3Rpb24gUU0oTSxGLE8sSil7Ri5EWEZ8fChGLkRYRj1bXSksKE1bMF0ubWF0Y2goJGkpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihpZSl7Ri5EWEYucHVzaCh3MyhpZSxGLE8sSikpfSl9KHZ0LHV0'@;
put 'LGh0LGt0KSwodnQ9aXQubWF0Y2goamUpKSYmZnVuY3Rpb24gQUwoTSxGLE8sSil7Ri5UYWJsZXx8KEYuVGFibGU9W10pLChNWzBdLm1hdGNoKElyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaWUpe0YuVGFibGUucHVzaChmdW5jdGlvbiBETChNLEYsTyxKKXt2YXIgaWU9ITEscGU9e307cmV0'@;
put 'dXJuKE0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih5ZSl7dmFyIHZlPWxuKHllKTtzd2l0Y2gobm4odmVbMF0pKXtjYXNlIjx0YWJsZVN0eWxlPiI6Y2FzZSI8dGFibGVTdHlsZSI6cGUubmFtZT12ZS5uYW1lLnJlcGxhY2UoL14oVGFibGV8UGl2b3QpU3R5bGUvLCIiKSxwZS5y'@;
put 'YXduYW1lPXZlLm5hbWUscGUucGl2b3Q9IXZlLnBpdm90fHxMcih2ZS5waXZvdCkscGUudGFibGU9IXZlLnRhYmxlfHxMcih2ZS50YWJsZSk7YnJlYWs7Y2FzZSI8dGFibGVTdHlsZS8+IjpjYXNlIjwvdGFibGVTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4'@;
put 'dExzdD4iOmJyZWFrO2Nhc2UiPHRhYmxlU3R5bGVFbGVtZW50IjppZih2ZS50eXBlJiZ2ZS5keGZJZCl7aWYoIUYuRFhGfHwhRi5EWEZbK3ZlLmR4ZklkXSl0aHJvdyBuZXcgRXJyb3IoeWUrIiBjYW5ub3QgZmluZCBEWEYiKTtwZVt2ZS50eXBlXT1GLkRYRlsrdmUuZHhmSWRdfWJyZWFrO2Nh'@;
put 'c2UiPGV4dCI6aWU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmllPSExO2JyZWFrO2RlZmF1bHQ6aWYoSiYmSi5XVEYmJiFpZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK3ZlWzBdKyIgaW4gdGFibGVTdHlsZSIpfX0pLHBlfShpZSxGLDAsSikpfSl9KHZ0LHV0LDAsa3QpLCh1dC5G'@;
put 'b250c3x8W10pWzBdJiZ5Myh1dC5Gb250c1swXSksdXQpOnV0fX0oKSx0Qz1kcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6VGkubWFpblswXSwieG1sbnM6dnQiOlRpLnZ0fSk7ZnVuY3Rpb24gQjYoTSxGKXt2YXIgSixPPVtQbix0Q107TS5TU0YmJm51bGwhPShKPWZ1bmN0aW9uIGU0KE0p'@;
put 'e3ZhciBGPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihPKXtmb3IodmFyIEo9T1swXTtKPD1PWzFdOysrSiludWxsIT1NW0pdJiYoRltGLmxlbmd0aF09ZHIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6Sixmb3Jt'@;
put 'YXRDb2RlOnlyKE1bSl0pfSkpfSksMT09PUYubGVuZ3RoPyIiOihGW0YubGVuZ3RoXT0iPC9udW1GbXRzPiIsRlswXT1kcigibnVtRm10cyIsbnVsbCx7Y291bnQ6Ri5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLEYuam9pbigiIikpfShNLlNTRikpJiYoT1tPLmxlbmd0aF09SiksT1tP'@;
put 'Lmxlbmd0aF09ZnVuY3Rpb24gT2QoTSl7dmFyIEY9W107cmV0dXJuIE0uZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgSj1bIjxmb250PiJdO08uYm9sZCYmSi5wdXNoKCI8Yi8+IiksTy5pdGFsaWMmJkoucHVzaCgiPGkvPiIpLE8uc3RyaWtlJiZKLnB1c2goIjxzdHJpa2UvPiIpLE8uc2hhZG93'@;
put 'JiZKLnB1c2goIjxzaGFkb3cvPiIpLFFwWytPLnVuZGVybGluZV0mJkoucHVzaCgnPHUgdmFsPSInK1FwWytPLnVuZGVybGluZV0rJyIvPicpLE8uc3omJkoucHVzaCgnPHN6IHZhbD0iJytPLnN6KyciLz4nKSxPLmNvbG9yJiZKLnB1c2gobzEoTy5jb2xvciwhMCkpLE8ubmFtZSYmSi5wdXNo'@;
put 'KCc8bmFtZSB2YWw9IicrTy5uYW1lKyciLz4nKSxPLmZhbWlseSYmSi5wdXNoKCc8ZmFtaWx5IHZhbD0iJytPLmZhbWlseSsnIi8+JyksTy5zY2hlbWUmJkoucHVzaCgnPHNjaGVtZSB2YWw9IicrTy5zY2hlbWUrJyIvPicpLE8udmFsaWduJiZKLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK08u'@;
put 'dmFsaWduKygic3ViIj09Ty52YWxpZ258fCJzdXBlciI9PU8udmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksRi5wdXNoKEouam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrRi5sZW5ndGgrJyI+JytGLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChNLlN0eWxlc3x8e30pLkZv'@;
put 'bnRzfHxbXSksT1tPLmxlbmd0aF09ZnVuY3Rpb24gS00oTSl7dmFyIEY9W107cmV0dXJuIE0uZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgSj1udWxsO2lmKE8uc3RvcHMmJk8uc3RvcHMubGVuZ3RoKXt2YXIgaWU9e307Ty5hbmdsZSYmKGllLmRlZ3JlZT1NYXRoLnJvdW5kKE8uYW5nbGUpKSxK'@;
put 'PU8uc3RvcHMubWFwKGZ1bmN0aW9uKHBlKXtyZXR1cm4gZHIoInN0b3AiLG8xKHBlLCJjb2xvciIsITApLG51bGwhPXBlLnY/e3Bvc2l0aW9uOnBlLnZ9Ont9KX0pLEYucHVzaCgiPGZpbGw+IitkcigiZ3JhZGllbnRGaWxsIixKLmpvaW4oIiIpLGllKSsiPC9maWxsPiIpfWVsc2V7aWYoTy5m'@;
put 'Z0NvbG9yKXtpZihKPShKfHwiIikrIjxmZ0NvbG9yICIsTy5mZ0NvbG9yLnRoZW1lKUorPSd0aGVtZT0iJytPLmZnQ29sb3IudGhlbWUrJyInKyhPLmZnQ29sb3IudGludD8nIHRpbnQ9IicrTy5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9Ty5mZ0NvbG9yLmluZGV4'@;
put 'JiZudWxsPT1PLmZnQ29sb3IucmdiKUorPSdpbmRleGVkPSInK08uZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKE8uZmdDb2xvci5hdXRvKUorPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PU8uZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIithdChPLmZnQ29s'@;
put 'b3IpLmpvaW4oInwiKSk7Sis9J3JnYj0iRkYnK1B1KE8uZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PU8ucGF0dGVyblR5cGUmJiFPLmJnQ29sb3ImJihPLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoTy5iZ0NvbG9yKWlmKEo9KEp8fCIiKSsiPGJnQ29sb3IgIixPLmJnQ29sb3IudGhlbWUp'@;
put 'Sis9J3RoZW1lPSInK08uYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPU8uYmdDb2xvci5pbmRleCYmbnVsbD09Ty5iZ0NvbG9yLnJnYilKKz0naW5kZXhlZD0iJytPLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihPLmJnQ29sb3IuYXV0bylKKz0nYXV0bz0iMSIvPic7ZWxz'@;
put 'ZXtpZihudWxsPT1PLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrYXQoTy5iZ0NvbG9yKS5qb2luKCJ8IikpO0orPSdyZ2I9IkZGJytQdShPLmJnQ29sb3IucmdiKSsnIi8+J31GLnB1c2goIjxmaWxsPiIrZHIoInBhdHRlcm5GaWxsIixKLHtwYXR0ZXJuVHlwZTpP'@;
put 'LnBhdHRlcm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK0YubGVuZ3RoKyciPicrRi5qb2luKCIiKSsiPC9maWxscz4ifSgoTS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLE9bTy5sZW5ndGhdPWZ1bmN0aW9uIHBhKE0pe3ZhciBGPVtdO3JldHVybiBNLmZvckVhY2goZnVu'@;
put 'Y3Rpb24oTyl7dmFyIEo9W107Si5wdXNoKGIzKE8ubGVmdCwibGVmdCIpKSxKLnB1c2goYjMoTy5yaWdodCwicmlnaHQiKSksSi5wdXNoKGIzKE8udG9wLCJ0b3AiKSksSi5wdXNoKGIzKE8uYm90dG9tLCJib3R0b20iKSksSi5wdXNoKGIzKE8uZGlhZ29uYWwsImRpYWdvbmFsIikpLEYucHVz'@;
put 'aCgiPGJvcmRlcj4iK0ouam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK0YubGVuZ3RoKyciPicrRi5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KChNLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxPW08ubGVuZ3RoXT1mdW5jdGlvbiBOWihNKXt2YXIgRj1bJzx4ZiBu'@;
put 'dW1GbXRJZD0iMCIgZm9udElkPSIwIiBmaWxsSWQ9IjAiIGJvcmRlcklkPSIwIi8+J107aWYoTSlmb3IodmFyIE89MTtPPE0ubGVuZ3RoOysrTylGLnB1c2goZHIoInhmIixudWxsLHtudW1GbXRJZDpNW09dLm51bUZtdElkfHwwLGZvbnRJZDpNW09dLmZvbnRJZHx8MCxmaWxsSWQ6TVtPXS5m'@;
put 'aWxsSWR8fDAsYm9yZGVySWQ6TVtPXS5ib3JkZXJJZHx8MH0pKTtyZXR1cm4nPGNlbGxTdHlsZVhmcyBjb3VudD0iJytGLmxlbmd0aCsnIj4nK0Yuam9pbigiIikrIjwvY2VsbFN0eWxlWGZzPiJ9KEYuY2VsbFN0eWxlWGZzKSwoSj1mdW5jdGlvbiBGWihNKXt2YXIgRj1bXTtyZXR1cm4gRltG'@;
put 'Lmxlbmd0aF09ZHIoImNlbGxYZnMiLG51bGwpLE0uZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgSj1PLmFsaWdubWVudDtkZWxldGUgTy5hbGlnbm1lbnQ7dmFyIGllPU8ucHJvdGVjdGlvbjtkZWxldGUgTy5wcm90ZWN0aW9uO3ZhciBwZT1KP2RyKCJhbGlnbm1lbnQiLG51bGwsSik6IiI7cGUr'@;
put 'PWllP2RyKCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46aWUuaGlkZGVuPzE6MCxsb2NrZWQ6aWUuZWRpdGFibGU/MDoxfSk6IiIsRltGLmxlbmd0aF09ZHIoInhmIixwZXx8bnVsbCxPKSxKJiYoTy5hbGlnbm1lbnQ9SiksaWUmJihPLnByb3RlY3Rpb249aWUpfSksRltGLmxlbmd0aF09Ijwv'@;
put 'Y2VsbFhmcz4iLDI9PT1GLmxlbmd0aD8iIjooRlswXT1kcigiY2VsbFhmcyIsbnVsbCx7Y291bnQ6Ri5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLEYuam9pbigiIikpfShGLmNlbGxYZnMpKSYmKE9bTy5sZW5ndGhdPUopLE9bTy5sZW5ndGhdPWZ1bmN0aW9uIGpaKE0pe3ZhciBGPVsn'@;
put 'PGNlbGxTdHlsZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKE0pZm9yKHZhciBPPTE7TzxNLmxlbmd0aDsrK08pRi5wdXNoKGRyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6TVtPXS5uYW1lLHhmSWQ6T30pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9Iicr'@;
put 'Ri5sZW5ndGgrJyI+JytGLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oRi5jZWxsU3R5bGVYZnMpLE0uU3R5bGVzLkRYRnx8KE0uU3R5bGVzLkRYRj1bXSk7dmFyIGllPWZ1bmN0aW9uIG4xKE0sRixPKXt2YXIgSj1bJzx0YWJsZVN0eWxlcyBjb3VudD0iJysoTXx8W10pLmxlbmd0aCsnIiBk'@;
put 'ZWZhdWx0VGFibGVTdHlsZT0iVGFibGVTdHlsZU1lZGl1bTkiIGRlZmF1bHRQaXZvdFN0eWxlPSJQaXZvdFN0eWxlTWVkaXVtNCInXTtyZXR1cm4gTSYmTS5sZW5ndGg/KEpbMF0rPSI+IixNLmZvckVhY2goZnVuY3Rpb24oaWUpe0oucHVzaChmdW5jdGlvbiBrXyhNLEYsTyl7dmFyIEo9W107'@;
put 'WyJ3aG9sZVRhYmxlIiwiaGVhZGVyUm93IiwidG90YWxSb3ciLCJmaXJzdENvbHVtbiIsImxhc3RDb2x1bW4iLCJmaXJzdFJvd1N0cmlwZSIsInNlY29uZFJvd1N0cmlwZSIsImZpcnN0Q29sdW1uU3RyaXBlIiwic2Vjb25kQ29sdW1uU3RyaXBlIiwiZmlyc3RIZWFkZXJDZWxsIiwibGFzdEhl'@;
put 'YWRlckNlbGwiLCJmaXJzdFRvdGFsQ2VsbCIsImxhc3RUb3RhbENlbGwiLCJmaXJzdFN1YnRvdGFsQ29sdW1uIiwic2Vjb25kU3VidG90YWxDb2x1bW4iLCJ0aGlyZFN1YnRvdGFsQ29sdW1uIiwiZmlyc3RTdWJ0b3RhbFJvdyIsInNlY29uZFN1YnRvdGFsUm93IiwidGhpcmRTdWJ0b3RhbFJv'@;
put 'dyIsImJsYW5rUm93IiwiZmlyc3RDb2x1bW5TdWJoZWFkaW5nIiwic2Vjb25kQ29sdW1uU3ViaGVhZGluZyIsInRoaXJkQ29sdW1uU3ViaGVhZGluZyIsImZpcnN0Um93U3ViaGVhZGluZyIsInNlY29uZFJvd1N1YmhlYWRpbmciLCJ0aGlyZFJvd1N1YmhlYWRpbmciLCJwYWdlRmllbGRMYWJl'@;
put 'bHMiLCJwYWdlRmllbGRWYWx1ZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtpZihNW3BlXSl7dmFyIHllPWh2KEYsTVtwZV0pO0oucHVzaCgnPHRhYmxlU3R5bGVFbGVtZW50IGR4ZklkPSInK3llKyciIHR5cGU9IicrcGUrJyIvPicpfX0pO3ZhciBpZT0nPHRhYmxlU3R5bGUgY291bnQ9Iicr'@;
put 'Si5sZW5ndGgrJyIgcGl2b3Q9IicrICshIU0ucGl2b3QrJyIgbmFtZT0iJytNLm5hbWUrJyInO3JldHVybiBKLmxlbmd0aD9pZSsiPiIrSi5qb2luKCIiKSsiPC90YWJsZVN0eWxlPiI6aWUrIi8+In0oaWUsRikpfSksSi5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpKWzBdKyIvPiJ9KChN'@;
put 'LlN0eWxlc3x8e30pLlRhYmxlfHxbXSxNLlN0eWxlcy5EWEYpO3JldHVybiBPW08ubGVuZ3RoXT1mdW5jdGlvbiBMTChNLEYpe2lmKCFNLmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBPPVsnPGR4ZnMgY291bnQ9IicrTS5sZW5ndGgrJyI+J107cmV0dXJuIE0uZm9yRWFj'@;
put 'aChmdW5jdGlvbihKKXtPLnB1c2goZnVuY3Rpb24gbjUoTSxGKXt2YXIgTz17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LEo9WyI8ZHhmPiJdLGllPVtdLHBlPVtdLHllPVtdLE1lPVtdO3JldHVybiBhdChNKS5mb3JFYWNoKGZ1bmN0aW9uKFllKXtzd2l0Y2goWWUp'@;
put 'e2Nhc2UiYm9sZCI6Y2FzZSJpdGFsaWMiOmNhc2Uic3RyaWtlIjpjYXNlInVuZGVybGluZSI6Y2FzZSJjb2xvciI6Y2FzZSJ2YWxpZ24iOmNhc2Uic3oiOmNhc2UibmFtZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjaGFyc2V0IjpjYXNlImZhbWlseSI6Y2FzZSJjb25kZW5z'@;
put 'ZSI6Y2FzZSJleHRlbmQiOmNhc2Uic2NoZW1lIjppZS5wdXNoKFllKTticmVhaztjYXNlImJnQ29sb3IiOmNhc2UiZmdDb2xvciI6eWUucHVzaChZZSk7YnJlYWs7Y2FzZSJ6IjpwZS5wdXNoKFllKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOmNhc2UibGVmdCI6Y2FzZSJyaWdodCI6'@;
put 'Y2FzZSJkaWFnb25hbCI6Y2FzZSJ2ZXJ0aWNhbCI6Y2FzZSJob3Jpem9udGFsIjpNZS5wdXNoKFllKTticmVhaztjYXNlInBhdHRlcm5UeXBlIjpjYXNlImRpYWdvbmFsRG93biI6Y2FzZSJkaWFnb25hbFVwIjpjYXNlInN0b3BzIjpjYXNlImRlZ3JlZSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyJV'@;
put 'bnJlY29nbml6ZWQgIitZZSsiIGluIERYRiJ9fSksaWUubGVuZ3RoPjAmJihKLnB1c2goIjxmb250PiIpLGllLmZvckVhY2goZnVuY3Rpb24oWWUpe3N3aXRjaChZZSl7Y2FzZSJib2xkIjpjYXNlIml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2Uib3V0bGluZSI6Y2FzZSJzaGFkb3ciOmNhc2Ui'@;
put 'Y29uZGVuc2UiOmNhc2UiZXh0ZW5kIjpKLnB1c2goIjwiKyhPW1llXXx8WWUpKycgdmFsPSInKyhNW1llXT8iMSI6IjAiKSsnIi8+Jyk7YnJlYWs7Y2FzZSJjb2xvciI6Si5wdXNoKG8xKE1bWWVdLFllLCEwKSk7YnJlYWs7Y2FzZSJmYW1pbHkiOmNhc2UibmFtZSI6Y2FzZSJzeiI6Y2FzZSJz'@;
put 'Y2hlbWUiOkoucHVzaCgiPCIrKE9bWWVdfHxZZSkrJyB2YWw9IicrTVtZZV0rJyIvPicpO2JyZWFrO2Nhc2UidW5kZXJsaW5lIjpKLnB1c2goJzx1IHZhbD0iJytRcFtNW1llXXx8MF0rJyIvPicpO2JyZWFrO2Nhc2UidmFsaWduIjpKLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK00udmFsaWdu'@;
put 'Kygic3ViIj09TS52YWxpZ258fCJzdXBlciI9PU0udmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+Jyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK1llKyIgOiBmb250IERYRiJ9fSksSi5wdXNoKCI8L2ZvbnQ+IikpLHBlLmxlbmd0aD4wJiZKLnB1c2goJzxudW1GbXQgZm9ybWF0'@;
put 'Q29kZT0iJyt5cihNLnopKyciIG51bUZtdElkPSInK2Z1bmN0aW9uIGR2KE0sRil7aWYoIm51bWJlciI9PXR5cGVvZiBNKXJldHVybiBNO3ZhciBPPUYucmV2c3NmW00/PyJHZW5lcmFsIl0sSj02MDtpZihudWxsPT1PKWZvcig7SjwzOTI7KytKKWlmKG51bGw9PUYuc3NmW0pdKXJldHVybiBD'@;
put 'LmxvYWQoTSxKKSxGLnNzZltKXT1NLEYucmV2c3NmW01dPUosSjtyZXR1cm4gT30oTS56LEYpKyciLz4nKSx5ZS5sZW5ndGg+MCYmKEoucHVzaCgiPGZpbGw+IiksSi5wdXNoKCI8cGF0dGVybkZpbGwiKyhNLnBhdHRlcm5UeXBlPycgcGF0dGVyblR5cGU9IicrTS5wYXR0ZXJuVHlwZSsnIj4n'@;
put 'OiI+IikpLHllLmZvckVhY2goZnVuY3Rpb24oWWUpe3N3aXRjaChZZSl7Y2FzZSJwYXR0ZXJuVHlwZSI6YnJlYWs7Y2FzZSJmZ0NvbG9yIjpjYXNlImJnQ29sb3IiOkoucHVzaChvMShNW1llXSxZZSwhMCkpO2JyZWFrO2RlZmF1bHQ6dGhyb3ciVW5zdXBwb3J0ZWQgIitZZSsiIDogZmlsbCBE'@;
put 'WEYifX0pLEoucHVzaCgiPC9wYXR0ZXJuRmlsbD4iKSxKLnB1c2goIjwvZmlsbD4iKSksTWUubGVuZ3RoPjA/KEoucHVzaChbIjxib3JkZXIiLG51bGwhPU0uZGlhZ29uYWxEb3duPycgZGlhZ29uYWxEb3duPSInKyArISFNLmRpYWdvbmFsRG93bisnIic6IiIsbnVsbCE9TS5kaWFnb25hbFVw'@;
put 'PycgZGlhZ29uYWxVcD0iJysgKyEhTS5kaWFnb25hbFVwKyciJzoiIiwiPiJdLmpvaW4oIiIpKSxNZS5mb3JFYWNoKGZ1bmN0aW9uKFllKXtKLnB1c2goYjMoTVtZZV0sWWUpKX0pLEoucHVzaCgiPC9ib3JkZXI+IikpOihudWxsIT1NLmRpYWdvbmFsRG93bnx8bnVsbCE9TS5kaWFnb25hbFVw'@;
put 'KSYmSi5wdXNoKFsiPGJvcmRlciIsbnVsbCE9TS5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIU0uZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1NLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyArISFNLmRpYWdvbmFsVXArJyInOiIiLCIvPiJdLmpvaW4oIiIpKSwxPT1K'@;
put 'Lmxlbmd0aD8iPGR4Zi8+IjpKLmpvaW4oIiIpKyI8L2R4Zj4ifShKLEYpKX0pLE8uam9pbigiIikrIjwvZHhmcz4ifShNLlN0eWxlcy5EWEYsRiksT1tPLmxlbmd0aF09aWUsTy5sZW5ndGg+MiYmKE9bTy5sZW5ndGhdPSI8L3N0eWxlU2hlZXQ+IixPWzFdPU9bMV0ucmVwbGFjZSgiLz4iLCI+'@;
put 'IikpLE8uam9pbigiIil9ZnVuY3Rpb24gRV8oTSxGLE8pe098fChPPWdyKDYrNCpGLmxlbmd0aCkpLE8ud3JpdGVfc2hpZnQoMixNKSxDbChGLE8pO3ZhciBKPU8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPO3JldHVybiBudWxsPT1PLmwmJihPLmw9Ty5sZW5ndGgpLEp9ZnVuY3Rpb24g'@;
put 'T0woTSl7cmV0dXJue2NvbG9yOlowKE0pLHBvczpoYShNKX19X28uU1RZPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3N0eWxlcyI7dmFyIFRfPVsibm9uZSIsInNvbGlkIiwibWVkaXVtR3JheSIsImRhcmtHcmF5'@;
put 'IiwibGlnaHRHcmF5IiwiZGFya0hvcml6b250YWwiLCJkYXJrVmVydGljYWwiLCJkYXJrRG93biIsImRhcmtVcCIsImRhcmtHcmlkIiwiZGFya1RyZWxsaXMiLCJsaWdodEhvcml6b250YWwiLCJsaWdodFZlcnRpY2FsIiwibGlnaHREb3duIiwibGlnaHRVcCIsImxpZ2h0R3JpZCIsImxpZ2h0'@;
put 'VHJlbGxpcyIsImdyYXkxMjUiLCJncmF5MDYyNSJdLFBMPUNlKFRfKSx0ND1bImdlbmVyYWwiLCJsZWZ0IiwiY2VudGVyIiwicmlnaHQiLCJmaWxsIiwianVzdGlmeSIsImNlbnRlckNvbnRpbnVvdXMiLCJkaXN0cmlidXRlZCJdLHI1PVsidG9wIiwiY2VudGVyIiwiYm90dG9tIiwianVzdGlm'@;
put 'eSIsImRpc3RyaWJ1dGVkIl07ZnVuY3Rpb24gTmMoTSxGLE8pe098fChPPWdyKDE2KSksTy53cml0ZV9zaGlmdCgyLEZ8fDApLE8ud3JpdGVfc2hpZnQoMixNLm51bUZtdElkfHwwKSxPLndyaXRlX3NoaWZ0KDIsTS5mb250SWR8fDApLE8ud3JpdGVfc2hpZnQoMixNLmZpbGxJZHx8MCksTy53'@;
put 'cml0ZV9zaGlmdCgyLE0uYm9yZGVySWR8fDApLE8ud3JpdGVfc2hpZnQoMSxNLmFsaWdubWVudCYmTS5hbGlnbm1lbnQudGV4dFJvdGF0aW9ufHwwKSxPLndyaXRlX3NoaWZ0KDEsTS5hbGlnbm1lbnQmJk0uYWxpZ25tZW50LmluZGVudHx8MCk7dmFyIEo9MCxpZT0wO2lmKE0uYWxpZ25tZW50'@;
put 'KXtpZihNLmFsaWdubWVudC5ob3Jpem9udGFsKXt2YXIgcGU9dDQuaW5kZXhPZihNLmFsaWdubWVudC5ob3Jpem9udGFsKTtwZTwwJiYocGU9MCksSnw9cGV9aWYoTS5hbGlnbm1lbnQudmVydGljYWwpe3ZhciB5ZT1yNS5pbmRleE9mKE0uYWxpZ25tZW50LnZlcnRpY2FsKTt5ZTwwJiYoeWU9'@;
put 'MiksSnw9eWU8PDN9TS5hbGlnbm1lbnQud3JhcFRleHQmJihKfD02NCksTS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihpZXw9MSl9cmV0dXJuIE8ud3JpdGVfc2hpZnQoMSxKKSxPLndyaXRlX3NoaWZ0KDEsaWUpLE8ud3JpdGVfc2hpZnQoMSwwKSxPLndyaXRlX3NoaWZ0KDEsMCksT312YXIg'@;
put 'cjE9WyJub25lIiwidGhpbiIsIm1lZGl1bSIsImRhc2hlZCIsImRvdHRlZCIsInRoaWNrIiwiZG91YmxlIiwiaGFpciIsIm1lZGl1bURhc2hlZCIsImRhc2hEb3QiLCJtZWRpdW1EYXNoRG90IiwiZGFzaERvdERvdCIsIm1lZGl1bURhc2hEb3REb3QiLCJzbGFudERhc2hEb3QiXTtmdW5jdGlv'@;
put 'biBuNChNKXt2YXIgRj1NLnJlYWRfc2hpZnQoMSk7TS5sKz0xO3ZhciBPPVowKE0pO3JldHVybntzdHlsZTpyMVtGXSxjb2xvcjpPfX1mdW5jdGlvbiByNChNLEYpe3JldHVybiBGfHwoRj1ncigxMCkpLE0mJk0uc3R5bGUmJiIiIT1NLnN0eWxlJiYibm9uZSIhPU0uc3R5bGUmJi0xIT09cjEu'@;
put 'aW5kZXhPZihNLnN0eWxlKT8oRi53cml0ZV9zaGlmdCgxLHIxLmluZGV4T2YoTS5zdHlsZSkpLEYud3JpdGVfc2hpZnQoMSwwKSxNLmNvbG9yP0wxKE0uY29sb3IsRik6KEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDQsMCkpKTooRi53cml0ZV9zaGlmdCgxLDApLEYud3JpdGVf'@;
put 'c2hpZnQoMSwwKSxGLndyaXRlX3NoaWZ0KDQsMCksRi53cml0ZV9zaGlmdCg0LDApKSxGfWZ1bmN0aW9uIHJDKE0sRil7cmV0dXJuIEZ8fChGPWdyKDUyKSksRi53cml0ZV9zaGlmdCg0LE0ueGZJZCksRi53cml0ZV9zaGlmdCgyLDEpLEYud3JpdGVfc2hpZnQoMSwrTS5idWlsdGluSWQpLEYu'@;
put 'd3JpdGVfc2hpZnQoMSwwKSxXdShNLm5hbWV8fCIiLEYpLEYubGVuZ3RoPkYubD9GLnNsaWNlKDAsRi5sKTpGfWZ1bmN0aW9uIHo2KE0sRil7IUZ8fCFGLnRoZW1lRWxlbWVudHN8fCFGLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lfHxudWxsIT1NLnRoZW1lJiYoTS5yZ2I9JHAoRi50aGVtZUVs'@;
put 'ZW1lbnRzLmNsclNjaGVtZVtNLnRoZW1lXS5yZ2IsTS50aW50fHwwKSl9ZnVuY3Rpb24gdUMoTSxGKXt2YXIgTz1SbCgpO3JldHVybiBnaShPLCJCcnRCZWdpblN0eWxlU2hlZXQiKSxmdW5jdGlvbiBOTChNLEYpe2lmKEYpe3ZhciBPPTA7W1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzky'@;
put 'XV0uZm9yRWFjaChmdW5jdGlvbihKKXtmb3IodmFyIGllPUpbMF07aWU8PUpbMV07KytpZSludWxsIT1GW2llXSYmKytPfSksMCE9TyYmKGdpKE0sIkJydEJlZ2luRm10cyIseXUoTykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oSil7Zm9yKHZh'@;
put 'ciBpZT1KWzBdO2llPD1KWzFdOysraWUpbnVsbCE9RltpZV0mJmdpKE0sIkJydEZtdCIsRV8oaWUsRltpZV0pKX0pLGdpKE0sIkJydEVuZEZtdHMiKSl9fShPLE0uU1NGKSxmdW5jdGlvbiBWTChNLEYpe3ZhciBPPUYubGVuZ3RoOzAhPU8mJihnaShNLCJCcnRCZWdpbkZvbnRzIix5dShPKSks'@;
put 'Ri5mb3JFYWNoKGZ1bmN0aW9uKEope2dpKE0sIkJydEZvbnQiLGZ1bmN0aW9uIFJMKE0sRil7Rnx8KEY9Z3IoMTUzKSksRi53cml0ZV9zaGlmdCgyLDIwKk0uc3opLGZ1bmN0aW9uIEFwKE0sRil7Rnx8KEY9Z3IoMikpLEYud3JpdGVfc2hpZnQoMSwoTS5pdGFsaWM/MjowKXwoTS5zdHJpa2U/'@;
put 'ODowKXwoTS5vdXRsaW5lPzE2OjApfChNLnNoYWRvdz8zMjowKXwoTS5jb25kZW5zZT82NDowKXwoTS5leHRlbmQ/MTI4OjApKSxGLndyaXRlX3NoaWZ0KDEsMCl9KE0sRiksRi53cml0ZV9zaGlmdCgyLE0uYm9sZD83MDA6NDAwKTt2YXIgTz0wOyJzdXBlciI9PU0udmFsaWduP089MToic3Vi'@;
put 'Ij09TS52YWxpZ24mJihPPTIpLEYud3JpdGVfc2hpZnQoMixPKSxGLndyaXRlX3NoaWZ0KDEsTS51bmRlcmxpbmV8fDApLEYud3JpdGVfc2hpZnQoMSxNLmZhbWlseXx8MCksRi53cml0ZV9zaGlmdCgxLE0uY2hhcnNldHx8MCksRi53cml0ZV9zaGlmdCgxLDApLEwxKE0uY29sb3IsRik7dmFy'@;
put 'IEo9MDtyZXR1cm4ibWFqb3IiPT1NLnNjaGVtZSYmKEo9MSksIm1pbm9yIj09TS5zY2hlbWUmJihKPTIpLEYud3JpdGVfc2hpZnQoMSxKKSxDbChNLm5hbWUsRiksRi5sZW5ndGg+Ri5sP0Yuc2xpY2UoMCxGLmwpOkZ9KEopKX0pLGdpKE0sIkJydEVuZEZvbnRzIikpfShPLChNLlN0eWxlc3x8'@;
put 'e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gakwoTSxGKXt2YXIgTz1GLmxlbmd0aDswIT1PJiYoZ2koTSwiQnJ0QmVnaW5GaWxscyIseXUoTykpLEYuZm9yRWFjaChmdW5jdGlvbihKKXtnaShNLCJCcnRGaWxsIixmdW5jdGlvbiBxdShNLEYpe0Z8fChGPWdyKDg0KSk7dmFyIE89UExbTS5wYXR0'@;
put 'ZXJuVHlwZV07bnVsbD09TyYmKE89NDApLEYud3JpdGVfc2hpZnQoNCxPPStPKTt2YXIgSj0wO2lmKDQwIT1PKWZvcihMMShNLmZnQ29sb3J8fHtpbmRleDo2NH0sRiksTDEoTS5iZ0NvbG9yfHx7aW5kZXg6NjV9LEYpO0o8MTI7KytKKUYud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7Sjw0'@;
put 'OysrSilGLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtKPDEyOysrSilGLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIEYubGVuZ3RoPkYubD9GLnNsaWNlKDAsRi5sKTpGfShKKSl9KSxnaShNLCJCcnRFbmRGaWxscyIpKX0oTywoTS5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIEJMKE0s'@;
put 'Ril7dmFyIE89Ri5sZW5ndGg7MCE9TyYmKGdpKE0sIkJydEJlZ2luQm9yZGVycyIseXUoTykpLEYuZm9yRWFjaChmdW5jdGlvbihKKXtnaShNLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIG5DKE0sRil7cmV0dXJuIEZ8fChGPWdyKDUxKSksRi53cml0ZV9zaGlmdCgxLDApLHI0KE0udG9wLEYpLHI0'@;
put 'KE0uYm90dG9tLEYpLHI0KE0ubGVmdCxGKSxyNChNLnJpZ2h0LEYpLHI0KG51bGwsRiksRi5sZW5ndGg+Ri5sP0Yuc2xpY2UoMCxGLmwpOkZ9KEopKX0pLGdpKE0sIkJydEVuZEJvcmRlcnMiKSl9KE8sKE0uU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIHNDKE0sRil7dmFyIE89'@;
put 'MTtpZihGJiYoTz1GLmxlbmd0aCksZ2koTSwiQnJ0QmVnaW5DZWxsU3R5bGVYRnMiLHl1KE8pKSxnaShNLCJCcnRYRiIsTmMoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxGKWZvcih2YXIgSj0xO0o8Ri5sZW5ndGg7KytKKWdpKE0sIkJydFhGIixO'@;
put 'Yyh7bnVtRm10SWQ6RltKXS5udW1GbXRJZHx8MCxmb250SWQ6RltKXS5mb250SWR8fDAsZmlsbElkOkZbSl0uZmlsbElkfHwwLGJvcmRlcklkOkZbSl0uYm9yZGVySWR8fDB9LDY1NTM1KSk7Z2koTSwiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KE8sRi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIGFD'@;
put 'KE0sRil7Z2koTSwiQnJ0QmVnaW5DZWxsWEZzIix5dShGLmxlbmd0aCkpLEYuZm9yRWFjaChmdW5jdGlvbihPKXtnaShNLCJCcnRYRiIsTmMoTywwKSl9KSxnaShNLCJCcnRFbmRDZWxsWEZzIil9KE8sRi5jZWxsWGZzKSxmdW5jdGlvbiBsQyhNLEYpe3ZhciBPPTE7aWYoRiYmKE89Ri5sZW5n'@;
put 'dGgpLGdpKE0sIkJydEJlZ2luU3R5bGVzIix5dShPKSksZ2koTSwiQnJ0U3R5bGUiLHJDKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxGKWZvcih2YXIgSj0xO0o8Ri5sZW5ndGg7KytKKWdpKE0sIkJydFN0eWxlIixyQyh7eGZJZDpKLGJ1aWx0aW5JZDowLG5hbWU6RltK'@;
put 'XS5uYW1lfSkpO2dpKE0sIkJydEVuZFN0eWxlcyIpfShPLEYuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBVNihNKXtnaShNLCJCcnRCZWdpbkRYRnMiLHl1KDApKSxnaShNLCJCcnRFbmREWEZzIil9KE8pLGZ1bmN0aW9uIGNDKE0pe2dpKE0sIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9u'@;
put 'IGlDKE0sRixPKXt2YXIgSj1ncigyMDUyKTtyZXR1cm4gSi53cml0ZV9zaGlmdCg0LE0pLFd1KEYsSiksV3UoTyxKKSxKLmxlbmd0aD5KLmw/Si5zbGljZSgwLEoubCk6Sn0oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxnaShNLCJCcnRFbmRUYWJsZVN0eWxl'@;
put 'cyIpfShPKSxnaShPLCJCcnRFbmRTdHlsZVNoZWV0IiksTy5lbmQoKX1fby5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIGRDPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+'@;
put 'IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIHpMKE0sRixPKXtGLnRoZW1lRWxlbWVu'@;
put 'dHMuY2xyU2NoZW1lPVtdO3ZhciBKPXt9OyhNWzBdLm1hdGNoKCR0KXx8W10pLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBwZT1sbihpZSk7c3dpdGNoKHBlWzBdKXtjYXNlIjxhOmNsclNjaGVtZSI6Y2FzZSI8L2E6Y2xyU2NoZW1lPiI6Y2FzZSI8L2E6c3JnYkNscj4iOmNhc2UiPC9hOnN5'@;
put 'c0Nscj4iOmJyZWFrO2Nhc2UiPGE6c3JnYkNsciI6Si5yZ2I9cGUudmFsO2JyZWFrO2Nhc2UiPGE6c3lzQ2xyIjpKLnJnYj1wZS5sYXN0Q2xyO2JyZWFrO2Nhc2UiPGE6ZGsxPiI6Y2FzZSI8L2E6ZGsxPiI6Y2FzZSI8YTpsdDE+IjpjYXNlIjwvYTpsdDE+IjpjYXNlIjxhOmRrMj4iOmNhc2Ui'@;
put 'PC9hOmRrMj4iOmNhc2UiPGE6bHQyPiI6Y2FzZSI8L2E6bHQyPiI6Y2FzZSI8YTphY2NlbnQxPiI6Y2FzZSI8L2E6YWNjZW50MT4iOmNhc2UiPGE6YWNjZW50Mj4iOmNhc2UiPC9hOmFjY2VudDI+IjpjYXNlIjxhOmFjY2VudDM+IjpjYXNlIjwvYTphY2NlbnQzPiI6Y2FzZSI8YTphY2NlbnQ0'@;
put 'PiI6Y2FzZSI8L2E6YWNjZW50ND4iOmNhc2UiPGE6YWNjZW50NT4iOmNhc2UiPC9hOmFjY2VudDU+IjpjYXNlIjxhOmFjY2VudDY+IjpjYXNlIjwvYTphY2NlbnQ2PiI6Y2FzZSI8YTpobGluaz4iOmNhc2UiPC9hOmhsaW5rPiI6Y2FzZSI8YTpmb2xIbGluaz4iOmNhc2UiPC9hOmZvbEhsaW5r'@;
put 'PiI6Ii8iPT09cGVbMF0uY2hhckF0KDEpPyhGLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW2RDLmluZGV4T2YocGVbMF0pXT1KLEo9e30pOkoubmFtZT1wZVswXS5zbGljZSgzLHBlWzBdLmxlbmd0aC0xKTticmVhaztkZWZhdWx0OmlmKE8mJk8uV1RGKXRocm93IG5ldyBFcnJvcigiVW5yZWNv'@;
put 'Z25pemVkICIrcGVbMF0rIiBpbiBjbHJTY2hlbWUiKX19KX1mdW5jdGlvbiBVTCgpe31mdW5jdGlvbiBaTCgpe312YXIgV0w9LzxhOmNsclNjaGVtZShbXj5dKik+W1xzXFNdKjxcL2E6Y2xyU2NoZW1lPi8saEM9LzxhOmZvbnRTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmZvbnRTY2hlbWU+'@;
put 'LyxCWj0vPGE6Zm10U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmbXRTY2hlbWU+LyxHTD0vPGE6dGhlbWVFbGVtZW50cyhbXj5dKik+W1xzXFNdKjxcL2E6dGhlbWVFbGVtZW50cz4vO2Z1bmN0aW9uIEFfKE0sRil7aWYoIU18fDA9PT1NLmxlbmd0aClyZXR1cm4gQV8oJEwoKSk7dmFyIE8s'@;
put 'Sj17fTtpZighKE89TS5tYXRjaChHTCkpKXRocm93IG5ldyBFcnJvcigidGhlbWVFbGVtZW50cyBub3QgZm91bmQgaW4gdGhlbWUiKTtyZXR1cm4gZnVuY3Rpb24gZkMoTSxGLE8pe3ZhciBKO0YudGhlbWVFbGVtZW50cz17fSxbWyJjbHJTY2hlbWUiLFdMLHpMXSxbImZvbnRTY2hlbWUiLGhD'@;
put 'LFVMXSxbImZtdFNjaGVtZSIsQlosWkxdXS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtpZighKEo9TS5tYXRjaChpZVsxXSkpKXRocm93IG5ldyBFcnJvcihpZVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7aWVbMl0oSixGLE8pfSl9KE9bMF0sSixGKSxKLnJhdz1NLEp9ZnVuY3Rp'@;
put 'b24gJEwoTSxGKXtpZihGJiZGLnRoZW1lWExTWClyZXR1cm4gRi50aGVtZVhMU1g7aWYoTSYmInN0cmluZyI9PXR5cGVvZiBNLnJhdylyZXR1cm4gTS5yYXc7dmFyIE89W1BuXTtyZXR1cm4gT1tPLmxlbmd0aF09JzxhOnRoZW1lIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt'@;
put 'YXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBuYW1lPSJPZmZpY2UgVGhlbWUiPicsT1tPLmxlbmd0aF09IjxhOnRoZW1lRWxlbWVudHM+IixPW08ubGVuZ3RoXT0nPGE6Y2xyU2NoZW1lIG5hbWU9Ik9mZmljZSI+JyxPW08ubGVuZ3RoXT0nPGE6ZGsxPjxhOnN5c0NsciB2YWw9IndpbmRv'@;
put 'd1RleHQiIGxhc3RDbHI9IjAwMDAwMCIvPjwvYTpkazE+JyxPW08ubGVuZ3RoXT0nPGE6bHQxPjxhOnN5c0NsciB2YWw9IndpbmRvdyIgbGFzdENscj0iRkZGRkZGIi8+PC9hOmx0MT4nLE9bTy5sZW5ndGhdPSc8YTpkazI+PGE6c3JnYkNsciB2YWw9IjFGNDk3RCIvPjwvYTpkazI+JyxPW08u'@;
put 'bGVuZ3RoXT0nPGE6bHQyPjxhOnNyZ2JDbHIgdmFsPSJFRUVDRTEiLz48L2E6bHQyPicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDE+PGE6c3JnYkNsciB2YWw9IjRGODFCRCIvPjwvYTphY2NlbnQxPicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDI+PGE6c3JnYkNsciB2YWw9IkMwNTA0RCIvPjwv'@;
put 'YTphY2NlbnQyPicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDM+PGE6c3JnYkNsciB2YWw9IjlCQkI1OSIvPjwvYTphY2NlbnQzPicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDQ+PGE6c3JnYkNsciB2YWw9IjgwNjRBMiIvPjwvYTphY2NlbnQ0PicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDU+PGE6'@;
put 'c3JnYkNsciB2YWw9IjRCQUNDNiIvPjwvYTphY2NlbnQ1PicsT1tPLmxlbmd0aF09JzxhOmFjY2VudDY+PGE6c3JnYkNsciB2YWw9IkY3OTY0NiIvPjwvYTphY2NlbnQ2PicsT1tPLmxlbmd0aF09JzxhOmhsaW5rPjxhOnNyZ2JDbHIgdmFsPSIwMDAwRkYiLz48L2E6aGxpbms+JyxPW08ubGVu'@;
put 'Z3RoXT0nPGE6Zm9sSGxpbms+PGE6c3JnYkNsciB2YWw9IjgwMDA4MCIvPjwvYTpmb2xIbGluaz4nLE9bTy5sZW5ndGhdPSI8L2E6Y2xyU2NoZW1lPiIsT1tPLmxlbmd0aF09JzxhOmZvbnRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLE9bTy5sZW5ndGhdPSI8YTptYWpvckZvbnQ+IixPW08ubGVu'@;
put 'Z3RoXT0nPGE6bGF0aW4gdHlwZWZhY2U9IkNhbWJyaWEiLz4nLE9bTy5sZW5ndGhdPSc8YTplYSB0eXBlZmFjZT0iIi8+JyxPW08ubGVuZ3RoXT0nPGE6Y3MgdHlwZWZhY2U9IiIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJKcGFuIiB0eXBlZmFjZT0iXHVmZjJkXHVmZjMzIFx1'@;
put 'ZmYzMFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZiIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5nIiB0eXBlZmFjZT0iXHViOWQxXHVjNzQwIFx1YWNlMFx1YjUxNSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW5zIiB0eXBlZmFjZT0iXHU1YjhiXHU0ZjUz'@;
put 'Ii8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnQiIHR5cGVmYWNlPSJcdTY1YjBcdTdkMzBcdTY2MGVcdTlhZDQiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQXJhYiIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQg'@;
put 'c2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxPW08ubGVuZ3Ro'@;
put 'XT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLaG1yIiB0eXBlZmFjZT0iTW9vbEJvcmFuIi8+JyxPW08u'@;
put 'bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktuZGEiIHR5cGVmYWNlPSJUdW5nYSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdXJ1IiB0eXBlZmFjZT0iUmFhdmkiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2FucyIgdHlwZWZhY2U9IkV1cGhlbWlhIi8+JyxP'@;
put 'W08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNoZXIiIHR5cGVmYWNlPSJQbGFudGFnZW5ldCBDaGVyb2tlZSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJZaWlpIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFlpIEJhaXRpIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'IlRpYnQiIHR5cGVmYWNlPSJNaWNyb3NvZnQgSGltYWxheWEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhYSIgdHlwZWZhY2U9Ik1WIEJvbGkiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iRGV2YSIgdHlwZWZhY2U9Ik1hbmdhbCIvPicsT1tPLmxlbmd0aF09'@;
put 'JzxhOmZvbnQgc2NyaXB0PSJUZWx1IiB0eXBlZmFjZT0iR2F1dGFtaSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUYW1sIiB0eXBlZmFjZT0iTGF0aGEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU3lyYyIgdHlwZWZhY2U9IkVzdHJhbmdlbG8gRWRlc3NhIi8+'@;
put 'JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik9yeWEiIHR5cGVmYWNlPSJLYWxpbmdhIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1seW0iIHR5cGVmYWNlPSJLYXJ0aWthIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikxhb28iIHR5cGVmYWNlPSJEb2tD'@;
put 'aGFtcGEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iU2luaCIgdHlwZWZhY2U9Iklza29vbGEgUG90YSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNb25nIiB0eXBlZmFjZT0iTW9uZ29saWFuIEJhaXRpIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9'@;
put 'IlZpZXQiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9tYW4iLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLE9bTy5s'@;
put 'ZW5ndGhdPSI8L2E6bWFqb3JGb250PiIsT1tPLmxlbmd0aF09IjxhOm1pbm9yRm9udD4iLE9bTy5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FsaWJyaSIvPicsT1tPLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLE9bTy5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxP'@;
put 'W08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+'@;
put 'JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFudCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0'@;
put 'PSJBcmFiIiB0eXBlZmFjZT0iQXJpYWwiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGViciIgdHlwZWZhY2U9IkFyaWFsIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWkiIHR5cGVmYWNlPSJUYWhvbWEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlw'@;
put 'dD0iRXRoaSIgdHlwZWZhY2U9Ik55YWxhIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkJlbmciIHR5cGVmYWNlPSJWcmluZGEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VqciIgdHlwZWZhY2U9IlNocnV0aSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2Ny'@;
put 'aXB0PSJLaG1yIiB0eXBlZmFjZT0iRGF1blBlbmgiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZhY2U9IlR1bmdhIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQg'@;
put 'c2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlwZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkg'@;
put 'QmFpdGkiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJE'@;
put 'ZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0YW1pIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0'@;
put 'PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIgdHlwZWZhY2U9IkthbGluZ2EiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLE9bTy5sZW5ndGhd'@;
put 'PSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsT1tPLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4g'@;
put 'QmFpdGkiLz4nLE9bTy5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IkFyaWFsIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlVpZ2giIHR5cGVmYWNlPSJNaWNyb3NvZnQgVWlnaHVyIi8+JyxPW08ubGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikdlb3Ii'@;
put 'IHR5cGVmYWNlPSJTeWxmYWVuIi8+JyxPW08ubGVuZ3RoXT0iPC9hOm1pbm9yRm9udD4iLE9bTy5sZW5ndGhdPSI8L2E6Zm9udFNjaGVtZT4iLE9bTy5sZW5ndGhdPSc8YTpmbXRTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLE9bTy5sZW5ndGhdPSI8YTpmaWxsU3R5bGVMc3Q+IixPW08ubGVuZ3Ro'@;
put 'XT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLE9bTy5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsT1tPLmxlbmd0aF09IjxhOmdzTHN0PiIsT1tPLmxlbmd0aF09JzxhOmdzIHBvcz0iMCI+PGE6c2NoZW1lQ2xy'@;
put 'IHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsT1tPLmxlbmd0aF09JzxhOmdzIHBvcz0iMzUwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMzcwMDAiLz48YTpzYXRN'@;
put 'b2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLE9bTy5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIxNTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPics'@;
put 'T1tPLmxlbmd0aF09IjwvYTpnc0xzdD4iLE9bTy5sZW5ndGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIxIi8+JyxPW08ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsT1tPLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxPW08ubGVuZ3RoXT0iPGE6Z3NM'@;
put 'c3Q+IixPW08ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjEwMDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMTMwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxPW08ubGVuZ3RoXT0nPGE6'@;
put 'Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNTAwMDAiLz48YTpzaGFkZSB2YWw9IjEwMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsT1tPLmxlbmd0aF09IjwvYTpnc0xzdD4iLE9bTy5sZW5n'@;
put 'dGhdPSc8YTpsaW4gYW5nPSIxNjIwMDAwMCIgc2NhbGVkPSIwIi8+JyxPW08ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsT1tPLmxlbmd0aF09IjwvYTpmaWxsU3R5bGVMc3Q+IixPW08ubGVuZ3RoXT0iPGE6bG5TdHlsZUxzdD4iLE9bTy5sZW5ndGhdPSc8YTpsbiB3PSI5NTI1IiBjYXA9ImZs'@;
put 'YXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iOTUwMDAiLz48YTpzYXRNb2QgdmFsPSIxMDUwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwv'@;
put 'YTpsbj4nLE9bTy5sZW5ndGhdPSc8YTpsbiB3PSIyNTQwMCIgY2FwPSJmbGF0IiBjbXBkPSJzbmciIGFsZ249ImN0ciI+PGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsT1tPLmxlbmd0'@;
put 'aF09JzxhOmxuIHc9IjM4MTAwIiBjYXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxPW08ubGVuZ3RoXT0iPC9hOmxuU3R5bGVM'@;
put 'c3Q+IixPW08ubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGVMc3Q+IixPW08ubGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixPW08ubGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsT1tPLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlzdD0iMjAwMDAiIGRpcj0iNTQwMDAwMCIg'@;
put 'cm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM4MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLE9bTy5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsT1tPLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLE9bTy5sZW5ndGhdPSI8'@;
put 'YTplZmZlY3RTdHlsZT4iLE9bTy5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixPW08ubGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMzAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAwMDAiPjxhOmFscGhhIHZh'@;
put 'bD0iMzUwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3PicsT1tPLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixPW08ubGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsT1tPLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsT1tPLmxlbmd0aF09IjxhOmVmZmVjdExzdD4iLE9bTy5sZW5n'@;
put 'dGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+JyxPW08ubGVuZ3RoXT0i'@;
put 'PC9hOmVmZmVjdExzdD4iLE9bTy5sZW5ndGhdPSc8YTpzY2VuZTNkPjxhOmNhbWVyYSBwcnN0PSJvcnRob2dyYXBoaWNGcm9udCI+PGE6cm90IGxhdD0iMCIgbG9uPSIwIiByZXY9IjAiLz48L2E6Y2FtZXJhPjxhOmxpZ2h0UmlnIHJpZz0idGhyZWVQdCIgZGlyPSJ0Ij48YTpyb3QgbGF0PSIw'@;
put 'IiBsb249IjAiIHJldj0iMTIwMDAwMCIvPjwvYTpsaWdodFJpZz48L2E6c2NlbmUzZD4nLE9bTy5sZW5ndGhdPSc8YTpzcDNkPjxhOmJldmVsVCB3PSI2MzUwMCIgaD0iMjU0MDAiLz48L2E6c3AzZD4nLE9bTy5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixPW08ubGVuZ3RoXT0iPC9hOmVm'@;
put 'ZmVjdFN0eWxlTHN0PiIsT1tPLmxlbmd0aF09IjxhOmJnRmlsbFN0eWxlTHN0PiIsT1tPLmxlbmd0aF09JzxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+JyxPW08ubGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLE9bTy5s'@;
put 'ZW5ndGhdPSI8YTpnc0xzdD4iLE9bTy5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iNDAwMDAiLz48YTpzYXRNb2QgdmFsPSIzNTAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLE9bTy5sZW5ndGhdPSc8YTpncyBwb3M9IjQw'@;
put 'MDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjQ1MDAwIi8+PGE6c2hhZGUgdmFsPSI5OTAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsT1tPLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIg'@;
put 'dmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSIyMDAwMCIvPjxhOnNhdE1vZCB2YWw9IjI1NTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsT1tPLmxlbmd0aF09IjwvYTpnc0xzdD4iLE9bTy5sZW5ndGhdPSc8YTpwYXRoIHBhdGg9ImNpcmNsZSI+PGE6ZmlsbFRvUmVjdCBsPSI1MDAwMCIg'@;
put 'dD0iLTgwMDAwIiByPSI1MDAwMCIgYj0iMTgwMDAwIi8+PC9hOnBhdGg+JyxPW08ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsT1tPLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxPW08ubGVuZ3RoXT0iPGE6Z3NMc3Q+IixPW08ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIw'@;
put 'Ij48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjgwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxPW08ubGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9'@;
put 'IjMwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMjAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxPW08ubGVuZ3RoXT0iPC9hOmdzTHN0PiIsT1tPLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSI1MDAwMCIgcj0iNTAwMDAiIGI9IjUw'@;
put 'MDAwIi8+PC9hOnBhdGg+JyxPW08ubGVuZ3RoXT0iPC9hOmdyYWRGaWxsPiIsT1tPLmxlbmd0aF09IjwvYTpiZ0ZpbGxTdHlsZUxzdD4iLE9bTy5sZW5ndGhdPSI8L2E6Zm10U2NoZW1lPiIsT1tPLmxlbmd0aF09IjwvYTp0aGVtZUVsZW1lbnRzPiIsT1tPLmxlbmd0aF09IjxhOm9iamVjdERl'@;
put 'ZmF1bHRzPiIsT1tPLmxlbmd0aF09IjxhOnNwRGVmPiIsT1tPLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMSI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMyI+PGE6'@;
put 'c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0ibHQxIi8+PC9hOmZvbnRSZWY+PC9hOnN0'@;
put 'eWxlPicsT1tPLmxlbmd0aF09IjwvYTpzcERlZj4iLE9bTy5sZW5ndGhdPSI8YTpsbkRlZj4iLE9bTy5sZW5ndGhdPSc8YTpzcFByLz48YTpib2R5UHIvPjxhOmxzdFN0eWxlLz48YTpzdHlsZT48YTpsblJlZiBpZHg9IjIiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6bG5SZWY+'@;
put 'PGE6ZmlsbFJlZiBpZHg9IjAiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZmlsbFJlZj48YTplZmZlY3RSZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmVmZmVjdFJlZj48YTpmb250UmVmIGlkeD0ibWlub3IiPjxhOnNjaGVtZUNsciB2YWw9InR4'@;
put 'MSIvPjwvYTpmb250UmVmPjwvYTpzdHlsZT4nLE9bTy5sZW5ndGhdPSI8L2E6bG5EZWY+IixPW08ubGVuZ3RoXT0iPC9hOm9iamVjdERlZmF1bHRzPiIsT1tPLmxlbmd0aF09IjxhOmV4dHJhQ2xyU2NoZW1lTHN0Lz4iLE9bTy5sZW5ndGhdPSI8L2E6dGhlbWU+IixPLmpvaW4oIiIpfWZ1bmN0'@;
put 'aW9uIFo2KE0pe3ZhciBGPU0ucmVhZF9zaGlmdCgyKSxPPU0ucmVhZF9zaGlmdCgyKS00LEo9W0ZdO3N3aXRjaChGKXtjYXNlIDQ6Y2FzZSA1OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDEzOkpbMV09ZnVuY3Rpb24gTF8oTSl7dmFyIEY9e307c3dpdGNoKEYu'@;
put 'eGNsclR5cGU9TS5yZWFkX3NoaWZ0KDIpLEYublRpbnRTaGFkZT1NLnJlYWRfc2hpZnQoMiksRi54Y2xyVHlwZSl7Y2FzZSAwOmNhc2UgNDpNLmwrPTQ7YnJlYWs7Y2FzZSAxOkYueGNsclZhbHVlPWZ1bmN0aW9uIEtMKE0sRil7cmV0dXJuIEZzKE0sRil9KE0sNCk7YnJlYWs7Y2FzZSAyOkYu'@;
put 'eGNsclZhbHVlPWoxKE0pO2JyZWFrO2Nhc2UgMzpGLnhjbHJWYWx1ZT1mdW5jdGlvbiBwQyhNKXtyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpfShNKX1yZXR1cm4gTS5sKz04LEZ9KE0pO2JyZWFrO2Nhc2UgNjpKWzFdPWZ1bmN0aW9uIFoyKE0sRil7cmV0dXJuIEZzKE0sRil9KE0sTyk7YnJlYWs7'@;
put 'Y2FzZSAxNDpjYXNlIDE1OkpbMV09TS5yZWFkX3NoaWZ0KDE9PT1PPzE6Mik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBFeHRQcm9wIHR5cGU6ICIrRisiICIrTyl9cmV0dXJuIEp9ZnVuY3Rpb24gbUMoTSxGKXtGLmZvckVhY2goZnVuY3Rpb24oTyl7c3dp'@;
put 'dGNoKE9bMF0pe2Nhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNhc2UgMTA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6YnJlYWs7Y2FzZSAxMzpNLmZvbnQmJk0uZm9udC5jb2xvciYmQXJyYXkuaXNBcnJheShPWzFdLnhjbHJWYWx1ZSkmJihNLmZvbnQuY29sb3Iu'@;
put 'cmdiPXQxKE9bMV0ueGNsclZhbHVlKSl9fSl9ZnVuY3Rpb24gQW8oTSl7cmV0dXJuIE0vOTE0NDAwKkZofWZ1bmN0aW9uIGdDKE0sRil7dmFyIE89e307aWYoTS5wb3MpTy54PUFvKE0ucG9zLngpLE8ueT1BbyhNLnBvcy55KTtlbHNle2lmKCFNLmZyb20pdGhyb3ciYmFkIGFuY2hvciBzdGFy'@;
put 'dCI7Ty5yPU0uZnJvbS5yfHwwLE8uYz1NLmZyb20uY3x8MCxNLmZyb20uY09mZiYmKE8ueD1BbyhNLmZyb20uY09mZikpLE0uZnJvbS5yT2ZmJiYoTy55PUFvKE0uZnJvbS5yT2ZmKSl9aWYoTS5leHQpTy53PUFvKE0uZXh0LngpLE8uaD1BbyhNLmV4dC55KTtlbHNle2lmKCFNLnRvKXRocm93'@;
put 'ImJhZCBhbmNob3IgZW5kIjtPLkM9TS50by5jLE8uUj1NLnRvLnIsTS50by5jT2ZmJiYoTy5YPUFvKE0udG8uY09mZikpLE0udG8uck9mZiYmKE8uWT1BbyhNLnRvLnJPZmYpKX1yZXR1cm4gT31mdW5jdGlvbiBpNChNLEYpe3ZhciBPPXt4Oi0xLHk6LTEsdzotMSxoOi0xfTtpZihNLnBvcylP'@;
put 'Lng9QW8oTS5wb3MueCksTy55PUFvKE0ucG9zLnkpO2Vsc2V7aWYoIU0uZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtPLng9bzQoRixNLmZyb20uYywiQyIpK0FvKE0uZnJvbS5jT2ZmKSxPLnk9bzQoRixNLmZyb20uciwiUiIpK0FvKE0uZnJvbS5yT2ZmKX1pZihNLmV4dClPLnc9QW8o'@;
put 'TS5leHQueCksTy5oPUFvKE0uZXh0LnkpO2Vsc2V7aWYoIU0udG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO08udz1vNChGLE0udG8uYywiQyIpK0FvKE0udG8uY09mZiktTy54LE8uaD1vNChGLE0udG8uciwiUiIpK0FvKE0udG8uck9mZiktTy55fXJldHVybiBPfWZ1bmN0aW9uIElfKE0sRil7'@;
put 'dmFyIE89e3I6LTEsYzotMSx4Oi0xLHk6LTEsUjotMSxDOi0xLFg6LTEsWTotMX07c3dpdGNoKE0udHlwZSl7Y2FzZSJ0d29DZWxsQW5jaG9yIjpPLnI9TS5mcm9tLnIsTy55PUFvKE0uZnJvbS5yT2ZmKSxPLlI9TS50by5yLE8uWT1BbyhNLnRvLnJPZmYpLE8uYz1NLmZyb20uYyxPLng9QW8o'@;
put 'TS5mcm9tLmNPZmYpLE8uQz1NLnRvLmMsTy5YPUFvKE0udG8uY09mZik7YnJlYWs7Y2FzZSJvbmVDZWxsQW5jaG9yIjpPLnI9TS5mcm9tLnIsTy55PUFvKE0uZnJvbS5yT2ZmKTt2YXIgSj1OaChGLE8ucixPLnkrQW8oTS5leHQueSkpO08uUj1KWzBdLE8uWT1KWzFdLE8uYz1NLmZyb20uYyxP'@;
put 'Lng9QW8oTS5mcm9tLmNPZmYpO3ZhciBpZT1XMihGLE8uYyxPLngrQW8oTS5leHQueCkpO08uQz1pZVswXSxPLlg9aWVbMV07YnJlYWs7Y2FzZSJhYnNvbHV0ZUFuY2hvciI6dmFyIHBlPU5oKEYsMCxBbyhNLnBvcy55KSk7Ty5yPXBlWzBdLE8ueT1wZVsxXTt2YXIgeWU9TmgoRixPLnIsTy55'@;
put 'K0FvKE0uZXh0LnkpKTtPLlI9eWVbMF0sTy5ZPXllWzFdO3ZhciB2ZT1OaChGLDAsQW8oTS5wb3MueCkpO08uYz12ZVswXSxPLng9dmVbMV07dmFyIE1lPU5oKEYsTy5jLE8ueCtBbyhNLmV4dC54KSk7Ty5DPU1lWzBdLE8uWD1NZVsxXTticmVhaztkZWZhdWx0OnRocm93ImJhZCBhbmNob3Ig'@;
put 'dHlwZSAiK00udHlwZX1yZXR1cm4gT31mdW5jdGlvbiBfQyhNLEYpe3ZhciBPPU0udHJpbSgpLnNwbGl0KC9ccyosXHMqLyk7RlsiIXBvcyJdPXtjOitPWzBdLHg6K09bMV0scjorT1syXSx5OitPWzNdLEM6K09bNF0sWDorT1s1XSxSOitPWzZdLFk6K09bN119fWZ1bmN0aW9uIEpMKE0sRixP'@;
put 'KXt2YXIgSj0tMTtpZihudWxsIT1NLlJ8fG51bGwhPU0uQylKPTA7ZWxzZXtpZihudWxsPT1NLnh8fG51bGw9PU0ueXx8bnVsbD09TS53fHxudWxsPT1NLmgpdGhyb3ciY2Fubm90IHBhcnNlIGFuY2hvciAiK0pTT04uc3RyaW5naWZ5KE0pO0o9MSsyKiEoTS5jfHxNLnIpfWlmKEohPUYpe3N3'@;
put 'aXRjaChGKXtjYXNlIDA6Y2FzZSAxOmlmKDMhPUopYnJlYWs7dmFyIGllPVcyKE8sTS5jfHwwLE0ueHx8MCk7TS5jPWllWzBdLE0ueD1pZVsxXTt2YXIgcGU9TmgoTyxNLnJ8fDAsTS55fHwwKTtNLnI9cGVbMF0sTS55PXBlWzFdO2JyZWFrO2Nhc2UgMzppZigzPT1KKWJyZWFrO3ZhciB5ZT1N'@;
put 'LmN8fDAsdmU9TS54fHwwO2RlbGV0ZSBNLmMsZGVsZXRlIE0ueCxNLng9KHllP1c2KE8seWUpOjApK3ZlO3ZhciBNZT1NLnJ8fDAsamU9TS55fHwwO2RlbGV0ZSBNLnIsZGVsZXRlIE0ueSxNLnk9KE1lP00zKE8sTWUpOjApK2plO2JyZWFrO2RlZmF1bHQ6dGhyb3ciY29udmVydF9hbmNob3Ig'@;
put 'dW5yZWNvZ25pemVkIHR5cGUgIitGfXN3aXRjaChGKXtjYXNlIDA6aWYoMD09SilicmVhazt2YXIgWWU9VzIoTyxNLmN8fDAsKE0ueHx8MCkrTS53KTtkZWxldGUgTS53LE0uQz1ZZVswXSxNLlg9WWVbMV07dmFyIHFlPU5oKE8sTS5yfHwwLChNLnl8fDApK00uaCk7ZGVsZXRlIE0uaCxNLlI9'@;
put 'cWVbMF0sTS5ZPXFlWzFdO2JyZWFrO2Nhc2UgMTpjYXNlIDM6aWYoMCE9SilicmVhazt2YXIgaXQ9TS5DfHwwLGh0PU0uWHx8MDtkZWxldGUgTS5DLGRlbGV0ZSBNLlgsTS53PVc2KE8saXQpK2h0LShNLmM/VzYoTyxNLmMpOjApLShNLnh8fDApO3ZhciBrdD1NLlJ8fDAsdXQ9TS5ZfHwwO2Rl'@;
put 'bGV0ZSBNLlIsZGVsZXRlIE0uWSxNLmg9TTMoTyxrdCkrdXQtKE0ucj9NMyhPLE0ucik6MCktKE0ueXx8MCk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK0Z9fX1mdW5jdGlvbiBRTChNKXt2YXIgRj1bTS5jfHwwLE1hdGgucm91bmQoTS54'@;
put 'fHwwKSxNLnJ8fDAsTWF0aC5yb3VuZChNLnl8fDApXTtyZXR1cm4oRj1GLmNvbmNhdChNLmgmJk0udz9bRlswXSxNYXRoLnJvdW5kKEZbMV0rTS53KSxGWzJdLE1hdGgucm91bmQoRlszXStNLmgpXTpbTS5DfHwwLE1hdGgucm91bmQoTS5YfHwwKSxNLlJ8fDAsTWF0aC5yb3VuZChNLll8fDAp'@;
put 'XSkpLmpvaW4oIiwgIil9ZnVuY3Rpb24gTTMoTSxGKXtpZighTSlyZXR1cm4gMDtmb3IodmFyIE89MDstLUY+PTA7KXt2YXIgSj0oKE1bIiFyb3dzIl18fFtdKVtGXXx8e30pLmhweDtudWxsPT1KJiYoSj0oKE1bIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1KJiYo'@;
put 'Sj0yNCksTys9Sn1yZXR1cm4gT31mdW5jdGlvbiBXNihNLEYpe2lmKCFNKXJldHVybiAwO2Zvcih2YXIgTz0wOy0tRj49MDspe3ZhciBKPSgoTVsiIWNvbHMiXXx8W10pW0ZdfHx7fSkud3B4O2lmKG51bGw9PUomJihKPSgoTVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51'@;
put 'bGw9PUope3ZhciBpZT17d2NoOjguNDN9OyR1KGllKSxNWyIhY29scyJdJiYoTVsiIWNvbHMiXVtGXT1pZSksSj1pZS53cHh9Tys9Sn1yZXR1cm4gT31mdW5jdGlvbiBvNChNLEYsTyl7cmV0dXJuIkMiPT1PP1c2KE0sRik6TTMoTSxGKX1mdW5jdGlvbiBOaChNLEYsTyl7dmFyIEo9W0YsT107'@;
put 'aWYoIU0pcmV0dXJuIEo7Zm9yKDs7KXt2YXIgaWU9KE1bIiFyb3dzIl18fFtdKVtKWzBdXXx8e307aWYoaWUuaGlkZGVuKSsrSlswXTtlbHNle3ZhciBwZT1pZS5ocHg7aWYobnVsbD09cGUmJihwZT0oKE1bIiFzaGVldEZvcm1hdCJdfHx7fSkucm93fHx7fSkuaHB4KSxudWxsPT1wZSYmKHBl'@;
put 'PVoxKDE1KSksSlsxXTxwZSlicmVhaztKWzBdKyssSlsxXS09cGV9fXJldHVybiBKfWZ1bmN0aW9uIFcyKE0sRixPKXt2YXIgSj1bRixPXTtpZighTSlyZXR1cm4gSjtmb3IoOzspe3ZhciBpZT0oTVsiIWNvbHMiXXx8W10pW0pbMF1dfHx7fTtpZihpZS5oaWRkZW58fDA9PT1pZS53cHgpKytK'@;
put 'WzBdO2Vsc2V7dmFyIHBlPWllLndweDtpZihudWxsPT1wZSYmKHBlPSgoTVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PXBlKXt2YXIgeWU9e3djaDo4LjQzfTskdSh5ZSksTVsiIWNvbHMiXSYmKE1bIiFjb2xzIl1bSlswXV09eWUpLHBlPXllLndweH1pZihKWzFd'@;
put 'PHBlKWJyZWFrO0pbMF0rKyxKWzFdLT1wZX19cmV0dXJuIEp9ZnVuY3Rpb24gUHUoTSl7cmV0dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIE0/TS50b1N0cmluZygxNik6TSkpLnNsaWNlKC02KX1mdW5jdGlvbiBvMShNLEYsTyl7dmFyIEo9InN0cmluZyI9PXR5cGVvZiBGPyEhTzoh'@;
put 'IUY7InN0cmluZyIhPXR5cGVvZiBGJiYoRj0iY29sb3IiKTt2YXIgaWU9IjwiK0YrIiAiO3JldHVybiBNLmF1dG8/aWUrJ2F1dG89IjEiLz4nOk0uaW5kZXgmJm51bGw9PU0ucmdiP2llKydpbmRleGVkPSInK00uaW5kZXgrJyIvPic6bnVsbCE9TS50aGVtZT9pZSsndGhlbWU9IicrTS50aGVt'@;
put 'ZSsnIicrKE0udGludD8nIHRpbnQ9IicrTS50aW50KyciJzoiIikrIi8+IjpudWxsIT1NLnJnYj9pZSsncmdiPSInKyhKPyJGRiI6IiIpK1B1KE0ucmdiKSsnIi8+JzppZSsiLz4ifWZ1bmN0aW9uIEMzKE0sRil7aWYoIU18fG51bGw9PU0ucmdiKXJldHVybiBGO2Zvcih2YXIgTz0oIjAwMDAw'@;
put 'MCIrTS5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksSj1bTy5zbGljZSgwLDIpLE8uc2xpY2UoMiw0KSxPLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbih5ZSl7cmV0dXJuIHBhcnNlSW50KHllLDE2KX0pLGllPTA7aWU8bWMubGVuZ3RoOysraWUpe3ZhciBwZT1tY1tpZV07aWYocGVbMF09'@;
put 'PUpbMF0mJnBlWzFdPT1KWzFdJiZwZVsyXT09SlsyXSlyZXR1cm4gaWV9cmV0dXJuIG1jLmxlbmd0aDw2ND8obWMucHVzaChbSlswXSxKWzFdLEpbMl1dKSxtYy5sZW5ndGgtMSk6Rn1mdW5jdGlvbiBLdShNKXt2YXIgRj1bIiIsIiIsIiJdO2lmKCFNKXJldHVybltdO3ZhciBPPSIiLEo9TSYm'@;
put 'TS5zP2Z1bmN0aW9uIEc2KE0pe3ZhciBGPVsiIiwiIl07aWYoIU0pcmV0dXJuIEY7aWYoTS5zeiYmKEZbMF0rPSImIitNLnN6LEZbMV09IiYxMiIrRlsxXSksTS5uYW1lJiYoRlswXSs9JyYiJytNLm5hbWUrJyxSZWd1bGFyIicsRlsxXT0nJiItLFJlZ3VsYXIiJytGWzFdKSxNLmJvbGQmJihG'@;
put 'WzBdKz0iJkIiLEZbMV09IiZCIitGWzFdKSxNLnVuZGVybGluZSl7dmFyIE89Mj09TS51bmRlcmxpbmU/IiZFIjoiJlUiO0ZbMF0rPU8sRlsxXT1PK0ZbMV19cmV0dXJuIE0uaXRhbGljJiYoRlswXSs9IiZJIixGWzFdPSImSSIrRlsxXSksTS5jb2xvciYmbnVsbCE9TS5jb2xvci5yZ2ImJihG'@;
put 'WzBdKz0iJksiK1B1KE0uY29sb3IucmdiKSxGWzFdKz0iJkswMDAwMDAiKSxNLnN0cmlrZSYmKEZbMF0rPSImUyIsRlsxXT0iJlMiK0ZbMV0pLCJzdXBlciI9PU0udmFsaWduJiYoRlswXSs9IiZYIixGWzFdPSImWCIrRlsxXSksInN1YiI9PU0udmFsaWduJiYoRlswXSs9IiZZIixGWzFdPSIm'@;
put 'WSIrRlsxXSksRn0oTS5zKTpbIiIsIiJdO3JldHVybiJzdHJpbmciPT10eXBlb2YgTT9bTSxNLE1dOm51bGwhPU0uZmlyc3R8fG51bGwhPU0uZXZlbnx8bnVsbCE9TS5vZGQ/KG51bGwhPU0ub2RkJiYoRlswXT1LdShNLm9kZClbMF0pLHZvaWQgMD09PU0uZmlyc3QmJkZbMF0mJihGWzFdPUZb'@;
put 'MF0pLG51bGwhPU0uZmlyc3QmJihGWzFdPUt1KE0uZmlyc3QpWzBdKSxudWxsIT1NLmV2ZW4mJihGWzJdPUt1KE0uZXZlbilbMF0pLEYpOk0ubGVmdHx8TS5jZW50ZXJ8fE0ucmlnaHQ/KE0ubGVmdCYmKE8rPSImTCIrS3UoTS5sZWZ0KVswXSksTS5jZW50ZXImJihPKz0iJkMiK0t1KE0uY2Vu'@;
put 'dGVyKVswXSksTS5yaWdodCYmKE8rPSImUiIrS3UoTS5yaWdodClbMF0pLFtPLE8sT10pOm51bGwhPU0udj9bTz1KWzBdK00udi5yZXBsYWNlKC8mL2csIiYmIikrSlsxXSxPLE9dOm51bGwhPU0udz9bTz1KWzBdK00udytKWzFdLE8sT106QXJyYXkuaXNBcnJheShNLlIpPyhNLlIuZm9yRWFj'@;
put 'aChmdW5jdGlvbihpZSl7Tys9S3UoaWUpWzBdfSksW08sTyxPXSk6W119dmFyIG81PXsxOiJMZXR0ZXIiLDM6IlRhYmxvaWQiLDU6IkxlZ2FsIiw3OiJFeGVjdXRpdmUiLDg6IkEzIiw5OiJBNCIsMTE6IkE1IiwxMjoiQjQiLDEzOiJCNSIsMTQ6IkZvbGlvIiwyMDoiRW52ZWxvcGUiLDM3OiJN'@;
put 'b25hcmNoIiw3MDoiQTYifSxlST1DZShvNSk7X28uQ09OTj0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jb25uZWN0aW9ucyI7dmFyIG5JPWRyKCJleHRlcm5hbExpbmsiLG51bGwse3htbG5zOlRpLm1haW5bMF19'@;
put 'KTtfby5JTUc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvaW1hZ2UiLF9vLkRSQVc9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZHJh'@;
put 'd2luZyI7dmFyIGlJPXt0OiJ0b3AiLGN0cjoiY2VudGVyIixiOiJib3R0b20iLGp1c3Q6InRvcCIsZGlzdDoidG9wIn0sczQ9e2N0cjoiY2VudGVyIixkaXN0OiJjZW50ZXIiLGp1c3Q6ImNlbnRlciIsanVzdExvdzoiY2VudGVyIixsOiJsZWZ0IixyOiJyaWdodCIsdGhhaURpc3Q6ImNlbnRl'@;
put 'ciJ9O2Z1bmN0aW9uIHNJKCl7dmFyIE09W1BuXTtyZXR1cm4gTS5wdXNoKCc8eGRyOndzRHIgeG1sbnM6eGRyPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvc3ByZWFkc2hlZXREcmF3aW5nIiB4bWxuczphPSJodHRwOi8vc2NoZW1hcy5vcGVueG1s'@;
put 'Zm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIvPicpLE0uam9pbigiIil9ZnVuY3Rpb24gelooTSl7dmFyIE8sRj1NWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09TVsiIWRhdGF0eXBlIl0/KChPPUYubWF0Y2goL15kYXRhOi4qLC8pKSYmKEY9Ri5zbGljZShPWzBdLmxlbmd0aCkp'@;
put 'LHNlLmRlY29kZShGKSk6Rn1fby5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIGxJPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3No'@;
put 'YXBlPi9nO2Z1bmN0aW9uIE5fKE0sRixPLEope3ZhciBpZT1bMjE2MDAsMjE2MDBdLHBlPVsibTAsMGwwIixpZVsxXSxpZVswXSxpZVsxXSxpZVswXSwiMHhlIl0uam9pbigiLCIpLHllPVtkcigieG1sIixudWxsLHsieG1sbnM6diI6JGEudiwieG1sbnM6byI6JGEubywieG1sbnM6eCI6JGEu'@;
put 'eCwieG1sbnM6bXYiOiRhLm12fSkucmVwbGFjZSgvXC8+LywiPiIpLGRyKCJvOnNoYXBlbGF5b3V0IixkcigibzppZG1hcCIsbnVsbCx7InY6ZXh0IjoiZWRpdCJ9KSx7InY6ZXh0IjoiZWRpdCJ9KV0sdmU9MTAyNCpNLE1lPU98fFtdO01lLmxlbmd0aD4wJiZ5ZS5wdXNoKGRyKCJ2OnNoYXBl'@;
put 'dHlwZSIsW2RyKCJ2OnN0cm9rZSIsbnVsbCx7am9pbnN0eWxlOiJtaXRlciJ9KSxkcigidjpwYXRoIixudWxsLHtzaGFkb3dvazoiZiIsZXh0cnVzaW9ub2s6ImYiLHN0cm9rZW9rOiJmIixmaWxsb2s6ImYiLCJvOmNvbm5lY3R0eXBlIjoicmVjdCJ9KSxkcigibzpsb2NrIixudWxsLHsidjpl'@;
put 'eHQiOiJlZGl0IixzaGFwZXR5cGU6InQifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDEiLGNvb3Jkc2l6ZTppZS5qb2luKCIsIiksIm86c3B0IjoyMDEscGF0aDpwZX0pKSxNZS5mb3JFYWNoKGZ1bmN0aW9uKFllKXsrK3ZlLHllPXllLmNvbmNhdChmdW5jdGlvbiBhNShNLEYpe3ZhciBP'@;
put 'PXtpZDoiX3gwMDAwX3MiK0YsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJhZGlvIj09TVsiIXR5cGUiXXx8IkNoZWNrYm94Ij09TVsiIXR5cGUiXXx8Ikxpc3QiPT1NWyIhdHlwZSJdfHwiRHJvcCI9PU1bIiF0eXBlIl0pJiYoTy5zdHJva2Vk'@;
put 'PSJmIiksIkxhYmVsIj09TVsiIXR5cGUiXSYmKE8uZmlsbGVkPSJmIik7dmFyIEo9IiI7TS50JiZWX1tNWyIhdHlwZSJdXSYmKEo9Vl9bTVsiIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8seXIoTS50KSkpO3ZhciBpZT1bXTtyZXR1cm4gTS5tYWNybyYmaWUucHVzaChybygieDpGbWxhTWFjcm8i'@;
put 'LE0ubWFjcm8pKSxNLmxpbmsmJmllLnB1c2gocm8oIng6Rm1sYUxpbmsiLE0ubGluaykpLE0udmFsJiZpZS5wdXNoKHJvKCJSYWRpbyI9PU1bIiF0eXBlIl18fCJDaGVja2JveCI9PU1bIiF0eXBlIl0/Ing6Q2hlY2tlZCI6Ing6VmFsIixTdHJpbmcoTS52YWwpKSksTS5yZWYmJmllLnB1c2go'@;
put 'cm8oIng6Rm1sYVJhbmdlIixNLnJlZikpLE0uc2VsJiYiTGlzdCI9PU1bIiF0eXBlIl0mJmllLnB1c2gocm8oIng6U2VsVHlwZSIsTS5zZWwpKSxNLm1pbiYmaWUucHVzaChybygieDpNaW4iLFN0cmluZyhNLm1pbikpKSxNLm1heCYmaWUucHVzaChybygieDpNYXgiLFN0cmluZyhNLm1heCkp'@;
put 'KSxNLnN0ZXAmJmllLnB1c2gocm8oIng6SW5jIixTdHJpbmcoTS5zdGVwKSkpLE0ucGFnZSYmaWUucHVzaChybygieDpQYWdlIixTdHJpbmcoTS5wYWdlKSkpLFtdLmNvbmNhdChbIjx2OnNoYXBlIit3bChPKSsiPiJdKS5jb25jYXQoal9bTVsiIXR5cGUiXV18fFtdKS5jb25jYXQoW0pdKS5j'@;
put 'b25jYXQoWyc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9IicrTVsiIXR5cGUiXSsnIj4nLHJvKCJ4OkFuY2hvciIsUUwoTVsiIXBvcyJdKSkscm8oIng6UHJpbnRPYmplY3QiLCJGYWxzZSIpXSkuY29uY2F0KGllKS5jb25jYXQoY0lbTVsiIXR5cGUiXV18fFtdKS5jb25jYXQoWyI8L3g6Q2xp'@;
put 'ZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il0pfShZZSx2ZSkpfSk7dmFyIGplPUZ8fFtdO3JldHVybiBqZS5sZW5ndGg+MCYmeWUucHVzaChkcigidjpzaGFwZXR5cGUiLFtkcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksZHIoInY6cGF0aCIsbnVsbCx7Z3JhZGllbnRzaGFw'@;
put 'ZW9rOiJ0Iiwibzpjb25uZWN0dHlwZSI6InJlY3QifSldLmpvaW4oIiIpLHtpZDoiX3gwMDAwX3QyMDIiLGNvb3Jkc2l6ZTppZS5qb2luKCIsIiksIm86c3B0IjoyMDIscGF0aDpwZX0pKSxqZS5mb3JFYWNoKGZ1bmN0aW9uKFllKXsrK3ZlLHllPXllLmNvbmNhdChmdW5jdGlvbiBxNihNLEYs'@;
put 'Tyl7dmFyIEo9aHMoTVswXSksaWU9TVsxXS5maWxsfHx7fTtNWzFdLnMmJihpZT17dHlwZTpNWzFdLnMucGF0dGVyblR5cGV8fCJzb2xpZCJ9LE1bMV0ucy5mZ0NvbG9yJiYoaWUuY29sb3IyPWllLmNvbG9yMT0iIyIrUHUoTVsxXS5zLmZnQ29sb3IucmdiKSksTVsxXS5zLmJnQ29sb3ImJihp'@;
put 'ZS5jb2xvcjI9IiMiK1B1KE1bMV0ucy5iZ0NvbG9yLnJnYikpKTt2YXIgcGU9e2NvbG9yMjppZS5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOmllLnR5cGV8fCJncmFkaWVudCJ9OyJncmFkaWVudCI9PXBlLnR5cGUmJihwZS5hbmdsZT0iLTE4MCIpO3ZhciB5ZT0iZ3JhZGllbnQiPT1wZS50eXBl'@;
put 'P2RyKCJvOmZpbGwiLG51bGwse3R5cGU6ImdyYWRpZW50VW5zY2FsZWQiLCJ2OmV4dCI6InZpZXcifSk6bnVsbCx2ZT1kcigidjpmaWxsIix5ZSxwZSksTWU9e307TVsxXS5zaGFkb3cmJihNWzFdLnNoYWRvdy5jb2xvciYmKE1lLmNvbG9yPU1bMV0uc2hhZG93LmNvbG9yKSxNWzFdLnNoYWRv'@;
put 'dy5vbiYmKE1lLm9uPU1bMV0uc2hhZG93Lm9uKSksTWUub2JzY3VyZWQ9InQiO3ZhciBqZT0hMCxZZT0hMCxxZT1NWzFdWyIhcG9zIl0/WHQoTVsxXVsiIXBvcyJdKTpudWxsO3JldHVybiBxZSYmKFllPW51bGw9PXFlLlImJm51bGw9PXFlLkMmJm51bGw9PXFlLlgmJm51bGw9PXFlLlksamU9'@;
put 'IXFlLnImJiFxZS5jLEpMKHFlLDAsTykpLFsiPHY6c2hhcGUiK3dsKHtpZDoiX3gwMDAwX3MiK0YsdHlwZToiI194MDAwMF90MjAyIixzdHlsZToicG9zaXRpb246YWJzb2x1dGU7IG1hcmdpbi1sZWZ0OjgwcHQ7bWFyZ2luLXRvcDo1cHQ7d2lkdGg6MTA0cHQ7aGVpZ2h0OjY0cHQ7ei1pbmRl'@;
put 'eDoxMCIrKE1bMV0uaGlkZGVuPyI7dmlzaWJpbGl0eTpoaWRkZW4iOiIiKSxmaWxsY29sb3I6aWUuY29sb3IxfHwiI0VDRkFENCIsc3Ryb2tlY29sb3I6KE1bMV0uc3Ryb2tlfHx7fSkuY29sb3J8fCIjZWRlYWExIn0pKyI+Iix2ZSxkcigidjpzaGFkb3ciLG51bGwsTWUpLGRyKCJ2OnBhdGgi'@;
put 'LG51bGwseyJvOmNvbm5lY3R0eXBlIjoibm9uZSJ9KSwnPHY6dGV4dGJveD48ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQiPjwvZGl2Pjwvdjp0ZXh0Ym94PicsJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iTm90ZSI+JyxqZT8iPHg6TW92ZVdpdGhDZWxscy8+IjoiIixZZT8iPHg6U2l6'@;
put 'ZVdpdGhDZWxscy8+IjoiIixybygieDpBbmNob3IiLHFlP1FMKHFlKTpNWzFdLnJhd2FuY2hvcnx8W0ouYysxLDAsSi5yKzEsMCxKLmMrMywyMCxKLnIrNSwyMF0uam9pbigiLCIpKSxybygieDpBdXRvRmlsbCIsIkZhbHNlIikscm8oIng6Um93IixTdHJpbmcoSi5yKSkscm8oIng6Q29sdW1u'@;
put 'IixTdHJpbmcoSi5jKSksTVsxXS5oaWRkZW4/IiI6Ijx4OlZpc2libGUvPiIsIjwveDpDbGllbnREYXRhPiIsIjwvdjpzaGFwZT4iXX0oWWUsdmUsSikpfSkseWUucHVzaCgiPC94bWw+IikseWUuam9pbigiIil9dmFyIGNJPXtCdXR0b246WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmls'@;
put 'bD4iLCI8eDpUZXh0SEFsaWduPkNlbnRlcjwveDpUZXh0SEFsaWduPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+Il0sR0JveDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4Ok5vVGhyZWVELz4iXSxMYWJlbDpb'@;
put 'Ijx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiJdLFJhZGlvOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6'@;
put 'VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sQ2hlY2tib3g6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpUZXh0VkFsaWduPkNl'@;
put 'bnRlcjwveDpUZXh0VkFsaWduPiIsIjx4Ok5vVGhyZWVELz4iXSxEcm9wOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpTZWxUeXBlPlNpbmdsZTwveDpTZWxUeXBlPiIsIjx4OkRyb3BTdHlsZT5Db21i'@;
put 'bzwveDpEcm9wU3R5bGU+IiwiPHg6TENUPk5vcm1hbDwveDpMQ1Q+IiwiPHg6RHJvcExpbmVzPjQ8L3g6RHJvcExpbmVzPiJdLExpc3Q6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iLCI8eDpOb1RocmVlRDIvPiIsIjx4OkxDVD5Ob3JtYWw8'@;
put 'L3g6TENUPiIsIjx4OlZhbD4wPC94OlZhbD4iLCI8eDpNaW4+MDwveDpNaW4+IiwiPHg6TWF4PjU8L3g6TWF4PiIsIjx4OkluYz4xPC94OkluYz4iLCI8eDpQYWdlPjQ8L3g6UGFnZT4iLCI8eDpEeD4xNTwveDpEeD4iXSxTY3JvbGw6WyI8eDpTaXplV2l0aENlbGxzLz4iLCI8eDpIb3Jpei8+'@;
put 'IiwiPHg6RHg+MTU8L3g6RHg+Il0sU3BpbjpbIjx4OkR4PjE1PC94OkR4PiJdfSxWXz17QnV0dG9uOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcic+PGZvbnQgZmFjZT0nQ2Fs'@;
put 'aWJyaScgc2l6ZT0nMjQwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLEdCb3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQg'@;
put 'ZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLFJhZGlvOiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFs'@;
put 'aWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9J2F1dG8nPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixMYWJlbDoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBz'@;
put 'dHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPScjMDAwMDAwJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIsQ2hlY2tib3g6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2lu'@;
put 'Z2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rpdj48L3Y6dGV4dGJveD4iLHNoZWV0anM6ImRhZnVxIn0sal89e0J1dHRvbjpbJzx2OmZpbGwg'@;
put 'Y29sb3IyPSIjZjBmMGYwIFs2N10iIG86ZGV0ZWN0bW91c2VjbGljaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sR0JveDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sRHJvcDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0'@;
put 'aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGlzdDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU3BpbjpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sU2Nyb2xsOlsnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRp'@;
put 'b249InQiIHRleHQ9InQiLz4nXSxMYWJlbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sUmFkaW86Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4nXSxDaGVj'@;
put 'a2JveDpbJzx2OnBhdGggc2hhZG93b2s9InQiIHN0cm9rZW9rPSJ0IiBmaWxsb2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLHNoZWV0anM6W119O2Z1bmN0aW9uIGJDKE0sRixPLEope3ZhciBpZT17IiFpZCI6e319LHBlPVtkcigieG1sIixudWxsLHsi'@;
put 'eG1sbnM6diI6JGEudiwieG1sbnM6byI6JGEubywieG1sbnM6eCI6JGEueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxkcigibzpzaGFwZWxheW91dCIsZHIoIm86aWRtYXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94'@;
put 'MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFz'@;
put 'PiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAgQDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+'@;
put 'JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIvPicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4n'@;
put 'LCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzps'@;
put 'b2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0seWU9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odmUpe0pbdmVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oTWUpe0pbdmVdW01lXSYmWyJs'@;
put 'ZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKGplKXtpZihBcnJheS5pc0FycmF5KEpbdmVdW01lXVtqZV0pKWZvcih2YXIgWWU9MDtZZTxKW3ZlXVtNZV1bamVdLmxlbmd0aDsrK1llKWlmKEpbdmVdW01lXVtqZV1bWWVdKXt2YXIgcWU9Slt2ZV1bTWVdW2plXVtZZV07'@;
put 'aWYoInJlbW90ZSI9PXFlWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO3BuKE0sInhsL21lZGlhL2ltYWdlIit5ZSsiLmpwZyIpOykrK3llO00uZmlsZSgieGwvbWVkaWEvaW1hZ2UiK3llKyIuanBnIix6WihxZSks'@;
put 'e2JpbmFyeTohMH0pLHZyKGllLC0xLCIuLi9tZWRpYS9pbWFnZSIreWUrIi5qcGciLF9vLklNRyk7dmFyIGl0PSJfeDAwMDBfcyIrKDEwMjUrcWUuX2NudCksaHQ9InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisocWUuX2NudCsxKSsiOyI7'@;
put 'aHQrPSJ3aWR0aDoiK3FlWyIhcG9zIl0udysicHg7IixodCs9ImhlaWdodDoiK3FlWyIhcG9zIl0uaCsicHg7Ijt2YXIga3Q9amUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdmUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT1NZSYmKGt0Kz1NZS50b1VwcGVyQ2FzZSgpKSxKW3Zl'@;
put 'XVtNZV1bamVdLmxlbmd0aD4xJiYoa3QrPVllKSxwZS5wdXNoKGRyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhxZS5fY250KzEpKyciIG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtp'@;
put 'ZDprdCwibzpzcGlkIjppdCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6aHR9KSl9fSl9KX0pLHBlLnB1c2goIjwveG1sPiIpLE0uZmlsZSgieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrTysiSEYudm1sIixwZS5qb2luKCIiKSksTS5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5n'@;
put 'IitPKyJIRi52bWwucmVscyIsc2koaWUpKX1fby5DTU5UPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NvbW1lbnRzIjt2YXIgSzY9ZHIoImNvbW1lbnRzIixudWxsLHt4bWxuczpUaS5tYWluWzBdfSk7ZnVuY3Rp'@;
put 'b24gQl8oTSl7dmFyIEY9W1BuLEs2XSxPPVtdO3JldHVybiBGLnB1c2goIjxhdXRob3JzPiIpLE0uZm9yRWFjaChmdW5jdGlvbihKKXtKWzFdLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBwZT15cihpZS5hKTtPLmluZGV4T2YocGUpPi0xfHwoTy5wdXNoKHBlKSxGLnB1c2goIjxhdXRob3I+'@;
put 'IitwZSsiPC9hdXRob3I+IikpfSl9KSxGLnB1c2goIjwvYXV0aG9ycz4iKSxGLnB1c2goIjxjb21tZW50TGlzdD4iKSxNLmZvckVhY2goZnVuY3Rpb24oSil7SlsxXS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtGLnB1c2goJzxjb21tZW50IHJlZj0iJytKWzBdKyciIGF1dGhvcklkPSInK08uaW5k'@;
put 'ZXhPZih5cihpZS5hKSkrJyI+PHRleHQ+JyksRi5wdXNoKGllLlI/YWEoaWUuUik6cm8oInQiLG51bGw9PWllLnQ/IiI6eXIoaWUudCkpKSxGLnB1c2goIjwvdGV4dD48L2NvbW1lbnQ+Iil9KX0pLEYucHVzaCgiPC9jb21tZW50TGlzdD4iKSxGLmxlbmd0aD4yJiYoRltGLmxlbmd0aF09Ijwv'@;
put 'Y29tbWVudHM+IixGWzFdPUZbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEYuam9pbigiIil9dmFyIGRJPXpsO2Z1bmN0aW9uIFlfKE0pe3ZhciBGPVJsKCksTz1bXTtyZXR1cm4gZ2koRiwiQnJ0QmVnaW5Db21tZW50cyIpLGdpKEYsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSxNLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oSil7SlsxXS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtPLmluZGV4T2YoaWUuYSk+LTF8fChPLnB1c2goaWUuYS5zbGljZSgwLDU0KSksZ2koRiwiQnJ0Q29tbWVudEF1dGhvciIsZnVuY3Rpb24gVVooTSl7cmV0dXJuIENsKE0uc2xpY2UoMCw1NCkpfShpZS5hKSkpfSl9KSxnaShG'@;
put 'LCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLGdpKEYsIkJydEJlZ2luQ29tbWVudExpc3QiKSxNLmZvckVhY2goZnVuY3Rpb24oSil7SlsxXS5mb3JFYWNoKGZ1bmN0aW9uKGllKXtpZS5pYXV0aG9yPU8uaW5kZXhPZihpZS5hKTt2YXIgcGU9e3M6aHMoSlswXSksZTpocyhKWzBdKX07Z2koRiwi'@;
put 'QnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiB1SShNLEYpe3JldHVybiBudWxsPT1GJiYoRj1ncigzNikpLEYud3JpdGVfc2hpZnQoNCxNWzFdLmlhdXRob3IpLEExKE1bMF0sRiksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDQsMCksRi53cml0'@;
put 'ZV9zaGlmdCg0LDApLEZ9KFtwZSxpZV0pKSxpZS50JiZpZS50Lmxlbmd0aD4wJiZnaShGLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gWnUoTSxGKXt2YXIgTz0hMTtyZXR1cm4gbnVsbD09RiYmKE89ITAsRj1ncigyMys0Kk0udC5sZW5ndGgpKSxGLndyaXRlX3NoaWZ0KDEsMSksQ2woTS50'@;
put 'LEYpLEYud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBxZihNLEYpe0Z8fChGPWdyKDQpKSxGLndyaXRlX3NoaWZ0KDIsTS5pY2h8fDApLEYud3JpdGVfc2hpZnQoMixNLmlmbnR8fDApfSh7aWNoOjAsaWZudDowfSxGKSxPP0Yuc2xpY2UoMCxGLmwpOkZ9KGllKSksZ2koRiwiQnJ0RW5kQ29t'@;
put 'bWVudCIpLGRlbGV0ZSBpZS5pYXV0aG9yfSl9KSxnaShGLCJCcnRFbmRDb21tZW50TGlzdCIpLGdpKEYsIkJydEVuZENvbW1lbnRzIiksRi5lbmQoKX12YXIgQ0M9ImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UudmJhUHJvamVjdCIsa0M9WyJ4bHNiIiwieGxzbSIsInhsYW0iLCJiaWZmOCIs'@;
put 'InhsYSJdO19vLkRTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2RpYWxvZ3NoZWV0Iixfby5NUz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9yZWxhdGlvbnNoaXBzL3hsTWFjcm9z'@;
put 'aGVldCI7dmFyIGw0PWZ1bmN0aW9uKCl7dmFyIE09LyhefFteQS1aYS16X10pUihcWz8tP1xkK1xdfFsxLTldXGQqfClDKFxbPy0/XGQrXF18WzEtOV1cZCp8KSg/IVtBLVphLXowLTlfXSkvZyxGPXtyOjAsYzowfTtmdW5jdGlvbiBPKEosaWUscGUseWUpe3ZhciB2ZT0hMSxNZT0hMTswPT1w'@;
put 'ZS5sZW5ndGg/TWU9ITA6IlsiPT1wZS5jaGFyQXQoMCkmJihNZT0hMCxwZT1wZS5zbGljZSgxLC0xKSksMD09eWUubGVuZ3RoP3ZlPSEwOiJbIj09eWUuY2hhckF0KDApJiYodmU9ITAseWU9eWUuc2xpY2UoMSwtMSkpO3ZhciBqZT1wZS5sZW5ndGg+MD8wfHBhcnNlSW50KHBlLDEwKTowLFll'@;
put 'PXllLmxlbmd0aD4wPzB8cGFyc2VJbnQoeWUsMTApOjA7cmV0dXJuIHZlP1llKz1GLmM6LS1ZZSxNZT9qZSs9Ri5yOi0tamUsaWUrKHZlPyIiOiIkIikrZm8oWWUpKyhNZT8iIjoiJCIpK3JzKGplKX1yZXR1cm4gZnVuY3Rpb24oaWUscGUpe3JldHVybiBGPXBlLGllLnJlcGxhY2UoTSxPKX19'@;
put 'KCksUGQ9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRdXGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFb'@;
put 'Xy5cKEEtWmEtejAtOV0pL2cseDM9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oRixPKXtyZXR1cm4gRi5yZXBsYWNlKFBkLGZ1bmN0aW9uKEosaWUscGUseWUsdmUsTWUpe3ZhciBqZT1Zbyh5ZSktKHBlPzA6Ty5jKSxZZT12dShNZSktKHZlPzA6Ty5yKTtyZXR1cm4gaWUrIlIiKygwPT1Z'@;
put 'ZT8iIjp2ZT9ZZSsxOiJbIitZZSsiXSIpKyJDIisoMD09amU/IiI6cGU/amUrMToiWyIramUrIl0iKX0pfX0oKTtmdW5jdGlvbiBFQyhNLEYpe3JldHVybiBNLnJlcGxhY2UoUGQsZnVuY3Rpb24oTyxKLGllLHBlLHllLHZlKXtyZXR1cm4gSisoIiQiPT1pZT9pZStwZTpmbyhZbyhwZSkrRi5j'@;
put 'KSkrKCIkIj09eWU/eWUrdmU6cnModnUodmUpK0YucikpfSkucmVwbGFjZSgvKFxkKyk6KFxkKykvZyxmdW5jdGlvbihPLEosaWUpe3JldHVybiBycyh2dShKKStGLnIpKyI6Iitycyh2dShpZSkrRi5yKX0pfWZ1bmN0aW9uIFpaKE0sRixPKXt2YXIgaWU9SHMoRikucyxwZT1ocyhPKTtyZXR1'@;
put 'cm4gRUMoTSx7cjpwZS5yLWllLnIsYzpwZS5jLWllLmN9KX1mdW5jdGlvbiBnSShNKXtyZXR1cm4gTS5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIHZjKE0pe00ubCs9MX1mdW5jdGlvbiBrMyhNLEYpe3ZhciBPPU0ucmVhZF9zaGlmdCgxPT1GPzE6Mik7cmV0dXJuWzE2MzgzJk8s'@;
put 'Tz4+MTQmMSxPPj4xNSYxXX1mdW5jdGlvbiB6XyhNLEYsTyl7dmFyIEo9MjtpZihPKXtpZihPLmJpZmY+PTImJk8uYmlmZjw9NSlyZXR1cm4gVEMoTSk7MTI9PU8uYmlmZiYmKEo9NCl9dmFyIGllPU0ucmVhZF9zaGlmdChKKSxwZT1NLnJlYWRfc2hpZnQoSikseWU9azMoTSwyKSx2ZT1rMyhN'@;
put 'LDIpO3JldHVybntzOntyOmllLGM6eWVbMF0sY1JlbDp5ZVsxXSxyUmVsOnllWzJdfSxlOntyOnBlLGM6dmVbMF0sY1JlbDp2ZVsxXSxyUmVsOnZlWzJdfX19ZnVuY3Rpb24gVEMoTSl7dmFyIEY9azMoTSwyKSxPPWszKE0sMiksSj1NLnJlYWRfc2hpZnQoMSksaWU9TS5yZWFkX3NoaWZ0KDEp'@;
put 'O3JldHVybntzOntyOkZbMF0sYzpKLGNSZWw6RlsxXSxyUmVsOkZbMl19LGU6e3I6T1swXSxjOmllLGNSZWw6T1sxXSxyUmVsOk9bMl19fX1mdW5jdGlvbiBEQyhNLEYsTyl7aWYoTyYmTy5iaWZmPj0yJiZPLmJpZmY8PTUpcmV0dXJuIGZ1bmN0aW9uIHZJKE0pe3ZhciBGPWszKE0sMiksTz1N'@;
put 'LnJlYWRfc2hpZnQoMSk7cmV0dXJue3I6RlswXSxjOk8sY1JlbDpGWzFdLHJSZWw6RlsyXX19KE0pO3ZhciBKPU0ucmVhZF9zaGlmdChPJiYxMj09Ty5iaWZmPzQ6MiksaWU9azMoTSwyKTtyZXR1cm57cjpKLGM6aWVbMF0sY1JlbDppZVsxXSxyUmVsOmllWzJdfX1mdW5jdGlvbiBVXyhNKXt2'@;
put 'YXIgRj1NLnJlYWRfc2hpZnQoMiksTz1NLnJlYWRfc2hpZnQoMik7cmV0dXJue3I6RixjOjI1NSZPLGZRdW90ZWQ6ISEoMTYzODQmTyksY1JlbDpPPj4xNSxyUmVsOk8+PjE1fX1mdW5jdGlvbiBPQyhNKXtyZXR1cm5bTS5yZWFkX3NoaWZ0KDEpLE0ucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24g'@;
put 'JF8oTSxGKXt2YXIgTz1bTS5yZWFkX3NoaWZ0KDEpXTtpZigxMj09Rilzd2l0Y2goT1swXSl7Y2FzZSAyOk9bMF09NDticmVhaztjYXNlIDQ6T1swXT0xNjticmVhaztjYXNlIDA6T1swXT0xO2JyZWFrO2Nhc2UgMTpPWzBdPTJ9c3dpdGNoKE9bMF0pe2Nhc2UgNDpPWzFdPVJpKE0sMSk/IlRS'@;
put 'VUUiOiJGQUxTRSIsMTIhPUYmJihNLmwrPTcpO2JyZWFrO2Nhc2UgMzc6Y2FzZSAxNjpPWzFdPXVsW01bTS5sXV0sTS5sKz0xMj09Rj80Ojg7YnJlYWs7Y2FzZSAwOk0ubCs9ODticmVhaztjYXNlIDE6T1sxXT1oYShNKTticmVhaztjYXNlIDI6T1sxXT13dShNLDAse2JpZmY6Rj4wJiZGPDg/'@;
put 'MjpGfSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkJhZCBTZXJBcjogIitPWzBdKX1yZXR1cm4gT31mdW5jdGlvbiBOQyhNLEYsTyl7Zm9yKHZhciBKPU0ucmVhZF9zaGlmdCgxMj09Ty5iaWZmPzQ6MiksaWU9W10scGU9MDtwZSE9SjsrK3BlKWllLnB1c2goKDEyPT1PLmJpZmY/'@;
put 'U2w6ZTEpKE0sOCkpO3JldHVybiBpZX1mdW5jdGlvbiBUSShNLEYsTyl7dmFyIEo9MCxpZT0wOzEyPT1PLmJpZmY/KEo9TS5yZWFkX3NoaWZ0KDQpLGllPU0ucmVhZF9zaGlmdCg0KSk6KGllPTErTS5yZWFkX3NoaWZ0KDEpLEo9MStNLnJlYWRfc2hpZnQoMikpLE8uYmlmZj49MiYmTy5iaWZm'@;
put 'PDgmJigtLUosMD09LS1pZSYmKGllPTI1NikpO2Zvcih2YXIgcGU9MCx5ZT1bXTtwZSE9SiYmKHllW3BlXT1bXSk7KytwZSlmb3IodmFyIHZlPTA7dmUhPWllOysrdmUpeWVbcGVdW3ZlXT0kXyhNLE8uYmlmZik7cmV0dXJuIHllfWZ1bmN0aW9uIHU0KE0sRixPKXtyZXR1cm4gTS5sKz0yLFtV'@;
put 'XyhNKV19ZnVuY3Rpb24gcV8oTSl7cmV0dXJuIE0ubCs9NixbXX12YXIgUEk9dTQsRkk9cV8sSEk9cV8sTkk9dTQ7ZnVuY3Rpb24gakMoTSl7cmV0dXJuIE0ubCs9MixbSmEoTSksMSZNLnJlYWRfc2hpZnQoMildfXZhciBLXz11NCxlVz1qQyx0Vz1xXyxYXz11NCxuVz11NCxyVz1bIkRhdGEi'@;
put 'LCJBbGwiLCJIZWFkZXJzIiwiPz8iLCI/RGF0YTIiLCI/PyIsIj9EYXRhSGVhZGVycyIsIj8/IiwiVG90YWxzIiwiPz8iLCI/PyIsIj8/IiwiP0RhdGFUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/Q3VycmVudCJdLHQ4PXsxOntuOiJQdGdFeHAiLGY6ZnVuY3Rpb24geEkoTSxGLE8pe3JldHVy'@;
put 'biBNLmwrKyxPJiYxMj09Ty5iaWZmP1tNLnJlYWRfc2hpZnQoNCwiaSIpLDBdOltNLnJlYWRfc2hpZnQoMiksTS5yZWFkX3NoaWZ0KE8mJjI9PU8uYmlmZj8xOjIpXX19LDI6e246IlB0Z1RibCIsZjpGc30sMzp7bjoiUHRnQWRkIixmOnZjfSw0OntuOiJQdGdTdWIiLGY6dmN9LDU6e246IlB0'@;
put 'Z011bCIsZjp2Y30sNjp7bjoiUHRnRGl2IixmOnZjfSw3OntuOiJQdGdQb3dlciIsZjp2Y30sODp7bjoiUHRnQ29uY2F0IixmOnZjfSw5OntuOiJQdGdMdCIsZjp2Y30sMTA6e246IlB0Z0xlIixmOnZjfSwxMTp7bjoiUHRnRXEiLGY6dmN9LDEyOntuOiJQdGdHZSIsZjp2Y30sMTM6e246IlB0'@;
put 'Z0d0IixmOnZjfSwxNDp7bjoiUHRnTmUiLGY6dmN9LDE1OntuOiJQdGdJc2VjdCIsZjp2Y30sMTY6e246IlB0Z1VuaW9uIixmOnZjfSwxNzp7bjoiUHRnUmFuZ2UiLGY6dmN9LDE4OntuOiJQdGdVcGx1cyIsZjp2Y30sMTk6e246IlB0Z1VtaW51cyIsZjp2Y30sMjA6e246IlB0Z1BlcmNlbnQi'@;
put 'LGY6dmN9LDIxOntuOiJQdGdQYXJlbiIsZjp2Y30sMjI6e246IlB0Z01pc3NBcmciLGY6dmN9LDIzOntuOiJQdGdTdHIiLGY6ZnVuY3Rpb24gRUkoTSxGLE8pe3JldHVybiBNLmwrKyxwbyhNLDAsTyl9fSwyNjp7bjoiUHRnU2hlZXQiLGY6ZnVuY3Rpb24gc1coTSxGLE8pe3JldHVybiBNLmwr'@;
put 'PTUsTS5sKz0yLE0ubCs9Mj09Ty5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gVkkoTSxGLE8pe3JldHVybiBNLmwrPTI9PU8uYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0Z0VyciIsZjpmdW5jdGlvbiBHXyhNKXtyZXR1'@;
put 'cm4gTS5sKyssdWxbTS5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIGM0KE0pe3JldHVybiBNLmwrKywwIT09TS5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBrSShNKXtyZXR1cm4gTS5sKyssTS5yZWFkX3NoaWZ0KDIpfX0sMzE6'@;
put 'e246IlB0Z051bSIsZjpmdW5jdGlvbiBFMyhNKXtyZXR1cm4gTS5sKyssaGEoTSl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gcVooTSxGLE8pe3ZhciBKPSg5NiZNW00ubCsrXSk+PjU7cmV0dXJuIE0ubCs9Mj09Ty5iaWZmPzY6MTI9PU8uYmlmZj8xNDo3LFtKXX19LDMzOntuOiJQ'@;
put 'dGdGdW5jIixmOmZ1bmN0aW9uIENJKE0sRixPKXt2YXIgSj0oOTYmTVtNLmxdKT4+NTtNLmwrPTE7dmFyIGllPU0ucmVhZF9zaGlmdChPJiZPLmJpZmY8PTM/MToyKTtyZXR1cm5bVUlbaWVdLCRDW2llXSxKXX19LDM0OntuOiJQdGdGdW5jVmFyIixmOmZ1bmN0aW9uIFNJKE0sRixPKXt2YXIg'@;
put 'Sj1NW00ubCsrXSxpZT1NLnJlYWRfc2hpZnQoMSkscGU9TyYmTy5iaWZmPD0zP1s4OD09Sj8tMTowLE0ucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gSEMoTSl7cmV0dXJuW01bTS5sKzFdPj43LDMyNzY3Jk0ucmVhZF9zaGlmdCgyKV19KE0pO3JldHVybltpZSwoMD09PXBlWzBdPyRDOmF2KVtw'@;
put 'ZVsxXV1dfX0sMzU6e246IlB0Z05hbWUiLGY6ZnVuY3Rpb24gREkoTSxGLE8pe3ZhciBKPU0ucmVhZF9zaGlmdCgxKT4+PjUmMyxwZT1NLnJlYWRfc2hpZnQoIU98fE8uYmlmZj49OD80OjIpO3N3aXRjaChPLmJpZmYpe2Nhc2UgMjpNLmwrPTU7YnJlYWs7Y2FzZSAzOmNhc2UgNDpNLmwrPTg7'@;
put 'YnJlYWs7Y2FzZSA1Ok0ubCs9MTJ9cmV0dXJuW0osMCxwZV19fSwzNjp7bjoiUHRnUmVmIixmOmZ1bmN0aW9uIE1JKE0sRixPKXt2YXIgSj0oOTYmTVtNLmxdKT4+NTtyZXR1cm4gTS5sKz0xLFtKLERDKE0sMCxPKV19fSwzNzp7bjoiUHRnQXJlYSIsZjpmdW5jdGlvbiBBQyhNLEYsTyl7cmV0'@;
put 'dXJuWyg5NiZNW00ubCsrXSk+PjUsel8oTSwwLE8pXX19LDM4OntuOiJQdGdNZW1BcmVhIixmOmZ1bmN0aW9uIFZDKE0sRixPKXt2YXIgSj1NLnJlYWRfc2hpZnQoMSk+Pj41JjM7cmV0dXJuIE0ubCs9TyYmMj09Ty5iaWZmPzM6NCxbSixNLnJlYWRfc2hpZnQoTyYmMj09Ty5iaWZmPzE6Mild'@;
put 'fX0sMzk6e246IlB0Z01lbUVyciIsZjpGc30sNDA6e246IlB0Z01lbU5vTWVtIixmOkZzfSw0MTp7bjoiUHRnTWVtRnVuYyIsZjpmdW5jdGlvbiBKWihNLEYsTyl7cmV0dXJuW00ucmVhZF9zaGlmdCgxKT4+PjUmMyxNLnJlYWRfc2hpZnQoTyYmMj09Ty5iaWZmPzE6MildfX0sNDI6e246IlB0'@;
put 'Z1JlZkVyciIsZjpmdW5jdGlvbiBRWihNLEYsTyl7dmFyIEo9TS5yZWFkX3NoaWZ0KDEpPj4+NSYzO3JldHVybiBNLmwrPTQsTy5iaWZmPDgmJk0ubC0tLDEyPT1PLmJpZmYmJihNLmwrPTIpLFtKXX19LDQzOntuOiJQdGdBcmVhRXJyIixmOmZ1bmN0aW9uIElDKE0sRixPKXt2YXIgSj0oOTYm'@;
put 'TVtNLmwrK10pPj41O3JldHVybiBNLmwrPU8mJk8uYmlmZj44PzEyOk8uYmlmZjw4PzY6OCxbSl19fSw0NDp7bjoiUHRnUmVmTiIsZjpmdW5jdGlvbiBQQyhNLEYsTyl7dmFyIEo9KDk2Jk1bTS5sXSk+PjU7TS5sKz0xO3ZhciBpZT1mdW5jdGlvbiBWaChNLEYsTyl7dmFyIEo9TyYmTy5iaWZm'@;
put 'P08uYmlmZjo4O2lmKEo+PTImJko8PTUpcmV0dXJuIGZ1bmN0aW9uIGw1KE0pe3ZhciBGPU0ucmVhZF9zaGlmdCgyKSxPPU0ucmVhZF9zaGlmdCgxKSxKPSgzMjc2OCZGKT4+MTUsaWU9KDE2Mzg0JkYpPj4xNDtyZXR1cm4gRiY9MTYzODMsMT09SiYmRj49ODE5MiYmKEYtPTE2Mzg0KSwxPT1p'@;
put 'ZSYmTz49MTI4JiYoTy09MjU2KSx7cjpGLGM6TyxjUmVsOmllLHJSZWw6Sn19KE0pO3ZhciBpZT1NLnJlYWRfc2hpZnQoSj49MTI/NDoyKSxwZT1NLnJlYWRfc2hpZnQoMikseWU9KDE2Mzg0JnBlKT4+MTQsdmU9KDMyNzY4JnBlKT4+MTU7aWYocGUmPTE2MzgzLDE9PXZlKWZvcig7aWU+NTI0'@;
put 'Mjg3OylpZS09MTA0ODU3NjtpZigxPT15ZSlmb3IoO3BlPjgxOTE7KXBlLT0xNjM4NDtyZXR1cm57cjppZSxjOnBlLGNSZWw6eWUsclJlbDp2ZX19KE0sMCxPKTtyZXR1cm5bSixpZV19fSw0NTp7bjoiUHRnQXJlYU4iLGY6ZnVuY3Rpb24gJFooTSxGLE8pe3ZhciBKPSg5NiZNW00ubCsrXSk+'@;
put 'PjUsaWU9ZnVuY3Rpb24gX0koTSxGLE8pe2lmKE8uYmlmZjw4KXJldHVybiBUQyhNKTt2YXIgSj1NLnJlYWRfc2hpZnQoMTI9PU8uYmlmZj80OjIpLGllPU0ucmVhZF9zaGlmdCgxMj09Ty5iaWZmPzQ6MikscGU9azMoTSwyKSx5ZT1rMyhNLDIpO3JldHVybntzOntyOkosYzpwZVswXSxjUmVs'@;
put 'OnBlWzFdLHJSZWw6cGVbMl19LGU6e3I6aWUsYzp5ZVswXSxjUmVsOnllWzFdLHJSZWw6eWVbMl19fX0oTSwwLE8pO3JldHVybltKLGllXX19LDQ2OntuOiJQdGdNZW1BcmVhTiIsZjpmdW5jdGlvbiBRNihNKXtyZXR1cm5bTS5yZWFkX3NoaWZ0KDEpPj4+NSYzLE0ucmVhZF9zaGlmdCgyKV19'@;
put 'fSw0Nzp7bjoiUHRnTWVtTm9NZW1OIixmOmZ1bmN0aW9uIGU4KE0pe3JldHVybltNLnJlYWRfc2hpZnQoMSk+Pj41JjMsTS5yZWFkX3NoaWZ0KDIpXX19LDU3OntuOiJQdGdOYW1lWCIsZjpmdW5jdGlvbiBBSShNLEYsTyl7cmV0dXJuIDU9PU8uYmlmZj9mdW5jdGlvbiBMSShNKXt2YXIgRj1N'@;
put 'LnJlYWRfc2hpZnQoMSk+Pj41JjMsTz1NLnJlYWRfc2hpZnQoMiwiaSIpO00ubCs9ODt2YXIgSj1NLnJlYWRfc2hpZnQoMik7cmV0dXJuIE0ubCs9MTIsW0YsTyxKXX0oTSk6W00ucmVhZF9zaGlmdCgxKT4+PjUmMyxNLnJlYWRfc2hpZnQoMiksTS5yZWFkX3NoaWZ0KDQpXX19LDU4OntuOiJQ'@;
put 'dGdSZWYzZCIsZjpmdW5jdGlvbiBGQyhNLEYsTyl7dmFyIEo9KDk2Jk1bTS5sXSk+PjU7TS5sKz0xO3ZhciBpZT1NLnJlYWRfc2hpZnQoMik7cmV0dXJuIE8mJjU9PU8uYmlmZiYmKE0ubCs9MTIpLFtKLGllLERDKE0sMCxPKV19fSw1OTp7bjoiUHRnQXJlYTNkIixmOmZ1bmN0aW9uIExDKE0s'@;
put 'RixPKXt2YXIgSj0oOTYmTVtNLmwrK10pPj41LGllPU0ucmVhZF9zaGlmdCgyLCJpIik7aWYoTyYmNT09PU8uYmlmZilNLmwrPTEyO3JldHVybltKLGllLHpfKE0sMCxPKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gYzUoTSxGLE8pe3ZhciBKPSg5NiZNW00ubCsrXSk+PjUs'@;
put 'aWU9TS5yZWFkX3NoaWZ0KDIpLHBlPTQ7aWYoTylzd2l0Y2goTy5iaWZmKXtjYXNlIDU6cGU9MTU7YnJlYWs7Y2FzZSAxMjpwZT02fXJldHVybiBNLmwrPXBlLFtKLGllXX19LDYxOntuOiJQdGdBcmVhRXJyM2QiLGY6ZnVuY3Rpb24gR1ooTSxGLE8pe3ZhciBKPSg5NiZNW00ubCsrXSk+PjUs'@;
put 'aWU9TS5yZWFkX3NoaWZ0KDIpLHBlPTg7aWYoTylzd2l0Y2goTy5iaWZmKXtjYXNlIDU6TS5sKz0xMixwZT02O2JyZWFrO2Nhc2UgMTI6cGU9MTJ9cmV0dXJuIE0ubCs9cGUsW0osaWVdfX0sMjU1Ont9fSxRXz17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6MzUsOTk6'@;
put 'MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcsODg6MzQs'@;
put 'MTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgTSBpbiBRXyl0OFtNXT10OFtRX1tNXV19KCk7dmFyIGV2PXsxOntuOiJQdGdFbGZMZWwiLGY6akN9LDI6e246IlB0Z0VsZlJ3'@;
put 'IixmOlhffSwzOntuOiJQdGdFbGZDb2wiLGY6UEl9LDY6e246IlB0Z0VsZlJ3ViIsZjpuV30sNzp7bjoiUHRnRWxmQ29sViIsZjpOSX0sMTA6e246IlB0Z0VsZlJhZGljYWwiLGY6S199LDExOntuOiJQdGdFbGZSYWRpY2FsUyIsZjp0V30sMTM6e246IlB0Z0VsZkNvbFMiLGY6Rkl9LDE1Ontu'@;
put 'OiJQdGdFbGZDb2xTViIsZjpISX0sMTY6e246IlB0Z0VsZlJhZGljYWxMZWwiLGY6ZVd9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIGlXKE0pe00ubCs9Mjt2YXIgRj1NLnJlYWRfc2hpZnQoMiksTz1NLnJlYWRfc2hpZnQoMiksSj1NLnJlYWRfc2hpZnQoNCksaWU9TS5yZWFkX3NoaWZ0'@;
put 'KDIpLHBlPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpGLGNvbHR5cGU6MyZPLHJ0OnJXW08+PjImMzFdLGlkeDpKLGM6aWUsQzpwZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIG9XKE0pe3JldHVybiBNLmwrPTIsW00ucmVhZF9zaGlmdCg0KV19fSwyNTU6e319LFQzPXsw'@;
put 'OntuOiJQdGdBdHRyTm9vcCIsZjpmdW5jdGlvbiBKXyhNKXtyZXR1cm4gTS5sKz00LFswLDBdfX0sMTp7bjoiUHRnQXR0clNlbWkiLGY6ZnVuY3Rpb24geUkoTSxGLE8pe3ZhciBKPTI1NSZNW00ubCsxXT8xOjA7cmV0dXJuIE0ubCs9TyYmMj09Ty5iaWZmPzM6NCxbSl19fSwyOntuOiJQdGdB'@;
put 'dHRySWYiLGY6ZnVuY3Rpb24gWFooTSxGLE8pe3ZhciBKPTI1NSZNW00ubCsxXT8xOjA7cmV0dXJuIE0ubCs9MixbSixNLnJlYWRfc2hpZnQoTyYmMj09Ty5iaWZmPzE6MildfX0sNDp7bjoiUHRnQXR0ckNob29zZSIsZjpmdW5jdGlvbiBXXyhNLEYsTyl7TS5sKz0yO2Zvcih2YXIgSj1NLnJl'@;
put 'YWRfc2hpZnQoTyYmMj09Ty5iaWZmPzE6MiksaWU9W10scGU9MDtwZTw9SjsrK3BlKWllLnB1c2goTS5yZWFkX3NoaWZ0KE8mJjI9PU8uYmlmZj8xOjIpKTtyZXR1cm4gaWV9fSw4OntuOiJQdGdBdHRyR290byIsZjpmdW5jdGlvbiBLWihNLEYsTyl7dmFyIEo9MjU1Jk1bTS5sKzFdPzE6MDty'@;
put 'ZXR1cm4gTS5sKz0yLFtKLE0ucmVhZF9zaGlmdChPJiYyPT1PLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiBKNihNLEYsTyl7TS5sKz1PJiYyPT1PLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gWl8oTSl7dmFyIEY9MSZNW00u'@;
put 'bCsxXTtyZXR1cm4gTS5sKz00LFtGLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBiSShNKXtyZXR1cm4gTS5yZWFkX3NoaWZ0KDIpLE9DKE0pfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gd0koTSl7cmV0dXJuIE0ucmVhZF9zaGlmdCgyKSxPQyhN'@;
put 'KX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gUkMoTSl7dmFyIEY9MjU1Jk1bTS5sKzFdPzE6MDtyZXR1cm4gTS5sKz0yLFtGLE0ucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIEQzKE0sRixPLEosaWUpe2lmKEouYmlmZjw4KXJldHVybiBGcyhNLEYpO2Zv'@;
put 'cih2YXIgcGU9TS5sK0YseWU9W10sdmU9MDt2ZSE9PU8ubGVuZ3RoOysrdmUpc3dpdGNoKE9bdmVdWzBdKXtjYXNlIlB0Z0FycmF5IjpPW3ZlXVsxXT1USShNLDAsSikseWUucHVzaChPW3ZlXVsxXSk7YnJlYWs7Y2FzZSJQdGdNZW1BcmVhIjpPW3ZlXVsyXT1OQyhNLDAsSikseWUucHVzaChP'@;
put 'W3ZlXVsyXSk7YnJlYWs7Y2FzZSJQdGdFeHAiOkomJjEyPT1KLmJpZmYmJihPW3ZlXVsxXVsxXT1NLnJlYWRfc2hpZnQoNCkseWUucHVzaChPW3ZlXVsxXSkpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6Y2FzZSJQdGdFbGZSYWRpY2FsUyI6Y2FzZSJQdGdFbGZDb2xTIjpjYXNlIlB0Z0VsZkNvbFNW'@;
put 'Ijp0aHJvdyJVbnN1cHBvcnRlZCAiK09bdmVdWzBdfXJldHVybiBGPXBlLU0ubCwhaWUmJjAhPT1GJiZ5ZS5wdXNoKEZzKE0sRikpLHllfWZ1bmN0aW9uIFcxKE0sRixPKXtmb3IodmFyIGllLHBlLEo9TS5sK0YseWU9W107SiE9TS5sOylGPUotTS5sLGllPXQ4W3BlPU1bTS5sXV0sKDI0PT09'@;
put 'cGV8fDI1PT09cGUpJiYoaWU9KDI0PT09cGU/ZXY6VDMpW01bTS5sKzFdXSksaWUmJmllLmY/eWUucHVzaChbaWUubixpZS5mKE0sRixPKV0pOkZzKE0sRik7cmV0dXJuIHllfWZ1bmN0aW9uIHcwKE0pe2Zvcih2YXIgRj1bXSxPPTA7TzxNLmxlbmd0aDsrK08pe2Zvcih2YXIgSj1NW09dLGll'@;
put 'PVtdLHBlPTA7cGU8Si5sZW5ndGg7KytwZSl7dmFyIHllPUpbcGVdO2llLnB1c2goeWU/Mj09PXllWzBdPyciJyt5ZVsxXS5yZXBsYWNlKC8iL2csJyIiJykrJyInOnllWzFdOiIiKX1GLnB1c2goaWUuam9pbigiLCIpKX1yZXR1cm4gRi5qb2luKCI7Iil9VDNbMzNdPVQzWzMyXTt2YXIgamg9'@;
put 'e1B0Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LEJDPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5'@;
put 'RkZGXHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBZQyhNLEYsTyl7aWYoIU0pcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihPLmJpZmY+OCYmKCFNLlhUSXx8IU0uWFRJW0ZdKSlyZXR1cm4gTS5TaGVldE5hbWVzW0ZdO2lmKCFNLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBKPU0uWFRJW0Zd'@;
put 'O2lmKE8uYmlmZjw4KXJldHVybiBGPjFlNCYmKEYtPTY1NTM2KSxGPDAmJihGPS1GKSwwPT1GPyIiOk0uWFRJW0YtMV07aWYoIUopcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgaWU9IiI7aWYoTy5iaWZmPjgpc3dpdGNoKE1bSlswXV1bMF0pe2Nhc2UgMzU3OnJldHVybiBpZT0tMT09SlsxXT8i'@;
put 'I1JFRiI6TS5TaGVldE5hbWVzW0pbMV1dLEpbMV09PUpbMl0/aWU6aWUrIjoiK00uU2hlZXROYW1lc1tKWzJdXTtjYXNlIDM1ODpyZXR1cm4gbnVsbCE9Ty5TSUQ/TS5TaGVldE5hbWVzW08uU0lEXToiU0gzM1RKU1NBTUUiK01bSlswXV1bMF07ZGVmYXVsdDpyZXR1cm4iU0gzM1RKU1NSQyIr'@;
put 'TVtKWzBdXVswXX1zd2l0Y2goTVtKWzBdXVswXVswXSl7Y2FzZSAxMDI1OnJldHVybiBpZT0tMT09SlsxXT8iI1JFRiI6TS5TaGVldE5hbWVzW0pbMV1dfHwiU0gzM1RKU0VSUjMiLEpbMV09PUpbMl0/aWU6aWUrIjoiK00uU2hlZXROYW1lc1tKWzJdXTtjYXNlIDE0ODQ5OnJldHVybiBNW0pb'@;
put 'MF1dLnNsaWNlKDEpLm1hcChmdW5jdGlvbihwZSl7cmV0dXJuIHBlLk5hbWV9KS5qb2luKCI7OyIpO2RlZmF1bHQ6cmV0dXJuIE1bSlswXV1bMF1bM10/KGllPS0xPT1KWzFdPyIjUkVGIjpNW0pbMF1dWzBdWzNdW0pbMV1dfHwiU0gzM1RKU0VSUjQiLEpbMV09PUpbMl0/aWU6aWUrIjoiK01b'@;
put 'SlswXV1bMF1bM11bSlsyXV0pOiJTSDMzVEpTRVJSMiJ9fWZ1bmN0aW9uIGpJKE0sRixPKXtyZXR1cm4gZnVuY3Rpb24gYVcoTSxGKXtpZighKE18fEYmJkYuYmlmZjw9NSYmRi5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdChN'@;
put 'KT9NOkJDLnRlc3QoTSk/IiciK00rIiciOk19KFlDKE0sRixPKSxPKX1mdW5jdGlvbiBudShNLEYsTyxKLGllLHBlKXt2YXIgamUsWWUscWUsa3QseWU9aWUmJmllLmJpZmZ8fDgsdmU9cGUmJm51bGwhPUY/Rjp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LE1lPVtdLGl0PTAsaHQ9MCx1dD0i'@;
put 'IjtpZighTVswXXx8IU1bMF1bMF0pcmV0dXJuIiI7Zm9yKHZhciB2dD0tMSxQdD0iIixEdD0wLEF0PU1bMF0ubGVuZ3RoO0R0PEF0OysrRHQpe3ZhciBadD1NWzBdW0R0XTtzd2l0Y2goWnRbMF0pe2Nhc2UiUHRnVW1pbnVzIjpNZS5wdXNoKCItIitNZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdV'@;
put 'cGx1cyI6TWUucHVzaCgiKyIrTWUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6TWUucHVzaChNZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRn'@;
put 'TGUiOmNhc2UiUHRnTHQiOmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoamU9TWUucG9wKCksWWU9TWUucG9wKCksdnQ+PTApe3N3aXRjaChNWzBdW3Z0XVsxXVswXSl7Y2FzZSAwOlB0PXZuKCIgIixNWzBdW3Z0XVsxXVsxXSk7YnJlYWs7'@;
put 'Y2FzZSAxOlB0PXZuKCJcciIsTVswXVt2dF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoUHQ9IiIsaWUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrTVswXVt2dF1bMV1bMF0pfVllKz1QdCx2dD0tMX1NZS5wdXNoKFllK2poW1p0WzBdXStqZSk7'@;
put 'YnJlYWs7Y2FzZSJQdGdJc2VjdCI6amU9TWUucG9wKCksWWU9TWUucG9wKCksTWUucHVzaChZZSsiICIramUpO2JyZWFrO2Nhc2UiUHRnVW5pb24iOmplPU1lLnBvcCgpLFllPU1lLnBvcCgpLE1lLnB1c2goWWUrIiwiK2plKTticmVhaztjYXNlIlB0Z1JhbmdlIjpqZT1NZS5wb3AoKSxZZT1N'@;
put 'ZS5wb3AoKSxNZS5wdXNoKFllKyI6IitqZSk7YnJlYWs7Y2FzZSJQdGdBdHRyQ2hvb3NlIjpjYXNlIlB0Z0F0dHJHb3RvIjpjYXNlIlB0Z0F0dHJJZiI6Y2FzZSJQdGdBdHRySWZFcnJvciI6Y2FzZSJQdGdBdHRyQmF4Y2VsIjpjYXNlIlB0Z0F0dHJTZW1pIjpjYXNlIlB0Z01lbUFyZWEiOmNh'@;
put 'c2UiUHRnVGJsIjpjYXNlIlB0Z01lbUVyciI6Y2FzZSJQdGdNZW1BcmVhTiI6Y2FzZSJQdGdNZW1Ob01lbU4iOmNhc2UiUHRnQXR0ck5vb3AiOmNhc2UiUHRnU2hlZXQiOmNhc2UiUHRnRW5kU2hlZXQiOmNhc2UiUHRnTWVtRnVuYyI6Y2FzZSJQdGdNZW1Ob01lbSI6YnJlYWs7Y2FzZSJQdGdS'@;
put 'ZWYiOnFlPWNsKFp0WzFdWzFdLHZlLGllKSxNZS5wdXNoKER1KHFlLHllKSk7YnJlYWs7Y2FzZSJQdGdSZWZOIjpxZT1PP2NsKFp0WzFdWzFdLE8saWUpOlp0WzFdWzFdLE1lLnB1c2goRHUocWUseWUpKTticmVhaztjYXNlIlB0Z1JlZjNkIjppdD1adFsxXVsxXSxxZT1jbChadFsxXVsyXSx2'@;
put 'ZSxpZSksdXQ9akkoSixpdCxpZSksTWUucHVzaCh1dCsiISIrRHUocWUseWUpKTticmVhaztjYXNlIlB0Z0Z1bmMiOmNhc2UiUHRnRnVuY1ZhciI6dmFyIHFuPVp0WzFdWzBdLHVuPVp0WzFdWzFdO3FufHwocW49MCk7dmFyIEpuPTA9PShxbiY9MTI3KT9bXTpNZS5zbGljZSgtcW4pO01lLmxl'@;
put 'bmd0aC09cW4sIlVzZXIiPT09dW4mJih1bj1Kbi5zaGlmdCgpKSxNZS5wdXNoKHVuKyIoIitKbi5qb2luKCIsIikrIikiKTticmVhaztjYXNlIlB0Z0Jvb2wiOk1lLnB1c2goWnRbMV0/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UiUHRnSW50IjpjYXNlIlB0Z051bSI6TWUucHVzaChTdHJp'@;
put 'bmcoWnRbMV0pKTticmVhaztjYXNlIlB0Z1N0ciI6TWUucHVzaCgnIicrWnRbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJyk7YnJlYWs7Y2FzZSJQdGdFcnIiOk1lLnB1c2goWnRbMV0pO2JyZWFrO2Nhc2UiUHRnQXJlYU4iOmt0PUVwKFp0WzFdWzFdLE8/e3M6T306dmUsaWUpLE1lLnB1c2go'@;
put 'azEoa3QsaWUpKTticmVhaztjYXNlIlB0Z0FyZWEiOmt0PUVwKFp0WzFdWzFdLHZlLGllKSxNZS5wdXNoKGsxKGt0LGllKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOml0PVp0WzFdWzFdLGt0PUVwKFp0WzFdWzJdLHZlLGllKSx1dD1qSShKLGl0LGllKSxNZS5wdXNoKHV0KyIhIitrMShrdCxp'@;
put 'ZSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6TWUucHVzaCgiU1VNKCIrTWUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBZbj0oSi5uYW1lc3x8W10pWyhodD1adFsxXVsyXSktMV18fChKWzBdfHxbXSlbaHRdLExuPVluP1luLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmco'@;
put 'aHQpO0xuIGluIG44JiYoTG49bjhbTG5dKSxNZS5wdXNoKExuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgcnIsdHI9WnRbMV1bMV07aWYoaHQ9WnRbMV1bMl0sIShpZS5iaWZmPD01KSl7dmFyIFVuPSIiO2lmKDE0ODQ5PT0oKEpbdHJdfHxbXSlbMF18fFtdKVswXXx8KDEwMjU9PSgoSlt0'@;
put 'cl18fFtdKVswXXx8W10pWzBdP0pbdHJdW2h0XSYmSlt0cl1baHRdLml0YWI+MCYmKFVuPUouU2hlZXROYW1lc1tKW3RyXVtodF0uaXRhYi0xXSsiISIpOlVuPUouU2hlZXROYW1lc1todC0xXSsiISIpLEpbdHJdJiZKW3RyXVtodF0pVW4rPUpbdHJdW2h0XS5OYW1lO2Vsc2UgaWYoSlswXSYm'@;
put 'SlswXVtodF0pVW4rPUpbMF1baHRdLk5hbWU7ZWxzZXt2YXIgcGk9KFlDKEosdHIsaWUpfHwiIikuc3BsaXQoIjs7Iik7cGlbaHQtMV0/VW49cGlbaHQtMV06VW4rPSJTSDMzVEpTRVJSWCJ9TWUucHVzaChVbik7YnJlYWt9dHI8MCYmKHRyPS10ciksSlt0cl0mJihycj1KW3RyXVtodF0pLHJy'@;
put 'fHwocnI9e05hbWU6IlNIMzNUSlNFUlJZIn0pLE1lLnB1c2gocnIuTmFtZSk7YnJlYWs7Y2FzZSJQdGdQYXJlbiI6dmFyIE9pPSIoIixOaT0iKSI7aWYodnQ+PTApe3N3aXRjaChQdD0iIixNWzBdW3Z0XVsxXVswXSl7Y2FzZSAyOk9pPXZuKCIgIixNWzBdW3Z0XVsxXVsxXSkrT2k7YnJlYWs7'@;
put 'Y2FzZSAzOk9pPXZuKCJcciIsTVswXVt2dF1bMV1bMV0pK09pO2JyZWFrO2Nhc2UgNDpOaT12bigiICIsTVswXVt2dF1bMV1bMV0pK05pO2JyZWFrO2Nhc2UgNTpOaT12bigiXHIiLE1bMF1bdnRdWzFdWzFdKStOaTticmVhaztkZWZhdWx0OmlmKGllLldURil0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'ZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK01bMF1bdnRdWzFdWzBdKX12dD0tMX1NZS5wdXNoKE9pK01lLnBvcCgpK05pKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6TWUucHVzaCgiI1JFRiEi'@;
put 'KTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIF9yPXtjOk8uYyxyOk8ucn07aWYoSi5zaGFyZWRmW0RpKHFlPXtjOlp0WzFdWzFdLHI6WnRbMV1bMF19KV0pe3ZhciBBbj1KLnNoYXJlZGZbRGkocWUpXTtNZS5wdXNoKG51KEFuLHZlLF9yLEosaWUpKX1lbHNle3ZhciBNcj0hMTtmb3IoamU9MDtq'@;
put 'ZSE9Si5hcnJheWYubGVuZ3RoOysramUpaWYoIShxZS5jPChZZT1KLmFycmF5ZltqZV0pWzBdLnMuY3x8cWUuYz5ZZVswXS5lLmN8fHFlLnI8WWVbMF0ucy5yfHxxZS5yPlllWzBdLmUucikpe01lLnB1c2gobnUoWWVbMV0sdmUsX3IsSixpZSkpLE1yPSEwO2JyZWFrfU1yfHxNZS5wdXNoKFp0'@;
put 'WzFdKX1icmVhaztjYXNlIlB0Z0FycmF5IjpNZS5wdXNoKCJ7Iit3MChadFsxXSkrIn0iKTticmVhaztjYXNlIlB0Z0F0dHJTcGFjZSI6Y2FzZSJQdGdBdHRyU3BhY2VTZW1pIjp2dD1EdDticmVhaztjYXNlIlB0Z01pc3NBcmciOk1lLnB1c2goIiIpO2JyZWFrO2Nhc2UiUHRnTGlzdCI6TWUu'@;
put 'cHVzaCgiVGFibGUiK1p0WzFdLmlkeCsiWyMiK1p0WzFdLnJ0KyJdIik7YnJlYWs7Y2FzZSJQdGdFbGZDb2wiOmNhc2UiUHRnRWxmQ29sUyI6Y2FzZSJQdGdFbGZDb2xTViI6Y2FzZSJQdGdFbGZDb2xWIjpjYXNlIlB0Z0VsZkxlbCI6Y2FzZSJQdGdFbGZSYWRpY2FsIjpjYXNlIlB0Z0VsZlJh'@;
put 'ZGljYWxMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbFMiOmNhc2UiUHRnRWxmUnciOmNhc2UiUHRnRWxmUndWIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVMRnMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEZvcm11bGEgVG9rZW46ICIrU3RyaW5nKFp0KSl9'@;
put 'aWYoMyE9aWUuYmlmZiYmdnQ+PTAmJi0xPT1bIlB0Z0F0dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoTVswXVtEdF1bMF0pKXt2YXIgVG49ITA7c3dpdGNoKChadD1NWzBdW3Z0XSlbMV1bMF0pe2Nhc2UgNDpUbj0hMTtjYXNlIDA6UHQ9dm4oIiAi'@;
put 'LFp0WzFdWzFdKTticmVhaztjYXNlIDU6VG49ITE7Y2FzZSAxOlB0PXZuKCJcciIsWnRbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoUHQ9IiIsaWUuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBQdGdBdHRyU3BhY2VUeXBlICIrWnRbMV1bMF0pfU1lLnB1c2goKFRuP1B0OiIiKStN'@;
put 'ZS5wb3AoKSsoVG4/IiI6UHQpKSx2dD0tMX19aWYoTWUubGVuZ3RoPjEmJmllLldURil0aHJvdyBuZXcgRXJyb3IoImJhZCBmb3JtdWxhIHN0YWNrIik7cmV0dXJuIE1lWzBdfWZ1bmN0aW9uIHpDKE0sRixPKXt2YXIgcGUsSj1NLmwrRixpZT0yPT1PLmJpZmY/MToyLHllPU0ucmVhZF9zaGlm'@;
put 'dChpZSk7aWYoNjU1MzU9PXllKXJldHVybltbXSxGcyhNLEYtMildO3ZhciB2ZT1XMShNLHllLE8pO3JldHVybiBGIT09eWUraWUmJihwZT1EMyhNLEYteWUtaWUsdmUsTykpLE0ubD1KLFt2ZSxwZV19ZnVuY3Rpb24gRzIoTSxGLE8pe3ZhciBpZSxKPU0ubCtGLHBlPU0ucmVhZF9zaGlmdCgy'@;
put 'KSx5ZT1XMShNLHBlLE8pO3JldHVybiA2NTUzNT09cGU/W1tdLEZzKE0sRi0yKV06KEYhPT1wZSsyJiYoaWU9RDMoTSxKLXBlLTIseWUsTykpLFt5ZSxpZV0pfWZ1bmN0aW9uIHJ2KE0sRixPKXt2YXIgSj1NLmwrRixpZT1QYyhNKTsyPT1PLmJpZmYmJisrTS5sO3ZhciBwZT1mdW5jdGlvbiB0'@;
put 'dihNKXt2YXIgRjtpZig2NTUzNSE9PVJjKE0sTS5sKzYpKXJldHVybltoYShNKSwibiJdO3N3aXRjaChNW00ubF0pe2Nhc2UgMDpyZXR1cm4gTS5sKz04LFsiU3RyaW5nIiwicyJdO2Nhc2UgMTpyZXR1cm4gRj0xPT09TVtNLmwrMl0sTS5sKz04LFtGLCJiIl07Y2FzZSAyOnJldHVybiBGPU1b'@;
put 'TS5sKzJdLE0ubCs9OCxbRiwiZSJdO2Nhc2UgMzpyZXR1cm4gTS5sKz04LFsiIiwicyJdfXJldHVybltdfShNKSx5ZT1NLnJlYWRfc2hpZnQoMSk7MiE9Ty5iaWZmJiYoTS5yZWFkX3NoaWZ0KDEpLE8uYmlmZj49NSYmTS5yZWFkX3NoaWZ0KDQpKTt2YXIgdmU9ZnVuY3Rpb24gVUMoTSxGLE8p'@;
put 'e3ZhciBwZSxKPU0ubCtGLGllPTI9PU8uYmlmZj8xOjIseWU9TS5yZWFkX3NoaWZ0KGllKTtpZig2NTUzNT09eWUpcmV0dXJuW1tdLEZzKE0sRi0yKV07dmFyIHZlPVcxKE0seWUsTyk7cmV0dXJuIEYhPT15ZStpZSYmKHBlPUQzKE0sRi15ZS1pZSx2ZSxPKSksTS5sPUosW3ZlLHBlXX0oTSxK'@;
put 'LU0ubCxPKTtyZXR1cm57Y2VsbDppZSx2YWw6cGVbMF0sZm9ybXVsYTp2ZSxzaGFyZWQ6eWU+PjMmMSx0dDpwZVsxXX19ZnVuY3Rpb24gQTMoTSxGLE8pe3ZhciBKPU0ucmVhZF9zaGlmdCg0KSxpZT1XMShNLEosTykscGU9TS5yZWFkX3NoaWZ0KDQpO3JldHVybltpZSxwZT4wP0QzKE0scGUs'@;
put 'aWUsTywhMCk6bnVsbF19dmFyIGl2PUEzLEwzPUEzLFdDPUEzLEJJPWZ1bmN0aW9uIFpDKE0sRixPKXt2YXIgSj1NLnJlYWRfc2hpZnQoNCksaWU9TS5yZWFkX3NoaWZ0KDQpLHBlPVcxKE0sSixPKTtyZXR1cm5bcGUsaWU+MD9EMyhNLGllLHBlLE8sITApOm51bGxdfSxHQz1BMyxZST1BMztm'@;
put 'dW5jdGlvbiBvdihNKXtpZigoMHxNKT09TSYmTTxNYXRoLnBvdygyLDE2KSYmTT49MCl7dmFyIEY9Z3IoMTEpO3JldHVybiBGLndyaXRlX3NoaWZ0KDQsMyksRi53cml0ZV9zaGlmdCgxLDMwKSxGLndyaXRlX3NoaWZ0KDIsTSksRi53cml0ZV9zaGlmdCg0LDApLEZ9dmFyIE89Z3IoMTcpO3Jl'@;
put 'dHVybiBPLndyaXRlX3NoaWZ0KDQsMTEpLE8ud3JpdGVfc2hpZnQoMSwzMSksTy53cml0ZV9zaGlmdCg4LE0pLE8ud3JpdGVfc2hpZnQoNCwwKSxPfWZ1bmN0aW9uIHN2KE0pe3ZhciBGPWdyKDcpO0Yud3JpdGVfc2hpZnQoNCwzKzIqTS5sZW5ndGgpLEYud3JpdGVfc2hpZnQoMSwyMyksRi53'@;
put 'cml0ZV9zaGlmdCgyLE0ubGVuZ3RoKTt2YXIgTz1ncigyKk0ubGVuZ3RoKTtPLndyaXRlX3NoaWZ0KDIqTS5sZW5ndGgsTSwidXRmMTZsZSIpO3ZhciBKPWdyKDQpO3JldHVybiBKLndyaXRlX3NoaWZ0KDQsMCkseChbRixPLEpdKX1mdW5jdGlvbiBJMyhNKXtpZihNLm1hdGNoKC9eIyhESVZc'@;
put 'LzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQvKSlyZXR1cm4gZnVuY3Rpb24gekkoTSl7dmFyIEY9Z3IoMTApO3JldHVybiBGLndyaXRlX3NoaWZ0KDQsMiksRi53cml0ZV9zaGlmdCgxLDI4KSxGLndyaXRlX3NoaWZ0KDEsTSksRi53cml0ZV9z'@;
put 'aGlmdCg0LDApLEZ9KCtnMFtNXSk7aWYoTS5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxk'@;
put 'ezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiB1NShNKXt2YXIgRj1ocyhNKSxPPWdyKDE1KTtyZXR1cm4gTy53cml0ZV9zaGlmdCg0LDcpLE8ud3JpdGVfc2hpZnQoMSwzNiksTy53cml0ZV9zaGlmdCg0LEYuciksTy53cml0ZV9zaGlmdCgyLEYuY3woIiQiPT1NLmNoYXJBdCgwKT8wOjEpPDwx'@;
put 'NHwoTS5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxPLndyaXRlX3NoaWZ0KDQsMCksT30oTSk7aWYoTS5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIHN2KE0pO3Rocm93IkZvcm11bGEgfCIrTSsifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgYXY9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9Q'@;
put 'RU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5ERUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwx'@;
put 'NDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQuUFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNU'@;
put 'LkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5OT1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQi'@;
put 'LDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFMSUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIs'@;
put 'NTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5TRVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToi'@;
put 'U0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFSRUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElP'@;
put 'TiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3NzoiU0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0'@;
put 'OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0Ui'@;
put 'LDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElW'@;
put 'QVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwx'@;
put 'MTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2'@;
put 'OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIs'@;
put 'MTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9OLldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIs'@;
put 'MTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldBSVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFU'@;
put 'VVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9XLlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoi'@;
put 'QVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5NQVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5E'@;
put 'IiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIsMTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJH'@;
put 'QUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JLR1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVD'@;
put 'VC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJTSEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwy'@;
put 'MTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJFLlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJ'@;
put 'TiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJRVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9Q'@;
put 'VElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFU'@;
put 'LlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdBTExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1Qi'@;
put 'LDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQUREIiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJE'@;
put 'RUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRP'@;
put 'T0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5BUklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5T'@;
put 'VU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9QRVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIs'@;
put 'MzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRPUiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklU'@;
put 'SU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlMLkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElF'@;
put 'UyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1B'@;
put 'SUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVSIiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JP'@;
put 'T0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwzODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VU'@;
put 'TElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFMTCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0'@;
put 'MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5UQUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQu'@;
put 'VE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJ'@;
put 'Vk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJFTC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4u'@;
put 'VEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVOQUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFS'@;
put 'Lk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6'@;
put 'Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNFUklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVS'@;
put 'Iiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAuQUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFS'@;
put 'WS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVOQUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToi'@;
put 'QVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJWSUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9O'@;
put 'TyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5QUklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1'@;
put 'NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5PVEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjcz'@;
put 'OiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5TUEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LCRDPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6'@;
put 'IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExBUiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJ'@;
put 'TlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJFUFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIs'@;
put 'NDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIiLDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6'@;
put 'IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNF'@;
put 'Q09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJPRkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hP'@;
put 'Iiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDkyOiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NF'@;
put 'IiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIsMTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJV'@;
put 'UFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIsMTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNF'@;
put 'UlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIsMTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwx'@;
put 'NDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFE'@;
put 'RC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNIRUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2'@;
put 'MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNFIiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsi'@;
put 'LDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6'@;
put 'IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJU'@;
put 'UlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwyMDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjEx'@;
put 'OiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJEQkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZP'@;
put 'Ui5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoiQ09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVS'@;
put 'Uk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVMQS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6'@;
put 'IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRFLlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwy'@;
put 'NjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFE'@;
put 'SVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoiQ0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6'@;
put 'IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJHQU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6'@;
put 'Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5WIiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIi'@;
put 'LDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIiLDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBS'@;
put 'T0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNRIiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwz'@;
put 'MzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5EIiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxE'@;
put 'IiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwz'@;
put 'NTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoiUk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYx'@;
put 'OiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJWQVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhB'@;
put 'SU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIsMzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJF'@;
put 'UiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5'@;
put 'MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIsMzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lO'@;
put 'Iiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05KVUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIs'@;
put 'NDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VM'@;
put 'SSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQiLDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRC'@;
put 'SUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoiRE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6'@;
put 'IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBOQ0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIs'@;
put 'NDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJBTU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZ'@;
put 'UyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURVTEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdF'@;
put 'SUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LFVJPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEsMTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0'@;
put 'NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEsNjk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMs'@;
put 'MTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIsMTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQz'@;
put 'OjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIs'@;
put 'MjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEsMjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0'@;
put 'OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkzOjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIs'@;
put 'MzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIsMzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0'@;
put 'OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIs'@;
put 'NDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMsNDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sbjg9eyJf'@;
put 'eGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdBVEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJB'@;
put 'U0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5JTlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJC'@;
put 'SU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJCSVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJ'@;
put 'TElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwiX3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNR'@;
put 'LklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNUIiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNF'@;
put 'LlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09USCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5D'@;
put 'U0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hsZm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNF'@;
put 'IjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxmbi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVT'@;
put 'VCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09SLk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5F'@;
put 'VFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6'@;
put 'IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJfeGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1N'@;
put 'QUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNUIjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZu'@;
put 'LklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoiSU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZP'@;
put 'Uk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwiX3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFY'@;
put 'SUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxUIjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4u'@;
put 'TkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5O'@;
put 'T1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFMVUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklO'@;
put 'QyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBFUkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBP'@;
put 'SVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZuLlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJB'@;
put 'TksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNIIjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZu'@;
put 'LlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJVENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYi'@;
put 'OiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJULlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJf'@;
put 'eGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJfeGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1Qi'@;
put 'fTtmdW5jdGlvbiBsdihNKXtyZXR1cm4ib2Y6Ij09TS5zbGljZSgwLDMpJiYoTT1NLnNsaWNlKDMpKSw2MT09TS5jaGFyQ29kZUF0KDApJiY2MT09KE09TS5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKE09TS5zbGljZSgxKSksKE09KE09KE09TS5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwu'@;
put 'L2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05XSspPylcXS9nLGZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8ucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIp'@;
put 'LnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBSMyhNKXtyZXR1cm4oIm9mOj0iK00ucmVwbGFjZShQZCwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gcjgoTSl7dmFyIEY9TS5zcGxp'@;
put 'dCgiOiIpO3JldHVybltGWzBdLnNwbGl0KCIuIilbMF0sRlswXS5zcGxpdCgiLiIpWzFdKyhGLmxlbmd0aD4xPyI6IisoRlsxXS5zcGxpdCgiLiIpWzFdfHxGWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gcUMoTSl7cmV0dXJuIE0ucmVwbGFjZSgvXC4vLCIhIil9dmFyIGQ1PXt9'@;
put 'LGg1PXt9O19vLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3Zh'@;
put 'ciAkMj10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBjdihNLEYsTyxKKXt2YXIgaWU9MCxwZT1NLmxlbmd0aDtpZihKKXtpZigkMj9KLmhhcyhGKTpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixGKSlmb3IodmFyIHllPSQyP0ouZ2V0KEYpOkpbRl07aWU8eWUubGVuZ3Ro'@;
put 'OysraWUpaWYoTVt5ZVtpZV1dLnQ9PT1GJiYoIU1beWVbaWVdXS5yJiYhT3x8TVt5ZVtpZV1dLnI9PU8pKXJldHVybiBNLkNvdW50KysseWVbaWVdfWVsc2UgZm9yKDtpZTxwZTsrK2llKWlmKE1baWVdLnQ9PT1GJiYoIU1baWVdLnImJiFPfHxNW2llXS5yPT1PKSlyZXR1cm4gTS5Db3VudCsr'@;
put 'LGllO3JldHVybiBNW3BlXT17dDpGLHI6T30sTS5Db3VudCsrLE0uVW5pcXVlKyssSiYmKCQyPyhKLmhhcyhGKXx8Si5zZXQoRixbXSksSi5nZXQoRikucHVzaChwZSkpOihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSixGKXx8KEpbRl09W10pLEpbRl0ucHVzaChwZSkp'@;
put 'KSxwZX1mdW5jdGlvbiBmNShNLEYpe3ZhciBPPXttaW46TSsxLG1heDpNKzF9LEo9SGw7aWYoIUYpcmV0dXJuIEY7dmFyIGllPS0xO3JldHVybiBGLmF1dG8mJihPLmJlc3RGaXQ9MSxGLmJlc3R3aWR0aCYmKGllPUYuYmVzdHdpZHRoKSxkZWxldGUgRi5iZXN0d2lkdGgpLG51bGwhPUYud3B4'@;
put 'P2llPUtwKEYud3B4KTpudWxsIT1GLndjaD9pZT1GLndjaDpudWxsIT1GLndpZHRoJiYoTy5jdXN0b21XaWR0aD0xKSxpZT4tMT8oTy53aWR0aD1QaChpZSksTy5jdXN0b21XaWR0aD0xKTpudWxsIT1GLndpZHRoJiYoTy53aWR0aD1GLndpZHRoKSxGLmhpZGRlbiYmKE8uaGlkZGVuPSEwKSxP'@;
put 'LmJlc3RGaXQmJmRlbGV0ZSBPLmN1c3RvbVdpZHRoLEhsPUosbnVsbCE9Ri5sZXZlbCYmKE8ub3V0bGluZUxldmVsPU8ubGV2ZWw9Ri5sZXZlbCksbnVsbCE9Ri5zdHlsZSYmKE8uc3R5bGU9Ri5zdHlsZSksT31mdW5jdGlvbiB1dihNLEYsTyl7dmFyIEo9SHMoTVsiIXJlZiJdKSxpZT0wLHBl'@;
put 'PU1bIiFtZXJnZXMiXXx8W10seWU9QXJyYXkuaXNBcnJheShNKTtlOmZvcih2YXIgdmU9MDt2ZTw9Si5lLnI7Kyt2ZSl7Zm9yKHZhciBNZT0wO01lPHBlLmxlbmd0aDsrK01lKWlmKHBlW01lXS5zLnI8PXZlJiZ2ZTw9cGVbTWVdLmUuciYmcGVbTWVdLnMuYzw9TyYmTzw9cGVbTWVdLmUuYylj'@;
put 'b250aW51ZSBlO3ZhciBqZT15ZT8oTVt2ZV18fFtdKVtPXTpNW0RpKHtyOnZlLGM6T30pXTtpZihqZSl7dmFyIFllPTE7aWYoamUucyYmKFllPUNfKGplLnMpL01fLkNhbGlicmlbMTJdfHwxKSxqZS53KWllPU1hdGgubWF4KGllLGplLncubGVuZ3RoKlllKTtlbHNlIHN3aXRjaChqZS50KXtj'@;
put 'YXNlImIiOmNhc2UiZSI6aWU9TWF0aC5tYXgoaWUsNSpZZSk7YnJlYWs7Y2FzZSJzIjppZT1NYXRoLm1heChpZSxqZS52Lmxlbmd0aCpZZSoxLjJ8MCk7YnJlYWs7Y2FzZSJuIjpFMihqZSxqZS52KSxpZT1NYXRoLm1heChpZSxTdHJpbmcoamUud3x8amUudikubGVuZ3RoKlllKTticmVhaztj'@;
put 'YXNlImQiOmllPU1hdGgubWF4KGllLDgqWWUpfX19aWU8MSYmKGllPTEpLEYuYmVzdHdpZHRoPWllfWZ1bmN0aW9uIHEyKE0sRil7aWYoTSl7dmFyIE89Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09RiYmKE89WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1NLmxlZnQmJihNLmxlZnQ9T1sw'@;
put 'XSksbnVsbD09TS5yaWdodCYmKE0ucmlnaHQ9T1sxXSksbnVsbD09TS50b3AmJihNLnRvcD1PWzJdKSxudWxsPT1NLmJvdHRvbSYmKE0uYm90dG9tPU9bM10pLG51bGw9PU0uaGVhZGVyJiYoTS5oZWFkZXI9T1s0XSksbnVsbD09TS5mb290ZXImJihNLmZvb3Rlcj1PWzVdKX19ZnVuY3Rpb24g'@;
put 'aHYoTSxGKXtmb3IodmFyIE89YXQoRiksSj0wO0o8TS5sZW5ndGg7KytKKXt2YXIgaWU9ITAscGU9TVtKXTtpZihwZSYmTy5sZW5ndGg9PWF0KHBlKS5sZW5ndGgmJihPLmZvckVhY2goZnVuY3Rpb24oeWUpe2lmKGllKXtpZihudWxsPT09Rlt5ZV0hPShudWxsPT09cGVbeWVdKSlyZXR1cm4g'@;
put 'dm9pZChpZT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBGW3llXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKHllKT4tMSl7aWYoVTEoRlt5ZV0scGVbeWVdKSlyZXR1cm4gdm9pZChpZT0hMSl9ZWxzZXtpZighKFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9t'@;
put 'Il0uaW5kZXhPZih5ZSk+LTEpKXJldHVybiB2b2lkKGllPSExKTtpZihXTShGW3llXSxwZVt5ZV0pKXJldHVybiB2b2lkKGllPSExKX1pZihGW3llXSE9cGVbeWVdKXJldHVybiB2b2lkKGllPSExKX19KSxpZSkpcmV0dXJuIEp9cmV0dXJuIE1bTS5sZW5ndGhdPVh0KEYpLE0ubGVuZ3RoLTF9'@;
put 'ZnVuY3Rpb24gcnUoTSxGLE8sSil7dmFyIGllPUoucmV2c3NmW251bGwhPU8uej9PLno6IkdlbmVyYWwiXSxwZT02MCx5ZT1NLmxlbmd0aDtpZihudWxsPT1pZSYmSi5zc2YpZm9yKDtwZTwzOTI7KytwZSlpZihudWxsPT1KLnNzZltwZV0pe0MubG9hZChPLnoscGUpLEouc3NmW3BlXT1PLnos'@;
put 'Si5yZXZzc2ZbTy56XT1pZT1wZTticmVha312YXIgdmU9MCxNZT0wLGplPTAsWWU9MDtpZihKLmNlbGxTdHlsZXMpe2lmKE8ucyl7aWYoSi5Gb250cyl7Ty5zLmNvbG9yfHwoTy5zLmNvbG9yPXt0aGVtZToxLHJnYjoiMDAwMDAwIn0pO2Zvcih2YXIgcWU9KE8ucy5ib2xkPzE6MCl8KE8ucy5p'@;
put 'dGFsaWM/MjowKXwoTy5zLnN0cmlrZT80OjApfChPLnMuc2hhZG93Pzg6MCk7dmU8Si5Gb250cy5sZW5ndGg7Kyt2ZSl7dmFyIGl0PUouRm9udHNbdmVdO2lmKG51bGw9PWl0LmZvbnRoYXNoJiYoaXQuZm9udGhhc2g9KGl0LmJvbGQ/MTowKXwoaXQuaXRhbGljPzI6MCl8KGl0LnN0cmlrZT80'@;
put 'OjApfChpdC5zaGFkb3c/ODowKSksIShxZSE9aXQuZm9udGhhc2h8fCEhTy5zLmNvbG9yIT0hIWl0LmNvbG9yfHxPLnMudmFsaWduIT1pdC52YWxpZ258fChPLnMuc3p8fGl0LnN6KSYmKE8ucy5zenx8MTIpIT0oaXQuc3p8fDEyKXx8Ty5zLm5hbWUmJk8ucy5uYW1lIT1pdC5uYW1lfHwoTy5z'@;
put 'LnVuZGVybGluZXx8MCkhPShpdC51bmRlcmxpbmV8fDApfHxPLnMuY29sb3ImJlUxKE8ucy5jb2xvcixpdC5jb2xvcikpKWJyZWFrfXZlPT1KLkZvbnRzLmxlbmd0aCYmKEouRm9udHMucHVzaCh7c3o6Ty5zLnN6fHwxMixjb2xvcjpPLnMuY29sb3J8fHt0aGVtZToxLHJnYjoiMDAwMDAwIn0s'@;
put 'bmFtZTpPLnMubmFtZXx8IkNhbGlicmkiLGZhbWlseTpPLnMuZmFtaWx5fHwyLHNjaGVtZTpPLnMuc2NoZW1lLGJvbGQ6Ty5zLmJvbGQsaXRhbGljOk8ucy5pdGFsaWMsc3RyaWtlOk8ucy5zdHJpa2Usc2hhZG93Ok8ucy5zaGFkb3csdmFsaWduOk8ucy52YWxpZ24sdW5kZXJsaW5lOk8ucy51'@;
put 'bmRlcmxpbmV9KSwxPT1KLkZvbnRzLmxlbmd0aCYmeTMoSi5Gb250c1swXSkpfWlmKEouRmlsbHMpe2Zvcig7TWU8Si5GaWxscy5sZW5ndGg7KytNZSl7dmFyIGh0PUouRmlsbHNbTWVdO2lmKCEhTy5zLnN0b3BzPT0hIWh0LnN0b3BzKXtpZihPLnMuc3RvcHMpe2lmKE8ucy5hbmdsZSE9aHQu'@;
put 'YW5nbGUpY29udGludWU7dmFyIGt0PSEwO2lmKE8ucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKER0LEF0KXtVMShEdCxodC5zdG9wc1tBdF0pJiYoa3Q9ITEpLER0LnYhPWh0LnN0b3BzW0F0XS52JiYoa3Q9ITEpfSksIWt0KWNvbnRpbnVlfWVsc2V7aWYobnVsbD09Ty5zLnBhdHRlcm5UeXBl'@;
put 'JiZPLnMuZmdDb2xvciYmKE8ucy5wYXR0ZXJuVHlwZT0ic29saWQiKSxudWxsPT1PLnMucGF0dGVyblR5cGUpYnJlYWs7aWYoTy5zLnBhdHRlcm5UeXBlIT1odC5wYXR0ZXJuVHlwZXx8VTEoTy5zLmZnQ29sb3IsaHQuZmdDb2xvcil8fFUxKE8ucy5iZ0NvbG9yLGh0LmJnQ29sb3IpKWNvbnRp'@;
put 'bnVlfWJyZWFrfX1pZihNZT09Si5GaWxscy5sZW5ndGgpe3ZhciB1dD17fTtPLnMuc3RvcHM/KG51bGwhPU8ucy5hbmdsZSYmKHV0LmFuZ2xlPU8ucy5hbmdsZSksdXQuc3RvcHM9W10sTy5zLnN0b3BzLmZvckVhY2goZnVuY3Rpb24oRHQpe3V0LnN0b3BzLnB1c2goWHQoRHQpKX0pKTp1dD17'@;
put 'cGF0dGVyblR5cGU6Ty5zLnBhdHRlcm5UeXBlLGZnQ29sb3I6Ty5zLmZnQ29sb3IsYmdDb2xvcjpPLnMuYmdDb2xvcn0sSi5GaWxscy5wdXNoKHV0KX19aWYoSi5Cb3JkZXJzKXtmb3IoO2plPEouQm9yZGVycy5sZW5ndGg7KytqZSl7dmFyIHZ0PUouQm9yZGVyc1tqZV0sUHQ9InRvcCI7aWYo'@;
put 'Ty5zW1B0XSl7aWYoIXZ0W1B0XXx8Ty5zW1B0XS5zdHlsZSE9dnRbUHRdLnN0eWxlfHxVMShPLnNbUHRdLmNvbG9yLHZ0W1B0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT12dFtQdF0pY29udGludWU7aWYoTy5zW1B0PSJib3R0b20iXSl7aWYoIXZ0W1B0XXx8Ty5zW1B0XS5zdHls'@;
put 'ZSE9dnRbUHRdLnN0eWxlfHxVMShPLnNbUHRdLmNvbG9yLHZ0W1B0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxsIT12dFtQdF0pY29udGludWU7aWYoTy5zW1B0PSJsZWZ0Il0pe2lmKCF2dFtQdF18fE8uc1tQdF0uc3R5bGUhPXZ0W1B0XS5zdHlsZXx8VTEoTy5zW1B0XS5jb2xvcix2'@;
put 'dFtQdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9dnRbUHRdKWNvbnRpbnVlO2lmKE8uc1tQdD0icmlnaHQiXSl7aWYoIXZ0W1B0XXx8Ty5zW1B0XS5zdHlsZSE9dnRbUHRdLnN0eWxlfHxVMShPLnNbUHRdLmNvbG9yLHZ0W1B0XS5jb2xvcikpY29udGludWV9ZWxzZSBpZihudWxs'@;
put 'IT12dFtQdF0pY29udGludWU7YnJlYWt9amU9PUouQm9yZGVycy5sZW5ndGgmJkouQm9yZGVycy5wdXNoKHt0b3A6Ty5zLnRvcCYmWHQoTy5zLnRvcCl8fHZvaWQgMCxib3R0b206Ty5zLmJvdHRvbSYmWHQoTy5zLmJvdHRvbSl8fHZvaWQgMCxsZWZ0Ok8ucy5sZWZ0JiZYdChPLnMubGVmdCl8'@;
put 'fHZvaWQgMCxyaWdodDpPLnMucmlnaHQmJlh0KE8ucy5yaWdodCl8fHZvaWQgMH0pfWlmKEYmJk8ucy5zdHlsZSYmIk5vcm1hbCIhPT1PLnMuc3R5bGUpe2ZvcihZZT0xO1llPEYubGVuZ3RoJiZGW1llXS5uYW1lIT1PLnMuc3R5bGU7KytZZSk7WWU9PUYubGVuZ3RoJiZGLnB1c2goe25hbWU6'@;
put 'Ty5zLnN0eWxlLG51bUZtdElkOmllLGZvbnRJZDp2ZSxmaWxsSWQ6TWUsYm9yZGVySWQ6amV9KX19Zm9yKHBlPTA7cGUhPXllOysrcGUpaWYoTVtwZV0ubnVtRm10SWQ9PWllJiZNW3BlXS5mb250SWQ9PXZlJiZNW3BlXS5maWxsSWQ9PU1lJiZNW3BlXS5ib3JkZXJJZD09amUmJk1bcGVdLnhm'@;
put 'SWQ9PVllKXtpZihPLnMmJk8ucy5hbGlnbm1lbnQpe2lmKCFNW3BlXS5hbGlnbm1lbnQpY29udGludWU7aWYoTy5zLmFsaWdubWVudC5ob3Jpem9udGFsIT1NW3BlXS5hbGlnbm1lbnQuaG9yaXpvbnRhbHx8Ty5zLmFsaWdubWVudC52ZXJ0aWNhbCE9TVtwZV0uYWxpZ25tZW50LnZlcnRpY2Fs'@;
put 'fHxPLnMuYWxpZ25tZW50LndyYXBUZXh0IT1NW3BlXS5hbGlnbm1lbnQud3JhcFRleHR8fE8ucy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQhPU1bcGVdLmFsaWdubWVudC5zaHJpbmtUb0ZpdHx8Ty5zLmFsaWdubWVudC50ZXh0Um90YXRpb24hPU1bcGVdLmFsaWdubWVudC50ZXh0Um90YXRpb258'@;
put 'fE8ucy5hbGlnbm1lbnQuaW5kZW50IT1NW3BlXS5hbGlnbm1lbnQuaW5kZW50KWNvbnRpbnVlfWVsc2UgaWYoTVtwZV0uYWxpZ25tZW50KWNvbnRpbnVlO2lmKE8ucyl7aWYoISFPLnMuaGlkZGVuPT0oIU1bcGVdLnByb3RlY3Rpb258fCFNW3BlXS5wcm90ZWN0aW9uLmhpZGRlbil8fCEhTy5z'@;
put 'LmVkaXRhYmxlPT0oIU1bcGVdLnByb3RlY3Rpb258fCFNW3BlXS5wcm90ZWN0aW9uLmVkaXRhYmxlKSljb250aW51ZX1lbHNlIGlmKE1bcGVdLnByb3RlY3Rpb24pY29udGludWU7cmV0dXJuIHBlfX1lbHNlIGZvcihwZT0wO3BlIT15ZTsrK3BlKWlmKE1bcGVdLm51bUZtdElkPT09aWUpcmV0'@;
put 'dXJuIHBlO3JldHVybiBNW3llXT17bnVtRm10SWQ6aWUsZm9udElkOnZlLGZpbGxJZDpNZSxib3JkZXJJZDpqZSx4ZklkOlllLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHZlPjAmJihNW3llXS5hcHBseUZvbnQ9MSksTWU+MCYmKE1beWVdLmFwcGx5RmlsbD0xKSxqZT4wJiYoTVt5ZV0uYXBwbHlC'@;
put 'b3JkZXI9MSksIUYmJk8ucyYmTy5zLnN0eWxlJiYiTm9ybWFsIiE9Ty5zLnN0eWxlJiYoTVt5ZV0uc3R5bGU9Ty5zLnN0eWxlKSxPLnMmJk8ucy5hbGlnbm1lbnQmJihNW3llXS5hbGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0Iiwi'@;
put 'aW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihEdCl7bnVsbCE9Ty5zLmFsaWdubWVudFtEdF0mJihNW3llXS5hbGlnbm1lbnRbRHRdPU8ucy5hbGlnbm1lbnRbRHRdKX0pKSxPLnMmJk8ucy5oaWRkZW4mJihNW3llXS5wcm90ZWN0aW9ufHwoTVt5ZV0ucHJvdGVjdGlv'@;
put 'bj17fSksTVt5ZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLE8ucyYmTy5zLmVkaXRhYmxlJiYoTVt5ZV0ucHJvdGVjdGlvbnx8KE1beWVdLnByb3RlY3Rpb249e30pLE1beWVdLnByb3RlY3Rpb24uZWRpdGFibGU9ITApLHllfWZ1bmN0aW9uIEsyKE0sRixPLEosaWUscGUseWUsdmUpeyJkIj09'@;
put 'PU0udCYmInN0cmluZyI9PXR5cGVvZiBNLnYmJihNLnY9RnQoTS52KSk7dHJ5e3BlLmNlbGxORiYmKE0uej1DLl90YWJsZVtGXSl9Y2F0Y2goamUpe2lmKHBlLldURil0aHJvdyBqZX1pZigoIXBlfHwhMSE9PXBlLmNlbGxUZXh0KSYmInoiIT1NLnQpdHJ5e2lmKG51bGw9PUMuX3RhYmxlW0Zd'@;
put 'JiZDLmxvYWQodWVbRl18fCJHZW5lcmFsIixGKSwiZSI9PT1NLnQpTS53PU0ud3x8dWxbTS52XTtlbHNlIGlmKDA9PT1GKWlmKCJuIj09PU0udClNLnc9KDB8TS52KT09PU0udj9DLl9nZW5lcmFsX2ludChNLnYpOkMuX2dlbmVyYWxfbnVtKE0udik7ZWxzZSBpZigiZCI9PT1NLnQpe3ZhciBN'@;
put 'ZT1HZShNLnYpO00udz0oMHxNZSk9PT1NZT9DLl9nZW5lcmFsX2ludChNZSk6Qy5fZ2VuZXJhbF9udW0oTWUpfWVsc2V7aWYodm9pZCAwPT09TS52KXJldHVybiIiO00udz1DLl9nZW5lcmFsKE0udixoNSl9ZWxzZSBNLnc9Qy5mb3JtYXQoRiwiZCI9PT1NLnQ/R2UoTS52KTpNLnYsaDUpfWNh'@;
put 'dGNoKGplKXtpZihwZS5XVEYpdGhyb3cgamV9aWYocGUuY2VsbFN0eWxlcyYmdmUpe2lmKE0ucz17fSxudWxsIT1PJiZ2ZS5GaWxscyl0cnl7enQoTS5zLHZlLkZpbGxzW09dKX1jYXRjaChqZSl7aWYocGUuV1RGKXRocm93IGplfWlmKG51bGwhPUomJnZlLkZvbnRzKXRyeXt6dChNLnMsdmUu'@;
put 'Rm9udHNbSl0pfWNhdGNoKGplKXtpZihwZS5XVEYpdGhyb3cgamV9aWYobnVsbCE9aWUmJnZlLkJvcmRlcnMpdHJ5e3p0KE0ucyx2ZS5Cb3JkZXJzW2llXSl9Y2F0Y2goamUpe2lmKHBlLldURil0aHJvdyBqZX19fWZ1bmN0aW9uIEtDKE0sRixPKXtpZihNJiZNWyIhcmVmIl0pe3ZhciBKPWJv'@;
put 'KE1bIiFyZWYiXSk7aWYoSi5lLmM8Si5zLmN8fEouZS5yPEoucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK08rIik6ICIrTVsiIXJlZiJdKX19dmFyIHA1PS88KD86XHc6KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLFhDPS88KD86XHcrOik/c2hlZXRE'@;
put 'YXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8scHY9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20saTg9LyIoXHcqOlx3KikiLyxaST0vPCg/Olx3Oik/Y29sXGJbXj5dKltcL10/Pi9nLEpDPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLFdJPS88'@;
put 'KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxRQz0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLGVTPS88KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sdFM9LzwoPzpcdzopP3NoZWV0UHJv'@;
put 'dGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLG5TPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8saXM9LzwoPzpcdzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+'@;
put 'Lyx3ZT0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+Lyxtdj0vPCg/Olx3KzopP2NvbmRpdGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0'@;
put 'aW9uYWxGb3JtYXR0aW5nKT4vZyxzdD0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxyUz0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3RhYmxlUGFydHM+LyxpUz0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLEdJPS88KD86XHc6KT9y'@;
put 'b3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLG84PS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/Y29sQnJlYWtzKT4vLGg0PS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118Pihb'@;
put 'XHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLGd2PS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBfdj0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwvPl0qW1wvXT8+L2c7ZnVuY3Rpb24gczgoTSxGLE8sSil7dmFyIGllPWxuKE0pO08uU2hlZXRzW0pdfHwo'@;
put 'Ty5TaGVldHNbSl09e30pLGllLmNvZGVOYW1lJiYoTy5TaGVldHNbSl0uQ29kZU5hbWU9aWUuY29kZU5hbWUpfXZhciBidj0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8sJEk9LzwoPzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLHFJPS88KD86XHc6KT9vdXRsaW5lUHJbXj5d'@;
put 'KltcL10/Pi8sYVM9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxsUz1DZShhUyksY1M9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFuayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sdVM9Q2UoY1MpLEZ1PS88KD86XHc6KT9icmtbXj5d'@;
put 'KlwvPi9nLE12PVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLGZTPVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3MiLCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJs'@;
put 'aW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIG1TKE0pe3ZhciBGPXt9O3JldHVyblsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlv'@;
put 'bihPKXtNW09dJiYoRltPXT1wYXJzZUZsb2F0KE1bT10pKX0pLEZ9dmFyIEcxPXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixMaXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LFN2'@;
put 'PUNlKEcxKSxhOD17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVyVGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxnUz1DZShhOCk7ZnVuY3Rpb24geHYo'@;
put 'TSxGLE8pe3ZhciBKPVtdLGllPXt9LHBlPSIiLHllPSExLHZlPTAsTWU9MDtyZXR1cm4gTS5yZXBsYWNlKCR0LGZ1bmN0aW9uKGplLFllKXt2YXIgcWU9bG4oamUpO3N3aXRjaChubihxZVswXSkpe2Nhc2UiPGRhdGFWYWxpZGF0aW9ucyI6Y2FzZSI8ZGF0YVZhbGlkYXRpb25zPiI6Y2FzZSI8'@;
put 'L2RhdGFWYWxpZGF0aW9ucz4iOmJyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uIjppZT17dDpTdltxZS50eXBlfHwibm9uZSJdLHJlZjoocGU9cWUuc3FyZWYpP3BlLmluZGV4T2YoIiAiKT4tMT9wZTpibyhwZSk6IiJ9LHFlLm9wZXJhdG9yJiYoaWUub3A9Z1NbcWUub3BlcmF0b3JdKSxpZS5i'@;
put 'bGFuaz0hIXFlLmFsbG93QmxhbmsmJkxyKHFlLmFsbG93QmxhbmspLCghcWUuc2hvd0lucHV0TWVzc2FnZXx8IUxyKHFlLnNob3dJbnB1dE1lc3NhZ2UpKSYmKGllLmlucHV0PSExKSxxZS5wcm9tcHRUaXRsZSYmKChpZS5pbnB1dHx8KGllLmlucHV0PXt9KSkudGl0bGU9bXIocWUucHJvbXB0'@;
put 'VGl0bGUpKSxxZS5wcm9tcHQmJigoaWUuaW5wdXR8fChpZS5pbnB1dD17fSkpLm1lc3NhZ2U9bXIocWUucHJvbXB0KSksKCFxZS5zaG93RXJyb3JNZXNzYWdlfHwhTHIocWUuc2hvd0Vycm9yTWVzc2FnZSkpJiYoaWUuZXJyb3I9ITEpLHFlLmVycm9yVGl0bGUmJigoaWUuZXJyb3J8fChpZS5l'@;
put 'cnJvcj17fSkpLnRpdGxlPW1yKHFlLmVycm9yVGl0bGUpKSxxZS5lcnJvciYmKChpZS5lcnJvcnx8KGllLmVycm9yPXt9KSkubWVzc2FnZT1tcihxZS5lcnJvcikpLGllLmVycm9yP2llLmVycm9yLnN0eWxlPXFlLmVycm9yU3R5bGV8fCJzdG9wIjpxZS5lcnJvclN0eWxlJiYoaWUuZXJyb3I9'@;
put 'e3N0eWxlOnFlLmVycm9yU3R5bGV9KSxpZS50JiZKLnB1c2goaWUpO2JyZWFrO2Nhc2UiPGRhdGFWYWxpZGF0aW9uLz4iOmNhc2UiPC9kYXRhVmFsaWRhdGlvbj4iOmJyZWFrO2Nhc2UiPHNxcmVmPiI6TWU9WWUramUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9zcXJlZj4iOnBlPU0uc2xpY2UoTWUs'@;
put 'WWUpLGllLnJlZj1wZT9wZS5pbmRleE9mKCIgIik+LTE/cGU6Ym8ocGUpOiIiO2JyZWFrO2Nhc2UiPGY+IjpjYXNlIjxmb3JtdWxhMSI6Y2FzZSI8Zm9ybXVsYTE+IjpjYXNlIjxmb3JtdWxhMiI6Y2FzZSI8Zm9ybXVsYTI+Ijp2ZT1ZZStqZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGEx'@;
put 'PiI6Y2FzZSI8L2Zvcm11bGEyPiI6aWYoTylicmVhaztjYXNlIjwvZj4iOnZhciBpdD1tcihCaShNLnNsaWNlKHZlLFllKSkpO3N3aXRjaChpZS50KXtjYXNlIkxpc3QiOmlmKGllLmx8fGllLmYpYnJlYWs7aWYoMzQ9PWl0LmNoYXJDb2RlQXQoMCkpe2llLmw9aXQuc2xpY2UoMSwtMSkuc3Bs'@;
put 'aXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09aWUuZiYmKGllLmY9aXQpO2JyZWFrO2Nhc2UiRGF0ZSI6Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJUaW1lIjpjYXNlIldob2xlIjppZS5vcHx8KGllLm9wPSJJTiIpLG51bGw9PWllLnY/aWUudj1pc05hTigraXQpP2l0'@;
put 'OitpdDooaWUubWluPWllLnYsaWUubWF4PWlzTmFOKCtpdCk/aXQ6K2l0LGRlbGV0ZSBpZS52KX1icmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOnllPSEwO2JyZWFrO2Nhc2UiPC9leHQ+Ijp5ZT0hMTticmVhaztkZWZh'@;
put 'dWx0OmlmKEYmJkYuV1RGJiYheWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitxZVswXSsiIGluIGRhdGEgdmFsaWRhdGlvbiIpfXJldHVybiBqZX0pLEp9dmFyIGc1PXtJTjoiY29udGFpbnNUZXh0IixPVDoibm90Q29udGFpbnNUZXh0IixTVDoiYmVnaW5zV2l0aCIsTkQ6ImVu'@;
put 'ZHNXaXRoIn0sbDg9Q2UoZzUpLGNSPXtMTToibGFzdE1vbnRoIixMUzoibGFzdDdEYXlzIixMVzoibGFzdFdlZWsiLE5NOiJuZXh0TW9udGgiLE5XOiJuZXh0V2VlayIsVE06InRoaXNNb250aCIsVFc6InRoaXNXZWVrIixURDoidG9kYXkiLFRPOiJ0b21vcnJvdyIsWVM6Inllc3RlcmRheSJ9'@;
put 'LHZTPUNlKGNSKTtmdW5jdGlvbiBfNShNKXt2YXIgRj17fTtyZXR1cm4gbnVsbCE9TS52YWwmJihpc05hTigrTS52YWwpP0YuZj1NLnZhbDpGLnY9K00udmFsKSxGLnQ9TS50eXBlLEZ9ZnVuY3Rpb24gTzMoTSl7cmV0dXJuIGRyKCJjZnZvIixudWxsLHt0eXBlOk0udCx2YWw6bnVsbCE9TS52'@;
put 'P00udjp5cihNLmYpfSl9ZnVuY3Rpb24gZjQoTSxGLE8sSil7dmFyIGllPV81KE0pO3JldHVybiBpZS5jb2xvcj1xTShGLE8sSiksaWV9ZnVuY3Rpb24gRmQoTSxGLE8sSixpZSl7dmFyIHBlPShNLm1hdGNoKC9zcXJlZj0iKFtcdzokIF0qKSIvKXx8W10pWzFdO3JldHVybiBmdW5jdGlvbiBr'@;
put 'dihNLEYsTyxKLGllLHBlKXt2YXIgeWU9ITEsdmU9W10sTWU9e2Y6W119LGplPTAsWWU9MCxxZT17Y2Z2b3M6W10sY29sb3JzOltdfSxpdD17fSxodD0tMSxrdD0wLHV0PSIiO3JldHVybiBNLnJlcGxhY2UoJHQsZnVuY3Rpb24odnQsUHQpe3ZhciBEdD1sbih2dCk7c3dpdGNoKG5uKER0WzBd'@;
put 'KSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihZZT1QdCxpdD1EdCxNZT17cmVmOkYsZjpbXX0sIXZ0Lm1hdGNoKC9cLz4vKSlicmVhaztjYXNlIjwvY2ZSdWxl'@;
put 'PiI6c3dpdGNoKGl0LmR4ZklkJiZpZSYmaWUuRFhGJiYoTWUucz1pZS5EWEZbK2l0LmR4ZklkXSksaXQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOk1lLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOk1lLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJjb250YWluc0JsYW5rcyI6'@;
put 'TWUudD0iYmxhbmsiLE1lLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6TWUudD0iYmxhbmsiLE1lLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6TWUudD0iZXJyb3IiLE1lLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6TWUudD0iZXJyb3IiLE1l'@;
put 'LnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChpdC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoTWUudD0idGV4dCIsTWUub3A9bDhbaXQub3BlcmF0b3JdLG51bGw9PWl0LnRleHQp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitNZS5vcCsiIG1pc3NpbmcgdGV4dCIpO01lLnY9aXQudGV4dCxNZS5mPU1lLmZbMF0sbnVsbD09TWUuZiYmZGVsZXRlIE1lLmY7YnJlYWs7ZGVmYXVsdDpNZS50PSJ2YWwiLE1lLm9wPWdTW2l0Lm9wZXJhdG9yXSwxPT1NZS5mLmxlbmd0'@;
put 'aD9pc05hTigrTWUuZlswXSk/TWUuZj1NZS5mWzBdOihNZS52PStNZS5mWzBdLGRlbGV0ZSBNZS5mKTooTWUubWluPWlzTmFOKCtNZS5mWzBdKT9NZS5mWzBdOitNZS5mWzBdLE1lLm1heD1pc05hTigrTWUuZlsxXSk/TWUuZlsxXTorTWUuZlsxXSxkZWxldGUgTWUuZil9YnJlYWs7Y2FzZSJl'@;
put 'eHByZXNzaW9uIjpNZS50PSJmb3JtdWxhIixNZS5mPU1lLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKE1lLnQ9InRleHQiLE1lLm9wPWw4W2l0LnR5cGVdLG51bGw9PWl0LnRleHQm'@;
put 'Jk1lLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIitNZS5vcCsiIG1pc3NpbmcgdGV4dCIpO01lLnY9bnVsbCE9aXQudGV4dD9pdC50ZXh0Ok1lLmZbMV0ubWF0Y2goLyIuKiIvKT9NZS5mWzFdLnNsaWNlKDEsLTEpOk1lLmZbMV0sTWUuZj1NZS5mWzBdLG51bGw9'@;
put 'PU1lLmYmJmRlbGV0ZSBNZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoTWUudD0ic2NhbGUiLCFNZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7TWUuY21pbj1mNCgocWU9TWUuY29sb3JTY2FsZSkuY2Z2b3NbMF0scWUuY29sb3JzWzBdLGll'@;
put 'LEopLDM9PXFlLmNmdm9zLmxlbmd0aCYmKE1lLmNtaWQ9ZjQocWUuY2Z2b3NbMV0scWUuY29sb3JzWzFdLGllLEopKSxNZS5jbWF4PWY0KHFlLmNmdm9zW3FlLmNmdm9zLmxlbmd0aC0xXSxxZS5jb2xvcnNbcWUuY2Z2b3MubGVuZ3RoLTFdLGllLEopO2JyZWFrO2Nhc2UiZGF0YUJhciI6aWYo'@;
put 'TWUudD0iYmFyIiwhTWUuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhxZT1NZS5kYXRhQmFyKS5jb2xvcnNbMF0mJihNZS5jb2xvcj1xTShxZS5jb2xvcnNbMF0saWUsSikpLE1lLmNtaW49XzUocWUuY2Z2b3NbMF0pLE1lLmNtYXg9XzUocWUuY2Z2b3NbMV0p'@;
put 'O2JyZWFrO2Nhc2UiaWNvblNldCI6aWYoTWUudD0iaWNvbiIsIU1lLmljb25TZXQpdGhyb3cgbmV3IEVycm9yKCJtaXNzaW5nIGljb25TZXQiKTtNZS50aHJlc2g9KHFlPU1lLmljb25TZXQpLmNmdm9zLm1hcChmdW5jdGlvbihBdCl7cmV0dXJuIF81KEF0KX0pLE1lLnY9cWUudGFnJiZxZS50'@;
put 'YWcuaWNvblNldHx8IjNUcmFmZmljTGlnaHRzMSIsTWUucmV2PUxyKHFlLnRhZy5yZXZlcnNlfHwiZmFsc2UiKSxNZS5wY3Q9THIocWUudGFnLnBlcmNlbnR8fCJ0cnVlIiksTWUuaGlkZGVuPSFMcihxZS50YWcuc2hvd1ZhbHVlfHwidHJ1ZSIpO2JyZWFrO2Nhc2UidGltZVBlcmlvZCI6TWUu'@;
put 'dD0iZGF0ZSIsTWUub3A9dlNbaXQudGltZVBlcmlvZF07YnJlYWs7Y2FzZSJhYm92ZUF2ZXJhZ2UiOk1lLnQ9ImF2ZyIsTWUub3A9IjAiPT1pdC5hYm92ZUF2ZXJhZ2U/IkwiOiJHIixNZS5vcCs9aXQuc3RkRGV2P2l0LnN0ZERldjpMcihpdC5lcXVhbEF2ZXJhZ2V8fCIwIik/IkUiOiJUIjti'@;
put 'cmVhaztjYXNlInRvcDEwIjpNZS50PSJyYW5rIixNZS5vcD0oTHIoaXQuYm90dG9tfHwiMCIpPyJCIjoiVCIpKyhMcihpdC5wZXJjZW50fHwiMCIpPyJQIjoiViIpLE1lLnY9K2l0LnJhbms7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCBDRiBUeXBlICIraXQudHlwZX1pZihkZWxl'@;
put 'dGUgTWUuY29sb3JTY2FsZSxkZWxldGUgTWUuZGF0YUJhcixkZWxldGUgTWUuaWNvblNldCwhTWUudCl0aHJvdyBjb25zb2xlLmxvZyhNLnNsaWNlKFllLFB0K3Z0Lmxlbmd0aCkpLCJiYWQgQ0YgcnVsZSI7bnVsbCE9TWUuZiYmIU1lLmYubGVuZ3RoJiZkZWxldGUgTWUuZixNZS5kZWx8fHZl'@;
put 'LnB1c2goTWUpO2JyZWFrO2Nhc2UiPGZvcm11bGEiOmNhc2UiPGZvcm11bGE+IjpqZT1QdCt2dC5sZW5ndGg7YnJlYWs7Y2FzZSI8L2Zvcm11bGE+IjpNZS5mLnB1c2gobXIoTS5zbGljZShqZSxQdCkpKTticmVhaztjYXNlIjxmIjpjYXNlIjxmPiI6amU9UHQrdnQubGVuZ3RoO2JyZWFrO2Nh'@;
put 'c2UiPC9mPiI6TWUuZi5wdXNoKG1yKE0uc2xpY2UoamUsUHQpKSk7YnJlYWs7Y2FzZSI8c3FyZWY+IjprdD1QdCt2dC5sZW5ndGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6dXQ9TS5zbGljZShrdCxQdCksRj11dD91dC5pbmRleE9mKCIgIik+LTE/dXQ6Ym8odXQpOiIiLE1lLnJlZj1GLHZlLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oQXQpe0F0LnJlZj1GfSk7YnJlYWs7Y2FzZSI8Y29sb3JTY2FsZSI6Y2FzZSI8Y29sb3JTY2FsZT4iOmNhc2UiPGRhdGFCYXIiOmNhc2UiPGRhdGFCYXI+IjpjYXNlIjxpY29uU2V0IjpjYXNlIjxpY29uU2V0PiI6cWU9e2Nmdm9zOltdLGNvbG9yczpbXSx0YWc6RHR9'@;
put 'LGplPVB0K3Z0Lmxlbmd0aDticmVhaztjYXNlIjwvY29sb3JTY2FsZT4iOk1lLmNvbG9yU2NhbGU9cWU7YnJlYWs7Y2FzZSI8L2RhdGFCYXI+IjpNZS5kYXRhQmFyPXFlO2JyZWFrO2Nhc2UiPC9pY29uU2V0PiI6TWUuaWNvblNldD1xZTticmVhaztjYXNlIjxjZnZvIjpjYXNlIjxjZnZvLz4i'@;
put 'OnFlLmNmdm9zLnB1c2goRHQpO2JyZWFrO2Nhc2UiPC9jZnZvPiI6YnJlYWs7Y2FzZSI8Y29sb3IiOnFlLmNvbG9ycy5wdXNoKER0KTticmVhaztjYXNlIjwvY29sb3I+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjxleHQiOnllPSEw'@;
put 'O2JyZWFrO2Nhc2UiPC9leHQ+Ijp5ZT0hMTticmVhaztjYXNlIjxuZWdhdGl2ZUZpbGxDb2xvciI6Y2FzZSI8YXhpc0NvbG9yIjpjYXNlIjxib3JkZXJDb2xvciI6Y2FzZSI8bmVnYXRpdmVCb3JkZXJDb2xvciI6Y2FzZSI8Y2ZJY29uIjpNZS5kZWw9ITA7YnJlYWs7Y2FzZSI8ZHhmPiI6eWU9'@;
put 'ITAsaHQ9UHQ7YnJlYWs7Y2FzZSI8L2R4Zj4iOnllPSExLE1lLnM9dzMoTS5zbGljZShodCxQdCt2dC5sZW5ndGgpLGllLEosTyk7YnJlYWs7ZGVmYXVsdDppZihPJiZPLldURil7aWYocGUpYnJlYWs7aWYoIXllKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrRHRbMF0rIiBpbiBj'@;
put 'b25kZm10Iil9fXJldHVybiB2dH0pLHZlfShNLHBlLEYsTyxKLGllKX12YXIgRXY9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIHk1KE0sRil7dmFyIE89MCxKPTAsaWU9MCxwZT0wO2lmKCFGfHwhRi5DZWxsWGYpcmV0dXJuIG51bGw7dmFyIHll'@;
put 'PUYuQ2VsbFhmW01dO251bGwhPXllJiYobnVsbCE9eWUubnVtRm10SWQmJihPPXllLm51bUZtdElkKSxudWxsIT15ZS5maWxsSWQmJihKPXllLmZpbGxJZCksbnVsbCE9eWUuZm9udElkJiYoaWU9eWUuZm9udElkKSxudWxsIT15ZS5ib3JkZXJJZCYmKHBlPXllLmJvcmRlcklkKSk7dmFyIHZl'@;
put 'PXt0OiJ6In07dHJ5e0syKHZlLE8sSixpZSxwZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxGKX1jYXRjaHt9cmV0dXJuIHZlLnN9ZnVuY3Rpb24gcDQoTSxGLE8sSil7aWYodm9pZCAwPT09TS52JiZ2b2lkIDA9PT1NLmYmJm51bGw9PU0ucyYmIU0uY3x8InoiPT09TS50JiYhTS5jJiYhSi5z'@;
put 'aGVldFN0dWJzKXJldHVybiIiO3ZhciBpZT0iIixwZT1NLnQseWU9TS52O2lmKCJ6IiE9PU0udClzd2l0Y2goTS50KXtjYXNlImIiOmllPU0udj8iMSI6IjAiO2JyZWFrO2Nhc2UibiI6aWU9IiIrTS52O2JyZWFrO2Nhc2UiZSI6aWU9dWxbTS52XTticmVhaztjYXNlImQiOkomJkouY2VsbERh'@;
put 'dGVzP2llPUZ0KE0udiwtMSkudG9JU09TdHJpbmcoKTooKE09WHQoTSkpLnQ9Im4iLGllPSIiKyhNLnY9R2UoRnQoTS52KSkpKSx0eXBlb2YgTS56PiJ1IiYmKE0uej1DLl90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6aWU9TS52fXZhciB2ZT0ieiI9PU0udD8iIjpybygidiIseXIoaWUpKSxN'@;
put 'ZT17cjpGfSxqZT1KP3J1KEouY2VsbFhmcyxKLmNlbGxTdHlsZVhmcyxNLEopOjA7c3dpdGNoKDAhPT1qZSYmKE1lLnM9amUpLE0udCl7Y2FzZSJuIjpjYXNlInoiOmJyZWFrO2Nhc2UiZCI6TWUudD0iZCI7YnJlYWs7Y2FzZSJiIjpNZS50PSJiIjticmVhaztjYXNlImUiOk1lLnQ9ImUiO2Jy'@;
put 'ZWFrO2RlZmF1bHQ6aWYobnVsbD09TS52KXtkZWxldGUgTS50O2JyZWFrfWlmKEomJkouYm9va1NTVCl7dmU9cm8oInYiLCIiK2N2KEouU3RyaW5ncyxNLnYsTS5SP00ucj1hYShNLlIpOm51bGwsSi5yZXZTdHJpbmdzKSksTWUudD0icyI7YnJlYWt9QXJyYXkuaXNBcnJheShNLlIpPyh2ZT0i'@;
put 'PGlzPiIrYWEoTS5SKSsiPC9pcz4iLE1lLnQ9ImlubGluZVN0ciIpOk1lLnQ9InN0ciJ9aWYoTS50IT1wZSYmKE0udD1wZSxNLnY9eWUpLE0uZil7dmFyIFllPU0uRiYmTS5GLnNsaWNlKDAsRi5sZW5ndGgpPT1GP3t0OiJhcnJheSIscmVmOk0uRn06bnVsbDt2ZT1kcigiZiIseXIoTS5mKSxZ'@;
put 'ZSkrKG51bGwhPU0udj92ZToiIil9cmV0dXJuIE0ubCYmT1siIWxpbmtzIl0ucHVzaChbRixNLmxdKSxNLmMmJk9bIiFjb21tZW50cyJdLnB1c2goW0YsTS5jXSksZHIoImMiLHZlLE1lKX12YXIgYjU9ZnVuY3Rpb24oKXt2YXIgTT0vPCg/Olx3KzopP2NbIFwvPl0vLEY9LzxcLyg/Olx3Kzop'@;
put 'P3Jvdz4vLE89L3I9WyInXShbXiInXSopWyInXS8sSj0vPCg/Olx3KzopP2lzPihbXFNcc10qPyk8XC8oPzpcdys6KT9pcz4vLGllPS9yZWY9WyInXShbXiInXSopWyInXS8scGU9dWMoInYiKSx5ZT11YygiZiIpO3JldHVybiBmdW5jdGlvbihNZSxqZSxZZSxxZSxpdCxodCxrdCl7Zm9yKHZh'@;
put 'ciB1bixKbix0cixycixkaSx1dD0wLHZ0PSIiLFB0PVtdLER0PVtdLEF0PTAsWnQ9MCxnbj0wLHFuPSIiLFluPTAsTG49MCxVbj0wLFhyPTAscGk9MCxPaT0wLE5pPUFycmF5LmlzQXJyYXkoa3QuQ2VsbFhmKSxfcj1bXSxBbj1bXSxNcj1BcnJheS5pc0FycmF5KFllKSxvcj1bXSxUbj17fSxD'@;
put 'cj0hMSxTaT1NZS5zcGxpdChGKSxacj0hIXFlLnNoZWV0U3R1YnMsVWk9ISFxZS5jZWxsSFRNTCxSbz0hKCExPT09cWUuY2VsbFRleHQmJiFxZS5jZWxsTkYmJiFxZS5jZWxsU3R5bGVzKSxGaT0wLG9zPVNpLmxlbmd0aDtGaSE9b3M7KytGaSl7dmFyIGxvPSh2dD1TaVtGaV0udHJpbSgpKS5s'@;
put 'ZW5ndGg7aWYoMCE9PWxvKXt2YXIgRm89MDtlOmZvcih1dD0wO3V0PGxvOysrdXQpc3dpdGNoKHZ0W3V0XSl7Y2FzZSI+IjppZigiLyIhPXZ0W3V0LTFdKXsrK3V0O2JyZWFrIGV9cWUuY2VsbFN0eWxlcyYmbnVsbCE9KEpuPWxuKHZ0LnNsaWNlKEZvLHV0KSwhMCkpLnImJnBhcnNlSW50KEpu'@;
put 'LnIsMTApJiYoWW49cGFyc2VJbnQoSm4uciwxMCksVG49e30sQ3I9ITEsSm4uaHQmJihDcj0hMCxUbi5ocHQ9cGFyc2VGbG9hdChKbi5odCksVG4uaHB4PVoxKFRuLmhwdCkpLEpuLmR5RGVzY2VudCYmKENyPSEwLFRuLmR5RGVzY2VudD1Kbi5keURlc2NlbnQpLCIxIj09Sm4uaGlkZGVuJiYo'@;
put 'Q3I9ITAsVG4uaGlkZGVuPSEwKSxudWxsIT1Kbi5vdXRsaW5lTGV2ZWwmJihDcj0hMCxUbi5sZXZlbD0rSm4ub3V0bGluZUxldmVsKSxKbi5zJiZrdCYma3QuQ2VsbFhmJiYoQ3I9ITAsVG4ucz15NShKbi5zLGt0KSksQ3ImJihvcltZbi0xXT1UbikpO2JyZWFrO2Nhc2UiPCI6Rm89dXR9aWYo'@;
put 'Rm8+PXV0KWJyZWFrO2lmKFluPW51bGwhPShKbj1sbih2dC5zbGljZShGbyx1dCksITApKS5yP3BhcnNlSW50KEpuLnIsMTApOlluKzEsTG49LTEsIShxZS5zaGVldFJvd3MmJnFlLnNoZWV0Um93czxZbikpe3FlLm5vZGltfHwoaXQucy5yPlluLTEmJihpdC5zLnI9WW4tMSksaXQuZS5yPFlu'@;
put 'LTEmJihpdC5lLnI9WW4tMSkpO3ZhciB4bz17dDoicm93Iixyb3c6W10sUjpZbi0xLGlkeDpqZX07cWUuY2VsbFN0eWxlcyYmKFRuPXt9LENyPSExLEpuLmh0JiYoQ3I9ITAsVG4uaHB0PXBhcnNlRmxvYXQoSm4uaHQpLFRuLmhweD1aMShUbi5ocHQpKSxKbi5keURlc2NlbnQmJihDcj0hMCxU'@;
put 'bi5keURlc2NlbnQ9Sm4uZHlEZXNjZW50KSwiMSI9PUpuLmhpZGRlbiYmKENyPSEwLFRuLmhpZGRlbj0hMCksbnVsbCE9Sm4ub3V0bGluZUxldmVsJiYoQ3I9ITAsVG4ubGV2ZWw9K0puLm91dGxpbmVMZXZlbCksSm4ucyYmKENyPSEwLFRuLnM9eTUoSm4ucyxrdCkpLENyJiYocWUuY2FsbGJh'@;
put 'Y2s/eG8ucHJvcHM9VG46b3JbWW4tMV09VG4pKSxQdD12dC5zbGljZSh1dCkuc3BsaXQoTSk7Zm9yKHZhciB2aT0wO3ZpIT1QdC5sZW5ndGgmJiI8Ij09UHRbdmldLnRyaW0oKS5jaGFyQXQoMCk7Kyt2aSk7Zm9yKFB0PVB0LnNsaWNlKHZpKSx1dD0wO3V0IT1QdC5sZW5ndGg7Kyt1dClpZigw'@;
put 'IT09KHZ0PVB0W3V0XS50cmltKCkpLmxlbmd0aCl7aWYoRHQ9dnQubWF0Y2goTyksQXQ9dXQsWnQ9MCxnbj0wLHZ0PSI8YyAiKygiPCI9PXZ0LnNsaWNlKDAsMSk/Ij4iOiIiKSt2dCxudWxsIT1EdCYmMj09PUR0Lmxlbmd0aCl7Zm9yKEF0PTAscW49RHRbMV0sWnQ9MDtadCE9cW4ubGVuZ3Ro'@;
put 'JiYhKChnbj1xbi5jaGFyQ29kZUF0KFp0KS02NCk8MXx8Z24+MjYpOysrWnQpQXQ9MjYqQXQrZ247TG49LS1BdH1lbHNlKytMbjtmb3IoWnQ9MDtadCE9dnQubGVuZ3RoJiY2MiE9PXZ0LmNoYXJDb2RlQXQoWnQpOysrWnQpO2lmKCsrWnQsKEpuPWxuKHZ0LnNsaWNlKDAsWnQpLCEwKSkucnx8'@;
put 'KEpuLnI9RGkoe3I6WW4tMSxjOkxufSkpLHVuPXt0OiIifSxudWxsIT0oRHQ9KHFuPXZ0LnNsaWNlKFp0KSkubWF0Y2gocGUpKSYmIiIhPT1EdFsxXSYmKHVuLnY9bXIoRHRbMV0pKSxxZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KER0PXFuLm1hdGNoKHllKSkmJiIiIT09RHRbMV0pe2lmKHVu'@;
put 'LmY9bXIoQmkoRHRbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIikscWUueGxmbnx8KHVuLmY9Z0kodW4uZikpLER0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKXVuLkY9KHFuLm1hdGNoKGllKXx8W10pWzFdLHVuLkYuaW5kZXhPZigiOiIpPi0xJiZfci5wdXNoKFtibyh1bi5GKSx1bi5G'@;
put 'XSk7ZWxzZSBpZihEdFswXS5pbmRleE9mKCd0PSJzaGFyZWQiJyk+LTEpe3JyPWxuKER0WzBdKTt2YXIgQnM9bXIoQmkoRHRbMV0pKTtxZS54bGZufHwoQnM9Z0koQnMpKSxBbltwYXJzZUludChyci5zaSwxMCldPVtycixCcyxKbi5yXX19ZWxzZShEdD1xbi5tYXRjaCgvPGZbXj5dKlwvPi8p'@;
put 'KSYmQW5bKHJyPWxuKER0WzBdKSkuc2ldJiYodW4uZj1aWihBbltyci5zaV1bMV0sQW5bcnIuc2ldWzJdLEpuLnIpKTt2YXIgRW49aHMoSm4ucik7Zm9yKFp0PTA7WnQ8X3IubGVuZ3RoOysrWnQpRW4ucj49X3JbWnRdWzBdLnMuciYmRW4ucjw9X3JbWnRdWzBdLmUuciYmRW4uYz49X3JbWnRd'@;
put 'WzBdLnMuYyYmRW4uYzw9X3JbWnRdWzBdLmUuYyYmKHVuLkY9X3JbWnRdWzFdKX1pZihudWxsPT1Kbi50JiZ2b2lkIDA9PT11bi52KWlmKHVuLmZ8fHVuLkYpdW4udj0wLHVuLnQ9Im4iO2Vsc2V7aWYoIVpyKWNvbnRpbnVlO3VuLnQ9InoifWVsc2UgdW4udD1Kbi50fHwibiI7c3dpdGNoKGl0'@;
put 'LnMuYz5MbiYmKGl0LnMuYz1MbiksaXQuZS5jPExuJiYoaXQuZS5jPUxuKSx1bi50KXtjYXNlIm4iOmlmKCIiPT11bi52fHxudWxsPT11bi52KXtpZighWnIpY29udGludWU7dW4udD0ieiJ9ZWxzZSB1bi52PXBhcnNlRmxvYXQodW4udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgdW4udj4i'@;
put 'dSIpe2lmKCFaciljb250aW51ZTt1bi50PSJ6In1lbHNlIHRyPWQ1W3BhcnNlSW50KHVuLnYsMTApXSx1bi52PXRyLnQsdW4ucj10ci5yLHRyLlImJih1bi5SPXRyLlIpLFVpJiYodW4uaD10ci5oKTticmVhaztjYXNlInN0ciI6dW4udD0icyIsdW4udj1udWxsIT11bi52P0JpKHVuLnYpOiIi'@;
put 'LFVpJiYodW4uaD1aaSh1bi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOkR0PXFuLm1hdGNoKEopLHVuLnQ9InMiLG51bGwhPUR0JiYodHI9cF8oRHRbMV0pKT8odW4udj10ci50LHRyLlImJih1bi5SPXRyLlIpLFVpJiYodW4uaD10ci5oKSk6dW4udj0iIjticmVhaztjYXNlImIiOnVuLnY9'@;
put 'THIodW4udik7YnJlYWs7Y2FzZSJkIjpxZS5jZWxsRGF0ZXM/dW4udj1GdCh1bi52LDEpOih1bi52PUdlKEZ0KHVuLnYsMSkpLHVuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09cWUuY2VsbFRleHQmJih1bi53PXVuLnYpLHVuLnY9ZzBbdW4udl19aWYoUm8pe1VuPVhyPXBpPU9pPTAsZGk9'@;
put 'bnVsbCxOaSYmdm9pZCAwIT09Sm4ucyYmbnVsbCE9KGRpPWt0LkNlbGxYZltKbi5zXSkmJihudWxsIT1kaS5udW1GbXRJZCYmKFVuPWRpLm51bUZtdElkKSxxZS5jZWxsU3R5bGVzJiYobnVsbCE9ZGkuZmlsbElkJiYoWHI9ZGkuZmlsbElkKSxudWxsIT1kaS5mb250SWQmJihwaT1kaS5mb250'@;
put 'SWQpLG51bGwhPWRpLmJvcmRlcklkJiYoT2k9ZGkuYm9yZGVySWQpKSk7dHJ5e0syKHVuLFVuLFhyLHBpLE9pLHFlLDAsa3QpfWNhdGNoe31xZS5jZWxsU3R5bGVzJiZ1bi5zJiYoZGkmJmRpLmFsaWdubWVudCYmKHVuLnMuYWxpZ25tZW50PVh0KGRpLmFsaWdubWVudCkpLGRpJiZkaS5wcm90'@;
put 'ZWN0aW9uJiYobnVsbCE9ZGkucHJvdGVjdGlvbi5oaWRkZW4mJih1bi5zLmhpZGRlbj1kaS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9ZGkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKHVuLnMuZWRpdGFibGU9ZGkucHJvdGVjdGlvbi5lZGl0YWJsZSkpLGRpJiZkaS5zdHlsZSYmKHVuLnMuc3R5'@;
put 'bGU9ZGkuc3R5bGUpKSxxZS5jZWxsRGF0ZXMmJk5pJiYibiI9PXVuLnQmJkMuaXNfZGF0ZShDLl90YWJsZVtVbl0pJiYodW4udD0iZCIsdW4udj1kdCh1bi52KSl9dmFyIG1zO3FlLm5vZGltJiYobXM9aHMoSm4uciksaXQucy5yPm1zLnImJihpdC5zLnI9bXMuciksaXQuZS5yPG1zLnImJihp'@;
put 'dC5lLnI9bXMucikpLHFlLmNhbGxiYWNrPyhtcz1ocyhKbi5yKSx4by5yb3dbbXMuY109dW4pOk1yPyhZZVsobXM9aHMoSm4ucikpLnJdfHwoWWVbbXMucl09W10pLFllW21zLnJdW21zLmNdPXVuKTpZZVtKbi5yXT11bn1xZS5jYWxsYmFjayYmcWUuY2FsbGJhY2soeG8pfX19WnImJiFxZS5j'@;
put 'YWxsYmFjayYmeTUoMCxrdCksb3IubGVuZ3RoPjAmJihZZVsiIXJvd3MiXT1vcil9fSgpLHc1PWRyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOlRpLm1haW5bMF0sInhtbG5zOnIiOlRpLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFk'@;
put 'c2hlZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24geVMoTSxGLE8sSil7dmFyIHllLGllPVtQbix3NV0sdmU9IiIsTWU9'@;
put 'Ty5TaGVldHNbTy5TaGVldE5hbWVzW01dXTtudWxsPT1NZSYmKE1lPXt9KTt2YXIgamU9TWVbIiFyZWYiXXx8IkExIixZZT1ibyhqZSk7aWYoWWUuZS5jPjE2MzgzfHxZZS5lLnI+MTA0ODU3NSl7aWYoRi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiK2plKyIgZXhjZWVkcyBmb3JtYXQg'@;
put 'bGltaXQgQTE6WEZEMTA0ODU3NiIpO1llLmUuYz1NYXRoLm1pbihZZS5lLmMsMTYzODMpLFllLmUucj1NYXRoLm1pbihZZS5lLmMsMTA0ODU3NSksamU9QWkoWWUpfUp8fChKPXt9KSxNZVsiIWNvbW1lbnRzIl09W107dmFyIHFlPVtdLGl0PU1lWyIhcHJpbnQiXTtpZihmdW5jdGlvbiBzUyhN'@;
put 'LEYsTyxKLGllKXt2YXIgcGU9ITEseWU9e30sdmU9bnVsbDtpZigieGxzeCIhPT1KLmJvb2tUeXBlJiZGLnZiYXJhdyl7dmFyIE1lPUYuU2hlZXROYW1lc1tPXTt0cnl7Ri5Xb3JrYm9vayYmKE1lPUYuV29ya2Jvb2suU2hlZXRzW09dLkNvZGVOYW1lfHxNZSl9Y2F0Y2h7fXBlPSEwLHllLmNv'@;
put 'ZGVOYW1lPXlyKE1lKX1NJiZNWyIhY29uZGZtdCJdJiYoeWUuZW5hYmxlRm9ybWF0Q29uZGl0aW9uc0NhbGN1bGF0aW9uPSIxIiksTSYmTVsiIXRhYmNvbG9yIl0mJih2ZT0odmV8fCIiKSsnPHRhYkNvbG9yIHJnYj0iRkYnK1B1KE1bIiF0YWJjb2xvciJdLnJnYikrJyIvPicpO3ZhciBqZT0h'@;
put 'MSxZZT17fTtpZigoKChNfHx7fSlbIiFwcmludCJdfHx7fSkucHJvcHN8fHt9KS5maXQmJihqZT0hMCxZZS5maXRUb1BhZ2U9MSksamUmJih2ZT0odmV8fCIiKStkcigicGFnZVNldFVwUHIiLG51bGwsWWUpKSxNJiZNWyIhb3V0bGluZSJdKXt2YXIgcWU9e3N1bW1hcnlCZWxvdzoxLHN1bW1h'@;
put 'cnlSaWdodDoxfTtNWyIhb3V0bGluZSJdLmFib3ZlJiYocWUuc3VtbWFyeUJlbG93PTApLE1bIiFvdXRsaW5lIl0ubGVmdCYmKHFlLnN1bW1hcnlSaWdodD0wKSx2ZT0odmV8fCIiKStkcigib3V0bGluZVByIixudWxsLHFlKX0hcGUmJiF2ZXx8KGllW2llLmxlbmd0aF09ZHIoInNoZWV0UHIi'@;
put 'LHZlLHllKSl9KE1lLE8sTSxGLGllKSxpZVtpZS5sZW5ndGhdPWRyKCJkaW1lbnNpb24iLG51bGwse3JlZjpqZX0pLGllW2llLmxlbmd0aF09ZnVuY3Rpb24gdjUoTSxGLE8sSil7dmFyIGllPXt3b3JrYm9va1ZpZXdJZDoiMCJ9O2lmKCgoKEp8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxb'@;
put 'XSkubGVuZ3RoKXt2YXIgcGU9Si5Xb3JrYm9vay5WaWV3cyx5ZT1wZVtPXXx8cGVbMF07aWUucmlnaHRUb0xlZnQ9eWUuUlRMPyIxIjoiMCIseWUuem9vbSYmKGllLnpvb21TY2FsZT15ZS56b29tKSxudWxsIT15ZS5ncmlkJiYoaWUuc2hvd0dyaWRMaW5lcz15ZS5ncmlkKSx5ZS52aWV3JiYo'@;
put 'aWUudmlldz15ZS52aWV3KX1udWxsIT1NWyIhZ3JpZGxpbmVzIl0mJihpZS5zaG93R3JpZExpbmVzPSEhTVsiIWdyaWRsaW5lcyJdKTt2YXIgdmU9IiIsTWU9e3I6MCxjOjB9O2lmKE1bIiFzZWwiXSl7aWYoIShNZT1NWyIhc2VsIl0uY2VsbCkpe2lmKCFNWyIhc2VsIl0ucmFuZ2UpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO01lPUhzKE1bIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgTWUmJihNZT1ocyhNZSkpfXZhciBZZT1NWyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVv'@;
put 'ZiBNWyIhZnJlZXplIl0/aHMoTVsiIWZyZWV6ZSJdKTpNWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKE1bIiFmcmVlemUiXSl7dmFyIHFlPURpKFllKSxpdD17c3RhdGU6ImZyb3plbiIseFNwbGl0OlllLmMseVNwbGl0OlllLnIsdG9wTGVmdENlbGw6cWV9O01bIiFzZWwiXSYmKGl0LmFjdGl2'@;
put 'ZVBhbmU9KE1lLnI+PVllLnImJlllLnI+MD8iYm90dG9tIjoidG9wIikrKE1lLmM+PVllLmMmJlllLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHZlPWRyKCJwYW5lIixudWxsLGl0KX1pZihNWyIhc2VsIl0pe3ZhciBodD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIE1lP01lOkRpKE1lKX07'@;
put 'aHQuc3FyZWY9TVsiIXNlbCJdLnJhbmdlP01bIiFzZWwiXS5yYW5nZTpodC5hY3RpdmVDZWxsKyI6IitodC5hY3RpdmVDZWxsLHZlKz1kcigic2VsZWN0aW9uIixudWxsLGh0KSxNWyIhZnJlZXplIl0mJihZZS5jPjAmJihodC5wYW5lPSJ0b3BSaWdodCIsdmUrPWRyKCJzZWxlY3Rpb24iLG51'@;
put 'bGwsaHQpKSxZZS5yPjAmJihodC5wYW5lPSJib3R0b21MZWZ0Iix2ZSs9ZHIoInNlbGVjdGlvbiIsbnVsbCxodCkpLFllLmM+MCYmWWUucj4wJiYoaHQucGFuZT0iYm90dG9tUmlnaHQiLHZlKz1kcigic2VsZWN0aW9uIixudWxsLGh0KSkpfXJldHVybiBkcigic2hlZXRWaWV3cyIsZHIoInNo'@;
put 'ZWV0VmlldyIsdmV8fG51bGwsaWUpLHt9KX0oTWUsMCxNLE8pLEYuc2hlZXRGb3JtYXQpe3ZhciBodD17ZGVmYXVsdFJvd0hlaWdodDpGLnNoZWV0Rm9ybWF0LmRlZmF1bHRSb3dIZWlnaHR8fCIxNiIsYmFzZUNvbFdpZHRoOkYuc2hlZXRGb3JtYXQuYmFzZUNvbFdpZHRofHwiMTAifTtudWxs'@;
put 'IT1GLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyYmKGh0Lm91dGxpbmVMZXZlbFJvdz1GLnNoZWV0Rm9ybWF0Lm91dGxpbmVMZXZlbFJvdyksaWVbaWUubGVuZ3RoXT1kcigic2hlZXRGb3JtYXRQciIsbnVsbCxodCl9ZWxzZSBpZihNZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciBrdD17fSx1'@;
put 'dD0hMTtNZVsiIXNoZWV0Rm9ybWF0Il0ucm93JiYoTWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KHV0PSEwLGt0LmRlZmF1bHRSb3dIZWlnaHQ9TWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsa3QuY3VzdG9tSGVpZ2h0PTEpOk1lWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4Pyh1dD0hMCxr'@;
put 'dC5kZWZhdWx0Um93SGVpZ2h0PVkyKE1lWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxrdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT1NZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PU1lWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHxNZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikm'@;
put 'Jih1dD0hMCxrdC5kZWZhdWx0Um93SGVpZ2h0PWt0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LGt0LmN1c3RvbUhlaWdodD0xLGt0Lnplcm9IZWlnaHQ9MSksTWVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKGt0WyJ4MTRhYzpkeURlc2NlbnQiXT1NZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNj'@;
put 'ZW50KSksTWVbIiFzaGVldEZvcm1hdCJdLmNvbCYmKE1lWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHwkdShNZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxrdC5kZWZhdWx0Q29sV2lkdGg9TWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9IbHx8MCx1dD0hMCksbnVsbD09a3QuZGVmYXVsdFJv'@;
put 'd0hlaWdodCYmKGt0LmRlZmF1bHRSb3dIZWlnaHQ9MTYpLG51bGw9PWt0LmRlZmF1bHRDb2xXaWR0aCYmKGt0LmRlZmF1bHRDb2xXaWR0aD0xMCksa3Qub3V0bGluZUxldmVsUm93PWt0Lm91dGxpbmVMZXZlbFJvd3x8Nyx1dCYmKGllW2llLmxlbmd0aF09ZHIoInNoZWV0Rm9ybWF0UHIiLG51'@;
put 'bGwsa3QpKX1udWxsIT1NZVsiIWNvbHMiXSYmTWVbIiFjb2xzIl0ubGVuZ3RoPjAmJihpZVtpZS5sZW5ndGhdPWZ1bmN0aW9uIGlSKE0sRixPKXtmb3IodmFyIGllLEo9WyI8Y29scz4iXSxwZT0wO3BlIT1GLmxlbmd0aDsrK3BlKWlmKGllPUZbcGVdKXtpZihpZS5hdXRvJiZ1dihNLGllLHBl'@;
put 'KSxpZS5zfHxpZS56KXt2YXIgeWU9e3Q6InoifTtudWxsIT1pZS5zJiYoeWUucz1pZS5zKSxudWxsIT1pZS56JiYoeWUuej1pZS56KSxpZS5zdHlsZT1ydShPLmNlbGxYZnMsTy5jZWxsU3R5bGVYZnMseWUsTyl9SltKLmxlbmd0aF09ZHIoImNvbCIsbnVsbCxmNShwZSxpZSkpfXJldHVybiBK'@;
put 'W0oubGVuZ3RoXT0iPC9jb2xzPiIsSi5qb2luKCIiKX0oTWUsTWVbIiFjb2xzIl0sRikpLGllW3llPWllLmxlbmd0aF09IjxzaGVldERhdGEvPiIsTWVbIiFsaW5rcyJdPVtdLG51bGwhPU1lWyIhcmVmIl0mJih2ZT1mdW5jdGlvbiBUdihNLEYsTyxKKXt2YXIgTWUsdnQsaWU9W10scGU9W10s'@;
put 'eWU9Ym8oTVsiIXJlZiJdKSx2ZT0iIixqZT0iIixZZT1bXSxxZT0wLGl0PTAsaHQ9TVsiIXJvd3MiXSxrdD1BcnJheS5pc0FycmF5KE0pLHV0PXtyOmplfSxQdD0tMTtmb3IoaXQ9eWUucy5jO2l0PD15ZS5lLmM7KytpdClZZVtpdF09Zm8oaXQpO2ZvcihxZT15ZS5zLnI7cWU8PXllLmUucjsr'@;
put 'K3FlKXtmb3IocGU9W10samU9cnMocWUpLGl0PXllLnMuYztpdDw9eWUuZS5jOysraXQpe01lPVllW2l0XStqZTt2YXIgRHQ9a3Q/KE1bcWVdfHxbXSlbaXRdOk1bTWVdO3ZvaWQgMCE9PUR0JiZudWxsIT0odmU9cDQoRHQsTWUsTSxGKSkmJnBlLnB1c2godmUpfShwZS5sZW5ndGg+MHx8aHQm'@;
put 'Jmh0W3FlXSkmJih1dD17cjpqZX0saHQmJmh0W3FlXSYmKCh2dD1odFtxZV0pLmhpZGRlbiYmKHV0LmhpZGRlbj0xKSxQdD0tMSx2dC5ocHg/UHQ9WTIodnQuaHB4KTp2dC5ocHQmJihQdD12dC5ocHQpLFB0Pi0xJiYodXQuaHQ9UHQsdXQuY3VzdG9tSGVpZ2h0PTEpLHZ0LmxldmVsJiYodXQu'@;
put 'b3V0bGluZUxldmVsPXZ0LmxldmVsKSx2dC5keURlc2NlbnQmJih1dFsieDE0YWM6ZHlEZXNjZW50Il09dnQuZHlEZXNjZW50KSx2dC5zJiYodXQucz1ydShGLmNlbGxYZnMsRi5jZWxsU3R5bGVYZnMse3Q6InoiLHM6dnQuc30sRiksdXQuY3VzdG9tRm9ybWF0PTEpKSxpZVtpZS5sZW5ndGhd'@;
put 'PWRyKCJyb3ciLHBlLmpvaW4oIiIpLHV0KSl9aWYoaHQpZm9yKDtxZTxodC5sZW5ndGg7KytxZSlodCYmaHRbcWVdJiYodXQ9e3I6cWUrMX0sKHZ0PWh0W3FlXSkuaGlkZGVuJiYodXQuaGlkZGVuPTEpLFB0PS0xLHZ0LmhweD9QdD1ZMih2dC5ocHgpOnZ0LmhwdCYmKFB0PXZ0LmhwdCksUHQ+'@;
put 'LTEmJih1dC5odD1QdCx1dC5jdXN0b21IZWlnaHQ9MSksdnQubGV2ZWwmJih1dC5vdXRsaW5lTGV2ZWw9dnQubGV2ZWwpLGllW2llLmxlbmd0aF09ZHIoInJvdyIsIiIsdXQpKTtyZXR1cm4gaWUuam9pbigiIil9KE1lLEYpLHZlLmxlbmd0aD4wJiYoaWVbaWUubGVuZ3RoXT12ZSkpLGllLmxl'@;
put 'bmd0aD55ZSsxJiYoaWVbaWUubGVuZ3RoXT0iPC9zaGVldERhdGE+IixpZVt5ZV09aWVbeWVdLnJlcGxhY2UoIi8+IiwiPiIpKSxNZVsiIXByb3RlY3QiXSYmKGllW2llLmxlbmd0aF09ZnVuY3Rpb24gdFIoTSl7dmFyIEY9e3NoZWV0OjF9O3JldHVybiBNdi5mb3JFYWNoKGZ1bmN0aW9uKE8p'@;
put 'e251bGwhPU1bT10mJk1bT10mJihGW09dPSIxIil9KSxmUy5mb3JFYWNoKGZ1bmN0aW9uKE8pe251bGwhPU1bT10mJiFNW09dJiYoRltPXT0iMCIpfSksTS5wYXNzd29yZD9GLnBhc3N3b3JkPU82KE0ucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOk0uZW5jcnlwdGlvbiYm'@;
put 'KEYuYWxnb3JpdGhtTmFtZT1NLmVuY3J5cHRpb24uYWxnbyxGLmhhc2hWYWx1ZT1NLmVuY3J5cHRpb24uaGFzaCxGLnNhbHRWYWx1ZT1NLmVuY3J5cHRpb24uc2FsdCxGLnNwaW5Db3VudD1NLmVuY3J5cHRpb24uc3BpbiksZHIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxGKX0oTWVbIiFwcm90'@;
put 'ZWN0Il0pKSxudWxsIT1NZVsiIWF1dG9maWx0ZXIiXSYmKGllW2llLmxlbmd0aF09ZnVuY3Rpb24gc1IoTSxGLE8sSil7dmFyIGllPSJzdHJpbmciPT10eXBlb2YgTS5yZWY/TS5yZWY6QWkoTS5yZWYpO08uV29ya2Jvb2t8fChPLldvcmtib29rPXtTaGVldHM6W119KSxPLldvcmtib29rLk5h'@;
put 'bWVzfHwoTy5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIHBlPU8uV29ya2Jvb2suTmFtZXMseWU9SHMoaWUpO3llLnMucj09eWUuZS5yJiYoeWUuZS5yPUhzKEZbIiFyZWYiXSkuZS5yLGllPUFpKHllKSk7Zm9yKHZhciB2ZT0wO3ZlPHBlLmxlbmd0aDsrK3ZlKXt2YXIgTWU9cGVbdmVdO2lmKCJf'@;
put 'eGxubS5fRmlsdGVyRGF0YWJhc2UiPT1NZS5OYW1lJiZNZS5TaGVldD09Sil7TWUuUmVmPSInIitPLlNoZWV0TmFtZXNbSl0rIichIitpZTticmVha319cmV0dXJuIHZlPT1wZS5sZW5ndGgmJnBlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6SixSZWY6IiciK08u'@;
put 'U2hlZXROYW1lc1tKXSsiJyEiK2llfSksZHIoImF1dG9GaWx0ZXIiLG51bGwse3JlZjppZX0pfShNZVsiIWF1dG9maWx0ZXIiXSxNZSxPLE0pKSxudWxsIT1NZVsiIW1lcmdlcyJdJiZNZVsiIW1lcmdlcyJdLmxlbmd0aD4wJiYoaWVbaWUubGVuZ3RoXT1mdW5jdGlvbiB5dihNKXtpZigwPT09'@;
put 'TS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBGPSc8bWVyZ2VDZWxscyBjb3VudD0iJytNLmxlbmd0aCsnIj4nLE89MDtPIT1NLmxlbmd0aDsrK08pRis9JzxtZXJnZUNlbGwgcmVmPSInK0FpKE1bT10pKyciLz4nO3JldHVybiBGKyI8L21lcmdlQ2VsbHM+In0oTWVbIiFtZXJnZXMiXSkpLE1l'@;
put 'WyIhY29uZGZtdCJdJiYoaWVbaWUubGVuZ3RoXT1mdW5jdGlvbiBkUihNLEYpe3JldHVybiBNLm1hcChmdW5jdGlvbihPLEope3JldHVybiBmdW5jdGlvbiB1UihNLEYsTyl7dmFyIEo9TS5zP2h2KE8uRFhGLE0ucyk6LTEsaWU9InN0cmluZyI9PXR5cGVvZiBNLnJlZj9NLnJlZjpBaShNLnJl'@;
put 'ZikseWU9Ym8oaWUucmVwbGFjZSgvXHMuKiQvLCIiKSkuczt5ZS5yPDAmJih5ZS5yPTApLHllLmM8MCYmKHllLmM9MCk7dmFyIHZlPSIiLE1lPXtwcmlvcml0eTpGKzF9O3N3aXRjaChKPi0xJiYoTWUuZHhmSWQ9SiksTS50KXtjYXNlInVuaXF1ZSI6TWUudHlwZT0idW5pcXVlVmFsdWVzIjti'@;
put 'cmVhaztjYXNlImR1cCI6TWUudHlwZT0iZHVwbGljYXRlVmFsdWVzIjticmVhaztjYXNlImJsYW5rIjpNZS50eXBlPShNLnY/ImMiOiJub3RDIikrIm9udGFpbnNCbGFua3MiLHZlPSI8Zm9ybXVsYT5MRU4oVFJJTSgiK0RpKHllKSsiKSkiKyhNLnY/Ij0iOiImZ3Q7IikrIjA8L2Zvcm11bGE+'@;
put 'IjticmVhaztjYXNlImVycm9yIjpNZS50eXBlPShNLnY/ImMiOiJub3RDIikrIm9udGFpbnNFcnJvcnMiO2JyZWFrO2Nhc2UiZm9ybXVsYSI6TWUudHlwZT0iZXhwcmVzc2lvbiIsdmU9ZHIoImZvcm11bGEiLHlyKE0uZikse30pO2JyZWFrO2Nhc2UiZGF0ZSI6TWUudHlwZT0idGltZVBlcmlv'@;
put 'ZCIsTWUudGltZVBlcmlvZD1jUltNLm9wXTticmVhaztjYXNlInRleHQiOnN3aXRjaChNZS50eXBlPU1lLm9wZXJhdG9yPWc1W00ub3BdLE1lLnRleHQ9TS52LE0ub3Ape2Nhc2UiSU4iOnZlPSc8Zm9ybXVsYT5OT1QoSVNFUlJPUihTRUFSQ0goIicreXIoTS52KSsnIiwnK0RpKHllKSsiKSkp'@;
put 'PC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJPVCI6dmU9Jzxmb3JtdWxhPklTRVJST1IoU0VBUkNIKCInK3lyKE0udikrJyIsJytEaSh5ZSkrIikpPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJTVCI6dmU9Ijxmb3JtdWxhPkxFRlQoIitEaSh5ZSkrJyxMRU4oIicreXIoTS52KSsnIikpPSInK3lyKE0u'@;
put 'dikrJyI8L2Zvcm11bGE+JzticmVhaztjYXNlIk5EIjp2ZT0iPGZvcm11bGE+UklHSFQoIitEaSh5ZSkrJyxMRU4oIicreXIoTS52KSsnIikpPSInK3lyKE0udikrJyI8L2Zvcm11bGE+J31icmVhaztjYXNlInZhbCI6TWUudHlwZT0iY2VsbElzIixNZS5vcGVyYXRvcj1hOFtNLm9wXSx2ZT1u'@;
put 'dWxsIT1NLm1pbj9kcigiZm9ybXVsYSIseXIoU3RyaW5nKE0ubWluKSkse30pK2RyKCJmb3JtdWxhIix5cihTdHJpbmcoTS5tYXgpKSx7fSk6ZHIoImZvcm11bGEiLHlyKG51bGwhPU0udj9TdHJpbmcoInN0cmluZyI9PXR5cGVvZiBNLnY/JyInK00udi5yZXBsYWNlKC8iL2csJyIiJykrJyIn'@;
put 'Ok0udik6TS5mKSx7fSk7YnJlYWs7Y2FzZSJhdmciOnN3aXRjaChNZS50eXBlPSJhYm92ZUF2ZXJhZ2UiLE1lLmFib3ZlQXZlcmFnZT0iTCI9PU0ub3AuY2hhckF0KDApPyIwIjoiMSIsTS5vcC5jaGFyQXQoMSkpe2Nhc2UiVCI6TWUuZXF1YWxBdmVyYWdlPSIwIjticmVhaztjYXNlIkUiOk1l'@;
put 'LmVxdWFsQXZlcmFnZT0iMSI7YnJlYWs7ZGVmYXVsdDpNZS5zdGREZXY9TS5vcC5jaGFyQXQoMSl9YnJlYWs7Y2FzZSJyYW5rIjpNZS50eXBlPSJ0b3AxMCIsTWUuYm90dG9tPSJCIj09TS5vcC5jaGFyQXQoMCk/IjEiOiIwIixNZS5wZXJjZW50PSJQIj09TS5vcC5jaGFyQXQoMSk/IjEiOiIw'@;
put 'IixNZS5yYW5rPU0udjticmVhaztjYXNlImljb24iOk1lLnR5cGU9Imljb25TZXQiO3ZhciBqZT17aWNvblNldDpNLnYscGVyY2VudDpNLnBjdD8idHJ1ZSI6ImZhbHNlIn07TS5yZXYmJihqZS5yZXZlcnNlPSJ0cnVlIiksTS5oaWRkZW4mJihqZS5zaG93VmFsdWU9ImZhbHNlIiksdmU9ZHIo'@;
put 'Imljb25TZXQiLE0udGhyZXNoLm1hcChPMykuam9pbigiIiksamUpO2JyZWFrO2Nhc2Uic2NhbGUiOk1lLnR5cGU9ImNvbG9yU2NhbGUiLHZlKz1PMyhNLmNtaW4pLE0uY21pZCYmKHZlKz1PMyhNLmNtaWQpKSx2ZSs9TzMoTS5jbWF4KSx2ZSs9bzEoTS5jbWluLmNvbG9yKSxNLmNtaWQmJih2'@;
put 'ZSs9bzEoTS5jbWlkLmNvbG9yKSksdmU9ZHIoImNvbG9yU2NhbGUiLHZlKz1vMShNLmNtYXguY29sb3IpLHt9KTticmVhaztjYXNlImJhciI6TWUudHlwZT0iZGF0YUJhciIsdmUrPU8zKE0uY21pbiksdmUrPU8zKE0uY21heCksdmU9ZHIoImRhdGFCYXIiLHZlKz1vMShNLmNvbG9yKSx7fSk7'@;
put 'YnJlYWs7ZGVmYXVsdDp0aHJvdyBjb25zb2xlLmxvZyhNKSwiQ0YgbWlzc2luZyB0eXBlICIrTS50fXJldHVybic8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIHNxcmVmPSInK2llKyciPicrZHIoImNmUnVsZSIsIiI9PXZlP251bGw6dmUsTWUpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShP'@;
put 'LEosRil9KS5qb2luKCIiKX0oTWVbIiFjb25kZm10Il0sRikpLE1lWyIhdmFsaWRhdGlvbnMiXSYmKGllW2llLmxlbmd0aF09ZnVuY3Rpb24gX1MoTSl7aWYoIU18fDA9PU0ubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgRj1bXSxPPTAsSj0wO0o8TS5sZW5ndGg7KytKKXt2YXIgaWU9TVtKXSxw'@;
put 'ZT1HMVtpZS50XTtpZihpZS5yZWYmJigic3RyaW5nIiE9dHlwZW9mIGllLnJlZnx8LTEhPWllLnJlZi5pbmRleE9mKCIgIil8fChpZS5yZWY9Ym8oaWUucmVmKSxpZS5yZWYucyYmIShpZS5yZWYucy5jPDApKSkpeysrTzt2YXIgeWU9e3R5cGU6cGUsYWxsb3dCbGFuazorKDAhPWllLmJsYW5r'@;
put 'KSxzaG93SW5wdXRNZXNzYWdlOisoMCE9aWUuaW5wdXQpLHNob3dFcnJvck1lc3NhZ2U6KygwIT1pZS5lcnJvciksc3FyZWY6InN0cmluZyI9PXR5cGVvZiBpZS5yZWY/aWUucmVmOkFpKGllLnJlZil9O2lmKGllLmlucHV0JiYoaWUuaW5wdXQudGl0bGUmJih5ZS5wcm9tcHRUaXRsZT1JaShp'@;
put 'ZS5pbnB1dC50aXRsZSkpLGllLmlucHV0Lm1lc3NhZ2UmJih5ZS5wcm9tcHQ9SWkoaWUuaW5wdXQubWVzc2FnZSkpKSxpZS5lcnJvciYmKGllLmVycm9yLnRpdGxlJiYoeWUuZXJyb3JUaXRsZT1JaShpZS5lcnJvci50aXRsZSkpLGllLmVycm9yLm1lc3NhZ2UmJih5ZS5lcnJvcj1JaShpZS5l'@;
put 'cnJvci5tZXNzYWdlKSksaWUuZXJyb3Iuc3R5bGUmJih5ZS5lcnJvclN0eWxlPWllLmVycm9yLnN0eWxlKSksIXBlKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBlICIraWUudCk7dmFyIHZlPSIiO3N3aXRjaChpZS50KXtjYXNlIkFueSI6YnJlYWs7'@;
put 'Y2FzZSJMaXN0IjpjYXNlIkN1c3RvbSI6aWYoaWUubCl7aWYoaWUubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2VycyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3ZlPSc8Zm9ybXVs'@;
put 'YTE+IicreXIoaWUubC5qb2luKCIsIikpKyciPC9mb3JtdWxhMT4nfWVsc2UgdmU9Ijxmb3JtdWxhMT4iK3lyKGllLmYpKyI8L2Zvcm11bGExPiI7YnJlYWs7Y2FzZSJEYXRlIjpjYXNlIlRpbWUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiV2hvbGUiOmlmKCFhOFtpZS5vcF0p'@;
put 'dGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitpZS5vcCsiIGZvciAiK2llLnQpO2lmKHllLm9wZXJhdG9yPWE4W2llLm9wXSxudWxsIT1pZS52KXZlPSI8Zm9ybXVsYTE+Iit5cihTdHJpbmcoaWUudiBpbnN0YW5jZW9mIERhdGU/R2UoaWUudik6aWUudikpKyI8'@;
put 'L2Zvcm11bGExPiI7ZWxzZXtpZihudWxsPT1pZS5taW58fG51bGw9PWllLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK2llLnQpO3ZlPSI8Zm9ybXVsYTE+Iit5cihTdHJpbmcoaWUubWluIGlu'@;
put 'c3RhbmNlb2YgRGF0ZT9HZShpZS5taW4pOmllLm1pbikpKyI8L2Zvcm11bGExPjxmb3JtdWxhMj4iK3lyKFN0cmluZyhpZS5tYXggaW5zdGFuY2VvZiBEYXRlP0dlKGllLm1heCk6aWUubWF4KSkrIjwvZm9ybXVsYTI+In19Ri5wdXNoKGRyKCJkYXRhVmFsaWRhdGlvbiIsdmV8fG51bGwseWUp'@;
put 'KX19cmV0dXJuIE8+MD8nPGRhdGFWYWxpZGF0aW9ucyBjb3VudD0iJytPKyciPicrRi5qb2luKCIiKSsiPC9kYXRhVmFsaWRhdGlvbnM+IjoiIn0oTWVbIiF2YWxpZGF0aW9ucyJdKSk7dmFyIFB0LHZ0PS0xLER0PS0xO2lmKE1lWyIhbGlua3MiXS5sZW5ndGg+MCYmKGllW2llLmxlbmd0aF09'@;
put 'IjxoeXBlcmxpbmtzPiIsTWVbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24odW4pe3VuWzFdLlRhcmdldCYmKFB0PXtyZWY6dW5bMF19LCIjIiE9dW5bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKER0PXZyKEosLTEseXIodW5bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIiksX28uSExJTksp'@;
put 'LFB0WyJyOmlkIl09InJJZCIrRHQpLCh2dD11blsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKFB0LmxvY2F0aW9uPXlyKHVuWzFdLlRhcmdldC5zbGljZSh2dCsxKSkpLHVuWzFdLlRvb2x0aXAmJihQdC50b29sdGlwPXlyKHVuWzFdLlRvb2x0aXApKSxpZVtpZS5sZW5ndGhdPWRyKCJo'@;
put 'eXBlcmxpbmsiLG51bGwsUHQpKX0pLGllW2llLmxlbmd0aF09IjwvaHlwZXJsaW5rcz4iKSxkZWxldGUgTWVbIiFsaW5rcyJdLGl0KXt2YXIgQXQ9ZnVuY3Rpb24gSkkoTSl7aWYoTS5wcm9wcyl7dmFyIEY9e30sTz1NLnByb3BzO3JldHVybiBPLmdyaWRsaW5lcyYmKEYuZ3JpZExpbmVzPUYu'@;
put 'Z3JpZExpbmVzU2V0PTEpLE8uaGVhZGluZ3MmJihGLmhlYWRpbmdzPTEpLE8uY2VudGVyWCYmKEYuaG9yaXpvbnRhbENlbnRlcmVkPTEpLE8uY2VudGVyWSYmKEYudmVydGljYWxDZW50ZXJlZD0xKSxkcigicHJpbnRPcHRpb25zIixudWxsLEYpfXJldHVybiIifShpdCk7QXQubGVuZ3RoJiYo'@;
put 'aWVbaWUubGVuZ3RoXT1BdCl9aWYoKG51bGwhPU1lWyIhbWFyZ2lucyJdfHxpdCYmaXQubWFyZ2lucykmJihpZVtpZS5sZW5ndGhdPWZ1bmN0aW9uIHJSKE0pe3JldHVybiBxMihNKSxkcigicGFnZU1hcmdpbnMiLG51bGwsTSl9KE1lWyIhbWFyZ2lucyJdfHxpdC5tYXJnaW5zKSksaXQpe3Zh'@;
put 'ciBadD1mdW5jdGlvbiBoUyhNKXtpZihNLnByb3BzKXt2YXIgRj17fSxPPU0ucHJvcHM7aWYoTy5vcmllbnRhdGlvbiYmKEYub3JpZW50YXRpb249Ty5vcmllbnRhdGlvbiksTy5zY2FsZSYmKEYuc2NhbGU9Ty5zY2FsZSksTy5maXQmJihudWxsIT1PLmZpdC5oZWlnaHQmJihGLmZpdFRvSGVp'@;
put 'Z2h0PU8uZml0LmhlaWdodCksbnVsbCE9Ty5maXQud2lkdGgmJihGLmZpdFRvV2lkdGg9Ty5maXQud2lkdGgpKSxPLmRwaSYmKEYuaG9yaXpvbnRhbERwaT1GLnZlcnRpY2FsRHBpPU8uZHBpKSxudWxsIT1PLmZpcnN0JiYoRi5maXJzdFBhZ2VOdW1iZXI9Ty5maXJzdCxGLnVzZUZpcnN0UGFn'@;
put 'ZU51bWJlcj0xKSxPLmJ3JiYoRi5ibGFja0FuZFdoaXRlPTEpLE8uZHJhZnQmJihGLmRyYWZ0PTEpLE8uY29tbWVudHMmJihGLmNlbGxDb21tZW50cz1hU1tPLmNvbW1lbnRzXXx8Im5vbmUiKSxPLmVycm9ycyYmKEYuZXJyb3JzPWNTW08uZXJyb3JzXXx8Im5vbmUiKSxPLnBhcGVyKXN3aXRj'@;
put 'aCh0eXBlb2YgTy5wYXBlcil7Y2FzZSJudW1iZXIiOkYucGFwZXJTaXplPU8ucGFwZXI7YnJlYWs7Y2FzZSJzdHJpbmciOmVJW08ucGFwZXJdP0YucGFwZXJTaXplPWVJW08ucGFwZXJdOitPLnBhcGVyJiYoRi5wYXBlclNpemU9K08ucGFwZXIpO2JyZWFrO2Nhc2Uib2JqZWN0IjppZighTy5w'@;
put 'YXBlci5oZWlnaHR8fCFPLnBhcGVyLndpZHRoKXRocm93IkN1c3RvbSBQYXBlciBTaXplIG11c3QgaW5jbHVkZSB3aWR0aCBhbmQgaGVpZ2h0ISI7Ri5wYXBlckhlaWdodD1PLnBhcGVyLmhlaWdodCxGLnBhcGVyV2lkdGg9Ty5wYXBlci53aWR0aH1yZXR1cm5bMSwhMCwidHJ1ZSIsIm92ZXIi'@;
put 'XS5pbmRleE9mKE8ub3JkZXIpPi0xJiYoRi5wYWdlT3JkZXI9Im92ZXJUaGVuRG93biIpLGRyKCJwYWdlU2V0dXAiLG51bGwsRil9cmV0dXJuIiJ9KGl0KTtadC5sZW5ndGgmJihpZVtpZS5sZW5ndGhdPVp0KSxadD1mdW5jdGlvbiBsUihNKXt2YXIgRj1bXSxPPSIiLEo9IiIsaWU9IiIscGU9'@;
put 'IiIseWU9IiIsdmU9IiIsTWU9IiIsamU9S3UoTS5oZWFkZXIpO2plLmxlbmd0aCYmKEo9amVbMF0sdmU9amVbMV0scGU9amVbMl0pO3ZhciBZZT1LdShNLmZvb3Rlcik7cmV0dXJuIFllLmxlbmd0aCYmKGllPVllWzBdLE1lPVllWzFdLHllPVllWzJdKSxKJiZGLnB1c2goIjxvZGRIZWFkZXI+'@;
put 'Iit5cihKKSsiPC9vZGRIZWFkZXI+IiksaWUmJkYucHVzaCgiPG9kZEZvb3Rlcj4iK3lyKGllKSsiPC9vZGRGb290ZXI+IiksKHllIT1pZXx8cGUhPUopJiYoTys9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsRi5wdXNoKCI8ZXZlbkhlYWRlcj4iK3lyKHBlKSsiPC9ldmVuSGVhZGVyPiIpLEYu'@;
put 'cHVzaCgiPGV2ZW5Gb290ZXI+Iit5cih5ZSkrIjwvZXZlbkZvb3Rlcj4iKSksKE1lIT1pZXx8dmUhPUopJiYoTys9JyBkaWZmZXJlbnRGaXJzdD0iMSInLEYucHVzaCgiPGZpcnN0SGVhZGVyPiIreXIodmUpKyI8L2ZpcnN0SGVhZGVyPiIpLEYucHVzaCgiPGZpcnN0Rm9vdGVyPiIreXIoTWUp'@;
put 'KyI8L2ZpcnN0Rm9vdGVyPiIpKSxGLmxlbmd0aD8iPGhlYWRlckZvb3RlciIrTysiPiIrRi5qb2luKCIiKSsiPC9oZWFkZXJGb290ZXI+IjoiIn0oaXQpLFp0Lmxlbmd0aCYmKGllW2llLmxlbmd0aF09WnQpfWlmKChudWxsIT1NZVsiIXJvd0JyZWFrcyJdfHxpdCYmaXQucm93QnJlYWtzKSYm'@;
put 'KGllW2llLmxlbmd0aF09ZnVuY3Rpb24gZVIoTSl7aWYoMD09TS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBGPVsnPHJvd0JyZWFrcyBjb3VudD0iJytNLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK00ubGVuZ3RoKyciPiddLE89MDtPPE0ubGVuZ3RoOysrTylGLnB1c2goJzxicmsg'@;
put 'aWQ9IicrTVtPXS5SKyciIG1hbj0iMSIvPicpO3JldHVybiBGLmpvaW4oIiIpKyI8L3Jvd0JyZWFrcz4ifShNZVsiIXJvd0JyZWFrcyJdfHxpdC5yb3dCcmVha3MpKSwobnVsbCE9TWVbIiFjb2xCcmVha3MiXXx8aXQmJml0LmNvbEJyZWFrcykmJihpZVtpZS5sZW5ndGhdPWZ1bmN0aW9uIHd2'@;
put 'KE0pe2lmKDA9PU0ubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgRj1bJzxjb2xCcmVha3MgY291bnQ9IicrTS5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytNLmxlbmd0aCsnIj4nXSxPPTA7TzxNLmxlbmd0aDsrK08pRi5wdXNoKCc8YnJrIGlkPSInK01bT10uQysnIiBtYW49IjEiLz4n'@;
put 'KTtyZXR1cm4gRi5qb2luKCIiKSsiPC9jb2xCcmVha3M+In0oTWVbIiFjb2xCcmVha3MiXXx8aXQuY29sQnJlYWtzKSksKCFGfHxGLmlnbm9yZUVDfHxudWxsPT1GLmlnbm9yZUVDKSYmKGllW2llLmxlbmd0aF09cm8oImlnbm9yZWRFcnJvcnMiLGRyKCJpZ25vcmVkRXJyb3IiLG51bGwse251'@;
put 'bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOmplfSkpKSxNZVsiIWNoYXJ0cyJdJiZxZS5wdXNoLmFwcGx5KHFlLE1lWyIhY2hhcnRzIl0pLE1lWyIhaW1hZ2VzIl0mJnFlLnB1c2guYXBwbHkocWUsTWVbIiFpbWFnZXMiXSksTWVbIiFzaGFwZXMiXSYmcWUucHVzaC5hcHBseShxZSxNZVsiIXNo'@;
put 'YXBlcyJdKSxxZS5sZW5ndGg+MCYmKER0PXZyKEosLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhNKzEpKyIueG1sIixfby5EUkFXKSxpZVtpZS5sZW5ndGhdPWRyKCJkcmF3aW5nIixudWxsLHsicjppZCI6InJJZCIrRHR9KSxNZVsiIWRyYXdpbmciXT1xZSksKE1lWyIhY29tbWVudHMiXS5s'@;
put 'ZW5ndGg+MHx8KE1lWyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wKSYmKER0PXZyKEosLTEsIi4uL2RyYXdpbmdzL3ZtbERyYXdpbmciKyhNKzEpKyIudm1sIixfby5WTUwpLGllW2llLmxlbmd0aF09ZHIoImxlZ2FjeURyYXdpbmciLG51bGwseyJyOmlkIjoicklkIitEdH0pLE1lWyIhbGVn'@;
put 'YWN5Il09RHQpLE1lWyIhcHJpbnQiXSYmTWVbIiFwcmludCJdLmltYWdlcyl7dmFyIGduPU1lWyIhcHJpbnQiXS5pbWFnZXMscW49MDtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rpb24odW4pe2duW3VuXSYmWyJvZGQiLCJldmVuIiwiZmlyc3QiXS5mb3JFYWNoKGZ1bmN0aW9u'@;
put 'KEpuKXtnblt1bl1bSm5dJiZbImxlZnQiLCJyaWdodCIsImNlbnRlciJdLmZvckVhY2goZnVuY3Rpb24oWW4pe2lmKEFycmF5LmlzQXJyYXkoZ25bdW5dW0puXVtZbl0pKWZvcih2YXIgTG49MDtMbjxnblt1bl1bSm5dW1luXS5sZW5ndGg7KytMbilnblt1bl1bSm5dW1luXVtMbl0mJihnblt1'@;
put 'bl1bSm5dW1luXVtMbl0uX2NudD1xbisrKX0pfSl9KSxxbj4wJiYoRHQ9dnIoSiwtMSwiLi4vZHJhd2luZ3Mvdm1sRHJhd2luZyIrKE0rMSkrIkhGLnZtbCIsX28uVk1MKSxpZVtpZS5sZW5ndGhdPWRyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitEdH0pLE1lWyIhbGVn'@;
put 'YWN5SEYiXT1EdCl9cmV0dXJuKE1lWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKGllW2llLmxlbmd0aF09Jzx0YWJsZVBhcnRzIGNvdW50PSInK01lWyIhdGFibGVzIl0ubGVuZ3RoKyciPicsTWVbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKHVuLEpuKXtEdD12cihKLC0xLCIuLi90'@;
put 'YWJsZXMvdGFibGUiKyhNKzEpKyJfIitKbisiLnhtbCIsX28uVEFCTEUpLGllW2llLmxlbmd0aF09Jzx0YWJsZVBhcnQgcjppZD0icklkJytEdCsnIi8+J30pLGllW2llLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxpZS5sZW5ndGg+MSYmKGllW2llLmxlbmd0aF09Ijwvd29ya3NoZWV0PiIs'@;
put 'aWVbMV09aWVbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGllLmpvaW4oIiIpfWZ1bmN0aW9uIHBSKE0sRixPLEope3ZhciBpZT1mdW5jdGlvbiBmUihNLEYsTyl7dmFyIEo9Z3IoMTQ1KSxpZT0oT1siIXJvd3MiXXx8W10pW01dfHx7fTtKLndyaXRlX3NoaWZ0KDQsTSksSi53cml0ZV9zaGlmdCg0'@;
put 'LDApO3ZhciBwZT0zMjA7aWUuaHB4P3BlPTIwKlkyKGllLmhweCk6aWUuaHB0JiYocGU9MjAqaWUuaHB0KSxKLndyaXRlX3NoaWZ0KDIscGUpLEoud3JpdGVfc2hpZnQoMSwwKTt2YXIgeWU9MDtpZS5sZXZlbCYmKHllfD1pZS5sZXZlbCksaWUuaGlkZGVuJiYoeWV8PTE2KSwoaWUuaHB4fHxp'@;
put 'ZS5ocHQpJiYoeWV8PTMyKSxKLndyaXRlX3NoaWZ0KDEseWUpLEoud3JpdGVfc2hpZnQoMSwwKTt2YXIgdmU9MCxNZT1KLmw7Si5sKz00O2Zvcih2YXIgamU9e3I6TSxjOjB9LFllPTA7WWU8MTY7KytZZSlpZighKEYucy5jPlllKzE8PDEwfHxGLmUuYzxZZTw8MTApKXtmb3IodmFyIHFlPS0x'@;
put 'LGl0PS0xLGh0PVllPDwxMDtodDxZZSsxPDwxMDsrK2h0KWplLmM9aHQsKEFycmF5LmlzQXJyYXkoTyk/KE9bamUucl18fFtdKVtqZS5jXTpPW0RpKGplKV0pJiYocWU8MCYmKHFlPWh0KSxpdD1odCk7cWU8MHx8KCsrdmUsSi53cml0ZV9zaGlmdCg0LHFlKSxKLndyaXRlX3NoaWZ0KDQsaXQp'@;
put 'KX12YXIgdXQ9Si5sO3JldHVybiBKLmw9TWUsSi53cml0ZV9zaGlmdCg0LHZlKSxKLmw9dXQsSi5sZW5ndGg+Si5sP0ouc2xpY2UoMCxKLmwpOkp9KEosTyxGKTsoaWUubGVuZ3RoPjE3fHwoRlsiIXJvd3MiXXx8W10pW0pdKSYmZ2koTSwiQnJ0Um93SGRyIixpZSl9dmFyIG1SPVNsLGdSPUEx'@;
put 'O2Z1bmN0aW9uIGtSKE0pe3JldHVybltVMChNKSxoYShNKSwibiJdfXZhciB4Uz1TbCx4NT1BMSxEUz1bImxlZnQiLCJyaWdodCIsInRvcCIsImJvdHRvbSIsImhlYWRlciIsImZvb3RlciJdLEFTPVsiQW55IiwiV2hvbGUiLCJEZWNpbWFsIiwiTGlzdCIsIkRhdGUiLCJUaW1lIiwiTGVuZ3Ro'@;
put 'IiwiQ3VzdG9tIl0sT3Y9WyJJTiIsIk9UIiwiRVEiLCJORSIsIkdUIiwiTFQiLCJHRSIsIkxFIl07ZnVuY3Rpb24gTFMoTSl7dmFyIEY9Z3IoNCksTz1bRl0sSj1BUy5pbmRleE9mKE0udCk7aWYoSjwwKXRocm93IG5ldyBFcnJvcigiQmFkIHZhbGlkYXRpb246IHVucmVjb2duaXplZCB0eXBl'@;
put 'ICIrTS50KTt2YXIgcGU9T3YuaW5kZXhPZihNLm9wKTtzd2l0Y2goSil7Y2FzZSAwOmNhc2UgMzpjYXNlIDc6cGU9MDticmVhaztkZWZhdWx0OmlmKC0xPT1wZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb24gdHlwZSAiK00ub3ArIiBmb3IgIitNLnQpfUYud3JpdGVfc2hp'@;
put 'ZnQoMSwwfEopLEYud3JpdGVfc2hpZnQoMSwxKSxGLndyaXRlX3NoaWZ0KDEsMTJ8cGU8PDQpLEYud3JpdGVfc2hpZnQoMSwwKSxPLnB1c2goZnVuY3Rpb24gU2QoTSl7dmFyIEY9TS5zcGxpdCgvXHMqLFxzKi8pLE89Z3IoNCk7Ty53cml0ZV9zaGlmdCg0LEYubGVuZ3RoKTt2YXIgSj1bT107'@;
put 'cmV0dXJuIEYuZm9yRWFjaChmdW5jdGlvbihpZSl7Si5wdXNoKEExKGJvKGllKSkpfSkseChKKX0oInN0cmluZyI9PXR5cGVvZiBNLnJlZj9NLnJlZjpBaShNLnJlZikpKTt2YXIgeWU9Z3IoMTYpO3llLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSkseWUud3JpdGVfc2hpZnQoNCw0Mjk0OTY3'@;
put 'Mjk1KSx5ZS53cml0ZV9zaGlmdCg0LDQyOTQ5NjcyOTUpLHllLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksTy5wdXNoKHllKTt2YXIgdmU9Z3IoOCk7dmUud3JpdGVfc2hpZnQoNCwwKSx2ZS53cml0ZV9zaGlmdCg0LDApO3ZhciBNZT0xO3N3aXRjaChNLnQpe2Nhc2UiQW55IjpPLnB1c2go'@;
put 'dmUpLE8ucHVzaCh2ZSk7YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9TS52fHxudWxsIT1NLmYpTy5wdXNoKCJudW1iZXIiPT10eXBlb2YgTS52P292KE0udik6STMobnVsbD09TS52P00uZjpNLnYpKTtlbHNle2lmKG51bGw9PU0ubWlufHxu'@;
put 'dWxsPT1NLm1heCl0aHJvdyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK00udDtPLnB1c2goIm51bWJlciI9PXR5cGVvZiBNLm1pbj9vdihNLm1pbik6STMoTS5taW4pKSxPLnB1c2goIm51bWJlciI9PXR5cGVvZiBN'@;
put 'Lm1heD9vdihNLm1heCk6STMoTS5tYXgpKSxNZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9TS5sKXtPLnB1c2goc3YoTS5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPU0uZil7Ty5wdXNoKEkzKE0uZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVkIERh'@;
put 'dGEgVmFsaWRhdGlvbjogYGZgIisoIkxpc3QiPT1NLnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIrTS50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIrTS50fXJldHVybiAxPT1NZSYmTy5wdXNoKHZlKSx4KE8p'@;
put 'fWZ1bmN0aW9uIFVSKE0sRixPLEosaWUscGUseWUpe2lmKHZvaWQgMD09PUYudiYmbnVsbD09Ri5zfHwieiI9PT1GLnQmJiFpZS5zaGVldFN0dWJzKXJldHVybiExO3ZhciB2ZT0iIjtzd2l0Y2goRi50KXtjYXNlImIiOnZlPUYudj8iMSI6IjAiO2JyZWFrO2Nhc2UiZCI6KEY9WHQoRikpLno9'@;
put 'Ri56fHxDLl90YWJsZVsxNF0sRi52PUdlKEZ0KEYudikpLEYudD0ibiI7YnJlYWs7Y2FzZSJuIjpjYXNlImUiOnZlPSIiK0YudjticmVhaztkZWZhdWx0OnZlPUYudn12YXIgTWU9e3I6TyxjOkp9O3N3aXRjaChNZS5zPXJ1KGllLmNlbGxYZnMsaWUuY2VsbFN0eWxlWGZzLEYsaWUpLEYubCYm'@;
put 'cGVbIiFsaW5rcyJdLnB1c2goW0RpKE1lKSxGLmxdKSxGLmMmJnBlWyIhY29tbWVudHMiXS5wdXNoKFtEaShNZSksRi5jXSksRi50KXtjYXNlInMiOmNhc2Uic3RyIjppZihpZS5ib29rU1NUKXtpZih2ZT1jdihpZS5TdHJpbmdzLEYudixGLlI/Ri5yPWFhKEYuUik6bnVsbCxpZS5yZXZTdHJp'@;
put 'bmdzKSxGLlIpZm9yKHZhciBqZT0wO2plPEYuUi5sZW5ndGg7KytqZSlGLlJbamVdLnMmJnJ1KGllLmNlbGxYZnMsaWUuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpGLlJbamVdLnN9LGllKTtNZS50PSJzIixNZS52PXZlLHllP2dpKE0sIkJydFNob3J0SXNzdCIsZnVuY3Rpb24gdTgoTSxG'@;
put 'LE8pe3JldHVybiBudWxsPT1PJiYoTz1ncig4KSksVnIoRixPKSxPLndyaXRlX3NoaWZ0KDQsRi52KSxPfSgwLE1lKSk6Z2koTSwiQnJ0Q2VsbElzc3QiLGZ1bmN0aW9uIENSKE0sRixPKXtyZXR1cm4gbnVsbD09TyYmKE89Z3IoMTIpKSxmcihGLE8pLE8ud3JpdGVfc2hpZnQoNCxGLnYpLE99'@;
put 'KDAsTWUpKX1lbHNlIE1lLnQ9InN0ciIseWU/Z2koTSwiQnJ0U2hvcnRTdCIsZnVuY3Rpb24gSVIoTSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncig4KzQqTS52Lmxlbmd0aCkpLFZyKEYsTyksQ2woTS52LE8pLE8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPfShGLE1lKSk6Z2koTSwi'@;
put 'QnJ0Q2VsbFN0IixmdW5jdGlvbiBBUihNLEYsTyl7cmV0dXJuIG51bGw9PU8mJihPPWdyKDEyKzQqTS52Lmxlbmd0aCkpLGZyKEYsTyksQ2woTS52LE8pLE8ubGVuZ3RoPk8ubD9PLnNsaWNlKDAsTy5sKTpPfShGLE1lKSk7cmV0dXJuITA7Y2FzZSJuIjpyZXR1cm4gRi52PT0oMHxGLnYpJiZG'@;
put 'LnY+LTFlMyYmRi52PDFlMz95ZT9naShNLCJCcnRTaG9ydFJrIixmdW5jdGlvbiBEUihNLEYsTyl7cmV0dXJuIG51bGw9PU8mJihPPWdyKDgpKSxWcihGLE8pLERwKE0udixPKSxPfShGLE1lKSk6Z2koTSwiQnJ0Q2VsbFJrIixmdW5jdGlvbiBUUihNLEYsTyl7cmV0dXJuIG51bGw9PU8mJihP'@;
put 'PWdyKDEyKSksZnIoRixPKSxEcChNLnYsTyksT30oRixNZSkpOnllP2dpKE0sIkJydFNob3J0UmVhbCIsZnVuY3Rpb24gZFcoTSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncigxMikpLFZyKEYsTyksZWMoTS52LE8pLE99KEYsTWUpKTpnaShNLCJCcnRDZWxsUmVhbCIsZnVuY3Rpb24geFIo'@;
put 'TSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncigxNikpLGZyKEYsTyksZWMoTS52LE8pLE99KEYsTWUpKSwhMDtjYXNlImIiOnJldHVybiBNZS50PSJiIix5ZT9naShNLCJCcnRTaG9ydEJvb2wiLGZ1bmN0aW9uIER2KE0sRixPKXtyZXR1cm4gbnVsbD09TyYmKE89Z3IoNSkpLFZyKEYsTyks'@;
put 'Ty53cml0ZV9zaGlmdCgxLE0udj8xOjApLE99KEYsTWUpKTpnaShNLCJCcnRDZWxsQm9vbCIsZnVuY3Rpb24gd1IoTSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncig5KSksZnIoRixPKSxPLndyaXRlX3NoaWZ0KDEsTS52PzE6MCksT30oRixNZSkpLCEwO2Nhc2UiZSI6cmV0dXJuIE1lLnQ9'@;
put 'ImUiLHllP2dpKE0sIkJydFNob3J0RXJyb3IiLGZ1bmN0aW9uIHRsKE0sRixPKXtyZXR1cm4gbnVsbD09TyYmKE89Z3IoOCkpLFZyKEYsTyksTy53cml0ZV9zaGlmdCgxLE0udiksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMSwwKSxPfShGLE1lKSk6Z2koTSwiQnJ0Q2VsbEVy'@;
put 'cm9yIixmdW5jdGlvbiBNNShNLEYsTyl7cmV0dXJuIG51bGw9PU8mJihPPWdyKDkpKSxmcihGLE8pLE8ud3JpdGVfc2hpZnQoMSxNLnYpLE99KEYsTWUpKSwhMH1yZXR1cm4geWU/Z2koTSwiQnJ0U2hvcnRCbGFuayIsZnVuY3Rpb24gTVMoTSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncig0'@;
put 'KSksVnIoRixPKX0oMCxNZSkpOmdpKE0sIkJydENlbGxCbGFuayIsZnVuY3Rpb24gdlIoTSxGLE8pe3JldHVybiBudWxsPT1PJiYoTz1ncig4KSksZnIoRixPKX0oMCxNZSkpLCEwfWZ1bmN0aW9uIGc0KE0sRixPLEope3ZhciBpZT1SbCgpLHBlPU8uU2hlZXROYW1lc1tNXSx5ZT1PLlNoZWV0'@;
put 'c1twZV18fHt9LHZlPXBlO3RyeXtPJiZPLldvcmtib29rJiYodmU9Ty5Xb3JrYm9vay5TaGVldHNbTV0uQ29kZU5hbWV8fHZlKX1jYXRjaHt9dmFyIE1lPWJvKHllWyIhcmVmIl18fCJBMSIpO2lmKE1lLmUuYz4xNjM4M3x8TWUuZS5yPjEwNDg1NzUpe2lmKEYuV1RGKXRocm93IG5ldyBFcnJv'@;
put 'cigiUmFuZ2UgIisoeWVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpYRkQxMDQ4NTc2Iik7TWUuZS5jPU1hdGgubWluKE1lLmUuYywxNjM4MyksTWUuZS5yPU1hdGgubWluKE1lLmUuYywxMDQ4NTc1KX1yZXR1cm4geWVbIiFsaW5rcyJdPVtdLHllWyIhY29tbWVu'@;
put 'dHMiXT1bXSxnaShpZSwiQnJ0QmVnaW5TaGVldCIpLChPLnZiYXJhd3x8eWVbIiFvdXRsaW5lIl0pJiZnaShpZSwiQnJ0V3NQcm9wIixmdW5jdGlvbiBfUihNLEYsTyl7bnVsbD09TyYmKE89Z3IoODQrNCpNLmxlbmd0aCkpO3ZhciBKPTE5MjtGJiYoRi5hYm92ZSYmKEomPS02NSksRi5sZWZ0'@;
put 'JiYoSiY9LTEyOSkpLE8ud3JpdGVfc2hpZnQoMSxKKTtmb3IodmFyIGllPTE7aWU8MzsrK2llKU8ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gTDEoe2F1dG86MX0sTyksTy53cml0ZV9zaGlmdCgtNCwtMSksTy53cml0ZV9zaGlmdCgtNCwtMSksRDIoTSxPKSxPLnNsaWNlKDAsTy5sKX0odmUs'@;
put 'eWVbIiFvdXRsaW5lIl0pKSxnaShpZSwiQnJ0V3NEaW0iLGdSKE1lKSksZnVuY3Rpb24gJFIoTSxGLE8pe2dpKE0sIkJydEJlZ2luV3NWaWV3cyIpLGdpKE0sIkJydEJlZ2luV3NWaWV3IixmdW5jdGlvbiBFNShNLEYsTyl7bnVsbD09TyYmKE89Z3IoMzApKTt2YXIgSj05MjQ7cmV0dXJuKCgo'@;
put 'Rnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJihKfD0zMiksZG4oTVsiIWdyaWRsaW5lcyJdKSYmKEomPS01KSxkbigoKChGfHx7fSkuVmlld3N8fFtdKVswXXx8e30pLmdyaWQpJiYoSiY9LTUpLE8ud3JpdGVfc2hpZnQoMixKKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlm'@;
put 'dCg0LDApLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDEsMCksTy53cml0ZV9zaGlmdCgxLDApLE8ud3JpdGVfc2hpZnQoMiwwKSxPLndyaXRlX3NoaWZ0KDIsMTAwKSxPLndyaXRlX3NoaWZ0KDIsMCksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMiwwKSxPLndy'@;
put 'aXRlX3NoaWZ0KDQsMCksT30oRixPKSksRlsiIWZyZWV6ZSJdJiZnaShNLCJCcnRQYW5lIixmdW5jdGlvbiBPUihNKXt2YXIgRj1ocyhNWyIhZnJlZXplIl0pLE89Z3IoMjkpO3JldHVybiBPLndyaXRlX3NoaWZ0KDgsRi5jLCJmIiksTy53cml0ZV9zaGlmdCg4LEYuciwiZiIpLE8ud3JpdGVf'@;
put 'c2hpZnQoNCxGLnIpLE8ud3JpdGVfc2hpZnQoNCxGLmMpLE8ud3JpdGVfc2hpZnQoNCwwKSxPLndyaXRlX3NoaWZ0KDEsMyksT30oRikpLEZbIiFzZWwiXSYmZ2koTSwiQnJ0U2VsIixmdW5jdGlvbiBQUihNLEYpe3ZhciBPPWdyKDM2KSxKPU0uY2VsbDtpZighSil7aWYoIU0ucmFuZ2UpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJNdXN0IHNwZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO0o9RGkoSHMoTS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zKX12YXIgaWU9InN0cmluZyI9PXR5cGVvZiBKP2hzKEopOko7aWYoRil7dmFyIHBlPSJzdHJpbmciPT10eXBlb2YgRj9ocyhG'@;
put 'KTpGO08ud3JpdGVfc2hpZnQoNCxpZS5yPj1wZS5yJiZpZS5jPj1wZS5jPzA6aWUucj49cGUuciYmaWUuYzxwZS5jPzI6aWUucjxwZS5yJiZpZS5jPj1wZS5jPzE6Myl9ZWxzZSBPLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIE8ud3JpdGVfc2hpZnQoNCxpZS5yKSxPLndyaXRlX3NoaWZ0KDQs'@;
put 'aWUuYyksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoNCwxKSxPLndyaXRlX3NoaWZ0KDQsaWUuciksTy53cml0ZV9zaGlmdCg0LGllLnIpLE8ud3JpdGVfc2hpZnQoNCxpZS5jKSxPLndyaXRlX3NoaWZ0KDQsaWUuYyksT30oRlsiIXNlbCJdLEZbIiFmcmVlemUiXSkpLGdpKE0s'@;
put 'IkJydEVuZFdzVmlldyIpLGdpKE0sIkJydEVuZFdzVmlld3MiKX0oaWUseWUsTy5Xb3JrYm9vayksZnVuY3Rpb24gV1IoTSxGKXshRnx8IUZbIiFjb2xzIl18fChnaShNLCJCcnRCZWdpbkNvbEluZm9zIiksRlsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKE8sSil7TyYmZ2koTSwiQnJ0Q29s'@;
put 'SW5mbyIsZnVuY3Rpb24gSFIoTSxGLE8pe251bGw9PU8mJihPPWdyKDE4KSk7dmFyIEo9ZjUoTSxGKTtPLndyaXRlX3NoaWZ0KC00LE0pLE8ud3JpdGVfc2hpZnQoLTQsTSksTy53cml0ZV9zaGlmdCg0LDI1NiooSi53aWR0aHx8MTApKSxPLndyaXRlX3NoaWZ0KDQsMCk7dmFyIGllPTA7cmV0'@;
put 'dXJuIEYuaGlkZGVuJiYoaWV8PTEpLCJudW1iZXIiPT10eXBlb2YgSi53aWR0aCYmKGllfD0yKSxGLmxldmVsJiYoaWV8PUYubGV2ZWw8PDgpLE8ud3JpdGVfc2hpZnQoMixpZSksT30oSixPKSl9KSxnaShNLCJCcnRFbmRDb2xJbmZvcyIpKX0oaWUseWUpLGZ1bmN0aW9uIElTKE0sRixPLEop'@;
put 'e3ZhciBpZT1ibyhGWyIhcmVmIl18fCJBMSIpLHllPSIiLHZlPVtdO2dpKE0sIkJydEJlZ2luU2hlZXREYXRhIik7dmFyIE1lPUFycmF5LmlzQXJyYXkoRiksamU9aWUuZS5yO0ZbIiFyb3dzIl0mJihqZT1NYXRoLm1heChpZS5lLnIsRlsiIXJvd3MiXS5sZW5ndGgtMSkpO2Zvcih2YXIgWWU9'@;
put 'aWUucy5yO1llPD1qZTsrK1llKXt5ZT1ycyhZZSkscFIoTSxGLGllLFllKTt2YXIgcWU9ITE7aWYoWWU8PWllLmUucilmb3IodmFyIGl0PWllLnMuYztpdDw9aWUuZS5jOysraXQpe1llPT09aWUucy5yJiYodmVbaXRdPWZvKGl0KSk7dmFyIGh0PU1lPyhGW1llXXx8W10pW2l0XTpGW3ZlW2l0'@;
put 'XSt5ZV07cWU9ISFodCYmVVIoTSxodCxZZSxpdCxKLEYscWUpfX1naShNLCJCcnRFbmRTaGVldERhdGEiKX0oaWUseWUsMCxGKSxmdW5jdGlvbiBwVyhNLEYpe0ZbIiFwcm90ZWN0Il0mJmdpKE0sIkJydFNoZWV0UHJvdGVjdGlvbiIsZnVuY3Rpb24gZjgoTSxGKXtyZXR1cm4gbnVsbD09RiYm'@;
put 'KEY9Z3IoNjYpKSxGLndyaXRlX3NoaWZ0KDIsTS5wYXNzd29yZD9PNihNLnBhc3N3b3JkKTowKSxGLndyaXRlX3NoaWZ0KDQsMSksW1sib2JqZWN0cyIsITFdLFsic2NlbmFyaW9zIiwhMV0sWyJmb3JtYXRDZWxscyIsITBdLFsiZm9ybWF0Q29sdW1ucyIsITBdLFsiZm9ybWF0Um93cyIsITBd'@;
put 'LFsiaW5zZXJ0Q29sdW1ucyIsITBdLFsiaW5zZXJ0Um93cyIsITBdLFsiaW5zZXJ0SHlwZXJsaW5rcyIsITBdLFsiZGVsZXRlQ29sdW1ucyIsITBdLFsiZGVsZXRlUm93cyIsITBdLFsic2VsZWN0TG9ja2VkQ2VsbHMiLCExXSxbInNvcnQiLCEwXSxbImF1dG9GaWx0ZXIiLCEwXSxbInBpdm90'@;
put 'VGFibGVzIiwhMF0sWyJzZWxlY3RVbmxvY2tlZENlbGxzIiwhMV1dLmZvckVhY2goZnVuY3Rpb24oTyl7Ri53cml0ZV9zaGlmdCg0LE9bMV0/bnVsbD09TVtPWzBdXXx8TVtPWzBdXT8wOjE6bnVsbCE9TVtPWzBdXSYmTVtPWzBdXT8wOjEpfSksRn0oRlsiIXByb3RlY3QiXSkpfShpZSx5ZSks'@;
put 'ZnVuY3Rpb24gUlMoTSxGLE8sSil7aWYoRlsiIWF1dG9maWx0ZXIiXSl7dmFyIGllPUZbIiFhdXRvZmlsdGVyIl0scGU9InN0cmluZyI9PXR5cGVvZiBpZS5yZWY/aWUucmVmOkFpKGllLnJlZik7Ty5Xb3JrYm9va3x8KE8uV29ya2Jvb2s9e1NoZWV0czpbXX0pLE8uV29ya2Jvb2suTmFtZXN8'@;
put 'fChPLldvcmtib29rLk5hbWVzPVtdKTt2YXIgeWU9Ty5Xb3JrYm9vay5OYW1lcyx2ZT1IcyhwZSk7dmUucy5yPT12ZS5lLnImJih2ZS5lLnI9SHMoRlsiIXJlZiJdKS5lLnIscGU9QWkodmUpKTtmb3IodmFyIE1lPTA7TWU8eWUubGVuZ3RoOysrTWUpe3ZhciBqZT15ZVtNZV07aWYoIl94bG5t'@;
put 'Ll9GaWx0ZXJEYXRhYmFzZSI9PWplLk5hbWUmJmplLlNoZWV0PT1KKXtqZS5SZWY9IiciK08uU2hlZXROYW1lc1tKXSsiJyEiK3BlO2JyZWFrfX1NZT09eWUubGVuZ3RoJiZ5ZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkosUmVmOiInIitPLlNoZWV0TmFtZXNb'@;
put 'Sl0rIichIitwZX0pLGdpKE0sIkJydEJlZ2luQUZpbHRlciIsQTEoYm8ocGUpKSksZ2koTSwiQnJ0RW5kQUZpbHRlciIpfX0oaWUseWUsTyxNKSxmdW5jdGlvbiBaUihNLEYpeyFGfHwhRlsiIW1lcmdlcyJdfHwoZ2koTSwiQnJ0QmVnaW5NZXJnZUNlbGxzIixmdW5jdGlvbiBrUyhNLEYpe3Jl'@;
put 'dHVybiBudWxsPT1GJiYoRj1ncig0KSksRi53cml0ZV9zaGlmdCg0LE0pLEZ9KEZbIiFtZXJnZXMiXS5sZW5ndGgpKSxGWyIhbWVyZ2VzIl0uZm9yRWFjaChmdW5jdGlvbihPKXtnaShNLCJCcnRNZXJnZUNlbGwiLHg1KE8pKX0pLGdpKE0sIkJydEVuZE1lcmdlQ2VsbHMiKSl9KGllLHllKSxm'@;
put 'dW5jdGlvbiBLUihNLEYpe2lmKEYpe2dpKE0sIkJydEJlZ2luRFZhbHMiLGZ1bmN0aW9uIHA4KE0sRil7bnVsbD09RiYmKEY9Z3IoMTgpKSxGLndyaXRlX3NoaWZ0KDIsMCksRi53cml0ZV9zaGlmdCg0LDApLEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBP'@;
put 'PTAsSj0wO0o8TS5sZW5ndGg7KytKKSgoTVtKXXx8e30pLnJlZnx8e30pLnMmJk1bSl0ucmVmLnMuYzwwfHwrK087cmV0dXJuIEYud3JpdGVfc2hpZnQoNCxPKSxGfShGKSk7Zm9yKHZhciBPPTA7TzxGLmxlbmd0aDsrK08pKChGW09dfHx7fSkucmVmfHx7fSkucyYmRltPXS5yZWYucy5jPDB8'@;
put 'fGdpKE0sIkJydERWYWwiLExTKEZbT10pKTtnaShNLCJCcnRFbmREVmFscyIpfX0oaWUseWVbIiF2YWxpZGF0aW9ucyJdKSxmdW5jdGlvbiBtOChNLEYsTyl7RlsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihKKXtpZihKWzFdLlRhcmdldCl7dmFyIGllPXZyKE8sLTEsSlsxXS5UYXJnZXQu'@;
put 'cmVwbGFjZSgvIy4qJC8sIiIpLF9vLkhMSU5LKTtnaShNLCJCcnRITGluayIsZnVuY3Rpb24gazUoTSxGKXt2YXIgTz1ncig1MCs0KihNWzFdLlRhcmdldC5sZW5ndGgrKE1bMV0uVG9vbHRpcHx8IiIpLmxlbmd0aCkpO0ExKHtzOmhzKE1bMF0pLGU6aHMoTVswXSl9LE8pLEtmKCJySWQiK0Ys'@;
put 'Tyk7dmFyIEo9TVsxXS5UYXJnZXQuaW5kZXhPZigiIyIpO3JldHVybiBDbCgoLTE9PUo/IiI6TVsxXS5UYXJnZXQuc2xpY2UoSisxKSl8fCIiLE8pLENsKE1bMV0uVG9vbHRpcHx8IiIsTyksQ2woIiIsTyksTy5zbGljZSgwLE8ubCl9KEosaWUpKX19KSxkZWxldGUgRlsiIWxpbmtzIl19KGll'@;
put 'LHllLEopLHllWyIhbWFyZ2lucyJdJiZnaShpZSwiQnJ0TWFyZ2lucyIsZnVuY3Rpb24gVlIoTSxGKXtyZXR1cm4gbnVsbD09RiYmKEY9Z3IoNDgpKSxxMihNKSxEUy5mb3JFYWNoKGZ1bmN0aW9uKE8pe2VjKE1bT10sRil9KSxGfSh5ZVsiIW1hcmdpbnMiXSkpLCghRnx8Ri5pZ25vcmVFQ3x8'@;
put 'bnVsbD09Ri5pZ25vcmVFQykmJmZ1bmN0aW9uIG00KE0sRil7IUZ8fCFGWyIhcmVmIl18fChnaShNLCJCcnRCZWdpbkNlbGxJZ25vcmVFQ3MiKSxnaShNLCJCcnRDZWxsSWdub3JlRUMiLGZ1bmN0aW9uIGpSKE0pe3ZhciBGPWdyKDI0KTtyZXR1cm4gRi53cml0ZV9zaGlmdCg0LDQpLEYud3Jp'@;
put 'dGVfc2hpZnQoNCwxKSxBMShNLEYpLEZ9KGJvKEZbIiFyZWYiXSkpKSxnaShNLCJCcnRFbmRDZWxsSWdub3JlRUNzIikpfShpZSx5ZSksZnVuY3Rpb24gR1IoTSxGLE8sSil7aWYoRlsiIWNvbW1lbnRzIl0ubGVuZ3RoPjApe3ZhciBpZT12cihKLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5n'@;
put 'IisoTysxKSsiLnZtbCIsX28uVk1MKTtnaShNLCJCcnRMZWdhY3lEcmF3aW5nIixLZigicklkIitpZSkpLEZbIiFsZWdhY3kiXT1pZX19KGllLHllLE0sSiksZ2koaWUsIkJydEVuZFNoZWV0IiksaWUuZW5kKCl9ZnVuY3Rpb24gVDUoTSl7dmFyIEosRj1bXSxPPU0ubWF0Y2goL148YzpudW1D'@;
put 'YWNoZT4vKTsoTS5tYXRjaCgvPGM6cHQgaWR4PSIoXGQqKSI+KC4qPyk8XC9jOnB0Pi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXt2YXIgeWU9cGUubWF0Y2goLzxjOnB0IGlkeD0iKFxkKj8pIj48Yzp2PiguKik8XC9jOnY+PFwvYzpwdD4vKTt5ZSYmKEZbK3llWzFdXT1PPyt5ZVsy'@;
put 'XTp5ZVsyXSl9KTt2YXIgaWU9bXIoKE0ubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJHZW5lcmFsIl0pWzFdKTtyZXR1cm4oTS5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7Sj1wZS5y'@;
put 'ZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtGLGllLEpdfV9vLkNIQVJUPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0Iixfby5DSEFSVEVYPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8y'@;
put 'MDE0L3JlbGF0aW9uc2hpcHMvY2hhcnRFeCI7dmFyIEpSPS88KD86XHcrOik/Y2hhcnQ+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2NoYXJ0Pi8sRnY9LzwoPzpcdys6KT9wbG90QXJlYT4oW1xzXFNdKj8pPFwvKD86XHcrOik/cGxvdEFyZWE+LyxtVz0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNd'@;
put 'Kj8pPFwvKD86XHcrOik/bGVnZW5kPi8sT1M9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlvbiBIZChNLEYsTyxKLGllLHBlLHllLHZlKXt2YXIgTWU9cGV8fHsiIXR5cGUiOiJjaGFydCJ9O2lmKCFNKXJldHVybiBwZTt5ZSYmeWUuQW5jaG9y'@;
put 'JiYoTWVbIiFwb3MiXT1pNCh5ZS5BbmNob3IsdmUpLE1lWyIhcG9zVHlwZSJdPXllLkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLE1lWyIhYWJzcG9zIl09aTQoeWUuQW5jaG9yLHZlKSxNZVsiIXJlbHBvcyJdPUlfKHllLkFuY2hvcix2ZSkpLE1lWyIhcGxvdCJdPVtdO3ZhciBq'@;
put 'ZT0iIixZZT0iIixxZT1NLm1hdGNoKEpSKTtxZT8oamU9TS5zbGljZSgwLHFlLmluZGV4KSxZZT1NLnNsaWNlKHFlLmluZGV4K3FlWzBdLmxlbmd0aCkpOmplPVllPU07dmFyIGl0PVtdLGh0PWplLm1hdGNoKC88YzpsYW5nLio/Pi8pfHxNLm1hdGNoKC88YzpsYW5nLio/Pi8pfHxZZS5tYXRj'@;
put 'aCgvPGM6bGFuZy4qPz4vKTtyZXR1cm4gaHQmJihNZVsiIWxhbmciXT0obG4oaHRbMF0pfHx7fSkudmFsfHwiZW4tVVMiKSxxZSYmKChpdD1xZVsxXS5tYXRjaChPUykpJiZmdW5jdGlvbiBYUihNLEYpe3ZhciBPPSIiO00ubWF0Y2goLzxjOnJpY2g+LykmJk0ucmVwbGFjZSgvPGE6dD4oW1xz'@;
put 'XFNdKj8pPFwvYTp0Pi9nLGZ1bmN0aW9uKEosaWUpe08rPWllfSksRlsiIXRpdGxlIl09T3x8IkNoYXJ0IFRpdGxlIn0oaXRbMV0sTWUpLGZ1bmN0aW9uIEh2KE0sRil7aWYoTSl7dmFyIE89MCxKPTAsaWU9IkEiLHBlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O00ucmVwbGFjZShQ'@;
put 'MyxmdW5jdGlvbih5ZSx2ZSl7dmFyIE1lPXt0OnZlLGM6Tyx3OjAsc2VyOltdfSxqZT1bXSxZZT0oeWUubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5kZXgscWU9WWU/eWUuc2xpY2UoMCxZZSk6eWU7InNjYXR0ZXIiPT12ZSYmKGplPXllLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilc'@;
put 'Lz4vbSkpJiZsbihqZVswXSksImJhciI9PXZlJiYoamU9eWUubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJihNZS5iYXJEaXI9ImJhciI9PWxuKGplWzBdKS52YWw/ImgiOiJ2IiksKGplPXFlLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJihNZS5ncm91cGlu'@;
put 'Zz1sbihqZVswXSkudmFsfHwic3RhbmRhcmQiKSwoeWUubWF0Y2goUFMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihodCl7dmFyIGt0PVtdLHV0PXt9LHZ0PVtdO2lmKGh0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIFB0PVQ1KChodC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtd'@;
put 'KVsxXXx8IiIpfHxbXTtQdFswXSYmUHRbMF1bMF0mJih1dC5uYW1lPVB0WzBdWzBdKSxQdFsyXSYmKHV0Lm5hbWVyZWY9UHRbMl0pfVsieFZhbCIsInlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihEdCl7dmFyIFp0LEF0PWh0Lm1hdGNoKG5ldyBSZWdF'@;
put 'eHAoIjxjOiIrRHQrIj5bXFxzXFxTXSo/PFxcL2M6IitEdCsiPiIsImdtIikpO0F0JiYoKEF0WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9nbSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGduKXtadD1nbi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChBdFswXS5tYXRjaCgvPGM6KD86XHcq'@;
put 'KUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ24pe3ZhciBxbj1UNShnbik7cGUucy5yPXBlLnMuYz0wLHBlLmUuYz1PLGllPWZvKE8pLHFuWzBdLmZvckVhY2goZnVuY3Rpb24odW4sSm4pe0ZbaWUrcnMoSm4pXT17dDoibnVtYmVy'@;
put 'Ij09dHlwZW9mIHVuPyJuIjoicyIsdjp1bix6OnFuWzFdfSxKPUpufSkscGUuZS5yPEomJihwZS5lLnI9SiksKytPLE1lLncrKyxrdC5wdXNoKER0KSwocW5bMl18fFp0KSYmdnQucHVzaChxblsyXXx8WnQpLCJ2YWwiPT1EdCYmKHV0Lno9cW5bMV18fCJHZW5lcmFsIil9KSl9KSwoamU9eWUu'@;
put 'bWF0Y2goLzxjOnNtb290aChbXlwvPl0qKVwvPi9tKSkmJih1dC5zbW9vdGg9bnVsbD09bG4oamVbMF0pLnZhbHx8THIobG4oamVbMF0pLnZhbCkpLHV0LmNvbHM9a3QsdXQucmFuZ2VzPXZ0LE1lLnNlci5wdXNoKHV0KX0pLCJkb3VnaG51dCI9PXZlJiYoamU9eWUubWF0Y2goLzxjOmhvbGVT'@;
put 'aXplKFteXC8+XSopXC8+L20pKSYmKE1lLmhvbGU9KGxuKGplWzBdKS52YWx8fDEwKS8xMDApLEZbIiFwbG90Il0ucHVzaChNZSl9KSxPPjAmJihGWyIhcmVmIl09QWkocGUpKX19KChxZVsxXS5tYXRjaChGdil8fFtdKVsxXSxNZSksbnVsbCE9KGl0PXFlWzFdLm1hdGNoKG1XKSkmJmZ1bmN0'@;
put 'aW9uIGNzKE0sRil7dmFyIE87RlsiIWxlZ2VuZCJdPXtwb3M6InIifSwoTz1NLm1hdGNoKC88YzpsZWdlbmRQb3MoW15cLz5dKilcLz4vbSkpJiYoRlsiIWxlZ2VuZCJdLnBvcz1sbihPWzBdKS52YWx8fCJyIil9KGl0WzBdLE1lKSksTWV9dmFyIFAzPS88YzooKD86YXJlYXxsaW5lfHN0b2Nr'@;
put 'fHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/KUNoYXJ0W14+XSo+KFtcc1xTXSo/KTxcL2M6KD86YXJlYXxsaW5lfHN0b2NrfHJhZGFyfHNjYXR0ZXJ8cGllfGRvdWdobnV0fGJhcnxvZlBpZXxzdXJmYWNlfGJ1YmJsZSkoPzozRCk/'@;
put 'Q2hhcnQ+L2dtLFBTPS88YzpzZXI+KFtcc1xTXSo/KTxcL2M6c2VyPi9nbTtfby5DUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jaGFydHNoZWV0Ijt2YXIgUVI9ZHIoImNoYXJ0c2hlZXQiLG51bGwse3htbG5z'@;
put 'OlRpLm1haW5bMF0sInhtbG5zOnIiOlRpLnJ9KTtmdW5jdGlvbiBGUyhNLEYsTyxKKXt2YXIgaWU9W1BuLFFSXTtyZXR1cm4gaWUucHVzaCgiPHNoZWV0UHIvPiIpLGllLnB1c2goJzxzaGVldFZpZXdzPjxzaGVldFZpZXcgem9vbVNjYWxlPSIxMDAiIHdvcmtib29rVmlld0lkPSIwIiB6b29t'@;
put 'VG9GaXQ9IjEiLz48L3NoZWV0Vmlld3M+JyksaWVbaWUubGVuZ3RoXT1kcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLHZyKEosLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhNKzEpKyIueG1sIixfby5EUkFXKSxpZS5sZW5ndGg+MiYmKGllW2llLmxlbmd0aF09IjwvY2hhcnRz'@;
put 'aGVldD4iLGllWzFdPWllWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxpZS5qb2luKCIiKX1mdW5jdGlvbiBWdigpe3ZhciBNPVJsKCk7cmV0dXJuIGdpKE0sIkJydEJlZ2luU2hlZXQiKSxnaShNLCJCcnRFbmRTaGVldCIpLE0uZW5kKCl9dmFyIE5kPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwi'@;
put 'Ym9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9vbCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwi'@;
put 'aW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29sIl0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJz'@;
put 'YXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIsITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxb'@;
put 'InVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSxnOD1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJi'@;
put 'b29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNpYmlsaXR5IiwidmlzaWJsZSJdXSxOUz1bXSxBNT1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJh'@;
put 'dXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9uIiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIs'@;
put 'IjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gVlMoTSxGKXtmb3IodmFyIE89MDtPIT1NLmxlbmd0aDsrK08pZm9yKHZhciBKPU1bT10saWU9MDtpZSE9Ri5sZW5ndGg7KytpZSl7dmFyIHBlPUZbaWVdO2lmKG51bGw9PUpbcGVbMF1dKUpbcGVbMF1dPXBlWzFdO2Vsc2Ugc3dp'@;
put 'dGNoKHBlWzJdKXtjYXNlImJvb2wiOiJzdHJpbmciPT10eXBlb2YgSltwZVswXV0mJihKW3BlWzBdXT1McihKW3BlWzBdXSkpO2JyZWFrO2Nhc2UiaW50Ijoic3RyaW5nIj09dHlwZW9mIEpbcGVbMF1dJiYoSltwZVswXV09cGFyc2VJbnQoSltwZVswXV0sMTApKX19fWZ1bmN0aW9uIGpTKE0s'@;
put 'Ril7Zm9yKHZhciBPPTA7TyE9Ri5sZW5ndGg7KytPKXt2YXIgSj1GW09dO2lmKG51bGw9PU1bSlswXV0pTVtKWzBdXT1KWzFdO2Vsc2Ugc3dpdGNoKEpbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBNW0pbMF1dJiYoTVtKWzBdXT1McihNW0pbMF1dKSk7YnJlYWs7Y2FzZSJpbnQi'@;
put 'OiJzdHJpbmciPT10eXBlb2YgTVtKWzBdXSYmKE1bSlswXV09cGFyc2VJbnQoTVtKWzBdXSwxMCkpfX19ZnVuY3Rpb24gXzgoTSl7alMoTS5XQlByb3BzLE5kKSxqUyhNLkNhbGNQcixBNSksVlMoTS5XQlZpZXcsZzgpLFZTKE0uU2hlZXRzLE5TKSxoNS5kYXRlMTkwND1McihNLldCUHJvcHMu'@;
put 'ZGF0ZTE5MDQpfXZhciBYMj0iXVsqPy9cXCIuc3BsaXQoIiIpO2Z1bmN0aW9uIF80KE0sRil7aWYoTS5sZW5ndGg+MzEpe2lmKEYpcmV0dXJuITE7dGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lcyBjYW5ub3QgZXhjZWVkIDMxIGNoYXJzIil9dmFyIE89ITA7cmV0dXJuIFgyLmZvckVhY2go'@;
put 'ZnVuY3Rpb24oSil7aWYoLTEhPU0uaW5kZXhPZihKKSl7aWYoIUYpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBuYW1lIGNhbm5vdCBjb250YWluIDogXFwgLyA/ICogWyBdIik7Tz0hMX19KSxPfXZhciBZUz0vPFx3Kzp3b3JrYm9vay8sTDU9ZHIoIndvcmtib29rIixudWxsLHt4bWxuczpUaS5t'@;
put 'YWluWzBdLCJ4bWxuczpyIjpUaS5yfSk7ZnVuY3Rpb24gdE8oTSxGKXt2YXIgTz1GfHx7fSxKPVtQbl07SltKLmxlbmd0aF09TDU7dmFyIGllPU0uV29ya2Jvb2smJihNLldvcmtib29rLk5hbWVzfHxbXSkubGVuZ3RoPjA7TS5Xb3JrYm9vayYmTS5Xb3JrYm9vay5Nb2RpZnkmJihKW0oubGVu'@;
put 'Z3RoXT1mdW5jdGlvbiBlTyhNKXt2YXIgRj17fTtyZXR1cm4gTS53YXJuJiYoRi5yZWFkT25seVJlY29tbWVuZGVkPTEpLEYudXNlck5hbWU9TS51c2VyfHwiU2hlZXQgSlMiLE0uZW5jcnlwdGlvbiYmKE0uZW5jcnlwdGlvbi5hbGdvJiYoRi5hbGdvcml0aG1OYW1lPU0uZW5jcnlwdGlvbi5h'@;
put 'bGdvKSxNLmVuY3J5cHRpb24uaGFzaCYmKEYuaGFzaFZhbHVlPU0uZW5jcnlwdGlvbi5oYXNoKSxNLmVuY3J5cHRpb24uc2FsdCYmKEYuc2FsdFZhbHVlPU0uZW5jcnlwdGlvbi5zYWx0KSxNLmVuY3J5cHRpb24uc3BpbiYmKEYuc3BpbkNvdW50PU0uZW5jcnlwdGlvbi5zcGluKSksZHIoImZp'@;
put 'bGVTaGFyaW5nIixudWxsLEYpfShNLldvcmtib29rLk1vZGlmeSkpO3ZhciBwZT17Y29kZU5hbWU6IlRoaXNXb3JrYm9vayJ9O00uV29ya2Jvb2smJk0uV29ya2Jvb2suV0JQcm9wcyYmKE5kLmZvckVhY2goZnVuY3Rpb24oamUpe251bGwhPU0uV29ya2Jvb2suV0JQcm9wc1tqZVswXV0mJk0u'@;
put 'V29ya2Jvb2suV0JQcm9wc1tqZVswXV0hPWplWzFdJiYocGVbamVbMF1dPU0uV29ya2Jvb2suV0JQcm9wc1tqZVswXV0pfSksTS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lJiYocGUuY29kZU5hbWU9TS5Xb3JrYm9vay5XQlByb3BzLkNvZGVOYW1lLGRlbGV0ZSBwZS5Db2RlTmFtZSkpLEpb'@;
put 'Si5sZW5ndGhdPWRyKCJ3b3JrYm9va1ByIixudWxsLHBlKSxNLldvcmtib29rJiZNLldvcmtib29rLlByb3RlY3Rpb24mJihKW0oubGVuZ3RoXT1mdW5jdGlvbiB5OChNKXt2YXIgRj17fTtyZXR1cm4gTS5sb2NrU3RydWN0dXJlJiYoRi5sb2NrU3RydWN0dXJlPTEpLE0ubG9ja1dpbmRvd3Mm'@;
put 'JihGLmxvY2tXaW5kb3dzPTEpLE0uZW5jcnlwdGlvbiYmKE0uZW5jcnlwdGlvbi5hbGdvJiYoRi53b3JrYm9va0FsZ29yaXRobU5hbWU9TS5lbmNyeXB0aW9uLmFsZ28pLE0uZW5jcnlwdGlvbi5oYXNoJiYoRi53b3JrYm9va0hhc2hWYWx1ZT1NLmVuY3J5cHRpb24uaGFzaCksTS5lbmNyeXB0'@;
put 'aW9uLnNhbHQmJihGLndvcmtib29rU2FsdFZhbHVlPU0uZW5jcnlwdGlvbi5zYWx0KSxNLmVuY3J5cHRpb24uc3BpbiYmKEYud29ya2Jvb2tTcGluQ291bnQ9TS5lbmNyeXB0aW9uLnNwaW4pKSxkcigid29ya2Jvb2tQcm90ZWN0aW9uIixudWxsLEYpfShNLldvcmtib29rLlByb3RlY3Rpb24p'@;
put 'KTt2YXIgeWU9TS5Xb3JrYm9vayYmTS5Xb3JrYm9vay5TaGVldHN8fFtdLHZlPTA7aWYoeWUmJnllWzBdJiZ5ZVswXS5IaWRkZW4pe2ZvcihKW0oubGVuZ3RoXT0iPGJvb2tWaWV3cz4iLHZlPTA7dmUhPU0uU2hlZXROYW1lcy5sZW5ndGgmJnllW3ZlXSYmeWVbdmVdLkhpZGRlbjsrK3ZlKTt2'@;
put 'ZT09TS5TaGVldE5hbWVzLmxlbmd0aCYmKHZlPTApLEpbSi5sZW5ndGhdPSc8d29ya2Jvb2tWaWV3IGZpcnN0U2hlZXQ9IicrdmUrJyIgYWN0aXZlVGFiPSInK3ZlKyciLz4nLEpbSi5sZW5ndGhdPSI8L2Jvb2tWaWV3cz4ifWZvcihKW0oubGVuZ3RoXT0iPHNoZWV0cz4iLHZlPTA7dmUhPU0u'@;
put 'U2hlZXROYW1lcy5sZW5ndGg7Kyt2ZSl7dmFyIE1lPXtuYW1lOnlyKE0uU2hlZXROYW1lc1t2ZV0uc2xpY2UoMCwzMSkpfTtpZihNZS5zaGVldElkPSIiKyh2ZSsxKSxNZVsicjppZCJdPSJySWQiKyh2ZSsxKSx5ZVt2ZV0pc3dpdGNoKHllW3ZlXS5IaWRkZW4pe2Nhc2UgMTpNZS5zdGF0ZT0i'@;
put 'aGlkZGVuIjticmVhaztjYXNlIDI6TWUuc3RhdGU9InZlcnlIaWRkZW4ifUpbSi5sZW5ndGhdPWRyKCJzaGVldCIsbnVsbCxNZSl9cmV0dXJuIEpbSi5sZW5ndGhdPSI8L3NoZWV0cz4iLE0uRXh0ZXJuYWxXQiYmTS5FeHRlcm5hbFdCLmxlbmd0aCYmKEpbSi5sZW5ndGhdPSI8ZXh0ZXJuYWxS'@;
put 'ZWZlcmVuY2VzPiIsKE0uRXh0ZXJuYWxXQnx8W10pLmZvckVhY2goZnVuY3Rpb24oamUsWWUpe3ZhciBxZT12cihPLndicmVscywtMSwiZXh0ZXJuYWxMaW5rcy9leHRlcm5hbExpbmsiKyhZZSsxKSsiLnhtbCIsX28uWExJTkspO0pbSi5sZW5ndGhdPSc8ZXh0ZXJuYWxSZWZlcmVuY2Ugcjpp'@;
put 'ZD0icklkJytxZSsnIi8+J30pLEpbSi5sZW5ndGhdPSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iKSxpZSYmKEpbSi5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIsTS5Xb3JrYm9vayYmTS5Xb3JrYm9vay5OYW1lcyYmTS5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGplKXt2YXIgWWU9'@;
put 'e25hbWU6amUuTmFtZX07amUuQ29tbWVudCYmKFllLmNvbW1lbnQ9amUuQ29tbWVudCksbnVsbCE9amUuU2hlZXQmJihZZS5sb2NhbFNoZWV0SWQ9IiIramUuU2hlZXQpLGplLkhpZGRlbiYmKFllLmhpZGRlbj0iMSIpLGplLlJlZiYmKEpbSi5sZW5ndGhdPWRyKCJkZWZpbmVkTmFtZSIseXIo'@;
put 'amUuUmVmKSxZZSkpfSksSltKLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLE8mJk8ucGl2b3RzJiZPLnBpdm90cy5sZW5ndGg+MCYmKEoucHVzaCgiPHBpdm90Q2FjaGVzPiIpLE8ucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oamUsWWUpe0oucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0i'@;
put 'JysoWWUrMSkrJyIgcjppZD0icklkJytqZVsyXSsnIi8+Jyl9KSxKLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLEoubGVuZ3RoPjImJihKW0oubGVuZ3RoXT0iPC93b3JrYm9vaz4iLEpbMV09SlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksSi5qb2luKCIiKX1mdW5jdGlvbiByTyhNLEYpe3JldHVy'@;
put 'biBGfHwoRj1ncigxMjcpKSxGLndyaXRlX3NoaWZ0KDQsTS5IaWRkZW4pLEYud3JpdGVfc2hpZnQoNCxNLmlUYWJJRCksS2YoTS5zdHJSZWxJRCxGKSxDbChNLm5hbWUuc2xpY2UoMCwzMSksRiksRi5sZW5ndGg+Ri5sP0Yuc2xpY2UoMCxGLmwpOkZ9ZnVuY3Rpb24gc08oTSxGKXt2YXIgTz17'@;
put 'fTtyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpLE8uQXJjaElEPU0ucmVhZF9zaGlmdCg0KSxNLmwrPUYtOCxPfWZ1bmN0aW9uIFpTKE0sRil7dmFyIE89UmwoKTtyZXR1cm4gZ2koTywiQnJ0QmVnaW5Cb29rIiksZ2koTywiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIGNPKE0sRil7Rnx8KEY9Z3Io'@;
put 'MTI3KSk7Zm9yKHZhciBPPTA7NCE9TzsrK08pRi53cml0ZV9zaGlmdCg0LDApO3JldHVybiBDbCgiU2hlZXRKUyIsRiksQ2wody52ZXJzaW9uLEYpLENsKHcudmVyc2lvbixGKSxDbCgiNzI2MiIsRiksRi5sZW5ndGg+Ri5sP0Yuc2xpY2UoMCxGLmwpOkZ9KCkpLGdpKE8sIkJydFdiUHJvcCIs'@;
put 'ZnVuY3Rpb24gb08oTSxGKXtGfHwoRj1ncig3MikpO3ZhciBPPTA7cmV0dXJuIE0mJk0uZmlsdGVyUHJpdmFjeSYmKE98PTgpLEYud3JpdGVfc2hpZnQoNCxPKSxGLndyaXRlX3NoaWZ0KDQsMCksRDIoTSYmTS5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsRiksRi5zbGljZSgwLEYubCl9KE0u'@;
put 'V29ya2Jvb2smJk0uV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIFVTKE0sRil7aWYoRi5Xb3JrYm9vayYmRi5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgTz1GLldvcmtib29rLlNoZWV0cyxKPTAsaWU9LTEscGU9LTE7SjxPLmxlbmd0aDsrK0opIU9bSl18fCFPW0pdLkhpZGRl'@;
put 'biYmLTE9PWllP2llPUo6MT09T1tKXS5IaWRkZW4mJi0xPT1wZSYmKHBlPUopO3BlPmllfHwoZ2koTSwiQnJ0QmVnaW5Cb29rVmlld3MiKSxnaShNLCJCcnRCb29rVmlldyIsZnVuY3Rpb24gdU8oTSxGKXtyZXR1cm4gRnx8KEY9Z3IoMjkpKSxGLndyaXRlX3NoaWZ0KC00LDApLEYud3JpdGVf'@;
put 'c2hpZnQoLTQsNDYwKSxGLndyaXRlX3NoaWZ0KDQsMjg4MDApLEYud3JpdGVfc2hpZnQoNCwxNzYwMCksRi53cml0ZV9zaGlmdCg0LDUwMCksRi53cml0ZV9zaGlmdCg0LE0pLEYud3JpdGVfc2hpZnQoNCxNKSxGLndyaXRlX3NoaWZ0KDEsMTIwKSxGLmxlbmd0aD5GLmw/Ri5zbGljZSgwLEYu'@;
put 'bCk6Rn0oaWUpKSxnaShNLCJCcnRFbmRCb29rVmlld3MiKSl9fShPLE0pLGZ1bmN0aW9uIHBzKE0sRil7Z2koTSwiQnJ0QmVnaW5CdW5kbGVTaHMiKTtmb3IodmFyIE89MDtPIT1GLlNoZWV0TmFtZXMubGVuZ3RoOysrTylnaShNLCJCcnRCdW5kbGVTaCIsck8oe0hpZGRlbjpGLldvcmtib29r'@;
put 'JiZGLldvcmtib29rLlNoZWV0cyYmRi5Xb3JrYm9vay5TaGVldHNbT10mJkYuV29ya2Jvb2suU2hlZXRzW09dLkhpZGRlbnx8MCxpVGFiSUQ6TysxLHN0clJlbElEOiJySWQiKyhPKzEpLG5hbWU6Ri5TaGVldE5hbWVzW09dfSkpO2dpKE0sIkJydEVuZEJ1bmRsZVNocyIpfShPLE0pLGdpKE8s'@;
put 'IkJydEVuZEJvb2siKSxPLmVuZCgpfWZ1bmN0aW9uIEtTKE0sRixPLEosaWUpe3JldHVybigiLmJpbiI9PT1GLnNsaWNlKC00KT9nNDp5UykoTSxPLEosaWUpfWZ1bmN0aW9uIFV2KE0sRixPLEosaWUpe3JldHVybigiLmJpbiI9PT1GLnNsaWNlKC00KT9WdjpGUykoTSxPLEosaWUpfWZ1bmN0'@;
put 'aW9uIG1PKE0sRixPKXtyZXR1cm4oIi5iaW4iPT09Ri5zbGljZSgtNCk/VU06RDYpKE0sTyl9ZnVuY3Rpb24gZ08oTSxGLE8pe3JldHVybigiLmJpbiI9PT1GLnNsaWNlKC00KT9ZXzpCXykoTSxPKX12YXIgWFM9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzon'@;
put 'KSkvZyxKUz0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIEh1KE0sRil7dmFyIE89TS5zcGxpdCgvXHMrLyksSj1bXTtpZihGfHwoSlswXT1PWzBdKSwxPT09Ty5sZW5ndGgpcmV0dXJuIEo7dmFyIHBlLHllLE1lLGllPU0ubWF0'@;
put 'Y2goWFMpO2lmKGllKWZvcihNZT0wO01lIT1pZS5sZW5ndGg7KytNZSktMT09PSh5ZT0ocGU9aWVbTWVdLm1hdGNoKEpTKSlbMV0uaW5kZXhPZigiOiIpKT9KW3BlWzFdXT1wZVsyXS5zbGljZSgxLHBlWzJdLmxlbmd0aC0xKTpKWyJ4bWxuczoiPT09cGVbMV0uc2xpY2UoMCw2KT8ieG1sbnMi'@;
put 'K3BlWzFdLnNsaWNlKDYpOnBlWzFdLnNsaWNlKHllKzEpXT1wZVsyXS5zbGljZSgxLHBlWzJdLmxlbmd0aC0xKTtyZXR1cm4gSn1mdW5jdGlvbiBiOChNKXt2YXIgTz17fTtpZigxPT09TS5zcGxpdCgvXHMrLykubGVuZ3RoKXJldHVybiBPO3ZhciBpZSxwZSx2ZSxKPU0ubWF0Y2goWFMpO2lm'@;
put 'KEopZm9yKHZlPTA7dmUhPUoubGVuZ3RoOysrdmUpLTE9PT0ocGU9KGllPUpbdmVdLm1hdGNoKEpTKSlbMV0uaW5kZXhPZigiOiIpKT9PW2llWzFdXT1pZVsyXS5zbGljZSgxLGllWzJdLmxlbmd0aC0xKTpPWyJ4bWxuczoiPT09aWVbMV0uc2xpY2UoMCw2KT8ieG1sbnMiK2llWzFdLnNsaWNl'@;
put 'KDYpOmllWzFdLnNsaWNlKHBlKzEpXT1pZVsyXS5zbGljZSgxLGllWzJdLmxlbmd0aC0xKTtyZXR1cm4gT31mdW5jdGlvbiBXdihNKXt2YXIgRj17fTtpZihNLkRlZmF1bHRSb3dIZWlnaHQpe3ZhciBPPXtocHg6NCpwYXJzZUludChNLkRlZmF1bHRSb3dIZWlnaHQpLzN9O042KE8pLEYucm93'@;
put 'PU99aWYoTS5EZWZhdWx0Q29sV2lkdGgpe3ZhciBKPXt3cHg6NCpwYXJzZUludChNLkRlZmF1bHRDb2xXaWR0aCkvM307JHUoSiksRi5jb2w9Sn1yZXR1cm4gRn1mdW5jdGlvbiBleChNLEYsTyxKKXt2YXIgaWU9Sjtzd2l0Y2goKE9bMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIi'@;
put 'LCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6aWU9THIoSik7YnJlYWs7Y2FzZSJpMiI6Y2FzZSJpbnQiOmllPXBhcnNlSW50KEosMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UiZmxvYXQiOmllPXBhcnNlRmxvYXQoSik7YnJlYWs7Y2FzZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjppZT1GdChKKTti'@;
put 'cmVhaztjYXNlImk4IjpjYXNlInN0cmluZyI6Y2FzZSJmaXhlZCI6Y2FzZSJ1dWlkIjpjYXNlImJpbi5iYXNlNjQiOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJiYWQgY3VzdHByb3A6IitPWzBdKX1NW21yKEYpXT1pZX12YXIgbng9ezA6Ik5vbmUiLDE6IlNpbmdsZSIsMjoiRG91'@;
put 'YmxlIiwzMzoiU2luZ2xlQWNjb3VudGluZyIsMzQ6IkRvdWJsZUFjY291bnRpbmcifSxyeD1EZShueCk7ZnVuY3Rpb24gX08oTSxGLE8sSil7aWYoSi5jZWxsU3R5bGVzKXtpZihPPU8ucmVwbGFjZSgvXHMrL2csIiAiKSxGLkludGVyaW9yKXt2YXIgaWU9Ri5JbnRlcmlvcjtpZS5QYXR0ZXJu'@;
put 'JiYoaWUucGF0dGVyblR5cGU9Yl9baWUuUGF0dGVybl18fGllLlBhdHRlcm4pLGllLkNvbG9yJiZpZS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoaWUuZmdDb2xvcj17cmdiOmllLkNvbG9yLnNsaWNlKDEpfSl9IWZ1bmN0aW9uIGl4KE0pe00uQm9yZGVycyYmKE0uQm9yZGVycy5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKEYpe3ZhciBPPUYuUG9zaXRpb24udG9Mb3dlckNhc2UoKTtNW09dPXtzdHlsZTpHdihGLkxpbmVTdHlsZSwrRi5XZWlnaHQpLGNvbG9yOntyZ2I6KEYuQ29sb3J8fCIjMDAwMDAwIikuc2xpY2UoMSl9fX0pLGRlbGV0ZSBNLkJvcmRlcnMpfShGKTt2YXIgeWUscGU9'@;
put 'Ty5tYXRjaCgvPCg/Olx3KzopP0ZvbnRcc1tePl0qPi8pO3BlJiYoTHIoKHllPWxuKHBlWzBdKSkuQm9sZCkmJihGLkJvbGQ9ITApLExyKHllLkl0YWxpYykmJihGLkl0YWxpYz0hMCksTHIoeWUuU3RyaWtlVGhyb3VnaCkmJihGLlN0cmlrZT0hMCkseWUuU2l6ZSYmKEYuU2l6ZT0reWUuU2l6'@;
put 'ZSksRi5Gb250TmFtZT15ZS5Gb250TmFtZT95ZS5Gb250TmFtZToiQXJpYWwiLHllLlVuZGVybGluZSYmKEYuVW5kZXJsaW5lPXJ4W3llLlVuZGVybGluZV0pLHllLkNvbG9yJiYoRi5SR0I9eWUuQ29sb3Iuc2xpY2UoLTYpKSksRi5BbGlnbm1lbnQmJihGLmFsaWdubWVudD17fSxGLkFsaWdu'@;
put 'bWVudC5WZXJ0aWNhbCYmKEYuYWxpZ25tZW50LnZlcnRpY2FsPUYuQWxpZ25tZW50LlZlcnRpY2FsLnRvTG93ZXJDYXNlKCkpLEYuQWxpZ25tZW50Lkhvcml6b250YWwmJihGLmFsaWdubWVudC5ob3Jpem9udGFsPUYuQWxpZ25tZW50Lkhvcml6b250YWwudG9Mb3dlckNhc2UoKSksTHIoRi5B'@;
put 'bGlnbm1lbnQuV3JhcFRleHR8fCIwIik/Ri5hbGlnbm1lbnQud3JhcFRleHQ9ITA6bnVsbD09Ri5BbGlnbm1lbnQuV3JhcFRleHQmJmRlbGV0ZSBGLmFsaWdubWVudC53cmFwVGV4dCxMcihGLkFsaWdubWVudC5TaHJpbmtUb0ZpdHx8IjAiKSYmKEYuYWxpZ25tZW50LnNocmlua1RvRml0PSEw'@;
put 'KSwrRi5BbGlnbm1lbnQuSW5kZW50JiYoRi5hbGlnbm1lbnQuaW5kZW50PStGLkFsaWdubWVudC5JbmRlbnR8fDApLCtGLkFsaWdubWVudC5Sb3RhdGUmJihGLmFsaWdubWVudC50ZXh0Um90YXRpb249K0YuQWxpZ25tZW50LlJvdGF0ZXx8MCkpfU1bRi5JRF09RiwoIkRlZmF1bHQiPT1GLklE'@;
put 'fHwiTm9ybWFsIj09Ri5OYW1lKSYmeTMoRil9ZnVuY3Rpb24gR3YoTSxGKXtzd2l0Y2goTSl7Y2FzZSJOb25lIjpyZXR1cm4ibm9uZSI7Y2FzZSJEYXNoIjpyZXR1cm4iZGFzaGVkIjtjYXNlIkRvdCI6cmV0dXJuImRvdHRlZCI7Y2FzZSJEYXNoRG90IjpyZXR1cm4iZGFzaERvdCI7Y2FzZSJE'@;
put 'YXNoRG90RG90IjpyZXR1cm4iZGFzaERvdERvdCI7Y2FzZSJTbGFudERhc2hEb3QiOnJldHVybiJzbGFudERhc2hEb3QiO2Nhc2UiRG91YmxlIjpyZXR1cm4iZG91YmxlIjtjYXNlIkNvbnRpbnVvdXMiOnN3aXRjaCgrRnx8MCl7Y2FzZSAwOnJldHVybiJoYWlyIjtjYXNlIDE6cmV0dXJuInRo'@;
put 'aW4iO2Nhc2UgMjpyZXR1cm4ibWVkaXVtIjtjYXNlIDM6cmV0dXJuInRoaWNrIn1yZXR1cm4idGhpbiJ9cmV0dXJuIE19ZnVuY3Rpb24gSTUoTSxGLE8sSixpZSxwZSx5ZSx2ZSxNZSxqZSl7dmFyIFllPSJHZW5lcmFsIixxZT1KLlN0eWxlSUQsaXQ9e307amU9amV8fHt9O3ZhciBodD1bXSxr'@;
put 'dD0wO2Zvcih2b2lkIDA9PT1xZSYmdmUmJihxZT12ZS5TdHlsZUlEKSx2b2lkIDA9PT1xZSYmeWUmJihxZT15ZS5TdHlsZUlEKTt2b2lkIDAhPT1wZVtxZV07KXt2YXIgdXQ9cGVbcWVdO2lmKCJHZW5lcmFsIj09WWUmJnV0Lm5mJiYoWWU9cGVbcWVdLm5mKSx1dC5JbnRlcmlvciYmaHQucHVz'@;
put 'aChwZVtxZV0uSW50ZXJpb3IpLHV0LmFsaWdubWVudCYmKGl0LmFsaWdubWVudHx8KGl0LmFsaWdubWVudD1YdCh1dC5hbGlnbm1lbnQpKSksbnVsbD09aXQuYm9sZCYmdXQuQm9sZCYmKGl0LmJvbGQ9ITApLG51bGw9PWl0Lml0YWxpYyYmdXQuSXRhbGljJiYoaXQuaXRhbGljPSEwKSxudWxs'@;
put 'PT1pdC5zdHJpa2UmJnV0LlN0cmlrZSYmKGl0LnN0cmlrZT0hMCksbnVsbD09aXQuc3omJnV0LlNpemUmJihpdC5zej11dC5TaXplKSxudWxsPT1pdC5uYW1lJiZ1dC5Gb250TmFtZSYmKGl0Lm5hbWU9dXQuRm9udE5hbWUpLG51bGw9PWl0LnVuZGVybGluZSYmdXQuVW5kZXJsaW5lJiYoaXQu'@;
put 'dW5kZXJsaW5lPXV0LlVuZGVybGluZSksbnVsbD09aXQuY29sb3ImJnV0LlJHQiYmKGl0LmNvbG9yPXtyZ2I6dXQuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKEF0KXtudWxsPT1pdFtBdF0mJnV0W0F0XSYmKGl0W0F0XT1YdCh1dFtBdF0p'@;
put 'KX0pLCJEZWZhdWx0Ij09cWUpYnJlYWs7cWU9dXQuUGFyZW50fHwiRGVmYXVsdCJ9aXQubmFtZXx8KGl0Lm5hbWU9cGUuRGVmYXVsdCYmcGUuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksaXQuc3p8fChpdC5zej1wZS5EZWZhdWx0JiZwZS5EZWZhdWx0LlNpemV8fDEyKTt2YXIgdnQ9IiI7'@;
put 'aWYoTXx8Si5Gb3JtdWxhfHwiU3RyaW5nIj09Ty5UeXBlfHwiTnVtYmVyIj09Ty5UeXBlKXN3aXRjaChPLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Si50PSJiIixKLnY9THIoTSk7YnJlYWs7Y2FzZSJTdHJpbmciOkoudD0icyIsdnQ9b28obXIoTSkpLEoudj1NLmluZGV4T2YoIjwiKT4tMT9tcihG'@;
put 'fHxNKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOnZ0LE0uaW5kZXhPZigiPCIpPi0xJiYoSi5SPU51Lmh0bWxfdG9fcnMobXIoTSkpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPU0uc2xpY2UoLTEpJiYoTSs9IloiKSxKLnY9KEZ0KE0pLW5ldyBEYXRlKERhdGUuVVRDKDE4OTksMTEsMzAp'@;
put 'KSkvODY0ZTUsSi52IT1KLnY/Si52PW1yKE0pOkoudjw2MCYmKEoudj1KLnYtMSksKCFZZXx8IkdlbmVyYWwiPT1ZZSkmJihZZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1KLnYmJihKLnY9K00pLEoudHx8KEoudD0ibiIpO2JyZWFrO2Nhc2UiRXJyb3IiOkoudD0iZSIs'@;
put 'Si52PWcwW01dLCExIT09amUuY2VsbFRleHQmJihKLnc9TSk7YnJlYWs7ZGVmYXVsdDoiIj09TSYmIiI9PUY/Si50PSJ6IjooSi50PSJzIix2dD1vbyhtcihNKSksSi52PU0uaW5kZXhPZigiPCIpPi0xP21yKEZ8fE0pLnJlcGxhY2UoLzxbXl0qPz4vZywiIik6dnQsTS5pbmRleE9mKCI8Iik+'@;
put 'LTEmJihKLlI9TnUuaHRtbF90b19ycyhtcihNKSkpKX1lbHNlIEoudD0ieiIsZGVsZXRlIEoudjtpZihmdW5jdGlvbiB0eChNLEYsTyl7aWYoInoiIT09TS50KXtpZighT3x8ITEhPT1PLmNlbGxUZXh0KXRyeXtNLnc9ImUiPT09TS50P00ud3x8dWxbTS52XToiR2VuZXJhbCI9PT1GPyJuIj09'@;
put 'PU0udD8oMHxNLnYpPT09TS52P0MuX2dlbmVyYWxfaW50KE0udik6Qy5fZ2VuZXJhbF9udW0oTS52KTpDLl9nZW5lcmFsKE0udik6ZnVuY3Rpb24gUVMoTSxGKXt2YXIgTz1uZVtNXXx8bXIoTSk7cmV0dXJuIkdlbmVyYWwiPT09Tz9DLl9nZW5lcmFsKEYpOkMuZm9ybWF0KE8sRil9KEZ8fCJH'@;
put 'ZW5lcmFsIixNLnYpfWNhdGNoKHBlKXtpZihPLldURil0aHJvdyBwZX10cnl7dmFyIEo9bmVbRl18fEZ8fCJHZW5lcmFsIjtpZihPLmNlbGxORiYmKE0uej1KKSxPLmNlbGxEYXRlcyYmIm4iPT1NLnQmJkMuaXNfZGF0ZShKKSl7dmFyIGllPUMucGFyc2VfZGF0ZV9jb2RlKE0udik7aWUmJihN'@;
put 'LnQ9ImQiLE0udj1uZXcgRGF0ZShpZS55LGllLm0tMSxpZS5kLGllLkgsaWUuTSxpZS5TLGllLnUpKX19Y2F0Y2gocGUpe2lmKE8uV1RGKXRocm93IHBlfX19KEosWWUsamUpLCExIT09amUuY2VsbEZvcm11bGEpaWYoSi5Gb3JtdWxhKXt2YXIgUHQ9bXIoSi5Gb3JtdWxhKTs2MT09UHQuY2hh'@;
put 'ckNvZGVBdCgwKSYmKFB0PVB0LnNsaWNlKDEpKSxKLmY9bDQoUHQsaWUpLGRlbGV0ZSBKLkZvcm11bGEsIlJDIj09Si5BcnJheVJhbmdlP0ouRj1sNCgiUkM6UkMiLGllKTpKLkFycmF5UmFuZ2UmJihKLkY9bDQoSi5BcnJheVJhbmdlLGllKSxNZS5wdXNoKFtibyhKLkYpLEouRl0pKX1lbHNl'@;
put 'IGZvcihrdD0wO2t0PE1lLmxlbmd0aDsrK2t0KWllLnI+PU1lW2t0XVswXS5zLnImJmllLnI8PU1lW2t0XVswXS5lLnImJmllLmM+PU1lW2t0XVswXS5zLmMmJmllLmM8PU1lW2t0XVswXS5lLmMmJihKLkY9TWVba3RdWzFdKTtpZihqZS5jZWxsU3R5bGVzJiYoaHQuZm9yRWFjaChmdW5jdGlv'@;
put 'bihBdCl7IWl0LnBhdHRlcm5UeXBlJiZBdC5wYXR0ZXJuVHlwZSYmKGl0LnBhdHRlcm5UeXBlPUF0LnBhdHRlcm5UeXBlKSwhaXQuZmdDb2xvciYmQXQuZmdDb2xvciYmKGl0LmZnQ29sb3I9QXQuZmdDb2xvcil9KSxKLnM9aXQpLHZvaWQgMCE9PUouU3R5bGVJRCYmKEouaXhmZT1KLlN0eWxl'@;
put 'SUQpLEouUiYmSi5zKXt2YXIgRHQ9WHQoSi5zKTtkZWxldGUgRHQuYm9sZCxkZWxldGUgRHQuaXRhbGljLGRlbGV0ZSBEdC51bmRlcmxpbmUsZGVsZXRlIER0LnN0cmlrZSxKLlIuZm9yRWFjaChmdW5jdGlvbihBdCl7QXQucz16dChYdChEdCksQXQucyl9KX19ZnVuY3Rpb24gX1coTSl7TS50'@;
put 'PU0udnx8IiIsTS50PU0udC5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxNLnY9TS53PU0uaXhmZT12b2lkIDB9ZnVuY3Rpb24gb3goTSl7aWYoZGUmJkJ1ZmZlci5pc0J1ZmZlcihNKSlyZXR1cm4gTS50b1N0cmluZygidXRmOCIpO2lmKCJzdHJpbmciPT10eXBl'@;
put 'b2YgTSlyZXR1cm4gTTtpZih0eXBlb2YgVWludDhBcnJheTwidSImJk0gaW5zdGFuY2VvZiBVaW50OEFycmF5KXJldHVybiBCaShqKFMoTSkpKTt0aHJvdyBuZXcgRXJyb3IoIkJhZCBpbnB1dCBmb3JtYXQ6IGV4cGVjdGVkIEJ1ZmZlciBvciBzdHJpbmciKX12YXIgUjU9LzwoXC8/KShbXlxz'@;
put 'Pz48IVwvOl0qOnwpKFteXHM/PD46XC9cW10rKSg/Oltccz86PFwvXVtePl0qKT8+L2dtO2Z1bmN0aW9uIHc4KE0sRil7dmFyIE89Rnx8e30sSj16KG94KE0pKTsoImJpbmFyeSI9PU8udHlwZXx8ImFycmF5Ij09Ty50eXBlfHwiYmFzZTY0Ij09Ty50eXBlKSYmKEo9dHlwZW9mIGNwdGFibGU8'@;
put 'InUiP2NwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFYoSikpOkJpKEopKTt2YXIgaWU9Si5zbGljZSgwLDEwMjQpLnRvTG93ZXJDYXNlKCkscGU9ITE7aWYoKDEwMjMmaWUuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJmllLmluZGV4T2YoIiwiKSwxMDIzJmllLmluZGV4T2YoIjsiKSkp'@;
put 'e3ZhciB5ZT1YdChPKTtyZXR1cm4geWUudHlwZT0ic3RyaW5nIixqMi50b193b3JrYm9vayhKLHllKX1pZigtMT09aWUuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbih5Yyl7aWUu'@;
put 'aW5kZXhPZigiPCIreWMpPj0wJiYocGU9ITApfSkscGUpcmV0dXJuIE51LnRvX3dvcmtib29rKEosTyk7dmFyIHZlLGplLE1lPVtdO251bGwhPXRlJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT10ZSk7dmFyIF9yLFllPXt9LHFlPVtdLGl0PU8uZGVuc2U/W106e30saHQ9IiIsa3Q9e30sdXQ9'@;
put 'e30sdnQ9e30sUHQ9SHUoJzxEYXRhIHNzOlR5cGU9IlN0cmluZyI+JyksRHQ9MCxBdD0wLFp0PTAsZ249e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0scW49e30sdW49e30sSm49IiIsWW49MCxMbj1bXSx0cj17fSxycj17fSxVbj0wLFhyPVtdLHBpPXt9LE9pPVtdLE5pPXt9LGRpPVtd'@;
put 'LEFuPSExLE1yPVtdLG9yPVtdLFRuPXt9LENyPTAsU2k9MCxacj17U2hlZXRzOltdLFdCUHJvcHM6e2RhdGUxOTA0OiExfX0sVWk9e307UjUubGFzdEluZGV4PTAsSj1KLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKTtmb3IodmFyIFJvPSIiO3ZlPVI1LmV4ZWMoSik7KXN3aXRj'@;
put 'aCh2ZVszXT0oUm89dmVbM10pLnRvTG93ZXJDYXNlKCkpe2Nhc2UiZGF0YSI6aWYoImRhdGEiPT1Sbyl7aWYoIi8iPT09dmVbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitqZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5j'@;
put 'aGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZNZS5wdXNoKFt2ZVszXSwhMF0pO2JyZWFrfWlmKE1lW01lLmxlbmd0aC0xXVsxXSlicmVhazsiLyI9PT12ZVsxXT9JNShKLnNsaWNlKER0LHZlLmluZGV4KSxKbixQdCwiY29tbWVudCI9PU1lW01lLmxlbmd0aC0xXVswXT9OaTp1dCx7YzpBdCxyOlp0'@;
put 'fSxxbixkaVtBdF0sdnQsTXIsTyk6KEpuPSIiLFB0PUh1KHZlWzBdKSxEdD12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrO2Nhc2UiY2VsbCI6aWYoIi8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe2lmKCh1dD1iOCh2ZVsw'@;
put 'XSkpLkluZGV4JiYoQXQ9K3V0LkluZGV4LTEpLEF0PGduLnMuYyYmKGduLnMuYz1BdCksQXQ+Z24uZS5jJiYoZ24uZS5jPUF0KSxPaT1bXSwhTy5zaGVldFN0dWJzKXsrK0F0O2JyZWFrfUk1KCIiLCIiLHt9LCJjb21tZW50Ij09TWVbTWUubGVuZ3RoLTFdWzBdP05pOnV0LHtjOkF0LHI6WnR9'@;
put 'LHFuLGRpW0F0XSx2dCxNcixPKX1pZihPaS5sZW5ndGg+MCYmKHV0LmM9T2kpLCghTy5zaGVldFJvd3N8fE8uc2hlZXRSb3dzPlp0KSYmKHZvaWQgMCE9PXV0LnZ8fE8uc2hlZXRTdHVicykmJihPLmRlbnNlPyhpdFtadF18fChpdFtadF09W10pLGl0W1p0XVtBdF09dXQpOml0W2ZvKEF0KSty'@;
put 'cyhadCldPXV0KSx1dC5IUmVmJiYodXQubD17VGFyZ2V0Om1yKHV0LkhSZWYpfSx1dC5IUmVmU2NyZWVuVGlwJiYodXQubC5Ub29sdGlwPXV0LkhSZWZTY3JlZW5UaXApLGRlbGV0ZSB1dC5IUmVmLGRlbGV0ZSB1dC5IUmVmU2NyZWVuVGlwKSwodXQuTWVyZ2VBY3Jvc3N8fHV0Lk1lcmdlRG93'@;
put 'bikmJihDcj1BdCsoMHxwYXJzZUludCh1dC5NZXJnZUFjcm9zcywxMCkpLFNpPVp0KygwfHBhcnNlSW50KHV0Lk1lcmdlRG93biwxMCkpLChDcj5BdHx8U2k+WnQpJiZMbi5wdXNoKHtzOntjOkF0LHI6WnR9LGU6e2M6Q3IscjpTaX19KSksTy5zaGVldFN0dWJzKWlmKHV0Lk1lcmdlQWNyb3Nz'@;
put 'fHx1dC5NZXJnZURvd24pe2Zvcih2YXIgRmk9QXQ7Rmk8PUNyOysrRmkpZm9yKHZhciBvcz1adDtvczw9U2k7KytvcykoRmk+QXR8fG9zPlp0KSYmKE8uZGVuc2U/KGl0W29zXXx8KGl0W29zXT1bXSksaXRbb3NdW0ZpXT17dDoieiJ9KTppdFtmbyhGaSkrcnMob3MpXT17dDoieiJ9KTtBdD1D'@;
put 'cisxfWVsc2UrK0F0O2Vsc2UgdXQuTWVyZ2VBY3Jvc3M/QXQ9Q3IrMTorK0F0fWVsc2UodXQ9YjgodmVbMF0pKS5JbmRleCYmKEF0PSt1dC5JbmRleC0xKSxBdDxnbi5zLmMmJihnbi5zLmM9QXQpLEF0PmduLmUuYyYmKGduLmUuYz1BdCksIi8+Ij09PXZlWzBdLnNsaWNlKC0yKSYmKytBdCxP'@;
put 'aT1bXTticmVhaztjYXNlInJvdyI6Ii8iPT09dmVbMV18fCIvPiI9PT12ZVswXS5zbGljZSgtMik/KFp0PGduLnMuciYmKGduLnMucj1adCksWnQ+Z24uZS5yJiYoZ24uZS5yPVp0KSwiLz4iPT09dmVbMF0uc2xpY2UoLTIpJiYodnQ9SHUodmVbMF0pKS5JbmRleCYmKFp0PSt2dC5JbmRleC0x'@;
put 'KSxBdD0wLCsrWnQpOigodnQ9SHUodmVbMF0pKS5JbmRleCYmKFp0PSt2dC5JbmRleC0xKSxUbj17fSwoIjAiPT12dC5BdXRvRml0SGVpZ2h0fHx2dC5IZWlnaHQpJiYoVG4uaHB0PXBhcnNlRmxvYXQodnQuSGVpZ2h0KSxUbi5ocHg9WjEoVG4uaHB0KSxvcltadF09VG4pLCIxIj09dnQuSGlk'@;
put 'ZGVuJiYoVG4uaGlkZGVuPSEwLG9yW1p0XT1UbikpO2JyZWFrO2Nhc2Uid29ya3NoZWV0IjppZigiLyI9PT12ZVsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK2plLmpvaW4oInwiKSk7cWUucHVzaChodCksZ24ucy5yPD1nbi5l'@;
put 'LnImJmduLnMuYzw9Z24uZS5jJiYoaXRbIiFyZWYiXT1BaShnbiksTy5zaGVldFJvd3MmJk8uc2hlZXRSb3dzPD1nbi5lLnImJihpdFsiIWZ1bGxyZWYiXT1pdFsiIXJlZiJdLGduLmUucj1PLnNoZWV0Um93cy0xLGl0WyIhcmVmIl09QWkoZ24pKSksTG4ubGVuZ3RoJiYoaXRbIiFtZXJnZXMi'@;
put 'XT1MbiksZGkubGVuZ3RoPjAmJihpdFsiIWNvbHMiXT1kaSksb3IubGVuZ3RoPjAmJihpdFsiIXJvd3MiXT1vciksa3QmJihpdFsiIXNoZWV0Rm9ybWF0Il09V3Yoa3QpKSxZZVtodF09aXR9ZWxzZSBnbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxadD1BdD0wLE1lLnB1c2goW3Zl'@;
put 'WzNdLCExXSksamU9SHUodmVbMF0pLGh0PW1yKGplLk5hbWUpLGl0PU8uZGVuc2U/W106e30sTG49W10sTXI9W10sb3I9W10sWnIuU2hlZXRzLnB1c2goVWk9e25hbWU6aHQsSGlkZGVuOjB9KTticmVhaztjYXNlInRhYmxlIjppZigiLyI9PT12ZVsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9'@;
put 'PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK2plLmpvaW4oInwiKSl9ZWxzZXtpZigiLz4iPT12ZVswXS5zbGljZSgtMikpYnJlYWs7a3Q9SHUodmVbMF0pLE1lLnB1c2goW3ZlWzNdLCExXSksZGk9W10sQW49ITF9YnJlYWs7Y2FzZSJzdHlsZSI6Ii8iPT09dmVbMV0/X08o'@;
put 'cW4sdW4sSm4sTyk6KHVuPUh1KHZlWzBdKSxKbj0iIik7YnJlYWs7Y2FzZSJudW1iZXJmb3JtYXQiOnVuLm5mPW1yKEh1KHZlWzBdKS5Gb3JtYXR8fCJHZW5lcmFsIiksbmVbdW4ubmZdJiYodW4ubmY9bmVbdW4ubmZdKTtmb3IodmFyIGxvPTA7MzkyIT1sbyYmQy5fdGFibGVbbG9dIT11bi5u'@;
put 'ZjsrK2xvKTtpZigzOTI9PWxvKWZvcihsbz01NzszOTIhPWxvOysrbG8paWYobnVsbD09Qy5fdGFibGVbbG9dKXtDLmxvYWQodW4ubmYsbG8pO2JyZWFrfWJyZWFrO2Nhc2UiY29sdW1uIjppZigidGFibGUiIT09TWVbTWUubGVuZ3RoLTFdWzBdfHwiLyI9PT12ZVsxXSlicmVhaztpZigoX3I9'@;
put 'SHUodmVbMF0pKS5IaWRkZW4mJihfci5oaWRkZW49ITAsZGVsZXRlIF9yLkhpZGRlbiksX3IuV2lkdGg/X3Iud3B4PTQqcGFyc2VJbnQoX3IuV2lkdGgsMTApLzM6K19yLkF1dG9GaXRXaWR0aCYmKF9yLmF1dG89MSksIUFuJiZfci53cHg+MTApe0FuPSEwLEhsPUdNO2Zvcih2YXIgRm89MDtG'@;
put 'bzxkaS5sZW5ndGg7KytGbylkaVtGb10mJiR1KGRpW0ZvXSl9QW4mJiR1KF9yKSxkaVtfci5JbmRleC0xfHxkaS5sZW5ndGhdPV9yO2Zvcih2YXIgeG89MDt4bzwrX3IuU3BhbjsrK3hvKWRpW2RpLmxlbmd0aF09WHQoX3IpO2JyZWFrO2Nhc2UibmFtZWRyYW5nZSI6aWYoIi8iPT09dmVbMV0p'@;
put 'YnJlYWs7WnIuTmFtZXN8fChaci5OYW1lcz1bXSk7dmFyIHZpPWxuKHZlWzBdKSxCcz17TmFtZTp2aS5OYW1lLFJlZjpsNCh2aS5SZWZlcnNUby5zbGljZSgxKSx7cjowLGM6MH0pfTtaci5TaGVldHMubGVuZ3RoPjAmJihCcy5TaGVldD1aci5TaGVldHMubGVuZ3RoLTEpLFpyLk5hbWVzLnB1'@;
put 'c2goQnMpO2JyZWFrO2Nhc2UibmFtZWRjZWxsIjpjYXNlImIiOmNhc2UiaSI6Y2FzZSJ1IjpjYXNlInMiOmNhc2UiZW0iOmNhc2UiaDIiOmNhc2UiaDMiOmNhc2Uic3ViIjpjYXNlInN1cCI6Y2FzZSJzcGFuIjpjYXNlInByb3RlY3Rpb24iOmNhc2UicGFyYWdyYXBocyI6Y2FzZSJuYW1lIjpi'@;
put 'cmVhaztjYXNlImFsaWdubWVudCI6aWYoIU8uY2VsbFN0eWxlc3x8Ii8iPT09dmVbMV0pYnJlYWs7dW4uQWxpZ25tZW50PUh1KHZlWzBdKTticmVhaztjYXNlImJvcmRlcnMiOiIvIiE9PXZlWzFdJiYodW4uQm9yZGVycz1bXSk7YnJlYWs7Y2FzZSJib3JkZXIiOmlmKCIvIj09PXZlWzFdKWJy'@;
put 'ZWFrO3VuLkJvcmRlcnN8fCh1bi5Cb3JkZXJzPVtdKSx1bi5Cb3JkZXJzLnB1c2goSHUodmVbMF0pKTticmVhaztjYXNlImZvbnQiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpe0puKz12ZVswXTticmVha30iLyI9PT12ZVsxXT9Kbis9Si5zbGljZShZbix2ZS5pbmRleCt2ZVswXS5sZW5n'@;
put 'dGgpOlluPXZlLmluZGV4O2JyZWFrO2Nhc2UiaW50ZXJpb3IiOmlmKCFPLmNlbGxTdHlsZXN8fCIvIj09PXZlWzFdKWJyZWFrO3VuLkludGVyaW9yPUh1KHZlWzBdKTticmVhaztjYXNlImF1dGhvciI6Y2FzZSJ0aXRsZSI6Y2FzZSJkZXNjcmlwdGlvbiI6Y2FzZSJjcmVhdGVkIjpjYXNlImtl'@;
put 'eXdvcmRzIjpjYXNlInN1YmplY3QiOmNhc2UiY2F0ZWdvcnkiOmNhc2UiY29tcGFueSI6Y2FzZSJsYXN0YXV0aG9yIjpjYXNlImxhc3RzYXZlZCI6Y2FzZSJsYXN0cHJpbnRlZCI6Y2FzZSJ2ZXJzaW9uIjpjYXNlInJldmlzaW9uIjpjYXNlInRvdGFsdGltZSI6Y2FzZSJoeXBlcmxpbmtiYXNl'@;
put 'IjpjYXNlIm1hbmFnZXIiOmNhc2UiY29udGVudHN0YXR1cyI6Y2FzZSJpZGVudGlmaWVyIjpjYXNlImxhbmd1YWdlIjpjYXNlImFwcG5hbWUiOmlmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/SzAodHIsUm8sSi5zbGljZShVbix2ZS5pbmRleCkpOlVuPXZlLmlu'@;
put 'ZGV4K3ZlWzBdLmxlbmd0aDticmVhaztjYXNlInN0eWxlcyI6Y2FzZSJ3b3JrYm9vayI6aWYoIi8iPT09dmVbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitqZS5qb2luKCJ8IikpfWVsc2UgTWUucHVzaChbdmVbM10sITFdKTti'@;
put 'cmVhaztjYXNlImNvbW1lbnQiOmlmKCIvIj09PXZlWzFdKXtpZigoamU9TWUucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKTtfVyhOaSksT2kucHVzaChOaSl9ZWxzZSBNZS5wdXNoKFt2ZVszXSwhMV0pLE5pPXthOihqZT1IdSh2'@;
put 'ZVswXSkpLkF1dGhvcn07YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjppZigiLyI9PT12ZVsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PXZlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK2plLmpvaW4oInwiKSl9ZWxzZSBpZigiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3Ro'@;
put 'LTIpKXt2YXIgRW49SHUodmVbMF0pO2l0WyIhYXV0b2ZpbHRlciJdPXtyZWY6bDQoRW4uUmFuZ2UpLnJlcGxhY2UoL1wkL2csIiIpfSxNZS5wdXNoKFt2ZVszXSwhMF0pfWJyZWFrO2Nhc2UiZGF0YXZhbGlkYXRpb24iOmlmKGl0WyIhdmFsaWRhdGlvbnMiXXx8KGl0WyIhdmFsaWRhdGlvbnMi'@;
put 'XT1bXSksIi8iPT09dmVbMV0pe2lmKChqZT1NZS5wb3AoKSlbMF0hPT12ZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitqZS5qb2luKCJ8IikpfWVsc2UiLyIhPT12ZVswXS5jaGFyQXQodmVbMF0ubGVuZ3RoLTIpJiZNZS5wdXNoKFt2ZVszXSwhMF0pLHBpPXt9O2JyZWFrO2Nh'@;
put 'c2UicGl4ZWxzcGVyaW5jaCI6aWYoIi8iPT09dmVbMV0pe3ZhciBtcz0rSi5zbGljZShEdCx2ZS5pbmRleCk7KDcyPT1tc3x8OTY9PW1zKSYmSGgobXMpfWVsc2UgRHQ9dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6Y2FzZSJkb2N1bWVudHByb3Bl'@;
put 'cnRpZXMiOmNhc2UiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIjpjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOmNhc2UicGl2b3R0YWJsZSI6Y2FzZSJwaXZvdGNhY2hlIjpjYXNlIm5hbWVzIjpjYXNlIm1hcGluZm8iOmNhc2UicGFnZWJyZWFrcyI6Y2FzZSJxdWVyeXRhYmxlIjpjYXNl'@;
put 'InNvcnRpbmciOmNhc2Uic2NoZW1hIjpjYXNlImNvbmRpdGlvbmFsZm9ybWF0dGluZyI6Y2FzZSJzbWFydHRhZ3R5cGUiOmNhc2Uic21hcnR0YWdzIjpjYXNlImV4Y2Vsd29ya2Jvb2siOmNhc2Uid29ya2Jvb2tvcHRpb25zIjpjYXNlIndvcmtzaGVldG9wdGlvbnMiOmlmKCIvIj09PXZlWzFd'@;
put 'KXtpZigoamU9TWUucG9wKCkpWzBdIT09dmVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIramUuam9pbigifCIpKX1lbHNlIi8iIT09dmVbMF0uY2hhckF0KHZlWzBdLmxlbmd0aC0yKSYmTWUucHVzaChbdmVbM10sITBdKTticmVhaztkZWZhdWx0OmlmKDA9PU1lLmxlbmd0aCYm'@;
put 'ImRvY3VtZW50Ij09dmVbM118fDA9PU1lLmxlbmd0aCYmInVvZiI9PXZlWzNdKXJldHVybiBleShKLE8pO3ZhciBocj0hMDtzd2l0Y2goTWVbTWUubGVuZ3RoLTFdWzBdKXtjYXNlIm9mZmljZWRvY3VtZW50c2V0dGluZ3MiOnN3aXRjaCh2ZVszXSl7Y2FzZSJhbGxvd3BuZyI6Y2FzZSJyZW1v'@;
put 'dmVwZXJzb25hbGluZm9ybWF0aW9uIjpjYXNlImRvd25sb2FkY29tcG9uZW50cyI6Y2FzZSJsb2NhdGlvbm9mY29tcG9uZW50cyI6Y2FzZSJjb2xvcnMiOmNhc2UiY29sb3IiOmNhc2UiaW5kZXgiOmNhc2UicmdiIjpjYXNlInRhcmdldHNjcmVlbnNpemUiOmNhc2UicmVhZG9ubHlyZWNvbW1l'@;
put 'bmRlZCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlImNvbXBvbmVudG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ0b29sYmFyIjpjYXNlImhpZGVvZmZpY2Vsb2dvIjpjYXNlInNwcmVhZHNoZWV0YXV0b2ZpdCI6Y2FzZSJsYWJlbCI6Y2FzZSJjYXB0aW9uIjpjYXNlIm1heGhl'@;
put 'aWdodCI6Y2FzZSJtYXh3aWR0aCI6Y2FzZSJuZXh0c2hlZXRudW1iZXIiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJleGNlbHdvcmtib29rIjpzd2l0Y2godmVbM10pe2Nhc2UiZGF0ZTE5MDQiOlpyLldCUHJvcHMuZGF0ZTE5MDQ9ITA7YnJlYWs7Y2FzZSJ3aW5kb3doZWlnaHQi'@;
put 'OmNhc2Uid2luZG93d2lkdGgiOmNhc2Uid2luZG93dG9weCI6Y2FzZSJ3aW5kb3d0b3B5IjpjYXNlInRhYnJhdGlvIjpjYXNlInByb3RlY3RzdHJ1Y3R1cmUiOmNhc2UicHJvdGVjdHdpbmRvdyI6Y2FzZSJwcm90ZWN0d2luZG93cyI6Y2FzZSJhY3RpdmVzaGVldCI6Y2FzZSJkaXNwbGF5aW5r'@;
put 'bm90ZXMiOmNhc2UiZmlyc3R2aXNpYmxlc2hlZXQiOmNhc2Uic3VwYm9vayI6Y2FzZSJzaGVldG5hbWUiOmNhc2Uic2hlZXRpbmRleCI6Y2FzZSJzaGVldGluZGV4Zmlyc3QiOmNhc2Uic2hlZXRpbmRleGxhc3QiOmNhc2UiZGxsIjpjYXNlImFjY2VwdGxhYmVsc2luZm9ybXVsYXMiOmNhc2Ui'@;
put 'ZG9ub3RzYXZlbGlua3ZhbHVlcyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UibWF4aXRlcmF0aW9ucyI6Y2FzZSJtYXhjaGFuZ2UiOmNhc2UicGF0aCI6Y2FzZSJ4Y3QiOmNhc2UiY291bnQiOmNhc2Uic2VsZWN0ZWRzaGVldHMiOmNhc2UiY2FsY3VsYXRpb24iOmNhc2UidW5jYWxjZWQiOmNhc2Ui'@;
put 'c3RhcnR1cHByb21wdCI6Y2FzZSJjcm4iOmNhc2UiZXh0ZXJubmFtZSI6Y2FzZSJmb3JtdWxhIjpjYXNlImNvbGZpcnN0IjpjYXNlImNvbGxhc3QiOmNhc2Uid2FudGFkdmlzZSI6Y2FzZSJib29sZWFuIjpjYXNlImVycm9yIjpjYXNlInRleHQiOmNhc2Uib2xlIjpjYXNlIm5vYXV0b3JlY292'@;
put 'ZXIiOmNhc2UicHVibGlzaG9iamVjdHMiOmNhc2UiZG9ub3RjYWxjdWxhdGViZWZvcmVzYXZlIjpjYXNlIm51bWJlciI6Y2FzZSJyZWZtb2RlcjFjMSI6Y2FzZSJlbWJlZHNhdmVzbWFydHRhZ3MiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJ3b3JrYm9va29wdGlvbnMiOnN3aXRj'@;
put 'aCh2ZVszXSl7Y2FzZSJvd2N2ZXJzaW9uIjpjYXNlImhlaWdodCI6Y2FzZSJ3aWR0aCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlIndvcmtzaGVldG9wdGlvbnMiOnN3aXRjaCh2ZVszXSl7Y2FzZSJ2aXNpYmxlIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIpKWlmKCIvIj09PXZl'@;
put 'WzFdKXN3aXRjaChKLnNsaWNlKFVuLHZlLmluZGV4KSl7Y2FzZSJTaGVldEhpZGRlbiI6VWkuSGlkZGVuPTE7YnJlYWs7Y2FzZSJTaGVldFZlcnlIaWRkZW4iOlVpLkhpZGRlbj0yfWVsc2UgVW49dmUuaW5kZXgrdmVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UiaGVhZGVyIjppdFsiIW1hcmdpbnMi'@;
put 'XXx8cTIoaXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxpdFsiIW1hcmdpbnMiXS5oZWFkZXI9bG4odmVbMF0pLk1hcmdpbjticmVhaztjYXNlImZvb3RlciI6aXRbIiFtYXJnaW5zIl18fHEyKGl0WyIhbWFyZ2lucyJdPXt9LCJ4bG1sIiksaXRbIiFtYXJnaW5zIl0uZm9vdGVyPWxuKHZlWzBd'@;
put 'KS5NYXJnaW47YnJlYWs7Y2FzZSJwYWdlbWFyZ2lucyI6dmFyIG5sPWxuKHZlWzBdKTtpdFsiIW1hcmdpbnMiXXx8cTIoaXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxubC5Ub3AmJihpdFsiIW1hcmdpbnMiXS50b3A9bmwuVG9wKSxubC5MZWZ0JiYoaXRbIiFtYXJnaW5zIl0ubGVmdD1ubC5M'@;
put 'ZWZ0KSxubC5SaWdodCYmKGl0WyIhbWFyZ2lucyJdLnJpZ2h0PW5sLlJpZ2h0KSxubC5Cb3R0b20mJihpdFsiIW1hcmdpbnMiXS5ib3R0b209bmwuQm90dG9tKTticmVhaztjYXNlImRpc3BsYXlyaWdodHRvbGVmdCI6WnIuVmlld3N8fChaci5WaWV3cz1bXSksWnIuVmlld3NbMF18fChaci5W'@;
put 'aWV3c1swXT17fSksWnIuVmlld3NbMF0uUlRMPSEwO2JyZWFrO2Nhc2UiZnJlZXplcGFuZXMiOmNhc2UiZnJvemVubm9zcGxpdCI6Y2FzZSJhY3RpdmVyb3ciOmNhc2UiYWN0aXZlY29sIjpjYXNlInRvcHJvd2JvdHRvbXBhbmUiOmNhc2UibGVmdGNvbHVtbnJpZ2h0cGFuZSI6Y2FzZSJ1bnN5'@;
put 'bmNlZCI6Y2FzZSJwcmludCI6Y2FzZSJwcmludGVycm9ycyI6Y2FzZSJwYW5lcyI6Y2FzZSJzY2FsZSI6Y2FzZSJwYW5lIjpjYXNlIm51bWJlciI6Y2FzZSJsYXlvdXQiOmNhc2UicGFnZXNldHVwIjpjYXNlInNlbGVjdGVkIjpjYXNlInByb3RlY3RvYmplY3RzIjpjYXNlImVuYWJsZXNlbGVj'@;
put 'dGlvbiI6Y2FzZSJwcm90ZWN0c2NlbmFyaW9zIjpjYXNlInZhbGlkcHJpbnRlcmluZm8iOmNhc2UiaG9yaXpvbnRhbHJlc29sdXRpb24iOmNhc2UidmVydGljYWxyZXNvbHV0aW9uIjpjYXNlIm51bWJlcm9mY29waWVzIjpjYXNlImFjdGl2ZXBhbmUiOmNhc2UidG9wcm93dmlzaWJsZSI6Y2Fz'@;
put 'ZSJsZWZ0Y29sdW1udmlzaWJsZSI6Y2FzZSJmaXR0b3BhZ2UiOmNhc2UicmFuZ2VzZWxlY3Rpb24iOmNhc2UicGFwZXJzaXplaW5kZXgiOmNhc2UicGFnZWxheW91dHpvb20iOmNhc2UicGFnZWJyZWFrem9vbSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJmaXR3aWR0aCI6Y2FzZSJmaXRoZWlnaHQi'@;
put 'OmNhc2UiY29tbWVudHNsYXlvdXQiOmNhc2Uiem9vbSI6Y2FzZSJsZWZ0dG9yaWdodCI6Y2FzZSJncmlkbGluZXMiOmNhc2UiYWxsb3dzb3J0IjpjYXNlImFsbG93ZmlsdGVyIjpjYXNlImFsbG93aW5zZXJ0cm93cyI6Y2FzZSJhbGxvd2RlbGV0ZXJvd3MiOmNhc2UiYWxsb3dpbnNlcnRjb2xz'@;
put 'IjpjYXNlImFsbG93ZGVsZXRlY29scyI6Y2FzZSJhbGxvd2luc2VydGh5cGVybGlua3MiOmNhc2UiYWxsb3dmb3JtYXRjZWxscyI6Y2FzZSJhbGxvd3NpemVjb2xzIjpjYXNlImFsbG93c2l6ZXJvd3MiOmNhc2UidGFiY29sb3JpbmRleCI6Y2FzZSJkb25vdGRpc3BsYXloZWFkaW5ncyI6Y2Fz'@;
put 'ZSJzaG93cGFnZWxheW91dHpvb20iOmNhc2UiYmxhY2thbmR3aGl0ZSI6Y2FzZSJkb25vdGRpc3BsYXl6ZXJvcyI6Y2FzZSJkaXNwbGF5cGFnZWJyZWFrIjpjYXNlInJvd2NvbGhlYWRpbmdzIjpjYXNlImRvbm90ZGlzcGxheW91dGxpbmUiOmNhc2Uibm9vcmllbnRhdGlvbiI6Y2FzZSJhbGxv'@;
put 'd3VzZXBpdm90dGFibGVzIjpjYXNlInplcm9oZWlnaHQiOmNhc2Uidmlld2FibGVyYW5nZSI6Y2FzZSJzZWxlY3Rpb24iOmNhc2UicHJvdGVjdGNvbnRlbnRzIjpicmVhaztjYXNlInNwbGl0aG9yaXpvbnRhbCI6Y2FzZSJzcGxpdHZlcnRpY2FsIjppZigiLz4iIT09dmVbMF0uc2xpY2UoLTIp'@;
put 'KWlmKCIvIj09dmVbMV0pe2l0WyIhZnJlZXplIl18fChpdFsiIWZyZWV6ZSJdPSJBMSIpO3ZhciBZYT1ocyhpdFsiIWZyZWV6ZSJdKTsic3BsaXRob3Jpem9udGFsIj09dmVbM10/WWEucj0rSi5zbGljZShVbix2ZS5pbmRleCk6WWEuYz0rSi5zbGljZShVbix2ZS5pbmRleCksaXRbIiFmcmVl'@;
put 'emUiXT1EaShZYSl9ZWxzZSBVbj12ZS5pbmRleCt2ZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJkb25vdGRpc3BsYXlncmlkbGluZXMiOml0WyIhZ3JpZGxpbmVzIl09ITE7YnJlYWs7Y2FzZSJub3N1bW1hcnlyb3dzYmVsb3dkZXRhaWwiOml0WyIhb3V0bGluZSJdfHwoaXRbIiFvdXRsaW5lIl09'@;
put 'e30pLGl0WyIhb3V0bGluZSJdLmFib3ZlPSEwO2JyZWFrO2Nhc2Uibm9zdW1tYXJ5Y29sdW1uc3JpZ2h0ZGV0YWlsIjppdFsiIW91dGxpbmUiXXx8KGl0WyIhb3V0bGluZSJdPXt9KSxpdFsiIW91dGxpbmUiXS5sZWZ0PSEwO2JyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwaXZvdHRh'@;
put 'YmxlIjpjYXNlInBpdm90Y2FjaGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpbW1lZGlhdGVpdGVtc29uZHJvcCI6Y2FzZSJzaG93cGFnZW11bHRpcGxlaXRlbWxhYmVsIjpjYXNlImNvbXBhY3Ryb3dpbmRlbnQiOmNhc2UibG9jYXRpb24iOmNhc2UicGl2b3RmaWVsZCI6Y2FzZSJvcmllbnRhdGlv'@;
put 'biI6Y2FzZSJsYXlvdXRmb3JtIjpjYXNlImxheW91dHN1YnRvdGFsbG9jYXRpb24iOmNhc2UibGF5b3V0Y29tcGFjdHJvdyI6Y2FzZSJwb3NpdGlvbiI6Y2FzZSJwaXZvdGl0ZW0iOmNhc2UiZGF0YXR5cGUiOmNhc2UiZGF0YWZpZWxkIjpjYXNlInNvdXJjZW5hbWUiOmNhc2UicGFyZW50Zmll'@;
put 'bGQiOmNhc2UicHRsaW5laXRlbXMiOmNhc2UicHRsaW5laXRlbSI6Y2FzZSJjb3VudG9mc2FtZWl0ZW1zIjpjYXNlIml0ZW0iOmNhc2UiaXRlbXR5cGUiOmNhc2UicHRzb3VyY2UiOmNhc2UiY2FjaGVpbmRleCI6Y2FzZSJjb25zb2xpZGF0aW9ucmVmZXJlbmNlIjpjYXNlImZpbGVuYW1lIjpj'@;
put 'YXNlInJlZmVyZW5jZSI6Y2FzZSJub2NvbHVtbmdyYW5kIjpjYXNlIm5vcm93Z3JhbmQiOmNhc2UiYmxhbmtsaW5lYWZ0ZXJpdGVtcyI6Y2FzZSJoaWRkZW4iOmNhc2Uic3VidG90YWwiOmNhc2UiYmFzZWZpZWxkIjpjYXNlIm1hcGNoaWxkaXRlbXMiOmNhc2UiZnVuY3Rpb24iOmNhc2UicmVm'@;
put 'cmVzaG9uZmlsZW9wZW4iOmNhc2UicHJpbnRzZXR0aXRsZXMiOmNhc2UibWVyZ2VsYWJlbHMiOmNhc2UiZGVmYXVsdHZlcnNpb24iOmNhc2UicmVmcmVzaG5hbWUiOmNhc2UicmVmcmVzaGRhdGUiOmNhc2UicmVmcmVzaGRhdGVjb3B5IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6Y2FzZSJ2'@;
put 'ZXJzaW9ubGFzdHVwZGF0ZSI6Y2FzZSJ2ZXJzaW9udXBkYXRlYWJsZW1pbiI6Y2FzZSJ2ZXJzaW9ucmVmcmVzaGFibGVtaW4iOmNhc2UiY2FsY3VsYXRpb24iOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJwYWdlYnJlYWtzIjpzd2l0Y2godmVbM10pe2Nhc2UiY29sYnJlYWtzIjpj'@;
put 'YXNlImNvbGJyZWFrIjpjYXNlInJvd2JyZWFrcyI6Y2FzZSJyb3dicmVhayI6Y2FzZSJjb2xzdGFydCI6Y2FzZSJjb2xlbmQiOmNhc2Uicm93ZW5kIjpicmVhaztkZWZhdWx0OmhyPSExfWJyZWFrO2Nhc2UiYXV0b2ZpbHRlciI6c3dpdGNoKHZlWzNdKXtjYXNlImF1dG9maWx0ZXJjb2x1bW4i'@;
put 'OmNhc2UiYXV0b2ZpbHRlcmNvbmRpdGlvbiI6Y2FzZSJhdXRvZmlsdGVyYW5kIjpjYXNlImF1dG9maWx0ZXJvciI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInF1ZXJ5dGFibGUiOnN3aXRjaCh2ZVszXSl7Y2FzZSJpZCI6Y2FzZSJhdXRvZm9ybWF0Zm9udCI6Y2FzZSJhdXRvZm9y'@;
put 'bWF0cGF0dGVybiI6Y2FzZSJxdWVyeXNvdXJjZSI6Y2FzZSJxdWVyeXR5cGUiOmNhc2UiZW5hYmxlcmVkaXJlY3Rpb25zIjpjYXNlInJlZnJlc2hlZGlueGw5IjpjYXNlInVybHN0cmluZyI6Y2FzZSJodG1sdGFibGVzIjpjYXNlImNvbm5lY3Rpb24iOmNhc2UiY29tbWFuZHRleHQiOmNhc2Ui'@;
put 'cmVmcmVzaGluZm8iOmNhc2Uibm90aXRsZXMiOmNhc2UibmV4dGlkIjpjYXNlImNvbHVtbmluZm8iOmNhc2Uib3ZlcndyaXRlY2VsbHMiOmNhc2UiZG9ub3Rwcm9tcHRmb3JmaWxlIjpjYXNlInRleHR3aXphcmRzZXR0aW5ncyI6Y2FzZSJzb3VyY2UiOmNhc2UibnVtYmVyIjpjYXNlImRlY2lt'@;
put 'YWwiOmNhc2UidGhvdXNhbmRzZXBhcmF0b3IiOmNhc2UidHJhaWxpbmdtaW51c251bWJlcnMiOmNhc2UiZm9ybWF0c2V0dGluZ3MiOmNhc2UiZmllbGR0eXBlIjpjYXNlImRlbGltaXRlcnMiOmNhc2UidGFiIjpjYXNlImNvbW1hIjpjYXNlImF1dG9mb3JtYXRuYW1lIjpjYXNlInZlcnNpb25s'@;
put 'YXN0ZWRpdCI6Y2FzZSJ2ZXJzaW9ubGFzdHJlZnJlc2giOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6c3dpdGNoKHZlWzNdKXtjYXNlInJhbmdlIjpwaS5yZWY9dmU7YnJlYWs7Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6'@;
put 'Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJyb3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUi'@;
put 'OmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNhc2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmNhc2UiY2VsbHJhbmdlbGlzdCI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNvcnRpbmciOmNh'@;
put 'c2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpzd2l0Y2godmVbM10pe2Nhc2UicmFuZ2UiOmNhc2UidHlwZSI6Y2FzZSJtaW4iOmNhc2UibWF4IjpjYXNlInNvcnQiOmNhc2UiZGVzY2VuZGluZyI6Y2FzZSJvcmRlciI6Y2FzZSJjYXNlc2Vuc2l0aXZlIjpjYXNlInZhbHVlIjpjYXNlImVycm9y'@;
put 'c3R5bGUiOmNhc2UiZXJyb3JtZXNzYWdlIjpjYXNlImVycm9ydGl0bGUiOmNhc2UiY2VsbHJhbmdlbGlzdCI6Y2FzZSJpbnB1dG1lc3NhZ2UiOmNhc2UiaW5wdXR0aXRsZSI6Y2FzZSJjb21ib2hpZGUiOmNhc2UiaW5wdXRoaWRlIjpjYXNlImNvbmRpdGlvbiI6Y2FzZSJxdWFsaWZpZXIiOmNh'@;
put 'c2UidXNlYmxhbmsiOmNhc2UidmFsdWUxIjpjYXNlInZhbHVlMiI6Y2FzZSJmb3JtYXQiOmJyZWFrO2RlZmF1bHQ6aHI9ITF9YnJlYWs7Y2FzZSJtYXBpbmZvIjpjYXNlInNjaGVtYSI6Y2FzZSJkYXRhIjpzd2l0Y2godmVbM10pe2Nhc2UibWFwIjpjYXNlImVudHJ5IjpjYXNlInJhbmdlIjpj'@;
put 'YXNlInhwYXRoIjpjYXNlImZpZWxkIjpjYXNlInhzZHR5cGUiOmNhc2UiZmlsdGVyb24iOmNhc2UiYWdncmVnYXRlIjpjYXNlImVsZW1lbnR0eXBlIjpjYXNlImF0dHJpYnV0ZXR5cGUiOmNhc2Uic2NoZW1hIjpjYXNlImVsZW1lbnQiOmNhc2UiY29tcGxleHR5cGUiOmNhc2UiZGF0YXR5cGUi'@;
put 'OmNhc2UiYWxsIjpjYXNlImF0dHJpYnV0ZSI6Y2FzZSJleHRlbmRzIjpjYXNlInJvdyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1icmVhaztjYXNlInNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpocj0hMX1pZihocnx8dmVbM10ubWF0Y2goLyFcW0NEQVRBLykpYnJlYWs7aWYoIU1lW01lLmxlbmd0'@;
put 'aC0xXVsxXSl0aHJvdyJVbnJlY29nbml6ZWQgdGFnOiAiK3ZlWzNdKyJ8IitNZS5qb2luKCJ8Iik7aWYoImN1c3RvbWRvY3VtZW50cHJvcGVydGllcyI9PT1NZVtNZS5sZW5ndGgtMV1bMF0pe2lmKCIvPiI9PT12ZVswXS5zbGljZSgtMikpYnJlYWs7Ii8iPT09dmVbMV0/ZXgocnIsUm8sWHIs'@;
put 'Si5zbGljZShVbix2ZS5pbmRleCkpOihYcj12ZSxVbj12ZS5pbmRleCt2ZVswXS5sZW5ndGgpO2JyZWFrfWlmKE8uV1RGKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrdmVbM10rInwiK01lLmpvaW4oInwiKX12YXIgemE9e307cmV0dXJuIU8uYm9va1NoZWV0cyYmIU8uYm9va1Byb3BzJiYo'@;
put 'emEuU2hlZXRzPVllKSx6YS5TaGVldE5hbWVzPXFlLHphLldvcmtib29rPVpyLHphLlNTRj1DLmdldF90YWJsZSgpLHphLlByb3BzPXRyLHphLkN1c3Rwcm9wcz1ycix6YS5TaGVldHMmJnphLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbih5Yyl7dmFyIGthPXphLlNoZWV0c1t5Y107a2Fb'@;
put 'IiFtZXJnZXMiXSYma2FbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKEt0KXsic3RyaW5nIj09dHlwZW9mIEt0JiYoS3Q9dy51dGlscy5kZWNvZGVfcmFuZ2UoS3QpKTt2YXIgbW49dy51dGlscy5lbmNvZGVfY2VsbChLdC5zKSxGbj1BcnJheS5pc0FycmF5KGthKT8oa2FbS3Qucy5yXXx8'@;
put 'W10pW0t0LnMuY106a2FbbW5dO0ZuJiZGbi5zJiYobnVsbCE9Rm4ucy50b3AmJkJjLnNoZWV0X3NldF9yYW5nZV9zdHlsZShrYSxLdCx7dG9wOkZuLnMudG9wfSksbnVsbCE9Rm4ucy5ib3R0b20mJkJjLnNoZWV0X3NldF9yYW5nZV9zdHlsZShrYSxLdCx7Ym90dG9tOkZuLnMuYm90dG9tfSks'@;
put 'bnVsbCE9Rm4ucy5sZWZ0JiZCYy5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoa2EsS3Qse2xlZnQ6Rm4ucy5sZWZ0fSksbnVsbCE9Rm4ucy5yaWdodCYmQmMuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKGthLEt0LHtyaWdodDpGbi5zLnJpZ2h0fSkpfSl9KSx6YX1mdW5jdGlvbiBNOChNLEYpe3N3aXRj'@;
put 'aChOMyhGPUZ8fHt9KSxGLnR5cGV8fCJiYXNlNjQiKXtjYXNlImJhc2U2NCI6cmV0dXJuIHc4KHNlLmRlY29kZShNKSxGKTtjYXNlImJpbmFyeSI6Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6cmV0dXJuIHc4KE0sRik7Y2FzZSJhcnJheSI6cmV0dXJuIHc4KGooTSksRil9fWZ1bmN0aW9uIHF2'@;
put 'KE0pe3JldHVybiBkcigiTmFtZWRSYW5nZSIsbnVsbCx7InNzOk5hbWUiOk0uTmFtZSwic3M6UmVmZXJzVG8iOiI9Iit4MyhNLlJlZix7cjowLGM6MH0pfSl9ZnVuY3Rpb24gd1coTSxGLE8sSixpZSxwZSx5ZSl7aWYoIU18fG51bGw9PU0udiYmbnVsbD09TS5mJiYhSi5zaGVldFN0dWJzKXJl'@;
put 'dHVybiIiO3ZhciB2ZT17fTtpZihNLmYmJih2ZVsic3M6Rm9ybXVsYSJdPSI9Iit5cih4MyhNLmYseWUpKSksTS5GJiZNLkYuc2xpY2UoMCxGLmxlbmd0aCk9PUYpe3ZhciBNZT1ocyhNLkYuc2xpY2UoRi5sZW5ndGgrMSkpO3ZlWyJzczpBcnJheVJhbmdlIl09IlJDOlIiKyhNZS5yPT15ZS5y'@;
put 'PyIiOiJbIisoTWUuci15ZS5yKSsiXSIpKyJDIisoTWUuYz09eWUuYz8iIjoiWyIrKE1lLmMteWUuYykrIl0iKX1pZihNLmwmJk0ubC5UYXJnZXQmJih2ZVsic3M6SFJlZiJdPXlyKE0ubC5UYXJnZXQpLE0ubC5Ub29sdGlwJiYodmVbIng6SFJlZlNjcmVlblRpcCJdPXlyKE0ubC5Ub29sdGlw'@;
put 'KSkpLE9bIiFtZXJnZXMiXSlmb3IodmFyIGplPU9bIiFtZXJnZXMiXSxZZT0wO1llIT1qZS5sZW5ndGg7KytZZSlqZVtZZV0ucy5jIT15ZS5jfHxqZVtZZV0ucy5yIT15ZS5yfHwoamVbWWVdLmUuYz5qZVtZZV0ucy5jJiYodmVbInNzOk1lcmdlQWNyb3NzIl09amVbWWVdLmUuYy1qZVtZZV0u'@;
put 'cy5jKSxqZVtZZV0uZS5yPmplW1llXS5zLnImJih2ZVsic3M6TWVyZ2VEb3duIl09amVbWWVdLmUuci1qZVtZZV0ucy5yKSk7dmFyIHFlPSIiLGl0PSIiO3N3aXRjaChNLnQpe2Nhc2UieiI6aWYoIUouc2hlZXRTdHVicylyZXR1cm4iIjticmVhaztjYXNlIm4iOnFlPSJOdW1iZXIiLGl0PVN0'@;
put 'cmluZyhNLnYpO2JyZWFrO2Nhc2UiYiI6cWU9IkJvb2xlYW4iLGl0PU0udj8iMSI6IjAiO2JyZWFrO2Nhc2UiZSI6cWU9IkVycm9yIixpdD11bFtNLnZdO2JyZWFrO2Nhc2UiZCI6cWU9IkRhdGVUaW1lIixpdD1uZXcgRGF0ZShNLnYpLnRvSVNPU3RyaW5nKCksbnVsbD09TS56JiYoTS56PU0u'@;
put 'enx8Qy5fdGFibGVbMTRdKTticmVhaztjYXNlInMiOnFlPSJTdHJpbmciLGl0PVdpKE0udnx8IiIpfXZhciBodD1ydShKLmNlbGxYZnMsbnVsbCxNLEopO3ZlWyJzczpTdHlsZUlEIl09InMiKygyMStodCksdmVbInNzOkluZGV4Il09eWUuYysxO3ZhciBrdD1udWxsIT1NLnY/aXQ6IiIsdXQ9'@;
put 'InoiPT1NLnQ/IiI6TS5SP2Z1bmN0aW9uIGJXKE0pe3JldHVybic8c3M6RGF0YSBzczpUeXBlPSJTdHJpbmciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4nK00ubWFwKGZ1bmN0aW9uKE8pe3ZhciBKPVdpKE8udik7cmV0dXJuIE8ucyYmKE8ucy5ib2xkJiYoSj0i'@;
put 'PEI+IitKKyI8L0I+IiksTy5zLml0YWxpYyYmKEo9IjxJPiIrSisiPC9JPiIpLE8ucy5zdHJpa2UmJihKPSI8Uz4iK0orIjwvUz4iKSxPLnMudW5kZXJsaW5lJiYoSj0iPFU+IitKKyI8L1U+IiksInN1cGVyIj09Ty5zLnZhbGlnbiYmKEo9IjxTdXA+IitKKyI8L1N1cD4iKSwic3ViIj09Ty5z'@;
put 'LnZhbGlnbiYmKEo9IjxTdWI+IitKKyI8L1N1Yj4iKSwoTy5zLm5hbWV8fE8ucy5zenx8Ty5zLmNvbG9yJiZudWxsIT1PLnMuY29sb3IucmdiKSYmKEo9WyI8Rm9udCIsTy5zLm5hbWU/JyBodG1sOkZhY2U9IicrTy5zLm5hbWUrJyInOiIiLE8ucy5zej8nIGh0bWw6U2l6ZT0iJytPLnMuc3or'@;
put 'JyInOiIiLE8ucy5jb2xvcj8nIGh0bWw6Q29sb3I9IiMnKygiMDAwMDAwIisoIm51bWJlciI9PXR5cGVvZiBPLnMuY29sb3IucmdiP08ucy5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOk8ucy5jb2xvci5yZ2IpKS5zbGljZSgtNikrJyInOiIiLCI+IixKLCI8L0ZvbnQ+Il0uam9pbigiIikpKSxK'@;
put 'fSkuam9pbigiIikrIjwvRGF0YT4ifShNLlIpOic8RGF0YSBzczpUeXBlPSInK3FlKyciPicra3QrIjwvRGF0YT4iO3JldHVybihNLmN8fFtdKS5sZW5ndGg+MCYmKHV0Kz1mdW5jdGlvbiB5VyhNKXtyZXR1cm4gTS5tYXAoZnVuY3Rpb24oRil7dmFyIEo9ZHIoInNzOkRhdGEiLGhvKEYudHx8'@;
put 'IiIpLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9KTtyZXR1cm4gZHIoIkNvbW1lbnQiLEoseyJzczpBdXRob3IiOkYuYX0pfSkuam9pbigiIil9KE0uYykpLGRyKCJDZWxsIix1dCx2ZSl9ZnVuY3Rpb24gTVcoTSxGKXt2YXIgTz0nPFJvdyBzczpJbmRleD0iJyso'@;
put 'TSsxKSsnIic7cmV0dXJuIEYmJihGLmhweCYmIUYuaHB0JiYoRi5ocHQ9WTIoRi5ocHgpKSxGLmhwdCYmKE8rPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK0YuaHB0KyciJyksRi5oaWRkZW4mJihPKz0nIHNzOkhpZGRlbj0iMSInKSksTysiPiJ9ZnVuY3Rpb24gU1coTSxG'@;
put 'LE8pe3ZhciBKPVtdLHBlPU8uU2hlZXRzW08uU2hlZXROYW1lc1tNXV0seWU9cGU/ZnVuY3Rpb24gdk8oTSxGLE8sSil7aWYoIU18fCEoKEp8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgaWU9Si5Xb3JrYm9vay5OYW1lcyxwZT1bXSx5ZT0wO3llPGllLmxlbmd0'@;
put 'aDsrK3llKXt2YXIgdmU9aWVbeWVdO3ZlLlNoZWV0PT1PJiYodmUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8cGUucHVzaChxdih2ZSkpKX1yZXR1cm4gcGUuam9pbigiIil9KHBlLDAsTSxPKToiIjtyZXR1cm4geWUubGVuZ3RoPjAmJkoucHVzaCgiPE5hbWVzPiIreWUrIjwvTmFtZXM+Iiks'@;
put 'eWU9cGU/ZnVuY3Rpb24gQ1coTSxGLE8sSil7aWYoIU1bIiFyZWYiXSlyZXR1cm4iIjt2YXIgaWU9Ym8oTVsiIXJlZiJdKSxwZT1NWyIhbWVyZ2VzIl18fFtdLHllPTAsdmU9W107TVsiIWNvbHMiXSYmTVsiIWNvbHMiXS5mb3JFYWNoKGZ1bmN0aW9uKHZ0LFB0KXskdSh2dCk7dmFyIER0PSEh'@;
put 'dnQud2lkdGgsQXQ9ZjUoUHQsdnQpLFp0PXsic3M6SW5kZXgiOlB0KzF9O0R0JiYoWnRbInNzOldpZHRoIl09cXAoQXQud2lkdGgpKSx2dC5oaWRkZW4mJihadFsic3M6SGlkZGVuIl09IjEiKSx2ZS5wdXNoKGRyKCJDb2x1bW4iLG51bGwsWnQpKX0pO2Zvcih2YXIgTWU9QXJyYXkuaXNBcnJh'@;
put 'eShNKSxqZT1pZS5zLnI7amU8PWllLmUucjsrK2plKXtmb3IodmFyIFllPVtNVyhqZSwoTVsiIXJvd3MiXXx8W10pW2plXSldLHFlPWllLnMuYztxZTw9aWUuZS5jOysrcWUpe3ZhciBpdD0hMTtmb3IoeWU9MDt5ZSE9cGUubGVuZ3RoOysreWUpaWYoIShwZVt5ZV0ucy5jPnFlfHxwZVt5ZV0u'@;
put 'cy5yPmplfHxwZVt5ZV0uZS5jPHFlfHxwZVt5ZV0uZS5yPGplKSl7KHBlW3llXS5zLmMhPXFlfHxwZVt5ZV0ucy5yIT1qZSkmJihpdD0hMCk7YnJlYWt9aWYoIWl0KXt2YXIgaHQ9e3I6amUsYzpxZX0sa3Q9RGkoaHQpO1llLnB1c2god1coTWU/KE1bamVdfHxbXSlbcWVdOk1ba3RdLGt0LE0s'@;
put 'RiwwLDAsaHQpKX19WWUucHVzaCgiPC9Sb3c+IiksWWUubGVuZ3RoPjImJnZlLnB1c2goWWUuam9pbigiIikpfXJldHVybiB2ZS5qb2luKCIiKX0ocGUsRik6IiIseWUubGVuZ3RoPjAmJkoucHVzaCgiPFRhYmxlPiIreWUrIjwvVGFibGU+IiksSi5wdXNoKGZ1bmN0aW9uIHZXKE0sRixPLEop'@;
put 'e2lmKCFNKXJldHVybiIiO3ZhciBpZT1bXTtpZihNWyIhbWFyZ2lucyJdJiYoaWUucHVzaCgiPFBhZ2VTZXR1cD4iKSxNWyIhbWFyZ2lucyJdLmhlYWRlciYmaWUucHVzaChkcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOk1bIiFtYXJnaW5zIl0uaGVhZGVyfSkpLE1bIiFtYXJnaW5zIl0u'@;
put 'Zm9vdGVyJiZpZS5wdXNoKGRyKCJGb290ZXIiLG51bGwseyJ4Ok1hcmdpbiI6TVsiIW1hcmdpbnMiXS5mb290ZXJ9KSksaWUucHVzaChkcigiUGFnZU1hcmdpbnMiLG51bGwseyJ4OkJvdHRvbSI6TVsiIW1hcmdpbnMiXS5ib3R0b218fCIwLjc1IiwieDpMZWZ0IjpNWyIhbWFyZ2lucyJdLmxl'@;
put 'ZnR8fCIwLjciLCJ4OlJpZ2h0IjpNWyIhbWFyZ2lucyJdLnJpZ2h0fHwiMC43IiwieDpUb3AiOk1bIiFtYXJnaW5zIl0udG9wfHwiMC43NSJ9KSksaWUucHVzaCgiPC9QYWdlU2V0dXA+IikpLEomJkouV29ya2Jvb2smJkouV29ya2Jvb2suU2hlZXRzJiZKLldvcmtib29rLlNoZWV0c1tPXSlp'@;
put 'ZihKLldvcmtib29rLlNoZWV0c1tPXS5IaWRkZW4paWUucHVzaChkcigiVmlzaWJsZSIsMT09Si5Xb3JrYm9vay5TaGVldHNbT10uSGlkZGVuPyJTaGVldEhpZGRlbiI6IlNoZWV0VmVyeUhpZGRlbiIse30pKTtlbHNle2Zvcih2YXIgcGU9MDtwZTxPJiYoIUouV29ya2Jvb2suU2hlZXRzW3Bl'@;
put 'XXx8Si5Xb3JrYm9vay5TaGVldHNbcGVdLkhpZGRlbik7KytwZSk7cGU9PU8mJmllLnB1c2goIjxTZWxlY3RlZC8+Iil9aWYoKCgoKEp8fHt9KS5Xb3JrYm9va3x8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5SVEwmJmllLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLGRuKE1bIiFncmlk'@;
put 'bGluZXMiXSkmJmllLnB1c2goIjxEb05vdERpc3BsYXlHcmlkbGluZXMvPiIpLE1bIiFmcmVlemUiXSl7aWUucHVzaCgiPEZyZWV6ZVBhbmVzLz4iKSxpZS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIHllPWhzKE1bIiFmcmVlemUiXSk7eWUucj4wJiYoaWUucHVzaChybygiU3BsaXRI'@;
put 'b3Jpem9udGFsIiwiIit5ZS5yKSksaWUucHVzaChybygiVG9wUm93Qm90dG9tUGFuZSIsIiIreWUucikpKSx5ZS5jPjAmJihpZS5wdXNoKHJvKCJTcGxpdFZlcnRpY2FsIiwiIit5ZS5jKSksaWUucHVzaChybygiTGVmdENvbHVtblJpZ2h0UGFuZSIsIiIreWUuYykpKX1yZXR1cm4gTVsiIXBy'@;
put 'b3RlY3QiXSYmKGllLnB1c2gocm8oIlByb3RlY3RDb250ZW50cyIsIlRydWUiKSksTVsiIXByb3RlY3QiXS5vYmplY3RzJiZpZS5wdXNoKHJvKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksTVsiIXByb3RlY3QiXS5zY2VuYXJpb3MmJmllLnB1c2gocm8oIlByb3RlY3RTY2VuYXJpb3MiLCJU'@;
put 'cnVlIikpLG51bGw9PU1bIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHN8fE1bIiFwcm90ZWN0Il0uc2VsZWN0TG9ja2VkQ2VsbHM/bnVsbCE9TVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiYhTVsiIXByb3RlY3QiXS5zZWxlY3RVbmxvY2tlZENlbGxzJiZpZS5wdXNoKHJv'@;
put 'KCJFbmFibGVTZWxlY3Rpb24iLCJVbmxvY2tlZENlbGxzIikpOmllLnB1c2gocm8oIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3Mi'@;
put 'LCJBbGxvd1NpemVSb3dzIl0sWyJpbnNlcnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xz'@;
put 'Il0sWyJkZWxldGVSb3dzIiwiQWxsb3dEZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXtNWyIhcHJvdGVjdCJdW3ZlWzBd'@;
put 'XSYmaWUucHVzaCgiPCIrdmVbMV0rIi8+Iil9KSksMD09aWUubGVuZ3RoPyIiOmRyKCJXb3Jrc2hlZXRPcHRpb25zIixpZS5qb2luKCIiKSx7eG1sbnM6JGEueH0pfShwZSwwLE0sTykpLEouam9pbigiIil9ZnVuY3Rpb24geFcoTSxGKXtGfHwoRj17fSksTS5TU0Z8fChNLlNTRj1DLmdldF90'@;
put 'YWJsZSgpKSxNLlNTRiYmKEsoQyksQy5sb2FkX3RhYmxlKE0uU1NGKSxGLnJldnNzZj1EZShNLlNTRiksRi5yZXZzc2ZbTS5TU0ZbNjU1MzVdXT0wLEYuc3NmPU0uU1NGLE0uU3R5bGVzPXtGb250czpGLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJD'@;
put 'YWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOkYuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9XSxCb3JkZXJzOkYuQm9yZGVycz1be31dfSxGLmNlbGxYZnM9W10sRi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0s'@;
put 'cnUoRi5jZWxsWGZzLG51bGwse30se3JldnNzZjp7R2VuZXJhbDowfX0pKTt2YXIgTz1bXTtPLnB1c2goZnVuY3Rpb24gJHYoTSxGKXt2YXIgTz1bXTtyZXR1cm4gTS5Qcm9wcyYmTy5wdXNoKGZ1bmN0aW9uIFltKE0sRil7dmFyIE89W107cmV0dXJuIGF0KGkzKS5tYXAoZnVuY3Rpb24oSil7'@;
put 'Zm9yKHZhciBpZT0wO2llPEpjLmxlbmd0aDsrK2llKWlmKEpjW2llXVsxXT09SilyZXR1cm4gSmNbaWVdO2ZvcihpZT0wO2llPF8wLmxlbmd0aDsrK2llKWlmKF8wW2llXVsxXT09SilyZXR1cm4gXzBbaWVdO3Rocm93IEp9KS5mb3JFYWNoKGZ1bmN0aW9uKEope2lmKG51bGwhPU1bSlsxXV0p'@;
put 'e3ZhciBpZT1GJiZGLlByb3BzJiZudWxsIT1GLlByb3BzW0pbMV1dP0YuUHJvcHNbSlsxXV06TVtKWzFdXTsiZGF0ZSI9PT1KWzJdJiYoaWU9bmV3IERhdGUoaWUpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIGllP2llPVN0cmluZyhpZSk6'@;
put 'ITA9PT1pZXx8ITE9PT1pZT9pZT1pZT8iMSI6IjAiOmllIGluc3RhbmNlb2YgRGF0ZSYmKGllPW5ldyBEYXRlKGllKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1wuXGQqWi8sIiIpKSxPLnB1c2gocm8oaTNbSlsxXV18fEpbMV0saWUpKX19KSxkcigiRG9jdW1lbnRQcm9wZXJ0aWVzIixPLmpv'@;
put 'aW4oIiIpLHt4bWxuczokYS5vfSl9KE0uUHJvcHMsRikpLE0uQ3VzdHByb3BzJiZPLnB1c2goZnVuY3Rpb24gczMoTSxGKXt2YXIgTz1bIldvcmtzaGVldHMiLCJTaGVldE5hbWVzIl0sSj0iQ3VzdG9tRG9jdW1lbnRQcm9wZXJ0aWVzIixpZT1bXTtyZXR1cm4gTSYmYXQoTSkuZm9yRWFjaChm'@;
put 'dW5jdGlvbihwZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKE0scGUpKXtmb3IodmFyIHllPTA7eWU8SmMubGVuZ3RoOysreWUpaWYocGU9PUpjW3llXVsxXSlyZXR1cm47Zm9yKHllPTA7eWU8XzAubGVuZ3RoOysreWUpaWYocGU9PV8wW3llXVsxXSlyZXR1cm47'@;
put 'Zm9yKHllPTA7eWU8Ty5sZW5ndGg7Kyt5ZSlpZihwZT09T1t5ZV0pcmV0dXJuO3ZhciB2ZT1NW3BlXSxNZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHZlPyhNZT0iZmxvYXQiLHZlPVN0cmluZyh2ZSkpOiEwPT09dmV8fCExPT09dmU/KE1lPSJib29sZWFuIix2ZT12ZT8iMSI6IjAiKTp2'@;
put 'ZT1TdHJpbmcodmUpLGllLnB1c2goZHIobm8ocGUpLHZlLHsiZHQ6ZHQiOk1lfSkpfX0pLEYmJmF0KEYpLmZvckVhY2goZnVuY3Rpb24ocGUpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGLHBlKSYmKCFNfHwhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0'@;
put 'eS5jYWxsKE0scGUpKSl7dmFyIHllPUZbcGVdLHZlPSJzdHJpbmciOyJudW1iZXIiPT10eXBlb2YgeWU/KHZlPSJmbG9hdCIseWU9U3RyaW5nKHllKSk6ITA9PT15ZXx8ITE9PT15ZT8odmU9ImJvb2xlYW4iLHllPXllPyIxIjoiMCIpOnllIGluc3RhbmNlb2YgRGF0ZT8odmU9ImRhdGVUaW1l'@;
put 'LnR6Iix5ZT15ZS50b0lTT1N0cmluZygpKTp5ZT1TdHJpbmcoeWUpLGllLnB1c2goZHIobm8ocGUpLHllLHsiZHQ6ZHQiOnZlfSkpfX0pLCI8IitKKycgeG1sbnM9IicrJGEubysnIj4nK2llLmpvaW4oIiIpKyI8LyIrSisiPiJ9KE0uUHJvcHMsTS5DdXN0cHJvcHMpKSxPLmpvaW4oIiIpfShN'@;
put 'LEYpKSxPLnB1c2goIiIpLE8ucHVzaCgiIiksTy5wdXNoKCIiKTtmb3IodmFyIEo9MDtKPE0uU2hlZXROYW1lcy5sZW5ndGg7KytKKU8ucHVzaChkcigiV29ya3NoZWV0IixTVyhKLEYsTSkseyJzczpOYW1lIjp5cihNLlNoZWV0TmFtZXNbSl0pfSkpO3JldHVybiBPWzJdPWZ1bmN0aW9uIGF4'@;
put 'KE0sRil7dmFyIEo9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwiPicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIg'@;
put 'c3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIsIjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gRi5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oaWUscGUpe3ZhciB5ZT1bXTtpZihpZS5hbGlnbm1lbnQpe3ZhciB2'@;
put 'ZT17fTtpZS5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJih2ZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIpLGllLmFsaWdubWVudC53cmFwVGV4dCYmKHZlWyJzczpXcmFwVGV4dCJdPSIxIiksaWUuYWxpZ25tZW50LnZlcnRpY2FsJiYodmVbInNzOlZlcnRpY2FsIl09TXQoaWUuYWxpZ25tZW50LnZl'@;
put 'cnRpY2FsKSksaWUuYWxpZ25tZW50Lmhvcml6b250YWwmJih2ZVsic3M6SG9yaXpvbnRhbCJdPU10KGllLmFsaWdubWVudC5ob3Jpem9udGFsKSksaWUuYWxpZ25tZW50LmluZGVudCYmKHZlWyJzczpJbmRlbnQiXT1pZS5hbGlnbm1lbnQuaW5kZW50KSxpZS5hbGlnbm1lbnQudGV4dFJvdGF0'@;
put 'aW9uJiYodmVbInNzOlJvdGF0ZSJdPWllLmFsaWdubWVudC50ZXh0Um90YXRpb24pLHllLnB1c2goZHIoIkFsaWdubWVudCIsbnVsbCx2ZSkpfWU6aWYobnVsbCE9aWUuZm9udElkKXt2YXIgTWU9Ri5Gb250c1tpZS5mb250SWRdO2lmKCFNZSlicmVhayBlO3ZhciBqZT17InNzOkZvbnROYW1l'@;
put 'IjoiQ2FsaWJyaSIsInNzOlNpemUiOiIxMiJ9LFllPSExO01lLmJvbGQmJihZZT0hMCxqZVsic3M6Qm9sZCJdPSIxIiksTWUuaXRhbGljJiYoWWU9ITAsamVbInNzOkl0YWxpYyJdPSIxIiksTWUuc3RyaWtlJiYoWWU9ITAsamVbInNzOlN0cmlrZVRocm91Z2giXT0iMSIpLG51bGwhPU1lLnVu'@;
put 'ZGVybGluZSYmKFllPSEwLGplWyJzczpVbmRlcmxpbmUiXT1ueFtNZS51bmRlcmxpbmVdfHwoTWUudW5kZXJsaW5lPyJTaW5nbGUiOiJOb25lIikpLG51bGwhPU1lLnN6JiYoWWU9ITAsamVbInNzOlNpemUiXT1NZS5zeiksbnVsbCE9TWUubmFtZSYmKFllPSEwLGplWyJzczpGb250TmFtZSJd'@;
put 'PU1lLm5hbWUpLE1lLmNvbG9yJiZudWxsIT1NZS5jb2xvci5yZ2ImJihZZT0hMCxqZVsic3M6Q29sb3IiXT0iIyIrKCJudW1iZXIiPT10eXBlb2YgTWUuY29sb3IucmdiPyIwMDAwMDAiK01lLmNvbG9yLnJnYi50b1N0cmluZygxNik6TWUuY29sb3IucmdiKS5zbGljZSgtNikpLFsic3ViIiwi'@;
put 'c3VwZXIiXS5pbmRleE9mKE1lLnZhbGlnbik+LTEmJihqZVsic3M6VmVydGljYWxBbGlnbiJdPU10KE1lLnZhbGlnbikrInNjcmlwdCIpLFllJiZ5ZS5wdXNoKGRyKCJGb250IixudWxsLGplKSl9ZTppZihpZS5maWxsSWQ+MCl7dmFyIHFlPUYuRmlsbHNbaWUuZmlsbElkXTtpZighcWV8fCFx'@;
put 'ZS5mZ0NvbG9yfHxudWxsPT1xZS5mZ0NvbG9yLnJnYilicmVhayBlO3llLnB1c2goZHIoIkludGVyaW9yIixudWxsLHsic3M6UGF0dGVybiI6d19bcWUucGF0dGVyblR5cGVdfHwiU29saWQiLCJzczpDb2xvciI6IiMiKygibnVtYmVyIj09dHlwZW9mIHFlLmZnQ29sb3IucmdiPyIwMCIrcWUu'@;
put 'ZmdDb2xvci5yZ2IudG9TdHJpbmcoMTYpOnFlLmZnQ29sb3IucmdiKS5zbGljZSgtNil9KSl9eWUucHVzaChkcigiTnVtYmVyRm9ybWF0IixudWxsLHsic3M6Rm9ybWF0Ijp5cihDLl90YWJsZVtpZS5udW1GbXRJZF0pfSkpO3ZhciBpdD17InNzOklEIjoicyIrKDIxK3BlKX07aWUuc3R5bGUm'@;
put 'JihpdFsic3M6TmFtZSJdPWllLnN0eWxlKSxKLnB1c2goZHIoIlN0eWxlIix5ZS5qb2luKCIiKSxpdCkpfSksZHIoIlN0eWxlcyIsSi5qb2luKCIiKSl9KDAsRiksT1szXT1mdW5jdGlvbiBseChNKXtpZighKChNfHx7fSkuV29ya2Jvb2t8fHt9KS5OYW1lcylyZXR1cm4iIjtmb3IodmFyIEY9'@;
put 'TS5Xb3JrYm9vay5OYW1lcyxPPVtdLEo9MDtKPEYubGVuZ3RoOysrSil7dmFyIGllPUZbSl07bnVsbD09aWUuU2hlZXQmJihpZS5OYW1lLm1hdGNoKC9eX3hsZm5cLi8pfHxPLnB1c2gocXYoaWUpKSl9cmV0dXJuIGRyKCJOYW1lcyIsTy5qb2luKCIiKSl9KE0pLFBuK2RyKCJXb3JrYm9vayIs'@;
put 'Ty5qb2luKCIiKSx7eG1sbnM6JGEuc3MsInhtbG5zOm8iOiRhLm8sInhtbG5zOngiOiRhLngsInhtbG5zOnNzIjokYS5zcywieG1sbnM6ZHQiOiRhLmR0LCJ4bWxuczpodG1sIjokYS5odG1sfSl9ZnVuY3Rpb24gdXgoTSxGLE8sSil7dmFyIGllPU8scGU9W10seWU9Ri5zbGljZShGLmwsRi5s'@;
put 'K2llKTtpZihKJiZKLmVuYyYmSi5lbmMuaW5zaXR1JiZ5ZS5sZW5ndGg+MClzd2l0Y2goTS5uKXtjYXNlIkJPRiI6Y2FzZSJGaWxlUGFzcyI6Y2FzZSJGaWxlTG9jayI6Y2FzZSJJbnRlcmZhY2VIZHIiOmNhc2UiUlJESW5mbyI6Y2FzZSJSUkRIZWFkIjpjYXNlIlVzckV4Y2wiOmNhc2UiRU9G'@;
put 'IjpKLmVuYy5pbnNpdHUobGUoe2xlbmd0aDp5ZS5sZW5ndGh9KSwic2tpcCIpO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOkouZW5jLmluc2l0dShsZSh7bGVuZ3RoOjR9KSwic2tpcCIpLHllPUJ1ZmZlci5jb25jYXQoW0J1ZmZlci5mcm9tKHllLnNsaWNlKDAsNCkpLEJ1ZmZlci5mcm9tKEou'@;
put 'ZW5jLmluc2l0dSh5ZS5zbGljZSg0KSkpXSk7YnJlYWs7ZGVmYXVsdDp5ZT1KLmVuYy5pbnNpdHUoeWUpfUFycmF5LmlzQXJyYXkoRikmJiFBcnJheS5pc0FycmF5KHllKSYmKHllPUFycmF5LmZyb20oeWUpKSxwZS5wdXNoKHllKSxGLmwrPWllO2Zvcih2YXIgdmU9SjJbUmMoRixGLmwpXSxN'@;
put 'ZT0wO251bGwhPXZlJiYiQ29udGludWUiPT09dmUubi5zbGljZSgwLDgpOylpZT1SYyhGLEYubCsyKSxNZT1GLmwrNCxKJiZKLmVuYyYmSi5lbmMuaW5zaXR1JiZKLmVuYy5pbnNpdHUobGUoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT12ZS5uP01lKz00OiJDb250aW51ZUZy'@;
put 'dCI9PXZlLm4uc2xpY2UoMCwxMSkmJihNZSs9MTIsSiYmSi5lbmMmJkouZW5jLmluc2l0dSYmSi5lbmMuaW5zaXR1KGxlKHtsZW5ndGg6OH0pLCJza2lwIikpLHllPUYuc2xpY2UoTWUsRi5sKzQraWUpLEomJkouZW5jJiZKLmVuYy5pbnNpdHUmJnllLmxlbmd0aD4wJiYoeWU9Si5lbmMuaW5z'@;
put 'aXR1KHllKSkscGUucHVzaCh5ZSksRi5sKz00K2llLHZlPUoyW1JjKEYsRi5sKV07dmFyIGplPXgocGUpO1pzKGplLDApO3ZhciBZZT0wO2plLmxlbnM9W107Zm9yKHZhciBxZT0wO3FlPHBlLmxlbmd0aDsrK3FlKWplLmxlbnMucHVzaChZZSksWWUrPXBlW3FlXS5sZW5ndGg7aWYoamUubGVu'@;
put 'Z3RoPE8pdGhyb3ciWExTIFJlY29yZCAiKyhNJiZNLm58fCI/PyIpKyIgVHJ1bmNhdGVkOiAiK2plLmxlbmd0aCsiIDwgIitPO3JldHVybiBNLmYoamUsamUubGVuZ3RoLEopfWZ1bmN0aW9uIEJoKE0sRixPKXtpZigieiIhPT1NLnQmJk0uWEYpe3ZhciBKPTA7dHJ5e0o9TS56fHxNLlhGLm51'@;
put 'bUZtdElkfHwwLEYuY2VsbE5GJiYoTS56PUMuX3RhYmxlW0pdKX1jYXRjaChwZSl7aWYoRi5XVEYpdGhyb3cgcGV9aWYoIUZ8fCExIT09Ri5jZWxsVGV4dCl0cnl7TS53PSJlIj09PU0udD9NLnd8fHVsW00udl06MD09PUp8fCJHZW5lcmFsIj09Sj8ibiI9PT1NLnQ/KDB8TS52KT09PU0udj9D'@;
put 'Ll9nZW5lcmFsX2ludChNLnYpOkMuX2dlbmVyYWxfbnVtKE0udik6Qy5fZ2VuZXJhbChNLnYpOkMuZm9ybWF0KEosTS52LHtkYXRlMTkwNDohIU8sZGF0ZU5GOkYmJkYuZGF0ZU5GfSl9Y2F0Y2gocGUpe2lmKEYuV1RGKXRocm93IHBlfWlmKEYuY2VsbERhdGVzJiZKJiYibiI9PU0udCYmQy5p'@;
put 'c19kYXRlKEMuX3RhYmxlW0pdfHxTdHJpbmcoSikpKXt2YXIgaWU9Qy5wYXJzZV9kYXRlX2NvZGUoTS52KTtpZSYmKE0udD0iZCIsTS52PW5ldyBEYXRlKGllLnksaWUubS0xLGllLmQsaWUuSCxpZS5NLGllLlMsaWUudSkpfX19ZnVuY3Rpb24gS3YoTSxGLE8pe3JldHVybnt2Ok0saXhmZTpG'@;
put 'LHQ6T319dmFyIGtXPWZ1bmN0aW9uKE0sRixPKXtGWyIhb2JqZWN0cyJdPU19LEM4PXtTSToiZTA4NTlmZjJmOTRmNjgxMGFiOTEwODAwMmIyN2IzZDkiLERTSToiMDJkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUiLFVESToiMDVkNWNkZDU5YzJlMWIxMDkzOTcwODAwMmIyY2Y5YWUi'@;
put 'fTtmdW5jdGlvbiBYdihNLEYpe3ZhciBPLEosaWUscGU7aWYoRnx8KEY9e30pLE4zKEYpLE4oKSxGLmNvZGVwYWdlJiZFKEYuY29kZXBhZ2UpLE0uRnVsbFBhdGhzKXtpZihMZS5maW5kKE0sIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3Rl'@;
put 'ZCIpO089TGUuZmluZChNLCIhQ29tcE9iaiIpLEo9TGUuZmluZChNLCIvV29ya2Jvb2siKXx8TGUuZmluZChNLCIvQm9vayIpfWVsc2V7c3dpdGNoKEYudHlwZSl7Y2FzZSJiYXNlNjQiOk09TChzZS5kZWNvZGUoTSkpO2JyZWFrO2Nhc2UiYmluYXJ5IjpNPUwoTSk7YnJlYWs7Y2FzZSJidWZm'@;
put 'ZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoTSl8fChNPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKE0pKX1acyhNLDApLEo9e2NvbnRlbnQ6TX19aWYoTyYmZnVuY3Rpb24gY3goTSl7dmFyIEY9e30sTz1NLmNvbnRlbnQ7aWYoTy5sPTI4LEYuQW5zaVVzZXJUeXBlPU8u'@;
put 'cmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksRi5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIHBjKE0pe3JldHVybiBSbShNLDEpfShPKSxPLmxlbmd0aC1PLmw8PTQpcmV0dXJuIEY7dmFyIEo9Ty5yZWFkX3NoaWZ0KDQpO2lmKDA9PUp8fEo+NDB8fChPLmwtPTQsRi5SZXNlcnZlZDE9'@;
put 'Ty5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxPLmxlbmd0aC1PLmw8PTQpfHwxOTA3NTA1NjUyIT09KEo9Ty5yZWFkX3NoaWZ0KDQpKXx8KEYuVW5pY29kZUNsaXBib2FyZEZvcm1hdD1mdW5jdGlvbiBYZihNKXtyZXR1cm4gUm0oTSwyKX0oTyksMD09KEo9Ty5yZWFkX3NoaWZ0KDQpKXx8'@;
put 'Sj40MCkpcmV0dXJuIEY7Ty5sLT00LEYuUmVzZXJ2ZWQyPU8ucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oTyksRi5ib29rUHJvcHMmJiFGLmJvb2tTaGVldHMpaWU9e307ZWxzZXt2YXIgeWU9ZGU/ImJ1ZmZlciI6ImFycmF5IjtpZihKJiZKLmNvbnRlbnQpaWU9ZnVuY3Rpb24gRVcoTSxGKXt2'@;
put 'YXIgTz17b3B0czp7fX0sSj17fTtudWxsIT10ZSYmbnVsbD09Ri5kZW5zZSYmKEYuZGVuc2U9dGUpO3ZhciBxZSxodCx1dCx2dCxBdCxadCxpZT1GLmRlbnNlP1tdOnt9LHBlPXt9LHllPXt9LHZlPW51bGwsTWU9W10samU9IiIsWWU9e30saXQ9IiIsUHQ9e30sRHQ9W10sZ249W10scW49W10s'@;
put 'dW49e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sSm49e30sWW49e0ZvbnRzOltdfSxMbj1mdW5jdGlvbihsaSl7cmV0dXJuIGxpPDg/bWNbbGldOmxpPDY0JiZxbltsaS04XXx8bWNbbGldfSx0cj1mdW5jdGlvbihsaSxFcyl7dmFyIEVhLGdzPWxpLlhGLmRh'@;
put 'dGE7Z3MmJihncy5wYXR0ZXJuVHlwZXx8bnVsbCE9Z3MuaWN2Rm9yZSkmJkVzJiZFcy5jZWxsU3R5bGVzJiYobGkucz17fSxsaS5zLnBhdHRlcm5UeXBlPWdzLnBhdHRlcm5UeXBlLGxpLlhGLmZvbnQmJnp0KGxpLnMsbGkuWEYuZm9udCksZ3MuZldyYXAmJigobGkucy5hbGlnbm1lbnR8fChs'@;
put 'aS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxncy5mU2hyaW5rVG9GaXQmJigobGkucy5hbGlnbm1lbnR8fChsaS5zLmFsaWdubWVudD17fSkpLnNocmlua1RvRml0PSEwKSxncy5oYWxpZ24mJigobGkucy5hbGlnbm1lbnR8fChsaS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9'@;
put 'Z3MuaGFsaWduKSxncy52YWxpZ24mJigobGkucy5hbGlnbm1lbnR8fChsaS5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPWdzLnZhbGlnbiksZ3MuY0luZGVudCYmKChsaS5zLmFsaWdubWVudHx8KGxpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PWdzLmNJbmRlbnQpLDY0IT1ncy5pY3ZGb3Jl'@;
put 'JiY2NSE9Z3MuaWN2QmFjayYmKChFYT10MShMbihncy5pY3ZGb3JlKSkpJiYobGkucy5mZ0NvbG9yPXtyZ2I6RWF9KSwoRWE9dDEoTG4oZ3MuaWN2QmFjaykpKSYmKGxpLnMuYmdDb2xvcj17cmdiOkVhfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlv'@;
put 'bihiYyl7Z3NbImRnIitiY10mJihsaS5zW2JjLnRvTG93ZXJDYXNlKCldPXtzdHlsZTpyMVtnc1siZGciK2JjXV0sY29sb3I6e3JnYjp0MShMbihnc1siaWN2IitiY10pKX19KX0pKX0scnI9ZnVuY3Rpb24obGksRXMsZ3Mpe2lmKCEoU2k+MXx8Z3Muc2hlZXRSb3dzJiZsaS5yPj1ncy5zaGVl'@;
put 'dFJvd3MpKXtpZihncy5jZWxsU3R5bGVzJiZFcy5YRiYmRXMuWEYuZGF0YSYmdHIoRXMsZ3MpLGRlbGV0ZSBFcy5peGZlLGRlbGV0ZSBFcy5YRixxZT1saSxpdD1EaShsaSksKCF5ZXx8IXllLnN8fCF5ZS5lKSYmKHllPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLGxpLnI8eWUucy5yJiYo'@;
put 'eWUucy5yPWxpLnIpLGxpLmM8eWUucy5jJiYoeWUucy5jPWxpLmMpLGxpLnIrMT55ZS5lLnImJih5ZS5lLnI9bGkucisxKSxsaS5jKzE+eWUuZS5jJiYoeWUuZS5jPWxpLmMrMSksZ3MuY2VsbEZvcm11bGEmJkVzLmYpZm9yKHZhciBFYT0wO0VhPER0Lmxlbmd0aDsrK0VhKWlmKCEoRHRbRWFd'@;
put 'WzBdLnMuYz5saS5jfHxEdFtFYV1bMF0ucy5yPmxpLnJ8fER0W0VhXVswXS5lLmM8bGkuY3x8RHRbRWFdWzBdLmUucjxsaS5yKSl7RXMuRj1BaShEdFtFYV1bMF0pLChEdFtFYV1bMF0ucy5jIT1saS5jfHxEdFtFYV1bMF0ucy5yIT1saS5yKSYmZGVsZXRlIEVzLmYsRXMuZiYmKEVzLmY9IiIr'@;
put 'bnUoRHRbRWFdWzFdLHllLGxpLFRuLFVuKSk7YnJlYWt9Z3MuZGVuc2U/KGllW2xpLnJdfHwoaWVbbGkucl09W10pLGllW2xpLnJdW2xpLmNdPUVzKTppZVtpdF09RXN9fSxVbj17ZW5jOiExLHNiY2NoOjAsc25hbWVzOltdLHNoYXJlZGY6UHQsYXJyYXlmOkR0LHJydGFiaWQ6W10sbGFzdHVz'@;
put 'ZXI6IiIsYmlmZjo4LGNvZGVwYWdlOjAsd2lubG9ja2VkOjAsY2VsbFN0eWxlczohIUYmJiEhRi5jZWxsU3R5bGVzLFdURjohIUYmJiEhRi53dGZ9O1VuLnBhc3N3b3JkPUYucGFzc3dvcmQ/Ri5wYXNzd29yZDoiVmVsdmV0U3dlYXRzaG9wIjt2YXIgcGksWHI9bnVsbCxPaT1bXSxOaT1bXSxk'@;
put 'aT1bXSxfcj1bXSxvcj0hMSxUbj1bXTtUbi5TaGVldE5hbWVzPVVuLnNuYW1lcyxUbi5zaGFyZWRmPVVuLnNoYXJlZGYsVG4uYXJyYXlmPVVuLmFycmF5ZixUbi5uYW1lcz1bXSxUbi5YVEk9W107dmFyIEZpLENyPSIiLFNpPTAsWnI9MCxVaT1bXSxSbz1bXTtVbi5jb2RlcGFnZT0xMjAwLEIo'@;
put 'MTIwMCk7Zm9yKHZhciBvcz0hMTtNLmw8TS5sZW5ndGgtMTspe3ZhciBsbz1NLmwsRm89TS5yZWFkX3NoaWZ0KDIpO2lmKFVuJiZVbi5lbmMmJlVuLmVuYy5pbnNpdHUmJlVuLmVuYy5pbnNpdHUobGUoWzAsMF0pLCJoZWFkZXItMCIpLDA9PT1GbyYmIkVPRiI9PT1DcilicmVhazt2YXIgeG89'@;
put 'TS5sPT09TS5sZW5ndGg/MDpNLnJlYWRfc2hpZnQoMik7VW4mJlVuLmVuYyYmVW4uZW5jLmluc2l0dSYmVW4uZW5jLmluc2l0dShsZShbMCwwXSksImxlbmd0aC0wIik7dmFyIHZpPUoyW0ZvXTtpZih2aSYmdmkuZil7aWYoRi5ib29rU2hlZXRzJiYiQm91bmRTaGVldDgiPT09Q3ImJiJCb3Vu'@;
put 'ZFNoZWV0OCIhPT12aS5uKWJyZWFrO2lmKENyPXZpLm4sMj09PXZpLnJ8fDEyPT12aS5yKXt2YXIgQnM9TS5yZWFkX3NoaWZ0KDIpO2lmKHhvLT0yLFVuJiZVbi5lbmMmJlVuLmVuYy5pbnNpdHUmJlVuLmVuYy5pbnNpdHUobGUoWzAsMF0pKSwhVW4uZW5jJiZCcyE9PUZvJiYoKDI1NSZCcyk8'@;
put 'PDh8QnM+PjgpIT09Rm8pdGhyb3cgbmV3IEVycm9yKCJydCBtaXNtYXRjaDogIitCcysiIT0iK0ZvKTsxMj09dmkuciYmKE0ubCs9MTAseG8tPTEwLFVuJiZVbi5lbmMmJlVuLmVuYy5pbnNpdHUmJlVuLmVuYy5pbnNpdHUobGUoWzAsMCwwLDAsMCwwLDAsMCwwLDBdKSkpfXZhciBFbj11eCh2'@;
put 'aSxNLHhvLFVuKSxtcz12aS5uO2lmKDA9PVNpJiYiQk9GIiE9bXMpY29udGludWU7c3dpdGNoKG1zKXtjYXNlIkRhdGUxOTA0IjpPLm9wdHMuRGF0ZTE5MDQ9dW4uV0JQcm9wcy5kYXRlMTkwND1FbjticmVhaztjYXNlIldyaXRlUHJvdGVjdCI6Ty5vcHRzLldyaXRlUHJvdGVjdD0hMDticmVh'@;
put 'aztjYXNlIkZpbGVQYXNzIjppZihVbi5lbmN8fChNLmw9MCxTaT0wKSxVbi5lbmM9RW4sIUYucGFzc3dvcmQmJm51bGw9PUVuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRmlsZSBpcyBwYXNzd29yZC1wcm90ZWN0ZWQiKTtpZihudWxsPT1Fbi52YWxpZCl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5'@;
put 'cHRpb24gc2NoZW1lIHVuc3VwcG9ydGVkIik7aWYoIUVuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiUGFzc3dvcmQgaXMgaW5jb3JyZWN0Iik7YnJlYWs7Y2FzZSJXcml0ZUFjY2VzcyI6VW4ubGFzdHVzZXI9RW47YnJlYWs7Y2FzZSJGaWxlU2hhcmluZyI6Y2FzZSJUZW1wbGF0ZSI6Y2FzZSJC'@;
put 'b29rQm9vbCI6Y2FzZSJVc2VzRUxGcyI6Y2FzZSJNVFJTZXR0aW5ncyI6Y2FzZSJVbmNhbGNlZCI6Y2FzZSJFeHRTU1QiOmNhc2UiQm9va0V4dCI6Y2FzZSJSaWNoVGV4dFN0cmVhbSI6Y2FzZSJCa0hpbSI6Y2FzZSJJbmRleCI6Y2FzZSJQcm90NFJldiI6Y2FzZSJQcm90NFJldlBhc3MiOmJy'@;
put 'ZWFrO2Nhc2UiQ29kZVBhZ2UiOnZhciBocj1OdW1iZXIoRW4pO3N3aXRjaChocil7Y2FzZSAyMTAxMDpocj0xMjAwO2JyZWFrO2Nhc2UgMzI3Njg6aHI9MWU0O2JyZWFrO2Nhc2UgMzI3Njk6aHI9MTI1Mn1CKFVuLmNvZGVwYWdlPWhyKSxvcz0hMDticmVhaztjYXNlIlJSVGFiSWQiOlVuLnJy'@;
put 'dGFiaWQ9RW47YnJlYWs7Y2FzZSJXaW5Qcm90ZWN0IjpVbi53aW5sb2NrZWQ9RW47YnJlYWs7Y2FzZSJSZWZyZXNoQWxsIjpjYXNlIkNhbGNDb3VudCI6Y2FzZSJDYWxjRGVsdGEiOmNhc2UiQ2FsY0l0ZXIiOmNhc2UiQ2FsY01vZGUiOmNhc2UiQ2FsY1ByZWNpc2lvbiI6Y2FzZSJDYWxjU2F2'@;
put 'ZVJlY2FsYyI6Ty5vcHRzW21zXT1FbjticmVhaztjYXNlIkNhbGNSZWZNb2RlIjpVbi5DYWxjUmVmTW9kZT1FbjticmVhaztjYXNlIkZvcmNlRnVsbENhbGN1bGF0aW9uIjpPLm9wdHMuRnVsbENhbGM9RW47YnJlYWs7Y2FzZSJXc0Jvb2wiOkVuLmZEaWFsb2cmJihpZVsiIXR5cGUiXT0iZGlh'@;
put 'bG9nIiksRW4uZkJlbG93fHwoKGllWyIhb3V0bGluZSJdfHwoaWVbIiFvdXRsaW5lIl09e30pKS5hYm92ZT0hMCksRW4uZlJpZ2h0fHwoKGllWyIhb3V0bGluZSJdfHwoaWVbIiFvdXRsaW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpFbi5mb250PVluLkZvbnRzW0VuLmlmbnQ8'@;
put 'ND9Fbi5pZm50OkVuLmlmbnQtMV0sZ24ucHVzaChFbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpUbi5wdXNoKFtFbl0pLFRuW1RuLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRlcm5OYW1lIjpUbltUbi5sZW5ndGgtMV0ucHVzaChFbik7YnJlYWs7Y2FzZSJMYmwiOkZpPXtOYW1lOkVu'@;
put 'Lk5hbWUsUmVmOm51KEVuLnJnY2UseWUsbnVsbCxUbixVbil9LEVuLml0YWI+MCYmKEZpLlNoZWV0PUVuLml0YWItMSksVG4ubmFtZXMucHVzaChGaSksVG5bMF18fChUblswXT1bXSxUblswXS5YVEk9W10pLFRuW1RuLmxlbmd0aC0xXS5wdXNoKEVuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNl'@;
put 'Ij09RW4uTmFtZSYmRW4uaXRhYj4wJiZFbi5yZ2NlJiZFbi5yZ2NlWzBdJiZFbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09RW4ucmdjZVswXVswXVswXSYmKFJvW0VuLml0YWItMV09e3JlZjpBaShFbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOlVuLkV4'@;
put 'dGVybkNvdW50PUVuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PVRuLmxlbmd0aCYmKFRuWzBdPVtdLFRuWzBdLlhUST1bXSksVG5bVG4ubGVuZ3RoLTFdLlhUST1UbltUbi5sZW5ndGgtMV0uWFRJLmNvbmNhdChFbiksVG4uWFRJPVRuLlhUSS5jb25jYXQoRW4pO2JyZWFrO2Nhc2UiTmFt'@;
put 'ZUNtdCI6aWYoVW4uYmlmZjw4KWJyZWFrO251bGwhPUZpJiYoRmkuQ29tbWVudD1FblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjppZVsiIXByb3RlY3QiXT1FbjticmVhaztjYXNlIlBhc3N3b3JkIjowIT09RW4mJlVuLldURiYmY29uc29sZS5lcnJvcigiUGFzc3dvcmQgdmVyaWZpZXI6ICIr'@;
put 'RW4pO2JyZWFrO2Nhc2UiQm91bmRTaGVldDgiOnBlW0VuLnBvc109RW4sVW4uc25hbWVzLnB1c2goRW4ubmFtZSk7YnJlYWs7Y2FzZSJFT0YiOmlmKGllWyIhZ3JpZGxpbmVzIl09IVhyfHxYci5ncmlkLFhyPW51bGwsLS1TaSlicmVhaztpZih5ZS5lKXtpZih5ZS5lLnI+MCYmeWUuZS5jPjAp'@;
put 'e2lmKHllLmUuci0tLHllLmUuYy0tLGllWyIhcmVmIl09QWkoeWUpLEYuc2hlZXRSb3dzJiZGLnNoZWV0Um93czw9eWUuZS5yKXt2YXIgbmw9eWUuZS5yO3llLmUucj1GLnNoZWV0Um93cy0xLGllWyIhZnVsbHJlZiJdPWllWyIhcmVmIl0saWVbIiFyZWYiXT1BaSh5ZSkseWUuZS5yPW5sfXll'@;
put 'LmUucisrLHllLmUuYysrfU9pLmxlbmd0aD4wJiYoaWVbIiFtZXJnZXMiXT1PaSksTmkubGVuZ3RoPjAmJmtXKE5pLGllLFluKSxkaS5sZW5ndGg+MCYmKGllWyIhY29scyJdPWRpKSxfci5sZW5ndGg+MCYmKGllWyIhcm93cyJdPV9yKSx1bi5TaGVldHMucHVzaChKbil9IiI9PT1qZT9ZZT1p'@;
put 'ZTpKW2plXT1pZSxpZT1GLmRlbnNlP1tdOnt9O2JyZWFrO2Nhc2UiQk9GIjppZig4PT09VW4uYmlmZiYmKFVuLmJpZmY9ezk6Miw1MjE6MywxMDMzOjR9W0ZvXXx8ezUxMjoyLDc2ODozLDEwMjQ6NCwxMjgwOjUsMTUzNjo4LDI6Miw3OjJ9W0VuLkJJRkZWZXJdfHw4KSxVbi5iaWZmZ3Vlc3M9'@;
put 'MD09RW4uQklGRlZlciwwPT1Fbi5CSUZGVmVyJiY0MDk2PT1Fbi5kdCYmKFVuLmJpZmY9NSxvcz0hMCxCKFVuLmNvZGVwYWdlPTI4NTkxKSksOD09VW4uYmlmZiYmMD09RW4uQklGRlZlciYmMTY9PUVuLmR0JiYoVW4uYmlmZj0yKSxTaSsrKWJyZWFrO2lmKGllPUYuZGVuc2U/W106e30sVW4u'@;
put 'YmlmZjw4JiYhb3MmJihvcz0hMCxCKFVuLmNvZGVwYWdlPUYuY29kZXBhZ2V8fDEyNTIpKSxVbi5iaWZmPDV8fDA9PUVuLkJJRkZWZXImJjQwOTY9PUVuLmR0KXsiIj09PWplJiYoamU9IlNoZWV0MSIpLHllPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX07dmFyIFlhPXtwb3M6TS5sLXhvLG5h'@;
put 'bWU6amV9O3BlW1lhLnBvc109WWEsVW4uc25hbWVzLnB1c2goamUpfWVsc2UgamU9KHBlW2xvXXx8e25hbWU6IiJ9KS5uYW1lOzMyPT1Fbi5kdCYmKGllWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Fbi5kdCYmKGllWyIhdHlwZSJdPSJtYWNybyIpLE9pPVtdLE5pPVtdLFVuLmFycmF5Zj1EdD1b'@;
put 'XSxkaT1bXSxfcj1bXSxvcj0hMSxKbj17SGlkZGVuOihwZVtsb118fHtoczowfSkuaHMsbmFtZTpqZX07YnJlYWs7Y2FzZSJOdW1iZXIiOmNhc2UiQklGRjJOVU0iOmNhc2UiQklGRjJJTlQiOiJjaGFydCI9PWllWyIhdHlwZSJdJiYoRi5kZW5zZT8oaWVbRW4ucl18fFtdKVtFbi5jXTppZVtE'@;
put 'aSh7YzpFbi5jLHI6RW4ucn0pXSkmJisrRW4uYyxBdD17aXhmZTpFbi5peGZlLFhGOmduW0VuLml4ZmVdfHx7fSx2OkVuLnZhbCx0OiJuIn0sWnI+MCYmKEF0Lno9VWlbQXQuaXhmZT4+OCY2M10pLEJoKEF0LEYsTy5vcHRzLkRhdGUxOTA0KSxycih7YzpFbi5jLHI6RW4ucn0sQXQsRik7YnJl'@;
put 'YWs7Y2FzZSJCb29sRXJyIjpBdD17aXhmZTpFbi5peGZlLFhGOmduW0VuLml4ZmVdLHY6RW4udmFsLHQ6RW4udH0sWnI+MCYmKEF0Lno9VWlbQXQuaXhmZT4+OCY2M10pLEJoKEF0LEYsTy5vcHRzLkRhdGUxOTA0KSxycih7YzpFbi5jLHI6RW4ucn0sQXQsRik7YnJlYWs7Y2FzZSJSSyI6QXQ9'@;
put 'e2l4ZmU6RW4uaXhmZSxYRjpnbltFbi5peGZlXSx2OkVuLnJrbnVtLHQ6Im4ifSxacj4wJiYoQXQuej1VaVtBdC5peGZlPj44JjYzXSksQmgoQXQsRixPLm9wdHMuRGF0ZTE5MDQpLHJyKHtjOkVuLmMscjpFbi5yfSxBdCxGKTticmVhaztjYXNlIk11bFJrIjpmb3IodmFyIHphPUVuLmM7emE8'@;
put 'PUVuLkM7Kyt6YSl7dmFyIHljPUVuLnJrcmVjW3phLUVuLmNdWzBdO0F0PXtpeGZlOnljLFhGOmduW3ljXSx2OkVuLnJrcmVjW3phLUVuLmNdWzFdLHQ6Im4ifSxacj4wJiYoQXQuej1VaVtBdC5peGZlPj44JjYzXSksQmgoQXQsRixPLm9wdHMuRGF0ZTE5MDQpLHJyKHtjOnphLHI6RW4ucn0s'@;
put 'QXQsRil9YnJlYWs7Y2FzZSJGb3JtdWxhIjppZigiU3RyaW5nIj09RW4udmFsKXt2ZT1FbjticmVha31pZigoQXQ9S3YoRW4udmFsLEVuLmNlbGwuaXhmZSxFbi50dCkpLlhGPWduW0F0Lml4ZmVdLEYuY2VsbEZvcm11bGEpe3ZhciBrYT1Fbi5mb3JtdWxhO2lmKGthJiZrYVswXSYma2FbMF1b'@;
put 'MF0mJiJQdGdFeHAiPT1rYVswXVswXVswXSl7dmFyIEt0PWthWzBdWzBdWzFdWzBdLG1uPWthWzBdWzBdWzFdWzFdLEZuPURpKHtyOkt0LGM6bW59KTtQdFtGbl0/QXQuZj0iIitudShFbi5mb3JtdWxhLHllLEVuLmNlbGwsVG4sVW4pOkF0LkY9KChGLmRlbnNlPyhpZVtLdF18fFtdKVttbl06'@;
put 'aWVbRm5dKXx8e30pLkZ9ZWxzZSBBdC5mPSIiK251KEVuLmZvcm11bGEseWUsRW4uY2VsbCxUbixVbil9WnI+MCYmKEF0Lno9VWlbQXQuaXhmZT4+OCY2M10pLEJoKEF0LEYsTy5vcHRzLkRhdGUxOTA0KSxycihFbi5jZWxsLEF0LEYpLHZlPUVuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighdmUp'@;
put 'dGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3ZlLnZhbD1FbiwoQXQ9S3YoRW4sdmUuY2VsbC5peGZlLCJzIikpLlhGPWduW0F0Lml4ZmVdLEYuY2VsbEZvcm11bGEmJihBdC5mPSIiK251KHZlLmZvcm11bGEseWUsdmUuY2VsbCxUbixVbikpLFpyPjAm'@;
put 'JihBdC56PVVpW0F0Lml4ZmU+PjgmNjNdKSxCaChBdCxGLE8ub3B0cy5EYXRlMTkwNCkscnIodmUuY2VsbCxBdCxGKSx2ZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOkR0LnB1c2goRW4pO3ZhciBKcj1EaShFblswXS5zKTtpZihodD1GLmRlbnNlPyhpZVtFblswXS5zLnJdfHxbXSlbRW5bMF0u'@;
put 'cy5jXTppZVtKcl0sRi5jZWxsRm9ybXVsYSYmaHQpe2lmKCF2ZXx8IUpyfHwhaHQpYnJlYWs7aHQuZj0iIitudShFblsxXSx5ZSxFblswXSxUbixVbiksaHQuRj1BaShFblswXSl9YnJlYWs7Y2FzZSJTaHJGbWxhIjppZighRi5jZWxsRm9ybXVsYSlicmVhaztpZihpdCl7aWYoIXZlKWJyZWFr'@;
put 'O1B0W0RpKHZlLmNlbGwpXT1FblswXSwoKGh0PUYuZGVuc2U/KGllW3ZlLmNlbGwucl18fFtdKVt2ZS5jZWxsLmNdOmllW0RpKHZlLmNlbGwpXSl8fHt9KS5mPSIiK251KEVuWzBdLHllLHFlLFRuLFVuKX1icmVhaztjYXNlIkxhYmVsU3N0IjpBdD1LdihNZVtFbi5pc3N0XS50LEVuLml4ZmUs'@;
put 'InMiKSxNZVtFbi5pc3N0XS5oJiYoQXQuaD1NZVtFbi5pc3N0XS5oKSxBdC5YRj1nbltBdC5peGZlXSxacj4wJiYoQXQuej1VaVtBdC5peGZlPj44JjYzXSksQmgoQXQsRixPLm9wdHMuRGF0ZTE5MDQpLHJyKHtjOkVuLmMscjpFbi5yfSxBdCxGKSxNZVtFbi5pc3N0XS5SJiYoQXQuUj1NZVtF'@;
put 'bi5pc3N0XS5SLm1hcChmdW5jdGlvbihZaSl7dmFyIGxpPVh0KFlpKTtyZXR1cm4gWWkucz09WW4uRm9udHNbMF0mJihsaS5zPUF0LnMpLGxpfSkpO2JyZWFrO2Nhc2UiQmxhbmsiOkYuc2hlZXRTdHVicyYmKEF0PXtpeGZlOkVuLml4ZmUsWEY6Z25bRW4uaXhmZV0sdDoieiJ9LFpyPjAmJihB'@;
put 'dC56PVVpW0F0Lml4ZmU+PjgmNjNdKSxCaChBdCxGLE8ub3B0cy5EYXRlMTkwNCkscnIoe2M6RW4uYyxyOkVuLnJ9LEF0LEYpKTticmVhaztjYXNlIk11bEJsYW5rIjppZihGLnNoZWV0U3R1YnMpZm9yKHZhciBYbj1Fbi5jO1huPD1Fbi5DOysrWG4pe3ZhciBoaT1Fbi5peGZlW1huLUVuLmNd'@;
put 'O0F0PXtpeGZlOmhpLFhGOmduW2hpXSx0OiJ6In0sWnI+MCYmKEF0Lno9VWlbQXQuaXhmZT4+OCY2M10pLEJoKEF0LEYsTy5vcHRzLkRhdGUxOTA0KSxycih7YzpYbixyOkVuLnJ9LEF0LEYpfWJyZWFrO2Nhc2UiUlN0cmluZyI6Y2FzZSJMYWJlbCI6Y2FzZSJCSUZGMlNUUiI6KEF0PUt2KEVu'@;
put 'LnZhbCxFbi5peGZlLCJzIikpLlhGPWduW0F0Lml4ZmVdLFpyPjAmJihBdC56PVVpW0F0Lml4ZmU+PjgmNjNdKSxCaChBdCxGLE8ub3B0cy5EYXRlMTkwNCkscnIoe2M6RW4uYyxyOkVuLnJ9LEF0LEYpO2JyZWFrO2Nhc2UiRGltZW5zaW9ucyI6MT09PVNpJiYoeWU9RW4pO2JyZWFrO2Nhc2Ui'@;
put 'U1NUIjooTWU9RW4pLmZvckVhY2goZnVuY3Rpb24oWWkpe1lpLl9SPyhZaS5fUlswXSYmWWkuX1JbMF0uaWR4PjAmJllpLl9SLnVuc2hpZnQoe2lkeDowLGlmbnQ6MH0pLFlpLlI9WWkuX1IubWFwKGZ1bmN0aW9uKGxpLEVzKXtyZXR1cm57dDoicyIsdjpZaS50LnNsaWNlKGxpLmlkeCwoWWku'@;
put 'X1JbRXMrMV18fHt9KS5pZHgpLHM6WW4uRm9udHNbbGkuaWZudDw0P2xpLmlmbnQ6bGkuaWZudC0xXX19KSxGLmNlbGxIVE1MJiYoWWkuaD1GYyhZaS5SKSkpOkYuY2VsbEhUTUwmJihZaS5oPVppKFlpLnQpKSxkZWxldGUgWWkuX1J9KTticmVhaztjYXNlIkZvcm1hdCI6aWYoND09VW4uYmlm'@;
put 'Zil7VWlbWnIrK109RW5bMV07Zm9yKHZhciBjcj0wO2NyPFpyKzE2MyYmQy5fdGFibGVbY3JdIT1FblsxXTsrK2NyKTtjcj49MTYzJiZDLmxvYWQoRW5bMV0sWnIrMTYzKX1lbHNlIEMubG9hZChFblsxXSxFblswXSk7YnJlYWs7Y2FzZSJCSUZGMkZPUk1BVCI6VWlbWnIrK109RW47Zm9yKHZh'@;
put 'ciBmaT0wO2ZpPFpyKzE2MyYmQy5fdGFibGVbZmldIT1FbjsrK2ZpKTtmaT49MTYzJiZDLmxvYWQoRW4sWnIrMTYzKTticmVhaztjYXNlIk1lcmdlQ2VsbHMiOk9pPU9pLmNvbmNhdChFbik7YnJlYWs7Y2FzZSJPYmoiOk5pW0VuLmNtb1swXV09VW4ubGFzdG9iaj1FbjticmVhaztjYXNlIlR4'@;
put 'TyI6VW4ubGFzdG9iai5UeE89RW47YnJlYWs7Y2FzZSJJbURhdGEiOlVuLmxhc3RvYmouSW1EYXRhPUVuO2JyZWFrO2Nhc2UiSExpbmsiOmZvcih2dD1FblswXS5zLnI7dnQ8PUVuWzBdLmUucjsrK3Z0KWZvcih1dD1FblswXS5zLmM7dXQ8PUVuWzBdLmUuYzsrK3V0KShodD1GLmRlbnNlPyhp'@;
put 'ZVt2dF18fFtdKVt1dF06aWVbRGkoe2M6dXQscjp2dH0pXSkmJihodC5sPUVuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKHZ0PUVuWzBdLnMucjt2dDw9RW5bMF0uZS5yOysrdnQpZm9yKHV0PUVuWzBdLnMuYzt1dDw9RW5bMF0uZS5jOysrdXQpKGh0PUYuZGVuc2U/KGllW3Z0'@;
put 'XXx8W10pW3V0XTppZVtEaSh7Yzp1dCxyOnZ0fSldKSYmaHQubCYmKGh0LmwuVG9vbHRpcD1FblsxXSk7YnJlYWs7Y2FzZSJOb3RlIjppZihVbi5iaWZmPD01JiZVbi5iaWZmPj0yKWJyZWFrO2h0PUYuZGVuc2U/KGllW0VuWzBdLnJdfHxbXSlbRW5bMF0uY106aWVbRGkoRW5bMF0pXTt2YXIg'@;
put 'd289TmlbRW5bMl1dO2h0fHwoRi5kZW5zZT8oaWVbRW5bMF0ucl18fChpZVtFblswXS5yXT1bXSksaHQ9aWVbRW5bMF0ucl1bRW5bMF0uY109e3Q6InoifSk6aHQ9aWVbRGkoRW5bMF0pXT17dDoieiJ9LHllLmUucj1NYXRoLm1heCh5ZS5lLnIsRW5bMF0ucikseWUucy5yPU1hdGgubWluKHll'@;
put 'LnMucixFblswXS5yKSx5ZS5lLmM9TWF0aC5tYXgoeWUuZS5jLEVuWzBdLmMpLHllLnMuYz1NYXRoLm1pbih5ZS5zLmMsRW5bMF0uYykpLGh0LmN8fChodC5jPVtdKSxodC5jLnB1c2goe2E6RW5bMV0sdDp3by5UeE8udH0pO2JyZWFrO2RlZmF1bHQ6c3dpdGNoKHZpLm4pe2Nhc2UiQ2xydENs'@;
put 'aWVudCI6Y2FzZSJIZWFkZXIiOmNhc2UiRm9vdGVyIjpjYXNlIkhDZW50ZXIiOmNhc2UiVkNlbnRlciI6Y2FzZSJQbHMiOmNhc2UiR0NXIjpjYXNlIkxIUmVjb3JkIjpjYXNlIkRCQ2VsbCI6Y2FzZSJFbnRFeFUyIjpjYXNlIlN4VmlldyI6Y2FzZSJTeHZkIjpjYXNlIlNYVkkiOmNhc2UiU1hW'@;
put 'REV4IjpjYXNlIlN4SXZkIjpjYXNlIlNYU3RyaW5nIjpjYXNlIlN5bmMiOmNhc2UiQWRkaW4iOmNhc2UiU1hESSI6Y2FzZSJTWExJIjpjYXNlIlNYRXgiOmNhc2UiUXNpU1hUYWciOmNhc2UiRmVhdCI6Y2FzZSJGZWF0SGRyIjpjYXNlIkZlYXRIZHIxMSI6Y2FzZSJGZWF0dXJlMTEiOmNhc2Ui'@;
put 'RmVhdHVyZTEyIjpjYXNlIkxpc3QxMiI6Y2FzZSJSZWNhbGNJZCI6Y2FzZSJEeEdDb2wiOmNhc2UiRmJpIjpjYXNlIkZiaTIiOmNhc2UiR2VsRnJhbWUiOmNhc2UiWEZDUkMiOmNhc2UiU3R5bGUiOmNhc2UiU3R5bGVFeHQiOmNhc2UiU2NlbmFyaW9Qcm90ZWN0IjpjYXNlIk9ialByb3RlY3Qi'@;
put 'OmNhc2UiQ29uZEZtdDEyIjpjYXNlIlRhYmxlIjpjYXNlIlRhYmxlU3R5bGVzIjpjYXNlIlRhYmxlU3R5bGUiOmNhc2UiVGFibGVTdHlsZUVsZW1lbnQiOmNhc2UiU1hTdHJlYW1JRCI6Y2FzZSJTWFZTIjpjYXNlIkRDb25SZWYiOmNhc2UiU1hBZGRsIjpjYXNlIkRDb25CaW4iOmNhc2UiRENv'@;
put 'bk5hbWUiOmNhc2UiU1hQSSI6Y2FzZSJTeEZvcm1hdCI6Y2FzZSJTeFNlbGVjdCI6Y2FzZSJTeFJ1bGUiOmNhc2UiU3hGaWx0IjpjYXNlIlN4SXRtIjpjYXNlIlN4RFhGIjpjYXNlIlNjZW5NYW4iOmNhc2UiRENvbiI6Y2FzZSJDZWxsV2F0Y2giOmNhc2UiUHJpbnRSb3dDb2wiOmNhc2UiUHJp'@;
put 'bnRHcmlkIjpjYXNlIlByaW50U2l6ZSI6Y2FzZSJYQ1QiOmNhc2UiQ1JOIjpjYXNlIlNjbCI6Y2FzZSJTaGVldEV4dCI6Y2FzZSJTaGVldEV4dE9wdGlvbmFsIjpjYXNlIk9iTm9NYWNyb3MiOmNhc2UiT2JQcm9qIjpjYXNlIkdVSURUeXBlTGliIjpjYXNlIldPcHQiOmNhc2UiUGhvbmV0aWNJ'@;
put 'bmZvIjpjYXNlIk9sZU9iamVjdFNpemUiOmNhc2UiRFhGIjpjYXNlIkRYRk4iOmNhc2UiRFhGTjEyIjpjYXNlIkRYRk4xMkxpc3QiOmNhc2UiRFhGTjEyTm9DQiI6Y2FzZSJEdiI6Y2FzZSJEVmFsIjpjYXNlIkJSQUkiOmNhc2UiU2VyaWVzIjpjYXNlIlNlcmllc1RleHQiOmNhc2UiRENvbm4i'@;
put 'OmNhc2UiRGJPclBhcmFtUXJ5IjpjYXNlIkRCUXVlcnlFeHQiOmNhc2UiT2xlRGJDb25uIjpjYXNlIkV4dFN0cmluZyI6Y2FzZSJJRm10UmVjb3JkIjpjYXNlIkNvbmRGbXQiOmNhc2UiQ0YiOmNhc2UiQ0YxMiI6Y2FzZSJDRkV4IjpjYXNlIkV4Y2VsOUZpbGUiOmNhc2UiVW5pdHMiOmNhc2Ui'@;
put 'SW50ZXJmYWNlSGRyIjpjYXNlIk1tcyI6Y2FzZSJJbnRlcmZhY2VFbmQiOmNhc2UiRFNGIjpjYXNlIkJ1aWx0SW5Gbkdyb3VwQ291bnQiOmNhc2UiV2luZG93MSI6Y2FzZSJIaWRlT2JqIjpjYXNlIkdyaWRTZXQiOmNhc2UiR3V0cyI6Y2FzZSJVc2VyQlZpZXciOmNhc2UiVXNlclNWaWV3QmVn'@;
put 'aW4iOmNhc2UiVXNlclNWaWV3RW5kIjpjYXNlIkRlZkNvbFdpZHRoIjpjYXNlIkRlZmF1bHRSb3dIZWlnaHQiOmJyZWFrO2Nhc2UiWEZFeHQiOm1DKGduW0VuLml4ZmVdLEVuLmV4dCk7YnJlYWs7Y2FzZSJDb2xJbmZvIjppZighVW4uY2VsbFN0eWxlcylicmVhaztmb3IoO0VuLmU+PUVuLnM7'@;
put 'KWRpW0VuLmUtLV09e3dpZHRoOkVuLncvMjU2LGxldmVsOkVuLmxldmVsfHwwLGhpZGRlbjohISgxJkVuLmZsYWdzKX0sb3J8fChvcj0hMCksJHUoZGlbRW4uZSsxXSk7YnJlYWs7Y2FzZSJSb3ciOnZhciBtaT17fTtudWxsIT1Fbi5sZXZlbCYmKF9yW0VuLnJdPW1pLG1pLmxldmVsPUVuLmxl'@;
put 'dmVsKSxFbi5oaWRkZW4mJihfcltFbi5yXT1taSxtaS5oaWRkZW49ITApLEVuLmhwdCYmKF9yW0VuLnJdPW1pLG1pLmhwdD1Fbi5ocHQsbWkuaHB4PVoxKEVuLmhwdCkpLEVuLml4ZmUmJihfcltFbi5yXT1taSx0cihBdD17aXhmZTpFbi5peGZlLFhGOmduW0VuLml4ZmVdfHx7fSx2OjAsdDoi'@;
put 'biJ9LEYpLG1pLnM9QXQucyk7YnJlYWs7Y2FzZSJMZWZ0TWFyZ2luIjpjYXNlIlJpZ2h0TWFyZ2luIjpjYXNlIlRvcE1hcmdpbiI6Y2FzZSJCb3R0b21NYXJnaW4iOmllWyIhbWFyZ2lucyJdfHxxMihpZVsiIW1hcmdpbnMiXT17fSksaWVbIiFtYXJnaW5zIl1bbXMuc2xpY2UoMCwtNikudG9M'@;
put 'b3dlckNhc2UoKV09RW47YnJlYWs7Y2FzZSJTZWxlY3Rpb24iOmllWyIhc2VsIl09RW47YnJlYWs7Y2FzZSJTZXR1cCI6aWVbIiFtYXJnaW5zIl18fHEyKGllWyIhbWFyZ2lucyJdPXt9KSxpZVsiIW1hcmdpbnMiXS5oZWFkZXI9RW4uaGVhZGVyLGllWyIhbWFyZ2lucyJdLmZvb3Rlcj1Fbi5m'@;
put 'b290ZXI7YnJlYWs7Y2FzZSJXaW5kb3cyIjpFbi5SVEwmJih1bi5WaWV3c1swXS5SVEw9ITApLFhyPUVuO2JyZWFrO2Nhc2UiQ291bnRyeSI6WnQ9RW47YnJlYWs7Y2FzZSJGb250IjpFbi5pY3YmJkxuKEVuLmljdikmJihFbi5jb2xvcj17cmdiOnQxKExuKEVuLmljdikpfSksZGVsZXRlIEVu'@;
put 'LmljdiwwPT1Zbi5Gb250cy5sZW5ndGgmJnkzKEVuKSxZbi5Gb250cy5wdXNoKEVuKTticmVhaztjYXNlIlBhbGV0dGUiOnFuPUVuO2JyZWFrO2Nhc2UiVGhlbWUiOnBpPUVuO2JyZWFrO2Nhc2UiQ29kZU5hbWUiOmplP0puLkNvZGVOYW1lPUVufHxKbi5uYW1lOnVuLldCUHJvcHMuQ29kZU5h'@;
put 'bWU9RW58fCJUaGlzV29ya2Jvb2siO2JyZWFrO2Nhc2UiUGFuZSI6KFhyfHx7fSkuZnJvemVuJiYoaWVbIiFmcmVlemUiXT1EaSh7cjpFbi55fHwwLGM6RW4ueHx8MH0pKTticmVhaztkZWZhdWx0OnN3aXRjaCh2aS5uKXtjYXNlIkRhdCI6Y2FzZSJCZWdpbiI6Y2FzZSJFbmQiOmNhc2UiU3Rh'@;
put 'cnRCbG9jayI6Y2FzZSJFbmRCbG9jayI6Y2FzZSJGcmFtZSI6Y2FzZSJBcmVhIjpjYXNlIkF4aXMiOmNhc2UiQXhpc0xpbmUiOmNhc2UiVGljayI6Y2FzZSJBeGVzVXNlZCI6Y2FzZSJDcnRMYXlvdXQxMiI6Y2FzZSJDcnRMYXlvdXQxMkEiOmNhc2UiQ3J0TGluayI6Y2FzZSJDcnRMaW5lIjpj'@;
put 'YXNlIkNydE1sRnJ0IjpjYXNlIkNydE1sRnJ0Q29udGludWUiOmNhc2UiTGluZUZvcm1hdCI6Y2FzZSJBcmVhRm9ybWF0IjpjYXNlIkNoYXJ0IjpjYXNlIkNoYXJ0M2QiOmNhc2UiQ2hhcnQzREJhclNoYXBlIjpjYXNlIkNoYXJ0Rm9ybWF0IjpjYXNlIkNoYXJ0RnJ0SW5mbyI6Y2FzZSJQbG90'@;
put 'QXJlYSI6Y2FzZSJQbG90R3Jvd3RoIjpjYXNlIlNlcmllc0xpc3QiOmNhc2UiU2VyUGFyZW50IjpjYXNlIlNlckF1eFRyZW5kIjpjYXNlIkRhdGFGb3JtYXQiOmNhc2UiU2VyVG9DcnQiOmNhc2UiRm9udFgiOmNhc2UiQ2F0U2VyUmFuZ2UiOmNhc2UiQXhjRXh0IjpjYXNlIlNlckZtdCI6Y2Fz'@;
put 'ZSJTaHRQcm9wcyI6Y2FzZSJEZWZhdWx0VGV4dCI6Y2FzZSJUZXh0IjpjYXNlIkNhdExhYiI6Y2FzZSJEYXRhTGFiRXh0Q29udGVudHMiOmNhc2UiTGVnZW5kIjpjYXNlIkxlZ2VuZEV4Y2VwdGlvbiI6Y2FzZSJQaWUiOmNhc2UiU2NhdHRlciI6Y2FzZSJQaWVGb3JtYXQiOmNhc2UiTWFya2Vy'@;
put 'Rm9ybWF0IjpjYXNlIlN0YXJ0T2JqZWN0IjpjYXNlIkVuZE9iamVjdCI6Y2FzZSJBbFJ1bnMiOmNhc2UiT2JqZWN0TGluayI6Y2FzZSJTSUluZGV4IjpjYXNlIkF0dGFjaGVkTGFiZWwiOmNhc2UiWU11bHQiOmNhc2UiTGluZSI6Y2FzZSJCYXIiOmNhc2UiU3VyZiI6Y2FzZSJBeGlzUGFyZW50'@;
put 'IjpjYXNlIlBvcyI6Y2FzZSJWYWx1ZVJhbmdlIjpjYXNlIlNYVmlld0V4OSI6Y2FzZSJTWFZpZXdMaW5rIjpjYXNlIlBpdm90Q2hhcnRCaXRzIjpjYXNlIlNCYXNlUmVmIjpjYXNlIlRleHRQcm9wc1N0cmVhbSI6Y2FzZSJMbkV4dCI6Y2FzZSJNa3JFeHQiOmNhc2UiQ3J0Q29vcHQiOmNhc2Ui'@;
put 'UXNpIjpjYXNlIlFzaWYiOmNhc2UiUXNpciI6Y2FzZSJRc2lTWFRhZyI6Y2FzZSJUeHRRcnkiOmNhc2UiRmlsdGVyTW9kZSI6Y2FzZSJBdXRvRmlsdGVyIjpjYXNlIkF1dG9GaWx0ZXJJbmZvIjpjYXNlIkF1dG9GaWx0ZXIxMiI6Y2FzZSJEcm9wRG93bk9iaklkcyI6Y2FzZSJTb3J0IjpjYXNl'@;
put 'IlNvcnREYXRhIjpjYXNlIlNoYXBlUHJvcHNTdHJlYW0iOmNhc2UiTXNvRHJhd2luZyI6Y2FzZSJNc29EcmF3aW5nR3JvdXAiOmNhc2UiTXNvRHJhd2luZ1NlbGVjdGlvbiI6Y2FzZSJXZWJQdWIiOmNhc2UiQXV0b1dlYlB1YiI6Y2FzZSJIZWFkZXJGb290ZXIiOmNhc2UiSEZQaWN0dXJlIjpj'@;
put 'YXNlIlBMViI6Y2FzZSJIb3Jpem9udGFsUGFnZUJyZWFrcyI6Y2FzZSJWZXJ0aWNhbFBhZ2VCcmVha3MiOmNhc2UiQmFja3VwIjpjYXNlIkNvbXByZXNzUGljdHVyZXMiOmNhc2UiQ29tcGF0MTIiOmNhc2UiQ29udGludWUiOmNhc2UiQ29udGludWVGcnQxMiI6Y2FzZSJGcnRGb250TGlzdCI6'@;
put 'Y2FzZSJGcnRXcmFwcGVyIjpicmVhaztkZWZhdWx0OnN3aXRjaCh2aS5uKXtjYXNlIlRhYklkQ29uZiI6Y2FzZSJSYWRhciI6Y2FzZSJSYWRhckFyZWEiOmNhc2UiRHJvcEJhciI6Y2FzZSJJbnRsIjpjYXNlIkNvb3JkTGlzdCI6Y2FzZSJTZXJBdXhFcnJCYXIiOmNhc2UiQklGRjJGT05UQ0xS'@;
put 'IjpjYXNlIkJJRkYyRk1UQ05UIjpjYXNlIkJJRkYyRk9OVFhUUkEiOmNhc2UiQklGRjJYRiI6Y2FzZSJCSUZGM1hGIjpjYXNlIkJJRkY0WEYiOmNhc2UiQklGRjJYRklOREVYIjpjYXNlIkJJRkY0Rk1UQ05UIjpjYXNlIkJJRkYyUk9XIjpjYXNlIkJJRkYyV0lORE9XMiI6Y2FzZSJTQ0VOQVJJ'@;
put 'TyI6Y2FzZSJEQ29uQmluIjpjYXNlIlBpY0YiOmNhc2UiRGF0YUxhYkV4dCI6Y2FzZSJMZWwiOmNhc2UiQm9wUG9wIjpjYXNlIkJvcFBvcEN1c3RvbSI6Y2FzZSJSZWFsVGltZURhdGEiOmNhc2UiTmFtZSI6Y2FzZSJMSE5HcmFwaCI6Y2FzZSJGbkdyb3VwTmFtZSI6Y2FzZSJBZGRNZW51Ijpj'@;
put 'YXNlIkxQciI6Y2FzZSJMaXN0T2JqIjpjYXNlIkxpc3RGaWVsZCI6Y2FzZSJSUlNvcnQiOmNhc2UiQmlnTmFtZSI6Y2FzZSJUb29sYmFySGRyIjpjYXNlIlRvb2xiYXJFbmQiOmNhc2UiRERFT2JqTmFtZSI6Y2FzZSJGUlRBcmNoSWQkIjpicmVhaztkZWZhdWx0OmlmKEYuV1RGKXRocm93IlVu'@;
put 'cmVjb2duaXplZCBSZWNvcmQgIit2aS5ufX19fX1lbHNlIE0ubCs9eG8sVW4mJlVuLmVuYyYmVW4uZW5jLmluc2l0dSYmVW4uZW5jLmluc2l0dShsZSh7bGVuZ3RoOnhvfSkpfXJldHVybiBPLlNoZWV0TmFtZXM9YXQocGUpLnNvcnQoZnVuY3Rpb24oWWksbGkpe3JldHVybiBOdW1iZXIoWWkp'@;
put 'LU51bWJlcihsaSl9KS5tYXAoZnVuY3Rpb24oWWkpe3JldHVybiBwZVtZaV0ubmFtZX0pLEYuYm9va1NoZWV0c3x8KE8uU2hlZXRzPUopLCFPLlNoZWV0TmFtZXMubGVuZ3RoJiZZZVsiIXJlZiJdPyhPLlNoZWV0TmFtZXMucHVzaCgiU2hlZXQxIiksTy5TaGVldHMmJihPLlNoZWV0cy5TaGVl'@;
put 'dDE9WWUpKTpPLlByZWFtYmxlPVllLE8uU2hlZXRzJiZSby5mb3JFYWNoKGZ1bmN0aW9uKFlpLGxpKXtPLlNoZWV0c1tPLlNoZWV0TmFtZXNbbGldXVsiIWF1dG9maWx0ZXIiXT1ZaX0pLE8uU3RyaW5ncz1NZSxPLlNTRj1DLmdldF90YWJsZSgpLFVuLmVuYyYmKE8uRW5jcnlwdGlvbj1Vbi5l'@;
put 'bmMpLHBpJiYoTy5UaGVtZXM9cGkpLE8uTWV0YWRhdGE9e30sdm9pZCAwIT09WnQmJihPLk1ldGFkYXRhLkNvdW50cnk9WnQpLFRuLm5hbWVzLmxlbmd0aD4wJiYodW4uTmFtZXM9VG4ubmFtZXMpLE8uV29ya2Jvb2s9dW4sT30oSi5jb250ZW50LEYpO2Vsc2UgaWYoKHBlPUxlLmZpbmQoTSwi'@;
put 'UGVyZmVjdE9mZmljZV9NQUlOIikpJiZwZS5jb250ZW50KWllPVQ2LnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKEYudHlwZT15ZSxGKSk7ZWxzZXtpZighKHBlPUxlLmZpbmQoTSwiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhcGUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5k'@;
put 'IFdvcmtib29rIHN0cmVhbSIpO2llPVQ2LnRvX3dvcmtib29rKHBlLmNvbnRlbnQsKEYudHlwZT15ZSxGKSl9Ri5ib29rVkJBJiZNLkZ1bGxQYXRocyYmTGUuZmluZChNLCIvX1ZCQV9QUk9KRUNUX0NVUi9WQkEvZGlyIikmJihpZS52YmFyYXc9ZnVuY3Rpb24gU0MoTSl7dmFyIEY9TGUudXRp'@;
put 'bHMuY2ZiX25ldyh7cm9vdDoiUiJ9KTtyZXR1cm4gTS5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihPLEope2lmKCIvIiE9PU8uc2xpY2UoLTEpJiZPLm1hdGNoKC9fVkJBX1BST0pFQ1RfQ1VSLykpe3ZhciBpZT1PLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFjZSgvXC9fVkJBX1BS'@;
put 'T0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO0xlLnV0aWxzLmNmYl9hZGQoRixpZSxNLkZpbGVJbmRleFtKXS5jb250ZW50KX19KSxMZS53cml0ZShGKX0oTSkpfXZhciB2ZT17fTtyZXR1cm4gTS5GdWxsUGF0aHMmJmZ1bmN0aW9uIFRXKE0sRixPKXt2YXIgSj1MZS5maW5kKE0sIiFEb2N1bWVudFN1'@;
put 'bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEomJkouc2l6ZT4wKXRyeXt2YXIgaWU9dTMoSixDaCxDOC5EU0kpO2Zvcih2YXIgcGUgaW4gaWUpRltwZV09aWVbcGVdfWNhdGNoKGplKXtpZihPLldURil0aHJvdyBqZX12YXIgeWU9TGUuZmluZChNLCIhU3VtbWFyeUluZm9ybWF0aW9uIik7aWYoeWUm'@;
put 'JnllLnNpemU+MCl0cnl7dmFyIHZlPXUzKHllLEwyLEM4LlNJKTtmb3IodmFyIE1lIGluIHZlKW51bGw9PUZbTWVdJiYoRltNZV09dmVbTWVdKX1jYXRjaChqZSl7aWYoTy5XVEYpdGhyb3cgamV9Ri5IZWFkaW5nUGFpcnMmJkYuVGl0bGVzT2ZQYXJ0cyYmKGtoKEYuSGVhZGluZ1BhaXJzLEYu'@;
put 'VGl0bGVzT2ZQYXJ0cyxGLE8pLGRlbGV0ZSBGLkhlYWRpbmdQYWlycyxkZWxldGUgRi5UaXRsZXNPZlBhcnRzKX0oTSx2ZSxGKSxpZS5Qcm9wcz1pZS5DdXN0cHJvcHM9dmUsRi5ib29rRmlsZXMmJihpZS5jZmI9TSksaWV9dmFyIHY0PXswOntuOiJCcnRSb3dIZHIiLGY6ZnVuY3Rpb24gYlMo'@;
put 'TSxGKXt2YXIgTz17fSxKPU0ubCtGO08ucj1NLnJlYWRfc2hpZnQoNCksTS5sKz00O3ZhciBpZT1NLnJlYWRfc2hpZnQoMik7TS5sKz0xO3ZhciBwZT1NLnJlYWRfc2hpZnQoMSk7cmV0dXJuIE0ubD1KLDcmcGUmJihPLmxldmVsPTcmcGUpLDE2JnBlJiYoTy5oaWRkZW49ITApLDMyJnBlJiYo'@;
put 'Ty5ocHQ9aWUvMjApLE99fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24gdVcoTSl7cmV0dXJuW0F1KE0pXX19LDI6e246IkJydENlbGxSayIsZjpmdW5jdGlvbiBFUihNKXtyZXR1cm5bQXUoTSksTHUoTSksIm4iXX19LDM6e246IkJydENlbGxFcnJvciIsZjpmdW5jdGlvbiBTUyhN'@;
put 'KXtyZXR1cm5bQXUoTSksTS5yZWFkX3NoaWZ0KDEpLCJlIl19fSw0OntuOiJCcnRDZWxsQm9vbCIsZjpmdW5jdGlvbiBiUihNKXtyZXR1cm5bQXUoTSksTS5yZWFkX3NoaWZ0KDEpLCJiIl19fSw1OntuOiJCcnRDZWxsUmVhbCIsZjpmdW5jdGlvbiBBdihNKXtyZXR1cm5bQXUoTSksaGEoTSks'@;
put 'Im4iXX19LDY6e246IkJydENlbGxTdCIsZjpmdW5jdGlvbiBmVyhNKXtyZXR1cm5bQXUoTSksemwoTSksInN0ciJdfX0sNzp7bjoiQnJ0Q2VsbElzc3QiLGY6ZnVuY3Rpb24gTVIoTSl7cmV0dXJuW0F1KE0pLE0ucmVhZF9zaGlmdCg0KSwicyJdfX0sODp7bjoiQnJ0Rm1sYVN0cmluZyIsZjpm'@;
put 'dW5jdGlvbiBkOChNLEYsTyl7dmFyIEo9TS5sK0YsaWU9QXUoTSk7aWUucj1PWyIhcm93Il07dmFyIHllPVtpZSx6bChNKSwic3RyIl07aWYoTy5jZWxsRm9ybXVsYSl7TS5sKz0yO3ZhciB2ZT1MMyhNLEotTS5sLE8pO3llWzNdPW51KHZlLG51bGwsaWUsTy5zdXBib29rcyxPKX1lbHNlIE0u'@;
put 'bD1KO3JldHVybiB5ZX19LDk6e246IkJydEZtbGFOdW0iLGY6ZnVuY3Rpb24gSXYoTSxGLE8pe3ZhciBKPU0ubCtGLGllPUF1KE0pO2llLnI9T1siIXJvdyJdO3ZhciB5ZT1baWUsaGEoTSksIm4iXTtpZihPLmNlbGxGb3JtdWxhKXtNLmwrPTI7dmFyIHZlPUwzKE0sSi1NLmwsTyk7eWVbM109'@;
put 'bnUodmUsbnVsbCxpZSxPLnN1cGJvb2tzLE8pfWVsc2UgTS5sPUo7cmV0dXJuIHllfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIEx2KE0sRixPKXt2YXIgSj1NLmwrRixpZT1BdShNKTtpZS5yPU9bIiFyb3ciXTt2YXIgeWU9W2llLE0ucmVhZF9zaGlmdCgxKSwiYiJdO2lmKE8u'@;
put 'Y2VsbEZvcm11bGEpe00ubCs9Mjt2YXIgdmU9TDMoTSxKLU0ubCxPKTt5ZVszXT1udSh2ZSxudWxsLGllLE8uc3VwYm9va3MsTyl9ZWxzZSBNLmw9SjtyZXR1cm4geWV9fSwxMTp7bjoiQnJ0Rm1sYUVycm9yIixmOmZ1bmN0aW9uIFM1KE0sRixPKXt2YXIgSj1NLmwrRixpZT1BdShNKTtpZS5y'@;
put 'PU9bIiFyb3ciXTt2YXIgeWU9W2llLE0ucmVhZF9zaGlmdCgxKSwiZSJdO2lmKE8uY2VsbEZvcm11bGEpe00ubCs9Mjt2YXIgdmU9TDMoTSxKLU0ubCxPKTt5ZVszXT1udSh2ZSxudWxsLGllLE8uc3VwYm9va3MsTyl9ZWxzZSBNLmw9SjtyZXR1cm4geWV9fSwxMjp7bjoiQnJ0U2hvcnRCbGFu'@;
put 'ayIsZjpmdW5jdGlvbiB5UihNKXtyZXR1cm5bVTAoTSldfX0sMTM6e246IkJydFNob3J0UmsiLGY6ZnVuY3Rpb24gaFcoTSl7cmV0dXJuW1UwKE0pLEx1KE0pLCJuIl19fSwxNDp7bjoiQnJ0U2hvcnRFcnJvciIsZjpmdW5jdGlvbiBDNShNKXtyZXR1cm5bVTAoTSksTS5yZWFkX3NoaWZ0KDEp'@;
put 'LCJlIl19fSwxNTp7bjoiQnJ0U2hvcnRCb29sIixmOmZ1bmN0aW9uIENTKE0pe3JldHVybltVMChNKSxNLnJlYWRfc2hpZnQoMSksImIiXX19LDE2OntuOiJCcnRTaG9ydFJlYWwiLGY6a1J9LDE3OntuOiJCcnRTaG9ydFN0IixmOmZ1bmN0aW9uIExSKE0pe3JldHVybltVMChNKSx6bChNKSwi'@;
put 'c3RyIl19fSwxODp7bjoiQnJ0U2hvcnRJc3N0IixmOmZ1bmN0aW9uIFNSKE0pe3JldHVybltVMChNKSxNLnJlYWRfc2hpZnQoNCksInMiXX19LDE5OntuOiJCcnRTU1RJdGVtIixmOklvfSwyMDp7bjoiQnJ0UENESU1pc3NpbmcifSwyMTp7bjoiQnJ0UENESU51bWJlciJ9LDIyOntuOiJCcnRQ'@;
put 'Q0RJQm9vbGVhbiJ9LDIzOntuOiJCcnRQQ0RJRXJyb3IifSwyNDp7bjoiQnJ0UENESVN0cmluZyJ9LDI1OntuOiJCcnRQQ0RJRGF0ZXRpbWUifSwyNjp7bjoiQnJ0UENESUluZGV4In0sMjc6e246IkJydFBDRElBTWlzc2luZyJ9LDI4OntuOiJCcnRQQ0RJQU51bWJlciJ9LDI5OntuOiJCcnRQ'@;
put 'Q0RJQUJvb2xlYW4ifSwzMDp7bjoiQnJ0UENESUFFcnJvciJ9LDMxOntuOiJCcnRQQ0RJQVN0cmluZyJ9LDMyOntuOiJCcnRQQ0RJQURhdGV0aW1lIn0sMzM6e246IkJydFBDUlJlY29yZCJ9LDM0OntuOiJCcnRQQ1JSZWNvcmREdCJ9LDM1OntuOiJCcnRGUlRCZWdpbiJ9LDM2OntuOiJCcnRG'@;
put 'UlRFbmQifSwzNzp7bjoiQnJ0QUNCZWdpbiJ9LDM4OntuOiJCcnRBQ0VuZCJ9LDM5OntuOiJCcnROYW1lIixmOmZ1bmN0aW9uIGFPKE0sRixPKXt2YXIgSj1NLmwrRjtNLmwrPTQsTS5sKz0xO3ZhciBpZT1NLnJlYWRfc2hpZnQoNCkscGU9VDEoTSkseWU9R0MoTSwwLE8pLHZlPWhjKE0pO00u'@;
put 'bD1KO3ZhciBNZT17TmFtZTpwZSxQdGc6eWV9O3JldHVybiBpZTwyNjg0MzU0NTUmJihNZS5TaGVldD1pZSksdmUmJihNZS5Db21tZW50PXZlKSxNZX19LDQwOntuOiJCcnRJbmRleFJvd0Jsb2NrIn0sNDI6e246IkJydEluZGV4QmxvY2sifSw0Mzp7bjoiQnJ0Rm9udCIsZjpmdW5jdGlvbiBJ'@;
put 'TChNLEYsTyl7dmFyIEo9e307Si5zej1NLnJlYWRfc2hpZnQoMikvMjA7dmFyIGllPUltKE0pO3N3aXRjaChpZS5mQm9sZCYmKEouYm9sZD0xKSxpZS5mSXRhbGljJiYoSi5pdGFsaWM9MSksaWUuZlVuZGVybGluZSYmKEoudW5kZXJsaW5lPTEpLGllLmZDb25kZW5zZSYmKEouY29uZGVuc2U9'@;
put 'MSksaWUuZkV4dGVuZCYmKEouZXh0ZW5kPTEpLGllLmZTaGFkb3cmJihKLnNoYWRvdz0xKSxpZS5mT3V0bGluZSYmKEoub3V0bGluZT0xKSxpZS5mU3RyaWtlb3V0JiYoSi5zdHJpa2U9MSksNzAwPT09TS5yZWFkX3NoaWZ0KDIpJiYoSi5ib2xkPTEpLE0ucmVhZF9zaGlmdCgyKSl7Y2FzZSAx'@;
put 'OkoudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOkoudmFsaWduPSJzdWIifXZhciB5ZT1NLnJlYWRfc2hpZnQoMSk7MCE9eWUmJihKLnVuZGVybGluZT15ZSk7dmFyIHZlPU0ucmVhZF9zaGlmdCgxKTt2ZT4wJiYoSi5mYW1pbHk9dmUpO3ZhciBNZT1NLnJlYWRfc2hpZnQoMSk7c3dpdGNo'@;
put 'KE1lPjAmJihKLmNoYXJzZXQ9TWUpLE0ubCsrLEouY29sb3I9WjAoTSksTS5yZWFkX3NoaWZ0KDEpKXtjYXNlIDE6Si5zY2hlbWU9Im1ham9yIjticmVhaztjYXNlIDI6Si5zY2hlbWU9Im1pbm9yIn1yZXR1cm4gSi5uYW1lPXpsKE0pLEp9fSw0NDp7bjoiQnJ0Rm10IixmOmZ1bmN0aW9uIFk2'@;
put 'KE0sRil7cmV0dXJuW00ucmVhZF9zaGlmdCgyKSx6bChNKV19fSw0NTp7bjoiQnJ0RmlsbCIsZjpmdW5jdGlvbiBGTChNLEYpe3ZhciBPPU0ubCtGLEo9e30saWU9TS5yZWFkX3NoaWZ0KDQpO2lmKDQwIT1pZSl7Si5wYXR0ZXJuVHlwZT1UX1tpZV07dmFyIHBlPVowKE0pOzY0IT1wZS5pbmRl'@;
put 'eCYmKEouZmdDb2xvcj1wZSk7dmFyIHllPVowKE0pOzY1IT15ZS5pbmRleCYmKEouYmdDb2xvcj15ZSl9ZWxzZXtNLmwrPTE2LE0ucmVhZF9zaGlmdCg0KSxoYShNKSxoYShNKSxoYShNKSxoYShNKSxoYShNKTtmb3IodmFyIHZlPU0ucmVhZF9zaGlmdCg0KSxNZT1bXSxqZT0wO2plPHZlOysr'@;
put 'amUpTWUucHVzaChPTChNKSl9cmV0dXJuIE0ubD1PLEp9fSw0Njp7bjoiQnJ0Qm9yZGVyIixmOmZ1bmN0aW9uIEhMKE0pe3ZhciBGPXt9O00ucmVhZF9zaGlmdCgxKTt2YXIgTz1uNChNKTsibm9uZSIhPU8uc3R5bGUmJihGLnRvcD1PKTt2YXIgSj1uNChNKTsibm9uZSIhPUouc3R5bGUmJihG'@;
put 'LmJvdHRvbT1KKTt2YXIgaWU9bjQoTSk7Im5vbmUiIT1pZS5zdHlsZSYmKEYubGVmdD1pZSk7dmFyIHBlPW40KE0pOyJub25lIiE9cGUuc3R5bGUmJihGLnJpZ2h0PXBlKTt2YXIgeWU9bjQoTSk7cmV0dXJuIm5vbmUiIT15ZS5zdHlsZSYmKEYuZGlhZz15ZSksRn19LDQ3OntuOiJCcnRYRiIs'@;
put 'ZjpmdW5jdGlvbiBEXyhNLEYpe3ZhciBPPU0ubCtGLEo9e30saWU9TS5yZWFkX3NoaWZ0KDIpLHBlPU0ucmVhZF9zaGlmdCgyKSx5ZT1NLnJlYWRfc2hpZnQoMiksdmU9TS5yZWFkX3NoaWZ0KDIpLE1lPU0ucmVhZF9zaGlmdCgyKSxqZT1NLnJlYWRfc2hpZnQoMSk7TS5yZWFkX3NoaWZ0KDEp'@;
put 'O3ZhciBZZT1NLnJlYWRfc2hpZnQoMikscWU9TS5yZWFkX3NoaWZ0KDEpO00ubD1PLEoueGZJZD1pZSxKLm51bUZtdElkPXBlLEouZm9udElkPXllLEouZmlsbElkPXZlLEouYm9yZGVySWQ9TWUsMSZxZSYmMCE9Si5udW1GbXRJZCYmKEouYXBwbHlOdW1iZXJGb3JtYXQ9ITApLEouYWxpZ25t'@;
put 'ZW50PXt9LGplPjAmJihKLmFsaWdubWVudC50ZXh0Um90YXRpb249amUpO3ZhciBpdD0hMTtyZXR1cm4gNyZZZSYmKGl0PSEwLEouYWxpZ25tZW50Lmhvcml6b250YWw9dDRbNyZZZV0pLEouYWxpZ25tZW50LnZlcnRpY2FsPXI1W1llPj4+MyY3XSxKLmFsaWdubWVudC52ZXJ0aWNhbCYmKGl0'@;
put 'PSEwKSxZZT4+PjYmMSYmKEouYWxpZ25tZW50LndyYXBUZXh0PSEwKSxZZT4+PjgmMSYmKEouYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxpdHx8ZGVsZXRlIEouYWxpZ25tZW50LDQmcWUmJml0JiYoSi5hcHBseUFsaWdubWVudD0hMCksSn19LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJC'@;
put 'cnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1ldGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJC'@;
put 'cnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhNYnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOmFffSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gczUoTSl7dmFyIEY9e307Ri5pPU0ucmVh'@;
put 'ZF9zaGlmdCg0KTt2YXIgTz17fTtPLnI9TS5yZWFkX3NoaWZ0KDQpLE8uYz1NLnJlYWRfc2hpZnQoNCksRi5yPURpKE8pO3ZhciBKPU0ucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZKJiYoRi5sPSIxIiksOCZKJiYoRi5hPSIxIiksRn19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIEJSKE0s'@;
put 'RixPKXt2YXIgSj1NLmwrRixpZT1NLnJlYWRfc2hpZnQoNCkscGU9ZmMoTSkseWU9aGMoTSksdmU9aGMoTSksTWU9aGMoTSksamU9aGMoTSksWWU9V0MoTSxGLE8pLHFlPU0ubDxKP1dDKE0sRixPKTpudWxsLGl0PTE1JmllLGh0PXt0OkFTW2l0XSxzcXJmeDpwZSxzOlt5ZSx2ZSxNZSxqZV19'@;
put 'O3JldHVybiBZZSYmKGh0LmYxPVllKSxxZSYmKGh0LmYyPXFlKSwwPT1pdHx8Mz09aXR8fDc9PWl0fHwoaHQub3A9T3ZbaWU+PjIwJjE1XSksaHR9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJy'@;
put 'dFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERhdGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6RnMscDowfSwx'@;
put 'MzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJlZ2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24gUnYoTSl7'@;
put 'dmFyIEY9TS5yZWFkX3NoaWZ0KDIpO3JldHVybiBNLmwrPTI4LHtSVEw6MzImRixncmlkOiEhKDQmRil9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6'@;
put 'e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVnaW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIGM4KE0sRil7'@;
put 'dmFyIE89e30sSj1NW00ubF07cmV0dXJuKytNLmwsTy5hYm92ZT0hKDY0JkopLE8ubGVmdD0hKDEyOCZKKSxNLmwrPTE4LE8ubmFtZT1UMihNLEYtMTkpLE99fSwxNDg6e246IkJydFdzRGltIixmOm1SLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBFUyhNLEYpe3ZhciBPPU0u'@;
put 'bCtGO2hhKE0pLGhhKE0pO3ZhciBKPU0ucmVhZF9zaGlmdCg0LCJpIiksaWU9TS5yZWFkX3NoaWZ0KDQsImkiKTtpZihNLnJlYWRfc2hpZnQoNCksTS5yZWFkX3NoaWZ0KDEpLE8hPU0ubCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBCcnRQYW5lOiAiK08rIiAhPSAiK00ubCk7cmV0dXJuW0RpKHty'@;
put 'OkosYzppZX0pXX19LDE1Mjp7bjoiQnJ0U2VsIixmOmZ1bmN0aW9uIFRTKE0sRil7cmV0dXJuIE0ucmVhZF9zaGlmdCg0KSx7Y2VsbDpEaSh7cjpNLnJlYWRfc2hpZnQoNCksYzpNLnJlYWRfc2hpZnQoNCl9KX19fSwxNTM6e246IkJydFdiUHJvcCIsZjpmdW5jdGlvbiBpTyhNLEYpe3ZhciBP'@;
put 'PXt9LEo9TS5yZWFkX3NoaWZ0KDQpO08uZGVmYXVsdFRoZW1lVmVyc2lvbj1NLnJlYWRfc2hpZnQoNCk7dmFyIGllPUY+OD96bChNKToiIjtyZXR1cm4gaWUubGVuZ3RoPjAmJihPLkNvZGVOYW1lPWllKSxPLmF1dG9Db21wcmVzc1BpY3R1cmVzPSEhKDY1NTM2JkopLE8uYmFja3VwRmlsZT0h'@;
put 'ISg2NCZKKSxPLmNoZWNrQ29tcGF0aWJpbGl0eT0hISg0MDk2JkopLE8uZGF0ZTE5MDQ9ISEoMSZKKSxPLmZpbHRlclByaXZhY3k9ISEoOCZKKSxPLmhpZGVQaXZvdEZpZWxkTGlzdD0hISgxMDI0JkopLE8ucHJvbXB0ZWRTb2x1dGlvbnM9ISEoMTYmSiksTy5wdWJsaXNoSXRlbXM9ISEoMjA0'@;
put 'OCZKKSxPLnJlZnJlc2hBbGxDb25uZWN0aW9ucz0hISgyNjIxNDQmSiksTy5zYXZlRXh0ZXJuYWxMaW5rVmFsdWVzPSEhKDEyOCZKKSxPLnNob3dCb3JkZXJVbnNlbGVjdGVkVGFibGVzPSEhKDQmSiksTy5zaG93SW5rQW5ub3RhdGlvbj0hISgzMiZKKSxPLnNob3dPYmplY3RzPVsiYWxsIiwi'@;
put 'cGxhY2Vob2xkZXJzIiwibm9uZSJdW0o+PjEzJjNdLE8uc2hvd1Bpdm90Q2hhcnRGaWx0ZXI9ISEoMzI3NjgmSiksTy51cGRhdGVMaW5rcz1bInVzZXJTZXQiLCJuZXZlciIsImFsd2F5cyJdW0o+PjgmM10sT319LDE1NDp7bjoiQnJ0V2JGYWN0b2lkIn0sMTU1OntuOiJCcnRGaWxlUmVjb3Zl'@;
put 'ciJ9LDE1Njp7bjoiQnJ0QnVuZGxlU2giLGY6ZnVuY3Rpb24gbk8oTSxGKXt2YXIgTz17fTtyZXR1cm4gTy5IaWRkZW49TS5yZWFkX3NoaWZ0KDQpLE8uaVRhYklEPU0ucmVhZF9zaGlmdCg0KSxPLnN0clJlbElEPUQxKE0sRi04KSxPLm5hbWU9emwoTSksT319LDE1Nzp7bjoiQnJ0Q2FsY1By'@;
put 'b3AifSwxNTg6e246IkJydEJvb2tWaWV3In0sMTU5OntuOiJCcnRCZWdpblNzdCIsZjpmdW5jdGlvbiBBNihNKXtyZXR1cm5bTS5yZWFkX3NoaWZ0KDQpLE0ucmVhZF9zaGlmdCg0KV19fSwxNjA6e246IkJydEVuZFNzdCJ9LDE2MTp7bjoiQnJ0QmVnaW5BRmlsdGVyIixmOlNsfSwxNjI6e246'@;
put 'IkJydEVuZEFGaWx0ZXIifSwxNjM6e246IkJydEJlZ2luRmlsdGVyQ29sdW1uIn0sMTY0OntuOiJCcnRFbmRGaWx0ZXJDb2x1bW4ifSwxNjU6e246IkJydEJlZ2luRmlsdGVycyJ9LDE2Njp7bjoiQnJ0RW5kRmlsdGVycyJ9LDE2Nzp7bjoiQnJ0RmlsdGVyIn0sMTY4OntuOiJCcnRDb2xvckZp'@;
put 'bHRlciJ9LDE2OTp7bjoiQnJ0SWNvbkZpbHRlciJ9LDE3MDp7bjoiQnJ0VG9wMTBGaWx0ZXIifSwxNzE6e246IkJydER5bmFtaWNGaWx0ZXIifSwxNzI6e246IkJydEJlZ2luQ3VzdG9tRmlsdGVycyJ9LDE3Mzp7bjoiQnJ0RW5kQ3VzdG9tRmlsdGVycyJ9LDE3NDp7bjoiQnJ0Q3VzdG9tRmls'@;
put 'dGVyIn0sMTc1OntuOiJCcnRBRmlsdGVyRGF0ZUdyb3VwSXRlbSJ9LDE3Njp7bjoiQnJ0TWVyZ2VDZWxsIixmOnhTfSwxNzc6e246IkJydEJlZ2luTWVyZ2VDZWxscyJ9LDE3ODp7bjoiQnJ0RW5kTWVyZ2VDZWxscyJ9LDE3OTp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlRGVmIn0sMTgwOntuOiJC'@;
put 'cnRFbmRQaXZvdENhY2hlRGVmIn0sMTgxOntuOiJCcnRCZWdpblBDREZpZWxkcyJ9LDE4Mjp7bjoiQnJ0RW5kUENERmllbGRzIn0sMTgzOntuOiJCcnRCZWdpblBDREZpZWxkIn0sMTg0OntuOiJCcnRFbmRQQ0RGaWVsZCJ9LDE4NTp7bjoiQnJ0QmVnaW5QQ0RTb3VyY2UifSwxODY6e246IkJy'@;
put 'dEVuZFBDRFNvdXJjZSJ9LDE4Nzp7bjoiQnJ0QmVnaW5QQ0RTUmFuZ2UifSwxODg6e246IkJydEVuZFBDRFNSYW5nZSJ9LDE4OTp7bjoiQnJ0QmVnaW5QQ0RGQXRibCJ9LDE5MDp7bjoiQnJ0RW5kUENERkF0YmwifSwxOTE6e246IkJydEJlZ2luUENESVJ1biJ9LDE5Mjp7bjoiQnJ0RW5kUENE'@;
put 'SVJ1biJ9LDE5Mzp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlUmVjb3JkcyJ9LDE5NDp7bjoiQnJ0RW5kUGl2b3RDYWNoZVJlY29yZHMifSwxOTU6e246IkJydEJlZ2luUENESGllcmFyY2hpZXMifSwxOTY6e246IkJydEVuZFBDREhpZXJhcmNoaWVzIn0sMTk3OntuOiJCcnRCZWdpblBDREhpZXJh'@;
put 'cmNoeSJ9LDE5ODp7bjoiQnJ0RW5kUENESGllcmFyY2h5In0sMTk5OntuOiJCcnRCZWdpblBDREhGaWVsZHNVc2FnZSJ9LDIwMDp7bjoiQnJ0RW5kUENESEZpZWxkc1VzYWdlIn0sMjAxOntuOiJCcnRCZWdpbkV4dENvbm5lY3Rpb24ifSwyMDI6e246IkJydEVuZEV4dENvbm5lY3Rpb24ifSwy'@;
put 'MDM6e246IkJydEJlZ2luRUNEYlByb3BzIn0sMjA0OntuOiJCcnRFbmRFQ0RiUHJvcHMifSwyMDU6e246IkJydEJlZ2luRUNPbGFwUHJvcHMifSwyMDY6e246IkJydEVuZEVDT2xhcFByb3BzIn0sMjA3OntuOiJCcnRCZWdpblBDRFNDb25zb2wifSwyMDg6e246IkJydEVuZFBDRFNDb25zb2wi'@;
put 'fSwyMDk6e246IkJydEJlZ2luUENEU0NQYWdlcyJ9LDIxMDp7bjoiQnJ0RW5kUENEU0NQYWdlcyJ9LDIxMTp7bjoiQnJ0QmVnaW5QQ0RTQ1BhZ2UifSwyMTI6e246IkJydEVuZFBDRFNDUGFnZSJ9LDIxMzp7bjoiQnJ0QmVnaW5QQ0RTQ1BJdGVtIn0sMjE0OntuOiJCcnRFbmRQQ0RTQ1BJdGVt'@;
put 'In0sMjE1OntuOiJCcnRCZWdpblBDRFNDU2V0cyJ9LDIxNjp7bjoiQnJ0RW5kUENEU0NTZXRzIn0sMjE3OntuOiJCcnRCZWdpblBDRFNDU2V0In0sMjE4OntuOiJCcnRFbmRQQ0RTQ1NldCJ9LDIxOTp7bjoiQnJ0QmVnaW5QQ0RGR3JvdXAifSwyMjA6e246IkJydEVuZFBDREZHcm91cCJ9LDIy'@;
put 'MTp7bjoiQnJ0QmVnaW5QQ0RGR0l0ZW1zIn0sMjIyOntuOiJCcnRFbmRQQ0RGR0l0ZW1zIn0sMjIzOntuOiJCcnRCZWdpblBDREZHUmFuZ2UifSwyMjQ6e246IkJydEVuZFBDREZHUmFuZ2UifSwyMjU6e246IkJydEJlZ2luUENERkdEaXNjcmV0ZSJ9LDIyNjp7bjoiQnJ0RW5kUENERkdEaXNj'@;
put 'cmV0ZSJ9LDIyNzp7bjoiQnJ0QmVnaW5QQ0RTRFR1cGxlQ2FjaGUifSwyMjg6e246IkJydEVuZFBDRFNEVHVwbGVDYWNoZSJ9LDIyOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDRW50cmllcyJ9LDIzMDp7bjoiQnJ0RW5kUENEU0RUQ0VudHJpZXMifSwyMzE6e246IkJydEJlZ2luUENEU0RUQ0VNZW1i'@;
put 'ZXJzIn0sMjMyOntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlcnMifSwyMzM6e246IkJydEJlZ2luUENEU0RUQ0VNZW1iZXIifSwyMzQ6e246IkJydEVuZFBDRFNEVENFTWVtYmVyIn0sMjM1OntuOiJCcnRCZWdpblBDRFNEVENRdWVyaWVzIn0sMjM2OntuOiJCcnRFbmRQQ0RTRFRDUXVlcmllcyJ9'@;
put 'LDIzNzp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcnkifSwyMzg6e246IkJydEVuZFBDRFNEVENRdWVyeSJ9LDIzOTp7bjoiQnJ0QmVnaW5QQ0RTRFRDU2V0cyJ9LDI0MDp7bjoiQnJ0RW5kUENEU0RUQ1NldHMifSwyNDE6e246IkJydEJlZ2luUENEU0RUQ1NldCJ9LDI0Mjp7bjoiQnJ0RW5kUENE'@;
put 'U0RUQ1NldCJ9LDI0Mzp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbXMifSwyNDQ6e246IkJydEVuZFBDRENhbGNJdGVtcyJ9LDI0NTp7bjoiQnJ0QmVnaW5QQ0RDYWxjSXRlbSJ9LDI0Njp7bjoiQnJ0RW5kUENEQ2FsY0l0ZW0ifSwyNDc6e246IkJydEJlZ2luUFJ1bGUifSwyNDg6e246IkJydEVu'@;
put 'ZFBSdWxlIn0sMjQ5OntuOiJCcnRCZWdpblBSRmlsdGVycyJ9LDI1MDp7bjoiQnJ0RW5kUFJGaWx0ZXJzIn0sMjUxOntuOiJCcnRCZWdpblBSRmlsdGVyIn0sMjUyOntuOiJCcnRFbmRQUkZpbHRlciJ9LDI1Mzp7bjoiQnJ0QmVnaW5QTmFtZXMifSwyNTQ6e246IkJydEVuZFBOYW1lcyJ9LDI1'@;
put 'NTp7bjoiQnJ0QmVnaW5QTmFtZSJ9LDI1Njp7bjoiQnJ0RW5kUE5hbWUifSwyNTc6e246IkJydEJlZ2luUE5QYWlycyJ9LDI1ODp7bjoiQnJ0RW5kUE5QYWlycyJ9LDI1OTp7bjoiQnJ0QmVnaW5QTlBhaXIifSwyNjA6e246IkJydEVuZFBOUGFpciJ9LDI2MTp7bjoiQnJ0QmVnaW5FQ1dlYlBy'@;
put 'b3BzIn0sMjYyOntuOiJCcnRFbmRFQ1dlYlByb3BzIn0sMjYzOntuOiJCcnRCZWdpbkVjV3BUYWJsZXMifSwyNjQ6e246IkJydEVuZEVDV1BUYWJsZXMifSwyNjU6e246IkJydEJlZ2luRUNQYXJhbXMifSwyNjY6e246IkJydEVuZEVDUGFyYW1zIn0sMjY3OntuOiJCcnRCZWdpbkVDUGFyYW0i'@;
put 'fSwyNjg6e246IkJydEVuZEVDUGFyYW0ifSwyNjk6e246IkJydEJlZ2luUENES1BJcyJ9LDI3MDp7bjoiQnJ0RW5kUENES1BJcyJ9LDI3MTp7bjoiQnJ0QmVnaW5QQ0RLUEkifSwyNzI6e246IkJydEVuZFBDREtQSSJ9LDI3Mzp7bjoiQnJ0QmVnaW5EaW1zIn0sMjc0OntuOiJCcnRFbmREaW1z'@;
put 'In0sMjc1OntuOiJCcnRCZWdpbkRpbSJ9LDI3Njp7bjoiQnJ0RW5kRGltIn0sMjc3OntuOiJCcnRJbmRleFBhcnRFbmQifSwyNzg6e246IkJydEJlZ2luU3R5bGVTaGVldCJ9LDI3OTp7bjoiQnJ0RW5kU3R5bGVTaGVldCJ9LDI4MDp7bjoiQnJ0QmVnaW5TWFZpZXcifSwyODE6e246IkJydEVu'@;
put 'ZFNYVkkifSwyODI6e246IkJydEJlZ2luU1hWSSJ9LDI4Mzp7bjoiQnJ0QmVnaW5TWFZJcyJ9LDI4NDp7bjoiQnJ0RW5kU1hWSXMifSwyODU6e246IkJydEJlZ2luU1hWRCJ9LDI4Njp7bjoiQnJ0RW5kU1hWRCJ9LDI4Nzp7bjoiQnJ0QmVnaW5TWFZEcyJ9LDI4ODp7bjoiQnJ0RW5kU1hWRHMi'@;
put 'fSwyODk6e246IkJydEJlZ2luU1hQSSJ9LDI5MDp7bjoiQnJ0RW5kU1hQSSJ9LDI5MTp7bjoiQnJ0QmVnaW5TWFBJcyJ9LDI5Mjp7bjoiQnJ0RW5kU1hQSXMifSwyOTM6e246IkJydEJlZ2luU1hESSJ9LDI5NDp7bjoiQnJ0RW5kU1hESSJ9LDI5NTp7bjoiQnJ0QmVnaW5TWERJcyJ9LDI5Njp7'@;
put 'bjoiQnJ0RW5kU1hESXMifSwyOTc6e246IkJydEJlZ2luU1hMSSJ9LDI5ODp7bjoiQnJ0RW5kU1hMSSJ9LDI5OTp7bjoiQnJ0QmVnaW5TWExJUndzIn0sMzAwOntuOiJCcnRFbmRTWExJUndzIn0sMzAxOntuOiJCcnRCZWdpblNYTElDb2xzIn0sMzAyOntuOiJCcnRFbmRTWExJQ29scyJ9LDMw'@;
put 'Mzp7bjoiQnJ0QmVnaW5TWEZvcm1hdCJ9LDMwNDp7bjoiQnJ0RW5kU1hGb3JtYXQifSwzMDU6e246IkJydEJlZ2luU1hGb3JtYXRzIn0sMzA2OntuOiJCcnRFbmRTeEZvcm1hdHMifSwzMDc6e246IkJydEJlZ2luU3hTZWxlY3QifSwzMDg6e246IkJydEVuZFN4U2VsZWN0In0sMzA5OntuOiJC'@;
put 'cnRCZWdpbklTWFZEUndzIn0sMzEwOntuOiJCcnRFbmRJU1hWRFJ3cyJ9LDMxMTp7bjoiQnJ0QmVnaW5JU1hWRENvbHMifSwzMTI6e246IkJydEVuZElTWFZEQ29scyJ9LDMxMzp7bjoiQnJ0RW5kU1hMb2NhdGlvbiJ9LDMxNDp7bjoiQnJ0QmVnaW5TWExvY2F0aW9uIn0sMzE1OntuOiJCcnRF'@;
put 'bmRTWFZpZXcifSwzMTY6e246IkJydEJlZ2luU1hUSHMifSwzMTc6e246IkJydEVuZFNYVEhzIn0sMzE4OntuOiJCcnRCZWdpblNYVEgifSwzMTk6e246IkJydEVuZFNYVEgifSwzMjA6e246IkJydEJlZ2luSVNYVEhSd3MifSwzMjE6e246IkJydEVuZElTWFRIUndzIn0sMzIyOntuOiJCcnRC'@;
put 'ZWdpbklTWFRIQ29scyJ9LDMyMzp7bjoiQnJ0RW5kSVNYVEhDb2xzIn0sMzI0OntuOiJCcnRCZWdpblNYVERNUFMifSwzMjU6e246IkJydEVuZFNYVERNUHMifSwzMjY6e246IkJydEJlZ2luU1hURE1QIn0sMzI3OntuOiJCcnRFbmRTWFRETVAifSwzMjg6e246IkJydEJlZ2luU1hUSEl0ZW1z'@;
put 'In0sMzI5OntuOiJCcnRFbmRTWFRISXRlbXMifSwzMzA6e246IkJydEJlZ2luU1hUSEl0ZW0ifSwzMzE6e246IkJydEVuZFNYVEhJdGVtIn0sMzMyOntuOiJCcnRCZWdpbk1ldGFkYXRhIn0sMzMzOntuOiJCcnRFbmRNZXRhZGF0YSJ9LDMzNDp7bjoiQnJ0QmVnaW5Fc21kdGluZm8ifSwzMzU6'@;
put 'e246IkJydE1kdGluZm8ifSwzMzY6e246IkJydEVuZEVzbWR0aW5mbyJ9LDMzNzp7bjoiQnJ0QmVnaW5Fc21kYiJ9LDMzODp7bjoiQnJ0RW5kRXNtZGIifSwzMzk6e246IkJydEJlZ2luRXNmbWQifSwzNDA6e246IkJydEVuZEVzZm1kIn0sMzQxOntuOiJCcnRCZWdpblNpbmdsZUNlbGxzIn0s'@;
put 'MzQyOntuOiJCcnRFbmRTaW5nbGVDZWxscyJ9LDM0Mzp7bjoiQnJ0QmVnaW5MaXN0In0sMzQ0OntuOiJCcnRFbmRMaXN0In0sMzQ1OntuOiJCcnRCZWdpbkxpc3RDb2xzIn0sMzQ2OntuOiJCcnRFbmRMaXN0Q29scyJ9LDM0Nzp7bjoiQnJ0QmVnaW5MaXN0Q29sIn0sMzQ4OntuOiJCcnRFbmRM'@;
put 'aXN0Q29sIn0sMzQ5OntuOiJCcnRCZWdpbkxpc3RYbWxDUHIifSwzNTA6e246IkJydEVuZExpc3RYbWxDUHIifSwzNTE6e246IkJydExpc3RDQ0ZtbGEifSwzNTI6e246IkJydExpc3RUckZtbGEifSwzNTM6e246IkJydEJlZ2luRXh0ZXJuYWxzIn0sMzU0OntuOiJCcnRFbmRFeHRlcm5hbHMi'@;
put 'fSwzNTU6e246IkJydFN1cEJvb2tTcmMiLGY6RDF9LDM1Nzp7bjoiQnJ0U3VwU2VsZiJ9LDM1ODp7bjoiQnJ0U3VwU2FtZSJ9LDM1OTp7bjoiQnJ0U3VwVGFicyJ9LDM2MDp7bjoiQnJ0QmVnaW5TdXBCb29rIn0sMzYxOntuOiJCcnRQbGFjZWhvbGRlck5hbWUifSwzNjI6e246IkJydEV4dGVy'@;
put 'blNoZWV0IixmOlM2fSwzNjM6e246IkJydEV4dGVyblRhYmxlU3RhcnQifSwzNjQ6e246IkJydEV4dGVyblRhYmxlRW5kIn0sMzY2OntuOiJCcnRFeHRlcm5Sb3dIZHIifSwzNjc6e246IkJydEV4dGVybkNlbGxCbGFuayJ9LDM2ODp7bjoiQnJ0RXh0ZXJuQ2VsbFJlYWwifSwzNjk6e246IkJy'@;
put 'dEV4dGVybkNlbGxCb29sIn0sMzcwOntuOiJCcnRFeHRlcm5DZWxsRXJyb3IifSwzNzE6e246IkJydEV4dGVybkNlbGxTdHJpbmcifSwzNzI6e246IkJydEJlZ2luRXNtZHgifSwzNzM6e246IkJydEVuZEVzbWR4In0sMzc0OntuOiJCcnRCZWdpbk1keFNldCJ9LDM3NTp7bjoiQnJ0RW5kTWR4'@;
put 'U2V0In0sMzc2OntuOiJCcnRCZWdpbk1keE1iclByb3AifSwzNzc6e246IkJydEVuZE1keE1iclByb3AifSwzNzg6e246IkJydEJlZ2luTWR4S1BJIn0sMzc5OntuOiJCcnRFbmRNZHhLUEkifSwzODA6e246IkJydEJlZ2luRXNzdHIifSwzODE6e246IkJydEVuZEVzc3RyIn0sMzgyOntuOiJC'@;
put 'cnRCZWdpblBSRkl0ZW0ifSwzODM6e246IkJydEVuZFBSRkl0ZW0ifSwzODQ6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEcyJ9LDM4NTp7bjoiQnJ0RW5kUGl2b3RDYWNoZUlEcyJ9LDM4Njp7bjoiQnJ0QmVnaW5QaXZvdENhY2hlSUQifSwzODc6e246IkJydEVuZFBpdm90Q2FjaGVJRCJ9LDM4'@;
put 'ODp7bjoiQnJ0QmVnaW5JU1hWSXMifSwzODk6e246IkJydEVuZElTWFZJcyJ9LDM5MDp7bjoiQnJ0QmVnaW5Db2xJbmZvcyJ9LDM5MTp7bjoiQnJ0RW5kQ29sSW5mb3MifSwzOTI6e246IkJydEJlZ2luUndCcmsifSwzOTM6e246IkJydEVuZFJ3QnJrIn0sMzk0OntuOiJCcnRCZWdpbkNvbEJy'@;
put 'ayJ9LDM5NTp7bjoiQnJ0RW5kQ29sQnJrIn0sMzk2OntuOiJCcnRCcmsifSwzOTc6e246IkJydFVzZXJCb29rVmlldyJ9LDM5ODp7bjoiQnJ0SW5mbyJ9LDM5OTp7bjoiQnJ0Q1VzciJ9LDQwMDp7bjoiQnJ0VXNyIn0sNDAxOntuOiJCcnRCZWdpblVzZXJzIn0sNDAzOntuOiJCcnRFT0YifSw0'@;
put 'MDQ6e246IkJydFVDUiJ9LDQwNTp7bjoiQnJ0UlJJbnNEZWwifSw0MDY6e246IkJydFJSRW5kSW5zRGVsIn0sNDA3OntuOiJCcnRSUk1vdmUifSw0MDg6e246IkJydFJSRW5kTW92ZSJ9LDQwOTp7bjoiQnJ0UlJDaGdDZWxsIn0sNDEwOntuOiJCcnRSUkVuZENoZ0NlbGwifSw0MTE6e246IkJy'@;
put 'dFJSSGVhZGVyIn0sNDEyOntuOiJCcnRSUlVzZXJWaWV3In0sNDEzOntuOiJCcnRSUlJlblNoZWV0In0sNDE0OntuOiJCcnRSUkluc2VydFNoIn0sNDE1OntuOiJCcnRSUkRlZk5hbWUifSw0MTY6e246IkJydFJSTm90ZSJ9LDQxNzp7bjoiQnJ0UlJDb25mbGljdCJ9LDQxODp7bjoiQnJ0UlJU'@;
put 'UVNJRiJ9LDQxOTp7bjoiQnJ0UlJGb3JtYXQifSw0MjA6e246IkJydFJSRW5kRm9ybWF0In0sNDIxOntuOiJCcnRSUkF1dG9GbXQifSw0MjI6e246IkJydEJlZ2luVXNlclNoVmlld3MifSw0MjM6e246IkJydEJlZ2luVXNlclNoVmlldyJ9LDQyNDp7bjoiQnJ0RW5kVXNlclNoVmlldyJ9LDQy'@;
put 'NTp7bjoiQnJ0RW5kVXNlclNoVmlld3MifSw0MjY6e246IkJydEFyckZtbGEiLGY6ZnVuY3Rpb24gaDgoTSxGLE8pe3ZhciBKPU0ubCtGLGllPWJ1KE0pLHBlPU0ucmVhZF9zaGlmdCgxKSx5ZT1baWVdO2lmKHllWzJdPXBlLE8uY2VsbEZvcm11bGEpe3ZhciB2ZT1pdihNLEotTS5sLE8pO3ll'@;
put 'WzFdPXZlfWVsc2UgTS5sPUo7cmV0dXJuIHllfX0sNDI3OntuOiJCcnRTaHJGbWxhIixmOmZ1bmN0aW9uIEZSKE0sRixPKXt2YXIgSj1NLmwrRixwZT1bU2woTSwxNildO2lmKE8uY2VsbEZvcm11bGEpe3ZhciB5ZT1ZSShNLEotTS5sLE8pO3BlWzFdPXllLE0ubD1KfWVsc2UgTS5sPUo7cmV0'@;
put 'dXJuIHBlfX0sNDI4OntuOiJCcnRUYWJsZSJ9LDQyOTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9ucyJ9LDQzMDp7bjoiQnJ0RW5kRXh0Q29ubmVjdGlvbnMifSw0MzE6e246IkJydEJlZ2luUENEQ2FsY01lbXMifSw0MzI6e246IkJydEVuZFBDRENhbGNNZW1zIn0sNDMzOntuOiJCcnRCZWdp'@;
put 'blBDRENhbGNNZW0ifSw0MzQ6e246IkJydEVuZFBDRENhbGNNZW0ifSw0MzU6e246IkJydEJlZ2luUENESEdMZXZlbHMifSw0MzY6e246IkJydEVuZFBDREhHTGV2ZWxzIn0sNDM3OntuOiJCcnRCZWdpblBDREhHTGV2ZWwifSw0Mzg6e246IkJydEVuZFBDREhHTGV2ZWwifSw0Mzk6e246IkJy'@;
put 'dEJlZ2luUENESEdMR3JvdXBzIn0sNDQwOntuOiJCcnRFbmRQQ0RIR0xHcm91cHMifSw0NDE6e246IkJydEJlZ2luUENESEdMR3JvdXAifSw0NDI6e246IkJydEVuZFBDREhHTEdyb3VwIn0sNDQzOntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXJzIn0sNDQ0OntuOiJCcnRFbmRQQ0RIR0xHTWVt'@;
put 'YmVycyJ9LDQ0NTp7bjoiQnJ0QmVnaW5QQ0RIR0xHTWVtYmVyIn0sNDQ2OntuOiJCcnRFbmRQQ0RIR0xHTWVtYmVyIn0sNDQ3OntuOiJCcnRCZWdpblFTSSJ9LDQ0ODp7bjoiQnJ0RW5kUVNJIn0sNDQ5OntuOiJCcnRCZWdpblFTSVIifSw0NTA6e246IkJydEVuZFFTSVIifSw0NTE6e246IkJy'@;
put 'dEJlZ2luRGVsZXRlZE5hbWVzIn0sNDUyOntuOiJCcnRFbmREZWxldGVkTmFtZXMifSw0NTM6e246IkJydEJlZ2luRGVsZXRlZE5hbWUifSw0NTQ6e246IkJydEVuZERlbGV0ZWROYW1lIn0sNDU1OntuOiJCcnRCZWdpblFTSUZzIn0sNDU2OntuOiJCcnRFbmRRU0lGcyJ9LDQ1Nzp7bjoiQnJ0'@;
put 'QmVnaW5RU0lGIn0sNDU4OntuOiJCcnRFbmRRU0lGIn0sNDU5OntuOiJCcnRCZWdpbkF1dG9Tb3J0U2NvcGUifSw0NjA6e246IkJydEVuZEF1dG9Tb3J0U2NvcGUifSw0NjE6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nIn0sNDYyOntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1h'@;
put 'dHRpbmcifSw0NjM6e246IkJydEJlZ2luQ0ZSdWxlIn0sNDY0OntuOiJCcnRFbmRDRlJ1bGUifSw0NjU6e246IkJydEJlZ2luSWNvblNldCJ9LDQ2Njp7bjoiQnJ0RW5kSWNvblNldCJ9LDQ2Nzp7bjoiQnJ0QmVnaW5EYXRhYmFyIn0sNDY4OntuOiJCcnRFbmREYXRhYmFyIn0sNDY5OntuOiJC'@;
put 'cnRCZWdpbkNvbG9yU2NhbGUifSw0NzA6e246IkJydEVuZENvbG9yU2NhbGUifSw0NzE6e246IkJydENGVk8ifSw0NzI6e246IkJydEV4dGVyblZhbHVlTWV0YSJ9LDQ3Mzp7bjoiQnJ0QmVnaW5Db2xvclBhbGV0dGUifSw0NzQ6e246IkJydEVuZENvbG9yUGFsZXR0ZSJ9LDQ3NTp7bjoiQnJ0'@;
put 'SW5kZXhlZENvbG9yIn0sNDc2OntuOiJCcnRNYXJnaW5zIixmOmZ1bmN0aW9uIE5SKE0pe3ZhciBGPXt9O3JldHVybiBEUy5mb3JFYWNoKGZ1bmN0aW9uKE8pe0ZbT109aGEoTSl9KSxGfX0sNDc3OntuOiJCcnRQcmludE9wdGlvbnMifSw0Nzg6e246IkJydFBhZ2VTZXR1cCJ9LDQ3OTp7bjoi'@;
put 'QnJ0QmVnaW5IZWFkZXJGb290ZXIifSw0ODA6e246IkJydEVuZEhlYWRlckZvb3RlciJ9LDQ4MTp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdCJ9LDQ4Mjp7bjoiQnJ0RW5kU1hDcnRGb3JtYXQifSw0ODM6e246IkJydEJlZ2luU1hDcnRGb3JtYXRzIn0sNDg0OntuOiJCcnRFbmRTWENydEZvcm1h'@;
put 'dHMifSw0ODU6e246IkJydFdzRm10SW5mbyIsZjpmdW5jdGlvbiB3UyhNKXt2YXIgRj17fSxPPXt9LEo9e30saWU9TS5yZWFkX3NoaWZ0KDQpLHBlPU0ucmVhZF9zaGlmdCgyKTtKLndjaD1pZTw9NjU1MzY/aWUvMjU2OnBlO3ZhciB5ZT1NLnJlYWRfc2hpZnQoMik7Ty5ocHQ9eWUvMjA7dmFy'@;
put 'IHZlPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gMiZ2ZSYmKE8uaGlkZGVuPSEwKSw0JnZlJiYoRi50b3B0aGljaz0hMCksOCZ2ZSYmKEYuYm90dGhpY2s9ITApLEYucm93b3V0bGluZT1NLnJlYWRfc2hpZnQoMSksRi5jb2xvdXRsaW5lPU0ucmVhZF9zaGlmdCgxKSxONihPKSxGLnJvdz1PLCR1'@;
put 'KEopLEYuY29sPUosRn19LDQ4Njp7bjoiQnJ0QmVnaW5NZ3MifSw0ODc6e246IkJydEVuZE1HcyJ9LDQ4ODp7bjoiQnJ0QmVnaW5NR01hcHMifSw0ODk6e246IkJydEVuZE1HTWFwcyJ9LDQ5MDp7bjoiQnJ0QmVnaW5NRyJ9LDQ5MTp7bjoiQnJ0RW5kTUcifSw0OTI6e246IkJydEJlZ2luTWFw'@;
put 'In0sNDkzOntuOiJCcnRFbmRNYXAifSw0OTQ6e246IkJydEhMaW5rIixmOmZ1bmN0aW9uIFJSKE0sRil7dmFyIE89TS5sK0YsSj1TbChNLDE2KSxpZT1oYyhNKSxwZT16bChNKSx5ZT16bChNKSx2ZT16bChNKTtNLmw9Tzt2YXIgTWU9e3JmeDpKLHJlbElkOmllLGxvYzpwZSxkaXNwbGF5OnZl'@;
put 'fTtyZXR1cm4geWUmJihNZS5Ub29sdGlwPXllKSxNZX19LDQ5NTp7bjoiQnJ0QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFu'@;
put 'In0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNjdCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRh'@;
put 'YmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoi'@;
put 'QnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3Bp'@;
put 'YyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJy'@;
put 'dEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJv'@;
put 'b2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVn'@;
put 'aW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9Mc3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOkQxfSw1NTE6e246IkJydExl'@;
put 'Z2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRX'@;
put 'ZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7'@;
put 'bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRleGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoi'@;
put 'QnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFt'@;
put 'ZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBOYW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRD'@;
put 'ZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0'@;
put 'VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRTbWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNY'@;
put 'RmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoiQnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9'@;
put 'LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJycyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVy'@;
put 'cyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5GbXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHls'@;
put 'ZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2VsbFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRo'@;
put 'b3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoiQnJ0Q29tbWVudEF1dGhvciIsZjpkSX0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIGE0'@;
put 'KE0pe3ZhciBGPXt9O0YuaWF1dGhvcj1NLnJlYWRfc2hpZnQoNCk7dmFyIE89U2woTSwxNik7cmV0dXJuIEYucmZ4PU8ucyxGLnJlZj1EaShPLnMpLE0ubCs9MTYsRn19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6TG19LDYzODp7bjoiQnJ0QmVn'@;
put 'aW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2'@;
put 'ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoiQnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0s'@;
put 'NjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gSFMoTSxGKXtyZXR1cm4gTS5sKz0xMCx7bmFtZTp6bChNKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVn'@;
put 'aW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7'@;
put 'bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2'@;
put 'ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlvbiJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJT'@;
put 'b3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgx'@;
put 'OntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEwMjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAy'@;
put 'OTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNYVHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0s'@;
put 'MTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNYVHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0'@;
put 'In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFya2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEw'@;
put 'NDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246'@;
put 'IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gUHYoTSxGLE8pe3ZhciBKPWZ1bmN0aW9uIGN0KE0sRixPKXt2YXIgSj1NLnJlYWRfc2hpZnQoNCksaWU9e307cmV0dXJuIDEmSiYmKGllLnJlZnM9'@;
put 'ZnVuY3Rpb24gTnQoTSl7Zm9yKHZhciBGPU0ucmVhZF9zaGlmdCg0KSxPPVtdO0YtLSA+MDspTy5wdXNoKF9uKE0pKTtyZXR1cm4gT30oTSkpLDImSiYmKGllLnNxcmVmcz1mdW5jdGlvbiB6cihNKXtmb3IodmFyIEY9TS5yZWFkX3NoaWZ0KDQpLE89W107Ri0tID4wOylPLnB1c2goTGkoTSkp'@;
put 'O3JldHVybiBPfShNKSksNCZKJiYoaWUuZm9ybXVsYXM9ZnVuY3Rpb24gY28oTSxGLE8pe2Zvcih2YXIgSj1NLnJlYWRfc2hpZnQoNCksaWU9W107Si0tID4wOylpZS5wdXNoKE5zKE0sMCxPKSk7cmV0dXJuIGllfShNLDAsTykpLDgmSiYmKGllLnJlbElEPWZ1bmN0aW9uICRmKE0pe3ZhciBG'@;
put 'PU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gMD09PUY/IiI6TS5yZWFkX3NoaWZ0KEYsInV0ZjE2bGUiKX0oTSkpLGllfShNLDAsTyksaWU9TS5yZWFkX3NoaWZ0KDQpLHBlPWhjKE0pLHllPWhjKE0pLHZlPWhjKE0pLE1lPWhjKE0pLGplPShKLmZvcm11bGFzfHxbXSlbMF0sWWU9KEouZm9ybXVs'@;
put 'YXN8fFtdKVsxXSxxZT0xNSZpZSxpdD17dDpBU1txZV0sc3FyZng6Si5zcXJlZnNbMF0sczpbcGUseWUsdmUsTWVdfTtyZXR1cm4gamUmJihpdC5mMT1qZSksWWUmJihpdC5mMj1ZZSksMD09cWV8fDM9PXFlfHw3PT1xZXx8KGl0Lm9wPU92W2llPj4yMCYxNV0pLGl0fX0sMTA1NDp7bjoiQnJ0'@;
put 'QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3BhcmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEw'@;
put 'NjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJCcnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRF'@;
put 'bmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0s'@;
put 'MTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2FjaGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246'@;
put 'IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoiQnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRT'@;
put 'bGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJbXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2Fj'@;
put 'aGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEwOTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdl'@;
put 'cyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0'@;
put 'U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlvbnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0'@;
put 'ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJvdGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNl'@;
put 'ckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENhY2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQi'@;
put 'fSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIxOntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1'@;
put 'OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4OntuOiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxl'@;
put 'U2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1h'@;
put 'dHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENE'@;
put 'Q2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5TbGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHls'@;
put 'ZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENvbmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntu'@;
put 'OiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1'@;
put 'ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwxMTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9'@;
put 'LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxs'@;
put 'SWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJCcnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZp'@;
put 'bHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZpbHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVj'@;
put 'b3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRT'@;
put 'bGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwyMDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246'@;
put 'IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3Mi'@;
put 'fSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxlU2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNs'@;
put 'aWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGltZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQi'@;
put 'fSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5l'@;
put 'c0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVsaW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGlu'@;
put 'ZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVsaW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7'@;
put 'bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzIn0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6'@;
put 'e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4Ontu'@;
put 'OiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9'@;
put 'LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjExNjp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEy'@;
put 'MDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntuOiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEy'@;
put 'Njp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMx'@;
put 'OntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5mb0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24i'@;
put 'fSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGlu'@;
put 'ZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVpZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxj'@;
put 'RmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sRjM9RmUodjQsIm4iKTtGMy5CcnRGUlRBcmNoSUQkPTE2O3ZhciBKMj17Njp7bjoiRm9ybXVsYSIsZjpydn0sMTA6e246IkVPRiIsZjpYMH0sMTI6e246IkNhbGNDb3VudCIsZjpKYX0sMTM6e246IkNhbGNNb2RlIixmOkphfSwxNDp7bjoiQ2FsY1By'@;
put 'ZWNpc2lvbiIsZjpSaX0sMTU6e246IkNhbGNSZWZNb2RlIixmOlJpfSwxNjp7bjoiQ2FsY0RlbHRhIixmOmhhfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6Uml9LDE4OntuOiJQcm90ZWN0IixmOlJpfSwxOTp7bjoiUGFzc3dvcmQiLGY6SmF9LDIwOntuOiJIZWFkZXIiLGY6SU19LDIxOntuOiJGb290'@;
put 'ZXIiLGY6SU19LDIzOntuOiJFeHRlcm5TaGVldCIsZjpTNn0sMjQ6e246IkxibCIsZjpvX30sMjU6e246IldpblByb3RlY3QiLGY6Uml9LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBSTShN'@;
put 'LEYsTyl7cmV0dXJuIGZ1bmN0aW9uIEdvKE0sRixPKXtpZighKE8uYmlmZjw4KSl7dmFyIEo9TS5yZWFkX3NoaWZ0KDIpLGllPU0ucmVhZF9zaGlmdCgyKSxwZT1NLnJlYWRfc2hpZnQoMikseWU9TS5yZWFkX3NoaWZ0KDIpLHZlPXd1KE0sMCxPKTtyZXR1cm4gTy5iaWZmPDgmJk0ucmVhZF9z'@;
put 'aGlmdCgxKSxbe3I6SixjOmllfSx2ZSx5ZSxwZV19fShNLDAsTyl9fSwyOTp7bjoiU2VsZWN0aW9uIixmOmZ1bmN0aW9uIFJoKE0sRixPKXtyZXR1cm4gTyYmTy5iaWZmPDU/KE0ubCs9Rix7Y2VsbDp7cjowLGM6MH19KTooTS5yZWFkX3NoaWZ0KDEpLHtjZWxsOkRpKHtyOk0ucmVhZF9zaGlm'@;
put 'dCgyKSxjOk0ucmVhZF9zaGlmdCgyKX0pfSl9fSwzNDp7bjoiRGF0ZTE5MDQiLGY6Uml9LDM1OntuOiJFeHRlcm5OYW1lIixmOmlffSwzODp7bjoiTGVmdE1hcmdpbiIsZjpoYX0sMzk6e246IlJpZ2h0TWFyZ2luIixmOmhhfSw0MDp7bjoiVG9wTWFyZ2luIixmOmhhfSw0MTp7bjoiQm90dG9t'@;
put 'TWFyZ2luIixmOmhhfSw0Mjp7bjoiUHJpbnRSb3dDb2wiLGY6Uml9LDQzOntuOiJQcmludEdyaWQiLGY6Uml9LDQ3OntuOiJGaWxlUGFzcyIsZjpmdW5jdGlvbiB5XyhNLEYsTyl7aWYoTy5lbmMpcmV0dXJuIE8uZW5jO3ZhciBKPXtUeXBlOk8uYmlmZj49OD9NLnJlYWRfc2hpZnQoMik6MH07'@;
put 'cmV0dXJuIEouVHlwZT9mdW5jdGlvbiBQNihNLEYsTyxKKXt2YXIgaWU9Snx8e307aWYoaWUuSW5mbz1NLnJlYWRfc2hpZnQoMiksTS5sLT0yLDE9PT1pZS5JbmZvKXtpZihpZS5EYXRhPWZ1bmN0aW9uIFBaKE0pe3ZhciBGPXt9LE89Ri5FbmNyeXB0aW9uVmVyc2lvbkluZm89YjAoTSw0KTtp'@;
put 'ZigxIT1PLk1ham9yfHwxIT1PLk1pbm9yKXRocm93InVucmVjb2duaXplZCB2ZXJzaW9uIGNvZGUgIitPLk1ham9yKyIgOiAiK08uTWlub3I7cmV0dXJuIEYuU2FsdD1NLnJlYWRfc2hpZnQoMTYpLEYuRW5jcnlwdGVkVmVyaWZpZXI9TS5yZWFkX3NoaWZ0KDE2KSxGLkVuY3J5cHRlZFZlcmlm'@;
put 'aWVySGFzaD1NLnJlYWRfc2hpZnQoMTYpLEZ9KE0pLE8ucGFzc3dvcmQmJnR5cGVvZiBNMDwidSIpe3ZhciBwZT1NMChPLnBhc3N3b3JkLGllLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSx5ZT1sZShpZS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVyK2llLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXJIYXNo'@;
put 'LCJoZXgiKSx2ZT1NZC5yYzQobGUocGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSx5ZSk7Si52YWxpZD1NZC5tZDUodmUuc2xpY2UoMCwxNikpPT1CdWZmZXIuZnJvbSh2ZS5zbGljZSgxNikpLnRvU3RyaW5nKCJoZXgiKSxpZS5EYXRhLktleT1wZSxKLmluc2l0dT1mdW5jdGlvbiBGNShN'@;
put 'LEYpe3ZhciBPPW5ldyBBcnJheSgyNTYpLEo9MCxpZT0wLHBlPTAseWU9MDtmdW5jdGlvbiB2ZShpdCl7Zm9yKEo9MCxpZT0wLHBlPTAseWU9MCxpZT0wOzI1NiE9aWU7KytpZSlPW2llXT1pZTtmb3IocGU9MCxpZT0wOzI1NiE9aWU7KytpZSl7dHJ5e3BlPXBlK09baWVdK2l0W2llJWl0Lmxl'@;
put 'bmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2goaHQpe3Rocm93IGNvbnNvbGUubG9nKGllLGl0W2llJWl0Lmxlbmd0aF0pLGh0fXllPU9baWVdLE9baWVdPU9bcGVdLE9bcGVdPXllfWllPXBlPTB9ZnVuY3Rpb24gTWUoaXQpe3ZhciBodD1HKGl0Lmxlbmd0aCk7Zm9yKEo9MDtKIT1pdC5s'@;
put 'ZW5ndGg7KytKKXllPU9baWU9aWUrMSYyNTVdLE9baWVdPU9bcGU9KHBlK09baWVdKSUyNTZdLE9bcGVdPXllLGh0W0pdPWl0W0pdXk9bT1tpZV0rT1twZV0mMjU1XTtyZXR1cm4gQnVmZmVyLmZyb20oaHQpfXZhciBqZT1NLktleSxZZT0wO3ZlKGxlKGplLCJoZXgiKS50b1N0cmluZygiYmlu'@;
put 'YXJ5IikpO3ZhciBxZT0wO3JldHVybiBmdW5jdGlvbihpdCl7aWYocWUraXQubGVuZ3RoPDEwMjQpcmV0dXJuIHFlKz1pdC5sZW5ndGgsTWUoaXQpO3ZhciB1dD0wLHZ0PWxlKGl0LnNsaWNlKHV0LHV0KyhrdD0xMDI0LXFlKSkpO3V0Kz1rdCxxZT0wO3ZhciBQdD1NZSh2dCk7Zm9yKHV0PT1p'@;
put 'dC5sZW5ndGgmJigrK1llLGplPU0wKEYsTS5TYWx0LFQ4KFllKSksdmUobGUoamUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSkpO3V0PGl0Lmxlbmd0aDspeysrWWUsamU9TTAoRixNLlNhbHQsVDgoWWUpKSx2ZShCdWZmZXIuZnJvbShqZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKTt2'@;
put 'YXIga3Q9TWF0aC5taW4oMTAyNCxpdC5sZW5ndGgtdXQpO3Z0PWxlKGl0LnNsaWNlKHV0LHV0K2t0KSksdXQrPWt0LHFlPWt0LFB0PUJ1ZmZlci5jb25jYXQoW1B0LE1lKHZ0KV0pfXJldHVybiBQdH19KGllLkRhdGEsTy5wYXNzd29yZCl9fWVsc2UgaWYoaWUuRGF0YT1mdW5jdGlvbiBSNihN'@;
put 'LEYpe3ZhciBPPXt9LEo9Ty5FbmNyeXB0aW9uVmVyc2lvbkluZm89YjAoTSw0KTtpZihGLT00LDIhPUouTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK0ouTWlub3IpO2lmKEouTWFqb3I+NHx8Si5NYWpvcjwyKXRocm93IG5ldyBFcnJv'@;
put 'cigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitKLk1ham9yKTtPLkZsYWdzPU0ucmVhZF9zaGlmdCg0KSxGLT00O3ZhciBpZT1NLnJlYWRfc2hpZnQoNCk7cmV0dXJuIEYtPTQsTy5FbmNyeXB0aW9uSGVhZGVyPXdMKE0saWUpLE8uRW5jcnlwdGlvblZlcmlmaWVyPUk2KE0s'@;
put 'Ri09aWUpLE99KE0sRiksaWUuRGF0YSYmaWUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyJiYyNjYyNT09PWllLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmTy5wYXNzd29yZCYmdHlwZW9mIHBsPCJ1Iil7dmFyIE1lPXBsKE8ucGFzc3dvcmQsaWUuRGF0YS5FbmNyeXB0aW9uVmVyaWZpZXIu'@;
put 'U2FsdC50b1N0cmluZygiaGV4IiksIjAwMDAwMDAwIiksamU9aWUuRGF0YS5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zOzU9PWplfHxqZTxNZS5sZW5ndGgmJihNZT1NZS5zbGljZSgwLGplKSk7dmFyIFllPWxlKGllLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3Ry'@;
put 'aW5nKCJoZXgiKStpZS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5WZXJpZmllckhhc2gudG9TdHJpbmcoImhleCIpLCJoZXgiKSxxZT1NZC5yYzQoTWUudG9TdHJpbmcoImJpbmFyeSIpLFllKTtKLnZhbGlkPW1hKHFlLnNsaWNlKDAsamUpLCJTSEExIikudG9TdHJpbmcoImhleCIpPT1xZS5z'@;
put 'bGljZShqZSkudG9TdHJpbmcoImhleCIpLGllLkRhdGEuS2V5PU1lLEoudmFsaWQmJihKLmluc2l0dT1mdW5jdGlvbiBIMyhNLEYpe3ZhciBPPW5ldyBBcnJheSgyNTYpLEo9MCxpZT0wLHBlPTAseWU9MCx2ZT1NLkVuY3J5cHRpb25IZWFkZXIuS2V5U2l6ZT4+PjM7ZnVuY3Rpb24gTWUoaHQp'@;
put 'e2ZvcihodD1CdWZmZXIuZnJvbShodC5zbGljZSgwLHZlKSksSj0wLGllPTAscGU9MCx5ZT0wLGllPTA7MjU2IT1pZTsrK2llKU9baWVdPWllO2ZvcihwZT0wLGllPTA7MjU2IT1pZTsrK2llKXt2YXIga3Q9aHRbaWUlaHQubGVuZ3RoXTtwZT1wZStPW2llXSsoInN0cmluZyI9PXR5cGVvZiBr'@;
put 'dD9rdC5jaGFyQ29kZUF0KDApOmt0KSYyNTUseWU9T1tpZV0sT1tpZV09T1twZV0sT1twZV09eWV9aWU9cGU9MH1mdW5jdGlvbiBqZShodCl7dmFyIGt0PUcoaHQubGVuZ3RoKTtmb3IoSj0wO0ohPWh0Lmxlbmd0aDsrK0opeWU9T1tpZT1pZSsxJjI1NV0sT1tpZV09T1twZT0ocGUrT1tpZV0p'@;
put 'JTI1Nl0sT1twZV09eWUsa3RbSl09aHRbSl1eT1tPW2llXStPW3BlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShrdCl9dmFyIFllPU0uS2V5LHFlPTA7TWUobGUoWWUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIGl0PTA7cmV0dXJuIGZ1bmN0aW9uKGh0KXtpZihpdCtodC5sZW5n'@;
put 'dGg8MTAyNClyZXR1cm4gaXQrPWh0Lmxlbmd0aCxqZShodCk7dmFyIHV0PTEwMjQtaXQsdnQ9MCxQdD1CdWZmZXIuZnJvbShodC5zbGljZSh2dCx2dCt1dCkpO3Z0Kz11dCxpdD0wO3ZhciBEdD1qZShQdCk7Zm9yKHZ0PT1odC5sZW5ndGgmJigrK3FlLFllPXBsKEYsTS5FbmNyeXB0aW9uVmVy'@;
put 'aWZpZXIuU2FsdCxUOChxZSkpLE1lKEJ1ZmZlci5mcm9tKFllLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTt2dDxodC5sZW5ndGg7KSsrcWUsWWU9cGwoRixNLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LFQ4KHFlKSksTWUoQnVmZmVyLmZyb20oWWUsImhleCIpLnRvU3RyaW5nKCJiaW5h'@;
put 'cnkiKSksdXQ9TWF0aC5taW4oMTAyNCxodC5sZW5ndGgtdnQpLFB0PUJ1ZmZlci5mcm9tKGh0LnNsaWNlKHZ0LHZ0K3V0KSksdnQrPXV0LHV0PDEwMjQmJihpdD11dCksRHQ9QnVmZmVyLmNvbmNhdChbRHQsamUoUHQpXSk7cmV0dXJuIER0fX0oaWUuRGF0YSxPLnBhc3N3b3JkKSl9cmV0dXJu'@;
put 'IGllfShNLEYtMixPLEopOmZ1bmN0aW9uIFNMKE0sRixPLEope3ZhciBpZT17a2V5OkphKE0pLHZlcmlmaWNhdGlvbkJ5dGVzOkphKE0pfTtPLnBhc3N3b3JkJiYoaWUudmVyaWZpZXI9TzYoTy5wYXNzd29yZCkpLEoudmFsaWQ9aWUudmVyaWZpY2F0aW9uQnl0ZXM9PT1pZS52ZXJpZmllcixK'@;
put 'LnZhbGlkJiYoSi5pbnNpdHU9ZnVuY3Rpb24oTSxGKXt2YXIgTz1GfHwwLEo9dl8oTSk7cmV0dXJuIGZ1bmN0aW9uKGllKXt2YXIgcGU9ZnVuY3Rpb24oTSxGLE8sSixpZSl7dmFyIHBlLHllO2ZvcihpZXx8KGllPUYpLEp8fChKPXZfKCIiKSkscGU9MDtwZSE9Ri5sZW5ndGg7KytwZSl5ZT0y'@;
put 'NTUmKCh5ZT1GW3BlXSk+PjV8eWU8PDMpLGllW3BlXT15ZV49SltPXSxPPU8rMSYxNTtyZXR1cm5baWUsTyxKXX0oMCxpZSxPLEopO3JldHVybiBPPXBlWzFdLHBlWzBdfX0oTy5wYXNzd29yZCwwKSl9KE0sMCxPLEopLEp9fSw0OTp7bjoiRm9udCIsZjpmdW5jdGlvbiBFTShNLEYsTyl7dmFy'@;
put 'IEo9e3N6Ok0ucmVhZF9zaGlmdCgyKS8yMH0saWU9SW0oTSk7aWUuZkJvbGQmJihKLmJvbGQ9MSksaWUuZkl0YWxpYyYmKEouaXRhbGljPTEpLGllLmZVbmRlcmxpbmUmJihKLnVuZGVybGluZT0xKSxpZS5mQ29uZGVuc2UmJihKLmNvbmRlbnNlPTEpLGllLmZFeHRlbmQmJihKLmV4dGVuZD0x'@;
put 'KSxpZS5mU2hhZG93JiYoSi5zaGFkb3c9MSksaWUuZk91dGxpbmUmJihKLm91dGxpbmU9MSksaWUuZlN0cmlrZW91dCYmKEouc3RyaWtlPTEpO3ZhciBwZT1PJiZPLmJpZmZ8fDg7aWYoMiE9cGUmJihKLmljdj1NLnJlYWRfc2hpZnQoMiksMyE9cGUmJjQhPXBlKSl7c3dpdGNoKDcwMD09PU0u'@;
put 'cmVhZF9zaGlmdCgyKSYmKEouYm9sZD0xKSxNLnJlYWRfc2hpZnQoMikpe2Nhc2UgMTpKLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2UgMjpKLnZhbGlnbj0ic3ViIn12YXIgdmU9TS5yZWFkX3NoaWZ0KDEpOzAhPXZlJiYoSi51bmRlcmxpbmU9dmUpO3ZhciBNZT1NLnJlYWRfc2hpZnQoMSk7'@;
put 'TWU+MCYmKEouZmFtaWx5PU1lKTt2YXIgamU9TS5yZWFkX3NoaWZ0KDEpO2plPjAmJihKLmNoYXJzZXQ9amUpLE0ubCs9MX1yZXR1cm4gSi5uYW1lPXBvKE0sMCxPKSxKfX0sNTE6e246IlByaW50U2l6ZSIsZjpKYX0sNjA6e246IkNvbnRpbnVlIn0sNjE6e246IldpbmRvdzEiLGY6ZnVuY3Rp'@;
put 'b24gVFooTSl7cmV0dXJue1BvczpbTS5yZWFkX3NoaWZ0KDIpLE0ucmVhZF9zaGlmdCgyKV0sRGltOltNLnJlYWRfc2hpZnQoMiksTS5yZWFkX3NoaWZ0KDIpXSxGbGFnczpNLnJlYWRfc2hpZnQoMiksQ3VyVGFiOk0ucmVhZF9zaGlmdCgyKSxGaXJzdFRhYjpNLnJlYWRfc2hpZnQoMiksU2Vs'@;
put 'ZWN0ZWQ6TS5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOk0ucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOlJpfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBrTShNLEYsTyl7aWYoTyYmTy5iaWZmPDUpcmV0dXJue307dmFyIEo9e307cmV0dXJuIEoueD1NLnJlYWRfc2hpZnQoMiks'@;
put 'Si55PU0ucmVhZF9zaGlmdCgyKSxKLnJ3VG9wPU0ucmVhZF9zaGlmdCgyKSxKLmNvbExlZnQ9TS5yZWFkX3NoaWZ0KDIpLEoucG5uQWNjdD1NLnJlYWRfc2hpZnQoMSksTS5yZWFkX3NoaWZ0KDEpLEp9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6SmF9LDc3OntuOiJQbHMiLGY6RnN9LDgwOntuOiJE'@;
put 'Q29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6SmF9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0aW9uIEdtKE0sRixPKXtpZihPLmVuYyly'@;
put 'ZXR1cm4gTS5sKz1GLCIiO3ZhciBKPU0ubCxpZT13dShNLDAsTyk7cmV0dXJuIE0ucmVhZF9zaGlmdChGK0otTS5sKSxpZX19LDkzOntuOiJPYmoiLGY6ZnVuY3Rpb24gdEwoTSxGLE8pe2lmKE8mJk8uYmlmZjw4KXJldHVybiBmdW5jdGlvbiBQTShNLEYsTyl7TS5sKz00O3ZhciBKPU0ucmVh'@;
put 'ZF9zaGlmdCgyKSxpZT1NLnJlYWRfc2hpZnQoMikscGU9TS5yZWFkX3NoaWZ0KDIpO00ubCs9MixNLmwrPTIsTS5sKz0yLE0ubCs9MixNLmwrPTIsTS5sKz0yLE0ubCs9MixNLmwrPTIsTS5sKz0yLE0ubCs9Njt2YXIgeWU9W107cmV0dXJuIHllLnB1c2goKE9NW0pdfHxGcykoTSxGLT0zNixP'@;
put 'KSkse2NtbzpbaWUsSixwZV0sZnQ6eWV9fShNLEYsTyk7dmFyIEo9TjIoTSksaWU9ZnVuY3Rpb24gZmwoTSxGLE8pe2Zvcih2YXIgSj1NLmwrRixpZT1bXTtNLmw8Sjspe3ZhciBwZT1NLnJlYWRfc2hpZnQoMik7TS5sLT0yO3RyeXtpZVtwZV09WTFbcGVdKE0sSi1NLmwpfWNhdGNoe3JldHVy'@;
put 'biBNLmw9SixpZX19cmV0dXJuIE0ubCE9SiYmKE0ubD1KKSxpZX0oTSxGLTIyKTtyZXR1cm57Y21vOkosZnQ6aWV9fX0sOTQ6e246IlVuY2FsY2VkIn0sOTU6e246IkNhbGNTYXZlUmVjYWxjIixmOlJpfSw5Njp7bjoiVGVtcGxhdGUifSw5Nzp7bjoiSW50bCJ9LDk5OntuOiJPYmpQcm90ZWN0'@;
put 'IixmOlJpfSwxMjU6e246IkNvbEluZm8iLGY6YV99LDEyODp7bjoiR3V0cyIsZjpmdW5jdGlvbiBYQShNKXtNLmwrPTQ7dmFyIEY9W00ucmVhZF9zaGlmdCgyKSxNLnJlYWRfc2hpZnQoMildO2lmKDAhPT1GWzBdJiZGWzBdLS0sMCE9PUZbMV0mJkZbMV0tLSxGWzBdPjd8fEZbMV0+Nyl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIkJhZCBHdXR0ZXJzOiAiK0Yuam9pbigifCIpKTtyZXR1cm4gRn19LDEyOTp7bjoiV3NCb29sIixmOmZ1bmN0aW9uIHpwKE0sRixPKXt2YXIgSj1PJiY4PT1PLmJpZmZ8fDI9PUY/TS5yZWFkX3NoaWZ0KDIpOihNLmwrPUYsMCk7cmV0dXJue2ZEaWFsb2c6MTYmSixmQmVs'@;
put 'b3c6NjQmSixmUmlnaHQ6MTI4Jkp9fX0sMTMwOntuOiJHcmlkU2V0IixmOkphfSwxMzE6e246IkhDZW50ZXIiLGY6Uml9LDEzMjp7bjoiVkNlbnRlciIsZjpSaX0sMTMzOntuOiJCb3VuZFNoZWV0OCIsZjpmdW5jdGlvbiBJaChNLEYsTyl7dmFyIEo9TS5yZWFkX3NoaWZ0KDQpLGllPTMmTS5y'@;
put 'ZWFkX3NoaWZ0KDEpLHBlPU0ucmVhZF9zaGlmdCgxKTtzd2l0Y2gocGUpe2Nhc2UgMDpwZT0iV29ya3NoZWV0IjticmVhaztjYXNlIDE6cGU9Ik1hY3Jvc2hlZXQiO2JyZWFrO2Nhc2UgMjpwZT0iQ2hhcnRzaGVldCI7YnJlYWs7Y2FzZSA2OnBlPSJWQkFNb2R1bGUifXZhciB5ZT1wbyhNLDAs'@;
put 'Tyk7cmV0dXJuIDA9PT15ZS5sZW5ndGgmJih5ZT0iU2hlZXQxIikse3BvczpKLGhzOmllLGR0OnBlLG5hbWU6eWV9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gc0woTSl7dmFyIE8sRj1bMCwwXTtyZXR1cm4gTz1NLnJlYWRfc2hpZnQoMiks'@;
put 'RlswXT1RZltPXXx8TyxPPU0ucmVhZF9zaGlmdCgyKSxGWzFdPVFmW09dfHxPLEZ9fSwxNDE6e246IkhpZGVPYmoiLGY6SmF9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiBTdChNKXtmb3IodmFyIEY9TS5yZWFkX3NoaWZ0KDIpLE89W107Ri0tID4wOylPLnB1'@;
put 'c2goR3UoTSkpO3JldHVybiBPfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6SmF9LDE1Nzp7bjoiQXV0b0ZpbHRlcklu'@;
put 'Zm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjpGTX0sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBMZChNLEYpe3ZhciBPPXt9O3JldHVybiBGPDMyfHwoTS5sKz0xNixPLmhlYWRlcj1oYShNKSxPLmZvb3Rlcj1oYShNKSxNLmwrPTIpLE99fSwxNzQ6e246IlNjZW5N'@;
put 'YW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1lIn0sMTg5OntuOiJN'@;
put 'dWxSayIsZjpmdW5jdGlvbiBLQShNLEYpe2Zvcih2YXIgTz1NLmwrRi0yLEo9TS5yZWFkX3NoaWZ0KDIpLGllPU0ucmVhZF9zaGlmdCgyKSxwZT1bXTtNLmw8TzspcGUucHVzaCh6byhNKSk7aWYoTS5sIT09Tyl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIHJlYWQgZXJyb3IiKTt2YXIgeWU9TS5y'@;
put 'ZWFkX3NoaWZ0KDIpO2lmKHBlLmxlbmd0aCE9eWUtaWUrMSl0aHJvdyBuZXcgRXJyb3IoIk11bFJLIGxlbmd0aCBtaXNtYXRjaCIpO3JldHVybntyOkosYzppZSxDOnllLHJrcmVjOnBlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gTFooTSxGKXtmb3IodmFyIE89TS5sK0YtMixK'@;
put 'PU0ucmVhZF9zaGlmdCgyKSxpZT1NLnJlYWRfc2hpZnQoMikscGU9W107TS5sPE87KXBlLnB1c2goTS5yZWFkX3NoaWZ0KDIpKTtpZihNLmwhPT1PKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciB5ZT1NLnJlYWRfc2hpZnQoMik7aWYocGUubGVuZ3RoIT15ZS1p'@;
put 'ZSsxKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgbGVuZ3RoIG1pc21hdGNoIik7cmV0dXJue3I6SixjOmllLEM6eWUsaXhmZTpwZX19fSwxOTM6e246Ik1tcyIsZjpYMH0sMTk3OntuOiJTWERJIn0sMTk4OntuOiJTWERCIn0sMTk5OntuOiJTWEZEQiJ9LDIwMDp7bjoiU1hEQkIifSwyMDE6'@;
put 'e246IlNYTnVtIn0sMjAyOntuOiJTeEJvb2wiLGY6Uml9LDIwMzp7bjoiU3hFcnIifSwyMDQ6e246IlNYSW50In0sMjA1OntuOiJTWFN0cmluZyJ9LDIwNjp7bjoiU1hEdHIifSwyMDc6e246IlN4TmlsIn0sMjA4OntuOiJTWFRibCJ9LDIwOTp7bjoiU1hUQlJHSUlUTSJ9LDIxMDp7bjoiU3hU'@;
put 'YnBnIn0sMjExOntuOiJPYlByb2oifSwyMTM6e246IlNYU3RyZWFtSUQifSwyMTU6e246IkRCQ2VsbCJ9LDIxNjp7bjoiU1hSbmcifSwyMTc6e246IlN4SXN4b3BlciJ9LDIxODp7bjoiQm9va0Jvb2wiLGY6SmF9LDIyMDp7bjoiRGJPclBhcmFtUXJ5In0sMjIxOntuOiJTY2VuYXJpb1Byb3Rl'@;
put 'Y3QiLGY6Uml9LDIyMjp7bjoiT2xlT2JqZWN0U2l6ZSJ9LDIyNDp7bjoiWEYiLGY6ZnVuY3Rpb24gbl8oTSxGLE8pe3ZhciBKPXt9O3JldHVybiBKLmlmbnQ9TS5yZWFkX3NoaWZ0KDIpLEoubnVtRm10SWQ9TS5yZWFkX3NoaWZ0KDIpLEouZmxhZ3M9TS5yZWFkX3NoaWZ0KDIpLEouZlN0eWxl'@;
put 'PUouZmxhZ3M+PjImMSxKLmRhdGE9ZnVuY3Rpb24geGEoTSxGLE8sSil7dmFyIGllPXt9LHBlPU0ucmVhZF9zaGlmdCg0KSx5ZT1NLnJlYWRfc2hpZnQoNCksdmU9TS5yZWFkX3NoaWZ0KDQpLE1lPU0ucmVhZF9zaGlmdCgyKTtpZihpZS5wYXR0ZXJuVHlwZT1McFt2ZT4+MjZdLCFKLmNlbGxT'@;
put 'dHlsZXMpcmV0dXJuIGllO3ZhciBqZT03JnBlO3N3aXRjaChqZSl7Y2FzZSAxOmllLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOmllLmhhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDM6aWUuaGFsaWduPSJyaWdodCJ9c3dpdGNoKGllLmZXcmFwPXBlPj4zJjEsamU9cGU+PjQmNyl7Y2Fz'@;
put 'ZSAwOmllLnZhbGlnbj0idG9wIjticmVhaztjYXNlIDE6aWUudmFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMjppZS52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIGllLmZKdXN0TGFzdD1wZT4+NyYxLGllLnRyb3Q9cGU+PjgmMjU1LGllLmNJbmRlbnQ9cGU+PjE2JjE1LGllLmZTaHJpbmtUb0Zp'@;
put 'dD1wZT4+MjAmMSxpZS5pUmVhZE9yZGVyPXBlPj4yMiYyLGllLmZBdHJOdW09cGU+PjI2JjEsaWUuZkF0ckZudD1wZT4+MjcmMSxpZS5mQXRyQWxjPXBlPj4yOCYxLGllLmZBdHJCZHI9cGU+PjI5JjEsaWUuZkF0clBhdD1wZT4+MzAmMSxpZS5mQXRyUHJvdD1wZT4+MzEmMSxpZS5kZ0xlZnQ9'@;
put 'MTUmeWUsaWUuZGdSaWdodD15ZT4+NCYxNSxpZS5kZ1RvcD15ZT4+OCYxNSxpZS5kZ0JvdHRvbT15ZT4+MTImMTUsaWUuaWN2TGVmdD15ZT4+MTYmMTI3LGllLmljdlJpZ2h0PXllPj4yMyYxMjcsaWUuZ3JiaXREaWFnPXllPj4zMCYzLGllLmljdlRvcD0xMjcmdmUsaWUuaWN2Qm90dG9tPXZl'@;
put 'Pj43JjEyNyxpZS5pY3ZEaWFnPXZlPj4xNCYxMjcsaWUuZGdEaWFnPXZlPj4yMSYxNSxpZS5pY3ZGb3JlPTEyNyZNZSxpZS5pY3ZCYWNrPU1lPj43JjEyNyxpZS5mc3hCdXR0b249TWU+PjE0JjEsaWV9KE0sMCwwLE8pLEp9fSwyMjU6e246IkludGVyZmFjZUhkciIsZjpmdW5jdGlvbiBXbShN'@;
put 'LEYpe3JldHVybiAwPT09Rnx8TS5yZWFkX3NoaWZ0KDIpLDEyMDB9fSwyMjY6e246IkludGVyZmFjZUVuZCIsZjpYMH0sMjI3OntuOiJTWFZTIn0sMjI5OntuOiJNZXJnZUNlbGxzIixmOmZ1bmN0aW9uIElaKE0sRil7Zm9yKHZhciBPPVtdLEo9TS5yZWFkX3NoaWZ0KDIpO0otLTspTy5wdXNo'@;
put 'KGUxKE0pKTtyZXR1cm4gT319LDIzMzp7bjoiQmtIaW0ifSwyMzU6e246Ik1zb0RyYXdpbmdHcm91cCJ9LDIzNjp7bjoiTXNvRHJhd2luZyJ9LDIzNzp7bjoiTXNvRHJhd2luZ1NlbGVjdGlvbiJ9LDIzOTp7bjoiUGhvbmV0aWNJbmZvIn0sMjQwOntuOiJTeFJ1bGUifSwyNDE6e246IlNYRXgi'@;
put 'fSwyNDI6e246IlN4RmlsdCJ9LDI0NDp7bjoiU3hEWEYifSwyNDU6e246IlN4SXRtIn0sMjQ2OntuOiJTeE5hbWUifSwyNDc6e246IlN4U2VsZWN0In0sMjQ4OntuOiJTWFBhaXIifSwyNDk6e246IlN4Rm1sYSJ9LDI1MTp7bjoiU3hGb3JtYXQifSwyNTI6e246IlNTVCIsZjpmdW5jdGlvbiBU'@;
put 'ZChNLEYpe2Zvcih2YXIgTz1NLmwrRixKPU0ucmVhZF9zaGlmdCg0KSxpZT1NLnJlYWRfc2hpZnQoNCkscGU9W10seWU9MDt5ZSE9aWUmJk0ubDxPOysreWUpcGUucHVzaChRYShNKSk7cmV0dXJuIHBlLkNvdW50PUoscGUuVW5pcXVlPWllLHBlfX0sMjUzOntuOiJMYWJlbFNzdCIsZjpmdW5j'@;
put 'dGlvbiBHQShNKXt2YXIgRj1QYyhNKTtyZXR1cm4gRi5pc3N0PU0ucmVhZF9zaGlmdCg0KSxGfX0sMjU1OntuOiJFeHRTU1QiLGY6ZnVuY3Rpb24gb2UoTSxGKXt2YXIgTz17fTtyZXR1cm4gTy5kc3N0PU0ucmVhZF9zaGlmdCgyKSxNLmwrPUYtMixPfX0sMjU2OntuOiJTWFZERXgifSwyNTk6'@;
put 'e246IlNYRm9ybXVsYSJ9LDI5MDp7bjoiU1hEQkV4In0sMzExOntuOiJSUkRJbnNEZWwifSwzMTI6e246IlJSREhlYWQifSwzMTU6e246IlJSRENoZ0NlbGwifSwzMTc6e246IlJSVGFiSWQiLGY6RWh9LDMxODp7bjoiUlJEUmVuU2hlZXQifSwzMTk6e246IlJSU29ydCJ9LDMyMDp7bjoiUlJE'@;
put 'TW92ZSJ9LDMzMDp7bjoiUlJGb3JtYXQifSwzMzE6e246IlJSQXV0b0ZtdCJ9LDMzMzp7bjoiUlJJbnNlcnRTaCJ9LDMzNDp7bjoiUlJETW92ZUJlZ2luIn0sMzM1OntuOiJSUkRNb3ZlRW5kIn0sMzM2OntuOiJSUkRJbnNEZWxCZWdpbiJ9LDMzNzp7bjoiUlJESW5zRGVsRW5kIn0sMzM4Ontu'@;
put 'OiJSUkRDb25mbGljdCJ9LDMzOTp7bjoiUlJERGVmTmFtZSJ9LDM0MDp7bjoiUlJEUnN0RXR4cCJ9LDM1MTp7bjoiTFJuZyJ9LDM1Mjp7bjoiVXNlc0VMRnMiLGY6Uml9LDM1Mzp7bjoiRFNGIixmOlgwfSw0MDE6e246IkNVc3IifSw0MDI6e246IkNiVXNyIn0sNDAzOntuOiJVc3JJbmZvIn0s'@;
put 'NDA0OntuOiJVc3JFeGNsIn0sNDA1OntuOiJGaWxlTG9jayJ9LDQwNjp7bjoiUlJESW5mbyJ9LDQwNzp7bjoiQkNVc3JzIn0sNDA4OntuOiJVc3JDaGsifSw0MjU6e246IlVzZXJCVmlldyJ9LDQyNjp7bjoiVXNlclNWaWV3QmVnaW4ifSw0Mjc6e246IlVzZXJTVmlld0VuZCJ9LDQyODp7bjoi'@;
put 'UlJEVXNlclZpZXcifSw0Mjk6e246IlFzaSJ9LDQzMDp7bjoiU3VwQm9vayIsZjpmdW5jdGlvbiBBZChNLEYsTyl7dmFyIEo9TS5sK0YsaWU9TS5yZWFkX3NoaWZ0KDIpLHBlPU0ucmVhZF9zaGlmdCgyKTtpZihPLnNiY2NoPXBlLDEwMjU9PXBlfHwxNDg0OT09cGUpcmV0dXJuW3BlLGllXTtp'@;
put 'ZihwZTwxfHxwZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIitwZSk7Zm9yKHZhciB5ZT1qYShNLHBlKSx2ZT1bXTtKPk0ubDspdmUucHVzaChrbChNKSk7cmV0dXJuW3BlLGllLHllLHZlXX19LDQzMTp7bjoiUHJvdDRSZXYiLGY6Uml9LDQzMjp7bjoi'@;
put 'Q29uZEZtdCJ9LDQzMzp7bjoiQ0YifSw0MzQ6e246IkRWYWwifSw0Mzc6e246IkRDb25CaW4ifSw0Mzg6e246IlR4TyIsZjpmdW5jdGlvbiBacChNLEYsTyl7dmFyIEo9TS5sLGllPSIiLHBlPS0xO3RyeXtNLmwrPTQsLTE9PVswLDUsNywxMSwxMiwxNF0uaW5kZXhPZigoTy5sYXN0b2JqfHx7'@;
put 'Y21vOlswLDBdfSkuY21vWzFdKT9NLmwrPTY6ZnVuY3Rpb24gaGwoTSl7dmFyIEY9TS5yZWFkX3NoaWZ0KDEpO00ubCsrO3ZhciBPPU0ucmVhZF9zaGlmdCgyKTtNLmwrPTJ9KE0pO3ZhciBNZT1NLnJlYWRfc2hpZnQoMik7TS5yZWFkX3NoaWZ0KDIpLHBlPU0ucmVhZF9zaGlmdCgyKTt2YXIg'@;
put 'WWU9TS5yZWFkX3NoaWZ0KDIpO00ubCs9WWU7Zm9yKHZhciBxZT0xO3FlPE0ubGVucy5sZW5ndGgtMTsrK3FlKXtpZihNLmwtSiE9TS5sZW5zW3FlXSl0aHJvdyBuZXcgRXJyb3IoIlR4TzogYmFkIGNvbnRpbnVlIHJlY29yZCIpO3ZhciBpdD1NW00ubF07aWYoKGllKz1qYShNLE0ubGVuc1tx'@;
put 'ZSsxXS1NLmxlbnNbcWVdLTEpKS5sZW5ndGg+PShpdD9NZToyKk1lKSlicmVha31pZihpZS5sZW5ndGghPT1NZSYmaWUubGVuZ3RoIT09MipNZSl0aHJvdyBuZXcgRXJyb3IoImNjaFRleHQ6ICIrTWUrIiAhPSAiK2llLmxlbmd0aCk7cmV0dXJuIE0ubD1KK0Yse3Q6aWUsaWZudDpwZX19Y2F0'@;
put 'Y2h7cmV0dXJuIE0ubD1KK0Yse3Q6aWUsaWZudDpwZX19fX0sNDM5OntuOiJSZWZyZXNoQWxsIixmOlJpfSw0NDA6e246IkhMaW5rIixmOmZ1bmN0aW9uIG5MKE0sRil7dmFyIE89ZTEoTSk7TS5sKz0xNjt2YXIgSj1mdW5jdGlvbiBBcyhNLEYpe3ZhciBPPU0ubCtGLEo9TS5yZWFkX3NoaWZ0'@;
put 'KDQpO2lmKDIhPT1KKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHN0cmVhbVZlcnNpb246ICIrSik7dmFyIGllPU0ucmVhZF9zaGlmdCgyKTtNLmwrPTI7dmFyIHBlLHllLHZlLE1lLFllLHFlLGplPSIiOzE2JmllJiYocGU9VGgoTSkpLDEyOCZpZSYmKHllPVRoKE0pKSwhKDI1NyZ+'@;
put 'aWUpJiYodmU9VGgoTSkpLDE9PSgyNTcmaWUpJiYoTWU9ZnVuY3Rpb24gdjAoTSxGKXt2YXIgTz1NLnJlYWRfc2hpZnQoMTYpO3N3aXRjaChPKXtjYXNlImUwYzllYTc5ZjliYWNlMTE4YzgyMDBhYTAwNGJhOTBiIjpyZXR1cm4gZnVuY3Rpb24gSXUoTSl7dmFyIEY9TS5yZWFkX3NoaWZ0KDQp'@;
put 'LE89TS5sLEo9ITE7Rj4yNCYmKE0ubCs9Ri0yNCwiNzk1ODgxZjQzYjFkN2Y0OGFmMmM4MjVkYzQ4NTI3NjMiPT09TS5yZWFkX3NoaWZ0KDE2KSYmKEo9ITApLE0ubD1PKTt2YXIgaWU9TS5yZWFkX3NoaWZ0KChKP0YtMjQ6Rik+PjEsInV0ZjE2bGUiKS5yZXBsYWNlKF8sIiIpO3JldHVybiBK'@;
put 'JiYoTS5sKz0yNCksaWV9KE0pO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAwMDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBPbyhNKXtmb3IodmFyIEY9TS5yZWFkX3NoaWZ0KDIpLE89IiI7Ri0tID4wOylPKz0iLi4vIjt2YXIgSj1NLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lm'@;
put 'KE0ubCs9Miw1NzAwNSE9TS5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigiQmFkIEZpbGVNb25pa2VyIik7aWYoMD09PU0ucmVhZF9zaGlmdCg0KSlyZXR1cm4gTytKLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgcGU9TS5yZWFkX3NoaWZ0KDQpO2lmKDMhPU0ucmVhZF9zaGlmdCgyKSl0'@;
put 'aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBPK00ucmVhZF9zaGlmdChwZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoXywiIil9KE0pO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrTyl9fShNKSksOCZpZSYmKGplPVRoKE0pKSwz'@;
put 'MiZpZSYmKFllPU0ucmVhZF9zaGlmdCgxNikpLDY0JmllJiYocWU9eGQoTSkpLE0ubD1PO3ZhciBpdD15ZXx8dmV8fE1lfHwiIjtpdCYmamUmJihpdCs9IiMiK2plKSxpdHx8KGl0PSIjIitqZSksMiZpZSYmIi8iPT1pdC5jaGFyQXQoMCkmJiIvIiE9aXQuY2hhckF0KDEpJiYoaXQ9ImZpbGU6'@;
put 'Ly8iK2l0KTt2YXIgaHQ9e1RhcmdldDppdH07cmV0dXJuIFllJiYoaHQuZ3VpZD1ZZSkscWUmJihodC50aW1lPXFlKSxwZSYmKGh0LlRvb2x0aXA9cGUpLGh0fShNLEYtMjQpO3JldHVybltPLEpdfX0sNDQxOntuOiJMZWwifSw0NDI6e246IkNvZGVOYW1lIixmOmtsfSw0NDM6e246IlNYRkRC'@;
put 'VHlwZSJ9LDQ0NDp7bjoiUHJvdDRSZXZQYXNzIixmOkphfSw0NDU6e246Ik9iTm9NYWNyb3MifSw0NDY6e246IkR2In0sNDQ4OntuOiJFeGNlbDlGaWxlIixmOlgwfSw0NDk6e246IlJlY2FsY0lkIixmOmZ1bmN0aW9uIEZsKE0pe3JldHVybiBNLnJlYWRfc2hpZnQoMiksTS5yZWFkX3NoaWZ0'@;
put 'KDQpfSxyOjJ9LDQ1MDp7bjoiRW50RXhVMiIsZjpYMH0sNTEyOntuOiJEaW1lbnNpb25zIixmOnRffSw1MTM6e246IkJsYW5rIixmOlJafSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBKQShNLEYsTyl7Ty5iaWZmZ3Vlc3MmJjI9PU8uYmlmZiYmKE8uYmlmZj01KTt2YXIgSj1QYyhNKSxp'@;
put 'ZT1oYShNKTtyZXR1cm4gSi52YWw9aWUsSn19LDUxNjp7bjoiTGFiZWwiLGY6ZnVuY3Rpb24gRE0oTSxGLE8pe08uYmlmZmd1ZXNzJiYyPT1PLmJpZmYmJihPLmJpZmY9NSk7dmFyIGllPVBjKE0pOzI9PU8uYmlmZiYmTS5sKys7dmFyIHBlPWtsKE0sMCxPKTtyZXR1cm4gaWUudmFsPXBlLGll'@;
put 'fX0sNTE3OntuOiJCb29sRXJyIixmOnAzfSw1MTk6e246IlN0cmluZyIsZjpPdX0sNTIwOntuOiJSb3ciLGY6ZnVuY3Rpb24gbWUoTSl7dmFyIEY9e307Ri5yPU0ucmVhZF9zaGlmdCgyKSxGLmM9TS5yZWFkX3NoaWZ0KDIpLEYuY250PU0ucmVhZF9zaGlmdCgyKS1GLmM7dmFyIE89TS5yZWFk'@;
put 'X3NoaWZ0KDIpO00ubCs9NDt2YXIgSj1NLnJlYWRfc2hpZnQoMSk7TS5sKz0xO3ZhciBpZT1NLnJlYWRfc2hpZnQoMik7cmV0dXJuIEYuaXhmZT00MDk1JmllLDcmSiYmKEYubGV2ZWw9NyZKKSwzMiZKJiYoRi5oaWRkZW49ITApLDY0JkomJihGLmhwdD1PLzIwKSxGfX0sNTIzOntuOiJJbmRl'@;
put 'eCJ9LDU0NTp7bjoiQXJyYXkiLGY6azZ9LDU0OTp7bjoiRGVmYXVsdFJvd0hlaWdodCIsZjpfY30sNTY2OntuOiJUYWJsZSJ9LDU3NDp7bjoiV2luZG93MiIsZjpmdW5jdGlvbiBBWihNLEYsTyl7aWYoTyYmTy5iaWZmPj0yJiZPLmJpZmY8NSlyZXR1cm57fTt2YXIgSj1NLnJlYWRfc2hpZnQo'@;
put 'Mik7cmV0dXJue1JUTDo2NCZKLGdyaWQ6ISEoMiZKKSxmcm96ZW46ISEoOCZKKX19fSw2Mzg6e246IlJLIixmOmZ1bmN0aW9uIExNKE0pe3ZhciBGPU0ucmVhZF9zaGlmdCgyKSxPPU0ucmVhZF9zaGlmdCgyKSxKPXpvKE0pO3JldHVybntyOkYsYzpPLGl4ZmU6SlswXSxya251bTpKWzFdfX19'@;
put 'LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gUnUoTSxGLE8pe3JldHVybiBNLmwrPUYse319fSwxMDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIGVfKE0sRixPKXtyZXR1cm5bTS5yZWFkX3NoaWZ0KDIpLHd1KE0sMCxPKV19fSwxMDg0OntuOiJDb250aW51'@;
put 'ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIHg2KE0sRixPKXt2YXIgSj1BaChNKTtNLmwrKzt2YXIgaWU9TS5yZWFkX3NoaWZ0KDEpO3JldHVybltHMihNLEYtPTgsTyksaWUsSl19fSwyMDQ4OntuOiJITGlua1Rvb2x0aXAiLGY6ZnVuY3Rpb24gaUwoTSxGKXtNLnJl'@;
put 'YWRfc2hpZnQoMik7dmFyIE89ZTEoTSksSj1NLnJlYWRfc2hpZnQoKEYtMTApLzIsImRiY3MtY29udCIpO3JldHVybltPLEo9Si5yZXBsYWNlKF8sIiIpXX19LDIwNDk6e246IldlYlB1YiJ9LDIwNTA6e246IlFzaVNYVGFnIn0sMjA1MTp7bjoiREJRdWVyeUV4dCJ9LDIwNTI6e246IkV4dFN0'@;
put 'cmluZyJ9LDIwNTM6e246IlR4dFFyeSJ9LDIwNTQ6e246IlFzaXIifSwyMDU1OntuOiJRc2lmIn0sMjA1Njp7bjoiUlJEVFFTSUYifSwyMDU3OntuOiJCT0YiLGY6U2F9LDIwNTg6e246Ik9sZURiQ29ubiJ9LDIwNTk6e246IldPcHQifSwyMDYwOntuOiJTWFZpZXdFeCJ9LDIwNjE6e246IlNY'@;
put 'VEgifSwyMDYyOntuOiJTWFBJRXgifSwyMDYzOntuOiJTWFZEVEV4In0sMjA2NDp7bjoiU1hWaWV3RXg5In0sMjA2Njp7bjoiQ29udGludWVGcnQifSwyMDY3OntuOiJSZWFsVGltZURhdGEifSwyMTI4OntuOiJDaGFydEZydEluZm8ifSwyMTI5OntuOiJGcnRXcmFwcGVyIn0sMjEzMDp7bjoi'@;
put 'U3RhcnRCbG9jayJ9LDIxMzE6e246IkVuZEJsb2NrIn0sMjEzMjp7bjoiU3RhcnRPYmplY3QifSwyMTMzOntuOiJFbmRPYmplY3QifSwyMTM0OntuOiJDYXRMYWIifSwyMTM1OntuOiJZTXVsdCJ9LDIxMzY6e246IlNYVmlld0xpbmsifSwyMTM3OntuOiJQaXZvdENoYXJ0Qml0cyJ9LDIxMzg6'@;
put 'e246IkZydEZvbnRMaXN0In0sMjE0Njp7bjoiU2hlZXRFeHQifSwyMTQ3OntuOiJCb29rRXh0IixyOjEyfSwyMTQ4OntuOiJTWEFkZGwifSwyMTQ5OntuOiJDckVyciJ9LDIxNTA6e246IkhGUGljdHVyZSJ9LDIxNTE6e246IkZlYXRIZHIiLGY6WDB9LDIxNTI6e246IkZlYXQifSwyMTU0Ontu'@;
put 'OiJEYXRhTGFiRXh0In0sMjE1NTp7bjoiRGF0YUxhYkV4dENvbnRlbnRzIn0sMjE1Njp7bjoiQ2VsbFdhdGNoIn0sMjE2MTp7bjoiRmVhdEhkcjExIn0sMjE2Mjp7bjoiRmVhdHVyZTExIn0sMjE2NDp7bjoiRHJvcERvd25PYmpJZHMifSwyMTY1OntuOiJDb250aW51ZUZydDExIn0sMjE2Njp7'@;
put 'bjoiRENvbm4ifSwyMTY3OntuOiJMaXN0MTIifSwyMTY4OntuOiJGZWF0dXJlMTIifSwyMTY5OntuOiJDb25kRm10MTIifSwyMTcwOntuOiJDRjEyIn0sMjE3MTp7bjoiQ0ZFeCJ9LDIxNzI6e246IlhGQ1JDIixmOmZ1bmN0aW9uIGZhKE0pe00ubCs9Mjt2YXIgRj17Y3hmczowLGNyYzowfTty'@;
put 'ZXR1cm4gRi5jeGZzPU0ucmVhZF9zaGlmdCgyKSxGLmNyYz1NLnJlYWRfc2hpZnQoNCksRn0scjoxMn0sMjE3Mzp7bjoiWEZFeHQiLGY6ZnVuY3Rpb24gWEwoTSxGKXtNLmwrPTI7dmFyIEo9TS5yZWFkX3NoaWZ0KDIpO00ubCs9Mjtmb3IodmFyIGllPU0ucmVhZF9zaGlmdCgyKSxwZT1bXTtp'@;
put 'ZS0tID4wOylwZS5wdXNoKFo2KE0pKTtyZXR1cm57aXhmZTpKLGV4dDpwZX19LHI6MTJ9LDIxNzQ6e246IkF1dG9GaWx0ZXIxMiJ9LDIxNzU6e246IkNvbnRpbnVlRnJ0MTIifSwyMTgwOntuOiJNRFRJbmZvIn0sMjE4MTp7bjoiTURYU3RyIn0sMjE4Mjp7bjoiTURYVHVwbGUifSwyMTgzOntu'@;
put 'OiJNRFhTZXQifSwyMTg0OntuOiJNRFhQcm9wIn0sMjE4NTp7bjoiTURYS1BJIn0sMjE4Njp7bjoiTURCIn0sMjE4Nzp7bjoiUExWIn0sMjE4ODp7bjoiQ29tcGF0MTIiLGY6UmkscjoxMn0sMjE4OTp7bjoiRFhGIn0sMjE5MDp7bjoiVGFibGVTdHlsZXMiLHI6MTJ9LDIxOTE6e246IlRhYmxl'@;
put 'U3R5bGUifSwyMTkyOntuOiJUYWJsZVN0eWxlRWxlbWVudCJ9LDIxOTQ6e246IlN0eWxlRXh0In0sMjE5NTp7bjoiTmFtZVB1Ymxpc2gifSwyMTk2OntuOiJOYW1lQ210IixmOmZ1bmN0aW9uIHFtKE0sRixPKXtpZighKE8uYmlmZjw4KSl7dmFyIEo9TS5yZWFkX3NoaWZ0KDIpLGllPU0ucmVh'@;
put 'ZF9zaGlmdCgyKTtyZXR1cm5bamEoTSxKLE8pLGphKE0saWUsTyldfU0ubCs9Rn0scjoxMn0sMjE5Nzp7bjoiU29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiBxTChNLEYsTyl7dmFyIEo9TS5sK0Y7aWYoMTI0MjI2IT09TS5yZWFkX3NoaWZ0KDQpKXtpZighTy5jZWxsU3R5'@;
put 'bGVzKXJldHVybiB2b2lkKE0ubD1KKTt2YXIgeWUscGU9TS5zbGljZShNLmwpO00ubD1KO3RyeXt5ZT1DbihwZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciB2ZT1RdCh5ZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHZlKXJldHVybiBBXyh2ZSxPKX19LHI6MTJ9'@;
put 'LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEyIn0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gbTMoTSl7cmV0dXJuWzAhPT1NLnJlYWRfc2hpZnQoNCksMCE9PU0ucmVhZF9zaGlmdCg0KSxNLnJlYWRfc2hpZnQo'@;
put 'NCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOlgwfSwyMjA0OntuOiJIZWFkZXJGb290ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0'@;
put 'aW9uIixmOmZ1bmN0aW9uIFZlKE0pe3ZhciBGPWZ1bmN0aW9uIFEwKE0pe3ZhciBGPU0ucmVhZF9zaGlmdCgyKSxPPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gTS5sKz04LHt0eXBlOkYsZmxhZ3M6T319KE0pO2lmKDIyMTEhPUYudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJl'@;
put 'IFJlY29yZCAiK0YudHlwZSk7cmV0dXJuIDAhPT1NLnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVByb3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0'@;
put 'cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQxMDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNo'@;
put 'ZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246'@;
put 'IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4'@;
put 'dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjpKYX0sNDEzNTp7bjoiT2JqZWN0TGluayJ9LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNG'@;
put 'In0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBjXyhNLEYsTyl7'@;
put 'dmFyIEo9e2FyZWE6ITF9O2lmKDUhPU8uYmlmZilyZXR1cm4gTS5sKz1GLEo7dmFyIGllPU0ucmVhZF9zaGlmdCgxKTtyZXR1cm4gTS5sKz0zLDE2JmllJiYoSi5hcmVhPSEwKSxKfX0sNDE2NTp7bjoiU2VyVG9DcnQifSw0MTY2OntuOiJBeGVzVXNlZCJ9LDQxNjg6e246IlNCYXNlUmVmIn0s'@;
put 'NDE3MDp7bjoiU2VyUGFyZW50In0sNDE3MTp7bjoiU2VyQXV4VHJlbmQifSw0MTc0OntuOiJJRm10UmVjb3JkIn0sNDE3NTp7bjoiUG9zIn0sNDE3Njp7bjoiQWxSdW5zIn0sNDE3Nzp7bjoiQlJBSSJ9LDQxODc6e246IlNlckF1eEVyckJhciJ9LDQxODg6e246IkNscnRDbGllbnQiLGY6ZnVu'@;
put 'Y3Rpb24ga3MoTSl7Zm9yKHZhciBGPU0ucmVhZF9zaGlmdCgyKSxPPVtdO0YtLSA+MDspTy5wdXNoKEd1KE0pKTtyZXR1cm4gT319LDQxODk6e246IlNlckZtdCJ9LDQxOTE6e246IkNoYXJ0M0RCYXJTaGFwZSJ9LDQxOTI6e246IkZiaSJ9LDQxOTM6e246IkJvcFBvcCJ9LDQxOTQ6e246IkF4'@;
put 'Y0V4dCJ9LDQxOTU6e246IkRhdCJ9LDQxOTY6e246IlBsb3RHcm93dGgifSw0MTk3OntuOiJTSUluZGV4In0sNDE5ODp7bjoiR2VsRnJhbWUifSw0MTk5OntuOiJCb3BQb3BDdXN0b20ifSw0MjAwOntuOiJGYmkyIn0sMDp7bjoiRGltZW5zaW9ucyIsZjp0X30sMTp7bjoiQklGRjJCTEFOSyJ9'@;
put 'LDI6e246IkJJRkYySU5UIixmOmZ1bmN0aW9uIGNMKE0pe3ZhciBGPVBjKE0pOysrTS5sO3ZhciBPPU0ucmVhZF9zaGlmdCgyKTtyZXR1cm4gRi50PSJuIixGLnZhbD1PLEZ9fSwzOntuOiJCSUZGMk5VTSIsZjpmdW5jdGlvbiBsTChNKXt2YXIgRj1QYyhNKTsrK00ubDt2YXIgTz1oYShNKTty'@;
put 'ZXR1cm4gRi50PSJuIixGLnZhbD1PLEZ9fSw0OntuOiJCSUZGMlNUUiIsZjpmdW5jdGlvbiBPaChNLEYsTyl7Ty5iaWZmZ3Vlc3MmJjU9PU8uYmlmZiYmKE8uYmlmZj0yKTt2YXIgSj1QYyhNKTsrK00ubDt2YXIgaWU9d3UoTSwwLE8pO3JldHVybiBKLnQ9InN0ciIsSi52YWw9aWUsSn19LDU6'@;
put 'e246IkJvb2xFcnIiLGY6cDN9LDc6e246IlN0cmluZyIsZjpmdW5jdGlvbiB1XyhNKXt2YXIgRj1NLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDA9PT1GPyhNLmwrKywiIik6TS5yZWFkX3NoaWZ0KEYsInNiY3MtY29udCIpfX0sODp7bjoiQklGRjJST1cifSw5OntuOiJCT0YiLGY6U2F9LDExOntu'@;
put 'OiJJbmRleCJ9LDIyOntuOiJFeHRlcm5Db3VudCIsZjpKYX0sMzA6e246IkJJRkYyRk9STUFUIixmOkRkfSwzMTp7bjoiQklGRjJGTVRDTlQifSwzMjp7bjoiQklGRjJDT0xJTkZPIn0sMzM6e246IkFycmF5IixmOms2fSwzNjp7bjoiQ09MV0lEVEgifSwzNzp7bjoiRGVmYXVsdFJvd0hlaWdo'@;
put 'dCIsZjpfY30sNTA6e246IkJJRkYyRk9OVFhUUkEiLGY6ZnVuY3Rpb24gZF8oTSxGKXtNLmwrPTYsTS5sKz0yLE0ubCs9MSxNLmwrPTMsTS5sKz0xLE0ubCs9Ri0xM319LDYyOntuOiJCSUZGMldJTkRPVzIifSw1Mjp7bjoiRERFT2JqTmFtZSJ9LDY3OntuOiJCSUZGMlhGIn0sNjg6e246IkJJ'@;
put 'RkYyWEZJTkRFWCIsZjpKYX0sNjk6e246IkJJRkYyRk9OVENMUiJ9LDg2OntuOiJCSUZGNEZNVENOVCJ9LDEyNjp7bjoiUksifSwxMjc6e246IkltRGF0YSIsZjpmdW5jdGlvbiB6MShNKXt2YXIgRj1NLnJlYWRfc2hpZnQoMiksTz1NLnJlYWRfc2hpZnQoMiksSj1NLnJlYWRfc2hpZnQoNCks'@;
put 'aWU9e2ZtdDpGLGVudjpPLGxlbjpKLGRhdGE6TS5zbGljZShNLmwsTS5sK0opfTtyZXR1cm4gTS5sKz1KLGllfX0sMTM1OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUw'@;
put 'OntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVu'@;
put 'Y3Rpb24gaF8oTSxGLE8pe3ZhciBKPU0ubCtGLGllPVBjKE0pLHBlPU0ucmVhZF9zaGlmdCgyKSx5ZT1qYShNLHBlLE8pO3JldHVybiBNLmw9SixpZS50PSJzdHIiLGllLnZhbD15ZSxpZX19LDIyMzp7bjoiVUREZXNjIn0sMjM0OntuOiJUYWJJZENvbmYifSwzNTQ6e246IlhMNU1vZGlmeSJ9'@;
put 'LDQyMTp7bjoiRmlsZVNoYXJpbmcyIn0sNTE4OntuOiJGb3JtdWxhIixmOnJ2fSw1MjE6e246IkJPRiIsZjpTYX0sNTM2OntuOiJMYmwiLGY6b199LDU0Nzp7bjoiRXh0ZXJuTmFtZSIsZjppX30sNTYxOntuOiJGb250In0sNTc5OntuOiJCSUZGM1hGIn0sMTAzMDp7bjoiRm9ybXVsYSIsZjpy'@;
put 'dn0sMTAzMzp7bjoiQk9GIixmOlNhfSwxMDkxOntuOiJCSUZGNFhGIn0sMjE1Nzp7bjoiRmVhdEluZm8ifSwyMTYzOntuOiJGZWF0SW5mbzExIn0sMjE3Nzp7bjoiU1hBZGRsMTIifSwyMjQwOntuOiJBdXRvV2ViUHViIn0sMjI0MTp7bjoiTGlzdE9iaiJ9LDIyNDI6e246Ikxpc3RGaWVsZCJ9'@;
put 'LDIyNDM6e246Ikxpc3REViJ9LDIyNDQ6e246Ikxpc3RDb25kRm10In0sMjI0NTp7bjoiTGlzdENGIn0sMjI0Njp7bjoiRk1RcnkifSwyMjQ3OntuOiJGTVNRcnkifSwyMjQ4OntuOiJQTFYifSwyMjQ5OntuOiJMbkV4dCJ9LDIyNTA6e246Ik1rckV4dCJ9LDIyNTE6e246IkNydENvb3B0In0s'@;
put 'MjI2Mjp7bjoiRlJUQXJjaElkJCIscjoxMn0sMjkyODI6e319LGR4PUZlKEoyLCJuIik7ZnVuY3Rpb24ga2koTSxGLE8sSil7dmFyIGllPStGfHwrZHhbRl07aWYoIWlzTmFOKGllKSl7dmFyIHBlPUp8fChPfHxbXSkubGVuZ3RofHwwLHllPU0ubmV4dCg0KTt5ZS53cml0ZV9zaGlmdCgyLGll'@;
put 'KSx5ZS53cml0ZV9zaGlmdCgyLHBlKSxwZT4wJiZfaShPKSYmTS5wdXNoKE8pfX1mdW5jdGlvbiBPNShNLEYsTyl7cmV0dXJuIE18fChNPWdyKDcpKSxNLndyaXRlX3NoaWZ0KDIsRiksTS53cml0ZV9zaGlmdCgyLE8pLE0ud3JpdGVfc2hpZnQoMiwwKSxNLndyaXRlX3NoaWZ0KDEsMCksTX1m'@;
put 'dW5jdGlvbiBiTyhNLEYsTyxKKXtpZihudWxsIT1GLnYpc3dpdGNoKEYudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciBpZT0iZCI9PUYudD9HZShGdChGLnYpKTpGLnY7cmV0dXJuIHZvaWQoaWU9PSgwfGllKSYmaWU+PTAmJmllPDY1NTM2P2tpKE0sMixmdW5jdGlvbiB1TChNLEYsTyl7dmFyIEo9'@;
put 'Z3IoOSk7cmV0dXJuIE81KEosTSxGKSxKLndyaXRlX3NoaWZ0KDIsTyksSn0oTyxKLGllKSk6a2koTSwzLGZ1bmN0aW9uIE5NKE0sRixPKXt2YXIgSj1ncigxNSk7cmV0dXJuIE81KEosTSxGKSxKLndyaXRlX3NoaWZ0KDgsTywiZiIpLEp9KE8sSixpZSkpKTtjYXNlImIiOmNhc2UiZSI6cmV0'@;
put 'dXJuIHZvaWQga2koTSw1LGZ1bmN0aW9uIExXKE0sRixPLEope3ZhciBpZT1ncig5KTtyZXR1cm4gTzUoaWUsTSxGKSx4aShPLEp8fCJiIixpZSksaWV9KE8sSixGLnYsRi50KSk7Y2FzZSJzIjpjYXNlInN0ciI6cmV0dXJuIHZvaWQga2koTSw0LGZ1bmN0aW9uIHlPKE0sRixPKXt2YXIgSj1n'@;
put 'cig4KzIqTy5sZW5ndGgpO3JldHVybiBPNShKLE0sRiksSi53cml0ZV9zaGlmdCgxLE8ubGVuZ3RoKSxKLndyaXRlX3NoaWZ0KE8ubGVuZ3RoLE8sInNiY3MiKSxKLmw8Si5sZW5ndGg/Si5zbGljZSgwLEoubCk6Sn0oTyxKLChGLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX1raShNLDEsTzUobnVs'@;
put 'bCxPLEopKX1mdW5jdGlvbiBDTyhNLEYsTyxKLGllKXt2YXIgcGU9MTYrcnUoaWUuY2VsbFhmcyxpZS5jZWxsU3R5bGVYZnMsRixpZSk7aWYobnVsbCE9Ri52fHxGLmJmKWlmKEYuYmYpa2koTSwiRm9ybXVsYSIsZnVuY3Rpb24gZDQoTSxGLE8sSixpZSl7dmFyIHBlPUowKEYsTyxpZSkseWU9'@;
put 'ZnVuY3Rpb24gbnYoTSl7aWYobnVsbD09TSl7dmFyIEY9Z3IoOCk7cmV0dXJuIEYud3JpdGVfc2hpZnQoMSwzKSxGLndyaXRlX3NoaWZ0KDEsMCksRi53cml0ZV9zaGlmdCgyLDApLEYud3JpdGVfc2hpZnQoMiwwKSxGLndyaXRlX3NoaWZ0KDIsNjU1MzUpLEZ9cmV0dXJuIGVjKCJudW1iZXIi'@;
put 'PT10eXBlb2YgTT9NOjApfShNLnYpLHZlPWdyKDYpO3ZlLndyaXRlX3NoaWZ0KDIsMzMpLHZlLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHZhciBqZT1ncihNLmJmLmxlbmd0aCksWWU9MDtZZTxNLmJmLmxlbmd0aDsrK1llKWplW1llXT1NLmJmW1llXTtyZXR1cm4geChbcGUseWUsdmUsamVdKX0o'@;
put 'RixPLEosMCxwZSkpO2Vsc2Ugc3dpdGNoKEYudCl7Y2FzZSJkIjpjYXNlIm4iOmtpKE0sIk51bWJlciIsZnVuY3Rpb24gcl8oTSxGLE8sSil7dmFyIGllPWdyKDE0KTtyZXR1cm4gSjAoTSxGLEosaWUpLGVjKE8saWUpLGllfShPLEosImQiPT1GLnQ/R2UoRnQoRi52KSk6Ri52LHBlKSk7YnJl'@;
put 'YWs7Y2FzZSJiIjpjYXNlImUiOmtpKE0sNTE3LGZ1bmN0aW9uIHkwKE0sRixPLEosaWUscGUpe3ZhciB5ZT1ncig4KTtyZXR1cm4gSjAoTSxGLEoseWUpLHhpKE8scGUseWUpLHllfShPLEosRi52LHBlLDAsRi50KSk7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6aWYoaWUuYm9va1NTVCl7dmFy'@;
put 'IHZlPWN2KGllLlN0cmluZ3MsRi52LEYuUj9GLnI9YWEoRi5SKTpudWxsLGllLnJldlN0cmluZ3MpO2lmKEYuUilmb3IodmFyIE1lPTA7TWU8Ri5SLmxlbmd0aDsrK01lKUYuUltNZV0ucyYmcnUoaWUuY2VsbFhmcyxpZS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOkYuUltNZV0uc30saWUp'@;
put 'O2tpKE0sIkxhYmVsU3N0IixmdW5jdGlvbiBUTShNLEYsTyxKKXt2YXIgaWU9Z3IoMTApO3JldHVybiBKMChNLEYsSixpZSksaWUud3JpdGVfc2hpZnQoNCxPKSxpZX0oTyxKLHZlLHBlKSl9ZWxzZSBraShNLCJMYWJlbCIsZnVuY3Rpb24gJEEoTSxGLE8sSixpZSl7dmFyIHBlPSFpZXx8OD09'@;
put 'aWUuYmlmZix5ZT1ncigrcGUrOCsoMStwZSkqTy5sZW5ndGgpO3JldHVybiBKMChNLEYsSix5ZSkseWUud3JpdGVfc2hpZnQoMixPLmxlbmd0aCkscGUmJnllLndyaXRlX3NoaWZ0KDEsMSkseWUud3JpdGVfc2hpZnQoKDErcGUpKk8ubGVuZ3RoLE8scGU/InV0ZjE2bGUiOiJzYmNzIikseWV9'@;
put 'KE8sSiwoRi52fHwiIikuc2xpY2UoMCwyNTUpLHBlLGllKSk7YnJlYWs7ZGVmYXVsdDpraShNLCJCbGFuayIsSjAoTyxKLHBlKSl9ZWxzZSBraShNLCJCbGFuayIsSjAoTyxKLHBlKSl9ZnVuY3Rpb24gZ3goTSxGLE8pe3ZhciBZZSxKPVJsKCksaWU9Ty5TaGVldE5hbWVzW01dLHBlPU8uU2hl'@;
put 'ZXRzW2llXXx8e30seWU9KE98fHt9KS5Xb3JrYm9va3x8e30sdmU9KHllLlNoZWV0c3x8W10pW01dfHx7fSxNZT1BcnJheS5pc0FycmF5KHBlKSxqZT04PT1GLmJpZmYscWU9IiIsaXQ9W10saHQ9Ym8ocGVbIiFyZWYiXXx8IkExIiksa3Q9amU/NjU1MzY6MTYzODQ7aWYoaHQuZS5jPjI1NXx8'@;
put 'aHQuZS5yPj1rdCl7aWYoRi5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhwZVsiIXJlZiJdfHwiQTEiKSsiIGV4Y2VlZHMgZm9ybWF0IGxpbWl0IEExOklWMTYzODQiKTtodC5lLmM9TWF0aC5taW4oaHQuZS5jLDI1NSksaHQuZS5yPU1hdGgubWluKGh0LmUuYyxrdC0xKX1raShKLDIw'@;
put 'NTcsTGgoMCwxNixGKSksa2koSiwiQ2FsY01vZGUiLFpsKDEpKSxraShKLCJDYWxjQ291bnQiLFpsKDEwMCkpLGtpKEosIkNhbGNSZWZNb2RlIixYYSghMCkpLGtpKEosIkNhbGNJdGVyIixYYSghMSkpLGtpKEosIkNhbGNEZWx0YSIsZWMoLjAwMSkpLGtpKEosIkNhbGNTYXZlUmVjYWxjIixY'@;
put 'YSghMCkpLGtpKEosIlByaW50Um93Q29sIixYYSghMSkpLGtpKEosIlByaW50R3JpZCIsWGEoITEpKSxraShKLCJHcmlkU2V0IixabCgxKSksa2koSiwiR3V0cyIsZnVuY3Rpb24gJG0oTSl7dmFyIEY9Z3IoOCk7cmV0dXJuIEYud3JpdGVfc2hpZnQoNCwwKSxGLndyaXRlX3NoaWZ0KDIsTVsw'@;
put 'XT9NWzBdKzE6MCksRi53cml0ZV9zaGlmdCgyLE1bMV0/TVsxXSsxOjApLEZ9KFswLDBdKSksa2koSiwiSENlbnRlciIsWGEoITEpKSxraShKLCJWQ2VudGVyIixYYSghMSkpO3ZhciB1dD1wZVsiIXByaW50Il0mJnBlWyIhcHJpbnQiXS5tYXJnaW5zfHxwZVsiIW1hcmdpbnMiXTt1dCYmKG51'@;
put 'bGwhPXV0LmxlZnQmJmtpKEosIkxlZnRNYXJnaW4iLGVjKHV0LmxlZnQpKSxudWxsIT11dC5yaWdodCYma2koSiwiUmlnaHRNYXJnaW4iLGVjKHV0LnJpZ2h0KSksbnVsbCE9dXQudG9wJiZraShKLCJUb3BNYXJnaW4iLGVjKHV0LnRvcCkpLG51bGwhPXV0LmJvdHRvbSYma2koSiwiQm90dG9t'@;
put 'TWFyZ2luIixlYyh1dC5ib3R0b20pKSwobnVsbCE9dXQuaGVhZGVyfHxudWxsIT11dC5mb290ZXIpJiZraShKLCJTZXR1cCIsZnVuY3Rpb24gbF8oTSxGKXt2YXIgTz1ncigzNCksSj0hMSxpZT03MDtyZXR1cm4ibGFuZHNjYXBlIj09KEYucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEo9ITAs'@;
put 'aWUmPS02NyksSiYmKGllJj0tNSksTy53cml0ZV9zaGlmdCgyLDEpLE8ud3JpdGVfc2hpZnQoMiwxMDApLE8ud3JpdGVfc2hpZnQoMiwwKSxPLndyaXRlX3NoaWZ0KDIsMCksTy53cml0ZV9zaGlmdCgyLDApLE8ud3JpdGVfc2hpZnQoMSxpZSksTy53cml0ZV9zaGlmdCgxLDApLE8ud3JpdGVf'@;
put 'c2hpZnQoMiw2MDApLE8ud3JpdGVfc2hpZnQoMiw2MDApLGVjKG51bGw9PU0uaGVhZGVyPy41Ok0uaGVhZGVyLE8pLGVjKG51bGw9PU0uZm9vdGVyPy41Ok0uZm9vdGVyLE8pLE8ud3JpdGVfc2hpZnQoMiwxKSxPfSh1dCxwZVsiIXByaW50Il18fHt9KSkpLGplJiZmdW5jdGlvbiBSVyhNLEYs'@;
put 'Tyl7aWYoRil7dmFyIEo9MDtGLmZvckVhY2goZnVuY3Rpb24oaWUscGUpeysrSjw9MjU2JiZpZSYmKGllLmF1dG8mJnV2KE8saWUscGUpLGtpKE0sIkNvbEluZm8iLGZ1bmN0aW9uIEttKE0sRil7dmFyIE89Z3IoMTIpO08ud3JpdGVfc2hpZnQoMixGKSxPLndyaXRlX3NoaWZ0KDIsRiksTy53'@;
put 'cml0ZV9zaGlmdCgyLDI1NipNLndpZHRoKSxPLndyaXRlX3NoaWZ0KDIsMCk7dmFyIEo9MDtyZXR1cm4gTS5oaWRkZW4mJihKfD0xKSxPLndyaXRlX3NoaWZ0KDEsSiksTy53cml0ZV9zaGlmdCgxLEo9TS5sZXZlbHx8MCksTy53cml0ZV9zaGlmdCgyLDApLE99KGY1KHBlLGllKSxwZSkpKX0p'@;
put 'fX0oSixwZVsiIWNvbHMiXSxwZSksa2koSiwiRGltZW5zaW9ucyIsZnVuY3Rpb24gQU0oTSxGKXt2YXIgTz04IT1GLmJpZmYmJkYuYmlmZj8yOjQsSj1ncigyKk8rNik7cmV0dXJuIEoud3JpdGVfc2hpZnQoTyxNLnMuciksSi53cml0ZV9zaGlmdChPLE0uZS5yKzEpLEoud3JpdGVfc2hpZnQo'@;
put 'MixNLnMuYyksSi53cml0ZV9zaGlmdCgyLE0uZS5jKzEpLEoud3JpdGVfc2hpZnQoMiwwKSxKfShodCxGKSksamUmJihwZVsiIWxpbmtzIl09W10pLHBlWyIhcm93cyJdJiZqZSYmcGVbIiFyb3dzIl0uZm9yRWFjaChmdW5jdGlvbihadCxnbil7Zm9yKHZhciBxbj1ycyhnbiksdW49MjU2LEpu'@;
put 'PTAsWW49WnQucz8xNitydShGLmNlbGxYZnMsRi5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlp0LnN9LEYpOjAsTG49aHQucy5jO0xuPD1odC5lLmM7KytMbikoTWU/KHBlW2duXXx8W10pW0xuXTpwZVtpdFtMbl0rcW5dKSYmKExuPHVuJiYodW49TG4pLExuPkpuJiYoSm49TG4pKTtKbjx1'@;
put 'biYmKHVuPUpuPTApLGtpKEosIlJvdyIsZnVuY3Rpb24gSWUoTSxGLE8pe3ZhciBKPWdyKDE2KTtKLndyaXRlX3NoaWZ0KDIsRiksSi53cml0ZV9zaGlmdCgyLE9bMF0pLEoud3JpdGVfc2hpZnQoMixPWzFdKzEpLEoud3JpdGVfc2hpZnQoMiwyMCpNLmhwdHx8MjAqWTIoTS5ocHgpfHwzMzAp'@;
put 'LEoud3JpdGVfc2hpZnQoNCwwKTt2YXIgaWU9MDtyZXR1cm4gaWV8PTB8TS5sZXZlbCxNLmhpZGRlbiYmKGllfD0zMiksaWV8PTY0LE9bMl0mJihpZXw9MTI4KSxKLndyaXRlX3NoaWZ0KDEsaWUpLEoud3JpdGVfc2hpZnQoMSwxKSxKLndyaXRlX3NoaWZ0KDIsT1syXXx8MCksSn0oWnQsZ24s'@;
put 'W3VuLEpuLFluXSkpfSk7Zm9yKHZhciB2dD1odC5zLnI7dnQ8PWh0LmUucjsrK3Z0KXtxZT1ycyh2dCk7Zm9yKHZhciBQdD1odC5zLmM7UHQ8PWh0LmUuYzsrK1B0KXt2dD09PWh0LnMuciYmKGl0W1B0XT1mbyhQdCkpLFllPWl0W1B0XStxZTt2YXIgRHQ9TWU/KHBlW3Z0XXx8W10pW1B0XTpw'@;
put 'ZVtZZV07RHQmJihDTyhKLER0LHZ0LFB0LEYpLGplJiZEdC5sJiZwZVsiIWxpbmtzIl0ucHVzaChbWWUsRHQubF0pKX19dmFyIEF0PXZlLkNvZGVOYW1lfHx2ZS5uYW1lfHxpZTtyZXR1cm4oamV8fDU9PUYuYmlmZiYmcGVbIiFmcmVlemUiXSkmJmtpKEosIldpbmRvdzIiLGZ1bmN0aW9uIFpB'@;
put 'KE0sRixPLEope3ZhciBpZT1KJiZKLmJpZmZ8fDgscGU9Z3IoOD09aWU/MTg6MTApLHllPTE3MTg7cmV0dXJuIE8+MCYmKHllJj0tNTEzKSxkbihGWyIhZ3JpZGxpbmVzIl0pJiYoeWUmPS0zKSxGWyIhZnJlZXplIl0mJih5ZXw9OCksTSYmTS5SVEwmJih5ZXw9NjQpLDU9PWllJiYoeWU9NDQ2'@;
put 'KSxwZS53cml0ZV9zaGlmdCgyLHllKSw4PT1pZT8ocGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDY0KSxwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCkpOihwZS53cml0ZV9zaGlmdCg0LDApLHBlLndyaXRlX3NoaWZ0KDQsMCkpLHBlfSgoeWUuVmll'@;
put 'd3N8fFtdKVswXSxwZSxNKSksKGplfHw1PT1GLmJpZmYpJiZwZVsiIWZyZWV6ZSJdJiZraShKLCJQYW5lIixmdW5jdGlvbiBCYShNKXsic3RyaW5nIj09dHlwZW9mIE0mJihNPWhzKE0pKTt2YXIgRj1ncigxMCk7cmV0dXJuIEYud3JpdGVfc2hpZnQoMixNLmMpLEYud3JpdGVfc2hpZnQoMixN'@;
put 'LnIpLEYud3JpdGVfc2hpZnQoMixNLnIpLEYud3JpdGVfc2hpZnQoMixNLmMpLEYud3JpdGVfc2hpZnQoMSwzKSxGLndyaXRlX3NoaWZ0KDEsMCksRn0ocGVbIiFmcmVlemUiXSkpLGplJiZwZVsiIXNlbCJdJiZraShKLCJTZWxlY3Rpb24iLGZ1bmN0aW9uIEhNKE0sRil7dmFyIE89Z3IoMTUp'@;
put 'LEo9TS5jZWxsO2lmKCFKKXtpZighTS5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Sj1EaShIcyhNLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZhciBpZT0ic3RyaW5nIj09dHlwZW9mIEo/aHMoSik6SjtpZihG'@;
put 'KXt2YXIgcGU9InN0cmluZyI9PXR5cGVvZiBGP2hzKEYpOkY7Ty53cml0ZV9zaGlmdCgxLGllLnI+PXBlLnImJmllLmM+PXBlLmM/MDppZS5yPj1wZS5yJiZpZS5jPHBlLmM/MjppZS5yPHBlLnImJmllLmM+PXBlLmM/MTozKX1lbHNlIE8ud3JpdGVfc2hpZnQoMSwzKTtyZXR1cm4gTy53cml0'@;
put 'ZV9zaGlmdCgyLGllLnIpLE8ud3JpdGVfc2hpZnQoMixpZS5jKSxPLndyaXRlX3NoaWZ0KDIsMCksTy53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIEVkKE0sRil7Rnx8KEY9Z3IoNikpLEYud3JpdGVfc2hpZnQoMixNLnM/TS5zLnI6TS5yKSxGLndyaXRlX3NoaWZ0KDIsTS5lP00uZS5yOk0u'@;
put 'ciksRi53cml0ZV9zaGlmdCgxLE0ucz9NLnMuYzpNLmMpLEYud3JpdGVfc2hpZnQoMSxNLmU/TS5lLmM6TS5jKX0oe3M6aWUsZTppZX0sTyksT30ocGVbIiFzZWwiXSxwZVsiIWZyZWV6ZSJdKSksamUmJihwZVsiIW1lcmdlcyJdfHxbXSkubGVuZ3RoJiZraShKLCJNZXJnZUNlbGxzIixmdW5j'@;
put 'dGlvbiBlTChNKXt2YXIgRj1ncigyKzgqTS5sZW5ndGgpO0Yud3JpdGVfc2hpZnQoMixNLmxlbmd0aCk7Zm9yKHZhciBPPTA7TzxNLmxlbmd0aDsrK08pT2EoTVtPXSxGKTtyZXR1cm4gRn0ocGVbIiFtZXJnZXMiXSkpLGplJiZmdW5jdGlvbiBteChNLEYpe2Zvcih2YXIgTz0wO088RlsiIWxp'@;
put 'bmtzIl0ubGVuZ3RoOysrTyl7dmFyIEo9RlsiIWxpbmtzIl1bT107a2koTSwiSExpbmsiLHJMKEopKSxKWzFdLlRvb2x0aXAmJmtpKE0sIkhMaW5rVG9vbHRpcCIsb0woSikpfWRlbGV0ZSBGWyIhbGlua3MiXX0oSixwZSksa2koSiwiQ29kZU5hbWUiLHJhKEF0KSksamUmJmZ1bmN0aW9uIHB4'@;
put 'KE0sRil7dmFyIE89Z3IoMTkpO08ud3JpdGVfc2hpZnQoNCwyMTUxKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoMiwzKSxPLndyaXRlX3NoaWZ0KDEsMSksTy53cml0ZV9zaGlmdCg0LDApLGtpKE0sIkZlYXRIZHIiLE8pLChPPWdyKDM5KSku'@;
put 'd3JpdGVfc2hpZnQoNCwyMTUyKSxPLndyaXRlX3NoaWZ0KDQsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoMiwzKSxPLndyaXRlX3NoaWZ0KDEsMCksTy53cml0ZV9zaGlmdCg0LDApLE8ud3JpdGVfc2hpZnQoMiwxKSxPLndyaXRlX3NoaWZ0KDQsNCksTy53cml0ZV9zaGlm'@;
put 'dCgyLDApLE9hKGJvKEZbIiFyZWYiXXx8IkExIiksTyksTy53cml0ZV9zaGlmdCg0LDQpLGtpKE0sIkZlYXQiLE8pfShKLHBlKSxraShKLCJFT0YiKSxKLmVuZCgpfWZ1bmN0aW9uIHNvKE0sRixPKXt2YXIgSj1SbCgpLGllPShNfHx7fSkuV29ya2Jvb2t8fHt9LHBlPWllLlNoZWV0c3x8W10s'@;
put 'eWU9aWUuV0JQcm9wc3x8e30sdmU9OD09Ty5iaWZmLE1lPTU9PU8uYmlmZjtraShKLDIwNTcsTGgoMCw1LE8pKSwieGxhIj09Ty5ib29rVHlwZSYma2koSiwiQWRkaW4iKSxraShKLCJJbnRlcmZhY2VIZHIiLHZlP1psKDEyMDApOm51bGwpLGtpKEosIk1tcyIsZnVuY3Rpb24gWm0oTSxGKXtG'@;
put 'fHwoRj1ncihNKSk7Zm9yKHZhciBPPTA7TzxNOysrTylGLndyaXRlX3NoaWZ0KDEsMCk7cmV0dXJuIEZ9KDIpKSxNZSYma2koSiwiVG9vbGJhckhkciIpLE1lJiZraShKLCJUb29sYmFyRW5kIiksa2koSiwiSW50ZXJmYWNlRW5kIiksa2koSiwiV3JpdGVBY2Nlc3MiLGZ1bmN0aW9uIGYzKE0s'@;
put 'Ril7dmFyIE89IUZ8fDg9PUYuYmlmZixKPWdyKE8/MTEyOjU0KTtmb3IoSi53cml0ZV9zaGlmdCg4PT1GLmJpZmY/MjoxLDcpLE8mJkoud3JpdGVfc2hpZnQoMSwwKSxKLndyaXRlX3NoaWZ0KDQsODU5MDA3MDU5KSxKLndyaXRlX3NoaWZ0KDQsNTQ1ODU0OHwoTz8wOjUzNjg3MDkxMikpO0ou'@;
put 'bDxKLmxlbmd0aDspSi53cml0ZV9zaGlmdCgxLE8/MDozMik7cmV0dXJuIEp9KDAsTykpLGtpKEosIkNvZGVQYWdlIixabCh2ZT8xMjAwOjEyNTIpKSx2ZSYma2koSiwiRFNGIixabCgwKSksdmUmJmtpKEosIkV4Y2VsOUZpbGUiKSxraShKLCJSUlRhYklkIixmdW5jdGlvbiBhTChNKXtmb3Io'@;
put 'dmFyIEY9Z3IoMipNKSxPPTA7TzxNOysrTylGLndyaXRlX3NoaWZ0KDIsTysxKTtyZXR1cm4gRn0oTS5TaGVldE5hbWVzLmxlbmd0aCkpLHZlJiZNLnZiYXJhdyYma2koSiwiT2JQcm9qIiksdmUmJk0udmJhcmF3JiZraShKLCJDb2RlTmFtZSIscmEoeWUuQ29kZU5hbWV8fCJUaGlzV29ya2Jv'@;
put 'b2siKSksa2koSiwiQnVpbHRJbkZuR3JvdXBDb3VudCIsWmwoMTcpKSxraShKLCJXaW5Qcm90ZWN0IixYYSghMSkpLGtpKEosIlByb3RlY3QiLFhhKCExKSksa2koSiwiUGFzc3dvcmQiLFpsKDApKSx2ZSYma2koSiwiUHJvdDRSZXYiLFhhKCExKSksdmUmJmtpKEosIlByb3Q0UmV2UGFzcyIs'@;
put 'WmwoMCkpLGtpKEosIldpbmRvdzEiLGZ1bmN0aW9uIERaKCl7dmFyIE09Z3IoMTgpO3JldHVybiBNLndyaXRlX3NoaWZ0KDIsMCksTS53cml0ZV9zaGlmdCgyLDApLE0ud3JpdGVfc2hpZnQoMiwyOTI4MCksTS53cml0ZV9zaGlmdCgyLDE3NjAwKSxNLndyaXRlX3NoaWZ0KDIsNTYpLE0ud3Jp'@;
put 'dGVfc2hpZnQoMiwwKSxNLndyaXRlX3NoaWZ0KDIsMCksTS53cml0ZV9zaGlmdCgyLDEpLE0ud3JpdGVfc2hpZnQoMiw1MDApLE19KCkpLGtpKEosIkJhY2t1cCIsWGEoITEpKSxraShKLCJIaWRlT2JqIixabCgwKSksa2koSiwiRGF0ZTE5MDQiLFhhKCJ0cnVlIj09ZnVuY3Rpb24gQlMoTSl7'@;
put 'cmV0dXJuIE0uV29ya2Jvb2smJk0uV29ya2Jvb2suV0JQcm9wcyYmTHIoTS5Xb3JrYm9vay5XQlByb3BzLmRhdGUxOTA0KT8idHJ1ZSI6ImZhbHNlIn0oTSkpKSxraShKLCJDYWxjUHJlY2lzaW9uIixYYSghMCkpLHZlJiZraShKLCJSZWZyZXNoQWxsIixYYSghMSkpLGtpKEosIkJvb2tCb29s'@;
put 'IixabCgwKSksbWM9ZTMoWzAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1LDAsMTY3NzcyMTUsMTY3MTE2ODAsNjUyODAsMjU1LDE2Nzc2OTYwLDE2NzExOTM1LDY1NTM1XSksZnVuY3Rpb24gZngoTSxGLE8peygoKEZ8fHt9KS5TdHlsZXN8fHt9'@;
put 'KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oSil7a2koTSwiRm9udCIsZnVuY3Rpb24gV0EoTSxGKXt2YXIgTz1NLm5hbWV8fCJBcmlhbCIsSj1GJiY1PT1GLmJpZmYscGU9Z3Io'@;
put 'Sj8xNStPLmxlbmd0aDoxNisyKk8ubGVuZ3RoKTtwZS53cml0ZV9zaGlmdCgyLDIwKihNLnN6fHwxMikpO3ZhciB5ZT0wO3JldHVybiBNLmJvbGQmJih5ZXw9MSksTS5pdGFsaWMmJih5ZXw9MiksTS5zdHJpa2UmJih5ZXw9OCksTS5zaGFkb3cmJih5ZXw9MzIpLHBlLndyaXRlX3NoaWZ0KDEs'@;
put 'eWUpLHBlLndyaXRlX3NoaWZ0KDEsMCkscGUud3JpdGVfc2hpZnQoMixNLmNvbG9yP0MzKE0uY29sb3IsNjQpOjY0KSxwZS53cml0ZV9zaGlmdCgyLE0uYm9sZD83MDA6NDAwKSxwZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PU0udmFsaWduPzE6InN1YiI9PU0udmFsaWduPzI6MCkscGUud3Jp'@;
put 'dGVfc2hpZnQoMSxNLnVuZGVybGluZXx8MCkscGUud3JpdGVfc2hpZnQoMSxwZS5mYW1pbHl8fDApLHBlLndyaXRlX3NoaWZ0KDEscGUuY2hhcnNldHx8MCkscGUud3JpdGVfc2hpZnQoMSwwKSxwZS53cml0ZV9zaGlmdCgxLE8ubGVuZ3RoKSxKfHxwZS53cml0ZV9zaGlmdCgxLDEpLHBlLndy'@;
put 'aXRlX3NoaWZ0KChKPzE6MikqTy5sZW5ndGgsTyxKPyJzYmNzIjoidXRmMTZsZSIpLHBlfShKLE8pKX0pfShKLE0sTyksZnVuY3Rpb24gTU8oTSxGLE8pe0YmJltbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oSil7Zm9yKHZhciBpZT1KWzBdO2llPD1K'@;
put 'WzFdOysraWUpbnVsbCE9RltpZV0mJmtpKE0sIkZvcm1hdCIscUEoaWUsRltpZV0sTykpfSl9KEosTS5TU0YsTyksZnVuY3Rpb24gSVcoTSxGKXtmb3IodmFyIE89MDtPPDE2OysrTylraShNLCJYRiIsVXAoe251bUZtdElkOjAsc3R5bGU6ITB9LDAsRikpO0YuY2VsbFhmcy5mb3JFYWNoKGZ1'@;
put 'bmN0aW9uKEope2tpKE0sIlhGIixVcChKLDAsRikpfSl9KEosTyksa2koSiwiUGFsZXR0ZSIsZnVuY3Rpb24geHQoTSl7dmFyIEY9Z3IoMjI2KTtGLndyaXRlX3NoaWZ0KDIsNTYpO2Zvcih2YXIgTz0wO088NTY7KytPKXt2YXIgSj1NW08rOF18fFNoW08rOF07Ri53cml0ZV9zaGlmdCgxLEpb'@;
put 'MF0pLEYud3JpdGVfc2hpZnQoMSxKWzFdKSxGLndyaXRlX3NoaWZ0KDEsSlsyXSksRi53cml0ZV9zaGlmdCgxLDApfXJldHVybiBGfShtYykpLG1jPVh0KFNoKSx2ZSYma2koSiwiVXNlc0VMRnMiLFhhKCExKSk7dmFyIFllPUouZW5kKCkscWU9UmwoKTt2ZSYma2kocWUsIkNvdW50cnkiLGZ1'@;
put 'bmN0aW9uIE5yKE0pe3JldHVybiBNfHwoTT1ncig0KSksTS53cml0ZV9zaGlmdCgyLDEpLE0ud3JpdGVfc2hpZnQoMiwxKSxNfSgpKSx2ZSYmTy5TdHJpbmdzJiZmdW5jdGlvbiBoeChNLEYsTyxKKXt2YXIgaWU9Snx8KE98fFtdKS5sZW5ndGh8fDA7aWYoaWU8PTgyMjQpcmV0dXJuIGtpKE0s'@;
put 'RixPLGllKTt2YXIgcGU9K0Z8fCtkeFtGXTtpZighaXNOYU4ocGUpKXtmb3IodmFyIHllPU8ucGFydHN8fFtdLHZlPTAsTWU9MCxqZT0wO2plKyh5ZVt2ZV18fDgyMjQpPD04MjI0OylqZSs9eWVbdmVdfHw4MjI0LHZlKys7dmFyIFllPU0ubmV4dCg0KTtmb3IoWWUud3JpdGVfc2hpZnQoMixw'@;
put 'ZSksWWUud3JpdGVfc2hpZnQoMixqZSksTS5wdXNoKE8uc2xpY2UoTWUsTWUramUpKSxNZSs9amU7TWU8aWU7KXtmb3IoKFllPU0ubmV4dCg0KSkud3JpdGVfc2hpZnQoMiw2MCksamU9MDtqZSsoeWVbdmVdfHw4MjI0KTw9ODIyNDspamUrPXllW3ZlXXx8ODIyNCx2ZSsrO1llLndyaXRlX3No'@;
put 'aWZ0KDIsamUpLE0ucHVzaChPLnNsaWNlKE1lLE1lK2plKSksTWUrPWplfX19KHFlLCJTU1QiLGZ1bmN0aW9uIFFpKE0sRil7dmFyIE89Z3IoOCk7Ty53cml0ZV9zaGlmdCg0LE0uQ291bnQpLE8ud3JpdGVfc2hpZnQoNCxNLlVuaXF1ZSk7Zm9yKHZhciBKPVtdLGllPTA7aWU8TS5sZW5ndGg7'@;
put 'KytpZSlKW2llXT1uYShNW2llXSxGKTt2YXIgcGU9eChbT10uY29uY2F0KEopKTtyZXR1cm4gcGUucGFydHM9W08ubGVuZ3RoXS5jb25jYXQoSi5tYXAoZnVuY3Rpb24oeWUpe3JldHVybiB5ZS5sZW5ndGh9KSkscGV9KE8uU3RyaW5ncyxPKSksa2kocWUsIkVPRiIpO3ZhciBpdD1xZS5lbmQo'@;
put 'KSxodD1SbCgpLGt0PTAsdXQ9MDtmb3IodXQ9MDt1dDxNLlNoZWV0TmFtZXMubGVuZ3RoOysrdXQpa3QrPSh2ZT8xMjoxMSkrKHZlPzI6MSkqTS5TaGVldE5hbWVzW3V0XS5sZW5ndGg7dmFyIHZ0PVllLmxlbmd0aCtrdCtpdC5sZW5ndGg7Zm9yKHV0PTA7dXQ8TS5TaGVldE5hbWVzLmxlbmd0'@;
put 'aDsrK3V0KWtpKGh0LCJCb3VuZFNoZWV0OCIsdHUoe3Bvczp2dCxoczoocGVbdXRdfHx7fSkuSGlkZGVufHwwLGR0OjAsbmFtZTpNLlNoZWV0TmFtZXNbdXRdfSxPKSksdnQrPUZbdXRdLmxlbmd0aDt2YXIgRHQ9aHQuZW5kKCk7aWYoa3QhPUR0Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkJT'@;
put 'OCAiK2t0KyIgIT0gIitEdC5sZW5ndGgpO3ZhciBBdD1bXTtyZXR1cm4gWWUubGVuZ3RoJiZBdC5wdXNoKFllKSxEdC5sZW5ndGgmJkF0LnB1c2goRHQpLGl0Lmxlbmd0aCYmQXQucHVzaChpdCksWGMoW0F0XSl9ZnVuY3Rpb24gX3goTSxGKXt2YXIgTz1GfHx7fTtzd2l0Y2goTy5iaWZmfHwy'@;
put 'KXtjYXNlIDg6Y2FzZSA1OnJldHVybiBmdW5jdGlvbiBTTyhNLEYpe3ZhciBPPUZ8fHt9LEo9W107SGgoRiYmRi5QUEl8fDk2KSxNJiYhTS5TU0YmJihNLlNTRj1DLmdldF90YWJsZSgpKSxNJiZNLlNTRiYmKEsoQyksQy5sb2FkX3RhYmxlKE0uU1NGKSxPLnJldnNzZj1EZShNLlNTRiksTy5y'@;
put 'ZXZzc2ZbTS5TU0ZbNjU1MzVdXT0wLE8uc3NmPU0uU1NGKSxNLlN0eWxlcz17Rm9udHM6Ty5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJtaW5vciJ9XSxGaWxsczpPLkZpbGxzPVt7cGF0dGVyblR5cGU6'@;
put 'Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpPLkJvcmRlcnM9W3t9XSxEWEY6Ty5EWEY9TS5TdHlsZXMmJk0uU3R5bGVzLkRYRnx8W119LHkzKE8uRm9udHNbMF0pLE8uU3RyaW5ncz1bXSxPLlN0cmluZ3MuQ291bnQ9MCxPLlN0cmluZ3MuVW5pcXVlPTAsJDI/Ty5y'@;
put 'ZXZTdHJpbmdzPW5ldyBNYXA6KE8ucmV2U3RyaW5ncz17fSxPLnJldlN0cmluZ3MuZm9vPVtdLGRlbGV0ZSBPLnJldlN0cmluZ3MuZm9vKSx4eChPKSxPLmNlbGxYZnM9W10sTy5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0scnUoTy5jZWxsWGZzLE8uY2VsbFN0eWxlWGZzLHt9LHty'@;
put 'ZXZzc2Y6e0dlbmVyYWw6MH19KSxNLlByb3BzfHwoTS5Qcm9wcz17fSk7Zm9yKHZhciBpZT0wO2llPE0uU2hlZXROYW1lcy5sZW5ndGg7KytpZSlKW0oubGVuZ3RoXT1neChpZSxPLE0pO3JldHVybiBKLnVuc2hpZnQoc28oTSxKLE8pKSxYYyhbSl0pfShNLEYpO2Nhc2UgNDpjYXNlIDM6Y2Fz'@;
put 'ZSAyOnJldHVybiBmdW5jdGlvbiBTOChNLEYpe3ZhciBPPUZ8fHt9O251bGwhPXRlJiZudWxsPT1PLmRlbnNlJiYoTy5kZW5zZT10ZSk7Zm9yKHZhciBKPVJsKCksaWU9MCxwZT0wO3BlPE0uU2hlZXROYW1lcy5sZW5ndGg7KytwZSlNLlNoZWV0TmFtZXNbcGVdPT1PLnNoZWV0JiYoaWU9cGUp'@;
put 'O2lmKDA9PWllJiZPLnNoZWV0JiZNLlNoZWV0TmFtZXNbMF0hPU8uc2hlZXQpdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrTy5zaGVldCk7cmV0dXJuIGtpKEosND09Ty5iaWZmPzEwMzM6Mz09Ty5iaWZmPzUyMTo5LExoKDAsMTYsTykpLGZ1bmN0aW9uIHdPKE0sRixPLEop'@;
put 'e3ZhciB5ZSxpZT1BcnJheS5pc0FycmF5KEYpLHBlPWJvKEZbIiFyZWYiXXx8IkExIiksdmU9IiIsTWU9W107aWYocGUuZS5jPjI1NXx8cGUuZS5yPjE2MzgzKXtpZihKLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKEZbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1p'@;
put 'dCBBMTpJVjE2Mzg0Iik7cGUuZS5jPU1hdGgubWluKHBlLmUuYywyNTUpLHBlLmUucj1NYXRoLm1pbihwZS5lLmMsMTYzODMpLHllPUFpKHBlKX1mb3IodmFyIGplPXBlLnMucjtqZTw9cGUuZS5yOysramUpe3ZlPXJzKGplKTtmb3IodmFyIFllPXBlLnMuYztZZTw9cGUuZS5jOysrWWUpe2pl'@;
put 'PT09cGUucy5yJiYoTWVbWWVdPWZvKFllKSkseWU9TWVbWWVdK3ZlO3ZhciBxZT1pZT8oRltqZV18fFtdKVtZZV06Rlt5ZV07cWUmJmJPKE0scWUsamUsWWUpfX19KEosTS5TaGVldHNbTS5TaGVldE5hbWVzW2llXV0sMCxPKSxraShKLDEwKSxKLmVuZCgpfShNLEYpfXRocm93IG5ldyBFcnJv'@;
put 'cigiaW52YWxpZCB0eXBlICIrTy5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIE51PWZ1bmN0aW9uKCl7dmFyIE09e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIE8ocWUsaXQpe3ZhciBodD1pdHx8e307bnVsbCE9dGUmJm51bGw9PWh0LmRlbnNl'@;
put 'JiYoaHQuZGVuc2U9dGUpO3ZhciBrdD1odC5kZW5zZT9bXTp7fSx1dD0ocWU9cWUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighdXQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIgdnQ9cWUu'@;
put 'bWF0Y2goLzxcL3RhYmxlL2kpLFB0PXV0LmluZGV4LER0PXZ0JiZ2dC5pbmRleHx8cWUubGVuZ3RoLEF0PWZ1bmN0aW9uIHB0KE0sRixPKXtpZihPbnx8InN0cmluZyI9PXR5cGVvZiBGKXJldHVybiBNLnNwbGl0KEYpO2Zvcih2YXIgSj1NLnNwbGl0KEYpLGllPVtKWzBdXSxwZT0xO3BlPEou'@;
put 'bGVuZ3RoOysrcGUpaWUucHVzaChPKSxpZS5wdXNoKEpbcGVdKTtyZXR1cm4gaWV9KHFlLnNsaWNlKFB0LER0KSwvKDo/PHRyW14+XSo+KS9pLCI8dHI+IiksWnQ9LTEsZ249MCxxbj0wLHVuPTAsSm49e3M6e3I6MWU3LGM6MWU3fSxlOntyOjAsYzowfX0sWW49W107Zm9yKFB0PTA7UHQ8QXQu'@;
put 'bGVuZ3RoOysrUHQpe3ZhciBMbj1BdFtQdF0udHJpbSgpLHRyPUxuLnNsaWNlKDAsMykudG9Mb3dlckNhc2UoKTtpZigiPHRyIiE9dHIpe2lmKCI8dGQiPT10cnx8Ijx0aCI9PXRyKXt2YXIgcnI9TG4uc3BsaXQoLzxcL3RbZGhdPi9pKTtmb3IoRHQ9MDtEdDxyci5sZW5ndGg7KytEdCl7dmFy'@;
put 'IFVuPXJyW0R0XS50cmltKCk7aWYoVW4ubWF0Y2goLzx0W2RoXS9pKSl7Zm9yKHZhciBYcj1VbixwaT0wOyI8Ij09WHIuY2hhckF0KDApJiYocGk9WHIuaW5kZXhPZigiPiIpKT4tMTspWHI9WHIuc2xpY2UocGkrMSk7Zm9yKHZhciBPaT0wO09pPFluLmxlbmd0aDsrK09pKXt2YXIgTmk9WW5b'@;
put 'T2ldO05pLnMuYz09Z24mJk5pLnMucjxadCYmWnQ8PU5pLmUuciYmKGduPU5pLmUuYysxLE9pPS0xKX12YXIgZGk9bG4oVW4uc2xpY2UoMCxVbi5pbmRleE9mKCI+IikpKTt1bj1kaS5jb2xzcGFuPytkaS5jb2xzcGFuOjEsKChxbj0rZGkucm93c3Bhbik+MXx8dW4+MSkmJlluLnB1c2goe3M6'@;
put 'e3I6WnQsYzpnbn0sZTp7cjpadCsocW58fDEpLTEsYzpnbit1bi0xfX0pO3ZhciBfcj1kaS50fHxkaVsiZGF0YS10Il18fCIiO2lmKCFYci5sZW5ndGgpe2duKz11bjtjb250aW51ZX1pZihYcj1JbChYciksSm4ucy5yPlp0JiYoSm4ucy5yPVp0KSxKbi5lLnI8WnQmJihKbi5lLnI9WnQpLEpu'@;
put 'LnMuYz5nbiYmKEpuLnMuYz1nbiksSm4uZS5jPGduJiYoSm4uZS5jPWduKSxYci5sZW5ndGgpe3ZhciBBbj17dDoicyIsdjpYcn07aHQucmF3fHwhWHIudHJpbSgpLmxlbmd0aHx8InMiPT1fcnx8KEFuPVpuKFhyLGh0KSksaHQuZGVuc2U/KGt0W1p0XXx8KGt0W1p0XT1bXSksa3RbWnRdW2du'@;
put 'XT1Bbik6a3RbRGkoe3I6WnQsYzpnbn0pXT1Bbixnbis9dW59fX19fWVsc2V7aWYoKytadCxodC5zaGVldFJvd3MmJmh0LnNoZWV0Um93czw9WnQpey0tWnQ7YnJlYWt9Z249MH19cmV0dXJuIGt0WyIhcmVmIl09QWkoSm4pLFluLmxlbmd0aCYmKGt0WyIhbWVyZ2VzIl09WW4pLGt0fWZ1bmN0'@;
put 'aW9uIGllKHFlLGl0LGh0LGt0LHV0LHZ0KXt2YXIgQXQsUHQ9cWVbIiFtZXJnZXMiXXx8W10sRHQ9W10sWnQ9e3N0eWxlOltdfSxnbj0hMTtmdW5jdGlvbiBxbihGaSxvcyxsbyl7dmFyIEZvPSIiLHhvPTA7aWYoQXRbRmldKXN3aXRjaChBdFtGaV0uc3R5bGUpe2Nhc2UidGhpbiI6Y2FzZSJo'@;
put 'YWlyIjpGbz0ic29saWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW0iOkZvPSJzb2xpZCIseG89MjticmVhaztjYXNlInRoaWNrIjpGbz0ic29saWQiLHhvPTM7YnJlYWs7Y2FzZSJkb3VibGUiOkZvPSJkb3VibGUiLHhvPTM7YnJlYWs7Y2FzZSJkb3R0ZWQiOmNhc2UiZGFzaERvdERvdCI6Rm89'@;
put 'ImRvdHRlZCIseG89MTticmVhaztjYXNlIm1lZGl1bURhc2hEb3REb3QiOkZvPSJkb3R0ZWQiLHhvPTI7YnJlYWs7Y2FzZSJkYXNoZWQiOmNhc2UiZGFzaERvdCI6Y2FzZSJzbGFudERhc2hEb3QiOkZvPSJkYXNoZWQiLHhvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoZWQiOmNhc2UibWVkaXVt'@;
put 'RGFzaERvdCI6Rm89ImRhc2hlZCIseG89Mn1lOmlmKDA9PXhvKXtzd2l0Y2goRmkpe2Nhc2UidG9wIjotLW9zO2JyZWFrO2Nhc2UibGVmdCI6LS1sbzticmVhaztjYXNlImJvdHRvbSI6KytvczticmVhaztjYXNlInJpZ2h0IjorK2xvfXZhciB2aT1vcz49MCYmbG8+PTA/a3QuZGVuc2U/KHFl'@;
put 'W29zXXx8W10pW2xvXTpxZVtEaSh7cjpvcyxjOmxvfSldOm51bGw7aWYodmkpe2lmKHZpLnMmJnZpLnNbe3RvcDoiYm90dG9tIixib3R0b206InRvcCIsbGVmdDoicmlnaHQiLHJpZ2h0OiJsZWZ0In1bRmldXSlicmVhayBlO3ZpLnMmJnZpLnMuZmdDb2xvciYmKHhvPTEpfUF0LmZnQ29sb3Im'@;
put 'Jih4bz0xKSwhdmkmJmduJiYwPT14byYmKHhvPTEpfTAhPXhvJiZ4byYmKFp0LnN0eWxlLnB1c2goImJvcmRlci0iK0ZpKyItc3R5bGU6IisoRm98fCJ0cmFuc3BhcmVudCIpKSxadC5zdHlsZS5wdXNoKCJib3JkZXItIitGaSsiLXdpZHRoOiIreG8rInB4IiksIiI9PUZvP1p0LnN0eWxlLnB1'@;
put 'c2goImJvcmRlci0iK0ZpKyItY29sb3I6IHRyYW5zcGFyZW50Iik6QXRbRmldLmNvbG9yJiZBdFtGaV0uY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJib3JkZXItIitGaSsiLWNvbG9yOiMiK1B1KEF0W0ZpXS5jb2xvci5yZ2IpKSl9Zm9yKHZhciB1bj1pdC5zLmM7dW48PWl0LmUuYzsrK3Vu'@;
put 'KXtmb3IodmFyIEpuPTAsWW49MCxMbj0wO0xuPFB0Lmxlbmd0aDsrK0xuKWlmKCEoUHRbTG5dLnMucj5odHx8UHRbTG5dLnMuYz51bnx8UHRbTG5dLmUucjxodHx8UHRbTG5dLmUuYzx1bikpe2lmKFB0W0xuXS5zLnI8aHR8fFB0W0xuXS5zLmM8dW4pe0puPS0xO2JyZWFrfUpuPVB0W0xuXS5l'@;
put 'LnItUHRbTG5dLnMucisxLFluPVB0W0xuXS5lLmMtUHRbTG5dLnMuYysxO2JyZWFrfWlmKCEoSm48MCkpe3ZhciB0cj1EaSh7cjpodCxjOnVufSkscnI9a3QuZGVuc2U/KHFlW2h0XXx8W10pW3VuXTpxZVt0cl07cnI/Z249ITE6KGduPSEwLHJyPXt0OiJ6IixzOnt9fSk7dmFyIFVuPSJ6Ij09'@;
put 'cnIudD8iIjpyci5ofHxaaShyci53fHwoV3MocnIpLHJyLncpfHwiIik7aWYoWnQ9e3N0eWxlOltdfSxBdD1yci5zKXt2YXIgWHI9MTtpZigoInN1cGVyIj09QXQudmFsaWdufHwic3ViIj09QXQudmFsaWduKSYmKFhyPS44MyxVbj1kcigic3BhbiIsVW4se3N0eWxlOiJ2ZXJ0aWNhbC1hbGln'@;
put 'bjogIitBdC52YWxpZ259KSksWnQuc3R5bGUucHVzaCgiZm9udC13ZWlnaHQ6IisoQXQuYm9sZD83MDA6NDAwKSksQXQuaXRhbGljJiZadC5zdHlsZS5wdXNoKCJmb250LXN0eWxlOiBpdGFsaWMiKSwoQXQudW5kZXJsaW5lfHxBdC5zdHJpa2UpJiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWRlY29y'@;
put 'YXRpb246IisoQXQudW5kZXJsaW5lPyIgdW5kZXJsaW5lIjoiIikrKEF0LnN0cmlrZT8iIGxpbmUtdGhyb3VnaCI6IiIpKSxBdC5jb2xvciYmQXQuY29sb3IucmdiJiZadC5zdHlsZS5wdXNoKCJjb2xvcjogIyIrUHUoQXQuY29sb3IucmdiKSksQXQubmFtZSYmWnQuc3R5bGUucHVzaCgiZm9u'@;
put 'dC1mYW1pbHk6IitBdC5uYW1lKyIsIHNhbnMtc2VyaWYiKSxBdC5zeiYmWnQuc3R5bGUucHVzaCgiZm9udC1zaXplOiIrQXQuc3oqWHIrInB0IiksbnVsbCE9PUF0LnBhdHRlcm5UeXBlJiZBdC5mZ0NvbG9yJiZBdC5mZ0NvbG9yLnJnYiYmWnQuc3R5bGUucHVzaCgiYmFja2dyb3VuZC1jb2xv'@;
put 'cjogIyIrUHUoQXQuZmdDb2xvci5yZ2IpKSxbInRvcCIsImxlZnQiXS5mb3JFYWNoKGZ1bmN0aW9uKEZpKXtxbihGaSxodCx1bil9KSxKbj4xfHxZbj4xKXt2YXIgcGk9RGkoe3I6aHQrSm4tMSxjOnVuK1luLTF9KSxPaT1rdC5kZW5zZT8ocWVbaHQrSm4tMV18fFtdKVt1bitZbi0xXTpxZVtw'@;
put 'aV0sZGk9QXQ7QXQ9T2kmJk9pLnN8fEF0LFsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKEZpKXtxbihGaSxodCx1bil9KSxBdD1kaX1lbHNlWyJib3R0b20iLCJyaWdodCJdLmZvckVhY2goZnVuY3Rpb24oRmkpe3FuKEZpLGh0LHVuKX0pO2lmKEF0LmFsaWdubWVudCl7aWYo'@;
put 'QXQuYWxpZ25tZW50Lmhvcml6b250YWw/WnQuc3R5bGUucHVzaCgidGV4dC1hbGlnbjogIisoTVtBdC5hbGlnbm1lbnQuaG9yaXpvbnRhbF18fEF0LmFsaWdubWVudC5ob3Jpem9udGFsKSk6Im4iPT1yci50JiZadC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdodCIpLEF0LmFsaWdubWVu'@;
put 'dC52ZXJ0aWNhbCl7dmFyIF9yPUF0LmFsaWdubWVudC52ZXJ0aWNhbDtadC5zdHlsZS5wdXNoKCJ2ZXJ0aWNhbC1hbGlnbjogIisoImNlbnRlciI9PV9yPyJtaWRkbGUiOl9yKSl9aWYoQXQuYWxpZ25tZW50LndyYXBUZXh0KVp0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIp'@;
put 'O2Vsc2V7dmFyIEFuPWt0LmRlbnNlPyhxZVtodF18fFtdKVt1bisxXTpxZVtEaSh7cjpodCxjOnVuKzF9KV07QW4mJiJ6IiE9QW4udCYmWnQuc3R5bGUucHVzaCgid2hpdGUtc3BhY2U6IHByZS13cmFwIil9fWVsc2UibiI9PXJyLnQmJlp0LnN0eWxlLnB1c2goInRleHQtYWxpZ246IHJpZ2h0'@;
put 'Iik7dmFyIE1yPSgocWVbIiFjb2xzIl18fFtdKVt1bl18fHt9KS53cHg7bnVsbD09TXImJihNcj0oKHFlWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCl9dmFyIG9yPTA7aWYoWW48PTEmJkpuPD0xJiYob3I9KChxZVsiIWNvbHMiXXx8W10pW3VuXXx8e30pLndweCkmJlp0LnN0'@;
put 'eWxlLnB1c2goIndpZHRoOiAiK29yKyJweCIpLHFlWyIhY29uZGZtdCJdJiZwZShycixodCx1bixxZVsiIWNvbmRmbXQiXSxadC5zdHlsZSxxZSksMD09WnQuc3R5bGUubGVuZ3RoP2RlbGV0ZSBadC5zdHlsZTpadC5zdHlsZT1adC5zdHlsZS5qb2luKCI7Iiksa3QuY3NzKXt2YXIgVG49dXQu'@;
put 'aW5kZXhPZihadC5zdHlsZSk7LTE9PVRuJiYodXQucHVzaChadC5zdHlsZSksVG49dXQubGVuZ3RoLTEpLGRlbGV0ZSBadC5zdHlsZSxadC5jbGFzcz0ic2pzIisodnR8fCIiKSsiLSIrVG59Sm4+MSYmKFp0LnJvd3NwYW49Sm4pLFluPjEmJihadC5jb2xzcGFuPVluKSxrdC5lZGl0YWJsZT9V'@;
put 'bj0nPHNwYW4gY29udGVudGVkaXRhYmxlPSJ0cnVlIj4nK1VuKyI8L3NwYW4+IjpyciYmKFp0WyJkYXRhLXQiXT1yciYmcnIudHx8InoiLG51bGwhPXJyLnYmJihadFsiZGF0YS12Il09cnIudiksbnVsbCE9cnIueiYmKFp0WyJkYXRhLXoiXT1yci56KSksWnQuaWQ9KGt0LmlkfHwic2pzIikr'@;
put 'Ii0iK3RyLER0LnB1c2goZHIoInRkIixVbixadCkpfX12YXIgU2ksQ3I9e3N0eWxlOltdfTsoU2k9cWVbIiFzaGVldEZvcm1hdCJdKSYmU2kucm93JiYoTjYoU2kucm93KSxTaS5yb3cuaHB4JiYoQ3Iuc3R5bGUucHVzaChbImhlaWdodCIsU2kucm93LmhweCsicHgiXSksQ3IuaGVpZ2h0PU1h'@;
put 'dGgucm91bmQoU2kucm93LmhweCkpKTt2YXIgWnI9cWVbIiFyb3dzIl07aWYoWnImJlpyW2h0XSl7dmFyIFVpPVpyW2h0XTtVaS5ocHgmJihDci5zdHlsZS5wdXNoKFsiaGVpZ2h0IiwrVWkuaHB4KyJweCJdKSxDci5oZWlnaHQ9TWF0aC5yb3VuZChVaS5ocHgpKSxVaS5oaWRkZW4mJkNyLnN0'@;
put 'eWxlLnB1c2goWyJkaXNwbGF5Iiwibm9uZSJdKX12YXIgUm89W107cmV0dXJuIENyLnN0eWxlPUNyLnN0eWxlLnJldmVyc2UoKS5maWx0ZXIoZnVuY3Rpb24oRmkpe3JldHVybiEoUm8uaW5kZXhPZihGaVswXSk+LTF8fChSby5wdXNoKEZpWzBdKSwwKSl9KS5tYXAoZnVuY3Rpb24oRmkpe3Jl'@;
put 'dHVybiBGaVswXSsiOiIrRmlbMV19KSwwPT1Dci5zdHlsZS5sZW5ndGg/ZGVsZXRlIENyLnN0eWxlOkNyLnN0eWxlPUNyLnN0eWxlLmpvaW4oIjsiKSxkcigidHIiLER0LmpvaW4oIiIpLENyKX1mdW5jdGlvbiBwZShxZSxpdCxodCxrdCx1dCx2dCl7a3QuZm9yRWFjaChmdW5jdGlvbihQdCl7'@;
put 'aWYoUHQuX3JlZnx8KFB0Ll9yZWY9InN0cmluZyI9PXR5cGVvZiBQdC5yZWY/SHMoUHQucmVmKTpQdC5yZWYpLCEoUHQuX3JlZi5zLmM+aHR8fFB0Ll9yZWYuZS5jPGh0fHxQdC5fcmVmLnMucj5pdHx8UHQuX3JlZi5lLnI8aXR8fCJzY2FsZSIhPT1QdC50KSl7aWYoIm4iIT1xZS50KXJldHVy'@;
put 'bjt2YXIgRHQ7aWYobnVsbD09UHQuX21pbil7UHQuX3ZhbHVlcz1bXTtmb3IodmFyIEF0PVB0Ll9yZWYucy5yO0F0PD1QdC5fcmVmLmUucjsrK0F0KWZvcih2YXIgWnQ9UHQuX3JlZi5zLmM7WnQ8PVB0Ll9yZWYuZS5jOysrWnQpe3ZhciBnbj1BcnJheS5pc0FycmF5KHZ0KT8odnRbQXRdfHxb'@;
put 'XSlbWnRdOnZ0W0RpKHtyOkF0LGM6WnR9KV07Z24mJiJuIj09Z24udCYmUHQuX3ZhbHVlcy5wdXNoKGduLnYpfWlmKFB0Ll92YWx1ZXMuc29ydChmdW5jdGlvbihxbix1bil7cmV0dXJuIHFuLXVufSksUHQuX21pbj1QdC5fdmFsdWVzWzBdLFB0Ll9tYXg9UHQuX3ZhbHVlcy5zbGljZSgtMSlb'@;
put 'MF0sUHQuX2JhbmQ9UHQuX21heC1QdC5fbWluLFB0LmNtaWQpe3N3aXRjaChQdC5jbWlkLnQpe2Nhc2UibnVtIjpQdC5fbWlkPVB0LmNtaWQudjticmVhaztjYXNlInBlcmNlbnQiOlB0Ll9taWQ9UHQuY21pZC52LzEwMCpQdC5fYmFuZCtQdC5fbWluO2JyZWFrO2Nhc2UicGVyY2VudGlsZSI6'@;
put 'UHQuX21pZD1mdW5jdGlvbiBmbihNLEYpe2lmKDA9PUYpcmV0dXJuIE1bMF07aWYoMTAwPT1GKXJldHVybiBNW00ubGVuZ3RoLTFdO3ZhciBKPUYvMTAwKihNLmxlbmd0aC0xKSxpZT1KLU1hdGguZmxvb3IoSik7cmV0dXJuIGllKk1bTWF0aC5jZWlsKEopXSsoMS1pZSkqTVtNYXRoLmZsb29y'@;
put 'KEopXX0oUHQuX3ZhbHVlcyxQdC5jbWlkLnYpfVB0Ll9iYW5kaD1QdC5fbWF4LVB0Ll9taWQsUHQuX2JhbmRsPVB0Ll9taWQtUHQuX21pbn19KER0PVB0LmNtaWQ/cWUudj49UHQuX21pZD9TXyhQdC5jbWlkLmNvbG9yLFB0LmNtYXguY29sb3IsKHFlLnYtUHQuX21pZCkvUHQuX2JhbmRoKTpT'@;
put 'XyhQdC5jbWluLmNvbG9yLFB0LmNtaWQuY29sb3IsKHFlLnYtUHQuX21pbikvUHQuX2JhbmRsKTpTXyhQdC5jbWluLmNvbG9yLFB0LmNtYXguY29sb3IsKHFlLnYtUHQuX21pbikvUHQuX2JhbmQpKSYmdXQucHVzaCgiYmFja2dyb3VuZC1jb2xvcjogIyIrRHQpfX0pfWZ1bmN0aW9uIHllKHFl'@;
put 'LGl0KXt2YXIgaHQ9e3NwYW46aXR8fDEsc3R5bGU6IiJ9LGt0PVtdO3JldHVybiBxZSYmcWUud3B4JiYoaHQud2lkdGg9TWF0aC5yb3VuZCg0KnFlLndweC8zKSxrdC5wdXNoKCJ3aWR0aDoiKyhxZS53cHh8fDApKyJweCIpKSxrdC5sZW5ndGg+MCYmKGh0LnN0eWxlPWt0LmpvaW4oIjsiKSks'@;
put 'ZHIoImNvbCIsbnVsbCxodCl9ZnVuY3Rpb24gdmUocWUsaXQsaHQpe3ZhciBrdD17Ym9yZGVyOjAsY2VsbHBhZGRpbmc6MCxjZWxsc3BhY2luZzowLHN0eWxlOlsiYm9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlIiwidGFibGUtbGF5b3V0OmZpeGVkIl0uam9pbigiOyIpfTtodCYmaHQuaWQmJihr'@;
put 'dC5pZD1odC5pZCk7dmFyIHV0PXFlWyIhY29scyJdLHZ0PXFlWyIhc2hlZXRGb3JtYXQiXTtpZihxZSYmdXQpe2Zvcih2YXIgUHQ9MCxBdD1pdC5zLmM7QXQ8PWl0LmUuYzsrK0F0KXt2YXIgWnQ9dXRbQXRdO1B0Kz1adCYmWnQud3B4P1p0LndweDp2dCYmdnQuY29sJiZ2dC5jb2wud3B4P3Z0'@;
put 'LmNvbC53cHg6NTN9a3Quc3R5bGUrPSI7d2lkdGg6IitQdCsicHgifXZhciBxbixnbj1bIjx0YWJsZSIrd2woa3QpKyI+Il07aWYoZ24ucHVzaCgiPHN0eWxlPnRkIHsgcGFkZGluZy10b3A6IDFweDsgcGFkZGluZy1yaWdodDoxcHg7IHBhZGRpbmctbGVmdDoxcHg7IHRleHQtYWxpZ246Z2Vu'@;
put 'ZXJhbDsgdmVydGljYWwtYWxpZ246Ym90dG9tOyBib3JkZXI6MXB4IHNvbGlkOyBib3JkZXItY29sb3I6IisoaHQmJmh0LmdyaWRjb2xvcj9odC5ncmlkY29sb3I6ZG4ocWVbIiFncmlkbGluZXMiXSk/InRyYW5zcGFyZW50IjoiYmxhY2siKSsiOyB3aGl0ZS1zcGFjZTpub3dyYXA7IHRleHQt'@;
put 'b3ZlcmZsb3c6ZWxsaXBzaXN9PC9zdHlsZT4iKSxnbi5wdXNoKCc8Y29sZ3JvdXAgc3Bhbj0iJysoaXQuZS5jLWl0LnMuYysxKSsnIj4nKSx1dCl7Zm9yKHZhciB1bj1pdC5zLmM7dW48TWF0aC5taW4odXQubGVuZ3RoLGl0LmUuYysxKTsrK3VuKSEocW49dXRbdW5dKSYmdnQmJnZ0LmNvbCYm'@;
put 'KHFuPXZ0LmNvbCkscW58fChxbj17d3B4OjUzfSksZ24ucHVzaCh5ZShxbiwxKSk7aXQuZS5jLWl0LnMuYysxPnV0Lmxlbmd0aCYmKHFuPW51bGwsdnQmJnZ0LmNvbCYmKHFuPXZ0LmNvbCkscW58fChxbj17d3B4OjUzfSksZ24ucHVzaCh5ZShxbixpdC5lLmMtaXQucy5jKzEtdXQubGVuZ3Ro'@;
put 'KSkpfWVsc2UgcW49bnVsbCx2dCYmdnQuY29sJiYocW49dnQuY29sKSxxbnx8KHFuPXt3cHg6NTN9KSxnbi5wdXNoKHllKHFuLGl0LmUuYy1pdC5zLmMrMSkpO3JldHVybiBnbi5wdXNoKCI8L2NvbGdyb3VwPiIpLGduLmpvaW4oIiIpfXZhciBNZT0nPGh0bWw+PGhlYWQ+PG1ldGEgY2hhcnNl'@;
put 'dD0idXRmLTgiLz48dGl0bGU+U2hlZXRKUyBUYWJsZSBFeHBvcnQ8L3RpdGxlPjwvaGVhZD48Ym9keT4nLGplPSI8L2JvZHk+PC9odG1sPiI7cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIEoocWUsaXQpe3JldHVybiBwMChPKHFlLGl0KSxpdCl9LHRvX3NoZWV0Ok8sX3JvdzppZSxCRUdJ'@;
put 'TjpNZSxFTkQ6amUsX3ByZWFtYmxlOnZlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gRihxZSl7dmFyIGl0PVtdLGh0PXt9LGt0PTA7cmV0dXJuIHFlLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKHV0LHZ0LFB0LER0LEF0KXt2YXIg'@;
put 'Z249bm4obG4odXQpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIikscW49cWUuc2xpY2Uoa3QsQXQpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2gocW4ubGVuZ3RoPjAmJihpdC5wdXNoKHt0OiJzIix2OnFuLHM6aHR9KSxodD1YdChodCkpLGduLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8i'@;
put 'IT12dD9odC5ib2xkPSEwOmRlbGV0ZSBodC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT12dD9odC5pdGFsaWM9ITA6ZGVsZXRlIGh0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9dnQ/aHQudW5kZXJsaW5lPTE6ZGVsZXRlIGh0LnVuZGVybGluZTticmVhaztjYXNlInMiOiIvIiE9dnQ/aHQu'@;
put 'c3RyaWtlPSEwOmRlbGV0ZSBodC5zdHJpa2V9cmV0dXJuIGt0PUF0K3V0Lmxlbmd0aCx1dH0pLGl0fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFllKHFlLGl0KXt2YXIgaHQ9aXR8fHt9LHV0PW51bGwhPWh0LmZvb3Rlcj9odC5mb290ZXI6amUsdnQ9W251bGwhPWh0LmhlYWRlcj9odC5oZWFkZXI6'@;
put 'TWUsIiJdLFB0PVtdLER0PShuZXcgRGF0ZSkudmFsdWVPZigpO3FlfHwocWU9e30pLHFlWyIhcmVmIl18fChxZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBBdD1IcyhxZVsiIXJlZiJdKTtpZihodC5kZW5zZT1BcnJheS5pc0FycmF5KHFlKSxodC5za2lwZW5kKXt2YXIgWnQ9QXQuZS5yO2U6Zm9y'@;
put 'KDtadD49QXQucy5yOy0tWnQpZm9yKHZhciBnbj1BdC5lLmM7Z24+PUF0LnMuYzstLWduKWlmKG51bGwhPSgoaHQuZGVuc2U/KHFlW1p0XXx8W10pW2duXTpxZVtEaSh7cjpadCxjOmdufSldKXx8e30pLnYpYnJlYWsgZTtBdC5lLnI9WnQ7dmFyIHFuPUF0LmUuYztlOmZvcig7cW4+PUF0LnMu'@;
put 'YzstLXFuKWZvcih2YXIgdW49QXQuZS5yO3VuPj1BdC5zLnI7LS11bilpZihudWxsIT0oKGh0LmRlbnNlPyhxZVt1bl18fFtdKVtxbl06cWVbRGkoe3I6dW4sYzpxbn0pXSl8fHt9KS52KWJyZWFrIGU7QXQuZS5jPXFufXZ0LnB1c2godmUocWUsQXQsaHQpKTtmb3IodmFyIEpuPUF0LnMucjtK'@;
put 'bjw9QXQuZS5yOysrSm4pdnQucHVzaChpZShxZSxBdCxKbixodCxQdCxEdCkpO3JldHVybiB2dC5wdXNoKCI8L3RhYmxlPiIrdXQpLGh0LmNzcyYmKHZ0WzFdPSI8c3R5bGU+XG4iK1B0Lm1hcChmdW5jdGlvbihZbixMbil7cmV0dXJuIi5zanMiK0R0KyItIitMbisiIHsiK1luKyJ9In0pLmpv'@;
put 'aW4oIlxuIikrIjwvc3R5bGU+IiksdnQuam9pbigiIil9fX0oKTtmdW5jdGlvbiB2eChNLEYsTyl7dmFyIEo9e307aWYodHlwZW9mIGdldENvbXB1dGVkU3R5bGU+InUiKXJldHVybiBKO3ZhciBpZT1nZXRDb21wdXRlZFN0eWxlKE0pO2lmKCg3MDA9PWllWyJmb250LXdlaWdodCJdfHwiYm9s'@;
put 'ZCI9PWllWyJmb250LXdlaWdodCJdKSYmKEouYm9sZD0hMCksKGllWyJmb250LXN0eWxlIl18fCIiKS5tYXRjaCgvaXRhbGljLykmJihKLml0YWxpYz0hMCksKGllWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKEoudW5kZXJsaW5lPTEpLChpZVsidGV4dC1k'@;
put 'ZWNvcmF0aW9uIl18fCIiKS5tYXRjaCgvbGluZS10aHJvdWdoLykmJihKLnN0cmlrZT0xKSxwYXJzZUludChpZVsiZm9udC1zaXplIl0pJiYoSi5zej1wYXJzZUZsb2F0KGllWyJmb250LXNpemUiXSkqKGllWyJmb250LXNpemUiXS5tYXRjaCgvcHgvKT8zLzQ6MSkpLGllWyJmb250LWZhbWls'@;
put 'eSJdJiYoSi5uYW1lPWllWyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksaWUuY29sb3Ipe3ZhciBwZT1YcChpZS5jb2xvci50b0xvd2VyQ2FzZSgpLCEwKTtwZT49MCYmKEouY29sb3I9e3JnYjpwZX0pfXN3aXRjaChpZVsidGV4dC10cmFuc2Zv'@;
put 'cm0iXSYmKEoudGV4dF90cmFuc2Zvcm09aWVbInRleHQtdHJhbnNmb3JtIl0udG9Mb3dlckNhc2UoKSksIm5vbmUiIT0oaWVbInRleHQtc2hhZG93Il18fCJub25lIikmJihKLnNoYWRvdz0hMCksaWVbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOkouYWxpZ25tZW50PXtob3Jpem9udGFs'@;
put 'OiJjZW50ZXIifTticmVhaztjYXNlInJpZ2h0IjpKLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOkouYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpKLmFsaWdubWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9'@;
put 'fXN3aXRjaChpZVsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJ0b3AiOmNhc2UibWlkZGxlIjpjYXNlImJvdHRvbSI6Si5hbGlnbm1lbnR8fChKLmFsaWdubWVudD17fSksSi5hbGlnbm1lbnQudmVydGljYWw9aWVbInZlcnRpY2FsLWFsaWduIl0sIm1pZGRsZSI9PUouYWxpZ25tZW50LnZlcnRp'@;
put 'Y2FsJiYoSi5hbGlnbm1lbnQudmVydGljYWw9ImNlbnRlciIpO2JyZWFrO2Nhc2Uic3ViIjpjYXNlInN1cGVyIjpKLnZhbGlnbj1pZVsidmVydGljYWwtYWxpZ24iXSxKLnN6JiYoSi5zei89LjgzKX12YXIgeWU9RiYmZ2V0Q29tcHV0ZWRTdHlsZShGKTtyZXR1cm4geWUmJk8mJkYmJlsibGVm'@;
put 'dCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIE1lPXZlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3ZlLnNsaWNlKDEpLGplPXllWyJib3JkZXItIit2ZSsiLXN0eWxlIl07aWYoKCJub25lIj09amV8fCFqZSkmJihqZT15ZVsiYm9yZGVyIitNZSsi'@;
put 'U3R5bGUiXSksIm5vbmUiIT1qZSYmamUpe3ZhciBZZT1wYXJzZUludCh5ZVsiYm9yZGVyLSIrdmUrIi13aWR0aCJdfHx5ZVsiYm9yZGVyIitNZSsiV2lkdGgiXSwxMCkscWU9InRoaW4iO2lmKFllPjApe3N3aXRjaChqZSl7Y2FzZSJkb3VibGUiOnFlPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFz'@;
put 'aGVkIjpxZT1ZZT49Mj8ibWVkaXVtRGFzaGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6cWU9WWU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOnFlPVllPj0zPyJ0aGljayI6WWU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKEpbdmVdPXtzdHls'@;
put 'ZTpxZX0seWVbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8eWVbImJvcmRlciIrTWUrIkNvbG9yIl0pe3ZhciBpdD1YcCgoeWVbImJvcmRlci0iK3ZlKyItY29sb3IiXXx8eWVbImJvcmRlciIrTWUrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO2l0Pj0wJiYoSlt2ZV0uY29sb3I9e3JnYjpp'@;
put 'dH0pfX19fSksSn1mdW5jdGlvbiB5eChNLEYsTyl7dmFyIEo9TS5jaGlsZE5vZGVzO2lmKDE9PU0ubm9kZVR5cGUpc3dpdGNoKE0udGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOkYubGVuZ3RoPjAmJkYucHVzaCh7dDoidCIsdjoiXG4iLHM6T30pO2JyZWFrO2Nhc2Uic2VsZWN0Ijpy'@;
put 'ZXR1cm4gZnVuY3Rpb24ga08oTSxGLE8pe0YucHVzaCh7dDoidCIsdjpNLmNoaWxkcmVuW00uc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6T30pfShNLEYsTyl9aWYoSi5sZW5ndGg+MCl7dmFyIGllPXZ4KE0sbnVsbCwhMSk7TyYmKE8udW5kZXJsaW5lJiYoaWUudW5kZXJsaW5lPU8udW5k'@;
put 'ZXJsaW5lKSxPLnN0cmlrZSYmKGllLnN0cmlrZT1PLnN0cmlrZSkpO2Zvcih2YXIgcGU9MDtwZTxKLmxlbmd0aDsrK3BlKXt0cnl7aWYoSltwZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe315eChKW3BlXSxGLGllKX1kZWxldGUgaWUudGV4dF90cmFuc2Zv'@;
put 'cm19ZWxzZSBpZigzPT1NLm5vZGVUeXBlKXt2YXIgeWU9e3Q6InQiLHY6TS5ub2RlVmFsdWUucmVwbGFjZSgvXltcbiBdKy8sIiAiKS5yZXBsYWNlKC9bXG4gXSskLywiICIpLHM6T307c3dpdGNoKE8udGV4dF90cmFuc2Zvcm0pe2Nhc2UidXBwZXJjYXNlIjp5ZS52PXllLnYudG9VcHBlckNh'@;
put 'c2UoKTticmVhaztjYXNlImxvd2VyY2FzZSI6eWUudj15ZS52LnRvTG93ZXJDYXNlKCl9KEYubGVuZ3RoPjB8fHllLnYmJiIgIiE9eWUudikmJkYucHVzaCh5ZSl9ZWxzZSAxPT1NLm5vZGVUeXBlJiYiYnIiPT09TS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJkYucHVzaCh7dDoidCIsdjoiXG4i'@;
put 'LHM6T30pfWZ1bmN0aW9uIEp2KE0sRixPLEosaWUpe3ZhciB5ZSxwZT1NLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKHllPWdldENvbXB1dGVkU3R5bGUoTSksKHllWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYocGU9cGUucmVwbGFj'@;
put 'ZSgvXG4vZywiPGJyLz4iKSksKHllWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnBlPXBlLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlPXBlLnRvTG93ZXJDYXNlKCl9dmFyIHZlPWZ1bmN0aW9uIHhPKE0sRixPLEop'@;
put 'e3ZhciBpZT17dDoicyIsdjpGfSxwZT0iIjtpZihNKXtPPU0uZ2V0QXR0cmlidXRlKCJkYXRhLXQiKXx8TS5nZXRBdHRyaWJ1dGUoInQiKTt2YXIgeWU9TS5nZXRBdHRyaWJ1dGUoImRhdGEtdiIpfHxNLmdldEF0dHJpYnV0ZSgidiIpO2lmKG51bGwhPShwZT1NLmdldEF0dHJpYnV0ZSgiZGF0'@;
put 'YS16Iil8fE0uZ2V0QXR0cmlidXRlKCJ6IikpJiYoaWUuej1wZSksbnVsbCE9TyYmbnVsbCE9eWUpcmV0dXJuIGllLnQ9TyxpZS52PXllLGllfXJldHVybiBudWxsIT1GJiYoMD09Ri5sZW5ndGg/aWUudD1PfHwieiI6Si5yYXd8fCFGLnRyaW0oKS5sZW5ndGh8fCJzIj09T3x8KGllPVpuKEYs'@;
put 'SikpKSxwZSYmKGllLno9cGUpLGllfShNLElsKHBlKSxPLGllKTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSImJih2ZS5zPXZ4KE0sRixpZS5ib3JkZXJzKSxkZWxldGUgdmUucy50ZXh0X3RyYW5zZm9ybSxNLmNoaWxkTm9kZXMubGVuZ3RoPjF8fDE9PU0uY2hpbGROb2Rlcy5sZW5n'@;
put 'dGgmJjMhPU0uY2hpbGROb2Rlc1swXS5ub2RlVHlwZSkpc3dpdGNoKHl4KE0sdmUuUj1bXSxudWxsKSx2ZS5SJiZ2ZS5SW3ZlLlIubGVuZ3RoLTFdJiYiXG4iPT12ZS5SW3ZlLlIubGVuZ3RoLTFdLnYmJnZlLlIubGVuZ3RoLS0sKHllWyJ0ZXh0LXRyYW5zZm9ybSJdfHwiIikudG9Mb3dlckNh'@;
put 'c2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOnZlLlIuZm9yRWFjaChmdW5jdGlvbihpdCl7aXQudj1pdC52LnRvVXBwZXJDYXNlKCl9KTticmVhaztjYXNlImxvd2VyY2FzZSI6dmUuUi5mb3JFYWNoKGZ1bmN0aW9uKGl0KXtpdC52PWl0LnYudG9Mb3dlckNhc2UoKX0pfWlmKCJzIj09dmUudCl7dmFy'@;
put 'IE1lPXZlLnYubWF0Y2goL1xuLyk7IU1lJiZ2ZS5SJiZ2ZS5SLmZvckVhY2goZnVuY3Rpb24oaXQpeyJzdHJpbmciPT10eXBlb2YgaXQudiYmaXQudi5tYXRjaCgvXG4vKSYmKE1lPSEwKX0pLCJzIj09dmUudCYmTWUmJih2ZS5zfHwodmUucz17fSksdmUucy5hbGlnbm1lbnR8fCh2ZS5zLmFs'@;
put 'aWdubWVudD17fSksdmUucy5hbGlnbm1lbnQud3JhcFRleHQ9ITApfWlmKEYpe3ZhciBqZT0iIixZZT1GLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJBIik7aWYoWWUmJlllLmxlbmd0aClmb3IodmFyIHFlPTA7cWU8WWUubGVuZ3RoJiYoIVllW3FlXS5oYXNBdHRyaWJ1dGUoImhyZWYiKXx8IiMi'@;
put 'PT0oamU9WWVbcWVdLmdldEF0dHJpYnV0ZSgiaHJlZiIpKS5jaGFyQXQoMCkpOysrcWUpO2plJiYiIyIhPWplLmNoYXJBdCgwKSYmKHZlLmw9e1RhcmdldDpqZX0pfXJldHVybiB2ZX1mdW5jdGlvbiBYdShNLEYsTyl7dmFyIGllLEo9Ri5yb3dzO2lmKCFKKXtpZihPJiZudWxsIT1PLm9yaWdp'@;
put 'bil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK0YudGFnTmFtZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gRU8oTSxGLE8pe089SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShPfHx7fSkpO3ZhciBwZT17czp7cjowLGM6MH0sZTp7cjowLGM6MH19O01bIiFtZXJn'@;
put 'ZXMiXXx8KE1bIiFtZXJnZXMiXT1bXSk7Zm9yKHZhciB2ZSx5ZT1GLmNoaWxkcmVuLE1lPTAsamU9MDtqZTx5ZS5sZW5ndGg7KytqZSl7dmFyIGl0LFllPXllW2plXSxxZT0iIjt0cnl7dHlwZW9mIGdldENvbXB1dGVkU3R5bGU8InUiP2l0PWdldENvbXB1dGVkU3R5bGU6WWUub3duZXJEb2N1'@;
put 'bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFllLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSYmKGl0PVllLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fWlmKCFpdHx8Im5vbmUiIT1pdChZZSku'@;
put 'ZGlzcGxheSlzd2l0Y2goWWUudGFnTmFtZS50b1VwcGVyQ2FzZSgpKXtjYXNlIlRBQkxFIjpNZT0tMSxNWyIhcmVmIl0mJihPLm9yaWdpbj0tMSksWHUoTSxZZSxPKTticmVhaztjYXNlIkJSIjpjYXNlIkhSIjpNZT0tMSxNWyIhcmVmIl0/KCsrKHBlPUhzKE1bIiFyZWYiXSkpLmUucixNWyIh'@;
put 'cmVmIl09QWkocGUpKTpNWyIhcmVmIl09IkExOkExIjticmVhaztjYXNlIkRJViI6Y2FzZSJQIjpjYXNlIkgxIjpjYXNlIkgyIjpjYXNlIkgzIjpjYXNlIkg0IjpjYXNlIkg1IjpjYXNlIkg2IjpNZT0tMSx2ZT1KdihZZSxudWxsLCIiLDAsTyksTVsiIXJlZiJdPyhPLm9yaWdpbj0tMSxFMShN'@;
put 'LFtbdmVdXSxPKSk6KE1bIiFyZWYiXT0iQTEiLEFycmF5LmlzQXJyYXkoTSk/KE1bMF18fChNWzBdPVtdKSxNWzBdWzBdPXZlKTpNLkExPXZlKSxNWyIhcm93cyJdfHwoTVsiIXJvd3MiXT1bXSksaXQmJihwZT1IcyhNWyIhcmVmIl0pLChxZT1pdChZZSkuaGVpZ2h0KSYmImF1dG8iIT1xZSYm'@;
put 'KE1bIiFyb3dzIl1bcGUuZS5yXT17aHB0OnBhcnNlSW50KHFlLDEwKX0pKTticmVhaztjYXNlIlNQQU4iOmNhc2UiQSI6Y2FzZSJCIjpjYXNlIkVNIjpjYXNlIkkiOmNhc2UiRk9OVCI6Y2FzZSJTIjpjYXNlIlNVQiI6Y2FzZSJTVVAiOmNhc2UiVSI6dmU9SnYoWWUsbnVsbCwiIiwwLE8pLE1b'@;
put 'IiFyZWYiXXx8KE1bIiFyZWYiXT0iQTE6QTEiKSxFMShNLFtbdmVdXSx7b3JpZ2luOkRpKHtyOihNZTwwPzE6MCkrKHBlPUhzKE1bIiFyZWYiXSkpLmUucixjOisrTWV9KX0pO2JyZWFrO2Nhc2UiREwiOmNhc2UiVUwiOmNhc2UiT0wiOk1lPS0xLGNvbnNvbGUuZXJyb3IoIkhUTUwgQ29udmVy'@;
put 'c2lvbiBkb2VzIG5vdCBzdXBwb3J0IGxpc3QgZWxlbWVudCAiK1llLnRhZ05hbWUudG9VcHBlckNhc2UoKSk7YnJlYWs7ZGVmYXVsdDpNZT0tMSxjb25zb2xlLmVycm9yKCJTa2lwcGluZyAiK1llLnRhZ05hbWUudG9VcHBlckNhc2UoKSl9fXJldHVybiBNfShNLEYsTyl9dHJ5e3R5cGVvZiBn'@;
put 'ZXRDb21wdXRlZFN0eWxlPCJ1Ij9pZT1nZXRDb21wdXRlZFN0eWxlOkYub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIEYub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoaWU9Ri5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3'@;
put 'LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe312YXIgcGU9T3x8e307bnVsbCE9dGUmJihwZS5kZW5zZT10ZSk7dmFyIHllPTAsdmU9MDtpZihudWxsIT1wZS5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVvZiBwZS5vcmlnaW4peWU9cGUub3JpZ2luO2Vsc2V7dmFyIE1lPSJzdHJpbmciPT10eXBl'@;
put 'b2YgcGUub3JpZ2luP2hzKHBlLm9yaWdpbik6cGUub3JpZ2luO3llPU1lLnIsdmU9TWUuY312YXIgamU9TWF0aC5taW4ocGUuc2hlZXRSb3dzfHwxZTcsSi5sZW5ndGgpLFllPXtzOntyOjAsYzowfSxlOntyOnllLGM6dmV9fTtpZihNWyIhcmVmIl0pe3ZhciBxZT1IcyhNWyIhcmVmIl0pO1ll'@;
put 'LnMucj1NYXRoLm1pbihZZS5zLnIscWUucy5yKSxZZS5zLmM9TWF0aC5taW4oWWUucy5jLHFlLnMuYyksWWUuZS5yPU1hdGgubWF4KFllLmUucixxZS5lLnIpLFllLmUuYz1NYXRoLm1heChZZS5lLmMscWUuZS5jKSwtMT09eWUmJihZZS5lLnI9eWU9cWUuZS5yKzEpfXZhciBpdD1bXSxodD0w'@;
put 'LGt0PU1bIiFyb3dzIl18fChNWyIhcm93cyJdPVtdKSx1dD0wLHZ0PTAsUHQ9MCxEdD0wLEF0PTAsWnQ9MDtmb3IoTVsiIWNvbHMiXXx8KE1bIiFjb2xzIl09W10pO3V0PEoubGVuZ3RoJiZ2dDxqZTsrK3V0KXtmb3IodmFyIGduPUpbdXRdLHFuPWduLnBhcmVudEVsZW1lbnQ7IlRBQkxFIiE9'@;
put 'cW4udGFnTmFtZS50b1VwcGVyQ2FzZSgpOylxbj1xbi5wYXJlbnRFbGVtZW50O2lmKHFuPT1GKXtlOmlmKHR5cGVvZiBpZTwidSIpe3ZhciB1bj1pZShnbik7aWYobnVsbD09dW4pYnJlYWsgZTtpZih1bi5zdHlsZXx8KHVuLnN0eWxlPXt9KSxwZS5kaXNwbGF5JiYibm9uZSI9PSh1bi5kaXNw'@;
put 'bGF5fHx1bi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PSh1bi5kaXNwbGF5fHx1bi5zdHlsZS5kaXNwbGF5KSYmKChrdFt2dF18fChrdFt2dF09e30pKS5oaWRkZW49ITApfXZhciBKbj1nbi5jZWxscztmb3IoUHQ9RHQ9MDtQdDxKbi5sZW5ndGg7KytQdCl7dmFyIFluPUpuW1B0'@;
put 'XSxMbj1udWxsO2lmKCEodHlwZW9mIGllPCJ1IiYmKG51bGw9PUxuJiYoTG49aWUoWW4pKSxMbi5zdHlsZXx8KExuLnN0eWxlPXt9KSxwZS5kaXNwbGF5JiZudWxsIT1MbiYmIm5vbmUiPT0oTG4uZGlzcGxheXx8TG4uc3R5bGUuZGlzcGxheSkpKSl7Zm9yKFp0PStZbi5nZXRBdHRyaWJ1dGUo'@;
put 'ImNvbHNwYW4iKXx8MSxodD0wO2h0PGl0Lmxlbmd0aDsrK2h0KXt2YXIgdHI9aXRbaHRdO3RyLnMuYz09RHQrdmUmJnRyLnMucjx2dCt5ZSYmdnQreWU8PXRyLmUuciYmKER0PXRyLmUuYysxLXZlLGh0PS0xKX0oKEF0PStZbi5nZXRBdHRyaWJ1dGUoInJvd3NwYW4iKXx8MSk+MXx8WnQ+MSkm'@;
put 'Jml0LnB1c2goe3M6e3I6dnQreWUsYzpEdCt2ZX0sZTp7cjp2dCt5ZSsoQXR8fDEpLTEsYzpEdCt2ZSsoWnR8fDEpLTF9fSk7dmFyIHJyPVluLmdldEF0dHJpYnV0ZSgidCIpfHwiIixVbj1Zbi5nZXRBdHRyaWJ1dGUoImJnY29sb3IiKTtlOmlmKHR5cGVvZiBpZTwidSIpe2lmKG51bGw9PUxu'@;
put 'JiYoTG49aWUoWW4pKSxudWxsPT1MbilicmVhayBlO2lmKExuLnN0eWxlfHwoTG4uc3R5bGU9e30pLDE9PVp0JiZMbi53aWR0aCYmKE1bIiFjb2xzIl1bRHQrdmVdPU1bIiFjb2xzIl1bRHQrdmVdfHx7fSxMbi53aWR0aC5tYXRjaCgvcHgvKT9NWyIhY29scyJdW0R0K3ZlXS53cHg9TWF0aC5t'@;
put 'YXgocGFyc2VJbnQoTG4ud2lkdGgsMTApKzUsTVsiIWNvbHMiXVtEdCt2ZV0ud3B4fHwwKTpMbi53aWR0aC5tYXRjaCgvcHQvKSYmKE1bIiFjb2xzIl1bRHQrdmVdLndweD1NYXRoLm1heCg0KnBhcnNlSW50KExuLndpZHRoLDEwKS8zKzUsTVsiIWNvbHMiXVtEdCt2ZV0ud3B4fHwwKSkpLEF0'@;
put 'PD0xKXtrdFt2dCt5ZV18fChrdFt2dCt5ZV09e30pO3ZhciBYcj1Mbi5oZWlnaHQ7KFhyPVhyLm1hdGNoKC9wdC8pP1oxKHBhcnNlSW50KFhyLDEwKSk6cGFyc2VJbnQoWHIsMTApKT4oa3RbdnQreWVdLmhweHx8WjEoa3RbdnQreWVdLmhwdCl8fDApJiYoZGVsZXRlIGt0W3Z0K3llXS5ocHQs'@;
put 'a3RbdnQreWVdLmhweD1Ycil9fXZhciBwaT1ZbjtpZihZbi5maXJzdEVsZW1lbnRDaGlsZCYmMT09WW4uY2hpbGRyZW4ubGVuZ3RoJiYic3BhbiI9PVluLmZpcnN0RWxlbWVudENoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpe2Zvcih2YXIgT2k9MCxOaT1Zbi5jaGlsZE5vZGVzLGRpPTA7'@;
put 'ZGk8TmkubGVuZ3RoOysrZGkpMz09TmlbZGldLm5vZGVUeXBlJiYrK09pOzA9PU9pJiYoWW49WW4uZmlyc3RFbGVtZW50Q2hpbGQpfXZhciBfcj1KdihZbixwaSxyciwwLHBlKTtpZihMbil7dmFyIEFuPWllKFluKTtpZihBbiYmIUFuLnN0eWxlJiYoQW4uc3R5bGU9e30pLChBbiYmQW5bImJh'@;
put 'Y2tncm91bmQtY29sb3IiXXx8TG5bImJhY2tncm91bmQtY29sb3IiXSkmJihfci5zfHwoX3Iucz17fSksIV9yLnMuZmdDb2xvcikpdHJ5e3ZhciBNcj1BbiYmQW5bImJhY2tncm91bmQtY29sb3IiXXx8TG5bImJhY2tncm91bmQtY29sb3IiXTtNci5tYXRjaCgvcmdiYVsoXVxzKjAuKlspXS9p'@;
put 'KSYmKE1yPUxuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pO3ZhciBvcj1YcChNci50b0xvd2VyQ2FzZSgpLCEwKTtvcj49MCYmKF9yLnMuZmdDb2xvcj17cmdiOm9yfSl9Y2F0Y2h7fXN3aXRjaChMblsidmVydGljYWwtYWxpZ24iXSl7Y2FzZSJtaWRkbGUiOmNhc2UiYmFzZWxpbmUiOl9yLnN8fChf'@;
put 'ci5zPXt9KSxfci5zLmFsaWdubWVudHx8KF9yLnMuYWxpZ25tZW50PXt9KSxfci5zLmFsaWdubWVudC52ZXJ0aWNhbD0iY2VudGVyIn19aWYoVW4mJihfci5zfHwoX3Iucz17fSksIV9yLnMuZmdDb2xvcikpdHJ5e3ZhciBUbj1YcChVbi50b0xvd2VyQ2FzZSgpLCEwKTtUbj49MCYmKF9yLnMu'@;
put 'ZmdDb2xvcj17cmdiOlRufSl9Y2F0Y2h7fWlmKHBlLmRlbnNlPyhNW3Z0K3llXXx8KE1bdnQreWVdPVtdKSxNW3Z0K3llXVtEdCt2ZV09X3IpOk1bRGkoe2M6RHQrdmUscjp2dCt5ZX0pXT1fcixBdD4xfHxadD4xKWZvcih2YXIgQ3I9dnQ7Q3I8dnQrQXQ7KytDcilmb3IodmFyIFNpPUR0O1Np'@;
put 'PER0K1p0OysrU2kpdnQ9PUNyJiZEdD09U2l8fChwZS5kZW5zZT8oTVtDcit5ZV18fChNW0NyK3llXT1bXSksTVtDcit5ZV1bU2krdmVdPXt0OiJ6IixzOlh0KF9yLnN8fHt9KX0pOk1bRGkoe2M6U2krdmUscjpDcit5ZX0pXT17dDoieiIsczpYdChfci5zfHx7fSl9KTtZZS5lLmM8RHQrdmUm'@;
put 'JihZZS5lLmM9RHQrdmUpLER0Kz1adH19Kyt2dH19aWYoaXQubGVuZ3RoJiYoTVsiIW1lcmdlcyJdPShNWyIhbWVyZ2VzIl18fFtdKS5jb25jYXQoaXQpKSxZZS5lLnI9TWF0aC5tYXgoWWUuZS5yLHZ0LTEreWUpLE1bIiFyZWYiXT1BaShZZSksdnQ+PWplJiYoTVsiIWZ1bGxyZWYiXT1BaSgo'@;
put 'WWUuZS5yPUoubGVuZ3RoLXV0K3Z0LTEreWUsWWUpKSkscGUuYm9yZGVycylmb3IodnQ9WWUucy5yO3Z0PD1ZZS5lLnI7Kyt2dClmb3IoRHQ9WWUucy5jO0R0PD1ZZS5lLmM7KytEdClpZighcGUuZGVuc2Upe3ZhciBacj1NW0RpKHtyOnZ0LGM6RHR9KV07aWYoIVpyfHwhWnIucyljb250aW51'@;
put 'ZTtpZih2dD4wKXt2YXIgVWk9TVtEaSh7cjp2dC0xLGM6RHR9KV07VWkmJlVpLnMmJlVpLnMuYm90dG9tJiZkZWxldGUgWnIucy50b3B9aWYoRHQ+MCl7dmFyIFJvPU1bRGkoe3I6dnQsYzpEdC0xfSldO1JvJiZSby5zJiZSby5zLmJvdHRvbSYmZGVsZXRlIFpyLnMubGVmdH19cmV0dXJuIE19'@;
put 'ZnVuY3Rpb24gUXYoTSxGKXtyZXR1cm4gWHUoKEZ8fHt9KS5kZW5zZT9bXTp7fSxNLEYpfXZhciB3eD1mdW5jdGlvbigpe3ZhciBNPWZ1bmN0aW9uKEosaWUscGUpe3ZhciB5ZT1KLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0'@;
put 'ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4vZyxmdW5jdGlvbihZZSxxZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KHFlLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0Omxp'@;
put 'bmUtYnJlYWtcLz4vZywiXG4iKSx2ZT1tcih5ZS5yZXBsYWNlKC88W14+XSo+L2csIiIpKSxNZT1bXSxqZT0wO3JldHVybiB5ZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihZZSxxZSxpdCxodCl7aHQhPWplJiZNZS5wdXNoKHt0OiJz'@;
put 'Iix2Om1yKHllLnNsaWNlKGplLGh0KSl9KTt2YXIga3Q9e3Q6InMiLHY6bXIoaXQpfSx1dD1sbihxZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gdXQmJnBlW3V0XSYmKGt0LnM9WHQocGVbdXRdKSksTWUucHVzaChrdCksamU9aHQrWWUubGVuZ3RoLCIifSksamU8eWUubGVuZ3RoJiZNZS5wdXNo'@;
put 'KHt0OiJzIix2Om1yKHllLnNsaWNlKGplKSl9KSxbdmUsTWVdfSxGPXtkYXk6WyJkIiwiZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BN'@;
put 'Il0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFydGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxPPWZ1bmN0aW9uKEosaWUpe3ZhciBwZT1sbihKLnNsaWNlKDAsSi5pbmRleE9mKCI+IikpKSx5ZT1KLnNsaWNlKEouaW5kZXhPZigiPiIpKzEp'@;
put 'LHZlPXtuYW1lOnBlLm5hbWUsZmFtaWx5OnBlLmZhbWlseX07W1sicGFyZW50IiwicGFyZW50LXN0eWxlLW5hbWUiXSxbImRhdGFuYW1lIiwiZGF0YS1zdHlsZS1uYW1lIl0sWyJtcG5hbWUiLCJtYXN0ZXItcGFnZS1uYW1lIl1dLmZvckVhY2goZnVuY3Rpb24oamUpe3BlW2plWzFdXSYmKHZl'@;
put 'W2plWzBdXT1wZVtqZVsxXV0pfSk7dmFyIE1lPXt9O3llLnJlcGxhY2UoJHQsZnVuY3Rpb24oamUpe3ZhciBZZT1sbihqZSk7aWYoIjxzdHlsZTp0ZXh0LXByb3BlcnRpZXMiPT09WWVbMF0pe2lmKFllWyJmb250LXdlaWdodCJdJiYoTWUuYm9sZD0rKCJib2xkIj09WWVbImZvbnQtd2VpZ2h0'@;
put 'Il18fCI3MDAiPT1ZZVsiZm9udC13ZWlnaHQiXSkpLCgiaXRhbGljIj09WWVbImZvbnQtc3R5bGUiXXx8Im9ibGlxdWUiPT1ZZVsiZm9udC1zdHlsZSJdKSYmKE1lLml0YWxpYz0xKSwibm9uZSIhPShZZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiKT9NZS51bmRlcmxpbmU9ImRv'@;
put 'dWJsZSI9PVllWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0/MjoxOihZZVsidGV4dC11bmRlcmxpbmUtc3R5bGUiXXx8Im5vbmUiPT1ZZVsidGV4dC11bmRlcmxpbmUtdHlwZSJdKSYmKE1lLnVuZGVybGluZT0wKSwoWWVbImZvbnQtc2l6ZSJdfHwiIikubWF0Y2goL3B0JC8pJiYoTWUuc3o9K1ll'@;
put 'WyJmb250LXNpemUiXS5yZXBsYWNlKCJwdCIsIiIpKSwibm9uZSIhPShZZVsidGV4dC1saW5lLXRocm91Z2gtc3R5bGUiXXx8Im5vbmUiKSYmKE1lLnN0cmlrZT0xKSxZZVsiZm9udC1uYW1lIl0mJihNZS5uYW1lPVllWyJmb250LW5hbWUiXSksWWUuY29sb3Ipe3ZhciBxZT1YcChZZS5jb2xv'@;
put 'ciwhMCk7cWU+PTAmJihNZS5jb2xvcj1xZSl9c3dpdGNoKFllWyJ0ZXh0LXBvc2l0aW9uIl0pe2Nhc2Uic3VwZXIiOk1lLnZhbGlnbj0ic3VwZXIiO2JyZWFrO2Nhc2Uic3ViIjpNZS52YWxpZ249InN1YiI7YnJlYWs7ZGVmYXVsdDooWWVbInRleHQtcG9zaXRpb24iXXx8IiIpLm1hdGNoKC8l'@;
put 'LykmJihNZS52YWxpZ249Ii0iPT1ZZVsidGV4dC1wb3NpdGlvbiJdLmNoYXJBdCgwKT8ic3ViIjoic3VwZXIiKX0ibm9uZSIhPShZZVsidGV4dC1zaGFkb3ciXXx8Im5vbmUiKSYmKE1lLnNoYWRvdz0xKX1yZXR1cm4iIn0pLGllW3BlLm5hbWVdPU1lfTtyZXR1cm4gZnVuY3Rpb24oaWUscGUp'@;
put 'e3ZhciB5ZT1wZXx8e307bnVsbCE9dGUmJm51bGw9PXllLmRlbnNlJiYoeWUuZGVuc2U9dGUpO3ZhciBqZSxZZSxrdCx1dCxBdCxadCx2ZT1veChpZSksTWU9W10scWU9e25hbWU6IiJ9LGl0PSIiLGh0PTAsdnQ9e30sUHQ9W10sRHQ9eWUuZGVuc2U/W106e30sZ249e3ZhbHVlOiIifSxxbj0i'@;
put 'Iix1bj0wLFluPVtdLExuPS0xLHRyPS0xLHJyPXtzOntyOjFlNixjOjFlN30sZTp7cjowLGM6MH19LFVuPTAsWHI9e30scGk9W10sT2k9e30sTmk9MCxkaT0wLF9yPVtdLEFuPTEsTXI9MSxvcj1bXSxUbj17TmFtZXM6W119LENyPXt9LFNpPVsiIiwiIl0sWnI9W10sVWk9e30sUm89e30sRmk9'@;
put 'MCxvcz0iIixsbz0wLEZvPSExLHhvPSExLHZpPTA7Zm9yKFI1Lmxhc3RJbmRleD0wLHZlPXZlLnJlcGxhY2UoLzwhLS0oW1xzXFNdKj8pLS0+L2dtLCIiKS5yZXBsYWNlKC88IURPQ1RZUEVbXlxbXSpcW1teXF1dKlxdPi9nbSwiIik7QXQ9UjUuZXhlYyh2ZSk7KXN3aXRjaChBdFszXT1BdFsz'@;
put 'XS5yZXBsYWNlKC9fLiokLywiIikpe2Nhc2UidGFibGUiOmNhc2UiXHU1ZGU1XHU0ZjVjXHU4ODY4IjoiLyI9PT1BdFsxXT8oRHRbIiFyZWYiXT1yci5lLmM+PXJyLnMuYyYmcnIuZS5yPj1yci5zLnI/QWkocnIpOiJBMTpBMSIseWUuc2hlZXRSb3dzPjAmJnllLnNoZWV0Um93czw9cnIuZS5y'@;
put 'JiYoRHRbIiFmdWxscmVmIl09RHRbIiFyZWYiXSxyci5lLnI9eWUuc2hlZXRSb3dzLTEsRHRbIiFyZWYiXT1BaShycikpLHBpLmxlbmd0aCYmKER0WyIhbWVyZ2VzIl09cGkpLF9yLmxlbmd0aCYmKER0WyIhcm93cyJdPV9yKSxrdC5uYW1lPWt0Llx1NTQwZFx1NzlmMHx8a3QubmFtZSx0eXBl'@;
put 'b2YgSlNPTjwidSImJkpTT04uc3RyaW5naWZ5KGt0KSxQdC5wdXNoKGt0Lm5hbWUpLHZ0W2t0Lm5hbWVdPUR0LHhvPSExKToiLyIhPT1BdFswXS5jaGFyQXQoQXRbMF0ubGVuZ3RoLTIpJiYoa3Q9bG4oQXRbMF0sITEpLExuPXRyPS0xLHJyLnMucj1yci5zLmM9MWU3LHJyLmUucj1yci5lLmM9'@;
put 'MCxEdD15ZS5kZW5zZT9bXTp7fSxwaT1bXSxfcj1bXSx4bz0hMCk7YnJlYWs7Y2FzZSJ0YWJsZS1yb3ctZ3JvdXAiOiIvIj09PUF0WzFdPy0tVW46KytVbjticmVhaztjYXNlInRhYmxlLXJvdyI6Y2FzZSJcdTg4NGMiOmlmKCIvIj09PUF0WzFdKXtMbis9QW4sQW49MTticmVha31pZigodXQ9'@;
put 'bG4oQXRbMF0sITEpKS5cdTg4NGNcdTUzZjc/TG49dXQuXHU4ODRjXHU1M2Y3LTE6LTE9PUxuJiYoTG49MCksKEFuPSt1dFsibnVtYmVyLXJvd3MtcmVwZWF0ZWQiXXx8MSk8MTApZm9yKHZpPTA7dmk8QW47Kyt2aSlVbj4wJiYoX3JbTG4rdmldPXtsZXZlbDpVbn0pO3RyPS0xO2JyZWFrO2Nh'@;
put 'c2UiY292ZXJlZC10YWJsZS1jZWxsIjoiLyIhPT1BdFsxXSYmKyt0cix5ZS5zaGVldFN0dWJzJiYoeWUuZGVuc2U/KER0W0xuXXx8KER0W0xuXT1bXSksRHRbTG5dW3RyXT17dDoieiJ9KTpEdFtEaSh7cjpMbixjOnRyfSldPXt0OiJ6In0pLHFuPSIiLFluPVtdO2JyZWFrO2Nhc2UidGFibGUt'@;
put 'Y2VsbCI6Y2FzZSJcdTY1NzBcdTYzNmUiOmlmKCIvIj09PUF0WzBdLmNoYXJBdChBdFswXS5sZW5ndGgtMikpKyt0cixnbj1sbihBdFswXSwhMSksTXI9cGFyc2VJbnQoZ25bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCksWnQ9e3Q6InoiLHY6bnVsbH0sZ24uZm9ybXVsYSYm'@;
put 'MCE9eWUuY2VsbEZvcm11bGEmJihadC5mPWx2KG1yKGduLmZvcm11bGEpKSksInN0cmluZyI9PShnbi5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGduWyJ2YWx1ZS10eXBlIl0pJiYoWnQudD0icyIsWnQudj1tcihnblsic3RyaW5nLXZhbHVlIl18fCIiKSx5ZS5kZW5zZT8oRHRbTG5dfHwo'@;
put 'RHRbTG5dPVtdKSxEdFtMbl1bdHJdPVp0KTpEdFtEaSh7cjpMbixjOnRyfSldPVp0KSx0cis9TXItMTtlbHNlIGlmKCIvIiE9PUF0WzFdKXtNcj0xO3ZhciBCcz1Bbj9MbitBbi0xOkxuO2lmKCsrdHI+cnIuZS5jJiYocnIuZS5jPXRyKSx0cjxyci5zLmMmJihyci5zLmM9dHIpLExuPHJyLnMu'@;
put 'ciYmKHJyLnMucj1MbiksQnM+cnIuZS5yJiYocnIuZS5yPUJzKSxacj1bXSxVaT17fSxadD17dDooZ249bG4oQXRbMF0sITEpKS5cdTY1NzBcdTYzNmVcdTdjN2JcdTU3OGJ8fGduWyJ2YWx1ZS10eXBlIl0sdjpudWxsfSx5ZS5jZWxsRm9ybXVsYSlpZihnbi5mb3JtdWxhJiYoZ24uZm9ybXVs'@;
put 'YT1tcihnbi5mb3JtdWxhKSksZ25bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0mJmduWyJudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdJiYoTmk9cGFyc2VJbnQoZ25bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0sMTApfHwwLGRpPXBhcnNlSW50KGduWyJudW1iZXIt'@;
put 'bWF0cml4LWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxadC5GPUFpKE9pPXtzOntyOkxuLGM6dHJ9LGU6e3I6TG4rTmktMSxjOnRyK2RpLTF9fSksb3IucHVzaChbT2ksWnQuRl0pKSxnbi5mb3JtdWxhKVp0LmY9bHYoZ24uZm9ybXVsYSk7ZWxzZSBmb3Iodmk9MDt2aTxvci5sZW5ndGg7Kyt2'@;
put 'aSlMbj49b3JbdmldWzBdLnMuciYmTG48PW9yW3ZpXVswXS5lLnImJnRyPj1vclt2aV1bMF0ucy5jJiZ0cjw9b3JbdmldWzBdLmUuYyYmKFp0LkY9b3JbdmldWzFdKTtzd2l0Y2goKGduWyJudW1iZXItY29sdW1ucy1zcGFubmVkIl18fGduWyJudW1iZXItcm93cy1zcGFubmVkIl0pJiYoTmk9'@;
put 'cGFyc2VJbnQoZ25bIm51bWJlci1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsZGk9cGFyc2VJbnQoZ25bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXSwxMCl8fDAscGkucHVzaChPaT17czp7cjpMbixjOnRyfSxlOntyOkxuK05pLTEsYzp0citkaS0xfX0pKSxnblsibnVtYmVyLWNvbHVtbnMtcmVw'@;
put 'ZWF0ZWQiXSYmKE1yPXBhcnNlSW50KGduWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdLDEwKSksWnQudCl7Y2FzZSJib29sZWFuIjpadC50PSJiIixadC52PUxyKGduWyJib29sZWFuLXZhbHVlIl0pO2JyZWFrO2Nhc2UiZmxvYXQiOmNhc2UicGVyY2VudGFnZSI6Y2FzZSJjdXJyZW5jeSI6'@;
put 'WnQudD0ibiIsWnQudj1wYXJzZUZsb2F0KGduLnZhbHVlKTticmVhaztjYXNlImRhdGUiOlp0LnQ9ImQiLFp0LnY9RnQoZ25bImRhdGUtdmFsdWUiXSkseWUuY2VsbERhdGVzfHwoWnQudD0ibiIsWnQudj1HZShadC52KSksWnQuej0ibS9kL3l5IjticmVhaztjYXNlInRpbWUiOlp0LnQ9Im4i'@;
put 'LFp0LnY9b3QoZ25bInRpbWUtdmFsdWUiXSkvODY0MDAseWUuY2VsbERhdGVzJiYoWnQudD0iZCIsWnQudj1kdChadC52KSksWnQuej0iSEg6TU06U1MiO2JyZWFrO2Nhc2UibnVtYmVyIjpadC50PSJuIixadC52PXBhcnNlRmxvYXQoZ24uXHU2NTcwXHU2MzZlXHU2NTcwXHU1MDNjKTticmVh'@;
put 'aztkZWZhdWx0OmlmKCJzdHJpbmciIT09WnQudCYmInRleHQiIT09WnQudCYmWnQudCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHZhbHVlIHR5cGUgIitadC50KTtadC50PSJzIixudWxsIT1nblsic3RyaW5nLXZhbHVlIl0mJihxbj1tcihnblsic3RyaW5nLXZhbHVlIl0pLFluPVtd'@;
put 'KX19ZWxzZXtpZihGbz0hMSwicyI9PT1adC50JiYoWnQudj1xbnx8IiIsWW4ubGVuZ3RoJiYoWnQuUj1ZbiksRm89MD09dW4pLENyLlRhcmdldCYmKFp0Lmw9Q3IpLFpyLmxlbmd0aD4wJiYoWnQuYz1acixacj1bXSkscW4mJiExIT09eWUuY2VsbFRleHQmJihadC53PXFuKSxGbyYmKFp0LnQ9'@;
put 'InoiLGRlbGV0ZSBadC52KSx5ZS5jZWxsSFRNTCYmKFp0Lmg9WnQuUj9GYyhadC5SKTpaaSgiIitadC52KSksKCFGb3x8eWUuc2hlZXRTdHVicykmJiEoeWUuc2hlZXRSb3dzJiZ5ZS5zaGVldFJvd3M8PUxuKSlmb3IodmFyIEVuPTA7RW48QW47KytFbil7aWYoTXI9cGFyc2VJbnQoZ25bIm51'@;
put 'bWJlci1jb2x1bW5zLXJlcGVhdGVkIl18fCIxIiwxMCkseWUuZGVuc2UpZm9yKER0W0xuK0VuXXx8KER0W0xuK0VuXT1bXSksRHRbTG4rRW5dW3RyXT0wPT1Fbj9adDpYdChadCk7LS1Ncj4wOylEdFtMbitFbl1bdHIrTXJdPVh0KFp0KTtlbHNlIGZvcihEdFtEaSh7cjpMbitFbixjOnRyfSld'@;
put 'PVp0Oy0tTXI+MDspRHRbRGkoe3I6TG4rRW4sYzp0citNcn0pXT1YdChadCk7cnIuZS5jPD10ciYmKHJyLmUuYz10cil9dHIrPShNcj1wYXJzZUludChnblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSktMSxNcj0wLFp0PXt9LHFuPSIiLFluPVtdfUNyPXt9O2JyZWFrO2Nh'@;
put 'c2UiZG9jdW1lbnQiOmNhc2UiZG9jdW1lbnQtY29udGVudCI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2NcdTY1ODdcdTY4NjMiOmNhc2Uic3ByZWFkc2hlZXQiOmNhc2UiXHU0ZTNiXHU0ZjUzIjpjYXNlInNjcmlwdHMiOmNhc2Uic3R5bGVzIjpjYXNlImZvbnQtZmFjZS1kZWNscyI6'@;
put 'Y2FzZSJtYXN0ZXItc3R5bGVzIjppZigiLyI9PT1BdFsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PUF0WzNdKXRocm93IkJhZCBzdGF0ZTogIitqZX1lbHNlIi8iIT09QXRbMF0uY2hhckF0KEF0WzBdLmxlbmd0aC0yKSYmTWUucHVzaChbQXRbM10sITBdKTticmVhaztjYXNlImFubm90YXRp'@;
put 'b24iOmlmKCIvIj09PUF0WzFdKXtpZigoamU9TWUucG9wKCkpWzBdIT09QXRbM10pdGhyb3ciQmFkIHN0YXRlOiAiK2plO1VpLnQ9cW4sWW4ubGVuZ3RoJiYoVWkuUj1ZbiksVWkuYT1vcyxaci5wdXNoKFVpKX1lbHNlIi8iIT09QXRbMF0uY2hhckF0KEF0WzBdLmxlbmd0aC0yKSYmTWUucHVz'@;
put 'aChbQXRbM10sITFdKTtvcz0iIixsbz0wLHFuPSIiLHVuPTAsWW49W107YnJlYWs7Y2FzZSJjcmVhdG9yIjoiLyI9PT1BdFsxXT9vcz12ZS5zbGljZShsbyxBdC5pbmRleCk6bG89QXQuaW5kZXgrQXRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibWV0YSI6Y2FzZSJcdTUxNDNcdTY1NzBcdTYzNmUi'@;
put 'OmNhc2Uic2V0dGluZ3MiOmNhc2UiY29uZmlnLWl0ZW0tc2V0IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1pbmRleGVkIjpjYXNlImNvbmZpZy1pdGVtLW1hcC1lbnRyeSI6Y2FzZSJjb25maWctaXRlbS1tYXAtbmFtZWQiOmNhc2Uic2hhcGVzIjpjYXNlImZyYW1lIjpjYXNlInRleHQtYm94Ijpj'@;
put 'YXNlImltYWdlIjpjYXNlImRhdGEtcGlsb3QtdGFibGVzIjpjYXNlImxpc3Qtc3R5bGUiOmNhc2UiZm9ybSI6Y2FzZSJkZGUtbGlua3MiOmNhc2UiZXZlbnQtbGlzdGVuZXJzIjpjYXNlImNoYXJ0IjppZigiLyI9PT1BdFsxXSl7aWYoKGplPU1lLnBvcCgpKVswXSE9PUF0WzNdKXRocm93IkJh'@;
put 'ZCBzdGF0ZTogIitqZX1lbHNlIi8iIT09QXRbMF0uY2hhckF0KEF0WzBdLmxlbmd0aC0yKSYmTWUucHVzaChbQXRbM10sITFdKTtxbj0iIix1bj0wLFluPVtdO2JyZWFrO2Nhc2Uic2NpZW50aWZpYy1udW1iZXIiOmNhc2UiY3VycmVuY3ktc3ltYm9sIjpjYXNlImN1cnJlbmN5LXN0eWxlIjpj'@;
put 'YXNlInNjcmlwdCI6Y2FzZSJsaWJyYXJpZXMiOmNhc2UiYXV0b21hdGljLXN0eWxlcyI6Y2FzZSJkZWZhdWx0LXN0eWxlIjpjYXNlInBhZ2UtbGF5b3V0IjpjYXNlIm1hcCI6Y2FzZSJmb250LWZhY2UiOmNhc2UicGFyYWdyYXBoLXByb3BlcnRpZXMiOmNhc2UidGFibGUtcHJvcGVydGllcyI6'@;
put 'Y2FzZSJ0YWJsZS1jb2x1bW4tcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1yb3ctcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1jZWxsLXByb3BlcnRpZXMiOmNhc2UiZnJhY3Rpb24iOmNhc2UiYm9vbGVhbi1zdHlsZSI6Y2FzZSJib29sZWFuIjpjYXNlInRleHQtc3R5bGUiOmNhc2UidGV4dC1jb250'@;
put 'ZW50IjpjYXNlInRleHQtcHJvcGVydGllcyI6Y2FzZSJlbWJlZGRlZC10ZXh0IjpjYXNlImJvZHkiOmNhc2UiXHU3NTM1XHU1YjUwXHU4ODY4XHU2ODNjIjpjYXNlImZvcm1zIjpjYXNlInRhYmxlLWNvbHVtbiI6Y2FzZSJ0YWJsZS1oZWFkZXItcm93cyI6Y2FzZSJ0YWJsZS1yb3dzIjpjYXNl'@;
put 'InRhYmxlLWNvbHVtbi1ncm91cCI6Y2FzZSJ0YWJsZS1oZWFkZXItY29sdW1ucyI6Y2FzZSJ0YWJsZS1jb2x1bW5zIjpjYXNlIm51bGwtZGF0ZSI6Y2FzZSJncmFwaGljLXByb3BlcnRpZXMiOmNhc2UiY2FsY3VsYXRpb24tc2V0dGluZ3MiOmNhc2UibmFtZWQtZXhwcmVzc2lvbnMiOmNhc2Ui'@;
put 'bGFiZWwtcmFuZ2UiOmNhc2UibGFiZWwtcmFuZ2VzIjpjYXNlIm5hbWVkLWV4cHJlc3Npb24iOmNhc2Uic29ydCI6Y2FzZSJzb3J0LWJ5IjpjYXNlInNvcnQtZ3JvdXBzIjpjYXNlInRhYiI6Y2FzZSJsaW5lLWJyZWFrIjpjYXNlInNwYW4iOmNhc2UicyI6Y2FzZSJkYXRlIjpjYXNlIm9iamVj'@;
put 'dCI6Y2FzZSJ0aXRsZSI6Y2FzZSJcdTY4MDdcdTk4OTgiOmNhc2UiZGVzYyI6Y2FzZSJiaW5hcnktZGF0YSI6Y2FzZSJ0YWJsZS1zb3VyY2UiOmNhc2Uic2NlbmFyaW8iOmNhc2UiaXRlcmF0aW9uIjpjYXNlImNvbnRlbnQtdmFsaWRhdGlvbnMiOmNhc2UiY29udGVudC12YWxpZGF0aW9uIjpj'@;
put 'YXNlImhlbHAtbWVzc2FnZSI6Y2FzZSJlcnJvci1tZXNzYWdlIjpjYXNlImRhdGFiYXNlLXJhbmdlcyI6Y2FzZSJmaWx0ZXIiOmNhc2UiZmlsdGVyLWFuZCI6Y2FzZSJmaWx0ZXItb3IiOmNhc2UiZmlsdGVyLWNvbmRpdGlvbiI6Y2FzZSJsaXN0LWxldmVsLXN0eWxlLWJ1bGxldCI6Y2FzZSJs'@;
put 'aXN0LWxldmVsLXN0eWxlLW51bWJlciI6Y2FzZSJsaXN0LWxldmVsLXByb3BlcnRpZXMiOmNhc2Uic2VuZGVyLWZpcnN0bmFtZSI6Y2FzZSJzZW5kZXItbGFzdG5hbWUiOmNhc2Uic2VuZGVyLWluaXRpYWxzIjpjYXNlInNlbmRlci10aXRsZSI6Y2FzZSJzZW5kZXItcG9zaXRpb24iOmNhc2Ui'@;
put 'c2VuZGVyLWVtYWlsIjpjYXNlInNlbmRlci1waG9uZS1wcml2YXRlIjpjYXNlInNlbmRlci1mYXgiOmNhc2Uic2VuZGVyLWNvbXBhbnkiOmNhc2Uic2VuZGVyLXBob25lLXdvcmsiOmNhc2Uic2VuZGVyLXN0cmVldCI6Y2FzZSJzZW5kZXItY2l0eSI6Y2FzZSJzZW5kZXItcG9zdGFsLWNvZGUi'@;
put 'OmNhc2Uic2VuZGVyLWNvdW50cnkiOmNhc2Uic2VuZGVyLXN0YXRlLW9yLXByb3ZpbmNlIjpjYXNlImF1dGhvci1uYW1lIjpjYXNlImF1dGhvci1pbml0aWFscyI6Y2FzZSJjaGFwdGVyIjpjYXNlImZpbGUtbmFtZSI6Y2FzZSJ0ZW1wbGF0ZS1uYW1lIjpjYXNlInNoZWV0LW5hbWUiOmNhc2Ui'@;
put 'ZXZlbnQtbGlzdGVuZXIiOmNhc2UiaW5pdGlhbC1jcmVhdG9yIjpjYXNlImNyZWF0aW9uLWRhdGUiOmNhc2UicHJpbnQtZGF0ZSI6Y2FzZSJnZW5lcmF0b3IiOmNhc2UiZG9jdW1lbnQtc3RhdGlzdGljIjpjYXNlInVzZXItZGVmaW5lZCI6Y2FzZSJlZGl0aW5nLWR1cmF0aW9uIjpjYXNlImVk'@;
put 'aXRpbmctY3ljbGVzIjpjYXNlImNvbmZpZy1pdGVtIjpjYXNlInBhZ2UtbnVtYmVyIjpjYXNlInBhZ2UtY291bnQiOmNhc2UidGltZSI6Y2FzZSJjZWxsLXJhbmdlLXNvdXJjZSI6Y2FzZSJkZXRlY3RpdmUiOmNhc2Uib3BlcmF0aW9uIjpjYXNlImhpZ2hsaWdodGVkLXJhbmdlIjpjYXNlImRh'@;
put 'dGEtcGlsb3QtdGFibGUiOmNhc2Uic291cmNlLWNlbGwtcmFuZ2UiOmNhc2Uic291cmNlLXNlcnZpY2UiOmNhc2UiZGF0YS1waWxvdC1maWVsZCI6Y2FzZSJkYXRhLXBpbG90LWxldmVsIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWxzIjpjYXNlImRhdGEtcGlsb3Qtc3VidG90YWwiOmNhc2Ui'@;
put 'ZGF0YS1waWxvdC1tZW1iZXJzIjpjYXNlImRhdGEtcGlsb3QtbWVtYmVyIjpjYXNlImRhdGEtcGlsb3QtZGlzcGxheS1pbmZvIjpjYXNlImRhdGEtcGlsb3Qtc29ydC1pbmZvIjpjYXNlImRhdGEtcGlsb3QtbGF5b3V0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1maWVsZC1yZWZlcmVuY2UiOmNh'@;
put 'c2UiZGF0YS1waWxvdC1ncm91cHMiOmNhc2UiZGF0YS1waWxvdC1ncm91cCI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwLW1lbWJlciI6Y2FzZSJyZWN0IjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2xzIjpjYXNlImRkZS1jb25uZWN0aW9uLWRlY2wiOmNhc2UiZGRlLWxpbmsiOmNhc2UiZGRlLXNv'@;
put 'dXJjZSI6Y2FzZSJwcm9wZXJ0aWVzIjpjYXNlInByb3BlcnR5IjpjYXNlInRhYmxlLXByb3RlY3Rpb24iOmNhc2UiZGF0YS1waWxvdC1ncmFuZC10b3RhbCI6Y2FzZSJvZmZpY2UtZG9jdW1lbnQtY29tbW9uLWF0dHJzIjpicmVhaztjYXNlIm51bWJlci1zdHlsZSI6Y2FzZSJwZXJjZW50YWdl'@;
put 'LXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOmNhc2UidGltZS1zdHlsZSI6aWYoIi8iPT09QXRbMV0pe2lmKFhyW3FlLm5hbWVdPWl0LChqZT1NZS5wb3AoKSlbMF0hPT1BdFszXSl0aHJvdyJCYWQgc3RhdGU6ICIramV9ZWxzZSIvIiE9PUF0WzBdLmNoYXJBdChBdFswXS5sZW5ndGgtMikmJihp'@;
put 'dD0iIixxZT1sbihBdFswXSwhMSksTWUucHVzaChbQXRbM10sITBdKSk7YnJlYWs7Y2FzZSJzdHlsZSI6Ii8+Ij09PUF0WzBdLnNsaWNlKC0yKT9PKEF0WzBdLFJvKToiLyI9PUF0WzFdP08odmUuc2xpY2UoRmksQXQuaW5kZXgrQXRbMF0ubGVuZ3RoKSxSbyk6Rmk9QXQuaW5kZXg7YnJlYWs7'@;
put 'Y2FzZSJudW1iZXIiOmNhc2UiZGF5IjpjYXNlIm1vbnRoIjpjYXNlInllYXIiOmNhc2UiZXJhIjpjYXNlImRheS1vZi13ZWVrIjpjYXNlIndlZWstb2YteWVhciI6Y2FzZSJxdWFydGVyIjpjYXNlImhvdXJzIjpjYXNlIm1pbnV0ZXMiOmNhc2Uic2Vjb25kcyI6Y2FzZSJhbS1wbSI6c3dpdGNo'@;
put 'KE1lW01lLmxlbmd0aC0xXVswXSl7Y2FzZSJ0aW1lLXN0eWxlIjpjYXNlImRhdGUtc3R5bGUiOlllPWxuKEF0WzBdLCExKSxpdCs9RltBdFszXV1bImxvbmciPT09WWUuc3R5bGU/MTowXX1icmVhaztjYXNlInRleHQiOmlmKCIvPiI9PT1BdFswXS5zbGljZSgtMikpYnJlYWs7aWYoIi8iPT09'@;
put 'QXRbMV0pc3dpdGNoKE1lW01lLmxlbmd0aC0xXVswXSl7Y2FzZSJudW1iZXItc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppdCs9dmUuc2xpY2UoaHQsQXQuaW5kZXgpfWVsc2UgaHQ9QXQuaW5kZXgrQXRbMF0ubGVuZ3RoO2JyZWFrO2Nhc2UibmFtZWQtcmFuZ2Ui'@;
put 'OlNpPXI4KChZZT1sbihBdFswXSwhMSkpWyJjZWxsLXJhbmdlLWFkZHJlc3MiXSk7dmFyIG1zPXtOYW1lOlllLm5hbWUsUmVmOlNpWzBdKyIhIitTaVsxXX07eG8mJihtcy5TaGVldD1QdC5sZW5ndGgpLFRuLk5hbWVzLnB1c2gobXMpO2JyZWFrO2Nhc2UicCI6Y2FzZSJcdTY1ODdcdTY3MmNc'@;
put 'dTRlMzIiOmlmKFsibWFzdGVyLXN0eWxlcyJdLmluZGV4T2YoTWVbTWUubGVuZ3RoLTFdWzBdKT4tMSlicmVhaztpZigiLyIhPT1BdFsxXXx8Z24mJmduWyJzdHJpbmctdmFsdWUiXSlsbihBdFswXSwhMSksdW49QXQuaW5kZXgrQXRbMF0ubGVuZ3RoO2Vsc2V7dmFyIGhyPU0odmUuc2xpY2Uo'@;
put 'dW4sQXQuaW5kZXgpLDAsUm8pO3FuPShxbi5sZW5ndGg+MD9xbisiXG4iOiIiKStoclswXSxZbj1oclsxXX1icmVhaztjYXNlImRhdGFiYXNlLXJhbmdlIjppZigiLyI9PT1BdFsxXSlicmVhazt0cnl7dnRbKFNpPXI4KGxuKEF0WzBdKVsidGFyZ2V0LXJhbmdlLWFkZHJlc3MiXSkpWzBdXVsi'@;
put 'IWF1dG9maWx0ZXIiXT17cmVmOlNpWzFdfX1jYXRjaHt9YnJlYWs7Y2FzZSJhIjppZigiLyIhPT1BdFsxXSl7aWYoIShDcj1sbihBdFswXSwhMSkpLmhyZWYpYnJlYWs7Q3IuVGFyZ2V0PW1yKENyLmhyZWYpLGRlbGV0ZSBDci5ocmVmLCIjIj09Q3IuVGFyZ2V0LmNoYXJBdCgwKSYmQ3IuVGFy'@;
put 'Z2V0LmluZGV4T2YoIi4iKT4tMT8oU2k9cjgoQ3IuVGFyZ2V0LnNsaWNlKDEpKSxDci5UYXJnZXQ9IiMiK1NpWzBdKyIhIitTaVsxXSk6Q3IuVGFyZ2V0Lm1hdGNoKC9eXC5cLltcXFwvXS8pJiYoQ3IuVGFyZ2V0PUNyLlRhcmdldC5zbGljZSgzKSl9YnJlYWs7ZGVmYXVsdDpzd2l0Y2goQXRb'@;
put 'Ml0pe2Nhc2UiZGM6IjpjYXNlImNhbGNleHQ6IjpjYXNlImxvZXh0OiI6Y2FzZSJvb286IjpjYXNlImNoYXJ0b29vOiI6Y2FzZSJkcmF3OiI6Y2FzZSJzdHlsZToiOmNhc2UiY2hhcnQ6IjpjYXNlImZvcm06IjpjYXNlInVvZjoiOmNhc2UiXHU4ODY4OiI6Y2FzZSJcdTViNTc6IjpicmVhaztk'@;
put 'ZWZhdWx0OmlmKHllLldURil0aHJvdyBuZXcgRXJyb3IoQXQpfX12YXIgbmw9e1NoZWV0czp2dCxTaGVldE5hbWVzOlB0LFdvcmtib29rOlRufTtyZXR1cm4geWUuYm9va1NoZWV0cyYmZGVsZXRlIG5sLlNoZWV0cyxubH19KCk7ZnVuY3Rpb24gZXkoTSxGKXtyZXR1cm4gd3goTSxGKX12YXIg'@;
put 'UTI9ZnVuY3Rpb24oKXt2YXIgTT1bIiAgPG9mZmljZTptYXN0ZXItc3R5bGVzPiIsJyAgICA8c3R5bGU6bWFzdGVyLXBhZ2Ugc3R5bGU6bmFtZT0ibXAxIiBzdHlsZTpwYWdlLWxheW91dC1uYW1lPSJtcDEiPicsIiAgICAgIDxzdHlsZTpoZWFkZXIvPiIsJyAgICAgIDxzdHlsZTpoZWFkZXIt'@;
put 'bGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICAgIDxzdHlsZTpmb290ZXIvPiIsJyAgICAgIDxzdHlsZTpmb290ZXItbGVmdCBzdHlsZTpkaXNwbGF5PSJmYWxzZSIvPicsIiAgICA8L3N0eWxlOm1hc3Rlci1wYWdlPiIsIiAgPC9vZmZpY2U6bWFzdGVyLXN0eWxlcz4iXS5qb2lu'@;
put 'KCJcbiIpLEY9IjxvZmZpY2U6ZG9jdW1lbnQtc3R5bGVzICIrd2woeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGFibGU6'@;
put 'MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6InVybjpvYXNpczpuYW1lczp0Yzpv'@;
put 'cGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwieG1sbnM6ZGMiOiJodHRw'@;
put 'Oi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6'@;
put 'MS4wIiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsIm9mZmljZTp2ZXJzaW9uIjoiMS4yIn0pKyI+XG4iK00rIlxuPC9vZmZpY2U6ZG9jdW1lbnQtc3R5bGVzPiI7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFBuK0Z9fSgpLGVmPWZ1'@;
put 'bmN0aW9uKCl7dmFyIE09ZnVuY3Rpb24odmUsTWUpe3JldHVybiB5cih2ZSkucmVwbGFjZSgvICArL2csZnVuY3Rpb24oamUpe3JldHVybic8dGV4dDpzIHRleHQ6Yz0iJytqZS5sZW5ndGgrJyIvPid9KS5yZXBsYWNlKC9cdC9nLCI8dGV4dDp0YWIvPiIpLnJlcGxhY2UoL1xuL2csTWU/Ijx0'@;
put 'ZXh0OmxpbmUtYnJlYWsvPiI6IjwvdGV4dDpwPjx0ZXh0OnA+IikucmVwbGFjZSgvXiAvLCI8dGV4dDpzLz4iKS5yZXBsYWNlKC8gJC8sIjx0ZXh0OnMvPiIpfSxGPWZ1bmN0aW9uKHZlKXtyZXR1cm4gdmUubWFwKGZ1bmN0aW9uKE1lKXt2YXIgamU9IiI7cmV0dXJuIG51bGwhPU1lLm9kcyYm'@;
put 'KGplKz0nIHRleHQ6c3R5bGUtbmFtZT0iVCcrTWUub2RzKyciJyksTWUudj8iPHRleHQ6c3BhbiIramUrIj4iK00oTWUudiwhMCkrIjwvdGV4dDpzcGFuPiI6IiJ9KS5qb2luKCIiKX0sTz0iICAgICAgICAgIDx0YWJsZTp0YWJsZS1jZWxsIC8+XG4iLGllPWZ1bmN0aW9uKHZlLE1lLGplKXt2'@;
put 'YXIgWWU9W107WWUucHVzaCgnICAgICAgPHRhYmxlOnRhYmxlIHRhYmxlOm5hbWU9IicreXIoTWUuU2hlZXROYW1lc1tqZV0pKyciIHRhYmxlOnN0eWxlLW5hbWU9InRhMSI+XG4nKTt2YXIgcWU9MCxpdD0wLGh0PUhzKHZlWyIhcmVmIl18fCJBMSIpLGt0PXZlWyIhbWVyZ2VzIl18fFtdLHV0'@;
put 'PTAsdnQ9QXJyYXkuaXNBcnJheSh2ZSk7aWYodmVbIiFjb2xzIl0pZm9yKGl0PTA7aXQ8PWh0LmUuYzsrK2l0KVllLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLWNvbHVtbiIrKHZlWyIhY29scyJdW2l0XT8nIHRhYmxlOnN0eWxlLW5hbWU9ImNvJyt2ZVsiIWNvbHMiXVtpdF0ub2RzKyci'@;
put 'JzoiIikrIj48L3RhYmxlOnRhYmxlLWNvbHVtbj5cbiIpO3ZhciBEdD12ZVsiIXJvd3MiXXx8W107Zm9yKHFlPTA7cWU8aHQucy5yOysrcWUpWWUucHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93IisoRHRbcWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK0R0W3FlXS5vZHMrJyInOiIi'@;
put 'KSsiPjwvdGFibGU6dGFibGUtcm93PlxuIik7Zm9yKDtxZTw9aHQuZS5yOysrcWUpe2ZvcihZZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1yb3ciKyhEdFtxZV0/JyB0YWJsZTpzdHlsZS1uYW1lPSJybycrRHRbcWVdLm9kcysnIic6IiIpKyI+XG4iKSxpdD0wO2l0PGh0LnMuYzsrK2l0'@;
put 'KVllLnB1c2goTyk7Zm9yKDtpdDw9aHQuZS5jOysraXQpe3ZhciBBdD0hMSxadD17fSxnbj0iIjtmb3IodXQ9MDt1dCE9a3QubGVuZ3RoOysrdXQpaWYoIShrdFt1dF0ucy5jPml0fHxrdFt1dF0ucy5yPnFlfHxrdFt1dF0uZS5jPGl0fHxrdFt1dF0uZS5yPHFlKSl7KGt0W3V0XS5zLmMhPWl0'@;
put 'fHxrdFt1dF0ucy5yIT1xZSkmJihBdD0hMCksWnRbInRhYmxlOm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXT1rdFt1dF0uZS5jLWt0W3V0XS5zLmMrMSxadFsidGFibGU6bnVtYmVyLXJvd3Mtc3Bhbm5lZCJdPWt0W3V0XS5lLnIta3RbdXRdLnMucisxO2JyZWFrfWlmKEF0KVllLnB1c2goIiAg'@;
put 'ICAgICAgICA8dGFibGU6Y292ZXJlZC10YWJsZS1jZWxsLz5cbiIpO2Vsc2V7dmFyIHFuPURpKHtyOnFlLGM6aXR9KSx1bj12dD8odmVbcWVdfHxbXSlbaXRdOnZlW3FuXTtpZih1biYmdW4uZiYmKFp0WyJ0YWJsZTpmb3JtdWxhIl09eXIoUjModW4uZikpLHVuLkYmJnVuLkYuc2xpY2UoMCxx'@;
put 'bi5sZW5ndGgpPT1xbikpe3ZhciBKbj1Icyh1bi5GKTtadFsidGFibGU6bnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXT1Kbi5lLmMtSm4ucy5jKzEsWnRbInRhYmxlOm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl09Sm4uZS5yLUpuLnMucisxfWlmKHVuKXtzd2l0Y2godW4udCl7'@;
put 'Y2FzZSJiIjpnbj11bi52PyJUUlVFIjoiRkFMU0UiLFp0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJib29sZWFuIixadFsib2ZmaWNlOmJvb2xlYW4tdmFsdWUiXT11bi52PyJ0cnVlIjoiZmFsc2UiO2JyZWFrO2Nhc2UibiI6Z249dW4ud3x8U3RyaW5nKHVuLnZ8fDApLFp0WyJvZmZpY2U6dmFs'@;
put 'dWUtdHlwZSJdPSJmbG9hdCIsWnRbIm9mZmljZTp2YWx1ZSJdPXVuLnZ8fDA7YnJlYWs7Y2FzZSJzIjpjYXNlInN0ciI6Z249dW4udixadFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0ic3RyaW5nIjticmVhaztjYXNlImQiOmduPXVuLnd8fEZ0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbIm9mZmlj'@;
put 'ZTp2YWx1ZS10eXBlIl09ImRhdGUiLFp0WyJvZmZpY2U6ZGF0ZS12YWx1ZSJdPUZ0KHVuLnYpLnRvSVNPU3RyaW5nKCksWnRbInRhYmxlOnN0eWxlLW5hbWUiXT0iY2UxIjticmVhaztkZWZhdWx0OlllLnB1c2goTyk7Y29udGludWV9bnVsbCE9dW4ub2RzJiYhWnRbInRhYmxlOnN0eWxlLW5h'@;
put 'bWUiXSYmKFp0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlIit1bi5vZHMpO3ZhciBZbj0hdW4uUnx8dW4ubCYmdW4ubC5UYXJnZXQ/TShnbik6Rih1bi5SKTtpZih1bi5sJiZ1bi5sLlRhcmdldCl7dmFyIExuPXVuLmwuVGFyZ2V0OyIjIiE9KExuPSIjIj09TG4uY2hhckF0KDApPyIjIitxQyhM'@;
put 'bi5zbGljZSgxKSk6TG4pLmNoYXJBdCgwKSYmIUxuLm1hdGNoKC9eXHcrOi8pJiYoTG49Ii4uLyIrTG4pLFluPWRyKCJ0ZXh0OmEiLFluLHsieGxpbms6aHJlZiI6TG4ucmVwbGFjZSgvJi9nLCImYW1wOyIpfSl9WWUucHVzaCgiICAgICAgICAgICIrZHIoInRhYmxlOnRhYmxlLWNlbGwiLGRy'@;
put 'KCJ0ZXh0OnAiLFluLHt9KSxadCkrIlxuIil9ZWxzZSBZZS5wdXNoKE8pfX1ZZS5wdXNoKCIgICAgICAgIDwvdGFibGU6dGFibGUtcm93PlxuIil9cmV0dXJuIFllLnB1c2goIiAgICAgIDwvdGFibGU6dGFibGU+XG4iKSxZZS5qb2luKCIiKX0scGU9e2NlbnRlcjoiY2VudGVyIixsZWZ0OiJz'@;
put 'dGFydCIscmlnaHQ6ImVuZCJ9O3JldHVybiBmdW5jdGlvbihNZSxqZSl7dmFyIFllPVtQbl0scWU9d2woeyJ4bWxuczpvZmZpY2UiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mZmljZToxLjAiLCJ4bWxuczp0YWJsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVu'@;
put 'ZG9jdW1lbnQ6eG1sbnM6dGFibGU6MS4wIiwieG1sbnM6c3R5bGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnN0eWxlOjEuMCIsInhtbG5zOnRleHQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRleHQ6MS4wIiwieG1sbnM6ZHJhdyI6'@;
put 'InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHJhd2luZzoxLjAiLCJ4bWxuczpmbyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6eHNsLWZvLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6eGxpbmsiOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hs'@;
put 'aW5rIiwieG1sbnM6ZGMiOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsInhtbG5zOm1ldGEiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1ldGE6MS4wIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxu'@;
put 'czpkYXRhc3R5bGU6MS4wIiwieG1sbnM6cHJlc2VudGF0aW9uIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpwcmVzZW50YXRpb246MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAi'@;
put 'LCJ4bWxuczpjaGFydCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y2hhcnQ6MS4wIiwieG1sbnM6ZHIzZCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZHIzZDoxLjAiLCJ4bWxuczptYXRoIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OC9N'@;
put 'YXRoL01hdGhNTCIsInhtbG5zOmZvcm0iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmZvcm06MS4wIiwieG1sbnM6c2NyaXB0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzY3JpcHQ6MS4wIiwieG1sbnM6b29vIjoiaHR0cDovL29wZW5v'@;
put 'ZmZpY2Uub3JnLzIwMDQvb2ZmaWNlIiwieG1sbnM6b29vdyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L3dyaXRlciIsInhtbG5zOm9vb2MiOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwNC9jYWxjIiwieG1sbnM6ZG9tIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwtZXZlbnRz'@;
put 'IiwieG1sbnM6eGZvcm1zIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMi94Zm9ybXMiLCJ4bWxuczp4c2QiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsInhtbG5zOnhzaSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiwieG1sbnM6c2hlZXQi'@;
put 'OiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnNoMzN0anM6MS4wIiwieG1sbnM6cnB0IjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDUvcmVwb3J0IiwieG1sbnM6b2YiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm9mOjEuMiIsInhtbG5zOnhodG1s'@;
put 'IjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsInhtbG5zOmdyZGRsIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMy9nL2RhdGEtdmlldyMiLCJ4bWxuczp0YWJsZW9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA5L3RhYmxlIiwieG1sbnM6ZHJhd29vbyI6Imh0dHA6Ly9vcGVu'@;
put 'b2ZmaWNlLm9yZy8yMDEwL2RyYXciLCJ4bWxuczpjYWxjZXh0IjoidXJuOm9yZzpkb2N1bWVudGZvdW5kYXRpb246bmFtZXM6ZXhwZXJpbWVudGFsOmNhbGM6eG1sbnM6Y2FsY2V4dDoxLjAiLCJ4bWxuczpsb2V4dCI6InVybjpvcmc6ZG9jdW1lbnRmb3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1l'@;
put 'bnRhbDpvZmZpY2U6eG1sbnM6bG9leHQ6MS4wIiwieG1sbnM6ZmllbGQiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b29vLW1zLWludGVyb3A6eG1sbnM6ZmllbGQ6MS4wIiwieG1sbnM6Zm9ybXgiOiJ1cm46b3Blbm9mZmljZTpuYW1lczpleHBlcmltZW50YWw6b294bWwt'@;
put 'b2RmLWludGVyb3A6eG1sbnM6Zm9ybToxLjAiLCJ4bWxuczpjc3MzdCI6Imh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtdGV4dC8iLCJvZmZpY2U6dmVyc2lvbiI6IjEuMiJ9KSxpdD13bCh7InhtbG5zOmNvbmZpZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6Y29u'@;
put 'ZmlnOjEuMCIsIm9mZmljZTptaW1ldHlwZSI6ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQifSk7ImZvZHMiPT1qZS5ib29rVHlwZT8oWWUucHVzaCgiPG9mZmljZTpkb2N1bWVudCIrcWUraXQrIj5cbiIpLFllLnB1c2godDMoKS5yZXBsYWNlKC9vZmZp'@;
put 'Y2U6ZG9jdW1lbnQtbWV0YS9nLCJvZmZpY2U6bWV0YSIpKSk6WWUucHVzaCgiPG9mZmljZTpkb2N1bWVudC1jb250ZW50IitxZSsiPlxuIiksZnVuY3Rpb24odmUsTWUpe3ZhciBqZT1bXSxZZT17fTtqZS5wdXNoKCIgPG9mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIiksamUucHVzaCgnICA8'@;
put 'bnVtYmVyOmRhdGUtc3R5bGUgc3R5bGU6bmFtZT0iTjM3IiBudW1iZXI6YXV0b21hdGljLW9yZGVyPSJ0cnVlIj5cbicpLGplLnB1c2goJyAgIDxudW1iZXI6bW9udGggbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxqZS5wdXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4i'@;
put 'KSxqZS5wdXNoKCcgICA8bnVtYmVyOmRheSBudW1iZXI6c3R5bGU9ImxvbmciLz5cbicpLGplLnB1c2goIiAgIDxudW1iZXI6dGV4dD4vPC9udW1iZXI6dGV4dD5cbiIpLGplLnB1c2goIiAgIDxudW1iZXI6eWVhci8+XG4iKSxqZS5wdXNoKCIgIDwvbnVtYmVyOmRhdGUtc3R5bGU+XG4iKTt2'@;
put 'YXIgcWU9MDtNZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbih1dCl7cmV0dXJuIE1lLlNoZWV0c1t1dF19KS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtpZih1dCYmdXRbIiFjb2xzIl0pZm9yKHZhciB2dD0wO3Z0PHV0WyIhY29scyJdLmxlbmd0aDsrK3Z0KWlmKHV0WyIhY29scyJdW3Z0XSl7dmFy'@;
put 'IFB0PXV0WyIhY29scyJdW3Z0XTtpZihudWxsPT1QdC53aWR0aCYmbnVsbD09UHQud3B4JiZudWxsPT1QdC53Y2gpY29udGludWU7JHUoUHQpLFB0Lm9kcz1xZTt2YXIgRHQ9dXRbIiFjb2xzIl1bdnRdLndweCsicHgiO2plLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNvJytx'@;
put 'ZSsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNvbHVtbiI+XG4nKSxqZS5wdXNoKCcgICA8c3R5bGU6dGFibGUtY29sdW1uLXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpjb2x1bW4td2lkdGg9IicrRHQrJyIvPlxuJyksamUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxu'@;
put 'IiksKytxZX19KTt2YXIgaXQ9MDtNZS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbih1dCl7cmV0dXJuIE1lLlNoZWV0c1t1dF19KS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtpZih1dCYmdXRbIiFyb3dzIl0pZm9yKHZhciB2dD0wO3Z0PHV0WyIhcm93cyJdLmxlbmd0aDsrK3Z0KWlmKHV0WyIhcm93'@;
put 'cyJdW3Z0XSl7dXRbIiFyb3dzIl1bdnRdLm9kcz1pdDt2YXIgUHQ9dXRbIiFyb3dzIl1bdnRdLmhweCsicHgiO2plLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InJvJytpdCsnIiBzdHlsZTpmYW1pbHk9InRhYmxlLXJvdyI+XG4nKSxqZS5wdXNoKCcgICA8c3R5bGU6dGFibGUt'@;
put 'cm93LXByb3BlcnRpZXMgZm86YnJlYWstYmVmb3JlPSJhdXRvIiBzdHlsZTpyb3ctaGVpZ2h0PSInK1B0KyciLz5cbicpLGplLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsraXR9fSksamUucHVzaCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0idGExIiBzdHlsZTpmYW1pbHk9InRh'@;
put 'YmxlIiBzdHlsZTptYXN0ZXItcGFnZS1uYW1lPSJtcDEiPlxuJyksamUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXByb3BlcnRpZXMgdGFibGU6ZGlzcGxheT0idHJ1ZSIgc3R5bGU6d3JpdGluZy1tb2RlPSJsci10YiIvPlxuJyksamUucHVzaCgiICA8L3N0eWxlOnN0eWxlPlxuIiksamUucHVz'@;
put 'aCgnICA8c3R5bGU6c3R5bGUgc3R5bGU6bmFtZT0iY2UxIiBzdHlsZTpmYW1pbHk9InRhYmxlLWNlbGwiIHN0eWxlOnBhcmVudC1zdHlsZS1uYW1lPSJEZWZhdWx0IiBzdHlsZTpkYXRhLXN0eWxlLW5hbWU9Ik4zNyIvPlxuJyk7dmFyIGh0PTI7aXQ9MCxNZS5TaGVldE5hbWVzLm1hcChmdW5j'@;
put 'dGlvbih1dCl7cmV0dXJuIE1lLlNoZWV0c1t1dF19KS5mb3JFYWNoKGZ1bmN0aW9uKHV0KXtpZih1dClmb3IodmFyIHZ0PTAsUHQ9MCxEdD1Icyh1dFsiIXJlZiJdKSxBdD1BcnJheS5pc0FycmF5KHV0KTt2dDw9RHQuZS5yOysrdnQpZm9yKFB0PTA7UHQ8PUR0LmUuYzsrK1B0KXt2YXIgWnQ9'@;
put 'RGkoe3I6dnQsYzpQdH0pLGduPUF0Pyh1dFt2dF18fFtdKVtQdF06dXRbWnRdO2lmKGduJiYoZ24uc3x8Z24uUikpe3ZhciBxbj1bXTtnbi5zJiZxbi5wdXNoKFtnbiwhMF0pLGduLlImJmduLlIuZm9yRWFjaChmdW5jdGlvbih1bil7dW4mJnVuLnMmJnFuLnB1c2goW3VuLCExXSl9KSxxbi5m'@;
put 'b3JFYWNoKGZ1bmN0aW9uKHVuKXt2YXIgSm49dW5bMF0sWW49Sm4ucyxMbj0iIix0cj17InN0eWxlOm5hbWUiOih1blsxXT8iY2UiOiJUIikraHQsInN0eWxlOmZhbWlseSI6dW5bMV0/InRhYmxlLWNlbGwiOiJ0ZXh0In07dW5bMV0mJih0clsic3R5bGU6cGFyZW50LXN0eWxlLW5hbWUiXT0i'@;
put 'RGVmYXVsdCIsdHJbInN0eWxlOmRhdGEtc3R5bGUtbmFtZSJdPSJOMCIpO3ZhciBycj17fSxVbj0hMSxYcj17fSxwaT0hMSxPaT17fSxOaT0hMTtpZihZbi5jb2xvciYmKFhyWyJmbzpjb2xvciJdPSIjIitQdShZbi5jb2xvci5yZ2IpLHBpPSEwKSxZbi5zeiYmKFhyWyJmbzpmb250LXNpemUi'@;
put 'XT1Zbi5zeisicHQiLHBpPSEwKSxZbi5ib2xkJiYoWHJbImZvOmZvbnQtd2VpZ2h0Il09ImJvbGQiLHBpPSEwKSxZbi5pdGFsaWMmJihYclsiZm86Zm9udC1zdHlsZSJdPSJpdGFsaWMiLHBpPSEwKSxZbi5uYW1lJiYoWWVbWW4ubmFtZV18fChZZVtZbi5uYW1lXT1Zbi5uYW1lLm1hdGNoKC8g'@;
put 'Lyk/IiZhcG9zOyIrWW4ubmFtZSsiJmFwb3M7IjpZbi5uYW1lKSxYclsic3R5bGU6Zm9udC1uYW1lIl09WW4ubmFtZSxwaT0hMCksWW4uc3RyaWtlJiYoWHJbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXN0eWxlIl09InNvbGlkIixYclsic3R5bGU6dGV4dC1saW5lLXRocm91Z2gtdHlwZSJd'@;
put 'PSJzaW5nbGUiLHBpPSEwKSxZbi51bmRlcmxpbmUmJihYclsic3R5bGU6dGV4dC11bmRlcmxpbmUtc3R5bGUiXT0ic29saWQiLFhyWyJzdHlsZTp0ZXh0LXVuZGVybGluZS13aWR0aCJdPSJhdXRvIixYclsic3R5bGU6dGV4dC11bmRlcmxpbmUtY29sb3IiXT0iZm9udC1jb2xvciIscGk9ITAp'@;
put 'LHVuWzFdKXtpZihZbi5hbGlnbm1lbnQpe3ZhciBkaT1Zbi5hbGlnbm1lbnQ7ZGkud3JhcFRleHQmJihyclsiZm86d3JhcC1vcHRpb24iXT0id3JhcCIsVW49ITApLGRpLnZlcnRpY2FsJiYocnJbInN0eWxlOnZlcnRpY2FsLWFsaWduIl09ImNlbnRlciI9PWRpLnZlcnRpY2FsPyJtaWRkbGUi'@;
put 'OmRpLnZlcnRpY2FsLFVuPSEwKSxwZVtkaS5ob3Jpem9udGFsXSYmKE9pWyJmbzp0ZXh0LWFsaWduIl09cGVbZGkuaG9yaXpvbnRhbF0sTmk9ITApfVluLmZnQ29sb3ImJihyclsiZm86YmFja2dyb3VuZC1jb2xvciJdPSIjIitQdShZbi5mZ0NvbG9yLnJnYiksVW49ITApfVVuJiYoTG4rPWRy'@;
put 'KCJzdHlsZTp0YWJsZS1jZWxsLXByb3BlcnRpZXMiLG51bGwscnIpKSxwaSYmKExuKz1kcigic3R5bGU6dGV4dC1wcm9wZXJ0aWVzIixudWxsLFhyKSksTmkmJihMbis9ZHIoInN0eWxlOnBhcmFncmFwaC1wcm9wZXJ0aWVzIixudWxsLE9pKSksamUucHVzaCgiICAiK2RyKCJzdHlsZTpzdHls'@;
put 'ZSIsTG4sdHIpKyJcbiIpLEpuLm9kcz1odCwrK2h0fSl9fX0pLGplLnB1c2goIiA8L29mZmljZTphdXRvbWF0aWMtc3R5bGVzPlxuIik7dmFyIGt0PSIgPG9mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iK2F0KFllKS5tYXAoZnVuY3Rpb24odXQpe3JldHVybicgIDxzdHlsZTpmb250LWZhY2Ug'@;
put 'c3R5bGU6bmFtZT0iJyt1dCsnIiBzdmc6Zm9udC1mYW1pbHk9IicrWWVbdXRdKyciLz5cbid9KS5qb2luKCIiKSsiIDwvb2ZmaWNlOmZvbnQtZmFjZS1kZWNscz5cbiI7dmUucHVzaChrdCksdmUucHVzaChqZS5qb2luKCIiKSl9KFllLE1lKSxZZS5wdXNoKCIgIDxvZmZpY2U6Ym9keT5cbiIp'@;
put 'LFllLnB1c2goIiAgICA8b2ZmaWNlOnNwcmVhZHNoZWV0PlxuIik7Zm9yKHZhciBodD0wO2h0IT1NZS5TaGVldE5hbWVzLmxlbmd0aDsrK2h0KVllLnB1c2goaWUoTWUuU2hlZXRzW01lLlNoZWV0TmFtZXNbaHRdXSxNZSxodCkpO3JldHVybiBZZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFk'@;
put 'c2hlZXQ+XG4iKSxZZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxZZS5wdXNoKCJmb2RzIj09amUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksWWUuam9pbigiIil9fSgpO2Z1bmN0aW9uIHR5KE0sRil7aWYoImZvZHMiPT1G'@;
put 'LmJvb2tUeXBlKXJldHVybiBlZihNLEYpO3ZhciBPPWJuKCksSj0iIixpZT1bXSxwZT1bXTtyZXR1cm4gR3QoTyxKPSJtaW1ldHlwZSIsImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQiKSxHdChPLEo9ImNvbnRlbnQueG1sIixlZihNLEYpKSxpZS5wdXNo'@;
put 'KFtKLCJ0ZXh0L3htbCJdKSxwZS5wdXNoKFtKLCJDb250ZW50RmlsZSJdKSxHdChPLEo9InN0eWxlcy54bWwiLFEyKE0sRikpLGllLnB1c2goW0osInRleHQveG1sIl0pLHBlLnB1c2goW0osIlN0eWxlc0ZpbGUiXSksR3QoTyxKPSJtZXRhLnhtbCIsUG4rdDMoKSksaWUucHVzaChbSiwidGV4'@;
put 'dC94bWwiXSkscGUucHVzaChbSiwiTWV0YWRhdGFGaWxlIl0pLEd0KE8sSj0ibWFuaWZlc3QucmRmIixmdW5jdGlvbiB0YyhNKXt2YXIgRj1bUG5dO0YucHVzaCgnPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj5cbicpO2Zv'@;
put 'cih2YXIgTz0wO08hPU0ubGVuZ3RoOysrTylGLnB1c2goT2woTVtPXVswXSxNW09dWzFdKSksRi5wdXNoKHEwKCIiLE1bT11bMF0pKTtyZXR1cm4gRi5wdXNoKE9sKCIiLCJEb2N1bWVudCIsInBrZyIpKSxGLnB1c2goIjwvcmRmOlJERj4iKSxGLmpvaW4oIiIpfShwZSkpLGllLnB1c2goW0os'@;
put 'ImFwcGxpY2F0aW9uL3JkZit4bWwiXSksR3QoTyxKPSJNRVRBLUlORi9tYW5pZmVzdC54bWwiLGZ1bmN0aW9uIEthKE0pe3ZhciBGPVtQbl07Ri5wdXNoKCc8bWFuaWZlc3Q6bWFuaWZlc3QgeG1sbnM6bWFuaWZlc3Q9InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6bWFu'@;
put 'aWZlc3Q6MS4wIiBtYW5pZmVzdDp2ZXJzaW9uPSIxLjIiPlxuJyksRi5wdXNoKCcgIDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iLyIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIiBtYW5pZmVzdDptZWRpYS10eXBlPSJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRv'@;
put 'Y3VtZW50LnNwcmVhZHNoZWV0Ii8+XG4nKTtmb3IodmFyIE89MDtPPE0ubGVuZ3RoOysrTylGLnB1c2goJyAgPG1hbmlmZXN0OmZpbGUtZW50cnkgbWFuaWZlc3Q6ZnVsbC1wYXRoPSInK01bT11bMF0rJyIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iJytNW09dWzFdKyciLz5cbicpO3JldHVybiBG'@;
put 'LnB1c2goIjwvbWFuaWZlc3Q6bWFuaWZlc3Q+IiksRi5qb2luKCIiKX0oaWUpKSxPfWZ1bmN0aW9uIHRmKE0pe3JldHVybiBmdW5jdGlvbihPLEope3ZhciBpZT1mdW5jdGlvbiBETyhNLEYpe2lmKCFGKXJldHVybiAwO3ZhciBPPU0uU2hlZXROYW1lcy5pbmRleE9mKEYpO2lmKC0xPT1PKXRo'@;
put 'cm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK0YpO3JldHVybiBPfShPLEouc2hlZXQpO3JldHVybiBNLmZyb21fc2hlZXQoTy5TaGVldHNbTy5TaGVldE5hbWVzW2llXV0sSixPKX19dmFyIG55PXRmKE51KSxyeT10Zih7ZnJvbV9zaGVldDpNdX0pLEFPPXRmKHR5cGVvZiBmXzwi'@;
put 'dSI/Zl86e30pLE14PXRmKHR5cGVvZiBFNjwidSI/RTY6e30pLHg4PXRmKHR5cGVvZiBqMjwidSI/ajI6e30pLExPPXRmKHR5cGVvZiBGNjwidSI/RjY6e30pLGs4PXRmKHtmcm9tX3NoZWV0Ok94fSksT1c9dGYodHlwZW9mIFYyPCJ1Ij9WMjp7fSksUFc9dGYodHlwZW9mIFhtPCJ1Ij9YbTp7'@;
put 'fSksVmM9Uig5MTQyNil8fHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvQnJvd3NlcmlmeTtpZighVmMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBjcnlwdG8gZXh0ZW5zaW9ucyEiKTt2YXIgSU89e1NIQTUxMjoic2hhNTEyIixTSEEyNTY6InNoYTI1NiIsU0hBMzg0OiJz'@;
put 'aGEzODQiLFNIQTE6InNoYTEiLE1ENToibWQ1IixNRDQ6Im1kNCIsTUQyOiJtZDIifTtmdW5jdGlvbiBtYShNLEYpe3N3aXRjaChGPShGfHwiIikucmVwbGFjZSgvLS9nLCIiKSl7Y2FzZSJTSEEtNTEyIjpjYXNlIlNIQTUxMiI6cmV0dXJuIG5ldyBWYy5jcmVhdGVIYXNoKCJzaGE1MTIiKS51'@;
put 'cGRhdGUoTSkuZGlnZXN0KCk7Y2FzZSJTSEEtMSI6Y2FzZSJTSEExIjpyZXR1cm4gbmV3IFZjLmNyZWF0ZUhhc2goInNoYTEiKS51cGRhdGUoTSkuZGlnZXN0KCk7Y2FzZSJNRDIiOnJldHVybiBuZXcgVmMuY3JlYXRlSGFzaCgibWQyIikudXBkYXRlKE0pLmRpZ2VzdCgpO2RlZmF1bHQ6aWYo'@;
put 'SU9bRl0pcmV0dXJuIG5ldyBWYy5jcmVhdGVIYXNoKElPW0ZdKS51cGRhdGUoTSkuZGlnZXN0KCk7dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK0YpfX1mdW5jdGlvbiB5NChNLEYsTyl7aWYoInJjMiI9PU8pdGhyb3ciVW5zdXBwb3J0ZWQgUkMyIjt2YXIg'@;
put 'Sj1WYy5jcmVhdGVEZWNpcGhlcml2KE98fCJhZXMtMjU2LWNiYyIsTSxGKTtyZXR1cm4gSi5zZXRBdXRvUGFkZGluZyghMSksSn1mdW5jdGlvbiBUOChNKXtyZXR1cm5bKCIwMCIrKDI1NSZNKS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoTT4+PjgmMjU1KS50b1N0cmluZygxNikp'@;
put 'LnNsaWNlKC0yKSwoIjAwIisoTT4+PjE2JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMiksKCIwMCIrKE0+Pj4yNCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXS5qb2luKCIiKX12YXIgTTA9ZnVuY3Rpb24oTSxGLE8pe2Zvcih2YXIgSj0ic3RyaW5nIj09dHlwZW9mIEY/QnVmZmVy'@;
put 'LmZyb20oRiwiaGV4Iik6RixpZT0ic3RyaW5nIj09dHlwZW9mIE0/QnVmZmVyLmZyb20oY3B0YWJsZS51dGlscy5lbmNvZGUoMTIwMCxNKSk6TSxwZT0ic3RyaW5nIj09dHlwZW9mIE8/QnVmZmVyLmZyb20oTywiaGV4Iik6Tyx5ZT1tYShpZSwiTUQ1IiksdmU9QnVmZmVyLmNvbmNhdChbeWUu'@;
put 'c2xpY2UoMCw1KSxKXSksTWU9MDtNZTw0OysrTWUpdmU9QnVmZmVyLmNvbmNhdChbdmUsdmVdKTt2YXIgamU9bWEodmUsIk1ENSIpO3JldHVybihtYShCdWZmZXIuY29uY2F0KFtqZS5zbGljZSgwLDUpLHBlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0scGw9ZnVuY3Rpb24oTSxGLE8pe3ZhciBKPSJzdHJpbmciPT10eXBlb2YgRj9CdWZmZXIuZnJvbShGLCJoZXgiKTpGLGllPSJzdHJpbmciPT10eXBlb2YgTT9CdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLE0pKTpNLHBlPSJz'@;
put 'dHJpbmciPT10eXBlb2YgTz9CdWZmZXIuZnJvbShPLCJoZXgiKTpPLHllPW1hKEJ1ZmZlci5jb25jYXQoW0osaWVdKSwiU0hBMSIpO3JldHVybiBtYShCdWZmZXIuY29uY2F0KFt5ZSxwZV0pLCJTSEExIil9LEg1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gRigpe31GLnByb3RvdHlwZS5idWlsZD1m'@;
put 'dW5jdGlvbih1dCl7dGhpcy5faT0wO3ZhciB2dD10aGlzLl9idWlsZCh1dCwiIik7cmV0dXJuIiI9PT12dD8iIjonPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/PicrdnR9LEYucHJvdG90eXBlLl9idWlsZD1mdW5jdGlvbih1dCx2dCl7aWYo'@;
put 'dGhpcy5faSsrJTFlNj09MCYmKHRoaXMuX2M9dnRbMF0pLG51bGw9PXV0fHwib2JqZWN0IiE9dHlwZW9mIHV0JiYiZnVuY3Rpb24iIT10eXBlb2YgdXQpbnVsbCE9dXQmJih2dCs9ZnVuY3Rpb24gTSh1dCx2dCl7cmV0dXJuIG51bGw9PXV0fHwodXQ9dXQudG9TdHJpbmcoKS5yZXBsYWNlKC8m'@;
put 'L2csIiZhbXA7IikucmVwbGFjZSgvPC9nLCImbHQ7IikucmVwbGFjZSgvPi9nLCImZ3Q7IiksdnQmJih1dD11dC5yZXBsYWNlKC8iL2csIiZxdW90OyIpKSksdXR9KHV0KSk7ZWxzZXtpZighdXQubmFtZSl0aHJvdyBuZXcgRXJyb3IoIlhNTCBub2RlIGRvZXMgbm90IGhhdmUgbmFtZTogIitK'@;
put 'U09OLnN0cmluZ2lmeSh1dCkpO3Z0Kz0iPCIrdXQubmFtZTt2YXIgUHQ9dGhpczt2dCs9dXQuYXR0cmlidXRlcyYmd2wodXQuYXR0cmlidXRlcyl8fCIiLEFycmF5LmlzQXJyYXkodXQuY2hpbGRyZW4pJiYwIT11dC5jaGlsZHJlbi5sZW5ndGg/KHZ0Kz0iPiIsdXQuY2hpbGRyZW4uZm9yRWFj'@;
put 'aChmdW5jdGlvbihEdCl7dnQ9UHQuX2J1aWxkKER0LHZ0KX0pLHZ0Kz0iPC8iK3V0Lm5hbWUrIj4iKTp2dCs9Ii8+In1yZXR1cm4gdnR9O3ZhciBPPUJ1ZmZlci5mcm9tKFs0LDAsNCwwLDY0LDAsMCwwXSkscGU9e2RhdGFJbnRlZ3JpdHk6e2htYWNLZXk6QnVmZmVyLmZyb20oWzk1LDE3OCwx'@;
put 'NzMsMSwxMiwxODUsMjI1LDI0Nl0pLGhtYWNWYWx1ZTpCdWZmZXIuZnJvbShbMTYwLDEwMywxMjcsMiwxNzgsNDQsMTMyLDUxXSl9LGtleTpCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKSx2ZXJpZmllckhhc2g6e2lucHV0OkJ1ZmZlci5mcm9tKFsyNTQsMTY3'@;
put 'LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pLHZhbHVlOkJ1ZmZlci5mcm9tKFsyMTUsMTcwLDE1LDEwOSw0OCw5Nyw1Miw3OF0pfX07ZnVuY3Rpb24geWUodXQsdnQsUHQsRHQsQXQsWnQpe3ZhciBnbj12dC50b0xvd2VyQ2FzZSgpKyItIis4KkR0Lmxlbmd0aDtpZigiQ2hhaW5pbmdNb2RlQ0JD'@;
put 'IiE9PVB0KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBjaXBoZXIgY2hhaW5pbmc6ICIrUHQpO3ZhciBxbj1WY1t1dD8iY3JlYXRlQ2lwaGVyaXYiOiJjcmVhdGVEZWNpcGhlcml2Il0oZ24rPSItY2JjIixEdCxBdCk7cW4uc2V0QXV0b1BhZGRpbmcoITEpO3ZhciB1bj1xbi51cGRhdGUoWnQp'@;
put 'LEpuPVt1bl07dHJ5e3ZhciBZbj1xbi5maW5hbCgpO0puLnB1c2goWW4pfWNhdGNoe31yZXR1cm4gQnVmZmVyLmNvbmNhdChKbil9ZnVuY3Rpb24gdmUodXQpe3V0PXV0LnRvTG93ZXJDYXNlKCk7dmFyIHZ0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2lmKFZjLmdldEhhc2hlcygpLmlu'@;
put 'ZGV4T2YodXQpPDApdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBoYXNoIGFsZ29yaXRobSAiK3V0KTt2YXIgRHQ9VmMuY3JlYXRlSGFzaCh1dCk7cmV0dXJuIER0LnVwZGF0ZShCdWZmZXIuY29uY2F0KHZ0KSksRHQuZGlnZXN0KCl9ZnVuY3Rpb24gTWUodXQsdnQsUHQsRHQpeyJudW1i'@;
put 'ZXIiPT10eXBlb2YgRHQmJihEdD1qZShEdCkpO3ZhciBBdD12ZSh1dCx2dCxEdCk7aWYoQXQubGVuZ3RoPFB0KXt2YXIgWnQ9QnVmZmVyLmFsbG9jKFB0LDU0KTtBdC5jb3B5KFp0KSxBdD1adH1lbHNlIEF0Lmxlbmd0aD5QdCYmKEF0PUF0LnNsaWNlKDAsUHQpKTtyZXR1cm4gQXR9ZnVuY3Rp'@;
put 'b24gamUodXQsdnQpe3ZhciBQdD1CdWZmZXIuYWxsb2ModnR8fDQpO3JldHVybiBQdC53cml0ZVVJbnQzMkxFKHV0LDApLFB0fWZ1bmN0aW9uIFllKHV0LHZ0LFB0LER0LEF0LFp0KXtmb3IodmFyIHFuPXZlKHZ0LFB0LEJ1ZmZlci5mcm9tKHV0LCJ1dGYxNmxlIikpLHVuPTA7dW48RHQ7dW4r'@;
put 'Kylxbj12ZSh2dCxqZSh1bikscW4pO3ZhciBZbj1BdC84O2lmKChxbj12ZSh2dCxxbixadCkpLmxlbmd0aDxZbil7dmFyIExuPUJ1ZmZlci5hbGxvYyhZbiw1NCk7cW4uY29weShMbikscW49TG59ZWxzZSBxbi5sZW5ndGg+WW4mJihxbj1xbi5zbGljZSgwLFluKSk7cmV0dXJuIHFufXJldHVy'@;
put 'biBWYy5yYW5kb21CeXRlc3x8KFZjLnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKHV0KXtmb3IodmFyIHZ0PUJ1ZmZlci5hbGxvYyh1dCksUHQ9MDtQdDx1dDsrK1B0KXZ0W1B0XT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtyZXR1cm4gdnR9KSxmdW5jdGlvbiBrdCh1dCx2dCl7aWYoInN0'@;
put 'cmluZyI9PXR5cGVvZiB1dClyZXR1cm4ga3QoQnVmZmVyLmZyb20odXQsImJpbmFyeSIpLHZ0KTt2YXIgUHQ9VmMucmFuZG9tQnl0ZXMoMzIpLER0PXtwYWNrYWdlOntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOlZjLnJh'@;
put 'bmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixrZXlCaXRzOjgqUHQubGVuZ3RofSxrZXk6e2NpcGhlckFsZ29yaXRobToiQUVTIixjaXBoZXJDaGFpbmluZzoiQ2hhaW5pbmdNb2RlQ0JDIixzYWx0VmFsdWU6VmMucmFuZG9tQnl0'@;
put 'ZXMoMTYpLGhhc2hBbGdvcml0aG06IlNIQTUxMiIsaGFzaFNpemU6NjQsYmxvY2tTaXplOjE2LHNwaW5Db3VudDoxLGtleUJpdHM6MjU2fX0sQXQ9ZnVuY3Rpb24gcWUodXQsdnQsUHQsRHQsQXQsWnQsZ24scW4pe2Zvcih2YXIgdW49W10sSm49dXQ/MDo4LFluPTAsTG49MCx0cj0wO3RyPHFu'@;
put 'Lmxlbmd0aDspeyh0cj0oTG49dHIpKzQwOTYpPnFuLmxlbmd0aCYmKHRyPXFuLmxlbmd0aCk7dmFyIHJyPXFuLnNsaWNlKExuK0puLHRyK0puKSxVbj1yci5sZW5ndGglQXQ7VW4mJihycj1CdWZmZXIuY29uY2F0KFtycixCdWZmZXIuYWxsb2MoQXQtVW4pXSkpO3ZhciBwaT15ZSh1dCx2dCxQ'@;
put 'dCxnbixNZShEdCxadCxBdCxZbikscnIpO3VuLnB1c2gocGkpLFluKyt9dmFyIE9pPUJ1ZmZlci5jb25jYXQodW4pO2lmKHV0KU9pPUJ1ZmZlci5jb25jYXQoW2plKHFuLmxlbmd0aCw4KSxPaV0pO2Vsc2V7dmFyIE5pPXFuLnJlYWRVSW50MzJMRSgwKTtPaT1PaS5zbGljZSgwLE5pKX1yZXR1'@;
put 'cm4gT2l9KCEwLER0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLER0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsRHQucGFja2FnZS5oYXNoQWxnb3JpdGhtLER0LnBhY2thZ2UuYmxvY2tTaXplLER0LnBhY2thZ2Uuc2FsdFZhbHVlLFB0LHV0KSxadD1WYy5yYW5kb21CeXRlcyg2NCksZ249TWUo'@;
put 'RHQucGFja2FnZS5oYXNoQWxnb3JpdGhtLER0LnBhY2thZ2Uuc2FsdFZhbHVlLER0LnBhY2thZ2UuYmxvY2tTaXplLHBlLmRhdGFJbnRlZ3JpdHkuaG1hY0tleSkscW49eWUoITAsRHQucGFja2FnZS5jaXBoZXJBbGdvcml0aG0sRHQucGFja2FnZS5jaXBoZXJDaGFpbmluZyxQdCxnbixadCks'@;
put 'dW49ZnVuY3Rpb24gaXQodXQsdnQpe3V0PXV0LnRvTG93ZXJDYXNlKCk7dmFyIFB0PVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpO2lmKFZjLmdldEhhc2hlcygpLmluZGV4T2YodXQpPDApdGhyb3cgbmV3IEVycm9yKCJITUFDIGFsZ29yaXRobSAnIit1dCsiJyBub3Qgc3VwcG9ydGVkISIp'@;
put 'O3ZhciBBdD1WYy5jcmVhdGVIbWFjKHV0LHZ0KTtyZXR1cm4gQXQudXBkYXRlKEJ1ZmZlci5jb25jYXQoUHQpKSxBdC5kaWdlc3QoKX0oRHQucGFja2FnZS5oYXNoQWxnb3JpdGhtLFp0LEF0KSxKbj1NZShEdC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sRHQucGFja2FnZS5zYWx0VmFsdWUsRHQu'@;
put 'cGFja2FnZS5ibG9ja1NpemUscGUuZGF0YUludGVncml0eS5obWFjVmFsdWUpLFluPXllKCEwLER0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLER0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsUHQsSm4sdW4pO0R0LmRhdGFJbnRlZ3JpdHk9e2VuY3J5cHRlZEhtYWNLZXk6cW4sZW5jcnlwdGVk'@;
put 'SG1hY1ZhbHVlOllufTt2YXIgTG49WWUodnQsRHQua2V5Lmhhc2hBbGdvcml0aG0sRHQua2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLHBlLmtleSk7RHQua2V5LmVuY3J5cHRlZEtleVZhbHVlPXllKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5'@;
put 'LmNpcGhlckNoYWluaW5nLExuLER0LmtleS5zYWx0VmFsdWUsUHQpO3ZhciB0cj1WYy5yYW5kb21CeXRlcygxNikscnI9WWUodnQsRHQua2V5Lmhhc2hBbGdvcml0aG0sRHQua2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC5pbnB1'@;
put 'dCk7RHQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0PXllKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5LmNpcGhlckNoYWluaW5nLHJyLER0LmtleS5zYWx0VmFsdWUsdHIpO3ZhciBVbj12ZShEdC5rZXkuaGFzaEFsZ29yaXRobSx0ciksWHI9WWUodnQsRHQua2V5Lmhh'@;
put 'c2hBbGdvcml0aG0sRHQua2V5LnNhbHRWYWx1ZSxEdC5rZXkuc3BpbkNvdW50LER0LmtleS5rZXlCaXRzLHBlLnZlcmlmaWVySGFzaC52YWx1ZSk7RHQua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlPXllKCEwLER0LmtleS5jaXBoZXJBbGdvcml0aG0sRHQua2V5LmNpcGhlckNoYWlu'@;
put 'aW5nLFhyLER0LmtleS5zYWx0VmFsdWUsVW4pO3ZhciBwaT1mdW5jdGlvbiBodCh1dCl7dmFyIHZ0PXtuYW1lOiJlbmNyeXB0aW9uIixhdHRyaWJ1dGVzOnt4bWxuczoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9lbmNyeXB0aW9uIiwieG1sbnM6cCI6Imh0dHA6'@;
put 'Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiwieG1sbnM6YyI6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL2NlcnRpZmljYXRlIn0sY2hpbGRyZW46W3tuYW1lOiJrZXlEYXRhIixh'@;
put 'dHRyaWJ1dGVzOntzYWx0U2l6ZTp1dC5wYWNrYWdlLnNhbHRWYWx1ZS5sZW5ndGgsYmxvY2tTaXplOnV0LnBhY2thZ2UuYmxvY2tTaXplLGtleUJpdHM6dXQucGFja2FnZS5rZXlCaXRzLGhhc2hTaXplOnV0LnBhY2thZ2UuaGFzaFNpemUsY2lwaGVyQWxnb3JpdGhtOnV0LnBhY2thZ2UuY2lw'@;
put 'aGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOnV0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRobTp1dC5wYWNrYWdlLmhhc2hBbGdvcml0aG0sc2FsdFZhbHVlOnV0LnBhY2thZ2Uuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1lOiJkYXRhSW50ZWdyaXR5'@;
put 'IixhdHRyaWJ1dGVzOntlbmNyeXB0ZWRIbWFjS2V5OnV0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY0tleS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkSG1hY1ZhbHVlOnV0LmRhdGFJbnRlZ3JpdHkuZW5jcnlwdGVkSG1hY1ZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19LHtuYW1l'@;
put 'OiJrZXlFbmNyeXB0b3JzIixjaGlsZHJlbjpbe25hbWU6ImtleUVuY3J5cHRvciIsYXR0cmlidXRlczp7dXJpOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCJ9LGNoaWxkcmVuOlt7bmFtZToicDplbmNyeXB0ZWRLZXkiLGF0'@;
put 'dHJpYnV0ZXM6e3NwaW5Db3VudDp1dC5rZXkuc3BpbkNvdW50LHNhbHRTaXplOnV0LmtleS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTp1dC5rZXkuYmxvY2tTaXplLGtleUJpdHM6dXQua2V5LmtleUJpdHMsaGFzaFNpemU6dXQua2V5Lmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTp1dC5r'@;
put 'ZXkuY2lwaGVyQWxnb3JpdGhtLGNpcGhlckNoYWluaW5nOnV0LmtleS5jaXBoZXJDaGFpbmluZyxoYXNoQWxnb3JpdGhtOnV0LmtleS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTp1dC5rZXkuc2FsdFZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dDp1'@;
put 'dC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlOnV0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkS2V5VmFsdWU6dXQua2V5LmVuY3J5cHRl'@;
put 'ZEtleVZhbHVlLnRvU3RyaW5nKCJiYXNlNjQiKX19XX1dfV19LER0PShuZXcgRikuYnVpbGQodnQpO3JldHVybiBCdWZmZXIuY29uY2F0KFtPLEJ1ZmZlci5mcm9tKER0LCJ1dGY4IildKX0oRHQpLE9pPUxlLnV0aWxzLmNmYl9uZXcoKTtyZXR1cm4gTGUudXRpbHMuY2ZiX2FkZChPaSwiRW5j'@;
put 'cnlwdGlvbkluZm8iLHBpKSxMZS51dGlscy5jZmJfYWRkKE9pLCJFbmNyeXB0ZWRQYWNrYWdlIixBdCksT2l9fSgpO2Z1bmN0aW9uIEMwKE0pe3JldHVybiBmdW5jdGlvbihPKXtmb3IodmFyIEo9MDtKIT1NLmxlbmd0aDsrK0ope3ZhciBpZT1NW0pdO3ZvaWQgMD09PU9baWVbMF1dJiYoT1tp'@;
put 'ZVswXV09aWVbMV0pLCJuIj09PWllWzJdJiYoT1tpZVswXV09TnVtYmVyKE9baWVbMF1dKSl9fX12YXIgTjM9ZnVuY3Rpb24oTSl7QzAoW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJj'@;
put 'ZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tTaGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShN'@;
put 'KSxNLmJvb2tJbWFnZXMmJihNLmNlbGxTdHlsZXM9ITApfSx4eD1DMChbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxbImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gYnQoTSl7cmV0dXJuIF9vLldTLmluZGV4T2YoTSk+'@;
put 'LTE/InNoZWV0Ijpfby5DUyYmTT09X28uQ1M/ImNoYXJ0Ijpfby5EUyYmTT09X28uRFM/ImRpYWxvZyI6X28uTVMmJk09PV9vLk1TPyJtYWNybyI6TSYmTS5sZW5ndGg/TToic2hlZXQifXZhciBtbD1bXTtmdW5jdGlvbiBUeChNLEYsTyxKLGllLHBlLHllLHZlLE1lLGplLFllLHFlKXt0cnl7'@;
put 'cGVbSl09RzAoUXQoTSxPLCEwKSxGKTt2YXIgaHQsaXQ9RXQoTSxGKTtzd2l0Y2godmUpe2Nhc2Uic2hlZXQiOmh0PWZ1bmN0aW9uIFdTKE0sRixPLEosaWUscGUseWUsdmUpe3JldHVybiIuYmluIj09PUYuc2xpY2UoLTQpP2Z1bmN0aW9uIHpSKE0sRixPLEosaWUscGUseWUpe2lmKCFNKXJl'@;
put 'dHVybiBNO3ZhciB2ZT1GfHx7fTtKfHwoSj17IiFpZCI6e319KSxudWxsIT10ZSYmbnVsbD09dmUuZGVuc2UmJih2ZS5kZW5zZT10ZSk7dmFyIGplLGt0LHV0LHZ0LFB0LER0LEF0LFp0LGduLHFuLE1lPXZlLmRlbnNlP1tdOnt9LFllPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LHFl'@;
put 'PVtdLGl0PSExLGh0PSExLHVuPVtdO3ZlLmJpZmY9MTIsdmVbIiFyb3ciXT0wO3ZhciBKbj0wLFluPSExLExuPVtdLHRyPXt9LHJyPXZlLnN1cGJvb2tzfHxpZS5zdXBib29rc3x8W1tdXTtpZihyci5zaGFyZWRmPXRyLHJyLmFycmF5Zj1Mbixyci5TaGVldE5hbWVzPWllLlNoZWV0TmFtZXN8'@;
put 'fGllLlNoZWV0cy5tYXAoZnVuY3Rpb24oZGkpe3JldHVybiBkaS5uYW1lfSksIXZlLnN1cGJvb2tzJiYodmUuc3VwYm9va3M9cnIsaWUuTmFtZXMpKWZvcih2YXIgVW49MDtVbjxpZS5OYW1lcy5sZW5ndGg7KytVbilyclswXVtVbisxXT1pZS5OYW1lc1tVbl07dmFyIFhyPVtdLHBpPVtdLE9p'@;
put 'PSExO2lmKHY0WzE2XT17bjoiQnJ0U2hvcnRSZWFsIixmOmtSfSx0YShNLGZ1bmN0aW9uKF9yLEFuLE1yKXtpZighaHQpc3dpdGNoKE1yKXtjYXNlIDE0ODpqZT1fcjticmVhaztjYXNlIDA6a3Q9X3IsdmUuc2hlZXRSb3dzJiZ2ZS5zaGVldFJvd3M8PWt0LnImJihodD0hMCksZ249cnMoUHQ9'@;
put 'a3QuciksdmVbIiFyb3ciXT1rdC5yLChfci5oaWRkZW58fF9yLmhwdHx8bnVsbCE9X3IubGV2ZWwpJiYoX3IuaHB0JiYoX3IuaHB4PVoxKF9yLmhwdCkpLHBpW19yLnJdPV9yKTticmVhaztjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA2OmNhc2UgNzpjYXNlIDg6Y2FzZSA5OmNh'@;
put 'c2UgMTA6Y2FzZSAxMTpjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNTpjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpzd2l0Y2godXQ9e3Q6X3JbMl19LF9yWzJdKXtjYXNlIm4iOnV0LnY9X3JbMV07YnJlYWs7Y2FzZSJzIjp1dC52PShadD1kNVtfclsxXV0pLnQsdmUuY2VsbFN0eWxlcyYmKHV0LlI9'@;
put 'ZnVuY3Rpb24gZ0woTSxGKXtpZihNLlIpcmV0dXJuIE0uUjtpZihGJiZGLkZvbnRzJiYoMSE9TS5yLmxlbmd0aHx8MCE9TS5yWzBdLmljaCkpe00uUj1bXTt2YXIgTz0wLEo9TS5yW09dLGllPU0ucltPKzFdO2ZvcihKLmljaD4wJiZNLlIucHVzaCh7dDoicyIsdjpNLnQuc2xpY2UoMCxKLmlj'@;
put 'aCl9KTtPPE0uci5sZW5ndGgtMTsrK08pTS5SLnB1c2goe3Q6InMiLHY6TS50LnNsaWNlKChKPU0ucltPXSkuaWNoLChpZT1NLnJbTysxXSkuaWNoKSxzOkYuRm9udHNbSi5pZm50XX0pO3JldHVybiBNLlIucHVzaCh7dDoicyIsdjpNLnQuc2xpY2UoKGllfHxKKS5pY2gpLHM6Ri5Gb250c1so'@;
put 'aWV8fEopLmlmbnRdfSksTS5SfX0oWnQseWUpKTticmVhaztjYXNlImIiOnV0LnY9ISFfclsxXTticmVhaztjYXNlImUiOnV0LnY9X3JbMV0sITEhPT12ZS5jZWxsVGV4dCYmKHV0Lnc9dWxbdXQudl0pO2JyZWFrO2Nhc2Uic3RyIjp1dC50PSJzIix1dC52PV9yWzFdfWlmKCh2dD15ZS5DZWxs'@;
put 'WGZbX3JbMF0uaVN0eWxlUmVmXSkmJksyKHV0LHZ0Lm51bUZtdElkLHZ0LmZpbGxJZCx2dC5mb250SWQsdnQuYm9yZGVySWQsdmUsMCx5ZSksdmUuY2VsbFN0eWxlcyYmdXQucyYmdnQuYWxpZ25tZW50JiYodXQucy5hbGlnbm1lbnQ9WHQodnQuYWxpZ25tZW50KSksRHQ9LTE9PV9yWzBdLmM/'@;
put 'RHQrMTpfclswXS5jLHZlLmRlbnNlPyhNZVtQdF18fChNZVtQdF09W10pLE1lW1B0XVtEdF09dXQpOk1lW2ZvKER0KStnbl09dXQsdmUuY2VsbEZvcm11bGEpe2ZvcihZbj0hMSxKbj0wO0puPExuLmxlbmd0aDsrK0puKXt2YXIgb3I9TG5bSm5dO2t0LnI+PW9yWzBdLnMuciYma3Qucjw9b3Jb'@;
put 'MF0uZS5yJiZEdD49b3JbMF0ucy5jJiZEdDw9b3JbMF0uZS5jJiYodXQuRj1BaShvclswXSksWW49ITApfSFZbiYmX3IubGVuZ3RoPjMmJih1dC5mPV9yWzNdKX1pZihZZS5zLnI+a3QuciYmKFllLnMucj1rdC5yKSxZZS5zLmM+RHQmJihZZS5zLmM9RHQpLFllLmUucjxrdC5yJiYoWWUuZS5y'@;
put 'PWt0LnIpLFllLmUuYzxEdCYmKFllLmUuYz1EdCksdmUuY2VsbERhdGVzJiZ2dCYmIm4iPT11dC50JiZDLmlzX2RhdGUoQy5fdGFibGVbdnQubnVtRm10SWRdKSl7dmFyIFRuPUMucGFyc2VfZGF0ZV9jb2RlKHV0LnYpO1RuJiYodXQudD0iZCIsdXQudj1uZXcgRGF0ZShUbi55LFRuLm0tMSxU'@;
put 'bi5kLFRuLkgsVG4uTSxUbi5TLFRuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighdmUuc2hlZXRTdHVic3x8aXQpYnJlYWs7dXQ9e3Q6InoiLHY6dm9pZCAwfSxEdD0tMT09X3JbMF0uYz9EdCsxOl9yWzBdLmMsKHZ0PXllLkNlbGxYZltfclswXS5pU3R5bGVSZWZdKSYmSzIodXQsdnQu'@;
put 'bnVtRm10SWQsdnQuZmlsbElkLHZ0LmZvbnRJZCx2dC5ib3JkZXJJZCx2ZSwwLHllKSx2ZS5jZWxsU3R5bGVzJiZ1dC5zJiZ2dC5hbGlnbm1lbnQmJih1dC5zLmFsaWdubWVudD1YdCh2dC5hbGlnbm1lbnQpKSx2ZS5kZW5zZT8oTWVbUHRdfHwoTWVbUHRdPVtdKSxNZVtQdF1bRHRdPXV0KTpN'@;
put 'ZVtmbyhEdCkrZ25dPXV0LFllLnMucj5rdC5yJiYoWWUucy5yPWt0LnIpLFllLnMuYz5EdCYmKFllLnMuYz1EdCksWWUuZS5yPGt0LnImJihZZS5lLnI9a3QuciksWWUuZS5jPER0JiYoWWUuZS5jPUR0KTticmVhaztjYXNlIDE3Njp1bi5wdXNoKF9yKTticmVhaztjYXNlIDQ5NDp2YXIgQ3I9'@;
put 'SlsiIWlkIl1bX3IucmVsSWRdO2ZvcihDcj8oX3IuVGFyZ2V0PUNyLlRhcmdldCxfci5sb2MmJihfci5UYXJnZXQrPSIjIitfci5sb2MpLF9yLlJlbD1Dcik6IiI9PV9yLnJlbElkJiYoX3IuVGFyZ2V0PSIjIitfci5sb2MpLFB0PV9yLnJmeC5zLnI7UHQ8PV9yLnJmeC5lLnI7KytQdClmb3Io'@;
put 'RHQ9X3IucmZ4LnMuYztEdDw9X3IucmZ4LmUuYzsrK0R0KXZlLmRlbnNlPyhNZVtQdF18fChNZVtQdF09W10pLE1lW1B0XVtEdF18fChNZVtQdF1bRHRdPXt0OiJ6Iix2OnZvaWQgMH0pLE1lW1B0XVtEdF0ubD1fcik6KEF0PURpKHtjOkR0LHI6UHR9KSxNZVtBdF18fChNZVtBdF09e3Q6Inoi'@;
put 'LHY6dm9pZCAwfSksTWVbQXRdLmw9X3IpO2JyZWFrO2Nhc2UgNDI2OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhaztMbi5wdXNoKF9yKSwocW49dmUuZGVuc2U/TWVbUHRdW0R0XTpNZVtmbyhEdCkrZ25dKS5mPW51KF9yWzFdLFllLHtyOmt0LnIsYzpEdH0scnIsdmUpLHFuLkY9QWkoX3JbMF0p'@;
put 'O2JyZWFrO2Nhc2UgNDI3OmlmKCF2ZS5jZWxsRm9ybXVsYSlicmVhazt0cltEaShfclswXS5zKV09X3JbMV0sKHFuPXZlLmRlbnNlP01lW1B0XVtEdF06TWVbZm8oRHQpK2duXSkuZj1udShfclsxXSxZZSx7cjprdC5yLGM6RHR9LHJyLHZlKTticmVhaztjYXNlIDYwOmlmKCF2ZS5jZWxsU3R5'@;
put 'bGVzKWJyZWFrO2Zvcig7X3IuZT49X3IuczspWHJbX3IuZS0tXT17d2lkdGg6X3Iudy8yNTYsaGlkZGVuOiEhKDEmX3IuZmxhZ3MpLGxldmVsOl9yLmxldmVsfSxPaXx8KE9pPSEwKSwkdShYcltfci5lKzFdKTticmVhaztjYXNlIDE2MTpNZVsiIWF1dG9maWx0ZXIiXT17cmVmOkFpKF9yKX07'@;
put 'YnJlYWs7Y2FzZSA0NzY6TWVbIiFtYXJnaW5zIl09X3I7YnJlYWs7Y2FzZSAxNDc6aWUuU2hlZXRzW09dfHwoaWUuU2hlZXRzW09dPXt9KSxfci5uYW1lJiYoaWUuU2hlZXRzW09dLkNvZGVOYW1lPV9yLm5hbWUpLChfci5hYm92ZXx8X3IubGVmdCkmJihNZVsiIW91dGxpbmUiXT17YWJvdmU6'@;
put 'X3IuYWJvdmUsbGVmdDpfci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6aWUuVmlld3N8fChpZS5WaWV3cz1be31dKSxpZS5WaWV3c1swXXx8KGllLlZpZXdzWzBdPXt9KSxfci5SVEwmJihpZS5WaWV3c1swXS5SVEw9ITApLF9yLmdyaWR8fChpZS5WaWV3c1swXS5ncmlkPSExLE1lWyIhZ3JpZGxp'@;
put 'bmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1Ok1lWyIhc2hlZXRGb3JtYXQiXT1fcjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24gWVIoTSxGLE8sSil7aWYoRil7dmFyIGllPXtyZWY6Ri5zcXJmeCx0OkYudH07Ri5vcCYmKGllLm9wPUYub3ApO3ZhciBwZT0iIix5ZT0iIix2ZT1G'@;
put 'LnNxcmZ4PyJzdHJpbmciPT10eXBlb2YgRi5zcXJmeD9ibyhGLnNxcmZ4LnNwbGl0KCIsIilbMF0pOkYuc3FyZng6bnVsbDtpZihGLmYxJiYocGU9bnUoRi5mMSx2ZSxudWxsLE8sSiwhMCkpLEYuZjImJih5ZT1udShGLmYyLHZlLG51bGwsTyxKLCEwKSksRi5vcCYmWyJJTiIsIk9UIl0uaW5k'@;
put 'ZXhPZihGLm9wKT49LTEpaWUubWluPXBlLGllLm1heD15ZTtlbHNlIGlmKEYub3ApaWUudj1wZTtlbHNlIHRyeXtzd2l0Y2goRi50KXtjYXNlIkxpc3QiOmlmKCJQdGdTdHIiPT09Ri5mMVswXVswXVswXSYmMT09Ri5mMVswXS5sZW5ndGgpe2llLmw9Ri5mMVswXVswXVsxXS5zcGxpdCgiLCIp'@;
put 'O2JyZWFrfWNhc2UiQ3VzdG9tIjppZS5mPXBlfX1jYXRjaHt9TVsiIXZhbGlkYXRpb25zIl18fChNWyIhdmFsaWRhdGlvbnMiXT1bXSksTVsiIXZhbGlkYXRpb25zIl0ucHVzaChpZSl9fShNZSxfcixycix2ZSk7YnJlYWs7Y2FzZSAxNTE6TWVbIiFmcmVlemUiXT1fclswXTticmVhaztjYXNl'@;
put 'IDE1MjpNZVsiIXNlbCJdPV9yO2JyZWFrO2Nhc2UgMTc1OmNhc2UgNjQ0OmNhc2UgNjI1OmNhc2UgNTYyOmNhc2UgMzk2OmNhc2UgMTExMjpjYXNlIDExNDY6Y2FzZSA0NzE6Y2FzZSAxMDUwOmNhc2UgNjQ5OmNhc2UgMTEwNTpjYXNlIDQ5OmNhc2UgNTg5OmNhc2UgNjA3OmNhc2UgNTY0OmNh'@;
put 'c2UgMTA1NTpjYXNlIDE2ODpjYXNlIDE3NDpjYXNlIDExODA6Y2FzZSA0OTk6Y2FzZSA1MDc6Y2FzZSA1NTA6Y2FzZSAxNzE6Y2FzZSAxNjc6Y2FzZSAxMTc3OmNhc2UgMTY5OmNhc2UgMTE4MTpjYXNlIDU1MTpjYXNlIDU1MjpjYXNlIDY2MTpjYXNlIDYzOTpjYXNlIDQ3ODpjYXNlIDUzNzpj'@;
put 'YXNlIDQ3NzpjYXNlIDUzNjpjYXNlIDExMDM6Y2FzZSA2ODA6Y2FzZSAxMTA0OmNhc2UgMTAyNDpjYXNlIDY2MzpjYXNlIDUzNTpjYXNlIDY3ODpjYXNlIDUwNDpjYXNlIDEwNDM6Y2FzZSA0Mjg6Y2FzZSAxNzA6Y2FzZSAzMDcyOmNhc2UgNTA6Y2FzZSAyMDcwOmNhc2UgMTA0NTpicmVhaztj'@;
put 'YXNlIDM1Oml0PSEwO2JyZWFrO2Nhc2UgMzY6aXQ9ITE7YnJlYWs7Y2FzZSAzNzpxZS5wdXNoKEFuKSxpdD0hMDticmVhaztjYXNlIDM4OnFlLnBvcCgpLGl0PSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoQW58fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChBbnx8IiIpLmluZGV4T2YoIkVu'@;
put 'ZCIpPjApJiYoIWl0fHx2ZS5XVEYmJiJCcnRBQ0JlZ2luIiE9cWVbcWUubGVuZ3RoLTFdKSl0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrTXIrIiAiK0FuKX19LHZlKSxkZWxldGUgdmUuc3VwYm9va3MsZGVsZXRlIHZlWyIhcm93Il0sIU1lWyIhcmVmIl0mJihZZS5zLnI8'@;
put 'MmU2fHxqZSYmKGplLmUucj4wfHxqZS5lLmM+MHx8amUucy5yPjB8fGplLnMuYz4wKSkmJihNZVsiIXJlZiJdPUFpKGplfHxZZSkpLHZlLnNoZWV0Um93cyYmTWVbIiFyZWYiXSl7dmFyIE5pPWJvKE1lWyIhcmVmIl0pO3ZlLnNoZWV0Um93czw9K05pLmUuciYmKE5pLmUucj12ZS5zaGVldFJv'@;
put 'd3MtMSxOaS5lLnI+WWUuZS5yJiYoTmkuZS5yPVllLmUuciksTmkuZS5yPE5pLnMuciYmKE5pLnMucj1OaS5lLnIpLE5pLmUuYz5ZZS5lLmMmJihOaS5lLmM9WWUuZS5jKSxOaS5lLmM8Tmkucy5jJiYoTmkucy5jPU5pLmUuYyksTWVbIiFmdWxscmVmIl09TWVbIiFyZWYiXSxNZVsiIXJlZiJd'@;
put 'PUFpKE5pKSl9cmV0dXJuIHVuLmxlbmd0aD4wJiYoTWVbIiFtZXJnZXMiXT11biksWHIubGVuZ3RoPjAmJihNZVsiIWNvbHMiXT1YcikscGkubGVuZ3RoPjAmJihNZVsiIXJvd3MiXT1waSksTWV9KE0sSixPLGllLHBlLDAsdmUpOmZ1bmN0aW9uIG01KE0sRixPLEosaWUscGUseWUpe2lmKCFN'@;
put 'KXJldHVybiBNO0p8fChKPXsiIWlkIjp7fX0pLG51bGwhPXRlJiZudWxsPT1GLmRlbnNlJiYoRi5kZW5zZT10ZSk7dmFyIHZlPUYuZGVuc2U/W106e30sTWU9e3M6e3I6MmU2LGM6MmU2fSxlOntyOjAsYzowfX0samU9IiIsWWU9IiIscWU9TS5tYXRjaChYQyk7cWU/KGplPU0uc2xpY2UoMCxx'@;
put 'ZS5pbmRleCksWWU9TS5zbGljZShxZS5pbmRleCtxZVswXS5sZW5ndGgpKTpqZT1ZZT1NO3ZhciBpdD1ZZS5sYXN0SW5kZXhPZigiZXh0THN0Iiksa3Q9KC0xPT1pdHx8WWUuc2xpY2UoaXQpLGplLm1hdGNoKGVTKSk7a3Q/czgoa3RbMF0sMCxpZSxPKTooa3Q9amUubWF0Y2goblMpKSYmZnVu'@;
put 'Y3Rpb24gS0koTSxGLE8sSixpZSxwZSx5ZSl7czgoTS5zbGljZSgwLE0uaW5kZXhPZigiPiIpKSwwLEosaWUpO3ZhciB2ZT1GLm1hdGNoKGJ2KTtpZih2ZSl7dmFyIGplPXFNKGxuKHZlWzBdKSxwZSx5ZSk7T1siIXRhYmNvbG9yIl09amV9aWYoKHZlPUYubWF0Y2goJEkpKSYmbG4odmVbMF0p'@;
put 'LmZpdFRvUGFnZSYmKE9bIiFwcmludCJdfHwoT1siIXByaW50Il09e30pLE9bIiFwcmludCJdLnByb3BzfHwoT1siIXByaW50Il0ucHJvcHM9e30pLE9bIiFwcmludCJdLnByb3BzLmZpdHx8KE9bIiFwcmludCJdLnByb3BzLmZpdD17fSksbnVsbD09T1siIXByaW50Il0ucHJvcHMuZml0Lmhl'@;
put 'aWdodCYmKE9bIiFwcmludCJdLnByb3BzLmZpdC5oZWlnaHQ9MSksbnVsbD09T1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoJiYoT1siIXByaW50Il0ucHJvcHMuZml0LndpZHRoPTEpKSx2ZT1GLm1hdGNoKHFJKSl7T1siIW91dGxpbmUiXT17fTt2YXIgcWU9bG4odmVbMF0pO3FlLnN1bW1h'@;
put 'cnlCZWxvdyYmKE9bIiFvdXRsaW5lIl0uYWJvdmU9IUxyKHFlLnN1bW1hcnlCZWxvdykpLHFlLnN1bW1hcnlSaWdodCYmKE9bIiFvdXRsaW5lIl0ubGVmdD0hTHIocWUuc3VtbWFyeVJpZ2h0KSl9fShrdFswXSxrdFsxXXx8IiIsdmUsaWUsTyx5ZSxwZSk7dmFyIHV0PShqZS5tYXRjaCgvPCg/'@;
put 'Olx3KjopP2RpbWVuc2lvbi8pfHx7aW5kZXg6LTF9KS5pbmRleDtpZih1dD4wKXt2YXIgdnQ9amUuc2xpY2UodXQsdXQrNTApLm1hdGNoKGk4KTt2dCYmKCFGfHwhRi5ub2RpbSkmJmZ1bmN0aW9uIGZ2KE0sRil7dmFyIE89Ym8oRik7Ty5zLnI8PU8uZS5yJiZPLnMuYzw9Ty5lLmMmJk8ucy5y'@;
put 'Pj0wJiZPLnMuYz49MCYmKE1bIiFyZWYiXT1BaShPKSl9KHZlLHZ0WzFdKX12YXIgUHQ9amUubWF0Y2goaXMpO1B0JiZQdFsxXSYmZnVuY3Rpb24gaFIoTSxGLE8sSil7Ty5WaWV3c3x8KE8uVmlld3M9W3t9XSk7dmFyIGllPTA7TS5yZXBsYWNlKEV2LGZ1bmN0aW9uKHBlLHllKXt2YXIgdmU9'@;
put 'bG4ocGUpO2lmKE8uVmlld3NbSl18fChPLlZpZXdzW0pdPXt9KSxMcih2ZS5yaWdodFRvTGVmdCkmJihPLlZpZXdzW0pdLlJUTD0hMCksdmUuc2hvd0dyaWRMaW5lcyYmKE8uVmlld3NbSl0uZ3JpZD1Mcih2ZS5zaG93R3JpZExpbmVzKSxudWxsPT1GWyIhZ3JpZGxpbmVzIl0mJihGWyIhZ3Jp'@;
put 'ZGxpbmVzIl09THIodmUuc2hvd0dyaWRMaW5lcykpKSwrdmUuem9vbVNjYWxlJiYoTy5WaWV3c1tKXS56b29tPSt2ZS56b29tU2NhbGUpLHZlLnZpZXcmJihPLlZpZXdzW0pdLnZpZXc9dmUudmlldyksMT09KytpZSYmIi8+IiE9cGUuc2xpY2UoLTIpKXt2YXIgTWU9TS5zbGljZSh5ZStwZS5s'@;
put 'ZW5ndGgpLGplPU1lLm1hdGNoKC88XC8oPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKCFqZSlyZXR1cm4iIjt2YXIgWWU9KE1lPU1lLnNsaWNlKDAsamUuaW5kZXgpKS5tYXRjaCgvPCg/Olx3Oik/cGFuZSg/OltePmEtel1bXj5dKik/XC8/Pi8pO2lmKFllKXt2'@;
put 'YXIgcWU9bG4oWWVbMF0pOyJmcm96ZW4iPT1xZS5zdGF0ZT9GWyIhZnJlZXplIl09Zm8oK3FlLnhTcGxpdHx8MCkrcnMoK3FlLnlTcGxpdHx8MCk6cWUudG9wTGVmdENlbGwmJihGWyIhZnJlZXplIl09cWUudG9wTGVmdENlbGwpfXZhciBpdD1NZS5tYXRjaCgvPCg/Olx3Oik/c2VsZWN0aW9u'@;
put 'KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoaXQpe3ZhciBodD1sbihpdFswXSk7aWYoaHQuYWN0aXZlQ2VsbCYmKEZbIiFzZWwiXT17Y2VsbDpodC5hY3RpdmVDZWxsfSksaHQuc3FyZWYpe3ZhciBrdD1odC5zcXJlZi5yZXBsYWNlKC9ccy4qJC8sIiIpO0ZbIiFzZWwiXXx8KEZbIiFzZWwi'@;
put 'XT17Y2VsbDpEaShIcyhrdCkucyl9KSxGWyIhc2VsIl0ucmFuZ2U9aHQuc3FyZWZ9fX1yZXR1cm4iIn0pfShQdFsxXSx2ZSxpZSxPKTt2YXIgRHQ9amUubWF0Y2goc3QpLEF0PVtdO2lmKEYuY2VsbFN0eWxlcyl7dmFyIFp0PWplLm1hdGNoKFpJKTtadCYmZnVuY3Rpb24gQ3YoTSxGLE8pe2Zv'@;
put 'cih2YXIgSj0hMSxpZT0wO2llIT1GLmxlbmd0aDsrK2llKXt2YXIgcGU9bG4oRltpZV0sITApO3BlLmhpZGRlbiYmKHBlLmhpZGRlbj1McihwZS5oaWRkZW4pKTt2YXIgeWU9cGFyc2VJbnQocGUubWluLDEwKS0xLHZlPXBhcnNlSW50KHBlLm1heCwxMCktMTtmb3IocGUub3V0bGluZUxldmVs'@;
put 'JiYocGUubGV2ZWw9K3BlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIHBlLm1pbixkZWxldGUgcGUubWF4LHBlLndpZHRoPStwZS53aWR0aCwhSiYmcGUud2lkdGgmJihKPSEwKSwkdShwZSkscGUuc3R5bGUmJihwZS5zPXk1KHBlLnN0eWxlLE8pKTt5ZTw9dmU7KU1beWUrK109WHQocGUpfX0o'@;
put 'QXQsWnQseWUpfWlmKHFlJiZiNShxZVsxXSxPLHZlLEYsTWUscGUseWUpLEYuY2FsbGJhY2spcmV0dXJuIHZlO3ZhciBnbj1ZZS5tYXRjaCh0Uyk7Z24mJih2ZVsiIXByb3RlY3QiXT1mdW5jdGlvbiBuUihNKXt2YXIgRj1sbihNLCEwLCEwKSxPPXt9O2lmKExyKEYuc2hlZXQpKXJldHVybiBN'@;
put 'di5mb3JFYWNoKGZ1bmN0aW9uKEope09bSl09bnVsbCE9RltKXSYmTHIoRltKXSl9KSxmUy5mb3JFYWNoKGZ1bmN0aW9uKEope09bSl09bnVsbD09RltKXXx8THIoRltKXSl9KSxGLmFsZ29yaXRobU5hbWUmJihPLmVuY3J5cHRpb249e2FsZ286Ri5hbGdvcml0aG1OYW1lLGhhc2g6Ri5oYXNo'@;
put 'VmFsdWUsc2FsdDpGLnNhbHRWYWx1ZSxzcGluOitGLnNwaW5Db3VudHx8MWU1fSksT30oZ25bMF0pKTt2YXIgcW49WWUubWF0Y2goV0kpO3FuJiYodmVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gb1IoTSl7cmV0dXJue3JlZjooTS5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShx'@;
put 'blswXSkpO3ZhciB1bj1bXSxKbj1ZZS5tYXRjaChwNSk7aWYoSm4pZm9yKHV0PTA7dXQhPUpuLmxlbmd0aDsrK3V0KXVuW3V0XT1ibyhKblt1dF0uc2xpY2UoSm5bdXRdLmluZGV4T2YoJyInKSsxKSk7dmFyIFluPSgtMT09aXQ/WWU6WWUuc2xpY2UoMCxpdCkpLm1hdGNoKG12KTtZbiYmKHZl'@;
put 'WyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxZbi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBGZChBbixGLHBlLHllKX0pKSksaXQ+LTEmJihZbj1ZZS5zbGljZShpdCkubWF0Y2gobXYpKSYmKHZlWyIhY29uZGZtdCJdfHwodmVbIiFjb25kZm10Il09W10pLHZlWyIhY29uZGZtdCJd'@;
put 'PXZlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseSh2ZVsiIWNvbmRmbXQiXSxZbi5tYXAoZnVuY3Rpb24oQW4pe3JldHVybiBGZChBbixGLHBlLHllLCEwKX0pKSk7dmFyIExuPSgtMT09aXQ/WWU6WWUuc2xpY2UoMCxpdCkpLm1hdGNoKHdlKTtMbiYmKHZlWyIhdmFsaWRhdGlvbnMiXT14dihM'@;
put 'blswXSxGKSksaXQ+LTEmJihMbj1ZZS5zbGljZShpdCkubWF0Y2god2UpKSYmKHZlWyIhdmFsaWRhdGlvbnMiXXx8KHZlWyIhdmFsaWRhdGlvbnMiXT1bXSksdmVbIiF2YWxpZGF0aW9ucyJdPXZlWyIhdmFsaWRhdGlvbnMiXS5jb25jYXQoeHYoTG5bMF0sRiwhMCkpKTt2YXIgdHI9WWUubWF0'@;
put 'Y2gocHYpO3RyJiZmdW5jdGlvbiBwUyhNLEYsTyl7Zm9yKHZhciBKPUFycmF5LmlzQXJyYXkoTSksaWU9MDtpZSE9Ri5sZW5ndGg7KytpZSl7dmFyIHBlPWxuKEJpKEZbaWVdKSwhMCk7aWYoIXBlLnJlZilyZXR1cm47dmFyIHllPSgoT3x8e30pWyIhaWQiXXx8W10pW3BlLmlkXTt5ZT8ocGUu'@;
put 'VGFyZ2V0PXllLlRhcmdldCxwZS5sb2NhdGlvbiYmKHBlLlRhcmdldCs9IiMiK21yKHBlLmxvY2F0aW9uKSkpOihwZS5UYXJnZXQ9IiMiK21yKHBlLmxvY2F0aW9uKSx5ZT17VGFyZ2V0OnBlLlRhcmdldCxUYXJnZXRNb2RlOiJJbnRlcm5hbCJ9KSxwZS5SZWw9eWUscGUudG9vbHRpcCYmKHBl'@;
put 'LlRvb2x0aXA9cGUudG9vbHRpcCxkZWxldGUgcGUudG9vbHRpcCk7Zm9yKHZhciB2ZT1ibyhwZS5yZWYpLE1lPXZlLnMucjtNZTw9dmUuZS5yOysrTWUpZm9yKHZhciBqZT12ZS5zLmM7amU8PXZlLmUuYzsrK2plKXt2YXIgWWU9RGkoe2M6amUscjpNZX0pO0o/KE1bTWVdfHwoTVtNZV09W10p'@;
put 'LE1bTWVdW2plXXx8KE1bTWVdW2plXT17dDoieiIsdjp2b2lkIDB9KSxNW01lXVtqZV0ubD1wZSk6KE1bWWVdfHwoTVtZZV09e3Q6InoiLHY6dm9pZCAwfSksTVtZZV0ubD1wZSl9fX0odmUsdHIsSik7dmFyIHJyPVllLm1hdGNoKGd2KTtyciYmZnVuY3Rpb24gWEkoTSxGKXt2YXIgTz1sbihN'@;
put 'LCExLCEwKTtGWyIhcHJpbnQiXXx8KEZbIiFwcmludCJdPXt9KSxGWyIhcHJpbnQiXS5wcm9wc3x8KEZbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgSj1GWyIhcHJpbnQiXS5wcm9wcztPLmdyaWRMaW5lcyYmKEouZ3JpZGxpbmVzPUxyKE8uZ3JpZExpbmVzKSksbnVsbCE9Ty5ob3Jpem9udGFs'@;
put 'Q2VudGVyZWQmJihKLmNlbnRlclg9THIoTy5ob3Jpem9udGFsQ2VudGVyZWQpKSxudWxsIT1PLnZlcnRpY2FsQ2VudGVyZWQmJihKLmNlbnRlclk9THIoTy52ZXJ0aWNhbENlbnRlcmVkKSl9KHJyWzBdLHZlKTt2YXIgVW49WWUubWF0Y2goUUMpO1VuJiYoKHZlWyIhcHJpbnQiXXx8KHZlWyIh'@;
put 'cHJpbnQiXT17fSkpLm1hcmdpbnM9dmVbIiFtYXJnaW5zIl09bVMobG4oVW5bMF0pKSk7dmFyIFhyPVllLm1hdGNoKGlTKTtYciYmZnVuY3Rpb24gZFMoTSxGKXt2YXIgTz1sbihNLCExLCEwKTtkZWxldGUgTy5pZCxkZWxldGUgT1swXSxGWyIhcHJpbnQiXXx8KEZbIiFwcmludCJdPXt9KSxG'@;
put 'WyIhcHJpbnQiXS5wcm9wc3x8KEZbIiFwcmludCJdLnByb3BzPXt9KTt2YXIgSj1GWyIhcHJpbnQiXS5wcm9wcztPLm9yaWVudGF0aW9uJiYoSi5vcmllbnRhdGlvbj1PLm9yaWVudGF0aW9uKSxPLnNjYWxlJiYoSi5zY2FsZT0rTy5zY2FsZSksK08uZml0VG9IZWlnaHQ+PTAmJigoSi5maXR8'@;
put 'fChKLmZpdD17fSkpLmhlaWdodD0rTy5maXRUb0hlaWdodCksK08uZml0VG9XaWR0aD49MCYmKChKLmZpdHx8KEouZml0PXt9KSkud2lkdGg9K08uZml0VG9XaWR0aCksTy5wYXBlckhlaWdodCYmTy5wYXBlcldpZHRoP0oucGFwZXI9e3dpZHRoOk8ucGFwZXJXaWR0aCxoZWlnaHQ6Ty5wYXBl'@;
put 'ckhlaWdodH06Ty5wYXBlclNpemUmJihKLnBhcGVyPW81W0oucGFwZXI9K08ucGFwZXJTaXplXXx8Si5wYXBlciksTy5ob3Jpem9udGFsRHBpP0ouZHBpPStPLmhvcml6b250YWxEcGk6Ty52ZXJ0aWNhbERwaSYmKEouZHBpPStPLnZlcnRpY2FsRHBpKSwiYXV0b21hdGljIiE9KE8uZmlyc3RQ'@;
put 'YWdlTnVtYmVyfHwiYXV0b21hdGljIikmJihKLmZpcnN0PStPLmZpcnN0UGFnZU51bWJlciksTHIoTy5ibGFja0FuZFdoaXRlKSYmKEouYnc9ITApLExyKE8uZHJhZnQpJiYoSi5kcmFmdD0hMCksIm92ZXJUaGVuRG93biI9PU8ucGFnZU9yZGVyJiYoSi5vcmRlcj0ib3ZlciIpLGxTW08uY2Vs'@;
put 'bENvbW1lbnRzXSYmKEouY29tbWVudHM9bFNbTy5jZWxsQ29tbWVudHNdKSx1U1tPLmVycm9yc10mJihKLmVycm9ycz11U1tPLmVycm9yc10pfShYclswXSx2ZSk7dmFyIHBpPVllLm1hdGNoKGg0KTtwaSYmZnVuY3Rpb24gYVIoTSxGKXtpZihGWyIhcHJpbnQiXXx8KEZbIiFwcmludCJdPXt9'@;
put 'KSxNWzFdKXt2YXIgTz0iIixKPTA7TVsxXS5yZXBsYWNlKCR0LGZ1bmN0aW9uKGllLHBlKXtpZigiLyIhPWllLmNoYXJBdCgxKSlPPWllLnNsaWNlKDEsLTEpLEo9cGUraWUubGVuZ3RoO2Vsc2UgaWYoTyl7dmFyIHllPU8ubWF0Y2goL0hlYWRlci8pPyJoZWFkZXIiOiJmb290ZXIiLHZlPU8u'@;
put 'cmVwbGFjZSgvSGVhZGVyfEZvb3Rlci8sIiIpO089IiIsRlsiIXByaW50Il1beWVdfHwoRlsiIXByaW50Il1beWVdPXt9KSxGWyIhcHJpbnQiXVt5ZV1bdmVdPW1yKEJpKE1bMV0uc2xpY2UoSixwZSkpKX19KX19KHBpLHZlKTt2YXIgT2k9WWUubWF0Y2goR0kpO09pJiYoKHZlWyIhcHJpbnQi'@;
put 'XXx8KHZlWyIhcHJpbnQiXT17fSkpLnJvd0JyZWFrcz12ZVsiIXJvd0JyZWFrcyJdPWZ1bmN0aW9uIFFJKE0pe3ZhciBGPVtdO3JldHVybihNLm1hdGNoKEZ1KXx8W10pLmZvckVhY2goZnVuY3Rpb24oTyl7dmFyIEo9bG4oTyk7Ri5wdXNoKHtSOitKLmlkfSl9KSxGfShPaVswXSkpO3ZhciBO'@;
put 'aT1ZZS5tYXRjaChvOCk7TmkmJigodmVbIiFwcmludCJdfHwodmVbIiFwcmludCJdPXt9KSkuY29sQnJlYWtzPXZlWyIhY29sQnJlYWtzIl09ZnVuY3Rpb24gY1coTSl7dmFyIEY9W107cmV0dXJuKE0ubWF0Y2goRnUpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihPKXt2YXIgSj1sbihPKTtGLnB1'@;
put 'c2goe0M6K0ouaWR9KX0pLEZ9KE5pWzBdKSk7dmFyIGRpPVtdO2lmKChkaT1ZZS5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJih2ZVsiIXJlbCJdPWRpWzFdKSwoZGk9WWUubWF0Y2goL2xlZ2FjeURyYXdpbmcgcjppZD0iKC4qPykiLykpJiYodmVbIiFsZWdyZWwiXT1kaVsxXSks'@;
put 'KGRpPVllLm1hdGNoKEpDKSkmJih2ZVsiIWN0cmxpZCJdPWRpLm1hcChmdW5jdGlvbihBbil7cmV0dXJuIGxuKEFuKX0pKSwoZGk9WWUubWF0Y2goclMpKSYmZnVuY3Rpb24gdnYoTSxGKXtNWyIhdGFibGVyZWZzIl18fChNWyIhdGFibGVyZWZzIl09W10pLChGLm1hdGNoKF92KXx8W10pLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oTyl7TVsiIXRhYmxlcmVmcyJdLnB1c2gobG4oTykuaWQpfSl9KHZlLGRpWzFdKSxGJiZGLm5vZGltJiYoTWUucy5jPU1lLnMucj0wKSwhdmVbIiFyZWYiXSYmTWUuZS5jPj1NZS5zLmMmJk1lLmUucj49TWUucy5yJiYodmVbIiFyZWYiXT1BaShNZSkpLEYuc2hlZXRS'@;
put 'b3dzPjAmJnZlWyIhcmVmIl0pe3ZhciBfcj1ibyh2ZVsiIXJlZiJdKTtGLnNoZWV0Um93czw9K19yLmUuciYmKF9yLmUucj1GLnNoZWV0Um93cy0xLF9yLmUucj5NZS5lLnImJihfci5lLnI9TWUuZS5yKSxfci5lLnI8X3Iucy5yJiYoX3Iucy5yPV9yLmUuciksX3IuZS5jPk1lLmUuYyYmKF9y'@;
put 'LmUuYz1NZS5lLmMpLF9yLmUuYzxfci5zLmMmJihfci5zLmM9X3IuZS5jKSx2ZVsiIWZ1bGxyZWYiXT12ZVsiIXJlZiJdLHZlWyIhcmVmIl09QWkoX3IpKX1yZXR1cm4gRHQmJih2ZVsiIXNoZWV0Rm9ybWF0Il09ZnVuY3Rpb24gb1MoTSl7dmFyIEY9e30sTz17fSxKPSExLGllPXt9LHBlPSEx'@;
put 'O3JldHVybiBNLmRlZmF1bHRSb3dIZWlnaHQmJihKPSEwLE8uaHB0PXBhcnNlRmxvYXQoTS5kZWZhdWx0Um93SGVpZ2h0KSksTS56ZXJvSGVpZ2h0JiYoSj0hMCxPLmhpZGRlbj1McihNLnplcm9IZWlnaHQpKSxNLmJhc2VDb2xXaWR0aD8ocGU9ITAsaWUud2NoPXBhcnNlRmxvYXQoTS5iYXNl'@;
put 'Q29sV2lkdGgpKTpNLmRlZmF1bHRDb2xXaWR0aCYmKHBlPSEwLGllLndjaD1wYXJzZUZsb2F0KE0uZGVmYXVsdENvbFdpZHRoKS01L0hsKSxNLm91dGxpbmVMZXZlbENvbCYmKEYuY29sb3V0bGluZT1wYXJzZUludChNLm91dGxpbmVMZXZlbENvbCkpLE0ub3V0bGluZUxldmVsUm93JiYoRi5y'@;
put 'b3dvdXRsaW5lPXBhcnNlSW50KE0ub3V0bGluZUxldmVsUm93KSksTS50aGlja0JvdHRvbSYmKEYuYm90dGhpY2s9THIoTS50aGlja0JvdHRvbSkpLE0udGhpY2tUb3AmJihGLnRvcHRoaWNrPUxyKE0udGhpY2tUb3ApKSxNLmR5RGVzY2VudCYmKEYuZHlEZXNjZW50PXBhcnNlRmxvYXQoTS5k'@;
put 'eURlc2NlbnQpKSxKJiYoTjYoTyksRi5yb3c9TykscGUmJigkdShpZSksRi5jb2w9aWUpLEZ9KGxuKER0WzBdKSkpLEF0Lmxlbmd0aD4wJiYodmVbIiFjb2xzIl09QXQpLHVuLmxlbmd0aD4wJiYodmVbIiFtZXJnZXMiXT11biksSlsiIWlkIl1bdmVbIiFyZWwiXV0mJih2ZVsiIWRyYXdlbCJd'@;
put 'PUpbIiFpZCJdW3ZlWyIhcmVsIl1dKSxKWyIhaWQiXVt2ZVsiIWxlZ3JlbCJdXSYmKHZlWyIhbGVnZHJhd2VsIl09SlsiIWlkIl1bdmVbIiFsZWdyZWwiXV0pLCh2ZVsiIWN0cmxpZCJdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihBbil7QW4ucmVsPUpbIiFpZCJdW0FuLmlkXX0pLG51bGw9PXZl'@;
put 'WyIhZ3JpZGxpbmVzIl0mJih2ZVsiIWdyaWRsaW5lcyJdPSEwKSx2ZX0oTSxKLE8saWUscGUseWUsdmUpfShpdCxGLGllLE1lLHBlW0pdLGplLFllLHFlKTticmVhaztjYXNlImNoYXJ0IjpodD1mdW5jdGlvbiBkTyhNLEYsTyxKLGllLHBlLHllLHZlKXtyZXR1cm4iLmJpbiI9PT1GLnNsaWNl'@;
put 'KC00KT9mdW5jdGlvbiBENShNLEYsTyxKLGllKXtpZighTSlyZXR1cm4gTTtKfHwoSj17IiFpZCI6e319KTt2YXIgcGU9eyIhdHlwZSI6ImNoYXJ0IiwiIWRyYXdlbCI6bnVsbCwiIXJlbCI6IiJ9LHllPVtdLHZlPSExO3JldHVybiB0YShNLGZ1bmN0aW9uKGplLFllLHFlKXtzd2l0Y2gocWUp'@;
put 'e2Nhc2UgNTUwOnBlWyIhcmVsIl09amU7YnJlYWs7Y2FzZSA2NTE6aWUuU2hlZXRzW09dfHwoaWUuU2hlZXRzW09dPXt9KSxqZS5uYW1lJiYoaWUuU2hlZXRzW09dLkNvZGVOYW1lPWplLm5hbWUpO2JyZWFrO2Nhc2UgNTYyOmNhc2UgNjUyOmNhc2UgNjY5OmNhc2UgNjc5OmNhc2UgNTUxOmNh'@;
put 'c2UgNTUyOmNhc2UgNDc2OmNhc2UgMzA3MjpicmVhaztjYXNlIDM1OnZlPSEwO2JyZWFrO2Nhc2UgMzY6dmU9ITE7YnJlYWs7Y2FzZSAzNzp5ZS5wdXNoKFllKTticmVhaztjYXNlIDM4OnllLnBvcCgpO2JyZWFrO2RlZmF1bHQ6aWYoKFllfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKXllLnB1'@;
put 'c2goWWUpO2Vsc2UgaWYoKFllfHwiIikuaW5kZXhPZigiRW5kIik+MCl5ZS5wb3AoKTtlbHNlIGlmKCF2ZXx8Ri5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3FlKyIgIitZZSl9fSxGKSxKWyIhaWQiXVtwZVsiIXJlbCJdXSYmKHBlWyIhZHJhd2VsIl09SlsiIWlk'@;
put 'Il1bcGVbIiFyZWwiXV0pLHBlfShNLEosTyxpZSxwZSk6ZnVuY3Rpb24gTnYoTSxGLE8sSixpZSl7aWYoIU0pcmV0dXJuIE07Snx8KEo9eyIhaWQiOnt9fSk7dmFyIHllLHBlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwiOiIifSx2ZT1NLm1hdGNoKGVTKTt2ZSYmczgo'@;
put 'dmVbMF0sMCxpZSxPKTt2YXIgTWU9TS5tYXRjaChRQyk7cmV0dXJuIE1lJiYocGVbIiFtYXJnaW5zIl09bVMobG4oTWVbMF0pKSksKHllPU0ubWF0Y2goL2RyYXdpbmcgcjppZD0iKC4qPykiLykpJiYocGVbIiFyZWwiXT15ZVsxXSksSlsiIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdl'@;
put 'bCJdPUpbIiFpZCJdW3BlWyIhcmVsIl1dKSxwZX0oTSwwLE8saWUscGUpfShpdCxGLGllLE1lLHBlW0pdLGplKTticmVhaztjYXNlIm1hY3JvIjpodD1mdW5jdGlvbiBHUyhNLEYsTyxKLGllLHBlLHllLHZlKXtyZXR1cm4gRi5zbGljZSgtNCkseyIhdHlwZSI6Im1hY3JvIn19KDAsRik7YnJl'@;
put 'YWs7Y2FzZSJkaWFsb2ciOmh0PWZ1bmN0aW9uIEJ2KE0sRixPLEosaWUscGUseWUsdmUpe3JldHVybiBGLnNsaWNlKC00KSx7IiF0eXBlIjoiZGlhbG9nIn19KDAsRik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBzaGVldCB0eXBlICIrdmUpfWlmKE1lLmNh'@;
put 'bGxiYWNrKXJldHVybjt5ZVtKXT1odCxmdW5jdGlvbiBFeChNLEYsTyxKLGllLHBlLHllLHZlKXtpZihNJiZNWyIhZHJhd2VsIl0pe3ZhciBNZT1lbihNWyIhZHJhd2VsIl0uVGFyZ2V0LEopLGplPWtyKE1lKSxZZT1mdW5jdGlvbiBIXyhNLEYsTyxKLGllKXt2YXIgcGU9e2NoYXJ0czpbXSxp'@;
put 'bWFnZXM6W10sc2hhcGVzOltdfTtpZighTSlyZXR1cm4gcGU7dmFyIHllPWllfHx7fTtyZXR1cm4oTS5tYXRjaCgvPFtePF0qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5jaG9yfHR3b0NlbGxBbmNob3IpLio/KGFic29sdXRlQW5jaG9yfG9uZUNlbGxBbmNob3J8dHdvQ2VsbEFuY2hvciku'@;
put 'Kj8+L2cpfHxbXSkuZm9yRWFjaChmdW5jdGlvbih2ZSl7dmFyIE1lPSIiLGplPXt0eXBlOiIifSxZZT17fSxxZT0hMCxpdD0hMSxodD0hMSxrdD0hMSx1dD17czp7fX0sdnQ9LTEsUHQ9W10sRHQ9W10sQXQ9e3M6e2FsaWdubWVudDp7aG9yaXpvbnRhbDoiY2VudGVyIix2ZXJ0aWNhbDoiY2Vu'@;
put 'dGVyIn19fSxadD0iIixnbj0tMSx1bj17fTt2ZS5yZXBsYWNlKCR0LGZ1bmN0aW9uKEpuLFluKXtQdD1udWxsO3ZhciBMbj1sbihKbiksdHI9bm4oTG5bMF0pLnJlcGxhY2UoL1tcL10/PiQvLCIiKTtzd2l0Y2godHIpe2Nhc2UiPGNsaWVudERhdGEiOmJyZWFrO2Nhc2UiPGFic29sdXRlQW5j'@;
put 'aG9yIjpjYXNlIjxvbmVDZWxsQW5jaG9yIjpjYXNlIjx0d29DZWxsQW5jaG9yIjpqZS50eXBlPW5uKExuWzBdKS5yZXBsYWNlKC9bPD5dL2csIiIpO2JyZWFrO2Nhc2UiPC9hYnNvbHV0ZUFuY2hvciI6Y2FzZSI8L29uZUNlbGxBbmNob3IiOmNhc2UiPC90d29DZWxsQW5jaG9yIjpicmVhaztj'@;
put 'YXNlIjxwb3MiOmplLnBvcz17eDorTG4ueCx5OitMbi55fTticmVhaztjYXNlIjxleHQiOnFlJiYoamUuZXh0PXt4OitMbi5jeCx5OitMbi5jeX0pO2JyZWFrO2Nhc2UiPGZyb20iOmNhc2UiPHRvIjpZZT17fTticmVhaztjYXNlIjwvZnJvbSI6cWUmJihqZS5mcm9tPVllKTticmVhaztjYXNl'@;
put 'IjwvdG8iOnFlJiYoamUudG89WWUpO2JyZWFrO2Nhc2UiPGNvbCI6Y2FzZSI8Y29sT2ZmIjpjYXNlIjxyb3ciOmNhc2UiPHJvd09mZiI6dnQ9WW4rSm4ubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2wiOlllLmM9K3ZlLnNsaWNlKHZ0LFluKTticmVhaztjYXNlIjwvY29sT2ZmIjpZZS5jT2ZmPSt2'@;
put 'ZS5zbGljZSh2dCxZbik7YnJlYWs7Y2FzZSI8L3JvdyI6WWUucj0rdmUuc2xpY2UodnQsWW4pO2JyZWFrO2Nhc2UiPC9yb3dPZmYiOlllLnJPZmY9K3ZlLnNsaWNlKHZ0LFluKTticmVhaztjYXNlIjxzcCI6TWU9InNoYXBlIixBdC5BbmNob3I9amUscGUuc2hhcGVzLnB1c2goQXQpLHFlPSEx'@;
put 'O2JyZWFrO2Nhc2UiPC9zcCI6cWU9ITA7YnJlYWs7Y2FzZSI8Z3JhcGhpY0ZyYW1lIjpNZT0iZ3JhcGhpYyIscWU9ITE7YnJlYWs7Y2FzZSI8L2dyYXBoaWNGcmFtZSI6cWU9ITA7YnJlYWs7Y2FzZSI8cGljIjpNZT0icGljdHVyZSIscWU9ITE7YnJlYWs7Y2FzZSI8L3BpYyI6cWU9ITA7YnJl'@;
put 'YWs7Y2FzZSI8Z3JwU3AiOk1lPSJncm91cHNoYXBlIixxZT0hMTticmVhaztjYXNlIjwvZ3JwU3AiOnFlPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWMiOmNhc2UiPC9ncmFwaGljIjpjYXNlIjx4ZnJtIjpjYXNlIjwveGZybSI6Y2FzZSI8b2ZmIjpicmVhaztjYXNlIjxncmFwaGljRGF0YSI6aXQ9'@;
put 'ITA7YnJlYWs7Y2FzZSI8L2dyYXBoaWNEYXRhIjppdD0hMTticmVhaztjYXNlIjxibGlwRmlsbCI6aXQ9ITA7YnJlYWs7Y2FzZSI8L2JsaXBGaWxsIjppdD0hMTticmVhaztjYXNlIjwvYmxpcCI6YnJlYWs7Y2FzZSI8c3JjUmVjdCI6aXQ9ITA7YnJlYWs7Y2FzZSI8L3NyY1JlY3QiOml0PSEx'@;
put 'O2JyZWFrO2Nhc2UiPG5vRmlsbCI6aWYoaHQpYnJlYWs7IjxzcFByIj09RHQuc2xpY2UoLTEpWzBdJiYoQXQucy5mZ0NvbG9yPW51bGwpO2JyZWFrO2Nhc2UiPC9zb2xpZEZpbGwiOmlmKGh0fHxrdClicmVhazsiPHNwUHIiPT1EdC5zbGljZSgtMilbMF0/QXQucy5mZ0NvbG9yPXVuOiI8clBy'@;
put 'Ij09RHQuc2xpY2UoLTIpWzBdJiZEdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJih1dC5zLmNvbG9yPXVuKSx1bj17fSxrdD0hMTticmVhaztjYXNlIjxwcnN0R2VvbSI6InNoYXBlIj09TWUmJihBdFsiIXNoYXBlIl09TG4ucHJzdCk7YnJlYWs7Y2FzZSI8L3Byc3RHZW9tIjpjYXNlIjxhdkxz'@;
put 'dCI6YnJlYWs7Y2FzZSI8dHhCb2R5IjppdD0hMCxBdC5SPVtdO2JyZWFrO2Nhc2UiPC90eEJvZHkiOml0PSExO2JyZWFrO2Nhc2UiPGJvZHlQciI6QXQucy5hbGlnbm1lbnQudmVydGljYWw9aUlbTG4uYW5jaG9yfHwidCJdfHwidG9wIjticmVhaztjYXNlIjxsc3RTdHlsZSI6YnJlYWs7Y2Fz'@;
put 'ZSI8dCI6Z249WW4rSm4ubGVuZ3RoO2JyZWFrO2Nhc2UiPGJyIjpjYXNlIjxici8+IjpadCs9IlxuIjticmVhaztjYXNlIjwvdCI6WnQrPXZlLnNsaWNlKGduLFluKTticmVhaztjYXNlIjxwUHIiOkF0LnMuYWxpZ25tZW50Lmhvcml6b250YWx8fChBdC5zLmFsaWdubWVudC5ob3Jpem9udGFs'@;
put 'PXM0W0xuLmFsZ258fCJsIl18fCJsZWZ0IiksRHQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYodXQucy5hbGlnbm1lbnQuaG9yaXpvbnRhbD1zNFtMbi5hbGdufHwibCJdfHwibGVmdCIpO2JyZWFrO2Nhc2UiPHJQciI6TG4uc3omJkR0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKEF0LnMuc3o9'@;
put 'dXQucy5zej0rTG4uc3ovMTAwKTticmVhaztjYXNlIjxwIjpadD0iIix1dD17dDoicyIsdjoiIixzOnthbGlnbm1lbnQ6e319fTticmVhaztjYXNlIjwvcCI6InNoYXBlIj09TWUmJkR0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKEF0LnY9KEF0LnZ8fCIiKStadCx1dC52PVp0LEF0LlIucHVz'@;
put 'aCh1dCkpO2JyZWFrO2Nhc2UiPGxhdGluIjpMbi50eXBlZmFjZSYmRHQuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYodXQucy5uYW1lPUxuLnR5cGVmYWNlKTticmVhaztjYXNlIjxzdHlsZSI6aXQ9ITAsaHQ9ITA7YnJlYWs7Y2FzZSI8L3N0eWxlIjppdD0hMSxodD0hMTticmVhaztjYXNlIjxs'@;
put 'blJlZiI6Y2FzZSI8ZmlsbFJlZiI6Y2FzZSI8ZWZmZWN0UmVmIjpjYXNlIjxmb250UmVmIjpicmVhaztjYXNlIjwvZmlsbFJlZiI6IWh0JiYic2hhcGUiPT1NZSYmKEF0LnMuZmdDb2xvcj11biksdW49e307YnJlYWs7Y2FzZSI8L2ZvbnRSZWYiOiFodCYmInNoYXBlIj09TWUmJihBdC5zLmNv'@;
put 'bG9yPXVuKSx1bj17fTticmVhaztjYXNlIjxzY2hlbWVDbHIiOnZhciBycj17YmcxOiJsdDEiLGJnMjoibHQyIix0eDE6ImRrMSIsdHgyOiJkazIifVtMbi52YWxdfHxMbi52YWwsVW49KChKLnRoZW1lRWxlbWVudHN8fHt9KS5jbHJTY2hlbWV8fFtdKS5maW5kKGZ1bmN0aW9uKHBpKXtyZXR1'@;
put 'cm4gcGkubmFtZT09cnJ9KTtVbj91bi5yZ2I9VW4ucmdiOmt0PSEwO2JyZWFrO2Nhc2UiPHNjcmdiQ2xyIjprdD0hMDticmVhaztjYXNlIjxzcmdiQ2xyIjp1bi5yZ2I9TG4udmFsLnNsaWNlKC02KTticmVhaztjYXNlIjxoc2xDbHIiOmNhc2UiPHN5c0NsciI6Y2FzZSI8cHJzdENsciI6a3Q9'@;
put 'ITA7YnJlYWs7Y2FzZSI8Y2hhcnQiOlB0PXBlLmNoYXJ0czt2YXIgWHI9TG4uaWQ7Y2FzZSI8YmxpcCI6UHR8fChQdD1wZS5pbWFnZXMsWHI9TG4uZW1iZWQpLFB0LnB1c2goe0FuY2hvcjpqZSxUYXJnZXQ6KEZbIiFpZCJdW1hyXXx8e30pLlRhcmdldH0pLExuLmxpbmsmJihQdFtQdC5sZW5n'@;
put 'dGgtMV0uTGluaz0oRlsiIWlkIl1bTG4ubGlua118fHt9KS5UYXJnZXQpO2JyZWFrO2Nhc2UiPGdycFNwUHIiOml0PSEwO2JyZWFrO2Nhc2UiPC9ncnBTcFByIjppdD0hMTticmVhaztjYXNlIjxudkdycFNwUHIiOml0PSEwO2JyZWFrO2Nhc2UiPC9udkdycFNwUHIiOml0PSExO2JyZWFrO2Nh'@;
put 'c2UiPHNwUHIiOml0PSEwO2JyZWFrO2Nhc2UiPC9zcFByIjppdD0hMTticmVhaztjYXNlIjxzdHJldGNoIjpjYXNlIjwvc3RyZXRjaCI6Y2FzZSI8ZmlsbFJlY3QiOmNhc2UiPG52R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9udkdyYXBoaWNGcmFtZVByIjpjYXNlIjxjTnZHcmFwaGljRnJhbWVQ'@;
put 'ciI6Y2FzZSI8L2NOdkdyYXBoaWNGcmFtZVByIjpjYXNlIjxncmFwaGljRnJhbWVMb2NrcyI6Y2FzZSI8bnZQaWNQciI6Y2FzZSI8L252UGljUHIiOmNhc2UiPGNOdlBpY1ByIjpjYXNlIjwvY052UGljUHIiOmNhc2UiPHBpY0xvY2tzIjpjYXNlIjxjTnZHcnBTcFByIjpjYXNlIjwvY052R3Jw'@;
put 'U3BQciI6Y2FzZSI8Z3JwU3BMb2NrcyI6Y2FzZSI8bnZTcFByIjpjYXNlIjwvbnZTcFByIjpjYXNlIjxjTnZTcFByIjpjYXNlIjwvY052U3BQciI6Y2FzZSI8c3BMb2NrcyI6YnJlYWs7Y2FzZSI8Y052UHIiOml0PSEwO2JyZWFrO2Nhc2UiPC9jTnZQciI6aXQ9ITE7YnJlYWs7Y2FzZSI8Y3hu'@;
put 'U3AiOml0PSEwO2JyZWFrO2Nhc2UiPC9jeG5TcCI6aXQ9ITE7YnJlYWs7Y2FzZSI8Y052Q3huU3BQciI6aXQ9ITA7YnJlYWs7Y2FzZSI8L2NOdkN4blNwUHIiOml0PSExO2JyZWFrO2Nhc2UiPG52Q3huU3BQciI6Y2FzZSI8L252Q3huU3BQciI6YnJlYWs7Y2FzZSI8ZXh0THN0IjppdD0hMCxo'@;
put 'dD0hMDticmVhaztjYXNlIjwvZXh0THN0IjppdD0hMSxodD0hMTticmVhaztjYXNlIjwvZXh0IjpicmVhaztkZWZhdWx0OmlmKHllJiZ5ZS5XVEYmJiFpdCl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK0xuWzBdKyIgaW4gZHJhd2luZyIpfXJldHVybiI8LyI9PXRyLnNsaWNlKDAs'@;
put 'Mik/RHQucG9wKCk6Ii8+IiE9Sm4uc2xpY2UoSm4ubGVuZ3RoLTIpJiZEdC5wdXNoKHRyKSwiIn0pfSkscGV9KFF0KE8sTWUsITApLEcwKFF0KE8samUsITApLE1lKSwwLHZlLGllKTtpZihZZSl7aWYoWWUuY2hhcnRzKWZvcih2YXIgcWU9MDtxZTxZZS5jaGFydHMubGVuZ3RoOysrcWUpe3Zh'@;
put 'ciBpdD1ZZS5jaGFydHNbcWVdLGh0PWVuKGl0LlRhcmdldCxNZSksa3Q9a3IoaHQpLHV0PSJjaGFydCI9PUYmJjA9PXFlLHZ0PUhkKFF0KE8saHQsITApLDAsMCxHMChRdChPLGt0LCEwKSxodCksMCx1dD9NOm51bGwsaXQsdXQ/bnVsbDpNKTt1dHx8KE1bIiFjaGFydHMiXXx8KE1bIiFjaGFy'@;
put 'dHMiXT1bXSksTVsiIWNoYXJ0cyJdLnB1c2godnQpKX1pZihpZS5ib29rSW1hZ2VzJiZZZS5pbWFnZXMpZm9yKHZhciBQdD0wO1B0PFllLmltYWdlcy5sZW5ndGg7KytQdCl7dmFyIER0PVllLmltYWdlc1tQdF0sQXQ9eyIhdHlwZSI6ImltYWdlIiwiIXBvcyI6Z0MoRHQuQW5jaG9yKSwiIXBv'@;
put 'c1R5cGUiOkR0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjppNChEdC5BbmNob3IsTSksIiFyZWxwb3MiOklfKER0LkFuY2hvcixNKX07aWYoRHQuVGFyZ2V0JiYoQXRbIiFwYXRoIl09ZW4oRHQuVGFyZ2V0LE1lKSxBdFsiIWRhdGEiXT1FdChPLEF0WyIhcGF0'@;
put 'aCJdKSxBdFsiIWRhdGF0eXBlIl09InN0cmluZyI9PXR5cGVvZiBBdFsiIWRhdGEiXT8iYmluYXJ5IjoiYnVmZmVyIiksRHQuTGluayYmKEF0WyIhZGF0YXR5cGUiXXx8KEF0WyIhZGF0YXR5cGUiXT0icmVtb3RlIiksQXRbIiFsaW5rIl09RHQuTGluayksIUF0WyIhZGF0YXR5cGUiXSl0aHJv'@;
put 'dyJJbWFnZSBkYXRhIGNhbm5vdCBiZSBmb3VuZCI7TVsiIWltYWdlcyJdfHwoTVsiIWltYWdlcyJdPVtdKSxNWyIhaW1hZ2VzIl0ucHVzaChBdCl9dmFyIFp0LGduO2lmKFllLnNoYXBlcylmb3IodmFyIHVuPTA7dW48WWUuc2hhcGVzLmxlbmd0aDsrK3VuKWduPXsiIXR5cGUiOiJzaGFwZSIs'@;
put 'IiFwb3MiOmk0KChadD1ZZS5zaGFwZXNbdW5dKS5BbmNob3IsTSksIiFwb3NUeXBlIjpadC5BbmNob3IudHlwZS5yZXBsYWNlKC9BbmNob3IvLCIiKSwiIWFic3BvcyI6aTQoWnQuQW5jaG9yLE0pLCIhcmVscG9zIjpJXyhadC5BbmNob3IsTSl9LFsidiIsIiFzaGFwZSIsInMiLCJSIl0uZm9y'@;
put 'RWFjaChxbiksTVsiIXNoYXBlcyJdfHwoTVsiIXNoYXBlcyJdPVtdKSxNWyIhc2hhcGVzIl0ucHVzaChnbil9fWZ1bmN0aW9uIHFuKEpuKXtadFtKbl0mJihnbltKbl09WnRbSm5dKX19KGh0LHZlLE0sRixNZSwwLDAsWWUpO3ZhciBrdD1bXTtyZXR1cm4gcGUmJnBlW0pdJiZhdChwZVtKXSku'@;
put 'Zm9yRWFjaChmdW5jdGlvbih1dCl7aWYocGVbSl1bdXRdLlR5cGU9PV9vLkNNTlQpe3ZhciB2dD1lbihwZVtKXVt1dF0uVGFyZ2V0LEYpO2lmKCEoa3Q9ZnVuY3Rpb24gZk8oTSxGLE8pe3JldHVybiIuYmluIj09PUYuc2xpY2UoLTQpP2Z1bmN0aW9uIFg2KE0sRil7dmFyIE89W10sSj1bXSxp'@;
put 'ZT17fSxwZT0hMTtyZXR1cm4gdGEoTSxmdW5jdGlvbih2ZSxNZSxqZSl7c3dpdGNoKGplKXtjYXNlIDYzMjpKLnB1c2godmUpO2JyZWFrO2Nhc2UgNjM1OmllPXZlO2JyZWFrO2Nhc2UgNjM3OmllLnQ9dmUudCxpZS5oPXZlLmgsaWUucj12ZS5yO2JyZWFrO2Nhc2UgNjM2OmlmKGllLmF1dGhv'@;
put 'cj1KW2llLmlhdXRob3JdLGRlbGV0ZSBpZS5pYXV0aG9yLEYuc2hlZXRSb3dzJiZpZS5yZngmJkYuc2hlZXRSb3dzPD1pZS5yZngucilicmVhaztpZS50fHwoaWUudD0iIiksZGVsZXRlIGllLnJmeCxPLnB1c2goaWUpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7Y2Fz'@;
put 'ZSAzNTpwZT0hMDticmVhaztjYXNlIDM2OnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoTWV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKChNZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIXBlfHxGLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK2plKyIg'@;
put 'IitNZSl9fSksT30oTSxPKTpmdW5jdGlvbiBNQyhNLEYpe2lmKE0ubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIE89W10sSj1bXSxpZT1NLm1hdGNoKC88KD86XHcrOik/YXV0aG9ycz4oW1xzXFNdKik8XC8oPzpcdys6KT9hdXRob3JzPi8pO2llJiZpZVsx'@;
put 'XSYmaWVbMV0uc3BsaXQoLzxcL1x3Kjo/YXV0aG9yPi8pLmZvckVhY2goZnVuY3Rpb24oeWUpe2lmKCIiIT09eWUmJiIiIT09eWUudHJpbSgpKXt2YXIgdmU9eWUubWF0Y2goLzwoPzpcdys6KT9hdXRob3JbXj5dKj4oLiopLyk7dmUmJk8ucHVzaCh2ZVsxXSl9fSk7dmFyIHBlPU0ubWF0Y2go'@;
put 'LzwoPzpcdys6KT9jb21tZW50TGlzdD4oW1xzXFNdKik8XC8oPzpcdys6KT9jb21tZW50TGlzdD4vKTtyZXR1cm4gcGUmJnBlWzFdJiZwZVsxXS5zcGxpdCgvPFwvXHcqOj9jb21tZW50Pi8pLmZvckVhY2goZnVuY3Rpb24oeWUpe2lmKCIiIT09eWUmJiIiIT09eWUudHJpbSgpKXt2YXIgdmU9'@;
put 'eWUubWF0Y2goLzwoPzpcdys6KT9jb21tZW50W14+XSo+Lyk7aWYodmUpe3ZhciBNZT1sbih2ZVswXSksamU9e2F1dGhvcjpNZS5hdXRob3JJZCYmT1tNZS5hdXRob3JJZF18fCJzaGVldGpzZ2hvc3QiLHJlZjpNZS5yZWYsZ3VpZDpNZS5ndWlkfSxZZT1ocyhNZS5yZWYpO2lmKCEoRi5zaGVl'@;
put 'dFJvd3MmJkYuc2hlZXRSb3dzPD1ZZS5yKSl7dmFyIHFlPXllLm1hdGNoKC88KD86XHcrOik/dGV4dD4oW1xzXFNdKik8XC8oPzpcdys6KT90ZXh0Pi8pLGl0PSEhcWUmJiEhcWVbMV0mJnBfKHFlWzFdKXx8e3I6IiIsdDoiIixoOiIifTtqZS5yPWl0LnIsIjx0PjwvdD4iPT1pdC5yJiYoaXQu'@;
put 'dD1pdC5oPSIiKSxqZS50PShpdC50fHwiIikucmVwbGFjZSgvXHJcbi9nLCJcbiIpLnJlcGxhY2UoL1xyL2csIlxuIiksRi5jZWxsSFRNTCYmKGplLmg9aXQuaCksSi5wdXNoKGplKX19fX0pLEp9KE0sTyl9KEV0KE0sdnQsITApLHZ0LE1lKSl8fCFrdC5sZW5ndGgpcmV0dXJuOyFmdW5jdGlv'@;
put 'biB3QyhNLEYpe3ZhciBKLE89QXJyYXkuaXNBcnJheShNKTtGLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBwZT1ocyhpZS5yZWYpO2lmKE8/KE1bcGUucl18fChNW3BlLnJdPVtdKSxKPU1bcGUucl1bcGUuY10pOko9TVtpZS5yZWZdLCFKKXtKPXt0OiJ6In0sTz9NW3BlLnJdW3BlLmNdPUo6'@;
put 'TVtpZS5yZWZdPUo7dmFyIHllPWJvKE1bIiFyZWYiXXx8IkJEV0dPMTAwMDAwMTpBMSIpO3llLnMucj5wZS5yJiYoeWUucy5yPXBlLnIpLHllLmUucjxwZS5yJiYoeWUuZS5yPXBlLnIpLHllLnMuYz5wZS5jJiYoeWUucy5jPXBlLmMpLHllLmUuYzxwZS5jJiYoeWUuZS5jPXBlLmMpO3ZhciB2'@;
put 'ZT1BaSh5ZSk7dmUhPT1NWyIhcmVmIl0mJihNWyIhcmVmIl09dmUpfUouY3x8KEouYz1bXSk7dmFyIE1lPXthOmllLmF1dGhvcix0OmllLnQscjppZS5yfTtNZS5yJiYic3RyaW5nIj09dHlwZW9mIE1lLnImJihNZS5SPVdwKE1lLnIpKSxpZS5oJiYoTWUuaD1pZS5oKSxKLmMucHVzaChNZSl9'@;
put 'KX0oaHQsa3QpfX0pLGZ1bmN0aW9uIE9PKE0sRixPLEosaWUscGUseWUpeyFNfHwhTVsiIXRhYmxlcmVmcyJdfHwhT3x8IU9bIiFpZCJdfHwoTVsiIXRhYmxlcyJdPVtdLE1bIiF0YWJsZXJlZnMiXS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXt2YXIgTWU9T1siIWlkIl1bdmVdO2lmKE1lJiZNZS5U'@;
put 'YXJnZXQpe3ZhciBqZT1lbihNZS5UYXJnZXQsSik7IWZ1bmN0aW9uIGFJKE0sRixPLEosaWUpe3ZhciBwZT17c3R5bGU6e30saGVhZGVyOjB9LHllPSExO00ucmVwbGFjZSgkdCxmdW5jdGlvbih2ZSl7dmFyIE1lPWxuKHZlKTtzd2l0Y2gobm4oTWVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwv'@;
put 'dGFibGU+IjpjYXNlIjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxhdGVkQ29s'@;
put 'dW1uRm9ybXVsYT4iOmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4bWxDb2x1'@;
put 'bW5Qcj4iOmNhc2UiPHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRh'@;
put 'YmxlIjpNZS5yZWYmJihwZS5yZWY9TWUucmVmKSxNZS5uYW1lP3BlLm5hbWU9TWUubmFtZTpNZS5kaXNwbGF5TmFtZSYmKHBlLm5hbWU9TWUuZGlzcGxheU5hbWUpLG51bGwhPU1lLmhlYWRlcnJvd2NvdW50JiYxIT0rTWUuaGVhZGVycm93Y291bnQ/cGUuaGVhZGVyPStNZS5oZWFkZXJyb3dj'@;
put 'b3VudDpudWxsPT1NZS5oZWFkZXJyb3djb3VudCYmKHBlLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6cGUuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6cGUuY29scz1bXTticmVhaztj'@;
put 'YXNlIjx0YWJsZVN0eWxlSW5mbyI6TWUuc2hvd1Jvd1N0cmlwZXMmJihwZS5zdHlsZS5yb3dzdHJpcGU9THIoTWUuc2hvd1Jvd1N0cmlwZXMpKSxNZS5zaG93Q29sdW1uU3RyaXBlcyYmKHBlLnN0eWxlLmNvbHN0cmlwZT1McihNZS5zaG93Q29sdW1uU3RyaXBlcykpLE1lLnNob3dGaXJzdENv'@;
put 'bHVtbiYmKHBlLnN0eWxlLmNvbGZpcnN0PUxyKE1lLnNob3dGaXJzdENvbHVtbikpLE1lLnNob3dMYXN0Q29sdW1uJiYocGUuc3R5bGUuY29sbGFzdD1McihNZS5zaG93TGFzdENvbHVtbikpLE1lLm5hbWUmJihwZS5zdHlsZS5uYW1lPU1lLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5bGUvLCIi'@;
put 'KSk7YnJlYWs7Y2FzZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6cGUuY29scy5wdXNoKHtpZDorTWUuaWQsbmFtZTpNZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0'@;
put 'b21GaWx0ZXJzPiI6Y2FzZSI8ZXh0Ijp5ZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6eWU9ITE7YnJlYWs7ZGVmYXVsdDppZigheWUmJmllLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK01lWzBd'@;
put 'KyIgaW4gdGFibGUiKX1yZXR1cm4gdmV9KSxwZS5maWx0ZXJ8fChwZS5maWx0ZXI9ITEpLHBlLnN0eWxlLm5hbWUmJiFwZS5zdHlsZS5uYW1lLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKSYmTy5UYWJsZSYmTy5UYWJsZS5mb3JFYWNoKGZ1bmN0aW9uKHZlKXsodmUubmFtZT09'@;
put 'cGUuc3R5bGUubmFtZXx8dmUucmF3bmFtZT09cGUuc3R5bGUubmFtZSkmJihwZS5zdHlsZS5yYXc9WHQodmUpKX0pLEZbIiF0YWJsZXMiXS5wdXNoKHBlKX0oRXQoRixqZSwhMCksTSxpZSwwLHllKX19KSxkZWxldGUgTVsiIXRhYmxlcmVmcyJdKX0oaHQsTSxwZVtKXSxGLHFlLDAsTWUpLHR5'@;
put 'cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSImJm1sLnB1c2goW2h0LE0scGVbSl0sRix7U2hlZXRzOnllfSxxZSxNZV0pLGZ1bmN0aW9uIFJPKE0sRixPLEosaWUscGUseWUsdmUpe2lmKE0mJk1bIiFsZWdkcmF3ZWwiXSl7dmFyIE1lPWVuKE1bIiFsZWdkcmF3ZWwiXS5UYXJnZXQsSiksamU9'@;
put 'UXQoTyxNZSwhMCk7amUmJmZ1bmN0aW9uICQ2KE0sRixPKXt2YXIgSj0wOyhNLm1hdGNoKGxJKXx8W10pLmZvckVhY2goZnVuY3Rpb24oaWUpe3ZhciBQdCxEdCxBdCxadCxnbixxbix1bixKbixwZT0iIix5ZT0hMCx2ZT0iIixNZT0tMSxqZT17fSxZZT17fSxxZT17fSxpdD0tMSxodD0tMSxr'@;
put 'dD0iIix1dD0iIix2dD0iIixZbj0hMSxMbj0hMTtzd2l0Y2goaWUucmVwbGFjZSgkdCxmdW5jdGlvbihVbixYcil7dmFyIHBpPWxuKFVuKTtzd2l0Y2gobm4ocGlbMF0pKXtjYXNlIjxzaGFwZSI6cGkuZmlsbGNvbG9yJiYoamUuY29sb3IxPXBpLmZpbGxjb2xvcikscGkuc3Ryb2tlY29sb3Im'@;
put 'JihxZS5jb2xvcj1waS5zdHJva2Vjb2xvcik7YnJlYWs7Y2FzZSI8ZmlsbCI6Y2FzZSI8ZmlsbD4iOiI8djpmaWxsIj09cGlbMF0mJihwaS5jb2xvcjImJihqZS5jb2xvcjI9cGkuY29sb3IyKSxwaS50eXBlJiYoamUudHlwZT1waS50eXBlKSk7YnJlYWs7Y2FzZSI8L2ZpbGw+IjpjYXNlIjxs'@;
put 'b2NrIjpjYXNlIjxsb2NrLz4iOmJyZWFrO2Nhc2UiPHNoYWRvdyI6cGkuY29sb3ImJihZZS5jb2xvcj1waS5jb2xvcikscGkub24mJihZZS5vbj1waS5vbik7YnJlYWs7Y2FzZSI8Q2xpZW50RGF0YSI6cGkuT2JqZWN0VHlwZSYmKHBlPXBpLk9iamVjdFR5cGUpO2JyZWFrO2Nhc2UiPFZpc2li'@;
put 'bGUiOmNhc2UiPFZpc2libGUvPiI6eWU9ITE7YnJlYWs7Y2FzZSI8QW5jaG9yIjpjYXNlIjxBbmNob3I+IjpjYXNlIjxSb3ciOmNhc2UiPFJvdz4iOmNhc2UiPENvbHVtbiI6Y2FzZSI8Q29sdW1uPiI6Y2FzZSI8Rm1sYU1hY3JvIjpjYXNlIjxGbWxhTWFjcm8+IjpjYXNlIjxGbWxhTGluayI6'@;
put 'Y2FzZSI8Rm1sYUxpbms+IjpjYXNlIjxGbWxhUmFuZ2UiOmNhc2UiPEZtbGFSYW5nZT4iOmNhc2UiPFNlbFR5cGUiOmNhc2UiPFNlbFR5cGU+IjpjYXNlIjxWYWwiOmNhc2UiPFZhbD4iOmNhc2UiPE1pbiI6Y2FzZSI8TWluPiI6Y2FzZSI8TWF4IjpjYXNlIjxNYXg+IjpjYXNlIjxJbmMiOmNh'@;
put 'c2UiPEluYz4iOmNhc2UiPFBhZ2UiOmNhc2UiPFBhZ2U+IjpjYXNlIjxDaGVja2VkIjpjYXNlIjxDaGVja2VkPiI6Y2FzZSI8dGV4dGJveCI6Y2FzZSI8dGV4dGJveD4iOk1lPVhyK1VuLmxlbmd0aDticmVhaztjYXNlIjwvQW5jaG9yPiI6dmU9aWUuc2xpY2UoTWUsWHIpLnRyaW0oKTticmVh'@;
put 'aztjYXNlIjwvUm93PiI6aXQ9K2llLnNsaWNlKE1lLFhyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0NvbHVtbj4iOmh0PStpZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTWFjcm8+IjprdD1pZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4i'@;
put 'OnV0PWllLnNsaWNlKE1lLFhyKS50cmltKCk7YnJlYWs7Y2FzZSI8L0ZtbGFSYW5nZT4iOnVuPWllLnNsaWNlKE1lLFhyKS50cmltKCk7YnJlYWs7Y2FzZSI8L1NlbFR5cGU+IjpKbj1pZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpQdD0raWUuc2xpY2UoTWUsWHIp'@;
put 'LnRyaW0oKTticmVhaztjYXNlIjwvTWluPiI6RHQ9K2llLnNsaWNlKE1lLFhyKS50cmltKCk7YnJlYWs7Y2FzZSI8L01heD4iOkF0PStpZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpadD0raWUuc2xpY2UoTWUsWHIpLnRyaW0oKTticmVhaztjYXNlIjwvUGFnZT4i'@;
put 'OmduPStpZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPC9DaGVja2VkPiI6cW49K2llLnNsaWNlKE1lLFhyKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+Ijp2dD1pZS5zbGljZShNZSxYcikudHJpbSgpO2JyZWFrO2Nhc2UiPE1vdmVXaXRoQ2VsbHMvPiI6Y2FzZSI8TW92'@;
put 'ZVdpdGhDZWxscz4iOlluPSEwO2JyZWFrO2Nhc2UiPFNpemVXaXRoQ2VsbHMvPiI6Y2FzZSI8U2l6ZVdpdGhDZWxscz4iOkxuPSEwfXJldHVybiIifSkscGUpe2Nhc2UiTm90ZSI6dmFyIHRyPUJjLnNoZWV0X2dldF9jZWxsKEYsaXQ+PTAmJmh0Pj0wP0RpKHtyOml0LGM6aHR9KTpPW0pdLnJl'@;
put 'Zik7dHIuYyYmKHRyLmMuaGlkZGVuPXllLHZlJiYodHIuYy5yYXdhbmNob3I9dmUsX0ModmUsdHIuYyksSkwodHIuY1siIXBvcyJdLDIqISFZbishIUxuLEYpKSxqZS5jb2xvcjEmJih0ci5jLmZpbGw9amUpLFllLmNvbG9yJiYodHIuYy5zaGFkb3c9WWUpLHFlLmNvbG9yJiYodHIuYy5zdHJv'@;
put 'a2U9cWUpKSwrK0o7YnJlYWs7Y2FzZSJCdXR0b24iOmNhc2UiR0JveCI6Y2FzZSJEcm9wIjpjYXNlIkxhYmVsIjpjYXNlIkNoZWNrYm94IjpjYXNlIlNjcm9sbCI6Y2FzZSJMaXN0IjpjYXNlIlJhZGlvIjpjYXNlIlNwaW4iOmNhc2UiRWRpdCI6RlsiIWNvbnRyb2xzIl18fChGWyIhY29udHJv'@;
put 'bHMiXT1bXSk7dmFyIHJyPXsiIXR5cGUiOnBlfTt2ZSYmX0ModmUscnIpLGt0JiYocnIubWFjcm89a3QucmVwbGFjZSgiWzBdISIsIiIpKSx1dCYmKHJyLmxpbms9dXQpLCJTY3JvbGwiPT1wZXx8IlNwaW4iPT1wZT8obnVsbD09UHQmJihQdD0wKSxudWxsPT1EdCYmKER0PTApLG51bGw9PUF0'@;
put 'JiYoQXQ9M2U0KSxudWxsPT1adCYmKFp0PTEpLCJTY3JvbGwiPT1wZSYmbnVsbD09Z24mJihnbj0xMCkpOiJSYWRpbyI9PXBlfHwiQ2hlY2tib3giPT1wZT8obnVsbD09cW4mJihxbj0wKSxQdD1xbik6KCJMaXN0Ij09cGV8fCJEcm9wIj09cGUpJiYobnVsbCE9dW4mJihyci5yZWY9dW4pLG51'@;
put 'bGw9PUpuJiYoSm49IlNpbmdsZSIpLCJMaXN0Ij09cGUmJihyci5zZWw9Sm4pKSxudWxsIT1QdCYmKHJyLnZhbD1QdCksbnVsbCE9RHQmJihyci5taW49RHQpLG51bGwhPUF0JiYocnIubWF4PUF0KSxudWxsIT1adCYmKHJyLnN0ZXA9WnQpLG51bGwhPWduJiYocnIucGFnZT1nbiksdnQmJihy'@;
put 'ci50PXZ0LnJlcGxhY2UoL1xzKjxbXHNcU10qPz5ccyovZywiIikpLEZbIiFjb250cm9scyJdLnB1c2gocnIpfX0pfShCaShqZSksTSx2ZXx8W10pLE1bIiFMRFAiXT1NZSxNWyIhY3RybGlkIl0mJk1bIiFjdHJsaWQiXS5mb3JFYWNoKGZ1bmN0aW9uKFllKXtpZihZZS5yZWwmJlllLnJlbC5U'@;
put 'YXJnZXQpe3ZhciBxZT1lbihZZS5yZWwuVGFyZ2V0LEopO1llLnBhdGg9cWUsZGVsZXRlIFllLnJlbH19KX19KGh0LDAsTSxGLDAsMCwwLGt0KSxodH1jYXRjaCh1dCl7aWYoTWUuV1RGKXRocm93IHV0fX1mdW5jdGlvbiBqYyhNKXtyZXR1cm4iLyI9PU0uY2hhckF0KDApP00uc2xpY2UoMSk6'@;
put 'TX12YXIgV2w9ZnVuY3Rpb24oKXt9O2Z1bmN0aW9uIGI0KE0sRil7aWYobWw9W10sTjMoRj1GfHx7fSkscG4oTSwiTUVUQS1JTkYvbWFuaWZlc3QueG1sIil8fHBuKE0sIm9iamVjdGRhdGEueG1sIikpcmV0dXJuIGZ1bmN0aW9uIFRPKE0sRil7Rj1GfHx7fSxwbihNLCJNRVRBLUlORi9tYW5p'@;
put 'ZmVzdC54bWwiKSYmZnVuY3Rpb24gdHMoTSxGKXtmb3IodmFyIEosaWUsTz1veChNKTtKPVI1LmV4ZWMoTyk7KXN3aXRjaChKWzNdKXtjYXNlIm1hbmlmZXN0IjpicmVhaztjYXNlImZpbGUtZW50cnkiOmlmKCIvIj09KGllPWxuKEpbMF0sITEpKS5wYXRoJiZpZS50eXBlIT09RHMpdGhyb3cg'@;
put 'bmV3IEVycm9yKCJUaGlzIE9wZW5Eb2N1bWVudCBpcyBub3QgYSBzcHJlYWRzaGVldCIpO2JyZWFrO2Nhc2UiZW5jcnlwdGlvbi1kYXRhIjpjYXNlImFsZ29yaXRobSI6Y2FzZSJzdGFydC1rZXktZ2VuZXJhdGlvbiI6Y2FzZSJrZXktZGVyaXZhdGlvbiI6dGhyb3cgbmV3IEVycm9yKCJVbnN1'@;
put 'cHBvcnRlZCBPRFMgRW5jcnlwdGlvbiIpO2RlZmF1bHQ6aWYoRiYmRi5XVEYpdGhyb3cgSn19KEV0KE0sIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpLEYpO3ZhciBPPVF0KE0sImNvbnRlbnQueG1sIik7aWYoIU8pdGhyb3cgbmV3IEVycm9yKCJNaXNzaW5nIGNvbnRlbnQueG1sIGluIE9EUyAv'@;
put 'IFVPRiBmaWxlIik7dmFyIEo9d3goQmkoTyksRik7cmV0dXJuIHBuKE0sIm1ldGEueG1sIikmJihKLlByb3BzPUZwKEV0KE0sIm1ldGEueG1sIikpKSxKfShNLEYpO2lmKHBuKE0sIkluZGV4L0RvY3VtZW50Lml3YSIpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgTlVNQkVSUyBmaWxl'@;
put 'Iik7dmFyIHBlLHllLE89ZnVuY3Rpb24gbXQoTSl7Zm9yKHZhciBGPU0uRnVsbFBhdGhzfHxhdChNLmZpbGVzKSxPPVtdLEo9MDtKPEYubGVuZ3RoOysrSikiLyIhPUZbSl0uc2xpY2UoLTEpJiZPLnB1c2goRltKXSk7cmV0dXJuIE8uc29ydCgpfShNKSxKPWZ1bmN0aW9uIEZtKE0pe3ZhciBG'@;
put 'PXt3b3JrYm9va3M6W10sc2hlZXRzOltdLGNoYXJ0czpbXSxkaWFsb2dzOltdLG1hY3JvczpbXSxyZWxzOltdLHN0cnM6W10sY29tbWVudHM6W10sbGlua3M6W10sY29yZXByb3BzOltdLGV4dHByb3BzOltdLGN1c3Rwcm9wczpbXSx0aGVtZXM6W10sc3R5bGVzOltdLGNhbGNjaGFpbnM6W10s'@;
put 'dmJhOltdLGRyYXdpbmdzOltdLHBpdm90czpbXSxwaXZvdGNhY2hlczpbXSxwaXZvdHJlY29yZHM6W10sZGF0YW1vZGVsczpbXSxjaGFydG9ianM6W10sY2hhcnRzdHlsZXM6W10sY2hhcnRjb2xvcnM6W10sY2hhcnRleHM6W10sdGFibGVzOltdLGNvbm5zOltdLGN0cmxwcm9wczpbXSxjdXN0'@;
put 'b214bWxwcm9wczpbXSxUT0RPOltdLHhtbG5zOiIifTtpZighTXx8IU0ubWF0Y2gpcmV0dXJuIEY7dmFyIE89e307aWYoKE0ubWF0Y2goJHQpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihKKXt2YXIgaWU9bG4oSik7c3dpdGNoKGllWzBdLnJlcGxhY2UoV24sIjwiKSl7Y2FzZSI8P3htbCI6YnJl'@;
put 'YWs7Y2FzZSI8VHlwZXMiOkYueG1sbnM9aWVbInhtbG5zIisoaWVbMF0ubWF0Y2goLzwoXHcrKTovKXx8WyIiLCIiXSlbMV1dO2JyZWFrO2Nhc2UiPERlZmF1bHQiOk9baWUuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPWllLkNvbnRlbnRUeXBlO2JyZWFrO2Nhc2UiPE92ZXJyaWRlIjp2b2lk'@;
put 'IDAhPT1GW3hoW2llLkNvbnRlbnRUeXBlXV0mJkZbeGhbaWUuQ29udGVudFR5cGVdXS5wdXNoKGllLlBhcnROYW1lKX19KSxGLnhtbG5zIT09VGkuQ1QpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitGLnhtbG5zKTtyZXR1cm4gRi5jYWxjY2hhaW49Ri5jYWxjY2hhaW5z'@;
put 'Lmxlbmd0aD4wP0YuY2FsY2NoYWluc1swXToiIixGLnNzdD1GLnN0cnMubGVuZ3RoPjA/Ri5zdHJzWzBdOiIiLEYuc3R5bGU9Ri5zdHlsZXMubGVuZ3RoPjA/Ri5zdHlsZXNbMF06IiIsRi5jb25uPUYuY29ubnMubGVuZ3RoPjA/Ri5jb25uc1swXToiIixGLmRlZmF1bHRzPU8sZGVsZXRlIEYu'@;
put 'Y2FsY2NoYWlucyxGfShRdChNLCJbQ29udGVudF9UeXBlc10ueG1sIikpLGllPSExO2lmKDA9PT1KLndvcmtib29rcy5sZW5ndGgmJkV0KE0seWU9InhsL3dvcmtib29rLnhtbCIsITApJiZKLndvcmtib29rcy5wdXNoKHllKSwwPT09Si53b3JrYm9va3MubGVuZ3RoKXtpZighRXQoTSx5ZT0i'@;
put 'eGwvd29ya2Jvb2suYmluIiwhMCkpdGhyb3cgbmV3IEVycm9yKCJDb3VsZCBub3QgZmluZCB3b3JrYm9vayIpO0oud29ya2Jvb2tzLnB1c2goeWUpLGllPSEwfSJiaW4iPT1KLndvcmtib29rc1swXS5zbGljZSgtMykmJihpZT0hMCk7dmFyIHZlPXt9LE1lPXt9O2lmKCFGLmJvb2tTaGVldHMm'@;
put 'JiFGLmJvb2tQcm9wcyl7aWYoZDU9W10sSi5zc3QpdHJ5e2Q1PWZ1bmN0aW9uIGhPKE0sRixPKXtyZXR1cm4iLmJpbiI9PT1GLnNsaWNlKC00KT9mdW5jdGlvbiBMNihNLEYpe3ZhciBPPVtdLEo9ITE7cmV0dXJuIHRhKE0sZnVuY3Rpb24ocGUseWUsdmUpe3N3aXRjaCh2ZSl7Y2FzZSAxNTk6'@;
put 'Ty5Db3VudD1wZVswXSxPLlVuaXF1ZT1wZVsxXTticmVhaztjYXNlIDE5Ok8ucHVzaChwZSk7YnJlYWs7Y2FzZSAxNjA6cmV0dXJuITA7Y2FzZSAzNTpKPSEwO2JyZWFrO2Nhc2UgMzY6Sj0hMTticmVhaztkZWZhdWx0OmlmKHllLmluZGV4T2YoIkJlZ2luIik+MHx8eWUuaW5kZXhPZigiRW5k'@;
put 'IiksIUp8fEYuV1RGKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIit2ZSsiICIreWUpfX0pLE99KE0sTyk6ZnVuY3Rpb24gSWQoTSxGKXt2YXIgTz1bXSxKPSIiO2lmKCFNKXJldHVybiBPO3ZhciBpZT1NLm1hdGNoKEJNKTtpZihpZSl7Sj1pZVsyXS5yZXBsYWNlKFlNLCIi'@;
put 'KS5zcGxpdChKbSk7Zm9yKHZhciBwZT0wO3BlIT1KLmxlbmd0aDsrK3BlKXt2YXIgeWU9cF8oSltwZV0udHJpbSgpLEYpO251bGwhPXllJiYoT1tPLmxlbmd0aF09eWUpfWllPWxuKGllWzFdKSxPLkNvdW50PWllLmNvdW50LE8uVW5pcXVlPWllLnVuaXF1ZUNvdW50fXJldHVybiBPfShNLE8p'@;
put 'fShFdChNLGpjKEouc3N0KSksSi5zc3QsRil9Y2F0Y2gob3Ipe2lmKEYuV1RGKXRocm93IG9yfUYuY2VsbFN0eWxlcyYmSi50aGVtZXMubGVuZ3RoJiYodmU9ZnVuY3Rpb24gcVMoTSxGLE8pe3JldHVybiBBXyhNLE8pfShRdChNLEoudGhlbWVzWzBdLnJlcGxhY2UoL15cLy8sIiIpLCEwKXx8'@;
put 'IiIsMCxGKSksSi5zdHlsZSYmKE1lPWZ1bmN0aW9uICRTKE0sRixPLEope3JldHVybiIuYmluIj09PUYuc2xpY2UoLTQpP2Z1bmN0aW9uIG9DKE0sRixPKXt2YXIgSj17TnVtYmVyRm10OltdfTtmb3IodmFyIGllIGluIEMuX3RhYmxlKUouTnVtYmVyRm10W2llXT1DLl90YWJsZVtpZV07Si5D'@;
put 'ZWxsWGY9W10sSi5Gb250cz1bXSxKLkZpbGxzPVtdLEouQm9yZGVycz1bXTt2YXIgcGU9W10seWU9ITE7cmV0dXJuIHRhKE0sZnVuY3Rpb24oTWUsamUsWWUpe3N3aXRjaChZZSl7Y2FzZSA0NDpKLk51bWJlckZtdFtNZVswXV09TWVbMV0sQy5sb2FkKE1lWzFdLE1lWzBdKTticmVhaztjYXNl'@;
put 'IDQzOno2KE1lLmNvbG9yLEYpLEouRm9udHMucHVzaChNZSk7YnJlYWs7Y2FzZSAxMDI1OmNhc2UgNDg6Y2FzZSA1MDc6Y2FzZSA1NzI6Y2FzZSA0NzU6Y2FzZSAxMTcxOmNhc2UgMjEwMjpjYXNlIDExMzA6Y2FzZSA1MTI6Y2FzZSAyMDk1OmNhc2UgMzA3MjpicmVhaztjYXNlIDQ1Ok1lLmZn'@;
put 'Q29sb3ImJno2KE1lLmZnQ29sb3IsRiksTWUuYmdDb2xvciYmejYoTWUuYmdDb2xvcixGKSxKLkZpbGxzLnB1c2goTWUpO2JyZWFrO2Nhc2UgNDY6WyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJkaWFnIl0uZm9yRWFjaChmdW5jdGlvbihxZSl7TWVbcWVdJiZNZVtxZV0uY29sb3Im'@;
put 'Jno2KE1lW3FlXS5jb2xvcixGKX0pLEouQm9yZGVycy5wdXNoKE1lKTticmVhaztjYXNlIDQ3OiJCcnRCZWdpbkNlbGxYRnMiPT1wZVtwZS5sZW5ndGgtMV0mJkouQ2VsbFhmLnB1c2goTWUpO2JyZWFrO2Nhc2UgMzU6eWU9ITA7YnJlYWs7Y2FzZSAzNjp5ZT0hMTticmVhaztjYXNlIDM3OnBl'@;
put 'LnB1c2goamUpLHllPSEwO2JyZWFrO2Nhc2UgMzg6cGUucG9wKCkseWU9ITE7YnJlYWs7ZGVmYXVsdDppZigoamV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApcGUucHVzaChqZSk7ZWxzZSBpZigoamV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKXBlLnBvcCgpO2Vsc2UgaWYoIXllfHxPLldURiYm'@;
put 'IkJydEFDQmVnaW4iIT1wZVtwZS5sZW5ndGgtMV0pdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1llKyIgIitqZSl9fSksKEouRm9udHN8fFtdKVswXSYmeTMoSi5Gb250c1swXSksSn0oTSxPLEopOmVDKE0sTyxKKX0oRXQoTSxqYyhKLnN0eWxlKSksSi5zdHlsZSx2ZSxG'@;
put 'KSl9dmFyIGplPUoubGlua3MubWFwKGZ1bmN0aW9uKG9yKXt0cnl7dmFyIFRuPUcwKFF0KE0sa3IoamMob3IpKSksb3IpO3JldHVybiBmdW5jdGlvbiBZdihNLEYsTyxKKXtyZXR1cm4iLmJpbiI9PT1PLnNsaWNlKC00KT9mdW5jdGlvbiB5QyhNLEYsTyxKKXtpZighTSlyZXR1cm4gTTt2YXIg'@;
put 'aWU9Snx8e30scGU9ITE7dGEoTSxmdW5jdGlvbihNZSxqZSxZZSl7c3dpdGNoKFllKXtjYXNlIDM1OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3'@;
put 'OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpjYXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OnBlPSEwO2JyZWFrO2Nhc2UgMzY6cGU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChqZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEo'@;
put 'KGplfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighcGV8fGllLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1llLnRvU3RyaW5nKDE2KSsiICIramUpfX0saWUpfShNLDAsMCxKKTpmdW5jdGlvbiB2QyhNLEYsTyxKKXt2YXIgaWU9Snx8e30scGU9e1NoZWV0TmFt'@;
put 'ZXM6W10sU2hlZXRzOnt9fSx2ZT0hMSxNZT17fSxqZT0tMSxZZT0tMSxxZT17czp7cjowLGM6MH0sZTp7cjotMSxjOi0xfX0saXQ9e30saHQ9MDtyZXR1cm4oTXx8IiIpLnJlcGxhY2UoJHQsZnVuY3Rpb24oa3QsdXQpe3ZhciB2dD1sbihrdCk7c3dpdGNoKG5uKHZ0WzBdKSl7Y2FzZSI8P3ht'@;
put 'bCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFsQm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+'@;
put 'IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9vayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6cGUuVGFyZ2V0PUZbIiFpZCJdW3Z0LmlkXS5UYXJnZXQscGUuTWlzc2luZz1GWyIhaWQiXVt2dC5pZF0uVHlwZT09X28uWE1JU1M7YnJlYWs7'@;
put 'Y2FzZSI8c2hlZXROYW1lIjpwZS5TaGVldE5hbWVzLnB1c2gobXIoQmkodnQudmFsKSkpO2JyZWFrO2Nhc2UiPHNoZWV0RGF0YSI6TWU9e30scGUuU2hlZXRzW3BlLlNoZWV0TmFtZXNbdnQuc2hlZXRJZF1dPUxyKHZ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOk1lO2JyZWFrO2Nhc2UiPC9z'@;
put 'aGVldERhdGE+IjpxZS5lLmM+PTAmJihNZVsiIXJlZiJdPUFpKHFlKSk7YnJlYWs7Y2FzZSI8cm93IjpjYXNlIjxyb3c+Ijp2dC5yP2plPXBhcnNlSW50KHZ0LnIsMTApLTE6amUrKyxZZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6dnQucj9ZZT1ocyh2dC5yKS5jOisrWWUs'@;
put 'aXQudD12dC50fHwibiIsInN0ciI9PWl0LnQmJihpdC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpxZS5lLnI8amUmJihxZS5lLnI9amUpLHFlLmUuYzxZZSYmKHFlLmUuYz1ZZSksTWVbRGkoe3I6amUsYzpZZX0pXT1pdCxpdD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6aHQ9a3Qu'@;
put 'bGVuZ3RoK3V0O2JyZWFrO2Nhc2UiPC92PiI6dmFyIFB0PW1yKE0uc2xpY2UoaHQsdXQpKTtpdC52PSJuIj09aXQudD9wYXJzZUZsb2F0KFB0KTpQdDticmVhaztjYXNlIjx2Lz4iOml0LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6dmU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWRO'@;
put 'YW1lcz4iOnZlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXZlJiZpZS5XVEYpdGhyb3cidW5yZWNvZ25pemVkICIrdnRbMF0rIiBpbiBleHRlcm5hbCBsaW5rIn19KSxwZX0oTSxGLDAsSil9KEV0KE0samMob3IpKSxUbixvcixGKX1jYXRjaHt9fSksWWU9ZnVuY3Rpb24ganYoTSxGLE8pe3JldHVy'@;
put 'biIuYmluIj09PUYuc2xpY2UoLTQpP2Z1bmN0aW9uIGxPKE0sRil7dmFyIE89e0FwcFZlcnNpb246e30sV0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sSj1bXSxpZT0hMTtGfHwoRj17fSksRi5iaWZmPTEyO3ZhciBwZT1bXSx5ZT1bW11dO3JldHVy'@;
put 'biB5ZS5TaGVldE5hbWVzPVtdLHllLlhUST1bXSx2NFsxNl09e246IkJydEZSVEFyY2hJRCQiLGY6c099LHRhKE0sZnVuY3Rpb24oTWUsamUsWWUpe3N3aXRjaChZZSl7Y2FzZSAxNTY6eWUuU2hlZXROYW1lcy5wdXNoKE1lLm5hbWUpLE8uU2hlZXRzLnB1c2goTWUpO2JyZWFrO2Nhc2UgMTUz'@;
put 'Ok8uV0JQcm9wcz1NZTticmVhaztjYXNlIDM5Om51bGwhPU1lLlNoZWV0JiYoRi5TSUQ9TWUuU2hlZXQpLE1lLlJlZj1udShNZS5QdGcsbnVsbCxudWxsLHllLEYpLGRlbGV0ZSBGLlNJRCxkZWxldGUgTWUuUHRnLHBlLnB1c2goTWUpO2JyZWFrO2Nhc2UgMTAzNjpjYXNlIDM2MTpjYXNlIDIw'@;
put 'NzE6Y2FzZSAxNTg6Y2FzZSAxNDM6Y2FzZSA2NjQ6Y2FzZSAzNTM6Y2FzZSAzMDcyOmNhc2UgMzA3MzpjYXNlIDUzNDpjYXNlIDY3NzpjYXNlIDE1NzpjYXNlIDYxMDpjYXNlIDIwNTA6Y2FzZSAxNTU6Y2FzZSA1NDg6Y2FzZSA2NzY6Y2FzZSAxMjg6Y2FzZSA2NjU6Y2FzZSAyMTI4OmNhc2Ug'@;
put 'MjEyNTpjYXNlIDU0OTpjYXNlIDIwNTM6Y2FzZSA1OTY6Y2FzZSAyMDc2OmNhc2UgMjA3NTpjYXNlIDIwODI6Y2FzZSAzOTc6Y2FzZSAxNTQ6Y2FzZSAxMTE3OmNhc2UgNTUzOmNhc2UgMjA5MTpjYXNlIDE2OmJyZWFrO2Nhc2UgMzU3OmNhc2UgMzU4OmNhc2UgMzU1OmNhc2UgNjY3OnllWzBd'@;
put 'Lmxlbmd0aD95ZS5wdXNoKFtZZSxNZV0pOnllWzBdPVtZZSxNZV0seWVbeWUubGVuZ3RoLTFdLlhUST1bXTticmVhaztjYXNlIDM2MjowPT09eWUubGVuZ3RoJiYoeWVbMF09W10seWVbMF0uWFRJPVtdKSx5ZVt5ZS5sZW5ndGgtMV0uWFRJPXllW3llLmxlbmd0aC0xXS5YVEkuY29uY2F0KE1l'@;
put 'KSx5ZS5YVEk9eWUuWFRJLmNvbmNhdChNZSk7YnJlYWs7Y2FzZSAzNTpjYXNlIDM3OkoucHVzaChqZSksaWU9ITA7YnJlYWs7Y2FzZSAzNjpjYXNlIDM4OkoucG9wKCksaWU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChqZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKGplfHwiIikuaW5k'@;
put 'ZXhPZigiRW5kIik+MCkmJighaWV8fEYuV1RGJiYiQnJ0QUNCZWdpbiIhPUpbSi5sZW5ndGgtMV0mJiJCcnRGUlRCZWdpbiIhPUpbSi5sZW5ndGgtMV0pKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCByZWNvcmQgIitZZSsiICIramUpfX0sRiksXzgoTyksTy5OYW1lcz1wZSxPLnN1cGJv'@;
put 'b2tzPXllLE99KE0sTyk6ZnVuY3Rpb24gelMoTSxGKXtpZighTSl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIGZpbGUiKTt2YXIgTz17QXBwVmVyc2lvbjp7fSxXQlByb3BzOnt9LFdCVmlldzpbXSxTaGVldHM6W10sQ2FsY1ByOnt9LE5hbWVzOltdLEV4dGVybjpbXSx4bWxuczoi'@;
put 'In0sSj0hMSxpZT0ieG1sbnMiLHBlPXt9LHllPTA7aWYoTS5yZXBsYWNlKCR0LGZ1bmN0aW9uKE1lLGplKXt2YXIgWWU9bG4oTWUpO3N3aXRjaChubihZZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPC93b3JrYm9vaz4iOmNhc2UiPGZpbGVWZXJzaW9uLz4iOmNhc2UiPC9maWxlVmVyc2lvbj4i'@;
put 'OmNhc2UiPGZpbGVTaGFyaW5nLz4iOmNhc2UiPC93b3JrYm9va1ByPiI6Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uLz4iOmNhc2UiPGJvb2tWaWV3cyI6Y2FzZSI8Ym9va1ZpZXdzPiI6Y2FzZSI8L2Jvb2tWaWV3cz4iOmNhc2UiPC93b3JrYm9va1ZpZXc+IjpjYXNlIjxzaGVldHMiOmNhc2Ui'@;
put 'PHNoZWV0cz4iOmNhc2UiPC9zaGVldHM+IjpjYXNlIjwvc2hlZXQ+IjpjYXNlIjxmdW5jdGlvbkdyb3VwcyI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMvPiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cCI6Y2FzZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzIjpjYXNlIjwvZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2Fz'@;
put 'ZSI8ZXh0ZXJuYWxSZWZlcmVuY2VzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzLz4iOmNhc2UiPGRlZmluZWROYW1lLz4iOmNhc2UiPC9jYWxjUHI+IjpjYXNlIjxvbGVTaXplIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8L2N1c3RvbVdvcmtib29rVmlld3M+IjpjYXNlIjxjdXN0'@;
put 'b21Xb3JrYm9va1ZpZXdzIjpjYXNlIjxjdXN0b21Xb3JrYm9va1ZpZXciOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXc+IjpjYXNlIjxwaXZvdENhY2hlcz4iOmNhc2UiPC9waXZvdENhY2hlcz4iOmNhc2UiPHBpdm90Q2FjaGVzIjpjYXNlIjxwaXZvdENhY2hlIjpjYXNlIjxzbWFydFRhZ1By'@;
put 'IjpjYXNlIjxzbWFydFRhZ1ByLz4iOmNhc2UiPHNtYXJ0VGFnVHlwZXMiOmNhc2UiPHNtYXJ0VGFnVHlwZXM+IjpjYXNlIjwvc21hcnRUYWdUeXBlcz4iOmNhc2UiPHNtYXJ0VGFnVHlwZSI6Y2FzZSI8d2ViUHVibGlzaGluZyI6Y2FzZSI8d2ViUHVibGlzaGluZy8+IjpjYXNlIjxmaWxlUmVj'@;
put 'b3ZlcnlQciI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIvPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdHM+IjpjYXNlIjx3ZWJQdWJsaXNoT2JqZWN0cyI6Y2FzZSI8L3dlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8d2ViUHVibGlzaE9iamVjdCI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+Ijpj'@;
put 'YXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmNhc2UiPEFyY2hJRCI6Y2FzZSI8cmV2aXNpb25QdHIiOmJyZWFrO2Nhc2UiPHdvcmtib29rIjpNZS5tYXRjaChZUykmJihpZT0ieG1sbnMiK01lLm1hdGNoKC88KFx3Kyk6LylbMV0pLE8ueG1sbnM9WWVbaWVdO2JyZWFrO2Nhc2UiPGZp'@;
put 'bGVWZXJzaW9uIjpkZWxldGUgWWVbMF0sTy5BcHBWZXJzaW9uPVllO2JyZWFrO2Nhc2UiPGZpbGVTaGFyaW5nIjpPLk1vZGlmeT17dXNlcjpZZS51c2VyTmFtZSx3YXJuOkxyKFllLnJlYWRPbmx5UmVjb21tZW5kZWR8fCJmYWxzZSIpfSwoWWUuYWxnb3JpdGhtTmFtZXx8WWUuaGFzaFZhbHVl'@;
put 'fHxZZS5zYWx0VmFsdWV8fFllLnNwaW5Db3VudCkmJihPLk1vZGlmeS5lbmNyeXB0aW9uPXthbGdvOlllLmFsZ29yaXRobU5hbWUsaGFzaDpZZS5oYXNoVmFsdWUsc2FsdDpZZS5zYWx0VmFsdWUsc3BpbjorWWUuc3BpbkNvdW50fHwxZTV9KTticmVhaztjYXNlIjx3b3JrYm9va1ByIjpjYXNl'@;
put 'Ijx3b3JrYm9va1ByLz4iOk5kLmZvckVhY2goZnVuY3Rpb24oaXQpe2lmKG51bGwhPVllW2l0WzBdXSlzd2l0Y2goaXRbMl0pe2Nhc2UiYm9vbCI6Ty5XQlByb3BzW2l0WzBdXT1McihZZVtpdFswXV0pO2JyZWFrO2Nhc2UiaW50IjpPLldCUHJvcHNbaXRbMF1dPXBhcnNlSW50KFllW2l0WzBd'@;
put 'XSwxMCk7YnJlYWs7ZGVmYXVsdDpPLldCUHJvcHNbaXRbMF1dPVllW2l0WzBdXX19KSxZZS5jb2RlTmFtZSYmKE8uV0JQcm9wcy5Db2RlTmFtZT1CaShZZS5jb2RlTmFtZSkpO2JyZWFrO2Nhc2UiPHdvcmtib29rUHJvdGVjdGlvbiI6dmFyIHFlPU8uUHJvdGVjdGlvbnx8e307cWUubG9ja1N0'@;
put 'cnVjdHVyZT1McihZZS5sb2NrU3RydWN0dXJlfHwiZmFsc2UiKSxxZS5sb2NrV2luZG93cz1McihZZS5sb2NrV2luZG93c3x8ImZhbHNlIiksWWUud29ya2Jvb2tBbGdvcml0aG1OYW1lJiYocWUuZW5jcnlwdGlvbj17YWxnbzpZZS53b3JrYm9va0FsZ29yaXRobU5hbWUsaGFzaDpZZS53b3Jr'@;
put 'Ym9va0hhc2hWYWx1ZSxzYWx0OlllLndvcmtib29rU2FsdFZhbHVlLHNwaW46K1llLndvcmtib29rU3BpbkNvdW50fHwxZTV9KSxPLlByb3RlY3Rpb249cWU7YnJlYWs7Y2FzZSI8d29ya2Jvb2tWaWV3IjpjYXNlIjx3b3JrYm9va1ZpZXcvPiI6ZGVsZXRlIFllWzBdLE8uV0JWaWV3LnB1c2go'@;
put 'WWUpO2JyZWFrO2Nhc2UiPHNoZWV0Ijpzd2l0Y2goWWUuc3RhdGUpe2Nhc2UiaGlkZGVuIjpZZS5IaWRkZW49MTticmVhaztjYXNlInZlcnlIaWRkZW4iOlllLkhpZGRlbj0yO2JyZWFrO2RlZmF1bHQ6WWUuSGlkZGVuPTB9ZGVsZXRlIFllLnN0YXRlLFllLm5hbWU9bXIoQmkoWWUubmFtZSkp'@;
put 'LGRlbGV0ZSBZZVswXSxPLlNoZWV0cy5wdXNoKFllKTticmVhaztjYXNlIjxleHRlcm5hbFJlZmVyZW5jZSI6Ty5FeHRlcm4ucHVzaChZZS5pZCk7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6Y2FzZSI8ZGVmaW5lZE5hbWVzIjpjYXNlIjxleHQiOmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQi'@;
put 'OmNhc2UiPEFsdGVybmF0ZUNvbnRlbnQ+IjpKPSEwO2JyZWFrO2Nhc2UiPC9kZWZpbmVkTmFtZXM+IjpjYXNlIjwvZXh0PiI6Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjpKPSExO2JyZWFrO2Nhc2UiPGRlZmluZWROYW1lIjoocGU9e30pLk5hbWU9QmkoWWUubmFtZSksWWUuY29tbWVudCYm'@;
put 'KHBlLkNvbW1lbnQ9WWUuY29tbWVudCksWWUubG9jYWxTaGVldElkJiYocGUuU2hlZXQ9K1llLmxvY2FsU2hlZXRJZCksTHIoWWUuaGlkZGVufHwiMCIpJiYocGUuSGlkZGVuPSEwKSx5ZT1qZStNZS5sZW5ndGg7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lPiI6cGUuUmVmPW1yKEJpKE0uc2xp'@;
put 'Y2UoeWUsamUpKSksTy5OYW1lcy5wdXNoKHBlKTticmVhaztjYXNlIjxjYWxjUHIiOmNhc2UiPGNhbGNQci8+IjpkZWxldGUgWWVbMF0sTy5DYWxjUHI9WWU7YnJlYWs7ZGVmYXVsdDppZighSiYmRi5XVEYpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitZZVswXSsiIGluIHdvcmti'@;
put 'b29rIil9cmV0dXJuIE1lfSksLTE9PT1UaS5tYWluLmluZGV4T2YoTy54bWxucykpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIE5hbWVzcGFjZTogIitPLnhtbG5zKTtyZXR1cm4gXzgoTyksT30oTSxPKX0oRXQoTSxqYyhKLndvcmtib29rc1swXSkpLEoud29ya2Jvb2tzWzBdLEYpLHFlPXt9'@;
put 'LGl0PSIiO0ouY29yZXByb3BzLmxlbmd0aCYmKChpdD1FdChNLGpjKEouY29yZXByb3BzWzBdKSwhMCkpJiYocWU9RnAoaXQpKSwwIT09Si5leHRwcm9wcy5sZW5ndGgmJihpdD1FdChNLGpjKEouZXh0cHJvcHNbMF0pLCEwKSkmJmZ1bmN0aW9uIEM2KE0sRixPKXt2YXIgSj17fTtGfHwoRj17'@;
put 'fSksTT1CaShNKSxfMC5mb3JFYWNoKGZ1bmN0aW9uKGllKXt2YXIgcGU9KE0ubWF0Y2godWMoaWVbMF0pKXx8W10pWzFdO3N3aXRjaChpZVsyXSl7Y2FzZSJzdHJpbmciOnBlJiYoRltpZVsxXV09bXIocGUpKTticmVhaztjYXNlImJvb2wiOkZbaWVbMV1dPSJ0cnVlIj09PXBlO2JyZWFrO2Nh'@;
put 'c2UicmF3Ijp2YXIgeWU9TS5tYXRjaChuZXcgUmVnRXhwKCI8IitpZVswXSsiW14+XSo+KFtcXHNcXFNdKj8pPC8iK2llWzBdKyI+IikpO3llJiZ5ZS5sZW5ndGg+MCYmKEpbaWVbMV1dPXllWzFdKX19KSxKLkhlYWRpbmdQYWlycyYmSi5UaXRsZXNPZlBhcnRzJiZraChKLkhlYWRpbmdQYWly'@;
put 'cyxKLlRpdGxlc09mUGFydHMsRixPKX0oaXQscWUsRikpO3ZhciBodD17fTsoIUYuYm9va1NoZWV0c3x8Ri5ib29rUHJvcHMpJiYwIT09Si5jdXN0cHJvcHMubGVuZ3RoJiYoaXQ9UXQoTSxqYyhKLmN1c3Rwcm9wc1swXSksITApKSYmKGh0PWZ1bmN0aW9uIE5wKE0sRil7dmFyIE89e30sSj0i'@;
put 'IixpZT1NLm1hdGNoKHIzKTtpZihpZSlmb3IodmFyIHBlPTA7cGUhPWllLmxlbmd0aDsrK3BlKXt2YXIgeWU9aWVbcGVdLHZlPWxuKHllKTtzd2l0Y2godmVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPFByb3BlcnRpZXMiOmJyZWFrO2Nhc2UiPHByb3BlcnR5IjpKPW1yKHZlLm5hbWUpO2JyZWFr'@;
put 'O2Nhc2UiPC9wcm9wZXJ0eT4iOko9bnVsbDticmVhaztkZWZhdWx0OmlmKDA9PT15ZS5pbmRleE9mKCI8dnQ6Iikpe3ZhciBNZT15ZS5zcGxpdCgiPiIpLGplPU1lWzBdLnNsaWNlKDQpLFllPU1lWzFdO3N3aXRjaChqZSl7Y2FzZSJscHN0ciI6Y2FzZSJic3RyIjpjYXNlImxwd3N0ciI6Y2Fz'@;
put 'ZSJjeSI6Y2FzZSJlcnJvciI6T1tKXT1tcihZZSk7YnJlYWs7Y2FzZSJib29sIjpPW0pdPUxyKFllKTticmVhaztjYXNlImkxIjpjYXNlImkyIjpjYXNlImk0IjpjYXNlImk4IjpjYXNlImludCI6Y2FzZSJ1aW50IjpPW0pdPXBhcnNlSW50KFllLDEwKTticmVhaztjYXNlInI0IjpjYXNlInI4'@;
put 'IjpjYXNlImRlY2ltYWwiOk9bSl09cGFyc2VGbG9hdChZZSk7YnJlYWs7Y2FzZSJmaWxldGltZSI6Y2FzZSJkYXRlIjpPW0pdPUZ0KFllKTticmVhaztkZWZhdWx0OmlmKCIvIj09amUuc2xpY2UoLTEpKWJyZWFrO0YuV1RGJiZ0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybigiVW5l'@;
put 'eHBlY3RlZCIseWUsamUsTWUpfX1lbHNlIGlmKCI8LyIhPT15ZS5zbGljZSgwLDIpJiZGLldURil0aHJvdyBuZXcgRXJyb3IoeWUpfX1yZXR1cm4gT30oaXQsRikpO3ZhciBrdD17fTtpZigoRi5ib29rU2hlZXRzfHxGLmJvb2tQcm9wcykmJihZZS5TaGVldHM/cGU9WWUuU2hlZXRzLm1hcChm'@;
put 'dW5jdGlvbihUbil7cmV0dXJuIFRuLm5hbWV9KTpxZS5Xb3Jrc2hlZXRzJiZxZS5TaGVldE5hbWVzLmxlbmd0aD4wJiYocGU9cWUuU2hlZXROYW1lcyksRi5ib29rUHJvcHMmJihrdC5Qcm9wcz1xZSxrdC5DdXN0cHJvcHM9aHQpLEYuYm9va1NoZWV0cyYmdHlwZW9mIHBlPCJ1IiYmKGt0LlNo'@;
put 'ZWV0TmFtZXM9cGUpLEYuYm9va1NoZWV0cz9rdC5TaGVldE5hbWVzOkYuYm9va1Byb3BzKSlyZXR1cm4ga3Q7cGU9e307dmFyIHV0PXt9O0YuYm9va0RlcHMmJkouY2FsY2NoYWluJiYodXQ9ZnVuY3Rpb24gcE8oTSxGLE8pe3JldHVybiIuYmluIj09PUYuc2xpY2UoLTQpP2Z1bmN0aW9uIHRJ'@;
put 'KE0sRixPKXt2YXIgSj1bXTtyZXR1cm4gdGEoTSxmdW5jdGlvbih5ZSx2ZSxNZSl7aWYoNjM9PT1NZSlKLnB1c2goeWUpO2Vsc2UgaWYoISgodmV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjB8fCh2ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBy'@;
put 'ZWNvcmQgIitNZSsiICIrdmUpfSksSn0oTSk6ZnVuY3Rpb24gUF8oTSl7dmFyIEY9W107aWYoIU0pcmV0dXJuIEY7dmFyIE89MTtyZXR1cm4oTS5tYXRjaCgkdCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEope3ZhciBpZT1sbihKKTtzd2l0Y2goaWVbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNh'@;
put 'bGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSBpZVswXSxpZS5pP089aWUuaTppZS5pPU8sRi5wdXNoKGllKX19KSxGfShNKX0oRXQoTSxqYyhKLmNhbGNjaGFpbikpLEouY2FsY2NoYWluKSk7dmFyIER0LEF0LHZ0PTAs'@;
put 'UHQ9e30sWnQ9WWUuU2hlZXRzO3FlLldvcmtzaGVldHM9WnQubGVuZ3RoLHFlLlNoZWV0TmFtZXM9W107Zm9yKHZhciBnbj0wO2duIT1adC5sZW5ndGg7KytnbilxZS5TaGVldE5hbWVzW2duXT1adFtnbl0ubmFtZTt2YXIgcW49aWU/ImJpbiI6InhtbCIsdW49Si53b3JrYm9va3NbMF0ubGFz'@;
put 'dEluZGV4T2YoIi8iKSxKbj0oSi53b3JrYm9va3NbMF0uc2xpY2UoMCx1bisxKSsiX3JlbHMvIitKLndvcmtib29rc1swXS5zbGljZSh1bisxKSsiLnJlbHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtwbihNLEpuKXx8KEpuPSJ4bC9fcmVscy93b3JrYm9vay4iK3FuKyIucmVscyIpO3ZhciBZbj1H'@;
put 'MChRdChNLEpuLCEwKSxKbiksTG49WW4sdHI9W107WW4mJihZZSYmWWUuRXh0ZXJuJiZZZS5FeHRlcm4ubGVuZ3RoJiZZZS5FeHRlcm4uZm9yRWFjaChmdW5jdGlvbihvcixUbil7dmFyIFNpPSgiL3hsLyIrWW5bIiFpZCJdW29yXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSxa'@;
put 'cj1KLmxpbmtzLmluZGV4T2YoU2kpO1pyPi0xJiYodHJbVG5dPWplW1pyXSl9KSxZZSYmZGVsZXRlIFllLkV4dGVybiksWW4mJihZbj1mdW5jdGlvbiBreChNLEYpe2lmKCFNKXJldHVybiAwO3RyeXtNPUYubWFwKGZ1bmN0aW9uKEope3JldHVybiBKLmlkfHwoSi5pZD1KLnN0clJlbElEKSxb'@;
put 'Si5uYW1lLE1bIiFpZCJdW0ouaWRdLlRhcmdldCxidChNWyIhaWQiXVtKLmlkXS5UeXBlKV19KX1jYXRjaHtyZXR1cm4gbnVsbH1yZXR1cm4gTSYmMCE9PU0ubGVuZ3RoP006bnVsbH0oWW4sWWUuU2hlZXRzKSk7dmFyIHJyPXBuKE0sInhsL3dvcmtzaGVldHMvc2hlZXQueG1sIik/MTowLFVu'@;
put 'PVtdLFhyPVtdO2U6Zm9yKHZ0PTA7dnQhPXFlLldvcmtzaGVldHM7Kyt2dCl7dmFyIHBpPSJzaGVldCI7aWYoWW4mJlluW3Z0XT8oRHQ9InhsLyIrWW5bdnRdWzFdLnJlcGxhY2UoL1tcL10/eGxcLy8sIiIpLHBuKE0sRHQpfHwoRHQ9WW5bdnRdWzFdKSxwbihNLER0KXx8KER0PUpuLnJlcGxh'@;
put 'Y2UoL19yZWxzXC8uKiQvLCIiKStZblt2dF1bMV0pLHBpPVluW3Z0XVsyXSk6RHQ9KER0PSJ4bC93b3Jrc2hlZXRzL3NoZWV0IisodnQrMS1ycikrIi4iK3FuKS5yZXBsYWNlKC9zaGVldDBcLi8sInNoZWV0LiIpLEF0PUR0LnJlcGxhY2UoL14oLiopKFwvKShbXlwvXSopJC8sIiQxL19yZWxz'@;
put 'LyQzLnJlbHMiKSxVbi5wdXNoKER0KSxGJiZudWxsIT1GLnNoZWV0cylzd2l0Y2godHlwZW9mIEYuc2hlZXRzKXtjYXNlIm51bWJlciI6aWYodnQhPUYuc2hlZXRzKWNvbnRpbnVlIGU7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKHFlLlNoZWV0TmFtZXNbdnRdLnRvTG93ZXJDYXNlKCkhPUYuc2hl'@;
put 'ZXRzLnRvTG93ZXJDYXNlKCkpY29udGludWUgZTticmVhaztkZWZhdWx0OmlmKEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoRi5zaGVldHMpKXtmb3IodmFyIE9pPTAsTmk9MDtOaSE9Ri5zaGVldHMubGVuZ3RoOysrTmkpIm51bWJlciI9PXR5cGVvZiBGLnNoZWV0c1tOaV0mJkYuc2hl'@;
put 'ZXRzW05pXT09dnQmJihPaT0xKSwic3RyaW5nIj09dHlwZW9mIEYuc2hlZXRzW05pXSYmRi5zaGVldHNbTmldLnRvTG93ZXJDYXNlKCk9PXFlLlNoZWV0TmFtZXNbdnRdLnRvTG93ZXJDYXNlKCkmJihPaT0xKTtpZighT2kpY29udGludWUgZX19aWYoIUYuc2tpcFBhcnNlKXt2YXIgZGk9VHgo'@;
put 'TSxEdCxBdCxxZS5TaGVldE5hbWVzW3Z0XSx2dCxQdCxwZSxwaSxGLFllLHZlLE1lKTtkaSYmZGlbIiFMRFAiXSYmKFhyW3Z0XT1kaVsiIUxEUCJdLGRlbGV0ZSBkaVsiIUxEUCJdKX19aWYodHlwZW9mIHBhcnNlX3NoZWV0X3Bpdm90PCJ1Iilmb3IodnQ9MDt2dDxtbC5sZW5ndGg7Kyt2dClw'@;
put 'YXJzZV9zaGVldF9waXZvdC5hcHBseShudWxsLG1sW3Z0XSk7aWYoa3Q9e0RpcmVjdG9yeTpKLFdvcmtib29rOlllLFByb3BzOnFlLEN1c3Rwcm9wczpodCxEZXBzOnV0LFNoZWV0czpwZSxTaGVldE5hbWVzOnFlLlNoZWV0TmFtZXMsU3RyaW5nczpkNSxTdHlsZXM6TWUsVGhlbWVzOnZlLFNT'@;
put 'RjpDLmdldF90YWJsZSgpfSwhRi5za2lwUGFyc2Upe2lmKGZ1bmN0aW9uIFJfKE0peyFNfHwhTS5Xb3JrYm9va3x8IU0uV29ya2Jvb2suTmFtZXN8fE0uV29ya2Jvb2suTmFtZXMuZm9yRWFjaChmdW5jdGlvbihGKXtpZihGLk5hbWUmJiJfeGxubS4iPT1GLk5hbWUuc2xpY2UoMCw2KSYmKCJf'@;
put 'eGxubS5QcmludF9BcmVhIj09Ri5OYW1lfHwiX3hsbm0uUHJpbnRfVGl0bGVzIj09Ri5OYW1lKSl7dmFyIE89TS5TaGVldHNbTS5TaGVldE5hbWVzW0YuU2hlZXRdXTtpZihPKXtPWyIhcHJpbnQiXXx8KE9bIiFwcmludCJdPXt9KSxPWyIhcHJpbnQiXS5wcm9wc3x8KE9bIiFwcmludCJdLnBy'@;
put 'b3BzPXt9KTt2YXIgSj1PWyIhcHJpbnQiXSxpZT1GLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PUYuTmFtZSl7aWUuaW5kZXhPZigiISIpPi0xJiYoaWU9aWUuc2xpY2UoaWUuaW5kZXhPZigiISIpKzEpKTt2YXIgcGU9Ym8oaWU9aWUucmVwbGFjZSgvWyRdL2csIiIpKTtKLmFyZWE9cGV9'@;
put 'ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1GLk5hbWUmJihKLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxpZS5zcGxpdCgiLCIpLmZvckVhY2goZnVuY3Rpb24oeWUpe3ZhciBNZT1Icyh5ZS5zbGljZSh5ZS5pbmRleE9mKCIhIikrMSkucmVwbGFjZSgvWyRdL2csIiIp'@;
put 'KTtNZS5zLmM+LTEmJihKLnRpdGxlcy5zLmM9TWUucy5jKSxNZS5lLmM+LTEmJihKLnRpdGxlcy5lLmM9TWUuZS5jKSxNZS5zLnI+LTEmJihKLnRpdGxlcy5zLnI9TWUucy5yKSxNZS5lLnI+LTEmJihKLnRpdGxlcy5lLnI9TWUuZS5yKX0pKX19fSl9KGt0KSxGJiZGLmJvb2tGaWxlcyYmKGt0'@;
put 'LmtleXM9TyxrdC5maWxlcz1NLmZpbGVzKSxGJiZGLmJvb2tWQkEmJihKLnZiYS5sZW5ndGg+MD9rdC52YmFyYXc9RXQoTSxqYyhKLnZiYVswXSksITApOkouZGVmYXVsdHMmJkouZGVmYXVsdHMuYmluPT09Q0MmJihrdC52YmFyYXc9RXQoTSwieGwvdmJhUHJvamVjdC5iaW4iLCEwKSkpLExu'@;
put 'JiZMblsiIWlkIl0pe2Zvcih2YXIgX3I9W10sQW49MTtBbjw9MTAyNDsrK0FuKUxuWyIhaWQiXVsicklkIitBbl0mJkxuWyIhaWQiXVsicklkIitBbl0uVHlwZSYmL2N1c3RvbVhtbCQvLnRlc3QoTG5bIiFpZCJdWyJySWQiK0FuXS5UeXBlKSYmX3IucHVzaChlbihMblsiIWlkIl1bInJJZCIr'@;
put 'QW5dLlRhcmdldCxKLndvcmtib29rc1swXSkpO19yLmxlbmd0aD4wJiYoa3QuQ3VzdG9tWE1MPVtdLF9yLmZvckVhY2goZnVuY3Rpb24ob3Ipe3ZhciBUbj17ZGF0YTpRdChNLGpjKG9yKSl9LENyPWtyKG9yKTt0cnl7dmFyIFNpPUcwKFF0KE0samMoQ3IpLCEwKSxDcik7aWYoU2kpZm9yKHZh'@;
put 'ciBacj0xO1pyPD0xMDI0OysrWnIpU2lbIiFpZCJdWyJySWQiK1pyXSYmU2lbIiFpZCJdWyJySWQiK1pyXS5UeXBlJiYvY3VzdG9tWG1sUHJvcHMkLy50ZXN0KFNpWyIhaWQiXVsicklkIitacl0uVHlwZSkmJihUbi5wcm9wcz1RdChNLGpjKGVuKFNpWyIhaWQiXVsicklkIitacl0uVGFyZ2V0'@;
put 'LG9yKSkpKX1jYXRjaHt9a3QuQ3VzdG9tWE1MLnB1c2goVG4pfSkpfXZhciBNcj1UdChNLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLCEwKTtNciYmKGt0Lm1vZGVsPU1yKSxKLmNvbm4mJihrdC5jb25uPUV0KE0samMoSi5jb25uKSwhMCkpLHRyLmxlbmd0aCYmKGt0LkV4dGVybmFsV0I9dHIpLFll'@;
put 'JiYoWWUuUFBJPUZoKX1yZXR1cm4gRi50ZW1wbGF0ZSYmKGt0Ll93c3BhdGhzPVVuLGt0Ll9zdHlwYXRoPWpjKEouc3R5bGV8fCIiKSxrdC5fd2JwYXRoPWpjKEoud29ya2Jvb2tzWzBdfHwieGwvd29ya2Jvb2sueG1sIiksa3QuX3ZtbHBhdGhzPVhyLGt0Ll93YnJlbHNwYXRoPUpuLGt0Ll9j'@;
put 'dD1RdChNLCJbQ29udGVudF9UeXBlc10ueG1sIiksa3QuZmlsZXM9TS5maWxlcyxXbChrdCxNLEYpKSxrdH1mdW5jdGlvbiB3NChNLEYpe3ZhciBPPUZ8fHt9O08ucGFzc3dvcmR8fChPLnBhc3N3b3JkPSJWZWx2ZXRTd2VhdHNob3AiKTt2YXIgSj0iV29ya2Jvb2siLGllPUxlLmZpbmQoTSxK'@;
put 'KTt0cnl7aWYoIShpZT1MZS5maW5kKE0sSj0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFpZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0opO2lmKGZ1bmN0aW9uIF9MKE0pe3ZhciBGPXt9O0YuaWQ9TS5yZWFkX3NoaWZ0KDAs'@;
put 'ImxwcDQiKSxGLlI9YjAoTSw0KSxGLlU9YjAoTSw0KSxGLlc9YjAoTSw0KX0oaWUuY29udGVudCksIShpZT1MZS5maW5kKE0sSj0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1hcCIpKXx8IWllLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5n'@;
put 'ICIrSik7dmFyIHBlPWZ1bmN0aW9uIHZMKE0pe3ZhciBGPVtdO00ubCs9NDtmb3IodmFyIE89TS5yZWFkX3NoaWZ0KDQpO08tLSA+MDspRi5wdXNoKGdfKE0pKTtyZXR1cm4gRn0oaWUuY29udGVudCk7aWYoMSE9PXBlLmxlbmd0aHx8MSE9PXBlWzBdLmNvbXBzLmxlbmd0aHx8MCE9PXBlWzBd'@;
put 'LmNvbXBzWzBdLnR8fCJTdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIiE9PXBlWzBdLm5hbWV8fCJFbmNyeXB0ZWRQYWNrYWdlIiE9PXBlWzBdLmNvbXBzWzBdLnYpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitKKTtpZighKGllPUxlLmZpbmQoTSxKPSIv'@;
put 'IURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhaWUuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitKKTt2YXIgeWU9ZnVuY3Rpb24geUwoTSl7dmFyIEY9W107TS5sKz00O2Zvcih2'@;
put 'YXIgTz1NLnJlYWRfc2hpZnQoNCk7Ty0tID4wOylGLnB1c2goTS5yZWFkX3NoaWZ0KDAsImxwcDQiKSk7cmV0dXJuIEZ9KGllLmNvbnRlbnQpO2lmKDEhPXllLmxlbmd0aHx8IlN0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0iIT15ZVswXSl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5'@;
put 'cHRlZCBmaWxlIGJhZCAiK0opO2lmKCEoaWU9TGUuZmluZChNLEo9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8fCFpZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2lu'@;
put 'ZyAiK0opOyFmdW5jdGlvbiBPWihNKXt2YXIgRj1mdW5jdGlvbiBiTChNKXt2YXIgRj17fTtyZXR1cm4gTS5yZWFkX3NoaWZ0KDQpLE0ubCs9NCxGLmlkPU0ucmVhZF9zaGlmdCgwLCJscHA0IiksRi5uYW1lPU0ucmVhZF9zaGlmdCgwLCJscHA0IiksRi5SPWIwKE0sNCksRi5VPWIwKE0sNCks'@;
put 'Ri5XPWIwKE0sNCksRn0oTSk7aWYoRi5lbmFtZT1NLnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxGLmJsa3N6PU0ucmVhZF9zaGlmdCg0KSxGLmNtb2RlPU0ucmVhZF9zaGlmdCg0KSw0IT1NLnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJu'@;
put 'IEZ9KGllLmNvbnRlbnQpfWNhdGNoe31pZighKGllPUxlLmZpbmQoTSxKPSIvRW5jcnlwdGlvbkluZm8iKSl8fCFpZS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgbWlzc2luZyAiK0opO3ZhciB2ZT1mdW5jdGlvbiBRbShNKXt2YXIgRj1iMChNKTtz'@;
put 'd2l0Y2goRi5NaW5vcil7Y2FzZSAyOnJldHVybltGLk1pbm9yLE1MKE0pXTtjYXNlIDM6cmV0dXJuW0YuTWlub3IsZTUoKV07Y2FzZSA0OnJldHVybltGLk1pbm9yLF9fKE0pXX10aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAi'@;
put 'K0YuTWlub3IpfShpZS5jb250ZW50KTtpZighKGllPUxlLmZpbmQoTSxKPSIvRW5jcnlwdGVkUGFja2FnZSIpKXx8IWllLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrSik7aWYoND09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIFN4KE0s'@;
put 'RixPLEope3ZhciBpZT1MZS51dGlscy5wcmVwX2Jsb2I7aWYoImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYva2V5RW5jcnlwdG9yL3Bhc3N3b3JkIiE9TS51cmkpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFQ01BLTM3NiBBZ2lsZSBVUkkgIitNLnVyaSk7'@;
put 'dmFyIHBlPU0uZW5jc1swXSx5ZT1wZS5oYXNoQWxnb3JpdGhtLHZlPSJhZXMtMjU2LWNiYyIsTWU9QnVmZmVyLmZyb20ocGUuc2FsdFZhbHVlLCJiYXNlNjQiKSxqZT1CdWZmZXIuZnJvbShNLnNhbHRWYWx1ZSwiYmFzZTY0IiksWWU9K3BlLmJsb2NrU2l6ZSxxZT0rcGUua2V5Qml0cz4+Myxp'@;
put 'dD1tYShCdWZmZXIuY29uY2F0KFtNZSxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLE8pKV0pLHllKSxodD1CdWZmZXIuYWxsb2MoNCk7aWUoaHQsMCk7Zm9yKHZhciBrdD0wO2t0PHBlLnNwaW5Db3VudDsrK2t0KWh0Lmw9MCxodC53cml0ZV9zaGlmdCg0LGt0KSxpdD1t'@;
put 'YShCdWZmZXIuY29uY2F0KFtodCxpdF0pLHllKTt2YXIgdXQ9ZnVuY3Rpb24ocnIsVW4sWHIscGkpe3ZhciBPaT1tYShCdWZmZXIuY29uY2F0KFtycixCdWZmZXIuZnJvbShbMjAsMTEwLDExLDIzMSwxNzEsMTcyLDIwOCwyMTRdKV0pLHBpKSxOaT1PaS5sZW5ndGg+PVhyP09pLnNsaWNlKDAs'@;
put 'WHIpOkJ1ZmZlci5hbGxvYyhYcik7aWYoT2kubGVuZ3RoPFhyKXtmb3IodmFyIGRpPTA7ZGk8T2kubGVuZ3RoOysrZGkpTmlbZGldPU9pW2RpXTtmb3IoO2RpPFhyOysrZGkpTmlbZGldPTU0fXJldHVybiBOaX0oaXQsMCxxZSx5ZSk7c3dpdGNoKHBlLmNpcGhlckFsZ29yaXRobSl7Y2FzZSJB'@;
put 'RVMiOmlmKCJDaGFpbmluZ01vZGVDQkMiIT1wZS5jaXBoZXJDaGFpbmluZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGNpcGhlciBjaGFpbmluZyAiK3BlLmNpcGhlckNoYWluaW5nKTt2ZT0iYWVzLSIrcGUua2V5Qml0cysiLWNiYyI7YnJlYWs7Y2FzZSJSQzIiOnZlPSJyYzIiO2Jy'@;
put 'ZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgYWxnbyAiK3BlLmNpcGhlckFsZ29yaXRobSl9TWU9ZnVuY3Rpb24odHIpe2Zvcih2YXIgcnI9QnVmZmVyLmFsbG9jKFllKSxVbj0wO1VuPFllOysrVW4pcnJbVW5dPVVuPHRyLmxlbmd0aD90cltVbl06NTQ7'@;
put 'cmV0dXJuIHJyfShNZSk7dmFyIHZ0PUJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZEtleVZhbHVlLCJiYXNlNjQiKSxQdD15NCh1dCxNZSx2ZSkudXBkYXRlKHZ0KSxEdD15NChtYShCdWZmZXIuY29uY2F0KFtpdCxCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIsNzhdKV0pLHll'@;
put 'KS5zbGljZSgwLHFlKSxNZSx2ZSkudXBkYXRlKEJ1ZmZlci5mcm9tKHBlLmVuY3J5cHRlZFZlcmlmaWVySGFzaFZhbHVlLCJiYXNlNjQiKSksQXQ9bWEoeTQobWEoQnVmZmVyLmNvbmNhdChbaXQsQnVmZmVyLmZyb20oWzI1NCwxNjcsMjEwLDExOCw1OSw3NSwxNTgsMTIxXSldKSx5ZSkuc2xp'@;
put 'Y2UoMCxxZSksTWUsdmUpLnVwZGF0ZShCdWZmZXIuZnJvbShwZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dCwiYmFzZTY0IikpLHllKSxadD0rcGUuaGFzaFNpemV8fE1hdGgubWluKER0Lmxlbmd0aCxBdC5sZW5ndGgpO2lmKDAhPUR0LnNsaWNlKDAsWnQpLmNvbXBhcmUoQXQuc2xpY2Uo'@;
put 'MCxadCkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7aWUoRiwwKTt2YXIgZ249Ri5yZWFkX3NoaWZ0KDQpO0YubCs9NDt2YXIgcW49W10sdW49QnVmZmVyLmNvbmNhdChbamUsQnVmZmVyLmFsbG9jKDQpXSk7Zm9yKGllKHVuKSxrdD0wO0YubDxGLmxlbmd0aDspdW4u'@;
put 'bD1NZS5sZW5ndGgsdW4ud3JpdGVfc2hpZnQoNCxrdCkscW4ucHVzaCh5NChQdCxtYShCdWZmZXIuZnJvbSh1bikseWUpLnNsaWNlKDAsMTYpLHZlKS51cGRhdGUoQnVmZmVyLmZyb20oRi5zbGljZShGLmwsRi5sKzQwOTYpKSkpLEYubCs9NDA5NiwrK2t0O3ZhciBZbj1CdWZmZXIuY29uY2F0'@;
put 'KHFuKS5zbGljZSgwLGduKSxMbj1YdChKKTtyZXR1cm4gTG4udHlwZT0iYnVmZmVyIixDNChZbixMbil9KHZlWzFdLGllLmNvbnRlbnQsTy5wYXNzd29yZHx8IiIsTyk7aWYoMj09dmVbMF0pcmV0dXJuIGZ1bmN0aW9uIEU4KE0sRixPLEope3ZhciBpZT1MZS51dGlscy5wcmVwX2Jsb2I7aWYo'@;
put 'IlN0ZCIhPT1NLnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBwZT1NLnYuU2FsdCx5ZT1NLnYuVmVyaWZpZXIsdmU9TS52LlZlcmlmaWVySGFzaDtpZigzNiE9TS5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRh'@;
put 'cmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgTWU9MCxqZT0iIjtzd2l0Y2goTS5oLkFsZ0lEKXtjYXNlIDI2MTI2Ok1lPTEyOCxqZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6TWU9MTk2LGplPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODpNZT0yNTYsamU9ImFl'@;
put 'cy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9TS5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoTS5oLktleVNp'@;
put 'emUhPU1lKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1NLmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlkZXJUeXBlICIrTS5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNl'@;
put 'ZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PU0uaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIrTS5oLkNTUE5hbWUpO3ZhciBxZT0iU0hBLTEiLGl0PU1lPj4zLGh0PW1hKEJ1ZmZlci5jb25j'@;
put 'YXQoW3BlLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTyldKSxxZSksa3Q9QnVmZmVyLmFsbG9jKDQpO2llKGt0LDApO2Zvcih2YXIgdXQ9MDt1dDw1ZTQ7Kyt1dClrdC5sPTAsa3Qud3JpdGVfc2hpZnQoNCx1dCksaHQ9bWEoQnVmZmVyLmNvbmNhdChba3QsaHRdKSxxZSk7a3QubD0wLGt0'@;
put 'LndyaXRlX3NoaWZ0KDQsMCk7dmFyIHFuLHVuLEpuLFluLExuLFB0PShZbj0oSm49ZnVuY3Rpb24ocnIsVW4sWHIpe2Zvcih2YXIgcGk9QnVmZmVyLmFsbG9jKDY0KSxPaT0wO09pPHBpLmxlbmd0aDsrK09pKXBpW09pXT1ycjtmb3IoT2k9MDtPaTxVbi5sZW5ndGg7KytPaSlwaVtPaV1ePVVu'@;
put 'W09pXTtyZXR1cm4gbWEocGksWHIpfSkoNTQscW49bWEoQnVmZmVyLmNvbmNhdChbaHQsa3RdKSxxZSksdW49cWUpLExuPUpuKDkyLHFuLHVuKSxCdWZmZXIuY29uY2F0KFtZbixMbl0pLnNsaWNlKDAsaXQpKTtpZih5NChQdCxCdWZmZXIuYWxsb2MoMCksamUpLnVwZGF0ZSh2ZSkuc2xpY2Uo'@;
put 'MCwyMCkuY29tcGFyZShtYSh5NChQdCxCdWZmZXIuYWxsb2MoMCksamUpLnVwZGF0ZSh5ZSkscWUpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO2llKEYsMCk7dmFyIER0PUYucmVhZF9zaGlmdCg0KTtGLmwrPTQ7dmFyIEF0PVtdO2Zvcih1dD0wO0YubDxGLmxlbmd0'@;
put 'aDspQXQucHVzaCh5NChQdCxCdWZmZXIuYWxsb2MoMCksamUpLnVwZGF0ZShGLnNsaWNlKEYubCxGLmwrNDA5NikpKSxGLmwrPTQwOTYsKyt1dDtyZXR1cm4gQzQoQnVmZmVyLmNvbmNhdChBdCkuc2xpY2UoMCxEdCksSil9KHZlWzFdLGllLmNvbnRlbnQsTy5wYXNzd29yZHx8IiIsTyk7dGhy'@;
put 'b3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBEOD1mdW5jdGlvbigpe307ZnVuY3Rpb24gTjUoTSxGKXtpZihGLnRlbXBsYXRlKXJldHVybiBEOChNLEYpO2lmKCJvZHMiPT1GLmJvb2tUeXBlKXJldHVybiB0eShNLEYpO0hoKEYmJkYuUFBJfHw5NiksTSYm'@;
put 'IU0uU1NGJiYoTS5TU0Y9Qy5nZXRfdGFibGUoKSksTSYmTS5TU0YmJihLKEMpLEMubG9hZF90YWJsZShNLlNTRiksRi5yZXZzc2Y9RGUoTS5TU0YpLEYucmV2c3NmW00uU1NGWzY1NTM1XV09MCxGLnNzZj1NLlNTRiksTS5TdHlsZXM9e0ZvbnRzOkYuRm9udHM9W3tzejoxMixjb2xvcjp7dGhl'@;
put 'bWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6Ri5GaWxscz1be3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6Ri5Cb3JkZXJzPVt7fV0sRFhGOkYuRFhGPU0uU3R5bGVzJiZN'@;
put 'LlN0eWxlcy5EWEZ8fFtdLFRhYmxlOkYuVGFibGU9TS5TdHlsZXMmJk0uU3R5bGVzLlRhYmxlfHxbXX0sRi5vdmVycmlkZU1EVz9IbD1GLm92ZXJyaWRlTURXOnkzKEYuRm9udHNbMF0pLEYucmVscz17fSxGLndicmVscz17fSxGLlN0cmluZ3M9W10sRi5TdHJpbmdzLkNvdW50PTAsRi5TdHJp'@;
put 'bmdzLlVuaXF1ZT0wLCQyP0YucmV2U3RyaW5ncz1uZXcgTWFwOihGLnJldlN0cmluZ3M9e30sRi5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgRi5yZXZTdHJpbmdzLmZvbyk7dmFyIE89Inhsc2IiPT1GLmJvb2tUeXBlPyJiaW4iOiJ4bWwiLEo9a0MuaW5kZXhPZihGLmJvb2tUeXBlKT4tMSxp'@;
put 'ZT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxjdXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltd'@;
put 'LHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNoYXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3Vz'@;
put 'dG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07eHgoRj1GfHx7fSk7dmFyIHBlPWJuKCkseWU9IiIsdmU9MDtpZihGLmNlbGxYZnM9W10sRi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0scnUoRi5jZWxsWGZzLEYuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6'@;
put 'MH19KSxNLlByb3BzfHwoTS5Qcm9wcz17fSksR3QocGUseWU9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiBqbShNLEYpe3ZhciBPPUZ8fHt9LEo9W1BuLFZtXSxpZT17fTtpZighTSYmIU8uUHJvcHMpcmV0dXJuIEouam9pbigiIik7TSYmKG51bGwhPU0uQ3JlYXRlZERhdGUmJkYxKCJk'@;
put 'Y3Rlcm1zOmNyZWF0ZWQiLCJzdHJpbmciPT10eXBlb2YgTS5DcmVhdGVkRGF0ZT9NLkNyZWF0ZWREYXRlOlV1KE0uQ3JlYXRlZERhdGUsTy5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEosaWUpLG51bGwhPU0uTW9kaWZpZWREYXRlJiZGMSgiZGN0ZXJtczptb2RpZmllZCIs'@;
put 'InN0cmluZyI9PXR5cGVvZiBNLk1vZGlmaWVkRGF0ZT9NLk1vZGlmaWVkRGF0ZTpVdShNLk1vZGlmaWVkRGF0ZSxPLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sSixpZSkpO2Zvcih2YXIgcGU9MDtwZSE9SmMubGVuZ3RoOysrcGUpe3ZhciB5ZT1KY1twZV0sdmU9Ty5Qcm9w'@;
put 'cyYmbnVsbCE9Ty5Qcm9wc1t5ZVsxXV0/Ty5Qcm9wc1t5ZVsxXV06TT9NW3llWzFdXTpudWxsOyEwPT09dmU/dmU9IjEiOiExPT09dmU/dmU9IjAiOiJudW1iZXIiPT10eXBlb2YgdmUmJih2ZT1TdHJpbmcodmUpKSxudWxsIT12ZSYmRjEoeWVbMF0sdmUsbnVsbCxKLGllKX1yZXR1cm4gSi5s'@;
put 'ZW5ndGg+MiYmKEpbSi5sZW5ndGhdPSI8L2NwOmNvcmVQcm9wZXJ0aWVzPiIsSlsxXT1KWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxKLmpvaW4oIiIpfShNLlByb3BzLEYpKSxpZS5jb3JlcHJvcHMucHVzaCh5ZSksdnIoRi5yZWxzLDIseWUsX28uQ09SRV9QUk9QUykseWU9ImRvY1Byb3BzL2Fw'@;
put 'cC54bWwiLCFNLlByb3BzfHwhTS5Qcm9wcy5TaGVldE5hbWVzKWlmKE0uV29ya2Jvb2smJk0uV29ya2Jvb2suU2hlZXRzKXtmb3IodmFyIE1lPVtdLGplPTA7amU8TS5TaGVldE5hbWVzLmxlbmd0aDsrK2plKTIhPShNLldvcmtib29rLlNoZWV0c1tqZV18fHt9KS5IaWRkZW4mJk1lLnB1c2go'@;
put 'TS5TaGVldE5hbWVzW2plXSk7TS5Qcm9wcy5TaGVldE5hbWVzPU1lfWVsc2UgTS5Qcm9wcy5TaGVldE5hbWVzPU0uU2hlZXROYW1lcztNLlByb3BzLldvcmtzaGVldHM9TS5Qcm9wcy5TaGVldE5hbWVzLmxlbmd0aCxHdChwZSx5ZSxmdW5jdGlvbiBCbShNKXt2YXIgRj1bXSxPPWRyO3JldHVy'@;
put 'biBNfHwoTT17fSksTS5BcHBsaWNhdGlvbj0iU2hlZXRKUyIsRltGLmxlbmd0aF09UG4sRltGLmxlbmd0aF09bjMsXzAuZm9yRWFjaChmdW5jdGlvbihKKXtpZih2b2lkIDAhPT1NW0pbMV1dKXt2YXIgaWU7c3dpdGNoKEpbMl0pe2Nhc2Uic3RyaW5nIjppZT15cihTdHJpbmcoTVtKWzFdXSkp'@;
put 'O2JyZWFrO2Nhc2UiYm9vbCI6aWU9TVtKWzFdXT8idHJ1ZSI6ImZhbHNlIn12b2lkIDAhPT1pZSYmKEZbRi5sZW5ndGhdPU8oSlswXSxpZSkpfX0pLEZbRi5sZW5ndGhdPU8oIkhlYWRpbmdQYWlycyIsTygidnQ6dmVjdG9yIixPKCJ2dDp2YXJpYW50IiwiPHZ0Omxwc3RyPldvcmtzaGVldHM8'@;
put 'L3Z0Omxwc3RyPiIpK08oInZ0OnZhcmlhbnQiLE8oInZ0Omk0IixTdHJpbmcoTS5Xb3Jrc2hlZXRzKSkpLHtzaXplOjIsYmFzZVR5cGU6InZhcmlhbnQifSkpLEZbRi5sZW5ndGhdPU8oIlRpdGxlc09mUGFydHMiLE8oInZ0OnZlY3RvciIsTS5TaGVldE5hbWVzLm1hcChmdW5jdGlvbihKKXty'@;
put 'ZXR1cm4iPHZ0Omxwc3RyPiIreXIoSikrIjwvdnQ6bHBzdHI+In0pLmpvaW4oIiIpLHtzaXplOk0uV29ya3NoZWV0cyxiYXNlVHlwZToibHBzdHIifSkpLEYubGVuZ3RoPjImJihGW0YubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsRlsxXT1GWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxGLmpvaW4o'@;
put 'IiIpfShNLlByb3BzKSksaWUuZXh0cHJvcHMucHVzaCh5ZSksdnIoRi5yZWxzLDMseWUsX28uRVhUX1BST1BTKSxNLkN1c3Rwcm9wcyE9PU0uUHJvcHMmJmF0KE0uQ3VzdHByb3BzfHx7fSkubGVuZ3RoPjAmJihHdChwZSx5ZT0iZG9jUHJvcHMvY3VzdG9tLnhtbCIsZnVuY3Rpb24gSDEoTSl7'@;
put 'dmFyIEY9W1BuLFZwXTtpZighTSlyZXR1cm4gRi5qb2luKCIiKTt2YXIgTz0xO3JldHVybiBhdChNKS5mb3JFYWNoKGZ1bmN0aW9uKGllKXsrK08sRltGLmxlbmd0aF09ZHIoInByb3BlcnR5IixmdW5jdGlvbiBQcyhNLEYpe3N3aXRjaCh0eXBlb2YgTSl7Y2FzZSJzdHJpbmciOnZhciBPPWRy'@;
put 'KCJ2dDpscHdzdHIiLHlyKE0pKTtyZXR1cm4gRiYmKE89Ty5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxPO2Nhc2UibnVtYmVyIjpyZXR1cm4gZHIoKDB8TSk9PU0/InZ0Omk0IjoidnQ6cjgiLHlyKFN0cmluZyhNKSkpO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGRyKCJ2dDpib29sIixN'@;
put 'PyJ0cnVlIjoiZmFsc2UiKX1pZihNIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gZHIoInZ0OmZpbGV0aW1lIixVdShNKSk7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2VyaWFsaXplICIrTSl9KE1baWVdLCEwKSx7Zm10aWQ6IntENUNERDUwNS0yRTlDLTEwMUItOTM5Ny0wODAwMkIyQ0Y5'@;
put 'QUV9IixwaWQ6TyxuYW1lOnlyKGllKX0pfSksRi5sZW5ndGg+MiYmKEZbRi5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixGWzFdPUZbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEYuam9pbigiIil9KE0uQ3VzdHByb3BzKSksaWUuY3VzdHByb3BzLnB1c2goeWUpLHZyKEYucmVscyw0LHllLF9vLkNV'@;
put 'U1RfUFJPUFMpKTt2YXIgWWU9W10scWU9W107ZnVuY3Rpb24gaXQoZ24scW4pe3FlLnB1c2goW3ZlLTEscW4sZ25dKX1mdW5jdGlvbiBodChnbil7WWUucHVzaChbdmUtMSxnbl0pLHZyKGt0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRhYmxlIitZZS5sZW5ndGgrIi4iK08sX28uUElWT1Qp'@;
put 'fWZvcih2ZT0xO3ZlPD1NLlNoZWV0TmFtZXMubGVuZ3RoOysrdmUpe3ZhciBrdD17IiFpZCI6e319LHV0PU0uU2hlZXRzW00uU2hlZXROYW1lc1t2ZS0xXV0sdnQ9KHV0fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKHZ0KXtjYXNlImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2lu'@;
put 'Z188InUiKXtHdChwZSx5ZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3ZlKyIuIitPLFV2KHZlLTEseWUsRixNLGt0KSksaWUuY2hhcnRzLnB1c2goeWUpLHZyKEYud2JyZWxzLC0xLCJjaGFydHNoZWV0cy9zaGVldCIrdmUrIi4iK08sX28uQ1MpO2JyZWFrfWRlZmF1bHQ6R3QocGUseWU9Inhs'@;
put 'L3dvcmtzaGVldHMvc2hlZXQiK3ZlKyIuIitPLEtTKHZlLTEseWUsRixNLGt0KSksaWUuc2hlZXRzLnB1c2goeWUpLHZyKEYud2JyZWxzLC0xLCJ3b3Jrc2hlZXRzL3NoZWV0Iit2ZSsiLiIrTyxfby5XU1swXSl9aWYodXQpeyJjaGFydCI9PXZ0JiYhdXRbIiFwb3MiXSYmKHV0WyIhcG9zIl09'@;
put 'e3g6MCx5OjAsdzo5MDAsaDo2MDB9KTt2YXIgUHQ9dXRbIiFjb21tZW50cyJdLER0PSExO2lmKFB0JiZQdC5sZW5ndGg+MCl7dmFyIEF0PSJ4bC9jb21tZW50cyIrdmUrIi4iK087R3QocGUsQXQsZ08oUHQsQXQsRikpLGllLmNvbW1lbnRzLnB1c2goQXQpLHZyKGt0LC0xLCIuLi9jb21tZW50'@;
put 'cyIrdmUrIi4iK08sX28uQ01OVCksRHQ9ITB9KHV0WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoRHQ9ITApLHV0WyIhbGVnYWN5Il0mJkR0JiZHdChwZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrdmUrIi52bWwiLE5fKHZlLHV0WyIhY29tbWVudHMiXSx1dFsiIWNvbnRyb2xzIl0s'@;
put 'dXQpKSx1dFsiIWxlZ2FjeUhGIl0mJmJDKHBlLDAsdmUsdXRbIiFwcmludCJdLmltYWdlcyk7dmFyIFp0PSgiY2hhcnQiPT11dFsiIXR5cGUiXT9bdXRdOnV0WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKHV0WyIhaW1hZ2VzIl18fFtdKS5tYXAoZnVuY3Rpb24oZ24pe3JldHVybiBnblsiIXR5'@;
put 'cGUiXXx8KGduWyIhdHlwZSJdPSJpbWFnZSIpLGdufSkpLmNvbmNhdCgodXRbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihnbil7cmV0dXJuIGduWyIhdHlwZSJdfHwoZ25bIiF0eXBlIl09InNoYXBlIiksZ259KSk7WnQmJlp0Lmxlbmd0aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwi'@;
put 'dSI/d3JpdGVfZHJhd2luZ18ocGUsaWUsdmUsdXQsWnQpOihHdChwZSwieGwvZHJhd2luZ3MvZHJhd2luZyIrdmUrIi54bWwiLHNJKCkpLGllLmRyYXdpbmdzLnB1c2goInhsL2RyYXdpbmdzL2RyYXdpbmciK3ZlKyIueG1sIikpKSxkZWxldGUgdXRbIiFjb21tZW50cyJdLGRlbGV0ZSB1dFsi'@;
put 'IWxlZ2FjeSJdLGRlbGV0ZSB1dFsiIWxlZ2FjeUhGIl19dXQmJnV0WyIhcGl2b3RzIl0mJiJ4bWwiPT1PJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmdXRbIiFwaXZvdHMiXS5mb3JFYWNoKGh0KSxrdFsiIWlkIl0ucklkMSYmR3QocGUsa3IoeWUpLHNpKGt0KSksdXQmJnV0WyIhdGFi'@;
put 'bGVzIl0mJiJ4bWwiPT1PJiZ1dFsiIXRhYmxlcyJdLmZvckVhY2goaXQpfXJldHVybiBudWxsIT1GLlN0cmluZ3MmJkYuU3RyaW5ncy5sZW5ndGg+MCYmKEd0KHBlLHllPSJ4bC9zaGFyZWRTdHJpbmdzLiIrTyxtTyhGLlN0cmluZ3MseWUsRikpLGllLnN0cnMucHVzaCh5ZSksdnIoRi53YnJl'@;
put 'bHMsLTEsInNoYXJlZFN0cmluZ3MuIitPLF9vLlNTVCkpLCJ4bWwiPT1PJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKFllLE0scGUsaWUsRiksInhtbCI9PU8mJmZ1bmN0aW9uIFMzKE0sRixPLEope00uZm9yRWFjaChmdW5jdGlvbihpZSxwZSl7dmFyIHll'@;
put 'PUYuU2hlZXRzW0YuU2hlZXROYW1lc1tpZVswXV1dLHZlPSJ4bC90YWJsZXMvdGFibGUiKyhpZVswXSsxKSsiXyIraWVbMV0rIi54bWwiO0oudGFibGVzLnB1c2godmUpO3ZhciBNZT1pZVsyXS5yZWZ8fHllWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiBNZSYmKE1lPUFpKE1lKSk7dmFyIGpl'@;
put 'PWJvKE1lKSxZZT1pZVsyXS5uYW1lfHwic2pzdGJsXyIraWVbMF0rIl8iK2llWzFdLHFlPVtQbl0saXQ9IWRuKGllWzJdLmhlYWRlciksaHQ9aXQmJiFkbihpZVsyXS5maWx0ZXIpO3FlLnB1c2goJzx0YWJsZSB4bWxucz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3NwcmVh'@;
put 'ZHNoZWV0bWwvMjAwNi9tYWluIiBpZD0iJysocGUrMSkrJyIgbmFtZT0iJyt5cihZZSkrJyIgZGlzcGxheU5hbWU9IicreXIoWWUpKyciIHJlZj0iJytNZSsnIiAnKyhudWxsIT1pZVsyXS5oZWFkZXImJjEhPWllWzJdLmhlYWRlcj8naGVhZGVyUm93Q291bnQ9IicrKGllWzJdLmhlYWRlcnx8'@;
put 'MCkrJyIgJzoiIikrIj4iKSxodCYmcWUucHVzaCgnPGF1dG9GaWx0ZXIgcmVmPSInK01lKyciLz4nKSxxZS5wdXNoKCc8dGFibGVDb2x1bW5zIGNvdW50PSInKyhqZS5lLmMtamUucy5jKzEpKyciPicpO2Zvcih2YXIga3Q9W10sdXQ9amUucy5jO3V0PD1qZS5lLmM7Kyt1dClpZihpdCl7Zm9y'@;
put 'KHZhciB2dD1EaSh7cjpqZS5zLnIsYzp1dH0pLFB0PXllW3Z0XSxEdD1pZVsyXS5jb2xzJiZpZVsyXS5jb2xzW3V0LWplLnMuY10mJmllWzJdLmNvbHNbdXQtamUucy5jXS5uYW1lfHxQdCYmKFB0Lnd8fFB0LnYpfHwiQ29sdW1uICIrKHV0LWplLnMuYysxKSxBdD1EdCxadD0xO2t0LmluZGV4'@;
put 'T2YoQXQpPi0xJiYrK1p0PDE2Mzg0OylBdD1EdCtadDtpZihBdCE9RHQpdGhyb3cidGFibGUgY29sdW1ucyAiK3V0KyIgYW5kICIrKGt0LmluZGV4T2YoRHQpK2plLnMuYykrIiBoYXZlIHRoZSBzYW1lIGhlYWRlciAnIitEdCsiJzsgdHJ5IHNldHRpbmcgY2VsbCAiK3Z0KyIgdG8gJyIrQXQr'@;
put 'IiciO2t0LnB1c2goQXQpLHFlLnB1c2goJzx0YWJsZUNvbHVtbiBpZD0iJysoaWVbMl0uY29scyYmaWVbMl0uY29sc1t1dC1qZS5zLmNdJiZudWxsIT1pZVsyXS5jb2xzW3V0LWplLnMuY10uaWQ/aWVbMl0uY29sc1t1dC1qZS5zLmNdLmlkOnV0LWplLnMuYysxKSsnIiBuYW1lPSInK3lyKEF0'@;
put 'KSsnIi8+Jyl9ZWxzZSBxZS5wdXNoKGllWzJdLmNvbHMmJmllWzJdLmNvbHNbdXQtamUucy5jXT8nPHRhYmxlQ29sdW1uIGlkPSInK2llWzJdLmNvbHNbdXQtamUucy5jXS5pZCsnIiBuYW1lPSInK2llWzJdLmNvbHNbdXQtamUucy5jXS5uYW1lKyciLz4nOic8dGFibGVDb2x1bW4gaWQ9Iicr'@;
put 'KHV0LWplLnMuYysxKSsnIiB1bmlxdWVOYW1lPSInKyh1dC1qZS5zLmMrMSkrJyIgbmFtZT0iJysodXQtamUucy5jKzEpKyciLz4nKTtxZS5wdXNoKCI8L3RhYmxlQ29sdW1ucz4iKTt2YXIgcW49KyghMSE9PShpZVsyXS5zdHlsZXx8e30pLnJvd3N0cmlwZSksdW49KyEhKGllWzJdLnN0eWxl'@;
put 'fHx7fSkuY29sc3RyaXBlLEpuPSshIShpZVsyXS5zdHlsZXx8e30pLmNvbGZpcnN0LFluPSshIShpZVsyXS5zdHlsZXx8e30pLmNvbGxhc3QsTG49KGllWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO0xuPUxuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVT'@;
put 'dHlsZSIrTG46TG4scWUucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9IicrTG4rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK0puKyciIHNob3dMYXN0Q29sdW1uPSInK1luKyciIHNob3dSb3dTdHJpcGVzPSInK3FuKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK3VuKyciLz4nKSxxZS5wdXNoKCI8'@;
put 'L3RhYmxlPiIpLEd0KE8sdmUscWUuam9pbigiIikpfSl9KHFlLE0scGUsaWUpLCJ4bWwiPT1PJiYoTS5FeHRlcm5hbFdCfHxbXSkubGVuZ3RoJiZmdW5jdGlvbiBGXyhNLEYsTyl7Ty5saW5rc3x8KE8ubGlua3M9W10pLE0uRXh0ZXJuYWxXQiYmTS5FeHRlcm5hbFdCLmZvckVhY2goZnVuY3Rp'@;
put 'b24oSixpZSl7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9fcmVscy9leHRlcm5hbExpbmsiKyhpZSsxKSsiLnhtbC5yZWxzIix5ZT17fTt2cih5ZSwtMSxKLlRhcmdldCxKLk1pc3Npbmc/X28uWE1JU1M6X28uWFBBVEgpLEd0KEYsamMocGUpLHNpKHllKSk7dmFyIHZlPSIveGwvZXh0ZXJu'@;
put 'YWxMaW5rcy9leHRlcm5hbExpbmsiKyhpZSsxKSsiLnhtbCI7Ty5saW5rcy5wdXNoKHZlKSxHdChGLGpjKHZlKSxmdW5jdGlvbiBySShNKXt2YXIgRj1bUG4sbkldO3JldHVybihNLlNoZWV0TmFtZXN8fFtdKS5sZW5ndGgmJihGLnB1c2goJzxleHRlcm5hbEJvb2sgeG1sbnM6cj0iaHR0cDov'@;
put 'L3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcyIgcjppZD0icklkMSI+JyksRi5wdXNoKCI8c2hlZXROYW1lcz4iKSxNLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihPKXtGLnB1c2goJzxzaGVldE5hbWUgdmFsPSInK3lyKE8p'@;
put 'KyciLz4nKX0pLEYucHVzaCgiPC9zaGVldE5hbWVzPiIpLEYucHVzaCgiPHNoZWV0RGF0YVNldD4iKSxNLlNoZWV0TmFtZXMuZm9yRWFjaChmdW5jdGlvbihPLEope3ZhciBpZT1NLlNoZWV0c1tPXSxwZT17c2hlZXRJZDpKfSx5ZT1udWxsO2lmKG51bGw9PWllKXBlLnJlZnJlc2hFcnJvcj0x'@;
put 'O2Vsc2UgaWYoaWVbIiFyZWYiXSl7dmFyIHZlPUhzKGllWyIhcmVmIl0pO3llPSIiO2Zvcih2YXIgTWU9dmUucy5yO01lPD12ZS5lLnI7KytNZSl7Zm9yKHZhciBqZT0iIixZZT12ZS5zLmM7WWU8PXZlLmUuYzsrK1llKXt2YXIgcWU9RGkoe3I6TWUsYzpZZX0pO2llW3FlXSYmKGplfHwoamU9'@;
put 'Jzxyb3cgcj0iJysoTWUrMSkrJyI+JyksamUrPSc8Y2VsbCByPSInK3FlKyciJysoaWVbcWVdLnQ/JyB0PSInK2llW3FlXS50KyciJzoiIikrIj48dj4iK3lyKGllW3FlXS52KSsiPC92PjwvY2VsbD4iKX1qZSYmKHllKz1qZSsiPC9yb3c+Iil9fUYucHVzaChkcigic2hlZXREYXRhIix5ZSxw'@;
put 'ZSkpfSksRi5wdXNoKCI8L3NoZWV0RGF0YVNldD4iKSxGLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxGLmxlbmd0aD4yJiYoRltGLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsRlsxXT1GWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxGLmpvaW4oIiIpfShKKSl9KX0oTSxwZSxpZSksInhtbCI9'@;
put 'PU8mJmZ1bmN0aW9uIE9fKE0pe3ZhciBGLE87TS5Xb3JrYm9va3x8KE0uV29ya2Jvb2s9e05hbWVzOltdfSksTS5Xb3JrYm9vay5OYW1lc3x8KE0uV29ya2Jvb2suTmFtZXM9W10pO2Zvcih2YXIgSj1NLldvcmtib29rLk5hbWVzLGllPTA7aWU8TS5TaGVldE5hbWVzLmxlbmd0aDsrK2llKXt2'@;
put 'YXIgcGU9TS5TaGVldE5hbWVzW2llXSx5ZT1NLlNoZWV0c1twZV07aWYoeWUmJnllWyIhcHJpbnQiXSl7dmFyIHZlPSInIitwZSsiJyEiLE1lPXllWyIhcHJpbnQiXTtpZihNZSl7dmFyIGplPSEoRj1NZS5hcmVhKSxZZT0hKE89TWUudGl0bGVzKSxxZT1GPyJzdHJpbmciPT10eXBlb2YgRj9G'@;
put 'OkFpKEYpOiIiO2lmKEYmJihKLmZvckVhY2goZnVuY3Rpb24oaHQpe2h0LlNoZWV0PT1pZSYmIWplJiYiX3hsbm0uUHJpbnRfQXJlYSI9PWh0Lk5hbWUmJihqZT0hMCxodC5SZWY9dmUrcWUpfSksamV8fEoucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnZlK3FlLFNoZWV0Omll'@;
put 'fSkpLE8pe3ZhciBpdD0iIjtPLnMuYz4tMSYmTy5lLmM+LTEmJihpdCs9dmUrZm8oTy5zLmMpKyI6IitmbyhPLmUuYykrIiwiKSxPLnMucj4tMSYmTy5lLnI+LTEmJihpdCs9dmUrcnMoTy5zLnIpKyI6IitycyhPLmUucikrIiwiKSxpdD1pdC5zbGljZSgwLC0xKSxKLmZvckVhY2goZnVuY3Rp'@;
put 'b24oaHQpe2h0LlNoZWV0PT1pZSYmIVllJiYiX3hsbm0uUHJpbnRfVGl0bGVzIj09aHQuTmFtZSYmKGplPSEwLGh0LlJlZj1pdCl9KSxZZXx8Si5wdXNoKHtOYW1lOiJfeGxubS5QcmludF9UaXRsZXMiLFJlZjppdCxTaGVldDppZX0pfX19fX0oTSksR3QocGUseWU9InhsL3dvcmtib29rLiIr'@;
put 'TyxmdW5jdGlvbiB6dihNLEYsTyl7cmV0dXJuKCIuYmluIj09PUYuc2xpY2UoLTQpP1pTOnRPKShNLE8pfShNLHllLEYpKSxpZS53b3JrYm9va3MucHVzaCh5ZSksdnIoRi5yZWxzLDEseWUsX28uV0IpLEd0KHBlLHllPSJ4bC90aGVtZS90aGVtZTEueG1sIiwkTChNLlRoZW1lcyxGKSksaWUu'@;
put 'dGhlbWVzLnB1c2goeWUpLHZyKEYud2JyZWxzLC0xLCJ0aGVtZS90aGVtZTEueG1sIixfby5USEVNRSksR3QocGUseWU9InhsL3N0eWxlcy4iK08sZnVuY3Rpb24gWnYoTSxGLE8pe3JldHVybigiLmJpbiI9PT1GLnNsaWNlKC00KT91QzpCNikoTSxPKX0oTSx5ZSxGKSksaWUuc3R5bGVzLnB1'@;
put 'c2goeWUpLHZyKEYud2JyZWxzLC0xLCJzdHlsZXMuIitPLF9vLlNUWSksTS52YmFyYXcmJkomJihHdChwZSx5ZT0ieGwvdmJhUHJvamVjdC5iaW4iLE0udmJhcmF3KSxpZS52YmEucHVzaCh5ZSksdnIoRi53YnJlbHMsLTEsInZiYVByb2plY3QuYmluIixfby5WQkEpKSxNLm1vZGVsJiZNLm1v'@;
put 'ZGVsLmxlbmd0aCYmKEd0KHBlLCJ4bC9tb2RlbC9pdGVtLmRhdGEiLE0ubW9kZWwpLHZyKEYud2JyZWxzLC0xLCJtb2RlbC9pdGVtLmRhdGEiLF9vLlBXUlBEKSksTS5jb25uJiYoR3QocGUsInhsL2Nvbm5lY3Rpb25zLnhtbCIsTS5jb25uKSxpZS5jb25ucy5wdXNoKCIveGwvY29ubmVjdGlv'@;
put 'bnMueG1sIiksdnIoRi53YnJlbHMsLTEsImNvbm5lY3Rpb25zLnhtbCIsX28uQ09OTikpLE0uQ3VzdG9tWE1MJiZNLkN1c3RvbVhNTC5mb3JFYWNoKGZ1bmN0aW9uKGduLHFuKXtpZihHdChwZSwiY3VzdG9tWG1sL2l0ZW0iKyhxbisxKSsiLnhtbCIsZ24uZGF0YSksdnIoRi53YnJlbHMsLTEs'@;
put 'Ii4uL2N1c3RvbVhtbC9pdGVtIisocW4rMSkrIi54bWwiLF9vLkNYTUwpLGduLnByb3BzKXtHdChwZSwiY3VzdG9tWG1sL2l0ZW1Qcm9wcyIrKHFuKzEpKyIueG1sIixnbi5wcm9wcyksaWUuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhxbisxKSsiLnhtbCIp'@;
put 'O3ZhciB1bj17fTt2cih1biwtMSwiaXRlbVByb3BzIisocW4rMSkrIi54bWwiLF9vLkNYTUxQKSxHdChwZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhxbisxKSsiLnhtbC5yZWxzIixzaSh1bikpfX0pLEd0KHBlLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiBObShNLEYsTyl7dmFy'@;
put 'IGllLEo9W107T3x8KEpbSi5sZW5ndGhdPVBuLEpbSi5sZW5ndGhdPVBwLEo9Si5jb25jYXQoSG0pKTt2YXIgcGU9ZnVuY3Rpb24oTWUpe01bTWVdJiZNW01lXS5sZW5ndGg+MCYmKEpbSi5sZW5ndGhdPWRyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09KGllPU1bTWVdWzBdKVsw'@;
put 'XT8iIjoiLyIpK2llLENvbnRlbnRUeXBlOklwW01lXVtGLmJvb2tUeXBlfHwieGxzeCJdfSkpfSx5ZT1mdW5jdGlvbihNZSl7KE1bTWVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihqZSl7SltKLmxlbmd0aF09ZHIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1qZVswXT8iIjoiLyIp'@;
put 'K2plLENvbnRlbnRUeXBlOklwW01lXVtGLmJvb2tUeXBlfHwieGxzeCJdfSl9KX0sdmU9ZnVuY3Rpb24oTWUpeyhNW01lXXx8W10pLmZvckVhY2goZnVuY3Rpb24oamUpe0pbSi5sZW5ndGhdPWRyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09amVbMF0/IiI6Ii8iKStqZSxDb250'@;
put 'ZW50VHlwZTpScFtNZV1bMF19KX0pfTtyZXR1cm4gcGUoIndvcmtib29rcyIpLHllKCJzaGVldHMiKSx5ZSgiY2hhcnRzIiksdmUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChwZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rwcm9wcyJdLmZvckVh'@;
put 'Y2godmUpLHZlKCJ2YmEiKSx2ZSgiY29tbWVudHMiKSx2ZSgiZHJhd2luZ3MiKSx5ZSgidGFibGVzIikseWUoInBpdm90cyIpLHllKCJwaXZvdGNhY2hlcyIpLHllKCJwaXZvdHJlY29yZHMiKSx2ZSgiZGF0YW1vZGVscyIpLHZlKCJjdHJscHJvcHMiKSx2ZSgiY2hhcnRvYmpzIiksdmUoImNo'@;
put 'YXJ0c3R5bGVzIiksdmUoImNoYXJ0Y29sb3JzIiksdmUoImNoYXJ0ZXhzIikseWUoImxpbmtzIiksdmUoImN1c3RvbXhtbHByb3BzIiksIU8mJkoubGVuZ3RoPjImJihKW0oubGVuZ3RoXT0iPC9UeXBlcz4iLEpbMV09SlsxXS5yZXBsYWNlKCIvPiIsIj4iKSksSi5qb2luKCIiKX0oaWUsRikp'@;
put 'LEd0KHBlLCJfcmVscy8ucmVscyIsc2koRi5yZWxzKSksR3QocGUsInhsL19yZWxzL3dvcmtib29rLiIrTysiLnJlbHMiLHNpKEYud2JyZWxzKSksZGVsZXRlIEYuRm9udHMsZGVsZXRlIEYuRmlsbHMsZGVsZXRlIEYuQm9yZGVycyxkZWxldGUgRi5yZXZzc2YsZGVsZXRlIEYuc3NmLHBlfWZ1'@;
put 'bmN0aW9uIE00KE0sRil7dmFyIE89IiI7c3dpdGNoKChGfHx7fSkudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm5bTVswXSxNWzFdLE1bMl0sTVszXSxNWzRdLE1bNV0sTVs2XSxNWzddXTtjYXNlImJhc2U2NCI6Tz1zZS5kZWNvZGUoTS5zbGljZSgwLDEy'@;
put 'KSk7YnJlYWs7Y2FzZSJiaW5hcnkiOk89TTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIisoRiYmRi50eXBlfHwidW5kZWZpbmVkIikpfXJldHVybltPLmNoYXJDb2RlQXQoMCksTy5jaGFyQ29kZUF0KDEpLE8uY2hhckNvZGVBdCgyKSxPLmNoYXJD'@;
put 'b2RlQXQoMyksTy5jaGFyQ29kZUF0KDQpLE8uY2hhckNvZGVBdCg1KSxPLmNoYXJDb2RlQXQoNiksTy5jaGFyQ29kZUF0KDcpXX1mdW5jdGlvbiBpeShNLEYpe3ZhciBPPTA7ZTpmb3IoO088TS5sZW5ndGg7KXN3aXRjaChNLmNoYXJDb2RlQXQoTykpe2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMy'@;
put 'OisrTzticmVhaztjYXNlIDYwOnJldHVybiBNOChNLnNsaWNlKE8pLEYpO2RlZmF1bHQ6YnJlYWsgZX1yZXR1cm4gajIudG9fd29ya2Jvb2soTSxGKX1mdW5jdGlvbiBMOChNLEYsTyxKKXtyZXR1cm4gSj8oTy50eXBlPSJzdHJpbmciLGoyLnRvX3dvcmtib29rKE0sTykpOmoyLnRvX3dvcmti'@;
put 'b29rKEYsTyl9ZnVuY3Rpb24gQzQoTSxGKXt2YXIgTz1DLmdldGxvY2FsZSgpO0soQyksQy5zZXRsb2NhbGUoTyksTigpO3ZhciBKPUZ8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJk0gaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gQzQobmV3IFVpbnQ4QXJyYXkoTSksKChK'@;
put 'PVh0KEopKS50eXBlPSJhcnJheSIsSikpO3ZhciBwZSxpZT1NLHllPSExO2lmKEhoKEZoPUouUFBJfHxpYSksSi5jZWxsU3R5bGVzJiYoSi5jZWxsTkY9ITAsSi5zaGVldFN0dWJzPSEwKSxoNT17fSxKLmRhdGVORiYmKGg1LmRhdGVORj1KLmRhdGVORiksSi50eXBlfHwoSi50eXBlPWRlJiZC'@;
put 'dWZmZXIuaXNCdWZmZXIoTSk/ImJ1ZmZlciI6ImJhc2U2NCIpLCJmaWxlIj09Si50eXBlJiYoSi50eXBlPWRlPyJidWZmZXIiOiJiaW5hcnkiLGllPWZ1bmN0aW9uIFhlKE0pe2lmKHR5cGVvZiBOZTwidSIpcmV0dXJuIE5lLnJlYWRGaWxlU3luYyhNKTtpZih0eXBlb2YgJDwidSImJnR5cGVv'@;
put 'ZiBGaWxlPCJ1IiYmdHlwZW9mIEZvbGRlcjwidSIpdHJ5e3ZhciBGPUZpbGUoTSk7Ri5vcGVuKCJyIiksRi5lbmNvZGluZz0iYmluYXJ5Ijt2YXIgTz1GLnJlYWQoKTtyZXR1cm4gRi5jbG9zZSgpLE99Y2F0Y2goSil7aWYoIUoubWVzc2FnZXx8IUoubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3Qv'@;
put 'KSl0aHJvdyBKfXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGFjY2VzcyBmaWxlICIrTSl9KE0pKSwic3RyaW5nIj09Si50eXBlJiYoeWU9ITAsSi50eXBlPSJiaW5hcnkiLEouY29kZXBhZ2U9NjUwMDEsaWU9ZnVuY3Rpb24gTHgoTSl7cmV0dXJuIE0ubWF0Y2goL1teXHgwMC1ceDdGXS8pP0xv'@;
put 'KE0pOk19KE0pKSwiYXJyYXkiPT1KLnR5cGUmJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciB2ZT1uZXcgQXJyYXlCdWZmZXIoMyksTWU9bmV3IFVpbnQ4QXJyYXkodmUpO2lmKE1lLmZvbz0iYmFyIiwh'@;
put 'TWUuZm9vKXJldHVybihKPVh0KEopKS50eXBlPSJhcnJheSIsQzQoUyhpZSksSil9c3dpdGNoKChwZT1NNChpZSxKKSlbMF0pe2Nhc2UgMjA4OmlmKDIwNz09PXBlWzFdJiYxNz09PXBlWzJdJiYyMjQ9PT1wZVszXSYmMTYxPT09cGVbNF0mJjE3Nz09PXBlWzVdJiYyNj09PXBlWzZdJiYyMjU9'@;
put 'PT1wZVs3XSlyZXR1cm4gZnVuY3Rpb24gRHgoTSxGKXtyZXR1cm4gTGUuZmluZChNLCJFbmNyeXB0ZWRQYWNrYWdlIik/dzQoTSxGKTpYdihNLEYpfShMZS5yZWFkKGllLEopLEopO2JyZWFrO2Nhc2UgOTppZihwZVsxXTw9OClyZXR1cm4gWHYoaWUsSik7YnJlYWs7Y2FzZSA2MDpyZXR1cm4g'@;
put 'TTgoaWUsSik7Y2FzZSA3MzppZig3Mz09PXBlWzFdJiY0Mj09PXBlWzJdJiYwPT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJUSUZGIEltYWdlIEZpbGUgaXMgbm90IGEgc3ByZWFkc2hlZXQiKTtpZig2OD09PXBlWzFdKXJldHVybiBmdW5jdGlvbiBWTShNLEYpe3ZhciBPPUZ8fHt9LEo9ISFP'@;
put 'LldURjtPLldURj0hMDt0cnl7dmFyIGllPWZfLnRvX3dvcmtib29rKE0sTyk7cmV0dXJuIE8uV1RGPUosaWV9Y2F0Y2gocGUpe2lmKE8uV1RGPUosIXBlLm1lc3NhZ2UubWF0Y2goL1NZTEsgYmFkIHJlY29yZCBJRC8pJiZKKXRocm93IHBlO3JldHVybiBqMi50b193b3JrYm9vayhNLEYpfX0o'@;
put 'aWUsSik7YnJlYWs7Y2FzZSA4NDppZig2NT09PXBlWzFdJiY2Nj09PXBlWzJdJiY3Nj09PXBlWzNdKXJldHVybiBFNi50b193b3JrYm9vayhpZSxKKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PXBlWzFdJiZwZVsyXTw5JiZwZVszXTw5P2Z1bmN0aW9uIEF4KE0sRil7dmFyIEo9TSxpZT1G'@;
put 'fHx7fTtyZXR1cm4gaWUudHlwZXx8KGllLnR5cGU9ZGUmJkJ1ZmZlci5pc0J1ZmZlcihNKT8iYnVmZmVyIjoiYmFzZTY0IiksYjQoQ24oSixpZSksaWUpfShpZSxKKTpMOChNLGllLEoseWUpO2Nhc2UgMjM5OnJldHVybiA2MD09PXBlWzNdP004KGllLEopOkw4KE0saWUsSix5ZSk7Y2FzZSAy'@;
put 'NTU6aWYoMjU0PT09cGVbMV0pcmV0dXJuIGZ1bmN0aW9uIG95KE0sRil7dmFyIE89TTtyZXR1cm4iYmFzZTY0Ij09Ri50eXBlJiYoTz1zZS5kZWNvZGUoTykpLE89Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxPLnNsaWNlKDIpLCJzdHIiKSxGLnR5cGU9ImJpbmFyeSIsaXkoTyxGKX0oaWUs'@;
put 'Sik7YnJlYWs7Y2FzZSAwOmlmKDA9PT1wZVsxXSYmcGVbMl0+PTImJjA9PT1wZVszXSlyZXR1cm4gVDYudG9fd29ya2Jvb2soaWUsSik7YnJlYWs7Y2FzZSAzOmNhc2UgMTMxOmNhc2UgMTM5OmNhc2UgMTQwOnJldHVybiBWMi50b193b3JrYm9vayhpZSxKKTtjYXNlIDEyMzppZig5Mj09PXBl'@;
put 'WzFdJiYxMTQ9PT1wZVsyXSYmMTE2PT09cGVbM10pcmV0dXJuIEY2LnRvX3dvcmtib29rKGllLEopO2JyZWFrO2Nhc2UgMTA6Y2FzZSAxMzpjYXNlIDMyOnJldHVybiBmdW5jdGlvbiBBOChNLEYpe3ZhciBPPSIiLEo9TTQoTSxGKTtzd2l0Y2goRi50eXBlKXtjYXNlImJhc2U2NCI6Tz1zZS5k'@;
put 'ZWNvZGUoTSk7YnJlYWs7Y2FzZSJiaW5hcnkiOk89TTticmVhaztjYXNlImJ1ZmZlciI6Tz1NLnRvU3RyaW5nKCJiaW5hcnkiKTticmVhaztjYXNlImFycmF5IjpPPVJ0KE0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK0YudHlwZSl9cmV0dXJu'@;
put 'IDIzOT09SlswXSYmMTg3PT1KWzFdJiYxOTE9PUpbMl0mJihPPUJpKE8pKSxpeShPLEYpfShpZSxKKX1yZXR1cm4gVjIudmVyc2lvbnMuaW5kZXhPZihwZVswXSk+LTEmJnBlWzJdPD0xMiYmcGVbM108PTMxP1YyLnRvX3dvcmtib29rKGllLEopOkw4KE0saWUsSix5ZSl9ZnVuY3Rpb24gUE8o'@;
put 'TSxGKXt2YXIgTz1GfHx7fTtyZXR1cm4gTy50eXBlPSJmaWxlIixDNChNLE8pfWZ1bmN0aW9uIFBvKE0sRil7c3dpdGNoKEYudHlwZSl7Y2FzZSJiYXNlNjQiOmNhc2UiYmluYXJ5IjpicmVhaztjYXNlImJ1ZmZlciI6Y2FzZSJhcnJheSI6Ri50eXBlPSIiO2JyZWFrO2Nhc2UiZmlsZSI6cmV0'@;
put 'dXJuIFVlKEYuZmlsZSxMZS53cml0ZShNLHt0eXBlOmRlPyJidWZmZXIiOiIifSkpO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICciK0YuYm9va1R5cGUrIicgZmlsZXMiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5y'@;
put 'ZWNvZ25pemVkIHR5cGUgIitGLnR5cGUpfXJldHVybiBMZS53cml0ZShNLEYpfWZ1bmN0aW9uIFZkKE0sRixPKXtPfHwoTz0iIik7dmFyIEo9TytNO3N3aXRjaChGLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gc2UuZW5jb2RlKExvKEopKTtjYXNlImJpbmFyeSI6cmV0dXJuIExvKEopO2Nh'@;
put 'c2Uic3RyaW5nIjpyZXR1cm4gTTtjYXNlImZpbGUiOnJldHVybiBVZShGLmZpbGUsSiwidXRmOCIpO2Nhc2UiYnVmZmVyIjpyZXR1cm4gZGU/bGUoSiwidXRmOCIpOlZkKEose3R5cGU6ImJpbmFyeSJ9KS5zcGxpdCgiIikubWFwKGZ1bmN0aW9uKGllKXtyZXR1cm4gaWUuY2hhckNvZGVBdCgw'@;
put 'KX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitGLnR5cGUpfWZ1bmN0aW9uIEk4KE0sRil7c3dpdGNoKEYudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBPPSIiLEo9MDtKPE0ubGVuZ3RoOysrSilPKz1TdHJpbmcuZnJv'@;
put 'bUNoYXJDb2RlKE1bSl0pO3JldHVybiJiYXNlNjQiPT1GLnR5cGU/c2UuZW5jb2RlKE8pOiJzdHJpbmciPT1GLnR5cGU/QmkoTyk6TztjYXNlImZpbGUiOnJldHVybiBVZShGLmZpbGUsTSk7Y2FzZSJidWZmZXIiOnJldHVybiBNO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6'@;
put 'ZWQgdHlwZSAiK0YudHlwZSl9fWZ1bmN0aW9uIFY1KE0sRil7TigpLGZ1bmN0aW9uIHY4KE0pe2lmKCFNfHwhTS5TaGVldE5hbWVzfHwhTS5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIU0uU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJX'@;
put 'b3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBnVyhNLEYsTyl7TS5mb3JFYWNoKGZ1bmN0aW9uKEosaWUpe180KEopO2Zvcih2YXIgcGU9MDtwZTxpZTsrK3BlKWlmKEo9PU1bcGVdKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlIFNoZWV0IE5hbWU6ICIrSik7aWYoTyl7dmFyIHllPUYm'@;
put 'JkZbaWVdJiZGW2llXS5Db2RlTmFtZXx8SjtpZig5NT09eWUuY2hhckNvZGVBdCgwKSYmeWUubGVuZ3RoPjIyKXRocm93IG5ldyBFcnJvcigiQmFkIENvZGUgTmFtZTogV29ya3NoZWV0Iit5ZSl9fSl9KE0uU2hlZXROYW1lcyxNLldvcmtib29rJiZNLldvcmtib29rLlNoZWV0c3x8W10sISFN'@;
put 'LnZiYXJhdyk7Zm9yKHZhciBPPTA7TzxNLlNoZWV0TmFtZXMubGVuZ3RoOysrTylLQyhNLlNoZWV0c1tNLlNoZWV0TmFtZXNbT11dLDAsTyl9KE0pO3ZhciBPPUZ8fHt9O2lmKE8uY2VsbFN0eWxlcyYmKE8uY2VsbE5GPSEwLE8uc2hlZXRTdHVicz0hMCksImFycmF5Ij09Ty50eXBlKXtPLnR5'@;
put 'cGU9ImJpbmFyeSI7dmFyIEo9VjUoTSxPKTtyZXR1cm4gTy50eXBlPSJhcnJheSIsSChKKX1zd2l0Y2goTy5ib29rVHlwZXx8Inhsc2IiKXtjYXNlInhtbCI6Y2FzZSJ4bG1sIjpyZXR1cm4gVmQoeFcoTSxPKSxPKTtjYXNlInNsayI6Y2FzZSJzeWxrIjpyZXR1cm4gVmQoQU8oTSxPKSxPKTtj'@;
put 'YXNlImh0bSI6Y2FzZSJodG1sIjpyZXR1cm4gVmQobnkoTSxPKSxPKTtjYXNlInR4dCI6cmV0dXJuIGZ1bmN0aW9uIEhPKE0sRil7c3dpdGNoKEYudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBzZS5lbmNvZGUoTSk7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpyZXR1cm4gTTtjYXNlImZp'@;
put 'bGUiOnJldHVybiBVZShGLmZpbGUsTSwiYmluYXJ5Iik7Y2FzZSJidWZmZXIiOnJldHVybiBkZT9sZShNLCJiaW5hcnkiKTpNLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oTyl7cmV0dXJuIE8uY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitGLnR5'@;
put 'cGUpfShrOChNLE8pLE8pO2Nhc2UiY3N2IjpyZXR1cm4gVmQocnkoTSxPKSxPLCJcdWZlZmYiKTtjYXNlImRpZiI6cmV0dXJuIFZkKE14KE0sTyksTyk7Y2FzZSJkYmYiOnJldHVybiBJOChPVyhNLE8pLE8pO2Nhc2UicHJuIjpyZXR1cm4gVmQoeDgoTSxPKSxPKTtjYXNlInJ0ZiI6cmV0dXJu'@;
put 'IFZkKExPKE0sTyksTyk7Y2FzZSJldGgiOnJldHVybiBWZChQVyhNLE8pLE8pO2Nhc2UiZm9kcyI6cmV0dXJuIFZkKHR5KE0sTyksTyk7Y2FzZSJiaWZmMiI6Ty5iaWZmfHwoTy5iaWZmPTIpO2Nhc2UiYmlmZjMiOk8uYmlmZnx8KE8uYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gTy5iaWZm'@;
put 'fHwoTy5iaWZmPTQpLEk4KF94KE0sTyksTyk7Y2FzZSJiaWZmNSI6Ty5iaWZmfHwoTy5iaWZmPTUpO2Nhc2UiYmlmZjgiOmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIE8uYmlmZnx8KE8uYmlmZj04KSxmdW5jdGlvbiBzeShNLEYpe3ZhciBPPUZ8fHt9O3JldHVybiBQbyhmdW5jdGlvbiBB'@;
put 'VyhNLEYpe3ZhciBPPUZ8fHt9LEo9TGUudXRpbHMuY2ZiX25ldyh7cm9vdDoiUiJ9KSxpZT0iL1dvcmtib29rIjtzd2l0Y2goTy5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjpPLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOk8uYm9va1R5cGV8fChPLmJvb2tUeXBlPSJ4bGEiKTtjYXNl'@;
put 'ImJpZmY4IjppZT0iL1dvcmtib29rIixPLmJpZmY9ODticmVhaztjYXNlImJpZmY1IjppZT0iL0Jvb2siLE8uYmlmZj01O2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHR5cGUgIitPLmJvb2tUeXBlKyIgZm9yIFhMUyBDRkIiKX1yZXR1cm4gTGUudXRpbHMuY2ZiX2Fk'@;
put 'ZChKLGllLF94KE0sTykpLDg9PU8uYmlmZiYmKE0uUHJvcHN8fE0uQ3VzdHByb3BzKSYmZnVuY3Rpb24gRFcoTSxGKXt2YXIgeWUsTz1bXSxKPVtdLGllPVtdLHBlPTA7aWYoTS5Qcm9wcylmb3IoeWU9YXQoTS5Qcm9wcykscGU9MDtwZTx5ZS5sZW5ndGg7KytwZSkoT2JqZWN0LnByb3RvdHlw'@;
put 'ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEkyLHllW3BlXSk/TzpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTzEseWVbcGVdKT9KOmllKS5wdXNoKFt5ZVtwZV0sTS5Qcm9wc1t5ZVtwZV1dXSk7aWYoTS5DdXN0cHJvcHMpZm9yKHllPWF0KE0uQ3VzdHByb3BzKSxwZT0wO3Bl'@;
put 'PHllLmxlbmd0aDsrK3BlKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChNLlByb3BzfHx7fSx5ZVtwZV0pfHwoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEkyLHllW3BlXSk/TzpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTzEs'@;
put 'eWVbcGVdKT9KOmllKS5wdXNoKFt5ZVtwZV0sTS5DdXN0cHJvcHNbeWVbcGVdXV0pO3ZhciB2ZT1bXTtmb3IocGU9MDtwZTxpZS5sZW5ndGg7KytwZSlGMi5pbmRleE9mKGllW3BlXVswXSk+LTF8fG51bGwhPWllW3BlXVsxXSYmdmUucHVzaChpZVtwZV0pO0oubGVuZ3RoJiZMZS51dGlscy5j'@;
put 'ZmJfYWRkKEYsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIixucihKLEM4LlNJLE8xLEwyKSksKE8ubGVuZ3RofHx2ZS5sZW5ndGgpJiZMZS51dGlscy5jZmJfYWRkKEYsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLG5yKE8sQzguRFNJLEkyLENoLHZlLmxlbmd0aD92ZTpudWxs'@;
put 'LEM4LlVESSkpfShNLEopLDg9PU8uYmlmZiYmTS52YmFyYXcmJmZ1bmN0aW9uIHhDKE0sRil7Ri5GdWxsUGF0aHMuZm9yRWFjaChmdW5jdGlvbihPLEope2lmKDAhPUope3ZhciBpZT1PLnJlcGxhY2UoL1teXC9dKltcL10vLCIvX1ZCQV9QUk9KRUNUX0NVUi8iKTsiLyIhPT1pZS5zbGljZSgt'@;
put 'MSkmJkxlLnV0aWxzLmNmYl9hZGQoTSxpZSxGLkZpbGVJbmRleFtKXS5jb250ZW50KX19KX0oSixMZS5yZWFkKE0udmJhcmF3LHt0eXBlOiJzdHJpbmciPT10eXBlb2YgTS52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksSn0oTSxPKSxPKX0oTSxPKTtjYXNlInhsc3giOmNhc2UieGxzbSI6'@;
put 'Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gRk8oTSxGKXt2YXIgTz1GfHx7fSxKPU41KE0sTyksaWU9e307aWYoTy5jb21wcmVzc2lvbiYmKGllLmNvbXByZXNzaW9uPSJERUZMQVRFIiksTy5wYXNzd29yZClpZS50eXBlPWRlPyJub2RlYnVmZmVyIjoi'@;
put 'c3RyaW5nIjtlbHNlIHN3aXRjaChPLnR5cGUpe2Nhc2UiYmFzZTY0IjppZS50eXBlPSJiYXNlNjQiO2JyZWFrO2Nhc2UiYmluYXJ5IjppZS50eXBlPSJzdHJpbmciO2JyZWFrO2Nhc2Uic3RyaW5nIjp0aHJvdyBuZXcgRXJyb3IoIidzdHJpbmcnIG91dHB1dCB0eXBlIGludmFsaWQgZm9yICci'@;
put 'K08uYm9va1R5cGUrIicgZmlsZXMiKTtjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjppZS50eXBlPWRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitPLnR5cGUpfXZhciBwZT1KLkZ1bGxQYXRocz9MZS53cml0'@;
put 'ZShKLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1baWUudHlwZV18fGllLnR5cGV9KTpKLmdlbmVyYXRlKGllKTtyZXR1cm4gTy5wYXNzd29yZCYmdHlwZW9mIEg1PCJ1Ij9QbyhINShwZSxPLnBhc3N3b3JkKSxPKToiZmlsZSI9PT1P'@;
put 'LnR5cGU/VWUoTy5maWxlLHBlKToic3RyaW5nIj09Ty50eXBlP0JpKHBlKTpwZX0oTSxPKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGJvb2tUeXBlIHwiK08uYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gYXkoTSl7aWYoIU0uYm9va1R5cGUpe3ZhciBPPU0uZmlsZS5z'@;
put 'bGljZShNLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtPLm1hdGNoKC9eXC5bYS16XSskLykmJihNLmJvb2tUeXBlPU8uc2xpY2UoMSkpLE0uYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldU'@;
put 'RiJ9W00uYm9va1R5cGVdfHxNLmJvb2tUeXBlfX1mdW5jdGlvbiBseShNLEYsTyl7dmFyIEo9T3x8e307cmV0dXJuIEoudHlwZT0iZmlsZSIsSi5maWxlPUYsYXkoSiksVjUoTSxKKX1mdW5jdGlvbiBJeChNLEYsTyxKLGllLHBlLHllLHZlKXt2YXIgTWU9cnMoTyksamU9dmUuZGVmdmFsLFll'@;
put 'PXZlLnJhdyxxZT0hMCxpdD0xPT09aWU/W106e307aWYoMSE9PWllKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0LCJfX3Jvd051bV9fIix7dmFsdWU6TyxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7aXQuX19yb3dOdW1fXz1PfWVsc2UgaXQuX19y'@;
put 'b3dOdW1fXz1PO2lmKCF5ZXx8TVtPXSlmb3IodmFyIGh0PUYucy5jO2h0PD1GLmUuYzsrK2h0KXt2YXIga3Q9eWU/TVtPXVtodF06TVtKW2h0XStNZV07aWYodm9pZCAwIT09a3QmJnZvaWQgMCE9PWt0LnQpe3ZhciB1dD1rdC52O3N3aXRjaChrdC50KXtjYXNlInoiOmlmKG51bGw9PXV0KWJy'@;
put 'ZWFrO2NvbnRpbnVlO2Nhc2UiZSI6dXQ9MD09dXQ/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitrdC50KX1pZihudWxsIT1wZVtodF0pe2lmKG51bGw9PXV0'@;
put 'KWlmKCJlIj09a3QudCYmbnVsbD09PXV0KWl0W3BlW2h0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PWplKWl0W3BlW2h0XV09amU7ZWxzZXtpZighWWV8fG51bGwhPT11dCljb250aW51ZTtpdFtwZVtodF1dPW51bGx9ZWxzZSBpdFtwZVtodF1dPVllP3V0OldzKGt0LHV0LHZlKTtudWxsIT11'@;
put 'dCYmKHFlPSExKX19ZWxzZXtpZih2b2lkIDA9PT1qZSljb250aW51ZTtudWxsIT1wZVtodF0mJihpdFtwZVtodF1dPWplKX19cmV0dXJue3JvdzppdCxpc2VtcHR5OnFlfX1mdW5jdGlvbiBWMyhNLEYpe2lmKG51bGw9PU18fG51bGw9PU1bIiFyZWYiXSlyZXR1cm5bXTt2YXIgTz17dDoibiIs'@;
put 'djowfSxKPTAsaWU9MSxwZT1bXSx5ZT0wLHZlPSIiLE1lPUpTT04ucGFyc2UoJ3sicyI6eyJyIjowLCJjIjowfSwiZSI6eyJyIjowLCJjIjowfX0nKSxqZT1GfHx7fSxZZT1udWxsIT1qZS5yYW5nZT9qZS5yYW5nZTpNWyIhcmVmIl07c3dpdGNoKDE9PT1qZS5oZWFkZXI/Sj0xOiJBIj09PWpl'@;
put 'LmhlYWRlcj9KPTI6QXJyYXkuaXNBcnJheShqZS5oZWFkZXIpP0o9MzpudWxsPT1qZS5oZWFkZXImJihKPTApLHR5cGVvZiBZZSl7Y2FzZSJzdHJpbmciOk1lPWJvKFllKTticmVhaztjYXNlIm51bWJlciI6KE1lPWJvKE1bIiFyZWYiXSkpLnMucj1ZZTticmVhaztkZWZhdWx0Ok1lPVllfUo+'@;
put 'MCYmKGllPTApO3ZhciBxZT1ycyhNZS5zLnIpLGl0PVtdLGh0PVtdLGt0PTAsdXQ9MCx2dD1BcnJheS5pc0FycmF5KE0pLFB0PU1lLnMucixEdD0wLEF0PTA7Zm9yKHZ0JiYhTVtQdF0mJihNW1B0XT1bXSksRHQ9TWUucy5jO0R0PD1NZS5lLmM7KytEdClzd2l0Y2goaXRbRHRdPWZvKER0KSxP'@;
put 'PXZ0P01bUHRdW0R0XTpNW2l0W0R0XStxZV0sSil7Y2FzZSAxOnBlW0R0XT1EdC1NZS5zLmM7YnJlYWs7Y2FzZSAyOnBlW0R0XT1pdFtEdF07YnJlYWs7Y2FzZSAzOnBlW0R0XT1qZS5oZWFkZXJbRHQtTWUucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1PJiYoTz1KU09OLnBhcnNlKCd7'@;
put 'InciOiAiX19FTVBUWSIsICJ0IjogInMifScpKSx2ZT15ZT1XcyhPLG51bGwsamUpLHV0PTAsQXQ9MDtBdDxwZS5sZW5ndGg7KytBdClwZVtBdF09PXZlJiYodmU9eWUrIl8iKyArK3V0KTtwZVtEdF09dmV9Zm9yKFB0PU1lLnMucitpZTtQdDw9TWUuZS5yOysrUHQpe3ZhciBadD1JeChNLE1l'@;
put 'LFB0LGl0LEoscGUsdnQsamUpOyghMT09PVp0LmlzZW1wdHl8fCgxPT09Sj8hMSE9PWplLmJsYW5rcm93czpqZS5ibGFua3Jvd3MpKSYmKGh0W2t0KytdPVp0LnJvdyl9cmV0dXJuIGh0Lmxlbmd0aD1rdCxodH12YXIgamQ9LyIvZztmdW5jdGlvbiBSeChNLEYsTyxKLGllLHBlLHllLHZlKXtm'@;
put 'b3IodmFyIE1lPSEwLGplPVtdLFllPSIiLHFlPXJzKE8pLGl0PUYucy5jO2l0PD1GLmUuYzsrK2l0KWlmKEpbaXRdKXt2YXIgaHQ9dmUuZGVuc2U/KE1bT118fFtdKVtpdF06TVtKW2l0XStxZV07aWYobnVsbD09aHQpWWU9IiI7ZWxzZSBpZihudWxsIT1odC52KXtNZT0hMSxZZT0iIitXcyho'@;
put 'dCxudWxsLHZlKTtmb3IodmFyIGt0PTAsdXQ9MDtrdCE9PVllLmxlbmd0aDsrK2t0KWlmKCh1dD1ZZS5jaGFyQ29kZUF0KGt0KSk9PT1pZXx8dXQ9PT1wZXx8MzQ9PT11dCl7WWU9JyInK1llLnJlcGxhY2UoamQsJyIiJykrJyInO2JyZWFrfSJJRCI9PVllJiYoWWU9JyJJRCInKX1lbHNlIG51'@;
put 'bGw9PWh0LmZ8fGh0LkY/WWU9IiI6KE1lPSExLChZZT0iPSIraHQuZikuaW5kZXhPZigiLCIpPj0wJiYoWWU9JyInK1llLnJlcGxhY2UoamQsJyIiJykrJyInKSk7amUucHVzaChZZSl9cmV0dXJuITE9PT12ZS5ibGFua3Jvd3MmJk1lP251bGw6amUuam9pbih5ZSl9ZnVuY3Rpb24gTXUoTSxG'@;
put 'KXt2YXIgTz1bXSxKPUY/P3t9O2lmKG51bGw9PU18fG51bGw9PU1bIiFyZWYiXSlyZXR1cm4iIjt2YXIgaWU9Ym8oTVsiIXJlZiJdKSxwZT12b2lkIDAhPT1KLkZTP0ouRlM6IiwiLHllPXBlLmNoYXJDb2RlQXQoMCksdmU9dm9pZCAwIT09Si5SUz9KLlJTOiJcbiIsTWU9dmUuY2hhckNvZGVB'@;
put 'dCgwKSxqZT1uZXcgUmVnRXhwKCgifCI9PXBlPyJcXHwiOnBlKSsiKyQiKSxZZT0iIixxZT1bXTtKLmRlbnNlPUFycmF5LmlzQXJyYXkoTSk7Zm9yKHZhciBpdD1KLnNraXBIaWRkZW4mJk1bIiFjb2xzIl18fFtdLGh0PUouc2tpcEhpZGRlbiYmTVsiIXJvd3MiXXx8W10sa3Q9aWUucy5jO2t0'@;
put 'PD1pZS5lLmM7KytrdCkoaXRba3RdfHx7fSkuaGlkZGVufHwocWVba3RdPWZvKGt0KSk7Zm9yKHZhciB1dD1pZS5zLnI7dXQ8PWllLmUucjsrK3V0KShodFt1dF18fHt9KS5oaWRkZW58fG51bGwhPShZZT1SeChNLGllLHV0LHFlLHllLE1lLHBlLEopKSYmKEouc3RyaXAmJihZZT1ZZS5yZXBs'@;
put 'YWNlKGplLCIiKSksTy5wdXNoKFllK3ZlKSk7cmV0dXJuIGRlbGV0ZSBKLmRlbnNlLE8uam9pbigiIil9ZnVuY3Rpb24gT3goTSxGKXtGfHwoRj17fSksRi5GUz0iXHQiLEYuUlM9IlxuIjt2YXIgTz1NdShNLEYpO3JldHVybiB0eXBlb2YgY3B0YWJsZT4idSJ8fCJzdHJpbmciPT1GLnR5cGU/'@;
put 'TzoiXHhmZlx4ZmUiK2NwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsTywic3RyIil9ZnVuY3Rpb24gY3koTSl7dmFyIE8sRj0iIixKPSIiO2lmKG51bGw9PU18fG51bGw9PU1bIiFyZWYiXSlyZXR1cm5bXTt2YXIgdmUsaWU9Ym8oTVsiIXJlZiJdKSxwZT0iIix5ZT1bXSxNZT1bXSxqZT1BcnJh'@;
put 'eS5pc0FycmF5KE0pO2Zvcih2ZT1pZS5zLmM7dmU8PWllLmUuYzsrK3ZlKXllW3ZlXT1mbyh2ZSk7Zm9yKHZhciBZZT1pZS5zLnI7WWU8PWllLmUucjsrK1llKWZvcihwZT1ycyhZZSksdmU9aWUucy5jO3ZlPD1pZS5lLmM7Kyt2ZSlpZihGPXllW3ZlXStwZSxKPSIiLHZvaWQgMCE9PShPPWpl'@;
put 'PyhNW1llXXx8W10pW3ZlXTpNW0ZdKSl7aWYobnVsbCE9Ty5GKXtpZihGPU8uRiwhTy5mKWNvbnRpbnVlO0o9Ty5mLC0xPT1GLmluZGV4T2YoIjoiKSYmKEY9RisiOiIrRil9aWYobnVsbCE9Ty5mKUo9Ty5mO2Vsc2V7aWYoInoiPT1PLnQpY29udGludWU7aWYoIm4iPT1PLnQmJm51bGwhPU8u'@;
put 'dilKPSIiK08udjtlbHNlIGlmKCJiIj09Ty50KUo9Ty52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09Ty53KUo9IiciK08udztlbHNle2lmKHZvaWQgMD09PU8udiljb250aW51ZTtKPSJzIj09Ty50PyInIitPLnY6IiIrTy52fX1NZVtNZS5sZW5ndGhdPUYrIj0iK0p9cmV0dXJu'@;
put 'IE1lfWZ1bmN0aW9uIFI4KE0sRixPKXt2YXIgSj1PfHx7fSxpZT0rIUouc2tpcEhlYWRlcixwZT1NfHx7fSx5ZT0wLHZlPTA7aWYocGUmJm51bGwhPUoub3JpZ2luKWlmKCJudW1iZXIiPT10eXBlb2YgSi5vcmlnaW4peWU9Si5vcmlnaW47ZWxzZXt2YXIgTWU9InN0cmluZyI9PXR5cGVvZiBK'@;
put 'Lm9yaWdpbj9ocyhKLm9yaWdpbik6Si5vcmlnaW47eWU9TWUucix2ZT1NZS5jfXZhciBqZSxZZT1KU09OLnBhcnNlKCd7InMiOiB7ImMiOjAsICJyIjowfSwgImUiOiB7ImMiOjAsICJyIjowfX0nKTtpZihZZS5lLmM9dmUsWWUuZS5yPXllK0YubGVuZ3RoLTEraWUscGVbIiFyZWYiXSl7dmFy'@;
put 'IHFlPWJvKHBlWyIhcmVmIl0pO1llLmUuYz1NYXRoLm1heChZZS5lLmMscWUuZS5jKSxZZS5lLnI9TWF0aC5tYXgoWWUuZS5yLHFlLmUuciksLTE9PXllJiYoWWUuZS5yPSh5ZT1xZS5lLnIrMSkrRi5sZW5ndGgtMStpZSl9ZWxzZS0xPT15ZSYmKHllPTAsWWUuZS5yPUYubGVuZ3RoLTEraWUp'@;
put 'O3ZhciBpdD1KLmhlYWRlcnx8W10saHQ9MDtGLmZvckVhY2goZnVuY3Rpb24odXQsdnQpe2F0KHV0KS5mb3JFYWNoKGZ1bmN0aW9uKFB0KXstMT09KGh0PWl0LmluZGV4T2YoUHQpKSYmKGl0W2h0PWl0Lmxlbmd0aF09UHQpO3ZhciBEdD11dFtQdF0sQXQ9InoiLFp0PSIiLGduPURpKHtjOnZl'@;
put 'K2h0LHI6eWUrdnQraWV9KTtpZihqZT1CYy5zaGVldF9nZXRfY2VsbChwZSxnbiksIUR0fHwib2JqZWN0IiE9dHlwZW9mIER0fHxEdCBpbnN0YW5jZW9mIERhdGUpe2lmKCJudW1iZXIiPT10eXBlb2YgRHQ/QXQ9Im4iOiJib29sZWFuIj09dHlwZW9mIER0P0F0PSJiIjoic3RyaW5nIj09dHlw'@;
put 'ZW9mIER0P0F0PSJzIjpEdCBpbnN0YW5jZW9mIERhdGU/KEF0PSJkIixKLmNlbGxEYXRlc3x8KEF0PSJuIixEdD1HZShEdCkpLFp0PWplLnomJkMuaXNfZGF0ZShqZS56KT9qZS56OkouZGF0ZU5GfHxDLl90YWJsZVsxNF0pOm51bGw9PT1EdCYmSi5udWxsRXJyb3ImJihBdD0iZSIsRHQ9MCks'@;
put 'amU/KGplLnQ9QXQsamUudj1EdCxkZWxldGUgamUudyxkZWxldGUgamUuUixadCYmKGplLno9WnQpKTpwZVtnbl09amU9e3Q6QXQsdjpEdH0sWnQmJihqZS56PVp0KSxqZSYmamUuaCl0cnl7aWYoamUuUj1OdS5odG1sX3RvX3JzKGplLmgpLCFqZS52KXtqZS52PSIiO2Zvcih2YXIgcW49MDtx'@;
put 'bjxqZS5SLmxlbmd0aDsrK3FuKWplLnYrPWplLlJbcW5dLnZ8fCIifX1jYXRjaHt9fWVsc2UgcGVbZ25dPUR0fSl9KSxZZS5lLmM9TWF0aC5tYXgoWWUuZS5jLHZlK2l0Lmxlbmd0aC0xKTt2YXIga3Q9cnMoeWUpO2lmKGllKWZvcihodD0wO2h0PGl0Lmxlbmd0aDsrK2h0KXBlW2ZvKGh0K3Zl'@;
put 'KStrdF09e3Q6InMiLHY6aXRbaHRdfTtyZXR1cm4gcGVbIiFyZWYiXT1BaShZZSkscGV9dmFyIEJjPXtlbmNvZGVfY29sOmZvLGVuY29kZV9yb3c6cnMsZW5jb2RlX2NlbGw6RGksZW5jb2RlX3JhbmdlOkFpLGRlY29kZV9jb2w6WW8sZGVjb2RlX3Jvdzp2dSxzcGxpdF9jZWxsOmZ1bmN0aW9u'@;
put 'IERtKE0pe3JldHVybiBNLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOmhzLGRlY29kZV9yYW5nZTpIcyxmb3JtYXRfY2VsbDpXcyxnZXRfZm9ybXVsYWU6Y3ksbWFrZV9jc3Y6TXUsbWFrZV9qc29uOlYzLG1ha2VfZm9ybXVs'@;
put 'YWU6Y3ksaHRtbF90b19yczpOdS5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6RTEsc2hlZXRfYWRkX2pzb246Ujgsc2hlZXRfYWRkX2RvbTpYdSxhb2FfdG9fc2hlZXQ6d2gsanNvbl90b19zaGVldDpmdW5jdGlvbiBQeChNLEYpe3JldHVybiBSOChudWxsLE0sRil9LHRhYmxlX3RvX3NoZWV0'@;
put 'OlF2LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24gYngoTSxGKXtyZXR1cm4gcDAoUXYoTSxGKSxGKX0sc2hlZXRfdG9fY3N2Ok11LHNoZWV0X3RvX3R4dDpPeCxzaGVldF90b19qc29uOlYzLHNoZWV0X3RvX2h0bWw6TnUuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTpjeSxzaGVldF90b19y'@;
put 'b3dfb2JqZWN0X2FycmF5OlYzfTtmdW5jdGlvbiBGeChNLEYsTyxKLGllKXt2YXIgcGU7aWYoTS5zdHlsZSYmIShNLl9yYW5nZSYmKHBlPSJzdHJpbmciPT10eXBlb2YgTS5fcmFuZ2U/dy51dGlscy5kZWNvZGVfcmFuZ2UoTS5fcmFuZ2UpOk0uX3JhbmdlLE8uYz5wZS5lLmN8fE8uYzxwZS5z'@;
put 'LmN8fE8ucj5wZS5lLnJ8fE8ucjxwZS5zLnIpKSYmcGUpe3ZhciB5ZT1NLnN0eWxlLnN0eWxlO2lmKHllKXt5ZS53aG9sZVRhYmxlJiZCYy5hcHBseV9zdHlsZV9kZWx0YShKLHllLndob2xlVGFibGUpO2U6aWYoeWUuaGVhZGVyUm93KWlmKGllKXtpZihPLnIhPXBlLnMucilicmVhayBlO2Ru'@;
put 'KE0uc3R5bGUuY29saGVhZCl8fEJjLmFwcGx5X3N0eWxlX2RlbHRhKEoseWUuaGVhZGVyUm93KX1lbHNle2lmKE8uciE9cGUucy5yKWJyZWFrIGU7ZG4oTS5oZWFkZXIpfHxCYy5hcHBseV9zdHlsZV9kZWx0YShKLHllLmhlYWRlclJvdyl9fX19QmMudGVzdF9wYXNzd29yZD1mdW5jdGlvbiBQ'@;
put 'NShNLEYpe3ZhciBPPUJ1ZmZlci5mcm9tKE0uc2FsdCwiYmFzZTY0IiksSj1NLmFsZ28saWU9bWEoQnVmZmVyLmNvbmNhdChbTyxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLEYpKV0pLEopLHBlPUJ1ZmZlci5hbGxvYyg0KTtacyhwZSwwKTtmb3IodmFyIHllPTA7eWU8'@;
put 'TS5zcGluOysreWUpcGUubD0wLHBlLndyaXRlX3NoaWZ0KDQseWUpLGllPW1hKEJ1ZmZlci5jb25jYXQoW2llLHBlXSksSik7dmFyIHZlPUJ1ZmZlci5mcm9tKE0uaGFzaCwiYmFzZTY0Iik7cmV0dXJuIDA9PWllLmNvbXBhcmUodmUpfSxCYy5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIEN4KE0p'@;
put 'e3ZhciBGPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxPPUJ1ZmZlci5mcm9tKEYuc2FsdCwiYmFzZTY0IiksSj1GLmFsZ28saWU9bWEoQnVmZmVyLmNvbmNhdChbTyxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAw'@;
put 'LE0pKV0pLEopLHBlPUJ1ZmZlci5hbGxvYyg0KTtacyhwZSwwKTtmb3IodmFyIHllPTA7eWU8Ri5zcGluOysreWUpcGUubD0wLHBlLndyaXRlX3NoaWZ0KDQseWUpLGllPW1hKEJ1ZmZlci5jb25jYXQoW2llLHBlXSksSik7cmV0dXJuIEYuaGFzaD1pZS50b1N0cmluZygiYmFzZTY0IiksRn0s'@;
put 'QmMuc2hlZXRfc2V0X3JhbmdlX3N0eWxlPWZ1bmN0aW9uKE0sRixPKXtpZihPKXt2YXIgSj0ic3RyaW5nIj09dHlwZW9mIEY/Ym8oRik6RjtudWxsIT1KLnImJm51bGwhPUouYyYmKEo9e3M6SixlOkp9KTt2YXIgdmUsaWU9Si5zLnIscGU9MCx5ZT0iIixNZT1IcyhNWyIhcmVmIl18fCJBMSIp'@;
put 'O01lLnMucj5KLnMuciYmKE1lLnMucj1KLnMuciksTWUucy5jPkoucy5jJiYoTWUucy5jPUoucy5jKSxNZS5lLnI8Si5lLnImJihNZS5lLnI9Si5lLnIpLE1lLmUuYzxKLmUuYyYmKE1lLmUuYz1KLmUuYyksTVsiIXJlZiJdPUFpKE1lKTtmb3IodmFyIFllPUFycmF5LmlzQXJyYXkoTSk7aWU8'@;
put 'PUouZS5yOysraWUpZm9yKHBlPUoucy5jO3BlPD1KLmUuYzsrK3BlKVllPyhNW2llXXx8KE1baWVdPVtdKSxNW2llXVtwZV18fChNW2llXVtwZV09e3Q6InoifSksdmU9TVtpZV1bcGVdKTooTVt5ZT1EaSh7cjppZSxjOnBlfSldfHwoTVt5ZV09e3Q6InoifSksdmU9TVt5ZV0pLHZlLnN8fCh2'@;
put 'ZS5zPXt9KSxPYmplY3Qua2V5cyhPKS5mb3JFYWNoKGplKSx2ZS5zLnBhdHRlcm5UeXBlJiYhdmUucy5mZ0NvbG9yJiYoZGVsZXRlIHZlLnMucGF0dGVyblR5cGUsZGVsZXRlIHZlLnMuYmdDb2xvciksKHZlLnMuZmdDb2xvcnx8dmUucy5iZ0NvbG9yKSYmIm5vbmUiPT0odmUucy5wYXR0ZXJu'@;
put 'VHlwZXx8Im5vbmUiKSYmKHZlLnMucGF0dGVyblR5cGU9InNvbGlkIik7aWYoaWU9Si5zLnIsTy50b3B8fG51bGw9PT1PLnRvcClmb3IocGU9Si5zLmM7cGU8PUouZS5jOysrcGUpe2lmKFllKXtpZighTVtpZV0pY29udGludWU7dmU9TVtpZV1bcGVdfWVsc2UgeWU9RGkoe3I6aWUsYzpwZX0p'@;
put 'LHZlPU1beWVdO3ZlJiYobnVsbD09PU8udG9wP2RlbGV0ZSB2ZS5zLnRvcDp2ZS5zLnRvcD1YdChPLnRvcCkpfWlmKGllPUouZS5yLE8uYm90dG9tfHxudWxsPT09Ty5ib3R0b20pZm9yKHBlPUoucy5jO3BlPD1KLmUuYzsrK3BlKXtpZihZZSl7aWYoIU1baWVdKWNvbnRpbnVlO3ZlPU1baWVd'@;
put 'W3BlXX1lbHNlIHllPURpKHtyOmllLGM6cGV9KSx2ZT1NW3llXTt2ZSYmKG51bGw9PT1PLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209WHQoTy5ib3R0b20pKX1pZihwZT1KLnMuYyxPLmxlZnR8fG51bGw9PT1PLmxlZnQpZm9yKGllPUoucy5yO2llPD1KLmUucjsrK2ll'@;
put 'KXtpZihZZSl7aWYoIU1baWVdKWNvbnRpbnVlO3ZlPU1baWVdW3BlXX1lbHNlIHllPURpKHtyOmllLGM6cGV9KSx2ZT1NW3llXTt2ZSYmKG51bGw9PT1PLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9WHQoTy5sZWZ0KSl9aWYocGU9Si5lLmMsTy5yaWdodHx8bnVsbD09PU8ucmln'@;
put 'aHQpZm9yKGllPUoucy5yO2llPD1KLmUucjsrK2llKXtpZihZZSl7aWYoIU1baWVdKWNvbnRpbnVlO3ZlPU1baWVdW3BlXX1lbHNlIHllPURpKHtyOmllLGM6cGV9KSx2ZT1NW3llXTt2ZSYmKG51bGw9PT1PLnJpZ2h0P2RlbGV0ZSB2ZS5zLnJpZ2h0OnZlLnMucmlnaHQ9WHQoTy5yaWdodCkp'@;
put 'fX1mdW5jdGlvbiBqZShxZSl7aWYoInRvcCIhPXFlJiYiYm90dG9tIiE9cWUmJiJsZWZ0IiE9cWUmJiJyaWdodCIhPXFlKXtpZigieiI9PXFlKXJldHVybiB2b2lkKHZlLno9Ty56KTtpZigiYWxpZ25tZW50Ij09cWUpcmV0dXJuIHZvaWQodmUuc1txZV0/T2JqZWN0LmtleXMoT1txZV0pLmZv'@;
put 'ckVhY2goZnVuY3Rpb24oaXQpe3ZlLnNbcWVdW2l0XT1PW3FlXVtpdF19KTp2ZS5zW3FlXT1YdChPW3FlXSkpO2lmKCJpbmNvbCI9PXFlKXJldHVybiBwZT5KLnMuYyYmKG51bGw9PT1PLmxlZnQ/ZGVsZXRlIHZlLnMubGVmdDp2ZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBPW3FlXT9YdChP'@;
put 'W3FlXSk6T1txZV0pLHZvaWQocGU8Si5lLmMmJihudWxsPT09Ty5yaWdodD9kZWxldGUgdmUucy5yaWdodDp2ZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2YgT1txZV0/WHQoT1txZV0pOk9bcWVdKSk7aWYoImlucm93Ij09cWUpcmV0dXJuIGllPkoucy5yJiYobnVsbD09PU8udG9wP2RlbGV0'@;
put 'ZSB2ZS5zLnRvcDp2ZS5zLnRvcD0ib2JqZWN0Ij09dHlwZW9mIE9bcWVdP1h0KE9bcWVdKTpPW3FlXSksdm9pZChpZTxKLmUuciYmKG51bGw9PT1PLmJvdHRvbT9kZWxldGUgdmUucy5ib3R0b206dmUucy5ib3R0b209Im9iamVjdCI9PXR5cGVvZiBPW3FlXT9YdChPW3FlXSk6T1txZV0pKTtu'@;
put 'dWxsPT09T1txZV0/ZGVsZXRlIHZlLnNbcWVdOnZlLnNbcWVdPU9bcWVdJiZBcnJheS5pc0FycmF5KE9bcWVdKT9PW3FlXS5zbGljZSgpLm1hcChmdW5jdGlvbihpdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBpdD9YdChpdCk6aXR9KToib2JqZWN0Ij09dHlwZW9mIE9bcWVdP1h0KE9bcWVd'@;
put 'KTpPW3FlXX19fSxCYy5hcHBseV9zdHlsZV9kZWx0YT1mdW5jdGlvbihNLEYpe1sic3oiLCJib2xkIiwiaXRhbGljIiwidW5kZXJsaW5lIiwic3RyaWtlIiwibmFtZSIsInZhbGlnbiJdLmZvckVhY2goZnVuY3Rpb24oTyl7dmFyIEo9TzsiYmdDb2xvciI9PU8/Sj0iZmdDb2xvciI6ImZnQ29s'@;
put 'b3IiPT1PJiYoSj0iYmdDb2xvciIpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChGLE8pJiYobnVsbD09PUZbT10/ZGVsZXRlIE1bSl06bnVsbCE9RltPXSYmKE1bSl09RltPXSkpfSksWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJhbGlnbm1lbnQiLCJwcm90'@;
put 'ZWN0aW9uIiwiY29sb3IiLCJmZ0NvbG9yIiwiYmdDb2xvciJdLmZvckVhY2goZnVuY3Rpb24oTyl7T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEYsTykmJihudWxsPT09RltPXT9kZWxldGUgTVtPXTpudWxsIT1GW09dJiYoTVtPXT1YdChGW09dKSkpfSl9LEJjLmdldF9j'@;
put 'b21wdXRlZF9zdHlsZT1mdW5jdGlvbihNLEYpeyJzdHJpbmciPT10eXBlb2YgRiYmKEY9dy51dGlscy5kZWNvZGVfY2VsbChGKSk7dmFyIE89QXJyYXkuaXNBcnJheShNKT8oTVtGLnJdfHxbXSlbRi5jXTpNW3cudXRpbHMuZW5jb2RlX2NlbGwoRildLEo9WHQoTyYmTy5zfHx7fSk7cmV0dXJu'@;
put 'IE1bIiF0YWJsZXMiXSYmTVsiIXRhYmxlcyJdLmZvckVhY2goZnVuY3Rpb24oaWUpe0Z4KGllLDAsRixKKX0pLE1bIiFwaXZvdHMiXSYmTVsiIXBpdm90cyJdLmZvckVhY2goZnVuY3Rpb24oaWUpe0Z4KGllLDAsRixKLCEwKX0pLEp9O3ZhciBQOD17fTtCYy5jZWxsX2FycmF5X3RvX2Nzdl9y'@;
put 'b3c9ZnVuY3Rpb24oTSxGKXt2YXIgTz1GPz97fSxKPXZvaWQgMCE9PU8uRlM/Ty5GUzoiLCIsaWU9Si5jaGFyQ29kZUF0KDApLHBlPXZvaWQgMCE9PU8uUlM/Ty5SUzoiXG4iLHllPXBlLmNoYXJDb2RlQXQoMCksdmU9UDhbSl18fChQOFtKXT1uZXcgUmVnRXhwKCgifCI9PUo/IlxcfCI6Sikr'@;
put 'IiskIikpLE1lPWZ1bmN0aW9uIE84KE0sRixPLEosaWUpe2Zvcih2YXIgcGU9ITAseWU9W10sdmU9IiIsTWU9MDtNZTw9TS5sZW5ndGgtMTsrK01lKXt2YXIgamU9TVtNZV07aWYobnVsbD09amUpdmU9IiI7ZWxzZSBpZihudWxsIT1qZS52KXtwZT0hMSx2ZT0iIitXcyhqZSxudWxsLGllKTtm'@;
put 'b3IodmFyIFllPTAscWU9MDtZZSE9PXZlLmxlbmd0aDsrK1llKWlmKChxZT12ZS5jaGFyQ29kZUF0KFllKSk9PT1GfHxxZT09PU98fDM0PT09cWUpe3ZlPSciJyt2ZS5yZXBsYWNlKGpkLCciIicpKyciJzticmVha30iSUQiPT12ZSYmKHZlPSciSUQiJyl9ZWxzZSBudWxsPT1qZS5mfHxqZS5G'@;
put 'P3ZlPSIiOihwZT0hMSwodmU9Ij0iK2plLmYpLmluZGV4T2YoIiwiKT49MCYmKHZlPSciJyt2ZS5yZXBsYWNlKGpkLCciIicpKyciJykpO3llLnB1c2godmUpfXJldHVybiExPT09aWUuYmxhbmtyb3dzJiZwZT9udWxsOnllLmpvaW4oSil9KE0saWUseWUsSixPKTtyZXR1cm4gTy5zdHJpcCYm'@;
put 'KE1lPU1lLnJlcGxhY2UodmUsIiIpKSxNZStwZX0sZnVuY3Rpb24oTSl7ZnVuY3Rpb24gTyhwZSx5ZSx2ZSl7cmV0dXJuIG51bGwhPXBlW3llXT9wZVt5ZV06cGVbeWVdPXZlfWZ1bmN0aW9uIEoocGUseWUsdmUpe2lmKCJzdHJpbmciPT10eXBlb2YgeWUpe2lmKEFycmF5LmlzQXJyYXkocGUp'@;
put 'KXt2YXIgTWU9aHMoeWUpO3JldHVybiBwZVtNZS5yXXx8KHBlW01lLnJdPVtdKSxwZVtNZS5yXVtNZS5jXXx8KHBlW01lLnJdW01lLmNdPXt0OiJ6In0pfXJldHVybiBwZVt5ZV18fChwZVt5ZV09e3Q6InoifSl9cmV0dXJuIEoocGUsRGkoIm51bWJlciIhPXR5cGVvZiB5ZT95ZTp7cjp5ZSxj'@;
put 'OnZlfHwwfSkpfU0uY29uc3RzPU0uY29uc3RzfHx7fSxNLnNoZWV0X2dldF9jZWxsPUosTS5ib29rX25ldz1mdW5jdGlvbigpe3JldHVybntTaGVldE5hbWVzOltdLFNoZWV0czp7fX19LE0uYm9va19hcHBlbmRfc2hlZXQ9ZnVuY3Rpb24ocGUseWUsdmUpe2lmKCF2ZSlmb3IodmFyIE1lPTE7'@;
put 'TWU8PTY1NTM1JiYtMSE9cGUuU2hlZXROYW1lcy5pbmRleE9mKHZlPSJTaGVldCIrTWUpOysrTWUpO2lmKF80KHZlKSxwZS5TaGVldE5hbWVzLmluZGV4T2YodmUpPj0wKXRocm93IG5ldyBFcnJvcigiV29ya3NoZWV0IHdpdGggbmFtZSB8Iit2ZSsifCBhbHJlYWR5IGV4aXN0cyEiKTtwZS5T'@;
put 'aGVldE5hbWVzLnB1c2godmUpLHBlLlNoZWV0c1t2ZV09eWV9LE0uYm9va19zZXRfc2hlZXRfdmlzaWJpbGl0eT1mdW5jdGlvbihwZSx5ZSx2ZSl7TyhwZSwiV29ya2Jvb2siLHt9KSxPKHBlLldvcmtib29rLCJTaGVldHMiLFtdKTt2YXIgTWU9ZnVuY3Rpb24gaWUocGUseWUpe2lmKCJudW1i'@;
put 'ZXIiPT10eXBlb2YgeWUpe2lmKHllPj0wJiZwZS5TaGVldE5hbWVzLmxlbmd0aD55ZSlyZXR1cm4geWU7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIreWUpfWlmKCJzdHJpbmciPT10eXBlb2YgeWUpe3ZhciB2ZT1wZS5TaGVldE5hbWVzLmluZGV4T2YoeWUpO2lmKHZl'@;
put 'Pi0xKXJldHVybiB2ZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIreWUrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK3llKyJ8Iil9KHBlLHllKTtzd2l0Y2goTyhwZS5Xb3JrYm9vay5TaGVldHMsTWUse30pLHZlKXtjYXNlIDA6'@;
put 'Y2FzZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3ZlKX1wZS5Xb3JrYm9vay5TaGVldHNbTWVdLkhpZGRlbj12ZX0sZnVuY3Rpb24gRihwZSl7cGUuZm9yRWFjaChmdW5jdGlvbih5ZSl7TS5jb25zdHNbeWVb'@;
put 'MF1dPXllWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLE0uY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihwZSx5ZSl7cmV0dXJuIHBlLno9eWUscGV9LE0uY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0'@;
put 'aW9uKHBlLHllLHZlKXtyZXR1cm4geWU/KHBlLmw9e1RhcmdldDp5ZX0sdmUmJihwZS5sLlRvb2x0aXA9dmUpLHBlLnN8fChwZS5zPXt9KSxwZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgcGUubCxwZS5zJiZwZS5zLmNvbG9yJiYxMD09cGUucy5jb2xvci50aGVtZSYmZGVsZXRlIHBl'@;
put 'LnMuY29sb3IpLHBlfSxNLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24ocGUseWUsdmUpe3JldHVybiBNLmNlbGxfc2V0X2h5cGVybGluayhwZSwiIyIreWUsdmUpfSxNLmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24ocGUseWUsdmUpe3BlLmN8fChwZS5jPVtdKSxwZS5jLnB1c2go'@;
put 'e3Q6eWUsYTp2ZXx8IlNoZWV0SlMifSl9LE0uc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24ocGUseWUsdmUpe2Zvcih2YXIgTWU9InN0cmluZyIhPXR5cGVvZiB5ZT95ZTpibyh5ZSksamU9InN0cmluZyI9PXR5cGVvZiB5ZT95ZTpBaSh5ZSksWWU9TWUucy5yO1llPD1NZS5lLnI7'@;
put 'KytZZSlmb3IodmFyIHFlPU1lLnMuYztxZTw9TWUuZS5jOysrcWUpe3ZhciBpdD1KKHBlLFllLHFlKTtpdC50PSJuIixpdC5GPWplLGRlbGV0ZSBpdC52LFllPT1NZS5zLnImJnFlPT1NZS5zLmMmJihpdC5mPXZlKX1yZXR1cm4gcGV9fShCYyksZGUmJmZ1bmN0aW9uKCl7dmFyIE09Uig3MDQ1'@;
put 'KS5SZWFkYWJsZTt3LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihpZSxwZSl7dmFyIHllPU0oe29iamVjdE1vZGU6ITB9KTtpZihudWxsPT1pZXx8bnVsbD09aWVbIiFyZWYiXSlyZXR1cm4geWUucHVzaChudWxsKSx5ZTt2YXIgdmU9e3Q6Im4iLHY6MH0sTWU9MCxqZT0xLFllPVtdLHFlPTAs'@;
put 'aXQ9IiIsaHQ9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxrdD1wZXx8e30sdXQ9bnVsbCE9a3QucmFuZ2U/a3QucmFuZ2U6aWVbIiFyZWYiXTtzd2l0Y2goMT09PWt0LmhlYWRlcj9NZT0xOiJBIj09PWt0LmhlYWRlcj9NZT0yOkFycmF5LmlzQXJyYXkoa3QuaGVhZGVyKSYmKE1lPTMpLHR5'@;
put 'cGVvZiB1dCl7Y2FzZSJzdHJpbmciOmh0PWJvKHV0KTticmVhaztjYXNlIm51bWJlciI6KGh0PWJvKGllWyIhcmVmIl0pKS5zLnI9dXQ7YnJlYWs7ZGVmYXVsdDpodD11dH1NZT4wJiYoamU9MCk7dmFyIHZ0PXJzKGh0LnMuciksUHQ9W10sRHQ9MCxBdD1BcnJheS5pc0FycmF5KGllKSxadD1o'@;
put 'dC5zLnIsZ249MCxxbj0wO2ZvcihBdCYmIWllW1p0XSYmKGllW1p0XT1bXSksZ249aHQucy5jO2duPD1odC5lLmM7Kytnbilzd2l0Y2goUHRbZ25dPWZvKGduKSx2ZT1BdD9pZVtadF1bZ25dOmllW1B0W2duXSt2dF0sTWUpe2Nhc2UgMTpZZVtnbl09Z24taHQucy5jO2JyZWFrO2Nhc2UgMjpZ'@;
put 'ZVtnbl09UHRbZ25dO2JyZWFrO2Nhc2UgMzpZZVtnbl09a3QuaGVhZGVyW2duLWh0LnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09dmUmJih2ZT17dzoiX19FTVBUWSIsdDoicyJ9KSxpdD1xZT1Xcyh2ZSxudWxsLGt0KSxEdD0wLHFuPTA7cW48WWUubGVuZ3RoOysrcW4pWWVbcW5dPT1p'@;
put 'dCYmKGl0PXFlKyJfIisgKytEdCk7WWVbZ25dPWl0fXJldHVybiBadD1odC5zLnIramUseWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZihadD5odC5lLnIpcmV0dXJuIHllLnB1c2gobnVsbCk7Zm9yKDtadDw9aHQuZS5yOyl7dmFyIHVuPUl4KGllLGh0LFp0LFB0LE1lLFllLEF0LGt0KTtpZigrK1p0'@;
put 'LCExPT09dW4uaXNlbXB0eXx8KDE9PT1NZT8hMSE9PWt0LmJsYW5rcm93czprdC5ibGFua3Jvd3MpKXt5ZS5wdXNoKHVuLnJvdyk7YnJlYWt9fX0seWV9LHRvX2h0bWw6ZnVuY3Rpb24oaWUscGUpe3ZhciB5ZT1NKCksdmU9cGV8fHt9LGplPW51bGwhPXZlLmZvb3Rlcj92ZS5mb290ZXI6TnUu'@;
put 'RU5EO3llLnB1c2gobnVsbCE9dmUuaGVhZGVyP3ZlLmhlYWRlcjpOdS5CRUdJTik7dmFyIFllPUhzKGllWyIhcmVmIl0pO3ZlLmRlbnNlPUFycmF5LmlzQXJyYXkoaWUpLHllLnB1c2goTnUuX3ByZWFtYmxlKGllLFllLHZlKSk7dmFyIHFlPVllLnMucixpdD0hMSxodD1bXTtyZXR1cm4geWUu'@;
put 'X3JlYWQ9ZnVuY3Rpb24oKXtpZihxZT5ZZS5lLnIpcmV0dXJuIGl0fHwoaXQ9ITAseWUucHVzaCgiPC90YWJsZT4iK2plKSkseWUucHVzaChudWxsKTtmb3IoO3FlPD1ZZS5lLnI7KXt5ZS5wdXNoKE51Ll9yb3coaWUsWWUscWUsdmUsaHQsIiIpKSwrK3FlO2JyZWFrfX0seWV9LHRvX2Nzdjpm'@;
put 'dW5jdGlvbihpZSxwZSl7dmFyIHllPU0oKSx2ZT1wZT8/e307aWYobnVsbD09aWV8fG51bGw9PWllWyIhcmVmIl0pcmV0dXJuIHllLnB1c2gobnVsbCkseWU7dmFyIE1lPWJvKGllWyIhcmVmIl0pLGplPXZvaWQgMCE9PXZlLkZTP3ZlLkZTOiIsIixZZT1qZS5jaGFyQ29kZUF0KDApLHFlPXZv'@;
put 'aWQgMCE9PXZlLlJTP3ZlLlJTOiJcbiIsaXQ9cWUuY2hhckNvZGVBdCgwKSxodD1uZXcgUmVnRXhwKCgifCI9PWplPyJcXHwiOmplKSsiKyQiKSxrdD0iIix1dD1bXTt2ZS5kZW5zZT1BcnJheS5pc0FycmF5KGllKTtmb3IodmFyIHZ0PXZlLnNraXBIaWRkZW4mJmllWyIhY29scyJdfHxbXSxQ'@;
put 'dD12ZS5za2lwSGlkZGVuJiZpZVsiIXJvd3MiXXx8W10sRHQ9TWUucy5jO0R0PD1NZS5lLmM7KytEdCkodnRbRHRdfHx7fSkuaGlkZGVufHwodXRbRHRdPWZvKER0KSk7dmFyIEF0PU1lLnMucixadD0hMTtyZXR1cm4geWUuX3JlYWQ9ZnVuY3Rpb24oKXtpZighWnQpcmV0dXJuIFp0PSEwLHll'@;
put 'LnB1c2goIlx1ZmVmZiIpO2Zvcig7QXQ8PU1lLmUucjspaWYoKytBdCwhKFB0W0F0LTFdfHx7fSkuaGlkZGVuJiZudWxsIT0oa3Q9UngoaWUsTWUsQXQtMSx1dCxZZSxpdCxqZSx2ZSkpKXt2ZS5zdHJpcCYmKGt0PWt0LnJlcGxhY2UoaHQsIiIpKSx5ZS5wdXNoKGt0K3FlKTticmVha31yZXR1'@;
put 'cm4gQXQ+TWUuZS5yP3llLnB1c2gobnVsbCk6dm9pZCAwfSx5ZX19fSgpLHcucGFyc2VfeGxzY2ZiPVh2LHcucGFyc2VfemlwPWI0LHcucmVhZD1DNCx3LnJlYWRGaWxlPVBPLHcucmVhZEZpbGVTeW5jPVBPLHcud3JpdGU9VjUsdy53cml0ZUZpbGU9bHksdy53cml0ZUZpbGVTeW5jPWx5LHcu'@;
put 'd3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gTk8oTSxGLE8sSil7dmFyIGllPU98fHt9O2llLnR5cGU9ImZpbGUiLGllLmZpbGU9TSxheShpZSksaWUudHlwZT0iYnVmZmVyIjt2YXIgcGU9SjtyZXR1cm4gcGUgaW5zdGFuY2VvZiBGdW5jdGlvbnx8KHBlPU8pLE5lLndyaXRlRmlsZShNLFY1KEYs'@;
put 'aWUpLHBlKX0sdy5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlvbiBCZShNKXtzd2l0Y2goTSl7Y2FzZSAwOlRlKCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBBZSgpe3ZhciBNPW5ldyBEYXRlO250PWV0LmdldFRpbWUoKSs2ZTQqKE0uZ2V0VGltZXpvbmVPZmZzZXQoKS1ldC5nZXRUaW1lem9uZU9m'@;
put 'ZnNldCgpKTt2YXIgRj1NLmdldFRpbWV6b25lT2Zmc2V0KCk7R2U9ZnVuY3Rpb24oSixpZSl7dmFyIHBlPUouZ2V0VGltZSgpO3JldHVybiBpZSYmKHBlLT0xMjYzMTY4ZTUpLChwZS0oZXQuZ2V0VGltZSgpKzZlNCooSi5nZXRUaW1lem9uZU9mZnNldCgpLWV0LmdldFRpbWV6b25lT2Zmc2V0'@;
put 'KCkpKSkvODY0ZTV9LGR0PWZ1bmN0aW9uKEope3ZhciBpZT1uZXcgRGF0ZTtyZXR1cm4gaWUuc2V0VGltZSgyNCpKKjYwKjYwKjFlMytudCksaWUuZ2V0VGltZXpvbmVPZmZzZXQoKSE9PUYmJmllLnNldFRpbWUoaWUuZ2V0VGltZSgpKzZlNCooaWUuZ2V0VGltZXpvbmVPZmZzZXQoKS1GKSks'@;
put 'aWV9fSgpfX0sdy51dGlscz1CYyx3LlNTRj1DLHR5cGVvZiBMZTwidSImJih3LkNGQj1MZSl9KFNlKX0sNDk2MDk6KCRlLFNlLFIpPT57dmFyIGVlPVNlO2VlLmJpZ251bT1SKDk2ODY3KSxlZS5kZWZpbmU9UigxNjYyNikuZGVmaW5lLGVlLmJhc2U9UigxNTA2NiksZWUuY29uc3RhbnRzPVIo'@;
put 'NDc3NDApLGVlLmRlY29kZXJzPVIoOTE1NTgpLGVlLmVuY29kZXJzPVIoMjI3MTQpfSwxNjYyNjooJGUsU2UsUik9Pnt2YXIgZWU9Uig0OTYwOSksYj1SKDcxOTkzKTtmdW5jdGlvbiBYKHcsQSl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PUEsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJz'@;
put 'PXt9fVNlLmRlZmluZT1mdW5jdGlvbihBLEQpe3JldHVybiBuZXcgWChBLEQpfSxYLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oQSl7dmFyIEQ7dHJ5e0Q9Uig4NjYxKS5ydW5JblRoaXNDb250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5f'@;
put 'aW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoe0Q9ZnVuY3Rpb24oVSl7dGhpcy5faW5pdE5hbWVkKFUpfX1yZXR1cm4gYihELEEpLEQucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oVSl7QS5jYWxsKHRoaXMsVSl9LG5ldyBEKHRoaXMpfSxYLnByb3RvdHlwZS5fZ2V0RGVjb2Rl'@;
put 'cj1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShBPUF8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbQV09dGhpcy5fY3JlYXRlTmFtZWQoZWUuZGVjb2RlcnNbQV0pKSx0aGlzLmRlY29kZXJzW0FdfSxYLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oQSxE'@;
put 'LFApe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKEQpLmRlY29kZShBLFApfSxYLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbihBKXtyZXR1cm4gdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eShBPUF8fCJkZXIiKXx8KHRoaXMuZW5jb2RlcnNbQV09dGhpcy5fY3JlYXRlTmFtZWQo'@;
put 'ZWUuZW5jb2RlcnNbQV0pKSx0aGlzLmVuY29kZXJzW0FdfSxYLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oQSxELFApe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEQpLmVuY29kZShBLFApfX0sOTcyOTA6KCRlLFNlLFIpPT57dmFyIGVlPVIoNzE5OTMpLGI9UigxNTA2NikuUmVwb3J0ZXIs'@;
put 'bT1SKDgzODM4KS5CdWZmZXI7ZnVuY3Rpb24gWChBLEQpe2IuY2FsbCh0aGlzLEQpLG0uaXNCdWZmZXIoQSk/KHRoaXMuYmFzZT1BLHRoaXMub2Zmc2V0PTAsdGhpcy5sZW5ndGg9QS5sZW5ndGgpOnRoaXMuZXJyb3IoIklucHV0IG5vdCBCdWZmZXIiKX1mdW5jdGlvbiB3KEEsRCl7aWYoQXJy'@;
put 'YXkuaXNBcnJheShBKSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9QS5tYXAoZnVuY3Rpb24oUCl7cmV0dXJuIFAgaW5zdGFuY2VvZiB3fHwoUD1uZXcgdyhQLEQpKSx0aGlzLmxlbmd0aCs9UC5sZW5ndGgsUH0sdGhpcyk7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIEEpe2lmKCEoMDw9QSYm'@;
put 'QTw9MjU1KSlyZXR1cm4gRC5lcnJvcigibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZSIpO3RoaXMudmFsdWU9QSx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBBKXRoaXMudmFsdWU9QSx0aGlzLmxlbmd0aD1tLmJ5dGVMZW5ndGgoQSk7ZWxzZXtpZighbS5pc0J1'@;
put 'ZmZlcihBKSlyZXR1cm4gRC5lcnJvcigiVW5zdXBwb3J0ZWQgdHlwZTogIit0eXBlb2YgQSk7dGhpcy52YWx1ZT1BLHRoaXMubGVuZ3RoPUEubGVuZ3RofX1lZShYLGIpLFNlLnQ9WCxYLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRl'@;
put 'cjpiLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxYLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKEQpe3ZhciBQPW5ldyBYKHRoaXMuYmFzZSk7cmV0dXJuIFAub2Zmc2V0PUQub2Zmc2V0LFAubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PUQub2Zmc2V0LGIucHJvdG90eXBl'@;
put 'LnJlc3RvcmUuY2FsbCh0aGlzLEQucmVwb3J0ZXIpLFB9LFgucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sWC5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKEQpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0'@;
put 'aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IoRHx8IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpfSxYLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKEQsUCl7aWYoISh0aGlzLm9mZnNldCtEPD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoUHx8'@;
put 'IkRlY29kZXJCdWZmZXIgb3ZlcnJ1biIpO3ZhciBVPW5ldyBYKHRoaXMuYmFzZSk7cmV0dXJuIFUuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxVLm9mZnNldD10aGlzLm9mZnNldCxVLmxlbmd0aD10aGlzLm9mZnNldCtELHRoaXMub2Zmc2V0Kz1ELFV9LFgucHJvdG90eXBl'@;
put 'LnJhdz1mdW5jdGlvbihEKXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKEQ/RC5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxTZS5kPXcsdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihELFApe3JldHVybiBEfHwoRD1uZXcgbSh0aGlzLmxlbmd0aCkpLFB8fChQPTApLDA9PT10aGlz'@;
put 'Lmxlbmd0aHx8KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKFUpe1Uuam9pbihELFApLFArPVUubGVuZ3RofSk6KCJudW1iZXIiPT10eXBlb2YgdGhpcy52YWx1ZT9EW1BdPXRoaXMudmFsdWU6InN0cmluZyI9PXR5cGVvZiB0aGlzLnZhbHVl'@;
put 'P0Qud3JpdGUodGhpcy52YWx1ZSxQKTptLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkoRCxQKSxQKz10aGlzLmxlbmd0aCkpLER9fSwxNTA2NjooJGUsU2UsUik9Pnt2YXIgZWU9U2U7ZWUuUmVwb3J0ZXI9Uig4NTY5NykuYSxlZS5EZWNvZGVyQnVmZmVyPVIoOTcyOTAp'@;
put 'LnQsZWUuRW5jb2RlckJ1ZmZlcj1SKDk3MjkwKS5kLGVlLk5vZGU9UigzNDMyMCl9LDM0MzIwOigkZSxTZSxSKT0+e3ZhciBlZT1SKDE1MDY2KS5SZXBvcnRlcixiPVIoMTUwNjYpLkVuY29kZXJCdWZmZXIsbT1SKDE1MDY2KS5EZWNvZGVyQnVmZmVyLFg9UigzOTIxMCksdz1bInNlcSIsInNl'@;
put 'cW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJpc282NDZzdHIiLCJudW1zdHIiLCJv'@;
put 'Y3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLEE9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJdLmNvbmNhdCh3KTtmdW5jdGlvbiBQ'@;
put 'KEksRSl7dmFyIGs9e307dGhpcy5fYmFzZVN0YXRlPWssay5lbmM9SSxrLnBhcmVudD1FfHxudWxsLGsuY2hpbGRyZW49bnVsbCxrLnRhZz1udWxsLGsuYXJncz1udWxsLGsucmV2ZXJzZUFyZ3M9bnVsbCxrLmNob2ljZT1udWxsLGsub3B0aW9uYWw9ITEsay5hbnk9ITEsay5vYmo9ITEsay51'@;
put 'c2U9bnVsbCxrLnVzZURlY29kZXI9bnVsbCxrLmtleT1udWxsLGsuZGVmYXVsdD1udWxsLGsuZXhwbGljaXQ9bnVsbCxrLmltcGxpY2l0PW51bGwsay5jb250YWlucz1udWxsLGsucGFyZW50fHwoay5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfSRlLmV4cG9ydHM9UDt2YXIgVT1bImVuYyIs'@;
put 'InBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlucyJdO1AucHJvdG90eXBlLmNsb25l'@;
put 'PWZ1bmN0aW9uKCl7dmFyIEU9dGhpcy5fYmFzZVN0YXRlLGs9e307VS5mb3JFYWNoKGZ1bmN0aW9uKE4pe2tbTl09RVtOXX0pO3ZhciBCPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGsucGFyZW50KTtyZXR1cm4gQi5fYmFzZVN0YXRlPWssQn0sUC5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2'@;
put 'YXIgRT10aGlzLl9iYXNlU3RhdGU7QS5mb3JFYWNoKGZ1bmN0aW9uKGspe3RoaXNba109ZnVuY3Rpb24oKXt2YXIgTj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gRS5jaGlsZHJlbi5wdXNoKE4pLE5ba10uYXBwbHkoTixhcmd1bWVudHMpfX0sdGhpcyl9LFAucHJvdG90eXBl'@;
put 'Ll9pbml0PWZ1bmN0aW9uKEUpe3ZhciBrPXRoaXMuX2Jhc2VTdGF0ZTtYKG51bGw9PT1rLnBhcmVudCksRS5jYWxsKHRoaXMpLGsuY2hpbGRyZW49ay5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oQil7cmV0dXJuIEIuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxYLmVxdWFsKGsu'@;
put 'Y2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxQLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihFKXt2YXIgaz10aGlzLl9iYXNlU3RhdGUsQj1FLmZpbHRlcihmdW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIHRoaXMuY29uc3Ry'@;
put 'dWN0b3J9LHRoaXMpO0U9RS5maWx0ZXIoZnVuY3Rpb24oTil7cmV0dXJuIShOIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1CLmxlbmd0aCYmKFgobnVsbD09PWsuY2hpbGRyZW4pLGsuY2hpbGRyZW49QixCLmZvckVhY2goZnVuY3Rpb24oTil7Ti5fYmFzZVN0YXRl'@;
put 'LnBhcmVudD10aGlzfSx0aGlzKSksMCE9PUUubGVuZ3RoJiYoWChudWxsPT09ay5hcmdzKSxrLmFyZ3M9RSxrLnJldmVyc2VBcmdzPUUubWFwKGZ1bmN0aW9uKE4pe2lmKCJvYmplY3QiIT10eXBlb2YgTnx8Ti5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1cm4gTjt2YXIgVj17fTtyZXR1cm4g'@;
put 'T2JqZWN0LmtleXMoTikuZm9yRWFjaChmdW5jdGlvbihaKXtaPT0oMHxaKSYmKFp8PTApLFZbTltaXV09Wn0pLFZ9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIsIl9kZWNvZGVOdWxsIiwiX2RlY29k'@;
put 'ZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNoKGZ1bmN0aW9uKEkpe1AucHJvdG90'@;
put 'eXBlW0ldPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKEkrIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLHcuZm9yRWFjaChmdW5jdGlvbihJKXtQLnByb3RvdHlwZVtJXT1mdW5jdGlvbigpe3ZhciBrPXRoaXMuX2Jhc2VTdGF0ZSxC'@;
put 'PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIFgobnVsbD09PWsudGFnKSxrLnRhZz1JLHRoaXMuX3VzZUFyZ3MoQiksdGhpc319KSxQLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oRSl7WChFKTt2YXIgaz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFgobnVsbD09'@;
put 'PWsudXNlKSxrLnVzZT1FLHRoaXN9LFAucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxQLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oRSl7dmFyIGs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBYKG51bGw9PT1rLmRl'@;
put 'ZmF1bHQpLGsuZGVmYXVsdD1FLGsub3B0aW9uYWw9ITAsdGhpc30sUC5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oRSl7dmFyIGs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBYKG51bGw9PT1rLmV4cGxpY2l0JiZudWxsPT09ay5pbXBsaWNpdCksay5leHBsaWNpdD1FLHRoaXN9LFAucHJv'@;
put 'dG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEUpe3ZhciBrPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gWChudWxsPT09ay5leHBsaWNpdCYmbnVsbD09PWsuaW1wbGljaXQpLGsuaW1wbGljaXQ9RSx0aGlzfSxQLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgRT10aGlzLl9iYXNlU3RhdGUs'@;
put 'az1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBFLm9iaj0hMCwwIT09ay5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoayksdGhpc30sUC5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKEUpe3ZhciBrPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gWChudWxsPT09ay5rZXkp'@;
put 'LGsua2V5PUUsdGhpc30sUC5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sUC5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEUpe3ZhciBrPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gWChudWxsPT09ay5jaG9pY2UpLGsuY2hvaWNl'@;
put 'PUUsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhFKS5tYXAoZnVuY3Rpb24oQil7cmV0dXJuIEVbQl19KSksdGhpc30sUC5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oRSl7dmFyIGs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBYKG51bGw9PT1rLnVzZSksay5jb250YWlucz1FLHRoaXN9'@;
put 'LFAucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oRSxrKXt2YXIgQj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PUIucGFyZW50KXJldHVybiBFLndyYXBSZXN1bHQoQi5jaGlsZHJlblswXS5fZGVjb2RlKEUsaykpO3ZhciBxLE49Qi5kZWZhdWx0LFY9ITAsWj1udWxsO2lmKG51bGwhPT1C'@;
put 'LmtleSYmKFo9RS5lbnRlcktleShCLmtleSkpLEIub3B0aW9uYWwpe3ZhciBXPW51bGw7aWYobnVsbCE9PUIuZXhwbGljaXQ/Vz1CLmV4cGxpY2l0Om51bGwhPT1CLmltcGxpY2l0P1c9Qi5pbXBsaWNpdDpudWxsIT09Qi50YWcmJihXPUIudGFnKSxudWxsIT09V3x8Qi5hbnkpe2lmKFY9dGhp'@;
put 'cy5fcGVla1RhZyhFLFcsQi5hbnkpLEUuaXNFcnJvcihWKSlyZXR1cm4gVn1lbHNle3ZhciB6PUUuc2F2ZSgpO3RyeXtudWxsPT09Qi5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhCLnRhZyxFLGspOnRoaXMuX2RlY29kZUNob2ljZShFLGspLFY9ITB9Y2F0Y2h7Vj0hMX1FLnJlc3RvcmUo'@;
put 'eil9fWlmKEIub2JqJiZWJiYocT1FLmVudGVyT2JqZWN0KCkpLFYpe2lmKG51bGwhPT1CLmV4cGxpY2l0KXt2YXIgUT10aGlzLl9kZWNvZGVUYWcoRSxCLmV4cGxpY2l0KTtpZihFLmlzRXJyb3IoUSkpcmV0dXJuIFE7RT1RfXZhciB0ZT1FLm9mZnNldDtpZihudWxsPT09Qi51c2UmJm51bGw9'@;
put 'PT1CLmNob2ljZSl7Qi5hbnkmJih6PUUuc2F2ZSgpKTt2YXIgYWU9dGhpcy5fZGVjb2RlVGFnKEUsbnVsbCE9PUIuaW1wbGljaXQ/Qi5pbXBsaWNpdDpCLnRhZyxCLmFueSk7aWYoRS5pc0Vycm9yKGFlKSlyZXR1cm4gYWU7Qi5hbnk/Tj1FLnJhdyh6KTpFPWFlfWlmKGsmJmsudHJhY2smJm51'@;
put 'bGwhPT1CLnRhZyYmay50cmFjayhFLnBhdGgoKSx0ZSxFLmxlbmd0aCwidGFnZ2VkIiksayYmay50cmFjayYmbnVsbCE9PUIudGFnJiZrLnRyYWNrKEUucGF0aCgpLEUub2Zmc2V0LEUubGVuZ3RoLCJjb250ZW50IiksQi5hbnl8fChOPW51bGw9PT1CLmNob2ljZT90aGlzLl9kZWNvZGVHZW5l'@;
put 'cmljKEIudGFnLEUsayk6dGhpcy5fZGVjb2RlQ2hvaWNlKEUsaykpLEUuaXNFcnJvcihOKSlyZXR1cm4gTjtpZighQi5hbnkmJm51bGw9PT1CLmNob2ljZSYmbnVsbCE9PUIuY2hpbGRyZW4mJkIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihsZSl7bGUuX2RlY29kZShFLGspfSksQi5jb250'@;
put 'YWlucyYmKCJvY3RzdHIiPT09Qi50YWd8fCJiaXRzdHIiPT09Qi50YWcpKXt2YXIgc2U9bmV3IG0oTik7Tj10aGlzLl9nZXRVc2UoQi5jb250YWlucyxFLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShzZSxrKX19cmV0dXJuIEIub2JqJiZWJiYoTj1FLmxlYXZlT2JqZWN0KHEpKSxudWxs'@;
put 'PT09Qi5rZXl8fG51bGw9PT1OJiYhMCE9PVY/bnVsbCE9PVomJkUuZXhpdEtleShaKTpFLmxlYXZlS2V5KFosQi5rZXksTiksTn0sUC5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24oRSxrLEIpe3ZhciBOPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4ic2VxIj09PUV8fCJzZXQiPT09'@;
put 'RT9udWxsOiJzZXFvZiI9PT1FfHwic2V0b2YiPT09RT90aGlzLl9kZWNvZGVMaXN0KGssRSxOLmFyZ3NbMF0sQik6L3N0ciQvLnRlc3QoRSk/dGhpcy5fZGVjb2RlU3RyKGssRSxCKToib2JqaWQiPT09RSYmTi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKGssTi5hcmdzWzBdLE4uYXJnc1sxXSxC'@;
put 'KToib2JqaWQiPT09RT90aGlzLl9kZWNvZGVPYmppZChrLG51bGwsbnVsbCxCKToiZ2VudGltZSI9PT1FfHwidXRjdGltZSI9PT1FP3RoaXMuX2RlY29kZVRpbWUoayxFLEIpOiJudWxsXyI9PT1FP3RoaXMuX2RlY29kZU51bGwoayxCKToiYm9vbCI9PT1FP3RoaXMuX2RlY29kZUJvb2woayxC'@;
put 'KToib2JqRGVzYyI9PT1FP3RoaXMuX2RlY29kZVN0cihrLEUsQik6ImludCI9PT1FfHwiZW51bSI9PT1FP3RoaXMuX2RlY29kZUludChrLE4uYXJncyYmTi5hcmdzWzBdLEIpOm51bGwhPT1OLnVzZT90aGlzLl9nZXRVc2UoTi51c2Usay5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoayxC'@;
put 'KTprLmVycm9yKCJ1bmtub3duIHRhZzogIitFKX0sUC5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbihFLGspe3ZhciBCPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQi51c2VEZWNvZGVyPXRoaXMuX3VzZShFLGspLFgobnVsbD09PUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksQi51'@;
put 'c2VEZWNvZGVyPUIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLEIuaW1wbGljaXQhPT1CLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKEIudXNlRGVjb2Rlcj1CLnVzZURlY29kZXIuY2xvbmUoKSxCLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1CLmlt'@;
put 'cGxpY2l0KSxCLnVzZURlY29kZXJ9LFAucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24oRSxrKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsTj1udWxsLFY9ITE7cmV0dXJuIE9iamVjdC5rZXlzKEIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKFope3ZhciBXPUUuc2F2ZSgpLHo9Qi5jaG9p'@;
put 'Y2VbWl07dHJ5e3ZhciBxPXouX2RlY29kZShFLGspO2lmKEUuaXNFcnJvcihxKSlyZXR1cm4hMTtOPXt0eXBlOlosdmFsdWU6cX0sVj0hMH1jYXRjaHtyZXR1cm4gRS5yZXN0b3JlKFcpLCExfXJldHVybiEwfSx0aGlzKSxWP046RS5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LFAucHJv'@;
put 'dG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgYihFLHRoaXMucmVwb3J0ZXIpfSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEUsayxCKXt2YXIgTj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PU4uZGVmYXVsdHx8Ti5kZWZhdWx0IT09RSl7'@;
put 'dmFyIFY9dGhpcy5fZW5jb2RlVmFsdWUoRSxrLEIpO2lmKHZvaWQgMCE9PVYmJiF0aGlzLl9za2lwRGVmYXVsdChWLGssQikpcmV0dXJuIFZ9fSxQLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oRSxrLEIpe3ZhciBOPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Ti5wYXJlbnQp'@;
put 'cmV0dXJuIE4uY2hpbGRyZW5bMF0uX2VuY29kZShFLGt8fG5ldyBlZSk7dmFyIHo9bnVsbDtpZih0aGlzLnJlcG9ydGVyPWssTi5vcHRpb25hbCYmdm9pZCAwPT09RSl7aWYobnVsbD09PU4uZGVmYXVsdClyZXR1cm47RT1OLmRlZmF1bHR9dmFyIFY9bnVsbCxaPSExO2lmKE4uYW55KXo9dGhp'@;
put 'cy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihFKTtlbHNlIGlmKE4uY2hvaWNlKXo9dGhpcy5fZW5jb2RlQ2hvaWNlKEUsayk7ZWxzZSBpZihOLmNvbnRhaW5zKVY9dGhpcy5fZ2V0VXNlKE4uY29udGFpbnMsQikuX2VuY29kZShFLGspLFo9ITA7ZWxzZSBpZihOLmNoaWxkcmVuKVY9Ti5jaGlsZHJl'@;
put 'bi5tYXAoZnVuY3Rpb24odGUpe2lmKCJudWxsXyI9PT10ZS5fYmFzZVN0YXRlLnRhZylyZXR1cm4gdGUuX2VuY29kZShudWxsLGssRSk7aWYobnVsbD09PXRlLl9iYXNlU3RhdGUua2V5KXJldHVybiBrLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBhZT1rLmVudGVyS2V5'@;
put 'KHRlLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIEUpcmV0dXJuIGsuZXJyb3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBzZT10ZS5fZW5jb2RlKEVbdGUuX2Jhc2VTdGF0ZS5rZXldLGssRSk7cmV0dXJuIGsubGVhdmVLZXkoYWUp'@;
put 'LHNlfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24odGUpe3JldHVybiB0ZX0pLFY9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihWKTtlbHNlIGlmKCJzZXFvZiI9PT1OLnRhZ3x8InNldG9mIj09PU4udGFnKXtpZighTi5hcmdzfHwxIT09Ti5hcmdzLmxlbmd0aClyZXR1cm4gay5lcnJvcigiVG9v'@;
put 'IG1hbnkgYXJncyBmb3IgOiAiK04udGFnKTtpZighQXJyYXkuaXNBcnJheShFKSlyZXR1cm4gay5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO3ZhciBXPXRoaXMuY2xvbmUoKTtXLl9iYXNlU3RhdGUuaW1wbGljaXQ9bnVsbCxWPXRoaXMuX2NyZWF0ZUVuY29k'@;
put 'ZXJCdWZmZXIoRS5tYXAoZnVuY3Rpb24odGUpe3JldHVybiB0aGlzLl9nZXRVc2UodGhpcy5fYmFzZVN0YXRlLmFyZ3NbMF0sRSkuX2VuY29kZSh0ZSxrKX0sVykpfWVsc2UgbnVsbCE9PU4udXNlP3o9dGhpcy5fZ2V0VXNlKE4udXNlLEIpLl9lbmNvZGUoRSxrKTooVj10aGlzLl9lbmNvZGVQ'@;
put 'cmltaXRpdmUoTi50YWcsRSksWj0hMCk7aWYoIU4uYW55JiZudWxsPT09Ti5jaG9pY2Upe3ZhciBxPW51bGwhPT1OLmltcGxpY2l0P04uaW1wbGljaXQ6Ti50YWcsUT1udWxsPT09Ti5pbXBsaWNpdD8idW5pdmVyc2FsIjoiY29udGV4dCI7bnVsbD09PXE/bnVsbD09PU4udXNlJiZrLmVycm9y'@;
put 'KCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09Ti51c2UmJih6PXRoaXMuX2VuY29kZUNvbXBvc2l0ZShxLFosUSxWKSl9cmV0dXJuIG51bGwhPT1OLmV4cGxpY2l0JiYoej10aGlzLl9lbmNvZGVDb21wb3NpdGUoTi5leHBsaWNpdCwhMSwiY29udGV4dCIs'@;
put 'eikpLHp9LFAucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24oRSxrKXt2YXIgQj10aGlzLl9iYXNlU3RhdGUsTj1CLmNob2ljZVtFLnR5cGVdO3JldHVybiBOfHxYKCExLEUudHlwZSsiIG5vdCBmb3VuZCBpbiAiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKEIuY2hvaWNlKSkp'@;
put 'LE4uX2VuY29kZShFLnZhbHVlLGspfSxQLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKEUsayl7dmFyIEI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KEUpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoayxFKTtpZigib2JqaWQiPT09RSYmQi5hcmdzKXJldHVybiB0'@;
put 'aGlzLl9lbmNvZGVPYmppZChrLEIucmV2ZXJzZUFyZ3NbMF0sQi5hcmdzWzFdKTtpZigib2JqaWQiPT09RSlyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoayxudWxsLG51bGwpO2lmKCJnZW50aW1lIj09PUV8fCJ1dGN0aW1lIj09PUUpcmV0dXJuIHRoaXMuX2VuY29kZVRpbWUoayxFKTtpZigi'@;
put 'bnVsbF8iPT09RSlyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKCJpbnQiPT09RXx8ImVudW0iPT09RSlyZXR1cm4gdGhpcy5fZW5jb2RlSW50KGssQi5hcmdzJiZCLnJldmVyc2VBcmdzWzBdKTtpZigiYm9vbCI9PT1FKXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGspO2lmKCJvYmpEZXNj'@;
put 'Ij09PUUpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihrLEUpO3Rocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdGFnOiAiK0UpfSxQLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24oRSl7cmV0dXJuL15bMC05IF0qJC8udGVzdChFKX0sUC5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rp'@;
put 'b24oRSl7cmV0dXJuL15bQS1aYS16MC05ICdcKFwpXCssXC1cLlwvOj1cP10qJC8udGVzdChFKX19LDg1Njk3OigkZSxTZSxSKT0+e3ZhciBlZT1SKDcxOTkzKTtmdW5jdGlvbiBiKFgpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpYfHx7fSxlcnJvcnM6'@;
put 'W119fWZ1bmN0aW9uIG0oWCx3KXt0aGlzLnBhdGg9WCx0aGlzLnJldGhyb3codyl9U2UuYT1iLGIucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBtfSxiLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZTty'@;
put 'ZXR1cm57b2JqOncub2JqLHBhdGhMZW46dy5wYXRoLmxlbmd0aH19LGIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odyl7dmFyIEE9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtBLm9iaj13Lm9iaixBLnBhdGg9QS5wYXRoLnNsaWNlKDAsdy5wYXRoTGVuKX0sYi5wcm90b3R5cGUuZW50ZXJLZXk9'@;
put 'ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHcpfSxiLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHcpe3ZhciBBPXRoaXMuX3JlcG9ydGVyU3RhdGU7QS5wYXRoPUEucGF0aC5zbGljZSgwLHctMSl9LGIucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0'@;
put 'aW9uKHcsQSxEKXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh3KSxudWxsIT09UC5vYmomJihQLm9ialtBXT1EKX0sYi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbigiLyIpfSxiLnByb3RvdHlwZS5l'@;
put 'bnRlck9iamVjdD1mdW5jdGlvbigpe3ZhciB3PXRoaXMuX3JlcG9ydGVyU3RhdGUsQT13Lm9iajtyZXR1cm4gdy5vYmo9e30sQX0sYi5wcm90b3R5cGUubGVhdmVPYmplY3Q9ZnVuY3Rpb24odyl7dmFyIEE9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxEPUEub2JqO3JldHVybiBBLm9iaj13LER9LGIu'@;
put 'cHJvdG90eXBlLmVycm9yPWZ1bmN0aW9uKHcpe3ZhciBBLEQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQPXcgaW5zdGFuY2VvZiBtO2lmKEE9UD93Om5ldyBtKEQucGF0aC5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIlsiK0pTT04uc3RyaW5naWZ5KFUpKyJdIn0pLmpvaW4oIiIpLHcubWVzc2FnZXx8'@;
put 'dyx3LnN0YWNrKSwhRC5vcHRpb25zLnBhcnRpYWwpdGhyb3cgQTtyZXR1cm4gUHx8RC5lcnJvcnMucHVzaChBKSxBfSxiLnByb3RvdHlwZS53cmFwUmVzdWx0PWZ1bmN0aW9uKHcpe3ZhciBBPXRoaXMuX3JlcG9ydGVyU3RhdGU7cmV0dXJuIEEub3B0aW9ucy5wYXJ0aWFsP3tyZXN1bHQ6dGhp'@;
put 'cy5pc0Vycm9yKHcpP251bGw6dyxlcnJvcnM6QS5lcnJvcnN9Ond9LGVlKG0sRXJyb3IpLG0ucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odyl7aWYodGhpcy5tZXNzYWdlPXcrIiBhdDogIisodGhpcy5wYXRofHwiKHNoYWxsb3cpIiksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9y'@;
put 'LmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsbSksIXRoaXMuc3RhY2spdHJ5e3Rocm93IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpfWNhdGNoKEEpe3RoaXMuc3RhY2s9QS5zdGFja31yZXR1cm4gdGhpc319LDM2MjgzOigkZSxTZSxSKT0+e3ZhciBlZT1SKDQ3NzQwKTtTZS50YWdDbGFzcz17MDoi'@;
put 'dW5pdmVyc2FsIiwxOiJhcHBsaWNhdGlvbiIsMjoiY29udGV4dCIsMzoicHJpdmF0ZSJ9LFNlLnRhZ0NsYXNzQnlOYW1lPWVlLl9yZXZlcnNlKFNlLnRhZ0NsYXNzKSxTZS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9i'@;
put 'amlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJp'@;
put 'YTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LFNlLnRhZ0J5TmFtZT1lZS5fcmV2ZXJzZShTZS50YWcpfSw0Nzc0MDooJGUsU2UsUik9Pnt2'@;
put 'YXIgZWU9U2U7ZWUuX3JldmVyc2U9ZnVuY3Rpb24obSl7dmFyIFg9e307cmV0dXJuIE9iamVjdC5rZXlzKG0pLmZvckVhY2goZnVuY3Rpb24odyl7KDB8dyk9PXcmJih3fD0wKSxYW21bd11dPXd9KSxYfSxlZS5kZXI9UigzNjI4Myl9LDU1OTQxOigkZSxTZSxSKT0+e3ZhciBlZT1SKDcxOTkz'@;
put 'KSxiPVIoNDk2MDkpLG09Yi5iYXNlLFg9Yi5iaWdudW0sdz1iLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gQShJKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9SS5uYW1lLHRoaXMuZW50aXR5PUksdGhpcy50cmVlPW5ldyBELHRoaXMudHJlZS5faW5pdChJLmJvZHkpfWZ1bmN0aW9uIEQoSSl7'@;
put 'bS5Ob2RlLmNhbGwodGhpcywiZGVyIixJKX1mdW5jdGlvbiBQKEksRSl7dmFyIGs9SS5yZWFkVUludDgoRSk7aWYoSS5pc0Vycm9yKGspKXJldHVybiBrO3ZhciBCPXcudGFnQ2xhc3Nbaz4+Nl0sTj0hKDMyJmspO2lmKDMxJn5rKWsmPTMxO2Vsc2V7dmFyIFY9aztmb3Ioaz0wOyEoMTI4Jn5W'@;
put 'KTspe2lmKFY9SS5yZWFkVUludDgoRSksSS5pc0Vycm9yKFYpKXJldHVybiBWO2s8PD03LGt8PTEyNyZWfX1yZXR1cm57Y2xzOkIscHJpbWl0aXZlOk4sdGFnOmssdGFnU3RyOncudGFnW2tdfX1mdW5jdGlvbiBVKEksRSxrKXt2YXIgQj1JLnJlYWRVSW50OChrKTtpZihJLmlzRXJyb3IoQikp'@;
put 'cmV0dXJuIEI7aWYoIUUmJjEyOD09PUIpcmV0dXJuIG51bGw7aWYoISgxMjgmQikpcmV0dXJuIEI7dmFyIE49MTI3JkI7aWYoTj40KXJldHVybiBJLmVycm9yKCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nIik7Qj0wO2Zvcih2YXIgVj0wO1Y8TjtWKyspe0I8PD04O3ZhciBaPUkucmVhZFVJ'@;
put 'bnQ4KGspO2lmKEkuaXNFcnJvcihaKSlyZXR1cm4gWjtCfD1afXJldHVybiBCfSRlLmV4cG9ydHM9QSxBLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oRSxrKXtyZXR1cm4gRSBpbnN0YW5jZW9mIG0uRGVjb2RlckJ1ZmZlcnx8KEU9bmV3IG0uRGVjb2RlckJ1ZmZlcihFLGspKSx0aGlzLnRy'@;
put 'ZWUuX2RlY29kZShFLGspfSxlZShELG0uTm9kZSksRC5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24oRSxrLEIpe2lmKEUuaXNFbXB0eSgpKXJldHVybiExO3ZhciBOPUUuc2F2ZSgpLFY9UChFLCdGYWlsZWQgdG8gcGVlayB0YWc6ICInK2srJyInKTtyZXR1cm4gRS5pc0Vycm9yKFYpP1Y6'@;
put 'KEUucmVzdG9yZShOKSxWLnRhZz09PWt8fFYudGFnU3RyPT09a3x8Vi50YWdTdHIrIm9mIj09PWt8fEIpfSxELnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKEUsayxCKXt2YXIgTj1QKEUsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mICInK2srJyInKTtpZihFLmlzRXJyb3IoTikpcmV0'@;
put 'dXJuIE47dmFyIFY9VShFLE4ucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiAiJytrKyciJyk7aWYoRS5pc0Vycm9yKFYpKXJldHVybiBWO2lmKCFCJiZOLnRhZyE9PWsmJk4udGFnU3RyIT09ayYmTi50YWdTdHIrIm9mIiE9PWspcmV0dXJuIEUuZXJyb3IoJ0ZhaWxlZCB0byBt'@;
put 'YXRjaCB0YWc6ICInK2srJyInKTtpZihOLnByaW1pdGl2ZXx8bnVsbCE9PVYpcmV0dXJuIEUuc2tpcChWLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogIicraysnIicpO3ZhciBaPUUuc2F2ZSgpLFc9dGhpcy5fc2tpcFVudGlsRW5kKEUsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVu'@;
put 'Z3RoIGJvZHk6ICInK3RoaXMudGFnKyciJyk7cmV0dXJuIEUuaXNFcnJvcihXKT9XOihWPUUub2Zmc2V0LVoub2Zmc2V0LEUucmVzdG9yZShaKSxFLnNraXAoViwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK2srJyInKSl9LEQucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24o'@;
put 'RSxrKXtmb3IoOzspe3ZhciBCPVAoRSxrKTtpZihFLmlzRXJyb3IoQikpcmV0dXJuIEI7dmFyIFYsTj1VKEUsQi5wcmltaXRpdmUsayk7aWYoRS5pc0Vycm9yKE4pKXJldHVybiBOO2lmKFY9Qi5wcmltaXRpdmV8fG51bGwhPT1OP0Uuc2tpcChOKTp0aGlzLl9za2lwVW50aWxFbmQoRSxrKSxF'@;
put 'LmlzRXJyb3IoVikpcmV0dXJuIFY7aWYoImVuZCI9PT1CLnRhZ1N0cilicmVha319LEQucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKEUsayxCLE4pe2Zvcih2YXIgVj1bXTshRS5pc0VtcHR5KCk7KXt2YXIgWj10aGlzLl9wZWVrVGFnKEUsImVuZCIpO2lmKEUuaXNFcnJvcihaKSly'@;
put 'ZXR1cm4gWjt2YXIgVz1CLmRlY29kZShFLCJkZXIiLE4pO2lmKEUuaXNFcnJvcihXKSYmWilicmVhaztWLnB1c2goVyl9cmV0dXJuIFZ9LEQucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24oRSxrKXtpZigiYml0c3RyIj09PWspe3ZhciBCPUUucmVhZFVJbnQ4KCk7cmV0dXJuIEUuaXNF'@;
put 'cnJvcihCKT9COnt1bnVzZWQ6QixkYXRhOkUucmF3KCl9fWlmKCJibXBzdHIiPT09ayl7dmFyIE49RS5yYXcoKTtpZihOLmxlbmd0aCUyPT0xKXJldHVybiBFLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaCIpO2Zvcih2YXIgVj0iIixaPTA7'@;
put 'WjxOLmxlbmd0aC8yO1orKylWKz1TdHJpbmcuZnJvbUNoYXJDb2RlKE4ucmVhZFVJbnQxNkJFKDIqWikpO3JldHVybiBWfWlmKCJudW1zdHIiPT09ayl7dmFyIFc9RS5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoVyk/VzpFLmVycm9yKCJEZWNvZGluZyBv'@;
put 'ZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMiKX1pZigib2N0c3RyIj09PWspcmV0dXJuIEUucmF3KCk7aWYoIm9iakRlc2MiPT09aylyZXR1cm4gRS5yYXcoKTtpZigicHJpbnRzdHIiPT09ayl7dmFyIHo9RS5yYXcoKS50b1N0cmluZygiYXNjaWkiKTtyZXR1'@;
put 'cm4gdGhpcy5faXNQcmludHN0cih6KT96OkUuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9cmV0dXJuL3N0ciQvLnRlc3Qoayk/RS5yYXcoKS50b1N0cmluZygpOkUuZXJyb3IoIkRlY29kaW5nIG9mIHN0cmluZyB0eXBl'@;
put 'OiAiK2srIiB1bnN1cHBvcnRlZCIpfSxELnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24oRSxrLEIpe2Zvcih2YXIgTixWPVtdLFo9MDshRS5pc0VtcHR5KCk7KXt2YXIgVz1FLnJlYWRVSW50OCgpO1o8PD03LFp8PTEyNyZXLDEyOCZXfHwoVi5wdXNoKFopLFo9MCl9aWYoMTI4Jlcm'@;
put 'JlYucHVzaChaKSxOPUI/VjpbVlswXS80MHwwLFZbMF0lNDBdLmNvbmNhdChWLnNsaWNlKDEpKSxrKXt2YXIgUT1rW04uam9pbigiICIpXTt2b2lkIDA9PT1RJiYoUT1rW04uam9pbigiLiIpXSksdm9pZCAwIT09USYmKE49USl9cmV0dXJuIE59LEQucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1'@;
put 'bmN0aW9uKEUsayl7dmFyIEI9RS5yYXcoKS50b1N0cmluZygpO2lmKCJnZW50aW1lIj09PWspdmFyIE49MHxCLnNsaWNlKDAsNCksVj0wfEIuc2xpY2UoNCw2KSxaPTB8Qi5zbGljZSg2LDgpLFc9MHxCLnNsaWNlKDgsMTApLHo9MHxCLnNsaWNlKDEwLDEyKSxxPTB8Qi5zbGljZSgxMiwxNCk7'@;
put 'ZWxzZXtpZigidXRjdGltZSIhPT1rKXJldHVybiBFLmVycm9yKCJEZWNvZGluZyAiK2srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Tj0wfEIuc2xpY2UoMCwyKSxWPTB8Qi5zbGljZSgyLDQpLFo9MHxCLnNsaWNlKDQsNiksVz0wfEIuc2xpY2UoNiw4KSx6PTB8Qi5zbGljZSg4LDEw'@;
put 'KSxxPTB8Qi5zbGljZSgxMCwxMiksTj1OPDcwPzJlMytOOjE5MDArTn1yZXR1cm4gRGF0ZS5VVEMoTixWLTEsWixXLHoscSwwKX0sRC5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24oRSl7cmV0dXJuIG51bGx9LEQucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKEUpe3ZhciBr'@;
put 'PUUucmVhZFVJbnQ4KCk7cmV0dXJuIEUuaXNFcnJvcihrKT9rOjAhPT1rfSxELnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKEUsayl7dmFyIEI9RS5yYXcoKSxOPW5ldyBYKEIpO3JldHVybiBrJiYoTj1rW04udG9TdHJpbmcoMTApXXx8TiksTn0sRC5wcm90b3R5cGUuX3VzZT1mdW5j'@;
put 'dGlvbihFLGspe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBFJiYoRT1FKGspKSxFLl9nZXREZWNvZGVyKCJkZXIiKS50cmVlfX0sOTE1NTg6KCRlLFNlLFIpPT57dmFyIGVlPVNlO2VlLmRlcj1SKDU1OTQxKSxlZS5wZW09Uig1OTMxNil9LDU5MzE2OigkZSxTZSxSKT0+e3ZhciBlZT1SKDcx'@;
put 'OTkzKSxiPVIoODM4MzgpLkJ1ZmZlcixtPVIoNTU5NDEpO2Z1bmN0aW9uIFgodyl7bS5jYWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9ZWUoWCxtKSwkZS5leHBvcnRzPVgsWC5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKEEsRCl7Zm9yKHZhciBQPUEudG9TdHJpbmcoKS5zcGxpdCgvW1xy'@;
put 'XG5dKy9nKSxVPUQubGFiZWwudG9VcHBlckNhc2UoKSxJPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxFPS0xLGs9LTEsQj0wO0I8UC5sZW5ndGg7QisrKXt2YXIgTj1QW0JdLm1hdGNoKEkpO2lmKG51bGwhPT1OJiZOWzJdPT09VSl7aWYoLTEhPT1FKXtpZigiRU5EIiE9PU5b'@;
put 'MV0pYnJlYWs7az1CO2JyZWFrfWlmKCJCRUdJTiIhPT1OWzFdKWJyZWFrO0U9Qn19aWYoLTE9PT1FfHwtMT09PWspdGhyb3cgbmV3IEVycm9yKCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiAiK1UpO3ZhciBWPVAuc2xpY2UoRSsxLGspLmpvaW4oIiIpO1YucmVwbGFjZSgvW15hLXowLTlc'@;
put 'K1wvPV0rL2dpLCIiKTt2YXIgWj1uZXcgYihWLCJiYXNlNjQiKTtyZXR1cm4gbS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxaLEQpfX0sNzIxOTM6KCRlLFNlLFIpPT57dmFyIGVlPVIoNzE5OTMpLGI9Uig4MzgzOCkuQnVmZmVyLG09Uig0OTYwOSksWD1tLmJhc2Usdz1tLmNvbnN0YW50'@;
put 'cy5kZXI7ZnVuY3Rpb24gQShJKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9SS5uYW1lLHRoaXMuZW50aXR5PUksdGhpcy50cmVlPW5ldyBELHRoaXMudHJlZS5faW5pdChJLmJvZHkpfWZ1bmN0aW9uIEQoSSl7WC5Ob2RlLmNhbGwodGhpcywiZGVyIixJKX1mdW5jdGlvbiBQKEkpe3JldHVy'@;
put 'biBJPDEwPyIwIitJOkl9JGUuZXhwb3J0cz1BLEEucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihFLGspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShFLGspLmpvaW4oKX0sZWUoRCxYLk5vZGUpLEQucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24oRSxrLEIsTil7dmFyIHos'@;
put 'Vj1mdW5jdGlvbiBVKEksRSxrLEIpe3ZhciBOO2lmKCJzZXFvZiI9PT1JP0k9InNlcSI6InNldG9mIj09PUkmJihJPSJzZXQiKSx3LnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShJKSlOPXcudGFnQnlOYW1lW0ldO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBJfHwoMHxJKSE9PUkpcmV0dXJu'@;
put 'IEIuZXJyb3IoIlVua25vd24gdGFnOiAiK0kpO049SX1yZXR1cm4gTj49MzE/Qi5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEV8fChOfD0zMiksTnw9dy50YWdDbGFzc0J5TmFtZVtrfHwidW5pdmVyc2FsIl08PDYpfShFLGssQix0aGlzLnJlcG9ydGVy'@;
put 'KTtpZihOLmxlbmd0aDwxMjgpcmV0dXJuKHo9bmV3IGIoMikpWzBdPVYselsxXT1OLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFt6LE5dKTtmb3IodmFyIFo9MSxXPU4ubGVuZ3RoO1c+PTI1NjtXPj49OClaKys7KHo9bmV3IGIoMitaKSlbMF09Vix6WzFdPTEyOHxaLFc9MSta'@;
put 'O2Zvcih2YXIgcT1OLmxlbmd0aDtxPjA7Vy0tLHE+Pj04KXpbV109MjU1JnE7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW3osTl0pfSxELnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEUsayl7aWYoImJpdHN0ciI9PT1rKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVy'@;
put 'QnVmZmVyKFswfEUudW51c2VkLEUuZGF0YV0pO2lmKCJibXBzdHIiPT09ayl7Zm9yKHZhciBCPW5ldyBiKDIqRS5sZW5ndGgpLE49MDtOPEUubGVuZ3RoO04rKylCLndyaXRlVUludDE2QkUoRS5jaGFyQ29kZUF0KE4pLDIqTik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoQil9'@;
put 'cmV0dXJuIm51bXN0ciI9PT1rP3RoaXMuX2lzTnVtc3RyKEUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09'@;
put 'az90aGlzLl9pc1ByaW50c3RyKEUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoRSk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBz'@;
put 'cGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChrKXx8Im9iakRlc2MiPT09az90aGlzLl9jcmVhdGVFbmNv'@;
put 'ZGVyQnVmZmVyKEUpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiAiK2srIiB1bnN1cHBvcnRlZCIpfSxELnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oRSxrLEIpe2lmKCJzdHJpbmciPT10eXBlb2YgRSl7aWYoIWspcmV0dXJuIHRoaXMucmVw'@;
put 'b3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmQiKTtpZighay5oYXNPd25Qcm9wZXJ0eShFKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtFPWtbRV0uc3BsaXQoL1tcc1wuXSsv'@;
put 'Zyk7Zm9yKHZhciBOPTA7TjxFLmxlbmd0aDtOKyspRVtOXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkoRSkpZm9yKEU9RS5zbGljZSgpLE49MDtOPEUubGVuZ3RoO04rKylFW05dfD0wO2lmKCFBcnJheS5pc0FycmF5KEUpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNo'@;
put 'b3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5zdHJpbmdpZnkoRSkpO2lmKCFCKXtpZihFWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7RS5zcGxpY2UoMCwyLDQwKkVbMF0rRVsxXSl9dmFy'@;
put 'IFY9MDtmb3IoTj0wO048RS5sZW5ndGg7TisrKXt2YXIgWj1FW05dO2ZvcihWKys7Wj49MTI4O1o+Pj03KVYrK312YXIgVz1uZXcgYihWKSx6PVcubGVuZ3RoLTE7Zm9yKE49RS5sZW5ndGgtMTtOPj0wO04tLSlmb3IoV1t6LS1dPTEyNyYoWj1FW05dKTsoWj4+PTcpPjA7KVdbei0tXT0xMjh8'@;
put 'MTI3Jlo7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVyl9LEQucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEUsayl7dmFyIEIsTj1uZXcgRGF0ZShFKTtyZXR1cm4iZ2VudGltZSI9PT1rP0I9W1AoTi5nZXRGdWxsWWVhcigpKSxQKE4uZ2V0VVRDTW9udGgoKSsxKSxQ'@;
put 'KE4uZ2V0VVRDRGF0ZSgpKSxQKE4uZ2V0VVRDSG91cnMoKSksUChOLmdldFVUQ01pbnV0ZXMoKSksUChOLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1rP0I9W1AoTi5nZXRGdWxsWWVhcigpJTEwMCksUChOLmdldFVUQ01vbnRoKCkrMSksUChOLmdldFVUQ0Rh'@;
put 'dGUoKSksUChOLmdldFVUQ0hvdXJzKCkpLFAoTi5nZXRVVENNaW51dGVzKCkpLFAoTi5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitrKyIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihCLCJv'@;
put 'Y3RzdHIiKX0sRC5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEQucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oRSxrKXtpZigic3RyaW5nIj09dHlwZW9mIEUpe2lmKCFrKXJldHVybiB0aGlzLnJlcG9y'@;
put 'dGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIWsuaGFzT3duUHJvcGVydHkoRSkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiAiK0pTT04uc3RyaW5naWZ5KEUpKTtFPWtbRV19'@;
put 'aWYoIm51bWJlciIhPXR5cGVvZiBFJiYhYi5pc0J1ZmZlcihFKSl7dmFyIEI9RS50b0FycmF5KCk7IUUuc2lnbiYmMTI4JkJbMF0mJkIudW5zaGlmdCgwKSxFPW5ldyBiKEIpfWlmKGIuaXNCdWZmZXIoRSkpe3ZhciBOPUUubGVuZ3RoOzA9PT1FLmxlbmd0aCYmTisrO3ZhciBaPW5ldyBiKE4p'@;
put 'O3JldHVybiBFLmNvcHkoWiksMD09PUUubGVuZ3RoJiYoWlswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFopfWlmKEU8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEUpO2lmKEU8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLEVdKTtO'@;
put 'PTE7Zm9yKHZhciBWPUU7Vj49MjU2O1Y+Pj04KU4rKztmb3IoVj0oWj1uZXcgQXJyYXkoTikpLmxlbmd0aC0xO1Y+PTA7Vi0tKVpbVl09MjU1JkUsRT4+PTg7cmV0dXJuIDEyOCZaWzBdJiZaLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgYihaKSl9LEQucHJvdG90'@;
put 'eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEUpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEU/MjU1OjApfSxELnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEUsayl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEUmJihFPUUoaykpLEUuX2dldEVuY29kZXIoImRlciIpLnRyZWV9'@;
put 'LEQucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihFLGssQil7dmFyIFYsTj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PU4uZGVmYXVsdClyZXR1cm4hMTt2YXIgWj1FLmpvaW4oKTtpZih2b2lkIDA9PT1OLmRlZmF1bHRCdWZmZXImJihOLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5j'@;
put 'b2RlVmFsdWUoTi5kZWZhdWx0LGssQikuam9pbigpKSxaLmxlbmd0aCE9PU4uZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFY9MDtWPFoubGVuZ3RoO1YrKylpZihaW1ZdIT09Ti5kZWZhdWx0QnVmZmVyW1ZdKXJldHVybiExO3JldHVybiEwfX0sMjI3MTQ6KCRlLFNlLFIpPT57'@;
put 'dmFyIGVlPVNlO2VlLmRlcj1SKDcyMTkzKSxlZS5wZW09UigyNDgxNil9LDI0ODE2OigkZSxTZSxSKT0+e3ZhciBlZT1SKDcxOTkzKSxiPVIoNzIxOTMpO2Z1bmN0aW9uIG0oWCl7Yi5jYWxsKHRoaXMsWCksdGhpcy5lbmM9InBlbSJ9ZWUobSxiKSwkZS5leHBvcnRzPW0sbS5wcm90b3R5cGUu'@;
put 'ZW5jb2RlPWZ1bmN0aW9uKHcsQSl7Zm9yKHZhciBQPWIucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLFU9WyItLS0tLUJFR0lOICIrQS5sYWJlbCsiLS0tLS0iXSxJPTA7STxQLmxlbmd0aDtJKz02NClVLnB1c2goUC5zbGljZShJLEkrNjQpKTtyZXR1'@;
put 'cm4gVS5wdXNoKCItLS0tLUVORCAiK0EubGFiZWwrIi0tLS0tIiksVS5qb2luKCJcbiIpfX0sOTY4Njc6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcseSl7aWYoIUcpdGhyb3cgbmV3IEVycm9yKHl8fCJBc3NlcnRpb24gZmFpbGVk'@;
put 'Iil9ZnVuY3Rpb24gWChHLHkpe0cuc3VwZXJfPXk7dmFyIEw9ZnVuY3Rpb24oKXt9O0wucHJvdG90eXBlPXkucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBMLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gdyhHLHksTCl7aWYody5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVn'@;
put 'YXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT15fHwiYmUiPT09eSkmJihMPXkseT0xMCksdGhpcy5faW5pdChHfHwwLHl8fDEwLEx8fCJiZSIpKX12YXIgQTsib2JqZWN0Ij09dHlwZW9mIGVlP2VlLmV4cG9ydHM9'@;
put 'dzpiLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOlIoNzg5ODIpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRChHLHkpe3ZhciBMPUcuY2hhckNvZGVBdCh5KTtyZXR1cm4gTD49'@;
put 'NjUmJkw8PTcwP0wtNTU6TD49OTcmJkw8PTEwMj9MLTg3OkwtNDgmMTV9ZnVuY3Rpb24gUChHLHksTCl7dmFyIEg9RChHLEwpO3JldHVybiBMLTE+PXkmJihIfD1EKEcsTC0xKTw8NCksSH1mdW5jdGlvbiBVKEcseSxMLEgpe2Zvcih2YXIgaj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsTCksUz15'@;
put 'O1M8ZztTKyspe3ZhciB4PUcuY2hhckNvZGVBdChTKS00ODtqKj1ILGorPXg+PTQ5P3gtNDkrMTA6eD49MTc/eC0xNysxMDp4fXJldHVybiBqfXcuaXNCTj1mdW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIHd8fG51bGwhPT15JiYib2JqZWN0Ij09dHlwZW9mIHkmJnkuY29uc3RydWN0'@;
put 'b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHkud29yZHMpfSx3Lm1heD1mdW5jdGlvbih5LEwpe3JldHVybiB5LmNtcChMKT4wP3k6TH0sdy5taW49ZnVuY3Rpb24oeSxMKXtyZXR1cm4geS5jbXAoTCk8MD95Okx9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHks'@;
put 'TCxIKXtpZigibnVtYmVyIj09dHlwZW9mIHkpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoeSxMLEgpO2lmKCJvYmplY3QiPT10eXBlb2YgeSlyZXR1cm4gdGhpcy5faW5pdEFycmF5KHksTCxIKTsiaGV4Ij09PUwmJihMPTE2KSxtKEw9PT0oMHxMKSYmTD49MiYmTDw9MzYpO3ZhciBqPTA7Ii0i'@;
put 'PT09KHk9eS50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPHkubGVuZ3RoJiYoMTY9PT1MP3RoaXMuX3BhcnNlSGV4KHksaixIKToodGhpcy5fcGFyc2VCYXNlKHksTCxqKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9B'@;
put 'cnJheSgpLEwsSCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oeSxMLEgpe3k8MCYmKHRoaXMubmVnYXRpdmU9MSx5PS15KSx5PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ5XSx0aGlzLmxlbmd0aD0xKTp5PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9'@;
put 'WzY3MTA4ODYzJnkseS82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oeTw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ5LHkvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRv'@;
put 'QXJyYXkoKSxMLEgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHksTCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgeS5sZW5ndGgpLHkubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHkubGVu'@;
put 'Z3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIGcsUyx4PTA7aWYoImJlIj09PUgpZm9yKGo9eS5sZW5ndGgtMSxnPTA7aj49MDtqLT0zKXRoaXMud29yZHNbZ118PShTPXlbal18'@;
put 'eVtqLTFdPDw4fHlbai0yXTw8MTYpPDx4JjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1TPj4+MjYteCY2NzEwODg2MywoeCs9MjQpPj0yNiYmKHgtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3Ioaj0wLGc9MDtqPHkubGVuZ3RoO2orPTMpdGhpcy53b3Jkc1tnXXw9KFM9eVtqXXx5W2or'@;
put 'MV08PDh8eVtqKzJdPDwxNik8PHgmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPVM+Pj4yNi14JjY3MTA4ODYzLCh4Kz0yNCk+PTI2JiYoeC09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oeSxMLEgpe3RoaXMubGVuZ3RoPU1hdGgu'@;
put 'Y2VpbCgoeS5sZW5ndGgtTCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgeCxnPTAsUz0wO2lmKCJiZSI9PT1IKWZvcihqPXkubGVuZ3RoLTE7aj49TDtqLT0yKXg9UCh5LEwsaik8'@;
put 'PGcsdGhpcy53b3Jkc1tTXXw9NjcxMDg4NjMmeCxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O2Vsc2UgZm9yKGo9KHkubGVuZ3RoLUwpJTI9PTA/TCsxOkw7ajx5Lmxlbmd0aDtqKz0yKXg9UCh5LEwsaik8PGcsdGhpcy53b3Jkc1tTXXw9NjcxMDg4NjMmeCxn'@;
put 'Pj0xOD8oZy09MTgsdGhpcy53b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih5LEwsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9TClqKys7ai0t'@;
put 'LGc9Zy9MfDA7Zm9yKHZhciBTPXkubGVuZ3RoLUgseD1TJWosXz1NYXRoLm1pbihTLFMteCkrSCxwPTAsQz1IO0M8XztDKz1qKXA9VSh5LEMsQytqLEwpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9'@;
put 'PXgpe3ZhciBLPTE7Zm9yKHA9VSh5LEMseS5sZW5ndGgsTCksQz0wO0M8eDtDKyspSyo9TDt0aGlzLmltdWxuKEspLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih5'@;
put 'KXt5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspeS53b3Jkc1tMXT10aGlzLndvcmRzW0xdO3kubGVuZ3RoPXRoaXMubGVuZ3RoLHkubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx5LnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xv'@;
put 'bmU9ZnVuY3Rpb24oKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHkpLHl9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oeSl7Zm9yKDt0aGlzLmxlbmd0aDx5Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlw'@;
put 'PWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRo'@;
put 'aXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAi'@;
put 'LCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxrPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4Mjgx'@;
put 'MjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2'@;
put 'MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oRyx5LEwpe0wubmVnYXRpdmU9eS5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3Ro'@;
put 'K3kubGVuZ3RofDA7TC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8Ry53b3Jkc1swXSxnPTB8eS53b3Jkc1swXSxTPWoqZyxfPVMvNjcxMDg4NjR8MDtMLndvcmRzWzBdPTY3MTA4ODYzJlM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciBDPV8+Pj4yNixLPTY3MTA4ODYzJl8sbmU9TWF0'@;
put 'aC5taW4ocCx5Lmxlbmd0aC0xKSx1ZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7dWU8PW5lO3VlKyspQys9KFM9KGo9MHxHLndvcmRzW3AtdWV8MF0pKihnPTB8eS53b3Jkc1t1ZV0pK0spLzY3MTA4ODY0fDAsSz02NzEwODg2MyZTO0wud29yZHNbcF09MHxLLF89MHxDfXJldHVybiAwIT09'@;
put 'Xz9MLndvcmRzW3BdPTB8XzpMLmxlbmd0aC0tLEwuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih5LEwpe3ZhciBIO2lmKEw9MHxMfHwxLDE2PT09KHk9eXx8MTApfHwiaGV4Ij09PXkpe0g9IiI7Zm9yKHZhciBqPTAsZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFy'@;
put 'IHg9dGhpcy53b3Jkc1tTXSxfPSgxNjc3NzIxNSYoeDw8anxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9eD4+PjI0LWomMTY3NzcyMTUpfHxTIT09dGhpcy5sZW5ndGgtMT9JWzYtXy5sZW5ndGhdK18rSDpfK0gsKGorPTIpPj0yNiYmKGotPTI2LFMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3Ry'@;
put 'aW5nKDE2KStIKTtILmxlbmd0aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNil7dmFyIHA9RVt5XSxDPWtbeV07SD0iIjt2YXIgSz10aGlzLmNsb25lKCk7Zm9yKEsubmVnYXRpdmU9MDshSy5pc1pl'@;
put 'cm8oKTspe3ZhciBuZT1LLm1vZG4oQykudG9TdHJpbmcoeSk7SD0oSz1LLmlkaXZuKEMpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYm'@;
put 'KEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB5PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD95Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxl'@;
put 'bmd0aCYmMT09PXRoaXMud29yZHNbMl0/eSs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy15Onl9LHcucHJvdG90'@;
put 'eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gbSh0eXBlb2YgQTwidSIpLHRoaXMudG9BcnJheUxpa2UoQSx5LEwpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHksTCl7'@;
put 'cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkseSxMKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oeSxMLEgpe3ZhciBqPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxqKTttKGo8PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgi'@;
put 'KSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBfLHAsUz0ibGUiPT09TCx4PW5ldyB5KGcpLEM9dGhpcy5jbG9uZSgpO2lmKFMpe2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRsbigyNTUpLEMuaXVzaHJuKDgpLHhbcF09Xztmb3Io'@;
put 'O3A8ZztwKyspeFtwXT0wfWVsc2V7Zm9yKHA9MDtwPGctajtwKyspeFtwXT0wO2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRsbigyNTUpLEMuaXVzaHJuKDgpLHhbZy1wLTFdPV99cmV0dXJuIHh9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih5KXty'@;
put 'ZXR1cm4gMzItTWF0aC5jbHozMih5KX06ZnVuY3Rpb24oeSl7dmFyIEw9eSxIPTA7cmV0dXJuIEw+PTQwOTYmJihIKz0xMyxMPj4+PTEzKSxMPj02NCYmKEgrPTcsTD4+Pj03KSxMPj04JiYoSCs9NCxMPj4+PTQpLEw+PTImJihIKz0yLEw+Pj49MiksSCtMfSx3LnByb3RvdHlwZS5femVyb0Jp'@;
put 'dHM9ZnVuY3Rpb24oeSl7aWYoMD09PXkpcmV0dXJuIDI2O3ZhciBMPXksSD0wO3JldHVybiA4MTkxJkx8fChIKz0xMyxMPj4+PTEzKSwxMjcmTHx8KEgrPTcsTD4+Pj03KSwxNSZMfHwoSCs9NCxMPj4+PTQpLDMmTHx8KEgrPTIsTD4+Pj0yKSwxJkx8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRM'@;
put 'ZW5ndGg9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStMfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB5PTAs'@;
put 'TD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0xdKTtpZih5Kz1ILDI2IT09SClicmVha31yZXR1cm4geX0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5w'@;
put 'cm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHkpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHkpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMudGVzdG4oeS0xKT90aGlzLm5vdG4oeSku'@;
put 'aWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHkpe2Zvcig7dGhpcy5sZW5ndGg8eS5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEw9MDtMPHkubGVuZ3RoO0wrKyl0aGlz'@;
put 'LndvcmRzW0xdPXRoaXMud29yZHNbTF18eS53b3Jkc1tMXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1b3IoeSl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHkpe3Jl'@;
put 'dHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHkpOnkuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoeSk6eS5jbG9uZSgpLml1b3IodGhpcyl9'@;
put 'LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHkpe3ZhciBMO0w9dGhpcy5sZW5ndGg+eS5sZW5ndGg/eTp0aGlzO2Zvcih2YXIgSD0wO0g8TC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZ5LndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1MLmxlbmd0aCx0aGlz'@;
put 'LnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1YW5kKHkpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5k'@;
put 'KHkpOnkuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoeSk6eS5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih5KXt2YXIgTCxI'@;
put 'O3RoaXMubGVuZ3RoPnkubGVuZ3RoPyhMPXRoaXMsSD15KTooTD15LEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1MLndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PUwpZm9yKDtqPEwubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUwud29yZHNb'@;
put 'al07cmV0dXJuIHRoaXMubGVuZ3RoPUwubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih5KXtyZXR1cm4gbSghKHRoaXMubmVnYXRpdmV8eS5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoeSl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhp'@;
put 'cy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoeSk6eS5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih5KTp5LmNsb25lKCkuaXV4b3IodGhpcyl9LHcu'@;
put 'cHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD0wfE1hdGguY2VpbCh5LzI2KSxIPXklMjY7dGhpcy5fZXhwYW5kKEwpLEg+MCYmTC0tO2Zvcih2YXIgaj0wO2o8TDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jk'@;
put 'c1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oeSl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oeSxM'@;
put 'KXttKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCk7dmFyIEg9eS8yNnwwLGo9eSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1MP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1'@;
put 'bmN0aW9uKHkpe3ZhciBMLEgsajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxMPXRoaXMuaXN1Yih5KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZl'@;
put 'KXJldHVybiB5Lm5lZ2F0aXZlPTAsTD10aGlzLmlzdWIoeSkseS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+eS5sZW5ndGg/KEg9dGhpcyxqPXkpOihIPXksaj10aGlzKTtmb3IodmFyIGc9MCxTPTA7UzxqLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyYo'@;
put 'TD0oMHxILndvcmRzW1NdKSsoMHxqLndvcmRzW1NdKStnKSxnPUw+Pj4yNjtmb3IoOzAhPT1nJiZTPEgubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihMPSgwfEgud29yZHNbU10pK2cpLGc9TD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNb'@;
put 'dGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7UzxILmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1ILndvcmRzW1NdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSl7dmFyIEw7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlJiYwPT09'@;
put 'dGhpcy5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLEw9dGhpcy5zdWIoeSkseS5uZWdhdGl2ZV49MSxMKTowPT09eS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxMPXkuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxMKTp0aGlzLmxlbmd0aD55Lmxlbmd0aD90'@;
put 'aGlzLmNsb25lKCkuaWFkZCh5KTp5LmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih5KXtpZigwIT09eS5uZWdhdGl2ZSl7eS5uZWdhdGl2ZT0wO3ZhciBMPXRoaXMuaWFkZCh5KTtyZXR1cm4geS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCl9aWYoMCE9PXRo'@;
put 'aXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosZyxIPXRoaXMuY21wKHkpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAs'@;
put 'dGhpcztIPjA/KGo9dGhpcyxnPXkpOihqPXksZz10aGlzKTtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4KyspUz0oTD0oMHxqLndvcmRzW3hdKS0oMHxnLndvcmRzW3hdKStTKT4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZMO2Zvcig7MCE9PVMmJng8ai5sZW5ndGg7eCsrKVM9KEw9'@;
put 'KDB8ai53b3Jkc1t4XSkrUyk+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmTDtpZigwPT09UyYmeDxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDt4PGoubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPWoud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHgp'@;
put 'LGohPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoeSl9O3ZhciBWPWZ1bmN0aW9uKHksTCxIKXt2YXIgXyxwLEMsaj15LndvcmRzLGc9TC53b3JkcyxTPUgud29yZHMseD0w'@;
put 'LEs9MHxqWzBdLG5lPTgxOTEmSyx1ZT1LPj4+MTMsaGU9MHxqWzFdLHhlPTgxOTEmaGUsT2U9aGU+Pj4xMyxIZT0wfGpbMl0sRWU9ODE5MSZIZSxMZT1IZT4+PjEzLE5lPTB8alszXSxLZT04MTkxJk5lLFVlPU5lPj4+MTMsWGU9MHxqWzRdLGF0PTgxOTEmWGUsRmU9WGU+Pj4xMyxDZT0wfGpb'@;
put 'NV0sRGU9ODE5MSZDZSxSZT1DZT4+PjEzLGV0PTB8als2XSxudD04MTkxJmV0LEdlPWV0Pj4+MTMsZHQ9MHxqWzddLFRlPTgxOTEmZHQsQWU9ZHQ+Pj4xMyxCZT0wfGpbOF0sb3Q9ODE5MSZCZSxsdD1CZT4+PjEzLEN0PTB8als5XSxGdD04MTkxJkN0LFJ0PUN0Pj4+MTMsWHQ9MHxnWzBdLFNu'@;
put 'PTgxOTEmWHQsenQ9WHQ+Pj4xMyx2bj0wfGdbMV0sQm49ODE5MSZ2bix0bj12bj4+PjEzLFpuPTB8Z1syXSxPbj04MTkxJlpuLHB0PVpuPj4+MTMsZm49MHxnWzNdLGRuPTgxOTEmZm4sTXQ9Zm4+Pj4xMyxZdD0wfGdbNF0sX3Q9ODE5MSZZdCxqdD1ZdD4+PjEzLHBuPTB8Z1s1XSxydD04MTkx'@;
put 'JnBuLEV0PXBuPj4+MTMsUXQ9MHxnWzZdLFR0PTgxOTEmUXQsbXQ9UXQ+Pj4xMyxHdD0wfGdbN10sa249ODE5MSZHdCxCdD1HdD4+PjEzLGJuPTB8Z1s4XSxDbj04MTkxJmJuLGVuPWJuPj4+MTMsUG49MHxnWzldLHduPTgxOTEmUG4sJHQ9UG4+Pj4xMztILm5lZ2F0aXZlPXkubmVnYXRpdmVe'@;
put 'TC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KHgrKF89TWF0aC5pbXVsKG5lLFNuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSx6dCkpK01hdGguaW11bCh1ZSxTbil8MCkpPDwxMyl8MDt4PSgoQz1NYXRoLmltdWwodWUsenQpKSsocD4+PjEzKXwwKSsoV24+Pj4yNil8MCxX'@;
put 'biY9NjcxMDg4NjMsXz1NYXRoLmltdWwoeGUsU24pLHA9KHA9TWF0aC5pbXVsKHhlLHp0KSkrTWF0aC5pbXVsKE9lLFNuKXwwLEM9TWF0aC5pbXVsKE9lLHp0KTt2YXIgY2k9KHgrKF89XytNYXRoLmltdWwobmUsQm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx0bil8MCkr'@;
put 'TWF0aC5pbXVsKHVlLEJuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLHRuKXwwKSsocD4+PjEzKXwwKSsoY2k+Pj4yNil8MCxjaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRWUsU24pLHA9KHA9TWF0aC5pbXVsKEVlLHp0KSkrTWF0aC5pbXVsKExlLFNuKXwwLEM9TWF0aC5pbXVs'@;
put 'KExlLHp0KSxfPV8rTWF0aC5pbXVsKHhlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bChPZSxCbil8MCxDPUMrTWF0aC5pbXVsKE9lLHRuKXwwO3ZhciBsbj0oeCsoXz1fK01hdGguaW11bChuZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5l'@;
put 'LHB0KXwwKStNYXRoLmltdWwodWUsT24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUscHQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2MyxfPU1hdGguaW11bChLZSxTbikscD0ocD1NYXRoLmltdWwoS2UsenQpKStNYXRoLmltdWwoVWUsU24pfDAsQz1N'@;
put 'YXRoLmltdWwoVWUsenQpLF89XytNYXRoLmltdWwoRWUsQm4pfDAscD0ocD1wK01hdGguaW11bChFZSx0bil8MCkrTWF0aC5pbXVsKExlLEJuKXwwLEM9QytNYXRoLmltdWwoTGUsdG4pfDAsXz1fK01hdGguaW11bCh4ZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmlt'@;
put 'dWwoT2UsT24pfDAsQz1DK01hdGguaW11bChPZSxwdCl8MDt2YXIgbm49KHgrKF89XytNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHVlLGRuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLE10KXwwKSso'@;
put 'cD4+PjEzKXwwKSsobm4+Pj4yNil8MCxubiY9NjcxMDg4NjMsXz1NYXRoLmltdWwoYXQsU24pLHA9KHA9TWF0aC5pbXVsKGF0LHp0KSkrTWF0aC5pbXVsKEZlLFNuKXwwLEM9TWF0aC5pbXVsKEZlLHp0KSxfPV8rTWF0aC5pbXVsKEtlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsdG4pfDAp'@;
put 'K01hdGguaW11bChVZSxCbil8MCxDPUMrTWF0aC5pbXVsKFVlLHRuKXwwLF89XytNYXRoLmltdWwoRWUsT24pfDAscD0ocD1wK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKExlLE9uKXwwLEM9QytNYXRoLmltdWwoTGUscHQpfDAsXz1fK01hdGguaW11bCh4ZSxkbil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoT2UsZG4pfDAsQz1DK01hdGguaW11bChPZSxNdCl8MDt2YXIgdWk9KHgrKF89XytNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxqdCl8MCkrTWF0aC5pbXVsKHVlLF90KXwwKSk8PDEzKXwwO3g9'@;
put 'KChDPUMrTWF0aC5pbXVsKHVlLGp0KXwwKSsocD4+PjEzKXwwKSsodWk+Pj4yNil8MCx1aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRGUsU24pLHA9KHA9TWF0aC5pbXVsKERlLHp0KSkrTWF0aC5pbXVsKFJlLFNuKXwwLEM9TWF0aC5pbXVsKFJlLHp0KSxfPV8rTWF0aC5pbXVsKGF0LEJuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwoYXQsdG4pfDApK01hdGguaW11bChGZSxCbil8MCxDPUMrTWF0aC5pbXVsKEZlLHRuKXwwLF89XytNYXRoLmltdWwoS2UsT24pfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwLEM9QytNYXRoLmltdWwoVWUscHQpfDAsXz1f'@;
put 'K01hdGguaW11bChFZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLE10KXwwKStNYXRoLmltdWwoTGUsZG4pfDAsQz1DK01hdGguaW11bChMZSxNdCl8MCxfPV8rTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bChPZSxfdCl8MCxDPUMrTWF0'@;
put 'aC5pbXVsKE9lLGp0KXwwO3ZhciBBcj0oeCsoXz1fK01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEV0KXwwKStNYXRoLmltdWwodWUscnQpfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsRXQpfDApKyhwPj4+MTMpfDApKyhBcj4+PjI2'@;
put 'KXwwLEFyJj02NzEwODg2MyxfPU1hdGguaW11bChudCxTbikscD0ocD1NYXRoLmltdWwobnQsenQpKStNYXRoLmltdWwoR2UsU24pfDAsQz1NYXRoLmltdWwoR2UsenQpLF89XytNYXRoLmltdWwoRGUsQm4pfDAscD0ocD1wK01hdGguaW11bChEZSx0bil8MCkrTWF0aC5pbXVsKFJlLEJuKXww'@;
put 'LEM9QytNYXRoLmltdWwoUmUsdG4pfDAsXz1fK01hdGguaW11bChhdCxPbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRoLmltdWwoRmUsT24pfDAsQz1DK01hdGguaW11bChGZSxwdCl8MCxfPV8rTWF0aC5pbXVsKEtlLGRuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTXQpfDAp'@;
put 'K01hdGguaW11bChVZSxkbil8MCxDPUMrTWF0aC5pbXVsKFVlLE10KXwwLF89XytNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGguaW11bChFZSxqdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLEM9QytNYXRoLmltdWwoTGUsanQpfDAsXz1fK01hdGguaW11bCh4ZSxydCl8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKHhlLEV0KXwwKStNYXRoLmltdWwoT2UscnQpfDAsQz1DK01hdGguaW11bChPZSxFdCl8MDt2YXIgbXI9KHgrKF89XytNYXRoLmltdWwobmUsVHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxtdCl8MCkrTWF0aC5pbXVsKHVlLFR0KXwwKSk8PDEzKXwwO3g9'@;
put 'KChDPUMrTWF0aC5pbXVsKHVlLG10KXwwKSsocD4+PjEzKXwwKSsobXI+Pj4yNil8MCxtciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoVGUsU24pLHA9KHA9TWF0aC5pbXVsKFRlLHp0KSkrTWF0aC5pbXVsKEFlLFNuKXwwLEM9TWF0aC5pbXVsKEFlLHp0KSxfPV8rTWF0aC5pbXVsKG50LEJuKXww'@;
put 'LHA9KHA9cCtNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChHZSxCbil8MCxDPUMrTWF0aC5pbXVsKEdlLHRuKXwwLF89XytNYXRoLmltdWwoRGUsT24pfDAscD0ocD1wK01hdGguaW11bChEZSxwdCl8MCkrTWF0aC5pbXVsKFJlLE9uKXwwLEM9QytNYXRoLmltdWwoUmUscHQpfDAsXz1f'@;
put 'K01hdGguaW11bChhdCxkbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LE10KXwwKStNYXRoLmltdWwoRmUsZG4pfDAsQz1DK01hdGguaW11bChGZSxNdCl8MCxfPV8rTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsanQpfDApK01hdGguaW11bChVZSxfdCl8MCxDPUMrTWF0'@;
put 'aC5pbXVsKFVlLGp0KXwwLF89XytNYXRoLmltdWwoRWUscnQpfDAscD0ocD1wK01hdGguaW11bChFZSxFdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLEM9QytNYXRoLmltdWwoTGUsRXQpfDAsXz1fK01hdGguaW11bCh4ZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLG10KXwwKStNYXRoLmlt'@;
put 'dWwoT2UsVHQpfDAsQz1DK01hdGguaW11bChPZSxtdCl8MDt2YXIgeWk9KHgrKF89XytNYXRoLmltdWwobmUsa24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKHVlLGtuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLEJ0KXwwKSso'@;
put 'cD4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwob3QsU24pLHA9KHA9TWF0aC5pbXVsKG90LHp0KSkrTWF0aC5pbXVsKGx0LFNuKXwwLEM9TWF0aC5pbXVsKGx0LHp0KSxfPV8rTWF0aC5pbXVsKFRlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsdG4pfDAp'@;
put 'K01hdGguaW11bChBZSxCbil8MCxDPUMrTWF0aC5pbXVsKEFlLHRuKXwwLF89XytNYXRoLmltdWwobnQsT24pfDAscD0ocD1wK01hdGguaW11bChudCxwdCl8MCkrTWF0aC5pbXVsKEdlLE9uKXwwLEM9QytNYXRoLmltdWwoR2UscHQpfDAsXz1fK01hdGguaW11bChEZSxkbil8MCxwPShwPXAr'@;
put 'TWF0aC5pbXVsKERlLE10KXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQz1DK01hdGguaW11bChSZSxNdCl8MCxfPV8rTWF0aC5pbXVsKGF0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsanQpfDApK01hdGguaW11bChGZSxfdCl8MCxDPUMrTWF0aC5pbXVsKEZlLGp0KXwwLF89XytNYXRoLmlt'@;
put 'dWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxFdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLEM9QytNYXRoLmltdWwoVWUsRXQpfDAsXz1fK01hdGguaW11bChFZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKEVlLG10KXwwKStNYXRoLmltdWwoTGUsVHQpfDAsQz1DK01hdGguaW11bChM'@;
put 'ZSxtdCl8MCxfPV8rTWF0aC5pbXVsKHhlLGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsQnQpfDApK01hdGguaW11bChPZSxrbil8MCxDPUMrTWF0aC5pbXVsKE9lLEJ0KXwwO3ZhciAkcj0oeCsoXz1fK01hdGguaW11bChuZSxDbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5l'@;
put 'LGVuKXwwKStNYXRoLmltdWwodWUsQ24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsZW4pfDApKyhwPj4+MTMpfDApKygkcj4+PjI2KXwwLCRyJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxTbikscD0ocD1NYXRoLmltdWwoRnQsenQpKStNYXRoLmltdWwoUnQsU24pfDAsQz1N'@;
put 'YXRoLmltdWwoUnQsenQpLF89XytNYXRoLmltdWwob3QsQm4pfDAscD0ocD1wK01hdGguaW11bChvdCx0bil8MCkrTWF0aC5pbXVsKGx0LEJuKXwwLEM9QytNYXRoLmltdWwobHQsdG4pfDAsXz1fK01hdGguaW11bChUZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLHB0KXwwKStNYXRoLmlt'@;
put 'dWwoQWUsT24pfDAsQz1DK01hdGguaW11bChBZSxwdCl8MCxfPV8rTWF0aC5pbXVsKG50LGRuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsTXQpfDApK01hdGguaW11bChHZSxkbil8MCxDPUMrTWF0aC5pbXVsKEdlLE10KXwwLF89XytNYXRoLmltdWwoRGUsX3QpfDAscD0ocD1wK01hdGguaW11'@;
put 'bChEZSxqdCl8MCkrTWF0aC5pbXVsKFJlLF90KXwwLEM9QytNYXRoLmltdWwoUmUsanQpfDAsXz1fK01hdGguaW11bChhdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGF0LEV0KXwwKStNYXRoLmltdWwoRmUscnQpfDAsQz1DK01hdGguaW11bChGZSxFdCl8MCxfPV8rTWF0aC5pbXVsKEtlLFR0'@;
put 'KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsbXQpfDApK01hdGguaW11bChVZSxUdCl8MCxDPUMrTWF0aC5pbXVsKFVlLG10KXwwLF89XytNYXRoLmltdWwoRWUsa24pfDAscD0ocD1wK01hdGguaW11bChFZSxCdCl8MCkrTWF0aC5pbXVsKExlLGtuKXwwLEM9QytNYXRoLmltdWwoTGUsQnQpfDAs'@;
put 'Xz1fK01hdGguaW11bCh4ZSxDbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoT2UsQ24pfDAsQz1DK01hdGguaW11bChPZSxlbil8MDt2YXIgSmk9KHgrKF89XytNYXRoLmltdWwobmUsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkr'@;
put 'TWF0aC5pbXVsKHVlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsQm4pLHA9KHA9TWF0aC5pbXVsKEZ0LHRuKSkrTWF0aC5pbXVsKFJ0LEJuKXwwLEM9TWF0aC5pbXVs'@;
put 'KFJ0LHRuKSxfPV8rTWF0aC5pbXVsKG90LE9uKXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bChsdCxPbil8MCxDPUMrTWF0aC5pbXVsKGx0LHB0KXwwLF89XytNYXRoLmltdWwoVGUsZG4pfDAscD0ocD1wK01hdGguaW11bChUZSxNdCl8MCkrTWF0aC5pbXVsKEFlLGRu'@;
put 'KXwwLEM9QytNYXRoLmltdWwoQWUsTXQpfDAsXz1fK01hdGguaW11bChudCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LGp0KXwwKStNYXRoLmltdWwoR2UsX3QpfDAsQz1DK01hdGguaW11bChHZSxqdCl8MCxfPV8rTWF0aC5pbXVsKERlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRXQp'@;
put 'fDApK01hdGguaW11bChSZSxydCl8MCxDPUMrTWF0aC5pbXVsKFJlLEV0KXwwLF89XytNYXRoLmltdWwoYXQsVHQpfDAscD0ocD1wK01hdGguaW11bChhdCxtdCl8MCkrTWF0aC5pbXVsKEZlLFR0KXwwLEM9QytNYXRoLmltdWwoRmUsbXQpfDAsXz1fK01hdGguaW11bChLZSxrbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKEtlLEJ0KXwwKStNYXRoLmltdWwoVWUsa24pfDAsQz1DK01hdGguaW11bChVZSxCdCl8MCxfPV8rTWF0aC5pbXVsKEVlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsZW4pfDApK01hdGguaW11bChMZSxDbil8MCxDPUMrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciB5cj0o'@;
put 'eCsoXz1fK01hdGguaW11bCh4ZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoT2Usd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoT2UsJHQpfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGgu'@;
put 'aW11bChGdCxPbikscD0ocD1NYXRoLmltdWwoRnQscHQpKStNYXRoLmltdWwoUnQsT24pfDAsQz1NYXRoLmltdWwoUnQscHQpLF89XytNYXRoLmltdWwob3QsZG4pfDAscD0ocD1wK01hdGguaW11bChvdCxNdCl8MCkrTWF0aC5pbXVsKGx0LGRuKXwwLEM9QytNYXRoLmltdWwobHQsTXQpfDAs'@;
put 'Xz1fK01hdGguaW11bChUZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGp0KXwwKStNYXRoLmltdWwoQWUsX3QpfDAsQz1DK01hdGguaW11bChBZSxqdCl8MCxfPV8rTWF0aC5pbXVsKG50LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsRXQpfDApK01hdGguaW11bChHZSxydCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKEdlLEV0KXwwLF89XytNYXRoLmltdWwoRGUsVHQpfDAscD0ocD1wK01hdGguaW11bChEZSxtdCl8MCkrTWF0aC5pbXVsKFJlLFR0KXwwLEM9QytNYXRoLmltdWwoUmUsbXQpfDAsXz1fK01hdGguaW11bChhdCxrbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LEJ0KXwwKStNYXRo'@;
put 'LmltdWwoRmUsa24pfDAsQz1DK01hdGguaW11bChGZSxCdCl8MCxfPV8rTWF0aC5pbXVsKEtlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChVZSxDbil8MCxDPUMrTWF0aC5pbXVsKFVlLGVuKXwwO3ZhciBJaT0oeCsoXz1fK01hdGguaW11bChFZSx3bil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEVlLCR0KXwwKStNYXRoLmltdWwoTGUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhJaT4+PjI2KXwwLElpJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxkbikscD0ocD1NYXRoLmltdWwo'@;
put 'RnQsTXQpKStNYXRoLmltdWwoUnQsZG4pfDAsQz1NYXRoLmltdWwoUnQsTXQpLF89XytNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxqdCl8MCkrTWF0aC5pbXVsKGx0LF90KXwwLEM9QytNYXRoLmltdWwobHQsanQpfDAsXz1fK01hdGguaW11bChUZSxydCl8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFRlLEV0KXwwKStNYXRoLmltdWwoQWUscnQpfDAsQz1DK01hdGguaW11bChBZSxFdCl8MCxfPV8rTWF0aC5pbXVsKG50LFR0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsbXQpfDApK01hdGguaW11bChHZSxUdCl8MCxDPUMrTWF0aC5pbXVsKEdlLG10KXwwLF89XytNYXRo'@;
put 'LmltdWwoRGUsa24pfDAscD0ocD1wK01hdGguaW11bChEZSxCdCl8MCkrTWF0aC5pbXVsKFJlLGtuKXwwLEM9QytNYXRoLmltdWwoUmUsQnQpfDAsXz1fK01hdGguaW11bChhdCxDbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LGVuKXwwKStNYXRoLmltdWwoRmUsQ24pfDAsQz1DK01hdGguaW11'@;
put 'bChGZSxlbil8MDt2YXIgbm89KHgrKF89XytNYXRoLmltdWwoS2Usd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFVlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxu'@;
put 'byY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsX3QpLHA9KHA9TWF0aC5pbXVsKEZ0LGp0KSkrTWF0aC5pbXVsKFJ0LF90KXwwLEM9TWF0aC5pbXVsKFJ0LGp0KSxfPV8rTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsRXQpfDApK01hdGguaW11bChsdCxydCl8MCxDPUMr'@;
put 'TWF0aC5pbXVsKGx0LEV0KXwwLF89XytNYXRoLmltdWwoVGUsVHQpfDAscD0ocD1wK01hdGguaW11bChUZSxtdCl8MCkrTWF0aC5pbXVsKEFlLFR0KXwwLEM9QytNYXRoLmltdWwoQWUsbXQpfDAsXz1fK01hdGguaW11bChudCxrbil8MCxwPShwPXArTWF0aC5pbXVsKG50LEJ0KXwwKStNYXRo'@;
put 'LmltdWwoR2Usa24pfDAsQz1DK01hdGguaW11bChHZSxCdCl8MCxfPV8rTWF0aC5pbXVsKERlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChSZSxDbil8MCxDPUMrTWF0aC5pbXVsKFJlLGVuKXwwO3ZhciB6bj0oeCsoXz1fK01hdGguaW11bChhdCx3bil8MCl8'@;
put 'MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGF0LCR0KXwwKStNYXRoLmltdWwoRmUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoRmUsJHQpfDApKyhwPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxydCkscD0ocD1NYXRoLmltdWwo'@;
put 'RnQsRXQpKStNYXRoLmltdWwoUnQscnQpfDAsQz1NYXRoLmltdWwoUnQsRXQpLF89XytNYXRoLmltdWwob3QsVHQpfDAscD0ocD1wK01hdGguaW11bChvdCxtdCl8MCkrTWF0aC5pbXVsKGx0LFR0KXwwLEM9QytNYXRoLmltdWwobHQsbXQpfDAsXz1fK01hdGguaW11bChUZSxrbil8MCxwPShw'@;
put 'PXArTWF0aC5pbXVsKFRlLEJ0KXwwKStNYXRoLmltdWwoQWUsa24pfDAsQz1DK01hdGguaW11bChBZSxCdCl8MCxfPV8rTWF0aC5pbXVsKG50LENuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChHZSxDbil8MCxDPUMrTWF0aC5pbXVsKEdlLGVuKXwwO3ZhciBaaT0o'@;
put 'eCsoXz1fK01hdGguaW11bChEZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLCR0KXwwKStNYXRoLmltdWwoUmUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoUmUsJHQpfDApKyhwPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxfPU1hdGgu'@;
put 'aW11bChGdCxUdCkscD0ocD1NYXRoLmltdWwoRnQsbXQpKStNYXRoLmltdWwoUnQsVHQpfDAsQz1NYXRoLmltdWwoUnQsbXQpLF89XytNYXRoLmltdWwob3Qsa24pfDAscD0ocD1wK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LGtuKXwwLEM9QytNYXRoLmltdWwobHQsQnQpfDAs'@;
put 'Xz1fK01hdGguaW11bChUZSxDbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmltdWwoQWUsQ24pfDAsQz1DK01hdGguaW11bChBZSxlbil8MDt2YXIgV2k9KHgrKF89XytNYXRoLmltdWwobnQsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChudCwkdCl8MCkr'@;
put 'TWF0aC5pbXVsKEdlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKEdlLCR0KXwwKSsocD4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsa24pLHA9KHA9TWF0aC5pbXVsKEZ0LEJ0KSkrTWF0aC5pbXVsKFJ0LGtuKXwwLEM9TWF0aC5pbXVs'@;
put 'KFJ0LEJ0KSxfPV8rTWF0aC5pbXVsKG90LENuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bChsdCxDbil8MCxDPUMrTWF0aC5pbXVsKGx0LGVuKXwwO3ZhciBvbz0oeCsoXz1fK01hdGguaW11bChUZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRl'@;
put 'LCR0KXwwKStNYXRoLmltdWwoQWUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoQWUsJHQpfDApKyhwPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxDbikscD0ocD1NYXRoLmltdWwoRnQsZW4pKStNYXRoLmltdWwoUnQsQ24pfDAsQz1N'@;
put 'YXRoLmltdWwoUnQsZW4pO3ZhciBobz0oeCsoXz1fK01hdGguaW11bChvdCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwobHQsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwobHQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2'@;
put 'KXwwLGhvJj02NzEwODg2Mzt2YXIgTHI9KHgrKF89TWF0aC5pbXVsKEZ0LHduKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChGdCwkdCkpK01hdGguaW11bChSdCx3bil8MCkpPDwxMyl8MDtyZXR1cm4geD0oKEM9TWF0aC5pbXVsKFJ0LCR0KSkrKHA+Pj4xMyl8MCkrKExyPj4+MjYpfDAs'@;
put 'THImPTY3MTA4ODYzLFNbMF09V24sU1sxXT1jaSxTWzJdPWxuLFNbM109bm4sU1s0XT11aSxTWzVdPUFyLFNbNl09bXIsU1s3XT15aSxTWzhdPSRyLFNbOV09SmksU1sxMF09eXIsU1sxMV09SWksU1sxMl09bm8sU1sxM109em4sU1sxNF09WmksU1sxNV09V2ksU1sxNl09b28sU1sxN109aG8s'@;
put 'U1sxOF09THIsMCE9PXgmJihTWzE5XT14LEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFcoRyx5LEwpe3JldHVybihuZXcgeikubXVscChHLHksTCl9ZnVuY3Rpb24geihHLHkpe3RoaXMueD1HLHRoaXMueT15fU1hdGguaW11bHx8KFY9Tiksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oeSxM'@;
put 'KXt2YXIgSCxqPXRoaXMubGVuZ3RoK3kubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09eS5sZW5ndGg/Vih0aGlzLHksTCk6ajw2Mz9OKHRoaXMseSxMKTpqPDEwMjQ/ZnVuY3Rpb24gWihHLHksTCl7TC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkcubmVnYXRpdmUsTC5sZW5n'@;
put 'dGg9Ry5sZW5ndGgreS5sZW5ndGg7Zm9yKHZhciBIPTAsaj0wLGc9MDtnPEwubGVuZ3RoLTE7ZysrKXt2YXIgUz1qO2o9MDtmb3IodmFyIHg9NjcxMDg4NjMmSCxfPU1hdGgubWluKGcseS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9XztwKyspe3ZhciB1ZT0oMHxH'@;
put 'LndvcmRzW2ctcF0pKigwfHkud29yZHNbcF0pLGhlPTY3MTA4ODYzJnVlO3g9NjcxMDg4NjMmKGhlPWhlK3h8MCksais9KFM9KFM9UysodWUvNjcxMDg4NjR8MCl8MCkrKGhlPj4+MjYpfDApPj4+MjYsUyY9NjcxMDg4NjN9TC53b3Jkc1tnXT14LEg9UyxTPWp9cmV0dXJuIDAhPT1IP0wud29y'@;
put 'ZHNbZ109SDpMLmxlbmd0aC0tLEwuc3RyaXAoKX0odGhpcyx5LEwpOlcodGhpcyx5LEwpLEh9LHoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oeSl7Zm9yKHZhciBMPW5ldyBBcnJheSh5KSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoeSktMSxqPTA7ajx5O2orKylMW2pdPXRoaXMucmV2'@;
put 'QmluKGosSCx5KTtyZXR1cm4gTH0sei5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHksTCxIKXtpZigwPT09eXx8eT09PUgtMSlyZXR1cm4geTtmb3IodmFyIGo9MCxnPTA7ZzxMO2crKylqfD0oMSZ5KTw8TC1nLTEseT4+PTE7cmV0dXJuIGp9LHoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rp'@;
put 'b24oeSxMLEgsaixnLFMpe2Zvcih2YXIgeD0wO3g8Uzt4Kyspalt4XT1MW3lbeF1dLGdbeF09SFt5W3hdXX0sei5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHksTCxILGosZyxTKXt0aGlzLnBlcm11dGUoUyx5LEwsSCxqLGcpO2Zvcih2YXIgeD0xO3g8Zzt4PDw9MSlmb3IodmFyIF89'@;
put 'eDw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS9fKSxDPU1hdGguc2luKDIqTWF0aC5QSS9fKSxLPTA7SzxnO0srPV8pZm9yKHZhciBuZT1wLHVlPUMsaGU9MDtoZTx4O2hlKyspe3ZhciB4ZT1IW0sraGVdLE9lPWpbSytoZV0sSGU9SFtLK2hlK3hdLEVlPWpbSytoZSt4XSxMZT1uZSpIZS11ZSpF'@;
put 'ZTtFZT1uZSpFZSt1ZSpIZSxIW0sraGVdPXhlKyhIZT1MZSksaltLK2hlXT1PZStFZSxIW0sraGUreF09eGUtSGUsaltLK2hlK3hdPU9lLUVlLGhlIT09XyYmKExlPXAqbmUtQyp1ZSx1ZT1wKnVlK0MqbmUsbmU9TGUpfX0sei5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oeSxMKXt2'@;
put 'YXIgSD0xfE1hdGgubWF4KEwseSksaj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK2p9LHoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih5LEwsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBnPXlbal07eVtqXT15W0gt'@;
put 'ai0xXSx5W0gtai0xXT1nLGc9TFtqXSxMW2pdPS1MW0gtai0xXSxMW0gtai0xXT0tZ319LHoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih5LEwpe2Zvcih2YXIgSD0wLGo9MDtqPEwvMjtqKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZCh5WzIqaisxXS9MKStNYXRoLnJvdW5kKHlb'@;
put 'MipqXS9MKStIO3lbal09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIHl9LHoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oeSxMLEgsail7Zm9yKHZhciBnPTAsUz0wO1M8TDtTKyspSFsyKlNdPTgxOTEmKGcrPTB8eVtTXSksSFsyKlMrMV09ODE5'@;
put 'MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoUz0yKkw7UzxqOysrUylIW1NdPTA7bSgwPT09ZyksbSghKC04MTkyJmcpKX0sei5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih5KXtmb3IodmFyIEw9bmV3IEFycmF5KHkpLEg9MDtIPHk7SCsrKUxbSF09MDtyZXR1cm4gTH0sei5wcm90b3R5cGUubXVs'@;
put 'cD1mdW5jdGlvbih5LEwsSCl7dmFyIGo9Mip0aGlzLmd1ZXNzTGVuMTNiKHkubGVuZ3RoLEwubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChqKSxTPXRoaXMuc3R1YihqKSx4PW5ldyBBcnJheShqKSxfPW5ldyBBcnJheShqKSxwPW5ldyBBcnJheShqKSxDPW5ldyBBcnJheShqKSxLPW5ldyBBcnJh'@;
put 'eShqKSxuZT1uZXcgQXJyYXkoaiksdWU9SC53b3Jkczt1ZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCx4LGopLHRoaXMuY29udmVydDEzYihMLndvcmRzLEwubGVuZ3RoLEMsaiksdGhpcy50cmFuc2Zvcm0oeCxTLF8scCxqLGcpLHRoaXMudHJhbnNmb3JtKEMs'@;
put 'UyxLLG5lLGosZyk7Zm9yKHZhciBoZT0wO2hlPGo7aGUrKyl7dmFyIHhlPV9baGVdKktbaGVdLXBbaGVdKm5lW2hlXTtwW2hlXT1fW2hlXSpuZVtoZV0rcFtoZV0qS1toZV0sX1toZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKF8scCxqKSx0aGlzLnRyYW5zZm9ybShfLHAsdWUsUyxqLGcp'@;
put 'LHRoaXMuY29uanVnYXRlKHVlLFMsaiksdGhpcy5ub3JtYWxpemUxM2IodWUsaiksSC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkwubmVnYXRpdmUsSC5sZW5ndGg9eS5sZW5ndGgrTC5sZW5ndGgsSC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7'@;
put 'cmV0dXJuIEwud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSx0aGlzLm11bFRvKHksTCl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7cmV0dXJuIEwud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSxXKHRoaXMs'@;
put 'eSxMKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHksdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5KSxtKHk8NjcxMDg4NjQpO2Zvcih2YXIgTD0wLEg9MDtIPHRoaXMubGVuZ3Ro'@;
put 'O0grKyl7dmFyIGo9KDB8dGhpcy53b3Jkc1tIXSkqeSxnPSg2NzEwODg2MyZqKSsoNjcxMDg4NjMmTCk7TD4+PTI2LEwrPWovNjcxMDg4NjR8MCxMKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09TCYmKHRoaXMud29yZHNbSF09TCx0aGlzLmxlbmd0aCsrKSx0'@;
put 'aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oeSl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5j'@;
put 'bG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHkpe3ZhciBMPWZ1bmN0aW9uIEIoRyl7Zm9yKHZhciB5PW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxMPTA7TDx5Lmxlbmd0aDtMKyspe3ZhciBqPUwlMjY7eVtMXT0oRy53b3Jkc1tMLzI2fDBdJjE8PGopPj4+an1yZXR1cm4geX0o'@;
put 'eSk7aWYoMD09PUwubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxMLmxlbmd0aCYmMD09PUxbal07aisrLEg9SC5zcXIoKSk7aWYoKytqPEwubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO2o8TC5sZW5ndGg7aisrLGc9Zy5zcXIoKSkwIT09TFtqXSYmKEg9SC5t'@;
put 'dWwoZykpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBnLEw9eSUyNixIPSh5LUwpLzI2LGo9NjcxMDg4NjM+Pj4yNi1MPDwyNi1MO2lmKDAhPT1MKXt2YXIgUz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtn'@;
put 'Kyspe3ZhciB4PXRoaXMud29yZHNbZ10majt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLXg8PEx8UyxTPXg+Pj4yNi1MfVMmJih0aGlzLndvcmRzW2ddPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hd'@;
put 'PXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oeSl9LHcucHJvdG90'@;
put 'eXBlLml1c2hybj1mdW5jdGlvbih5LEwsSCl7dmFyIGo7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApLGo9TD8oTC1MJTI2KS8yNjowO3ZhciBnPXklMjYsUz1NYXRoLm1pbigoeS1nKS8yNix0aGlzLmxlbmd0aCkseD02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsXz1IO2lmKGotPVMsaj1N'@;
put 'YXRoLm1heCgwLGopLF8pe2Zvcih2YXIgcD0wO3A8UztwKyspXy53b3Jkc1twXT10aGlzLndvcmRzW3BdO18ubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1tw'@;
put 'K1NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEM9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09Q3x8cD49aik7cC0tKXt2YXIgSz0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT1DPDwyNi1nfEs+Pj5nLEM9SyZ4fXJldHVybiBfJiYwIT09QyYm'@;
put 'KF8ud29yZHNbXy5sZW5ndGgrK109QyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih5LEws'@;
put 'SCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih5KX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oeSl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMu'@;
put 'Y2xvbmUoKS5pc2hybih5KX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oeSl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJu'@;
put 'ISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEwpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBv'@;
put 'bmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1MJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUwmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pkw8PEwpLHRoaXMuc3Ry'@;
put 'aXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHkpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwP3RoaXMuaXN1Ym4oLXkpOjAhPT10'@;
put 'aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8eT8odGhpcy53b3Jkc1swXT15LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMu'@;
put 'X2lhZGRuKHkpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oeSl7dGhpcy53b3Jkc1swXSs9eTtmb3IodmFyIEw9MDtMPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0xdPj02NzEwODg2NDtMKyspdGhpcy53b3Jkc1tMXS09NjcxMDg4NjQsTD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jk'@;
put 'c1tMKzFdPTE6dGhpcy53b3Jkc1tMKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEwrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oeSl7aWYobSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwKXJldHVybiB0aGlzLmlh'@;
put 'ZGRuKC15KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09eSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRz'@;
put 'WzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbTF08MDtMKyspdGhpcy53b3Jkc1tMXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tMKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oeSl7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih5KX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHkpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVu'@;
put 'Y3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHksTCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoeS5sZW5ndGgrSCk7dmFyIFMseD0wO2ZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe1M9KDB8dGhpcy53b3Jkc1tnK0hdKSt4'@;
put 'O3ZhciBfPSgwfHkud29yZHNbZ10pKkw7eD0oKFMtPTY3MTA4ODYzJl8pPj4yNiktKF8vNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJlN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKXg9KFM9KDB8dGhpcy53b3Jkc1tnK0hdKSt4KT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3'@;
put 'MTA4ODYzJlM7aWYoMD09PXgpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PXgpLHg9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspeD0oUz0tKDB8dGhpcy53b3Jkc1tnXSkreCk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmUztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3Ry'@;
put 'aXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oeSxMKXt2YXIgSCxqPXRoaXMuY2xvbmUoKSxnPXksUz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKFMpKSYmKGc9Zy51c2hsbihIKSxqLml1c2hsbihIKSxTPTB8Zy53b3Jkc1tnLmxlbmd0'@;
put 'aC0xXSk7dmFyIHAsXz1qLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUwpeyhwPW5ldyB3KG51bGwpKS5sZW5ndGg9XysxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHAubGVuZ3RoO0MrKylwLndvcmRzW0NdPTB9dmFyIEs9ai5jbG9uZSgpLl9pc2hsbnN1'@;
put 'Ym11bChnLDEsXyk7MD09PUsubmVnYXRpdmUmJihqPUsscCYmKHAud29yZHNbX109MSkpO2Zvcih2YXIgbmU9Xy0xO25lPj0wO25lLS0pe3ZhciB1ZT02NzEwODg2NCooMHxqLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8ai53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKHVlPU1hdGgubWluKHVl'@;
put 'L1N8MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoZyx1ZSxuZSk7MCE9PWoubmVnYXRpdmU7KXVlLS0sai5uZWdhdGl2ZT0wLGouX2lzaGxuc3VibXVsKGcsMSxuZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT11ZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxq'@;
put 'LnN0cmlwKCksImRpdiIhPT1MJiYwIT09SCYmai5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHksTCxIKXtyZXR1cm4gbSgheS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRo'@;
put 'aXMubmVnYXRpdmUmJjA9PT15Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHksTCksIm1vZCIhPT1MJiYoaj1TLmRpdi5uZWcoKSksImRpdiIhPT1MJiYoZz1TLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKHkpKSx7ZGl2OmosbW9kOmd9KTowPT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmMCE9PXkubmVnYXRpdmU/KFM9dGhpcy5kaXZtb2QoeS5uZWcoKSxMKSwibW9kIiE9PUwmJihqPVMuZGl2Lm5lZygpKSx7ZGl2OmosbW9kOlMubW9kfSk6dGhpcy5uZWdhdGl2ZSZ5Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHkubmVnKCksTCksImRpdiIhPT1MJiYoZz1T'@;
put 'Lm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKHkpKSx7ZGl2OlMuZGl2LG1vZDpnfSk6eS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHkpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXkubGVuZ3RoPyJkaXYiPT09TD97ZGl2OnRoaXMuZGl2bih5LndvcmRz'@;
put 'WzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1MP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHkud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oeS53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbih5LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoeSxMKTt2YXIgaixnLFN9LHcucHJv'@;
put 'dG90eXBlLmRpdj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZGl2bW9kKHksIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5k'@;
put 'aXZtb2QoeSwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih5KXt2YXIgTD10aGlzLmRpdm1vZCh5KTtpZihMLm1vZC5pc1plcm8oKSlyZXR1cm4gTC5kaXY7dmFyIEg9MCE9PUwuZGl2Lm5lZ2F0aXZlP0wubW9kLmlzdWIoeSk6TC5tb2Qsaj15LnVzaHJuKDEp'@;
put 'LGc9eS5hbmRsbigxKSxTPUguY21wKGopO3JldHVybiBTPDB8fDE9PT1nJiYwPT09Uz9MLmRpdjowIT09TC5kaXYubmVnYXRpdmU/TC5kaXYuaXN1Ym4oMSk6TC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPSgxPDwy'@;
put 'NikleSxIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKUg9KEwqSCsoMHx0aGlzLndvcmRzW2pdKSkleTtyZXR1cm4gSH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0oMHx0'@;
put 'aGlzLndvcmRzW0hdKSs2NzEwODg2NCpMO3RoaXMud29yZHNbSF09ai95fDAsTD1qJXl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHkpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHkpe20oMD09'@;
put 'PXkubmVnYXRpdmUpLG0oIXkuaXNaZXJvKCkpO3ZhciBMPXRoaXMsSD15LmNsb25lKCk7TD0wIT09TC5uZWdhdGl2ZT9MLnVtb2QoeSk6TC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxnPW5ldyB3KDApLFM9bmV3IHcoMCkseD1uZXcgdygxKSxfPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4o'@;
put 'KTspTC5pdXNocm4oMSksSC5pdXNocm4oMSksKytfO2Zvcih2YXIgcD1ILmNsb25lKCksQz1MLmNsb25lKCk7IUwuaXNaZXJvKCk7KXtmb3IodmFyIEs9MCxuZT0xOyEoTC53b3Jkc1swXSZuZSkmJks8MjY7KytLLG5lPDw9MSk7aWYoSz4wKWZvcihMLml1c2hybihLKTtLLS0gPjA7KShqLmlz'@;
put 'T2RkKCl8fGcuaXNPZGQoKSkmJihqLmlhZGQocCksZy5pc3ViKEMpKSxqLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIHVlPTAsaGU9MTshKEgud29yZHNbMF0maGUpJiZ1ZTwyNjsrK3VlLGhlPDw9MSk7aWYodWU+MClmb3IoSC5pdXNocm4odWUpO3VlLS0gPjA7KShTLmlzT2RkKCl8'@;
put 'fHguaXNPZGQoKSkmJihTLmlhZGQocCkseC5pc3ViKEMpKSxTLml1c2hybigxKSx4Lml1c2hybigxKTtMLmNtcChIKT49MD8oTC5pc3ViKEgpLGouaXN1YihTKSxnLmlzdWIoeCkpOihILmlzdWIoTCksUy5pc3ViKGopLHguaXN1YihnKSl9cmV0dXJue2E6UyxiOngsZ2NkOkguaXVzaGxuKF8p'@;
put 'fX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUpLG0oIXkuaXNaZXJvKCkpO3ZhciBLLEw9dGhpcyxIPXkuY2xvbmUoKTtMPTAhPT1MLm5lZ2F0aXZlP0wudW1vZCh5KTpMLmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLGc9bmV3IHcoMCksUz1ILmNs'@;
put 'b25lKCk7TC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciB4PTAsXz0xOyEoTC53b3Jkc1swXSZfKSYmeDwyNjsrK3gsXzw8PTEpO2lmKHg+MClmb3IoTC5pdXNocm4oeCk7eC0tID4wOylqLmlzT2RkKCkmJmouaWFkZChTKSxqLml1c2hybigxKTtmb3IodmFyIHA9MCxDPTE7IShI'@;
put 'LndvcmRzWzBdJkMpJiZwPDI2OysrcCxDPDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKFMpLGcuaXVzaHJuKDEpO0wuY21wKEgpPj0wPyhMLmlzdWIoSCksai5pc3ViKGcpKTooSC5pc3ViKEwpLGcuaXN1YihqKSl9cmV0dXJuKEs9MD09PUwu'@;
put 'Y21wbigxKT9qOmcpLmNtcG4oMCk8MCYmSy5pYWRkKHkpLEt9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbih5KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB5LmFicygpO2lmKHkuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEw9dGhpcy5jbG9uZSgpLEg9eS5jbG9uZSgpO0wubmVn'@;
put 'YXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspTC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0wuaXNFdmVuKCk7KUwuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9TC5jbXAoSCk7'@;
put 'aWYoZzwwKXt2YXIgUz1MO0w9SCxIPVN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztMLmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmVnY2QoeSkuYS51bW9kKHkpfSx3LnByb3RvdHlwZS5pc0V2'@;
put 'ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMud29yZHNbMF0meX0sdy5wcm90b3R5cGUuYmlu'@;
put 'Y249ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkpO3ZhciBMPXklMjYsSD0oeS1MKS8yNixqPTE8PEw7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIGc9aixTPUg7MCE9PWcmJlM8dGhpcy5sZW5n'@;
put 'dGg7UysrKXt2YXIgeD0wfHRoaXMud29yZHNbU107Zz0oeCs9Zyk+Pj4yNix0aGlzLndvcmRzW1NdPXgmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbU109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRo'@;
put 'aXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih5KXt2YXIgSCxMPXk8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUwpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkwpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3Ro'@;
put 'PjEpSD0xO2Vsc2V7TCYmKHk9LXkpLG0oeTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PXk/MDpqPHk/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oeSl7aWYoMCE9'@;
put 'PXRoaXMubmVnYXRpdmUmJjA9PT15Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgTD10aGlzLnVjbXAoeSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUw6TH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih5'@;
put 'KXtpZih0aGlzLmxlbmd0aD55Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx5Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEw9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxnPTB8eS53b3Jkc1tIXTtpZihqIT09Zyl7ajxnP0w9LTE6aj5n'@;
put 'JiYoTD0xKTticmVha319cmV0dXJuIEx9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbih5KXtyZXR1cm4gMT09PXRoaXMuY21wbih5KX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIDE9PT10aGlzLmNtcCh5KX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih5KXtyZXR1cm4g'@;
put 'dGhpcy5jbXBuKHkpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wKHkpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oeSl7cmV0dXJuLTE9PT10aGlzLmNtcG4oeSl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHkpe3JldHVybi0xPT09dGhpcy5j'@;
put 'bXAoeSl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wbih5KTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNtcCh5KTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHkpe3JldHVybiAwPT09dGhpcy5jbXBuKHkpfSx3'@;
put 'LnByb3RvdHlwZS5lcT1mdW5jdGlvbih5KXtyZXR1cm4gMD09PXRoaXMuY21wKHkpfSx3LnJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGxlKHkpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9u'@;
put 'IGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHkuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkg'@;
put 'd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5yZWQ9eSx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSgh'@;
put 'dGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQu'@;
put 'YWRkKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oeSl7cmV0dXJuIG0o'@;
put 'dGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx5KX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5pc3ViKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIG0o'@;
put 'dGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHkpLHRoaXMucmVkLm11bCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3'@;
put 'aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx5KSx0aGlzLnJlZC5pbXVsKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl'@;
put 'cmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0s'@;
put 'dy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXty'@;
put 'ZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkJiYheS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhp'@;
put 'cyksdGhpcy5yZWQucG93KHRoaXMseSl9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gUShHLHkpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgdyh5LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5p'@;
put 'dXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtRLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24g'@;
put 'YWUoKXtRLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtRLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZGUoKXtRLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbGUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgeT13'@;
put 'Ll9wcmltZShHKTt0aGlzLm09eS5wLHRoaXMucHJpbWU9eX1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXtsZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVu'@;
put 'Z3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10'@;
put 'aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1RLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29y'@;
put 'ZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx5fSxRLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHkpe3ZhciBILEw9eTtkb3t0aGlzLnNwbGl0KEwsdGhpcy50bXApLEg9KEw9KEw9dGhpcy5pbXVsSyhMKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+'@;
put 'dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpMLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KEwud29yZHNbMF09MCxMLmxlbmd0aD0xKTpqPjA/TC5pc3ViKHRoaXMucCk6dm9pZCAwIT09TC5zdHJpcD9MLnN0cmlwKCk6TC5fc3RyaXAoKSxMfSxRLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlv'@;
put 'bih5LEwpe3kuaXVzaHJuKHRoaXMubiwwLEwpfSxRLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXtyZXR1cm4geS5pbXVsKHRoaXMuayl9LFgodGUsUSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHksTCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbih5Lmxlbmd0aCw5KSxn'@;
put 'PTA7ZzxqO2crKylMLndvcmRzW2ddPXkud29yZHNbZ107aWYoTC5sZW5ndGg9aix5Lmxlbmd0aDw9OSlyZXR1cm4geS53b3Jkc1swXT0wLHZvaWQoeS5sZW5ndGg9MSk7dmFyIFM9eS53b3Jkc1s5XTtmb3IoTC53b3Jkc1tMLmxlbmd0aCsrXT1TJkgsZz0xMDtnPHkubGVuZ3RoO2crKyl7dmFy'@;
put 'IHg9MHx5LndvcmRzW2ddO3kud29yZHNbZy0xMF09KHgmSCk8PDR8Uz4+PjIyLFM9eH15LndvcmRzW2ctMTBdPVM+Pj49MjIseS5sZW5ndGgtPTA9PT1TJiZ5Lmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7eS53b3Jkc1t5Lmxlbmd0aF09MCx5LndvcmRz'@;
put 'W3kubGVuZ3RoKzFdPTAseS5sZW5ndGgrPTI7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0wfHkud29yZHNbSF07eS53b3Jkc1tIXT02NzEwODg2MyYoTCs9OTc3KmopLEw9NjQqaisoTC82NzEwODg2NHwwKX1yZXR1cm4gMD09PXkud29yZHNbeS5sZW5ndGgtMV0mJih5'@;
put 'Lmxlbmd0aC0tLDA9PT15LndvcmRzW3kubGVuZ3RoLTFdJiZ5Lmxlbmd0aC0tKSx5fSxYKGFlLFEpLFgoc2UsUSksWChkZSxRKSxkZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHx5LndvcmRzW0hdKStMLGc9'@;
put 'NjcxMDg4NjMmajtqPj4+PTI2LHkud29yZHNbSF09ZyxMPWp9cmV0dXJuIDAhPT1MJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1MKSx5fSx3Ll9wcmltZT1mdW5jdGlvbih5KXtpZihxW3ldKXJldHVybiBxW3ldO3ZhciBMO2lmKCJrMjU2Ij09PXkpTD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT15'@;
put 'KUw9bmV3IGFlO2Vsc2UgaWYoInAxOTIiPT09eSlMPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09eSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit5KTtMPW5ldyBkZX1yZXR1cm4gcVt5XT1MLEx9LGxlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih5KXttKDA9PT15Lm5l'@;
put 'Z2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oeS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbGUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHksTCl7bSghKHkubmVnYXRpdmV8TC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcG9zaXRpdmVzIiksbSh5LnJlZCYmeS5yZWQ9PT1MLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxsZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoeSkuX2ZvcmNlUmVkKHRoaXMpOnkudW1v'@;
put 'ZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLm5lZz1mdW5jdGlvbih5KXtyZXR1cm4geS5pc1plcm8oKT95LmNsb25lKCk6dGhpcy5tLnN1Yih5KS5fZm9yY2VSZWQodGhpcyl9LGxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7'@;
put 'dmFyIEg9eS5hZGQoTCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxsZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2YXIgSD15LmlhZGQoTCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAm'@;
put 'JkguaXN1Yih0aGlzLm0pLEh9LGxlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5zdWIoTCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24o'@;
put 'eSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5pc3ViKEwpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sbGUucHJvdG90eXBlLnNobD1mdW5jdGlvbih5LEwpe3JldHVybiB0aGlzLl92ZXJpZnkxKHkpLHRoaXMuaW1vZCh5LnVzaGxuKEwpKX0sbGUucHJvdG90'@;
put 'eXBlLmltdWw9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih5LEwpLHRoaXMuaW1vZCh5LmltdWwoTCkpfSxsZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoeSxMKSx0aGlzLmltb2QoeS5tdWwoTCkpfSxsZS5wcm90b3R5cGUuaXNx'@;
put 'cj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5pbXVsKHkseS5jbG9uZSgpKX0sbGUucHJvdG90eXBlLnNxcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5tdWwoeSx5KX0sbGUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oeSl7aWYoeS5pc1plcm8oKSlyZXR1cm4geS5jbG9uZSgpO3ZhciBMPXRo'@;
put 'aXMubS5hbmRsbigzKTtpZihtKEwlMj09MSksMz09PUwpe3ZhciBIPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coeSxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksZz0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspZysrLGouaXVzaHJuKDEp'@;
put 'O20oIWouaXNaZXJvKCkpO3ZhciBTPW5ldyB3KDEpLnRvUmVkKHRoaXMpLHg9Uy5yZWROZWcoKSxfPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgdygyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsXykuY21wKHgpOylwLnJl'@;
put 'ZElBZGQoeCk7Zm9yKHZhciBDPXRoaXMucG93KHAsaiksSz10aGlzLnBvdyh5LGouYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KHksaiksdWU9ZzswIT09bmUuY21wKFMpOyl7Zm9yKHZhciBoZT1uZSx4ZT0wOzAhPT1oZS5jbXAoUyk7eGUrKyloZT1oZS5yZWRTcXIoKTttKHhlPHVl'@;
put 'KTt2YXIgT2U9dGhpcy5wb3coQyxuZXcgdygxKS5pdXNobG4odWUteGUtMSkpO0s9Sy5yZWRNdWwoT2UpLEM9T2UucmVkU3FyKCksbmU9bmUucmVkTXVsKEMpLHVlPXhlfXJldHVybiBLfSxsZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih5KXt2YXIgTD15Ll9pbnZtcCh0aGlzLm0pO3JldHVy'@;
put 'biAwIT09TC5uZWdhdGl2ZT8oTC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChMKS5yZWROZWcoKSk6dGhpcy5pbW9kKEwpfSxsZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHksTCl7aWYoTC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PUwuY21wbigxKSlyZXR1cm4g'@;
put 'eS5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alswXT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPXk7Zm9yKHZhciBnPTI7ZzxqLmxlbmd0aDtnKyspaltnXT10aGlzLm11bChqW2ctMV0seSk7dmFyIFM9alswXSx4PTAsXz0wLHA9TC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihw'@;
put 'PTI2KSxnPUwubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgQz1MLndvcmRzW2ddLEs9cC0xO0s+PTA7Sy0tKXt2YXIgbmU9Qz4+SyYxO1MhPT1qWzBdJiYoUz10aGlzLnNxcihTKSksMCE9PW5lfHwwIT09eD8oeDw8PTEseHw9bmUsKDQ9PSsrX3x8MD09PWcmJjA9PT1LKSYmKFM9dGhpcy5t'@;
put 'dWwoUyxqW3hdKSxfPTAseD0wKSk6Xz0wfXA9MjZ9cmV0dXJuIFN9LGxlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oeSl7dmFyIEw9eS51bW9kKHRoaXMubSk7cmV0dXJuIEw9PT15P0wuY2xvbmUoKTpMfSxsZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oeSl7dmFyIEw9'@;
put 'eS5jbG9uZSgpO3JldHVybiBMLnJlZD1udWxsLEx9LHcubW9udD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGNlKHkpfSxYKGNlLGxlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5j'@;
put 'b252ZXJ0RnJvbT1mdW5jdGlvbih5KXt2YXIgTD10aGlzLmltb2QoeS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEwucmVkPW51bGwsTH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oeSxMKXtpZih5LmlzWmVybygpfHxMLmlzWmVybygpKXJldHVybiB5LndvcmRzWzBdPTAseS5sZW5ndGg9'@;
put 'MSx5O3ZhciBIPXkuaW11bChMKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxTPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Uz1nLmlzdWIodGhpcy5tKTpn'@;
put 'LmNtcG4oMCk8MCYmKFM9Zy5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHksTCl7aWYoeS5pc1plcm8oKXx8TC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPXkubXVsKEwpLGo9SC5tYXNrbih0'@;
put 'aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLFM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9TPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoUz1nLmlhZGQodGhpcy5tKSks'@;
put 'Uy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCRlPVIubm1kKCRlKSx0aGlzKX0sNTUxODg6KCRlLFNlKT0+eyFmdW5jdGlvbigpeyJ1'@;
put 'c2Ugc3RyaWN0Ijtmb3IodmFyIFI9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGVlPW5ldyBVaW50OEFycmF5KDI1NiksYj0wO2I8NjQ7YisrKWVlW1IuY2hhckNvZGVBdChiKV09YjtTZS5sPWZ1bmN0aW9uKG0pe3Zh'@;
put 'ciB3LFg9bmV3IFVpbnQ4QXJyYXkobSksQT1YLmxlbmd0aCxEPSIiO2Zvcih3PTA7dzxBO3crPTMpRCs9UltYW3ddPj4yXSxEKz1SWygzJlhbd10pPDw0fFhbdysxXT4+NF0sRCs9UlsoMTUmWFt3KzFdKTw8MnxYW3crMl0+PjZdLEQrPVJbNjMmWFt3KzJdXTtyZXR1cm4gQSUzPT0yP0Q9RC5z'@;
put 'dWJzdHJpbmcoMCxELmxlbmd0aC0xKSsiPSI6QSUzPT0xJiYoRD1ELnN1YnN0cmluZygwLEQubGVuZ3RoLTIpKyI9PSIpLER9LFNlLkQ9ZnVuY3Rpb24obSl7dmFyIEEsUCxVLEksRSxYPS43NSptLmxlbmd0aCx3PW0ubGVuZ3RoLEQ9MDsiPSI9PT1tW20ubGVuZ3RoLTFdJiYoWC0tLCI9Ij09'@;
put 'PW1bbS5sZW5ndGgtMl0mJlgtLSk7dmFyIGs9bmV3IEFycmF5QnVmZmVyKFgpLEI9bmV3IFVpbnQ4QXJyYXkoayk7Zm9yKEE9MDtBPHc7QSs9NClQPWVlW20uY2hhckNvZGVBdChBKV0sVT1lZVttLmNoYXJDb2RlQXQoQSsxKV0sST1lZVttLmNoYXJDb2RlQXQoQSsyKV0sRT1lZVttLmNoYXJD'@;
put 'b2RlQXQoQSszKV0sQltEKytdPVA8PDJ8VT4+NCxCW0QrK109KDE1JlUpPDw0fEk+PjIsQltEKytdPSgzJkkpPDw2fDYzJkU7cmV0dXJuIGt9fSgpfSwxMzk4MTooJGUsU2UpPT57InVzZSBzdHJpY3QiO1NlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRChCKXt2YXIgTj1BKEIpLFo9TlsxXTtyZXR1'@;
put 'cm4gMyooTlswXStaKS80LVp9LFNlLnRvQnl0ZUFycmF5PWZ1bmN0aW9uIFUoQil7dmFyIE4sdGUsVj1BKEIpLFo9VlswXSxXPVZbMV0sej1uZXcgYihmdW5jdGlvbiBQKEIsTixWKXtyZXR1cm4gMyooTitWKS80LVZ9KDAsWixXKSkscT0wLFE9Vz4wP1otNDpaO2Zvcih0ZT0wO3RlPFE7dGUr'@;
put 'PTQpTj1lZVtCLmNoYXJDb2RlQXQodGUpXTw8MTh8ZWVbQi5jaGFyQ29kZUF0KHRlKzEpXTw8MTJ8ZWVbQi5jaGFyQ29kZUF0KHRlKzIpXTw8NnxlZVtCLmNoYXJDb2RlQXQodGUrMyldLHpbcSsrXT1OPj4xNiYyNTUseltxKytdPU4+PjgmMjU1LHpbcSsrXT0yNTUmTjtyZXR1cm4gMj09PVcm'@;
put 'JihOPWVlW0IuY2hhckNvZGVBdCh0ZSldPDwyfGVlW0IuY2hhckNvZGVBdCh0ZSsxKV0+PjQseltxKytdPTI1NSZOKSwxPT09VyYmKE49ZWVbQi5jaGFyQ29kZUF0KHRlKV08PDEwfGVlW0IuY2hhckNvZGVBdCh0ZSsxKV08PDR8ZWVbQi5jaGFyQ29kZUF0KHRlKzIpXT4+Mix6W3ErK109Tj4+'@;
put 'OCYyNTUseltxKytdPTI1NSZOKSx6fSxTZS5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uIGsoQil7Zm9yKHZhciBOLFY9Qi5sZW5ndGgsWj1WJTMsVz1bXSx6PTE2MzgzLHE9MCxRPVYtWjtxPFE7cSs9eilXLnB1c2goRShCLHEscSt6PlE/UTpxK3opKTtyZXR1cm4gMT09PVo/Vy5wdXNoKFJbKE49'@;
put 'QltWLTFdKT4+Ml0rUltOPDw0JjYzXSsiPT0iKToyPT09WiYmVy5wdXNoKFJbKE49KEJbVi0yXTw8OCkrQltWLTFdKT4+MTBdK1JbTj4+NCY2M10rUltOPDwyJjYzXSsiPSIpLFcuam9pbigiIil9O2Zvcih2YXIgUj1bXSxlZT1bXSxiPXR5cGVvZiBVaW50OEFycmF5PCJ1Ij9VaW50OEFycmF5'@;
put 'OkFycmF5LG09IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLFg9MDtYPDY0OysrWClSW1hdPW1bWF0sZWVbbS5jaGFyQ29kZUF0KFgpXT1YO2Z1bmN0aW9uIEEoQil7dmFyIE49Qi5sZW5ndGg7aWYoTiU0PjApdGhyb3cg'@;
put 'bmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFY9Qi5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1WJiYoVj1OKSxbVixWPT09Tj8wOjQtViU0XX1mdW5jdGlvbiBJKEIpe3JldHVybiBSW0I+PjE4JjYzXStSW0I+PjEyJjYzXStS'@;
put 'W0I+PjYmNjNdK1JbNjMmQl19ZnVuY3Rpb24gRShCLE4sVil7Zm9yKHZhciBXPVtdLHo9Tjt6PFY7eis9MylXLnB1c2goSSgoQlt6XTw8MTYmMTY3MTE2ODApKyhCW3orMV08PDgmNjUyODApKygyNTUmQlt6KzJdKSkpO3JldHVybiBXLmpvaW4oIiIpfWVlWzQ1XT02MixlZVs5NV09NjN9LDkx'@;
put 'NzpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oSCxqKXtpZighSCl0aHJvdyBuZXcgRXJyb3Ioanx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBYKEgsail7SC5zdXBlcl89ajt2YXIgZz1mdW5jdGlvbigpe307Zy5wcm90b3R5'@;
put 'cGU9ai5wcm90b3R5cGUsSC5wcm90b3R5cGU9bmV3IGcsSC5wcm90b3R5cGUuY29uc3RydWN0b3I9SH1mdW5jdGlvbiB3KEgsaixnKXtpZih3LmlzQk4oSCkpcmV0dXJuIEg7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9'@;
put 'PUgmJigoImxlIj09PWp8fCJiZSI9PT1qKSYmKGc9aixqPTEwKSx0aGlzLl9pbml0KEh8fDAsanx8MTAsZ3x8ImJlIikpfXZhciBBOyJvYmplY3QiPT10eXBlb2YgZWU/ZWUuZXhwb3J0cz13OmIuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7QT10eXBlb2Ygd2luZG93PCJ1IiYmdHlw'@;
put 'ZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Uig0Nzc5MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBEKEgsail7dmFyIGc9SC5jaGFyQ29kZUF0KGopO3JldHVybiBnPj00OCYmZzw9NTc/Zy00ODpnPj02NSYmZzw9NzA/Zy01NTpnPj05NyYmZzw9MTAyP2ctODc6dm9pZCBt'@;
put 'KCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK0gpfWZ1bmN0aW9uIFAoSCxqLGcpe3ZhciBTPUQoSCxnKTtyZXR1cm4gZy0xPj1qJiYoU3w9RChILGctMSk8PDQpLFN9ZnVuY3Rpb24gVShILGosZyxTKXtmb3IodmFyIHg9MCxfPTAscD1NYXRoLm1pbihILmxlbmd0aCxnKSxDPWo7QzxwO0Mr'@;
put 'Kyl7dmFyIEs9SC5jaGFyQ29kZUF0KEMpLTQ4O3gqPVMsXz1LPj00OT9LLTQ5KzEwOks+PTE3P0stMTcrMTA6SyxtKEs+PTAmJl88UywiSW52YWxpZCBjaGFyYWN0ZXIiKSx4Kz1ffXJldHVybiB4fWZ1bmN0aW9uIEkoSCxqKXtILndvcmRzPWoud29yZHMsSC5sZW5ndGg9ai5sZW5ndGgsSC5u'@;
put 'ZWdhdGl2ZT1qLm5lZ2F0aXZlLEgucmVkPWoucmVkfWlmKHcuaXNCTj1mdW5jdGlvbihqKXtyZXR1cm4gaiBpbnN0YW5jZW9mIHd8fG51bGwhPT1qJiYib2JqZWN0Ij09dHlwZW9mIGomJmouY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KGoud29yZHMp'@;
put 'fSx3Lm1heD1mdW5jdGlvbihqLGcpe3JldHVybiBqLmNtcChnKT4wP2o6Z30sdy5taW49ZnVuY3Rpb24oaixnKXtyZXR1cm4gai5jbXAoZyk8MD9qOmd9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKGosZyxTKXtpZigibnVtYmVyIj09dHlwZW9mIGopcmV0dXJuIHRoaXMuX2luaXROdW1i'@;
put 'ZXIoaixnLFMpO2lmKCJvYmplY3QiPT10eXBlb2YgailyZXR1cm4gdGhpcy5faW5pdEFycmF5KGosZyxTKTsiaGV4Ij09PWcmJihnPTE2KSxtKGc9PT0oMHxnKSYmZz49MiYmZzw9MzYpO3ZhciB4PTA7Ii0iPT09KGo9ai50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJih4Kyss'@;
put 'dGhpcy5uZWdhdGl2ZT0xKSx4PGoubGVuZ3RoJiYoMTY9PT1nP3RoaXMuX3BhcnNlSGV4KGoseCxTKToodGhpcy5fcGFyc2VCYXNlKGosZyx4KSwibGUiPT09UyYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGcsUykpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24o'@;
put 'aixnLFMpe2o8MCYmKHRoaXMubmVnYXRpdmU9MSxqPS1qKSxqPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZqXSx0aGlzLmxlbmd0aD0xKTpqPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJmosai82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6'@;
put 'KG0oajw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZqLGovNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PVMmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxnLFMpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKGos'@;
put 'ZyxTKXtpZihtKCJudW1iZXIiPT10eXBlb2Ygai5sZW5ndGgpLGoubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKGoubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFy'@;
put 'IHg9MDt4PHRoaXMubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPTA7dmFyIF8scCxDPTA7aWYoImJlIj09PVMpZm9yKHg9ai5sZW5ndGgtMSxfPTA7eD49MDt4LT0zKXRoaXMud29yZHNbX118PShwPWpbeF18alt4LTFdPDw4fGpbeC0yXTw8MTYpPDxDJjY3MTA4ODYzLHRoaXMud29yZHNbXysx'@;
put 'XT1wPj4+MjYtQyY2NzEwODg2MywoQys9MjQpPj0yNiYmKEMtPTI2LF8rKyk7ZWxzZSBpZigibGUiPT09Uylmb3IoeD0wLF89MDt4PGoubGVuZ3RoO3grPTMpdGhpcy53b3Jkc1tfXXw9KHA9alt4XXxqW3grMV08PDh8alt4KzJdPDwxNik8PEMmNjcxMDg4NjMsdGhpcy53b3Jkc1tfKzFdPXA+'@;
put 'Pj4yNi1DJjY3MTA4ODYzLChDKz0yNCk+PTI2JiYoQy09MjYsXysrKTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKGosZyxTKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKGoubGVuZ3RoLWcpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMu'@;
put 'bGVuZ3RoKTtmb3IodmFyIHg9MDt4PHRoaXMubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPTA7dmFyIEMsXz0wLHA9MDtpZigiYmUiPT09Uylmb3IoeD1qLmxlbmd0aC0xO3g+PWc7eC09MilDPVAoaixnLHgpPDxfLHRoaXMud29yZHNbcF18PTY3MTA4ODYzJkMsXz49MTg/KF8tPTE4LHRoaXMu'@;
put 'd29yZHNbcCs9MV18PUM+Pj4yNik6Xys9ODtlbHNlIGZvcih4PShqLmxlbmd0aC1nKSUyPT0wP2crMTpnO3g8ai5sZW5ndGg7eCs9MilDPVAoaixnLHgpPDxfLHRoaXMud29yZHNbcF18PTY3MTA4ODYzJkMsXz49MTg/KF8tPTE4LHRoaXMud29yZHNbcCs9MV18PUM+Pj4yNik6Xys9ODt0aGlz'@;
put 'Ll9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKGosZyxTKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgeD0wLF89MTtfPD02NzEwODg2MztfKj1nKXgrKzt4LS0sXz1fL2d8MDtmb3IodmFyIHA9ai5sZW5ndGgtUyxDPXAleCxLPU1hdGgubWlu'@;
put 'KHAscC1DKStTLG5lPTAsdWU9Uzt1ZTxLO3VlKz14KW5lPVUoaix1ZSx1ZSt4LGcpLHRoaXMuaW11bG4oXyksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSk7aWYoMCE9PUMpe3ZhciBoZT0xO2ZvcihuZT1VKGosdWUsai5sZW5ndGgs'@;
put 'ZyksdWU9MDt1ZTxDO3VlKyspaGUqPWc7dGhpcy5pbXVsbihoZSksdGhpcy53b3Jkc1swXStuZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1uZTp0aGlzLl9pYWRkbihuZSl9dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihqKXtqLndvcmRzPW5ldyBBcnJheSh0aGlz'@;
put 'Lmxlbmd0aCk7Zm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aDtnKyspai53b3Jkc1tnXT10aGlzLndvcmRzW2ddO2oubGVuZ3RoPXRoaXMubGVuZ3RoLGoubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxqLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oail7SShqLHRoaXMp'@;
put 'fSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBqPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoaiksan0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihqKXtmb3IoO3RoaXMubGVuZ3RoPGo7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30s'@;
put 'dy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10'@;
put 'aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5cGVbU3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09RX1j'@;
put 'YXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUV9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUU7ZnVuY3Rpb24gRSgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBrPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwi'@;
put 'MDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEI9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sTj1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1'@;
put 'LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1'@;
put 'LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKEgsaixnKXtnLm5lZ2F0aXZlPWoubmVnYXRpdmVeSC5uZWdhdGl2ZTt2YXIgUz1ILmxlbmd0aCtq'@;
put 'Lmxlbmd0aHwwO2cubGVuZ3RoPVMsUz1TLTF8MDt2YXIgeD0wfEgud29yZHNbMF0sXz0wfGoud29yZHNbMF0scD14Kl8sSz1wLzY3MTA4ODY0fDA7Zy53b3Jkc1swXT02NzEwODg2MyZwO2Zvcih2YXIgbmU9MTtuZTxTO25lKyspe2Zvcih2YXIgdWU9Sz4+PjI2LGhlPTY3MTA4ODYzJksseGU9'@;
put 'TWF0aC5taW4obmUsai5sZW5ndGgtMSksT2U9TWF0aC5tYXgoMCxuZS1ILmxlbmd0aCsxKTtPZTw9eGU7T2UrKyl1ZSs9KHA9KHg9MHxILndvcmRzW25lLU9lfDBdKSooXz0wfGoud29yZHNbT2VdKStoZSkvNjcxMDg4NjR8MCxoZT02NzEwODg2MyZwO2cud29yZHNbbmVdPTB8aGUsSz0wfHVl'@;
put 'fXJldHVybiAwIT09Sz9nLndvcmRzW25lXT0wfEs6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKGosZyl7dmFyIFM7aWYoZz0wfGd8fDEsMTY9PT0oaj1qfHwxMCl8fCJoZXgiPT09ail7Uz0iIjtmb3IodmFyIHg9MCxfPTAscD0wO3A8dGhpcy5s'@;
put 'ZW5ndGg7cCsrKXt2YXIgQz10aGlzLndvcmRzW3BdLEs9KDE2Nzc3MjE1JihDPDx4fF8pKS50b1N0cmluZygxNik7Xz1DPj4+MjQteCYxNjc3NzIxNSwoeCs9Mik+PTI2JiYoeC09MjYscC0tKSxTPTAhPT1ffHxwIT09dGhpcy5sZW5ndGgtMT9rWzYtSy5sZW5ndGhdK0srUzpLK1N9Zm9yKDAh'@;
put 'PT1fJiYoUz1fLnRvU3RyaW5nKDE2KStTKTtTLmxlbmd0aCVnIT0wOylTPSIwIitTO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9aWYoaj09PSgwfGopJiZqPj0yJiZqPD0zNil7dmFyIG5lPUJbal0sdWU9TltqXTtTPSIiO3ZhciBoZT10aGlzLmNsb25lKCk7Zm9yKGhl'@;
put 'Lm5lZ2F0aXZlPTA7IWhlLmlzWmVybygpOyl7dmFyIHhlPWhlLm1vZHJuKHVlKS50b1N0cmluZyhqKTtTPShoZT1oZS5pZGl2bih1ZSkpLmlzWmVybygpP3hlK1M6a1tuZS14ZS5sZW5ndGhdK3hlK1N9Zm9yKHRoaXMuaXNaZXJvKCkmJihTPSIwIitTKTtTLmxlbmd0aCVnIT0wOylTPSIwIitT'@;
put 'O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKFM9Ii0iK1MpLFN9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBqPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9qKz02NzEwODg2'@;
put 'NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/ais9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10'@;
put 'aGlzLm5lZ2F0aXZlPy1qOmp9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxBJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oaixnKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBLGosZyl9KSx3LnByb3RvdHlwZS50b0Fy'@;
put 'cmF5PWZ1bmN0aW9uKGosZyl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksaixnKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oaixnLFMpe3RoaXMuX3N0cmlwKCk7dmFyIHg9dGhpcy5ieXRlTGVuZ3RoKCksXz1TfHxNYXRoLm1heCgxLHgpO20oeDw9XywiYnl0ZSBh'@;
put 'cnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oXz4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgcD1mdW5jdGlvbihqLGcpe3JldHVybiBqLmFsbG9jVW5zYWZlP2ouYWxsb2NVbnNhZmUoZyk6bmV3IGooZyl9KGosXyk7cmV0dXJuIHRoaXNbIl90b0FycmF5'@;
put 'TGlrZSIrKCJsZSI9PT1nPyJMRSI6IkJFIildKHAseCkscH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oaixnKXtmb3IodmFyIFM9MCx4PTAsXz0wLHA9MDtfPHRoaXMubGVuZ3RoO18rKyl7dmFyIEM9dGhpcy53b3Jkc1tfXTw8cHx4O2pbUysrXT0yNTUmQyxTPGoubGVu'@;
put 'Z3RoJiYoaltTKytdPUM+PjgmMjU1KSxTPGoubGVuZ3RoJiYoaltTKytdPUM+PjE2JjI1NSksNj09PXA/KFM8ai5sZW5ndGgmJihqW1MrK109Qz4+MjQmMjU1KSx4PTAscD0wKTooeD1DPj4+MjQscCs9Mil9aWYoUzxqLmxlbmd0aClmb3IoaltTKytdPXg7UzxqLmxlbmd0aDspaltTKytdPTB9'@;
put 'LHcucHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKGosZyl7Zm9yKHZhciBTPWoubGVuZ3RoLTEseD0wLF89MCxwPTA7Xzx0aGlzLmxlbmd0aDtfKyspe3ZhciBDPXRoaXMud29yZHNbX108PHB8eDtqW1MtLV09MjU1JkMsUz49MCYmKGpbUy0tXT1DPj44JjI1NSksUz49MCYmKGpb'@;
put 'Uy0tXT1DPj4xNiYyNTUpLDY9PT1wPyhTPj0wJiYoaltTLS1dPUM+PjI0JjI1NSkseD0wLHA9MCk6KHg9Qz4+PjI0LHArPTIpfWlmKFM+PTApZm9yKGpbUy0tXT14O1M+PTA7KWpbUy0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oail7cmV0dXJuIDMy'@;
put 'LU1hdGguY2x6MzIoail9OmZ1bmN0aW9uKGope3ZhciBnPWosUz0wO3JldHVybiBnPj00MDk2JiYoUys9MTMsZz4+Pj0xMyksZz49NjQmJihTKz03LGc+Pj49NyksZz49OCYmKFMrPTQsZz4+Pj00KSxnPj0yJiYoUys9MixnPj4+PTIpLFMrZ30sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0'@;
put 'aW9uKGope2lmKDA9PT1qKXJldHVybiAyNjt2YXIgZz1qLFM9MDtyZXR1cm4gODE5MSZnfHwoUys9MTMsZz4+Pj0xMyksMTI3Jmd8fChTKz03LGc+Pj49NyksMTUmZ3x8KFMrPTQsZz4+Pj00KSwzJmd8fChTKz0yLGc+Pj49MiksMSZnfHxTKyssU30sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1'@;
put 'bmN0aW9uKCl7dmFyIGc9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZ30sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgaj0wLGc9MDtnPHRo'@;
put 'aXMubGVuZ3RoO2crKyl7dmFyIFM9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tnXSk7aWYoais9UywyNiE9PVMpYnJlYWt9cmV0dXJuIGp9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBl'@;
put 'LnRvVHdvcz1mdW5jdGlvbihqKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihqKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLnRlc3RuKGotMSk/dGhpcy5ub3RuKGopLmlhZGRuKDEp'@;
put 'LmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihqKXtmb3IoO3RoaXMubGVuZ3RoPGoubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBnPTA7ZzxqLmxlbmd0aDtnKyspdGhpcy53b3Jkc1tn'@;
put 'XT10aGlzLndvcmRzW2ddfGoud29yZHNbZ107cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihqKXtyZXR1cm4gbSghKHRoaXMubmVnYXRpdmV8ai5uZWdhdGl2ZSkpLHRoaXMuaXVvcihqKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oail7cmV0dXJuIHRo'@;
put 'aXMubGVuZ3RoPmoubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3Ioaik6ai5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmxlbmd0aD5qLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihqKTpqLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90'@;
put 'b3R5cGUuaXVhbmQ9ZnVuY3Rpb24oail7dmFyIGc7Zz10aGlzLmxlbmd0aD5qLmxlbmd0aD9qOnRoaXM7Zm9yKHZhciBTPTA7UzxnLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT10aGlzLndvcmRzW1NdJmoud29yZHNbU107cmV0dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlw'@;
put 'KCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oail7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfGoubmVnYXRpdmUpKSx0aGlzLml1YW5kKGopfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMubGVuZ3RoPmoubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKGopOmou'@;
put 'Y2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmxlbmd0aD5qLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoaik6ai5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihqKXt2YXIgZyxTO3RoaXMu'@;
put 'bGVuZ3RoPmoubGVuZ3RoPyhnPXRoaXMsUz1qKTooZz1qLFM9dGhpcyk7Zm9yKHZhciB4PTA7eDxTLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT1nLndvcmRzW3hdXlMud29yZHNbeF07aWYodGhpcyE9PWcpZm9yKDt4PGcubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPWcud29yZHNbeF07cmV0'@;
put 'dXJuIHRoaXMubGVuZ3RoPWcubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oail7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfGoubmVnYXRpdmUpKSx0aGlzLml1eG9yKGopfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMubGVu'@;
put 'Z3RoPmoubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKGopOmouY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmxlbmd0aD5qLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3Ioaik6ai5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3Rv'@;
put 'dHlwZS5pbm90bj1mdW5jdGlvbihqKXttKCJudW1iZXIiPT10eXBlb2YgaiYmaj49MCk7dmFyIGc9MHxNYXRoLmNlaWwoai8yNiksUz1qJTI2O3RoaXMuX2V4cGFuZChnKSxTPjAmJmctLTtmb3IodmFyIHg9MDt4PGc7eCsrKXRoaXMud29yZHNbeF09NjcxMDg4NjMmfnRoaXMud29yZHNbeF07'@;
put 'cmV0dXJuIFM+MCYmKHRoaXMud29yZHNbeF09fnRoaXMud29yZHNbeF0mNjcxMDg4NjM+PjI2LVMpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihqKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihqLGcpe20o'@;
put 'Im51bWJlciI9PXR5cGVvZiBqJiZqPj0wKTt2YXIgUz1qLzI2fDAseD1qJTI2O3JldHVybiB0aGlzLl9leHBhbmQoUysxKSx0aGlzLndvcmRzW1NdPWc/dGhpcy53b3Jkc1tTXXwxPDx4OnRoaXMud29yZHNbU10mfigxPDx4KSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0'@;
put 'aW9uKGope3ZhciBnLFMseDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PWoubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxnPXRoaXMuaXN1YihqKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1qLm5lZ2F0aXZlKXJl'@;
put 'dHVybiBqLm5lZ2F0aXZlPTAsZz10aGlzLmlzdWIoaiksai5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+ai5sZW5ndGg/KFM9dGhpcyx4PWopOihTPWoseD10aGlzKTtmb3IodmFyIF89MCxwPTA7cDx4Lmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT02NzEwODg2MyYoZz0o'@;
put 'MHxTLndvcmRzW3BdKSsoMHx4LndvcmRzW3BdKStfKSxfPWc+Pj4yNjtmb3IoOzAhPT1fJiZwPFMubGVuZ3RoO3ArKyl0aGlzLndvcmRzW3BdPTY3MTA4ODYzJihnPSgwfFMud29yZHNbcF0pK18pLF89Zz4+PjI2O2lmKHRoaXMubGVuZ3RoPVMubGVuZ3RoLDAhPT1fKXRoaXMud29yZHNbdGhp'@;
put 'cy5sZW5ndGhdPV8sdGhpcy5sZW5ndGgrKztlbHNlIGlmKFMhPT10aGlzKWZvcig7cDxTLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT1TLndvcmRzW3BdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oail7dmFyIGc7cmV0dXJuIDAhPT1qLm5lZ2F0aXZlJiYwPT09dGhp'@;
put 'cy5uZWdhdGl2ZT8oai5uZWdhdGl2ZT0wLGc9dGhpcy5zdWIoaiksai5uZWdhdGl2ZV49MSxnKTowPT09ai5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxnPWouc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxnKTp0aGlzLmxlbmd0aD5qLmxlbmd0aD90aGlz'@;
put 'LmNsb25lKCkuaWFkZChqKTpqLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihqKXtpZigwIT09ai5uZWdhdGl2ZSl7ai5uZWdhdGl2ZT0wO3ZhciBnPXRoaXMuaWFkZChqKTtyZXR1cm4gai5uZWdhdGl2ZT0xLGcuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMu'@;
put 'bmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoaiksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHgsXyxTPXRoaXMuY21wKGopO2lmKDA9PT1TKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhp'@;
put 'cztTPjA/KHg9dGhpcyxfPWopOih4PWosXz10aGlzKTtmb3IodmFyIHA9MCxDPTA7QzxfLmxlbmd0aDtDKyspcD0oZz0oMHx4LndvcmRzW0NdKS0oMHxfLndvcmRzW0NdKStwKT4+MjYsdGhpcy53b3Jkc1tDXT02NzEwODg2MyZnO2Zvcig7MCE9PXAmJkM8eC5sZW5ndGg7QysrKXA9KGc9KDB8'@;
put 'eC53b3Jkc1tDXSkrcCk+PjI2LHRoaXMud29yZHNbQ109NjcxMDg4NjMmZztpZigwPT09cCYmQzx4Lmxlbmd0aCYmeCE9PXRoaXMpZm9yKDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPXgud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEMpLHgh'@;
put 'PT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKGopfTt2YXIgej1mdW5jdGlvbihqLGcsUyl7dmFyIEssbmUsdWUseD1qLndvcmRzLF89Zy53b3JkcyxwPVMud29yZHMsQz0w'@;
put 'LGhlPTB8eFswXSx4ZT04MTkxJmhlLE9lPWhlPj4+MTMsSGU9MHx4WzFdLEVlPTgxOTEmSGUsTGU9SGU+Pj4xMyxOZT0wfHhbMl0sS2U9ODE5MSZOZSxVZT1OZT4+PjEzLFhlPTB8eFszXSxhdD04MTkxJlhlLEZlPVhlPj4+MTMsQ2U9MHx4WzRdLERlPTgxOTEmQ2UsUmU9Q2U+Pj4xMyxldD0w'@;
put 'fHhbNV0sbnQ9ODE5MSZldCxHZT1ldD4+PjEzLGR0PTB8eFs2XSxUZT04MTkxJmR0LEFlPWR0Pj4+MTMsQmU9MHx4WzddLG90PTgxOTEmQmUsbHQ9QmU+Pj4xMyxDdD0wfHhbOF0sRnQ9ODE5MSZDdCxSdD1DdD4+PjEzLFh0PTB8eFs5XSxTbj04MTkxJlh0LHp0PVh0Pj4+MTMsdm49MHxfWzBd'@;
put 'LEJuPTgxOTEmdm4sdG49dm4+Pj4xMyxabj0wfF9bMV0sT249ODE5MSZabixwdD1abj4+PjEzLGZuPTB8X1syXSxkbj04MTkxJmZuLE10PWZuPj4+MTMsWXQ9MHxfWzNdLF90PTgxOTEmWXQsanQ9WXQ+Pj4xMyxwbj0wfF9bNF0scnQ9ODE5MSZwbixFdD1wbj4+PjEzLFF0PTB8X1s1XSxUdD04'@;
put 'MTkxJlF0LG10PVF0Pj4+MTMsR3Q9MHxfWzZdLGtuPTgxOTEmR3QsQnQ9R3Q+Pj4xMyxibj0wfF9bN10sQ249ODE5MSZibixlbj1ibj4+PjEzLFBuPTB8X1s4XSx3bj04MTkxJlBuLCR0PVBuPj4+MTMsV249MHxfWzldLGNpPTgxOTEmV24sbG49V24+Pj4xMztTLm5lZ2F0aXZlPWoubmVnYXRp'@;
put 'dmVeZy5uZWdhdGl2ZSxTLmxlbmd0aD0xOTt2YXIgbm49KEMrKEs9TWF0aC5pbXVsKHhlLEJuKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKHhlLHRuKSkrTWF0aC5pbXVsKE9lLEJuKXwwKSk8PDEzKXwwO0M9KCh1ZT1NYXRoLmltdWwoT2UsdG4pKSsobmU+Pj4xMyl8MCkrKG5uPj4+'@;
put 'MjYpfDAsbm4mPTY3MTA4ODYzLEs9TWF0aC5pbXVsKEVlLEJuKSxuZT0obmU9TWF0aC5pbXVsKEVlLHRuKSkrTWF0aC5pbXVsKExlLEJuKXwwLHVlPU1hdGguaW11bChMZSx0bik7dmFyIHVpPShDKyhLPUsrTWF0aC5pbXVsKHhlLE9uKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmlt'@;
put 'dWwoeGUscHQpfDApK01hdGguaW11bChPZSxPbil8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9lLHB0KXwwKSsobmU+Pj4xMyl8MCkrKHVpPj4+MjYpfDAsdWkmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKEtlLEJuKSxuZT0obmU9TWF0aC5pbXVsKEtlLHRuKSkrTWF0aC5pbXVsKFVl'@;
put 'LEJuKXwwLHVlPU1hdGguaW11bChVZSx0biksSz1LK01hdGguaW11bChFZSxPbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEVlLHB0KXwwKStNYXRoLmltdWwoTGUsT24pfDAsdWU9dWUrTWF0aC5pbXVsKExlLHB0KXwwO3ZhciBBcj0oQysoSz1LK01hdGguaW11bCh4ZSxkbil8MCl8MCkrKCg4'@;
put 'MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoT2UsZG4pfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChPZSxNdCl8MCkrKG5lPj4+MTMpfDApKyhBcj4+PjI2KXwwLEFyJj02NzEwODg2MyxLPU1hdGguaW11bChhdCxCbiksbmU9KG5lPU1hdGguaW11'@;
put 'bChhdCx0bikpK01hdGguaW11bChGZSxCbil8MCx1ZT1NYXRoLmltdWwoRmUsdG4pLEs9SytNYXRoLmltdWwoS2UsT24pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwLHVlPXVlK01hdGguaW11bChVZSxwdCl8MCxLPUsrTWF0aC5pbXVsKEVlLGRu'@;
put 'KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRWUsTXQpfDApK01hdGguaW11bChMZSxkbil8MCx1ZT11ZStNYXRoLmltdWwoTGUsTXQpfDA7dmFyIG1yPShDKyhLPUsrTWF0aC5pbXVsKHhlLF90KXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bChP'@;
put 'ZSxfdCl8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9lLGp0KXwwKSsobmU+Pj4xMyl8MCkrKG1yPj4+MjYpfDAsbXImPTY3MTA4ODYzLEs9TWF0aC5pbXVsKERlLEJuKSxuZT0obmU9TWF0aC5pbXVsKERlLHRuKSkrTWF0aC5pbXVsKFJlLEJuKXwwLHVlPU1hdGguaW11bChSZSx0'@;
put 'biksSz1LK01hdGguaW11bChhdCxPbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRoLmltdWwoRmUsT24pfDAsdWU9dWUrTWF0aC5pbXVsKEZlLHB0KXwwLEs9SytNYXRoLmltdWwoS2UsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxNdCl8MCkrTWF0aC5pbXVsKFVl'@;
put 'LGRuKXwwLHVlPXVlK01hdGguaW11bChVZSxNdCl8MCxLPUsrTWF0aC5pbXVsKEVlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRWUsanQpfDApK01hdGguaW11bChMZSxfdCl8MCx1ZT11ZStNYXRoLmltdWwoTGUsanQpfDA7dmFyIHlpPShDKyhLPUsrTWF0aC5pbXVsKHhlLHJ0KXwwKXww'@;
put 'KSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsRXQpfDApK01hdGguaW11bChPZSxydCl8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9lLEV0KXwwKSsobmU+Pj4xMyl8MCkrKHlpPj4+MjYpfDAseWkmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKG50LEJuKSxuZT0obmU9TWF0'@;
put 'aC5pbXVsKG50LHRuKSkrTWF0aC5pbXVsKEdlLEJuKXwwLHVlPU1hdGguaW11bChHZSx0biksSz1LK01hdGguaW11bChEZSxPbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLHB0KXwwKStNYXRoLmltdWwoUmUsT24pfDAsdWU9dWUrTWF0aC5pbXVsKFJlLHB0KXwwLEs9SytNYXRoLmltdWwo'@;
put 'YXQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChhdCxNdCl8MCkrTWF0aC5pbXVsKEZlLGRuKXwwLHVlPXVlK01hdGguaW11bChGZSxNdCl8MCxLPUsrTWF0aC5pbXVsKEtlLF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2UsanQpfDApK01hdGguaW11bChVZSxfdCl8MCx1ZT11ZStNYXRo'@;
put 'LmltdWwoVWUsanQpfDAsSz1LK01hdGguaW11bChFZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEVlLEV0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsdWU9dWUrTWF0aC5pbXVsKExlLEV0KXwwO3ZhciAkcj0oQysoSz1LK01hdGguaW11bCh4ZSxUdCl8MCl8MCkrKCg4MTkxJihuZT0obmU9'@;
put 'bmUrTWF0aC5pbXVsKHhlLG10KXwwKStNYXRoLmltdWwoT2UsVHQpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChPZSxtdCl8MCkrKG5lPj4+MTMpfDApKygkcj4+PjI2KXwwLCRyJj02NzEwODg2MyxLPU1hdGguaW11bChUZSxCbiksbmU9KG5lPU1hdGguaW11bChUZSx0bikpK01h'@;
put 'dGguaW11bChBZSxCbil8MCx1ZT1NYXRoLmltdWwoQWUsdG4pLEs9SytNYXRoLmltdWwobnQsT24pfDAsbmU9KG5lPW5lK01hdGguaW11bChudCxwdCl8MCkrTWF0aC5pbXVsKEdlLE9uKXwwLHVlPXVlK01hdGguaW11bChHZSxwdCl8MCxLPUsrTWF0aC5pbXVsKERlLGRuKXwwLG5lPShuZT1u'@;
put 'ZStNYXRoLmltdWwoRGUsTXQpfDApK01hdGguaW11bChSZSxkbil8MCx1ZT11ZStNYXRoLmltdWwoUmUsTXQpfDAsSz1LK01hdGguaW11bChhdCxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGF0LGp0KXwwKStNYXRoLmltdWwoRmUsX3QpfDAsdWU9dWUrTWF0aC5pbXVsKEZlLGp0KXwwLEs9'@;
put 'SytNYXRoLmltdWwoS2UscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxFdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLHVlPXVlK01hdGguaW11bChVZSxFdCl8MCxLPUsrTWF0aC5pbXVsKEVlLFR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRWUsbXQpfDApK01hdGguaW11bChMZSxUdCl8'@;
put 'MCx1ZT11ZStNYXRoLmltdWwoTGUsbXQpfDA7dmFyIEppPShDKyhLPUsrTWF0aC5pbXVsKHhlLGtuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsQnQpfDApK01hdGguaW11bChPZSxrbil8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9lLEJ0KXwwKSsobmU+'@;
put 'Pj4xMyl8MCkrKEppPj4+MjYpfDAsSmkmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKG90LEJuKSxuZT0obmU9TWF0aC5pbXVsKG90LHRuKSkrTWF0aC5pbXVsKGx0LEJuKXwwLHVlPU1hdGguaW11bChsdCx0biksSz1LK01hdGguaW11bChUZSxPbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLHB0'@;
put 'KXwwKStNYXRoLmltdWwoQWUsT24pfDAsdWU9dWUrTWF0aC5pbXVsKEFlLHB0KXwwLEs9SytNYXRoLmltdWwobnQsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChudCxNdCl8MCkrTWF0aC5pbXVsKEdlLGRuKXwwLHVlPXVlK01hdGguaW11bChHZSxNdCl8MCxLPUsrTWF0aC5pbXVsKERlLF90'@;
put 'KXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsanQpfDApK01hdGguaW11bChSZSxfdCl8MCx1ZT11ZStNYXRoLmltdWwoUmUsanQpfDAsSz1LK01hdGguaW11bChhdCxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGF0LEV0KXwwKStNYXRoLmltdWwoRmUscnQpfDAsdWU9dWUrTWF0aC5pbXVs'@;
put 'KEZlLEV0KXwwLEs9SytNYXRoLmltdWwoS2UsVHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxtdCl8MCkrTWF0aC5pbXVsKFVlLFR0KXwwLHVlPXVlK01hdGguaW11bChVZSxtdCl8MCxLPUsrTWF0aC5pbXVsKEVlLGtuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRWUsQnQpfDApK01hdGgu'@;
put 'aW11bChMZSxrbil8MCx1ZT11ZStNYXRoLmltdWwoTGUsQnQpfDA7dmFyIHlyPShDKyhLPUsrTWF0aC5pbXVsKHhlLENuKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChPZSxDbil8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9l'@;
put 'LGVuKXwwKSsobmU+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLEs9TWF0aC5pbXVsKEZ0LEJuKSxuZT0obmU9TWF0aC5pbXVsKEZ0LHRuKSkrTWF0aC5pbXVsKFJ0LEJuKXwwLHVlPU1hdGguaW11bChSdCx0biksSz1LK01hdGguaW11bChvdCxPbil8MCxuZT0obmU9bmUrTWF0'@;
put 'aC5pbXVsKG90LHB0KXwwKStNYXRoLmltdWwobHQsT24pfDAsdWU9dWUrTWF0aC5pbXVsKGx0LHB0KXwwLEs9SytNYXRoLmltdWwoVGUsZG4pfDAsbmU9KG5lPW5lK01hdGguaW11bChUZSxNdCl8MCkrTWF0aC5pbXVsKEFlLGRuKXwwLHVlPXVlK01hdGguaW11bChBZSxNdCl8MCxLPUsrTWF0'@;
put 'aC5pbXVsKG50LF90KXwwLG5lPShuZT1uZStNYXRoLmltdWwobnQsanQpfDApK01hdGguaW11bChHZSxfdCl8MCx1ZT11ZStNYXRoLmltdWwoR2UsanQpfDAsSz1LK01hdGguaW11bChEZSxydCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKERlLEV0KXwwKStNYXRoLmltdWwoUmUscnQpfDAsdWU9'@;
put 'dWUrTWF0aC5pbXVsKFJlLEV0KXwwLEs9SytNYXRoLmltdWwoYXQsVHQpfDAsbmU9KG5lPW5lK01hdGguaW11bChhdCxtdCl8MCkrTWF0aC5pbXVsKEZlLFR0KXwwLHVlPXVlK01hdGguaW11bChGZSxtdCl8MCxLPUsrTWF0aC5pbXVsKEtlLGtuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoS2Us'@;
put 'QnQpfDApK01hdGguaW11bChVZSxrbil8MCx1ZT11ZStNYXRoLmltdWwoVWUsQnQpfDAsSz1LK01hdGguaW11bChFZSxDbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEVlLGVuKXwwKStNYXRoLmltdWwoTGUsQ24pfDAsdWU9dWUrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciBJaT0oQysoSz1LK01h'@;
put 'dGguaW11bCh4ZSx3bil8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoT2Usd24pfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChPZSwkdCl8MCkrKG5lPj4+MTMpfDApKyhJaT4+PjI2KXwwLElpJj02NzEwODg2MyxLPU1hdGguaW11'@;
put 'bChTbixCbiksbmU9KG5lPU1hdGguaW11bChTbix0bikpK01hdGguaW11bCh6dCxCbil8MCx1ZT1NYXRoLmltdWwoenQsdG4pLEs9SytNYXRoLmltdWwoRnQsT24pfDAsbmU9KG5lPW5lK01hdGguaW11bChGdCxwdCl8MCkrTWF0aC5pbXVsKFJ0LE9uKXwwLHVlPXVlK01hdGguaW11bChSdCxw'@;
put 'dCl8MCxLPUsrTWF0aC5pbXVsKG90LGRuKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsTXQpfDApK01hdGguaW11bChsdCxkbil8MCx1ZT11ZStNYXRoLmltdWwobHQsTXQpfDAsSz1LK01hdGguaW11bChUZSxfdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLGp0KXwwKStNYXRoLmltdWwo'@;
put 'QWUsX3QpfDAsdWU9dWUrTWF0aC5pbXVsKEFlLGp0KXwwLEs9SytNYXRoLmltdWwobnQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChudCxFdCl8MCkrTWF0aC5pbXVsKEdlLHJ0KXwwLHVlPXVlK01hdGguaW11bChHZSxFdCl8MCxLPUsrTWF0aC5pbXVsKERlLFR0KXwwLG5lPShuZT1uZStN'@;
put 'YXRoLmltdWwoRGUsbXQpfDApK01hdGguaW11bChSZSxUdCl8MCx1ZT11ZStNYXRoLmltdWwoUmUsbXQpfDAsSz1LK01hdGguaW11bChhdCxrbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGF0LEJ0KXwwKStNYXRoLmltdWwoRmUsa24pfDAsdWU9dWUrTWF0aC5pbXVsKEZlLEJ0KXwwLEs9SytN'@;
put 'YXRoLmltdWwoS2UsQ24pfDAsbmU9KG5lPW5lK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFVlLENuKXwwLHVlPXVlK01hdGguaW11bChVZSxlbil8MCxLPUsrTWF0aC5pbXVsKEVlLHduKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRWUsJHQpfDApK01hdGguaW11bChMZSx3bil8MCx1'@;
put 'ZT11ZStNYXRoLmltdWwoTGUsJHQpfDA7dmFyIG5vPShDKyhLPUsrTWF0aC5pbXVsKHhlLGNpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoeGUsbG4pfDApK01hdGguaW11bChPZSxjaSl8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0aC5pbXVsKE9lLGxuKXwwKSsobmU+Pj4x'@;
put 'Myl8MCkrKG5vPj4+MjYpfDAsbm8mPTY3MTA4ODYzLEs9TWF0aC5pbXVsKFNuLE9uKSxuZT0obmU9TWF0aC5pbXVsKFNuLHB0KSkrTWF0aC5pbXVsKHp0LE9uKXwwLHVlPU1hdGguaW11bCh6dCxwdCksSz1LK01hdGguaW11bChGdCxkbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEZ0LE10KXww'@;
put 'KStNYXRoLmltdWwoUnQsZG4pfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LE10KXwwLEs9SytNYXRoLmltdWwob3QsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCxqdCl8MCkrTWF0aC5pbXVsKGx0LF90KXwwLHVlPXVlK01hdGguaW11bChsdCxqdCl8MCxLPUsrTWF0aC5pbXVsKFRlLHJ0KXww'@;
put 'LG5lPShuZT1uZStNYXRoLmltdWwoVGUsRXQpfDApK01hdGguaW11bChBZSxydCl8MCx1ZT11ZStNYXRoLmltdWwoQWUsRXQpfDAsSz1LK01hdGguaW11bChudCxUdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG50LG10KXwwKStNYXRoLmltdWwoR2UsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKEdl'@;
put 'LG10KXwwLEs9SytNYXRoLmltdWwoRGUsa24pfDAsbmU9KG5lPW5lK01hdGguaW11bChEZSxCdCl8MCkrTWF0aC5pbXVsKFJlLGtuKXwwLHVlPXVlK01hdGguaW11bChSZSxCdCl8MCxLPUsrTWF0aC5pbXVsKGF0LENuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoYXQsZW4pfDApK01hdGguaW11'@;
put 'bChGZSxDbil8MCx1ZT11ZStNYXRoLmltdWwoRmUsZW4pfDAsSz1LK01hdGguaW11bChLZSx3bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoVWUsd24pfDAsdWU9dWUrTWF0aC5pbXVsKFVlLCR0KXwwO3ZhciB6bj0oQysoSz1LK01hdGguaW11bChFZSxjaSl8'@;
put 'MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEVlLGxuKXwwKStNYXRoLmltdWwoTGUsY2kpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChMZSxsbil8MCkrKG5lPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxLPU1hdGguaW11bChTbixkbiksbmU9KG5l'@;
put 'PU1hdGguaW11bChTbixNdCkpK01hdGguaW11bCh6dCxkbil8MCx1ZT1NYXRoLmltdWwoenQsTXQpLEs9SytNYXRoLmltdWwoRnQsX3QpfDAsbmU9KG5lPW5lK01hdGguaW11bChGdCxqdCl8MCkrTWF0aC5pbXVsKFJ0LF90KXwwLHVlPXVlK01hdGguaW11bChSdCxqdCl8MCxLPUsrTWF0aC5p'@;
put 'bXVsKG90LHJ0KXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsRXQpfDApK01hdGguaW11bChsdCxydCl8MCx1ZT11ZStNYXRoLmltdWwobHQsRXQpfDAsSz1LK01hdGguaW11bChUZSxUdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLG10KXwwKStNYXRoLmltdWwoQWUsVHQpfDAsdWU9dWUr'@;
put 'TWF0aC5pbXVsKEFlLG10KXwwLEs9SytNYXRoLmltdWwobnQsa24pfDAsbmU9KG5lPW5lK01hdGguaW11bChudCxCdCl8MCkrTWF0aC5pbXVsKEdlLGtuKXwwLHVlPXVlK01hdGguaW11bChHZSxCdCl8MCxLPUsrTWF0aC5pbXVsKERlLENuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoRGUsZW4p'@;
put 'fDApK01hdGguaW11bChSZSxDbil8MCx1ZT11ZStNYXRoLmltdWwoUmUsZW4pfDAsSz1LK01hdGguaW11bChhdCx3bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKGF0LCR0KXwwKStNYXRoLmltdWwoRmUsd24pfDAsdWU9dWUrTWF0aC5pbXVsKEZlLCR0KXwwO3ZhciBaaT0oQysoSz1LK01hdGgu'@;
put 'aW11bChLZSxjaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEtlLGxuKXwwKStNYXRoLmltdWwoVWUsY2kpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChVZSxsbil8MCkrKG5lPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxLPU1hdGguaW11bChT'@;
put 'bixfdCksbmU9KG5lPU1hdGguaW11bChTbixqdCkpK01hdGguaW11bCh6dCxfdCl8MCx1ZT1NYXRoLmltdWwoenQsanQpLEs9SytNYXRoLmltdWwoRnQscnQpfDAsbmU9KG5lPW5lK01hdGguaW11bChGdCxFdCl8MCkrTWF0aC5pbXVsKFJ0LHJ0KXwwLHVlPXVlK01hdGguaW11bChSdCxFdCl8'@;
put 'MCxLPUsrTWF0aC5pbXVsKG90LFR0KXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsbXQpfDApK01hdGguaW11bChsdCxUdCl8MCx1ZT11ZStNYXRoLmltdWwobHQsbXQpfDAsSz1LK01hdGguaW11bChUZSxrbil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLEJ0KXwwKStNYXRoLmltdWwoQWUs'@;
put 'a24pfDAsdWU9dWUrTWF0aC5pbXVsKEFlLEJ0KXwwLEs9SytNYXRoLmltdWwobnQsQ24pfDAsbmU9KG5lPW5lK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKEdlLENuKXwwLHVlPXVlK01hdGguaW11bChHZSxlbil8MCxLPUsrTWF0aC5pbXVsKERlLHduKXwwLG5lPShuZT1uZStNYXRo'@;
put 'LmltdWwoRGUsJHQpfDApK01hdGguaW11bChSZSx3bil8MCx1ZT11ZStNYXRoLmltdWwoUmUsJHQpfDA7dmFyIFdpPShDKyhLPUsrTWF0aC5pbXVsKGF0LGNpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoYXQsbG4pfDApK01hdGguaW11bChGZSxjaSl8MCkpPDwxMyl8MDtD'@;
put 'PSgodWU9dWUrTWF0aC5pbXVsKEZlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKFdpPj4+MjYpfDAsV2kmPTY3MTA4ODYzLEs9TWF0aC5pbXVsKFNuLHJ0KSxuZT0obmU9TWF0aC5pbXVsKFNuLEV0KSkrTWF0aC5pbXVsKHp0LHJ0KXwwLHVlPU1hdGguaW11bCh6dCxFdCksSz1LK01hdGguaW11bChG'@;
put 'dCxUdCl8MCxuZT0obmU9bmUrTWF0aC5pbXVsKEZ0LG10KXwwKStNYXRoLmltdWwoUnQsVHQpfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LG10KXwwLEs9SytNYXRoLmltdWwob3Qsa24pfDAsbmU9KG5lPW5lK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LGtuKXwwLHVlPXVlK01hdGgu'@;
put 'aW11bChsdCxCdCl8MCxLPUsrTWF0aC5pbXVsKFRlLENuKXwwLG5lPShuZT1uZStNYXRoLmltdWwoVGUsZW4pfDApK01hdGguaW11bChBZSxDbil8MCx1ZT11ZStNYXRoLmltdWwoQWUsZW4pfDAsSz1LK01hdGguaW11bChudCx3bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKG50LCR0KXwwKStN'@;
put 'YXRoLmltdWwoR2Usd24pfDAsdWU9dWUrTWF0aC5pbXVsKEdlLCR0KXwwO3ZhciBvbz0oQysoSz1LK01hdGguaW11bChEZSxjaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKERlLGxuKXwwKStNYXRoLmltdWwoUmUsY2kpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11'@;
put 'bChSZSxsbil8MCkrKG5lPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxLPU1hdGguaW11bChTbixUdCksbmU9KG5lPU1hdGguaW11bChTbixtdCkpK01hdGguaW11bCh6dCxUdCl8MCx1ZT1NYXRoLmltdWwoenQsbXQpLEs9SytNYXRoLmltdWwoRnQsa24pfDAsbmU9KG5lPW5l'@;
put 'K01hdGguaW11bChGdCxCdCl8MCkrTWF0aC5pbXVsKFJ0LGtuKXwwLHVlPXVlK01hdGguaW11bChSdCxCdCl8MCxLPUsrTWF0aC5pbXVsKG90LENuKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bChsdCxDbil8MCx1ZT11ZStNYXRoLmltdWwobHQsZW4pfDAsSz1L'@;
put 'K01hdGguaW11bChUZSx3bil8MCxuZT0obmU9bmUrTWF0aC5pbXVsKFRlLCR0KXwwKStNYXRoLmltdWwoQWUsd24pfDAsdWU9dWUrTWF0aC5pbXVsKEFlLCR0KXwwO3ZhciBobz0oQysoSz1LK01hdGguaW11bChudCxjaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKG50LGxu'@;
put 'KXwwKStNYXRoLmltdWwoR2UsY2kpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChHZSxsbil8MCkrKG5lPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxLPU1hdGguaW11bChTbixrbiksbmU9KG5lPU1hdGguaW11bChTbixCdCkpK01hdGguaW11bCh6dCxrbil8MCx1'@;
put 'ZT1NYXRoLmltdWwoenQsQnQpLEs9SytNYXRoLmltdWwoRnQsQ24pfDAsbmU9KG5lPW5lK01hdGguaW11bChGdCxlbil8MCkrTWF0aC5pbXVsKFJ0LENuKXwwLHVlPXVlK01hdGguaW11bChSdCxlbil8MCxLPUsrTWF0aC5pbXVsKG90LHduKXwwLG5lPShuZT1uZStNYXRoLmltdWwob3QsJHQp'@;
put 'fDApK01hdGguaW11bChsdCx3bil8MCx1ZT11ZStNYXRoLmltdWwobHQsJHQpfDA7dmFyIExyPShDKyhLPUsrTWF0aC5pbXVsKFRlLGNpKXwwKXwwKSsoKDgxOTEmKG5lPShuZT1uZStNYXRoLmltdWwoVGUsbG4pfDApK01hdGguaW11bChBZSxjaSl8MCkpPDwxMyl8MDtDPSgodWU9dWUrTWF0'@;
put 'aC5pbXVsKEFlLGxuKXwwKSsobmU+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLEs9TWF0aC5pbXVsKFNuLENuKSxuZT0obmU9TWF0aC5pbXVsKFNuLGVuKSkrTWF0aC5pbXVsKHp0LENuKXwwLHVlPU1hdGguaW11bCh6dCxlbiksSz1LK01hdGguaW11bChGdCx3bil8MCxuZT0o'@;
put 'bmU9bmUrTWF0aC5pbXVsKEZ0LCR0KXwwKStNYXRoLmltdWwoUnQsd24pfDAsdWU9dWUrTWF0aC5pbXVsKFJ0LCR0KXwwO3ZhciBCaT0oQysoSz1LK01hdGguaW11bChvdCxjaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKG90LGxuKXwwKStNYXRoLmltdWwobHQsY2kpfDAp'@;
put 'KTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChsdCxsbil8MCkrKG5lPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxLPU1hdGguaW11bChTbix3biksbmU9KG5lPU1hdGguaW11bChTbiwkdCkpK01hdGguaW11bCh6dCx3bil8MCx1ZT1NYXRoLmltdWwoenQsJHQpO3ZhciBM'@;
put 'bz0oQysoSz1LK01hdGguaW11bChGdCxjaSl8MCl8MCkrKCg4MTkxJihuZT0obmU9bmUrTWF0aC5pbXVsKEZ0LGxuKXwwKStNYXRoLmltdWwoUnQsY2kpfDApKTw8MTMpfDA7Qz0oKHVlPXVlK01hdGguaW11bChSdCxsbil8MCkrKG5lPj4+MTMpfDApKyhMbz4+PjI2KXwwLExvJj02NzEwODg2'@;
put 'Mzt2YXIgS289KEMrKEs9TWF0aC5pbXVsKFNuLGNpKSl8MCkrKCg4MTkxJihuZT0obmU9TWF0aC5pbXVsKFNuLGxuKSkrTWF0aC5pbXVsKHp0LGNpKXwwKSk8PDEzKXwwO3JldHVybiBDPSgodWU9TWF0aC5pbXVsKHp0LGxuKSkrKG5lPj4+MTMpfDApKyhLbz4+PjI2KXwwLEtvJj02NzEwODg2'@;
put 'MyxwWzBdPW5uLHBbMV09dWkscFsyXT1BcixwWzNdPW1yLHBbNF09eWkscFs1XT0kcixwWzZdPUppLHBbN109eXIscFs4XT1JaSxwWzldPW5vLHBbMTBdPXpuLHBbMTFdPVppLHBbMTJdPVdpLHBbMTNdPW9vLHBbMTRdPWhvLHBbMTVdPUxyLHBbMTZdPUJpLHBbMTddPUxvLHBbMThdPUtvLDAh'@;
put 'PT1DJiYocFsxOV09QyxTLmxlbmd0aCsrKSxTfTtmdW5jdGlvbiBxKEgsaixnKXtnLm5lZ2F0aXZlPWoubmVnYXRpdmVeSC5uZWdhdGl2ZSxnLmxlbmd0aD1ILmxlbmd0aCtqLmxlbmd0aDtmb3IodmFyIFM9MCx4PTAsXz0wO188Zy5sZW5ndGgtMTtfKyspe3ZhciBwPXg7eD0wO2Zvcih2YXIg'@;
put 'Qz02NzEwODg2MyZTLEs9TWF0aC5taW4oXyxqLmxlbmd0aC0xKSxuZT1NYXRoLm1heCgwLF8tSC5sZW5ndGgrMSk7bmU8PUs7bmUrKyl7dmFyIE9lPSgwfEgud29yZHNbXy1uZV0pKigwfGoud29yZHNbbmVdKSxIZT02NzEwODg2MyZPZTtDPTY3MTA4ODYzJihIZT1IZStDfDApLHgrPShwPShw'@;
put 'PXArKE9lLzY3MTA4ODY0fDApfDApKyhIZT4+PjI2KXwwKT4+PjI2LHAmPTY3MTA4ODYzfWcud29yZHNbX109QyxTPXAscD14fXJldHVybiAwIT09Uz9nLndvcmRzW19dPVM6Zy5sZW5ndGgtLSxnLl9zdHJpcCgpfWZ1bmN0aW9uIFEoSCxqLGcpe3JldHVybiBxKEgsaixnKX1mdW5jdGlvbiB0'@;
put 'ZShILGope3RoaXMueD1ILHRoaXMueT1qfU1hdGguaW11bHx8KHo9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oaixnKXt2YXIgeD10aGlzLmxlbmd0aCtqLmxlbmd0aDtyZXR1cm4gMTA9PT10aGlzLmxlbmd0aCYmMTA9PT1qLmxlbmd0aD96KHRoaXMsaixnKTp4PDYzP1codGhpcyxq'@;
put 'LGcpOng8MTAyND9xKHRoaXMsaixnKTpRKHRoaXMsaixnKX0sdGUucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oail7Zm9yKHZhciBnPW5ldyBBcnJheShqKSxTPXcucHJvdG90eXBlLl9jb3VudEJpdHMoaiktMSx4PTA7eDxqO3grKylnW3hdPXRoaXMucmV2QmluKHgsUyxqKTtyZXR1cm4g'@;
put 'Z30sdGUucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihqLGcsUyl7aWYoMD09PWp8fGo9PT1TLTEpcmV0dXJuIGo7Zm9yKHZhciB4PTAsXz0wO188ZztfKyspeHw9KDEmaik8PGctXy0xLGo+Pj0xO3JldHVybiB4fSx0ZS5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihqLGcsUyx4LF8scCl7'@;
put 'Zm9yKHZhciBDPTA7QzxwO0MrKyl4W0NdPWdbaltDXV0sX1tDXT1TW2pbQ11dfSx0ZS5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKGosZyxTLHgsXyxwKXt0aGlzLnBlcm11dGUocCxqLGcsUyx4LF8pO2Zvcih2YXIgQz0xO0M8XztDPDw9MSlmb3IodmFyIEs9Qzw8MSxuZT1NYXRoLmNv'@;
put 'cygyKk1hdGguUEkvSyksdWU9TWF0aC5zaW4oMipNYXRoLlBJL0spLGhlPTA7aGU8XztoZSs9Sylmb3IodmFyIHhlPW5lLE9lPXVlLEhlPTA7SGU8QztIZSsrKXt2YXIgRWU9U1toZStIZV0sTGU9eFtoZStIZV0sTmU9U1toZStIZStDXSxLZT14W2hlK0hlK0NdLFVlPXhlKk5lLU9lKktlO0tl'@;
put 'PXhlKktlK09lKk5lLFNbaGUrSGVdPUVlKyhOZT1VZSkseFtoZStIZV09TGUrS2UsU1toZStIZStDXT1FZS1OZSx4W2hlK0hlK0NdPUxlLUtlLEhlIT09SyYmKFVlPW5lKnhlLXVlKk9lLE9lPW5lKk9lK3VlKnhlLHhlPVVlKX19LHRlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihq'@;
put 'LGcpe3ZhciBTPTF8TWF0aC5tYXgoZyxqKSx4PTEmUyxfPTA7Zm9yKFM9Uy8yfDA7UztTPj4+PTEpXysrO3JldHVybiAxPDxfKzEreH0sdGUucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihqLGcsUyl7aWYoIShTPD0xKSlmb3IodmFyIHg9MDt4PFMvMjt4Kyspe3ZhciBfPWpbeF07alt4'@;
put 'XT1qW1MteC0xXSxqW1MteC0xXT1fLF89Z1t4XSxnW3hdPS1nW1MteC0xXSxnW1MteC0xXT0tX319LHRlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24oaixnKXtmb3IodmFyIFM9MCx4PTA7eDxnLzI7eCsrKXt2YXIgXz04MTkyKk1hdGgucm91bmQoalsyKngrMV0vZykrTWF0aC5y'@;
put 'b3VuZChqWzIqeF0vZykrUztqW3hdPTY3MTA4ODYzJl8sUz1fPDY3MTA4ODY0PzA6Xy82NzEwODg2NHwwfXJldHVybiBqfSx0ZS5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihqLGcsUyx4KXtmb3IodmFyIF89MCxwPTA7cDxnO3ArKylTWzIqcF09ODE5MSYoXys9MHxqW3BdKSxTWzIq'@;
put 'cCsxXT04MTkxJihfPj4+PTEzKSxfPj4+PTEzO2ZvcihwPTIqZztwPHg7KytwKVNbcF09MDttKDA9PT1fKSxtKCEoLTgxOTImXykpfSx0ZS5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihqKXtmb3IodmFyIGc9bmV3IEFycmF5KGopLFM9MDtTPGo7UysrKWdbU109MDtyZXR1cm4gZ30sdGUucHJv'@;
put 'dG90eXBlLm11bHA9ZnVuY3Rpb24oaixnLFMpe3ZhciB4PTIqdGhpcy5ndWVzc0xlbjEzYihqLmxlbmd0aCxnLmxlbmd0aCksXz10aGlzLm1ha2VSQlQoeCkscD10aGlzLnN0dWIoeCksQz1uZXcgQXJyYXkoeCksSz1uZXcgQXJyYXkoeCksbmU9bmV3IEFycmF5KHgpLHVlPW5ldyBBcnJheSh4'@;
put 'KSxoZT1uZXcgQXJyYXkoeCkseGU9bmV3IEFycmF5KHgpLE9lPVMud29yZHM7T2UubGVuZ3RoPXgsdGhpcy5jb252ZXJ0MTNiKGoud29yZHMsai5sZW5ndGgsQyx4KSx0aGlzLmNvbnZlcnQxM2IoZy53b3JkcyxnLmxlbmd0aCx1ZSx4KSx0aGlzLnRyYW5zZm9ybShDLHAsSyxuZSx4LF8pLHRo'@;
put 'aXMudHJhbnNmb3JtKHVlLHAsaGUseGUseCxfKTtmb3IodmFyIEhlPTA7SGU8eDtIZSsrKXt2YXIgRWU9S1tIZV0qaGVbSGVdLW5lW0hlXSp4ZVtIZV07bmVbSGVdPUtbSGVdKnhlW0hlXStuZVtIZV0qaGVbSGVdLEtbSGVdPUVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShLLG5lLHgpLHRoaXMu'@;
put 'dHJhbnNmb3JtKEssbmUsT2UscCx4LF8pLHRoaXMuY29uanVnYXRlKE9lLHAseCksdGhpcy5ub3JtYWxpemUxM2IoT2UseCksUy5uZWdhdGl2ZT1qLm5lZ2F0aXZlXmcubmVnYXRpdmUsUy5sZW5ndGg9ai5sZW5ndGgrZy5sZW5ndGgsUy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0'@;
put 'aW9uKGope3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtqLmxlbmd0aCksdGhpcy5tdWxUbyhqLGcpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKGope3ZhciBnPW5ldyB3KG51bGwpO3JldHVybiBnLndvcmRzPW5ldyBBcnJheSh0aGlz'@;
put 'Lmxlbmd0aCtqLmxlbmd0aCksUSh0aGlzLGosZyl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhqLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihqKXt2YXIgZz1qPDA7ZyYmKGo9LWopLG0oIm51bWJlciI9PXR5cGVvZiBq'@;
put 'KSxtKGo8NjcxMDg4NjQpO2Zvcih2YXIgUz0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIF89KDB8dGhpcy53b3Jkc1t4XSkqaixwPSg2NzEwODg2MyZfKSsoNjcxMDg4NjMmUyk7Uz4+PTI2LFMrPV8vNjcxMDg4NjR8MCxTKz1wPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZwfXJl'@;
put 'dHVybiAwIT09UyYmKHRoaXMud29yZHNbeF09Uyx0aGlzLmxlbmd0aCsrKSxnP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihqKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVs'@;
put 'KHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oail7dmFyIGc9ZnVuY3Rpb24gWihIKXtmb3IodmFyIGo9bmV3IEFycmF5KEguYml0TGVuZ3RoKCkpLGc9MDtnPGoubGVuZ3Ro'@;
put 'O2crKylqW2ddPUgud29yZHNbZy8yNnwwXT4+PmclMjYmMTtyZXR1cm4gan0oaik7aWYoMD09PWcubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIFM9dGhpcyx4PTA7eDxnLmxlbmd0aCYmMD09PWdbeF07eCsrLFM9Uy5zcXIoKSk7aWYoKyt4PGcubGVuZ3RoKWZvcih2YXIgXz1TLnNx'@;
put 'cigpO3g8Zy5sZW5ndGg7eCsrLF89Xy5zcXIoKSkwIT09Z1t4XSYmKFM9Uy5tdWwoXykpO3JldHVybiBTfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oail7bSgibnVtYmVyIj09dHlwZW9mIGomJmo+PTApO3ZhciBfLGc9aiUyNixTPShqLWcpLzI2LHg9NjcxMDg4NjM+Pj4yNi1nPDwy'@;
put 'Ni1nO2lmKDAhPT1nKXt2YXIgcD0wO2ZvcihfPTA7Xzx0aGlzLmxlbmd0aDtfKyspe3ZhciBDPXRoaXMud29yZHNbX10meDt0aGlzLndvcmRzW19dPSgwfHRoaXMud29yZHNbX10pLUM8PGd8cCxwPUM+Pj4yNi1nfXAmJih0aGlzLndvcmRzW19dPXAsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PVMp'@;
put 'e2ZvcihfPXRoaXMubGVuZ3RoLTE7Xz49MDtfLS0pdGhpcy53b3Jkc1tfK1NdPXRoaXMud29yZHNbX107Zm9yKF89MDtfPFM7XysrKXRoaXMud29yZHNbX109MDt0aGlzLmxlbmd0aCs9U31yZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oail7cmV0dXJu'@;
put 'IG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oaixnLFMpe3ZhciB4O20oIm51bWJlciI9PXR5cGVvZiBqJiZqPj0wKSx4PWc/KGctZyUyNikvMjY6MDt2YXIgXz1qJTI2LHA9TWF0aC5taW4oKGotXykvMjYsdGhpcy5sZW5n'@;
put 'dGgpLEM9NjcxMDg4NjNeNjcxMDg4NjM+Pj5fPDxfLEs9UztpZih4LT1wLHg9TWF0aC5tYXgoMCx4KSxLKXtmb3IodmFyIG5lPTA7bmU8cDtuZSsrKUsud29yZHNbbmVdPXRoaXMud29yZHNbbmVdO0subGVuZ3RoPXB9aWYoMCE9PXApaWYodGhpcy5sZW5ndGg+cClmb3IodGhpcy5sZW5ndGgt'@;
put 'PXAsbmU9MDtuZTx0aGlzLmxlbmd0aDtuZSsrKXRoaXMud29yZHNbbmVdPXRoaXMud29yZHNbbmUrcF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgdWU9MDtmb3IobmU9dGhpcy5sZW5ndGgtMTtuZT49MCYmKDAhPT11ZXx8bmU+PXgpO25lLS0pe3ZhciBoZT0wfHRo'@;
put 'aXMud29yZHNbbmVdO3RoaXMud29yZHNbbmVdPXVlPDwyNi1ffGhlPj4+Xyx1ZT1oZSZDfXJldHVybiBLJiYwIT09dWUmJihLLndvcmRzW0subGVuZ3RoKytdPXVlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90'@;
put 'b3R5cGUuaXNocm49ZnVuY3Rpb24oaixnLFMpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihqLGcsUyl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihqKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oail7'@;
put 'cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oail9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihqKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oail9LHcucHJvdG90eXBlLnRl'@;
put 'c3RuPWZ1bmN0aW9uKGope20oIm51bWJlciI9PXR5cGVvZiBqJiZqPj0wKTt2YXIgZz1qJTI2LFM9KGotZykvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9U3x8ISh0aGlzLndvcmRzW1NdJjE8PGcpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKGope20oIm51bWJlciI9PXR5cGVvZiBq'@;
put 'JiZqPj0wKTt2YXIgZz1qJTI2LFM9KGotZykvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1TP3RoaXM6KDAhPT1nJiZTKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oUyx0aGlzLmxlbmd0'@;
put 'aCksMCE9PWcmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcpLHRoaXMuX3N0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihqKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rp'@;
put 'b24oail7cmV0dXJuIG0oIm51bWJlciI9PXR5cGVvZiBqKSxtKGo8NjcxMDg4NjQpLGo8MD90aGlzLmlzdWJuKC1qKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1qPyh0aGlzLndvcmRzWzBdPWotKDB8dGhpcy53b3Jkc1swXSksdGhpcy5u'@;
put 'ZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihqKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oail9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihqKXt0aGlzLndvcmRzWzBdKz1qO2Zvcih2YXIgZz0wO2c8dGhpcy5sZW5ndGgmJnRoaXMu'@;
put 'd29yZHNbZ10+PTY3MTA4ODY0O2crKyl0aGlzLndvcmRzW2ddLT02NzEwODg2NCxnPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2crMV09MTp0aGlzLndvcmRzW2crMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZysxKSx0aGlzfSx3LnByb3RvdHlwZS5p'@;
put 'c3Vibj1mdW5jdGlvbihqKXtpZihtKCJudW1iZXIiPT10eXBlb2YgaiksbShqPDY3MTA4ODY0KSxqPDApcmV0dXJuIHRoaXMuaWFkZG4oLWopO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihqKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0'@;
put 'aGlzLndvcmRzWzBdLT1qLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBnPTA7Zzx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tnXTwwO2crKyl0aGlzLndvcmRzW2ddKz02NzEw'@;
put 'ODg2NCx0aGlzLndvcmRzW2crMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihqKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKGopfSx3'@;
put 'LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKGosZyxTKXt2YXIgXzt0aGlzLl9l'@;
put 'eHBhbmQoai5sZW5ndGgrUyk7dmFyIHAsQz0wO2ZvcihfPTA7XzxqLmxlbmd0aDtfKyspe3A9KDB8dGhpcy53b3Jkc1tfK1NdKStDO3ZhciBLPSgwfGoud29yZHNbX10pKmc7Qz0oKHAtPTY3MTA4ODYzJkspPj4yNiktKEsvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tfK1NdPTY3MTA4ODYzJnB9'@;
put 'Zm9yKDtfPHRoaXMubGVuZ3RoLVM7XysrKUM9KHA9KDB8dGhpcy53b3Jkc1tfK1NdKStDKT4+MjYsdGhpcy53b3Jkc1tfK1NdPTY3MTA4ODYzJnA7aWYoMD09PUMpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKG0oLTE9PT1DKSxDPTAsXz0wO188dGhpcy5sZW5ndGg7XysrKUM9KHA9LSgwfHRo'@;
put 'aXMud29yZHNbX10pK0MpPj4yNix0aGlzLndvcmRzW19dPTY3MTA4ODYzJnA7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihqLGcpe3ZhciBTLHg9dGhpcy5jbG9uZSgpLF89aixwPTB8Xy53b3Jkc1tfLmxlbmd0aC0x'@;
put 'XTswIT0oUz0yNi10aGlzLl9jb3VudEJpdHMocCkpJiYoXz1fLnVzaGxuKFMpLHguaXVzaGxuKFMpLHA9MHxfLndvcmRzW18ubGVuZ3RoLTFdKTt2YXIgbmUsSz14Lmxlbmd0aC1fLmxlbmd0aDtpZigibW9kIiE9PWcpeyhuZT1uZXcgdyhudWxsKSkubGVuZ3RoPUsrMSxuZS53b3Jkcz1uZXcg'@;
put 'QXJyYXkobmUubGVuZ3RoKTtmb3IodmFyIHVlPTA7dWU8bmUubGVuZ3RoO3VlKyspbmUud29yZHNbdWVdPTB9dmFyIGhlPXguY2xvbmUoKS5faXNobG5zdWJtdWwoXywxLEspOzA9PT1oZS5uZWdhdGl2ZSYmKHg9aGUsbmUmJihuZS53b3Jkc1tLXT0xKSk7Zm9yKHZhciB4ZT1LLTE7eGU+PTA7'@;
put 'eGUtLSl7dmFyIE9lPTY3MTA4ODY0KigwfHgud29yZHNbXy5sZW5ndGgreGVdKSsoMHx4LndvcmRzW18ubGVuZ3RoK3hlLTFdKTtmb3IoT2U9TWF0aC5taW4oT2UvcHwwLDY3MTA4ODYzKSx4Ll9pc2hsbnN1Ym11bChfLE9lLHhlKTswIT09eC5uZWdhdGl2ZTspT2UtLSx4Lm5lZ2F0aXZlPTAs'@;
put 'eC5faXNobG5zdWJtdWwoXywxLHhlKSx4LmlzWmVybygpfHwoeC5uZWdhdGl2ZV49MSk7bmUmJihuZS53b3Jkc1t4ZV09T2UpfXJldHVybiBuZSYmbmUuX3N0cmlwKCkseC5fc3RyaXAoKSwiZGl2IiE9PWcmJjAhPT1TJiZ4Lml1c2hybihTKSx7ZGl2Om5lfHxudWxsLG1vZDp4fX0sdy5wcm90'@;
put 'b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKGosZyxTKXtyZXR1cm4gbSghai5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1qLm5lZ2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKGosZyksIm1vZCIhPT1nJiYo'@;
put 'eD1wLmRpdi5uZWcoKSksImRpdiIhPT1nJiYoXz1wLm1vZC5uZWcoKSxTJiYwIT09Xy5uZWdhdGl2ZSYmXy5pYWRkKGopKSx7ZGl2OngsbW9kOl99KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWoubmVnYXRpdmU/KHA9dGhpcy5kaXZtb2Qoai5uZWcoKSxnKSwibW9kIiE9PWcmJih4PXAuZGl2'@;
put 'Lm5lZygpKSx7ZGl2OngsbW9kOnAubW9kfSk6dGhpcy5uZWdhdGl2ZSZqLm5lZ2F0aXZlPyhwPXRoaXMubmVnKCkuZGl2bW9kKGoubmVnKCksZyksImRpdiIhPT1nJiYoXz1wLm1vZC5uZWcoKSxTJiYwIT09Xy5uZWdhdGl2ZSYmXy5pc3ViKGopKSx7ZGl2OnAuZGl2LG1vZDpffSk6ai5sZW5n'@;
put 'dGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKGopPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PWoubGVuZ3RoPyJkaXYiPT09Zz97ZGl2OnRoaXMuZGl2bihqLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1nP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RybihqLndvcmRzWzBd'@;
put 'KSl9OntkaXY6dGhpcy5kaXZuKGoud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKGoud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihqLGcpO3ZhciB4LF8scH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmRpdm1vZChqLCJkaXYiLCExKS5kaXZ9LHcucHJv'@;
put 'dG90eXBlLm1vZD1mdW5jdGlvbihqKXtyZXR1cm4gdGhpcy5kaXZtb2QoaiwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmRpdm1vZChqLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKGope3ZhciBnPXRo'@;
put 'aXMuZGl2bW9kKGopO2lmKGcubW9kLmlzWmVybygpKXJldHVybiBnLmRpdjt2YXIgUz0wIT09Zy5kaXYubmVnYXRpdmU/Zy5tb2QuaXN1YihqKTpnLm1vZCx4PWoudXNocm4oMSksXz1qLmFuZGxuKDEpLHA9Uy5jbXAoeCk7cmV0dXJuIHA8MHx8MT09PV8mJjA9PT1wP2cuZGl2OjAhPT1nLmRp'@;
put 'di5uZWdhdGl2ZT9nLmRpdi5pc3VibigxKTpnLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oail7dmFyIGc9ajwwO2cmJihqPS1qKSxtKGo8PTY3MTA4ODYzKTtmb3IodmFyIFM9KDE8PDI2KSVqLHg9MCxfPXRoaXMubGVuZ3RoLTE7Xz49MDtfLS0peD0oUyp4Kygw'@;
put 'fHRoaXMud29yZHNbX10pKSVqO3JldHVybiBnPy14Onh9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMubW9kcm4oail9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKGope3ZhciBnPWo8MDtnJiYoaj0taiksbShqPD02NzEwODg2Myk7Zm9yKHZhciBTPTAseD10'@;
put 'aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgXz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpTO3RoaXMud29yZHNbeF09Xy9qfDAsUz1fJWp9cmV0dXJuIHRoaXMuX3N0cmlwKCksZz90aGlzLmluZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKGope3JldHVybiB0aGlz'@;
put 'LmNsb25lKCkuaWRpdm4oail9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oail7bSgwPT09ai5uZWdhdGl2ZSksbSghai5pc1plcm8oKSk7dmFyIGc9dGhpcyxTPWouY2xvbmUoKTtnPTAhPT1nLm5lZ2F0aXZlP2cudW1vZChqKTpnLmNsb25lKCk7Zm9yKHZhciB4PW5ldyB3KDEpLF89bmV3'@;
put 'IHcoMCkscD1uZXcgdygwKSxDPW5ldyB3KDEpLEs9MDtnLmlzRXZlbigpJiZTLmlzRXZlbigpOylnLml1c2hybigxKSxTLml1c2hybigxKSwrK0s7Zm9yKHZhciBuZT1TLmNsb25lKCksdWU9Zy5jbG9uZSgpOyFnLmlzWmVybygpOyl7Zm9yKHZhciBoZT0wLHhlPTE7IShnLndvcmRzWzBdJnhl'@;
put 'KSYmaGU8MjY7KytoZSx4ZTw8PTEpO2lmKGhlPjApZm9yKGcuaXVzaHJuKGhlKTtoZS0tID4wOykoeC5pc09kZCgpfHxfLmlzT2RkKCkpJiYoeC5pYWRkKG5lKSxfLmlzdWIodWUpKSx4Lml1c2hybigxKSxfLml1c2hybigxKTtmb3IodmFyIE9lPTAsSGU9MTshKFMud29yZHNbMF0mSGUpJiZP'@;
put 'ZTwyNjsrK09lLEhlPDw9MSk7aWYoT2U+MClmb3IoUy5pdXNocm4oT2UpO09lLS0gPjA7KShwLmlzT2RkKCl8fEMuaXNPZGQoKSkmJihwLmlhZGQobmUpLEMuaXN1Yih1ZSkpLHAuaXVzaHJuKDEpLEMuaXVzaHJuKDEpO2cuY21wKFMpPj0wPyhnLmlzdWIoUykseC5pc3ViKHApLF8uaXN1YihD'@;
put 'KSk6KFMuaXN1YihnKSxwLmlzdWIoeCksQy5pc3ViKF8pKX1yZXR1cm57YTpwLGI6QyxnY2Q6Uy5pdXNobG4oSyl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oail7bSgwPT09ai5uZWdhdGl2ZSksbSghai5pc1plcm8oKSk7dmFyIGhlLGc9dGhpcyxTPWouY2xvbmUoKTtnPTAhPT1n'@;
put 'Lm5lZ2F0aXZlP2cudW1vZChqKTpnLmNsb25lKCk7Zm9yKHZhciB4PW5ldyB3KDEpLF89bmV3IHcoMCkscD1TLmNsb25lKCk7Zy5jbXBuKDEpPjAmJlMuY21wbigxKT4wOyl7Zm9yKHZhciBDPTAsSz0xOyEoZy53b3Jkc1swXSZLKSYmQzwyNjsrK0MsSzw8PTEpO2lmKEM+MClmb3IoZy5pdXNo'@;
put 'cm4oQyk7Qy0tID4wOyl4LmlzT2RkKCkmJnguaWFkZChwKSx4Lml1c2hybigxKTtmb3IodmFyIG5lPTAsdWU9MTshKFMud29yZHNbMF0mdWUpJiZuZTwyNjsrK25lLHVlPDw9MSk7aWYobmU+MClmb3IoUy5pdXNocm4obmUpO25lLS0gPjA7KV8uaXNPZGQoKSYmXy5pYWRkKHApLF8uaXVzaHJu'@;
put 'KDEpO2cuY21wKFMpPj0wPyhnLmlzdWIoUykseC5pc3ViKF8pKTooUy5pc3ViKGcpLF8uaXN1Yih4KSl9cmV0dXJuKGhlPTA9PT1nLmNtcG4oMSk/eDpfKS5jbXBuKDApPDAmJmhlLmlhZGQoaiksaGV9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihqKXtpZih0aGlzLmlzWmVybygpKXJldHVy'@;
put 'biBqLmFicygpO2lmKGouaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGc9dGhpcy5jbG9uZSgpLFM9ai5jbG9uZSgpO2cubmVnYXRpdmU9MCxTLm5lZ2F0aXZlPTA7Zm9yKHZhciB4PTA7Zy5pc0V2ZW4oKSYmUy5pc0V2ZW4oKTt4KyspZy5pdXNocm4oMSksUy5pdXNocm4oMSk7Zm9y'@;
put 'KDs7KXtmb3IoO2cuaXNFdmVuKCk7KWcuaXVzaHJuKDEpO2Zvcig7Uy5pc0V2ZW4oKTspUy5pdXNocm4oMSk7dmFyIF89Zy5jbXAoUyk7aWYoXzwwKXt2YXIgcD1nO2c9UyxTPXB9ZWxzZSBpZigwPT09X3x8MD09PVMuY21wbigxKSlicmVhaztnLmlzdWIoUyl9cmV0dXJuIFMuaXVzaGxuKHgp'@;
put 'fSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmVnY2QoaikuYS51bW9kKGopfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndv'@;
put 'cmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMud29yZHNbMF0man0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oail7bSgibnVtYmVyIj09dHlwZW9mIGopO3ZhciBnPWolMjYsUz0oai1nKS8yNix4PTE8PGc7aWYodGhpcy5sZW5ndGg8PVMpcmV0'@;
put 'dXJuIHRoaXMuX2V4cGFuZChTKzEpLHRoaXMud29yZHNbU118PXgsdGhpcztmb3IodmFyIF89eCxwPVM7MCE9PV8mJnA8dGhpcy5sZW5ndGg7cCsrKXt2YXIgQz0wfHRoaXMud29yZHNbcF07Xz0oQys9Xyk+Pj4yNix0aGlzLndvcmRzW3BdPUMmPTY3MTA4ODYzfXJldHVybiAwIT09XyYmKHRo'@;
put 'aXMud29yZHNbcF09Xyx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihqKXt2YXIgUyxnPWo8MDtpZigwIT09dGhpcy5uZWdh'@;
put 'dGl2ZSYmIWcpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmcpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKVM9MTtlbHNle2cmJihqPS1qKSxtKGo8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciB4PTB8dGhpcy53b3Jkc1swXTtTPXg9PT1q'@;
put 'PzA6eDxqPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVM6U30sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKGope2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09ai5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PWoubmVnYXRpdmUpcmV0dXJuIDE7'@;
put 'dmFyIGc9dGhpcy51Y21wKGopO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1nOmd9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oail7aWYodGhpcy5sZW5ndGg+ai5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8ai5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBnPTAsUz10aGlz'@;
put 'Lmxlbmd0aC0xO1M+PTA7Uy0tKXt2YXIgeD0wfHRoaXMud29yZHNbU10sXz0wfGoud29yZHNbU107aWYoeCE9PV8pe3g8Xz9nPS0xOng+XyYmKGc9MSk7YnJlYWt9fXJldHVybiBnfSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24oail7cmV0dXJuIDE9PT10aGlzLmNtcG4oail9LHcucHJvdG90'@;
put 'eXBlLmd0PWZ1bmN0aW9uKGope3JldHVybiAxPT09dGhpcy5jbXAoail9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuY21wbihqKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmNtcChqKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1'@;
put 'bmN0aW9uKGope3JldHVybi0xPT09dGhpcy5jbXBuKGopfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihqKXtyZXR1cm4tMT09PXRoaXMuY21wKGopfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmNtcG4oaik8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihq'@;
put 'KXtyZXR1cm4gdGhpcy5jbXAoaik8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihqKXtyZXR1cm4gMD09PXRoaXMuY21wbihqKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oail7cmV0dXJuIDA9PT10aGlzLmNtcChqKX0sdy5yZWQ9ZnVuY3Rpb24oail7cmV0dXJuIG5ldyB5KGopfSx3'@;
put 'LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihqKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGouY29udmVydFRvKHRoaXMpLl9mb3Jj'@;
put 'ZVJlZChqKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1m'@;
put 'dW5jdGlvbihqKXtyZXR1cm4gdGhpcy5yZWQ9aix0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihqKXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChqKX0sdy5wcm90b3R5cGUucmVkQWRk'@;
put 'PWZ1bmN0aW9uKGope3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsail9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oail7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRo'@;
put 'IHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLGopfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oail7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxqKX0sdy5wcm90b3R5cGUucmVkSVN1'@;
put 'Yj1mdW5jdGlvbihqKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsail9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihqKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0'@;
put 'aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLGopfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oail7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLGopLHRoaXMucmVkLm11bCh0'@;
put 'aGlzLGopfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKGope3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxqKSx0aGlzLnJlZC5pbXVsKHRoaXMsail9LHcucHJvdG90eXBlLnJlZFNxcj1m'@;
put 'dW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElT'@;
put 'cXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIp'@;
put 'LHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl'@;
put 'ZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1'@;
put 'bmN0aW9uKGope3JldHVybiBtKHRoaXMucmVkJiYhai5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsail9O3ZhciBhZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIHNl'@;
put 'KEgsail7dGhpcy5uYW1lPUgsdGhpcy5wPW5ldyB3KGosMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBkZSgpe3NlLmNhbGwodGhpcywiazI1NiIsImZm'@;
put 'ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbGUoKXtzZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAw'@;
put 'MDAwMSIpfWZ1bmN0aW9uIGNlKCl7c2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBHKCl7c2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZm'@;
put 'ZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiB5KEgpe2lmKCJzdHJpbmciPT10eXBlb2YgSCl7dmFyIGo9dy5fcHJpbWUoSCk7dGhpcy5tPWoucCx0aGlzLnByaW1lPWp9ZWxzZSBtKEguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEi'@;
put 'KSx0aGlzLm09SCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gTChIKXt5LmNhbGwodGhpcyxIKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNo'@;
put 'aWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9'@;
put 'dGhpcy5yLnN1Yih0aGlzLm1pbnYpfXNlLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIGo9bmV3IHcobnVsbCk7cmV0dXJuIGoud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxqfSxzZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihqKXt2YXIgUyxnPWo7ZG97'@;
put 'dGhpcy5zcGxpdChnLHRoaXMudG1wKSxTPShnPShnPXRoaXMuaW11bEsoZykpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShTPnRoaXMubik7dmFyIHg9Uzx0aGlzLm4/LTE6Zy51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT14PyhnLndvcmRzWzBdPTAsZy5sZW5ndGg9MSk6eD4w'@;
put 'P2cuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWcuc3RyaXA/Zy5zdHJpcCgpOmcuX3N0cmlwKCksZ30sc2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKGosZyl7ai5pdXNocm4odGhpcy5uLDAsZyl9LHNlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihqKXtyZXR1cm4gai5pbXVsKHRoaXMuayl9'@;
put 'LFgoZGUsc2UpLGRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihqLGcpe2Zvcih2YXIgUz00MTk0MzAzLHg9TWF0aC5taW4oai5sZW5ndGgsOSksXz0wO188eDtfKyspZy53b3Jkc1tfXT1qLndvcmRzW19dO2lmKGcubGVuZ3RoPXgsai5sZW5ndGg8PTkpcmV0dXJuIGoud29yZHNbMF09MCx2'@;
put 'b2lkKGoubGVuZ3RoPTEpO3ZhciBwPWoud29yZHNbOV07Zm9yKGcud29yZHNbZy5sZW5ndGgrK109cCZTLF89MTA7XzxqLmxlbmd0aDtfKyspe3ZhciBDPTB8ai53b3Jkc1tfXTtqLndvcmRzW18tMTBdPShDJlMpPDw0fHA+Pj4yMixwPUN9ai53b3Jkc1tfLTEwXT1wPj4+PTIyLGoubGVuZ3Ro'@;
put 'LT0wPT09cCYmai5sZW5ndGg+MTA/MTA6OX0sZGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKGope2oud29yZHNbai5sZW5ndGhdPTAsai53b3Jkc1tqLmxlbmd0aCsxXT0wLGoubGVuZ3RoKz0yO2Zvcih2YXIgZz0wLFM9MDtTPGoubGVuZ3RoO1MrKyl7dmFyIHg9MHxqLndvcmRzW1NdO2ou'@;
put 'd29yZHNbU109NjcxMDg4NjMmKGcrPTk3Nyp4KSxnPTY0KngrKGcvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1qLndvcmRzW2oubGVuZ3RoLTFdJiYoai5sZW5ndGgtLSwwPT09ai53b3Jkc1tqLmxlbmd0aC0xXSYmai5sZW5ndGgtLSksan0sWChsZSxzZSksWChjZSxzZSksWChHLHNlKSxHLnBy'@;
put 'b3RvdHlwZS5pbXVsSz1mdW5jdGlvbihqKXtmb3IodmFyIGc9MCxTPTA7UzxqLmxlbmd0aDtTKyspe3ZhciB4PTE5KigwfGoud29yZHNbU10pK2csXz02NzEwODg2MyZ4O3g+Pj49MjYsai53b3Jkc1tTXT1fLGc9eH1yZXR1cm4gMCE9PWcmJihqLndvcmRzW2oubGVuZ3RoKytdPWcpLGp9LHcu'@;
put 'X3ByaW1lPWZ1bmN0aW9uKGope2lmKGFlW2pdKXJldHVybiBhZVtqXTt2YXIgZztpZigiazI1NiI9PT1qKWc9bmV3IGRlO2Vsc2UgaWYoInAyMjQiPT09ailnPW5ldyBsZTtlbHNlIGlmKCJwMTkyIj09PWopZz1uZXcgY2U7ZWxzZXtpZigicDI1NTE5IiE9PWopdGhyb3cgbmV3IEVycm9yKCJV'@;
put 'bmtub3duIHByaW1lICIraik7Zz1uZXcgR31yZXR1cm4gYWVbal09ZyxnfSx5LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihqKXttKDA9PT1qLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oai5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKX0seS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oaixnKXttKCEoai5uZWdhdGl2ZXxnLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKGoucmVkJiZqLnJlZD09PWcucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHkucHJv'@;
put 'dG90eXBlLmltb2Q9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKGopLl9mb3JjZVJlZCh0aGlzKTooSShqLGoudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKSksail9LHkucHJvdG90eXBlLm5lZz1mdW5jdGlvbihqKXtyZXR1cm4gai5pc1plcm8o'@;
put 'KT9qLmNsb25lKCk6dGhpcy5tLnN1YihqKS5fZm9yY2VSZWQodGhpcyl9LHkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihqLGcpe3RoaXMuX3ZlcmlmeTIoaixnKTt2YXIgUz1qLmFkZChnKTtyZXR1cm4gUy5jbXAodGhpcy5tKT49MCYmUy5pc3ViKHRoaXMubSksUy5fZm9yY2VSZWQodGhpcyl9'@;
put 'LHkucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oaixnKXt0aGlzLl92ZXJpZnkyKGosZyk7dmFyIFM9ai5pYWRkKGcpO3JldHVybiBTLmNtcCh0aGlzLm0pPj0wJiZTLmlzdWIodGhpcy5tKSxTfSx5LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oaixnKXt0aGlzLl92ZXJpZnkyKGosZyk7dmFyIFM9'@;
put 'ai5zdWIoZyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxTLl9mb3JjZVJlZCh0aGlzKX0seS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihqLGcpe3RoaXMuX3ZlcmlmeTIoaixnKTt2YXIgUz1qLmlzdWIoZyk7cmV0dXJuIFMuY21wbigwKTwwJiZTLmlhZGQodGhpcy5tKSxT'@;
put 'fSx5LnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oaixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShqKSx0aGlzLmltb2Qoai51c2hsbihnKSl9LHkucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oaixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihqLGcpLHRoaXMuaW1vZChqLmltdWwoZykpfSx5LnByb3Rv'@;
put 'dHlwZS5tdWw9ZnVuY3Rpb24oaixnKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihqLGcpLHRoaXMuaW1vZChqLm11bChnKSl9LHkucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuaW11bChqLGouY2xvbmUoKSl9LHkucHJvdG90eXBlLnNxcj1mdW5jdGlvbihqKXtyZXR1cm4g'@;
put 'dGhpcy5tdWwoaixqKX0seS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihqKXtpZihqLmlzWmVybygpKXJldHVybiBqLmNsb25lKCk7dmFyIGc9dGhpcy5tLmFuZGxuKDMpO2lmKG0oZyUyPT0xKSwzPT09Zyl7dmFyIFM9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlz'@;
put 'LnBvdyhqLFMpfWZvcih2YXIgeD10aGlzLm0uc3VibigxKSxfPTA7IXguaXNaZXJvKCkmJjA9PT14LmFuZGxuKDEpOylfKysseC5pdXNocm4oMSk7bSgheC5pc1plcm8oKSk7dmFyIHA9bmV3IHcoMSkudG9SZWQodGhpcyksQz1wLnJlZE5lZygpLEs9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEp'@;
put 'LG5lPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobmU9bmV3IHcoMipuZSpuZSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG5lLEspLmNtcChDKTspbmUucmVkSUFkZChDKTtmb3IodmFyIHVlPXRoaXMucG93KG5lLHgpLGhlPXRoaXMucG93KGoseC5hZGRuKDEpLml1c2hybigxKSkseGU9dGhp'@;
put 'cy5wb3coaix4KSxPZT1fOzAhPT14ZS5jbXAocCk7KXtmb3IodmFyIEhlPXhlLEVlPTA7MCE9PUhlLmNtcChwKTtFZSsrKUhlPUhlLnJlZFNxcigpO20oRWU8T2UpO3ZhciBMZT10aGlzLnBvdyh1ZSxuZXcgdygxKS5pdXNobG4oT2UtRWUtMSkpO2hlPWhlLnJlZE11bChMZSksdWU9TGUucmVk'@;
put 'U3FyKCkseGU9eGUucmVkTXVsKHVlKSxPZT1FZX1yZXR1cm4gaGV9LHkucHJvdG90eXBlLmludm09ZnVuY3Rpb24oail7dmFyIGc9ai5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWcubmVnYXRpdmU/KGcubmVnYXRpdmU9MCx0aGlzLmltb2QoZykucmVkTmVnKCkpOnRoaXMuaW1vZChnKX0s'@;
put 'eS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKGosZyl7aWYoZy5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWcuY21wbigxKSlyZXR1cm4gai5jbG9uZSgpO3ZhciB4PW5ldyBBcnJheSgxNik7eFswXT1uZXcgdygxKS50b1JlZCh0aGlzKSx4WzFdPWo7Zm9yKHZh'@;
put 'ciBfPTI7Xzx4Lmxlbmd0aDtfKyspeFtfXT10aGlzLm11bCh4W18tMV0saik7dmFyIHA9eFswXSxDPTAsSz0wLG5lPWcuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1uZSYmKG5lPTI2KSxfPWcubGVuZ3RoLTE7Xz49MDtfLS0pe2Zvcih2YXIgdWU9Zy53b3Jkc1tfXSxoZT1uZS0xO2hlPj0wO2hl'@;
put 'LS0pe3ZhciB4ZT11ZT4+aGUmMTtwIT09eFswXSYmKHA9dGhpcy5zcXIocCkpLDAhPT14ZXx8MCE9PUM/KEM8PD0xLEN8PXhlLCg0PT0rK0t8fDA9PT1fJiYwPT09aGUpJiYocD10aGlzLm11bChwLHhbQ10pLEs9MCxDPTApKTpLPTB9bmU9MjZ9cmV0dXJuIHB9LHkucHJvdG90eXBlLmNvbnZl'@;
put 'cnRUbz1mdW5jdGlvbihqKXt2YXIgZz1qLnVtb2QodGhpcy5tKTtyZXR1cm4gZz09PWo/Zy5jbG9uZSgpOmd9LHkucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGope3ZhciBnPWouY2xvbmUoKTtyZXR1cm4gZy5yZWQ9bnVsbCxnfSx3Lm1vbnQ9ZnVuY3Rpb24oail7cmV0dXJuIG5l'@;
put 'dyBMKGopfSxYKEwseSksTC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKGope3JldHVybiB0aGlzLmltb2Qoai51c2hsbih0aGlzLnNoaWZ0KSl9LEwucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKGope3ZhciBnPXRoaXMuaW1vZChqLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4g'@;
put 'Zy5yZWQ9bnVsbCxnfSxMLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKGosZyl7aWYoai5pc1plcm8oKXx8Zy5pc1plcm8oKSlyZXR1cm4gai53b3Jkc1swXT0wLGoubGVuZ3RoPTEsajt2YXIgUz1qLmltdWwoZykseD1TLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0'@;
put 'aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxfPVMuaXN1Yih4KS5pdXNocm4odGhpcy5zaGlmdCkscD1fO3JldHVybiBfLmNtcCh0aGlzLm0pPj0wP3A9Xy5pc3ViKHRoaXMubSk6Xy5jbXBuKDApPDAmJihwPV8uaWFkZCh0aGlzLm0pKSxwLl9mb3JjZVJlZCh0aGlzKX0sTC5wcm90b3R5cGUubXVs'@;
put 'PWZ1bmN0aW9uKGosZyl7aWYoai5pc1plcm8oKXx8Zy5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBTPWoubXVsKGcpLHg9Uy5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksXz1TLmlzdWIo'@;
put 'eCkuaXVzaHJuKHRoaXMuc2hpZnQpLHA9XztyZXR1cm4gXy5jbXAodGhpcy5tKT49MD9wPV8uaXN1Yih0aGlzLm0pOl8uY21wbigwKTwwJiYocD1fLmlhZGQodGhpcy5tKSkscC5fZm9yY2VSZWQodGhpcyl9LEwucHJvdG90eXBlLmludm09ZnVuY3Rpb24oail7cmV0dXJuIHRoaXMuaW1vZChq'@;
put 'Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oJGU9Ui5ubWQoJGUpLHRoaXMpfSwzNTI5NDooJGUsU2UsUik9Pnt2YXIgZWU7ZnVuY3Rpb24gYihYKXt0aGlzLnJhbmQ9WH1pZigkZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBlZXx8KGVlPW5ldyBi'@;
put 'KG51bGwpKSxlZS5nZW5lcmF0ZSh3KX0sJGUuZXhwb3J0cy5SYW5kPWIsYi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LGIucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5k'@;
put 'LmdldEJ5dGVzKHcpO2Zvcih2YXIgQT1uZXcgVWludDhBcnJheSh3KSxEPTA7RDxBLmxlbmd0aDtEKyspQVtEXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBBfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9iLnByb3Rv'@;
put 'dHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgQT1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKEEpLEF9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP2IucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3Zh'@;
put 'ciBBPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhBKSxBfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKGIucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNl'@;
put 'IHRyeXt2YXIgbT1SKDkxNDI2KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgbS5yYW5kb21CeXRlcyl0aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTtiLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gbS5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sMTIzNzU6KCRlLFNl'@;
put 'LFIpPT57dmFyIGVlPVIoMjcwNTQpLkJ1ZmZlcjtmdW5jdGlvbiBiKFApe2VlLmlzQnVmZmVyKFApfHwoUD1lZS5mcm9tKFApKTtmb3IodmFyIFU9UC5sZW5ndGgvNHwwLEk9bmV3IEFycmF5KFUpLEU9MDtFPFU7RSsrKUlbRV09UC5yZWFkVUludDMyQkUoNCpFKTtyZXR1cm4gSX1mdW5jdGlv'@;
put 'biBtKFApe2Zvcig7MDxQLmxlbmd0aDtQKyspUFswXT0wfWZ1bmN0aW9uIFgoUCxVLEksRSxrKXtmb3IodmFyIHRlLGFlLHNlLGRlLEI9SVswXSxOPUlbMV0sVj1JWzJdLFo9SVszXSxXPVBbMF1eVVswXSx6PVBbMV1eVVsxXSxxPVBbMl1eVVsyXSxRPVBbM11eVVszXSxsZT00LGNlPTE7Y2U8'@;
put 'aztjZSsrKXRlPUJbVz4+PjI0XV5OW3o+Pj4xNiYyNTVdXlZbcT4+PjgmMjU1XV5aWzI1NSZRXV5VW2xlKytdLGFlPUJbej4+PjI0XV5OW3E+Pj4xNiYyNTVdXlZbUT4+PjgmMjU1XV5aWzI1NSZXXV5VW2xlKytdLHNlPUJbcT4+PjI0XV5OW1E+Pj4xNiYyNTVdXlZbVz4+PjgmMjU1XV5aWzI1'@;
put 'NSZ6XV5VW2xlKytdLGRlPUJbUT4+PjI0XV5OW1c+Pj4xNiYyNTVdXlZbej4+PjgmMjU1XV5aWzI1NSZxXV5VW2xlKytdLFc9dGUsej1hZSxxPXNlLFE9ZGU7cmV0dXJuIHRlPShFW1c+Pj4yNF08PDI0fEVbej4+PjE2JjI1NV08PDE2fEVbcT4+PjgmMjU1XTw8OHxFWzI1NSZRXSleVVtsZSsr'@;
put 'XSxhZT0oRVt6Pj4+MjRdPDwyNHxFW3E+Pj4xNiYyNTVdPDwxNnxFW1E+Pj44JjI1NV08PDh8RVsyNTUmV10pXlVbbGUrK10sc2U9KEVbcT4+PjI0XTw8MjR8RVtRPj4+MTYmMjU1XTw8MTZ8RVtXPj4+OCYyNTVdPDw4fEVbMjU1JnpdKV5VW2xlKytdLGRlPShFW1E+Pj4yNF08PDI0fEVbVz4+'@;
put 'PjE2JjI1NV08PDE2fEVbej4+PjgmMjU1XTw8OHxFWzI1NSZxXSleVVtsZSsrXSxbdGU+Pj49MCxhZT4+Pj0wLHNlPj4+PTAsZGU+Pj49MF19dmFyIHc9WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdLEE9ZnVuY3Rpb24oKXtmb3IodmFyIFA9bmV3IEFycmF5KDI1NiksVT0wO1U8MjU2'@;
put 'O1UrKylQW1VdPVU8MTI4P1U8PDE6VTw8MV4yODM7Zm9yKHZhciBJPVtdLEU9W10saz1bW10sW10sW10sW11dLEI9W1tdLFtdLFtdLFtdXSxOPTAsVj0wLFo9MDtaPDI1NjsrK1ope3ZhciBXPVZeVjw8MV5WPDwyXlY8PDNeVjw8NDtJW05dPVc9Vz4+PjheMjU1JldeOTksRVtXXT1OO3ZhciB6'@;
put 'PVBbTl0scT1QW3pdLFE9UFtxXSx0ZT0yNTcqUFtXXV4xNjg0MzAwOCpXO2tbMF1bTl09dGU8PDI0fHRlPj4+OCxrWzFdW05dPXRlPDwxNnx0ZT4+PjE2LGtbMl1bTl09dGU8PDh8dGU+Pj4yNCxrWzNdW05dPXRlLEJbMF1bV109KHRlPTE2ODQzMDA5KlFeNjU1MzcqcV4yNTcqel4xNjg0MzAw'@;
put 'OCpOKTw8MjR8dGU+Pj44LEJbMV1bV109dGU8PDE2fHRlPj4+MTYsQlsyXVtXXT10ZTw8OHx0ZT4+PjI0LEJbM11bV109dGUsMD09PU4/Tj1WPTE6KE49el5QW1BbUFtRXnpdXV0sVl49UFtQW1ZdXSl9cmV0dXJue1NCT1g6SSxJTlZfU0JPWDpFLFNVQl9NSVg6ayxJTlZfU1VCX01JWDpCfX0o'@;
put 'KTtmdW5jdGlvbiBEKFApe3RoaXMuX2tleT1iKFApLHRoaXMuX3Jlc2V0KCl9RC5ibG9ja1NpemU9MTYsRC5rZXlTaXplPTMyLEQucHJvdG90eXBlLmJsb2NrU2l6ZT1ELmJsb2NrU2l6ZSxELnByb3RvdHlwZS5rZXlTaXplPUQua2V5U2l6ZSxELnByb3RvdHlwZS5fcmVzZXQ9ZnVuY3Rpb24o'@;
put 'KXtmb3IodmFyIFA9dGhpcy5fa2V5LFU9UC5sZW5ndGgsST1VKzYsRT00KihJKzEpLGs9W10sQj0wO0I8VTtCKyspa1tCXT1QW0JdO2ZvcihCPVU7QjxFO0IrKyl7dmFyIE49a1tCLTFdO0IlVT09MD8oTj1BLlNCT1hbKE49Tjw8OHxOPj4+MjQpPj4+MjRdPDwyNHxBLlNCT1hbTj4+PjE2JjI1'@;
put 'NV08PDE2fEEuU0JPWFtOPj4+OCYyNTVdPDw4fEEuU0JPWFsyNTUmTl0sTl49d1tCL1V8MF08PDI0KTpVPjYmJkIlVT09NCYmKE49QS5TQk9YW04+Pj4yNF08PDI0fEEuU0JPWFtOPj4+MTYmMjU1XTw8MTZ8QS5TQk9YW04+Pj44JjI1NV08PDh8QS5TQk9YWzI1NSZOXSksa1tCXT1rW0ItVV1e'@;
put 'Tn1mb3IodmFyIFY9W10sWj0wO1o8RTtaKyspe3ZhciBXPUUtWix6PWtbVy0oWiU0PzA6NCldO1ZbWl09Wjw0fHxXPD00P3o6QS5JTlZfU1VCX01JWFswXVtBLlNCT1hbej4+PjI0XV1eQS5JTlZfU1VCX01JWFsxXVtBLlNCT1hbej4+PjE2JjI1NV1dXkEuSU5WX1NVQl9NSVhbMl1bQS5TQk9Y'@;
put 'W3o+Pj44JjI1NV1dXkEuSU5WX1NVQl9NSVhbM11bQS5TQk9YWzI1NSZ6XV19dGhpcy5fblJvdW5kcz1JLHRoaXMuX2tleVNjaGVkdWxlPWssdGhpcy5faW52S2V5U2NoZWR1bGU9Vn0sRC5wcm90b3R5cGUuZW5jcnlwdEJsb2NrUmF3PWZ1bmN0aW9uKFApe3JldHVybiBYKFA9YihQKSx0aGlz'@;
put 'Ll9rZXlTY2hlZHVsZSxBLlNVQl9NSVgsQS5TQk9YLHRoaXMuX25Sb3VuZHMpfSxELnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oUCl7dmFyIFU9dGhpcy5lbmNyeXB0QmxvY2tSYXcoUCksST1lZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEkud3JpdGVVSW50MzJCRShVWzBdLDAp'@;
put 'LEkud3JpdGVVSW50MzJCRShVWzFdLDQpLEkud3JpdGVVSW50MzJCRShVWzJdLDgpLEkud3JpdGVVSW50MzJCRShVWzNdLDEyKSxJfSxELnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oUCl7dmFyIFU9KFA9YihQKSlbMV07UFsxXT1QWzNdLFBbM109VTt2YXIgST1YKFAsdGhpcy5f'@;
put 'aW52S2V5U2NoZWR1bGUsQS5JTlZfU1VCX01JWCxBLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEU9ZWUuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBFLndyaXRlVUludDMyQkUoSVswXSwwKSxFLndyaXRlVUludDMyQkUoSVszXSw0KSxFLndyaXRlVUludDMyQkUoSVsyXSw4KSxFLndyaXRlVUlu'@;
put 'dDMyQkUoSVsxXSwxMiksRX0sRC5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXttKHRoaXMuX2tleVNjaGVkdWxlKSxtKHRoaXMuX2ludktleVNjaGVkdWxlKSxtKHRoaXMuX2tleSl9LCRlLmV4cG9ydHMuQUVTPUR9LDE5MzA3OigkZSxTZSxSKT0+e3ZhciBlZT1SKDEyMzc1KSxiPVIoMjcw'@;
put 'NTQpLkJ1ZmZlcixtPVIoMzI0NyksWD1SKDcxOTkzKSx3PVIoODU5MTcpLEE9UigxMzU0NiksRD1SKDk1NzI1KTtmdW5jdGlvbiBJKEUsayxCLE4pe20uY2FsbCh0aGlzKTt2YXIgVj1iLmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBlZS5BRVMoayk7dmFyIFo9dGhpcy5fY2lwaGVyLmVu'@;
put 'Y3J5cHRCbG9jayhWKTt0aGlzLl9naGFzaD1uZXcgdyhaKSxCPWZ1bmN0aW9uIFUoRSxrLEIpe2lmKDEyPT09ay5sZW5ndGgpcmV0dXJuIEUuX2ZpbklEPWIuY29uY2F0KFtrLGIuZnJvbShbMCwwLDAsMV0pXSksYi5jb25jYXQoW2ssYi5mcm9tKFswLDAsMCwyXSldKTt2YXIgTj1uZXcgdyhC'@;
put 'KSxWPWsubGVuZ3RoLFo9ViUxNjtOLnVwZGF0ZShrKSxaJiZOLnVwZGF0ZShiLmFsbG9jKFo9MTYtWiwwKSksTi51cGRhdGUoYi5hbGxvYyg4LDApKTt2YXIgVz04KlYsej1iLmFsbG9jKDgpO3oud3JpdGVVSW50QkUoVywwLDgpLE4udXBkYXRlKHopLEUuX2ZpbklEPU4uc3RhdGU7dmFyIHE9'@;
put 'Yi5mcm9tKEUuX2ZpbklEKTtyZXR1cm4gRChxKSxxfSh0aGlzLEIsWiksdGhpcy5fcHJldj1iLmZyb20oQiksdGhpcy5fY2FjaGU9Yi5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1iLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9Tix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAs'@;
put 'dGhpcy5fbW9kZT1FLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9WChJLG0pLEkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRSl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIGs9MTYtdGhpcy5fYWxlbiUxNjtrPDE2JiYoaz1iLmFsbG9jKGssMCksdGhp'@;
put 'cy5fZ2hhc2gudXBkYXRlKGspKX10aGlzLl9jYWxsZWQ9ITA7dmFyIEI9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsRSk7cmV0dXJuIHRoaXMuX2doYXNoLnVwZGF0ZSh0aGlzLl9kZWNyeXB0P0U6QiksdGhpcy5fbGVuKz1FLmxlbmd0aCxCfSxJLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24o'@;
put 'KXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3ZhciBFPUEodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBo'@;
put 'ZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCYmZnVuY3Rpb24gUChFLGspe3ZhciBCPTA7RS5sZW5ndGghPT1rLmxlbmd0aCYmQisrO2Zvcih2YXIgTj1NYXRoLm1pbihFLmxlbmd0aCxrLmxlbmd0aCksVj0wO1Y8TjsrK1YpQis9RVtWXV5rW1ZdO3JldHVy'@;
put 'biBCfShFLHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dGhpcy5fYXV0aFRhZz1FLHRoaXMuX2NpcGhlci5zY3J1YigpfSxJLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYo'@;
put 'dGhpcy5fZGVjcnlwdHx8IWIuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3JldHVybiB0aGlzLl9hdXRoVGFnfSxJLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKGsp'@;
put 'e2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9hdXRoVGFnPWt9LEkucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbihrKXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTt0aGlzLl9naGFzaC51cGRhdGUoayksdGhpcy5fYWxlbis9ay5sZW5ndGh9LCRlLmV4cG9ydHM9SX0sNDMzODg6KCRlLFNlLFIpPT57dmFyIGVlPVIoMzUwKSxiPVIoNjAxMDIpLG09UigzMjE5KTtTZS5jcmVh'@;
put 'dGVDaXBoZXI9U2UuQ2lwaGVyPWVlLmNyZWF0ZUNpcGhlcixTZS5jcmVhdGVDaXBoZXJpdj1TZS5DaXBoZXJpdj1lZS5jcmVhdGVDaXBoZXJpdixTZS5jcmVhdGVEZWNpcGhlcj1TZS5EZWNpcGhlcj1iLmNyZWF0ZURlY2lwaGVyLFNlLmNyZWF0ZURlY2lwaGVyaXY9U2UuRGVjaXBoZXJpdj1i'@;
put 'LmNyZWF0ZURlY2lwaGVyaXYsU2UubGlzdENpcGhlcnM9U2UuZ2V0Q2lwaGVycz1mdW5jdGlvbiBYKCl7cmV0dXJuIE9iamVjdC5rZXlzKG0pfX0sNjAxMDI6KCRlLFNlLFIpPT57dmFyIGVlPVIoMTkzMDcpLGI9UigyNzA1NCkuQnVmZmVyLG09Uig2MDUwMyksWD1SKDkxODIxKSx3PVIoMzI0'@;
put 'NyksQT1SKDEyMzc1KSxEPVIoMTgyMTEpO2Z1bmN0aW9uIFUoTixWLFope3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgSSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IEEuQUVTKFYpLHRoaXMuX3ByZXY9Yi5mcm9tKFopLHRoaXMuX21vZGU9Tix0aGlzLl9hdXRvcGFk'@;
put 'ZGluZz0hMH1mdW5jdGlvbiBJKCl7dGhpcy5jYWNoZT1iLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIGsoTixWLFope3ZhciBXPW1bTi50b0xvd2VyQ2FzZSgpXTtpZighVyl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtpZigic3RyaW5nIj09dHlwZW9mIFomJiha'@;
put 'PWIuZnJvbShaKSksIkdDTSIhPT1XLm1vZGUmJloubGVuZ3RoIT09Vy5pdil0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIGl2IGxlbmd0aCAiK1oubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFYmJihWPWIuZnJvbShWKSksVi5sZW5ndGghPT1XLmtleS84KXRocm93IG5ldyBUeXBl'@;
put 'RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1YubGVuZ3RoKTtyZXR1cm4ic3RyZWFtIj09PVcudHlwZT9uZXcgWChXLm1vZHVsZSxWLFosITApOiJhdXRoIj09PVcudHlwZT9uZXcgZWUoVy5tb2R1bGUsVixaLCEwKTpuZXcgVShXLm1vZHVsZSxWLFopfVIoNzE5OTMpKFUsdyksVS5wcm90'@;
put 'b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9jYWNoZS5hZGQoTik7Zm9yKHZhciBWLFosVz1bXTtWPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KVo9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsViksVy5wdXNoKFopO3JldHVybiBiLmNvbmNhdChXKX0sVS5wcm90'@;
put 'b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gRShOKXt2YXIgVj1OWzE1XTtpZihWPDF8fFY+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZh'@;
put 'ciBaPS0xOysrWjxWOylpZihOW1orKDE2LVYpXSE9PVYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1WKXJldHVybiBOLnNsaWNlKDAsMTYtVil9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLE4pKTtpZihOKXRocm93IG5ldyBFcnJvcigiZGF0YSBu'@;
put 'b3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LFUucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIU4sdGhpc30sSS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe3RoaXMuY2FjaGU9Yi5jb25jYXQoW3RoaXMuY2FjaGUs'@;
put 'Tl0pfSxJLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oTil7dmFyIFY7aWYoTil7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFY9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFZ9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYp'@;
put 'cmV0dXJuIFY9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFY7cmV0dXJuIG51bGx9LEkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LFNlLmNyZWF0ZURlY2lwaGVy'@;
put 'PWZ1bmN0aW9uIEIoTixWKXt2YXIgWj1tW04udG9Mb3dlckNhc2UoKV07aWYoIVopdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFc9RChWLCExLFoua2V5LFouaXYpO3JldHVybiBrKE4sVy5rZXksVy5pdil9LFNlLmNyZWF0ZURlY2lwaGVyaXY9a30sMzUw'@;
put 'OigkZSxTZSxSKT0+e3ZhciBlZT1SKDYwNTAzKSxiPVIoMTkzMDcpLG09UigyNzA1NCkuQnVmZmVyLFg9Uig5MTgyMSksdz1SKDMyNDcpLEE9UigxMjM3NSksRD1SKDE4MjExKTtmdW5jdGlvbiBVKE4sVixaKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEUsdGhpcy5fY2lwaGVyPW5l'@;
put 'dyBBLkFFUyhWKSx0aGlzLl9wcmV2PW0uZnJvbShaKSx0aGlzLl9tb2RlPU4sdGhpcy5fYXV0b3BhZGRpbmc9ITB9Uig3MTk5MykoVSx3KSxVLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2NhY2hlLmFkZChOKTtmb3IodmFyIFYsWixXPVtdO1Y9dGhpcy5fY2FjaGUuZ2V0'@;
put 'KCk7KVo9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsViksVy5wdXNoKFopO3JldHVybiBtLmNvbmNhdChXKX07dmFyIEk9bS5hbGxvYygxNiwxNik7ZnVuY3Rpb24gRSgpe3RoaXMuY2FjaGU9bS5hbGxvY1Vuc2FmZSgwKX1mdW5jdGlvbiBrKE4sVixaKXt2YXIgVz1lZVtOLnRvTG93ZXJDYXNl'@;
put 'KCldO2lmKCFXKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgViYmKFY9bS5mcm9tKFYpKSxWLmxlbmd0aCE9PVcua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrVi5sZW5ndGgpO2lmKCJz'@;
put 'dHJpbmciPT10eXBlb2YgWiYmKFo9bS5mcm9tKFopKSwiR0NNIiE9PVcubW9kZSYmWi5sZW5ndGghPT1XLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWi5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09Vy50eXBlP25ldyBYKFcubW9kdWxlLFYsWik6ImF1dGgi'@;
put 'PT09Vy50eXBlP25ldyBiKFcubW9kdWxlLFYsWik6bmV3IFUoVy5tb2R1bGUsVixaKX1VLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBOPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLE4pLHRo'@;
put 'aXMuX2NpcGhlci5zY3J1YigpLE47aWYoIU4uZXF1YWxzKEkpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoIil9LFUucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKE4pe3JldHVybiB0aGlzLl9h'@;
put 'dXRvcGFkZGluZz0hIU4sdGhpc30sRS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe3RoaXMuY2FjaGU9bS5jb25jYXQoW3RoaXMuY2FjaGUsTl0pfSxFLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIE49dGhpcy5jYWNoZS5zbGljZSgwLDE2'@;
put 'KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxOfXJldHVybiBudWxsfSxFLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgTj0xNi10aGlzLmNhY2hlLmxlbmd0aCxWPW0uYWxsb2NVbnNhZmUoTiksWj0tMTsrK1o8TjspVi53cml0ZVVJbnQ4KE4sWik7'@;
put 'cmV0dXJuIG0uY29uY2F0KFt0aGlzLmNhY2hlLFZdKX0sU2UuY3JlYXRlQ2lwaGVyaXY9ayxTZS5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gQihOLFYpe3ZhciBaPWVlW04udG9Mb3dlckNhc2UoKV07aWYoIVopdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7dmFyIFc9'@;
put 'RChWLCExLFoua2V5LFouaXYpO3JldHVybiBrKE4sVy5rZXksVy5pdil9fSw4NTkxNzooJGUsU2UsUik9Pnt2YXIgZWU9UigyNzA1NCkuQnVmZmVyLGI9ZWUuYWxsb2MoMTYsMCk7ZnVuY3Rpb24gWChBKXt2YXIgRD1lZS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEQud3JpdGVVSW50MzJCRShB'@;
put 'WzBdPj4+MCwwKSxELndyaXRlVUludDMyQkUoQVsxXT4+PjAsNCksRC53cml0ZVVJbnQzMkJFKEFbMl0+Pj4wLDgpLEQud3JpdGVVSW50MzJCRShBWzNdPj4+MCwxMiksRH1mdW5jdGlvbiB3KEEpe3RoaXMuaD1BLHRoaXMuc3RhdGU9ZWUuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1lZS5hbGxv'@;
put 'Y1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihBKXtmb3IodmFyIEQ9LTE7KytEPEEubGVuZ3RoOyl0aGlzLnN0YXRlW0RdXj1BW0RdO3RoaXMuX211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgUCxJLEE9ZnVuY3Rpb24gbShB'@;
put 'KXtyZXR1cm5bQS5yZWFkVUludDMyQkUoMCksQS5yZWFkVUludDMyQkUoNCksQS5yZWFkVUludDMyQkUoOCksQS5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxEPVswLDAsMCwwXSxFPS0xOysrRTwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihFLzgpXSYxPDw3LUUlOCkmJihEWzBdXj1B'@;
put 'WzBdLERbMV1ePUFbMV0sRFsyXV49QVsyXSxEWzNdXj1BWzNdKSxJPSEhKDEmQVszXSksUD0zO1A+MDtQLS0pQVtQXT1BW1BdPj4+MXwoMSZBW1AtMV0pPDwzMTtBWzBdPUFbMF0+Pj4xLEkmJihBWzBdPUFbMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1YKEQpfSx3LnByb3RvdHlwZS51cGRhdGU9'@;
put 'ZnVuY3Rpb24oQSl7dGhpcy5jYWNoZT1lZS5jb25jYXQoW3RoaXMuY2FjaGUsQV0pO2Zvcih2YXIgRDt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KUQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2goRCl9LHcucHJvdG90eXBl'@;
put 'LmZpbmFsPWZ1bmN0aW9uKEEsRCl7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGVlLmNvbmNhdChbdGhpcy5jYWNoZSxiXSwxNikpLHRoaXMuZ2hhc2goWChbMCxBLDAsRF0pKSx0aGlzLnN0YXRlfSwkZS5leHBvcnRzPXd9LDk1NzI1OiRlPT57JGUuZXhwb3J0cz1mdW5j'@;
put 'dGlvbiBTZShSKXtmb3IodmFyIGIsZWU9Ui5sZW5ndGg7ZWUtLTspe2lmKDI1NSE9PShiPVIucmVhZFVJbnQ4KGVlKSkpe2IrKyxSLndyaXRlVUludDgoYixlZSk7YnJlYWt9Ui53cml0ZVVJbnQ4KDAsZWUpfX19LDM0MTMzOigkZSxTZSxSKT0+e3ZhciBlZT1SKDEzNTQ2KTtTZS5lbmNyeXB0'@;
put 'PWZ1bmN0aW9uKGIsbSl7dmFyIFg9ZWUobSxiLl9wcmV2KTtyZXR1cm4gYi5fcHJldj1iLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFgpLGIuX3ByZXZ9LFNlLmRlY3J5cHQ9ZnVuY3Rpb24oYixtKXt2YXIgWD1iLl9wcmV2O2IuX3ByZXY9bTt2YXIgdz1iLl9jaXBoZXIuZGVjcnlwdEJsb2NrKG0p'@;
put 'O3JldHVybiBlZSh3LFgpfX0sMTcwOTA6KCRlLFNlLFIpPT57dmFyIGVlPVIoMjcwNTQpLkJ1ZmZlcixiPVIoMTM1NDYpO2Z1bmN0aW9uIG0oWCx3LEEpe3ZhciBEPXcubGVuZ3RoLFA9Yih3LFguX2NhY2hlKTtyZXR1cm4gWC5fY2FjaGU9WC5fY2FjaGUuc2xpY2UoRCksWC5fcHJldj1lZS5j'@;
put 'b25jYXQoW1guX3ByZXYsQT93OlBdKSxQfVNlLmVuY3J5cHQ9ZnVuY3Rpb24oWCx3LEEpe2Zvcih2YXIgUCxEPWVlLmFsbG9jVW5zYWZlKDApO3cubGVuZ3RoOyl7aWYoMD09PVguX2NhY2hlLmxlbmd0aCYmKFguX2NhY2hlPVguX2NpcGhlci5lbmNyeXB0QmxvY2soWC5fcHJldiksWC5fcHJl'@;
put 'dj1lZS5hbGxvY1Vuc2FmZSgwKSksIShYLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7RD1lZS5jb25jYXQoW0QsbShYLHcsQSldKTticmVha31EPWVlLmNvbmNhdChbRCxtKFgsdy5zbGljZSgwLFA9WC5fY2FjaGUubGVuZ3RoKSxBKV0pLHc9dy5zbGljZShQKX1yZXR1cm4gRH19LDcxMDM5'@;
put 'OigkZSxTZSxSKT0+e3ZhciBlZT1SKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gYihYLHcsQSl7Zm9yKHZhciBFLGssUD0tMSxJPTA7KytQPDg7KUkrPSgxMjgmKGs9WC5fY2lwaGVyLmVuY3J5cHRCbG9jayhYLl9wcmV2KVswXV4oRT13JjE8PDctUD8xMjg6MCkpKT4+UCU4LFguX3ByZXY9bShY'@;
put 'Ll9wcmV2LEE/RTprKTtyZXR1cm4gSX1mdW5jdGlvbiBtKFgsdyl7dmFyIEE9WC5sZW5ndGgsRD0tMSxQPWVlLmFsbG9jVW5zYWZlKFgubGVuZ3RoKTtmb3IoWD1lZS5jb25jYXQoW1gsZWUuZnJvbShbd10pXSk7KytEPEE7KVBbRF09WFtEXTw8MXxYW0QrMV0+Pjc7cmV0dXJuIFB9U2UuZW5j'@;
put 'cnlwdD1mdW5jdGlvbihYLHcsQSl7Zm9yKHZhciBEPXcubGVuZ3RoLFA9ZWUuYWxsb2NVbnNhZmUoRCksVT0tMTsrK1U8RDspUFtVXT1iKFgsd1tVXSxBKTtyZXR1cm4gUH19LDcyNTc2OigkZSxTZSxSKT0+e3ZhciBlZT1SKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24gYihtLFgsdyl7dmFyIEQ9'@;
put 'bS5fY2lwaGVyLmVuY3J5cHRCbG9jayhtLl9wcmV2KVswXV5YO3JldHVybiBtLl9wcmV2PWVlLmNvbmNhdChbbS5fcHJldi5zbGljZSgxKSxlZS5mcm9tKFt3P1g6RF0pXSksRH1TZS5lbmNyeXB0PWZ1bmN0aW9uKG0sWCx3KXtmb3IodmFyIEE9WC5sZW5ndGgsRD1lZS5hbGxvY1Vuc2FmZShB'@;
put 'KSxQPS0xOysrUDxBOylEW1BdPWIobSxYW1BdLHcpO3JldHVybiBEfX0sNzAzMzY6KCRlLFNlLFIpPT57dmFyIGVlPVIoMTM1NDYpLGI9UigyNzA1NCkuQnVmZmVyLG09Uig5NTcyNSk7ZnVuY3Rpb24gWChBKXt2YXIgRD1BLl9jaXBoZXIuZW5jcnlwdEJsb2NrUmF3KEEuX3ByZXYpO3JldHVy'@;
put 'biBtKEEuX3ByZXYpLER9U2UuZW5jcnlwdD1mdW5jdGlvbihBLEQpe3ZhciBQPU1hdGguY2VpbChELmxlbmd0aC8xNiksVT1BLl9jYWNoZS5sZW5ndGg7QS5fY2FjaGU9Yi5jb25jYXQoW0EuX2NhY2hlLGIuYWxsb2NVbnNhZmUoMTYqUCldKTtmb3IodmFyIEk9MDtJPFA7SSsrKXt2YXIgRT1Y'@;
put 'KEEpLGs9VSsxNipJO0EuX2NhY2hlLndyaXRlVUludDMyQkUoRVswXSxrKzApLEEuX2NhY2hlLndyaXRlVUludDMyQkUoRVsxXSxrKzQpLEEuX2NhY2hlLndyaXRlVUludDMyQkUoRVsyXSxrKzgpLEEuX2NhY2hlLndyaXRlVUludDMyQkUoRVszXSxrKzEyKX12YXIgQj1BLl9jYWNoZS5zbGlj'@;
put 'ZSgwLEQubGVuZ3RoKTtyZXR1cm4gQS5fY2FjaGU9QS5fY2FjaGUuc2xpY2UoRC5sZW5ndGgpLGVlKEQsQil9fSwzNzUxMzooJGUsU2UpPT57U2UuZW5jcnlwdD1mdW5jdGlvbihSLGVlKXtyZXR1cm4gUi5fY2lwaGVyLmVuY3J5cHRCbG9jayhlZSl9LFNlLmRlY3J5cHQ9ZnVuY3Rpb24oUixl'@;
put 'ZSl7cmV0dXJuIFIuX2NpcGhlci5kZWNyeXB0QmxvY2soZWUpfX0sNjA1MDM6KCRlLFNlLFIpPT57dmFyIGVlPXtFQ0I6UigzNzUxMyksQ0JDOlIoMzQxMzMpLENGQjpSKDE3MDkwKSxDRkI4OlIoNzI1NzYpLENGQjE6Uig3MTAzOSksT0ZCOlIoNDY4NTQpLENUUjpSKDcwMzM2KSxHQ006Uig3'@;
put 'MDMzNil9LGI9UigzMjE5KTtmb3IodmFyIG0gaW4gYiliW21dLm1vZHVsZT1lZVtiW21dLm1vZGVdOyRlLmV4cG9ydHM9Yn0sNDY4NTQ6KCRlLFNlLFIpPT57dmFyIGVlPVIoMTM1NDYpO2Z1bmN0aW9uIGIobSl7cmV0dXJuIG0uX3ByZXY9bS5fY2lwaGVyLmVuY3J5cHRCbG9jayhtLl9wcmV2'@;
put 'KSxtLl9wcmV2fVNlLmVuY3J5cHQ9ZnVuY3Rpb24obSxYKXtmb3IoO20uX2NhY2hlLmxlbmd0aDxYLmxlbmd0aDspbS5fY2FjaGU9QnVmZmVyLmNvbmNhdChbbS5fY2FjaGUsYihtKV0pO3ZhciB3PW0uX2NhY2hlLnNsaWNlKDAsWC5sZW5ndGgpO3JldHVybiBtLl9jYWNoZT1tLl9jYWNoZS5z'@;
put 'bGljZShYLmxlbmd0aCksZWUoWCx3KX19LDkxODIxOigkZSxTZSxSKT0+e3ZhciBlZT1SKDEyMzc1KSxiPVIoMjcwNTQpLkJ1ZmZlcixtPVIoMzI0Nyk7ZnVuY3Rpb24gdyhBLEQsUCxVKXttLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBlZS5BRVMoRCksdGhpcy5fcHJldj1iLmZyb20o'@;
put 'UCksdGhpcy5fY2FjaGU9Yi5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT1iLmFsbG9jVW5zYWZlKDApLHRoaXMuX2RlY3J5cHQ9VSx0aGlzLl9tb2RlPUF9Uig3MTk5MykodyxtKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEEpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQo'@;
put 'dGhpcyxBLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sJGUuZXhwb3J0cz13fSw4ODg2MjooJGUsU2UsUik9Pnt2YXIgZWU9UigzOTc5OSksYj1SKDQzMzg4KSxtPVIoNjA1MDMpLFg9Uig1OTU3MSksdz1SKDE4MjEx'@;
put 'KTtmdW5jdGlvbiBQKEUsayxCKXtpZihFPUUudG9Mb3dlckNhc2UoKSxtW0VdKXJldHVybiBiLmNyZWF0ZUNpcGhlcml2KEUsayxCKTtpZihYW0VdKXJldHVybiBuZXcgZWUoe2tleTprLGl2OkIsbW9kZTpFfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVu'@;
put 'Y3Rpb24gVShFLGssQil7aWYoRT1FLnRvTG93ZXJDYXNlKCksbVtFXSlyZXR1cm4gYi5jcmVhdGVEZWNpcGhlcml2KEUsayxCKTtpZihYW0VdKXJldHVybiBuZXcgZWUoe2tleTprLGl2OkIsbW9kZTpFLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5'@;
put 'cGUiKX1TZS5jcmVhdGVDaXBoZXI9U2UuQ2lwaGVyPWZ1bmN0aW9uIEEoRSxrKXt2YXIgQixOO2lmKEU9RS50b0xvd2VyQ2FzZSgpLG1bRV0pQj1tW0VdLmtleSxOPW1bRV0uaXY7ZWxzZXtpZighWFtFXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtCPTgqWFtF'@;
put 'XS5rZXksTj1YW0VdLml2fXZhciBWPXcoaywhMSxCLE4pO3JldHVybiBQKEUsVi5rZXksVi5pdil9LFNlLmNyZWF0ZUNpcGhlcml2PVNlLkNpcGhlcml2PVAsU2UuY3JlYXRlRGVjaXBoZXI9U2UuRGVjaXBoZXI9ZnVuY3Rpb24gRChFLGspe3ZhciBCLE47aWYoRT1FLnRvTG93ZXJDYXNlKCks'@;
put 'bVtFXSlCPW1bRV0ua2V5LE49bVtFXS5pdjtlbHNle2lmKCFYW0VdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO0I9OCpYW0VdLmtleSxOPVhbRV0uaXZ9dmFyIFY9dyhrLCExLEIsTik7cmV0dXJuIFUoRSxWLmtleSxWLml2KX0sU2UuY3JlYXRlRGVjaXBoZXJp'@;
put 'dj1TZS5EZWNpcGhlcml2PVUsU2UubGlzdENpcGhlcnM9U2UuZ2V0Q2lwaGVycz1mdW5jdGlvbiBJKCl7cmV0dXJuIE9iamVjdC5rZXlzKFgpLmNvbmNhdChiLmdldENpcGhlcnMoKSl9fSwzOTc5OTooJGUsU2UsUik9Pnt2YXIgZWU9UigzMjQ3KSxiPVIoNzE1NDkpLG09Uig3MTk5MyksWD1S'@;
put 'KDI3MDU0KS5CdWZmZXIsdz17ImRlcy1lZGUzLWNiYyI6Yi5DQkMuaW5zdGFudGlhdGUoYi5FREUpLCJkZXMtZWRlMyI6Yi5FREUsImRlcy1lZGUtY2JjIjpiLkNCQy5pbnN0YW50aWF0ZShiLkVERSksImRlcy1lZGUiOmIuRURFLCJkZXMtY2JjIjpiLkNCQy5pbnN0YW50aWF0ZShiLkRFUyks'@;
put 'ImRlcy1lY2IiOmIuREVTfTtmdW5jdGlvbiBBKEQpe2VlLmNhbGwodGhpcyk7dmFyIEksUD1ELm1vZGUudG9Mb3dlckNhc2UoKSxVPXdbUF07ST1ELmRlY3J5cHQ/ImRlY3J5cHQiOiJlbmNyeXB0Ijt2YXIgRT1ELmtleTtYLmlzQnVmZmVyKEUpfHwoRT1YLmZyb20oRSkpLCgiZGVzLWVkZSI9'@;
put 'PT1QfHwiZGVzLWVkZS1jYmMiPT09UCkmJihFPVguY29uY2F0KFtFLEUuc2xpY2UoMCw4KV0pKTt2YXIgaz1ELml2O1guaXNCdWZmZXIoayl8fChrPVguZnJvbShrKSksdGhpcy5fZGVzPVUuY3JlYXRlKHtrZXk6RSxpdjprLHR5cGU6SX0pfXcuZGVzPXdbImRlcy1jYmMiXSx3LmRlczM9d1si'@;
put 'ZGVzLWVkZTMtY2JjIl0sJGUuZXhwb3J0cz1BLG0oQSxlZSksQS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihEKXtyZXR1cm4gWC5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoRCkpfSxBLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gWC5mcm9tKHRoaXMuX2Rlcy5maW5hbCgp'@;
put 'KX19LDU5NTcxOigkZSxTZSk9PntTZVsiZGVzLWVjYiJdPXtrZXk6OCxpdjowfSxTZVsiZGVzLWNiYyJdPVNlLmRlcz17a2V5OjgsaXY6OH0sU2VbImRlcy1lZGUzLWNiYyJdPVNlLmRlczM9e2tleToyNCxpdjo4fSxTZVsiZGVzLWVkZTMiXT17a2V5OjI0LGl2OjB9LFNlWyJkZXMtZWRlLWNi'@;
put 'YyJdPXtrZXk6MTYsaXY6OH0sU2VbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwxNDEwNTooJGUsU2UsUik9Pnt2YXIgZWU9Uig5MTcpLGI9UigzMzQyKTtmdW5jdGlvbiBYKEEpe3ZhciBQLEQ9QS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3tQPW5ldyBlZShiKEQpKX13aGlsZShQLmNtcChB'@;
put 'Lm1vZHVsdXMpPj0wfHwhUC51bW9kKEEucHJpbWUxKXx8IVAudW1vZChBLnByaW1lMikpO3JldHVybiBQfWZ1bmN0aW9uIHcoQSxEKXt2YXIgUD1mdW5jdGlvbiBtKEEpe3ZhciBEPVgoQSk7cmV0dXJue2JsaW5kZXI6RC50b1JlZChlZS5tb250KEEubW9kdWx1cykpLnJlZFBvdyhuZXcgZWUo'@;
put 'QS5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKSx1bmJsaW5kZXI6RC5pbnZtKEEubW9kdWx1cyl9fShEKSxVPUQubW9kdWx1cy5ieXRlTGVuZ3RoKCksST1uZXcgZWUoQSkubXVsKFAuYmxpbmRlcikudW1vZChELm1vZHVsdXMpLEU9SS50b1JlZChlZS5tb250KEQucHJpbWUxKSksaz1JLnRv'@;
put 'UmVkKGVlLm1vbnQoRC5wcmltZTIpKSxCPUQuY29lZmZpY2llbnQsTj1ELnByaW1lMSxWPUQucHJpbWUyLFo9RS5yZWRQb3coRC5leHBvbmVudDEpLmZyb21SZWQoKSxXPWsucmVkUG93KEQuZXhwb25lbnQyKS5mcm9tUmVkKCksej1aLmlzdWIoVykuaW11bChCKS51bW9kKE4pLmltdWwoVik7'@;
put 'cmV0dXJuIFcuaWFkZCh6KS5pbXVsKFAudW5ibGluZGVyKS51bW9kKEQubW9kdWx1cykudG9BcnJheUxpa2UoQnVmZmVyLCJiZSIsVSl9dy5nZXRyPVgsJGUuZXhwb3J0cz13fSw5OTU2MDooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7JGUuZXhwb3J0cz1SKDYyOTUxKX0sNzkxNDM6KCRlLFNl'@;
put 'LFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDI3MDU0KS5CdWZmZXIsYj1SKDY3MjExKSxtPVIoNTk0MiksWD1SKDcxOTkzKSx3PVIoNDMxNTApLEE9Uig3NDc1NCksRD1SKDYyOTUxKTtmdW5jdGlvbiBQKGspe20uV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgQj1EW2tdO2lmKCFCKXRocm93'@;
put 'IG5ldyBFcnJvcigiVW5rbm93biBtZXNzYWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2hUeXBlPUIuaGFzaCx0aGlzLl9oYXNoPWIoQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24gVShrKXttLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIEI9RFtrXTtp'@;
put 'ZighQil0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoPWIoQi5oYXNoKSx0aGlzLl90YWc9Qi5pZCx0aGlzLl9zaWduVHlwZT1CLnNpZ259ZnVuY3Rpb24gSShrKXtyZXR1cm4gbmV3IFAoayl9ZnVuY3Rpb24gRShrKXtyZXR1cm4gbmV3IFUoayl9'@;
put 'T2JqZWN0LmtleXMoRCkuZm9yRWFjaChmdW5jdGlvbihrKXtEW2tdLmlkPWVlLmZyb20oRFtrXS5pZCwiaGV4IiksRFtrLnRvTG93ZXJDYXNlKCldPURba119KSxYKFAsbS5Xcml0YWJsZSksUC5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEIsTixWKXt0aGlzLl9oYXNoLnVwZGF0ZShCKSxW'@;
put 'KCl9LFAucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCLE4pe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIEI/ZWUuZnJvbShCLE4pOkIpLHRoaXN9LFAucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oQixOKXt0aGlzLmVuZCgpO3ZhciBWPXRoaXMuX2hhc2guZGln'@;
put 'ZXN0KCksWj13KFYsQix0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBOP1oudG9TdHJpbmcoTik6Wn0sWChVLG0uV3JpdGFibGUpLFUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihCLE4sVil7dGhpcy5faGFzaC51cGRhdGUoQiksVigpfSxVLnByb3Rv'@;
put 'dHlwZS51cGRhdGU9ZnVuY3Rpb24oQixOKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBCP2VlLmZyb20oQixOKTpCKSx0aGlzfSxVLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQixOLFYpe3ZhciBaPSJzdHJpbmciPT10eXBlb2YgTj9lZS5mcm9tKE4sVik6'@;
put 'Tjt0aGlzLmVuZCgpO3ZhciBXPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIEEoWixXLEIsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sJGUuZXhwb3J0cz17U2lnbjpJLFZlcmlmeTpFLGNyZWF0ZVNpZ246SSxjcmVhdGVWZXJpZnk6RX19LDQzMTUwOigkZSxTZSxSKT0+eyJ1c2Ugc3Ry'@;
put 'aWN0Ijt2YXIgZWU9UigyNzA1NCkuQnVmZmVyLGI9Uig1NjQzMiksbT1SKDE0MTA1KSxYPVIoOTA1MTgpLmVjLHc9Uig5MTcpLEE9Uig2NTY2NyksRD1SKDY0NTg5KTtmdW5jdGlvbiBCKHoscSxRLHRlKXtpZigoej1lZS5mcm9tKHoudG9BcnJheSgpKSkubGVuZ3RoPHEuYnl0ZUxlbmd0aCgp'@;
put 'KXt2YXIgYWU9ZWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktei5sZW5ndGgpO3o9ZWUuY29uY2F0KFthZSx6XSl9dmFyIHNlPVEubGVuZ3RoLGRlPWZ1bmN0aW9uIFYoeixxKXt6PSh6PU4oeixxKSkubW9kKHEpO3ZhciBRPWVlLmZyb20oei50b0FycmF5KCkpO2lmKFEubGVuZ3RoPHEuYnl0ZUxl'@;
put 'bmd0aCgpKXt2YXIgdGU9ZWUuYWxsb2MocS5ieXRlTGVuZ3RoKCktUS5sZW5ndGgpO1E9ZWUuY29uY2F0KFt0ZSxRXSl9cmV0dXJuIFF9KFEscSksbGU9ZWUuYWxsb2Moc2UpO2xlLmZpbGwoMSk7dmFyIGNlPWVlLmFsbG9jKHNlKTtyZXR1cm4gY2U9Yih0ZSxjZSkudXBkYXRlKGxlKS51cGRh'@;
put 'dGUoZWUuZnJvbShbMF0pKS51cGRhdGUoeikudXBkYXRlKGRlKS5kaWdlc3QoKSxsZT1iKHRlLGNlKS51cGRhdGUobGUpLmRpZ2VzdCgpLHtrOmNlPWIodGUsY2UpLnVwZGF0ZShsZSkudXBkYXRlKGVlLmZyb20oWzFdKSkudXBkYXRlKHopLnVwZGF0ZShkZSkuZGlnZXN0KCksdjpsZT1iKHRl'@;
put 'LGNlKS51cGRhdGUobGUpLmRpZ2VzdCgpfX1mdW5jdGlvbiBOKHoscSl7dmFyIFE9bmV3IHcoeiksdGU9KHoubGVuZ3RoPDwzKS1xLmJpdExlbmd0aCgpO3JldHVybiB0ZT4wJiZRLmlzaHJuKHRlKSxRfWZ1bmN0aW9uIFooeixxLFEpe3ZhciB0ZSxhZTtkb3tmb3IodGU9ZWUuYWxsb2MoMCk7'@;
put 'OCp0ZS5sZW5ndGg8ei5iaXRMZW5ndGgoKTspcS52PWIoUSxxLmspLnVwZGF0ZShxLnYpLmRpZ2VzdCgpLHRlPWVlLmNvbmNhdChbdGUscS52XSk7YWU9Tih0ZSx6KSxxLms9YihRLHEuaykudXBkYXRlKHEudikudXBkYXRlKGVlLmZyb20oWzBdKSkuZGlnZXN0KCkscS52PWIoUSxxLmspLnVw'@;
put 'ZGF0ZShxLnYpLmRpZ2VzdCgpfXdoaWxlKC0xIT09YWUuY21wKHopKTtyZXR1cm4gYWV9ZnVuY3Rpb24gVyh6LHEsUSx0ZSl7cmV0dXJuIHoudG9SZWQody5tb250KFEpKS5yZWRQb3cocSkuZnJvbVJlZCgpLm1vZCh0ZSl9JGUuZXhwb3J0cz1mdW5jdGlvbiBVKHoscSxRLHRlLGFlKXt2YXIg'@;
put 'c2U9QShxKTtpZihzZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PXRlJiYiZWNkc2EvcnNhIiE9PXRlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBJKHoscSl7dmFyIFE9RFtxLmN1cnZlLmpvaW4oIi4iKV07aWYoIVEpdGhyb3cgbmV3IEVy'@;
put 'cm9yKCJ1bmtub3duIGN1cnZlICIrcS5jdXJ2ZS5qb2luKCIuIikpO3ZhciBzZT1uZXcgWChRKS5rZXlGcm9tUHJpdmF0ZShxLnByaXZhdGVLZXkpLnNpZ24oeik7cmV0dXJuIGVlLmZyb20oc2UudG9ERVIoKSl9KHosc2UpfWlmKCJkc2EiPT09c2UudHlwZSl7aWYoImRzYSIhPT10ZSl0aHJv'@;
put 'dyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRSh6LHEsUSl7Zm9yKHZhciBjZSx0ZT1xLnBhcmFtcy5wcml2X2tleSxhZT1xLnBhcmFtcy5wLHNlPXEucGFyYW1zLnEsZGU9cS5wYXJhbXMuZyxsZT1uZXcgdygwKSxHPU4oeixzZSkubW9kKHNl'@;
put 'KSx5PSExLEw9Qih0ZSxzZSx6LFEpOyExPT09eTspbGU9VyhkZSxjZT1aKHNlLEwsUSksYWUsc2UpLDA9PT0oeT1jZS5pbnZtKHNlKS5pbXVsKEcuYWRkKHRlLm11bChsZSkpKS5tb2Qoc2UpKS5jbXBuKDApJiYoeT0hMSxsZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIGsoeixxKXt6PXou'@;
put 'dG9BcnJheSgpLHE9cS50b0FycmF5KCksMTI4JnpbMF0mJih6PVswXS5jb25jYXQoeikpLDEyOCZxWzBdJiYocT1bMF0uY29uY2F0KHEpKTt2YXIgdGU9WzQ4LHoubGVuZ3RoK3EubGVuZ3RoKzQsMix6Lmxlbmd0aF07cmV0dXJuIHRlPXRlLmNvbmNhdCh6LFsyLHEubGVuZ3RoXSxxKSxlZS5m'@;
put 'cm9tKHRlKX0obGUseSl9KHosc2UsUSl9aWYoInJzYSIhPT10ZSYmImVjZHNhL3JzYSIhPT10ZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1xLnBhZGRpbmcmJjEhPT1xLnBhZGRpbmcpdGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIG9yIHVu'@;
put 'c3VwcG9ydGVkIHBhZGRpbmcgbW9kZSIpO3o9ZWUuY29uY2F0KFthZSx6XSk7Zm9yKHZhciBkZT1zZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxsZT1bMCwxXTt6Lmxlbmd0aCtsZS5sZW5ndGgrMTxkZTspbGUucHVzaCgyNTUpO2xlLnB1c2goMCk7Zm9yKHZhciBjZT0tMTsrK2NlPHoubGVuZ3Ro'@;
put 'OylsZS5wdXNoKHpbY2VdKTtyZXR1cm4gbShsZSxzZSl9LCRlLmV4cG9ydHMuZ2V0S2V5PUIsJGUuZXhwb3J0cy5tYWtlS2V5PVp9LDc0NzU0OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9UigyNzA1NCkuQnVmZmVyLGI9Uig5MTcpLG09Uig5MDUxOCkuZWMsWD1SKDY1NjY3KSx3'@;
put 'PVIoNjQ1ODkpO2Z1bmN0aW9uIFUoSSxFKXtpZihJLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKEkuY21wKEUpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX0kZS5leHBvcnRzPWZ1bmN0aW9uIEEoSSxFLGssQixOKXt2YXIgVj1YKGspO2lm'@;
put 'KCJlYyI9PT1WLnR5cGUpe2lmKCJlY2RzYSIhPT1CJiYiZWNkc2EvcnNhIiE9PUIpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRChJLEUsayl7dmFyIEI9d1trLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYoIUIpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIray5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgbShCKS52ZXJpZnkoRSxJLGsuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oSSxFLFYpfWlmKCJkc2EiPT09Vi50eXBlKXtpZigiZHNhIiE9PUIpdGhy'@;
put 'b3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gUChJLEUsayl7dmFyIEI9ay5kYXRhLnAsTj1rLmRhdGEucSxWPWsuZGF0YS5nLFo9ay5kYXRhLnB1Yl9rZXksVz1YLnNpZ25hdHVyZS5kZWNvZGUoSSwiZGVyIiksej1XLnMscT1XLnI7VSh6LE4p'@;
put 'LFUocSxOKTt2YXIgUT1iLm1vbnQoQiksdGU9ei5pbnZtKE4pO3JldHVybiAwPT09Vi50b1JlZChRKS5yZWRQb3cobmV3IGIoRSkubXVsKHRlKS5tb2QoTikpLmZyb21SZWQoKS5tdWwoWi50b1JlZChRKS5yZWRQb3cocS5tdWwodGUpLm1vZChOKSkuZnJvbVJlZCgpKS5tb2QoQikubW9kKE4p'@;
put 'LmNtcChxKX0oSSxFLFYpfWlmKCJyc2EiIT09QiYmImVjZHNhL3JzYSIhPT1CKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7RT1lZS5jb25jYXQoW04sRV0pO2Zvcih2YXIgWj1WLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLFc9WzFdLHo9MDtFLmxlbmd0aCtXLmxlbmd0'@;
put 'aCsyPFo7KVcucHVzaCgyNTUpLHorPTE7Vy5wdXNoKDApO2Zvcih2YXIgcT0tMTsrK3E8RS5sZW5ndGg7KVcucHVzaChFW3FdKTtXPWVlLmZyb20oVyk7dmFyIFE9Yi5tb250KFYubW9kdWx1cyk7ST0oST1uZXcgYihJKS50b1JlZChRKSkucmVkUG93KG5ldyBiKFYucHVibGljRXhwb25lbnQp'@;
put 'KSxJPWVlLmZyb20oSS5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgdGU9ejw4PzE6MDtmb3IoWj1NYXRoLm1pbihJLmxlbmd0aCxXLmxlbmd0aCksSS5sZW5ndGghPT1XLmxlbmd0aCYmKHRlPTEpLHE9LTE7KytxPFo7KXRlfD1JW3FdXldbcV07cmV0dXJuIDA9PT10ZX19LDEzNTQ2OiRlPT57'@;
put 'JGUuZXhwb3J0cz1mdW5jdGlvbihSLGVlKXtmb3IodmFyIGI9TWF0aC5taW4oUi5sZW5ndGgsZWUubGVuZ3RoKSxtPW5ldyBCdWZmZXIoYiksWD0wO1g8YjsrK1gpbVtYXT1SW1hdXmVlW1hdO3JldHVybiBtfX0sODM4Mzg6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDEzOTgx'@;
put 'KSxiPVIoMjIwMjApLG09ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3I/U3ltYm9sLmZvcigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKTpudWxsO1NlLkJ1ZmZlcj1ELFNlLlNsb3dCdWZmZXI9ZnVuY3Rpb24geihGZSl7cmV0dXJu'@;
put 'K0ZlIT1GZSYmKEZlPTApLEQuYWxsb2MoK0ZlKX0sU2UuSU5TUEVDVF9NQVhfQllURVM9NTA7dmFyIFg9MjE0NzQ4MzY0NztmdW5jdGlvbiBBKEZlKXtpZihGZT5YKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrRmUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicp'@;
put 'O3ZhciBDZT1uZXcgVWludDhBcnJheShGZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihDZSxELnByb3RvdHlwZSksQ2V9ZnVuY3Rpb24gRChGZSxDZSxEZSl7aWYoIm51bWJlciI9PXR5cGVvZiBGZSl7aWYoInN0cmluZyI9PXR5cGVvZiBDZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdU'@;
put 'aGUgInN0cmluZyIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gRShGZSl9cmV0dXJuIFAoRmUsQ2UsRGUpfWZ1bmN0aW9uIFAoRmUsQ2UsRGUpe2lmKCJzdHJpbmciPT10eXBlb2YgRmUpcmV0dXJuIGZ1bmN0aW9uIGsoRmUs'@;
put 'Q2Upe2lmKCgic3RyaW5nIiE9dHlwZW9mIENlfHwiIj09PUNlKSYmKENlPSJ1dGY4IiksIUQuaXNFbmNvZGluZyhDZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitDZSk7dmFyIERlPTB8cShGZSxDZSksUmU9QShEZSksZXQ9UmUud3JpdGUoRmUsQ2UpO3JldHVy'@;
put 'biBldCE9PURlJiYoUmU9UmUuc2xpY2UoMCxldCkpLFJlfShGZSxDZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEZlKSlyZXR1cm4gZnVuY3Rpb24gTihGZSl7aWYoVWUoRmUsVWludDhBcnJheSkpe3ZhciBDZT1uZXcgVWludDhBcnJheShGZSk7cmV0dXJuIFYoQ2UuYnVmZmVyLENlLmJ5dGVP'@;
put 'ZmZzZXQsQ2UuYnl0ZUxlbmd0aCl9cmV0dXJuIEIoRmUpfShGZSk7aWYobnVsbD09RmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmpl'@;
put 'Y3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgRmUpO2lmKFVlKEZlLEFycmF5QnVmZmVyKXx8RmUmJlVlKEZlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihVZShGZSxTaGFyZWRBcnJheUJ1ZmZlcil8fEZlJiZVZShGZS5idWZmZXIsU2hhcmVk'@;
put 'QXJyYXlCdWZmZXIpKSlyZXR1cm4gVihGZSxDZSxEZSk7aWYoIm51bWJlciI9PXR5cGVvZiBGZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgUmU9RmUudmFsdWVP'@;
put 'ZiYmRmUudmFsdWVPZigpO2lmKG51bGwhPVJlJiZSZSE9PUZlKXJldHVybiBELmZyb20oUmUsQ2UsRGUpO3ZhciBldD1mdW5jdGlvbiBaKEZlKXtpZihELmlzQnVmZmVyKEZlKSl7dmFyIENlPTB8VyhGZS5sZW5ndGgpLERlPUEoQ2UpO3JldHVybiAwPT09RGUubGVuZ3RofHxGZS5jb3B5KERl'@;
put 'LDAsMCxDZSksRGV9cmV0dXJuIHZvaWQgMCE9PUZlLmxlbmd0aD8ibnVtYmVyIiE9dHlwZW9mIEZlLmxlbmd0aHx8WGUoRmUubGVuZ3RoKT9BKDApOkIoRmUpOiJCdWZmZXIiPT09RmUudHlwZSYmQXJyYXkuaXNBcnJheShGZS5kYXRhKT9CKEZlLmRhdGEpOnZvaWQgMH0oRmUpO2lmKGV0KXJl'@;
put 'dHVybiBldDtpZih0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3ltYm9sLnRvUHJpbWl0aXZlJiYiZnVuY3Rpb24iPT10eXBlb2YgRmVbU3ltYm9sLnRvUHJpbWl0aXZlXSlyZXR1cm4gRC5mcm9tKEZlW1N5bWJvbC50b1ByaW1pdGl2ZV0oInN0cmluZyIpLENlLERlKTt0aHJvdyBuZXcgVHlw'@;
put 'ZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBGZSl9ZnVuY3Rpb24gVShGZSl7aWYoIm51bWJlciIhPXR5cGVv'@;
put 'ZiBGZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlcicpO2lmKEZlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytGZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyl9ZnVuY3Rpb24gRShGZSl7cmV0'@;
put 'dXJuIFUoRmUpLEEoRmU8MD8wOjB8VyhGZSkpfWZ1bmN0aW9uIEIoRmUpe2Zvcih2YXIgQ2U9RmUubGVuZ3RoPDA/MDowfFcoRmUubGVuZ3RoKSxEZT1BKENlKSxSZT0wO1JlPENlO1JlKz0xKURlW1JlXT0yNTUmRmVbUmVdO3JldHVybiBEZX1mdW5jdGlvbiBWKEZlLENlLERlKXtpZihDZTww'@;
put 'fHxGZS5ieXRlTGVuZ3RoPENlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihGZS5ieXRlTGVuZ3RoPENlKyhEZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5k'@;
put 'cycpO3ZhciBSZTtyZXR1cm4gUmU9dm9pZCAwPT09Q2UmJnZvaWQgMD09PURlP25ldyBVaW50OEFycmF5KEZlKTp2b2lkIDA9PT1EZT9uZXcgVWludDhBcnJheShGZSxDZSk6bmV3IFVpbnQ4QXJyYXkoRmUsQ2UsRGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihSZSxELnByb3RvdHlwZSksUmV9'@;
put 'ZnVuY3Rpb24gVyhGZSl7aWYoRmU+PVgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHgiK1gudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxGZX1mdW5jdGlvbiBxKEZlLENlKXtpZihELmlz'@;
put 'QnVmZmVyKEZlKSlyZXR1cm4gRmUubGVuZ3RoO2lmKEFycmF5QnVmZmVyLmlzVmlldyhGZSl8fFVlKEZlLEFycmF5QnVmZmVyKSlyZXR1cm4gRmUuYnl0ZUxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIEZlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0'@;
put 'IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBGZSk7dmFyIERlPUZlLmxlbmd0aCxSZT1hcmd1bWVudHMubGVuZ3RoPjImJiEwPT09YXJndW1lbnRzWzJdO2lmKCFSZSYmMD09PURlKXJldHVybiAwO2Zvcih2YXIg'@;
put 'ZXQ9ITE7Oylzd2l0Y2goQ2Upe2Nhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIERlO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEhlKEZlKS5sZW5ndGg7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJl'@;
put 'dHVybiAyKkRlO2Nhc2UiaGV4IjpyZXR1cm4gRGU+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gTmUoRmUpLmxlbmd0aDtkZWZhdWx0OmlmKGV0KXJldHVybiBSZT8tMTpIZShGZSkubGVuZ3RoO0NlPSgiIitDZSkudG9Mb3dlckNhc2UoKSxldD0hMH19ZnVuY3Rpb24gUShGZSxDZSxEZSl7dmFy'@;
put 'IFJlPSExO2lmKCh2b2lkIDA9PT1DZXx8Q2U8MCkmJihDZT0wKSxDZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1EZXx8RGU+dGhpcy5sZW5ndGgpJiYoRGU9dGhpcy5sZW5ndGgpLERlPD0wKXx8KERlPj4+PTApPD0oQ2U+Pj49MCkpcmV0dXJuIiI7Zm9yKEZlfHwoRmU9InV0ZjgiKTs7KXN3'@;
put 'aXRjaChGZSl7Y2FzZSJoZXgiOnJldHVybiBfKHRoaXMsQ2UsRGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEgodGhpcyxDZSxEZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIFModGhpcyxDZSxEZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4geCh0aGlzLENlLERlKTtj'@;
put 'YXNlImJhc2U2NCI6cmV0dXJuIEwodGhpcyxDZSxEZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBwKHRoaXMsQ2UsRGUpO2RlZmF1bHQ6aWYoUmUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitGZSk7'@;
put 'RmU9KEZlKyIiKS50b0xvd2VyQ2FzZSgpLFJlPSEwfX1mdW5jdGlvbiB0ZShGZSxDZSxEZSl7dmFyIFJlPUZlW0NlXTtGZVtDZV09RmVbRGVdLEZlW0RlXT1SZX1mdW5jdGlvbiBhZShGZSxDZSxEZSxSZSxldCl7aWYoMD09PUZlLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9m'@;
put 'IERlPyhSZT1EZSxEZT0wKTpEZT4yMTQ3NDgzNjQ3P0RlPTIxNDc0ODM2NDc6RGU8LTIxNDc0ODM2NDgmJihEZT0tMjE0NzQ4MzY0OCksWGUoRGU9K0RlKSYmKERlPWV0PzA6RmUubGVuZ3RoLTEpLERlPDAmJihEZT1GZS5sZW5ndGgrRGUpLERlPj1GZS5sZW5ndGgpe2lmKGV0KXJldHVybi0x'@;
put 'O0RlPUZlLmxlbmd0aC0xfWVsc2UgaWYoRGU8MCl7aWYoIWV0KXJldHVybi0xO0RlPTB9aWYoInN0cmluZyI9PXR5cGVvZiBDZSYmKENlPUQuZnJvbShDZSxSZSkpLEQuaXNCdWZmZXIoQ2UpKXJldHVybiAwPT09Q2UubGVuZ3RoPy0xOnNlKEZlLENlLERlLFJlLGV0KTtpZigibnVtYmVyIj09'@;
put 'dHlwZW9mIENlKXJldHVybiBDZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2V0P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChGZSxDZSxEZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChGZSxDZSxE'@;
put 'ZSk6c2UoRmUsW0NlXSxEZSxSZSxldCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gc2UoRmUsQ2UsRGUsUmUsZXQpe3ZhciBBZSxudD0xLEdlPUZlLmxlbmd0aCxkdD1DZS5sZW5ndGg7aWYodm9pZCAwIT09UmUm'@;
put 'JigidWNzMiI9PT0oUmU9U3RyaW5nKFJlKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PVJlfHwidXRmMTZsZSI9PT1SZXx8InV0Zi0xNmxlIj09PVJlKSl7aWYoRmUubGVuZ3RoPDJ8fENlLmxlbmd0aDwyKXJldHVybi0xO250PTIsR2UvPTIsZHQvPTIsRGUvPTJ9ZnVuY3Rpb24gVGUoQ3Qs'@;
put 'RnQpe3JldHVybiAxPT09bnQ/Q3RbRnRdOkN0LnJlYWRVSW50MTZCRShGdCpudCl9aWYoZXQpe3ZhciBCZT0tMTtmb3IoQWU9RGU7QWU8R2U7QWUrKylpZihUZShGZSxBZSk9PT1UZShDZSwtMT09PUJlPzA6QWUtQmUpKXtpZigtMT09PUJlJiYoQmU9QWUpLEFlLUJlKzE9PT1kdClyZXR1cm4g'@;
put 'QmUqbnR9ZWxzZS0xIT09QmUmJihBZS09QWUtQmUpLEJlPS0xfWVsc2UgZm9yKERlK2R0PkdlJiYoRGU9R2UtZHQpLEFlPURlO0FlPj0wO0FlLS0pe2Zvcih2YXIgb3Q9ITAsbHQ9MDtsdDxkdDtsdCsrKWlmKFRlKEZlLEFlK2x0KSE9PVRlKENlLGx0KSl7b3Q9ITE7YnJlYWt9aWYob3QpcmV0'@;
put 'dXJuIEFlfXJldHVybi0xfWZ1bmN0aW9uIGRlKEZlLENlLERlLFJlKXtEZT1OdW1iZXIoRGUpfHwwO3ZhciBldD1GZS5sZW5ndGgtRGU7UmU/KFJlPU51bWJlcihSZSkpPmV0JiYoUmU9ZXQpOlJlPWV0O3ZhciBudD1DZS5sZW5ndGg7UmU+bnQvMiYmKFJlPW50LzIpO2Zvcih2YXIgR2U9MDtH'@;
put 'ZTxSZTsrK0dlKXt2YXIgZHQ9cGFyc2VJbnQoQ2Uuc3Vic3RyKDIqR2UsMiksMTYpO2lmKFhlKGR0KSlyZXR1cm4gR2U7RmVbRGUrR2VdPWR0fXJldHVybiBHZX1mdW5jdGlvbiBsZShGZSxDZSxEZSxSZSl7cmV0dXJuIEtlKEhlKENlLEZlLmxlbmd0aC1EZSksRmUsRGUsUmUpfWZ1bmN0aW9u'@;
put 'IGNlKEZlLENlLERlLFJlKXtyZXR1cm4gS2UoZnVuY3Rpb24gRWUoRmUpe2Zvcih2YXIgQ2U9W10sRGU9MDtEZTxGZS5sZW5ndGg7KytEZSlDZS5wdXNoKDI1NSZGZS5jaGFyQ29kZUF0KERlKSk7cmV0dXJuIENlfShDZSksRmUsRGUsUmUpfWZ1bmN0aW9uIEcoRmUsQ2UsRGUsUmUpe3JldHVy'@;
put 'biBLZShOZShDZSksRmUsRGUsUmUpfWZ1bmN0aW9uIHkoRmUsQ2UsRGUsUmUpe3JldHVybiBLZShmdW5jdGlvbiBMZShGZSxDZSl7Zm9yKHZhciBEZSxSZSxudD1bXSxHZT0wO0dlPEZlLmxlbmd0aCYmISgoQ2UtPTIpPDApOysrR2UpUmU9KERlPUZlLmNoYXJDb2RlQXQoR2UpKT4+OCxudC5w'@;
put 'dXNoKERlJTI1NiksbnQucHVzaChSZSk7cmV0dXJuIG50fShDZSxGZS5sZW5ndGgtRGUpLEZlLERlLFJlKX1mdW5jdGlvbiBMKEZlLENlLERlKXtyZXR1cm4gZWUuZnJvbUJ5dGVBcnJheSgwPT09Q2UmJkRlPT09RmUubGVuZ3RoP0ZlOkZlLnNsaWNlKENlLERlKSl9ZnVuY3Rpb24gSChGZSxD'@;
put 'ZSxEZSl7RGU9TWF0aC5taW4oRmUubGVuZ3RoLERlKTtmb3IodmFyIFJlPVtdLGV0PUNlO2V0PERlOyl7dmFyIFRlLEFlLEJlLG90LG50PUZlW2V0XSxHZT1udWxsLGR0PW50PjIzOT80Om50PjIyMz8zOm50PjE5MT8yOjE7aWYoZXQrZHQ8PURlKXN3aXRjaChkdCl7Y2FzZSAxOm50PDEyOCYm'@;
put 'KEdlPW50KTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihUZT1GZVtldCsxXSkpJiYob3Q9KDMxJm50KTw8Nnw2MyZUZSk+MTI3JiYoR2U9b3QpO2JyZWFrO2Nhc2UgMzpBZT1GZVtldCsyXSwxMjg9PSgxOTImKFRlPUZlW2V0KzFdKSkmJjEyOD09KDE5MiZBZSkmJihvdD0oMTUmbnQpPDwxMnwo'@;
put 'NjMmVGUpPDw2fDYzJkFlKT4yMDQ3JiYob3Q8NTUyOTZ8fG90PjU3MzQzKSYmKEdlPW90KTticmVhaztjYXNlIDQ6QWU9RmVbZXQrMl0sQmU9RmVbZXQrM10sMTI4PT0oMTkyJihUZT1GZVtldCsxXSkpJiYxMjg9PSgxOTImQWUpJiYxMjg9PSgxOTImQmUpJiYob3Q9KDE1Jm50KTw8MTh8KDYz'@;
put 'JlRlKTw8MTJ8KDYzJkFlKTw8Nnw2MyZCZSk+NjU1MzUmJm90PDExMTQxMTImJihHZT1vdCl9bnVsbD09PUdlPyhHZT02NTUzMyxkdD0xKTpHZT42NTUzNSYmKFJlLnB1c2goKEdlLT02NTUzNik+Pj4xMCYxMDIzfDU1Mjk2KSxHZT01NjMyMHwxMDIzJkdlKSxSZS5wdXNoKEdlKSxldCs9ZHR9'@;
put 'cmV0dXJuIGZ1bmN0aW9uIGcoRmUpe3ZhciBDZT1GZS5sZW5ndGg7aWYoQ2U8PWopcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLEZlKTtmb3IodmFyIERlPSIiLFJlPTA7UmU8Q2U7KURlKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxGZS5zbGljZShS'@;
put 'ZSxSZSs9aikpO3JldHVybiBEZX0oUmUpfVNlLmtNYXhMZW5ndGg9WCwhKEQuVFlQRURfQVJSQVlfU1VQUE9SVD1mdW5jdGlvbiB3KCl7dHJ5e3ZhciBGZT1uZXcgVWludDhBcnJheSgxKSxDZT17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVP'@;
put 'ZihDZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKEZlLENlKSw0Mj09PUZlLmZvbygpfWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBjb25zb2xlPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIGNvbnNvbGUuZXJyb3ImJmNvbnNvbGUuZXJyb3IoIlRoaXMg'@;
put 'YnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShELnBy'@;
put 'b3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihELmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRC5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYo'@;
put 'RC5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLEQucG9vbFNpemU9ODE5MixELmZyb209ZnVuY3Rpb24oRmUsQ2UsRGUpe3JldHVybiBQKEZlLENlLERlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKEQucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmpl'@;
put 'Y3Quc2V0UHJvdG90eXBlT2YoRCxVaW50OEFycmF5KSxELmFsbG9jPWZ1bmN0aW9uKEZlLENlLERlKXtyZXR1cm4gZnVuY3Rpb24gSShGZSxDZSxEZSl7cmV0dXJuIFUoRmUpLEZlPD0wP0EoRmUpOnZvaWQgMCE9PUNlPyJzdHJpbmciPT10eXBlb2YgRGU/QShGZSkuZmlsbChDZSxEZSk6QShG'@;
put 'ZSkuZmlsbChDZSk6QShGZSl9KEZlLENlLERlKX0sRC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihGZSl7cmV0dXJuIEUoRmUpfSxELmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihGZSl7cmV0dXJuIEUoRmUpfSxELmlzQnVmZmVyPWZ1bmN0aW9uKENlKXtyZXR1cm4gbnVsbCE9Q2UmJiEwPT09Q2Uu'@;
put 'X2lzQnVmZmVyJiZDZSE9PUQucHJvdG90eXBlfSxELmNvbXBhcmU9ZnVuY3Rpb24oQ2UsRGUpe2lmKFVlKENlLFVpbnQ4QXJyYXkpJiYoQ2U9RC5mcm9tKENlLENlLm9mZnNldCxDZS5ieXRlTGVuZ3RoKSksVWUoRGUsVWludDhBcnJheSkmJihEZT1ELmZyb20oRGUsRGUub2Zmc2V0LERlLmJ5'@;
put 'dGVMZW5ndGgpKSwhRC5pc0J1ZmZlcihDZSl8fCFELmlzQnVmZmVyKERlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZihDZT09PURlKXJldHVybiAwO2Zvcih2YXIg'@;
put 'UmU9Q2UubGVuZ3RoLGV0PURlLmxlbmd0aCxudD0wLEdlPU1hdGgubWluKFJlLGV0KTtudDxHZTsrK250KWlmKENlW250XSE9PURlW250XSl7UmU9Q2VbbnRdLGV0PURlW250XTticmVha31yZXR1cm4gUmU8ZXQ/LTE6ZXQ8UmU/MTowfSxELmlzRW5jb2Rpbmc9ZnVuY3Rpb24oQ2Upe3N3aXRj'@;
put 'aChTdHJpbmcoQ2UpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpy'@;
put 'ZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sRC5jb25jYXQ9ZnVuY3Rpb24oQ2UsRGUpe2lmKCFBcnJheS5pc0FycmF5KENlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PUNlLmxlbmd0aClyZXR1cm4g'@;
put 'RC5hbGxvYygwKTt2YXIgUmU7aWYodm9pZCAwPT09RGUpZm9yKERlPTAsUmU9MDtSZTxDZS5sZW5ndGg7KytSZSlEZSs9Q2VbUmVdLmxlbmd0aDt2YXIgZXQ9RC5hbGxvY1Vuc2FmZShEZSksbnQ9MDtmb3IoUmU9MDtSZTxDZS5sZW5ndGg7KytSZSl7dmFyIEdlPUNlW1JlXTtpZihVZShHZSxV'@;
put 'aW50OEFycmF5KSludCtHZS5sZW5ndGg+ZXQubGVuZ3RoP0QuZnJvbShHZSkuY29weShldCxudCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoZXQsR2UsbnQpO2Vsc2V7aWYoIUQuaXNCdWZmZXIoR2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJl'@;
put 'IGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtHZS5jb3B5KGV0LG50KX1udCs9R2UubGVuZ3RofXJldHVybiBldH0sRC5ieXRlTGVuZ3RoPXEsRC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLEQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciBDZT10aGlzLmxlbmd0aDtpZihDZSUyIT0wKXRo'@;
put 'cm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgRGU9MDtEZTxDZTtEZSs9Mil0ZSh0aGlzLERlLERlKzEpO3JldHVybiB0aGlzfSxELnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgQ2U9dGhpcy5sZW5n'@;
put 'dGg7aWYoQ2UlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIERlPTA7RGU8Q2U7RGUrPTQpdGUodGhpcyxEZSxEZSszKSx0ZSh0aGlzLERlKzEsRGUrMik7cmV0dXJuIHRoaXN9LEQucHJvdG90eXBl'@;
put 'LnN3YXA2ND1mdW5jdGlvbigpe3ZhciBDZT10aGlzLmxlbmd0aDtpZihDZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgRGU9MDtEZTxDZTtEZSs9OCl0ZSh0aGlzLERlLERlKzcpLHRlKHRoaXMs'@;
put 'RGUrMSxEZSs2KSx0ZSh0aGlzLERlKzIsRGUrNSksdGUodGhpcyxEZSszLERlKzQpO3JldHVybiB0aGlzfSxELnByb3RvdHlwZS50b0xvY2FsZVN0cmluZz1ELnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciBDZT10aGlzLmxlbmd0aDtyZXR1cm4gMD09PUNlPyIiOjA9PT1hcmd1'@;
put 'bWVudHMubGVuZ3RoP0godGhpcywwLENlKTpRLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKENlKXtpZighRC5pc0J1ZmZlcihDZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlzPT09'@;
put 'Q2V8fDA9PT1ELmNvbXBhcmUodGhpcyxDZSl9LEQucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgQ2U9IiIsRGU9U2UuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIENlPXRoaXMudG9TdHJpbmcoImhleCIsMCxEZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlz'@;
put 'Lmxlbmd0aD5EZSYmKENlKz0iIC4uLiAiKSwiPEJ1ZmZlciAiK0NlKyI+In0sbSYmKEQucHJvdG90eXBlW21dPUQucHJvdG90eXBlLmluc3BlY3QpLEQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oQ2UsRGUsUmUsZXQsbnQpe2lmKFVlKENlLFVpbnQ4QXJyYXkpJiYoQ2U9RC5mcm9tKENl'@;
put 'LENlLm9mZnNldCxDZS5ieXRlTGVuZ3RoKSksIUQuaXNCdWZmZXIoQ2UpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIENlKTtpZih2b2lkIDA9'@;
put 'PT1EZSYmKERlPTApLHZvaWQgMD09PVJlJiYoUmU9Q2U/Q2UubGVuZ3RoOjApLHZvaWQgMD09PWV0JiYoZXQ9MCksdm9pZCAwPT09bnQmJihudD10aGlzLmxlbmd0aCksRGU8MHx8UmU+Q2UubGVuZ3RofHxldDwwfHxudD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9m'@;
put 'IHJhbmdlIGluZGV4Iik7aWYoZXQ+PW50JiZEZT49UmUpcmV0dXJuIDA7aWYoZXQ+PW50KXJldHVybi0xO2lmKERlPj1SZSlyZXR1cm4gMTtpZih0aGlzPT09Q2UpcmV0dXJuIDA7Zm9yKHZhciBHZT0obnQ+Pj49MCktKGV0Pj4+PTApLGR0PShSZT4+Pj0wKS0oRGU+Pj49MCksVGU9TWF0aC5t'@;
put 'aW4oR2UsZHQpLEFlPXRoaXMuc2xpY2UoZXQsbnQpLEJlPUNlLnNsaWNlKERlLFJlKSxvdD0wO290PFRlOysrb3QpaWYoQWVbb3RdIT09QmVbb3RdKXtHZT1BZVtvdF0sZHQ9QmVbb3RdO2JyZWFrfXJldHVybiBHZTxkdD8tMTpkdDxHZT8xOjB9LEQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0'@;
put 'aW9uKENlLERlLFJlKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihDZSxEZSxSZSl9LEQucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oQ2UsRGUsUmUpe3JldHVybiBhZSh0aGlzLENlLERlLFJlLCEwKX0sRC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oQ2UsRGUsUmUpe3JldHVy'@;
put 'biBhZSh0aGlzLENlLERlLFJlLCExKX0sRC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oQ2UsRGUsUmUsZXQpe2lmKHZvaWQgMD09PURlKWV0PSJ1dGY4IixSZT10aGlzLmxlbmd0aCxEZT0wO2Vsc2UgaWYodm9pZCAwPT09UmUmJiJzdHJpbmciPT10eXBlb2YgRGUpZXQ9RGUsUmU9dGhpcy5s'@;
put 'ZW5ndGgsRGU9MDtlbHNle2lmKCFpc0Zpbml0ZShEZSkpdGhyb3cgbmV3IEVycm9yKCJCdWZmZXIud3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0WywgbGVuZ3RoXSkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCIpO0RlPj4+PTAsaXNGaW5pdGUoUmUpPyhSZT4+Pj0wLHZvaWQgMD09PWV0'@;
put 'JiYoZXQ9InV0ZjgiKSk6KGV0PVJlLFJlPXZvaWQgMCl9dmFyIG50PXRoaXMubGVuZ3RoLURlO2lmKCh2b2lkIDA9PT1SZXx8UmU+bnQpJiYoUmU9bnQpLENlLmxlbmd0aD4wJiYoUmU8MHx8RGU8MCl8fERlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdy'@;
put 'aXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO2V0fHwoZXQ9InV0ZjgiKTtmb3IodmFyIEdlPSExOzspc3dpdGNoKGV0KXtjYXNlImhleCI6cmV0dXJuIGRlKHRoaXMsQ2UsRGUsUmUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIGxlKHRoaXMsQ2UsRGUsUmUpO2Nhc2UiYXNjaWki'@;
put 'OmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIGNlKHRoaXMsQ2UsRGUsUmUpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gRyh0aGlzLENlLERlLFJlKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIHkodGhpcyxDZSxEZSxSZSk7'@;
put 'ZGVmYXVsdDppZihHZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2V0KTtldD0oIiIrZXQpLnRvTG93ZXJDYXNlKCksR2U9ITB9fSxELnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5z'@;
put 'bGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O3ZhciBqPTQwOTY7ZnVuY3Rpb24gUyhGZSxDZSxEZSl7dmFyIFJlPSIiO0RlPU1hdGgubWluKEZlLmxlbmd0aCxEZSk7Zm9yKHZhciBldD1DZTtldDxEZTsrK2V0KVJlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZGZVtldF0pO3JldHVy'@;
put 'biBSZX1mdW5jdGlvbiB4KEZlLENlLERlKXt2YXIgUmU9IiI7RGU9TWF0aC5taW4oRmUubGVuZ3RoLERlKTtmb3IodmFyIGV0PUNlO2V0PERlOysrZXQpUmUrPVN0cmluZy5mcm9tQ2hhckNvZGUoRmVbZXRdKTtyZXR1cm4gUmV9ZnVuY3Rpb24gXyhGZSxDZSxEZSl7dmFyIFJlPUZlLmxlbmd0'@;
put 'aDsoIUNlfHxDZTwwKSYmKENlPTApLCghRGV8fERlPDB8fERlPlJlKSYmKERlPVJlKTtmb3IodmFyIGV0PSIiLG50PUNlO250PERlOysrbnQpZXQrPWF0W0ZlW250XV07cmV0dXJuIGV0fWZ1bmN0aW9uIHAoRmUsQ2UsRGUpe2Zvcih2YXIgUmU9RmUuc2xpY2UoQ2UsRGUpLGV0PSIiLG50PTA7'@;
put 'bnQ8UmUubGVuZ3RoLTE7bnQrPTIpZXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoUmVbbnRdKzI1NipSZVtudCsxXSk7cmV0dXJuIGV0fWZ1bmN0aW9uIEMoRmUsQ2UsRGUpe2lmKEZlJTEhPTB8fEZlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKEZlK0Nl'@;
put 'PkRlKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSyhGZSxDZSxEZSxSZSxldCxudCl7aWYoIUQuaXNCdWZmZXIoRmUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUgYSBC'@;
put 'dWZmZXIgaW5zdGFuY2UnKTtpZihDZT5ldHx8Q2U8bnQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKERlK1JlPkZlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gbmUo'@;
put 'RmUsQ2UsRGUsUmUsZXQsbnQpe2lmKERlK1JlPkZlLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gdWUoRmUsQ2UsRGUsUmUsZXQpe3JldHVy'@;
put 'biBDZT0rQ2UsRGU+Pj49MCxldHx8bmUoRmUsMCxEZSw0KSxiLndyaXRlKEZlLENlLERlLFJlLDIzLDQpLERlKzR9ZnVuY3Rpb24gaGUoRmUsQ2UsRGUsUmUsZXQpe3JldHVybiBDZT0rQ2UsRGU+Pj49MCxldHx8bmUoRmUsMCxEZSw4KSxiLndyaXRlKEZlLENlLERlLFJlLDUyLDgpLERlKzh9'@;
put 'RC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oQ2UsRGUpe3ZhciBSZT10aGlzLmxlbmd0aDsoQ2U9fn5DZSk8MD8oQ2UrPVJlKTwwJiYoQ2U9MCk6Q2U+UmUmJihDZT1SZSksKERlPXZvaWQgMD09PURlP1JlOn5+RGUpPDA/KERlKz1SZSk8MCYmKERlPTApOkRlPlJlJiYoRGU9UmUpLERlPENl'@;
put 'JiYoRGU9Q2UpO3ZhciBldD10aGlzLnN1YmFycmF5KENlLERlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKGV0LEQucHJvdG90eXBlKSxldH0sRC5wcm90b3R5cGUucmVhZFVpbnRMRT1ELnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKENlLERlLFJlKXtDZT4+Pj0wLERlPj4+'@;
put 'PTAsUmV8fEMoQ2UsRGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZXQ9dGhpc1tDZV0sbnQ9MSxHZT0wOysrR2U8RGUmJihudCo9MjU2KTspZXQrPXRoaXNbQ2UrR2VdKm50O3JldHVybiBldH0sRC5wcm90b3R5cGUucmVhZFVpbnRCRT1ELnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uKENl'@;
put 'LERlLFJlKXtDZT4+Pj0wLERlPj4+PTAsUmV8fEMoQ2UsRGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgZXQ9dGhpc1tDZSstLURlXSxudD0xO0RlPjAmJihudCo9MjU2KTspZXQrPXRoaXNbQ2UrLS1EZV0qbnQ7cmV0dXJuIGV0fSxELnByb3RvdHlwZS5yZWFkVWludDg9RC5wcm90b3R5cGUucmVh'@;
put 'ZFVJbnQ4PWZ1bmN0aW9uKENlLERlKXtyZXR1cm4gQ2U+Pj49MCxEZXx8QyhDZSwxLHRoaXMubGVuZ3RoKSx0aGlzW0NlXX0sRC5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihDZSxEZSl7cmV0dXJuIENlPj4+PTAsRGV8fEMoQ2UsMix0'@;
put 'aGlzLmxlbmd0aCksdGhpc1tDZV18dGhpc1tDZSsxXTw8OH0sRC5wcm90b3R5cGUucmVhZFVpbnQxNkJFPUQucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihDZSxEZSl7cmV0dXJuIENlPj4+PTAsRGV8fEMoQ2UsMix0aGlzLmxlbmd0aCksdGhpc1tDZV08PDh8dGhpc1tDZSsxXX0s'@;
put 'RC5wcm90b3R5cGUucmVhZFVpbnQzMkxFPUQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihDZSxEZSl7cmV0dXJuIENlPj4+PTAsRGV8fEMoQ2UsNCx0aGlzLmxlbmd0aCksKHRoaXNbQ2VdfHRoaXNbQ2UrMV08PDh8dGhpc1tDZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbQ2UrM119'@;
put 'LEQucHJvdG90eXBlLnJlYWRVaW50MzJCRT1ELnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oQ2UsRGUpe3JldHVybiBDZT4+Pj0wLERlfHxDKENlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbQ2VdKyh0aGlzW0NlKzFdPDwxNnx0aGlzW0NlKzJdPDw4fHRoaXNbQ2UrM10p'@;
put 'fSxELnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oQ2UsRGUsUmUpe0NlPj4+PTAsRGU+Pj49MCxSZXx8QyhDZSxEZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBldD10aGlzW0NlXSxudD0xLEdlPTA7KytHZTxEZSYmKG50Kj0yNTYpOylldCs9dGhpc1tDZStHZV0qbnQ7cmV0dXJuIGV0Pj0o'@;
put 'bnQqPTEyOCkmJihldC09TWF0aC5wb3coMiw4KkRlKSksZXR9LEQucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihDZSxEZSxSZSl7Q2U+Pj49MCxEZT4+Pj0wLFJlfHxDKENlLERlLHRoaXMubGVuZ3RoKTtmb3IodmFyIGV0PURlLG50PTEsR2U9dGhpc1tDZSstLWV0XTtldD4wJiYobnQq'@;
put 'PTI1Nik7KUdlKz10aGlzW0NlKy0tZXRdKm50O3JldHVybiBHZT49KG50Kj0xMjgpJiYoR2UtPU1hdGgucG93KDIsOCpEZSkpLEdlfSxELnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihDZSxEZSl7cmV0dXJuIENlPj4+PTAsRGV8fEMoQ2UsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbQ2Vd'@;
put 'Py0xKigyNTUtdGhpc1tDZV0rMSk6dGhpc1tDZV19LEQucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKENlLERlKXtDZT4+Pj0wLERlfHxDKENlLDIsdGhpcy5sZW5ndGgpO3ZhciBSZT10aGlzW0NlXXx0aGlzW0NlKzFdPDw4O3JldHVybiAzMjc2OCZSZT80Mjk0OTAxNzYwfFJlOlJl'@;
put 'fSxELnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihDZSxEZSl7Q2U+Pj49MCxEZXx8QyhDZSwyLHRoaXMubGVuZ3RoKTt2YXIgUmU9dGhpc1tDZSsxXXx0aGlzW0NlXTw8ODtyZXR1cm4gMzI3NjgmUmU/NDI5NDkwMTc2MHxSZTpSZX0sRC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVu'@;
put 'Y3Rpb24oQ2UsRGUpe3JldHVybiBDZT4+Pj0wLERlfHxDKENlLDQsdGhpcy5sZW5ndGgpLHRoaXNbQ2VdfHRoaXNbQ2UrMV08PDh8dGhpc1tDZSsyXTw8MTZ8dGhpc1tDZSszXTw8MjR9LEQucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKENlLERlKXtyZXR1cm4gQ2U+Pj49MCxEZXx8'@;
put 'QyhDZSw0LHRoaXMubGVuZ3RoKSx0aGlzW0NlXTw8MjR8dGhpc1tDZSsxXTw8MTZ8dGhpc1tDZSsyXTw8OHx0aGlzW0NlKzNdfSxELnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihDZSxEZSl7cmV0dXJuIENlPj4+PTAsRGV8fEMoQ2UsNCx0aGlzLmxlbmd0aCksYi5yZWFkKHRoaXMs'@;
put 'Q2UsITAsMjMsNCl9LEQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKENlLERlKXtyZXR1cm4gQ2U+Pj49MCxEZXx8QyhDZSw0LHRoaXMubGVuZ3RoKSxiLnJlYWQodGhpcyxDZSwhMSwyMyw0KX0sRC5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKENlLERlKXtyZXR1cm4g'@;
put 'Q2U+Pj49MCxEZXx8QyhDZSw4LHRoaXMubGVuZ3RoKSxiLnJlYWQodGhpcyxDZSwhMCw1Miw4KX0sRC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKENlLERlKXtyZXR1cm4gQ2U+Pj49MCxEZXx8QyhDZSw4LHRoaXMubGVuZ3RoKSxiLnJlYWQodGhpcyxDZSwhMSw1Miw4KX0sRC5w'@;
put 'cm90b3R5cGUud3JpdGVVaW50TEU9RC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oQ2UsRGUsUmUsZXQpe0NlPStDZSxEZT4+Pj0wLFJlPj4+PTAsZXR8fEsodGhpcyxDZSxEZSxSZSxNYXRoLnBvdygyLDgqUmUpLTEsMCk7dmFyIEdlPTEsZHQ9MDtmb3IodGhpc1tEZV09MjU1JkNl'@;
put 'OysrZHQ8UmUmJihHZSo9MjU2KTspdGhpc1tEZStkdF09Q2UvR2UmMjU1O3JldHVybiBEZStSZX0sRC5wcm90b3R5cGUud3JpdGVVaW50QkU9RC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24oQ2UsRGUsUmUsZXQpe0NlPStDZSxEZT4+Pj0wLFJlPj4+PTAsZXR8fEsodGhpcyxDZSxE'@;
put 'ZSxSZSxNYXRoLnBvdygyLDgqUmUpLTEsMCk7dmFyIEdlPVJlLTEsZHQ9MTtmb3IodGhpc1tEZStHZV09MjU1JkNlOy0tR2U+PTAmJihkdCo9MjU2KTspdGhpc1tEZStHZV09Q2UvZHQmMjU1O3JldHVybiBEZStSZX0sRC5wcm90b3R5cGUud3JpdGVVaW50OD1ELnByb3RvdHlwZS53cml0ZVVJ'@;
put 'bnQ4PWZ1bmN0aW9uKENlLERlLFJlKXtyZXR1cm4gQ2U9K0NlLERlPj4+PTAsUmV8fEsodGhpcyxDZSxEZSwxLDI1NSwwKSx0aGlzW0RlXT0yNTUmQ2UsRGUrMX0sRC5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1ELnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKENlLERlLFJlKXty'@;
put 'ZXR1cm4gQ2U9K0NlLERlPj4+PTAsUmV8fEsodGhpcyxDZSxEZSwyLDY1NTM1LDApLHRoaXNbRGVdPTI1NSZDZSx0aGlzW0RlKzFdPUNlPj4+OCxEZSsyfSxELnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPUQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oQ2UsRGUsUmUpe3JldHVy'@;
put 'biBDZT0rQ2UsRGU+Pj49MCxSZXx8Syh0aGlzLENlLERlLDIsNjU1MzUsMCksdGhpc1tEZV09Q2U+Pj44LHRoaXNbRGUrMV09MjU1JkNlLERlKzJ9LEQucHJvdG90eXBlLndyaXRlVWludDMyTEU9RC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihDZSxEZSxSZSl7cmV0dXJuIENl'@;
put 'PStDZSxEZT4+Pj0wLFJlfHxLKHRoaXMsQ2UsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGUrM109Q2U+Pj4yNCx0aGlzW0RlKzJdPUNlPj4+MTYsdGhpc1tEZSsxXT1DZT4+PjgsdGhpc1tEZV09MjU1JkNlLERlKzR9LEQucHJvdG90eXBlLndyaXRlVWludDMyQkU9RC5wcm90b3R5cGUud3Jp'@;
put 'dGVVSW50MzJCRT1mdW5jdGlvbihDZSxEZSxSZSl7cmV0dXJuIENlPStDZSxEZT4+Pj0wLFJlfHxLKHRoaXMsQ2UsRGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbRGVdPUNlPj4+MjQsdGhpc1tEZSsxXT1DZT4+PjE2LHRoaXNbRGUrMl09Q2U+Pj44LHRoaXNbRGUrM109MjU1JkNlLERlKzR9LEQu'@;
put 'cHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24oQ2UsRGUsUmUsZXQpe2lmKENlPStDZSxEZT4+Pj0wLCFldCl7dmFyIG50PU1hdGgucG93KDIsOCpSZS0xKTtLKHRoaXMsQ2UsRGUsUmUsbnQtMSwtbnQpfXZhciBHZT0wLGR0PTEsVGU9MDtmb3IodGhpc1tEZV09MjU1JkNlOysrR2U8UmUm'@;
put 'JihkdCo9MjU2KTspQ2U8MCYmMD09PVRlJiYwIT09dGhpc1tEZStHZS0xXSYmKFRlPTEpLHRoaXNbRGUrR2VdPShDZS9kdHwwKS1UZSYyNTU7cmV0dXJuIERlK1JlfSxELnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKENlLERlLFJlLGV0KXtpZihDZT0rQ2UsRGU+Pj49MCwhZXQpe3Zh'@;
put 'ciBudD1NYXRoLnBvdygyLDgqUmUtMSk7Syh0aGlzLENlLERlLFJlLG50LTEsLW50KX12YXIgR2U9UmUtMSxkdD0xLFRlPTA7Zm9yKHRoaXNbRGUrR2VdPTI1NSZDZTstLUdlPj0wJiYoZHQqPTI1Nik7KUNlPDAmJjA9PT1UZSYmMCE9PXRoaXNbRGUrR2UrMV0mJihUZT0xKSx0aGlzW0RlK0dl'@;
put 'XT0oQ2UvZHR8MCktVGUmMjU1O3JldHVybiBEZStSZX0sRC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKENlLERlLFJlKXtyZXR1cm4gQ2U9K0NlLERlPj4+PTAsUmV8fEsodGhpcyxDZSxEZSwxLDEyNywtMTI4KSxDZTwwJiYoQ2U9MjU1K0NlKzEpLHRoaXNbRGVdPTI1NSZDZSxEZSsx'@;
put 'fSxELnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oQ2UsRGUsUmUpe3JldHVybiBDZT0rQ2UsRGU+Pj49MCxSZXx8Syh0aGlzLENlLERlLDIsMzI3NjcsLTMyNzY4KSx0aGlzW0RlXT0yNTUmQ2UsdGhpc1tEZSsxXT1DZT4+PjgsRGUrMn0sRC5wcm90b3R5cGUud3JpdGVJbnQxNkJF'@;
put 'PWZ1bmN0aW9uKENlLERlLFJlKXtyZXR1cm4gQ2U9K0NlLERlPj4+PTAsUmV8fEsodGhpcyxDZSxEZSwyLDMyNzY3LC0zMjc2OCksdGhpc1tEZV09Q2U+Pj44LHRoaXNbRGUrMV09MjU1JkNlLERlKzJ9LEQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihDZSxEZSxSZSl7cmV0dXJu'@;
put 'IENlPStDZSxEZT4+Pj0wLFJlfHxLKHRoaXMsQ2UsRGUsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSx0aGlzW0RlXT0yNTUmQ2UsdGhpc1tEZSsxXT1DZT4+PjgsdGhpc1tEZSsyXT1DZT4+PjE2LHRoaXNbRGUrM109Q2U+Pj4yNCxEZSs0fSxELnByb3RvdHlwZS53cml0ZUludDMyQkU9ZnVu'@;
put 'Y3Rpb24oQ2UsRGUsUmUpe3JldHVybiBDZT0rQ2UsRGU+Pj49MCxSZXx8Syh0aGlzLENlLERlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksQ2U8MCYmKENlPTQyOTQ5NjcyOTUrQ2UrMSksdGhpc1tEZV09Q2U+Pj4yNCx0aGlzW0RlKzFdPUNlPj4+MTYsdGhpc1tEZSsyXT1DZT4+PjgsdGhp'@;
put 'c1tEZSszXT0yNTUmQ2UsRGUrNH0sRC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKENlLERlLFJlKXtyZXR1cm4gdWUodGhpcyxDZSxEZSwhMCxSZSl9LEQucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbihDZSxEZSxSZSl7cmV0dXJuIHVlKHRoaXMsQ2UsRGUsITEsUmUp'@;
put 'fSxELnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKENlLERlLFJlKXtyZXR1cm4gaGUodGhpcyxDZSxEZSwhMCxSZSl9LEQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oQ2UsRGUsUmUpe3JldHVybiBoZSh0aGlzLENlLERlLCExLFJlKX0sRC5wcm90b3R5cGUuY29w'@;
put 'eT1mdW5jdGlvbihDZSxEZSxSZSxldCl7aWYoIUQuaXNCdWZmZXIoQ2UpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKFJlfHwoUmU9MCksIWV0JiYwIT09ZXQmJihldD10aGlzLmxlbmd0aCksRGU+PUNlLmxlbmd0aCYmKERlPUNlLmxlbmd0'@;
put 'aCksRGV8fChEZT0wKSxldD4wJiZldDxSZSYmKGV0PVJlKSxldD09PVJlfHwwPT09Q2UubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoRGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKFJlPDB8fFJlPj10aGlzLmxlbmd0'@;
put 'aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoZXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtldD50aGlzLmxlbmd0aCYmKGV0PXRoaXMubGVuZ3RoKSxDZS5sZW5ndGgtRGU8ZXQtUmUmJihldD1DZS5sZW5n'@;
put 'dGgtRGUrUmUpO3ZhciBudD1ldC1SZTtyZXR1cm4gdGhpcz09PUNlJiYiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbj90aGlzLmNvcHlXaXRoaW4oRGUsUmUsZXQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKENlLHRoaXMuc3ViYXJyYXko'@;
put 'UmUsZXQpLERlKSxudH0sRC5wcm90b3R5cGUuZmlsbD1mdW5jdGlvbihDZSxEZSxSZSxldCl7aWYoInN0cmluZyI9PXR5cGVvZiBDZSl7aWYoInN0cmluZyI9PXR5cGVvZiBEZT8oZXQ9RGUsRGU9MCxSZT10aGlzLmxlbmd0aCk6InN0cmluZyI9PXR5cGVvZiBSZSYmKGV0PVJlLFJlPXRoaXMu'@;
put 'bGVuZ3RoKSx2b2lkIDAhPT1ldCYmInN0cmluZyIhPXR5cGVvZiBldCl0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nIik7aWYoInN0cmluZyI9PXR5cGVvZiBldCYmIUQuaXNFbmNvZGluZyhldCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNv'@;
put 'ZGluZzogIitldCk7aWYoMT09PUNlLmxlbmd0aCl7dmFyIG50PUNlLmNoYXJDb2RlQXQoMCk7KCJ1dGY4Ij09PWV0JiZudDwxMjh8fCJsYXRpbjEiPT09ZXQpJiYoQ2U9bnQpfX1lbHNlIm51bWJlciI9PXR5cGVvZiBDZT9DZSY9MjU1OiJib29sZWFuIj09dHlwZW9mIENlJiYoQ2U9TnVtYmVy'@;
put 'KENlKSk7aWYoRGU8MHx8dGhpcy5sZW5ndGg8RGV8fHRoaXMubGVuZ3RoPFJlKXRocm93IG5ldyBSYW5nZUVycm9yKCJPdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihSZTw9RGUpcmV0dXJuIHRoaXM7dmFyIEdlO2lmKERlPj4+PTAsUmU9dm9pZCAwPT09UmU/dGhpcy5sZW5ndGg6UmU+Pj4wLENl'@;
put 'fHwoQ2U9MCksIm51bWJlciI9PXR5cGVvZiBDZSlmb3IoR2U9RGU7R2U8UmU7KytHZSl0aGlzW0dlXT1DZTtlbHNle3ZhciBkdD1ELmlzQnVmZmVyKENlKT9DZTpELmZyb20oQ2UsZXQpLFRlPWR0Lmxlbmd0aDtpZigwPT09VGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICInK0Nl'@;
put 'KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoR2U9MDtHZTxSZS1EZTsrK0dlKXRoaXNbR2UrRGVdPWR0W0dlJVRlXX1yZXR1cm4gdGhpc307dmFyIHhlPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24gSGUoRmUsQ2Upe0NlPUNlfHwxLzA7Zm9yKHZhciBEZSxS'@;
put 'ZT1GZS5sZW5ndGgsZXQ9bnVsbCxudD1bXSxHZT0wO0dlPFJlOysrR2Upe2lmKChEZT1GZS5jaGFyQ29kZUF0KEdlKSk+NTUyOTUmJkRlPDU3MzQ0KXtpZighZXQpe2lmKERlPjU2MzE5KXsoQ2UtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihHZSsxPT09UmUpeyhD'@;
put 'ZS09Myk+LTEmJm50LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWV0PURlO2NvbnRpbnVlfWlmKERlPDU2MzIwKXsoQ2UtPTMpPi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KSxldD1EZTtjb250aW51ZX1EZT02NTUzNisoZXQtNTUyOTY8PDEwfERlLTU2MzIwKX1lbHNlIGV0JiYoQ2UtPTMp'@;
put 'Pi0xJiZudC5wdXNoKDIzOSwxOTEsMTg5KTtpZihldD1udWxsLERlPDEyOCl7aWYoKENlLT0xKTwwKWJyZWFrO250LnB1c2goRGUpfWVsc2UgaWYoRGU8MjA0OCl7aWYoKENlLT0yKTwwKWJyZWFrO250LnB1c2goRGU+PjZ8MTkyLDYzJkRlfDEyOCl9ZWxzZSBpZihEZTw2NTUzNil7aWYoKENl'@;
put 'LT0zKTwwKWJyZWFrO250LnB1c2goRGU+PjEyfDIyNCxEZT4+NiY2M3wxMjgsNjMmRGV8MTI4KX1lbHNle2lmKCEoRGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigoQ2UtPTQpPDApYnJlYWs7bnQucHVzaChEZT4+MTh8MjQwLERlPj4xMiY2M3wx'@;
put 'MjgsRGU+PjYmNjN8MTI4LDYzJkRlfDEyOCl9fXJldHVybiBudH1mdW5jdGlvbiBOZShGZSl7cmV0dXJuIGVlLnRvQnl0ZUFycmF5KGZ1bmN0aW9uIE9lKEZlKXtpZigoRmU9KEZlPUZlLnNwbGl0KCI9IilbMF0pLnRyaW0oKS5yZXBsYWNlKHhlLCIiKSkubGVuZ3RoPDIpcmV0dXJuIiI7Zm9y'@;
put 'KDtGZS5sZW5ndGglNCE9MDspRmUrPSI9IjtyZXR1cm4gRmV9KEZlKSl9ZnVuY3Rpb24gS2UoRmUsQ2UsRGUsUmUpe2Zvcih2YXIgZXQ9MDtldDxSZSYmIShldCtEZT49Q2UubGVuZ3RofHxldD49RmUubGVuZ3RoKTsrK2V0KUNlW2V0K0RlXT1GZVtldF07cmV0dXJuIGV0fWZ1bmN0aW9uIFVl'@;
put 'KEZlLENlKXtyZXR1cm4gRmUgaW5zdGFuY2VvZiBDZXx8bnVsbCE9RmUmJm51bGwhPUZlLmNvbnN0cnVjdG9yJiZudWxsIT1GZS5jb25zdHJ1Y3Rvci5uYW1lJiZGZS5jb25zdHJ1Y3Rvci5uYW1lPT09Q2UubmFtZX1mdW5jdGlvbiBYZShGZSl7cmV0dXJuIEZlIT1GZX12YXIgYXQ9ZnVuY3Rp'@;
put 'b24oKXtmb3IodmFyIEZlPSIwMTIzNDU2Nzg5YWJjZGVmIixDZT1uZXcgQXJyYXkoMjU2KSxEZT0wO0RlPDE2OysrRGUpZm9yKHZhciBSZT0xNipEZSxldD0wO2V0PDE2OysrZXQpQ2VbUmUrZXRdPUZlW0RlXStGZVtldF07cmV0dXJuIENlfSgpfSwzMjQ3OigkZSxTZSxSKT0+e3ZhciBlZT1S'@;
put 'KDI3MDU0KS5CdWZmZXIsYj1SKDcwNDUpLlRyYW5zZm9ybSxtPVIoNzg0NTQpLkk7ZnVuY3Rpb24gdyhBKXtiLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIEEsdGhpcy5oYXNoTW9kZT90aGlzW0FdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlz'@;
put 'Ll9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfVIoNzE5OTMpKHcsYiksdy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKEEsRCxQKXsic3Ry'@;
put 'aW5nIj09dHlwZW9mIEEmJihBPWVlLmZyb20oQSxEKSk7dmFyIFU9dGhpcy5fdXBkYXRlKEEpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KFAmJihVPXRoaXMuX3RvU3RyaW5nKFUsUCkpLFUpfSx3LnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sdy5wcm90b3R5cGUu'@;
put 'Z2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVu'@;
put 'c3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihBLEQsUCl7dmFyIFU7dHJ5e3RoaXMuaGFz'@;
put 'aE1vZGU/dGhpcy5fdXBkYXRlKEEpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUoQSkpfWNhdGNoKEkpe1U9SX1maW5hbGx5e1AoVSl9fSx3LnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24oQSl7dmFyIEQ7dHJ5e3RoaXMucHVzaCh0aGlzLl9fZmluYWwoKSl9Y2F0Y2goUCl7RD1QfUEoRCl9LHcu'@;
put 'cHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKEEpe3ZhciBEPXRoaXMuX19maW5hbCgpfHxlZS5hbGxvYygwKTtyZXR1cm4gQSYmKEQ9dGhpcy5fdG9TdHJpbmcoRCxBLCEwKSksRH0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKEEsRCxQKXtpZih0aGlzLl9kZWNvZGVy'@;
put 'fHwodGhpcy5fZGVjb2Rlcj1uZXcgbShEKSx0aGlzLl9lbmNvZGluZz1EKSx0aGlzLl9lbmNvZGluZyE9PUQpdGhyb3cgbmV3IEVycm9yKCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIFU9dGhpcy5fZGVjb2Rlci53cml0ZShBKTtyZXR1cm4gUCYmKFUrPXRoaXMuX2RlY29kZXIuZW5k'@;
put 'KCkpLFV9LCRlLmV4cG9ydHM9d30sMjc2Mzc6KCRlLFNlLFIpPT57ZnVuY3Rpb24gVihaKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFopfVNlLmlzQXJyYXk9ZnVuY3Rpb24gZWUoWil7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheShaKToiW29iamVj'@;
put 'dCBBcnJheV0iPT09VihaKX0sU2UuaXNCb29sZWFuPWZ1bmN0aW9uIGIoWil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgWn0sU2UuaXNOdWxsPWZ1bmN0aW9uIG0oWil7cmV0dXJuIG51bGw9PT1afSxTZS5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiBYKFope3JldHVybiBudWxsPT1afSxT'@;
put 'ZS5pc051bWJlcj1mdW5jdGlvbiB3KFope3JldHVybiJudW1iZXIiPT10eXBlb2YgWn0sU2UuaXNTdHJpbmc9ZnVuY3Rpb24gQShaKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFp9LFNlLmlzU3ltYm9sPWZ1bmN0aW9uIEQoWil7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBafSxTZS5pc1VuZGVm'@;
put 'aW5lZD1mdW5jdGlvbiBQKFope3JldHVybiB2b2lkIDA9PT1afSxTZS5pc1JlZ0V4cD1mdW5jdGlvbiBVKFope3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09VihaKX0sU2UuaXNPYmplY3Q9ZnVuY3Rpb24gSShaKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIFomJm51bGwhPT1afSxTZS5pc0Rh'@;
put 'dGU9ZnVuY3Rpb24gRShaKXtyZXR1cm4iW29iamVjdCBEYXRlXSI9PT1WKFopfSxTZS5pc0Vycm9yPWZ1bmN0aW9uIGsoWil7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PVYoWil8fFogaW5zdGFuY2VvZiBFcnJvcn0sU2UuaXNGdW5jdGlvbj1mdW5jdGlvbiBCKFope3JldHVybiJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBafSxTZS5pc1ByaW1pdGl2ZT1mdW5jdGlvbiBOKFope3JldHVybiBudWxsPT09Wnx8ImJvb2xlYW4iPT10eXBlb2YgWnx8Im51bWJlciI9PXR5cGVvZiBafHwic3RyaW5nIj09dHlwZW9mIFp8fCJzeW1ib2wiPT10eXBlb2YgWnx8dHlwZW9mIFo+InUifSxTZS5pc0J1ZmZl'@;
put 'cj1SKDgzODM4KS5CdWZmZXIuaXNCdWZmZXJ9LDg3MzAzOigkZSxTZSxSKT0+e3ZhciBlZT1SKDkwNTE4KSxiPVIoODk2MDYpOyRlLmV4cG9ydHM9ZnVuY3Rpb24oRCl7cmV0dXJuIG5ldyBYKEQpfTt2YXIgbT17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNl'@;
put 'Y3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntu'@;
put 'YW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiBYKEEpe3RoaXMuY3VydmVUeXBlPW1bQV0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpBfSksdGhpcy5jdXJ2ZT1uZXcgZWUuZWModGhp'@;
put 'cy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiB3KEEsRCxQKXtBcnJheS5pc0FycmF5KEEpfHwoQT1BLnRvQXJyYXkoKSk7dmFyIFU9bmV3IEJ1ZmZlcihBKTtpZihQJiZVLmxlbmd0aDxQKXt2YXIgST1uZXcgQnVmZmVyKFAtVS5sZW5ndGgpO0kuZmlsbCgwKSxV'@;
put 'PUJ1ZmZlci5jb25jYXQoW0ksVV0pfXJldHVybiBEP1UudG9TdHJpbmcoRCk6VX1tLnAyMjQ9bS5zZWNwMjI0cjEsbS5wMjU2PW0uc2VjcDI1NnIxPW0ucHJpbWUyNTZ2MSxtLnAxOTI9bS5zZWNwMTkycjE9bS5wcmltZTE5MnYxLG0ucDM4ND1tLnNlY3AzODRyMSxtLnA1MjE9bS5zZWNwNTIx'@;
put 'cjEsWC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKEEsRCl7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShBLEQpfSxYLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEEsRCxQKXtyZXR1cm4gRD1EfHwidXRm'@;
put 'OCIsQnVmZmVyLmlzQnVmZmVyKEEpfHwoQT1uZXcgQnVmZmVyKEEsRCkpLHcodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKEEpLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksUCx0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sWC5wcm90b3R5cGUuZ2V0'@;
put 'UHVibGljS2V5PWZ1bmN0aW9uKEEsRCl7dmFyIFA9dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1ELCEwKTtyZXR1cm4iaHlicmlkIj09PUQmJihQWzBdPVBbUC5sZW5ndGgtMV0lMj83OjYpLHcoUCxBKX0sWC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihBKXty'@;
put 'ZXR1cm4gdyh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpLEEpfSxYLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oQSxEKXtyZXR1cm4gRD1EfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKEEpfHwoQT1uZXcgQnVmZmVyKEEsRCkpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKEEpLHRoaXN9'@;
put 'LFgucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oQSxEKXtEPUR8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoQSl8fChBPW5ldyBCdWZmZXIoQSxEKSk7dmFyIFA9bmV3IGIoQSk7cmV0dXJuIFA9UC50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigp'@;
put 'LHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShQKSx0aGlzfX0sODk2MDY6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcseSl7aWYoIUcpdGhyb3cgbmV3IEVycm9yKHl8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gWChHLHkp'@;
put 'e0cuc3VwZXJfPXk7dmFyIEw9ZnVuY3Rpb24oKXt9O0wucHJvdG90eXBlPXkucHJvdG90eXBlLEcucHJvdG90eXBlPW5ldyBMLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gdyhHLHksTCl7aWYody5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRz'@;
put 'PW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT15fHwiYmUiPT09eSkmJihMPXkseT0xMCksdGhpcy5faW5pdChHfHwwLHl8fDEwLEx8fCJiZSIpKX12YXIgQTsib2JqZWN0Ij09dHlwZW9mIGVlP2VlLmV4cG9ydHM9dzpiLkJOPXcsdy5CTj13LHcu'@;
put 'd29yZFNpemU9MjY7dHJ5e0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOlIoNzc5NjUpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRChHLHkpe3ZhciBMPUcuY2hhckNvZGVBdCh5KTtyZXR1cm4gTD49NjUmJkw8PTcwP0wtNTU6TD49'@;
put 'OTcmJkw8PTEwMj9MLTg3OkwtNDgmMTV9ZnVuY3Rpb24gUChHLHksTCl7dmFyIEg9RChHLEwpO3JldHVybiBMLTE+PXkmJihIfD1EKEcsTC0xKTw8NCksSH1mdW5jdGlvbiBVKEcseSxMLEgpe2Zvcih2YXIgaj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsTCksUz15O1M8ZztTKyspe3ZhciB4PUcu'@;
put 'Y2hhckNvZGVBdChTKS00ODtqKj1ILGorPXg+PTQ5P3gtNDkrMTA6eD49MTc/eC0xNysxMDp4fXJldHVybiBqfXcuaXNCTj1mdW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIHd8fG51bGwhPT15JiYib2JqZWN0Ij09dHlwZW9mIHkmJnkuY29uc3RydWN0b3Iud29yZFNpemU9PT13Lndv'@;
put 'cmRTaXplJiZBcnJheS5pc0FycmF5KHkud29yZHMpfSx3Lm1heD1mdW5jdGlvbih5LEwpe3JldHVybiB5LmNtcChMKT4wP3k6TH0sdy5taW49ZnVuY3Rpb24oeSxMKXtyZXR1cm4geS5jbXAoTCk8MD95Okx9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHksTCxIKXtpZigibnVtYmVyIj09'@;
put 'dHlwZW9mIHkpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoeSxMLEgpO2lmKCJvYmplY3QiPT10eXBlb2YgeSlyZXR1cm4gdGhpcy5faW5pdEFycmF5KHksTCxIKTsiaGV4Ij09PUwmJihMPTE2KSxtKEw9PT0oMHxMKSYmTD49MiYmTDw9MzYpO3ZhciBqPTA7Ii0iPT09KHk9eS50b1N0cmluZygp'@;
put 'LnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPHkubGVuZ3RoJiYoMTY9PT1MP3RoaXMuX3BhcnNlSGV4KHksaixIKToodGhpcy5fcGFyc2VCYXNlKHksTCxqKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEwsSCkpKX0sdy5w'@;
put 'cm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oeSxMLEgpe3k8MCYmKHRoaXMubmVnYXRpdmU9MSx5PS15KSx5PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ5XSx0aGlzLmxlbmd0aD0xKTp5PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnkseS82NzEw'@;
put 'ODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oeTw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ5LHkvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxMLEgpfSx3LnBy'@;
put 'b3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHksTCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgeS5sZW5ndGgpLHkubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHkubGVuZ3RoLzMpLHRoaXMud29yZHM9'@;
put 'bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPTA7dmFyIGcsUyx4PTA7aWYoImJlIj09PUgpZm9yKGo9eS5sZW5ndGgtMSxnPTA7aj49MDtqLT0zKXRoaXMud29yZHNbZ118PShTPXlbal18eVtqLTFdPDw4fHlbai0yXTw8'@;
put 'MTYpPDx4JjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1TPj4+MjYteCY2NzEwODg2MywoeCs9MjQpPj0yNiYmKHgtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3Ioaj0wLGc9MDtqPHkubGVuZ3RoO2orPTMpdGhpcy53b3Jkc1tnXXw9KFM9eVtqXXx5W2orMV08PDh8eVtqKzJdPDwxNik8'@;
put 'PHgmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPVM+Pj4yNi14JjY3MTA4ODYzLCh4Kz0yNCk+PTI2JiYoeC09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oeSxMLEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoeS5sZW5ndGgtTCkv'@;
put 'NiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgeCxnPTAsUz0wO2lmKCJiZSI9PT1IKWZvcihqPXkubGVuZ3RoLTE7aj49TDtqLT0yKXg9UCh5LEwsaik8PGcsdGhpcy53b3Jkc1tTXXw9'@;
put 'NjcxMDg4NjMmeCxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O2Vsc2UgZm9yKGo9KHkubGVuZ3RoLUwpJTI9PTA/TCsxOkw7ajx5Lmxlbmd0aDtqKz0yKXg9UCh5LEwsaik8PGcsdGhpcy53b3Jkc1tTXXw9NjcxMDg4NjMmeCxnPj0xOD8oZy09MTgsdGhpcy53'@;
put 'b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih5LEwsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9TClqKys7ai0tLGc9Zy9MfDA7Zm9yKHZhciBT'@;
put 'PXkubGVuZ3RoLUgseD1TJWosXz1NYXRoLm1pbihTLFMteCkrSCxwPTAsQz1IO0M8XztDKz1qKXA9VSh5LEMsQytqLEwpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PXgpe3ZhciBLPTE7Zm9yKHA9'@;
put 'VSh5LEMseS5sZW5ndGgsTCksQz0wO0M8eDtDKyspSyo9TDt0aGlzLmltdWxuKEspLHRoaXMud29yZHNbMF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih5KXt5LndvcmRzPW5ldyBBcnJh'@;
put 'eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspeS53b3Jkc1tMXT10aGlzLndvcmRzW0xdO3kubGVuZ3RoPXRoaXMubGVuZ3RoLHkubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx5LnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIg'@;
put 'eT1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHkpLHl9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oeSl7Zm9yKDt0aGlzLmxlbmd0aDx5Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0'@;
put 'aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlz'@;
put 'Lm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAw'@;
put 'IiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxrPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2'@;
put 'MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5'@;
put 'MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oRyx5LEwpe0wubmVnYXRpdmU9eS5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK3kubGVuZ3RofDA7TC5sZW5n'@;
put 'dGg9SCxIPUgtMXwwO3ZhciBqPTB8Ry53b3Jkc1swXSxnPTB8eS53b3Jkc1swXSxTPWoqZyxfPVMvNjcxMDg4NjR8MDtMLndvcmRzWzBdPTY3MTA4ODYzJlM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciBDPV8+Pj4yNixLPTY3MTA4ODYzJl8sbmU9TWF0aC5taW4ocCx5Lmxlbmd0aC0x'@;
put 'KSx1ZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7dWU8PW5lO3VlKyspQys9KFM9KGo9MHxHLndvcmRzW3AtdWV8MF0pKihnPTB8eS53b3Jkc1t1ZV0pK0spLzY3MTA4ODY0fDAsSz02NzEwODg2MyZTO0wud29yZHNbcF09MHxLLF89MHxDfXJldHVybiAwIT09Xz9MLndvcmRzW3BdPTB8XzpM'@;
put 'Lmxlbmd0aC0tLEwuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih5LEwpe3ZhciBIO2lmKEw9MHxMfHwxLDE2PT09KHk9eXx8MTApfHwiaGV4Ij09PXkpe0g9IiI7Zm9yKHZhciBqPTAsZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHg9dGhpcy53b3Jkc1tTXSxf'@;
put 'PSgxNjc3NzIxNSYoeDw8anxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9eD4+PjI0LWomMTY3NzcyMTUpfHxTIT09dGhpcy5sZW5ndGgtMT9JWzYtXy5sZW5ndGhdK18rSDpfK0gsKGorPTIpPj0yNiYmKGotPTI2LFMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0'@;
put 'aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoeT09PSgwfHkpJiZ5Pj0yJiZ5PD0zNil7dmFyIHA9RVt5XSxDPWtbeV07SD0iIjt2YXIgSz10aGlzLmNsb25lKCk7Zm9yKEsubmVnYXRpdmU9MDshSy5pc1plcm8oKTspe3ZhciBuZT1LLm1v'@;
put 'ZG4oQykudG9TdHJpbmcoeSk7SD0oSz1LLmlkaXZuKEMpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5ndGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwi'@;
put 'QmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB5PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD95Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29y'@;
put 'ZHNbMl0/eSs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy15Onl9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gbSh0eXBlb2YgQTwidSIpLHRoaXMudG9BcnJheUxpa2UoQSx5LEwpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMudG9BcnJh'@;
put 'eUxpa2UoQXJyYXkseSxMKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oeSxMLEgpe3ZhciBqPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxqKTttKGo8PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVk'@;
put 'IGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBfLHAsUz0ibGUiPT09TCx4PW5ldyB5KGcpLEM9dGhpcy5jbG9uZSgpO2lmKFMpe2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRsbigyNTUpLEMuaXVzaHJuKDgpLHhbcF09Xztmb3IoO3A8ZztwKyspeFtwXT0wfWVs'@;
put 'c2V7Zm9yKHA9MDtwPGctajtwKyspeFtwXT0wO2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRsbigyNTUpLEMuaXVzaHJuKDgpLHhbZy1wLTFdPV99cmV0dXJuIHh9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih5KXtyZXR1cm4gMzItTWF0aC5jbHoz'@;
put 'Mih5KX06ZnVuY3Rpb24oeSl7dmFyIEw9eSxIPTA7cmV0dXJuIEw+PTQwOTYmJihIKz0xMyxMPj4+PTEzKSxMPj02NCYmKEgrPTcsTD4+Pj03KSxMPj04JiYoSCs9NCxMPj4+PTQpLEw+PTImJihIKz0yLEw+Pj49MiksSCtMfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oeSl7aWYo'@;
put 'MD09PXkpcmV0dXJuIDI2O3ZhciBMPXksSD0wO3JldHVybiA4MTkxJkx8fChIKz0xMyxMPj4+PTEzKSwxMjcmTHx8KEgrPTcsTD4+Pj03KSwxNSZMfHwoSCs9NCxMPj4+PTQpLDMmTHx8KEgrPTIsTD4+Pj0yKSwxJkx8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2'@;
put 'YXIgTD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStMfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB5PTAsTD0wO0w8dGhpcy5sZW5ndGg7'@;
put 'TCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0xdKTtpZih5Kz1ILDI2IT09SClicmVha31yZXR1cm4geX0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1'@;
put 'bmN0aW9uKHkpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHkpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMudGVzdG4oeS0xKT90aGlzLm5vdG4oeSkuaWFkZG4oMSkuaW5lZygpOnRo'@;
put 'aXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNa'@;
put 'ZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHkpe2Zvcig7dGhpcy5sZW5ndGg8eS5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEw9MDtMPHkubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPXRoaXMud29y'@;
put 'ZHNbTF18eS53b3Jkc1tMXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1b3IoeSl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55'@;
put 'Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHkpOnkuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoeSk6eS5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5k'@;
put 'PWZ1bmN0aW9uKHkpe3ZhciBMO0w9dGhpcy5sZW5ndGg+eS5sZW5ndGg/eTp0aGlzO2Zvcih2YXIgSD0wO0g8TC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZ5LndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1MLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90'@;
put 'eXBlLmlhbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1YW5kKHkpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHkpOnkuY2xvbmUoKS5pYW5k'@;
put 'KHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoeSk6eS5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih5KXt2YXIgTCxIO3RoaXMubGVuZ3RoPnkubGVu'@;
put 'Z3RoPyhMPXRoaXMsSD15KTooTD15LEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1MLndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PUwpZm9yKDtqPEwubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUwud29yZHNbal07cmV0dXJuIHRoaXMubGVu'@;
put 'Z3RoPUwubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih5KXtyZXR1cm4gbSghKHRoaXMubmVnYXRpdmV8eS5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoeSl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/'@;
put 'dGhpcy5jbG9uZSgpLml4b3IoeSk6eS5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih5KTp5LmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1'@;
put 'bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD0wfE1hdGguY2VpbCh5LzI2KSxIPXklMjY7dGhpcy5fZXhwYW5kKEwpLEg+MCYmTC0tO2Zvcih2YXIgaj0wO2o8TDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYo'@;
put 'dGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oeSl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oeSxMKXttKCJudW1iZXIiPT10eXBl'@;
put 'b2YgeSYmeT49MCk7dmFyIEg9eS8yNnwwLGo9eSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXT1MP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHkpe3ZhciBMLEgs'@;
put 'ajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxMPXRoaXMuaXN1Yih5KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZlKXJldHVybiB5Lm5lZ2F0aXZl'@;
put 'PTAsTD10aGlzLmlzdWIoeSkseS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+eS5sZW5ndGg/KEg9dGhpcyxqPXkpOihIPXksaj10aGlzKTtmb3IodmFyIGc9MCxTPTA7UzxqLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyYoTD0oMHxILndvcmRzW1NdKSso'@;
put 'MHxqLndvcmRzW1NdKStnKSxnPUw+Pj4yNjtmb3IoOzAhPT1nJiZTPEgubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihMPSgwfEgud29yZHNbU10pK2cpLGc9TD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhp'@;
put 'cy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7UzxILmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT1ILndvcmRzW1NdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSl7dmFyIEw7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oeS5u'@;
put 'ZWdhdGl2ZT0wLEw9dGhpcy5zdWIoeSkseS5uZWdhdGl2ZV49MSxMKTowPT09eS5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxMPXkuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxMKTp0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh5'@;
put 'KTp5LmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih5KXtpZigwIT09eS5uZWdhdGl2ZSl7eS5uZWdhdGl2ZT0wO3ZhciBMPXRoaXMuaWFkZCh5KTtyZXR1cm4geS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJu'@;
put 'IHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosZyxIPXRoaXMuY21wKHkpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KGo9dGhpcyxn'@;
put 'PXkpOihqPXksZz10aGlzKTtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4KyspUz0oTD0oMHxqLndvcmRzW3hdKS0oMHxnLndvcmRzW3hdKStTKT4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZMO2Zvcig7MCE9PVMmJng8ai5sZW5ndGg7eCsrKVM9KEw9KDB8ai53b3Jkc1t4XSkrUyk+'@;
put 'PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmTDtpZigwPT09UyYmeDxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDt4PGoubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPWoud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHgpLGohPT10aGlzJiYodGhpcy5u'@;
put 'ZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoeSl9O3ZhciBWPWZ1bmN0aW9uKHksTCxIKXt2YXIgXyxwLEMsaj15LndvcmRzLGc9TC53b3JkcyxTPUgud29yZHMseD0wLEs9MHxqWzBdLG5lPTgxOTEm'@;
put 'Syx1ZT1LPj4+MTMsaGU9MHxqWzFdLHhlPTgxOTEmaGUsT2U9aGU+Pj4xMyxIZT0wfGpbMl0sRWU9ODE5MSZIZSxMZT1IZT4+PjEzLE5lPTB8alszXSxLZT04MTkxJk5lLFVlPU5lPj4+MTMsWGU9MHxqWzRdLGF0PTgxOTEmWGUsRmU9WGU+Pj4xMyxDZT0wfGpbNV0sRGU9ODE5MSZDZSxSZT1D'@;
put 'ZT4+PjEzLGV0PTB8als2XSxudD04MTkxJmV0LEdlPWV0Pj4+MTMsZHQ9MHxqWzddLFRlPTgxOTEmZHQsQWU9ZHQ+Pj4xMyxCZT0wfGpbOF0sb3Q9ODE5MSZCZSxsdD1CZT4+PjEzLEN0PTB8als5XSxGdD04MTkxJkN0LFJ0PUN0Pj4+MTMsWHQ9MHxnWzBdLFNuPTgxOTEmWHQsenQ9WHQ+Pj4x'@;
put 'Myx2bj0wfGdbMV0sQm49ODE5MSZ2bix0bj12bj4+PjEzLFpuPTB8Z1syXSxPbj04MTkxJlpuLHB0PVpuPj4+MTMsZm49MHxnWzNdLGRuPTgxOTEmZm4sTXQ9Zm4+Pj4xMyxZdD0wfGdbNF0sX3Q9ODE5MSZZdCxqdD1ZdD4+PjEzLHBuPTB8Z1s1XSxydD04MTkxJnBuLEV0PXBuPj4+MTMsUXQ9'@;
put 'MHxnWzZdLFR0PTgxOTEmUXQsbXQ9UXQ+Pj4xMyxHdD0wfGdbN10sa249ODE5MSZHdCxCdD1HdD4+PjEzLGJuPTB8Z1s4XSxDbj04MTkxJmJuLGVuPWJuPj4+MTMsUG49MHxnWzldLHduPTgxOTEmUG4sJHQ9UG4+Pj4xMztILm5lZ2F0aXZlPXkubmVnYXRpdmVeTC5uZWdhdGl2ZSxILmxlbmd0'@;
put 'aD0xOTt2YXIgV249KHgrKF89TWF0aC5pbXVsKG5lLFNuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChuZSx6dCkpK01hdGguaW11bCh1ZSxTbil8MCkpPDwxMyl8MDt4PSgoQz1NYXRoLmltdWwodWUsenQpKSsocD4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsXz1NYXRo'@;
put 'LmltdWwoeGUsU24pLHA9KHA9TWF0aC5pbXVsKHhlLHp0KSkrTWF0aC5pbXVsKE9lLFNuKXwwLEM9TWF0aC5pbXVsKE9lLHp0KTt2YXIgY2k9KHgrKF89XytNYXRoLmltdWwobmUsQm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHVlLEJuKXww'@;
put 'KSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLHRuKXwwKSsocD4+PjEzKXwwKSsoY2k+Pj4yNil8MCxjaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRWUsU24pLHA9KHA9TWF0aC5pbXVsKEVlLHp0KSkrTWF0aC5pbXVsKExlLFNuKXwwLEM9TWF0aC5pbXVsKExlLHp0KSxfPV8rTWF0aC5p'@;
put 'bXVsKHhlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bChPZSxCbil8MCxDPUMrTWF0aC5pbXVsKE9lLHRuKXwwO3ZhciBsbj0oeCsoXz1fK01hdGguaW11bChuZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwo'@;
put 'dWUsT24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUscHQpfDApKyhwPj4+MTMpfDApKyhsbj4+PjI2KXwwLGxuJj02NzEwODg2MyxfPU1hdGguaW11bChLZSxTbikscD0ocD1NYXRoLmltdWwoS2UsenQpKStNYXRoLmltdWwoVWUsU24pfDAsQz1NYXRoLmltdWwoVWUsenQpLF89'@;
put 'XytNYXRoLmltdWwoRWUsQm4pfDAscD0ocD1wK01hdGguaW11bChFZSx0bil8MCkrTWF0aC5pbXVsKExlLEJuKXwwLEM9QytNYXRoLmltdWwoTGUsdG4pfDAsXz1fK01hdGguaW11bCh4ZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoT2UsT24pfDAsQz1DK01h'@;
put 'dGguaW11bChPZSxwdCl8MDt2YXIgbm49KHgrKF89XytNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHVlLGRuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLE10KXwwKSsocD4+PjEzKXwwKSsobm4+Pj4y'@;
put 'Nil8MCxubiY9NjcxMDg4NjMsXz1NYXRoLmltdWwoYXQsU24pLHA9KHA9TWF0aC5pbXVsKGF0LHp0KSkrTWF0aC5pbXVsKEZlLFNuKXwwLEM9TWF0aC5pbXVsKEZlLHp0KSxfPV8rTWF0aC5pbXVsKEtlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsdG4pfDApK01hdGguaW11bChVZSxCbil8'@;
put 'MCxDPUMrTWF0aC5pbXVsKFVlLHRuKXwwLF89XytNYXRoLmltdWwoRWUsT24pfDAscD0ocD1wK01hdGguaW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKExlLE9uKXwwLEM9QytNYXRoLmltdWwoTGUscHQpfDAsXz1fK01hdGguaW11bCh4ZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLE10KXww'@;
put 'KStNYXRoLmltdWwoT2UsZG4pfDAsQz1DK01hdGguaW11bChPZSxNdCl8MDt2YXIgdWk9KHgrKF89XytNYXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxqdCl8MCkrTWF0aC5pbXVsKHVlLF90KXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVl'@;
put 'LGp0KXwwKSsocD4+PjEzKXwwKSsodWk+Pj4yNil8MCx1aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRGUsU24pLHA9KHA9TWF0aC5pbXVsKERlLHp0KSkrTWF0aC5pbXVsKFJlLFNuKXwwLEM9TWF0aC5pbXVsKFJlLHp0KSxfPV8rTWF0aC5pbXVsKGF0LEJuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'YXQsdG4pfDApK01hdGguaW11bChGZSxCbil8MCxDPUMrTWF0aC5pbXVsKEZlLHRuKXwwLF89XytNYXRoLmltdWwoS2UsT24pfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwLEM9QytNYXRoLmltdWwoVWUscHQpfDAsXz1fK01hdGguaW11bChFZSxkbil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKEVlLE10KXwwKStNYXRoLmltdWwoTGUsZG4pfDAsQz1DK01hdGguaW11bChMZSxNdCl8MCxfPV8rTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bChPZSxfdCl8MCxDPUMrTWF0aC5pbXVsKE9lLGp0KXwwO3Zh'@;
put 'ciBBcj0oeCsoXz1fK01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEV0KXwwKStNYXRoLmltdWwodWUscnQpfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsRXQpfDApKyhwPj4+MTMpfDApKyhBcj4+PjI2KXwwLEFyJj02NzEwODg2Myxf'@;
put 'PU1hdGguaW11bChudCxTbikscD0ocD1NYXRoLmltdWwobnQsenQpKStNYXRoLmltdWwoR2UsU24pfDAsQz1NYXRoLmltdWwoR2UsenQpLF89XytNYXRoLmltdWwoRGUsQm4pfDAscD0ocD1wK01hdGguaW11bChEZSx0bil8MCkrTWF0aC5pbXVsKFJlLEJuKXwwLEM9QytNYXRoLmltdWwoUmUs'@;
put 'dG4pfDAsXz1fK01hdGguaW11bChhdCxPbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRoLmltdWwoRmUsT24pfDAsQz1DK01hdGguaW11bChGZSxwdCl8MCxfPV8rTWF0aC5pbXVsKEtlLGRuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTXQpfDApK01hdGguaW11bChVZSxkbil8'@;
put 'MCxDPUMrTWF0aC5pbXVsKFVlLE10KXwwLF89XytNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGguaW11bChFZSxqdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLEM9QytNYXRoLmltdWwoTGUsanQpfDAsXz1fK01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEV0KXww'@;
put 'KStNYXRoLmltdWwoT2UscnQpfDAsQz1DK01hdGguaW11bChPZSxFdCl8MDt2YXIgbXI9KHgrKF89XytNYXRoLmltdWwobmUsVHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxtdCl8MCkrTWF0aC5pbXVsKHVlLFR0KXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVl'@;
put 'LG10KXwwKSsocD4+PjEzKXwwKSsobXI+Pj4yNil8MCxtciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoVGUsU24pLHA9KHA9TWF0aC5pbXVsKFRlLHp0KSkrTWF0aC5pbXVsKEFlLFNuKXwwLEM9TWF0aC5pbXVsKEFlLHp0KSxfPV8rTWF0aC5pbXVsKG50LEJuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'bnQsdG4pfDApK01hdGguaW11bChHZSxCbil8MCxDPUMrTWF0aC5pbXVsKEdlLHRuKXwwLF89XytNYXRoLmltdWwoRGUsT24pfDAscD0ocD1wK01hdGguaW11bChEZSxwdCl8MCkrTWF0aC5pbXVsKFJlLE9uKXwwLEM9QytNYXRoLmltdWwoUmUscHQpfDAsXz1fK01hdGguaW11bChhdCxkbil8'@;
put 'MCxwPShwPXArTWF0aC5pbXVsKGF0LE10KXwwKStNYXRoLmltdWwoRmUsZG4pfDAsQz1DK01hdGguaW11bChGZSxNdCl8MCxfPV8rTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsanQpfDApK01hdGguaW11bChVZSxfdCl8MCxDPUMrTWF0aC5pbXVsKFVlLGp0KXwwLF89'@;
put 'XytNYXRoLmltdWwoRWUscnQpfDAscD0ocD1wK01hdGguaW11bChFZSxFdCl8MCkrTWF0aC5pbXVsKExlLHJ0KXwwLEM9QytNYXRoLmltdWwoTGUsRXQpfDAsXz1fK01hdGguaW11bCh4ZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLG10KXwwKStNYXRoLmltdWwoT2UsVHQpfDAsQz1DK01h'@;
put 'dGguaW11bChPZSxtdCl8MDt2YXIgeWk9KHgrKF89XytNYXRoLmltdWwobmUsa24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKHVlLGtuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLEJ0KXwwKSsocD4+PjEzKXwwKSsoeWk+Pj4y'@;
put 'Nil8MCx5aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwob3QsU24pLHA9KHA9TWF0aC5pbXVsKG90LHp0KSkrTWF0aC5pbXVsKGx0LFNuKXwwLEM9TWF0aC5pbXVsKGx0LHp0KSxfPV8rTWF0aC5pbXVsKFRlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsdG4pfDApK01hdGguaW11bChBZSxCbil8'@;
put 'MCxDPUMrTWF0aC5pbXVsKEFlLHRuKXwwLF89XytNYXRoLmltdWwobnQsT24pfDAscD0ocD1wK01hdGguaW11bChudCxwdCl8MCkrTWF0aC5pbXVsKEdlLE9uKXwwLEM9QytNYXRoLmltdWwoR2UscHQpfDAsXz1fK01hdGguaW11bChEZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKERlLE10KXww'@;
put 'KStNYXRoLmltdWwoUmUsZG4pfDAsQz1DK01hdGguaW11bChSZSxNdCl8MCxfPV8rTWF0aC5pbXVsKGF0LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsanQpfDApK01hdGguaW11bChGZSxfdCl8MCxDPUMrTWF0aC5pbXVsKEZlLGp0KXwwLF89XytNYXRoLmltdWwoS2UscnQpfDAscD0ocD1w'@;
put 'K01hdGguaW11bChLZSxFdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLEM9QytNYXRoLmltdWwoVWUsRXQpfDAsXz1fK01hdGguaW11bChFZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKEVlLG10KXwwKStNYXRoLmltdWwoTGUsVHQpfDAsQz1DK01hdGguaW11bChMZSxtdCl8MCxfPV8rTWF0aC5p'@;
put 'bXVsKHhlLGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsQnQpfDApK01hdGguaW11bChPZSxrbil8MCxDPUMrTWF0aC5pbXVsKE9lLEJ0KXwwO3ZhciAkcj0oeCsoXz1fK01hdGguaW11bChuZSxDbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwo'@;
put 'dWUsQ24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsZW4pfDApKyhwPj4+MTMpfDApKygkcj4+PjI2KXwwLCRyJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxTbikscD0ocD1NYXRoLmltdWwoRnQsenQpKStNYXRoLmltdWwoUnQsU24pfDAsQz1NYXRoLmltdWwoUnQsenQpLF89'@;
put 'XytNYXRoLmltdWwob3QsQm4pfDAscD0ocD1wK01hdGguaW11bChvdCx0bil8MCkrTWF0aC5pbXVsKGx0LEJuKXwwLEM9QytNYXRoLmltdWwobHQsdG4pfDAsXz1fK01hdGguaW11bChUZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLHB0KXwwKStNYXRoLmltdWwoQWUsT24pfDAsQz1DK01h'@;
put 'dGguaW11bChBZSxwdCl8MCxfPV8rTWF0aC5pbXVsKG50LGRuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsTXQpfDApK01hdGguaW11bChHZSxkbil8MCxDPUMrTWF0aC5pbXVsKEdlLE10KXwwLF89XytNYXRoLmltdWwoRGUsX3QpfDAscD0ocD1wK01hdGguaW11bChEZSxqdCl8MCkrTWF0aC5p'@;
put 'bXVsKFJlLF90KXwwLEM9QytNYXRoLmltdWwoUmUsanQpfDAsXz1fK01hdGguaW11bChhdCxydCl8MCxwPShwPXArTWF0aC5pbXVsKGF0LEV0KXwwKStNYXRoLmltdWwoRmUscnQpfDAsQz1DK01hdGguaW11bChGZSxFdCl8MCxfPV8rTWF0aC5pbXVsKEtlLFR0KXwwLHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoS2UsbXQpfDApK01hdGguaW11bChVZSxUdCl8MCxDPUMrTWF0aC5pbXVsKFVlLG10KXwwLF89XytNYXRoLmltdWwoRWUsa24pfDAscD0ocD1wK01hdGguaW11bChFZSxCdCl8MCkrTWF0aC5pbXVsKExlLGtuKXwwLEM9QytNYXRoLmltdWwoTGUsQnQpfDAsXz1fK01hdGguaW11bCh4ZSxD'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoT2UsQ24pfDAsQz1DK01hdGguaW11bChPZSxlbil8MDt2YXIgSmk9KHgrKF89XytNYXRoLmltdWwobmUsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKHVlLHduKXww'@;
put 'KSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8MCxKaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsQm4pLHA9KHA9TWF0aC5pbXVsKEZ0LHRuKSkrTWF0aC5pbXVsKFJ0LEJuKXwwLEM9TWF0aC5pbXVsKFJ0LHRuKSxfPV8rTWF0aC5p'@;
put 'bXVsKG90LE9uKXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bChsdCxPbil8MCxDPUMrTWF0aC5pbXVsKGx0LHB0KXwwLF89XytNYXRoLmltdWwoVGUsZG4pfDAscD0ocD1wK01hdGguaW11bChUZSxNdCl8MCkrTWF0aC5pbXVsKEFlLGRuKXwwLEM9QytNYXRoLmltdWwo'@;
put 'QWUsTXQpfDAsXz1fK01hdGguaW11bChudCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LGp0KXwwKStNYXRoLmltdWwoR2UsX3QpfDAsQz1DK01hdGguaW11bChHZSxqdCl8MCxfPV8rTWF0aC5pbXVsKERlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRXQpfDApK01hdGguaW11bChSZSxy'@;
put 'dCl8MCxDPUMrTWF0aC5pbXVsKFJlLEV0KXwwLF89XytNYXRoLmltdWwoYXQsVHQpfDAscD0ocD1wK01hdGguaW11bChhdCxtdCl8MCkrTWF0aC5pbXVsKEZlLFR0KXwwLEM9QytNYXRoLmltdWwoRmUsbXQpfDAsXz1fK01hdGguaW11bChLZSxrbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJ0'@;
put 'KXwwKStNYXRoLmltdWwoVWUsa24pfDAsQz1DK01hdGguaW11bChVZSxCdCl8MCxfPV8rTWF0aC5pbXVsKEVlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsZW4pfDApK01hdGguaW11bChMZSxDbil8MCxDPUMrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciB5cj0oeCsoXz1fK01hdGguaW11bCh4'@;
put 'ZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoT2Usd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoT2UsJHQpfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxPbikscD0ocD1N'@;
put 'YXRoLmltdWwoRnQscHQpKStNYXRoLmltdWwoUnQsT24pfDAsQz1NYXRoLmltdWwoUnQscHQpLF89XytNYXRoLmltdWwob3QsZG4pfDAscD0ocD1wK01hdGguaW11bChvdCxNdCl8MCkrTWF0aC5pbXVsKGx0LGRuKXwwLEM9QytNYXRoLmltdWwobHQsTXQpfDAsXz1fK01hdGguaW11bChUZSxf'@;
put 'dCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGp0KXwwKStNYXRoLmltdWwoQWUsX3QpfDAsQz1DK01hdGguaW11bChBZSxqdCl8MCxfPV8rTWF0aC5pbXVsKG50LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsRXQpfDApK01hdGguaW11bChHZSxydCl8MCxDPUMrTWF0aC5pbXVsKEdlLEV0KXww'@;
put 'LF89XytNYXRoLmltdWwoRGUsVHQpfDAscD0ocD1wK01hdGguaW11bChEZSxtdCl8MCkrTWF0aC5pbXVsKFJlLFR0KXwwLEM9QytNYXRoLmltdWwoUmUsbXQpfDAsXz1fK01hdGguaW11bChhdCxrbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LEJ0KXwwKStNYXRoLmltdWwoRmUsa24pfDAsQz1D'@;
put 'K01hdGguaW11bChGZSxCdCl8MCxfPV8rTWF0aC5pbXVsKEtlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsZW4pfDApK01hdGguaW11bChVZSxDbil8MCxDPUMrTWF0aC5pbXVsKFVlLGVuKXwwO3ZhciBJaT0oeCsoXz1fK01hdGguaW11bChFZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKEVlLCR0KXwwKStNYXRoLmltdWwoTGUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhJaT4+PjI2KXwwLElpJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxkbikscD0ocD1NYXRoLmltdWwoRnQsTXQpKStNYXRoLmltdWwo'@;
put 'UnQsZG4pfDAsQz1NYXRoLmltdWwoUnQsTXQpLF89XytNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01hdGguaW11bChvdCxqdCl8MCkrTWF0aC5pbXVsKGx0LF90KXwwLEM9QytNYXRoLmltdWwobHQsanQpfDAsXz1fK01hdGguaW11bChUZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEV0'@;
put 'KXwwKStNYXRoLmltdWwoQWUscnQpfDAsQz1DK01hdGguaW11bChBZSxFdCl8MCxfPV8rTWF0aC5pbXVsKG50LFR0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsbXQpfDApK01hdGguaW11bChHZSxUdCl8MCxDPUMrTWF0aC5pbXVsKEdlLG10KXwwLF89XytNYXRoLmltdWwoRGUsa24pfDAscD0o'@;
put 'cD1wK01hdGguaW11bChEZSxCdCl8MCkrTWF0aC5pbXVsKFJlLGtuKXwwLEM9QytNYXRoLmltdWwoUmUsQnQpfDAsXz1fK01hdGguaW11bChhdCxDbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LGVuKXwwKStNYXRoLmltdWwoRmUsQ24pfDAsQz1DK01hdGguaW11bChGZSxlbil8MDt2YXIgbm89'@;
put 'KHgrKF89XytNYXRoLmltdWwoS2Usd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwkdCl8MCkrTWF0aC5pbXVsKFVlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsXz1NYXRo'@;
put 'LmltdWwoRnQsX3QpLHA9KHA9TWF0aC5pbXVsKEZ0LGp0KSkrTWF0aC5pbXVsKFJ0LF90KXwwLEM9TWF0aC5pbXVsKFJ0LGp0KSxfPV8rTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsRXQpfDApK01hdGguaW11bChsdCxydCl8MCxDPUMrTWF0aC5pbXVsKGx0LEV0KXww'@;
put 'LF89XytNYXRoLmltdWwoVGUsVHQpfDAscD0ocD1wK01hdGguaW11bChUZSxtdCl8MCkrTWF0aC5pbXVsKEFlLFR0KXwwLEM9QytNYXRoLmltdWwoQWUsbXQpfDAsXz1fK01hdGguaW11bChudCxrbil8MCxwPShwPXArTWF0aC5pbXVsKG50LEJ0KXwwKStNYXRoLmltdWwoR2Usa24pfDAsQz1D'@;
put 'K01hdGguaW11bChHZSxCdCl8MCxfPV8rTWF0aC5pbXVsKERlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsZW4pfDApK01hdGguaW11bChSZSxDbil8MCxDPUMrTWF0aC5pbXVsKFJlLGVuKXwwO3ZhciB6bj0oeCsoXz1fK01hdGguaW11bChhdCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXAr'@;
put 'TWF0aC5pbXVsKGF0LCR0KXwwKStNYXRoLmltdWwoRmUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoRmUsJHQpfDApKyhwPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxydCkscD0ocD1NYXRoLmltdWwoRnQsRXQpKStNYXRoLmltdWwo'@;
put 'UnQscnQpfDAsQz1NYXRoLmltdWwoUnQsRXQpLF89XytNYXRoLmltdWwob3QsVHQpfDAscD0ocD1wK01hdGguaW11bChvdCxtdCl8MCkrTWF0aC5pbXVsKGx0LFR0KXwwLEM9QytNYXRoLmltdWwobHQsbXQpfDAsXz1fK01hdGguaW11bChUZSxrbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJ0'@;
put 'KXwwKStNYXRoLmltdWwoQWUsa24pfDAsQz1DK01hdGguaW11bChBZSxCdCl8MCxfPV8rTWF0aC5pbXVsKG50LENuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChHZSxDbil8MCxDPUMrTWF0aC5pbXVsKEdlLGVuKXwwO3ZhciBaaT0oeCsoXz1fK01hdGguaW11bChE'@;
put 'ZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLCR0KXwwKStNYXRoLmltdWwoUmUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoUmUsJHQpfDApKyhwPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxUdCkscD0ocD1N'@;
put 'YXRoLmltdWwoRnQsbXQpKStNYXRoLmltdWwoUnQsVHQpfDAsQz1NYXRoLmltdWwoUnQsbXQpLF89XytNYXRoLmltdWwob3Qsa24pfDAscD0ocD1wK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LGtuKXwwLEM9QytNYXRoLmltdWwobHQsQnQpfDAsXz1fK01hdGguaW11bChUZSxD'@;
put 'bil8MCxwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmltdWwoQWUsQ24pfDAsQz1DK01hdGguaW11bChBZSxlbil8MDt2YXIgV2k9KHgrKF89XytNYXRoLmltdWwobnQsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChudCwkdCl8MCkrTWF0aC5pbXVsKEdlLHduKXww'@;
put 'KSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKEdlLCR0KXwwKSsocD4+PjEzKXwwKSsoV2k+Pj4yNil8MCxXaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsa24pLHA9KHA9TWF0aC5pbXVsKEZ0LEJ0KSkrTWF0aC5pbXVsKFJ0LGtuKXwwLEM9TWF0aC5pbXVsKFJ0LEJ0KSxfPV8rTWF0aC5p'@;
put 'bXVsKG90LENuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bChsdCxDbil8MCxDPUMrTWF0aC5pbXVsKGx0LGVuKXwwO3ZhciBvbz0oeCsoXz1fK01hdGguaW11bChUZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLCR0KXwwKStNYXRoLmltdWwo'@;
put 'QWUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoQWUsJHQpfDApKyhwPj4+MTMpfDApKyhvbz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxDbikscD0ocD1NYXRoLmltdWwoRnQsZW4pKStNYXRoLmltdWwoUnQsQ24pfDAsQz1NYXRoLmltdWwoUnQsZW4pO3Zh'@;
put 'ciBobz0oeCsoXz1fK01hdGguaW11bChvdCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG90LCR0KXwwKStNYXRoLmltdWwobHQsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwobHQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2'@;
put 'YXIgTHI9KHgrKF89TWF0aC5pbXVsKEZ0LHduKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChGdCwkdCkpK01hdGguaW11bChSdCx3bil8MCkpPDwxMyl8MDtyZXR1cm4geD0oKEM9TWF0aC5pbXVsKFJ0LCR0KSkrKHA+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLFNbMF09'@;
put 'V24sU1sxXT1jaSxTWzJdPWxuLFNbM109bm4sU1s0XT11aSxTWzVdPUFyLFNbNl09bXIsU1s3XT15aSxTWzhdPSRyLFNbOV09SmksU1sxMF09eXIsU1sxMV09SWksU1sxMl09bm8sU1sxM109em4sU1sxNF09WmksU1sxNV09V2ksU1sxNl09b28sU1sxN109aG8sU1sxOF09THIsMCE9PXgmJihT'@;
put 'WzE5XT14LEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFcoRyx5LEwpe3JldHVybihuZXcgeikubXVscChHLHksTCl9ZnVuY3Rpb24geihHLHkpe3RoaXMueD1HLHRoaXMueT15fU1hdGguaW11bHx8KFY9Tiksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oeSxMKXt2YXIgSCxqPXRoaXMubGVu'@;
put 'Z3RoK3kubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09eS5sZW5ndGg/Vih0aGlzLHksTCk6ajw2Mz9OKHRoaXMseSxMKTpqPDEwMjQ/ZnVuY3Rpb24gWihHLHksTCl7TC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkcubmVnYXRpdmUsTC5sZW5ndGg9Ry5sZW5ndGgreS5sZW5n'@;
put 'dGg7Zm9yKHZhciBIPTAsaj0wLGc9MDtnPEwubGVuZ3RoLTE7ZysrKXt2YXIgUz1qO2o9MDtmb3IodmFyIHg9NjcxMDg4NjMmSCxfPU1hdGgubWluKGcseS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9XztwKyspe3ZhciB1ZT0oMHxHLndvcmRzW2ctcF0pKigwfHku'@;
put 'd29yZHNbcF0pLGhlPTY3MTA4ODYzJnVlO3g9NjcxMDg4NjMmKGhlPWhlK3h8MCksais9KFM9KFM9UysodWUvNjcxMDg4NjR8MCl8MCkrKGhlPj4+MjYpfDApPj4+MjYsUyY9NjcxMDg4NjN9TC53b3Jkc1tnXT14LEg9UyxTPWp9cmV0dXJuIDAhPT1IP0wud29yZHNbZ109SDpMLmxlbmd0aC0t'@;
put 'LEwuc3RyaXAoKX0odGhpcyx5LEwpOlcodGhpcyx5LEwpLEh9LHoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24oeSl7Zm9yKHZhciBMPW5ldyBBcnJheSh5KSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoeSktMSxqPTA7ajx5O2orKylMW2pdPXRoaXMucmV2QmluKGosSCx5KTtyZXR1cm4g'@;
put 'TH0sei5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHksTCxIKXtpZigwPT09eXx8eT09PUgtMSlyZXR1cm4geTtmb3IodmFyIGo9MCxnPTA7ZzxMO2crKylqfD0oMSZ5KTw8TC1nLTEseT4+PTE7cmV0dXJuIGp9LHoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oeSxMLEgsaixnLFMpe2Zv'@;
put 'cih2YXIgeD0wO3g8Uzt4Kyspalt4XT1MW3lbeF1dLGdbeF09SFt5W3hdXX0sei5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHksTCxILGosZyxTKXt0aGlzLnBlcm11dGUoUyx5LEwsSCxqLGcpO2Zvcih2YXIgeD0xO3g8Zzt4PDw9MSlmb3IodmFyIF89eDw8MSxwPU1hdGguY29zKDIq'@;
put 'TWF0aC5QSS9fKSxDPU1hdGguc2luKDIqTWF0aC5QSS9fKSxLPTA7SzxnO0srPV8pZm9yKHZhciBuZT1wLHVlPUMsaGU9MDtoZTx4O2hlKyspe3ZhciB4ZT1IW0sraGVdLE9lPWpbSytoZV0sSGU9SFtLK2hlK3hdLEVlPWpbSytoZSt4XSxMZT1uZSpIZS11ZSpFZTtFZT1uZSpFZSt1ZSpIZSxI'@;
put 'W0sraGVdPXhlKyhIZT1MZSksaltLK2hlXT1PZStFZSxIW0sraGUreF09eGUtSGUsaltLK2hlK3hdPU9lLUVlLGhlIT09XyYmKExlPXAqbmUtQyp1ZSx1ZT1wKnVlK0MqbmUsbmU9TGUpfX0sei5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oeSxMKXt2YXIgSD0xfE1hdGgubWF4KEws'@;
put 'eSksaj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK2p9LHoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih5LEwsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBnPXlbal07eVtqXT15W0gtai0xXSx5W0gtai0xXT1nLGc9'@;
put 'TFtqXSxMW2pdPS1MW0gtai0xXSxMW0gtai0xXT0tZ319LHoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih5LEwpe2Zvcih2YXIgSD0wLGo9MDtqPEwvMjtqKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZCh5WzIqaisxXS9MKStNYXRoLnJvdW5kKHlbMipqXS9MKStIO3lbal09Njcx'@;
put 'MDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIHl9LHoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oeSxMLEgsail7Zm9yKHZhciBnPTAsUz0wO1M8TDtTKyspSFsyKlNdPTgxOTEmKGcrPTB8eVtTXSksSFsyKlMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0x'@;
put 'Mztmb3IoUz0yKkw7UzxqOysrUylIW1NdPTA7bSgwPT09ZyksbSghKC04MTkyJmcpKX0sei5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih5KXtmb3IodmFyIEw9bmV3IEFycmF5KHkpLEg9MDtIPHk7SCsrKUxbSF09MDtyZXR1cm4gTH0sei5wcm90b3R5cGUubXVscD1mdW5jdGlvbih5LEwsSCl7'@;
put 'dmFyIGo9Mip0aGlzLmd1ZXNzTGVuMTNiKHkubGVuZ3RoLEwubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChqKSxTPXRoaXMuc3R1YihqKSx4PW5ldyBBcnJheShqKSxfPW5ldyBBcnJheShqKSxwPW5ldyBBcnJheShqKSxDPW5ldyBBcnJheShqKSxLPW5ldyBBcnJheShqKSxuZT1uZXcgQXJyYXko'@;
put 'aiksdWU9SC53b3Jkczt1ZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCx4LGopLHRoaXMuY29udmVydDEzYihMLndvcmRzLEwubGVuZ3RoLEMsaiksdGhpcy50cmFuc2Zvcm0oeCxTLF8scCxqLGcpLHRoaXMudHJhbnNmb3JtKEMsUyxLLG5lLGosZyk7Zm9yKHZh'@;
put 'ciBoZT0wO2hlPGo7aGUrKyl7dmFyIHhlPV9baGVdKktbaGVdLXBbaGVdKm5lW2hlXTtwW2hlXT1fW2hlXSpuZVtoZV0rcFtoZV0qS1toZV0sX1toZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKF8scCxqKSx0aGlzLnRyYW5zZm9ybShfLHAsdWUsUyxqLGcpLHRoaXMuY29uanVnYXRlKHVl'@;
put 'LFMsaiksdGhpcy5ub3JtYWxpemUxM2IodWUsaiksSC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkwubmVnYXRpdmUsSC5sZW5ndGg9eS5sZW5ndGgrTC5sZW5ndGgsSC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7cmV0dXJuIEwud29yZHM9bmV3'@;
put 'IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSx0aGlzLm11bFRvKHksTCl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7cmV0dXJuIEwud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSxXKHRoaXMseSxMKX0sdy5wcm90b3R5cGUu'@;
put 'aW11bD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHksdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5KSxtKHk8NjcxMDg4NjQpO2Zvcih2YXIgTD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9KDB8dGhp'@;
put 'cy53b3Jkc1tIXSkqeSxnPSg2NzEwODg2MyZqKSsoNjcxMDg4NjMmTCk7TD4+PTI2LEwrPWovNjcxMDg4NjR8MCxMKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09TCYmKHRoaXMud29yZHNbSF09TCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5t'@;
put 'dWxuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oeSl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5'@;
put 'cGUucG93PWZ1bmN0aW9uKHkpe3ZhciBMPWZ1bmN0aW9uIEIoRyl7Zm9yKHZhciB5PW5ldyBBcnJheShHLmJpdExlbmd0aCgpKSxMPTA7TDx5Lmxlbmd0aDtMKyspe3ZhciBqPUwlMjY7eVtMXT0oRy53b3Jkc1tMLzI2fDBdJjE8PGopPj4+an1yZXR1cm4geX0oeSk7aWYoMD09PUwubGVuZ3Ro'@;
put 'KXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxMLmxlbmd0aCYmMD09PUxbal07aisrLEg9SC5zcXIoKSk7aWYoKytqPEwubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO2o8TC5sZW5ndGg7aisrLGc9Zy5zcXIoKSkwIT09TFtqXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSx3'@;
put 'LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBnLEw9eSUyNixIPSh5LUwpLzI2LGo9NjcxMDg4NjM+Pj4yNi1MPDwyNi1MO2lmKDAhPT1MKXt2YXIgUz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXMud29y'@;
put 'ZHNbZ10majt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLXg8PEx8UyxTPXg+Pj4yNi1MfVMmJih0aGlzLndvcmRzW2ddPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9y'@;
put 'KGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oeSl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlv'@;
put 'bih5LEwsSCl7dmFyIGo7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApLGo9TD8oTC1MJTI2KS8yNjowO3ZhciBnPXklMjYsUz1NYXRoLm1pbigoeS1nKS8yNix0aGlzLmxlbmd0aCkseD02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsXz1IO2lmKGotPVMsaj1NYXRoLm1heCgwLGopLF8pe2Zv'@;
put 'cih2YXIgcD0wO3A8UztwKyspXy53b3Jkc1twXT10aGlzLndvcmRzW3BdO18ubGVuZ3RoPVN9aWYoMCE9PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK1NdO2Vsc2UgdGhpcy53b3Jk'@;
put 'c1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEM9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09Q3x8cD49aik7cC0tKXt2YXIgSz0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT1DPDwyNi1nfEs+Pj5nLEM9SyZ4fXJldHVybiBfJiYwIT09QyYmKF8ud29yZHNbXy5sZW5ndGgr'@;
put 'K109QyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih5LEwsSCl9LHcucHJvdG90eXBlLnNo'@;
put 'bG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih5KX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oeSl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih5KX0s'@;
put 'dy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oeSl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8'@;
put 'ISh0aGlzLndvcmRzW0hdJjE8PEwpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUg'@;
put 'bnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1MJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PUwmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pkw8PEwpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBl'@;
put 'Lm1hc2tuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHkpfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwP3RoaXMuaXN1Ym4oLXkpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10'@;
put 'aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8eT8odGhpcy53b3Jkc1swXT15LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHkpfSx3LnByb3Rv'@;
put 'dHlwZS5faWFkZG49ZnVuY3Rpb24oeSl7dGhpcy53b3Jkc1swXSs9eTtmb3IodmFyIEw9MDtMPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW0xdPj02NzEwODg2NDtMKyspdGhpcy53b3Jkc1tMXS09NjcxMDg4NjQsTD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tMKzFdPTE6dGhpcy53b3Jk'@;
put 'c1tMKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEwrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oeSl7aWYobSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwKXJldHVybiB0aGlzLmlhZGRuKC15KTtpZigwIT09dGhp'@;
put 'cy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09eSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9'@;
put 'MTtlbHNlIGZvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbTF08MDtMKyspdGhpcy53b3Jkc1tMXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tMKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUo'@;
put 'KS5pYWRkbih5KX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHkpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhp'@;
put 'cy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHksTCxIKXt2YXIgZzt0aGlzLl9leHBhbmQoeS5sZW5ndGgrSCk7dmFyIFMseD0wO2ZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe1M9KDB8dGhpcy53b3Jkc1tnK0hdKSt4O3ZhciBfPSgwfHkud29yZHNb'@;
put 'Z10pKkw7eD0oKFMtPTY3MTA4ODYzJl8pPj4yNiktKF8vNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJlN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKXg9KFM9KDB8dGhpcy53b3Jkc1tnK0hdKSt4KT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJlM7aWYoMD09PXgp'@;
put 'cmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PXgpLHg9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKyspeD0oUz0tKDB8dGhpcy53b3Jkc1tnXSkreCk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmUztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUu'@;
put 'X3dvcmREaXY9ZnVuY3Rpb24oeSxMKXt2YXIgSCxqPXRoaXMuY2xvbmUoKSxnPXksUz0wfGcud29yZHNbZy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKFMpKSYmKGc9Zy51c2hsbihIKSxqLml1c2hsbihIKSxTPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsXz1qLmxl'@;
put 'bmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUwpeyhwPW5ldyB3KG51bGwpKS5sZW5ndGg9XysxLHAud29yZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHAubGVuZ3RoO0MrKylwLndvcmRzW0NdPTB9dmFyIEs9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsXyk7MD09PUsu'@;
put 'bmVnYXRpdmUmJihqPUsscCYmKHAud29yZHNbX109MSkpO2Zvcih2YXIgbmU9Xy0xO25lPj0wO25lLS0pe3ZhciB1ZT02NzEwODg2NCooMHxqLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8ai53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKHVlPU1hdGgubWluKHVlL1N8MCw2NzEwODg2Myksai5f'@;
put 'aXNobG5zdWJtdWwoZyx1ZSxuZSk7MCE9PWoubmVnYXRpdmU7KXVlLS0sai5uZWdhdGl2ZT0wLGouX2lzaGxuc3VibXVsKGcsMSxuZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT11ZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxqLnN0cmlwKCksImRpdiIhPT1M'@;
put 'JiYwIT09SCYmai5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHksTCxIKXtyZXR1cm4gbSgheS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT15'@;
put 'Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHksTCksIm1vZCIhPT1MJiYoaj1TLmRpdi5uZWcoKSksImRpdiIhPT1MJiYoZz1TLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKHkpKSx7ZGl2OmosbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXkubmVnYXRp'@;
put 'dmU/KFM9dGhpcy5kaXZtb2QoeS5uZWcoKSxMKSwibW9kIiE9PUwmJihqPVMuZGl2Lm5lZygpKSx7ZGl2OmosbW9kOlMubW9kfSk6dGhpcy5uZWdhdGl2ZSZ5Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHkubmVnKCksTCksImRpdiIhPT1MJiYoZz1TLm1vZC5uZWcoKSxIJiYwIT09'@;
put 'Zy5uZWdhdGl2ZSYmZy5pc3ViKHkpKSx7ZGl2OlMuZGl2LG1vZDpnfSk6eS5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHkpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXkubGVuZ3RoPyJkaXYiPT09TD97ZGl2OnRoaXMuZGl2bih5LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1v'@;
put 'ZCI9PT1MP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHkud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oeS53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbih5LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoeSxMKTt2YXIgaixnLFN9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlv'@;
put 'bih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZGl2bW9kKHksIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwibW9kIiwhMCku'@;
put 'bW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih5KXt2YXIgTD10aGlzLmRpdm1vZCh5KTtpZihMLm1vZC5pc1plcm8oKSlyZXR1cm4gTC5kaXY7dmFyIEg9MCE9PUwuZGl2Lm5lZ2F0aXZlP0wubW9kLmlzdWIoeSk6TC5tb2Qsaj15LnVzaHJuKDEpLGc9eS5hbmRsbigxKSxTPUgu'@;
put 'Y21wKGopO3JldHVybiBTPDB8fDE9PT1nJiYwPT09Uz9MLmRpdjowIT09TC5kaXYubmVnYXRpdmU/TC5kaXYuaXN1Ym4oMSk6TC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPSgxPDwyNikleSxIPTAsaj10aGlzLmxl'@;
put 'bmd0aC0xO2o+PTA7ai0tKUg9KEwqSCsoMHx0aGlzLndvcmRzW2pdKSkleTtyZXR1cm4gSH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0oMHx0aGlzLndvcmRzW0hdKSs2NzEw'@;
put 'ODg2NCpMO3RoaXMud29yZHNbSF09ai95fDAsTD1qJXl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHkpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUpLG0oIXku'@;
put 'aXNaZXJvKCkpO3ZhciBMPXRoaXMsSD15LmNsb25lKCk7TD0wIT09TC5uZWdhdGl2ZT9MLnVtb2QoeSk6TC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxnPW5ldyB3KDApLFM9bmV3IHcoMCkseD1uZXcgdygxKSxfPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspTC5pdXNocm4oMSksSC5p'@;
put 'dXNocm4oMSksKytfO2Zvcih2YXIgcD1ILmNsb25lKCksQz1MLmNsb25lKCk7IUwuaXNaZXJvKCk7KXtmb3IodmFyIEs9MCxuZT0xOyEoTC53b3Jkc1swXSZuZSkmJks8MjY7KytLLG5lPDw9MSk7aWYoSz4wKWZvcihMLml1c2hybihLKTtLLS0gPjA7KShqLmlzT2RkKCl8fGcuaXNPZGQoKSkm'@;
put 'JihqLmlhZGQocCksZy5pc3ViKEMpKSxqLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIHVlPTAsaGU9MTshKEgud29yZHNbMF0maGUpJiZ1ZTwyNjsrK3VlLGhlPDw9MSk7aWYodWU+MClmb3IoSC5pdXNocm4odWUpO3VlLS0gPjA7KShTLmlzT2RkKCl8fHguaXNPZGQoKSkmJihTLmlh'@;
put 'ZGQocCkseC5pc3ViKEMpKSxTLml1c2hybigxKSx4Lml1c2hybigxKTtMLmNtcChIKT49MD8oTC5pc3ViKEgpLGouaXN1YihTKSxnLmlzdWIoeCkpOihILmlzdWIoTCksUy5pc3ViKGopLHguaXN1YihnKSl9cmV0dXJue2E6UyxiOngsZ2NkOkguaXVzaGxuKF8pfX0sdy5wcm90b3R5cGUuX2lu'@;
put 'dm1wPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUpLG0oIXkuaXNaZXJvKCkpO3ZhciBLLEw9dGhpcyxIPXkuY2xvbmUoKTtMPTAhPT1MLm5lZ2F0aXZlP0wudW1vZCh5KTpMLmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLGc9bmV3IHcoMCksUz1ILmNsb25lKCk7TC5jbXBuKDEpPjAm'@;
put 'JkguY21wbigxKT4wOyl7Zm9yKHZhciB4PTAsXz0xOyEoTC53b3Jkc1swXSZfKSYmeDwyNjsrK3gsXzw8PTEpO2lmKHg+MClmb3IoTC5pdXNocm4oeCk7eC0tID4wOylqLmlzT2RkKCkmJmouaWFkZChTKSxqLml1c2hybigxKTtmb3IodmFyIHA9MCxDPTE7IShILndvcmRzWzBdJkMpJiZwPDI2'@;
put 'OysrcCxDPDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRkKFMpLGcuaXVzaHJuKDEpO0wuY21wKEgpPj0wPyhMLmlzdWIoSCksai5pc3ViKGcpKTooSC5pc3ViKEwpLGcuaXN1YihqKSl9cmV0dXJuKEs9MD09PUwuY21wbigxKT9qOmcpLmNtcG4o'@;
put 'MCk8MCYmSy5pYWRkKHkpLEt9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbih5KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB5LmFicygpO2lmKHkuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEw9dGhpcy5jbG9uZSgpLEg9eS5jbG9uZSgpO0wubmVnYXRpdmU9MCxILm5lZ2F0aXZl'@;
put 'PTA7Zm9yKHZhciBqPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspTC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO0wuaXNFdmVuKCk7KUwuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9TC5jbXAoSCk7aWYoZzwwKXt2YXIgUz1MO0w9'@;
put 'SCxIPVN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztMLmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmVnY2QoeSkuYS51bW9kKHkpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMud29yZHNbMF0meX0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oeSl7bSgi'@;
put 'bnVtYmVyIj09dHlwZW9mIHkpO3ZhciBMPXklMjYsSD0oeS1MKS8yNixqPTE8PEw7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIGc9aixTPUg7MCE9PWcmJlM8dGhpcy5sZW5ndGg7UysrKXt2YXIgeD0wfHRo'@;
put 'aXMud29yZHNbU107Zz0oeCs9Zyk+Pj4yNix0aGlzLndvcmRzW1NdPXgmPTY3MTA4ODYzfXJldHVybiAwIT09ZyYmKHRoaXMud29yZHNbU109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhp'@;
put 'cy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih5KXt2YXIgSCxMPXk8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIUwpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkwpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7TCYmKHk9'@;
put 'LXkpLG0oeTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PXk/MDpqPHk/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oeSl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9'@;
put 'PT15Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eS5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgTD10aGlzLnVjbXAoeSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUw6TH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih5KXtpZih0aGlzLmxlbmd0aD55'@;
put 'Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx5Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEw9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxnPTB8eS53b3Jkc1tIXTtpZihqIT09Zyl7ajxnP0w9LTE6aj5nJiYoTD0xKTticmVha319cmV0'@;
put 'dXJuIEx9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbih5KXtyZXR1cm4gMT09PXRoaXMuY21wbih5KX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIDE9PT10aGlzLmNtcCh5KX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbXBuKHkpPj0wfSx3'@;
put 'LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wKHkpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oeSl7cmV0dXJuLTE9PT10aGlzLmNtcG4oeSl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHkpe3JldHVybi0xPT09dGhpcy5jbXAoeSl9LHcucHJvdG90eXBl'@;
put 'Lmx0ZW49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wbih5KTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNtcCh5KTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHkpe3JldHVybiAwPT09dGhpcy5jbXBuKHkpfSx3LnByb3RvdHlwZS5lcT1mdW5j'@;
put 'dGlvbih5KXtyZXR1cm4gMD09PXRoaXMuY21wKHkpfSx3LnJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGxlKHkpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10'@;
put 'aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHkuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJl'@;
put 'ZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5yZWQ9eSx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkg'@;
put 'YSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMseSl9LHcucHJv'@;
put 'dG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx5KX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMseSl9LHcu'@;
put 'cHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3'@;
put 'b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHkpLHRoaXMucmVkLm11bCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiks'@;
put 'dGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx5KSx0aGlzLnJlZC5pbXVsKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5y'@;
put 'ZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3Fy'@;
put 'dD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwi'@;
put 'cmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy'@;
put 'cyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkJiYheS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRo'@;
put 'aXMseSl9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gUShHLHkpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgdyh5LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3Vi'@;
put 'KHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtRLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gYWUoKXtRLmNhbGwodGhpcywi'@;
put 'cDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtRLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVu'@;
put 'Y3Rpb24gZGUoKXtRLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbGUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgeT13Ll9wcmltZShHKTt0aGlzLm09'@;
put 'eS5wLHRoaXMucHJpbWU9eX1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXtsZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUy'@;
put 'NiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMu'@;
put 'cikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1RLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KE1hdGgu'@;
put 'Y2VpbCh0aGlzLm4vMTMpKSx5fSxRLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHkpe3ZhciBILEw9eTtkb3t0aGlzLnNwbGl0KEwsdGhpcy50bXApLEg9KEw9KEw9dGhpcy5pbXVsSyhMKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRo'@;
put 'aXMubj8tMTpMLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KEwud29yZHNbMF09MCxMLmxlbmd0aD0xKTpqPjA/TC5pc3ViKHRoaXMucCk6dm9pZCAwIT09TC5zdHJpcD9MLnN0cmlwKCk6TC5fc3RyaXAoKSxMfSxRLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih5LEwpe3kuaXVzaHJuKHRo'@;
put 'aXMubiwwLEwpfSxRLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXtyZXR1cm4geS5pbXVsKHRoaXMuayl9LFgodGUsUSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHksTCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbih5Lmxlbmd0aCw5KSxnPTA7ZzxqO2crKylMLndvcmRz'@;
put 'W2ddPXkud29yZHNbZ107aWYoTC5sZW5ndGg9aix5Lmxlbmd0aDw9OSlyZXR1cm4geS53b3Jkc1swXT0wLHZvaWQoeS5sZW5ndGg9MSk7dmFyIFM9eS53b3Jkc1s5XTtmb3IoTC53b3Jkc1tMLmxlbmd0aCsrXT1TJkgsZz0xMDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9MHx5LndvcmRzW2ddO3ku'@;
put 'd29yZHNbZy0xMF09KHgmSCk8PDR8Uz4+PjIyLFM9eH15LndvcmRzW2ctMTBdPVM+Pj49MjIseS5sZW5ndGgtPTA9PT1TJiZ5Lmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7eS53b3Jkc1t5Lmxlbmd0aF09MCx5LndvcmRzW3kubGVuZ3RoKzFdPTAseS5s'@;
put 'ZW5ndGgrPTI7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0wfHkud29yZHNbSF07eS53b3Jkc1tIXT02NzEwODg2MyYoTCs9OTc3KmopLEw9NjQqaisoTC82NzEwODg2NHwwKX1yZXR1cm4gMD09PXkud29yZHNbeS5sZW5ndGgtMV0mJih5Lmxlbmd0aC0tLDA9PT15Lndv'@;
put 'cmRzW3kubGVuZ3RoLTFdJiZ5Lmxlbmd0aC0tKSx5fSxYKGFlLFEpLFgoc2UsUSksWChkZSxRKSxkZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHx5LndvcmRzW0hdKStMLGc9NjcxMDg4NjMmajtqPj4+PTI2'@;
put 'LHkud29yZHNbSF09ZyxMPWp9cmV0dXJuIDAhPT1MJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1MKSx5fSx3Ll9wcmltZT1mdW5jdGlvbih5KXtpZihxW3ldKXJldHVybiBxW3ldO3ZhciBMO2lmKCJrMjU2Ij09PXkpTD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT15KUw9bmV3IGFlO2Vsc2UgaWYo'@;
put 'InAxOTIiPT09eSlMPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09eSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIit5KTtMPW5ldyBkZX1yZXR1cm4gcVt5XT1MLEx9LGxlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih5KXttKDA9PT15Lm5lZ2F0aXZlLCJyZWQgd29ya3Mg'@;
put 'b25seSB3aXRoIHBvc2l0aXZlcyIpLG0oeS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sbGUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHksTCl7bSghKHkubmVnYXRpdmV8TC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbSh5'@;
put 'LnJlZCYmeS5yZWQ9PT1MLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxsZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoeSkuX2ZvcmNlUmVkKHRoaXMpOnkudW1vZCh0aGlzLm0pLl9mb3JjZVJl'@;
put 'ZCh0aGlzKX0sbGUucHJvdG90eXBlLm5lZz1mdW5jdGlvbih5KXtyZXR1cm4geS5pc1plcm8oKT95LmNsb25lKCk6dGhpcy5tLnN1Yih5KS5fZm9yY2VSZWQodGhpcyl9LGxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5hZGQoTCk7cmV0'@;
put 'dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxsZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2YXIgSD15LmlhZGQoTCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9'@;
put 'LGxlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5zdWIoTCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnky'@;
put 'KHksTCk7dmFyIEg9eS5pc3ViKEwpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0sbGUucHJvdG90eXBlLnNobD1mdW5jdGlvbih5LEwpe3JldHVybiB0aGlzLl92ZXJpZnkxKHkpLHRoaXMuaW1vZCh5LnVzaGxuKEwpKX0sbGUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o'@;
put 'eSxMKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih5LEwpLHRoaXMuaW1vZCh5LmltdWwoTCkpfSxsZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoeSxMKSx0aGlzLmltb2QoeS5tdWwoTCkpfSxsZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih5KXtyZXR1'@;
put 'cm4gdGhpcy5pbXVsKHkseS5jbG9uZSgpKX0sbGUucHJvdG90eXBlLnNxcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5tdWwoeSx5KX0sbGUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oeSl7aWYoeS5pc1plcm8oKSlyZXR1cm4geS5jbG9uZSgpO3ZhciBMPXRoaXMubS5hbmRsbigzKTtpZiht'@;
put 'KEwlMj09MSksMz09PUwpe3ZhciBIPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3coeSxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksZz0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspZysrLGouaXVzaHJuKDEpO20oIWouaXNaZXJvKCkpO3Zh'@;
put 'ciBTPW5ldyB3KDEpLnRvUmVkKHRoaXMpLHg9Uy5yZWROZWcoKSxfPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgdygyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsXykuY21wKHgpOylwLnJlZElBZGQoeCk7Zm9yKHZhciBD'@;
put 'PXRoaXMucG93KHAsaiksSz10aGlzLnBvdyh5LGouYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93KHksaiksdWU9ZzswIT09bmUuY21wKFMpOyl7Zm9yKHZhciBoZT1uZSx4ZT0wOzAhPT1oZS5jbXAoUyk7eGUrKyloZT1oZS5yZWRTcXIoKTttKHhlPHVlKTt2YXIgT2U9dGhpcy5wb3co'@;
put 'QyxuZXcgdygxKS5pdXNobG4odWUteGUtMSkpO0s9Sy5yZWRNdWwoT2UpLEM9T2UucmVkU3FyKCksbmU9bmUucmVkTXVsKEMpLHVlPXhlfXJldHVybiBLfSxsZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih5KXt2YXIgTD15Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09TC5uZWdhdGl2ZT8o'@;
put 'TC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChMKS5yZWROZWcoKSk6dGhpcy5pbW9kKEwpfSxsZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHksTCl7aWYoTC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PUwuY21wbigxKSlyZXR1cm4geS5jbG9uZSgpO3ZhciBqPW5l'@;
put 'dyBBcnJheSgxNik7alswXT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPXk7Zm9yKHZhciBnPTI7ZzxqLmxlbmd0aDtnKyspaltnXT10aGlzLm11bChqW2ctMV0seSk7dmFyIFM9alswXSx4PTAsXz0wLHA9TC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUwubGVuZ3RoLTE7'@;
put 'Zz49MDtnLS0pe2Zvcih2YXIgQz1MLndvcmRzW2ddLEs9cC0xO0s+PTA7Sy0tKXt2YXIgbmU9Qz4+SyYxO1MhPT1qWzBdJiYoUz10aGlzLnNxcihTKSksMCE9PW5lfHwwIT09eD8oeDw8PTEseHw9bmUsKDQ9PSsrX3x8MD09PWcmJjA9PT1LKSYmKFM9dGhpcy5tdWwoUyxqW3hdKSxfPTAseD0w'@;
put 'KSk6Xz0wfXA9MjZ9cmV0dXJuIFN9LGxlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oeSl7dmFyIEw9eS51bW9kKHRoaXMubSk7cmV0dXJuIEw9PT15P0wuY2xvbmUoKTpMfSxsZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oeSl7dmFyIEw9eS5jbG9uZSgpO3JldHVybiBM'@;
put 'LnJlZD1udWxsLEx9LHcubW9udD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGNlKHkpfSxYKGNlLGxlKSxjZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlv'@;
put 'bih5KXt2YXIgTD10aGlzLmltb2QoeS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEwucmVkPW51bGwsTH0sY2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oeSxMKXtpZih5LmlzWmVybygpfHxMLmlzWmVybygpKXJldHVybiB5LndvcmRzWzBdPTAseS5sZW5ndGg9MSx5O3ZhciBIPXkuaW11bChM'@;
put 'KSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGc9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxTPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Uz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKFM9Zy5p'@;
put 'YWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHksTCl7aWYoeS5pc1plcm8oKXx8TC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPXkubXVsKEwpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhp'@;
put 'cy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLFM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9TPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoUz1nLmlhZGQodGhpcy5tKSksUy5fZm9yY2VSZWQodGhpcyl9'@;
put 'LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCRlPVIubm1kKCRlKSx0aGlzKX0sNjcyMTE6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDcxOTkzKSxi'@;
put 'PVIoMzQ3MjUpLG09UigzNjYzNiksWD1SKDI1NDQzKSx3PVIoMzI0Nyk7ZnVuY3Rpb24gQShEKXt3LmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1EfWVlKEEsdyksQS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihEKXt0aGlzLl9oYXNoLnVwZGF0ZShEKX0sQS5wcm90b3R5cGUu'@;
put 'X2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LCRlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7cmV0dXJuIm1kNSI9PT0oUD1QLnRvTG93ZXJDYXNlKCkpP25ldyBiOiJybWQxNjAiPT09UHx8InJpcGVtZDE2MCI9PT1QP25ldyBtOm5ldyBBKFgoUCkpfX0sODM0MDc6'@;
put 'KCRlLFNlLFIpPT57dmFyIGVlPVIoMzQ3MjUpOyRlLmV4cG9ydHM9ZnVuY3Rpb24oYil7cmV0dXJuKG5ldyBlZSkudXBkYXRlKGIpLmRpZ2VzdCgpfX0sNTY0MzI6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDcxOTkzKSxiPVIoOTA1MDkpLG09UigzMjQ3KSxYPVIoMjcwNTQp'@;
put 'LkJ1ZmZlcix3PVIoODM0MDcpLEE9UigzNjYzNiksRD1SKDI1NDQzKSxQPVguYWxsb2MoMTI4KTtmdW5jdGlvbiBVKEksRSl7bS5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10eXBlb2YgRSYmKEU9WC5mcm9tKEUpKTt2YXIgaz0ic2hhNTEyIj09PUl8fCJzaGEzODQiPT09ST8xMjg6'@;
put 'NjQ7dGhpcy5fYWxnPUksdGhpcy5fa2V5PUUsRS5sZW5ndGg+az9FPSgicm1kMTYwIj09PUk/bmV3IEE6RChJKSkudXBkYXRlKEUpLmRpZ2VzdCgpOkUubGVuZ3RoPGsmJihFPVguY29uY2F0KFtFLFBdLGspKTtmb3IodmFyIE49dGhpcy5faXBhZD1YLmFsbG9jVW5zYWZlKGspLFY9dGhpcy5f'@;
put 'b3BhZD1YLmFsbG9jVW5zYWZlKGspLFo9MDtaPGs7WisrKU5bWl09NTReRVtaXSxWW1pdPTkyXkVbWl07dGhpcy5faGFzaD0icm1kMTYwIj09PUk/bmV3IEE6RChJKSx0aGlzLl9oYXNoLnVwZGF0ZShOKX1lZShVLG0pLFUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oSSl7dGhpcy5faGFz'@;
put 'aC51cGRhdGUoSSl9LFUucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBJPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuKCJybWQxNjAiPT09dGhpcy5fYWxnP25ldyBBOkQodGhpcy5fYWxnKSkudXBkYXRlKHRoaXMuX29wYWQpLnVwZGF0ZShJKS5kaWdlc3QoKX0sJGUuZXhwb3J0'@;
put 'cz1mdW5jdGlvbihFLGspe3JldHVybiJybWQxNjAiPT09KEU9RS50b0xvd2VyQ2FzZSgpKXx8InJpcGVtZDE2MCI9PT1FP25ldyBVKCJybWQxNjAiLGspOiJtZDUiPT09RT9uZXcgYih3LGspOm5ldyBVKEUsayl9fSw5MDUwOTooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7dmFyIGVlPVIoNzE5'@;
put 'OTMpLGI9UigyNzA1NCkuQnVmZmVyLG09UigzMjQ3KSxYPWIuYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIEEoRCxQKXttLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBQJiYoUD1iLmZyb20oUCkpLHRoaXMuX2FsZz1ELHRoaXMuX2tleT1QLFAubGVuZ3RoPnc/UD1EKFAp'@;
put 'OlAubGVuZ3RoPHcmJihQPWIuY29uY2F0KFtQLFhdLHcpKTtmb3IodmFyIFU9dGhpcy5faXBhZD1iLmFsbG9jVW5zYWZlKHcpLEk9dGhpcy5fb3BhZD1iLmFsbG9jVW5zYWZlKHcpLEU9MDtFPHc7RSsrKVVbRV09NTReUFtFXSxJW0VdPTkyXlBbRV07dGhpcy5faGFzaD1bVV19ZWUoQSxtKSxB'@;
put 'LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEQpe3RoaXMuX2hhc2gucHVzaChEKX0sQS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIEQ9dGhpcy5fYWxnKGIuY29uY2F0KHRoaXMuX2hhc2gpKTtyZXR1cm4gdGhpcy5fYWxnKGIuY29uY2F0KFt0aGlzLl9vcGFkLERdKSl9LCRl'@;
put 'LmV4cG9ydHM9QX0sOTE0MjY6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO1NlLnJhbmRvbUJ5dGVzPVNlLnJuZz1TZS5wc2V1ZG9SYW5kb21CeXRlcz1TZS5wcm5nPVIoMzM0MiksU2UuY3JlYXRlSGFzaD1TZS5IYXNoPVIoNjcyMTEpLFNlLmNyZWF0ZUhtYWM9U2UuSG1hYz1SKDU2NDMyKTt2'@;
put 'YXIgZWU9Uig5OTU2MCksYj1PYmplY3Qua2V5cyhlZSksbT1bInNoYTEiLCJzaGEyMjQiLCJzaGEyNTYiLCJzaGEzODQiLCJzaGE1MTIiLCJtZDUiLCJybWQxNjAiXS5jb25jYXQoYik7U2UuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG19O3ZhciBYPVIoOTMzOTcpO1NlLnBia2RmMj1Y'@;
put 'LnBia2RmMixTZS5wYmtkZjJTeW5jPVgucGJrZGYyU3luYzt2YXIgdz1SKDg4ODYyKTtTZS5DaXBoZXI9dy5DaXBoZXIsU2UuY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLFNlLkNpcGhlcml2PXcuQ2lwaGVyaXYsU2UuY3JlYXRlQ2lwaGVyaXY9dy5jcmVhdGVDaXBoZXJpdixTZS5EZWNp'@;
put 'cGhlcj13LkRlY2lwaGVyLFNlLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIsU2UuRGVjaXBoZXJpdj13LkRlY2lwaGVyaXYsU2UuY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYsU2UuZ2V0Q2lwaGVycz13LmdldENpcGhlcnMsU2UubGlzdENpcGhlcnM9dy5saXN0'@;
put 'Q2lwaGVyczt2YXIgQT1SKDQzNzcpO1NlLkRpZmZpZUhlbGxtYW5Hcm91cD1BLkRpZmZpZUhlbGxtYW5Hcm91cCxTZS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9QS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAsU2UuZ2V0RGlmZmllSGVsbG1hbj1BLmdldERpZmZpZUhlbGxtYW4sU2UuY3Jl'@;
put 'YXRlRGlmZmllSGVsbG1hbj1BLmNyZWF0ZURpZmZpZUhlbGxtYW4sU2UuRGlmZmllSGVsbG1hbj1BLkRpZmZpZUhlbGxtYW47dmFyIEQ9Uig3OTE0Myk7U2UuY3JlYXRlU2lnbj1ELmNyZWF0ZVNpZ24sU2UuU2lnbj1ELlNpZ24sU2UuY3JlYXRlVmVyaWZ5PUQuY3JlYXRlVmVyaWZ5LFNlLlZl'@;
put 'cmlmeT1ELlZlcmlmeSxTZS5jcmVhdGVFQ0RIPVIoODczMDMpO3ZhciBQPVIoNTI5NjUpO1NlLnB1YmxpY0VuY3J5cHQ9UC5wdWJsaWNFbmNyeXB0LFNlLnByaXZhdGVFbmNyeXB0PVAucHJpdmF0ZUVuY3J5cHQsU2UucHVibGljRGVjcnlwdD1QLnB1YmxpY0RlY3J5cHQsU2UucHJpdmF0ZURl'@;
put 'Y3J5cHQ9UC5wcml2YXRlRGVjcnlwdDt2YXIgVT1SKDk2ODIpO1NlLnJhbmRvbUZpbGw9VS5yYW5kb21GaWxsLFNlLnJhbmRvbUZpbGxTeW5jPVUucmFuZG9tRmlsbFN5bmMsU2UuY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoWyJzb3JyeSwgY3JlYXRlQ3Jl'@;
put 'ZGVudGlhbHMgaXMgbm90IGltcGxlbWVudGVkIHlldCIsIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzIiwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5Il0uam9pbigiXG4iKSl9LFNlLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9Q'@;
put 'UklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05P'@;
put 'X1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6'@;
put 'Nn19LDE3NjU2OmZ1bmN0aW9uKCRlLFNlLFIpe3ZhciBlZTskZS5leHBvcnRzPShlZT1lZXx8ZnVuY3Rpb24oYixtKXt2YXIgWDtpZih0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93LmNyeXB0byYmKFg9d2luZG93LmNyeXB0byksdHlwZW9mIHNlbGY8InUiJiZzZWxmLmNyeXB0byYmKFg9c2Vs'@;
put 'Zi5jcnlwdG8pLHR5cGVvZiBnbG9iYWxUaGlzPCJ1IiYmZ2xvYmFsVGhpcy5jcnlwdG8mJihYPWdsb2JhbFRoaXMuY3J5cHRvKSwhWCYmdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5tc0NyeXB0byYmKFg9d2luZG93Lm1zQ3J5cHRvKSwhWCYmdHlwZW9mIGdsb2JhbDwidSImJmdsb2JhbC5j'@;
put 'cnlwdG8mJihYPWdsb2JhbC5jcnlwdG8pLCFYKXRyeXtYPVIoOTE0MjYpfWNhdGNoe312YXIgdz1mdW5jdGlvbigpe2lmKFgpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBYLmdldFJhbmRvbVZhbHVlcyl0cnl7cmV0dXJuIFguZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF19'@;
put 'Y2F0Y2h7fWlmKCJmdW5jdGlvbiI9PXR5cGVvZiBYLnJhbmRvbUJ5dGVzKXRyeXtyZXR1cm4gWC5yYW5kb21CeXRlcyg0KS5yZWFkSW50MzJMRSgpfWNhdGNoe319dGhyb3cgbmV3IEVycm9yKCJOYXRpdmUgY3J5cHRvIG1vZHVsZSBjb3VsZCBub3QgYmUgdXNlZCB0byBnZXQgc2VjdXJlIHJh'@;
put 'bmRvbSBudW1iZXIuIil9LEE9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oKXtmdW5jdGlvbiB6KCl7fXJldHVybiBmdW5jdGlvbihxKXt2YXIgUTtyZXR1cm4gei5wcm90b3R5cGU9cSxRPW5ldyB6LHoucHJvdG90eXBlPW51bGwsUX19KCksRD17fSxQPUQubGliPXt9LFU9UC5CYXNlPWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJue2V4dGVuZDpmdW5jdGlvbih6KXt2YXIgcT1BKHRoaXMpO3JldHVybiB6JiZxLm1peEluKHopLCghcS5oYXNPd25Qcm9wZXJ0eSgiaW5pdCIpfHx0aGlzLmluaXQ9PT1xLmluaXQpJiYocS5pbml0PWZ1bmN0aW9uKCl7cS4kc3VwZXIuaW5pdC5hcHBseSh0aGlzLGFyZ3Vt'@;
put 'ZW50cyl9KSxxLmluaXQucHJvdG90eXBlPXEscS4kc3VwZXI9dGhpcyxxfSxjcmVhdGU6ZnVuY3Rpb24oKXt2YXIgej10aGlzLmV4dGVuZCgpO3JldHVybiB6LmluaXQuYXBwbHkoeixhcmd1bWVudHMpLHp9LGluaXQ6ZnVuY3Rpb24oKXt9LG1peEluOmZ1bmN0aW9uKHope2Zvcih2YXIgcSBp'@;
put 'biB6KXouaGFzT3duUHJvcGVydHkocSkmJih0aGlzW3FdPXpbcV0pO3ouaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPXoudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLEk9UC5X'@;
put 'b3JkQXJyYXk9VS5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oeixxKXt6PXRoaXMud29yZHM9enx8W10sdGhpcy5zaWdCeXRlcz1udWxsIT1xP3E6NCp6Lmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oeil7cmV0dXJuKHp8fGspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKHope3Zh'@;
put 'ciBxPXRoaXMud29yZHMsUT16LndvcmRzLHRlPXRoaXMuc2lnQnl0ZXMsYWU9ei5zaWdCeXRlcztpZih0aGlzLmNsYW1wKCksdGUlNClmb3IodmFyIHNlPTA7c2U8YWU7c2UrKylxW3RlK3NlPj4+Ml18PShRW3NlPj4+Ml0+Pj4yNC1zZSU0KjgmMjU1KTw8MjQtKHRlK3NlKSU0Kjg7ZWxzZSBm'@;
put 'b3IodmFyIGxlPTA7bGU8YWU7bGUrPTQpcVt0ZStsZT4+PjJdPVFbbGU+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9YWUsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgej10aGlzLndvcmRzLHE9dGhpcy5zaWdCeXRlczt6W3E+Pj4yXSY9NDI5NDk2NzI5NTw8MzItcSU0Kjgsei5sZW5n'@;
put 'dGg9Yi5jZWlsKHEvNCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIHo9VS5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiB6LndvcmRzPXRoaXMud29yZHMuc2xpY2UoMCksen0scmFuZG9tOmZ1bmN0aW9uKHope2Zvcih2YXIgcT1bXSxRPTA7UTx6O1ErPTQpcS5wdXNoKHcoKSk7cmV0dXJuIG5ldyBJ'@;
put 'LmluaXQocSx6KX19KSxFPUQuZW5jPXt9LGs9RS5IZXg9e3N0cmluZ2lmeTpmdW5jdGlvbih6KXtmb3IodmFyIHE9ei53b3JkcyxRPXouc2lnQnl0ZXMsdGU9W10sYWU9MDthZTxRO2FlKyspe3ZhciBzZT1xW2FlPj4+Ml0+Pj4yNC1hZSU0KjgmMjU1O3RlLnB1c2goKHNlPj4+NCkudG9TdHJp'@;
put 'bmcoMTYpKSx0ZS5wdXNoKCgxNSZzZSkudG9TdHJpbmcoMTYpKX1yZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKHope2Zvcih2YXIgcT16Lmxlbmd0aCxRPVtdLHRlPTA7dGU8cTt0ZSs9MilRW3RlPj4+M118PXBhcnNlSW50KHouc3Vic3RyKHRlLDIpLDE2KTw8MjQtdGUlOCo0'@;
put 'O3JldHVybiBuZXcgSS5pbml0KFEscS8yKX19LEI9RS5MYXRpbjE9e3N0cmluZ2lmeTpmdW5jdGlvbih6KXtmb3IodmFyIHE9ei53b3JkcyxRPXouc2lnQnl0ZXMsdGU9W10sYWU9MDthZTxRO2FlKyspdGUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHFbYWU+Pj4yXT4+PjI0LWFlJTQqOCYy'@;
put 'NTUpKTtyZXR1cm4gdGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKHope2Zvcih2YXIgcT16Lmxlbmd0aCxRPVtdLHRlPTA7dGU8cTt0ZSsrKVFbdGU+Pj4yXXw9KDI1NSZ6LmNoYXJDb2RlQXQodGUpKTw8MjQtdGUlNCo4O3JldHVybiBuZXcgSS5pbml0KFEscSl9fSxOPUUuVXRmOD17c3Ry'@;
put 'aW5naWZ5OmZ1bmN0aW9uKHope3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShCLnN0cmluZ2lmeSh6KSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0aW9uKHope3JldHVybiBCLnBhcnNlKHVuZXNjYXBlKGVu'@;
put 'Y29kZVVSSUNvbXBvbmVudCh6KSkpfX0sVj1QLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09VS5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgSS5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5jdGlvbih6KXsic3RyaW5nIj09dHlwZW9mIHomJih6PU4u'@;
put 'cGFyc2UoeikpLHRoaXMuX2RhdGEuY29uY2F0KHopLHRoaXMuX25EYXRhQnl0ZXMrPXouc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKHope3ZhciBxLFE9dGhpcy5fZGF0YSx0ZT1RLndvcmRzLGFlPVEuc2lnQnl0ZXMsc2U9dGhpcy5ibG9ja1NpemUsbGU9YWUvKDQqc2UpLGNlPShsZT16'@;
put 'P2IuY2VpbChsZSk6Yi5tYXgoKDB8bGUpLXRoaXMuX21pbkJ1ZmZlclNpemUsMCkpKnNlLEc9Yi5taW4oNCpjZSxhZSk7aWYoY2Upe2Zvcih2YXIgeT0wO3k8Y2U7eSs9c2UpdGhpcy5fZG9Qcm9jZXNzQmxvY2sodGUseSk7cT10ZS5zcGxpY2UoMCxjZSksUS5zaWdCeXRlcy09R31yZXR1cm4g'@;
put 'bmV3IEkuaW5pdChxLEcpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciB6PVUuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gei5fZGF0YT10aGlzLl9kYXRhLmNsb25lKCksen0sX21pbkJ1ZmZlclNpemU6MH0pLFc9KFAuSGFzaGVyPVYuZXh0ZW5kKHtjZmc6VS5leHRlbmQoKSxpbml0OmZ1bmN0aW9u'@;
put 'KHope3RoaXMuY2ZnPXRoaXMuY2ZnLmV4dGVuZCh6KSx0aGlzLnJlc2V0KCl9LHJlc2V0OmZ1bmN0aW9uKCl7Vi5yZXNldC5jYWxsKHRoaXMpLHRoaXMuX2RvUmVzZXQoKX0sdXBkYXRlOmZ1bmN0aW9uKHope3JldHVybiB0aGlzLl9hcHBlbmQoeiksdGhpcy5fcHJvY2VzcygpLHRoaXN9LGZp'@;
put 'bmFsaXplOmZ1bmN0aW9uKHope3JldHVybiB6JiZ0aGlzLl9hcHBlbmQoeiksdGhpcy5fZG9GaW5hbGl6ZSgpfSxibG9ja1NpemU6MTYsX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbih6KXtyZXR1cm4gZnVuY3Rpb24ocSxRKXtyZXR1cm4gbmV3IHouaW5pdChRKS5maW5hbGl6ZShxKX19LF9jcmVh'@;
put 'dGVIbWFjSGVscGVyOmZ1bmN0aW9uKHope3JldHVybiBmdW5jdGlvbihxLFEpe3JldHVybiBuZXcgVy5ITUFDLmluaXQoeixRKS5maW5hbGl6ZShxKX19fSksRC5hbGdvPXt9KTtyZXR1cm4gRH0oTWF0aCksZWUpfSw3ODg1NTpmdW5jdGlvbigkZSxTZSxSKXt2YXIgZWU7JGUuZXhwb3J0cz0o'@;
put 'ZWU9UigxNzY1NiksZnVuY3Rpb24oYil7dmFyIG09ZWUsWD1tLmxpYix3PVguV29yZEFycmF5LEE9WC5IYXNoZXIsRD1tLmFsZ28sUD1bXTshZnVuY3Rpb24oKXtmb3IodmFyIE49MDtOPDY0O04rKylQW05dPTQyOTQ5NjcyOTYqYi5hYnMoYi5zaW4oTisxKSl8MH0oKTt2YXIgVT1ELk1ENT1B'@;
put 'LmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB3LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rpb24oTixWKXtmb3IodmFyIFo9MDtaPDE2O1orKyl7dmFyIFc9VitaLHo9TltX'@;
put 'XTtOW1ddPTE2NzExOTM1Jih6PDw4fHo+Pj4yNCl8NDI3ODI1NTM2MCYoejw8MjR8ej4+PjgpfXZhciBxPXRoaXMuX2hhc2gud29yZHMsUT1OW1YrMF0sdGU9TltWKzFdLGFlPU5bVisyXSxzZT1OW1YrM10sZGU9TltWKzRdLGxlPU5bVis1XSxjZT1OW1YrNl0sRz1OW1YrN10seT1OW1YrOF0s'@;
put 'TD1OW1YrOV0sSD1OW1YrMTBdLGo9TltWKzExXSxnPU5bVisxMl0sUz1OW1YrMTNdLHg9TltWKzE0XSxfPU5bVisxNV0scD1xWzBdLEM9cVsxXSxLPXFbMl0sbmU9cVszXTtwPUkocCxDLEssbmUsUSw3LFBbMF0pLG5lPUkobmUscCxDLEssdGUsMTIsUFsxXSksSz1JKEssbmUscCxDLGFlLDE3'@;
put 'LFBbMl0pLEM9SShDLEssbmUscCxzZSwyMixQWzNdKSxwPUkocCxDLEssbmUsZGUsNyxQWzRdKSxuZT1JKG5lLHAsQyxLLGxlLDEyLFBbNV0pLEs9SShLLG5lLHAsQyxjZSwxNyxQWzZdKSxDPUkoQyxLLG5lLHAsRywyMixQWzddKSxwPUkocCxDLEssbmUseSw3LFBbOF0pLG5lPUkobmUscCxD'@;
put 'LEssTCwxMixQWzldKSxLPUkoSyxuZSxwLEMsSCwxNyxQWzEwXSksQz1JKEMsSyxuZSxwLGosMjIsUFsxMV0pLHA9SShwLEMsSyxuZSxnLDcsUFsxMl0pLG5lPUkobmUscCxDLEssUywxMixQWzEzXSksSz1JKEssbmUscCxDLHgsMTcsUFsxNF0pLHA9RShwLEM9SShDLEssbmUscCxfLDIyLFBb'@;
put 'MTVdKSxLLG5lLHRlLDUsUFsxNl0pLG5lPUUobmUscCxDLEssY2UsOSxQWzE3XSksSz1FKEssbmUscCxDLGosMTQsUFsxOF0pLEM9RShDLEssbmUscCxRLDIwLFBbMTldKSxwPUUocCxDLEssbmUsbGUsNSxQWzIwXSksbmU9RShuZSxwLEMsSyxILDksUFsyMV0pLEs9RShLLG5lLHAsQyxfLDE0'@;
put 'LFBbMjJdKSxDPUUoQyxLLG5lLHAsZGUsMjAsUFsyM10pLHA9RShwLEMsSyxuZSxMLDUsUFsyNF0pLG5lPUUobmUscCxDLEsseCw5LFBbMjVdKSxLPUUoSyxuZSxwLEMsc2UsMTQsUFsyNl0pLEM9RShDLEssbmUscCx5LDIwLFBbMjddKSxwPUUocCxDLEssbmUsUyw1LFBbMjhdKSxuZT1FKG5l'@;
put 'LHAsQyxLLGFlLDksUFsyOV0pLEs9RShLLG5lLHAsQyxHLDE0LFBbMzBdKSxwPWsocCxDPUUoQyxLLG5lLHAsZywyMCxQWzMxXSksSyxuZSxsZSw0LFBbMzJdKSxuZT1rKG5lLHAsQyxLLHksMTEsUFszM10pLEs9ayhLLG5lLHAsQyxqLDE2LFBbMzRdKSxDPWsoQyxLLG5lLHAseCwyMyxQWzM1'@;
put 'XSkscD1rKHAsQyxLLG5lLHRlLDQsUFszNl0pLG5lPWsobmUscCxDLEssZGUsMTEsUFszN10pLEs9ayhLLG5lLHAsQyxHLDE2LFBbMzhdKSxDPWsoQyxLLG5lLHAsSCwyMyxQWzM5XSkscD1rKHAsQyxLLG5lLFMsNCxQWzQwXSksbmU9ayhuZSxwLEMsSyxRLDExLFBbNDFdKSxLPWsoSyxuZSxw'@;
put 'LEMsc2UsMTYsUFs0Ml0pLEM9ayhDLEssbmUscCxjZSwyMyxQWzQzXSkscD1rKHAsQyxLLG5lLEwsNCxQWzQ0XSksbmU9ayhuZSxwLEMsSyxnLDExLFBbNDVdKSxLPWsoSyxuZSxwLEMsXywxNixQWzQ2XSkscD1CKHAsQz1rKEMsSyxuZSxwLGFlLDIzLFBbNDddKSxLLG5lLFEsNixQWzQ4XSks'@;
put 'bmU9QihuZSxwLEMsSyxHLDEwLFBbNDldKSxLPUIoSyxuZSxwLEMseCwxNSxQWzUwXSksQz1CKEMsSyxuZSxwLGxlLDIxLFBbNTFdKSxwPUIocCxDLEssbmUsZyw2LFBbNTJdKSxuZT1CKG5lLHAsQyxLLHNlLDEwLFBbNTNdKSxLPUIoSyxuZSxwLEMsSCwxNSxQWzU0XSksQz1CKEMsSyxuZSxw'@;
put 'LHRlLDIxLFBbNTVdKSxwPUIocCxDLEssbmUseSw2LFBbNTZdKSxuZT1CKG5lLHAsQyxLLF8sMTAsUFs1N10pLEs9QihLLG5lLHAsQyxjZSwxNSxQWzU4XSksQz1CKEMsSyxuZSxwLFMsMjEsUFs1OV0pLHA9QihwLEMsSyxuZSxkZSw2LFBbNjBdKSxuZT1CKG5lLHAsQyxLLGosMTAsUFs2MV0p'@;
put 'LEs9QihLLG5lLHAsQyxhZSwxNSxQWzYyXSksQz1CKEMsSyxuZSxwLEwsMjEsUFs2M10pLHFbMF09cVswXStwfDAscVsxXT1xWzFdK0N8MCxxWzJdPXFbMl0rS3wwLHFbM109cVszXStuZXwwfSxfZG9GaW5hbGl6ZTpmdW5jdGlvbigpe3ZhciBOPXRoaXMuX2RhdGEsVj1OLndvcmRzLFo9OCp0'@;
put 'aGlzLl9uRGF0YUJ5dGVzLFc9OCpOLnNpZ0J5dGVzO1ZbVz4+PjVdfD0xMjg8PDI0LVclMzI7dmFyIHo9Yi5mbG9vcihaLzQyOTQ5NjcyOTYpLHE9WjtWWzE1KyhXKzY0Pj4+OTw8NCldPTE2NzExOTM1Jih6PDw4fHo+Pj4yNCl8NDI3ODI1NTM2MCYoejw8MjR8ej4+PjgpLFZbMTQrKFcrNjQ+'@;
put 'Pj45PDw0KV09MTY3MTE5MzUmKHE8PDh8cT4+PjI0KXw0Mjc4MjU1MzYwJihxPDwyNHxxPj4+OCksTi5zaWdCeXRlcz00KihWLmxlbmd0aCsxKSx0aGlzLl9wcm9jZXNzKCk7Zm9yKHZhciBRPXRoaXMuX2hhc2gsdGU9US53b3JkcyxhZT0wO2FlPDQ7YWUrKyl7dmFyIHNlPXRlW2FlXTt0ZVth'@;
put 'ZV09MTY3MTE5MzUmKHNlPDw4fHNlPj4+MjQpfDQyNzgyNTUzNjAmKHNlPDwyNHxzZT4+PjgpfXJldHVybiBRfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBOPUEuY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gTi5faGFzaD10aGlzLl9oYXNoLmNsb25lKCksTn19KTtmdW5jdGlvbiBJKE4sVixaLFcs'@;
put 'eixxLFEpe3ZhciB0ZT1OKyhWJlp8flYmVykreitRO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK1Z9ZnVuY3Rpb24gRShOLFYsWixXLHoscSxRKXt2YXIgdGU9TisoViZXfFomflcpK3orUTtyZXR1cm4odGU8PHF8dGU+Pj4zMi1xKStWfWZ1bmN0aW9uIGsoTixWLFosVyx6LHEsUSl7dmFyIHRl'@;
put 'PU4rKFZeWl5XKSt6K1E7cmV0dXJuKHRlPDxxfHRlPj4+MzItcSkrVn1mdW5jdGlvbiBCKE4sVixaLFcseixxLFEpe3ZhciB0ZT1OKyhaXihWfH5XKSkreitRO3JldHVybih0ZTw8cXx0ZT4+PjMyLXEpK1Z9bS5NRDU9QS5fY3JlYXRlSGVscGVyKFUpLG0uSG1hY01ENT1BLl9jcmVhdGVIbWFj'@;
put 'SGVscGVyKFUpfShNYXRoKSxlZS5NRDUpfSw3MTU0OTooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7U2UudXRpbHM9Uig4NTY3MSksU2UuQ2lwaGVyPVIoMTAyMTkpLFNlLkRFUz1SKDY0MTY2KSxTZS5DQkM9Uig4ODgwMCksU2UuRURFPVIoNjIxMjIpfSw4ODgwMDooJGUsU2UsUik9PnsidXNl'@;
put 'IHN0cmljdCI7dmFyIGVlPVIoMzkyMTApLGI9Uig3MTk5MyksbT17fTtmdW5jdGlvbiBYKEEpe2VlLmVxdWFsKEEubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBEPTA7RDx0aGlzLml2Lmxlbmd0aDtEKyspdGhpcy5pdltEXT1BW0Rd'@;
put 'fVNlLmluc3RhbnRpYXRlPWZ1bmN0aW9uIHcoQSl7ZnVuY3Rpb24gRChFKXtBLmNhbGwodGhpcyxFKSx0aGlzLl9jYmNJbml0KCl9YihELEEpO2Zvcih2YXIgUD1PYmplY3Qua2V5cyhtKSxVPTA7VTxQLmxlbmd0aDtVKyspe3ZhciBJPVBbVV07RC5wcm90b3R5cGVbSV09bVtJXX1yZXR1cm4g'@;
put 'RC5jcmVhdGU9ZnVuY3Rpb24oayl7cmV0dXJuIG5ldyBEKGspfSxEfSxtLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIEQ9bmV3IFgodGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT1EfSxtLl91cGRhdGU9ZnVuY3Rpb24oRCxQLFUsSSl7dmFyIGs9dGhpcy5jb25zdHJ1Y3Rvci5zdXBl'@;
put 'cl8ucHJvdG90eXBlLEI9dGhpcy5fY2JjU3RhdGUuaXY7aWYoImVuY3J5cHQiPT09dGhpcy50eXBlKXtmb3IodmFyIE49MDtOPHRoaXMuYmxvY2tTaXplO04rKylCW05dXj1EW1ArTl07Zm9yKGsuX3VwZGF0ZS5jYWxsKHRoaXMsQiwwLFUsSSksTj0wO048dGhpcy5ibG9ja1NpemU7TisrKUJb'@;
put 'Tl09VVtJK05dfWVsc2V7Zm9yKGsuX3VwZGF0ZS5jYWxsKHRoaXMsRCxQLFUsSSksTj0wO048dGhpcy5ibG9ja1NpemU7TisrKVVbSStOXV49QltOXTtmb3IoTj0wO048dGhpcy5ibG9ja1NpemU7TisrKUJbTl09RFtQK05dfX19LDEwMjE5OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIg'@;
put 'ZWU9UigzOTIxMCk7ZnVuY3Rpb24gYihtKXt0aGlzLm9wdGlvbnM9bSx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGlu'@;
put 'Zz0hMSE9PW0ucGFkZGluZ30kZS5leHBvcnRzPWIsYi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LGIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihYKXtyZXR1cm4gMD09PVgubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KFgpOnRoaXMu'@;
put 'X3VwZGF0ZUVuY3J5cHQoWCl9LGIucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oWCx3KXtmb3IodmFyIEE9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLFgubGVuZ3RoLXcpLEQ9MDtEPEE7RCsrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0RdPVhbdytE'@;
put 'XTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPUEsQX0sYi5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKFgsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLFgsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0sYi5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5'@;
put 'cHQ9ZnVuY3Rpb24oWCl7dmFyIHc9MCxBPTAsUD1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitYLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihYLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5i'@;
put 'dWZmZXIubGVuZ3RoJiYoQSs9dGhpcy5fZmx1c2hCdWZmZXIoUCxBKSkpO2Zvcih2YXIgVT1YLmxlbmd0aC0oWC5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzxVO3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShYLHcsUCxBKSxBKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8WC5sZW5n'@;
put 'dGg7dysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPVhbd107cmV0dXJuIFB9LGIucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKFgpe2Zvcih2YXIgdz0wLEE9MCxEPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrWC5sZW5ndGgpL3RoaXMu'@;
put 'YmxvY2tTaXplKS0xLFA9bmV3IEFycmF5KEQqdGhpcy5ibG9ja1NpemUpO0Q+MDtELS0pdys9dGhpcy5fYnVmZmVyKFgsdyksQSs9dGhpcy5fZmx1c2hCdWZmZXIoUCxBKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKFgsdyksUH0sYi5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oWCl7dmFyIHcs'@;
put 'QTtyZXR1cm4gWCYmKHc9dGhpcy51cGRhdGUoWCkpLEE9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoQSk6QX0sYi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihYLHcpe2lmKDA9PT13KXJldHVybiExO2Zv'@;
put 'cig7dzxYLmxlbmd0aDspWFt3KytdPTA7cmV0dXJuITB9LGIucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgWD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlz'@;
put 'Ll91cGRhdGUodGhpcy5idWZmZXIsMCxYLDApLFh9LGIucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihYKXtyZXR1cm4gWH0sYi5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe2VlLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLCJOb3QgZW5vdWdoIGRhdGEg'@;
put 'dG8gZGVjcnlwdCIpO3ZhciBYPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSk7cmV0dXJuIHRoaXMuX2ZsdXNoQnVmZmVyKFgsMCksdGhpcy5fdW5wYWQoWCl9fSw2NDE2NjooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7dmFyIGVlPVIoMzkyMTApLGI9Uig3MTk5MyksbT1SKDg1NjcxKSxYPVIo'@;
put 'MTAyMTkpO2Z1bmN0aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gQShQKXtYLmNhbGwodGhpcyxQKTt2YXIgVT1uZXcgdzt0aGlzLl9kZXNTdGF0ZT1VLHRoaXMuZGVyaXZlS2V5cyhVLFAua2V5KX1iKEEsWCksJGUuZXhwb3J0cz1BLEEuY3Jl'@;
put 'YXRlPWZ1bmN0aW9uKFUpe3JldHVybiBuZXcgQShVKX07dmFyIEQ9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO0EucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oVSxJKXtVLmtleXM9bmV3IEFycmF5KDMyKSxlZS5lcXVhbChJLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSwi'@;
put 'SW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIEU9bS5yZWFkVUludDMyQkUoSSwwKSxrPW0ucmVhZFVJbnQzMkJFKEksNCk7bS5wYzEoRSxrLFUudG1wLDApLEU9VS50bXBbMF0saz1VLnRtcFsxXTtmb3IodmFyIEI9MDtCPFUua2V5cy5sZW5ndGg7Qis9Mil7dmFyIE49RFtCPj4+MV07RT1tLnIy'@;
put 'OHNobChFLE4pLGs9bS5yMjhzaGwoayxOKSxtLnBjMihFLGssVS5rZXlzLEIpfX0sQS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihVLEksRSxrKXt2YXIgQj10aGlzLl9kZXNTdGF0ZSxOPW0ucmVhZFVJbnQzMkJFKFUsSSksVj1tLnJlYWRVSW50MzJCRShVLEkrNCk7bS5pcChOLFYsQi50'@;
put 'bXAsMCksTj1CLnRtcFswXSxWPUIudG1wWzFdLCJlbmNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KEIsTixWLEIudG1wLDApOnRoaXMuX2RlY3J5cHQoQixOLFYsQi50bXAsMCksVj1CLnRtcFsxXSxtLndyaXRlVUludDMyQkUoRSxOPUIudG1wWzBdLGspLG0ud3JpdGVVSW50MzJC'@;
put 'RShFLFYsays0KX0sQS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihVLEkpe2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiExO2Zvcih2YXIgRT1VLmxlbmd0aC1JLGs9STtrPFUubGVuZ3RoO2srKylVW2tdPUU7cmV0dXJuITB9LEEucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihVKXtpZigh'@;
put 'MT09PXRoaXMucGFkZGluZylyZXR1cm4gVTtmb3IodmFyIEk9VVtVLmxlbmd0aC0xXSxFPVUubGVuZ3RoLUk7RTxVLmxlbmd0aDtFKyspZWUuZXF1YWwoVVtFXSxJKTtyZXR1cm4gVS5zbGljZSgwLFUubGVuZ3RoLUkpfSxBLnByb3RvdHlwZS5fZW5jcnlwdD1mdW5jdGlvbihVLEksRSxrLEIp'@;
put 'e2Zvcih2YXIgTj1JLFY9RSxaPTA7WjxVLmtleXMubGVuZ3RoO1orPTIpe3ZhciBXPVUua2V5c1taXSx6PVUua2V5c1taKzFdO20uZXhwYW5kKFYsVS50bXAsMCk7dmFyIHE9bS5zdWJzdGl0dXRlKFdePVUudG1wWzBdLHpePVUudG1wWzFdKSx0ZT1WO1Y9KE5ebS5wZXJtdXRlKHEpKT4+PjAs'@;
put 'Tj10ZX1tLnJpcChWLE4sayxCKX0sQS5wcm90b3R5cGUuX2RlY3J5cHQ9ZnVuY3Rpb24oVSxJLEUsayxCKXtmb3IodmFyIE49RSxWPUksWj1VLmtleXMubGVuZ3RoLTI7Wj49MDtaLT0yKXt2YXIgVz1VLmtleXNbWl0sej1VLmtleXNbWisxXTttLmV4cGFuZChOLFUudG1wLDApO3ZhciBxPW0u'@;
put 'c3Vic3RpdHV0ZShXXj1VLnRtcFswXSx6Xj1VLnRtcFsxXSksdGU9TjtOPShWXm0ucGVybXV0ZShxKSk+Pj4wLFY9dGV9bS5yaXAoTixWLGssQil9fSw2MjEyMjooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7dmFyIGVlPVIoMzkyMTApLGI9Uig3MTk5MyksbT1SKDEwMjE5KSxYPVIoNjQxNjYp'@;
put 'O2Z1bmN0aW9uIHcoRCxQKXtlZS5lcXVhbChQLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIFU9UC5zbGljZSgwLDgpLEk9UC5zbGljZSg4LDE2KSxFPVAuc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1EP1tYLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIs'@;
put 'a2V5OlV9KSxYLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Okl9KSxYLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5OkV9KV06W1guY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6RX0pLFguY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6SX0pLFguY3JlYXRlKHt0eXBlOiJkZWNyeXB0'@;
put 'IixrZXk6VX0pXX1mdW5jdGlvbiBBKEQpe20uY2FsbCh0aGlzLEQpO3ZhciBQPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1QfWIoQSxtKSwkZS5leHBvcnRzPUEsQS5jcmVhdGU9ZnVuY3Rpb24oUCl7cmV0dXJuIG5ldyBBKFApfSxBLnByb3RvdHlw'@;
put 'ZS5fdXBkYXRlPWZ1bmN0aW9uKFAsVSxJLEUpe3ZhciBrPXRoaXMuX2VkZVN0YXRlO2suY2lwaGVyc1swXS5fdXBkYXRlKFAsVSxJLEUpLGsuY2lwaGVyc1sxXS5fdXBkYXRlKEksRSxJLEUpLGsuY2lwaGVyc1syXS5fdXBkYXRlKEksRSxJLEUpfSxBLnByb3RvdHlwZS5fcGFkPVgucHJvdG90'@;
put 'eXBlLl9wYWQsQS5wcm90b3R5cGUuX3VucGFkPVgucHJvdG90eXBlLl91bnBhZH0sODU2NzE6KCRlLFNlKT0+eyJ1c2Ugc3RyaWN0IjtTZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oWCx3KXtyZXR1cm4oWFswK3ddPDwyNHxYWzErd108PDE2fFhbMit3XTw8OHxYWzMrd10pPj4+MH0sU2Uud3Jp'@;
put 'dGVVSW50MzJCRT1mdW5jdGlvbihYLHcsQSl7WFswK0FdPXc+Pj4yNCxYWzErQV09dz4+PjE2JjI1NSxYWzIrQV09dz4+PjgmMjU1LFhbMytBXT0yNTUmd30sU2UuaXA9ZnVuY3Rpb24oWCx3LEEsRCl7Zm9yKHZhciBQPTAsVT0wLEk9NjtJPj0wO0ktPTIpe2Zvcih2YXIgRT0wO0U8PTI0O0Ur'@;
put 'PTgpUDw8PTEsUHw9dz4+PkUrSSYxO2ZvcihFPTA7RTw9MjQ7RSs9OClQPDw9MSxQfD1YPj4+RStJJjF9Zm9yKEk9NjtJPj0wO0ktPTIpe2ZvcihFPTE7RTw9MjU7RSs9OClVPDw9MSxVfD13Pj4+RStJJjE7Zm9yKEU9MTtFPD0yNTtFKz04KVU8PD0xLFV8PVg+Pj5FK0kmMX1BW0QrMF09UD4+'@;
put 'PjAsQVtEKzFdPVU+Pj4wfSxTZS5yaXA9ZnVuY3Rpb24oWCx3LEEsRCl7Zm9yKHZhciBQPTAsVT0wLEk9MDtJPDQ7SSsrKWZvcih2YXIgRT0yNDtFPj0wO0UtPTgpUDw8PTEsUHw9dz4+PkUrSSYxLFA8PD0xLFB8PVg+Pj5FK0kmMTtmb3IoST00O0k8ODtJKyspZm9yKEU9MjQ7RT49MDtFLT04'@;
put 'KVU8PD0xLFV8PXc+Pj5FK0kmMSxVPDw9MSxVfD1YPj4+RStJJjE7QVtEKzBdPVA+Pj4wLEFbRCsxXT1VPj4+MH0sU2UucGMxPWZ1bmN0aW9uKFgsdyxBLEQpe2Zvcih2YXIgUD0wLFU9MCxJPTc7ST49NTtJLS0pe2Zvcih2YXIgRT0wO0U8PTI0O0UrPTgpUDw8PTEsUHw9dz4+RStJJjE7Zm9y'@;
put 'KEU9MDtFPD0yNDtFKz04KVA8PD0xLFB8PVg+PkUrSSYxfWZvcihFPTA7RTw9MjQ7RSs9OClQPDw9MSxQfD13Pj5FK0kmMTtmb3IoST0xO0k8PTM7SSsrKXtmb3IoRT0wO0U8PTI0O0UrPTgpVTw8PTEsVXw9dz4+RStJJjE7Zm9yKEU9MDtFPD0yNDtFKz04KVU8PD0xLFV8PVg+PkUrSSYxfWZv'@;
put 'cihFPTA7RTw9MjQ7RSs9OClVPDw9MSxVfD1YPj5FK0kmMTtBW0QrMF09UD4+PjAsQVtEKzFdPVU+Pj4wfSxTZS5yMjhzaGw9ZnVuY3Rpb24oWCx3KXtyZXR1cm4gWDw8dyYyNjg0MzU0NTV8WD4+PjI4LXd9O3ZhciBSPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYs'@;
put 'MjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO1NlLnBjMj1mdW5jdGlvbihYLHcsQSxEKXtmb3IodmFyIFA9MCxVPTAsST1SLmxlbmd0aD4+PjEsRT0wO0U8STtFKyspUDw8PTEsUHw9'@;
put 'WD4+PlJbRV0mMTtmb3IoRT1JO0U8Ui5sZW5ndGg7RSsrKVU8PD0xLFV8PXc+Pj5SW0VdJjE7QVtEKzBdPVA+Pj4wLEFbRCsxXT1VPj4+MH0sU2UuZXhwYW5kPWZ1bmN0aW9uKFgsdyxBKXt2YXIgRD0wLFA9MDtEPSgxJlgpPDw1fFg+Pj4yNztmb3IodmFyIFU9MjM7VT49MTU7VS09NClEPDw9'@;
put 'NixEfD1YPj4+VSY2Mztmb3IoVT0xMTtVPj0zO1UtPTQpUHw9WD4+PlUmNjMsUDw8PTY7UHw9KDMxJlgpPDwxfFg+Pj4zMSx3W0ErMF09RD4+PjAsd1tBKzFdPVA+Pj4wfTt2YXIgZWU9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDEx'@;
put 'LDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIsMTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwx'@;
put 'MCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAsMyw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEw'@;
put 'LDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcsMTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwx'@;
put 'MCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwzLDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4'@;
put 'LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEwLDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQs'@;
put 'NCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEzLDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwx'@;
put 'NCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgsMTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwx'@;
put 'MV07U2Uuc3Vic3RpdHV0ZT1mdW5jdGlvbihYLHcpe2Zvcih2YXIgQT0wLEQ9MDtEPDQ7RCsrKUE8PD00LEF8PWVlWzY0KkQrKFg+Pj4xOC02KkQmNjMpXTtmb3IoRD0wO0Q8NDtEKyspQTw8PTQsQXw9ZWVbMjU2KzY0KkQrKHc+Pj4xOC02KkQmNjMpXTtyZXR1cm4gQT4+PjB9O3ZhciBiPVsx'@;
put 'NiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtTZS5wZXJtdXRlPWZ1bmN0aW9uKFgpe2Zvcih2YXIgdz0wLEE9MDtBPGIubGVuZ3RoO0ErKyl3PDw9MSx3fD1YPj4+YltBXSYxO3JldHVy'@;
put 'biB3Pj4+MH0sU2UucGFkU3BsaXQ9ZnVuY3Rpb24oWCx3LEEpe2Zvcih2YXIgRD1YLnRvU3RyaW5nKDIpO0QubGVuZ3RoPHc7KUQ9IjAiK0Q7Zm9yKHZhciBQPVtdLFU9MDtVPHc7VSs9QSlQLnB1c2goRC5zbGljZShVLFUrQSkpO3JldHVybiBQLmpvaW4oIiAiKX19LDQzNzc6KCRlLFNlLFIp'@;
put 'PT57dmFyIGVlPVIoMTI3MjcpLGI9UigyMzI0MSksbT1SKDk0NTkzKSx3PXtiaW5hcnk6ITAsaGV4OiEwLGJhc2U2NDohMH07U2UuRGlmZmllSGVsbG1hbkdyb3VwPVNlLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1TZS5nZXREaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIFgoRCl7dmFyIFA9bmV3'@;
put 'IEJ1ZmZlcihiW0RdLnByaW1lLCJoZXgiKSxVPW5ldyBCdWZmZXIoYltEXS5nZW4sImhleCIpO3JldHVybiBuZXcgbShQLFUpfSxTZS5jcmVhdGVEaWZmaWVIZWxsbWFuPVNlLkRpZmZpZUhlbGxtYW49ZnVuY3Rpb24gQShELFAsVSxJKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFApfHx2b2lk'@;
put 'IDA9PT13W1BdP0EoRCwiYmluYXJ5IixQLFUpOihQPVB8fCJiaW5hcnkiLEk9SXx8ImJpbmFyeSIsVT1VfHxuZXcgQnVmZmVyKFsyXSksQnVmZmVyLmlzQnVmZmVyKFUpfHwoVT1uZXcgQnVmZmVyKFUsSSkpLCJudW1iZXIiPT10eXBlb2YgRD9uZXcgbShlZShELFUpLFUsITApOihCdWZmZXIu'@;
put 'aXNCdWZmZXIoRCl8fChEPW5ldyBCdWZmZXIoRCxQKSksbmV3IG0oRCxVLCEwKSkpfX0sOTQ1OTM6KCRlLFNlLFIpPT57dmFyIGVlPVIoMzgyODApLG09bmV3KFIoNTM0NTkpKSxYPW5ldyBlZSgyNCksdz1uZXcgZWUoMTEpLEE9bmV3IGVlKDEwKSxEPW5ldyBlZSgzKSxQPW5ldyBlZSg3KSxV'@;
put 'PVIoMTI3MjcpLEk9UigzMzQyKTtmdW5jdGlvbiBFKFcseil7cmV0dXJuIHo9enx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihXKXx8KFc9bmV3IEJ1ZmZlcihXLHopKSx0aGlzLl9wdWI9bmV3IGVlKFcpLHRoaXN9ZnVuY3Rpb24gayhXLHope3JldHVybiB6PXp8fCJ1dGY4IixCdWZmZXIuaXNC'@;
put 'dWZmZXIoVyl8fChXPW5ldyBCdWZmZXIoVyx6KSksdGhpcy5fcHJpdj1uZXcgZWUoVyksdGhpc30kZS5leHBvcnRzPVY7dmFyIEI9e307ZnVuY3Rpb24gVihXLHoscSl7dGhpcy5zZXRHZW5lcmF0b3IoeiksdGhpcy5fX3ByaW1lPW5ldyBlZShXKSx0aGlzLl9wcmltZT1lZS5tb250KHRoaXMu'@;
put 'X19wcmltZSksdGhpcy5fcHJpbWVMZW49Vy5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHE/KHRoaXMuc2V0UHVibGljS2V5PUUsdGhpcy5zZXRQcml2YXRlS2V5PWspOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIFoo'@;
put 'Vyx6KXt2YXIgcT1uZXcgQnVmZmVyKFcudG9BcnJheSgpKTtyZXR1cm4gej9xLnRvU3RyaW5nKHopOnF9T2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJ2ZXJpZnlFcnJvciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIm51bWJlciIhPXR5cGVvZiB0aGlz'@;
put 'Ll9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9ZnVuY3Rpb24gTihXLHope3ZhciBxPXoudG9TdHJpbmcoImhleCIpLFE9W3EsVy50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihRIGluIEIpcmV0dXJuIEJbUV07dmFyIGFlLHRlPTA7aWYoVy5pc0V2ZW4oKXx8IVUuc2ltcGxlU2lldmV8'@;
put 'fCFVLmZlcm1hdFRlc3QoVyl8fCFtLnRlc3QoVykpcmV0dXJuIHRlKz0xLEJbUV09dGUrPSIwMiI9PT1xfHwiMDUiPT09cT84OjQsdGU7c3dpdGNoKG0udGVzdChXLnNocm4oMSkpfHwodGUrPTIpLHEpe2Nhc2UiMDIiOlcubW9kKFgpLmNtcCh3KSYmKHRlKz04KTticmVhaztjYXNlIjA1Ijoo'@;
put 'YWU9Vy5tb2QoQSkpLmNtcChEKSYmYWUuY21wKFApJiYodGUrPTgpO2JyZWFrO2RlZmF1bHQ6dGUrPTR9cmV0dXJuIEJbUV09dGUsdGV9KHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLFYucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVy'@;
put 'biB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgZWUoSSh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFYucHJvdG90eXBlLmNvbXB1dGVTZWNy'@;
put 'ZXQ9ZnVuY3Rpb24oVyl7dmFyIHo9KFc9KFc9bmV3IGVlKFcpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscT1uZXcgQnVmZmVyKHoudG9BcnJheSgpKSxRPXRoaXMuZ2V0UHJpbWUoKTtpZihxLmxlbmd0aDxRLmxlbmd0aCl7dmFyIHRlPW5ldyBC'@;
put 'dWZmZXIoUS5sZW5ndGgtcS5sZW5ndGgpO3RlLmZpbGwoMCkscT1CdWZmZXIuY29uY2F0KFt0ZSxxXSl9cmV0dXJuIHF9LFYucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbih6KXtyZXR1cm4gWih0aGlzLl9wdWIseil9LFYucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24o'@;
put 'eil7cmV0dXJuIFoodGhpcy5fcHJpdix6KX0sVi5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oVyl7cmV0dXJuIFoodGhpcy5fX3ByaW1lLFcpfSxWLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oVyl7cmV0dXJuIFoodGhpcy5fZ2VuLFcpfSxWLnByb3RvdHlwZS5zZXRHZW5l'@;
put 'cmF0b3I9ZnVuY3Rpb24oVyx6KXtyZXR1cm4gej16fHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFcpfHwoVz1uZXcgQnVmZmVyKFcseikpLHRoaXMuX19nZW49Vyx0aGlzLl9nZW49bmV3IGVlKFcpLHRoaXN9fSwxMjcyNzooJGUsU2UsUik9Pnt2YXIgZWU9UigzMzQyKTskZS5leHBvcnRzPXRl'@;
put 'LHRlLnNpbXBsZVNpZXZlPXEsdGUuZmVybWF0VGVzdD1RO3ZhciBiPVIoMzgyODApLG09bmV3IGIoMjQpLHc9bmV3KFIoNTM0NTkpKSxBPW5ldyBiKDEpLEQ9bmV3IGIoMiksUD1uZXcgYig1KSxFPShuZXcgYigxNiksbmV3IGIoOCksbmV3IGIoMTApKSxrPW5ldyBiKDMpLE49KG5ldyBiKDcp'@;
put 'LG5ldyBiKDExKSksVj1uZXcgYig0KSxXPShuZXcgYigxMiksbnVsbCk7ZnVuY3Rpb24gcShhZSl7Zm9yKHZhciBzZT1mdW5jdGlvbiB6KCl7aWYobnVsbCE9PVcpcmV0dXJuIFc7dmFyIHNlPVtdO3NlWzBdPTI7Zm9yKHZhciBkZT0xLGxlPTM7bGU8MTA0ODU3NjtsZSs9Mil7Zm9yKHZhciBj'@;
put 'ZT1NYXRoLmNlaWwoTWF0aC5zcXJ0KGxlKSksRz0wO0c8ZGUmJnNlW0ddPD1jZSYmbGUlc2VbR10hPTA7RysrKTtkZSE9PUcmJnNlW0ddPD1jZXx8KHNlW2RlKytdPWxlKX1yZXR1cm4gVz1zZSxzZX0oKSxkZT0wO2RlPHNlLmxlbmd0aDtkZSsrKWlmKDA9PT1hZS5tb2RuKHNlW2RlXSkpcmV0'@;
put 'dXJuIDA9PT1hZS5jbXBuKHNlW2RlXSk7cmV0dXJuITB9ZnVuY3Rpb24gUShhZSl7dmFyIHNlPWIubW9udChhZSk7cmV0dXJuIDA9PT1ELnRvUmVkKHNlKS5yZWRQb3coYWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gdGUoYWUsc2Upe2lmKGFlPDE2KXJldHVybiBuZXcg'@;
put 'YigyPT09c2V8fDU9PT1zZT9bMTQwLDEyM106WzE0MCwzOV0pO3NlPW5ldyBiKHNlKTtmb3IodmFyIGRlLGxlOzspe2ZvcihkZT1uZXcgYihlZShNYXRoLmNlaWwoYWUvOCkpKTtkZS5iaXRMZW5ndGgoKT5hZTspZGUuaXNocm4oMSk7aWYoZGUuaXNFdmVuKCkmJmRlLmlhZGQoQSksZGUudGVz'@;
put 'dG4oMSl8fGRlLmlhZGQoRCksc2UuY21wKEQpKXtpZighc2UuY21wKFApKWZvcig7ZGUubW9kKEUpLmNtcChrKTspZGUuaWFkZChWKX1lbHNlIGZvcig7ZGUubW9kKG0pLmNtcChOKTspZGUuaWFkZChWKTtpZihxKGxlPWRlLnNocm4oMSkpJiZxKGRlKSYmUShsZSkmJlEoZGUpJiZ3LnRlc3Qo'@;
put 'bGUpJiZ3LnRlc3QoZGUpKXJldHVybiBkZX19fSwzODI4MDpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0oRyx5KXtpZighRyl0aHJvdyBuZXcgRXJyb3IoeXx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBYKEcseSl7Ry5zdXBl'@;
put 'cl89eTt2YXIgTD1mdW5jdGlvbigpe307TC5wcm90b3R5cGU9eS5wcm90b3R5cGUsRy5wcm90b3R5cGU9bmV3IEwsRy5wcm90b3R5cGUuY29uc3RydWN0b3I9R31mdW5jdGlvbiB3KEcseSxMKXtpZih3LmlzQk4oRykpcmV0dXJuIEc7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0'@;
put 'aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PUcmJigoImxlIj09PXl8fCJiZSI9PT15KSYmKEw9eSx5PTEwKSx0aGlzLl9pbml0KEd8fDAseXx8MTAsTHx8ImJlIikpfXZhciBBOyJvYmplY3QiPT10eXBlb2YgZWU/ZWUuZXhwb3J0cz13OmIuQk49dyx3LkJOPXcsdy53b3JkU2l6'@;
put 'ZT0yNjt0cnl7QT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Uig2NjA4OSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBEKEcseSl7dmFyIEw9Ry5jaGFyQ29kZUF0KHkpO3JldHVybiBMPj02NSYmTDw9NzA/TC01NTpMPj05NyYmTDw9'@;
put 'MTAyP0wtODc6TC00OCYxNX1mdW5jdGlvbiBQKEcseSxMKXt2YXIgSD1EKEcsTCk7cmV0dXJuIEwtMT49eSYmKEh8PUQoRyxMLTEpPDw0KSxIfWZ1bmN0aW9uIFUoRyx5LEwsSCl7Zm9yKHZhciBqPTAsZz1NYXRoLm1pbihHLmxlbmd0aCxMKSxTPXk7UzxnO1MrKyl7dmFyIHg9Ry5jaGFyQ29k'@;
put 'ZUF0KFMpLTQ4O2oqPUgsais9eD49NDk/eC00OSsxMDp4Pj0xNz94LTE3KzEwOnh9cmV0dXJuIGp9dy5pc0JOPWZ1bmN0aW9uKHkpe3JldHVybiB5IGluc3RhbmNlb2Ygd3x8bnVsbCE9PXkmJiJvYmplY3QiPT10eXBlb2YgeSYmeS5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUm'@;
put 'JkFycmF5LmlzQXJyYXkoeS53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHksTCl7cmV0dXJuIHkuY21wKEwpPjA/eTpMfSx3Lm1pbj1mdW5jdGlvbih5LEwpe3JldHVybiB5LmNtcChMKTwwP3k6TH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oeSxMLEgpe2lmKCJudW1iZXIiPT10eXBlb2Yg'@;
put 'eSlyZXR1cm4gdGhpcy5faW5pdE51bWJlcih5LEwsSCk7aWYoIm9iamVjdCI9PXR5cGVvZiB5KXJldHVybiB0aGlzLl9pbml0QXJyYXkoeSxMLEgpOyJoZXgiPT09TCYmKEw9MTYpLG0oTD09PSgwfEwpJiZMPj0yJiZMPD0zNik7dmFyIGo9MDsiLSI9PT0oeT15LnRvU3RyaW5nKCkucmVwbGFj'@;
put 'ZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEpLGo8eS5sZW5ndGgmJigxNj09PUw/dGhpcy5fcGFyc2VIZXgoeSxqLEgpOih0aGlzLl9wYXJzZUJhc2UoeSxMLGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksTCxIKSkpfSx3LnByb3RvdHlw'@;
put 'ZS5faW5pdE51bWJlcj1mdW5jdGlvbih5LEwsSCl7eTwwJiYodGhpcy5uZWdhdGl2ZT0xLHk9LXkpLHk8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnldLHRoaXMubGVuZ3RoPTEpOnk8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmeSx5LzY3MTA4ODY0JjY3'@;
put 'MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobSh5PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnkseS82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEwsSCl9LHcucHJvdG90eXBl'@;
put 'Ll9pbml0QXJyYXk9ZnVuY3Rpb24oeSxMLEgpe2lmKG0oIm51bWJlciI9PXR5cGVvZiB5Lmxlbmd0aCkseS5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoeS5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJy'@;
put 'YXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgZyxTLHg9MDtpZigiYmUiPT09SClmb3Ioaj15Lmxlbmd0aC0xLGc9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tnXXw9KFM9eVtqXXx5W2otMV08PDh8eVtqLTJdPDwxNik8PHgm'@;
put 'NjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPVM+Pj4yNi14JjY3MTA4ODYzLCh4Kz0yNCk+PTI2JiYoeC09MjYsZysrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsZz0wO2o8eS5sZW5ndGg7ais9Myl0aGlzLndvcmRzW2ddfD0oUz15W2pdfHlbaisxXTw8OHx5W2orMl08PDE2KTw8eCY2NzEw'@;
put 'ODg2Myx0aGlzLndvcmRzW2crMV09Uz4+PjI2LXgmNjcxMDg4NjMsKHgrPTI0KT49MjYmJih4LT0yNixnKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih5LEwsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh5Lmxlbmd0aC1MKS82KSx0aGlz'@;
put 'LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciB4LGc9MCxTPTA7aWYoImJlIj09PUgpZm9yKGo9eS5sZW5ndGgtMTtqPj1MO2otPTIpeD1QKHksTCxqKTw8Zyx0aGlzLndvcmRzW1NdfD02NzEwODg2'@;
put 'MyZ4LGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW1MrPTFdfD14Pj4+MjYpOmcrPTg7ZWxzZSBmb3Ioaj0oeS5sZW5ndGgtTCklMj09MD9MKzE6TDtqPHkubGVuZ3RoO2orPTIpeD1QKHksTCxqKTw8Zyx0aGlzLndvcmRzW1NdfD02NzEwODg2MyZ4LGc+PTE4PyhnLT0xOCx0aGlzLndvcmRzW1Mr'@;
put 'PTFdfD14Pj4+MjYpOmcrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHksTCxIKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgaj0wLGc9MTtnPD02NzEwODg2MztnKj1MKWorKztqLS0sZz1nL0x8MDtmb3IodmFyIFM9eS5sZW5n'@;
put 'dGgtSCx4PVMlaixfPU1hdGgubWluKFMsUy14KStILHA9MCxDPUg7QzxfO0MrPWopcD1VKHksQyxDK2osTCksdGhpcy5pbXVsbihnKSx0aGlzLndvcmRzWzBdK3A8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9cDp0aGlzLl9pYWRkbihwKTtpZigwIT09eCl7dmFyIEs9MTtmb3IocD1VKHksQyx5'@;
put 'Lmxlbmd0aCxMKSxDPTA7Qzx4O0MrKylLKj1MO3RoaXMuaW11bG4oSyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHkpe3kud29yZHM9bmV3IEFycmF5KHRoaXMu'@;
put 'bGVuZ3RoKTtmb3IodmFyIEw9MDtMPHRoaXMubGVuZ3RoO0wrKyl5LndvcmRzW0xdPXRoaXMud29yZHNbTF07eS5sZW5ndGg9dGhpcy5sZW5ndGgseS5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHkucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB5PW5ldyB3'@;
put 'KG51bGwpO3JldHVybiB0aGlzLmNvcHkoeSkseX0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih5KXtmb3IoO3RoaXMubGVuZ3RoPHk7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVu'@;
put 'Z3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRp'@;
put 'dmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgST1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAw'@;
put 'MDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw'@;
put 'MDAwMDAwMDAwMDAwMDAiXSxFPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLGs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3'@;
put 'NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIx'@;
put 'MDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gTihHLHksTCl7TC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkcubmVnYXRpdmU7dmFyIEg9Ry5sZW5ndGgreS5sZW5ndGh8MDtMLmxlbmd0aD1ILEg9'@;
put 'SC0xfDA7dmFyIGo9MHxHLndvcmRzWzBdLGc9MHx5LndvcmRzWzBdLFM9aipnLF89Uy82NzEwODg2NHwwO0wud29yZHNbMF09NjcxMDg4NjMmUztmb3IodmFyIHA9MTtwPEg7cCsrKXtmb3IodmFyIEM9Xz4+PjI2LEs9NjcxMDg4NjMmXyxuZT1NYXRoLm1pbihwLHkubGVuZ3RoLTEpLHVlPU1h'@;
put 'dGgubWF4KDAscC1HLmxlbmd0aCsxKTt1ZTw9bmU7dWUrKylDKz0oUz0oaj0wfEcud29yZHNbcC11ZXwwXSkqKGc9MHx5LndvcmRzW3VlXSkrSykvNjcxMDg4NjR8MCxLPTY3MTA4ODYzJlM7TC53b3Jkc1twXT0wfEssXz0wfEN9cmV0dXJuIDAhPT1fP0wud29yZHNbcF09MHxfOkwubGVuZ3Ro'@;
put 'LS0sTC5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHksTCl7dmFyIEg7aWYoTD0wfEx8fDEsMTY9PT0oeT15fHwxMCl8fCJoZXgiPT09eSl7SD0iIjtmb3IodmFyIGo9MCxnPTAsUz0wO1M8dGhpcy5sZW5ndGg7UysrKXt2YXIgeD10aGlzLndvcmRzW1NdLF89KDE2Nzc3'@;
put 'MjE1Jih4PDxqfGcpKS50b1N0cmluZygxNik7SD0wIT0oZz14Pj4+MjQtaiYxNjc3NzIxNSl8fFMhPT10aGlzLmxlbmd0aC0xP0lbNi1fLmxlbmd0aF0rXytIOl8rSCwoais9Mik+PTI2JiYoai09MjYsUy0tKX1mb3IoMCE9PWcmJihIPWcudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJUwhPTA7'@;
put 'KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZih5PT09KDB8eSkmJnk+PTImJnk8PTM2KXt2YXIgcD1FW3ldLEM9a1t5XTtIPSIiO3ZhciBLPXRoaXMuY2xvbmUoKTtmb3IoSy5uZWdhdGl2ZT0wOyFLLmlzWmVybygpOyl7dmFyIG5lPUsubW9kbihDKS50'@;
put 'b1N0cmluZyh5KTtIPShLPUsuaWRpdm4oQykpLmlzWmVybygpP25lK0g6SVtwLW5lLmxlbmd0aF0rbmUrSH1mb3IodGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJUwhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1tKCExLCJCYXNlIHNo'@;
put 'b3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHk9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3krPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT95'@;
put 'Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbSghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXk6eX0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih5LEwpe3JldHVybiBtKHR5cGVvZiBBPCJ1IiksdGhpcy50b0FycmF5TGlrZShBLHksTCl9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShB'@;
put 'cnJheSx5LEwpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih5LEwsSCl7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksZz1IfHxNYXRoLm1heCgxLGopO20oajw9ZywiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLG0oZz4wLCJSZXF1ZXN0ZWQgYXJyYXkg'@;
put 'bGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIF8scCxTPSJsZSI9PT1MLHg9bmV3IHkoZyksQz10aGlzLmNsb25lKCk7aWYoUyl7Zm9yKHA9MDshQy5pc1plcm8oKTtwKyspXz1DLmFuZGxuKDI1NSksQy5pdXNocm4oOCkseFtwXT1fO2Zvcig7cDxnO3ArKyl4W3BdPTB9ZWxzZXtmb3Io'@;
put 'cD0wO3A8Zy1qO3ArKyl4W3BdPTA7Zm9yKHA9MDshQy5pc1plcm8oKTtwKyspXz1DLmFuZGxuKDI1NSksQy5pdXNocm4oOCkseFtnLXAtMV09X31yZXR1cm4geH0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHkpe3JldHVybiAzMi1NYXRoLmNsejMyKHkpfTpm'@;
put 'dW5jdGlvbih5KXt2YXIgTD15LEg9MDtyZXR1cm4gTD49NDA5NiYmKEgrPTEzLEw+Pj49MTMpLEw+PTY0JiYoSCs9NyxMPj4+PTcpLEw+PTgmJihIKz00LEw+Pj49NCksTD49MiYmKEgrPTIsTD4+Pj0yKSxIK0x9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih5KXtpZigwPT09eSly'@;
put 'ZXR1cm4gMjY7dmFyIEw9eSxIPTA7cmV0dXJuIDgxOTEmTHx8KEgrPTEzLEw+Pj49MTMpLDEyNyZMfHwoSCs9NyxMPj4+PTcpLDE1Jkx8fChIKz00LEw+Pj49NCksMyZMfHwoSCs9MixMPj4+PTIpLDEmTHx8SCsrLEh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBMPXRo'@;
put 'aXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK0x9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHk9MCxMPTA7TDx0aGlzLmxlbmd0aDtMKyspe3Zh'@;
put 'ciBIPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbTF0pO2lmKHkrPUgsMjYhPT1IKWJyZWFrfXJldHVybiB5fSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24o'@;
put 'eSl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4oeSkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy50ZXN0bih5LTEpP3RoaXMubm90bih5KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9u'@;
put 'ZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8'@;
put 'KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24oeSl7Zm9yKDt0aGlzLmxlbmd0aDx5Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgTD0wO0w8eS5sZW5ndGg7TCsrKXRoaXMud29yZHNbTF09dGhpcy53b3Jkc1tMXXx5'@;
put 'LndvcmRzW0xdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbih5KXtyZXR1cm4gbSghKHRoaXMubmVnYXRpdmV8eS5uZWdhdGl2ZSkpLHRoaXMuaXVvcih5KX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3Ro'@;
put 'P3RoaXMuY2xvbmUoKS5pb3IoeSk6eS5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih5KTp5LmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rp'@;
put 'b24oeSl7dmFyIEw7TD10aGlzLmxlbmd0aD55Lmxlbmd0aD95OnRoaXM7Zm9yKHZhciBIPTA7SDxMLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJnkud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPUwubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFu'@;
put 'ZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghKHRoaXMubmVnYXRpdmV8eS5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoeSl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoeSk6eS5jbG9uZSgpLmlhbmQodGhpcyl9'@;
put 'LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh5KTp5LmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHkpe3ZhciBMLEg7dGhpcy5sZW5ndGg+eS5sZW5ndGg/KEw9'@;
put 'dGhpcyxIPXkpOihMPXksSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUwud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09TClmb3IoO2o8TC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09TC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TC5s'@;
put 'ZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHkpe3JldHVybiBtKCEodGhpcy5uZWdhdGl2ZXx5Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih5KX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNs'@;
put 'b25lKCkuaXhvcih5KTp5LmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHkpOnkuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24o'@;
put 'eSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBMPTB8TWF0aC5jZWlsKHkvMjYpLEg9eSUyNjt0aGlzLl9leHBhbmQoTCksSD4wJiZMLS07Zm9yKHZhciBqPTA7ajxMO2orKyl0aGlzLndvcmRzW2pdPTY3MTA4ODYzJn50aGlzLndvcmRzW2pdO3JldHVybiBIPjAmJih0aGlzLndv'@;
put 'cmRzW2pdPX50aGlzLndvcmRzW2pdJjY3MTA4ODYzPj4yNi1IKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih5KX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih5LEwpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5'@;
put 'Pj0wKTt2YXIgSD15LzI2fDAsaj15JTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPUw/dGhpcy53b3Jkc1tIXXwxPDxqOnRoaXMud29yZHNbSF0mfigxPDxqKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oeSl7dmFyIEwsSCxqO2lmKDAh'@;
put 'PT10aGlzLm5lZ2F0aXZlJiYwPT09eS5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLEw9dGhpcy5pc3ViKHkpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXkubmVnYXRpdmUpcmV0dXJuIHkubmVnYXRpdmU9MCxMPXRo'@;
put 'aXMuaXN1Yih5KSx5Lm5lZ2F0aXZlPTEsTC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD55Lmxlbmd0aD8oSD10aGlzLGo9eSk6KEg9eSxqPXRoaXMpO2Zvcih2YXIgZz0wLFM9MDtTPGoubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPTY3MTA4ODYzJihMPSgwfEgud29yZHNbU10pKygwfGoud29y'@;
put 'ZHNbU10pK2cpLGc9TD4+PjI2O2Zvcig7MCE9PWcmJlM8SC5sZW5ndGg7UysrKXRoaXMud29yZHNbU109NjcxMDg4NjMmKEw9KDB8SC53b3Jkc1tTXSkrZyksZz1MPj4+MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PWcpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09Zyx0aGlzLmxlbmd0'@;
put 'aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDtTPEgubGVuZ3RoO1MrKyl0aGlzLndvcmRzW1NdPUgud29yZHNbU107cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbih5KXt2YXIgTDtyZXR1cm4gMCE9PXkubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh5Lm5lZ2F0aXZl'@;
put 'PTAsTD10aGlzLnN1Yih5KSx5Lm5lZ2F0aXZlXj0xLEwpOjA9PT15Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLEw9eS5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLEwpOnRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHkpOnkuY2xv'@;
put 'bmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHkpe2lmKDAhPT15Lm5lZ2F0aXZlKXt5Lm5lZ2F0aXZlPTA7dmFyIEw9dGhpcy5pYWRkKHkpO3JldHVybiB5Lm5lZ2F0aXZlPTEsTC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5u'@;
put 'ZWdhdGl2ZT0wLHRoaXMuaWFkZCh5KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixnLEg9dGhpcy5jbXAoeSk7aWYoMD09PUgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLGc9eSk6KGo9'@;
put 'eSxnPXRoaXMpO2Zvcih2YXIgUz0wLHg9MDt4PGcubGVuZ3RoO3grKylTPShMPSgwfGoud29yZHNbeF0pLSgwfGcud29yZHNbeF0pK1MpPj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJkw7Zm9yKDswIT09UyYmeDxqLmxlbmd0aDt4KyspUz0oTD0oMHxqLndvcmRzW3hdKStTKT4+MjYsdGhp'@;
put 'cy53b3Jkc1t4XT02NzEwODg2MyZMO2lmKDA9PT1TJiZ4PGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO3g8ai5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09ai53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgseCksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZl'@;
put 'PTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih5KX07dmFyIFY9ZnVuY3Rpb24oeSxMLEgpe3ZhciBfLHAsQyxqPXkud29yZHMsZz1MLndvcmRzLFM9SC53b3Jkcyx4PTAsSz0wfGpbMF0sbmU9ODE5MSZLLHVlPUs+'@;
put 'Pj4xMyxoZT0wfGpbMV0seGU9ODE5MSZoZSxPZT1oZT4+PjEzLEhlPTB8alsyXSxFZT04MTkxJkhlLExlPUhlPj4+MTMsTmU9MHxqWzNdLEtlPTgxOTEmTmUsVWU9TmU+Pj4xMyxYZT0wfGpbNF0sYXQ9ODE5MSZYZSxGZT1YZT4+PjEzLENlPTB8als1XSxEZT04MTkxJkNlLFJlPUNlPj4+MTMs'@;
put 'ZXQ9MHxqWzZdLG50PTgxOTEmZXQsR2U9ZXQ+Pj4xMyxkdD0wfGpbN10sVGU9ODE5MSZkdCxBZT1kdD4+PjEzLEJlPTB8als4XSxvdD04MTkxJkJlLGx0PUJlPj4+MTMsQ3Q9MHxqWzldLEZ0PTgxOTEmQ3QsUnQ9Q3Q+Pj4xMyxYdD0wfGdbMF0sU249ODE5MSZYdCx6dD1YdD4+PjEzLHZuPTB8'@;
put 'Z1sxXSxCbj04MTkxJnZuLHRuPXZuPj4+MTMsWm49MHxnWzJdLE9uPTgxOTEmWm4scHQ9Wm4+Pj4xMyxmbj0wfGdbM10sZG49ODE5MSZmbixNdD1mbj4+PjEzLFl0PTB8Z1s0XSxfdD04MTkxJll0LGp0PVl0Pj4+MTMscG49MHxnWzVdLHJ0PTgxOTEmcG4sRXQ9cG4+Pj4xMyxRdD0wfGdbNl0s'@;
put 'VHQ9ODE5MSZRdCxtdD1RdD4+PjEzLEd0PTB8Z1s3XSxrbj04MTkxJkd0LEJ0PUd0Pj4+MTMsYm49MHxnWzhdLENuPTgxOTEmYm4sZW49Ym4+Pj4xMyxQbj0wfGdbOV0sd249ODE5MSZQbiwkdD1Qbj4+PjEzO0gubmVnYXRpdmU9eS5uZWdhdGl2ZV5MLm5lZ2F0aXZlLEgubGVuZ3RoPTE5O3Zh'@;
put 'ciBXbj0oeCsoXz1NYXRoLmltdWwobmUsU24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKG5lLHp0KSkrTWF0aC5pbXVsKHVlLFNuKXwwKSk8PDEzKXwwO3g9KChDPU1hdGguaW11bCh1ZSx6dCkpKyhwPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxfPU1hdGguaW11bCh4'@;
put 'ZSxTbikscD0ocD1NYXRoLmltdWwoeGUsenQpKStNYXRoLmltdWwoT2UsU24pfDAsQz1NYXRoLmltdWwoT2UsenQpO3ZhciBjaT0oeCsoXz1fK01hdGguaW11bChuZSxCbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHRuKXwwKStNYXRoLmltdWwodWUsQm4pfDApKTw8MTMp'@;
put 'fDA7eD0oKEM9QytNYXRoLmltdWwodWUsdG4pfDApKyhwPj4+MTMpfDApKyhjaT4+PjI2KXwwLGNpJj02NzEwODg2MyxfPU1hdGguaW11bChFZSxTbikscD0ocD1NYXRoLmltdWwoRWUsenQpKStNYXRoLmltdWwoTGUsU24pfDAsQz1NYXRoLmltdWwoTGUsenQpLF89XytNYXRoLmltdWwoeGUs'@;
put 'Qm4pfDAscD0ocD1wK01hdGguaW11bCh4ZSx0bil8MCkrTWF0aC5pbXVsKE9lLEJuKXwwLEM9QytNYXRoLmltdWwoT2UsdG4pfDA7dmFyIGxuPSh4KyhfPV8rTWF0aC5pbXVsKG5lLE9uKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUscHQpfDApK01hdGguaW11bCh1ZSxPbil8'@;
put 'MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bCh1ZSxwdCl8MCkrKHA+Pj4xMyl8MCkrKGxuPj4+MjYpfDAsbG4mPTY3MTA4ODYzLF89TWF0aC5pbXVsKEtlLFNuKSxwPShwPU1hdGguaW11bChLZSx6dCkpK01hdGguaW11bChVZSxTbil8MCxDPU1hdGguaW11bChVZSx6dCksXz1fK01hdGgu'@;
put 'aW11bChFZSxCbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLHRuKXwwKStNYXRoLmltdWwoTGUsQm4pfDAsQz1DK01hdGguaW11bChMZSx0bil8MCxfPV8rTWF0aC5pbXVsKHhlLE9uKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUscHQpfDApK01hdGguaW11bChPZSxPbil8MCxDPUMrTWF0aC5pbXVs'@;
put 'KE9lLHB0KXwwO3ZhciBubj0oeCsoXz1fK01hdGguaW11bChuZSxkbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLE10KXwwKStNYXRoLmltdWwodWUsZG4pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsTXQpfDApKyhwPj4+MTMpfDApKyhubj4+PjI2KXwwLG5u'@;
put 'Jj02NzEwODg2MyxfPU1hdGguaW11bChhdCxTbikscD0ocD1NYXRoLmltdWwoYXQsenQpKStNYXRoLmltdWwoRmUsU24pfDAsQz1NYXRoLmltdWwoRmUsenQpLF89XytNYXRoLmltdWwoS2UsQm4pfDAscD0ocD1wK01hdGguaW11bChLZSx0bil8MCkrTWF0aC5pbXVsKFVlLEJuKXwwLEM9QytN'@;
put 'YXRoLmltdWwoVWUsdG4pfDAsXz1fK01hdGguaW11bChFZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLHB0KXwwKStNYXRoLmltdWwoTGUsT24pfDAsQz1DK01hdGguaW11bChMZSxwdCl8MCxfPV8rTWF0aC5pbXVsKHhlLGRuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsTXQpfDApK01hdGgu'@;
put 'aW11bChPZSxkbil8MCxDPUMrTWF0aC5pbXVsKE9lLE10KXwwO3ZhciB1aT0oeCsoXz1fK01hdGguaW11bChuZSxfdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGp0KXwwKStNYXRoLmltdWwodWUsX3QpfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsanQpfDAp'@;
put 'KyhwPj4+MTMpfDApKyh1aT4+PjI2KXwwLHVpJj02NzEwODg2MyxfPU1hdGguaW11bChEZSxTbikscD0ocD1NYXRoLmltdWwoRGUsenQpKStNYXRoLmltdWwoUmUsU24pfDAsQz1NYXRoLmltdWwoUmUsenQpLF89XytNYXRoLmltdWwoYXQsQm4pfDAscD0ocD1wK01hdGguaW11bChhdCx0bil8'@;
put 'MCkrTWF0aC5pbXVsKEZlLEJuKXwwLEM9QytNYXRoLmltdWwoRmUsdG4pfDAsXz1fK01hdGguaW11bChLZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLHB0KXwwKStNYXRoLmltdWwoVWUsT24pfDAsQz1DK01hdGguaW11bChVZSxwdCl8MCxfPV8rTWF0aC5pbXVsKEVlLGRuKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoRWUsTXQpfDApK01hdGguaW11bChMZSxkbil8MCxDPUMrTWF0aC5pbXVsKExlLE10KXwwLF89XytNYXRoLmltdWwoeGUsX3QpfDAscD0ocD1wK01hdGguaW11bCh4ZSxqdCl8MCkrTWF0aC5pbXVsKE9lLF90KXwwLEM9QytNYXRoLmltdWwoT2UsanQpfDA7dmFyIEFyPSh4'@;
put 'KyhfPV8rTWF0aC5pbXVsKG5lLHJ0KXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsRXQpfDApK01hdGguaW11bCh1ZSxydCl8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bCh1ZSxFdCl8MCkrKHA+Pj4xMyl8MCkrKEFyPj4+MjYpfDAsQXImPTY3MTA4ODYzLF89TWF0aC5p'@;
put 'bXVsKG50LFNuKSxwPShwPU1hdGguaW11bChudCx6dCkpK01hdGguaW11bChHZSxTbil8MCxDPU1hdGguaW11bChHZSx6dCksXz1fK01hdGguaW11bChEZSxCbil8MCxwPShwPXArTWF0aC5pbXVsKERlLHRuKXwwKStNYXRoLmltdWwoUmUsQm4pfDAsQz1DK01hdGguaW11bChSZSx0bil8MCxf'@;
put 'PV8rTWF0aC5pbXVsKGF0LE9uKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQscHQpfDApK01hdGguaW11bChGZSxPbil8MCxDPUMrTWF0aC5pbXVsKEZlLHB0KXwwLF89XytNYXRoLmltdWwoS2UsZG4pfDAscD0ocD1wK01hdGguaW11bChLZSxNdCl8MCkrTWF0aC5pbXVsKFVlLGRuKXwwLEM9QytN'@;
put 'YXRoLmltdWwoVWUsTXQpfDAsXz1fK01hdGguaW11bChFZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKEVlLGp0KXwwKStNYXRoLmltdWwoTGUsX3QpfDAsQz1DK01hdGguaW11bChMZSxqdCl8MCxfPV8rTWF0aC5pbXVsKHhlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsRXQpfDApK01hdGgu'@;
put 'aW11bChPZSxydCl8MCxDPUMrTWF0aC5pbXVsKE9lLEV0KXwwO3ZhciBtcj0oeCsoXz1fK01hdGguaW11bChuZSxUdCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLG10KXwwKStNYXRoLmltdWwodWUsVHQpfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsbXQpfDAp'@;
put 'KyhwPj4+MTMpfDApKyhtcj4+PjI2KXwwLG1yJj02NzEwODg2MyxfPU1hdGguaW11bChUZSxTbikscD0ocD1NYXRoLmltdWwoVGUsenQpKStNYXRoLmltdWwoQWUsU24pfDAsQz1NYXRoLmltdWwoQWUsenQpLF89XytNYXRoLmltdWwobnQsQm4pfDAscD0ocD1wK01hdGguaW11bChudCx0bil8'@;
put 'MCkrTWF0aC5pbXVsKEdlLEJuKXwwLEM9QytNYXRoLmltdWwoR2UsdG4pfDAsXz1fK01hdGguaW11bChEZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKERlLHB0KXwwKStNYXRoLmltdWwoUmUsT24pfDAsQz1DK01hdGguaW11bChSZSxwdCl8MCxfPV8rTWF0aC5pbXVsKGF0LGRuKXwwLHA9KHA9'@;
put 'cCtNYXRoLmltdWwoYXQsTXQpfDApK01hdGguaW11bChGZSxkbil8MCxDPUMrTWF0aC5pbXVsKEZlLE10KXwwLF89XytNYXRoLmltdWwoS2UsX3QpfDAscD0ocD1wK01hdGguaW11bChLZSxqdCl8MCkrTWF0aC5pbXVsKFVlLF90KXwwLEM9QytNYXRoLmltdWwoVWUsanQpfDAsXz1fK01hdGgu'@;
put 'aW11bChFZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKEVlLEV0KXwwKStNYXRoLmltdWwoTGUscnQpfDAsQz1DK01hdGguaW11bChMZSxFdCl8MCxfPV8rTWF0aC5pbXVsKHhlLFR0KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsbXQpfDApK01hdGguaW11bChPZSxUdCl8MCxDPUMrTWF0aC5pbXVs'@;
put 'KE9lLG10KXwwO3ZhciB5aT0oeCsoXz1fK01hdGguaW11bChuZSxrbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLEJ0KXwwKStNYXRoLmltdWwodWUsa24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsQnQpfDApKyhwPj4+MTMpfDApKyh5aT4+PjI2KXwwLHlp'@;
put 'Jj02NzEwODg2MyxfPU1hdGguaW11bChvdCxTbikscD0ocD1NYXRoLmltdWwob3QsenQpKStNYXRoLmltdWwobHQsU24pfDAsQz1NYXRoLmltdWwobHQsenQpLF89XytNYXRoLmltdWwoVGUsQm4pfDAscD0ocD1wK01hdGguaW11bChUZSx0bil8MCkrTWF0aC5pbXVsKEFlLEJuKXwwLEM9QytN'@;
put 'YXRoLmltdWwoQWUsdG4pfDAsXz1fK01hdGguaW11bChudCxPbil8MCxwPShwPXArTWF0aC5pbXVsKG50LHB0KXwwKStNYXRoLmltdWwoR2UsT24pfDAsQz1DK01hdGguaW11bChHZSxwdCl8MCxfPV8rTWF0aC5pbXVsKERlLGRuKXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsTXQpfDApK01hdGgu'@;
put 'aW11bChSZSxkbil8MCxDPUMrTWF0aC5pbXVsKFJlLE10KXwwLF89XytNYXRoLmltdWwoYXQsX3QpfDAscD0ocD1wK01hdGguaW11bChhdCxqdCl8MCkrTWF0aC5pbXVsKEZlLF90KXwwLEM9QytNYXRoLmltdWwoRmUsanQpfDAsXz1fK01hdGguaW11bChLZSxydCl8MCxwPShwPXArTWF0aC5p'@;
put 'bXVsKEtlLEV0KXwwKStNYXRoLmltdWwoVWUscnQpfDAsQz1DK01hdGguaW11bChVZSxFdCl8MCxfPV8rTWF0aC5pbXVsKEVlLFR0KXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsbXQpfDApK01hdGguaW11bChMZSxUdCl8MCxDPUMrTWF0aC5pbXVsKExlLG10KXwwLF89XytNYXRoLmltdWwoeGUs'@;
put 'a24pfDAscD0ocD1wK01hdGguaW11bCh4ZSxCdCl8MCkrTWF0aC5pbXVsKE9lLGtuKXwwLEM9QytNYXRoLmltdWwoT2UsQnQpfDA7dmFyICRyPSh4KyhfPV8rTWF0aC5pbXVsKG5lLENuKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwobmUsZW4pfDApK01hdGguaW11bCh1ZSxDbil8'@;
put 'MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bCh1ZSxlbil8MCkrKHA+Pj4xMyl8MCkrKCRyPj4+MjYpfDAsJHImPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LFNuKSxwPShwPU1hdGguaW11bChGdCx6dCkpK01hdGguaW11bChSdCxTbil8MCxDPU1hdGguaW11bChSdCx6dCksXz1fK01hdGgu'@;
put 'aW11bChvdCxCbil8MCxwPShwPXArTWF0aC5pbXVsKG90LHRuKXwwKStNYXRoLmltdWwobHQsQm4pfDAsQz1DK01hdGguaW11bChsdCx0bil8MCxfPV8rTWF0aC5pbXVsKFRlLE9uKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUscHQpfDApK01hdGguaW11bChBZSxPbil8MCxDPUMrTWF0aC5pbXVs'@;
put 'KEFlLHB0KXwwLF89XytNYXRoLmltdWwobnQsZG4pfDAscD0ocD1wK01hdGguaW11bChudCxNdCl8MCkrTWF0aC5pbXVsKEdlLGRuKXwwLEM9QytNYXRoLmltdWwoR2UsTXQpfDAsXz1fK01hdGguaW11bChEZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLGp0KXwwKStNYXRoLmltdWwoUmUs'@;
put 'X3QpfDAsQz1DK01hdGguaW11bChSZSxqdCl8MCxfPV8rTWF0aC5pbXVsKGF0LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsRXQpfDApK01hdGguaW11bChGZSxydCl8MCxDPUMrTWF0aC5pbXVsKEZlLEV0KXwwLF89XytNYXRoLmltdWwoS2UsVHQpfDAscD0ocD1wK01hdGguaW11bChLZSxt'@;
put 'dCl8MCkrTWF0aC5pbXVsKFVlLFR0KXwwLEM9QytNYXRoLmltdWwoVWUsbXQpfDAsXz1fK01hdGguaW11bChFZSxrbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLEJ0KXwwKStNYXRoLmltdWwoTGUsa24pfDAsQz1DK01hdGguaW11bChMZSxCdCl8MCxfPV8rTWF0aC5pbXVsKHhlLENuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoeGUsZW4pfDApK01hdGguaW11bChPZSxDbil8MCxDPUMrTWF0aC5pbXVsKE9lLGVuKXwwO3ZhciBKaT0oeCsoXz1fK01hdGguaW11bChuZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLCR0KXwwKStNYXRoLmltdWwodWUsd24pfDApKTw8MTMp'@;
put 'fDA7eD0oKEM9QytNYXRoLmltdWwodWUsJHQpfDApKyhwPj4+MTMpfDApKyhKaT4+PjI2KXwwLEppJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxCbikscD0ocD1NYXRoLmltdWwoRnQsdG4pKStNYXRoLmltdWwoUnQsQm4pfDAsQz1NYXRoLmltdWwoUnQsdG4pLF89XytNYXRoLmltdWwob3Qs'@;
put 'T24pfDAscD0ocD1wK01hdGguaW11bChvdCxwdCl8MCkrTWF0aC5pbXVsKGx0LE9uKXwwLEM9QytNYXRoLmltdWwobHQscHQpfDAsXz1fK01hdGguaW11bChUZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLE10KXwwKStNYXRoLmltdWwoQWUsZG4pfDAsQz1DK01hdGguaW11bChBZSxNdCl8'@;
put 'MCxfPV8rTWF0aC5pbXVsKG50LF90KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsanQpfDApK01hdGguaW11bChHZSxfdCl8MCxDPUMrTWF0aC5pbXVsKEdlLGp0KXwwLF89XytNYXRoLmltdWwoRGUscnQpfDAscD0ocD1wK01hdGguaW11bChEZSxFdCl8MCkrTWF0aC5pbXVsKFJlLHJ0KXwwLEM9'@;
put 'QytNYXRoLmltdWwoUmUsRXQpfDAsXz1fK01hdGguaW11bChhdCxUdCl8MCxwPShwPXArTWF0aC5pbXVsKGF0LG10KXwwKStNYXRoLmltdWwoRmUsVHQpfDAsQz1DK01hdGguaW11bChGZSxtdCl8MCxfPV8rTWF0aC5pbXVsKEtlLGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsQnQpfDApK01h'@;
put 'dGguaW11bChVZSxrbil8MCxDPUMrTWF0aC5pbXVsKFVlLEJ0KXwwLF89XytNYXRoLmltdWwoRWUsQ24pfDAscD0ocD1wK01hdGguaW11bChFZSxlbil8MCkrTWF0aC5pbXVsKExlLENuKXwwLEM9QytNYXRoLmltdWwoTGUsZW4pfDA7dmFyIHlyPSh4KyhfPV8rTWF0aC5pbXVsKHhlLHduKXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoeGUsJHQpfDApK01hdGguaW11bChPZSx3bil8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChPZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHlyPj4+MjYpfDAseXImPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LE9uKSxwPShwPU1hdGguaW11'@;
put 'bChGdCxwdCkpK01hdGguaW11bChSdCxPbil8MCxDPU1hdGguaW11bChSdCxwdCksXz1fK01hdGguaW11bChvdCxkbil8MCxwPShwPXArTWF0aC5pbXVsKG90LE10KXwwKStNYXRoLmltdWwobHQsZG4pfDAsQz1DK01hdGguaW11bChsdCxNdCl8MCxfPV8rTWF0aC5pbXVsKFRlLF90KXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsanQpfDApK01hdGguaW11bChBZSxfdCl8MCxDPUMrTWF0aC5pbXVsKEFlLGp0KXwwLF89XytNYXRoLmltdWwobnQscnQpfDAscD0ocD1wK01hdGguaW11bChudCxFdCl8MCkrTWF0aC5pbXVsKEdlLHJ0KXwwLEM9QytNYXRoLmltdWwoR2UsRXQpfDAsXz1fK01h'@;
put 'dGguaW11bChEZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKERlLG10KXwwKStNYXRoLmltdWwoUmUsVHQpfDAsQz1DK01hdGguaW11bChSZSxtdCl8MCxfPV8rTWF0aC5pbXVsKGF0LGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsQnQpfDApK01hdGguaW11bChGZSxrbil8MCxDPUMrTWF0aC5p'@;
put 'bXVsKEZlLEJ0KXwwLF89XytNYXRoLmltdWwoS2UsQ24pfDAscD0ocD1wK01hdGguaW11bChLZSxlbil8MCkrTWF0aC5pbXVsKFVlLENuKXwwLEM9QytNYXRoLmltdWwoVWUsZW4pfDA7dmFyIElpPSh4KyhfPV8rTWF0aC5pbXVsKEVlLHduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoRWUsJHQpfDApK01hdGguaW11bChMZSx3bil8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChMZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKElpPj4+MjYpfDAsSWkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LGRuKSxwPShwPU1hdGguaW11bChGdCxNdCkpK01hdGguaW11bChSdCxkbil8'@;
put 'MCxDPU1hdGguaW11bChSdCxNdCksXz1fK01hdGguaW11bChvdCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LGp0KXwwKStNYXRoLmltdWwobHQsX3QpfDAsQz1DK01hdGguaW11bChsdCxqdCl8MCxfPV8rTWF0aC5pbXVsKFRlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsRXQpfDApK01h'@;
put 'dGguaW11bChBZSxydCl8MCxDPUMrTWF0aC5pbXVsKEFlLEV0KXwwLF89XytNYXRoLmltdWwobnQsVHQpfDAscD0ocD1wK01hdGguaW11bChudCxtdCl8MCkrTWF0aC5pbXVsKEdlLFR0KXwwLEM9QytNYXRoLmltdWwoR2UsbXQpfDAsXz1fK01hdGguaW11bChEZSxrbil8MCxwPShwPXArTWF0'@;
put 'aC5pbXVsKERlLEJ0KXwwKStNYXRoLmltdWwoUmUsa24pfDAsQz1DK01hdGguaW11bChSZSxCdCl8MCxfPV8rTWF0aC5pbXVsKGF0LENuKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsZW4pfDApK01hdGguaW11bChGZSxDbil8MCxDPUMrTWF0aC5pbXVsKEZlLGVuKXwwO3ZhciBubz0oeCsoXz1f'@;
put 'K01hdGguaW11bChLZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEtlLCR0KXwwKStNYXRoLmltdWwoVWUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoVWUsJHQpfDApKyhwPj4+MTMpfDApKyhubz4+PjI2KXwwLG5vJj02NzEwODg2MyxfPU1hdGguaW11bChG'@;
put 'dCxfdCkscD0ocD1NYXRoLmltdWwoRnQsanQpKStNYXRoLmltdWwoUnQsX3QpfDAsQz1NYXRoLmltdWwoUnQsanQpLF89XytNYXRoLmltdWwob3QscnQpfDAscD0ocD1wK01hdGguaW11bChvdCxFdCl8MCkrTWF0aC5pbXVsKGx0LHJ0KXwwLEM9QytNYXRoLmltdWwobHQsRXQpfDAsXz1fK01h'@;
put 'dGguaW11bChUZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLG10KXwwKStNYXRoLmltdWwoQWUsVHQpfDAsQz1DK01hdGguaW11bChBZSxtdCl8MCxfPV8rTWF0aC5pbXVsKG50LGtuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsQnQpfDApK01hdGguaW11bChHZSxrbil8MCxDPUMrTWF0aC5p'@;
put 'bXVsKEdlLEJ0KXwwLF89XytNYXRoLmltdWwoRGUsQ24pfDAscD0ocD1wK01hdGguaW11bChEZSxlbil8MCkrTWF0aC5pbXVsKFJlLENuKXwwLEM9QytNYXRoLmltdWwoUmUsZW4pfDA7dmFyIHpuPSh4KyhfPV8rTWF0aC5pbXVsKGF0LHduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmlt'@;
put 'dWwoYXQsJHQpfDApK01hdGguaW11bChGZSx3bil8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChGZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKHpuPj4+MjYpfDAsem4mPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LHJ0KSxwPShwPU1hdGguaW11bChGdCxFdCkpK01hdGguaW11bChSdCxydCl8'@;
put 'MCxDPU1hdGguaW11bChSdCxFdCksXz1fK01hdGguaW11bChvdCxUdCl8MCxwPShwPXArTWF0aC5pbXVsKG90LG10KXwwKStNYXRoLmltdWwobHQsVHQpfDAsQz1DK01hdGguaW11bChsdCxtdCl8MCxfPV8rTWF0aC5pbXVsKFRlLGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsQnQpfDApK01h'@;
put 'dGguaW11bChBZSxrbil8MCxDPUMrTWF0aC5pbXVsKEFlLEJ0KXwwLF89XytNYXRoLmltdWwobnQsQ24pfDAscD0ocD1wK01hdGguaW11bChudCxlbil8MCkrTWF0aC5pbXVsKEdlLENuKXwwLEM9QytNYXRoLmltdWwoR2UsZW4pfDA7dmFyIFppPSh4KyhfPV8rTWF0aC5pbXVsKERlLHduKXww'@;
put 'KXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoRGUsJHQpfDApK01hdGguaW11bChSZSx3bil8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChSZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKFppPj4+MjYpfDAsWmkmPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LFR0KSxwPShwPU1hdGguaW11'@;
put 'bChGdCxtdCkpK01hdGguaW11bChSdCxUdCl8MCxDPU1hdGguaW11bChSdCxtdCksXz1fK01hdGguaW11bChvdCxrbil8MCxwPShwPXArTWF0aC5pbXVsKG90LEJ0KXwwKStNYXRoLmltdWwobHQsa24pfDAsQz1DK01hdGguaW11bChsdCxCdCl8MCxfPV8rTWF0aC5pbXVsKFRlLENuKXwwLHA9'@;
put 'KHA9cCtNYXRoLmltdWwoVGUsZW4pfDApK01hdGguaW11bChBZSxDbil8MCxDPUMrTWF0aC5pbXVsKEFlLGVuKXwwO3ZhciBXaT0oeCsoXz1fK01hdGguaW11bChudCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG50LCR0KXwwKStNYXRoLmltdWwoR2Usd24pfDApKTw8MTMp'@;
put 'fDA7eD0oKEM9QytNYXRoLmltdWwoR2UsJHQpfDApKyhwPj4+MTMpfDApKyhXaT4+PjI2KXwwLFdpJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxrbikscD0ocD1NYXRoLmltdWwoRnQsQnQpKStNYXRoLmltdWwoUnQsa24pfDAsQz1NYXRoLmltdWwoUnQsQnQpLF89XytNYXRoLmltdWwob3Qs'@;
put 'Q24pfDAscD0ocD1wK01hdGguaW11bChvdCxlbil8MCkrTWF0aC5pbXVsKGx0LENuKXwwLEM9QytNYXRoLmltdWwobHQsZW4pfDA7dmFyIG9vPSh4KyhfPV8rTWF0aC5pbXVsKFRlLHduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwoVGUsJHQpfDApK01hdGguaW11bChBZSx3bil8'@;
put 'MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChBZSwkdCl8MCkrKHA+Pj4xMyl8MCkrKG9vPj4+MjYpfDAsb28mPTY3MTA4ODYzLF89TWF0aC5pbXVsKEZ0LENuKSxwPShwPU1hdGguaW11bChGdCxlbikpK01hdGguaW11bChSdCxDbil8MCxDPU1hdGguaW11bChSdCxlbik7dmFyIGhvPSh4'@;
put 'KyhfPV8rTWF0aC5pbXVsKG90LHduKXwwKXwwKSsoKDgxOTEmKHA9KHA9cCtNYXRoLmltdWwob3QsJHQpfDApK01hdGguaW11bChsdCx3bil8MCkpPDwxMyl8MDt4PSgoQz1DK01hdGguaW11bChsdCwkdCl8MCkrKHA+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzO3ZhciBMcj0o'@;
put 'eCsoXz1NYXRoLmltdWwoRnQsd24pKXwwKSsoKDgxOTEmKHA9KHA9TWF0aC5pbXVsKEZ0LCR0KSkrTWF0aC5pbXVsKFJ0LHduKXwwKSk8PDEzKXwwO3JldHVybiB4PSgoQz1NYXRoLmltdWwoUnQsJHQpKSsocD4+PjEzKXwwKSsoTHI+Pj4yNil8MCxMciY9NjcxMDg4NjMsU1swXT1XbixTWzFd'@;
put 'PWNpLFNbMl09bG4sU1szXT1ubixTWzRdPXVpLFNbNV09QXIsU1s2XT1tcixTWzddPXlpLFNbOF09JHIsU1s5XT1KaSxTWzEwXT15cixTWzExXT1JaSxTWzEyXT1ubyxTWzEzXT16bixTWzE0XT1aaSxTWzE1XT1XaSxTWzE2XT1vbyxTWzE3XT1obyxTWzE4XT1MciwwIT09eCYmKFNbMTldPXgs'@;
put 'SC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gVyhHLHksTCl7cmV0dXJuKG5ldyB6KS5tdWxwKEcseSxMKX1mdW5jdGlvbiB6KEcseSl7dGhpcy54PUcsdGhpcy55PXl9TWF0aC5pbXVsfHwoVj1OKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih5LEwpe3ZhciBILGo9dGhpcy5sZW5ndGgreS5s'@;
put 'ZW5ndGg7cmV0dXJuIEg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT15Lmxlbmd0aD9WKHRoaXMseSxMKTpqPDYzP04odGhpcyx5LEwpOmo8MTAyND9mdW5jdGlvbiBaKEcseSxMKXtMLm5lZ2F0aXZlPXkubmVnYXRpdmVeRy5uZWdhdGl2ZSxMLmxlbmd0aD1HLmxlbmd0aCt5Lmxlbmd0aDtmb3Io'@;
put 'dmFyIEg9MCxqPTAsZz0wO2c8TC5sZW5ndGgtMTtnKyspe3ZhciBTPWo7aj0wO2Zvcih2YXIgeD02NzEwODg2MyZILF89TWF0aC5taW4oZyx5Lmxlbmd0aC0xKSxwPU1hdGgubWF4KDAsZy1HLmxlbmd0aCsxKTtwPD1fO3ArKyl7dmFyIHVlPSgwfEcud29yZHNbZy1wXSkqKDB8eS53b3Jkc1tw'@;
put 'XSksaGU9NjcxMDg4NjMmdWU7eD02NzEwODg2MyYoaGU9aGUreHwwKSxqKz0oUz0oUz1TKyh1ZS82NzEwODg2NHwwKXwwKSsoaGU+Pj4yNil8MCk+Pj4yNixTJj02NzEwODg2M31MLndvcmRzW2ddPXgsSD1TLFM9an1yZXR1cm4gMCE9PUg/TC53b3Jkc1tnXT1IOkwubGVuZ3RoLS0sTC5zdHJp'@;
put 'cCgpfSh0aGlzLHksTCk6Vyh0aGlzLHksTCksSH0sei5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih5KXtmb3IodmFyIEw9bmV3IEFycmF5KHkpLEg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyh5KS0xLGo9MDtqPHk7aisrKUxbal09dGhpcy5yZXZCaW4oaixILHkpO3JldHVybiBMfSx6LnBy'@;
put 'b3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oeSxMLEgpe2lmKDA9PT15fHx5PT09SC0xKXJldHVybiB5O2Zvcih2YXIgaj0wLGc9MDtnPEw7ZysrKWp8PSgxJnkpPDxMLWctMSx5Pj49MTtyZXR1cm4gan0sei5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih5LEwsSCxqLGcsUyl7Zm9yKHZhciB4'@;
put 'PTA7eDxTO3grKylqW3hdPUxbeVt4XV0sZ1t4XT1IW3lbeF1dfSx6LnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oeSxMLEgsaixnLFMpe3RoaXMucGVybXV0ZShTLHksTCxILGosZyk7Zm9yKHZhciB4PTE7eDxnO3g8PD0xKWZvcih2YXIgXz14PDwxLHA9TWF0aC5jb3MoMipNYXRoLlBJ'@;
put 'L18pLEM9TWF0aC5zaW4oMipNYXRoLlBJL18pLEs9MDtLPGc7Sys9Xylmb3IodmFyIG5lPXAsdWU9QyxoZT0wO2hlPHg7aGUrKyl7dmFyIHhlPUhbSytoZV0sT2U9altLK2hlXSxIZT1IW0sraGUreF0sRWU9altLK2hlK3hdLExlPW5lKkhlLXVlKkVlO0VlPW5lKkVlK3VlKkhlLEhbSytoZV09'@;
put 'eGUrKEhlPUxlKSxqW0sraGVdPU9lK0VlLEhbSytoZSt4XT14ZS1IZSxqW0sraGUreF09T2UtRWUsaGUhPT1fJiYoTGU9cCpuZS1DKnVlLHVlPXAqdWUrQypuZSxuZT1MZSl9fSx6LnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih5LEwpe3ZhciBIPTF8TWF0aC5tYXgoTCx5KSxqPTEm'@;
put 'SCxnPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpZysrO3JldHVybiAxPDxnKzEran0sei5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHksTCxIKXtpZighKEg8PTEpKWZvcih2YXIgaj0wO2o8SC8yO2orKyl7dmFyIGc9eVtqXTt5W2pdPXlbSC1qLTFdLHlbSC1qLTFdPWcsZz1MW2pdLExb'@;
put 'al09LUxbSC1qLTFdLExbSC1qLTFdPS1nfX0sei5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHksTCl7Zm9yKHZhciBIPTAsaj0wO2o8TC8yO2orKyl7dmFyIGc9ODE5MipNYXRoLnJvdW5kKHlbMipqKzFdL0wpK01hdGgucm91bmQoeVsyKmpdL0wpK0g7eVtqXT02NzEwODg2MyZn'@;
put 'LEg9Zzw2NzEwODg2ND8wOmcvNjcxMDg4NjR8MH1yZXR1cm4geX0sei5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih5LEwsSCxqKXtmb3IodmFyIGc9MCxTPTA7UzxMO1MrKylIWzIqU109ODE5MSYoZys9MHx5W1NdKSxIWzIqUysxXT04MTkxJihnPj4+PTEzKSxnPj4+PTEzO2ZvcihT'@;
put 'PTIqTDtTPGo7KytTKUhbU109MDttKDA9PT1nKSxtKCEoLTgxOTImZykpfSx6LnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHkpe2Zvcih2YXIgTD1uZXcgQXJyYXkoeSksSD0wO0g8eTtIKyspTFtIXT0wO3JldHVybiBMfSx6LnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHksTCxIKXt2YXIgaj0y'@;
put 'KnRoaXMuZ3Vlc3NMZW4xM2IoeS5sZW5ndGgsTC5sZW5ndGgpLGc9dGhpcy5tYWtlUkJUKGopLFM9dGhpcy5zdHViKGopLHg9bmV3IEFycmF5KGopLF89bmV3IEFycmF5KGopLHA9bmV3IEFycmF5KGopLEM9bmV3IEFycmF5KGopLEs9bmV3IEFycmF5KGopLG5lPW5ldyBBcnJheShqKSx1ZT1I'@;
put 'LndvcmRzO3VlLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYih5LndvcmRzLHkubGVuZ3RoLHgsaiksdGhpcy5jb252ZXJ0MTNiKEwud29yZHMsTC5sZW5ndGgsQyxqKSx0aGlzLnRyYW5zZm9ybSh4LFMsXyxwLGosZyksdGhpcy50cmFuc2Zvcm0oQyxTLEssbmUsaixnKTtmb3IodmFyIGhlPTA7'@;
put 'aGU8ajtoZSsrKXt2YXIgeGU9X1toZV0qS1toZV0tcFtoZV0qbmVbaGVdO3BbaGVdPV9baGVdKm5lW2hlXStwW2hlXSpLW2hlXSxfW2hlXT14ZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoXyxwLGopLHRoaXMudHJhbnNmb3JtKF8scCx1ZSxTLGosZyksdGhpcy5jb25qdWdhdGUodWUsUyxqKSx0'@;
put 'aGlzLm5vcm1hbGl6ZTEzYih1ZSxqKSxILm5lZ2F0aXZlPXkubmVnYXRpdmVeTC5uZWdhdGl2ZSxILmxlbmd0aD15Lmxlbmd0aCtMLmxlbmd0aCxILnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbih5KXt2YXIgTD1uZXcgdyhudWxsKTtyZXR1cm4gTC53b3Jkcz1uZXcgQXJyYXko'@;
put 'dGhpcy5sZW5ndGgreS5sZW5ndGgpLHRoaXMubXVsVG8oeSxMKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih5KXt2YXIgTD1uZXcgdyhudWxsKTtyZXR1cm4gTC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgreS5sZW5ndGgpLFcodGhpcyx5LEwpfSx3LnByb3RvdHlwZS5pbXVsPWZ1'@;
put 'bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8oeSx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCk7Zm9yKHZhciBMPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0oMHx0aGlzLndvcmRz'@;
put 'W0hdKSp5LGc9KDY3MTA4ODYzJmopKyg2NzEwODg2MyZMKTtMPj49MjYsTCs9ai82NzEwODg2NHwwLEwrPWc+Pj4yNix0aGlzLndvcmRzW0hdPTY3MTA4ODYzJmd9cmV0dXJuIDAhPT1MJiYodGhpcy53b3Jkc1tIXT1MLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVu'@;
put 'Y3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih5KX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9'@;
put 'ZnVuY3Rpb24oeSl7dmFyIEw9ZnVuY3Rpb24gQihHKXtmb3IodmFyIHk9bmV3IEFycmF5KEcuYml0TGVuZ3RoKCkpLEw9MDtMPHkubGVuZ3RoO0wrKyl7dmFyIGo9TCUyNjt5W0xdPShHLndvcmRzW0wvMjZ8MF0mMTw8aik+Pj5qfXJldHVybiB5fSh5KTtpZigwPT09TC5sZW5ndGgpcmV0dXJu'@;
put 'IG5ldyB3KDEpO2Zvcih2YXIgSD10aGlzLGo9MDtqPEwubGVuZ3RoJiYwPT09TFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8TC5sZW5ndGgpZm9yKHZhciBnPUguc3FyKCk7ajxMLmxlbmd0aDtqKyssZz1nLnNxcigpKTAhPT1MW2pdJiYoSD1ILm11bChnKSk7cmV0dXJuIEh9LHcucHJvdG90'@;
put 'eXBlLml1c2hsbj1mdW5jdGlvbih5KXttKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCk7dmFyIGcsTD15JTI2LEg9KHktTCkvMjYsaj02NzEwODg2Mz4+PjI2LUw8PDI2LUw7aWYoMCE9PUwpe3ZhciBTPTA7Zm9yKGc9MDtnPHRoaXMubGVuZ3RoO2crKyl7dmFyIHg9dGhpcy53b3Jkc1tnXSZq'@;
put 'O3RoaXMud29yZHNbZ109KDB8dGhpcy53b3Jkc1tnXSkteDw8THxTLFM9eD4+PjI2LUx9UyYmKHRoaXMud29yZHNbZ109Uyx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKGc9dGhpcy5sZW5ndGgtMTtnPj0wO2ctLSl0aGlzLndvcmRzW2crSF09dGhpcy53b3Jkc1tnXTtmb3IoZz0wO2c8'@;
put 'SDtnKyspdGhpcy53b3Jkc1tnXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHkpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih5KX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHksTCxI'@;
put 'KXt2YXIgajttKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCksaj1MPyhMLUwlMjYpLzI2OjA7dmFyIGc9eSUyNixTPU1hdGgubWluKCh5LWcpLzI2LHRoaXMubGVuZ3RoKSx4PTY3MTA4ODYzXjY3MTA4ODYzPj4+Zzw8ZyxfPUg7aWYoai09UyxqPU1hdGgubWF4KDAsaiksXyl7Zm9yKHZhciBw'@;
put 'PTA7cDxTO3ArKylfLndvcmRzW3BdPXRoaXMud29yZHNbcF07Xy5sZW5ndGg9U31pZigwIT09UylpZih0aGlzLmxlbmd0aD5TKWZvcih0aGlzLmxlbmd0aC09UyxwPTA7cDx0aGlzLmxlbmd0aDtwKyspdGhpcy53b3Jkc1twXT10aGlzLndvcmRzW3ArU107ZWxzZSB0aGlzLndvcmRzWzBdPTAs'@;
put 'dGhpcy5sZW5ndGg9MTt2YXIgQz0wO2ZvcihwPXRoaXMubGVuZ3RoLTE7cD49MCYmKDAhPT1DfHxwPj1qKTtwLS0pe3ZhciBLPTB8dGhpcy53b3Jkc1twXTt0aGlzLndvcmRzW3BdPUM8PDI2LWd8Sz4+PmcsQz1LJnh9cmV0dXJuIF8mJjAhPT1DJiYoXy53b3Jkc1tfLmxlbmd0aCsrXT1DKSww'@;
put 'PT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih5LEwsSCl7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHksTCxIKX0sdy5wcm90b3R5cGUuc2hsbj1mdW5j'@;
put 'dGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHkpfSx3LnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih5KX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHkpfSx3LnByb3Rv'@;
put 'dHlwZS51c2hybj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih5KX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBMPXklMjYsSD0oeS1MKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD1IfHwhKHRoaXMu'@;
put 'd29yZHNbSF0mMTw8TCkpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3ZhciBMPXklMjYsSD0oeS1MKS8yNjtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJz'@;
put 'IiksdGhpcy5sZW5ndGg8PUg/dGhpczooMCE9PUwmJkgrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihILHRoaXMubGVuZ3RoKSwwIT09TCYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+TDw8TCksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249'@;
put 'ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24oeSl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHkpe3JldHVybiBtKCJudW1iZXIiPT10eXBlb2YgeSksbSh5PDY3MTA4ODY0KSx5PDA/dGhpcy5pc3VibigteSk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVu'@;
put 'Z3RoJiYoMHx0aGlzLndvcmRzWzBdKTx5Pyh0aGlzLndvcmRzWzBdPXktKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih5KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4oeSl9LHcucHJvdG90eXBlLl9p'@;
put 'YWRkbj1mdW5jdGlvbih5KXt0aGlzLndvcmRzWzBdKz15O2Zvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbTF0+PTY3MTA4ODY0O0wrKyl0aGlzLndvcmRzW0xdLT02NzEwODg2NCxMPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW0wrMV09MTp0aGlzLndvcmRzW0wrMV0r'@;
put 'KztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsTCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih5KXtpZihtKCJudW1iZXIiPT10eXBlb2YgeSksbSh5PDY3MTA4ODY0KSx5PDApcmV0dXJuIHRoaXMuaWFkZG4oLXkpO2lmKDAhPT10aGlzLm5lZ2F0'@;
put 'aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih5KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT15LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2Ug'@;
put 'Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tMXTwwO0wrKyl0aGlzLndvcmRzW0xdKz02NzEwODg2NCx0aGlzLndvcmRzW0wrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRu'@;
put 'KHkpfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4oeSl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25l'@;
put 'KCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24oeSxMLEgpe3ZhciBnO3RoaXMuX2V4cGFuZCh5Lmxlbmd0aCtIKTt2YXIgUyx4PTA7Zm9yKGc9MDtnPHkubGVuZ3RoO2crKyl7Uz0oMHx0aGlzLndvcmRzW2crSF0pK3g7dmFyIF89KDB8eS53b3Jkc1tnXSkqTDt4'@;
put 'PSgoUy09NjcxMDg4NjMmXyk+PjI2KS0oXy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmU31mb3IoO2c8dGhpcy5sZW5ndGgtSDtnKyspeD0oUz0oMHx0aGlzLndvcmRzW2crSF0pK3gpPj4yNix0aGlzLndvcmRzW2crSF09NjcxMDg4NjMmUztpZigwPT09eClyZXR1cm4g'@;
put 'dGhpcy5zdHJpcCgpO2ZvcihtKC0xPT09eCkseD0wLGc9MDtnPHRoaXMubGVuZ3RoO2crKyl4PShTPS0oMHx0aGlzLndvcmRzW2ddKSt4KT4+MjYsdGhpcy53b3Jkc1tnXT02NzEwODg2MyZTO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERp'@;
put 'dj1mdW5jdGlvbih5LEwpe3ZhciBILGo9dGhpcy5jbG9uZSgpLGc9eSxTPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMoUykpJiYoZz1nLnVzaGxuKEgpLGouaXVzaGxuKEgpLFM9MHxnLndvcmRzW2cubGVuZ3RoLTFdKTt2YXIgcCxfPWoubGVuZ3RoLWcu'@;
put 'bGVuZ3RoO2lmKCJtb2QiIT09TCl7KHA9bmV3IHcobnVsbCkpLmxlbmd0aD1fKzEscC53b3Jkcz1uZXcgQXJyYXkocC5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8cC5sZW5ndGg7QysrKXAud29yZHNbQ109MH12YXIgSz1qLmNsb25lKCkuX2lzaGxuc3VibXVsKGcsMSxfKTswPT09Sy5uZWdhdGl2'@;
put 'ZSYmKGo9SyxwJiYocC53b3Jkc1tfXT0xKSk7Zm9yKHZhciBuZT1fLTE7bmU+PTA7bmUtLSl7dmFyIHVlPTY3MTA4ODY0KigwfGoud29yZHNbZy5sZW5ndGgrbmVdKSsoMHxqLndvcmRzW2cubGVuZ3RoK25lLTFdKTtmb3IodWU9TWF0aC5taW4odWUvU3wwLDY3MTA4ODYzKSxqLl9pc2hsbnN1'@;
put 'Ym11bChnLHVlLG5lKTswIT09ai5uZWdhdGl2ZTspdWUtLSxqLm5lZ2F0aXZlPTAsai5faXNobG5zdWJtdWwoZywxLG5lKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7cCYmKHAud29yZHNbbmVdPXVlKX1yZXR1cm4gcCYmcC5zdHJpcCgpLGouc3RyaXAoKSwiZGl2IiE9PUwmJjAhPT1I'@;
put 'JiZqLml1c2hybihIKSx7ZGl2OnB8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBtKCF5LmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRp'@;
put 'dmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoeSxMKSwibW9kIiE9PUwmJihqPVMuZGl2Lm5lZygpKSwiZGl2IiE9PUwmJihnPVMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0aXZlJiZnLmlhZGQoeSkpLHtkaXY6aixtb2Q6Z30pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eS5uZWdhdGl2ZT8oUz10'@;
put 'aGlzLmRpdm1vZCh5Lm5lZygpLEwpLCJtb2QiIT09TCYmKGo9Uy5kaXYubmVnKCkpLHtkaXY6aixtb2Q6Uy5tb2R9KTp0aGlzLm5lZ2F0aXZlJnkubmVnYXRpdmU/KFM9dGhpcy5uZWcoKS5kaXZtb2QoeS5uZWcoKSxMKSwiZGl2IiE9PUwmJihnPVMubW9kLm5lZygpLEgmJjAhPT1nLm5lZ2F0'@;
put 'aXZlJiZnLmlzdWIoeSkpLHtkaXY6Uy5kaXYsbW9kOmd9KTp5Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoeSk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09eS5sZW5ndGg/ImRpdiI9PT1MP3tkaXY6dGhpcy5kaXZuKHkud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PUw/'@;
put 'e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4oeS53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih5LndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHkud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih5LEwpO3ZhciBqLGcsU30sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHkpe3Jl'@;
put 'dHVybiB0aGlzLmRpdm1vZCh5LCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmRpdm1vZCh5LCJtb2QiLCEwKS5tb2R9LHcu'@;
put 'cHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHkpe3ZhciBMPXRoaXMuZGl2bW9kKHkpO2lmKEwubW9kLmlzWmVybygpKXJldHVybiBMLmRpdjt2YXIgSD0wIT09TC5kaXYubmVnYXRpdmU/TC5tb2QuaXN1Yih5KTpMLm1vZCxqPXkudXNocm4oMSksZz15LmFuZGxuKDEpLFM9SC5jbXAoaik7'@;
put 'cmV0dXJuIFM8MHx8MT09PWcmJjA9PT1TP0wuZGl2OjAhPT1MLmRpdi5uZWdhdGl2ZT9MLmRpdi5pc3VibigxKTpMLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih5KXttKHk8PTY3MTA4ODYzKTtmb3IodmFyIEw9KDE8PDI2KSV5LEg9MCxqPXRoaXMubGVuZ3RoLTE7'@;
put 'aj49MDtqLS0pSD0oTCpIKygwfHRoaXMud29yZHNbal0pKSV5O3JldHVybiBIfSx3LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih5KXttKHk8PTY3MTA4ODYzKTtmb3IodmFyIEw9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPSgwfHRoaXMud29yZHNbSF0pKzY3MTA4ODY0Kkw7'@;
put 'dGhpcy53b3Jkc1tIXT1qL3l8MCxMPWoleX1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oeSl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oeSl7bSgwPT09eS5uZWdhdGl2ZSksbSgheS5pc1plcm8o'@;
put 'KSk7dmFyIEw9dGhpcyxIPXkuY2xvbmUoKTtMPTAhPT1MLm5lZ2F0aXZlP0wudW1vZCh5KTpMLmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLGc9bmV3IHcoMCksUz1uZXcgdygwKSx4PW5ldyB3KDEpLF89MDtMLmlzRXZlbigpJiZILmlzRXZlbigpOylMLml1c2hybigxKSxILml1c2hybigx'@;
put 'KSwrK187Zm9yKHZhciBwPUguY2xvbmUoKSxDPUwuY2xvbmUoKTshTC5pc1plcm8oKTspe2Zvcih2YXIgSz0wLG5lPTE7IShMLndvcmRzWzBdJm5lKSYmSzwyNjsrK0ssbmU8PD0xKTtpZihLPjApZm9yKEwuaXVzaHJuKEspO0stLSA+MDspKGouaXNPZGQoKXx8Zy5pc09kZCgpKSYmKGouaWFk'@;
put 'ZChwKSxnLmlzdWIoQykpLGouaXVzaHJuKDEpLGcuaXVzaHJuKDEpO2Zvcih2YXIgdWU9MCxoZT0xOyEoSC53b3Jkc1swXSZoZSkmJnVlPDI2OysrdWUsaGU8PD0xKTtpZih1ZT4wKWZvcihILml1c2hybih1ZSk7dWUtLSA+MDspKFMuaXNPZGQoKXx8eC5pc09kZCgpKSYmKFMuaWFkZChwKSx4'@;
put 'LmlzdWIoQykpLFMuaXVzaHJuKDEpLHguaXVzaHJuKDEpO0wuY21wKEgpPj0wPyhMLmlzdWIoSCksai5pc3ViKFMpLGcuaXN1Yih4KSk6KEguaXN1YihMKSxTLmlzdWIoaikseC5pc3ViKGcpKX1yZXR1cm57YTpTLGI6eCxnY2Q6SC5pdXNobG4oXyl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVu'@;
put 'Y3Rpb24oeSl7bSgwPT09eS5uZWdhdGl2ZSksbSgheS5pc1plcm8oKSk7dmFyIEssTD10aGlzLEg9eS5jbG9uZSgpO0w9MCE9PUwubmVnYXRpdmU/TC51bW9kKHkpOkwuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksZz1uZXcgdygwKSxTPUguY2xvbmUoKTtMLmNtcG4oMSk+MCYmSC5jbXBu'@;
put 'KDEpPjA7KXtmb3IodmFyIHg9MCxfPTE7IShMLndvcmRzWzBdJl8pJiZ4PDI2OysreCxfPDw9MSk7aWYoeD4wKWZvcihMLml1c2hybih4KTt4LS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKFMpLGouaXVzaHJuKDEpO2Zvcih2YXIgcD0wLEM9MTshKEgud29yZHNbMF0mQykmJnA8MjY7KytwLEM8'@;
put 'PD0xKTtpZihwPjApZm9yKEguaXVzaHJuKHApO3AtLSA+MDspZy5pc09kZCgpJiZnLmlhZGQoUyksZy5pdXNocm4oMSk7TC5jbXAoSCk+PTA/KEwuaXN1YihIKSxqLmlzdWIoZykpOihILmlzdWIoTCksZy5pc3ViKGopKX1yZXR1cm4oSz0wPT09TC5jbXBuKDEpP2o6ZykuY21wbigwKTwwJiZL'@;
put 'LmlhZGQoeSksS30sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHkpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHkuYWJzKCk7aWYoeS5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgTD10aGlzLmNsb25lKCksSD15LmNsb25lKCk7TC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3Io'@;
put 'dmFyIGo9MDtMLmlzRXZlbigpJiZILmlzRXZlbigpO2orKylMLml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7TC5pc0V2ZW4oKTspTC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hybigxKTt2YXIgZz1MLmNtcChIKTtpZihnPDApe3ZhciBTPUw7TD1ILEg9U31l'@;
put 'bHNlIGlmKDA9PT1nfHwwPT09SC5jbXBuKDEpKWJyZWFrO0wuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuZWdjZCh5KS5hLnVtb2QoeSl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0'@;
put 'aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ5fSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih5KXttKCJudW1iZXIi'@;
put 'PT10eXBlb2YgeSk7dmFyIEw9eSUyNixIPSh5LUwpLzI2LGo9MTw8TDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgZz1qLFM9SDswIT09ZyYmUzx0aGlzLmxlbmd0aDtTKyspe3ZhciB4PTB8dGhpcy53b3Jk'@;
put 'c1tTXTtnPSh4Kz1nKT4+PjI2LHRoaXMud29yZHNbU109eCY9NjcxMDg4NjN9cmV0dXJuIDAhPT1nJiYodGhpcy53b3Jkc1tTXT1nLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRz'@;
put 'WzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHkpe3ZhciBILEw9eTwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhTClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmTClyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSlIPTE7ZWxzZXtMJiYoeT0teSksbSh5'@;
put 'PD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgaj0wfHRoaXMud29yZHNbMF07SD1qPT09eT8wOmo8eT8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1IOkh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbih5KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVn'@;
put 'YXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBMPXRoaXMudWNtcCh5KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtTDpMfSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHkpe2lmKHRoaXMubGVuZ3RoPnkubGVuZ3Ro'@;
put 'KXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHkubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgTD0wLEg9dGhpcy5sZW5ndGgtMTtIPj0wO0gtLSl7dmFyIGo9MHx0aGlzLndvcmRzW0hdLGc9MHx5LndvcmRzW0hdO2lmKGohPT1nKXtqPGc/TD0tMTpqPmcmJihMPTEpO2JyZWFrfX1yZXR1cm4gTH0s'@;
put 'dy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHkpe3JldHVybiAxPT09dGhpcy5jbXBuKHkpfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbih5KXtyZXR1cm4gMT09PXRoaXMuY21wKHkpfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNtcG4oeSk+PTB9LHcucHJvdG90'@;
put 'eXBlLmd0ZT1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbXAoeSk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbih5KXtyZXR1cm4tMT09PXRoaXMuY21wbih5KX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24oeSl7cmV0dXJuLTE9PT10aGlzLmNtcCh5KX0sdy5wcm90b3R5cGUubHRlbj1m'@;
put 'dW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbXBuKHkpPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wKHkpPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24oeSl7cmV0dXJuIDA9PT10aGlzLmNtcG4oeSl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHkp'@;
put 'e3JldHVybiAwPT09dGhpcy5jbXAoeSl9LHcucmVkPWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgbGUoeSl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHkpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLG0oMD09PXRoaXMubmVn'@;
put 'YXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikseS5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHkpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9u'@;
put 'IGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLnJlZD15LHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHkpe3JldHVybiBtKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJl'@;
put 'ciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHkpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyx5KX0sdy5wcm90b3R5cGUu'@;
put 'cmVkSUFkZD1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyx5KX0sdy5wcm90b3R5'@;
put 'cGUucmVkU2hsPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9u'@;
put 'bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMseSksdGhpcy5yZWQubXVsKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl'@;
put 'ZC5fdmVyaWZ5Mih0aGlzLHkpLHRoaXMucmVkLmltdWwodGhpcyx5KX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIo'@;
put 'dGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0'@;
put 'aW9uKCl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRJbnZt'@;
put 'IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhp'@;
put 'cy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQmJiF5LnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx5KX07'@;
put 'dmFyIHE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBRKEcseSl7dGhpcy5uYW1lPUcsdGhpcy5wPW5ldyB3KHksMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5w'@;
put 'KSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiB0ZSgpe1EuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBhZSgpe1EuY2FsbCh0aGlzLCJwMjI0Iiwi'@;
put 'ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBzZSgpe1EuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBk'@;
put 'ZSgpe1EuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBsZShHKXtpZigic3RyaW5nIj09dHlwZW9mIEcpe3ZhciB5PXcuX3ByaW1lKEcpO3RoaXMubT15LnAsdGhp'@;
put 'cy5wcmltZT15fWVsc2UgbShHLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPUcsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGNlKEcpe2xlLmNhbGwodGhpcyxHKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYo'@;
put 'dGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vi'@;
put 'bigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVEucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4geS53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRo'@;
put 'aXMubi8xMykpLHl9LFEucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24oeSl7dmFyIEgsTD15O2Rve3RoaXMuc3BsaXQoTCx0aGlzLnRtcCksSD0oTD0oTD10aGlzLmltdWxLKEwpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoSD50aGlzLm4pO3ZhciBqPUg8dGhpcy5uPy0x'@;
put 'OkwudWNtcCh0aGlzLnApO3JldHVybiAwPT09aj8oTC53b3Jkc1swXT0wLEwubGVuZ3RoPTEpOmo+MD9MLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1MLnN0cmlwP0wuc3RyaXAoKTpMLl9zdHJpcCgpLEx9LFEucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHksTCl7eS5pdXNocm4odGhpcy5uLDAs'@;
put 'TCl9LFEucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHkpe3JldHVybiB5LmltdWwodGhpcy5rKX0sWCh0ZSxRKSx0ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oeSxMKXtmb3IodmFyIEg9NDE5NDMwMyxqPU1hdGgubWluKHkubGVuZ3RoLDkpLGc9MDtnPGo7ZysrKUwud29yZHNbZ109eS53'@;
put 'b3Jkc1tnXTtpZihMLmxlbmd0aD1qLHkubGVuZ3RoPD05KXJldHVybiB5LndvcmRzWzBdPTAsdm9pZCh5Lmxlbmd0aD0xKTt2YXIgUz15LndvcmRzWzldO2ZvcihMLndvcmRzW0wubGVuZ3RoKytdPVMmSCxnPTEwO2c8eS5sZW5ndGg7ZysrKXt2YXIgeD0wfHkud29yZHNbZ107eS53b3Jkc1tn'@;
put 'LTEwXT0oeCZIKTw8NHxTPj4+MjIsUz14fXkud29yZHNbZy0xMF09Uz4+Pj0yMix5Lmxlbmd0aC09MD09PVMmJnkubGVuZ3RoPjEwPzEwOjl9LHRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXt5LndvcmRzW3kubGVuZ3RoXT0wLHkud29yZHNbeS5sZW5ndGgrMV09MCx5Lmxlbmd0aCs9'@;
put 'Mjtmb3IodmFyIEw9MCxIPTA7SDx5Lmxlbmd0aDtIKyspe3ZhciBqPTB8eS53b3Jkc1tIXTt5LndvcmRzW0hdPTY3MTA4ODYzJihMKz05NzcqaiksTD02NCpqKyhMLzY3MTA4ODY0fDApfXJldHVybiAwPT09eS53b3Jkc1t5Lmxlbmd0aC0xXSYmKHkubGVuZ3RoLS0sMD09PXkud29yZHNbeS5s'@;
put 'ZW5ndGgtMV0mJnkubGVuZ3RoLS0pLHl9LFgoYWUsUSksWChzZSxRKSxYKGRlLFEpLGRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXtmb3IodmFyIEw9MCxIPTA7SDx5Lmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfHkud29yZHNbSF0pK0wsZz02NzEwODg2MyZqO2o+Pj49MjYseS53b3Jk'@;
put 'c1tIXT1nLEw9an1yZXR1cm4gMCE9PUwmJih5LndvcmRzW3kubGVuZ3RoKytdPUwpLHl9LHcuX3ByaW1lPWZ1bmN0aW9uKHkpe2lmKHFbeV0pcmV0dXJuIHFbeV07dmFyIEw7aWYoImsyNTYiPT09eSlMPW5ldyB0ZTtlbHNlIGlmKCJwMjI0Ij09PXkpTD1uZXcgYWU7ZWxzZSBpZigicDE5MiI9'@;
put 'PT15KUw9bmV3IHNlO2Vsc2V7aWYoInAyNTUxOSIhPT15KXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3kpO0w9bmV3IGRlfXJldHVybiBxW3ldPUwsTH0sbGUucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdp'@;
put 'dGggcG9zaXRpdmVzIiksbSh5LnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxsZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oeSxMKXttKCEoeS5uZWdhdGl2ZXxMLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxtKHkucmVkJiZ5'@;
put 'LnJlZD09PUwucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LGxlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh5KS5fZm9yY2VSZWQodGhpcyk6eS51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMp'@;
put 'fSxsZS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHkpe3JldHVybiB5LmlzWmVybygpP3kuY2xvbmUoKTp0aGlzLm0uc3ViKHkpLl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2YXIgSD15LmFkZChMKTtyZXR1cm4gSC5j'@;
put 'bXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LGxlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHksTCl7dGhpcy5fdmVyaWZ5Mih5LEwpO3ZhciBIPXkuaWFkZChMKTtyZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSH0sbGUucHJv'@;
put 'dG90eXBlLnN1Yj1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2YXIgSD15LnN1YihMKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxsZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2'@;
put 'YXIgSD15LmlzdWIoTCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSxsZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEoeSksdGhpcy5pbW9kKHkudXNobG4oTCkpfSxsZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih5LEwpe3Jl'@;
put 'dHVybiB0aGlzLl92ZXJpZnkyKHksTCksdGhpcy5pbW9kKHkuaW11bChMKSl9LGxlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih5LEwpLHRoaXMuaW1vZCh5Lm11bChMKSl9LGxlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlz'@;
put 'LmltdWwoeSx5LmNsb25lKCkpfSxsZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLm11bCh5LHkpfSxsZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih5KXtpZih5LmlzWmVybygpKXJldHVybiB5LmNsb25lKCk7dmFyIEw9dGhpcy5tLmFuZGxuKDMpO2lmKG0oTCUyPT0x'@;
put 'KSwzPT09TCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh5LEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxnPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylnKyssai5pdXNocm4oMSk7bSghai5pc1plcm8oKSk7dmFyIFM9bmV3'@;
put 'IHcoMSkudG9SZWQodGhpcykseD1TLnJlZE5lZygpLF89dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHA9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihwPW5ldyB3KDIqcCpwKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cocCxfKS5jbXAoeCk7KXAucmVkSUFkZCh4KTtmb3IodmFyIEM9dGhpcy5w'@;
put 'b3cocCxqKSxLPXRoaXMucG93KHksai5hZGRuKDEpLml1c2hybigxKSksbmU9dGhpcy5wb3coeSxqKSx1ZT1nOzAhPT1uZS5jbXAoUyk7KXtmb3IodmFyIGhlPW5lLHhlPTA7MCE9PWhlLmNtcChTKTt4ZSsrKWhlPWhlLnJlZFNxcigpO20oeGU8dWUpO3ZhciBPZT10aGlzLnBvdyhDLG5ldyB3'@;
put 'KDEpLml1c2hsbih1ZS14ZS0xKSk7Sz1LLnJlZE11bChPZSksQz1PZS5yZWRTcXIoKSxuZT1uZS5yZWRNdWwoQyksdWU9eGV9cmV0dXJuIEt9LGxlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3ZhciBMPXkuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1MLm5lZ2F0aXZlPyhMLm5lZ2F0'@;
put 'aXZlPTAsdGhpcy5pbW9kKEwpLnJlZE5lZygpKTp0aGlzLmltb2QoTCl9LGxlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oeSxMKXtpZihMLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09TC5jbXBuKDEpKXJldHVybiB5LmNsb25lKCk7dmFyIGo9bmV3IEFycmF5'@;
put 'KDE2KTtqWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGpbMV09eTtmb3IodmFyIGc9MjtnPGoubGVuZ3RoO2crKylqW2ddPXRoaXMubXVsKGpbZy0xXSx5KTt2YXIgUz1qWzBdLHg9MCxfPTAscD1MLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09cCYmKHA9MjYpLGc9TC5sZW5ndGgtMTtnPj0wO2ct'@;
put 'LSl7Zm9yKHZhciBDPUwud29yZHNbZ10sSz1wLTE7Sz49MDtLLS0pe3ZhciBuZT1DPj5LJjE7UyE9PWpbMF0mJihTPXRoaXMuc3FyKFMpKSwwIT09bmV8fDAhPT14Pyh4PDw9MSx4fD1uZSwoND09KytffHwwPT09ZyYmMD09PUspJiYoUz10aGlzLm11bChTLGpbeF0pLF89MCx4PTApKTpfPTB9'@;
put 'cD0yNn1yZXR1cm4gU30sbGUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih5KXt2YXIgTD15LnVtb2QodGhpcy5tKTtyZXR1cm4gTD09PXk/TC5jbG9uZSgpOkx9LGxlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih5KXt2YXIgTD15LmNsb25lKCk7cmV0dXJuIEwucmVkPW51'@;
put 'bGwsTH0sdy5tb250PWZ1bmN0aW9uKHkpe3JldHVybiBuZXcgY2UoeSl9LFgoY2UsbGUpLGNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuaW1vZCh5LnVzaGxuKHRoaXMuc2hpZnQpKX0sY2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHkpe3Zh'@;
put 'ciBMPXRoaXMuaW1vZCh5Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gTC5yZWQ9bnVsbCxMfSxjZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih5LEwpe2lmKHkuaXNaZXJvKCl8fEwuaXNaZXJvKCkpcmV0dXJuIHkud29yZHNbMF09MCx5Lmxlbmd0aD0xLHk7dmFyIEg9eS5pbXVsKEwpLGo9SC5t'@;
put 'YXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLFM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9TPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoUz1nLmlhZGQodGhp'@;
put 'cy5tKSksUy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSxMKXtpZih5LmlzWmVybygpfHxMLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9eS5tdWwoTCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYp'@;
put 'LmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxnPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksUz1nO3JldHVybiBnLmNtcCh0aGlzLm0pPj0wP1M9Zy5pc3ViKHRoaXMubSk6Zy5jbXBuKDApPDAmJihTPWcuaWFkZCh0aGlzLm0pKSxTLl9mb3JjZVJlZCh0aGlzKX0sY2UucHJv'@;
put 'dG90eXBlLmludm09ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuaW1vZCh5Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0oJGU9Ui5ubWQoJGUpLHRoaXMpfSw5MTk3MzpmdW5jdGlvbigkZSl7JGUuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtm'@;
put 'dW5jdGlvbiBTZShBZSl7cmV0dXJuKFNlPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKEJlKXtyZXR1cm4gdHlwZW9mIEJlfTpmdW5jdGlvbihCZSl7cmV0dXJuIEJlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s'@;
put 'JiZCZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmQmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBCZX0pKEFlKX1mdW5jdGlvbiBSKEFlLEJlKXtyZXR1cm4oUj1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGx0LEN0KXtyZXR1cm4gbHQuX19wcm90b19fPUN0LGx0'@;
put 'fSkoQWUsQmUpfWZ1bmN0aW9uIGIoQWUsQmUsb3Qpe3JldHVybihiPWZ1bmN0aW9uIGVlKCl7aWYodHlwZW9mIFJlZmxlY3Q+InUifHwhUmVmbGVjdC5jb25zdHJ1Y3R8fFJlZmxlY3QuY29uc3RydWN0LnNoYW0pcmV0dXJuITE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFByb3h5KXJldHVybiEw'@;
put 'O3RyeXtyZXR1cm4gQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sW10sZnVuY3Rpb24oKXt9KSksITB9Y2F0Y2h7cmV0dXJuITF9fSgpP1JlZmxlY3QuY29uc3RydWN0OmZ1bmN0aW9uKEN0LEZ0LFJ0KXt2YXIgWHQ9W251bGxdO1h0LnB1'@;
put 'c2guYXBwbHkoWHQsRnQpO3ZhciB6dD1uZXcoRnVuY3Rpb24uYmluZC5hcHBseShDdCxYdCkpO3JldHVybiBSdCYmUih6dCxSdC5wcm90b3R5cGUpLHp0fSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIG0oQWUpe3JldHVybiBmdW5jdGlvbiBYKEFlKXtpZihBcnJheS5pc0FycmF5'@;
put 'KEFlKSlyZXR1cm4gRChBZSl9KEFlKXx8ZnVuY3Rpb24gdyhBZSl7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPUFlW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPUFlWyJAQGl0ZXJhdG9yIl0pcmV0dXJuIEFycmF5LmZyb20oQWUpfShBZSl8fGZ1bmN0aW9uIEEoQWUsQmUpe2lmKEFlKXtp'@;
put 'Zigic3RyaW5nIj09dHlwZW9mIEFlKXJldHVybiBEKEFlLEJlKTt2YXIgb3Q9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEFlKS5zbGljZSg4LC0xKTtpZigiT2JqZWN0Ij09PW90JiZBZS5jb25zdHJ1Y3RvciYmKG90PUFlLmNvbnN0cnVjdG9yLm5hbWUpLCJNYXAiPT09b3R8fCJT'@;
put 'ZXQiPT09b3QpcmV0dXJuIEFycmF5LmZyb20oQWUpO2lmKCJBcmd1bWVudHMiPT09b3R8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG90KSlyZXR1cm4gRChBZSxCZSl9fShBZSl8fGZ1bmN0aW9uIFAoKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZh'@;
put 'bGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKX0oKX1mdW5jdGlvbiBEKEFlLEJlKXsobnVsbD09QmV8fEJl'@;
put 'PkFlLmxlbmd0aCkmJihCZT1BZS5sZW5ndGgpO2Zvcih2YXIgb3Q9MCxsdD1uZXcgQXJyYXkoQmUpO290PEJlO290KyspbHRbb3RdPUFlW290XTtyZXR1cm4gbHR9dmFyIFU9T2JqZWN0Lmhhc093blByb3BlcnR5LEk9T2JqZWN0LnNldFByb3RvdHlwZU9mLEU9T2JqZWN0LmlzRnJvemVuLGs9'@;
put 'T2JqZWN0LmdldFByb3RvdHlwZU9mLEI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixOPU9iamVjdC5mcmVlemUsVj1PYmplY3Quc2VhbCxaPU9iamVjdC5jcmVhdGUsVz10eXBlb2YgUmVmbGVjdDwidSImJlJlZmxlY3Qsej1XLmFwcGx5LHE9Vy5jb25zdHJ1Y3Q7enx8KHo9ZnVu'@;
put 'Y3Rpb24oQmUsb3QsbHQpe3JldHVybiBCZS5hcHBseShvdCxsdCl9KSxOfHwoTj1mdW5jdGlvbihCZSl7cmV0dXJuIEJlfSksVnx8KFY9ZnVuY3Rpb24oQmUpe3JldHVybiBCZX0pLHF8fChxPWZ1bmN0aW9uKEJlLG90KXtyZXR1cm4gYihCZSxtKG90KSl9KTt2YXIgUT1qKEFycmF5LnByb3Rv'@;
put 'dHlwZS5mb3JFYWNoKSx0ZT1qKEFycmF5LnByb3RvdHlwZS5wb3ApLGFlPWooQXJyYXkucHJvdG90eXBlLnB1c2gpLHNlPWooU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksZGU9aihTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nKSxsZT1qKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLGNl'@;
put 'PWooU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKSxHPWooU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mKSx5PWooU3RyaW5nLnByb3RvdHlwZS50cmltKSxMPWooUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxIPWZ1bmN0aW9uIGcoQWUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgQmU9YXJndW1l'@;
put 'bnRzLmxlbmd0aCxvdD1uZXcgQXJyYXkoQmUpLGx0PTA7bHQ8QmU7bHQrKylvdFtsdF09YXJndW1lbnRzW2x0XTtyZXR1cm4gcShBZSxvdCl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIGooQWUpe3JldHVybiBmdW5jdGlvbihCZSl7Zm9yKHZhciBvdD1hcmd1bWVudHMubGVuZ3RoLGx0PW5ldyBB'@;
put 'cnJheShvdD4xP290LTE6MCksQ3Q9MTtDdDxvdDtDdCsrKWx0W0N0LTFdPWFyZ3VtZW50c1tDdF07cmV0dXJuIHooQWUsQmUsbHQpfX1mdW5jdGlvbiBTKEFlLEJlLG90KXt2YXIgbHQ7b3Q9bnVsbCE9PShsdD1vdCkmJnZvaWQgMCE9PWx0P2x0OnNlLEkmJkkoQWUsbnVsbCk7Zm9yKHZhciBD'@;
put 'dD1CZS5sZW5ndGg7Q3QtLTspe3ZhciBGdD1CZVtDdF07aWYoInN0cmluZyI9PXR5cGVvZiBGdCl7dmFyIFJ0PW90KEZ0KTtSdCE9PUZ0JiYoRShCZSl8fChCZVtDdF09UnQpLEZ0PVJ0KX1BZVtGdF09ITB9cmV0dXJuIEFlfWZ1bmN0aW9uIHgoQWUpe3ZhciBvdCxCZT1aKG51bGwpO2Zvcihv'@;
put 'dCBpbiBBZSkhMD09PXooVSxBZSxbb3RdKSYmKEJlW290XT1BZVtvdF0pO3JldHVybiBCZX1mdW5jdGlvbiBfKEFlLEJlKXtmb3IoO251bGwhPT1BZTspe3ZhciBvdD1CKEFlLEJlKTtpZihvdCl7aWYob3QuZ2V0KXJldHVybiBqKG90LmdldCk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG90LnZh'@;
put 'bHVlKXJldHVybiBqKG90LnZhbHVlKX1BZT1rKEFlKX1yZXR1cm4gZnVuY3Rpb24gbHQoQ3Qpe3JldHVybiBjb25zb2xlLndhcm4oImZhbGxiYWNrIHZhbHVlIGZvciIsQ3QpLG51bGx9fXZhciBwPU4oWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXJlYSIsImFydGljbGUiLCJh'@;
put 'c2lkZSIsImF1ZGlvIiwiYiIsImJkaSIsImJkbyIsImJpZyIsImJsaW5rIiwiYmxvY2txdW90ZSIsImJvZHkiLCJiciIsImJ1dHRvbiIsImNhbnZhcyIsImNhcHRpb24iLCJjZW50ZXIiLCJjaXRlIiwiY29kZSIsImNvbCIsImNvbGdyb3VwIiwiY29udGVudCIsImRhdGEiLCJkYXRhbGlzdCIs'@;
put 'ImRkIiwiZGVjb3JhdG9yIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpYWxvZyIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbGVtZW50IiwiZW0iLCJmaWVsZHNldCIsImZpZ2NhcHRpb24iLCJmaWd1cmUiLCJmb250IiwiZm9vdGVyIiwiZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUi'@;
put 'LCJoNiIsImhlYWQiLCJoZWFkZXIiLCJoZ3JvdXAiLCJociIsImh0bWwiLCJpIiwiaW1nIiwiaW5wdXQiLCJpbnMiLCJrYmQiLCJsYWJlbCIsImxlZ2VuZCIsImxpIiwibWFpbiIsIm1hcCIsIm1hcmsiLCJtYXJxdWVlIiwibWVudSIsIm1lbnVpdGVtIiwibWV0ZXIiLCJuYXYiLCJub2JyIiwi'@;
put 'b2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwaWN0dXJlIiwicHJlIiwicHJvZ3Jlc3MiLCJxIiwicnAiLCJydCIsInJ1YnkiLCJzIiwic2FtcCIsInNlY3Rpb24iLCJzZWxlY3QiLCJzaGFkb3ciLCJzbWFsbCIsInNvdXJjZSIsInNwYWNlciIsInNwYW4iLCJzdHJpa2Ui'@;
put 'LCJzdHJvbmciLCJzdHlsZSIsInN1YiIsInN1bW1hcnkiLCJzdXAiLCJ0YWJsZSIsInRib2R5IiwidGQiLCJ0ZW1wbGF0ZSIsInRleHRhcmVhIiwidGZvb3QiLCJ0aCIsInRoZWFkIiwidGltZSIsInRyIiwidHJhY2siLCJ0dCIsInUiLCJ1bCIsInZhciIsInZpZGVvIiwid2JyIl0pLEM9Tihb'@;
put 'InN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwiYW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwi'@;
put 'Z2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIiLCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0'@;
put 'eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2aWV3Iiwidmtlcm4iXSksSz1OKFsiZmVCbGVuZCIsImZlQ29sb3JNYXRyaXgiLCJmZUNvbXBvbmVudFRyYW5zZmVyIiwiZmVDb21wb3NpdGUiLCJmZUNvbnZvbHZlTWF0cml4'@;
put 'IiwiZmVEaWZmdXNlTGlnaHRpbmciLCJmZURpc3BsYWNlbWVudE1hcCIsImZlRGlzdGFudExpZ2h0IiwiZmVGbG9vZCIsImZlRnVuY0EiLCJmZUZ1bmNCIiwiZmVGdW5jRyIsImZlRnVuY1IiLCJmZUdhdXNzaWFuQmx1ciIsImZlSW1hZ2UiLCJmZU1lcmdlIiwiZmVNZXJnZU5vZGUiLCJmZU1v'@;
put 'cnBob2xvZ3kiLCJmZU9mZnNldCIsImZlUG9pbnRMaWdodCIsImZlU3BlY3VsYXJMaWdodGluZyIsImZlU3BvdExpZ2h0IiwiZmVUaWxlIiwiZmVUdXJidWxlbmNlIl0pLG5lPU4oWyJhbmltYXRlIiwiY29sb3ItcHJvZmlsZSIsImN1cnNvciIsImRpc2NhcmQiLCJmZWRyb3BzaGFkb3ciLCJm'@;
put 'b250LWZhY2UiLCJmb250LWZhY2UtZm9ybWF0IiwiZm9udC1mYWNlLW5hbWUiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvcmVpZ25vYmplY3QiLCJoYXRjaCIsImhhdGNocGF0aCIsIm1lc2giLCJtZXNoZ3JhZGllbnQiLCJtZXNocGF0Y2giLCJtZXNocm93IiwibWlzc2lu'@;
put 'Zy1nbHlwaCIsInNjcmlwdCIsInNldCIsInNvbGlkY29sb3IiLCJ1bmtub3duIiwidXNlIl0pLHVlPU4oWyJtYXRoIiwibWVuY2xvc2UiLCJtZXJyb3IiLCJtZmVuY2VkIiwibWZyYWMiLCJtZ2x5cGgiLCJtaSIsIm1sYWJlbGVkdHIiLCJtbXVsdGlzY3JpcHRzIiwibW4iLCJtbyIsIm1vdmVy'@;
put 'IiwibXBhZGRlZCIsIm1waGFudG9tIiwibXJvb3QiLCJtcm93IiwibXMiLCJtc3BhY2UiLCJtc3FydCIsIm1zdHlsZSIsIm1zdWIiLCJtc3VwIiwibXN1YnN1cCIsIm10YWJsZSIsIm10ZCIsIm10ZXh0IiwibXRyIiwibXVuZGVyIiwibXVuZGVyb3ZlciJdKSxoZT1OKFsibWFjdGlvbiIsIm1h'@;
put 'bGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVzIiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSx4ZT1OKFsi'@;
put 'I3RleHQiXSksT2U9TihbImFjY2VwdCIsImFjdGlvbiIsImFsaWduIiwiYWx0IiwiYXV0b2NhcGl0YWxpemUiLCJhdXRvY29tcGxldGUiLCJhdXRvcGljdHVyZWlucGljdHVyZSIsImF1dG9wbGF5IiwiYmFja2dyb3VuZCIsImJnY29sb3IiLCJib3JkZXIiLCJjYXB0dXJlIiwiY2VsbHBhZGRp'@;
put 'bmciLCJjZWxsc3BhY2luZyIsImNoZWNrZWQiLCJjaXRlIiwiY2xhc3MiLCJjbGVhciIsImNvbG9yIiwiY29scyIsImNvbHNwYW4iLCJjb250cm9scyIsImNvbnRyb2xzbGlzdCIsImNvb3JkcyIsImNyb3Nzb3JpZ2luIiwiZGF0ZXRpbWUiLCJkZWNvZGluZyIsImRlZmF1bHQiLCJkaXIiLCJk'@;
put 'aXNhYmxlZCIsImRpc2FibGVwaWN0dXJlaW5waWN0dXJlIiwiZGlzYWJsZXJlbW90ZXBsYXliYWNrIiwiZG93bmxvYWQiLCJkcmFnZ2FibGUiLCJlbmN0eXBlIiwiZW50ZXJrZXloaW50IiwiZmFjZSIsImZvciIsImhlYWRlcnMiLCJoZWlnaHQiLCJoaWRkZW4iLCJoaWdoIiwiaHJlZiIsImhy'@;
put 'ZWZsYW5nIiwiaWQiLCJpbnB1dG1vZGUiLCJpbnRlZ3JpdHkiLCJpc21hcCIsImtpbmQiLCJsYWJlbCIsImxhbmciLCJsaXN0IiwibG9hZGluZyIsImxvb3AiLCJsb3ciLCJtYXgiLCJtYXhsZW5ndGgiLCJtZWRpYSIsIm1ldGhvZCIsIm1pbiIsIm1pbmxlbmd0aCIsIm11bHRpcGxlIiwibXV0'@;
put 'ZWQiLCJuYW1lIiwibm9uY2UiLCJub3NoYWRlIiwibm92YWxpZGF0ZSIsIm5vd3JhcCIsIm9wZW4iLCJvcHRpbXVtIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicGxheXNpbmxpbmUiLCJwb3N0ZXIiLCJwcmVsb2FkIiwicHViZGF0ZSIsInJhZGlvZ3JvdXAiLCJyZWFkb25seSIsInJlbCIs'@;
put 'InJlcXVpcmVkIiwicmV2IiwicmV2ZXJzZWQiLCJyb2xlIiwicm93cyIsInJvd3NwYW4iLCJzcGVsbGNoZWNrIiwic2NvcGUiLCJzZWxlY3RlZCIsInNoYXBlIiwic2l6ZSIsInNpemVzIiwic3BhbiIsInNyY2xhbmciLCJzdGFydCIsInNyYyIsInNyY3NldCIsInN0ZXAiLCJzdHlsZSIsInN1'@;
put 'bW1hcnkiLCJ0YWJpbmRleCIsInRpdGxlIiwidHJhbnNsYXRlIiwidHlwZSIsInVzZW1hcCIsInZhbGlnbiIsInZhbHVlIiwid2lkdGgiLCJ4bWxucyIsInNsb3QiXSksSGU9TihbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1lbnQtYmFzZWxpbmUiLCJh'@;
put 'c2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlwLXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIs'@;
put 'ImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9uIiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIi'@;
put 'LCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImZpbGwiLCJmaWxsLW9wYWNpdHkiLCJmaWxsLXJ1bGUiLCJmaWx0ZXIiLCJmaWx0ZXJ1bml0cyIsImZsb29kLWNvbG9yIiwiZmxvb2Qtb3BhY2l0eSIsImZvbnQtZmFtaWx5IiwiZm9udC1zaXplIiwiZm9udC1zaXplLWFkanVzdCIsImZv'@;
put 'bnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXZhcmlhbnQiLCJmb250LXdlaWdodCIsImZ4IiwiZnkiLCJnMSIsImcyIiwiZ2x5cGgtbmFtZSIsImdseXBocmVmIiwiZ3JhZGllbnR1bml0cyIsImdyYWRpZW50dHJhbnNmb3JtIiwiaGVpZ2h0IiwiaHJlZiIsImlkIiwiaW1hZ2UtcmVu'@;
put 'ZGVyaW5nIiwiaW4iLCJpbjIiLCJrIiwiazEiLCJrMiIsImszIiwiazQiLCJrZXJuaW5nIiwia2V5cG9pbnRzIiwia2V5c3BsaW5lcyIsImtleXRpbWVzIiwibGFuZyIsImxlbmd0aGFkanVzdCIsImxldHRlci1zcGFjaW5nIiwia2VybmVsbWF0cml4Iiwia2VybmVsdW5pdGxlbmd0aCIsImxp'@;
put 'Z2h0aW5nLWNvbG9yIiwibG9jYWwiLCJtYXJrZXItZW5kIiwibWFya2VyLW1pZCIsIm1hcmtlci1zdGFydCIsIm1hcmtlcmhlaWdodCIsIm1hcmtlcnVuaXRzIiwibWFya2Vyd2lkdGgiLCJtYXNrY29udGVudHVuaXRzIiwibWFza3VuaXRzIiwibWF4IiwibWFzayIsIm1lZGlhIiwibWV0aG9k'@;
put 'IiwibW9kZSIsIm1pbiIsIm5hbWUiLCJudW1vY3RhdmVzIiwib2Zmc2V0Iiwib3BlcmF0b3IiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcmllbnQiLCJvcmllbnRhdGlvbiIsIm9yaWdpbiIsIm92ZXJmbG93IiwicGFpbnQtb3JkZXIiLCJwYXRoIiwicGF0aGxlbmd0aCIsInBhdHRlcm5jb250ZW50'@;
put 'dW5pdHMiLCJwYXR0ZXJudHJhbnNmb3JtIiwicGF0dGVybnVuaXRzIiwicG9pbnRzIiwicHJlc2VydmVhbHBoYSIsInByZXNlcnZlYXNwZWN0cmF0aW8iLCJwcmltaXRpdmV1bml0cyIsInIiLCJyeCIsInJ5IiwicmFkaXVzIiwicmVmeCIsInJlZnkiLCJyZXBlYXRjb3VudCIsInJlcGVhdGR1'@;
put 'ciIsInJlc3RhcnQiLCJyZXN1bHQiLCJyb3RhdGUiLCJzY2FsZSIsInNlZWQiLCJzaGFwZS1yZW5kZXJpbmciLCJzcGVjdWxhcmNvbnN0YW50Iiwic3BlY3VsYXJleHBvbmVudCIsInNwcmVhZG1ldGhvZCIsInN0YXJ0b2Zmc2V0Iiwic3RkZGV2aWF0aW9uIiwic3RpdGNodGlsZXMiLCJzdG9w'@;
put 'LWNvbG9yIiwic3RvcC1vcGFjaXR5Iiwic3Ryb2tlLWRhc2hhcnJheSIsInN0cm9rZS1kYXNob2Zmc2V0Iiwic3Ryb2tlLWxpbmVjYXAiLCJzdHJva2UtbGluZWpvaW4iLCJzdHJva2UtbWl0ZXJsaW1pdCIsInN0cm9rZS1vcGFjaXR5Iiwic3Ryb2tlIiwic3Ryb2tlLXdpZHRoIiwic3R5bGUi'@;
put 'LCJzdXJmYWNlc2NhbGUiLCJzeXN0ZW1sYW5ndWFnZSIsInRhYmluZGV4IiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2luIiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwi'@;
put 'dTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZlcnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVj'@;
put 'dG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLEVlPU4oWyJhY2NlbnQiLCJhY2NlbnR1bmRlciIsImFsaWduIiwiYmV2ZWxsZWQiLCJjbG9zZSIsImNvbHVtbnNhbGlnbiIsImNvbHVtbmxpbmVzIiwi'@;
put 'Y29sdW1uc3BhbiIsImRlbm9tYWxpZ24iLCJkZXB0aCIsImRpciIsImRpc3BsYXkiLCJkaXNwbGF5c3R5bGUiLCJlbmNvZGluZyIsImZlbmNlIiwiZnJhbWUiLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJsYXJnZW9wIiwibGVuZ3RoIiwibGluZXRoaWNrbmVzcyIsImxzcGFjZSIsImxxdW90ZSIs'@;
put 'Im1hdGhiYWNrZ3JvdW5kIiwibWF0aGNvbG9yIiwibWF0aHNpemUiLCJtYXRodmFyaWFudCIsIm1heHNpemUiLCJtaW5zaXplIiwibW92YWJsZWxpbWl0cyIsIm5vdGF0aW9uIiwibnVtYWxpZ24iLCJvcGVuIiwicm93YWxpZ24iLCJyb3dsaW5lcyIsInJvd3NwYWNpbmciLCJyb3dzcGFuIiwi'@;
put 'cnNwYWNlIiwicnF1b3RlIiwic2NyaXB0bGV2ZWwiLCJzY3JpcHRtaW5zaXplIiwic2NyaXB0c2l6ZW11bHRpcGxpZXIiLCJzZWxlY3Rpb24iLCJzZXBhcmF0b3IiLCJzZXBhcmF0b3JzIiwic3RyZXRjaHkiLCJzdWJzY3JpcHRzaGlmdCIsInN1cHNjcmlwdHNoaWZ0Iiwic3ltbWV0cmljIiwi'@;
put 'dm9mZnNldCIsIndpZHRoIiwieG1sbnMiXSksTGU9TihbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhsaW5rIl0pLE5lPVYoL1x7XHtbXHdcV10qfFtcd1xXXSpcfVx9L2dtKSxLZT1WKC88JVtcd1xXXSp8W1x3XFddKiU+L2dtKSxVZT1W'@;
put 'KC9cJHtbXHdcV10qfS9nbSksWGU9VigvXmRhdGEtW1wtXHcuXHUwMEI3LVx1RkZGRl0vKSxhdD1WKC9eYXJpYS1bXC1cd10rJC8pLEZlPVYoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQp'@;
put 'KS9pKSxDZT1WKC9eKD86XHcrc2NyaXB0fGRhdGEpOi9pKSxEZT1WKC9bXHUwMDAwLVx1MDAyMFx1MDBBMFx1MTY4MFx1MTgwRVx1MjAwMC1cdTIwMjlcdTIwNUZcdTMwMDBdL2cpLFJlPVYoL15odG1sJC9pKSxldD1WKC9eW2Etel1bLlx3XSooLVsuXHddKykrJC9pKTtyZXR1cm4gZnVuY3Rp'@;
put 'b24gZHQoKXt2YXIgQWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnR5cGVvZiB3aW5kb3c+InUiP251bGw6d2luZG93LEJlPWZ1bmN0aW9uKCRuKXtyZXR1cm4gZHQoJG4pfTtpZihCZS52ZXJzaW9uPSIyLjUuMiIsQmUucmVtb3ZlZD1b'@;
put 'XSwhQWV8fCFBZS5kb2N1bWVudHx8OSE9PUFlLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBCZS5pc1N1cHBvcnRlZD0hMSxCZTt2YXIgb3Q9QWUuZG9jdW1lbnQsbHQ9QWUuZG9jdW1lbnQsQ3Q9QWUuRG9jdW1lbnRGcmFnbWVudCxGdD1BZS5IVE1MVGVtcGxhdGVFbGVtZW50LFJ0PUFlLk5v'@;
put 'ZGUsWHQ9QWUuRWxlbWVudCxTbj1BZS5Ob2RlRmlsdGVyLHp0PUFlLk5hbWVkTm9kZU1hcCx2bj12b2lkIDA9PT16dD9BZS5OYW1lZE5vZGVNYXB8fEFlLk1vek5hbWVkQXR0ck1hcDp6dCxCbj1BZS5IVE1MRm9ybUVsZW1lbnQsdG49QWUuRE9NUGFyc2VyLFpuPUFlLnRydXN0ZWRUeXBlcyxP'@;
put 'bj1YdC5wcm90b3R5cGUscHQ9XyhPbiwiY2xvbmVOb2RlIiksZm49XyhPbiwibmV4dFNpYmxpbmciKSxkbj1fKE9uLCJjaGlsZE5vZGVzIiksTXQ9XyhPbiwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGdCl7dmFyIFl0PWx0LmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7'@;
put 'WXQuY29udGVudCYmWXQuY29udGVudC5vd25lckRvY3VtZW50JiYobHQ9WXQuY29udGVudC5vd25lckRvY3VtZW50KX12YXIgX3Q9ZnVuY3Rpb24oQmUsb3Qpe2lmKCJvYmplY3QiIT09U2UoQmUpfHwiZnVuY3Rpb24iIT10eXBlb2YgQmUuY3JlYXRlUG9saWN5KXJldHVybiBudWxsO3ZhciBs'@;
put 'dD1udWxsLEN0PSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO290LmN1cnJlbnRTY3JpcHQmJm90LmN1cnJlbnRTY3JpcHQuaGFzQXR0cmlidXRlKEN0KSYmKGx0PW90LmN1cnJlbnRTY3JpcHQuZ2V0QXR0cmlidXRlKEN0KSk7dmFyIEZ0PSJkb21wdXJpZnkiKyhsdD8iIyIrbHQ6IiIpO3RyeXty'@;
put 'ZXR1cm4gQmUuY3JlYXRlUG9saWN5KEZ0LHtjcmVhdGVIVE1MOmZ1bmN0aW9uKFh0KXtyZXR1cm4gWHR9LGNyZWF0ZVNjcmlwdFVSTDpmdW5jdGlvbihYdCl7cmV0dXJuIFh0fX0pfWNhdGNoe3JldHVybiBjb25zb2xlLndhcm4oIlRydXN0ZWRUeXBlcyBwb2xpY3kgIitGdCsiIGNvdWxkIG5v'@;
put 'dCBiZSBjcmVhdGVkLiIpLG51bGx9fShabixvdCksanQ9X3Q/X3QuY3JlYXRlSFRNTCgiIik6IiIscnQ9bHQuaW1wbGVtZW50YXRpb24sRXQ9bHQuY3JlYXRlTm9kZUl0ZXJhdG9yLFF0PWx0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQsVHQ9bHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUsbXQ9b3Qu'@;
put 'aW1wb3J0Tm9kZSxHdD17fTt0cnl7R3Q9eChsdCkuZG9jdW1lbnRNb2RlP2x0LmRvY3VtZW50TW9kZTp7fX1jYXRjaHt9dmFyIGtuPXt9O0JlLmlzU3VwcG9ydGVkPSJmdW5jdGlvbiI9PXR5cGVvZiBNdCYmcnQmJnZvaWQgMCE9PXJ0LmNyZWF0ZUhUTUxEb2N1bWVudCYmOSE9PUd0O3ZhciBx'@;
put 'YSxNbCxCdD1OZSxibj1LZSxDbj1VZSxlbj1YZSxQbj1hdCx3bj1DZSwkdD1EZSxXbj1ldCxjaT1GZSxsbj1udWxsLG5uPVMoe30sW10uY29uY2F0KG0ocCksbShDKSxtKEspLG0odWUpLG0oeGUpKSksdWk9bnVsbCxBcj1TKHt9LFtdLmNvbmNhdChtKE9lKSxtKEhlKSxtKEVlKSxtKExlKSkp'@;
put 'LG1yPU9iamVjdC5zZWFsKE9iamVjdC5jcmVhdGUobnVsbCx7dGFnTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhdHRyaWJ1dGVOYW1lQ2hlY2s6e3dyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEw'@;
put 'LHZhbHVlOm51bGx9LGFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50czp7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6ITF9fSkpLHlpPW51bGwsJHI9bnVsbCxKaT0hMCx5cj0hMCxJaT0hMSxubz0hMCx6bj0hMSxaaT0hMCxXaT0hMSxvbz0hMSxo'@;
put 'bz0hMSxMcj0hMSxCaT0hMSxMbz0hMSxLbz0hMCxlcz0hMSx1Yz0hMCxJbD0hMSxBYz17fSxCMD1udWxsLFNzPVMoe30sWyJhbm5vdGF0aW9uLXhtbCIsImF1ZGlvIiwiY29sZ3JvdXAiLCJkZXNjIiwiZm9yZWlnbm9iamVjdCIsImhlYWQiLCJpZnJhbWUiLCJtYXRoIiwibWkiLCJtbiIsIm1v'@;
put 'IiwibXMiLCJtdGV4dCIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsIm5vc2NyaXB0IiwicGxhaW50ZXh0Iiwic2NyaXB0Iiwic3R5bGUiLCJzdmciLCJ0ZW1wbGF0ZSIsInRoZWFkIiwidGl0bGUiLCJ2aWRlbyIsInhtcCJdKSxfdT1udWxsLEV1PVMoe30sWyJhdWRpbyIsInZpZGVvIiwiaW1nIiwi'@;
put 'c291cmNlIiwiaW1hZ2UiLCJ0cmFjayJdKSxybz1udWxsLHdsPVMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxkcj0iaHR0'@;
put 'cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCIsWTA9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixmMD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsVXU9ZjAsUHM9ITEsVGk9bnVsbCwkYT1TKHt9LFtkcixZMCxmMF0sZGUpLHhwPVsiYXBwbGljYXRpb24veGh0bWwr'@;
put 'eG1sIiwidGV4dC9odG1sIl0sVmE9bnVsbCx2aD1sdC5jcmVhdGVFbGVtZW50KCJmb3JtIiksWmY9ZnVuY3Rpb24oJG4pe3JldHVybiAkbiBpbnN0YW5jZW9mIFJlZ0V4cHx8JG4gaW5zdGFuY2VvZiBGdW5jdGlvbn0sVHU9ZnVuY3Rpb24oJG4pe1ZhJiZWYT09PSRufHwoKCEkbnx8Im9iamVj'@;
put 'dCIhPT1TZSgkbikpJiYoJG49e30pLCRuPXgoJG4pLHFhPXFhPS0xPT09eHAuaW5kZXhPZigkbi5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6JG4uUEFSU0VSX01FRElBX1RZUEUsTWw9ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1xYT9kZTpzZSxsbj0iQUxMT1dFRF9UQUdTImlu'@;
put 'ICRuP1Moe30sJG4uQUxMT1dFRF9UQUdTLE1sKTpubix1aT0iQUxMT1dFRF9BVFRSImluICRuP1Moe30sJG4uQUxMT1dFRF9BVFRSLE1sKTpBcixUaT0iQUxMT1dFRF9OQU1FU1BBQ0VTImluICRuP1Moe30sJG4uQUxMT1dFRF9OQU1FU1BBQ0VTLGRlKTokYSxybz0iQUREX1VSSV9TQUZFX0FU'@;
put 'VFIiaW4gJG4/Uyh4KHdsKSwkbi5BRERfVVJJX1NBRkVfQVRUUixNbCk6d2wsX3U9IkFERF9EQVRBX1VSSV9UQUdTImluICRuP1MoeChFdSksJG4uQUREX0RBVEFfVVJJX1RBR1MsTWwpOkV1LEIwPSJGT1JCSURfQ09OVEVOVFMiaW4gJG4/Uyh7fSwkbi5GT1JCSURfQ09OVEVOVFMsTWwpOlNz'@;
put 'LHlpPSJGT1JCSURfVEFHUyJpbiAkbj9TKHt9LCRuLkZPUkJJRF9UQUdTLE1sKTp7fSwkcj0iRk9SQklEX0FUVFIiaW4gJG4/Uyh7fSwkbi5GT1JCSURfQVRUUixNbCk6e30sQWM9IlVTRV9QUk9GSUxFUyJpbiAkbiYmJG4uVVNFX1BST0ZJTEVTLEppPSExIT09JG4uQUxMT1dfQVJJQV9BVFRS'@;
put 'LHlyPSExIT09JG4uQUxMT1dfREFUQV9BVFRSLElpPSRuLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSxubz0hMSE9PSRuLkFMTE9XX1NFTEZfQ0xPU0VfSU5fQVRUUix6bj0kbi5TQUZFX0ZPUl9URU1QTEFURVN8fCExLFppPSExIT09JG4uU0FGRV9GT1JfWE1MLFdpPSRuLldIT0xFX0RP'@;
put 'Q1VNRU5UfHwhMSxMcj0kbi5SRVRVUk5fRE9NfHwhMSxCaT0kbi5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxMbz0kbi5SRVRVUk5fVFJVU1RFRF9UWVBFfHwhMSxobz0kbi5GT1JDRV9CT0RZfHwhMSxLbz0hMSE9PSRuLlNBTklUSVpFX0RPTSxlcz0kbi5TQU5JVElaRV9OQU1FRF9QUk9QU3x8'@;
put 'ITEsdWM9ITEhPT0kbi5LRUVQX0NPTlRFTlQsSWw9JG4uSU5fUExBQ0V8fCExLGNpPSRuLkFMTE9XRURfVVJJX1JFR0VYUHx8Y2ksVXU9JG4uTkFNRVNQQUNFfHxmMCxtcj0kbi5DVVNUT01fRUxFTUVOVF9IQU5ETElOR3x8e30sJG4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJlpmKCRuLkNV'@;
put 'U1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjaykmJihtci50YWdOYW1lQ2hlY2s9JG4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSwkbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmWmYoJG4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFt'@;
put 'ZUNoZWNrKSYmKG1yLmF0dHJpYnV0ZU5hbWVDaGVjaz0kbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spLCRuLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiYiYm9vbGVhbiI9PXR5cGVvZiAkbi5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6'@;
put 'ZWRCdWlsdEluRWxlbWVudHMmJihtci5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM9JG4uQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzKSx6biYmKHlyPSExKSxCaSYmKExyPSEwKSxBYyYmKGxuPVMoe30sbSh4ZSkpLHVpPVtdLCEw'@;
put 'PT09QWMuaHRtbCYmKFMobG4scCksUyh1aSxPZSkpLCEwPT09QWMuc3ZnJiYoUyhsbixDKSxTKHVpLEhlKSxTKHVpLExlKSksITA9PT1BYy5zdmdGaWx0ZXJzJiYoUyhsbixLKSxTKHVpLEhlKSxTKHVpLExlKSksITA9PT1BYy5tYXRoTWwmJihTKGxuLHVlKSxTKHVpLEVlKSxTKHVpLExlKSkp'@;
put 'LCRuLkFERF9UQUdTJiYobG49PT1ubiYmKGxuPXgobG4pKSxTKGxuLCRuLkFERF9UQUdTLE1sKSksJG4uQUREX0FUVFImJih1aT09PUFyJiYodWk9eCh1aSkpLFModWksJG4uQUREX0FUVFIsTWwpKSwkbi5BRERfVVJJX1NBRkVfQVRUUiYmUyhybywkbi5BRERfVVJJX1NBRkVfQVRUUixNbCks'@;
put 'JG4uRk9SQklEX0NPTlRFTlRTJiYoQjA9PT1TcyYmKEIwPXgoQjApKSxTKEIwLCRuLkZPUkJJRF9DT05URU5UUyxNbCkpLHVjJiYobG5bIiN0ZXh0Il09ITApLFdpJiZTKGxuLFsiaHRtbCIsImhlYWQiLCJib2R5Il0pLGxuLnRhYmxlJiYoUyhsbixbInRib2R5Il0pLGRlbGV0ZSB5aS50Ym9k'@;
put 'eSksTiYmTigkbiksVmE9JG4pfSx4Mj1TKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJtdGV4dCJdKSxiZD1TKHt9LFsiZm9yZWlnbm9iamVjdCIsImFubm90YXRpb24teG1sIl0pLFdmPVMoe30sWyJ0aXRsZSIsInN0eWxlIiwiZm9udCIsImEiLCJzY3JpcHQiXSksejA9Uyh7fSxDKTtTKHow'@;
put 'LEspLFMoejAsbmUpO3ZhciBZbD1TKHt9LHVlKTtTKFlsLGhlKTt2YXIgTGM9ZnVuY3Rpb24oJG4pe2FlKEJlLnJlbW92ZWQse2VsZW1lbnQ6JG59KTt0cnl7JG4ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCgkbil9Y2F0Y2h7dHJ5eyRuLm91dGVySFRNTD1qdH1jYXRjaHskbi5yZW1vdmUoKX19'@;
put 'fSx4MT1mdW5jdGlvbigkbixlaSl7dHJ5e2FlKEJlLnJlbW92ZWQse2F0dHJpYnV0ZTplaS5nZXRBdHRyaWJ1dGVOb2RlKCRuKSxmcm9tOmVpfSl9Y2F0Y2h7YWUoQmUucmVtb3ZlZCx7YXR0cmlidXRlOm51bGwsZnJvbTplaX0pfWlmKGVpLnJlbW92ZUF0dHJpYnV0ZSgkbiksImlzIj09PSRu'@;
put 'JiYhdWlbJG5dKWlmKExyfHxCaSl0cnl7TGMoZWkpfWNhdGNoe31lbHNlIHRyeXtlaS5zZXRBdHRyaWJ1dGUoJG4sIiIpfWNhdGNoe319LGsyPWZ1bmN0aW9uKCRuKXt2YXIgZWksQnI7aWYoaG8pJG49IjxyZW1vdmU+PC9yZW1vdmU+IiskbjtlbHNle3ZhciBFbz1sZSgkbiwvXltcclxuXHQg'@;
put 'XSsvKTtCcj1FbyYmRW9bMF19ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1xYSYmVXU9PT1mMCYmKCRuPSc8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+PGhlYWQ+PC9oZWFkPjxib2R5PicrJG4rIjwvYm9keT48L2h0bWw+Iik7dmFyIFlyPV90P190LmNyZWF0'@;
put 'ZUhUTUwoJG4pOiRuO2lmKFV1PT09ZjApdHJ5e2VpPShuZXcgdG4pLnBhcnNlRnJvbVN0cmluZyhZcixxYSl9Y2F0Y2h7fWlmKCFlaXx8IWVpLmRvY3VtZW50RWxlbWVudCl7ZWk9cnQuY3JlYXRlRG9jdW1lbnQoVXUsInRlbXBsYXRlIixudWxsKTt0cnl7ZWkuZG9jdW1lbnRFbGVtZW50Lmlu'@;
put 'bmVySFRNTD1Qcz9qdDpZcn1jYXRjaHt9fXZhciBsbD1laS5ib2R5fHxlaS5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuICRuJiZCciYmbGwuaW5zZXJ0QmVmb3JlKGx0LmNyZWF0ZVRleHROb2RlKEJyKSxsbC5jaGlsZE5vZGVzWzBdfHxudWxsKSxVdT09PWYwP1R0LmNhbGwoZWksV2k/Imh0bWwi'@;
put 'OiJib2R5IilbMF06V2k/ZWkuZG9jdW1lbnRFbGVtZW50OmxsfSx3ZD1mdW5jdGlvbigkbil7cmV0dXJuIEV0LmNhbGwoJG4ub3duZXJEb2N1bWVudHx8JG4sJG4sU24uU0hPV19FTEVNRU5UfFNuLlNIT1dfQ09NTUVOVHxTbi5TSE9XX1RFWFR8U24uU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNU'@;
put 'SU9OfFNuLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsLCExKX0sbHI9ZnVuY3Rpb24oJG4pe3JldHVybiJvYmplY3QiPT09U2UoUnQpPyRuIGluc3RhbmNlb2YgUnQ6JG4mJiJvYmplY3QiPT09U2UoJG4pJiYibnVtYmVyIj09dHlwZW9mICRuLm5vZGVUeXBlJiYic3RyaW5nIj09dHlwZW9mICRu'@;
put 'Lm5vZGVOYW1lfSxkYz1mdW5jdGlvbigkbixlaSxCcil7a25bJG5dJiZRKGtuWyRuXSxmdW5jdGlvbihFbyl7RW8uY2FsbChCZSxlaSxCcixWYSl9KX0sX2k9ZnVuY3Rpb24oJG4pe3ZhciBlaTtpZihkYygiYmVmb3JlU2FuaXRpemVFbGVtZW50cyIsJG4sbnVsbCksZnVuY3Rpb24oJG4pe3Jl'@;
put 'dHVybiAkbiBpbnN0YW5jZW9mIEJuJiYodHlwZW9mICRuLl9fZGVwdGg8InUiJiYibnVtYmVyIiE9dHlwZW9mICRuLl9fZGVwdGh8fHR5cGVvZiAkbi5fX3JlbW92YWxDb3VudDwidSImJiJudW1iZXIiIT10eXBlb2YgJG4uX19yZW1vdmFsQ291bnR8fCJzdHJpbmciIT10eXBlb2YgJG4ubm9k'@;
put 'ZU5hbWV8fCJzdHJpbmciIT10eXBlb2YgJG4udGV4dENvbnRlbnR8fCJmdW5jdGlvbiIhPXR5cGVvZiAkbi5yZW1vdmVDaGlsZHx8ISgkbi5hdHRyaWJ1dGVzIGluc3RhbmNlb2Ygdm4pfHwiZnVuY3Rpb24iIT10eXBlb2YgJG4ucmVtb3ZlQXR0cmlidXRlfHwiZnVuY3Rpb24iIT10eXBlb2Yg'@;
put 'JG4uc2V0QXR0cmlidXRlfHwic3RyaW5nIiE9dHlwZW9mICRuLm5hbWVzcGFjZVVSSXx8ImZ1bmN0aW9uIiE9dHlwZW9mICRuLmluc2VydEJlZm9yZXx8ImZ1bmN0aW9uIiE9dHlwZW9mICRuLmhhc0NoaWxkTm9kZXMpfSgkbil8fEwoL1tcdTAwODAtXHVGRkZGXS8sJG4ubm9kZU5hbWUpKXJl'@;
put 'dHVybiBMYygkbiksITA7dmFyIEJyPU1sKCRuLm5vZGVOYW1lKTtpZihkYygidXBvblNhbml0aXplRWxlbWVudCIsJG4se3RhZ05hbWU6QnIsYWxsb3dlZFRhZ3M6bG59KSwkbi5oYXNDaGlsZE5vZGVzKCkmJiFscigkbi5maXJzdEVsZW1lbnRDaGlsZCkmJighbHIoJG4uY29udGVudCl8fCFs'@;
put 'cigkbi5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkmJkwoLzxbL1x3XS9nLCRuLmlubmVySFRNTCkmJkwoLzxbL1x3XS9nLCRuLnRleHRDb250ZW50KXx8InNlbGVjdCI9PT1CciYmTCgvPHRlbXBsYXRlL2ksJG4uaW5uZXJIVE1MKXx8Nz09PSRuLm5vZGVUeXBlfHxaaSYmOD09PSRuLm5v'@;
put 'ZGVUeXBlJiZMKC88Wy9cd10vZywkbi5kYXRhKSlyZXR1cm4gTGMoJG4pLCEwO2lmKCFsbltCcl18fHlpW0JyXSl7aWYoIXlpW0JyXSYmUmMoQnIpJiYobXIudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiZMKG1yLnRhZ05hbWVDaGVjayxCcil8fG1yLnRhZ05hbWVDaGVjayBpbnN0'@;
put 'YW5jZW9mIEZ1bmN0aW9uJiZtci50YWdOYW1lQ2hlY2soQnIpKSlyZXR1cm4hMTtpZih1YyYmIUIwW0JyXSl7dmFyIEVvPU10KCRuKXx8JG4ucGFyZW50Tm9kZSxZcj1kbigkbil8fCRuLmNoaWxkTm9kZXM7aWYoWXImJkVvKWZvcih2YXIgTWE9WXIubGVuZ3RoLTE7TWE+PTA7LS1NYSl7dmFy'@;
put 'IFpzPXB0KFlyW01hXSwhMCk7WnMuX19yZW1vdmFsQ291bnQ9KCRuLl9fcmVtb3ZhbENvdW50fHwwKSsxLEVvLmluc2VydEJlZm9yZShacyxmbigkbikpfX1yZXR1cm4gTGMoJG4pLCEwfXJldHVybiAkbiBpbnN0YW5jZW9mIFh0JiYhZnVuY3Rpb24oJG4pe3ZhciBlaT1NdCgkbik7KCFlaXx8'@;
put 'IWVpLnRhZ05hbWUpJiYoZWk9e25hbWVzcGFjZVVSSTpVdSx0YWdOYW1lOiJ0ZW1wbGF0ZSJ9KTt2YXIgQnI9c2UoJG4udGFnTmFtZSksRW89c2UoZWkudGFnTmFtZSk7cmV0dXJuISFUaVskbi5uYW1lc3BhY2VVUkldJiYoJG4ubmFtZXNwYWNlVVJJPT09WTA/ZWkubmFtZXNwYWNlVVJJPT09'@;
put 'ZjA/InN2ZyI9PT1CcjplaS5uYW1lc3BhY2VVUkk9PT1kcj8ic3ZnIj09PUJyJiYoImFubm90YXRpb24teG1sIj09PUVvfHx4MltFb10pOiEhejBbQnJdOiRuLm5hbWVzcGFjZVVSST09PWRyP2VpLm5hbWVzcGFjZVVSST09PWYwPyJtYXRoIj09PUJyOmVpLm5hbWVzcGFjZVVSST09PVkwPyJt'@;
put 'YXRoIj09PUJyJiZiZFtFb106ISFZbFtCcl06JG4ubmFtZXNwYWNlVVJJPT09ZjA/IShlaS5uYW1lc3BhY2VVUkk9PT1ZMCYmIWJkW0VvXXx8ZWkubmFtZXNwYWNlVVJJPT09ZHImJiF4MltFb10pJiYhWWxbQnJdJiYoV2ZbQnJdfHwhejBbQnJdKTohKCJhcHBsaWNhdGlvbi94aHRtbCt4bWwi'@;
put 'IT09cWF8fCFUaVskbi5uYW1lc3BhY2VVUkldKSl9KCRuKXx8KCJub3NjcmlwdCI9PT1Ccnx8Im5vZW1iZWQiPT09QnJ8fCJub2ZyYW1lcyI9PT1CcikmJkwoLzxcL25vKHNjcmlwdHxlbWJlZHxmcmFtZXMpL2ksJG4uaW5uZXJIVE1MKT8oTGMoJG4pLCEwKTooem4mJjM9PT0kbi5ub2RlVHlw'@;
put 'ZSYmKGVpPWNlKGVpPSRuLnRleHRDb250ZW50LEJ0LCIgIiksZWk9Y2UoZWksYm4sIiAiKSxlaT1jZShlaSxDbiwiICIpLCRuLnRleHRDb250ZW50IT09ZWkmJihhZShCZS5yZW1vdmVkLHtlbGVtZW50OiRuLmNsb25lTm9kZSgpfSksJG4udGV4dENvbnRlbnQ9ZWkpKSxkYygiYWZ0ZXJTYW5p'@;
put 'dGl6ZUVsZW1lbnRzIiwkbixudWxsKSwhMSl9LEljPWZ1bmN0aW9uKCRuLGVpLEJyKXtpZihLbyYmKCJpZCI9PT1laXx8Im5hbWUiPT09ZWkpJiYoQnIgaW4gbHR8fEJyIGluIHZoKSlyZXR1cm4hMTtpZigoIXlyfHwkcltlaV18fCFMKGVuLGVpKSkmJighSml8fCFMKFBuLGVpKSkpaWYoIXVp'@;
put 'W2VpXXx8JHJbZWldKXtpZighKFJjKCRuKSYmKG1yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmTChtci50YWdOYW1lQ2hlY2ssJG4pfHxtci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmbXIudGFnTmFtZUNoZWNrKCRuKSkmJihtci5hdHRyaWJ1dGVOYW1lQ2hl'@;
put 'Y2sgaW5zdGFuY2VvZiBSZWdFeHAmJkwobXIuYXR0cmlidXRlTmFtZUNoZWNrLGVpKXx8bXIuYXR0cmlidXRlTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24mJm1yLmF0dHJpYnV0ZU5hbWVDaGVjayhlaSkpfHwiaXMiPT09ZWkmJm1yLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50'@;
put 'cyYmKG1yLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCYmTChtci50YWdOYW1lQ2hlY2ssQnIpfHxtci50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmbXIudGFnTmFtZUNoZWNrKEJyKSkpKXJldHVybiExfWVsc2UgaWYoIXJvW2VpXSYmIUwoY2ksY2UoQnIsJHQsIiIp'@;
put 'KSYmKCJzcmMiIT09ZWkmJiJ4bGluazpocmVmIiE9PWVpJiYiaHJlZiIhPT1laXx8InNjcmlwdCI9PT0kbnx8MCE9PUcoQnIsImRhdGE6Iil8fCFfdVskbl0pJiYoIUlpfHxMKHduLGNlKEJyLCR0LCIiKSkpJiZCcilyZXR1cm4hMTtyZXR1cm4hMH0sUmM9ZnVuY3Rpb24oJG4pe3JldHVybiJh'@;
put 'bm5vdGF0aW9uLXhtbCIhPT0kbiYmbGUoJG4sV24pfSx5aD1mdW5jdGlvbigkbil7dmFyIGVpLEJyLEVvLFlyO2RjKCJiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXMiLCRuLG51bGwpO3ZhciBsbD0kbi5hdHRyaWJ1dGVzO2lmKGxsKXt2YXIgTWE9e2F0dHJOYW1lOiIiLGF0dHJWYWx1ZToiIixr'@;
put 'ZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczp1aX07Zm9yKFlyPWxsLmxlbmd0aDtZci0tOyl7dmFyIEZzPShlaT1sbFtZcl0pLm5hbWUsZ3I9ZWkubmFtZXNwYWNlVVJJO2lmKEJyPSJ2YWx1ZSI9PT1Gcz9laS52YWx1ZTp5KGVpLnZhbHVlKSxFbz1NbChGcyksTWEuYXR0ck5hbWU9RW8s'@;
put 'TWEuYXR0clZhbHVlPUJyLE1hLmtlZXBBdHRyPSEwLE1hLmZvcmNlS2VlcEF0dHI9dm9pZCAwLGRjKCJ1cG9uU2FuaXRpemVBdHRyaWJ1dGUiLCRuLE1hKSxCcj1NYS5hdHRyVmFsdWUsIU1hLmZvcmNlS2VlcEF0dHImJih4MShGcywkbiksTWEua2VlcEF0dHIpKXtpZighbm8mJkwoL1wvPi9p'@;
put 'LEJyKSl7eDEoRnMsJG4pO2NvbnRpbnVlfXpuJiYoQnI9Y2UoQnIsQnQsIiAiKSxCcj1jZShCcixibiwiICIpLEJyPWNlKEJyLENuLCIgIikpO3ZhciB0YT1NbCgkbi5ub2RlTmFtZSk7aWYoSWModGEsRW8sQnIpKXtpZihlcyYmKCJpZCI9PT1Fb3x8Im5hbWUiPT09RW8pJiYoeDEoRnMsJG4p'@;
put 'LEJyPSJ1c2VyLWNvbnRlbnQtIitCciksX3QmJiJvYmplY3QiPT09U2UoWm4pJiYiZnVuY3Rpb24iPT10eXBlb2YgWm4uZ2V0QXR0cmlidXRlVHlwZSYmIWdyKXN3aXRjaChabi5nZXRBdHRyaWJ1dGVUeXBlKHRhLEVvKSl7Y2FzZSJUcnVzdGVkSFRNTCI6QnI9X3QuY3JlYXRlSFRNTChCcik7'@;
put 'YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjpCcj1fdC5jcmVhdGVTY3JpcHRVUkwoQnIpfXRyeXtncj8kbi5zZXRBdHRyaWJ1dGVOUyhncixGcyxCcik6JG4uc2V0QXR0cmlidXRlKEZzLEJyKSx0ZShCZS5yZW1vdmVkKX1jYXRjaHt9fX19ZGMoImFmdGVyU2FuaXRpemVBdHRyaWJ1dGVz'@;
put 'IiwkbixudWxsKX19LGFsPWZ1bmN0aW9uIEtpKCRuKXt2YXIgZWksQnI9d2QoJG4pO2ZvcihkYygiYmVmb3JlU2FuaXRpemVTaGFkb3dET00iLCRuLG51bGwpO2VpPUJyLm5leHROb2RlKCk7KWlmKGRjKCJ1cG9uU2FuaXRpemVTaGFkb3dOb2RlIixlaSxudWxsKSwhX2koZWkpKXt2YXIgRW89'@;
put 'TXQoZWkpOzE9PT1laS5ub2RlVHlwZSYmKGVpLl9fZGVwdGg9RW8mJkVvLl9fZGVwdGg/KGVpLl9fcmVtb3ZhbENvdW50fHwwKStFby5fX2RlcHRoKzE6MSksZWkuX19kZXB0aD49MjU1JiZMYyhlaSksZWkuY29udGVudCBpbnN0YW5jZW9mIEN0JiYoZWkuY29udGVudC5fX2RlcHRoPWVpLl9f'@;
put 'ZGVwdGgsS2koZWkuY29udGVudCkpLHloKGVpKX1kYygiYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTSIsJG4sbnVsbCl9O3JldHVybiBCZS5zYW5pdGl6ZT1mdW5jdGlvbihLaSl7dmFyIGVpLEJyLEVvLFlyLGxsLCRuPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2Fy'@;
put 'Z3VtZW50c1sxXTp7fTtpZigoUHM9IUtpKSYmKEtpPSJceDNjIS0tXHgzZSIpLCJzdHJpbmciIT10eXBlb2YgS2kmJiFscihLaSkpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBLaS50b1N0cmluZyl0aHJvdyBIKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJpbmciIT10eXBl'@;
put 'b2YoS2k9S2kudG9TdHJpbmcoKSkpdGhyb3cgSCgiZGlydHkgaXMgbm90IGEgc3RyaW5nLCBhYm9ydGluZyIpfWlmKCFCZS5pc1N1cHBvcnRlZCl7aWYoIm9iamVjdCI9PT1TZShBZS50b1N0YXRpY0hUTUwpfHwiZnVuY3Rpb24iPT10eXBlb2YgQWUudG9TdGF0aWNIVE1MKXtpZigic3RyaW5n'@;
put 'Ij09dHlwZW9mIEtpKXJldHVybiBBZS50b1N0YXRpY0hUTUwoS2kpO2lmKGxyKEtpKSlyZXR1cm4gQWUudG9TdGF0aWNIVE1MKEtpLm91dGVySFRNTCl9cmV0dXJuIEtpfWlmKG9vfHxUdSgkbiksQmUucmVtb3ZlZD1bXSwic3RyaW5nIj09dHlwZW9mIEtpJiYoSWw9ITEpLElsKXtpZihLaS5u'@;
put 'b2RlTmFtZSl7dmFyIE1hPU1sKEtpLm5vZGVOYW1lKTtpZighbG5bTWFdfHx5aVtNYV0pdGhyb3cgSCgicm9vdCBub2RlIGlzIGZvcmJpZGRlbiBhbmQgY2Fubm90IGJlIHNhbml0aXplZCBpbi1wbGFjZSIpfX1lbHNlIGlmKEtpIGluc3RhbmNlb2YgUnQpMT09PShCcj0oZWk9azIoIlx4M2Mh'@;
put 'LS0tLVx4M2UiKSkub3duZXJEb2N1bWVudC5pbXBvcnROb2RlKEtpLCEwKSkubm9kZVR5cGUmJiJCT0RZIj09PUJyLm5vZGVOYW1lfHwiSFRNTCI9PT1Cci5ub2RlTmFtZT9laT1CcjplaS5hcHBlbmRDaGlsZChCcik7ZWxzZXtpZighTHImJiF6biYmIVdpJiYtMT09PUtpLmluZGV4T2YoIjwi'@;
put 'KSlyZXR1cm4gX3QmJkxvP190LmNyZWF0ZUhUTUwoS2kpOktpO2lmKCEoZWk9azIoS2kpKSlyZXR1cm4gTHI/bnVsbDpMbz9qdDoiIn1laSYmaG8mJkxjKGVpLmZpcnN0Q2hpbGQpO2Zvcih2YXIgWnM9d2QoSWw/S2k6ZWkpO0VvPVpzLm5leHROb2RlKCk7KWlmKCgzIT09RW8ubm9kZVR5cGV8'@;
put 'fEVvIT09WXIpJiYhX2koRW8pKXt2YXIgRnM9TXQoRW8pOzE9PT1Fby5ub2RlVHlwZSYmKEVvLl9fZGVwdGg9RnMmJkZzLl9fZGVwdGg/KEVvLl9fcmVtb3ZhbENvdW50fHwwKStGcy5fX2RlcHRoKzE6MSksRW8uX19kZXB0aD49MjU1JiZMYyhFbyksRW8uY29udGVudCBpbnN0YW5jZW9mIEN0'@;
put 'JiYoRW8uY29udGVudC5fX2RlcHRoPUVvLl9fZGVwdGgsYWwoRW8uY29udGVudCkpLHloKEVvKSxZcj1Fb31pZihZcj1udWxsLElsKXJldHVybiBLaTtpZihMcil7aWYoQmkpZm9yKGxsPVF0LmNhbGwoZWkub3duZXJEb2N1bWVudCk7ZWkuZmlyc3RDaGlsZDspbGwuYXBwZW5kQ2hpbGQoZWku'@;
put 'Zmlyc3RDaGlsZCk7ZWxzZSBsbD1laTtyZXR1cm4odWkuc2hhZG93cm9vdHx8dWkuc2hhZG93cm9vdG1vZCkmJihsbD1tdC5jYWxsKG90LGxsLCEwKSksbGx9dmFyIGdyPVdpP2VpLm91dGVySFRNTDplaS5pbm5lckhUTUw7cmV0dXJuIFdpJiZsblsiIWRvY3R5cGUiXSYmZWkub3duZXJEb2N1'@;
put 'bWVudCYmZWkub3duZXJEb2N1bWVudC5kb2N0eXBlJiZlaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmTChSZSxlaS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSkmJihncj0iPCFET0NUWVBFICIrZWkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUrIj5cbiIrZ3IpLHpuJiYoZ3I9'@;
put 'Y2UoZ3IsQnQsIiAiKSxncj1jZShncixibiwiICIpLGdyPWNlKGdyLENuLCIgIikpLF90JiZMbz9fdC5jcmVhdGVIVE1MKGdyKTpncn0sQmUuc2V0Q29uZmlnPWZ1bmN0aW9uKEtpKXtUdShLaSksb289ITB9LEJlLmNsZWFyQ29uZmlnPWZ1bmN0aW9uKCl7VmE9bnVsbCxvbz0hMX0sQmUuaXNW'@;
put 'YWxpZEF0dHJpYnV0ZT1mdW5jdGlvbihLaSwkbixlaSl7VmF8fFR1KHt9KTt2YXIgQnI9TWwoS2kpLEVvPU1sKCRuKTtyZXR1cm4gSWMoQnIsRW8sZWkpfSxCZS5hZGRIb29rPWZ1bmN0aW9uKEtpLCRuKXsiZnVuY3Rpb24iPT10eXBlb2YgJG4mJihrbltLaV09a25bS2ldfHxbXSxhZShrbltL'@;
put 'aV0sJG4pKX0sQmUucmVtb3ZlSG9vaz1mdW5jdGlvbihLaSl7aWYoa25bS2ldKXJldHVybiB0ZShrbltLaV0pfSxCZS5yZW1vdmVIb29rcz1mdW5jdGlvbihLaSl7a25bS2ldJiYoa25bS2ldPVtdKX0sQmUucmVtb3ZlQWxsSG9va3M9ZnVuY3Rpb24oKXtrbj17fX0sQmV9KCl9KCl9LDkwNTE4'@;
put 'OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9U2U7ZWUudmVyc2lvbj1SKDE2MzYpLnJFLGVlLnV0aWxzPVIoMzEzNiksZWUucmFuZD1SKDM1Mjk0KSxlZS5jdXJ2ZT1SKDg3MjkpLGVlLmN1cnZlcz1SKDIzNDAxKSxlZS5lYz1SKDI5MDQyKSxlZS5lZGRzYT1SKDgzMDQ1KX0sOTg4'@;
put 'Mjg6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDg4NzIzKSxiPVIoMzEzNiksbT1iLmdldE5BRixYPWIuZ2V0SlNGLHc9Yi5hc3NlcnQ7ZnVuY3Rpb24gQShQLFUpe3RoaXMudHlwZT1QLHRoaXMucD1uZXcgZWUoVS5wLDE2KSx0aGlzLnJlZD1VLnByaW1lP2VlLnJlZChVLnBy'@;
put 'aW1lKTplZS5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBlZSgwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IGVlKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgZWUoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1VLm4mJm5ldyBlZShVLm4sMTYpLHRoaXMuZz1VLmcm'@;
put 'JnRoaXMucG9pbnRGcm9tSlNPTihVLmcsVS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpLHRoaXMuX2JpdExlbmd0aD10aGlzLm4/dGhpcy5u'@;
put 'LmJpdExlbmd0aCgpOjA7dmFyIEk9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IUl8fEkuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gRChQLFUpe3RoaXMuY3VydmU9'@;
put 'UCx0aGlzLnR5cGU9VSx0aGlzLnByZWNvbXB1dGVkPW51bGx9JGUuZXhwb3J0cz1BLEEucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sQS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5v'@;
put 'dCBpbXBsZW1lbnRlZCIpfSxBLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24oVSxJKXt3KFUucHJlY29tcHV0ZWQpO3ZhciBFPVUuX2dldERvdWJsZXMoKSxrPW0oSSwxLHRoaXMuX2JpdExlbmd0aCksQj0oMTw8RS5zdGVwKzEpLShFLnN0ZXAlMj09MD8yOjEpO0IvPTM7dmFyIFYs'@;
put 'WixOPVtdO2ZvcihWPTA7VjxrLmxlbmd0aDtWKz1FLnN0ZXApe1o9MDtmb3IodmFyIFc9VitFLnN0ZXAtMTtXPj1WO1ctLSlaPShaPDwxKStrW1ddO04ucHVzaChaKX1mb3IodmFyIHo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFE9'@;
put 'QjtRPjA7US0tKXtmb3IoVj0wO1Y8Ti5sZW5ndGg7VisrKShaPU5bVl0pPT09UT9xPXEubWl4ZWRBZGQoRS5wb2ludHNbVl0pOlo9PT0tUSYmKHE9cS5taXhlZEFkZChFLnBvaW50c1tWXS5uZWcoKSkpO3o9ei5hZGQocSl9cmV0dXJuIHoudG9QKCl9LEEucHJvdG90eXBlLl93bmFmTXVsPWZ1'@;
put 'bmN0aW9uKFUsSSl7Zm9yKHZhciBFPTQsaz1VLl9nZXROQUZQb2ludHMoRSksQj1rLnBvaW50cyxOPW0oSSxFPWsud25kLHRoaXMuX2JpdExlbmd0aCksVj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksWj1OLmxlbmd0aC0xO1o+PTA7Wi0tKXtmb3IodmFyIFc9MDtaPj0wJiYwPT09Tlta'@;
put 'XTtaLS0pVysrO2lmKFo+PTAmJlcrKyxWPVYuZGJscChXKSxaPDApYnJlYWs7dmFyIHo9TltaXTt3KDAhPT16KSxWPSJhZmZpbmUiPT09VS50eXBlP1YubWl4ZWRBZGQoej4wP0Jbei0xPj4xXTpCWy16LTE+PjFdLm5lZygpKTpWLmFkZCh6PjA/Qlt6LTE+PjFdOkJbLXotMT4+MV0ubmVnKCkp'@;
put 'fXJldHVybiJhZmZpbmUiPT09VS50eXBlP1YudG9QKCk6Vn0sQS5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oVSxJLEUsayxCKXt2YXIgeixxLFEsTj10aGlzLl93bmFmVDEsVj10aGlzLl93bmFmVDIsWj10aGlzLl93bmFmVDMsVz0wO2Zvcih6PTA7ejxrO3orKyl7dmFyIHRlPShR'@;
put 'PUlbel0pLl9nZXROQUZQb2ludHMoVSk7Tlt6XT10ZS53bmQsVlt6XT10ZS5wb2ludHN9Zm9yKHo9ay0xO3o+PTE7ei09Mil7dmFyIGFlPXotMSxzZT16O2lmKDE9PT1OW2FlXSYmMT09PU5bc2VdKXt2YXIgZGU9W0lbYWVdLG51bGwsbnVsbCxJW3NlXV07MD09PUlbYWVdLnkuY21wKElbc2Vd'@;
put 'LnkpPyhkZVsxXT1JW2FlXS5hZGQoSVtzZV0pLGRlWzJdPUlbYWVdLnRvSigpLm1peGVkQWRkKElbc2VdLm5lZygpKSk6MD09PUlbYWVdLnkuY21wKElbc2VdLnkucmVkTmVnKCkpPyhkZVsxXT1JW2FlXS50b0ooKS5taXhlZEFkZChJW3NlXSksZGVbMl09SVthZV0uYWRkKElbc2VdLm5lZygp'@;
put 'KSk6KGRlWzFdPUlbYWVdLnRvSigpLm1peGVkQWRkKElbc2VdKSxkZVsyXT1JW2FlXS50b0ooKS5taXhlZEFkZChJW3NlXS5uZWcoKSkpO3ZhciBsZT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxjZT1YKEVbYWVdLEVbc2VdKTtmb3IoVz1NYXRoLm1heChjZVswXS5sZW5ndGgsVyksWlthZV09'@;
put 'bmV3IEFycmF5KFcpLFpbc2VdPW5ldyBBcnJheShXKSxxPTA7cTxXO3ErKylaW2FlXVtxXT1sZVszKigxKygwfGNlWzBdW3FdKSkrKDErKDB8Y2VbMV1bcV0pKV0sWltzZV1bcV09MCxWW2FlXT1kZX1lbHNlIFpbYWVdPW0oRVthZV0sTlthZV0sdGhpcy5fYml0TGVuZ3RoKSxaW3NlXT1tKEVb'@;
put 'c2VdLE5bc2VdLHRoaXMuX2JpdExlbmd0aCksVz1NYXRoLm1heChaW2FlXS5sZW5ndGgsVyksVz1NYXRoLm1heChaW3NlXS5sZW5ndGgsVyl9dmFyIEw9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLEg9dGhpcy5fd25hZlQ0O2Zvcih6PVc7ej49MDt6LS0pe2Zvcih2YXIgaj0wO3o+PTA7'@;
put 'KXt2YXIgZz0hMDtmb3IocT0wO3E8aztxKyspSFtxXT0wfFpbcV1bel0sMCE9PUhbcV0mJihnPSExKTtpZighZylicmVhaztqKyssei0tfWlmKHo+PTAmJmorKyxMPUwuZGJscChqKSx6PDApYnJlYWs7Zm9yKHE9MDtxPGs7cSsrKXt2YXIgUz1IW3FdOzAhPT1TJiYoUz4wP1E9VltxXVtTLTE+'@;
put 'PjFdOlM8MCYmKFE9VltxXVstUy0xPj4xXS5uZWcoKSksTD0iYWZmaW5lIj09PVEudHlwZT9MLm1peGVkQWRkKFEpOkwuYWRkKFEpKX19Zm9yKHo9MDt6PGs7eisrKVZbel09bnVsbDtyZXR1cm4gQj9MOkwudG9QKCl9LEEuQmFzZVBvaW50PUQsRC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0'@;
put 'aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxELnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxBLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihVLEkpe1U9Yi50b0FycmF5KFUsSSk7dmFyIEU9dGhp'@;
put 'cy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PVVbMF18fDY9PT1VWzBdfHw3PT09VVswXSkmJlUubGVuZ3RoLTE9PTIqRSlyZXR1cm4gNj09PVVbMF0/dyhVW1UubGVuZ3RoLTFdJTI9PTApOjc9PT1VWzBdJiZ3KFVbVS5sZW5ndGgtMV0lMj09MSksdGhpcy5wb2ludChVLnNsaWNlKDEsMStFKSxV'@;
put 'LnNsaWNlKDErRSwxKzIqRSkpO2lmKCgyPT09VVswXXx8Mz09PVVbMF0pJiZVLmxlbmd0aC0xPT09RSlyZXR1cm4gdGhpcy5wb2ludEZyb21YKFUuc2xpY2UoMSwxK0UpLDM9PT1VWzBdKTt0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcG9pbnQgZm9ybWF0Iil9LEQucHJvdG90eXBlLmVuY29k'@;
put 'ZUNvbXByZXNzZWQ9ZnVuY3Rpb24oVSl7cmV0dXJuIHRoaXMuZW5jb2RlKFUsITApfSxELnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKFUpe3ZhciBJPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCksRT10aGlzLmdldFgoKS50b0FycmF5KCJiZSIsSSk7cmV0dXJuIFU/W3RoaXMuZ2V0WSgp'@;
put 'LmlzRXZlbigpPzI6M10uY29uY2F0KEUpOls0XS5jb25jYXQoRSx0aGlzLmdldFkoKS50b0FycmF5KCJiZSIsSSkpfSxELnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oVSxJKXtyZXR1cm4gYi5lbmNvZGUodGhpcy5fZW5jb2RlKEkpLFUpfSxELnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0'@;
put 'aW9uKFUpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIEk9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBJLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksSS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCxVKSxJLmJldGE9dGhpcy5fZ2V0QmV0'@;
put 'YSgpLHRoaXMucHJlY29tcHV0ZWQ9SSx0aGlzfSxELnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbihVKXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgST10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFJJiZJLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgo'@;
put 'VS5iaXRMZW5ndGgoKSsxKS9JLnN0ZXApfSxELnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbihVLEkpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgRT1bdGhpc10saz10aGlz'@;
put 'LEI9MDtCPEk7Qis9VSl7Zm9yKHZhciBOPTA7TjxVO04rKylrPWsuZGJsKCk7RS5wdXNoKGspfXJldHVybntzdGVwOlUscG9pbnRzOkV9fSxELnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKFUpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVy'@;
put 'biB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIEk9W3RoaXNdLEU9KDE8PFUpLTEsaz0xPT09RT9udWxsOnRoaXMuZGJsKCksQj0xO0I8RTtCKyspSVtCXT1JW0ItMV0uYWRkKGspO3JldHVybnt3bmQ6VSxwb2ludHM6SX19LEQucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0'@;
put 'dXJuIG51bGx9LEQucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24oVSl7Zm9yKHZhciBJPXRoaXMsRT0wO0U8VTtFKyspST1JLmRibCgpO3JldHVybiBJfX0sNTU1Mzc6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDMxMzYpLGI9Uig4ODcyMyksbT1SKDcxOTkzKSxYPVIoOTg4Mjgp'@;
put 'LHc9ZWUuYXNzZXJ0O2Z1bmN0aW9uIEEoUCl7dGhpcy50d2lzdGVkPTEhPSgwfFAuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxQLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxYLmNhbGwodGhpcywiZWR3YXJkcyIsUCksdGhpcy5hPW5ldyBiKFAuYSwxNikudW1vZCh0'@;
put 'aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGIoUC5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBiKFAuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlz'@;
put 'LmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfFAuYyl9ZnVuY3Rpb24gRChQLFUsSSxFLGspe1guQmFzZVBvaW50LmNhbGwodGhpcyxQLCJwcm9qZWN0aXZlIiksbnVsbD09PVUmJm51bGw9PT1JJiZudWxsPT09RT8odGhp'@;
put 'cy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBiKFUsMTYpLHRoaXMueT1uZXcgYihJLDE2KSx0aGlzLno9RT9uZXcgYihFLDE2KTp0aGlz'@;
put 'LmN1cnZlLm9uZSx0aGlzLnQ9ayYmbmV3IGIoaywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVk'@;
put 'KHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRo'@;
put 'aXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9bShBLFgpLCRlLmV4cG9ydHM9QSxBLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5tT25lQT9VLnJlZE5lZygpOnRoaXMuYS5yZWRNdWwoVSl9LEEucHJvdG90'@;
put 'eXBlLl9tdWxDPWZ1bmN0aW9uKFUpe3JldHVybiB0aGlzLm9uZUM/VTp0aGlzLmMucmVkTXVsKFUpfSxBLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oVSxJLEUsayl7cmV0dXJuIHRoaXMucG9pbnQoVSxJLEUsayl9LEEucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oVSxJKXsoVT1u'@;
put 'ZXcgYihVLDE2KSkucmVkfHwoVT1VLnRvUmVkKHRoaXMucmVkKSk7dmFyIEU9VS5yZWRTcXIoKSxrPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoRSkpLEI9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEUpKSxOPWsucmVkTXVsKEIucmVkSW52bSgp'@;
put 'KSxWPU4ucmVkU3FydCgpO2lmKDAhPT1WLnJlZFNxcigpLnJlZFN1YihOKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgWj1WLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihJJiYhWnx8IUkmJlopJiYoVj1WLnJlZE5lZygpKSx0aGlzLnBvaW50'@;
put 'KFUsVil9LEEucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oVSxJKXsoVT1uZXcgYihVLDE2KSkucmVkfHwoVT1VLnRvUmVkKHRoaXMucmVkKSk7dmFyIEU9VS5yZWRTcXIoKSxrPUUucmVkU3ViKHRoaXMuYzIpLEI9RS5yZWRNdWwodGhpcy5kKS5yZWRNdWwodGhpcy5jMikucmVkU3Vi'@;
put 'KHRoaXMuYSksTj1rLnJlZE11bChCLnJlZEludm0oKSk7aWYoMD09PU4uY21wKHRoaXMuemVybykpe2lmKEkpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLFUpfXZhciBWPU4ucmVkU3FydCgpO2lmKDAhPT1WLnJlZFNxcigpLnJl'@;
put 'ZFN1YihOKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gVi5mcm9tUmVkKCkuaXNPZGQoKSE9PUkmJihWPVYucmVkTmVnKCkpLHRoaXMucG9pbnQoVixVKX0sQS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oVSl7aWYoVS5pc0luZmlu'@;
put 'aXR5KCkpcmV0dXJuITA7VS5ub3JtYWxpemUoKTt2YXIgST1VLngucmVkU3FyKCksRT1VLnkucmVkU3FyKCksaz1JLnJlZE11bCh0aGlzLmEpLnJlZEFkZChFKSxCPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKEkpLnJlZE11bChFKSkpO3JldHVybiAwPT09'@;
put 'ay5jbXAoQil9LG0oRCxYLkJhc2VQb2ludCksQS5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihVKXtyZXR1cm4gRC5mcm9tSlNPTih0aGlzLFUpfSxBLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihVLEksRSxrKXtyZXR1cm4gbmV3IEQodGhpcyxVLEksRSxrKX0sRC5mcm9tSlNP'@;
put 'Tj1mdW5jdGlvbihVLEkpe3JldHVybiBuZXcgRChVLElbMF0sSVsxXSxJWzJdKX0sRC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJp'@;
put 'bmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxELnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmKDA9PT10aGlzLnku'@;
put 'Y21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEQucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgVT10aGlzLngucmVkU3FyKCksST10aGlzLnkucmVkU3FyKCksRT10aGlzLnoucmVkU3FyKCk7RT1FLnJlZElBZGQoRSk7dmFyIGs9'@;
put 'dGhpcy5jdXJ2ZS5fbXVsQShVKSxCPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoSSksTj1rLnJlZEFkZChJKSxWPU4ucmVkU3ViKEUpLFo9ay5yZWRTdWIoSSksVz1CLnJlZE11bChWKSx6PU4ucmVkTXVsKFopLHE9Qi5yZWRNdWwoWiksUT1WLnJl'@;
put 'ZE11bChOKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChXLHosUSxxKX0sRC5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgayxCLE4sVixaLFcsVT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksST10aGlzLngucmVkU3FyKCksRT10aGlzLnkucmVkU3FyKCk7aWYodGhp'@;
put 'cy5jdXJ2ZS50d2lzdGVkKXt2YXIgej0oVj10aGlzLmN1cnZlLl9tdWxBKEkpKS5yZWRBZGQoRSk7dGhpcy56T25lPyhrPVUucmVkU3ViKEkpLnJlZFN1YihFKS5yZWRNdWwoei5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxCPXoucmVkTXVsKFYucmVkU3ViKEUpKSxOPXoucmVkU3FyKCkucmVk'@;
put 'U3ViKHopLnJlZFN1Yih6KSk6KFo9dGhpcy56LnJlZFNxcigpLFc9ei5yZWRTdWIoWikucmVkSVN1YihaKSxrPVUucmVkU3ViKEkpLnJlZElTdWIoRSkucmVkTXVsKFcpLEI9ei5yZWRNdWwoVi5yZWRTdWIoRSkpLE49ei5yZWRNdWwoVykpfWVsc2UgVj1JLnJlZEFkZChFKSxaPXRoaXMuY3Vy'@;
put 'dmUuX211bEModGhpcy56KS5yZWRTcXIoKSxXPVYucmVkU3ViKFopLnJlZFN1YihaKSxrPXRoaXMuY3VydmUuX211bEMoVS5yZWRJU3ViKFYpKS5yZWRNdWwoVyksQj10aGlzLmN1cnZlLl9tdWxDKFYpLnJlZE11bChJLnJlZElTdWIoRSkpLE49Vi5yZWRNdWwoVyk7cmV0dXJuIHRoaXMuY3Vy'@;
put 'dmUucG9pbnQoayxCLE4pfSxELnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0sRC5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbihVKXt2YXIgST10'@;
put 'aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKFUueS5yZWRTdWIoVS54KSksRT10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKFUueS5yZWRBZGQoVS54KSksaz10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bChVLnQpLEI9dGhpcy56LnJlZE11bChVLnoucmVkQWRkKFUu'@;
put 'eikpLE49RS5yZWRTdWIoSSksVj1CLnJlZFN1YihrKSxaPUIucmVkQWRkKGspLFc9RS5yZWRBZGQoSSksej1OLnJlZE11bChWKSxxPVoucmVkTXVsKFcpLFE9Ti5yZWRNdWwoVyksdGU9Vi5yZWRNdWwoWik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoeixxLHRlLFEpfSxELnByb3RvdHlwZS5f'@;
put 'cHJvakFkZD1mdW5jdGlvbihVKXt2YXIgcSxRLEk9dGhpcy56LnJlZE11bChVLnopLEU9SS5yZWRTcXIoKSxrPXRoaXMueC5yZWRNdWwoVS54KSxCPXRoaXMueS5yZWRNdWwoVS55KSxOPXRoaXMuY3VydmUuZC5yZWRNdWwoaykucmVkTXVsKEIpLFY9RS5yZWRTdWIoTiksWj1FLnJlZEFkZChO'@;
put 'KSxXPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoVS54LnJlZEFkZChVLnkpKS5yZWRJU3ViKGspLnJlZElTdWIoQiksej1JLnJlZE11bChWKS5yZWRNdWwoVyk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8ocT1JLnJlZE11bChaKS5yZWRNdWwoQi5yZWRTdWIodGhpcy5jdXJ2ZS5f'@;
put 'bXVsQShrKSkpLFE9Vi5yZWRNdWwoWikpOihxPUkucmVkTXVsKFopLnJlZE11bChCLnJlZFN1YihrKSksUT10aGlzLmN1cnZlLl9tdWxDKFYpLnJlZE11bChaKSksdGhpcy5jdXJ2ZS5wb2ludCh6LHEsUSl9LEQucHJvdG90eXBlLmFkZD1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5pc0luZmlu'@;
put 'aXR5KCk/VTpVLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKFUpOnRoaXMuX3Byb2pBZGQoVSl9LEQucHJvdG90eXBlLm11bD1mdW5jdGlvbihVKXtyZXR1cm4gdGhpcy5faGFzRG91YmxlcyhVKT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlz'@;
put 'LFUpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxVKX0sRC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKFUsSSxFKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtVLEVdLDIsITEpfSxELnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKFUsSSxFKXtyZXR1cm4g'@;
put 'dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLEldLFtVLEVdLDIsITApfSxELnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIFU9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoVSksdGhpcy55'@;
put 'PXRoaXMueS5yZWRNdWwoVSksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoVSkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMu'@;
put 'eSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxELnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRC5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5m'@;
put 'cm9tUmVkKCl9LEQucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFUpe3JldHVybiB0aGlzPT09VXx8MD09PXRoaXMuZ2V0WCgpLmNtcChVLmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoVS5nZXRZKCkpfSxELnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oVSl7dmFyIEk9VS50b1JlZCh0aGlz'@;
put 'LmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoSSkpcmV0dXJuITA7Zm9yKHZhciBFPVUuY2xvbmUoKSxrPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihFLmlhZGQodGhpcy5jdXJ2ZS5uKSxFLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVy'@;
put 'biExO2lmKEkucmVkSUFkZChrKSwwPT09dGhpcy54LmNtcChJKSlyZXR1cm4hMH19LEQucHJvdG90eXBlLnRvUD1ELnByb3RvdHlwZS5ub3JtYWxpemUsRC5wcm90b3R5cGUubWl4ZWRBZGQ9RC5wcm90b3R5cGUuYWRkfSw4NzI5OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9U2U7'@;
put 'ZWUuYmFzZT1SKDk4ODI4KSxlZS5zaG9ydD1SKDY4MDc1KSxlZS5tb250PVIoNjQ5NDcpLGVlLmVkd2FyZHM9Uig1NTUzNyl9LDY0OTQ3OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9Uig4ODcyMyksYj1SKDcxOTkzKSxtPVIoOTg4MjgpLFg9UigzMTM2KTtmdW5jdGlvbiB3KEQp'@;
put 'e20uY2FsbCh0aGlzLCJtb250IixEKSx0aGlzLmE9bmV3IGVlKEQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgZWUoRC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgZWUoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgZWUoMikudG9S'@;
put 'ZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBBKEQsUCxVKXttLkJhc2VQb2ludC5jYWxsKHRoaXMsRCwicHJvamVjdGl2ZSIpLG51bGw9PT1QJiZudWxsPT09VT8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMu'@;
put 'ej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGVlKFAsMTYpLHRoaXMuej1uZXcgZWUoVSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX1iKHcs'@;
put 'bSksJGUuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKFApe3ZhciBVPVAubm9ybWFsaXplKCkueCxJPVUucmVkU3FyKCksRT1JLnJlZE11bChVKS5yZWRBZGQoSS5yZWRNdWwodGhpcy5hKSkucmVkQWRkKFUpO3JldHVybiAwPT09RS5yZWRTcXJ0KCkucmVkU3FyKCku'@;
put 'Y21wKEUpfSxiKEEsbS5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKFAsVSl7cmV0dXJuIHRoaXMucG9pbnQoWC50b0FycmF5KFAsVSksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKFAsVSl7cmV0dXJuIG5ldyBBKHRoaXMsUCxVKX0sdy5wcm90b3R5'@;
put 'cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihQKXtyZXR1cm4gQS5mcm9tSlNPTih0aGlzLFApfSxBLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxBLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoImJlIix0aGlzLmN1cnZl'@;
put 'LnAuYnl0ZUxlbmd0aCgpKX0sQS5mcm9tSlNPTj1mdW5jdGlvbihQLFUpe3JldHVybiBuZXcgQShQLFVbMF0sVVsxXXx8UC5vbmUpfSxBLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9pbnQgSW5maW5pdHk+IjoiPEVDIFBvaW50'@;
put 'IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LEEucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxBLnByb3RvdHlwZS5kYmw9ZnVuY3Rp'@;
put 'b24oKXt2YXIgVT10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksRT10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksaz1VLnJlZFN1YihFKSxCPVUucmVkTXVsKEUpLE49ay5yZWRNdWwoRS5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGspKSk7cmV0dXJuIHRoaXMuY3Vy'@;
put 'dmUucG9pbnQoQixOKX0sQS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sQS5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihQLFUpe3ZhciBJPXRoaXMueC5yZWRBZGQodGhpcy56KSxFPXRoaXMu'@;
put 'eC5yZWRTdWIodGhpcy56KSxrPVAueC5yZWRBZGQoUC56KSxOPVAueC5yZWRTdWIoUC56KS5yZWRNdWwoSSksVj1rLnJlZE11bChFKSxaPVUuei5yZWRNdWwoTi5yZWRBZGQoVikucmVkU3FyKCkpLFc9VS54LnJlZE11bChOLnJlZElTdWIoVikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZl'@;
put 'LnBvaW50KFosVyl9LEEucHJvdG90eXBlLm11bD1mdW5jdGlvbihQKXtmb3IodmFyIFU9UC5jbG9uZSgpLEk9dGhpcyxFPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxCPVtdOzAhPT1VLmNtcG4oMCk7VS5pdXNocm4oMSkpQi5wdXNoKFUuYW5kbG4oMSkpO2Zvcih2YXIgTj1CLmxlbmd0'@;
put 'aC0xO04+PTA7Ti0tKTA9PT1CW05dPyhJPUkuZGlmZkFkZChFLHRoaXMpLEU9RS5kYmwoKSk6KEU9SS5kaWZmQWRkKEUsdGhpcyksST1JLmRibCgpKTtyZXR1cm4gRX0sQS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRn'@;
put 'b21lcnkgY3VydmUiKX0sQS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LEEucHJvdG90eXBlLmVxPWZ1bmN0aW9uKFApe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKFAuZ2V0WCgpKX0s'@;
put 'QS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxBLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54'@;
put 'LmZyb21SZWQoKX19LDY4MDc1OigkZSxTZSxSKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgZWU9UigzMTM2KSxiPVIoODg3MjMpLG09Uig3MTk5MyksWD1SKDk4ODI4KSx3PWVlLmFzc2VydDtmdW5jdGlvbiBBKFUpe1guY2FsbCh0aGlzLCJzaG9ydCIsVSksdGhpcy5hPW5ldyBiKFUuYSwxNikudG9S'@;
put 'ZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYihVLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5j'@;
put 'bXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKFUpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEQoVSxJLEUsayl7WC5CYXNlUG9pbnQuY2FsbCh0aGlzLFUsImFmZmluZSIpLG51bGw9PT1J'@;
put 'JiZudWxsPT09RT8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IGIoSSwxNiksdGhpcy55PW5ldyBiKEUsMTYpLGsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5y'@;
put 'ZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gUChVLEksRSxrKXtYLkJhc2VQb2ludC5jYWxsKHRoaXMsVSwiamFjb2JpYW4iKSxudWxs'@;
put 'PT09SSYmbnVsbD09PUUmJm51bGw9PT1rPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgYigwKSk6KHRoaXMueD1uZXcgYihJLDE2KSx0aGlzLnk9bmV3IGIoRSwxNiksdGhpcy56PW5ldyBiKGssMTYpKSx0aGlzLngucmVkfHwodGhpcy54'@;
put 'PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9'@;
put 'bShBLFgpLCRlLmV4cG9ydHM9QSxBLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKEkpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBFLGs7aWYoSS5iZXRhKUU9bmV3IGIoSS5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7'@;
put 'ZWxzZXt2YXIgQj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtFPShFPUJbMF0uY21wKEJbMV0pPDA/QlswXTpCWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoSS5sYW1iZGEpaz1uZXcgYihJLmxhbWJkYSwxNik7ZWxzZXt2YXIgTj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhp'@;
put 'cy5nLm11bChOWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoRSkpP2s9TlswXTp3KDA9PT10aGlzLmcubXVsKGs9TlsxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEUpKSl9cmV0dXJue2JldGE6RSxsYW1iZGE6ayxiYXNpczpJLmJhc2lzP0kuYmFzaXMubWFwKGZ1bmN0aW9uKFope3JldHVy'@;
put 'bnthOm5ldyBiKFouYSwxNiksYjpuZXcgYihaLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhrKX19fSxBLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKEkpe3ZhciBFPUk9PT10aGlzLnA/dGhpcy5yZWQ6Yi5tb250KEkpLGs9bmV3IGIoMikudG9SZWQoRSkucmVkSW52bSgp'@;
put 'LEI9ay5yZWROZWcoKSxOPW5ldyBiKDMpLnRvUmVkKEUpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoayk7cmV0dXJuW0IucmVkQWRkKE4pLmZyb21SZWQoKSxCLnJlZFN1YihOKS5mcm9tUmVkKCldfSxBLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKEkpe2Zvcih2YXIgeixx'@;
put 'LFEsdGUsYWUsc2UsZGUsY2UsRyxFPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksaz1JLEI9dGhpcy5uLmNsb25lKCksTj1uZXcgYigxKSxWPW5ldyBiKDApLFo9bmV3IGIoMCksVz1uZXcgYigxKSxsZT0wOzAhPT1rLmNtcG4oMCk7KXt2YXIgeT1CLmRp'@;
put 'dihrKTtjZT1CLnN1Yih5Lm11bChrKSksRz1aLnN1Yih5Lm11bChOKSk7dmFyIEw9Vy5zdWIoeS5tdWwoVikpO2lmKCFRJiZjZS5jbXAoRSk8MCl6PWRlLm5lZygpLHE9TixRPWNlLm5lZygpLHRlPUc7ZWxzZSBpZihRJiYyPT0rK2xlKWJyZWFrO2RlPWNlLEI9ayxrPWNlLFo9TixOPUcsVz1W'@;
put 'LFY9TH1hZT1jZS5uZWcoKSxzZT1HO3ZhciBIPVEuc3FyKCkuYWRkKHRlLnNxcigpKTtyZXR1cm4gYWUuc3FyKCkuYWRkKHNlLnNxcigpKS5jbXAoSCk+PTAmJihhZT16LHNlPXEpLFEubmVnYXRpdmUmJihRPVEubmVnKCksdGU9dGUubmVnKCkpLGFlLm5lZ2F0aXZlJiYoYWU9YWUubmVnKCks'@;
put 'c2U9c2UubmVnKCkpLFt7YTpRLGI6dGV9LHthOmFlLGI6c2V9XX0sQS5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihJKXt2YXIgRT10aGlzLmVuZG8uYmFzaXMsaz1FWzBdLEI9RVsxXSxOPUIuYi5tdWwoSSkuZGl2Um91bmQodGhpcy5uKSxWPWsuYi5uZWcoKS5tdWwoSSkuZGl2Um91'@;
put 'bmQodGhpcy5uKSxaPU4ubXVsKGsuYSksVz1WLm11bChCLmEpLHo9Ti5tdWwoay5iKSxxPVYubXVsKEIuYik7cmV0dXJue2sxOkkuc3ViKFopLnN1YihXKSxrMjp6LmFkZChxKS5uZWcoKX19LEEucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24oSSxFKXsoST1uZXcgYihJLDE2KSkucmVk'@;
put 'fHwoST1JLnRvUmVkKHRoaXMucmVkKSk7dmFyIGs9SS5yZWRTcXIoKS5yZWRNdWwoSSkucmVkSUFkZChJLnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksQj1rLnJlZFNxcnQoKTtpZigwIT09Qi5yZWRTcXIoKS5yZWRTdWIoaykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9y'@;
put 'KCJpbnZhbGlkIHBvaW50Iik7dmFyIE49Qi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oRSYmIU58fCFFJiZOKSYmKEI9Qi5yZWROZWcoKSksdGhpcy5wb2ludChJLEIpfSxBLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihJKXtpZihJLmluZilyZXR1cm4hMDt2YXIgRT1JLngsaz1JLnks'@;
put 'Qj10aGlzLmEucmVkTXVsKEUpLE49RS5yZWRTcXIoKS5yZWRNdWwoRSkucmVkSUFkZChCKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1rLnJlZFNxcigpLnJlZElTdWIoTikuY21wbigwKX0sQS5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKEksRSxrKXtmb3IodmFyIEI9'@;
put 'dGhpcy5fZW5kb1duYWZUMSxOPXRoaXMuX2VuZG9XbmFmVDIsVj0wO1Y8SS5sZW5ndGg7VisrKXt2YXIgWj10aGlzLl9lbmRvU3BsaXQoRVtWXSksVz1JW1ZdLHo9Vy5fZ2V0QmV0YSgpO1ouazEubmVnYXRpdmUmJihaLmsxLmluZWcoKSxXPVcubmVnKCEwKSksWi5rMi5uZWdhdGl2ZSYmKFou'@;
put 'azIuaW5lZygpLHo9ei5uZWcoITApKSxCWzIqVl09VyxCWzIqVisxXT16LE5bMipWXT1aLmsxLE5bMipWKzFdPVouazJ9Zm9yKHZhciBxPXRoaXMuX3duYWZNdWxBZGQoMSxCLE4sMipWLGspLFE9MDtRPDIqVjtRKyspQltRXT1udWxsLE5bUV09bnVsbDtyZXR1cm4gcX0sbShELFguQmFzZVBv'@;
put 'aW50KSxBLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihJLEUsayl7cmV0dXJuIG5ldyBEKHRoaXMsSSxFLGspfSxBLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKEksRSl7cmV0dXJuIEQuZnJvbUpTT04odGhpcyxJLEUpfSxELnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigp'@;
put 'e2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIEk9dGhpcy5wcmVjb21wdXRlZDtpZihJJiZJLmJldGEpcmV0dXJuIEkuYmV0YTt2YXIgRT10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYoSSl7dmFyIGs9dGhpcy5jdXJ2ZSxCPWZ1'@;
put 'bmN0aW9uKE4pe3JldHVybiBrLnBvaW50KE4ueC5yZWRNdWwoay5lbmRvLmJldGEpLE4ueSl9O0kuYmV0YT1FLEUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6SS5uYWYmJnt3bmQ6SS5uYWYud25kLHBvaW50czpJLm5hZi5wb2ludHMubWFwKEIpfSxkb3VibGVzOkkuZG91YmxlcyYme3N0'@;
put 'ZXA6SS5kb3VibGVzLnN0ZXAscG9pbnRzOkkuZG91Ymxlcy5wb2ludHMubWFwKEIpfX19cmV0dXJuIEV9fSxELnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnBy'@;
put 'ZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50'@;
put 'czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxELmZyb21KU09OPWZ1bmN0aW9uKEksRSxrKXsic3RyaW5nIj09dHlwZW9mIEUmJihFPUpTT04ucGFyc2UoRSkpO3ZhciBCPUkucG9pbnQoRVswXSxFWzFdLGspO2lmKCFFWzJdKXJldHVy'@;
put 'biBCO2Z1bmN0aW9uIE4oWil7cmV0dXJuIEkucG9pbnQoWlswXSxaWzFdLGspfXZhciBWPUVbMl07cmV0dXJuIEIucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOlYuZG91YmxlcyYme3N0ZXA6Vi5kb3VibGVzLnN0ZXAscG9pbnRzOltCXS5jb25jYXQoVi5kb3VibGVzLnBvaW50cy5t'@;
put 'YXAoTikpfSxuYWY6Vi5uYWYmJnt3bmQ6Vi5uYWYud25kLHBvaW50czpbQl0uY29uY2F0KFYubmFmLnBvaW50cy5tYXAoTikpfX0sQn0sRC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2lu'@;
put 'dCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxELnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxELnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oSSl7aWYo'@;
put 'dGhpcy5pbmYpcmV0dXJuIEk7aWYoSS5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcShJKSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKEkpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAoSS54KSlyZXR1cm4gdGhpcy5jdXJ2'@;
put 'ZS5wb2ludChudWxsLG51bGwpO3ZhciBFPXRoaXMueS5yZWRTdWIoSS55KTswIT09RS5jbXBuKDApJiYoRT1FLnJlZE11bCh0aGlzLngucmVkU3ViKEkueCkucmVkSW52bSgpKSk7dmFyIGs9RS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1YihJLngpLEI9RS5yZWRNdWwodGhpcy54'@;
put 'LnJlZFN1YihrKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KGssQil9LEQucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBJPXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09SS5jbXBuKDApKXJldHVybiB0aGlz'@;
put 'LmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEU9dGhpcy5jdXJ2ZS5hLGs9dGhpcy54LnJlZFNxcigpLEI9SS5yZWRJbnZtKCksTj1rLnJlZEFkZChrKS5yZWRJQWRkKGspLnJlZElBZGQoRSkucmVkTXVsKEIpLFY9Ti5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSks'@;
put 'Wj1OLnJlZE11bCh0aGlzLngucmVkU3ViKFYpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVixaKX0sRC5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxELnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRo'@;
put 'aXMueS5mcm9tUmVkKCl9LEQucHJvdG90eXBlLm11bD1mdW5jdGlvbihJKXtyZXR1cm4gST1uZXcgYihJLDE2KSx0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuX2hhc0RvdWJsZXMoSSk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyxJKTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2'@;
put 'ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFtJXSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLEkpfSxELnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oSSxFLGspe3ZhciBCPVt0aGlzLEVdLE49W0ksa107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFk'@;
put 'ZChCLE4pOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxCLE4sMil9LEQucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24oSSxFLGspe3ZhciBCPVt0aGlzLEVdLE49W0ksa107cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChCLE4sITApOnRoaXMuY3Vy'@;
put 'dmUuX3duYWZNdWxBZGQoMSxCLE4sMiwhMCl9LEQucHJvdG90eXBlLmVxPWZ1bmN0aW9uKEkpe3JldHVybiB0aGlzPT09SXx8dGhpcy5pbmY9PT1JLmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcChJLngpJiYwPT09dGhpcy55LmNtcChJLnkpKX0sRC5wcm90b3R5cGUubmVnPWZ1bmN0'@;
put 'aW9uKEkpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBFPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYoSSYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIGs9dGhpcy5wcmVjb21wdXRlZCxCPWZ1bmN0aW9uKE4pe3JldHVybiBOLm5lZygpfTtFLnByZWNvbXB1'@;
put 'dGVkPXtuYWY6ay5uYWYmJnt3bmQ6ay5uYWYud25kLHBvaW50czprLm5hZi5wb2ludHMubWFwKEIpfSxkb3VibGVzOmsuZG91YmxlcyYme3N0ZXA6ay5kb3VibGVzLnN0ZXAscG9pbnRzOmsuZG91Ymxlcy5wb2ludHMubWFwKEIpfX19cmV0dXJuIEV9LEQucHJvdG90eXBlLnRvSj1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmluZj90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSl9LG0oUCxYLkJhc2VQb2ludCksQS5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKEksRSxrKXtyZXR1cm4gbmV3'@;
put 'IFAodGhpcyxJLEUsayl9LFAucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIEk9dGhpcy56LnJlZEludm0oKSxFPUkucmVkU3FyKCksaz10aGlzLngucmVkTXVsKEUpLEI9dGhpcy55LnJl'@;
put 'ZE11bChFKS5yZWRNdWwoSSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoayxCKX0sUC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKEkpe2lmKHRo'@;
put 'aXMuaXNJbmZpbml0eSgpKXJldHVybiBJO2lmKEkuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBFPUkuei5yZWRTcXIoKSxrPXRoaXMuei5yZWRTcXIoKSxCPXRoaXMueC5yZWRNdWwoRSksTj1JLngucmVkTXVsKGspLFY9dGhpcy55LnJlZE11bChFLnJlZE11bChJLnopKSxaPUkueS5y'@;
put 'ZWRNdWwoay5yZWRNdWwodGhpcy56KSksVz1CLnJlZFN1YihOKSx6PVYucmVkU3ViKFopO2lmKDA9PT1XLmNtcG4oMCkpcmV0dXJuIDAhPT16LmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHE9Vy5yZWRTcXIoKSxRPXEucmVkTXVsKFcp'@;
put 'LHRlPUIucmVkTXVsKHEpLGFlPXoucmVkU3FyKCkucmVkSUFkZChRKS5yZWRJU3ViKHRlKS5yZWRJU3ViKHRlKSxzZT16LnJlZE11bCh0ZS5yZWRJU3ViKGFlKSkucmVkSVN1YihWLnJlZE11bChRKSksZGU9dGhpcy56LnJlZE11bChJLnopLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5q'@;
put 'cG9pbnQoYWUsc2UsZGUpfSxQLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihJKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gSS50b0ooKTtpZihJLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgRT10aGlzLnoucmVkU3FyKCksaz10aGlzLngsQj1JLngucmVkTXVsKEUpLE49'@;
put 'dGhpcy55LFY9SS55LnJlZE11bChFKS5yZWRNdWwodGhpcy56KSxaPWsucmVkU3ViKEIpLFc9Ti5yZWRTdWIoVik7aWYoMD09PVouY21wbigwKSlyZXR1cm4gMCE9PVcuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgej1aLnJlZFNxcigp'@;
put 'LHE9ei5yZWRNdWwoWiksUT1rLnJlZE11bCh6KSx0ZT1XLnJlZFNxcigpLnJlZElBZGQocSkucmVkSVN1YihRKS5yZWRJU3ViKFEpLGFlPVcucmVkTXVsKFEucmVkSVN1Yih0ZSkpLnJlZElTdWIoTi5yZWRNdWwocSkpLHNlPXRoaXMuei5yZWRNdWwoWik7cmV0dXJuIHRoaXMuY3VydmUuanBv'@;
put 'aW50KHRlLGFlLHNlKX0sUC5wcm90b3R5cGUuZGJscD1mdW5jdGlvbihJKXtpZigwPT09SSlyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighSSlyZXR1cm4gdGhpcy5kYmwoKTt2YXIgRTtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVl'@;
put 'QSl7dmFyIGs9dGhpcztmb3IoRT0wO0U8STtFKyspaz1rLmRibCgpO3JldHVybiBrfXZhciBCPXRoaXMuY3VydmUuYSxOPXRoaXMuY3VydmUudGludixWPXRoaXMueCxaPXRoaXMueSxXPXRoaXMueix6PVcucmVkU3FyKCkucmVkU3FyKCkscT1aLnJlZEFkZChaKTtmb3IoRT0wO0U8STtFKysp'@;
put 'e3ZhciBRPVYucmVkU3FyKCksdGU9cS5yZWRTcXIoKSxhZT10ZS5yZWRTcXIoKSxzZT1RLnJlZEFkZChRKS5yZWRJQWRkKFEpLnJlZElBZGQoQi5yZWRNdWwoeikpLGRlPVYucmVkTXVsKHRlKSxsZT1zZS5yZWRTcXIoKS5yZWRJU3ViKGRlLnJlZEFkZChkZSkpLGNlPWRlLnJlZElTdWIobGUp'@;
put 'LEc9c2UucmVkTXVsKGNlKTtHPUcucmVkSUFkZChHKS5yZWRJU3ViKGFlKTt2YXIgeT1xLnJlZE11bChXKTtFKzE8SSYmKHo9ei5yZWRNdWwoYWUpKSxWPWxlLFc9eSxxPUd9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KFYscS5yZWRNdWwoTiksVyl9LFAucHJvdG90eXBlLmRibD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LFAucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIEksRSxrO2lmKHRoaXMu'@;
put 'ek9uZSl7dmFyIEI9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLFY9Ti5yZWRTcXIoKSxaPXRoaXMueC5yZWRBZGQoTikucmVkU3FyKCkucmVkSVN1YihCKS5yZWRJU3ViKFYpO1o9Wi5yZWRJQWRkKFopO3ZhciBXPUIucmVkQWRkKEIpLnJlZElBZGQoQiksej1XLnJlZFNxcigp'@;
put 'LnJlZElTdWIoWikucmVkSVN1YihaKSxxPVYucmVkSUFkZChWKTtxPShxPXEucmVkSUFkZChxKSkucmVkSUFkZChxKSxJPXosRT1XLnJlZE11bChaLnJlZElTdWIoeikpLnJlZElTdWIocSksaz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgUT10aGlzLngucmVkU3FyKCksdGU9dGhp'@;
put 'cy55LnJlZFNxcigpLGFlPXRlLnJlZFNxcigpLHNlPXRoaXMueC5yZWRBZGQodGUpLnJlZFNxcigpLnJlZElTdWIoUSkucmVkSVN1YihhZSk7c2U9c2UucmVkSUFkZChzZSk7dmFyIGRlPVEucmVkQWRkKFEpLnJlZElBZGQoUSksbGU9ZGUucmVkU3FyKCksY2U9YWUucmVkSUFkZChhZSk7Y2U9'@;
put 'KGNlPWNlLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxJPWxlLnJlZElTdWIoc2UpLnJlZElTdWIoc2UpLEU9ZGUucmVkTXVsKHNlLnJlZElTdWIoSSkpLnJlZElTdWIoY2UpLGs9KGs9dGhpcy55LnJlZE11bCh0aGlzLnopKS5yZWRJQWRkKGspfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChJ'@;
put 'LEUsayl9LFAucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciBJLEUsaztpZih0aGlzLnpPbmUpe3ZhciBCPXRoaXMueC5yZWRTcXIoKSxOPXRoaXMueS5yZWRTcXIoKSxWPU4ucmVkU3FyKCksWj10aGlzLngucmVkQWRkKE4pLnJlZFNxcigpLnJlZElTdWIoQikucmVkSVN1YihW'@;
put 'KTtaPVoucmVkSUFkZChaKTt2YXIgVz1CLnJlZEFkZChCKS5yZWRJQWRkKEIpLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSx6PVcucmVkU3FyKCkucmVkSVN1YihaKS5yZWRJU3ViKFopO0k9ejt2YXIgcT1WLnJlZElBZGQoVik7cT0ocT1xLnJlZElBZGQocSkpLnJlZElBZGQocSksRT1XLnJlZE11'@;
put 'bChaLnJlZElTdWIoeikpLnJlZElTdWIocSksaz10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgUT10aGlzLnoucmVkU3FyKCksdGU9dGhpcy55LnJlZFNxcigpLGFlPXRoaXMueC5yZWRNdWwodGUpLHNlPXRoaXMueC5yZWRTdWIoUSkucmVkTXVsKHRoaXMueC5yZWRBZGQoUSkpO3Nl'@;
put 'PXNlLnJlZEFkZChzZSkucmVkSUFkZChzZSk7dmFyIGRlPWFlLnJlZElBZGQoYWUpLGxlPShkZT1kZS5yZWRJQWRkKGRlKSkucmVkQWRkKGRlKTtJPXNlLnJlZFNxcigpLnJlZElTdWIobGUpLGs9dGhpcy55LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLnJlZElTdWIodGUpLnJlZElTdWIoUSk7'@;
put 'dmFyIGNlPXRlLnJlZFNxcigpO2NlPShjZT0oY2U9Y2UucmVkSUFkZChjZSkpLnJlZElBZGQoY2UpKS5yZWRJQWRkKGNlKSxFPXNlLnJlZE11bChkZS5yZWRJU3ViKEkpKS5yZWRJU3ViKGNlKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoSSxFLGspfSxQLnByb3RvdHlwZS5fZGJsPWZ1bmN0'@;
put 'aW9uKCl7dmFyIEk9dGhpcy5jdXJ2ZS5hLEU9dGhpcy54LGs9dGhpcy55LEI9dGhpcy56LE49Qi5yZWRTcXIoKS5yZWRTcXIoKSxWPUUucmVkU3FyKCksWj1rLnJlZFNxcigpLFc9Vi5yZWRBZGQoVikucmVkSUFkZChWKS5yZWRJQWRkKEkucmVkTXVsKE4pKSx6PUUucmVkQWRkKEUpLHE9KHo9'@;
put 'ei5yZWRJQWRkKHopKS5yZWRNdWwoWiksUT1XLnJlZFNxcigpLnJlZElTdWIocS5yZWRBZGQocSkpLHRlPXEucmVkSVN1YihRKSxhZT1aLnJlZFNxcigpO2FlPShhZT0oYWU9YWUucmVkSUFkZChhZSkpLnJlZElBZGQoYWUpKS5yZWRJQWRkKGFlKTt2YXIgc2U9Vy5yZWRNdWwodGUpLnJlZElT'@;
put 'dWIoYWUpLGRlPWsucmVkQWRkKGspLnJlZE11bChCKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoUSxzZSxkZSl9LFAucHJvdG90eXBlLnRycGw9ZnVuY3Rpb24oKXtpZighdGhpcy5jdXJ2ZS56ZXJvQSlyZXR1cm4gdGhpcy5kYmwoKS5hZGQodGhpcyk7dmFyIEk9dGhpcy54LnJlZFNxcigp'@;
put 'LEU9dGhpcy55LnJlZFNxcigpLGs9dGhpcy56LnJlZFNxcigpLEI9RS5yZWRTcXIoKSxOPUkucmVkQWRkKEkpLnJlZElBZGQoSSksVj1OLnJlZFNxcigpLFo9dGhpcy54LnJlZEFkZChFKS5yZWRTcXIoKS5yZWRJU3ViKEkpLnJlZElTdWIoQiksVz0oWj0oWj0oWj1aLnJlZElBZGQoWikpLnJl'@;
put 'ZEFkZChaKS5yZWRJQWRkKFopKS5yZWRJU3ViKFYpKS5yZWRTcXIoKSx6PUIucmVkSUFkZChCKTt6PSh6PSh6PXoucmVkSUFkZCh6KSkucmVkSUFkZCh6KSkucmVkSUFkZCh6KTt2YXIgcT1OLnJlZElBZGQoWikucmVkU3FyKCkucmVkSVN1YihWKS5yZWRJU3ViKFcpLnJlZElTdWIoeiksUT1F'@;
put 'LnJlZE11bChxKTtRPShRPVEucmVkSUFkZChRKSkucmVkSUFkZChRKTt2YXIgdGU9dGhpcy54LnJlZE11bChXKS5yZWRJU3ViKFEpO3RlPSh0ZT10ZS5yZWRJQWRkKHRlKSkucmVkSUFkZCh0ZSk7dmFyIGFlPXRoaXMueS5yZWRNdWwocS5yZWRNdWwoei5yZWRJU3ViKHEpKS5yZWRJU3ViKFou'@;
put 'cmVkTXVsKFcpKSk7YWU9KGFlPShhZT1hZS5yZWRJQWRkKGFlKSkucmVkSUFkZChhZSkpLnJlZElBZGQoYWUpO3ZhciBzZT10aGlzLnoucmVkQWRkKFopLnJlZFNxcigpLnJlZElTdWIoaykucmVkSVN1YihXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGUsYWUsc2UpfSxQLnByb3RvdHlw'@;
put 'ZS5tdWw9ZnVuY3Rpb24oSSxFKXtyZXR1cm4gST1uZXcgYihJLEUpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxJKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oSSl7aWYoImFmZmluZSI9PT1JLnR5cGUpcmV0dXJuIHRoaXMuZXEoSS50b0ooKSk7aWYodGhpcz09PUkpcmV0dXJuITA7dmFy'@;
put 'IEU9dGhpcy56LnJlZFNxcigpLGs9SS56LnJlZFNxcigpO2lmKDAhPT10aGlzLngucmVkTXVsKGspLnJlZElTdWIoSS54LnJlZE11bChFKSkuY21wbigwKSlyZXR1cm4hMTt2YXIgQj1FLnJlZE11bCh0aGlzLnopLE49ay5yZWRNdWwoSS56KTtyZXR1cm4gMD09PXRoaXMueS5yZWRNdWwoTiku'@;
put 'cmVkSVN1YihJLnkucmVkTXVsKEIpKS5jbXBuKDApfSxQLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oSSl7dmFyIEU9dGhpcy56LnJlZFNxcigpLGs9SS50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKEUpO2lmKDA9PT10aGlzLnguY21wKGspKXJldHVybiEwO2Zvcih2YXIgQj1JLmNs'@;
put 'b25lKCksTj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKEUpOzspe2lmKEIuaWFkZCh0aGlzLmN1cnZlLm4pLEIuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoay5yZWRJQWRkKE4pLDA9PT10aGlzLnguY21wKGspKXJldHVybiEwfX0sUC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv'@;
put 'bigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIEpQb2ludCBJbmZpbml0eT4iOiI8RUMgSlBvaW50IHg6ICIrdGhpcy54LnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei50b1N0cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBl'@;
put 'LmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfX0sMjM0MDE6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBQLGVlPVNlLGI9Uig1MjUyOSksbT1SKDg3MjkpLHc9UigzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gQShVKXt0aGlzLmN1cnZlPSJzaG9ydCI9'@;
put 'PT1VLnR5cGU/bmV3IG0uc2hvcnQoVSk6ImVkd2FyZHMiPT09VS50eXBlP25ldyBtLmVkd2FyZHMoVSk6bmV3IG0ubW9udChVKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5oYXNoPVUuaGFzaCx3KHRoaXMuZy52YWxpZGF0ZSgpLCJJbnZhbGlkIGN1cnZl'@;
put 'Iiksdyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLCJJbnZhbGlkIGN1cnZlLCBHKk4gIT0gTyIpfWZ1bmN0aW9uIEQoVSxJKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUsVSx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dmFyIEU9bmV3IEEo'@;
put 'SSk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZSxVLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpFfSksRX19KX1lZS5QcmVzZXRDdXJ2ZT1BLEQoInAxOTIiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAxOTIiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjEiLG46ImZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxIixoYXNoOmIuc2hhMjU2LGdSZWQ6ITEsZzpbIjE4OGRhODBlIGIwMzA5MGY2IDdjYmYyMGViIDQzYTE4ODAwIGY0ZmYwYWZkIDgyZmYxMDEyIiwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEg'@;
put 'MWU3OTQ4MTEiXX0pLEQoInAyMjQiLHt0eXBlOiJzaG9ydCIscHJpbWU6InAyMjQiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIixhOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm'@;
put 'ZmZmZmZmZiBmZmZmZmZmZSIsYjoiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjQiLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkIixoYXNoOmIuc2hhMjU2'@;
put 'LGdSZWQ6ITEsZzpbImI3MGUwY2JkIDZiYjRiZjdmIDMyMTM5MGI5IDRhMDNjMWQzIDU2YzIxMTIyIDM0MzI4MGQ2IDExNWMxZDIxIiwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzQiXX0pLEQoInAyNTYiLHt0eXBlOiJzaG9y'@;
put 'dCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiIsYToiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmMi'@;
put 'LGI6IjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiIixuOiJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MSIsaGFzaDpiLnNoYTI1'@;
put 'NixnUmVkOiExLGc6WyI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NiIsIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1Il19KSxE'@;
put 'KCJwMzg0Iix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZm'@;
put 'IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjIixiOiJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1'@;
put 'YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZiIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzMiLGhhc2g6Yi5zaGEzODQs'@;
put 'Z1JlZDohMSxnOlsiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjciLCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRi'@;
put 'ZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZiJdfSksRCgicDUyMSIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZm'@;
put 'ZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZm'@;
put 'ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVm'@;
put 'MTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDAiLG46IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUx'@;
put 'ODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5IixoYXNoOmIuc2hhNTEyLGdSZWQ6ITEsZzpbIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4Mjhh'@;
put 'ZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2IiwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2'@;
put 'MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTAiXX0pLEQoImN1cnZlMjU1MTkiLHt0eXBlOiJtb250IixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZm'@;
put 'ZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiI3NmQwNiIsYjoiMSIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDpiLnNoYTI1NixnUmVkOiExLGc6WyI5Il19KSxEKCJlZDI1NTE5Iix7dHlw'@;
put 'ZToiZWR3YXJkcyIscHJpbWU6InAyNTUxOSIscDoiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIsYToiLTEiLGM6IjEiLGQ6IjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFi'@;
put 'IDc1ZWI0ZGNhMTM1OTc4YTMiLG46IjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWQiLGhhc2g6Yi5zaGEyNTYsZ1JlZDohMSxnOlsiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2Iy'@;
put 'Yzk1NjJkNjA4ZjI1ZDUxYSIsIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NTgiXX0pO3RyeXtQPVIoNTE0MTYpfWNhdGNoe1A9dm9pZCAwfUQoInNlY3AyNTZrMSIse3R5cGU6InNob3J0IixwcmltZToiazI1NiIscDoiZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiLGE6IjAiLGI6IjciLG46ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxIixoOiIxIixo'@;
put 'YXNoOmIuc2hhMjU2LGJldGE6IjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWUiLGxhbWJkYToiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MiIsYmFzaXM6'@;
put 'W3thOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSIsYjoiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzIn0se2E6IjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOCIsYjoiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTUifV0sZ1JlZDohMSxn'@;
put 'OlsiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OCIsIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjgiLFBdfSl9LDI5MDQyOigkZSxTZSxSKT0+eyJ1c2Ug'@;
put 'c3RyaWN0Ijt2YXIgZWU9Uig4ODcyMyksYj1SKDMzNTU2KSxtPVIoMzEzNiksWD1SKDIzNDAxKSx3PVIoMzUyOTQpLEE9bS5hc3NlcnQsRD1SKDYwNTQxKSxQPVIoNDA0ODQpO2Z1bmN0aW9uIFUoSSl7aWYoISh0aGlzIGluc3RhbmNlb2YgVSkpcmV0dXJuIG5ldyBVKEkpOyJzdHJpbmciPT10'@;
put 'eXBlb2YgSSYmKEEoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFgsSSksIlVua25vd24gY3VydmUgIitJKSxJPVhbSV0pLEkgaW5zdGFuY2VvZiBYLlByZXNldEN1cnZlJiYoST17Y3VydmU6SX0pLHRoaXMuY3VydmU9SS5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2'@;
put 'ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPUkuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShJLmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdGhpcy5oYXNoPUkuaGFzaHx8SS5jdXJ2ZS5oYXNofSRlLmV4cG9ydHM9VSxVLnByb3RvdHlwZS5r'@;
put 'ZXlQYWlyPWZ1bmN0aW9uKEUpe3JldHVybiBuZXcgRCh0aGlzLEUpfSxVLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihFLGspe3JldHVybiBELmZyb21Qcml2YXRlKHRoaXMsRSxrKX0sVS5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihFLGspe3JldHVybiBELmZy'@;
put 'b21QdWJsaWModGhpcyxFLGspfSxVLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKEUpe0V8fChFPXt9KTtmb3IodmFyIGs9bmV3IGIoe2hhc2g6dGhpcy5oYXNoLHBlcnM6RS5wZXJzLHBlcnNFbmM6RS5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpFLmVudHJvcHl8fHcodGhpcy5oYXNo'@;
put 'LmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpFLmVudHJvcHkmJkUuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxCPXRoaXMubi5ieXRlTGVuZ3RoKCksTj10aGlzLm4uc3ViKG5ldyBlZSgyKSk7Oyl7dmFyIFY9bmV3IGVlKGsuZ2VuZXJhdGUoQikpO2lmKCEo'@;
put 'Vi5jbXAoTik+MCkpcmV0dXJuIFYuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShWKX19LFUucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihFLGspe3ZhciBCPTgqRS5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBCPjAmJihFPUUudXNocm4oQikpLCFr'@;
put 'JiZFLmNtcCh0aGlzLm4pPj0wP0Uuc3ViKHRoaXMubik6RX0sVS5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihFLGssQixOKXsib2JqZWN0Ij09dHlwZW9mIEImJihOPUIsQj1udWxsKSxOfHwoTj17fSksaz10aGlzLmtleUZyb21Qcml2YXRlKGssQiksRT10aGlzLl90cnVuY2F0ZVRvTihuZXcg'@;
put 'ZWUoRSwxNikpO2Zvcih2YXIgVj10aGlzLm4uYnl0ZUxlbmd0aCgpLFo9ay5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLFYpLFc9RS50b0FycmF5KCJiZSIsViksej1uZXcgYih7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpaLG5vbmNlOlcscGVyczpOLnBlcnMscGVyc0VuYzpOLnBlcnNFbmN8'@;
put 'fCJ1dGY4In0pLHE9dGhpcy5uLnN1YihuZXcgZWUoMSkpLFE9MDs7USsrKXt2YXIgdGU9Ti5rP04uayhRKTpuZXcgZWUoei5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgodGU9dGhpcy5fdHJ1bmNhdGVUb04odGUsITApKS5jbXBuKDEpPD0wfHx0ZS5jbXAocSk+PTApKXt2'@;
put 'YXIgYWU9dGhpcy5nLm11bCh0ZSk7aWYoIWFlLmlzSW5maW5pdHkoKSl7dmFyIHNlPWFlLmdldFgoKSxkZT1zZS51bW9kKHRoaXMubik7aWYoMCE9PWRlLmNtcG4oMCkpe3ZhciBsZT10ZS5pbnZtKHRoaXMubikubXVsKGRlLm11bChrLmdldFByaXZhdGUoKSkuaWFkZChFKSk7aWYoMCE9PShs'@;
put 'ZT1sZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBjZT0oYWUuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PXNlLmNtcChkZSk/MjowKTtyZXR1cm4gTi5jYW5vbmljYWwmJmxlLmNtcCh0aGlzLm5oKT4wJiYobGU9dGhpcy5uLnN1YihsZSksY2VePTEpLG5ldyBQKHtyOmRlLHM6bGUscmVj'@;
put 'b3ZlcnlQYXJhbTpjZX0pfX19fX19LFUucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihFLGssQixOKXtFPXRoaXMuX3RydW5jYXRlVG9OKG5ldyBlZShFLDE2KSksQj10aGlzLmtleUZyb21QdWJsaWMoQixOKTt2YXIgVj0oaz1uZXcgUChrLCJoZXgiKSkucixaPWsucztpZihWLmNtcG4oMSk8'@;
put 'MHx8Vi5jbXAodGhpcy5uKT49MHx8Wi5jbXBuKDEpPDB8fFouY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIFEsVz1aLmludm0odGhpcy5uKSx6PVcubXVsKEUpLnVtb2QodGhpcy5uKSxxPVcubXVsKFYpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEo'@;
put 'UT10aGlzLmcuam11bEFkZCh6LEIuZ2V0UHVibGljKCkscSkpLmlzSW5maW5pdHkoKSYmUS5lcVhUb1AoVik6IShRPXRoaXMuZy5tdWxBZGQoeixCLmdldFB1YmxpYygpLHEpKS5pc0luZmluaXR5KCkmJjA9PT1RLmdldFgoKS51bW9kKHRoaXMubikuY21wKFYpfSxVLnByb3RvdHlwZS5yZWNv'@;
put 'dmVyUHViS2V5PWZ1bmN0aW9uKEksRSxrLEIpe0EoKDMmayk9PT1rLCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzIiksRT1uZXcgUChFLEIpO3ZhciBOPXRoaXMubixWPW5ldyBlZShJKSxaPUUucixXPUUucyx6PTEmayxxPWs+PjE7aWYoWi5jbXAodGhpcy5jdXJ2'@;
put 'ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJnEpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtaPXRoaXMuY3VydmUucG9pbnRGcm9tWChxP1ouYWRkKHRoaXMuY3VydmUubik6Wix6KTt2YXIgUT1FLnIuaW52bShOKSx0ZT1OLnN1YihW'@;
put 'KS5tdWwoUSkudW1vZChOKSxhZT1XLm11bChRKS51bW9kKE4pO3JldHVybiB0aGlzLmcubXVsQWRkKHRlLFosYWUpfSxVLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKEksRSxrLEIpe2lmKG51bGwhPT0oRT1uZXcgUChFLEIpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBF'@;
put 'LnJlY292ZXJ5UGFyYW07Zm9yKHZhciBOPTA7Tjw0O04rKyl7dmFyIFY7dHJ5e1Y9dGhpcy5yZWNvdmVyUHViS2V5KEksRSxOKX1jYXRjaHtjb250aW51ZX1pZihWLmVxKGspKXJldHVybiBOfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9'@;
put 'fSw2MDU0MTooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7dmFyIGVlPVIoODg3MjMpLG09UigzMTM2KS5hc3NlcnQ7ZnVuY3Rpb24gWCh3LEEpe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLEEucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShBLnByaXYsQS5wcml2RW5j'@;
put 'KSxBLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKEEucHViLEEucHViRW5jKX0kZS5leHBvcnRzPVgsWC5mcm9tUHVibGljPWZ1bmN0aW9uKEEsRCxQKXtyZXR1cm4gRCBpbnN0YW5jZW9mIFg/RDpuZXcgWChBLHtwdWI6RCxwdWJFbmM6UH0pfSxYLmZyb21Qcml2YXRlPWZ1bmN0aW9uKEEsRCxQ'@;
put 'KXtyZXR1cm4gRCBpbnN0YW5jZW9mIFg/RDpuZXcgWChBLHtwcml2OkQscHJpdkVuYzpQfSl9LFgucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIEE9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gQS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGlj'@;
put 'IGtleSJ9OkEudmFsaWRhdGUoKT9BLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9OntyZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50'@;
put 'In19LFgucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihBLEQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgQSYmKEQ9QSxBPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxEP3RoaXMucHViLmVuY29kZShELEEpOnRoaXMucHVifSxYLnByb3Rv'@;
put 'dHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKEEpe3JldHVybiJoZXgiPT09QT90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxYLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihBLEQpe3RoaXMucHJpdj1uZXcgZWUoQSxEfHwxNiksdGhpcy5wcml2PXRoaXMucHJp'@;
put 'di51bW9kKHRoaXMuZWMuY3VydmUubil9LFgucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oQSxEKXtpZihBLnh8fEEueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/bShBLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5'@;
put 'cGV8fCJlZHdhcmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJm0oQS54JiZBLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoQS54LEEueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoQSxEKX0s'@;
put 'WC5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKEEpe3JldHVybiBBLnZhbGlkYXRlKCl8fG0oQS52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLEEubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxYLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEEsRCxQKXtyZXR1cm4gdGhp'@;
put 'cy5lYy5zaWduKEEsdGhpcyxELFApfSxYLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oQSxEKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkoQSxELHRoaXMpfSxYLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIjxLZXkgcHJpdjogIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9T'@;
put 'dHJpbmcoMTYsMikpKyIgcHViOiAiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKSsiID4ifX0sNDA0ODQ6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDg4NzIzKSxiPVIoMzEzNiksbT1iLmFzc2VydDtmdW5jdGlvbiBYKFUsSSl7aWYoVSBpbnN0YW5jZW9mIFgpcmV0'@;
put 'dXJuIFU7dGhpcy5faW1wb3J0REVSKFUsSSl8fChtKFUuciYmVS5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IGVlKFUuciwxNiksdGhpcy5zPW5ldyBlZShVLnMsMTYpLHRoaXMucmVjb3ZlcnlQYXJhbT12b2lkIDA9PT1VLnJlY292ZXJ5UGFyYW0/bnVsbDpVLnJl'@;
put 'Y292ZXJ5UGFyYW0pfWZ1bmN0aW9uIHcoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gQShVLEkpe3ZhciBFPVVbSS5wbGFjZSsrXTtpZighKDEyOCZFKSlyZXR1cm4gRTt2YXIgaz0xNSZFO2lmKDA9PT1rfHxrPjQpcmV0dXJuITE7Zm9yKHZhciBCPTAsTj0wLFY9SS5wbGFjZTtOPGs7TisrLFYr'@;
put 'KylCPDw9OCxCfD1VW1ZdLEI+Pj49MDtyZXR1cm4hKEI8PTEyNykmJihJLnBsYWNlPVYsQil9ZnVuY3Rpb24gRChVKXtmb3IodmFyIEk9MCxFPVUubGVuZ3RoLTE7IVVbSV0mJiEoMTI4JlVbSSsxXSkmJkk8RTspSSsrO3JldHVybiAwPT09ST9VOlUuc2xpY2UoSSl9ZnVuY3Rpb24gUChVLEkp'@;
put 'e2lmKEk8MTI4KVUucHVzaChJKTtlbHNle3ZhciBFPTErKE1hdGgubG9nKEkpL01hdGguTE4yPj4+Myk7Zm9yKFUucHVzaCgxMjh8RSk7LS1FOylVLnB1c2goST4+PihFPDwzKSYyNTUpO1UucHVzaChJKX19JGUuZXhwb3J0cz1YLFgucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oSSxF'@;
put 'KXtJPWIudG9BcnJheShJLEUpO3ZhciBrPW5ldyB3O2lmKDQ4IT09SVtrLnBsYWNlKytdKXJldHVybiExO3ZhciBCPUEoSSxrKTtpZighMT09PUJ8fEIray5wbGFjZSE9PUkubGVuZ3RofHwyIT09SVtrLnBsYWNlKytdKXJldHVybiExO3ZhciBOPUEoSSxrKTtpZighMT09PU4pcmV0dXJuITE7'@;
put 'dmFyIFY9SS5zbGljZShrLnBsYWNlLE4ray5wbGFjZSk7aWYoay5wbGFjZSs9TiwyIT09SVtrLnBsYWNlKytdKXJldHVybiExO3ZhciBaPUEoSSxrKTtpZighMT09PVp8fEkubGVuZ3RoIT09WitrLnBsYWNlKXJldHVybiExO3ZhciBXPUkuc2xpY2Uoay5wbGFjZSxaK2sucGxhY2UpO2lmKDA9'@;
put 'PT1WWzBdKXtpZighKDEyOCZWWzFdKSlyZXR1cm4hMTtWPVYuc2xpY2UoMSl9aWYoMD09PVdbMF0pe2lmKCEoMTI4JldbMV0pKXJldHVybiExO1c9Vy5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBlZShWKSx0aGlzLnM9bmV3IGVlKFcpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxY'@;
put 'LnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihJKXt2YXIgRT10aGlzLnIudG9BcnJheSgpLGs9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JkVbMF0mJihFPVswXS5jb25jYXQoRSkpLDEyOCZrWzBdJiYoaz1bMF0uY29uY2F0KGspKSxFPUQoRSksaz1EKGspOyEoa1swXXx8MTI4JmtbMV0pOylr'@;
put 'PWsuc2xpY2UoMSk7dmFyIEI9WzJdO1AoQixFLmxlbmd0aCksKEI9Qi5jb25jYXQoRSkpLnB1c2goMiksUChCLGsubGVuZ3RoKTt2YXIgTj1CLmNvbmNhdChrKSxWPVs0OF07cmV0dXJuIFAoVixOLmxlbmd0aCksVj1WLmNvbmNhdChOKSxiLmVuY29kZShWLEkpfX0sODMwNDU6KCRlLFNlLFIp'@;
put 'PT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDUyNTI5KSxiPVIoMjM0MDEpLG09UigzMTM2KSxYPW0uYXNzZXJ0LHc9bS5wYXJzZUJ5dGVzLEE9Uig4NzIyMiksRD1SKDU0NTEpO2Z1bmN0aW9uIFAoVSl7aWYoWCgiZWQyNTUxOSI9PT1VLCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFy'@;
put 'IiksISh0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5ldyBQKFUpO3RoaXMuY3VydmU9VT1iW1VdLmN1cnZlLHRoaXMuZz1VLmcsdGhpcy5nLnByZWNvbXB1dGUoVS5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz1VLnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xl'@;
put 'bmd0aD1NYXRoLmNlaWwoVS5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1lZS5zaGE1MTJ9JGUuZXhwb3J0cz1QLFAucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oSSxFKXtJPXcoSSk7dmFyIGs9dGhpcy5rZXlGcm9tU2VjcmV0KEUpLEI9dGhpcy5oYXNoSW50KGsubWVzc2FnZVByZWZpeCgp'@;
put 'LEkpLE49dGhpcy5nLm11bChCKSxWPXRoaXMuZW5jb2RlUG9pbnQoTiksWj10aGlzLmhhc2hJbnQoVixrLnB1YkJ5dGVzKCksSSkubXVsKGsucHJpdigpKSxXPUIuYWRkKFopLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOk4sUzpXLFJlbmNvZGVkOlZ9'@;
put 'KX0sUC5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEksRSxrKXtJPXcoSSksRT10aGlzLm1ha2VTaWduYXR1cmUoRSk7dmFyIEI9dGhpcy5rZXlGcm9tUHVibGljKGspLE49dGhpcy5oYXNoSW50KEUuUmVuY29kZWQoKSxCLnB1YkJ5dGVzKCksSSksVj10aGlzLmcubXVsKEUuUygpKTtyZXR1'@;
put 'cm4gRS5SKCkuYWRkKEIucHViKCkubXVsKE4pKS5lcShWKX0sUC5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgST10aGlzLmhhc2goKSxFPTA7RTxhcmd1bWVudHMubGVuZ3RoO0UrKylJLnVwZGF0ZShhcmd1bWVudHNbRV0pO3JldHVybiBtLmludEZyb21MRShJLmRpZ2Vz'@;
put 'dCgpKS51bW9kKHRoaXMuY3VydmUubil9LFAucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oSSl7cmV0dXJuIEEuZnJvbVB1YmxpYyh0aGlzLEkpfSxQLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKEkpe3JldHVybiBBLmZyb21TZWNyZXQodGhpcyxJKX0sUC5wcm90'@;
put 'b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbihJKXtyZXR1cm4gSSBpbnN0YW5jZW9mIEQ/STpuZXcgRCh0aGlzLEkpfSxQLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgRT1JLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIEVb'@;
put 'dGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9SS5nZXRYKCkuaXNPZGQoKT8xMjg6MCxFfSxQLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihJKXt2YXIgRT0oST1tLnBhcnNlQnl0ZXMoSSkpLmxlbmd0aC0xLGs9SS5zbGljZSgwLEUpLmNvbmNhdCgtMTI5JklbRV0pLEI9ISEoMTI4Jklb'@;
put 'RV0pLE49bS5pbnRGcm9tTEUoayk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShOLEIpfSxQLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oSSl7cmV0dXJuIEkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxQLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24o'@;
put 'SSl7cmV0dXJuIG0uaW50RnJvbUxFKEkpfSxQLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKEkpe3JldHVybiBJIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sODcyMjI6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1SKDMxMzYpLGI9ZWUuYXNzZXJ0LG09ZWUucGFyc2VC'@;
put 'eXRlcyxYPWVlLmNhY2hlZFByb3BlcnR5O2Z1bmN0aW9uIHcoQSxEKXt0aGlzLmVkZHNhPUEsdGhpcy5fc2VjcmV0PW0oRC5zZWNyZXQpLEEuaXNQb2ludChELnB1Yik/dGhpcy5fcHViPUQucHViOnRoaXMuX3B1YkJ5dGVzPW0oRC5wdWIpfXcuZnJvbVB1YmxpYz1mdW5jdGlvbihELFApe3Jl'@;
put 'dHVybiBQIGluc3RhbmNlb2Ygdz9QOm5ldyB3KEQse3B1YjpQfSl9LHcuZnJvbVNlY3JldD1mdW5jdGlvbihELFApe3JldHVybiBQIGluc3RhbmNlb2Ygdz9QOm5ldyB3KEQse3NlY3JldDpQfSl9LHcucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LFgo'@;
put 'dywicHViQnl0ZXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxYKHcsInB1YiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11'@;
put 'bCh0aGlzLnByaXYoKSl9KSxYKHcsInByaXZCeXRlcyIsZnVuY3Rpb24oKXt2YXIgRD10aGlzLmVkZHNhLFA9dGhpcy5oYXNoKCksVT1ELmVuY29kaW5nTGVuZ3RoLTEsST1QLnNsaWNlKDAsRC5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIElbMF0mPTI0OCxJW1VdJj0xMjcsSVtVXXw9NjQsSX0p'@;
put 'LFgodywicHJpdiIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxYKHcsImhhc2giLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLFgodywibWVzc2FnZVBy'@;
put 'ZWZpeCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSx3LnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKEQpe3JldHVybiBiKHRoaXMuX3NlY3JldCwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnkiKSx0aGlzLmVkZHNhLnNpZ24o'@;
put 'RCx0aGlzKX0sdy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKEQsUCl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KEQsUCx0aGlzKX0sdy5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKEQpe3JldHVybiBiKHRoaXMuX3NlY3JldCwiS2V5UGFpciBpcyBwdWJsaWMgb25seSIpLGVlLmVu'@;
put 'Y29kZSh0aGlzLnNlY3JldCgpLEQpfSx3LnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oRCl7cmV0dXJuIGVlLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRCl9LCRlLmV4cG9ydHM9d30sNTQ1MTooJGUsU2UsUik9PnsidXNlIHN0cmljdCI7dmFyIGVlPVIoODg3MjMpLGI9UigzMTM2KSxt'@;
put 'PWIuYXNzZXJ0LFg9Yi5jYWNoZWRQcm9wZXJ0eSx3PWIucGFyc2VCeXRlcztmdW5jdGlvbiBBKEQsUCl7dGhpcy5lZGRzYT1ELCJvYmplY3QiIT10eXBlb2YgUCYmKFA9dyhQKSksQXJyYXkuaXNBcnJheShQKSYmKFA9e1I6UC5zbGljZSgwLEQuZW5jb2RpbmdMZW5ndGgpLFM6UC5zbGljZShE'@;
put 'LmVuY29kaW5nTGVuZ3RoKX0pLG0oUC5SJiZQLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEQuaXNQb2ludChQLlIpJiYodGhpcy5fUj1QLlIpLFAuUyBpbnN0YW5jZW9mIGVlJiYodGhpcy5fUz1QLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoUC5SKT9QLlI6UC5SZW5j'@;
put 'b2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KFAuUyk/UC5TOlAuU2VuY29kZWR9WChBLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksWChBLCJSIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBv'@;
put 'aW50KHRoaXMuUmVuY29kZWQoKSl9KSxYKEEsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLFgoQSwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLEEucHJvdG90'@;
put 'eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxBLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBiLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4IikudG9VcHBlckNhc2UoKX0sJGUuZXhwb3J0cz1B'@;
put 'fSw1MTQxNjokZT0+eyRlLmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1siZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYSIsImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2Yw'@;
put 'YmUxZjMyY2NlNjk2MTY4MjEiXSxbIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDgiLCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmIl0sWyIxNzVlMTU5'@;
put 'ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5IiwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NSJdLFsiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0'@;
put 'MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MCIsIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOSJdLFsiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwYyIs'@;
put 'IjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzYiXSxbIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGEiLCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgy'@;
put 'NGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmIl0sWyJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhIiwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFl'@;
put 'MWRlODk5OSJdLFsiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMCIsImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDkiXSxbImUxMDMxYmUyNjJjN2VkMWIx'@;
put 'ZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmQiLCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkIl0sWyJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZh'@;
put 'ZjUyZDVlNjg4ZDkwOTQ2OTZkIiwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OCJdLFsiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMSIsIjliYWNhYTM1'@;
put 'NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWQiXSxbIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzAiLCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5'@;
put 'OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4Il0sWyI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3IiwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYSJd'@;
put 'LFsiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MiIsIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTMiXSxbIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEz'@;
put 'ZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhNyIsIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjAiXSxbIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3'@;
put 'NDJkMGU2YmQiLCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwIl0sWyI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzIiwiN2M0ODFiOWI1YjQzYjJlYjYz'@;
put 'NzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNiJdLFsiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhIiwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJl'@;
put 'ZDRjYjdmODhkOGM4ZTU4OSJdLFsiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOCIsImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTciXSxbImU1MDM3ZGUw'@;
put 'YWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmQiLCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhIl0sWyJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThk'@;
put 'YmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1IiwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZCJdLFsiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NCIs'@;
put 'IjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjIiXSxbIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2MiLCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVm'@;
put 'NjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2Il0sWyJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2IiwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdm'@;
put 'MjNjYjk2ZiJdLFsiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOSIsImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDEiXSxbImM3MzhjNTZiMDNiMmFiZTFl'@;
put 'ODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTEiLCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzIl0sWyJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUw'@;
put 'MTQzNzJlOWY2NTg4ZjZjMTRiIiwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZiJdLFsiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwMyIsIjI4MDRkZmE0'@;
put 'NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTciXSxbImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWQiLCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1'@;
put 'ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4Il0sWyJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwIiwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMSJd'@;
put 'LFsiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNCIsImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MCJdLFsiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgx'@;
put 'ZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYSIsIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODIiXSxbImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUw'@;
put 'NTMyMzFlMTEiLCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjIl0sWyI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllIiwiZWZhNDcyNjdmZWE1MjFhMWE5'@;
put 'ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YiJdLFsiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MSIsIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNl'@;
put 'MjBlOGE5NDIxY2YyY2ZkNTEiXSxbImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWYiLCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDUiXSxbImQ2OGE4MGM4'@;
put 'MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZTgiLCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwIl0sWyIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJh'@;
put 'ZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkIiwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NCJdLFsiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NiIs'@;
put 'IjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkIl0sWyI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkIiwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2'@;
put 'NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZCJdLFsiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNSIsIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4'@;
put 'NWEyYTgiXSxbImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjYiLCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4Il0sWyI3Nzc4YTc4YzI4ZGVjM2UzMGEw'@;
put 'NWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxIiwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhYyJdLFsiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNi'@;
put 'MDllZGE5YzA2ZDkwM2FjIiwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZiJdLFsiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MSIsIjFmMDM2NDg0MTNh'@;
put 'MzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjIiXSxbImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2UiLCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZm'@;
put 'YjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3Il0sWyI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxIiwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlYyJdLFsi'@;
put 'ZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiMyIsImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2QiXSxbImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQy'@;
put 'ZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGYiLCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0Il0sWyIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQz'@;
put 'MDBiZjE5IiwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZCJdLFsiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZSIsImIzMThlMGVjMzM1NDAyOGFkZDY2'@;
put 'OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDAiXSxbImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjkiLCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2Iz'@;
put 'OGNkOGQ3ZDNmNGYyODExIl0sWyJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyIiwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMSJdLFsiYThlMjgyZmYw'@;
put 'Yzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxMyIsIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGMiXSxbIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIx'@;
put 'ZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2MiLCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczIl0sWyI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhIiwi'@;
put 'MmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZCJdLFsiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MSIsImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4'@;
put 'MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDUiXSxbIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzMiLCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlm'@;
put 'YWY2NTg5Il0sWyI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4IiwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZSJdLFsiMTM0NjRhNTdhNzgxMDJhYTYy'@;
put 'YjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YiIsIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjciXSxbImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4'@;
put 'OGNhZGEzYTBkMmQ4M2YzNjYiLCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzEiXSxbIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWEiLCI0MGEzMDQ2M2Ez'@;
put 'MzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyIl0sWyI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTAiLCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2Jl'@;
put 'OWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1Il0sWyJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3IiwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3MyJdLFsi'@;
put 'ZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZSIsImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODIiXV19LG5hZjp7d25kOjcscG9pbnRzOltbImY5MzA4YTAx'@;
put 'OTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjkiLCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyIl0sWyIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4'@;
put 'NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0IiwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNiJdLFsiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliYyIs'@;
put 'IjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGEiXSxbImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmUiLCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNi'@;
put 'NjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3Il0sWyI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiIiwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0Yzlj'@;
put 'OTUzYzYxYiJdLFsiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOCIsImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MSJdLFsiZDc5MjRkNGY3ZDQzZWE5NjVh'@;
put 'NDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZSIsIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNTgiXSxbImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4'@;
put 'NzY2ZTRmYWEwNGEyZDRhMzQiLCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3Il0sWyIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjIiwiODVlODliYzAz'@;
put 'Nzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YSJdLFsiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNSIsIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNi'@;
put 'MmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGMiXSxbIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2YiLCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjciXSxb'@;
put 'IjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTQiLCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyIl0sWyJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJl'@;
put 'Yjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5IiwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NSJdLFsiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3'@;
put 'ZDIyZTdkYiIsIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODIiXSxbIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjQiLCJlMDIyY2Y0MmMyYmQ0YTcwOGIz'@;
put 'ZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyIl0sWyIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1IiwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3'@;
put 'YWRlZTlkNjNkMDFiMjM5NiJdLFsiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OSIsIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OSJdLFsiNjJkMTRkYWI0'@;
put 'MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZCIsIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWYiXSxbIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5'@;
put 'ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmYiLCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhIl0sWyI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiIiwi'@;
put 'ZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3Il0sWyJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5IiwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1'@;
put 'NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzMyJdLFsiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzIiwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0'@;
put 'OWM5YSJdLFsiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NCIsIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDYiXSxbImYyZGFjOTkxY2M0Y2U0YjllYTQ0'@;
put 'ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzAiLCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3Il0sWyI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGVi'@;
put 'Y2JhNDg1MGM2OTBkNDViIiwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZSJdLFsiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0NyIsImNlZGFiZDliODIy'@;
put 'MDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjYiXSxbImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDEiLCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3'@;
put 'OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2Il0sWyIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwIiwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MCJdLFsi'@;
put 'NzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNSIsIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MSJdLFsiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThh'@;
put 'NjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOCIsIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4MyJdLFsiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5'@;
put 'YjllOCIsIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjUiXSxbIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWIiLCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0'@;
put 'NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiIl0sWyJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmIiwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdi'@;
put 'OGM0NWNmMmJhMjQxNyJdLFsiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0MyIsImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjgiXSxbIjI5MDc5OGMyYjY0'@;
put 'NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmEiLCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhIl0sWyJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJm'@;
put 'ZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1IiwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNiJdLFsiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YSIsIjc0'@;
put 'NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTYiXSxbIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2UiLCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlh'@;
put 'MDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlIl0sWyJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4IiwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1'@;
put 'NzMzZCJdLFsiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyYyIsIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTIiXSxbIjk0OGRjYWRmNTk5MGUwNDhhYTM4'@;
put 'NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTkiLCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlIl0sWyI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3'@;
put 'MDMyOGE4YTNkN2M3N2FiIiwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzNyJdLFsiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYSIsImVmMGFmYmIyMDU2'@;
put 'MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTEiXSxbImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWYiLCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYy'@;
put 'OTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0Il0sWyIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwIiwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NSJdLFsi'@;
put 'NzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNCIsImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWQiXSxbIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNi'@;
put 'NDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWMiLCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkIl0sWyJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQw'@;
put 'NzE3OTQwIiwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOSJdLFsiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MCIsImE4NTViYWJhZDVjZDYwYzg4YjQz'@;
put 'MGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNiJdLFsiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliMyIsIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJk'@;
put 'ODBmMGIxMjg2ZDgzNzQiXSxbIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGYiLCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWUiXSxbImYyMTllYTVkNmI1'@;
put 'NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjMiLCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxIl0sWyJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkw'@;
put 'YmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4IiwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYiJdLFsiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZiIsIjVm'@;
put 'MzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjEiXSxbIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjUiLCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1'@;
put 'NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2Il0sWyJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2IiwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFj'@;
put 'OGMxZSJdLFsiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNSIsIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGQiXSxbImVhYTVmOTgwYzI0NWY2ZjAzODk3'@;
put 'ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTkiLCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjIl0sWyI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5'@;
put 'NmM0YjZiMzVhNDlmNTEiLCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0Il0sWyI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1IiwiNDIyNDJhOTY5Mjgz'@;
put 'YTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyYyJdLFsiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNSIsIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1'@;
put 'YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmIiXSxbImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTciLCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTMiXSxbIjg0'@;
put 'MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODEiLCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTQiXSxbIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJm'@;
put 'MjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDUiLCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1Il0sWyIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYy'@;
put 'ZjY2IiwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmYyJdLFsiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2IiwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5'@;
put 'YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNCJdLFsiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZSIsIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3'@;
put 'YTkxMjljZGQyNGUiXSxbIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTQiLCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjYiXSxbIjg1YjdjMWRjYjNjZWMx'@;
put 'YjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzEiLCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExIl0sWyIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4'@;
put 'YTdhZjg3MmEyODAwNjYxYWM1ZjUxIiwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiIl0sWyJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyIiwiYWU0MzQx'@;
put 'MDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMiJdLFsiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1IiwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJj'@;
put 'MDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzYyJdLFsiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYiIsIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTMi'@;
put 'XSxbImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDQiLCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkIl0sWyJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1'@;
put 'ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmIiwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMCJdLFsiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0'@;
put 'NTBmNDU4ODkiLCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0Il0sWyI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2IiwiYjBlYTU1OGExMTNjMzBiZWE2'@;
put 'MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NiJdLFsiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NCIsIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2Jl'@;
put 'NGM1NzY3YmVhOTNlYTU3YTQiXSxbIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2EiLCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3Il0sWyJjYzg3MDRi'@;
put 'OGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwIiwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxMyJdLFsiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0'@;
put 'ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5NyIsIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTYiXSxbImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5MyIs'@;
put 'ImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzgiXSxbImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWYiLCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5'@;
put 'NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWYiXSxbIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzgiLCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMx'@;
put 'Yzc0NDQ4Il0sWyJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhIiwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YSJdLFsiYzQwNzQ3Y2M5ZDAxMmNiMWEx'@;
put 'M2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMSIsIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDQiXSxbIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQz'@;
put 'NGM4MjAzZWY0MDM3ZjM1MDIiLCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3Il0sWyIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhIiwiYmU1MmQxMDdi'@;
put 'Y2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmNyJdLFsiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNiIsIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVm'@;
put 'MGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmQiXSxbImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODYiLCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhIl0s'@;
put 'WyJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlIiwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NCJdLFsiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkz'@;
put 'MDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNCIsIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzciXSxbImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3'@;
put 'YzExY2NlZGEiLCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3Il0sWyI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5IiwiY2Q0NTBlYzMzNTQzODk4NmRm'@;
put 'ZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMCJdLFsiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZiIsImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5'@;
put 'MzgzNjA5OTBlMmJmYWQxMjUiXSxbImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGMiLCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlIl0sWyIxM2U4N2Iw'@;
put 'MjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyIiwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMSJdLFsiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQy'@;
put 'NGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YSIsIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjIiXSxbImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODAi'@;
put 'LCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzIl0sWyJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkIiwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVj'@;
put 'Y2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOCJdLFsiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMSIsImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0'@;
put 'NjMwMzY3NTgiXSxbIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjMiLCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzUiXSxbImU2MmY5NDkwZDNkNTFkYTYz'@;
put 'OTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTIiLCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkIl0sWyI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0'@;
put 'ZmQ2ZDhlN2Q2NWFhYWIxMTkzIiwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlYyJdLFsiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMCIsIjk3MzExNDFk'@;
put 'ODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMCJdLFsiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OCIsImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgw'@;
put 'NTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2MiXSxbImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjciLCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0Il0s'@;
put 'WyI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4IiwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZiJdLFsiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZj'@;
put 'MzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZSIsIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDkiXSxbIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0'@;
put 'YmY1ZjY4M2QiLCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjYiXSxbIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmIiLCIyOTlkMjFmOTQxM2YzM2IzZWRm'@;
put 'NDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1Il0sWyJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmIiwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4'@;
put 'MmZjNDE2OTEwYjNlZWE4NyJdLFsiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNiIsIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2IiXSxbImJlMjA2MjAw'@;
put 'M2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTciLCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjIl0sWyI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4'@;
put 'NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhIiwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3YyJdLFsiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyYyIs'@;
put 'ImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWYiXSxbImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTIiLCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRk'@;
put 'ZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhIl0sWyJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiIiwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRk'@;
put 'MTI1YWM0NiJdLFsiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NSIsImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2YiXSxbIjc5ODVmZGZkMTI3YzA1Njdj'@;
put 'NmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTciLCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzIl0sWyI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJk'@;
put 'MGVkNWZmMTU0M2RhNzcwM2U5IiwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOCJdLFsiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhMyIsIjU1M2UwNGY2'@;
put 'YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjgiXSxbIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTciLCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdj'@;
put 'OGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzMiXSxbIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjYiLCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzIl0s'@;
put 'WyI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4IiwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOCJdLFsiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1'@;
put 'ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMSIsIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzEiXSxbIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2'@;
put 'Zjk3MmMxODAiLCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5Il1dfX19LDMxMzY6KCRlLFNlLFIpPT57InVzZSBzdHJpY3QiO3ZhciBlZT1TZSxiPVIoODg3MjMpLG09UigzOTIxMCksWD1SKDIxODMyKTtlZS5hc3NlcnQ9'@;
put 'bSxlZS50b0FycmF5PVgudG9BcnJheSxlZS56ZXJvMj1YLnplcm8yLGVlLnRvSGV4PVgudG9IZXgsZWUuZW5jb2RlPVguZW5jb2RlLGVlLmdldE5BRj1mdW5jdGlvbiB3KEksRSxrKXt2YXIgTixCPW5ldyBBcnJheShNYXRoLm1heChJLmJpdExlbmd0aCgpLGspKzEpO2ZvcihOPTA7TjxCLmxl'@;
put 'bmd0aDtOKz0xKUJbTl09MDt2YXIgVj0xPDxFKzEsWj1JLmNsb25lKCk7Zm9yKE49MDtOPEIubGVuZ3RoO04rKyl7dmFyIFcsej1aLmFuZGxuKFYtMSk7Wi5pc09kZCgpP1ouaXN1Ym4oVz16PihWPj4xKS0xPyhWPj4xKS16OnopOlc9MCxCW05dPVcsWi5pdXNocm4oMSl9cmV0dXJuIEJ9LGVl'@;
put 'LmdldEpTRj1mdW5jdGlvbiBBKEksRSl7dmFyIGs9W1tdLFtdXTtJPUkuY2xvbmUoKSxFPUUuY2xvbmUoKTtmb3IodmFyIFYsQj0wLE49MDtJLmNtcG4oLUIpPjB8fEUuY21wbigtTik+MDspe3ZhciB6LHEsWj1JLmFuZGxuKDMpK0ImMyxXPUUuYW5kbG4oMykrTiYzOzM9PT1aJiYoWj0tMSks'@;
put 'Mz09PVcmJihXPS0xKSx6PTEmWj8zIT0oVj1JLmFuZGxuKDcpK0ImNykmJjUhPT1WfHwyIT09Vz9aOi1aOjAsa1swXS5wdXNoKHopLHE9MSZXPzMhPShWPUUuYW5kbG4oNykrTiY3KSYmNSE9PVZ8fDIhPT1aP1c6LVc6MCxrWzFdLnB1c2gocSksMipCPT09eisxJiYoQj0xLUIpLDIqTj09PXEr'@;
put 'MSYmKE49MS1OKSxJLml1c2hybigxKSxFLml1c2hybigxKX1yZXR1cm4ga30sZWUuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gRChJLEUsayl7dmFyIEI9Il8iK0U7SS5wcm90b3R5cGVbRV09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tCXT90aGlzW0JdOnRoaXNbQl09ay5jYWxs'@;
put 'KHRoaXMpfX0sZWUucGFyc2VCeXRlcz1mdW5jdGlvbiBQKEkpe3JldHVybiJzdHJpbmciPT10eXBlb2YgST9lZS50b0FycmF5KEksImhleCIpOkl9LGVlLmludEZyb21MRT1mdW5jdGlvbiBVKEkpe3JldHVybiBuZXcgYihJLCJoZXgiLCJsZSIpfX0sODg3MjM6ZnVuY3Rpb24oJGUsU2UsUil7'@;
put 'IWZ1bmN0aW9uKGVlLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBtKEcseSl7aWYoIUcpdGhyb3cgbmV3IEVycm9yKHl8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gWChHLHkpe0cuc3VwZXJfPXk7dmFyIEw9ZnVuY3Rpb24oKXt9O0wucHJvdG90eXBlPXkucHJvdG90eXBlLEcucHJv'@;
put 'dG90eXBlPW5ldyBMLEcucHJvdG90eXBlLmNvbnN0cnVjdG9yPUd9ZnVuY3Rpb24gdyhHLHksTCl7aWYody5pc0JOKEcpKXJldHVybiBHO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1HJiYoKCJsZSI9PT15fHwiYmUi'@;
put 'PT09eSkmJihMPXkseT0xMCksdGhpcy5faW5pdChHfHwwLHl8fDEwLEx8fCJiZSIpKX12YXIgQTsib2JqZWN0Ij09dHlwZW9mIGVlP2VlLmV4cG9ydHM9dzpiLkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1'@;
put 'Ij93aW5kb3cuQnVmZmVyOlIoNzkzNjgpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRChHLHkpe3ZhciBMPUcuY2hhckNvZGVBdCh5KTtyZXR1cm4gTD49NjUmJkw8PTcwP0wtNTU6TD49OTcmJkw8PTEwMj9MLTg3OkwtNDgmMTV9ZnVuY3Rpb24gUChHLHksTCl7dmFyIEg9RChHLEwpO3JldHVy'@;
put 'biBMLTE+PXkmJihIfD1EKEcsTC0xKTw8NCksSH1mdW5jdGlvbiBVKEcseSxMLEgpe2Zvcih2YXIgaj0wLGc9TWF0aC5taW4oRy5sZW5ndGgsTCksUz15O1M8ZztTKyspe3ZhciB4PUcuY2hhckNvZGVBdChTKS00ODtqKj1ILGorPXg+PTQ5P3gtNDkrMTA6eD49MTc/eC0xNysxMDp4fXJldHVy'@;
put 'biBqfXcuaXNCTj1mdW5jdGlvbih5KXtyZXR1cm4geSBpbnN0YW5jZW9mIHd8fG51bGwhPT15JiYib2JqZWN0Ij09dHlwZW9mIHkmJnkuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHkud29yZHMpfSx3Lm1heD1mdW5jdGlvbih5LEwpe3JldHVybiB5'@;
put 'LmNtcChMKT4wP3k6TH0sdy5taW49ZnVuY3Rpb24oeSxMKXtyZXR1cm4geS5jbXAoTCk8MD95Okx9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHksTCxIKXtpZigibnVtYmVyIj09dHlwZW9mIHkpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIoeSxMLEgpO2lmKCJvYmplY3QiPT10eXBlb2Yg'@;
put 'eSlyZXR1cm4gdGhpcy5faW5pdEFycmF5KHksTCxIKTsiaGV4Ij09PUwmJihMPTE2KSxtKEw9PT0oMHxMKSYmTD49MiYmTDw9MzYpO3ZhciBqPTA7Ii0iPT09KHk9eS50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihqKyssdGhpcy5uZWdhdGl2ZT0xKSxqPHkubGVuZ3RoJiYo'@;
put 'MTY9PT1MP3RoaXMuX3BhcnNlSGV4KHksaixIKToodGhpcy5fcGFyc2VCYXNlKHksTCxqKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLEwsSCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24oeSxMLEgpe3k8MCYmKHRoaXMubmVnYXRpdmU9MSx5'@;
put 'PS15KSx5PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ5XSx0aGlzLmxlbmd0aD0xKTp5PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnkseS82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG0oeTw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndv'@;
put 'cmRzPVs2NzEwODg2MyZ5LHkvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxMLEgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHksTCxIKXtpZihtKCJudW1iZXIiPT10eXBlb2YgeS5s'@;
put 'ZW5ndGgpLHkubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHkubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGo9MDtqPHRoaXMubGVuZ3RoO2orKyl0aGlzLndv'@;
put 'cmRzW2pdPTA7dmFyIGcsUyx4PTA7aWYoImJlIj09PUgpZm9yKGo9eS5sZW5ndGgtMSxnPTA7aj49MDtqLT0zKXRoaXMud29yZHNbZ118PShTPXlbal18eVtqLTFdPDw4fHlbai0yXTw8MTYpPDx4JjY3MTA4ODYzLHRoaXMud29yZHNbZysxXT1TPj4+MjYteCY2NzEwODg2MywoeCs9MjQpPj0y'@;
put 'NiYmKHgtPTI2LGcrKyk7ZWxzZSBpZigibGUiPT09SClmb3Ioaj0wLGc9MDtqPHkubGVuZ3RoO2orPTMpdGhpcy53b3Jkc1tnXXw9KFM9eVtqXXx5W2orMV08PDh8eVtqKzJdPDwxNik8PHgmNjcxMDg4NjMsdGhpcy53b3Jkc1tnKzFdPVM+Pj4yNi14JjY3MTA4ODYzLCh4Kz0yNCk+PTI2JiYo'@;
put 'eC09MjYsZysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oeSxMLEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoeS5sZW5ndGgtTCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5n'@;
put 'dGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgeCxnPTAsUz0wO2lmKCJiZSI9PT1IKWZvcihqPXkubGVuZ3RoLTE7aj49TDtqLT0yKXg9UCh5LEwsaik8PGcsdGhpcy53b3Jkc1tTXXw9NjcxMDg4NjMmeCxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O2Vsc2Ug'@;
put 'Zm9yKGo9KHkubGVuZ3RoLUwpJTI9PTA/TCsxOkw7ajx5Lmxlbmd0aDtqKz0yKXg9UCh5LEwsaik8PGcsdGhpcy53b3Jkc1tTXXw9NjcxMDg4NjMmeCxnPj0xOD8oZy09MTgsdGhpcy53b3Jkc1tTKz0xXXw9eD4+PjI2KTpnKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFz'@;
put 'ZT1mdW5jdGlvbih5LEwsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxnPTE7Zzw9NjcxMDg4NjM7Zyo9TClqKys7ai0tLGc9Zy9MfDA7Zm9yKHZhciBTPXkubGVuZ3RoLUgseD1TJWosXz1NYXRoLm1pbihTLFMteCkrSCxwPTAsQz1IO0M8XztDKz1qKXA9VSh5'@;
put 'LEMsQytqLEwpLHRoaXMuaW11bG4oZyksdGhpcy53b3Jkc1swXStwPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXA6dGhpcy5faWFkZG4ocCk7aWYoMCE9PXgpe3ZhciBLPTE7Zm9yKHA9VSh5LEMseS5sZW5ndGgsTCksQz0wO0M8eDtDKyspSyo9TDt0aGlzLmltdWxuKEspLHRoaXMud29yZHNb'@;
put 'MF0rcDw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1wOnRoaXMuX2lhZGRuKHApfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbih5KXt5LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBMPTA7TDx0aGlzLmxlbmd0aDtMKyspeS53b3Jkc1tMXT10aGlz'@;
put 'LndvcmRzW0xdO3kubGVuZ3RoPXRoaXMubGVuZ3RoLHkubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx5LnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgeT1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHkpLHl9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVu'@;
put 'Y3Rpb24oeSl7Zm9yKDt0aGlzLmxlbmd0aDx5Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTty'@;
put 'ZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhp'@;
put 'cy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIEk9WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAw'@;
put 'MDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw'@;
put 'MDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sRT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcs'@;
put 'Niw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxrPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYs'@;
put 'MTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0'@;
put 'MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIE4oRyx5LEwpe0wubmVnYXRpdmU9eS5uZWdhdGl2ZV5HLm5lZ2F0aXZlO3ZhciBIPUcubGVuZ3RoK3kubGVuZ3RofDA7TC5sZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8Ry53b3Jkc1swXSxnPTB8eS53b3Jkc1swXSxTPWoqZyxfPVMvNjcx'@;
put 'MDg4NjR8MDtMLndvcmRzWzBdPTY3MTA4ODYzJlM7Zm9yKHZhciBwPTE7cDxIO3ArKyl7Zm9yKHZhciBDPV8+Pj4yNixLPTY3MTA4ODYzJl8sbmU9TWF0aC5taW4ocCx5Lmxlbmd0aC0xKSx1ZT1NYXRoLm1heCgwLHAtRy5sZW5ndGgrMSk7dWU8PW5lO3VlKyspQys9KFM9KGo9MHxHLndvcmRz'@;
put 'W3AtdWV8MF0pKihnPTB8eS53b3Jkc1t1ZV0pK0spLzY3MTA4ODY0fDAsSz02NzEwODg2MyZTO0wud29yZHNbcF09MHxLLF89MHxDfXJldHVybiAwIT09Xz9MLndvcmRzW3BdPTB8XzpMLmxlbmd0aC0tLEwuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih5LEwpe3ZhciBI'@;
put 'O2lmKEw9MHxMfHwxLDE2PT09KHk9eXx8MTApfHwiaGV4Ij09PXkpe0g9IiI7Zm9yKHZhciBqPTAsZz0wLFM9MDtTPHRoaXMubGVuZ3RoO1MrKyl7dmFyIHg9dGhpcy53b3Jkc1tTXSxfPSgxNjc3NzIxNSYoeDw8anxnKSkudG9TdHJpbmcoMTYpO0g9MCE9KGc9eD4+PjI0LWomMTY3NzcyMTUp'@;
put 'fHxTIT09dGhpcy5sZW5ndGgtMT9JWzYtXy5sZW5ndGhdK18rSDpfK0gsKGorPTIpPj0yNiYmKGotPTI2LFMtLSl9Zm9yKDAhPT1nJiYoSD1nLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoeT09'@;
put 'PSgwfHkpJiZ5Pj0yJiZ5PD0zNil7dmFyIHA9RVt5XSxDPWtbeV07SD0iIjt2YXIgSz10aGlzLmNsb25lKCk7Zm9yKEsubmVnYXRpdmU9MDshSy5pc1plcm8oKTspe3ZhciBuZT1LLm1vZG4oQykudG9TdHJpbmcoeSk7SD0oSz1LLmlkaXZuKEMpKS5pc1plcm8oKT9uZStIOklbcC1uZS5sZW5n'@;
put 'dGhdK25lK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVMIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9bSghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5j'@;
put 'dGlvbigpe3ZhciB5PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD95Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/eSs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3Ro'@;
put 'PjImJm0oITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy15Onl9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24o'@;
put 'eSxMKXtyZXR1cm4gbSh0eXBlb2YgQTwidSIpLHRoaXMudG9BcnJheUxpa2UoQSx5LEwpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkseSxMKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oeSxMLEgpe3Zh'@;
put 'ciBqPXRoaXMuYnl0ZUxlbmd0aCgpLGc9SHx8TWF0aC5tYXgoMSxqKTttKGo8PWcsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxtKGc+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBfLHAsUz0ibGUiPT09TCx4PW5ldyB5'@;
put 'KGcpLEM9dGhpcy5jbG9uZSgpO2lmKFMpe2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRsbigyNTUpLEMuaXVzaHJuKDgpLHhbcF09Xztmb3IoO3A8ZztwKyspeFtwXT0wfWVsc2V7Zm9yKHA9MDtwPGctajtwKyspeFtwXT0wO2ZvcihwPTA7IUMuaXNaZXJvKCk7cCsrKV89Qy5hbmRs'@;
put 'bigyNTUpLEMuaXVzaHJuKDgpLHhbZy1wLTFdPV99cmV0dXJuIHh9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbih5KXtyZXR1cm4gMzItTWF0aC5jbHozMih5KX06ZnVuY3Rpb24oeSl7dmFyIEw9eSxIPTA7cmV0dXJuIEw+PTQwOTYmJihIKz0xMyxMPj4+PTEz'@;
put 'KSxMPj02NCYmKEgrPTcsTD4+Pj03KSxMPj04JiYoSCs9NCxMPj4+PTQpLEw+PTImJihIKz0yLEw+Pj49MiksSCtMfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oeSl7aWYoMD09PXkpcmV0dXJuIDI2O3ZhciBMPXksSD0wO3JldHVybiA4MTkxJkx8fChIKz0xMyxMPj4+PTEzKSwx'@;
put 'MjcmTHx8KEgrPTcsTD4+Pj03KSwxNSZMfHwoSCs9NCxMPj4+PTQpLDMmTHx8KEgrPTIsTD4+Pj0yKSwxJkx8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0'@;
put 'aGlzLmxlbmd0aC0xKStMfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB5PTAsTD0wO0w8dGhpcy5sZW5ndGg7TCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW0xdKTtpZih5Kz1ILDI2IT09SClicmVh'@;
put 'a31yZXR1cm4geX0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHkpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHkpLmlhZGRu'@;
put 'KDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMudGVzdG4oeS0xKT90aGlzLm5vdG4oeSkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVn'@;
put 'YXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHkp'@;
put 'e2Zvcig7dGhpcy5sZW5ndGg8eS5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIEw9MDtMPHkubGVuZ3RoO0wrKyl0aGlzLndvcmRzW0xdPXRoaXMud29yZHNbTF18eS53b3Jkc1tMXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rp'@;
put 'b24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0aGlzLml1b3IoeSl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHkpOnkuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBl'@;
put 'LnVvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IoeSk6eS5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHkpe3ZhciBMO0w9dGhpcy5sZW5ndGg+eS5sZW5ndGg/eTp0aGlzO2Zvcih2YXIgSD0w'@;
put 'O0g8TC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09dGhpcy53b3Jkc1tIXSZ5LndvcmRzW0hdO3JldHVybiB0aGlzLmxlbmd0aD1MLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0oISh0aGlzLm5lZ2F0aXZlfHkubmVnYXRpdmUpKSx0'@;
put 'aGlzLml1YW5kKHkpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHkpOnkuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmxlbmd0aD55Lmxl'@;
put 'bmd0aD90aGlzLmNsb25lKCkuaXVhbmQoeSk6eS5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih5KXt2YXIgTCxIO3RoaXMubGVuZ3RoPnkubGVuZ3RoPyhMPXRoaXMsSD15KTooTD15LEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhp'@;
put 'cy53b3Jkc1tqXT1MLndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PUwpZm9yKDtqPEwubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUwud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPUwubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih5KXtyZXR1'@;
put 'cm4gbSghKHRoaXMubmVnYXRpdmV8eS5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IoeSl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5sZW5ndGg+eS5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoeSk6eS5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9'@;
put 'ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMubGVuZ3RoPnkubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih5KTp5LmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD0wfE1hdGguY2VpbCh5LzI2'@;
put 'KSxIPXklMjY7dGhpcy5fZXhwYW5kKEwpLEg+MCYmTC0tO2Zvcih2YXIgaj0wO2o8TDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5zdHJpcCgpfSx3'@;
put 'LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4oeSl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24oeSxMKXttKCJudW1iZXIiPT10eXBlb2YgeSYmeT49MCk7dmFyIEg9eS8yNnwwLGo9eSUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhp'@;
put 'cy53b3Jkc1tIXT1MP3RoaXMud29yZHNbSF18MTw8ajp0aGlzLndvcmRzW0hdJn4oMTw8aiksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHkpe3ZhciBMLEgsajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXkubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9'@;
put 'MCxMPXRoaXMuaXN1Yih5KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT15Lm5lZ2F0aXZlKXJldHVybiB5Lm5lZ2F0aXZlPTAsTD10aGlzLmlzdWIoeSkseS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+eS5s'@;
put 'ZW5ndGg/KEg9dGhpcyxqPXkpOihIPXksaj10aGlzKTtmb3IodmFyIGc9MCxTPTA7UzxqLmxlbmd0aDtTKyspdGhpcy53b3Jkc1tTXT02NzEwODg2MyYoTD0oMHxILndvcmRzW1NdKSsoMHxqLndvcmRzW1NdKStnKSxnPUw+Pj4yNjtmb3IoOzAhPT1nJiZTPEgubGVuZ3RoO1MrKyl0aGlzLndv'@;
put 'cmRzW1NdPTY3MTA4ODYzJihMPSgwfEgud29yZHNbU10pK2cpLGc9TD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1nKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWcsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7UzxILmxlbmd0aDtTKyspdGhpcy53b3Jkc1tT'@;
put 'XT1ILndvcmRzW1NdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSl7dmFyIEw7cmV0dXJuIDAhPT15Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8oeS5uZWdhdGl2ZT0wLEw9dGhpcy5zdWIoeSkseS5uZWdhdGl2ZV49MSxMKTowPT09eS5uZWdhdGl2ZSYmMCE9'@;
put 'PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxMPXkuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxMKTp0aGlzLmxlbmd0aD55Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh5KTp5LmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih5KXtpZigwIT09'@;
put 'eS5uZWdhdGl2ZSl7eS5uZWdhdGl2ZT0wO3ZhciBMPXRoaXMuaWFkZCh5KTtyZXR1cm4geS5uZWdhdGl2ZT0xLEwuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWdu'@;
put 'KCk7dmFyIGosZyxIPXRoaXMuY21wKHkpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztIPjA/KGo9dGhpcyxnPXkpOihqPXksZz10aGlzKTtmb3IodmFyIFM9MCx4PTA7eDxnLmxlbmd0aDt4KyspUz0oTD0oMHxqLndv'@;
put 'cmRzW3hdKS0oMHxnLndvcmRzW3hdKStTKT4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZMO2Zvcig7MCE9PVMmJng8ai5sZW5ndGg7eCsrKVM9KEw9KDB8ai53b3Jkc1t4XSkrUyk+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmTDtpZigwPT09UyYmeDxqLmxlbmd0aCYmaiE9PXRoaXMp'@;
put 'Zm9yKDt4PGoubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPWoud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLHgpLGohPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih5KXtyZXR1cm4g'@;
put 'dGhpcy5jbG9uZSgpLmlzdWIoeSl9O3ZhciBWPWZ1bmN0aW9uKHksTCxIKXt2YXIgXyxwLEMsaj15LndvcmRzLGc9TC53b3JkcyxTPUgud29yZHMseD0wLEs9MHxqWzBdLG5lPTgxOTEmSyx1ZT1LPj4+MTMsaGU9MHxqWzFdLHhlPTgxOTEmaGUsT2U9aGU+Pj4xMyxIZT0wfGpbMl0sRWU9ODE5'@;
put 'MSZIZSxMZT1IZT4+PjEzLE5lPTB8alszXSxLZT04MTkxJk5lLFVlPU5lPj4+MTMsWGU9MHxqWzRdLGF0PTgxOTEmWGUsRmU9WGU+Pj4xMyxDZT0wfGpbNV0sRGU9ODE5MSZDZSxSZT1DZT4+PjEzLGV0PTB8als2XSxudD04MTkxJmV0LEdlPWV0Pj4+MTMsZHQ9MHxqWzddLFRlPTgxOTEmZHQs'@;
put 'QWU9ZHQ+Pj4xMyxCZT0wfGpbOF0sb3Q9ODE5MSZCZSxsdD1CZT4+PjEzLEN0PTB8als5XSxGdD04MTkxJkN0LFJ0PUN0Pj4+MTMsWHQ9MHxnWzBdLFNuPTgxOTEmWHQsenQ9WHQ+Pj4xMyx2bj0wfGdbMV0sQm49ODE5MSZ2bix0bj12bj4+PjEzLFpuPTB8Z1syXSxPbj04MTkxJlpuLHB0PVpu'@;
put 'Pj4+MTMsZm49MHxnWzNdLGRuPTgxOTEmZm4sTXQ9Zm4+Pj4xMyxZdD0wfGdbNF0sX3Q9ODE5MSZZdCxqdD1ZdD4+PjEzLHBuPTB8Z1s1XSxydD04MTkxJnBuLEV0PXBuPj4+MTMsUXQ9MHxnWzZdLFR0PTgxOTEmUXQsbXQ9UXQ+Pj4xMyxHdD0wfGdbN10sa249ODE5MSZHdCxCdD1HdD4+PjEz'@;
put 'LGJuPTB8Z1s4XSxDbj04MTkxJmJuLGVuPWJuPj4+MTMsUG49MHxnWzldLHduPTgxOTEmUG4sJHQ9UG4+Pj4xMztILm5lZ2F0aXZlPXkubmVnYXRpdmVeTC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KHgrKF89TWF0aC5pbXVsKG5lLFNuKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11'@;
put 'bChuZSx6dCkpK01hdGguaW11bCh1ZSxTbil8MCkpPDwxMyl8MDt4PSgoQz1NYXRoLmltdWwodWUsenQpKSsocD4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsXz1NYXRoLmltdWwoeGUsU24pLHA9KHA9TWF0aC5pbXVsKHhlLHp0KSkrTWF0aC5pbXVsKE9lLFNuKXwwLEM9TWF0'@;
put 'aC5pbXVsKE9lLHp0KTt2YXIgY2k9KHgrKF89XytNYXRoLmltdWwobmUsQm4pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSx0bil8MCkrTWF0aC5pbXVsKHVlLEJuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLHRuKXwwKSsocD4+PjEzKXwwKSsoY2k+Pj4yNil8'@;
put 'MCxjaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRWUsU24pLHA9KHA9TWF0aC5pbXVsKEVlLHp0KSkrTWF0aC5pbXVsKExlLFNuKXwwLEM9TWF0aC5pbXVsKExlLHp0KSxfPV8rTWF0aC5pbXVsKHhlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsdG4pfDApK01hdGguaW11bChPZSxCbil8MCxD'@;
put 'PUMrTWF0aC5pbXVsKE9lLHRuKXwwO3ZhciBsbj0oeCsoXz1fK01hdGguaW11bChuZSxPbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLHB0KXwwKStNYXRoLmltdWwodWUsT24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUscHQpfDApKyhwPj4+MTMpfDApKyhs'@;
put 'bj4+PjI2KXwwLGxuJj02NzEwODg2MyxfPU1hdGguaW11bChLZSxTbikscD0ocD1NYXRoLmltdWwoS2UsenQpKStNYXRoLmltdWwoVWUsU24pfDAsQz1NYXRoLmltdWwoVWUsenQpLF89XytNYXRoLmltdWwoRWUsQm4pfDAscD0ocD1wK01hdGguaW11bChFZSx0bil8MCkrTWF0aC5pbXVsKExl'@;
put 'LEJuKXwwLEM9QytNYXRoLmltdWwoTGUsdG4pfDAsXz1fK01hdGguaW11bCh4ZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLHB0KXwwKStNYXRoLmltdWwoT2UsT24pfDAsQz1DK01hdGguaW11bChPZSxwdCl8MDt2YXIgbm49KHgrKF89XytNYXRoLmltdWwobmUsZG4pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChuZSxNdCl8MCkrTWF0aC5pbXVsKHVlLGRuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLE10KXwwKSsocD4+PjEzKXwwKSsobm4+Pj4yNil8MCxubiY9NjcxMDg4NjMsXz1NYXRoLmltdWwoYXQsU24pLHA9KHA9TWF0aC5pbXVsKGF0LHp0KSkr'@;
put 'TWF0aC5pbXVsKEZlLFNuKXwwLEM9TWF0aC5pbXVsKEZlLHp0KSxfPV8rTWF0aC5pbXVsKEtlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsdG4pfDApK01hdGguaW11bChVZSxCbil8MCxDPUMrTWF0aC5pbXVsKFVlLHRuKXwwLF89XytNYXRoLmltdWwoRWUsT24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChFZSxwdCl8MCkrTWF0aC5pbXVsKExlLE9uKXwwLEM9QytNYXRoLmltdWwoTGUscHQpfDAsXz1fK01hdGguaW11bCh4ZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLE10KXwwKStNYXRoLmltdWwoT2UsZG4pfDAsQz1DK01hdGguaW11bChPZSxNdCl8MDt2YXIgdWk9KHgrKF89XytN'@;
put 'YXRoLmltdWwobmUsX3QpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxqdCl8MCkrTWF0aC5pbXVsKHVlLF90KXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLGp0KXwwKSsocD4+PjEzKXwwKSsodWk+Pj4yNil8MCx1aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRGUs'@;
put 'U24pLHA9KHA9TWF0aC5pbXVsKERlLHp0KSkrTWF0aC5pbXVsKFJlLFNuKXwwLEM9TWF0aC5pbXVsKFJlLHp0KSxfPV8rTWF0aC5pbXVsKGF0LEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsdG4pfDApK01hdGguaW11bChGZSxCbil8MCxDPUMrTWF0aC5pbXVsKEZlLHRuKXwwLF89XytNYXRo'@;
put 'LmltdWwoS2UsT24pfDAscD0ocD1wK01hdGguaW11bChLZSxwdCl8MCkrTWF0aC5pbXVsKFVlLE9uKXwwLEM9QytNYXRoLmltdWwoVWUscHQpfDAsXz1fK01hdGguaW11bChFZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKEVlLE10KXwwKStNYXRoLmltdWwoTGUsZG4pfDAsQz1DK01hdGguaW11'@;
put 'bChMZSxNdCl8MCxfPV8rTWF0aC5pbXVsKHhlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsanQpfDApK01hdGguaW11bChPZSxfdCl8MCxDPUMrTWF0aC5pbXVsKE9lLGp0KXwwO3ZhciBBcj0oeCsoXz1fK01hdGguaW11bChuZSxydCl8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG5lLEV0KXwwKStNYXRoLmltdWwodWUscnQpfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsRXQpfDApKyhwPj4+MTMpfDApKyhBcj4+PjI2KXwwLEFyJj02NzEwODg2MyxfPU1hdGguaW11bChudCxTbikscD0ocD1NYXRoLmltdWwobnQsenQpKStNYXRoLmltdWwoR2UsU24pfDAs'@;
put 'Qz1NYXRoLmltdWwoR2UsenQpLF89XytNYXRoLmltdWwoRGUsQm4pfDAscD0ocD1wK01hdGguaW11bChEZSx0bil8MCkrTWF0aC5pbXVsKFJlLEJuKXwwLEM9QytNYXRoLmltdWwoUmUsdG4pfDAsXz1fK01hdGguaW11bChhdCxPbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LHB0KXwwKStNYXRo'@;
put 'LmltdWwoRmUsT24pfDAsQz1DK01hdGguaW11bChGZSxwdCl8MCxfPV8rTWF0aC5pbXVsKEtlLGRuKXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsTXQpfDApK01hdGguaW11bChVZSxkbil8MCxDPUMrTWF0aC5pbXVsKFVlLE10KXwwLF89XytNYXRoLmltdWwoRWUsX3QpfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChFZSxqdCl8MCkrTWF0aC5pbXVsKExlLF90KXwwLEM9QytNYXRoLmltdWwoTGUsanQpfDAsXz1fK01hdGguaW11bCh4ZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLEV0KXwwKStNYXRoLmltdWwoT2UscnQpfDAsQz1DK01hdGguaW11bChPZSxFdCl8MDt2YXIgbXI9KHgrKF89XytN'@;
put 'YXRoLmltdWwobmUsVHQpfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSxtdCl8MCkrTWF0aC5pbXVsKHVlLFR0KXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLG10KXwwKSsocD4+PjEzKXwwKSsobXI+Pj4yNil8MCxtciY9NjcxMDg4NjMsXz1NYXRoLmltdWwoVGUs'@;
put 'U24pLHA9KHA9TWF0aC5pbXVsKFRlLHp0KSkrTWF0aC5pbXVsKEFlLFNuKXwwLEM9TWF0aC5pbXVsKEFlLHp0KSxfPV8rTWF0aC5pbXVsKG50LEJuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsdG4pfDApK01hdGguaW11bChHZSxCbil8MCxDPUMrTWF0aC5pbXVsKEdlLHRuKXwwLF89XytNYXRo'@;
put 'LmltdWwoRGUsT24pfDAscD0ocD1wK01hdGguaW11bChEZSxwdCl8MCkrTWF0aC5pbXVsKFJlLE9uKXwwLEM9QytNYXRoLmltdWwoUmUscHQpfDAsXz1fK01hdGguaW11bChhdCxkbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LE10KXwwKStNYXRoLmltdWwoRmUsZG4pfDAsQz1DK01hdGguaW11'@;
put 'bChGZSxNdCl8MCxfPV8rTWF0aC5pbXVsKEtlLF90KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsanQpfDApK01hdGguaW11bChVZSxfdCl8MCxDPUMrTWF0aC5pbXVsKFVlLGp0KXwwLF89XytNYXRoLmltdWwoRWUscnQpfDAscD0ocD1wK01hdGguaW11bChFZSxFdCl8MCkrTWF0aC5pbXVsKExl'@;
put 'LHJ0KXwwLEM9QytNYXRoLmltdWwoTGUsRXQpfDAsXz1fK01hdGguaW11bCh4ZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKHhlLG10KXwwKStNYXRoLmltdWwoT2UsVHQpfDAsQz1DK01hdGguaW11bChPZSxtdCl8MDt2YXIgeWk9KHgrKF89XytNYXRoLmltdWwobmUsa24pfDApfDApKygoODE5'@;
put 'MSYocD0ocD1wK01hdGguaW11bChuZSxCdCl8MCkrTWF0aC5pbXVsKHVlLGtuKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLEJ0KXwwKSsocD4+PjEzKXwwKSsoeWk+Pj4yNil8MCx5aSY9NjcxMDg4NjMsXz1NYXRoLmltdWwob3QsU24pLHA9KHA9TWF0aC5pbXVsKG90LHp0KSkr'@;
put 'TWF0aC5pbXVsKGx0LFNuKXwwLEM9TWF0aC5pbXVsKGx0LHp0KSxfPV8rTWF0aC5pbXVsKFRlLEJuKXwwLHA9KHA9cCtNYXRoLmltdWwoVGUsdG4pfDApK01hdGguaW11bChBZSxCbil8MCxDPUMrTWF0aC5pbXVsKEFlLHRuKXwwLF89XytNYXRoLmltdWwobnQsT24pfDAscD0ocD1wK01hdGgu'@;
put 'aW11bChudCxwdCl8MCkrTWF0aC5pbXVsKEdlLE9uKXwwLEM9QytNYXRoLmltdWwoR2UscHQpfDAsXz1fK01hdGguaW11bChEZSxkbil8MCxwPShwPXArTWF0aC5pbXVsKERlLE10KXwwKStNYXRoLmltdWwoUmUsZG4pfDAsQz1DK01hdGguaW11bChSZSxNdCl8MCxfPV8rTWF0aC5pbXVsKGF0'@;
put 'LF90KXwwLHA9KHA9cCtNYXRoLmltdWwoYXQsanQpfDApK01hdGguaW11bChGZSxfdCl8MCxDPUMrTWF0aC5pbXVsKEZlLGp0KXwwLF89XytNYXRoLmltdWwoS2UscnQpfDAscD0ocD1wK01hdGguaW11bChLZSxFdCl8MCkrTWF0aC5pbXVsKFVlLHJ0KXwwLEM9QytNYXRoLmltdWwoVWUsRXQp'@;
put 'fDAsXz1fK01hdGguaW11bChFZSxUdCl8MCxwPShwPXArTWF0aC5pbXVsKEVlLG10KXwwKStNYXRoLmltdWwoTGUsVHQpfDAsQz1DK01hdGguaW11bChMZSxtdCl8MCxfPV8rTWF0aC5pbXVsKHhlLGtuKXwwLHA9KHA9cCtNYXRoLmltdWwoeGUsQnQpfDApK01hdGguaW11bChPZSxrbil8MCxD'@;
put 'PUMrTWF0aC5pbXVsKE9lLEJ0KXwwO3ZhciAkcj0oeCsoXz1fK01hdGguaW11bChuZSxDbil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKG5lLGVuKXwwKStNYXRoLmltdWwodWUsQ24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwodWUsZW4pfDApKyhwPj4+MTMpfDApKygk'@;
put 'cj4+PjI2KXwwLCRyJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxTbikscD0ocD1NYXRoLmltdWwoRnQsenQpKStNYXRoLmltdWwoUnQsU24pfDAsQz1NYXRoLmltdWwoUnQsenQpLF89XytNYXRoLmltdWwob3QsQm4pfDAscD0ocD1wK01hdGguaW11bChvdCx0bil8MCkrTWF0aC5pbXVsKGx0'@;
put 'LEJuKXwwLEM9QytNYXRoLmltdWwobHQsdG4pfDAsXz1fK01hdGguaW11bChUZSxPbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLHB0KXwwKStNYXRoLmltdWwoQWUsT24pfDAsQz1DK01hdGguaW11bChBZSxwdCl8MCxfPV8rTWF0aC5pbXVsKG50LGRuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQs'@;
put 'TXQpfDApK01hdGguaW11bChHZSxkbil8MCxDPUMrTWF0aC5pbXVsKEdlLE10KXwwLF89XytNYXRoLmltdWwoRGUsX3QpfDAscD0ocD1wK01hdGguaW11bChEZSxqdCl8MCkrTWF0aC5pbXVsKFJlLF90KXwwLEM9QytNYXRoLmltdWwoUmUsanQpfDAsXz1fK01hdGguaW11bChhdCxydCl8MCxw'@;
put 'PShwPXArTWF0aC5pbXVsKGF0LEV0KXwwKStNYXRoLmltdWwoRmUscnQpfDAsQz1DK01hdGguaW11bChGZSxFdCl8MCxfPV8rTWF0aC5pbXVsKEtlLFR0KXwwLHA9KHA9cCtNYXRoLmltdWwoS2UsbXQpfDApK01hdGguaW11bChVZSxUdCl8MCxDPUMrTWF0aC5pbXVsKFVlLG10KXwwLF89XytN'@;
put 'YXRoLmltdWwoRWUsa24pfDAscD0ocD1wK01hdGguaW11bChFZSxCdCl8MCkrTWF0aC5pbXVsKExlLGtuKXwwLEM9QytNYXRoLmltdWwoTGUsQnQpfDAsXz1fK01hdGguaW11bCh4ZSxDbil8MCxwPShwPXArTWF0aC5pbXVsKHhlLGVuKXwwKStNYXRoLmltdWwoT2UsQ24pfDAsQz1DK01hdGgu'@;
put 'aW11bChPZSxlbil8MDt2YXIgSmk9KHgrKF89XytNYXRoLmltdWwobmUsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChuZSwkdCl8MCkrTWF0aC5pbXVsKHVlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKHVlLCR0KXwwKSsocD4+PjEzKXwwKSsoSmk+Pj4yNil8'@;
put 'MCxKaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsQm4pLHA9KHA9TWF0aC5pbXVsKEZ0LHRuKSkrTWF0aC5pbXVsKFJ0LEJuKXwwLEM9TWF0aC5pbXVsKFJ0LHRuKSxfPV8rTWF0aC5pbXVsKG90LE9uKXwwLHA9KHA9cCtNYXRoLmltdWwob3QscHQpfDApK01hdGguaW11bChsdCxPbil8MCxD'@;
put 'PUMrTWF0aC5pbXVsKGx0LHB0KXwwLF89XytNYXRoLmltdWwoVGUsZG4pfDAscD0ocD1wK01hdGguaW11bChUZSxNdCl8MCkrTWF0aC5pbXVsKEFlLGRuKXwwLEM9QytNYXRoLmltdWwoQWUsTXQpfDAsXz1fK01hdGguaW11bChudCxfdCl8MCxwPShwPXArTWF0aC5pbXVsKG50LGp0KXwwKStN'@;
put 'YXRoLmltdWwoR2UsX3QpfDAsQz1DK01hdGguaW11bChHZSxqdCl8MCxfPV8rTWF0aC5pbXVsKERlLHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwoRGUsRXQpfDApK01hdGguaW11bChSZSxydCl8MCxDPUMrTWF0aC5pbXVsKFJlLEV0KXwwLF89XytNYXRoLmltdWwoYXQsVHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChhdCxtdCl8MCkrTWF0aC5pbXVsKEZlLFR0KXwwLEM9QytNYXRoLmltdWwoRmUsbXQpfDAsXz1fK01hdGguaW11bChLZSxrbil8MCxwPShwPXArTWF0aC5pbXVsKEtlLEJ0KXwwKStNYXRoLmltdWwoVWUsa24pfDAsQz1DK01hdGguaW11bChVZSxCdCl8MCxfPV8rTWF0aC5pbXVs'@;
put 'KEVlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwoRWUsZW4pfDApK01hdGguaW11bChMZSxDbil8MCxDPUMrTWF0aC5pbXVsKExlLGVuKXwwO3ZhciB5cj0oeCsoXz1fK01hdGguaW11bCh4ZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKHhlLCR0KXwwKStNYXRoLmltdWwoT2Us'@;
put 'd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoT2UsJHQpfDApKyhwPj4+MTMpfDApKyh5cj4+PjI2KXwwLHlyJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxPbikscD0ocD1NYXRoLmltdWwoRnQscHQpKStNYXRoLmltdWwoUnQsT24pfDAsQz1NYXRoLmltdWwoUnQscHQpLF89XytN'@;
put 'YXRoLmltdWwob3QsZG4pfDAscD0ocD1wK01hdGguaW11bChvdCxNdCl8MCkrTWF0aC5pbXVsKGx0LGRuKXwwLEM9QytNYXRoLmltdWwobHQsTXQpfDAsXz1fK01hdGguaW11bChUZSxfdCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLGp0KXwwKStNYXRoLmltdWwoQWUsX3QpfDAsQz1DK01hdGgu'@;
put 'aW11bChBZSxqdCl8MCxfPV8rTWF0aC5pbXVsKG50LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsRXQpfDApK01hdGguaW11bChHZSxydCl8MCxDPUMrTWF0aC5pbXVsKEdlLEV0KXwwLF89XytNYXRoLmltdWwoRGUsVHQpfDAscD0ocD1wK01hdGguaW11bChEZSxtdCl8MCkrTWF0aC5pbXVs'@;
put 'KFJlLFR0KXwwLEM9QytNYXRoLmltdWwoUmUsbXQpfDAsXz1fK01hdGguaW11bChhdCxrbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LEJ0KXwwKStNYXRoLmltdWwoRmUsa24pfDAsQz1DK01hdGguaW11bChGZSxCdCl8MCxfPV8rTWF0aC5pbXVsKEtlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'S2UsZW4pfDApK01hdGguaW11bChVZSxDbil8MCxDPUMrTWF0aC5pbXVsKFVlLGVuKXwwO3ZhciBJaT0oeCsoXz1fK01hdGguaW11bChFZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKEVlLCR0KXwwKStNYXRoLmltdWwoTGUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRo'@;
put 'LmltdWwoTGUsJHQpfDApKyhwPj4+MTMpfDApKyhJaT4+PjI2KXwwLElpJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxkbikscD0ocD1NYXRoLmltdWwoRnQsTXQpKStNYXRoLmltdWwoUnQsZG4pfDAsQz1NYXRoLmltdWwoUnQsTXQpLF89XytNYXRoLmltdWwob3QsX3QpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChvdCxqdCl8MCkrTWF0aC5pbXVsKGx0LF90KXwwLEM9QytNYXRoLmltdWwobHQsanQpfDAsXz1fK01hdGguaW11bChUZSxydCl8MCxwPShwPXArTWF0aC5pbXVsKFRlLEV0KXwwKStNYXRoLmltdWwoQWUscnQpfDAsQz1DK01hdGguaW11bChBZSxFdCl8MCxfPV8rTWF0aC5pbXVs'@;
put 'KG50LFR0KXwwLHA9KHA9cCtNYXRoLmltdWwobnQsbXQpfDApK01hdGguaW11bChHZSxUdCl8MCxDPUMrTWF0aC5pbXVsKEdlLG10KXwwLF89XytNYXRoLmltdWwoRGUsa24pfDAscD0ocD1wK01hdGguaW11bChEZSxCdCl8MCkrTWF0aC5pbXVsKFJlLGtuKXwwLEM9QytNYXRoLmltdWwoUmUs'@;
put 'QnQpfDAsXz1fK01hdGguaW11bChhdCxDbil8MCxwPShwPXArTWF0aC5pbXVsKGF0LGVuKXwwKStNYXRoLmltdWwoRmUsQ24pfDAsQz1DK01hdGguaW11bChGZSxlbil8MDt2YXIgbm89KHgrKF89XytNYXRoLmltdWwoS2Usd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChLZSwk'@;
put 'dCl8MCkrTWF0aC5pbXVsKFVlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKFVlLCR0KXwwKSsocD4+PjEzKXwwKSsobm8+Pj4yNil8MCxubyY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsX3QpLHA9KHA9TWF0aC5pbXVsKEZ0LGp0KSkrTWF0aC5pbXVsKFJ0LF90KXwwLEM9TWF0'@;
put 'aC5pbXVsKFJ0LGp0KSxfPV8rTWF0aC5pbXVsKG90LHJ0KXwwLHA9KHA9cCtNYXRoLmltdWwob3QsRXQpfDApK01hdGguaW11bChsdCxydCl8MCxDPUMrTWF0aC5pbXVsKGx0LEV0KXwwLF89XytNYXRoLmltdWwoVGUsVHQpfDAscD0ocD1wK01hdGguaW11bChUZSxtdCl8MCkrTWF0aC5pbXVs'@;
put 'KEFlLFR0KXwwLEM9QytNYXRoLmltdWwoQWUsbXQpfDAsXz1fK01hdGguaW11bChudCxrbil8MCxwPShwPXArTWF0aC5pbXVsKG50LEJ0KXwwKStNYXRoLmltdWwoR2Usa24pfDAsQz1DK01hdGguaW11bChHZSxCdCl8MCxfPV8rTWF0aC5pbXVsKERlLENuKXwwLHA9KHA9cCtNYXRoLmltdWwo'@;
put 'RGUsZW4pfDApK01hdGguaW11bChSZSxDbil8MCxDPUMrTWF0aC5pbXVsKFJlLGVuKXwwO3ZhciB6bj0oeCsoXz1fK01hdGguaW11bChhdCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKGF0LCR0KXwwKStNYXRoLmltdWwoRmUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRo'@;
put 'LmltdWwoRmUsJHQpfDApKyhwPj4+MTMpfDApKyh6bj4+PjI2KXwwLHpuJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxydCkscD0ocD1NYXRoLmltdWwoRnQsRXQpKStNYXRoLmltdWwoUnQscnQpfDAsQz1NYXRoLmltdWwoUnQsRXQpLF89XytNYXRoLmltdWwob3QsVHQpfDAscD0ocD1wK01h'@;
put 'dGguaW11bChvdCxtdCl8MCkrTWF0aC5pbXVsKGx0LFR0KXwwLEM9QytNYXRoLmltdWwobHQsbXQpfDAsXz1fK01hdGguaW11bChUZSxrbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLEJ0KXwwKStNYXRoLmltdWwoQWUsa24pfDAsQz1DK01hdGguaW11bChBZSxCdCl8MCxfPV8rTWF0aC5pbXVs'@;
put 'KG50LENuKXwwLHA9KHA9cCtNYXRoLmltdWwobnQsZW4pfDApK01hdGguaW11bChHZSxDbil8MCxDPUMrTWF0aC5pbXVsKEdlLGVuKXwwO3ZhciBaaT0oeCsoXz1fK01hdGguaW11bChEZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKERlLCR0KXwwKStNYXRoLmltdWwoUmUs'@;
put 'd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoUmUsJHQpfDApKyhwPj4+MTMpfDApKyhaaT4+PjI2KXwwLFppJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxUdCkscD0ocD1NYXRoLmltdWwoRnQsbXQpKStNYXRoLmltdWwoUnQsVHQpfDAsQz1NYXRoLmltdWwoUnQsbXQpLF89XytN'@;
put 'YXRoLmltdWwob3Qsa24pfDAscD0ocD1wK01hdGguaW11bChvdCxCdCl8MCkrTWF0aC5pbXVsKGx0LGtuKXwwLEM9QytNYXRoLmltdWwobHQsQnQpfDAsXz1fK01hdGguaW11bChUZSxDbil8MCxwPShwPXArTWF0aC5pbXVsKFRlLGVuKXwwKStNYXRoLmltdWwoQWUsQ24pfDAsQz1DK01hdGgu'@;
put 'aW11bChBZSxlbil8MDt2YXIgV2k9KHgrKF89XytNYXRoLmltdWwobnQsd24pfDApfDApKygoODE5MSYocD0ocD1wK01hdGguaW11bChudCwkdCl8MCkrTWF0aC5pbXVsKEdlLHduKXwwKSk8PDEzKXwwO3g9KChDPUMrTWF0aC5pbXVsKEdlLCR0KXwwKSsocD4+PjEzKXwwKSsoV2k+Pj4yNil8'@;
put 'MCxXaSY9NjcxMDg4NjMsXz1NYXRoLmltdWwoRnQsa24pLHA9KHA9TWF0aC5pbXVsKEZ0LEJ0KSkrTWF0aC5pbXVsKFJ0LGtuKXwwLEM9TWF0aC5pbXVsKFJ0LEJ0KSxfPV8rTWF0aC5pbXVsKG90LENuKXwwLHA9KHA9cCtNYXRoLmltdWwob3QsZW4pfDApK01hdGguaW11bChsdCxDbil8MCxD'@;
put 'PUMrTWF0aC5pbXVsKGx0LGVuKXwwO3ZhciBvbz0oeCsoXz1fK01hdGguaW11bChUZSx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVsKFRlLCR0KXwwKStNYXRoLmltdWwoQWUsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwoQWUsJHQpfDApKyhwPj4+MTMpfDApKyhv'@;
put 'bz4+PjI2KXwwLG9vJj02NzEwODg2MyxfPU1hdGguaW11bChGdCxDbikscD0ocD1NYXRoLmltdWwoRnQsZW4pKStNYXRoLmltdWwoUnQsQ24pfDAsQz1NYXRoLmltdWwoUnQsZW4pO3ZhciBobz0oeCsoXz1fK01hdGguaW11bChvdCx3bil8MCl8MCkrKCg4MTkxJihwPShwPXArTWF0aC5pbXVs'@;
put 'KG90LCR0KXwwKStNYXRoLmltdWwobHQsd24pfDApKTw8MTMpfDA7eD0oKEM9QytNYXRoLmltdWwobHQsJHQpfDApKyhwPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2Mzt2YXIgTHI9KHgrKF89TWF0aC5pbXVsKEZ0LHduKSl8MCkrKCg4MTkxJihwPShwPU1hdGguaW11bChGdCwk'@;
put 'dCkpK01hdGguaW11bChSdCx3bil8MCkpPDwxMyl8MDtyZXR1cm4geD0oKEM9TWF0aC5pbXVsKFJ0LCR0KSkrKHA+Pj4xMyl8MCkrKExyPj4+MjYpfDAsTHImPTY3MTA4ODYzLFNbMF09V24sU1sxXT1jaSxTWzJdPWxuLFNbM109bm4sU1s0XT11aSxTWzVdPUFyLFNbNl09bXIsU1s3XT15aSxT'@;
put 'WzhdPSRyLFNbOV09SmksU1sxMF09eXIsU1sxMV09SWksU1sxMl09bm8sU1sxM109em4sU1sxNF09WmksU1sxNV09V2ksU1sxNl09b28sU1sxN109aG8sU1sxOF09THIsMCE9PXgmJihTWzE5XT14LEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIFcoRyx5LEwpe3JldHVybihuZXcgeikubXVscChH'@;
put 'LHksTCl9ZnVuY3Rpb24geihHLHkpe3RoaXMueD1HLHRoaXMueT15fU1hdGguaW11bHx8KFY9Tiksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24oeSxMKXt2YXIgSCxqPXRoaXMubGVuZ3RoK3kubGVuZ3RoO3JldHVybiBIPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09eS5sZW5ndGg/Vih0aGlz'@;
put 'LHksTCk6ajw2Mz9OKHRoaXMseSxMKTpqPDEwMjQ/ZnVuY3Rpb24gWihHLHksTCl7TC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkcubmVnYXRpdmUsTC5sZW5ndGg9Ry5sZW5ndGgreS5sZW5ndGg7Zm9yKHZhciBIPTAsaj0wLGc9MDtnPEwubGVuZ3RoLTE7ZysrKXt2YXIgUz1qO2o9MDtmb3IodmFy'@;
put 'IHg9NjcxMDg4NjMmSCxfPU1hdGgubWluKGcseS5sZW5ndGgtMSkscD1NYXRoLm1heCgwLGctRy5sZW5ndGgrMSk7cDw9XztwKyspe3ZhciB1ZT0oMHxHLndvcmRzW2ctcF0pKigwfHkud29yZHNbcF0pLGhlPTY3MTA4ODYzJnVlO3g9NjcxMDg4NjMmKGhlPWhlK3h8MCksais9KFM9KFM9Uyso'@;
put 'dWUvNjcxMDg4NjR8MCl8MCkrKGhlPj4+MjYpfDApPj4+MjYsUyY9NjcxMDg4NjN9TC53b3Jkc1tnXT14LEg9UyxTPWp9cmV0dXJuIDAhPT1IP0wud29yZHNbZ109SDpMLmxlbmd0aC0tLEwuc3RyaXAoKX0odGhpcyx5LEwpOlcodGhpcyx5LEwpLEh9LHoucHJvdG90eXBlLm1ha2VSQlQ9ZnVu'@;
put 'Y3Rpb24oeSl7Zm9yKHZhciBMPW5ldyBBcnJheSh5KSxIPXcucHJvdG90eXBlLl9jb3VudEJpdHMoeSktMSxqPTA7ajx5O2orKylMW2pdPXRoaXMucmV2QmluKGosSCx5KTtyZXR1cm4gTH0sei5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHksTCxIKXtpZigwPT09eXx8eT09PUgtMSlyZXR1'@;
put 'cm4geTtmb3IodmFyIGo9MCxnPTA7ZzxMO2crKylqfD0oMSZ5KTw8TC1nLTEseT4+PTE7cmV0dXJuIGp9LHoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oeSxMLEgsaixnLFMpe2Zvcih2YXIgeD0wO3g8Uzt4Kyspalt4XT1MW3lbeF1dLGdbeF09SFt5W3hdXX0sei5wcm90b3R5cGUudHJh'@;
put 'bnNmb3JtPWZ1bmN0aW9uKHksTCxILGosZyxTKXt0aGlzLnBlcm11dGUoUyx5LEwsSCxqLGcpO2Zvcih2YXIgeD0xO3g8Zzt4PDw9MSlmb3IodmFyIF89eDw8MSxwPU1hdGguY29zKDIqTWF0aC5QSS9fKSxDPU1hdGguc2luKDIqTWF0aC5QSS9fKSxLPTA7SzxnO0srPV8pZm9yKHZhciBuZT1w'@;
put 'LHVlPUMsaGU9MDtoZTx4O2hlKyspe3ZhciB4ZT1IW0sraGVdLE9lPWpbSytoZV0sSGU9SFtLK2hlK3hdLEVlPWpbSytoZSt4XSxMZT1uZSpIZS11ZSpFZTtFZT1uZSpFZSt1ZSpIZSxIW0sraGVdPXhlKyhIZT1MZSksaltLK2hlXT1PZStFZSxIW0sraGUreF09eGUtSGUsaltLK2hlK3hdPU9l'@;
put 'LUVlLGhlIT09XyYmKExlPXAqbmUtQyp1ZSx1ZT1wKnVlK0MqbmUsbmU9TGUpfX0sei5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oeSxMKXt2YXIgSD0xfE1hdGgubWF4KEwseSksaj0xJkgsZz0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKWcrKztyZXR1cm4gMTw8ZysxK2p9LHoucHJv'@;
put 'dG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih5LEwsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBnPXlbal07eVtqXT15W0gtai0xXSx5W0gtai0xXT1nLGc9TFtqXSxMW2pdPS1MW0gtai0xXSxMW0gtai0xXT0tZ319LHoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1m'@;
put 'dW5jdGlvbih5LEwpe2Zvcih2YXIgSD0wLGo9MDtqPEwvMjtqKyspe3ZhciBnPTgxOTIqTWF0aC5yb3VuZCh5WzIqaisxXS9MKStNYXRoLnJvdW5kKHlbMipqXS9MKStIO3lbal09NjcxMDg4NjMmZyxIPWc8NjcxMDg4NjQ/MDpnLzY3MTA4ODY0fDB9cmV0dXJuIHl9LHoucHJvdG90eXBlLmNv'@;
put 'bnZlcnQxM2I9ZnVuY3Rpb24oeSxMLEgsail7Zm9yKHZhciBnPTAsUz0wO1M8TDtTKyspSFsyKlNdPTgxOTEmKGcrPTB8eVtTXSksSFsyKlMrMV09ODE5MSYoZz4+Pj0xMyksZz4+Pj0xMztmb3IoUz0yKkw7UzxqOysrUylIW1NdPTA7bSgwPT09ZyksbSghKC04MTkyJmcpKX0sei5wcm90b3R5'@;
put 'cGUuc3R1Yj1mdW5jdGlvbih5KXtmb3IodmFyIEw9bmV3IEFycmF5KHkpLEg9MDtIPHk7SCsrKUxbSF09MDtyZXR1cm4gTH0sei5wcm90b3R5cGUubXVscD1mdW5jdGlvbih5LEwsSCl7dmFyIGo9Mip0aGlzLmd1ZXNzTGVuMTNiKHkubGVuZ3RoLEwubGVuZ3RoKSxnPXRoaXMubWFrZVJCVChq'@;
put 'KSxTPXRoaXMuc3R1YihqKSx4PW5ldyBBcnJheShqKSxfPW5ldyBBcnJheShqKSxwPW5ldyBBcnJheShqKSxDPW5ldyBBcnJheShqKSxLPW5ldyBBcnJheShqKSxuZT1uZXcgQXJyYXkoaiksdWU9SC53b3Jkczt1ZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoeS53b3Jkcyx5Lmxlbmd0aCx4'@;
put 'LGopLHRoaXMuY29udmVydDEzYihMLndvcmRzLEwubGVuZ3RoLEMsaiksdGhpcy50cmFuc2Zvcm0oeCxTLF8scCxqLGcpLHRoaXMudHJhbnNmb3JtKEMsUyxLLG5lLGosZyk7Zm9yKHZhciBoZT0wO2hlPGo7aGUrKyl7dmFyIHhlPV9baGVdKktbaGVdLXBbaGVdKm5lW2hlXTtwW2hlXT1fW2hl'@;
put 'XSpuZVtoZV0rcFtoZV0qS1toZV0sX1toZV09eGV9cmV0dXJuIHRoaXMuY29uanVnYXRlKF8scCxqKSx0aGlzLnRyYW5zZm9ybShfLHAsdWUsUyxqLGcpLHRoaXMuY29uanVnYXRlKHVlLFMsaiksdGhpcy5ub3JtYWxpemUxM2IodWUsaiksSC5uZWdhdGl2ZT15Lm5lZ2F0aXZlXkwubmVnYXRp'@;
put 'dmUsSC5sZW5ndGg9eS5sZW5ndGgrTC5sZW5ndGgsSC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7cmV0dXJuIEwud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSx0aGlzLm11bFRvKHksTCl9LHcucHJvdG90eXBlLm11'@;
put 'bGY9ZnVuY3Rpb24oeSl7dmFyIEw9bmV3IHcobnVsbCk7cmV0dXJuIEwud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3kubGVuZ3RoKSxXKHRoaXMseSxMKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHksdGhpcyl9LHcucHJvdG90'@;
put 'eXBlLmltdWxuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5KSxtKHk8NjcxMDg4NjQpO2Zvcih2YXIgTD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9KDB8dGhpcy53b3Jkc1tIXSkqeSxnPSg2NzEwODg2MyZqKSsoNjcxMDg4NjMmTCk7TD4+PTI2LEwrPWovNjcxMDg4'@;
put 'NjR8MCxMKz1nPj4+MjYsdGhpcy53b3Jkc1tIXT02NzEwODg2MyZnfXJldHVybiAwIT09TCYmKHRoaXMud29yZHNbSF09TCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4oeSl9LHcucHJvdG90eXBlLnNx'@;
put 'cj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHkpe3ZhciBMPWZ1bmN0aW9uIEIoRyl7Zm9yKHZhciB5PW5ldyBBcnJheShH'@;
put 'LmJpdExlbmd0aCgpKSxMPTA7TDx5Lmxlbmd0aDtMKyspe3ZhciBqPUwlMjY7eVtMXT0oRy53b3Jkc1tMLzI2fDBdJjE8PGopPj4+an1yZXR1cm4geX0oeSk7aWYoMD09PUwubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxMLmxlbmd0aCYmMD09PUxbal07aisr'@;
put 'LEg9SC5zcXIoKSk7aWYoKytqPEwubGVuZ3RoKWZvcih2YXIgZz1ILnNxcigpO2o8TC5sZW5ndGg7aisrLGc9Zy5zcXIoKSkwIT09TFtqXSYmKEg9SC5tdWwoZykpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApO3Zh'@;
put 'ciBnLEw9eSUyNixIPSh5LUwpLzI2LGo9NjcxMDg4NjM+Pj4yNi1MPDwyNi1MO2lmKDAhPT1MKXt2YXIgUz0wO2ZvcihnPTA7Zzx0aGlzLmxlbmd0aDtnKyspe3ZhciB4PXRoaXMud29yZHNbZ10majt0aGlzLndvcmRzW2ddPSgwfHRoaXMud29yZHNbZ10pLXg8PEx8UyxTPXg+Pj4yNi1MfVMm'@;
put 'Jih0aGlzLndvcmRzW2ddPVMsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihnPXRoaXMubGVuZ3RoLTE7Zz49MDtnLS0pdGhpcy53b3Jkc1tnK0hdPXRoaXMud29yZHNbZ107Zm9yKGc9MDtnPEg7ZysrKXRoaXMud29yZHNbZ109MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5zdHJp'@;
put 'cCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oeSl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih5LEwsSCl7dmFyIGo7bSgibnVtYmVyIj09dHlwZW9mIHkmJnk+PTApLGo9TD8oTC1MJTI2KS8yNjow'@;
put 'O3ZhciBnPXklMjYsUz1NYXRoLm1pbigoeS1nKS8yNix0aGlzLmxlbmd0aCkseD02NzEwODg2M142NzEwODg2Mz4+Pmc8PGcsXz1IO2lmKGotPVMsaj1NYXRoLm1heCgwLGopLF8pe2Zvcih2YXIgcD0wO3A8UztwKyspXy53b3Jkc1twXT10aGlzLndvcmRzW3BdO18ubGVuZ3RoPVN9aWYoMCE9'@;
put 'PVMpaWYodGhpcy5sZW5ndGg+Uylmb3IodGhpcy5sZW5ndGgtPVMscD0wO3A8dGhpcy5sZW5ndGg7cCsrKXRoaXMud29yZHNbcF09dGhpcy53b3Jkc1twK1NdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEM9MDtmb3IocD10aGlzLmxlbmd0aC0xO3A+PTAmJigwIT09'@;
put 'Q3x8cD49aik7cC0tKXt2YXIgSz0wfHRoaXMud29yZHNbcF07dGhpcy53b3Jkc1twXT1DPDwyNi1nfEs+Pj5nLEM9SyZ4fXJldHVybiBfJiYwIT09QyYmKF8ud29yZHNbXy5sZW5ndGgrK109QyksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMu'@;
put 'c3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oeSxMLEgpe3JldHVybiBtKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih5LEwsSCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih5KX0sdy5wcm90b3R5cGUudXNo'@;
put 'bG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oeSl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih5KX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oeSl9'@;
put 'LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHkpe20oIm51bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PEwpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHkpe20oIm51'@;
put 'bWJlciI9PXR5cGVvZiB5JiZ5Pj0wKTt2YXIgTD15JTI2LEg9KHktTCkvMjY7cmV0dXJuIG0oMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1MJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5t'@;
put 'aW4oSCx0aGlzLmxlbmd0aCksMCE9PUwmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+Pkw8PEwpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHkpfSx3LnByb3RvdHlw'@;
put 'ZS5pYWRkbj1mdW5jdGlvbih5KXtyZXR1cm4gbSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwP3RoaXMuaXN1Ym4oLXkpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8eT8odGhpcy53b3Jkc1swXT15LSgwfHRoaXMud29y'@;
put 'ZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oeSksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHkpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oeSl7dGhpcy53b3Jkc1swXSs9eTtmb3IodmFyIEw9MDtMPHRoaXMu'@;
put 'bGVuZ3RoJiZ0aGlzLndvcmRzW0xdPj02NzEwODg2NDtMKyspdGhpcy53b3Jkc1tMXS09NjcxMDg4NjQsTD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tMKzFdPTE6dGhpcy53b3Jkc1tMKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEwrMSksdGhpc30s'@;
put 'dy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oeSl7aWYobSgibnVtYmVyIj09dHlwZW9mIHkpLG0oeTw2NzEwODg2NCkseTwwKXJldHVybiB0aGlzLmlhZGRuKC15KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4oeSksdGhpcy5uZWdhdGl2'@;
put 'ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09eSwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgTD0wO0w8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbTF08MDtMKyspdGhpcy53'@;
put 'b3Jkc1tMXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tMKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih5KX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgp'@;
put 'LmlzdWJuKHkpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHksTCxIKXt2'@;
put 'YXIgZzt0aGlzLl9leHBhbmQoeS5sZW5ndGgrSCk7dmFyIFMseD0wO2ZvcihnPTA7Zzx5Lmxlbmd0aDtnKyspe1M9KDB8dGhpcy53b3Jkc1tnK0hdKSt4O3ZhciBfPSgwfHkud29yZHNbZ10pKkw7eD0oKFMtPTY3MTA4ODYzJl8pPj4yNiktKF8vNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tnK0hd'@;
put 'PTY3MTA4ODYzJlN9Zm9yKDtnPHRoaXMubGVuZ3RoLUg7ZysrKXg9KFM9KDB8dGhpcy53b3Jkc1tnK0hdKSt4KT4+MjYsdGhpcy53b3Jkc1tnK0hdPTY3MTA4ODYzJlM7aWYoMD09PXgpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobSgtMT09PXgpLHg9MCxnPTA7Zzx0aGlzLmxlbmd0aDtnKysp'@;
put 'eD0oUz0tKDB8dGhpcy53b3Jkc1tnXSkreCk+PjI2LHRoaXMud29yZHNbZ109NjcxMDg4NjMmUztyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oeSxMKXt2YXIgSCxqPXRoaXMuY2xvbmUoKSxnPXksUz0wfGcud29yZHNb'@;
put 'Zy5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKFMpKSYmKGc9Zy51c2hsbihIKSxqLml1c2hsbihIKSxTPTB8Zy53b3Jkc1tnLmxlbmd0aC0xXSk7dmFyIHAsXz1qLmxlbmd0aC1nLmxlbmd0aDtpZigibW9kIiE9PUwpeyhwPW5ldyB3KG51bGwpKS5sZW5ndGg9XysxLHAud29y'@;
put 'ZHM9bmV3IEFycmF5KHAubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHAubGVuZ3RoO0MrKylwLndvcmRzW0NdPTB9dmFyIEs9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChnLDEsXyk7MD09PUsubmVnYXRpdmUmJihqPUsscCYmKHAud29yZHNbX109MSkpO2Zvcih2YXIgbmU9Xy0xO25lPj0wO25lLS0p'@;
put 'e3ZhciB1ZT02NzEwODg2NCooMHxqLndvcmRzW2cubGVuZ3RoK25lXSkrKDB8ai53b3Jkc1tnLmxlbmd0aCtuZS0xXSk7Zm9yKHVlPU1hdGgubWluKHVlL1N8MCw2NzEwODg2Myksai5faXNobG5zdWJtdWwoZyx1ZSxuZSk7MCE9PWoubmVnYXRpdmU7KXVlLS0sai5uZWdhdGl2ZT0wLGouX2lz'@;
put 'aGxuc3VibXVsKGcsMSxuZSksai5pc1plcm8oKXx8KGoubmVnYXRpdmVePTEpO3AmJihwLndvcmRzW25lXT11ZSl9cmV0dXJuIHAmJnAuc3RyaXAoKSxqLnN0cmlwKCksImRpdiIhPT1MJiYwIT09SCYmai5pdXNocm4oSCkse2RpdjpwfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9k'@;
put 'PWZ1bmN0aW9uKHksTCxIKXtyZXR1cm4gbSgheS5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT15Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHksTCksIm1vZCIhPT1MJiYoaj1TLmRpdi5uZWco'@;
put 'KSksImRpdiIhPT1MJiYoZz1TLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pYWRkKHkpKSx7ZGl2OmosbW9kOmd9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXkubmVnYXRpdmU/KFM9dGhpcy5kaXZtb2QoeS5uZWcoKSxMKSwibW9kIiE9PUwmJihqPVMuZGl2Lm5lZygpKSx7ZGl2'@;
put 'OmosbW9kOlMubW9kfSk6dGhpcy5uZWdhdGl2ZSZ5Lm5lZ2F0aXZlPyhTPXRoaXMubmVnKCkuZGl2bW9kKHkubmVnKCksTCksImRpdiIhPT1MJiYoZz1TLm1vZC5uZWcoKSxIJiYwIT09Zy5uZWdhdGl2ZSYmZy5pc3ViKHkpKSx7ZGl2OlMuZGl2LG1vZDpnfSk6eS5sZW5ndGg+dGhpcy5sZW5n'@;
put 'dGh8fHRoaXMuY21wKHkpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXkubGVuZ3RoPyJkaXYiPT09TD97ZGl2OnRoaXMuZGl2bih5LndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1MP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHkud29yZHNbMF0pKX06e2Rpdjp0aGlz'@;
put 'LmRpdm4oeS53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbih5LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYoeSxMKTt2YXIgaixnLFN9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVu'@;
put 'Y3Rpb24oeSl7cmV0dXJuIHRoaXMuZGl2bW9kKHksIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5kaXZtb2QoeSwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih5KXt2YXIgTD10aGlzLmRpdm1vZCh5KTtp'@;
put 'ZihMLm1vZC5pc1plcm8oKSlyZXR1cm4gTC5kaXY7dmFyIEg9MCE9PUwuZGl2Lm5lZ2F0aXZlP0wubW9kLmlzdWIoeSk6TC5tb2Qsaj15LnVzaHJuKDEpLGc9eS5hbmRsbigxKSxTPUguY21wKGopO3JldHVybiBTPDB8fDE9PT1nJiYwPT09Uz9MLmRpdjowIT09TC5kaXYubmVnYXRpdmU/TC5k'@;
put 'aXYuaXN1Ym4oMSk6TC5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPSgxPDwyNikleSxIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKUg9KEwqSCsoMHx0aGlzLndvcmRzW2pdKSkleTtyZXR1cm4gSH0sdy5wcm90'@;
put 'b3R5cGUuaWRpdm49ZnVuY3Rpb24oeSl7bSh5PD02NzEwODg2Myk7Zm9yKHZhciBMPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0oMHx0aGlzLndvcmRzW0hdKSs2NzEwODg2NCpMO3RoaXMud29yZHNbSF09ai95fDAsTD1qJXl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90'@;
put 'b3R5cGUuZGl2bj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHkpfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUpLG0oIXkuaXNaZXJvKCkpO3ZhciBMPXRoaXMsSD15LmNsb25lKCk7TD0wIT09TC5uZWdhdGl2ZT9MLnVtb2QoeSk6'@;
put 'TC5jbG9uZSgpO2Zvcih2YXIgaj1uZXcgdygxKSxnPW5ldyB3KDApLFM9bmV3IHcoMCkseD1uZXcgdygxKSxfPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspTC5pdXNocm4oMSksSC5pdXNocm4oMSksKytfO2Zvcih2YXIgcD1ILmNsb25lKCksQz1MLmNsb25lKCk7IUwuaXNaZXJvKCk7KXtm'@;
put 'b3IodmFyIEs9MCxuZT0xOyEoTC53b3Jkc1swXSZuZSkmJks8MjY7KytLLG5lPDw9MSk7aWYoSz4wKWZvcihMLml1c2hybihLKTtLLS0gPjA7KShqLmlzT2RkKCl8fGcuaXNPZGQoKSkmJihqLmlhZGQocCksZy5pc3ViKEMpKSxqLml1c2hybigxKSxnLml1c2hybigxKTtmb3IodmFyIHVlPTAs'@;
put 'aGU9MTshKEgud29yZHNbMF0maGUpJiZ1ZTwyNjsrK3VlLGhlPDw9MSk7aWYodWU+MClmb3IoSC5pdXNocm4odWUpO3VlLS0gPjA7KShTLmlzT2RkKCl8fHguaXNPZGQoKSkmJihTLmlhZGQocCkseC5pc3ViKEMpKSxTLml1c2hybigxKSx4Lml1c2hybigxKTtMLmNtcChIKT49MD8oTC5pc3Vi'@;
put 'KEgpLGouaXN1YihTKSxnLmlzdWIoeCkpOihILmlzdWIoTCksUy5pc3ViKGopLHguaXN1YihnKSl9cmV0dXJue2E6UyxiOngsZ2NkOkguaXVzaGxuKF8pfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHkpe20oMD09PXkubmVnYXRpdmUpLG0oIXkuaXNaZXJvKCkpO3ZhciBLLEw9dGhp'@;
put 'cyxIPXkuY2xvbmUoKTtMPTAhPT1MLm5lZ2F0aXZlP0wudW1vZCh5KTpMLmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLGc9bmV3IHcoMCksUz1ILmNsb25lKCk7TC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciB4PTAsXz0xOyEoTC53b3Jkc1swXSZfKSYmeDwyNjsrK3gsXzw8'@;
put 'PTEpO2lmKHg+MClmb3IoTC5pdXNocm4oeCk7eC0tID4wOylqLmlzT2RkKCkmJmouaWFkZChTKSxqLml1c2hybigxKTtmb3IodmFyIHA9MCxDPTE7IShILndvcmRzWzBdJkMpJiZwPDI2OysrcCxDPDw9MSk7aWYocD4wKWZvcihILml1c2hybihwKTtwLS0gPjA7KWcuaXNPZGQoKSYmZy5pYWRk'@;
put 'KFMpLGcuaXVzaHJuKDEpO0wuY21wKEgpPj0wPyhMLmlzdWIoSCksai5pc3ViKGcpKTooSC5pc3ViKEwpLGcuaXN1YihqKSl9cmV0dXJuKEs9MD09PUwuY21wbigxKT9qOmcpLmNtcG4oMCk8MCYmSy5pYWRkKHkpLEt9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbih5KXtpZih0aGlzLmlzWmVy'@;
put 'bygpKXJldHVybiB5LmFicygpO2lmKHkuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIEw9dGhpcy5jbG9uZSgpLEg9eS5jbG9uZSgpO0wubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBqPTA7TC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspTC5pdXNocm4oMSksSC5pdXNo'@;
put 'cm4oMSk7Zm9yKDs7KXtmb3IoO0wuaXNFdmVuKCk7KUwuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIGc9TC5jbXAoSCk7aWYoZzwwKXt2YXIgUz1MO0w9SCxIPVN9ZWxzZSBpZigwPT09Z3x8MD09PUguY21wbigxKSlicmVhaztMLmlzdWIoSCl9cmV0dXJuIEgu'@;
put 'aXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmVnY2QoeSkuYS51bW9kKHkpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgx'@;
put 'Jn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMud29yZHNbMF0meX0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oeSl7bSgibnVtYmVyIj09dHlwZW9mIHkpO3ZhciBMPXklMjYsSD0oeS1MKS8yNixqPTE8PEw7aWYodGhpcy5sZW5n'@;
put 'dGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIGc9aixTPUg7MCE9PWcmJlM8dGhpcy5sZW5ndGg7UysrKXt2YXIgeD0wfHRoaXMud29yZHNbU107Zz0oeCs9Zyk+Pj4yNix0aGlzLndvcmRzW1NdPXgmPTY3MTA4ODYzfXJldHVybiAw'@;
put 'IT09ZyYmKHRoaXMud29yZHNbU109Zyx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih5KXt2YXIgSCxMPXk8MDtpZigwIT09'@;
put 'dGhpcy5uZWdhdGl2ZSYmIUwpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJkwpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7TCYmKHk9LXkpLG0oeTw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBd'@;
put 'O0g9aj09PXk/MDpqPHk/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24oeSl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT15Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09eS5uZWdhdGl2ZSly'@;
put 'ZXR1cm4gMTt2YXIgTD10aGlzLnVjbXAoeSk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUw6TH0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih5KXtpZih0aGlzLmxlbmd0aD55Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx5Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIEw9'@;
put 'MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxnPTB8eS53b3Jkc1tIXTtpZihqIT09Zyl7ajxnP0w9LTE6aj5nJiYoTD0xKTticmVha319cmV0dXJuIEx9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbih5KXtyZXR1cm4gMT09PXRoaXMuY21wbih5KX0s'@;
put 'dy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oeSl7cmV0dXJuIDE9PT10aGlzLmNtcCh5KX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5jbXBuKHkpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wKHkpPj0wfSx3LnByb3RvdHlw'@;
put 'ZS5sdG49ZnVuY3Rpb24oeSl7cmV0dXJuLTE9PT10aGlzLmNtcG4oeSl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHkpe3JldHVybi0xPT09dGhpcy5jbXAoeSl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oeSl7cmV0dXJuIHRoaXMuY21wbih5KTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1'@;
put 'bmN0aW9uKHkpe3JldHVybiB0aGlzLmNtcCh5KTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHkpe3JldHVybiAwPT09dGhpcy5jbXBuKHkpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbih5KXtyZXR1cm4gMD09PXRoaXMuY21wKHkpfSx3LnJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3'@;
put 'IGxlKHkpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxtKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLHkuY29udmVydFRvKHRo'@;
put 'aXMpLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9m'@;
put 'b3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5yZWQ9eSx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih5KXtyZXR1cm4gbSghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZCh5KX0sdy5wcm90b3R5'@;
put 'cGUucmVkQWRkPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZElBZGQgd29ya3Mg'@;
put 'b25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyx5KX0sdy5wcm90b3R5'@;
put 'cGUucmVkSVN1Yj1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMseSl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih5KXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkU2hsIHdvcmtz'@;
put 'IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oeSl7cmV0dXJuIG0odGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHkpLHRoaXMu'@;
put 'cmVkLm11bCh0aGlzLHkpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx5KSx0aGlzLnJlZC5pbXVsKHRoaXMseSl9LHcucHJvdG90eXBl'@;
put 'LnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG0odGhpcy5y'@;
put 'ZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBtKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQg'@;
put 'bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz'@;
put 'KSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbSh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUu'@;
put 'cmVkUG93PWZ1bmN0aW9uKHkpe3JldHVybiBtKHRoaXMucmVkJiYheS5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMseSl9O3ZhciBxPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVu'@;
put 'Y3Rpb24gUShHLHkpe3RoaXMubmFtZT1HLHRoaXMucD1uZXcgdyh5LDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gdGUoKXtRLmNhbGwodGhpcywiazI1'@;
put 'NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gYWUoKXtRLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAw'@;
put 'IDAwMDAwMDAxIil9ZnVuY3Rpb24gc2UoKXtRLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gZGUoKXtRLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZm'@;
put 'ZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gbGUoRyl7aWYoInN0cmluZyI9PXR5cGVvZiBHKXt2YXIgeT13Ll9wcmltZShHKTt0aGlzLm09eS5wLHRoaXMucHJpbWU9eX1lbHNlIG0oRy5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRo'@;
put 'YW4gMSIpLHRoaXMubT1HLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBjZShHKXtsZS5jYWxsKHRoaXMsRyksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgdygxKS5pdXNobG4o'@;
put 'dGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhp'@;
put 'cy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1RLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHk9bmV3IHcobnVsbCk7cmV0dXJuIHkud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx5fSxRLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHkpe3ZhciBILEw9'@;
put 'eTtkb3t0aGlzLnNwbGl0KEwsdGhpcy50bXApLEg9KEw9KEw9dGhpcy5pbXVsSyhMKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpMLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KEwud29yZHNbMF09MCxMLmxlbmd0aD0x'@;
put 'KTpqPjA/TC5pc3ViKHRoaXMucCk6dm9pZCAwIT09TC5zdHJpcD9MLnN0cmlwKCk6TC5fc3RyaXAoKSxMfSxRLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih5LEwpe3kuaXVzaHJuKHRoaXMubiwwLEwpfSxRLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih5KXtyZXR1cm4geS5pbXVsKHRoaXMu'@;
put 'ayl9LFgodGUsUSksdGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHksTCl7Zm9yKHZhciBIPTQxOTQzMDMsaj1NYXRoLm1pbih5Lmxlbmd0aCw5KSxnPTA7ZzxqO2crKylMLndvcmRzW2ddPXkud29yZHNbZ107aWYoTC5sZW5ndGg9aix5Lmxlbmd0aDw9OSlyZXR1cm4geS53b3Jkc1swXT0w'@;
put 'LHZvaWQoeS5sZW5ndGg9MSk7dmFyIFM9eS53b3Jkc1s5XTtmb3IoTC53b3Jkc1tMLmxlbmd0aCsrXT1TJkgsZz0xMDtnPHkubGVuZ3RoO2crKyl7dmFyIHg9MHx5LndvcmRzW2ddO3kud29yZHNbZy0xMF09KHgmSCk8PDR8Uz4+PjIyLFM9eH15LndvcmRzW2ctMTBdPVM+Pj49MjIseS5sZW5n'@;
put 'dGgtPTA9PT1TJiZ5Lmxlbmd0aD4xMD8xMDo5fSx0ZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7eS53b3Jkc1t5Lmxlbmd0aF09MCx5LndvcmRzW3kubGVuZ3RoKzFdPTAseS5sZW5ndGgrPTI7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0wfHkud29yZHNbSF07'@;
put 'eS53b3Jkc1tIXT02NzEwODg2MyYoTCs9OTc3KmopLEw9NjQqaisoTC82NzEwODg2NHwwKX1yZXR1cm4gMD09PXkud29yZHNbeS5sZW5ndGgtMV0mJih5Lmxlbmd0aC0tLDA9PT15LndvcmRzW3kubGVuZ3RoLTFdJiZ5Lmxlbmd0aC0tKSx5fSxYKGFlLFEpLFgoc2UsUSksWChkZSxRKSxkZS5w'@;
put 'cm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oeSl7Zm9yKHZhciBMPTAsSD0wO0g8eS5sZW5ndGg7SCsrKXt2YXIgaj0xOSooMHx5LndvcmRzW0hdKStMLGc9NjcxMDg4NjMmajtqPj4+PTI2LHkud29yZHNbSF09ZyxMPWp9cmV0dXJuIDAhPT1MJiYoeS53b3Jkc1t5Lmxlbmd0aCsrXT1MKSx5fSx3'@;
put 'Ll9wcmltZT1mdW5jdGlvbih5KXtpZihxW3ldKXJldHVybiBxW3ldO3ZhciBMO2lmKCJrMjU2Ij09PXkpTD1uZXcgdGU7ZWxzZSBpZigicDIyNCI9PT15KUw9bmV3IGFlO2Vsc2UgaWYoInAxOTIiPT09eSlMPW5ldyBzZTtlbHNle2lmKCJwMjU1MTkiIT09eSl0aHJvdyBuZXcgRXJyb3IoIlVu'@;
put 'a25vd24gcHJpbWUgIit5KTtMPW5ldyBkZX1yZXR1cm4gcVt5XT1MLEx9LGxlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih5KXttKDA9PT15Lm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLG0oeS5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl'@;
put 'cnMiKX0sbGUucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHksTCl7bSghKHkubmVnYXRpdmV8TC5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksbSh5LnJlZCYmeS5yZWQ9PT1MLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxsZS5w'@;
put 'cm90b3R5cGUuaW1vZD1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UoeSkuX2ZvcmNlUmVkKHRoaXMpOnkudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLm5lZz1mdW5jdGlvbih5KXtyZXR1cm4geS5pc1plcm8oKT95LmNs'@;
put 'b25lKCk6dGhpcy5tLnN1Yih5KS5fZm9yY2VSZWQodGhpcyl9LGxlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5hZGQoTCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEguX2ZvcmNlUmVkKHRoaXMpfSxsZS5w'@;
put 'cm90b3R5cGUuaWFkZD1mdW5jdGlvbih5LEwpe3RoaXMuX3ZlcmlmeTIoeSxMKTt2YXIgSD15LmlhZGQoTCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LGxlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5z'@;
put 'dWIoTCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0sbGUucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24oeSxMKXt0aGlzLl92ZXJpZnkyKHksTCk7dmFyIEg9eS5pc3ViKEwpO3JldHVybiBILmNtcG4oMCk8MCYmSC5pYWRkKHRoaXMubSksSH0s'@;
put 'bGUucHJvdG90eXBlLnNobD1mdW5jdGlvbih5LEwpe3JldHVybiB0aGlzLl92ZXJpZnkxKHkpLHRoaXMuaW1vZCh5LnVzaGxuKEwpKX0sbGUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oeSxMKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih5LEwpLHRoaXMuaW1vZCh5LmltdWwoTCkpfSxsZS5wcm90'@;
put 'b3R5cGUubXVsPWZ1bmN0aW9uKHksTCl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIoeSxMKSx0aGlzLmltb2QoeS5tdWwoTCkpfSxsZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih5KXtyZXR1cm4gdGhpcy5pbXVsKHkseS5jbG9uZSgpKX0sbGUucHJvdG90eXBlLnNxcj1mdW5jdGlvbih5KXtyZXR1'@;
put 'cm4gdGhpcy5tdWwoeSx5KX0sbGUucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24oeSl7aWYoeS5pc1plcm8oKSlyZXR1cm4geS5jbG9uZSgpO3ZhciBMPXRoaXMubS5hbmRsbigzKTtpZihtKEwlMj09MSksMz09PUwpe3ZhciBIPXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4g'@;
put 'dGhpcy5wb3coeSxIKX1mb3IodmFyIGo9dGhpcy5tLnN1Ym4oMSksZz0wOyFqLmlzWmVybygpJiYwPT09ai5hbmRsbigxKTspZysrLGouaXVzaHJuKDEpO20oIWouaXNaZXJvKCkpO3ZhciBTPW5ldyB3KDEpLnRvUmVkKHRoaXMpLHg9Uy5yZWROZWcoKSxfPXRoaXMubS5zdWJuKDEpLml1c2hy'@;
put 'bigxKSxwPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IocD1uZXcgdygyKnAqcCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KHAsXykuY21wKHgpOylwLnJlZElBZGQoeCk7Zm9yKHZhciBDPXRoaXMucG93KHAsaiksSz10aGlzLnBvdyh5LGouYWRkbigxKS5pdXNocm4oMSkpLG5lPXRoaXMucG93'@;
put 'KHksaiksdWU9ZzswIT09bmUuY21wKFMpOyl7Zm9yKHZhciBoZT1uZSx4ZT0wOzAhPT1oZS5jbXAoUyk7eGUrKyloZT1oZS5yZWRTcXIoKTttKHhlPHVlKTt2YXIgT2U9dGhpcy5wb3coQyxuZXcgdygxKS5pdXNobG4odWUteGUtMSkpO0s9Sy5yZWRNdWwoT2UpLEM9T2UucmVkU3FyKCksbmU9'@;
put 'bmUucmVkTXVsKEMpLHVlPXhlfXJldHVybiBLfSxsZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih5KXt2YXIgTD15Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09TC5uZWdhdGl2ZT8oTC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChMKS5yZWROZWcoKSk6dGhpcy5pbW9kKEwpfSxsZS5wcm90b3R5'@;
put 'cGUucG93PWZ1bmN0aW9uKHksTCl7aWYoTC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PUwuY21wbigxKSlyZXR1cm4geS5jbG9uZSgpO3ZhciBqPW5ldyBBcnJheSgxNik7alswXT1uZXcgdygxKS50b1JlZCh0aGlzKSxqWzFdPXk7Zm9yKHZhciBnPTI7Zzxq'@;
put 'Lmxlbmd0aDtnKyspaltnXT10aGlzLm11bChqW2ctMV0seSk7dmFyIFM9alswXSx4PTAsXz0wLHA9TC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXAmJihwPTI2KSxnPUwubGVuZ3RoLTE7Zz49MDtnLS0pe2Zvcih2YXIgQz1MLndvcmRzW2ddLEs9cC0xO0s+PTA7Sy0tKXt2YXIgbmU9Qz4+SyYx'@;
put 'O1MhPT1qWzBdJiYoUz10aGlzLnNxcihTKSksMCE9PW5lfHwwIT09eD8oeDw8PTEseHw9bmUsKDQ9PSsrX3x8MD09PWcmJjA9PT1LKSYmKFM9dGhpcy5tdWwoUyxqW3hdKSxfPTAseD0wKSk6Xz0wfXA9MjZ9cmV0dXJuIFN9LGxlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oeSl7dmFy'@;
put 'IEw9eS51bW9kKHRoaXMubSk7cmV0dXJuIEw9PT15P0wuY2xvbmUoKTpMfSxsZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oeSl7dmFyIEw9eS5jbG9uZSgpO3JldHVybiBMLnJlZD1udWxsLEx9LHcubW9udD1mdW5jdGlvbih5KXtyZXR1cm4gbmV3IGNlKHkpfSxYKGNlLGxlKSxj'@;
put 'ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS51c2hsbih0aGlzLnNoaWZ0KSl9LGNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih5KXt2YXIgTD10aGlzLmltb2QoeS5tdWwodGhpcy5yaW52KSk7cmV0dXJuIEwucmVkPW51bGwsTH0s'@;
put 'Y2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oeSxMKXtpZih5LmlzWmVybygpfHxMLmlzWmVybygpKXJldHVybiB5LndvcmRzWzBdPTAseS5sZW5ndGg9MSx5O3ZhciBIPXkuaW11bChMKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11'@;
put 'bCh0aGlzLm0pLGc9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0KSxTPWc7cmV0dXJuIGcuY21wKHRoaXMubSk+PTA/Uz1nLmlzdWIodGhpcy5tKTpnLmNtcG4oMCk8MCYmKFM9Zy5pYWRkKHRoaXMubSkpLFMuX2ZvcmNlUmVkKHRoaXMpfSxjZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHks'@;
put 'TCl7aWYoeS5pc1plcm8oKXx8TC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPXkubXVsKEwpLGo9SC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksZz1ILmlzdWIoaikuaXVzaHJuKHRo'@;
put 'aXMuc2hpZnQpLFM9ZztyZXR1cm4gZy5jbXAodGhpcy5tKT49MD9TPWcuaXN1Yih0aGlzLm0pOmcuY21wbigwKTwwJiYoUz1nLmlhZGQodGhpcy5tKSksUy5fZm9yY2VSZWQodGhpcyl9LGNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHkpe3JldHVybiB0aGlzLmltb2QoeS5faW52bXAodGhp'@;
put 'cy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KCRlPVIubm1kKCRlKSx0aGlzKX0sNDQzNTY6JGU9PnsidXNlIHN0cmljdCI7dmFyIGVlLFNlPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsUj1TZSYmImZ1bmN0aW9uIj09dHlwZW9mIFNlLmFwcGx5P1Nl'@;
put 'LmFwcGx5OmZ1bmN0aW9uKFEsdGUsYWUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChRLHRlLGFlKX07ZWU9U2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBTZS5vd25LZXlzP1NlLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihRKXtyZXR1'@;
put 'cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoUSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoUSkpfTpmdW5jdGlvbihRKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoUSl9O3ZhciBtPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oUSl7cmV0dXJuIFEh'@;
put 'PVF9O2Z1bmN0aW9uIFgoKXtYLmluaXQuY2FsbCh0aGlzKX0kZS5leHBvcnRzPVgsJGUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIFoocSxRKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsYWUpe2Z1bmN0aW9uIHNlKGxlKXtxLnJlbW92ZUxpc3RlbmVyKFEsZGUpLGFlKGxlKX1mdW5j'@;
put 'dGlvbiBkZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiBxLnJlbW92ZUxpc3RlbmVyJiZxLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsc2UpLHRlKFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9eihxLFEsZGUse29uY2U6ITB9KSwiZXJyb3IiIT09USYmZnVuY3Rpb24gVyhxLFEsdGUpeyJmdW5jdGlv'@;
put 'biI9PXR5cGVvZiBxLm9uJiZ6KHEsImVycm9yIixRLHRlKX0ocSxzZSx7b25jZTohMH0pfSl9LFguRXZlbnRFbWl0dGVyPVgsWC5wcm90b3R5cGUuX2V2ZW50cz12b2lkIDAsWC5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsWC5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHc9'@;
put 'MTA7ZnVuY3Rpb24gQShxKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgcSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImxpc3RlbmVyIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24uIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcSl9ZnVuY3Rpb24gRChxKXtyZXR1cm4gdm9pZCAw'@;
put 'PT09cS5fbWF4TGlzdGVuZXJzP1guZGVmYXVsdE1heExpc3RlbmVyczpxLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gUChxLFEsdGUsYWUpe3ZhciBzZSxkZSxsZTtpZihBKHRlKSx2b2lkIDA9PT0oZGU9cS5fZXZlbnRzKT8oZGU9cS5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCkscS5fZXZl'@;
put 'bnRzQ291bnQ9MCk6KHZvaWQgMCE9PWRlLm5ld0xpc3RlbmVyJiYocS5lbWl0KCJuZXdMaXN0ZW5lciIsUSx0ZS5saXN0ZW5lcj90ZS5saXN0ZW5lcjp0ZSksZGU9cS5fZXZlbnRzKSxsZT1kZVtRXSksdm9pZCAwPT09bGUpbGU9ZGVbUV09dGUsKytxLl9ldmVudHNDb3VudDtlbHNlIGlmKCJm'@;
put 'dW5jdGlvbiI9PXR5cGVvZiBsZT9sZT1kZVtRXT1hZT9bdGUsbGVdOltsZSx0ZV06YWU/bGUudW5zaGlmdCh0ZSk6bGUucHVzaCh0ZSksKHNlPUQocSkpPjAmJmxlLmxlbmd0aD5zZSYmIWxlLndhcm5lZCl7bGUud2FybmVkPSEwO3ZhciBjZT1uZXcgRXJyb3IoIlBvc3NpYmxlIEV2ZW50RW1p'@;
put 'dHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gIitsZS5sZW5ndGgrIiAiK1N0cmluZyhRKSsiIGxpc3RlbmVycyBhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gaW5jcmVhc2UgbGltaXQiKTtjZS5uYW1lPSJNYXhMaXN0ZW5lcnNFeGNlZWRlZFdhcm5pbmciLGNlLmVt'@;
put 'aXR0ZXI9cSxjZS50eXBlPVEsY2UuY291bnQ9bGUubGVuZ3RoLGZ1bmN0aW9uIGIocSl7Y29uc29sZSYmY29uc29sZS53YXJuJiZjb25zb2xlLndhcm4ocSl9KGNlKX1yZXR1cm4gcX1mdW5jdGlvbiBVKCl7aWYoIXRoaXMuZmlyZWQpcmV0dXJuIHRoaXMudGFyZ2V0LnJlbW92ZUxpc3RlbmVy'@;
put 'KHRoaXMudHlwZSx0aGlzLndyYXBGbiksdGhpcy5maXJlZD0hMCwwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpOnRoaXMubGlzdGVuZXIuYXBwbHkodGhpcy50YXJnZXQsYXJndW1lbnRzKX1mdW5jdGlvbiBJKHEsUSx0ZSl7dmFyIGFlPXtmaXJl'@;
put 'ZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpxLHR5cGU6USxsaXN0ZW5lcjp0ZX0sc2U9VS5iaW5kKGFlKTtyZXR1cm4gc2UubGlzdGVuZXI9dGUsYWUud3JhcEZuPXNlLHNlfWZ1bmN0aW9uIEUocSxRLHRlKXt2YXIgYWU9cS5fZXZlbnRzO2lmKHZvaWQgMD09PWFlKXJldHVybltdO3ZhciBz'@;
put 'ZT1hZVtRXTtyZXR1cm4gdm9pZCAwPT09c2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIHNlP3RlP1tzZS5saXN0ZW5lcnx8c2VdOltzZV06dGU/ZnVuY3Rpb24gVihxKXtmb3IodmFyIFE9bmV3IEFycmF5KHEubGVuZ3RoKSx0ZT0wO3RlPFEubGVuZ3RoOysrdGUpUVt0ZV09cVt0ZV0ubGlzdGVu'@;
put 'ZXJ8fHFbdGVdO3JldHVybiBRfShzZSk6QihzZSxzZS5sZW5ndGgpfWZ1bmN0aW9uIGsocSl7dmFyIFE9dGhpcy5fZXZlbnRzO2lmKHZvaWQgMCE9PVEpe3ZhciB0ZT1RW3FdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB0ZSlyZXR1cm4gMTtpZih2b2lkIDAhPT10ZSlyZXR1cm4gdGUubGVuZ3Ro'@;
put 'fXJldHVybiAwfWZ1bmN0aW9uIEIocSxRKXtmb3IodmFyIHRlPW5ldyBBcnJheShRKSxhZT0wO2FlPFE7KythZSl0ZVthZV09cVthZV07cmV0dXJuIHRlfWZ1bmN0aW9uIHoocSxRLHRlLGFlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgcS5vbilhZS5vbmNlP3Eub25jZShRLHRlKTpxLm9uKFEs'@;
put 'dGUpO2Vsc2V7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHEuYWRkRXZlbnRMaXN0ZW5lcil0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgcSk7cS5hZGRFdmVudExpc3Rl'@;
put 'bmVyKFEsZnVuY3Rpb24gc2UoZGUpe2FlLm9uY2UmJnEucmVtb3ZlRXZlbnRMaXN0ZW5lcihRLHNlKSx0ZShkZSl9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KFgsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB3fSxzZXQ6ZnVuY3Rp'@;
put 'b24ocSl7aWYoIm51bWJlciIhPXR5cGVvZiBxfHxxPDB8fG0ocSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAiZGVmYXVsdE1heExpc3RlbmVycyIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytxKyIuIik7'@;
put 'dz1xfX0pLFguaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVudHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21h'@;
put 'eExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sWC5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKFEpe2lmKCJudW1iZXIiIT10eXBlb2YgUXx8UTwwfHxtKFEpKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgIm4iIGlzIG91dCBvZiByYW5n'@;
put 'ZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrUSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9USx0aGlzfSxYLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gRCh0aGlzKX0sWC5wcm90b3R5cGUuZW1pdD1mdW5j'@;
put 'dGlvbihRKXtmb3IodmFyIHRlPVtdLGFlPTE7YWU8YXJndW1lbnRzLmxlbmd0aDthZSsrKXRlLnB1c2goYXJndW1lbnRzW2FlXSk7dmFyIHNlPSJlcnJvciI9PT1RLGRlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1kZSlzZT1zZSYmdm9pZCAwPT09ZGUuZXJyb3I7ZWxzZSBpZighc2UpcmV0'@;
put 'dXJuITE7aWYoc2Upe3ZhciBsZTtpZih0ZS5sZW5ndGg+MCYmKGxlPXRlWzBdKSxsZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGxlO3ZhciBjZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhsZT8iICgiK2xlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgY2UuY29udGV4dD1sZSxjZX12'@;
put 'YXIgRz1kZVtRXTtpZih2b2lkIDA9PT1HKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBHKVIoRyx0aGlzLHRlKTtlbHNle3ZhciB5PUcubGVuZ3RoLEw9QihHLHkpO2ZvcihhZT0wO2FlPHk7KythZSlSKExbYWVdLHRoaXMsdGUpfXJldHVybiEwfSxYLnByb3RvdHlwZS5vbj1YLnBy'@;
put 'b3RvdHlwZS5hZGRMaXN0ZW5lcj1mdW5jdGlvbihRLHRlKXtyZXR1cm4gUCh0aGlzLFEsdGUsITEpfSxYLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oUSx0ZSl7cmV0dXJuIFAodGhpcyxRLHRlLCEwKX0sWC5wcm90b3R5cGUub25jZT1mdW5jdGlvbihRLHRlKXtyZXR1cm4g'@;
put 'QSh0ZSksdGhpcy5vbihRLEkodGhpcyxRLHRlKSksdGhpc30sWC5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lcj1mdW5jdGlvbihRLHRlKXtyZXR1cm4gQSh0ZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoUSxJKHRoaXMsUSx0ZSkpLHRoaXN9LFgucHJvdG90eXBlLm9mZj1YLnByb3RvdHlw'@;
put 'ZS5yZW1vdmVMaXN0ZW5lcj1mdW5jdGlvbihRLHRlKXt2YXIgYWUsc2UsZGUsbGUsY2U7aWYoQSh0ZSksdm9pZCAwPT09KHNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KGFlPXNlW1FdKSlyZXR1cm4gdGhpcztpZihhZT09PXRlfHxhZS5saXN0ZW5lcj09PXRlKTA9'@;
put 'PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6KGRlbGV0ZSBzZVtRXSxzZS5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KCJyZW1vdmVMaXN0ZW5lciIsUSxhZS5saXN0ZW5lcnx8dGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBhZSl7'@;
put 'Zm9yKGRlPS0xLGxlPWFlLmxlbmd0aC0xO2xlPj0wO2xlLS0paWYoYWVbbGVdPT09dGV8fGFlW2xlXS5saXN0ZW5lcj09PXRlKXtjZT1hZVtsZV0ubGlzdGVuZXIsZGU9bGU7YnJlYWt9aWYoZGU8MClyZXR1cm4gdGhpczswPT09ZGU/YWUuc2hpZnQoKTpmdW5jdGlvbiBOKHEsUSl7Zm9yKDtR'@;
put 'KzE8cS5sZW5ndGg7USsrKXFbUV09cVtRKzFdO3EucG9wKCl9KGFlLGRlKSwxPT09YWUubGVuZ3RoJiYoc2VbUV09YWVbMF0pLHZvaWQgMCE9PXNlLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixRLGNlfHx0ZSl9cmV0dXJuIHRoaXN9LFgucHJvdG90eXBlLnJl'@;
put 'bW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihRKXt2YXIgdGUsYWUsc2U7aWYodm9pZCAwPT09KGFlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09YWUucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNy'@;
put 'ZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAhPT1hZVtRXSYmKDA9PS0tdGhpcy5fZXZlbnRzQ291bnQ/dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCk6ZGVsZXRlIGFlW1FdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXt2YXIgbGUsZGU9T2JqZWN0'@;
put 'LmtleXMoYWUpO2ZvcihzZT0wO3NlPGRlLmxlbmd0aDsrK3NlKSJyZW1vdmVMaXN0ZW5lciIhPT0obGU9ZGVbc2VdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMobGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVuZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0'@;
put 'LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKHRlPWFlW1FdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKFEsdGUpO2Vsc2UgaWYodm9pZCAwIT09dGUpZm9yKHNlPXRlLmxlbmd0aC0xO3NlPj0wO3NlLS0pdGhpcy5yZW1vdmVMaXN0ZW5l'@;
put 'cihRLHRlW3NlXSk7cmV0dXJuIHRoaXN9LFgucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihRKXtyZXR1cm4gRSh0aGlzLFEsITApfSxYLnByb3RvdHlwZS5yYXdMaXN0ZW5lcnM9ZnVuY3Rpb24oUSl7cmV0dXJuIEUodGhpcyxRLCExKX0sWC5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHEs'@;
put 'USl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHEubGlzdGVuZXJDb3VudD9xLmxpc3RlbmVyQ291bnQoUSk6ay5jYWxsKHEsUSl9LFgucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ayxYLnByb3RvdHlwZS5ldmVudE5hbWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2V2ZW50c0NvdW50PjA/'@;
put 'ZWUodGhpcy5fZXZlbnRzKTpbXX19LDE4MjExOigkZSxTZSxSKT0+e3ZhciBlZT1SKDI3MDU0KS5CdWZmZXIsYj1SKDM0NzI1KTskZS5leHBvcnRzPWZ1bmN0aW9uIG0oWCx3LEEsRCl7aWYoZWUuaXNCdWZmZXIoWCl8fChYPWVlLmZyb20oWCwiYmluYXJ5IikpLHcmJihlZS5pc0J1ZmZlcih3'@;
put 'KXx8KHc9ZWUuZnJvbSh3LCJiaW5hcnkiKSksOCE9PXcubGVuZ3RoKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgUD1BLzgsVT1lZS5hbGxvYyhQKSxJPWVlLmFsbG9jKER8fDApLEU9ZWUuYWxsb2MoMCk7'@;
put 'UD4wfHxEPjA7KXt2YXIgaz1uZXcgYjtrLnVwZGF0ZShFKSxrLnVwZGF0ZShYKSx3JiZrLnVwZGF0ZSh3KSxFPWsuZGlnZXN0KCk7dmFyIEI9MDtpZihQPjApe3ZhciBOPVUubGVuZ3RoLVA7Qj1NYXRoLm1pbihQLEUubGVuZ3RoKSxFLmNvcHkoVSxOLDAsQiksUC09Qn1pZihCPEUubGVuZ3Ro'@;
put 'JiZEPjApe3ZhciBWPUkubGVuZ3RoLUQsWj1NYXRoLm1pbihELEUubGVuZ3RoLUIpO0UuY29weShJLFYsQixCK1opLEQtPVp9fXJldHVybiBFLmZpbGwoMCkse2tleTpVLGl2Okl9fX0sNzkyNDU6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5l'@;
put 'TG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFyaWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVs'@;
put 'X0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQiLnNwbGl0KCJf'@;
put 'Iiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dvX0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXm5tJC9pLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sWCx3KXtyZXR1cm4gbTwxMj93PyJ2bSI6IlZNIjp3PyJu'@;
put 'bSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFn'@;
put 'IG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUgb21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9vciAlcyIscGFzdDoi'@;
put 'JXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29uZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFhbmRlIix5OiInbiBqYWFyIix5'@;
put 'eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihtKXtyZXR1cm4gbSsoMT09PW18fDg9PT1tfHxtPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sNDgxNjQ6ZnVuY3Rpb24o'@;
put 'JGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ZnVuY3Rpb24oRCl7cmV0dXJuIDA9PT1EPzA6MT09PUQ/MToyPT09RD8yOkQlMTAwPj0zJiZEJTEwMDw9MTA/MzpEJTEwMD49MTE/NDo1fSxtPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2'@;
put 'MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1'@;
put 'MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZc'@;
put 'dTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYy'@;
put 'YVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2'@;
put 'MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBc'@;
put 'dTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2'@;
put 'NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIl'@;
put 'ZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYz'@;
put 'NFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2'@;
put 'NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2Mzlc'@;
put 'dTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sWD1mdW5jdGlvbihEKXtyZXR1cm4gZnVuY3Rpb24oUCxVLEksRSl7dmFyIGs9YihQKSxCPW1bRF1bYihQKV07cmV0dXJuIDI9PT1rJiYoQj1CW1U/MDoxXSksQi5yZXBsYWNlKC8lZC9pLFApfX0sdz1b'@;
put 'Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YSIsIlx1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDYy'@;
put 'N1x1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOSIsIlx1MDYyM1x1MDY0OFx1MDYyYSIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0'@;
put 'MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2VlLmRlZmluZUxvY2FsZSgiYXItZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUw'@;
put 'NjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1'@;
put 'MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2'@;
put 'MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYy'@;
put 'Yl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkg'@;
put 'SEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEQpe3JldHVybiJcdTA2NDUiPT09RH0sbWVyaWRpZW06ZnVuY3Rpb24oRCxQLFUpe3JldHVybiBEPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxl'@;
put 'bmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUw'@;
put 'NjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBc'@;
put 'dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYz'@;
put 'OVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlgoInMiKSxzczpYKCJzIiksbTpYKCJtIiksbW06WCgibSIpLGg6WCgiaCIpLGhoOlgoImgiKSxkOlgoImQiKSxkZDpYKCJkIiksTTpYKCJNIiksTU06WCgiTSIpLHk6WCgieSIpLHl5OlgoInkiKX0scG9zdGZvcm1h'@;
put 'dDpmdW5jdGlvbihEKXtyZXR1cm4gRC5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oUig5MzEzNykpfSwzNDc2MDpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImFyLWt3Iix7bW9udGhzOiJc'@;
put 'dTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0'@;
put 'YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1'@;
put 'MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMx'@;
put 'XHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUw'@;
put 'NjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmFcdTA2'@;
put 'NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUw'@;
put 'NjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYy'@;
put 'MV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2'@;
put 'MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1N'@;
put 'TSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUw'@;
put 'NjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2Mzlc'@;
put 'dTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJl'@;
put 'OiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZc'@;
put 'dTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdc'@;
put 'dTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oUig5MzEzNykpfSw2NzYzNzpmdW5jdGlvbigkZSxTZSxSKXshZnVu'@;
put 'Y3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiMSIsMjoiMiIsMzoiMyIsNDoiNCIsNToiNSIsNjoiNiIsNzoiNyIsODoiOCIsOToiOSIsMDoiMCJ9LG09ZnVuY3Rpb24oUCl7cmV0dXJuIDA9PT1QPzA6MT09PVA/MToyPT09UD8yOlAlMTAwPj0zJiZQJTEwMDw9MTA/MzpQJTEwMD49'@;
put 'MTE/NDo1fSxYPXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1MDY0Nlx1'@;
put 'MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFc'@;
put 'dTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0'@;
put 'Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2'@;
put 'NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDYyN1x1'@;
put 'MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQyXHUwNjQ0'@;
put 'IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2NGFc'@;
put 'dTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUwNjI3XHUw'@;
put 'NjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzEiXSx5'@;
put 'OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0YVx1MDY0'@;
put 'NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sdz1mdW5jdGlvbihQKXtyZXR1cm4gZnVuY3Rpb24oVSxJLEUsayl7dmFyIEI9bShVKSxOPVhbUF1bbShVKV07'@;
put 'cmV0dXJuIDI9PT1CJiYoTj1OW0k/MDoxXSksTi5yZXBsYWNlKC8lZC9pLFUpfX0sQT1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1MDYyOFx1'@;
put 'MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1MDYyYVx1'@;
put 'MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2VlLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250'@;
put 'aHM6QSxtb250aHNTaG9ydDpBLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRc'@;
put 'dTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9y'@;
put 'dDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVc'@;
put 'dTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i'@;
put 'LExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKFApe3JldHVy'@;
put 'biJcdTA2NDUiPT09UH0sbWVyaWRpZW06ZnVuY3Rpb24oUCxVLEkpe3JldHVybiBQPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3'@;
put 'XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2'@;
put 'MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1'@;
put 'MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOncoInMiKSxzczp3KCJzIiksbTp3KCJtIiksbW06dygibSIpLGg6dygiaCIpLGho'@;
put 'OncoImgiKSxkOncoImQiKSxkZDp3KCJkIiksTTp3KCJNIiksTU06dygiTSIpLHk6dygieSIpLHl5OncoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9cZC9n'@;
put 'LGZ1bmN0aW9uKFUpe3JldHVybiBiW1VdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShSKDkzMTM3KSl9LDI2MzU2OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250'@;
put 'aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2'@;
put 'XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2'@;
put 'MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2Mjhc'@;
put 'dTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2'@;
put 'NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYy'@;
put 'Ylx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2'@;
put 'NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3'@;
put 'XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMx'@;
put 'X1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQg'@;
put 'RCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2'@;
put 'MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1'@;
put 'MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm'@;
put 'dXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1'@;
put 'MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1'@;
put 'MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMjY5ODI6ZnVuY3Rpb24oJGUsU2UsUil7'@;
put 'IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUw'@;
put 'NjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07ZWUuZGVmaW5lTG9jYWxlKCJhci1zYSIse21vbnRoczoiXHUwNjRhXHUwNjQ2XHUwNjI3'@;
put 'XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUw'@;
put 'NjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1'@;
put 'MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYy'@;
put 'M1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OF9cdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzNfXHUwNjMzXHUwNjI4XHUwNjJhXHUw'@;
put 'NjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2'@;
put 'MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUw'@;
put 'NjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0'@;
put 'YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZ'@;
put 'WSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LEEsRCl7cmV0dXJuIHc8MTI/Ilx1'@;
put 'MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1'@;
put 'MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5'@;
put 'XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVy'@;
put 'ZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJm'@;
put 'XHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3'@;
put 'XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUw'@;
put 'NjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEEpe3JldHVybiBtW0FdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEEpe3JldHVybiBiW0FdfSku'@;
put 'cmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KFIoOTMxMzcpKX0sODQ3OTI6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJhci10biIse21vbnRoczoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQx'@;
put 'XHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUw'@;
put 'NjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVc'@;
put 'dTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDYyY1x1MDYyN1x1MDY0Nlx1MDY0MVx1MDY0YV9cdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDY0MVx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2'@;
put 'MjdcdTA2NGFfXHUwNjJjXHUwNjQ4XHUwNjI3XHUwNjQ2X1x1MDYyY1x1MDY0OFx1MDY0YVx1MDY0NFx1MDY0YVx1MDYyOV9cdTA2MjNcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjI4XHUwNjJhXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9c'@;
put 'dTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjRhXHUwNjMzXHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUw'@;
put 'NjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1'@;
put 'MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUw'@;
put 'NjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19c'@;
put 'dTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDpt'@;
put 'bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBc'@;
put 'dTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5'@;
put 'IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUw'@;
put 'NjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYyYlx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3'@;
put 'XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGhoOiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToi'@;
put 'JWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZcdTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw1Mzc3OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVz'@;
put 'ZSBzdHJpY3QiO3ZhciBiPXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxtPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMi'@;
put 'OiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6IjgiLCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LFg9ZnVuY3Rpb24oVSl7cmV0dXJuIDA9PT1VPzA6MT09PVU/MToyPT09VT8yOlUlMTAwPj0zJiZVJTEwMDw9MTA/MzpV'@;
put 'JTEwMD49MTE/NDo1fSx3PXtzOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyYlx1MDYyN1x1'@;
put 'MDY0Nlx1MDY0YVx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLCIlZCBcdTA2MmJcdTA2MjdcdTA2NDZc'@;
put 'dTA2NGFcdTA2MjkiXSxtOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYyZlx1MDY0Mlx1MDY0'@;
put 'YVx1MDY0Mlx1MDYyYVx1MDYyN1x1MDY0NiIsIlx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLCIlZCBcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLCIlZCBcdTA2MmZcdTA2NDJcdTA2'@;
put 'NGFcdTA2NDJcdTA2MjkiXSxoOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmXHUwNjI5IixbIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1'@;
put 'MDYyN1x1MDY0NiIsIlx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLCIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiXSxkOlsiXHUwNjIzXHUwNjQy'@;
put 'XHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2NGFcdTA2NDhcdTA2NDUiLCJcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDY0YVx1MDY0OFx1MDY0NVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNc'@;
put 'dTA2NGFcdTA2MjdcdTA2NDUiLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2NGFcdTA2NDhcdTA2NDUiXSxNOlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzRcdTA2NDdcdTA2MzEiLCJcdTA2MzRcdTA2NDdcdTA2MzEgXHUwNjQ4XHUw'@;
put 'NjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDYyN1x1MDY0NiIsIlx1MDYzNFx1MDY0N1x1MDYzMVx1MDY0YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLCIlZCBcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjciLCIlZCBcdTA2MzRcdTA2NDdcdTA2'@;
put 'MzEiXSx5OlsiXHUwNjIzXHUwNjQyXHUwNjQ0IFx1MDY0NVx1MDY0NiBcdTA2MzlcdTA2MjdcdTA2NDUiLCJcdTA2MzlcdTA2MjdcdTA2NDUgXHUwNjQ4XHUwNjI3XHUwNjJkXHUwNjJmIixbIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDYyN1x1MDY0NiIsIlx1MDYzOVx1MDYyN1x1MDY0NVx1MDY0'@;
put 'YVx1MDY0NiJdLCIlZCBcdTA2MjNcdTA2MzlcdTA2NDhcdTA2MjdcdTA2NDUiLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGJcdTA2MjciLCIlZCBcdTA2MzlcdTA2MjdcdTA2NDUiXX0sQT1mdW5jdGlvbihVKXtyZXR1cm4gZnVuY3Rpb24oSSxFLGssQil7dmFyIE49WChJKSxWPXdbVV1b'@;
put 'WChJKV07cmV0dXJuIDI9PT1OJiYoVj1WW0U/MDoxXSksVi5yZXBsYWNlKC8lZC9pLEkpfX0sRD1bIlx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDYzMyIsIlx1MDYyM1x1'@;
put 'MDYyOFx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyN1x1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OCIsIlx1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0OCIsIlx1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzMyIsIlx1MDYzM1x1MDYyOFx1'@;
put 'MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdO2VlLmRlZmluZUxvY2FsZSgiYXIiLHtt'@;
put 'b250aHM6RCxtb250aHNTaG9ydDpELHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2'@;
put 'NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNT'@;
put 'aG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2'@;
put 'NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6'@;
put 'bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKFUpe3Jl'@;
put 'dHVybiJcdTA2NDUiPT09VX0sbWVyaWRpZW06ZnVuY3Rpb24oVSxJLEUpe3JldHVybiBVPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUw'@;
put 'NjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRc'@;
put 'dTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0'@;
put 'NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOkEoInMiKSxzczpBKCJzIiksbTpBKCJtIiksbW06QSgibSIpLGg6QSgiaCIp'@;
put 'LGhoOkEoImgiKSxkOkEoImQiKSxkZDpBKCJkIiksTTpBKCJNIiksTU06QSgiTSIpLHk6QSgieSIpLHl5OkEoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oVSl7cmV0dXJuIFUucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1'@;
put 'MDY2MF0vZyxmdW5jdGlvbihJKXtyZXR1cm4gbVtJXX0pLnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oVSl7cmV0dXJuIFUucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihJKXtyZXR1cm4gYltJXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2'@;
put 'LGRveToxMn19KX0oUig5MzEzNykpfSw2NjM2MTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiLWluY2kiLDU6Ii1pbmNpIiw4OiItaW5jaSIsNzA6Ii1pbmNpIiw4MDoiLWluY2kiLDI6Ii1uY2kiLDc6Ii1uY2kiLDIwOiItbmNpIiw1MDoi'@;
put 'LW5jaSIsMzoiLVx4ZmNuY1x4ZmMiLDQ6Ii1ceGZjbmNceGZjIiwxMDA6Ii1ceGZjbmNceGZjIiw2OiItbmNcdTAxMzEiLDk6Ii11bmN1IiwxMDoiLXVuY3UiLDMwOiItdW5jdSIsNjA6Ii1cdTAxMzFuY1x1MDEzMSIsOTA6Ii1cdTAxMzFuY1x1MDEzMSJ9O2VlLmRlZmluZUxvY2FsZSgiYXoi'@;
put 'LHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9tYXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxp'@;
put 'dCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAyNTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhmY21cdTAyNTlf'@;
put 'XHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZjX1x1MDE1ZVx1'@;
put 'MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDpt'@;
put 'bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjblx1MDI1OW5dIExUIixsYXN0V2Vl'@;
put 'azoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIsc3M6IiVkIHNh'@;
put 'bml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIsbW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVkIGlsIn0sbWVy'@;
put 'aWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihYKXtyZXR1cm4vXihnXHhmY25kXHhmY3p8YXhcdTAxNWZhbSkkLy50ZXN0KFgpfSxtZXJpZGllbTpmdW5jdGlvbihYLHcsQSl7cmV0dXJuIFg8ND8iZ2Vj'@;
put 'XHUwMjU5IjpYPDEyPyJzXHUwMjU5aFx1MDI1OXIiOlg8MTc/ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZjbmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9u'@;
put 'KFgpe2lmKDA9PT1YKXJldHVybiBYKyItXHUwMTMxbmNcdTAxMzEiO3ZhciB3PVglMTA7cmV0dXJuIFgrKGJbd118fGJbWCUxMDAtd118fGJbWD49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDQyMjkxOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlv'@;
put 'bihlZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG0odyxBLEQpe3JldHVybiJtIj09PUQ/QT8iXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDMwIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzIjoiaCI9PT1EP0E/Ilx1MDQzM1x1MDQz'@;
put 'MFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0MyI6dysiICIrZnVuY3Rpb24gYih3LEEpe3ZhciBEPXcuc3BsaXQoIl8iKTtyZXR1cm4gQSUxMD09MSYmQSUxMDAhPTExP0RbMF06QSUxMD49MiYmQSUxMDw9'@;
put 'NCYmKEElMTAwPDEwfHxBJTEwMD49MjApP0RbMV06RFsyXX0oe3NzOkE/Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzMF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0'@;
put 'IjoiXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDQzX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG1tOkE/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1'@;
put 'MDQzZFx1MDQzMF9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkIjoiXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1'@;
put 'Nlx1MDQzZFx1MDQ0Yl9cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2QiLGhoOkE/Ilx1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQzMF9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUw'@;
put 'NDM3XHUwNDU2XHUwNDNkIjoiXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDQzX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2QiLGRkOiJcdTA0MzRcdTA0MzdcdTA0MzVc'@;
put 'dTA0M2RcdTA0NGNfXHUwNDM0XHUwNDNkXHUwNDU2X1x1MDQzNFx1MDQzN1x1MDQ1MVx1MDQzZCIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NGJfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDMw'@;
put 'XHUwNDVlIix5eToiXHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0Yl9cdTA0MzNcdTA0MzBcdTA0MzRcdTA0M2VcdTA0NWUifVtEXSwrdyl9ZWUuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0Mzdc'@;
put 'dTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDQy'@;
put 'XHUwNDQwXHUwNDMwXHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0'@;
put 'MFx1MDQzMFx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzZFx1MDQz'@;
put 'NVx1MDQzNlx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDRiX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0'@;
put 'M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0'@;
put 'NGNfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FfXHUwNDNiXHUw'@;
put 'NDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0X1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzMFx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNF9cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDQxXHUwNDMw'@;
put 'XHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MV9cdTA0NDJcdTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQ1Nlx1MDQzZl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMFx1MDQ0MVx1'@;
put 'MDQ0Ml9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDNkXHUwNDM1XHUwNDM2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0Mzdc'@;
put 'dTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNk'@;
put 'XHUwNDU2XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1'@;
put 'XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1'@;
put 'Nlx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDIzXHUwNDQzXHUwNDVlXSA/KD86XHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQzZFx1MDQzMFx1MDQ0MVx1'@;
put 'MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQ0M1x1MDQ0ZSk/ID9cXSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRE'@;
put 'Lk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDRmIFx1MDQ1'@;
put 'ZV0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0NWVcdTA0NDJcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbGFzdERheToiW1x1MDQyM1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNDIzXSBkZGRkIFtcdTA0'@;
put 'NWVdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCBbXHUwNDVlXSBMVCI7Y2FzZSAxOmNhc2Ug'@;
put 'MjpjYXNlIDQ6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDRiXSBkZGRkIFtcdTA0NWVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzZlx1MDQ0MFx1MDQzMFx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDQyXHUw'@;
put 'NDMwXHUwNDNjXHUwNDQzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0MzBcdTA0M2JcdTA0NGNcdTA0M2FcdTA0NTYgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtLG1tOm0saDptLGhoOm0sZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjIixkZDptLE06'@;
put 'Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0NiIsTU06bSx5OiJcdTA0MzNcdTA0M2VcdTA0MzQiLHl5Om19LG1lcmlkaWVtUGFyc2U6L1x1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YnxcdTA0NDBcdTA0MzBcdTA0M2RcdTA0NTZcdTA0NDZcdTA0NGJ8XHUwNDM0XHUwNDNkXHUwNDRmfFx1'@;
put 'MDQzMlx1MDQzNVx1MDQ0N1x1MDQzMFx1MDQ0MFx1MDQzMC8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwKSQvLnRlc3Qodyl9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsQSxEKXtyZXR1cm4gdzw0'@;
put 'PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0NGIiOnc8MTI/Ilx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YiI6dzwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7'@;
put 'MSwyfS0oXHUwNDU2fFx1MDQ0YnxcdTA0MzNcdTA0MzApLyxvcmRpbmFsOmZ1bmN0aW9uKHcsQSl7c3dpdGNoKEEpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6Y2FzZSJ3IjpjYXNlIlciOnJldHVybiB3JTEwIT0yJiZ3JTEwIT0zfHx3JTEwMD09MTJ8fHclMTAwPT0xMz93KyItXHUwNDRi'@;
put 'Ijp3KyItXHUwNDU2IjtjYXNlIkQiOnJldHVybiB3KyItXHUwNDMzXHUwNDMwIjtkZWZhdWx0OnJldHVybiB3fX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sMzA5OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgi'@;
put 'YmciLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0'@;
put 'MzBcdTA0MzlfXHUwNDRlXHUwNDNkXHUwNDM4X1x1MDQ0ZVx1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQzZVx1'@;
put 'MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0NDNfXHUwNDQ0'@;
put 'XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0M2FcdTA0NDJf'@;
put 'XHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDRmX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0MzJc'@;
put 'dTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDRmXHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0YVx1MDQ0MFx1MDQ0Mlx1MDQ0YVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDQxXHUwNDRh'@;
put 'XHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQ0Zl9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUwNDQy'@;
put 'X1x1MDQ0MVx1MDQ0YVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntM'@;
put 'VDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXSBMVCIs'@;
put 'bmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDMyXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgp'@;
put 'KXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDFjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDNi'@;
put 'XHUwNDM4XHUwNDRmXSBkZGRkIFtcdTA0MzJdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQ0MVx1MDQzYlx1MDQzNVx1MDQzNCAlcyIscGFzdDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4ICVzIixzOiJcdTA0M2RcdTA0NGZcdTA0M2FcdTA0'@;
put 'M2VcdTA0M2JcdTA0M2FcdTA0M2UgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixtOiJcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBc'@;
put 'dTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MSIsaGg6IiVkIFx1MDQ0N1x1MDQzMFx1MDQ0MVx1MDQzMCIsZDoiXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIix3OiJcdTA0NDFcdTA0MzVc'@;
put 'dTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzAiLHd3OiIlZCBcdTA0NDFcdTA0MzVcdTA0MzRcdTA0M2NcdTA0MzhcdTA0NDZcdTA0MzgiLE06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsTU06IiVkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIseToi'@;
put 'XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUw'@;
put 'NDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBYPW0lMTAsdz1tJTEwMDtyZXR1cm4gMD09PW0/bSsiLVx1MDQzNVx1MDQzMiI6MD09PXc/bSsiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9tKyItXHUwNDQyXHUwNDM4IjoxPT09WD9tKyIt'@;
put 'XHUwNDMyXHUwNDM4IjoyPT09WD9tKyItXHUwNDQwXHUwNDM4Ijo3PT09WHx8OD09PVg/bSsiLVx1MDQzY1x1MDQzOCI6bSsiLVx1MDQ0Mlx1MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDc2NTcxOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBz'@;
put 'dHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiYm0iLHttb250aHM6Ilphbnd1eWVrYWxvX0Zld3VydXlla2Fsb19NYXJpc2lrYWxvX0F3aXJpbGlrYWxvX01cdTAyNWJrYWxvX1p1d1x1MDI1Ym5rYWxvX1p1bHV5ZWthbG9fVXRpa2Fsb19TXHUwMjVidGFuYnVydWthbG9fXHUwMjU0a3V0XHUwMjU0'@;
put 'YnVydWthbG9fTm93YW5idXJ1a2Fsb19EZXNhbmJ1cnVrYWxvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJaYW5fRmV3X01hcl9Bd2lfTVx1MDI1Yl9adXdfWnVsX1V0aV9TXHUwMjVidF9cdTAyNTRrdV9Ob3dfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJLYXJpX050XHUwMjViblx1MDI1'@;
put 'Ym5fVGFyYXRhX0FyYWJhX0FsYW1pc2FfSnVtYV9TaWJpcmkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiS2FyX050XHUwMjViX1Rhcl9BcmFfQWxhX0p1bV9TaWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkthX050X1RhX0FyX0FsX0p1X1NpIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9y'@;
put 'bWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJNTU1NIFt0aWxlXSBEIFtzYW5dIFlZWVkiLExMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIFtsXHUwMjViclx1MDI1Yl0gSEg6bW0iLExMTEw6ImRkZGQgTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZ'@;
put 'IFtsXHUwMjViclx1MDI1Yl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0JpIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dERheToiW1NpbmkgbFx1MDI1YnJcdTAyNWJdIExUIixuZXh0V2VlazoiZGRkZCBbZG9uIGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdERheToiW0t1bnUgbFx1MDI1'@;
put 'YnJcdTAyNWJdIExUIixsYXN0V2VlazoiZGRkZCBbdFx1MDI1Ym1cdTAyNWJuZW4gbFx1MDI1YnJcdTAyNWJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBrXHUwMjU0blx1MDI1NCIscGFzdDoiYSBiXHUwMjViICVzIGJcdTAyNTQiLHM6InNhbmdhIGRhbWEg'@;
put 'ZGFtYSIsc3M6InNla29uZGkgJWQiLG06Im1pbml0aSBrZWxlbiIsbW06Im1pbml0aSAlZCIsaDoibFx1MDI1YnJcdTAyNWIga2VsZW4iLGhoOiJsXHUwMjViclx1MDI1YiAlZCIsZDoidGlsZSBrZWxlbiIsZGQ6InRpbGUgJWQiLE06ImthbG8ga2VsZW4iLE1NOiJrYWxvICVkIix5OiJzYW4g'@;
put 'a2VsZW4iLHl5OiJzYW4gJWQifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw0MjcyOTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiXHUwOWU3IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIi'@;
put 'LDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sbT17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIiOiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4Iiwi'@;
put 'XHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtlZS5kZWZpbmVMb2NhbGUoImJuLWJkIix7bW9udGhzOiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUw'@;
put 'OWJmX1x1MDlhZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlm'@;
put 'X1x1MDliOFx1MDljN1x1MDlhYVx1MDljZFx1MDk5Zlx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JcdTA5YWNcdTA5YjBfXHUwOWE4XHUwOWFkXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDlhMVx1MDliZlx1MDli'@;
put 'OFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMV9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUw'@;
put 'OWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZfXHUwOTg1XHUwOTk1XHUwOWNk'@;
put 'XHUwOTlmXHUwOWNiX1x1MDlhOFx1MDlhZFx1MDljN19cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzciLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDliMFx1MDlhY1x1MDliZlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjhcdTA5Y2JcdTA5YWVcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFlXHUwOTk5'@;
put 'XHUwOWNkXHUwOTk3XHUwOWIyXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljMVx1MDlhN1x1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNk'@;
put 'XHUwOWIwXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZlx1MDlhY1x1MDliZVx1MDliMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNc'@;
put 'dTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5'@;
put 'Y2JcdTA5YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDpt'@;
put 'bSBcdTA5YjhcdTA5YWVcdTA5ZGYiLExUUzoiQSBoOm1tOnNzIFx1MDliOFx1MDlhZVx1MDlkZiIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1t'@;
put 'IFx1MDliOFx1MDlhZVx1MDlkZiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTg2XHUwOTljXSBMVCIsbmV4dERheToiW1x1MDk4Nlx1MDk5N1x1MDliZVx1MDlhZVx1MDljMFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDk5N1x1MDlh'@;
put 'NFx1MDk5NVx1MDliZVx1MDliMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTk3XHUwOWE0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOWFhXHUwOWIwXHUwOWM3IixwYXN0OiIlcyBcdTA5ODZcdTA5OTdcdTA5YzciLHM6Ilx1MDk5NVx1MDlkZlx1'@;
put 'MDljN1x1MDk5NSBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLHNzOiIlZCBcdTA5YjhcdTA5YzdcdTA5OTVcdTA5YzdcdTA5YThcdTA5Y2RcdTA5YTEiLG06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLG1tOiIlZCBcdTA5'@;
put 'YWVcdTA5YmZcdTA5YThcdTA5YmZcdTA5OWYiLGg6Ilx1MDk4Zlx1MDk5NSBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGhoOiIlZCBcdTA5OThcdTA5YThcdTA5Y2RcdTA5OWZcdTA5YmUiLGQ6Ilx1MDk4Zlx1MDk5NSBcdTA5YTZcdTA5YmZcdTA5YTgiLGRkOiIlZCBcdTA5YTZc'@;
put 'dTA5YmZcdTA5YTgiLE06Ilx1MDk4Zlx1MDk5NSBcdTA5YWVcdTA5YmVcdTA5YjgiLE1NOiIlZCBcdTA5YWVcdTA5YmVcdTA5YjgiLHk6Ilx1MDk4Zlx1MDk5NSBcdTA5YWNcdTA5OWJcdTA5YjAiLHl5OiIlZCBcdTA5YWNcdTA5OWJcdTA5YjAifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1'@;
put 'cm4gdy5yZXBsYWNlKC9bXHUwOWU3XHUwOWU4XHUwOWU5XHUwOWVhXHUwOWViXHUwOWVjXHUwOWVkXHUwOWVlXHUwOWVmXHUwOWU2XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBtW0FdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihBKXty'@;
put 'ZXR1cm4gYltBXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5YjBcdTA5YmVcdTA5YTR8XHUwOWFkXHUwOWNiXHUwOWIwfFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliOFx1MDlh'@;
put 'OFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZXxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LEEpe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09QT93PDQ/dzp3KzEyOiJcdTA5YWRcdTA5Y2JcdTA5YjAiPT09QXx8Ilx1'@;
put 'MDliOFx1MDk5NVx1MDliZVx1MDliMiI9PT1BP3c6Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1BP3c+PTM/dzp3KzEyOiJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09QXx8Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI9PT1B'@;
put 'P3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LEEsRCl7cmV0dXJuIHc8ND8iXHUwOWIwXHUwOWJlXHUwOWE0Ijp3PDY/Ilx1MDlhZFx1MDljYlx1MDliMCI6dzwxMj8iXHUwOWI4XHUwOTk1XHUwOWJlXHUwOWIyIjp3PDE1PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAi'@;
put 'Onc8MTg/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6dzwyMD8iXHUwOWI4XHUwOWE4XHUwOWNkXHUwOWE3XHUwOWNkXHUwOWFmXHUwOWJlIjoiXHUwOWIwXHUwOWJlXHUwOWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KFIoOTMxMzcpKX0sNTY3MzQ6ZnVuY3Rpb24oJGUsU2Us'@;
put 'Uil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MDllNyIsMjoiXHUwOWU4IiwzOiJcdTA5ZTkiLDQ6Ilx1MDllYSIsNToiXHUwOWViIiw2OiJcdTA5ZWMiLDc6Ilx1MDllZCIsODoiXHUwOWVlIiw5OiJcdTA5ZWYiLDA6Ilx1MDllNiJ9LG09eyJcdTA5ZTciOiIxIiwi'@;
put 'XHUwOWU4IjoiMiIsIlx1MDllOSI6IjMiLCJcdTA5ZWEiOiI0IiwiXHUwOWViIjoiNSIsIlx1MDllYyI6IjYiLCJcdTA5ZWQiOiI3IiwiXHUwOWVlIjoiOCIsIlx1MDllZiI6IjkiLCJcdTA5ZTYiOiIwIn07ZWUuZGVmaW5lTG9jYWxlKCJibiIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4'@;
put 'XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUwOWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlh'@;
put 'ZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUw'@;
put 'OWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1'@;
put 'MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDli'@;
put 'ZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'OiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNcdTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUw'@;
put 'OWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5'@;
put 'OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5'@;
put 'X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5YjhcdTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJE'@;
put 'IE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZc'@;
put 'dTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVs'@;
put 'YXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUw'@;
put 'OTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixo'@;
put 'aDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUwOWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5'@;
put 'OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDllYlx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0v'@;
put 'ZyxmdW5jdGlvbihBKXtyZXR1cm4gbVtBXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUwOWE0fFx1MDliOFx1MDk5NVx1MDliZVx1MDliMnxcdTA5'@;
put 'YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjB8XHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyfFx1MDliMFx1MDliZVx1MDlhNC8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsQSl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MDliMFx1MDliZVx1MDlhNCI9PT1BJiZ3Pj00fHwiXHUwOWE2'@;
put 'XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIj09PUEmJnc8NXx8Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI9PT1BP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxBLEQpe3JldHVybiB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzwxMD8iXHUwOWI4XHUwOTk1XHUwOWJlXHUw'@;
put 'OWIyIjp3PDE3PyJcdTA5YTZcdTA5YzFcdTA5YWFcdTA5YzFcdTA5YjAiOnc8MjA/Ilx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMiI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShSKDkzMTM3KSl9LDQwNDc3OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5j'@;
put 'dGlvbihlZSl7InVzZSBzdHJpY3QiO3ZhciBiPXsxOiJcdTBmMjEiLDI6Ilx1MGYyMiIsMzoiXHUwZjIzIiw0OiJcdTBmMjQiLDU6Ilx1MGYyNSIsNjoiXHUwZjI2Iiw3OiJcdTBmMjciLDg6Ilx1MGYyOCIsOToiXHUwZjI5IiwwOiJcdTBmMjAifSxtPXsiXHUwZjIxIjoiMSIsIlx1MGYyMiI6'@;
put 'IjIiLCJcdTBmMjMiOiIzIiwiXHUwZjI0IjoiNCIsIlx1MGYyNSI6IjUiLCJcdTBmMjYiOiI2IiwiXHUwZjI3IjoiNyIsIlx1MGYyOCI6IjgiLCJcdTBmMjkiOiI5IiwiXHUwZjIwIjoiMCJ9O2VlLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1'@;
put 'MGYwYlx1MGY1MVx1MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUw'@;
put 'ZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBmOTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUw'@;
put 'Zjc0XHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBmYjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUw'@;
put 'ZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBm'@;
put 'NzRcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBm'@;
put 'NWZcdTBmYjNcdTBmMGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUwZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUwZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUw'@;
put 'ZmIzXHUwZjBiOV9cdTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIxMV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJc'@;
put 'dTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1'@;
put 'MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBmYjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1'@;
put 'MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1'@;
put 'Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBm'@;
put 'NjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBiXHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUwZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNcdTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0'@;
put 'XHUwZjYyX1x1MGY2Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIs'@;
put 'TExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToiW1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2'@;
put 'XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUwZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBmNDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1'@;
put 'M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYz'@;
put 'IixzOiJcdTBmNjNcdTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZcdTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5'@;
put 'MFx1MGY2Mlx1MGYwYlx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJc'@;
put 'dTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1NiIseToiXHUwZjYzXHUwZjdj'@;
put 'XHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdjIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGYyMVx1MGYyMlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYyOFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlv'@;
put 'bihBKXtyZXR1cm4gbVtBXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KX0sbWVyaWRpZW1QYXJzZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1'@;
put 'MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0'@;
put 'aW9uKHcsQSl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI9PT1BJiZ3Pj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ij09PUEmJnc8NXx8Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYw'@;
put 'Ylx1MGY1MVx1MGY0MiI9PT1BP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxBLEQpe3JldHVybiB3PDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6dzwxMD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2Ijp3PDE3PyJcdTBmNDlc'@;
put 'dTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOnc8MjA/Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShSKDkzMTM3KSl9LDUwNzE0'@;
put 'OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoVixaLFcpe3JldHVybiBWKyIgIitmdW5jdGlvbiB3KFYsWil7cmV0dXJuIDI9PT1aP2Z1bmN0aW9uIEEoVil7dmFyIFo9e206InYiLGI6InYiLGQ6InoifTtyZXR1cm4gdm9pZCAwPT09WltW'@;
put 'LmNoYXJBdCgwKV0/VjpaW1YuY2hhckF0KDApXStWLnN1YnN0cmluZygxKX0oVik6Vn0oe21tOiJtdW51dGVubiIsTU06Im1peiIsZGQ6ImRldmV6aCJ9W1ddLFYpfWZ1bmN0aW9uIFgoVil7cmV0dXJuIFY+OT9YKFYlMTApOlZ9dmFyIEQ9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9e'@;
put 'bWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9pLC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sUD0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVy'@;
put 'ZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxlb3N8Z3dlfGhlcnxkdXxrZXIpL2ksQj1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTtlZS5kZWZpbmVMb2NhbGUoImJyIix7bW9udGhzOiJH'@;
put 'ZW52ZXJfQ1x1MDJiY2h3ZXZyZXJfTWV1cnpoX0VicmVsX01hZV9NZXpoZXZlbl9Hb3VlcmVfRW9zdF9Hd2VuZ29sb19IZXJlX0R1X0tlcnp1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJHZW5fQ1x1MDJiY2h3ZV9NZXVfRWJyX01hZV9FdmVfR291X0Vvc19Hd2VfSGVyX0R1X0tlciIuc3Bs'@;
put 'aXQoIl8iKSx3ZWVrZGF5czoiU3VsX0x1bl9NZXVyemhfTWVyY1x1MDJiY2hlcl9ZYW91X0d3ZW5lcl9TYWRvcm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0x1bl9NZXVfTWVyX1lhb19Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MdV9NZV9NZXJfWWFfR3df'@;
put 'U2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZTpCLGZ1bGxXZWVrZGF5c1BhcnNlOlsvXnN1bC9pLC9ebHVuL2ksL15tZXVyemgvaSwvXm1lcmNbXHUwMmJjXCddaGVyL2ksL155YW91L2ksL15nd2VuZXIvaSwvXnNhZG9ybi9pXSxzaG9ydFdlZWtkYXlzUGFyc2U6Wy9eU3VsL2ksL15MdW4v'@;
put 'aSwvXk1ldS9pLC9eTWVyL2ksL15ZYW8vaSwvXkd3ZS9pLC9eU2FkL2ldLG1pbldlZWtkYXlzUGFyc2U6Qixtb250aHNSZWdleDpQLG1vbnRoc1Nob3J0UmVnZXg6UCxtb250aHNTdHJpY3RSZWdleDovXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2'@;
put 'ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGdlbnxjW1x1MDJiY1wnXWh3ZXxtZXV8ZWJyfG1hZXxldmV8Z291fGVvc3xnd2V8aGVyfGR1fGtlcikvaSxtb250aHNQYXJzZTpELGxvbmdNb250aHNQYXJzZTpELHNob3J0'@;
put 'TW9udGhzUGFyc2U6RCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbYSB2aXpdIE1NTU0gWVlZWSIsTExMOiJEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFthIHZpel0gTU1NTSBZWVlZIEhIOm1t'@;
put 'In0sY2FsZW5kYXI6e3NhbWVEYXk6IltIaXppdiBkYV0gTFQiLG5leHREYXk6IltXYXJjXHUwMmJjaG9hemggZGFdIExUIixuZXh0V2VlazoiZGRkZCBbZGFdIExUIixsYXN0RGF5OiJbRGVjXHUwMmJjaCBkYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNldCBkYV0gTFQiLHNhbWVFbHNlOiJM'@;
put 'In0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImEtYmVubiAlcyIscGFzdDoiJXMgXHUwMmJjem8iLHM6InVuIG5lYmV1ZCBzZWdvbmRlbm5vXHhmOSIsc3M6IiVkIGVpbGVubiIsbToidXIgdnVudXRlbm4iLG1tOmIsaDoidW4gZXVyIixoaDoiJWQgZXVyIixkOiJ1biBkZXZlemgiLGRkOmIsTToi'@;
put 'dXIgbWl6IixNTTpiLHk6InVyIGJsb2F6Iix5eTpmdW5jdGlvbiBtKFYpe3N3aXRjaChYKFYpKXtjYXNlIDE6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6Y2FzZSA5OnJldHVybiBWKyIgYmxvYXoiO2RlZmF1bHQ6cmV0dXJuIFYrIiB2bG9heiJ9fX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7'@;
put 'MSwyfShhXHhmMXx2ZXQpLyxvcmRpbmFsOmZ1bmN0aW9uKFYpe3JldHVybiBWKygxPT09Vj8iYVx4ZjEiOiJ2ZXQiKX0sd2Vlazp7ZG93OjEsZG95OjR9LG1lcmlkaWVtUGFyc2U6L2EubS58Zy5tLi8saXNQTTpmdW5jdGlvbihWKXtyZXR1cm4iZy5tLiI9PT1WfSxtZXJpZGllbTpmdW5jdGlv'@;
put 'bihWLFosVyl7cmV0dXJuIFY8MTI/ImEubS4iOiJnLm0uIn19KX0oUig5MzEzNykpfSw2MzI0MTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKFgsdyxBKXt2YXIgRD1YKyIgIjtzd2l0Y2goQSl7Y2FzZSJzcyI6cmV0dXJuIEQrKDE9PT1Y'@;
put 'PyJzZWt1bmRhIjoyPT09WHx8Mz09PVh8fDQ9PT1YPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIHc/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIEQrKDE9PT1YPyJtaW51dGEiOjI9PT1YfHwzPT09WHx8ND09PVg/Im1pbnV0ZSI6Im1p'@;
put 'bnV0YSIpO2Nhc2UiaCI6cmV0dXJuIHc/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gRCsoMT09PVg/InNhdCI6Mj09PVh8fDM9PT1YfHw0PT09WD8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gRCsoMT09PVg/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpy'@;
put 'ZXR1cm4gRCsoMT09PVg/Im1qZXNlYyI6Mj09PVh8fDM9PT1YfHw0PT09WD8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gRCsoMT09PVg/ImdvZGluYSI6Mj09PVh8fDM9PT1YfHw0PT09WD8iZ29kaW5lIjoiZ29kaW5hIil9fWVlLmRlZmluZUxvY2FsZSgiYnMiLHttb250'@;
put 'aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmFyX29rdG9iYXJfbm92ZW1iYXJfZGVjZW1iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXVnLl9zZXAuX29rdC5fbm92'@;
put 'Ll9kZWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBk'@;
put 'ZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1N'@;
put 'IFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6'@;
put 'cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJb'@;
put 'anVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpyZXR1cm4iW3Byb1x1MDE2MWx1XSBkZGRkIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpj'@;
put 'YXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOmIsbTpiLG1tOmIsaDpiLGhoOmIsZDoiZGFuIixkZDpiLE06Im1q'@;
put 'ZXNlYyIsTU06Yix5OiJnb2RpbnUiLHl5OmJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oUig5MzEzNykpfSw5NTU1ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5k'@;
put 'ZWZpbmVMb2NhbGUoImNhIix7bW9udGhzOntzdGFuZGFsb25lOiJnZW5lcl9mZWJyZXJfbWFyXHhlN19hYnJpbF9tYWlnX2p1bnlfanVsaW9sX2Fnb3N0X3NldGVtYnJlX29jdHVicmVfbm92ZW1icmVfZGVzZW1icmUiLnNwbGl0KCJfIiksZm9ybWF0OiJkZSBnZW5lcl9kZSBmZWJyZXJfZGUg'@;
put 'bWFyXHhlN19kJ2FicmlsX2RlIG1haWdfZGUganVueV9kZSBqdWxpb2xfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdHVicmVfZGUgbm92ZW1icmVfZGUgZGVzZW1icmUiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4'@;
put 'ZTdfYWJyLl9tYWlnX2p1bnlfanVsLl9hZy5fc2V0Ll9vY3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaXVtZW5nZV9kaWxsdW5zX2RpbWFydHNfZGltZWNyZXNfZGlqb3VzX2RpdmVuZHJlc19kaXNzYWJ0ZSIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5c1Nob3J0OiJkZy5fZGwuX2R0Ll9kYy5fZGouX2R2Ll9kcy4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRnX2RsX2R0X2RjX2RqX2R2X2RzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQv'@;
put 'TU0vWVlZWSIsTEw6IkQgTU1NTSBbZGVdIFlZWVkiLGxsOiJEIE1NTSBZWVlZIixMTEw6IkQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGw6IkQgTU1NIFlZWVksIEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYSBsZXNdIEg6bW0iLGxsbGw6ImRkZCBEIE1NTSBZ'@;
put 'WVlZLCBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F2dWkgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbZGVtXHhlMCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikr'@;
put 'Il0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlthaGlyIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LGxhc3RXZWVr'@;
put 'OmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzc2F0IGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVucyBzZWdvbnMiLHNzOiIlZCBz'@;
put 'ZWdvbnMiLG06InVuIG1pbnV0IixtbToiJWQgbWludXRzIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmVzIixkOiJ1biBkaWEiLGRkOiIlZCBkaWVzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNvcyIseToidW4gYW55Iix5eToiJWQgYW55cyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEs'@;
put 'Mn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5jdGlvbihtLFgpe3ZhciB3PTE9PT1tPyJyIjoyPT09bT8ibiI6Mz09PW0/InIiOjQ9PT1tPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PVh8fCJXIj09PVgpJiYodz0iYSIpLG0rd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0s'@;
put 'NjU4MDQ6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9e2Zvcm1hdDoibGVkZW5fXHhmYW5vcl9iXHUwMTU5ZXplbl9kdWJlbl9rdlx1MDExYnRlbl9cdTAxMGRlcnZlbl9cdTAxMGRlcnZlbmVjX3NycGVuX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlc'@;
put 'eGVkamVuX2xpc3RvcGFkX3Byb3NpbmVjIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6ImxlZG5hX1x4ZmFub3JhX2JcdTAxNTllem5hX2R1Ym5hX2t2XHUwMTFidG5hX1x1MDEwZGVydm5hX1x1MDEwZGVydmVuY2Vfc3JwbmFfelx4ZTFcdTAxNTlceGVkX1x1MDE1OVx4ZWRqbmFfbGlzdG9wYWR1'@;
put 'X3Byb3NpbmNlIi5zcGxpdCgiXyIpfSxtPSJsZWRfXHhmYW5vX2JcdTAxNTllX2R1Yl9rdlx1MDExYl9cdTAxMGR2bl9cdTAxMGR2Y19zcnBfelx4ZTFcdTAxNTlfXHUwMTU5XHhlZGpfbGlzX3BybyIuc3BsaXQoIl8iKSxYPVsvXmxlZC9pLC9eXHhmYW5vL2ksL15iXHUwMTU5ZS9pLC9eZHVi'@;
put 'L2ksL15rdlx1MDExYi9pLC9eKFx1MDEwZHZufFx1MDEwZGVydmVuJHxcdTAxMGRlcnZuYSkvaSwvXihcdTAxMGR2Y3xcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2UpL2ksL15zcnAvaSwvXnpceGUxXHUwMTU5L2ksL15cdTAxNTlceGVkai9pLC9ebGlzL2ksL15wcm8vaV0sdz0vXihsZWRl'@;
put 'bnxceGZhbm9yfGJcdTAxNTllemVufGR1YmVufGt2XHUwMTFidGVufFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxsaXN0b3BhZHxwcm9zaW5lY3xsZWR8XHhmYW5vfGJcdTAxNTll'@;
put 'fGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaTtmdW5jdGlvbiBBKFUpe3JldHVybiBVPjEmJlU8NSYmMSE9fn4oVS8xMCl9ZnVuY3Rpb24gRChVLEksRSxrKXt2YXIgQj1VKyIgIjtzd2l0Y2goRSl7Y2FzZSJzIjpy'@;
put 'ZXR1cm4gSXx8az8icFx4ZTFyIHNla3VuZCI6InBceGUxciBzZWt1bmRhbWkiO2Nhc2Uic3MiOnJldHVybiBJfHxrP0IrKEEoVSk/InNla3VuZHkiOiJzZWt1bmQiKTpCKyJzZWt1bmRhbWkiO2Nhc2UibSI6cmV0dXJuIEk/Im1pbnV0YSI6az8ibWludXR1IjoibWludXRvdSI7Y2FzZSJtbSI6'@;
put 'cmV0dXJuIEl8fGs/QisoQShVKT8ibWludXR5IjoibWludXQiKTpCKyJtaW51dGFtaSI7Y2FzZSJoIjpyZXR1cm4gST8iaG9kaW5hIjprPyJob2RpbnUiOiJob2Rpbm91IjtjYXNlImhoIjpyZXR1cm4gSXx8az9CKyhBKFUpPyJob2RpbnkiOiJob2RpbiIpOkIrImhvZGluYW1pIjtjYXNlImQi'@;
put 'OnJldHVybiBJfHxrPyJkZW4iOiJkbmVtIjtjYXNlImRkIjpyZXR1cm4gSXx8az9CKyhBKFUpPyJkbnkiOiJkblx4ZWQiKTpCKyJkbnkiO2Nhc2UiTSI6cmV0dXJuIEl8fGs/Im1cdTAxMWJzXHhlZGMiOiJtXHUwMTFic1x4ZWRjZW0iO2Nhc2UiTU0iOnJldHVybiBJfHxrP0IrKEEoVSk/Im1c'@;
put 'dTAxMWJzXHhlZGNlIjoibVx1MDExYnNceGVkY1x1MDE2ZiIpOkIrIm1cdTAxMWJzXHhlZGNpIjtjYXNlInkiOnJldHVybiBJfHxrPyJyb2siOiJyb2tlbSI7Y2FzZSJ5eSI6cmV0dXJuIEl8fGs/QisoQShVKT8icm9reSI6ImxldCIpOkIrImxldHkifX1lZS5kZWZpbmVMb2NhbGUoImNzIix7'@;
put 'bW9udGhzOmIsbW9udGhzU2hvcnQ6bSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihsZWRlbnxsZWRuYXxceGZhbm9yYXxceGZhbm9yfGJcdTAxNTllemVufGJcdTAxNTllem5hfGR1YmVufGR1Ym5hfGt2XHUwMTFidGVufGt2XHUwMTFidG5h'@;
put 'fFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZXxcdTAxMGRlcnZlbnxcdTAxMGRlcnZuYXxzcnBlbnxzcnBuYXx6XHhlMVx1MDE1OVx4ZWR8XHUwMTU5XHhlZGplbnxcdTAxNTlceGVkam5hfGxpc3RvcGFkdXxsaXN0b3BhZHxwcm9zaW5lY3xwcm9zaW5jZSkvaSxtb250aHNTaG9ydFN0cmlj'@;
put 'dFJlZ2V4Oi9eKGxlZHxceGZhbm98Ylx1MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pLG1vbnRoc1BhcnNlOlgsbG9uZ01vbnRoc1BhcnNlOlgsc2hvcnRNb250aHNQYXJzZTpYLHdlZWtkYXlzOiJuZWRc'@;
put 'dTAxMWJsZV9wb25kXHUwMTFibFx4ZWRfXHhmYXRlclx4ZmRfc3RcdTAxNTllZGFfXHUwMTBkdHZydGVrX3BceGUxdGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9w'@;
put 'b19ceGZhdF9zdF9cdTAxMGR0X3BceGUxX3NvIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1t'@;
put 'IixsOiJELiBNLiBZWVlZIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIHZdIExUIixuZXh0RGF5OiJbelx4ZWR0cmEgdl0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3YgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6'@;
put 'cmV0dXJuIlt2XSBkZGRkIFt2XSBMVCI7Y2FzZSAzOnJldHVybiJbdmUgc3RcdTAxNTllZHUgdl0gTFQiO2Nhc2UgNDpyZXR1cm4iW3ZlIFx1MDEwZHR2cnRlayB2XSBMVCI7Y2FzZSA1OnJldHVybiJbdiBwXHhlMXRlayB2XSBMVCI7Y2FzZSA2OnJldHVybiJbdiBzb2JvdHUgdl0gTFQifX0s'@;
put 'bGFzdERheToiW3ZcdTAxMGRlcmEgdl0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW21pbnVsb3UgbmVkXHUwMTFibGkgdl0gTFQiO2Nhc2UgMTpjYXNlIDI6cmV0dXJuIlttaW51bFx4ZTldIGRkZGQgW3ZdIExUIjtjYXNlIDM6cmV0'@;
put 'dXJuIlttaW51bG91IHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6Y2FzZSA1OnJldHVybiJbbWludWxceGZkXSBkZGRkIFt2XSBMVCI7Y2FzZSA2OnJldHVybiJbbWludWxvdSBzb2JvdHUgdl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6'@;
put 'InBcdTAxNTllZCAlcyIsczpELHNzOkQsbTpELG1tOkQsaDpELGhoOkQsZDpELGRkOkQsTTpELE1NOkQseTpELHl5OkR9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw3MDc3NTpmdW5jdGlv'@;
put 'bigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImN2Iix7bW9udGhzOiJcdTA0M2FcdTA0ZDFcdTA0NDBcdTA0M2JcdTA0MzBcdTA0NDdfXHUwNDNkXHUwNDMwXHUwNDQwXHUwNGQxXHUwNDQxX1x1MDQzZlx1MDQ0M1x1MDQ0OF9cdTA0MzBcdTA0'@;
put 'M2FcdTA0MzBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDRhYlx1MDRkN1x1MDQ0MFx1MDQ0Mlx1MDQzY1x1MDQzNV9cdTA0NDNcdTA0NDJcdTA0ZDFfXHUwNGFiXHUwNDQzXHUwNDQwXHUwNDNiXHUwNDMwX1x1MDQzMFx1MDQzMlx1MDRkMVx1MDQzZF9cdTA0NGVcdTA0M2ZcdTA0MzBfXHUwNDQ3'@;
put 'XHUwNGYzXHUwNDNhX1x1MDQ0MFx1MDQzMFx1MDQ0OFx1MDQ0Mlx1MDQzMFx1MDQzMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDNhXHUwNGQxXHUwNDQwX1x1MDQzZFx1MDQzMFx1MDQ0MF9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUwNDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1'@;
put 'MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MF9cdTA0MzBcdTA0MzJcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQz'@;
put 'Mlx1MDQ0Ylx1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDJcdTA0NDNcdTA0M2RcdTA0NDJcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRiXHUwNDQyXHUwNDNiXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNk'@;
put 'X1x1MDQ0ZVx1MDQzZFx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0M2FcdTA0ZDdcdTA0YWJcdTA0M2RcdTA0MzVcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDRkXHUwNDQwXHUwNDNkXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0OFx1MDRkMVx1MDQzY1x1MDQz'@;
put 'MFx1MDQ0Mlx1MDQzYVx1MDQ0M1x1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzJcdTA0NGJcdTA0NDBfXHUwNDQyXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYl9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiX1x1MDQ0ZFx1MDQ0MFx1MDQzZF9cdTA0'@;
put 'NDhcdTA0ZDFcdTA0M2MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzMlx1MDQ0MF9cdTA0NDJcdTA0M2RfXHUwNDRiXHUwNDQyX1x1MDQ0ZVx1MDQzZF9cdTA0M2FcdTA0YWJfXHUwNDRkXHUwNDQwX1x1MDQ0OFx1MDQzYyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI'@;
put 'Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC1NTS1ZWVlZIixMTDoiWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10iLExMTDoiWVlZWSBbXHUw'@;
put 'NGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1NIFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFtcdTA0YWJcdTA0NDNcdTA0M2JcdTA0NDVcdTA0MzhdIE1NTU0g'@;
put 'W1x1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NVx1MDRkN1x1MDQzZF0gRFstXHUwNDNjXHUwNGQ3XHUwNDQ4XHUwNGQ3XSwgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxZlx1MDQzMFx1MDQ0Zlx1MDQzZF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1'@;
put 'MDQzNV0iLG5leHREYXk6IltcdTA0MmJcdTA0NDBcdTA0MzBcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0RGF5OiJbXHUwNGQ2XHUwNDNkXHUwNDM1XHUwNDQwXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUw'@;
put 'NDQwXHUwNDM1XSIsbmV4dFdlZWs6IltcdTA0YWFcdTA0MzhcdTA0NDJcdTA0MzVcdTA0NDFdIGRkZGQgTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1MDQ0MFx1MDQzNV0iLGxhc3RXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDQyXHUwNDNkXHUwNGQ3XSBkZGRkIExUIFtcdTA0'@;
put 'NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uKG0pe3JldHVybiBtKygvXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyJC9pLmV4ZWMobSk/Ilx1MDQ0MFx1MDQzNVx1MDQzZCI6L1x1'@;
put 'MDRhYlx1MDQ0M1x1MDQzYiQvaS5leGVjKG0pPyJcdTA0NDJcdTA0MzBcdTA0M2QiOiJcdTA0NDBcdTA0MzBcdTA0M2QiKX0scGFzdDoiJXMgXHUwNDNhXHUwNDMwXHUwNDRmXHUwNDNiXHUwNDNiXHUwNDMwIixzOiJcdTA0M2ZcdTA0ZDdcdTA0NDAtXHUwNDM4XHUwNDNhIFx1MDRhYlx1MDQz'@;
put 'NVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsc3M6IiVkIFx1MDRhYlx1MDQzNVx1MDQzYVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQ0MiIsbToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsbW06IiVkIFx1MDQzY1x1MDQzOFx1MDQzZFx1'@;
put 'MDQ0M1x1MDQ0MiIsaDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiIsZDoiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0'@;
put 'M1x1MDQzZCIsTToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIsTU06IiVkIFx1MDQ0M1x1MDQzOVx1MDRkMVx1MDQ0NSIseToiXHUwNDNmXHUwNGQ3XHUwNDQwIFx1MDRhYlx1MDQ0M1x1MDQzYiIseXk6IiVkIFx1MDRhYlx1MDQ0M1x1MDQzYiJ9LGRheU9m'@;
put 'TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tXHUwNDNjXHUwNGQ3XHUwNDQ4LyxvcmRpbmFsOiIlZC1cdTA0M2NcdTA0ZDdcdTA0NDgiLHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDU0MzM0OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2Vl'@;
put 'LmRlZmluZUxvY2FsZSgiY3kiLHttb250aHM6IklvbmF3cl9DaHdlZnJvcl9NYXdydGhfRWJyaWxsX01haV9NZWhlZmluX0dvcmZmZW5uYWZfQXdzdF9NZWRpX0h5ZHJlZl9UYWNod2VkZF9SaGFnZnlyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJJb25fQ2h3ZV9NYXdfRWJyX01haV9NZWhf'@;
put 'R29yX0F3c19NZWRfSHlkX1RhY2hfUmhhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiRHlkZCBTdWxfRHlkZCBMbHVuX0R5ZGQgTWF3cnRoX0R5ZGQgTWVyY2hlcl9EeWRkIElhdV9EeWRkIEd3ZW5lcl9EeWRkIFNhZHdybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTGx1bl9NYXdf'@;
put 'TWVyX0lhdV9Hd2VfU2FkIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9MbF9NYV9NZV9JYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZ'@;
put 'WVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGVkZGl3IGFtXSBMVCIsbmV4dERheToiW1lmb3J5IGFtXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2FtXSBMVCIsbGFzdERheToiW0Rkb2UgYW1dIExU'@;
put 'IixsYXN0V2VlazoiZGRkZCBbZGl3ZXRoYWYgYW1dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJtZXduICVzIixwYXN0OiIlcyB5biBceGY0bCIsczoieWNoeWRpZyBlaWxpYWRhdSIsc3M6IiVkIGVpbGlhZCIsbToibXVudWQiLG1tOiIlZCBtdW51ZCIsaDoiYXdy'@;
put 'IixoaDoiJWQgYXdyIixkOiJkaXdybm9kIixkZDoiJWQgZGl3cm5vZCIsTToibWlzIixNTToiJWQgbWlzIix5OiJibHd5ZGR5biIseXk6IiVkIGZseW5lZGQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGZlZHxhaW58YWZ8aWx8eWRkfGVkfGVnKS8sb3JkaW5hbDpmdW5jdGlv'@;
put 'bihtKXt2YXIgdz0iIjtyZXR1cm4gbT4yMD93PTQwPT09bXx8NTA9PT1tfHw2MD09PW18fDgwPT09bXx8MTAwPT09bT8iZmVkIjoiYWluIjptPjAmJih3PVsiIiwiYWYiLCJpbCIsInlkZCIsInlkZCIsImVkIiwiZWQiLCJlZCIsImZlZCIsImZlZCIsImZlZCIsImVnIiwiZmVkIiwiZWciLCJl'@;
put 'ZyIsImZlZCIsImVnIiwiZWciLCJmZWQiLCJlZyIsImZlZCJdW21dKSxtK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDY4NTgxOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiZGEiLHttb250aHM6ImphbnVh'@;
put 'cl9mZWJydWFyX21hcnRzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3'@;
put 'ZWVrZGF5czoic1x4ZjhuZGFnX21hbmRhZ190aXJzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sXHhmOHJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic1x4ZjhuX21hbl90aXJfb25zX3Rvcl9mcmVfbFx4ZjhyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzXHhmOF9tYV90aV9v'@;
put 'bl90b19mcl9sXHhmOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBbZC5dIEQuIE1NTU0gWVlZWSBba2wuXSBISDpt'@;
put 'bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0gTFQiLG5leHRXZWVrOiJwXHhlNSBkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6IltpXSBkZGRkW3Mga2wuXSBMVCIsc2FtZUVsc2U6'@;
put 'IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGVuIixzOiJmXHhlNSBzZWt1bmRlciIsc3M6IiVkIHNla3VuZGVyIixtOiJldCBtaW51dCIsbW06IiVkIG1pbnV0dGVyIixoOiJlbiB0aW1lIixoaDoiJWQgdGltZXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2Ui'@;
put 'LE06ImVuIG1ceGU1bmVkIixNTToiJWQgbVx4ZTVuZWRlciIseToiZXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSwzMjQzNTpmdW5jdGlvbigkZSxT'@;
put 'ZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKFgsdyxBLEQpe3ZhciBQPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltYKyIgVGFnZSIs'@;
put 'WCsiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltYKyIgTW9uYXRlIixYKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbWCsiIEphaHJlIixYKyIgSmFocmVuIl19O3JldHVy'@;
put 'biB3P1BbQV1bMF06UFtBXVsxXX1lZS5kZWZpbmVMb2NhbGUoImRlLWF0Iix7bW9udGhzOiJKXHhlNG5uZXJfRmVicnVhcl9NXHhlNHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0'@;
put 'OiJKXHhlNG4uX0ZlYi5fTVx4ZTRyel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IlNvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1z'@;
put 'dGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0i'@;
put 'LExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2hldXRlIHVtXSBMVCBbVWhyXSIsc2FtZUVsc2U6IkwiLG5leHRE'@;
put 'YXk6Ilttb3JnZW4gdW1dIExUIFtVaHJdIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIFtVaHJdIixsYXN0RGF5OiJbZ2VzdGVybiB1bV0gTFQgW1Vocl0iLGxhc3RXZWVrOiJbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiJ2'@;
put 'b3IgJXMiLHM6ImVpbiBwYWFyIFNla3VuZGVuIixzczoiJWQgU2VrdW5kZW4iLG06YixtbToiJWQgTWludXRlbiIsaDpiLGhoOiIlZCBTdHVuZGVuIixkOmIsZGQ6Yix3OmIsd3c6IiVkIFdvY2hlbiIsTTpiLE1NOmIseTpiLHl5OmJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1c'@;
put 'Li8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw1ODc3OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoWCx3LEEsRCl7dmFyIFA9e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJl'@;
put 'aW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W1grIiBUYWdlIixYKyIgVGFnZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W1grIiBNb25hdGUiLFgrIiBNb25h'@;
put 'dGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltYKyIgSmFocmUiLFgrIiBKYWhyZW4iXX07cmV0dXJuIHc/UFtBXVswXTpQW0FdWzFdfWVlLmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9B'@;
put 'dWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVr'@;
put 'ZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxp'@;
put 'dCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2Fs'@;
put 'ZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRk'@;
put 'ZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOmIsbW06IiVkIE1pbnV0ZW4iLGg6YixoaDoiJWQgU3R1bmRlbiIsZDpiLGRkOmIsdzpiLHd3OiIlZCBXb2No'@;
put 'ZW4iLE06YixNTTpiLHk6Yix5eTpifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMjkzMjE6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24g'@;
put 'YihYLHcsQSxEKXt2YXIgUD17bTpbImVpbmUgTWludXRlIiwiZWluZXIgTWludXRlIl0saDpbImVpbmUgU3R1bmRlIiwiZWluZXIgU3R1bmRlIl0sZDpbImVpbiBUYWciLCJlaW5lbSBUYWciXSxkZDpbWCsiIFRhZ2UiLFgrIiBUYWdlbiJdLHc6WyJlaW5lIFdvY2hlIiwiZWluZXIgV29jaGUi'@;
put 'XSxNOlsiZWluIE1vbmF0IiwiZWluZW0gTW9uYXQiXSxNTTpbWCsiIE1vbmF0ZSIsWCsiIE1vbmF0ZW4iXSx5OlsiZWluIEphaHIiLCJlaW5lbSBKYWhyIl0seXk6W1grIiBKYWhyZSIsWCsiIEphaHJlbiJdfTtyZXR1cm4gdz9QW0FdWzBdOlBbQV1bMV19ZWUuZGVmaW5lTG9jYWxlKCJkZSIs'@;
put 'e21vbnRoczoiSmFudWFyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2Vw'@;
put 'Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8u'@;
put 'X0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixM'@;
put 'TEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBb'@;
put 'VWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOmIs'@;
put 'bW06IiVkIE1pbnV0ZW4iLGg6YixoaDoiJWQgU3R1bmRlbiIsZDpiLGRkOmIsdzpiLHd3OiIlZCBXb2NoZW4iLE06YixNTTpiLHk6Yix5eTpifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0s'@;
put 'MjMzNjA6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9WyJcdTA3OTZcdTA3YWNcdTA3ODJcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNcdTA3YTkiLCJcdTA3OGFcdTA3YWNcdTA3ODRcdTA3YjBcdTA3ODNcdTA3YWFcdTA3ODdcdTA3YTZcdTA3ODNc'@;
put 'dTA3YTkiLCJcdTA3ODlcdTA3YTdcdTA3ODNcdTA3YThcdTA3OTdcdTA3YWEiLCJcdTA3ODdcdTA3YWRcdTA3OTVcdTA3YjBcdTA3ODNcdTA3YTlcdTA3OGRcdTA3YWEiLCJcdTA3ODlcdTA3YWQiLCJcdTA3OTZcdTA3YWJcdTA3ODJcdTA3YjAiLCJcdTA3OTZcdTA3YWFcdTA3OGRcdTA3YTZc'@;
put 'dTA3ODdcdTA3YTgiLCJcdTA3ODdcdTA3YWZcdTA3OGVcdTA3YTZcdTA3OTBcdTA3YjBcdTA3OTNcdTA3YWEiLCJcdTA3OTBcdTA3YWNcdTA3OTVcdTA3YjBcdTA3OTNcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODdcdTA3YWVcdTA3ODZcdTA3YjBc'@;
put 'dTA3OTNcdTA3YWZcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3ODJcdTA3YWVcdTA3ODhcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiLCJcdTA3OTFcdTA3YThcdTA3OTBcdTA3YWNcdTA3ODlcdTA3YjBcdTA3ODRcdTA3YTZcdTA3ODNcdTA3YWEiXSxt'@;
put 'PVsiXHUwNzg3XHUwN2E3XHUwNzhiXHUwN2E4XHUwNzg3XHUwN2IwXHUwNzhjXHUwN2E2IiwiXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2IiwiXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwXHUwNzhlXHUwN2E3XHUwNzgzXHUwN2E2IiwiXHUwNzg0XHUwN2FhXHUwNzhiXHUwN2E2IiwiXHUwNzg0'@;
put 'XHUwN2FhXHUwNzgzXHUwN2E3XHUwNzkwXHUwN2IwXHUwNzhhXHUwN2E2XHUwNzhjXHUwN2E4IiwiXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2FhIiwiXHUwNzgwXHUwN2FlXHUwNzgyXHUwN2E4XHUwNzgwXHUwN2E4XHUwNzgzXHUwN2FhIl07ZWUuZGVmaW5lTG9jYWxlKCJk'@;
put 'diIse21vbnRoczpiLG1vbnRoc1Nob3J0OmIsd2Vla2RheXM6bSx3ZWVrZGF5c1Nob3J0Om0sd2Vla2RheXNNaW46Ilx1MDc4N1x1MDdhN1x1MDc4Ylx1MDdhOF9cdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTZfXHUwNzg3XHUwN2E2XHUwNzgyXHUwN2IwX1x1MDc4NFx1MDdhYVx1MDc4Ylx1MDdh'@;
put 'Nl9cdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdfXHUwNzgwXHUwN2FhXHUwNzg2XHUwN2FhX1x1MDc4MFx1MDdhZVx1MDc4Mlx1MDdhOCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJEL00vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6'@;
put 'IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNzg5XHUwNzg2fFx1MDc4OVx1MDc4YS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNzg5XHUwNzhhIj09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsQSxEKXtyZXR1'@;
put 'cm4gdzwxMj8iXHUwNzg5XHUwNzg2IjoiXHUwNzg5XHUwNzhhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA3ODlcdTA3YThcdTA3ODdcdTA3YTZcdTA3OGJcdTA3YWFdIExUIixuZXh0RGF5OiJbXHUwNzg5XHUwN2E3XHUwNzhiXHUwN2E2XHUwNzg5XHUwN2E3XSBMVCIsbmV4dFdlZWs6ImRk'@;
put 'ZGQgTFQiLGxhc3REYXk6IltcdTA3ODdcdTA3YThcdTA3ODdcdTA3YjBcdTA3OTRcdTA3YWNdIExUIixsYXN0V2VlazoiW1x1MDc4YVx1MDdhN1x1MDc4N1x1MDdhOFx1MDc4Y1x1MDdhYVx1MDc4OFx1MDdhOF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToi'@;
put 'XHUwNzhjXHUwN2FjXHUwNzgzXHUwN2FkXHUwNzhlXHUwN2E2XHUwNzg3XHUwN2E4ICVzIixwYXN0OiJcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YThcdTA3ODJcdTA3YjAgJXMiLHM6Ilx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYVx1MDc4Nlx1MDdhZVx1'@;
put 'MDc4NVx1MDdhY1x1MDc4N1x1MDdiMCIsc3M6ImQlIFx1MDc5MFx1MDdhOFx1MDc4Nlx1MDdhYVx1MDc4Mlx1MDdiMFx1MDc4Y1x1MDdhYSIsbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUwNzkzXHUwN2FjXHUwNzg3XHUwN2IwIixtbToiXHUwNzg5XHUwN2E4XHUwNzgyXHUwN2E4XHUw'@;
put 'NzkzXHUwN2FhICVkIixoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLGhoOiJcdTA3OGVcdTA3YTZcdTA3OTFcdTA3YThcdTA3ODdcdTA3YThcdTA3ODNcdTA3YWEgJWQiLGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1'@;
put 'MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsZGQ6Ilx1MDc4Ylx1MDdhYVx1MDc4OFx1MDdhNlx1MDc5MFx1MDdiMCAlZCIsTToiXHUwNzg5XHUwN2E2XHUwNzgwXHUwN2FjXHUwNzg3XHUwN2IwIixNTToiXHUwNzg5XHUwN2E2XHUwNzkwXHUwN2IwICVkIix5OiJcdTA3ODdcdTA3YTZcdTA3ODBc'@;
put 'dTA3YTZcdTA3ODNcdTA3YWNcdTA3ODdcdTA3YjAiLHl5OiJcdTA3ODdcdTA3YTZcdTA3ODBcdTA3YTZcdTA3ODNcdTA3YWEgJWQifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJl'@;
put 'cGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo3LGRveToxMn19KX0oUig5MzEzNykpfSw2ODU3NTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImVsIix7bW9udGhzTm9taW5hdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAz'@;
put 'YmRcdTAzYmZcdTAzYzVcdTAzYWNcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNjMVx1MDNjNFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTFcdTAz'@;
put 'YzBcdTAzYzFcdTAzYWZcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzljXHUwM2FjXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5OVx1MDNiZlx1MDNjZFx1MDNiZFx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmJcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUw'@;
put 'M2NkXHUwM2IzXHUwM2JmXHUwM2M1XHUwM2MzXHUwM2M0XHUwM2JmXHUwM2MyX1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzY2VcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAz'@;
put 'YzJfXHUwMzlkXHUwM2JmXHUwM2FkXHUwM2JjXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNhZFx1MDNiY1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMiIuc3BsaXQoIl8iKSxtb250aHNHZW5pdGl2ZUVsOiJcdTAzOTlcdTAzYjFcdTAz'@;
put 'YmRcdTAzYmZcdTAzYzVcdTAzYjFcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwM2E2XHUwM2I1XHUwM2IyXHUwM2MxXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDNjMVx1MDNjNFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTFcdTAz'@;
put 'YzBcdTAzYzFcdTAzYjlcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzljXHUwM2IxXHUwMzkwXHUwM2JmXHUwM2M1X1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiZFx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmJcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUw'@;
put 'M2M1XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2MzXHUwM2M0XHUwM2JmXHUwM2M1X1x1MDNhM1x1MDNiNVx1MDNjMFx1MDNjNFx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWZcdTAzYmFcdTAzYzRcdTAzYzlcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAz'@;
put 'YzVfXHUwMzlkXHUwM2JmXHUwM2I1XHUwM2JjXHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5NFx1MDNiNVx1MDNiYVx1MDNiNVx1MDNiY1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNSIuc3BsaXQoIl8iKSxtb250aHM6ZnVuY3Rpb24oWCx3KXtyZXR1cm4gWD8ic3Ry'@;
put 'aW5nIj09dHlwZW9mIHcmJi9ELy50ZXN0KHcuc3Vic3RyaW5nKDAsdy5pbmRleE9mKCJNTU1NIikpKT90aGlzLl9tb250aHNHZW5pdGl2ZUVsW1gubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsW1gubW9udGgoKV06dGhpcy5fbW9udGhzTm9taW5hdGl2ZUVsfSxtb250aHNTaG9y'@;
put 'dDoiXHUwMzk5XHUwM2IxXHUwM2JkX1x1MDNhNlx1MDNiNVx1MDNiMl9cdTAzOWNcdTAzYjFcdTAzYzFfXHUwMzkxXHUwM2MwXHUwM2MxX1x1MDM5Y1x1MDNiMVx1MDNjYV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiX1x1MDM5MVx1MDNjNVx1MDNi'@;
put 'M19cdTAzYTNcdTAzYjVcdTAzYzBfXHUwMzlmXHUwM2JhXHUwM2M0X1x1MDM5ZFx1MDNiZlx1MDNiNV9cdTAzOTRcdTAzYjVcdTAzYmEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDM5YVx1MDNjNVx1MDNjMVx1MDNiOVx1MDNiMVx1MDNiYVx1MDNhZV9cdTAzOTRcdTAzYjVcdTAzYzVcdTAz'@;
put 'YzRcdTAzYWRcdTAzYzFcdTAzYjFfXHUwM2E0XHUwM2MxXHUwM2FmXHUwM2M0XHUwM2I3X1x1MDNhNFx1MDNiNVx1MDNjNFx1MDNhY1x1MDNjMVx1MDNjNFx1MDNiN19cdTAzYTBcdTAzYWRcdTAzYmNcdTAzYzBcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2IxXHUwM2MxXHUwM2IxXHUwM2MzXHUw'@;
put 'M2JhXHUwM2I1XHUwM2M1XHUwM2FlX1x1MDNhM1x1MDNhY1x1MDNiMlx1MDNiMlx1MDNiMVx1MDNjNFx1MDNiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTAzOWFcdTAzYzVcdTAzYzFfXHUwMzk0XHUwM2I1XHUwM2M1X1x1MDNhNFx1MDNjMVx1MDNiOV9cdTAzYTRcdTAzYjVcdTAz'@;
put 'YzRfXHUwM2EwXHUwM2I1XHUwM2JjX1x1MDNhMFx1MDNiMVx1MDNjMV9cdTAzYTNcdTAzYjFcdTAzYjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDM5YVx1MDNjNV9cdTAzOTRcdTAzYjVfXHUwM2E0XHUwM2MxX1x1MDNhNFx1MDNiNV9cdTAzYTBcdTAzYjVfXHUwM2EwXHUwM2IxX1x1'@;
put 'MDNhM1x1MDNiMSIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihYLHcsQSl7cmV0dXJuIFg+MTE/QT8iXHUwM2JjXHUwM2JjIjoiXHUwMzljXHUwMzljIjpBPyJcdTAzYzBcdTAzYmMiOiJcdTAzYTBcdTAzOWMifSxpc1BNOmZ1bmN0aW9uKFgpe3JldHVybiJcdTAzYmMiPT09KFgrIiIp'@;
put 'LnRvTG93ZXJDYXNlKClbMF19LG1lcmlkaWVtUGFyc2U6L1tcdTAzYTBcdTAzOWNdXC4/XHUwMzljP1wuPy9pLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIs'@;
put 'TExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXJFbDp7c2FtZURheToiW1x1MDNhM1x1MDNhZVx1MDNiY1x1MDNiNVx1MDNjMVx1MDNiMSB7fV0gTFQiLG5leHREYXk6IltcdTAzOTFcdTAzY2RcdTAzYzFcdTAzYjlcdTAzYmYge31dIExUIixuZXh0V2VlazoiZGRkZCBb'@;
put 'e31dIExUIixsYXN0RGF5OiJbXHUwM2E3XHUwM2I4XHUwM2I1XHUwM2MyIHt9XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gNj09PXRoaXMuZGF5KCk/IltcdTAzYzRcdTAzYmYgXHUwM2MwXHUwM2MxXHUwM2JmXHUwM2I3XHUwM2IzXHUwM2JmXHUwM2NkXHUwM2JjXHUwM2I1XHUw'@;
put 'M2JkXHUwM2JmXSBkZGRkIFt7fV0gTFQiOiJbXHUwM2M0XHUwM2I3XHUwM2JkIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiN10gZGRkZCBbe31dIExUIn0sc2FtZUVsc2U6IkwifSxjYWxlbmRhcjpmdW5jdGlvbihYLHcp'@;
put 'e3ZhciBBPXRoaXMuX2NhbGVuZGFyRWxbWF0sRD13JiZ3LmhvdXJzKCk7cmV0dXJuIGZ1bmN0aW9uIGIoWCl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJlggaW5zdGFuY2VvZiBGdW5jdGlvbnx8IltvYmplY3QgRnVuY3Rpb25dIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs'@;
put 'bChYKX0oQSkmJihBPUEuYXBwbHkodykpLEEucmVwbGFjZSgie30iLEQlMTI9PTE/Ilx1MDNjM1x1MDNjNFx1MDNiNyI6Ilx1MDNjM1x1MDNjNFx1MDNiOVx1MDNjMiIpfSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwM2MzXHUwM2I1ICVzIixwYXN0OiIlcyBcdTAzYzBcdTAzYzFcdTAzYjlc'@;
put 'dTAzYmQiLHM6Ilx1MDNiYlx1MDNhZlx1MDNiM1x1MDNiMSBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLHNzOiIlZCBcdTAzYjRcdTAzYjVcdTAzYzVcdTAzYzRcdTAzYjVcdTAzYzFcdTAzY2NcdTAzYmJc'@;
put 'dTAzYjVcdTAzYzBcdTAzYzRcdTAzYjEiLG06Ilx1MDNhZFx1MDNiZFx1MDNiMSBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzY2MiLG1tOiIlZCBcdTAzYmJcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWMiLGg6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzY2VcdTAzYzFcdTAzYjEiLGhoOiIl'@;
put 'ZCBcdTAzY2VcdTAzYzFcdTAzYjVcdTAzYzIiLGQ6Ilx1MDNiY1x1MDNhZlx1MDNiMSBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjEiLGRkOiIlZCBcdTAzYmNcdTAzYWRcdTAzYzFcdTAzYjVcdTAzYzIiLE06Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYmNcdTAzYWVcdTAzYmRcdTAz'@;
put 'YjFcdTAzYzIiLE1NOiIlZCBcdTAzYmNcdTAzYWVcdTAzYmRcdTAzYjVcdTAzYzIiLHk6Ilx1MDNhZFx1MDNiZFx1MDNiMVx1MDNjMiBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYmZcdTAzYzIiLHl5OiIlZCBcdTAzYzdcdTAzYzFcdTAzY2NcdTAzYmRcdTAzYjlcdTAzYjEifSxkYXlP'@;
put 'Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwM2I3LyxvcmRpbmFsOiIlZFx1MDNiNyIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sOTQ5MTY6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJlbi1hdSIse21v'@;
put 'bnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMi'@;
put 'LnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9f'@;
put 'VHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxl'@;
put 'bmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGlt'@;
put 'ZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1v'@;
put 'bnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgWD1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09WD8ic3QiOjI9PT1YPyJuZCI6Mz09'@;
put 'PVg/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjR9fSl9KFIoOTMxMzcpKX0sMTUzMTg6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJlbi1jYSIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlf'@;
put 'SnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVl'@;
put 'c2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3Jt'@;
put 'YXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJZWVlZLU1NLUREIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERh'@;
put 'eToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJh'@;
put 'IGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlP'@;
put 'Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgWD1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09WD8ic3QiOjI9PT1YPyJuZCI6Mz09PVg/InJkIjoidGgiKX19KX0oUig5MzEzNykpfSw2ODA3MTpm'@;
put 'dW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImVuLWdiIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5z'@;
put 'cGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1N'@;
put 'IFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJk'@;
put 'YXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoi'@;
put 'YW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7'@;
put 'dmFyIFg9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PVg/InN0IjoyPT09WD8ibmQiOjM9PT1YPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDU2MTA4OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3Qi'@;
put 'O2VlLmRlZmluZUxvY2FsZSgiZW4taWUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlf'@;
put 'SnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBE'@;
put 'IE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNh'@;
put 'bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlz'@;
put 'IixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBYPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9'@;
put 'PT1YPyJzdCI6Mj09PVg/Im5kIjozPT09WD8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw5MDY1MTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImVuLWlsIix7bW9udGhzOiJKYW51YXJ5X0Zl'@;
put 'YnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVr'@;
put 'ZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIu'@;
put 'c3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2Rh'@;
put 'eSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBh'@;
put 'c3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6'@;
put 'IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIFg9bSUxMDtyZXR1cm4gbSsoMT09fn4obSUxMDAvMTApPyJ0aCI6MT09PVg/InN0IjoyPT09WD8ibmQiOjM9PT1YPyJyZCI6InRoIil9fSl9KFIo'@;
put 'OTMxMzcpKX0sNTQ1NTc6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJlbi1pbiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3Zl'@;
put 'bWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5'@;
put 'Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9N'@;
put 'TS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBM'@;
put 'VCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUi'@;
put 'LG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8s'@;
put 'b3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgWD1tJTEwO3JldHVybiBtKygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09WD8ic3QiOjI9PT1YPyJuZCI6Mz09PVg/InJkIjoidGgiKX0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KFIoOTMxMzcpKX0sNjg0MTQ6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0'@;
put 'aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJlbi1ueiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoi'@;
put 'SmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVl'@;
put 'X1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZ'@;
put 'WVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVr'@;
put 'OiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25kcyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91'@;
put 'cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihtKXt2YXIgWD1tJTEwO3JldHVybiBt'@;
put 'KygxPT1+fihtJTEwMC8xMCk/InRoIjoxPT09WD8ic3QiOjI9PT1YPyJuZCI6Mz09PVg/InJkIjoidGgiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sNTMxMDQ6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJl'@;
put 'bi1zZyIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0'@;
put 'X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p'@;
put 'bjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9'@;
put 'LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp'@;
put 'dmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToi'@;
put 'JWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3ZhciBYPW0lMTA7cmV0dXJuIG0rKDE9PX5+KG0lMTAwLzEwKT8idGgiOjE9PT1YPyJzdCI6Mj09PVg/Im5k'@;
put 'IjozPT09WD8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw2MTc3ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImVvIix7bW9udGhzOiJqYW51YXJvX2ZlYnJ1YXJvX21hcnRvX2Fwcmlsb19t'@;
put 'YWpvX2p1bmlvX2p1bGlvX2FcdTAxNmRndXN0b19zZXB0ZW1icm9fb2t0b2Jyb19ub3ZlbWJyb19kZWNlbWJybyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJ0X2Fwcl9tYWpfanVuX2p1bF9hXHUwMTZkZ19zZXB0X29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'OiJkaW1hblx1MDEwOW9fbHVuZG9fbWFyZG9fbWVya3JlZG9fXHUwMTM1YVx1MDE2ZGRvX3ZlbmRyZWRvX3NhYmF0byIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW1fbHVuX21hcmRfbWVya19cdTAxMzVhXHUwMTZkX3Zlbl9zYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1'@;
put 'X21hX21lX1x1MDEzNWFfdmVfc2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IltsYV0gRFstYW4gZGVdIE1NTU0sIFlZWVkiLExMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsTExMTDoi'@;
put 'ZGRkZFtuXSwgW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSBISDptbSIsbGxsbDoiZGRkLCBbbGFdIERbLWFuIGRlXSBNTU0sIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9bYXBdXC50XC5tL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4icCI9PT1tLmNoYXJBdCgwKS50b0xvd2VyQ2Fz'@;
put 'ZSgpfSxtZXJpZGllbTpmdW5jdGlvbihtLFgsdyl7cmV0dXJuIG0+MTE/dz8icC50Lm0uIjoiUC5ULk0uIjp3PyJhLnQubS4iOiJBLlQuTS4ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvZGlhXHUwMTZkIGplXSBMVCIsbmV4dERheToiW01vcmdhXHUwMTZkIGplXSBMVCIsbmV4dFdlZWs6ImRk'@;
put 'ZGRbbiBqZV0gTFQiLGxhc3REYXk6IltIaWVyYVx1MDE2ZCBqZV0gTFQiLGxhc3RXZWVrOiJbcGFzaW50YW5dIGRkZGRbbiBqZV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBvc3QgJXMiLHBhc3Q6ImFudGFcdTAxNmQgJXMiLHM6ImtlbGthaiBzZWt1bmRvaiIs'@;
put 'c3M6IiVkIHNla3VuZG9qIixtOiJ1bnUgbWludXRvIixtbToiJWQgbWludXRvaiIsaDoidW51IGhvcm8iLGhoOiIlZCBob3JvaiIsZDoidW51IHRhZ28iLGRkOiIlZCB0YWdvaiIsTToidW51IG1vbmF0byIsTU06IiVkIG1vbmF0b2oiLHk6InVudSBqYXJvIix5eToiJWQgamFyb2oifSxkYXlP'@;
put 'Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9YS8sb3JkaW5hbDoiJWRhIix3ZWVrOntkb3c6MSxkb3k6N319KX0oUig5MzEzNykpfSw5NzM4NjpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5f'@;
put 'anVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksWD1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwv'@;
put 'XmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5'@;
put 'XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtlZS5kZWZpbmVMb2NhbGUoImVzLWRvIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1i'@;
put 'cmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEQsUCl7cmV0dXJuIEQ/Ly1NTU0tLy50ZXN0KFApP21bRC5tb250aCgpXTpiW0QubW9udGgoKV06Yn0sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98'@;
put 'ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29c'@;
put 'Lj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOlgsbG9uZ01vbnRoc1BhcnNlOlgsc2hvcnRNb250aHNQYXJzZTpYLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIp'@;
put 'LHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0g'@;
put 'QSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9u'@;
put 'KCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBb'@;
put 'YSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygx'@;
put 'IT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9y'@;
put 'YSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9'@;
put 'XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSwxNTc5MDpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9u'@;
put 'b3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksWD1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3Qv'@;
put 'aSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdv'@;
put 'XC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtlZS5kZWZpbmVMb2NhbGUoImVzLW14Iix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgi'@;
put 'XyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEQsUCl7cmV0dXJuIEQ/Ly1NTU0tLy50ZXN0KFApP21bRC5tb250aCgpXTpiW0QubW9udGgoKV06Yn0sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxt'@;
put 'YXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3Zc'@;
put 'Lj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOlgsbG9uZ01vbnRoc1BhcnNlOlgsc2hvcnRNb250aHNQYXJzZTpYLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5f'@;
put 'bHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQv'@;
put 'TU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhp'@;
put 'cy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoi'@;
put 'IikrIl0gTFQifSxsYXN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExU'@;
put 'In0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRh'@;
put 'IixkZDoiJWQgZFx4ZWRhcyIsdzoidW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7'@;
put 'ZG93OjAsZG95OjR9LGludmFsaWREYXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oUig5MzEzNykpfSw3MTQ5OTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0'@;
put 'Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksWD1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15v'@;
put 'Y3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98'@;
put 'YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtlZS5kZWZpbmVMb2NhbGUoImVzLXVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxp'@;
put 'dCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEQsUCl7cmV0dXJuIEQ/Ly1NTU0tLy50ZXN0KFApP21bRC5tb250aCgpXTpiW0QubW9udGgoKV06Yn0sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJp'@;
put 'bHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xu'@;
put 'b3ZcLj98ZGljXC4/KS9pLG1vbnRoc1BhcnNlOlgsbG9uZ01vbnRoc1BhcnNlOlgsc2hvcnRNb250aHNQYXJzZTpYLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRv'@;
put 'bS5fbHVuLl9tYXIuX21pXHhlOS5fanVlLl92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEi'@;
put 'LEw6Ik1NL0REL1lZWVkiLExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkiLExMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBs'@;
put 'YSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhv'@;
put 'dXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJz'@;
put 'IjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixk'@;
put 'OiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRc'@;
put 'eGJhIix3ZWVrOntkb3c6MCxkb3k6Nn19KX0oUig5MzEzNykpfSw0NzU5MDpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJf'@;
put 'IiksbT0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksWD1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ld'@;
put 'LHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98'@;
put 'bm92XC4/fGRpY1wuPykvaTtlZS5kZWZpbmVMb2NhbGUoImVzIix7bW9udGhzOiJlbmVyb19mZWJyZXJvX21hcnpvX2FicmlsX21heW9fanVuaW9fanVsaW9fYWdvc3RvX3NlcHRpZW1icmVfb2N0dWJyZV9ub3ZpZW1icmVfZGljaWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0'@;
put 'aW9uKEQsUCl7cmV0dXJuIEQ/Ly1NTU0tLy50ZXN0KFApP21bRC5tb250aCgpXTpiW0QubW9udGgoKV06Yn0sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0'@;
put 'b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZSkvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGVuZVwuP3xmZWJcLj98bWFyXC4/fGFiclwuP3xtYXlcLj98anVuXC4/fGp1bFwuP3xhZ29cLj98c2VwXC4/fG9jdFwuP3xub3ZcLj98ZGljXC4/KS9pLG1vbnRoc1Bh'@;
put 'cnNlOlgsbG9uZ01vbnRoc1BhcnNlOlgsc2hvcnRNb250aHNQYXJzZTpYLHdlZWtkYXlzOiJkb21pbmdvX2x1bmVzX21hcnRlc19taVx4ZTlyY29sZXNfanVldmVzX3ZpZXJuZXNfc1x4ZTFiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbS5fbHVuLl9tYXIuX21pXHhlOS5fanVl'@;
put 'Ll92aWUuX3NceGUxYi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRvX2x1X21hX21pX2p1X3ZpX3NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBN'@;
put 'TU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheTpmdW5jdGlvbigpe3JldHVybiJbaG95IGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0g'@;
put 'TFQifSxuZXh0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIlttYVx4ZjFhbmEgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW2EgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0RGF5OmZ1'@;
put 'bmN0aW9uKCl7cmV0dXJuIltheWVyIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc2FkbyBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxh'@;
put 'dGl2ZVRpbWU6e2Z1dHVyZToiZW4gJXMiLHBhc3Q6ImhhY2UgJXMiLHM6InVub3Mgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW4gZFx4ZWRhIixkZDoiJWQgZFx4ZWRhcyIsdzoi'@;
put 'dW5hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhXHhmMW8iLHl5OiIlZCBhXHhmMW9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9LGludmFsaWRE'@;
put 'YXRlOiJGZWNoYSBpbnZceGUxbGlkYSJ9KX0oUig5MzEzNykpfSw2NzI3MTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKFgsdyxBLEQpe3ZhciBQPXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQiLCJwYWFyIHNla3Vu'@;
put 'ZGl0Il0sc3M6W1grInNla3VuZGkiLFgrInNla3VuZGl0Il0sbTpbIlx4ZmNoZSBtaW51dGkiLCJceGZja3MgbWludXQiXSxtbTpbWCsiIG1pbnV0aSIsWCsiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbWCsiIHR1bm5pIixYKyIg'@;
put 'dHVuZGkiXSxkOlsiXHhmY2hlIHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1IGFqYSIsImt1dSBhZWdhIiwiXHhmY2tzIGt1dSJdLE1NOltYKyIga3V1IixYKyIga3V1ZCJdLHk6WyJceGZjaGUgYWFzdGEiLCJhYXN0YSIsIlx4ZmNrcyBhYXN0YSJdLHl5OltYKyIgYWFzdGEi'@;
put 'LFgrIiBhYXN0YXQiXX07cmV0dXJuIHc/UFtBXVsyXT9QW0FdWzJdOlBbQV1bMV06RD9QW0FdWzBdOlBbQV1bMV19ZWUuZGVmaW5lTG9jYWxlKCJldCIse21vbnRoczoiamFhbnVhcl92ZWVicnVhcl9tXHhlNHJ0c19hcHJpbGxfbWFpX2p1dW5pX2p1dWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0'@;
put 'b29iZXJfbm92ZW1iZXJfZGV0c2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYWFuX3ZlZWJyX21ceGU0cnRzX2Fwcl9tYWlfanV1bmlfanV1bGlfYXVnX3NlcHRfb2t0X25vdl9kZXRzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJwXHhmY2hhcFx4ZTRldl9lc21hc3BceGU0ZXZfdGVp'@;
put 'c2lwXHhlNGV2X2tvbG1hcFx4ZTRldl9uZWxqYXBceGU0ZXZfcmVlZGVfbGF1cFx4ZTRldiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJQX0VfVF9LX05fUl9MIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoi'@;
put 'SDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVFx4ZTRuYSxdIExUIixuZXh0RGF5OiJbSG9tbWUsXSBMVCIs'@;
put 'bmV4dFdlZWs6IltKXHhlNHJnbWluZV0gZGRkZCBMVCIsbGFzdERheToiW0VpbGUsXSBMVCIsbGFzdFdlZWs6IltFZWxtaW5lXSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNHJhc3QiLHBhc3Q6IiVzIHRhZ2FzaSIsczpiLHNzOmIsbTpiLG1t'@;
put 'OmIsaDpiLGhoOmIsZDpiLGRkOiIlZCBwXHhlNGV2YSIsTTpiLE1NOmIseTpiLHl5OmJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSwyNjc2ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rp'@;
put 'b24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9hX2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9y'@;
put 'dDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xh'@;
put 'cnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI'@;
put 'Om1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlb'@;
put 'a29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRh'@;
put 'bl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToi'@;
put 'bWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVndW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c'@;
put 'ZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sMTUwMDM6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MDZmMSIsMjoiXHUwNmYyIiwzOiJcdTA2ZjMiLDQ6Ilx1MDZmNCIsNToiXHUw'@;
put 'NmY1Iiw2OiJcdTA2ZjYiLDc6Ilx1MDZmNyIsODoiXHUwNmY4Iiw5OiJcdTA2ZjkiLDA6Ilx1MDZmMCJ9LG09eyJcdTA2ZjEiOiIxIiwiXHUwNmYyIjoiMiIsIlx1MDZmMyI6IjMiLCJcdTA2ZjQiOiI0IiwiXHUwNmY1IjoiNSIsIlx1MDZmNiI6IjYiLCJcdTA2ZjciOiI3IiwiXHUwNmY4Ijoi'@;
put 'OCIsIlx1MDZmOSI6IjkiLCJcdTA2ZjAiOiIwIn07ZWUuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4'@;
put 'XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUw'@;
put 'NjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhc'@;
put 'dTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUw'@;
put 'NjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlz'@;
put 'OiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2'@;
put 'MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2'@;
put 'XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAw'@;
put 'Y1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vl'@;
put 'a2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9c'@;
put 'dTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2Mzhc'@;
put 'dTA2NDdcdTA2MzEvLnRlc3Qodyl9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsQSxEKXtyZXR1cm4gdzwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9'@;
put 'LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1'@;
put 'MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQi'@;
put 'LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUwNjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUw'@;
put 'NmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5'@;
put 'XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUw'@;
put 'NjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDZmMC1cdTA2ZjldL2csZnVuY3Rpb24oQSl7cmV0dXJuIG1bQV19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3Jl'@;
put 'dHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfShSKDkzMTM3KSl9LDQw'@;
put 'MTk6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9Im5vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsalx4ZTQgdmlpc2kga3V1c2kgc2VpdHNlbVx4ZTRuIGthaGRla3NhbiB5aGRla3NceGU0biIuc3BsaXQoIiAiKSxtPVsibm9sbGEiLCJ5aGRlbiIs'@;
put 'ImthaGRlbiIsImtvbG1lbiIsIm5lbGpceGU0biIsInZpaWRlbiIsImt1dWRlbiIsYls3XSxiWzhdLGJbOV1dO2Z1bmN0aW9uIFgoRCxQLFUsSSl7dmFyIEU9IiI7c3dpdGNoKFUpe2Nhc2UicyI6cmV0dXJuIEk/Im11dXRhbWFuIHNla3VubmluIjoibXV1dGFtYSBzZWt1bnRpIjtjYXNlInNz'@;
put 'IjpFPUk/InNla3VubmluIjoic2VrdW50aWEiO2JyZWFrO2Nhc2UibSI6cmV0dXJuIEk/Im1pbnV1dGluIjoibWludXV0dGkiO2Nhc2UibW0iOkU9ST8ibWludXV0aW4iOiJtaW51dXR0aWEiO2JyZWFrO2Nhc2UiaCI6cmV0dXJuIEk/InR1bm5pbiI6InR1bnRpIjtjYXNlImhoIjpFPUk/InR1'@;
put 'bm5pbiI6InR1bnRpYSI7YnJlYWs7Y2FzZSJkIjpyZXR1cm4gST8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTQiO2Nhc2UiZGQiOkU9ST8icFx4ZTRpdlx4ZTRuIjoicFx4ZTRpdlx4ZTRceGU0IjticmVhaztjYXNlIk0iOnJldHVybiBJPyJrdXVrYXVkZW4iOiJrdXVrYXVzaSI7Y2FzZSJN'@;
put 'TSI6RT1JPyJrdXVrYXVkZW4iOiJrdXVrYXV0dGEiO2JyZWFrO2Nhc2UieSI6cmV0dXJuIEk/InZ1b2RlbiI6InZ1b3NpIjtjYXNlInl5IjpFPUk/InZ1b2RlbiI6InZ1b3R0YSJ9cmV0dXJuIGZ1bmN0aW9uIHcoRCxQKXtyZXR1cm4gRDwxMD9QP21bRF06YltEXTpEfShELEkpKyIgIitFfWVl'@;
put 'LmRlZmluZUxvY2FsZSgiZmkiLHttb250aHM6InRhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXNceGU0a3V1X2hlaW5ceGU0a3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ0'@;
put 'YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2VzXHhlNF9oZWluXHhlNF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpIi5z'@;
put 'cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1X21hX3RpX2tlX3RvX3BlX2xhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC5NTS5ZWVlZIixMTDoi'@;
put 'RG8gTU1NTVt0YV0gWVlZWSIsTExMOiJEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbSIsTExMTDoiZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLGw6IkQuTS5ZWVlZIixsbDoiRG8gTU1NIFlZWVkiLGxsbDoiRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tIixsbGxsOiJk'@;
put 'ZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbdFx4ZTRuXHhlNFx4ZTRuXSBba2xvXSBMVCIsbmV4dERheToiW2h1b21lbm5hXSBba2xvXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsb10gTFQiLGxhc3REYXk6IltlaWxlbl0gW2tsb10gTFQiLGxhc3RX'@;
put 'ZWVrOiJbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBwXHhlNFx4ZTRzdFx4ZTQiLHBhc3Q6IiVzIHNpdHRlbiIsczpYLHNzOlgsbTpYLG1tOlgsaDpYLGhoOlgsZDpYLGRkOlgsTTpYLE1NOlgseTpYLHl5Olh9LGRheU9m'@;
put 'TW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw3NTIxNTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImZpbCIse21vbnRoczoiRW5lcm9f'@;
put 'UGVicmVyb19NYXJzb19BYnJpbF9NYXlvX0h1bnlvX0h1bHlvX0Fnb3N0b19TZXR5ZW1icmVfT2t0dWJyZV9Ob2J5ZW1icmVfRGlzeWVtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJFbmVfUGViX01hcl9BYnJfTWF5X0h1bl9IdWxfQWdvX1NldF9Pa3RfTm9iX0RpcyIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5czoiTGluZ2dvX0x1bmVzX01hcnRlc19NaXllcmt1bGVzX0h1d2ViZXNfQml5ZXJuZXNfU2FiYWRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikxpbl9MdW5fTWFyX01peV9IdXdfQml5X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTGlfTHVfTWFfTWlfSHVfQmlf'@;
put 'U2FiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6Ik1NL0QvWVlZWSIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gREQsIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURh'@;
put 'eToiTFQgW25nYXlvbmcgYXJhd10iLG5leHREYXk6IltCdWthcyBuZ10gTFQiLG5leHRXZWVrOiJMVCBbc2Egc3VzdW5vZCBuYV0gZGRkZCIsbGFzdERheToiTFQgW2thaGFwb25dIixsYXN0V2VlazoiTFQgW25vb25nIG5ha2FyYWFuZ10gZGRkZCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp'@;
put 'bWU6e2Z1dHVyZToic2EgbG9vYiBuZyAlcyIscGFzdDoiJXMgYW5nIG5ha2FsaXBhcyIsczoiaWxhbmcgc2VndW5kbyIsc3M6IiVkIHNlZ3VuZG8iLG06ImlzYW5nIG1pbnV0byIsbW06IiVkIG1pbnV0byIsaDoiaXNhbmcgb3JhcyIsaGg6IiVkIG9yYXMiLGQ6ImlzYW5nIGFyYXciLGRkOiIl'@;
put 'ZCBhcmF3IixNOiJpc2FuZyBidXdhbiIsTU06IiVkIGJ1d2FuIix5OiJpc2FuZyB0YW9uIix5eToiJWQgdGFvbiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6ZnVuY3Rpb24obSl7cmV0dXJuIG19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDk2'@;
put 'NzYxOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiZm8iLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnNfYXByXHhlZGxfbWFpX2p1bmlfanVsaV9hdWd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVzZW1iZXIi'@;
put 'LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbmFkYWd1cl90XHhmZHNkYWd1cl9taWt1ZGFndXJfaFx4ZjNzZGFndXJfZnJceGVkZ2dqYWRh'@;
put 'Z3VyX2xleWdhcmRhZ3VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InN1bl9tXHhlMW5fdFx4ZmRzX21pa19oXHhmM3NfZnJceGVkX2xleSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbVx4ZTFfdFx4ZmRfbWlfaFx4ZjNfZnJfbGUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6'@;
put 'e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0sIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x4Y2QgZGFnIGtsLl0gTFQiLG5leHREYXk6Iltc'@;
put 'eGNkIG1vcmdpbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW1x4Y2QgZ2pceGUxciBrbC5dIExUIixsYXN0V2VlazoiW3NceGVkXHhmMHN0dV0gZGRkZCBba2xdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ1bSAlcyIscGFzdDoi'@;
put 'JXMgc1x4ZWRceGYwYW5pIixzOiJmXHhlMSBzZWt1bmQiLHNzOiIlZCBzZWt1bmRpciIsbToiZWluIG1pbnV0dHVyIixtbToiJWQgbWludXR0aXIiLGg6ImVpbiB0XHhlZG1pIixoaDoiJWQgdFx4ZWRtYXIiLGQ6ImVpbiBkYWd1ciIsZGQ6IiVkIGRhZ2FyIixNOiJlaW4gbVx4ZTFuYVx4ZjB1'@;
put 'ciIsTU06IiVkIG1ceGUxbmFceGYwaXIiLHk6ImVpdHQgXHhlMXIiLHl5OiIlZCBceGUxciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw5MTk0MzpmdW5jdGlvbigkZSxTZSxSKXshZnVu'@;
put 'Y3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImZyLWNhIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19hdnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9u'@;
put 'dGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRy'@;
put 'ZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3Jt'@;
put 'YXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixu'@;
put 'ZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwg'@;
put 'eSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoidW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBh'@;
put 'biIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSxYKXtzd2l0Y2goWCl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nh'@;
put 'c2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX19KX0oUig5MzEzNykpfSw0NDU2ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImZyLWNoIix7bW9udGhzOiJqYW52aWVyX2ZceGU5dnJpZXJfbWFyc19h'@;
put 'dnJpbF9tYWlfanVpbl9qdWlsbGV0X2FvXHhmYnRfc2VwdGVtYnJlX29jdG9icmVfbm92ZW1icmVfZFx4ZTljZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphbnYuX2ZceGU5dnIuX21hcnNfYXZyLl9tYWlfanVpbl9qdWlsLl9hb1x4ZmJ0X3NlcHQuX29jdC5fbm92Ll9kXHhlOWMu'@;
put 'Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6ImRpbWFuY2hlX2x1bmRpX21hcmRpX21lcmNyZWRpX2pldWRpX3ZlbmRyZWRpX3NhbWVkaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJkaW0uX2x1bi5fbWFyLl9tZXIuX2pldS5fdmVuLl9zYW0uIi5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzTWluOiJkaV9sdV9tYV9tZV9qZV92ZV9zYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhI'@;
put 'Om1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltBdWpvdXJkXHUyMDE5aHVpIFx4ZTBdIExUIixuZXh0RGF5OiJbRGVtYWluIFx4ZTBdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMF0gTFQiLGxhc3REYXk6IltIaWVyIFx4ZTBdIExUIixsYXN0'@;
put 'V2VlazoiZGRkZCBbZGVybmllciBceGUwXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFucyAlcyIscGFzdDoiaWwgeSBhICVzIixzOiJxdWVscXVlcyBzZWNvbmRlcyIsc3M6IiVkIHNlY29uZGVzIixtOiJ1bmUgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoi'@;
put 'dW5lIGhldXJlIixoaDoiJWQgaGV1cmVzIixkOiJ1biBqb3VyIixkZDoiJWQgam91cnMiLE06InVuIG1vaXMiLE1NOiIlZCBtb2lzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZXJ8ZSkvLG9yZGluYWw6ZnVuY3Rpb24obSxYKXtzd2l0'@;
put 'Y2goWCl7ZGVmYXVsdDpjYXNlIk0iOmNhc2UiUSI6Y2FzZSJEIjpjYXNlIkRERCI6Y2FzZSJkIjpyZXR1cm4gbSsoMT09PW0/ImVyIjoiZSIpO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gbSsoMT09PW0/InJlIjoiZSIpfX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sOTk0NzA6'@;
put 'ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIFg9LyhqYW52XC4/fGZceGU5dnJcLj98bWFyc3xhdnJcLj98bWFpfGp1aW58anVpbFwuP3xhb1x4ZmJ0fHNlcHRcLj98b2N0XC4/fG5vdlwuP3xkXHhlOWNcLj98amFudmllcnxmXHhlOXZyaWVyfG1hcnN8'@;
put 'YXZyaWx8bWFpfGp1aW58anVpbGxldHxhb1x4ZmJ0fHNlcHRlbWJyZXxvY3RvYnJlfG5vdmVtYnJlfGRceGU5Y2VtYnJlKS9pLHc9Wy9eamFudi9pLC9eZlx4ZTl2ci9pLC9ebWFycy9pLC9eYXZyL2ksL15tYWkvaSwvXmp1aW4vaSwvXmp1aWwvaSwvXmFvXHhmYnQvaSwvXnNlcHQvaSwvXm9j'@;
put 'dC9pLC9ebm92L2ksL15kXHhlOWMvaV07ZWUuZGVmaW5lTG9jYWxlKCJmciIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRo'@;
put 'c1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNSZWdleDpYLG1vbnRoc1Nob3J0UmVnZXg6WCxtb250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8'@;
put 'bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwu'@;
put 'P3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250aHNQYXJzZTp3LGxvbmdNb250aHNQYXJzZTp3LHNob3J0TW9udGhzUGFyc2U6dyx3ZWVrZGF5czoiZGltYW5jaGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hv'@;
put 'cnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJE'@;
put 'RC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVr'@;
put 'OiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoi'@;
put 'JWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3VycyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFu'@;
put 'Iix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKEQsUCl7c3dpdGNoKFApe2Nhc2UiRCI6cmV0dXJuIEQrKDE9PT1EPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVy'@;
put 'biBEKygxPT09RD8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBEKygxPT09RD8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw2NjY1OTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj0iamFuLl9mZWIu'@;
put 'X21ydC5fYXByLl9tYWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtPSJqYW5fZmViX21ydF9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKTtlZS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlz'@;
put 'X2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKHcsQSl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KEEpP21bdy5tb250aCgpXTpiW3cu'@;
put 'bW9udGgoKV06Yn0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM'@;
put 'TExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRk'@;
put 'ZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNla29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVu'@;
put 'IixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrKDE9PT13'@;
put 'fHw4PT09d3x8dz49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDU4NjY2OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwi'@;
put 'TVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZceGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhl'@;
put 'MXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5'@;
put 'YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJD'@;
put 'XHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntz'@;
put 'YW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6'@;
put 'e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYzaW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixk'@;
put 'ZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKFApe3JldHVybiBQKygxPT09UD8iZCI6UCUxMD09Mj8ibmEiOiJt'@;
put 'aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw3NzMwMTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4g'@;
put 'R2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIsIkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIi'@;
put 'LCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lh'@;
put 'ZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vla2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRl'@;
put 'Rm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHRE'@;
put 'YXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFpZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMi'@;
put 'LHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFpcmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIs'@;
put 'eToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oUCl7cmV0dXJuIFArKDE9PT1QPyJkIjpQJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9'@;
put 'LDExNTgxOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJyaWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2Rl'@;
put 'Y2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNv'@;
put 'cmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2Rh'@;
put 'eXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkg'@;
put 'SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEi'@;
put 'KSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6'@;
put 'ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuIDA9PT1tLmluZGV4T2YoInVuIik/Im4iK206ImVuICIrbX0s'@;
put 'cGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1'@;
put 'biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMzExNjg6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZnVuY3Rp'@;
put 'b24gYihYLHcsQSxEKXt2YXIgUD17czpbIlx1MDkyNVx1MDk0Ylx1MDkyMVx1MDkyZlx1MDkzZSBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLCJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5NDcgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUw'@;
put 'OTIxIl0sc3M6W1grIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjFcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLFgrIiBcdTA5MzhcdTA5NDVcdTA5MTVcdTA5MDJcdTA5MjEiXSxtOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDky'@;
put 'OCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5NDJcdTA5MWYiXSxtbTpbWCsiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsWCsiIFx1MDkyZVx1MDkzZlx1MDkyM1x1MDkxZlx1MDkzZVx1MDkwMiJdLGg6WyJcdTA5MGZcdTA5'@;
put 'MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMCJdLGhoOltYKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixYKyIgXHUwOTM1XHUwOTMwXHUwOTNlXHUwOTAyIl0sZDpbIlx1MDkwZlx1MDkxNVx1MDkzZSBc'@;
put 'dTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTQwXHUwOTM4Il0sZGQ6W1grIiBcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLFgrIiBcdTA5MjZcdTA5NDBcdTA5MzgiXSxNOlsiXHUwOTBmXHUwOTE1XHUwOTNl'@;
put 'IFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGIiXSxNTTpbWCsiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkz'@;
put 'ZVx1MDkyOFx1MDk0MCIsWCsiIFx1MDkyZVx1MDk0ZFx1MDkzOVx1MDkyZlx1MDkyOFx1MDk0NyJdLHk6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOCJdLHl5OltY'@;
put 'KyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixYKyIgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM4XHUwOTNlXHUwOTAyIl19O3JldHVybiBEP1BbQV1bMF06UFtBXVsxXX1lZS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFs'@;
put 'b25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRc'@;
put 'dTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5'@;
put 'MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1'@;
put 'MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUw'@;
put 'OTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmVcdTA5NDdcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUw'@;
put 'OTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUw'@;
put 'OTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5'@;
put 'NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxz'@;
put 'KStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19c'@;
put 'dTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIu'@;
put 'X1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5'@;
put 'M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUw'@;
put 'OTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRk'@;
put 'XHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUw'@;
put 'OTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLExUUzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2Vc'@;
put 'dTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1'@;
put 'MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MmZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUw'@;
put 'OTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixsYXN0V2VlazoiW1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIs'@;
put 'c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0MFx1MDkwMiIsczpiLHNzOmIsbTpiLG1tOmIsaDpiLGhoOmIsZDpiLGRkOmIsTTpiLE1NOmIseTpiLHl5OmJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHUw'@;
put 'OTM1XHUwOTQ3XHUwOTMwKS8sb3JkaW5hbDpmdW5jdGlvbihYLHcpe3JldHVybiJEIj09PXc/WCsiXHUwOTM1XHUwOTQ3XHUwOTMwIjpYfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwfFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1'@;
put 'MDk0MFx1MDkwMnxcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDJ8XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oWCx3KXtyZXR1cm4gMTI9PT1YJiYoWD0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIj09PXc/'@;
put 'WDw0P1g6WCsxMjoiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIj09PXc/WDoiXHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyIj09PXc/WD4xMj9YOlgrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI9PT13P1grMTI6dm9pZCAw'@;
put 'fSxtZXJpZGllbTpmdW5jdGlvbihYLHcsQSl7cmV0dXJuIFg8ND8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIjpYPDEyPyJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDIiOlg8MTY/Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI6WDwyMD8i'@;
put 'XHUwOTM4XHUwOTNlXHUwOTAyXHUwOTFjXHUwOTQ3IjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTQwIn19KX0oUig5MzEzNykpfSw2Njk3MTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKFgsdyxBLEQpe3ZhciBQPXtzOlsidGhvZGRlYSBz'@;
put 'ZWtvbmRhbW5pIiwidGhvZGRlIHNla29uZCJdLHNzOltYKyIgc2Vrb25kYW1uaSIsWCsiIHNla29uZCJdLG06WyJla2EgbWludGFuIiwiZWsgbWludXQiXSxtbTpbWCsiIG1pbnRhbW5pIixYKyIgbWludGFtIl0saDpbImVrYSB2b3JhbiIsImVrIHZvciJdLGhoOltYKyIgdm9yYW1uaSIsWCsi'@;
put 'IHZvcmFtIl0sZDpbImVrYSBkaXNhbiIsImVrIGRpcyJdLGRkOltYKyIgZGlzYW1uaSIsWCsiIGRpcyJdLE06WyJla2EgbWhvaW5lYW4iLCJlayBtaG9pbm8iXSxNTTpbWCsiIG1ob2luZWFtbmkiLFgrIiBtaG9pbmUiXSx5OlsiZWthIHZvcnNhbiIsImVrIHZvcm9zIl0seXk6W1grIiB2b3Jz'@;
put 'YW1uaSIsWCsiIHZvcnNhbSJdfTtyZXR1cm4gRD9QW0FdWzBdOlBbQV1bMV19ZWUuZGVmaW5lTG9jYWxlKCJnb20tbGF0biIse21vbnRoczp7c3RhbmRhbG9uZToiSmFuZXJfRmVicmVyX01hcnNfQWJyaWxfTWFpX0p1bl9KdWxhaV9BZ29zdF9TZXRlbWJyX090dWJyX05vdmVtYnJfRGV6ZW1i'@;
put 'ciIuc3BsaXQoIl8iKSxmb3JtYXQ6IkphbmVyYWNoZWFfRmVicmVyYWNoZWFfTWFyc2FjaGVhX0FicmlsYWNoZWFfTWFpYWNoZWFfSnVuYWNoZWFfSnVsYWlhY2hlYV9BZ29zdGFjaGVhX1NldGVtYnJhY2hlYV9PdHVicmFjaGVhX05vdmVtYnJhY2hlYV9EZXplbWJyYWNoZWEiLnNwbGl0KCJf'@;
put 'IiksaXNGb3JtYXQ6L01NTU0oXHMpK0Rbb0RdPy99LG1vbnRoc1Nob3J0OiJKYW4uX0ZlYi5fTWFyc19BYnIuX01haV9KdW5fSnVsLl9BZ28uX1NldC5fT3R1Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiQWl0YXJfU29tYXJfTW9uZ2xsYXJf'@;
put 'QnVkaHZhcl9CaXJlc3Rhcl9TdWtyYXJfU29uJ3ZhciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaXQuX1NvbS5fTW9uLl9CdWQuX0JyZS5fU3VrLl9Tb24uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaV9TbV9Nb19CdV9Ccl9TdV9TbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNl'@;
put 'RXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW3ZhenRhXSIsTFRTOiJBIGg6bW06c3MgW3ZhenRhXSIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEEgaDptbSBbdmF6dGFdIixMTExMOiJkZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6'@;
put 'bW0gW3ZhenRhXSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZLCBBIGg6bW0gW3ZhenRhXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQWl6XSBMVCIsbmV4dERheToiW0ZhbGVhbV0gTFQiLG5leHRXZWVrOiJbRnVkZGxvXSBkZGRkWyxdIExUIixsYXN0RGF5OiJbS2FsXSBMVCIsbGFzdFdlZWs6IltG'@;
put 'YXR0bG9dIGRkZGRbLF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIixwYXN0OiIlcyBhZGltIixzOmIsc3M6YixtOmIsbW06YixoOmIsaGg6YixkOmIsZGQ6YixNOmIsTU06Yix5OmIseXk6Yn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcikv'@;
put 'LG9yZGluYWw6ZnVuY3Rpb24oWCx3KXtyZXR1cm4iRCI9PT13P1grImVyIjpYfSx3ZWVrOntkb3c6MCxkb3k6M30sbWVyaWRpZW1QYXJzZTovcmF0aXxzb2thbGxpbXxkb25wYXJhbXxzYW5qZS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKFgsdyl7cmV0dXJuIDEyPT09WCYmKFg9MCksInJhdGki'@;
put 'PT09dz9YPDQ/WDpYKzEyOiJzb2thbGxpbSI9PT13P1g6ImRvbnBhcmFtIj09PXc/WD4xMj9YOlgrMTI6InNhbmplIj09PXc/WCsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKFgsdyxBKXtyZXR1cm4gWDw0PyJyYXRpIjpYPDEyPyJzb2thbGxpbSI6WDwxNj8iZG9ucGFyYW0iOlg8MjA/'@;
put 'InNhbmplIjoicmF0aSJ9fSl9KFIoOTMxMzcpKX0sNzcwNjI6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MGFlNyIsMjoiXHUwYWU4IiwzOiJcdTBhZTkiLDQ6Ilx1MGFlYSIsNToiXHUwYWViIiw2OiJcdTBhZWMiLDc6Ilx1MGFlZCIs'@;
put 'ODoiXHUwYWVlIiw5OiJcdTBhZWYiLDA6Ilx1MGFlNiJ9LG09eyJcdTBhZTciOiIxIiwiXHUwYWU4IjoiMiIsIlx1MGFlOSI6IjMiLCJcdTBhZWEiOiI0IiwiXHUwYWViIjoiNSIsIlx1MGFlYyI6IjYiLCJcdTBhZWQiOiI3IiwiXHUwYWVlIjoiOCIsIlx1MGFlZiI6IjkiLCJcdTBhZTYiOiIw'@;
put 'In07ZWUuZGVmaW5lTG9jYWxlKCJndSIse21vbnRoczoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhYlx1MGFjN1x1MGFhY1x1MGFjZFx1MGFiMFx1MGFjMVx1MGE4Nlx1MGFiMFx1MGFjMF9cdTBhYWVcdTBhYmVcdTBhYjBcdTBh'@;
put 'Y2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmXHUwYWIyX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlXHUwYTg4X1x1MGE5MVx1MGE5N1x1MGFiOFx1MGFjZFx1MGE5Zl9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZc'@;
put 'dTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYTkxXHUwYTk1XHUwYWNkXHUwYTlmXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFhOFx1MGFiNVx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhYTFcdTBhYmZcdTBhYjhcdTBhYzdcdTBhYWVcdTBhY2RcdTBhYWNcdTBhYjAi'@;
put 'LnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGE5Y1x1MGFiZVx1MGFhOFx1MGFjZFx1MGFhZlx1MGFjMS5fXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUwYWMxLl9cdTBhYWVcdTBhYmVcdTBhYjBcdTBhY2RcdTBhOWFfXHUwYThmXHUwYWFhXHUwYWNkXHUwYWIwXHUwYWJmLl9c'@;
put 'dTBhYWVcdTBhYzdfXHUwYTljXHUwYWMyXHUwYWE4X1x1MGE5Y1x1MGFjMVx1MGFiMlx1MGFiZS5fXHUwYTkxXHUwYTk3Ll9cdTBhYjhcdTBhYWFcdTBhY2RcdTBhOWZcdTBhYzcuX1x1MGE5MVx1MGE5NVx1MGFjZFx1MGE5Zlx1MGFjZC5fXHUwYWE4XHUwYWI1XHUwYWM3Ll9cdTBhYTFcdTBh'@;
put 'YmZcdTBhYjhcdTBhYzcuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGFiMFx1MGFiNVx1MGFiZlx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjhcdTBhY2JcdTBhYWVcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzXHUwYWI1XHUw'@;
put 'YWJlXHUwYWIwX1x1MGFhY1x1MGFjMVx1MGFhN1x1MGFjZFx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZlx1'@;
put 'MGFiNVx1MGFiZVx1MGFiMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBhYjBcdTBhYjVcdTBhYmZfXHUwYWI4XHUwYWNiXHUwYWFlX1x1MGFhZVx1MGE4Mlx1MGE5N1x1MGFiM19cdTBhYWNcdTBhYzFcdTBhYTdcdTBhY2RfXHUwYTk3XHUwYWMxXHUwYWIwXHUwYWMxX1x1MGFiNlx1'@;
put 'MGFjMVx1MGE5NVx1MGFjZFx1MGFiMF9cdTBhYjZcdTBhYThcdTBhYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGFiMF9cdTBhYjhcdTBhY2JfXHUwYWFlXHUwYTgyX1x1MGFhY1x1MGFjMV9cdTBhOTdcdTBhYzFfXHUwYWI2XHUwYWMxX1x1MGFiNiIuc3BsaXQoIl8iKSxsb25nRGF0'@;
put 'ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExUUzoiQSBoOm1tOnNzIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6'@;
put 'bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYTg2XHUwYTljXSBMVCIsbmV4dERheToiW1x1MGE5'@;
put 'NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGE5N1x1MGE4N1x1MGE5NVx1MGFiZVx1MGFiMlx1MGFjN10gTFQiLGxhc3RXZWVrOiJbXHUwYWFhXHUwYWJlXHUwYTliXHUwYWIyXHUwYWJlXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxy'@;
put 'ZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYWFlXHUwYWJlIixwYXN0OiIlcyBcdTBhYWFcdTBhYjlcdTBhYzdcdTBhYjJcdTBhYmUiLHM6Ilx1MGE4NVx1MGFhZVx1MGFjMVx1MGE5NSBcdTBhYWFcdTBhYjNcdTBhY2IiLHNzOiIlZCBcdTBhYjhcdTBhYzdcdTBhOTVcdTBhODJcdTBhYTEi'@;
put 'LG06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLG1tOiIlZCBcdTBhYWVcdTBhYmZcdTBhYThcdTBhYmZcdTBhOWYiLGg6Ilx1MGE4Zlx1MGE5NSBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGhoOiIlZCBcdTBhOTVcdTBhYjJcdTBhYmVcdTBhOTUiLGQ6'@;
put 'Ilx1MGE4Zlx1MGE5NSBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLGRkOiIlZCBcdTBhYTZcdTBhYmZcdTBhYjVcdTBhYjgiLE06Ilx1MGE4Zlx1MGE5NSBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLE1NOiIlZCBcdTBhYWVcdTBhYjlcdTBhYmZcdTBhYThcdTBhY2IiLHk6Ilx1'@;
put 'MGE4Zlx1MGE5NSBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjciLHl5OiIlZCBcdTBhYjVcdTBhYjBcdTBhY2RcdTBhYjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwYWU3XHUwYWU4XHUwYWU5XHUwYWVhXHUwYWViXHUwYWVjXHUwYWVkXHUwYWVlXHUwYWVm'@;
put 'XHUwYWU2XS9nLGZ1bmN0aW9uKEEpe3JldHVybiBtW0FdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihBKXtyZXR1cm4gYltBXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBhYjBcdTBhYmVcdTBhYTR8XHUwYWFjXHUwYWFhXHUwYWNiXHUw'@;
put 'YWIwfFx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMHxcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LEEpe3JldHVybiAxMj09PXcmJih3PTApLCJcdTBhYjBcdTBhYmVcdTBhYTQiPT09QT93PDQ/dzp3KzEyOiJcdTBhYjhcdTBhYjVcdTBhYmVcdTBhYjAi'@;
put 'PT09QT93OiJcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjAiPT09QT93Pj0xMD93OncrMTI6Ilx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5YyI9PT1BP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LEEsRCl7cmV0dXJuIHc8ND8iXHUwYWIwXHUwYWJlXHUwYWE0Ijp3PDEwPyJcdTBhYjhc'@;
put 'dTBhYjVcdTBhYmVcdTBhYjAiOnc8MTc/Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI6dzwyMD8iXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIjoiXHUwYWIwXHUwYWJlXHUwYWE0In0sd2Vlazp7ZG93OjAsZG95OjZ9fSl9KFIoOTMxMzcpKX0sMTk0MTpmdW5jdGlvbigkZSxTZSxSKXshZnVu'@;
put 'Y3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImhlIix7bW9udGhzOiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlc'@;
put 'dTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVlNFx1MDVkOFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1'@;
put 'ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNWQ5XHUwNWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1'@;
put 'MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVkMFx1MDVkNVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1'@;
put 'ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVmM19cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVkNVx1MDVkZl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUw'@;
put 'NWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1MDVlMlx1MDVkOV9cdTA1ZDdcdTA1ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUw'@;
put 'NWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNfXHUwNWQ0XHUwNWYzX1x1MDVkNVx1MDVmM19cdTA1ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1MDVkM19cdTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25n'@;
put 'RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6'@;
put 'IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJlXUxUIixuZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1'@;
put 'MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLGxhc3REYXk6IltcdTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2VlazoiW1x1MDVkMVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUw'@;
put 'NWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIscGFzdDoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1'@;
put 'ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixzczoiJWQgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBcdTA1ZDNcdTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1'@;
put 'MDVkNCIsaGg6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0rIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1ZGQiLGRkOmZ1bmN0aW9uKG0pe3JldHVybiAyPT09bT8iXHUwNWQ5XHUw'@;
put 'NWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjptKyIgXHUwNWQ5XHUwNWRlXHUwNWQ5XHUwNWRkIn0sTToiXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihtKXtyZXR1cm4gMj09PW0/Ilx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6bSsi'@;
put 'IFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1MDVkNCIseXk6ZnVuY3Rpb24obSl7cmV0dXJuIDI9PT1tPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm0lMTA9PTAmJjEwIT09bT9tKyIgXHUwNWU5XHUwNWUwXHUw'@;
put 'NWQ0IjptKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19LG1lcmlkaWVtUGFyc2U6L1x1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdcdTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5'@;
put 'XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVkNVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1'@;
put 'ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXihcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUw'@;
put 'NWU4XHUwNWQxKSQvLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sWCx3KXtyZXR1cm4gbTw1PyJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjptPDEwPyJcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOm08MTI/dz8nXHUw'@;
put 'NWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOm08MTg/dz8nXHUwNWQwXHUwNWQ3XHUwNWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1'@;
put 'ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEifX0pfShSKDkzMTM3KSl9LDE4MjA5OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO3ZhciBiPXsxOiJcdTA5NjciLDI6Ilx1MDk2OCIsMzoi'@;
put 'XHUwOTY5Iiw0OiJcdTA5NmEiLDU6Ilx1MDk2YiIsNjoiXHUwOTZjIiw3OiJcdTA5NmQiLDg6Ilx1MDk2ZSIsOToiXHUwOTZmIiwwOiJcdTA5NjYifSxtPXsiXHUwOTY3IjoiMSIsIlx1MDk2OCI6IjIiLCJcdTA5NjkiOiIzIiwiXHUwOTZhIjoiNCIsIlx1MDk2YiI6IjUiLCJcdTA5NmMiOiI2'@;
put 'IiwiXHUwOTZkIjoiNyIsIlx1MDk2ZSI6IjgiLCJcdTA5NmYiOiI5IiwiXHUwOTY2IjoiMCJ9LFg9Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzB8XHUwOTJiXHUwOTMwL2ksL15cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEvaSwvXlx1MDkwNVx1MDkyYVx1MDk0'@;
put 'ZFx1MDkzMFx1MDk0OC9pLC9eXHUwOTJlXHUwOTA4L2ksL15cdTA5MWNcdTA5NDJcdTA5MjgvaSwvXlx1MDkxY1x1MDk0MVx1MDkzMi9pLC9eXHUwOTA1XHUwOTE3L2ksL15cdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJ8XHUwOTM4XHUwOTNmXHUwOTI0L2ksL15cdTA5MDVcdTA5MTVcdTA5NGRc'@;
put 'dTA5MWZcdTA5NDIvaSwvXlx1MDkyOFx1MDkzNXxcdTA5MjhcdTA5MzVcdTA5MDIvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMnxcdTA5MjZcdTA5M2ZcdTA5MzgvaV07ZWUuZGVmaW5lTG9jYWxlKCJoaSIse21vbnRoczp7Zm9ybWF0OiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5'@;
put 'NDBfXHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2Vc'@;
put 'dTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDky'@;
put 'Nlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5'@;
put 'MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MDVc'@;
put 'dTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTNjXHUwOTMwLl9c'@;
put 'dTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4Ll9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTA1XHUwOTE3Ll9cdTA5MzhcdTA5M2ZcdTA5MjQuX1x1MDkwNVx1MDkxNVx1MDk0'@;
put 'ZFx1MDkxZlx1MDk0Mi5fXHUwOTI4XHUwOTM1Ll9cdTA5MjZcdTA5M2ZcdTA5MzguIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJlXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1'@;
put 'MDkzMlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5Mjhc'@;
put 'dTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJfXHUwOTJjXHUwOTQxXHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZc'@;
put 'dTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQxX1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0Rh'@;
put 'dGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkEgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwg'@;
put 'RCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxtb250aHNQYXJzZTpYLGxvbmdNb250aHNQYXJzZTpYLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9p'@;
put 'LC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFm'@;
put 'XHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5'@;
put 'MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0'@;
put 'Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2Zc'@;
put 'dTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDky'@;
put 'OFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDov'@;
put 'XihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1'@;
put 'MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xc'@;
put 'dTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0'@;
put 'ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUw'@;
put 'OTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5'@;
put 'MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1'@;
put 'MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRk'@;
put 'XHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwP3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNc'@;
put 'dTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5'@;
put 'MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUw'@;
put 'OTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkxNVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMy'@;
put 'XHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3'@;
put 'XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJcdTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixo'@;
put 'aDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUw'@;
put 'OTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oRCl7cmV0dXJuIEQucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1'@;
put 'MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gbVtQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEQpe3JldHVybiBELnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIGJbUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0'@;
put 'fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oRCxQKXtyZXR1cm4gMTI9PT1EJiYoRD0wKSwiXHUwOTMwXHUwOTNlXHUwOTI0Ij09PVA/RDw0P0Q6RCsxMjoiXHUw'@;
put 'OTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PVA/RDoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PVA/RD49MTA/RDpEKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09UD9EKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oRCxQLFUpe3JldHVybiBEPDQ/Ilx1MDkzMFx1MDkz'@;
put 'ZVx1MDkyNCI6RDwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpEPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiOkQ8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShSKDkzMTM3KSl9LDE1NTY4'@;
put 'OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGIoWCx3LEEpe3ZhciBEPVgrIiAiO3N3aXRjaChBKXtjYXNlInNzIjpyZXR1cm4gRCsoMT09PVg/InNla3VuZGEiOjI9PT1YfHwzPT09WHx8ND09PVg/InNla3VuZGUiOiJzZWt1bmRpIik7Y2Fz'@;
put 'ZSJtIjpyZXR1cm4gdz8iamVkbmEgbWludXRhIjoiamVkbmUgbWludXRlIjtjYXNlIm1tIjpyZXR1cm4gRCsoMT09PVg/Im1pbnV0YSI6Mj09PVh8fDM9PT1YfHw0PT09WD8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4gdz8iamVkYW4gc2F0IjoiamVkbm9nIHNhdGEiO2Nhc2Ui'@;
put 'aGgiOnJldHVybiBEKygxPT09WD8ic2F0IjoyPT09WHx8Mz09PVh8fDQ9PT1YPyJzYXRhIjoic2F0aSIpO2Nhc2UiZGQiOnJldHVybiBEKygxPT09WD8iZGFuIjoiZGFuYSIpO2Nhc2UiTU0iOnJldHVybiBEKygxPT09WD8ibWplc2VjIjoyPT09WHx8Mz09PVh8fDQ9PT1YPyJtamVzZWNhIjoi'@;
put 'bWplc2VjaSIpO2Nhc2UieXkiOnJldHVybiBEKygxPT09WD8iZ29kaW5hIjoyPT09WHx8Mz09PVh8fDQ9PT1YPyJnb2RpbmUiOiJnb2RpbmEiKX19ZWUuZGVmaW5lTG9jYWxlKCJociIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUwMTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2'@;
put 'bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAxMGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tv'@;
put 'bG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVsai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8uIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vl'@;
put 'a2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVf'@;
put 'cG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVkiLExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQs'@;
put 'IERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVy'@;
put 'biJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0'@;
put 'Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvXHUwMTYxbHVdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2Ug'@;
put 'MjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNzOmIsbTpiLG1tOmIsaDpiLGhoOmIsZDoiZGFuIixkZDpiLE06'@;
put 'Im1qZXNlYyIsTU06Yix5OiJnb2RpbnUiLHl5OmJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oUig5MzEzNykpfSw4MDgzNzpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2'@;
put 'YXIgYj0idmFzXHhlMXJuYXAgaFx4ZTl0Zlx1MDE1MW4ga2VkZGVuIHN6ZXJkXHhlMW4gY3NceGZjdFx4ZjZydFx4ZjZrXHhmNm4gcFx4ZTludGVrZW4gc3pvbWJhdG9uIi5zcGxpdCgiICIpO2Z1bmN0aW9uIG0oQSxELFAsVSl7dmFyIEk9QTtzd2l0Y2goUCl7Y2FzZSJzIjpyZXR1cm4gVXx8'@;
put 'RD8iblx4ZTloXHhlMW55IG1ceGUxc29kcGVyYyI6Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmNlIjtjYXNlInNzIjpyZXR1cm4gSSsoVXx8RCk/IiBtXHhlMXNvZHBlcmMiOiIgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJtIjpyZXR1cm4iZWd5IisoVXx8RD8iIHBlcmMiOiIgcGVyY2UiKTtjYXNl'@;
put 'Im1tIjpyZXR1cm4gSSsoVXx8RD8iIHBlcmMiOiIgcGVyY2UiKTtjYXNlImgiOnJldHVybiJlZ3kiKyhVfHxEPyIgXHhmM3JhIjoiIFx4ZjNyXHhlMWphIik7Y2FzZSJoaCI6cmV0dXJuIEkrKFV8fEQ/IiBceGYzcmEiOiIgXHhmM3JceGUxamEiKTtjYXNlImQiOnJldHVybiJlZ3kiKyhVfHxE'@;
put 'PyIgbmFwIjoiIG5hcGphIik7Y2FzZSJkZCI6cmV0dXJuIEkrKFV8fEQ/IiBuYXAiOiIgbmFwamEiKTtjYXNlIk0iOnJldHVybiJlZ3kiKyhVfHxEPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nhc2UiTU0iOnJldHVybiBJKyhVfHxEPyIgaFx4ZjNuYXAiOiIgaFx4ZjNuYXBqYSIpO2Nh'@;
put 'c2UieSI6cmV0dXJuImVneSIrKFV8fEQ/IiBceGU5diI6IiBceGU5dmUiKTtjYXNlInl5IjpyZXR1cm4gSSsoVXx8RD8iIFx4ZTl2IjoiIFx4ZTl2ZSIpfXJldHVybiIifWZ1bmN0aW9uIFgoQSl7cmV0dXJuKEE/IiI6IlttXHhmYWx0XSAiKSsiWyIrYlt0aGlzLmRheSgpXSsiXSBMVFsta29y'@;
put 'XSJ9ZWUuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhmM2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8i'@;
put 'KSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRk'@;
put 'X3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8i'@;
put 'KSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1tIn0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1'@;
put 'bmN0aW9uKEEpe3JldHVybiJ1Ij09PUEuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKEEsRCxQKXtyZXR1cm4gQTwxMj8hMD09PVA/ImRlIjoiREUiOiEwPT09UD8iZHUiOiJEVSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJb'@;
put 'aG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gWC5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVnbmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gWC5jYWxsKHRoaXMsITEpfSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0'@;
put 'dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6bSxzczptLG0sbW06bSxoOm0saGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDU5'@;
put 'OTAwOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiaHktYW0iLHttb250aHM6e2Zvcm1hdDoiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1'@;
put 'MDU3ZVx1MDU2MVx1MDU4MFx1MDU2Yl9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZcdTA1NmJfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZiXHUwNTZjXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2Rc'@;
put 'dTA1NmJfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZFx1MDU2Yl9cdTA1N2RcdTA1NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTcw'@;
put 'XHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NjRcdTA1NjVcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBc'@;
put 'dTA1NmIiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTc2XHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU4M1x1MDU2NVx1MDU3Zlx1MDU4MFx1MDU3ZVx1MDU2MVx1MDU4MF9cdTA1NzRcdTA1NjFcdTA1ODBcdTA1N2ZfXHUwNTYxXHUwNTdhXHUwNTgwXHUwNTZi'@;
put 'XHUwNTZjX1x1MDU3NFx1MDU2MVx1MDU3NVx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1NmJcdTA1N2RfXHUwNTcwXHUwNTc4XHUwNTgyXHUwNTZjXHUwNTZiXHUwNTdkX1x1MDU4NVx1MDU2M1x1MDU3OFx1MDU3ZFx1MDU3Zlx1MDU3OFx1MDU3ZF9cdTA1N2RcdTA1'@;
put 'NjVcdTA1N2FcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTcwXHUwNTc4XHUwNTZmXHUwNTdmXHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwX1x1MDU3Nlx1MDU3OFx1MDU3NVx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NjRcdTA1NjVcdTA1'@;
put 'NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODAiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0OiJcdTA1NzBcdTA1NzZcdTA1N2VfXHUwNTgzXHUwNTdmXHUwNTgwX1x1MDU3NFx1MDU4MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBfXHUwNTc0XHUwNTc1XHUwNTdkX1x1MDU3'@;
put 'MFx1MDU3Nlx1MDU3ZF9cdTA1NzBcdTA1NmNcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTdkX1x1MDU3ZFx1MDU3YVx1MDU3Zl9cdTA1NzBcdTA1NmZcdTA1N2ZfXHUwNTc2XHUwNTc0XHUwNTYyX1x1MDU2NFx1MDU2Zlx1MDU3ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNTZmXHUwNTZiXHUw'@;
put 'NTgwXHUwNTYxXHUwNTZmXHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2Zlx1MDU3OFx1MDU4Mlx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NjVcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTc5XHUwNTc4XHUwNTgwXHUwNTY1XHUw'@;
put 'NTg0XHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3MFx1MDU2Ylx1MDU3Nlx1MDU2M1x1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1MDU2Yl9cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJcdTA1NjFcdTA1NjlfXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTYxXHUwNTY5Ii5zcGxpdCgi'@;
put 'XyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDU2Zlx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTg0X1x1MDU3OVx1MDU4MFx1MDU4NF9cdTA1NzBcdTA1NzZcdTA1NjNfXHUwNTc4XHUwNTgyXHUwNTgwXHUwNTYyX1x1MDU3N1x1MDU2Mlx1MDU2OSIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5c01pbjoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBcdTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgi'@;
put 'XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA1NjkuIixMTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA1NjkuLCBISDptbSJ9LGNhbGVu'@;
put 'ZGFyOntzYW1lRGF5OiJbXHUwNTYxXHUwNTc1XHUwNTdkXHUwNTg1XHUwNTgwXSBMVCIsbmV4dERheToiW1x1MDU3ZVx1MDU2MVx1MDU3Mlx1MDU2OF0gTFQiLGxhc3REYXk6IltcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFtc'@;
put 'dTA1ODVcdTA1ODBcdTA1NjggXHUwNTZhXHUwNTYxXHUwNTc0XHUwNTY4XSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltcdTA1NjFcdTA1NzZcdTA1ODFcdTA1NjFcdTA1NmVdIGRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0s'@;
put 'c2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNTcwXHUwNTY1XHUwNTdmXHUwNTc4IixwYXN0OiIlcyBcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2IiLHM6Ilx1MDU3NFx1MDU2YiBcdTA1ODRcdTA1NjFcdTA1NzZcdTA1NmIgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgw'@;
put 'XHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixzczoiJWQgXHUwNTdlXHUwNTYxXHUwNTc1XHUwNTgwXHUwNTZmXHUwNTc1XHUwNTYxXHUwNTc2IixtOiJcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLG1tOiIlZCBcdTA1ODBcdTA1NzhcdTA1N2FcdTA1NjUiLGg6Ilx1MDU2YVx1MDU2MVx1MDU3'@;
put 'NCIsaGg6IiVkIFx1MDU2YVx1MDU2MVx1MDU3NCIsZDoiXHUwNTg1XHUwNTgwIixkZDoiJWQgXHUwNTg1XHUwNTgwIixNOiJcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLE1NOiIlZCBcdTA1NjFcdTA1NzRcdTA1NmJcdTA1N2QiLHk6Ilx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiIseXk6IiVk'@;
put 'IFx1MDU3Zlx1MDU2MVx1MDU4MFx1MDU2YiJ9LG1lcmlkaWVtUGFyc2U6L1x1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MXxcdTA1NjFcdTA1N2NcdTA1NjFcdTA1N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjF8XHUwNTgxXHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZm'@;
put 'XHUwNTdlXHUwNTYxfFx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3Ni8saXNQTTpmdW5jdGlvbihtKXtyZXR1cm4vXihcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUw'@;
put 'NTc1XHUwNTYxXHUwNTc2KSQvLnRlc3QobSl9LG1lcmlkaWVtOmZ1bmN0aW9uKG0pe3JldHVybiBtPDQ/Ilx1MDU2M1x1MDU2Ylx1MDU3N1x1MDU2NVx1MDU4MFx1MDU3ZVx1MDU2MSI6bTwxMj8iXHUwNTYxXHUwNTdjXHUwNTYxXHUwNTdlXHUwNTc4XHUwNTdmXHUwNTdlXHUwNTYxIjptPDE3'@;
put 'PyJcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjEiOiJcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9fFxkezEsMn0tKFx1MDU2Ylx1MDU3NnxcdTA1ODBcdTA1NjQp'@;
put 'LyxvcmRpbmFsOmZ1bmN0aW9uKG0sWCl7c3dpdGNoKFgpe2Nhc2UiREREIjpjYXNlInciOmNhc2UiVyI6Y2FzZSJERERvIjpyZXR1cm4gMT09PW0/bSsiLVx1MDU2Ylx1MDU3NiI6bSsiLVx1MDU4MFx1MDU2NCI7ZGVmYXVsdDpyZXR1cm4gbX19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkz'@;
put 'MTM3KSl9LDMwNzIzOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVzX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVy'@;
put 'X0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtk'@;
put 'YXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZ'@;
put 'WVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLFgpe3JldHVybiAxMj09PW0mJihtPTApLCJw'@;
put 'YWdpIj09PVg/bToic2lhbmciPT09WD9tPj0xMT9tOm0rMTI6InNvcmUiPT09WHx8Im1hbGFtIj09PVg/bSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKG0sWCx3KXtyZXR1cm4gbTwxMT8icGFnaSI6bTwxNT8ic2lhbmciOm08MTk/InNvcmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1l'@;
put 'RGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRp'@;
put 'bWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVk'@;
put 'IGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oUig5MzEzNykpfSw0MTA5ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBiKHcpe3JldHVybiB3JTEwMD09MTF8fHclMTAhPTF9ZnVuY3Rp'@;
put 'b24gbSh3LEEsRCxQKXt2YXIgVT13KyIgIjtzd2l0Y2goRCl7Y2FzZSJzIjpyZXR1cm4gQXx8UD8ibm9ra3JhciBzZWtceGZhbmR1ciI6Im5va2tydW0gc2VrXHhmYW5kdW0iO2Nhc2Uic3MiOnJldHVybiBiKHcpP1UrKEF8fFA/InNla1x4ZmFuZHVyIjoic2VrXHhmYW5kdW0iKTpVKyJzZWtc'@;
put 'eGZhbmRhIjtjYXNlIm0iOnJldHVybiBBPyJtXHhlZG5ceGZhdGEiOiJtXHhlZG5ceGZhdHUiO2Nhc2UibW0iOnJldHVybiBiKHcpP1UrKEF8fFA/Im1ceGVkblx4ZmF0dXIiOiJtXHhlZG5ceGZhdHVtIik6QT9VKyJtXHhlZG5ceGZhdGEiOlUrIm1ceGVkblx4ZmF0dSI7Y2FzZSJoaCI6cmV0'@;
put 'dXJuIGIodyk/VSsoQXx8UD8ia2x1a2t1c3R1bmRpciI6ImtsdWtrdXN0dW5kdW0iKTpVKyJrbHVra3VzdHVuZCI7Y2FzZSJkIjpyZXR1cm4gQT8iZGFndXIiOlA/ImRhZyI6ImRlZ2kiO2Nhc2UiZGQiOnJldHVybiBiKHcpP0E/VSsiZGFnYXIiOlUrKFA/ImRhZ2EiOiJkXHhmNmd1bSIpOkE/'@;
put 'VSsiZGFndXIiOlUrKFA/ImRhZyI6ImRlZ2kiKTtjYXNlIk0iOnJldHVybiBBPyJtXHhlMW51XHhmMHVyIjpQPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSI7Y2FzZSJNTSI6cmV0dXJuIGIodyk/QT9VKyJtXHhlMW51XHhmMGlyIjpVKyhQPyJtXHhlMW51XHhmMGkiOiJtXHhlMW51XHhm'@;
put 'MHVtIik6QT9VKyJtXHhlMW51XHhmMHVyIjpVKyhQPyJtXHhlMW51XHhmMCI6Im1ceGUxbnVceGYwaSIpO2Nhc2UieSI6cmV0dXJuIEF8fFA/Ilx4ZTFyIjoiXHhlMXJpIjtjYXNlInl5IjpyZXR1cm4gYih3KT9VKyhBfHxQPyJceGUxciI6Ilx4ZTFydW0iKTpVKyhBfHxQPyJceGUxciI6Ilx4'@;
put 'ZTFyaSIpfX1lZS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJf'@;
put 'IiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVkYWd1cl9taVx4ZjB2aWt1ZGFndXJfZmlt'@;
put 'bXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVyX01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgi'@;
put 'XyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJb'@;
put 'XHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0'@;
put 'aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6bSxzczptLG0sbW06bSxoOiJrbHVra3VzdHVuZCIsaGg6bSxkOm0sZGQ6bSxNOm0sTU06bSx5Om0seXk6bX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIl'@;
put 'ZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDEwOTY3OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiaXQtY2giLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVnbm9f'@;
put 'bHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhlY19t'@;
put 'YXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJfIiks'@;
put 'bG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltPZ2dpIGFsbGVdIExUIixu'@;
put 'ZXh0RGF5OiJbRG9tYW5pIGFsbGVdIExUIixuZXh0V2VlazoiZGRkZCBbYWxsZV0gTFQiLGxhc3REYXk6IltJZXJpIGFsbGVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKT8iW2xhIHNjb3JzYV0gZGRkZCBbYWxsZV0gTFQiOiJbbG8gc2NvcnNvXSBkZGRk'@;
put 'IFthbGxlXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24obSl7cmV0dXJuKC9eWzAtOV0uKyQvLnRlc3QobSk/InRyYSI6ImluIikrIiAiK219LHBhc3Q6IiVzIGZhIixzOiJhbGN1bmkgc2Vjb25kaSIsc3M6IiVkIHNlY29uZGkiLG06InVuIG1pbnV0'@;
put 'byIsbW06IiVkIG1pbnV0aSIsaDoidW4nb3JhIixoaDoiJWQgb3JlIixkOiJ1biBnaW9ybm8iLGRkOiIlZCBnaW9ybmkiLE06InVuIG1lc2UiLE1NOiIlZCBtZXNpIix5OiJ1biBhbm5vIix5eToiJWQgYW5uaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFs'@;
put 'OiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDQ0Nzg3OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgiaXQiLHttb250aHM6Imdlbm5haW9fZmViYnJhaW9fbWFyem9fYXByaWxlX21hZ2dpb19naXVn'@;
put 'bm9fbHVnbGlvX2Fnb3N0b19zZXR0ZW1icmVfb3R0b2JyZV9ub3ZlbWJyZV9kaWNlbWJyZSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiZ2VuX2ZlYl9tYXJfYXByX21hZ19naXVfbHVnX2Fnb19zZXRfb3R0X25vdl9kaWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRvbWVuaWNhX2x1bmVkXHhl'@;
put 'Y19tYXJ0ZWRceGVjX21lcmNvbGVkXHhlY19naW92ZWRceGVjX3ZlbmVyZFx4ZWNfc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRvbV9sdW5fbWFyX21lcl9naW9fdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWVfZ2lfdmVfc2EiLnNwbGl0KCJf'@;
put 'IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1'@;
put 'cm4iW09nZ2kgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0RvbWFuaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0s'@;
put 'bmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW0llcmkgYSIrKHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3Vy'@;
put 'cygpPyIgIjoibGwnIikrIl1MVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbTGEgc2NvcnNhXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIjoiW0xvIHNjb3Jzb10gZGRkZCBbYSIr'@;
put 'KHRoaXMuaG91cnMoKT4xPyJsbGUgIjowPT09dGhpcy5ob3VycygpPyIgIjoibGwnIikrIl1MVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InRyYSAlcyIscGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoiJWQgc2Vjb25kaSIsbToidW4gbWludXRvIixt'@;
put 'bToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsdzoidW5hIHNldHRpbWFuYSIsd3c6IiVkIHNldHRpbWFuZSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9y'@;
put 'ZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMTMyNzpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoImphIix7ZXJhczpbe3NpbmNlOiIyMDE5'@;
put 'LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIsYWJicjoiSCJ9LHtzaW5jZToi'@;
put 'MTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIsbmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5MjdcdTZiNjMiLG5hcnJvdzoiXHUz'@;
put 'MzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEiLG9mZnNldDoxLG5hbWU6Ilx1'@;
put 'ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8oXHU1MTQzfFxkKylcdTVlNzQv'@;
put 'LGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24obSxYKXtyZXR1cm4iXHU1MTQzIj09PVhbMV0/MTpwYXJzZUludChYWzFdfHxtLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1'@;
put 'NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2Rh'@;
put 'eXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc'@;
put 'dTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6'@;
put 'IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0vREQiLGxsOiJZWVlZXHU1ZTc0'@;
put 'TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJc'@;
put 'dTUzNDhcdTVmOGMiPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxYLHcpe3JldHVybiBtPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVdIExUIixuZXh0V2VlazpmdW5j'@;
put 'dGlvbihtKXtyZXR1cm4gbS53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihtKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1tLndlZWsoKT8iW1x1NTE0OFx1OTAz'@;
put 'MV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihtLFgpe3N3aXRjaChYKXtjYXNlInkiOnJldHVybiAxPT09bT8iXHU1MTQzXHU1ZTc0IjptKyJcdTVlNzQiO2Nhc2UiZCI6Y2Fz'@;
put 'ZSJEIjpjYXNlIkRERCI6cmV0dXJuIG0rIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gbX19LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToiJWRcdTUyMDYiLGg6IjFcdTY2'@;
put 'NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIxXHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5OiIlZFx1NWU3NCJ9fSl9KFIoOTMxMzcpKX0sNTA4MTQ6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0'@;
put 'aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikph'@;
put 'bl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1NlbF9SZWJfS2VtX0plbV9T'@;
put 'ZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1t'@;
put 'IixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihtLFgpe3JldHVybiAxMj09PW0mJihtPTApLCJlbmppbmciPT09WD9tOiJzaXlhbmciPT09WD9tPj0x'@;
put 'MT9tOm0rMTI6InNvbnRlbiI9PT1YfHwibmRhbHUiPT09WD9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24obSxYLHcpe3JldHVybiBtPDExPyJlbmppbmciOm08MTU/InNpeWFuZyI6bTwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToiW0RpbnRlbiBwdW5pa28g'@;
put 'cHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7'@;
put 'ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixkOiJzZWRpbnRlbiIsZGQ6'@;
put 'IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sOTc1NjY6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJr'@;
put 'YSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRlXHUxMGUwXHUxMGQ4'@;
put 'XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBlMlx1MTBkZF9cdTEw'@;
put 'ZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkOF9cdTEw'@;
put 'ZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9cdTEwZGJcdTEwZDBc'@;
put 'dTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntzdGFu'@;
put 'ZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEwZDdcdTEwZWVcdTEw'@;
put 'ZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEwZDBcdTEwZDFcdTEw'@;
put 'ZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1'@;
put 'MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1'@;
put 'MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1MTBkOVx1MTBkNVx1'@;
put 'MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUxMGQ1X1x1MTBkZFx1'@;
put 'MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1N'@;
put 'TU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1cdTEwZDZcdTEwZDRd'@;
put 'IixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVjXHUxMGQ4XHUxMGRj'@;
put 'XHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihtKXtyZXR1cm4gbS5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDd8XHUxMGVj'@;
put 'XHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihYLHcsQSl7cmV0dXJuIlx1MTBkOCI9PT1BP3crIlx1MTBlOFx1MTBkOCI6dytBKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24obSl7cmV0dXJuLyhcdTEwZWNcdTEw'@;
put 'ZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChtKT9tLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEwZDhcdTEwZTEgXHUx'@;
put 'MGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChtKT9tLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6bX0sczoiXHUxMGUwXHUxMGQwXHUxMGRiXHUx'@;
put 'MGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixoOiJcdTEwZTFc'@;
put 'dTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUxMGQ1XHUxMGQ0Iix5'@;
put 'OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0aW9uKG0pe3JldHVy'@;
put 'biAwPT09bT9tOjE9PT1tP20rIi1cdTEwZGFcdTEwZDgiOm08MjB8fG08PTEwMCYmbSUyMD09MHx8bSUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK206bSsiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDkwMzY6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVl'@;
put 'KXsidXNlIHN0cmljdCI7dmFyIGI9ezA6Ii1cdTA0NDhcdTA0NTYiLDE6Ii1cdTA0NDhcdTA0NTYiLDI6Ii1cdTA0NDhcdTA0NTYiLDM6Ii1cdTA0NDhcdTA0NTYiLDQ6Ii1cdTA0NDhcdTA0NTYiLDU6Ii1cdTA0NDhcdTA0NTYiLDY6Ii1cdTA0NDhcdTA0NGIiLDc6Ii1cdTA0NDhcdTA0NTYi'@;
put 'LDg6Ii1cdTA0NDhcdTA0NTYiLDk6Ii1cdTA0NDhcdTA0NGIiLDEwOiItXHUwNDQ4XHUwNDRiIiwyMDoiLVx1MDQ0OFx1MDQ0YiIsMzA6Ii1cdTA0NDhcdTA0NGIiLDQwOiItXHUwNDQ4XHUwNDRiIiw1MDoiLVx1MDQ0OFx1MDQ1NiIsNjA6Ii1cdTA0NDhcdTA0NGIiLDcwOiItXHUwNDQ4XHUw'@;
put 'NDU2Iiw4MDoiLVx1MDQ0OFx1MDQ1NiIsOTA6Ii1cdTA0NDhcdTA0NGIiLDEwMDoiLVx1MDQ0OFx1MDQ1NiJ9O2VlLmRlZmluZUxvY2FsZSgia2siLHttb250aHM6Ilx1MDQ5Ylx1MDQzMFx1MDRhM1x1MDQ0Mlx1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0OWJcdTA0M2ZcdTA0MzBcdTA0M2RfXHUw'@;
put 'NDNkXHUwNDMwXHUwNDQzXHUwNDQwXHUwNDRiXHUwNDM3X1x1MDQ0MVx1MDRkOVx1MDQ0M1x1MDQ1Nlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0M2NcdTA0NGJcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQzXHUwNDQxXHUwNDRiXHUwNDNjX1x1MDQ0OFx1MDQ1Nlx1MDQzYlx1MDQzNFx1MDQzNV9c'@;
put 'dTA0NDJcdTA0MzBcdTA0M2NcdTA0NGJcdTA0MzdfXHUwNDliXHUwNDRiXHUwNDQwXHUwNDNhXHUwNGFmXHUwNDM5XHUwNDM1XHUwNDNhX1x1MDQ5Ylx1MDQzMFx1MDQzN1x1MDQzMFx1MDQzZF9cdTA0OWJcdTA0MzBcdTA0NDBcdTA0MzBcdTA0NDhcdTA0MzBfXHUwNDM2XHUwNDM1XHUwNDNi'@;
put 'XHUwNDQyXHUwNDNlXHUwNDliXHUwNDQxXHUwNDMwXHUwNDNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0OWJcdTA0MzBcdTA0YTNfXHUwNDMwXHUwNDliXHUwNDNmX1x1MDQzZFx1MDQzMFx1MDQ0M19cdTA0NDFcdTA0ZDlcdTA0NDNfXHUwNDNjXHUwNDMwXHUwNDNjX1x1MDQzY1x1'@;
put 'MDQzMFx1MDQ0M19cdTA0NDhcdTA0NTZcdTA0M2JfXHUwNDQyXHUwNDMwXHUwNDNjX1x1MDQ5Ylx1MDQ0Ylx1MDQ0MF9cdTA0OWJcdTA0MzBcdTA0MzdfXHUwNDliXHUwNDMwXHUwNDQwX1x1MDQzNlx1MDQzNVx1MDQzYiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDM2XHUwNDM1XHUwNDNh'@;
put 'XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQzNFx1MDRhZlx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0NDFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNGQ5XHUwNDQwXHUwNDQxXHUwNDM1XHUwNDNk'@;
put 'XHUwNDMxXHUwNDU2X1x1MDQzMVx1MDQzNVx1MDQzOVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzZcdTA0YjFcdTA0M2NcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzNlx1MDQzNVx1MDQzYV9c'@;
put 'dTA0MzRcdTA0YWZcdTA0MzlfXHUwNDQxXHUwNDM1XHUwNDM5X1x1MDQ0MVx1MDRkOVx1MDQ0MF9cdTA0MzFcdTA0MzVcdTA0MzlfXHUwNDM2XHUwNGIxXHUwNDNjX1x1MDQ0MVx1MDQzNVx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDM2XHUwNDNhX1x1MDQzNFx1MDQzOV9c'@;
put 'dTA0NDFcdTA0MzlfXHUwNDQxXHUwNDQwX1x1MDQzMVx1MDQzOV9cdTA0MzZcdTA0M2NfXHUwNDQxXHUwNDNkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ'@;
put 'WSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1MDRhZlx1MDQzM1x1MDQ1Nlx1MDQzZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0RGF5OiJbXHUwNDE1XHUwNDQwXHUwNDQyXHUwNDM1XHUw'@;
put 'NGEzIFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ4XHUwNDM1IFx1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLGxh'@;
put 'c3RXZWVrOiJbXHUwNGU4XHUwNDQyXHUwNDNhXHUwNDM1XHUwNDNkIFx1MDQzMFx1MDQzZlx1MDQ0Mlx1MDQzMFx1MDQzZFx1MDQ0Ylx1MDRhM10gZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMg'@;
put 'XHUwNDU2XHUwNDQ4XHUwNDU2XHUwNDNkXHUwNDM0XHUwNDM1IixwYXN0OiIlcyBcdTA0MzFcdTA0YjFcdTA0NDBcdTA0NGJcdTA0M2QiLHM6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNz'@;
put 'OiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLG06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLGg6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0NDFc'@;
put 'dTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDIiLGQ6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0M2FcdTA0YWZcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0YWZcdTA0M2QiLE06Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzBcdTA0'@;
put 'MzkiLE1NOiIlZCBcdTA0MzBcdTA0MzkiLHk6Ilx1MDQzMVx1MDQ1Nlx1MDQ0MCBcdTA0MzZcdTA0NGJcdTA0M2IiLHl5OiIlZCBcdTA0MzZcdTA0NGJcdTA0M2IifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NDhcdTA0NTZ8XHUwNDQ4XHUwNDRiKS8sb3JkaW5hbDpm'@;
put 'dW5jdGlvbihYKXtyZXR1cm4gWCsoYltYXXx8YltYJTEwXXx8YltYPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sMzY3NDY6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MTdlMSIsMjoiXHUx'@;
put 'N2UyIiwzOiJcdTE3ZTMiLDQ6Ilx1MTdlNCIsNToiXHUxN2U1Iiw2OiJcdTE3ZTYiLDc6Ilx1MTdlNyIsODoiXHUxN2U4Iiw5OiJcdTE3ZTkiLDA6Ilx1MTdlMCJ9LG09eyJcdTE3ZTEiOiIxIiwiXHUxN2UyIjoiMiIsIlx1MTdlMyI6IjMiLCJcdTE3ZTQiOiI0IiwiXHUxN2U1IjoiNSIsIlx1'@;
put 'MTdlNiI6IjYiLCJcdTE3ZTciOiI3IiwiXHUxN2U4IjoiOCIsIlx1MTdlOSI6IjkiLCJcdTE3ZTAiOiIwIn07ZWUuZGVmaW5lTG9jYWxlKCJrbSIse21vbnRoczoiXHUxNzk4XHUxNzgwXHUxNzlhXHUxN2I2X1x1MTc4MFx1MTdiYlx1MTc5OFx1MTdkMlx1MTc5N1x1MTdjOF9cdTE3OThcdTE3'@;
put 'YjhcdTE3OTNcdTE3YjZfXHUxNzk4XHUxN2MxXHUxNzlmXHUxN2I2X1x1MTdhN1x1MTc5Zlx1MTc5N1x1MTdiNl9cdTE3OThcdTE3YjdcdTE3OTBcdTE3YmJcdTE3OTNcdTE3YjZfXHUxNzgwXHUxNzgwXHUxN2QyXHUxNzgwXHUxNzhhXHUxN2I2X1x1MTc5Zlx1MTdiOFx1MTdhMFx1MTdiNl9c'@;
put 'dTE3ODBcdTE3ODlcdTE3ZDJcdTE3ODlcdTE3YjZfXHUxNzhmXHUxN2JiXHUxNzliXHUxN2I2X1x1MTc5Y1x1MTdiN1x1MTc4NVx1MTdkMlx1MTc4Nlx1MTdiN1x1MTc4MFx1MTdiNl9cdTE3OTJcdTE3ZDJcdTE3OTNcdTE3YmMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTc5OFx1MTc4'@;
put 'MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUxNzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1'@;
put 'MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBcdTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZf'@;
put 'XHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTE3YTJcdTE3YjZcdTE3OTFcdTE3YjdcdTE3OGZcdTE3ZDJcdTE3OTlfXHUxNzg1XHUxN2QwXHUxNzkzXHUxN2QyXHUxNzkxX1x1MTdhMlx1MTc4NFx1MTdkMlx1MTc4Mlx1MTdiNlx1MTc5YV9cdTE3OTZc'@;
put 'dTE3YmJcdTE3OTJfXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2EwXHUxNzlmXHUxN2QyXHUxNzk0XHUxNzhmXHUxN2I3XHUxN2NkX1x1MTc5Zlx1MTdiYlx1MTc4MFx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YzVcdTE3OWFcdTE3Y2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUxN2EyXHUx'@;
put 'N2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUxNzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTE3YTJcdTE3YjZfXHUxNzg1X1x1MTdhMl9cdTE3OTZfXHUxNzk2XHUxN2QyXHUxNzlhX1x1MTc5Zlx1MTdiYl9cdTE3OWYiLnNw'@;
put 'bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJp'@;
put 'ZGllbVBhcnNlOi9cdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODB8XHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Lyxpc1BNOmZ1bmN0aW9uKHcpe3JldHVybiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUiPT09d30sbWVyaWRpZW06ZnVuY3Rpb24odyxBLEQpe3JldHVy'@;
put 'biB3PDEyPyJcdTE3OTZcdTE3ZDJcdTE3OWFcdTE3YjlcdTE3ODAiOiJcdTE3OWJcdTE3ZDJcdTE3ODRcdTE3YjZcdTE3ODUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTc5MFx1MTdkMlx1MTc4NFx1MTdjM1x1MTc5M1x1MTdjMVx1MTdjNyBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExU'@;
put 'IixuZXh0RGF5OiJbXHUxNzlmXHUxN2QyXHUxN2EyXHUxN2MyXHUxNzgwIFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0RGF5OiJbXHUxNzk4XHUxN2QyXHUxNzlmXHUxN2I3XHUxNzliXHUxNzk4'@;
put 'XHUxN2I3XHUxNzg5IFx1MTc5OFx1MTdjOVx1MTdjNFx1MTc4NF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTE3OWZcdTE3OTRcdTE3ZDJcdTE3OGZcdTE3YjZcdTE3YTBcdTE3Y2RcdTE3OThcdTE3YmJcdTE3OTNdIFtcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixzYW1lRWxzZToiTCJ9'@;
put 'LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MTc5MVx1MTdjMFx1MTc4ZiIscGFzdDoiJXNcdTE3OThcdTE3YmJcdTE3OTMiLHM6Ilx1MTc5NFx1MTdjOVx1MTdiYlx1MTc5M1x1MTdkMlx1MTc5OFx1MTdiNlx1MTc5M1x1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsc3M6'@;
put 'IiVkIFx1MTc5Y1x1MTdiN1x1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixtbToiJWQgXHUxNzkzXHUxN2I2XHUxNzkxXHUxN2I4IixoOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OThcdTE3YzlcdTE3YzRcdTE3'@;
put 'ODQiLGhoOiIlZCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODQiLGQ6Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsZGQ6IiVkIFx1MTc5MFx1MTdkMlx1MTc4NFx1MTdjMyIsTToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzgxXHUxN2MyIixNTToiJWQgXHUxNzgx'@;
put 'XHUxN2MyIix5OiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYiLHl5OiIlZCBcdTE3ODZcdTE3ZDJcdTE3OTNcdTE3YjZcdTE3YzYifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cdTE3OTFcdTE3YjhcZHsxLDJ9LyxvcmRpbmFsOiJcdTE3OTFcdTE3'@;
put 'YjglZCIscHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTdlMVx1MTdlMlx1MTdlM1x1MTdlNFx1MTdlNVx1MTdlNlx1MTdlN1x1MTdlOFx1MTdlOVx1MTdlMF0vZyxmdW5jdGlvbihBKXtyZXR1cm4gbVtBXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVy'@;
put 'biB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMTQwMDc6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MGNlNyIsMjoiXHUwY2U4IiwzOiJcdTBj'@;
put 'ZTkiLDQ6Ilx1MGNlYSIsNToiXHUwY2ViIiw2OiJcdTBjZWMiLDc6Ilx1MGNlZCIsODoiXHUwY2VlIiw5OiJcdTBjZWYiLDA6Ilx1MGNlNiJ9LG09eyJcdTBjZTciOiIxIiwiXHUwY2U4IjoiMiIsIlx1MGNlOSI6IjMiLCJcdTBjZWEiOiI0IiwiXHUwY2ViIjoiNSIsIlx1MGNlYyI6IjYiLCJc'@;
put 'dTBjZWQiOiI3IiwiXHUwY2VlIjoiOCIsIlx1MGNlZiI6IjkiLCJcdTBjZTYiOiIwIn07ZWUuZGVmaW5lTG9jYWxlKCJrbiIse21vbnRoczoiXHUwYzljXHUwY2E4XHUwY2I1XHUwY2IwXHUwY2JmX1x1MGNhYlx1MGNjNlx1MGNhY1x1MGNjZFx1MGNiMFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBj'@;
put 'YWVcdTBjYmVcdTBjYjBcdTBjY2RcdTBjOWFcdTBjY2RfXHUwYzhmXHUwY2FhXHUwY2NkXHUwY2IwXHUwY2JmXHUwY2IyXHUwY2NkX1x1MGNhZVx1MGNjNlx1MGNkNV9cdTBjOWNcdTBjYzJcdTBjYThcdTBjY2RfXHUwYzljXHUwY2MxXHUwY2IyXHUwY2M2XHUwY2Q2X1x1MGM4Nlx1MGM5N1x1'@;
put 'MGNiOFx1MGNjZFx1MGM5Zlx1MGNjZF9cdTBjYjhcdTBjYzZcdTBjYWFcdTBjY2RcdTBjOWZcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwYzg1XHUwYzk1XHUwY2NkXHUwYzlmXHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FjXHUwY2IwXHUwY2NkX1x1MGNhOFx1MGNiNVx1MGNjNlx1'@;
put 'MGM4Mlx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYTFcdTBjYmZcdTBjYjhcdTBjYzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2QiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGM5Y1x1MGNhOF9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBfXHUwY2FlXHUwY2JlXHUwY2IwXHUwY2Nk'@;
put 'XHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBjOTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBj'@;
put 'Y2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNV9cdTBjYThcdTBjYjVcdTBjYzZcdTBjODJfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyIi5zcGxpdCgiXyIpLG1vbnRoc1Bh'@;
put 'cnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGNhZFx1MGNiZVx1MGNhOFx1MGNjMVx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVcdTBjYWVcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2FlXHUwYzgyXHUwYzk3XHUwY2IzXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhY1x1'@;
put 'MGNjMVx1MGNhN1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBjOTdcdTBjYzFcdTBjYjBcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I2XHUwY2MxXHUwYzk1XHUwY2NkXHUwY2IwXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNhOFx1MGNiZlx1MGNiNVx1MGNiZVx1MGNiMCIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5c1Nob3J0OiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM19cdTBjYWNcdTBjYzFcdTBjYTdfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxX1x1MGNiNlx1MGNjMVx1MGM5NVx1'@;
put 'MGNjZFx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGNhZFx1MGNiZV9cdTBjYjhcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2FlXHUwYzgyX1x1MGNhY1x1MGNjMV9cdTBjOTdcdTBjYzFfXHUwY2I2XHUwY2MxX1x1MGNiNiIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSwgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBjODdcdTBj'@;
put 'ODJcdTBjYTZcdTBjYzFdIExUIixuZXh0RGF5OiJbXHUwY2E4XHUwY2JlXHUwY2IzXHUwY2M2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwY2E4XHUwY2JmXHUwY2E4XHUwY2NkXHUwY2E4XHUwY2M2XSBMVCIsbGFzdFdlZWs6IltcdTBjOTVcdTBjYzZcdTBjYzJcdTBj'@;
put 'YThcdTBjYzZcdTBjYWZdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBjYThcdTBjODJcdTBjYTRcdTBjYjAiLHBhc3Q6IiVzIFx1MGNiOVx1MGNiZlx1MGM4Mlx1MGNhNlx1MGNjNiIsczoiXHUwYzk1XHUwY2M2XHUwY2IyXHUwY2I1XHUwY2Mx'@;
put 'IFx1MGM5NVx1MGNjZFx1MGNiN1x1MGNhM1x1MGM5N1x1MGNiM1x1MGNjMSIsc3M6IiVkIFx1MGNiOFx1MGNjNlx1MGM5NVx1MGNjNlx1MGM4Mlx1MGNhMVx1MGNjMVx1MGM5N1x1MGNiM1x1MGNjMSIsbToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNi'@;
put 'Zlx1MGNiNyIsbW06IiVkIFx1MGNhOFx1MGNiZlx1MGNhZVx1MGNiZlx1MGNiNyIsaDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsaGg6IiVkIFx1MGM5N1x1MGM4Mlx1MGM5Zlx1MGNjNiIsZDoiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1'@;
put 'MGNhNlx1MGNiZlx1MGNhOCIsZGQ6IiVkIFx1MGNhNlx1MGNiZlx1MGNhOCIsTToiXHUwYzkyXHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIsTU06IiVkIFx1MGNhNFx1MGNiZlx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNjMSIseToiXHUwYzky'@;
put 'XHUwYzgyXHUwY2E2XHUwY2MxIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyIseXk6IiVkIFx1MGNiNVx1MGNiMFx1MGNjZFx1MGNiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBjZTdcdTBjZThcdTBjZTlcdTBjZWFcdTBjZWJcdTBjZWNcdTBjZWRcdTBj'@;
put 'ZWVcdTBjZWZcdTBjZTZdL2csZnVuY3Rpb24oQSl7cmV0dXJuIG1bQV19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEEpe3JldHVybiBiW0FdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1'@;
put 'MGNiZnxcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzZ8XHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4fFx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNi8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsQSl7cmV0dXJuIDEy'@;
put 'PT09dyYmKHc9MCksIlx1MGNiMFx1MGNiZVx1MGNhNFx1MGNjZFx1MGNiMFx1MGNiZiI9PT1BP3c8ND93OncrMTI6Ilx1MGNhY1x1MGNjNlx1MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI9PT1BP3c6Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNj'@;
put 'ZFx1MGNhOCI9PT1BP3c+PTEwP3c6dysxMjoiXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2Ij09PUE/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsQSxEKXtyZXR1cm4gdzw0PyJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiOnc8MTA/Ilx1MGNhY1x1MGNjNlx1'@;
put 'MGNiM1x1MGNiZlx1MGM5N1x1MGNjZFx1MGM5N1x1MGNjNiI6dzwxNz8iXHUwY2FlXHUwY2E3XHUwY2NkXHUwY2FmXHUwY2JlXHUwY2I5XHUwY2NkXHUwY2E4Ijp3PDIwPyJcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYiOiJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYifSxk'@;
put 'YXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MGNhOFx1MGNjNlx1MGNkNSkvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrIlx1MGNhOFx1MGNjNlx1MGNkNSJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShSKDkzMTM3KSl9LDcyNzA0OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5j'@;
put 'dGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgia28iLHttb250aHM6IjFcdWM2ZDRfMlx1YzZkNF8zXHVjNmQ0XzRcdWM2ZDRfNVx1YzZkNF82XHVjNmQ0XzdcdWM2ZDRfOFx1YzZkNF85XHVjNmQ0XzEwXHVjNmQ0XzExXHVjNmQ0XzEyXHVjNmQ0Ii5zcGxpdCgiXyIpLG1v'@;
put 'bnRoc1Nob3J0OiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHVjNzdjXHVjNjk0XHVjNzdjX1x1YzZkNFx1YzY5NFx1'@;
put 'Yzc3Y19cdWQ2NTRcdWM2OTRcdWM3N2NfXHVjMjE4XHVjNjk0XHVjNzdjX1x1YmFhOVx1YzY5NFx1Yzc3Y19cdWFlMDhcdWM2OTRcdWM3N2NfXHVkMWEwXHVjNjk0XHVjNzdjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVh'@;
put 'ZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHVjNzdjX1x1YzZkNF9cdWQ2NTRfXHVjMjE4X1x1YmFhOV9cdWFlMDhfXHVkMWEwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIixMVFM6IkEgaDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZ'@;
put 'XHViMTQ0IE1NTU0gRFx1Yzc3YyIsTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBBIGg6bW0iLExMTEw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIixsOiJZWVlZLk1NLkRELiIsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIixsbGw6IllZWVlcdWIxNDQgTU1N'@;
put 'TSBEXHVjNzdjIEEgaDptbSIsbGxsbDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgZGRkZCBBIGg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiXHVjNjI0XHViMjk4IExUIixuZXh0RGF5OiJcdWIwYjRcdWM3N2MgTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJcdWM1YjRcdWM4MWMg'@;
put 'TFQiLGxhc3RXZWVrOiJcdWM5YzBcdWIwOWNcdWM4ZmMgZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHVkNmM0IixwYXN0OiIlcyBcdWM4MDQiLHM6Ilx1YmE4NyBcdWNkMDgiLHNzOiIlZFx1Y2QwOCIsbToiMVx1YmQ4NCIsbW06IiVkXHViZDg0Iixo'@;
put 'OiJcdWQ1NWMgXHVjMmRjXHVhYzA0IixoaDoiJWRcdWMyZGNcdWFjMDQiLGQ6Ilx1ZDU1OFx1YjhlOCIsZGQ6IiVkXHVjNzdjIixNOiJcdWQ1NWMgXHViMmVjIixNTToiJWRcdWIyZWMiLHk6Ilx1Yzc3YyBcdWIxNDQiLHl5OiIlZFx1YjE0NCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xk'@;
put 'ezEsMn0oXHVjNzdjfFx1YzZkNHxcdWM4ZmMpLyxvcmRpbmFsOmZ1bmN0aW9uKG0sWCl7c3dpdGNoKFgpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIG0rIlx1Yzc3YyI7Y2FzZSJNIjpyZXR1cm4gbSsiXHVjNmQ0IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIG0rIlx1YzhmYyI7'@;
put 'ZGVmYXVsdDpyZXR1cm4gbX19LG1lcmlkaWVtUGFyc2U6L1x1YzYyNFx1YzgwNHxcdWM2MjRcdWQ2YzQvLGlzUE06ZnVuY3Rpb24obSl7cmV0dXJuIlx1YzYyNFx1ZDZjNCI9PT1tfSxtZXJpZGllbTpmdW5jdGlvbihtLFgsdyl7cmV0dXJuIG08MTI/Ilx1YzYyNFx1YzgwNCI6Ilx1YzYyNFx1'@;
put 'ZDZjNCJ9fSl9KFIoOTMxMzcpKX0sMzQyNDI6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4'@;
put 'Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LG09eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn0sWD1bIlx1'@;
put 'MDZhOVx1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2MzRcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MmEiLCJcdTA2MjZcdTA2MjdcdTA2MzJcdTA2MjdcdTA2MzEiLCJcdTA2NDZcdTA2Y2NcdTA2MzNcdTA2MjdcdTA2NDYi'@;
put 'LCJcdTA2MjZcdTA2MjdcdTA2Y2NcdTA2MjdcdTA2MzEiLCJcdTA2MmRcdTA2NDhcdTA2MzJcdTA2ZDVcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MmFcdTA2ZDVcdTA2NDVcdTA2NDVcdTA2NDhcdTA2MzIiLCJcdTA2MjZcdTA2MjdcdTA2MjgiLCJcdTA2MjZcdTA2ZDVcdTA2Y2Nc'@;
put 'dTA2NDRcdTA2NDhcdTA2NDhcdTA2NDQiLCJcdTA2MmFcdTA2MzRcdTA2MzFcdTA2Y2NcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNjQzXHUwNmQ1XHUwNjQ1IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDYyZlx1MDY0OFx1MDY0OFx1MDZkNVx1MDY0NSIs'@;
put 'Ilx1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0Nlx1MDZjYyBcdTA2Y2NcdTA2ZDVcdTA2YTlcdTA2ZDVcdTA2NDUiXTtlZS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOlgsbW9udGhzU2hvcnQ6WCx3ZWVrZGF5czoiXHUwNmNjXHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUy'@;
put 'MDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVcdTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUw'@;
put 'NjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUy'@;
put 'MDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0'@;
put 'XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUyMDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0'@;
put 'N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1t'@;
put 'IixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1'@;
put 'MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihBKXtyZXR1cm4vXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KEEpfSxtZXJpZGllbTpmdW5jdGlvbihBLEQsUCl7cmV0dXJuIEE8MTI/Ilx1MDYyOFx1'@;
put 'MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMxXHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1'@;
put 'MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1'@;
put 'MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1'@;
put 'MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2'@;
put 'NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1'@;
put 'MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIl'@;
put 'ZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBc'@;
put 'dTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihBKXtyZXR1cm4gQS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKEQpe3JldHVybiBtW0RdfSkucmVwbGFjZSgvXHUwNjBj'@;
put 'L2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihBKXtyZXR1cm4gQS5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEQpe3JldHVybiBiW0RdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShSKDkzMTM3KSl9LDM4NzkwOmZ1bmN0aW9uKCRlLFNlLFIpeyFm'@;
put 'dW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO3ZhciBiPXswOiItXHUwNDQ3XHUwNGFmIiwxOiItXHUwNDQ3XHUwNDM4IiwyOiItXHUwNDQ3XHUwNDM4IiwzOiItXHUwNDQ3XHUwNGFmIiw0OiItXHUwNDQ3XHUwNGFmIiw1OiItXHUwNDQ3XHUwNDM4Iiw2OiItXHUwNDQ3XHUwNDRiIiw3OiItXHUw'@;
put 'NDQ3XHUwNDM4Iiw4OiItXHUwNDQ3XHUwNDM4Iiw5OiItXHUwNDQ3XHUwNDQzIiwxMDoiLVx1MDQ0N1x1MDQ0MyIsMjA6Ii1cdTA0NDdcdTA0NGIiLDMwOiItXHUwNDQ3XHUwNDQzIiw0MDoiLVx1MDQ0N1x1MDQ0YiIsNTA6Ii1cdTA0NDdcdTA0YWYiLDYwOiItXHUwNDQ3XHUwNDRiIiw3MDoi'@;
put 'LVx1MDQ0N1x1MDQzOCIsODA6Ii1cdTA0NDdcdTA0MzgiLDkwOiItXHUwNDQ3XHUwNDQzIiwxMDA6Ii1cdTA0NDdcdTA0YWYifTtlZS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQw'@;
put 'XHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUw'@;
put 'NDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1'@;
put 'MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0'@;
put 'NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2EiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1'@;
put 'MDQzNVx1MDQzYVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUwNDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDM4X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1'@;
put 'MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0'@;
put 'MTZcdTA0MzVcdTA0M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQz'@;
put 'YV9cdTA0MTRcdTA0MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVki'@;
put 'LExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0'@;
put 'Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0'@;
put 'V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRp'@;
put 'dmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUwNDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDdcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUw'@;
put 'NDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFc'@;
put 'dTA0MzhcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUw'@;
put 'NDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0'@;
put 'NDdcdTA0YWZ8XHUwNDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihYKXtyZXR1cm4gWCsoYltYXXx8YltYJTEwXXx8YltYPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sMzc5NDA6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNl'@;
put 'IHN0cmljdCI7ZnVuY3Rpb24gYihELFAsVSxJKXt2YXIgRT17bTpbImVuZyBNaW51dHQiLCJlbmdlciBNaW51dHQiXSxoOlsiZW5nIFN0b25uIiwiZW5nZXIgU3Rvbm4iXSxkOlsiZWVuIERhZyIsImVuZ2VtIERhZyJdLE06WyJlZSBNb3VudCIsImVuZ2VtIE1vdW50Il0seTpbImVlIEpvZXIi'@;
put 'LCJlbmdlbSBKb2VyIl19O3JldHVybiBQP0VbVV1bMF06RVtVXVsxXX1mdW5jdGlvbiB3KEQpe2lmKEQ9cGFyc2VJbnQoRCwxMCksaXNOYU4oRCkpcmV0dXJuITE7aWYoRDwwKXJldHVybiEwO2lmKEQ8MTApcmV0dXJuIDQ8PUQmJkQ8PTc7aWYoRDwxMDApe3ZhciBQPUQlMTA7cmV0dXJuIHco'@;
put 'MD09PVA/RC8xMDpQKX1pZihEPDFlNCl7Zm9yKDtEPj0xMDspRC89MTA7cmV0dXJuIHcoRCl9cmV0dXJuIHcoRC89MWUzKX1lZS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVlX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVy'@;
put 'X09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25uZGVnX01c'@;
put 'eGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4'@;
put 'ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1'@;
put 'ZXJdIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixsYXN0RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExU'@;
put 'IixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVUaW1lOntmdXR1cmU6ZnVuY3Rpb24gbShEKXty'@;
put 'ZXR1cm4gdyhELnN1YnN0cigwLEQuaW5kZXhPZigiICIpKSk/ImEgIitEOiJhbiAiK0R9LHBhc3Q6ZnVuY3Rpb24gWChEKXtyZXR1cm4gdyhELnN1YnN0cigwLEQuaW5kZXhPZigiICIpKSk/InZpcnUgIitEOiJ2aXJ1biAiK0R9LHM6ImUgcHVlciBTZWtvbm5lbiIsc3M6IiVkIFNla29ubmVu'@;
put 'IixtOmIsbW06IiVkIE1pbnV0dGVuIixoOmIsaGg6IiVkIFN0b25uZW4iLGQ6YixkZDoiJWQgRGVlZyIsTTpiLE1NOiIlZCBNXHhlOWludCIseTpiLHl5OiIlZCBKb2VyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0'@;
put 'fX0pfShSKDkzMTM3KSl9LDcyNjYzOmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgibG8iLHttb250aHM6Ilx1MGVhMVx1MGViMVx1MGU4N1x1MGU4MVx1MGVhZFx1MGU5OV9cdTBlODFcdTBlYjhcdTBlYTFcdTBlOWVcdTBlYjJf'@;
put 'XHUwZWExXHUwZWI1XHUwZTk5XHUwZWIyX1x1MGVjMFx1MGVhMVx1MGVhYVx1MGViMl9cdTBlOWVcdTBlYjZcdTBlOTRcdTBlYWFcdTBlYjBcdTBlOWVcdTBlYjJfXHUwZWExXHUwZWI0XHUwZTk2XHUwZWI4XHUwZTk5XHUwZWIyX1x1MGU4MVx1MGVjZFx1MGVhNVx1MGViMFx1MGU4MVx1MGVi'@;
put 'Ylx1MGU5NF9cdTBlYWFcdTBlYjRcdTBlODdcdTBlYWJcdTBlYjJfXHUwZTgxXHUwZWIxXHUwZTk5XHUwZThkXHUwZWIyX1x1MGU5NVx1MGViOFx1MGVhNVx1MGViMl9cdTBlOWVcdTBlYjBcdTBlODhcdTBlYjRcdTBlODFfXHUwZTk3XHUwZWIxXHUwZTk5XHUwZWE3XHUwZWIyIi5zcGxpdCgi'@;
put 'XyIpLG1vbnRoc1Nob3J0OiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUwZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIw'@;
put 'XHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2RcdTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBl'@;
put 'YjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwZWFkXHUwZWIyXHUwZTk3XHUwZWI0XHUwZTk0X1x1MGU4OFx1MGViMVx1MGU5OV9cdTBlYWRcdTBlYjFcdTBl'@;
put 'ODdcdTBlODRcdTBlYjJcdTBlOTlfXHUwZTllXHUwZWI4XHUwZTk0X1x1MGU5ZVx1MGViMFx1MGVhYlx1MGViMVx1MGU5NF9cdTBlYWFcdTBlYjhcdTBlODFfXHUwZWMwXHUwZWFhXHUwZWJiXHUwZWIyIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGU5N1x1MGViNFx1MGU5NF9cdTBl'@;
put 'ODhcdTBlYjFcdTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5'@;
put 'c01pbjoiXHUwZTk3X1x1MGU4OF9cdTBlYWRcdTBlODRfXHUwZTllX1x1MGU5ZVx1MGVhYl9cdTBlYWFcdTBlODFfXHUwZWFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM'@;
put 'TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6Ilx1MGVhN1x1MGViMVx1MGU5OWRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBlYmJcdTBlYzlcdTBlYjJ8XHUwZTk1XHUwZWFk'@;
put 'XHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Lyxpc1BNOmZ1bmN0aW9uKG0pe3JldHVybiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODciPT09bX0sbWVyaWRpZW06ZnVuY3Rpb24obSxYLHcpe3JldHVybiBtPDEyPyJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzBcdTBlOGFcdTBl'@;
put 'YmJcdTBlYzlcdTBlYjIiOiJcdTBlOTVcdTBlYWRcdTBlOTlcdTBlYzFcdTBlYTVcdTBlODcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGVhMVx1MGViN1x1MGVjOVx1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLG5leHREYXk6IltcdTBlYTFcdTBlYjdc'@;
put 'dTBlYzlcdTBlYWRcdTBlYjdcdTBlYzhcdTBlOTlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixuZXh0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVkY1x1MGVjOVx1MGViMlx1MGVjMFx1MGVhN1x1MGVhNVx1MGViMl0gTFQiLGxhc3REYXk6IltcdTBlYTFcdTBlYjdc'@;
put 'dTBlYzlcdTBlYTdcdTBlYjJcdTBlOTlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixsYXN0V2VlazoiW1x1MGVhN1x1MGViMVx1MGU5OV1kZGRkW1x1MGVjMVx1MGVhNVx1MGVjOVx1MGVhN1x1MGU5OVx1MGViNVx1MGVjOVx1MGVjMFx1MGVhN1x1MGVh'@;
put 'NVx1MGViMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGVhZFx1MGViNVx1MGU4MSAlcyIscGFzdDoiJXNcdTBlOWNcdTBlYzhcdTBlYjJcdTBlOTlcdTBlYTFcdTBlYjIiLHM6Ilx1MGU5YVx1MGVjZFx1MGVjOFx1MGVjMFx1MGU5N1x1MGViYlx1MGVjOFx1'@;
put 'MGViMlx1MGVjM1x1MGU5NFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsc3M6IiVkIFx1MGVhN1x1MGViNFx1MGU5OVx1MGViMlx1MGU5N1x1MGViNSIsbToiMSBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG1tOiIlZCBcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLGg6'@;
put 'IjEgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixoaDoiJWQgXHUwZThhXHUwZWJiXHUwZWM4XHUwZWE3XHUwZWMyXHUwZWExXHUwZTg3IixkOiIxIFx1MGVhMVx1MGViN1x1MGVjOSIsZGQ6IiVkIFx1MGVhMVx1MGViN1x1MGVjOSIsTToiMSBcdTBlYzBcdTBl'@;
put 'OTRcdTBlYjdcdTBlYWRcdTBlOTkiLE1NOiIlZCBcdTBlYzBcdTBlOTRcdTBlYjdcdTBlYWRcdTBlOTkiLHk6IjEgXHUwZTliXHUwZWI1Iix5eToiJWQgXHUwZTliXHUwZWI1In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovKFx1MGU5N1x1MGViNVx1MGVjOClcZHsxLDJ9LyxvcmRpbmFsOmZ1'@;
put 'bmN0aW9uKG0pe3JldHVybiJcdTBlOTdcdTBlYjVcdTBlYzgiK219fSl9KFIoOTMxMzcpKX0sMjgxMzA6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7dmFyIGI9e3NzOiJzZWt1bmRcdTAxMTdfc2VrdW5kXHUwMTdlaVx1MDE3M19zZWt1bmRlcyIsbToibWlu'@;
put 'dXRcdTAxMTdfbWludXRcdTAxMTdzX21pbnV0XHUwMTE5IixtbToibWludXRcdTAxMTdzX21pbnVcdTAxMGRpXHUwMTczX21pbnV0ZXMiLGg6InZhbGFuZGFfdmFsYW5kb3NfdmFsYW5kXHUwMTA1IixoaDoidmFsYW5kb3NfdmFsYW5kXHUwMTczX3ZhbGFuZGFzIixkOiJkaWVuYV9kaWVub3Nf'@;
put 'ZGllblx1MDEwNSIsZGQ6ImRpZW5vc19kaWVuXHUwMTczX2RpZW5hcyIsTToibVx1MDExN251b19tXHUwMTE3bmVzaW9fbVx1MDExN25lc1x1MDEyZiIsTU06Im1cdTAxMTduZXNpYWlfbVx1MDExN25lc2lcdTAxNzNfbVx1MDExN25lc2l1cyIseToibWV0YWlfbWV0XHUwMTczX21ldHVzIix5'@;
put 'eToibWV0YWlfbWV0XHUwMTczX21ldHVzIn07ZnVuY3Rpb24gWChVLEksRSxrKXtyZXR1cm4gST9BKEUpWzBdOms/QShFKVsxXTpBKEUpWzJdfWZ1bmN0aW9uIHcoVSl7cmV0dXJuIFUlMTA9PTB8fFU+MTAmJlU8MjB9ZnVuY3Rpb24gQShVKXtyZXR1cm4gYltVXS5zcGxpdCgiXyIpfWZ1bmN0'@;
put 'aW9uIEQoVSxJLEUsayl7dmFyIEI9VSsiICI7cmV0dXJuIDE9PT1VP0IrWCgwLEksRVswXSxrKTpJP0IrKHcoVSk/QShFKVsxXTpBKEUpWzBdKTprP0IrQShFKVsxXTpCKyh3KFUpP0EoRSlbMV06QShFKVsyXSl9ZWUuZGVmaW5lTG9jYWxlKCJsdCIse21vbnRoczp7Zm9ybWF0OiJzYXVzaW9f'@;
put 'dmFzYXJpb19rb3ZvX2JhbGFuZFx1MDE3ZWlvX2dlZ3VcdTAxN2VcdTAxMTdzX2Jpclx1MDE3ZWVsaW9fbGllcG9zX3J1Z3BqXHUwMTZiXHUwMTBkaW9fcnVnc1x1MDExN2pvX3NwYWxpb19sYXBrcmlcdTAxMGRpb19ncnVvZFx1MDE3ZWlvIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNhdXNp'@;
put 'c192YXNhcmlzX2tvdmFzX2JhbGFuZGlzX2dlZ3VcdTAxN2VcdTAxMTdfYmlyXHUwMTdlZWxpc19saWVwYV9ydWdwalx1MDE2YnRpc19ydWdzXHUwMTE3amlzX3NwYWxpc19sYXBrcml0aXNfZ3J1b2RpcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovRFtvRF0/KFxbW15cW1xdXSpcXXxccykrTU1N'@;
put 'TT98TU1NTT8oXFtbXlxbXF1dKlxdfFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoic2F1X3Zhc19rb3ZfYmFsX2dlZ19iaXJfbGllX3JncF9yZ3Nfc3BhX2xhcF9ncmQiLnNwbGl0KCJfIiksd2Vla2RheXM6e2Zvcm1hdDoic2VrbWFkaWVuXHUwMTJmX3Bpcm1hZGllblx1MDEyZl9hbnRyYWRp'@;
put 'ZW5cdTAxMmZfdHJlXHUwMTBkaWFkaWVuXHUwMTJmX2tldHZpcnRhZGllblx1MDEyZl9wZW5rdGFkaWVuXHUwMTJmX1x1MDE2MWVcdTAxNjF0YWRpZW5cdTAxMmYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToic2VrbWFkaWVuaXNfcGlybWFkaWVuaXNfYW50cmFkaWVuaXNfdHJlXHUwMTBkaWFk'@;
put 'aWVuaXNfa2V0dmlydGFkaWVuaXNfcGVua3RhZGllbmlzX1x1MDE2MWVcdTAxNjF0YWRpZW5pcyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovZGRkZCBISDptbS99LHdlZWtkYXlzU2hvcnQ6IlNla19QaXJfQW50X1RyZV9LZXRfUGVuX1x1MDE2MGVcdTAxNjEiLnNwbGl0KCJfIiksd2Vla2RheXNN'@;
put 'aW46IlNfUF9BX1RfS19Qbl9cdTAxNjAiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0iLExMTDoiWVlZWSBbbS5dIE1NTU0gRCBb'@;
put 'ZC5dLCBISDptbSBbdmFsLl0iLExMTEw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgZGRkZCwgSEg6bW0gW3ZhbC5dIixsOiJZWVlZLU1NLUREIixsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixsbGxsOiJZWVlZIFtt'@;
put 'Ll0gTU1NTSBEIFtkLl0sIGRkZCwgSEg6bW0gW3ZhbC5dIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTAxNjBpYW5kaWVuXSBMVCIsbmV4dERheToiW1J5dG9qXSBMVCIsbmV4dFdlZWs6ImRkZGQgTFQiLGxhc3REYXk6IltWYWthcl0gTFQiLGxhc3RXZWVrOiJbUHJhXHUwMTE3anVzXHUwMTJm'@;
put 'XSBkZGRkIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJwbyAlcyIscGFzdDoicHJpZVx1MDE2MSAlcyIsczpmdW5jdGlvbiBtKFUsSSxFLGspe3JldHVybiBJPyJrZWxpb3Mgc2VrdW5kXHUwMTE3cyI6az8ia2VsaVx1MDE3MyBzZWt1bmRcdTAxN2VpXHUwMTczIjoi'@;
put 'a2VsaWFzIHNla3VuZGVzIn0sc3M6RCxtOlgsbW06RCxoOlgsaGg6RCxkOlgsZGQ6RCxNOlgsTU06RCx5OlgseXk6RH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS1vamkvLG9yZGluYWw6ZnVuY3Rpb24oVSl7cmV0dXJuIFUrIi1vamkifSx3ZWVrOntkb3c6MSxkb3k6NH19KX0o'@;
put 'Uig5MzEzNykpfSwxNjM3NjpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17c3M6InNla3VuZGVzX3Nla3VuZFx1MDExM21fc2VrdW5kZV9zZWt1bmRlcyIuc3BsaXQoIl8iKSxtOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUw'@;
put 'MTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLG1tOiJtaW5cdTAxNmJ0ZXNfbWluXHUwMTZidFx1MDExM21fbWluXHUwMTZidGVfbWluXHUwMTZidGVzIi5zcGxpdCgiXyIpLGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGhoOiJzdHVuZGFz'@;
put 'X3N0dW5kXHUwMTAxbV9zdHVuZGFfc3R1bmRhcyIuc3BsaXQoIl8iKSxkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLGRkOiJkaWVuYXNfZGllblx1MDEwMW1fZGllbmFfZGllbmFzIi5zcGxpdCgiXyIpLE06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25l'@;
put 'XHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLE1NOiJtXHUwMTEzbmVcdTAxNjFhX21cdTAxMTNuZVx1MDE2MWllbV9tXHUwMTEzbmVzaXNfbVx1MDExM25lXHUwMTYxaSIuc3BsaXQoIl8iKSx5OiJnYWRhX2dhZGllbV9nYWRzX2dhZGkiLnNwbGl0'@;
put 'KCJfIikseXk6ImdhZGFfZ2FkaWVtX2dhZHNfZ2FkaSIuc3BsaXQoIl8iKX07ZnVuY3Rpb24gbShQLFUsSSl7cmV0dXJuIEk/VSUxMD09MSYmVSUxMDAhPTExP1BbMl06UFszXTpVJTEwPT0xJiZVJTEwMCE9MTE/UFswXTpQWzFdfWZ1bmN0aW9uIFgoUCxVLEkpe3JldHVybiBQKyIgIittKGJb'@;
put 'SV0sUCxVKX1mdW5jdGlvbiB3KFAsVSxJKXtyZXR1cm4gbShiW0ldLFAsVSl9ZWUuZGVmaW5lTG9jYWxlKCJsdiIse21vbnRoczoiamFudlx1MDEwMXJpc19mZWJydVx1MDEwMXJpc19tYXJ0c19hcHJcdTAxMmJsaXNfbWFpanNfalx1MDE2Ym5panNfalx1MDE2YmxpanNfYXVndXN0c19zZXB0'@;
put 'ZW1icmlzX29rdG9icmlzX25vdmVtYnJpc19kZWNlbWJyaXMiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYWlfalx1MDE2Ym5falx1MDE2YmxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic3ZcdTAxMTN0ZGllbmFfcGlybWRpZW5h'@;
put 'X290cmRpZW5hX3RyZVx1MDE2MWRpZW5hX2NldHVydGRpZW5hX3BpZWt0ZGllbmFfc2VzdGRpZW5hIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3ZfUF9PX1RfQ19Qa19TIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFy'@;
put 'c2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZLiIsTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NIixMTEw6IllZWVkuIFtnYWRhXSBELiBNTU1NLCBISDptbSIsTExMTDoiWVlZWS4gW2dhZGFdIEQuIE1NTU0sIGRkZGQsIEhI'@;
put 'Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTAxNjBvZGllbiBwdWxrc3Rlbl0gTFQiLG5leHREYXk6IltSXHUwMTJidCBwdWxrc3Rlbl0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWxrc3Rlbl0gTFQiLGxhc3REYXk6IltWYWthciBwdWxrc3Rlbl0gTFQiLGxhc3RXZWVrOiJbUGFnXHUwMTAx'@;
put 'anVcdTAxNjFcdTAxMDFdIGRkZGQgW3B1bGtzdGVuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicFx1MDExM2MgJXMiLHBhc3Q6InBpcm1zICVzIixzOmZ1bmN0aW9uIEEoUCxVKXtyZXR1cm4gVT8iZGFcdTAxN2VhcyBzZWt1bmRlcyI6ImRhXHUwMTdlXHUwMTAx'@;
put 'bSBzZWt1bmRcdTAxMTNtIn0sc3M6WCxtOncsbW06WCxoOncsaGg6WCxkOncsZGQ6WCxNOncsTU06WCx5OncseXk6WH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShSKDkzMTM3KSl9LDcwMjMyOmZ1bmN0aW9u'@;
put 'KCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO3ZhciBiPXt3b3Jkczp7c3M6WyJzZWt1bmQiLCJzZWt1bmRhIiwic2VrdW5kaSJdLG06WyJqZWRhbiBtaW51dCIsImplZG5vZyBtaW51dGEiXSxtbTpbIm1pbnV0IiwibWludXRhIiwibWludXRhIl0saDpbImplZGFuIHNhdCIs'@;
put 'ImplZG5vZyBzYXRhIl0saGg6WyJzYXQiLCJzYXRhIiwic2F0aSJdLGRkOlsiZGFuIiwiZGFuYSIsImRhbmEiXSxNTTpbIm1qZXNlYyIsIm1qZXNlY2EiLCJtamVzZWNpIl0seXk6WyJnb2RpbmEiLCJnb2RpbmUiLCJnb2RpbmEiXX0sY29ycmVjdEdyYW1tYXRpY2FsQ2FzZTpmdW5jdGlvbihY'@;
put 'LHcpe3JldHVybiAxPT09WD93WzBdOlg+PTImJlg8PTQ/d1sxXTp3WzJdfSx0cmFuc2xhdGU6ZnVuY3Rpb24oWCx3LEEpe3ZhciBEPWIud29yZHNbQV07cmV0dXJuIDE9PT1BLmxlbmd0aD93P0RbMF06RFsxXTpYKyIgIitiLmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoWCxEKX19O2VlLmRlZmlu'@;
put 'ZUxvY2FsZSgibWUiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5f'@;
put 'c2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRqZWxqYV9wb25lZGplbGpha191dG9yYWtfc3JpamVkYV9cdTAxMGRldHZydGFrX3BldGFrX3N1Ym90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZWQuX3Bvbi5fdXRv'@;
put 'Ll9zcmkuX1x1MDEwZGV0Ll9wZXQuX3N1Yi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Im5lX3BvX3V0X3NyX1x1MDEwZGVfcGVfc3UiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZ'@;
put 'IixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzanV0cmEgdV0gTFQiLG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMu'@;
put 'ZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExU'@;
put 'In19LGxhc3REYXk6IltqdVx1MDEwZGUgdV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuWyJbcHJvXHUwMTYxbGVdIFtuZWRqZWxqZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BvbmVkamVsamthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJb'@;
put 'cHJvXHUwMTYxbGVdIFtzcmlqZWRlXSBbdV0gTFQiLCJbcHJvXHUwMTYxbG9nXSBbXHUwMTBkZXR2cnRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3BldGthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzdWJvdGVdIFt1XSBMVCJdW3RoaXMuZGF5KCldfSxzYW1lRWxzZToiTCJ9LHJl'@;
put 'bGF0aXZlVGltZTp7ZnV0dXJlOiJ6YSAlcyIscGFzdDoicHJpamUgJXMiLHM6Im5la29saWtvIHNla3VuZGkiLHNzOmIudHJhbnNsYXRlLG06Yi50cmFuc2xhdGUsbW06Yi50cmFuc2xhdGUsaDpiLnRyYW5zbGF0ZSxoaDpiLnRyYW5zbGF0ZSxkOiJkYW4iLGRkOmIudHJhbnNsYXRlLE06Im1q'@;
put 'ZXNlYyIsTU06Yi50cmFuc2xhdGUseToiZ29kaW51Iix5eTpiLnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDQ0OTg4OmZ1bmN0aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihl'@;
put 'ZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgibWkiLHttb250aHM6IktvaGktdFx1MDEwMXRlX0h1aS10YW5ndXJ1X1BvdXRcdTAxNmItdGUtcmFuZ2lfUGFlbmdhLXdoXHUwMTAxd2hcdTAxMDFfSGFyYXR1YV9QaXBpcmlfSFx1MDE0ZG5nb2luZ29pX0hlcmUtdHVyaS1rXHUwMTRk'@;
put 'a1x1MDEwMV9NYWh1cnVfV2hpcmluZ2EtXHUwMTAxLW51a3VfV2hpcmluZ2EtXHUwMTAxLXJhbmdpX0hha2loZWEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IktvaGlfSHVpX1BvdV9QYWVfSGFyYV9QaXBpX0hcdTAxNGRuZ29pX0hlcmVfTWFodV9XaGktbnVfV2hpLXJhX0hha2kiLnNwbGl0'@;
put 'KCJfIiksbW9udGhzUmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwzfS9pLG1vbnRoc1Nob3J0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStc'@;
put 'LT8pezEsM30vaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDJ9L2ksd2Vla2RheXM6IlJcdTAxMDF0YXB1X01hbmVfVFx1MDE2YnJlaV9XZW5lcmVpX1RcdTAxMDFpdGVfUGFyYWlyZV9IXHUwMTAxdGFyZWkiLnNwbGl0KCJfIiks'@;
put 'd2Vla2RheXNTaG9ydDoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJUYV9NYV9UXHUwMTZiX1dlX1RcdTAxMDFpX1BhX0hcdTAxMDEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpz'@;
put 'cyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtpXSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW2ldIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltpIHRlaWUgbWFoYW5hLCBpXSBMVCIsbmV4dERheToiW2Fwb3BvIGldIExUIixu'@;
put 'ZXh0V2VlazoiZGRkZCBbaV0gTFQiLGxhc3REYXk6IltpbmFuYWhpIGldIExUIixsYXN0V2VlazoiZGRkZCBbd2hha2FtdXR1bmdhIGldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpIHJvdG8gaSAlcyIscGFzdDoiJXMgaSBtdWEiLHM6InRlIGhcdTAxMTNrb25h'@;
put 'IHJ1YXJ1YSIsc3M6IiVkIGhcdTAxMTNrb25hIixtOiJoZSBtZW5ldGkiLG1tOiIlZCBtZW5ldGkiLGg6InRlIGhhb3JhIixoaDoiJWQgaGFvcmEiLGQ6ImhlIHJhIixkZDoiJWQgcmEiLE06ImhlIG1hcmFtYSIsTU06IiVkIG1hcmFtYSIseToiaGUgdGF1Iix5eToiJWQgdGF1In0sZGF5T2ZN'@;
put 'b250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sMjEyMjI6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJtayIse21vbnRoczoiXHUw'@;
put 'NDU4XHUwNDMwXHUwNDNkXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQwXHUwNDM4XHUwNDNiX1x1MDQzY1x1MDQzMFx1MDQ1OF9c'@;
put 'dTA0NThcdTA0NDNcdTA0M2RcdTA0MzhfXHUwNDU4XHUwNDQzXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Ml9cdTA0NDFcdTA0MzVcdTA0M2ZcdTA0NDJcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNlXHUwNDNhXHUwNDQyXHUwNDNl'@;
put 'XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZFx1MDQzZVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0MzRcdTA0MzVcdTA0M2FcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQ1OFx1MDQzMFx1MDQzZF9cdTA0'@;
put 'NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNmX1x1MDQzZVx1MDQzYVx1MDQ0'@;
put 'Ml9cdTA0M2RcdTA0M2VcdTA0MzVfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQz'@;
put 'Mlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZFx1MDQzOFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDNlXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzBcdTA0'@;
put 'MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0X1x1MDQzZlx1MDQzZVx1MDQzZF9cdTA0MzJcdTA0NDJcdTA0M2VfXHUwNDQxXHUwNDQwXHUwNDM1X1x1MDQ0N1x1MDQzNVx1MDQ0Ml9cdTA0M2ZcdTA0MzVcdTA0NDJfXHUw'@;
put 'NDQxXHUwNDMwXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RlX1x1MDQzZm9fXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0MzVfXHUwNDNmXHUwNDM1X1x1MDQ0MWEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06'@;
put 'c3MiLEw6IkQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxNFx1MDQzNVx1MDQzZFx1MDQzNVx1MDQ0MSBcdTA0MzJcdTA0M2VdIExUIixuZXh0RGF5'@;
put 'OiJbXHUwNDIzXHUwNDQyXHUwNDQwXHUwNDM1IFx1MDQzMlx1MDQzZV0gTFQiLG5leHRXZWVrOiJbXHUwNDEyXHUwNDNlXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIFx1MDQzMlx1MDQzZV0gTFQiLGxhc3RXZWVrOmZ1'@;
put 'bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA2OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDMwXHUwNDQyXHUwNDMwXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpj'@;
put 'YXNlIDU6cmV0dXJuIltcdTA0MThcdTA0MzdcdTA0M2NcdTA0MzhcdTA0M2RcdTA0MzBcdTA0NDJcdTA0MzhcdTA0M2VcdTA0NDJdIGRkZGQgW1x1MDQzMlx1MDQzZV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0'@;
put 'M2ZcdTA0NDBcdTA0MzVcdTA0MzQgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQzYVx1MDQzZVx1MDQzYlx1MDQzYVx1MDQ0MyBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOiIlZCBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0Mzgi'@;
put 'LG06Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzgiLGg6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIl'@;
put 'ZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0MzRcdTA0MzVcdTA0M2QiLGRkOiIlZCBcdTA0MzRcdTA0MzVcdTA0M2RcdTA0MzAiLE06Ilx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0'@;
put 'NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzgiLHk6Ilx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzMCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiLHl5OiIlZCBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzgifSxkYXlP'@;
put 'Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0MzVcdTA0MzJ8XHUwNDM1XHUwNDNkfFx1MDQ0Mlx1MDQzOHxcdTA0MzJcdTA0Mzh8XHUwNDQwXHUwNDM4fFx1MDQzY1x1MDQzOCkvLG9yZGluYWw6ZnVuY3Rpb24obSl7dmFyIFg9bSUxMCx3PW0lMTAwO3JldHVybiAwPT09bT9tKyIt'@;
put 'XHUwNDM1XHUwNDMyIjowPT09dz9tKyItXHUwNDM1XHUwNDNkIjp3PjEwJiZ3PDIwP20rIi1cdTA0NDJcdTA0MzgiOjE9PT1YP20rIi1cdTA0MzJcdTA0MzgiOjI9PT1YP20rIi1cdTA0NDBcdTA0MzgiOjc9PT1YfHw4PT09WD9tKyItXHUwNDNjXHUwNDM4IjptKyItXHUwNDQyXHUwNDM4In0s'@;
put 'd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sOTI0ODc6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJtbCIse21vbnRoczoiXHUwZDFjXHUwZDI4XHUwZDQxXHUwZDM1XHUwZDMwXHUwZDNmX1x1MGQyYlx1MGQ0Nlx1'@;
put 'MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmVcdTBkM2VcdTBkN2NcdTBkMWFcdTBkNGRcdTBkMWFcdTBkNGRfXHUwZDBmXHUwZDJhXHUwZDRkXHUwZDMwXHUwZDNmXHUwZDdkX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2Ff'@;
put 'XHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4X1x1MGQxM1x1MGQxN1x1MGQzOFx1MGQ0ZFx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZF9cdTBkMzhcdTBkNDZcdTBkMmFcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRi'@;
put 'XHUwZDJjXHUwZDdjX1x1MGQyOFx1MGQzNVx1MGQwMlx1MGQyY1x1MGQ3Y19cdTBkMjFcdTBkM2ZcdTBkMzhcdTBkMDJcdTBkMmNcdTBkN2MiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGQxY1x1MGQyOFx1MGQ0MS5fXHUwZDJiXHUwZDQ2XHUwZDJjXHUwZDRkXHUwZDMwXHUwZDQxLl9c'@;
put 'dTBkMmVcdTBkM2VcdTBkN2MuX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZi5fXHUwZDJlXHUwZDQ3XHUwZDJmXHUwZDRkX1x1MGQxY1x1MGQ0Mlx1MGQ3YV9cdTBkMWNcdTBkNDJcdTBkMzJcdTBkNDguX1x1MGQxM1x1MGQxNy5fXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMx'@;
put 'XHUwZDRkXHUwZDMxLl9cdTBkMTJcdTBkMTVcdTBkNGRcdTBkMWZcdTBkNGIuX1x1MGQyOFx1MGQzNVx1MGQwMi5fXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBkMWVcdTBkM2VcdTBkMmZcdTBkMzFcdTBkM2Vc'@;
put 'dTBkMzRcdTBkNGRcdTBkMWFfXHUwZDI0XHUwZDNmXHUwZDE5XHUwZDRkXHUwZDE1XHUwZDMzXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQxYVx1MGQ0YVx1MGQzNVx1MGQ0ZFx1MGQzNVx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMmNcdTBkNDFcdTBkMjdcdTBkMjhcdTBkM2Vc'@;
put 'dTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlXHUwZDM0XHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0Nlx1MGQzM1x1MGQ0ZFx1MGQzM1x1MGQzZlx1MGQyZlx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzZcdTBkMjhcdTBkM2ZcdTBkMmZc'@;
put 'dTBkM2VcdTBkMzRcdTBkNGRcdTBkMWEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDdjX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQ3ZV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVfXHUwZDJjXHUwZDQxXHUwZDI3XHUw'@;
put 'ZDdiX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQwMl9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZfXHUwZDM2XHUwZDI4XHUwZDNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBkMWVcdTBkM2VfXHUwZDI0XHUwZDNmX1x1MGQxYVx1MGQ0YV9cdTBk'@;
put 'MmNcdTBkNDFfXHUwZDM1XHUwZDRkXHUwZDJmXHUwZDNlX1x1MGQzNVx1MGQ0Nl9cdTBkMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTFRTOiJBIGg6bW06c3MgLVx1MGQyOFx1MGQ0MSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZ'@;
put 'WVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSAtXHUwZDI4XHUwZDQxIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBkMDdcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNGRdIExUIixuZXh0RGF5OiJbXHUwZDI4'@;
put 'XHUwZDNlXHUwZDMzXHUwZDQ2XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDMyXHUwZDQ2XSBMVCIsbGFzdFdlZWs6IltcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVdIGRkZGQsIExUIixzYW1lRWxzZToi'@;
put 'TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiLHBhc3Q6IiVzIFx1MGQyZVx1MGQ0MVx1MGQ3Ylx1MGQyYVx1MGQ0ZCIsczoiXHUwZDA1XHUwZDdkXHUwZDJhIFx1MGQyOFx1MGQzZlx1MGQyZVx1MGQzZlx1MGQz'@;
put 'N1x1MGQxOVx1MGQ0ZFx1MGQxOVx1MGQ3ZSIsc3M6IiVkIFx1MGQzOFx1MGQ0Nlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ3Ylx1MGQyMVx1MGQ0ZCIsbToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQzZlx1MGQyOFx1MGQzZlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsbW06IiVkIFx1'@;
put 'MGQyZVx1MGQzZlx1MGQyOFx1MGQzZlx1MGQzMVx1MGQ0ZFx1MGQzMVx1MGQ0ZCIsaDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQxNVx1MGQ0Mlx1MGQ3YyIsaGg6IiVkIFx1MGQyZVx1MGQyM1x1MGQzZlx1MGQxNVx1MGQ0ZFx1MGQxNVx1'@;
put 'MGQ0Mlx1MGQ3YyIsZDoiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsZGQ6IiVkIFx1MGQyNlx1MGQzZlx1MGQzNVx1MGQzOFx1MGQwMiIsTToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQyZVx1MGQzZVx1MGQzOFx1MGQwMiIsTU06IiVkIFx1MGQy'@;
put 'ZVx1MGQzZVx1MGQzOFx1MGQwMiIseToiXHUwZDEyXHUwZDMwXHUwZDQxIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiIseXk6IiVkIFx1MGQzNVx1MGQ3Y1x1MGQzN1x1MGQwMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZnxcdTBkMzBcdTBk'@;
put 'M2VcdTBkMzVcdTBkM2ZcdTBkMzJcdTBkNDZ8XHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQzNFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZHxcdTBkMzVcdTBkNDhcdTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDJ8XHUwZDMwXHUw'@;
put 'ZDNlXHUwZDI0XHUwZDRkXHUwZDMwXHUwZDNmL2ksbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sWCl7cmV0dXJuIDEyPT09bSYmKG09MCksIlx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI9PT1YJiZtPj00fHwiXHUwZDA5XHUwZDFhXHUwZDRkXHUwZDFhIFx1MGQxNVx1MGQz'@;
put 'NFx1MGQzZlx1MGQxZVx1MGQ0ZFx1MGQxZVx1MGQ0ZCI9PT1YfHwiXHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyIj09PVg/bSsxMjptfSxtZXJpZGllbTpmdW5jdGlvbihtLFgsdyl7cmV0dXJuIG08ND8iXHUwZDMwXHUwZDNlXHUw'@;
put 'ZDI0XHUwZDRkXHUwZDMwXHUwZDNmIjptPDEyPyJcdTBkMzBcdTBkM2VcdTBkMzVcdTBkM2ZcdTBkMzJcdTBkNDYiOm08MTc/Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiOm08MjA/Ilx1MGQzNVx1MGQ0OFx1MGQx'@;
put 'NVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI6Ilx1MGQzMFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiJ9fSl9KFIoOTMxMzcpKX0sMzU5Nzc6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYihYLHcs'@;
put 'QSxEKXtzd2l0Y2goQSl7Y2FzZSJzIjpyZXR1cm4gdz8iXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0NVx1MDQ0ZFx1MDQzNFx1MDQ0NVx1MDQ0ZFx1MDQzZCBcdTA0NDFcdTA0MzVcdTA0M2Fc'@;
put 'dTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJcdTA0M2QiO2Nhc2Uic3MiOnJldHVybiBYKyh3PyIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCIpO2Nhc2UibSI6Y2FzZSJtbSI6cmV0'@;
put 'dXJuIFgrKHc/IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiIgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiXHUwNDNkIik7Y2FzZSJoIjpjYXNlImhoIjpyZXR1cm4gWCsodz8iIFx1MDQ0Nlx1MDQzMFx1MDQzMyI6IiBcdTA0NDZcdTA0MzBcdTA0MzNcdTA0'@;
put 'MzhcdTA0MzlcdTA0M2QiKTtjYXNlImQiOmNhc2UiZGQiOnJldHVybiBYKyh3PyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjoiIFx1MDRlOVx1MDQzNFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiTSI6Y2FzZSJNTSI6cmV0dXJuIFgrKHc/IiBcdTA0NDFcdTA0MzBcdTA0NDAi'@;
put 'OiIgXHUwNDQxXHUwNDMwXHUwNDQwXHUwNDRiXHUwNDNkIik7Y2FzZSJ5IjpjYXNlInl5IjpyZXR1cm4gWCsodz8iIFx1MDQzNlx1MDQzOFx1MDQzYiI6IiBcdTA0MzZcdTA0MzhcdTA0M2JcdTA0MzhcdTA0MzlcdTA0M2QiKTtkZWZhdWx0OnJldHVybiBYfX1lZS5kZWZpbmVMb2NhbGUoIm1u'@;
put 'Iix7bW9udGhzOiJcdTA0MWRcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQyNVx1MDQzZVx1MDQ1MVx1MDQ0MFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBf'@;
put 'XHUwNDEzXHUwNDQzXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTRcdTA0ZTlcdTA0NDBcdTA0ZTlcdTA0MzJcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMw'@;
put 'XHUwNDQwX1x1MDQyMlx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE3XHUwNDQzXHUwNDQwXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0'@;
put 'MF9cdTA0MTRcdTA0M2VcdTA0M2JcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxZFx1MDQzMFx1MDQzOVx1MDQzY1x1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE1XHUw'@;
put 'NDQxXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1'@;
put 'MDQzZCBcdTA0M2RcdTA0NGRcdTA0MzNcdTA0MzRcdTA0YWZcdTA0MzNcdTA0NGRcdTA0NGRcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxMFx1MDQ0MFx1MDQzMlx1MDQzMFx1MDQzZCBcdTA0NDVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBc'@;
put 'dTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxIFx1MDQ0MVx1MDQzMFx1MDQ0MF8yIFx1MDQ0MVx1MDQzMFx1MDQ0MF8zIFx1MDQ0MVx1MDQzMFx1MDQ0MF80IFx1MDQ0MVx1MDQzMFx1MDQ0MF81IFx1MDQ0MVx1MDQzMFx1MDQ0MF82IFx1MDQ0MVx1'@;
put 'MDQzMFx1MDQ0MF83IFx1MDQ0MVx1MDQzMFx1MDQ0MF84IFx1MDQ0MVx1MDQzMFx1MDQ0MF85IFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMCBcdTA0NDFcdTA0MzBcdTA0NDBfMTEgXHUwNDQxXHUwNDMwXHUwNDQwXzEyIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4'@;
put 'YWN0OiEwLHdlZWtkYXlzOiJcdTA0MWRcdTA0NGZcdTA0M2NfXHUwNDE0XHUwNDMwXHUwNDMyXHUwNDMwXHUwNDMwX1x1MDQxY1x1MDQ0Zlx1MDQzM1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MWJcdTA0NDVcdTA0MzBcdTA0MzNcdTA0MzJcdTA0MzBfXHUwNDFmXHUwNGFmXHUwNDQwXHUwNDRk'@;
put 'XHUwNDMyX1x1MDQxMVx1MDQzMFx1MDQzMFx1MDQ0MVx1MDQzMFx1MDQzZF9cdTA0MTFcdTA0NGZcdTA0M2NcdTA0MzFcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMl9cdTA0MWNcdTA0NGZcdTA0MzNfXHUwNDFi'@;
put 'XHUwNDQ1XHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MF9cdTA0MTFcdTA0MzBcdTA0MzBfXHUwNDExXHUwNDRmXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MWRcdTA0NGZfXHUwNDE0XHUwNDMwX1x1MDQxY1x1MDQ0Zl9cdTA0MWJcdTA0NDVfXHUwNDFmXHUwNGFmX1x1MDQx'@;
put 'MVx1MDQzMF9cdTA0MTFcdTA0NGYiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQiLExMTDoi'@;
put 'WVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIixMTExMOiJkZGRkLCBZWVlZIFx1MDQzZVx1MDQzZFx1MDQ0YiBNTU1NXHUwNDRiXHUwNDNkIEQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA0YWVcdTA0ZTh8XHUwNGFlXHUwNDI1L2ksaXNQTTpmdW5j'@;
put 'dGlvbihYKXtyZXR1cm4iXHUwNGFlXHUwNDI1Ij09PVh9LG1lcmlkaWVtOmZ1bmN0aW9uKFgsdyxBKXtyZXR1cm4gWDwxMj8iXHUwNGFlXHUwNGU4IjoiXHUwNGFlXHUwNDI1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0ZThcdTA0M2RcdTA0ZTlcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDBd'@;
put 'IExUIixuZXh0RGF5OiJbXHUwNDFjXHUwNDMwXHUwNDQwXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQ4XSBMVCIsbmV4dFdlZWs6IltcdTA0MThcdTA0NDBcdTA0NGRcdTA0NDVdIGRkZGQgTFQiLGxhc3REYXk6IltcdTA0ZThcdTA0NDdcdTA0MzhcdTA0MzNcdTA0MzRcdTA0ZTlcdTA0NDBdIExU'@;
put 'IixsYXN0V2VlazoiW1x1MDRlOFx1MDQzZFx1MDQzM1x1MDRlOVx1MDQ0MFx1MDQ0MVx1MDRlOVx1MDQzZF0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNDM0XHUwNDMwXHUwNDQwXHUwNDMwXHUwNDMwIixwYXN0OiIlcyBcdTA0ZTlcdTA0M2Nc'@;
put 'dTA0M2RcdTA0ZTkiLHM6YixzczpiLG06YixtbTpiLGg6YixoaDpiLGQ6YixkZDpiLE06YixNTTpiLHk6Yix5eTpifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MDRlOVx1MDQzNFx1MDRlOVx1MDQ0MC8sb3JkaW5hbDpmdW5jdGlvbihYLHcpe3N3aXRjaCh3KXtjYXNlImQi'@;
put 'OmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBYKyIgXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwIjtkZWZhdWx0OnJldHVybiBYfX19KX0oUig5MzEzNykpfSw4OTkxNzpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiXHUwOTY3IiwyOiJcdTA5'@;
put 'NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbT17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUw'@;
put 'OTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBYKEEsRCxQLFUpe3ZhciBJPSIiO2lmKEQpc3dpdGNoKFApe2Nhc2UicyI6ST0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkw'@;
put 'Mlx1MDkyNiI7YnJlYWs7Y2FzZSJzcyI6ST0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOkk9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1'@;
put 'MDkzZlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpJPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImhoIjpJPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiZCI6ST0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7'@;
put 'YnJlYWs7Y2FzZSJkZCI6ST0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOkk9Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOkk9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJl'@;
put 'YWs7Y2FzZSJ5IjpJPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpJPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVsc2Ugc3dpdGNoKFApe2Nhc2UicyI6ST0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1'@;
put 'MDk0N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6ST0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIm0iOkk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5'@;
put 'MWZcdTA5M2UiO2JyZWFrO2Nhc2UibW0iOkk9IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJoIjpJPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpJPSIlZCBcdTA5MjRc'@;
put 'dTA5M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6ST0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6ST0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0i'@;
put 'Okk9Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOkk9IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpJPSJcdTA5MGZcdTA5'@;
put 'MTVcdTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpJPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBJLnJlcGxhY2UoLyVkL2ksQSl9ZWUuZGVmaW5lTG9jYWxlKCJtciIse21vbnRoczoiXHUwOTFjXHUw'@;
put 'OTNlXHUwOTI4XHUwOTQ3XHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MVx1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MF9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmXHUw'@;
put 'OTMyX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4X1x1MDkxMVx1MDkxN1x1MDkzOFx1MDk0ZFx1MDkxZl9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBfXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFm'@;
put 'XHUwOTRiXHUwOTJjXHUwOTMwX1x1MDkyOFx1MDk0Ylx1MDkzNVx1MDk0ZFx1MDkzOVx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0'@;
put 'Ny5fXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWEuX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTQ3Ll9cdTA5MWNcdTA5NDJcdTA5MjguX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDk0OC5f'@;
put 'XHUwOTExXHUwOTE3Ll9cdTA5MzhcdTA5MmFcdTA5NGRcdTA5MWZcdTA5NDdcdTA5MDIuX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Yi5fXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyLl9cdTA5MjFcdTA5M2ZcdTA5MzhcdTA5NDdcdTA5MDIuIi5zcGxp'@;
put 'dCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MDkzMFx1MDkzNVx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5NGJcdTA5MmVcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDk0'@;
put 'MVx1MDkyN1x1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDkyOFx1MDkzZlx1MDkzNVx1MDkzZVx1MDkzMCIuc3BsaXQoIl8i'@;
put 'KSx3ZWVrZGF5c1Nob3J0OiJcdTA5MzBcdTA5MzVcdTA5M2ZfXHUwOTM4XHUwOTRiXHUwOTJlX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzM19cdTA5MmNcdTA5NDFcdTA5MjdfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMF9cdTA5MzZcdTA5'@;
put 'MjhcdTA5M2YiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkzMF9cdTA5MzhcdTA5NGJfXHUwOTJlXHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MTdcdTA5NDFfXHUwOTM2XHUwOTQxX1x1MDkzNiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSBcdTA5MzVcdTA5M2Vc'@;
put 'dTA5MWNcdTA5MjRcdTA5M2UiLExUUzoiQSBoOm1tOnNzIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMTExMOiJkZGRk'@;
put 'LCBEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkwOVx1MDkyNlx1MDk0ZFx1MDkyZlx1MDkzZV0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERh'@;
put 'eToiW1x1MDkxNVx1MDkzZVx1MDkzMl0gTFQiLGxhc3RXZWVrOiJbXHUwOTJlXHUwOTNlXHUwOTE3XHUwOTQwXHUwOTMyXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5MjdcdTA5NGRcdTA5MmZcdTA5NDciLHBhc3Q6IiVzXHUwOTJh'@;
put 'XHUwOTQyXHUwOTMwXHUwOTRkXHUwOTM1XHUwOTQwIixzOlgsc3M6WCxtOlgsbW06WCxoOlgsaGg6WCxkOlgsZGQ6WCxNOlgsTU06WCx5OlgseXk6WH0scHJlcGFyc2U6ZnVuY3Rpb24oQSl7cmV0dXJuIEEucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1'@;
put 'MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihEKXtyZXR1cm4gbVtEXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEEpe3JldHVybiBBLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oRCl7cmV0dXJuIGJbRF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFm'@;
put 'XHUwOTQ3fFx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MHxcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDB8XHUwOTM4XHUwOTNlXHUwOTJmXHUwOTAyXHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MC8sbWVy'@;
put 'aWRpZW1Ib3VyOmZ1bmN0aW9uKEEsRCl7cmV0dXJuIDEyPT09QSYmKEE9MCksIlx1MDkyYVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI9PT1EfHwiXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIj09PUQ/QToiXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIj09PUR8'@;
put 'fCJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09RHx8Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCI9PT1EP0E+PTEyP0E6QSsxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKEEsRCxQKXtyZXR1cm4gQT49MCYmQTw2PyJc'@;
put 'dTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5NDciOkE8MTI/Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6QTwxNz8iXHUwOTI2XHUwOTQxXHUwOTJhXHUwOTNlXHUwOTMwXHUwOTQwIjpBPDIwPyJcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5'@;
put 'NDAiOiJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5NGRcdTA5MzBcdTA5NDAifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oUig5MzEzNykpfSw0MjAyMTpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0IjtlZS5kZWZpbmVMb2NhbGUoIm1zLW15Iix7bW9udGhzOiJKYW51'@;
put 'YXJpX0ZlYnJ1YXJpX01hY19BcHJpbF9NZWlfSnVuX0p1bGFpX09nb3NfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGlzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9PZ3NfU2VwX09rdF9Ob3ZfRGlzIi5zcGxpdCgiXyIpLHdl'@;
put 'ZWtkYXlzOiJBaGFkX0lzbmluX1NlbGFzYV9SYWJ1X0toYW1pc19KdW1hYXRfU2FidHUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWhkX0lzbl9TZWxfUmFiX0toYV9KdW1fU2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBaF9Jc19TbF9SYl9LbV9KbV9TYiIuc3BsaXQoIl8iKSxs'@;
put 'b25nRGF0ZUZvcm1hdDp7TFQ6IkhILm1tIixMVFM6IkhILm1tLnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgW3B1a3VsXSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L3BhZ2l8'@;
put 'dGVuZ2FoYXJpfHBldGFuZ3xtYWxhbS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKG0sWCl7cmV0dXJuIDEyPT09bSYmKG09MCksInBhZ2kiPT09WD9tOiJ0ZW5nYWhhcmkiPT09WD9tPj0xMT9tOm0rMTI6InBldGFuZyI9PT1YfHwibWFsYW0iPT09WD9tKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVu'@;
put 'Y3Rpb24obSxYLHcpe3JldHVybiBtPDExPyJwYWdpIjptPDE1PyJ0ZW5nYWhhcmkiOm08MTk/InBldGFuZyI6Im1hbGFtIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltIYXJpIGluaSBwdWt1bF0gTFQiLG5leHREYXk6IltFc29rIHB1a3VsXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3B1a3VsXSBMVCIs'@;
put 'bGFzdERheToiW0tlbG1hcmluIHB1a3VsXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2xlcGFzIHB1a3VsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGVwYXMiLHM6ImJlYmVyYXBhIHNhYXQiLHNzOiIlZCBzYWF0IixtOiJz'@;
put 'ZW1pbml0IixtbToiJWQgbWluaXQiLGg6InNlamFtIixoaDoiJWQgamFtIixkOiJzZWhhcmkiLGRkOiIlZCBoYXJpIixNOiJzZWJ1bGFuIixNTToiJWQgYnVsYW4iLHk6InNldGFodW4iLHl5OiIlZCB0YWh1biJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShSKDkzMTM3KSl9LDYzNjQ2OmZ1bmN0'@;
put 'aW9uKCRlLFNlLFIpeyFmdW5jdGlvbihlZSl7InVzZSBzdHJpY3QiO2VlLmRlZmluZUxvY2FsZSgibXMiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxt'@;
put 'b250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9S'@;
put 'YWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBb'@;
put 'cHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhhcml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24obSxYKXtyZXR1cm4gMTI9PT1tJiYobT0wKSwicGFnaSI9PT1YP206InRlbmdh'@;
put 'aGFyaSI9PT1YP20+PTExP206bSsxMjoicGV0YW5nIj09PVh8fCJtYWxhbSI9PT1YP20rMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihtLFgsdyl7cmV0dXJuIG08MTE/InBhZ2kiOm08MTU/InRlbmdhaGFyaSI6bTwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToi'@;
put 'W0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7'@;
put 'ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQiLG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxh'@;
put 'biIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KFIoOTMxMzcpKX0sNzA0OTU6ZnVuY3Rpb24oJGUsU2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJtdCIse21vbnRoczoiSmFubmFyX0ZyYXJfTWFyenVfQXBy'@;
put 'aWxfTWVqanVfXHUwMTIwdW5qdV9MdWxqdV9Bd3dpc3N1X1NldHRlbWJydV9PdHR1YnJ1X05vdmVtYnJ1X0RpXHUwMTBiZW1icnUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GcmFfTWFyX0Fwcl9NZWpfXHUwMTIwdW5fTHVsX0F3d19TZXRfT3R0X05vdl9EaVx1MDEwYiIuc3BsaXQo'@;
put 'Il8iKSx3ZWVrZGF5czoiSWwtXHUwMTI2YWRkX0l0LVRuZWpuX0l0LVRsaWV0YV9MLUVyYmdcdTAxMjdhX0lsLVx1MDEyNmFtaXNfSWwtXHUwMTIwaW1nXHUwMTI3YV9Jcy1TaWJ0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDEyNmFkX1RuZV9UbGlfRXJiX1x1MDEyNmFtX1x1MDEy'@;
put 'MGltX1NpYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwMTI2YV9Ubl9UbF9Fcl9cdTAxMjZhX1x1MDEyMGlfU2kiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1N'@;
put 'TSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWxsdW0gZmlsLV1MVCIsbmV4dERheToiW0dcdTAxMjdhZGEgZmlsLV1MVCIsbmV4dFdlZWs6ImRkZGQgW2ZpbC1dTFQiLGxhc3REYXk6IltJbC1iaWVyYVx1MDEyNyBmaWwt'@;
put 'XUxUIixsYXN0V2VlazoiZGRkZCBbbGkgZ1x1MDEyN2FkZGFdIFtmaWwtXUxUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJmXHUyMDE5ICVzIixwYXN0OiIlcyBpbHUiLHM6ImZ0aXQgc2Vrb25kaSIsc3M6IiVkIHNla29uZGkiLG06Im1pbnV0YSIsbW06IiVkIG1pbnV0'@;
put 'aSIsaDoic2llZ1x1MDEyN2EiLGhoOiIlZCBzaWVnXHUwMTI3YXQiLGQ6Ilx1MDEyMXVybmF0YSIsZGQ6IiVkIFx1MDEyMXJhbmV0IixNOiJ4YWhhciIsTU06IiVkIHhodXIiLHk6InNlbmEiLHl5OiIlZCBzbmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5h'@;
put 'bDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw5MTQ2ODpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0'@;
put 'NiIsNzoiXHUxMDQ3Iiw4OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sbT17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5Ijoi'@;
put 'OSIsIlx1MTA0MCI6IjAifTtlZS5kZWZpbmVMb2NhbGUoIm15Iix7bW9udGhzOiJcdTEwMDdcdTEwMTRcdTEwM2FcdTEwMTRcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE2XHUxMDMxXHUxMDE2XHUxMDMxXHUxMDJjXHUxMDNhXHUxMDFkXHUxMDJiXHUxMDFiXHUxMDJlX1x1MTAxOVx1'@;
put 'MTAxMFx1MTAzYV9cdTEwMjdcdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMDdcdTEwMzBcdTEwMWNcdTEwMmRcdTEwMmZcdTEwMDRcdTEwM2FfXHUxMDFlXHUxMDNjXHUxMDAyXHUxMDJmXHUxMDEwXHUxMDNhX1x1MTAwNVx1MTAw'@;
put 'MFx1MTAzYVx1MTAxMFx1MTAwNFx1MTAzYVx1MTAxOFx1MTAyY19cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FcdTEwMTBcdTEwMmRcdTEwMmZcdTEwMThcdTEwMmNfXHUxMDE0XHUxMDJkXHUxMDJmXHUxMDFkXHUxMDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAxMlx1MTAyZVx1MTAw'@;
put 'N1x1MTAwNFx1MTAzYVx1MTAxOFx1MTAyYyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUxMDA3XHUxMDE0XHUxMDNhX1x1MTAxNlx1MTAzMV9cdTEwMTlcdTEwMTBcdTEwM2FfXHUxMDE1XHUxMDNjXHUxMDJlX1x1MTAxOVx1MTAzMV9cdTEwMDdcdTEwM2RcdTEwMTRcdTEwM2FfXHUxMDFj'@;
put 'XHUxMDJkXHUxMDJmXHUxMDA0XHUxMDNhX1x1MTAxZVx1MTAzY19cdTEwMDVcdTEwMDBcdTEwM2FfXHUxMDIxXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNhX1x1MTAxNFx1MTAyZFx1MTAyZl9cdTEwMTJcdTEwMmUiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MTAxMFx1MTAxNFx1MTAwNFx1MTAz'@;
put 'YVx1MTAzOVx1MTAwMlx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMTBcdTEwMTRcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMWNcdTEwMmNfXHUxMDIxXHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUxMDJiX1x1MTAxN1x1MTAyZlx1MTAxMlx1MTAzOVx1MTAxM1x1MTAxZlx1MTAzMFx1MTAzOF9cdTEw'@;
put 'MDBcdTEwM2NcdTEwMmNcdTEwMWVcdTEwMTVcdTEwMTBcdTEwMzFcdTEwMzhfXHUxMDFlXHUxMDMxXHUxMDJjXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAwNVx1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTEwMTRcdTEwM2RcdTEwMzFfXHUxMDFjXHUxMDJjX1x1MTAw'@;
put 'Mlx1MTAyYl9cdTEwMWZcdTEwMzBcdTEwMzhfXHUxMDAwXHUxMDNjXHUxMDJjX1x1MTAxZVx1MTAzMVx1MTAyY19cdTEwMTRcdTEwMzEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1MTAzMFx1MTAz'@;
put 'OF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM'@;
put 'TEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTAxYVx1MTAxNFx1MTAzMS5dIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixuZXh0RGF5OiJbXHUxMDE5XHUxMDE0XHUxMDAwXHUxMDNhXHUxMDE2XHUxMDNjXHUxMDE0XHUxMDNhXSBMVCBbXHUxMDE5'@;
put 'XHUxMDNlXHUxMDJjXSIsbmV4dFdlZWs6ImRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLGxhc3REYXk6IltcdTEwMTlcdTEwMTRcdTEwMzEuXHUxMDAwXSBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdFdlZWs6IltcdTEwMTVcdTEwM2NcdTEwMmVcdTEwMzhcdTEwMDFcdTEwMzJc'@;
put 'dTEwMzdcdTEwMWVcdTEwMzFcdTEwMmNdIGRkZGQgTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MTAxY1x1MTAyY1x1MTAxOVx1MTAwYVx1MTAzYVx1MTAzNyAlcyBcdTEwMTlcdTEwM2VcdTEwMmMiLHBhc3Q6Ilx1MTAxY1x1'@;
put 'MTAzZFx1MTAxNFx1MTAzYVx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAzMVx1MTAyYyAlcyBcdTEwMDAiLHM6Ilx1MTAwNVx1MTAwMFx1MTAzOVx1MTAwMFx1MTAxNFx1MTAzYS5cdTEwMjFcdTEwMTRcdTEwMGFcdTEwM2FcdTEwMzhcdTEwMDRcdTEwMWFcdTEwM2EiLHNzOiIlZCBcdTEw'@;
put 'MDVcdTEwMDBcdTEwMzlcdTEwMDBcdTEwMTRcdTEwMzdcdTEwM2EiLG06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsbW06IiVkIFx1MTAxOVx1MTAyZFx1MTAxNFx1MTAwNVx1MTAzYSIsaDoiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDJj'@;
put 'XHUxMDFiXHUxMDJlIixoaDoiJWQgXHUxMDE0XHUxMDJjXHUxMDFiXHUxMDJlIixkOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMWJcdTEwMDBcdTEwM2EiLGRkOiIlZCBcdTEwMWJcdTEwMDBcdTEwM2EiLE06Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYyIsTU06IiVkIFx1MTAxYyIseToiXHUx'@;
put 'MDEwXHUxMDA1XHUxMDNhXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIix5eToiJWQgXHUxMDE0XHUxMDNlXHUxMDA1XHUxMDNhIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MTA0MVx1MTA0Mlx1MTA0M1x1MTA0NFx1MTA0NVx1MTA0Nlx1MTA0N1x1MTA0OFx1'@;
put 'MTA0OVx1MTA0MF0vZyxmdW5jdGlvbihBKXtyZXR1cm4gbVtBXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KFIoOTMxMzcpKX0sNTU1NDI6ZnVuY3Rpb24oJGUs'@;
put 'U2UsUil7IWZ1bmN0aW9uKGVlKXsidXNlIHN0cmljdCI7ZWUuZGVmaW5lTG9jYWxlKCJuYiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNT'@;
put 'aG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzXHhmOG5kYWdfbWFuZGFnX3RpcnNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY4cmRhZyIu'@;
put 'c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmOC5fbWEuX3RpLl9vbi5fdG8uX2ZyLl9sXHhmOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY4X21hX3RpX29uX3RvX2ZyX2xceGY4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6'@;
put 'IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHRE'@;
put 'YXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoiZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVrOiJbZm9ycmlnZV0gZGRkZCBba2wuXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNp'@;
put 'ZGVuIixzOiJub2VuIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImV0dCBtaW51dHQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlciIsdzoiZW4gdWtlIix3dzoiJWQgdWtlciIsTToiZW4gbVx4ZTVuZWQiLE1N'@;
put 'OiIlZCBtXHhlNW5lZGVyIix5OiJldHQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oUig5MzEzNykpfSw4ODQwNzpmdW5jdGlvbigkZSxTZSxSKXshZnVuY3Rpb24oZWUp'@;
put 'eyJ1c2Ugc3RyaWN0Ijt2YXIgYj17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sbT17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUw'@;
put 'OTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtlZS5kZWZpbmVMb2NhbGUoIm5lIix7bW9udGhzOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUw'@;
put 'OTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFc'@;
put 'dTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM3XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRi'@;
put 'XHUwOTJkXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTI4Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1'@;
put 'MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2YuX1x1MDkyZVx1MDkwOF9cdTA5MWNcdTA5NDFcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4Ll9cdTA5MDVcdTA5MTcuX1x1MDkzOFx1MDk0N1x1MDkyYVx1MDk0ZFx1'@;
put 'MDkxZi5fXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5NDcuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0Ny4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTA3XHUwOTI0XHUwOTJjXHUwOTNlXHUw'@;
put 'OTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MTlcdTA5NGRcdTA5MTdcdTA5MzJcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZlx1MDkyY1x1MDkzZVx1'@;
put 'MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkwN1x1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVc'@;
put 'dTA5MTlcdTA5NGRcdTA5MTdcdTA5MzIuX1x1MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmLl9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDkyOFx1MDkzZi4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNi5fXHUwOTM4XHUw'@;
put 'OTRiLl9cdTA5MmVcdTA5MDIuX1x1MDkyY1x1MDk0MS5fXHUwOTJjXHUwOTNmLl9cdTA5MzZcdTA5NDEuX1x1MDkzNi4iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTFRT'@;
put 'OiJBXHUwOTE1XHUwOTRiIGg6bW06c3MgXHUwOTJjXHUwOTFjXHUwOTQ3IixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBXHUwOTE1'@;
put 'XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihBKXtyZXR1cm4gbVtBXX0pfSxw'@;
put 'b3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oQSl7cmV0dXJuIGJbQV19KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmfFx1MDkyY1x1MDkzZlx1MDkzOVx1MDkzZVx1MDkyOHxcdTA5MjZcdTA5M2ZcdTA5MDlcdTA5'@;
pu